[med-svn] [seqtools] 01/02: New upstream version 4.44.1

Andreas Tille tille at debian.org
Thu Oct 19 15:34:05 UTC 2017


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

tille pushed a commit to branch master
in repository seqtools.

commit 8783e32f0e16fb9b9420b3ba3e73c53e53fc2063
Author: Andreas Tille <tille at debian.org>
Date:   Thu Oct 19 17:30:01 2017 +0200

    New upstream version 4.44.1
---
 AUTHORS                                         |     7 +
 COPYING                                         |   674 +
 ChangeLog                                       | 15456 +++++++++++++++++
 INSTALL                                         |   379 +
 INSTALL.linux                                   |    89 +
 INSTALL.mac                                     |    85 +
 INSTALL.windows                                 |    90 +
 Makefile.am                                     |    37 +
 Makefile.am.common                              |    14 +
 Makefile.in                                     |   804 +
 NEWS                                            |     3 +
 README                                          |    63 +
 aclocal.m4                                      |  1346 ++
 belvuApp/Makefile.am                            |    32 +
 belvuApp/Makefile.in                            |   727 +
 belvuApp/belvu.cpp                              |  4999 ++++++
 belvuApp/belvuAlignment.cpp                     |  1861 +++
 belvuApp/belvuAlignment.hpp                     |    74 +
 belvuApp/belvuConsPlot.cpp                      |   648 +
 belvuApp/belvuConsPlot.hpp                      |    47 +
 belvuApp/belvuMain.cpp                          |  1023 ++
 belvuApp/belvuTree.cpp                          |  2842 ++++
 belvuApp/belvuTree.hpp                          |    76 +
 belvuApp/belvuWindow.cpp                        |  4154 +++++
 belvuApp/belvuWindow.hpp                        |    61 +
 belvuApp/belvu_.hpp                             |   577 +
 blixemApp/Makefile.am                           |    54 +
 blixemApp/Makefile.in                           |  1232 ++
 blixemApp/bigpicture.cpp                        |  1547 ++
 blixemApp/bigpicture.hpp                        |   197 +
 blixemApp/bigpicturegrid.cpp                    |   878 +
 blixemApp/bigpicturegrid.hpp                    |   100 +
 blixemApp/blixem_.hpp                           |   735 +
 blixemApp/blxFetch.cpp                          |  3697 +++++
 blixemApp/blxFetchDb.cpp                        |   273 +
 blixemApp/blxcontext.cpp                        |  1202 ++
 blixemApp/blxcontext.hpp                        |   186 +
 blixemApp/blxdotter.cpp                         |  2401 +++
 blixemApp/blxdotter.hpp                         |    62 +
 blixemApp/blxmain.cpp                           |   902 +
 blixemApp/blxpanel.cpp                          |   318 +
 blixemApp/blxpanel.hpp                          |   106 +
 blixemApp/blxview.cpp                           |  2012 +++
 blixemApp/blxview.hpp                           |    42 +
 blixemApp/blxwindow.cpp                         |  6862 ++++++++
 blixemApp/blxwindow.hpp                         |   121 +
 blixemApp/coverageview.cpp                      |   716 +
 blixemApp/coverageview.hpp                      |   114 +
 blixemApp/detailview.cpp                        |  6535 ++++++++
 blixemApp/detailview.hpp                        |   369 +
 blixemApp/detailviewtree.cpp                    |  3182 ++++
 blixemApp/detailviewtree.hpp                    |   136 +
 blixemApp/exonview.cpp                          |   929 ++
 blixemApp/exonview.hpp                          |    66 +
 blixemApp/sequencecellrenderer.cpp              |  1679 ++
 blixemApp/sequencecellrenderer.hpp              |   102 +
 config.h.in                                     |   151 +
 config/compile                                  |   347 +
 config/depcomp                                  |   791 +
 config/install-sh                               |   527 +
 config/missing                                  |   215 +
 configure                                       |  7204 ++++++++
 configure.ac                                    |   130 +
 doc/Design_notes/Makefile                       |   592 +
 doc/Design_notes/Makefile.am                    |    13 +
 doc/Design_notes/Makefile.in                    |   592 +
 doc/Design_notes/architecture.html              |    23 +
 doc/Design_notes/build.html                     |    54 +
 doc/Design_notes/index.html                     |    16 +
 doc/Design_notes/modules/Makefile               |   592 +
 doc/Design_notes/modules/Makefile.am            |    13 +
 doc/Design_notes/modules/Makefile.in            |   592 +
 doc/Design_notes/modules/belvuApp.html          |    88 +
 doc/Design_notes/modules/blixemApp.html         |   168 +
 doc/Design_notes/modules/dotterApp.html         |    83 +
 doc/Design_notes/modules/libpfetch.html         |    12 +
 doc/Design_notes/modules/seqtoolsUtils.html     |    68 +
 doc/Design_notes/specs.html                     |    15 +
 doc/Makefile.am                                 |     8 +
 doc/Makefile.in                                 |   585 +
 doc/User_doc/Belvu_manual/Belvu_manual.pdf      |   Bin 0 -> 893808 bytes
 doc/User_doc/Blixem_manual/Blixem_manual.pdf    |   Bin 0 -> 1060576 bytes
 doc/User_doc/Dotter_manual/Dotter_manual.pdf    |   Bin 0 -> 421271 bytes
 doc/User_doc/Makefile.am                        |    22 +
 doc/User_doc/Makefile.in                        |   657 +
 doc/User_doc/belvu_quick_start.html             |   127 +
 doc/User_doc/belvu_usage.txt                    |   180 +
 doc/User_doc/blixem_quick_start.html            |   331 +
 doc/User_doc/blixem_usage.txt                   |   208 +
 doc/User_doc/dotter_quick_start.html            |    79 +
 doc/User_doc/dotter_usage.txt                   |    92 +
 doc/User_doc/index.html                         |    32 +
 doc/User_doc/manuals.html                       |    16 +
 doc/User_doc/release_notes.html                 |   723 +
 doc/User_doc/todo.html                          |    61 +
 doc/index.html                                  |    16 +
 dotterApp/Makefile.am                           |    25 +
 dotterApp/Makefile.in                           |   729 +
 dotterApp/alignmenttool.cpp                     |  1472 ++
 dotterApp/dotplot.cpp                           |  3255 ++++
 dotterApp/dotter.cpp                            |  4084 +++++
 dotterApp/dotter.hpp                            |   137 +
 dotterApp/dotterKarlin.cpp                      |   458 +
 dotterApp/dotterMain.cpp                        |   915 +
 dotterApp/dotter_.hpp                           |   394 +
 dotterApp/greyramptool.cpp                      |  1038 ++
 dotterApp/seqtoolsExonView.cpp                  |   750 +
 dotterApp/seqtoolsExonView.hpp                  |    84 +
 examples/DA730641.fasta                         |    16 +
 examples/Makefile.am                            |    17 +
 examples/Makefile.in                            |   595 +
 examples/PF02171_seed.stock                     |    59 +
 examples/Q9H8G1.fasta                           |    11 +
 examples/README                                 |    24 +
 examples/chr4_dna_align.gff                     |  2269 +++
 examples/chr4_protein_align.gff                 |  4904 ++++++
 examples/chr4_ref_seq.fasta                     |  2256 +++
 examples/chr4_ref_seq_short.fasta               |    95 +
 examples/chr4_translation_frame1.fasta          |     5 +
 gbtools/Makefile.am                             |    64 +
 gbtools/Makefile.in                             |   967 ++
 gbtools/README                                  |    31 +
 gbtools/aclocal.m4                              |  1351 ++
 gbtools/config.h.in                             |   273 +
 gbtools/config/compile                          |   347 +
 gbtools/config/config.guess                     |  1558 ++
 gbtools/config/config.sub                       |  1791 ++
 gbtools/config/depcomp                          |   791 +
 gbtools/config/install-sh                       |   527 +
 gbtools/config/ltmain.sh                        |  9661 +++++++++++
 gbtools/config/missing                          |   215 +
 gbtools/configure                               | 19350 ++++++++++++++++++++++
 gbtools/configure.ac                            |   182 +
 gbtools/gbtools_version.m4                      |     2 +
 gbtools/m4/libtool.m4                           |  7997 +++++++++
 gbtools/m4/ltoptions.m4                         |   384 +
 gbtools/m4/ltsugar.m4                           |   123 +
 gbtools/m4/ltversion.m4                         |    23 +
 gbtools/m4/lt~obsolete.m4                       |    98 +
 gbtools/src/Makefile.am                         |    18 +
 gbtools/src/Makefile.am.common                  |    15 +
 gbtools/src/Makefile.in                         |   625 +
 gbtools/src/blatSrc/Makefile.am                 |   277 +
 gbtools/src/blatSrc/Makefile.in                 |  2688 +++
 gbtools/src/blatSrc/lib/aliType.c               |    33 +
 gbtools/src/blatSrc/lib/annoAssembly.c          |    77 +
 gbtools/src/blatSrc/lib/annoFilter.c            |   357 +
 gbtools/src/blatSrc/lib/annoFormatTab.c         |   230 +
 gbtools/src/blatSrc/lib/annoFormatter.c         |    29 +
 gbtools/src/blatSrc/lib/annoGrateWig.c          |   112 +
 gbtools/src/blatSrc/lib/annoGrator.c            |   291 +
 gbtools/src/blatSrc/lib/annoGratorQuery.c       |   150 +
 gbtools/src/blatSrc/lib/annoOption.c            |   100 +
 gbtools/src/blatSrc/lib/annoRow.c               |    73 +
 gbtools/src/blatSrc/lib/annoStreamBigBed.c      |   251 +
 gbtools/src/blatSrc/lib/annoStreamBigWig.c      |   185 +
 gbtools/src/blatSrc/lib/annoStreamTab.c         |   236 +
 gbtools/src/blatSrc/lib/annoStreamVcf.c         |   368 +
 gbtools/src/blatSrc/lib/annoStreamer.c          |   154 +
 gbtools/src/blatSrc/lib/apacheLog.c             |   211 +
 gbtools/src/blatSrc/lib/asParse.c               |   664 +
 gbtools/src/blatSrc/lib/axt.c                   |  1106 ++
 gbtools/src/blatSrc/lib/axtAffine.c             |   781 +
 gbtools/src/blatSrc/lib/bPlusTree.c             |   600 +
 gbtools/src/blatSrc/lib/bamFile.c               |   797 +
 gbtools/src/blatSrc/lib/base64.c                |   132 +
 gbtools/src/blatSrc/lib/basicBed.c              |  1752 ++
 gbtools/src/blatSrc/lib/bbiRead.c               |   797 +
 gbtools/src/blatSrc/lib/bbiWrite.c              |   736 +
 gbtools/src/blatSrc/lib/bigBed.c                |   651 +
 gbtools/src/blatSrc/lib/binRange.c              |   392 +
 gbtools/src/blatSrc/lib/bits.c                  |   418 +
 gbtools/src/blatSrc/lib/blastOut.c              |   833 +
 gbtools/src/blatSrc/lib/blastParse.c            |   900 +
 gbtools/src/blatSrc/lib/boxClump.c              |   315 +
 gbtools/src/blatSrc/lib/boxLump.c               |   162 +
 gbtools/src/blatSrc/lib/bwgCreate.c             |  1238 ++
 gbtools/src/blatSrc/lib/bwgQuery.c              |   402 +
 gbtools/src/blatSrc/lib/bwgValsOnChrom.c        |   216 +
 gbtools/src/blatSrc/lib/cda.c                   |   477 +
 gbtools/src/blatSrc/lib/chain.c                 |   647 +
 gbtools/src/blatSrc/lib/chainBlock.c            |   453 +
 gbtools/src/blatSrc/lib/chainConnect.c          |   369 +
 gbtools/src/blatSrc/lib/chainToAxt.c            |   124 +
 gbtools/src/blatSrc/lib/chainToPsl.c            |   125 +
 gbtools/src/blatSrc/lib/cheapcgi.c              |  2306 +++
 gbtools/src/blatSrc/lib/cirTree.c               |   635 +
 gbtools/src/blatSrc/lib/codebias.c              |   147 +
 gbtools/src/blatSrc/lib/colHash.c               |    51 +
 gbtools/src/blatSrc/lib/colHash.h               |    41 +
 gbtools/src/blatSrc/lib/common.c                |  3537 ++++
 gbtools/src/blatSrc/lib/common.ps               |    97 +
 gbtools/src/blatSrc/lib/common.pss              |    96 +
 gbtools/src/blatSrc/lib/correlate.c             |    80 +
 gbtools/src/blatSrc/lib/crTree.c                |   401 +
 gbtools/src/blatSrc/lib/dgRange.c               |   222 +
 gbtools/src/blatSrc/lib/diGraph.c               |   741 +
 gbtools/src/blatSrc/lib/diGraph.c.97            |   764 +
 gbtools/src/blatSrc/lib/diff                    |     0
 gbtools/src/blatSrc/lib/diffs                   |   599 +
 gbtools/src/blatSrc/lib/dlist.c                 |   300 +
 gbtools/src/blatSrc/lib/dnaLoad.c               |   303 +
 gbtools/src/blatSrc/lib/dnaMarkov.c             |   242 +
 gbtools/src/blatSrc/lib/dnaMotif.c              |   631 +
 gbtools/src/blatSrc/lib/dnaMotif.pss            |    61 +
 gbtools/src/blatSrc/lib/dnaseq.c                |   181 +
 gbtools/src/blatSrc/lib/dnautil.c               |  1186 ++
 gbtools/src/blatSrc/lib/dtdParse.c              |   469 +
 gbtools/src/blatSrc/lib/dyOut.c                 |   379 +
 gbtools/src/blatSrc/lib/dystring.c              |   250 +
 gbtools/src/blatSrc/lib/elmTree.c               |   277 +
 gbtools/src/blatSrc/lib/emblParse.c             |   159 +
 gbtools/src/blatSrc/lib/errAbort.c              |   377 +
 gbtools/src/blatSrc/lib/errCatch.c              |   139 +
 gbtools/src/blatSrc/lib/fa.c                    |   648 +
 gbtools/src/blatSrc/lib/ffAli.c                 |   185 +
 gbtools/src/blatSrc/lib/ffScore.c               |   215 +
 gbtools/src/blatSrc/lib/fieldedTable.c          |   124 +
 gbtools/src/blatSrc/lib/filePath.c              |   134 +
 gbtools/src/blatSrc/lib/fixColor.c              |    23 +
 gbtools/src/blatSrc/lib/flydna.c                |   112 +
 gbtools/src/blatSrc/lib/fof.c                   |   581 +
 gbtools/src/blatSrc/lib/foo                     |   781 +
 gbtools/src/blatSrc/lib/fq.c                    |    65 +
 gbtools/src/blatSrc/lib/fuzzyShow.c             |   406 +
 gbtools/src/blatSrc/lib/gapCalc.c               |   354 +
 gbtools/src/blatSrc/lib/gdf.c                   |   153 +
 gbtools/src/blatSrc/lib/gemfont.c               |   200 +
 gbtools/src/blatSrc/lib/gemfont.h               |    69 +
 gbtools/src/blatSrc/lib/genomeRangeTree.c       |   201 +
 gbtools/src/blatSrc/lib/gfNet.c                 |    24 +
 gbtools/src/blatSrc/lib/gff.c                   |   474 +
 gbtools/src/blatSrc/lib/gff3.c                  |  1109 ++
 gbtools/src/blatSrc/lib/gfxPoly.c               |    50 +
 gbtools/src/blatSrc/lib/gifLabel.c              |   101 +
 gbtools/src/blatSrc/lib/gifcodes.h              |    48 +
 gbtools/src/blatSrc/lib/gifcomp.c               |   304 +
 gbtools/src/blatSrc/lib/gifdecomp.c             |   391 +
 gbtools/src/blatSrc/lib/gifread.c               |   186 +
 gbtools/src/blatSrc/lib/gifwrite.c              |    98 +
 gbtools/src/blatSrc/lib/hacTree.c               |   510 +
 gbtools/src/blatSrc/lib/hash.c                  |   749 +
 gbtools/src/blatSrc/lib/hex.c                   |    69 +
 gbtools/src/blatSrc/lib/histogram.c             |   270 +
 gbtools/src/blatSrc/lib/hmac.c                  |    65 +
 gbtools/src/blatSrc/lib/hmmPfamParse.c          |   194 +
 gbtools/src/blatSrc/lib/hmmstats.c              |    48 +
 gbtools/src/blatSrc/lib/htmlPage.c              |  1851 +++
 gbtools/src/blatSrc/lib/htmshell.c              |   670 +
 gbtools/src/blatSrc/lib/https.c                 |   391 +
 gbtools/src/blatSrc/lib/intExp.c                |   153 +
 gbtools/src/blatSrc/lib/intValTree.c            |   105 +
 gbtools/src/blatSrc/lib/internet.c              |   162 +
 gbtools/src/blatSrc/lib/itsa.c                  |   187 +
 gbtools/src/blatSrc/lib/iupac.c                 |   216 +
 gbtools/src/blatSrc/lib/jointalign.c            |    74 +
 gbtools/src/blatSrc/lib/jpegSize.c              |   139 +
 gbtools/src/blatSrc/lib/jsonParse.c             |   687 +
 gbtools/src/blatSrc/lib/jsonWrite.c             |   142 +
 gbtools/src/blatSrc/lib/keys.c                  |   558 +
 gbtools/src/blatSrc/lib/knetUdc.c               |    97 +
 gbtools/src/blatSrc/lib/kxTok.c                 |   239 +
 gbtools/src/blatSrc/lib/lineFileOnBigBed.c      |   111 +
 gbtools/src/blatSrc/lib/linefile.c              |  1450 ++
 gbtools/src/blatSrc/lib/localmem.c              |   200 +
 gbtools/src/blatSrc/lib/log.c                   |   354 +
 gbtools/src/blatSrc/lib/longToList.c            |   103 +
 gbtools/src/blatSrc/lib/maf.c                   |   898 +
 gbtools/src/blatSrc/lib/maf.doc                 |   222 +
 gbtools/src/blatSrc/lib/mafFromAxt.c            |    81 +
 gbtools/src/blatSrc/lib/mafScore.c              |   186 +
 gbtools/src/blatSrc/lib/mailViaPipe.c           |    30 +
 gbtools/src/blatSrc/lib/makefile                |    65 +
 gbtools/src/blatSrc/lib/md5.c                   |    86 +
 gbtools/src/blatSrc/lib/memalloc.c              |   519 +
 gbtools/src/blatSrc/lib/memgfx.c                |  1325 ++
 gbtools/src/blatSrc/lib/meta.c                  |   405 +
 gbtools/src/blatSrc/lib/metaWig.c               |   188 +
 gbtools/src/blatSrc/lib/mgCircle.c              |    81 +
 gbtools/src/blatSrc/lib/mgPolygon.c             |   438 +
 gbtools/src/blatSrc/lib/mime.c                  |   687 +
 gbtools/src/blatSrc/lib/net.c                   |  2076 +++
 gbtools/src/blatSrc/lib/nib.c                   |   516 +
 gbtools/src/blatSrc/lib/nibTwo.c                |   125 +
 gbtools/src/blatSrc/lib/nt4.c                   |   260 +
 gbtools/src/blatSrc/lib/numObscure.c            |   106 +
 gbtools/src/blatSrc/lib/obscure.c               |   823 +
 gbtools/src/blatSrc/lib/oldGff.c                |   643 +
 gbtools/src/blatSrc/lib/oligoTm.c               |   333 +
 gbtools/src/blatSrc/lib/options.c               |   450 +
 gbtools/src/blatSrc/lib/osunix.c                |   711 +
 gbtools/src/blatSrc/lib/oswin9x.c               |    98 +
 gbtools/src/blatSrc/lib/pairDistance.c          |    80 +
 gbtools/src/blatSrc/lib/pairHmm.c               |   346 +
 gbtools/src/blatSrc/lib/paraFetch.c             |   703 +
 gbtools/src/blatSrc/lib/peakCluster.c           |   247 +
 gbtools/src/blatSrc/lib/phyloTree.c             |   421 +
 gbtools/src/blatSrc/lib/pipeline.c              |   735 +
 gbtools/src/blatSrc/lib/pngwrite.c              |   115 +
 gbtools/src/blatSrc/lib/portimpl.c              |   136 +
 gbtools/src/blatSrc/lib/portimpl.h              |    39 +
 gbtools/src/blatSrc/lib/psGfx.c                 |   413 +
 gbtools/src/blatSrc/lib/psPoly.c                |    53 +
 gbtools/src/blatSrc/lib/pscmGfx.c               |   816 +
 gbtools/src/blatSrc/lib/psl.as                  |    25 +
 gbtools/src/blatSrc/lib/psl.c                   |  1961 +++
 gbtools/src/blatSrc/lib/psl.sql                 |    33 +
 gbtools/src/blatSrc/lib/pslGenoShow.c           |   349 +
 gbtools/src/blatSrc/lib/pslShow.c               |   317 +
 gbtools/src/blatSrc/lib/pslTbl.c                |    90 +
 gbtools/src/blatSrc/lib/pslTransMap.c           |   328 +
 gbtools/src/blatSrc/lib/pslWScore.as            |    26 +
 gbtools/src/blatSrc/lib/pslWScore.sql           |    31 +
 gbtools/src/blatSrc/lib/pthreadDoList.c         |    82 +
 gbtools/src/blatSrc/lib/pthreadWrap.c           |   105 +
 gbtools/src/blatSrc/lib/qa.c                    |   222 +
 gbtools/src/blatSrc/lib/quickHeap.c             |   196 +
 gbtools/src/blatSrc/lib/quotedP.c               |   117 +
 gbtools/src/blatSrc/lib/ra.c                    |   400 +
 gbtools/src/blatSrc/lib/raToStruct.c            |   178 +
 gbtools/src/blatSrc/lib/rainbow.c               |   153 +
 gbtools/src/blatSrc/lib/rangeTree.c             |   354 +
 gbtools/src/blatSrc/lib/rbTree.c                |   740 +
 gbtools/src/blatSrc/lib/regexHelper.c           |    93 +
 gbtools/src/blatSrc/lib/repMask.c               |   173 +
 gbtools/src/blatSrc/lib/rle.c                   |   102 +
 gbtools/src/blatSrc/lib/rnautil.c               |   223 +
 gbtools/src/blatSrc/lib/rqlEval.c               |   335 +
 gbtools/src/blatSrc/lib/rqlParse.c              |   767 +
 gbtools/src/blatSrc/lib/rudp.c                  |   563 +
 gbtools/src/blatSrc/lib/scoreWindow.c           |    51 +
 gbtools/src/blatSrc/lib/seg.c                   |   476 +
 gbtools/src/blatSrc/lib/seqOut.c                |   330 +
 gbtools/src/blatSrc/lib/seqStats.c              |    39 +
 gbtools/src/blatSrc/lib/servBrcMcw.c            |    47 +
 gbtools/src/blatSrc/lib/servCrunx.c             |    51 +
 gbtools/src/blatSrc/lib/servcis.c               |    48 +
 gbtools/src/blatSrc/lib/servcl.c                |    49 +
 gbtools/src/blatSrc/lib/servmsII.c              |    45 +
 gbtools/src/blatSrc/lib/servpws.c               |    44 +
 gbtools/src/blatSrc/lib/shaRes.c                |    80 +
 gbtools/src/blatSrc/lib/slog.c                  |    32 +
 gbtools/src/blatSrc/lib/snof.c                  |   293 +
 gbtools/src/blatSrc/lib/snofmake.c              |   228 +
 gbtools/src/blatSrc/lib/snofsig.c               |    24 +
 gbtools/src/blatSrc/lib/spaceSaver.c            |   144 +
 gbtools/src/blatSrc/lib/spacedColumn.c          |   137 +
 gbtools/src/blatSrc/lib/spacedSeed.c            |    68 +
 gbtools/src/blatSrc/lib/splatAli.as             |    12 +
 gbtools/src/blatSrc/lib/splatAli.c              |   234 +
 gbtools/src/blatSrc/lib/sqlList.c               |  1273 ++
 gbtools/src/blatSrc/lib/sqlNum.c                |   301 +
 gbtools/src/blatSrc/lib/status                  |  1638 ++
 gbtools/src/blatSrc/lib/subText.c               |   153 +
 gbtools/src/blatSrc/lib/sufa.c                  |   142 +
 gbtools/src/blatSrc/lib/sufx.c                  |   146 +
 gbtools/src/blatSrc/lib/synQueue.c              |   117 +
 gbtools/src/blatSrc/lib/tabRow.c                |   232 +
 gbtools/src/blatSrc/lib/textOut.c               |   196 +
 gbtools/src/blatSrc/lib/tokenizer.c             |   216 +
 gbtools/src/blatSrc/lib/trix.c                  |   760 +
 gbtools/src/blatSrc/lib/twoBit.c                |  1235 ++
 gbtools/src/blatSrc/lib/udc.c                   |  1686 ++
 gbtools/src/blatSrc/lib/vGfx.c                  |    53 +
 gbtools/src/blatSrc/lib/vGfxPrivate.h           |    47 +
 gbtools/src/blatSrc/lib/vGif.c                  |    66 +
 gbtools/src/blatSrc/lib/vPng.c                  |    68 +
 gbtools/src/blatSrc/lib/valgrind.suppress       |   106 +
 gbtools/src/blatSrc/lib/vcf.c                   |  1285 ++
 gbtools/src/blatSrc/lib/vcfBits.c               |   696 +
 gbtools/src/blatSrc/lib/verbose.c               |   131 +
 gbtools/src/blatSrc/lib/wildcmp.c               |   116 +
 gbtools/src/blatSrc/lib/wormdna.c               |  1212 ++
 gbtools/src/blatSrc/lib/xAli.as                 |    27 +
 gbtools/src/blatSrc/lib/xAli.c                  |   282 +
 gbtools/src/blatSrc/lib/xAli.sql                |    33 +
 gbtools/src/blatSrc/lib/xa.c                    |   230 +
 gbtools/src/blatSrc/lib/xap.c                   |   182 +
 gbtools/src/blatSrc/lib/xenshow.c               |    65 +
 gbtools/src/blatSrc/lib/xmlEscape.c             |    82 +
 gbtools/src/blatSrc/lib/xp.c                    |   553 +
 gbtools/src/blatSrc/lib/zlibFace.c              |    94 +
 gbtools/src/gbtoolsCurl/Makefile.am             |    16 +
 gbtools/src/gbtoolsCurl/Makefile.in             |   742 +
 gbtools/src/gbtoolsCurl/gbtoolsCurl.cpp         |  1139 ++
 gbtools/src/gbtoolsCurl/gbtoolsCurl_P.hpp       |    96 +
 gbtools/src/gbtoolsGUI/Makefile.am              |    12 +
 gbtools/src/gbtoolsGUI/Makefile.in              |   720 +
 gbtools/src/gbtoolsGUI/gbtoolsGUI.cpp           |   249 +
 gbtools/src/gbtoolsPfetch/Makefile.am           |    18 +
 gbtools/src/gbtoolsPfetch/Makefile.in           |   728 +
 gbtools/src/gbtoolsPfetch/README                |   108 +
 gbtools/src/gbtoolsPfetch/gbtoolsPfetch.cpp     |    86 +
 gbtools/src/gbtoolsPfetch/gbtoolsPfetchHttp.cpp |   320 +
 gbtools/src/gbtoolsPfetch/gbtoolsPfetchPipe.cpp |   597 +
 gbtools/src/gbtoolsTrackhub/Makefile.am         |    15 +
 gbtools/src/gbtoolsTrackhub/Makefile.in         |   723 +
 gbtools/src/gbtoolsTrackhub/gbtoolsTrackhub.cpp |   960 ++
 gbtools/src/gbtoolsUtils/Makefile.am            |    12 +
 gbtools/src/gbtoolsUtils/Makefile.in            |   720 +
 gbtools/src/gbtoolsUtils/gbtoolsUtils.cpp       |    52 +
 gbtools/src/include/Makefile.am                 |   219 +
 gbtools/src/include/Makefile.in                 |   776 +
 gbtools/src/include/blatSrc/ace.h               |    79 +
 gbtools/src/include/blatSrc/aliType.h           |    32 +
 gbtools/src/include/blatSrc/annoAssembly.h      |    35 +
 gbtools/src/include/blatSrc/annoFilter.h        |    83 +
 gbtools/src/include/blatSrc/annoFormatTab.h     |    11 +
 gbtools/src/include/blatSrc/annoFormatter.h     |    57 +
 gbtools/src/include/blatSrc/annoGrateWig.h      |    14 +
 gbtools/src/include/blatSrc/annoGrator.h        |    73 +
 gbtools/src/include/blatSrc/annoGratorQuery.h   |    30 +
 gbtools/src/include/blatSrc/annoOption.h        |    22 +
 gbtools/src/include/blatSrc/annoRow.h           |    43 +
 gbtools/src/include/blatSrc/annoStreamBigBed.h  |    13 +
 gbtools/src/include/blatSrc/annoStreamBigWig.h  |    11 +
 gbtools/src/include/blatSrc/annoStreamTab.h     |    13 +
 gbtools/src/include/blatSrc/annoStreamVcf.h     |    13 +
 gbtools/src/include/blatSrc/annoStreamer.h      |   114 +
 gbtools/src/include/blatSrc/apacheLog.h         |    43 +
 gbtools/src/include/blatSrc/asParse.h           |   151 +
 gbtools/src/include/blatSrc/axt.h               |   272 +
 gbtools/src/include/blatSrc/bPlusTree.h         |   127 +
 gbtools/src/include/blatSrc/bamFile.h           |   169 +
 gbtools/src/include/blatSrc/bandExt.h           |    42 +
 gbtools/src/include/blatSrc/base64.h            |    30 +
 gbtools/src/include/blatSrc/basicBed.h          |   312 +
 gbtools/src/include/blatSrc/bbiFile.h           |   454 +
 gbtools/src/include/blatSrc/bigBed.h            |   144 +
 gbtools/src/include/blatSrc/bigWig.h            |   124 +
 gbtools/src/include/blatSrc/binRange.h          |   120 +
 gbtools/src/include/blatSrc/bits.h              |   108 +
 gbtools/src/include/blatSrc/blastParse.h        |   116 +
 gbtools/src/include/blatSrc/boxClump.h          |    41 +
 gbtools/src/include/blatSrc/boxLump.h           |    25 +
 gbtools/src/include/blatSrc/bwgInternal.h       |   119 +
 gbtools/src/include/blatSrc/cda.h               |   104 +
 gbtools/src/include/blatSrc/cgi_build_rules.mk  |    48 +
 gbtools/src/include/blatSrc/chain.h             |   163 +
 gbtools/src/include/blatSrc/chainBlock.h        |    42 +
 gbtools/src/include/blatSrc/chainConnect.h      |    60 +
 gbtools/src/include/blatSrc/chainToAxt.h        |    15 +
 gbtools/src/include/blatSrc/chainToPsl.h        |    28 +
 gbtools/src/include/blatSrc/cheapcgi.h          |   564 +
 gbtools/src/include/blatSrc/cirTree.h           |    85 +
 gbtools/src/include/blatSrc/codebias.h          |    33 +
 gbtools/src/include/blatSrc/common.h            |  1483 ++
 gbtools/src/include/blatSrc/common.mk           |   411 +
 gbtools/src/include/blatSrc/correlate.h         |    39 +
 gbtools/src/include/blatSrc/crTree.h            |    90 +
 gbtools/src/include/blatSrc/crudeali.h          |    26 +
 gbtools/src/include/blatSrc/diGraph.h           |   202 +
 gbtools/src/include/blatSrc/diGraph.h.97        |   210 +
 gbtools/src/include/blatSrc/dlist.h             |   138 +
 gbtools/src/include/blatSrc/dnaLoad.h           |    40 +
 gbtools/src/include/blatSrc/dnaMarkov.h         |    43 +
 gbtools/src/include/blatSrc/dnaMotif.h          |   126 +
 gbtools/src/include/blatSrc/dnaseq.h            |    73 +
 gbtools/src/include/blatSrc/dnautil.h           |   270 +
 gbtools/src/include/blatSrc/dtdParse.h          |    57 +
 gbtools/src/include/blatSrc/dyOut.h             |   141 +
 gbtools/src/include/blatSrc/dystring.h          |    98 +
 gbtools/src/include/blatSrc/elmTree.h           |   122 +
 gbtools/src/include/blatSrc/emblParse.h         |    75 +
 gbtools/src/include/blatSrc/ens.h               |   168 +
 gbtools/src/include/blatSrc/errAbort.h          |    93 +
 gbtools/src/include/blatSrc/errCatch.h          |    61 +
 gbtools/src/include/blatSrc/fa.h                |   129 +
 gbtools/src/include/blatSrc/fieldedTable.h      |    44 +
 gbtools/src/include/blatSrc/filePath.h          |    31 +
 gbtools/src/include/blatSrc/flydna.h            |    32 +
 gbtools/src/include/blatSrc/fof.h               |    82 +
 gbtools/src/include/blatSrc/fq.h                |    26 +
 gbtools/src/include/blatSrc/fuzzyFind.h         |   260 +
 gbtools/src/include/blatSrc/gapCalc.h           |    44 +
 gbtools/src/include/blatSrc/gdf.h               |    61 +
 gbtools/src/include/blatSrc/genoFind.h          |   385 +
 gbtools/src/include/blatSrc/genomeRangeTree.h   |   113 +
 gbtools/src/include/blatSrc/gfClientLib.h       |    26 +
 gbtools/src/include/blatSrc/gfPcrLib.h          |   100 +
 gbtools/src/include/blatSrc/gfWebLib.h          |    28 +
 gbtools/src/include/blatSrc/gff.h               |   142 +
 gbtools/src/include/blatSrc/gff3.h              |   268 +
 gbtools/src/include/blatSrc/gfxPoly.h           |    31 +
 gbtools/src/include/blatSrc/gifLabel.h          |    10 +
 gbtools/src/include/blatSrc/hacTree.h           |   108 +
 gbtools/src/include/blatSrc/hash.h              |   285 +
 gbtools/src/include/blatSrc/hex.h               |    27 +
 gbtools/src/include/blatSrc/hgGene.h            |   129 +
 gbtools/src/include/blatSrc/hgap.h              |   233 +
 gbtools/src/include/blatSrc/hgdb.h              |    46 +
 gbtools/src/include/blatSrc/histogram.h         |    26 +
 gbtools/src/include/blatSrc/hmac.h              |    12 +
 gbtools/src/include/blatSrc/hmmPfamParse.h      |    55 +
 gbtools/src/include/blatSrc/hmmstats.h          |    30 +
 gbtools/src/include/blatSrc/htmlPage.h          |   248 +
 gbtools/src/include/blatSrc/htmshell.h          |   180 +
 gbtools/src/include/blatSrc/https.h             |     9 +
 gbtools/src/include/blatSrc/intValTree.h        |    50 +
 gbtools/src/include/blatSrc/internet.h          |    43 +
 gbtools/src/include/blatSrc/itsa.h              |    90 +
 gbtools/src/include/blatSrc/iupac.h             |    42 +
 gbtools/src/include/blatSrc/jointalign.h        |    30 +
 gbtools/src/include/blatSrc/jpegSize.h          |    11 +
 gbtools/src/include/blatSrc/jsonParse.h         |   131 +
 gbtools/src/include/blatSrc/jsonWrite.h         |    56 +
 gbtools/src/include/blatSrc/keys.h              |    66 +
 gbtools/src/include/blatSrc/knetUdc.h           |    10 +
 gbtools/src/include/blatSrc/kxTok.h             |    65 +
 gbtools/src/include/blatSrc/linefile.h          |   296 +
 gbtools/src/include/blatSrc/localEnvironment.mk |     0
 gbtools/src/include/blatSrc/localmem.h          |    66 +
 gbtools/src/include/blatSrc/log.h               |    74 +
 gbtools/src/include/blatSrc/longToList.h        |    52 +
 gbtools/src/include/blatSrc/maDbRep.h           |    62 +
 gbtools/src/include/blatSrc/maToFf.h            |    21 +
 gbtools/src/include/blatSrc/maf.h               |   264 +
 gbtools/src/include/blatSrc/mailViaPipe.h       |     8 +
 gbtools/src/include/blatSrc/md5.h               |    32 +
 gbtools/src/include/blatSrc/memalloc.h          |    55 +
 gbtools/src/include/blatSrc/memgfx.h            |   398 +
 gbtools/src/include/blatSrc/meta.h              |    93 +
 gbtools/src/include/blatSrc/metaWig.h           |    44 +
 gbtools/src/include/blatSrc/mime.h              |    62 +
 gbtools/src/include/blatSrc/net.h               |   267 +
 gbtools/src/include/blatSrc/nib.h               |   113 +
 gbtools/src/include/blatSrc/nibTwo.h            |    55 +
 gbtools/src/include/blatSrc/nt4.h               |    45 +
 gbtools/src/include/blatSrc/obscure.h           |   185 +
 gbtools/src/include/blatSrc/oldGff.h            |   103 +
 gbtools/src/include/blatSrc/oligoTm.h           |    98 +
 gbtools/src/include/blatSrc/ooc.h               |    16 +
 gbtools/src/include/blatSrc/options.h           |   100 +
 gbtools/src/include/blatSrc/pairDistance.h      |    31 +
 gbtools/src/include/blatSrc/pairHmm.h           |    94 +
 gbtools/src/include/blatSrc/paraFetch.h         |    41 +
 gbtools/src/include/blatSrc/patSpace.h          |    48 +
 gbtools/src/include/blatSrc/peakCluster.h       |    98 +
 gbtools/src/include/blatSrc/phyloTree.h         |    77 +
 gbtools/src/include/blatSrc/pipeline.h          |   157 +
 gbtools/src/include/blatSrc/portable.h          |   168 +
 gbtools/src/include/blatSrc/psGfx.h             |   118 +
 gbtools/src/include/blatSrc/psPoly.h            |    31 +
 gbtools/src/include/blatSrc/pscmGfx.h           |    71 +
 gbtools/src/include/blatSrc/psl.h               |   316 +
 gbtools/src/include/blatSrc/pslTbl.h            |    42 +
 gbtools/src/include/blatSrc/pslTransMap.h       |    17 +
 gbtools/src/include/blatSrc/pthreadDoList.h     |    67 +
 gbtools/src/include/blatSrc/pthreadWrap.h       |    45 +
 gbtools/src/include/blatSrc/qa.h                |    65 +
 gbtools/src/include/blatSrc/quickHeap.h         |    53 +
 gbtools/src/include/blatSrc/quotedP.h           |    21 +
 gbtools/src/include/blatSrc/ra.h                |    81 +
 gbtools/src/include/blatSrc/raToStruct.h        |    64 +
 gbtools/src/include/blatSrc/rainbow.h           |    22 +
 gbtools/src/include/blatSrc/rangeTree.h         |   105 +
 gbtools/src/include/blatSrc/rbTree.h            |   102 +
 gbtools/src/include/blatSrc/regexHelper.h       |    29 +
 gbtools/src/include/blatSrc/repMask.h           |    56 +
 gbtools/src/include/blatSrc/rle.h               |    16 +
 gbtools/src/include/blatSrc/rnautil.h           |    55 +
 gbtools/src/include/blatSrc/rql.h               |   130 +
 gbtools/src/include/blatSrc/rudp.h              |   175 +
 gbtools/src/include/blatSrc/scoreWindow.h       |     7 +
 gbtools/src/include/blatSrc/seg.h               |   109 +
 gbtools/src/include/blatSrc/seqOut.h            |    91 +
 gbtools/src/include/blatSrc/seqStats.h          |    11 +
 gbtools/src/include/blatSrc/shaRes.h            |    45 +
 gbtools/src/include/blatSrc/sig.h               |   101 +
 gbtools/src/include/blatSrc/slog.h              |    18 +
 gbtools/src/include/blatSrc/snof.h              |    60 +
 gbtools/src/include/blatSrc/snofmake.h          |    35 +
 gbtools/src/include/blatSrc/spaceSaver.h        |    65 +
 gbtools/src/include/blatSrc/spacedColumn.h      |    46 +
 gbtools/src/include/blatSrc/spacedSeed.h        |    19 +
 gbtools/src/include/blatSrc/splatAli.h          |    80 +
 gbtools/src/include/blatSrc/splix.h             |    80 +
 gbtools/src/include/blatSrc/sqlList.h           |   142 +
 gbtools/src/include/blatSrc/sqlNum.h            |    83 +
 gbtools/src/include/blatSrc/subText.h           |    41 +
 gbtools/src/include/blatSrc/sufa.h              |    60 +
 gbtools/src/include/blatSrc/sufx.h              |    64 +
 gbtools/src/include/blatSrc/supStitch.h         |    73 +
 gbtools/src/include/blatSrc/synQueue.h          |    38 +
 gbtools/src/include/blatSrc/tabRow.h            |    45 +
 gbtools/src/include/blatSrc/textOut.h           |    48 +
 gbtools/src/include/blatSrc/tokenizer.h         |    66 +
 gbtools/src/include/blatSrc/trans3.h            |    59 +
 gbtools/src/include/blatSrc/trix.h              |    48 +
 gbtools/src/include/blatSrc/twoBit.h            |   209 +
 gbtools/src/include/blatSrc/udc.h               |   165 +
 gbtools/src/include/blatSrc/unfin.h             |    31 +
 gbtools/src/include/blatSrc/userApp.mk          |    49 +
 gbtools/src/include/blatSrc/vGfx.h              |   193 +
 gbtools/src/include/blatSrc/vcf.h               |   297 +
 gbtools/src/include/blatSrc/vcfBits.h           |   158 +
 gbtools/src/include/blatSrc/verbose.h           |    53 +
 gbtools/src/include/blatSrc/wormdna.h           |   245 +
 gbtools/src/include/blatSrc/xAli.h              |    73 +
 gbtools/src/include/blatSrc/xa.h                |    63 +
 gbtools/src/include/blatSrc/xap.h               |    78 +
 gbtools/src/include/blatSrc/xenalign.h          |    41 +
 gbtools/src/include/blatSrc/xmlEscape.h         |    17 +
 gbtools/src/include/blatSrc/xp.h                |    78 +
 gbtools/src/include/blatSrc/zlibFace.h          |    26 +
 gbtools/src/include/gbtools/gbtools.hpp         |    38 +
 gbtools/src/include/gbtools/gbtoolsCurl.hpp     |    79 +
 gbtools/src/include/gbtools/gbtoolsGUI.hpp      |    44 +
 gbtools/src/include/gbtools/gbtoolsPfetch.hpp   |   172 +
 gbtools/src/include/gbtools/gbtoolsTrackhub.hpp |   284 +
 gbtools/src/include/gbtools/gbtoolsUtils.hpp    |    49 +
 gbtools/src/include/json/json-forwards.h        |   319 +
 gbtools/src/include/json/json.h                 |  2241 +++
 gbtools/src/jsoncpp/Makefile.am                 |    15 +
 gbtools/src/jsoncpp/Makefile.in                 |   723 +
 gbtools/src/jsoncpp/jsoncpp.cpp                 |  5247 ++++++
 seqtoolsUtils/Makefile.am                       |    18 +
 seqtoolsUtils/Makefile.in                       |   688 +
 seqtoolsUtils/blxGff3Parser.cpp                 |  1700 ++
 seqtoolsUtils/blxGff3Parser.hpp                 |   147 +
 seqtoolsUtils/blxmsp.cpp                        |  3742 +++++
 seqtoolsUtils/blxmsp.hpp                        |   508 +
 seqtoolsUtils/blxparser.cpp                     |  1950 +++
 seqtoolsUtils/blxparser.hpp                     |    47 +
 seqtoolsUtils/iupac.hpp                         |   320 +
 seqtoolsUtils/seqtoolsFetch.cpp                 |    62 +
 seqtoolsUtils/seqtoolsFetch.hpp                 |    99 +
 seqtoolsUtils/seqtoolsWebBrowser.cpp            |   392 +
 seqtoolsUtils/translate.cpp                     |   212 +
 seqtoolsUtils/utilities.cpp                     |  5283 ++++++
 seqtoolsUtils/utilities.hpp                     |   698 +
 seqtoolsUtils/version.hpp                       |   179 +
 seqtools_version.m4                             |     2 +
 test/Makefile.am                                |     8 +
 test/Makefile.in                                |   585 +
 test/README                                     |    19 +
 test/data/ALIGN.fasta                           |   740 +
 test/data/ALIGN.selex                           |   370 +
 test/data/DA730641.fasta                        |    16 +
 test/data/Makefile.am                           |    35 +
 test/data/Makefile.in                           |   613 +
 test/data/PF02171_full.selex                    |   842 +
 test/data/PF02171_full.stock                    |  1739 ++
 test/data/PF02171_seed.fasta                    |   176 +
 test/data/PF02171_seed.msf                      |   215 +
 test/data/PF02171_seed.scores                   |    33 +
 test/data/PF02171_seed.segs                     |     4 +
 test/data/PF02171_seed.selex                    |    45 +
 test/data/PF02171_seed.stock                    |    59 +
 test/data/PF02171_seed_segs.stock               |    63 +
 test/data/PF02171_seed_separator.stock          |    59 +
 test/data/Q9H8G1.fasta                          |    11 +
 test/data/cgph_pale.color                       |    20 +
 test/data/cgph_pale2.color                      |     5 +
 test/data/chr4_dna_align.gff                    |  2269 +++
 test/data/chr4_protein_align.gff                |  4904 ++++++
 test/data/chr4_ref_seq.fasta                    |  2256 +++
 test/data/chr4_ref_seq_short.fasta              |    95 +
 test/data/chr4_translation_frame1.fasta         |     5 +
 test/data/chr4_vs_DA730641.dot                  |   Bin 0 -> 455204 bytes
 test/data/chr4_vs_chr4.dot                      |   Bin 0 -> 499366 bytes
 test/data/markup.color                          |    20 +
 test/data/markup2.color                         |     3 +
 test/data/markup_content.selex                  |    20 +
 test/data/markup_headers.selex                  |    32 +
 test/scripts/Makefile.am                        |     8 +
 test/scripts/Makefile.in                        |   585 +
 test/scripts/automated/Makefile.am              |     8 +
 test/scripts/automated/Makefile.in              |   585 +
 test/scripts/automated/belvu/Makefile.am        |   111 +
 test/scripts/automated/belvu/Makefile.in        |   689 +
 test/scripts/automated/belvu/test1              |    23 +
 test/scripts/automated/belvu/test10             |    25 +
 test/scripts/automated/belvu/test10_results     |    45 +
 test/scripts/automated/belvu/test11             |    25 +
 test/scripts/automated/belvu/test11_results     |  1110 ++
 test/scripts/automated/belvu/test12             |    25 +
 test/scripts/automated/belvu/test12_results     |  2524 +++
 test/scripts/automated/belvu/test13             |    25 +
 test/scripts/automated/belvu/test13_results     |    61 +
 test/scripts/automated/belvu/test14             |    26 +
 test/scripts/automated/belvu/test14_results     |  2524 +++
 test/scripts/automated/belvu/test15             |    25 +
 test/scripts/automated/belvu/test15_results     |    61 +
 test/scripts/automated/belvu/test16             |    26 +
 test/scripts/automated/belvu/test16_results     |  2524 +++
 test/scripts/automated/belvu/test17             |    26 +
 test/scripts/automated/belvu/test17_results     |  2524 +++
 test/scripts/automated/belvu/test18             |    25 +
 test/scripts/automated/belvu/test18_results     |  2524 +++
 test/scripts/automated/belvu/test19             |    24 +
 test/scripts/automated/belvu/test19_results     |     2 +
 test/scripts/automated/belvu/test1_results      |   226 +
 test/scripts/automated/belvu/test2              |    23 +
 test/scripts/automated/belvu/test20             |    25 +
 test/scripts/automated/belvu/test20_results     |   380 +
 test/scripts/automated/belvu/test21             |    25 +
 test/scripts/automated/belvu/test21_results     |  1119 ++
 test/scripts/automated/belvu/test22             |    25 +
 test/scripts/automated/belvu/test22_results     |    43 +
 test/scripts/automated/belvu/test23             |    25 +
 test/scripts/automated/belvu/test23_results     |  3544 ++++
 test/scripts/automated/belvu/test24             |    24 +
 test/scripts/automated/belvu/test24_results     |    48 +
 test/scripts/automated/belvu/test25             |    25 +
 test/scripts/automated/belvu/test25_results     |    58 +
 test/scripts/automated/belvu/test26             |    29 +
 test/scripts/automated/belvu/test26_results     |   226 +
 test/scripts/automated/belvu/test27             |    29 +
 test/scripts/automated/belvu/test27_results     |   226 +
 test/scripts/automated/belvu/test28             |    25 +
 test/scripts/automated/belvu/test28_results     |     2 +
 test/scripts/automated/belvu/test29             |    26 +
 test/scripts/automated/belvu/test29_results     |     2 +
 test/scripts/automated/belvu/test2_results      |    58 +
 test/scripts/automated/belvu/test3              |    23 +
 test/scripts/automated/belvu/test30             |    26 +
 test/scripts/automated/belvu/test30_results     |     2 +
 test/scripts/automated/belvu/test31             |    26 +
 test/scripts/automated/belvu/test31_results     |   110 +
 test/scripts/automated/belvu/test32             |    26 +
 test/scripts/automated/belvu/test32_results     |   147 +
 test/scripts/automated/belvu/test33             |    26 +
 test/scripts/automated/belvu/test33_results     |    23 +
 test/scripts/automated/belvu/test34             |    25 +
 test/scripts/automated/belvu/test34_results     |    23 +
 test/scripts/automated/belvu/test35             |    25 +
 test/scripts/automated/belvu/test35_results     |   371 +
 test/scripts/automated/belvu/test36             |    25 +
 test/scripts/automated/belvu/test36_results     |   843 +
 test/scripts/automated/belvu/test36_results_old |   843 +
 test/scripts/automated/belvu/test37             |    25 +
 test/scripts/automated/belvu/test37_results     |   843 +
 test/scripts/automated/belvu/test38             |    25 +
 test/scripts/automated/belvu/test38_results     |   371 +
 test/scripts/automated/belvu/test39             |    25 +
 test/scripts/automated/belvu/test39_results     |   371 +
 test/scripts/automated/belvu/test3_results      |    58 +
 test/scripts/automated/belvu/test4              |    24 +
 test/scripts/automated/belvu/test40             |    25 +
 test/scripts/automated/belvu/test40_results     |    24 +
 test/scripts/automated/belvu/test41             |    25 +
 test/scripts/automated/belvu/test41_results     |  1108 ++
 test/scripts/automated/belvu/test42             |    25 +
 test/scripts/automated/belvu/test42_results     |  1108 ++
 test/scripts/automated/belvu/test43             |    25 +
 test/scripts/automated/belvu/test43_results     |  1108 ++
 test/scripts/automated/belvu/test44             |    25 +
 test/scripts/automated/belvu/test44_results     |  1108 ++
 test/scripts/automated/belvu/test45             |    25 +
 test/scripts/automated/belvu/test45_results     |  1108 ++
 test/scripts/automated/belvu/test46             |    25 +
 test/scripts/automated/belvu/test46_results     |  1108 ++
 test/scripts/automated/belvu/test47             |    25 +
 test/scripts/automated/belvu/test47_results     |  1108 ++
 test/scripts/automated/belvu/test48             |    25 +
 test/scripts/automated/belvu/test48_results     |  1108 ++
 test/scripts/automated/belvu/test49             |    25 +
 test/scripts/automated/belvu/test49_results     |  1108 ++
 test/scripts/automated/belvu/test4_results      |   147 +
 test/scripts/automated/belvu/test5              |    24 +
 test/scripts/automated/belvu/test50             |    25 +
 test/scripts/automated/belvu/test50_results     |  1108 ++
 test/scripts/automated/belvu/test51             |    25 +
 test/scripts/automated/belvu/test51_results     |    24 +
 test/scripts/automated/belvu/test5_results      |   110 +
 test/scripts/automated/belvu/test6              |    24 +
 test/scripts/automated/belvu/test6_results      |    61 +
 test/scripts/automated/belvu/test7              |    24 +
 test/scripts/automated/belvu/test7_results      |   417 +
 test/scripts/automated/belvu/test8              |    25 +
 test/scripts/automated/belvu/test8_results      |  3544 ++++
 test/scripts/automated/belvu/test9              |    25 +
 test/scripts/automated/belvu/test9_results      |   236 +
 test/scripts/automated/blixem/Makefile.am       |    12 +
 test/scripts/automated/blixem/Makefile.in       |   590 +
 test/scripts/automated/blixem/test1             |    26 +
 test/scripts/automated/blixem/test1_results     |   207 +
 test/scripts/automated/blixem/test2             |    26 +
 test/scripts/automated/blixem/test2_results     |   123 +
 test/scripts/automated/dotter/Makefile.am       |    15 +
 test/scripts/automated/dotter/Makefile.in       |   593 +
 test/scripts/automated/dotter/test1             |    30 +
 test/scripts/automated/dotter/test1_results     |   Bin 0 -> 455204 bytes
 test/scripts/automated/dotter/test2             |    31 +
 test/scripts/automated/dotter/test2_results     |   Bin 0 -> 21057 bytes
 test/scripts/automated/dotter/test3             |    47 +
 test/scripts/automated/dotter/test3_results.dot |   Bin 0 -> 455204 bytes
 test/scripts/automated/dotter/test3_results.pdf |   Bin 0 -> 21057 bytes
 test/scripts/manual/Makefile.am                 |     8 +
 test/scripts/manual/Makefile.in                 |   585 +
 test/scripts/manual/belvu/Makefile.am           |     8 +
 test/scripts/manual/belvu/Makefile.in           |   585 +
 test/scripts/manual/belvu/test1                 |    26 +
 test/scripts/manual/belvu/test2                 |    25 +
 test/scripts/manual/belvu/test3                 |    24 +
 test/scripts/manual/belvu/test4                 |    24 +
 test/scripts/manual/belvu/test5                 |    25 +
 test/scripts/manual/blixem/Makefile.am          |     8 +
 test/scripts/manual/blixem/Makefile.in          |   585 +
 test/scripts/manual/blixem/test1                |    26 +
 test/scripts/manual/blixem/test2                |    26 +
 test/scripts/manual/dotter/Makefile.am          |     8 +
 test/scripts/manual/dotter/Makefile.in          |   585 +
 test/scripts/manual/dotter/test1                |    30 +
 test/scripts/manual/dotter/test2                |    30 +
 test/scripts/manual/dotter/test3                |    30 +
 test/scripts/manual/dotter/test4                |    27 +
 test/scripts/manual/dotter/test5                |    28 +
 test/scripts/manual/dotter/test6                |    25 +
 test/scripts/manual/dotter/test7                |    26 +
 test/scripts/manual/dotter/test8                |    28 +
 test/test_plan.ods                              |   Bin 0 -> 44092 bytes
 813 files changed, 366214 insertions(+)

diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 0000000..a205ae8
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,7 @@
+Eric Sonnhammer Original author of blixem, dotter and belvu
+
+Richard Durbin and Jean Thierry-Mieg Original authors of the acedb package, which incorporated blixem, dotter and belvu.
+
+Ed Griffiths, Roy Storey and Malcolm Hinsley Authors of the ZMap code from which the web browser, pfetch code and libpfetch library were taken.
+
+Gemma Barson Extensively re-wrote blixem, dotter and belvu and removed dependencies on the acedb package.  Created the separate SeqTools package, including its documentation and build scripts.
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..94a9ed0
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,674 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  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
+them 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 prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  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.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey 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;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If 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 convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU 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 that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  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.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+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.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    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 3 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, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/ChangeLog b/ChangeLog
new file mode 100644
index 0000000..57ccf9e
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,15456 @@
+2016-10-27  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix organisms window size when using suffix - BUG FIX
+ src/belvuApp/belvuMain.cpp   | 10 ++++++++--
+ src/belvuApp/belvuWindow.cpp | 16 +++++++++++-----
+ 2 files changed, 19 insertions(+), 7 deletions(-)
+
+2016-10-26  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix organisms window size - BUG FIX
+ src/belvuApp/belvu.cpp       | 6 ++++++
+ src/belvuApp/belvuWindow.cpp | 5 ++++-
+ src/belvuApp/belvu_.hpp      | 1 +
+ 3 files changed, 11 insertions(+), 1 deletion(-)
+
+2016-10-26  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix bug with duplicate organisms - BUG FIX
+ src/belvuApp/belvu.cpp | 12 +++++++++---
+ 1 file changed, 9 insertions(+), 3 deletions(-)
+
+2016-10-26  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix bug parsing organism lines - BUG FIX
+ src/belvuApp/belvu.cpp     | 13 ++++++++++---
+ src/belvuApp/belvuMain.cpp | 14 +++++++-------
+ 2 files changed, 17 insertions(+), 10 deletions(-)
+
+2016-09-26  zmap  <zmap at sanger.ac.uk>
+ Merge branch 'release/4.44.0' into production
+2016-09-23  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.43.0-13-g8e07 - Update RT and git commit reports
+ src/ChangeLog                                  | 20 ++++++++++++++++++++
+ src/build/release_docs/GIT_COMMITS.txt         |  1 +
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt | 14 ++++++++++++--
+ 3 files changed, 33 insertions(+), 2 deletions(-)
+
+2016-09-16  Gemma Guest  <gb10 at sanger.ac.uk>
+ Update release notes - DOC
+ src/doc/User_doc/release_notes.html | 24 +++++++++++++++++++++---
+ 1 file changed, 21 insertions(+), 3 deletions(-)
+
+2016-09-16  Gemma Guest  <gb10 at sanger.ac.uk>
+ Add environment and X11 to instructions - DOC
+ src/INSTALL.VM    | 20 ++++++++++++++++++++
+ src/INSTALL.linux | 25 +++++++++++++++++++++++++
+ src/INSTALL.mac   | 31 +++++++++++++++++++++++++++++++
+ src/README        |  4 ++++
+ 4 files changed, 80 insertions(+)
+
+2016-09-13  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.43.0-10-g2cfb - Update RT and git commit reports
+ src/ChangeLog                                  | 933 ++-----------------------
+ src/build/release_docs/GIT_COMMITS.txt         |  15 +-
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt |  14 +-
+ 3 files changed, 57 insertions(+), 905 deletions(-)
+
+2016-08-11  Ed Griffiths  <edgrif at sanger.ac.uk>
+ Move to c++11 standard. - BUILD
+ src/Makefile.am.common | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2016-08-03  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix regression from 1e60e02 - REGRESSION FIX
+ src/blixemApp/blxcontext.cpp | 2 +-
+ src/blixemApp/detailview.cpp | 2 +-
+ src/dotterApp/dotter.cpp     | 2 +-
+ 3 files changed, 3 insertions(+), 3 deletions(-)
+
+2016-08-02  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix problems with multiple groups - BUG FIX
+ src/blixemApp/bigpicturegrid.cpp       |  6 ++--
+ src/blixemApp/blxcontext.cpp           | 61 ++++++++++++++++++++++++++++++++--
+ src/blixemApp/blxcontext.hpp           |  4 ++-
+ src/blixemApp/blxwindow.cpp            |  4 +--
+ src/blixemApp/detailviewtree.cpp       | 10 +++---
+ src/blixemApp/exonview.cpp             |  6 ++--
+ src/blixemApp/sequencecellrenderer.cpp |  2 +-
+ 7 files changed, 75 insertions(+), 18 deletions(-)
+
+2016-07-28  Gemma Guest  <gb10 at sanger.ac.uk>
+ Minor fix to docs - DOC
+ src/INSTALL.VM | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2016-07-28  Gemma Guest  <gb10 at sanger.ac.uk>
+ Add VirtualBox installation instructions - DOC
+ src/INSTALL.VM | 159 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/README     |  50 ++++++++++--------
+ 2 files changed, 187 insertions(+), 22 deletions(-)
+
+2016-07-22  Ed Griffiths  <edgrif at sanger.ac.uk>
+ Merge branch 'production' into develop
+2016-07-22  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix up last month's release notes - DOC
+ src/doc/User_doc/release_notes.html | 17 +++++++++++------
+ 1 file changed, 11 insertions(+), 6 deletions(-)
+
+2016-07-22  zmap  <zmap at sanger.ac.uk>
+ Merge branch 'release/4.43.0' into production
+2016-07-21  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix a problem with font width highlighting in belvu - BUG FIX
+ src/belvuApp/belvuAlignment.cpp |  2 +-
+ src/blixemApp/blxcontext.cpp    |  2 +-
+ src/blixemApp/detailview.cpp    |  2 +-
+ src/dotterApp/dotter.cpp        |  2 +-
+ src/seqtoolsUtils/utilities.cpp | 34 +++++++++++++++++++++++++++-------
+ src/seqtoolsUtils/utilities.hpp |  2 +-
+ 6 files changed, 32 insertions(+), 12 deletions(-)
+
+2016-07-21  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.42.1-123-g99e0 - Update RT and git commit reports
+ src/ChangeLog                                  | 6 ++++++
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt | 4 ++--
+ 2 files changed, 8 insertions(+), 2 deletions(-)
+
+2016-07-19  Ed Griffiths  <edgrif at sanger.ac.uk>
+ Merge branch 'release/4.43.0' into develop
+2016-07-18  Gemma Guest  <gb10 at sanger.ac.uk>
+ Remove hack to hard-code -lX11 and -lm - BUILD
+ src/belvuApp/Makefile.am  | 2 +-
+ src/blixemApp/Makefile.am | 2 +-
+ src/dotterApp/Makefile.am | 2 +-
+ 3 files changed, 3 insertions(+), 3 deletions(-)
+
+2016-07-14  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.42.1-122-ge38c - Update RT and git commit reports
+ src/ChangeLog                                  | 6 ++++++
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt | 2 +-
+ 2 files changed, 7 insertions(+), 1 deletion(-)
+
+2016-07-14  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.42.1-121-ga2cdc - Update RT and git commit reports
+ src/ChangeLog                                  | 6 ++++++
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt | 3 ++-
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+2016-07-08  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.42.1-120-g943b - Update RT and git commit reports
+ src/ChangeLog                                  | 5 +++++
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt | 2 +-
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+2016-07-07  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.42.1-119-g08c2 - Update RT and git commit reports
+ src/ChangeLog | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+2016-07-07  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.42.1-118-ge73e - Update RT and git commit reports
+ src/ChangeLog                                  | 7 +++++++
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt | 2 +-
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+2016-07-06  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.42.1-117-g6b78 - Update RT and git commit reports
+ src/ChangeLog                                  | 24 ++++++++++++++++++++++++
+ src/build/release_docs/GIT_COMMITS.txt         |  2 --
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt |  2 +-
+ 3 files changed, 25 insertions(+), 3 deletions(-)
+
+2016-07-05  Ed Griffiths  <edgrif at sanger.ac.uk>
+ Merge branch 'release/4.43.0' into develop
+2016-07-05  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.42.1-111-g00f2 - Update RT and git commit reports
+ src/ChangeLog | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+2016-07-05  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.42.1-110-geacf0 - Update RT and git commit reports
+ src/ChangeLog                                  | 10 ++++++++++
+ src/build/release_docs/GIT_COMMITS.txt         |  1 +
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt |  2 +-
+ 3 files changed, 12 insertions(+), 1 deletion(-)
+
+2016-06-30  Ed Griffiths  <edgrif at sanger.ac.uk>
+ Update to fixes etc. for this releaes. - DOC
+ src/doc/User_doc/release_notes.html | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+2016-06-29  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.42.1-108-g8fb3b - Update RT and git commit reports
+ src/ChangeLog | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+2016-06-29  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.42.1-107-ga06d - Update RT and git commit reports
+ src/ChangeLog                                  | 7 +++++++
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt | 2 +-
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+2016-06-29  Gemma Guest  <gb10 at sanger.ac.uk>
+ Logging - TRIVIAL
+ src/autogen.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2016-06-29  Gemma Guest  <gb10 at sanger.ac.uk>
+ Logging - TRIVIAL
+ src/autogen.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2016-06-29  Gemma Guest  <gb10 at sanger.ac.uk>
+ Logging - TRIVIAL
+ src/autogen.sh | 1 +
+ 1 file changed, 1 insertion(+)
+
+2016-06-27  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.42.1-106-ga491 - Update RT and git commit reports
+ src/ChangeLog                                  | 11 +++++++++++
+ src/build/release_docs/GIT_COMMITS.txt         |  1 +
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt |  2 +-
+ 3 files changed, 13 insertions(+), 1 deletion(-)
+
+2016-06-27  Gemma Guest  <gb10 at sanger.ac.uk>
+ Merge branch 'release/4.43.0' into develop
+2016-06-27  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix bug finding data type - REGRESSION FIX
+ src/seqtoolsUtils/blxGff3Parser.cpp | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+2016-06-24  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.42.1-104-gb8ea - Update RT and git commit reports
+ src/ChangeLog                                  | 6 ++++++
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt | 2 +-
+ 2 files changed, 7 insertions(+), 1 deletion(-)
+
+2016-06-22  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.42.1-103-g89545 - Update RT and git commit reports
+ src/ChangeLog                                  | 7 +++++++
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt | 2 +-
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+2016-06-21  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.42.1-102-gc940 - Update RT and git commit reports
+ src/ChangeLog                                  | 185 +++++++++++++++++++++++++
+ src/build/release_docs/GIT_COMMITS.txt         |  10 +-
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt |  12 +-
+ 3 files changed, 203 insertions(+), 4 deletions(-)
+
+2016-06-20  Gemma Guest  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/groups' into develop
+2016-06-20  Gemma Guest  <gb10 at sanger.ac.uk>
+ Add groups list to scrolled window - WIP
+ src/blixemApp/blxwindow.cpp | 12 ++++++++++--
+ 1 file changed, 10 insertions(+), 2 deletions(-)
+
+2016-06-20  Gemma Guest  <gb10 at sanger.ac.uk>
+ Add option to hide a source - WIP
+ src/blixemApp/blxcontext.cpp | 47 ++++++++++++++++++++++++++++++++++++-
+ src/blixemApp/blxcontext.hpp |  3 +++
+ src/blixemApp/blxwindow.cpp  | 56 +++++++++++++++++++++++++++++++++-----------
+ 3 files changed, 91 insertions(+), 15 deletions(-)
+
+2016-06-20  Gemma Guest  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/groups' into develop
+2016-06-20  Gemma Guest  <gb10 at sanger.ac.uk>
+ Clear all groups not just quick groups - WIP
+ src/blixemApp/blxwindow.cpp | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+2016-06-20  Gemma Guest  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/groups' into develop
+2016-06-20  Gemma Guest  <gb10 at sanger.ac.uk>
+ Don't lose groups/filters when clearing - WIP
+ src/blixemApp/blxcontext.cpp | 29 ++++++++++++++++++++++++++---
+ src/blixemApp/blxcontext.hpp |  3 ++-
+ src/blixemApp/blxwindow.cpp  | 23 +++++++++++++++--------
+ 3 files changed, 43 insertions(+), 12 deletions(-)
+
+2016-06-20  Gemma Guest  <gb10 at sanger.ac.uk>
+ Don't highlight filtered seqs by default - WIP
+ src/blixemApp/blxwindow.cpp | 9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
+
+2016-06-15  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix error with bad access - REGRESSION FIX
+ src/seqtoolsUtils/blxGff3Parser.cpp | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+2016-06-15  Gemma Guest  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/groups' into develop
+2016-06-15  Gemma Guest  <gb10 at sanger.ac.uk>
+ Select clipboard features on startup
+ src/blixemApp/blixem_.hpp   |  1 +
+ src/blixemApp/blxwindow.cpp | 23 +++++++++++++++++++++--
+ src/blixemApp/blxwindow.hpp |  1 +
+ 3 files changed, 23 insertions(+), 2 deletions(-)
+
+2016-06-15  Gemma Guest  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/dotter_sfs' into develop
+2016-06-15  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix badly displayed labels
+ src/blixemApp/blxdotter.cpp     |  5 +--
+ src/dotterApp/dotplot.cpp       | 81 ++++++++++++++++++++++++++++++++---------
+ src/dotterApp/dotterMain.cpp    |  7 +++-
+ src/seqtoolsUtils/blxmsp.cpp    |  1 -
+ src/seqtoolsUtils/blxmsp.hpp    |  2 +-
+ src/seqtoolsUtils/blxparser.cpp | 60 +++---------------------------
+ 6 files changed, 76 insertions(+), 80 deletions(-)
+
+2016-06-14  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix minor compilation warning
+ src/dotterApp/dotter.cpp | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+2016-06-14  Gemma Guest  <gb10 at sanger.ac.uk>
+ Minor fix to dotter feature series
+ src/dotterApp/dotterMain.cpp    | 1 +
+ src/seqtoolsUtils/blxparser.cpp | 4 ++--
+ 2 files changed, 3 insertions(+), 2 deletions(-)
+
+2016-06-15  Gemma Guest  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/groups' into develop
+2016-06-13  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix edit groups dialog - REGRESSION FIX
+ src/blixemApp/blxwindow.cpp | 16 ++++++++++------
+ 1 file changed, 10 insertions(+), 6 deletions(-)
+
+2016-06-13  Gemma Guest  <gb10 at sanger.ac.uk>
+ Replace old filter-ungrouped flags - WIP
+ src/blixemApp/bigpicturegrid.cpp |  20 +-------
+ src/blixemApp/blixem_.hpp        |   2 -
+ src/blixemApp/blxcontext.cpp     | 105 +++++++++++++++++++++++++++++++++++----
+ src/blixemApp/blxcontext.hpp     |   5 ++
+ src/blixemApp/blxwindow.cpp      |  69 +++++++++++--------------
+ src/blixemApp/detailviewtree.cpp |  35 ++-----------
+ src/blixemApp/exonview.cpp       |  17 +------
+ 7 files changed, 135 insertions(+), 118 deletions(-)
+
+2016-06-13  Gemma Guest  <gb10 at sanger.ac.uk>
+ Add option to add to existing quick group/filter - WIP
+ src/blixemApp/blxcontext.cpp | 19 +++++++++++++++++++
+ src/blixemApp/blxcontext.hpp |  1 +
+ src/blixemApp/blxwindow.cpp  | 31 ++++++++++++++++++++++++-------
+ 3 files changed, 44 insertions(+), 7 deletions(-)
+
+2016-06-13  Gemma Guest  <gb10 at sanger.ac.uk>
+ Replace match set group with 'quick' groups and filters - WIP
+ src/blixemApp/blixem_.hpp    |   4 +
+ src/blixemApp/blxcontext.cpp |  35 +++++--
+ src/blixemApp/blxcontext.hpp |   2 +-
+ src/blixemApp/blxwindow.cpp  | 226 ++++++++++++++++++++++---------------------
+ 4 files changed, 151 insertions(+), 116 deletions(-)
+
+2016-05-18  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix compile error if no sqlite3 - BUILD
+ src/blixemApp/blxFetchDb.cpp | 16 ++++++----------
+ 1 file changed, 6 insertions(+), 10 deletions(-)
+
+2016-05-05  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix use of uninitialised variable - TRIVIAL
+ src/blixemApp/bigpicturegrid.cpp | 42 +++++++++++++++++++++++++++++-----------
+ src/blixemApp/bigpicturegrid.hpp |  5 +++++
+ 2 files changed, 36 insertions(+), 11 deletions(-)
+
+2016-05-05  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix call to invalid handler on exit - WIP
+ src/blixemApp/blxmain.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2016-05-05  Gemma Guest  <gb10 at sanger.ac.uk>
+ Replace malloc with new for structs/classes - WIP
+ src/belvuApp/belvu.cpp                 |  6 ++---
+ src/belvuApp/belvuAlignment.cpp        |  4 ++--
+ src/belvuApp/belvuConsPlot.cpp         |  4 ++--
+ src/belvuApp/belvuTree.cpp             |  8 +++----
+ src/belvuApp/belvuWindow.cpp           |  8 +++----
+ src/blixemApp/bigpicture.cpp           |  4 ++--
+ src/blixemApp/bigpicturegrid.cpp       |  4 ++--
+ src/blixemApp/blxFetch.cpp             | 42 +++++++++++++++++++++++-----------
+ src/blixemApp/blxcontext.cpp           |  4 ++--
+ src/blixemApp/blxdotter.cpp            |  4 ++--
+ src/blixemApp/blxmain.cpp              |  2 +-
+ src/blixemApp/blxview.cpp              |  4 ++--
+ src/blixemApp/blxwindow.cpp            | 12 +++++-----
+ src/blixemApp/detailview.cpp           | 39 ++++++++++++++++---------------
+ src/blixemApp/detailviewtree.cpp       |  8 +++----
+ src/blixemApp/exonview.cpp             |  4 ++--
+ src/blixemApp/sequencecellrenderer.cpp |  2 +-
+ src/dotterApp/alignmenttool.cpp        |  8 +++----
+ src/dotterApp/dotplot.cpp              |  4 ++--
+ src/dotterApp/dotter.cpp               | 19 +++++++++------
+ src/dotterApp/greyramptool.cpp         |  8 +++----
+ src/dotterApp/seqtoolsExonView.cpp     |  4 ++--
+ src/seqtoolsUtils/blxGff3Parser.cpp    |  6 ++---
+ src/seqtoolsUtils/blxmsp.cpp           | 15 +++++++-----
+ src/seqtoolsUtils/blxparser.cpp        |  2 +-
+ src/seqtoolsUtils/seqtoolsFetch.cpp    |  2 +-
+ src/seqtoolsUtils/utilities.cpp        | 12 +++++-----
+ src/seqtoolsUtils/utilities.hpp        | 19 ++++++++-------
+ 28 files changed, 144 insertions(+), 114 deletions(-)
+
+2016-05-04  Gemma Guest  <gb10 at sanger.ac.uk>
+ Merge branch 'release/4.43.0' into develop
+2016-05-04  Gemma Guest  <gb10 at sanger.ac.uk>
+ Further fix to possible memory corruption - WIP
+ src/dotterApp/dotter.cpp | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+2016-05-04  Gemma Guest  <gb10 at sanger.ac.uk>
+ Attempt to fix memory corruption on mac - WIP
+ src/blixemApp/blxwindow.cpp     |  6 ++++--
+ src/seqtoolsUtils/blxmsp.cpp    |  9 +++++----
+ src/seqtoolsUtils/utilities.cpp | 10 ----------
+ src/seqtoolsUtils/utilities.hpp |  4 ----
+ 4 files changed, 9 insertions(+), 20 deletions(-)
+
+2016-05-04  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix compile errors when debug enabled - WIP
+ src/blixemApp/detailview.cpp       | 4 ++--
+ src/dotterApp/seqtoolsExonView.cpp | 2 +-
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+2016-05-04  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.42.1-70-g1b86 - Update RT and git commit reports
+ src/ChangeLog | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+2016-05-04  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.42.1-69-g4306 - Update RT and git commit reports
+ src/ChangeLog                                  | 16 ++++++++++++++++
+ src/build/release_docs/GIT_COMMITS.txt         |  1 +
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt |  2 +-
+ 3 files changed, 18 insertions(+), 1 deletion(-)
+
+2016-05-03  Gemma Guest  <gb10 at sanger.ac.uk>
+ Attempt to fix crash on mac - REGRESSION FIX
+ src/blixemApp/detailview.cpp | 29 ++++++++++++++++-------------
+ 1 file changed, 16 insertions(+), 13 deletions(-)
+
+2016-05-03  Gemma Guest  <gb10 at sanger.ac.uk>
+ Revert "Revert "Remove to_string to fix compile error on FreeBSD - BUILD""
+ src/blixemApp/detailview.cpp | 35 +++++++++++++++++------------------
+ 1 file changed, 17 insertions(+), 18 deletions(-)
+
+2016-05-03  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.42.1-66-gc807 - Update RT and git commit reports
+ src/ChangeLog                                  | 11 +++++++++++
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt |  2 +-
+ 2 files changed, 12 insertions(+), 1 deletion(-)
+
+2016-05-03  Gemma Guest  <gb10 at sanger.ac.uk>
+ Revert "Remove to_string to fix compile error on FreeBSD - BUILD"
+ src/blixemApp/detailview.cpp | 35 ++++++++++++++++++-----------------
+ 1 file changed, 18 insertions(+), 17 deletions(-)
+
+2016-04-28  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.42.1-64-gd36e - Update RT and git commit reports
+ src/ChangeLog                                  | 5 +++++
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt | 2 +-
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+2016-04-26  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.42.1-63-g8b3b - Update RT and git commit reports
+ src/ChangeLog | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+2016-04-26  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.42.1-62-g70326 - Update RT and git commit reports
+ src/ChangeLog | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+2016-04-26  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.42.1-61-gddeb - Update RT and git commit reports
+ src/ChangeLog | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+2016-04-26  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.42.1-60-g164e4 - Update RT and git commit reports
+ src/ChangeLog                                  | 6 ++++++
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt | 2 +-
+ 2 files changed, 7 insertions(+), 1 deletion(-)
+
+2016-04-25  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.42.1-59-g125b - Update RT and git commit reports
+ src/ChangeLog                                  | 8 ++++++++
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt | 2 +-
+ 2 files changed, 9 insertions(+), 1 deletion(-)
+
+2016-04-22  Gemma Guest  <gb10 at sanger.ac.uk>
+ Merge branch 'release/4.43.0' into develop
+2016-04-22  Gemma Guest  <gb10 at sanger.ac.uk>
+ Merge branch 'production' into release/4.43.0
+2016-04-22  Gemma Guest  <gb10 at sanger.ac.uk>
+ Update release notes - DOC
+ src/doc/User_doc/release_notes.html | 13 +++++++++++--
+ 1 file changed, 11 insertions(+), 2 deletions(-)
+
+2016-04-22  Gemma Guest  <gb10 at sanger.ac.uk>
+ Remove to_string to fix compile error on FreeBSD - BUILD
+ src/blixemApp/detailview.cpp | 35 +++++++++++++++++------------------
+ 1 file changed, 17 insertions(+), 18 deletions(-)
+
+2016-04-18  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.42.0-58-g0f579 - Update RT and git commit reports
+ src/ChangeLog                          | 12 ++++++++++++
+ src/build/release_docs/GIT_COMMITS.txt |  1 +
+ 2 files changed, 13 insertions(+)
+
+2016-04-18  Gemma Guest  <gb10 at sanger.ac.uk>
+ Merge branch 'release/4.43.0' into develop
+2016-04-18  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix a typo which was causing drag-and-drop to fail - REGRESSION FIX
+ src/blixemApp/blxwindow.cpp | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+2016-04-18  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.42.0-56-g744c - Update RT and git commit reports
+ src/ChangeLog                                  | 17 +++++++++++++++++
+ src/build/release_docs/GIT_COMMITS.txt         |  1 +
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt |  2 +-
+ 3 files changed, 19 insertions(+), 1 deletion(-)
+
+2016-04-18  Gemma Guest  <gb10 at sanger.ac.uk>
+ Merge branch 'release/4.43.0' into develop
+2016-04-18  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix a memory corruption crash on blixem startup - REGRESSION FIX
+ src/blixemApp/blxwindow.cpp | 24 ++++++++++++------------
+ 1 file changed, 12 insertions(+), 12 deletions(-)
+
+2016-04-15  Steve Miller  <sm23 at sanger.ac.uk>
+ Release notes
+ src/doc/User_doc/release_notes.html | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+2016-04-15  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.42.0-53-g8864 - Update RT and git commit reports
+ src/ChangeLog                                  | 743 ++++++++++++++++---------
+ src/build/release_docs/GIT_COMMITS.txt         |  14 +-
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt |  12 +-
+ 3 files changed, 492 insertions(+), 277 deletions(-)
+
+2016-04-08  Gemma Guest  <gb10 at sanger.ac.uk>
+ Update release notes for addition of c++0x in 4.41.0 - DOC
+ src/doc/User_doc/release_notes.html | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2016-04-08  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix a bug with big picture sections slightly misaligned - REGRESSION FIX
+ src/blixemApp/bigpicture.cpp     | 2 +-
+ src/blixemApp/bigpicturegrid.cpp | 2 +-
+ src/blixemApp/exonview.cpp       | 2 +-
+ 3 files changed, 3 insertions(+), 3 deletions(-)
+
+2016-04-08  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix incorrect version number in release notes - DOC
+ src/doc/User_doc/release_notes.html | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+2016-04-08  Gemma Guest  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/coverage' into develop - NEW FEATURE 'Detail view coverage'
+2016-04-08  Gemma Guest  <gb10 at sanger.ac.uk>
+ Add option to display detail view coverage - WIP
+ src/blixemApp/blxwindow.cpp | 30 ++++++++++++++++++++++++++----
+ src/blixemApp/blxwindow.hpp |  3 ++-
+ 2 files changed, 28 insertions(+), 5 deletions(-)
+
+2016-04-07  Gemma Guest  <gb10 at sanger.ac.uk>
+ Add comments about remaining tidying to be done - WIP
+ src/blixemApp/coverageview.cpp | 13 +++++++++++--
+ 1 file changed, 11 insertions(+), 2 deletions(-)
+
+2016-04-07  Gemma Guest  <gb10 at sanger.ac.uk>
+ Move highlight box functions to base class - WIP
+ src/blixemApp/Makefile.am              |   2 +-
+ src/blixemApp/bigpicture.cpp           | 276 ++++------------------------
+ src/blixemApp/bigpicture.hpp           |  44 ++---
+ src/blixemApp/bigpicturegrid.cpp       |  13 +-
+ src/blixemApp/blxpanel.cpp             | 318 +++++++++++++++++++++++++++++++++
+ src/blixemApp/blxpanel.hpp             |  53 +++++-
+ src/blixemApp/blxwindow.cpp            |   9 +-
+ src/blixemApp/coverageview.cpp         |  19 +-
+ src/blixemApp/coverageview.hpp         |   4 +-
+ src/blixemApp/detailview.cpp           |  90 ++++------
+ src/blixemApp/detailview.hpp           |  17 +-
+ src/blixemApp/detailviewtree.cpp       |  16 +-
+ src/blixemApp/exonview.cpp             |  17 +-
+ src/blixemApp/sequencecellrenderer.cpp |  16 +-
+ 14 files changed, 511 insertions(+), 383 deletions(-)
+
+2016-04-07  Gemma Guest  <gb10 at sanger.ac.uk>
+ Add setting to change depth-per-cell for detail view coverage - WIP
+ src/blixemApp/blxwindow.cpp | 16 +++++++++++-----
+ 1 file changed, 11 insertions(+), 5 deletions(-)
+
+2016-04-07  Gemma Guest  <gb10 at sanger.ac.uk>
+ Rename x position variable - WIP
+ src/blixemApp/bigpicture.cpp     | 6 +++---
+ src/blixemApp/bigpicture.hpp     | 2 +-
+ src/blixemApp/bigpicturegrid.cpp | 2 +-
+ src/blixemApp/blxpanel.hpp       | 2 +-
+ src/blixemApp/coverageview.cpp   | 7 +++----
+ src/blixemApp/coverageview.hpp   | 5 +----
+ src/blixemApp/detailview.cpp     | 2 +-
+ src/blixemApp/detailview.hpp     | 2 +-
+ src/blixemApp/exonview.cpp       | 2 +-
+ 9 files changed, 13 insertions(+), 17 deletions(-)
+
+2016-04-07  Gemma Guest  <gb10 at sanger.ac.uk>
+ Set highlight range for big picture panel - WIP
+ src/blixemApp/bigpicture.cpp   | 14 ++++++++++++++
+ src/blixemApp/bigpicture.hpp   |  1 +
+ src/blixemApp/blxpanel.hpp     |  5 ++++-
+ src/blixemApp/coverageview.cpp | 18 ++++++++++++++++--
+ src/blixemApp/coverageview.hpp |  1 +
+ 5 files changed, 36 insertions(+), 3 deletions(-)
+
+2016-04-07  Gemma Guest  <gb10 at sanger.ac.uk>
+ Move highlight-box calc to base class - WIP
+ src/blixemApp/bigpicture.cpp     | 45 +---------------------------------------
+ src/blixemApp/bigpicture.hpp     |  6 ------
+ src/blixemApp/bigpicturegrid.cpp | 15 +++++++++++++-
+ src/blixemApp/blxcontext.cpp     | 36 ++++++++++++++++++++++++++++++++
+ src/blixemApp/blxcontext.hpp     |  4 ++++
+ src/blixemApp/blxpanel.hpp       |  7 +++++++
+ src/blixemApp/coverageview.cpp   | 44 ++++++++++++++++++++++++---------------
+ src/blixemApp/coverageview.hpp   |  3 +--
+ src/blixemApp/detailview.cpp     |  4 ----
+ src/blixemApp/detailview.hpp     |  3 ---
+ 10 files changed, 90 insertions(+), 77 deletions(-)
+
+2016-04-07  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix detail view coverage section width - WIP
+ src/blixemApp/bigpicture.cpp   | 12 ++++++++++++
+ src/blixemApp/bigpicture.hpp   |  1 +
+ src/blixemApp/blixem_.hpp      |  8 ++++----
+ src/blixemApp/blxpanel.hpp     |  2 +-
+ src/blixemApp/blxview.cpp      |  8 ++++----
+ src/blixemApp/blxwindow.cpp    |  4 ++--
+ src/blixemApp/coverageview.cpp | 20 ++++++++++++++++++--
+ src/blixemApp/coverageview.hpp |  3 ++-
+ src/blixemApp/detailview.cpp   | 24 +++++++++++-------------
+ src/blixemApp/detailview.hpp   |  1 +
+ 10 files changed, 56 insertions(+), 27 deletions(-)
+
+2016-04-07  Gemma Guest  <gb10 at sanger.ac.uk>
+ Derive detail-view from BlxPanel - WIP
+ src/blixemApp/detailview.cpp | 120 ++++++++++++++++++++++++++++++-------------
+ src/blixemApp/detailview.hpp |   9 +++-
+ 2 files changed, 90 insertions(+), 39 deletions(-)
+
+2016-04-07  Gemma Guest  <gb10 at sanger.ac.uk>
+ Add detail-view destructor - WIP
+ src/blixemApp/detailview.cpp | 65 +++++++++++++++++++++++---------------------
+ src/blixemApp/detailview.hpp |  5 ++++
+ 2 files changed, 39 insertions(+), 31 deletions(-)
+
+2016-04-07  Gemma Guest  <gb10 at sanger.ac.uk>
+ Add base class for big picture - WIP
+ src/blixemApp/Makefile.am        |  2 +-
+ src/blixemApp/bigpicture.cpp     | 34 ++++++++++++++------------
+ src/blixemApp/bigpicture.hpp     | 13 +++++++---
+ src/blixemApp/bigpicturegrid.cpp |  2 +-
+ src/blixemApp/blxpanel.hpp       | 53 ++++++++++++++++++++++++++++++++++++++++
+ src/blixemApp/coverageview.cpp   | 19 ++++++++------
+ src/blixemApp/coverageview.hpp   | 11 +++++++--
+ src/blixemApp/exonview.cpp       |  2 +-
+ 8 files changed, 104 insertions(+), 32 deletions(-)
+
+2016-04-06  Gemma Guest  <gb10 at sanger.ac.uk>
+ Coverage section has pointer to parent left border pos - WIP
+ src/blixemApp/bigpicture.cpp     | 103 ++++++++++++++++++++++-----------------
+ src/blixemApp/bigpicture.hpp     |   9 ++--
+ src/blixemApp/bigpicturegrid.cpp |   2 +-
+ src/blixemApp/coverageview.cpp   |  23 ++++++++-
+ src/blixemApp/coverageview.hpp   |   5 ++
+ src/blixemApp/exonview.cpp       |   2 +-
+ 6 files changed, 91 insertions(+), 53 deletions(-)
+
+2016-04-06  Gemma Guest  <gb10 at sanger.ac.uk>
+ Remove unnecessary member variable - WIP
+ src/blixemApp/bigpicture.cpp     |  2 --
+ src/blixemApp/bigpicture.hpp     |  3 ---
+ src/blixemApp/bigpicturegrid.cpp | 13 +++++--------
+ src/blixemApp/blixem_.hpp        |  3 ++-
+ src/blixemApp/coverageview.cpp   | 12 +++---------
+ src/blixemApp/exonview.cpp       |  8 +++-----
+ 6 files changed, 13 insertions(+), 28 deletions(-)
+
+2016-04-06  Gemma Guest  <gb10 at sanger.ac.uk>
+ Remove unnecessary member variable - WIP
+ src/blixemApp/bigpicture.cpp     | 8 +++++---
+ src/blixemApp/bigpicture.hpp     | 4 +++-
+ src/blixemApp/bigpicturegrid.cpp | 2 +-
+ src/blixemApp/coverageview.cpp   | 4 ++--
+ 4 files changed, 11 insertions(+), 7 deletions(-)
+
+2016-04-06  Gemma Guest  <gb10 at sanger.ac.uk>
+ Remove char size from big picture - WIP
+ src/blixemApp/bigpicture.cpp     | 49 +++++++++++++++++++++++++++++-----------
+ src/blixemApp/bigpicture.hpp     | 11 ++++++---
+ src/blixemApp/bigpicturegrid.cpp |  2 +-
+ src/blixemApp/blxcontext.cpp     |  5 ++++
+ src/blixemApp/blxcontext.hpp     |  1 +
+ src/blixemApp/exonview.cpp       |  2 +-
+ 6 files changed, 52 insertions(+), 18 deletions(-)
+
+2016-04-06  Gemma Guest  <gb10 at sanger.ac.uk>
+ Add char size to BlxContext - WIP
+ src/blixemApp/blxcontext.cpp   | 11 +++++++++++
+ src/blixemApp/blxcontext.hpp   | 16 +++++++++++++---
+ src/blixemApp/coverageview.cpp | 13 ++++++++++++-
+ src/blixemApp/coverageview.hpp |  1 +
+ 4 files changed, 37 insertions(+), 4 deletions(-)
+
+2016-04-06  Gemma Guest  <gb10 at sanger.ac.uk>
+ Move sequence-group code to BlxContext file - WIP
+ src/blixemApp/bigpicturegrid.cpp       |   2 +-
+ src/blixemApp/blxcontext.cpp           | 116 ++++++++++++++++++++++++++++++
+ src/blixemApp/blxcontext.hpp           |   8 ++-
+ src/blixemApp/blxdotter.cpp            |  10 +--
+ src/blixemApp/blxwindow.cpp            | 125 ++-------------------------------
+ src/blixemApp/blxwindow.hpp            |   7 --
+ src/blixemApp/detailview.cpp           |   4 +-
+ src/blixemApp/detailviewtree.cpp       |   4 +-
+ src/blixemApp/exonview.cpp             |   4 +-
+ src/blixemApp/sequencecellrenderer.cpp |   4 +-
+ 10 files changed, 142 insertions(+), 142 deletions(-)
+
+2016-04-06  Gemma Guest  <gb10 at sanger.ac.uk>
+ Add BlxContext destructor - WIP
+ src/blixemApp/blxcontext.cpp    | 111 ++++++++++++++++++++++++++++-
+ src/blixemApp/blxcontext.hpp    |   6 ++
+ src/blixemApp/blxwindow.cpp     | 151 ++--------------------------------------
+ src/seqtoolsUtils/utilities.cpp |  23 ++++++
+ src/seqtoolsUtils/utilities.hpp |   2 +
+ 5 files changed, 147 insertions(+), 146 deletions(-)
+
+2016-04-06  Gemma Guest  <gb10 at sanger.ac.uk>
+ Move code to BlxContext file - WIP
+ src/blixemApp/blxcontext.cpp   | 333 +++++++++++++++++++++++++++++++++++++++-
+ src/blixemApp/blxcontext.hpp   |   6 +-
+ src/blixemApp/blxwindow.cpp    | 340 ++---------------------------------------
+ src/blixemApp/blxwindow.hpp    |   2 -
+ src/blixemApp/coverageview.cpp |   2 +-
+ src/blixemApp/detailview.cpp   |  16 +-
+ 6 files changed, 354 insertions(+), 345 deletions(-)
+
+2016-04-06  Gemma Guest  <gb10 at sanger.ac.uk>
+ Add BlxContext cpp file - WIP
+ src/blixemApp/Makefile.am    |   2 +-
+ src/blixemApp/blixem_.hpp    |   5 +-
+ src/blixemApp/blxcontext.cpp | 350 +++++++++++++++++++++++++++++++++++++++++++
+ src/blixemApp/blxcontext.hpp |   8 +-
+ src/blixemApp/blxwindow.cpp  | 305 +------------------------------------
+ 5 files changed, 361 insertions(+), 309 deletions(-)
+
+2016-04-06  Gemma Guest  <gb10 at sanger.ac.uk>
+ Move BlxContext to separate header - WIP
+ src/blixemApp/Makefile.am              |   2 +-
+ src/blixemApp/bigpicture.cpp           |   1 +
+ src/blixemApp/bigpicturegrid.cpp       |   1 +
+ src/blixemApp/blixem_.hpp              |  99 +----------------------
+ src/blixemApp/blxFetch.cpp             |   1 +
+ src/blixemApp/blxcontext.hpp           | 139 +++++++++++++++++++++++++++++++++
+ src/blixemApp/blxdotter.cpp            |   1 +
+ src/blixemApp/blxview.cpp              |   1 +
+ src/blixemApp/blxwindow.cpp            |   1 +
+ src/blixemApp/coverageview.cpp         |   1 +
+ src/blixemApp/detailview.cpp           |   1 +
+ src/blixemApp/detailviewtree.cpp       |   1 +
+ src/blixemApp/exonview.cpp             |   1 +
+ src/blixemApp/sequencecellrenderer.cpp |   1 +
+ 14 files changed, 155 insertions(+), 96 deletions(-)
+
+2016-04-06  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix compiler warnings - BUILD
+ src/dotterApp/dotter.cpp | 2 --
+ 1 file changed, 2 deletions(-)
+
+2016-04-06  Gemma Guest  <gb10 at sanger.ac.uk>
+ Add BlxContext constructor - WIP
+ src/blixemApp/blixem_.hpp   |  16 +++
+ src/blixemApp/blxwindow.cpp | 283 ++++++++++++++++++++++----------------------
+ 2 files changed, 155 insertions(+), 144 deletions(-)
+
+2016-04-06  Gemma Guest  <gb10 at sanger.ac.uk>
+ Rename BlxContext - WIP
+ src/blixemApp/bigpicture.cpp           |  24 ++--
+ src/blixemApp/bigpicture.hpp           |   8 +-
+ src/blixemApp/bigpicturegrid.cpp       |  20 ++--
+ src/blixemApp/blixem_.hpp              |  16 +--
+ src/blixemApp/blxFetch.cpp             |  14 +--
+ src/blixemApp/blxdotter.cpp            |  86 +++++++-------
+ src/blixemApp/blxview.cpp              |  22 ++--
+ src/blixemApp/blxwindow.cpp            | 211 ++++++++++++++++-----------------
+ src/blixemApp/blxwindow.hpp            |  16 +--
+ src/blixemApp/coverageview.cpp         |   6 +-
+ src/blixemApp/coverageview.hpp         |   6 +-
+ src/blixemApp/detailview.cpp           | 124 +++++++++----------
+ src/blixemApp/detailview.hpp           |   6 +-
+ src/blixemApp/detailviewtree.cpp       |  34 +++---
+ src/blixemApp/detailviewtree.hpp       |   2 +-
+ src/blixemApp/exonview.cpp             |  20 ++--
+ src/blixemApp/sequencecellrenderer.cpp |  12 +-
+ 17 files changed, 313 insertions(+), 314 deletions(-)
+
+2016-04-06  Gemma Guest  <gb10 at sanger.ac.uk>
+ Convert context to class - WIP
+ src/blixemApp/blixem_.hpp | 133 ++++++++++++++++++++++++----------------------
+ 1 file changed, 68 insertions(+), 65 deletions(-)
+
+2016-04-06  Gemma Guest  <gb10 at sanger.ac.uk>
+ Remove deprecated register keyword - BUILD
+ src/dotterApp/dotplot.cpp      | 20 ++++++++++----------
+ src/dotterApp/dotterKarlin.cpp |  6 +++---
+ 2 files changed, 13 insertions(+), 13 deletions(-)
+
+2016-04-05  Gemma Guest  <gb10 at sanger.ac.uk>
+ Add correct display range for detail view coverage - WIP
+ src/blixemApp/bigpicture.cpp   |  4 +++
+ src/blixemApp/coverageview.cpp | 78 ++++++++++++++++++++++--------------------
+ src/blixemApp/coverageview.hpp | 30 ++++++++++------
+ src/blixemApp/detailview.cpp   |  6 +++-
+ 4 files changed, 70 insertions(+), 48 deletions(-)
+
+2016-04-05  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix bugs with coverage view in detail view - WIP
+ src/blixemApp/blxwindow.cpp    |  5 +++++
+ src/blixemApp/coverageview.cpp | 10 ++++++----
+ 2 files changed, 11 insertions(+), 4 deletions(-)
+
+2016-04-05  Gemma Guest  <gb10 at sanger.ac.uk>
+ Remove obsolete function - WIP
+ src/blixemApp/bigpicture.cpp | 6 ------
+ src/blixemApp/bigpicture.hpp | 1 -
+ src/blixemApp/detailview.cpp | 6 ------
+ src/blixemApp/detailview.hpp | 1 -
+ 4 files changed, 14 deletions(-)
+
+2016-04-05  Gemma Guest  <gb10 at sanger.ac.uk>
+ Add coverage view to detail view - WIP
+ src/blixemApp/blxwindow.cpp  |   1 +
+ src/blixemApp/detailview.cpp | 250 ++++++++++++++++++++++++++-----------------
+ src/blixemApp/detailview.hpp |  11 +-
+ 3 files changed, 161 insertions(+), 101 deletions(-)
+
+2016-04-05  Gemma Guest  <gb10 at sanger.ac.uk>
+ Add constructor for detail view - WIP
+ src/blixemApp/detailview.cpp | 197 ++++++++++++++++++++++++-------------------
+ src/blixemApp/detailview.hpp |  17 ++++
+ 2 files changed, 128 insertions(+), 86 deletions(-)
+
+2016-04-05  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix bug with zooming to range - WIP
+ src/blixemApp/bigpicture.cpp    | 3 ++-
+ src/blixemApp/detailview.cpp    | 4 ++--
+ src/dotterApp/alignmenttool.cpp | 6 ++++--
+ src/seqtoolsUtils/blxmsp.cpp    | 4 ++--
+ 4 files changed, 10 insertions(+), 7 deletions(-)
+
+2016-04-05  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix off-by-one in big picture drawing, and more tidying - WIP
+ src/blixemApp/bigpicture.cpp           |  4 ++--
+ src/blixemApp/blixem_.hpp              |  6 +++---
+ src/blixemApp/blxFetch.cpp             |  8 ++++----
+ src/blixemApp/blxwindow.cpp            |  4 ++--
+ src/blixemApp/detailview.cpp           |  2 +-
+ src/blixemApp/exonview.cpp             |  4 ++--
+ src/blixemApp/sequencecellrenderer.cpp |  6 +++---
+ src/seqtoolsUtils/blxmsp.cpp           | 14 ++++----------
+ src/seqtoolsUtils/blxmsp.hpp           |  4 ++--
+ 9 files changed, 23 insertions(+), 29 deletions(-)
+
+2016-04-05  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix bug with drawing msps and more tidying - WIP
+ src/blixemApp/bigpicture.cpp           |  9 ++--
+ src/blixemApp/blixem_.hpp              |  6 +--
+ src/blixemApp/blxFetch.cpp             |  8 +--
+ src/blixemApp/blxdotter.cpp            |  8 +--
+ src/blixemApp/blxmain.cpp              |  4 +-
+ src/blixemApp/blxview.cpp              | 20 +++++---
+ src/blixemApp/blxwindow.cpp            | 12 ++---
+ src/blixemApp/detailview.cpp           | 14 ++---
+ src/blixemApp/detailviewtree.cpp       |  2 +-
+ src/blixemApp/sequencecellrenderer.cpp |  3 +-
+ src/dotterApp/alignmenttool.cpp        |  9 ++--
+ src/dotterApp/dotplot.cpp              |  4 +-
+ src/seqtoolsUtils/blxGff3Parser.cpp    |  7 ++-
+ src/seqtoolsUtils/blxmsp.cpp           | 62 +++++++++++++++--------
+ src/seqtoolsUtils/blxmsp.hpp           |  4 +-
+ src/seqtoolsUtils/blxparser.cpp        |  2 +-
+ src/seqtoolsUtils/utilities.cpp        | 93 ++++++++++++++++++++++++++--------
+ src/seqtoolsUtils/utilities.hpp        |  4 +-
+ 18 files changed, 172 insertions(+), 99 deletions(-)
+
+2016-04-05  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix bug with updating scroll range - WIP
+ src/blixemApp/bigpicture.cpp       | 6 ++++--
+ src/blixemApp/bigpicturegrid.cpp   | 9 ++-------
+ src/blixemApp/blxview.cpp          | 7 +++++--
+ src/blixemApp/exonview.cpp         | 9 ++-------
+ src/dotterApp/seqtoolsExonView.cpp | 4 ++--
+ 5 files changed, 15 insertions(+), 20 deletions(-)
+
+2016-04-05  Gemma Guest  <gb10 at sanger.ac.uk>
+ Use c++ bool values - WIP
+ src/seqtoolsUtils/utilities.hpp | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+2016-04-05  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix bug with zooming due to intrange change - WIP
+ src/blixemApp/bigpicture.cpp    |  2 +-
+ src/seqtoolsUtils/utilities.cpp | 11 +++++++----
+ 2 files changed, 8 insertions(+), 5 deletions(-)
+
+2016-04-05  Gemma Guest  <gb10 at sanger.ac.uk>
+ Remove accidental file - WIP
+ src/blixemApp/sequencecellrenderer.cpp.~develop~ | 1612 ----------------------
+ 1 file changed, 1612 deletions(-)
+
+2016-04-05  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix a bug with new range access functions - WIP
+ src/seqtoolsUtils/utilities.cpp | 14 +++++++++++---
+ 1 file changed, 11 insertions(+), 3 deletions(-)
+
+2016-04-05  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix a bug with unset ranges - WIP
+ src/blixemApp/bigpicture.cpp           |  2 +-
+ src/blixemApp/blxmain.cpp              |  4 +--
+ src/blixemApp/blxview.cpp              | 15 +++++++--
+ src/blixemApp/blxwindow.cpp            |  2 +-
+ src/blixemApp/sequencecellrenderer.cpp |  8 ++---
+ src/dotterApp/alignmenttool.cpp        |  1 -
+ src/dotterApp/dotter.cpp               | 32 ++++++++++++-------
+ src/seqtoolsUtils/blxGff3Parser.cpp    |  4 +--
+ src/seqtoolsUtils/blxmsp.cpp           |  8 ++---
+ src/seqtoolsUtils/blxparser.cpp        |  2 +-
+ src/seqtoolsUtils/utilities.cpp        | 57 ++++++++++++++++++++++++++++------
+ src/seqtoolsUtils/utilities.hpp        | 26 +++++++++++-----
+ 12 files changed, 112 insertions(+), 49 deletions(-)
+
+2016-04-05  Gemma Guest  <gb10 at sanger.ac.uk>
+ Add utility function to simplify code - WIP
+ src/blixemApp/bigpicture.cpp           | 25 ++++++++----------------
+ src/blixemApp/blxmain.cpp              |  9 +++------
+ src/blixemApp/blxview.cpp              | 19 +++++++-----------
+ src/blixemApp/blxwindow.cpp            | 13 +++++--------
+ src/blixemApp/detailview.cpp           | 16 ++++++----------
+ src/blixemApp/sequencecellrenderer.cpp |  6 ++----
+ src/dotterApp/alignmenttool.cpp        | 18 ++++++-----------
+ src/dotterApp/dotplot.cpp              |  4 ++--
+ src/dotterApp/dotter.cpp               | 12 ++++--------
+ src/dotterApp/dotterMain.cpp           |  3 +--
+ src/seqtoolsUtils/blxmsp.cpp           | 35 +++++++++++++---------------------
+ src/seqtoolsUtils/blxparser.cpp        |  3 +--
+ src/seqtoolsUtils/utilities.cpp        | 18 +++++++++++++----
+ src/seqtoolsUtils/utilities.hpp        |  2 ++
+ 14 files changed, 74 insertions(+), 109 deletions(-)
+
+2016-04-05  Gemma Guest  <gb10 at sanger.ac.uk>
+ Convert IntRange to class - WIP
+ src/blixemApp/bigpicture.cpp           |  98 +++++++--------
+ src/blixemApp/bigpicturegrid.cpp       |  38 +++---
+ src/blixemApp/blxdotter.cpp            |  50 ++++----
+ src/blixemApp/blxmain.cpp              |  16 +--
+ src/blixemApp/blxview.cpp              |  80 ++++++------
+ src/blixemApp/blxwindow.cpp            | 107 ++++++++--------
+ src/blixemApp/coverageview.cpp         |   8 +-
+ src/blixemApp/detailview.cpp           | 175 +++++++++++++-------------
+ src/blixemApp/detailviewtree.cpp       |  50 ++++----
+ src/blixemApp/exonview.cpp             |  15 ++-
+ src/blixemApp/sequencecellrenderer.cpp |  50 ++++----
+ src/dotterApp/alignmenttool.cpp        |  62 ++++-----
+ src/dotterApp/dotplot.cpp              |  62 ++++-----
+ src/dotterApp/dotter.cpp               |  58 ++++-----
+ src/dotterApp/dotterMain.cpp           |   3 +-
+ src/dotterApp/seqtoolsExonView.cpp     |   4 +-
+ src/seqtoolsUtils/blxGff3Parser.cpp    |  28 ++---
+ src/seqtoolsUtils/blxmsp.cpp           | 170 ++++++++++++-------------
+ src/seqtoolsUtils/blxparser.cpp        |  18 +--
+ src/seqtoolsUtils/utilities.cpp        | 222 +++++++++++++++++++++------------
+ src/seqtoolsUtils/utilities.hpp        |  35 ++++--
+ 21 files changed, 716 insertions(+), 633 deletions(-)
+
+2016-04-04  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix off-by-one error drawing coverage view - WIP
+ src/blixemApp/coverageview.cpp | 24 ++++++++++++------------
+ 1 file changed, 12 insertions(+), 12 deletions(-)
+
+2016-03-11  Gemma Guest  <gb10 at sanger.ac.uk>
+ Convert coverage view to a class - WIP
+ src/blixemApp/bigpicture.cpp     | 219 ++++++++++++++++++----------
+ src/blixemApp/bigpicture.hpp     |  32 ++++-
+ src/blixemApp/bigpicturegrid.cpp |   2 +-
+ src/blixemApp/blxwindow.cpp      |  66 ++++++---
+ src/blixemApp/coverageview.cpp   | 303 ++++++++++++++++++++++-----------------
+ src/blixemApp/coverageview.hpp   |  48 +++++--
+ 6 files changed, 429 insertions(+), 241 deletions(-)
+
+2016-03-11  Gemma Guest  <gb10 at sanger.ac.uk>
+ Convert to classes and add ptr to widget - WIP
+ src/belvuApp/belvuAlignment.cpp  |  7 +++++--
+ src/belvuApp/belvuConsPlot.cpp   | 43 +++++++++++++++++++++-------------------
+ src/belvuApp/belvuTree.cpp       | 41 ++++++++++++++++++++------------------
+ src/belvuApp/belvuWindow.cpp     | 34 ++++++++++++++++++-------------
+ src/blixemApp/bigpicture.cpp     |  4 +++-
+ src/blixemApp/bigpicture.hpp     | 10 ++++++----
+ src/blixemApp/bigpicturegrid.cpp |  3 ++-
+ src/blixemApp/bigpicturegrid.hpp |  1 +
+ src/blixemApp/blxwindow.cpp      | 25 +++++++++++++----------
+ src/blixemApp/coverageview.cpp   | 25 +++++++++++++----------
+ src/blixemApp/detailview.cpp     |  7 +++++--
+ src/blixemApp/detailview.hpp     |  1 +
+ src/blixemApp/detailviewtree.cpp |  3 ++-
+ src/blixemApp/detailviewtree.hpp |  3 ++-
+ src/blixemApp/exonview.cpp       | 23 +++++++++++----------
+ src/dotterApp/alignmenttool.cpp  | 16 ++++++++++-----
+ src/dotterApp/dotplot.cpp        |  3 ++-
+ src/dotterApp/dotter.cpp         |  7 +++++--
+ src/dotterApp/dotter_.hpp        |  2 ++
+ src/dotterApp/greyramptool.cpp   | 43 +++++++++++++++++++++-------------------
+ 20 files changed, 176 insertions(+), 125 deletions(-)
+
+2016-03-11  Gemma Guest  <gb10 at sanger.ac.uk>
+ Convert properties structs to classes - WIP
+ src/blixemApp/bigpicture.hpp     | 78 ++++++++++++++++++++--------------------
+ src/blixemApp/bigpicturegrid.hpp | 25 ++++++-------
+ src/blixemApp/detailview.hpp     |  5 +--
+ src/blixemApp/detailviewtree.hpp | 23 ++++++------
+ src/dotterApp/dotter_.hpp        | 78 ++++++++++++++++++++--------------------
+ 5 files changed, 108 insertions(+), 101 deletions(-)
+
+2016-04-04  Ed Griffiths  <edgrif at sanger.ac.uk>
+ Merge branch 'production' into develop
+2016-04-04  Ed Griffiths  <edgrif at sanger.ac.uk>
+ Update release notes. - DOC
+ src/doc/User_doc/release_notes.html | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+2016-04-04  Ed Griffiths  <edgrif at sanger.ac.uk>
+ Merge branch 'production' into develop
+2016-04-04  zmap  <zmap at sanger.ac.uk>
+ Merge branch 'release/4.42.0' into production
+2016-03-23  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.41.1-46-g0299 - Update RT and git commit reports
+ src/ChangeLog                                  | 7 +++++++
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt | 2 +-
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+2016-03-17  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.41.1-45-gb1f4 - Update RT and git commit reports
+ src/ChangeLog                                  | 368 ++++++++++++++++---------
+ src/build/release_docs/GIT_COMMITS.txt         |  14 +-
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt |  12 +-
+ 3 files changed, 264 insertions(+), 130 deletions(-)
+
+2016-03-11  Gemma Guest  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/read_depth' into develop
+2016-03-11  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix compiler error on older gcc versions - BUILD
+ src/blixemApp/detailview.cpp | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+2016-03-11  Gemma Guest  <gb10 at sanger.ac.uk>
+ Add read depth counters for N, gaps and unknown - WIP
+ src/blixemApp/blixem_.hpp    |  8 ++++++--
+ src/blixemApp/blxwindow.cpp  | 49 ++++++++++++++++++++++++++++++++++++++------
+ src/blixemApp/detailview.cpp | 32 +++++++++++++++++++++++------
+ 3 files changed, 75 insertions(+), 14 deletions(-)
+
+2016-03-11  Gemma Guest  <gb10 at sanger.ac.uk>
+ Make read depth display for active strand only - WIP
+ src/blixemApp/blixem_.hpp    |  22 ++++--
+ src/blixemApp/blxwindow.cpp  | 168 ++++++++++++++++++++++++++++++++++---------
+ src/blixemApp/blxwindow.hpp  |   5 +-
+ src/blixemApp/detailview.cpp |  21 ++++--
+ 4 files changed, 169 insertions(+), 47 deletions(-)
+
+2016-03-10  Gemma Guest  <gb10 at sanger.ac.uk>
+ Read coverage now shows specific base support at coord - WIP
+ src/blixemApp/blixem_.hpp    |  18 +++++++-
+ src/blixemApp/blxwindow.cpp  | 102 +++++++++++++++++++++++++++++++++----------
+ src/blixemApp/blxwindow.hpp  |   2 +-
+ src/blixemApp/detailview.cpp |  31 ++++++++++++-
+ 4 files changed, 128 insertions(+), 25 deletions(-)
+
+2016-03-10  Gemma Guest  <gb10 at sanger.ac.uk>
+ Update installation instructions - DOC
+ src/INSTALL.linux   |  7 +++++--
+ src/INSTALL.mac     |  7 +++++--
+ src/INSTALL.windows | 41 +++++++++++++++++++++++++++++++++++------
+ src/README          | 31 ++++++++++++++++++++++++-------
+ 4 files changed, 69 insertions(+), 17 deletions(-)
+
+2016-03-10  Gemma Guest  <gb10 at sanger.ac.uk>
+ Merge branch 'develop' into feature/read_depth
+2016-03-09  Gemma Guest  <gb10 at sanger.ac.uk>
+ Minor improvement to installation instructions - RT 519841
+ src/INSTALL.linux | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+2016-03-09  Gemma Guest  <gb10 at sanger.ac.uk>
+ Add README for generated files - BUILD
+ src/build/release_docs/README | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+2016-03-09  Gemma Guest  <gb10 at sanger.ac.uk>
+ Merge branch 'production' into develop
+2016-03-09  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix a C++ compilation error on cygwin - BUG FIX
+ src/configure.ac | 1 -
+ 1 file changed, 1 deletion(-)
+
+2016-03-09  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix a C++ compilation error on cygwin - BUG FIX
+ src/configure.ac | 1 -
+ 1 file changed, 1 deletion(-)
+
+2016-03-02  zmap  <zmap at sanger.ac.uk>
+ Merge branch 'release/4.41.0' into production
+2016-03-01  Gemma Guest  <gb10 at sanger.ac.uk>
+ Merge branch 'develop' into feature/read_depth
+2016-03-01  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix compile error on linux - REGRESSION FIX
+ src/blixemApp/blxdotter.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2016-03-01  Gemma Guest  <gb10 at sanger.ac.uk>
+ Replace fprintf etc. with GLib functions - WIP
+ src/blixemApp/blxdotter.cpp     | 159 +++++++++++++++++++---------------------
+ src/seqtoolsUtils/blxmsp.cpp    | 151 ++++++++++++++++++++++++--------------
+ src/seqtoolsUtils/blxmsp.hpp    |   6 +-
+ src/seqtoolsUtils/utilities.cpp |  45 ++++++++----
+ src/seqtoolsUtils/utilities.hpp |   2 +-
+ 5 files changed, 206 insertions(+), 157 deletions(-)
+
+2016-02-29  Gemma Guest  <gb10 at sanger.ac.uk>
+ Replace mkstemp with g_mkstemp - TRIVIAL
+ src/blixemApp/blxFetch.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2016-02-29  Gemma Guest  <gb10 at sanger.ac.uk>
+ Minor update to previous - WIP
+ src/seqtoolsUtils/utilities.cpp | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+2016-02-29  Gemma Guest  <gb10 at sanger.ac.uk>
+ Merge branch 'develop' into feature/read_depth
+2016-02-29  Gemma Guest  <gb10 at sanger.ac.uk>
+ Replace popen call with GLib function - REGRESSION FIX
+ src/Makefile.am.common          |  4 +---
+ src/seqtoolsUtils/utilities.cpp | 43 +++++++++++++++++------------------------
+ 2 files changed, 19 insertions(+), 28 deletions(-)
+
+2016-02-29  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.40.0-25-g9d5a - Update RT and git commit reports
+ src/ChangeLog                                  | 6 ++++++
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt | 2 +-
+ 2 files changed, 7 insertions(+), 1 deletion(-)
+
+2016-02-29  Gemma Guest  <gb10 at sanger.ac.uk>
+ Revert "Revert "Fix ambiguous call to overloaded fn - REGRESSION FIX""
+ src/blixemApp/detailview.cpp | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+2016-02-29  Gemma Guest  <gb10 at sanger.ac.uk>
+ Revert "Revert "Remove deprecated-register flag (not avail on linux) - BUILD""
+ src/Makefile.am.common | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2016-02-29  Gemma Guest  <gb10 at sanger.ac.uk>
+ Revert "Revert "Merge branch 'feature/read_depth' into develop - NEW FEATURE 'read depth'""
+ src/blixemApp/blxwindow.cpp     |  45 ++++++
+ src/blixemApp/blxwindow.hpp     |   3 +
+ src/blixemApp/coverageview.cpp  |   2 +-
+ src/blixemApp/detailview.cpp    | 349 ++++++++++++++++++++++++++++------------
+ src/blixemApp/detailview.hpp    |   1 +
+ src/seqtoolsUtils/utilities.cpp |  24 ++-
+ src/seqtoolsUtils/utilities.hpp |   5 +-
+ 7 files changed, 319 insertions(+), 110 deletions(-)
+
+2016-02-29  Gemma Guest  <gb10 at sanger.ac.uk>
+ Revert "Merge branch 'feature/read_depth' into develop - NEW FEATURE 'read depth'"
+ src/blixemApp/blxwindow.cpp     |  45 ------
+ src/blixemApp/blxwindow.hpp     |   3 -
+ src/blixemApp/coverageview.cpp  |   2 +-
+ src/blixemApp/detailview.cpp    | 349 ++++++++++++----------------------------
+ src/blixemApp/detailview.hpp    |   1 -
+ src/seqtoolsUtils/utilities.cpp |  24 +--
+ src/seqtoolsUtils/utilities.hpp |   5 +-
+ 7 files changed, 110 insertions(+), 319 deletions(-)
+
+2016-02-29  Gemma Guest  <gb10 at sanger.ac.uk>
+ Revert "Remove deprecated-register flag (not avail on linux) - BUILD"
+ src/Makefile.am.common | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2016-02-29  Gemma Guest  <gb10 at sanger.ac.uk>
+ Revert "Fix ambiguous call to overloaded fn - REGRESSION FIX"
+ src/blixemApp/detailview.cpp | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+2016-02-29  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix ambiguous call to overloaded fn - REGRESSION FIX
+ src/blixemApp/detailview.cpp | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+2016-02-29  Gemma Guest  <gb10 at sanger.ac.uk>
+ Remove deprecated-register flag (not avail on linux) - BUILD
+ src/Makefile.am.common | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2016-02-26  Gemma Guest  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/read_depth' into develop - NEW FEATURE 'read depth'
+2016-02-26  Gemma Guest  <gb10 at sanger.ac.uk>
+ Add feedback box to display read depth - WIP
+ src/blixemApp/blxwindow.cpp  | 30 +++++++++++++++++++++++++++++
+ src/blixemApp/blxwindow.hpp  |  1 +
+ src/blixemApp/detailview.cpp | 46 +++++++++++++++++++++++++++++++++++++-------
+ 3 files changed, 70 insertions(+), 7 deletions(-)
+
+2016-02-26  Gemma Guest  <gb10 at sanger.ac.uk>
+ Add access function for read depth - WIP
+ src/blixemApp/blxwindow.cpp    | 15 +++++++++++++++
+ src/blixemApp/blxwindow.hpp    |  2 ++
+ src/blixemApp/coverageview.cpp |  2 +-
+ 3 files changed, 18 insertions(+), 1 deletion(-)
+
+2016-02-26  Gemma Guest  <gb10 at sanger.ac.uk>
+ Tooltips - TRIVIAL
+ src/blixemApp/detailview.cpp | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+2016-02-26  Gemma Guest  <gb10 at sanger.ac.uk>
+ Show selected match coord range in toolbar - WIP
+ src/blixemApp/detailview.cpp | 112 +++++++++++++++++++++++++++----------------
+ 1 file changed, 72 insertions(+), 40 deletions(-)
+
+2016-02-26  Gemma Guest  <gb10 at sanger.ac.uk>
+ Show selected coordinate range in feedback box - WIP
+ src/blixemApp/detailview.cpp    | 64 +++++++++++++++++++++++++++++++++++------
+ src/blixemApp/detailview.hpp    |  1 +
+ src/seqtoolsUtils/utilities.cpp | 22 ++++++++++++++
+ src/seqtoolsUtils/utilities.hpp |  3 ++
+ 4 files changed, 82 insertions(+), 8 deletions(-)
+
+2016-02-26  Gemma Guest  <gb10 at sanger.ac.uk>
+ More tidying/simplification - WIP
+ src/blixemApp/detailview.cpp | 71 ++++++++++++++++++++++----------------------
+ 1 file changed, 36 insertions(+), 35 deletions(-)
+
+2016-02-26  Gemma Guest  <gb10 at sanger.ac.uk>
+ More reorganisation/tidying - WIP
+ src/blixemApp/detailview.cpp    | 86 +++++++++++++++++++++--------------------
+ src/seqtoolsUtils/utilities.cpp |  2 +-
+ src/seqtoolsUtils/utilities.hpp |  2 +-
+ 3 files changed, 46 insertions(+), 44 deletions(-)
+
+2016-02-26  Gemma Guest  <gb10 at sanger.ac.uk>
+ Tidying - split large function - WIP
+ src/blixemApp/detailview.cpp | 126 +++++++++++++++++++++++++------------------
+ 1 file changed, 73 insertions(+), 53 deletions(-)
+
+2016-02-26  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix compile problem with popen on cygwin - BUILD
+ src/Makefile.am.common | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+2016-02-26  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix missing include - BUILD
+ src/seqtoolsUtils/utilities.cpp | 1 +
+ 1 file changed, 1 insertion(+)
+
+2016-02-26  Gemma Guest  <gb10 at sanger.ac.uk>
+ Disable deprecated-register warnings - BUILD
+ src/Makefile.am.common | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2016-02-26  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix compiler errors - BUILD
+ src/seqtoolsUtils/seqtoolsWebBrowser.cpp | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+2016-02-26  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix compiler errors on mac - BUILD
+ src/belvuApp/belvuMain.cpp    | 10 +++++-----
+ src/blixemApp/blxmain.cpp     |  8 ++++----
+ src/dotterApp/dotterMain.cpp  |  8 ++++----
+ src/seqtoolsUtils/version.hpp | 12 ++++++------
+ 4 files changed, 19 insertions(+), 19 deletions(-)
+
+2016-02-25  Ed Griffiths  <edgrif at sanger.ac.uk>
+ Ugh...what are these files about. - BUILD
+ src/build/release_docs/GIT_COMMITS.txt         | 11 -----------
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt |  6 ------
+ 2 files changed, 17 deletions(-)
+
+2016-02-25  Ed Griffiths  <edgrif at sanger.ac.uk>
+ Change blixem to use new C++ pfetch obj. - DEVELOP
+ src/blixemApp/blxFetch.cpp | 374 +++++++++++++++++++--------------------------
+ 1 file changed, 160 insertions(+), 214 deletions(-)
+
+2016-02-25  Ed Griffiths  <edgrif at sanger.ac.uk>
+ Fix clash with C++ identity keyword - TRIVIAL
+ src/belvuApp/belvu.cpp     | 10 +++++-----
+ src/belvuApp/belvuTree.cpp |  2 +-
+ src/belvuApp/belvu_.hpp    |  2 +-
+ 3 files changed, 7 insertions(+), 7 deletions(-)
+
+2016-02-25  Ed Griffiths  <edgrif at sanger.ac.uk>
+ add -std to compiler flags. - BUILD
+ src/Makefile.am.common | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2016-02-19  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.40.0-24-g382e - Update RT and git commit reports
+ src/ChangeLog                                  | 7 +++++++
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt | 2 +-
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+2016-02-19  Gemma Guest  <gb10 at sanger.ac.uk>
+ Add links to the manuals from the User_doc directory - DOC
+ src/doc/User_doc/Belvu_manual.pdf        | 1 +
+ src/doc/User_doc/Blixem_manual.pdf       | 1 +
+ src/doc/User_doc/Dotter_manual.pdf       | 1 +
+ src/doc/User_doc/belvu_quick_start.html  | 2 +-
+ src/doc/User_doc/blixem_quick_start.html | 2 +-
+ src/doc/User_doc/dotter_quick_start.html | 2 +-
+ src/doc/User_doc/manuals.html            | 6 +++---
+ 7 files changed, 9 insertions(+), 6 deletions(-)
+
+2016-02-18  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.40.0-23-gd13eb - Update RT and git commit reports
+ src/ChangeLog                                  | 368 +++++++++----------------
+ src/build/release_docs/GIT_COMMITS.txt         |   8 +-
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt |   2 +-
+ 3 files changed, 129 insertions(+), 249 deletions(-)
+
+2016-02-10  Ed Griffiths  <edgrif at sanger.ac.uk>
+ Fxi gbtoools namespace - WIP
+ src/blixemApp/blxFetch.cpp | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+2016-02-05  Gemma Guest  <gb10 at sanger.ac.uk>
+ Remove obsolete gitignore placeholder - BUILD
+ src/gbtools/.gitignore | 3 ---
+ 1 file changed, 3 deletions(-)
+
+2016-02-05  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix gitignore and missing readme file for gbtools - BUILD
+ src/.gitignore              |  2 ++
+ src/autogen.sh              | 10 +++++-----
+ src/gbtools/README_SEQTOOLS | 25 +++++++++++++++++++++++++
+ 3 files changed, 32 insertions(+), 5 deletions(-)
+
+2016-02-04  Gemma Guest  <gb10 at sanger.ac.uk>
+ Merge branch 'production' into develop
+2016-02-03  zmap  <zmap at sanger.ac.uk>
+ Merge branch 'release/4.40.0' into production
+2016-01-28  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix to previous - REGRESSION FIX
+ src/autogen.sh | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+2016-01-28  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix a bug with conditional clone of gbtools - BUILD
+ src/autogen.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2016-01-28  Gemma Guest  <gb10 at sanger.ac.uk>
+ Merge branch 'release/4.40.0' into develop
+2016-01-26  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.39.3-38-gba23 - Update RT and git commit reports
+ src/ChangeLog                                  | 28 ++++++++++++++++++++++++++
+ src/build/release_docs/GIT_COMMITS.txt         |  1 +
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt |  2 +-
+ 3 files changed, 30 insertions(+), 1 deletion(-)
+
+2016-01-25  Gemma Guest  <gb10 at sanger.ac.uk>
+ Add config option to set cainfo file location for curl - WIP
+ src/blixemApp/blixem_.hpp        |  9 ++++++++-
+ src/blixemApp/blxFetch.cpp       | 30 ++++++++++++++++++------------
+ src/blixemApp/blxview.cpp        |  1 +
+ src/blixemApp/blxwindow.cpp      |  3 +++
+ src/blixemApp/detailview.cpp     |  9 +++++----
+ src/blixemApp/detailviewtree.cpp |  8 ++++----
+ src/libpfetch/libcurlobject.c    |  6 ++++++
+ src/libpfetch/libpfetch.c        | 34 +++++++++++++++++++++++++++++++++-
+ src/libpfetch/libpfetch_I.h      |  3 +++
+ 9 files changed, 81 insertions(+), 22 deletions(-)
+
+2016-01-25  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix bug where multiple pfetch windows open - REGRESSION FIX
+ src/blixemApp/blixem_.hpp        |  6 ++++--
+ src/blixemApp/blxFetch.cpp       | 39 +++++++++++++++++++++++----------------
+ src/blixemApp/detailview.cpp     |  2 +-
+ src/blixemApp/detailviewtree.cpp |  2 +-
+ 4 files changed, 29 insertions(+), 20 deletions(-)
+
+2016-01-25  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.39.3-35-g2ffc4 - Update RT and git commit reports
+ src/ChangeLog                                  | 15 +++++++++++++++
+ src/build/release_docs/GIT_COMMITS.txt         |  1 +
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt |  2 +-
+ 3 files changed, 17 insertions(+), 1 deletion(-)
+
+2016-01-25  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix crash following libcurl error - REGRESSION FIX
+ src/blixemApp/blxFetch.cpp | 15 +++++++--------
+ 1 file changed, 7 insertions(+), 8 deletions(-)
+
+2016-01-25  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix minor error in runconfig script - BUILD
+ src/runconfig.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2016-01-22  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.39.3-32-ged92 - Update RT and git commit reports
+ src/ChangeLog | 36 ++++++++++++++++++++++++++++++++++++
+ 1 file changed, 36 insertions(+)
+
+2016-01-22  Gemma Guest  <gb10 at sanger.ac.uk>
+ Minor fix to return status - WIP
+ src/blixemApp/blxFetch.cpp | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+2016-01-22  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix problem with previous - WIP
+ src/blixemApp/blixem_.hpp   |  13 ++++
+ src/blixemApp/blxFetch.cpp  | 165 ++++++++------------------------------------
+ src/blixemApp/blxwindow.cpp |   5 +-
+ src/libpfetch/libpfetch.c   |  19 +++--
+ src/libpfetch/libpfetch_I.h |   2 +-
+ 5 files changed, 62 insertions(+), 142 deletions(-)
+
+2016-01-22  Gemma Guest  <gb10 at sanger.ac.uk>
+ Add config for curl IP mode and debug - WIP
+ src/blixemApp/blixem_.hpp           |  139 ++++-
+ src/blixemApp/blxFetch.cpp          | 1166 +++++++++++++++++++----------------
+ src/blixemApp/blxFetchDb.cpp        |   56 +-
+ src/blixemApp/blxdotter.cpp         |    5 -
+ src/blixemApp/blxview.cpp           |   19 +-
+ src/blixemApp/blxwindow.cpp         |   32 +-
+ src/blixemApp/detailview.cpp        |    8 +-
+ src/blixemApp/detailviewtree.cpp    |    9 +-
+ src/libpfetch/libcurlobject.c       |   12 +-
+ src/libpfetch/libpfetch.c           |   80 +--
+ src/libpfetch/libpfetch_I.h         |    4 +
+ src/seqtoolsUtils/seqtoolsFetch.hpp |    4 +-
+ 12 files changed, 882 insertions(+), 652 deletions(-)
+
+2016-01-22  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.39.3-28-g7203 - Update RT and git commit reports
+ src/ChangeLog                                  | 7 +++++++
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt | 2 +-
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+2016-01-21  Ed Griffiths  <edgrif at sanger.ac.uk>
+ Fix compiler includes as per gbtools - BUILD
+ src/Makefile.am.common        | 14 ++++++++++++++
+ src/belvuApp/Makefile.am      | 10 ++++++----
+ src/blixemApp/Makefile.am     |  7 +------
+ src/dotterApp/Makefile.am     |  7 +------
+ src/runconfig.sh              |  9 ++++++++-
+ src/seqtoolsUtils/Makefile.am |  7 +------
+ 6 files changed, 31 insertions(+), 23 deletions(-)
+
+2016-01-20  Ed Griffiths  <edgrif at sanger.ac.uk>
+ Fix small include slip up. - TRIVIAL
+ src/blixemApp/blxFetch.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2016-01-20  Ed Griffiths  <edgrif at sanger.ac.uk>
+ Merge branch 'feature/New_pfetch' into develop
+2016-01-20  Ed Griffiths  <edgrif at sanger.ac.uk>
+ Remove libpfetch itself from build. - BUILD
+ src/libpfetch/Makefile.am             |   50 --
+ src/libpfetch/libcurlobject.c         | 1095 ------------------------
+ src/libpfetch/libcurlobject.h         |   87 --
+ src/libpfetch/libcurlobject_I.h       |   98 ---
+ src/libpfetch/libpfetch-cmarshal.c    |  131 ---
+ src/libpfetch/libpfetch-cmarshal.h    |   35 -
+ src/libpfetch/libpfetch-cmarshal.list |    2 -
+ src/libpfetch/libpfetch-utils.c       |  114 ---
+ src/libpfetch/libpfetch.c             | 1514 ---------------------------------
+ src/libpfetch/libpfetch.h             |  165 ----
+ src/libpfetch/libpfetch_I.h           |  249 ------
+ src/libpfetch/libpfetch_P.h           |  133 ---
+ 12 files changed, 3673 deletions(-)
+
+2016-01-20  Ed Griffiths  <edgrif at sanger.ac.uk>
+ Fix stupid compiler warning. - TRIVIAL
+ src/dotterApp/dotter.cpp | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+2016-01-20  Ed Griffiths  <edgrif at sanger.ac.uk>
+ Remove local libpfetch from build. - BUILD
+ src/blixemApp/Makefile.am | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+2016-01-20  Ed Griffiths  <edgrif at sanger.ac.uk>
+ Remove local libpfetch from build. - BUILD
+ src/Makefile.am  | 4 ----
+ src/configure.ac | 3 +--
+ 2 files changed, 1 insertion(+), 6 deletions(-)
+
+2016-01-19  Ed Griffiths  <edgrif at sanger.ac.uk>
+ Put build back to use local pfetch until I convert gbtools code to C++ - BUILD
+ src/Makefile.am           | 6 +++---
+ src/blixemApp/Makefile.am | 3 ++-
+ src/configure.ac          | 3 ++-
+ 3 files changed, 7 insertions(+), 5 deletions(-)
+
+2016-01-18  Ed Griffiths  <edgrif at sanger.ac.uk>
+ add new gbtools build stuff. - BUILD
+ src/Makefile.am           | 28 +++++++++++++++++++++++++---
+ src/belvuApp/Makefile.am  |  2 +-
+ src/blixemApp/Makefile.am | 10 ++++++++--
+ src/configure.ac          |  4 +++-
+ src/dotterApp/Makefile.am |  2 +-
+ src/runconfig.sh          |  2 +-
+ 6 files changed, 39 insertions(+), 9 deletions(-)
+
+2016-01-18  Ed Griffiths  <edgrif at sanger.ac.uk>
+ Fix up gbtools stuff. - BUILD
+ src/autogen.sh | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
+ 1 file changed, 78 insertions(+), 2 deletions(-)
+
+2016-01-18  Ed Griffiths  <edgrif at sanger.ac.uk>
+ Minor include change. - TRIVIAL
+ src/blixemApp/blxmain.cpp | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+2016-01-18  Ed Griffiths  <edgrif at sanger.ac.uk>
+ Fix trivial compile bug. - TRIVIAL
+ src/blixemApp/blxFetch.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2016-01-18  Ed Griffiths  <edgrif at sanger.ac.uk>
+ Small README for lib. - TRIVIAL
+ src/gbtools/README | 14 --------------
+ 1 file changed, 14 deletions(-)
+
+2016-01-18  Ed Griffiths  <edgrif at sanger.ac.uk>
+ Fix small compiler warning. - TRIVIAL
+ src/seqtoolsUtils/utilities.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2016-01-18  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'release/4.40.0' into develop
+2016-01-15  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.39.3-27-g33fa - Update RT and git commit reports
+ src/ChangeLog                                  | 10 ++++++++++
+ src/build/release_docs/GIT_COMMITS.txt         |  1 +
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt |  2 +-
+ 3 files changed, 12 insertions(+), 1 deletion(-)
+
+2016-01-15  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix bug getting dataType config - REGRESSION FIX
+ src/seqtoolsUtils/blxGff3Parser.cpp | 15 +++++++++------
+ 1 file changed, 9 insertions(+), 6 deletions(-)
+
+2016-01-14  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.39.3-25-g7163 - Update RT and git commit reports
+ src/ChangeLog | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+2016-01-14  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.39.3-24-gf54a - Update RT and git commit reports
+ src/ChangeLog | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+2016-01-14  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.39.3-23-g4fc7 - Update RT and git commit reports
+ src/ChangeLog | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+2016-01-14  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.39.3-22-g209e - Update RT and git commit reports
+ src/ChangeLog | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+2016-01-14  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.39.3-21-ge639 - Update RT and git commit reports
+ src/ChangeLog | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+2016-01-14  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.39.3-20-g9de16d - Update RT and git commit reports
+ src/ChangeLog | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+2016-01-14  Gemma Guest  <gb10 at sanger.ac.uk>
+ Merge branch 'release/4.40.0' into develop
+2016-01-14  Gemma Guest  <gb10 at sanger.ac.uk>
+ Update release notes - DOC
+ src/doc/User_doc/release_notes.html | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+2016-01-14  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.39.3-18-gf028 - Update RT and git commit reports
+ src/ChangeLog | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+2016-01-14  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.39.3-17-g89ca - Update RT and git commit reports
+ src/ChangeLog                                  | 72 ++++++++++++++++++++++++++
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt |  2 +-
+ 2 files changed, 73 insertions(+), 1 deletion(-)
+
+2016-01-14  Gemma Guest  <gb10 at sanger.ac.uk>
+ Merge branch 'develop' into release/4.40.0
+2016-01-14  Gemma Guest  <gb10 at sanger.ac.uk>
+ Merge branch 'release/4.40.0' into develop
+2015-12-22  Gemma Guest  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/bam' into develop - NEW FEATURE 'bam fetch'
+2015-12-21  Gemma Guest  <gb10 at sanger.ac.uk>
+ Avoid memory leak - WIP
+ src/seqtoolsUtils/blxGff3Parser.cpp | 11 ++++++++---
+ 1 file changed, 8 insertions(+), 3 deletions(-)
+
+2015-12-21  Gemma Guest  <gb10 at sanger.ac.uk>
+ Unescape gff chars - WIP
+ src/seqtoolsUtils/blxGff3Parser.cpp | 46 ++++++++++++++++++++++++++++++++++++-
+ 1 file changed, 45 insertions(+), 1 deletion(-)
+
+2015-12-21  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix compile error on linux - REGRESSION FIX
+ src/belvuApp/belvuTree.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2015-12-21  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix error conditionally compiling html code - BUILD
+ src/seqtoolsUtils/Makefile.am       | 4 ++++
+ src/seqtoolsUtils/seqtoolsFetch.hpp | 8 ++++----
+ 2 files changed, 8 insertions(+), 4 deletions(-)
+
+2015-12-21  Gemma Guest  <gb10 at sanger.ac.uk>
+ Pass fetch command in gff tag - WIP
+ src/blixemApp/blixem_.hpp           |  52 +-------------
+ src/blixemApp/blxFetch.cpp          | 134 +++++++++++++++++-------------------
+ src/blixemApp/blxmain.cpp           |   5 +-
+ src/blixemApp/blxview.cpp           |   2 +-
+ src/dotterApp/dotterMain.cpp        |   2 +-
+ src/seqtoolsUtils/Makefile.am       |   2 +-
+ src/seqtoolsUtils/blxGff3Parser.cpp | 126 ++++++++++++++++++++++++++++-----
+ src/seqtoolsUtils/blxGff3Parser.hpp |   3 +-
+ src/seqtoolsUtils/blxparser.cpp     |  21 +++---
+ src/seqtoolsUtils/blxparser.hpp     |   2 +-
+ src/seqtoolsUtils/seqtoolsFetch.cpp |  62 +++++++++++++++++
+ src/seqtoolsUtils/seqtoolsFetch.hpp |  97 ++++++++++++++++++++++++++
+ 12 files changed, 351 insertions(+), 157 deletions(-)
+
+2015-12-21  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix compiler error with min/max macros - BUILD
+ src/belvuApp/belvuAlignment.cpp    | 13 ++++++++-----
+ src/belvuApp/belvuConsPlot.cpp     |  9 ++++++---
+ src/belvuApp/belvuTree.cpp         |  7 +++++--
+ src/belvuApp/belvuWindow.cpp       |  9 ++++++---
+ src/blixemApp/bigpicture.cpp       |  4 ++++
+ src/blixemApp/bigpicturegrid.cpp   |  3 +++
+ src/blixemApp/blxFetch.cpp         |  2 ++
+ src/blixemApp/blxdotter.cpp        |  4 ++++
+ src/blixemApp/blxview.cpp          |  3 +++
+ src/blixemApp/blxwindow.cpp        |  4 ++++
+ src/blixemApp/detailview.cpp       |  4 ++++
+ src/blixemApp/detailviewtree.cpp   |  3 +++
+ src/blixemApp/exonview.cpp         |  4 ++++
+ src/dotterApp/dotplot.cpp          |  4 ++++
+ src/dotterApp/dotter.cpp           |  4 ++++
+ src/dotterApp/seqtoolsExonView.cpp |  4 ++++
+ src/seqtoolsUtils/blxmsp.cpp       |  3 +++
+ src/seqtoolsUtils/utilities.cpp    |  4 ++++
+ src/seqtoolsUtils/utilities.hpp    |  3 ---
+ 19 files changed, 75 insertions(+), 16 deletions(-)
+
+2015-12-18  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.39.3-7-gca231 - Update RT and git commit reports
+ src/ChangeLog                                  | 6 ++++++
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt | 2 +-
+ 2 files changed, 7 insertions(+), 1 deletion(-)
+
+2015-12-17  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.39.3-6-g80aa - Update RT and git commit reports
+ src/ChangeLog                                  | 7 +++++++
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt | 2 +-
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+2015-12-15  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.39.3-5-g053c - Update RT and git commit reports
+ src/ChangeLog                                  | 61 ++++++++------------------
+ src/build/release_docs/GIT_COMMITS.txt         |  4 +-
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt | 22 +---------
+ 3 files changed, 22 insertions(+), 65 deletions(-)
+
+2015-12-09  Gemma Guest  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/pfetch' into develop - NEW FEATURE 'pfetch errors'
+2015-12-09  Gemma Guest  <gb10 at sanger.ac.uk>
+ Report libcurl errors - WIP
+ src/blixemApp/blxFetch.cpp | 27 +++++++++++++++++++++------
+ 1 file changed, 21 insertions(+), 6 deletions(-)
+
+2015-12-09  Gemma Guest  <gb10 at sanger.ac.uk>
+ Add function to return curl error - WIP
+ src/libpfetch/libcurlobject.c |  6 +++-
+ src/libpfetch/libpfetch.c     | 75 +++++++++++++++++++++++++------------------
+ src/libpfetch/libpfetch.h     |  1 +
+ 3 files changed, 50 insertions(+), 32 deletions(-)
+
+2015-12-07  Gemma Guest  <gb10 at sanger.ac.uk>
+ Warn if connection closed without response - WIP
+ src/blixemApp/blxFetch.cpp    | 107 +++++++++++++++++++++++++++++++++++++++---
+ src/libpfetch/libcurlobject.c |  23 +++++----
+ 2 files changed, 114 insertions(+), 16 deletions(-)
+
+2015-11-30  Gemma Guest  <gb10 at sanger.ac.uk>
+ Merge branch 'production' into develop
+2015-11-30  Gemma Guest  <gb10 at sanger.ac.uk>
+ Merge branch 'develop' into production
+2015-11-30  Gemma Guest  <gb10 at sanger.ac.uk>
+ Update release notes - DOC
+ src/doc/User_doc/release_notes.html | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+2015-11-30  Gemma Guest  <gb10 at sanger.ac.uk>
+ Further improvement to handling of transparent styles - NEW FEATURE 'styles'
+ src/seqtoolsUtils/blxmsp.cpp    |  39 +++++++----
+ src/seqtoolsUtils/utilities.cpp | 145 ++++++++++++++++++++++++++++++++++++++++
+ src/seqtoolsUtils/utilities.hpp |  17 ++++-
+ 3 files changed, 185 insertions(+), 16 deletions(-)
+
+2015-11-25  Gemma Guest  <gb10 at sanger.ac.uk>
+ Merge branch 'production' into develop
+2015-11-25  Gemma Guest  <gb10 at sanger.ac.uk>
+ Merge branch 'develop' into production
+2015-11-25  Gemma Guest  <gb10 at sanger.ac.uk>
+ Update release notes for  - DOC
+ src/doc/User_doc/release_notes.html | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+2015-11-24  Gemma Guest  <gb10 at sanger.ac.uk>
+ Improvment on previous to use border color for fill - WIP
+ src/seqtoolsUtils/blxmsp.cpp | 10 +++++++---
+ 1 file changed, 7 insertions(+), 3 deletions(-)
+
+2015-11-24  Gemma Guest  <gb10 at sanger.ac.uk>
+ Don't allow transparent colours on the detail view - NEW FEATURE 'styles'
+ src/blixemApp/sequencecellrenderer.cpp | 13 ++++++-
+ src/seqtoolsUtils/blxmsp.cpp           | 64 ++++++++++++++++++++++++++--------
+ src/seqtoolsUtils/blxmsp.hpp           |  3 +-
+ 3 files changed, 63 insertions(+), 17 deletions(-)
+
+2015-11-11  Gemma Guest  <gb10 at sanger.ac.uk>
+ Merge branch 'production' into develop
+2015-11-11  Gemma Guest  <gb10 at sanger.ac.uk>
+ Merge branch 'develop' into production
+2015-11-11  Gemma Guest  <gb10 at sanger.ac.uk>
+ Update release notes - DOC
+ src/doc/User_doc/release_notes.html | 16 ++++++++++++++++
+ 1 file changed, 16 insertions(+)
+
+2015-11-11  Gemma Guest  <gb10 at sanger.ac.uk>
+ Don't initialise the display in command-line mode - BUG FIX
+ src/belvuApp/belvu.cpp     |  7 +++----
+ src/belvuApp/belvuMain.cpp | 11 ++++++++---
+ src/belvuApp/belvu_.hpp    |  2 ++
+ 3 files changed, 13 insertions(+), 7 deletions(-)
+
+2015-11-02  zmap  <zmap at sanger.ac.uk>
+ Merge branch 'release/4.39.0' into production
+2015-10-27  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.38.0-9-g7b2ef - Update RT and git commit reports
+ src/ChangeLog                                  | 5 +++++
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt | 2 +-
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+2015-10-19  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.38.0-8-g31bb - Update RT and git commit reports
+ src/ChangeLog | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+2015-10-19  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.38.0-7-g731d - Update RT and git commit reports
+ src/ChangeLog | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+2015-10-19  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.38.0-6-g370e - Update RT and git commit reports
+ src/ChangeLog                                  | 5 +++++
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt | 2 +-
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+2015-10-14  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.38.0-5-g03a9 - Update RT and git commit reports
+ src/ChangeLog | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+2015-10-14  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.38.0-4-gae89 - Update RT and git commit reports
+ src/ChangeLog                                  | 89 +++++---------------------
+ src/build/release_docs/GIT_COMMITS.txt         |  7 +-
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt | 22 +++----
+ 3 files changed, 28 insertions(+), 90 deletions(-)
+
+2015-10-12  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix missing install docs - DOC
+ src/INSTALL.DEVELOPER | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/Makefile.am       |   2 +-
+ 2 files changed, 101 insertions(+), 1 deletion(-)
+
+2015-10-09  Gemma Guest  <gb10 at sanger.ac.uk>
+ Merge branch 'production' into develop
+2015-10-09  Gemma Guest  <gb10 at sanger.ac.uk>
+ Update release notes for 4.37.0 and 4.38.0 - DOC
+ src/doc/User_doc/release_notes.html | 17 +++++++++++++++++
+ 1 file changed, 17 insertions(+)
+
+2015-09-29  zmap  <zmap at sanger.ac.uk>
+ Merge branch 'release/4.38.0' into production
+2015-09-23  Gemma Guest  <gb10 at sanger.ac.uk>
+ Avoid potential null accesses - TRIVIAL
+ src/dotterApp/alignmenttool.cpp | 213 +++++++++++++++++++++++++++-------------
+ 1 file changed, 143 insertions(+), 70 deletions(-)
+
+2015-09-16  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.37.0-15-g244b - Update RT and git commit reports
+ src/ChangeLog                                  | 7 +++++++
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt | 2 +-
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+2015-09-14  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.37.0-14-gb1fc - Update RT and git commit reports
+ src/ChangeLog                                  | 88 ++++++++++++++++++++------
+ src/build/release_docs/GIT_COMMITS.txt         |  7 +-
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt | 12 ++--
+ 3 files changed, 79 insertions(+), 28 deletions(-)
+
+2015-09-01  Ed Griffiths  <edgrif at sanger.ac.uk>
+ Merge branch 'production' into develop
+2015-09-01  Ed Griffiths  <edgrif at sanger.ac.uk>
+ Merge branch 'release/4.37' into production
+2015-08-24  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix to previous - gtk_main_quit was failing - WIP
+ src/blixemApp/blxFetch.cpp | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+2015-08-24  Gemma Guest  <gb10 at sanger.ac.uk>
+ Temp fix for problem with infinite 'Bad file descriptor' messages RT '485625'
+ src/blixemApp/blxFetch.cpp | 34 +++++++++++++++++++++++++++++-----
+ 1 file changed, 29 insertions(+), 5 deletions(-)
+
+2015-08-20  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.36-5-g91ee - Update RT and git commit reports
+ src/ChangeLog                                  | 7 +++++++
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt | 2 +-
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+2015-08-18  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix an issue where maybe-canonical option wasn't being saved - WIP
+ src/blixemApp/blixem_.hpp   | 1 +
+ src/blixemApp/blxwindow.cpp | 1 +
+ 2 files changed, 2 insertions(+)
+
+2015-08-18  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix a bug with colinearity lines when cigar string contains introns - BUG FIX
+ src/seqtoolsUtils/blxGff3Parser.cpp | 13 +++++++++++--
+ src/seqtoolsUtils/blxmsp.cpp        | 18 +++++++++++++-----
+ src/seqtoolsUtils/blxmsp.hpp        |  2 +-
+ 3 files changed, 25 insertions(+), 8 deletions(-)
+
+2015-08-17  Gemma Guest  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/settings' into develop
+2015-08-17  Gemma Guest  <gb10 at sanger.ac.uk>
+ Add a button to save settings rather than saving on exit - WIP
+ src/blixemApp/blxwindow.cpp | 17 +++++++++++++----
+ 1 file changed, 13 insertions(+), 4 deletions(-)
+
+2015-08-17  Gemma Guest  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/splice_sites' into develop
+2015-08-17  Gemma Guest  <gb10 at sanger.ac.uk>
+ Disable highlighting of maybe-canonical splice sites by default - WIP
+ src/blixemApp/blxwindow.cpp | 1 -
+ 1 file changed, 1 deletion(-)
+
+2015-08-17  Gemma Guest  <gb10 at sanger.ac.uk>
+ Add tooltip text for settings options - NEW FEATURE 'Tooltips'
+ src/blixemApp/blxwindow.cpp | 139 +++++++++++++++++++++++++++++++++++++++-----
+ 1 file changed, 123 insertions(+), 16 deletions(-)
+
+2015-08-17  Gemma Guest  <gb10 at sanger.ac.uk>
+ Make highlighting of maybe-canonical splice sites optional - WIP
+ src/blixemApp/blixem_.hpp    | 1 +
+ src/blixemApp/blxwindow.cpp  | 5 ++++-
+ src/blixemApp/detailview.cpp | 2 +-
+ 3 files changed, 6 insertions(+), 2 deletions(-)
+
+2015-08-17  Gemma Guest  <gb10 at sanger.ac.uk>
+ Implement highlighting for maybe-canonical splice sites - WIP
+ src/blixemApp/blxwindow.cpp  |   2 +-
+ src/blixemApp/detailview.cpp | 127 ++++++++++++++++++++++++++++++++++---------
+ src/blixemApp/detailview.hpp |   6 ++
+ 3 files changed, 107 insertions(+), 28 deletions(-)
+
+2015-08-17  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.36-4-g79d7 - Update RT and git commit reports
+ src/ChangeLog                                  | 92 +++-----------------------
+ src/build/release_docs/GIT_COMMITS.txt         |  7 +-
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt | 22 ++++--
+ 3 files changed, 29 insertions(+), 92 deletions(-)
+
+2015-08-17  Gemma Guest  <gb10 at sanger.ac.uk>
+ Add colour for maybe-canonical highlighting - WIP
+ src/blixemApp/blixem_.hpp   | 3 +++
+ src/blixemApp/blxwindow.cpp | 1 +
+ 2 files changed, 4 insertions(+)
+
+2015-08-17  Gemma Guest  <gb10 at sanger.ac.uk>
+ Make sure we only set proxy from config if given - TRIVIAL
+ src/blixemApp/blxFetch.cpp | 22 +++++++++++++++-------
+ src/libpfetch/libpfetch.c  | 21 ++++++++++++++++++++-
+ 2 files changed, 35 insertions(+), 8 deletions(-)
+
+2015-08-11  Gemma Guest  <gb10 at sanger.ac.uk>
+ Add tooltips to feedback boxes - TRIVIAL
+ src/blixemApp/detailview.cpp | 23 +++++++++++++++++++++--
+ 1 file changed, 21 insertions(+), 2 deletions(-)
+
+2015-08-11  Gemma Guest  <gb10 at sanger.ac.uk>
+ There are now separate feedback boxes for seq name and coords - NEW FEATURE 'Feedback box'
+ src/blixemApp/detailview.cpp | 179 ++++++++++++++++++++++++++++++++-----------
+ 1 file changed, 133 insertions(+), 46 deletions(-)
+
+2015-08-04  Gemma Guest  <gb10 at sanger.ac.uk>
+ Merge branch 'production' into develop
+2015-08-04  Gemma Guest  <gb10 at sanger.ac.uk>
+ Merge branch 'release/4.36' into production
+2015-07-29  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.35-15-g96fd - Update RT and git commit reports
+ src/ChangeLog                                  | 5 +++++
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt | 2 +-
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+2015-07-23  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.35-14-g2d13 - Update RT and git commit reports
+ src/ChangeLog | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+2015-07-23  Gemma Guest  <gb10 at sanger.ac.uk>
+ Merge branch 'release/4.36' into develop
+2015-07-23  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.35-13-g2f52 - Update RT and git commit reports
+ src/ChangeLog                                  | 16 ++++++++++++++++
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt |  2 +-
+ 2 files changed, 17 insertions(+), 1 deletion(-)
+
+2015-07-22  Gemma Guest  <gb10 at sanger.ac.uk>
+ Add facility to set proxy from config file - WIP
+ src/blixemApp/blixem_.hpp     |  2 ++
+ src/blixemApp/blxFetch.cpp    |  4 ++++
+ src/blixemApp/detailview.cpp  | 37 +------------------------------------
+ src/libpfetch/libcurlobject.c |  5 +++++
+ src/libpfetch/libpfetch.c     | 22 ++++++++++++++++++++++
+ src/libpfetch/libpfetch_I.h   |  2 ++
+ 6 files changed, 36 insertions(+), 36 deletions(-)
+
+2015-07-17  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.35-11-g5cab - Update RT and git commit reports
+ src/ChangeLog                                  | 12 ++++++++++++
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt |  2 +-
+ 2 files changed, 13 insertions(+), 1 deletion(-)
+
+2015-07-15  Gemma Guest  <gb10 at sanger.ac.uk>
+ Update release notes - DOC
+ src/doc/User_doc/release_notes.html | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+2015-07-15  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.35-9-gfbc6 - Update RT and git commit reports
+ src/ChangeLog                                  | 154 ++++++-------------------
+ src/build/release_docs/GIT_COMMITS.txt         |   9 +-
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt |  52 +--------
+ 3 files changed, 40 insertions(+), 175 deletions(-)
+
+2015-07-15  Gemma Guest  <gb10 at sanger.ac.uk>
+ Remove unnecessary realize step - TRIVIAL
+ src/blixemApp/detailview.cpp | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+2015-07-15  Gemma Guest  <gb10 at sanger.ac.uk>
+ fix incorrect return status in http fetch - TRIVIAL
+ src/blixemApp/blxFetch.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2015-06-26  Steve Miller  <sm23 at sanger.ac.uk>
+ Merge branch 'production' into develop
+2015-06-26  Steve Miller  <sm23 at sanger.ac.uk>
+ Merge branch 'release/4.35' into production
+2015-06-24  Gemma Guest  <gb10 at sanger.ac.uk>
+ Minor change to error message format - TRIVIAL
+ src/blixemApp/blxFetch.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2015-06-24  Gemma Guest  <gb10 at sanger.ac.uk>
+ Improve error reporting in http fetch - NEW FEATURE 'Error reporting'
+ src/blixemApp/blxFetch.cpp  | 150 +++++++++++++++++++++++++++-----------------
+ src/libpfetch/libpfetch.c   |  46 +++++++++-----
+ src/libpfetch/libpfetch.h   |   2 +-
+ src/libpfetch/libpfetch_I.h |   2 +-
+ 4 files changed, 125 insertions(+), 75 deletions(-)
+
+2015-06-23  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.34.7-25-g04a2 - Update RT and git commit reports
+ src/ChangeLog                                  | 16 ++++++++++++++++
+ src/build/release_docs/GIT_COMMITS.txt         |  1 +
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt |  2 +-
+ 3 files changed, 18 insertions(+), 1 deletion(-)
+
+2015-06-23  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix compiler warnings and add logging for pfetch fix - TRIVIAL
+ src/libpfetch/libcurlobject.c | 19 +++++++++++++++++--
+ 1 file changed, 17 insertions(+), 2 deletions(-)
+
+2015-06-19  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix for http-pfetch on trusty - RT 474213
+ src/libpfetch/libcurlobject.c | 96 ++++++++++++++++++++++++++-----------------
+ 1 file changed, 59 insertions(+), 37 deletions(-)
+
+2015-06-23  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix compiler warnings and add logging for pfetch fix - TRIVIAL
+ src/libpfetch/libcurlobject.c | 19 +++++++++++++++++--
+ 1 file changed, 17 insertions(+), 2 deletions(-)
+
+2015-06-19  Gemma Guest  <gb10 at sanger.ac.uk>
+ Fix for http-pfetch on trusty - RT 474213
+ src/libpfetch/libcurlobject.c | 96 ++++++++++++++++++++++++++-----------------
+ 1 file changed, 59 insertions(+), 37 deletions(-)
+
+2015-06-19  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.34.7-22-ge741 - Update RT and git commit reports
+ src/ChangeLog                                  | 5 +++++
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt | 2 +-
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+2015-06-18  Gemma Guest  <gb10 at sanger.ac.uk>
+ Reduce max size of gdk window to help avoid crashing - BUG FIX
+ src/dotterApp/dotplot.cpp | 12 +++++++++++-
+ 1 file changed, 11 insertions(+), 1 deletion(-)
+
+2015-06-18  Gemma Guest  <gb10 at sanger.ac.uk>
+ Attach error handlers for dotter and belvu - NEW FEATURE 'Error handling'
+ src/belvuApp/belvuMain.cpp   | 4 ++++
+ src/dotterApp/dotterMain.cpp | 5 +++++
+ 2 files changed, 9 insertions(+)
+
+2015-06-16  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.34.7-21-gb08b - Update RT and git commit reports
+ src/ChangeLog | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+2015-06-16  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.34.7-20-gd9bc - Update RT and git commit reports
+ src/ChangeLog                                  | 6 ++++++
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt | 2 +-
+ 2 files changed, 7 insertions(+), 1 deletion(-)
+
+2015-06-15  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.34.7-19-g3430a - Update RT and git commit reports
+ src/ChangeLog                                  | 5 +++++
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt | 2 +-
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+2015-06-11  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.34.7-18-g1513 - Update RT and git commit reports
+ src/ChangeLog | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+2015-06-11  Steve Miller  <sm23 at sanger.ac.uk>
+ edit of release notes - DOC
+ src/doc/User_doc/release_notes.html | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+2015-06-11  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.34.7-16-gacf2 - Update RT and git commit reports
+ src/ChangeLog                                  | 16 ++++++++++++++++
+ src/build/release_docs/GIT_COMMITS.txt         |  1 +
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt | 12 +++++++++++-
+ 3 files changed, 28 insertions(+), 1 deletion(-)
+
+2015-06-11  Steve Miller  <sm23 at sanger.ac.uk>
+ Merge branch 'release/4.35' into develop
+2015-06-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'production' into develop
+2015-06-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'production' into release/4.35
+2015-06-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Update release notes for 4.34.7 - DOC
+ src/doc/User_doc/release_notes.html | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+2015-06-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix bug with sorting by similarity/identity to first sequence - RT 473624
+ src/belvuApp/belvuMain.cpp | 2 ++
+ 1 file changed, 2 insertions(+)
+
+2015-06-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix bug with sorting by similarity/identity to first sequence - RT 473624
+ src/belvuApp/belvuMain.cpp | 2 ++
+ 1 file changed, 2 insertions(+)
+
+2015-05-19  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.34.1-11-ge787 - Update RT and git commit reports
+ src/ChangeLog | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+2015-05-19  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.34.1-10-g5aa6 - Update RT and git commit reports
+ src/ChangeLog                                  | 698 ++-----------------------
+ src/build/release_docs/GIT_COMMITS.txt         |  19 +-
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt |  50 +-
+ 3 files changed, 83 insertions(+), 684 deletions(-)
+
+2015-05-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'hotfix/4.34.4' into production
+2015-05-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix build problem from latest changes - REGRESSION FIX
+ src/test/scripts/manual/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2015-05-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix missing makefiles from previous - BUILD
+ src/configure.ac | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+2015-05-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Add test and examples directories back into dist - BUILD
+ src/Makefile.am                               |   2 +-
+ src/examples/Makefile.am                      |  11 ++-
+ src/test/Makefile.am                          |   4 +-
+ src/test/data/Makefile.am                     |  35 ++++++++
+ src/test/scripts/Makefile.am                  |   8 ++
+ src/test/scripts/automated/Makefile.am        |   8 ++
+ src/test/scripts/automated/belvu/Makefile.am  | 111 ++++++++++++++++++++++++++
+ src/test/scripts/automated/blixem/Makefile.am |  12 +++
+ src/test/scripts/automated/dotter/Makefile.am |  15 ++++
+ src/test/scripts/manual/Makefile.am           |   8 ++
+ src/test/scripts/manual/belvu/Makefile.am     |   8 ++
+ src/test/scripts/manual/blixem/Makefile.am    |   8 ++
+ src/test/scripts/manual/dotter/Makefile.am    |   8 ++
+ 13 files changed, 234 insertions(+), 4 deletions(-)
+
+2015-05-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix build problem from latest changes - REGRESSION FIX
+ src/test/scripts/manual/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2015-05-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix missing makefiles from previous - BUILD
+ src/configure.ac | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+2015-05-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Add test and examples directories back into dist - BUILD
+ src/Makefile.am                               |   2 +-
+ src/examples/Makefile.am                      |  11 ++-
+ src/test/Makefile.am                          |   4 +-
+ src/test/data/Makefile.am                     |  35 ++++++++
+ src/test/scripts/Makefile.am                  |   8 ++
+ src/test/scripts/automated/Makefile.am        |   8 ++
+ src/test/scripts/automated/belvu/Makefile.am  | 111 ++++++++++++++++++++++++++
+ src/test/scripts/automated/blixem/Makefile.am |  12 +++
+ src/test/scripts/automated/dotter/Makefile.am |  15 ++++
+ src/test/scripts/manual/Makefile.am           |   8 ++
+ src/test/scripts/manual/belvu/Makefile.am     |   8 ++
+ src/test/scripts/manual/blixem/Makefile.am    |   8 ++
+ src/test/scripts/manual/dotter/Makefile.am    |   8 ++
+ 13 files changed, 234 insertions(+), 4 deletions(-)
+
+2015-05-11  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'hotfix/4.34.2' into production
+2015-05-11  Gemma Barson  <gb10 at sanger.ac.uk>
+ Update release notes for 4.34.2 - DOC
+ src/doc/User_doc/release_notes.html | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+2015-05-11  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix dependency problem when compiling with multiple threads - RT 467905
+ src/belvuApp/Makefile.am  | 10 ++--------
+ src/blixemApp/Makefile.am | 10 ++--------
+ src/dotterApp/Makefile.am | 10 ++--------
+ 3 files changed, 6 insertions(+), 24 deletions(-)
+
+2015-05-11  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix compiler warnings to do with signed char indices - BUILD
+ src/belvuApp/belvu.cpp | 366 ++++++++++++++++++++++++-------------------------
+ 1 file changed, 183 insertions(+), 183 deletions(-)
+
+2015-05-11  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix dependency problem when compiling with multiple threads - RT 467905
+ src/belvuApp/Makefile.am  | 10 ++--------
+ src/blixemApp/Makefile.am | 10 ++--------
+ src/dotterApp/Makefile.am | 10 ++--------
+ 3 files changed, 6 insertions(+), 24 deletions(-)
+
+2015-05-01  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'production' into develop
+2015-05-01  Gemma Barson  <gb10 at sanger.ac.uk>
+ Minor fix to version numbering - BUILD
+ src/autogen.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2015-05-01  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'production' into develop
+2015-05-01  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'release/4.34' into production
+2015-04-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix minor typo in gbtools gitignore - TRIVIAL
+ src/gbtools/.gitignore | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2015-04-24  Gemma Barson  <gb10 at sanger.ac.uk>
+ Add gbtools README file - BUILD
+ src/gbtools/.gitignore |  3 +++
+ src/gbtools/README     | 14 ++++++++++++++
+ 2 files changed, 17 insertions(+)
+
+2015-04-23  Gemma Barson  <gb10 at sanger.ac.uk>
+ Make annoying popup a warning instead - TRIVIAL
+ src/blixemApp/sequencecellrenderer.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2015-04-20  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.33-89-g0b24 - Update RT and git commit reports
+ src/ChangeLog                                  | 30 ++++++++++++++++++++++++++
+ src/build/release_docs/GIT_COMMITS.txt         |  1 +
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt |  2 +-
+ 3 files changed, 32 insertions(+), 1 deletion(-)
+
+2015-04-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Better fix for codon highlighting - REGRESSION FIX
+ src/blixemApp/blxwindow.cpp      |  12 +--
+ src/blixemApp/detailview.cpp     | 161 ++++++++++++++++++++++++---------------
+ src/blixemApp/detailview.hpp     |   3 +-
+ src/blixemApp/detailviewtree.cpp |   4 +-
+ 4 files changed, 107 insertions(+), 73 deletions(-)
+
+2015-04-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Improve highlighting of selected sequence range - WIP
+ src/blixemApp/sequencecellrenderer.cpp | 28 ++++++++++++++++++++--------
+ 1 file changed, 20 insertions(+), 8 deletions(-)
+
+2015-04-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix minor bug with codon highlighting in protein blixem - REGRESSION FIX
+ src/blixemApp/detailview.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2015-04-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Update release notes - DOC
+ src/doc/User_doc/release_notes.html | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+2015-04-17  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.33-84-g81fd - Update RT and git commit reports
+ src/ChangeLog                                  | 1053 ++++++++++++------------
+ src/build/release_docs/GIT_COMMITS.txt         |   27 +-
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt |   32 +-
+ 3 files changed, 597 insertions(+), 515 deletions(-)
+
+2015-04-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ DNA search now highlights the result range - NEW FEATURE 'DNA search'
+ src/blixemApp/blxwindow.cpp | 7 ++-----
+ 1 file changed, 2 insertions(+), 5 deletions(-)
+
+2015-04-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Update release notes - DOC
+ src/doc/User_doc/release_notes.html | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+2015-04-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix crash pressing Esc on undocked tool - BUG FIX
+ src/dotterApp/dotter.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2015-04-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Minor updates to docs - DOC
+ src/doc/User_doc/Blixem_manual/Blixem_manual.pdf | Bin 1084518 -> 1060576 bytes
+ src/doc/User_doc/Blixem_manual/Blixem_manual.tex |   4 ++--
+ src/doc/User_doc/blixem_quick_start.html         |  10 +++++-----
+ 3 files changed, 7 insertions(+), 7 deletions(-)
+
+2015-04-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Update blixem manual for v34 - DOC
+ src/doc/User_doc/Blixem_manual/Blixem_manual.pdf   | Bin 1058892 -> 1084518 bytes
+ src/doc/User_doc/Blixem_manual/Blixem_manual.tex   | 148 +++++++++------------
+ .../User_doc/Blixem_manual/img_view_variations.png | Bin 14011 -> 13714 bytes
+ 3 files changed, 63 insertions(+), 85 deletions(-)
+
+2015-04-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Update test plan - DOC
+ src/test/test_plan.ods | Bin 43903 -> 44092 bytes
+ 1 file changed, 0 insertions(+), 0 deletions(-)
+
+2015-04-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/select_sequence' into develop
+2015-04-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Update test plan - WIP
+ src/test/test_plan.ods | Bin 36611 -> 43903 bytes
+ 1 file changed, 0 insertions(+), 0 deletions(-)
+
+2015-04-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Minor fixes to selections in dna header - WIP
+ src/blixemApp/detailview.cpp     | 22 +++++++++++++++++-----
+ src/blixemApp/detailviewtree.cpp | 29 -----------------------------
+ src/seqtoolsUtils/utilities.cpp  | 30 ++++++++++++++++++++++++++++++
+ src/seqtoolsUtils/utilities.hpp  |  2 ++
+ 4 files changed, 49 insertions(+), 34 deletions(-)
+
+2015-04-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Update release docs for recent features - DOC
+ src/doc/User_doc/release_notes.html | 14 ++++++++++++++
+ 1 file changed, 14 insertions(+)
+
+2015-04-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/select_sequence' into develop
+2015-04-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Retain selection range after toggling strand - WIP
+ src/blixemApp/detailview.cpp | 35 +++++++++++++++++++++++++----------
+ 1 file changed, 25 insertions(+), 10 deletions(-)
+
+2015-04-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix minor issues extending and trimming selection - WIP
+ src/blixemApp/detailview.cpp | 18 +++++++++++++-----
+ 1 file changed, 13 insertions(+), 5 deletions(-)
+
+2015-04-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ better way of getting modifiers - WIP
+ src/blixemApp/bigpicturegrid.cpp | 5 ++---
+ src/blixemApp/detailview.cpp     | 3 +--
+ src/blixemApp/detailviewtree.cpp | 5 ++---
+ src/blixemApp/exonview.cpp       | 5 ++---
+ 4 files changed, 7 insertions(+), 11 deletions(-)
+
+2015-04-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix problem with re-centering not being disabled - WIP
+ src/blixemApp/detailview.cpp | 8 ++------
+ 1 file changed, 2 insertions(+), 6 deletions(-)
+
+2015-04-15  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/select_sequence' into develop
+2015-04-15  Gemma Barson  <gb10 at sanger.ac.uk>
+ Update test plan with new sequence selection stuff and snp track scrolling - DOC
+ src/test/test_plan.ods | Bin 38902 -> 36611 bytes
+ 1 file changed, 0 insertions(+), 0 deletions(-)
+
+2015-04-15  Gemma Barson  <gb10 at sanger.ac.uk>
+ Improve highlighting of selected sequence - WIP
+ src/blixemApp/sequencecellrenderer.cpp | 69 +++++++++++++++++++++-------------
+ 1 file changed, 43 insertions(+), 26 deletions(-)
+
+2015-04-15  Gemma Barson  <gb10 at sanger.ac.uk>
+ Improve highlighting of selected sequence in headers - WIP
+ src/blixemApp/detailview.cpp     | 38 ++++++++++++++++++++++++++++++++------
+ src/blixemApp/detailview.hpp     |  1 +
+ src/blixemApp/detailviewtree.cpp | 21 ++++++++++++++++++++-
+ 3 files changed, 53 insertions(+), 7 deletions(-)
+
+2015-04-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/select_sequence' into develop - RT 457600
+2015-04-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Comments - TRIVIAL
+ src/blixemApp/blxwindow.cpp | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+2015-04-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix bug with copying translation in dna mode - WIP
+ src/blixemApp/blxwindow.cpp | 24 ++++++++++++++----------
+ 1 file changed, 14 insertions(+), 10 deletions(-)
+
+2015-04-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Change keyboard shortcuts for new options - WIP
+ src/blixemApp/blxwindow.cpp | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+2015-04-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Add sequence context menu to dna header - WIP
+ src/blixemApp/blxwindow.cpp      | 36 +++++++++-------------
+ src/blixemApp/blxwindow.hpp      |  2 +-
+ src/blixemApp/detailview.cpp     | 65 ++++++++++++++++++++++++++++++++++++++--
+ src/blixemApp/detailviewtree.cpp |  4 +--
+ 4 files changed, 79 insertions(+), 28 deletions(-)
+
+2015-04-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Add context menu for tree header - WIP
+ src/blixemApp/blxwindow.cpp            | 205 ++++++++++++++++++++++++++++-----
+ src/blixemApp/blxwindow.hpp            |   1 +
+ src/blixemApp/detailview.cpp           | 100 +++++++++++-----
+ src/blixemApp/detailview.hpp           |   6 +-
+ src/blixemApp/detailviewtree.cpp       |  55 +++++++--
+ src/blixemApp/sequencecellrenderer.cpp |  15 ++-
+ 6 files changed, 312 insertions(+), 70 deletions(-)
+
+2015-04-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Refactoring - WIP
+ src/blixemApp/detailviewtree.cpp | 69 ++++++++++++++++++++++++++--------------
+ 1 file changed, 45 insertions(+), 24 deletions(-)
+
+2015-04-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix shift-click selections - WIP
+ src/blixemApp/detailview.cpp | 10 +++++++---
+ 1 file changed, 7 insertions(+), 3 deletions(-)
+
+2015-04-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Use selection range for copy-by-mark - WIP
+ src/blixemApp/blxwindow.cpp | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+2015-04-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix problem with background not being highlighted for range - WIP
+ src/blixemApp/sequencecellrenderer.cpp | 34 ++++++++++++++++++++++++++--------
+ 1 file changed, 26 insertions(+), 8 deletions(-)
+
+2015-04-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Set last-selected coord as main selection coord - WIP
+ src/blixemApp/blxwindow.cpp  | 27 ++-------------------------
+ src/blixemApp/detailview.cpp | 16 +++++++++++-----
+ src/blixemApp/detailview.hpp |  1 +
+ 3 files changed, 14 insertions(+), 30 deletions(-)
+
+2015-04-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Use Alt instead of Shift to move by one dna base - WIP
+ src/blixemApp/blxwindow.cpp | 20 +++++++++++---------
+ 1 file changed, 11 insertions(+), 9 deletions(-)
+
+2015-04-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Add functionality to select a range of coords - WIP
+ src/blixemApp/blxview.cpp              |   4 +-
+ src/blixemApp/blxwindow.cpp            | 167 ++++++++++-----
+ src/blixemApp/detailview.cpp           | 357 ++++++++++++++++++++++++---------
+ src/blixemApp/detailview.hpp           | 108 +++++-----
+ src/blixemApp/detailviewtree.cpp       |  52 +++--
+ src/blixemApp/sequencecellrenderer.cpp |   6 +-
+ 6 files changed, 483 insertions(+), 211 deletions(-)
+
+2015-04-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix direction of copied string - WIP
+ src/blixemApp/blxwindow.cpp | 65 ++++++++++++++++++++++++++++++++++++---------
+ 1 file changed, 52 insertions(+), 13 deletions(-)
+
+2015-04-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix bug in calculating msp coords - REGRESSION FIX
+ src/blixemApp/blxview.cpp                        |    3 +
+ src/blixemApp/detailview.cpp                     |    8 +-
+ src/blixemApp/sequencecellrenderer.cpp.~develop~ | 1612 ++++++++++++++++++++++
+ 3 files changed, 1620 insertions(+), 3 deletions(-)
+
+2015-04-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix bug with rev strand - WIP
+ src/blixemApp/blxwindow.cpp | 10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
+
+2015-04-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Add function to copy a section of a match sequence - WIP
+ src/blixemApp/blixem_.hpp              |   5 +-
+ src/blixemApp/blxview.cpp              |  59 ++++++++++-----
+ src/blixemApp/blxwindow.cpp            | 134 ++++++++++++++++++++++++++++++++-
+ src/blixemApp/detailview.cpp           |   4 +-
+ src/blixemApp/sequencecellrenderer.cpp |   6 +-
+ 5 files changed, 180 insertions(+), 28 deletions(-)
+
+2015-04-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/snp_track' into develop - RT 457103
+2015-04-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Make horizontal mouse-wheel scrolling work for the whole detail view - WIP
+ src/blixemApp/detailview.cpp     | 40 ++++++++++++++++++++++++++++++++++++++--
+ src/blixemApp/detailviewtree.cpp | 36 ------------------------------------
+ 2 files changed, 38 insertions(+), 38 deletions(-)
+
+2015-04-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Add independent cache for multiple snp splitter bar positions - WIP
+ src/blixemApp/detailview.cpp     | 106 +++++++++++++++++++++++++++++++--------
+ src/blixemApp/detailview.hpp     |   1 -
+ src/blixemApp/detailviewtree.cpp |   8 +--
+ 3 files changed, 88 insertions(+), 27 deletions(-)
+
+2015-04-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Revert "Remove obsolete function to calculate snp track size - WIP"
+ src/blixemApp/detailview.cpp | 48 ++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 48 insertions(+)
+
+2015-04-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Double-clicking ref seq resets snp track size - WIP
+ src/blixemApp/detailview.cpp | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+2015-04-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Enable/disable snp track when it becomes visible/hidden by splitter - WIP
+ src/blixemApp/detailview.cpp     | 45 ++++++++++++++++++++++++++++++++++++++--
+ src/blixemApp/detailview.hpp     |  2 +-
+ src/blixemApp/detailviewtree.cpp |  2 +-
+ 3 files changed, 45 insertions(+), 4 deletions(-)
+
+2015-04-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ refactoring - WIP
+ src/blixemApp/detailview.cpp     | 44 ++++++++++++++++++++++++----------------
+ src/blixemApp/detailview.hpp     |  1 +
+ src/blixemApp/detailviewtree.cpp | 24 ++++++----------------
+ 3 files changed, 33 insertions(+), 36 deletions(-)
+
+2015-04-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Remove obsolete function to calculate snp track size - WIP
+ src/blixemApp/detailview.cpp | 48 --------------------------------------------
+ 1 file changed, 48 deletions(-)
+
+2015-04-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Double-click minimised snp track pane - WIP
+ src/blixemApp/detailview.cpp | 147 ++++++++++++++++++++++++-------------------
+ src/blixemApp/detailview.hpp |   1 +
+ 2 files changed, 84 insertions(+), 64 deletions(-)
+
+2015-04-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Make snp scroll step one char height - WIP
+ src/blixemApp/detailview.cpp | 90 +++++++++++++++++++++++++++++++++++++++++++-
+ 1 file changed, 88 insertions(+), 2 deletions(-)
+
+2015-04-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix problem with scroll window size - WIP
+ src/blixemApp/detailview.cpp     | 30 ++++++++++--------------------
+ src/blixemApp/detailviewtree.cpp |  3 +++
+ 2 files changed, 13 insertions(+), 20 deletions(-)
+
+2015-04-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Make paned window available in snp resize function - WIP
+ src/blixemApp/detailview.cpp     | 94 ++++++++++++++++++++++++++++------------
+ src/blixemApp/detailview.hpp     |  1 +
+ src/blixemApp/detailviewtree.cpp |  3 +-
+ 3 files changed, 69 insertions(+), 29 deletions(-)
+
+2015-04-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Improve debug output - TRIVIAL
+ src/blixemApp/bigpicture.cpp     |   4 -
+ src/blixemApp/bigpicturegrid.cpp |   8 --
+ src/blixemApp/detailview.cpp     | 187 ++++++++++++++++++++++++++++++++++++---
+ src/blixemApp/exonview.cpp       |   8 --
+ 4 files changed, 176 insertions(+), 31 deletions(-)
+
+2015-04-08  Gemma Barson  <gb10 at sanger.ac.uk>
+ Put snp track in scrollwin (not working yet) - WIP
+ src/blixemApp/detailview.cpp     | 56 +++++++++++++++++++++++++++++-----------
+ src/blixemApp/detailview.hpp     |  1 +
+ src/blixemApp/detailviewtree.cpp |  8 +++++-
+ 3 files changed, 49 insertions(+), 16 deletions(-)
+
+2015-04-08  Gemma Barson  <gb10 at sanger.ac.uk>
+ Put individual trees inside a frame - WIP
+ src/blixemApp/detailview.cpp     |  4 ++--
+ src/blixemApp/detailviewtree.cpp | 17 ++++++++++++-----
+ 2 files changed, 14 insertions(+), 7 deletions(-)
+
+2015-04-08  Gemma Barson  <gb10 at sanger.ac.uk>
+ Make snp track resizable (dna mode) - WIP
+ src/blixemApp/detailview.cpp     |  3 +-
+ src/blixemApp/detailviewtree.cpp | 77 ++++++++++++++++++++++------------------
+ src/blixemApp/detailviewtree.hpp |  1 -
+ 3 files changed, 44 insertions(+), 37 deletions(-)
+
+2015-04-08  Gemma Barson  <gb10 at sanger.ac.uk>
+ Remove unused variable - TRIVIAL
+ src/blixemApp/detailview.hpp | 1 -
+ 1 file changed, 1 deletion(-)
+
+2015-04-08  Gemma Barson  <gb10 at sanger.ac.uk>
+ Make snp track resizable (protein mode) - WIP
+ src/blixemApp/detailview.cpp     | 82 ++++++++++++++++++++--------------------
+ src/blixemApp/detailview.hpp     |  3 +-
+ src/blixemApp/detailviewtree.cpp |  8 +---
+ 3 files changed, 45 insertions(+), 48 deletions(-)
+
+2015-03-26  Steve Miller  <sm23 at sanger.ac.uk>
+ Merge branch 'production' into develop
+2015-03-26  Steve Miller  <sm23 at sanger.ac.uk>
+ Merge branch 'release/4.33' into production
+2015-03-24  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.32.1-41-g732d - Update RT and git commit reports
+ src/ChangeLog | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+2015-03-24  Gemma Barson  <gb10 at sanger.ac.uk>
+ Add gbtools version string to about dialog - NEW FEATURE 'Version strings'
+ src/belvuApp/belvu.cpp        | 14 ++++++++++++--
+ src/belvuApp/belvu_.hpp       |  7 +------
+ src/blixemApp/blixem_.hpp     | 10 +++-------
+ src/blixemApp/blxview.cpp     | 15 ++++++++++++---
+ src/blixemApp/blxwindow.cpp   |  4 ++++
+ src/dotterApp/dotter.cpp      | 12 ++++++++++--
+ src/dotterApp/dotter_.hpp     |  6 +-----
+ src/seqtoolsUtils/version.hpp |  2 +-
+ 8 files changed, 44 insertions(+), 26 deletions(-)
+
+2015-03-24  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix compilation problem with gbtools subdir - BUILD
+ .gitignore       |  2 +-
+ src/autogen.sh   | 22 ++++++++++++++++++++++
+ src/configure.ac |  6 ++----
+ 3 files changed, 25 insertions(+), 5 deletions(-)
+
+2015-03-24  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.32.1-40-g9ea7 - Update RT and git commit reports
+ src/ChangeLog | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+2015-03-24  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.32.1-39-g3fcd - Update RT and git commit reports
+ src/ChangeLog                                  | 6 ++++++
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt | 2 +-
+ 2 files changed, 7 insertions(+), 1 deletion(-)
+
+2015-03-23  Gemma Barson  <gb10 at sanger.ac.uk>
+ Minor name change of generated file - TRIVIAL
+ src/autogen.sh   | 2 +-
+ src/configure.ac | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+2015-03-23  Gemma Barson  <gb10 at sanger.ac.uk>
+ Improve the way we get the git version number - BUILD
+ .gitignore     |  3 +++
+ src/autogen.sh | 16 +++++++++++++++-
+ src/version.m4 |  1 -
+ 3 files changed, 18 insertions(+), 2 deletions(-)
+
+2015-03-19  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.32.1-38-gd7c9 - Update RT and git commit reports
+ src/ChangeLog                                  | 6 ++++++
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt | 2 +-
+ 2 files changed, 7 insertions(+), 1 deletion(-)
+
+2015-03-18  Gemma Barson  <gb10 at sanger.ac.uk>
+ Update build documentation with notes on gbtools - DOC
+ src/doc/Design_notes/build.html | 3 +++
+ 1 file changed, 3 insertions(+)
+
+2015-03-18  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix bug in runconfig script where it didn't recognise cmd line flags - BUILD
+ src/runconfig.sh | 86 +++++++++++++++++++++++++++++---------------------------
+ 1 file changed, 45 insertions(+), 41 deletions(-)
+
+2015-03-18  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/gbtools' into develop
+2015-03-18  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.32.1-37-gb867 - Update RT and git commit reports
+ src/ChangeLog                                  | 6 ++++++
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt | 2 +-
+ 2 files changed, 7 insertions(+), 1 deletion(-)
+
+2015-03-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Use main gbtools header - BUILD
+ src/belvuApp/belvuConsPlot.cpp  | 2 +-
+ src/belvuApp/belvuTree.cpp      | 2 +-
+ src/belvuApp/belvuWindow.cpp    | 2 +-
+ src/blixemApp/blxdotter.cpp     | 2 +-
+ src/blixemApp/blxwindow.cpp     | 2 +-
+ src/dotterApp/dotter.cpp        | 2 +-
+ src/seqtoolsUtils/utilities.cpp | 2 +-
+ 7 files changed, 7 insertions(+), 7 deletions(-)
+
+2015-03-16  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.32.1-36-g2d57 - Update RT and git commit reports
+ src/ChangeLog                                  | 7 +++++++
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt | 2 +-
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+2015-03-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix compile error on cygwin - BUILD
+ src/belvuApp/Makefile.am  | 4 +++-
+ src/blixemApp/Makefile.am | 5 ++++-
+ src/dotterApp/Makefile.am | 5 ++++-
+ 3 files changed, 11 insertions(+), 3 deletions(-)
+
+2015-03-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix compilation of gbtools in subdir - BUILD
+ src/configure.ac              | 3 +--
+ src/seqtoolsUtils/Makefile.am | 7 ++++++-
+ 2 files changed, 7 insertions(+), 3 deletions(-)
+
+2015-03-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix compile order error on linux - BUILD
+ src/belvuApp/Makefile.am  | 2 +-
+ src/blixemApp/Makefile.am | 2 +-
+ src/dotterApp/Makefile.am | 2 +-
+ 3 files changed, 3 insertions(+), 3 deletions(-)
+
+2015-03-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Tidy makefiles - BUILD
+ src/belvuApp/Makefile.am  | 20 ++++++++++++++++----
+ src/blixemApp/Makefile.am | 17 ++++++++++++++---
+ src/dotterApp/Makefile.am | 17 ++++++++++++++---
+ 3 files changed, 44 insertions(+), 10 deletions(-)
+
+2015-03-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'develop' into feature/gbtools
+2015-03-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix hang on linux, regression caused by c++ changes - BUG FIX
+ src/blixemApp/sequencecellrenderer.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2015-03-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Revert "Revert "Fix installation of docs in dist file - BUILD""
+ src/configure.ac                         |  4 ++++
+ src/doc/Design_notes/Makefile.am         | 13 +++++++++++++
+ src/doc/Design_notes/modules/Makefile.am | 13 +++++++++++++
+ src/doc/Makefile.am                      |  2 +-
+ 4 files changed, 31 insertions(+), 1 deletion(-)
+
+2015-03-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Revert "Revert "Fix missing docs installation - BUILD""
+ src/Makefile.am | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+2015-03-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Revert "Revert "Merge branch 'feature/cpp' into develop""
+ src/Makefile.am                                    | 103 +--------------------
+ src/belvuApp/Makefile.am                           |  23 +++++
+ src/belvuApp/{belvu.c => belvu.cpp}                |  20 ++--
+ .../{belvuAlignment.c => belvuAlignment.cpp}       |   8 +-
+ .../{belvuAlignment.h => belvuAlignment.hpp}       |   2 +-
+ .../{belvuConsPlot.c => belvuConsPlot.cpp}         |   6 +-
+ .../{belvuConsPlot.h => belvuConsPlot.hpp}         |   2 +-
+ src/belvuApp/{belvuMain.c => belvuMain.cpp}        |  10 +-
+ src/belvuApp/{belvuTree.c => belvuTree.cpp}        |   6 +-
+ src/belvuApp/{belvuTree.h => belvuTree.hpp}        |   2 +-
+ src/belvuApp/{belvuWindow.c => belvuWindow.cpp}    |  10 +-
+ src/belvuApp/{belvuWindow.h => belvuWindow.hpp}    |   2 +-
+ src/belvuApp/{belvu_.h => belvu_.hpp}              |   6 +-
+ src/blixemApp/Makefile.am                          |  45 +++++++++
+ src/blixemApp/{bigpicture.c => bigpicture.cpp}     |  12 +--
+ src/blixemApp/{bigpicture.h => bigpicture.hpp}     |   6 +-
+ .../{bigpicturegrid.c => bigpicturegrid.cpp}       |  12 +--
+ .../{bigpicturegrid.h => bigpicturegrid.hpp}       |   4 +-
+ src/blixemApp/{blixem_.h => blixem_.hpp}           |   6 +-
+ src/blixemApp/{blxFetch.c => blxFetch.cpp}         |  23 +++--
+ src/blixemApp/{blxFetchDb.c => blxFetchDb.cpp}     |   6 +-
+ src/blixemApp/{blxdotter.c => blxdotter.cpp}       |  23 ++---
+ src/blixemApp/{blxdotter.h => blxdotter.hpp}       |   2 +-
+ src/blixemApp/{blxmain.c => blxmain.cpp}           |   8 +-
+ src/blixemApp/{blxview.c => blxview.cpp}           |  20 ++--
+ src/blixemApp/{blxview.h => blxview.hpp}           |   0
+ src/blixemApp/{blxwindow.c => blxwindow.cpp}       |  28 +++---
+ src/blixemApp/{blxwindow.h => blxwindow.hpp}       |   4 +-
+ src/blixemApp/{coverageview.c => coverageview.cpp} |   8 +-
+ src/blixemApp/{coverageview.h => coverageview.hpp} |   2 +-
+ src/blixemApp/{detailview.c => detailview.cpp}     |  14 +--
+ src/blixemApp/{detailview.h => detailview.hpp}     |   4 +-
+ .../{detailviewtree.c => detailviewtree.cpp}       |  14 +--
+ .../{detailviewtree.h => detailviewtree.hpp}       |   6 +-
+ src/blixemApp/{exonview.c => exonview.cpp}         |  16 ++--
+ src/blixemApp/{exonview.h => exonview.hpp}         |   2 +-
+ ...encecellrenderer.c => sequencecellrenderer.cpp} |  14 +--
+ ...encecellrenderer.h => sequencecellrenderer.hpp} |   2 +-
+ src/configure.ac                                   |  11 ++-
+ src/doc/Makefile.am                                |   8 ++
+ src/doc/User_doc/Makefile.am                       |  22 +++++
+ src/dotterApp/Makefile.am                          |  23 +++++
+ .../{alignmenttool.c => alignmenttool.cpp}         |   4 +-
+ src/dotterApp/{dotplot.c => dotplot.cpp}           |   6 +-
+ src/dotterApp/{dotter.c => dotter.cpp}             |  18 ++--
+ src/dotterApp/{dotter.h => dotter.hpp}             |   2 +-
+ src/dotterApp/{dotterKarlin.c => dotterKarlin.cpp} |   2 +-
+ src/dotterApp/{dotterMain.c => dotterMain.cpp}     |  13 +--
+ src/dotterApp/{dotter_.h => dotter_.hpp}           |   4 +-
+ src/dotterApp/{greyramptool.c => greyramptool.cpp} |   4 +-
+ .../{seqtoolsExonView.c => seqtoolsExonView.cpp}   |   6 +-
+ .../{seqtoolsExonView.h => seqtoolsExonView.hpp}   |   4 +-
+ src/examples/Makefile.am                           |   8 ++
+ src/libpfetch/Makefile.am                          |  50 ++++++++++
+ src/libpfetch/libcurlobject.h                      |   9 +-
+ src/libpfetch/libcurlobject_I.h                    |  10 ++
+ src/libpfetch/libpfetch-cmarshal.h                 |   7 ++
+ src/libpfetch/libpfetch.h                          |   8 ++
+ src/libpfetch/libpfetch_I.h                        |   8 ++
+ src/libpfetch/libpfetch_P.h                        |   8 ++
+ src/seqtoolsUtils/Makefile.am                      |  14 +++
+ .../{blxGff3Parser.c => blxGff3Parser.cpp}         |   8 +-
+ .../{blxGff3Parser.h => blxGff3Parser.hpp}         |   2 +-
+ src/seqtoolsUtils/{blxmsp.c => blxmsp.cpp}         |   6 +-
+ src/seqtoolsUtils/{blxmsp.h => blxmsp.hpp}         |   2 +-
+ src/seqtoolsUtils/{blxparser.c => blxparser.cpp}   |  16 ++--
+ src/seqtoolsUtils/{blxparser.h => blxparser.hpp}   |   0
+ src/seqtoolsUtils/{iupac.h => iupac.hpp}           |   0
+ ...seqtoolsWebBrowser.c => seqtoolsWebBrowser.cpp} |   2 +-
+ src/seqtoolsUtils/{translate.c => translate.cpp}   |   4 +-
+ src/seqtoolsUtils/{utilities.c => utilities.cpp}   |   2 +-
+ src/seqtoolsUtils/{utilities.h => utilities.hpp}   |   1 -
+ src/seqtoolsUtils/{version.h => version.hpp}       |   0
+ src/test/Makefile.am                               |   8 ++
+ 74 files changed, 476 insertions(+), 305 deletions(-)
+
+2015-03-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'release/4.33' into develop
+2015-03-12  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.32.1-35-gcfe0 - Update RT and git commit reports
+ src/ChangeLog                                  | 161 +++++++++++++++++++++++++
+ src/build/release_docs/GIT_COMMITS.txt         |   2 +
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt |  10 ++
+ 3 files changed, 173 insertions(+)
+
+2015-03-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Revert "Merge branch 'feature/cpp' into develop"
+ src/Makefile.am                                    | 103 ++++++++++++++++++++-
+ src/belvuApp/Makefile.am                           |  23 -----
+ src/belvuApp/{belvu.cpp => belvu.c}                |  20 ++--
+ .../{belvuAlignment.cpp => belvuAlignment.c}       |   8 +-
+ .../{belvuAlignment.hpp => belvuAlignment.h}       |   2 +-
+ .../{belvuConsPlot.cpp => belvuConsPlot.c}         |   6 +-
+ .../{belvuConsPlot.hpp => belvuConsPlot.h}         |   2 +-
+ src/belvuApp/{belvuMain.cpp => belvuMain.c}        |  10 +-
+ src/belvuApp/{belvuTree.cpp => belvuTree.c}        |   6 +-
+ src/belvuApp/{belvuTree.hpp => belvuTree.h}        |   2 +-
+ src/belvuApp/{belvuWindow.cpp => belvuWindow.c}    |  10 +-
+ src/belvuApp/{belvuWindow.hpp => belvuWindow.h}    |   2 +-
+ src/belvuApp/{belvu_.hpp => belvu_.h}              |   6 +-
+ src/blixemApp/Makefile.am                          |  45 ---------
+ src/blixemApp/{bigpicture.cpp => bigpicture.c}     |  12 +--
+ src/blixemApp/{bigpicture.hpp => bigpicture.h}     |   6 +-
+ .../{bigpicturegrid.cpp => bigpicturegrid.c}       |  12 +--
+ .../{bigpicturegrid.hpp => bigpicturegrid.h}       |   4 +-
+ src/blixemApp/{blixem_.hpp => blixem_.h}           |   6 +-
+ src/blixemApp/{blxFetch.cpp => blxFetch.c}         |  23 ++---
+ src/blixemApp/{blxFetchDb.cpp => blxFetchDb.c}     |   6 +-
+ src/blixemApp/{blxdotter.cpp => blxdotter.c}       |  23 +++--
+ src/blixemApp/{blxdotter.hpp => blxdotter.h}       |   2 +-
+ src/blixemApp/{blxmain.cpp => blxmain.c}           |   8 +-
+ src/blixemApp/{blxview.cpp => blxview.c}           |  20 ++--
+ src/blixemApp/{blxview.hpp => blxview.h}           |   0
+ src/blixemApp/{blxwindow.cpp => blxwindow.c}       |  28 +++---
+ src/blixemApp/{blxwindow.hpp => blxwindow.h}       |   4 +-
+ src/blixemApp/{coverageview.cpp => coverageview.c} |   8 +-
+ src/blixemApp/{coverageview.hpp => coverageview.h} |   2 +-
+ src/blixemApp/{detailview.cpp => detailview.c}     |  14 +--
+ src/blixemApp/{detailview.hpp => detailview.h}     |   4 +-
+ .../{detailviewtree.cpp => detailviewtree.c}       |  14 +--
+ .../{detailviewtree.hpp => detailviewtree.h}       |   6 +-
+ src/blixemApp/{exonview.cpp => exonview.c}         |  16 ++--
+ src/blixemApp/{exonview.hpp => exonview.h}         |   2 +-
+ ...encecellrenderer.cpp => sequencecellrenderer.c} |  14 +--
+ ...encecellrenderer.hpp => sequencecellrenderer.h} |   2 +-
+ src/configure.ac                                   |  11 +--
+ src/doc/Makefile.am                                |   8 --
+ src/doc/User_doc/Makefile.am                       |  22 -----
+ src/dotterApp/Makefile.am                          |  23 -----
+ .../{alignmenttool.cpp => alignmenttool.c}         |   4 +-
+ src/dotterApp/{dotplot.cpp => dotplot.c}           |   6 +-
+ src/dotterApp/{dotter.cpp => dotter.c}             |  18 ++--
+ src/dotterApp/{dotter.hpp => dotter.h}             |   2 +-
+ src/dotterApp/{dotterKarlin.cpp => dotterKarlin.c} |   2 +-
+ src/dotterApp/{dotterMain.cpp => dotterMain.c}     |  13 ++-
+ src/dotterApp/{dotter_.hpp => dotter_.h}           |   4 +-
+ src/dotterApp/{greyramptool.cpp => greyramptool.c} |   4 +-
+ .../{seqtoolsExonView.cpp => seqtoolsExonView.c}   |   6 +-
+ .../{seqtoolsExonView.hpp => seqtoolsExonView.h}   |   4 +-
+ src/examples/Makefile.am                           |   8 --
+ src/libpfetch/Makefile.am                          |  50 ----------
+ src/libpfetch/libcurlobject.h                      |   9 +-
+ src/libpfetch/libcurlobject_I.h                    |  10 --
+ src/libpfetch/libpfetch-cmarshal.h                 |   7 --
+ src/libpfetch/libpfetch.h                          |   8 --
+ src/libpfetch/libpfetch_I.h                        |   8 --
+ src/libpfetch/libpfetch_P.h                        |   8 --
+ src/seqtoolsUtils/Makefile.am                      |  14 ---
+ .../{blxGff3Parser.cpp => blxGff3Parser.c}         |   8 +-
+ .../{blxGff3Parser.hpp => blxGff3Parser.h}         |   2 +-
+ src/seqtoolsUtils/{blxmsp.cpp => blxmsp.c}         |   6 +-
+ src/seqtoolsUtils/{blxmsp.hpp => blxmsp.h}         |   2 +-
+ src/seqtoolsUtils/{blxparser.cpp => blxparser.c}   |  16 ++--
+ src/seqtoolsUtils/{blxparser.hpp => blxparser.h}   |   0
+ src/seqtoolsUtils/{iupac.hpp => iupac.h}           |   0
+ ...seqtoolsWebBrowser.cpp => seqtoolsWebBrowser.c} |   2 +-
+ src/seqtoolsUtils/{translate.cpp => translate.c}   |   4 +-
+ src/seqtoolsUtils/{utilities.cpp => utilities.c}   |   2 +-
+ src/seqtoolsUtils/{utilities.hpp => utilities.h}   |   1 +
+ src/seqtoolsUtils/{version.hpp => version.h}       |   0
+ src/test/Makefile.am                               |   8 --
+ 74 files changed, 305 insertions(+), 476 deletions(-)
+
+2015-03-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Revert "Fix missing docs installation - BUILD"
+ src/Makefile.am | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+2015-03-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Revert "Fix installation of docs in dist file - BUILD"
+ src/configure.ac                         |  4 ----
+ src/doc/Design_notes/Makefile.am         | 13 -------------
+ src/doc/Design_notes/modules/Makefile.am | 13 -------------
+ src/doc/Makefile.am                      |  2 +-
+ 4 files changed, 1 insertion(+), 31 deletions(-)
+
+2015-03-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Make organism abbreviation longer to avoid duplicates - RT 456864
+ src/blixemApp/blixem_.hpp |  2 +-
+ src/blixemApp/blxview.cpp | 30 +++++++++++++++++++++++++++++-
+ 2 files changed, 30 insertions(+), 2 deletions(-)
+
+2015-03-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Make organism abbreviation longer to avoid duplicates - RT 456864
+ src/blixemApp/blixem_.hpp |  2 +-
+ src/blixemApp/blxview.cpp | 30 +++++++++++++++++++++++++++++-
+ 2 files changed, 30 insertions(+), 2 deletions(-)
+
+2015-03-12  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.32.1-30-g3f48 - Update RT and git commit reports
+ src/ChangeLog                                  | 536 ++++++++++++++++++-------
+ src/build/release_docs/GIT_COMMITS.txt         |  20 +-
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt |  32 +-
+ 3 files changed, 389 insertions(+), 199 deletions(-)
+
+2015-03-12  Steve Miller  <sm23 at sanger.ac.uk>
+ editing of release notes - BUILD
+ src/doc/User_doc/release_notes.html | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+2015-03-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix for changed library function name - TRIVIAL
+ src/belvuApp/belvuConsPlot.cpp  | 2 +-
+ src/belvuApp/belvuTree.cpp      | 2 +-
+ src/belvuApp/belvuWindow.cpp    | 8 ++++----
+ src/blixemApp/blxdotter.cpp     | 2 +-
+ src/blixemApp/blxwindow.cpp     | 6 +++---
+ src/dotterApp/dotter.cpp        | 2 +-
+ src/seqtoolsUtils/utilities.cpp | 2 +-
+ 7 files changed, 12 insertions(+), 12 deletions(-)
+
+2015-03-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Use gbtools monitor size code - NEW FEATURE 'gbtools'
+ src/belvuApp/belvuConsPlot.cpp  |  3 +-
+ src/belvuApp/belvuTree.cpp      |  3 +-
+ src/belvuApp/belvuWindow.cpp    | 13 ++++----
+ src/blixemApp/blxdotter.cpp     |  3 +-
+ src/blixemApp/blxwindow.cpp     |  9 +++---
+ src/dotterApp/dotter.cpp        |  3 +-
+ src/seqtoolsUtils/utilities.cpp | 67 ++---------------------------------------
+ src/seqtoolsUtils/utilities.hpp |  3 --
+ 8 files changed, 22 insertions(+), 82 deletions(-)
+
+2015-03-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Add gitignore file for build directory - BUILD
+ src/build/.gitignore | 3 +++
+ 1 file changed, 3 insertions(+)
+
+2015-03-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ gbtools now compiles ok into seqtools - NEW FEATURE 'gbtools'
+ src/belvuApp/Makefile.am      | 2 +-
+ src/blixemApp/Makefile.am     | 8 ++++----
+ src/seqtoolsUtils/Makefile.am | 2 +-
+ 3 files changed, 6 insertions(+), 6 deletions(-)
+
+2015-03-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Minor improvement to dotter libs - BUILD
+ src/dotterApp/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2015-03-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'develop' into feature/gbtools
+2015-03-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix installation of docs in dist file - BUILD
+ src/configure.ac                         |  4 ++++
+ src/doc/Design_notes/Makefile.am         | 13 +++++++++++++
+ src/doc/Design_notes/modules/Makefile.am | 13 +++++++++++++
+ src/doc/Makefile.am                      |  2 +-
+ 4 files changed, 31 insertions(+), 1 deletion(-)
+
+2015-03-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix missing docs installation - BUILD
+ src/Makefile.am | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+2015-03-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Add gitignore file for gbtools dir - BUILD
+ src/gbtools/.gitignore | 0
+ 1 file changed, 0 insertions(+), 0 deletions(-)
+
+2015-03-06  Gemma Barson  <gb10 at sanger.ac.uk>
+ Minor change to runconfig script - BUILD
+ src/runconfig.sh | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+2015-03-06  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixes to autotools files for gbtools subdir
+ src/Makefile.am               | 13 +++++++++----
+ src/belvuApp/Makefile.am      |  6 +++---
+ src/blixemApp/Makefile.am     |  8 ++++----
+ src/configure.ac              | 10 ++++++++++
+ src/dotterApp/Makefile.am     |  6 +++---
+ src/runconfig.sh              |  6 +++---
+ src/seqtoolsUtils/Makefile.am |  8 ++++----
+ 7 files changed, 36 insertions(+), 21 deletions(-)
+
+2015-03-04  Gemma Barson  <gb10 at sanger.ac.uk>
+ "Tidying - TRIVIAL"
+ src/belvuApp/Makefile.am  |  7 +++----
+ src/blixemApp/Makefile.am | 16 ++++++++--------
+ src/dotterApp/Makefile.am |  3 +--
+ 3 files changed, 12 insertions(+), 14 deletions(-)
+
+2015-03-04  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/cpp' into develop
+2015-03-04  Gemma Barson  <gb10 at sanger.ac.uk>
+ "Fix error using abstract type - TRIVIAL"
+ src/blixemApp/sequencecellrenderer.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2015-03-03  Gemma Barson  <gb10 at sanger.ac.uk>
+ "Fix c++ compiler errors - BUILD"
+ src/belvuApp/belvu.cpp    | 3 +--
+ src/blixemApp/blxview.cpp | 2 +-
+ 2 files changed, 2 insertions(+), 3 deletions(-)
+
+2015-03-03  Gemma Barson  <gb10 at sanger.ac.uk>
+ "Fix c++ compiler errors - BUILD"
+ src/belvuApp/belvu.cpp       | 6 +++++-
+ src/dotterApp/dotterMain.cpp | 3 ++-
+ 2 files changed, 7 insertions(+), 2 deletions(-)
+
+2015-03-03  Gemma Barson  <gb10 at sanger.ac.uk>
+ "Fix more c++ compiler errors on linux - BUILD"
+ src/belvuApp/belvu.cpp     | 7 ++++---
+ src/blixemApp/blxFetch.cpp | 2 +-
+ src/blixemApp/blxview.cpp  | 2 +-
+ src/dotterApp/dotplot.cpp  | 2 +-
+ 4 files changed, 7 insertions(+), 6 deletions(-)
+
+2015-03-03  Gemma Barson  <gb10 at sanger.ac.uk>
+ "Fix compile error on linux - BUILD"
+ src/seqtoolsUtils/blxparser.cpp | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+2015-03-03  Gemma Barson  <gb10 at sanger.ac.uk>
+ "Fix c++ compiler warnings - BUILD"
+ src/belvuApp/belvuAlignment.cpp |  4 ++--
+ src/blixemApp/blxFetch.cpp      | 13 +++++++++----
+ src/blixemApp/blxdotter.cpp     |  4 ++--
+ src/blixemApp/blxwindow.cpp     |  6 +++---
+ src/seqtoolsUtils/blxmsp.cpp    |  2 +-
+ src/seqtoolsUtils/blxparser.cpp |  4 ++--
+ 6 files changed, 19 insertions(+), 14 deletions(-)
+
+2015-03-03  Gemma Barson  <gb10 at sanger.ac.uk>
+ "Fix compiler errors - BUILD"
+ src/belvuApp/belvuAlignment.cpp |  4 ++--
+ src/belvuApp/belvuConsPlot.cpp  |  6 +++---
+ src/belvuApp/belvuConsPlot.hpp  |  2 +-
+ src/belvuApp/belvuMain.cpp      | 10 +++++-----
+ src/belvuApp/belvuTree.cpp      |  6 +++---
+ src/belvuApp/belvuWindow.cpp    | 10 +++++-----
+ src/belvuApp/belvu_.hpp         |  6 +++---
+ 7 files changed, 22 insertions(+), 22 deletions(-)
+
+2015-03-03  Gemma Barson  <gb10 at sanger.ac.uk>
+ "Add C linkage to libpfetch c files - BUILD"
+ src/libpfetch/libcurlobject.h      |  9 ++++++++-
+ src/libpfetch/libcurlobject_I.h    | 10 ++++++++++
+ src/libpfetch/libpfetch-cmarshal.h |  7 +++++++
+ src/libpfetch/libpfetch.h          |  8 ++++++++
+ src/libpfetch/libpfetch_I.h        |  8 ++++++++
+ src/libpfetch/libpfetch_P.h        |  8 ++++++++
+ 6 files changed, 49 insertions(+), 1 deletion(-)
+
+2015-03-03  Gemma Barson  <gb10 at sanger.ac.uk>
+ "Fix cpp compiler errors - BUILD"
+ src/belvuApp/Makefile.am                 |  4 ++--
+ src/belvuApp/belvu.cpp                   | 10 +++++-----
+ src/belvuApp/belvuAlignment.hpp          |  2 +-
+ src/belvuApp/belvuTree.hpp               |  2 +-
+ src/belvuApp/belvuWindow.hpp             |  2 +-
+ src/blixemApp/Makefile.am                |  4 ++--
+ src/blixemApp/bigpicture.cpp             | 12 ++++++------
+ src/blixemApp/bigpicture.hpp             |  6 +++---
+ src/blixemApp/bigpicturegrid.cpp         | 12 ++++++------
+ src/blixemApp/bigpicturegrid.hpp         |  4 ++--
+ src/blixemApp/blixem_.hpp                |  6 +++---
+ src/blixemApp/blxFetch.cpp               |  8 ++++----
+ src/blixemApp/blxFetchDb.cpp             |  6 +++---
+ src/blixemApp/blxdotter.cpp              | 19 ++++++++++---------
+ src/blixemApp/blxdotter.hpp              |  2 +-
+ src/blixemApp/blxmain.cpp                |  8 ++++----
+ src/blixemApp/blxview.cpp                | 16 ++++++++--------
+ src/blixemApp/blxwindow.cpp              | 22 +++++++++++-----------
+ src/blixemApp/blxwindow.hpp              |  4 ++--
+ src/blixemApp/coverageview.cpp           |  8 ++++----
+ src/blixemApp/coverageview.hpp           |  2 +-
+ src/blixemApp/detailview.cpp             | 14 +++++++-------
+ src/blixemApp/detailview.hpp             |  4 ++--
+ src/blixemApp/detailviewtree.cpp         | 14 +++++++-------
+ src/blixemApp/detailviewtree.hpp         |  6 +++---
+ src/blixemApp/exonview.cpp               | 16 ++++++++--------
+ src/blixemApp/exonview.hpp               |  2 +-
+ src/blixemApp/sequencecellrenderer.cpp   | 14 +++++++-------
+ src/blixemApp/sequencecellrenderer.hpp   |  2 +-
+ src/configure.ac                         |  2 +-
+ src/dotterApp/Makefile.am                |  4 ++--
+ src/dotterApp/alignmenttool.cpp          |  4 ++--
+ src/dotterApp/dotplot.cpp                |  4 ++--
+ src/dotterApp/dotter.cpp                 | 18 +++++++++---------
+ src/dotterApp/dotter.hpp                 |  2 +-
+ src/dotterApp/dotterKarlin.cpp           |  2 +-
+ src/dotterApp/dotterMain.cpp             | 10 +++++-----
+ src/dotterApp/dotter_.hpp                |  4 ++--
+ src/dotterApp/greyramptool.cpp           |  4 ++--
+ src/dotterApp/seqtoolsExonView.cpp       |  6 +++---
+ src/dotterApp/seqtoolsExonView.hpp       |  4 ++--
+ src/seqtoolsUtils/Makefile.am            |  6 +++---
+ src/seqtoolsUtils/blxGff3Parser.cpp      |  8 ++++----
+ src/seqtoolsUtils/blxGff3Parser.hpp      |  2 +-
+ src/seqtoolsUtils/blxmsp.cpp             |  4 ++--
+ src/seqtoolsUtils/blxmsp.hpp             |  2 +-
+ src/seqtoolsUtils/blxparser.cpp          |  8 ++++----
+ src/seqtoolsUtils/seqtoolsWebBrowser.cpp |  2 +-
+ src/seqtoolsUtils/translate.cpp          |  4 ++--
+ src/seqtoolsUtils/utilities.cpp          |  2 +-
+ 50 files changed, 167 insertions(+), 166 deletions(-)
+
+2015-03-03  Gemma Barson  <gb10 at sanger.ac.uk>
+ "Change libpfetch files back to .h/.c - BUILD"
+ src/libpfetch/{libcurlobject.cpp => libcurlobject.c}           | 0
+ src/libpfetch/{libpfetch-cmarshal.cpp => libpfetch-cmarshal.c} | 0
+ src/libpfetch/{libpfetch-utils.cpp => libpfetch-utils.c}       | 0
+ src/libpfetch/{libpfetch.cpp => libpfetch.c}                   | 0
+ src/libpfetch/{libpfetch_I.hpp => libpfetch_I.h}               | 0
+ src/libpfetch/{libpfetch_P.hpp => libpfetch_P.h}               | 0
+ 6 files changed, 0 insertions(+), 0 deletions(-)
+
+2015-03-03  Gemma Barson  <gb10 at sanger.ac.uk>
+ "Rename .h files to .hpp - BUILD"
+ src/belvuApp/{belvuAlignment.h => belvuAlignment.hpp}              | 0
+ src/belvuApp/{belvuConsPlot.h => belvuConsPlot.hpp}                | 0
+ src/belvuApp/{belvuTree.h => belvuTree.hpp}                        | 0
+ src/belvuApp/{belvuWindow.h => belvuWindow.hpp}                    | 0
+ src/belvuApp/{belvu_.h => belvu_.hpp}                              | 0
+ src/blixemApp/{bigpicture.h => bigpicture.hpp}                     | 0
+ src/blixemApp/{bigpicturegrid.h => bigpicturegrid.hpp}             | 0
+ src/blixemApp/{blixem_.h => blixem_.hpp}                           | 0
+ src/blixemApp/{blxdotter.h => blxdotter.hpp}                       | 0
+ src/blixemApp/{blxview.h => blxview.hpp}                           | 0
+ src/blixemApp/{blxwindow.h => blxwindow.hpp}                       | 0
+ src/blixemApp/{coverageview.h => coverageview.hpp}                 | 0
+ src/blixemApp/{detailview.h => detailview.hpp}                     | 0
+ src/blixemApp/{detailviewtree.h => detailviewtree.hpp}             | 0
+ src/blixemApp/{exonview.h => exonview.hpp}                         | 0
+ src/blixemApp/{sequencecellrenderer.h => sequencecellrenderer.hpp} | 0
+ src/dotterApp/{dotter.h => dotter.hpp}                             | 0
+ src/dotterApp/{dotter_.h => dotter_.hpp}                           | 0
+ src/dotterApp/{seqtoolsExonView.h => seqtoolsExonView.hpp}         | 0
+ src/libpfetch/{libpfetch_I.h => libpfetch_I.hpp}                   | 0
+ src/libpfetch/{libpfetch_P.h => libpfetch_P.hpp}                   | 0
+ src/seqtoolsUtils/{blxGff3Parser.h => blxGff3Parser.hpp}           | 0
+ src/seqtoolsUtils/{blxmsp.h => blxmsp.hpp}                         | 0
+ src/seqtoolsUtils/{blxparser.h => blxparser.hpp}                   | 0
+ src/seqtoolsUtils/{iupac.h => iupac.hpp}                           | 0
+ src/seqtoolsUtils/{utilities.h => utilities.hpp}                   | 0
+ src/seqtoolsUtils/{version.h => version.hpp}                       | 0
+ 27 files changed, 0 insertions(+), 0 deletions(-)
+
+2015-03-03  Gemma Barson  <gb10 at sanger.ac.uk>
+ "Renmae .c files to .cpp - BUILD"
+ src/belvuApp/{belvu.c => belvu.cpp}                                | 0
+ src/belvuApp/{belvuAlignment.c => belvuAlignment.cpp}              | 0
+ src/belvuApp/{belvuConsPlot.c => belvuConsPlot.cpp}                | 0
+ src/belvuApp/{belvuMain.c => belvuMain.cpp}                        | 0
+ src/belvuApp/{belvuTree.c => belvuTree.cpp}                        | 0
+ src/belvuApp/{belvuWindow.c => belvuWindow.cpp}                    | 0
+ src/blixemApp/{bigpicture.c => bigpicture.cpp}                     | 0
+ src/blixemApp/{bigpicturegrid.c => bigpicturegrid.cpp}             | 0
+ src/blixemApp/{blxFetch.c => blxFetch.cpp}                         | 0
+ src/blixemApp/{blxFetchDb.c => blxFetchDb.cpp}                     | 0
+ src/blixemApp/{blxdotter.c => blxdotter.cpp}                       | 0
+ src/blixemApp/{blxmain.c => blxmain.cpp}                           | 0
+ src/blixemApp/{blxview.c => blxview.cpp}                           | 0
+ src/blixemApp/{blxwindow.c => blxwindow.cpp}                       | 0
+ src/blixemApp/{coverageview.c => coverageview.cpp}                 | 0
+ src/blixemApp/{detailview.c => detailview.cpp}                     | 0
+ src/blixemApp/{detailviewtree.c => detailviewtree.cpp}             | 0
+ src/blixemApp/{exonview.c => exonview.cpp}                         | 0
+ src/blixemApp/{sequencecellrenderer.c => sequencecellrenderer.cpp} | 0
+ src/dotterApp/{alignmenttool.c => alignmenttool.cpp}               | 0
+ src/dotterApp/{dotplot.c => dotplot.cpp}                           | 0
+ src/dotterApp/{dotter.c => dotter.cpp}                             | 0
+ src/dotterApp/{dotterKarlin.c => dotterKarlin.cpp}                 | 0
+ src/dotterApp/{dotterMain.c => dotterMain.cpp}                     | 0
+ src/dotterApp/{greyramptool.c => greyramptool.cpp}                 | 0
+ src/dotterApp/{seqtoolsExonView.c => seqtoolsExonView.cpp}         | 0
+ src/libpfetch/{libcurlobject.c => libcurlobject.cpp}               | 0
+ src/libpfetch/{libpfetch-cmarshal.c => libpfetch-cmarshal.cpp}     | 0
+ src/libpfetch/{libpfetch-utils.c => libpfetch-utils.cpp}           | 0
+ src/libpfetch/{libpfetch.c => libpfetch.cpp}                       | 0
+ src/seqtoolsUtils/{blxGff3Parser.c => blxGff3Parser.cpp}           | 0
+ src/seqtoolsUtils/{blxmsp.c => blxmsp.cpp}                         | 0
+ src/seqtoolsUtils/{blxparser.c => blxparser.cpp}                   | 0
+ src/seqtoolsUtils/{seqtoolsWebBrowser.c => seqtoolsWebBrowser.cpp} | 0
+ src/seqtoolsUtils/{translate.c => translate.cpp}                   | 0
+ src/seqtoolsUtils/{utilities.c => utilities.cpp}                   | 0
+ 36 files changed, 0 insertions(+), 0 deletions(-)
+
+2015-03-03  Gemma Barson  <gb10 at sanger.ac.uk>
+ "Remove debug output - TRIVIAL"
+ src/seqtoolsUtils/utilities.h | 1 -
+ 1 file changed, 1 deletion(-)
+
+2015-03-03  Gemma Barson  <gb10 at sanger.ac.uk>
+ "Finish moving autotools stuff to subdirs - BUILD"
+ src/belvuApp/Makefile.am      | 4 ++--
+ src/blixemApp/Makefile.am     | 4 ++--
+ src/dotterApp/Makefile.am     | 4 ++--
+ src/libpfetch/Makefile.am     | 2 +-
+ src/seqtoolsUtils/Makefile.am | 2 +-
+ 5 files changed, 8 insertions(+), 8 deletions(-)
+
+2015-03-03  Gemma Barson  <gb10 at sanger.ac.uk>
+ "WIP: change autotools to use subdirs - BUILD"
+ src/Makefile.am               | 103 ++----------------------------------------
+ src/belvuApp/Makefile.am      |  23 ++++++++++
+ src/blixemApp/Makefile.am     |  45 ++++++++++++++++++
+ src/configure.ac              |   9 +++-
+ src/doc/Makefile.am           |   8 ++++
+ src/doc/User_doc/Makefile.am  |  22 +++++++++
+ src/dotterApp/Makefile.am     |  23 ++++++++++
+ src/examples/Makefile.am      |   8 ++++
+ src/libpfetch/Makefile.am     |  50 ++++++++++++++++++++
+ src/seqtoolsUtils/Makefile.am |  14 ++++++
+ src/test/Makefile.am          |   8 ++++
+ 11 files changed, 213 insertions(+), 100 deletions(-)
+
+2015-02-18  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/multi_dotter' into develop
+2015-02-18  Gemma Barson  <gb10 at sanger.ac.uk>
+ Start multiple dotters from blixem
+ src/blixemApp/blxdotter.c     | 130 ++++++++++++++++++++++++++++--------------
+ src/blixemApp/blxdotter.h     |   2 +-
+ src/blixemApp/blxview.c       |   2 +-
+ src/blixemApp/blxwindow.c     |  18 ++++--
+ src/blixemApp/blxwindow.h     |   2 +-
+ src/blixemApp/detailview.c    |   2 +-
+ src/seqtoolsUtils/utilities.h |   2 +
+ 7 files changed, 108 insertions(+), 50 deletions(-)
+
+2015-02-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'production' into develop
+2015-02-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'hotfix/4.32.1' into production
+2015-02-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix regression caused by previous change
+ src/blixemApp/blxwindow.c | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+2015-02-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Efficiency improvements starting up blixem
+ src/blixemApp/blxwindow.c  | 5 +++--
+ src/seqtoolsUtils/blxmsp.c | 2 +-
+ 2 files changed, 4 insertions(+), 3 deletions(-)
+
+2015-02-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix regression caused by previous change
+ src/blixemApp/blxwindow.c | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+2015-02-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Efficiency improvements starting up blixem
+ src/blixemApp/blxwindow.c  | 5 +++--
+ src/seqtoolsUtils/blxmsp.c | 2 +-
+ 2 files changed, 4 insertions(+), 3 deletions(-)
+
+2015-01-29  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'production' into develop
+2015-01-29  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'release/4.32' into production
+2015-01-26  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix compiler warnings for unused variables
+ src/blixemApp/blxdotter.c     | 12 ------------
+ src/dotterApp/dotterMain.c    |  4 +---
+ src/libpfetch/libpfetch.c     | 20 ++++++++------------
+ src/seqtoolsUtils/blxparser.c | 29 -----------------------------
+ 4 files changed, 9 insertions(+), 56 deletions(-)
+
+2015-01-26  Gemma Barson  <gb10 at sanger.ac.uk>
+ Minor change to future-proof gtk version checks
+ src/belvuApp/belvuWindow.c    | 2 +-
+ src/blixemApp/blxwindow.c     | 6 +++---
+ src/dotterApp/dotter.c        | 2 +-
+ src/seqtoolsUtils/utilities.c | 4 ++--
+ src/seqtoolsUtils/utilities.h | 4 ++++
+ 5 files changed, 11 insertions(+), 7 deletions(-)
+
+2015-01-26  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix compile error on older versions of GTK
+ src/seqtoolsUtils/utilities.c | 9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
+
+2015-01-26  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix belvu bug where windows appear on wrong monitor
+ src/belvuApp/belvuConsPlot.c |  5 -----
+ src/belvuApp/belvuTree.c     |  5 -----
+ src/belvuApp/belvuWindow.c   | 10 ----------
+ 3 files changed, 20 deletions(-)
+
+2015-01-26  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix window sizes on dual monitors
+ src/belvuApp/belvuConsPlot.c  |  5 ++--
+ src/belvuApp/belvuTree.c      |  5 ++--
+ src/belvuApp/belvuWindow.c    | 26 ++++++++----------
+ src/blixemApp/blxdotter.c     |  6 ++--
+ src/blixemApp/blxwindow.c     | 17 ++++++------
+ src/dotterApp/dotter.c        |  5 ++--
+ src/seqtoolsUtils/utilities.c | 64 +++++++++++++++++++++++++++++++++++++------
+ src/seqtoolsUtils/utilities.h |  3 +-
+ 8 files changed, 86 insertions(+), 45 deletions(-)
+
+2015-01-23  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.31-31-gd010 - Update RT and git commit reports
+ src/ChangeLog | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+2015-01-23  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.31-30-g890b - Update RT and git commit reports
+ src/ChangeLog                                  | 7 +++++++
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt | 2 +-
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+2015-01-21  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.31-29-g75f3 - Update RT and git commit reports
+ src/ChangeLog                                  | 15 +++++++++++++++
+ src/build/release_docs/GIT_COMMITS.txt         |  1 +
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt |  2 +-
+ 3 files changed, 17 insertions(+), 1 deletion(-)
+
+2015-01-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix potential crash in blixem
+ src/blixemApp/detailview.c | 14 +++++++++++---
+ 1 file changed, 11 insertions(+), 3 deletions(-)
+
+2015-01-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Update release notes
+ src/doc/User_doc/release_notes.html | 1 +
+ 1 file changed, 1 insertion(+)
+
+2015-01-13  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.31-26-g476d - Update RT and git commit reports
+ src/ChangeLog | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+2015-01-13  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.31-25-gfcf4 - Update RT and git commit reports
+ src/ChangeLog                                  | 176 ++++++++++++-------------
+ src/build/release_docs/GIT_COMMITS.txt         |  15 ++-
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt |   2 +-
+ 3 files changed, 96 insertions(+), 97 deletions(-)
+
+2015-01-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Minor update to blixem quick start guide
+ src/doc/User_doc/blixem_quick_start.html | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+2015-01-05  Ed Griffiths  <edgrif at sanger.ac.uk>
+ "add doc required by Sanger software policy."
+ src/RANGE_OF_YEARS_COPYRIGHT | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+2014-12-18  Ed Griffiths  <edgrif at sanger.ac.uk>
+ "add in X11 and m libs to link, otherwise not found on 64 bit ubuntu."
+ src/Makefile.am | 11 +++++++----
+ 1 file changed, 7 insertions(+), 4 deletions(-)
+
+2014-12-01  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix bug where matches can be treated like basic features
+ src/seqtoolsUtils/blxGff3Parser.c | 59 ++++++++++++++++++++-------------------
+ src/seqtoolsUtils/blxmsp.h        |  3 +-
+ 2 files changed, 33 insertions(+), 29 deletions(-)
+
+2014-11-28  Ed Griffiths  <edgrif at sanger.ac.uk>
+ Merge branch 'production' into develop
+2014-11-28  Ed Griffiths  <edgrif at sanger.ac.uk>
+ Merge branch 'release/4.31' into production
+2014-11-27  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.30-23-g232f - Update RT and git commit reports
+ src/ChangeLog                                  | 12 ++++++++++++
+ src/build/release_docs/GIT_COMMITS.txt         | 15 +--------------
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt |  2 +-
+ 3 files changed, 14 insertions(+), 15 deletions(-)
+
+2014-11-27  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix bug where styles were not being picked up for new features
+ src/blixemApp/blxwindow.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2014-11-27  Gemma Barson  <gb10 at sanger.ac.uk>
+ Set NULL SO ID for invalid Sequence type
+ src/seqtoolsUtils/blxGff3Parser.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+2014-11-27  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'release/4.31' into develop
+2014-11-27  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix problem with drag-and-drop of 'Sequence' features from ZMap (RT436929)
+ src/seqtoolsUtils/blxGff3Parser.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+2014-11-26  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.30-21-g89cc - Update RT and git commit reports
+ src/ChangeLog                                  | 7 +++++++
+ src/build/release_docs/GIT_COMMITS.txt         | 1 +
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt | 2 +-
+ 3 files changed, 9 insertions(+), 1 deletion(-)
+
+2014-11-25  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.30-20-g15bb - Update RT and git commit reports
+ src/ChangeLog                                  | 7 +++++++
+ src/build/release_docs/GIT_COMMITS.txt         | 1 +
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt | 2 +-
+ 3 files changed, 9 insertions(+), 1 deletion(-)
+
+2014-11-24  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.30-19-gdf004 - Update RT and git commit reports
+ src/ChangeLog                                  | 38 ++++++++++++++++++++++++++
+ src/build/release_docs/GIT_COMMITS.txt         |  2 ++
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt |  2 +-
+ 3 files changed, 41 insertions(+), 1 deletion(-)
+
+2014-11-24  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'release/4.31' into develop
+2014-11-24  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/basic_features' into release/4.31
+2014-11-24  Gemma Barson  <gb10 at sanger.ac.uk>
+ Update blixem usage info to reflect support for basic types
+ src/blixemApp/blxmain.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+2014-11-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Improve display of exons and basic features in the detail view
+ src/blixemApp/sequencecellrenderer.c | 51 ++++++++++--------------------------
+ 1 file changed, 14 insertions(+), 37 deletions(-)
+
+2014-11-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Implement basic feature type properly
+ src/blixemApp/blxview.c              |   2 +-
+ src/blixemApp/blxwindow.c            |   2 +-
+ src/blixemApp/detailview.c           |  17 +++---
+ src/blixemApp/detailviewtree.c       |  20 +++++--
+ src/blixemApp/exonview.c             |   6 +-
+ src/blixemApp/exonview.h             |   6 +-
+ src/blixemApp/sequencecellrenderer.c |  40 ++++++++-----
+ src/dotterApp/seqtoolsExonView.c     |   6 +-
+ src/seqtoolsUtils/blxmsp.c           | 112 ++++++++++++++++++++++-------------
+ src/seqtoolsUtils/blxmsp.h           |  11 ++--
+ 10 files changed, 136 insertions(+), 86 deletions(-)
+
+2014-11-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Quick hack to support basic feature types using exon code
+ src/seqtoolsUtils/blxGff3Parser.c | 4 +++-
+ src/seqtoolsUtils/blxmsp.h        | 5 +++++
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+2014-11-24  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/basic_features' into develop
+2014-11-24  Gemma Barson  <gb10 at sanger.ac.uk>
+ Update blixem usage info to reflect support for basic types
+ src/blixemApp/blxmain.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+2014-11-24  Gemma Barson  <gb10 at sanger.ac.uk>
+ Update release notes
+ src/doc/User_doc/release_notes.html | 15 +++++++++++++++
+ 1 file changed, 15 insertions(+)
+
+2014-11-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/basic_features' into develop
+2014-11-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Improve display of exons and basic features in the detail view
+ src/blixemApp/sequencecellrenderer.c | 51 ++++++++++--------------------------
+ 1 file changed, 14 insertions(+), 37 deletions(-)
+
+2014-11-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Implement basic feature type properly
+ src/blixemApp/blxview.c              |   2 +-
+ src/blixemApp/blxwindow.c            |   2 +-
+ src/blixemApp/detailview.c           |  17 +++---
+ src/blixemApp/detailviewtree.c       |  20 +++++--
+ src/blixemApp/exonview.c             |   6 +-
+ src/blixemApp/exonview.h             |   6 +-
+ src/blixemApp/sequencecellrenderer.c |  40 ++++++++-----
+ src/dotterApp/seqtoolsExonView.c     |   6 +-
+ src/seqtoolsUtils/blxmsp.c           | 112 ++++++++++++++++++++++-------------
+ src/seqtoolsUtils/blxmsp.h           |  11 ++--
+ 10 files changed, 136 insertions(+), 86 deletions(-)
+
+2014-11-21  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.30-13-g3ab2 - Update RT and git commit reports
+ src/ChangeLog                          | 7 +++++++
+ src/build/release_docs/GIT_COMMITS.txt | 1 +
+ 2 files changed, 8 insertions(+)
+
+2014-11-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Quick hack to support basic feature types using exon code
+ src/seqtoolsUtils/blxGff3Parser.c | 4 +++-
+ src/seqtoolsUtils/blxmsp.h        | 5 +++++
+ 2 files changed, 8 insertions(+), 1 deletion(-)
+
+2014-11-21  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.30-12-g5b4f - Update RT and git commit reports
+ src/ChangeLog                                  | 7 +++++++
+ src/build/release_docs/GIT_COMMITS.txt         | 1 +
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt | 2 +-
+ 3 files changed, 9 insertions(+), 1 deletion(-)
+
+2014-11-19  Ed Griffiths  <edgrif at sanger.ac.uk>
+ update INSTALL files to match Gemma's web writeups.
+ src/INSTALL         | 436 +++++++++++++++++++++++++++++++++++++++++++---------
+ src/INSTALL.linux   |  60 ++++++++
+ src/INSTALL.mac     |  51 ++++++
+ src/INSTALL.windows |  81 +++++-----
+ 4 files changed, 513 insertions(+), 115 deletions(-)
+
+2014-11-17  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.30-11-g7c4ef - Update RT and git commit reports
+ src/ChangeLog                                  | 16 +++++++++++++
+ src/build/release_docs/GIT_COMMITS.txt         |  3 +++
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt | 32 +++++++++++++++++++++++++-
+ 3 files changed, 50 insertions(+), 1 deletion(-)
+
+2014-11-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'release/4.31' into develop
+2014-11-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Update release notes
+ src/doc/User_doc/release_notes.html | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+2014-11-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/GUI_improvements' into develop
+2014-11-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Add tooltips to greyramp tool buttons
+ src/dotterApp/greyramptool.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+2014-11-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Add maximise button for greyramp tool
+ src/dotterApp/greyramptool.c | 31 ++++++++++++++++++++++++-------
+ 1 file changed, 24 insertions(+), 7 deletions(-)
+
+2014-11-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix keyboard shortcuts on separate tools
+ src/dotterApp/dotter.c | 121 +++++++++++++++++++++++++++----------------------
+ 1 file changed, 66 insertions(+), 55 deletions(-)
+
+2014-11-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Move tool menus to main window
+ src/dotterApp/alignmenttool.c | 297 +++++++++---------------------------------
+ src/dotterApp/dotter.c        | 185 ++++++++++++++++++++++----
+ src/dotterApp/dotter_.h       |  10 +-
+ src/dotterApp/greyramptool.c  |  76 +----------
+ 4 files changed, 235 insertions(+), 333 deletions(-)
+
+2014-11-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Add right click option to maximise greyramp tool
+ src/dotterApp/alignmenttool.c |  4 ++--
+ src/dotterApp/dotter.c        | 34 ++++++++++++++++++++++++++++++++--
+ src/dotterApp/greyramptool.c  |  8 ++++----
+ 3 files changed, 38 insertions(+), 8 deletions(-)
+
+2014-11-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Trivial menu name change
+ src/dotterApp/alignmenttool.c | 2 +-
+ src/dotterApp/greyramptool.c  | 5 ++++-
+ 2 files changed, 5 insertions(+), 2 deletions(-)
+
+2014-11-13  Steve Miller  <sm23 at sanger.ac.uk>
+ update of release notes for v. 4.31
+ src/doc/User_doc/release_notes.html | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+2014-11-12  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.30-8-g588a - Update RT and git commit reports
+ src/ChangeLog                          | 7 +++++++
+ src/build/release_docs/GIT_COMMITS.txt | 1 +
+ 2 files changed, 8 insertions(+)
+
+2014-11-12  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.30-7-g8cf9 - Update RT and git commit reports
+ src/ChangeLog                                  | 79 +++++++++-----------------
+ src/build/release_docs/GIT_COMMITS.txt         | 20 +++----
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt |  2 +-
+ 3 files changed, 36 insertions(+), 65 deletions(-)
+
+2014-11-03  Steve Miller  <sm23 at sanger.ac.uk>
+ Merge branch 'production' into develop
+2014-11-03  Steve Miller  <sm23 at sanger.ac.uk>
+ Merge branch 'release/4.30' into develop
+2014-11-03  Steve Miller  <sm23 at sanger.ac.uk>
+ Merge branch 'release/4.30' into production
+2014-10-31  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.29-9-gbec7 - Update RT and git commit reports
+ src/ChangeLog                                  | 7 +++++++
+ src/build/release_docs/GIT_COMMITS.txt         | 1 +
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt | 2 +-
+ 3 files changed, 9 insertions(+), 1 deletion(-)
+
+2014-10-30  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.29-8-ge868 - Update RT and git commit reports
+ src/ChangeLog                                  | 7 +++++++
+ src/build/release_docs/GIT_COMMITS.txt         | 1 +
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt | 2 +-
+ 3 files changed, 9 insertions(+), 1 deletion(-)
+
+2014-10-29  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.29-7-gcbf0 - Update RT and git commit reports
+ src/ChangeLog                                  | 7 +++++++
+ src/build/release_docs/GIT_COMMITS.txt         | 1 +
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt | 2 +-
+ 3 files changed, 9 insertions(+), 1 deletion(-)
+
+2014-10-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix typo in configure.ac causing it to fail
+ src/configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2014-10-27  Gemma Barson  <gb10 at sanger.ac.uk>
+ Update blixem quick start guide with minor colour change
+ src/doc/User_doc/blixem_quick_start.html | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+2014-10-23  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.29-6-gf0e18 - Update RT and git commit reports
+ src/ChangeLog                                  | 12 ++++++++++++
+ src/build/release_docs/GIT_COMMITS.txt         |  2 ++
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt |  2 +-
+ 3 files changed, 15 insertions(+), 1 deletion(-)
+
+2014-10-22  Gemma Barson  <gb10 at sanger.ac.uk>
+ Make sqlite optional
+ src/configure.ac | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+2014-10-22  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix autoconf error on cygwin
+ src/Makefile.am | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+2014-10-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Build: remove obsolete hack to pkg-config path
+ src/runconfig.sh | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+2014-10-17  Steve Miller  <sm23 at sanger.ac.uk>
+ creation of release notes after build
+ src/doc/User_doc/release_notes.html | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+2014-10-17  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.29-4-gd795 - Update RT and git commit reports
+ src/ChangeLog                                  | 234 +++----------------------
+ src/build/release_docs/GIT_COMMITS.txt         |  21 +--
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt |  26 +--
+ 3 files changed, 28 insertions(+), 253 deletions(-)
+
+2014-10-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix potential crash with accessing null value
+ src/blixemApp/detailviewtree.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2014-10-02  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix infinite loop loading features file
+ src/blixemApp/blxview.c           | 22 ++++++++++++++++------
+ src/blixemApp/blxwindow.c         |  6 +++++-
+ src/seqtoolsUtils/blxGff3Parser.c |  3 ++-
+ src/seqtoolsUtils/blxmsp.c        | 34 ++++++++++++++++++++++------------
+ src/seqtoolsUtils/blxmsp.h        |  4 ++--
+ src/seqtoolsUtils/blxparser.c     | 12 ++++++------
+ 6 files changed, 53 insertions(+), 28 deletions(-)
+
+2014-10-01  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix a bug reading files with carriage return chars
+ src/belvuApp/belvu.c | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+2014-09-30  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'production' into develop
+2014-09-30  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'release/4.29' into production
+2014-09-18  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.28-41-ga22f - Update RT and git commit reports
+ src/ChangeLog                                  | 12 ++++++++++++
+ src/build/release_docs/GIT_COMMITS.txt         |  3 +++
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt |  2 +-
+ 3 files changed, 16 insertions(+), 1 deletion(-)
+
+2014-09-15  Gemma Barson  <gb10 at sanger.ac.uk>
+ Update release notes for 4.29
+ src/doc/User_doc/release_notes.html | 30 ++++++++++++++++++++++++++++++
+ 1 file changed, 30 insertions(+)
+
+2014-09-15  zmap  <zmap at sanger.ac.uk>
+ SeqTools version 4.28-39-gf6e3 - Update RT and git commit reports
+ src/ChangeLog                                  | 200 +++++++++++++++++++++++++
+ src/build/release_docs/GIT_COMMITS.txt         |  19 +++
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt |  30 ++++
+ 3 files changed, 249 insertions(+)
+
+2014-09-15  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/dotter_transcript' into develop
+2014-09-15  Gemma Barson  <gb10 at sanger.ac.uk>
+ Dotter ref vs itself now uses big picture range
+ src/blixemApp/blxdotter.c | 42 +-----------------------------------------
+ 1 file changed, 1 insertion(+), 41 deletions(-)
+
+2014-09-15  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix minor issues with dotter dialog updates
+ src/blixemApp/blxdotter.c | 85 ++++++++++++++++++++++++-----------------------
+ 1 file changed, 44 insertions(+), 41 deletions(-)
+
+2014-09-15  Gemma Barson  <gb10 at sanger.ac.uk>
+ Tidying: reorganise file
+ src/blixemApp/blxdotter.c | 1238 +++++++++++++++++++++++----------------------
+ 1 file changed, 627 insertions(+), 611 deletions(-)
+
+2014-09-15  Gemma Barson  <gb10 at sanger.ac.uk>
+ Tidying and improvements to dotter dialog
+ src/blixemApp/blixem_.h   |   4 +-
+ src/blixemApp/blxdotter.c | 350 ++++++++++++++++++++++++----------------------
+ src/blixemApp/blxwindow.c |   2 +-
+ 3 files changed, 189 insertions(+), 167 deletions(-)
+
+2014-09-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/dotter_transcript' into develop
+2014-09-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ don't reset dialog page when select seq
+ src/blixemApp/blxdotter.c | 26 +++++++++++++++++++++++++-
+ 1 file changed, 25 insertions(+), 1 deletion(-)
+
+2014-09-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Don't reset to cached values when selecting sequence
+ src/blixemApp/blxdotter.c | 49 +++++++++++++++++++++++++----------------------
+ 1 file changed, 26 insertions(+), 23 deletions(-)
+
+2014-09-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Minor improvements to tooltips and window size
+ src/blixemApp/blxdotter.c | 31 ++++++++++++++++++++++++++-----
+ 1 file changed, 26 insertions(+), 5 deletions(-)
+
+2014-09-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/minimise_greyramp' into develop
+2014-09-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Minimise greyramp tool by default
+ src/dotterApp/dotter.c | 24 +++++++++++++++++++++---
+ 1 file changed, 21 insertions(+), 3 deletions(-)
+
+2014-09-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ WIP: minimised greyramp tool
+ src/dotterApp/dotter.c       |  12 ++-
+ src/dotterApp/dotter_.h      |   1 +
+ src/dotterApp/greyramptool.c | 175 +++++++++++++++++++++++++++++++++++++------
+ 3 files changed, 162 insertions(+), 26 deletions(-)
+
+2014-09-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/dotter_transcript' into develop
+2014-09-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix bugs with sending transcript to dotter
+ src/seqtoolsUtils/blxmsp.c | 29 ++++++++++++++++++++++++-----
+ 1 file changed, 24 insertions(+), 5 deletions(-)
+
+2014-09-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Add option to sleep dotter on startup
+ src/blixemApp/blixem_.h   |  1 +
+ src/blixemApp/blxdotter.c | 53 +++++++++++++++++++++++++++++++++++++++++------
+ src/blixemApp/blxdotter.h |  2 +-
+ src/blixemApp/blxview.c   |  2 +-
+ src/blixemApp/blxwindow.c |  1 +
+ 5 files changed, 51 insertions(+), 8 deletions(-)
+
+2014-09-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Add sleep argument to dotter
+ src/dotterApp/dotterMain.c | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+2014-09-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix bug sending transcript to dotter
+ src/seqtoolsUtils/blxmsp.c | 10 +++++++---
+ 1 file changed, 7 insertions(+), 3 deletions(-)
+
+2014-09-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ WIP: pass transcript to dotter
+ src/blixemApp/blxdotter.c  | 42 +++++++++++++++++++------
+ src/seqtoolsUtils/blxmsp.c | 77 +++++++++++++++++++++++++++++++++++++++++++---
+ src/seqtoolsUtils/blxmsp.h |  1 +
+ 3 files changed, 106 insertions(+), 14 deletions(-)
+
+2014-09-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/dotter_transcript' into develop
+2014-09-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix bug with caching ref seq type to dotter against
+ src/blixemApp/blxdotter.c | 65 +++++++++++++++++++++++------------------------
+ src/blixemApp/blxdotter.h |  4 +--
+ src/blixemApp/blxview.c   |  2 +-
+ 3 files changed, 35 insertions(+), 36 deletions(-)
+
+2014-09-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Update dotter title with transcript name
+ src/blixemApp/blxdotter.c | 92 +++++++++++++++++++++++++++++++++--------------
+ src/blixemApp/blxwindow.c | 88 ++++++++++++++++++++++++++++-----------------
+ src/blixemApp/blxwindow.h |  2 ++
+ 3 files changed, 122 insertions(+), 60 deletions(-)
+
+2014-09-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix minor bug with cached dotter type not updating
+ src/blixemApp/blxdotter.c | 22 ++++++++++++----------
+ 1 file changed, 12 insertions(+), 10 deletions(-)
+
+2014-09-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Set correct dotter title for transcript
+ src/blixemApp/blxdotter.c | 31 ++++++++++++++++++++++---------
+ 1 file changed, 22 insertions(+), 9 deletions(-)
+
+2014-09-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Cache dotter-transcript setting
+ src/blixemApp/blixem_.h   | 10 ++++++-
+ src/blixemApp/blxdotter.c | 73 ++++++++++++++++++++++++++++++-----------------
+ src/blixemApp/blxwindow.c |  8 +-----
+ src/blixemApp/blxwindow.h |  1 -
+ 4 files changed, 57 insertions(+), 35 deletions(-)
+
+2014-09-11  Gemma Barson  <gb10 at sanger.ac.uk>
+ WIP: add facility to dotter vs transcript sequence
+ src/blixemApp/blxdotter.c     | 166 ++++++++++++++++++++++++++++--------------
+ src/blixemApp/blxdotter.h     |   2 +-
+ src/blixemApp/blxview.c       |   2 +-
+ src/blixemApp/blxwindow.c     |  56 ++++++++++++++
+ src/blixemApp/blxwindow.h     |   2 +
+ src/seqtoolsUtils/blxmsp.c    |  65 +++++++++++++++++
+ src/seqtoolsUtils/blxmsp.h    |   2 +
+ src/seqtoolsUtils/utilities.h |   1 +
+ 8 files changed, 241 insertions(+), 55 deletions(-)
+
+2014-09-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Allow blixem to open on a fasta file only
+ src/blixemApp/blxmain.c | 179 ++++++++++++++++++++++++++++++------------------
+ 1 file changed, 111 insertions(+), 68 deletions(-)
+
+2014-09-04  Gemma Barson  <gb10 at sanger.ac.uk>
+ Remove spurious warning when dottering otf
+ src/blixemApp/blxdotter.c | 16 ----------------
+ 1 file changed, 16 deletions(-)
+
+2014-09-04  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/dotter_otf' into develop
+2014-09-04  Gemma Barson  <gb10 at sanger.ac.uk>
+ Tidy layout of dotter dialog
+ src/blixemApp/blxdotter.c | 13 +++++++------
+ 1 file changed, 7 insertions(+), 6 deletions(-)
+
+2014-09-04  Gemma Barson  <gb10 at sanger.ac.uk>
+ Update dotter dialog title when toggle match type
+ src/blixemApp/blxdotter.c | 123 ++++++++++++++++++++++++++++------------------
+ 1 file changed, 76 insertions(+), 47 deletions(-)
+
+2014-09-04  Gemma Barson  <gb10 at sanger.ac.uk>
+ Set dotter dialog title for on-the-fly dotter
+ src/blixemApp/blxdotter.c | 199 +++++++++++++++++++++++++++++++++-------------
+ 1 file changed, 143 insertions(+), 56 deletions(-)
+
+2014-09-04  Gemma Barson  <gb10 at sanger.ac.uk>
+ Save previously-used pasted sequence
+ src/blixemApp/blixem_.h   |  1 +
+ src/blixemApp/blxdotter.c | 42 +++++++++++++++++++++++++++++++++++++++---
+ src/blixemApp/blxwindow.c |  1 +
+ 3 files changed, 41 insertions(+), 3 deletions(-)
+
+2014-09-04  Gemma Barson  <gb10 at sanger.ac.uk>
+ Allow user to paste fasta or raw sequence in dotter dialog
+ src/blixemApp/blxdotter.c | 214 ++++++++++++++++++++++++++++++++++------------
+ 1 file changed, 158 insertions(+), 56 deletions(-)
+
+2014-09-04  Gemma Barson  <gb10 at sanger.ac.uk>
+ Allow user to paste raw sequence to send to dotter
+ src/blixemApp/blixem_.h   |  12 +-
+ src/blixemApp/blxdotter.c | 540 ++++++++++++++++++++++++++++++++++------------
+ src/blixemApp/blxdotter.h |   3 +-
+ src/blixemApp/blxview.c   |   3 +-
+ src/blixemApp/blxwindow.c |   2 +-
+ 5 files changed, 419 insertions(+), 141 deletions(-)
+
+2014-09-02  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix a bug with tree bootstrapping in Belvu
+ src/belvuApp/belvu.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+2014-09-01  Gemma Barson  <gb10 at sanger.ac.uk>
+ Add RT and git notes files
+ src/build/release_docs/GIT_COMMITS.txt         | 0
+ src/build/release_docs/RT_TICKETS_RESOLVED.txt | 0
+ 2 files changed, 0 insertions(+), 0 deletions(-)
+
+2014-08-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Minor updates to windows installation instructions
+ src/INSTALL.windows | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+2014-07-28  Ed Griffiths  <edgrif at sanger.ac.uk>
+ Merge branch 'production' into develop
+2014-07-28  Ed Griffiths  <edgrif at sanger.ac.uk>
+ Merge branch 'release/4.28' into develop
+2014-07-28  Ed Griffiths  <edgrif at sanger.ac.uk>
+ Merge branch 'release/4.28' into production
+2014-07-11  Ed Griffiths  <edgrif at sanger.ac.uk>
+ "add the original match sequence name."
+ src/blixemApp/blxFetch.c          | 11 ++++++++++
+ src/seqtoolsUtils/blxGff3Parser.c | 18 ++++++++++------
+ src/seqtoolsUtils/blxmsp.c        | 43 +++++++++++++++++++++++++++++++--------
+ src/seqtoolsUtils/blxmsp.h        | 24 +++++++++++++++-------
+ src/seqtoolsUtils/blxparser.c     | 14 ++++++-------
+ 5 files changed, 81 insertions(+), 29 deletions(-)
+
+2014-07-11  Ed Griffiths  <edgrif at sanger.ac.uk>
+ "add -w flag for sleeping after command parsing."
+ src/blixemApp/blxmain.c | 10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+2014-07-02  Gemma Barson  <gb10 at sanger.ac.uk>
+ Features now use id as name if Name tag not given
+ src/seqtoolsUtils/blxmsp.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2014-06-30  Gemma Barson  <gb10 at sanger.ac.uk>
+ Present the blixem window as soon as you drag over it
+ src/blixemApp/blxwindow.c | 14 +++++++++++++-
+ 1 file changed, 13 insertions(+), 1 deletion(-)
+
+2014-06-30  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix bug where alignment tool coord is not in correct position
+ src/dotterApp/alignmenttool.c | 11 +++++++++--
+ 1 file changed, 9 insertions(+), 2 deletions(-)
+
+2014-06-27  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'production' into develop
+2014-06-27  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'release/4.27' into production
+2014-06-25  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix simple sorting bug which caused refiltering to stop working
+ src/seqtoolsUtils/blxmsp.c | 19 +++++++++++++------
+ 1 file changed, 13 insertions(+), 6 deletions(-)
+
+2014-06-23  Gemma Barson  <gb10 at sanger.ac.uk>
+ Improve the way that dotter clears up the tool windows
+ src/dotterApp/dotter.c | 41 +++++++++++++++++++++--------------------
+ 1 file changed, 21 insertions(+), 20 deletions(-)
+
+2014-06-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'release/4.27' into develop
+2014-06-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix potential double destroy of tool windows
+ src/blixemApp/blxmain.c    |  3 ++-
+ src/dotterApp/dotter.c     | 12 ++++++------
+ src/dotterApp/dotterMain.c |  3 ++-
+ 3 files changed, 10 insertions(+), 8 deletions(-)
+
+2014-06-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Avoid crash if feature name is not set
+ src/blixemApp/detailviewtree.c | 3 +++
+ src/seqtoolsUtils/blxmsp.c     | 2 +-
+ 2 files changed, 4 insertions(+), 1 deletion(-)
+
+2014-06-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/paper' into develop
+2014-06-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Scale images so looks ok at 170mm width
+ src/doc/Publications/bmc_paper/fig1_blixem.png     | Bin 233664 -> 103031 bytes
+ src/doc/Publications/bmc_paper/fig2_dotter.png     | Bin 82269 -> 63536 bytes
+ .../bmc_paper/fig3_belvu_conservation.png          | Bin 131393 -> 122860 bytes
+ .../Publications/bmc_paper/fig4_belvu_residues.png | Bin 122186 -> 113290 bytes
+ src/doc/Publications/bmc_paper/fig5_belvu_plot.png | Bin 24498 -> 28759 bytes
+ src/doc/Publications/bmc_paper/fig6_belvu_tree.png | Bin 86198 -> 77644 bytes
+ 6 files changed, 0 insertions(+), 0 deletions(-)
+
+2014-06-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Add cover letter
+ src/doc/Publications/bmc_paper/cover_letter.txt | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+2014-06-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Add competing interests
+ src/doc/Publications/bmc_paper/seqtools.tex | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+2014-06-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Update figures and seqtools version
+ src/doc/Publications/bmc_paper/fig1_blixem.jpg | Bin 687871 -> 0 bytes
+ src/doc/Publications/bmc_paper/fig1_blixem.png | Bin 0 -> 233664 bytes
+ src/doc/Publications/bmc_paper/fig2_dotter.jpg | Bin 358328 -> 0 bytes
+ src/doc/Publications/bmc_paper/fig2_dotter.png | Bin 0 -> 82269 bytes
+ src/doc/Publications/bmc_paper/seqtools.tex    |   4 ++--
+ 5 files changed, 2 insertions(+), 2 deletions(-)
+
+2014-06-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ First draft of BMC paper
+ .gitignore                                         |    5 +
+ src/doc/Publications/bmc_paper/bmc_article.bst     | 1880 ++++++++++++++++++++
+ src/doc/Publications/bmc_paper/bmc_article.cls     |  138 ++
+ src/doc/Publications/bmc_paper/fig1_blixem.jpg     |  Bin 0 -> 687871 bytes
+ src/doc/Publications/bmc_paper/fig2_dotter.jpg     |  Bin 0 -> 358328 bytes
+ .../bmc_paper/fig3_belvu_conservation.png          |  Bin 0 -> 131393 bytes
+ .../Publications/bmc_paper/fig4_belvu_residues.png |  Bin 0 -> 122186 bytes
+ src/doc/Publications/bmc_paper/fig5_belvu_plot.png |  Bin 0 -> 24498 bytes
+ src/doc/Publications/bmc_paper/fig6_belvu_tree.png |  Bin 0 -> 86198 bytes
+ src/doc/Publications/bmc_paper/seqtools.bib        |  386 ++++
+ src/doc/Publications/bmc_paper/seqtools.tex        |  436 +++++
+ 11 files changed, 2845 insertions(+)
+
+2014-06-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Support old-style GFF from ZMap with only one CDS object
+ src/seqtoolsUtils/blxmsp.c | 204 +++++++++++++++++++++++++++++++--------------
+ 1 file changed, 142 insertions(+), 62 deletions(-)
+
+2014-06-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Update release notes
+ src/doc/User_doc/release_notes.html | 9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
+
+2014-06-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Dotter window layout now changes to maximise space
+ src/dotterApp/dotter.c | 76 +++++++++++++++++++++++++++++++++-----------------
+ 1 file changed, 51 insertions(+), 25 deletions(-)
+
+2014-06-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Improve layout of docked windows
+ src/dotterApp/alignmenttool.c | 10 +++-------
+ src/dotterApp/dotter.c        | 34 ++++++++++++++++++++++------------
+ src/dotterApp/greyramptool.c  | 43 ++++++++++++++++++++++++++++---------------
+ 3 files changed, 53 insertions(+), 34 deletions(-)
+
+2014-06-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix off-by-one bug with dotter coords when length is even
+ src/dotterApp/alignmenttool.c | 26 ++++++++++++++++++++++----
+ 1 file changed, 22 insertions(+), 4 deletions(-)
+
+2014-06-06  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/dock_windows' into develop
+2014-06-06  Gemma Barson  <gb10 at sanger.ac.uk>
+ More fixes for toggling windows. Also tidy frames
+ src/dotterApp/alignmenttool.c | 48 +++++++++++++++++++++++++++++--------------
+ src/dotterApp/greyramptool.c  | 32 ++++++++++++++++++++---------
+ 2 files changed, 55 insertions(+), 25 deletions(-)
+
+2014-06-06  Gemma Barson  <gb10 at sanger.ac.uk>
+ Make sure menu is toggled when closing tools
+ src/dotterApp/alignmenttool.c | 21 ++------------
+ src/dotterApp/dotter.c        | 67 ++++++++++++++++++-------------------------
+ src/dotterApp/dotter_.h       |  3 ++
+ src/dotterApp/greyramptool.c  | 23 +++------------
+ 4 files changed, 38 insertions(+), 76 deletions(-)
+
+2014-06-06  Gemma Barson  <gb10 at sanger.ac.uk>
+ Improvements to toggling dock/show/hide operations
+ src/dotterApp/dotter.c        | 131 ++++++++++++++++++++++++++----------------
+ src/seqtoolsUtils/utilities.c |  25 ++++++++
+ src/seqtoolsUtils/utilities.h |   1 +
+ 3 files changed, 109 insertions(+), 48 deletions(-)
+
+2014-06-06  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix menu callbacks for alignment and greyramp tools
+ src/dotterApp/alignmenttool.c | 55 ++++++++++++++++++++++++++++++-------------
+ src/dotterApp/dotter_.h       |  4 ++--
+ src/dotterApp/greyramptool.c  | 39 +++++++++++++++++++++++-------
+ 3 files changed, 70 insertions(+), 28 deletions(-)
+
+2014-06-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Remove obsolete option to set alignment length
+ src/dotterApp/alignmenttool.c | 92 -------------------------------------------
+ 1 file changed, 92 deletions(-)
+
+2014-06-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Make sure menu toggle status keeps up to date with key press
+ src/dotterApp/alignmenttool.c |  6 +++---
+ src/dotterApp/dotter.c        | 25 ++++++++++++++++++-------
+ src/dotterApp/greyramptool.c  |  6 +++---
+ 3 files changed, 24 insertions(+), 13 deletions(-)
+
+2014-06-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Alignment tool now has dynamic width
+ src/dotterApp/alignmenttool.c | 18 ++++++++++--------
+ src/dotterApp/dotter.c        |  1 +
+ src/dotterApp/dotter_.h       |  1 +
+ 3 files changed, 12 insertions(+), 8 deletions(-)
+
+2014-06-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Keyboard shortcut for docking windows
+ src/dotterApp/dotter.c | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+2014-06-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Docking of windows implemented
+ src/dotterApp/alignmenttool.c |  10 +--
+ src/dotterApp/dotter.c        | 142 ++++++++++++++++++++++++++++++++----------
+ src/dotterApp/greyramptool.c  |  19 +++---
+ 3 files changed, 119 insertions(+), 52 deletions(-)
+
+2014-06-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Reorganise tool widgets in preparation for being dockable
+ src/dotterApp/alignmenttool.c | 44 ++++++++++++++++++++++++----------
+ src/dotterApp/dotter.c        | 55 +++++++++++++++++++++++++++++--------------
+ src/dotterApp/dotter_.h       |  4 ++--
+ src/dotterApp/greyramptool.c  | 41 ++++++++++++++++++++++++--------
+ 4 files changed, 101 insertions(+), 43 deletions(-)
+
+2014-06-02  Gemma Barson  <gb10 at sanger.ac.uk>
+ Small change to debug output
+ src/blixemApp/blxwindow.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+2014-05-29  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/gff' into develop
+2014-05-29  Gemma Barson  <gb10 at sanger.ac.uk>
+ Tidying
+ src/blixemApp/blixem_.h   | 2 +-
+ src/blixemApp/blxFetch.c  | 2 +-
+ src/blixemApp/blxview.c   | 6 +++---
+ src/blixemApp/blxwindow.c | 4 ++--
+ 4 files changed, 7 insertions(+), 7 deletions(-)
+
+2014-05-29  Gemma Barson  <gb10 at sanger.ac.uk>
+ Tidying
+ src/blixemApp/blixem_.h   |  6 +++---
+ src/blixemApp/blxFetch.c  | 12 ++++++------
+ src/blixemApp/blxview.c   |  2 +-
+ src/blixemApp/blxwindow.c |  2 +-
+ 4 files changed, 11 insertions(+), 11 deletions(-)
+
+2014-05-29  Gemma Barson  <gb10 at sanger.ac.uk>
+ Do range checking on imported file
+ src/blixemApp/blixem_.h           |  6 +++---
+ src/blixemApp/blxFetch.c          | 16 +++++++++-------
+ src/blixemApp/blxmain.c           |  8 +-------
+ src/blixemApp/blxview.c           | 17 +++++++++++++++--
+ src/blixemApp/blxwindow.c         | 10 ++++++----
+ src/seqtoolsUtils/blxGff3Parser.c | 40 +++++++++++++++++++++++++++++++--------
+ src/seqtoolsUtils/blxGff3Parser.h |  3 ++-
+ src/seqtoolsUtils/blxparser.c     | 10 +++++++++-
+ 8 files changed, 77 insertions(+), 33 deletions(-)
+
+2014-05-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/drag_drop' into develop
+2014-05-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Reset GFF ID lookup table when finished importing a file
+ src/blixemApp/blixem_.h           | 11 ++---
+ src/blixemApp/blxFetch.c          | 23 +++++++---
+ src/blixemApp/blxmain.c           | 11 +++--
+ src/blixemApp/blxview.c           | 12 +++---
+ src/blixemApp/blxwindow.c         | 23 +++++++---
+ src/dotterApp/dotterMain.c        |  7 ++-
+ src/seqtoolsUtils/blxGff3Parser.c |  9 ++--
+ src/seqtoolsUtils/blxGff3Parser.h |  3 +-
+ src/seqtoolsUtils/blxmsp.c        | 89 +++++++++++++++++++++++++++------------
+ src/seqtoolsUtils/blxmsp.h        |  6 +--
+ src/seqtoolsUtils/blxparser.c     | 76 ++++++++++++++++++---------------
+ src/seqtoolsUtils/blxparser.h     |  4 +-
+ 12 files changed, 174 insertions(+), 100 deletions(-)
+
+2014-05-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Report how many features were imported by drag-and-drop
+ src/blixemApp/blxview.c    |  9 +++------
+ src/blixemApp/blxwindow.c  | 13 ++++++++++++-
+ src/seqtoolsUtils/blxmsp.c |  2 +-
+ 3 files changed, 16 insertions(+), 8 deletions(-)
+
+2014-05-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Support exons with multiple parents and mRNAs with multiple CDSs in the GFF
+ src/seqtoolsUtils/blxGff3Parser.c |  19 ++-
+ src/seqtoolsUtils/blxmsp.c        | 251 ++++++++++++++++++++++++++++++++++----
+ src/seqtoolsUtils/blxmsp.h        |   3 +-
+ 3 files changed, 244 insertions(+), 29 deletions(-)
+
+2014-05-23  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix potential use of null source pointer
+ src/seqtoolsUtils/blxGff3Parser.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2014-05-23  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix bug with handling exons with multiple parents
+ src/seqtoolsUtils/blxmsp.c | 37 +++++++++++++++++++++++++++++--------
+ 1 file changed, 29 insertions(+), 8 deletions(-)
+
+2014-05-22  Gemma Barson  <gb10 at sanger.ac.uk>
+ GFF parser now supports multiple IDs in Parent tag
+ src/seqtoolsUtils/blxmsp.c | 68 ++++++++++++++++++++++++++++++++++++++--------
+ 1 file changed, 56 insertions(+), 12 deletions(-)
+
+2014-05-22  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix bug constructing transcripts when exons and introns both given in file
+ src/seqtoolsUtils/blxmsp.c | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+2014-05-22  Gemma Barson  <gb10 at sanger.ac.uk>
+ Add SNV to supported types
+ src/seqtoolsUtils/blxGff3Parser.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+2014-05-22  Gemma Barson  <gb10 at sanger.ac.uk>
+ Recalculate grid range when importing features
+ src/blixemApp/blxwindow.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+2014-05-22  Gemma Barson  <gb10 at sanger.ac.uk>
+ Tidying
+ src/blixemApp/bigpicture.c | 61 ++++++++++++++++++++++++++++------------------
+ src/blixemApp/blxview.c    |  9 +++++++
+ 2 files changed, 46 insertions(+), 24 deletions(-)
+
+2014-05-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix bugs parsing acedb-style gaps array
+ src/blixemApp/blxwindow.c         |  2 +-
+ src/seqtoolsUtils/blxGff3Parser.c | 27 +++++++++++++++++++++++++--
+ src/seqtoolsUtils/blxparser.c     |  2 +-
+ 3 files changed, 27 insertions(+), 4 deletions(-)
+
+2014-05-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Rename BLXSEQ_INVALID to BLXSEQ_NONE
+ src/blixemApp/blxmain.c           | 10 +++++-----
+ src/blixemApp/blxview.c           |  4 ++--
+ src/blixemApp/blxwindow.c         |  2 +-
+ src/dotterApp/dotterMain.c        | 12 ++++++------
+ src/seqtoolsUtils/blxGff3Parser.c |  6 +++---
+ src/seqtoolsUtils/blxparser.c     |  2 +-
+ src/seqtoolsUtils/utilities.h     |  2 +-
+ 7 files changed, 19 insertions(+), 19 deletions(-)
+
+2014-05-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Support legacy acedb-style gaps string in GFF for backwards compatibility
+ src/seqtoolsUtils/blxGff3Parser.c | 24 ++++++++++++++++++++----
+ src/seqtoolsUtils/blxparser.c     |  9 ++++-----
+ src/seqtoolsUtils/blxparser.h     |  1 +
+ 3 files changed, 25 insertions(+), 9 deletions(-)
+
+2014-05-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Filter matches from GFF by dna/protein mode
+ src/blixemApp/blxmain.c           |  7 ++++++-
+ src/dotterApp/dotterMain.c        |  2 +-
+ src/seqtoolsUtils/blxGff3Parser.c | 14 +++++++++-----
+ src/seqtoolsUtils/blxGff3Parser.h |  2 +-
+ 4 files changed, 17 insertions(+), 8 deletions(-)
+
+2014-05-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Limit the number of warnings issue from the GFF parser
+ src/seqtoolsUtils/blxGff3Parser.c | 21 +++++++++++++++++++--
+ 1 file changed, 19 insertions(+), 2 deletions(-)
+
+2014-05-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Debug
+ src/dotterApp/dotter.c     | 4 ++--
+ src/seqtoolsUtils/blxmsp.c | 4 ++--
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+2014-05-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Tidying
+ src/blixemApp/blxwindow.c  | 145 ++++++++++++++++++++++-----------------------
+ src/blixemApp/detailview.c |  33 ++++++-----
+ 2 files changed, 87 insertions(+), 91 deletions(-)
+
+2014-05-15  Gemma Barson  <gb10 at sanger.ac.uk>
+ Disable splice-site highlighting in dotter for protein seqs
+ src/dotterApp/alignmenttool.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+2014-05-15  Gemma Barson  <gb10 at sanger.ac.uk>
+ Update release notes for 4.27
+ src/doc/User_doc/release_notes.html | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+2014-05-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Handle receiving of GFF file contents from drag-drop
+ src/blixemApp/blixem_.h        |   6 +-
+ src/blixemApp/blxFetch.c       |   6 +-
+ src/blixemApp/blxmain.c        |   2 +-
+ src/blixemApp/blxview.c        |  59 ++++++++-----
+ src/blixemApp/blxwindow.c      |  56 +++++++++---
+ src/blixemApp/blxwindow.h      |   3 +-
+ src/blixemApp/detailviewtree.c |  32 ++++---
+ src/seqtoolsUtils/blxparser.c  | 196 ++++++++++++++++++++++++++++-------------
+ src/seqtoolsUtils/blxparser.h  |   3 +
+ 9 files changed, 245 insertions(+), 118 deletions(-)
+
+2014-05-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Move drag-drop target type definition to utilities header
+ src/seqtoolsUtils/utilities.h | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+2014-05-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Small improvements to debug output
+ src/seqtoolsUtils/blxparser.c | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+2014-05-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Small improvements to debug output
+ src/belvuApp/belvuTree.c          |  2 +-
+ src/blixemApp/bigpicturegrid.c    |  2 +-
+ src/blixemApp/blxwindow.c         | 13 ++++++++++++-
+ src/seqtoolsUtils/blxGff3Parser.c | 14 +++++++-------
+ 4 files changed, 21 insertions(+), 10 deletions(-)
+
+2014-05-07  Gemma Barson  <gb10 at sanger.ac.uk>
+ WIP: Implement drop of drag-and-drop
+ src/blixemApp/blxwindow.c      | 38 +++++++++++++++++++++++++++++++++++++-
+ src/blixemApp/detailviewtree.c | 14 ++++++++++++++
+ 2 files changed, 51 insertions(+), 1 deletion(-)
+
+2014-05-07  Gemma Barson  <gb10 at sanger.ac.uk>
+ Small improvement to layout of Find/Group dialog
+ src/seqtoolsUtils/utilities.c | 9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
+
+2014-05-07  Gemma Barson  <gb10 at sanger.ac.uk>
+ Hide filtered features from big picture as well as detail view
+ src/blixemApp/bigpicturegrid.c | 42 +++++++++++++++++++++++++++++++++++++-----
+ src/blixemApp/blxwindow.c      | 17 ++++++++++++++++-
+ src/blixemApp/detailviewtree.c |  4 ++--
+ src/blixemApp/exonview.c       | 36 +++++++++++++++++++++++++++++-------
+ 4 files changed, 84 insertions(+), 15 deletions(-)
+
+2014-05-07  Gemma Barson  <gb10 at sanger.ac.uk>
+ Filter sequences and other features separately
+ src/blixemApp/blixem_.h        |  3 ++-
+ src/blixemApp/blxwindow.c      | 18 ++++++++++++------
+ src/blixemApp/detailviewtree.c | 40 ++++++++++++++++++++++++++--------------
+ 3 files changed, 40 insertions(+), 21 deletions(-)
+
+2014-05-01  Steve Miller  <sm23 at sanger.ac.uk>
+ Merge branch 'production' into develop
+2014-05-01  Steve Miller  <sm23 at sanger.ac.uk>
+ Merge branch 'release/4.26' into develop
+2014-05-01  Steve Miller  <sm23 at sanger.ac.uk>
+ Merge branch 'release/4.26' into production
+2014-04-25  Gemma Barson  <gb10 at sanger.ac.uk>
+ Change session_colour to session-colour in config
+ src/seqtoolsUtils/blxmsp.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2014-04-25  Gemma Barson  <gb10 at sanger.ac.uk>
+ Change session_colour to session-colour in config
+ src/seqtoolsUtils/blxmsp.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2014-04-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Small update to running dotter in blixem manual
+ src/doc/User_doc/Blixem_manual/Blixem_manual.pdf | Bin 1069254 -> 1058892 bytes
+ src/doc/User_doc/Blixem_manual/Blixem_manual.tex |   5 ++++-
+ 2 files changed, 4 insertions(+), 1 deletion(-)
+
+2014-04-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/dotter_splice_sites' into develop
+2014-04-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Documentation
+ src/doc/User_doc/Dotter_manual/Dotter_manual.pdf | Bin 428996 -> 421271 bytes
+ src/doc/User_doc/Dotter_manual/Dotter_manual.tex |   3 +++
+ 2 files changed, 3 insertions(+)
+
+2014-04-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Documentation and tooltips
+ src/doc/User_doc/Dotter_manual/Dotter_manual.pdf   | Bin 437881 -> 428996 bytes
+ src/doc/User_doc/Dotter_manual/Dotter_manual.tex   |   2 +-
+ .../User_doc/Dotter_manual/img_dialog_settings.png | Bin 37779 -> 28910 bytes
+ src/dotterApp/dotter.c                             |  15 ++++++++++-----
+ 4 files changed, 11 insertions(+), 6 deletions(-)
+
+2014-04-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Documentation and tooltips
+ src/doc/User_doc/Dotter_manual/Dotter_manual.pdf | Bin 428718 -> 437881 bytes
+ src/doc/User_doc/Dotter_manual/Dotter_manual.tex |  10 ++++++++--
+ src/dotterApp/dotter.c                           |   3 +++
+ 3 files changed, 11 insertions(+), 2 deletions(-)
+
+2014-04-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Make splice-site highlighting configurable in the settings
+ src/dotterApp/alignmenttool.c | 38 ++++++++++++++++++++++++++++++++++++++
+ src/dotterApp/dotter.c        | 22 +++++++++++++++++++++-
+ src/dotterApp/dotter_.h       |  2 ++
+ 3 files changed, 61 insertions(+), 1 deletion(-)
+
+2014-04-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Splice sites are now highlighted in dotter's alignment tool
+ src/dotterApp/alignmenttool.c | 100 +++++++++++++++++++++++++++++++++++++++++-
+ src/dotterApp/dotter.c        |   2 +
+ src/dotterApp/dotter_.h       |   2 +
+ 3 files changed, 102 insertions(+), 2 deletions(-)
+
+2014-04-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix crashes with showing hsps in dotter
+ src/seqtoolsUtils/blxmsp.c | 41 ++++++++++++++++++++++-------------------
+ 1 file changed, 22 insertions(+), 19 deletions(-)
+
+2014-04-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Add tooltips to dotter dialog
+ src/blixemApp/blxdotter.c | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+2014-04-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Dotter auto coords now track big picture range
+ src/blixemApp/bigpicture.c |  3 +++
+ src/blixemApp/blxdotter.c  | 42 ++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 45 insertions(+)
+
+2014-04-02  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/session_colour' into develop
+2014-04-02  Gemma Barson  <gb10 at sanger.ac.uk>
+ Make dotter's alignment/greyramp tool inherit the session colour
+ src/dotterApp/dotter.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+2014-04-02  Gemma Barson  <gb10 at sanger.ac.uk>
+ Send session_colour arg to dotter
+ src/blixemApp/blixem_.h   | 1 +
+ src/blixemApp/blxdotter.c | 3 +++
+ src/blixemApp/blxwindow.c | 1 +
+ 3 files changed, 5 insertions(+)
+
+2014-04-02  Gemma Barson  <gb10 at sanger.ac.uk>
+ Add session_colour arg to dotter
+ src/dotterApp/dotter.c     | 22 ++++++++++++++--------
+ src/dotterApp/dotter.h     |  2 ++
+ src/dotterApp/dotterMain.c | 10 ++++++++++
+ 3 files changed, 26 insertions(+), 8 deletions(-)
+
+2014-04-02  Gemma Barson  <gb10 at sanger.ac.uk>
+ Add session_colour config item
+ src/blixemApp/blixem_.h       |  1 +
+ src/blixemApp/blxFetch.c      |  3 +++
+ src/blixemApp/blxwindow.c     |  7 ++++---
+ src/blixemApp/detailview.c    | 20 ++++++++++++++------
+ src/blixemApp/detailview.h    |  3 ++-
+ src/seqtoolsUtils/blxmsp.h    |  1 +
+ src/seqtoolsUtils/utilities.c | 14 ++++++++++++++
+ src/seqtoolsUtils/utilities.h |  1 +
+ 8 files changed, 40 insertions(+), 10 deletions(-)
+
+2014-03-18  Gemma Barson  <gb10 at sanger.ac.uk>
+ Update links to pdf manuals
+ src/doc/User_doc/belvu_quick_start.html  | 2 +-
+ src/doc/User_doc/blixem_quick_start.html | 2 +-
+ src/doc/User_doc/dotter_quick_start.html | 2 +-
+ 3 files changed, 3 insertions(+), 3 deletions(-)
+
+2014-03-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/docs' into develop
+2014-03-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Remove old openoffice manuals
+ src/Makefile.am                    |   4 ++--
+ src/doc/User_doc/Belvu_manual.odt  | Bin 970146 -> 0 bytes
+ src/doc/User_doc/Belvu_manual.pdf  | Bin 819868 -> 0 bytes
+ src/doc/User_doc/Blixem_manual.odt | Bin 998860 -> 0 bytes
+ src/doc/User_doc/Blixem_manual.pdf | Bin 778696 -> 0 bytes
+ src/doc/User_doc/Dotter_manual.odt | Bin 463997 -> 0 bytes
+ src/doc/User_doc/Dotter_manual.pdf | Bin 342875 -> 0 bytes
+ src/doc/User_doc/manuals.html      |  10 +++-------
+ 8 files changed, 5 insertions(+), 9 deletions(-)
+
+2014-03-11  Gemma Barson  <gb10 at sanger.ac.uk>
+ Add screenshot of colinearity lines
+ src/doc/User_doc/Blixem_manual/Blixem_manual.pdf   | Bin 984716 -> 1069254 bytes
+ src/doc/User_doc/Blixem_manual/Blixem_manual.tex   |  14 ++++++++++++--
+ .../Blixem_manual/img_view_colinearity.png         | Bin 0 -> 118699 bytes
+ 3 files changed, 12 insertions(+), 2 deletions(-)
+
+2014-03-11  Gemma Barson  <gb10 at sanger.ac.uk>
+ Update new settings dialog and colours in manual
+ src/doc/User_doc/Blixem_manual/Blixem_manual.pdf | Bin 984856 -> 984716 bytes
+ src/doc/User_doc/Blixem_manual/Blixem_manual.tex | 577 ++++++++---------------
+ 2 files changed, 187 insertions(+), 390 deletions(-)
+
+2014-03-11  Gemma Barson  <gb10 at sanger.ac.uk>
+ Remove references to authorised users
+ src/doc/User_doc/Blixem_manual/Blixem_manual.pdf | Bin 985549 -> 984856 bytes
+ src/doc/User_doc/Blixem_manual/Blixem_manual.tex |  22 ++++------------------
+ 2 files changed, 4 insertions(+), 18 deletions(-)
+
+2014-03-11  Gemma Barson  <gb10 at sanger.ac.uk>
+ Update blixem manual with sqlite config
+ src/doc/User_doc/Blixem_manual/Blixem_manual.pdf | Bin 985476 -> 985549 bytes
+ src/doc/User_doc/Blixem_manual/Blixem_manual.tex | 266 +++++++++++++----------
+ 2 files changed, 148 insertions(+), 118 deletions(-)
+
+2014-03-07  Gemma Barson  <gb10 at sanger.ac.uk>
+ Add latex version of belvu manual
+ src/doc/User_doc/Belvu_manual/Belvu_manual.pdf     | Bin 0 -> 893808 bytes
+ src/doc/User_doc/Belvu_manual/Belvu_manual.tex     | 926 +++++++++++++++++++++
+ .../Belvu_manual/img_dialog_find_sequences.png     | Bin 0 -> 21459 bytes
+ .../Belvu_manual/img_dialog_plot_settings.png      | Bin 0 -> 20899 bytes
+ .../User_doc/Belvu_manual/img_dialog_settings.png  | Bin 0 -> 42092 bytes
+ src/doc/User_doc/Belvu_manual/img_menu_colour.png  | Bin 0 -> 24519 bytes
+ .../Belvu_manual/img_menu_conservation_plot.png    | Bin 0 -> 8753 bytes
+ src/doc/User_doc/Belvu_manual/img_menu_edit.png    | Bin 0 -> 44381 bytes
+ src/doc/User_doc/Belvu_manual/img_menu_file.png    | Bin 0 -> 27662 bytes
+ src/doc/User_doc/Belvu_manual/img_menu_help.png    | Bin 0 -> 4220 bytes
+ .../User_doc/Belvu_manual/img_menu_settings.png    | Bin 0 -> 18945 bytes
+ .../User_doc/Belvu_manual/img_menu_tear_offs.png   | Bin 0 -> 269813 bytes
+ src/doc/User_doc/Belvu_manual/img_menu_tree.png    | Bin 0 -> 14906 bytes
+ src/doc/User_doc/Belvu_manual/img_toolbar.png      | Bin 0 -> 10820 bytes
+ .../img_window_alignment_by_conservation.png       | Bin 0 -> 152230 bytes
+ .../img_window_alignment_by_residue.png            | Bin 0 -> 146877 bytes
+ .../Belvu_manual/img_window_conservation_plot.png  | Bin 0 -> 26318 bytes
+ .../User_doc/Belvu_manual/img_window_organisms.png | Bin 0 -> 17552 bytes
+ src/doc/User_doc/Belvu_manual/img_window_tree.png  | Bin 0 -> 84334 bytes
+ 19 files changed, 926 insertions(+)
+
+2014-03-07  Gemma Barson  <gb10 at sanger.ac.uk>
+ Formatting
+ src/doc/User_doc/Blixem_manual/Blixem_manual.pdf | Bin 982594 -> 985476 bytes
+ src/doc/User_doc/Blixem_manual/Blixem_manual.tex |  84 ++++++++++++++++-------
+ src/doc/User_doc/Dotter_manual/Dotter_manual.pdf | Bin 425549 -> 428718 bytes
+ src/doc/User_doc/Dotter_manual/Dotter_manual.tex |  26 +++++--
+ 4 files changed, 80 insertions(+), 30 deletions(-)
+
+2014-03-07  Gemma Barson  <gb10 at sanger.ac.uk>
+ Formatting
+ src/doc/User_doc/Blixem_manual/Blixem_manual.pdf | Bin 995622 -> 982594 bytes
+ src/doc/User_doc/Blixem_manual/Blixem_manual.tex |  15 ++-
+ src/doc/User_doc/Dotter_manual/Dotter_manual.pdf | Bin 421413 -> 425549 bytes
+ src/doc/User_doc/Dotter_manual/Dotter_manual.tex | 112 ++++++++++++++++++++++-
+ 4 files changed, 120 insertions(+), 7 deletions(-)
+
+2014-03-07  Gemma Barson  <gb10 at sanger.ac.uk>
+ Add latex version of dotter manual
+ src/doc/User_doc/Dotter_manual/Dotter_manual.pdf   | Bin 0 -> 421413 bytes
+ src/doc/User_doc/Dotter_manual/Dotter_manual.tex   | 890 +++++++++++++++++++++
+ .../User_doc/Dotter_manual/img_dialog_settings.png | Bin 0 -> 37779 bytes
+ .../Dotter_manual/img_menu_alignment_tool.png      | Bin 0 -> 7513 bytes
+ src/doc/User_doc/Dotter_manual/img_menu_edit.png   | Bin 0 -> 6088 bytes
+ src/doc/User_doc/Dotter_manual/img_menu_file.png   | Bin 0 -> 19028 bytes
+ src/doc/User_doc/Dotter_manual/img_menu_help.png   | Bin 0 -> 4220 bytes
+ .../User_doc/Dotter_manual/img_menu_tear_off.png   | Bin 0 -> 55318 bytes
+ src/doc/User_doc/Dotter_manual/img_menu_view.png   | Bin 0 -> 24076 bytes
+ .../Dotter_manual/img_window_dotter_self.png       | Bin 0 -> 77462 bytes
+ .../User_doc/Dotter_manual/img_window_greyramp.png | Bin 0 -> 11103 bytes
+ src/doc/User_doc/Dotter_manual/img_window_main.png | Bin 0 -> 52361 bytes
+ .../Dotter_manual/img_window_nucleotide.png        | Bin 0 -> 32253 bytes
+ .../User_doc/Dotter_manual/img_window_protein.png  | Bin 0 -> 39627 bytes
+ 14 files changed, 890 insertions(+)
+
+2014-03-07  Gemma Barson  <gb10 at sanger.ac.uk>
+ Formatting
+ src/doc/User_doc/Blixem_manual/Blixem_manual.pdf | Bin 976653 -> 995622 bytes
+ src/doc/User_doc/Blixem_manual/Blixem_manual.tex |  27 +++++++++++------------
+ 2 files changed, 13 insertions(+), 14 deletions(-)
+
+2014-03-07  Gemma Barson  <gb10 at sanger.ac.uk>
+ Ignore latex generated files
+ .gitignore | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+2014-03-07  Gemma Barson  <gb10 at sanger.ac.uk>
+ Add latex version of blixem manual
+ src/doc/User_doc/Blixem_manual/Blixem_manual.pdf   |  Bin 0 -> 976653 bytes
+ src/doc/User_doc/Blixem_manual/Blixem_manual.tex   | 2421 ++++++++++++++++++++
+ .../User_doc/Blixem_manual/img_button_about.png    |  Bin 0 -> 1351 bytes
+ .../Blixem_manual/img_button_back_base.png         |  Bin 0 -> 925 bytes
+ .../Blixem_manual/img_button_back_page.png         |  Bin 0 -> 936 bytes
+ src/doc/User_doc/Blixem_manual/img_button_find.png |  Bin 0 -> 1368 bytes
+ .../Blixem_manual/img_button_first_match.png       |  Bin 0 -> 1265 bytes
+ .../Blixem_manual/img_button_forward_base.png      |  Bin 0 -> 907 bytes
+ .../Blixem_manual/img_button_forward_page.png      |  Bin 0 -> 931 bytes
+ .../User_doc/Blixem_manual/img_button_go_to.png    |  Bin 0 -> 1403 bytes
+ src/doc/User_doc/Blixem_manual/img_button_help.png |  Bin 0 -> 1590 bytes
+ .../Blixem_manual/img_button_last_match.png        |  Bin 0 -> 1279 bytes
+ .../Blixem_manual/img_button_next_match.png        |  Bin 0 -> 1175 bytes
+ .../Blixem_manual/img_button_prev_match.png        |  Bin 0 -> 1183 bytes
+ .../User_doc/Blixem_manual/img_button_settings.png |  Bin 0 -> 1541 bytes
+ src/doc/User_doc/Blixem_manual/img_button_sort.png |  Bin 0 -> 1007 bytes
+ .../Blixem_manual/img_button_toggle_strand.png     |  Bin 0 -> 1527 bytes
+ .../User_doc/Blixem_manual/img_button_zoom_in.png  |  Bin 0 -> 1385 bytes
+ .../Blixem_manual/img_button_zoom_in_bp.png        |  Bin 0 -> 1199 bytes
+ .../User_doc/Blixem_manual/img_button_zoom_out.png |  Bin 0 -> 1371 bytes
+ .../Blixem_manual/img_button_zoom_out_bp.png       |  Bin 0 -> 1288 bytes
+ .../Blixem_manual/img_button_zoom_whole_bp.png     |  Bin 0 -> 1308 bytes
+ .../User_doc/Blixem_manual/img_dialog_dotter.png   |  Bin 0 -> 30483 bytes
+ src/doc/User_doc/Blixem_manual/img_dialog_find.png |  Bin 0 -> 25336 bytes
+ .../User_doc/Blixem_manual/img_dialog_groups.png   |  Bin 0 -> 27662 bytes
+ .../Blixem_manual/img_dialog_groups_edit.png       |  Bin 0 -> 32867 bytes
+ src/doc/User_doc/Blixem_manual/img_dialog_sort.png |  Bin 0 -> 23923 bytes
+ src/doc/User_doc/Blixem_manual/img_dialog_view.png |  Bin 0 -> 78987 bytes
+ .../Blixem_manual/img_menu_right_click.png         |  Bin 0 -> 15910 bytes
+ src/doc/User_doc/Blixem_manual/img_toolbar.png     |  Bin 0 -> 11617 bytes
+ .../img_view_alignment_colour_key.png              |  Bin 0 -> 34900 bytes
+ .../Blixem_manual/img_view_alignment_details.png   |  Bin 0 -> 53288 bytes
+ .../img_view_alignment_details_nucleotide.png      |  Bin 0 -> 70983 bytes
+ .../img_view_alignment_details_protein.png         |  Bin 0 -> 86757 bytes
+ .../img_view_alignment_list_exons.png              |  Bin 0 -> 27697 bytes
+ .../Blixem_manual/img_view_big_picture.png         |  Bin 0 -> 14903 bytes
+ .../User_doc/Blixem_manual/img_view_coverage.png   |  Bin 0 -> 6224 bytes
+ .../Blixem_manual/img_view_feedback_area.png       |  Bin 0 -> 3082 bytes
+ .../Blixem_manual/img_view_feedback_box.png        |  Bin 0 -> 18914 bytes
+ .../Blixem_manual/img_view_reading_frame.png       |  Bin 0 -> 97169 bytes
+ .../Blixem_manual/img_view_selected_codon.png      |  Bin 0 -> 8573 bytes
+ .../Blixem_manual/img_view_sort_by_group.png       |  Bin 0 -> 28427 bytes
+ .../Blixem_manual/img_view_transcripts.png         |  Bin 0 -> 19353 bytes
+ .../User_doc/Blixem_manual/img_view_variations.png |  Bin 0 -> 14011 bytes
+ .../Blixem_manual/img_window_nucleotide_mode.png   |  Bin 0 -> 91951 bytes
+ .../Blixem_manual/img_window_protein_mode.png      |  Bin 0 -> 96739 bytes
+ 46 files changed, 2421 insertions(+)
+
+2014-03-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix potential crash in new polyA tail code
+ src/blixemApp/detailview.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+2014-03-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix bug where Mets and Stops weren't being highlighted
+ src/blixemApp/detailview.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2014-03-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Add autogen.sh and make runconfig args more sensible
+ src/autogen.sh   | 14 ++++++++++++++
+ src/runconfig.sh |  5 +++--
+ 2 files changed, 17 insertions(+), 2 deletions(-)
+
+2014-03-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Call dotter on same screen as blixem
+ src/blixemApp/blxdotter.c | 25 ++++++++++++++++++++-----
+ 1 file changed, 20 insertions(+), 5 deletions(-)
+
+2014-03-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix error with GTK args not being recognised
+ src/belvuApp/belvuMain.c   | 2 ++
+ src/blixemApp/blxmain.c    | 2 ++
+ src/dotterApp/dotterMain.c | 2 ++
+ 3 files changed, 6 insertions(+)
+
+2014-03-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Grey out mouse-over tickboxes if not applicable
+ src/blixemApp/blxview.c    | 42 +++++++++++++++++++++---------------------
+ src/blixemApp/blxwindow.c  | 33 ++++++++++++++++++++++-----------
+ src/dotterApp/dotter.c     |  2 +-
+ src/seqtoolsUtils/blxmsp.c |  6 ++++++
+ src/seqtoolsUtils/blxmsp.h |  3 ++-
+ 5 files changed, 52 insertions(+), 34 deletions(-)
+
+2014-03-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Make mouse-over details configurable
+ src/blixemApp/blixem_.h    |  5 +++-
+ src/blixemApp/blxview.c    | 54 ++++++++++++++++++++++++++++++----
+ src/blixemApp/blxwindow.c  | 73 +++++++++++++++++++++++++++++++++++++---------
+ src/blixemApp/detailview.c | 19 ++++++++++++
+ src/blixemApp/detailview.h |  1 +
+ 5 files changed, 132 insertions(+), 20 deletions(-)
+
+2014-03-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix bugs to do with multiple fasta seqs in GFF file
+ src/seqtoolsUtils/blxGff3Parser.c | 59 ++++++++++++++++++++++++++-------------
+ src/seqtoolsUtils/blxGff3Parser.h |  1 +
+ src/seqtoolsUtils/blxparser.c     | 14 ++++++++++
+ 3 files changed, 54 insertions(+), 20 deletions(-)
+
+2014-03-04  Gemma Barson  <gb10 at sanger.ac.uk>
+ Remove garbage file that was added by mistake
+ src/dotterApp/dotterWindow | 1827 --------------------------------------------
+ 1 file changed, 1827 deletions(-)
+
+2014-03-04  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/polya' into develop
+2014-03-04  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix polyA boundary and coord direction when display reversed
+ src/blixemApp/detailview.c | 38 +++++++++++++++++++++++++++++---------
+ 1 file changed, 29 insertions(+), 9 deletions(-)
+
+2014-03-03  Gemma Barson  <gb10 at sanger.ac.uk>
+ Display info about moused-over polyA signals and sites
+ src/blixemApp/detailview.c | 164 +++++++++++++++++++++++++++++++++++++++++----
+ src/blixemApp/detailview.h |  10 ---
+ 2 files changed, 152 insertions(+), 22 deletions(-)
+
+2014-02-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Highlight polyA sites in the reference sequence
+ src/blixemApp/blixem_.h    |  3 ++
+ src/blixemApp/blxwindow.c  |  9 +++--
+ src/blixemApp/detailview.c | 87 +++++++++++++++++++++++++++++++++++++---------
+ 3 files changed, 80 insertions(+), 19 deletions(-)
+
+2014-02-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Check entire unaligned sequence for polyA tail instead of limited number of bases
+ src/seqtoolsUtils/blxmsp.c | 18 +++++++++++++-----
+ 1 file changed, 13 insertions(+), 5 deletions(-)
+
+2014-02-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix bug with finding polyA signals when revcompd
+ src/blixemApp/detailview.c | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+2014-02-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Scan for polyA signals in ref seq
+ src/blixemApp/detailview.c | 49 ++++++++++++++++++++++++++++++++++++++++------
+ 1 file changed, 43 insertions(+), 6 deletions(-)
+
+2014-02-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix a bug with showing polyA signals for selected sequences
+ src/blixemApp/detailview.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+2014-02-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix some bugs caused by previous tidying
+ src/blixemApp/detailview.c     |  7 ++++++-
+ src/blixemApp/detailviewtree.c | 11 +++++------
+ 2 files changed, 11 insertions(+), 7 deletions(-)
+
+2014-02-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Tidying
+ src/seqtoolsUtils/blxmsp.c | 13 ++++++++++++-
+ 1 file changed, 12 insertions(+), 1 deletion(-)
+
+2014-02-27  Gemma Barson  <gb10 at sanger.ac.uk>
+ WIP: check matches for polyA tails
+ src/blixemApp/blxview.c              |  2 +-
+ src/blixemApp/detailview.c           |  2 +-
+ src/blixemApp/sequencecellrenderer.c |  2 +-
+ src/seqtoolsUtils/blxmsp.c           | 82 +++++++++++++++++++++++++++---------
+ src/seqtoolsUtils/blxmsp.h           |  4 +-
+ 5 files changed, 68 insertions(+), 24 deletions(-)
+
+2012-11-01  Gemma Barson  <gb10 at sanger.ac.uk>
+ WIP
+ src/blixemApp/detailview.c     | 78 +++++++++++++++++++++---------------------
+ src/blixemApp/detailview.h     |  6 ++++
+ src/blixemApp/detailviewtree.c |  2 +-
+ 3 files changed, 46 insertions(+), 40 deletions(-)
+
+2012-10-24  Gemma Barson  <gb10 at sanger.ac.uk>
+ Tidy reference sequence highlighting code
+ src/blixemApp/detailview.c     | 72 +++++++++++++++++++++---------------------
+ src/blixemApp/detailview.h     | 33 +++++++++++--------
+ src/blixemApp/detailviewtree.c | 10 +++---
+ 3 files changed, 62 insertions(+), 53 deletions(-)
+
+2014-02-27  Gemma Barson  <gb10 at sanger.ac.uk>
+ Scrollwheel now scrolls big picture separately to detail view (RT206070)
+ src/blixemApp/bigpicture.c     | 97 ++++++++++++++++++++++++++++++++++++------
+ src/blixemApp/bigpicture.h     |  2 +
+ src/blixemApp/bigpicturegrid.c | 11 +----
+ src/blixemApp/coverageview.c   | 10 +----
+ src/blixemApp/detailview.c     | 19 ++++++++-
+ src/blixemApp/detailview.h     |  2 +
+ src/blixemApp/exonview.c       |  6 +--
+ 7 files changed, 112 insertions(+), 35 deletions(-)
+
+2014-02-27  Gemma Barson  <gb10 at sanger.ac.uk>
+ Improve warnings if fetch returns invalid data
+ src/blixemApp/blxFetch.c | 43 +++++++++++++++++++++++++++++++++++++------
+ 1 file changed, 37 insertions(+), 6 deletions(-)
+
+2014-02-26  Gemma Barson  <gb10 at sanger.ac.uk>
+ Remove unused x options so only 2 file args possible (RT288114)
+ src/blixemApp/blxdotter.c  | 15 +++++--------
+ src/dotterApp/dotter.h     |  1 -
+ src/dotterApp/dotterMain.c | 56 +++++-----------------------------------------
+ 3 files changed, 12 insertions(+), 60 deletions(-)
+
+2014-02-26  Gemma Barson  <gb10 at sanger.ac.uk>
+ Go-to-position dialog now has option to specify toplevel coords
+ src/blixemApp/detailview.c | 34 ++++++++++++++++++++++++++++------
+ 1 file changed, 28 insertions(+), 6 deletions(-)
+
+2014-02-25  Gemma Barson  <gb10 at sanger.ac.uk>
+ Update release notes
+ src/doc/User_doc/release_notes.html | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+2014-02-25  Gemma Barson  <gb10 at sanger.ac.uk>
+ Update gitignore
+ .gitignore | 1 +
+ 1 file changed, 1 insertion(+)
+
+2014-02-25  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix bug with traffic light lines in protein mode
+ src/blixemApp/detailviewtree.c       |  2 +-
+ src/blixemApp/sequencecellrenderer.c | 43 +++++++++++++++++++++++++-----------
+ 2 files changed, 31 insertions(+), 14 deletions(-)
+
+2014-02-24  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix bug with unaligned seq being shown for all seqs
+ src/blixemApp/blxview.c              | 15 ++++++++++++---
+ src/blixemApp/sequencecellrenderer.c |  4 ----
+ 2 files changed, 12 insertions(+), 7 deletions(-)
+
+2014-02-24  Gemma Barson  <gb10 at sanger.ac.uk>
+ Update repo gitignore
+ .gitignore | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+2014-02-24  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/traffic_light' into develop
+2014-02-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Show colinearity lines in normal (unsquashed) mode
+ src/blixemApp/sequencecellrenderer.c | 68 +++++++++++++++++++++++++++++++++---
+ 1 file changed, 63 insertions(+), 5 deletions(-)
+
+2014-02-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Make show-colinearity optional
+ src/blixemApp/bigpicturegrid.c       | 10 +++--
+ src/blixemApp/blixem_.h              |  6 ++-
+ src/blixemApp/blxwindow.c            | 15 +++++--
+ src/blixemApp/sequencecellrenderer.c | 83 +++++++++++++++++++-----------------
+ 4 files changed, 69 insertions(+), 45 deletions(-)
+
+2014-02-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Show colinearity lines in squashed view
+ src/blixemApp/sequencecellrenderer.c | 61 ++++++++++++++++++++++++++++++++++--
+ 1 file changed, 59 insertions(+), 2 deletions(-)
+
+2014-02-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Commenting and small fix
+ src/blixemApp/sequencecellrenderer.c | 22 ++++++++++++++--------
+ 1 file changed, 14 insertions(+), 8 deletions(-)
+
+2014-02-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Tidying
+ src/blixemApp/sequencecellrenderer.c | 277 ++++++++++++++++++-----------------
+ 1 file changed, 140 insertions(+), 137 deletions(-)
+
+2014-02-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Add traffic-light lines to top view
+ src/blixemApp/bigpicturegrid.c | 124 +++++++++++++++++++++++++++++++++--------
+ src/blixemApp/blixem_.h        |   3 +
+ src/blixemApp/blxwindow.c      |   5 ++
+ src/seqtoolsUtils/blxmsp.c     |  43 +++++++++++---
+ src/seqtoolsUtils/blxmsp.h     |   2 +
+ src/seqtoolsUtils/utilities.h  |  12 +++-
+ 6 files changed, 157 insertions(+), 32 deletions(-)
+
+2014-02-19  Gemma Barson  <gb10 at sanger.ac.uk>
+ Add windows installation documentation to dist
+ src/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2014-02-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix problem with abstract type flag
+ src/blixemApp/sequencecellrenderer.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2014-02-07  Jeremy Henty  <jh13 at sanger.ac.uk>
+ blxFetchDb.c: fix comment typo.
+ src/blixemApp/blxFetchDb.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2014-01-31  Jeremy Henty  <jh13 at sanger.ac.uk>
+ blxmain.c: main(): reword a misleading comment.
+ src/blixemApp/blxmain.c | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+2014-01-23  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix bug with sorting in belvu
+ src/belvuApp/belvuWindow.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2014-01-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix problem with abstract type flag
+ src/blixemApp/sequencecellrenderer.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+2014-01-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix g++ compiler warnings
+ src/belvuApp/belvu.c                   | 136 +++++++++++-----------
+ src/belvuApp/belvuAlignment.c          |  18 +--
+ src/belvuApp/belvuConsPlot.c           |   6 +-
+ src/belvuApp/belvuMain.c               |  16 +--
+ src/belvuApp/belvuTree.c               |  94 ++++++++--------
+ src/belvuApp/belvuWindow.c             |  48 ++++----
+ src/belvuApp/belvu_.h                  |  12 +-
+ src/blixemApp/bigpicture.c             |  38 +++----
+ src/blixemApp/bigpicture.h             |   4 +-
+ src/blixemApp/bigpicturegrid.c         |  12 +-
+ src/blixemApp/blixem_.h                |  28 ++---
+ src/blixemApp/blxFetch.c               |  44 ++++----
+ src/blixemApp/blxFetchDb.c             |   1 +
+ src/blixemApp/blxdotter.c              |  32 +++---
+ src/blixemApp/blxmain.c                |   8 +-
+ src/blixemApp/blxview.c                | 142 ++++++++---------------
+ src/blixemApp/blxwindow.c              |  70 ++++++------
+ src/blixemApp/blxwindow.h              |   2 +-
+ src/blixemApp/coverageview.c           |   4 +-
+ src/blixemApp/detailview.c             | 112 +++++++++----------
+ src/blixemApp/detailview.h             |   8 +-
+ src/blixemApp/detailviewtree.c         |  46 ++++----
+ src/blixemApp/detailviewtree.h         |   2 +-
+ src/blixemApp/exonview.c               |  28 ++---
+ src/blixemApp/sequencecellrenderer.c   |  53 ++++-----
+ src/dotterApp/alignmenttool.c          |  12 +-
+ src/dotterApp/dotplot.c                |  38 +++----
+ src/dotterApp/dotter.c                 |  59 ++++++----
+ src/dotterApp/dotterKarlin.c           |  14 +--
+ src/dotterApp/dotterMain.c             |  36 +++---
+ src/dotterApp/dotter_.h                |  21 ++--
+ src/dotterApp/greyramptool.c           |   6 +-
+ src/dotterApp/seqtoolsExonView.c       |  14 +--
+ src/dotterApp/seqtoolsExonView.h       |   2 +-
+ src/seqtoolsUtils/blxGff3Parser.c      |  34 +++---
+ src/seqtoolsUtils/blxGff3Parser.h      |   2 +-
+ src/seqtoolsUtils/blxmsp.c             | 198 +++++++++++++++++++++------------
+ src/seqtoolsUtils/blxmsp.h             | 115 ++++++++++---------
+ src/seqtoolsUtils/blxparser.c          |  22 ++--
+ src/seqtoolsUtils/iupac.h              |   4 +-
+ src/seqtoolsUtils/seqtoolsWebBrowser.c |  12 +-
+ src/seqtoolsUtils/translate.c          |   2 +-
+ src/seqtoolsUtils/utilities.c          | 165 +++++++++++++--------------
+ src/seqtoolsUtils/utilities.h          |  74 ++++++------
+ 44 files changed, 916 insertions(+), 878 deletions(-)
+
+2014-01-29  Steve Miller  <sm23 at sanger.ac.uk>
+ Merge branch 'release/4.25' into production
+2014-01-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Update release notes
+ src/doc/User_doc/release_notes.html | 15 +++++++++++++++
+ 1 file changed, 15 insertions(+)
+
+2014-01-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix potential crash in shutting down dotter
+ src/seqtoolsUtils/blxmsp.c | 17 ++++++++++-------
+ 1 file changed, 10 insertions(+), 7 deletions(-)
+
+2014-01-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/sqlite' into develop
+2014-01-06  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix backwards compatibility issue with optional-fetch methods
+ src/blixemApp/blxFetch.c | 24 ++++++++++++++++++++++++
+ 1 file changed, 24 insertions(+)
+
+2014-01-06  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix memory corruption due to bad column info struct
+ src/blixemApp/blxwindow.c  |  6 +++---
+ src/blixemApp/detailview.h | 22 +---------------------
+ 2 files changed, 4 insertions(+), 24 deletions(-)
+
+2014-01-03  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'develop' into feature/sqlite
+2014-01-02  Gemma Barson  <gb10 at sanger.ac.uk>
+ Docs: instructions to install with cygwin
+ src/INSTALL         | 12 +++++-----
+ src/INSTALL.windows | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 70 insertions(+), 6 deletions(-)
+
+2013-12-23  Ed Griffiths  <edgrif at sanger.ac.uk>
+ Merge branch 'release/4.24' into production
+2013-11-27  Gemma Barson  <gb10 at sanger.ac.uk>
+ Portability improvements
+ src/configure.ac              | 3 +++
+ src/seqtoolsUtils/utilities.c | 8 ++++++++
+ 2 files changed, 11 insertions(+)
+
+2013-11-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Update release notes
+ src/doc/User_doc/release_notes.html | 45 +++++++++++++++++++++++++++++++++++++
+ 1 file changed, 45 insertions(+)
+
+2013-11-11  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'production' into develop
+2013-11-11  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'release/4.23' into production
+2013-11-11  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'develop' into feature/sqlite
+2013-11-07  Jeremy Henty  <jh13 at sanger.ac.uk>
+ Typo fix: feaature -> feature.
+ src/blixemApp/blxwindow.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2013-10-30  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix bug in keyword substitutions
+ src/blixemApp/blxFetch.c | 74 +++++++++++++++++++++++++++++++++---------------
+ 1 file changed, 51 insertions(+), 23 deletions(-)
+
+2013-10-30  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix bug in keyword substitutions
+ src/blixemApp/blxFetch.c | 74 +++++++++++++++++++++++++++++++++---------------
+ 1 file changed, 51 insertions(+), 23 deletions(-)
+
+2013-10-30  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix merge error
+ src/blixemApp/blixem_.h | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+2013-10-30  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'develop' into feature/sqlite
+2013-10-30  Gemma Barson  <gb10 at sanger.ac.uk>
+ Allow key names in substitution variables
+ src/blixemApp/blixem_.h   |  15 +++-
+ src/blixemApp/blxFetch.c  | 210 ++++++++++++++++++++++++++++++----------------
+ src/blixemApp/blxwindow.c |  11 +--
+ 3 files changed, 155 insertions(+), 81 deletions(-)
+
+2013-10-24  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'develop' into feature/sqlite
+2013-10-24  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'release/4.23' into develop
+2013-10-24  Gemma Barson  <gb10 at sanger.ac.uk>
+ For now, use Gap string if given instead of cigar_bam
+ src/seqtoolsUtils/blxGff3Parser.c | 19 +++++++++++++++++--
+ 1 file changed, 17 insertions(+), 2 deletions(-)
+
+2013-10-24  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixes for reading the cigar_bam gap string
+ src/seqtoolsUtils/blxGff3Parser.c | 48 +++++++++++++++++++++++----------------
+ 1 file changed, 29 insertions(+), 19 deletions(-)
+
+2013-10-24  Gemma Barson  <gb10 at sanger.ac.uk>
+ For now, use Gap string if given instead of cigar_bam
+ src/seqtoolsUtils/blxGff3Parser.c | 19 +++++++++++++++++--
+ 1 file changed, 17 insertions(+), 2 deletions(-)
+
+2013-10-22  Gemma Barson  <gb10 at sanger.ac.uk>
+ Allow dataType to be specified in source stanza
+ src/seqtoolsUtils/blxGff3Parser.c | 50 ++++++++++++++++++++++++++++++++++-----
+ 1 file changed, 44 insertions(+), 6 deletions(-)
+
+2013-10-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix merge errors
+ src/blixemApp/blixem_.h        |   5 +-
+ src/blixemApp/blxFetch.c       |   2 +-
+ src/blixemApp/blxwindow.c      | 138 +++++++++++++-----------
+ src/blixemApp/blxwindow.h      |   2 +
+ src/blixemApp/detailviewtree.c |   1 +
+ src/dotterApp/dotterMain.c     |   2 +-
+ src/seqtoolsUtils/blxmsp.c     | 234 +----------------------------------------
+ src/seqtoolsUtils/blxmsp.h     |   3 +-
+ 8 files changed, 90 insertions(+), 297 deletions(-)
+
+2013-10-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'develop' into feature/sqlite
+2013-10-07  Ed Griffiths  <edgrif at sanger.ac.uk>
+ Merge branch 'release/4.22' into production
+2013-08-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'production' into develop
+2013-08-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'release/4.21' into production
+2013-08-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Handling of cigar_bam tag in GFF3
+ src/seqtoolsUtils/blxGff3Parser.c | 381 ++++++++++++++++++++++++++++----------
+ 1 file changed, 288 insertions(+), 93 deletions(-)
+
+2013-08-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Make sure dotter doesn't try to use X if it's not required
+ src/dotterApp/dotter.c     | 31 ++++++++++++++++++++-----------
+ src/dotterApp/dotterMain.c | 10 ++++++----
+ 2 files changed, 26 insertions(+), 15 deletions(-)
+
+2013-06-25  Gemma Barson  <gb10 at sanger.ac.uk>
+ Add a Clear button to the Find dialog in Blixem
+ src/belvuApp/belvuWindow.c    |  4 +--
+ src/blixemApp/blxwindow.c     | 82 +++++++++++++++++++++++++++++++++++--------
+ src/seqtoolsUtils/utilities.c |  9 +++--
+ src/seqtoolsUtils/utilities.h |  9 +++--
+ 4 files changed, 82 insertions(+), 22 deletions(-)
+
+2013-06-06  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/config' into develop
+2013-06-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Implemented squash-linked-features config option
+ src/blixemApp/detailview.c     |  3 ++-
+ src/blixemApp/detailviewtree.c | 61 ++++++++++++++++++++++++++++++++----------
+ src/blixemApp/detailviewtree.h |  2 +-
+ 3 files changed, 50 insertions(+), 16 deletions(-)
+
+2013-06-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Move hard-coded short-read display code to config
+ src/blixemApp/blixem_.h              |   6 +-
+ src/blixemApp/blxFetch.c             |  14 +-
+ src/blixemApp/blxview.c              |   2 +-
+ src/blixemApp/blxwindow.c            |   5 +-
+ src/blixemApp/detailview.c           |   5 +-
+ src/blixemApp/detailview.h           |   4 +-
+ src/blixemApp/detailviewtree.c       |  65 ++++++----
+ src/blixemApp/sequencecellrenderer.c |   7 +-
+ src/dotterApp/dotterMain.c           |   2 +-
+ src/seqtoolsUtils/blxGff3Parser.c    |  87 +++++--------
+ src/seqtoolsUtils/blxmsp.c           | 244 ++++++++++++++++++++++++++---------
+ src/seqtoolsUtils/blxmsp.h           |  56 +++++---
+ src/seqtoolsUtils/blxparser.c        |  12 +-
+ 13 files changed, 325 insertions(+), 184 deletions(-)
+
+2013-05-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Add %g substitution argument to allow config of GFF version (RT332510)
+ src/blixemApp/blxFetch.c      | 4 ++++
+ src/seqtoolsUtils/utilities.h | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+2013-05-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Bounds limit dotter range when using big-picture range
+ src/blixemApp/blxdotter.c | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+2013-05-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Add sequence-type arguments to dotter so it does not have to guess (RT330489)
+ src/blixemApp/blixem_.h    |  2 +-
+ src/blixemApp/blxdotter.c  |  8 +++++++
+ src/dotterApp/dotterMain.c | 60 +++++++++++++++++++++++++++++++++++++---------
+ 3 files changed, 58 insertions(+), 12 deletions(-)
+
+2013-05-08  Gemma Barson  <gb10 at sanger.ac.uk>
+ New colour scheme (RT329278)
+ src/blixemApp/blxwindow.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+2013-05-08  Gemma Barson  <gb10 at sanger.ac.uk>
+ New colour scheme (RT329278)
+ src/blixemApp/blxwindow.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+2013-05-08  Gemma Barson  <gb10 at sanger.ac.uk>
+ Incorrect colour was being used for background
+ src/blixemApp/sequencecellrenderer.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+2013-05-07  Gemma Barson  <gb10 at sanger.ac.uk>
+ Improve toolbar layout for small screens
+ src/blixemApp/detailview.c | 24 ++++++++++++++++++------
+ 1 file changed, 18 insertions(+), 6 deletions(-)
+
+2013-05-07  Gemma Barson  <gb10 at sanger.ac.uk>
+ Improve settings dialog mnemonics
+ src/blixemApp/blxwindow.c | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+2013-05-07  Gemma Barson  <gb10 at sanger.ac.uk>
+ Blixem support for small screens
+ src/blixemApp/blxwindow.c  | 222 ++++++++++++++++++++++++++-------------------
+ src/blixemApp/detailview.c |   2 +-
+ 2 files changed, 130 insertions(+), 94 deletions(-)
+
+2013-04-19  Gemma Barson  <gb10 at sanger.ac.uk>
+ Enable splice site highlighting by default
+ src/blixemApp/blxwindow.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+2013-04-09  Ed Griffiths  <edgrif at sanger.ac.uk>
+ Merge branch 'release/4.20' into production
+2013-03-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix problem with addressing null error
+ src/blixemApp/blxFetch.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+2013-03-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Protect against freeing null GStrings
+ src/blixemApp/blxFetch.c | 27 +++++++++++++++++++++------
+ 1 file changed, 21 insertions(+), 6 deletions(-)
+
+2013-02-01  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'release/4.19' into production
+2013-02-01  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated release notes
+ src/doc/User_doc/release_notes.html | 31 +++++++++++++++++++++++++++++++
+ 1 file changed, 31 insertions(+)
+
+2012-11-30  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'production' into develop
+2012-11-30  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'release/4.18' into production
+2012-11-22  Gemma Barson  <gb10 at sanger.ac.uk>
+ Blixem usage now printed to stdout, with successful exit code
+ src/belvuApp/belvuMain.c   | 32 +++++++++++++--------
+ src/blixemApp/blxmain.c    | 36 ++++++++++++++----------
+ src/dotterApp/dotterMain.c | 69 +++++++++++++++++++++++++++-------------------
+ 3 files changed, 82 insertions(+), 55 deletions(-)
+
+2012-11-15  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix a regression where user-entered depth per cell was being ignored
+ src/blixemApp/coverageview.c | 23 +++++++++++++----------
+ 1 file changed, 13 insertions(+), 10 deletions(-)
+
+2012-11-15  Gemma Barson  <gb10 at sanger.ac.uk>
+ Coverage view depth labels are now abbreviated e.g. 1000 => 1k
+ src/blixemApp/bigpicture.c     | 79 +++++++++++++++++++++++++++++++++++-------
+ src/blixemApp/bigpicture.h     |  2 +-
+ src/blixemApp/bigpicturegrid.c |  2 +-
+ src/blixemApp/coverageview.c   |  2 +-
+ 4 files changed, 70 insertions(+), 15 deletions(-)
+
+2012-11-15  Gemma Barson  <gb10 at sanger.ac.uk>
+ Improve coverage view scale
+ src/blixemApp/bigpicture.c    | 35 --------------------
+ src/blixemApp/coverageview.c  | 66 ++++++++++++++++++++++++-------------
+ src/seqtoolsUtils/utilities.c | 75 +++++++++++++++++++++++++++++++++++++++++++
+ src/seqtoolsUtils/utilities.h |  2 ++
+ 4 files changed, 120 insertions(+), 58 deletions(-)
+
+2012-11-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Change abbrev-title default to false for blixem and dotter
+ src/blixemApp/blxmain.c    | 2 +-
+ src/dotterApp/dotterMain.c | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+2012-11-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Add option to abbreviate belvu window titles
+ src/belvuApp/belvu.c         |  42 +++++++++++++
+ src/belvuApp/belvuConsPlot.c |  13 +++-
+ src/belvuApp/belvuMain.c     |  11 +++-
+ src/belvuApp/belvuTree.c     |  11 +++-
+ src/belvuApp/belvuWindow.c   | 144 ++++++++++++++++++++++++++-----------------
+ src/belvuApp/belvu_.h        |  11 ++++
+ 6 files changed, 166 insertions(+), 66 deletions(-)
+
+2012-11-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Add option to abbreviate window title prefixes in blixem and dotter
+ src/blixemApp/blixem_.h       |  12 +++++
+ src/blixemApp/blxFetch.c      |   9 ++--
+ src/blixemApp/blxdotter.c     |  16 +++++--
+ src/blixemApp/blxmain.c       |  19 +++++++-
+ src/blixemApp/blxview.c       |  60 +++++++++++++++++++++--
+ src/blixemApp/blxwindow.c     | 108 +++++++++++++++++++++++-------------------
+ src/blixemApp/detailview.c    |   8 +++-
+ src/dotterApp/alignmenttool.c |  15 ++++--
+ src/dotterApp/dotter.c        |  89 +++++++++++++++++++---------------
+ src/dotterApp/dotter.h        |   1 +
+ src/dotterApp/dotterMain.c    |  14 +++++-
+ src/dotterApp/dotter_.h       |  14 +++++-
+ src/dotterApp/greyramptool.c  |   7 ++-
+ 13 files changed, 259 insertions(+), 113 deletions(-)
+
+2012-11-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'release/4.17' into production
+2012-10-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Look for styles when using the load-features-file option
+ src/blixemApp/blixem_.h   |   2 +
+ src/blixemApp/blxmain.c   | 343 ----------------------------------------------
+ src/blixemApp/blxview.c   | 343 ++++++++++++++++++++++++++++++++++++++++++++++
+ src/blixemApp/blxwindow.c |   3 +-
+ 4 files changed, 347 insertions(+), 344 deletions(-)
+
+2012-10-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/loadfile' into develop
+2012-10-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated incorrect tooltip shortcut text
+ src/blixemApp/blxwindow.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2012-10-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Recalculate coverage after loading features from file
+ src/blixemApp/blxwindow.c    | 19 +++++++--
+ src/blixemApp/blxwindow.h    | 93 ++++++++++++++++++++++----------------------
+ src/blixemApp/coverageview.c | 41 +++++++++----------
+ 3 files changed, 81 insertions(+), 72 deletions(-)
+
+2012-10-15  Gemma Barson  <gb10 at sanger.ac.uk>
+ Temp hack to support (invalid) similarity type in gff files
+ src/seqtoolsUtils/blxGff3Parser.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+2012-09-24  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix a bug where reads loaded from a bam file were not displayed
+ src/blixemApp/blixem_.h   |  2 +-
+ src/blixemApp/blxFetch.c  | 16 ++++++++++------
+ src/blixemApp/blxwindow.c |  3 ++-
+ 3 files changed, 13 insertions(+), 8 deletions(-)
+
+2012-09-24  Gemma Barson  <gb10 at sanger.ac.uk>
+ Load-file dialog now has the option to enter a URL
+ src/blixemApp/blxview.c       | 29 +++++++-------
+ src/blixemApp/blxwindow.c     |  5 ++-
+ src/seqtoolsUtils/utilities.c | 89 ++++++++++++++++++++++++++++++++++---------
+ src/seqtoolsUtils/utilities.h |  2 +-
+ 4 files changed, 93 insertions(+), 32 deletions(-)
+
+2012-09-24  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix some small bugs with load-file dialog
+ src/blixemApp/blxFetch.c  |  5 +++--
+ src/blixemApp/blxwindow.c | 19 +++++++++++--------
+ 2 files changed, 14 insertions(+), 10 deletions(-)
+
+2012-09-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Allow loading of non-native file formats using fetch methods
+ src/blixemApp/blixem_.h           |  11 +-
+ src/blixemApp/blxFetch.c          | 162 +++++++++++++++++------------
+ src/blixemApp/blxmain.c           |   8 +-
+ src/blixemApp/blxview.c           |  24 +++--
+ src/blixemApp/blxwindow.c         | 210 +++++++++++++++++++++++++++++++++++++-
+ src/dotterApp/dotterMain.c        |   5 +-
+ src/seqtoolsUtils/blxGff3Parser.h |  35 ++++---
+ src/seqtoolsUtils/blxparser.c     |  10 +-
+ src/seqtoolsUtils/blxparser.h     |   2 +-
+ src/seqtoolsUtils/utilities.c     |  18 ++++
+ src/seqtoolsUtils/utilities.h     |   3 +
+ 11 files changed, 382 insertions(+), 106 deletions(-)
+
+2012-10-15  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/copy_seq' into develop
+2012-10-15  Gemma Barson  <gb10 at sanger.ac.uk>
+ Warn user if they're about to copy a large amount of text to the clipboard
+ src/blixemApp/blxwindow.c | 34 +++++++++++++++++++++++++---------
+ src/blixemApp/blxwindow.h |  1 -
+ 2 files changed, 25 insertions(+), 10 deletions(-)
+
+2012-10-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Copy match and reference sequence to clipboard
+ src/blixemApp/blxwindow.c  | 846 +++++++++++++++++++++++++--------------------
+ src/blixemApp/detailview.c |  48 ++-
+ src/blixemApp/detailview.h | 254 +++++++-------
+ 3 files changed, 647 insertions(+), 501 deletions(-)
+
+2012-10-03  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix merge error
+ src/blixemApp/blxview.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2012-10-03  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'develop' into feature/sqlite
+2012-10-02  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'production' into develop
+2012-10-02  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'release/4.16' into production
+2012-09-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix Dotter blackout/crash bug if image is too large (RT 266561)
+ src/dotterApp/dotplot.c | 50 +++++++++++++++++++------------------------------
+ 1 file changed, 19 insertions(+), 31 deletions(-)
+
+2012-09-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ All dotter labels now use the font size from the GTK theme
+ src/dotterApp/dotplot.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+2012-09-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix a bug with dotter labels (RT 281848)
+ src/dotterApp/dotplot.c | 301 +++++++++++++++++++++++++++++++++++-------------
+ src/dotterApp/dotter.c  |   2 +-
+ src/dotterApp/dotter_.h |  15 +++
+ 3 files changed, 234 insertions(+), 84 deletions(-)
+
+2012-09-19  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix a harmless bug where duplicate data-types were being created when using the Load GFF File menu
+ src/seqtoolsUtils/blxGff3Parser.c | 26 +++++---------------------
+ 1 file changed, 5 insertions(+), 21 deletions(-)
+
+2012-09-19  Gemma Barson  <gb10 at sanger.ac.uk>
+ Removed font debug from release version
+ src/seqtoolsUtils/utilities.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2012-09-19  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated release notes for 4.16
+ src/doc/User_doc/release_notes.html | 18 ++++++++++++++++++
+ 1 file changed, 18 insertions(+)
+
+2012-09-19  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix link in About dialog in Dotter and Belvu
+ src/belvuApp/belvuWindow.c | 12 ++++++++++++
+ src/dotterApp/dotter.c     | 15 ++++++++++++++-
+ 2 files changed, 26 insertions(+), 1 deletion(-)
+
+2012-09-19  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix a bug where Blixem was passing the wrong coords to the fetch command (RT286051)
+ src/blixemApp/blxFetch.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+2012-09-19  Gemma Barson  <gb10 at sanger.ac.uk>
+ Add debug for font name
+ src/seqtoolsUtils/utilities.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+2012-09-19  Gemma Barson  <gb10 at sanger.ac.uk>
+ Add alternative name for dejavu font to preferred fonts list
+ src/seqtoolsUtils/utilities.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+2012-09-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix a bug where the sequence labels are cut short in Dotter's alignment view
+ src/blixemApp/detailview.c     | 2 +-
+ src/blixemApp/detailviewtree.c | 6 +++---
+ src/dotterApp/alignmenttool.c  | 4 ++--
+ src/seqtoolsUtils/utilities.c  | 7 +++++--
+ src/seqtoolsUtils/utilities.h  | 2 +-
+ 5 files changed, 12 insertions(+), 9 deletions(-)
+
+2012-09-07  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix a bug where the sequence was being overwritten for optional-fetch
+ src/blixemApp/blxFetch.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+2012-08-22  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix an issue where the pfetch dialog displays 'not fetched' when sequence data is not actually required
+ src/blixemApp/blxFetch.c | 17 +++++++++++------
+ 1 file changed, 11 insertions(+), 6 deletions(-)
+
+2012-08-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added cell data functions for generic columns
+ src/blixemApp/detailviewtree.c | 20 ++++++++++++++++++++
+ 1 file changed, 20 insertions(+)
+
+2012-08-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Info box now shows all of the feature's fields
+ src/blixemApp/blxwindow.c  |  8 +++++--
+ src/seqtoolsUtils/blxmsp.c | 59 ++++++++++++++++++++++++++++++++--------------
+ 2 files changed, 47 insertions(+), 20 deletions(-)
+
+2012-08-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Removed some unused functions
+ src/blixemApp/detailviewtree.c | 71 +++---------------------------------------
+ 1 file changed, 4 insertions(+), 67 deletions(-)
+
+2012-08-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Make generic text columns sortable
+ src/blixemApp/blxview.c    |  3 ++-
+ src/blixemApp/blxwindow.c  | 16 +++++++---------
+ src/blixemApp/detailview.c | 30 ++----------------------------
+ src/seqtoolsUtils/blxmsp.c | 26 ++++++++++++++++++++++----
+ src/seqtoolsUtils/blxmsp.h | 15 +++++++++++----
+ 5 files changed, 44 insertions(+), 46 deletions(-)
+
+2012-08-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Add description column
+ src/blixemApp/blixem_.h    | 2 +-
+ src/blixemApp/blxview.c    | 6 +++++-
+ src/seqtoolsUtils/blxmsp.c | 3 ++-
+ src/seqtoolsUtils/blxmsp.h | 3 ++-
+ 4 files changed, 10 insertions(+), 4 deletions(-)
+
+2012-08-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Embl tags are now stored in the column info rather than hard-coded
+ src/blixemApp/blxFetch.c   | 276 ++++++++++++++++++++++-----------------------
+ src/blixemApp/blxview.c    |  32 +++---
+ src/seqtoolsUtils/blxmsp.c |  26 ++++-
+ src/seqtoolsUtils/blxmsp.h |   9 +-
+ 4 files changed, 187 insertions(+), 156 deletions(-)
+
+2012-08-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix a bug in sqlite fetch where columns were not being found
+ src/blixemApp/blixem_.h    |  4 ++--
+ src/blixemApp/blxFetchDb.c | 25 +++++++++++++++++--------
+ 2 files changed, 19 insertions(+), 10 deletions(-)
+
+2012-08-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix a bug where parsed string was not being reset after parsing a field has finished
+ src/blixemApp/blxFetch.c | 65 +++++++++++++++++++++---------------------------
+ 1 file changed, 29 insertions(+), 36 deletions(-)
+
+2012-08-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix a crash caused by an uninitialised variable
+ src/seqtoolsUtils/blxmsp.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+2012-08-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Code tidying
+ src/blixemApp/blxFetch.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+2012-08-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Organism column now shows just the abbreviation
+ src/blixemApp/detailviewtree.c | 13 ++++++++++---
+ src/seqtoolsUtils/blxmsp.c     | 10 ++++++++++
+ src/seqtoolsUtils/blxmsp.h     |  2 ++
+ 3 files changed, 22 insertions(+), 3 deletions(-)
+
+2012-08-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix a bug in filtering whitespace out of parsed embl files
+ src/blixemApp/blxFetch.c | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
+
+2012-08-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Code refactoring
+ src/blixemApp/blxFetch.c | 657 ++++++++++++++++++-----------------------------
+ 1 file changed, 251 insertions(+), 406 deletions(-)
+
+2012-08-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Code tidying
+ src/blixemApp/blxFetch.c | 46 +++++++++++++++++++++++-----------------------
+ 1 file changed, 23 insertions(+), 23 deletions(-)
+
+2012-08-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix a bug with optional column data not being saved into the sequence
+ src/blixemApp/blxFetch.c   | 50 ++++++++++++++++++++++++++++++++++++++-------
+ src/blixemApp/blxwindow.c  |  3 +--
+ src/seqtoolsUtils/blxmsp.c | 51 +++++++++++++++++++++++-----------------------
+ src/seqtoolsUtils/blxmsp.h |  2 +-
+ 4 files changed, 70 insertions(+), 36 deletions(-)
+
+2012-08-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added a flag in the column info to control which columns are displayed in the mouse-over bar
+ src/blixemApp/blxview.c        | 62 ++++++++++++++++++++++--------------------
+ src/blixemApp/blxwindow.c      |  4 +--
+ src/blixemApp/detailview.c     |  2 +-
+ src/blixemApp/detailviewtree.c |  5 +++-
+ src/seqtoolsUtils/blxmsp.c     | 60 ++++++++++++++++++++++++----------------
+ src/seqtoolsUtils/blxmsp.h     |  5 ++--
+ 6 files changed, 78 insertions(+), 60 deletions(-)
+
+2012-08-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Column values are now stored in an array
+ src/blixemApp/blixem_.h              |   2 +-
+ src/blixemApp/blxFetch.c             | 206 ++++++++++--------
+ src/blixemApp/blxFetchDb.c           |  13 +-
+ src/blixemApp/blxdotter.c            |   8 +-
+ src/blixemApp/blxview.c              | 125 +++--------
+ src/blixemApp/blxwindow.c            |  67 ++----
+ src/blixemApp/detailview.c           |  15 +-
+ src/blixemApp/detailviewtree.c       |  41 ++--
+ src/blixemApp/sequencecellrenderer.c |   6 +-
+ src/seqtoolsUtils/blxmsp.c           | 397 +++++++++++++++++++++--------------
+ src/seqtoolsUtils/blxmsp.h           |  49 ++---
+ 11 files changed, 488 insertions(+), 441 deletions(-)
+
+2012-08-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fetch methods for loading optional columns are now specified in the config file
+ src/blixemApp/blixem_.h           | 19 +++++-----
+ src/blixemApp/blxFetch.c          | 76 ++++++++++++++++++++++++---------------
+ src/blixemApp/blxmain.c           |  7 ++--
+ src/blixemApp/blxview.c           | 12 +++----
+ src/blixemApp/blxwindow.c         | 21 +++++------
+ src/seqtoolsUtils/blxGff3Parser.c |  1 +
+ src/seqtoolsUtils/blxmsp.c        | 10 +++++-
+ src/seqtoolsUtils/blxmsp.h        | 14 ++++----
+ 8 files changed, 97 insertions(+), 63 deletions(-)
+
+2012-08-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Generalise columns code so columns list is no longer hard-coded
+ src/blixemApp/blixem_.h           |  67 +++--
+ src/blixemApp/blxFetch.c          |  82 +++---
+ src/blixemApp/blxmain.c           |   8 +-
+ src/blixemApp/blxview.c           | 346 +++++++++++++++++++++-
+ src/blixemApp/blxwindow.c         | 100 ++++---
+ src/blixemApp/blxwindow.h         |  95 +++---
+ src/blixemApp/detailview.c        | 376 ++----------------------
+ src/blixemApp/detailview.h        |  28 +-
+ src/blixemApp/detailviewtree.c    | 202 +++++++------
+ src/dotterApp/dotterMain.c        |   5 +-
+ src/seqtoolsUtils/blxGff3Parser.c |   7 +-
+ src/seqtoolsUtils/blxGff3Parser.h |   1 +
+ src/seqtoolsUtils/blxmsp.c        | 599 ++++++++++++++++++++------------------
+ src/seqtoolsUtils/blxmsp.h        |  71 ++++-
+ src/seqtoolsUtils/blxparser.c     |  92 ++++--
+ src/seqtoolsUtils/blxparser.h     |   2 +-
+ src/seqtoolsUtils/utilities.c     |  47 ---
+ src/seqtoolsUtils/utilities.h     |   2 -
+ 18 files changed, 1125 insertions(+), 1005 deletions(-)
+
+2012-08-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Make the sort-columns array the same size as the column list
+ src/blixemApp/blxwindow.c      |  8 +++++---
+ src/blixemApp/detailview.c     | 20 +++++++++++++-------
+ src/blixemApp/detailview.h     |  4 ++--
+ src/blixemApp/detailviewtree.c | 22 ++++++++++++----------
+ 4 files changed, 32 insertions(+), 22 deletions(-)
+
+2012-08-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Column types are now stored in the column struct
+ src/blixemApp/blixem_.h        |  23 +---
+ src/blixemApp/detailview.c     |  28 ++++-
+ src/blixemApp/detailview.h     | 249 +++++++++++++++++++++--------------------
+ src/blixemApp/detailviewtree.c |  25 ++++-
+ 4 files changed, 173 insertions(+), 152 deletions(-)
+
+2012-08-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Rename DetailViewColumnInfo to BlxColumnInfo
+ src/blixemApp/blxwindow.c      | 10 ++++-----
+ src/blixemApp/detailview.c     | 46 +++++++++++++++++++++---------------------
+ src/blixemApp/detailview.h     |  8 ++++----
+ src/blixemApp/detailviewtree.c | 10 ++++-----
+ 4 files changed, 37 insertions(+), 37 deletions(-)
+
+2012-08-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Add data type to column info struct
+ src/blixemApp/detailview.c | 26 ++++++++++++++------------
+ src/blixemApp/detailview.h |  1 +
+ 2 files changed, 15 insertions(+), 12 deletions(-)
+
+2012-08-08  Gemma Barson  <gb10 at sanger.ac.uk>
+ Remove usused argument to sequence-fetch functions
+ src/blixemApp/blixem_.h        |  4 +-
+ src/blixemApp/blxFetch.c       | 91 +++++++++++++-----------------------------
+ src/blixemApp/blxFetchDb.c     | 38 +++++++-----------
+ src/blixemApp/detailview.c     |  2 +-
+ src/blixemApp/detailviewtree.c |  2 +-
+ 5 files changed, 45 insertions(+), 92 deletions(-)
+
+2012-08-08  Gemma Barson  <gb10 at sanger.ac.uk>
+ Implement sqlite-fetch for interactively fetching sequences
+ src/blixemApp/blixem_.h    |   1 +
+ src/blixemApp/blxFetch.c   |  26 +++++----
+ src/blixemApp/blxFetchDb.c | 131 +++++++++++++++++++++++++++++++++++++--------
+ 3 files changed, 126 insertions(+), 32 deletions(-)
+
+2012-08-08  Gemma Barson  <gb10 at sanger.ac.uk>
+ Hard code the output type for sqlite-fetch
+ src/blixemApp/blxFetch.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+2012-08-08  Gemma Barson  <gb10 at sanger.ac.uk>
+ Remove debug code
+ src/blixemApp/blxFetchDb.c | 23 ++++++++++++++---------
+ src/blixemApp/blxmain.c    |  8 +-------
+ 2 files changed, 15 insertions(+), 16 deletions(-)
+
+2012-08-08  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added sqlite fetch code
+ src/Makefile.am            |  18 +++-
+ src/blixemApp/blixem_.h    |  52 +++++++++-
+ src/blixemApp/blxFetch.c   |  51 +++-------
+ src/blixemApp/blxFetchDb.c | 230 +++++++++++++++++++++++++++++++++++++++++++++
+ src/blixemApp/blxmain.c    |   8 +-
+ src/configure.ac           |   8 +-
+ src/seqtoolsUtils/blxmsp.c |  44 +++++++++
+ src/seqtoolsUtils/blxmsp.h |   1 +
+ 8 files changed, 363 insertions(+), 49 deletions(-)
+
+2012-09-03  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix a bug where the link in the About dialog did not work
+ src/blixemApp/blxwindow.c | 30 ++++++++++++++++++++----------
+ 1 file changed, 20 insertions(+), 10 deletions(-)
+
+2012-08-31  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'production' into develop
+2012-08-31  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'release/4.15' into production
+2012-08-29  Gemma Barson  <gb10 at sanger.ac.uk>
+ Use cairo for drawing text on dotplot
+ src/dotterApp/dotplot.c | 121 ++++++++++++++++++++++++++++--------------------
+ 1 file changed, 70 insertions(+), 51 deletions(-)
+
+2012-08-22  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix a regression where http-fetch was failing
+ src/blixemApp/blxFetch.c | 16 +++++++++-------
+ 1 file changed, 9 insertions(+), 7 deletions(-)
+
+2012-08-22  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix a regression where http-fetch was failing
+ src/blixemApp/blxFetch.c | 13 +++----------
+ 1 file changed, 3 insertions(+), 10 deletions(-)
+
+2012-08-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated release notes for 4.15
+ src/doc/User_doc/release_notes.html | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+2012-08-08  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix a typo with checking the path of an executable
+ src/blixemApp/blxFetch.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2012-08-03  Gemma Barson  <gb10 at sanger.ac.uk>
+ Check executables are in the path before trying to call them
+ src/belvuApp/belvu.c     | 35 +++++++++++++++++----------
+ src/blixemApp/blxFetch.c | 61 +++++++++++++++++++++++++++++++-----------------
+ 2 files changed, 63 insertions(+), 33 deletions(-)
+
+2012-08-03  Gemma Barson  <gb10 at sanger.ac.uk>
+ Make sure all stdout messages are flushed
+ src/belvuApp/belvu.c           | 118 ++++++++++++++++++++---------------------
+ src/belvuApp/belvuAlignment.c  |   6 +--
+ src/belvuApp/belvuConsPlot.c   |   8 +--
+ src/belvuApp/belvuMain.c       |  26 ++++-----
+ src/belvuApp/belvuTree.c       |  84 ++++++++++++++---------------
+ src/belvuApp/belvuWindow.c     |  44 +++++++--------
+ src/blixemApp/blxFetch.c       |  26 ++++-----
+ src/blixemApp/blxmain.c        |  10 ++--
+ src/blixemApp/blxview.c        |  10 ++--
+ src/blixemApp/blxwindow.c      |  14 ++---
+ src/blixemApp/detailview.c     |   4 +-
+ src/blixemApp/detailviewtree.c |   6 +--
+ src/dotterApp/alignmenttool.c  |   4 +-
+ src/dotterApp/dotplot.c        |   6 +--
+ src/dotterApp/dotter.c         |   8 +--
+ src/dotterApp/dotterMain.c     |   6 +--
+ src/seqtoolsUtils/utilities.c  |  46 ++++++----------
+ src/seqtoolsUtils/utilities.h  |   7 ++-
+ 18 files changed, 203 insertions(+), 230 deletions(-)
+
+2012-08-03  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix a bug where the source column is sometimes blank
+ src/blixemApp/detailviewtree.c | 43 ++++++++++++++++++++++++++++++++++++------
+ 1 file changed, 37 insertions(+), 6 deletions(-)
+
+2012-08-03  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix a bug where blixem column label text overlaps
+ src/blixemApp/detailview.c    |  2 +-
+ src/seqtoolsUtils/utilities.c | 20 ++------------------
+ 2 files changed, 3 insertions(+), 19 deletions(-)
+
+2012-08-02  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'release/4.14' into production
+2012-08-01  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix a bug where the 'Load optional data' option was not populating the data correctly
+ src/blixemApp/blixem_.h   |  3 +-
+ src/blixemApp/blxFetch.c  | 75 +++++++++++++++++++++++++++++++++++++----------
+ src/blixemApp/blxview.c   |  2 +-
+ src/blixemApp/blxwindow.c |  4 +--
+ 4 files changed, 64 insertions(+), 20 deletions(-)
+
+2012-07-31  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix a crash when parsing the results from an http fetch
+ src/blixemApp/blxFetch.c | 91 ++++++++++++++----------------------------------
+ 1 file changed, 26 insertions(+), 65 deletions(-)
+
+2012-07-25  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix a bug where the source was not being passed through to the fetch command
+ src/blixemApp/blxFetch.c | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+2012-07-23  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix a bug where bulk-fetching in blixem was not recognising errors in the fetched text
+ src/blixemApp/blxFetch.c | 19 +++++++++++++++++--
+ 1 file changed, 17 insertions(+), 2 deletions(-)
+
+2012-07-23  Gemma Barson  <gb10 at sanger.ac.uk>
+ Blixem now ignores leading/trailing whitespace around values in the config file
+ src/blixemApp/blxFetch.c      | 14 ++++++++++++--
+ src/seqtoolsUtils/utilities.c |  3 ++-
+ 2 files changed, 14 insertions(+), 3 deletions(-)
+
+2012-07-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/styles' into develop
+2012-07-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix a bug with setting default UTR colors
+ src/blixemApp/blxview.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+2012-07-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Small comment change
+ src/blixemApp/blxmain.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+2012-07-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ If cds colours are not given in the styles file they are now set to the default colors
+ src/blixemApp/blxview.c | 36 +++++++++++++++++++++++-------------
+ 1 file changed, 23 insertions(+), 13 deletions(-)
+
+2012-07-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Blixem can now read colors from inherited styles
+ src/blixemApp/blixem_.h |  18 +++-
+ src/blixemApp/blxmain.c | 270 ++++++++++++++++++++++++++++++++----------------
+ 2 files changed, 196 insertions(+), 92 deletions(-)
+
+2012-07-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix potential crash when reading styles file
+ src/blixemApp/blxmain.c       | 61 ++++++++++++++++++++++++++++---------------
+ src/blixemApp/blxview.c       |  1 -
+ src/seqtoolsUtils/utilities.c |  2 --
+ 3 files changed, 40 insertions(+), 24 deletions(-)
+
+2012-07-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ The path to the styles file can now be specified in the blixem config file
+ src/blixemApp/blixem_.h |  3 ++-
+ src/blixemApp/blxmain.c | 18 +++++++++++++++++-
+ 2 files changed, 19 insertions(+), 2 deletions(-)
+
+2012-07-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix a bug with setting transparency for styles
+ src/blixemApp/blxview.c | 5 +----
+ 1 file changed, 1 insertion(+), 4 deletions(-)
+
+2012-07-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Make white colours from the styles file transparent
+ src/blixemApp/blxview.c           | 62 ++++++++++++++++++++++++---------------
+ src/blixemApp/exonview.c          |  6 ++--
+ src/dotterApp/seqtoolsExonView.c  |  6 ++--
+ src/seqtoolsUtils/blxGff3Parser.c |  5 ++--
+ src/seqtoolsUtils/blxmsp.c        | 43 +++++++++++++++++++--------
+ src/seqtoolsUtils/blxmsp.h        |  5 ++--
+ 6 files changed, 79 insertions(+), 48 deletions(-)
+
+2012-07-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix error with unrecognised short option
+ src/blixemApp/blxmain.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2012-07-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated usage docs with new styles file format
+ src/blixemApp/blxmain.c           |  48 +++++++------
+ src/doc/User_doc/blixem_usage.txt | 139 ++++++++++++++++++++++----------------
+ 2 files changed, 106 insertions(+), 81 deletions(-)
+
+2012-07-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Blixem can now read colors from a zmap styles file
+ src/blixemApp/blxmain.c | 158 +++++++++++++++++++++++++++++++++++++++---------
+ 1 file changed, 129 insertions(+), 29 deletions(-)
+
+2012-07-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Reorganise styles file code
+ src/blixemApp/blxmain.c | 67 ++++++++++++++++++++++++++++++++++---------------
+ 1 file changed, 47 insertions(+), 20 deletions(-)
+
+2012-07-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/config' into develop
+2012-07-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated test plan
+ src/test/test_plan.ods | Bin 38241 -> 38902 bytes
+ 1 file changed, 0 insertions(+), 0 deletions(-)
+
+2012-07-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Improved error handling
+ src/blixemApp/blxFetch.c          | 333 ++++++++++++++++++++++++--------------
+ src/seqtoolsUtils/blxGff3Parser.c |   4 +-
+ src/seqtoolsUtils/utilities.c     |  15 +-
+ src/seqtoolsUtils/utilities.h     |   2 +-
+ 4 files changed, 226 insertions(+), 128 deletions(-)
+
+2012-07-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Code tidying
+ src/blixemApp/blixem_.h  |   2 +-
+ src/blixemApp/blxFetch.c | 212 +++++++++++++++++++++++++++--------------------
+ 2 files changed, 123 insertions(+), 91 deletions(-)
+
+2012-07-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Local config file now overrides command-line config file
+ src/blixemApp/blixem_.h       |   2 +-
+ src/blixemApp/blxFetch.c      | 179 +++++++++++++++++++++++-------------------
+ src/blixemApp/blxmain.c       |   5 +-
+ src/blixemApp/blxview.c       |  13 ++-
+ src/seqtoolsUtils/utilities.c |  40 +++++-----
+ 5 files changed, 127 insertions(+), 112 deletions(-)
+
+2012-07-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'production' into develop
+2012-07-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'hotfix/4.13.3' into production
+2012-07-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Make dotter use internal sequence rather than trying to fetch it
+ src/blixemApp/blxdotter.c | 5 -----
+ 1 file changed, 5 deletions(-)
+
+2012-07-02  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated release notes
+ src/doc/User_doc/release_notes.html | 10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
+
+2012-07-02  Gemma Barson  <gb10 at sanger.ac.uk>
+ Add new keyboard shortcuts to belvu docs
+ src/doc/User_doc/Belvu_manual.odt       | Bin 970098 -> 970146 bytes
+ src/doc/User_doc/Belvu_manual.pdf       | Bin 819755 -> 819868 bytes
+ src/doc/User_doc/belvu_quick_start.html | 122 +++++++++++++++++---------------
+ 3 files changed, 66 insertions(+), 56 deletions(-)
+
+2012-07-02  Gemma Barson  <gb10 at sanger.ac.uk>
+ Add Belvu keyboard shortcuts
+ src/belvuApp/belvuWindow.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+2012-06-26  Gemma Barson  <gb10 at sanger.ac.uk>
+ Allow user to cancel fetch dialog if fetch hangs
+ src/blixemApp/blxFetch.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+2012-06-22  Gemma Barson  <gb10 at sanger.ac.uk>
+ Catch segv faults and print backtrace
+ src/blixemApp/blxmain.c       |  4 ++++
+ src/seqtoolsUtils/utilities.c | 21 +++++++++++++++++++++
+ src/seqtoolsUtils/utilities.h |  2 ++
+ 3 files changed, 27 insertions(+)
+
+2012-06-22  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix an error that can occur when opening firefox
+ src/seqtoolsUtils/seqtoolsWebBrowser.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+2012-06-27  Ed Griffiths  <edgrif at sanger.ac.uk>
+ "minor comment change"
+ src/README | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+2012-06-19  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix a compile error where libpfetch was being compiled even if libcurl not available
+ src/Makefile.am | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+2012-06-19  Gemma Barson  <gb10 at sanger.ac.uk>
+ Change config file separator to ';' to be consistent with zmap
+ src/seqtoolsUtils/utilities.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+2012-06-18  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'production' into release/4.14
+2012-06-18  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'hotfix/4.13.2' into production
+2012-06-18  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated release notes
+ src/doc/User_doc/release_notes.html | 16 ++++++++++++++++
+ 1 file changed, 16 insertions(+)
+
+2012-06-18  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix compilation error on Ubuntu 12.02
+ src/Makefile.am | 9 ++++-----
+ 1 file changed, 4 insertions(+), 5 deletions(-)
+
+2012-06-15  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated release notes for 4.14
+ src/doc/User_doc/release_notes.html | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+2012-06-15  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated user manual with new config file instructions
+ src/doc/User_doc/Blixem_manual.odt | Bin 994719 -> 998860 bytes
+ src/doc/User_doc/Blixem_manual.pdf | Bin 766962 -> 778696 bytes
+ 2 files changed, 0 insertions(+), 0 deletions(-)
+
+2012-06-15  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix a bug where fetch was not re-tried after socket fetch fails
+ src/blixemApp/blxFetch.c | 50 ++++++++++++++++++++++++------------------------
+ 1 file changed, 25 insertions(+), 25 deletions(-)
+
+2012-06-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/config' into develop
+2012-06-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Add 'raw' output type and distinguish this from 'fasta'
+ src/blixemApp/blixem_.h  |  1 +
+ src/blixemApp/blxFetch.c | 94 ++++++++++++++++++++++++------------------------
+ 2 files changed, 49 insertions(+), 46 deletions(-)
+
+2012-06-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Code tidying
+ src/blixemApp/blxFetch.c | 404 +++++++++++++++++------------------------------
+ 1 file changed, 145 insertions(+), 259 deletions(-)
+
+2012-06-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix a bug with checking the fetch error string
+ src/blixemApp/blxFetch.c | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+2012-06-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Remove hard-coded 'no match' and 'not authorized' checks
+ src/blixemApp/blxFetch.c | 98 ++++++++++++++++++++++++++++++++----------------
+ 1 file changed, 66 insertions(+), 32 deletions(-)
+
+2012-06-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Read expected error messages from fetch config
+ src/blixemApp/blixem_.h       |  2 ++
+ src/blixemApp/blxFetch.c      | 53 +++++++------------------------------------
+ src/seqtoolsUtils/utilities.c | 39 +++++++++++++++++++++++++++++++
+ src/seqtoolsUtils/utilities.h |  2 ++
+ 4 files changed, 51 insertions(+), 45 deletions(-)
+
+2012-06-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix an issue where re-trying after http fetch would pop up a second window
+ src/blixemApp/blixem_.h        |  2 +-
+ src/blixemApp/blxFetch.c       | 83 ++++++++++++++++++++++++++----------------
+ src/blixemApp/detailview.c     |  2 +-
+ src/blixemApp/detailviewtree.c |  2 +-
+ src/seqtoolsUtils/utilities.c  | 52 +++++++++++++++++---------
+ src/seqtoolsUtils/utilities.h  |  2 +-
+ 6 files changed, 90 insertions(+), 53 deletions(-)
+
+2012-06-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Dotter no longer fetches sequence data
+ src/blixemApp/blxdotter.c | 12 +++++++++---
+ 1 file changed, 9 insertions(+), 3 deletions(-)
+
+2012-06-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Remove delimiters from fetch method config values
+ src/blixemApp/blxFetch.c | 119 ++++++++++++++++++++++++++++++++---------------
+ 1 file changed, 82 insertions(+), 37 deletions(-)
+
+2012-06-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Remove incorrect dependency on data type for fetching optional data
+ src/seqtoolsUtils/blxmsp.c | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+2012-06-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/config' into develop
+2012-06-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Add a separator field to the config for separating lists of sequence names to fetch
+ src/blixemApp/blixem_.h   | 4 +++-
+ src/blixemApp/blxFetch.c  | 6 +++++-
+ src/libpfetch/libpfetch.c | 5 ++---
+ 3 files changed, 10 insertions(+), 5 deletions(-)
+
+2012-06-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix a bug with default methods not being used
+ src/seqtoolsUtils/blxmsp.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+2012-06-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Remove unused pfetch fields
+ src/blixemApp/blxFetch.c | 25 +++----------------------
+ 1 file changed, 3 insertions(+), 22 deletions(-)
+
+2012-06-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix bugs with new config for http fetch
+ src/blixemApp/blixem_.h   |   8 +-
+ src/blixemApp/blxFetch.c  | 312 +++++++++++++++++++++++++++++++++-------------
+ src/libpfetch/libpfetch.c |  73 ++---------
+ 3 files changed, 242 insertions(+), 151 deletions(-)
+
+2012-06-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Small improvement to error message
+ src/blixemApp/blxFetch.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+2012-06-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Add optional file tag to GFF and config file
+ src/blixemApp/blxFetch.c          |  7 +++++++
+ src/seqtoolsUtils/blxGff3Parser.c | 34 +++++++++++++++++++++++++++++++++-
+ src/seqtoolsUtils/blxmsp.c        |  6 ++++--
+ src/seqtoolsUtils/blxmsp.h        |  5 +++--
+ src/seqtoolsUtils/blxparser.c     | 12 ++++++------
+ 5 files changed, 53 insertions(+), 11 deletions(-)
+
+2012-06-11  Gemma Barson  <gb10 at sanger.ac.uk>
+ Remove unused 'url' field in MSP struct
+ src/seqtoolsUtils/blxGff3Parser.c | 14 +-------------
+ src/seqtoolsUtils/blxmsp.c        |  9 ++-------
+ src/seqtoolsUtils/blxmsp.h        |  2 +-
+ src/seqtoolsUtils/blxparser.c     | 12 ++++++------
+ 4 files changed, 10 insertions(+), 27 deletions(-)
+
+2012-06-11  Gemma Barson  <gb10 at sanger.ac.uk>
+ Add source to substitution variables
+ src/blixemApp/blxFetch.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+2012-06-11  Gemma Barson  <gb10 at sanger.ac.uk>
+ Implement internal fetch mode
+ src/blixemApp/blixem_.h  |  4 ++-
+ src/blixemApp/blxFetch.c | 76 ++++++++++++++++++++++++++++++++++++++++++------
+ 2 files changed, 70 insertions(+), 10 deletions(-)
+
+2012-06-01  Gemma Barson  <gb10 at sanger.ac.uk>
+ Provide a utility to get the fetch output type as a string
+ src/blixemApp/blixem_.h  |   9 ++-
+ src/blixemApp/blxFetch.c | 147 +++++++++++++++++++++++++++++++----------------
+ 2 files changed, 103 insertions(+), 53 deletions(-)
+
+2012-06-01  Gemma Barson  <gb10 at sanger.ac.uk>
+ Move all fetch code to blxFetch.c
+ src/blixemApp/blxFetch.c | 828 +++++++++++++++++++++++++++++++++++++++--------
+ src/blixemApp/blxview.c  | 552 -------------------------------
+ 2 files changed, 691 insertions(+), 689 deletions(-)
+
+2012-06-01  Gemma Barson  <gb10 at sanger.ac.uk>
+ Provide utility to get fetch mode as string
+ src/blixemApp/blixem_.h  | 11 ++---------
+ src/blixemApp/blxFetch.c | 45 +++++++++++++++++++++++++++++++++++++--------
+ 2 files changed, 39 insertions(+), 17 deletions(-)
+
+2012-06-01  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix a crash that happens if there is no config file
+ src/seqtoolsUtils/blxGff3Parser.c | 15 +++++++++------
+ 1 file changed, 9 insertions(+), 6 deletions(-)
+
+2012-05-31  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix a bug where features were not being linked under the same parent correctly
+ src/seqtoolsUtils/blxmsp.c | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+2012-05-31  Gemma Barson  <gb10 at sanger.ac.uk>
+ Add error handling for bad fetch commands
+ src/blixemApp/blixem_.h  |   2 +-
+ src/blixemApp/blxFetch.c |  90 ++++++++++++++++++++++++++++++-----------
+ src/blixemApp/blxview.c  | 102 +++++++++++++++++++++++++++--------------------
+ 3 files changed, 125 insertions(+), 69 deletions(-)
+
+2012-05-30  Gemma Barson  <gb10 at sanger.ac.uk>
+ Add link-features-by-name option to config file
+ src/blixemApp/blixem_.h           |  5 ++-
+ src/blixemApp/blxFetch.c          | 27 ++++++------
+ src/blixemApp/blxview.c           |  2 +-
+ src/blixemApp/blxwindow.c         |  3 +-
+ src/dotterApp/dotterMain.c        |  2 +-
+ src/seqtoolsUtils/blxGff3Parser.c | 34 ++++++++++++++-
+ src/seqtoolsUtils/blxmsp.c        | 87 ++++++++++++++++++++++++---------------
+ src/seqtoolsUtils/blxmsp.h        | 12 ++++--
+ src/seqtoolsUtils/blxparser.c     | 12 +++---
+ 9 files changed, 121 insertions(+), 63 deletions(-)
+
+2012-05-30  Gemma Barson  <gb10 at sanger.ac.uk>
+ Improve error handling when reading config file
+ src/blixemApp/blxFetch.c      | 7 ++++++-
+ src/seqtoolsUtils/blxmsp.c    | 2 +-
+ src/seqtoolsUtils/utilities.c | 6 ++----
+ 3 files changed, 9 insertions(+), 6 deletions(-)
+
+2012-05-30  Gemma Barson  <gb10 at sanger.ac.uk>
+ Improve error handling when setting up sockets
+ src/blixemApp/blxFetch.c | 130 ++++++++++++++++++++++++++---------------------
+ 1 file changed, 73 insertions(+), 57 deletions(-)
+
+2012-05-30  Gemma Barson  <gb10 at sanger.ac.uk>
+ New fetch code now supports the old default-pfetch-method key for backwards compatibility
+ src/blixemApp/blxFetch.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+2012-05-30  Gemma Barson  <gb10 at sanger.ac.uk>
+ Remove unused variable
+ src/seqtoolsUtils/utilities.c | 2 --
+ 1 file changed, 2 deletions(-)
+
+2012-05-29  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix rebase error; wrong type used for utility function
+ src/seqtoolsUtils/utilities.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+2012-05-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix a spurious error message when fetch method is 'none'
+ src/blixemApp/blxFetch.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+2012-05-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix misleading function name
+ src/blixemApp/blxview.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+2012-05-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix a bug where default fetch method list was being used even though custom fetch method list had been set
+ src/seqtoolsUtils/blxmsp.c | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+2012-05-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Check the output type is valid for command-fetch methods
+ src/blixemApp/blxview.c | 40 ++++++++++++++++++++++++++++++++++++----
+ 1 file changed, 36 insertions(+), 4 deletions(-)
+
+2012-05-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix bug with appending null string to fetch command
+ src/blixemApp/blxFetch.c | 9 ++++++---
+ 1 file changed, 6 insertions(+), 3 deletions(-)
+
+2012-05-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Better user message text
+ src/blixemApp/blxFetch.c | 2 +-
+ src/blixemApp/blxview.c  | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+2012-05-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix a rebase error; wrong type returned from utility function
+ src/seqtoolsUtils/utilities.c | 9 +++------
+ src/seqtoolsUtils/utilities.h | 2 +-
+ 2 files changed, 4 insertions(+), 7 deletions(-)
+
+2012-05-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix an issue where blixem would try to fetch data not relevant to the fetch method used
+ src/blixemApp/blxFetch.c |  2 +-
+ src/blixemApp/blxview.c  | 84 +++++++++++++++++++++++++++++++++++++-----------
+ 2 files changed, 66 insertions(+), 20 deletions(-)
+
+2012-05-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix a bug with fetching using secondary fetch methods
+ src/blixemApp/blxFetch.c   |  2 +-
+ src/blixemApp/blxview.c    | 16 +++++++++++-----
+ src/seqtoolsUtils/blxmsp.c |  4 ++--
+ 3 files changed, 14 insertions(+), 8 deletions(-)
+
+2012-05-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Variation urls are now specified in config
+ src/blixemApp/detailview.c           |   23 +-
+ src/test/data/chr4_dna_align.gff     | 2366 +++++++++++++++++-----------------
+ src/test/data/chr4_protein_align.gff | 2366 +++++++++++++++++-----------------
+ 3 files changed, 2369 insertions(+), 2386 deletions(-)
+
+2012-05-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ New config fetch methods now mostly working
+ src/blixemApp/blixem_.h            | 224 +++++-----
+ src/blixemApp/blxFetch.c           | 866 +++++++++++++++++++++----------------
+ src/blixemApp/blxdotter.c          | 118 +----
+ src/blixemApp/blxmain.c            |  10 +-
+ src/blixemApp/blxview.c            | 596 +++++++++++--------------
+ src/blixemApp/blxwindow.c          |  27 +-
+ src/blixemApp/blxwindow.h          |   2 -
+ src/blixemApp/detailviewtree.c     |   9 +-
+ src/libpfetch/libpfetch-cmarshal.c |   6 +-
+ src/libpfetch/libpfetch-cmarshal.h |   4 +-
+ src/seqtoolsUtils/blxGff3Parser.c  |  12 +-
+ src/seqtoolsUtils/blxmsp.c         |  44 +-
+ src/seqtoolsUtils/blxmsp.h         |  21 +-
+ src/seqtoolsUtils/utilities.c      |  33 ++
+ src/seqtoolsUtils/utilities.h      |   2 +
+ 15 files changed, 966 insertions(+), 1008 deletions(-)
+
+2012-05-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ WIP
+ src/blixemApp/blixem_.h   |  35 ++++++++++----
+ src/blixemApp/blxFetch.c  | 116 ++++++++++++++++++++++++++++++++++++++--------
+ src/blixemApp/blxwindow.c |   8 +---
+ 3 files changed, 123 insertions(+), 36 deletions(-)
+
+2012-05-15  Gemma Barson  <gb10 at sanger.ac.uk>
+ WIP: generalise fetch methods
+ src/blixemApp/blixem_.h           | 102 ++++---
+ src/blixemApp/blxFetch.c          | 583 +++++++-------------------------------
+ src/blixemApp/blxdotter.c         |   2 +-
+ src/blixemApp/blxmain.c           |   7 +-
+ src/blixemApp/blxview.c           |  71 ++---
+ src/blixemApp/blxwindow.c         |  43 ++-
+ src/blixemApp/blxwindow.h         |   1 -
+ src/blixemApp/detailviewtree.c    |   9 +-
+ src/seqtoolsUtils/blxGff3Parser.c |  63 ++--
+ src/seqtoolsUtils/blxmsp.c        |  47 ++-
+ src/seqtoolsUtils/blxmsp.h        |  22 +-
+ 11 files changed, 323 insertions(+), 627 deletions(-)
+
+2012-05-31  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'production' into develop
+2012-05-31  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'hotfix/4.13.1' into production
+2012-05-31  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix a bug where features were not being linked under the same parent correctly
+ src/seqtoolsUtils/blxmsp.c | 14 +++++++++++---
+ 1 file changed, 11 insertions(+), 3 deletions(-)
+
+2012-05-31  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix a bug where features were not being linked under the same parent correctly
+ src/seqtoolsUtils/blxmsp.c | 14 +++++++++++---
+ 1 file changed, 11 insertions(+), 3 deletions(-)
+
+2012-05-29  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'production' into develop
+2012-05-29  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'release/4.13' into production
+2012-05-29  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated release notes
+ src/doc/User_doc/release_notes.html | 15 +++++++++++++++
+ 1 file changed, 15 insertions(+)
+
+2012-05-24  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/dotter_crash' into develop
+2012-05-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ WIP: Fix a crash for long, skinny plots
+ src/dotterApp/dotplot.c | 29 ++++++++++++++++++++++++-----
+ 1 file changed, 24 insertions(+), 5 deletions(-)
+
+2012-05-18  Gemma Barson  <gb10 at sanger.ac.uk>
+ If fetch fails, display stored sequence data instead
+ src/blixemApp/blixem_.h        |   2 +-
+ src/blixemApp/blxFetch.c       |  90 ++++++++++++++++++----------
+ src/blixemApp/detailviewtree.c |   3 +-
+ src/seqtoolsUtils/blxmsp.c     |  14 +++++
+ src/seqtoolsUtils/blxmsp.h     | 129 +++++++++++++++++++++--------------------
+ src/seqtoolsUtils/utilities.c  |  21 ++++---
+ src/seqtoolsUtils/utilities.h  |   2 +-
+ 7 files changed, 154 insertions(+), 107 deletions(-)
+
+2012-05-18  Gemma Barson  <gb10 at sanger.ac.uk>
+ Blixem no longer quits if you cancel the sequence fetch
+ src/blixemApp/blxview.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+2012-05-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix a bug where the squash-matches command-line argument was being overriden by the saved settings
+ src/blixemApp/blxwindow.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+2012-05-02  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'production' into develop
+2012-04-30  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'release/4.12' into production
+2012-04-27  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with printing labels in dotter alignment tool
+ src/blixemApp/detailview.c     |   7 -
+ src/blixemApp/detailviewtree.c |  29 ++--
+ src/dotterApp/alignmenttool.c  |   6 +-
+ src/seqtoolsUtils/utilities.c  |  39 ++++-
+ src/seqtoolsUtils/utilities.h  | 328 +++++++++++++++++++++--------------------
+ 5 files changed, 217 insertions(+), 192 deletions(-)
+
+2012-04-25  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix a bug where Ctrl-P printed the wrong window when called from the alignment tool
+ src/dotterApp/dotter.c | 23 -----------------------
+ 1 file changed, 23 deletions(-)
+
+2012-04-25  Gemma Barson  <gb10 at sanger.ac.uk>
+ Alignment tool now has white background when printed
+ src/dotterApp/alignmenttool.c | 27 ++++++++++++++++++++++-----
+ 1 file changed, 22 insertions(+), 5 deletions(-)
+
+2012-04-25  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/dotter_select' into develop
+2012-04-25  Gemma Barson  <gb10 at sanger.ac.uk>
+ Make sure the primary buffer is not overwritten accidentally
+ src/dotterApp/alignmenttool.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+2012-04-25  Gemma Barson  <gb10 at sanger.ac.uk>
+ Removed debug output
+ src/dotterApp/alignmenttool.c | 4 ----
+ 1 file changed, 4 deletions(-)
+
+2012-04-24  Gemma Barson  <gb10 at sanger.ac.uk>
+ Code tidying
+ src/dotterApp/alignmenttool.c | 30 +++++++++++++++---------------
+ 1 file changed, 15 insertions(+), 15 deletions(-)
+
+2012-04-24  Gemma Barson  <gb10 at sanger.ac.uk>
+ Make sure we don't index out of range in case of bad coords
+ src/dotterApp/alignmenttool.c | 12 ++++++++++--
+ 1 file changed, 10 insertions(+), 2 deletions(-)
+
+2012-04-24  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed some bugs with sequence selection for reverse strand and offet sequences
+ src/dotterApp/alignmenttool.c | 130 ++++++++++++++++++++++++++++++++----------
+ src/dotterApp/dotter.c        |  30 ++++++++++
+ src/dotterApp/dotter_.h       |  87 ++++++++++++++--------------
+ 3 files changed, 175 insertions(+), 72 deletions(-)
+
+2012-04-23  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added menu item for 'clear selection'
+ src/dotterApp/alignmenttool.c | 44 ++++++++++++-------------------------------
+ 1 file changed, 12 insertions(+), 32 deletions(-)
+
+2012-04-23  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed an issue with highlighting multiple sequences
+ src/dotterApp/alignmenttool.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2012-04-23  Gemma Barson  <gb10 at sanger.ac.uk>
+ Improved menu items for selections
+ src/dotterApp/alignmenttool.c | 76 ++++++++++++++++++++-----------------------
+ 1 file changed, 35 insertions(+), 41 deletions(-)
+
+2012-04-23  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added menu item to copy selection coords
+ src/dotterApp/alignmenttool.c | 65 +++++++++++++++++++++++++++++++++++--------
+ 1 file changed, 53 insertions(+), 12 deletions(-)
+
+2012-04-23  Gemma Barson  <gb10 at sanger.ac.uk>
+ Copying coords in dotter now places them on the primary clipboard
+ src/dotterApp/alignmenttool.c | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+2012-04-23  Gemma Barson  <gb10 at sanger.ac.uk>
+ Escape key now cancels text selection
+ src/dotterApp/alignmenttool.c | 19 ++++++++++++++++---
+ 1 file changed, 16 insertions(+), 3 deletions(-)
+
+2012-04-23  Gemma Barson  <gb10 at sanger.ac.uk>
+ Ctrl-C now copies selected text to default clipboard
+ src/dotterApp/alignmenttool.c | 54 +++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 54 insertions(+)
+
+2012-04-23  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with double-click selection
+ src/dotterApp/alignmenttool.c | 42 ++++++++++++++++++++++++------------------
+ 1 file changed, 24 insertions(+), 18 deletions(-)
+
+2012-04-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Double-click highlights visibile sequence
+ src/dotterApp/alignmenttool.c | 101 ++++++++++++++++++++++++++++++++++--------
+ 1 file changed, 83 insertions(+), 18 deletions(-)
+
+2012-04-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Selected sequence is now highlighted
+ src/dotterApp/alignmenttool.c | 292 ++++++++++++++++++++++++++----------------
+ 1 file changed, 185 insertions(+), 107 deletions(-)
+
+2012-04-19  Gemma Barson  <gb10 at sanger.ac.uk>
+ Selected text is now placed on primary clipboard
+ src/dotterApp/alignmenttool.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+2012-04-19  Gemma Barson  <gb10 at sanger.ac.uk>
+ WIP: selecting sequence in dotter
+ src/dotterApp/alignmenttool.c | 117 ++++++++++++++++++++++++++++++++++--------
+ 1 file changed, 97 insertions(+), 20 deletions(-)
+
+2012-04-19  Gemma Barson  <gb10 at sanger.ac.uk>
+ WIP: select sequence from the alignment tool in dotter
+ src/dotterApp/alignmenttool.c | 403 ++++++++++++++++++++++++++++--------------
+ 1 file changed, 269 insertions(+), 134 deletions(-)
+
+2012-04-23  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added more dotter example cases
+ src/examples/Q9H8G1.fasta                  |  1 +
+ src/examples/README                        | 12 +++++++++---
+ src/examples/chr4_translation_frame1.fasta |  1 +
+ 3 files changed, 11 insertions(+), 3 deletions(-)
+
+2012-04-23  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix a problem with the background color after printing
+ src/dotterApp/dotter.c | 865 +++++++++++++++++++++++++------------------------
+ 1 file changed, 437 insertions(+), 428 deletions(-)
+
+2012-04-23  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix bad coords in the rev strand when the alignment tool length is even
+ src/dotterApp/alignmenttool.c | 10 +++++++---
+ 1 file changed, 7 insertions(+), 3 deletions(-)
+
+2012-04-23  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a regression where the greyramp tool had the wrong context menu
+ src/dotterApp/greyramptool.c | 3 ---
+ 1 file changed, 3 deletions(-)
+
+2012-04-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated release notes
+ src/doc/User_doc/release_notes.html | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+2012-04-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Removed duplicate sequence data from the sample gff files
+ src/test/data/chr4_dna_align.gff     |  908 ++---
+ src/test/data/chr4_protein_align.gff | 6062 +++++++++++++++++-----------------
+ 2 files changed, 3485 insertions(+), 3485 deletions(-)
+
+2012-04-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated copyright notices to 2012
+ src/belvuApp/belvu.c                   | 9 +--------
+ src/belvuApp/belvuAlignment.c          | 2 +-
+ src/belvuApp/belvuAlignment.h          | 2 +-
+ src/belvuApp/belvuConsPlot.c           | 2 +-
+ src/belvuApp/belvuConsPlot.h           | 2 +-
+ src/belvuApp/belvuMain.c               | 2 +-
+ src/belvuApp/belvuTree.c               | 2 +-
+ src/belvuApp/belvuTree.h               | 4 ++--
+ src/belvuApp/belvuWindow.c             | 2 +-
+ src/belvuApp/belvuWindow.h             | 2 +-
+ src/belvuApp/belvu_.h                  | 2 +-
+ src/blixemApp/bigpicture.c             | 2 +-
+ src/blixemApp/bigpicture.h             | 2 +-
+ src/blixemApp/bigpicturegrid.c         | 2 +-
+ src/blixemApp/bigpicturegrid.h         | 2 +-
+ src/blixemApp/blixem_.h                | 2 +-
+ src/blixemApp/blxFetch.c               | 2 +-
+ src/blixemApp/blxdotter.c              | 2 +-
+ src/blixemApp/blxdotter.h              | 2 +-
+ src/blixemApp/blxmain.c                | 2 +-
+ src/blixemApp/blxview.c                | 2 +-
+ src/blixemApp/blxview.h                | 2 +-
+ src/blixemApp/blxwindow.c              | 2 +-
+ src/blixemApp/blxwindow.h              | 2 +-
+ src/blixemApp/coverageview.c           | 2 +-
+ src/blixemApp/coverageview.h           | 4 ++--
+ src/blixemApp/detailview.c             | 2 +-
+ src/blixemApp/detailview.h             | 2 +-
+ src/blixemApp/detailviewtree.c         | 2 +-
+ src/blixemApp/detailviewtree.h         | 2 +-
+ src/blixemApp/exonview.c               | 2 +-
+ src/blixemApp/exonview.h               | 2 +-
+ src/blixemApp/sequencecellrenderer.c   | 2 +-
+ src/blixemApp/sequencecellrenderer.h   | 2 +-
+ src/dotterApp/alignmenttool.c          | 2 +-
+ src/dotterApp/dotplot.c                | 2 +-
+ src/dotterApp/dotter.c                 | 2 +-
+ src/dotterApp/dotter.h                 | 2 +-
+ src/dotterApp/dotterKarlin.c           | 2 +-
+ src/dotterApp/dotterMain.c             | 2 +-
+ src/dotterApp/dotter_.h                | 2 +-
+ src/dotterApp/greyramptool.c           | 2 +-
+ src/dotterApp/seqtoolsExonView.c       | 2 +-
+ src/dotterApp/seqtoolsExonView.h       | 2 +-
+ src/libpfetch/libcurlobject.c          | 2 +-
+ src/libpfetch/libcurlobject.h          | 2 +-
+ src/libpfetch/libcurlobject_I.h        | 2 +-
+ src/libpfetch/libpfetch-utils.c        | 2 +-
+ src/libpfetch/libpfetch.c              | 2 +-
+ src/libpfetch/libpfetch.h              | 2 +-
+ src/libpfetch/libpfetch_I.h            | 2 +-
+ src/libpfetch/libpfetch_P.h            | 2 +-
+ src/seqtoolsUtils/blxGff3Parser.c      | 2 +-
+ src/seqtoolsUtils/blxGff3Parser.h      | 2 +-
+ src/seqtoolsUtils/blxmsp.c             | 2 +-
+ src/seqtoolsUtils/blxmsp.h             | 2 +-
+ src/seqtoolsUtils/blxparser.c          | 2 +-
+ src/seqtoolsUtils/blxparser.h          | 2 +-
+ src/seqtoolsUtils/iupac.h              | 2 +-
+ src/seqtoolsUtils/seqtoolsWebBrowser.c | 2 +-
+ src/seqtoolsUtils/translate.c          | 2 +-
+ src/seqtoolsUtils/utilities.c          | 2 +-
+ src/seqtoolsUtils/utilities.h          | 2 +-
+ src/seqtoolsUtils/version.h            | 2 +-
+ 64 files changed, 66 insertions(+), 73 deletions(-)
+
+2012-04-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'production' into develop
+2012-04-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Inlcude examples directory in the distribution
+ src/Makefile.am | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+2012-04-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Revert "Revert "Fix a regression where matches were misaligned due to problems reading the cigar string""
+ src/seqtoolsUtils/blxGff3Parser.c | 13 ++++++-------
+ 1 file changed, 6 insertions(+), 7 deletions(-)
+
+2012-04-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Revert "Revert "Updated release notes""
+ src/doc/User_doc/release_notes.html | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+2012-04-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Revert "Revert "Merge branch 'feature/cigar' into develop""
+ src/blixemApp/blixem_.h           |   2 +-
+ src/blixemApp/blxFetch.c          |  28 +++---
+ src/blixemApp/blxview.c           |   5 +-
+ src/blixemApp/blxwindow.c         |  19 +++-
+ src/blixemApp/detailview.c        |   9 +-
+ src/blixemApp/detailviewtree.c    |  27 ++++--
+ src/dotterApp/dotterMain.c        |   2 +-
+ src/seqtoolsUtils/blxGff3Parser.c |  74 ++++++++++++---
+ src/seqtoolsUtils/blxmsp.c        | 189 +++++++++++++++++++++++++++-----------
+ src/seqtoolsUtils/blxmsp.h        |   3 +-
+ src/seqtoolsUtils/utilities.c     |   6 +-
+ 11 files changed, 262 insertions(+), 102 deletions(-)
+
+2012-04-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Revert "Revert "Fixed a refresh problem when selecting variations""
+ src/blixemApp/blxwindow.c      |  3 +--
+ src/blixemApp/detailview.c     | 15 +++++++++------
+ src/blixemApp/detailview.h     |  2 +-
+ src/blixemApp/detailviewtree.c |  3 +--
+ 4 files changed, 12 insertions(+), 11 deletions(-)
+
+2012-04-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Revert "Revert "Fixed a bug in protein blixem where you could not select a feature in the variations track""
+ src/blixemApp/detailview.c | 1379 ++++++++++++++++++++++++--------------------
+ src/blixemApp/detailview.h |    5 +-
+ 2 files changed, 749 insertions(+), 635 deletions(-)
+
+2012-04-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Revert "Revert "Fixed a typo on the Settings dialog (RT:254611)""
+ src/blixemApp/blxwindow.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2012-04-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'hotfix/4.10.1' into production
+2012-04-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Revert "Fixed a typo on the Settings dialog (RT:254611)"
+ src/blixemApp/blxwindow.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2012-04-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Revert "Fixed a bug in protein blixem where you could not select a feature in the variations track"
+ src/blixemApp/detailview.c | 1379 ++++++++++++++++++++------------------------
+ src/blixemApp/detailview.h |    5 +-
+ 2 files changed, 635 insertions(+), 749 deletions(-)
+
+2012-04-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Revert "Fixed a refresh problem when selecting variations"
+ src/blixemApp/blxwindow.c      |  3 ++-
+ src/blixemApp/detailview.c     | 15 ++++++---------
+ src/blixemApp/detailview.h     |  2 +-
+ src/blixemApp/detailviewtree.c |  3 ++-
+ 4 files changed, 11 insertions(+), 12 deletions(-)
+
+2012-04-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Revert "Merge branch 'feature/cigar' into develop"
+ src/blixemApp/blixem_.h           |   2 +-
+ src/blixemApp/blxFetch.c          |  28 +++---
+ src/blixemApp/blxview.c           |   5 +-
+ src/blixemApp/blxwindow.c         |  19 +---
+ src/blixemApp/detailview.c        |   9 +-
+ src/blixemApp/detailviewtree.c    |  27 ++----
+ src/dotterApp/dotterMain.c        |   2 +-
+ src/seqtoolsUtils/blxGff3Parser.c |  74 +++------------
+ src/seqtoolsUtils/blxmsp.c        | 189 +++++++++++---------------------------
+ src/seqtoolsUtils/blxmsp.h        |   3 +-
+ src/seqtoolsUtils/utilities.c     |   6 +-
+ 11 files changed, 102 insertions(+), 262 deletions(-)
+
+2012-04-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Revert "Updated release notes"
+ src/doc/User_doc/release_notes.html | 12 ------------
+ 1 file changed, 12 deletions(-)
+
+2012-04-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Revert "Fix a regression where matches were misaligned due to problems reading the cigar string"
+ src/seqtoolsUtils/blxGff3Parser.c | 13 +++++++------
+ 1 file changed, 7 insertions(+), 6 deletions(-)
+
+2012-04-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added examples directory
+ src/README                            |  4 +++-
+ src/doc/User_doc/release_notes.html   | 11 +++++++++++
+ src/examples/DA730641.fasta           |  1 +
+ src/examples/PF02171_seed.stock       |  1 +
+ src/examples/README                   | 18 ++++++++++++++++++
+ src/examples/chr4_dna_align.gff       |  1 +
+ src/examples/chr4_protein_align.gff   |  1 +
+ src/examples/chr4_ref_seq.fasta       |  1 +
+ src/examples/chr4_ref_seq_short.fasta |  1 +
+ 9 files changed, 38 insertions(+), 1 deletion(-)
+
+2012-04-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Small update to test README doc
+ src/test/README | 1 +
+ 1 file changed, 1 insertion(+)
+
+2012-04-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed incorrect return value from blixem
+ src/belvuApp/belvuMain.c   | 2 +-
+ src/blixemApp/blxmain.c    | 3 +--
+ src/dotterApp/dotterMain.c | 2 +-
+ 3 files changed, 3 insertions(+), 4 deletions(-)
+
+2012-04-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated test scripts README
+ src/test/README | 10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
+
+2012-04-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added some simple automated blixem tests
+ src/test/scripts/automated/blixem/test1         |  26 +++
+ src/test/scripts/automated/blixem/test1_results | 207 ++++++++++++++++++++++++
+ src/test/scripts/automated/blixem/test2         |  26 +++
+ src/test/scripts/automated/blixem/test2_results | 123 ++++++++++++++
+ 4 files changed, 382 insertions(+)
+
+2012-04-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Improvements to belvu automated tests
+ src/test/scripts/automated/belvu/test1          | 23 +++++++++++++++++++++--
+ src/test/scripts/automated/belvu/test10         | 24 ++++++++++++++++++++++--
+ src/test/scripts/automated/belvu/test11         | 24 ++++++++++++++++++++++--
+ src/test/scripts/automated/belvu/test12         | 24 ++++++++++++++++++++++--
+ src/test/scripts/automated/belvu/test13         | 24 ++++++++++++++++++++++--
+ src/test/scripts/automated/belvu/test14         | 24 ++++++++++++++++++++++--
+ src/test/scripts/automated/belvu/test15         | 24 ++++++++++++++++++++++--
+ src/test/scripts/automated/belvu/test16         | 24 ++++++++++++++++++++++--
+ src/test/scripts/automated/belvu/test17         | 24 ++++++++++++++++++++++--
+ src/test/scripts/automated/belvu/test18         | 24 ++++++++++++++++++++++--
+ src/test/scripts/automated/belvu/test19         | 24 ++++++++++++++++++++++--
+ src/test/scripts/automated/belvu/test1_results  |  2 +-
+ src/test/scripts/automated/belvu/test2          | 23 +++++++++++++++++++++--
+ src/test/scripts/automated/belvu/test20         | 24 ++++++++++++++++++++++--
+ src/test/scripts/automated/belvu/test21         | 24 ++++++++++++++++++++++--
+ src/test/scripts/automated/belvu/test21_results |  2 +-
+ src/test/scripts/automated/belvu/test22         | 24 ++++++++++++++++++++++--
+ src/test/scripts/automated/belvu/test23         | 24 ++++++++++++++++++++++--
+ src/test/scripts/automated/belvu/test24         | 24 ++++++++++++++++++++++--
+ src/test/scripts/automated/belvu/test25         | 24 ++++++++++++++++++++++--
+ src/test/scripts/automated/belvu/test26         | 24 ++++++++++++++++++++++--
+ src/test/scripts/automated/belvu/test26_results |  2 +-
+ src/test/scripts/automated/belvu/test27         | 24 ++++++++++++++++++++++--
+ src/test/scripts/automated/belvu/test27_results |  2 +-
+ src/test/scripts/automated/belvu/test28         | 24 ++++++++++++++++++++++--
+ src/test/scripts/automated/belvu/test29         | 24 ++++++++++++++++++++++--
+ src/test/scripts/automated/belvu/test3          | 23 +++++++++++++++++++++--
+ src/test/scripts/automated/belvu/test30         | 24 ++++++++++++++++++++++--
+ src/test/scripts/automated/belvu/test31         | 24 ++++++++++++++++++++++--
+ src/test/scripts/automated/belvu/test32         | 24 ++++++++++++++++++++++--
+ src/test/scripts/automated/belvu/test33         | 22 +++++++++++++++++++++-
+ src/test/scripts/automated/belvu/test34         | 22 +++++++++++++++++++++-
+ src/test/scripts/automated/belvu/test35         | 24 ++++++++++++++++++++++--
+ src/test/scripts/automated/belvu/test36         | 24 ++++++++++++++++++++++--
+ src/test/scripts/automated/belvu/test37         | 24 ++++++++++++++++++++++--
+ src/test/scripts/automated/belvu/test38         | 24 ++++++++++++++++++++++--
+ src/test/scripts/automated/belvu/test39         | 24 ++++++++++++++++++++++--
+ src/test/scripts/automated/belvu/test4          | 24 ++++++++++++++++++++++--
+ src/test/scripts/automated/belvu/test40         | 24 ++++++++++++++++++++++--
+ src/test/scripts/automated/belvu/test41         | 24 ++++++++++++++++++++++--
+ src/test/scripts/automated/belvu/test42         | 24 ++++++++++++++++++++++--
+ src/test/scripts/automated/belvu/test43         | 24 ++++++++++++++++++++++--
+ src/test/scripts/automated/belvu/test44         | 24 ++++++++++++++++++++++--
+ src/test/scripts/automated/belvu/test45         | 24 ++++++++++++++++++++++--
+ src/test/scripts/automated/belvu/test46         | 24 ++++++++++++++++++++++--
+ src/test/scripts/automated/belvu/test47         | 24 ++++++++++++++++++++++--
+ src/test/scripts/automated/belvu/test48         | 24 ++++++++++++++++++++++--
+ src/test/scripts/automated/belvu/test49         | 24 ++++++++++++++++++++++--
+ src/test/scripts/automated/belvu/test5          | 24 ++++++++++++++++++++++--
+ src/test/scripts/automated/belvu/test50         | 24 ++++++++++++++++++++++--
+ src/test/scripts/automated/belvu/test51         | 24 ++++++++++++++++++++++--
+ src/test/scripts/automated/belvu/test6          | 24 ++++++++++++++++++++++--
+ src/test/scripts/automated/belvu/test7          | 24 ++++++++++++++++++++++--
+ src/test/scripts/automated/belvu/test8          | 24 ++++++++++++++++++++++--
+ src/test/scripts/automated/belvu/test9          | 24 ++++++++++++++++++++++--
+ src/test/scripts/automated/belvu/test9_results  |  2 +-
+ 56 files changed, 1122 insertions(+), 105 deletions(-)
+
+2012-04-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Improvements to dotter tests
+ src/test/scripts/automated/dotter/test1            |  25 ++++++++++++-
+ src/test/scripts/automated/dotter/test1_result.dot | Bin 460197 -> 0 bytes
+ src/test/scripts/automated/dotter/test1_results    | Bin 0 -> 455204 bytes
+ src/test/scripts/automated/dotter/test2            |  26 ++++++++++++-
+ .../dotter/{test2_result.pdf => test2_results}     | Bin
+ src/test/scripts/automated/dotter/test3            |  41 ++++++++++++++++++++-
+ src/test/scripts/automated/dotter/test3_result.dot | Bin 460197 -> 0 bytes
+ .../scripts/automated/dotter/test3_results.dot     | Bin 0 -> 455204 bytes
+ .../dotter/{test3_result.pdf => test3_results.pdf} | Bin
+ 9 files changed, 86 insertions(+), 6 deletions(-)
+
+2012-04-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Improvements to manual tests
+ src/test/scripts/manual/belvu/test1  | 19 +++++++++++++++++--
+ src/test/scripts/manual/belvu/test2  | 20 ++++++++++++++++++--
+ src/test/scripts/manual/belvu/test3  | 23 +++++++++++++++++++++--
+ src/test/scripts/manual/belvu/test4  | 18 ++++++++++++++++--
+ src/test/scripts/manual/belvu/test5  | 20 ++++++++++++++++++--
+ src/test/scripts/manual/blixem/test1 | 19 +++++++++++++++++--
+ src/test/scripts/manual/blixem/test2 | 19 +++++++++++++++++--
+ src/test/scripts/manual/dotter/test1 | 19 +++++++++++++++++--
+ src/test/scripts/manual/dotter/test2 | 19 +++++++++++++++++--
+ src/test/scripts/manual/dotter/test3 | 19 +++++++++++++++++--
+ src/test/scripts/manual/dotter/test4 | 19 +++++++++++++++++--
+ src/test/scripts/manual/dotter/test5 | 19 +++++++++++++++++--
+ src/test/scripts/manual/dotter/test6 | 19 +++++++++++++++++--
+ src/test/scripts/manual/dotter/test7 | 19 +++++++++++++++++--
+ src/test/scripts/manual/dotter/test8 | 19 +++++++++++++++++--
+ 15 files changed, 260 insertions(+), 30 deletions(-)
+
+2012-04-04  Gemma Barson  <gb10 at sanger.ac.uk>
+ Blixem tests no longer require pfetch to run
+ src/test/data/chr4_dna_align.gff     | 1832 ++++-----
+ src/test/data/chr4_protein_align.gff | 7102 +++++++++++++++++-----------------
+ src/test/scripts/manual/blixem/test1 |    2 +-
+ src/test/scripts/manual/blixem/test2 |    2 +-
+ 4 files changed, 4469 insertions(+), 4469 deletions(-)
+
+2012-04-02  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix a regression where matches were misaligned due to problems reading the cigar string
+ src/seqtoolsUtils/blxGff3Parser.c | 13 ++++++-------
+ 1 file changed, 6 insertions(+), 7 deletions(-)
+
+2012-03-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated release notes
+ src/doc/User_doc/release_notes.html | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+2012-03-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/cigar' into develop
+2012-03-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug introduced where negative strand was not being parsed correctly
+ src/seqtoolsUtils/blxGff3Parser.c | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+2012-03-02  Gemma Barson  <gb10 at sanger.ac.uk>
+ Scroll-to-selection now works when matches are squashed
+ src/blixemApp/detailviewtree.c | 14 +++++++++++---
+ 1 file changed, 11 insertions(+), 3 deletions(-)
+
+2012-03-02  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with sorting short read
+ src/blixemApp/detailview.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2012-03-02  Gemma Barson  <gb10 at sanger.ac.uk>
+ Scroll to keep selected match in view when jumping to start/end boundaries
+ src/blixemApp/detailview.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+2012-03-02  Gemma Barson  <gb10 at sanger.ac.uk>
+ Comments
+ src/seqtoolsUtils/blxGff3Parser.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+2012-03-02  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with reading in gaps for reverse strand reads
+ src/seqtoolsUtils/blxGff3Parser.c | 4 ++--
+ src/seqtoolsUtils/blxmsp.c        | 4 ++--
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+2012-03-02  Gemma Barson  <gb10 at sanger.ac.uk>
+ Count reads as duplicates even if from different sources
+ src/blixemApp/detailviewtree.c | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+2012-03-01  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug in reading bam data (wrong sequence was being used)
+ src/blixemApp/blxFetch.c          |  2 +-
+ src/seqtoolsUtils/blxGff3Parser.c | 12 +++++++-----
+ src/seqtoolsUtils/blxmsp.c        |  7 +++++--
+ 3 files changed, 13 insertions(+), 8 deletions(-)
+
+2012-03-01  Gemma Barson  <gb10 at sanger.ac.uk>
+ Big speed improvement when reading in large GFF files
+ src/blixemApp/detailview.c    |   6 +--
+ src/seqtoolsUtils/blxmsp.c    | 108 ++++++++++++++++++++++++------------------
+ src/seqtoolsUtils/utilities.c |   6 ++-
+ 3 files changed, 69 insertions(+), 51 deletions(-)
+
+2012-02-29  Gemma Barson  <gb10 at sanger.ac.uk>
+ WIP: improvements to cigar string handling
+ src/blixemApp/blixem_.h           |   2 +-
+ src/blixemApp/blxFetch.c          |  26 ++++-----
+ src/blixemApp/blxview.c           |   5 +-
+ src/blixemApp/blxwindow.c         |  19 ++++++-
+ src/blixemApp/detailview.c        |   2 +-
+ src/blixemApp/detailviewtree.c    |   6 +--
+ src/dotterApp/dotterMain.c        |   2 +-
+ src/seqtoolsUtils/blxGff3Parser.c |  57 +++++++++++++++++---
+ src/seqtoolsUtils/blxmsp.c        | 108 +++++++++++++++++++++++++++++---------
+ src/seqtoolsUtils/blxmsp.h        |   3 +-
+ 10 files changed, 177 insertions(+), 53 deletions(-)
+
+2012-02-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a refresh problem when selecting variations
+ src/blixemApp/blxwindow.c      |  3 +--
+ src/blixemApp/detailview.c     | 15 +++++++++------
+ src/blixemApp/detailview.h     |  2 +-
+ src/blixemApp/detailviewtree.c |  3 +--
+ 4 files changed, 12 insertions(+), 11 deletions(-)
+
+2012-02-24  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug in protein blixem where you could not select a feature in the variations track
+ src/blixemApp/detailview.c | 1379 ++++++++++++++++++++++++--------------------
+ src/blixemApp/detailview.h |    5 +-
+ 2 files changed, 749 insertions(+), 635 deletions(-)
+
+2012-02-23  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a typo on the Settings dialog (RT:254611)
+ src/blixemApp/blxwindow.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2012-02-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated release notes
+ src/doc/User_doc/release_notes.html | 19 +++++++++++++++++++
+ 1 file changed, 19 insertions(+)
+
+2012-02-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated installation instructions with better info for installing GTK on Mac
+ src/INSTALL | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/README  | 60 +++---------------------------------------
+ 2 files changed, 90 insertions(+), 57 deletions(-)
+
+2012-02-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a crash in Belvu when running in command-line mode
+ src/belvuApp/belvuAlignment.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+2012-02-03  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed some of the saved dotplots in the tests, which had the wrong zoom
+ src/test/data/chr4_vs_DA730641.dot | Bin 457589 -> 455204 bytes
+ src/test/data/chr4_vs_chr4.dot     | Bin 503605 -> 499366 bytes
+ 2 files changed, 0 insertions(+), 0 deletions(-)
+
+2012-02-03  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed an issue in dotter where the plot outline did not coincide with the plot extents
+ src/dotterApp/dotplot.c | 25 ++++++-------------------
+ src/dotterApp/dotter_.h |  2 --
+ 2 files changed, 6 insertions(+), 21 deletions(-)
+
+2012-02-02  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed bug where dotter blacks out/crashes for very long, thin plots
+ src/belvuApp/belvuTree.c      |   6 --
+ src/dotterApp/dotplot.c       | 154 +++++++++++++++++++++++++++++-------------
+ src/dotterApp/dotter.c        |   4 +-
+ src/dotterApp/dotter_.h       |   4 +-
+ src/dotterApp/greyramptool.c  |  14 ----
+ src/seqtoolsUtils/utilities.c |  12 ++++
+ src/seqtoolsUtils/utilities.h |   1 +
+ 7 files changed, 125 insertions(+), 70 deletions(-)
+
+2012-01-31  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'release/4.9' into develop
+2012-01-31  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a crash during dotter shutdown
+ src/dotterApp/alignmenttool.c | 7 -------
+ src/dotterApp/dotter.c        | 2 --
+ 2 files changed, 9 deletions(-)
+
+2012-01-25  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'release/4.9' into develop
+2012-01-25  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated release notes
+ src/doc/User_doc/release_notes.html | 32 ++++++++++++++++++++++++++++++++
+ 1 file changed, 32 insertions(+)
+
+2012-01-25  Gemma Barson  <gb10 at sanger.ac.uk>
+ Display settings are now saved when exiting Blixem
+ src/blixemApp/blixem_.h                  |  18 +++-
+ src/blixemApp/blxwindow.c                | 175 +++++++++++++++++++++++++------
+ src/blixemApp/detailview.c               |  25 ++++-
+ src/blixemApp/detailview.h               |   2 +-
+ src/doc/User_doc/blixem_quick_start.html |   8 +-
+ 5 files changed, 188 insertions(+), 40 deletions(-)
+
+2012-01-25  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug where exons were not always being shown in Dotter when called from blixem
+ src/seqtoolsUtils/utilities.c | 18 ++++++++++++++++--
+ 1 file changed, 16 insertions(+), 2 deletions(-)
+
+2012-01-18  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a regression where blixem was crashing after getting bam data (RT249221)
+ src/seqtoolsUtils/blxGff3Parser.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+2012-01-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug in blixem where dotter would fail to start after opening the help page
+ src/belvuApp/belvuWindow.c    |  6 ++++--
+ src/blixemApp/blxdotter.c     |  7 ++++---
+ src/blixemApp/blxwindow.c     |  6 ++++--
+ src/dotterApp/dotter.c        |  6 ++++--
+ src/seqtoolsUtils/utilities.c | 32 --------------------------------
+ src/seqtoolsUtils/utilities.h |  4 ++--
+ 6 files changed, 18 insertions(+), 43 deletions(-)
+
+2012-01-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a regression: invalid free
+ src/belvuApp/belvuTree.c | 6 ------
+ 1 file changed, 6 deletions(-)
+
+2012-01-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated test plan
+ src/test/test_plan.ods | Bin 36754 -> 38241 bytes
+ 1 file changed, 0 insertions(+), 0 deletions(-)
+
+2012-01-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/leaks' into develop
+2012-01-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed some memory leaks in Belvu
+ src/belvuApp/belvuTree.c | 10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
+
+2012-01-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/leaks' into develop
+2012-01-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ More blixem leak fixes
+ src/blixemApp/blixem_.h  |  4 ++--
+ src/blixemApp/blxFetch.c | 19 +++++++++++--------
+ src/blixemApp/blxview.c  |  2 +-
+ 3 files changed, 14 insertions(+), 11 deletions(-)
+
+2012-01-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ More blixem leak fixes
+ src/blixemApp/blxFetch.c      |  2 +-
+ src/blixemApp/blxmain.c       |  6 +++-
+ src/blixemApp/blxview.c       |  5 +++-
+ src/blixemApp/blxwindow.c     | 69 ++++++++++++++++++++++++-------------------
+ src/seqtoolsUtils/blxparser.c |  4 +++
+ src/seqtoolsUtils/utilities.c |  1 +
+ 6 files changed, 54 insertions(+), 33 deletions(-)
+
+2012-01-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ More blixem leak fixes
+ src/blixemApp/bigpicture.c     |  5 ++++-
+ src/blixemApp/blxwindow.c      | 20 ++++++++++++++----
+ src/blixemApp/detailview.c     | 22 ++++++++++++++++++--
+ src/blixemApp/detailviewtree.c | 46 ++++++++++++++++++++++++++++++++++++++++--
+ src/seqtoolsUtils/utilities.c  | 15 +++++++++++---
+ 5 files changed, 96 insertions(+), 12 deletions(-)
+
+2012-01-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed some leaks in blixem
+ src/blixemApp/detailview.c           | 5 ++++-
+ src/blixemApp/detailviewtree.c       | 9 +++++----
+ src/blixemApp/sequencecellrenderer.c | 7 +++++++
+ 3 files changed, 16 insertions(+), 5 deletions(-)
+
+2012-01-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/leaks' into develop
+2012-01-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a serious leak in dotter where it was leaking every time the alignment view was scrolled
+ src/seqtoolsUtils/utilities.c | 19 ++++++-------------
+ 1 file changed, 6 insertions(+), 13 deletions(-)
+
+2012-01-11  Gemma Barson  <gb10 at sanger.ac.uk>
+ More memory leak fixes
+ src/dotterApp/alignmenttool.c |  6 ++++++
+ src/dotterApp/dotterMain.c    | 11 ++++++++++-
+ src/seqtoolsUtils/blxmsp.c    |  9 +++++++++
+ 3 files changed, 25 insertions(+), 1 deletion(-)
+
+2012-01-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed some memory leaks in dotter
+ src/blixemApp/blixem_.h           |   2 -
+ src/blixemApp/blxview.c           |  41 ------------
+ src/blixemApp/blxwindow.c         |   8 ++-
+ src/dotterApp/alignmenttool.c     |   9 +--
+ src/dotterApp/dotplot.c           |  12 +++-
+ src/dotterApp/dotter.c            | 137 +++++++++++++++++++++++++-------------
+ src/dotterApp/dotterMain.c        |   7 +-
+ src/dotterApp/greyramptool.c      |   7 +-
+ src/seqtoolsUtils/blxGff3Parser.c |  29 ++++++--
+ src/seqtoolsUtils/blxmsp.c        |  47 ++++++++++++-
+ src/seqtoolsUtils/blxmsp.h        |   2 +
+ src/seqtoolsUtils/utilities.c     |   5 +-
+ 12 files changed, 199 insertions(+), 107 deletions(-)
+
+2012-01-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed another crash if there is no config file
+ src/blixemApp/blxFetch.c | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+2012-01-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug where blixem would crash if no config file is given
+ src/blixemApp/blixem_.h  |  2 +-
+ src/blixemApp/blxFetch.c | 12 ++++--------
+ src/blixemApp/blxmain.c  |  4 +++-
+ src/blixemApp/blxview.c  | 17 ++++++++---------
+ 4 files changed, 16 insertions(+), 19 deletions(-)
+
+2012-01-06  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a buffer overrun bug introduced in commit a2b8b00
+ src/blixemApp/blxFetch.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-12-07  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated manuals to make export to Word easier
+ src/doc/User_doc/Belvu_manual.odt  | Bin 969851 -> 970098 bytes
+ src/doc/User_doc/Belvu_manual.pdf  | Bin 855028 -> 819755 bytes
+ src/doc/User_doc/Blixem_manual.odt | Bin 1146576 -> 994719 bytes
+ src/doc/User_doc/Blixem_manual.pdf | Bin 821549 -> 766962 bytes
+ src/doc/User_doc/Dotter_manual.odt | Bin 463604 -> 463997 bytes
+ src/doc/User_doc/Dotter_manual.pdf | Bin 342006 -> 342875 bytes
+ 6 files changed, 0 insertions(+), 0 deletions(-)
+
+2011-12-06  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed an issue where blixem would exit if the config file did not contain pfetch groups
+ src/blixemApp/blxFetch.c | 16 ++++------------
+ 1 file changed, 4 insertions(+), 12 deletions(-)
+
+2011-12-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated blixem manual for changes between v4.2 and v4.7
+ src/doc/User_doc/Blixem_manual.odt | Bin 1102821 -> 1146576 bytes
+ src/doc/User_doc/Blixem_manual.pdf | Bin 855666 -> 821549 bytes
+ 2 files changed, 0 insertions(+), 0 deletions(-)
+
+2011-12-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed typo in configure.ac script
+ src/configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-12-02  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated dotter user manual for changes between v4.2 and v4.7
+ src/doc/User_doc/Dotter_manual.odt | Bin 434335 -> 463604 bytes
+ src/doc/User_doc/Dotter_manual.pdf | Bin 378981 -> 342006 bytes
+ 2 files changed, 0 insertions(+), 0 deletions(-)
+
+2011-12-02  Gemma Barson  <gb10 at sanger.ac.uk>
+ Installation scripts now exclude blixemh if libcurl not available
+ src/Makefile.am  | 15 +++++++++++----
+ src/README       | 40 ++++++++++++++++++----------------------
+ src/configure.ac | 22 ++++++++++++++++++++--
+ 3 files changed, 49 insertions(+), 28 deletions(-)
+
+2011-11-11  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'production' into develop
+2011-11-11  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'release/4.6' into production
+2011-11-11  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'release/4.6' into develop
+2011-11-11  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated version number in release notes
+ src/doc/User_doc/release_notes.html | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-11-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated release notes
+ src/doc/User_doc/release_notes.html | 1 +
+ 1 file changed, 1 insertion(+)
+
+2011-11-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/settings' into develop
+2011-11-07  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added 'reset to defaults' option on settings dialog
+ src/blixemApp/blxwindow.c     | 29 +++++++++++++++++++---
+ src/blixemApp/detailview.c    | 56 +++++++++++++++++++++++++++++++++++++------
+ src/blixemApp/detailview.h    |  1 +
+ src/seqtoolsUtils/utilities.h |  3 ++-
+ 4 files changed, 78 insertions(+), 11 deletions(-)
+
+2011-11-07  Gemma Barson  <gb10 at sanger.ac.uk>
+ Column width settings are now saved on exit
+ src/blixemApp/blixem_.h    |  4 ++++
+ src/blixemApp/blxFetch.c   | 58 +++++++++++++++++++++++++++++++++++++++++-----
+ src/blixemApp/blxwindow.c  | 27 +++++++++++++++++++++
+ src/blixemApp/detailview.c | 29 ++++++++++++++++++++++-
+ src/blixemApp/detailview.h |  1 +
+ 5 files changed, 112 insertions(+), 7 deletions(-)
+
+2011-11-07  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/dynamic-loading' into develop
+2011-11-07  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug where CDS and UTR sections were not being shown in the detail view
+ src/blixemApp/blxwindow.c | 18 ++++++++++--------
+ 1 file changed, 10 insertions(+), 8 deletions(-)
+
+2011-11-07  Gemma Barson  <gb10 at sanger.ac.uk>
+ Small improvements to menu text
+ src/blixemApp/blxwindow.c | 22 +++++++++++-----------
+ 1 file changed, 11 insertions(+), 11 deletions(-)
+
+2011-11-07  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a couple of bugs with dynamic loading
+ src/blixemApp/blxview.c   | 9 +++++++++
+ src/blixemApp/blxwindow.c | 5 +++--
+ 2 files changed, 12 insertions(+), 2 deletions(-)
+
+2011-11-04  Gemma Barson  <gb10 at sanger.ac.uk>
+ WIP: blixem can now dynamically load additional features on user request
+ src/blixemApp/blixem_.h        |  3 +++
+ src/blixemApp/blxview.c        | 47 ++++++++++++++-------------------
+ src/blixemApp/blxwindow.c      | 59 +++++++++++++++++++++++++++++++++++++++++-
+ src/blixemApp/detailview.c     | 13 ++++++----
+ src/blixemApp/detailview.h     |  2 +-
+ src/blixemApp/detailviewtree.c | 20 ++++++++++----
+ src/seqtoolsUtils/blxmsp.c     | 10 +++++++
+ 7 files changed, 114 insertions(+), 40 deletions(-)
+
+2011-11-03  Gemma Barson  <gb10 at sanger.ac.uk>
+ GdkDrawable objects are now re-used wherever possible; they were frequently being deleted and re-created before
+ src/seqtoolsUtils/utilities.c | 88 ++++++++++++++++++++++++++++++++++++-------
+ 1 file changed, 74 insertions(+), 14 deletions(-)
+
+2011-11-01  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated release notes
+ src/doc/User_doc/release_notes.html | 19 ++++++++++++++++++-
+ 1 file changed, 18 insertions(+), 1 deletion(-)
+
+2011-10-31  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/partial-codons' into develop
+2011-04-15  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added comments
+ src/seqtoolsUtils/utilities.c | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+2011-04-15  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed more bugs with the reading frame calculations
+ src/blixemApp/bigpicture.c           |  8 ++++----
+ src/blixemApp/blixem_.h              |  3 ---
+ src/blixemApp/blxdotter.c            | 10 +++++-----
+ src/blixemApp/blxview.c              | 13 -------------
+ src/blixemApp/blxwindow.c            | 13 ++++++-------
+ src/blixemApp/detailview.c           | 10 +++++-----
+ src/blixemApp/detailviewtree.c       |  4 ++--
+ src/blixemApp/sequencecellrenderer.c |  6 +++---
+ src/seqtoolsUtils/utilities.c        |  6 +-----
+ 9 files changed, 26 insertions(+), 47 deletions(-)
+
+2011-04-15  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a regression where the reference sequence reading frame was wrong
+ src/blixemApp/blxwindow.c | 61 +++++++++++++++++++++++++++++++++++++++--------
+ 1 file changed, 51 insertions(+), 10 deletions(-)
+
+2011-04-15  Gemma Barson  <gb10 at sanger.ac.uk>
+ Partial codon boundary lines are now dotted rather than solid
+ src/blixemApp/detailview.c           |  4 +-
+ src/blixemApp/detailview.h           |  6 +--
+ src/blixemApp/sequencecellrenderer.c | 74 +++++++++++++++++++++++++-----------
+ 3 files changed, 57 insertions(+), 27 deletions(-)
+
+2011-04-15  Gemma Barson  <gb10 at sanger.ac.uk>
+ Made partial codon highlighting cross-hatched. Fixed a bug with rev strand coords
+ src/blixemApp/bigpicture.c           |  2 +-
+ src/blixemApp/blxdotter.c            |  4 ++--
+ src/blixemApp/sequencecellrenderer.c | 25 ++++++++++++++++----
+ src/seqtoolsUtils/utilities.c        | 46 +++---------------------------------
+ 4 files changed, 26 insertions(+), 51 deletions(-)
+
+2011-04-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ WIP: highlight partial codons in exons
+ src/blixemApp/bigpicture.c           |  6 +--
+ src/blixemApp/blixem_.h              |  7 +++-
+ src/blixemApp/blxdotter.c            | 10 ++---
+ src/blixemApp/blxview.c              | 12 ++++++
+ src/blixemApp/blxwindow.c            |  3 +-
+ src/blixemApp/detailview.c           | 10 ++---
+ src/blixemApp/detailviewtree.c       |  4 +-
+ src/blixemApp/sequencecellrenderer.c | 55 +++++++++++++++++++++++++--
+ src/seqtoolsUtils/utilities.c        | 73 ++++++++++++++++++++----------------
+ 9 files changed, 126 insertions(+), 54 deletions(-)
+
+2011-10-31  Gemma Barson  <gb10 at sanger.ac.uk>
+ Removed unused file
+ src/belvuApp/belvuOld.c | 8386 -----------------------------------------------
+ 1 file changed, 8386 deletions(-)
+
+2011-10-31  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/variations' into develop
+2011-10-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed an issue where selecting a SNP would select any others at the same coordinate
+ src/blixemApp/detailview.c | 31 +++++++++++++++++++++++--------
+ 1 file changed, 23 insertions(+), 8 deletions(-)
+
+2011-10-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Invert row order for variations track
+ src/blixemApp/detailview.c | 113 +++++++++++++++++++++++++++++++++++++--------
+ 1 file changed, 95 insertions(+), 18 deletions(-)
+
+2011-10-27  Gemma Barson  <gb10 at sanger.ac.uk>
+ In blixem, overlapping variations are now separated onto different rows in the variations track
+ src/blixemApp/detailview.c | 66 ++++++++++++++++++++++++++++++++++++++++++----
+ 1 file changed, 61 insertions(+), 5 deletions(-)
+
+2011-10-27  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/bigpicture' into develop
+2011-10-26  Gemma Barson  <gb10 at sanger.ac.uk>
+ Horizontal mouse-wheel scrolling now works in Blixem's exon view
+ src/blixemApp/exonview.c | 38 ++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 38 insertions(+)
+
+2011-10-26  Gemma Barson  <gb10 at sanger.ac.uk>
+ Small change to remove unused code
+ src/blixemApp/bigpicturegrid.c | 6 ------
+ 1 file changed, 6 deletions(-)
+
+2011-10-26  Gemma Barson  <gb10 at sanger.ac.uk>
+ Change cursor when dragging highlight box in big picture
+ src/blixemApp/bigpicture.c | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+2011-10-26  Gemma Barson  <gb10 at sanger.ac.uk>
+ Double-clicking in Blixem's big picture now makes the detail-view region jump (the same as middle-clicking)
+ src/blixemApp/bigpicturegrid.c | 20 ++++++++++++++------
+ src/blixemApp/coverageview.c   |  8 +++++---
+ src/blixemApp/exonview.c       |  6 ++++--
+ 3 files changed, 23 insertions(+), 11 deletions(-)
+
+2011-10-25  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added ability to drag the highlight box in Blixem's big picture using the left mouse button
+ src/blixemApp/bigpicture.c     | 57 ++++++++++++++++++++++++------------------
+ src/blixemApp/bigpicture.h     |  9 ++++---
+ src/blixemApp/bigpicturegrid.c | 47 +++++++++++++++++++++++-----------
+ src/blixemApp/coverageview.c   | 20 +++++++++++----
+ src/blixemApp/exonview.c       | 34 +++++++++++++++++--------
+ src/seqtoolsUtils/utilities.c  | 11 ++++++++
+ src/seqtoolsUtils/utilities.h  |  2 ++
+ 7 files changed, 121 insertions(+), 59 deletions(-)
+
+2011-10-25  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added some more dotter tests
+ src/test/data/chr4_ref_seq_short.fasta             |  95 +++++++++++++++++++++
+ src/test/data/chr4_vs_DA730641.dot                 | Bin 0 -> 457589 bytes
+ src/test/data/chr4_vs_chr4.dot                     | Bin 0 -> 503605 bytes
+ src/test/scripts/automated/dotter/test1            |   9 ++
+ src/test/scripts/automated/dotter/test1_result.dot | Bin 0 -> 460197 bytes
+ src/test/scripts/automated/dotter/test2            |   9 ++
+ src/test/scripts/automated/dotter/test2_result.pdf | Bin 0 -> 21057 bytes
+ src/test/scripts/automated/dotter/test3            |  10 +++
+ src/test/scripts/automated/dotter/test3_result.dot | Bin 0 -> 460197 bytes
+ src/test/scripts/automated/dotter/test3_result.pdf | Bin 0 -> 21057 bytes
+ src/test/scripts/manual/dotter/test1               |   2 +-
+ src/test/scripts/manual/dotter/test7               |  11 +++
+ src/test/scripts/manual/dotter/test8               |  13 +++
+ 13 files changed, 148 insertions(+), 1 deletion(-)
+
+2011-10-25  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated dotter usage
+ src/doc/User_doc/dotter_usage.txt | 92 +++++++++++++++++++++++++++-----------
+ src/dotterApp/dotterMain.c        | 94 ++++++++++++++++++++++++++++-----------
+ 2 files changed, 134 insertions(+), 52 deletions(-)
+
+2011-10-25  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'printing' into develop
+2011-10-24  Gemma Barson  <gb10 at sanger.ac.uk>
+ Print messages to indicate that batch mode saved/exported the plot successfully
+ src/dotterApp/dotplot.c       |  2 ++
+ src/dotterApp/dotterMain.c    | 17 +++++++++--------
+ src/seqtoolsUtils/utilities.c |  1 +
+ 3 files changed, 12 insertions(+), 8 deletions(-)
+
+2011-10-24  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with exporting both the dot-matrix and PDF
+ src/dotterApp/dotplot.c | 20 +++++++++++++-------
+ 1 file changed, 13 insertions(+), 7 deletions(-)
+
+2011-10-24  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed an issue with labels not being drawn on exported plots
+ src/dotterApp/dotplot.c          | 70 ++++++++++++++++++++++++++++++----------
+ src/dotterApp/seqtoolsExonView.c |  4 +--
+ 2 files changed, 55 insertions(+), 19 deletions(-)
+
+2011-10-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Generalise print function
+ src/belvuApp/belvuWindow.c    |   2 +-
+ src/blixemApp/blxwindow.c     |   2 +-
+ src/dotterApp/alignmenttool.c |   2 +-
+ src/dotterApp/dotplot.c       |   2 +-
+ src/dotterApp/dotter.c        |   6 +-
+ src/seqtoolsUtils/utilities.c | 808 +++++++++++++++++++++---------------------
+ src/seqtoolsUtils/utilities.h |   2 +-
+ 7 files changed, 414 insertions(+), 410 deletions(-)
+
+2011-10-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added ability to export to PDF in dotter
+ src/belvuApp/belvuWindow.c    |    2 +-
+ src/blixemApp/blxwindow.c     |    2 +-
+ src/dotterApp/alignmenttool.c |    2 +-
+ src/dotterApp/dotplot.c       |   80 +-
+ src/dotterApp/dotter.c        |  144 ++--
+ src/dotterApp/dotter.h        |   13 +-
+ src/dotterApp/dotterMain.c    |  776 ++++++++---------
+ src/dotterApp/dotterWindow    | 1827 +++++++++++++++++++++++++++++++++++++++++
+ src/dotterApp/dotter_.h       |    4 +
+ src/seqtoolsUtils/utilities.c |   15 +-
+ src/seqtoolsUtils/utilities.h |    2 +-
+ 11 files changed, 2419 insertions(+), 448 deletions(-)
+
+2011-10-18  Gemma Barson  <gb10 at sanger.ac.uk>
+ Printing in dotter now prints the whole plot rather than just the scrolled window contents
+ src/dotterApp/dotplot.c | 10 ++--------
+ src/dotterApp/dotter.c  |  7 ++++++-
+ 2 files changed, 8 insertions(+), 9 deletions(-)
+
+2011-10-18  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated to-do notes
+ src/doc/User_doc/todo.html | 4 ----
+ 1 file changed, 4 deletions(-)
+
+2011-10-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated release notes
+ src/doc/User_doc/release_notes.html | 1 +
+ 1 file changed, 1 insertion(+)
+
+2011-10-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Sort by id, name and then position by default
+ src/blixemApp/detailview.c | 11 ++++-------
+ 1 file changed, 4 insertions(+), 7 deletions(-)
+
+2011-10-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with sorting the exon view when variations and polyA features are present
+ src/blixemApp/detailview.c | 27 ++++++++++++++++++++-------
+ 1 file changed, 20 insertions(+), 7 deletions(-)
+
+2011-10-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Exons can now be selected by clicking them in the big picture in Blixem
+ src/blixemApp/exonview.c | 430 ++++++++++++++++++++++++++++++-----------------
+ 1 file changed, 280 insertions(+), 150 deletions(-)
+
+2011-10-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Exons in Blixem's big picture are now sorted in the same order as the detail view
+ src/blixemApp/blixem_.h        |   1 +
+ src/blixemApp/blxview.c        |   5 +
+ src/blixemApp/blxwindow.c      |   8 +-
+ src/blixemApp/detailview.c     | 314 ++++++++++++++++++++++++++++++++++++++++-
+ src/blixemApp/detailview.h     |   6 +
+ src/blixemApp/detailviewtree.c | 248 +-------------------------------
+ 6 files changed, 329 insertions(+), 253 deletions(-)
+
+2011-10-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated release notes
+ src/doc/User_doc/release_notes.html | 13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+2011-10-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with the bumped exon view height when zooming in Dotter
+ src/dotterApp/seqtoolsExonView.c | 16 +++++-----------
+ 1 file changed, 5 insertions(+), 11 deletions(-)
+
+2011-10-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed an issue where re-draw was messed up for the dotter exon view
+ src/dotterApp/seqtoolsExonView.c | 14 +++++---------
+ 1 file changed, 5 insertions(+), 9 deletions(-)
+
+2011-10-11  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with bumping exons for the vertical sequence in dotter
+ src/dotterApp/seqtoolsExonView.c | 18 ++++++++++++++----
+ 1 file changed, 14 insertions(+), 4 deletions(-)
+
+2011-10-07  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added the ability to bump exons in dotter
+ src/dotterApp/dotplot.c          |  8 ++++++++
+ src/dotterApp/dotter.c           | 12 +++++++++++-
+ src/dotterApp/dotter_.h          |  1 +
+ src/dotterApp/seqtoolsExonView.c | 13 ++++++++-----
+ src/dotterApp/seqtoolsExonView.h |  2 +-
+ 5 files changed, 29 insertions(+), 7 deletions(-)
+
+2011-10-06  Gemma Barson  <gb10 at sanger.ac.uk>
+ Shade the border in dotter where the matrix cannot be calculated
+ src/dotterApp/dotplot.c | 20 +++++++++++++++++++-
+ src/dotterApp/dotter.c  |  1 +
+ src/dotterApp/dotter_.h |  1 +
+ 3 files changed, 21 insertions(+), 1 deletion(-)
+
+2011-10-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ RT95637: made blixem window title more informative
+ src/blixemApp/blxview.c | 59 ++++++++++++++++++++++++++++++++++++++++++++-----
+ 1 file changed, 53 insertions(+), 6 deletions(-)
+
+2011-10-03  Gemma Barson  <gb10 at sanger.ac.uk>
+ Small change to test scripts - pass annotation arg for blixem tests
+ src/test/scripts/manual/blixem/test1 | 2 +-
+ src/test/scripts/manual/blixem/test2 | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+2011-10-03  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added belvu manual to help page and distribution
+ src/Makefile.am                         | 4 ++--
+ src/doc/User_doc/belvu_quick_start.html | 2 +-
+ src/doc/User_doc/manuals.html           | 2 ++
+ 3 files changed, 5 insertions(+), 3 deletions(-)
+
+2011-10-03  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated release notes for version 4.5
+ src/doc/User_doc/release_notes.html | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-09-30  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'production' into develop
+2011-09-30  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'release/4.5' into production
+2011-09-30  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'release/4.5' into develop
+2011-09-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with the pfetch window size in pfetch-http mode
+ src/seqtoolsUtils/utilities.c | 19 ++++++++++++-------
+ 1 file changed, 12 insertions(+), 7 deletions(-)
+
+2011-09-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Comments and formatting
+ src/belvuApp/belvuAlignment.c | 68 +++++++++++++++++++++++++------------------
+ src/belvuApp/belvuMain.c      | 23 +++------------
+ 2 files changed, 44 insertions(+), 47 deletions(-)
+
+2011-09-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Small update to belvu manual
+ src/doc/User_doc/Belvu_manual.odt | Bin 969893 -> 969851 bytes
+ 1 file changed, 0 insertions(+), 0 deletions(-)
+
+2011-09-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added first draft of design notes for belvu
+ src/doc/Design_notes/architecture.html      |  1 +
+ src/doc/Design_notes/modules/belvuApp.html  | 88 +++++++++++++++++++++++++++++
+ src/doc/Design_notes/modules/dotterApp.html |  2 +-
+ 3 files changed, 90 insertions(+), 1 deletion(-)
+
+2011-09-23  Gemma Barson  <gb10 at sanger.ac.uk>
+ Improved code comments
+ src/belvuApp/belvu.c  | 116 +++++++++++++++++++++++++++++++++++---------------
+ src/belvuApp/belvu_.h |   2 +-
+ 2 files changed, 82 insertions(+), 36 deletions(-)
+
+2011-09-23  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug where belvu could index out of the end of the string for short markup lines
+ src/belvuApp/belvuAlignment.c | 16 +++++++++++-----
+ 1 file changed, 11 insertions(+), 5 deletions(-)
+
+2011-09-22  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added extended usage info
+ src/belvuApp/belvuMain.c         | 202 ++++++++++++++++++++++++++++++++++++---
+ src/doc/User_doc/belvu_usage.txt | 127 ++++++++++++++++++++----
+ 2 files changed, 302 insertions(+), 27 deletions(-)
+
+2011-09-22  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added Belvu user manual
+ src/doc/User_doc/Belvu_manual.odt | Bin 0 -> 969893 bytes
+ src/doc/User_doc/Belvu_manual.pdf | Bin 0 -> 855028 bytes
+ 2 files changed, 0 insertions(+), 0 deletions(-)
+
+2011-09-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Moved dotter tests to own directory
+ src/test/scripts/manual/{blixem/test3 => dotter/test1} | 0
+ src/test/scripts/manual/{blixem/test4 => dotter/test2} | 0
+ src/test/scripts/manual/{blixem/test5 => dotter/test3} | 0
+ src/test/scripts/manual/{blixem/test6 => dotter/test4} | 0
+ src/test/scripts/manual/{blixem/test7 => dotter/test5} | 0
+ src/test/scripts/manual/{blixem/test8 => dotter/test6} | 0
+ 6 files changed, 0 insertions(+), 0 deletions(-)
+
+2011-09-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/testing' into develop
+2011-09-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ More dotter tests
+ src/test/data/chr4_translation_frame1.fasta |  5 +++++
+ src/test/scripts/manual/blixem/test6        |  4 ++--
+ src/test/scripts/manual/blixem/test7        | 13 +++++++++++++
+ src/test/scripts/manual/blixem/test8        | 10 ++++++++++
+ 4 files changed, 30 insertions(+), 2 deletions(-)
+
+2011-09-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated test comments
+ src/test/scripts/manual/blixem/test3 |  3 ++-
+ src/test/scripts/manual/blixem/test5 |  3 ++-
+ src/test/scripts/manual/blixem/test6 |  8 ++++----
+ src/test/scripts/manual/blixem/test7 | 12 ------------
+ 4 files changed, 8 insertions(+), 18 deletions(-)
+
+2011-09-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added more dotter tests
+ src/test/scripts/manual/blixem/test5 |  2 +-
+ src/test/scripts/manual/blixem/test6 | 12 ++++++++++++
+ src/test/scripts/manual/blixem/test7 | 12 ++++++++++++
+ 3 files changed, 25 insertions(+), 1 deletion(-)
+
+2011-09-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added another dotter test
+ src/test/data/Q9H8G1.fasta           | 11 +++++++++++
+ src/test/scripts/manual/blixem/test5 |  4 ++--
+ 2 files changed, 13 insertions(+), 2 deletions(-)
+
+2011-09-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added blixem and dotter tests
+ src/test/data/DA730641.fasta                     | 16 ++++++++++++++++
+ src/test/data/{chr4.fasta => chr4_ref_seq.fasta} |  0
+ src/test/scripts/manual/blixem/test1             | 11 ++++++++++-
+ src/test/scripts/manual/blixem/test2             | 11 ++++++++++-
+ src/test/scripts/manual/blixem/test3             | 14 ++++++++++++++
+ src/test/scripts/manual/blixem/test4             | 15 +++++++++++++++
+ src/test/scripts/manual/blixem/test5             | 14 ++++++++++++++
+ 7 files changed, 79 insertions(+), 2 deletions(-)
+
+2011-09-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Removed executables from gitignore
+ .gitignore | 6 ------
+ 1 file changed, 6 deletions(-)
+
+2011-09-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added blixem tests
+ src/test/data/chr4.fasta             | 2256 ++++++++++++++++
+ src/test/data/chr4_dna_align.gff     | 2269 ++++++++++++++++
+ src/test/data/chr4_protein_align.gff | 4904 ++++++++++++++++++++++++++++++++++
+ src/test/scripts/manual/blixem/test1 |    2 +
+ src/test/scripts/manual/blixem/test2 |    2 +
+ 5 files changed, 9433 insertions(+)
+
+2011-09-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Moved tests to toplevel test directory
+ src/Makefile.am                                             |   5 +++--
+ src/doc/Design_notes/specs.html                             |   2 +-
+ src/doc/Design_notes/tests/README                           |  10 ----------
+ src/test/README                                             |  12 ++++++++++++
+ src/{doc/Design_notes/tests => test}/data/ALIGN.fasta       |   0
+ src/{doc/Design_notes/tests => test}/data/ALIGN.selex       |   0
+ .../Design_notes/tests => test}/data/PF02171_full.selex     |   0
+ .../Design_notes/tests => test}/data/PF02171_full.stock     |   0
+ .../Design_notes/tests => test}/data/PF02171_seed.fasta     |   0
+ src/{doc/Design_notes/tests => test}/data/PF02171_seed.msf  |   0
+ .../Design_notes/tests => test}/data/PF02171_seed.scores    |   0
+ src/{doc/Design_notes/tests => test}/data/PF02171_seed.segs |   0
+ .../Design_notes/tests => test}/data/PF02171_seed.selex     |   0
+ .../Design_notes/tests => test}/data/PF02171_seed.stock     |   0
+ .../tests => test}/data/PF02171_seed_segs.stock             |   0
+ .../tests => test}/data/PF02171_seed_separator.stock        |   0
+ src/{doc/Design_notes/tests => test}/data/cgph_pale.color   |   0
+ src/{doc/Design_notes/tests => test}/data/cgph_pale2.color  |   0
+ src/{doc/Design_notes/tests => test}/data/markup.color      |   0
+ src/{doc/Design_notes/tests => test}/data/markup2.color     |   0
+ .../Design_notes/tests => test}/data/markup_content.selex   |   0
+ .../Design_notes/tests => test}/data/markup_headers.selex   |   0
+ .../command_line => test/scripts/automated/belvu}/test1     |   0
+ .../command_line => test/scripts/automated/belvu}/test10    |   0
+ .../scripts/automated/belvu}/test10_results                 |   0
+ .../command_line => test/scripts/automated/belvu}/test11    |   0
+ .../scripts/automated/belvu}/test11_results                 |   0
+ .../command_line => test/scripts/automated/belvu}/test12    |   0
+ .../scripts/automated/belvu}/test12_results                 |   0
+ .../command_line => test/scripts/automated/belvu}/test13    |   0
+ .../scripts/automated/belvu}/test13_results                 |   0
+ .../command_line => test/scripts/automated/belvu}/test14    |   0
+ .../scripts/automated/belvu}/test14_results                 |   0
+ .../command_line => test/scripts/automated/belvu}/test15    |   0
+ .../scripts/automated/belvu}/test15_results                 |   0
+ .../command_line => test/scripts/automated/belvu}/test16    |   0
+ .../scripts/automated/belvu}/test16_results                 |   0
+ .../command_line => test/scripts/automated/belvu}/test17    |   0
+ .../scripts/automated/belvu}/test17_results                 |   0
+ .../command_line => test/scripts/automated/belvu}/test18    |   0
+ .../scripts/automated/belvu}/test18_results                 |   0
+ .../command_line => test/scripts/automated/belvu}/test19    |   0
+ .../scripts/automated/belvu}/test19_results                 |   0
+ .../scripts/automated/belvu}/test1_results                  |   0
+ .../command_line => test/scripts/automated/belvu}/test2     |   0
+ .../command_line => test/scripts/automated/belvu}/test20    |   0
+ .../scripts/automated/belvu}/test20_results                 |   0
+ .../command_line => test/scripts/automated/belvu}/test21    |   0
+ .../scripts/automated/belvu}/test21_results                 |   0
+ .../command_line => test/scripts/automated/belvu}/test22    |   0
+ .../scripts/automated/belvu}/test22_results                 |   0
+ .../command_line => test/scripts/automated/belvu}/test23    |   0
+ .../scripts/automated/belvu}/test23_results                 |   0
+ .../command_line => test/scripts/automated/belvu}/test24    |   0
+ .../scripts/automated/belvu}/test24_results                 |   0
+ .../command_line => test/scripts/automated/belvu}/test25    |   0
+ .../scripts/automated/belvu}/test25_results                 |   0
+ .../command_line => test/scripts/automated/belvu}/test26    |   0
+ .../scripts/automated/belvu}/test26_results                 |   0
+ .../command_line => test/scripts/automated/belvu}/test27    |   0
+ .../scripts/automated/belvu}/test27_results                 |   0
+ .../command_line => test/scripts/automated/belvu}/test28    |   0
+ .../scripts/automated/belvu}/test28_results                 |   0
+ .../command_line => test/scripts/automated/belvu}/test29    |   0
+ .../scripts/automated/belvu}/test29_results                 |   0
+ .../scripts/automated/belvu}/test2_results                  |   0
+ .../command_line => test/scripts/automated/belvu}/test3     |   0
+ .../command_line => test/scripts/automated/belvu}/test30    |   0
+ .../scripts/automated/belvu}/test30_results                 |   0
+ .../command_line => test/scripts/automated/belvu}/test31    |   0
+ .../scripts/automated/belvu}/test31_results                 |   0
+ .../command_line => test/scripts/automated/belvu}/test32    |   0
+ .../scripts/automated/belvu}/test32_results                 |   0
+ .../command_line => test/scripts/automated/belvu}/test33    |   0
+ .../scripts/automated/belvu}/test33_results                 |   0
+ .../command_line => test/scripts/automated/belvu}/test34    |   0
+ .../scripts/automated/belvu}/test34_results                 |   0
+ .../command_line => test/scripts/automated/belvu}/test35    |   0
+ .../scripts/automated/belvu}/test35_results                 |   0
+ .../command_line => test/scripts/automated/belvu}/test36    |   0
+ .../scripts/automated/belvu}/test36_results                 |   0
+ .../scripts/automated/belvu}/test36_results_old             |   0
+ .../command_line => test/scripts/automated/belvu}/test37    |   0
+ .../scripts/automated/belvu}/test37_results                 |   0
+ .../command_line => test/scripts/automated/belvu}/test38    |   0
+ .../scripts/automated/belvu}/test38_results                 |   0
+ .../command_line => test/scripts/automated/belvu}/test39    |   0
+ .../scripts/automated/belvu}/test39_results                 |   0
+ .../scripts/automated/belvu}/test3_results                  |   0
+ .../command_line => test/scripts/automated/belvu}/test4     |   0
+ .../command_line => test/scripts/automated/belvu}/test40    |   0
+ .../scripts/automated/belvu}/test40_results                 |   0
+ .../command_line => test/scripts/automated/belvu}/test41    |   0
+ .../scripts/automated/belvu}/test41_results                 |   0
+ .../command_line => test/scripts/automated/belvu}/test42    |   0
+ .../scripts/automated/belvu}/test42_results                 |   0
+ .../command_line => test/scripts/automated/belvu}/test43    |   0
+ .../scripts/automated/belvu}/test43_results                 |   0
+ .../command_line => test/scripts/automated/belvu}/test44    |   0
+ .../scripts/automated/belvu}/test44_results                 |   0
+ .../command_line => test/scripts/automated/belvu}/test45    |   0
+ .../scripts/automated/belvu}/test45_results                 |   0
+ .../command_line => test/scripts/automated/belvu}/test46    |   0
+ .../scripts/automated/belvu}/test46_results                 |   0
+ .../command_line => test/scripts/automated/belvu}/test47    |   0
+ .../scripts/automated/belvu}/test47_results                 |   0
+ .../command_line => test/scripts/automated/belvu}/test48    |   0
+ .../scripts/automated/belvu}/test48_results                 |   0
+ .../command_line => test/scripts/automated/belvu}/test49    |   0
+ .../scripts/automated/belvu}/test49_results                 |   0
+ .../scripts/automated/belvu}/test4_results                  |   0
+ .../command_line => test/scripts/automated/belvu}/test5     |   0
+ .../command_line => test/scripts/automated/belvu}/test50    |   0
+ .../scripts/automated/belvu}/test50_results                 |   0
+ .../command_line => test/scripts/automated/belvu}/test51    |   0
+ .../scripts/automated/belvu}/test51_results                 |   0
+ .../scripts/automated/belvu}/test5_results                  |   0
+ .../command_line => test/scripts/automated/belvu}/test6     |   0
+ .../scripts/automated/belvu}/test6_results                  |   0
+ .../command_line => test/scripts/automated/belvu}/test7     |   0
+ .../scripts/automated/belvu}/test7_results                  |   0
+ .../command_line => test/scripts/automated/belvu}/test8     |   0
+ .../scripts/automated/belvu}/test8_results                  |   0
+ .../command_line => test/scripts/automated/belvu}/test9     |   0
+ .../scripts/automated/belvu}/test9_results                  |   0
+ .../tests/gui => test/scripts/manual/belvu}/test1           |   0
+ .../tests/gui => test/scripts/manual/belvu}/test2           |   0
+ .../tests/gui => test/scripts/manual/belvu}/test3           |   0
+ .../tests/gui => test/scripts/manual/belvu}/test4           |   0
+ .../tests/gui => test/scripts/manual/belvu}/test5           |   0
+ src/{doc/Design_notes/testing.ods => test/test_plan.ods}    | Bin
+ 131 files changed, 16 insertions(+), 13 deletions(-)
+
+2011-09-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Small update to dotter usage text
+ src/dotterApp/dotterMain.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+2011-09-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with rev-comping sequences in dotter
+ src/dotterApp/dotterMain.c | 38 ++++++++++++++++++++++++++++++--------
+ 1 file changed, 30 insertions(+), 8 deletions(-)
+
+2011-09-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Performance improvements to middle-dragging on the tree
+ src/blixemApp/bigpicture.c     |  16 ++++-
+ src/blixemApp/blixem_.h        |   3 +-
+ src/blixemApp/blxwindow.c      |  13 +++-
+ src/blixemApp/coverageview.c   |   8 ++-
+ src/blixemApp/detailview.c     |  63 ++++++++++++------
+ src/blixemApp/detailview.h     |   2 +-
+ src/blixemApp/detailviewtree.c | 148 +++++++++++++++++++++++++++++++++++------
+ src/blixemApp/detailviewtree.h |   7 +-
+ src/seqtoolsUtils/utilities.c  |  24 +++++++
+ src/seqtoolsUtils/utilities.h  |   1 +
+ 10 files changed, 237 insertions(+), 48 deletions(-)
+
+2011-09-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a potential crash when finding sequences if feature name to match against is null
+ src/blixemApp/blxwindow.c | 22 ++++++++++++++--------
+ 1 file changed, 14 insertions(+), 8 deletions(-)
+
+2011-09-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a regression with gapped protein alignments
+ src/blixemApp/blxmain.c | 17 +++++++++--------
+ 1 file changed, 9 insertions(+), 8 deletions(-)
+
+2011-09-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a backwards compatibility issue where blast mode was not being set correctly
+ src/blixemApp/blxmain.c           | 85 ++++++++++++++++++++++-----------------
+ src/seqtoolsUtils/blxGff3Parser.c | 10 ++++-
+ 2 files changed, 56 insertions(+), 39 deletions(-)
+
+2011-09-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Better handling of bad characters in fasta files
+ src/blixemApp/blixem_.h       |  2 +-
+ src/blixemApp/blxmain.c       | 16 +++++-----
+ src/blixemApp/blxwindow.c     |  2 +-
+ src/blixemApp/detailview.c    | 10 +++----
+ src/dotterApp/dotplot.c       |  4 +--
+ src/seqtoolsUtils/blxparser.c | 70 ++++++++++++++++++++++++++-----------------
+ src/seqtoolsUtils/utilities.c | 46 ++++++++--------------------
+ src/seqtoolsUtils/utilities.h | 13 ++++----
+ 8 files changed, 80 insertions(+), 83 deletions(-)
+
+2011-09-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Removed . and space from iupac list of valid characters, because only - is a valid gap char in fasta files
+ src/seqtoolsUtils/iupac.h | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+2011-09-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Dotter now gives a better error message if it fails to determine the sequence type of its inputs
+ src/blixemApp/blxview.c       |  6 +++++-
+ src/dotterApp/dotplot.c       |  3 ---
+ src/dotterApp/dotterMain.c    | 19 +++++++++++++------
+ src/seqtoolsUtils/utilities.c | 19 +++++++++++++------
+ src/seqtoolsUtils/utilities.h |  5 +++--
+ 5 files changed, 34 insertions(+), 18 deletions(-)
+
+2011-09-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Improved fasta sequence validation
+ src/blixemApp/blxview.c              |  6 +--
+ src/blixemApp/sequencecellrenderer.c |  4 +-
+ src/seqtoolsUtils/blxparser.c        |  7 ---
+ src/seqtoolsUtils/iupac.h            | 25 +++++++++-
+ src/seqtoolsUtils/translate.c        | 91 +++++++++++++++++-------------------
+ src/seqtoolsUtils/utilities.c        | 24 +++++-----
+ src/seqtoolsUtils/utilities.h        | 14 +++---
+ 7 files changed, 92 insertions(+), 79 deletions(-)
+
+2011-09-08  Gemma Barson  <gb10 at sanger.ac.uk>
+ GFF parser now also checks fasta input for invalid characters
+ src/seqtoolsUtils/blxparser.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+2011-09-08  Gemma Barson  <gb10 at sanger.ac.uk>
+ Blixem now gives warnings if input fasta sequence contains invalid characters
+ src/seqtoolsUtils/blxparser.c | 7 +++++++
+ src/seqtoolsUtils/utilities.c | 4 ++--
+ 2 files changed, 9 insertions(+), 2 deletions(-)
+
+2011-09-08  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated release notes
+ src/doc/User_doc/release_notes.html | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-09-08  Gemma Barson  <gb10 at sanger.ac.uk>
+ Make sure assembly gaps are always visible, even when zoomed out
+ src/blixemApp/blxview.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+2011-09-08  Gemma Barson  <gb10 at sanger.ac.uk>
+ Assembly gaps are now calculated from reference sequence
+ src/blixemApp/blxview.c           | 42 +++++++++++++++++++++++++++++++++++++--
+ src/seqtoolsUtils/blxGff3Parser.c |  1 -
+ src/seqtoolsUtils/utilities.h     |  1 +
+ 3 files changed, 41 insertions(+), 3 deletions(-)
+
+2011-09-08  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated release notes
+ src/doc/User_doc/release_notes.html | 1 +
+ 1 file changed, 1 insertion(+)
+
+2011-09-08  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a major performance issue when reading files with many annotation lines
+ src/belvuApp/belvu.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+2011-08-31  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated release notes
+ src/doc/User_doc/release_notes.html | 2 ++
+ 1 file changed, 2 insertions(+)
+
+2011-08-31  Gemma Barson  <gb10 at sanger.ac.uk>
+ Ensure all error messages are terminated by a newline
+ src/belvuApp/belvu.c       | 38 +++++++++++++++++++-------------------
+ src/belvuApp/belvuMain.c   | 34 +++++++++++++++++-----------------
+ src/belvuApp/belvuTree.c   |  4 ++--
+ src/dotterApp/dotplot.c    |  2 +-
+ src/dotterApp/dotter.c     | 12 ++++++------
+ src/dotterApp/dotterMain.c |  6 +++---
+ 6 files changed, 48 insertions(+), 48 deletions(-)
+
+2011-08-31  Gemma Barson  <gb10 at sanger.ac.uk>
+ Small change to pfetch window max height
+ src/seqtoolsUtils/utilities.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-08-31  Gemma Barson  <gb10 at sanger.ac.uk>
+ Improved pfetch window size
+ src/belvuApp/belvuWindow.c    |   2 +-
+ src/blixemApp/blxwindow.c     |   2 +-
+ src/seqtoolsUtils/utilities.c | 106 +++++++++++++++++++++++++-----------------
+ src/seqtoolsUtils/utilities.h |   3 ++
+ 4 files changed, 69 insertions(+), 44 deletions(-)
+
+2011-08-31  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug where the Custom menu item was not selected on startup when loading a color file
+ src/belvuApp/belvuWindow.c | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+2011-08-31  Gemma Barson  <gb10 at sanger.ac.uk>
+ Improved installation notes on the readme file
+ src/README | 46 +++++++++++++++++++++++++++++-----------------
+ 1 file changed, 29 insertions(+), 17 deletions(-)
+
+2011-08-19  Gemma Barson  <gb10 at sanger.ac.uk>
+ Removed future release number from release notes
+ src/doc/User_doc/release_notes.html | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-08-19  Gemma Barson  <gb10 at sanger.ac.uk>
+ Small change to readme file contact details
+ src/README | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-08-19  Gemma Barson  <gb10 at sanger.ac.uk>
+ Renamed release-notes file
+ src/Makefile.am                          | 2 +-
+ src/NEWS                                 | 2 +-
+ src/doc/User_doc/belvu_quick_start.html  | 4 ++--
+ src/doc/User_doc/blixem_quick_start.html | 4 ++--
+ src/doc/User_doc/dotter_quick_start.html | 4 ++--
+ src/doc/User_doc/index.html              | 2 +-
+ 6 files changed, 9 insertions(+), 9 deletions(-)
+
+2011-08-19  Gemma Barson  <gb10 at sanger.ac.uk>
+ Renamed release-notes file
+ src/doc/User_doc/{news.html => release_notes.html} | 0
+ 1 file changed, 0 insertions(+), 0 deletions(-)
+
+2011-08-19  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added note about usage to readme file
+ src/README | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+2011-08-19  Gemma Barson  <gb10 at sanger.ac.uk>
+ Improvements to help pages; updated what's new for next release
+ src/AUTHORS                              |   6 +-
+ src/Makefile.am                          |   3 +-
+ src/NEWS                                 |   5 +-
+ src/doc/User_doc/belvu_news.html         |  43 -------
+ src/doc/User_doc/belvu_quick_start.html  |   4 +-
+ src/doc/User_doc/blixem_news.html        |  86 -------------
+ src/doc/User_doc/blixem_quick_start.html |   4 +-
+ src/doc/User_doc/dotter_news.html        |  56 ---------
+ src/doc/User_doc/dotter_quick_start.html |   4 +-
+ src/doc/User_doc/index.html              |   4 +-
+ src/doc/User_doc/news.html               | 203 +++++++++++++++++++++++++++++++
+ src/doc/User_doc/todo.html               |  56 ++++-----
+ 12 files changed, 237 insertions(+), 237 deletions(-)
+
+2011-08-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed problem with autoconf convenience libraries
+ src/Makefile.am | 15 +++++----------
+ 1 file changed, 5 insertions(+), 10 deletions(-)
+
+2011-08-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed some bugs with autoconf
+ src/Makefile.am | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+2011-08-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Removed obsolete version number
+ src/version.m4 | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-08-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Small update to readme file
+ src/README | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+2011-08-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Building individual targets now finds dependencies
+ src/Makefile.am               | 74 +++++++++++++++++++++++++++++++++++++++----
+ src/belvuApp/Makefile.am      | 12 -------
+ src/blixemApp/Makefile.am     |  8 -----
+ src/configure.ac              | 11 ++++---
+ src/doc/Makefile.am           |  4 ---
+ src/doc/User_doc/Makefile.am  | 10 ------
+ src/dotterApp/Makefile.am     |  8 -----
+ src/libpfetch/Makefile.am     | 29 -----------------
+ src/seqtoolsUtils/Makefile.am |  8 -----
+ src/seqtoolsUtils/translate.c |  2 +-
+ 10 files changed, 74 insertions(+), 92 deletions(-)
+
+2011-08-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated readme with info about belvu
+ src/README | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+2011-08-15  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added in old-style ascii arrows to remove-left/remove-right menu options
+ src/belvuApp/belvuWindow.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+2011-08-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Small update to belvu what's-new doc
+ src/doc/User_doc/belvu_news.html | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-08-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Can now set zero statusbar height to hide statusbar
+ src/belvuApp/belvuMain.c         | 2 +-
+ src/belvuApp/belvuWindow.c       | 8 +++++++-
+ src/doc/User_doc/belvu_usage.txt | 2 +-
+ 3 files changed, 9 insertions(+), 3 deletions(-)
+
+2011-08-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a broken link in the belvu help page
+ src/doc/User_doc/belvu_quick_start.html | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-08-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/belvu' into develop
+2011-08-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Improvements to alignment view padding
+ src/belvuApp/belvuAlignment.c | 56 +++++--------------------------------------
+ 1 file changed, 6 insertions(+), 50 deletions(-)
+
+2011-08-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug where the columns were not being resized correctly after deleting sequences
+ src/belvuApp/belvu.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+2011-08-11  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added belvu tests
+ src/doc/Design_notes/tests/README                  |   10 +
+ src/doc/Design_notes/tests/command_line/test1      |    4 +
+ src/doc/Design_notes/tests/command_line/test10     |    5 +
+ .../Design_notes/tests/command_line/test10_results |   45 +
+ src/doc/Design_notes/tests/command_line/test11     |    5 +
+ .../Design_notes/tests/command_line/test11_results | 1110 ++++++
+ src/doc/Design_notes/tests/command_line/test12     |    5 +
+ .../Design_notes/tests/command_line/test12_results | 2524 ++++++++++++++
+ src/doc/Design_notes/tests/command_line/test13     |    5 +
+ .../Design_notes/tests/command_line/test13_results |   61 +
+ src/doc/Design_notes/tests/command_line/test14     |    6 +
+ .../Design_notes/tests/command_line/test14_results | 2524 ++++++++++++++
+ src/doc/Design_notes/tests/command_line/test15     |    5 +
+ .../Design_notes/tests/command_line/test15_results |   61 +
+ src/doc/Design_notes/tests/command_line/test16     |    6 +
+ .../Design_notes/tests/command_line/test16_results | 2524 ++++++++++++++
+ src/doc/Design_notes/tests/command_line/test17     |    6 +
+ .../Design_notes/tests/command_line/test17_results | 2524 ++++++++++++++
+ src/doc/Design_notes/tests/command_line/test18     |    5 +
+ .../Design_notes/tests/command_line/test18_results | 2524 ++++++++++++++
+ src/doc/Design_notes/tests/command_line/test19     |    4 +
+ .../Design_notes/tests/command_line/test19_results |    2 +
+ .../Design_notes/tests/command_line/test1_results  |  226 ++
+ src/doc/Design_notes/tests/command_line/test2      |    4 +
+ src/doc/Design_notes/tests/command_line/test20     |    5 +
+ .../Design_notes/tests/command_line/test20_results |  380 +++
+ src/doc/Design_notes/tests/command_line/test21     |    5 +
+ .../Design_notes/tests/command_line/test21_results | 1119 ++++++
+ src/doc/Design_notes/tests/command_line/test22     |    5 +
+ .../Design_notes/tests/command_line/test22_results |   43 +
+ src/doc/Design_notes/tests/command_line/test23     |    5 +
+ .../Design_notes/tests/command_line/test23_results | 3544 ++++++++++++++++++++
+ src/doc/Design_notes/tests/command_line/test24     |    4 +
+ .../Design_notes/tests/command_line/test24_results |   48 +
+ src/doc/Design_notes/tests/command_line/test25     |    5 +
+ .../Design_notes/tests/command_line/test25_results |   58 +
+ src/doc/Design_notes/tests/command_line/test26     |    9 +
+ .../Design_notes/tests/command_line/test26_results |  226 ++
+ src/doc/Design_notes/tests/command_line/test27     |    9 +
+ .../Design_notes/tests/command_line/test27_results |  226 ++
+ src/doc/Design_notes/tests/command_line/test28     |    5 +
+ .../Design_notes/tests/command_line/test28_results |    2 +
+ src/doc/Design_notes/tests/command_line/test29     |    6 +
+ .../Design_notes/tests/command_line/test29_results |    2 +
+ .../Design_notes/tests/command_line/test2_results  |   58 +
+ src/doc/Design_notes/tests/command_line/test3      |    4 +
+ src/doc/Design_notes/tests/command_line/test30     |    6 +
+ .../Design_notes/tests/command_line/test30_results |    2 +
+ src/doc/Design_notes/tests/command_line/test31     |    6 +
+ .../Design_notes/tests/command_line/test31_results |  110 +
+ src/doc/Design_notes/tests/command_line/test32     |    6 +
+ .../Design_notes/tests/command_line/test32_results |  147 +
+ src/doc/Design_notes/tests/command_line/test33     |    6 +
+ .../Design_notes/tests/command_line/test33_results |   23 +
+ src/doc/Design_notes/tests/command_line/test34     |    5 +
+ .../Design_notes/tests/command_line/test34_results |   23 +
+ src/doc/Design_notes/tests/command_line/test35     |    5 +
+ .../Design_notes/tests/command_line/test35_results |  371 ++
+ src/doc/Design_notes/tests/command_line/test36     |    5 +
+ .../Design_notes/tests/command_line/test36_results |  843 +++++
+ .../tests/command_line/test36_results_old          |  843 +++++
+ src/doc/Design_notes/tests/command_line/test37     |    5 +
+ .../Design_notes/tests/command_line/test37_results |  843 +++++
+ src/doc/Design_notes/tests/command_line/test38     |    5 +
+ .../Design_notes/tests/command_line/test38_results |  371 ++
+ src/doc/Design_notes/tests/command_line/test39     |    5 +
+ .../Design_notes/tests/command_line/test39_results |  371 ++
+ .../Design_notes/tests/command_line/test3_results  |   58 +
+ src/doc/Design_notes/tests/command_line/test4      |    4 +
+ src/doc/Design_notes/tests/command_line/test40     |    5 +
+ .../Design_notes/tests/command_line/test40_results |   24 +
+ src/doc/Design_notes/tests/command_line/test41     |    5 +
+ .../Design_notes/tests/command_line/test41_results | 1108 ++++++
+ src/doc/Design_notes/tests/command_line/test42     |    5 +
+ .../Design_notes/tests/command_line/test42_results | 1108 ++++++
+ src/doc/Design_notes/tests/command_line/test43     |    5 +
+ .../Design_notes/tests/command_line/test43_results | 1108 ++++++
+ src/doc/Design_notes/tests/command_line/test44     |    5 +
+ .../Design_notes/tests/command_line/test44_results | 1108 ++++++
+ src/doc/Design_notes/tests/command_line/test45     |    5 +
+ .../Design_notes/tests/command_line/test45_results | 1108 ++++++
+ src/doc/Design_notes/tests/command_line/test46     |    5 +
+ .../Design_notes/tests/command_line/test46_results | 1108 ++++++
+ src/doc/Design_notes/tests/command_line/test47     |    5 +
+ .../Design_notes/tests/command_line/test47_results | 1108 ++++++
+ src/doc/Design_notes/tests/command_line/test48     |    5 +
+ .../Design_notes/tests/command_line/test48_results | 1108 ++++++
+ src/doc/Design_notes/tests/command_line/test49     |    5 +
+ .../Design_notes/tests/command_line/test49_results | 1108 ++++++
+ .../Design_notes/tests/command_line/test4_results  |  147 +
+ src/doc/Design_notes/tests/command_line/test5      |    4 +
+ src/doc/Design_notes/tests/command_line/test50     |    5 +
+ .../Design_notes/tests/command_line/test50_results | 1108 ++++++
+ src/doc/Design_notes/tests/command_line/test51     |    5 +
+ .../Design_notes/tests/command_line/test51_results |   24 +
+ .../Design_notes/tests/command_line/test5_results  |  110 +
+ src/doc/Design_notes/tests/command_line/test6      |    4 +
+ .../Design_notes/tests/command_line/test6_results  |   61 +
+ src/doc/Design_notes/tests/command_line/test7      |    4 +
+ .../Design_notes/tests/command_line/test7_results  |  417 +++
+ src/doc/Design_notes/tests/command_line/test8      |    5 +
+ .../Design_notes/tests/command_line/test8_results  | 3544 ++++++++++++++++++++
+ src/doc/Design_notes/tests/command_line/test9      |    5 +
+ .../Design_notes/tests/command_line/test9_results  |  236 ++
+ src/doc/Design_notes/tests/data/ALIGN.fasta        |  740 ++++
+ src/doc/Design_notes/tests/data/ALIGN.selex        |  370 ++
+ src/doc/Design_notes/tests/data/PF02171_full.selex |  842 +++++
+ src/doc/Design_notes/tests/data/PF02171_full.stock | 1739 ++++++++++
+ src/doc/Design_notes/tests/data/PF02171_seed.fasta |  176 +
+ src/doc/Design_notes/tests/data/PF02171_seed.msf   |  215 ++
+ .../Design_notes/tests/data/PF02171_seed.scores    |   33 +
+ src/doc/Design_notes/tests/data/PF02171_seed.segs  |    4 +
+ src/doc/Design_notes/tests/data/PF02171_seed.selex |   45 +
+ src/doc/Design_notes/tests/data/PF02171_seed.stock |   59 +
+ .../tests/data/PF02171_seed_segs.stock             |   63 +
+ .../tests/data/PF02171_seed_separator.stock        |   59 +
+ src/doc/Design_notes/tests/data/cgph_pale.color    |   20 +
+ src/doc/Design_notes/tests/data/cgph_pale2.color   |    5 +
+ src/doc/Design_notes/tests/data/markup.color       |   20 +
+ src/doc/Design_notes/tests/data/markup2.color      |    3 +
+ .../Design_notes/tests/data/markup_content.selex   |   20 +
+ .../Design_notes/tests/data/markup_headers.selex   |   32 +
+ src/doc/Design_notes/tests/gui/test1               |   11 +
+ src/doc/Design_notes/tests/gui/test2               |    9 +
+ src/doc/Design_notes/tests/gui/test3               |    5 +
+ src/doc/Design_notes/tests/gui/test4               |   10 +
+ src/doc/Design_notes/tests/gui/test5               |    9 +
+ 127 files changed, 44240 insertions(+)
+
+2011-08-11  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated belvu what's new notes
+ src/doc/User_doc/belvu_news.html | 11 ++++++++++-
+ 1 file changed, 10 insertions(+), 1 deletion(-)
+
+2011-08-11  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added notes about gtkrc to belvu quick start guide
+ src/doc/User_doc/belvu_quick_start.html | 25 +++++++++++++++++++++++++
+ 1 file changed, 25 insertions(+)
+
+2011-08-11  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated belvu usage with new environment variable
+ src/doc/User_doc/belvu_usage.txt | 1 +
+ 1 file changed, 1 insertion(+)
+
+2011-08-11  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed bugs with font size
+ src/belvuApp/belvu.c          |  8 ++++++--
+ src/belvuApp/belvuAlignment.c |  3 +--
+ src/belvuApp/belvuMain.c      |  3 ++-
+ src/belvuApp/belvuWindow.c    | 25 +++++++++++++------------
+ src/belvuApp/belvu_.h         |  2 ++
+ 5 files changed, 24 insertions(+), 17 deletions(-)
+
+2011-08-11  Gemma Barson  <gb10 at sanger.ac.uk>
+ Made sure all messages are terminated with a newline
+ src/belvuApp/belvu.c       | 24 ++++++++++++------------
+ src/belvuApp/belvuWindow.c |  4 ++--
+ 2 files changed, 14 insertions(+), 14 deletions(-)
+
+2011-08-11  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with the alignment width not being calculated correctly
+ src/belvuApp/belvuAlignment.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-08-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with displaying more than one assembly gap
+ src/blixemApp/blxview.c | 7 +++----
+ 1 file changed, 3 insertions(+), 4 deletions(-)
+
+2011-08-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/assembly-gaps' into develop
+2011-08-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with displaying assembly gaps when display is reversed
+ src/blixemApp/bigpicture.c     |  6 +++++-
+ src/blixemApp/bigpicturegrid.c |  6 +++++-
+ src/blixemApp/blixem_.h        |  2 +-
+ src/blixemApp/blxview.c        | 10 +++++-----
+ src/blixemApp/exonview.c       |  6 +++++-
+ 5 files changed, 21 insertions(+), 9 deletions(-)
+
+2011-08-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Assembly gaps are now highlighted in the big picture
+ src/blixemApp/bigpicture.c     |  5 +++++
+ src/blixemApp/bigpicturegrid.c |  7 +++++++
+ src/blixemApp/blixem_.h        |  9 +++++++++
+ src/blixemApp/blxview.c        | 38 ++++++++++++++++++++++++++++++++++++++
+ src/blixemApp/blxwindow.c      |  1 +
+ src/blixemApp/exonview.c       |  7 ++++++-
+ src/seqtoolsUtils/utilities.h  |  1 +
+ 7 files changed, 67 insertions(+), 1 deletion(-)
+
+2011-08-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added 'gap' to supported GFF types
+ src/seqtoolsUtils/blxGff3Parser.c | 3 +++
+ src/seqtoolsUtils/blxmsp.h        | 1 +
+ 2 files changed, 4 insertions(+)
+
+2011-08-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/utr' into develop
+2011-08-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a regression with reading introns in exblx format
+ src/seqtoolsUtils/blxparser.c | 18 +++++++++++++++++-
+ 1 file changed, 17 insertions(+), 1 deletion(-)
+
+2011-08-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with constructing transcripts when given CDS/UTR components
+ src/seqtoolsUtils/blxmsp.c | 259 +++++++++++++++++++++------------------------
+ 1 file changed, 123 insertions(+), 136 deletions(-)
+
+2011-08-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ RT225220: fixed a bug where multiple UTRs in the same exon are not displayed
+ src/seqtoolsUtils/blxmsp.c    | 263 +++++++++++++++++++++++++-----------------
+ src/seqtoolsUtils/utilities.c |   6 +
+ src/seqtoolsUtils/utilities.h |   1 +
+ 3 files changed, 167 insertions(+), 103 deletions(-)
+
+2011-08-08  Gemma Barson  <gb10 at sanger.ac.uk>
+ RT226652: fixed a bug where blixem was ignoring 'invalid' characters in fasta files
+ src/seqtoolsUtils/blxparser.c | 15 ++++++++-------
+ src/seqtoolsUtils/translate.c | 26 +++++++++++++++++---------
+ src/seqtoolsUtils/utilities.c |  7 +++++++
+ src/seqtoolsUtils/utilities.h |  1 +
+ 4 files changed, 33 insertions(+), 16 deletions(-)
+
+2011-08-02  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated blixem what's new page
+ src/doc/User_doc/blixem_news.html | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+2011-08-02  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated Belvu documentation
+ src/doc/Design_notes/index.html              |  2 +-
+ src/doc/User_doc/Makefile.am                 |  4 +-
+ src/doc/User_doc/belvu_news.html             | 17 +++++-
+ src/doc/User_doc/belvu_quick_start.html      | 77 +++++++++++++++++-----------
+ src/doc/User_doc/belvu_usage.txt             |  1 -
+ src/doc/User_doc/blixem_quick_start.html     |  5 +-
+ src/doc/User_doc/dotter_quick_start.html     |  5 +-
+ src/doc/{Design_notes => User_doc}/todo.html |  6 ++-
+ 8 files changed, 73 insertions(+), 44 deletions(-)
+
+2011-08-01  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a potential crash when opening the tree window if the user scrolls the mouse-wheel at the same time
+ src/belvuApp/belvuTree.c | 25 ++++++++++++++-----------
+ 1 file changed, 14 insertions(+), 11 deletions(-)
+
+2011-07-29  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed an issue where user could not re-select the sort-by-similarity/id option after changing the selection
+ src/belvuApp/belvuWindow.c | 12 ++++++++++--
+ 1 file changed, 10 insertions(+), 2 deletions(-)
+
+2011-07-29  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added a fix to make sure tree cannot get so large that it causes a crash
+ src/belvuApp/belvuTree.c | 12 ++++++++++--
+ 1 file changed, 10 insertions(+), 2 deletions(-)
+
+2011-07-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with sorting by similarity on start up when the first line is a markup line
+ src/belvuApp/belvuMain.c | 14 ++++++++++++--
+ 1 file changed, 12 insertions(+), 2 deletions(-)
+
+2011-07-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/belvu'
+2011-07-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a regression with the output-probabilities function
+ src/belvuApp/belvu.c | 32 ++++++++++++++++----------------
+ 1 file changed, 16 insertions(+), 16 deletions(-)
+
+2011-07-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed some leaks and memory bugs to do with the tree nodes
+ src/belvuApp/belvu.c          |   1 -
+ src/belvuApp/belvuTree.c      | 126 ++++++++++++++++++++----------------------
+ src/belvuApp/belvu_.h         |   1 -
+ src/seqtoolsUtils/utilities.c |   3 +
+ 4 files changed, 64 insertions(+), 67 deletions(-)
+
+2011-07-27  Gemma Barson  <gb10 at sanger.ac.uk>
+ A Tree struct is now used to provide a persistent pointer to the main tree
+ src/belvuApp/belvu.c       |  61 +++++++++-----
+ src/belvuApp/belvuMain.c   |   9 +-
+ src/belvuApp/belvuTree.c   | 203 +++++++++++++++++++++++++++------------------
+ src/belvuApp/belvuTree.h   |   5 +-
+ src/belvuApp/belvuWindow.c |  10 +--
+ src/belvuApp/belvu_.h      |  46 +++++-----
+ 6 files changed, 201 insertions(+), 133 deletions(-)
+
+2011-07-27  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed some bugs with displaying bootstrap trees
+ src/belvuApp/belvu.c       |  50 ++++++--
+ src/belvuApp/belvuTree.c   | 314 ++++++++++++++++++++++++++++++++++-----------
+ src/belvuApp/belvuTree.h   |   8 +-
+ src/belvuApp/belvuWindow.c |  74 +++--------
+ 4 files changed, 307 insertions(+), 139 deletions(-)
+
+2011-07-27  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with the blosum matrix when calculating the tree
+ src/belvuApp/belvuTree.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+2011-07-27  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed some bugs with bootstrap trees
+ src/belvuApp/belvu.c       |  4 ++--
+ src/belvuApp/belvuMain.c   |  2 +-
+ src/belvuApp/belvuTree.c   | 53 ++++++++++++++++++++++++++++++++--------------
+ src/belvuApp/belvuWindow.c |  2 +-
+ src/belvuApp/belvu_.h      |  2 +-
+ 5 files changed, 42 insertions(+), 21 deletions(-)
+
+2011-07-26  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed some bugs with sorting by similarity
+ src/belvuApp/belvu.c          | 71 +++++++++++++++++++++++++++++++++----------
+ src/belvuApp/belvuAlignment.c |  6 ++--
+ src/belvuApp/belvuAlignment.h |  3 ++
+ src/belvuApp/belvuMain.c      |  6 ++++
+ src/belvuApp/belvuTree.c      |  2 +-
+ 5 files changed, 67 insertions(+), 21 deletions(-)
+
+2011-07-26  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed an issue where the initial sort mode was not being reflected in the menu options
+ src/belvuApp/belvuWindow.c | 13 +++++--------
+ 1 file changed, 5 insertions(+), 8 deletions(-)
+
+2011-07-26  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with sorting by identity
+ src/belvuApp/belvu.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+2011-07-25  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed some bugs with disabling colors
+ src/belvuApp/belvuAlignment.c | 11 +++++++++++
+ src/belvuApp/belvuWindow.c    | 11 +++++++++--
+ 2 files changed, 20 insertions(+), 2 deletions(-)
+
+2011-07-22  Gemma Barson  <gb10 at sanger.ac.uk>
+ Alignment pointers are now persistent (fixes lots of bugs to do with invalid pointers)
+ src/belvuApp/belvu.c          | 526 +++++++++++++++++-------------------------
+ src/belvuApp/belvuAlignment.c |  10 +-
+ src/belvuApp/belvuMain.c      |  39 ++--
+ src/belvuApp/belvuTree.c      |  86 ++-----
+ src/belvuApp/belvuWindow.c    |  12 +-
+ src/belvuApp/belvu_.h         |   2 +
+ 6 files changed, 252 insertions(+), 423 deletions(-)
+
+2011-07-22  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a regression with the --zoom-range argument
+ src/blixemApp/blxwindow.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+2011-07-22  Gemma Barson  <gb10 at sanger.ac.uk>
+ Blixem now gets the reference sequence coords from the fasta definition line, rather than the sequence-region header in the GFF file
+ src/blixemApp/blixem_.h           |  2 +-
+ src/blixemApp/blxmain.c           | 35 +++++++++++-----
+ src/blixemApp/blxview.c           |  3 +-
+ src/dotterApp/dotterMain.c        |  3 +-
+ src/seqtoolsUtils/blxGff3Parser.c | 30 ++++++++++----
+ src/seqtoolsUtils/blxGff3Parser.h |  2 +-
+ src/seqtoolsUtils/blxparser.c     | 84 +++++++++++++++++++++++++--------------
+ 7 files changed, 105 insertions(+), 54 deletions(-)
+
+2011-07-22  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with the --zoom-range argument in protein blixem
+ src/blixemApp/bigpicture.c | 5 +----
+ src/blixemApp/blxwindow.c  | 5 +++++
+ 2 files changed, 6 insertions(+), 4 deletions(-)
+
+2011-07-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/belvu'
+2011-07-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with sorting by tree on startup
+ src/belvuApp/belvu.c       | 26 +++++++++++++++++---------
+ src/belvuApp/belvuMain.c   |  2 +-
+ src/belvuApp/belvuWindow.c |  6 +++---
+ src/belvuApp/belvu_.h      |  4 ++--
+ 4 files changed, 23 insertions(+), 15 deletions(-)
+
+2011-07-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed an issue where markup lines are not shown if tree is shown on startup
+ src/belvuApp/belvuWindow.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+2011-07-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Removed obsolete debugging option
+ src/belvuApp/belvuMain.c | 5 +----
+ 1 file changed, 1 insertion(+), 4 deletions(-)
+
+2011-07-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed an issue where the markup colors file could overwrite the residue colors file
+ src/belvuApp/belvu.c       |  9 ++++++++-
+ src/belvuApp/belvuMain.c   | 10 +++++-----
+ src/belvuApp/belvuWindow.c |  2 +-
+ src/belvuApp/belvu_.h      |  2 +-
+ 4 files changed, 15 insertions(+), 8 deletions(-)
+
+2011-07-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug where custom colors were being overwritten after loading a color file with the -l argument
+ src/belvuApp/belvuMain.c   | 78 ++++++++++++++++++++--------------------------
+ src/belvuApp/belvuWindow.c | 11 +++++--
+ 2 files changed, 42 insertions(+), 47 deletions(-)
+
+2011-07-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug where the wrong conservation was being calculated when using the -c argument
+ src/belvuApp/belvu.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+2011-07-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with the --zoom-range argument for protein blixem
+ src/blixemApp/blxwindow.c | 16 ++++++++++++----
+ 1 file changed, 12 insertions(+), 4 deletions(-)
+
+2011-07-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/belvu'
+2011-07-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added belvu_.h to autoconf (it was missing from the distribution)
+ src/belvuApp/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-07-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed some bugs with the -b option
+ src/belvuApp/belvu.c     | 84 +++++++++++++++++++++++++++++++++++++++++-------
+ src/belvuApp/belvuMain.c |  4 +--
+ src/belvuApp/belvuTree.c | 34 +++++++++++++-------
+ src/belvuApp/belvu_.h    |  3 +-
+ 4 files changed, 100 insertions(+), 25 deletions(-)
+
+2011-07-19  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a typo that was causing the initial exon view height to be calculated incorrectly
+ src/blixemApp/blxwindow.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-07-19  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug where introns that are partially out of range were not always being shown
+ src/seqtoolsUtils/blxGff3Parser.c | 18 +++++++++++++++---
+ src/seqtoolsUtils/blxmsp.c        |  5 +++++
+ src/seqtoolsUtils/blxmsp.h        |  1 +
+ 3 files changed, 21 insertions(+), 3 deletions(-)
+
+2011-07-18  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug where short-reads were incorrectly squashed onto the same line when their sources are different
+ src/blixemApp/detailviewtree.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+2011-07-18  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/belvu'
+2011-07-18  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a crash with the -b argument
+ src/belvuApp/belvuTree.c | 24 +++++++++++++++++++-----
+ 1 file changed, 19 insertions(+), 5 deletions(-)
+
+2011-07-18  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a divide-by-zero error when using the -c argument
+ src/belvuApp/belvuMain.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-07-18  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix a potential crash if the tree size is too big
+ src/belvuApp/belvuAlignment.c | 6 ++----
+ src/belvuApp/belvuTree.c      | 8 +++++++-
+ src/belvuApp/belvu_.h         | 3 +++
+ 3 files changed, 12 insertions(+), 5 deletions(-)
+
+2011-07-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed an issue with the tree scale updating on the tree settings dialog
+ src/belvuApp/belvuTree.c | 26 +++++++++++---------------
+ 1 file changed, 11 insertions(+), 15 deletions(-)
+
+2011-07-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Update tree scale according to current tree method on tree settings dialog
+ src/belvuApp/belvu.c     |   2 +-
+ src/belvuApp/belvuTree.c | 123 +++++++++++++++++++++++++++++++++++++++--------
+ src/belvuApp/belvuTree.h |   2 +
+ 3 files changed, 105 insertions(+), 22 deletions(-)
+
+2011-07-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with uninitialised strings in markup lines when strip-coords option is off
+ src/belvuApp/belvu.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+2011-07-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed an issue where the main window was being shown in tree-only mode
+ src/belvuApp/belvuWindow.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+2011-07-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Another bugfix to do with separateMarkupLines
+ src/belvuApp/belvuTree.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+2011-07-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed bugs with tree selection getting messed up by separateMarkupLines
+ src/belvuApp/belvu.c       |  12 +++--
+ src/belvuApp/belvuMain.c   |  40 +++++-----------
+ src/belvuApp/belvuTree.c   | 116 ++++++++++++++++++++++++++++++++++-----------
+ src/belvuApp/belvuWindow.c |  35 ++++++++++----
+ src/belvuApp/belvu_.h      |   3 ++
+ 5 files changed, 137 insertions(+), 69 deletions(-)
+
+2011-07-15  Gemma Barson  <gb10 at sanger.ac.uk>
+ Removed commented-out code
+ src/belvuApp/belvuMain.c   |  24 --------
+ src/belvuApp/belvuTree.c   |  13 ++--
+ src/belvuApp/belvuWindow.c | 146 ++++++++-------------------------------------
+ 3 files changed, 31 insertions(+), 152 deletions(-)
+
+2011-07-15  Gemma Barson  <gb10 at sanger.ac.uk>
+ Removed old compiled-out code
+ src/belvuApp/belvu.c | 1942 +-------------------------------------------------
+ 1 file changed, 21 insertions(+), 1921 deletions(-)
+
+2011-07-15  Gemma Barson  <gb10 at sanger.ac.uk>
+ Small cosmetic changes to menus
+ src/belvuApp/belvuWindow.c | 9 ++++++---
+ 1 file changed, 6 insertions(+), 3 deletions(-)
+
+2011-07-15  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a program error where messages could get directed to the wrong output
+ src/seqtoolsUtils/utilities.c | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+2011-07-15  Gemma Barson  <gb10 at sanger.ac.uk>
+ Info messages and warnings/errors are now sent to stderr
+ src/belvuApp/belvu.c          | 42 +++++++++++++------------------------
+ src/belvuApp/belvuMain.c      | 15 ++++++++++++--
+ src/belvuApp/belvuTree.c      |  8 ++++----
+ src/belvuApp/belvuWindow.c    | 10 ++++-----
+ src/seqtoolsUtils/utilities.c | 48 +++++++++++++++++++++++++------------------
+ 5 files changed, 64 insertions(+), 59 deletions(-)
+
+2011-07-15  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed an issue where the conservation plot line width was not being used
+ src/belvuApp/belvuConsPlot.c | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+2011-07-15  Gemma Barson  <gb10 at sanger.ac.uk>
+ Code tidying
+ src/belvuApp/belvu.c | 62 +---------------------------------------------------
+ 1 file changed, 1 insertion(+), 61 deletions(-)
+
+2011-07-15  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed an issue where branch labels where not shown in centre of branch
+ src/belvuApp/belvuTree.c | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+2011-07-15  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed highlighting for match segments
+ src/belvuApp/belvuAlignment.c |  3 ---
+ src/belvuApp/belvuTree.c      | 14 ++++++++------
+ 2 files changed, 8 insertions(+), 9 deletions(-)
+
+2011-07-15  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed some bugs with reading matching segments
+ src/belvuApp/belvu.c          | 499 +-----------------------------------------
+ src/belvuApp/belvuAlignment.c |  11 +-
+ 2 files changed, 11 insertions(+), 499 deletions(-)
+
+2011-07-15  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed an issue where the busy cursor was not being updated
+ src/belvuApp/belvu.c | 13 +++++++++----
+ 1 file changed, 9 insertions(+), 4 deletions(-)
+
+2011-07-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Tidying code
+ src/belvuApp/belvu.c | 71 ++--------------------------------------------------
+ 1 file changed, 2 insertions(+), 69 deletions(-)
+
+2011-07-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added busy cursor when outputting identities and calculating tree
+ src/belvuApp/belvu.c       | 45 +++++++++++++++++++++++++++++++++++++++++++++
+ src/belvuApp/belvuMain.c   |  2 +-
+ src/belvuApp/belvuTree.c   |  3 ++-
+ src/belvuApp/belvuWindow.c | 18 ++++++++----------
+ src/belvuApp/belvu_.h      |  6 ++++++
+ 5 files changed, 62 insertions(+), 12 deletions(-)
+
+2011-07-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Replaced color picker buttons with plain color boxes
+ src/belvuApp/belvuWindow.c | 14 ++++++++++----
+ 1 file changed, 10 insertions(+), 4 deletions(-)
+
+2011-07-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug where foreground colors were not being shown
+ src/belvuApp/belvuAlignment.c | 97 ++++++++++++++++++++++++-------------------
+ src/seqtoolsUtils/utilities.c |  9 ++++
+ src/seqtoolsUtils/utilities.h |  1 +
+ 3 files changed, 65 insertions(+), 42 deletions(-)
+
+2011-07-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a potential crash where the wrapped-alignment pixmap is too large
+ src/belvuApp/belvuAlignment.c | 29 ++++++++++++++++++++++++++---
+ 1 file changed, 26 insertions(+), 3 deletions(-)
+
+2011-07-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Made the organisms window scrollable
+ src/belvuApp/belvu.c       |   1 +
+ src/belvuApp/belvuWindow.c | 149 +++++++++++++++++++++++++++++----------------
+ src/belvuApp/belvu_.h      |   1 +
+ 3 files changed, 98 insertions(+), 53 deletions(-)
+
+2011-07-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Removed an incorrect shortcut tip
+ src/belvuApp/belvuWindow.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+2011-07-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with the scoredist calculation being based on invalid values
+ src/belvuApp/belvuTree.c | 46 ++++++++++++++++++++++++----------------------
+ 1 file changed, 24 insertions(+), 22 deletions(-)
+
+2011-07-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Removed debug statement
+ src/seqtoolsUtils/utilities.h | 2 --
+ 1 file changed, 2 deletions(-)
+
+2011-07-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Create/show the tree after OK-ing the tree settings dialog
+ src/belvuApp/belvuTree.c | 11 +++++++++--
+ 1 file changed, 9 insertions(+), 2 deletions(-)
+
+2011-07-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed another rounding error and tidied tree code
+ src/belvuApp/belvu.c          |  15 +-
+ src/belvuApp/belvuTree.c      | 485 ++++++++++++++++++++++++------------------
+ src/seqtoolsUtils/utilities.h |   3 +
+ 3 files changed, 279 insertions(+), 224 deletions(-)
+
+2011-07-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a rounding error
+ src/belvuApp/belvuTree.c | 10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+2011-07-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug where wrapped-alignment font was not being set
+ src/belvuApp/belvuWindow.c | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+2011-07-11  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated help and usage info
+ src/belvuApp/belvuMain.c                | 3 ++-
+ src/doc/User_doc/belvu_quick_start.html | 3 +++
+ src/doc/User_doc/belvu_usage.txt        | 1 +
+ 3 files changed, 6 insertions(+), 1 deletion(-)
+
+2011-07-08  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed some bugs with the font-size environment variable
+ src/belvuApp/belvuWindow.c | 23 ++++++++---------------
+ 1 file changed, 8 insertions(+), 15 deletions(-)
+
+2011-07-08  Gemma Barson  <gb10 at sanger.ac.uk>
+ Allow tree and alignment to zoom separately
+ src/belvuApp/belvuTree.c      | 25 ++++++++++++++++++++-----
+ src/belvuApp/belvuWindow.c    | 28 +---------------------------
+ src/belvuApp/belvuWindow.h    |  2 --
+ src/seqtoolsUtils/utilities.c | 12 ++++++++++++
+ src/seqtoolsUtils/utilities.h |  1 +
+ 5 files changed, 34 insertions(+), 34 deletions(-)
+
+2011-07-08  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added zoom buttons and shortcut keys
+ src/belvuApp/belvuAlignment.c |   9 ----
+ src/belvuApp/belvuAlignment.h |   2 -
+ src/belvuApp/belvuTree.c      |  60 +++++++++++++++++++--
+ src/belvuApp/belvuTree.h      |   1 +
+ src/belvuApp/belvuWindow.c    | 119 +++++++++++++++++++++++++++++++++---------
+ src/belvuApp/belvuWindow.h    |   5 ++
+ src/seqtoolsUtils/utilities.c |  16 ++++++
+ src/seqtoolsUtils/utilities.h |   1 +
+ 8 files changed, 172 insertions(+), 41 deletions(-)
+
+2011-07-08  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added an option to change the menu font size
+ src/belvuApp/belvuAlignment.c | 160 +++++++++++++++++++++++++++++-------------
+ src/belvuApp/belvuAlignment.h |   4 ++
+ src/belvuApp/belvuWindow.c    | 123 +++++++++++++++++++++++++++-----
+ src/blixemApp/detailview.c    |   2 -
+ src/seqtoolsUtils/utilities.h |   2 +
+ 5 files changed, 224 insertions(+), 67 deletions(-)
+
+2011-07-07  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added Find functionality
+ src/belvuApp/belvu.c          |   8 ++
+ src/belvuApp/belvuAlignment.c |  22 -----
+ src/belvuApp/belvuWindow.c    | 200 +++++++++++++++++++++++++++++++++++++++++-
+ src/belvuApp/belvu_.h         |   6 +-
+ src/blixemApp/blxwindow.c     | 128 ---------------------------
+ src/seqtoolsUtils/utilities.c | 126 ++++++++++++++++++++++++++
+ src/seqtoolsUtils/utilities.h |  15 +++-
+ 7 files changed, 348 insertions(+), 157 deletions(-)
+
+2011-07-07  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated belvu release notes
+ src/doc/User_doc/belvu_news.html | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+2011-07-07  Gemma Barson  <gb10 at sanger.ac.uk>
+ Improved functionality to find external commands
+ src/seqtoolsUtils/utilities.c | 41 +++++------------------------------------
+ 1 file changed, 5 insertions(+), 36 deletions(-)
+
+2011-07-06  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added new CGPH color scheme to default list
+ src/belvuApp/belvu.c       | 16 ++++++++++++++--
+ src/belvuApp/belvuWindow.c |  6 ++++--
+ src/belvuApp/belvu_.h      |  3 ++-
+ 3 files changed, 20 insertions(+), 5 deletions(-)
+
+2011-07-06  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed an issue where the toggle-color-modes option was not updating the current color-scheme in the menu
+ src/belvuApp/belvuWindow.c | 50 +++++++++++++++++++---------------------------
+ 1 file changed, 21 insertions(+), 29 deletions(-)
+
+2011-07-06  Gemma Barson  <gb10 at sanger.ac.uk>
+ Copy the selected sequence name to the primary buffer
+ src/belvuApp/belvuWindow.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+2011-07-06  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed an issue with updates following remove-by-conservation
+ src/belvuApp/belvuWindow.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+2011-07-06  Gemma Barson  <gb10 at sanger.ac.uk>
+ Show the tree when the sort-by-tree option is selected
+ src/belvuApp/belvu.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+2011-07-06  Gemma Barson  <gb10 at sanger.ac.uk>
+ Better handling of tree recalculations
+ src/belvuApp/belvuTree.c   |  30 ++++----
+ src/belvuApp/belvuWindow.c | 170 ++++++++++++++++++++++-----------------------
+ 2 files changed, 101 insertions(+), 99 deletions(-)
+
+2011-07-06  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added keyboard shortcut for toggling color mode
+ src/belvuApp/belvuWindow.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+2011-07-06  Gemma Barson  <gb10 at sanger.ac.uk>
+ The conservation plot is now automatically updated after sequences or columns are deleted
+ src/belvuApp/belvu.c          |  7 ++++++-
+ src/belvuApp/belvuAlignment.c |  1 +
+ src/belvuApp/belvuConsPlot.c  | 27 +++++++++++++++++----------
+ src/belvuApp/belvuConsPlot.h  |  5 +++--
+ 4 files changed, 27 insertions(+), 13 deletions(-)
+
+2011-07-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Improved color-scheme toggle methods
+ src/belvuApp/belvuWindow.c    | 67 +++++++++++++++++++++++--------------------
+ src/belvuApp/belvu_.h         | 20 ++++++-------
+ src/seqtoolsUtils/utilities.c | 20 +++++++++++++
+ src/seqtoolsUtils/utilities.h |  1 +
+ 4 files changed, 66 insertions(+), 42 deletions(-)
+
+2011-07-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Separated color sub-menus into separate color schemes menu
+ src/belvuApp/belvu.c       |  7 +++++-
+ src/belvuApp/belvuWindow.c | 56 ++++++++++++++++++++++------------------------
+ 2 files changed, 33 insertions(+), 30 deletions(-)
+
+2011-07-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated to-do notes for Belvu
+ src/doc/Design_notes/todo.html | 55 +++++++++++++++++++++++++++++++++---------
+ 1 file changed, 44 insertions(+), 11 deletions(-)
+
+2011-07-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Improved status logging when calling the fetch command
+ src/belvuApp/belvu.c          | 11 +++++++----
+ src/seqtoolsUtils/utilities.c |  4 ++--
+ 2 files changed, 9 insertions(+), 6 deletions(-)
+
+2011-07-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added a settings dialog to enable user to change conservation-plot properties
+ src/belvuApp/belvuConsPlot.c  | 115 +++++++++++++++++++++++++++++++++++++-----
+ src/belvuApp/belvuWindow.c    |   4 +-
+ src/blixemApp/blxwindow.c     |  18 +++----
+ src/dotterApp/dotter.c        |  62 -----------------------
+ src/seqtoolsUtils/utilities.c |  77 ++++++++++++++++++++++++++++
+ src/seqtoolsUtils/utilities.h |  20 ++++++++
+ 6 files changed, 210 insertions(+), 86 deletions(-)
+
+2011-07-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with the conservation plot where the average line label was not shown
+ src/belvuApp/belvuConsPlot.c  | 19 +++++++++++--------
+ src/belvuApp/belvuTree.c      | 15 ---------------
+ src/seqtoolsUtils/utilities.c | 38 ++++++++++++++++++++++++++++++++++++++
+ src/seqtoolsUtils/utilities.h |  3 +++
+ 4 files changed, 52 insertions(+), 23 deletions(-)
+
+2011-07-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed bugs with conservation plot
+ src/belvuApp/belvuConsPlot.c | 213 ++++++++++++++++++++-----------------------
+ 1 file changed, 97 insertions(+), 116 deletions(-)
+
+2011-07-04  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added test notes for belvu
+ src/doc/Design_notes/testing.ods | Bin 35579 -> 36754 bytes
+ 1 file changed, 0 insertions(+), 0 deletions(-)
+
+2011-07-04  Gemma Barson  <gb10 at sanger.ac.uk>
+ WIP: conservation plot is now working
+ src/belvuApp/belvuConsPlot.c | 314 ++++++++++++++++++++++++++++++-------------
+ src/belvuApp/belvuConsPlot.h |   4 +-
+ src/belvuApp/belvuWindow.c   |  10 +-
+ src/belvuApp/belvu_.h        |   1 +
+ 4 files changed, 234 insertions(+), 95 deletions(-)
+
+2011-07-01  Gemma Barson  <gb10 at sanger.ac.uk>
+ WIP: implemented conservation plot
+ src/belvuApp/belvu.c         | 148 -------------------------
+ src/belvuApp/belvuConsPlot.c | 254 +++++++++++++++++++++++++++++++++----------
+ src/belvuApp/belvuWindow.c   |   4 +
+ src/belvuApp/belvu_.h        |   4 +-
+ 4 files changed, 206 insertions(+), 204 deletions(-)
+
+2011-07-01  Gemma Barson  <gb10 at sanger.ac.uk>
+ WIP: moved conservtion plot code to separate file
+ src/belvuApp/Makefile.am     |   6 +-
+ src/belvuApp/belvuConsPlot.c | 281 +++++++++++++++++++++++++++++++++++++++++++
+ src/belvuApp/belvuConsPlot.h |  44 +++++++
+ src/belvuApp/belvuWindow.c   | 118 +-----------------
+ src/belvuApp/belvu_.h        |   2 +
+ 5 files changed, 337 insertions(+), 114 deletions(-)
+
+2011-07-01  Gemma Barson  <gb10 at sanger.ac.uk>
+ WIP: Added conservation plot window
+ src/belvuApp/belvuAlignment.c | 135 ++++++++++++++++++++--------------
+ src/belvuApp/belvuAlignment.h |  21 +++---
+ src/belvuApp/belvuWindow.c    | 163 ++++++++++++++++++++++++++++++++++++------
+ src/belvuApp/belvu_.h         |   1 +
+ src/seqtoolsUtils/utilities.c |  61 ++++++++++++++++
+ src/seqtoolsUtils/utilities.h |  12 ++++
+ 6 files changed, 308 insertions(+), 85 deletions(-)
+
+2011-06-29  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed some bugs with the wrapped-alignment view
+ src/belvuApp/belvuAlignment.c | 79 ++++++++++++++++++++++++++++---------------
+ 1 file changed, 52 insertions(+), 27 deletions(-)
+
+2011-06-29  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed issues with quit not prompting to save when called from spawned windows
+ src/belvuApp/belvuAlignment.c |  4 ++--
+ src/belvuApp/belvuWindow.c    | 23 ++++++++++++++++++++++-
+ 2 files changed, 24 insertions(+), 3 deletions(-)
+
+2011-06-29  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed an issue where the feedback box wasn't being updated when the row selection changes
+ src/belvuApp/belvuWindow.c | 58 +++++++++++++++++++++++++---------------------
+ 1 file changed, 31 insertions(+), 27 deletions(-)
+
+2011-06-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed some bugs with removing sequences messing up the array
+ src/belvuApp/belvu.c       | 45 ++++++++++++++++++++-----------------------
+ src/belvuApp/belvuWindow.c | 48 +++++++++++++++++++++++++---------------------
+ 2 files changed, 47 insertions(+), 46 deletions(-)
+
+2011-06-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with markup lines appearing in the tree when the tree is created using 'calculate tree'
+ src/belvuApp/belvuWindow.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+2011-06-27  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug where the tree was incorrectly showing markup lines
+ src/belvuApp/belvuTree.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+2011-06-27  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated Belvu documentation and release notes
+ src/doc/User_doc/belvu_news.html        | 11 ++++++++++
+ src/doc/User_doc/belvu_quick_start.html | 39 ++++++++++++++++++++-------------
+ 2 files changed, 35 insertions(+), 15 deletions(-)
+
+2011-06-27  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added --help command-line argument
+ src/belvuApp/belvuMain.c         | 14 ++++++++++----
+ src/doc/User_doc/belvu_usage.txt |  3 +++
+ 2 files changed, 13 insertions(+), 4 deletions(-)
+
+2011-06-27  Gemma Barson  <gb10 at sanger.ac.uk>
+ Implemented annotations window
+ src/belvuApp/belvu.c          | 41 -------------------------
+ src/belvuApp/belvuMain.c      |  2 +-
+ src/belvuApp/belvuWindow.c    | 69 +++++++++++++++++++++++++++++++++++++++++--
+ src/belvuApp/belvuWindow.h    |  1 +
+ src/belvuApp/belvu_.h         |  1 -
+ src/blixemApp/detailview.c    | 25 ----------------
+ src/blixemApp/detailview.h    |  1 -
+ src/seqtoolsUtils/utilities.c | 25 ++++++++++++++++
+ src/seqtoolsUtils/utilities.h |  1 +
+ 9 files changed, 95 insertions(+), 71 deletions(-)
+
+2011-06-27  Gemma Barson  <gb10 at sanger.ac.uk>
+ Implemented mouse-wheel scrolling for label areas as well as main alignment area
+ src/belvuApp/belvuAlignment.c | 28 +++++++++++++++++++---------
+ 1 file changed, 19 insertions(+), 9 deletions(-)
+
+2011-06-27  Gemma Barson  <gb10 at sanger.ac.uk>
+ Implemented mouse-wheel scrolling
+ src/belvuApp/belvuAlignment.c | 64 +++++++++++++++++++++++++++++++++++++------
+ 1 file changed, 55 insertions(+), 9 deletions(-)
+
+2011-06-24  Gemma Barson  <gb10 at sanger.ac.uk>
+ Implemented fetch
+ src/belvuApp/belvu.c          | 122 ++++++++++++++++++++++++++----------------
+ src/belvuApp/belvuAlignment.c |  12 ++++-
+ src/belvuApp/belvuWindow.c    |  14 +++++
+ src/belvuApp/belvu_.h         |   3 ++
+ src/blixemApp/blxFetch.c      | 112 +++-----------------------------------
+ src/seqtoolsUtils/utilities.c | 120 ++++++++++++++++++++++++++++++++++++++++-
+ src/seqtoolsUtils/utilities.h |   7 ++-
+ 7 files changed, 237 insertions(+), 153 deletions(-)
+
+2011-06-23  Gemma Barson  <gb10 at sanger.ac.uk>
+ Implemented 'output score' menu option
+ src/belvuApp/belvu.c       | 16 ----------------
+ src/belvuApp/belvuWindow.c | 17 +++++++++++++++++
+ 2 files changed, 17 insertions(+), 16 deletions(-)
+
+2011-06-23  Gemma Barson  <gb10 at sanger.ac.uk>
+ Improved error-handling when reading scores file
+ src/belvuApp/belvuAlignment.c |  5 ++++-
+ src/belvuApp/belvuMain.c      | 34 +++++++++++++++++++++++++++++-----
+ 2 files changed, 33 insertions(+), 6 deletions(-)
+
+2011-06-23  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with the wrapped-alignment view
+ src/belvuApp/belvuAlignment.c | 15 +++++++--------
+ 1 file changed, 7 insertions(+), 8 deletions(-)
+
+2011-06-23  Gemma Barson  <gb10 at sanger.ac.uk>
+ Implemented organisms window
+ src/belvuApp/belvuWindow.c | 199 +++++++++++++++++++++++++++++++++++++++------
+ 1 file changed, 173 insertions(+), 26 deletions(-)
+
+2011-06-22  Gemma Barson  <gb10 at sanger.ac.uk>
+ Orthologs are now highlighted in the tree after 'find orthologs' option is called
+ src/belvuApp/belvu.c       |  1 +
+ src/belvuApp/belvuTree.c   | 44 ++++++++++++++++++++++++++++++++++++--------
+ src/belvuApp/belvuTree.h   |  2 +-
+ src/belvuApp/belvuWindow.c | 17 ++++++++++++++---
+ src/belvuApp/belvu_.h      |  3 ++-
+ 5 files changed, 54 insertions(+), 13 deletions(-)
+
+2011-06-22  Gemma Barson  <gb10 at sanger.ac.uk>
+ Implemented 'find orthologs' option, and made some changes to the way action groups are handled
+ src/belvuApp/belvu.c       | 117 ++++++++++++++-------------
+ src/belvuApp/belvuTree.c   |  68 ++++++++++++++--
+ src/belvuApp/belvuTree.h   |   8 +-
+ src/belvuApp/belvuWindow.c | 191 ++++++++++++++++++++++++++++-----------------
+ src/belvuApp/belvuWindow.h |   2 +
+ src/belvuApp/belvu_.h      |   5 +-
+ 6 files changed, 250 insertions(+), 141 deletions(-)
+
+2011-06-22  Gemma Barson  <gb10 at sanger.ac.uk>
+ Small fix to recalculate name column size when sequences are deleted
+ src/belvuApp/belvuAlignment.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+2011-06-22  Gemma Barson  <gb10 at sanger.ac.uk>
+ Made the 'remove many sequences' option a toggle option, so you can click again to turn it off
+ src/belvuApp/belvu.c       |  1 +
+ src/belvuApp/belvuWindow.c | 61 +++++++++++++++++++++++++---------------------
+ src/belvuApp/belvu_.h      |  3 ++-
+ 3 files changed, 36 insertions(+), 29 deletions(-)
+
+2011-06-22  Gemma Barson  <gb10 at sanger.ac.uk>
+ Implemented 'save tree' option
+ src/belvuApp/belvu.c       | 77 ++++++++++++++++------------------------------
+ src/belvuApp/belvuMain.c   |  2 +-
+ src/belvuApp/belvuTree.c   |  2 +-
+ src/belvuApp/belvuWindow.c | 53 ++++++++++++++++++++++++++++---
+ src/belvuApp/belvu_.h      |  2 +-
+ 5 files changed, 79 insertions(+), 57 deletions(-)
+
+2011-06-22  Gemma Barson  <gb10 at sanger.ac.uk>
+ Improvements to the toolbar and menu
+ src/belvuApp/belvuWindow.c    | 71 +++++++++++++++++++++----------------------
+ src/blixemApp/detailview.c    |  4 +--
+ src/seqtoolsUtils/utilities.c |  7 +++--
+ src/seqtoolsUtils/utilities.h |  2 +-
+ 4 files changed, 41 insertions(+), 43 deletions(-)
+
+2011-06-22  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug where the mean score was incorrect when alignment contains markup lines
+ src/belvuApp/belvu.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+2011-06-22  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug where scores were being calculated for markup lines
+ src/belvuApp/belvu.c | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+2011-06-22  Gemma Barson  <gb10 at sanger.ac.uk>
+ Implemented 'compare all' menu option
+ src/belvuApp/belvu.c       | 135 +++++++++++++++++++++++++++------------------
+ src/belvuApp/belvuWindow.c |   8 ++-
+ src/belvuApp/belvu_.h      |   2 +
+ 3 files changed, 88 insertions(+), 57 deletions(-)
+
+2011-06-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added --version and --compiled arguments
+ src/belvuApp/belvuMain.c | 286 +++++++++++++++++++++++++++--------------------
+ 1 file changed, 167 insertions(+), 119 deletions(-)
+
+2011-06-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added minor tickmarks to scale
+ src/belvuApp/belvuAlignment.c | 63 +++++++++++++++++++++++--------------------
+ 1 file changed, 34 insertions(+), 29 deletions(-)
+
+2011-06-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added keyboard shortcuts
+ src/belvuApp/belvuAlignment.c |  87 +++++++++++++++++++++
+ src/belvuApp/belvuAlignment.h |   7 ++
+ src/belvuApp/belvuWindow.c    | 177 ++++++++++++++++++++++++++++++++++--------
+ 3 files changed, 239 insertions(+), 32 deletions(-)
+
+2011-06-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Improved performance of drawing alignments
+ src/belvuApp/belvuAlignment.c | 54 +++++++++++++++++++++++++++----------------
+ 1 file changed, 34 insertions(+), 20 deletions(-)
+
+2011-06-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Improved performance of middle-dragging
+ src/belvuApp/belvuAlignment.c | 67 +++++++++++++++++++++++++++++++++++++++----
+ src/belvuApp/belvuAlignment.h |  1 +
+ src/belvuApp/belvuWindow.c    | 11 +++----
+ src/belvuApp/belvu_.h         |  2 ++
+ 4 files changed, 70 insertions(+), 11 deletions(-)
+
+2011-06-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated colours to be the same as the old belvu colours
+ src/belvuApp/belvu.c | 78 +++++++++++++++++++++++++++-------------------------
+ 1 file changed, 41 insertions(+), 37 deletions(-)
+
+2011-06-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed an issue where rows were being highlighted incorrectly
+ src/belvuApp/belvuAlignment.c | 21 +++++++++++++++------
+ 1 file changed, 15 insertions(+), 6 deletions(-)
+
+2011-06-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added prompt to save the alignment if it has been edited when the users quits
+ src/belvuApp/belvuWindow.c | 83 +++++++++++++++++++++++++++++++++++++++++++---
+ 1 file changed, 78 insertions(+), 5 deletions(-)
+
+2011-06-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Right-align column text
+ src/belvuApp/belvu.c          | 39 +++++++++++++++++++++++++++++++++++++--
+ src/belvuApp/belvuAlignment.c | 25 +++++++++++--------------
+ src/belvuApp/belvu_.h         |  3 ++-
+ 3 files changed, 50 insertions(+), 17 deletions(-)
+
+2011-06-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added header for alignment display area
+ src/belvuApp/belvuAlignment.c | 250 +++++++++++++++++++++++++++++++++---------
+ 1 file changed, 197 insertions(+), 53 deletions(-)
+
+2011-06-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with incorrect drawing of final blank row
+ src/belvuApp/belvuAlignment.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+2011-06-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed an issue where extra rows were being drawn unnecessarily
+ src/belvuApp/belvuAlignment.c | 52 ++++++++++++++++++++++++++++++++-----------
+ 1 file changed, 39 insertions(+), 13 deletions(-)
+
+2011-06-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with row selections
+ src/belvuApp/belvuAlignment.c | 9 +++------
+ 1 file changed, 3 insertions(+), 6 deletions(-)
+
+2011-06-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added summary label at top of headers column
+ src/belvuApp/belvuAlignment.c | 27 ++++++++++++++++++++++-----
+ 1 file changed, 22 insertions(+), 5 deletions(-)
+
+2011-06-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed issues with the scroll ranges not updated when rows/columns are deleted
+ src/belvuApp/belvuAlignment.c | 34 +++++++++++++++++++++-------------
+ 1 file changed, 21 insertions(+), 13 deletions(-)
+
+2011-06-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Finished work to implement a custom vertical scrollbar
+ src/belvuApp/belvuAlignment.c | 47 +++++++++++++++++++------------------------
+ 1 file changed, 21 insertions(+), 26 deletions(-)
+
+2011-06-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ WIP: Performance improvements: only draw alignments that are in the scroll range
+ src/belvuApp/belvuAlignment.c | 176 +++++++++++++++++++++++++++++-------------
+ 1 file changed, 122 insertions(+), 54 deletions(-)
+
+2011-06-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed an issue where 'show tree' was not presenting the tree if it had to create it first
+ src/belvuApp/belvuWindow.c | 34 ++++++++++++++++------------------
+ 1 file changed, 16 insertions(+), 18 deletions(-)
+
+2011-06-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed some merge errors
+ src/seqtoolsUtils/utilities.c | 36 ------------------------------------
+ src/seqtoolsUtils/utilities.h |  5 -----
+ 2 files changed, 41 deletions(-)
+
+2011-06-15  Gemma Barson  <gb10 at sanger.ac.uk>
+ Moved some utility functions to utils library
+ src/belvuApp/belvuWindow.c    | 32 --------------------------------
+ src/seqtoolsUtils/utilities.c | 37 +++++++++++++++++++++++++++++++++++++
+ src/seqtoolsUtils/utilities.h |  3 +++
+ 3 files changed, 40 insertions(+), 32 deletions(-)
+
+2011-06-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Save dialog now remembers the name and directory
+ src/belvuApp/belvu.c       |  4 ++--
+ src/belvuApp/belvuMain.c   | 25 +++++++++++++---------
+ src/belvuApp/belvuWindow.c | 53 +++++++++++++++++++++++++++++++++++++---------
+ src/belvuApp/belvu_.h      |  4 ++--
+ 4 files changed, 62 insertions(+), 24 deletions(-)
+
+2011-06-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added toggle boxes to save-as dialog to allow user to change separator char
+ src/belvuApp/belvuWindow.c | 49 ++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 49 insertions(+)
+
+2011-06-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added 'save coords' option to save as dialog
+ src/belvuApp/belvuWindow.c | 12 +++++++++---
+ 1 file changed, 9 insertions(+), 3 deletions(-)
+
+2011-06-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Implemented save-as dialog
+ src/belvuApp/belvu.c       | 45 ++++++++++++-----------
+ src/belvuApp/belvuMain.c   | 12 ++++---
+ src/belvuApp/belvuWindow.c | 90 ++++++++++++++++++++++++++++++++++++++++------
+ src/belvuApp/belvu_.h      | 23 ++++++++----
+ 4 files changed, 125 insertions(+), 45 deletions(-)
+
+2011-06-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Implemented option to save Mul files
+ src/belvuApp/belvu.c       | 787 +++++++--------------------------------------
+ src/belvuApp/belvuMain.c   |   2 +-
+ src/belvuApp/belvuWindow.c |  64 +++-
+ src/belvuApp/belvu_.h      |   4 +-
+ 4 files changed, 189 insertions(+), 668 deletions(-)
+
+2011-06-08  Gemma Barson  <gb10 at sanger.ac.uk>
+ Display score column if scores are enabled
+ src/belvuApp/belvuAlignment.c | 20 +++++++++++++++++++-
+ 1 file changed, 19 insertions(+), 1 deletion(-)
+
+2011-06-08  Gemma Barson  <gb10 at sanger.ac.uk>
+ Don't draw coords for markup rows
+ src/belvuApp/belvuAlignment.c | 17 +++++++++++------
+ 1 file changed, 11 insertions(+), 6 deletions(-)
+
+2011-06-08  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with the wrapped view for selex data
+ src/belvuApp/belvuAlignment.c | 36 ++++++++++++++++++------------------
+ 1 file changed, 18 insertions(+), 18 deletions(-)
+
+2011-06-08  Gemma Barson  <gb10 at sanger.ac.uk>
+ Implemented selex file parsing
+ src/belvuApp/belvu.c          | 665 ++++++++++++++++++++++++------------------
+ src/belvuApp/belvuAlignment.c | 118 +++++---
+ src/belvuApp/belvuTree.c      |  15 +-
+ src/belvuApp/belvuWindow.c    |  16 +-
+ src/belvuApp/belvu_.h         |   8 +-
+ 5 files changed, 480 insertions(+), 342 deletions(-)
+
+2011-06-08  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed bugs with reading MSF files
+ src/belvuApp/belvu.c | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+2011-06-08  Gemma Barson  <gb10 at sanger.ac.uk>
+ Implemented hide/unhide options
+ src/belvuApp/belvu.c          | 23 -----------------------
+ src/belvuApp/belvuAlignment.c | 41 ++++++++++++++++++++++++++++++++++++-----
+ src/belvuApp/belvuWindow.c    | 23 +++++++++++++++++++++++
+ src/belvuApp/belvu_.h         |  4 ++--
+ 4 files changed, 61 insertions(+), 30 deletions(-)
+
+2011-06-08  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added more toolbar items
+ src/belvuApp/belvuWindow.c | 27 +++++++++++++++++----------
+ 1 file changed, 17 insertions(+), 10 deletions(-)
+
+2011-06-08  Gemma Barson  <gb10 at sanger.ac.uk>
+ Improvements to remove-columns-by-conservation dialog
+ src/belvuApp/belvuWindow.c | 23 +++++++++++++++--------
+ 1 file changed, 15 insertions(+), 8 deletions(-)
+
+2011-06-07  Gemma Barson  <gb10 at sanger.ac.uk>
+ Implemented 'select gap character' option
+ src/belvuApp/belvu.c       |  1 +
+ src/belvuApp/belvuWindow.c | 77 +++++++++++++++++++++++++++++++++++++++++++++-
+ src/belvuApp/belvu_.h      |  1 +
+ 3 files changed, 78 insertions(+), 1 deletion(-)
+
+2011-06-07  Gemma Barson  <gb10 at sanger.ac.uk>
+ Implemented 'read labels' menu option
+ src/belvuApp/belvu.c       | 132 +++++++++++++++++++++++----------------------
+ src/belvuApp/belvuWindow.c |  21 ++++++++
+ src/belvuApp/belvu_.h      |   1 +
+ 3 files changed, 90 insertions(+), 64 deletions(-)
+
+2011-06-07  Gemma Barson  <gb10 at sanger.ac.uk>
+ Code tidying (menu action lists)
+ src/belvuApp/belvuWindow.c | 204 +++++++++++++++++++++++++++++----------------
+ 1 file changed, 132 insertions(+), 72 deletions(-)
+
+2011-06-07  Gemma Barson  <gb10 at sanger.ac.uk>
+ Postfix menu options with ... if the action has a prompt
+ src/belvuApp/belvuWindow.c | 46 +++++++++++++++++++++++-----------------------
+ 1 file changed, 23 insertions(+), 23 deletions(-)
+
+2011-06-07  Gemma Barson  <gb10 at sanger.ac.uk>
+ Implemented 'remove gappy columns' menu option
+ src/belvuApp/belvuWindow.c | 58 ++++++++++++++++++++++++++++++++++++++--------
+ 1 file changed, 48 insertions(+), 10 deletions(-)
+
+2011-06-07  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed an issue where the fasta file name was incorrectly including the '>' marker
+ src/seqtoolsUtils/blxparser.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+2011-06-06  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with the remove-columns-by-conservation dialog
+ src/belvuApp/belvuWindow.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+2011-06-06  Gemma Barson  <gb10 at sanger.ac.uk>
+ Implemented 'auto remove empty columns' menu option
+ src/belvuApp/belvu.c       |  2 ++
+ src/belvuApp/belvuWindow.c | 13 +++++++++++--
+ src/belvuApp/belvu_.h      |  2 +-
+ 3 files changed, 14 insertions(+), 3 deletions(-)
+
+2011-06-06  Gemma Barson  <gb10 at sanger.ac.uk>
+ Implemented option to remove columns by conservation
+ src/belvuApp/belvu.c       | 98 ++++++++++++++++++++--------------------------
+ src/belvuApp/belvuWindow.c | 85 +++++++++++++++++++++++++++++++++++++++-
+ src/belvuApp/belvu_.h      |  2 +
+ 3 files changed, 129 insertions(+), 56 deletions(-)
+
+2011-06-06  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a crash when clicking on an empty row
+ src/belvuApp/belvuWindow.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+2011-06-06  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated usage text
+ src/belvuApp/belvuMain.c          |  60 +++++++++------
+ src/belvuApp/belvu_.h             |   6 +-
+ src/blixemApp/blixem_.h           |   2 +-
+ src/blixemApp/blxmain.c           |   7 +-
+ src/doc/User_doc/belvu_usage.txt  | 154 ++++++++++++++++++++------------------
+ src/doc/User_doc/blixem_usage.txt |  95 +++++++++++++++++++++++
+ src/doc/User_doc/dotter_usage.txt |  13 ++++
+ src/dotterApp/dotterMain.c        |   2 +-
+ src/dotterApp/dotter_.h           |   2 +-
+ src/seqtoolsUtils/version.h       |   2 +-
+ 10 files changed, 236 insertions(+), 107 deletions(-)
+
+2011-06-06  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with invalid scroll range after deleting columns
+ src/belvuApp/belvuAlignment.c | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+2011-05-31  Gemma Barson  <gb10 at sanger.ac.uk>
+ Implemented functionality to remove columns to the left/right of the selected column
+ src/belvuApp/belvuAlignment.c | 24 ++++++++++++++++++++++--
+ src/belvuApp/belvuAlignment.h |  1 +
+ src/belvuApp/belvuWindow.c    | 35 +++++++++++++++++++++++++++++++++++
+ 3 files changed, 58 insertions(+), 2 deletions(-)
+
+2011-05-27  Gemma Barson  <gb10 at sanger.ac.uk>
+ Highlight all alignments with the same name as the currently-selected alignment
+ src/belvuApp/belvuAlignment.c | 35 +++++++++++++++++++++++++++++------
+ src/belvuApp/belvuWindow.c    |  2 +-
+ 2 files changed, 30 insertions(+), 7 deletions(-)
+
+2011-05-27  Gemma Barson  <gb10 at sanger.ac.uk>
+ Implemented middle-click scrolling
+ src/belvuApp/belvuAlignment.c | 88 ++++++++++++++++++++++++++++++++++++++-----
+ 1 file changed, 78 insertions(+), 10 deletions(-)
+
+2011-05-27  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug where clicking outside the sequence area was trying to select a column
+ src/belvuApp/belvuAlignment.c | 36 ++++++++++++++++++++++++++++++++----
+ 1 file changed, 32 insertions(+), 4 deletions(-)
+
+2011-05-27  Gemma Barson  <gb10 at sanger.ac.uk>
+ Highlight the selected column when middle-clicking
+ src/belvuApp/belvu.c          |  2 ++
+ src/belvuApp/belvuAlignment.c | 41 ++++++++++++++++++++++++++---------------
+ src/belvuApp/belvuWindow.c    | 29 +++++++++++++++++++----------
+ src/belvuApp/belvu_.h         | 10 +++++++---
+ 4 files changed, 54 insertions(+), 28 deletions(-)
+
+2011-05-27  Gemma Barson  <gb10 at sanger.ac.uk>
+ Code tidying and renaming
+ src/belvuApp/belvu.c          | 170 +++++++++++++++++++++---------------------
+ src/belvuApp/belvuAlignment.c |  18 ++---
+ src/belvuApp/belvuTree.c      |   4 +-
+ src/belvuApp/belvuWindow.c    |  22 +++---
+ src/belvuApp/belvu_.h         |   2 +-
+ 5 files changed, 108 insertions(+), 108 deletions(-)
+
+2011-05-27  Gemma Barson  <gb10 at sanger.ac.uk>
+ Code tidying and renaming
+ src/belvuApp/belvu.c          | 34 +++++++++++++++++-----------------
+ src/belvuApp/belvuAlignment.c |  3 +--
+ src/belvuApp/belvuWindow.c    | 12 ++++++------
+ src/belvuApp/belvu_.h         |  2 +-
+ 4 files changed, 25 insertions(+), 26 deletions(-)
+
+2011-05-27  Gemma Barson  <gb10 at sanger.ac.uk>
+ Feedback box is now updated when the selected row/column changes
+ src/belvuApp/belvuWindow.c | 80 ++++++++++++++++++++++++++++++++++++++++++++--
+ 1 file changed, 78 insertions(+), 2 deletions(-)
+
+2011-05-26  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a compile error
+ src/blixemApp/detailview.c | 16 ----------------
+ 1 file changed, 16 deletions(-)
+
+2011-05-26  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a compile error
+ src/belvuApp/belvuWindow.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+2011-05-26  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added feedback box to toolbar
+ src/belvuApp/belvuAlignment.c |  2 +-
+ src/belvuApp/belvuWindow.c    | 29 ++++++++++++++++++++++++++++-
+ src/seqtoolsUtils/utilities.c | 16 ++++++++++++++++
+ src/seqtoolsUtils/utilities.h |  1 +
+ 4 files changed, 46 insertions(+), 2 deletions(-)
+
+2011-05-26  Gemma Barson  <gb10 at sanger.ac.uk>
+ Improvements to column-selection code
+ src/belvuApp/belvuAlignment.c | 39 ++++++++++++++++++++++++++++-----------
+ src/belvuApp/belvuTree.c      |  2 +-
+ src/belvuApp/belvuWindow.c    | 13 ++++++++++++-
+ src/belvuApp/belvuWindow.h    |  3 ++-
+ 4 files changed, 43 insertions(+), 14 deletions(-)
+
+2011-05-25  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added functionality to identify which row has been left-clicked
+ src/belvuApp/belvu.c          |  1 +
+ src/belvuApp/belvuAlignment.c | 25 +++++++++++++++++++++----
+ src/belvuApp/belvu_.h         |  1 +
+ 3 files changed, 23 insertions(+), 4 deletions(-)
+
+2011-05-25  Gemma Barson  <gb10 at sanger.ac.uk>
+ Implemented 'remove columns' menu option
+ src/belvuApp/belvu.c       | 21 ++++++++-------
+ src/belvuApp/belvuWindow.c | 67 ++++++++++++++++++++++++++++++++++++++++++++++
+ src/belvuApp/belvu_.h      |  1 +
+ 3 files changed, 80 insertions(+), 9 deletions(-)
+
+2011-05-25  Gemma Barson  <gb10 at sanger.ac.uk>
+ Removed the default-sort menu option because it doesn't work correctly
+ src/belvuApp/belvuWindow.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-05-25  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a crash where the tree becomes invalidated after deleting sequences
+ src/belvuApp/belvuTree.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+2011-05-25  Gemma Barson  <gb10 at sanger.ac.uk>
+ Implemented 'exclude highlighted' menu option
+ src/belvuApp/belvu.c          | 73 +++++++++++++++++++++++++------------------
+ src/belvuApp/belvuAlignment.c |  2 +-
+ src/belvuApp/belvuWindow.c    | 45 +++++++++++++++++++++-----
+ src/belvuApp/belvu_.h         |  1 +
+ 4 files changed, 81 insertions(+), 40 deletions(-)
+
+2011-05-25  Gemma Barson  <gb10 at sanger.ac.uk>
+ Implemented greyscale colours for printing
+ src/belvuApp/belvu.c          | 137 +++++++++++++++++++++++++++++++++++-------
+ src/belvuApp/belvuAlignment.c |  41 +++++++++----
+ src/belvuApp/belvuWindow.c    |  36 +++++++++--
+ src/belvuApp/belvu_.h         |  30 ++++++---
+ 4 files changed, 198 insertions(+), 46 deletions(-)
+
+2011-05-25  Gemma Barson  <gb10 at sanger.ac.uk>
+ Implemented 'ignore gaps' option
+ src/belvuApp/belvu.c       | 11 +++--------
+ src/belvuApp/belvuWindow.c |  7 +++++++
+ 2 files changed, 10 insertions(+), 8 deletions(-)
+
+2011-05-25  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a regression where the disable-colours option was broken
+ src/belvuApp/belvuAlignment.c | 69 ++++++++++++++++++++++---------------------
+ 1 file changed, 35 insertions(+), 34 deletions(-)
+
+2011-05-25  Gemma Barson  <gb10 at sanger.ac.uk>
+ Rearranged colour menus
+ src/belvuApp/belvuWindow.c | 18 ++++++++----------
+ 1 file changed, 8 insertions(+), 10 deletions(-)
+
+2011-05-25  Gemma Barson  <gb10 at sanger.ac.uk>
+ Implemented load/save of colour schemes
+ src/belvuApp/belvu.c          | 100 ++++++++++++------------------------------
+ src/belvuApp/belvuMain.c      |   9 +++-
+ src/belvuApp/belvuWindow.c    |  30 ++++++++++++-
+ src/belvuApp/belvu_.h         |   3 +-
+ src/dotterApp/dotplot.c       |  70 +----------------------------
+ src/seqtoolsUtils/utilities.c |  83 +++++++++++++++++++++++++++++++++++
+ src/seqtoolsUtils/utilities.h |   4 ++
+ 7 files changed, 153 insertions(+), 146 deletions(-)
+
+2011-05-23  Gemma Barson  <gb10 at sanger.ac.uk>
+ Code tidying
+ src/belvuApp/belvu.c       |  8 ++++++++
+ src/belvuApp/belvuWindow.c | 46 ----------------------------------------------
+ src/belvuApp/belvu_.h      |  1 +
+ 3 files changed, 9 insertions(+), 46 deletions(-)
+
+2011-05-23  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with foreground colors in color-by-conservation mode
+ src/belvuApp/belvuAlignment.c | 44 ++++++++++++++++++++++++++++++++-----------
+ 1 file changed, 33 insertions(+), 11 deletions(-)
+
+2011-05-23  Gemma Barson  <gb10 at sanger.ac.uk>
+ Implemented edit-conservation-colors dialog
+ src/belvuApp/belvu.c           |  22 ++-
+ src/belvuApp/belvuWindow.c     | 296 +++++++++++++++++++++++++++++++++++++----
+ src/belvuApp/belvu_.h          |   2 +-
+ src/doc/Design_notes/todo.html |   1 +
+ 4 files changed, 289 insertions(+), 32 deletions(-)
+
+2011-05-23  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added custom-color-scheme menu item
+ src/belvuApp/belvu.c       | 121 +++++++++++++++++++++++++++++++++++++++++++--
+ src/belvuApp/belvuMain.c   |   3 +-
+ src/belvuApp/belvuWindow.c |  17 ++++---
+ src/belvuApp/belvu_.h      |   3 ++
+ 4 files changed, 133 insertions(+), 11 deletions(-)
+
+2011-05-23  Gemma Barson  <gb10 at sanger.ac.uk>
+ WIP: Added 'custom' color scheme menu item for edited colors
+ src/belvuApp/belvu.c       |   1 +
+ src/belvuApp/belvuWindow.c | 138 +++++++++++++++++++++++++++++++++++++++------
+ src/belvuApp/belvu_.h      |   6 +-
+ 3 files changed, 126 insertions(+), 19 deletions(-)
+
+2011-05-18  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added edit-residue-colors dialog
+ src/belvuApp/belvu.c       |  20 +--
+ src/belvuApp/belvuMain.c   |   2 +-
+ src/belvuApp/belvuWindow.c | 372 ++++++++++++++++++++++++++++++++++++++++++---
+ src/belvuApp/belvu_.h      |   4 +-
+ 4 files changed, 366 insertions(+), 32 deletions(-)
+
+2011-05-18  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a crash when the tree settings are changed when there is no tree window
+ src/belvuApp/belvuTree.c | 79 ++++++++++++++++++++++++++++++++++++------------
+ 1 file changed, 60 insertions(+), 19 deletions(-)
+
+2011-05-18  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with the tree distance calculations
+ src/belvuApp/belvu.c          |  3 +-
+ src/belvuApp/belvuTree.c      | 68 ++++++++++++++-----------------------------
+ src/belvuApp/belvuTree.h      |  1 -
+ src/belvuApp/belvuWindow.c    |  1 -
+ src/seqtoolsUtils/utilities.c | 11 ++++---
+ src/seqtoolsUtils/utilities.h |  9 ++++--
+ 6 files changed, 37 insertions(+), 56 deletions(-)
+
+2011-05-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added 'recalculate tree' menu option
+ src/belvuApp/belvu.c       |  5 ++-
+ src/belvuApp/belvuMain.c   |  2 +-
+ src/belvuApp/belvuTree.c   | 50 +++++++++++++++++-------
+ src/belvuApp/belvuTree.h   |  8 +++-
+ src/belvuApp/belvuWindow.c | 95 +++++++++++++++++++++++++++++++++++-----------
+ src/belvuApp/belvu_.h      |  8 ++--
+ 6 files changed, 124 insertions(+), 44 deletions(-)
+
+2011-05-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug where tree-sort was getting messed up after changing tree order
+ src/belvuApp/belvu.c       | 14 +++++++-------
+ src/belvuApp/belvuWindow.c |  9 ++++++++-
+ 2 files changed, 15 insertions(+), 8 deletions(-)
+
+2011-05-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug where the tree drawing area size was not recalculated when on re-root
+ src/belvuApp/belvuTree.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+2011-05-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug where the tree was not being updated when re-rooting
+ src/belvuApp/belvuTree.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+2011-05-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with sorting
+ src/belvuApp/belvu.c | 38 ++++++++++++++++++++------------------
+ 1 file changed, 20 insertions(+), 18 deletions(-)
+
+2011-05-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Alignment sort order is now updated when tree order has changed
+ src/belvuApp/belvu.c       | 162 +++++++++++++++++++++++++--------------------
+ src/belvuApp/belvuMain.c   |  18 +++--
+ src/belvuApp/belvuTree.c   |  80 +++++++++++++---------
+ src/belvuApp/belvuWindow.c |  15 ++++-
+ src/belvuApp/belvu_.h      |  29 ++++----
+ 5 files changed, 176 insertions(+), 128 deletions(-)
+
+2011-05-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Only allow one tree
+ src/belvuApp/belvu.c       |   5 +-
+ src/belvuApp/belvuTree.c   | 177 ++++++++++++++++++++++++++++++++-------------
+ src/belvuApp/belvuTree.h   |   2 +-
+ src/belvuApp/belvuWindow.c |  88 ++++++----------------
+ src/belvuApp/belvu_.h      |   2 +-
+ 5 files changed, 157 insertions(+), 117 deletions(-)
+
+2011-05-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Implemented tree-swap and tree-reroot
+ src/belvuApp/belvu.c          |  11 ----
+ src/belvuApp/belvuAlignment.c |  20 +++---
+ src/belvuApp/belvuTree.c      | 142 ++++++++++++++++++++++--------------------
+ src/belvuApp/belvuWindow.c    |   6 ++
+ src/belvuApp/belvuWindow.h    |   1 +
+ 5 files changed, 89 insertions(+), 91 deletions(-)
+
+2011-05-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Alignment display now re-centres when selecting alignments in a tree
+ src/belvuApp/belvuAlignment.c | 15 +++++++++++++--
+ src/belvuApp/belvuWindow.c    |  2 ++
+ 2 files changed, 15 insertions(+), 2 deletions(-)
+
+2011-05-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Implemented the 'clean up windows' option
+ src/belvuApp/belvuWindow.c | 14 +++++++++++++-
+ 1 file changed, 13 insertions(+), 1 deletion(-)
+
+2011-05-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added notes about a historic Belvu bug
+ src/doc/Design_notes/todo.html | 1 +
+ 1 file changed, 1 insertion(+)
+
+2011-05-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Trees are now updated dynamically when the selection changes
+ src/belvuApp/belvu.c          | 11 ++++--
+ src/belvuApp/belvuAlignment.c |  9 +++--
+ src/belvuApp/belvuMain.c      | 10 +++---
+ src/belvuApp/belvuTree.c      | 36 ++++++++++++++-----
+ src/belvuApp/belvuTree.h      |  7 ++--
+ src/belvuApp/belvuWindow.c    | 82 ++++++++++++++++++++++++++-----------------
+ src/belvuApp/belvuWindow.h    |  2 +-
+ src/belvuApp/belvu_.h         | 12 ++++---
+ 8 files changed, 106 insertions(+), 63 deletions(-)
+
+2011-05-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Selected sequences are now highlighted in trees
+ src/belvuApp/belvu.c          |  6 +++++-
+ src/belvuApp/belvuAlignment.c | 29 +++++++++++++----------------
+ src/belvuApp/belvuTree.c      | 41 +++++++++++++++++++++++++----------------
+ src/belvuApp/belvuWindow.c    |  6 +++++-
+ src/belvuApp/belvu_.h         |  8 +++++---
+ 5 files changed, 53 insertions(+), 37 deletions(-)
+
+2011-05-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Clicking on a tree node now selects that alignment
+ src/belvuApp/belvu.c       |  2 ++
+ src/belvuApp/belvuTree.c   | 10 +++++-----
+ src/belvuApp/belvuWindow.c | 22 +++++++++++++++++++---
+ src/belvuApp/belvuWindow.h |  2 ++
+ src/belvuApp/belvu_.h      |  2 ++
+ 5 files changed, 30 insertions(+), 8 deletions(-)
+
+2011-05-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug when coloring by residue ID
+ src/belvuApp/belvu.c          | 24 +++++++++++++++++++-----
+ src/belvuApp/belvuAlignment.c |  2 +-
+ src/belvuApp/belvu_.h         |  2 ++
+ 3 files changed, 22 insertions(+), 6 deletions(-)
+
+2011-05-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug where the colors were not correctly updated when changing color scheme with color-by-res-id is enabled
+ src/belvuApp/belvu.c | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
+
+2011-05-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added separate menu item to set threshold for color-by-res-id option
+ src/belvuApp/belvuWindow.c | 32 +++++++++++++++++++++++---------
+ 1 file changed, 23 insertions(+), 9 deletions(-)
+
+2011-05-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Implemented color-by-res-id option
+ src/belvuApp/belvu.c       | 21 +++++------------
+ src/belvuApp/belvuWindow.c | 58 +++++++++++++++++++++++++++++++++++++++++-----
+ 2 files changed, 58 insertions(+), 21 deletions(-)
+
+2011-05-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Implemented highlight-lowercase-characters option
+ src/belvuApp/belvuWindow.c | 5 +++++
+ src/belvuApp/belvu_.h      | 2 +-
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+2011-05-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Implemented toggle-color-scheme option
+ src/belvuApp/belvu.c       |  2 +-
+ src/belvuApp/belvuWindow.c | 64 +++++++++++++++++++++++++++++++---------------
+ src/belvuApp/belvu_.h      |  2 +-
+ 3 files changed, 45 insertions(+), 23 deletions(-)
+
+2011-05-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Implemented color by residue color schemes
+ src/belvuApp/belvuWindow.c | 13 +++++++++++--
+ src/belvuApp/belvu_.h      |  1 +
+ 2 files changed, 12 insertions(+), 2 deletions(-)
+
+2011-05-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Implemented conservation color schemes
+ src/belvuApp/belvu.c          | 957 ++++++++++++++++++++++--------------------
+ src/belvuApp/belvuAlignment.c |   6 +-
+ src/belvuApp/belvuMain.c      |  14 +-
+ src/belvuApp/belvuWindow.c    |  69 ++-
+ src/belvuApp/belvu_.h         |  23 +-
+ 5 files changed, 581 insertions(+), 488 deletions(-)
+
+2011-05-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Implemented toggle-display-colors option
+ src/belvuApp/belvu.c          |  2 ++
+ src/belvuApp/belvuAlignment.c | 27 +++++++++++++++------------
+ src/belvuApp/belvuMain.c      |  7 +++----
+ src/belvuApp/belvuWindow.c    | 16 +++++++++++-----
+ src/belvuApp/belvu_.h         |  1 +
+ 5 files changed, 32 insertions(+), 21 deletions(-)
+
+2011-05-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added ability to sort by conservation order
+ src/belvuApp/belvu.c       | 5 +++--
+ src/belvuApp/belvuWindow.c | 4 +++-
+ src/belvuApp/belvu_.h      | 1 +
+ 3 files changed, 7 insertions(+), 3 deletions(-)
+
+2011-05-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Implemented sort-by menu options
+ src/belvuApp/belvu.c       | 2443 +++++++++++++++++++++++---------------------
+ src/belvuApp/belvuMain.c   |   44 +-
+ src/belvuApp/belvuWindow.c |    8 +
+ src/belvuApp/belvu_.h      |    1 +
+ 4 files changed, 1279 insertions(+), 1217 deletions(-)
+
+2011-05-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Tidied the sort-by enums
+ src/belvuApp/belvuMain.c | 51 ++++++++++++++++++++++++++----------------------
+ src/belvuApp/belvu_.h    |  4 ++--
+ 2 files changed, 30 insertions(+), 25 deletions(-)
+
+2011-05-11  Gemma Barson  <gb10 at sanger.ac.uk>
+ WIP: added ability to select a node from the tree window
+ src/belvuApp/belvuTree.c | 92 ++++++++++++++++++++++++++++++++++++++++++++++--
+ 1 file changed, 89 insertions(+), 3 deletions(-)
+
+2011-05-11  Gemma Barson  <gb10 at sanger.ac.uk>
+ Tree window now has a scale
+ src/belvuApp/belvuTree.c | 123 ++++++++++++++++++++++++++++-------------------
+ 1 file changed, 74 insertions(+), 49 deletions(-)
+
+2011-05-11  Gemma Barson  <gb10 at sanger.ac.uk>
+ Tree layout size is now more accurate
+ src/belvuApp/belvu.c          | 20 ++++++++--
+ src/belvuApp/belvuAlignment.c | 20 +++++-----
+ src/belvuApp/belvuTree.c      | 85 ++++++++++++++++++++++++++++++-------------
+ src/belvuApp/belvu_.h         |  4 +-
+ 4 files changed, 88 insertions(+), 41 deletions(-)
+
+2011-05-11  Gemma Barson  <gb10 at sanger.ac.uk>
+ Set the make-tree dialog's focus on a widget that can activate the default response
+ src/belvuApp/belvuTree.c   | 16 +++++++++-------
+ src/belvuApp/belvuTree.h   |  2 +-
+ src/belvuApp/belvuWindow.c | 13 +++++++++----
+ 3 files changed, 19 insertions(+), 12 deletions(-)
+
+2011-05-11  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added ability to set the tree building method via the make-tree dialog
+ src/belvuApp/belvuTree.c   | 14 ++++++--------
+ src/belvuApp/belvuWindow.c | 47 ++++++++++++++++++++++++++++++++++++++++++++--
+ src/belvuApp/belvu_.h      |  6 ++++++
+ 3 files changed, 57 insertions(+), 10 deletions(-)
+
+2011-05-11  Gemma Barson  <gb10 at sanger.ac.uk>
+ Generalised combo box functions
+ src/belvuApp/belvuTree.c      | 64 +---------------------------------------
+ src/belvuApp/belvu_.h         | 10 -------
+ src/seqtoolsUtils/utilities.c | 68 ++++++++++++++++++++++++++++++++++++++++++-
+ src/seqtoolsUtils/utilities.h | 17 +++++++++++
+ 4 files changed, 85 insertions(+), 74 deletions(-)
+
+2011-05-11  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added ability to choose the pick method on the tree settings dialog
+ src/belvuApp/belvu.c       |   1 +
+ src/belvuApp/belvuMain.c   |   1 -
+ src/belvuApp/belvuTree.c   | 111 ++++++++++++++++++++++++++++++++++++++++-----
+ src/belvuApp/belvuTree.h   |   6 ++-
+ src/belvuApp/belvuWindow.c |   5 +-
+ src/belvuApp/belvu_.h      |  32 +++++++++----
+ 6 files changed, 134 insertions(+), 22 deletions(-)
+
+2011-05-11  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed some uninitialised-value warnings
+ src/belvuApp/belvu.c     | 144 +++++++++++++++++++++++++++++------------------
+ src/belvuApp/belvuMain.c |  13 +++--
+ src/belvuApp/belvuTree.c |  67 +++++++++++-----------
+ src/belvuApp/belvu_.h    |   6 +-
+ 4 files changed, 132 insertions(+), 98 deletions(-)
+
+2011-05-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added ability to change the line width and tree scale
+ src/belvuApp/belvuTree.c   | 91 +++++++++++++++++++++++++++++++++++++++-------
+ src/belvuApp/belvuTree.h   |  2 +-
+ src/belvuApp/belvuWindow.c |  2 +-
+ 3 files changed, 79 insertions(+), 16 deletions(-)
+
+2011-05-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Tree settings dialog now refreshes the tree
+ src/belvuApp/belvuTree.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++-
+ 1 file changed, 50 insertions(+), 1 deletion(-)
+
+2011-05-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added comments
+ src/seqtoolsUtils/utilities.c | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+2011-05-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a memory bug where the tree settings dialog response function was being passed invalid data
+ src/belvuApp/belvuTree.c | 15 +++++++++++----
+ 1 file changed, 11 insertions(+), 4 deletions(-)
+
+2011-05-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with branch length text position
+ src/belvuApp/belvuTree.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-05-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Code tidying
+ src/belvuApp/belvuTree.c | 166 ++++++++++++++++++++++++++++++-----------------
+ 1 file changed, 108 insertions(+), 58 deletions(-)
+
+2011-05-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added make-tree and tree-settings dialogs
+ src/belvuApp/belvu.c       |   3 +-
+ src/belvuApp/belvuTree.c   | 180 +++++++++++++++++++++++++++++++++------------
+ src/belvuApp/belvuTree.h   |   4 +-
+ src/belvuApp/belvuWindow.c | 103 +++++++++++++++++++++++---
+ src/belvuApp/belvu_.h      |  53 ++++++++++---
+ 5 files changed, 277 insertions(+), 66 deletions(-)
+
+2011-05-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug where scores were being displayed incorrectly
+ src/belvuApp/belvu.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+2011-05-06  Gemma Barson  <gb10 at sanger.ac.uk>
+ The tree now draws correct sequence names and has thicker lines
+ src/belvuApp/belvuTree.c | 19 ++++++++++++++-----
+ 1 file changed, 14 insertions(+), 5 deletions(-)
+
+2011-05-06  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added basic tree drawing capability
+ src/belvuApp/belvu.c          | 262 +++++++++++++++---------------------------
+ src/belvuApp/belvuAlignment.c |  68 -----------
+ src/belvuApp/belvuMain.c      |  30 +++--
+ src/belvuApp/belvuTree.c      | 217 ++++++++++++++++++++++++++++++----
+ src/belvuApp/belvuWindow.c    |   2 +
+ src/belvuApp/belvu_.h         |  13 ++-
+ 6 files changed, 318 insertions(+), 274 deletions(-)
+
+2011-05-06  Gemma Barson  <gb10 at sanger.ac.uk>
+ Windows now have proper titles
+ src/belvuApp/belvuTree.c   | 19 ++++++++++---------
+ src/belvuApp/belvuWindow.c | 13 +++++++++++--
+ 2 files changed, 21 insertions(+), 11 deletions(-)
+
+2011-05-06  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added tree-drawing widgets
+ src/belvuApp/Makefile.am      |    2 +-
+ src/belvuApp/belvu.c          | 1189 ++-------------------------------
+ src/belvuApp/belvuAlignment.c |   23 +-
+ src/belvuApp/belvuAlignment.h |    2 +-
+ src/belvuApp/belvuMain.c      |    3 +-
+ src/belvuApp/belvuTree.c      | 1473 +++++++++++++++++++++++++++++++++++++++++
+ src/belvuApp/belvuTree.h      |   54 ++
+ src/belvuApp/belvuWindow.c    |   43 +-
+ src/belvuApp/belvuWindow.h    |    5 +-
+ src/belvuApp/belvu_.h         |   10 +-
+ src/seqtoolsUtils/utilities.c |   24 +-
+ src/seqtoolsUtils/utilities.h |    1 +
+ 12 files changed, 1637 insertions(+), 1192 deletions(-)
+
+2011-05-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added remove-by-score and remove-outliers
+ src/belvuApp/belvu.c          | 290 +++++++++++++++++++++---------------------
+ src/belvuApp/belvuAlignment.c |  30 +++++
+ src/belvuApp/belvuAlignment.h |   5 +
+ src/belvuApp/belvuWindow.c    |  57 +++++++++
+ src/belvuApp/belvu_.h         |   2 +
+ 5 files changed, 241 insertions(+), 143 deletions(-)
+
+2011-05-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Implemented remove-partial and make-non-redundant
+ src/belvuApp/belvu.c          | 43 ++++++--------------
+ src/belvuApp/belvuAlignment.c | 17 +++++++-
+ src/belvuApp/belvuAlignment.h |  4 +-
+ src/belvuApp/belvuMain.c      |  2 +-
+ src/belvuApp/belvuWindow.c    | 93 ++++++++++++++++++++++++++++++++-----------
+ src/belvuApp/belvu_.h         |  2 +-
+ 6 files changed, 102 insertions(+), 59 deletions(-)
+
+2011-04-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Implemented 'remove gappy sequences' option
+ src/belvuApp/belvu.c          |  9 ++++--
+ src/belvuApp/belvuAlignment.c | 11 ++++++-
+ src/belvuApp/belvuAlignment.h |  2 +-
+ src/belvuApp/belvuWindow.c    | 71 ++++++++++++++++++++++++++++++++++++++++---
+ 4 files changed, 84 insertions(+), 9 deletions(-)
+
+2011-04-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Removed padding around alignment view
+ src/belvuApp/belvuAlignment.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-04-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Implemented 'remove sequences' mode
+ src/belvuApp/belvuAlignment.c | 36 ++++++++++++++++++++++++++++++++++--
+ src/belvuApp/belvuAlignment.h |  1 +
+ src/belvuApp/belvuWindow.c    | 42 +++++++++++++++++++-----------------------
+ 3 files changed, 54 insertions(+), 25 deletions(-)
+
+2011-04-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added flag and cursor for 'remove sequences' mode
+ src/belvuApp/belvuWindow.c | 78 +++++++++++++++++++++++++++++++++++++++++-----
+ src/belvuApp/belvu_.h      |  1 +
+ 2 files changed, 71 insertions(+), 8 deletions(-)
+
+2011-04-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added help menu
+ src/belvuApp/belvuWindow.c | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+2011-04-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added About dialog
+ src/belvuApp/belvuWindow.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 64 insertions(+)
+
+2011-04-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Update vertical scroll range when deleting rows
+ src/belvuApp/belvuAlignment.c | 37 ++++++++++++++++++++++++++++++-------
+ src/belvuApp/belvuAlignment.h |  3 ++-
+ src/belvuApp/belvuWindow.c    | 21 ++++++++++++++-------
+ 3 files changed, 46 insertions(+), 15 deletions(-)
+
+2011-04-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug where the last base was not visible
+ src/belvuApp/belvuAlignment.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-04-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Selected row is now highlighted
+ src/belvuApp/belvuAlignment.c | 26 ++++++++++++++++++++++----
+ 1 file changed, 22 insertions(+), 4 deletions(-)
+
+2011-04-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Implemented 'remove row' option
+ src/belvuApp/belvuWindow.c | 20 ++++++++++++++++++++
+ 1 file changed, 20 insertions(+)
+
+2011-04-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Select a row when it is clicked
+ src/belvuApp/belvuAlignment.c | 31 +++++++++++++++++++++++++++++++
+ 1 file changed, 31 insertions(+)
+
+2011-04-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added toggle and radio menu actions
+ src/belvuApp/belvuWindow.c | 214 +++++++++++++++++++++------------------------
+ src/belvuApp/belvu_.h      |  42 ++++++++-
+ 2 files changed, 140 insertions(+), 116 deletions(-)
+
+2011-04-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Moved long menus to sub-menus
+ src/belvuApp/belvuWindow.c | 46 +++++++++++++++++++++++++++-------------------
+ 1 file changed, 27 insertions(+), 19 deletions(-)
+
+2011-04-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added Edit, Color and Sort menu actions
+ src/belvuApp/belvuWindow.c | 383 +++++++++++++++++++++++++++++++++++++++++++--
+ 1 file changed, 374 insertions(+), 9 deletions(-)
+
+2011-04-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug where closing the wrap window was quitting the application
+ src/belvuApp/belvuAlignment.c | 2 --
+ 1 file changed, 2 deletions(-)
+
+2011-04-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Set initial position of wrap window
+ src/belvuApp/belvuWindow.c | 43 +++++++++++++++++++++++++++++--------------
+ 1 file changed, 29 insertions(+), 14 deletions(-)
+
+2011-04-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Use more sensible window sizes, and bring wrap window to front on creation
+ src/belvuApp/belvuWindow.c | 17 +++++++++++++----
+ 1 file changed, 13 insertions(+), 4 deletions(-)
+
+2011-04-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with printing a non-toplevel widget
+ src/belvuApp/belvuWindow.c    | 4 ++--
+ src/blixemApp/blxwindow.c     | 2 +-
+ src/dotterApp/alignmenttool.c | 2 +-
+ src/dotterApp/dotter.c        | 4 ++--
+ src/seqtoolsUtils/utilities.c | 3 ++-
+ src/seqtoolsUtils/utilities.h | 2 +-
+ 6 files changed, 9 insertions(+), 8 deletions(-)
+
+2011-04-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added title to wrapped-alignment view
+ src/belvuApp/belvuAlignment.c | 30 ++++++++++++++++++++++++++----
+ src/belvuApp/belvuAlignment.h |  2 +-
+ src/belvuApp/belvuWindow.c    |  8 ++------
+ 3 files changed, 29 insertions(+), 11 deletions(-)
+
+2011-04-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a scaling issue with printing fit-to-width
+ src/seqtoolsUtils/utilities.c | 24 ++++++++++++++++++++----
+ 1 file changed, 20 insertions(+), 4 deletions(-)
+
+2011-04-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added printing for the wrapped-alignment view
+ src/belvuApp/belvuWindow.c    |  76 +++++++++++++++-----
+ src/blixemApp/blxwindow.c     |   2 +-
+ src/dotterApp/alignmenttool.c |   2 +-
+ src/dotterApp/dotter.c        |   4 +-
+ src/seqtoolsUtils/utilities.c | 158 +++++++++++++++++++++++++++++++++---------
+ src/seqtoolsUtils/utilities.h |  12 +++-
+ 6 files changed, 202 insertions(+), 52 deletions(-)
+
+2011-04-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed some bugs with the wrapped view
+ src/belvuApp/belvuAlignment.c | 152 ++++++++++++++++++++++++++----------------
+ 1 file changed, 96 insertions(+), 56 deletions(-)
+
+2011-04-19  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added wrapped-alignment view
+ src/belvuApp/belvu.c          |  19 +--
+ src/belvuApp/belvuAlignment.c | 355 +++++++++++++++++++++++++++++++++++++-----
+ src/belvuApp/belvuAlignment.h |   2 +-
+ src/belvuApp/belvuWindow.c    | 260 ++++++++++++++++++++++++++++---
+ src/belvuApp/belvu_.h         |   1 +
+ 5 files changed, 559 insertions(+), 78 deletions(-)
+
+2011-04-19  Gemma Barson  <gb10 at sanger.ac.uk>
+ Improved start up speed
+ src/belvuApp/belvuAlignment.c | 164 ++++++++++++++++++++++++++----------------
+ 1 file changed, 104 insertions(+), 60 deletions(-)
+
+2011-04-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added column separater lines
+ src/belvuApp/belvuAlignment.c | 22 ++++++++++++++++------
+ 1 file changed, 16 insertions(+), 6 deletions(-)
+
+2011-04-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed an issue with aligning the columns
+ src/belvuApp/belvuAlignment.c | 32 ++++++++++++++------------------
+ 1 file changed, 14 insertions(+), 18 deletions(-)
+
+2011-04-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Removed unnecessary calls to size-allocate
+ src/belvuApp/belvuAlignment.c | 15 +++++++--------
+ 1 file changed, 7 insertions(+), 8 deletions(-)
+
+2011-04-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ The horizontal scrollbar now only affects the sequence column
+ src/belvuApp/belvuAlignment.c | 257 ++++++++++++++++++++++++++++--------------
+ 1 file changed, 174 insertions(+), 83 deletions(-)
+
+2011-04-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Cached the drawable for the belvu alignment
+ src/belvuApp/belvuAlignment.c | 56 +++++++++++++++++++++++++------------------
+ 1 file changed, 33 insertions(+), 23 deletions(-)
+
+2011-04-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ WIP belvu now uses fixed-width font
+ src/belvuApp/belvuAlignment.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+2011-04-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ WIP: belvu now shows colors
+ src/belvuApp/belvu.c          | 57 +++++++++++++++++--------
+ src/belvuApp/belvuAlignment.c | 99 ++++++++++++++++++++++++++++++++++++++-----
+ src/belvuApp/belvuMain.c      | 54 ++---------------------
+ src/belvuApp/belvu_.h         | 11 +++++
+ src/seqtoolsUtils/utilities.h | 10 +++++
+ 5 files changed, 153 insertions(+), 78 deletions(-)
+
+2011-04-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ WIP: create belvu main window
+ src/belvuApp/Makefile.am                |   2 +-
+ src/belvuApp/belvu.c                    | 110 +++++++++++
+ src/belvuApp/belvuAlignment.c           | 301 +++++++++++++++++++++++++++++
+ src/belvuApp/belvuAlignment.h           |  48 +++++
+ src/belvuApp/belvuMain.c                | 232 ++++++++---------------
+ src/belvuApp/belvuWindow.c              | 326 +++++++++++++++++++++++++++++++-
+ src/belvuApp/belvuWindow.h              |   2 +-
+ src/belvuApp/belvu_.h                   |  19 ++
+ src/doc/User_doc/Makefile.am            |   6 +-
+ src/doc/User_doc/belvu_news.html        |   9 +
+ src/doc/User_doc/belvu_quick_start.html |  65 +++++++
+ src/doc/User_doc/belvu_usage.txt        |  75 ++++++++
+ src/doc/User_doc/index.html             |   7 +
+ 13 files changed, 1039 insertions(+), 163 deletions(-)
+
+2011-04-11  Gemma Barson  <gb10 at sanger.ac.uk>
+ WIP: added belvu files
+ .gitignore                 |    1 +
+ src/Makefile.am            |    7 +-
+ src/belvuApp/Makefile.am   |    8 +
+ src/belvuApp/belvu.c       | 8524 ++++++++++++++++++++++++++++++++++++++++++++
+ src/belvuApp/belvuMain.c   |  876 +++++
+ src/belvuApp/belvuOld.c    | 8386 +++++++++++++++++++++++++++++++++++++++++++
+ src/belvuApp/belvuWindow.c |   95 +
+ src/belvuApp/belvuWindow.h |   48 +
+ src/belvuApp/belvu_.h      |  339 ++
+ src/configure.ac           |    2 +-
+ 10 files changed, 18283 insertions(+), 3 deletions(-)
+
+2011-04-08  Gemma Barson  <gb10 at sanger.ac.uk>
+ Edited comments
+ src/seqtoolsUtils/blxparser.c | 13 ++++++++++++-
+ 1 file changed, 12 insertions(+), 1 deletion(-)
+
+2011-04-08  Gemma Barson  <gb10 at sanger.ac.uk>
+ Generalised FASTA parser to allow multiple sequences
+ src/blixemApp/blxmain.c       |  73 +----------------
+ src/seqtoolsUtils/blxparser.c | 183 ++++++++++++++++++++++++++----------------
+ 2 files changed, 117 insertions(+), 139 deletions(-)
+
+2011-07-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a regression with the default zoom range
+ src/blixemApp/bigpicture.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+2011-07-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added 'read' type
+ src/seqtoolsUtils/blxGff3Parser.c | 10 +++++++---
+ 1 file changed, 7 insertions(+), 3 deletions(-)
+
+2011-07-12  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed some issues where scrolling messes up the initial big picture range
+ src/blixemApp/bigpicture.c |  5 +++--
+ src/blixemApp/detailview.c | 11 ++++++++---
+ 2 files changed, 11 insertions(+), 5 deletions(-)
+
+2011-07-11  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added --zoom-range argument to allow the caller to specify the initial big picture range
+ src/blixemApp/bigpicture.c | 45 +++++++++--------------------
+ src/blixemApp/bigpicture.h |  2 ++
+ src/blixemApp/blixem_.h    |  2 ++
+ src/blixemApp/blxmain.c    | 72 +++++++++++++++++++++++++++++++++-------------
+ src/blixemApp/blxwindow.c  | 12 +++++++-
+ 5 files changed, 81 insertions(+), 52 deletions(-)
+
+2011-07-04  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed typos where a gboolean was being used instead of an int
+ src/blixemApp/blixem_.h | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+2011-06-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated blixem user manual with info about the coverage view
+ src/doc/User_doc/Blixem_manual.odt | Bin 1095666 -> 1102821 bytes
+ src/doc/User_doc/Blixem_manual.pdf | Bin 849234 -> 855666 bytes
+ 2 files changed, 0 insertions(+), 0 deletions(-)
+
+2011-06-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated what's new page
+ src/doc/User_doc/blixem_news.html | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+2011-06-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Ensure that only identical alignments can appear on the same row in 'squash matches' mode
+ src/blixemApp/detailviewtree.c | 40 ++++++++++++++++++++++++++++++++--------
+ 1 file changed, 32 insertions(+), 8 deletions(-)
+
+2011-06-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Do not show score and ID if they are unset
+ src/blixemApp/detailviewtree.c | 11 ++++++-----
+ 1 file changed, 6 insertions(+), 5 deletions(-)
+
+2011-06-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug where some short reads were not being added to the 'squashed' view
+ src/blixemApp/detailviewtree.c | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+2011-06-15  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/shortread'
+2011-06-15  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug where dotter fails if pfetch returns 'no match'
+ src/blixemApp/blxdotter.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-06-15  Gemma Barson  <gb10 at sanger.ac.uk>
+ When sorting alignments by position, also do a secondary sort by length
+ src/blixemApp/detailviewtree.c | 12 ++++++++++--
+ 1 file changed, 10 insertions(+), 2 deletions(-)
+
+2011-06-15  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed an issue where the 'squash matches' option on the settings dialog was not updated after changing the same setting on the toolbar
+ src/blixemApp/blxwindow.c     | 21 ++++++++++++++++-----
+ src/seqtoolsUtils/utilities.c | 38 ++++++++++++++++++++++++++++++++++++++
+ src/seqtoolsUtils/utilities.h |  3 +++
+ 3 files changed, 57 insertions(+), 5 deletions(-)
+
+2011-06-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Incremented version to 4.2 (start of new versioning system)
+ src/version.m4 | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-06-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/shortread'
+2011-06-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Improvements to message handling for region-fetch code
+ src/blixemApp/blxview.c       | 22 ++++++++++++++--------
+ src/blixemApp/blxwindow.c     |  2 +-
+ src/seqtoolsUtils/utilities.c | 25 +++++++++++++++++++++++--
+ src/seqtoolsUtils/utilities.h |  1 +
+ 4 files changed, 39 insertions(+), 11 deletions(-)
+
+2011-06-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed an issue with squashed matches where the row was not always highlighted correctly for selected/grouped matches
+ src/blixemApp/blxwindow.c            |  3 +++
+ src/blixemApp/sequencecellrenderer.c | 46 ++++++++++++++++++++++++++++++++----
+ src/seqtoolsUtils/utilities.c        | 12 +++++-----
+ src/seqtoolsUtils/utilities.h        |  8 +++----
+ 4 files changed, 55 insertions(+), 14 deletions(-)
+
+2011-06-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Small comment addition
+ src/dotterApp/dotter.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-06-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added toolbar icon for squash-matches option
+ src/blixemApp/blxwindow.c | 33 +++++++++++++++++++++++++++++----
+ 1 file changed, 29 insertions(+), 4 deletions(-)
+
+2011-06-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Improved display name for short reads when 'squash matches' is enabled
+ src/blixemApp/detailview.h     |  3 ++-
+ src/blixemApp/detailviewtree.c | 17 +++++++----------
+ 2 files changed, 9 insertions(+), 11 deletions(-)
+
+2011-06-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed an issue where a selected short-read could be hidden by its duplicates in 'squashed matches' mode
+ src/blixemApp/sequencecellrenderer.c | 35 +++++++++++++++++++++++++++++------
+ 1 file changed, 29 insertions(+), 6 deletions(-)
+
+2011-06-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Finished work to group short-reads
+ src/blixemApp/detailviewtree.c | 186 ++++++++++++++++++++++++++++++++---------
+ src/seqtoolsUtils/blxmsp.c     |   2 +-
+ 2 files changed, 149 insertions(+), 39 deletions(-)
+
+2011-06-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ WIP: implement a better way of grouping duplicate short reads
+ src/blixemApp/detailviewtree.c    |  3 +-
+ src/seqtoolsUtils/blxGff3Parser.c |  2 +-
+ src/seqtoolsUtils/blxmsp.c        | 67 ++-------------------------------------
+ src/seqtoolsUtils/blxmsp.h        |  2 +-
+ 4 files changed, 7 insertions(+), 67 deletions(-)
+
+2011-06-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed an issue with the names of duplicated short reads being lost
+ src/blixemApp/blxwindow.c      | 40 ++++-----------------------
+ src/blixemApp/detailview.c     |  8 ++----
+ src/blixemApp/detailview.h     |  6 ++++
+ src/blixemApp/detailviewtree.c | 21 ++++----------
+ src/seqtoolsUtils/blxmsp.c     | 63 ++++--------------------------------------
+ src/seqtoolsUtils/blxmsp.h     |  6 ++--
+ src/seqtoolsUtils/utilities.c  | 17 ------------
+ src/seqtoolsUtils/utilities.h  |  1 -
+ 8 files changed, 28 insertions(+), 134 deletions(-)
+
+2011-06-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug where the region-fetch script args were not being picked up from config
+ src/blixemApp/blixem_.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-06-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a compile error on Macs (missing include file)
+ src/blixemApp/blxview.c | 19 ++++++-------------
+ 1 file changed, 6 insertions(+), 13 deletions(-)
+
+2011-06-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a compile error on Linux due to missing include file
+ src/blixemApp/blxview.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+2011-06-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/shortread'
+2011-06-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug where the coverage view labels were sometimes not drawn correctly
+ src/blixemApp/coverageview.c | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+2011-06-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added squash-matches command-line argument
+ src/blixemApp/blixem_.h        |  2 +-
+ src/blixemApp/blxmain.c        | 37 +++++++++++++++++++++++--------------
+ src/blixemApp/blxwindow.c      | 17 +++++++++++++----
+ src/blixemApp/detailviewtree.c |  2 +-
+ 4 files changed, 38 insertions(+), 20 deletions(-)
+
+2011-06-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ By default, set the secondary sort column to be position
+ src/blixemApp/detailview.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+2011-06-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added show-coverage command-line argument
+ src/blixemApp/blixem_.h   | 2 ++
+ src/blixemApp/blxmain.c   | 6 ++++++
+ src/blixemApp/blxwindow.c | 7 ++++---
+ 3 files changed, 12 insertions(+), 3 deletions(-)
+
+2011-06-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Report an error if the region-fetch script fails
+ src/blixemApp/blxview.c | 14 +++++++++++++-
+ 1 file changed, 13 insertions(+), 1 deletion(-)
+
+2011-06-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ The range requested by region-fetch is now clipped to the display range
+ src/blixemApp/blixem_.h   |  1 +
+ src/blixemApp/blxview.c   | 32 +++++++++++++++++++++++---------
+ src/blixemApp/blxwindow.c |  2 +-
+ 3 files changed, 25 insertions(+), 10 deletions(-)
+
+2011-06-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Tidied the regino-fetch code
+ src/blixemApp/blxview.c | 218 +++++++++++++++++++++++++++++++-----------------
+ 1 file changed, 143 insertions(+), 75 deletions(-)
+
+2011-06-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added the --save-temp-files command-line argument
+ src/blixemApp/blixem_.h   |  3 +++
+ src/blixemApp/blxmain.c   |  7 ++++++-
+ src/blixemApp/blxview.c   | 19 ++++++++++++++-----
+ src/blixemApp/blxwindow.c |  7 ++++---
+ 4 files changed, 27 insertions(+), 9 deletions(-)
+
+2011-06-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Keep original name for short reads so that we can identify pairs (until we have a better method of doing so)
+ src/blixemApp/detailviewtree.c |  9 ++++-----
+ src/seqtoolsUtils/blxmsp.c     | 13 +++++++------
+ 2 files changed, 11 insertions(+), 11 deletions(-)
+
+2011-06-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ GFF parser now ignores features that are outside the reference sequence range
+ src/blixemApp/blxmain.c           |  7 +++++++
+ src/seqtoolsUtils/blxGff3Parser.c | 33 +++++++++++++++++++++++++++------
+ src/seqtoolsUtils/blxGff3Parser.h |  3 ++-
+ src/seqtoolsUtils/blxparser.c     |  7 ++++---
+ 4 files changed, 40 insertions(+), 10 deletions(-)
+
+2011-06-07  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/shortread'
+2011-06-07  Gemma Barson  <gb10 at sanger.ac.uk>
+ Delete temp files after doing a region-fetch
+ src/blixemApp/blxview.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+2011-06-07  Gemma Barson  <gb10 at sanger.ac.uk>
+ region-fetch now gets its script arguments from the config file on a per-source basis
+ src/blixemApp/blxview.c | 161 ++++++++++++++++++++++++++----------------------
+ 1 file changed, 86 insertions(+), 75 deletions(-)
+
+2011-06-03  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/buildsys'
+2011-06-03  Gemma Barson  <gb10 at sanger.ac.uk>
+ Removed --dirty option from git describe because it's not available in older versions of git
+ src/configure.ac | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+2011-06-03  Gemma Barson  <gb10 at sanger.ac.uk>
+ Use abbreviated commit ids in build info
+ src/configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-06-03  Gemma Barson  <gb10 at sanger.ac.uk>
+ Removed unused expression in configure.ac
+ src/configure.ac | 2 --
+ 1 file changed, 2 deletions(-)
+
+2011-06-03  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug in the build system where AM_COND_IF is not recognised in older versions of automake
+ src/configure.ac | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+2011-06-03  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'feature/buildsys'
+2011-06-03  Gemma Barson  <gb10 at sanger.ac.uk>
+ Build system now includes git-describe info in the version number
+ src/blixemApp/blixem_.h | 4 ++--
+ src/configure.ac        | 6 ++++++
+ src/dotterApp/dotter_.h | 4 ++--
+ 3 files changed, 10 insertions(+), 4 deletions(-)
+
+2011-06-02  Gemma Barson  <gb10 at sanger.ac.uk>
+ Incremented version to 4.1.20
+ src/version.m4 | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-06-02  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added --dataset argument
+ src/blixemApp/blixem_.h   |  5 ++++-
+ src/blixemApp/blxmain.c   |  6 ++++++
+ src/blixemApp/blxview.c   | 21 +++++++++++++++------
+ src/blixemApp/blxwindow.c |  3 ++-
+ 4 files changed, 27 insertions(+), 8 deletions(-)
+
+2011-06-01  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with creating temp files for region-fetch
+ src/blixemApp/blxview.c | 12 ++++++++----
+ 1 file changed, 8 insertions(+), 4 deletions(-)
+
+2011-06-01  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'shortread'
+2011-05-31  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug where the parser was not ignoring blank lines
+ src/seqtoolsUtils/blxparser.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-05-31  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added the real script arguments for the bam-fetch script
+ src/blixemApp/blxview.c           | 115 +++++++++++++++++++++-----------------
+ src/blixemApp/blxwindow.c         |   2 +-
+ src/seqtoolsUtils/blxGff3Parser.c |  18 +++---
+ 3 files changed, 73 insertions(+), 62 deletions(-)
+
+2011-05-27  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added code to distinguish short-read matches from other match types
+ src/seqtoolsUtils/blxGff3Parser.c | 16 ++++++++++++++++
+ 1 file changed, 16 insertions(+)
+
+2011-05-27  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug where parsing a secondary input file was not adding the sequences correctly
+ src/blixemApp/blixem_.h |  2 +-
+ src/blixemApp/blxview.c | 22 +++++++++++-----------
+ 2 files changed, 12 insertions(+), 12 deletions(-)
+
+2011-05-27  Gemma Barson  <gb10 at sanger.ac.uk>
+ Blixem region-fetch now calls the script specified in the config file
+ src/blixemApp/blxview.c | 25 +++++++++++--------------
+ 1 file changed, 11 insertions(+), 14 deletions(-)
+
+2011-05-27  Gemma Barson  <gb10 at sanger.ac.uk>
+ Convert coords to chromosome (input) coords for bam-fetch
+ src/blixemApp/blixem_.h   |  8 +++++---
+ src/blixemApp/blxmain.c   |  1 -
+ src/blixemApp/blxview.c   | 18 +++++++++++++-----
+ src/blixemApp/blxwindow.c |  8 ++++++--
+ 4 files changed, 24 insertions(+), 11 deletions(-)
+
+2011-05-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Region-fetch now parses the results of the created file
+ src/blixemApp/blixem_.h    | 12 +++++++-
+ src/blixemApp/blxmain.c    |  3 --
+ src/blixemApp/blxview.c    | 74 ++++++++++++++++++++++++++++++++++++++++++----
+ src/blixemApp/blxwindow.c  |  2 +-
+ src/seqtoolsUtils/blxmsp.c |  6 ++++
+ src/seqtoolsUtils/blxmsp.h |  1 +
+ 6 files changed, 87 insertions(+), 11 deletions(-)
+
+2011-05-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Write some test data to the output file
+ src/blixemApp/blxview.c    | 62 +++++++++++++++++++++++++++++++++++-----------
+ src/seqtoolsUtils/blxmsp.c |  5 ++--
+ 2 files changed, 51 insertions(+), 16 deletions(-)
+
+2011-05-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Region-fetch function now opens a temporary file for the results
+ src/blixemApp/blxview.c | 35 ++++++++++++++++++++++++-----------
+ 1 file changed, 24 insertions(+), 11 deletions(-)
+
+2011-05-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed some bugs with parsing by multiple fetch modes
+ src/blixemApp/blxFetch.c          |  18 +++++--
+ src/blixemApp/blxmain.c           |   6 ++-
+ src/blixemApp/blxview.c           | 103 +++++++++++++++++++++++++-------------
+ src/seqtoolsUtils/blxGff3Parser.c |   2 +-
+ 4 files changed, 88 insertions(+), 41 deletions(-)
+
+2011-05-04  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with fetch-by-mode. Also now specify that regions need data to be fetched.
+ src/blixemApp/blxview.c           | 14 ++++++++------
+ src/seqtoolsUtils/blxGff3Parser.c |  8 ++++++++
+ src/seqtoolsUtils/blxmsp.c        | 17 +++++++++++++++--
+ src/seqtoolsUtils/blxmsp.h        |  4 +++-
+ 4 files changed, 34 insertions(+), 9 deletions(-)
+
+2011-05-04  Gemma Barson  <gb10 at sanger.ac.uk>
+ Moved source data from the MSP struct to the parent sequence struct
+ src/blixemApp/blxview.c           | 13 +++++++-
+ src/blixemApp/detailviewtree.c    | 14 ++++-----
+ src/seqtoolsUtils/blxGff3Parser.c |  8 +----
+ src/seqtoolsUtils/blxmsp.c        | 64 ++++++++++++++++++++++-----------------
+ src/seqtoolsUtils/blxmsp.h        | 13 +++++---
+ 5 files changed, 64 insertions(+), 48 deletions(-)
+
+2011-05-04  Gemma Barson  <gb10 at sanger.ac.uk>
+ Data type is now populated in the sequences
+ src/blixemApp/blxview.c           |  4 ++++
+ src/seqtoolsUtils/blxGff3Parser.c | 20 ++++++++++++++------
+ src/seqtoolsUtils/blxmsp.c        | 18 +++++++++++++++---
+ src/seqtoolsUtils/blxmsp.h        | 13 ++++---------
+ src/seqtoolsUtils/blxparser.c     | 22 ++++++++++++++--------
+ 5 files changed, 51 insertions(+), 26 deletions(-)
+
+2011-05-04  Gemma Barson  <gb10 at sanger.ac.uk>
+ Removed user-fetch mode from the data-type config group
+ src/seqtoolsUtils/blxGff3Parser.c | 33 ---------------------------------
+ src/seqtoolsUtils/blxmsp.c        | 27 +++++++++++++++++++++++++++
+ src/seqtoolsUtils/blxmsp.h        |  3 ++-
+ 3 files changed, 29 insertions(+), 34 deletions(-)
+
+2011-05-04  Gemma Barson  <gb10 at sanger.ac.uk>
+ Allow a differentiation between bulk-fetch mode and interactive/user-fetch mode in the config file
+ src/blixemApp/blixem_.h           |  86 ++++++++++----------
+ src/blixemApp/blxFetch.c          |  75 ++++++++++-------
+ src/blixemApp/blxdotter.c         |   2 +-
+ src/blixemApp/blxmain.c           |   7 +-
+ src/blixemApp/blxview.c           | 166 +++++++++++++++++++++++++++++---------
+ src/blixemApp/blxwindow.c         |  32 +++++---
+ src/blixemApp/blxwindow.h         |   2 +-
+ src/seqtoolsUtils/blxGff3Parser.c |  24 ++++--
+ src/seqtoolsUtils/blxmsp.c        |   1 +
+ src/seqtoolsUtils/blxmsp.h        |  23 ++++--
+ 10 files changed, 281 insertions(+), 137 deletions(-)
+
+2011-05-04  Gemma Barson  <gb10 at sanger.ac.uk>
+ Removed bulk-fetch mode to simplify initial implementation
+ src/seqtoolsUtils/blxGff3Parser.c | 9 +--------
+ src/seqtoolsUtils/blxmsp.h        | 1 -
+ 2 files changed, 1 insertion(+), 9 deletions(-)
+
+2011-05-04  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added data-type struct and populate it in MSPs that have a data-type specified
+ src/blixemApp/blxFetch.c          |   1 -
+ src/blixemApp/blxmain.c           |   4 +-
+ src/dotterApp/dotterMain.c        |   2 +-
+ src/seqtoolsUtils/blxGff3Parser.c | 109 ++++++++++++++++++++++++++++++++++++--
+ src/seqtoolsUtils/blxGff3Parser.h |   3 +-
+ src/seqtoolsUtils/blxmsp.h        |  12 ++++-
+ src/seqtoolsUtils/blxparser.c     |  13 ++---
+ src/seqtoolsUtils/blxparser.h     |   2 +-
+ 8 files changed, 129 insertions(+), 17 deletions(-)
+
+2011-05-03  Gemma Barson  <gb10 at sanger.ac.uk>
+ Removed commented out code
+ src/blixemApp/blxFetch.c | 84 +++++++++++++++++++++---------------------------
+ 1 file changed, 37 insertions(+), 47 deletions(-)
+
+2011-05-03  Gemma Barson  <gb10 at sanger.ac.uk>
+ Always initialise pfetch node and port on startup
+ src/blixemApp/blxFetch.c | 18 +++---------------
+ 1 file changed, 3 insertions(+), 15 deletions(-)
+
+2011-05-03  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added new fetch method groups for config file
+ src/blixemApp/blixem_.h    |  20 ++++++--
+ src/blixemApp/blxFetch.c   | 125 ++++++++++++++++++++++++++++-----------------
+ src/blixemApp/blxview.c    |   2 +-
+ src/seqtoolsUtils/blxmsp.h |   6 ++-
+ 4 files changed, 99 insertions(+), 54 deletions(-)
+
+2011-05-03  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added 'region' to supported GFF types
+ src/seqtoolsUtils/blxGff3Parser.c | 25 ++++++++++++++++++-------
+ src/seqtoolsUtils/blxmsp.h        | 18 ++++++++++++------
+ 2 files changed, 30 insertions(+), 13 deletions(-)
+
+2011-05-26  Gemma Barson  <gb10 at sanger.ac.uk>
+ Incremented version to 4.1.19
+ src/version.m4 | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-05-26  Gemma Barson  <gb10 at sanger.ac.uk>
+ Reading frame is now calculated from the mapped coords rather than the original coords
+ src/blixemApp/blxview.c    | 122 +----------------------------------------
+ src/dotterApp/dotterMain.c |   2 +-
+ src/seqtoolsUtils/blxmsp.c | 131 +++++++++++++++++++++++++++++++++++++++++++--
+ src/seqtoolsUtils/blxmsp.h |   2 +-
+ 4 files changed, 130 insertions(+), 127 deletions(-)
+
+2011-05-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated user manual with new command-line arguments
+ src/doc/User_doc/Blixem_manual.odt | Bin 1095685 -> 1095666 bytes
+ src/doc/User_doc/Blixem_manual.pdf | Bin 849220 -> 849234 bytes
+ 2 files changed, 0 insertions(+), 0 deletions(-)
+
+2011-05-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated usage text in user pages
+ src/doc/User_doc/blixem_usage.txt | 76 ++++++++++++++++++++-------------------
+ 1 file changed, 40 insertions(+), 36 deletions(-)
+
+2011-05-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Incremented version to 4.1.18
+ src/version.m4 | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-05-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with the --invert-sort option
+ src/blixemApp/blxwindow.c | 15 +++++++--------
+ 1 file changed, 7 insertions(+), 8 deletions(-)
+
+2011-05-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with the hide-big-picture option
+ src/blixemApp/blxmain.c   |  2 +-
+ src/blixemApp/blxwindow.c | 10 ++++++++--
+ 2 files changed, 9 insertions(+), 3 deletions(-)
+
+2011-05-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ dotter-first-match now finds the correct sequence to dotter
+ src/blixemApp/blxview.c    | 27 ++++++++++++++++++---------
+ src/blixemApp/detailview.c | 25 +++++++++++++++----------
+ src/blixemApp/detailview.h |  8 ++++----
+ 3 files changed, 37 insertions(+), 23 deletions(-)
+
+2011-05-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixes to do with --dotter-first-match option
+ src/blixemApp/blxdotter.c | 2 +-
+ src/blixemApp/blxview.c   | 6 ++++--
+ 2 files changed, 5 insertions(+), 3 deletions(-)
+
+2011-05-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with the dotter-first-match argument
+ src/blixemApp/blxmain.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-05-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed bugs with command-line arguments, and implemented --map-coords
+ src/blixemApp/blxmain.c | 42 +++++++++++++++++++++++++++++++-----------
+ 1 file changed, 31 insertions(+), 11 deletions(-)
+
+2011-05-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Changed command-line arguments and added new --map-coords argument
+ src/blixemApp/blixem_.h |   3 +
+ src/blixemApp/blxmain.c | 202 ++++++++++++++++++++----------------------------
+ 2 files changed, 85 insertions(+), 120 deletions(-)
+
+2011-04-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Incremented version to 4.1.17
+ src/version.m4 | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-04-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug where start coord was not being bounds checked
+ src/blixemApp/detailview.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+2011-04-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Incremented version to 4.1.16
+ src/version.m4 | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-04-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a regression where the initial display range was being overwritten
+ src/blixemApp/detailview.c | 7 +++----
+ 1 file changed, 3 insertions(+), 4 deletions(-)
+
+2011-04-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a regression where Blixem was not centering on the start coord
+ src/blixemApp/detailview.c | 25 +++++++++++++++++--------
+ 1 file changed, 17 insertions(+), 8 deletions(-)
+
+2011-04-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a regression where Blixem was not using the start coord correctly
+ src/blixemApp/detailview.c | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+2011-04-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Incremented version to 4.1.15
+ src/version.m4 | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-04-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug where there are gaps in the dotter crosshair when the labels are long
+ src/dotterApp/dotplot.c          | 12 ++++--------
+ src/dotterApp/seqtoolsExonView.c |  4 ++--
+ 2 files changed, 6 insertions(+), 10 deletions(-)
+
+2011-04-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated user manuals
+ src/doc/User_doc/Blixem_manual.odt | Bin 1065015 -> 1095685 bytes
+ src/doc/User_doc/Blixem_manual.pdf | Bin 822416 -> 849220 bytes
+ src/doc/User_doc/Dotter_manual.odt | Bin 375921 -> 434335 bytes
+ src/doc/User_doc/Dotter_manual.pdf | Bin 328787 -> 378981 bytes
+ 4 files changed, 0 insertions(+), 0 deletions(-)
+
+2011-04-04  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated what's-new help pages
+ src/doc/User_doc/blixem_news.html | 10 ++++++++++
+ src/doc/User_doc/dotter_news.html |  7 +++++++
+ 2 files changed, 17 insertions(+)
+
+2011-04-04  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a regression with calculating the display coords for exons
+ src/blixemApp/blxview.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+2011-04-01  Gemma Barson  <gb10 at sanger.ac.uk>
+ Improvements to scrolling the big picture when the highlight box reaches the edge of the range
+ src/blixemApp/bigpicture.c | 28 ++++++++++++++++++++++------
+ 1 file changed, 22 insertions(+), 6 deletions(-)
+
+2011-03-31  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated test plan
+ src/doc/Design_notes/testing.ods | Bin 30658 -> 35579 bytes
+ 1 file changed, 0 insertions(+), 0 deletions(-)
+
+2011-03-31  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with sorting when no columns are specified to sort by
+ src/blixemApp/blxwindow.c      |  3 ++-
+ src/blixemApp/detailviewtree.c | 19 +++++++++++++++----
+ 2 files changed, 17 insertions(+), 5 deletions(-)
+
+2011-03-31  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with find-again not working correctly after a group operation
+ src/blixemApp/blxwindow.c | 63 ++++++++++++++++++++++++++++++++++++-----------
+ 1 file changed, 48 insertions(+), 15 deletions(-)
+
+2011-03-31  Gemma Barson  <gb10 at sanger.ac.uk>
+ Removed a 'feature' where typing would bring up a text box on the detail view
+ src/blixemApp/detailviewtree.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+2011-03-31  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug where the highlight box was getting out of position when zooming
+ src/blixemApp/bigpicture.c | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+2011-03-31  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with filtering rows
+ src/blixemApp/detailview.c | 35 +++++++++++++++++------------------
+ 1 file changed, 17 insertions(+), 18 deletions(-)
+
+2011-03-30  Gemma Barson  <gb10 at sanger.ac.uk>
+ Improvements to Blixem menu and toolbar
+ src/blixemApp/blxwindow.c      | 223 +++++++++++++++++++++++++++++++--------
+ src/blixemApp/detailview.c     | 230 +++++++----------------------------------
+ src/blixemApp/detailview.h     |   1 +
+ src/blixemApp/detailviewtree.c |  73 +++++++------
+ src/seqtoolsUtils/utilities.c  |  66 ------------
+ src/seqtoolsUtils/utilities.h  |   2 -
+ 6 files changed, 257 insertions(+), 338 deletions(-)
+
+2011-03-30  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added accelerators to dotter context menu
+ src/dotterApp/dotter.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-03-30  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added icon to delete-all-groups button
+ src/blixemApp/blxwindow.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+2011-03-30  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added the option to hide all sequences that are not in a group
+ src/blixemApp/blixem_.h        |   1 +
+ src/blixemApp/blxwindow.c      | 135 +++++++++++++++++++++++++++--------------
+ src/blixemApp/detailviewtree.c |  18 +++++-
+ 3 files changed, 107 insertions(+), 47 deletions(-)
+
+2011-04-04  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'shortread'
+2011-03-30  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with bad error propagation for find-by-list
+ src/blixemApp/blxwindow.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+2011-03-30  Gemma Barson  <gb10 at sanger.ac.uk>
+ Filtered out non-searchable columns from the search-by-column combo box
+ src/blixemApp/blxwindow.c  | 25 ++++++++++++++++---------
+ src/blixemApp/detailview.c | 26 ++++++++++++++------------
+ src/blixemApp/detailview.h |  1 +
+ 3 files changed, 31 insertions(+), 21 deletions(-)
+
+2011-03-30  Gemma Barson  <gb10 at sanger.ac.uk>
+ WIP: Implemented search for different columns, not just the Name column
+ src/blixemApp/blxwindow.c  | 393 ++++++++++++++++++++++++++++++++-------------
+ src/blixemApp/blxwindow.h  |   2 +-
+ src/blixemApp/detailview.c |  15 ++
+ src/blixemApp/detailview.h |   1 +
+ src/seqtoolsUtils/blxmsp.c |  15 +-
+ src/seqtoolsUtils/blxmsp.h |   9 +-
+ 6 files changed, 313 insertions(+), 122 deletions(-)
+
+2011-03-30  Gemma Barson  <gb10 at sanger.ac.uk>
+ WIP: added search-by-column option to the Find and Group dialogs
+ src/blixemApp/blxwindow.c | 90 +++++++++++++++++++++++++++++++----------------
+ 1 file changed, 60 insertions(+), 30 deletions(-)
+
+2011-03-29  Gemma Barson  <gb10 at sanger.ac.uk>
+ Moved 'invert sort order' option from the Settings dialog to the Sort dialog
+ src/blixemApp/blxwindow.c | 37 ++++++++++++++++++++++++-------------
+ 1 file changed, 24 insertions(+), 13 deletions(-)
+
+2011-03-29  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with sorting short-reads when 'squash matches' is enabled
+ src/blixemApp/detailviewtree.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+2011-03-29  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added the ability to sort by multiple columns
+ src/blixemApp/blixem_.h        |   4 +-
+ src/blixemApp/blxmain.c        |   2 +-
+ src/blixemApp/blxwindow.c      | 263 +++++++++++++++++++++++++++++++++++++++++
+ src/blixemApp/blxwindow.h      |   1 +
+ src/blixemApp/detailview.c     | 142 +++++++---------------
+ src/blixemApp/detailviewtree.c |  61 +++++++---
+ 6 files changed, 353 insertions(+), 120 deletions(-)
+
+2011-03-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Made sort box have a tear-off drop-down menu
+ src/blixemApp/detailview.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+2011-03-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Small change to separate handle-box creation from toolbar creation
+ src/seqtoolsUtils/utilities.c | 22 ++++++++++++++++------
+ src/seqtoolsUtils/utilities.h |  1 +
+ 2 files changed, 17 insertions(+), 6 deletions(-)
+
+2011-03-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug where the dotter crosshair was not being redrawn correctly after printing
+ src/dotterApp/dotplot.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+2011-03-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug where the alignment tool was not being cleared before redrawing
+ src/dotterApp/alignmenttool.c | 21 ++++++++++++---------
+ 1 file changed, 12 insertions(+), 9 deletions(-)
+
+2011-03-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Improvements to Dotter menus
+ src/dotterApp/dotter.c | 28 +++++++++++++++-------------
+ 1 file changed, 15 insertions(+), 13 deletions(-)
+
+2011-03-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Shortened Dotter's context menu
+ src/dotterApp/dotter.c | 97 ++++++++++++++++++--------------------------------
+ 1 file changed, 34 insertions(+), 63 deletions(-)
+
+2011-03-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Changed sorting functions to allow for sorting by multiple columns
+ src/blixemApp/blxwindow.c      |   1 -
+ src/blixemApp/detailview.c     |  26 ++++-
+ src/blixemApp/detailview.h     |   2 +
+ src/blixemApp/detailviewtree.c | 210 +++++++++++++++++++++++------------------
+ src/blixemApp/detailviewtree.h |   1 -
+ 5 files changed, 144 insertions(+), 96 deletions(-)
+
+2011-03-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Removed an unnecessary call to refilter the tree rows
+ src/blixemApp/detailview.c | 4 ----
+ 1 file changed, 4 deletions(-)
+
+2011-03-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Performance improvements to row selections
+ src/blixemApp/blxwindow.c | 12 +++++++++---
+ 1 file changed, 9 insertions(+), 3 deletions(-)
+
+2011-03-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug where short reads from different strands were being counted as duplicates
+ src/seqtoolsUtils/blxmsp.c | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+2011-03-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed another memory leak
+ src/dotterApp/dotterMain.c | 27 ++++++++++++++++++---------
+ 1 file changed, 18 insertions(+), 9 deletions(-)
+
+2011-03-28  Gemma Barson  <gb10 at sanger.ac.uk>
+ Don't draw duplicate, overlapping MSPs
+ src/blixemApp/sequencecellrenderer.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+2011-03-25  Gemma Barson  <gb10 at sanger.ac.uk>
+ More memory leak fixes
+ src/blixemApp/detailviewtree.c | 11 +++++++----
+ src/dotterApp/dotplot.c        |  3 +++
+ src/dotterApp/greyramptool.c   |  2 ++
+ src/seqtoolsUtils/utilities.c  |  6 +++++-
+ 4 files changed, 17 insertions(+), 5 deletions(-)
+
+2011-03-25  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed more memory leaks
+ src/blixemApp/coverageview.c         | 7 +++++--
+ src/blixemApp/sequencecellrenderer.c | 3 +++
+ src/dotterApp/greyramptool.c         | 3 +++
+ src/seqtoolsUtils/utilities.c        | 3 +++
+ 4 files changed, 14 insertions(+), 2 deletions(-)
+
+2011-03-25  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed some memory leaks
+ src/blixemApp/bigpicture.c           | 10 +++++++---
+ src/blixemApp/bigpicturegrid.c       |  5 +++--
+ src/blixemApp/blxdotter.c            | 11 ++++++-----
+ src/blixemApp/blxmain.c              | 13 ++++++++-----
+ src/blixemApp/coverageview.c         |  5 +++--
+ src/blixemApp/detailview.c           | 18 ++++++++++++------
+ src/blixemApp/detailviewtree.c       |  9 ++++++---
+ src/blixemApp/exonview.c             |  5 ++++-
+ src/blixemApp/sequencecellrenderer.c | 13 +++++++++++--
+ src/dotterApp/alignmenttool.c        | 10 ++++++++++
+ src/dotterApp/dotplot.c              | 36 +++++++++++++++++++++++++++++++-----
+ src/dotterApp/greyramptool.c         |  8 +++++++-
+ src/dotterApp/seqtoolsExonView.c     | 11 ++++++++---
+ src/seqtoolsUtils/blxmsp.c           |  9 +++------
+ src/seqtoolsUtils/blxparser.c        |  3 +--
+ src/seqtoolsUtils/utilities.c        |  4 ++++
+ 16 files changed, 124 insertions(+), 46 deletions(-)
+
+2011-03-25  Gemma Barson  <gb10 at sanger.ac.uk>
+ Performance improvements to scrolling
+ src/blixemApp/bigpicture.c    | 20 +++++++++-----------
+ src/blixemApp/blxwindow.c     | 10 ++++------
+ src/blixemApp/exonview.c      |  6 +-----
+ src/seqtoolsUtils/utilities.c |  7 +++++++
+ src/seqtoolsUtils/utilities.h |  1 +
+ 5 files changed, 22 insertions(+), 22 deletions(-)
+
+2011-03-24  Gemma Barson  <gb10 at sanger.ac.uk>
+ The big picture range now scrolls independently of the detail-view range
+ src/blixemApp/bigpicture.c | 127 +++++++++++++++++++++++++++++++--------------
+ src/blixemApp/bigpicture.h |   2 +-
+ src/blixemApp/detailview.c |   4 +-
+ 3 files changed, 90 insertions(+), 43 deletions(-)
+
+2011-04-04  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'shortread'
+2011-03-24  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a regression where the highlight box was not being shown when printing
+ src/blixemApp/bigpicture.c     | 15 +++++++++++++++
+ src/blixemApp/bigpicture.h     |  1 +
+ src/blixemApp/bigpicturegrid.c | 18 ++++++++++++++++++
+ src/blixemApp/bigpicturegrid.h |  2 ++
+ src/blixemApp/blxwindow.c      |  7 ++++++-
+ src/blixemApp/coverageview.c   | 18 ++++++++++++++++++
+ src/blixemApp/coverageview.h   |  2 ++
+ src/blixemApp/exonview.c       | 18 ++++++++++++++++++
+ src/blixemApp/exonview.h       |  2 ++
+ src/dotterApp/alignmenttool.c  |  2 +-
+ src/dotterApp/dotter.c         |  4 ++--
+ src/seqtoolsUtils/utilities.c  | 41 +++++++++++++++++++++++++++++++++--------
+ src/seqtoolsUtils/utilities.h  |  2 +-
+ 13 files changed, 119 insertions(+), 13 deletions(-)
+
+2011-03-24  Gemma Barson  <gb10 at sanger.ac.uk>
+ Changed the highlight box to be truely transparent
+ src/blixemApp/bigpicture.c     | 25 +++++++++----------------
+ src/blixemApp/bigpicture.h     |  5 +----
+ src/blixemApp/bigpicturegrid.c | 29 +++++++++--------------------
+ src/blixemApp/bigpicturegrid.h |  2 --
+ src/blixemApp/blxwindow.c      |  4 ++--
+ src/blixemApp/coverageview.c   | 38 +++++++++++---------------------------
+ src/blixemApp/coverageview.h   |  2 --
+ src/blixemApp/exonview.c       | 33 ++++++++++-----------------------
+ src/blixemApp/exonview.h       |  2 --
+ src/seqtoolsUtils/utilities.c  | 18 +++++++-----------
+ src/seqtoolsUtils/utilities.h  |  2 +-
+ 11 files changed, 50 insertions(+), 110 deletions(-)
+
+2011-03-24  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added the ability to adjust the coverage plot scale
+ src/blixemApp/blxwindow.c    | 30 ++++++++++++++++++-
+ src/blixemApp/coverageview.c | 71 +++++++++++++++++++++++++++++---------------
+ src/blixemApp/coverageview.h |  5 ++++
+ 3 files changed, 81 insertions(+), 25 deletions(-)
+
+2011-03-24  Gemma Barson  <gb10 at sanger.ac.uk>
+ Coverage view labels are now nice round values
+ src/blixemApp/blxwindow.c    |  6 ++--
+ src/blixemApp/coverageview.c | 82 ++++++++++++++++++++++++++++++++------------
+ 2 files changed, 63 insertions(+), 25 deletions(-)
+
+2011-03-24  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added middle-click scrolling to the coverage view
+ src/blixemApp/bigpicture.c   |  4 ++
+ src/blixemApp/coverageview.c | 91 +++++++++++++++++++++++++++++++++++++++++---
+ src/blixemApp/coverageview.h |  3 +-
+ 3 files changed, 92 insertions(+), 6 deletions(-)
+
+2011-03-23  Gemma Barson  <gb10 at sanger.ac.uk>
+ Made default coverage view height bigger
+ src/blixemApp/coverageview.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-03-23  Gemma Barson  <gb10 at sanger.ac.uk>
+ Made source, score and ID columns show more sensible values when 'squash matches' is enabled
+ src/blixemApp/detailviewtree.c | 82 ++++++++++++++++++++++++++++++------------
+ 1 file changed, 60 insertions(+), 22 deletions(-)
+
+2011-03-23  Gemma Barson  <gb10 at sanger.ac.uk>
+ Short reads now have a generic name, and they have a row count when 'squash matches' is enabled
+ src/blixemApp/detailviewtree.c | 16 +++++++++++++-
+ src/seqtoolsUtils/blxmsp.c     | 48 ++++++++++++++++++++++++++----------------
+ src/seqtoolsUtils/blxmsp.h     |  1 -
+ 3 files changed, 45 insertions(+), 20 deletions(-)
+
+2011-04-04  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'shortread'
+2011-03-23  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added ability to hide coverage view, and hide it by default
+ src/blixemApp/bigpicture.c   | 6 ++++++
+ src/blixemApp/bigpicture.h   | 1 +
+ src/blixemApp/blxwindow.c    | 8 ++++++++
+ src/blixemApp/coverageview.c | 1 -
+ 4 files changed, 15 insertions(+), 1 deletion(-)
+
+2011-03-23  Gemma Barson  <gb10 at sanger.ac.uk>
+ Improvements to coverage view height calculation
+ src/blixemApp/bigpicturegrid.c |  7 -------
+ src/blixemApp/blxwindow.c      |  5 +++--
+ src/blixemApp/coverageview.c   | 41 +++++++++++++++++++++++++----------------
+ src/blixemApp/coverageview.h   |  4 +++-
+ 4 files changed, 31 insertions(+), 26 deletions(-)
+
+2011-03-23  Gemma Barson  <gb10 at sanger.ac.uk>
+ Right-align grid labels
+ src/blixemApp/bigpicture.c | 16 +++++++++-------
+ 1 file changed, 9 insertions(+), 7 deletions(-)
+
+2011-03-23  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added horizontal grid lines to coverage plot
+ src/blixemApp/bigpicture.c     |  7 ++++---
+ src/blixemApp/bigpicture.h     |  3 ++-
+ src/blixemApp/bigpicturegrid.c |  2 +-
+ src/blixemApp/coverageview.c   | 15 +++++++++++----
+ 4 files changed, 18 insertions(+), 9 deletions(-)
+
+2011-03-23  Gemma Barson  <gb10 at sanger.ac.uk>
+ Made horizontal grid-line drawing function more generic
+ src/blixemApp/bigpicture.c     | 97 ++++++++++++++++++++++++++++++++++++------
+ src/blixemApp/bigpicture.h     |  7 +++
+ src/blixemApp/bigpicturegrid.c | 75 +-------------------------------
+ src/blixemApp/bigpicturegrid.h |  1 -
+ 4 files changed, 93 insertions(+), 87 deletions(-)
+
+2011-03-23  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added vertical grid lines and highlight box to coverage view
+ src/blixemApp/bigpicture.c     |  98 ++++++++++++++++++++++++++++++-
+ src/blixemApp/bigpicture.h     |   7 +++
+ src/blixemApp/bigpicturegrid.c | 128 ++++++++++-------------------------------
+ src/blixemApp/bigpicturegrid.h |   2 +-
+ src/blixemApp/coverageview.c   |  52 ++++++++++++++---
+ src/blixemApp/coverageview.h   |   3 +
+ 6 files changed, 181 insertions(+), 109 deletions(-)
+
+2011-03-23  Gemma Barson  <gb10 at sanger.ac.uk>
+ Coverage plot is now a bar chart rather than a line graph
+ src/blixemApp/coverageview.c  | 52 ++++++++++++++++++++++++++++++++-----------
+ src/seqtoolsUtils/utilities.c | 20 ++++++++---------
+ src/seqtoolsUtils/utilities.h |  2 +-
+ 3 files changed, 49 insertions(+), 25 deletions(-)
+
+2011-03-22  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added custom colour for coverage plot
+ src/blixemApp/blixem_.h       | 1 +
+ src/blixemApp/blxwindow.c     | 1 +
+ src/blixemApp/coverageview.c  | 3 +++
+ src/seqtoolsUtils/utilities.h | 1 +
+ 4 files changed, 6 insertions(+)
+
+2011-03-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added depth-coverage view
+ src/blixemApp/Makefile.am    |   2 +-
+ src/blixemApp/bigpicture.c   |   6 +
+ src/blixemApp/bigpicture.h   |   2 +
+ src/blixemApp/blxwindow.c    |  10 ++
+ src/blixemApp/coverageview.c | 324 +++++++++++++++++++++++++++++++++++++++++++
+ src/blixemApp/coverageview.h |  52 +++++++
+ 6 files changed, 395 insertions(+), 1 deletion(-)
+
+2011-04-04  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'shortread'
+2011-03-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Idential short-read alignments are now treated as the same sequence
+ src/seqtoolsUtils/blxGff3Parser.c |  12 ++--
+ src/seqtoolsUtils/blxmsp.c        | 129 +++++++++++++++++++++++++++++---------
+ src/seqtoolsUtils/blxmsp.h        |   3 +-
+ src/seqtoolsUtils/utilities.c     |   6 ++
+ src/seqtoolsUtils/utilities.h     |   1 +
+ 5 files changed, 113 insertions(+), 38 deletions(-)
+
+2011-03-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a potential crash if sequence name is null
+ src/blixemApp/detailviewtree.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+2011-03-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a potential crash with indexing the depth array
+ src/blixemApp/blxwindow.c | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+2011-03-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with calculating the max depth
+ src/blixemApp/blxwindow.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+2011-03-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added ability to calculate coverage depth
+ src/blixemApp/blixem_.h   |  4 +++
+ src/blixemApp/blxview.c   |  2 +-
+ src/blixemApp/blxwindow.c | 71 +++++++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 76 insertions(+), 1 deletion(-)
+
+2011-04-04  Gemma Barson  <gb10 at sanger.ac.uk>
+ Merge branch 'shortread'
+2011-03-11  Gemma Barson  <gb10 at sanger.ac.uk>
+ Simplified row-filtering code
+ src/blixemApp/detailview.c | 172 +++++++++++++++++++++++----------------------
+ 1 file changed, 89 insertions(+), 83 deletions(-)
+
+2011-03-11  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with filtering rows after changing the sort order
+ src/blixemApp/detailviewtree.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+2011-03-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with filtering rows when showing unaligned sequence or polyA tails
+ src/blixemApp/blxview.c    |  7 +++++--
+ src/blixemApp/blxwindow.c  | 22 ++++++++++++----------
+ src/blixemApp/detailview.c | 25 +++++++++++++++++++------
+ src/blixemApp/detailview.h |  2 +-
+ src/dotterApp/dotterMain.c |  7 -------
+ 5 files changed, 37 insertions(+), 26 deletions(-)
+
+2011-03-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with filtering after enabling squash matches
+ src/blixemApp/detailviewtree.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+2011-03-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with filtering trees when zooming
+ src/blixemApp/detailview.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+2011-03-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with filtering detail-view rows
+ src/blixemApp/detailview.c | 34 +++++++++++++++++++++++++++++-----
+ 1 file changed, 29 insertions(+), 5 deletions(-)
+
+2011-03-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug where short reads were not shown in the big picture
+ src/blixemApp/bigpicturegrid.c | 2 +-
+ src/seqtoolsUtils/blxmsp.c     | 6 ++++++
+ src/seqtoolsUtils/blxmsp.h     | 1 +
+ 3 files changed, 8 insertions(+), 1 deletion(-)
+
+2011-03-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added debug
+ src/blixemApp/detailview.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+2011-03-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added debug
+ src/blixemApp/detailview.c | 17 +++++++++++++++++
+ 1 file changed, 17 insertions(+)
+
+2011-03-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed compile warnings
+ src/blixemApp/bigpicturegrid.c       | 1 -
+ src/blixemApp/blxdotter.c            | 1 -
+ src/blixemApp/blxview.c              | 6 ++++++
+ src/blixemApp/blxwindow.c            | 1 -
+ src/blixemApp/detailview.c           | 2 +-
+ src/blixemApp/detailviewtree.c       | 3 ++-
+ src/blixemApp/exonview.c             | 2 --
+ src/blixemApp/sequencecellrenderer.c | 1 +
+ 8 files changed, 10 insertions(+), 7 deletions(-)
+
+2011-03-08  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added comments
+ src/seqtoolsUtils/blxmsp.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+2011-03-08  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with calculating the max len of MSPs
+ src/blixemApp/blxview.c    | 11 ++++++++---
+ src/blixemApp/detailview.c |  4 +++-
+ src/seqtoolsUtils/blxmsp.h |  5 ++++-
+ 3 files changed, 15 insertions(+), 5 deletions(-)
+
+2011-03-08  Gemma Barson  <gb10 at sanger.ac.uk>
+ Removed an obsolete comment
+ src/blixemApp/blxmain.c | 6 ------
+ 1 file changed, 6 deletions(-)
+
+2011-03-08  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug where show-unaligned-sequence was not updating the display
+ src/blixemApp/blxwindow.c  | 7 ++++++-
+ src/blixemApp/detailview.c | 5 +++--
+ 2 files changed, 9 insertions(+), 3 deletions(-)
+
+2011-03-07  Gemma Barson  <gb10 at sanger.ac.uk>
+ WIP: performance improvements to filtering tree rows
+ src/blixemApp/blxview.c    |  6 +++-
+ src/blixemApp/detailview.c | 83 ++++++++++++++++++++++++++++++++++++++--------
+ src/seqtoolsUtils/blxmsp.c | 18 +++++++++-
+ 3 files changed, 91 insertions(+), 16 deletions(-)
+
+2011-03-07  Gemma Barson  <gb10 at sanger.ac.uk>
+ WIP: fixed a bug with filtering detail-view rows
+ src/blixemApp/blxview.c    |  7 +++++++
+ src/blixemApp/blxwindow.c  |  1 -
+ src/dotterApp/dotterMain.c |  7 +++++++
+ src/seqtoolsUtils/blxmsp.c | 23 +++++++++++++++++++++++
+ src/seqtoolsUtils/blxmsp.h |  1 +
+ 5 files changed, 38 insertions(+), 1 deletion(-)
+
+2011-03-07  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with drawing exon boundaries
+ src/blixemApp/sequencecellrenderer.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+2011-03-07  Gemma Barson  <gb10 at sanger.ac.uk>
+ WIP: replaced MSP lists with arrays
+ src/blixemApp/blixem_.h           |  4 +-
+ src/blixemApp/blxmain.c           |  4 +-
+ src/blixemApp/blxview.c           | 10 ++---
+ src/blixemApp/blxwindow.c         |  9 ++--
+ src/blixemApp/blxwindow.h         |  2 +-
+ src/blixemApp/detailview.c        | 86 +++++++++++++++++++++------------------
+ src/dotterApp/dotterMain.c        |  8 ++--
+ src/seqtoolsUtils/blxGff3Parser.c |  4 +-
+ src/seqtoolsUtils/blxGff3Parser.h |  2 +-
+ src/seqtoolsUtils/blxmsp.c        | 56 +++++++++++++++----------
+ src/seqtoolsUtils/blxmsp.h        | 11 +++--
+ src/seqtoolsUtils/blxparser.c     | 34 ++++++++--------
+ src/seqtoolsUtils/blxparser.h     |  2 +-
+ 13 files changed, 128 insertions(+), 104 deletions(-)
+
+2011-03-07  Gemma Barson  <gb10 at sanger.ac.uk>
+ Performance improvements to filtering trees
+ src/blixemApp/blixem_.h        |   3 +-
+ src/blixemApp/blxview.c        |  15 +++-
+ src/blixemApp/blxwindow.c      |  21 ++---
+ src/blixemApp/detailview.c     | 155 +++++++++++++++++++++++++++++++-----
+ src/blixemApp/detailview.h     |   1 +
+ src/blixemApp/detailviewtree.c | 174 ++++++++++++++++++++++-------------------
+ src/blixemApp/detailviewtree.h |   9 +--
+ src/seqtoolsUtils/blxmsp.c     |  25 +++++-
+ src/seqtoolsUtils/blxmsp.h     |  21 ++++-
+ 9 files changed, 302 insertions(+), 122 deletions(-)
+
+2011-03-02  Gemma Barson  <gb10 at sanger.ac.uk>
+ Small performance improvement
+ src/blixemApp/bigpicturegrid.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+2011-03-02  Gemma Barson  <gb10 at sanger.ac.uk>
+ WIP: removed some unused code
+ src/seqtoolsUtils/blxmsp.c | 41 -----------------------------------------
+ 1 file changed, 41 deletions(-)
+
+2011-03-02  Gemma Barson  <gb10 at sanger.ac.uk>
+ WIP: code refactoring
+ src/blixemApp/detailview.c | 20 ++++++++++--
+ src/seqtoolsUtils/blxmsp.c | 80 +++++++++++++++++++++++++++++++++++++---------
+ 2 files changed, 82 insertions(+), 18 deletions(-)
+
+2011-03-01  Gemma Barson  <gb10 at sanger.ac.uk>
+ Small performance improvements to big picture
+ src/blixemApp/bigpicture.c     | 37 +++++++++++++++++++++-------
+ src/blixemApp/bigpicture.h     |  1 +
+ src/blixemApp/bigpicturegrid.c | 28 +++++++++++++++++----
+ src/blixemApp/detailview.c     | 55 +++++++++++++++++++++++++++---------------
+ src/blixemApp/exonview.c       | 27 ++++++++++++++++++---
+ 5 files changed, 111 insertions(+), 37 deletions(-)
+
+2011-02-23  Gemma Barson  <gb10 at sanger.ac.uk>
+ Performance: use cached MSP display range wherever possible
+ src/blixemApp/bigpicturegrid.c       |  14 +----
+ src/blixemApp/blixem_.h              |   4 +-
+ src/blixemApp/blxdotter.c            |   9 +--
+ src/blixemApp/blxview.c              | 110 ++++++++++++++++++-----------------
+ src/blixemApp/detailview.c           |   8 +--
+ src/blixemApp/detailviewtree.c       |   2 +-
+ src/blixemApp/exonview.c             |  19 ++----
+ src/blixemApp/sequencecellrenderer.c |  15 ++---
+ 8 files changed, 79 insertions(+), 102 deletions(-)
+
+2011-02-23  Gemma Barson  <gb10 at sanger.ac.uk>
+ Performance improvements: cache the display coords and the full extent coords of MSPs
+ src/blixemApp/blixem_.h              | 29 +++++-------
+ src/blixemApp/blxview.c              | 87 +++++++++++++++++++++++++++---------
+ src/blixemApp/blxwindow.c            | 73 +++++++++++++++++++++++++-----
+ src/blixemApp/blxwindow.h            |  2 +-
+ src/blixemApp/detailview.c           | 19 +++++---
+ src/blixemApp/detailview.h           |  2 +-
+ src/blixemApp/detailviewtree.c       | 14 +-----
+ src/blixemApp/sequencecellrenderer.c | 12 ++---
+ src/seqtoolsUtils/blxmsp.c           |  8 +++-
+ src/seqtoolsUtils/blxmsp.h           |  8 ++++
+ 10 files changed, 172 insertions(+), 82 deletions(-)
+
+2011-02-22  Gemma Barson  <gb10 at sanger.ac.uk>
+ Performance improvements to tree row filtering
+ src/blixemApp/blxwindow.c            | 14 ++++++--
+ src/blixemApp/blxwindow.h            |  1 +
+ src/blixemApp/detailviewtree.c       | 64 ++++++++++++++++--------------------
+ src/blixemApp/sequencecellrenderer.c |  1 +
+ 4 files changed, 42 insertions(+), 38 deletions(-)
+
+2011-02-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added basic functionality to show read pairs on the same strand
+ src/blixemApp/detailviewtree.c |  2 +-
+ src/seqtoolsUtils/blxmsp.c     | 21 +++++++++++++++++----
+ 2 files changed, 18 insertions(+), 5 deletions(-)
+
+2011-02-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added short-read data type
+ src/blixemApp/detailview.c           |  5 +++--
+ src/blixemApp/detailviewtree.c       |  8 ++++----
+ src/blixemApp/sequencecellrenderer.c |  2 +-
+ src/seqtoolsUtils/blxGff3Parser.c    |  8 +++++---
+ src/seqtoolsUtils/blxmsp.c           | 40 ++++++++++++++++++++++++++++--------
+ src/seqtoolsUtils/blxmsp.h           |  6 +++++-
+ 6 files changed, 50 insertions(+), 19 deletions(-)
+
+2011-04-04  Gemma Barson  <gb10 at sanger.ac.uk>
+ Incremented version to 4.1.14
+ src/version.m4 | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-03-25  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added a link to the SeqTools website to the README file
+ src/README | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-03-25  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added a pointer from the NEWS file to the individual programs' news files.
+ src/NEWS | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+2011-03-25  Gemma Barson  <gb10 at sanger.ac.uk>
+ Made usage text files plain text rather than html
+ src/blixemApp/blxmain.c                            |  5 +++
+ src/doc/User_doc/Makefile.am                       |  2 +-
+ src/doc/User_doc/blixem_quick_start.html           |  2 +-
+ .../{blixem_usage.html => blixem_usage.txt}        | 46 ++++++++------------
+ src/doc/User_doc/dotter_quick_start.html           |  2 +-
+ src/doc/User_doc/dotter_usage.html                 | 49 ----------------------
+ src/doc/User_doc/dotter_usage.txt                  | 37 ++++++++++++++++
+ src/doc/User_doc/index.html                        |  4 +-
+ src/dotterApp/dotterMain.c                         |  4 ++
+ 9 files changed, 68 insertions(+), 83 deletions(-)
+
+2011-03-25  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated release histories
+ src/doc/User_doc/blixem_news.html | 37 +++++++++++++++++++++++++++++++++++--
+ src/doc/User_doc/dotter_news.html | 30 +++++++++++++++++++++++++++++-
+ 2 files changed, 64 insertions(+), 3 deletions(-)
+
+2011-03-25  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated user manuals
+ src/doc/User_doc/Blixem_manual.odt       | Bin 1074086 -> 1065015 bytes
+ src/doc/User_doc/Blixem_manual.pdf       | Bin 826653 -> 822416 bytes
+ src/doc/User_doc/Dotter_manual.odt       | Bin 279132 -> 375921 bytes
+ src/doc/User_doc/Dotter_manual.pdf       | Bin 216955 -> 328787 bytes
+ src/doc/User_doc/dotter_quick_start.html |   2 ++
+ 5 files changed, 2 insertions(+)
+
+2011-03-22  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed an off-by-one bug in the alignment tool when the display starts at a negative coord
+ src/dotterApp/dotter.c | 56 ++++++++++++++++++++++++++++++--------------------
+ 1 file changed, 34 insertions(+), 22 deletions(-)
+
+2011-03-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a couple of typos in the documentation
+ src/doc/User_doc/blixem_quick_start.html | 4 ++--
+ src/doc/User_doc/dotter_quick_start.html | 2 +-
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+2011-03-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added some missing help files to the installation
+ src/doc/User_doc/Makefile.am | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+2011-03-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug in the runconfig script when prefix is not supplied
+ src/runconfig.sh | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+2011-03-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added separate whats-new pages to the help
+ src/doc/User_doc/blixem_news.html        | 25 +++++++++++++++++++++++++
+ src/doc/User_doc/blixem_quick_start.html | 22 ++--------------------
+ src/doc/User_doc/dotter_news.html        | 21 +++++++++++++++++++++
+ src/doc/User_doc/dotter_quick_start.html | 17 ++---------------
+ src/doc/User_doc/index.html              |  2 ++
+ 5 files changed, 52 insertions(+), 35 deletions(-)
+
+2011-03-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Small change to documentation
+ src/doc/Design_notes/specs.html | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+2011-03-01  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added documentation about printing
+ src/doc/Design_notes/modules/seqtoolsUtils.html | 34 +++++++++++++++++++++----
+ 1 file changed, 29 insertions(+), 5 deletions(-)
+
+2011-03-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with the build system not linking libraries correctly
+ src/Makefile.am               | 11 ++++++++---
+ src/blixemApp/Makefile.am     |  2 +-
+ src/dotterApp/Makefile.am     |  4 ++--
+ src/seqtoolsUtils/Makefile.am |  1 -
+ 4 files changed, 11 insertions(+), 7 deletions(-)
+
+2011-03-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ The OpenOffice versions of the manuals had mistakenly been removed from the distribution
+ src/doc/User_doc/Makefile.am | 3 +++
+ 1 file changed, 3 insertions(+)
+
+2011-03-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Replaced the Help dialogs in Blixem and Dotter with html help files that open in a browser
+ src/Makefile.am                          |   9 +-
+ src/blixemApp/blixem_.h                  |   2 +-
+ src/blixemApp/blxdotter.c                |  58 -----
+ src/blixemApp/blxwindow.c                | 309 +++------------------------
+ src/blixemApp/detailview.c               |   9 +-
+ src/configure.ac                         |   2 +-
+ src/doc/Makefile.am                      |   4 +
+ src/doc/User_doc/Makefile.am             |   3 +
+ src/doc/User_doc/blixem_quick_start.html | 350 +++++++++++++++++++++++++++++++
+ src/doc/User_doc/blixem_usage.html       | 100 +++++++++
+ src/doc/User_doc/dotter_quick_start.html |  91 ++++++++
+ src/doc/User_doc/dotter_usage.html       |  49 +++++
+ src/doc/User_doc/index.html              |  25 ++-
+ src/doc/User_doc/manuals.html            |  18 ++
+ src/doc/index.html                       |   2 +-
+ src/dotterApp/dotter.c                   | 177 +++-------------
+ src/dotterApp/dotter_.h                  |   2 +-
+ src/seqtoolsUtils/utilities.c            |  63 ++++++
+ src/seqtoolsUtils/utilities.h            |   1 +
+ 19 files changed, 777 insertions(+), 497 deletions(-)
+
+2011-03-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Incremented version to 4.1.13
+ src/version.m4 | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-03-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed an issue where Dotter was overwriting the primary clipboard on startup
+ src/dotterApp/greyramptool.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+2011-03-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Allow user to change the active reading frame by clicking a tree header
+ src/blixemApp/detailviewtree.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+2011-03-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Turned warnings on in default compiler options in runconfig
+ src/runconfig.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-03-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed compiler warnings
+ src/blixemApp/bigpicture.c     |  7 -------
+ src/blixemApp/blxwindow.c      |  2 --
+ src/blixemApp/detailview.c     |  8 --------
+ src/blixemApp/detailviewtree.c | 30 +-----------------------------
+ src/dotterApp/alignmenttool.c  |  1 -
+ src/dotterApp/dotter.c         | 10 ++++++----
+ src/dotterApp/greyramptool.c   |  2 --
+ src/seqtoolsUtils/utilities.c  |  4 ----
+ src/seqtoolsUtils/utilities.h  |  1 +
+ 9 files changed, 8 insertions(+), 57 deletions(-)
+
+2011-03-02  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed path to GTK version in /software
+ src/runconfig.sh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+2011-03-01  Gemma Barson  <gb10 at sanger.ac.uk>
+ Incremented version to 4.1.12
+ src/version.m4 | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-03-01  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added the ability to specify column widths in the config file
+ src/blixemApp/detailview.c | 46 ++++++++++++++++++++++++++++++++++++++++++----
+ 1 file changed, 42 insertions(+), 4 deletions(-)
+
+2011-03-01  Gemma Barson  <gb10 at sanger.ac.uk>
+ Made Source column sortable and reverted its width to 85 pixels
+ src/blixemApp/detailview.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+2011-03-01  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added Source column to mouse-over feedback text
+ src/seqtoolsUtils/blxmsp.c | 62 +++++++++++++++++++++++++++++++++-------------
+ 1 file changed, 45 insertions(+), 17 deletions(-)
+
+2011-03-01  Gemma Barson  <gb10 at sanger.ac.uk>
+ Enable Source column by default and make it narrow
+ src/blixemApp/detailview.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+2011-02-18  Gemma Barson  <gb10 at sanger.ac.uk>
+ Incremented version to 4.1.11
+ src/version.m4 | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-02-18  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with populating optional data for protein variants
+ src/blixemApp/blxview.c   | 31 +++++++++++++++++--------------
+ src/blixemApp/blxwindow.c |  8 ++++++++
+ 2 files changed, 25 insertions(+), 14 deletions(-)
+
+2011-02-18  Gemma Barson  <gb10 at sanger.ac.uk>
+ Incremented version to 4.1.10
+ src/version.m4 | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-02-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with splice sites being shown incorrectly at termini
+ src/blixemApp/detailview.c     |  4 +--
+ src/blixemApp/detailviewtree.c |  8 +++---
+ src/seqtoolsUtils/blxmsp.c     | 65 ++++++++++++++++++++++++------------------
+ src/seqtoolsUtils/blxmsp.h     |  9 +++---
+ 4 files changed, 49 insertions(+), 37 deletions(-)
+
+2011-02-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a crash when dottering multiple sequences
+ src/dotterApp/dotterMain.c | 76 +++++++++++++++++++++++++---------------------
+ 1 file changed, 42 insertions(+), 34 deletions(-)
+
+2011-02-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated to-do list
+ src/doc/Design_notes/todo.html | 1 +
+ 1 file changed, 1 insertion(+)
+
+2011-02-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated test plan
+ src/doc/Design_notes/testing.ods | Bin 31495 -> 30658 bytes
+ 1 file changed, 0 insertions(+), 0 deletions(-)
+
+2011-02-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug where invalid UTR sections were sometimes being created
+ src/seqtoolsUtils/blxmsp.c | 12 +++++++-----
+ 1 file changed, 7 insertions(+), 5 deletions(-)
+
+2011-02-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with UTRs not always showing in the detail-view
+ src/blixemApp/blxview.c    | 120 +++++++++++++++++++++++++++++++++++++++++++++
+ src/blixemApp/blxwindow.c  | 116 -------------------------------------------
+ src/seqtoolsUtils/blxmsp.c |  20 ++++----
+ 3 files changed, 130 insertions(+), 126 deletions(-)
+
+2011-02-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added shortcut tip for Close menu item on greyramp tool
+ src/dotterApp/greyramptool.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-02-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a typo (incorrect keyboard shortcut tip)
+ src/dotterApp/alignmenttool.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-02-15  Gemma Barson  <gb10 at sanger.ac.uk>
+ Removed some unnecessary calls to access object properties
+ src/blixemApp/bigpicture.c | 49 ++++++++++++++++++++-------------------
+ src/blixemApp/detailview.c | 57 ++++++++++++++++++++++++++++++----------------
+ src/blixemApp/exonview.c   |  9 +++++---
+ 3 files changed, 69 insertions(+), 46 deletions(-)
+
+2011-02-15  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with scrolling in Blixem
+ src/blixemApp/blxwindow.c      | 16 ++++------
+ src/blixemApp/detailview.c     | 67 ++++++++++++++++++++++++++++++++++++++++++
+ src/blixemApp/detailview.h     |  3 ++
+ src/blixemApp/detailviewtree.c | 48 ++++--------------------------
+ 4 files changed, 82 insertions(+), 52 deletions(-)
+
+2011-02-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added a note about the key file option to the Blixem user manual
+ src/doc/User_doc/Blixem_manual.odt | Bin 1073400 -> 1074086 bytes
+ src/doc/User_doc/Blixem_manual.pdf | Bin 824490 -> 826653 bytes
+ 2 files changed, 0 insertions(+), 0 deletions(-)
+
+2011-02-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated to-do list
+ src/doc/Design_notes/todo.html | 21 ++++++++++++++-------
+ 1 file changed, 14 insertions(+), 7 deletions(-)
+
+2011-02-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a potential crash when bounds-checking dotter coords
+ src/blixemApp/blxdotter.c | 36 +++++++++++++++++++++++++++---------
+ 1 file changed, 27 insertions(+), 9 deletions(-)
+
+2011-02-11  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated to-do list
+ src/doc/Design_notes/todo.html | 2 --
+ 1 file changed, 2 deletions(-)
+
+2011-02-11  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added options to dotter settings to turn breaklines on/off
+ src/dotterApp/dotplot.c | 25 ++++++++++++++--
+ src/dotterApp/dotter.c  | 79 +++++++++++++++++++++++++++++++++++++++++++++++++
+ src/dotterApp/dotter_.h |  3 ++
+ 3 files changed, 105 insertions(+), 2 deletions(-)
+
+2011-02-11  Gemma Barson  <gb10 at sanger.ac.uk>
+ Only provide space for breakline labels if applicable
+ src/dotterApp/dotplot.c    | 64 +++++++++++++++++++++++++++++-----------------
+ src/dotterApp/dotter.c     | 14 +++++++---
+ src/dotterApp/dotter.h     |  2 +-
+ src/dotterApp/dotterMain.c | 16 ++++++------
+ src/dotterApp/dotter_.h    |  7 ++++-
+ 5 files changed, 65 insertions(+), 38 deletions(-)
+
+2011-02-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added breaklines for multiple sequences in Dotter
+ src/dotterApp/dotplot.c    | 188 +++++++++++++++++++++++++++++++++++++++------
+ src/dotterApp/dotter.c     |  10 ++-
+ src/dotterApp/dotterMain.c |   2 +-
+ src/dotterApp/dotter_.h    |   6 ++
+ 4 files changed, 177 insertions(+), 29 deletions(-)
+
+2011-02-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated Dotter manual
+ src/doc/User_doc/Dotter_manual.odt | Bin 278153 -> 279132 bytes
+ src/doc/User_doc/Dotter_manual.pdf | Bin 259208 -> 216955 bytes
+ 2 files changed, 0 insertions(+), 0 deletions(-)
+
+2011-02-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Improvements to docs
+ src/doc/Design_notes/build.html             |  1 +
+ src/doc/Design_notes/modules/libpfetch.html |  3 +--
+ src/doc/Design_notes/specs.html             | 21 +++++----------------
+ src/doc/User_doc/index.html                 | 18 ++++++++++++++++++
+ src/doc/index.html                          | 16 ++++++++++++++++
+ 5 files changed, 41 insertions(+), 18 deletions(-)
+
+2011-02-09  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a potential crash where the name column is too narrow to display the abbreviated name
+ src/blixemApp/detailviewtree.c | 30 +++++++++++++++++-------------
+ 1 file changed, 17 insertions(+), 13 deletions(-)
+
+2011-02-08  Gemma Barson  <gb10 at sanger.ac.uk>
+ Don't allow printing to scale an image to be larger
+ src/seqtoolsUtils/utilities.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+2011-02-08  Gemma Barson  <gb10 at sanger.ac.uk>
+ Alignment tool now refreshes when its size is changed
+ src/dotterApp/alignmenttool.c | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+2011-02-08  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a typo (incorrect keyboard shortcut tip)
+ src/dotterApp/alignmenttool.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-02-08  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added the ability to print the alignment tool
+ src/blixemApp/blxwindow.c        |  17 ---
+ src/dotterApp/alignmenttool.c    | 142 ++++++++-----------
+ src/dotterApp/dotplot.c          |  39 +++---
+ src/dotterApp/dotter.c           | 291 +++++++++++++++++++++++----------------
+ src/dotterApp/dotter_.h          |  11 +-
+ src/dotterApp/greyramptool.c     |  27 ++--
+ src/dotterApp/seqtoolsExonView.c |  10 +-
+ src/seqtoolsUtils/utilities.c    |  27 ++++
+ src/seqtoolsUtils/utilities.h    |   2 +
+ 9 files changed, 310 insertions(+), 256 deletions(-)
+
+2011-02-08  Gemma Barson  <gb10 at sanger.ac.uk>
+ Printing from Dotter now includes the crosshair and labels
+ src/dotterApp/dotplot.c          | 56 +++++++++++++++++++++++++++++++++-------
+ src/dotterApp/dotter.c           | 35 +++++++++++++++++++++----
+ src/dotterApp/dotter_.h          |  1 +
+ src/dotterApp/seqtoolsExonView.c | 21 +++++++++++++++
+ src/dotterApp/seqtoolsExonView.h |  1 +
+ 5 files changed, 99 insertions(+), 15 deletions(-)
+
+2011-02-08  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with printing where background was not being cleared
+ src/seqtoolsUtils/utilities.c | 8 +++-----
+ 1 file changed, 3 insertions(+), 5 deletions(-)
+
+2011-02-07  Gemma Barson  <gb10 at sanger.ac.uk>
+ Removed page-setup option from Blixem menu
+ src/blixemApp/blxwindow.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+2011-02-07  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added basic printing for Dotter
+ src/blixemApp/blxwindow.c     | 36 ++----------------------------------
+ src/dotterApp/dotter.c        | 32 +++++++++++++++++++++++++-------
+ src/seqtoolsUtils/utilities.c | 39 +++++++++++++++++++++++++++++++++++++++
+ src/seqtoolsUtils/utilities.h |  2 ++
+ 4 files changed, 68 insertions(+), 41 deletions(-)
+
+2011-02-07  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with printing in Blixem where label background colour was wrong
+ src/blixemApp/detailviewtree.c | 1 +
+ src/seqtoolsUtils/utilities.c  | 2 --
+ 2 files changed, 1 insertion(+), 2 deletions(-)
+
+2011-02-07  Gemma Barson  <gb10 at sanger.ac.uk>
+ Removed some commented-out code
+ src/blixemApp/blxFetch.c | 69 ------------------------------------------------
+ 1 file changed, 69 deletions(-)
+
+2011-02-07  Gemma Barson  <gb10 at sanger.ac.uk>
+ Printing in Blixem now scales to fit to page
+ src/blixemApp/blxwindow.c     | 93 ++++++++++++++-----------------------------
+ src/seqtoolsUtils/utilities.c | 82 +++++++++++++++++++++++++++++++++++++-
+ src/seqtoolsUtils/utilities.h |  5 +++
+ 3 files changed, 115 insertions(+), 65 deletions(-)
+
+2011-02-03  Gemma Barson  <gb10 at sanger.ac.uk>
+ Improvements to printing in Blixem
+ src/blixemApp/blxwindow.c     | 46 ++++---------------------------------------
+ src/blixemApp/detailview.c    |  5 ++++-
+ src/seqtoolsUtils/utilities.c | 37 +++++++++++++++++++++++-----------
+ src/seqtoolsUtils/utilities.h |  2 +-
+ 4 files changed, 34 insertions(+), 56 deletions(-)
+
+2011-02-04  Gemma Barson  <gb10 at sanger.ac.uk>
+ Incremented version to 4.1.9
+ src/version.m4 | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-02-04  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with pfetched sequences getting the wrong length
+ src/blixemApp/blxdotter.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+2011-02-03  Gemma Barson  <gb10 at sanger.ac.uk>
+ Incremented version to 4.1.8
+ src/version.m4 | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-02-03  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with unaligned sequence coords when display is reversed
+ src/blixemApp/blxview.c | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+2011-02-03  Gemma Barson  <gb10 at sanger.ac.uk>
+ Incremented version to 4.1.7
+ src/version.m4 | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-02-03  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added help for new navigation functionality in dotter
+ src/dotterApp/dotter.c | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+2011-02-03  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with selecting variations in protein mode
+ src/blixemApp/detailview.c     | 75 ++++++++++++++++--------------------------
+ src/blixemApp/detailview.h     |  1 -
+ src/blixemApp/detailviewtree.c |  2 +-
+ 3 files changed, 29 insertions(+), 49 deletions(-)
+
+2011-02-03  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with calculating match seq coordinates for unaligned portions of sequence
+ src/blixemApp/blixem_.h              |  84 +++++++++++--
+ src/blixemApp/blxview.c              | 222 +++++++++++++++++++++--------------
+ src/blixemApp/blxwindow.h            |  67 -----------
+ src/blixemApp/detailview.c           |   2 +-
+ src/blixemApp/sequencecellrenderer.c |   5 +-
+ 5 files changed, 214 insertions(+), 166 deletions(-)
+
+2011-02-03  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added convenience script to run ./configure with machine-specific arguments
+ src/runconfig.sh | 47 +++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 47 insertions(+)
+
+2011-02-02  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed some bugs with dottering the reverse strand vs itself
+ src/blixemApp/blxdotter.c  | 45 ++++++++++++++++++++++++++++++---------------
+ src/dotterApp/dotplot.c    |  5 ++---
+ src/dotterApp/dotter.c     |  2 +-
+ src/dotterApp/dotterMain.c | 11 ++++++++---
+ 4 files changed, 41 insertions(+), 22 deletions(-)
+
+2011-02-02  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug where the selected coord was changing when the strand is toggled
+ src/blixemApp/detailview.c | 12 +++++-------
+ 1 file changed, 5 insertions(+), 7 deletions(-)
+
+2011-02-02  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with go-to-position on the reverse strand
+ src/blixemApp/detailview.c | 17 ++---------------
+ 1 file changed, 2 insertions(+), 15 deletions(-)
+
+2011-02-01  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated to-do list
+ src/doc/Design_notes/todo.html | 2 ++
+ 1 file changed, 2 insertions(+)
+
+2011-02-01  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with dotter coords
+ src/blixemApp/blxdotter.c | 14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
+
+2011-02-01  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with dotter dialog coords when display reversed
+ src/blixemApp/blxdotter.c | 113 +++++++++++++++++++++++++++++++++++++---------
+ 1 file changed, 92 insertions(+), 21 deletions(-)
+
+2011-02-01  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated to-do list
+ src/doc/Design_notes/todo.html | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+2011-01-24  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated to-do list
+ src/doc/Design_notes/todo.html | 6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+2011-01-24  Gemma Barson  <gb10 at sanger.ac.uk>
+ Vertical exon view in Dotter is now working
+ src/blixemApp/bigpicture.c       |   4 +-
+ src/blixemApp/bigpicturegrid.c   |  10 ++--
+ src/blixemApp/blixem_.h          |   1 -
+ src/blixemApp/blxview.c          |  40 ----------------
+ src/blixemApp/exonview.c         |   8 ++--
+ src/dotterApp/seqtoolsExonView.c | 101 +++++++++++++++++++++++----------------
+ src/seqtoolsUtils/blxmsp.c       |  53 ++++++++++++++++----
+ src/seqtoolsUtils/blxmsp.h       |  10 ++--
+ src/seqtoolsUtils/utilities.c    |  24 ++++++----
+ src/seqtoolsUtils/utilities.h    |   1 +
+ 10 files changed, 136 insertions(+), 116 deletions(-)
+
+2011-01-24  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a regression where introns were not being shown in Dotter
+ src/seqtoolsUtils/blxmsp.c | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+2011-01-24  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed some bugs with the vertical exon view in Dotter
+ src/dotterApp/dotplot.c          | 12 ++++++++----
+ src/dotterApp/dotter.c           |  8 ++++----
+ src/dotterApp/seqtoolsExonView.c | 12 +++++++-----
+ src/dotterApp/seqtoolsExonView.h |  3 ++-
+ 4 files changed, 21 insertions(+), 14 deletions(-)
+
+2011-01-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated to-do list
+ src/doc/Design_notes/todo.html | 5 +----
+ 1 file changed, 1 insertion(+), 4 deletions(-)
+
+2011-01-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ More work on the right-hand-side exon view in Dotter
+ src/dotterApp/dotplot.c          |  4 ++--
+ src/dotterApp/dotter.c           | 14 +++++++++----
+ src/dotterApp/dotter_.h          |  3 +++
+ src/dotterApp/seqtoolsExonView.c | 44 +++++++++++++++++++++++++++-------------
+ 4 files changed, 45 insertions(+), 20 deletions(-)
+
+2011-01-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added exon view for vertical sequence in Dotter (WIP)
+ src/blixemApp/blixem_.h          |   2 -
+ src/blixemApp/blxdotter.c        | 168 ++++++++--------
+ src/blixemApp/blxview.c          | 391 ------------------------------------
+ src/dotterApp/dotplot.c          | 173 +++++++++++-----
+ src/dotterApp/dotterMain.c       |  13 +-
+ src/dotterApp/dotter_.h          |  38 ++--
+ src/dotterApp/seqtoolsExonView.c |  23 ++-
+ src/dotterApp/seqtoolsExonView.h |   2 +-
+ src/seqtoolsUtils/blxmsp.c       | 418 +++++++++++++++++++++++++++++++++++++--
+ src/seqtoolsUtils/blxmsp.h       |   6 +-
+ 10 files changed, 672 insertions(+), 562 deletions(-)
+
+2011-02-01  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added ability to copy coords from dotter
+ src/dotterApp/alignmenttool.c | 31 +++++++++++++++++++++++++++++--
+ src/dotterApp/dotter.c        | 40 +++++++++++++++++++++++++++++++++++++++-
+ src/dotterApp/dotter_.h       |  1 +
+ 3 files changed, 69 insertions(+), 3 deletions(-)
+
+2011-02-01  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a regression with the alignment tool
+ src/dotterApp/alignmenttool.c | 4 ++--
+ src/dotterApp/dotter_.h       | 4 ++--
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+2011-02-01  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with the alignment tool coords for the reverse strand in protein mode
+ src/dotterApp/alignmenttool.c | 81 ++++++++++++++++++++-----------------------
+ src/dotterApp/dotter.c        | 62 ++++++++++++++-------------------
+ src/dotterApp/dotter_.h       |  1 -
+ 3 files changed, 64 insertions(+), 80 deletions(-)
+
+2011-01-31  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with sub-dottering a self-comparison
+ src/dotterApp/dotplot.c | 12 +++++++-----
+ src/dotterApp/dotter.c  | 21 ++++++++++-----------
+ src/dotterApp/dotter_.h |  2 +-
+ 3 files changed, 18 insertions(+), 17 deletions(-)
+
+2011-01-27  Gemma Barson  <gb10 at sanger.ac.uk>
+ Display CDS/UTR features from the same exon on the same row
+ src/blixemApp/detailview.c     | 2 +-
+ src/blixemApp/detailviewtree.c | 7 +++++--
+ 2 files changed, 6 insertions(+), 3 deletions(-)
+
+2011-01-27  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug where out-of-range exons were being displayed
+ src/blixemApp/sequencecellrenderer.c | 48 +++++++++++++++++++++---------------
+ 1 file changed, 28 insertions(+), 20 deletions(-)
+
+2011-01-27  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a regression with moving the selected coord in Blixem by one nucleotide
+ src/blixemApp/blxwindow.c  | 48 ++++++++++------------------------------------
+ src/blixemApp/detailview.c | 10 +++++-----
+ src/blixemApp/detailview.h | 15 ++++++++++++++-
+ 3 files changed, 29 insertions(+), 44 deletions(-)
+
+2011-01-27  Gemma Barson  <gb10 at sanger.ac.uk>
+ Tidied alignment tool coord code and fixed a bug where dotter was not exiting
+ src/dotterApp/alignmenttool.c | 60 +++++--------------------------------------
+ src/dotterApp/dotter.c        | 41 ++++++++++++++++++++++++-----
+ 2 files changed, 41 insertions(+), 60 deletions(-)
+
+2011-01-26  Gemma Barson  <gb10 at sanger.ac.uk>
+ Made alignment tool display same reading frame order as blixem
+ src/dotterApp/alignmenttool.c | 77 +++++++++++++++++++++++++++----------------
+ 1 file changed, 49 insertions(+), 28 deletions(-)
+
+2011-01-26  Gemma Barson  <gb10 at sanger.ac.uk>
+ More improvements to alignment tool coord display
+ src/dotterApp/alignmenttool.c | 28 ++-------------
+ src/dotterApp/dotter.c        | 81 +++++++++++++++++++++++++++----------------
+ 2 files changed, 54 insertions(+), 55 deletions(-)
+
+2011-01-26  Gemma Barson  <gb10 at sanger.ac.uk>
+ Improvements to alignment tool coord display
+ src/dotterApp/alignmenttool.c | 43 +++++++------------------------------
+ src/dotterApp/dotter.c        | 49 +++++++++++++++++++++++++++++++++++++++++++
+ src/dotterApp/dotter_.h       |  3 +++
+ 3 files changed, 59 insertions(+), 36 deletions(-)
+
+2011-01-26  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with scrolling in the alignment tool
+ src/dotterApp/alignmenttool.c | 35 +++++++++++++++++++++++++----------
+ 1 file changed, 25 insertions(+), 10 deletions(-)
+
+2011-01-26  Gemma Barson  <gb10 at sanger.ac.uk>
+ Incremented version to 4.1.6
+ src/version.m4 | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-01-25  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a crash caused by the alignment tool indexing out of range
+ src/dotterApp/alignmenttool.c | 97 +++++++++++++++++++++++--------------------
+ 1 file changed, 51 insertions(+), 46 deletions(-)
+
+2011-01-25  Gemma Barson  <gb10 at sanger.ac.uk>
+ Renamed close/quit menu options and added Close option for greyramp tool
+ src/dotterApp/alignmenttool.c |  2 +-
+ src/dotterApp/dotter.c        | 18 +++++-----
+ src/dotterApp/greyramptool.c  | 77 +++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 87 insertions(+), 10 deletions(-)
+
+2011-01-25  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a crash when sub-dottering in dotter-vs-self
+ src/dotterApp/dotplot.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+2011-01-25  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added Close item to the Dotter right-click menu
+ src/dotterApp/dotter.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+2011-01-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a performance issue with middle-dragging on the big picture
+ src/blixemApp/bigpicture.c     | 31 +++++++++++++++++++------------
+ src/blixemApp/bigpicture.h     |  4 +++-
+ src/blixemApp/bigpicturegrid.c | 14 ++++++++++++--
+ src/blixemApp/bigpicturegrid.h |  2 ++
+ src/blixemApp/exonview.c       | 28 +++++++++++++++++++---------
+ src/blixemApp/exonview.h       |  2 ++
+ src/seqtoolsUtils/utilities.c  |  8 +++-----
+ src/seqtoolsUtils/utilities.h  |  2 +-
+ 8 files changed, 61 insertions(+), 30 deletions(-)
+
+2011-01-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with changing the range of a self-comparison in Dotter
+ src/dotterApp/dotter.c | 32 ++++++++++++++++++++++++++------
+ 1 file changed, 26 insertions(+), 6 deletions(-)
+
+2011-01-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added 'negate coords' option to Dotter
+ src/blixemApp/blxdotter.c     |   7 ++-
+ src/blixemApp/blxmain.c       |   5 +-
+ src/dotterApp/alignmenttool.c |  15 ++---
+ src/dotterApp/dotplot.c       |  15 +++--
+ src/dotterApp/dotter.c        | 140 +++++++++++++++++++++++++++++++++++++++---
+ src/dotterApp/dotter.h        |   1 +
+ src/dotterApp/dotterMain.c    |   5 +-
+ src/dotterApp/dotter_.h       |   3 +
+ 8 files changed, 164 insertions(+), 27 deletions(-)
+
+2011-01-20  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with the Dotter crosshair getting out of range
+ src/dotterApp/dotter.c | 14 +++++++++++++-
+ 1 file changed, 13 insertions(+), 1 deletion(-)
+
+2011-01-19  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added to-do page to design notes
+ src/doc/Design_notes/index.html |  1 +
+ src/doc/Design_notes/todo.html  | 35 +++++++++++++++++++++++++++++++++++
+ 2 files changed, 36 insertions(+)
+
+2011-01-19  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated test plan
+ src/doc/Design_notes/testing.ods | Bin 26481 -> 31495 bytes
+ 1 file changed, 0 insertions(+), 0 deletions(-)
+
+2011-01-19  Gemma Barson  <gb10 at sanger.ac.uk>
+ Make sure we save all Dotter parameters
+ src/blixemApp/blxdotter.c | 31 +++++++++++++++++++++++++++++--
+ src/blixemApp/blxwindow.c |  2 ++
+ src/blixemApp/blxwindow.h |  4 +++-
+ 3 files changed, 34 insertions(+), 3 deletions(-)
+
+2011-01-19  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a crash running Dotter in HSP-only mode
+ src/dotterApp/dotplot.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+2011-01-19  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a const-cast warning
+ src/dotterApp/dotter.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-01-19  Gemma Barson  <gb10 at sanger.ac.uk>
+ Limit the column size a user can enter in Blixem
+ src/blixemApp/blxwindow.c | 24 ++++++++++++++++++------
+ 1 file changed, 18 insertions(+), 6 deletions(-)
+
+2011-01-19  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added 'Close all Dotters' option to Blixem
+ src/blixemApp/blxdotter.c  |  7 ++++---
+ src/blixemApp/blxmain.c    |  2 +-
+ src/blixemApp/blxwindow.c  | 34 ++++++++++++++++++++++++++++++++--
+ src/dotterApp/dotterMain.c |  5 +++--
+ 4 files changed, 40 insertions(+), 8 deletions(-)
+
+2011-01-19  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added to design notes: calling dotter from blixem
+ src/doc/Design_notes/modules/blixemApp.html | 35 ++++++++++++++++++++++++++---
+ 1 file changed, 32 insertions(+), 3 deletions(-)
+
+2011-01-19  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added Dotter manual to dist
+ src/Makefile.am | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+2011-01-18  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added user manual for Dotter
+ src/doc/User_doc/Dotter_manual.odt | Bin 0 -> 278153 bytes
+ src/doc/User_doc/Dotter_manual.pdf | Bin 0 -> 259208 bytes
+ 2 files changed, 0 insertions(+), 0 deletions(-)
+
+2011-01-18  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added Close menu option in Dotter.
+ src/dotterApp/dotter.c       | 60 +++++++++++++++++++++++++++++++++++++-------
+ src/dotterApp/greyramptool.c |  2 +-
+ 2 files changed, 52 insertions(+), 10 deletions(-)
+
+2011-01-18  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a typo in the Blixem manual
+ src/doc/User_doc/Blixem_manual.odt | Bin 1073383 -> 1073400 bytes
+ src/doc/User_doc/Blixem_manual.pdf | Bin 824506 -> 824490 bytes
+ 2 files changed, 0 insertions(+), 0 deletions(-)
+
+2011-01-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added design/user docs to dist
+ src/Makefile.am | 2 ++
+ 1 file changed, 2 insertions(+)
+
+2011-01-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added user manual for Blixem
+ src/doc/User_doc/Blixem_manual.odt | Bin 0 -> 1073383 bytes
+ src/doc/User_doc/Blixem_manual.pdf | Bin 0 -> 824506 bytes
+ 2 files changed, 0 insertions(+), 0 deletions(-)
+
+2011-01-17  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added design docs
+ src/doc/Design_notes/architecture.html          |  22 ++++
+ src/doc/Design_notes/build.html                 |  50 +++++++++
+ src/doc/Design_notes/index.html                 |  15 +++
+ src/doc/Design_notes/modules/blixemApp.html     | 139 ++++++++++++++++++++++++
+ src/doc/Design_notes/modules/dotterApp.html     |  83 ++++++++++++++
+ src/doc/Design_notes/modules/libpfetch.html     |  13 +++
+ src/doc/Design_notes/modules/seqtoolsUtils.html |  44 ++++++++
+ src/doc/Design_notes/specs.html                 |  26 +++++
+ src/doc/Design_notes/testing.ods                | Bin 0 -> 26481 bytes
+ 9 files changed, 392 insertions(+)
+
+2011-01-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added config directory for Autotools intermediate files
+ src/configure.ac | 1 +
+ 1 file changed, 1 insertion(+)
+
+2011-01-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Incremented version to 4.1.5
+ src/version.m4 | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-01-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Removed an unused variable
+ src/blixemApp/detailview.c | 2 --
+ 1 file changed, 2 deletions(-)
+
+2011-01-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fix size of feedback box so feedback area is larger
+ src/blixemApp/detailview.c | 12 ++++++++----
+ 1 file changed, 8 insertions(+), 4 deletions(-)
+
+2011-01-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with middle-click highlighting.
+ src/blixemApp/detailview.c | 13 ++++++++++---
+ 1 file changed, 10 insertions(+), 3 deletions(-)
+
+2011-01-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Refresh columns properly after loading optional data.
+ src/blixemApp/blxwindow.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+2011-01-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with calculating the Organism alias.
+ src/blixemApp/blxview.c | 12 ++++++++++--
+ 1 file changed, 10 insertions(+), 2 deletions(-)
+
+2011-01-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added help info for new column functionality.
+ src/blixemApp/blxwindow.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-01-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Improvements to Blixem columns.
+ src/blixemApp/blxwindow.c      | 26 +++++++++++++++++++++--
+ src/blixemApp/detailview.c     | 48 +++++++++++++++++++++++++++---------------
+ src/blixemApp/detailview.h     |  4 +++-
+ src/blixemApp/detailviewtree.c | 19 ++++++++++++-----
+ 4 files changed, 72 insertions(+), 25 deletions(-)
+
+2011-01-13  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug in the mouse-move handler for the greyramp tool.
+ src/dotterApp/greyramptool.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-01-11  Gemma Barson  <gb10 at sanger.ac.uk>
+ Incremented version to 4.1.4
+ src/version.m4 | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2011-01-11  Gemma Barson  <gb10 at sanger.ac.uk>
+ Changes to colour scheme.
+ src/blixemApp/blxwindow.c     | 32 ++++++++++++-------------
+ src/dotterApp/dotter.c        |  6 ++---
+ src/seqtoolsUtils/utilities.c |  4 ++--
+ src/seqtoolsUtils/utilities.h | 55 +++++++++++++++++--------------------------
+ 4 files changed, 43 insertions(+), 54 deletions(-)
+
+2011-01-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Allow negated coords in go-to-position dialog.
+ src/blixemApp/detailview.c | 58 ++++++++++++++++++++++++++++++++++------------
+ 1 file changed, 43 insertions(+), 15 deletions(-)
+
+2011-01-10  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed a bug with initialising the selected base index.
+ src/blixemApp/blxwindow.c      |  6 +++---
+ src/blixemApp/detailview.c     | 48 +++++++++++++++++++++++++++++++++++++-----
+ src/blixemApp/detailview.h     |  5 +++++
+ src/blixemApp/detailviewtree.c |  5 +++--
+ 4 files changed, 54 insertions(+), 10 deletions(-)
+
+2011-01-07  Gemma Barson  <gb10 at sanger.ac.uk>
+ Small modification to the usage info
+ src/blixemApp/blxmain.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+2011-01-05  Gemma Barson  <gb10 at sanger.ac.uk>
+ Prefixed window titles with application name.
+ src/blixemApp/blixem_.h       |   1 +
+ src/blixemApp/blxFetch.c      |   9 +++-
+ src/blixemApp/blxdotter.c     |   4 +-
+ src/blixemApp/blxmain.c       |   6 ++-
+ src/blixemApp/blxwindow.c     |  31 +++++------
+ src/blixemApp/detailview.c    |   2 +-
+ src/dotterApp/alignmenttool.c |   4 +-
+ src/dotterApp/dotter.c        | 123 ++++++++++++++++--------------------------
+ src/dotterApp/dotter.h        |  46 ++--------------
+ src/dotterApp/dotterMain.c    |  24 ++++-----
+ src/dotterApp/dotter_.h       |   2 +
+ src/dotterApp/greyramptool.c  |   2 +-
+ src/seqtoolsUtils/utilities.c |  23 +++++---
+ src/seqtoolsUtils/utilities.h |   1 +
+ 14 files changed, 113 insertions(+), 165 deletions(-)
+
+2011-01-04  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added to-do comment
+ src/seqtoolsUtils/blxmsp.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+2010-12-23  Gemma Barson  <gb10 at sanger.ac.uk>
+ Updated source file header comments
+ src/blixemApp/bigpicture.c             |  39 ++++++++--
+ src/blixemApp/bigpicture.h             |  45 ++++++++++--
+ src/blixemApp/bigpicturegrid.c         |  40 +++++++++--
+ src/blixemApp/bigpicturegrid.h         |  45 ++++++++++--
+ src/blixemApp/blixem_.h                |  38 +++++-----
+ src/blixemApp/blxFetch.c               |  42 +++++------
+ src/blixemApp/blxdotter.c              |  39 ++++++++--
+ src/blixemApp/blxdotter.h              |  54 +++++++++++---
+ src/blixemApp/blxmain.c                |  39 +++++-----
+ src/blixemApp/blxview.c                | 125 +++++++++------------------------
+ src/blixemApp/blxview.h                |  39 +++++-----
+ src/blixemApp/blxwindow.c              |  39 ++++++++--
+ src/blixemApp/blxwindow.h              |  44 ++++++++++--
+ src/blixemApp/detailview.c             |  39 ++++++++--
+ src/blixemApp/detailview.h             |  48 +++++++++++--
+ src/blixemApp/detailviewtree.c         |  40 +++++++++--
+ src/blixemApp/detailviewtree.h         |  54 ++++++++++++--
+ src/blixemApp/exonview.c               |  39 ++++++++--
+ src/blixemApp/exonview.h               |  41 +++++++++--
+ src/blixemApp/sequencecellrenderer.c   |  40 +++++++++--
+ src/blixemApp/sequencecellrenderer.h   |  50 +++++++++++--
+ src/dotterApp/alignmenttool.c          |  46 ++++++++++--
+ src/dotterApp/dotplot.c                |  41 +++++++++--
+ src/dotterApp/dotter.c                 | 119 +++++++------------------------
+ src/dotterApp/dotter.h                 |  36 ++++++----
+ src/dotterApp/dotterKarlin.c           |  43 +++++++-----
+ src/dotterApp/dotterMain.c             |  39 +++++-----
+ src/dotterApp/dotter_.h                |  37 +++++-----
+ src/dotterApp/greyramptool.c           |  43 ++++++++++--
+ src/dotterApp/seqtoolsExonView.c       |  39 ++++++++--
+ src/dotterApp/seqtoolsExonView.h       |  47 +++++++++++--
+ src/seqtoolsUtils/blxGff3Parser.c      |  32 ++++++---
+ src/seqtoolsUtils/blxGff3Parser.h      |  32 ++++++---
+ src/seqtoolsUtils/blxmsp.c             |  40 +++++++++--
+ src/seqtoolsUtils/blxmsp.h             |  48 +++++++++++--
+ src/seqtoolsUtils/blxparser.c          |  45 ++++++------
+ src/seqtoolsUtils/blxparser.h          |  48 ++++++++++---
+ src/seqtoolsUtils/iupac.h              |  35 +++++----
+ src/seqtoolsUtils/seqtoolsWebBrowser.c |  36 ++++++----
+ src/seqtoolsUtils/translate.c          |  42 ++++++-----
+ src/seqtoolsUtils/utilities.c          |  39 ++++++++--
+ src/seqtoolsUtils/utilities.h          |  39 ++++++++--
+ src/seqtoolsUtils/version.h            |  32 +++++----
+ 43 files changed, 1365 insertions(+), 572 deletions(-)
+
+2010-12-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Incremented version to 4.1.3
+ src/version.m4 | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2010-12-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Made --compiled flag output to stdout so build script can pick it up
+ src/blixemApp/blxmain.c    | 4 ++--
+ src/dotterApp/dotterMain.c | 4 ++--
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+2010-12-21  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added --compiled option to blixem and dotter
+ src/blixemApp/blxmain.c    | 18 ++++++++++++++++++
+ src/dotterApp/dotterMain.c | 26 +++++++++++++++++++++-----
+ 2 files changed, 39 insertions(+), 5 deletions(-)
+
+2010-12-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added long options to dotter
+ src/blixemApp/blxmain.c    |  4 +--
+ src/dotterApp/dotterMain.c | 64 +++++++++++++++++++++++++++++++++++++++++-----
+ 2 files changed, 59 insertions(+), 9 deletions(-)
+
+2010-12-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Improved Blixem and Dotter usage text
+ src/blixemApp/blixem_.h    |   1 -
+ src/blixemApp/blxmain.c    |  16 +++---
+ src/blixemApp/blxview.c    |   5 --
+ src/blixemApp/blxwindow.c  |   2 +-
+ src/dotterApp/dotter.c     |   1 -
+ src/dotterApp/dotterMain.c | 129 ++++++++++++++++++++++++---------------------
+ 6 files changed, 79 insertions(+), 75 deletions(-)
+
+2010-12-16  Gemma Barson  <gb10 at sanger.ac.uk>
+ Improved Blixem usage text
+ src/blixemApp/blixem_.h     |  5 ++-
+ src/blixemApp/blxmain.c     | 89 ++++++++++++++++++++++++++++++++++-----------
+ src/dotterApp/dotter_.h     |  5 ++-
+ src/seqtoolsUtils/version.h | 10 +++++
+ 4 files changed, 83 insertions(+), 26 deletions(-)
+
+2010-12-15  Gemma Barson  <gb10 at sanger.ac.uk>
+ Incremented version to 4.1.2
+ src/version.m4 | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2010-12-15  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed some bugs with dotter batch mode
+ src/dotterApp/dotplot.c | 189 ++++++++++++++++++++++--------------------------
+ src/dotterApp/dotter.c  |  40 +++++++---
+ src/dotterApp/dotter_.h |  45 +++++++++++-
+ 3 files changed, 159 insertions(+), 115 deletions(-)
+
+2010-12-14  Gemma Barson  <gb10 at sanger.ac.uk>
+ Fixed some bugs with loading dotter plots. Created a new dotplot file format '3' because the zoom factor has changed from an int to a double.
+ src/dotterApp/dotplot.c      | 203 +++++++++++++++++++++++++++----------------
+ src/dotterApp/dotterKarlin.c |   9 +-
+ src/dotterApp/dotter_.h      |   2 +-
+ 3 files changed, 133 insertions(+), 81 deletions(-)
+
+2010-12-07  Gemma Barson  <gb10 at sanger.ac.uk>
+ Increased version number to 4.1.1
+ src/version.m4 | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2010-12-07  Gemma Barson  <gb10 at sanger.ac.uk>
+ Blixem and Dotter now use the package version number, which is specified in version.m4.  I upped this to 4.1.0 so that it is a sensible progression for each program (blixem from 4.0.4 and dotter from 4.0.0).
+ src/blixemApp/blixem_.h     |  28 +++++-------
+ src/blixemApp/blxmain.c     |   2 +-
+ src/blixemApp/blxwindow.c   |   4 +-
+ src/dotterApp/dotter.c      |   4 +-
+ src/dotterApp/dotterMain.c  |   2 +-
+ src/dotterApp/dotter_.h     |  27 +++++------
+ src/seqtoolsUtils/version.h | 106 ++++++++++++++++++++++++++------------------
+ src/version.m4              |   2 +-
+ 8 files changed, 91 insertions(+), 84 deletions(-)
+
+2010-12-06  Gemma Barson  <gb10 at sanger.ac.uk>
+ Incremented version number
+ src/version.m4 | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2010-12-06  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added version.m4 file to control package version number
+ src/configure.ac | 4 +++-
+ src/version.m4   | 1 +
+ 2 files changed, 4 insertions(+), 1 deletion(-)
+
+2010-11-30  Gemma Barson  <gb10 at sanger.ac.uk>
+ Set initial version number for the SeqTools package
+ src/configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2010-11-29  Gemma Barson  <gb10 at sanger.ac.uk>
+ Small change to the README file
+ src/README | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+2010-11-29  Gemma Barson  <gb10 at sanger.ac.uk>
+ Small change to the AUTHORS file
+ src/AUTHORS | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2010-11-29  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added gitignore file
+ .gitignore | 34 ++++++++++++++++++++++++++++++++++
+ 1 file changed, 34 insertions(+)
+
+2010-11-26  Gemma Barson  <gb10 at sanger.ac.uk>
+ Changed includes etc. to work with the new build system
+ src/blixemApp/bigpicture.c             |  10 +--
+ src/blixemApp/bigpicture.h             |   6 +-
+ src/blixemApp/bigpicturegrid.c         |  12 +--
+ src/blixemApp/bigpicturegrid.h         |   4 +-
+ src/blixemApp/blixem_.h                |  55 +------------
+ src/blixemApp/blxFetch.c               |  10 +--
+ src/blixemApp/blxdotter.c              |  39 +++++----
+ src/blixemApp/blxmain.c                |  12 +--
+ src/blixemApp/blxview.c                |  18 ++---
+ src/blixemApp/blxwindow.c              |  20 ++---
+ src/blixemApp/blxwindow.h              |   4 +-
+ src/blixemApp/detailview.c             |  18 ++---
+ src/blixemApp/detailview.h             |   4 +-
+ src/blixemApp/detailviewtree.c         |  14 ++--
+ src/blixemApp/detailviewtree.h         |   6 +-
+ src/blixemApp/exonview.c               |  16 ++--
+ src/blixemApp/exonview.h               |   2 +-
+ src/blixemApp/sequencecellrenderer.c   |  30 +++----
+ src/blixemApp/sequencecellrenderer.h   |   2 +-
+ src/dotterApp/alignmenttool.c          |   4 +-
+ src/dotterApp/dotplot.c                |   4 +-
+ src/dotterApp/dotter.c                 |  18 ++---
+ src/dotterApp/dotter.h                 |   6 +-
+ src/dotterApp/dotterKarlin.c           |   6 +-
+ src/dotterApp/dotterMain.c             |  28 +++----
+ src/dotterApp/dotter_.h                |   2 +-
+ src/dotterApp/greyramptool.c           |   4 +-
+ src/dotterApp/seqtoolsExonView.c       |   6 +-
+ src/dotterApp/seqtoolsExonView.h       |   4 +-
+ src/seqtoolsUtils/blxGff3Parser.c      |   7 +-
+ src/seqtoolsUtils/blxGff3Parser.h      |  51 +++++++++++-
+ src/seqtoolsUtils/blxmsp.c             |  12 +--
+ src/seqtoolsUtils/blxmsp.h             |   2 +-
+ src/seqtoolsUtils/blxparser.c          |  10 +--
+ src/seqtoolsUtils/seqtoolsWebBrowser.c | 108 +++++++++++++------------
+ src/seqtoolsUtils/translate.c          |   4 +-
+ src/seqtoolsUtils/utilities.c          |  23 +++---
+ src/seqtoolsUtils/utilities.h          |  12 +--
+ src/seqtoolsUtils/version.h            | 139 +++++++++++++++++++++++++++++++++
+ 39 files changed, 433 insertions(+), 299 deletions(-)
+
+2010-11-26  Gemma Barson  <gb10 at sanger.ac.uk>
+ Added build scripts
+ src/AUTHORS                           |    7 +
+ src/COPYING                           |  674 +++++++++++++++
+ src/ChangeLog                         |    0
+ src/Makefile.am                       |   22 +
+ src/NEWS                              |    0
+ src/README                            |   72 ++
+ src/blixemApp/Makefile.am             |    8 +
+ src/configure.ac                      |   55 ++
+ src/dotterApp/Makefile.am             |    8 +
+ src/libpfetch/Makefile.am             |   29 +
+ src/libpfetch/libcurlobject.c         | 1046 +++++++++++++++++++++++
+ src/libpfetch/libcurlobject.h         |   80 ++
+ src/libpfetch/libcurlobject_I.h       |   88 ++
+ src/libpfetch/libpfetch-cmarshal.c    |  129 +++
+ src/libpfetch/libpfetch-cmarshal.h    |   28 +
+ src/libpfetch/libpfetch-cmarshal.list |    2 +
+ src/libpfetch/libpfetch-utils.c       |  114 +++
+ src/libpfetch/libpfetch.c             | 1504 +++++++++++++++++++++++++++++++++
+ src/libpfetch/libpfetch.h             |  156 ++++
+ src/libpfetch/libpfetch_I.h           |  239 ++++++
+ src/libpfetch/libpfetch_P.h           |  125 +++
+ src/seqtoolsUtils/Makefile.am         |    9 +
+ 22 files changed, 4395 insertions(+)
+
+2010-11-26  Gemma Barson  <gb10 at sanger.ac.uk>
+ Moved source files to src subdirectory
+ {blixemApp => src/blixemApp}/bigpicture.c                 | 0
+ {blixemApp => src/blixemApp}/bigpicture.h                 | 0
+ {blixemApp => src/blixemApp}/bigpicturegrid.c             | 0
+ {blixemApp => src/blixemApp}/bigpicturegrid.h             | 0
+ {blixemApp => src/blixemApp}/blixem_.h                    | 0
+ {blixemApp => src/blixemApp}/blxFetch.c                   | 0
+ {blixemApp => src/blixemApp}/blxdotter.c                  | 0
+ {blixemApp => src/blixemApp}/blxdotter.h                  | 0
+ {blixemApp => src/blixemApp}/blxmain.c                    | 0
+ {blixemApp => src/blixemApp}/blxview.c                    | 0
+ {blixemApp => src/blixemApp}/blxview.h                    | 0
+ {blixemApp => src/blixemApp}/blxwindow.c                  | 0
+ {blixemApp => src/blixemApp}/blxwindow.h                  | 0
+ {blixemApp => src/blixemApp}/detailview.c                 | 0
+ {blixemApp => src/blixemApp}/detailview.h                 | 0
+ {blixemApp => src/blixemApp}/detailviewtree.c             | 0
+ {blixemApp => src/blixemApp}/detailviewtree.h             | 0
+ {blixemApp => src/blixemApp}/exonview.c                   | 0
+ {blixemApp => src/blixemApp}/exonview.h                   | 0
+ {blixemApp => src/blixemApp}/sequencecellrenderer.c       | 0
+ {blixemApp => src/blixemApp}/sequencecellrenderer.h       | 0
+ {dotterApp => src/dotterApp}/alignmenttool.c              | 0
+ {dotterApp => src/dotterApp}/dotplot.c                    | 0
+ {dotterApp => src/dotterApp}/dotter.c                     | 0
+ {dotterApp => src/dotterApp}/dotter.h                     | 0
+ {dotterApp => src/dotterApp}/dotterKarlin.c               | 0
+ {dotterApp => src/dotterApp}/dotterMain.c                 | 0
+ {dotterApp => src/dotterApp}/dotter_.h                    | 0
+ {dotterApp => src/dotterApp}/greyramptool.c               | 0
+ {dotterApp => src/dotterApp}/seqtoolsExonView.c           | 0
+ {dotterApp => src/dotterApp}/seqtoolsExonView.h           | 0
+ {seqtoolsUtils => src/seqtoolsUtils}/blxGff3Parser.c      | 0
+ {seqtoolsUtils => src/seqtoolsUtils}/blxGff3Parser.h      | 0
+ {seqtoolsUtils => src/seqtoolsUtils}/blxmsp.c             | 0
+ {seqtoolsUtils => src/seqtoolsUtils}/blxmsp.h             | 0
+ {seqtoolsUtils => src/seqtoolsUtils}/blxparser.c          | 0
+ {seqtoolsUtils => src/seqtoolsUtils}/blxparser.h          | 0
+ {seqtoolsUtils => src/seqtoolsUtils}/iupac.h              | 0
+ {seqtoolsUtils => src/seqtoolsUtils}/seqtoolsWebBrowser.c | 0
+ {seqtoolsUtils => src/seqtoolsUtils}/translate.c          | 0
+ {seqtoolsUtils => src/seqtoolsUtils}/utilities.c          | 0
+ {seqtoolsUtils => src/seqtoolsUtils}/utilities.h          | 0
+ 42 files changed, 0 insertions(+), 0 deletions(-)
+
+2010-11-26  Gemma Barson  <gb10 at sanger.ac.uk>
+ Separated files into subdirectories
+ bigpicture.c => blixemApp/bigpicture.c                     | 0
+ bigpicture.h => blixemApp/bigpicture.h                     | 0
+ bigpicturegrid.c => blixemApp/bigpicturegrid.c             | 0
+ bigpicturegrid.h => blixemApp/bigpicturegrid.h             | 0
+ blixem_.h => blixemApp/blixem_.h                           | 0
+ blxFetch.c => blixemApp/blxFetch.c                         | 0
+ blxdotter.c => blixemApp/blxdotter.c                       | 0
+ blxdotter.h => blixemApp/blxdotter.h                       | 0
+ blxmain.c => blixemApp/blxmain.c                           | 0
+ blxview.c => blixemApp/blxview.c                           | 0
+ blxview.h => blixemApp/blxview.h                           | 0
+ blxwindow.c => blixemApp/blxwindow.c                       | 0
+ blxwindow.h => blixemApp/blxwindow.h                       | 0
+ detailview.c => blixemApp/detailview.c                     | 0
+ detailview.h => blixemApp/detailview.h                     | 0
+ detailviewtree.c => blixemApp/detailviewtree.c             | 0
+ detailviewtree.h => blixemApp/detailviewtree.h             | 0
+ exonview.c => blixemApp/exonview.c                         | 0
+ exonview.h => blixemApp/exonview.h                         | 0
+ sequencecellrenderer.c => blixemApp/sequencecellrenderer.c | 0
+ sequencecellrenderer.h => blixemApp/sequencecellrenderer.h | 0
+ alignmenttool.c => dotterApp/alignmenttool.c               | 0
+ dotplot.c => dotterApp/dotplot.c                           | 0
+ dotter.c => dotterApp/dotter.c                             | 0
+ dotter.h => dotterApp/dotter.h                             | 0
+ dotterKarlin.c => dotterApp/dotterKarlin.c                 | 0
+ dotterMain.c => dotterApp/dotterMain.c                     | 0
+ dotter_.h => dotterApp/dotter_.h                           | 0
+ greyramptool.c => dotterApp/greyramptool.c                 | 0
+ seqtoolsExonView.c => dotterApp/seqtoolsExonView.c         | 0
+ seqtoolsExonView.h => dotterApp/seqtoolsExonView.h         | 0
+ blxGff3Parser.c => seqtoolsUtils/blxGff3Parser.c           | 0
+ blxGff3Parser.h => seqtoolsUtils/blxGff3Parser.h           | 0
+ blxmsp.c => seqtoolsUtils/blxmsp.c                         | 0
+ blxmsp.h => seqtoolsUtils/blxmsp.h                         | 0
+ blxparser.c => seqtoolsUtils/blxparser.c                   | 0
+ blxparser.h => seqtoolsUtils/blxparser.h                   | 0
+ iupac.h => seqtoolsUtils/iupac.h                           | 0
+ seqtoolsWebBrowser.c => seqtoolsUtils/seqtoolsWebBrowser.c | 0
+ translate.c => seqtoolsUtils/translate.c                   | 0
+ utilities.c => seqtoolsUtils/utilities.c                   | 0
+ utilities.h => seqtoolsUtils/utilities.h                   | 0
+ 42 files changed, 0 insertions(+), 0 deletions(-)
+
+2010-11-26  Gemma Barson  <gb10 at sanger.ac.uk>
+ Removed old files
+ align.c     |  452 ----
+ asn.c       | 2352 ----------------
+ belvu.c     | 8588 -----------------------------------------------------------
+ dbidx.c     |  750 ------
+ diskdump.c  |  114 -
+ diskfix.c   |   91 -
+ efetch.c    |  533 ----
+ embl.c      | 1992 --------------
+ fetch.c     |  500 ----
+ gfcode.c    | 1259 ---------
+ hexcode.c   |  401 ---
+ readseq.c   |  361 ---
+ vmapdata2.c | 1895 -------------
+ vmapphys.c  |  417 ---
+ 14 files changed, 19705 deletions(-)
+
+2010-11-18  gb10  <gb10>
+ Added help for new features
+ blxwindow.c | 275 +++++++++++++++++++++++++++++++-----------------------------
+ dotter.c    |  25 +++++-
+ 2 files changed, 162 insertions(+), 138 deletions(-)
+
+2010-11-17  gb10  <gb10>
+ Fixed reading frame calculation for reverse strand. Fixed a bug where polya signals were not being shown. Fixed a bug where CDS/UTRs were not being shown in the correct tree.
+ blxwindow.c            | 14 +++++---
+ detailview.c           | 55 ++++++-------------------------
+ detailviewtree.c       |  2 +-
+ sequencecellrenderer.c | 19 +++++------
+ utilities.c            | 87 +++++++++++++++++++++++++++++++++-----------------
+ 5 files changed, 87 insertions(+), 90 deletions(-)
+
+2010-11-16  gb10  <gb10>
+ Fixed an incorrect error message
+ dotter.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+2010-11-16  gb10  <gb10>
+ Improved message handlingwd
+ dotterMain.c | 14 +++-----------
+ 1 file changed, 3 insertions(+), 11 deletions(-)
+
+2010-11-16  gb10  <gb10>
+ Improved message handling
+ blxmain.c    |  9 +++++----
+ blxwindow.c  |  2 +-
+ dotter.c     | 10 +++++++++-
+ dotterMain.c | 13 ++++++++-----
+ utilities.c  | 56 +++++++++++++++++++++++---------------------------------
+ 5 files changed, 46 insertions(+), 44 deletions(-)
+
+2010-11-16  gb10  <gb10>
+ Removed ACEDB compile option. Fixed a bug with piping X options from blixem to dotter. Improved message handling.wd
+ utilities.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+2010-11-16  gb10  <gb10>
+ Removed ACEDB compile option. Fixed a bug with piping X options from blixem to dotter. Improved message handling.
+ blixem_.h          |  26 +--
+ blxFetch.c         |  34 +--
+ blxdotter.c        | 159 +++++++------
+ blxmsp.c           | 368 +++++++++++++++++++++++------
+ blxmsp.h           |  19 +-
+ blxparser.c        |  18 +-
+ blxview.c          | 669 +----------------------------------------------------
+ blxwindow.c        |  21 +-
+ detailview.c       |  41 ++++
+ detailviewtree.c   |   5 -
+ dotplot.c          |  12 +-
+ dotter.c           |  41 ++--
+ dotter.h           |  37 +--
+ dotterKarlin.c     |  22 +-
+ dotterMain.c       | 178 +++++++++-----
+ seqtoolsExonView.c |   7 -
+ utilities.c        | 480 +++++++++++++++++++++++++++++++++++++-
+ utilities.h        |  16 +-
+ 18 files changed, 1125 insertions(+), 1028 deletions(-)
+
+2010-11-15  gb10  <gb10>
+ Added percentID tag in GFF parser
+ blxGff3Parser.c | 7 +------
+ 1 file changed, 1 insertion(+), 6 deletions(-)
+
+2010-11-11  gb10  <gb10>
+ Fixed a potential crash where an incorrect frame could be returned for nucleotide matches
+ detailview.c | 43 +------------------------------------------
+ 1 file changed, 1 insertion(+), 42 deletions(-)
+
+2010-11-11  gb10  <gb10>
+ Fixed a warning message that was too long
+ blxdotter.c | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+2010-11-11  gb10  <gb10>
+ Fixed a bug where the reference sequence was being offset incorrectly when the display is at the end of the reference sequence range
+ detailviewtree.c | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+2010-11-11  gb10  <gb10>
+ Fixed a bug where protein gap coords were being messed up because blast mode wasn't being set
+ blxmain.c | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+2010-11-09  gb10  <gb10>
+ Improved warnings when calling dotter with a bad range
+ blxdotter.c | 92 ++++++++++++++++++++++++++++++++++++-------------------------
+ 1 file changed, 55 insertions(+), 37 deletions(-)
+
+2010-11-09  gb10  <gb10>
+ Fixed a small bug where the preview box was not being positioned accurately when the display is reversed
+ bigpicture.c     | 20 ++++++++++++--------
+ bigpicturegrid.c |  3 ++-
+ 2 files changed, 14 insertions(+), 9 deletions(-)
+
+2010-11-09  gb10  <gb10>
+ Fixed a bug with resizing columns
+ detailview.c     | 30 ++----------------------------
+ detailview.h     |  2 +-
+ detailviewtree.c | 54 +++++++++++++++++++++++++-----------------------------
+ detailviewtree.h |  1 +
+ 4 files changed, 29 insertions(+), 58 deletions(-)
+
+2010-11-09  gb10  <gb10>
+ Fixed a bug with long options. Fixed a bug with the highlight-diffs argument
+ blixem_.h   |  4 ++--
+ blxmain.c   | 12 +++++++++---
+ blxwindow.c |  1 +
+ 3 files changed, 12 insertions(+), 5 deletions(-)
+
+2010-11-08  gb10  <gb10>
+ Made some improvements to the key file (can now pass separate colors for UTR and CDS regions of the same source)
+ blxmain.c   | 28 +++++++++---------
+ blxmsp.c    | 14 ++++++---
+ blxview.c   | 96 ++++++++++++++++++++++++++++++++++---------------------------
+ utilities.h |  2 ++
+ 4 files changed, 81 insertions(+), 59 deletions(-)
+
+2010-11-08  gb10  <gb10>
+ Implemented the reverse-strand command-line argument
+ blxwindow.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+2010-11-08  gb10  <gb10>
+ Implemented negate-coords option
+ bigpicture.c     |  4 ++++
+ blxwindow.c      | 10 ++++++++++
+ blxwindow.h      |  1 +
+ detailview.c     | 53 ++++++++++-------------------------------------------
+ detailviewtree.c | 20 ++++++++++++++++++--
+ 5 files changed, 43 insertions(+), 45 deletions(-)
+
+2010-11-08  gb10  <gb10>
+ Changed blixem command-line arguments. Added long options.wd
+ blixem_.h   |  4 +++-
+ blxmain.c   | 33 ++++++++++++++++++++++++++++++---
+ blxwindow.c |  1 +
+ 3 files changed, 34 insertions(+), 4 deletions(-)
+
+2010-11-08  gb10  <gb10>
+ Changed blixem command-line arguments. Added long options.
+ blixem_.h              |  56 +++++-
+ blxGff3Parser.c        |  81 +++------
+ blxGff3Parser.h        |   5 +-
+ blxdotter.c            |  24 +--
+ blxdotter.h            |   1 -
+ blxmain.c              | 456 ++++++++++++++++++++++++++++++++++---------------
+ blxparser.c            | 224 ++++++++++--------------
+ blxparser.h            |   2 +-
+ blxview.c              | 200 ++++++----------------
+ blxview.h              |  48 +-----
+ blxwindow.c            |  24 ++-
+ blxwindow.h            |  32 ----
+ dotter.c               |  27 +--
+ dotter.h               |   5 +-
+ dotterMain.c           |  20 +--
+ sequencecellrenderer.h |   2 +-
+ 16 files changed, 573 insertions(+), 634 deletions(-)
+
+2010-11-05  gb10  <gb10>
+ For GFF3, get percent ID from parsed tag
+ blixem_.h       |  4 ++--
+ blxGff3Parser.c | 22 +++++++++++++++++++---
+ blxparser.c     | 14 +++++++-------
+ blxview.c       |  8 +++++---
+ blxwindow.c     |  6 +++---
+ 5 files changed, 36 insertions(+), 18 deletions(-)
+
+2010-11-05  gb10  <gb10>
+ Fixed a potential memory bug when starting dotter
+ blxdotter.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2010-11-04  gb10  <gb10>
+ Use start coord as centre of display rather than left edge
+ blxmain.c    |  6 +++---
+ detailview.c | 11 ++++++-----
+ 2 files changed, 9 insertions(+), 8 deletions(-)
+
+2010-11-03  gb10  <gb10>
+ More removal of acedb code
+ blxFetch.c         |   3 +-
+ blxselect.c        | 501 -----------------------------------------------------
+ exonview.h         |   2 +-
+ seqtoolsExonView.h |   2 +-
+ 4 files changed, 4 insertions(+), 504 deletions(-)
+
+2010-11-03  gb10  <gb10>
+ Removed more acedb code from dotter
+ blxFetch.c  | 51 +++++++++++++++++++++++++++------------------------
+ blxdotter.c |  6 +++---
+ blxmain.c   | 48 ++++++++++++++++++++++++++----------------------
+ blxparser.c | 26 ++++++++++++++++++++++++--
+ blxview.c   |  9 ++-------
+ dotplot.c   | 53 ++++++++++++-----------------------------------------
+ translate.c | 16 ++++++++--------
+ utilities.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ utilities.h | 15 +++++++++++++++
+ 9 files changed, 176 insertions(+), 107 deletions(-)
+
+2010-11-03  gb10  <gb10>
+ Fixed a regression where dotter was failing to start because of a programming error (invalid pointer passed to getFontCharSize). Removed some more acedb code from dotter.
+ alignmenttool.c |  41 +++++++++----------
+ blixem_.h       |   9 +----
+ blxview.c       |   6 ++-
+ dotplot.c       |  17 +++++++-
+ dotter.c        | 119 +++++++++++---------------------------------------------
+ dotterMain.c    |   8 ++--
+ dotter_.h       |   6 +--
+ utilities.c     |  83 ++++++++++++++++++++++++++++++++++++++-
+ utilities.h     |   3 ++
+ 9 files changed, 156 insertions(+), 136 deletions(-)
+
+2010-11-02  gb10  <gb10>
+ Added parsing of a sequence-region comment line for exblx and seqbl file formats. Use the parsed range as the reference sequence range in blixem (i.e. if a ref seq range is passed, all feature coords in the file must be in that range; otherwise, coords are assumed to be 1-based). Note that if an offset is supplied via the -O argument, the offset will be applied on top of this, i.e. both the ref seq range and all feature coords will be offset.
+ blxmain.c   |  4 ++--
+ blxparser.c | 31 ++++++++++++++++++++++++-------
+ blxview.c   |  5 +++--
+ blxview.h   |  3 ++-
+ blxwindow.c | 13 ++++++-------
+ blxwindow.h |  3 ++-
+ 6 files changed, 39 insertions(+), 20 deletions(-)
+
+2010-11-02  gb10  <gb10>
+ Check that parsed sequence range is the same length as the FASTA sequence
+ blxparser.c | 20 +++++++++++++++++---
+ 1 file changed, 17 insertions(+), 3 deletions(-)
+
+2010-11-02  gb10  <gb10>
+ Set a default ref seq range if none was parsed
+ blxparser.c | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+2010-11-02  gb10  <gb10>
+ GFF3 parser now reads reference sequence range from file.
+ blxGff3Parser.c |  8 ++++----
+ blxGff3Parser.h |  3 ++-
+ blxmain.c       |  7 ++++---
+ blxparser.c     | 13 +++++++------
+ blxparser.h     |  2 +-
+ blxselect.c     |  6 ++++--
+ detailview.c    |  2 +-
+ dotterMain.c    |  5 +++--
+ 8 files changed, 26 insertions(+), 20 deletions(-)
+
+2010-11-02  gb10  <gb10>
+ Made detail-view alignment positions more accurate if characters are not an exact number of pixels wide
+ bigpicture.c           |  4 +--
+ bigpicture.h           |  4 +--
+ bigpicturegrid.c       |  6 ++--
+ blxFetch.c             |  4 +--
+ blxwindow.c            |  4 +--
+ detailview.c           | 54 +++++++++++++++----------------
+ detailview.h           | 10 +++---
+ detailviewtree.c       | 16 +++++-----
+ exonview.c             |  2 +-
+ sequencecellrenderer.c | 87 ++++++++++++++++++++++++++++++++------------------
+ utilities.c            |  7 ++--
+ utilities.h            |  2 +-
+ 12 files changed, 113 insertions(+), 87 deletions(-)
+
+2010-11-01  gb10  <gb10>
+ Make tree widgets use same font description as detail view
+ detailview.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+2010-11-01  gb10  <gb10>
+ Improved blixem responsiveness when variation and polyA data is included
+ blixem_.h              |  53 +++++++++-
+ blxGff3Parser.c        |   7 +-
+ blxGff3Parser.h        |   1 +
+ blxmain.c              |  14 ++-
+ blxmsp.c               | 243 +++++----------------------------------------
+ blxmsp.h               |  34 +------
+ blxparser.c            |  88 ++++++++++-------
+ blxparser.h            |   2 +-
+ blxselect.c            |  10 +-
+ blxview.c              | 231 ++++++++++++++++++++++++++++++++++++++++---
+ blxview.h              |   3 +-
+ blxwindow.c            |  88 ++++++++---------
+ blxwindow.h            |   5 +-
+ detailview.c           | 264 ++++++++++++++++++++++++++++++++-----------------
+ detailview.h           |   7 +-
+ detailviewtree.c       |  69 ++++++-------
+ dotterMain.c           |  17 +++-
+ sequencecellrenderer.c |   6 +-
+ utilities.c            |   7 +-
+ utilities.h            |  25 -----
+ 20 files changed, 655 insertions(+), 519 deletions(-)
+
+2010-11-01  gb10  <gb10>
+ Improved use of font selection dialog
+ blxFetch.c  |  4 +--
+ blxwindow.c | 81 ++++++++++++++++++++++++++++++++++++-------------------------
+ 2 files changed, 50 insertions(+), 35 deletions(-)
+
+2010-11-01  gb10  <gb10>
+ Fix for RT ticket 165740: fixed-width fonts were not displaying properly on certain machines. Also added a font selection option in the Settings dialog.
+ blxwindow.c  | 84 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++---
+ detailview.c |  3 ++-
+ 2 files changed, 82 insertions(+), 5 deletions(-)
+
+2010-10-28  gb10  <gb10>
+ Fixed a bug where sorting by ID is ambiguous if the IDs are within 1 of each other
+ detailviewtree.c | 19 ++++++++++++++++++-
+ 1 file changed, 18 insertions(+), 1 deletion(-)
+
+2010-10-28  gb10  <gb10>
+ Fixed a bug in dotter where HSP lines were drawn in the wrong place when the display is reversed
+ dotplot.c | 186 ++++++++++++++++----------------------------------------------
+ 1 file changed, 48 insertions(+), 138 deletions(-)
+
+2010-10-28  gb10  <gb10>
+ Fixed a bug in dotter where the dotplot was not always initialised correctly
+ dotplot.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+2010-10-28  gb10  <gb10>
+ Fixed a bug where the calculated dotter range was being clipped too much for a large object. Added a warning if the clipped range no longer contains any matches. Blixem now calls dotter as an external process and kills all spawned dotters on exit. Fixed a bug with drawing HSP lines in dotter where they were being drawn in the wrong place if they extend outside the visible range.
+ blxdotter.c  | 223 ++++++++++++++++++++++++++++++++++++++++++++---------------
+ blxmsp.c     |   2 +-
+ blxwindow.c  |  22 ++++++
+ blxwindow.h  |   1 +
+ dotplot.c    |  33 +++++++--
+ dotter.c     | 209 ++++++++++++++++++++++++++++++++++++++++++-------------
+ dotterMain.c |  31 ++++++---
+ utilities.h  |   2 -
+ 8 files changed, 401 insertions(+), 122 deletions(-)
+
+2010-10-26  gb10  <gb10>
+ Fixed a typo
+ dotplot.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2010-10-26  gb10  <gb10>
+ Fixed a bug where MSPs were not being passed from blixem to dotter
+ blxdotter.c        |  23 +----
+ blxmsp.c           | 268 ++++++++++++++++++++++++++++++++++++++++++++++++-----
+ blxmsp.h           |  10 +-
+ blxview.c          |  86 +----------------
+ blxwindow.c        |   8 --
+ detailview.c       |   2 +-
+ dotplot.c          |  10 +-
+ dotter.c           |   4 +-
+ dotterMain.c       | 100 +++++++++-----------
+ seqtoolsExonView.c |   9 +-
+ utilities.h        |   2 +
+ 11 files changed, 324 insertions(+), 198 deletions(-)
+
+2010-10-26  gb10  <gb10>
+ Added -H option when calling dotter externally from blixem)
+ blxdotter.c | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
+
+2010-10-26  gb10  <gb10>
+ Call dotter as an external process from blixem
+ blxdotter.c  | 224 ++++++++++++++++++++++++++++++++++++-------
+ dotter.c     | 305 +++++++++++------------------------------------------------
+ dotter.h     |  48 ++++++++--
+ dotterMain.c | 174 ++++++++++++----------------------
+ utilities.c  |  68 +++++++++++++
+ utilities.h  |   2 +
+ 6 files changed, 412 insertions(+), 409 deletions(-)
+
+2010-10-26  gb10  <gb10>
+ Fixed a bug when calling dotter in HSP-only mode
+ alignmenttool.c |  2 +-
+ dotplot.c       |  3 ++-
+ dotter.c        | 39 +++++++++++++++------------------------
+ dotter_.h       |  4 ++--
+ 4 files changed, 20 insertions(+), 28 deletions(-)
+
+2010-10-25  gb10  <gb10>
+ Fixed a bug in the new dotter where artefacts were appearing in the dot-plot for protein matches. This was because the sum arrays were not being cleared between the calculations for each frame. Also fixed a bug where HSPs were shown the wrong way round when the display is reversed.
+ dotplot.c | 91 ++++++++++++++++++++++++++++++---------------------------------
+ 1 file changed, 43 insertions(+), 48 deletions(-)
+
+2010-10-25  gb10  <gb10>
+ Consolidated more dotter code
+ dotplot.c | 511 +++++++++++++++++++++++++++++---------------------------------
+ 1 file changed, 239 insertions(+), 272 deletions(-)
+
+2010-10-25  gb10  <gb10>
+ Consolidated some duplicated dotter code
+ dotplot.c | 308 ++++++++++++++++++++++++++++++++------------------------------
+ 1 file changed, 157 insertions(+), 151 deletions(-)
+
+2010-10-22  gb10  <gb10>
+ Changed to new, GTK-based dotter
+ blxparser.c      | 108 +++----------------------------------------------------
+ detailviewtree.c |  75 +++++++++++++++++++++++++-------------
+ 2 files changed, 54 insertions(+), 129 deletions(-)
+
+2010-10-22  gb10  <gb10>
+ Changed to new, GTK-based dotter
+ alignmenttool.c                     |  912 +++++
+ bigpicture.c                        |   72 +-
+ bigpicture.h                        |    9 -
+ bigpicturegrid.c                    |   20 +-
+ blixem_.h                           |  113 +-
+ blxFetch.c                          |   26 +-
+ blxGff3Parser.c                     |    3 +-
+ blxGff3Parser_.h => blxGff3Parser.h |    7 +-
+ blxdotter.c                         |  158 +-
+ blxmain.c                           |    4 +-
+ blxmsp.c                            | 1156 +++++++
+ blxmsp.h                            |  274 ++
+ blxparser.h                         |   15 +
+ blxselect.c                         |    3 +-
+ blxview.c                           |   69 +-
+ blxview.h                           |  215 +-
+ blxwindow.c                         |  518 +--
+ blxwindow.h                         |   16 -
+ detailview.c                        |  367 +-
+ dotplot.c                           | 2646 +++++++++++++++
+ dotter.c                            | 6242 +++++++++++++++--------------------
+ dotter.h                            |   13 +-
+ dotterKarlin.c                      |   16 +-
+ dotterMain.c                        |   43 +-
+ dotter_.h                           |  232 +-
+ exonview.c                          |   35 +-
+ exonview.h                          |    7 +-
+ greyramptool.c                      |  791 +++++
+ seqtoolsExonView.c                  |  642 ++++
+ seqtoolsExonView.h                  |   43 +
+ sequencecellrenderer.c              |   28 +-
+ translate.c                         |    4 +-
+ utilities.c                         | 1815 ++++------
+ utilities.h                         |  232 +-
+ 34 files changed, 10789 insertions(+), 5957 deletions(-)
+
+2010-10-19  gb10  <gb10>
+ Use reading frame from file for exblx file format rather than calculating it
+ blxview.c   |  6 +-----
+ blxwindow.c | 14 ++++++++++++--
+ 2 files changed, 13 insertions(+), 7 deletions(-)
+
+2010-10-19  gb10  <gb10>
+ Fixed a regression where the reading frame was being calculated incorrectly
+ blxparser.c | 14 +++++++-------
+ blxview.c   |  8 ++++----
+ 2 files changed, 11 insertions(+), 11 deletions(-)
+
+2010-10-18  gb10  <gb10>
+ Added code to unescape the URL tag that is passed in the GFF file for variations
+ blxGff3Parser.c | 30 ++++--------------------------
+ blxview.c       |  8 +++++++-
+ 2 files changed, 11 insertions(+), 27 deletions(-)
+
+2010-10-18  gb10  <gb10>
+ Added variant_sequence to parsed tags
+ blxGff3Parser.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+2010-10-18  gb10  <gb10>
+ Fixed a bug with calculating the reading frame for CDSs on the reverse strand. Also removed some unnecessary warnings from the gff3 parser
+ blxGff3Parser.c |  4 +++-
+ blxwindow.c     | 49 +++++++++++++++++------------------------
+ utilities.c     | 68 ++++++++++++++++++++++++++++++---------------------------
+ 3 files changed, 59 insertions(+), 62 deletions(-)
+
+2010-10-08  gb10  <gb10>
+ Fixed a couple of potential memory bugs
+ blxdotter.c | 17 +++++++++++++++++
+ blxwindow.c |  7 +++++--
+ 2 files changed, 22 insertions(+), 2 deletions(-)
+
+2010-10-06  gb10  <gb10>
+ Renamed the 'GSettings' function to avoid a clash with Glib (glib2 port, version 2.26.0_0)
+ detailview.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+2010-10-06  gb10  <gb10>
+ Double-click a variation to open its URL
+ blxGff3Parser.c      |  26 +++++++++++
+ detailview.c         | 103 +++++++++++++++++++++++++++++--------------
+ detailview.h         |  11 +++++
+ detailviewtree.c     | 120 +++++++++++++++++++++++++++++++++++++++++++--------
+ seqtoolsWebBrowser.c |   6 +--
+ utilities.c          |   5 +++
+ utilities.h          |   4 +-
+ 7 files changed, 221 insertions(+), 54 deletions(-)
+
+2010-10-06  gb10  <gb10>
+ Added better code for calling a web browser and used this for pfetch-www mode
+ blixem_.h            |   3 +-
+ blxFetch.c           | 238 ++++++++++++++++---------------
+ seqtoolsWebBrowser.c | 387 +++++++++++++++++++++++++++++++++++++++++++++++++++
+ utilities.h          |   6 +-
+ 4 files changed, 516 insertions(+), 118 deletions(-)
+
+2010-10-05  gb10  <gb10>
+ Added parsing of URL for variations. Added variation alternatives to feedback box when user clicks on a variation
+ blixem_.h       |  4 ++--
+ blxGff3Parser.c | 16 +++++++++++-----
+ blxparser.c     | 14 +++++++-------
+ blxview.c       |  9 ++++++---
+ blxview.h       |  3 ++-
+ detailview.c    |  9 +++++++--
+ 6 files changed, 35 insertions(+), 20 deletions(-)
+
+2010-10-05  gb10  <gb10>
+ Fixed a small bug with SNP positioning
+ detailview.c | 12 ++++++++++--
+ 1 file changed, 10 insertions(+), 2 deletions(-)
+
+2010-10-05  gb10  <gb10>
+ Added copy_number_variation type
+ blxGff3Parser.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+2010-10-05  gb10  <gb10>
+ Added support for zero-length variations. Also we now only highlight a base in orange if it is part of a selected variation (before it used to highlight if the base index was selected).
+ blxwindow.c  |  18 +++++++----
+ blxwindow.h  |   2 ++
+ detailview.c | 101 ++++++++++++++++++++++++++++++++++++++++++++++++-----------
+ 3 files changed, 97 insertions(+), 24 deletions(-)
+
+2010-10-05  gb10  <gb10>
+ Fixed a regression where grid labels weren't being displayed when the display is reversed
+ bigpicture.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2010-10-05  gb10  <gb10>
+ Added a type for BlxSequence
+ blxFetch.c  | 14 +++++------
+ blxparser.c |  6 ++---
+ blxview.c   | 78 +++++++++++++++++++++++++++++++++++++------------------------
+ blxview.h   | 20 ++++++++++++----
+ utilities.c | 18 +++++++++++---
+ utilities.h |  2 ++
+ 6 files changed, 91 insertions(+), 47 deletions(-)
+
+2010-10-05  gb10  <gb10>
+ Added support for variations
+ blxFetch.c      |   8 +--
+ blxGff3Parser.c |   8 ++-
+ blxview.c       |  31 +++++------
+ blxview.h       |   9 ++--
+ detailview.c    | 158 ++++++++++++++++++++++++++++----------------------------
+ utilities.c     |  21 ++++++--
+ utilities.h     |   4 +-
+ 7 files changed, 132 insertions(+), 107 deletions(-)
+
+2010-10-05  gb10  <gb10>
+ Fixed a bug with drawing clipped intron lines
+ exonview.c | 29 ++++++++++++++---------------
+ 1 file changed, 14 insertions(+), 15 deletions(-)
+
+2010-10-04  gb10  <gb10>
+ Fixed a bug where introns were being drawn with more acute angles if the end goes out of the edge of the view
+ bigpicturegrid.c |  2 +-
+ exonview.c       | 69 +++++++++++++++++++++++++++-----------------------------
+ 2 files changed, 34 insertions(+), 37 deletions(-)
+
+2010-10-04  gb10  <gb10>
+ Changed the big picture to show coords on a per-nucleotide basis rather than per-peptide, which fixes a bug where there were sometimes gaps between adjacent exons and introns.
+ exonview.c | 121 ++++++++++++++++++++++++++++++++++++++++++++++---------------
+ 1 file changed, 92 insertions(+), 29 deletions(-)
+
+2010-10-04  gb10  <gb10>
+ Changed the big picture to show coords on a per-nucleotide basis rather than per-peptide, which fixes a bug where there were sometimes gaps between adjacent exons and introns.
+ bigpicture.c     | 100 +++++++++++++++++++++++++++++++----------------
+ bigpicture.h     |   8 ++--
+ bigpicturegrid.c |  50 ++++++++++++++----------
+ exonview.c       | 116 +++++++++++++++++++++++++++++++++++++++----------------
+ utilities.c      |  14 +++++++
+ utilities.h      |   7 ++++
+ 6 files changed, 204 insertions(+), 91 deletions(-)
+
+2010-09-30  gb10  <gb10>
+ Fixed a bug where the exon view was not displaying exons that span more than the width of the view
+ exonview.c | 17 ++++++++++-------
+ 1 file changed, 10 insertions(+), 7 deletions(-)
+
+2010-09-30  gb10  <gb10>
+ Fixed an off-by-one error when calculating intron start/end positions
+ blxview.c  | 6 +++---
+ exonview.c | 3 ++-
+ 2 files changed, 5 insertions(+), 4 deletions(-)
+
+2010-09-30  gb10  <gb10>
+ Fixed a bug with middle-dragging on the exon view when caps lock is on
+ exonview.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2010-09-30  gb10  <gb10>
+ Fixed some bugs with calculating introns and sorting by position on the reverse strand
+ blxview.c        |  4 ++--
+ detailview.c     |  4 +++-
+ detailviewtree.c | 45 ++++++++++++++++++++++++++++++++++++++++++++-
+ 3 files changed, 49 insertions(+), 4 deletions(-)
+
+2010-09-30  gb10  <gb10>
+ Fixed a bug where CDS/UTR boundaries were calculated incorrectly for exons on the reverse strand. Also fixed a bug where exon view was not redrawing on window resize
+ bigpicture.c           |  6 ++++++
+ blxview.c              | 50 ++++++++++++++++++++++++++++++++++++++++++--------
+ blxview.h              |  7 ++++---
+ detailview.c           |  2 +-
+ detailviewtree.c       | 13 +++++++++++--
+ sequencecellrenderer.c |  2 +-
+ 6 files changed, 65 insertions(+), 15 deletions(-)
+
+2010-09-29  gb10  <gb10>
+ Made the big picture scrollable, which fixes some issues where the big picture section can get too large when exons are bumped or the grid scale is changed
+ bigpicture.c | 113 +++++++++++++++++++++++++++++--------
+ bigpicture.h |   2 +-
+ blxwindow.c  |  47 +++++++++++++++-
+ detailview.c | 179 ++++++++++++++++++++++++++++-------------------------------
+ detailview.h |   2 +-
+ exonview.c   |   5 ++
+ utilities.c  |  26 +++++++++
+ utilities.h  |   2 +
+ 8 files changed, 255 insertions(+), 121 deletions(-)
+
+2010-09-28  gb10  <gb10>
+ Added polyA signal highlighting in the reference sequence
+ detailview.c | 96 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
+ utilities.c  | 37 +++++++++++++----------
+ utilities.h  |  1 +
+ 3 files changed, 111 insertions(+), 23 deletions(-)
+
+2010-09-28  gb10  <gb10>
+ Added flag for highlighting polyA signals in the reference sequence. Made higlighting of special bases in the reference sequence more generic
+ blxwindow.c            | 37 +++++++++++++---------
+ detailview.c           | 83 +++++++++++++++++++++++---------------------------
+ detailview.h           | 11 +------
+ detailviewtree.c       |  4 +--
+ sequencecellrenderer.c |  4 +--
+ utilities.c            |  4 +--
+ utilities.h            |  6 ++--
+ 7 files changed, 71 insertions(+), 78 deletions(-)
+
+2010-09-28  gb10  <gb10>
+ Fixed a bug with drawing exons introduced in previous changes
+ sequencecellrenderer.c |  2 +-
+ utilities.c            | 22 +++++++++++++++-------
+ utilities.h            |  2 +-
+ 3 files changed, 17 insertions(+), 9 deletions(-)
+
+2010-09-27  gb10  <gb10>
+ Highlight polyA tails in red
+ sequencecellrenderer.c | 19 +++++++++++++++----
+ utilities.c            | 14 ++++++++++++++
+ utilities.h            |  1 +
+ 3 files changed, 30 insertions(+), 4 deletions(-)
+
+2010-09-27  gb10  <gb10>
+ Can now view polyA tails
+ blxGff3Parser.c        |  14 +++--
+ blxview.c              |   9 ++-
+ blxwindow.c            | 165 +++++++++++++++++++++++++++----------------------
+ blxwindow.h            |  24 +------
+ detailview.c           |  22 +++----
+ detailview.h           |   1 -
+ detailviewtree.c       |  11 ++--
+ sequencecellrenderer.c |  13 ++--
+ utilities.c            |  86 ++++++++++++++++++++++----
+ utilities.h            |  50 +++++++++++++--
+ 10 files changed, 244 insertions(+), 151 deletions(-)
+
+2010-09-27  gb10  <gb10>
+ Added poly_site and polya_signal_sequence GFF types. Consolidated some code that calculates the full display range of an MSP including any unaligned portions of the match sequence
+ blxGff3Parser.c        |   2 +-
+ blxview.c              |   4 +-
+ blxview.h              |   4 +-
+ detailview.c           |   7 +--
+ detailviewtree.c       | 111 +++++------------------------------
+ sequencecellrenderer.c |  79 ++++++-------------------
+ utilities.c            | 153 ++++++++++++++++++++++++++++++++++++++-----------
+ utilities.h            |   7 ++-
+ 8 files changed, 164 insertions(+), 203 deletions(-)
+
+2010-09-27  gb10  <gb10>
+ Fixed a few bugs with gff input
+ blxGff3Parser.c | 24 +++++++++++++++++++-----
+ blxview.c       | 42 +++++++++++++++++++++++++-----------------
+ blxview.h       |  5 +++--
+ utilities.c     |  2 +-
+ utilities.h     |  2 +-
+ 5 files changed, 49 insertions(+), 26 deletions(-)
+
+2010-09-21  gb10  <gb10>
+ Fixed a bug where pfetch was being called multiple times when starting dotter. Changed the client name sent to pfetch from 'acedb' to the application name
+ blxFetch.c   |  6 +++---
+ blxdotter.c  | 55 +++++++++++++++++++++++++++++++------------------------
+ blxdotter.h  |  3 ++-
+ blxview.c    | 10 ++++++++--
+ blxwindow.c  |  2 +-
+ detailview.c |  2 +-
+ 6 files changed, 46 insertions(+), 32 deletions(-)
+
+2010-09-06  gb10  <gb10>
+ Fixed a bug with getting dotter coords from the current big-picture display range in protein blixem
+ blxdotter.c | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+2010-09-03  gb10  <gb10>
+ Added bounds-checking on manual dotter coords. Changed several dialogs so that they are not closed if there is an error with the data entered.
+ bigpicture.c |  18 ++++++--
+ bigpicture.h |   6 +--
+ blxFetch.c   |   6 ++-
+ blxdotter.c  |  91 ++++++++++++++++++++++++++++++----------
+ blxview.c    |  12 +++---
+ blxwindow.c  | 135 +++++++++++++++++++++++++++++++++++++++++++++--------------
+ utilities.c  |  40 ++++++++++++++----
+ utilities.h  |   6 +--
+ 8 files changed, 237 insertions(+), 77 deletions(-)
+
+2010-08-31  gb10  <gb10>
+ Removed some redundant code from dotter
+ dotter.c     | 44 +++-----------------------------------------
+ dotterMain.c |  7 +------
+ 2 files changed, 4 insertions(+), 47 deletions(-)
+
+2010-08-31  gb10  <gb10>
+ Replaced messcrash with g_error
+ dotter.c       |  8 +++++---
+ dotterKarlin.c |  7 ++-----
+ dotterMain.c   | 21 ++++++++-------------
+ 3 files changed, 15 insertions(+), 21 deletions(-)
+
+2010-08-31  gb10  <gb10>
+ Dotter: replaced messalloc/messfree by g_malloc/g_free. Removed some unused items from dotter_.h and removed use of dotter_.h from belvu because it doesn't seem to contain anything that is being used.
+ belvu.c        |   4 +-
+ blxdotter.c    |  46 +++++++++-------------
+ dotter.c       | 122 ++++++++++++++++++++++++++-------------------------------
+ dotter.h       |  10 ++---
+ dotterKarlin.c |  46 +++++++++++-----------
+ dotterMain.c   |  85 ++++++++++++++++++++++------------------
+ dotter_.h      |  27 ++-----------
+ 7 files changed, 151 insertions(+), 189 deletions(-)
+
+2010-08-31  gb10  <gb10>
+ Small error-checking improvements
+ blxGff3Parser.c | 2 +-
+ blxwindow.c     | 7 ++++---
+ 2 files changed, 5 insertions(+), 4 deletions(-)
+
+2010-08-31  gb10  <gb10>
+ Added a prefix to the 'organism' data field so that a narrow column width can be used that displays just the prefix
+ blxview.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++--
+ 1 file changed, 55 insertions(+), 2 deletions(-)
+
+2010-08-27  gb10  <gb10>
+ Fixed some GTK warnings that happen if all of the detail-view panes are hidden
+ detailview.c     | 16 ++++++++++------
+ detailviewtree.c |  2 +-
+ 2 files changed, 11 insertions(+), 7 deletions(-)
+
+2010-08-27  gb10  <gb10>
+ Fixed a couple of bugs with squash matches: go-to-next was highlighting the wrong frame for protein matches; MSPs for both strands were being added to each tree.
+ detailview.c     | 15 ++++++---------
+ detailviewtree.c | 56 ++++++++++++++++++++++++++++++++------------------------
+ 2 files changed, 38 insertions(+), 33 deletions(-)
+
+2010-08-27  gb10  <gb10>
+ Removed the need for the -F command line option when a single input file is used. If blixem is called with one input file, it is assumed to contain both alignment data and the reference sequence. If it is called with two files, the first is assumed to contain the reference sequence and the second the alignment data. The -F option has been left in for now for backwards compatibility.
+ blxmain.c | 27 +++++++++++++++------------
+ 1 file changed, 15 insertions(+), 12 deletions(-)
+
+2010-08-27  gb10  <gb10>
+ Fixed a couple of bugs with the GFF parser: sequence name was not being read from the header; fixed a problem with constructing introns
+ blxGff3Parser.c |  38 +++++++++---------
+ blxparser.c     |   9 ++---
+ blxview.c       | 118 +++++++++++++++++++++++++++++++++-----------------------
+ blxview.h       |   4 +-
+ 4 files changed, 95 insertions(+), 74 deletions(-)
+
+2010-08-26  gb10  <gb10>
+ Fixed a bug in the GFF parser to allow consecutive I and D's in CIGAR string
+ blxGff3Parser.c | 24 +++++++++++++-----------
+ 1 file changed, 13 insertions(+), 11 deletions(-)
+
+2010-08-26  gb10  <gb10>
+ Added range checking for big picture scale
+ bigpicture.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++++-------
+ 1 file changed, 49 insertions(+), 7 deletions(-)
+
+2010-08-26  gb10  <gb10>
+ A few improvements to GFF parsing
+ blxGff3Parser.c | 37 ++++++++++++++++++++-----------
+ blxview.c       | 14 +++++++++---
+ blxwindow.c     | 69 ++++++++++++++++++++++++++++++---------------------------
+ 3 files changed, 71 insertions(+), 49 deletions(-)
+
+2010-08-26  gb10  <gb10>
+ Updated blixem version and help
+ blixem_.h   |  4 ++--
+ blxwindow.c | 31 +++++++++++++++++--------------
+ 2 files changed, 19 insertions(+), 16 deletions(-)
+
+2010-08-26  gb10  <gb10>
+ Fixed a bug with the detail-view statusbar when 'squash matches' is enabled
+ detailviewtree.c | 25 +++++++++++++------------
+ utilities.c      | 32 ++++++++++++++++++++------------
+ utilities.h      |  2 +-
+ 3 files changed, 34 insertions(+), 25 deletions(-)
+
+2010-08-26  gb10  <gb10>
+ Added two status bars: one for messages and one for feeding back info about the currently moused-over item. Fixed a bug with parsing peptide sequence data from seqbl files. Fixed some bugs with negative offset: some termini were being shown as splice sites; go-to-next match was sometimes messing up.
+ blixem_.h              |   5 +-
+ blxFetch.c             |  53 +-----
+ blxdotter.c            |   8 +-
+ blxparser.c            |  65 +++++--
+ blxview.c              | 463 ++++++++++++++++++++++++++++++++++++++++++++++---
+ blxwindow.c            |  36 ++--
+ blxwindow.h            |   2 +
+ detailview.c           |  53 ++++--
+ detailview.h           |   1 +
+ detailviewtree.c       | 119 ++++++++++++-
+ sequencecellrenderer.c |  19 +-
+ utilities.c            | 443 +++++++++++-----------------------------------
+ utilities.h            |   9 +-
+ 13 files changed, 789 insertions(+), 487 deletions(-)
+
+2010-08-24  gb10  <gb10>
+ Parse actual name out of Gene Name field rather than including the whole line
+ blixem_.h   |   3 +-
+ blxparser.c |   5 +-
+ blxview.c   | 288 +++++++++++++++++++++++++++++++++---------------------------
+ 3 files changed, 161 insertions(+), 135 deletions(-)
+
+2010-08-24  gb10  <gb10>
+ Added support for grouping exons by parent transcript ID (i.e. as passed in GFF format). Added full support for CDS/UTR types. Calculate the reading frame, using the given phase, if applicable. Changed score and ID to be decimal values rather than integers and allow grid scale to show fractions of an integer per cell. Reduced exon size and padding when the exon view is bumped. Added GT-AG to list of canonical splice sites. Removed incorrect splice-site highlighting which was being shown [...]
+ bigpicture.c           |  27 ++--
+ bigpicture.h           |  16 +--
+ bigpicturegrid.c       |  32 +++--
+ bigpicturegrid.h       |   2 +-
+ blixem_.h              |  18 +--
+ blxGff3Parser.c        | 346 ++++++++++++++++++++++++--------------------
+ blxdotter.c            |   4 +-
+ blxparser.c            |  40 +++---
+ blxview.c              | 380 +++++++++++++++++++++++++++++++++++++++++++++----
+ blxview.h              |  75 +++++-----
+ blxwindow.c            | 177 +++++++++++++++--------
+ blxwindow.h            |   3 +-
+ detailview.c           |  22 +--
+ detailviewtree.c       |  87 +++++++----
+ dotter.c               |  75 +++++-----
+ dotter.h               |   4 +-
+ dotterMain.c           |   6 +-
+ exonview.c             |  28 +++-
+ sequencecellrenderer.c |  81 +++++++----
+ utilities.c            | 216 ++++++++++++++++++++--------
+ utilities.h            |  13 +-
+ 21 files changed, 1138 insertions(+), 514 deletions(-)
+
+2010-08-17  gb10  <gb10>
+ Fixed a bug where blixem was quitting if pfetch returned 'no match' on startup
+ blxFetch.c | 33 +++++++++++++--------------------
+ 1 file changed, 13 insertions(+), 20 deletions(-)
+
+2010-08-16  gb10  <gb10>
+ Fixed some bugs with GFF parser
+ blxFetch.c  |  9 ++----
+ blxparser.c | 70 ++++++++++++++++++++++++++++++-------------
+ blxview.c   | 99 ++++++++++++++++++++++++++++++++++++-------------------------
+ 3 files changed, 109 insertions(+), 69 deletions(-)
+
+2010-08-06  gb10  <gb10>
+ Added a iist of supported GFF types
+ blixem_.h        |   9 ++-
+ blxGff3Parser.c  | 225 +++++++++++++++++++++++++++++--------------------------
+ blxGff3Parser_.h |  21 ++++--
+ blxmain.c        |  10 ++-
+ blxparser.c      |  18 ++---
+ blxselect.c      |   7 +-
+ blxview.c        |  10 ++-
+ blxview.h        |   3 +-
+ blxwindow.c      |  15 +++-
+ blxwindow.h      |   2 +
+ dotterMain.c     |   7 +-
+ 11 files changed, 187 insertions(+), 140 deletions(-)
+
+2010-08-06  gb10  <gb10>
+ Fixed a bug with parsing EMBL tags that span multiple lines
+ blxFetch.c | 76 +++++++++++++++++++++++++++++++++-----------------------------
+ 1 file changed, 41 insertions(+), 35 deletions(-)
+
+2010-08-05  gb10  <gb10>
+ Fixed a bug where the default response was being lost on the second call for some dialogs
+ blxwindow.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+2010-08-05  gb10  <gb10>
+ Removed a spurious popup message that happens when pfetching full entries on startup fails (because pfetching just the fasta sequence may still work fine)
+ blxFetch.c | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+2010-08-05  gb10  <gb10>
+ Fixed a bug with the clipped-match marker where it was drawn the wrong side of the base when the display is reversed
+ sequencecellrenderer.c | 30 ++++++++++++++++++++++++++----
+ 1 file changed, 26 insertions(+), 4 deletions(-)
+
+2010-08-05  gb10  <gb10>
+ Added pfetch of additional EMBL info for pfetch-http mode. Added marker to indicate if a match has a missing section where it has been clipped to the reference sequence range. Created a replacement for the old acedb message system. Made relevant dialogs persistent and added functionality to make them refresh their data when necessary.
+ blixem_.h              |  14 +-
+ blxFetch.c             | 732 ++++++++++++++++++++++---------------------------
+ blxdotter.c            | 103 +++++--
+ blxdotter.h            |   2 +-
+ blxmain.c              |  47 +---
+ blxview.c              | 156 +++++++++--
+ blxview.h              |  23 +-
+ blxwindow.c            | 498 ++++++++++++++++++++++++---------
+ blxwindow.h            |  45 ++-
+ detailview.c           |  23 +-
+ detailviewtree.c       |   5 +-
+ sequencecellrenderer.c |  32 +++
+ utilities.c            | 405 +++++++++++++++++++++++++--
+ utilities.h            |   8 +-
+ 14 files changed, 1416 insertions(+), 677 deletions(-)
+
+2010-07-27  gb10  <gb10>
+ fixed some uninitialised value warnings
+ sequencecellrenderer.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+2010-07-26  gb10  <gb10>
+ Added missing function definition for showInfoDialog
+ blxwindow.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+2010-07-26  gb10  <gb10>
+ Added sequence-info dialog
+ blxwindow.c  | 53 ++++++++++++++++++++++++++++++++++++++-
+ detailview.c | 28 ++++++---------------
+ utilities.c  | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ utilities.h  |  2 ++
+ 4 files changed, 144 insertions(+), 21 deletions(-)
+
+2010-07-26  gb10  <gb10>
+ Fixed a bug where the detail-view-trees were scrolling vertically on a middle- or right- click
+ detailviewtree.c | 14 ++++++--------
+ 1 file changed, 6 insertions(+), 8 deletions(-)
+
+2010-07-23  gb10  <gb10>
+ Removed more of the acedb package from blixem. Fixed a bug in the new pfetch code where it was getting data in the wrong order when data was loaded from the settings dialog rather than at startup.
+ bigpicture.c           |   2 +-
+ blixem_.h              |  26 ++++--
+ blxFetch.c             | 192 ++++++++++++++++++++++++++++-----------
+ blxGff3Parser.c        |   7 +-
+ blxdotter.c            |   4 +-
+ blxmain.c              |  38 ++++----
+ blxparser.c            | 179 +++++++++++++++++++++---------------
+ blxselect.c            | 191 ++++++++++++++++++++++++++++-----------
+ blxview.c              | 180 +++++++++++++++++++-----------------
+ blxview.h              |  10 +-
+ blxwindow.c            |  37 +++++---
+ detailview.c           |   3 +
+ detailviewtree.c       |   5 +
+ dotter.c               | 241 +++++++++++++++++++++++++++++++------------------
+ exonview.c             |   1 +
+ sequencecellrenderer.c |   4 +-
+ utilities.c            | 142 ++++++++++++++++++++++++-----
+ utilities.h            |   2 +
+ 18 files changed, 832 insertions(+), 432 deletions(-)
+
+2010-07-21  gb10  <gb10>
+ Renamed ColumnId to BlxColumnId
+ blixem_.h        |  8 ++++----
+ blxwindow.h      |  2 +-
+ detailview.c     | 24 ++++++++++++------------
+ detailview.h     | 12 ++++++------
+ detailviewtree.c | 10 +++++-----
+ 5 files changed, 28 insertions(+), 28 deletions(-)
+
+2010-07-21  gb10  <gb10>
+ Removed an unused variable
+ blxFetch.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+2010-07-21  gb10  <gb10>
+ Added help for the fetch-additional-data option.
+ blxwindow.c | 19 ++++++++++++-------
+ 1 file changed, 12 insertions(+), 7 deletions(-)
+
+2010-07-21  gb10  <gb10>
+ Added a warning if pfetch net id and port are not provided in the command line, env vars or config file.
+ blxFetch.c | 32 ++++++++++++++++++++++++++++----
+ 1 file changed, 28 insertions(+), 4 deletions(-)
+
+2010-07-21  gb10  <gb10>
+ Fixed an issue where pfetch port and net_id were not being set if user changes to the pfetch mode from a different default mode.
+ blixem_.h  |  3 ++-
+ blxFetch.c | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
+ blxview.c  | 62 +---------------------------------------------------
+ 3 files changed, 76 insertions(+), 63 deletions(-)
+
+2010-07-21  gb10  <gb10>
+ Added functionality to parse additional info from the EMBL files such as organism and tissue-type. Added a command-line option to fetch this on startup and an option in the settings dialog to populate the data later, since it may be slower fetching the full EMBL files. (Although for nucleotide sequences it does not seem to be slower so in that case it always fetches the extra info.). Also fixed a bug where a crash was possible if the input s coords were out of the range of the given s s [...]
+ blixem_.h              |  32 +-
+ blxFetch.c             | 979 +++++++++++++++++++++++++++++++++++++++++--------
+ blxdotter.c            |  10 +-
+ blxmain.c              |  20 +-
+ blxview.c              | 312 +++++++++++-----
+ blxview.h              |  12 +-
+ blxwindow.c            | 138 ++++++-
+ blxwindow.h            |   7 +-
+ detailview.c           | 115 +++++-
+ detailview.h           |   7 +-
+ detailviewtree.c       | 205 ++++++++---
+ sequencecellrenderer.c |  58 ++-
+ utilities.c            |  62 +++-
+ utilities.h            |  20 +-
+ 14 files changed, 1615 insertions(+), 362 deletions(-)
+
+2010-07-15  gb10  <gb10>
+ Fixed a bug where middle-clicking in the tree headers was sometimes not working. Improved middle-clicking so that it now works on empty trees as well.
+ detailview.c     | 190 ++++++++++++++++++++++++++++++++---
+ detailview.h     |   1 +
+ detailviewtree.c | 296 +++++++++++++------------------------------------------
+ 3 files changed, 249 insertions(+), 238 deletions(-)
+
+2010-07-15  gb10  <gb10>
+ Added basic type for polyA tails
+ blxGff3Parser.c        |  9 ++++++++
+ blxview.c              |  6 ++---
+ blxview.h              |  4 +++-
+ blxwindow.c            |  5 +++++
+ detailview.c           |  4 ++--
+ detailviewtree.c       | 61 ++++++++++++++++++++++++++++++++++----------------
+ sequencecellrenderer.c | 16 ++++++++++++-
+ utilities.c            | 14 ++++++++----
+ utilities.h            |  1 +
+ 9 files changed, 90 insertions(+), 30 deletions(-)
+
+2010-07-14  gb10  <gb10>
+ Added option to select fetch mode. Fixed an issue where the background color changed slightly if you hit ok on the settings dialog.
+ blixem_.h    |  3 ++-
+ blxFetch.c   | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
+ blxwindow.c  | 47 ++++++++++++++++++----------------
+ detailview.c |  6 -----
+ 4 files changed, 108 insertions(+), 30 deletions(-)
+
+2010-07-13  gb10  <gb10>
+ RT58135: When pfetching a protein variant, pfetch with the -F option fails, so re-try without the -F option so that at least we get the fasta sequence. Also fixed a bug where the show-unaligned-sequence option was not working when Blixem was run in pfetch-http mode
+ blixem_.h   |  12 +++++-
+ blxFetch.c  | 126 +++++++++++++++++++++++++++++++++++++++++++++++-------------
+ blxview.c   |  19 ++++-----
+ blxwindow.c |   9 -----
+ 4 files changed, 120 insertions(+), 46 deletions(-)
+
+2010-07-12  gb10  <gb10>
+ Removed use of the Gex package from blxFetch.c
+ blixem_.h   |  3 +-
+ blxFetch.c  | 98 ++++++++++++++++++++++++++++++++++---------------------------
+ blxwindow.c |  2 +-
+ utilities.c | 65 +++++++++++++++++++++++++---------------
+ utilities.h |  8 +++--
+ 5 files changed, 104 insertions(+), 72 deletions(-)
+
+2010-07-12  gb10  <gb10>
+ Fixed a bug where pfetch was sometimes failing to display the results because it was trying to apply pango markup
+ blxFetch.c  | 78 +++++++++++++++++++++++++++++++------------------------------
+ blxwindow.c |  2 +-
+ utilities.c | 15 ++++++++----
+ utilities.h |  2 ++
+ 4 files changed, 54 insertions(+), 43 deletions(-)
+
+2010-07-12  gb10  <gb10>
+ added comments
+ blixem_.h | 12 +++++++++++-
+ 1 file changed, 11 insertions(+), 1 deletion(-)
+
+2010-07-12  gb10  <gb10>
+ Made creation of tree columns more generic. Added Group and Source columns.
+ bigpicture.c           |  16 ++--
+ bigpicturegrid.c       |  10 +--
+ blixem_.h              |  44 +++++++---
+ blxview.c              |  28 +++----
+ blxview.h              |  60 ++++++-------
+ blxwindow.c            |  84 +++++++++----------
+ blxwindow.h            |   2 +-
+ detailview.c           | 224 ++++++++++++++++++-------------------------------
+ detailview.h           |  35 ++------
+ detailviewtree.c       | 190 +++++++++++++++++++++--------------------
+ detailviewtree.h       |   8 +-
+ exonview.c             |   2 +-
+ sequencecellrenderer.c |  34 ++++----
+ utilities.c            |  12 +--
+ utilities.h            |   2 +-
+ 15 files changed, 346 insertions(+), 405 deletions(-)
+
+2010-07-09  gb10  <gb10>
+ Added 'source' column
+ blxGff3Parser.c  |  3 +-
+ blxview.c        | 37 ++-----------------------
+ blxview.h        |  7 +++--
+ detailview.c     | 60 ++++++++++++++++++++++++++--------------
+ detailview.h     | 48 +++++++++++++++-----------------
+ detailviewtree.c | 83 ++++++++++++++++++++++++++++++--------------------------
+ 6 files changed, 114 insertions(+), 124 deletions(-)
+
+2010-07-09  gb10  <gb10>
+ Rearranged tree column code to more easily allow additional columns to be added
+ detailviewtree.c | 155 ++++++++++++++++++++++++++++++++-----------------------
+ 1 file changed, 91 insertions(+), 64 deletions(-)
+
+2010-07-08  gb10  <gb10>
+ Replaced custom cell-renderer properties with a generic text property
+ blxwindow.c            |   2 +-
+ detailview.c           |  30 ++++-----
+ detailview.h           |  31 ++++-----
+ detailviewtree.c       | 172 ++++++++++++++++++++++++-------------------------
+ sequencecellrenderer.c | 123 +++++------------------------------
+ sequencecellrenderer.h |  15 +++--
+ 6 files changed, 138 insertions(+), 235 deletions(-)
+
+2010-07-08  gb10  <gb10>
+ Rearranged detail-view column code
+ detailview.c | 95 ++++++++++++++++++++++++++++++++++++++++--------------------
+ 1 file changed, 63 insertions(+), 32 deletions(-)
+
+2010-07-08  gb10  <gb10>
+ Added more help text
+ blxwindow.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+2010-07-08  gb10  <gb10>
+ Fixed a memory bug caused by the opts string not having a terminating null character.
+ blxmain.c    | 29 +++++++++++++++++++++++++++--
+ blxparser.c  | 14 +++++++++-----
+ blxview.c    |  8 ++++----
+ blxwindow.c  |  2 +-
+ blxwindow.h  |  4 ++--
+ detailview.c |  2 +-
+ 6 files changed, 44 insertions(+), 15 deletions(-)
+
+2010-07-08  gb10  <gb10>
+ Added splice-site highlighting. Fixed a bug where the bottom cell of the grid was not visible.
+ bigpicturegrid.c       |   2 +-
+ blxview.c              |  16 +-
+ blxview.h              |   4 +-
+ blxwindow.c            | 559 ++++++++++++++++++++++++++++++----------------
+ blxwindow.h            |  24 +-
+ detailview.c           | 586 ++++++++++++++++++++++++++++++++++++++-----------
+ detailview.h           |  59 +++--
+ detailviewtree.c       |  31 +--
+ sequencecellrenderer.c |   6 +-
+ 9 files changed, 923 insertions(+), 364 deletions(-)
+
+2010-07-01  gb10  <gb10>
+ Made the highlight box extend over the exon view (previously it was just shown on the grids, which is not adequate now that the exon view can be bumped and can take up quite a large area). To facilitate this and make it less cluttered I changed the highlight box from a blue outline (shown separately on each grid) to a shaded region that spans across all of the visible big picture widgets.
+ bigpicture.c     | 104 ++++++++++++++++++++++++++++++++-
+ bigpicture.h     |  10 +++-
+ bigpicturegrid.c | 175 +++++++------------------------------------------------
+ bigpicturegrid.h |   5 --
+ blxGff3Parser.c  |  12 +++-
+ blxselect.c      |   4 +-
+ blxwindow.c      |  16 +++--
+ exonview.c       | 125 ++++++++++++++++++++++++---------------
+ exonview.h       |   5 ++
+ utilities.c      |  20 +++++++
+ utilities.h      |   1 +
+ 11 files changed, 263 insertions(+), 214 deletions(-)
+
+2010-07-01  gb10  <gb10>
+ Added code to get MSP colors from key file
+ bigpicture.c           |   4 +-
+ bigpicturegrid.c       |  10 +-
+ blixem_.h              |   9 +-
+ blxmain.c              |  55 ++++++++---
+ blxview.c              | 140 +++++++++++++++++++++++----
+ blxview.h              |  59 +++++++++++-
+ blxwindow.c            |  82 +++++++---------
+ blxwindow.h            |   4 +-
+ detailview.c           |  16 ++--
+ detailviewtree.c       |   2 +-
+ exonview.c             |  43 ++-------
+ sequencecellrenderer.c |  32 +++----
+ utilities.c            | 250 +++++++++++++++++++++++++++++++++++--------------
+ utilities.h            |  58 +-----------
+ 14 files changed, 478 insertions(+), 286 deletions(-)
+
+2010-06-29  gb10  <gb10>
+ Fixed a bug in searching for sequence names
+ blxwindow.c | 51 +++++++++++++++++++++++++++++++++++++++++++--------
+ 1 file changed, 43 insertions(+), 8 deletions(-)
+
+2010-06-29  gb10  <gb10>
+ Fixed bug where sequence name prefix was not being shown in feedback box
+ utilities.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+2010-06-29  gb10  <gb10>
+ Fixed bug with new key file option not being read from command line
+ blxmain.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+2010-06-28  gb10  <gb10>
+ Added colors/styles key file parser
+ blixem_.h        | 12 +++++--
+ blxFetch.c       |  4 ++-
+ blxGff3Parser.c  | 78 ++++-----------------------------------------
+ blxGff3Parser_.h |  3 +-
+ blxmain.c        | 84 +++++++++++++++++++++++++++++++++++++++++++++----
+ blxparser.c      | 12 +++----
+ blxview.c        | 96 ++++++++++++++++++++++++++++++++++++++++++++------------
+ blxview.h        | 17 +++++++---
+ blxwindow.c      | 30 +++++++++++-------
+ dotterMain.c     |  4 +--
+ utilities.c      | 65 +++++++++++++++++++++-----------------
+ utilities.h      |  4 +--
+ 12 files changed, 251 insertions(+), 158 deletions(-)
+
+2010-06-25  gb10  <gb10>
+ Added Help documentation for new features. Added code to allow GtkTextView to use pango markup
+ blxwindow.c | 319 ++++++++++++++++++++++++++++++++----------------------------
+ utilities.c | 271 ++++++++++++++++++++++++++++++++++++++++++++++++++-
+ utilities.h |  19 ++++
+ 3 files changed, 457 insertions(+), 152 deletions(-)
+
+2010-06-24  gb10  <gb10>
+ Added DNA search facility and tweaked some colours.
+ blxdotter.c |  14 +-
+ blxwindow.c | 604 +++++++++++++++++++++++++++++++++++++++++++++++++-----------
+ utilities.c | 145 ++++++++-------
+ utilities.h |  33 ++--
+ 4 files changed, 607 insertions(+), 189 deletions(-)
+
+2010-06-21  gb10  <gb10>
+ Moved addBlxSequenceData and mspHasFs to blxview.c so they can be found by the xace build
+ blxparser.c | 76 +------------------------------------------------------------
+ blxview.c   | 62 ++++++++++++++++++++++++++++++++++++++++++++++++-
+ 2 files changed, 62 insertions(+), 76 deletions(-)
+
+2010-06-21  gb10  <gb10>
+ Added option to view unaligned parts of match sequences
+ bigpicturegrid.c       |   8 +-
+ blxGff3Parser.c        |  45 +++++------
+ blxdotter.c            |  10 ++-
+ blxparser.c            |  34 ++++++---
+ blxview.c              |  22 ++----
+ blxview.h              |  20 +++--
+ blxwindow.c            | 131 +++++++++++++++++++++++++++-----
+ blxwindow.h            |   1 +
+ detailview.c           |  78 +++++++++++++++++--
+ detailview.h           |  11 +++
+ detailviewtree.c       | 136 ++++++++++++++++++++++++++-------
+ dotter.c               |  63 ++++++++--------
+ dotterMain.c           |  10 ++-
+ exonview.c             |   8 +-
+ sequencecellrenderer.c |  97 +++++++++++++++++++-----
+ utilities.c            | 201 +++++++++++++++++++++++++++++++++++++------------
+ utilities.h            |  31 +++++---
+ 17 files changed, 669 insertions(+), 237 deletions(-)
+
+2010-06-16  gb10  <gb10>
+ Fixed bug in color parser code
+ blxview.c | 63 ++++++++++++++++++++++++++++++++++++++++++++-------------------
+ 1 file changed, 44 insertions(+), 19 deletions(-)
+
+2010-06-16  gb10  <gb10>
+ Added basic facility to parse colors in GFF files
+ blxGff3Parser.c | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
+ blxview.c       | 12 +++++++++-
+ blxview.h       |  6 ++++-
+ 3 files changed, 86 insertions(+), 3 deletions(-)
+
+2010-06-15  gb10  <gb10>
+ Fixed an incorrect SO value in the GFF parser. Misc tidying.
+ blxGff3Parser.c |  2 +-
+ blxwindow.c     | 18 +++++++++---------
+ utilities.c     | 13 ++++++++++---
+ utilities.h     |  4 ++--
+ 4 files changed, 22 insertions(+), 15 deletions(-)
+
+2010-06-15  gb10  <gb10>
+ Added match set type
+ blxGff3Parser.c | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++-----
+ blxview.h       |  5 ++--
+ 2 files changed, 69 insertions(+), 8 deletions(-)
+
+2010-06-14  gb10  <gb10>
+ GFF 3 parser now handles SO numbers and frameshift operators
+ blxGff3Parser.c | 55 +++++++++++++++++++++++++++++--------------------------
+ utilities.c     |  7 ++++++-
+ 2 files changed, 35 insertions(+), 27 deletions(-)
+
+2010-06-14  gb10  <gb10>
+ Fixed some bugs with the GFF3 parser. Added the 'R|r' option back in (to show/hide the reverse strand grid)
+ bigpicture.c           |   1 -
+ blixem_.h              |  20 +++++-
+ blxFetch.c             |  12 ++--
+ blxGff3Parser.c        | 191 +++++++++++++++++++++++++++++++------------------
+ blxGff3Parser_.h       |   9 ---
+ blxdotter.c            |   3 +-
+ blxmain.c              |  23 ++----
+ blxparser.c            |  59 ++++-----------
+ blxview.c              |  14 ++--
+ blxwindow.c            |  15 ++--
+ blxwindow.h            |   2 +-
+ detailview.c           |   3 +-
+ detailviewtree.c       |   3 +-
+ sequencecellrenderer.c |   3 +-
+ utilities.c            |  25 +++++++
+ utilities.h            |   1 +
+ 16 files changed, 209 insertions(+), 175 deletions(-)
+
+2010-06-11  gb10  <gb10>
+ Added GFF3 parser
+ blxGff3Parser_.h | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 79 insertions(+)
+
+2010-06-11  gb10  <gb10>
+ Added GFF3 parser
+ blxGff3Parser.c | 653 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 653 insertions(+)
+
+2010-06-11  gb10  <gb10>
+ Added GFF3 parser. Removed g_prefix_error and g_propagate_prefixed_error because they're not in our current linux GTK version
+ bigpicture.c           |    8 +-
+ bigpicturegrid.c       |    4 +-
+ blixem_.h              |  325 ++++++++------
+ blxFetch.c             |  451 +++++++++----------
+ blxdotter.c            |   51 +--
+ blxmain.c              |   58 ++-
+ blxparser.c            | 1143 ++++++++++++++++++++++++++++--------------------
+ blxselect.c            |    9 +-
+ blxview.c              |  409 ++++++++++++-----
+ blxview.h              |  131 +++---
+ blxwindow.c            |  486 ++++++++++----------
+ blxwindow.h            |   18 +-
+ detailview.c           |   47 +-
+ detailviewtree.c       |   60 +--
+ dotter.c               |   37 +-
+ dotterMain.c           |   10 +-
+ exonview.c             |   59 ++-
+ sequencecellrenderer.c |   49 ++-
+ translate.c            |  144 +-----
+ utilities.c            |  508 ++++++++++++++-------
+ utilities.h            |   75 +++-
+ 21 files changed, 2342 insertions(+), 1740 deletions(-)
+
+2010-05-26  gb10  <gb10>
+ More refactoring of parser code. Fixed a bug where an invalid match frame was being set when reading old format exblx files
+ bigpicturegrid.c       |   2 +-
+ blixem_.h              |   6 +-
+ blxdotter.c            |   6 +-
+ blxparser.c            | 460 ++++++++++++++++++++++++++++---------------------
+ blxview.h              |  12 +-
+ blxwindow.c            |  32 ++--
+ blxwindow.h            |  17 +-
+ detailview.c           |   6 +-
+ detailviewtree.c       |  30 ++--
+ exonview.c             |   4 +-
+ sequencecellrenderer.c |   2 +-
+ utilities.c            |  46 ++---
+ utilities.h            |  10 +-
+ 13 files changed, 349 insertions(+), 284 deletions(-)
+
+2010-05-25  gb10  <gb10>
+ More refactoring of parser code
+ blxparser.c | 99 ++++++++++++++++++++++++++++++-------------------------------
+ 1 file changed, 48 insertions(+), 51 deletions(-)
+
+2010-05-25  gb10  <gb10>
+ Added a proper MSP type. Separated this out from the data type used by the parser, which is only used to record what kind of data is currently being parsed.
+ blixem_.h    |   5 +-
+ blxparser.c  | 273 +++++++++++++++++++++++++++++++++++++++--------------------
+ blxview.c    |   5 +-
+ blxview.h    |  94 ++++++++++----------
+ dotter.c     |  28 +++---
+ dotterMain.c |   9 +-
+ 6 files changed, 252 insertions(+), 162 deletions(-)
+
+2010-05-25  gb10  <gb10>
+ Tidied Feature Series code
+ blixem_.h    |  49 ++-----------------
+ blxparser.c  | 112 +++++++++++++++++++++++++++----------------
+ blxview.c    |  34 +------------
+ blxview.h    |  27 +++++++----
+ dotter.c     | 153 +++++++++++++++++++++++++++++++++++------------------------
+ dotterMain.c |   6 +--
+ utilities.h  |   6 ++-
+ 7 files changed, 192 insertions(+), 195 deletions(-)
+
+2010-05-25  gb10  <gb10>
+ Started tidying dotter code
+ dotterMain.c | 514 ++++++++++++++++++++++++++++++++++-------------------------
+ 1 file changed, 296 insertions(+), 218 deletions(-)
+
+2010-05-24  gb10  <gb10>
+ Tidied help text code
+ blxwindow.c | 349 ++++++++++++++++++++++++++++++------------------------------
+ 1 file changed, 175 insertions(+), 174 deletions(-)
+
+2010-05-21  gb10  <gb10>
+ Fixed a bug in the refactored parser code
+ blxparser.c | 22 +++++++++++-----------
+ 1 file changed, 11 insertions(+), 11 deletions(-)
+
+2010-05-21  gb10  <gb10>
+ Added dotter vs self and hsps-only options
+ blxdotter.c | 295 ++++++++++++++++++++++++++++++++++++++++++------------------
+ 1 file changed, 206 insertions(+), 89 deletions(-)
+
+2010-05-20  gb10  <gb10>
+ More tidying of the parser code
+ blxparser.c | 1080 +++++++++++++++++++++++++++++++----------------------------
+ blxview.h   |   10 +-
+ 2 files changed, 568 insertions(+), 522 deletions(-)
+
+2010-05-20  gb10  <gb10>
+ Improved error handling. Started replacing acedb messages with GLib messages
+ bigpicturegrid.c       |   2 +-
+ blxFetch.c             |  40 +++---
+ blxdotter.c            | 326 ++++++++++++++++++++++++++++---------------------
+ blxdotter.h            |   2 +-
+ blxmain.c              |  24 ++--
+ blxparser.c            |  56 ++++-----
+ blxselect.c            |   4 +-
+ blxview.c              |  21 +++-
+ blxwindow.c            |  53 ++++++--
+ blxwindow.h            |   3 +-
+ detailview.c           | 136 +++++++++++----------
+ detailviewtree.c       | 101 ++++++++-------
+ sequencecellrenderer.c |  76 ++++++------
+ utilities.c            |  44 ++++++-
+ utilities.h            |   2 +
+ 15 files changed, 525 insertions(+), 365 deletions(-)
+
+2010-05-19  gb10  <gb10>
+ Removed some unused code
+ blxmain.c | 16 +---------------
+ 1 file changed, 1 insertion(+), 15 deletions(-)
+
+2010-05-19  gb10  <gb10>
+ Related to RT ticket 169930: blixem was passing an incorrect offset to dotter
+ blxdotter.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2010-05-19  gb10  <gb10>
+ Code tidying: renamed Strand to BlxStrand and SortByType to BlxSortMode; rearranged parser code
+ bigpicture.c           |   8 +-
+ bigpicturegrid.c       |   6 +-
+ bigpicturegrid.h       |   6 +-
+ blixem_.h              |   8 +-
+ blxdotter.c            |   8 +-
+ blxdotter.h            |   2 +-
+ blxparser.c            | 729 ++++++++++++++++++++++++++-----------------------
+ blxview.c              |  16 +-
+ blxwindow.c            |  34 +--
+ blxwindow.h            |  26 +-
+ detailview.c           | 104 +++----
+ detailview.h           |  16 +-
+ detailviewtree.c       |  22 +-
+ detailviewtree.h       |   4 +-
+ dotter.c               |  50 ++--
+ dotter_.h              |   4 +-
+ exonview.c             |   9 +-
+ exonview.h             |   4 +-
+ iupac.h                |   4 +-
+ sequencecellrenderer.c |   2 +-
+ translate.c            |   8 +-
+ utilities.c            |  17 +-
+ utilities.h            |   8 +-
+ 23 files changed, 570 insertions(+), 525 deletions(-)
+
+2010-05-18  gb10  <gb10>
+ Removed call to gdk_color_to_string, which is incompatible with our current version of GDK
+ blxwindow.c | 30 +++++++++++++++++++++++++-----
+ 1 file changed, 25 insertions(+), 5 deletions(-)
+
+2010-05-18  gb10  <gb10>
+ Code tidying
+ blxparser.c |  18 ++----
+ blxview.c   | 181 +-----------------------------------------------------------
+ blxview.h   |  21 +------
+ 3 files changed, 7 insertions(+), 213 deletions(-)
+
+2010-05-18  gb10  <gb10>
+ Destroy colors properly
+ blxwindow.c | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+2010-05-18  gb10  <gb10>
+ Fix for RT169901: make exons the same direction as their ref seq strand
+ translate.c | 19 +++++++++++++++----
+ 1 file changed, 15 insertions(+), 4 deletions(-)
+
+2010-05-17  gb10  <gb10>
+ Fixed a few bugs with selections
+ blxwindow.c      |  14 ++++++++
+ blxwindow.h      |   1 +
+ detailviewtree.c | 108 ++++++++++++++++++++++++++++++++++++++++++++++---------
+ 3 files changed, 107 insertions(+), 16 deletions(-)
+
+2010-05-17  gb10  <gb10>
+ Made coord conversion functions more robust against invalid input
+ utilities.c | 88 +++++++++++++++++++++++++++++++++----------------------------
+ 1 file changed, 47 insertions(+), 41 deletions(-)
+
+2010-05-17  gb10  <gb10>
+ Changed the way selections work because this was causing a bug where sometimes the cell renderer would not render a row that should have been visible
+ bigpicturegrid.c | 102 ++++++----------
+ blxview.c        |   4 +-
+ blxwindow.c      |  78 +++++++-----
+ blxwindow.h      |   9 +-
+ detailview.c     |  29 ++++-
+ detailview.h     |   6 +
+ detailviewtree.c | 352 ++++++++++++++++++++++++++-----------------------------
+ detailviewtree.h |   5 +-
+ 8 files changed, 296 insertions(+), 289 deletions(-)
+
+2010-05-14  gb10  <gb10>
+ Made SNP stuff more flexible so they can be drawn with different colour outline and fill colours
+ blxwindow.c      |   1 -
+ detailview.c     | 207 ++++++++++++++++++++++++++++++++++++++++++++-----------
+ detailview.h     |  18 +++++
+ detailviewtree.c |  98 ++------------------------
+ detailviewtree.h |  13 ----
+ 5 files changed, 190 insertions(+), 147 deletions(-)
+
+2010-05-13  gb10  <gb10>
+ Added black-and-white colour option for printing. Added facility to color exons according to whether they are CDS or UTR (and made all exons CDS for now until we pass this info in). Added colors to settings dialog. Made STOPs red and METs green in the three-frame translation for protein matches.
+ bigpicture.c           |  28 ++--
+ bigpicture.h           |   8 -
+ bigpicturegrid.c       | 103 ++++++------
+ blixem_.h              |   4 +-
+ blxFetch.c             |   4 +-
+ blxparser.c            |   8 +-
+ blxview.c              |   6 +-
+ blxwindow.c            | 424 +++++++++++++++++++++++++++++++++++++++++++++----
+ blxwindow.h            |   4 +
+ detailview.c           |  49 ++----
+ detailview.h           |  31 +---
+ detailviewtree.c       |  81 +++++-----
+ detailviewtree.h       |   2 +-
+ exonview.c             |  77 ++++-----
+ sequencecellrenderer.c | 199 +++++++++++------------
+ utilities.c            | 168 ++++++++++++++++----
+ utilities.h            | 128 +++++++++++----
+ 17 files changed, 884 insertions(+), 440 deletions(-)
+
+2010-05-11  gb10  <gb10>
+ Colour METs green and STOPs red
+ blixem_.h        |  5 ++--
+ detailview.c     | 22 +++++++++++++----
+ detailview.h     |  9 ++++---
+ detailviewtree.c | 72 +++++++++++++++++++++++++++++++-------------------------
+ detailviewtree.h | 15 +++++++++---
+ utilities.h      |  9 +++++++
+ 6 files changed, 87 insertions(+), 45 deletions(-)
+
+2010-05-10  gb10  <gb10>
+ Added bump options to view dialog box
+ blixem_.h   | 4 ++--
+ blxwindow.c | 7 ++-----
+ exonview.c  | 6 ++++++
+ exonview.h  | 3 +++
+ 4 files changed, 13 insertions(+), 7 deletions(-)
+
+2010-05-10  gb10  <gb10>
+ Added bump options to view dialog box
+ blxwindow.c | 117 ++++++++++++++++++++++++++++++++++++++++++++----------------
+ 1 file changed, 87 insertions(+), 30 deletions(-)
+
+2010-05-10  gb10  <gb10>
+ Added ability to bump exon view
+ bigpicture.c     |  37 ++++++--
+ bigpicture.h     |   3 +
+ bigpicturegrid.c |  24 ++---
+ blxwindow.c      |  29 ++++--
+ detailview.c     |   1 +
+ exonview.c       | 281 ++++++++++++++++++++++++++++++++++++++++---------------
+ exonview.h       |   5 +-
+ 7 files changed, 272 insertions(+), 108 deletions(-)
+
+2010-05-10  gb10  <gb10>
+ Added additional info to SequenceStruct
+ blxdotter.c      |   4 +-
+ blxview.h        |  11 +++--
+ blxwindow.c      |  20 +++++----
+ detailview.c     |  11 +++--
+ detailviewtree.c |   5 ++-
+ exonview.c       |   1 -
+ utilities.c      | 128 +++++++++++++++++++++++++++++++++++++++++++------------
+ utilities.h      |  12 +++++-
+ 8 files changed, 141 insertions(+), 51 deletions(-)
+
+2010-05-10  gb10  <gb10>
+ Automatically calculate the lowest ID of all matches and cut off the grid range at that value (to the nearest grid cell) to save space in the big picture. Also refactored the code so that sequences can be passed as objects rather than just referred to by name
+ bigpicture.c           |  93 +++++++-
+ bigpicture.h           |  17 +-
+ bigpicturegrid.c       |  98 +++------
+ bigpicturegrid.h       |   3 -
+ blixem_.h              |  14 +-
+ blxdotter.c            |  29 ++-
+ blxparser.c            |   6 +-
+ blxview.c              |   4 +-
+ blxview.h              |  21 +-
+ blxwindow.c            | 573 ++++++++++++++++++++++++++++++++++++++-----------
+ blxwindow.h            |  18 +-
+ detailview.c           | 332 ++++------------------------
+ detailview.h           |  11 +-
+ detailviewtree.c       |  67 +++---
+ detailviewtree.h       |   3 -
+ exonview.c             |  24 +--
+ sequencecellrenderer.c |  31 +--
+ utilities.c            |  61 ++++--
+ utilities.h            |   3 +-
+ 19 files changed, 767 insertions(+), 641 deletions(-)
+
+2010-05-06  gb10  <gb10>
+ Added About dialog
+ blixem_.h    |  27 ++++++++++---
+ blxmain.c    |   5 +--
+ blxwindow.c  | 127 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++---
+ blxwindow.h  |   3 +-
+ detailview.c |   8 ++--
+ utilities.c  |  76 +++++++++++++++++++----------------
+ utilities.h  |   5 +++
+ 7 files changed, 198 insertions(+), 53 deletions(-)
+
+2010-05-06  gb10  <gb10>
+ Fixed a bug where running dotter on protein matches was sometimes getting the wrong q strand
+ blxdotter.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+2010-05-05  gb10  <gb10>
+ Moved some generic utility functions to utilities.c
+ blxwindow.c | 53 -----------------------------------------------------
+ utilities.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++
+ utilities.h |  3 +++
+ 3 files changed, 55 insertions(+), 53 deletions(-)
+
+2010-05-05  gb10  <gb10>
+ Added option to use big picture display range for dotter
+ blxdotter.c | 45 ++++++++++++++++++++++++++++++++++++---------
+ 1 file changed, 36 insertions(+), 9 deletions(-)
+
+2010-05-05  gb10  <gb10>
+ Refactored dotter dialog code to make it easier to add new widgets
+ blxdotter.c | 350 +++++++++++++++++++++++++++++++-----------------------------
+ 1 file changed, 178 insertions(+), 172 deletions(-)
+
+2010-05-05  gb10  <gb10>
+ Made dotter dialog non-modal
+ blxdotter.c | 21 ++++++++++++++++-----
+ 1 file changed, 16 insertions(+), 5 deletions(-)
+
+2010-05-04  gb10  <gb10>
+ Added a blxview context; code tidying; fixed a bug with SNPs not showing when display reversed.
+ bigpicture.c           |  46 +++---
+ bigpicture.h           |   2 +-
+ bigpicturegrid.c       |  44 +++---
+ blxdotter.c            | 145 +++++++++----------
+ blxwindow.c            |  56 ++++----
+ blxwindow.h            |  12 +-
+ detailview.c           | 382 +++++++++++++++----------------------------------
+ detailview.h           |  21 +--
+ detailviewtree.c       | 234 ++++++++----------------------
+ detailviewtree.h       |  29 +---
+ exonview.c             |  36 ++---
+ sequencecellrenderer.c |  36 ++---
+ utilities.c            |  20 +--
+ utilities.h            |  10 +-
+ 14 files changed, 369 insertions(+), 704 deletions(-)
+
+2010-04-30  gb10  <gb10>
+ Renamed MainWindow to BlxWindow, and created blixem context
+ bigpicture.c           |  52 ++++----
+ bigpicture.h           |   8 +-
+ bigpicturegrid.c       |  64 ++++-----
+ blixem_.h              |  30 +----
+ blxFetch.c             |  20 +--
+ blxdotter.c            |  96 +++++++-------
+ blxview.c              |  22 ++--
+ blxwindow.c            | 343 ++++++++++++++++++++++++++++---------------------
+ blxwindow.h            |  74 +++++------
+ detailview.c           | 219 ++++++++++++++++---------------
+ detailview.h           |  14 +-
+ detailviewtree.c       | 110 ++++++++--------
+ detailviewtree.h       |   4 +-
+ exonview.c             |  32 ++---
+ sequencecellrenderer.c |  34 ++---
+ 15 files changed, 572 insertions(+), 550 deletions(-)
+
+2010-04-30  gb10  <gb10>
+ Renamed MainWindow to the more informative BlxWindow
+ blxviewMainWindow.c => blxwindow.c | 624 ++++++++++++++++++-------------------
+ blxviewMainWindow.h => blxwindow.h | 102 +++---
+ 2 files changed, 363 insertions(+), 363 deletions(-)
+
+2010-04-30  gb10  <gb10>
+ Allow user to select a SNP by clicking the DNA coord. Show/hide SNP track by double-clicking DNA header
+ detailview.c     | 215 +++++++++++++++++++++++++++++++++++++++++--------------
+ detailview.h     |  18 ++++-
+ detailviewtree.c | 109 ++++++++++++++++------------
+ detailviewtree.h |   6 +-
+ 4 files changed, 245 insertions(+), 103 deletions(-)
+
+2010-04-29  gb10  <gb10>
+ Added option in Settings dialog to show/hide SNP track
+ blxviewMainWindow.c | 11 ++++++++
+ detailview.c        | 76 +++++++++++++++++++++++++++++++++++++++--------------
+ detailview.h        | 11 +++++---
+ detailviewtree.c    | 14 +++++-----
+ 4 files changed, 83 insertions(+), 29 deletions(-)
+
+2010-04-29  gb10  <gb10>
+ Added SNP track. Also improved highlight colours
+ blxdotter.c            |  25 +-
+ blxviewMainWindow.c    |   6 +-
+ blxviewMainWindow.h    |   2 +
+ detailview.c           | 824 ++++++++++++++++++++++++++++++++++---------------
+ detailview.h           |  14 +-
+ detailviewtree.c       | 429 ++++++++++++++++---------
+ detailviewtree.h       |   7 +-
+ sequencecellrenderer.c |  20 +-
+ utilities.c            | 171 +++++-----
+ utilities.h            |   3 +-
+ 10 files changed, 1009 insertions(+), 492 deletions(-)
+
+2010-04-28  gb10  <gb10>
+ Added new version number and copyright info to usage info
+ blixem_.h | 8 ++++----
+ blxmain.c | 8 ++++++--
+ 2 files changed, 10 insertions(+), 6 deletions(-)
+
+2010-04-26  gb10  <gb10>
+ Don't add introns to alignment trees
+ detailview.c | 26 +++++++++++++++-----------
+ 1 file changed, 15 insertions(+), 11 deletions(-)
+
+2010-04-26  gb10  <gb10>
+ Fix related to RT166076: avoid a crash if an invalid frame number is given. Also still draw MSPs in the grid even if they are not in an alignment list, and colour exons/introns by group colour
+ detailview.c           |  11 ++-
+ detailviewtree.c       |  37 +++++-----
+ exonview.c             | 188 ++++++++++++++++++++++---------------------------
+ sequencecellrenderer.c |   2 +-
+ utilities.c            |   8 ++-
+ 5 files changed, 121 insertions(+), 125 deletions(-)
+
+2010-04-21  gb10  <gb10>
+ Added a basic method for getting SNP data in to Blixem via the exblx_x or seqbl_x file formats
+ bigpicturegrid.c |  2 +-
+ blxdotter.c      | 10 ++++------
+ blxparser.c      |  4 ++--
+ detailview.c     | 20 ++++++++++++--------
+ utilities.c      | 18 ++++++++++++------
+ utilities.h      |  1 +
+ 6 files changed, 32 insertions(+), 23 deletions(-)
+
+2010-04-21  gb10  <gb10>
+ When jumping to the start/end of a match, make sure we jump to the exact DNA base (not the first/last base in the msp's reading frame, which may be different for exons)
+ detailview.c | 178 +++++++++++++++++++++++++++++++++++++++--------------------
+ 1 file changed, 117 insertions(+), 61 deletions(-)
+
+2010-04-21  gb10  <gb10>
+ Made Blixem calculate the reading frame that it should belong to and check this agains the reading frame passed in the input file
+ blxdotter.c      |   2 +-
+ detailview.c     | 215 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ detailviewtree.c | 204 +---------------------------------------------------
+ utilities.c      |  11 ++-
+ utilities.h      |   3 +-
+ 5 files changed, 229 insertions(+), 206 deletions(-)
+
+2010-04-20  gb10  <gb10>
+ New blixem: fixed a bug where go-to-position was failing for protein matches with negative coords. Also removed some nasty offset code
+ bigpicture.c           | 10 ++++----
+ bigpicturegrid.c       | 15 +++++-------
+ blxdotter.c            |  5 ++--
+ blxviewMainWindow.c    | 64 +++++++++++++++++---------------------------------
+ blxviewMainWindow.h    |  1 -
+ detailview.c           | 19 +++++----------
+ detailviewtree.c       | 11 ++++-----
+ exonview.c             |  5 ++--
+ sequencecellrenderer.c | 12 ++++------
+ utilities.c            | 27 ++++++++++-----------
+ utilities.h            | 10 +++-----
+ 11 files changed, 66 insertions(+), 113 deletions(-)
+
+2010-04-14  gb10  <gb10>
+ Improved char width calculations
+ bigpicture.c | 2 +-
+ blxFetch.c   | 4 ++--
+ detailview.c | 4 ++--
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+2010-04-14  gb10  <gb10>
+ Added keyboard shortcut to scroll one page left/right
+ blxviewMainWindow.c | 23 ++++++++++++-----------
+ detailview.c        |  8 ++++----
+ 2 files changed, 16 insertions(+), 15 deletions(-)
+
+2010-04-14  gb10  <gb10>
+ Fixed a memory bug which was causing a crash on 64 bit linux
+ detailview.c | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+2010-04-14  gb10  <gb10>
+ New blixem: removed unnecessary stuff from public header. Put padseq back in use.
+ bigpicturegrid.h    |  3 ++-
+ blixem_.h           |  8 +++++++-
+ blxdotter.c         | 13 ++++++-------
+ blxview.h           | 18 +-----------------
+ blxviewMainWindow.h |  2 +-
+ detailview.h        |  2 +-
+ detailviewtree.c    |  8 +++++---
+ detailviewtree.h    |  2 +-
+ exonview.h          |  2 +-
+ utilities.h         |  8 ++++++++
+ 10 files changed, 33 insertions(+), 33 deletions(-)
+
+2010-04-14  gb10  <gb10>
+ RT165950: made big picture zoom buttons bigger
+ bigpicture.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+2010-04-14  gb10  <gb10>
+ RT165945: do not change text colour when row selected; darken row colour instead.
+ bigpicturegrid.c       | 47 ++++++++++++++++++++++++++++++-----------------
+ detailviewtree.c       |  4 ++--
+ sequencecellrenderer.c | 12 +++++++++++-
+ utilities.c            | 38 ++++++++++++++++++++++++++++++++++++++
+ utilities.h            |  2 ++
+ 5 files changed, 83 insertions(+), 20 deletions(-)
+
+2010-04-13  gb10  <gb10>
+ New blixem: make sure we don't find a non-monospace font in our prefered list of font families
+ detailview.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+2010-04-13  gb10  <gb10>
+ New blixem: fixed issues with protein alignments misaligning when first base is not base1. Fixed an issues with dotter not rev comping the s seq for some fetch methods
+ bigpicture.c           | 10 +++++---
+ bigpicturegrid.c       | 17 +++++++------
+ blxdotter.c            | 68 +++++++++++++++++++++++++++++++-------------------
+ blxviewMainWindow.c    | 22 ++++++++++------
+ blxviewMainWindow.h    |  2 +-
+ detailview.c           | 26 +++++++++++--------
+ detailviewtree.c       |  5 ++--
+ exonview.c             |  5 ++--
+ sequencecellrenderer.c | 12 +++++----
+ utilities.c            |  8 +++---
+ utilities.h            |  4 ++-
+ 11 files changed, 112 insertions(+), 67 deletions(-)
+
+2010-03-26  gb10  <gb10>
+ New blixem: fixed bugs with protein matches not aligning if first coord is not base 1
+ bigpicturegrid.c    |  8 ++++++--
+ blxview.c           | 13 ++++++++-----
+ blxviewMainWindow.c | 32 ++++++++++++++++++++++++++------
+ blxviewMainWindow.h |  8 +++++---
+ detailview.c        |  2 ++
+ detailviewtree.c    | 22 ++++++++++++++--------
+ utilities.c         | 12 ++++++++++--
+ utilities.h         |  6 ++++--
+ 8 files changed, 75 insertions(+), 28 deletions(-)
+
+2010-03-26  gb10  <gb10>
+ New blixem: typo fix
+ blxFetch.c | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+2010-03-26  gb10  <gb10>
+ New blixem: bug fixes
+ bigpicturegrid.c    | 25 ++++++++++++++++++-------
+ blixem_.h           |  4 ++--
+ blxFetch.c          |  5 ++---
+ blxdotter.c         |  2 --
+ blxviewMainWindow.c | 34 ++++++++++++++++++++++------------
+ blxviewMainWindow.h |  2 +-
+ detailviewtree.c    |  4 ++++
+ utilities.c         |  4 ++--
+ 8 files changed, 51 insertions(+), 29 deletions(-)
+
+2010-03-26  gb10  <gb10>
+ New blixem: more dotter fixes
+ blxdotter.c | 66 +++++++++++++++++++++++++++++++++++++++++++------------------
+ utilities.c | 25 ++++++++++++++---------
+ 2 files changed, 63 insertions(+), 28 deletions(-)
+
+2010-03-25  gb10  <gb10>
+ New blixem: dotter bug fixes
+ blxdotter.c         | 18 +++++++++++-------
+ blxviewMainWindow.c |  2 +-
+ 2 files changed, 12 insertions(+), 8 deletions(-)
+
+2010-03-25  gb10  <gb10>
+ New blixem: made dotter call work for reverse s strands (as well as it worked before...)
+ blxdotter.c         |  31 ++++++++++++---
+ blxviewMainWindow.c |  16 +++++++-
+ blxviewMainWindow.h |   2 +
+ detailview.c        | 108 ++++++++++++++++++++++++++++++----------------------
+ detailviewtree.c    |   3 --
+ dotterMain.c        |   4 +-
+ 6 files changed, 105 insertions(+), 59 deletions(-)
+
+2010-03-24  gb10  <gb10>
+ New blixem: small bug fix with shortcuts
+ blxviewMainWindow.c | 92 ++++++++++++++++++++++++++---------------------------
+ 1 file changed, 45 insertions(+), 47 deletions(-)
+
+2010-03-24  gb10  <gb10>
+ New blixem: toolbar and dialog improvements
+ bigpicture.c        |   6 +-
+ blxparser.c         |  15 +++-
+ blxviewMainWindow.c | 230 ++++++++++++++++++++++++++++------------------------
+ blxviewMainWindow.h |   3 +
+ detailview.c        | 123 ++++++++++++++++++++--------
+ 5 files changed, 229 insertions(+), 148 deletions(-)
+
+2010-03-24  gb10  <gb10>
+ New blixem: added Home/End shortcut keys
+ blxviewMainWindow.c | 36 ++++++++++++++++++++++++++++++++++++
+ detailview.c        | 43 +++++++++++--------------------------------
+ detailview.h        |  5 +++--
+ 3 files changed, 50 insertions(+), 34 deletions(-)
+
+2010-03-24  gb10  <gb10>
+ New blixem: better left/right scrolling
+ blxview.c           |   4 +-
+ blxviewMainWindow.c |  27 +++++--
+ detailview.c        | 201 ++++++++++++++++++++++++++++++++++++++--------------
+ detailview.h        |   7 +-
+ detailviewtree.c    |   2 +-
+ utilities.c         |   2 +-
+ 6 files changed, 180 insertions(+), 63 deletions(-)
+
+2010-03-23  gb10  <gb10>
+ New blixem: go to next/prev match now works on current selection
+ blxviewMainWindow.c | 31 ++---------------------------
+ detailview.c        | 56 +++++++++++++++++++++++++++++++++--------------------
+ utilities.c         | 23 +++++++++++++++++++++-
+ utilities.h         |  3 +++
+ 4 files changed, 62 insertions(+), 51 deletions(-)
+
+2010-03-23  gb10  <gb10>
+ New blixem: added find dialog
+ blxviewMainWindow.c | 256 +++++++++++++++++++++++++++++++++++++++-------------
+ 1 file changed, 193 insertions(+), 63 deletions(-)
+
+2010-03-23  gb10  <gb10>
+ New blixem: got rid of hard-coded special sequence characters
+ blixem_.h              |  8 +++++++-
+ blxFetch.c             |  6 +++---
+ blxdotter.c            |  2 +-
+ blxparser.c            | 19 +++++++++++++------
+ blxview.c              |  6 +++---
+ sequencecellrenderer.c |  6 +++---
+ 6 files changed, 30 insertions(+), 17 deletions(-)
+
+2010-03-23  gb10  <gb10>
+ New blixem: replaced deprecated combo box used for sort list
+ detailview.c | 145 ++++++++++++++++++++++++++++++++++-------------------------
+ 1 file changed, 83 insertions(+), 62 deletions(-)
+
+2010-03-23  gb10  <gb10>
+ New blixem: added proper destroy functions
+ bigpicture.c        | 177 +++++++++--------
+ bigpicture.h        |   1 +
+ bigpicturegrid.c    |   1 +
+ blixem_.h           |  28 +--
+ blxFetch.c          |   6 +-
+ blxdotter.c         |   5 +-
+ blxdotter.h         |   1 +
+ blxview.c           | 538 +++++++++++++---------------------------------------
+ blxview.h           |   4 +-
+ blxviewMainWindow.c | 104 ++++++----
+ blxviewMainWindow.h |  30 ++-
+ detailview.c        |  36 ++++
+ detailviewtree.c    |  22 ++-
+ detailviewtree.h    |   2 -
+ 14 files changed, 380 insertions(+), 575 deletions(-)
+
+2010-03-22  gb10  <gb10>
+ New blixem: added match sets. Tidied dialogs. Fixed some leaks
+ blxviewMainWindow.c | 541 ++++++++++++++++++++++++++++++++++++----------------
+ blxviewMainWindow.h |   6 +-
+ detailview.c        |   2 +-
+ utilities.c         |  49 +++--
+ utilities.h         |   2 +
+ 5 files changed, 413 insertions(+), 187 deletions(-)
+
+2010-03-19  gb10  <gb10>
+ New blixem: added ability to create a group from zmap selections
+ bigpicturegrid.c    |   2 +-
+ blixem_.h           |   5 +-
+ blxparser.c         |   3 +-
+ blxview.c           | 234 +-------------------------------
+ blxview.h           |   5 +-
+ blxviewMainWindow.c | 287 ++++++++++++++++++++++++++-------------
+ utilities.c         | 378 ++++++++++++++++++++++++++++++++++++----------------
+ utilities.h         |  11 ++
+ 8 files changed, 477 insertions(+), 448 deletions(-)
+
+2010-03-19  gb10  <gb10>
+ New blixem: improved dialogs
+ blxdotter.c         |   8 +-
+ blxviewMainWindow.c | 403 ++++++++++++++++++++++++++++++++--------------------
+ utilities.c         |  47 +++++-
+ utilities.h         |   7 +-
+ 4 files changed, 299 insertions(+), 166 deletions(-)
+
+2010-03-18  gb10  <gb10>
+ New blixem: improvements to settings dialog
+ blxviewMainWindow.c | 58 ++++++++++++++++++++++++++++++++++++++++++-----------
+ utilities.c         | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++---
+ utilities.h         | 14 +++++++++++++
+ 3 files changed, 115 insertions(+), 15 deletions(-)
+
+2010-03-18  gb10  <gb10>
+ New blixem: improved column resizing
+ blxviewMainWindow.c | 69 ++++++++++++++++++++++++++++++++++++++---------------
+ detailviewtree.c    | 33 +++++++++++++++++++++----
+ 2 files changed, 78 insertions(+), 24 deletions(-)
+
+2010-03-18  gb10  <gb10>
+ New blixem: added basic ability to change column sizes
+ blxviewMainWindow.c |  67 +++++++++++++++++++++++++++--
+ detailview.c        |  96 +++++++++++++++++++++---------------------
+ detailview.h        |   4 ++
+ detailviewtree.c    | 118 +++++++++++++++++++++++++++++++++++++++++++++-------
+ detailviewtree.h    |   9 ++--
+ 5 files changed, 224 insertions(+), 70 deletions(-)
+
+2010-03-17  gb10  <gb10>
+ New blixem: don't resize column headers unless necessary
+ detailview.c     |  21 ++++++++--
+ detailview.h     |   2 +
+ detailviewtree.c | 115 +++++++++++++++++++++++++++++++++++++++----------------
+ detailviewtree.h |   1 +
+ 4 files changed, 103 insertions(+), 36 deletions(-)
+
+2010-03-17  gb10  <gb10>
+ New blixem: got rid of global fetchMode variable
+ blixem_.h           |  8 ++++----
+ blxFetch.c          | 13 +++++++------
+ blxdotter.c         |  9 +++++----
+ blxview.c           |  4 ++--
+ blxviewMainWindow.c |  6 ++++++
+ blxviewMainWindow.h |  1 +
+ detailviewtree.c    |  2 +-
+ 7 files changed, 26 insertions(+), 17 deletions(-)
+
+2010-03-17  gb10  <gb10>
+ New blixem: re-enabled printing. Misc tidy-up.
+ blixem_.h           |  37 ++++++--
+ blxFetch.c          | 119 +------------------------
+ blxdotter.c         |  22 +++--
+ blxmain.c           |   4 +-
+ blxview.c           |  55 ++++++------
+ blxviewMainWindow.c | 247 +++++++++++++++++++++++-----------------------------
+ blxviewMainWindow.h |  32 +++----
+ detailviewtree.c    |  34 +-------
+ 8 files changed, 204 insertions(+), 346 deletions(-)
+
+2010-03-17  gb10  <gb10>
+ New blixem: added tree gridlines
+ detailviewtree.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2010-03-17  gb10  <gb10>
+ New blixem: improved help
+ blxviewMainWindow.c | 31 ++++++++++++++++++-------------
+ 1 file changed, 18 insertions(+), 13 deletions(-)
+
+2010-03-15  gb10  <gb10>
+ New blixem: added functionality to middle-click the nucleotide header to select a nucleotide in protein matches
+ detailview.c | 199 +++++++++++++++++++++++++++++++++++++++++++++++++++++++----
+ 1 file changed, 186 insertions(+), 13 deletions(-)
+
+2010-03-12  gb10  <gb10>
+ New blixem: made grid headers show round values. Fixed some bugs with msp lines and exon boxes not lining up
+ bigpicture.c     | 193 ++++++++++++++++++++++++++++++++++++++-----------------
+ bigpicture.h     |   7 +-
+ bigpicturegrid.c |  73 +++++++++++++--------
+ detailview.c     |   8 +--
+ detailviewtree.c |   2 +-
+ exonview.c       |  20 +++---
+ utilities.c      |  11 ++++
+ utilities.h      |   1 +
+ 8 files changed, 210 insertions(+), 105 deletions(-)
+
+2010-03-11  gb10  <gb10>
+ New blixem: fixed uninitialised value bugs
+ blxparser.c  | 11 ++++++++++-
+ detailview.c |  1 +
+ 2 files changed, 11 insertions(+), 1 deletion(-)
+
+2010-03-11  gb10  <gb10>
+ New blixem: fixed problem with dotter getting the ref seq the wrong way round
+ blxdotter.c            |  7 ++++---
+ blxviewMainWindow.c    | 34 ++++++++++++++++++++++++----------
+ blxviewMainWindow.h    |  1 +
+ detailviewtree.c       |  2 ++
+ sequencecellrenderer.c |  1 +
+ 5 files changed, 32 insertions(+), 13 deletions(-)
+
+2010-03-11  gb10  <gb10>
+ New blixem: removed more unnecessary code
+ blxview.c           | 169 +---------------------------------------------------
+ blxviewMainWindow.c |   9 +++
+ 2 files changed, 12 insertions(+), 166 deletions(-)
+
+2010-03-11  gb10  <gb10>
+ New blixem: general code tidying
+ blxview.c           | 1702 ++++-----------------------------------------------
+ blxviewMainWindow.c |    9 -
+ detailview.c        |    2 +-
+ detailview.h        |    1 +
+ 4 files changed, 138 insertions(+), 1576 deletions(-)
+
+2010-03-11  gb10  <gb10>
+ New blixem: fixed a bug where MSP lines were not being displayed if both ends extended beyond the display range
+ bigpicturegrid.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+2010-03-10  gb10  <gb10>
+ New blixem: fixed initial zoom level for big picture (used to just zoom to the whole range)
+ bigpicture.c        | 42 +++++++++++++++++++++++++++++++-----------
+ bigpicture.h        |  5 +++--
+ blxview.c           |  8 +++++---
+ blxviewMainWindow.c |  5 +++--
+ blxviewMainWindow.h |  3 ++-
+ detailview.c        | 18 +++++++++++++-----
+ 6 files changed, 57 insertions(+), 24 deletions(-)
+
+2010-03-10  gb10  <gb10>
+ New blixem: removed some unnecessary debug output
+ blxviewMainWindow.c | 11 +++--------
+ 1 file changed, 3 insertions(+), 8 deletions(-)
+
+2010-03-10  gb10  <gb10>
+ New blixem: fixed a bug with rows disappearing when squash/unsquashing matches
+ detailviewtree.c | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+2010-03-10  gb10  <gb10>
+ New blixem: selected sequence names are now copied to primary clipboard. Also added Ctrl-C shortcut to copy sequence names to default clipboard
+ blxviewMainWindow.c | 76 ++++++++++++++++++++++++++++++++++++++++++++++++-----
+ 1 file changed, 69 insertions(+), 7 deletions(-)
+
+2010-03-09  gb10  <gb10>
+ New blixem: added second exon view for reverse strand
+ bigpicture.c        | 55 ++++++++++++++++++++++++++++++++++-----------
+ bigpicture.h        | 30 ++++++++++++++-----------
+ blxviewMainWindow.c | 64 +++++++++++++++++++++++++++++++++++++++++------------
+ detailview.c        | 19 ++++++++++++----
+ exonview.c          | 38 ++++++++++++++++++++++---------
+ exonview.h          |  5 +++--
+ 6 files changed, 155 insertions(+), 56 deletions(-)
+
+2010-03-09  gb10  <gb10>
+ New blixem: made dialogs non-modal
+ blixem_.h           |   4 +-
+ blxFetch.c          |  58 ++++++++--------------
+ blxview.c           | 139 +---------------------------------------------------
+ blxviewMainWindow.c |  59 +++++-----------------
+ detailviewtree.c    |   2 +-
+ utilities.c         |  61 +++++++++++++++++++++++
+ utilities.h         |   9 ++++
+ 7 files changed, 105 insertions(+), 227 deletions(-)
+
+2010-03-09  gb10  <gb10>
+ New blixem: fixed memory corruption bug where string lengths were being calculated incorrectly for negative coord values
+ utilities.c | 11 ++++++++++-
+ 1 file changed, 10 insertions(+), 1 deletion(-)
+
+2010-03-09  gb10  <gb10>
+ New blixem: temporarily removed some newer GTK calls to make it compatible with previous versions of GTK
+ bigpicture.c        |   2 +-
+ blxviewMainWindow.c | 144 ++++++++++++++++++++++++++--------------------------
+ blxviewMainWindow.h |   2 +-
+ detailviewtree.c    |   7 +--
+ 4 files changed, 78 insertions(+), 77 deletions(-)
+
+2010-02-26  gb10  <gb10>
+ Graph package replacement: fixed bug with go-to coords
+ detailview.c | 57 ++++++++++++++++++++++++++++++++-------------------------
+ 1 file changed, 32 insertions(+), 25 deletions(-)
+
+2010-02-26  gb10  <gb10>
+ Graph package replacement: fixed small bug
+ bigpicture.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2010-02-26  gb10  <gb10>
+ Graph package replacement: misc fixes and usability improvements
+ bigpicture.c           | 32 ++++++++++-------
+ bigpicture.h           |  1 +
+ blxviewMainWindow.c    | 39 ++++++++++++--------
+ blxviewMainWindow.h    |  3 ++
+ detailview.c           | 98 +++++++++++++++++++++++++++-----------------------
+ detailview.h           |  8 ++---
+ detailviewtree.c       | 14 ++++----
+ sequencecellrenderer.c |  9 +++--
+ 8 files changed, 119 insertions(+), 85 deletions(-)
+
+2010-02-25  gb10  <gb10>
+ Graph package replacement: improvements to selection highlighting
+ detailview.c           | 22 ++++++++--------------
+ detailviewtree.c       |  4 ++--
+ sequencecellrenderer.c | 34 ++++++++++------------------------
+ 3 files changed, 20 insertions(+), 40 deletions(-)
+
+2010-02-25  gb10  <gb10>
+ Graph package replacement: fixed a bug with exon boundary colours
+ sequencecellrenderer.c | 14 ++++++++++----
+ 1 file changed, 10 insertions(+), 4 deletions(-)
+
+2010-02-24  gb10  <gb10>
+ Graph package replacement: fixed bugs with selection coords when strands toggled
+ detailview.c           | 15 +++++----------
+ sequencecellrenderer.c | 17 +++++------------
+ utilities.c            | 19 -------------------
+ utilities.h            |  9 ---------
+ 4 files changed, 10 insertions(+), 50 deletions(-)
+
+2010-02-24  gb10  <gb10>
+ Graph package replacement: completed previous change to the way the display range works. Also improved colours.
+ bigpicture.c           |  12 ++---
+ bigpicturegrid.c       |  23 ++++-----
+ blxdotter.c            |  11 ++++-
+ blxparser.c            |   4 +-
+ blxview.h              |   6 +--
+ blxviewMainWindow.c    |  31 ++++--------
+ blxviewMainWindow.h    |   2 -
+ detailview.c           |  84 +++++++++++++++++++--------------
+ detailview.h           |   1 -
+ detailviewtree.c       |  14 ++----
+ exonview.c             |   4 +-
+ sequencecellrenderer.c |  17 ++++---
+ utilities.c            | 126 ++++++++++++++++++++++++++-----------------------
+ utilities.h            |  59 ++++++++++++-----------
+ 14 files changed, 197 insertions(+), 197 deletions(-)
+
+2010-02-24  gb10  <gb10>
+ Graph package replacement: changed the way display range works. This fixes the scroll bar being the wrong way round for reverse strand. Also fixed some issues with protein matches when the length is not an exact number of triplets. Work in progress.
+ bigpicture.c           |  36 +++++-------
+ bigpicture.h           |   3 +-
+ bigpicturegrid.c       |  83 +++++++++++---------------
+ blxdotter.c            |  12 ++--
+ blxviewMainWindow.c    |  84 +++++++++++++-------------
+ blxviewMainWindow.h    |  15 ++---
+ detailview.c           |  90 ++++++++++++++--------------
+ detailviewtree.c       | 157 +++++++++++++++++++++----------------------------
+ exonview.c             |  22 +++++--
+ sequencecellrenderer.c |  25 ++++----
+ utilities.c            |  79 ++++++++++++++++++-------
+ utilities.h            |  30 +++++++---
+ 12 files changed, 330 insertions(+), 306 deletions(-)
+
+2010-02-24  gb10  <gb10>
+ Graph package replacement: various bug fixes
+ blxviewMainWindow.c    | 22 ++++++++++++++++++----
+ blxviewMainWindow.h    |  2 +-
+ detailview.c           | 13 +++----------
+ detailview.h           |  2 +-
+ detailviewtree.h       |  3 +--
+ sequencecellrenderer.c | 18 ++++++++++++++----
+ utilities.c            |  3 +++
+ 7 files changed, 41 insertions(+), 22 deletions(-)
+
+2010-02-23  gb10  <gb10>
+ Graph package replacement: fixed a bug with selecting a sequence that has msps in different reading frames. Added highlight colour for exons.
+ detailviewtree.c |  24 ++++++-----
+ exonview.c       | 119 +++++++++++++++++++++++++++++++++++++++++--------------
+ 2 files changed, 104 insertions(+), 39 deletions(-)
+
+2010-02-23  gb10  <gb10>
+ Graph package replacement: fixed bugs with sorting and squash matches.
+ blxviewMainWindow.c | 79 ++++++++++++++++++++++++-----------------------------
+ detailviewtree.c    | 52 ++++++++++++++++++++++++++++-------
+ 2 files changed, 77 insertions(+), 54 deletions(-)
+
+2010-02-22  gb10  <gb10>
+ Graph package replacement: added Highlight Differences option. Fixed colour of insertion marker when base is selected. Fixed a bug with exon boundary showing in wrong place.
+ blxviewMainWindow.c    |  15 +++-
+ blxviewMainWindow.h    |   2 +-
+ detailview.c           |  27 +++++--
+ detailview.h           |  12 ++-
+ detailviewtree.c       |   4 +-
+ detailviewtree.h       |   2 +-
+ sequencecellrenderer.c | 197 ++++++++++++++++++++++++++++---------------------
+ utilities.h            |   2 +-
+ 8 files changed, 160 insertions(+), 101 deletions(-)
+
+2010-02-22  gb10  <gb10>
+ Graph package replacement: abbreviate sequence names to fit column size and append strand and frame number
+ blxview.c        |  69 +-----------------------
+ detailviewtree.c | 160 +++++++++++++++++++++++++++++++++++++++++++++++++------
+ utilities.c      |  38 ++++++++++++-
+ utilities.h      |   1 +
+ 4 files changed, 183 insertions(+), 85 deletions(-)
+
+2010-02-22  gb10  <gb10>
+ Graph package replacement: added basic help
+ blxviewMainWindow.c | 201 +++++++++++++++++++++++++++++++++++++++++-----------
+ 1 file changed, 159 insertions(+), 42 deletions(-)
+
+2010-02-22  gb10  <gb10>
+ Graph package replacement: enable middle clicking on tree headers
+ detailview.c     |  74 +++++++++++++++++------------
+ detailview.h     |   2 +-
+ detailviewtree.c | 140 ++++++++++++++++++++++++++++++++++++++++++++++++-------
+ 3 files changed, 169 insertions(+), 47 deletions(-)
+
+2010-02-19  gb10  <gb10>
+ Graph package replacement: fixed bugs with sorting and start coord
+ blxviewMainWindow.c | 43 +++++++++++++++++++++++++++++++------
+ detailview.c        | 12 +++++++++++
+ detailview.h        |  1 +
+ detailviewtree.c    | 62 +++++++++++++++++++++++++++++++++--------------------
+ 4 files changed, 88 insertions(+), 30 deletions(-)
+
+2010-02-19  gb10  <gb10>
+ Graph package replacement: now uses input coord and offset. Fixed some issues with sorting
+ bigpicturegrid.c       |   2 +-
+ blixem_.h              |  12 +++--
+ blxFetch.c             |  10 ++--
+ blxmain.c              |  13 +++--
+ blxparser.c            |   4 +-
+ blxselect.c            |   7 +--
+ blxview.c              |  31 +++++++----
+ blxviewMainWindow.c    |  49 +++++++++++------
+ blxviewMainWindow.h    |   3 ++
+ detailview.c           | 141 ++++++++++++++++++++++++++++++++++---------------
+ detailview.h           |  11 ++--
+ detailviewtree.c       |  72 +++++++++++++++++++------
+ sequencecellrenderer.c |   6 +--
+ utilities.c            |  15 ++++--
+ utilities.h            |   3 +-
+ 15 files changed, 266 insertions(+), 113 deletions(-)
+
+2010-02-18  gb10  <gb10>
+ Fixed linux 64 bug that was causing config file read to fail
+ blxFetch.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+2010-02-18  gb10  <gb10>
+ Graph package replacement: fixed another backwards compatibility issue
+ blxviewMainWindow.c | 42 ++++++++++++++++++++++++++----------------
+ 1 file changed, 26 insertions(+), 16 deletions(-)
+
+2010-02-18  gb10  <gb10>
+ Graph package replacement: fixed typo
+ sequencecellrenderer.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2010-02-18  gb10  <gb10>
+ Graph package replacement: fixed incompatibilities with older versions of GTK
+ bigpicturegrid.c       |   9 ----
+ blxviewMainWindow.c    |  53 +++++++------------
+ sequencecellrenderer.c |  15 +-----
+ utilities.c            | 138 ++++++++++++++++++++++++++++++++++---------------
+ 4 files changed, 117 insertions(+), 98 deletions(-)
+
+2010-02-18  gb10  <gb10>
+ Graph package replacement: sorted out a bug with colours
+ bigpicturegrid.c       |  7 ++++---
+ blxviewMainWindow.c    | 16 +++-------------
+ detailviewtree.c       | 11 +++++------
+ sequencecellrenderer.c |  2 +-
+ utilities.c            | 24 +++++++++++++++++++++---
+ utilities.h            | 43 +++++++++++++++++++++----------------------
+ 6 files changed, 55 insertions(+), 48 deletions(-)
+
+2010-02-18  gb10  <gb10>
+ Graph package replacement: improved scrolling when a row is selected
+ bigpicturegrid.c |  7 ++++++-
+ detailviewtree.c | 18 ++++++++++++------
+ detailviewtree.h |  1 +
+ 3 files changed, 19 insertions(+), 7 deletions(-)
+
+2010-02-17  gb10  <gb10>
+ Graph package replacement: added sort-by-group. Added group color picker.
+ blxviewMainWindow.c | 113 +++++++++++++++++++++++++++++++++++++++++++++----
+ blxviewMainWindow.h |   2 +
+ detailview.c        |  14 ++++++
+ detailview.h        |   2 +
+ detailviewtree.c    | 120 +++++++++++++++++++++++++++++++++++++++-------------
+ detailviewtree.h    |   2 +
+ 6 files changed, 215 insertions(+), 38 deletions(-)
+
+2010-02-17  gb10  <gb10>
+ Graph package replacement: added Select Features menu option. Added confirmation message for deleting groups
+ blxview.c           | 922 +---------------------------------------------------
+ blxviewMainWindow.c |  66 +++-
+ blxviewMainWindow.h |   2 +
+ 3 files changed, 66 insertions(+), 924 deletions(-)
+
+2010-02-17  gb10  <gb10>
+ Graph package replacement: bug fixes with grouping and selections
+ blixem_.h           |   4 +-
+ blxdotter.c         |  13 ---
+ blxviewMainWindow.c | 331 +++++++++++++++++++++++++++++++++++-----------------
+ utilities.c         |  16 +++
+ utilities.h         |   3 +
+ 5 files changed, 242 insertions(+), 125 deletions(-)
+
+2010-02-16  gb10  <gb10>
+ Graph package replacement: search by sequence name; hide groups
+ blxparser.c         |  77 +----------
+ blxview.c           |  36 +++---
+ blxviewMainWindow.c | 359 +++++++++++++++++++++++++++++++++++++++++++---------
+ detailview.c        |   2 +-
+ detailview.h        |   1 +
+ detailviewtree.c    |   9 ++
+ utilities.c         |  70 ++++++++++
+ utilities.h         |   1 +
+ 8 files changed, 397 insertions(+), 158 deletions(-)
+
+2010-02-16  gb10  <gb10>
+ Graph package replacement: small bug fix with grouping
+ blixem_.h    | 15 ++++++++++++++-
+ detailview.c |  2 +-
+ utilities.h  |  2 ++
+ 3 files changed, 17 insertions(+), 2 deletions(-)
+
+2010-02-16  gb10  <gb10>
+ Graph package replacement: added basic grouping. Improved row selection.
+ bigpicturegrid.c       |  26 +++++-
+ blxviewMainWindow.c    | 217 ++++++++++++++++++++++++++++++++++++++++++++-----
+ blxviewMainWindow.h    |   4 +
+ detailview.c           |  19 ++++-
+ detailview.h           |   1 +
+ detailviewtree.c       |  34 ++++++--
+ sequencecellrenderer.c |  26 ++++++
+ 7 files changed, 298 insertions(+), 29 deletions(-)
+
+2010-02-16  gb10  <gb10>
+ Graph package replacement: added subject sequence struct
+ bigpicturegrid.c | 12 ++++++------
+ blixem_.h        |  9 ++++++++-
+ detailview.c     |  3 ++-
+ detailview.h     |  2 +-
+ detailviewtree.c | 30 ++++++++++++++++--------------
+ utilities.c      | 22 ++++++++++++++++------
+ 6 files changed, 49 insertions(+), 29 deletions(-)
+
+2010-02-15  gb10  <gb10>
+ Graph package replacement: allow multiple selections
+ bigpicturegrid.c    | 60 +++++++++++++++++++++++++++--------------------------
+ blxdotter.c         | 56 ++++++++++++++++++++++++++++++-------------------
+ blxviewMainWindow.c | 38 +++++++++++++++++++++++++--------
+ detailview.c        | 20 +++++++++++-------
+ detailview.h        |  5 +++--
+ 5 files changed, 110 insertions(+), 69 deletions(-)
+
+2010-02-15  gb10  <gb10>
+ Graph package replacement: improved performance of grid preview box by drawing grid to pixmap. Also added pfetch.
+ bigpicture.c        | 114 +++++++++++++++++++++++++++++++++++++---------------
+ bigpicture.h        |   5 +--
+ bigpicturegrid.c    |  85 ++++++++++++++++++++-------------------
+ bigpicturegrid.h    |   3 --
+ blixem_.h           |   4 +-
+ blxFetch.c          |  71 +++++++++++++++++++++++---------
+ blxdotter.c         |   2 +-
+ blxviewMainWindow.c |  17 ++++++--
+ blxviewMainWindow.h |   2 +
+ detailview.c        |  72 +++++++++++++--------------------
+ detailview.h        |   2 +-
+ detailviewtree.c    |  47 +++++++++++++++-------
+ utilities.c         |  26 +++++++++++-
+ utilities.h         |   2 +
+ 14 files changed, 288 insertions(+), 164 deletions(-)
+
+2010-02-11  gb10  <gb10>
+ Graph package replacement: bug fixes. Fixed scrolling on linux. Fixed missing grid header. Fixed prev/next match for protein matches.
+ bigpicture.c           |  22 +++++-----
+ bigpicturegrid.c       | 111 +++++++++++++++++++++++++------------------------
+ bigpicturegrid.h       |   2 +-
+ blxdotter.c            |   4 +-
+ blxviewMainWindow.c    |  17 ++++----
+ detailview.c           |  28 +++++++------
+ detailviewtree.c       |  44 +++++++++++---------
+ exonview.c             |   5 +--
+ sequencecellrenderer.c |   6 +--
+ utilities.c            |  52 ++++++++++++++++++-----
+ utilities.h            |   2 +
+ 11 files changed, 168 insertions(+), 125 deletions(-)
+
+2010-02-10  gb10  <gb10>
+ Graph package replacement: fixed bug where s index was not being shown for protein matches
+ detailview.c | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+2010-02-10  gb10  <gb10>
+ Graph package replacement: squash matches now working
+ bigpicturegrid.c    | 101 +++++++++++++++++++++++++++++--------------------
+ blxdotter.c         |  70 ++++++++++++++++++++--------------
+ blxviewMainWindow.c | 100 +++++++++++++++++++++++++++++++++++++------------
+ blxviewMainWindow.h |  13 ++++---
+ detailview.c        |  94 ++++++++++++++++++++++++++++++++--------------
+ detailview.h        |   4 +-
+ detailviewtree.c    | 106 +++++++++++++++++++++++-----------------------------
+ detailviewtree.h    |   8 ++--
+ utilities.c         |  12 +++++-
+ utilities.h         |   2 +
+ 10 files changed, 317 insertions(+), 193 deletions(-)
+
+2010-02-10  gb10  <gb10>
+ Graph package replacement: squash matches
+ detailview.c     |   2 +
+ detailviewtree.c | 135 ++++++++++++++++++++++++++++++++++++++++++-------------
+ detailviewtree.h |   4 +-
+ 3 files changed, 108 insertions(+), 33 deletions(-)
+
+2010-02-09  gb10  <gb10>
+ Graph package replacement: further small performance improvement
+ sequencecellrenderer.c | 59 +++++++++++++++++++++++++++-----------------------
+ 1 file changed, 32 insertions(+), 27 deletions(-)
+
+2010-02-09  gb10  <gb10>
+ Graph package replacement: improved speed of squash-matches view
+ sequencecellrenderer.c | 203 ++++++++++++++++++++-----------------------------
+ 1 file changed, 84 insertions(+), 119 deletions(-)
+
+2010-02-09  gb10  <gb10>
+ Graph package replacement: squash matches (work in progress). Also added (mostly empty) settings dialog.
+ bigpicture.c           |  14 +++
+ bigpicture.h           |   2 +
+ blxviewMainWindow.c    | 138 ++++++++++++++++++++---------
+ detailview.c           |  27 +++++-
+ detailview.h           |   3 +
+ detailviewtree.c       |  63 ++++++++++---
+ detailviewtree.h       |   7 ++
+ sequencecellrenderer.c | 235 +++++++++++++++++++++++++++++--------------------
+ 8 files changed, 339 insertions(+), 150 deletions(-)
+
+2010-02-09  gb10  <gb10>
+ Graph package replacement: squash matches (work in progress)
+ detailview.c     |  2 ++
+ detailviewtree.c | 24 +++++++++++++++---------
+ detailviewtree.h |  1 +
+ 3 files changed, 18 insertions(+), 9 deletions(-)
+
+2010-02-09  gb10  <gb10>
+ Graph package replacement: fixed a couple of bugs with scrolling and row selections
+ detailview.c     |  53 ++++++++++++++++++++------
+ detailviewtree.c | 112 ++++++++++++++++++++++++++++++++++++++++++++++---------
+ detailviewtree.h |   5 +--
+ 3 files changed, 139 insertions(+), 31 deletions(-)
+
+2010-02-08  gb10  <gb10>
+ Graph package replacement: work in progress: squash matches
+ bigpicturegrid.c       |  57 ++++++++----
+ blxviewMainWindow.c    |  16 ++--
+ blxviewMainWindow.h    |   8 +-
+ detailview.c           |  73 +++++++--------
+ detailview.h           |   2 +-
+ detailviewtree.c       | 235 ++++++++++++++++++++++---------------------------
+ detailviewtree.h       |   4 +-
+ exonview.c             |  58 ++++++------
+ sequencecellrenderer.c | 114 ++++++++++++------------
+ sequencecellrenderer.h |   4 +-
+ 10 files changed, 287 insertions(+), 284 deletions(-)
+
+2010-02-08  gb10  <gb10>
+ Graph package replacement: small improvement to middle-mouse scrolling
+ detailviewtree.c | 28 +++++++++++++++++-----------
+ 1 file changed, 17 insertions(+), 11 deletions(-)
+
+2010-02-08  gb10  <gb10>
+ Graph package replacement: highlight selected triplet for protein matches
+ blxviewMainWindow.c |  84 ++++++++++++++++++---------
+ detailview.c        | 161 +++++++++++++++++++++++++++++++++++++++++++---------
+ detailview.h        |   9 ++-
+ detailviewtree.c    | 153 +++++++++++++++++++++++++++++--------------------
+ utilities.h         |   3 +-
+ 5 files changed, 295 insertions(+), 115 deletions(-)
+
+2010-02-05  gb10  <gb10>
+ Graph package replacement: fixed small bugs with hiding windows
+ blxviewMainWindow.c | 85 +++++++++++++++++++++++++++++++++++++++++++----------
+ detailview.c        | 39 +++++++++++++++++++++++-
+ detailview.h        |  1 +
+ 3 files changed, 108 insertions(+), 17 deletions(-)
+
+2010-02-05  gb10  <gb10>
+ Graph package replacement: Fixed bug with exon end coords being one off for frames 2 and 3. Added shortcut key to hide panes. Fixed a bug where scroll range refresh wasn't happening if frame 1 was hidden.
+ bigpicturegrid.c       |  19 ++----
+ blxviewMainWindow.c    |  66 +++++++++++++++---
+ detailview.c           | 109 +++++++++++++++--------------
+ detailviewtree.c       |   6 +-
+ sequencecellrenderer.c | 138 +------------------------------------
+ sequencecellrenderer.h |   2 -
+ utilities.c            | 182 +++++++++++++++++++++++++++++++++++++++++++++++--
+ utilities.h            |  20 +++++-
+ 8 files changed, 319 insertions(+), 223 deletions(-)
+
+2010-02-04  gb10  <gb10>
+ Graph package replacement: fixed a few bugs with starting dotter
+ blxdotter.c | 2 +-
+ dotter.c    | 4 ++--
+ utilities.c | 2 +-
+ 3 files changed, 4 insertions(+), 4 deletions(-)
+
+2010-02-04  gb10  <gb10>
+ Graph package replacement: added dotter settings dialog
+ blxdotter.c         | 825 ++++++++++++++++++++++++++++++++++++++++++++++++++++
+ blxdotter.h         |  24 ++
+ blxviewMainWindow.c |  20 +-
+ blxviewMainWindow.h |   4 +
+ detailview.c        |   1 +
+ detailview.h        |   2 +-
+ 6 files changed, 869 insertions(+), 7 deletions(-)
+
+2010-02-04  gb10  <gb10>
+ Graph package replacement: added ability to call dotter
+ blxmain.c              |  53 ++---
+ blxview.c              | 632 +------------------------------------------------
+ blxviewMainWindow.c    | 104 +++++---
+ blxviewMainWindow.h    |  37 ++-
+ detailviewtree.c       |  17 +-
+ dotter.c               |  36 +--
+ dotter.h               |  10 +-
+ dotter_.h              |   9 +-
+ sequencecellrenderer.c |  13 +-
+ utilities.c            |  32 ++-
+ utilities.h            |   7 +-
+ 11 files changed, 212 insertions(+), 738 deletions(-)
+
+2010-02-03  gb10  <gb10>
+ Graph package replacement: added ability to show/hide panes
+ bigpicture.c        |   7 +-
+ bigpicture.h        |   3 +-
+ bigpicturegrid.c    |   6 +-
+ blxview.c           |  27 +----
+ blxviewMainWindow.c | 328 ++++++++++++++++++++++++++++++++++++++++------------
+ blxviewMainWindow.h |   4 +-
+ detailview.c        |  98 +++++++++++-----
+ detailview.h        |   5 +-
+ detailviewtree.c    |   9 +-
+ exonview.c          |   4 +-
+ utilities.c         |  54 +++++++--
+ utilities.h         |   2 +
+ 12 files changed, 394 insertions(+), 153 deletions(-)
+
+2010-02-02  gb10  <gb10>
+ Graph package replacement: highlight colour for similar peptide matches added
+ detailview.c           |  8 ++++++++
+ detailview.h           |  3 +++
+ detailviewtree.c       | 26 +++++++++++++++++++++++---
+ detailviewtree.h       |  5 ++++-
+ iupac.h                |  9 ++++++++-
+ sequencecellrenderer.c | 23 ++++++++++++++---------
+ utilities.h            | 31 +++++++++++++++++--------------
+ 7 files changed, 77 insertions(+), 28 deletions(-)
+
+2010-02-02  gb10  <gb10>
+ Graph package replacement: Made protein matches display correctly when strands toggled.
+ bigpicture.c           |  4 ++-
+ bigpicturegrid.c       |  4 +--
+ blxviewMainWindow.c    |  4 +--
+ detailview.c           | 70 ++++++++++++++++++++++++++++----------------------
+ detailview.h           | 10 +++++---
+ detailviewtree.c       | 26 +++++++++++++------
+ detailviewtree.h       |  4 +--
+ sequencecellrenderer.c | 13 +++++++---
+ utilities.c            | 22 ++++++++--------
+ utilities.h            |  9 +++++--
+ 10 files changed, 101 insertions(+), 65 deletions(-)
+
+2010-02-01  gb10  <gb10>
+ Graph package replacement: now draws exon boundaries in all rows in tree view
+ detailview.c           | 22 +++++++++++++++
+ detailview.h           | 29 +++++++++++--------
+ detailviewtree.c       | 26 ++++++++++++++---
+ detailviewtree.h       |  3 ++
+ sequencecellrenderer.c | 76 +++++++++++++++++++++++++++++++++++++++++++++++++-
+ 5 files changed, 140 insertions(+), 16 deletions(-)
+
+2010-01-29  gb10  <gb10>
+ Graph package replacement: jump to next/prev match
+ bigpicturegrid.c    |  14 ++-
+ blxview.c           |  53 +---------
+ blxviewMainWindow.c |  19 ++--
+ detailview.c        | 281 +++++++++++++++++++++++++++++++++++++++-------------
+ detailview.h        |   3 +-
+ detailviewtree.c    |  16 +--
+ utilities.c         |   9 +-
+ utilities.h         |   3 +-
+ 8 files changed, 253 insertions(+), 145 deletions(-)
+
+2010-01-29  gb10  <gb10>
+ Graph package replacement: key shortcuts for scrolling and zooming
+ bigpicture.c        |  31 ++++++----
+ bigpicture.h        |   1 +
+ blxviewMainWindow.c | 168 ++++++++++++++++++++++++++++++++++++----------------
+ detailview.c        |  64 ++++++++++----------
+ detailview.h        |   1 +
+ 5 files changed, 172 insertions(+), 93 deletions(-)
+
+2010-01-29  gb10  <gb10>
+ Graph package replacement: added printing support
+ bigpicture.c           |  15 ++++++++
+ bigpicturegrid.c       |  43 +++++++--------------
+ bigpicturegrid.h       |   1 -
+ blxviewMainWindow.c    | 102 ++++++++++++++++++++++++++++---------------------
+ blxviewMainWindow.h    |   4 ++
+ detailview.c           |  13 +------
+ detailviewtree.c       |  53 +++++++++----------------
+ detailviewtree.h       |   2 -
+ exonview.c             |  23 +++++++++--
+ sequencecellrenderer.c |  12 +++---
+ utilities.c            |  93 +++++++++++++++++++++++++++++++++++++++++++-
+ utilities.h            |   6 +++
+ 12 files changed, 232 insertions(+), 135 deletions(-)
+
+2010-01-28  gb10  <gb10>
+ Graph package replacement: printing - work in progress
+ blxviewMainWindow.c    | 44 +++++++++++++++++++++-----
+ detailviewtree.c       | 32 +++++++++++++++++++
+ detailviewtree.h       | 16 +++++-----
+ sequencecellrenderer.c | 84 ++++++++++++++++++++++++++++++++++++++------------
+ 4 files changed, 142 insertions(+), 34 deletions(-)
+
+2010-01-28  gb10  <gb10>
+ Graph package replacements: refactored SequenceCellRenderer code
+ detailview.c           |  85 ++++++-------
+ detailview.h           |  31 ++---
+ detailviewtree.c       | 135 +++++++++------------
+ detailviewtree.h       |  13 +-
+ sequencecellrenderer.c | 324 +++++++++++++++++++------------------------------
+ sequencecellrenderer.h |   7 --
+ 6 files changed, 247 insertions(+), 348 deletions(-)
+
+2010-01-28  gb10  <gb10>
+ Graph package replacement: started adding printing support
+ blxviewMainWindow.c | 131 ++++++++++++++++++++++++++++++++++++++++++++++++----
+ blxviewMainWindow.h |   4 +-
+ detailview.c        |   2 +-
+ detailview.h        |   1 +
+ utilities.h         |   1 +
+ 5 files changed, 128 insertions(+), 11 deletions(-)
+
+2010-01-27  gb10  <gb10>
+ Graph package replacement: draw grid to pixmap rather than straight to screen.
+ bigpicture.c        |   6 ++
+ bigpicturegrid.c    | 211 +++++++++++++++++++++++++++++++++++-----------------
+ bigpicturegrid.h    |   5 ++
+ blxviewMainWindow.c |   9 ++-
+ detailview.c        |  61 +++++----------
+ detailviewtree.c    |  12 ---
+ detailviewtree.h    |   1 -
+ 7 files changed, 177 insertions(+), 128 deletions(-)
+
+2010-01-26  gb10  <gb10>
+ Graph package replacement: improvements to scrolling and to make tree row sizing more robust.
+ detailview.c           | 73 +++++++++++++++++++++++++------------
+ detailview.h           |  8 ++---
+ detailviewtree.c       | 10 ++++--
+ sequencecellrenderer.c | 98 +++++++++++++++++++++++++-------------------------
+ sequencecellrenderer.h |  1 +
+ 5 files changed, 112 insertions(+), 78 deletions(-)
+
+2010-01-25  gb10  <gb10>
+ Graph package replacement: allow selection of MSPs that are not in the filtered tree
+ bigpicturegrid.c       |  61 ++--
+ blxview.c              |   4 +-
+ blxview.h              |   4 +-
+ blxviewMainWindow.c    | 169 ++++++++----
+ blxviewMainWindow.h    |   8 +
+ detailview.c           | 180 +++++++++---
+ detailview.h           |   3 +-
+ detailviewtree.c       | 737 ++++++++++++++++++++++++-------------------------
+ detailviewtree.h       |  10 +-
+ sequencecellrenderer.c | 131 ++-------
+ utilities.c            |   8 -
+ utilities.h            |   1 -
+ 12 files changed, 695 insertions(+), 621 deletions(-)
+
+2010-01-22  gb10  <gb10>
+ Graph package replacement: added separate tree view headers
+ bigpicturegrid.c       |   2 +-
+ blxviewMainWindow.c    |   3 +
+ detailview.c           | 414 +++++++++++++++++++++++++++----------------------
+ detailview.h           |  75 +++++++--
+ detailviewtree.c       | 373 ++++++++++++++++++++++++++++++++++++--------
+ detailviewtree.h       |  31 ++--
+ sequencecellrenderer.c |  24 +--
+ utilities.c            |  43 +++++
+ utilities.h            |  14 +-
+ 9 files changed, 690 insertions(+), 289 deletions(-)
+
+2010-01-21  gb10  <gb10>
+ Graph package replacement: fixed issue with tiny MSP lines not showing. Fixed CalcId for reverse strand
+ bigpicturegrid.c |  37 ++++++++++++-------
+ detailviewtree.c | 109 ++++++++++++++++++-------------------------------------
+ 2 files changed, 58 insertions(+), 88 deletions(-)
+
+2010-01-21  gb10  <gb10>
+ Graph package replacement: fixed exon positions for protain matches. Fixed highlighting.
+ bigpicturegrid.h       |  2 --
+ detailview.c           | 18 +++++++++++++++-
+ detailviewtree.c       | 18 ++++++++++++----
+ exonview.c             |  4 ++--
+ sequencecellrenderer.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++----
+ sequencecellrenderer.h |  2 --
+ utilities.c            |  9 ++++++++
+ utilities.h            |  4 ++++
+ 8 files changed, 100 insertions(+), 15 deletions(-)
+
+2010-01-21  gb10  <gb10>
+ Graph package replacement: always show coords in terms of the DNA sequence.
+ blxviewMainWindow.c    |  6 +++---
+ detailview.h           |  4 ++--
+ detailviewtree.c       | 38 +++++++++++++++++++++++++++++++++++---
+ sequencecellrenderer.c |  3 ++-
+ 4 files changed, 42 insertions(+), 9 deletions(-)
+
+2010-01-21  gb10  <gb10>
+ Graph package replacement: fixed big picture grid view for protein matches
+ bigpicture.c           |   6 +--
+ bigpicture.h           |   3 ++
+ bigpicturegrid.c       | 119 +++++++++++++++++++++++++++++++------------------
+ bigpicturegrid.h       |   1 -
+ detailview.c           |  83 ++++++++++++++++------------------
+ detailview.h           |   3 +-
+ detailviewtree.c       |   7 ++-
+ exonview.c             |   4 +-
+ sequencecellrenderer.c |  10 +----
+ 9 files changed, 127 insertions(+), 109 deletions(-)
+
+2010-01-20  gb10  <gb10>
+ Graph package replacement: calcId fixes
+ blxviewMainWindow.c    | 21 ++++++++--------
+ blxviewMainWindow.h    |  4 +++-
+ detailview.c           | 14 ++++++-----
+ detailviewtree.c       | 65 +++++++++++++++++++++++++++++++++-----------------
+ detailviewtree.h       |  5 ++--
+ sequencecellrenderer.c | 36 +++++++++++++++-------------
+ 6 files changed, 87 insertions(+), 58 deletions(-)
+
+2010-01-20  gb10  <gb10>
+ Graph package replacement: initial work on protein matches.
+ bigpicture.c           |   44 +-
+ bigpicture.h           |    5 +-
+ bigpicturegrid.c       |    5 +-
+ blxFetch.c             |   72 +-
+ blxmain.c              |  124 +-
+ blxparser.c            |   98 +-
+ blxselect.c            |    6 +-
+ blxview.c              | 3137 ++++++++++++++++++++++--------------------------
+ blxview.h              |   10 +-
+ blxviewMainWindow.c    |  226 +++-
+ blxviewMainWindow.h    |   36 +-
+ detailview.c           |  169 ++-
+ detailview.h           |   11 +-
+ detailviewtree.c       |  143 ++-
+ exonview.c             |    2 +
+ sequencecellrenderer.c |  641 ++++++----
+ translate.c            |    6 +-
+ utilities.c            |   73 +-
+ utilities.h            |   12 +-
+ 19 files changed, 2605 insertions(+), 2215 deletions(-)
+
+2010-01-14  gb10  <gb10>
+ Graph package replacement: Started adding handling for protein matches. Improved scrolling and navigation.
+ bigpicture.c           |   3 +-
+ bigpicture.h           |   1 +
+ blxparser.c            |  10 +-
+ blxview.c              |   4 +-
+ blxviewMainWindow.c    |  64 ++++-
+ blxviewMainWindow.h    |   2 +-
+ detailview.c           | 732 ++++++++++++++++++++++++++++++++++++++++++++-----
+ detailview.h           |  62 ++++-
+ detailviewtree.c       | 479 +++++++++++---------------------
+ detailviewtree.h       |  37 +--
+ sequencecellrenderer.c | 270 +++++++++++++-----
+ sequencecellrenderer.h |  15 +-
+ 12 files changed, 1172 insertions(+), 507 deletions(-)
+
+2010-01-05  gb10  <gb10>
+ Graph package replacement: added missing include.
+ exonview.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+2010-01-05  gb10  <gb10>
+ Graph package replacement: Fixed bug where bases were offset incorrectly when strands toggled. Added utilities file.
+ bigpicture.c           |  42 +++++++------------
+ bigpicturegrid.c       |  27 ++++++++----
+ blixem_.h              |  26 +-----------
+ blxparser.c            |  15 +------
+ blxview.c              |  40 +-----------------
+ blxviewMainWindow.c    |   2 +-
+ detailview.c           |  35 ++++++----------
+ detailviewtree.c       |  93 +++++++++++++++++++++-------------------
+ detailviewtree.h       |   1 +
+ sequencecellrenderer.c |   8 ++--
+ utilities.c            | 112 +++++++++++++++++++++++++++++++++++++++++++++++++
+ utilities.h            |  37 ++++++++++++++++
+ 12 files changed, 257 insertions(+), 181 deletions(-)
+
+2010-01-05  gb10  <gb10>
+ Graph package replacement: made big picture scrolling more predictable.
+ bigpicture.c     | 32 ++++++++++++++++++++++++++++++--
+ bigpicture.h     |  7 +++++++
+ bigpicturegrid.c | 35 +++++++++++++++++++++++++----------
+ 3 files changed, 62 insertions(+), 12 deletions(-)
+
+2010-01-05  gb10  <gb10>
+ Graph package replacement: Detail view keeps centred on selected base when zoom. Middle-click added for exon view.
+ bigpicture.c           | 23 ++++++++++++
+ bigpicturegrid.c       | 95 ++++++++++++++++++++++----------------------------
+ bigpicturegrid.h       |  3 ++
+ detailview.c           | 65 ++++++++++++++++++++++------------
+ exonview.c             | 74 +++++++++++++++++++++++++++++++++++++--
+ sequencecellrenderer.c |  2 +-
+ 6 files changed, 181 insertions(+), 81 deletions(-)
+
+2010-01-04  gb10  <gb10>
+ Graph package replacement: implemented sorting.
+ blxview.c        | 110 +++--------------
+ detailview.c     | 104 ++++++++++------
+ detailviewtree.c | 356 ++++++++++++++++++++++++++++++++++++++-----------------
+ detailviewtree.h |   4 +
+ exonview.c       |   2 -
+ 5 files changed, 338 insertions(+), 238 deletions(-)
+
+2010-01-04  gb10  <gb10>
+ Graph package replacement: Draw introns.
+ detailviewtree.c | 74 ++++++++++++++++++++++++++------------------------------
+ exonview.c       | 57 +++++++++++++++++++++++++++++++------------
+ 2 files changed, 76 insertions(+), 55 deletions(-)
+
+2010-01-04  gb10  <gb10>
+ Graph package replacement: removed duff dependencies.
+ blxviewMainWindow.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+2010-01-04  gb10  <gb10>
+ Graph package replacement: added exon view.
+ exonview.c | 204 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ exonview.h |  12 ++++
+ 2 files changed, 216 insertions(+)
+
+2010-01-04  gb10  <gb10>
+ Graph package replacement: Added exon view. Improved scrolling.
+ bigpicture.c        | 228 +++++++++++++++++++++++++++++++++++++++++++++++-----
+ bigpicture.h        |  14 +++-
+ bigpicturegrid.c    |  90 ++++++++++-----------
+ bigpicturegrid.h    |   7 --
+ blxmain.c           |  30 +++----
+ blxview.c           |  11 +--
+ blxviewMainWindow.c |   7 +-
+ detailview.c        | 138 +++++++++++++++++++++----------
+ detailview.h        |   9 ++-
+ detailviewtree.c    | 114 ++++++++++++++++++--------
+ 10 files changed, 469 insertions(+), 179 deletions(-)
+
+2009-12-18  gb10  <gb10>
+ Graph package replacement: added functionality to select msps from the grid.
+ bigpicturegrid.c | 106 +++++++++++++++++++++++++++++++++++++++++++++++++------
+ detailviewtree.c |  50 ++++++++++++++++++++------
+ detailviewtree.h |   3 ++
+ 3 files changed, 137 insertions(+), 22 deletions(-)
+
+2009-12-18  gb10  <gb10>
+ Graph package replacement: fixed bug with scrolling from big picture when strands are toggled
+ bigpicturegrid.c | 29 +++++++++++++++++++++++------
+ 1 file changed, 23 insertions(+), 6 deletions(-)
+
+2009-12-18  gb10  <gb10>
+ Graph package replacement: fixed coord feedback for out-of-range bases
+ detailviewtree.c       |  9 ++++-
+ sequencecellrenderer.c | 94 +++++++++++++++++++++++++++++++++-----------------
+ sequencecellrenderer.h |  2 +-
+ 3 files changed, 72 insertions(+), 33 deletions(-)
+
+2009-12-18  gb10  <gb10>
+ Graph package removal: now draws gaps in the reference sequence. Also added right-click menu.
+ bigpicture.c           |   3 +-
+ bigpicture.h           |   3 +-
+ blxviewMainWindow.c    | 257 +++++++++++++++++++++++++++++++++++++++++++++++--
+ blxviewMainWindow.h    |  10 +-
+ detailview.c           | 115 ++++++----------------
+ detailview.h           |   3 +-
+ sequencecellrenderer.c | 107 +++++++++++++++-----
+ 7 files changed, 373 insertions(+), 125 deletions(-)
+
+2009-12-15  gb10  <gb10>
+ Graph package replacement: fixed issue getting monospace font
+ bigpicturegrid.c       |   2 +-
+ blixem_.h              |   6 +-
+ blxview.c              |  43 +++++---
+ blxview.h              |   7 +-
+ blxviewMainWindow.c    |  19 +++-
+ blxviewMainWindow.h    |   5 +-
+ detailview.c           | 166 ++++++++++++++++++++++--------
+ detailview.h           |   9 +-
+ detailviewtree.c       | 268 ++++++++++++++++++++++++++++++++++++++++++++-----
+ detailviewtree.h       |  13 ++-
+ sequencecellrenderer.c |  14 ++-
+ 11 files changed, 452 insertions(+), 100 deletions(-)
+
+2009-12-14  gb10  <gb10>
+ Graph package removal: Improved speed of setting feedback-box text. Don't draw introns or the ref sequence in the grid.
+ bigpicturegrid.c       |  55 ++++++++++++----------
+ blixem_.h              |   7 ++-
+ detailviewtree.c       | 123 ++++++++++++++++++++++++++++++++-----------------
+ sequencecellrenderer.c |  10 ++--
+ 4 files changed, 122 insertions(+), 73 deletions(-)
+
+2009-12-14  gb10  <gb10>
+ Graph package replacement: fixed bug where msp lines were shown incorrectly when strands are toggled.
+ bigpicture.c           | 102 ++++++++++++-------------
+ bigpicture.h           |  16 ++--
+ bigpicturegrid.c       | 196 ++++++++++++++++++++++++++++++++++++-------------
+ bigpicturegrid.h       |  19 ++++-
+ blixem_.h              |  16 +++-
+ blxviewMainWindow.c    |   3 -
+ detailview.c           |   6 ++
+ detailviewtree.c       |  79 ++++++++++++++++++++
+ detailviewtree.h       |  25 +++++++
+ sequencecellrenderer.c |  62 +++++++++-------
+ 10 files changed, 384 insertions(+), 140 deletions(-)
+
+2009-12-11  gb10  <gb10>
+ Graph package replacement: display right-to-left when strands are toggled
+ bigpicture.c           |  2 +-
+ bigpicturegrid.c       | 10 +++++-
+ blixem_.h              |  4 ++-
+ detailview.c           | 24 +++++++++++---
+ detailview.h           |  3 +-
+ detailviewtree.c       | 82 ++++++++++++++++++++++++++++++++++++++++++-----
+ detailviewtree.h       |  2 ++
+ sequencecellrenderer.c | 87 +++++++++++++++++++++++++++++++++++++++-----------
+ 8 files changed, 179 insertions(+), 35 deletions(-)
+
+2009-12-10  gb10  <gb10>
+ Graph package replacement: improvements to feedback box
+ detailview.c     |  14 +++++-
+ detailview.h     |   3 ++
+ detailviewtree.c | 140 +++++++++++++++++++++++++++++++++++++++----------------
+ 3 files changed, 117 insertions(+), 40 deletions(-)
+
+2009-12-10  gb10  <gb10>
+ Graph package replacement: Added facility to toggle strands. Also changed cell renderer to draw the colours for sequences manually and draw the text as a single, non-marked-up pango layout (improves speed).
+ bigpicture.c           |  99 +++++++-
+ bigpicture.h           |  11 +-
+ bigpicturegrid.c       |  33 ++-
+ blxparser.c            |   4 +-
+ blxview.c              |   4 +-
+ blxview.h              |   6 +-
+ blxviewMainWindow.c    |  31 ++-
+ blxviewMainWindow.h    |  13 +-
+ detailview.c           | 478 +++++++++++++++++++++++++++++---------
+ detailview.h           |  18 +-
+ detailviewtree.c       | 234 ++++++++-----------
+ detailviewtree.h       |  13 +-
+ sequencecellrenderer.c | 604 +++++++++++++++++++------------------------------
+ 13 files changed, 893 insertions(+), 655 deletions(-)
+
+2009-12-08  gb10  <gb10>
+ Graph package replacement: added support for exons in the detail view.
+ blixem_.h              |  3 ++-
+ detailviewtree.c       | 50 ++++++++++++++++++++++----------------------
+ sequencecellrenderer.c | 56 +++++++++++++++++++++++++++++---------------------
+ 3 files changed, 60 insertions(+), 49 deletions(-)
+
+2009-12-08  gb10  <gb10>
+ Graph package replacement: forward and reverse strands both now working.
+ bigpicturegrid.c       |   34 +-
+ bigpicturegrid.h       |    4 +-
+ blixem_.h              |   11 +-
+ blxFetch.c             |  173 ++++++-
+ blxmain.c              |    3 +-
+ blxparser.c            |  111 ++---
+ blxselect.c            |    4 +-
+ blxview.c              | 1260 +++++++++++++++++++++++++-----------------------
+ blxviewMainWindow.c    |    2 +-
+ blxviewMainWindow.h    |    2 +-
+ detailview.c           |  132 +++--
+ detailview.h           |    2 +
+ detailviewtree.c       |  310 +++++++++---
+ detailviewtree.h       |   11 +-
+ dotter.c               |    4 +-
+ dotter.h               |    4 +-
+ dotterMain.c           |    4 +-
+ sequencecellrenderer.c |  663 ++++++++++++++++---------
+ sequencecellrenderer.h |    8 +-
+ translate.c            |   69 +--
+ 20 files changed, 1654 insertions(+), 1157 deletions(-)
+
+2009-12-02  gb10  <gb10>
+ Initial stages of Graph package replacement
+ bigpicture.c           | 367 ++++++++++++++++++++++
+ bigpicture.h           |  70 +++++
+ bigpicturegrid.c       | 604 ++++++++++++++++++++++++++++++++++++
+ bigpicturegrid.h       |  61 ++++
+ blxviewMainWindow.c    | 134 ++++++++
+ blxviewMainWindow.h    |  29 ++
+ detailview.c           | 773 ++++++++++++++++++++++++++++++++++++++++++++++
+ detailview.h           |  54 ++++
+ detailviewtree.c       | 814 +++++++++++++++++++++++++++++++++++++++++++++++++
+ detailviewtree.h       |  67 ++++
+ sequencecellrenderer.c | 703 ++++++++++++++++++++++++++++++++++++++++++
+ sequencecellrenderer.h |  58 ++++
+ 12 files changed, 3734 insertions(+)
+
+2009-12-02  gb10  <gb10>
+ Initial stages of Graph package removal
+ blixem_.h   |   13 +-
+ blxFetch.c  |   28 +-
+ blxmain.c   |   24 +-
+ blxview.c   | 3737 ++++++++++++++++++++++++++---------------------------------
+ blxview.h   |   19 +-
+ dotter.h    |    4 +-
+ translate.c |    4 +-
+ 7 files changed, 1708 insertions(+), 2121 deletions(-)
+
+2009-11-03  edgrif  <edgrif>
+ first version of new seqtools code, copied from w9
+ align.c        |  452 +++
+ asn.c          | 2352 ++++++++++++++++
+ belvu.c        | 8590 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ blixem_.h      |  239 ++
+ blxFetch.c     | 1701 +++++++++++
+ blxmain.c      |  448 +++
+ blxparser.c    | 1452 ++++++++++
+ blxselect.c    |  404 +++
+ blxview.c      | 5495 ++++++++++++++++++++++++++++++++++++
+ blxview.h      |  147 +
+ dbidx.c        |  750 +++++
+ diskdump.c     |  114 +
+ diskfix.c      |   91 +
+ dotter.c       | 4086 +++++++++++++++++++++++++++
+ dotter.h       |  110 +
+ dotterKarlin.c |  455 +++
+ dotterMain.c   |  555 ++++
+ dotter_.h      |   69 +
+ efetch.c       |  533 ++++
+ embl.c         | 1992 +++++++++++++
+ fetch.c        |  500 ++++
+ gfcode.c       | 1259 +++++++++
+ hexcode.c      |  401 +++
+ iupac.h        |  287 ++
+ readseq.c      |  361 +++
+ translate.c    |  369 +++
+ vmapdata2.c    | 1895 +++++++++++++
+ vmapphys.c     |  417 +++
+ 28 files changed, 35524 insertions(+)
diff --git a/INSTALL b/INSTALL
new file mode 100644
index 0000000..4b09d93
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,379 @@
+Installation Instructions
+*************************
+
+Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
+2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+
+   Copying and distribution of this file, with or without modification,
+are permitted in any medium without royalty provided the copyright
+notice and this notice are preserved.  This file is offered as-is,
+without warranty of any kind.
+
+
+================================================================================
+Platform specific Instructions
+
+Supported platforms are Linux Mac OS X (Intel) and Windows using the Cygwin
+environment. 
+
+This file contains the standard FSF installation instructions for autoconf-based
+packages but plaform specific instructions are given the accompanying
+INSTALL.xxxx files.
+
+================================================================================
+
+
+Basic Installation
+==================
+
+   Briefly, the shell commands `./configure; make; make install' should
+configure, build, and install this package.  The following
+more-detailed instructions are generic; see the `README' file for
+instructions specific to this package.  Some packages provide this
+`INSTALL' file but do not implement all of the features documented
+below.  The lack of an optional feature in a given package is not
+necessarily a bug.  More recommendations for GNU packages can be found
+in *note Makefile Conventions: (standards)Makefile Conventions.
+
+   The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation.  It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions.  Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, and a
+file `config.log' containing compiler output (useful mainly for
+debugging `configure').
+
+   It can also use an optional file (typically called `config.cache'
+and enabled with `--cache-file=config.cache' or simply `-C') that saves
+the results of its tests to speed up reconfiguring.  Caching is
+disabled by default to prevent problems with accidental use of stale
+cache files.
+
+   If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release.  If you are using the cache, and at
+some point `config.cache' contains results you don't want to keep, you
+may remove or edit it.
+
+   The file `configure.ac' (or `configure.in') is used to create
+`configure' by a program called `autoconf'.  You need `configure.ac' if
+you want to change it or regenerate `configure' using a newer version
+of `autoconf'.
+
+   The simplest way to compile this package is:
+
+  1. `cd' to the directory containing the package's source code and type
+     `./configure' to configure the package for your system.
+
+     Running `configure' might take a while.  While running, it prints
+     some messages telling which features it is checking for.
+
+  2. Type `make' to compile the package.
+
+  3. Optionally, type `make check' to run any self-tests that come with
+     the package, generally using the just-built uninstalled binaries.
+
+  4. Type `make install' to install the programs and any data files and
+     documentation.  When installing into a prefix owned by root, it is
+     recommended that the package be configured and built as a regular
+     user, and only the `make install' phase executed with root
+     privileges.
+
+  5. Optionally, type `make installcheck' to repeat any self-tests, but
+     this time using the binaries in their final installed location.
+     This target does not install anything.  Running this target as a
+     regular user, particularly if the prior `make install' required
+     root privileges, verifies that the installation completed
+     correctly.
+
+  6. You can remove the program binaries and object files from the
+     source code directory by typing `make clean'.  To also remove the
+     files that `configure' created (so you can compile the package for
+     a different kind of computer), type `make distclean'.  There is
+     also a `make maintainer-clean' target, but that is intended mainly
+     for the package's developers.  If you use it, you may have to get
+     all sorts of other programs in order to regenerate files that came
+     with the distribution.
+
+  7. Often, you can also type `make uninstall' to remove the installed
+     files again.  In practice, not all packages have tested that
+     uninstallation works correctly, even though it is required by the
+     GNU Coding Standards.
+
+  8. Some packages, particularly those that use Automake, provide `make
+     distcheck', which can by used by developers to test that all other
+     targets like `make install' and `make uninstall' work correctly.
+     This target is generally not run by end users.
+
+Compilers and Options
+=====================
+
+   Some systems require unusual options for compilation or linking that
+the `configure' script does not know about.  Run `./configure --help'
+for details on some of the pertinent environment variables.
+
+   You can give `configure' initial values for configuration parameters
+by setting variables in the command line or in the environment.  Here
+is an example:
+
+     ./configure CC=c99 CFLAGS=-g LIBS=-lposix
+
+   *Note Defining Variables::, for more details.
+
+Compiling For Multiple Architectures
+====================================
+
+   You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory.  To do this, you can use GNU `make'.  `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script.  `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'.  This
+is known as a "VPATH" build.
+
+   With a non-GNU `make', it is safer to compile the package for one
+architecture at a time in the source code directory.  After you have
+installed the package for one architecture, use `make distclean' before
+reconfiguring for another architecture.
+
+   On MacOS X 10.5 and later systems, you can create libraries and
+executables that work on multiple system types--known as "fat" or
+"universal" binaries--by specifying multiple `-arch' options to the
+compiler but only a single `-arch' option to the preprocessor.  Like
+this:
+
+     ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+                 CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+                 CPP="gcc -E" CXXCPP="g++ -E"
+
+   This is not guaranteed to produce working output in all cases, you
+may have to build one architecture at a time and combine the results
+using the `lipo' tool if you have problems.
+
+Installation Names
+==================
+
+   By default, `make install' installs the package's commands under
+`/usr/local/bin', include files under `/usr/local/include', etc.  You
+can specify an installation prefix other than `/usr/local' by giving
+`configure' the option `--prefix=PREFIX', where PREFIX must be an
+absolute file name.
+
+   You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files.  If you
+pass the option `--exec-prefix=PREFIX' to `configure', the package uses
+PREFIX as the prefix for installing programs and libraries.
+Documentation and other data files still use the regular prefix.
+
+   In addition, if you use an unusual directory layout you can give
+options like `--bindir=DIR' to specify different values for particular
+kinds of files.  Run `configure --help' for a list of the directories
+you can set and what kinds of files go in them.  In general, the
+default for these options is expressed in terms of `${prefix}', so that
+specifying just `--prefix' will affect all of the other directory
+specifications that were not explicitly provided.
+
+   The most portable way to affect installation locations is to pass the
+correct locations to `configure'; however, many packages provide one or
+both of the following shortcuts of passing variable assignments to the
+`make install' command line to change installation locations without
+having to reconfigure or recompile.
+
+   The first method involves providing an override variable for each
+affected directory.  For example, `make install
+prefix=/alternate/directory' will choose an alternate location for all
+directory configuration variables that were expressed in terms of
+`${prefix}'.  Any directories that were specified during `configure',
+but not in terms of `${prefix}', must each be overridden at install
+time for the entire installation to be relocated.  The approach of
+makefile variable overrides for each directory variable is required by
+the GNU Coding Standards, and ideally causes no recompilation.
+However, some platforms have known limitations with the semantics of
+shared libraries that end up requiring recompilation when using this
+method, particularly noticeable in packages that use GNU Libtool.
+
+   The second method involves providing the `DESTDIR' variable.  For
+example, `make install DESTDIR=/alternate/directory' will prepend
+`/alternate/directory' before all installation names.  The approach of
+`DESTDIR' overrides is not required by the GNU Coding Standards, and
+does not work on platforms that have drive letters.  On the other hand,
+it does better at avoiding recompilation issues, and works well even
+when some directory options were not specified in terms of `${prefix}'
+at `configure' time.
+
+Optional Features
+=================
+
+   If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+   Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System).  The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+   For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+   Some packages offer the ability to configure how verbose the
+execution of `make' will be.  For these packages, running `./configure
+--enable-silent-rules' sets the default to minimal output, which can be
+overridden with `make V=1'; while running `./configure
+--disable-silent-rules' sets the default to verbose, which can be
+overridden with `make V=0'.
+
+Particular systems
+==================
+
+   On HP-UX, the default C compiler is not ANSI C compatible.  If GNU
+CC is not installed, it is recommended to use the following options in
+order to use an ANSI C compiler:
+
+     ./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
+
+and if that doesn't work, install pre-built binaries of GCC for HP-UX.
+
+   On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
+parse its `<wchar.h>' header file.  The option `-nodtk' can be used as
+a workaround.  If GNU CC is not installed, it is therefore recommended
+to try
+
+     ./configure CC="cc"
+
+and if that doesn't work, try
+
+     ./configure CC="cc -nodtk"
+
+   On Solaris, don't put `/usr/ucb' early in your `PATH'.  This
+directory contains several dysfunctional programs; working variants of
+these programs are available in `/usr/bin'.  So, if you need `/usr/ucb'
+in your `PATH', put it _after_ `/usr/bin'.
+
+   On Haiku, software installed for all users goes in `/boot/common',
+not `/usr/local'.  It is recommended to use the following options:
+
+     ./configure --prefix=/boot/common
+
+Specifying the System Type
+==========================
+
+   There may be some features `configure' cannot figure out
+automatically, but needs to determine by the type of machine the package
+will run on.  Usually, assuming the package is built to be run on the
+_same_ architectures, `configure' can figure that out, but if it prints
+a message saying it cannot guess the machine type, give it the
+`--build=TYPE' option.  TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name which has the form:
+
+     CPU-COMPANY-SYSTEM
+
+where SYSTEM can have one of these forms:
+
+     OS
+     KERNEL-OS
+
+   See the file `config.sub' for the possible values of each field.  If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the machine type.
+
+   If you are _building_ compiler tools for cross-compiling, you should
+use the option `--target=TYPE' to select the type of system they will
+produce code for.
+
+   If you want to _use_ a cross compiler, that generates code for a
+platform different from the build platform, you should specify the
+"host" platform (i.e., that on which the generated programs will
+eventually be run) with `--host=TYPE'.
+
+Sharing Defaults
+================
+
+   If you want to set default values for `configure' scripts to share,
+you can create a site shell script called `config.site' that gives
+default values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists.  Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Defining Variables
+==================
+
+   Variables not defined in a site shell script can be set in the
+environment passed to `configure'.  However, some packages may run
+configure again during the build, and the customized values of these
+variables may be lost.  In order to avoid this problem, you should set
+them in the `configure' command line, using `VAR=value'.  For example:
+
+     ./configure CC=/usr/local2/bin/gcc
+
+causes the specified `gcc' to be used as the C compiler (unless it is
+overridden in the site shell script).
+
+Unfortunately, this technique does not work for `CONFIG_SHELL' due to
+an Autoconf bug.  Until the bug is fixed you can use this workaround:
+
+     CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
+
+`configure' Invocation
+======================
+
+   `configure' recognizes the following options to control how it
+operates.
+
+`--help'
+`-h'
+     Print a summary of all of the options to `configure', and exit.
+
+`--help=short'
+`--help=recursive'
+     Print a summary of the options unique to this package's
+     `configure', and exit.  The `short' variant lists options used
+     only in the top level, while the `recursive' variant lists options
+     also present in any nested packages.
+
+`--version'
+`-V'
+     Print the version of Autoconf used to generate the `configure'
+     script, and exit.
+
+`--cache-file=FILE'
+     Enable the cache: use and save the results of the tests in FILE,
+     traditionally `config.cache'.  FILE defaults to `/dev/null' to
+     disable caching.
+
+`--config-cache'
+`-C'
+     Alias for `--cache-file=config.cache'.
+
+`--quiet'
+`--silent'
+`-q'
+     Do not print messages saying which checks are being made.  To
+     suppress all normal output, redirect it to `/dev/null' (any error
+     messages will still be shown).
+
+`--srcdir=DIR'
+     Look for the package's source code in directory DIR.  Usually
+     `configure' can determine that directory automatically.
+
+`--prefix=DIR'
+     Use DIR as the installation prefix.  *note Installation Names::
+     for more details, including other options available for fine-tuning
+     the installation locations.
+
+`--no-create'
+`-n'
+     Run the configure checks, but stop before creating any output
+     files.
+
+`configure' also accepts some other, not widely useful, options.  Run
+`configure --help' for more details.
+
diff --git a/INSTALL.linux b/INSTALL.linux
new file mode 100644
index 0000000..56bc0c1
--- /dev/null
+++ b/INSTALL.linux
@@ -0,0 +1,89 @@
+
+INSTALLING SEQTOOLS ON LINUX
+============================
+
+Although these instructions are for Linux systems they will apply to most unix
+systems that have the standard system libraries in the standard places and in
+particular come with X Windows and GTK installed.
+
+Install the following pre-requisites. This is most easily done using your system
+package manager (e.g. synaptic on Ubuntu, available from the
+System/Administration menu). Depending on your system, packages may be named
+differently or additional packages may be required. In this case the ./configure
+step below will fail and you will need to install the required package before
+running it again. If you cannot find a package it can be useful to search for
+just the main part of the name excluding numbers/dashes, e.g. "gtk" or "libgtk"
+rather than "libgtk2.0-dev". 
+
+    libcurl4-gnutls-dev   (optional)
+    libgtk2.0-dev
+    libglib2.0-dev
+    libreadline6-dev
+    libsqlite3-dev        (optional)
+    gcc-4.7               (or greater; see note below)
+
+Note that you need a compiler that supports C++11, e.g. gcc version 4.7 or
+greater. C++11 is required as of seqtools 4.41.0. If you have an older compiler,
+you can still install seqtools version 4.40.0 and earlier.
+
+In the terminal, unpack the downloaded seqtools tar file using the following
+command, where XXX is the version you downloaded:
+
+    tar -xf seqtools-XXX.tar.gz
+
+To install in the default location (usually /usr/bin):
+
+    cd seqtools-XXX
+    ./configure 
+    make 
+    make install 
+
+
+To install in a different location, or for help with dependencies or for more
+detailed instructions on configure see the tips below and also the INSTALL file
+in this directory.
+
+
+Environment
+-----------
+
+Before running the programs, you need to set the DISPLAY environment variable to
+tell GTK which screen to use. Typically you would set this to ":0" (without the
+quotes) to mean the first display on the local machine.
+
+To do this automatically every time you open a new terminal, you can add it to
+your profile using the following command (this only needs to be done once and
+will then affect all new terminals):
+
+In bash:
+
+  echo "export DISPLAY=:0" >> ~/.bash_profile
+
+or in csh:
+
+  echo "setenv DISPLAY :0" >> ~/.cshrc
+
+
+Tips
+----
+
+You may need to run make install using sudo if you do not have root privileges,
+i.e.:
+
+    sudo make install
+
+Alternatively, to install to a different location (e.g. one not requiring root
+privileges), use the --prefix argument when you run ./configure. For example,
+the following command would set the install location to foo/bar in your home
+directory:
+
+    ./configure --prefix=~/foo/bar
+
+If GTK+ is not in the default location then you may need to pass its location to
+the configure script. GTK+ is usually installed in /usr/lib, /usr/local/lib,
+/opt/lib or /opt/local/lib. If GTK+ is in e.g. /opt/local/lib then you would
+call configure with the following arguments:
+
+    ./configure PKG_CONFIG_PATH=/opt/local/lib/pkgconfig LDFLAGS="-Xlinker -rpath -Xlinker /opt/local/lib"
+
+
diff --git a/INSTALL.mac b/INSTALL.mac
new file mode 100644
index 0000000..b1e9079
--- /dev/null
+++ b/INSTALL.mac
@@ -0,0 +1,85 @@
+
+INSTALLING SEQTOOLS ON MAX OS X
+===============================
+
+Install the following pre-requisites. We strongly recommend that you use
+MacPorts to install these packages as this will also install any dependencies
+for you.
+
+    curl    (optional)
+    gtk2
+    glib2
+    sqlite3 (optional)
+    gcc47   (or greater; see note below)
+
+Note that you need a compiler that supports C++11, e.g. gcc version 4.7 or
+greater. C++11 is required as of seqtools 4.41.0. If you have an older compiler,
+you can still install seqtools version 4.40.0 and earlier.
+
+In the terminal, unpack the downloaded seqtools tar file using the following
+command, where XXX is the version you downloaded:
+
+    tar -xf seqtools-XXX.tar.gz
+
+To install in the default location (usually /opt/local/bin):
+
+    cd seqtools-XXX
+    ./configure 
+    make 
+    make install 
+
+
+To install in a different location, or for help with dependencies or for more
+detailed instructions on configure see the tips below and also the INSTALL file
+in this directory.
+
+
+Environment
+-----------
+
+Before running the programs, you need to set the DISPLAY environment variable to
+tell GTK which screen to use. Typically you would set this to ":0" (without the
+quotes) to mean the first display on the local machine.
+
+To do this automatically every time you open a new terminal, you can add it to
+your profile using the following command (this only needs to be done once and
+will then affect all new terminals):
+
+In bash:
+
+  echo "export DISPLAY=:0" >> ~/.bash_profile
+
+or in csh:
+
+  echo "setenv DISPLAY :0" >> ~/.cshrc
+
+You also need to have XQuartz or X11 running to run GTK programs on a Mac. One
+or both of these may be installed by default on your machine. If not, you can
+download XQuartz from here:
+
+  https://www.xquartz.org/
+
+
+Tips
+----
+
+You may need to run make install using sudo if you do not have root privileges,
+i.e.:
+
+    sudo make install
+
+Alternatively, to install to a different location (e.g. one not requiring root
+privileges), use the --prefix argument when you run ./configure. For example,
+the following command would set the install location to foo/bar in your home
+directory:
+
+    ./configure --prefix=~/foo/bar
+
+If GTK+ is not in the default location then you may need to pass its location to
+the configure script. GTK+ is usually installed in /usr/lib, /usr/local/lib,
+/opt/lib or /opt/local/lib. If GTK+ is in e.g. /opt/local/lib then you would
+call configure with the following arguments:
+
+    ./configure PKG_CONFIG_PATH=/opt/local/lib/pkgconfig LDFLAGS="-Xlinker -rpath -Xlinker /opt/local/lib"
+
+
diff --git a/INSTALL.windows b/INSTALL.windows
new file mode 100644
index 0000000..f136d33
--- /dev/null
+++ b/INSTALL.windows
@@ -0,0 +1,90 @@
+
+INSTALLING SEQTOOLS ON WINDOWS
+==============================
+
+SeqTools cannot currently run natively on Windows. However, it can be installed
+and run using Cygwin (which provides a Linux-like environment on Windows).
+
+From the Cygwin website, download setup-x86.exe (or setup-x86_64.exe if you have
+a 64-bit machine).  Run the setup program, accepting all the default
+options. You will need to choose a mirror on the Choose Download Site page
+(e.g. cygwin.mirror.constant.com).  On the Select Packages page, select these
+packages:
+
+    Devel/gcc-core
+    Devel/gcc-g++
+    Devel/libsqlite3-devel    (optional)
+    Devel/make
+    Devel/pkg-config
+    Editors/nano              (optional)
+    Libs/libcurl-devel        (optional)
+    Libs/libglib2.0-devel *** also tick the SOURCE checkbox ***
+    Libs/libgtk2.0-devel  *** also tick the SOURCE checkbox ***
+    Libs/libreadline-devel    (or Libs/readline)
+    Web/wget                  (optional)
+    X11/xinit
+
+When installation is complete, open the Cygwin terminal and type the following
+commands, replacing XXX with the version of SeqTools you want to download:
+
+    wget ftp://ftp.sanger.ac.uk/pub/resources/software/seqtools/PRODUCTION/seqtools-XXX.tar.gz
+    tar -xf seqtools-XXX.tar.gz
+    cd seqtools-XXX
+    ./configure
+    make
+    make install
+
+You need to start an "xterm" terminal to run the SeqTools programs from. This can be done
+by typing the following command in the Cygwin terminal:
+
+    export DISPLAY=:0; startxwin -- -emulate3buttons &
+
+Alternatively, to start the xterm automatically each time you open the Cygwin terminal, 
+you can add these commands to your bash profile. To do this, type the following command
+in the Cygwin terminal (you only need to do this once):
+
+    echo "DISPLAY=:0; startxwin -- -emulate3buttons &" >> ~/.bash_profile
+
+
+To install in a different location, or for help with dependencies or for more
+detailed instructions on configure see the tips below and also the INSTALL file
+in this directory.
+
+
+Tips
+----
+
+You may need to run make install using sudo if you do not have root privileges,
+i.e.:
+
+    sudo make install
+
+Alternatively, to install to a different location (e.g. one not requiring root
+privileges), use the --prefix argument when you run ./configure. For example,
+the following command would set the install location to foo/bar in your home
+directory:
+
+    ./configure --prefix=~/foo/bar
+
+If GTK+ is not in the default location then you may need to pass its location to
+the configure script. GTK+ is usually installed in /usr/lib, /usr/local/lib,
+/opt/lib or /opt/local/lib. If GTK+ is in e.g. /opt/local/lib then you would
+call configure with the following arguments:
+
+    ./configure PKG_CONFIG_PATH=/opt/local/lib/pkgconfig LDFLAGS="-Xlinker -rpath -Xlinker /opt/local/lib"
+
+
+Notes on Drives
+===============
+
+Cygwin uses a "fake" root directory to make it look like you are in a linux-like
+filesystem. This is very different from Windows' filesystem, so it can be
+confusing to start with if you want to find your Cygwin files in Windows or vice
+versa. Here's a list of some useful locations to help find your way around
+(assuming you installed Cygwin in the default location):
+
+WHAT                    REAL LOCATION IN WINDOWS           PATH FROM INSIDE CYGWIN
+Windows C drive         C:                                 /cygdrive/c
+Windows user directory  C:\Documents and Settings\<user>   /cygdrive/c/Documents and Settings/<user>
+Cygwin root directory   C:\cygwin                          /
+Cygwin user directory   C:\cygwin\home\<user>              /home/<user>
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..edff438
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,37 @@
+#
+# The main SeqTools makefile.am
+# Process this file with automake to create Makefile.in.
+#
+
+SUBDIRS = .
+
+if USE_GBTOOLS
+SUBDIRS += gbtools
+endif
+
+SUBDIRS += seqtoolsUtils dotterApp blixemApp belvuApp doc test examples
+
+# these are included in the distribution, but are not installed
+EXTRA_DIST = INSTALL.windows INSTALL.linux INSTALL.mac
+
+
+# Extra files to remove for the maintainer-clean target.
+# Note you cannot use this target to remove directories,
+# hence the extra "local" target.
+#
+MAINTAINERCLEANFILES = \
+$(top_srcdir)/Makefile.in \
+$(top_srcdir)/aclocal.m4 \
+$(top_srcdir)/config.h.in \
+$(top_srcdir)/config.h.in~ \
+$(top_srcdir)/configure \
+$(top_srcdir)/seqtools_version.m4
+
+GENERATED_FILES = $(top_srcdir)/config $(top_srcdir)/autom4te.cache
+
+maintainer-clean-local:
+	rm -rf $(GENERATED_FILES)
+	mkdir $(top_srcdir)/config
+	rm -rf $(top_srcdir)/build/*
+	git checkout $(top_srcdir)/build
+
diff --git a/Makefile.am.common b/Makefile.am.common
new file mode 100644
index 0000000..9e0be4a
--- /dev/null
+++ b/Makefile.am.common
@@ -0,0 +1,14 @@
+# Common settings for compiles.
+#
+
+#AM_CPPFLAGS = -g -Wall $(DEPS_CFLAGS) -I$(top_srcdir)
+AM_CPPFLAGS = $(DEPS_CFLAGS) -I$(top_srcdir)
+
+AM_CXXFLAGS = -std=c++11 -g -Wall
+
+
+
+# If gbtools is in a subdirectory, add it to the include path
+if USE_GBTOOLS
+AM_CPPFLAGS += -I$(top_srcdir)/gbtools/src/include
+endif
diff --git a/Makefile.in b/Makefile.in
new file mode 100644
index 0000000..4faaf81
--- /dev/null
+++ b/Makefile.in
@@ -0,0 +1,804 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 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@
+
+#
+# The main SeqTools makefile.am
+# Process this file with automake to create Makefile.in.
+#
+VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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 = :
+ at USE_GBTOOLS_TRUE@am__append_1 = gbtools
+subdir = .
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+	$(top_srcdir)/configure $(am__configure_deps) \
+	$(srcdir)/config.h.in AUTHORS COPYING ChangeLog INSTALL NEWS \
+	README config/compile config/install-sh config/missing \
+	$(top_srcdir)/config/compile $(top_srcdir)/config/install-sh \
+	$(top_srcdir)/config/missing
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/./seqtools_version.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 = $(install_sh) -d
+CONFIG_HEADER = config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-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 \
+	tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	cscope distdir dist dist-all distcheck
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \
+	$(LISP)config.h.in
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+CSCOPE = cscope
+DIST_SUBDIRS = . gbtools seqtoolsUtils dotterApp blixemApp belvuApp \
+	doc test examples
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+  if test -d "$(distdir)"; then \
+    find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+      && rm -rf "$(distdir)" \
+      || { sleep 5 && rm -rf "$(distdir)"; }; \
+  else :; fi
+am__post_remove_distdir = $(am__remove_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
+GZIP_ENV = --best
+DIST_TARGETS = dist-gzip
+distuninstallcheck_listfiles = find . -type f -print
+am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
+  | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPS_CFLAGS = @DEPS_CFLAGS@
+DEPS_LIBS = @DEPS_LIBS@
+DEPS_SQLITE3_CFLAGS = @DEPS_SQLITE3_CFLAGS@
+DEPS_SQLITE3_LIBS = @DEPS_SQLITE3_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+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_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+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_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+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@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = . $(am__append_1) seqtoolsUtils dotterApp blixemApp belvuApp \
+	doc test examples
+
+# these are included in the distribution, but are not installed
+EXTRA_DIST = INSTALL.windows INSTALL.linux INSTALL.mac
+
+# Extra files to remove for the maintainer-clean target.
+# Note you cannot use this target to remove directories,
+# hence the extra "local" target.
+#
+MAINTAINERCLEANFILES = \
+$(top_srcdir)/Makefile.in \
+$(top_srcdir)/aclocal.m4 \
+$(top_srcdir)/config.h.in \
+$(top_srcdir)/config.h.in~ \
+$(top_srcdir)/configure \
+$(top_srcdir)/seqtools_version.m4
+
+GENERATED_FILES = $(top_srcdir)/config $(top_srcdir)/autom4te.cache
+all: config.h
+	$(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+am--refresh: Makefile
+	@:
+$(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
+	@test -f $@ || rm -f stamp-h1
+	@test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1
+
+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
+
+# 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.
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	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"
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	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; \
+	$(am__define_uniq_tagged_files); \
+	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-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	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"
+cscope: cscope.files
+	test ! -s cscope.files \
+	  || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)
+clean-cscope:
+	-rm -f cscope.files
+cscope.files: clean-cscope cscopelist
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+	-rm -f cscope.out cscope.in.out cscope.po.out cscope.files
+
+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 \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    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
+	-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)"
+dist-gzip: distdir
+	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+	$(am__post_remove_distdir)
+
+dist-bzip2: distdir
+	tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
+	$(am__post_remove_distdir)
+
+dist-lzip: distdir
+	tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
+	$(am__post_remove_distdir)
+
+dist-xz: distdir
+	tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
+	$(am__post_remove_distdir)
+
+dist-tarZ: distdir
+	@echo WARNING: "Support for shar distribution archives is" \
+	               "deprecated." >&2
+	@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
+	tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+	$(am__post_remove_distdir)
+
+dist-shar: distdir
+	@echo WARNING: "Support for distribution archives compressed with" \
+		       "legacy program 'compress' is deprecated." >&2
+	@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
+	shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+	$(am__post_remove_distdir)
+
+dist-zip: distdir
+	-rm -f $(distdir).zip
+	zip -rq $(distdir).zip $(distdir)
+	$(am__post_remove_distdir)
+
+dist dist-all:
+	$(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'
+	$(am__post_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.lz*) \
+	  lzip -dc $(distdir).tar.lz | $(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 u+w $(distdir)
+	mkdir $(distdir)/_build $(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 \
+	    $(AM_DISTCHECK_CONFIGURE_FLAGS) \
+	    $(DISTCHECK_CONFIGURE_FLAGS) \
+	    --srcdir=.. --prefix="$$dc_install_base" \
+	  && $(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__post_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:
+	@test -n '$(distuninstallcheck_dir)' || { \
+	  echo 'ERROR: trying to run $@ with an empty' \
+	       '$$(distuninstallcheck_dir)' >&2; \
+	  exit 1; \
+	}; \
+	$(am__cd) '$(distuninstallcheck_dir)' || { \
+	  echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
+	  exit 1; \
+	}; \
+	test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
+	   || { 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 config.h
+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:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+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."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-recursive
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-hdr 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 $(am__CONFIG_DISTCLEAN_FILES)
+	-rm -rf $(top_srcdir)/autom4te.cache
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic \
+	maintainer-clean-local
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) all install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \
+	am--refresh check check-am clean clean-cscope clean-generic \
+	cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \
+	dist-gzip dist-lzip dist-shar dist-tarZ dist-xz dist-zip \
+	distcheck distclean distclean-generic distclean-hdr \
+	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-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs installdirs-am \
+	maintainer-clean maintainer-clean-generic \
+	maintainer-clean-local mostlyclean mostlyclean-generic pdf \
+	pdf-am ps ps-am tags tags-am uninstall uninstall-am
+
+
+maintainer-clean-local:
+	rm -rf $(GENERATED_FILES)
+	mkdir $(top_srcdir)/config
+	rm -rf $(top_srcdir)/build/*
+	git checkout $(top_srcdir)/build
+
+# 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..0b4bd01
--- /dev/null
+++ b/NEWS
@@ -0,0 +1,3 @@
+See the release notes here:
+
+  doc/User_doc/release_notes.html
diff --git a/README b/README
new file mode 100644
index 0000000..07696bb
--- /dev/null
+++ b/README
@@ -0,0 +1,63 @@
+=================================================================
+WELCOME TO THE SEQTOOLS PACKAGE
+
+This package is aimed at those involved in genome annotation 
+and contains tools for detailed analysis of sequences/alignments.
+
+Homepage: www.sanger.ac.uk/resources/software/seqtools/
+Author:   Gemma Barson <gemma.barson at sanger.ac.uk>
+
+=================================================================
+
+
+THE TOOLS
+---------
+
+blixem - an interactive browser of pairwise alignments that have been stacked up
+in a "master-slave" multiple alignment; it is not a 'true' multiple alignment
+but a 'one-to-many' alignment. It displays an overview section showing the
+positions of genes and alignments around the alignment window, and a detail
+section showing the actual alignment of protein or nucleotide sequences to the
+genomic DNA sequence.
+
+blixemh - the same as blixem but with additional functionality for fetching
+sequences via HTTP (currently only supported for authorised users).
+
+dotter - a graphical dot-matrix program for detailed comparison of two
+sequences.  Every residue in one sequence is compared to every residue in the
+other, with one sequence plotted on the x-axis and the other on the
+y-axis. Noise is filtered out so that alignments appear as diagonal lines.
+
+belvu - a multiple sequence alignment viewer and phylogenetic tool. It has an
+extensive set of user-configurable modes to color residues by conservation or by
+residue type, and some basic alignment editing capabilities. It can generate
+distance matrices between sequences and construct distance-based trees, either
+graphically or as part of a phylogenetic software pipeline.
+
+
+INSTALLATION
+------------
+
+Briefly, the shell commands `./configure; make; make install' should configure,
+build, and install this package on Linux, Mac OS X or Windows (under
+Cygwin). See the platform-specific INSTALL.xxx files for more details.
+
+You can also install SeqTools using a virtual machine (VM) program such as
+VirtualBox. Instructions for how to do this using VirtualBox are in INSTALL.VM.
+
+
+USAGE
+-----
+
+Run the individual programs without arguments to see their usage information, or
+view the documentation from this folder: doc/User_doc/index.html.
+
+Help pages can also be accessed from within the programs using the 'Help' menu,
+the lifebuoy icon on the toolbar or the Ctrl-H shortcut key.
+
+Sample data and examples can be found in the 'examples' directory.
+
+
+Note that you need to have XQuartz or X11 running to run GTK programs on a
+Mac. These may be installed by default on your machine. If not, you can download
+XQuartz from here: https://www.xquartz.org/
diff --git a/aclocal.m4 b/aclocal.m4
new file mode 100644
index 0000000..3a09849
--- /dev/null
+++ b/aclocal.m4
@@ -0,0 +1,1346 @@
+# generated automatically by aclocal 1.14.1 -*- Autoconf -*-
+
+# Copyright (C) 1996-2013 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_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
+m4_ifndef([AC_AUTOCONF_VERSION],
+  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],,
+[m4_warning([this file was generated for autoconf 2.69.
+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'.])])
+
+# pkg.m4 - Macros to locate and utilise pkg-config.            -*- Autoconf -*-
+# serial 1 (pkg-config-0.24)
+# 
+# Copyright © 2004 Scott James Remnant <scott at netsplit.com>.
+#
+# 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 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., 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.
+
+# PKG_PROG_PKG_CONFIG([MIN-VERSION])
+# ----------------------------------
+AC_DEFUN([PKG_PROG_PKG_CONFIG],
+[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
+m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$])
+m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$])
+AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])
+AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path])
+AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path])
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+	AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
+fi
+if test -n "$PKG_CONFIG"; then
+	_pkg_min_version=m4_default([$1], [0.9.0])
+	AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
+	if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+		AC_MSG_RESULT([yes])
+	else
+		AC_MSG_RESULT([no])
+		PKG_CONFIG=""
+	fi
+fi[]dnl
+])# PKG_PROG_PKG_CONFIG
+
+# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+#
+# Check to see whether a particular set of modules exists.  Similar
+# to PKG_CHECK_MODULES(), but does not set variables or print errors.
+#
+# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+# only at the first occurence in configure.ac, so if the first place
+# it's called might be skipped (such as if it is within an "if", you
+# have to call PKG_CHECK_EXISTS manually
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_EXISTS],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+if test -n "$PKG_CONFIG" && \
+    AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
+  m4_default([$2], [:])
+m4_ifvaln([$3], [else
+  $3])dnl
+fi])
+
+# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
+# ---------------------------------------------
+m4_define([_PKG_CONFIG],
+[if test -n "$$1"; then
+    pkg_cv_[]$1="$$1"
+ elif test -n "$PKG_CONFIG"; then
+    PKG_CHECK_EXISTS([$3],
+                     [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`
+		      test "x$?" != "x0" && pkg_failed=yes ],
+		     [pkg_failed=yes])
+ else
+    pkg_failed=untried
+fi[]dnl
+])# _PKG_CONFIG
+
+# _PKG_SHORT_ERRORS_SUPPORTED
+# -----------------------------
+AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi[]dnl
+])# _PKG_SHORT_ERRORS_SUPPORTED
+
+
+# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+# [ACTION-IF-NOT-FOUND])
+#
+#
+# Note that if there is a possibility the first call to
+# PKG_CHECK_MODULES might not happen, you should be sure to include an
+# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
+#
+#
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_MODULES],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
+AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
+
+pkg_failed=no
+AC_MSG_CHECKING([for $1])
+
+_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
+_PKG_CONFIG([$1][_LIBS], [libs], [$2])
+
+m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
+and $1[]_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.])
+
+if test $pkg_failed = yes; then
+   	AC_MSG_RESULT([no])
+        _PKG_SHORT_ERRORS_SUPPORTED
+        if test $_pkg_short_errors_supported = yes; then
+	        $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1`
+        else 
+	        $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
+
+	m4_default([$4], [AC_MSG_ERROR(
+[Package requirements ($2) were not met:
+
+$$1_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+_PKG_TEXT])[]dnl
+        ])
+elif test $pkg_failed = untried; then
+     	AC_MSG_RESULT([no])
+	m4_default([$4], [AC_MSG_FAILURE(
+[The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+_PKG_TEXT
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.])[]dnl
+        ])
+else
+	$1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
+	$1[]_LIBS=$pkg_cv_[]$1[]_LIBS
+        AC_MSG_RESULT([yes])
+	$3
+fi[]dnl
+])# PKG_CHECK_MODULES
+
+# Copyright (C) 2002-2013 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.14'
+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.14.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.14.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-2013 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_COND_IF                                            -*- Autoconf -*-
+
+# Copyright (C) 2008-2013 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_COND_IF
+# _AM_COND_ELSE
+# _AM_COND_ENDIF
+# --------------
+# These macros are only used for tracing.
+m4_define([_AM_COND_IF])
+m4_define([_AM_COND_ELSE])
+m4_define([_AM_COND_ENDIF])
+
+# AM_COND_IF(COND, [IF-TRUE], [IF-FALSE])
+# ---------------------------------------
+# If the shell condition COND is true, execute IF-TRUE, otherwise execute
+# IF-FALSE.  Allow automake to learn about conditional instantiating macros
+# (the AC_CONFIG_FOOS).
+AC_DEFUN([AM_COND_IF],
+[m4_ifndef([_AM_COND_VALUE_$1],
+	   [m4_fatal([$0: no such condition "$1"])])dnl
+_AM_COND_IF([$1])dnl
+if test -z "$$1_TRUE"; then :
+  m4_n([$2])[]dnl
+m4_ifval([$3],
+[_AM_COND_ELSE([$1])dnl
+else
+  $3
+])dnl
+_AM_COND_ENDIF([$1])dnl
+fi[]dnl
+])
+
+# AM_CONDITIONAL                                            -*- Autoconf -*-
+
+# Copyright (C) 1997-2013 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_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ([2.52])dnl
+ m4_if([$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-2013 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.
+
+
+# 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", "OBJC", "OBJCXX", "UPC", or "GJC".
+# 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
+
+m4_if([$1], [CC],   [depcc="$CC"   am_compiler_list=],
+      [$1], [CXX],  [depcc="$CXX"  am_compiler_list=],
+      [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+      [$1], [OBJCXX], [depcc="$OBJCXX" 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".
+  rm -rf conftest.dir
+  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 10 /bin/sh.
+      echo '/* dummy */' > 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
+      ;;
+    msvc7 | msvc7msys | 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], [dnl
+AS_HELP_STRING(
+  [--enable-dependency-tracking],
+  [do not reject slow dependency extractors])
+AS_HELP_STRING(
+  [--disable-dependency-tracking],
+  [speeds up one-time build])])
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+  am__nodep='_no'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+AC_SUBST([am__nodep])dnl
+_AM_SUBST_NOTMAKE([am__nodep])dnl
+])
+
+# Generate code to set up dependency tracking.              -*- Autoconf -*-
+
+# Copyright (C) 1999-2013 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_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[{
+  # Older Autoconf 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"`
+    # 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'`; 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-2013 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 macro actually does too much.  Some checks are only needed if
+# your package does certain things.  But this isn't really a big deal.
+
+dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O.
+m4_define([AC_PROG_CC],
+m4_defn([AC_PROG_CC])
+[_AM_PROG_CC_C_O
+])
+
+# 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.65])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],
+[AC_DIAGNOSE([obsolete],
+             [$0: two- and three-arguments forms are deprecated.])
+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], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]),
+  [ok:ok],,
+  [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([AC_PROG_MKDIR_P])dnl
+# For better backward compatibility.  To be removed once Automake 1.9.x
+# dies out for good.  For more background, see:
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
+# 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])],
+		  [m4_define([AC_PROG_CC],
+			     m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+		  [_AM_DEPENDENCIES([CXX])],
+		  [m4_define([AC_PROG_CXX],
+			     m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+		  [_AM_DEPENDENCIES([OBJC])],
+		  [m4_define([AC_PROG_OBJC],
+			     m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
+		  [_AM_DEPENDENCIES([OBJCXX])],
+		  [m4_define([AC_PROG_OBJCXX],
+			     m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl
+])
+AC_REQUIRE([AM_SILENT_RULES])dnl
+dnl The testsuite driver may need to know about EXEEXT, so add the
+dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This
+dnl macro 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
+
+# POSIX will say in a future version that running "rm -f" with no argument
+# is OK; and we want to be able to make that assumption in our Makefile
+# recipes.  So use an aggressive probe to check that the usage we want is
+# actually supported "in the wild" to an acceptable degree.
+# See automake bug#10828.
+# To make any issue more visible, cause the running configure to be aborted
+# by default if the 'rm' program in use doesn't match our expectations; the
+# user can still override this though.
+if rm -f && rm -fr && rm -rf; then : OK; else
+  cat >&2 <<'END'
+Oops!
+
+Your 'rm' program seems unable to run without file operands specified
+on the command line, even when the '-f' option is present.  This is contrary
+to the behaviour of most rm programs out there, and not conforming with
+the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
+
+Please tell bug-automake at gnu.org about your system, including the value
+of your $PATH and any error possibly output before this message.  This
+can help us improve future automake versions.
+
+END
+  if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
+    echo 'Configuration will proceed anyway, since you have set the' >&2
+    echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
+    echo >&2
+  else
+    cat >&2 <<'END'
+Aborting the configuration process, to ensure you take notice of the issue.
+
+You can download and install GNU coreutils to get an 'rm' implementation
+that behaves properly: <http://www.gnu.org/software/coreutils/>.
+
+If you want to complete the configuration process using your problematic
+'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+to "yes", and re-run configure.
+
+END
+    AC_MSG_ERROR([Your 'rm' program is bad, sorry.])
+  fi
+fi])
+
+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-2013 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-2013 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.
+
+# 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-2013 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_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-2013 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_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 is modern enough.
+# If it is, 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 --is-lightweight"; then
+  am_missing_run="$MISSING "
+else
+  am_missing_run=
+  AC_MSG_WARN(['missing' script is too old or missing])
+fi
+])
+
+# Helper functions for option handling.                     -*- Autoconf -*-
+
+# Copyright (C) 2001-2013 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_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) 1999-2013 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_CC_C_O
+# ---------------
+# Like AC_PROG_CC_C_O, but changed for automake.  We rewrite AC_PROG_CC
+# to automatically call this.
+AC_DEFUN([_AM_PROG_CC_C_O],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([compile])dnl
+AC_LANG_PUSH([C])dnl
+AC_CACHE_CHECK(
+  [whether $CC understands -c and -o together],
+  [am_cv_prog_cc_c_o],
+  [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])])
+  # Make sure it works both with $CC and with simple cc.
+  # Following AC_PROG_CC_C_O, we do the test twice because some
+  # compilers refuse to overwrite an existing .o file with -o,
+  # though they will create one.
+  am_cv_prog_cc_c_o=yes
+  for am_i in 1 2; do
+    if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \
+         && test -f conftest2.$ac_objext; then
+      : OK
+    else
+      am_cv_prog_cc_c_o=no
+      break
+    fi
+  done
+  rm -f core conftest*
+  unset am_i])
+if test "$am_cv_prog_cc_c_o" != yes; then
+   # Losing compiler, so override with the script.
+   # FIXME: It is wrong to rewrite CC.
+   # But if we don't then we get into trouble of one sort or another.
+   # A longer-term fix would be to have automake use am__CC in this case,
+   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+   CC="$am_aux_dir/compile $CC"
+fi
+AC_LANG_POP([C])])
+
+# For backward compatibility.
+AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
+
+# Copyright (C) 2001-2013 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-2013 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_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# 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 (
+   am_has_slept=no
+   for am_try in 1 2; do
+     echo "timestamp, slept: $am_has_slept" > conftest.file
+     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
+     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
+     if test "$[2]" = conftest.file || test $am_try -eq 2; then
+       break
+     fi
+     # Just in case.
+     sleep 1
+     am_has_slept=yes
+   done
+   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])
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+  ( sleep 1 ) &
+  am_sleep_pid=$!
+fi
+AC_CONFIG_COMMANDS_PRE(
+  [AC_MSG_CHECKING([that generated files are newer than configure])
+   if test -n "$am_sleep_pid"; then
+     # Hide warnings about reused PIDs.
+     wait $am_sleep_pid 2>/dev/null
+   fi
+   AC_MSG_RESULT([done])])
+rm -f conftest.file
+])
+
+# Copyright (C) 2009-2013 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_SILENT_RULES([DEFAULT])
+# --------------------------
+# Enable less verbose build rules; with the default set to DEFAULT
+# ("yes" being less verbose, "no" or empty being verbose).
+AC_DEFUN([AM_SILENT_RULES],
+[AC_ARG_ENABLE([silent-rules], [dnl
+AS_HELP_STRING(
+  [--enable-silent-rules],
+  [less verbose build output (undo: "make V=1")])
+AS_HELP_STRING(
+  [--disable-silent-rules],
+  [verbose build output (undo: "make V=0")])dnl
+])
+case $enable_silent_rules in @%:@ (((
+  yes) AM_DEFAULT_VERBOSITY=0;;
+   no) AM_DEFAULT_VERBOSITY=1;;
+    *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);;
+esac
+dnl
+dnl A few 'make' implementations (e.g., NonStop OS and NextStep)
+dnl do not support nested variable expansions.
+dnl See automake bug#9928 and bug#10237.
+am_make=${MAKE-make}
+AC_CACHE_CHECK([whether $am_make supports nested variables],
+   [am_cv_make_support_nested_variables],
+   [if AS_ECHO([['TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+	@$(TRUE)
+.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then
+  am_cv_make_support_nested_variables=yes
+else
+  am_cv_make_support_nested_variables=no
+fi])
+if test $am_cv_make_support_nested_variables = yes; then
+  dnl Using '$V' instead of '$(V)' breaks IRIX make.
+  AM_V='$(V)'
+  AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+  AM_V=$AM_DEFAULT_VERBOSITY
+  AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AC_SUBST([AM_V])dnl
+AM_SUBST_NOTMAKE([AM_V])dnl
+AC_SUBST([AM_DEFAULT_V])dnl
+AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl
+AC_SUBST([AM_DEFAULT_VERBOSITY])dnl
+AM_BACKSLASH='\'
+AC_SUBST([AM_BACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
+])
+
+# Copyright (C) 2001-2013 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-2013 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_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-2013 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_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.  Yes, it's still used
+# in the wild :-(  We should find a proper way to deprecate it ...
+AC_SUBST([AMTAR], ['$${TAR-tar}'])
+
+# We'll loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+
+m4_if([$1], [v7],
+  [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
+
+  [m4_case([$1],
+    [ustar],
+     [# The POSIX 1988 'ustar' format is defined with fixed-size fields.
+      # There is notably a 21 bits limit for the UID and the GID.  In fact,
+      # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343
+      # and bug#13588).
+      am_max_uid=2097151 # 2^21 - 1
+      am_max_gid=$am_max_uid
+      # The $UID and $GID variables are not portable, so we need to resort
+      # to the POSIX-mandated id(1) utility.  Errors in the 'id' calls
+      # below are definitely unexpected, so allow the users to see them
+      # (that is, avoid stderr redirection).
+      am_uid=`id -u || echo unknown`
+      am_gid=`id -g || echo unknown`
+      AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format])
+      if test $am_uid -le $am_max_uid; then
+         AC_MSG_RESULT([yes])
+      else
+         AC_MSG_RESULT([no])
+         _am_tools=none
+      fi
+      AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format])
+      if test $am_gid -le $am_max_gid; then
+         AC_MSG_RESULT([yes])
+      else
+        AC_MSG_RESULT([no])
+        _am_tools=none
+      fi],
+
+  [pax],
+    [],
+
+  [m4_fatal([Unknown tar format])])
+
+  AC_MSG_CHECKING([how to create a $1 tar archive])
+
+  # Go ahead even if we have the value already cached.  We do so because we
+  # need to set the values for the 'am__tar' and 'am__untar' variables.
+  _am_tools=${am_cv_prog_tar_$1-$_am_tools}
+
+  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])
+      AM_RUN_LOG([cat conftest.dir/file])
+      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
+
diff --git a/belvuApp/Makefile.am b/belvuApp/Makefile.am
new file mode 100644
index 0000000..b5e23fd
--- /dev/null
+++ b/belvuApp/Makefile.am
@@ -0,0 +1,32 @@
+
+SUBDIRS = .
+
+include $(top_srcdir)/Makefile.am.common
+
+#AM_CPPFLAGS = -g -Wall $(DEPS_CFLAGS) -I$(top_srcdir)
+#
+# If gbtools is in a subdirectory, add it to the include path
+#if USE_GBTOOLS
+#AM_CPPFLAGS += -I$(top_srcdir)/gbtools/src/include
+#endif
+
+# there's a problem on ubuntu 14 with finding X11 so this is a hopefully temporary hack...
+#X_LIB = -lX11 -lm
+
+bin_PROGRAMS = belvu
+belvu_SOURCES = belvuMain.cpp belvu_.hpp belvu.cpp belvuWindow.hpp belvuWindow.cpp belvuAlignment.hpp belvuAlignment.cpp belvuTree.hpp belvuTree.cpp belvuConsPlot.hpp belvuConsPlot.cpp
+belvu_LDADD = $(top_builddir)/seqtoolsUtils/libSeqtoolsUtils.a
+
+# If gbtools is in a subdirectory, add it; otherwise look for a local installation
+if USE_GBTOOLS
+belvu_LDADD += $(top_builddir)/gbtools/.libs/libgbtools.a        
+else
+belvu_LDADD += -lgbtools
+endif
+
+# the gtk deps etc. must go at the end so that gbtools can pick them up
+belvu_LDADD += $(DEPS_LIBS) $(X_LIB)
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/belvuApp/Makefile.in
diff --git a/belvuApp/Makefile.in b/belvuApp/Makefile.in
new file mode 100644
index 0000000..3bc0fff
--- /dev/null
+++ b/belvuApp/Makefile.in
@@ -0,0 +1,727 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 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@
+
+# Common settings for compiles.
+#
+
+VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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 = :
+DIST_COMMON = $(top_srcdir)/Makefile.am.common $(srcdir)/Makefile.in \
+	$(srcdir)/Makefile.am $(top_srcdir)/config/depcomp
+
+# If gbtools is in a subdirectory, add it to the include path
+ at USE_GBTOOLS_TRUE@am__append_1 = -I$(top_srcdir)/gbtools/src/include
+bin_PROGRAMS = belvu$(EXEEXT)
+
+# If gbtools is in a subdirectory, add it; otherwise look for a local installation
+ at USE_GBTOOLS_TRUE@am__append_2 = $(top_builddir)/gbtools/.libs/libgbtools.a        
+ at USE_GBTOOLS_FALSE@am__append_3 = -lgbtools
+subdir = belvuApp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/./seqtools_version.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)"
+PROGRAMS = $(bin_PROGRAMS)
+am_belvu_OBJECTS = belvuMain.$(OBJEXT) belvu.$(OBJEXT) \
+	belvuWindow.$(OBJEXT) belvuAlignment.$(OBJEXT) \
+	belvuTree.$(OBJEXT) belvuConsPlot.$(OBJEXT)
+belvu_OBJECTS = $(am_belvu_OBJECTS)
+am__DEPENDENCIES_1 =
+belvu_DEPENDENCIES = $(top_builddir)/seqtoolsUtils/libSeqtoolsUtils.a \
+	$(am__append_2) $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+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)
+AM_V_CXX = $(am__v_CXX_ at AM_V@)
+am__v_CXX_ = $(am__v_CXX_ at AM_DEFAULT_V@)
+am__v_CXX_0 = @echo "  CXX     " $@;
+am__v_CXX_1 = 
+CXXLD = $(CXX)
+CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+	-o $@
+AM_V_CXXLD = $(am__v_CXXLD_ at AM_V@)
+am__v_CXXLD_ = $(am__v_CXXLD_ at AM_DEFAULT_V@)
+am__v_CXXLD_0 = @echo "  CXXLD   " $@;
+am__v_CXXLD_1 = 
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = $(belvu_SOURCES)
+DIST_SOURCES = $(belvu_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-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 \
+	tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+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@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPS_CFLAGS = @DEPS_CFLAGS@
+DEPS_LIBS = @DEPS_LIBS@
+DEPS_SQLITE3_CFLAGS = @DEPS_SQLITE3_CFLAGS@
+DEPS_SQLITE3_LIBS = @DEPS_SQLITE3_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+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_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+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_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+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@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = .
+
+#AM_CPPFLAGS = -g -Wall $(DEPS_CFLAGS) -I$(top_srcdir)
+AM_CPPFLAGS = $(DEPS_CFLAGS) -I$(top_srcdir) $(am__append_1)
+AM_CXXFLAGS = -std=c++11 -g -Wall
+belvu_SOURCES = belvuMain.cpp belvu_.hpp belvu.cpp belvuWindow.hpp belvuWindow.cpp belvuAlignment.hpp belvuAlignment.cpp belvuTree.hpp belvuTree.cpp belvuConsPlot.hpp belvuConsPlot.cpp
+
+# the gtk deps etc. must go at the end so that gbtools can pick them up
+belvu_LDADD = $(top_builddir)/seqtoolsUtils/libSeqtoolsUtils.a \
+	$(am__append_2) $(am__append_3) $(DEPS_LIBS) $(X_LIB)
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/belvuApp/Makefile.in
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .cpp .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(top_srcdir)/Makefile.am.common $(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 belvuApp/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign belvuApp/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_srcdir)/Makefile.am.common:
+
+$(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)
+	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+	fi; \
+	for p in $$list; do echo "$$p $$p"; done | \
+	sed 's/$(EXEEXT)$$//' | \
+	while read p p1; do if test -f $$p \
+	  ; 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) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+	      $(INSTALL_PROGRAM_ENV) $(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:
+	-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+
+belvu$(EXEEXT): $(belvu_OBJECTS) $(belvu_DEPENDENCIES) $(EXTRA_belvu_DEPENDENCIES) 
+	@rm -f belvu$(EXEEXT)
+	$(AM_V_CXXLD)$(CXXLINK) $(belvu_OBJECTS) $(belvu_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/belvu.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/belvuAlignment.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/belvuConsPlot.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/belvuMain.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/belvuTree.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/belvuWindow.Po at am__quote@
+
+.cpp.o:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+# 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.
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	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"
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	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; \
+	$(am__define_uniq_tagged_files); \
+	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-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	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"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+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 \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    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 $(PROGRAMS)
+installdirs: installdirs-recursive
+installdirs-am:
+	for dir in "$(DESTDIR)$(bindir)"; 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:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+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."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-recursive
+
+clean-am: clean-binPROGRAMS clean-generic mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile 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-binPROGRAMS
+
+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 -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+	check-am clean clean-binPROGRAMS clean-generic cscopelist-am \
+	ctags ctags-am distclean distclean-compile distclean-generic \
+	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 installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \
+	uninstall-am uninstall-binPROGRAMS
+
+
+# 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/belvuApp/belvu.cpp b/belvuApp/belvu.cpp
new file mode 100644
index 0000000..bd5f4f5
--- /dev/null
+++ b/belvuApp/belvu.cpp
@@ -0,0 +1,4999 @@
+/*  File: belvu.c
+ *  Author: Erik Sonnhammer
+ *  Copyright (c) 2011 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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 License2 * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: Logic functions for the belvu applications
+ *----------------------------------------------------------------------------
+ */
+
+
+
+/* 
+
+    Pending:
+
+        Internal bootstrapping.
+	Rationale for basic bootstrapping:
+	     0. struct Subtree {nodep, seqstring}.  nodep points to node in orig tree, seqnamestring a sorted concatenation of seqence ordinal numbers
+	     1. Traverse original tree from root to 2-seq nodes, insert Subtree structs at each node into a list (sorted on seqstring)
+	     2. For each Boostrap tree {
+	         Traverse tree, for each internal node except root: if seqstring found in Subtreelist, increment node's boostrap counter
+	     }
+	        Traverse bootstrap and original tree
+	Rationale for group bootstrapping:
+		   For each sequence, store array of sequences in merging order in bootstrap tree.
+		   For each node in original tree, check if group of sequences 
+		   corresponds to the first n sequences in bootstraptree array.
+	Rationale for exact bootstrapping:
+		   Traverse bootstrap tree from leaf to root:
+		      oritree nodes = {same, different, 0}
+		      if issequence(parent->other_child) {
+		         if (parent->other_child == boottree(parent->other_child))
+			    parent = same
+			 else
+			    parent = different
+		      if isseen(parent->other_child) {
+		         if (parent->other_child == boottree(parent->other_child))
+			    parent = same
+			 else
+			    parent = diferent
+		      if same, continue to parent
+
+	Clean up the parsing code with str2aln calls.
+
+	read in other trees with bootstraps
+	use confidence cutoff in find orthologs
+	
+        make alignment collapsing easier to use, see above.
+
+        Keyboard edit of one sequence.  How to find the right place ? !!
+
+        Undo edits.
+
+	Would like to abort parsing if two sequence lines accidentally have same name -
+	How? - this is used in selex format...
+
+	Koonin ideas:
+	    Consensus pattern lines (Default 0% and 100% lines, maybe 90% too).
+	    Add/remove any nr of lines cutoffs 0 - 100%.
+	    Tool to define groups of residues and corresponding symbol.  These
+	    are shown on pattern lines (priority to smaller groups).
+
+	Low priority:
+
+	   "Add sequences with matching segments" for more than one sequence.
+	    Will probably be very deleterious to the alignment.
+
+	    Ability to choose both foreground and background color - makes it twice
+	    as slow - see "Black/white for printing.
+
+*/
+
+
+/*  Description of color_by_similarity algorithm in setConsSchemeColors():
+
+    ( Corresponds to summing all pairwise scores)
+
+    for each residue i {
+        for each residue j {
+	    if (i == j) 
+	        score(i) += (count(i)-1)*count(j)*matrix(i,j)
+	    else
+	        score(i) += count(i)*count(j)*matrix(i,j)
+	    }
+	}
+
+	if (ignore gaps)
+	    n = nresidues(pos)
+	else 
+	    n = nsequences
+		    
+	if (n == 1)
+	    id = 0.0
+	else
+	    id = score/(n*(n-1))
+    }
+		
+*/
+
+
+#include <belvuApp/belvu_.hpp>
+#include <belvuApp/belvuWindow.hpp>
+#include <belvuApp/belvuTree.hpp>
+#include <belvuApp/belvuConsPlot.hpp>
+#include <belvuApp/belvuAlignment.hpp>
+#include <gbtools/gbtools.hpp>
+
+#include <stdarg.h>
+/*#include <stdlib.h> / * Needed for RAND_MAX but clashes with other stuff */
+#include <sys/types.h>
+#include <sys/time.h>
+#include <ctype.h>
+#include <time.h>
+#include <string.h>
+#include <math.h>
+
+
+#define FETCH_PROG_ENV_VAR        "BELVU_FETCH"       /* environment variable used to specify the fetch program */
+#define FETCH_URL_ENV_VAR         "BELVU_FETCH_WWW"   /* environment variable used to specify the WWW-fetch URL */
+#define DEFAULT_FETCH_PROG        "efetch"            /* default program for fetching sequences */
+#define DEFAULT_FETCH_URL         "http://www.sanger.ac.uk/cgi-bin/otter/52/nph-pfetch?request=%s"
+//#define DEFAULT_FETCH_URL         "http://www.sanger.ac.uk/cgi-bin/seq-query?%s"  /* default url for fetching sequences in WWW-fetch mode */
+
+
+
+/*  BLOSUM62 930809
+
+#  Matrix made by matblas from blosum62.iij
+#  * column uses minimum score
+#  BLOSUM Clustered Scoring Matrix in 1/2 Bit Units
+#  Blocks Database = /data/blocks_5.0/blocks.dat
+#  Cluster Percentage: >= 62
+#  Entropy =   0.6979, Expected =  -0.5209
+
+  Note: to use with a2b[], always subtract 1 from the values !!!!
+
+  A   R   N   D   C   Q   E   G   H   I   L   K   M   F   P   S   T   W   Y   V   B   Z   X  \* */ 
+static int BLOSUM62[24][24] = {
+  {4, -1, -2, -2,  0, -1, -1,  0, -2, -1, -1, -1, -1, -2, -1,  1,  0, -3, -2,  0, -2, -1,  0, -4},
+  {-1,  5,  0, -2, -3,  1,  0, -2,  0, -3, -2,  2, -1, -3, -2, -1, -1, -3, -2, -3, -1,  0, -1, -4},
+  {-2,  0,  6,  1, -3,  0,  0,  0,  1, -3, -3,  0, -2, -3, -2,  1,  0, -4, -2, -3,  3,  0, -1, -4},
+  {-2, -2,  1,  6, -3,  0,  2, -1, -1, -3, -4, -1, -3, -3, -1,  0, -1, -4, -3, -3,  4,  1, -1, -4},
+  {0, -3, -3, -3,  9, -3, -4, -3, -3, -1, -1, -3, -1, -2, -3, -1, -1, -2, -2, -1, -3, -3, -2, -4},
+  {-1,  1,  0,  0, -3,  5,  2, -2,  0, -3, -2,  1,  0, -3, -1,  0, -1, -2, -1, -2,  0,  3, -1, -4},
+  {-1,  0,  0,  2, -4,  2,  5, -2,  0, -3, -3,  1, -2, -3, -1,  0, -1, -3, -2, -2,  1,  4, -1, -4},
+  { 0, -2,  0, -1, -3, -2, -2,  6, -2, -4, -4, -2, -3, -3, -2,  0, -2, -2, -3, -3, -1, -2, -1, -4},
+  {-2,  0,  1, -1, -3,  0,  0, -2,  8, -3, -3, -1, -2, -1, -2, -1, -2, -2,  2, -3,  0,  0, -1, -4},
+  {-1, -3, -3, -3, -1, -3, -3, -4, -3,  4,  2, -3,  1,  0, -3, -2, -1, -3, -1,  3, -3, -3, -1, -4},
+  {-1, -2, -3, -4, -1, -2, -3, -4, -3,  2,  4, -2,  2,  0, -3, -2, -1, -2, -1,  1, -4, -3, -1, -4},
+  {-1,  2,  0, -1, -3,  1,  1, -2, -1, -3, -2,  5, -1, -3, -1,  0, -1, -3, -2, -2,  0,  1, -1, -4},
+  {-1, -1, -2, -3, -1,  0, -2, -3, -2,  1,  2, -1,  5,  0, -2, -1, -1, -1, -1,  1, -3, -1, -1, -4},
+  {-2, -3, -3, -3, -2, -3, -3, -3, -1,  0,  0, -3,  0,  6, -4, -2, -2,  1,  3, -1, -3, -3, -1, -4},
+  {-1, -2, -2, -1, -3, -1, -1, -2, -2, -3, -3, -1, -2, -4,  7, -1, -1, -4, -3, -2, -2, -1, -2, -4},
+  { 1, -1,  1,  0, -1,  0,  0,  0, -1, -2, -2,  0, -1, -2, -1,  4,  1, -3, -2, -2,  0,  0,  0, -4},
+  { 0, -1,  0, -1, -1, -1, -1, -2, -2, -1, -1, -1, -1, -2, -1,  1,  5, -2, -2,  0, -1, -1,  0, -4},
+  {-3, -3, -4, -4, -2, -2, -3, -2, -2, -3, -2, -3, -1,  1, -4, -3, -2, 11,  2, -3, -4, -3, -2, -4},
+  {-2, -2, -2, -3, -2, -1, -2, -3,  2, -1, -1, -2, -1,  3, -3, -2, -2,  2,  7, -1, -3, -2, -1, -4},
+  { 0, -3, -3, -3, -1, -2, -2, -3, -3,  3,  1, -2,  1, -1, -2, -2,  0, -3, -1,  4, -3, -2, -1, -4},
+  {-2, -1,  3,  4, -3,  0,  1, -1,  0, -3, -4,  0, -3, -3, -2,  0, -1, -4, -3, -3,  4,  1, -1, -4},
+  {-1,  0,  0,  1, -3,  3,  4, -2,  0, -3, -3,  1, -1, -3, -1,  0, -1, -3, -2, -2,  1,  4, -1, -4},
+  { 0, -1, -1, -1, -2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -2,  0,  0, -2, -1, -1, -1, -1, -1, -4},
+  {-4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -1}
+ };
+
+
+/* ASCII-to-binary translation table
+ *  This converts an ascii char to a 1-based index that can be used in
+ *  the BLOSUM matrix - note that you need to subtract 1 from the values
+ *  to get a 0-based index for use in BLOSUM62.
+ *  
+ *  It specifies a 1-based index for the 20 standard amino acids. For any
+ *  character that is not a residue, NA is returned.
+ *
+ * Note: to use with BLOSUM62[], always subtract 1 from the values !!!!
+ */
+
+#undef NA
+#define NA 23 /* not a residue - eaual to X */
+
+static int a2b[] =
+  {
+    NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+    NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+    NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+    NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+    NA, 1,21, 5, 4, 7,14, 8, 9,10,NA,12,11,13, 3,NA,
+    15, 6, 2,16,17,NA,20,18,NA,19,NA,NA,NA,NA,NA,NA,
+    NA, 1,NA, 5, 4, 7,14, 8, 9,10,NA,12,11,13, 3,NA,
+    15, 6, 2,16,17,NA,20,18,23,19,22,NA,NA,NA,NA,NA,
+
+    NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+    NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+    NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+    NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+    NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+    NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+    NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+    NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA 
+  };
+
+
+/* ASCII-to-binary translation table
+ *  Similar to a2b but returns NR (0) for characters that are
+ *  not residues, rather than NA. (This is used in our color
+ *  arrays, which are 1-based, with the 0 index being reserved
+ *  for unknown characters.
+ */
+#undef NR
+#define NR 0
+
+static int n2b[] =
+  {
+    NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,
+    NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,
+    NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,
+    NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,
+    NR, 1,NR, 5, 4, 7,14, 8, 9,10,NR,12,11,13, 3,NR,
+    15, 6, 2,16,17,NR,20,18,NR,19,NR,NR,NR,NR,NR,NR,
+    NR, 1,NR, 5, 4, 7,14, 8, 9,10,NR,12,11,13, 3,NR,
+    15, 6, 2,16,17,NR,20,18,NR,19,NR,NR,NR,NR,NR,NR,
+
+    NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,
+    NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,
+    NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,
+    NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,
+    NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,
+    NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,
+    NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,
+    NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,
+  };
+
+
+#ifdef OLD_BELVU_CODE
+
+/* Note: this treecpy does not reallocate any strings, assuming they will 
+   always exist and never change.  Serious problems await if this is
+   not true
+*/
+static treeNode *treecpy(treeNode *node)
+{
+    treeNode *newnode;
+
+    if (!node) return 0;
+
+    newnode = g_malloc(sizeof(treeNode));
+
+    newnode->dist      = node->dist;
+    newnode->branchlen = node->branchlen;	
+    newnode->boot      = node->boot;
+    newnode->name      = node->name;
+    newnode->organism  = node->organism;
+    newnode->aln       = node->aln;
+    newnode->box       = node->box;
+    newnode->color     = node->color;
+
+    newnode->left      = treecpy(node->left);
+    newnode->right     = treecpy(node->right);
+
+    return newnode;
+}
+
+/* Not used - the idea was to find balancing point of a tree by walking to
+   neighbors and checking if they are better.  However, the best balanced
+   node may be beyond less balanced nodes.  (This is because the subtree weights
+   are averaged branchlengths and not the sum of the total branchlengths).
+*/
+static void treeBalanceTreeRecurse(treeNode *node, double *bestbal, treeNode **bestNode)
+{
+    double newbal, lweight, rweight;
+
+    /* Probe left subtree */
+
+    if (node->left) {
+	lweight = treeSize3way(node, node->left) - node->branchlen;
+	rweight = treeSize3way(node->left, node) - node->left->branchlen;
+	newbal = fabsf(lweight - rweight);
+	
+	/*
+	printf("Subtree weights = %.1f  %.1f\n", lweight, rweight);
+	printf("oldbal = %.1f   newbal = %.1f\n", *bestbal, newbal);
+	*/
+
+	if (newbal < *bestbal) { /* better balance */
+
+	    g_message("Better balance: %.1f (oldbest = %.1f)\n", newbal, *bestbal);
+	    
+	    *bestbal = newbal;
+	    *bestNode = node;
+	    
+	    treeBalanceTreeRecurse(node->right, bestbal, bestNode);
+	}
+    }
+
+    if (node->right) {
+
+	lweight = treeSize3way(node, node->right) - node->branchlen;
+	rweight = treeSize3way(node->right, node) - node->right->branchlen;
+	newbal = fabsf(lweight - rweight);
+	
+	/*
+	printf("Subtree weights = %.1f  %.1f\n", lweight, rweight);
+	printf("oldbal = %.1f   newbal = %.1f\n", *bestbal, newbal);
+	*/
+	
+	if (newbal < *bestbal) { /* better balance */
+	    
+	    g_message("Better bal: %f\n", newbal);
+	    
+	    *bestbal = newbal;
+	    *bestNode = node;
+	    
+	    treeBalanceTreeRecurse(node->right, bestbal, bestNode);
+	}
+    }
+}
+
+#endif /* OLD_BELVU_CODE */
+
+
+
+/* These values define the defaults for the thresholds when coloring by
+ * conservation; the first three are when coloring by %ID and the last 
+ * three when coloring by similarity (i.e. BLOSUM62) */
+#define DEFAULT_LOW_ID_CUTOFF           0.4
+#define DEFAULT_MID_ID_CUTOFF           0.6
+#define DEFAULT_MAX_ID_CUTOFF           0.8
+#define DEFAULT_LOW_SIM_CUTOFF          0.5
+#define DEFAULT_MID_SIM_CUTOFF          1.5
+#define DEFAULT_MAX_SIM_CUTOFF          3.0
+
+/* These values define the default color IDs for the conservation colors */
+#define DEFAULT_MAX_FG_COLOR            BLACK
+#define DEFAULT_MID_FG_COLOR            BLACK
+#define DEFAULT_LOW_FG_COLOR            BLACK
+#define DEFAULT_MAX_BG_COLOR            CYAN
+#define DEFAULT_MID_BG_COLOR            MIDBLUE
+#define DEFAULT_LOW_BG_COLOR            LIGHTGRAY  
+#define DEFAULT_MAX_FG_PRINT_COLOR      WHITE
+#define DEFAULT_MID_FG_PRINT_COLOR      BLACK
+#define DEFAULT_LOW_FG_PRINT_COLOR      BLACK
+#define DEFAULT_MAX_BG_PRINT_COLOR      BLACK
+#define DEFAULT_MID_BG_PRINT_COLOR      GRAY
+#define DEFAULT_LOW_BG_PRINT_COLOR      LIGHTGRAY  
+
+/* Global variables */
+
+/* Color names (must be in same order as Color enum) */
+static const char *colorNames[NUM_TRUECOLORS] = {
+"WHITE", 
+"BLACK", 
+"LIGHTGRAY", 
+"DARKGRAY",
+"RED", 
+"GREEN", 
+"BLUE",
+"YELLOW", 
+"CYAN", 
+"MAGENTA",
+"LIGHTRED", 
+"LIGHTGREEN", 
+"LIGHTBLUE",
+"DARKRED", 
+"DARKGREEN", 
+"DARKBLUE",
+"PALERED", 
+"PALEGREEN", 
+"PALEBLUE",
+"PALEYELLOW", 
+"PALECYAN", 
+"PALEMAGENTA",
+"BROWN", 
+"ORANGE", 
+"PALEORANGE",
+"PURPLE", 
+"VIOLET", 
+"PALEVIOLET",
+"GRAY", 
+"PALEGRAY",
+"CERISE", 
+"MIDBLUE"
+};
+
+
+/* Define the old-style acedb colors as hex values that can be parsed by GDK */
+static const char* colorTable[NUM_TRUECOLORS]= {
+"#ffffff", 	   /* WHITE           */
+"#000000",	   /* BLACK           */
+"#c8c8c8",	   /* LIGHTGRAY       */
+"#646464", 	   /* DARKGRAY        */
+"#ff0000",         /* RED             */
+"#00ff00",         /* GREEN           */
+"#0000ff",	   /* BLUE            */
+"#ffff00",	   /* YELLOW          */
+"#00ffff",	   /* CYAN            */
+"#ff00ff", 	   /* MAGENTA         */
+"#ffa0a0",	   /* LIGHTRED        */
+"#a0ffa0",	   /* LIGHTGREEN      */
+"#a0c8ff",	   /* LIGHTBLUE       */
+"#af0000", 	   /* DARKRED         */
+"#00af00",	   /* DARKGREEN       */
+"#0000af",         /* DARKBLUE        */
+"#ffe6d2",	   /* PALERED         */ 
+"#d2ffd2", 	   /* PALEGREEN       */
+"#d2ebff",	   /* PALEBLUE        */
+"#ffffc8",	   /* PALEYELLOW      */
+"#c8ffff",	   /* PALECYAN        */
+"#ffc8ff",	   /* PALEMAGENTA     */
+"#a05000",	   /* BROWN           */
+"#ff8000",	   /* ORANGE          */
+"#ffdc6e",         /* PALEORANGE      */
+"#c000ff",	   /* PURPLE          */
+"#c9aaff",	   /* VIOLET          */
+"#ebd7ff",	   /* PALEVIOLET      */
+"#969696",	   /* GRAY            */
+"#ebebeb",	   /* PALEGRAY        */
+"#ff0080",	   /* CERISE          */
+"#56b2de"	   /* MIDBLUE         */
+} ;
+
+
+/* File format names (must be in same order as BelvuFileFormat enum)  */
+static const char *fileFormatNames[BELVU_NUM_FILE_FORMATS] = {
+  "Stockholm (Pfam/HMMER)",
+  "MSF",
+  "Aligned Fasta",
+  "Unaligned Fasta"
+};
+
+
+/* Current residue colors */
+static int color[] = {
+        NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+        NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+        NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+        NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+        NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+        NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+        NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+        NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+
+        NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+        NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+        NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+        NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+        NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+        NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+        NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+        NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN
+};
+
+
+/* Saved custom residue colors */
+static int customColor[] = {
+NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+
+NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN
+};
+
+
+/* Residue colors */
+static int markupColor[] = {
+        BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,
+        BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,
+        BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,
+        BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,
+        BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,
+        BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,
+        BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,
+        BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,
+
+        BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,
+        BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,
+        BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,
+        BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,
+        BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,
+        BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,
+        BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,
+        BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG,BG
+};
+
+
+static const char b2a[] = ".ARNDCQEGHILKMFPSTWYV" ;
+
+static int a2b_sean[] =
+  {
+    NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,
+    NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,
+    NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,
+    NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,
+    NR, 1,NR, 2, 3, 4, 5, 6, 7, 8,NR, 9,10,11,12,NR,
+    13,14,15,16,17,NR,18,19,NR,20,NR,NR,NR,NR,NR,NR,
+    NR, 1,NR, 2, 3, 4, 5, 6, 7, 8,NR, 9,10,11,12,NR,
+    13,14,15,16,17,NR,18,19,NR,20,NR,NR,NR,NR,NR,NR,
+
+    NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,
+    NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,
+    NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,
+    NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,
+    NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,
+    NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,
+    NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,
+    NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR
+  };
+
+
+ 
+
+/* Local function declarations */
+static double		   score(char *s1, char *s2, const gboolean penalize_gaps);
+static void		   initConservMtx(BelvuContext *bc);
+static int		   countResidueFreqs(BelvuContext *bc);
+static int                 stripCoordTokens(char *cp, BelvuContext *bc);
+int*                       getConsColor(BelvuContext *bc, const BelvuConsLevel consLevel, const gboolean foreground);
+static void                rmFinalise(BelvuContext *bc) ;
+
+
+/***********************************************************
+ *		          Sorting			   *
+ ***********************************************************/
+
+/* Sort comparision function to sort ALNs by name */
+gint alphaorder(gconstpointer xIn, gconstpointer yIn)
+{
+  const ALN *x = *((const ALN**)xIn);
+  const ALN *y = *((const ALN**)yIn);
+
+  int retval=0;
+  
+  if (!(retval = strcmp(x->name, y->name)))
+    {
+      if (x->start == y->start)
+	{
+	  if (x->end < y->end)
+	    retval = -1;
+	  else if (x->end > y->end)
+	    retval = 1;
+	}
+      else if (x->start < y->start)
+	retval = -1;
+      else if (x->start > y->start)
+	retval = 1;
+    }
+  
+  /* printf("Comparing %10s %4d %4d with %10s %4d %4d = %d\n", 
+   x->name, x->start, x->end, y->name, y->start, y->end, retval); */
+  
+  return retval;
+}
+
+
+/* Sort comparision function to sort ALNs by organism */
+gint organism_order(gconstpointer xIn, gconstpointer yIn)
+{
+  const ALN *x = *((const ALN**)xIn);
+  const ALN *y = *((const ALN**)yIn);
+
+  if (!x->organism && !y->organism)
+    return 0;
+  else if (!x->organism)
+    return -1;
+  else if (!y->organism)
+    return 1;
+  else
+    return strcmp(x->organism, y->organism);
+}
+
+
+/* Sort comparision function to sort ALNs by organism */
+gint organismorder(gconstpointer xIn, gconstpointer yIn)
+{
+  const ALN *x = *((const ALN**)xIn);
+  const ALN *y = *((const ALN**)yIn);
+
+  int retval=0;
+  const char *p1 = strchr(x->name, '_'), 
+             *p2 = strchr(y->name, '_');
+
+  if (!p1 && !p2) return alphaorder(xIn, yIn);
+  if (!p1) return 1;
+  if (!p2) return -1;
+  
+  if (!(retval = strcmp(p1, p2))) 
+    return alphaorder(xIn, yIn);
+
+  return retval;
+}
+
+
+/* Sort comparison function to sort ALNs by score */
+gint scoreorder(gconstpointer xIn, gconstpointer yIn)
+{
+  const ALN *x = *((const ALN**)xIn);
+  const ALN *y = *((const ALN**)yIn);
+
+  if (x->score < y->score)
+    return -1;
+  else if (x->score > y->score)
+    return 1;
+  else return 0;
+}
+
+static gint scoreorderRev(gconstpointer xIn, gconstpointer yIn)
+{
+  const ALN *x = *((const ALN**)xIn);
+  const ALN *y = *((const ALN**)yIn);
+
+    if (x->score > y->score)
+	return -1;
+    else if (x->score < y->score)
+	return 1;
+    else return 0;
+}
+
+
+/* Sort comparison function to sort ALNs by nr */
+gint nrorder(gconstpointer xIn, gconstpointer yIn)
+{
+  const ALN *x = *((const ALN**)xIn);
+  const ALN *y = *((const ALN**)yIn);
+
+  if (x->nr < y->nr)
+    return -1;
+  else if (x->nr > y->nr)
+    return 1;
+  else return 0;
+}
+
+
+void scoreSort(BelvuContext *bc)
+{
+  if (!bc->displayScores) 
+    { 
+      g_critical("No scores available.\n");
+      return;
+    }
+
+  g_array_sort(bc->alignArr, scoreorder);
+    
+  arrayOrder(bc->alignArr);
+}
+
+
+static void alphaSort(BelvuContext *bc)
+{
+  g_array_sort(bc->alignArr, alphaorder);
+  arrayOrder(bc->alignArr);
+}
+
+
+static void organismSort(BelvuContext *bc)
+{
+  g_array_sort(bc->alignArr, organismorder);
+  arrayOrder(bc->alignArr);
+}
+
+
+void highlightScoreSort(char mode, BelvuContext *bc)
+{
+  if (!bc->selectedAln) 
+    {
+      g_critical("Please highlight a sequence first\n");
+      return;
+    }
+  
+  if (bc->selectedAln->markup) 
+    {
+      g_critical("Please do not highlight a markup line\n");
+      return;
+    }
+  
+  separateMarkupLines(bc);
+  
+  /* if (displayScores) {
+   if (!(graphQuery("This will erase the current scores, do you want to continue?")))
+   return;
+   }*/
+  
+  bc->displayScores = TRUE;
+  
+  /* Calculate score relative to highlighted sequence */
+  int i = 0;
+  
+  for (i = 0; i < (int)bc->alignArr->len; ++i)
+    {
+      ALN *curAln = g_array_index(bc->alignArr, ALN*, i);
+
+      if (mode == 'P')
+	{
+	  curAln->score = score(alnGetSeq(bc->selectedAln), alnGetSeq(curAln), bc->penalize_gaps);
+	}
+      else if (mode == 'I')
+	{
+	  curAln->score = percentIdentity(alnGetSeq(bc->selectedAln), alnGetSeq(curAln), bc->penalize_gaps);
+	}
+      
+      char *scoreStr = g_strdup_printf("%.1f", curAln->score);
+      int len = strlen(scoreStr);
+      
+      if (len > bc->maxScoreLen)
+	bc->maxScoreLen = len;
+      
+      g_free(scoreStr);
+    }
+  
+  g_array_sort(bc->alignArr, scoreorderRev);
+  arrayOrder(bc->alignArr);
+  
+  reInsertMarkupLines(bc);
+  
+  bc->alignYStart = 0;
+  
+  if (bc->belvuAlignment)
+    {
+      updateHeaderColumnsSize(bc->belvuAlignment);
+      calculateDrawingSizes(bc->belvuAlignment);
+      belvuAlignmentRedrawAll(bc->belvuAlignment);
+    }
+}
+
+
+/* This sorts the alignment list by the current sort mode specified in the context.
+ * If the mode is to sort by tree, then this function will create the tree if it
+ * does not already exist, and will also display the tree to the user if showTree
+ * is true. */
+void doSort(BelvuContext *bc, const BelvuSortType sortType, const gboolean showTree)
+{
+  g_array_sort(bc->alignArr, nrorder);
+  
+  switch(sortType) 
+  {
+    case BELVU_SORT_ALPHA :	      alphaSort(bc);                        break;
+    case BELVU_SORT_ORGANISM :        organismSort(bc);                     break;
+    case BELVU_SORT_SCORE :	      scoreSort(bc);                        break;
+    case BELVU_SORT_TREE  :	      treeSort(bc, showTree);               break;
+    case BELVU_SORT_CONS  :	      /* sort by nrorder - already done */  break;
+    case BELVU_SORT_SIM :             highlightScoreSort('P', bc);          break;
+    case BELVU_SORT_ID :              highlightScoreSort('I', bc);          break;
+    case BELVU_UNSORTED : break;
+    
+    default: 
+      g_warning("Initial sort order '%d' not recognised.\n", sortType);
+      break;
+  }
+}
+
+/***********************************************************
+ *		          Trees				   *
+ ***********************************************************/
+
+void setTreeScaleCorr(BelvuContext *bc, const int treeMethod) 
+{
+  if (treeMethod == UPGMA)
+      bc->treeScale = 1.0;
+  else if (treeMethod == NJ)
+      bc->treeScale = 0.3;
+}
+
+
+void setTreeScale(BelvuContext *bc, const double newScale) 
+{
+  bc->treeScale = newScale;
+}
+
+
+static int treeOrder(TreeNode *node, const int treeOrderNrIn) 
+{
+  int treeOrderNr = treeOrderNrIn;
+  
+  if (node) 
+    {
+      treeOrderNr = treeOrder(node->left, treeOrderNr);
+      
+      if (node->aln)
+        node->aln->nr = treeOrderNr++;
+      
+      treeOrderNr = treeOrder(node->right, treeOrderNr);    
+    }
+
+  return treeOrderNr;
+}
+
+
+void treeSortBatch(BelvuContext *bc)
+{
+  separateMarkupLines(bc);
+  
+  if (!bc->mainTree || !bc->mainTree->head)
+    {
+      Tree *tree = treeMake(bc, FALSE, TRUE);
+      belvuContextSetTree(bc, &tree);
+    }
+  
+  treeOrder(bc->mainTree->head, 1); /* Set nr field according to tree order */
+  
+  g_array_sort(bc->alignArr, nrorder);
+  
+  reInsertMarkupLines(bc);
+}
+
+
+void treeTraverse(BelvuContext *bc, TreeNode *node, void (*func)(BelvuContext *bc, TreeNode *treeNode)) 
+{
+  if (!node) 
+    return;
+  
+  treeTraverse(bc, node->left, func);
+  func(bc, node);
+  treeTraverse(bc, node->right, func);
+}
+
+
+/* General purpose routine to convert a string to ALN struct.
+   Note: only fields Name, Start, End are filled!
+ */
+void str2aln(BelvuContext *bc, char *src, ALN *alnp) 
+{
+  char *tmp = g_strdup(src);
+  stripCoordTokens(tmp, bc);
+
+  if (sscanf(tmp, "%s%d%d", alnp->name, &alnp->start, &alnp->end) != 3)
+    {
+      g_critical("Name to field conversion failed for %s (%s).\n", src, tmp);
+      return;
+    }
+  
+  if (strlen(alnp->name) > MAXNAMESIZE)
+    g_error("buffer overrun in %s !!!!!!!!!\n", "str2aln") ;
+  
+  g_free(tmp);
+}
+
+
+/* Sort the alignments by tree order (creates the tree if it does not exist,
+ * and also displays it to the user if showTree is true). */
+void treeSort(BelvuContext *bc, const gboolean showTree)
+{
+  treeSortBatch(bc);
+  
+  if (showTree)
+    {
+      /* Show the tree window (create it if necessary) */
+      if (bc->belvuTree)
+        gtk_window_present(GTK_WINDOW(bc->belvuTree));
+      else
+        createBelvuTreeWindow(bc, bc->mainTree, TRUE);
+    }
+}
+
+
+static void treeTraverseLRfirst(BelvuContext *bc, TreeNode *node, void (*func)(BelvuContext *bc, TreeNode *node)) 
+{
+  if (!node) 
+    return;
+  
+  treeTraverseLRfirst(bc, node->left, func);
+  treeTraverseLRfirst(bc, node->right, func);
+  func(bc, node);
+}
+
+
+static void subfamilyTrav(BelvuContext *bc, TreeNode *node) 
+{
+  static double dist = 0.0;
+  static int 
+  newgroup = 1,
+  groupnr = 0;
+  
+  if (!node) 
+    return;
+  
+  if (node->name) 
+    {
+      dist = node->branchlen;
+    
+      if (newgroup) 
+        {
+          g_message("\nGroup nr %d:\n", ++groupnr);
+          newgroup = 0;
+        }
+      
+      g_message("%s\n", node->name);
+    }
+  else
+    {
+      /* internal node */
+      dist += node->branchlen;
+    }
+  
+  if ( bc->mksubfamilies_cutoff > (100.0-dist) )
+    { 
+      newgroup = 1; 
+    }
+  
+  /* printf("abs=%.1f  branch=%.1f\n", dist, node->branchlen); */
+}
+
+
+void mksubfamilies(BelvuContext *bc, double cutoff)
+{
+  separateMarkupLines(bc);
+  
+  strcpy(bc->treeMethodString, UPGMAstr);
+  bc->treeMethod = UPGMA;
+  
+  Tree *tree = treeMake(bc, FALSE, TRUE);
+  
+  treeTraverseLRfirst(bc, tree->head, subfamilyTrav);
+}
+
+
+/***********************************************************
+ *		          Alignments			   *
+ ***********************************************************/
+
+/* This finalises the addition of an alignment from a fasta file - the given
+ * alignment is appended into the array, and the array takes ownership of it.
+ * If there is already a sequence with this name in the array then it will not
+ * be added, and it will be deleted; therefore, the caller should be wary of
+ * maintaining a pointer to it. */
+static void readFastaAlnFinalise(BelvuContext *bc, ALN *aln)
+{
+  if (bc->maxLen) 
+    {
+      if (alnGetSeqLen(aln) != bc->maxLen) 
+        g_error("Differing sequence lengths: %d %d\n", bc->maxLen, alnGetSeqLen(aln));
+    }
+  else
+    {
+      bc->maxLen = alnGetSeqLen(aln);
+    }
+
+  int ip = 0;
+  if (alnArrayFind(bc->alignArr, &aln, &ip, alphaorder))
+    {
+      g_error("Sequence name occurs more than once: %s%c%d-%d\n", 
+              aln->name, bc->saveSeparator, aln->start, aln->end);
+      
+      g_string_free(aln->sequenceStr, TRUE);
+      g_free(aln);
+    }
+  else
+    {
+      aln->nr = bc->alignArr->len + 1;
+      g_array_append_val(bc->alignArr, aln);
+      g_array_sort(bc->alignArr, alphaorder);
+    }
+}
+
+
+/* initialise an ALN with empty values */
+void initAln(ALN *alnp)
+{
+  alnp->name[0] = '\0';
+  alnp->start = 0;
+  alnp->end = 0;
+  alnp->sequenceStr = NULL;
+  alnp->nr = 0;
+  alnp->fetch[0] = '\0';
+  alnp->score = 0.0;
+  alnp->color = 0;
+  alnp->markup = 0;
+  alnp->hide = FALSE;
+  alnp->nocolor = FALSE;
+  alnp->organism = NULL; 
+  alnp->startColIdx = 0;
+}
+
+
+ALN* createEmptyAln()
+{
+  ALN *aln = (ALN*)g_malloc(sizeof *aln);
+  initAln(aln);
+  return aln;
+}
+
+
+/* Read in fasta sequences from a file and create a sequence in the given
+ * alignments array for each of the fasta sequences. */
+static void readFastaAln(BelvuContext *bc, FILE *pipe)
+{
+  char line[MAXLENGTH+1];
+
+  ALN *currentAln = NULL;
+
+  while (!feof (pipe))
+    { 
+      if (!fgets (line, MAXLENGTH, pipe))
+	break;
+
+      char *cp = strchr(line, '\n');
+      
+      /* Cut off the newline char at the end, if it has one */
+      if (cp)
+	*cp = 0;
+
+      if (*line == '>')
+        {
+          if (currentAln)
+            {
+              /* Finish off the previous sequence */
+              readFastaAlnFinalise(bc, currentAln);
+              currentAln = NULL;
+            }
+
+          /* Create a new sequence */
+          currentAln = createEmptyAln();
+          currentAln->sequenceStr = g_string_new(NULL);
+          
+          /* Parse the new line. Note that this resets the ALN struct for us. */
+          parseMulLine(bc, line + 1, currentAln);
+        }
+      else if (currentAln)
+        {
+          /* Part-way through reading a sequnce; append the current line to it */
+          g_string_append(currentAln->sequenceStr, line);
+        }
+    }
+  
+  if (currentAln)
+    {
+      readFastaAlnFinalise(bc, currentAln);
+    }
+
+  bc->saveFormat = BELVU_FILE_ALIGNED_FASTA;
+  
+  return ;
+}
+
+
+/* Light copy of an ALN struct - the sequence and organism strings are pointers to the
+ * original values; they are not duplicated */
+void alncpy(ALN *dest, ALN *src)
+{
+  strncpy(dest->name, src->name, MAXNAMESIZE);
+  dest->start = src->start;
+  dest->end = src->end;
+  /* dest->sequenceStr = src->sequenceStr ? g_string_new(src->sequenceStr->str) : NULL; */
+  dest->sequenceStr = src->sequenceStr;
+  dest->nr = src->nr;			
+  strncpy(dest->fetch, src->fetch, MAXNAMESIZE+10);
+  dest->score = src->score;
+  dest->color = src->color;
+  dest->markup = src->markup;
+  dest->hide = src->hide;
+  dest->nocolor = src->nocolor;
+  dest->organism = src->organism;
+  dest->startColIdx = src->startColIdx;
+}
+
+
+/***********************************************************
+ *		          Parsing			   *
+ ***********************************************************/
+
+/* Convenience routine for converting "name/start-end" to "name start end".
+ Used by parsing routines.
+ 
+ Return 1 if both tokens were found, otherwise 0.
+ */
+static int stripCoordTokens(char *cp, BelvuContext *bc)
+{
+  char *end = cp;
+  
+  while (*end && !isspace(*end)) end++;
+  
+  if ((cp = strchr(cp, bc->saveSeparator)) && cp < end) {
+    *cp = ' ';
+    if ((cp = strchr(cp, '-')) && cp < end) {
+      *cp = ' ';
+      bc->IN_FORMAT = MUL;
+      return 1;
+    }
+  }
+
+  bc->IN_FORMAT = RAW;
+  return 0;
+}
+
+
+/*
+ Parse name, start and end of a Mul format line
+ 
+ Convenience routine, part of readMul and other parsers
+ */
+void parseMulLine(BelvuContext *bc, char *line, ALN *aln)
+{
+  char line2[MAXLENGTH+1], *cp=line2, *cq, GRfeat[MAXNAMESIZE+1];
+  GRfeat[0] = 0;
+  
+  strncpy(cp, line, MAXLENGTH);
+  
+  if (!strncmp(cp, "#=GC", 4))
+    {
+      aln->markup = GC;
+      cp += 5;
+    }
+
+  if (!strncmp(cp, "#=RF", 4)) 
+    {
+      aln->markup = GC;
+    } 
+
+  if (!strncmp(cp, "#=GR", 4)) 
+    {
+      aln->markup = GR;
+      cp += 5;
+    }
+  
+  if (bc->stripCoordTokensOn) 
+    stripCoordTokens(cp, bc);
+  
+  /* Name */
+  strncpy(aln->name, cp, MAXNAMESIZE);
+  aln->name[MAXNAMESIZE] = 0;
+
+  if ((cq = strchr(aln->name, ' '))) 
+    *cq = 0;
+  
+  /* Add Start and End coords */
+  if (bc->stripCoordTokensOn && (bc->IN_FORMAT != RAW) )
+    sscanf(strchr(cp, ' ') + 1, "%d%d", &aln->start, &aln->end);
+  
+  if (aln->markup == GR) 
+    {
+      /* Add GR markup names to name 
+       
+         #=GR O83071 192 246 SA 999887756453524252..55152525....36463774777.....948472782969685958
+         ->name = O83071_SA
+      */
+      if (bc->IN_FORMAT == MUL) 
+        {
+          sscanf(cp + strlen(aln->name), "%d%d%s", &aln->start, &aln->end, GRfeat);
+        }
+      else
+        {
+          sscanf(cp + strlen(aln->name), "%s", GRfeat);
+        }
+      
+      if (strlen(aln->name)+strlen(GRfeat)+2 > MAXNAMESIZE)
+        g_critical("Too long name or/and feature name\n");
+
+      strcat(aln->name, " ");
+      strncat(aln->name, GRfeat, MAXNAMESIZE-strlen(aln->name));
+      
+      /* printf("%s, %d chars\n", aln->name, strlen(aln->name)); fflush(stdout); */
+    }
+}
+
+
+/***********************************************************
+ *		          Colours			   *
+ ***********************************************************/
+
+/* Set the default colors of organisms to something somewhat intelligent */
+void setOrganismColors(GArray *organismArr) 
+{
+    static int treeColors[16] = {
+      RED, 
+      BLUE,
+      DARKGREEN, 
+      ORANGE, 
+      MAGENTA,
+      BROWN, 
+      PURPLE, 
+      CYAN, 
+      VIOLET, 
+      MIDBLUE,
+      CERISE, 
+      LIGHTBLUE,
+      DARKRED, 
+      GREEN, 
+      DARKBLUE,
+      GRAY
+  };
+  
+  int i = 0;
+  int color = 0;
+  
+  for (i = 0; i < (int)organismArr->len; ++i) 
+    {
+      color = treeColors[i % 16];
+      /*if (i > 15) color = treeColors[15];*/
+     
+      g_array_index(organismArr, ALN*, i)->color = color;
+    }
+}
+
+
+
+/* Return the markup color for the given char */
+int getMarkupColor(const char inputChar)
+{
+  return markupColor[(unsigned char)(inputChar)];
+}
+
+/* Return the conservation color for the given char at the given index */
+int getConservColor(BelvuContext *bc, const char inputChar, const int idx)
+{
+  return bc->colorMap[n2b[(unsigned char)(inputChar)]][idx];
+}
+
+/* Return the color from the colors array for the given char */
+int getColor(const char inputChar)
+{
+  return color[(unsigned char)(inputChar)];
+}
+
+/* Set the color in the colors array for the given char */
+void setColor(const char inputChar, const int colorNum)
+{
+  color[(unsigned char)(toupper(inputChar))] = colorNum;
+  color[(unsigned char)(tolower(inputChar))] = colorNum;
+}
+
+/* Returns the 'color' array */
+int* getColorArray()
+{
+  return color;
+}
+
+/* Returns the 'markupColor' array */
+int* getMarkupColorArray()
+{
+  return markupColor;
+}
+
+
+/* Convert one of the old acedb-style color numbers to a hex string */
+static const char* convertColorNumToStr(const int colorNum)
+{
+  const char *result = colorTable[WHITE];
+  
+  if (colorNum >= 0 && colorNum < NUM_TRUECOLORS)
+    result = colorTable[colorNum];
+  
+  return result;
+}
+
+
+/* Convert an old-style ACEDB color number to a GdkColor */
+void convertColorNumToGdkColor(const int colorNum, const gboolean isSelected, GdkColor *result)
+{
+  const char *colorStr = convertColorNumToStr(colorNum);
+  getColorFromString(colorStr, result, NULL);
+  
+  /* If an item is selected, we use a slightly different shade of the same color. */
+  if (isSelected)
+    getSelectionColor(result, result);
+}
+
+
+//static void colorCons(BelvuContext *bc)
+//{
+//  setConsSchemeColors(bc);
+//  
+//  //  menuSetFlags(menuItem(colorMenu, thresholdStr), MENUFLAG_DISABLED);
+//  //  menuUnsetFlags(menuItem(colorMenu, printColorsStr), MENUFLAG_DISABLED);
+//  //  menuUnsetFlags(menuItem(colorMenu, ignoreGapsStr), MENUFLAG_DISABLED);
+//  
+//  bc->colorByResIdOn = FALSE;
+//  //  belvuRedraw();
+//}
+
+
+/* Returns true if we're coloring by conservation */
+gboolean colorByConservation(BelvuContext *bc)
+{
+  return (bc->schemeType == BELVU_SCHEME_TYPE_CONS);
+}
+
+/* Returns true if we're coloring by residue */
+gboolean colorByResidue(BelvuContext *bc)
+{
+  return (bc->schemeType == BELVU_SCHEME_TYPE_RESIDUE);
+}
+
+/* Returns true if we're coloring by similarity */
+gboolean colorBySimilarity(BelvuContext *bc)
+{
+  return (colorByConservation(bc) && bc->consScheme == BELVU_SCHEME_BLOSUM);
+}
+
+
+/* Returns true if we should only color residues above a set threshold */
+gboolean colorByResId(BelvuContext *bc)
+{
+  /* This only applies in color-by-residue mode */
+  return (colorByResidue(bc) && bc->colorByResIdOn);
+}
+
+
+/* Utility to clear all residue colors to white */
+static void clearResidueColors(BelvuContext *bc)
+{
+  color[(unsigned char)'A'] = color[(unsigned char)'a'] = WHITE;
+  color[(unsigned char)'B'] = color[(unsigned char)'b'] = NOCOLOR;
+  color[(unsigned char)'C'] = color[(unsigned char)'c'] = WHITE;
+  color[(unsigned char)'D'] = color[(unsigned char)'d'] = WHITE;
+  color[(unsigned char)'E'] = color[(unsigned char)'e'] = WHITE;
+  color[(unsigned char)'F'] = color[(unsigned char)'f'] = WHITE;
+  color[(unsigned char)'G'] = color[(unsigned char)'g'] = WHITE;
+  color[(unsigned char)'H'] = color[(unsigned char)'h'] = WHITE;
+  color[(unsigned char)'I'] = color[(unsigned char)'i'] = WHITE;
+  color[(unsigned char)'J'] = color[(unsigned char)'j'] = WHITE;
+  color[(unsigned char)'K'] = color[(unsigned char)'k'] = WHITE;
+  color[(unsigned char)'L'] = color[(unsigned char)'l'] = WHITE;
+  color[(unsigned char)'M'] = color[(unsigned char)'m'] = WHITE;
+  color[(unsigned char)'N'] = color[(unsigned char)'n'] = WHITE;
+  color[(unsigned char)'O'] = color[(unsigned char)'o'] = WHITE;
+  color[(unsigned char)'P'] = color[(unsigned char)'p'] = WHITE;
+  color[(unsigned char)'Q'] = color[(unsigned char)'q'] = WHITE;
+  color[(unsigned char)'R'] = color[(unsigned char)'r'] = WHITE;
+  color[(unsigned char)'S'] = color[(unsigned char)'s'] = WHITE;
+  color[(unsigned char)'T'] = color[(unsigned char)'t'] = WHITE;
+  color[(unsigned char)'V'] = color[(unsigned char)'v'] = WHITE;
+  color[(unsigned char)'U'] = color[(unsigned char)'u'] = WHITE;
+  color[(unsigned char)'W'] = color[(unsigned char)'w'] = WHITE;
+  color[(unsigned char)'X'] = color[(unsigned char)'x'] = WHITE;
+  color[(unsigned char)'Y'] = color[(unsigned char)'y'] = WHITE;
+  color[(unsigned char)'Z'] = color[(unsigned char)'z'] = NOCOLOR;
+}
+
+
+/* Utility to clear all custom colors to white. Should be called during initialisation. */
+void initCustomColors()
+{
+  customColor[(unsigned char)'A'] = customColor[(unsigned char)'a'] = WHITE;
+  customColor[(unsigned char)'B'] = customColor[(unsigned char)'b'] = NOCOLOR;
+  customColor[(unsigned char)'C'] = customColor[(unsigned char)'c'] = WHITE;
+  customColor[(unsigned char)'D'] = customColor[(unsigned char)'d'] = WHITE;
+  customColor[(unsigned char)'E'] = customColor[(unsigned char)'e'] = WHITE;
+  customColor[(unsigned char)'F'] = customColor[(unsigned char)'f'] = WHITE;
+  customColor[(unsigned char)'G'] = customColor[(unsigned char)'g'] = WHITE;
+  customColor[(unsigned char)'H'] = customColor[(unsigned char)'h'] = WHITE;
+  customColor[(unsigned char)'I'] = customColor[(unsigned char)'i'] = WHITE;
+  customColor[(unsigned char)'J'] = customColor[(unsigned char)'j'] = WHITE;
+  customColor[(unsigned char)'K'] = customColor[(unsigned char)'k'] = WHITE;
+  customColor[(unsigned char)'L'] = customColor[(unsigned char)'l'] = WHITE;
+  customColor[(unsigned char)'M'] = customColor[(unsigned char)'m'] = WHITE;
+  customColor[(unsigned char)'N'] = customColor[(unsigned char)'n'] = WHITE;
+  customColor[(unsigned char)'O'] = customColor[(unsigned char)'o'] = WHITE;
+  customColor[(unsigned char)'P'] = customColor[(unsigned char)'p'] = WHITE;
+  customColor[(unsigned char)'Q'] = customColor[(unsigned char)'q'] = WHITE;
+  customColor[(unsigned char)'R'] = customColor[(unsigned char)'r'] = WHITE;
+  customColor[(unsigned char)'S'] = customColor[(unsigned char)'s'] = WHITE;
+  customColor[(unsigned char)'T'] = customColor[(unsigned char)'t'] = WHITE;
+  customColor[(unsigned char)'V'] = customColor[(unsigned char)'v'] = WHITE;
+  customColor[(unsigned char)'U'] = customColor[(unsigned char)'u'] = WHITE;
+  customColor[(unsigned char)'W'] = customColor[(unsigned char)'w'] = WHITE;
+  customColor[(unsigned char)'X'] = customColor[(unsigned char)'x'] = WHITE;
+  customColor[(unsigned char)'Y'] = customColor[(unsigned char)'y'] = WHITE;
+  customColor[(unsigned char)'Z'] = customColor[(unsigned char)'z'] = NOCOLOR;
+}
+
+
+static void colorSchemeCGP(BelvuContext *bc)
+{
+  clearResidueColors(bc);
+  
+  color[(unsigned char)'C'] = color[(unsigned char)'c'] = CYAN;
+  color[(unsigned char)'G'] = color[(unsigned char)'g'] = RED;
+  color[(unsigned char)'P'] = color[(unsigned char)'p'] = GREEN;
+}
+
+
+static void colorSchemeCGPH(BelvuContext *bc)
+{
+  clearResidueColors(bc);
+  
+  color[(unsigned char)'C'] = color[(unsigned char)'c'] = CYAN;
+  color[(unsigned char)'G'] = color[(unsigned char)'g'] = RED;
+  color[(unsigned char)'P'] = color[(unsigned char)'p'] = GREEN;
+  color[(unsigned char)'H'] = color[(unsigned char)'p'] = YELLOW;
+}
+
+
+static void colorSchemeEmpty(BelvuContext *bc)
+{
+  clearResidueColors(bc);
+}
+
+
+static void colorSchemeErik(BelvuContext *bc)
+{
+  /* Erik's favorite colours:
+   
+   C        - MIDBLUE
+   GP       - CYAN
+   HKR      - GREEN
+   AFILMVWY - YELLOW
+   BDENQSTZ - LIGHTRED
+   */
+  
+  color[(unsigned char)'A'] = color[(unsigned char)'a'] = YELLOW;
+  color[(unsigned char)'B'] = color[(unsigned char)'b'] = NOCOLOR;
+  color[(unsigned char)'C'] = color[(unsigned char)'c'] = MIDBLUE;
+  color[(unsigned char)'D'] = color[(unsigned char)'d'] = LIGHTRED;
+  color[(unsigned char)'E'] = color[(unsigned char)'e'] = LIGHTRED;
+  color[(unsigned char)'F'] = color[(unsigned char)'f'] = YELLOW;
+  color[(unsigned char)'G'] = color[(unsigned char)'g'] = CYAN;
+  color[(unsigned char)'H'] = color[(unsigned char)'h'] = GREEN;
+  color[(unsigned char)'I'] = color[(unsigned char)'i'] = YELLOW;
+  color[(unsigned char)'K'] = color[(unsigned char)'k'] = GREEN;
+  color[(unsigned char)'L'] = color[(unsigned char)'l'] = YELLOW;
+  color[(unsigned char)'M'] = color[(unsigned char)'m'] = YELLOW;
+  color[(unsigned char)'N'] = color[(unsigned char)'n'] = LIGHTRED;
+  color[(unsigned char)'P'] = color[(unsigned char)'p'] = CYAN;
+  color[(unsigned char)'Q'] = color[(unsigned char)'q'] = LIGHTRED;
+  color[(unsigned char)'R'] = color[(unsigned char)'r'] = GREEN;
+  color[(unsigned char)'S'] = color[(unsigned char)'s'] = LIGHTRED;
+  color[(unsigned char)'T'] = color[(unsigned char)'t'] = LIGHTRED;
+  color[(unsigned char)'V'] = color[(unsigned char)'v'] = YELLOW;
+  color[(unsigned char)'W'] = color[(unsigned char)'w'] = YELLOW;
+  color[(unsigned char)'Y'] = color[(unsigned char)'y'] = YELLOW;
+  color[(unsigned char)'Z'] = color[(unsigned char)'z'] = NOCOLOR;
+}
+
+
+static void colorSchemeGibson(BelvuContext *bc)
+{
+  /* Colour scheme by Gibson et. al (1994) TIBS 19:349-353
+   
+   Listed in Figure 1:
+   
+   
+   Gibson      AA        Here
+   
+   orange      G         ORANGE (16-colours: LIGHTRED)
+   yellow      P         YELLOW
+   blue        ACFILMVW  MIDBLUE
+   light blue  Y         LIGHTBLUE (16-colours: CYAN)
+   green       NQST      GREEN
+   purple      DE        PURPLE (16-colours: MAGENTA)
+   red         RK        RED
+   pink        H         LIGHTRED (16-colours: DARKRED)
+   */
+  
+  color[(unsigned char)'A'] = color[(unsigned char)'a'] = MIDBLUE;
+  color[(unsigned char)'B'] = color[(unsigned char)'b'] = NOCOLOR;
+  color[(unsigned char)'C'] = color[(unsigned char)'c'] = MIDBLUE;
+  color[(unsigned char)'D'] = color[(unsigned char)'d'] = PURPLE;
+  color[(unsigned char)'E'] = color[(unsigned char)'e'] = PURPLE;
+  color[(unsigned char)'F'] = color[(unsigned char)'f'] = MIDBLUE;
+  color[(unsigned char)'G'] = color[(unsigned char)'g'] = ORANGE;
+  color[(unsigned char)'H'] = color[(unsigned char)'h'] = LIGHTRED;
+  color[(unsigned char)'I'] = color[(unsigned char)'i'] = MIDBLUE;
+  color[(unsigned char)'K'] = color[(unsigned char)'k'] = RED;
+  color[(unsigned char)'L'] = color[(unsigned char)'l'] = MIDBLUE;
+  color[(unsigned char)'M'] = color[(unsigned char)'m'] = MIDBLUE;
+  color[(unsigned char)'N'] = color[(unsigned char)'n'] = GREEN;
+  color[(unsigned char)'P'] = color[(unsigned char)'p'] = YELLOW;
+  color[(unsigned char)'Q'] = color[(unsigned char)'q'] = GREEN;
+  color[(unsigned char)'R'] = color[(unsigned char)'r'] = RED;
+  color[(unsigned char)'S'] = color[(unsigned char)'s'] = GREEN;
+  color[(unsigned char)'T'] = color[(unsigned char)'t'] = GREEN;
+  color[(unsigned char)'V'] = color[(unsigned char)'v'] = MIDBLUE;
+  color[(unsigned char)'W'] = color[(unsigned char)'w'] = MIDBLUE;
+  color[(unsigned char)'Y'] = color[(unsigned char)'y'] = LIGHTBLUE;
+  color[(unsigned char)'Z'] = color[(unsigned char)'z'] = NOCOLOR;
+}
+
+
+/* Save the current residue colors as the 'custom' color scheme */
+void saveCustomColors(BelvuContext *bc)
+{
+  bc->haveCustomColors = TRUE;
+  
+  customColor[(unsigned char)'A'] = customColor[(unsigned char)'a'] = color[(unsigned char)'a'];
+  customColor[(unsigned char)'B'] = customColor[(unsigned char)'b'] = color[(unsigned char)'b'];
+  customColor[(unsigned char)'C'] = customColor[(unsigned char)'c'] = color[(unsigned char)'c'];
+  customColor[(unsigned char)'D'] = customColor[(unsigned char)'d'] = color[(unsigned char)'d'];
+  customColor[(unsigned char)'E'] = customColor[(unsigned char)'e'] = color[(unsigned char)'e'];
+  customColor[(unsigned char)'F'] = customColor[(unsigned char)'f'] = color[(unsigned char)'f'];
+  customColor[(unsigned char)'G'] = customColor[(unsigned char)'g'] = color[(unsigned char)'g'];
+  customColor[(unsigned char)'H'] = customColor[(unsigned char)'h'] = color[(unsigned char)'h'];
+  customColor[(unsigned char)'I'] = customColor[(unsigned char)'i'] = color[(unsigned char)'i'];
+  customColor[(unsigned char)'K'] = customColor[(unsigned char)'k'] = color[(unsigned char)'k'];
+  customColor[(unsigned char)'L'] = customColor[(unsigned char)'l'] = color[(unsigned char)'l'];
+  customColor[(unsigned char)'M'] = customColor[(unsigned char)'m'] = color[(unsigned char)'m'];
+  customColor[(unsigned char)'N'] = customColor[(unsigned char)'n'] = color[(unsigned char)'n'];
+  customColor[(unsigned char)'P'] = customColor[(unsigned char)'p'] = color[(unsigned char)'p'];
+  customColor[(unsigned char)'Q'] = customColor[(unsigned char)'q'] = color[(unsigned char)'q'];
+  customColor[(unsigned char)'R'] = customColor[(unsigned char)'r'] = color[(unsigned char)'r'];
+  customColor[(unsigned char)'S'] = customColor[(unsigned char)'s'] = color[(unsigned char)'s'];
+  customColor[(unsigned char)'T'] = customColor[(unsigned char)'t'] = color[(unsigned char)'t'];
+  customColor[(unsigned char)'V'] = customColor[(unsigned char)'v'] = color[(unsigned char)'v'];
+  customColor[(unsigned char)'W'] = customColor[(unsigned char)'w'] = color[(unsigned char)'w'];
+  customColor[(unsigned char)'Y'] = customColor[(unsigned char)'y'] = color[(unsigned char)'y'];
+  customColor[(unsigned char)'Z'] = customColor[(unsigned char)'z'] = color[(unsigned char)'z'];
+  
+}
+
+
+/* Set the current colors the the last-saved 'custom' color scheme */
+static void colorSchemeCustom(BelvuContext *bc)
+{
+  color[(unsigned char)'A'] = color[(unsigned char)'a'] = customColor[(unsigned char)'a'];
+  color[(unsigned char)'B'] = color[(unsigned char)'b'] = customColor[(unsigned char)'b'];
+  color[(unsigned char)'C'] = color[(unsigned char)'c'] = customColor[(unsigned char)'c'];
+  color[(unsigned char)'D'] = color[(unsigned char)'d'] = customColor[(unsigned char)'d'];
+  color[(unsigned char)'E'] = color[(unsigned char)'e'] = customColor[(unsigned char)'e'];
+  color[(unsigned char)'F'] = color[(unsigned char)'f'] = customColor[(unsigned char)'f'];
+  color[(unsigned char)'G'] = color[(unsigned char)'g'] = customColor[(unsigned char)'g'];
+  color[(unsigned char)'H'] = color[(unsigned char)'h'] = customColor[(unsigned char)'h'];
+  color[(unsigned char)'I'] = color[(unsigned char)'i'] = customColor[(unsigned char)'i'];
+  color[(unsigned char)'K'] = color[(unsigned char)'k'] = customColor[(unsigned char)'k'];
+  color[(unsigned char)'L'] = color[(unsigned char)'l'] = customColor[(unsigned char)'l'];
+  color[(unsigned char)'M'] = color[(unsigned char)'m'] = customColor[(unsigned char)'m'];
+  color[(unsigned char)'N'] = color[(unsigned char)'n'] = customColor[(unsigned char)'n'];
+  color[(unsigned char)'P'] = color[(unsigned char)'p'] = customColor[(unsigned char)'p'];
+  color[(unsigned char)'Q'] = color[(unsigned char)'q'] = customColor[(unsigned char)'q'];
+  color[(unsigned char)'R'] = color[(unsigned char)'r'] = customColor[(unsigned char)'r'];
+  color[(unsigned char)'S'] = color[(unsigned char)'s'] = customColor[(unsigned char)'s'];
+  color[(unsigned char)'T'] = color[(unsigned char)'t'] = customColor[(unsigned char)'t'];
+  color[(unsigned char)'V'] = color[(unsigned char)'v'] = customColor[(unsigned char)'v'];
+  color[(unsigned char)'W'] = color[(unsigned char)'w'] = customColor[(unsigned char)'w'];
+  color[(unsigned char)'Y'] = color[(unsigned char)'y'] = customColor[(unsigned char)'y'];
+  color[(unsigned char)'Z'] = color[(unsigned char)'z'] = customColor[(unsigned char)'z'];
+}
+
+
+/* This is called when the color scheme has been set to 'by residue'. It updates
+ * the colors according to the active color scheme. */
+void setResidueSchemeColors(BelvuContext *bc)
+{
+  switch (bc->residueScheme)
+    {
+      case BELVU_SCHEME_ERIK:     colorSchemeErik(bc);	    break;
+      case BELVU_SCHEME_GIBSON:   colorSchemeGibson(bc);    break;
+      case BELVU_SCHEME_CGP:      colorSchemeCGP(bc);	    break;
+      case BELVU_SCHEME_CGPH:     colorSchemeCGPH(bc);	    break;
+      case BELVU_SCHEME_NONE:     colorSchemeEmpty(bc);	    break;
+      case BELVU_SCHEME_CUSTOM:   colorSchemeCustom(bc);    break;
+      
+      default: 
+	g_warning("Program error: unrecognised color scheme '%d'.\n", bc->residueScheme);
+	break;
+    }
+}
+
+
+/* This should be called when the color scheme has changed. It updates the
+ * colors according to the active scheme. */
+void updateSchemeColors(BelvuContext *bc)
+{
+  /* Set the color scheme if coloring by conservation or if applying a 
+   * threshold when coloring by residue */
+  if (colorByConservation(bc) || colorByResId(bc))
+    setConsSchemeColors(bc);
+}
+
+
+/* Return 1 if c1 has priority over c2, 0 otherwise */
+static int colorPriority(BelvuContext *bc, int c1, int c2) 
+{
+  if (c2 == WHITE) 
+    return 1;
+  
+  if (c2 == *getConsColor(bc, CONS_LEVEL_MAX, FALSE))
+    return 0;
+  
+  if (c2 == *getConsColor(bc, CONS_LEVEL_LOW, FALSE)) 
+    {
+      if (c1 ==*getConsColor(bc, CONS_LEVEL_LOW, FALSE)) 
+        return 0;
+      else 
+        return 1;
+    }
+  
+  if (c2 == *getConsColor(bc, CONS_LEVEL_MID, FALSE)) 
+    {
+      if (c1 == *getConsColor(bc, CONS_LEVEL_MAX, FALSE)) 
+        return 1;
+      else
+        return 0;
+    }
+  
+  g_critical("Program error: invalid background colour '%s' when calculating color priority.\n", colorNames[c2]);
+  
+  return 0 ;
+}
+
+
+/* This is called when the color scheme type has been changed to 'by conservation'. It updates
+ * the colors according to the active color scheme. */
+void setConsSchemeColors(BelvuContext *bc)
+{
+  int i, j, k, l, colornr, simCount, n;
+  double id, maxid;
+  
+  if (!bc->conservCount) 
+    initConservMtx(bc);
+  
+  int totalNumSeqs = countResidueFreqs(bc);
+  
+  for (i = 0; i < bc->maxLen; ++i)
+    {
+      for (k = 1; k < 21; ++k)
+	{
+	  bc->colorMap[k][i] = WHITE;
+	}
+    }
+  
+  for (i = 0; i < bc->maxLen; ++i) 
+    {
+      maxid = -100.0;
+    
+      for (k = 1; k < 21; k++) 
+	{
+	  if (colorBySimilarity(bc)) 
+	    {
+              /* Convert counts to similarity counts */
+              simCount = 0;
+              for (j = 1; j < 21; j++) 
+                {
+                  /* Get the blosum comparison score of the two residues */
+                  int score_k_vs_j = BLOSUM62[j-1][k-1];
+                  
+                  /* This comparison score applies for each occurance of k vs
+                   * each occurance of j, e.g. if there are 3 occurances of k 
+                   * and 2 occurances of j, we have:
+                   *   k1 vs j1 = score_k_vs_j
+                   *   k1 vs j2 = score_k_vs_j
+                   *   k2 vs j1 = score_k_vs_j
+                   *   k2 vs j2 = score_k_vs_j
+                   *   k3 vs j1 = score_k_vs_j
+                   *   k4 vs j2 = score_k_vs_j
+                   * 
+                   * i.e. score_k_vs_j occurs (count_k * count_j) times.
+                   */
+                  int count_k = bc->conservCount[k][i];
+                  int count_j = bc->conservCount[j][i];
+
+                  /* Don't compare the same amino acid against itself, i.e. if
+                   * there are three occurances of k then we compare:
+                   *   k1 vs k2 
+                   *   k1 vs k3 
+                   * 
+                   * but NOT
+                   *   k1 vs k1
+                   *
+                   * so in this case score_k_vs_j occurs (count_k * (count_k - 1)) times.
+                   */
+                  if (j == k) 
+                    --count_k;
+
+                  simCount += count_k * count_j * score_k_vs_j;
+                }
+	    
+              if (bc->ignoreGapsOn) 
+                n = bc->conservResidues[i]; /* total number of residues in this column */
+              else 
+                n = totalNumSeqs;  /* total number of sequences */
+              
+              if (n < 2)
+                {
+                  id = 0.0;
+                }
+              else 
+                {
+                  /* Divide the similarity count by the total number of comparisons 
+                   * made for each column; we made n * (n - 1) comparisons because
+                   * we compared each of the n residues in the column to each other
+                   * residue in the column except itself. */
+                  id = (double)simCount / (n * (n-1));
+                }
+              
+              /* printf("%d, %c:  simCount= %d, id= %.2f\n", i, b2a[k], simCount, id); */
+	    
+              /* Colour this residue if it is above the %ID threshold */
+              if (id > bc->lowSimCutoff) 
+                {
+                  /* Choose the colour based on the 3 specified levels */
+                  if (id > bc->maxSimCutoff) 
+                    colornr = *getConsColor(bc, CONS_LEVEL_MAX, FALSE);
+                  else if (id > bc->midSimCutoff) 
+                    colornr = *getConsColor(bc, CONS_LEVEL_MID, FALSE);
+                  else
+                    colornr = *getConsColor(bc, CONS_LEVEL_LOW, FALSE);
+                  
+                  /* Set the colour for this residue, unless it has already been
+                   * given a colour with a higher priority than this one (i.e. it
+                   * has already been marked as more conserved) */
+                  if (colorPriority(bc, colornr, bc->colorMap[k][i]))
+                    bc->colorMap[k][i] = colornr;
+	      
+                  /* Color all similar residues too; that is, any residue that has
+                   * a positive blosum score when compared to the current residue
+                   * should be coloured with same level of conservation in this 
+                   * column; again, we only set the colour if it doesn't already 
+                   * have a higher priority colour set on it. */
+                  for (l = 1; l < 21; l++) 
+                    {
+                      if (BLOSUM62[k-1][l-1] > 0 && colorPriority(bc, colornr, bc->colorMap[l][i])) 
+                        {
+                          /*printf("%d: %c -> %c\n", i, b2a[k], b2a[l]);*/
+                          bc->colorMap[l][i] = colornr;
+                        }
+                    }
+                }
+	    }
+	  else 
+	    {
+              /* We are colouring by %ID */
+              
+              /* First, get the %ID; this is the count of this residue divided
+               * by the total number of residues (or the total number of sequences,
+               * if we are including gaps). 
+               * If ignoring gaps but there is only one residue in this column
+               * then the ID takes into account the total number of sequences;
+               * I'm not sure why - perhaps because there are no other residues
+               * to compare it to; it seems a bit inconsistent, though. */
+              if (bc->ignoreGapsOn && bc->conservResidues[i] != 1)
+                id = (double)bc->conservCount[k][i]/bc->conservResidues[i];
+              else
+                id = (double)bc->conservCount[k][i]/totalNumSeqs;
+              
+              if (colorByResId(bc)) 
+                {
+                  /* We're colouring by residue type, but only colouring the residues
+                   * if their %ID is above the set threshold */
+                  if (id * 100.0 > bc->colorByResIdCutoff)
+                    bc->colorMap[k][i] = color[(unsigned char)(b2a[k])];
+                  else
+                    bc->colorMap[k][i] = WHITE;
+                }
+              else if (id > bc->lowIdCutoff) 
+                {
+                  /* We're colouring by conservation, using the %ID to determine
+                   * the colour according to the three thresholds: */
+                  if (id > bc->maxIdCutoff) 
+                    colornr = *getConsColor(bc, CONS_LEVEL_MAX, FALSE);
+                  else if (id > bc->midIdCutoff) 
+                    colornr = *getConsColor(bc, CONS_LEVEL_MID, FALSE);
+                  else
+                    colornr = *getConsColor(bc, CONS_LEVEL_LOW, FALSE);
+                  
+                  /* Set the colour in the array (to do: should this use 
+                   * colorPriority to check if it's already been set? At the moment
+                   * it overrides any previous (possibly better) colour set 
+                   * from a similar residue's result)  */
+                  bc->colorMap[k][i] = colornr;
+                  
+                  if (bc->consScheme == BELVU_SCHEME_ID_BLOSUM) 
+                    {
+                      /* Colour all similar residues too; that is, any residues
+                       * that have a positive blosum score when compared to the 
+                       * current residue should be given the same colour in this
+                       * column (unless a higher priority colour has already been
+                       * set). */
+                      for (l = 1; l < 21; l++) 
+                        {
+                          if (BLOSUM62[k-1][l-1] > 0 && colorPriority(bc, colornr, bc->colorMap[l][i])) 
+                            {
+                              /*printf("%d: %c -> %c\n", i, b2a[k], b2a[l]);*/
+                              bc->colorMap[l][i] = colornr;
+                            }
+                        }
+                    }
+                }
+	    }
+	
+	  if (id > maxid) 
+	    {
+	      maxid = id;
+	    }
+	}
+      
+      bc->conservation[i] = maxid;
+    }
+}
+
+
+void initMarkupColors(void)
+{
+  markupColor[(unsigned char)'0'] = DARKBLUE;
+  markupColor[(unsigned char)'1'] = BLUE;
+  markupColor[(unsigned char)'2'] = MIDBLUE;
+  markupColor[(unsigned char)'3'] = LIGHTBLUE;
+  markupColor[(unsigned char)'4'] = VIOLET;
+  markupColor[(unsigned char)'5'] = PALEBLUE;
+  markupColor[(unsigned char)'6'] = PALECYAN;
+  markupColor[(unsigned char)'7'] = CYAN;
+  markupColor[(unsigned char)'8'] = CYAN;
+  markupColor[(unsigned char)'9'] = CYAN;
+  markupColor[(unsigned char)'A'] = markupColor[(unsigned char)'a'] = WHITE;
+  markupColor[(unsigned char)'B'] = markupColor[(unsigned char)'b'] = RED;
+  markupColor[(unsigned char)'C'] = markupColor[(unsigned char)'c'] = PALEYELLOW;
+  markupColor[(unsigned char)'D'] = markupColor[(unsigned char)'d'] = WHITE;
+  markupColor[(unsigned char)'E'] = markupColor[(unsigned char)'e'] = RED;
+  markupColor[(unsigned char)'F'] = markupColor[(unsigned char)'f'] = WHITE;
+  markupColor[(unsigned char)'G'] = markupColor[(unsigned char)'g'] = DARKGREEN;
+  markupColor[(unsigned char)'H'] = markupColor[(unsigned char)'h'] = DARKGREEN;
+  markupColor[(unsigned char)'I'] = markupColor[(unsigned char)'i'] = DARKGREEN;
+  markupColor[(unsigned char)'J'] = markupColor[(unsigned char)'j'] = WHITE;
+  markupColor[(unsigned char)'K'] = markupColor[(unsigned char)'k'] = WHITE;
+  markupColor[(unsigned char)'L'] = markupColor[(unsigned char)'l'] = WHITE;
+  markupColor[(unsigned char)'M'] = markupColor[(unsigned char)'m'] = WHITE;
+  markupColor[(unsigned char)'N'] = markupColor[(unsigned char)'n'] = WHITE;
+  markupColor[(unsigned char)'O'] = markupColor[(unsigned char)'o'] = WHITE;
+  markupColor[(unsigned char)'P'] = markupColor[(unsigned char)'p'] = WHITE;
+  markupColor[(unsigned char)'Q'] = markupColor[(unsigned char)'q'] = WHITE;
+  markupColor[(unsigned char)'R'] = markupColor[(unsigned char)'r'] = WHITE;
+  markupColor[(unsigned char)'S'] = markupColor[(unsigned char)'s'] = YELLOW;
+  markupColor[(unsigned char)'T'] = markupColor[(unsigned char)'t'] = YELLOW;
+  markupColor[(unsigned char)'V'] = markupColor[(unsigned char)'v'] = WHITE;
+  markupColor[(unsigned char)'U'] = markupColor[(unsigned char)'u'] = WHITE;
+  markupColor[(unsigned char)'W'] = markupColor[(unsigned char)'w'] = WHITE;
+  markupColor[(unsigned char)'X'] = markupColor[(unsigned char)'x'] = WHITE;
+  markupColor[(unsigned char)'Y'] = markupColor[(unsigned char)'y'] = WHITE;
+  markupColor[(unsigned char)'Z'] = markupColor[(unsigned char)'z'] = NOCOLOR;
+}
+
+
+/* Save the current color-by-residue color scheme */
+void saveResidueColorScheme(BelvuContext *bc, FILE *fil)
+{
+  if (!fil) 
+    return;
+  
+  int i = 1;
+  for (i = 1; i < 21; i++)
+    {
+      fprintf(fil, "%c %s\n", b2a[i], colorNames[color[(unsigned char)(b2a[i])]]);
+    }
+  
+  fclose(fil);
+}
+
+
+/* This reads in residue colors from the given file and places them into
+ * the given array, which is typically one of the active color scheme arrays
+ * 'color' or 'markupColor'. 
+ * If storeCustomColors is true, then it also saves the colors to the 'customColor'
+ * array so that they can be retrieved later (because 'color' gets overwritten
+ * with the current colors every time the user toggles between different color
+ * schemes). */
+void readResidueColorScheme(BelvuContext *bc, FILE *fil, int *colorarr, const gboolean storeCustomColors)
+{
+  if (!fil) 
+    return;
+
+  char *cp=NULL, line[MAXLINE+1], setColor[MAXLINE+1];
+  unsigned char c ;
+  int i=0, colornr=0;
+  
+  while (!feof(fil)) 
+    {
+      if (!fgets (line, MAXLINE, fil)) 
+	break;
+    
+      /* remove newline */
+      if ((cp = strchr(line, '\n'))) 
+        *cp = 0 ;
+    
+      /* Parse color of organism in tree 
+         Format:  #=OS BLUE D. melanogaster*/
+      if (!strncmp(line, "#=OS ", 5)) 
+        {
+          cp = line+5;
+          sscanf(cp, "%s", setColor);
+          
+          for (colornr = -1, i = 0; i < NUM_TRUECOLORS; i++)
+            {
+              if (!strcasecmp(colorNames[i], setColor)) 
+                colornr = i;
+            }
+          
+          if (colornr == -1) 
+            {
+              g_warning("Unrecognized color: %s, using black instead.\n", setColor);
+              colornr = BLACK;
+            }
+          
+          while(*cp == ' ') cp++;
+          while(*cp != ' ') cp++;
+          while(*cp == ' ') cp++;
+          
+          /* Find organism and set its colour */
+          ALN aln;
+          initAln(&aln);
+          aln.organism = cp;
+          
+          int ip = 0;
+          if (!alnArrayFind(bc->organismArr, &aln, &ip, organism_order))
+            g_critical("Cannot find organism \"%s\", specified in color code file. Hope that's ok\n", aln.organism);
+          else
+            g_array_index(bc->organismArr, ALN*, ip)->color = colornr;
+        }
+      
+      /* Ignore comments */
+      if (*line == '#') 
+        continue;
+      
+      /* Parse character colours */
+      if (sscanf(line, "%c%s", &c, setColor) == 2) 
+        {
+          c = toupper(c);
+          for (colornr = -1, i = 0; i < NUM_TRUECOLORS; i++)
+            {
+              if (!strcasecmp(colorNames[i], setColor)) 
+                colornr = i;
+            }
+          
+          if (colornr == -1) 
+            {
+              g_warning("Unrecognized color: %s\n", setColor);
+              colornr = 0;
+            }
+          
+          colorarr[(unsigned char)(c)] = colornr;
+          
+          if (c > 64 && c <= 96)
+            colorarr[(unsigned char)(c+32)] = colorarr[(unsigned char)(c)];
+          else if (c > 96 && c <= 128)
+            colorarr[(unsigned char)(c-32)] = colorarr[(unsigned char)(c)];
+        }
+    }
+  
+  fclose(fil);
+  
+  /* Store the custom colors */
+  saveCustomColors(bc);
+}
+
+
+/* Utility function to get the color display name for a color number */
+const char* getColorNumName(const int colorNum)
+{
+  g_assert(colorNum < NUM_TRUECOLORS);
+  return colorNames[colorNum];
+}
+
+/* Utility function to get the file format name for a format id */
+const char* getFileFormatString(const int formatId)
+{
+  g_assert(formatId < BELVU_NUM_FILE_FORMATS);
+  return fileFormatNames[formatId];
+}
+
+
+int* getConsPrintColor(BelvuContext *bc, const BelvuConsLevel consLevel, const gboolean foreground)
+{
+  int *result = &bc->lowbgPrintColor;
+
+  switch (consLevel)
+    {
+      case CONS_LEVEL_MAX:
+        result = foreground ? &bc->maxfgPrintColor : &bc->maxbgPrintColor;
+        break;
+        
+      case CONS_LEVEL_MID:
+        result = foreground ? &bc->midfgPrintColor : &bc->midbgPrintColor;
+        break;
+        
+      case CONS_LEVEL_LOW:
+        result = foreground ? &bc->lowfgPrintColor : &bc->lowbgPrintColor;
+        break;
+
+      default:
+        g_critical("Program error: invalid conservation level '%d' when getting conservation colour.\n", consLevel);
+        break;
+    };
+
+  return result;
+}
+
+
+/* Utility to get foreground/background the colour number for the given
+ * conservation level. Returns a pointer to the value in the context. */
+int* getConsColor(BelvuContext *bc, const BelvuConsLevel consLevel, const gboolean foreground)
+{
+  if (bc->printColorsOn)
+    return getConsPrintColor(bc, consLevel, foreground);
+
+  int *result = &bc->lowbgColor;
+
+  switch (consLevel)
+    {
+      case CONS_LEVEL_MAX:
+        result = foreground ? &bc->maxfgColor : &bc->maxbgColor;
+        break;
+        
+      case CONS_LEVEL_MID:
+        result = foreground ? &bc->midfgColor : &bc->midbgColor;
+        break;
+        
+      case CONS_LEVEL_LOW:
+        result = foreground ? &bc->lowfgColor : &bc->lowbgColor;
+        break;
+
+      default:
+        g_critical("Program error: invalid conservation level '%d' when getting conservation colour.\n", consLevel);
+        break;
+    };
+
+  return result;
+}
+
+
+/* Set whether the currently-selected sequence should be excluded
+ * from the conservation colours calculations */
+void setExcludeFromConsCalc(BelvuContext *bc, const gboolean exclude)
+{
+  if (!bc->selectedAln) 
+    {
+      g_critical("Please select a sequence first.\n");
+      return;
+  }
+  
+  if ((exclude && bc->selectedAln->nocolor) ||
+     (!exclude && !bc->selectedAln->nocolor))
+    {
+      /* Nothing to do */
+      return;
+    }
+  
+  /* Store orignal state in the nocolor field:
+   1 = normal sequence
+   2 = markup line
+   
+   This is needed to restore markup lines (nocolor lines are always markups)
+   */
+  
+  if (exclude) 
+    {
+      if (bc->selectedAln->markup)
+        bc->selectedAln->nocolor = 2;
+      else
+        bc->selectedAln->nocolor = 1;
+      
+      bc->selectedAln->markup = 1;
+    }
+  else 
+    {
+      if (bc->selectedAln->nocolor == 1) 
+        bc->selectedAln->markup = 0;
+      
+      bc->selectedAln->nocolor = 0;
+    }
+}
+
+/***********************************************************
+ *		          Arrays			   *
+ ***********************************************************/
+
+/* Finds Entry s from an array of ALNs  a
+ * sorted in ascending order of order()
+ * If found, returns TRUE and sets *ip
+ * if not, returns FALSE and sets *ip one step left
+ */
+gboolean alnArrayFind(GArray *a, void *s, int *ip, int (* orderFunc)(gconstpointer, gconstpointer))
+{
+  int ord;
+  int i = 0 , j = a->len, k;
+
+  if (!j || (ord = orderFunc(&s, &g_array_index(a, ALN*, 0))) < 0)
+    { 
+      if (ip)
+	*ip = -1; 
+      return FALSE;
+    }   /* not found */
+
+  if (ord == 0)
+    { 
+      if (ip)
+	*ip = 0;
+      return TRUE;
+    }
+
+  if ((ord = orderFunc(&s, &g_array_index(a, ALN*, --j))) > 0)
+    {
+      if (ip)
+	*ip = j; 
+      return FALSE;
+    }
+  
+  if (ord == 0)
+    { 
+      if (ip)
+	*ip = j;
+      return TRUE;
+    }
+
+  while (TRUE)
+    { 
+      k = i + ((j-i) >> 1) ; /* midpoint */
+
+      if ((ord = orderFunc(&s, &g_array_index(a, ALN*, k))) == 0)
+	{ 
+          if (ip)
+	    *ip = k; 
+	  return TRUE;
+	}
+      
+      if (ord > 0) 
+	(i = k);
+      else
+	(j = k) ;
+      
+      if (i == (j-1) )
+        break;
+    }
+  
+  if (ip)
+    *ip = i ;
+  
+  return FALSE;
+}
+
+
+/* As alnArrayFind, but for an array of BootstrapGroup*'s */
+gboolean bsArrayFind(GArray *a, void *s, int *ip, int (* orderFunc)(gconstpointer, gconstpointer))
+{
+  int ord;
+  int i = 0 , j = a->len, k;
+  
+  if (!j || (ord = orderFunc(&s, &g_array_index(a, BootstrapGroup*, 0))) < 0)
+    { 
+      if (ip)
+	*ip = -1; 
+      return FALSE;
+    }   /* not found */
+  
+  if (ord == 0)
+    { 
+      if (ip)
+	*ip = 0;
+      return TRUE;
+    }
+  
+  if ((ord = orderFunc(&s, &g_array_index(a, BootstrapGroup*, --j))) > 0)
+    {
+      if (ip)
+	*ip = j; 
+      return FALSE;
+    }
+  
+  if (ord == 0)
+    { 
+      if (ip)
+	*ip = j;
+      return TRUE;
+    }
+  
+  while (TRUE)
+    { 
+      k = i + ((j-i) >> 1) ; /* midpoint */
+      
+      if ((ord = orderFunc(&s, &g_array_index(a, BootstrapGroup*, k))) == 0)
+	{ 
+          if (ip)
+	    *ip = k; 
+	  return TRUE;
+	}
+      
+      if (ord > 0) 
+	(i = k);
+      else
+	(j = k) ;
+      
+      if (i == (j-1) )
+        break;
+    }
+  
+  if (ip)
+    *ip = i ;
+  
+  return FALSE;
+}
+
+
+/* Linear search for an exact matching sequence name and coordinates,
+ typically to find back highlighted row after sorting 
+ */
+gboolean alignFind(GArray *alignArr, ALN *obj, int *idx)
+{
+  for (*idx = 0; *idx < (int)alignArr->len; (*idx)++) 
+    {
+      ALN *currentAln = g_array_index(alignArr, ALN*, *idx);
+      
+      if (alphaorder(&currentAln, &obj) == 0)
+        return TRUE;
+    }
+
+  return FALSE;
+}
+
+
+/* Set the ->nr field in Align array in ascending order */
+void arrayOrder(GArray *alignArr)
+{
+  int i = 0;
+  
+  for (i = 0; i < (int)alignArr->len; ++i) 
+    {
+      ALN *alnp = g_array_index(alignArr, ALN*, i);
+      alnp->nr = i + 1;
+    }
+}
+
+
+///* Set the ->nr field in Align array in ascending order with increments of 10
+//   Necessary if one wants to insert items.
+// */
+//static void arrayOrder10(GArray *alignArr)
+//{
+//  int i;
+//
+//  for (i = 0; i < alignArr->len; ++i) 
+//    g_array_index(alignArr, ALN*, i)->nr = (i+1)*10;
+//}
+
+
+
+/* Separate markuplines to another array before resorting
+ */
+void separateMarkupLines(BelvuContext *bc)
+{
+  bc->markupAlignArr = g_array_sized_new(FALSE, FALSE, sizeof(ALN*), 100);
+  
+  arrayOrder(bc->alignArr);
+  
+  int i = 0;
+  for (i = 0; i < (int)bc->alignArr->len; ) 
+    {
+      ALN *alnp = g_array_index(bc->alignArr, ALN*, i);
+      
+      if (alnp->markup) 
+        {
+          /* printf ("Moving line %d, %s/%d-%d, nseq=%d\n", i, alnp->name, alnp->start, alnp->end, nseq);*/
+          g_array_append_val(bc->markupAlignArr, alnp);
+          g_array_sort(bc->markupAlignArr, alphaorder);
+          g_array_remove_index(bc->alignArr, i);
+        }
+      else
+        {
+          ++i;
+        }
+    }
+  
+  arrayOrder(bc->alignArr);
+}
+
+
+/* Reinsert markuplines after mother sequence or if orphan at bottom */
+void reInsertMarkupLines(BelvuContext *bc)
+{
+  int i, j;
+  char tmpname[MAXNAMESIZE+1], *cp;
+  
+  g_array_sort(bc->alignArr, nrorder); /* to do: can we move this out of the loop ? */
+
+  for (i = bc->markupAlignArr->len - 1; i >=0 ; --i)
+    {
+      ALN *alnp = g_array_index(bc->markupAlignArr, ALN*, i);
+
+      /* Insert the markup line after the non-markup entry with the same name
+       * minus the postfix (after a space); or at the end of the array if none
+       * exists. */
+      strcpy(tmpname, alnp->name);
+      
+      if ((cp = strchr(tmpname, ' ')))
+        *cp = 0;
+      
+      for (j = 0; j < (int)bc->alignArr->len; ++j)
+        {
+          if (!strcmp(tmpname, g_array_index(bc->alignArr, ALN*, j)->name))
+            break;
+        }
+
+      if (j >= (int)bc->alignArr->len)
+	g_array_append_val(bc->alignArr, alnp);
+      else
+	g_array_insert_val(bc->alignArr, j + 1, alnp);
+    }
+
+  arrayOrder(bc->alignArr);
+}
+
+
+int strcmp_(gconstpointer xIn, gconstpointer yIn)
+{
+  const char *x = *((const char**)xIn);
+  const char *y = *((const char**)yIn);
+  
+  int retval = strcmp(x, y);
+  return retval;
+}
+
+
+GArray *copyAlignArray(GArray *inputArr)
+{
+  GArray *result = g_array_sized_new(FALSE, FALSE, sizeof(char*), inputArr->len);
+  
+  int i = 0;
+  for ( ; i < (int)inputArr->len; ++i)
+    {
+      ALN *inputAln = g_array_index(inputArr, ALN*, i);
+      ALN *destAln = createEmptyAln();
+      alncpy(destAln, inputAln); /* shallow copy; doesn't copy sequence string */
+      
+      g_array_append_val(result, destAln);
+
+      /* Duplicate the sequence string, if not null */
+      if (alnGetSeq(inputAln))
+        destAln->sequenceStr = g_string_new(alnGetSeq(inputAln));
+      else
+        destAln->sequenceStr = NULL;
+    }
+  
+  return result;
+}
+
+
+void columnCopy(GArray *alignArrDest, int destIdx, GArray *alignArrSrc, int srcIdx)
+{
+  int i;
+  
+  for (i = 0; i < (int)alignArrSrc->len; ++i)
+    {
+      ALN *srcAln = g_array_index(alignArrSrc, ALN*, i);
+      ALN *destAln = g_array_index(alignArrDest, ALN*, i);
+
+      char *srcSeq = alnGetSeq(srcAln);
+      char *destSeq = alnGetSeq(destAln);
+      
+      if (srcSeq && destSeq && destIdx < alnGetSeqLen(destAln) && srcIdx < alnGetSeqLen(srcAln))
+        destSeq[destIdx] = srcSeq[srcIdx];
+    }
+}
+
+
+
+/***********************************************************
+ *		          Context			   *
+ ***********************************************************/
+
+/* Create the colors that belvu will use for various specific purposes */
+void createBelvuColors(BelvuContext *bc)
+{
+  /* Initialise the array with empty BlxColor structs */
+  bc->defaultColors = g_array_sized_new(FALSE, FALSE, sizeof(BlxColor), BELCOLOR_NUM_COLORS);
+  int i = BELCOLOR_MIN + 1;
+  
+  for ( ; i < BELCOLOR_NUM_COLORS; ++i)
+    {
+      BlxColor *blxColor = new BlxColor;
+      blxColor->name = NULL;
+      blxColor->desc = NULL;
+      g_array_append_val(bc->defaultColors, *blxColor);
+    }
+  
+  createBlxColor(bc->defaultColors, BELCOLOR_BACKGROUND, "Background", "Background color", BLX_WHITE, BLX_WHITE, "#bdbdbd", NULL);
+  createBlxColor(bc->defaultColors, BELCOLOR_ALIGN_TEXT, "Text color for alignments", "Text color for alignments", BLX_BLACK, BLX_BLACK, NULL, NULL);
+  createBlxColor(bc->defaultColors, BELCOLOR_COLUMN_HIGHLIGHT, "Highlight color for selected column", "Highlight color for selected column",  "#dddddd", BLX_BLACK, NULL, NULL);
+  
+  /* Trees */
+  createBlxColor(bc->defaultColors, BELCOLOR_TREE_BACKGROUND, "Tree background", "Tree background color", BLX_WHITE, BLX_WHITE, NULL, NULL);
+  createBlxColor(bc->defaultColors, BELCOLOR_TREE_LINE, "Default tree line color", "Default tree line color", BLX_BLACK, BLX_BLACK, NULL, NULL);
+  createBlxColor(bc->defaultColors, BELCOLOR_TREE_TEXT, "Default tree text color", "Default tree text color", BLX_BLACK, BLX_BLACK, NULL, NULL);
+  createBlxColor(bc->defaultColors, BELCOLOR_TREE_BOOTSTRAP, "Tree boostrap line color", "Tree boostrap line color", BLX_BLUE, BLX_BLUE, NULL, NULL);
+  
+  /* Conservation plot */
+  createBlxColor(bc->defaultColors, BELCOLOR_CONS_PLOT, "Line color of the conservation plot", "Line color of the conservation plot", BLX_BLACK, BLX_BLACK, NULL, NULL);
+  createBlxColor(bc->defaultColors, BELCOLOR_CONS_PLOT_AVG, "Average-conservation line color on the conservation profile", "Average-conservation line color on the conservation profile", BLX_RED, BLX_GREY, NULL, NULL);
+  createBlxColor(bc->defaultColors, BELCOLOR_CONS_PLOT_SCALE, "Scale color for the conservation profile", "Scale color for the conservation profile", BLX_DARK_GREY, BLX_DARK_GREY, NULL, NULL);
+}
+
+
+/* Create the context, which contains all program-wide variables */
+BelvuContext* createBelvuContext()
+{
+  BelvuContext *bc = new BelvuContext;
+  
+  bc->belvuWindow = NULL;
+  bc->spawnedWindows = NULL;
+  bc->belvuTree = NULL;
+  bc->belvuAlignment = NULL;
+  bc->consPlot = NULL;
+  bc->orgsWindow = NULL;
+  
+  bc->defaultCursor = NULL; /* get from gdkwindow once it is shown */
+  bc->removeSeqsCursor = NULL ;
+  bc->busyCursor = NULL ;
+
+  bc->defaultColors = NULL;
+  
+  bc->alignArr = g_array_sized_new(FALSE, FALSE, sizeof(ALN*), 100);
+  bc->organismArr = g_array_sized_new(FALSE, FALSE, sizeof(ALN*), 100);
+  bc->markupAlignArr = NULL;
+  bc->bootstrapGroups = NULL;
+  
+  bc->selectedAln = NULL;
+  bc->highlightedAlns = NULL;
+  
+  bc->mainTree = NULL;
+  bc->treeBestBalancedNode = NULL;
+  
+  bc->treeReadDistancesPipe = NULL;
+  
+  bc->IN_FORMAT = MUL;
+  bc->maxScoreLen = 0;
+  bc->alignYStart = 0;
+  bc->treebootstraps = 0; 
+  bc->maxLen = 0;
+  bc->maxTreeWidth = 0;
+  bc->maxNameLen = 0;   
+  bc->maxStartLen = 0; 
+  bc->maxEndLen = 0; 
+  bc->maxScoreLen = 0; 
+  bc->selectedCol = 0;
+  bc->highlightedCol = 0;
+  
+  bc->maxfgColor = DEFAULT_MAX_FG_COLOR;
+  bc->midfgColor = DEFAULT_MID_FG_COLOR,
+  bc->lowfgColor = DEFAULT_LOW_FG_COLOR;
+  bc->maxbgColor = DEFAULT_MAX_BG_COLOR;
+  bc->midbgColor = DEFAULT_MID_BG_COLOR;
+  bc->lowbgColor = DEFAULT_LOW_BG_COLOR;
+  bc->maxfgPrintColor = DEFAULT_MAX_FG_PRINT_COLOR;
+  bc->midfgPrintColor = DEFAULT_MID_FG_PRINT_COLOR,
+  bc->lowfgPrintColor = DEFAULT_LOW_FG_PRINT_COLOR;
+  bc->maxbgPrintColor = DEFAULT_MAX_BG_PRINT_COLOR;
+  bc->midbgPrintColor = DEFAULT_MID_BG_PRINT_COLOR;
+  bc->lowbgPrintColor = DEFAULT_LOW_BG_PRINT_COLOR;
+  
+  bc->schemeType = BELVU_SCHEME_TYPE_CONS;
+  bc->residueScheme = BELVU_SCHEME_ERIK;
+  bc->consScheme = BELVU_SCHEME_BLOSUM;
+  
+  bc->treeMethod = NJ;
+  bc->treeDistCorr = SCOREDIST;
+  bc->treePickMode = NODESWAP;
+  
+  bc->sortType = BELVU_UNSORTED;
+  
+  bc->annotationList = NULL;
+  
+  bc->treeBestBalance = 0.0;
+  bc->treeBestBalance_subtrees = 0.0;
+  bc->tree_y = 0.3;
+  bc->lowIdCutoff = DEFAULT_LOW_ID_CUTOFF;
+  bc->midIdCutoff = DEFAULT_MID_ID_CUTOFF;
+  bc->maxIdCutoff = DEFAULT_MAX_ID_CUTOFF;
+  bc->lowSimCutoff = DEFAULT_LOW_SIM_CUTOFF;
+  bc->midSimCutoff = DEFAULT_MID_SIM_CUTOFF;
+  bc->maxSimCutoff = DEFAULT_MAX_SIM_CUTOFF;
+  bc->colorByResIdCutoff = 20.0;
+  bc->mksubfamilies_cutoff = 0.0;
+  bc->treeScale = DEFAULT_TREE_SCALE_CORR;
+  bc->treeLineWidth = 0.3;
+  
+  bc->gapChar = '.';
+  bc->saveSeparator = '/';
+  strcpy(bc->treeDistString, SCOREDISTstr);
+  strcpy(bc->treeMethodString, NJstr);
+  bc->Title[0] = '\0';
+  bc->saveFormat = BELVU_FILE_MUL;
+  bc->fileName = NULL;
+  bc->dirName = NULL;
+  bc->organismLabel[0] = 'O';
+  bc->organismLabel[1] = 'S';   
+  bc->organismLabel[2] = '\0'; 
+  
+  bc->conservCount = NULL;
+  bc->colorMap = NULL;
+  bc->conservResidues = NULL;
+  bc->conservation = NULL;
+  
+  bc->treeCoordsOn = TRUE;
+  bc->treeReadDistancesOn = FALSE;
+  bc->treePrintDistances = FALSE;
+  bc->penalize_gaps = FALSE;
+  bc->stripCoordTokensOn = TRUE;
+  bc->saveCoordsOn = TRUE;
+  bc->displayScores = FALSE;
+  bc->outputBootstrapTrees = FALSE;
+  bc->treebootstrapsDisplay = FALSE;
+  bc->treeColorsOn = TRUE;
+  bc->treeShowOrganism = TRUE;
+  bc->treeShowBranchlen = FALSE;
+  bc->matchFooter = FALSE;
+  bc->saved = TRUE;
+  bc->ignoreGapsOn = FALSE;
+  bc->colorByResIdOn = FALSE;
+  bc->rmEmptyColumnsOn = TRUE;
+  bc->lowercaseOn = FALSE;
+  bc->removingSeqs = FALSE;
+  bc->displayColors = TRUE;
+  bc->haveCustomColors = FALSE;
+  bc->printColorsOn = FALSE;
+  bc->highlightOrthologs = FALSE;
+  bc->useWWWFetch = FALSE;
+  bc->initTree = FALSE;
+  bc->onlyTree = FALSE;
+  
+  /* Null out all the entries in the dialogs list */
+  int dialogId = 0;
+  for ( ; dialogId < BELDIALOG_NUM_DIALOGS; ++dialogId)
+    {
+      bc->dialogList[dialogId] = NULL;
+    }
+  
+  return bc;
+}
+
+
+/* Destroy the context */
+void destroyBelvuContext(BelvuContext **bc)
+{
+  if (bc && *bc)
+    {
+    if ((*bc)->alignArr)
+      g_array_unref((*bc)->alignArr);
+    
+    if ((*bc)->organismArr)
+      g_array_unref((*bc)->organismArr);
+    
+    if ((*bc)->markupAlignArr)
+      g_array_unref((*bc)->markupAlignArr);
+    
+    if ((*bc)->bootstrapGroups)
+      g_array_unref((*bc)->bootstrapGroups);
+    
+    delete *bc;
+    *bc = NULL;
+    }
+}
+
+
+/***********************************************************
+ *                           Utilities                     *
+ ***********************************************************/
+
+/* Returns a string which is the name of the Blixem application. */
+const char *belvuGetAppName(void)
+{
+  return BELVU_TITLE ;
+}
+
+/* Returns a string which is the prefix to use for window titles. */
+const char *belvuGetTitlePrefix(BelvuContext *bc)
+{
+  return bc->abbrevTitle ? BELVU_PREFIX_ABBREV : BELVU_PREFIX ;
+}
+
+/* Returns a copyright string for the Blixem application. */
+const char *belvuGetCopyrightString(void)
+{
+  return BELVU_COPYRIGHT_STRING ;
+}
+
+/* Returns the Blixem website URL. */
+const char *belvuGetWebSiteString(void)
+{
+  return BELVU_WEBSITE_STRING ;
+}
+
+/* Returns a comments string for the Belvu application. Note that unlike the const
+ * functions, this one allocates a new string which must be free'd by the caller */
+const char *belvuGetCommentsString(void)
+{
+  char *result = g_strdup_printf("%s\n%s\n%s %s\n\n%s\n", 
+                                 BELVU_TITLE_STRING, 
+                                 gbtools::UtilsGetVersionTitle(),
+                                 UT_COMPILE_PHRASE, 
+                                 UT_MAKE_COMPILE_DATE(), 
+                                 AUTHOR_TEXT);
+
+  return result;
+  
+}
+
+/* Returns a license string for the belvu application. */
+const char *belvuGetLicenseString(void)
+{
+  return BELVU_LICENSE_STRING ;
+}
+
+/* Returns a string representing the Version/Release/Update of the Blixem code. */
+const char *belvuGetVersionString(void)
+{
+  return BELVU_VERSION_STRING ;
+}
+
+/* Utility to return the sequence data in the given alignment; returns null if
+ * not set. */
+char* alnGetSeq(ALN *aln)
+{
+  return (aln && aln->sequenceStr ? aln->sequenceStr->str : NULL);
+}
+
+
+/* Utility to return the length sequence data in the given alignment; returns
+ * 0 if not set. */
+int alnGetSeqLen(ALN *aln)
+{
+  return (aln && aln->sequenceStr ? aln->sequenceStr->len : 0);
+}
+
+
+/* This function just returns the value in the b2a array at the given index */
+char b2aIndex(const int idx)
+{
+  return b2a[idx];
+}
+
+
+void drawText(GtkWidget *widget, GdkDrawable *drawable, GdkGC *gc, const int x, const int y, const char *text, int *textWidth, int *textHeight)
+{
+  PangoLayout *layout = gtk_widget_create_pango_layout(widget, text);
+  
+  if (drawable)
+    gdk_draw_layout(drawable, gc, x, y, layout);
+  
+  /* Return the width and height of the layout, if requested */
+  pango_layout_get_size(layout, textWidth, textHeight);
+  
+  if (textWidth)
+    *textWidth /= PANGO_SCALE;
+  
+  if (textHeight)
+    *textHeight /= PANGO_SCALE;
+  
+  g_object_unref(layout);
+}
+
+
+/* Utility to draw the given integer as text. The text is right-aligned, so 
+ * the input x coord must be the RIGHTMOST EDGE of where you want the text. */
+void drawIntAsText(GtkWidget *widget, 
+                   GdkDrawable *drawable, 
+                   GdkGC *gc, 
+                   const int x, 
+                   const int y, 
+                   const int value)
+{
+  char *tmpStr = g_strdup_printf("%d", value);
+  PangoLayout *layout = gtk_widget_create_pango_layout(widget, tmpStr);
+  g_free(tmpStr);
+
+  int textWidth;
+  pango_layout_get_pixel_size(layout, &textWidth, NULL);
+
+  gdk_draw_layout(drawable, gc, x - textWidth, y, layout);
+  g_object_unref(layout);
+}
+
+
+/* Utility to draw the given double as text. The text is right-aligned, so 
+ * the input x coord must be the RIGHTMOST EDGE of where you want the text. */
+void drawDoubleAsText(GtkWidget *widget, 
+                      GdkDrawable *drawable, 
+                      GdkGC *gc, 
+                      const int x, 
+                      const int y, 
+                      const double value)
+{
+  char *tmpStr = g_strdup_printf("%.1f", value);
+  PangoLayout *layout = gtk_widget_create_pango_layout(widget, tmpStr);
+  g_free(tmpStr);
+  
+  int textWidth;
+  pango_layout_get_pixel_size(layout, &textWidth, NULL);
+  
+  gdk_draw_layout(drawable, gc, x - textWidth, y, layout);
+  g_object_unref(layout);
+}
+
+
+/* Calculate percent identity of two strings */
+double percentIdentity(char *s1, char *s2, const gboolean penalize_gaps)
+{
+    int n, id;
+
+    for (n = id = 0; *s1 && *s2; s1++, s2++) 
+      {
+	if (isGap(*s1) && isGap(*s2)) 
+          continue;
+        
+	if (isGap(*s1) || isGap(*s2))
+          {
+	    if (!penalize_gaps) 
+              continue;
+          }
+        
+	n++;
+	if (toupper(*s1) == toupper(*s2)) 
+          id++;
+      }
+
+    if (n)
+      return (double)id/n*100;
+    else
+      return 0.0;
+}
+
+
+/* Calculate score of two sequences */
+static double score(char *s1, char *s2, const gboolean penalize_gaps)
+{
+    double sc=0.0;
+
+    for (;*s1 && *s2; s1++, s2++) 
+      {
+	if (isGap(*s1) && isGap(*s2)) 
+          {
+	    continue;
+          }
+	else if (isGap(*s1) || isGap(*s2)) 
+          {
+	    if (penalize_gaps) sc -= 0.6;
+          }
+	else
+          {
+            int val1 = a2b[(unsigned char)(*s1)];
+            int val2 = a2b[(unsigned char)(*s2)];
+            
+            if (val1 > 0 && val2 > 0)
+              sc += (double) BLOSUM62[val1 - 1][val2 - 1];
+          }
+      }
+    
+    return sc;
+}
+
+
+gboolean isGap(char c) 
+{
+  if (c == '.' || c == '-' ||
+      c == '[' || c == ']' /* Collapse-control chars */ ) 
+    return TRUE;
+  else
+    return FALSE;
+}
+
+
+static gboolean isAlign(char c)
+{
+  if (isalpha(c) || isGap(c) || c == '*')
+    return TRUE;
+  else 
+    return FALSE;
+}
+
+
+int GCGchecksum(BelvuContext *bc, char *seq)
+{
+  int  
+  check = 0, 
+  count = 0, 
+  i=0;
+  
+  for (i = 0; i < bc->maxLen; ++i) 
+    {
+    ++count;
+    check += count * toupper((int) seq[i]);
+    
+    if (count == 57) 
+      count = 0;
+    }
+  
+  return (check % 10000);
+}
+
+
+int GCGgrandchecksum(BelvuContext *bc)
+{
+  int 
+  i=0,
+  grand_checksum=0;
+  
+  for(i=0; i < (int)bc->alignArr->len; ++i)
+    {
+      ALN *alnp = g_array_index(bc->alignArr, ALN*, i);
+      grand_checksum += GCGchecksum(bc, alnGetSeq(alnp));
+    }
+  
+  return (grand_checksum % 10000);
+}
+
+
+/* Read labels of highlighted sequence and spread them */
+void readLabels(BelvuContext *bc, FILE *fil)
+{
+  char *labelseq = (char*)g_malloc(bc->maxLen + 1); /* The raw sequence of labels */
+  char *label = (char*)g_malloc(bc->maxLen + 1);    /* The mapped sequence of labels, 1-maxlen */
+  char line[MAXLENGTH+1];
+  
+  /* read file */
+  char *cq = labelseq;
+  while (!feof (fil)) 
+    {
+      if (!fgets (line, MAXLENGTH, fil)) 
+        break;
+      
+      char *cp = line;
+      while (*cp) 
+        {
+          if (isalpha(*cp)) 
+            *cq++ = *cp;
+          cp++;
+        }
+    }
+
+  fclose(fil);
+  
+  /* Warn if seq too long, return if too short */
+  int seqlen = bc->selectedAln->end - bc->selectedAln->start + 1;
+  if ((int)strlen(labelseq) > seqlen)
+    {
+      g_critical("The sequence of labels is longer (%d) than the sequence (%d).\nHope that's ok\n",
+		 (int)strlen(labelseq), seqlen);
+    }
+  else if ((int)strlen(labelseq) < seqlen) 
+    {
+      g_critical("The sequence of labels is shorter (%d) than the sequence (%d).\nAborting\n",
+		 (int)strlen(labelseq), seqlen);
+      return;
+    }
+  
+  /* map labels to alignment */
+  int col = 0;
+  int seqpos = 0;
+  
+  for (col = 0, seqpos = 0; col < bc->maxLen; col++) 
+    {
+      label[col] = labelseq[seqpos];
+      const char *selectedSeq = alnGetSeq(bc->selectedAln);
+      
+      if (selectedSeq && isalpha(selectedSeq[col]) && labelseq[seqpos+1]) 
+        seqpos++;
+    }
+  
+  int row = 0;
+  for (row = 0; row < (int)bc->alignArr->len; ++row) 
+    {
+      ALN *alnrow = g_array_index(bc->alignArr, ALN*, row);
+      
+      for (col = 0; col < bc->maxLen; col++)
+        {
+          char *rowSeq = alnGetSeq(alnrow);
+          
+          if (rowSeq && isalpha(rowSeq[col]))
+            rowSeq[col] = label[col];
+        }
+    }
+  
+  g_free(labelseq);
+}
+
+/***********************************************************
+ *		          			   *
+ ***********************************************************/
+
+static void makeSegList(BelvuContext *bc, SEG **SegList, char *line)
+{
+  int n, i;
+  char *p, *linecopy;
+  SEG *seg, *prevseg=0;
+
+  /* Count coordinates - has to be multiple of 4 */
+  linecopy = (char*)g_malloc(strlen(line)+1);
+  strcpy(linecopy, line);
+  n = 0;
+  
+  if (atoi(strtok(linecopy, " "))) 
+    n++;;
+  
+  while ( (p = strtok(0, " ")) && atoi(p) ) 
+    n++;
+  
+  g_free(linecopy);
+    
+  if (!n || n % 4) 
+    g_error("Segments not multiple of 4 ints (%s)\n", line);
+
+  for (i = 0; i < n/4; i++) 
+    {
+      seg = (SEG *)g_malloc(sizeof(SEG));
+      if (prevseg) 
+        prevseg->next = seg;
+      else
+        *SegList = seg;
+      
+      prevseg = seg;
+
+      seg->qstart = atoi(i ? strtok(0, " ") : strtok(line, " "));
+      seg->qend = atoi(strtok(0, " "));
+      seg->start = atoi(strtok(0, " "));
+      seg->end = atoi(strtok(0, " "));
+      seg->next = NULL;
+    }
+
+  for (seg = *SegList; seg; seg = seg->next) 
+    {
+      DEBUG_OUT("%d %d %d %d\n", seg->qstart, seg->qend, seg->start, seg->end);
+
+      if (seg == *SegList && seg->qstart != 1)
+        g_error("Bad qstart: Must start on 1\n");
+
+      if (seg->qstart < 1 || seg->qstart > bc->maxLen)
+        g_error("Bad qstart: %d.  Range: 1-%d\n", seg->qstart, bc->maxLen);
+      if (seg->qend < 1 || seg->qend > bc->maxLen)
+        g_error("Bad qend: %d.  Range: 1-%d\n", seg->qend, bc->maxLen);
+      if (seg->start < 1 || seg->start > bc->maxLen)
+        g_error("Bad start: %d.  Range: 1-%d\n", seg->start, bc->maxLen);
+      if (seg->end < 1 || seg->end > bc->maxLen)
+        g_error("Bad end: %d.  Range: 1-%d\n", seg->end, bc->maxLen);
+
+      if (seg->qstart > seg->qend)
+        g_error("qstart > qend  (%d > %d)\n", seg->qstart, seg->qend);
+      if (seg->start > seg->end)
+        g_error("start > end  (%d > %d)\n", seg->start, seg->end);
+    }
+}
+
+
+static int countInserts(SEG *seg)
+{
+  int   
+    Align_gap, Query_gap, gap, insert_counter=0;
+
+  if (!seg)
+    return insert_counter ;
+
+  while (seg->next) 
+    {
+      Align_gap = seg->next->start - seg->end - 1;
+      if (Align_gap < 0) 
+        g_error("Negative Align_gap: %d (%d-%d)\n", Align_gap, seg->start, seg->next->end );
+		
+      Query_gap = seg->next->qstart - seg->qend - 1;
+      if (Query_gap < 0) 
+        g_error("Negative Query_gap: %d (%d-%d)\n", Query_gap, seg->qstart, seg->next->qend );
+
+      gap = Query_gap - Align_gap;
+      if (gap > 0) 
+        {
+          insert_counter += gap;
+	}
+      
+      seg = seg->next;
+    }
+  
+  return insert_counter;
+}
+
+
+/* Inserts n gap columns after position p, in sequence coordinate, 1...maxLen 
+ */
+static void insertColumns(BelvuContext *bc, int p, int n)
+{
+  int
+    i, j;
+
+  ALN 
+    *alni;
+  char
+    *dest, *src, *seq;
+
+  g_message("Inserting %d columns after column %d\n", n, p);
+
+  bc->maxLen += n;
+
+  for (i = 0; i < (int)bc->alignArr->len; ++i) 
+    {
+      alni = g_array_index(bc->alignArr, ALN*, i);
+	
+      seq = (char*)g_malloc(bc->maxLen + 1);
+
+      dest = seq;
+      src = alnGetSeq(alni);
+
+      for (j = 0; j < p;  j++) 
+        {
+          *dest++ = *src++;
+	}
+      for (; j < p+n;  j++) 
+        {
+          *dest++ = '.';
+	}
+      for (; j < bc->maxLen;  j++) 
+        {
+          *dest++ = *src++;
+	}
+
+      g_string_free(alni->sequenceStr, TRUE);
+      alni->sequenceStr = g_string_new(seq);
+    }
+
+  bc->saved = FALSE;
+}
+
+
+/* readMatch displays a matching sequences to the alignment so that
+   the match can be displayed in relation to the whole family.
+
+   Considerations:
+
+   - Must work both from ACEDB and command line (and from Web server).
+
+   Display:
+
+   - The score should be visible (turn on score column.)
+
+   - Should matches be displayed on separate lines or in the middle of the alignment?
+     On top would be nice, but would require a lot of extra programming (status bar etc).
+     Instead add to alignment (SEED usually fits on one screen) 
+     Draw names with red background.  
+     Add on top.
+
+
+   Steps needed on command line:
+
+   hmmb -W tmp HMM align
+   selex2alignmap tmp > alignmap
+
+   hmm?s -F HMM query | ?smapback map=alignmap > query.mapmatch  ( -> acedb)
+   belvu -m query.mapmatch align
+
+   The two last lines should be scripted in hmm?sBelvu
+
+
+*/
+void readMatch(BelvuContext *bc, FILE *fil)
+{
+  /* Format:
+       
+  Using segments is more difficult than residues, but is
+  necessary to display in ACEDB Pepmap.
+
+  seg_match/3-30                   (matching segment name)
+  WLPLHTLinsertAACGEFYLVDSLLKH     (only matching part, no pads!)
+  1 7 3 9  14 28 10 24
+
+  seq_match2...
+  */
+  int	orig_maxLen, tmp,
+    Align_gap, Query_gap, gap, inserts, seglen,
+    done_one=0, len,  was_saved=bc->saved, insert_counter;
+  char *cp, *seq, *rawseq = NULL, *seqp;
+  SEG	*SegList = NULL, *seg;
+  char line[MAXLENGTH+1];
+  
+  while (!done_one)
+    {
+      if (!fgets(line, MAXLENGTH, fil))
+	break;
+
+      /*printf("%s\n", line); continue;*/
+
+      if (*line != '\n' && *line != '#')
+	{
+	  if (done_one)
+	    {
+	      g_critical("Sorry, can only do one match\n");
+	      continue;
+	    }
+
+          ALN *aln = createEmptyAln();
+
+	  /* Name */
+	  if (!strtok(line, "/"))
+	    g_error("Bad format: %s\n", line);
+
+	  strncpy(aln->name, line, MAXNAMESIZE);
+	  aln->name[MAXNAMESIZE] = 0;
+          
+	  if ((cp = strchr(aln->name, ' ')))
+	    *cp = 0;
+
+	  if (bc->maxNameLen  < (int)strlen(aln->name))
+	    bc->maxNameLen = strlen(aln->name);
+
+	  /* Start & End */
+	  if (!(cp = strtok(0, "-"))) 
+            g_error("Bad start: %s\n", cp);
+
+	  aln->start = atoi(cp);
+          
+	  if ((len=strlen(cp)) > bc->maxStartLen)
+	    bc->maxStartLen = len;
+          
+          char *tmpStr = g_strdup_printf("%d", aln->start);
+
+	  if (bc->maxStartLen < (tmp = strlen(tmpStr)))
+	    bc->maxStartLen = tmp;
+                                   
+          g_free(tmpStr);
+          tmpStr = NULL;
+
+	  if (!(cp = strtok(0, " ")))
+	    g_error("Bad end: %s\n", cp);
+          
+	  aln->end = atoi(cp);
+          
+	  if ((len=strlen(cp)) > bc->maxEndLen)
+	    bc->maxEndLen = len;
+          
+          tmpStr = g_strdup_printf("%d", aln->end);
+          
+	  if (bc->maxEndLen < (tmp = strlen(tmpStr)))
+	    bc->maxEndLen = tmp;
+    
+          g_free(tmpStr);
+          tmpStr = NULL;
+          
+          int ip = 0;
+	  if (alignFind(bc->alignArr, aln, &ip))
+	    {
+	      g_critical("Sorry, already have sequence %s/%d-%d\n",
+                         aln->name, aln->start, aln->end);
+	      return;
+	    }
+
+	  /* Score */
+	  if (!(cp = strtok(0, "\n")))
+	    g_error("Bad score: %s\n", cp);
+
+	  aln->score = atof(cp);
+          
+          tmpStr = g_strdup_printf("%.1f", aln->score);
+          
+	  if ((len=strlen(tmpStr)) > bc->maxScoreLen)
+	    bc->maxScoreLen = len;
+          
+          g_free(tmpStr);
+          tmpStr = NULL;
+
+	  bc->displayScores = TRUE;
+
+	  /* Sequence */
+	  if (!fgets(line, MAXLENGTH, fil))
+	    break;
+
+	  if ((cp = strchr(line, '\n')))
+	    *cp = 0 ;
+          
+	  rawseq = (char*)g_malloc(strlen(line)+1);
+	  strcpy(rawseq, line);
+
+	  /* Matching segments */
+          
+	  if (!fgets(line, MAXLENGTH, fil))
+	    break;
+
+	  if ((cp = strchr(line, '\n')))
+            *cp = 0;
+
+	  makeSegList(bc, &SegList, line);
+
+	  inserts = countInserts(SegList);
+	  seq = (char*)g_malloc(bc->maxLen + inserts + 1);
+	  memset(seq, '.', bc->maxLen + inserts);
+	    
+	  orig_maxLen = bc->maxLen;
+
+	  /* Add first segment */
+	  seg = SegList;
+
+	  seqp = seq + seg->start-1;
+	  seglen = seg->end - seg->start+1;
+	  strncpy(seqp, rawseq, seglen);
+	  seqp += seglen; 
+
+	  /* Add subsequent segments */
+	  insert_counter = 0;
+	  while (seg->next)
+	    {
+	      Align_gap = seg->next->start - seg->end - 1;
+	      Query_gap = seg->next->qstart - seg->qend - 1;
+
+
+	      if (Query_gap > 0)
+		{ 
+		  strncpy(seqp, rawseq + seg->qend, Query_gap);
+		  seqp += Query_gap; 
+		}
+
+	      gap = Query_gap - Align_gap;
+	      if (gap > 0)
+		{
+		  insertColumns(bc, seg->end+insert_counter, gap);
+		  insert_counter += gap;
+		}
+	      else if (gap < 0)
+		{
+		  seqp += -gap;
+		  DEBUG_OUT("inserting %d gaps at %d\n", -gap, (int)(seqp-seq));
+		}
+
+	      seg = seg->next;
+
+	      /* Add sequence segment */
+	      seglen = seg->end - seg->start+1;
+	      strncpy(seqp, rawseq + seg->qstart-1, seglen);
+	      seqp += seglen;
+	    }
+
+	  /* Add final pads */
+	  memset(seqp, '.', orig_maxLen - seg->end);
+
+	  aln->sequenceStr = g_string_new(seq);
+          g_free(seq);
+          
+	  aln->color = RED;
+	  aln->nr = 0;
+
+          g_array_append_val(bc->alignArr, aln);
+          
+	  done_one = 1;
+
+	} /* End of this matchSeq */
+    }
+
+  g_array_sort(bc->alignArr, nrorder);
+
+  g_free(rawseq);
+
+  arrayOrder(bc->alignArr);
+  bc->saved = was_saved;
+
+  return ;
+}
+
+
+void checkAlignment(BelvuContext *bc)
+{
+  int i, g, cres, nres, tmp;
+
+  bc->maxNameLen = bc->maxStartLen = bc->maxEndLen = 0;
+
+  for (i = 0; i < (int)bc->alignArr->len; ++i) 
+    {
+      ALN *alnp = g_array_index(bc->alignArr, ALN*, i);
+
+      if (!alnp->markup) 
+        {
+          char *alnSeq = alnGetSeq(alnp);
+          
+          /* Count residues */
+          for (cres = g = 0; g < bc->maxLen; g++) 
+            {
+              if (alnSeq && isAlign(alnSeq[g]) && !isGap(alnSeq[g])) 
+                cres++;
+	    }
+	    
+          if (!alnp->start) 
+            {
+              /* No coords provided - reconstruct them */
+              alnp->start = 1;
+              alnp->end = cres;
+	    }
+          else 
+            {
+              /* Check if provided coordinates are correct */
+              nres = abs(alnp->end - alnp->start) + 1;
+              
+              if ( nres != cres)
+                {
+                  g_warning("Found wrong number of residues in %s/%d-%d: %d instead of %d\n",
+                            alnp->name, alnp->start, alnp->end,
+                            cres,
+                            nres);
+                }
+	    }
+	}
+
+      /* Find max string length of name, start, and end */
+      if (bc->maxNameLen  < (int)strlen(alnp->name))
+        bc->maxNameLen = strlen(alnp->name);
+
+      char *tmpStr = g_strdup_printf("%d", alnp->start);
+      
+      if (bc->maxStartLen < (tmp = strlen(tmpStr))) 
+        bc->maxStartLen = tmp;
+
+      g_free(tmpStr);
+      tmpStr = NULL;
+
+      tmpStr= g_strdup_printf("%d", alnp->end);
+
+      if (bc->maxEndLen   < (tmp = strlen(tmpStr))) 
+        bc->maxEndLen = tmp;
+    }
+}    
+
+
+static void initConservMtx(BelvuContext *bc)
+{
+  int i;
+
+  bc->conservCount = (int **)g_malloc(21*sizeof(int *));
+  bc->colorMap = (int **)g_malloc(21*sizeof(int *));
+    
+  for (i = 0; i < 21; ++i) 
+    {
+      bc->conservCount[i] = (int *)g_malloc(bc->maxLen*sizeof(int));
+      bc->colorMap[i] = (int *)g_malloc(bc->maxLen*sizeof(int));
+    }
+
+  bc->conservResidues = (int*)g_malloc(bc->maxLen*sizeof(int));
+  bc->conservation = (double*)g_malloc(bc->maxLen*sizeof(double));
+}	
+
+
+/* This populates conservCount (the count of how many of each residue there is
+ * in each column) and conservResidues (the count of how many residues in total
+ * there are in each column). 
+ * Returns: the total number of sequences (excluding markup lines) */
+static int countResidueFreqs(BelvuContext *bc)
+{
+  int   i, j, totalNumSeqs=0;
+
+  if (!bc->conservCount) 
+    initConservMtx(bc);
+
+    /* Must reset since this routine may be called many times */
+  for (i = 0; i < bc->maxLen; ++i)
+    {
+      for (j = 0; j < 21; j++)
+        {
+          bc->conservCount[j][i] = 0;
+          bc->colorMap[j][i] = 0;
+        }
+      
+      bc->conservResidues[i] = 0;
+    }
+    
+  for (j = 0; j < (int)bc->alignArr->len; ++j)
+    {
+      ALN *alnp = g_array_index(bc->alignArr, ALN*, j);
+      
+      if (alnp->markup)
+        continue;
+
+      totalNumSeqs++;
+
+      for (i = 0; i < bc->maxLen; ++i)
+        {
+          char *alnSeq = alnGetSeq(alnp);
+          int val = n2b[(unsigned char)(alnSeq[i])];
+
+          bc->conservCount[val][i]++;
+
+          if (isalpha(alnSeq[i]) || alnSeq[i] == '*')
+            bc->conservResidues[i]++;
+        }
+    }
+
+  return totalNumSeqs;
+}
+
+
+/* Calculate overhang between two aligned sequences 
+   Return nr of residues at the ends unique to s1 (overhanging s2).
+*/
+static int alnOverhang(char *s1, char *s2)
+{
+  int overhang = 0,
+    s1started = 0,
+    s2started = 0;
+  char *s1save = s1, *s2save = s2;
+
+  for (; *s1 && *s2; s1++, s2++) 
+    {
+      if (!isGap(*s1)) s1started = 1;
+      if (!isGap(*s2)) s2started = 1;
+      if (s1started && !s2started) overhang++;
+    }	
+  
+  s1--; s2--;
+  s1started = s2started = 0;
+  for (; s1>=s1save && s2>=s2save; s1--, s2--) 
+    {
+      if (!isGap(*s1)) s1started = 1;
+      if (!isGap(*s2)) s2started = 1;
+      if (s1started && !s2started) overhang++;
+    }	
+
+  /* printf ("%s\n%s\nOverhang=%d\n", s1save, s2save, overhang);*/
+
+  return overhang;
+}
+
+
+/***********************************************************
+ *		Removing alignments/columns		   *
+ ***********************************************************/
+
+void rmFinaliseColumnRemoval(BelvuContext *bc)
+{
+  rmGappySeqs(bc, 100.0);
+  rmFinalise(bc);
+}
+
+/* Removes all columns between from and to, inclusively.
+ * Note that from and to are sequence coordinates, 1...maxLen !!!!!  */
+void rmColumn(BelvuContext *bc, const int from, const int to)
+{
+  int
+    i=0, j=0, len = to - from + 1;
+  ALN 
+    *alni=NULL;
+  
+  g_message_info("Removing Columns %d-%d.\n", from, to);
+
+  for (i = 0; i < (int)bc->alignArr->len; i++) 
+    {
+      alni = g_array_index(bc->alignArr, ALN*, i);
+      char *alnSeq = alnGetSeq(alni);
+
+      /* If N or C terminal trim, change the coordinates */
+      if (from == 1)
+        for (j = from; j <= to;  j++) 
+          {
+            /* Only count real residues */
+            
+            if (!isGap(alnSeq[j-1]))
+              (alni->start < alni->end ? alni->start++ : alni->start--); 
+          }
+
+      if (to == bc->maxLen)
+        for (j = from; j <= to;  j++) 
+          {
+            /* Only count real residues */
+            if (!isGap(alnSeq[j-1]))
+              (alni->start < alni->end ? alni->end-- : alni->end++); 
+          }
+	
+      /* Remove the columns */
+      for (j = 0; j < bc->maxLen-to+1 /* Including terminator 0 */;  j++) 
+        {
+          alnSeq[from+j-1] = alnSeq[to+j];
+	}
+      j--;
+      
+      if (alnSeq[from+j-1] || alnSeq[to+j])
+        g_warning("Still a bug in rmColumn(): End=%c, Oldend=%c\n", alnSeq[from+j-1], alnSeq[to+j]);
+    }
+
+  bc->maxLen -= len;
+
+  bc->saved = FALSE;
+}
+
+
+/* Remove columns whose conservation is below the given cutoff */
+void rmColumnCutoff(BelvuContext *bc, const double from, const double to)
+{
+  int 
+    i, j, max, removed=0, oldmaxLen=bc->maxLen;
+  static double cons ;
+  
+  
+  for (i = bc->maxLen-1; i >= 0; i--) 
+    {
+      if (colorBySimilarity(bc)) 
+        {
+          cons = bc->conservation[i];
+        }
+      else 
+        {
+          max = 0;
+          for (j = 1; j < 21; j++)
+            {
+              if (bc->conservCount[j][i] > max) 
+                {
+                  max = bc->conservCount[j][i];
+                }
+            }	
+          cons = (double)max / bc->alignArr->len;
+        }
+      
+      if (cons > from && cons <= to) 
+        {
+          g_message("removing %d, cons= %.2f\n", i+1, cons);
+          rmColumn(bc, i+1, i+1);
+          if (++removed == oldmaxLen) 
+            {
+              g_critical("You have removed all columns.  Prepare to exit Belvu\n");
+              exit(EXIT_SUCCESS);
+            }
+        }
+    }
+  
+  bc->saved = FALSE;
+  rmFinaliseColumnRemoval(bc);
+}
+
+
+void rmEmptyColumns(BelvuContext *bc, double cutoff)
+{
+  int
+    i=0, j=0, gaps=0, totseq=0, removed=0, oldmaxLen=bc->maxLen;
+  ALN 
+    *alni=NULL;
+  char
+    c='\0';
+
+  for (totseq = i = 0; i < (int)bc->alignArr->len; ++i) 
+    {
+      alni = g_array_index(bc->alignArr, ALN*, i);
+      
+      if (!alni->markup) 
+        totseq++;
+    }
+
+  for (j = bc->maxLen-1; j >= 0; j--) 
+    {
+      for (gaps = i = 0; i < (int)bc->alignArr->len; i++) 
+        {
+          alni = g_array_index(bc->alignArr, ALN*, i);
+          char *alnSeq = alnGetSeq(alni);
+          
+          if (!alni->markup) 
+            {
+              c = alnSeq[j];
+              
+              if (isGap(c) || c == ' ') 
+                gaps++;
+	    }
+	}
+      
+      if ((double)gaps/totseq >= cutoff - MACHINE_RES) 
+        {
+          rmColumn(bc, j+1, j+1);
+          if (++removed == oldmaxLen)
+            {
+              g_critical("You have removed all columns.  Prepare to exit Belvu\n");
+              exit(0);
+            }
+	}
+    }
+}
+
+
+/* Certain actions need to be enabled/disabled depending on certain properties */
+void greyOutInvalidActionsForGroup(BelvuContext *bc, GtkActionGroup *action_group)
+{
+  if (!action_group)
+    return;
+  
+  enableMenuAction(action_group, "Output", bc->displayScores);
+  enableMenuAction(action_group, "rmScore", bc->displayScores);
+  enableMenuAction(action_group, "scoreSort", bc->displayScores);
+  
+  enableMenuAction(action_group, "toggleColorByResId", !colorByConservation(bc));
+  enableMenuAction(action_group, "colorByResId", !colorByConservation(bc));
+  enableMenuAction(action_group, "saveColorScheme", !colorByConservation(bc));
+  enableMenuAction(action_group, "loadColorScheme", !colorByConservation(bc));
+  
+  enableMenuAction(action_group, "colorSchemeCustom", bc->haveCustomColors);
+  
+  /* ignoreGaps used to be greyed out in old belvu when in color-by-residue
+   * mode; it does affect the display when in that mode if using a %ID
+   * threshold, though, so it should probably be enabled (or alternatively the 
+   * logic should be adjusted so that it does not affect the residue colors, if 
+   * that was the intent...) */
+  /* enableMenuAction(action_group, "ignoreGaps", colorByConservation(bc)); */
+  enableMenuAction(action_group, "printColors", colorByConservation(bc));
+  
+  enableMenuAction(action_group, "excludeHighlighted", bc->selectedAln != NULL);
+}
+
+
+/* Certain actions need to be enabled/disabled depending on certain properties */
+void greyOutInvalidActions(BelvuContext *bc)
+{
+  /* Need to do the action groups for the main window and the tree (wrapped
+   * windows currently don't have anything that gets greyed out but if they
+   * do in future they will need updating here too) */
+  
+  GtkActionGroup *actionGroup = belvuWindowGetActionGroup(bc->belvuWindow);
+  greyOutInvalidActionsForGroup(bc, actionGroup);
+
+  actionGroup = belvuTreeGetActionGroup(bc->belvuTree);
+  greyOutInvalidActionsForGroup(bc, actionGroup);
+}
+
+
+/* Set the main tree in the belvu context (null to reset). Takes ownership
+ * of the given tree. Destroys the existing tree contents first, if there is one. */
+void belvuContextSetTree(BelvuContext *bc, Tree **tree)
+{
+  if (bc->mainTree)
+    {
+      /* We don't destroy the actual tree struct because there may be pointers
+       * to it from other places; instead, we just replace its contents. */
+      destroyTreeContents(bc->mainTree);
+      
+      if (tree && *tree)
+        {
+          bc->mainTree->head = (*tree)->head;
+          g_free(*tree);
+          
+          /* Update input pointer so that it points to the tree that actually
+           * got set. */
+          *tree = bc->mainTree;
+        }
+    }
+  else if (tree && *tree)
+    {
+      bc->mainTree = *tree;
+    }
+  else
+    {
+      bc->mainTree = NULL;
+    }
+  
+  /* Whether a tree exists affects whether some menu items are greyed out */
+  greyOutInvalidActions(bc);
+}
+
+
+/* This function should be called after removing sequences or columns */
+static void rmFinalise(BelvuContext *bc) 
+{
+  /*    ruler[maxLen] = 0;*/
+  checkAlignment(bc);
+  setConsSchemeColors(bc);
+  
+  /* Removing seqs/cols invalidates the tree, so set the tree head to NULL. */
+  belvuContextSetTree(bc, NULL);
+  
+  /* Removing seqs/cols invalidates the conservation plot, so recalculate it */
+  belvuConsPlotRecalcAll(bc->consPlot);
+  
+  /* Removing sequences can change the size of the columns in the alignment view,
+   * so recalculate them */
+  updateHeaderColumnsSize(bc->belvuAlignment);
+  calculateDrawingSizes(bc->belvuAlignment);
+}
+
+
+/* Get rid of seqs that start or end with a gap.
+ */
+void rmPartialSeqs(BelvuContext *bc)
+{
+  int i=0, n=0;
+  ALN *alni = NULL;
+
+  for (i = 0; i < (int)bc->alignArr->len; ) 
+    {
+      alni = g_array_index(bc->alignArr, ALN*, i);
+      char *alnSeq = alnGetSeq(alni);
+      
+      if (isGap(alnSeq[0]) || isGap(alnSeq[bc->maxLen-1])) 
+        {
+          /* Remove entry */
+          n++;
+
+          if (bc->selectedAln == alni) 
+            bc->selectedAln = 0;
+          
+          g_array_remove_index(bc->alignArr, i);
+          bc->saved = 0;
+	}
+      else 
+        {
+          ++i;
+        }
+    }
+
+  g_message_info("%d partial sequences removed.  %d seqs left.\n\n", n, bc->alignArr->len);
+
+  arrayOrder(bc->alignArr);
+  rmFinaliseGapRemoval(bc);
+}
+
+
+/* Get rid of seqs that are too gappy.
+ */
+void rmGappySeqs(BelvuContext *bc, const double cutoff)
+{
+  int i=0, j=0, n=0, gaps;
+  ALN *alni = NULL;
+
+  for (i = 0; i < (int)bc->alignArr->len; ) 
+    {
+      alni = g_array_index(bc->alignArr, ALN*, i);
+      char *alnSeq = alnGetSeq(alni);
+
+      for (gaps = j = 0; j < bc->maxLen; j++)
+        if (isGap(alnSeq[j])) 
+          gaps++;
+
+      if ((double)gaps/bc->maxLen >= cutoff/100.0) 
+        {
+          /* Remove entry */
+          n++;
+          
+          if (bc->selectedAln == alni) 
+            bc->selectedAln = 0;
+          
+          g_array_remove_index(bc->alignArr, i);
+          bc->saved = 0;
+	}
+      else 
+	{
+	  i++;
+	}
+    }
+
+    g_message_info("%d gappy sequences removed.  %d seqs left.\n\n", n, bc->alignArr->len);
+
+    arrayOrder(bc->alignArr);
+}
+
+
+/* Remove empty (gappy) columns if the 'remove empty columns' option
+ * is enabled. */
+void rmFinaliseGapRemoval(BelvuContext *bc)
+{
+  if (bc->rmEmptyColumnsOn) 
+    rmEmptyColumns(bc, 1.0);
+  
+  rmFinalise(bc);
+}
+
+
+/* Get rid of seqs that are more than x% identical with others. 
+ * Keep the  first one.
+ */
+void mkNonRedundant(BelvuContext *bc, const double cutoff)
+{
+  int i=0,j=0, n=0, overhang;
+  ALN *alni=NULL, *alnj=NULL;
+  double id = 0.0;
+
+  for (i = 0; i < (int)bc->alignArr->len; i++) 
+    {
+      alni = g_array_index(bc->alignArr, ALN*, i);
+      char *alniSeq = alnGetSeq(alni);
+
+      for (j = 0; j < (int)bc->alignArr->len; j++) 
+        {
+          if (i == j) 
+            continue;
+
+          alnj = g_array_index(bc->alignArr, ALN*, j);
+          char *alnjSeq = alnGetSeq(alnj);
+	    
+          overhang = alnOverhang(alnjSeq, alniSeq);
+          id = percentIdentity(alniSeq, alnjSeq, bc->penalize_gaps);
+
+          if (!overhang && id > cutoff)
+	    {
+              g_message_info("%s/%d-%d and %s/%d-%d are %.1f%% identical. "
+                             "The first includes the latter which was removed.\n",
+                             alni->name, alni->start, alni->end,
+                             alnj->name, alnj->start, alnj->end,
+                             id);
+		
+              /* Remove entry j */
+              n++;
+		
+              if (bc->selectedAln == alnj) 
+                bc->selectedAln = NULL;
+              
+              g_array_remove_index(bc->alignArr, j);
+              bc->saved = FALSE;
+              
+              if (j < i) 
+                {
+                  i--;
+                  alni = g_array_index(bc->alignArr, ALN*, i);
+		}
+              j--;
+	    }
+	}
+    }
+
+  g_message_info("%d sequences removed at the %.0f%% level.  %d seqs left.\n\n", n, cutoff, bc->alignArr->len);
+  
+  arrayOrder(bc->alignArr);
+  rmFinaliseGapRemoval(bc);
+}
+
+
+/* Get rid of seqs that are less than x% identical with any of the others. 
+ */
+void rmOutliers(BelvuContext *bc, const double cutoff)
+{
+  int i=0,j=0, n=0;
+  ALN *alni=NULL, *alnj=NULL;
+  
+  for (i = 0; i < (int)bc->alignArr->len - 1; ) 
+    {
+      alni = g_array_index(bc->alignArr, ALN*, i);
+    
+      double maxid = 0;
+      for (maxid=0, j = 0; j < (int)bc->alignArr->len; ++j) 
+	{
+	  if (i == j) 
+	    continue;
+	
+	  alnj = g_array_index(bc->alignArr, ALN*, j);
+	  double id = percentIdentity(alnGetSeq(alni), alnGetSeq(alnj), bc->penalize_gaps);
+	
+	  if (id > maxid) 
+	    maxid = id;
+	}
+    
+      if (maxid < cutoff) 
+	{
+	  g_message("%s/%d-%d was max %.1f%% identical to any other sequence and was removed.\n",
+		    alni->name, alni->start, alni->end, maxid);
+	
+	  /* Remove entry */
+	  n++;
+	
+	  if (bc->selectedAln == alni) 
+	    bc->selectedAln = NULL;
+	
+	  g_array_remove_index(bc->alignArr, i);
+	  bc->saved = FALSE;
+	}
+      else 
+	{
+	  i++;
+	}
+    }
+  
+  g_message("%d sequences removed at the %.0f%% level.  %d seqs left.\n\n", n, cutoff, bc->alignArr->len);
+  
+  arrayOrder(bc->alignArr);
+  rmFinaliseGapRemoval(bc);
+}
+
+
+/* Remove sequences that have a score below the given value */
+void rmScore(BelvuContext *bc, const double cutoff)
+{
+  scoreSort(bc);
+  
+  /* Save bc->selectedAln */
+  ALN aln;
+  initAln(&aln);
+  
+  if (bc->selectedAln)
+    alncpy(&aln, bc->selectedAln);
+  
+  int numRemoved = 0;
+  int i = 0;
+  
+  for (i = 0; i < (int)bc->alignArr->len; ) 
+    {
+      ALN *alnp = g_array_index(bc->alignArr, ALN*, i);
+    
+      if (alnp->score < cutoff) 
+	{ 
+	  ++numRemoved;
+	  
+	  g_message_info("Removing %s/%d-%d (score %.1f)\n",
+                         alnp->name, alnp->start, alnp->end, alnp->score);
+	
+	  if (bc->selectedAln == alnp) 
+	    bc->selectedAln = NULL;
+	  
+	  g_array_remove_index(bc->alignArr, i);
+	  bc->saved = FALSE;
+	}
+      else
+	{
+	  i++;
+	}
+    }
+  
+  arrayOrder(bc->alignArr);
+  
+  g_message_info("%d sequences with score < %.1f removed.  %d seqs left.\n\n", numRemoved, cutoff, bc->alignArr->len);
+  
+  /* Find bc->selectedAln in new array */
+  if (bc->selectedAln) 
+    { 
+      int ip = 0;
+      ALN aln;
+      initAln(&aln);
+      
+      if (!alnArrayFind(bc->alignArr, &aln, &ip, scoreorder)) 
+	{
+	  bc->selectedAln = NULL;
+	}
+      else
+	{
+	  bc->selectedAln = g_array_index(bc->alignArr, ALN*, ip);
+	}
+  }
+  
+  bc->alignYStart = 0;
+  
+  rmFinaliseGapRemoval(bc);
+}
+
+
+/***********************************************************
+ *		      Read/write files 			   *
+ ***********************************************************/
+
+/* Save the given tree to the given file in New Hampshire format */
+void saveTreeNH(Tree *tree, TreeNode *node, FILE *file)
+{
+  if (!node) 
+    return;
+  
+  if (node->left && node->right) 
+    {
+      fprintf(file, "(\n");
+      saveTreeNH(tree, node->left, file);
+      fprintf(file, ",\n");
+      saveTreeNH(tree, node->right, file);
+      fprintf(file, ")\n");
+      
+      if (node != tree->head)	/* Not exactly sure why this is necessary, but njplot crashes otherwise */
+        fprintf(file, "%.0f", node->boot+0.5);
+    }
+  else
+    {
+      fprintf(file, "%s", node->name);
+    }
+  
+  if (node != tree->head)	/* Not exactly sure why this is necessary, but njplot crashes otherwise */
+    fprintf(file, ":%.3f", node->branchlen/100.0);
+}
+
+
+void writeMSF(BelvuContext *bc, FILE *pipe) /* c = separator between name and coordinates */
+{
+  int i=0, j=0;
+  int maxfullnamelen = bc->maxNameLen + 1 + bc->maxStartLen + 1 + bc->maxEndLen;
+  int paragraph=0, alnstart=0, alnend=0, alnlen=0, linelen=50, blocklen=10;
+  
+  if (bc->saveCoordsOn)
+    maxfullnamelen = bc->maxNameLen + 1 + bc->maxStartLen + 1 + bc->maxEndLen;
+  else
+    maxfullnamelen = bc->maxNameLen;
+  
+  /* Title */
+  fprintf(pipe, "PileUp\n\n %s  MSF: %d  Type: X  Check: %d  ..\n\n",
+          bc->Title, bc->maxLen, GCGgrandchecksum(bc));
+
+  /* Names and checksums */
+  for(i=0; i < (int)bc->alignArr->len; ++i) 
+    {
+      ALN *alnp = g_array_index(bc->alignArr, ALN*, i);
+      
+      if (alnp->markup) 
+        continue;
+
+      char *tmpStr = bc->saveCoordsOn 
+        ? g_strdup_printf("%s%c%d-%d", alnp->name, bc->saveSeparator, alnp->start, alnp->end)
+        : g_strdup_printf("%s", alnp->name);
+
+      fprintf(pipe, "  Name: %-*s  Len:  %5d  Check:  %5d  Weight: %.4f\n",
+              maxfullnamelen,
+              tmpStr,
+              bc->maxLen,
+              GCGchecksum(bc, alnGetSeq(alnp)),
+              1.0);
+
+      g_free(tmpStr);
+    }
+  
+  fprintf(pipe, "\n//\n\n");
+
+  /* Alignment */
+  while (paragraph * linelen < bc->maxLen)
+    {
+      for (i = 0; i < (int)bc->alignArr->len; ++i)
+	{
+          alnstart = paragraph * linelen; 
+          alnlen = ( (paragraph+1)*linelen < bc->maxLen ? linelen : bc->maxLen - alnstart );
+          alnend = alnstart + alnlen;
+
+          ALN *alnp = g_array_index(bc->alignArr, ALN*, i);
+          
+          if (alnp->markup) 
+            continue;
+
+          char *tmpStr = bc->saveCoordsOn 
+            ? g_strdup_printf("%s%c%d-%d", alnp->name, bc->saveSeparator, alnp->start, alnp->end)
+            : g_strdup_printf("%s", alnp->name);
+          
+          fprintf(pipe, "%-*s  ", maxfullnamelen, tmpStr);
+          g_free(tmpStr);
+          
+          for (j = alnstart; j < alnend; ) 
+            {
+              char *alnpSeq = alnGetSeq(alnp);
+              fprintf(pipe, "%c", alnpSeq[j]);
+              j++;
+              
+              if ( !((j-alnstart) % blocklen) ) 
+                fprintf(pipe, " ");
+	    }
+          
+          fprintf(pipe, "\n");
+	}
+      
+      fprintf(pipe, "\n");
+      paragraph++;
+    }
+
+  fclose(pipe);
+  fflush(pipe);
+  
+  bc->saved = TRUE;
+}
+
+
+static void readMSF(BelvuContext *bc, FILE *pipe)
+{
+  char seq[1001], *cp=NULL, *cq=NULL;
+  char line[MAXLENGTH + 1];
+  line[0] = 0;
+  seq[0] = 0;
+  
+  g_message_info("\nDetected MSF format\n");
+
+  /* Read sequence names */
+  while (!feof (pipe))
+    { 
+      if (!fgets (line, MAXLENGTH, pipe)) 
+        break;
+
+      if (!strncmp(line, "//", 2)) 
+        {
+          break;
+        }
+      else if (strstr(line, "Name:") && (cp = strstr(line, "Len:")) && strstr(line, "Check:")) 
+	{
+          int len;
+
+          sscanf(cp+4, "%d", &len);
+
+          if (bc->maxLen < len) 
+            bc->maxLen = len;
+
+          cp = strstr(line, "Name:")+6;
+          
+          while (*cp && *cp == ' ') 
+            cp++;
+
+          /* Read sequence name and coords */
+          ALN *aln = createEmptyAln();
+          parseMulLine(bc, cp, aln);
+
+          /* Create a string to contain the sequence data */
+          aln->sequenceStr = g_string_new("");
+          
+          /* Add to the array */
+          aln->nr = bc->alignArr->len + 1;
+
+          g_array_append_val(bc->alignArr, aln);
+          g_array_sort(bc->alignArr, alphaorder);
+	}
+    }
+
+  /* Read sequence alignment */
+  while (!feof (pipe))
+    { 
+      if (!fgets (line, MAXLENGTH, pipe)) 
+        break;
+
+      cp = line;
+      cq = seq;
+      while (*cp && *cp == ' ') cp++;
+      while (*cp && *cp != ' ') cp++; /* Spin to sequence */
+      
+      while (*cp && cq-seq < 1000) 
+        {
+          if (isAlign(*cp)) *cq++ = *cp;
+          cp++;
+	}
+	
+      *cq = 0;
+
+      if (*seq) 
+        {
+          cp = line;
+          while (*cp && *cp == ' ') 
+            cp++;
+
+          /* Get the name of the sequence  */
+          ALN aln;
+          initAln(&aln);
+          parseMulLine(bc, cp, &aln);
+
+          /* Get the alignment with this name from the array, and append this
+           * bit of sequence to it. */
+          int ip = 0;
+          if (alignFind(bc->alignArr, &aln, &ip))
+            {
+              ALN *alnp = g_array_index(bc->alignArr, ALN*, ip);
+              g_string_append(alnp->sequenceStr, seq);
+            }
+          else
+            {
+              g_warning("Alignment does not appear in file header section (%s %d %d).\n", aln.name, aln.start, aln.end);
+            }
+	}
+    }
+  
+  bc->saveFormat = BELVU_FILE_MSF;
+}
+
+
+/* Parse annotation lines from #=GS lines in the Mul file format */
+static void parseMulAnnotationLine(BelvuContext *bc, const char *seqLine)
+{
+  const char *cp = seqLine;
+
+  char
+    *namep,		/* Seqname */
+    name[MAXNAMESIZE+1],/* Seqname */
+    *labelp,		/* Label (OS) */
+    *valuep;		/* Organism (c. elegans) */
+
+  
+  /* Ignore anything that's not a 'GS' line */
+  if (strncmp(cp, "#=GS", 4) != 0)
+    return;
+      
+  /* Copy the portion after  the '#=GS' into 'name' */
+  strcpy(name, cp+4);
+  namep = name;
+  
+  /* Ignore leading whitespace */
+  while (*namep == ' ') 
+    namep++;
+      
+  /* Find the end of the name */
+  labelp = namep;
+  while (*labelp != ' ') 
+    labelp++;
+  
+  *labelp = 0;		/* Terminate namep */
+  ++labelp;		/* Walk across terminator */
+  
+  while (*labelp == ' ') /* Find the start of the label */
+    ++labelp;
+      
+  valuep = labelp;
+  while (*valuep != ' ') valuep++; /* Find the end of the label */
+  while (*valuep == ' ') valuep++; /* Find the start of the value */
+  
+  if (strncasecmp(labelp, "LO", 2) == 0)
+    {
+      int i, colornr;
+      
+      /* Check the value to see if it matches one of our colour names */
+      for (colornr = -1, i = 0; i < NUM_TRUECOLORS; i++)
+        {
+          if (strcasecmp(colorNames[i], valuep) == 0) 
+            {
+              colornr = i;
+              break;
+            }
+        }
+      
+      if (colornr == -1)
+        {
+          g_message("Unrecognized color: %s\n", valuep);
+          colornr = 0;
+        }
+          
+      /* Create an ALN struct from the name */
+      ALN aln;
+      initAln(&aln);
+      str2aln(bc, namep, &aln);
+
+      /* Find the corresponding sequence */
+      if (!alnArrayFind(bc->alignArr, &aln, &i, alphaorder))
+        {
+          g_critical("Cannot find '%s' [%d %d] in alignment.\n", aln.name, aln.start, aln.end);
+          return;
+        }
+      
+      ALN *alnp = g_array_index(bc->alignArr, ALN*, i);
+      alnp->color = colornr;
+    }
+  else if (strncasecmp(labelp, bc->organismLabel, 2) == 0)
+    {
+      /* Add organism to table of organisms.  This is necessary to make all 
+         sequences of the same organism point to the same place and to make a 
+         non-redundant list of present organisms */
+      
+      /* Find string in permanent stack */
+      const char *valuepconst = strstr(cp, valuep);
+
+      if (!valuepconst)
+        {
+          g_critical("Failed to parse organism properly.\n");
+          return;
+        }
+
+      valuep = strdup(valuepconst);
+      
+      /* Create an ALN struct from this organism */
+      ALN *aln = createEmptyAln();
+      
+      aln->organism = valuep; /* Find organism string in permanent stack */
+
+      /* Add to organisms array, if not already there */
+      int org_idx = 0 ;
+      if (!alnArrayFind(bc->organismArr, aln, &org_idx, organism_order))
+        {
+          g_array_append_val(bc->organismArr, aln);
+          g_array_sort(bc->organismArr, organism_order);
+          
+          /* Set the max organism name length */
+          int organismLen = strlen(aln->organism);
+
+          if (organismLen > bc->maxOrganismLen)
+            bc->maxOrganismLen = organismLen ;
+        }
+ 
+      if (strchr(cp, '/') && strchr(cp, '-'))
+        {
+          str2aln(bc, namep, aln);
+              
+          /* Find the corresponding sequence */
+          int ip = 0;
+          
+          if (!alnArrayFind(bc->alignArr, aln, &ip, alphaorder)) 
+            {
+              g_critical("Cannot find '%s' [%d %d] in alignment.\n", aln->name, aln->start, aln->end);
+              return;
+            }
+             
+          ALN *alnp = g_array_index(bc->alignArr, ALN*, ip);
+              
+          /* Store pointer to unique organism in ALN struct */
+          aln->organism = valuep;
+          ip = 0;
+          
+          alnArrayFind(bc->organismArr, aln, &ip, organism_order);
+          alnp->organism = g_array_index(bc->organismArr, ALN*, ip)->organism;
+        }
+      else 
+        {
+          /* Organism specified for entire sequences.
+             Find all ALN instances of this sequences.
+          */
+          int i = 0;
+          for (i = 0; i < (int)bc->alignArr->len; ++i) 
+            {
+              ALN *alnp = g_array_index(bc->alignArr, ALN*, i);
+
+              if (strcmp(alnp->name, namep) == 0) 
+                {
+                  /* Store pointer to unique organism in ALN struct */
+                  ALN aln;
+                  initAln(&aln);
+                  aln.organism = valuep;
+                  int ip = 0;
+
+                  alnArrayFind(bc->organismArr, &aln, &ip, organism_order);
+                  alnp->organism = g_array_index(bc->organismArr, ALN*, ip)->organism;
+                }
+            }
+        }
+    }
+}
+
+
+/* Add sequence data to an alignment from a line of text of the format:
+ * SEQ_NAME     SEQUENCE_DATA,
+ * where alnstart gives the position of the start of SEQUENCE_DATA. */
+static void appendSequenceDataToAln(BelvuContext *bc, char *line, const int alnstart)
+{
+  /* Find the alignment name */
+  ALN aln;
+  initAln(&aln);
+  parseMulLine(bc, line, &aln);
+
+  /* See if this alignment is in the alignments array */
+  int ip = 0;
+  if (alnArrayFind(bc->alignArr, &aln, &ip, alphaorder))
+    {
+      /* Append this bit of sequence to the existing alignment */
+      ALN *alnp = g_array_index(bc->alignArr, ALN*, ip);
+      g_string_append(alnp->sequenceStr, line + alnstart);
+      
+      /* Recalculate the max alignment length */
+      if ((int)alnp->sequenceStr->len > bc->maxLen)
+        bc->maxLen = alnp->sequenceStr->len;
+    }
+  else
+    {
+      /* Create a new alignment and add this bit of sequence */
+      ALN *alnp = createEmptyAln();
+      alncpy(alnp, &aln);
+      
+      alnp->sequenceStr = g_string_new(line + alnstart);
+      alnp->nr = bc->alignArr->len + 1;
+      
+      g_array_append_val(bc->alignArr, alnp);
+      g_array_sort(bc->alignArr, alphaorder);
+      
+      /* Recalculate the max alignment length */
+      if ((int)alnp->sequenceStr->len > bc->maxLen)
+        bc->maxLen = alnp->sequenceStr->len;
+    }
+}
+
+
+/* ReadMul 
+ * parses an alignment file in mul (stockholm) or selex format and puts it in the Align array
+ *
+ * Assumes header contains ' ' or '#'
+ *
+ * Alignment can have one of the following formats:
+ *  CSW_DROME  VTHIKIQNNGDFFDLYGGEKFATLP
+ *  CSW_DROME  51   75   VTHIKIQNNGDFFDLYGGEKFATLP
+ *  CSW_DROME  51   75   VTHIKIQNNGDFFDLYGGEKFATLP P29349
+ *  KFES_MOUSE/458-539    .........WYHGAIPW.....AEVAELLT........HTGDFLVRESQG
+ *
+ */
+static void readMul(BelvuContext *bc, FILE *pipe)
+{
+  char line[MAXLENGTH+1];
+  line[0] = 0;
+
+  /* Read raw alignment into stack
+   *******************************/
+  
+  int alnstart = MAXLENGTH;
+  GSList *alnList = NULL;
+  
+  while (!feof (pipe))
+    { 
+      /* EOF checking to make acedb calling work */
+      if (!fgets (line, MAXLENGTH, pipe) || (unsigned char)*line == (unsigned char)EOF ) 
+        break;
+      
+      if (!strncmp(line, "PileUp", 6)) 
+        {
+          readMSF(bc, pipe);
+          return;
+        }
+
+      /* Remove any trailing newline */
+      char *cp = strchr(line, '\n');
+      if (cp) 
+        *cp = 0;
+
+      cp = strchr(line, '\r');
+      if (cp)
+        *cp = 0;
+
+      int lineLen = strlen(line);
+
+      if (lineLen > 0 && *line != '#' && strcmp(line, "//") != 0)
+	{
+          /* Sequence line */
+          char *cq = strchr(line, ' ');
+          
+          if (!cq) 
+            g_error("Error reading selex file; no spacer between name and sequence in the following line:\n%s", line);
+          
+          /* Find which column the alignment starts in */
+          int i = 0;
+          for (i = 0; line[i] && line[i] != ' '; ++i);
+          for (; line[i] && !isAlign(line[i]); ++i);
+          
+          /* Remember the leftmost start position of any alignment. We'll assume
+           * all alignments start in the same column. */
+          if (i < alnstart) 
+            alnstart = i;
+
+          /* Remove optional accession number at end of alignment */
+          /* FOR PRODOM STYLE ALIGNMENTS W/ ACCESSION TO THE RIGHT - MAYBE MAKE OPTIONAL
+           * This way it's incompatible with alignments with ' ' gapcharacters */
+          for (; line[i] && isAlign(line[i]); i++);
+          line[i] = 0;
+
+          /* Store the line for processing later (once alnstart has been calculated) */
+          alnList = g_slist_prepend(alnList, g_strdup(line));
+	}
+      else if (!strncmp(line, "#=GF ", 5) || 
+               !strncmp(line, "#=GS ", 5)) 
+        {
+	  /* Store all annotation lines in a list. Prepend the items because that
+	   * is more efficient, and then reverse the list at the end */
+	  bc->annotationList = g_slist_prepend(bc->annotationList, g_strdup(line));
+        }
+      else if (!strncmp(line, "#=GC ", 5) || 
+               !strncmp(line, "#=GR ", 5) || 
+               !strncmp(line, "#=RF ", 5)) 
+        {
+          /* These are markup lines that are shown in the alignment list */
+          alnList = g_slist_prepend(alnList, g_strdup(line));
+        }
+      else if (!strncmp(line, "# matchFooter", 13)) 
+        {
+          /* Match Footer  */
+          bc->matchFooter = TRUE;
+          break;
+        }
+    }
+  
+  /* Reverse the lists, because we prepended items instead of appending them */
+  bc->annotationList = g_slist_reverse(bc->annotationList);
+  alnList = g_slist_reverse(alnList);
+  
+  /* Loop through all of the alignment lines and extract the sequence string */
+  GSList *alnItem = alnList;
+  for ( ; alnItem; alnItem = alnItem->next)
+    {
+      char *alnStr = (char*)(alnItem->data);
+      appendSequenceDataToAln(bc, alnStr, alnstart);
+      
+      /* Free the line string, now we're done with it */
+      g_free(alnStr);
+      alnItem->data = NULL;
+    }
+
+  g_slist_free(alnList);
+  alnList = NULL;
+
+  /* Loop through all the annotation lines and parse them (must be done after adding alignment
+   * lines) */
+  for (GSList *annItem = bc->annotationList; annItem; annItem = annItem->next)
+    {
+      char *line = (char*)(annItem->data) ;
+      parseMulAnnotationLine(bc, line);
+    }
+  
+/* For debugging * /
+   for (i = 0; i < nseq; i++) {
+   alnp = arrp(Align, i, ALN);
+   printf("\n%-10s %4d %4d %s %d %s\n", 
+   alnp->name, alnp->start, alnp->end, alnp->seq, 
+   alnp->len, alnp->organism);
+   }
+   for (i=0; i < arrayMax(organismArr); i++) 
+   printf("%s\n", arrp(organismArr, i, ALN)->organism);
+   */
+  
+  if (bc->alignArr->len == 0 || bc->maxLen == 0) 
+    g_error("Unable to read sequence data\n");
+  
+  bc->saveFormat = BELVU_FILE_MUL;
+}
+
+
+/* 
+ Format the name/start-end string 
+ 
+ For convenience, used by writeMul. Returns a newly allocated string
+ which must be freed with g_free
+ */
+static char *writeMulName(BelvuContext *bc, ALN *aln) 
+{  
+  char *name = NULL; /* result */
+  
+  char *cp, *namep, GRname[MAXNAMESIZE*2+2], GRfeat[MAXNAMESIZE+1];
+  
+  if (aln->markup == GC) 
+    {
+      name = g_strdup_printf("#=GC %s", aln->name);
+      return name;
+    }
+  
+  /* NOTE: GR lines have the feature concatenated in aln->name - must separate */
+  if (aln->markup == GR) 
+    {
+      namep = GRname;
+      strncpy(namep, aln->name, 50);
+      cp = strchr(namep, ' ');
+      strncpy(GRfeat, cp+1, 50);
+      *cp = 0;
+    }
+  else
+    {
+      namep = aln->name;
+    }
+  
+  if (!bc->saveCoordsOn) 
+    {
+      name = g_strdup_printf("%s", namep);
+    }
+  else 
+    {
+      name = g_strdup_printf("%s%c%d-%d", namep, bc->saveSeparator, aln->start, aln->end);
+    }
+  
+  if (aln->markup == GR)
+    name = g_strdup_printf("#=GR %s %s", name, GRfeat);
+  
+  return name;
+}
+
+
+void writeMul(BelvuContext *bc, FILE *fil)
+{
+  /* Write Annotation */
+  GSList *annotationItem = bc->annotationList;
+  
+  for ( ; annotationItem; annotationItem = annotationItem->next)
+    {
+      const char *line = (const char*)(annotationItem->data);
+      fprintf(fil, "%s\n", line);
+    }
+
+  /* Find max width of name column */
+  int i = 0;
+  int maxWidth = 0;
+  
+  for ( ; i < (int)bc->alignArr->len; ++i)
+    {
+      ALN *alnp = g_array_index(bc->alignArr, ALN*, i);
+
+      char *mulName = writeMulName(bc, alnp);
+      int curWidth = strlen(mulName);
+      g_free(mulName);
+    
+      if ( curWidth > maxWidth) 
+	maxWidth = curWidth;
+    }
+    
+  /* Write alignment */
+  for (i = 0; i < (int)bc->alignArr->len; i++)
+    {
+      ALN *alnp = g_array_index(bc->alignArr, ALN*, i);
+      char *mulName = writeMulName(bc, alnp);
+      const char *alnpSeq = alnGetSeq(alnp);
+    
+      fprintf(fil, "%-*s %s\n", maxWidth, mulName, (alnpSeq ? alnpSeq : ""));
+    
+      g_free(mulName);
+    }
+  
+  fprintf(fil, "//\n");
+  
+  fclose(fil);
+  fflush(fil);
+
+  bc->saved = TRUE;
+}
+
+
+/* readFile 
+ * Determines the format of the input file and calls the appropriate 
+ * parser. Valid file formats are fasta, MSF, mul (stockholm) or selex.
+ */
+void readFile(BelvuContext *bc, FILE *pipe)
+{
+  char   ch = '\0';
+  char line[MAXLENGTH+1];
+  line[0] = 0;
+  
+  /* Parse header to check for MSF or Fasta format */
+  while (!feof (pipe))
+    { 
+      ch = fgetc(pipe);
+      
+      if (!isspace(ch)) 
+        {
+          if (ch == '>') 
+            {
+              ungetc(ch, pipe);
+              return readFastaAln(bc, pipe);
+            }
+          else
+            {
+              break;
+            }
+        }
+      else if (ch == '\n')
+        {
+          if (!fgets (line, MAXLENGTH, pipe)) 
+            break;
+        }
+      
+      if (strstr(line, "MSF:") && strstr(line, "Type:") && strstr(line, "Check:")) 
+        {
+          return readMSF(bc, pipe);
+        }
+    }
+  
+  if (!feof(pipe))
+    ungetc(ch, pipe);
+
+  return readMul(bc, pipe);
+}
+
+
+void writeFasta(BelvuContext *bc, FILE *pipe)
+{
+  int i=0, n=0;
+  char *cp = NULL;
+
+  for (i = 0; i < (int)bc->alignArr->len; ++i) 
+    {
+      ALN *alnp = g_array_index(bc->alignArr, ALN*, i);
+      
+      if (alnp->markup) 
+        continue;
+	
+      if (bc->saveCoordsOn)
+        fprintf(pipe, ">%s%c%d-%d\n", alnp->name, bc->saveSeparator, alnp->start, alnp->end);
+      else
+        fprintf(pipe, ">%s\n", alnp->name);
+	
+      for (n=0, cp = alnGetSeq(alnp); *cp; cp++)
+        {
+	  if (bc->saveFormat == BELVU_FILE_ALIGNED_FASTA)
+            {
+              fputc(*cp, pipe);
+              n++;
+	    }
+          else
+            {
+              if (!isGap(*cp)) 
+                {
+                  fputc(*cp, pipe);
+                  n++;
+		}
+	    }
+	    
+          if (n && !(n % 80) ) 
+            {
+              fputc('\n', pipe);
+              n = 0;
+	    }
+	}
+	
+      if (n)
+        fputc('\n', pipe);
+    }
+
+  fclose(pipe);
+  fflush(pipe);
+  
+  bc->saved = TRUE;
+}
+
+
+static int getMatchStates(BelvuContext *bc)
+{
+  int i=0, j=0, n=0, retval=0;
+
+  for (j = 0; j < bc->maxLen; ++j) 
+    {
+      n = 0;
+      for (i = 0; i < (int)bc->alignArr->len; ++i) 
+        {
+          ALN *alnp = g_array_index(bc->alignArr, ALN*, i);
+          char *alnpSeq = alnGetSeq(alnp);
+          
+          if (isalpha(alnpSeq[j])) 
+            n++;
+	}
+      
+      if (n > (int)bc->alignArr->len / 2) 
+        retval++;
+    }
+
+  return retval;
+}
+
+
+/* Output a.a. probabilities in HMMER format.
+
+   Disabled counting of match-state residues only (script HMM-random does that already)
+
+   Disabled pseudocounts - not sure what the best way is.
+*/
+void outputProbs(BelvuContext *bc, FILE *fil)
+{
+  /* From swissprot 33:
+
+     Ala (A) 7.54   Gln (Q) 4.02   Leu (L) 9.31   Ser (S) 7.19
+     Arg (R) 5.15   Glu (E) 6.31   Lys (K) 5.94   Thr (T) 5.76
+     Asn (N) 4.54   Gly (G) 6.86   Met (M) 2.36   Trp (W) 1.26
+     Asp (D) 5.29   His (H) 2.23   Phe (F) 4.06   Tyr (Y) 3.21
+     Cys (C) 1.70   Ile (I) 5.72   Pro (P) 4.91   Val (V) 6.52
+  */
+  
+  double f_sean[21] = {
+    0.0, 
+    .08713, .03347, .04687, .04953, .03977, .08861, .03362, .03689, .08048, .08536, 
+    .01475, .04043, .05068, .03826, .04090, .06958, .05854, .06472, .01049, .02992
+  };
+
+  double p = 0.0;
+  int i = 0, c[21], n=0, nmat = 0;
+  char *cp = NULL;
+
+  for (i = 1; i <= 20; i++) 
+    c[i] = 0;
+
+  for (i = 0; i < (int)bc->alignArr->len; ++i)
+    {
+      ALN *alnp = g_array_index(bc->alignArr, ALN*, i);
+      cp = alnGetSeq(alnp);
+
+      for (; *cp; cp++)
+        {
+          if (a2b_sean[(unsigned char)(*cp)])
+            {
+              c[a2b_sean[(unsigned char)(*cp)]]++;
+              n++;
+            }
+        }
+    }
+
+  if (!n)
+    g_error("No residues found\n");
+
+  if (0) 
+    {
+      nmat = getMatchStates(bc);	/* Approximation, HMM may differ slightly */
+
+      if (!nmat) 
+        g_error("No match state columns found\n");
+      
+      g_message("Amino\n");
+      
+      for (i = 1; i <= 20; i++) 
+        {
+          /* One way:  p = ((double)c[i]/nmat + 20*f_sean[i]) / (double)(n/nmat+20);*/
+          /* Other way: */
+          p = ((double)c[i] + 20*f_sean[i]) / (double)(n+20);
+
+          if (p < 0.000001) 
+            p = 0.000001; /* Must not be zero */
+
+          g_message("%f ", p);
+          /* printf("   %d %f %d \n", c[i], f[i], n);*/
+        }
+    }
+  else
+    {
+      g_message("Amino\n");
+      for (i = 1; i <= 20; ++i) 
+        {
+          p = (double)c[i] / (double)n;
+          if (p < 0.000001) p = 0.000001; /* Must not be zero */
+          g_message("%f ", p);
+	}
+    }
+    
+  g_message("\n");
+  
+  fclose(fil);
+  fflush(fil);
+
+  bc->saved = TRUE;
+}
+
+
+
+/* Calculate the identity of each sequence against each other, and print the
+ * results to stdout. */
+void listIdentity(BelvuContext *bc)
+{
+  /* This may take some time, so feed back to the user what is happening. */
+  g_message_info("Outputting identities...\n");
+  setBusyCursor(bc, TRUE);
+
+  int i=0,j=0,n=0 ;
+  double totsc=0, maxsc=0, minsc=1000000,
+         totid=0.0, maxid=0.0, minid=100.0;
+  
+  for (i = n = 0; i < (int)bc->alignArr->len - 1; ++i) 
+    {
+      /* Update the display periodically, otherwise the busy cursor might not
+       * get updated (e.g. if we were outside the main window when we set the 
+       * cursor and the user later enters the window). */
+      while (gtk_events_pending())
+        gtk_main_iteration();
+
+      ALN *alni = g_array_index(bc->alignArr, ALN*, i);
+      
+      if (alni->markup > 0) /* ignore markup lines */
+        continue;
+
+      for (j = i+1; j < (int)bc->alignArr->len; ++j) 
+        {
+          ALN *alnj = g_array_index(bc->alignArr, ALN*, j);
+
+          if (alnj->markup > 0) /* ignore markup lines */
+            continue;
+
+          double id = percentIdentity(alnGetSeq(alni), alnGetSeq(alnj), bc->penalize_gaps);
+          totid += id;
+
+          if (id > maxid) 
+            maxid = id;
+          
+          if (id < minid) 
+            minid = id;
+      
+          double sc = score(alnGetSeq(alni), alnGetSeq(alnj), bc->penalize_gaps);
+          totsc += sc;
+          
+          if (sc > maxsc) 
+            maxsc = sc;
+          
+          if (sc < minsc) 
+            minsc = sc;
+          
+          g_message("%s/%d-%d and %s/%d-%d are %.1f%% identical, score=%f\n",
+                    alni->name, alni->start, alni->end,
+                    alnj->name, alnj->start, alnj->end,
+                    id, sc);
+          
+          ++n;
+        }
+      g_message("\n");
+    }
+
+  g_message("Maximum %%id was: %.1f\n", maxid);
+  g_message("Minimum %%id was: %.1f\n", minid);
+  g_message("Mean    %%id was: %.1f\n", totid/n);
+  g_message("Maximum score was: %.1f\n", maxsc);
+  g_message("Minimum score was: %.1f\n", minsc);
+  g_message("Mean    score was: %.1f\n", (double)totsc/n);
+
+  setBusyCursor(bc, FALSE);
+  g_message_info("Finished outputting identities.\n");
+}
+
+
+static void onDestroySpawnedWindow(GtkWidget *window, gpointer data)
+{
+  /* We must remove the window from the list of spawned windows */
+  BelvuContext *bc = (BelvuContext*)data;
+  bc->spawnedWindows = g_slist_remove(bc->spawnedWindows, window);
+}
+
+
+void fetchAln(BelvuContext *bc, ALN *alnp)
+{
+  GError *error = NULL;
+
+  if (bc->useWWWFetch)
+    {
+      /* Get the URL from the enviroment var (or use the hard-coded default
+       * value) */
+      char  *env, url[1025]="";
+      
+      if ((env = getenv(FETCH_URL_ENV_VAR)) )
+	strcpy(url, env);
+      else
+	strcpy(url, DEFAULT_FETCH_URL);
+
+      /* Add the sequence name to the url. The URL should be a format string
+       * containing '%s' for the name. */
+      char *cp = strchr(url, '%');
+      
+      if (cp)
+        ++cp;
+      
+      if (!cp || *cp != 's')
+        {
+          g_critical("Invalid URL string %s.\nThe URL must contain the search string \"%%s\", which will be replaced with the sequence name.\n", url);
+        }
+      else
+        {
+          char *link = g_strdup_printf(url, alnp->name);
+          
+          g_message_info("Opening URL: %s\n", link);
+          seqtoolsLaunchWebBrowser(link, &error);
+          
+          g_free(link);
+        }
+    }
+  else
+    {
+      char  *env, fetchProg[1025]="";
+      
+      if ((env = getenv(FETCH_PROG_ENV_VAR)) )
+        strcpy(fetchProg, env);
+      else
+        strcpy(fetchProg, DEFAULT_FETCH_PROG);
+
+      char *path = g_find_program_in_path(fetchProg);
+      
+      if (!path)
+        {
+          g_warning("Executable '%s' not found in path: %s\n", fetchProg, getenv("PATH"));
+        }
+      else
+        {
+          g_free(path);
+          
+          char *cmd = g_strdup_printf("%s '%s' &", fetchProg, alnp->name);
+      
+          GtkWidget *pfetchWin = externalCommand(cmd, BELVU_TITLE, bc->belvuAlignment, &error);
+      
+          if (pfetchWin)
+            {
+              const gchar *env = g_getenv(FONT_SIZE_ENV_VAR);
+              if (env)
+                widgetSetFontSizeAndCheck(pfetchWin, convertStringToInt(env));
+              
+              /* Add the window to our list of spawned windows */
+              bc->spawnedWindows = g_slist_prepend(bc->spawnedWindows, pfetchWin);
+              g_signal_connect(G_OBJECT(pfetchWin), "destroy", G_CALLBACK(onDestroySpawnedWindow), bc);
+            }
+      
+          g_free(cmd);
+        }
+    }
+  
+  reportAndClearIfError(&error, G_LOG_LEVEL_CRITICAL);
+
+}
+
+
+
+/* Utility to return true if the given alignment is highlighted (i.e. has the
+ * same name as the selected alignment) */
+gboolean alignmentHighlighted(BelvuContext *bc, ALN *alnp)
+{
+  /* Return true if this alignment has the same name as the selected alignment */
+  return (bc->selectedAln && stringsEqual(alnp->name, bc->selectedAln->name, TRUE));
+}
+
+
+/***********************************************************
+ *                        Cursors                          *
+ ***********************************************************/
+
+/* Utility to set/unset the busy cursor on all open toplevel windows */
+void setBusyCursor(BelvuContext *bc, const gboolean busy)
+{
+  GdkCursor *cursor = bc->defaultCursor;
+
+  if (busy)
+    cursor = bc->busyCursor;
+  else if (bc->removingSeqs)
+    cursor = bc->removeSeqsCursor;
+
+  if (bc->belvuWindow && bc->belvuWindow->window)
+    gdk_window_set_cursor(bc->belvuWindow->window, cursor);
+
+  if (bc->belvuTree && bc->belvuTree->window)
+    gdk_window_set_cursor(bc->belvuTree->window, cursor);
+
+  if (bc->consPlot && bc->consPlot->window)
+    gdk_window_set_cursor(bc->consPlot->window, cursor);
+
+  if (bc->orgsWindow && bc->orgsWindow->window)
+    gdk_window_set_cursor(bc->orgsWindow->window, cursor);
+
+  /* Force cursor to change immediately */
+  while (gtk_events_pending())
+    gtk_main_iteration();
+}
+
diff --git a/belvuApp/belvuAlignment.cpp b/belvuApp/belvuAlignment.cpp
new file mode 100644
index 0000000..eb05eb9
--- /dev/null
+++ b/belvuApp/belvuAlignment.cpp
@@ -0,0 +1,1861 @@
+/*  File: belvuAlignment.c
+ *  Author: Gemma Barson, 2011-04-12
+ *  Copyright (c) 2011 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: see belvuAlignment.h
+ *----------------------------------------------------------------------------
+ */
+
+#include "belvuApp/belvuAlignment.hpp"
+#include "belvuApp/belvuWindow.hpp"
+#include <math.h>
+#include <algorithm>
+
+using namespace std;
+
+
+#define DEFAULT_XPAD                            2
+#define DEFAULT_YPAD                            4
+#define DEFAULT_PADDING_CHARS                   1  /* number of char widths to use to pad between columns */
+#define SEQ_AREA_PADDING                        2  /* padding around the sequence area, in pixels */
+#define DEFAULT_NAME_COLUMN_PADDING_CHARS       2  /* number of char widths to use to pad after the name column */
+#define WRAP_DISPLAY_PADDING_CHARS              4
+#define TICKMARK_INTERVAL                       10 /* number of coords between each tick marker in the sequence area header */
+#define MAJOR_TICKMARK_HEIGHT                   6  /* height of major tick marks in the sequence area header */
+#define MINOR_TICKMARK_HEIGHT                   3  /* height of minor tick marks in the sequence area header */
+
+/* Local function declarations */
+static void               bg2fgColor(BelvuContext *bc, GdkColor *bgColor, GdkColor *result);
+
+
+/* Properties specific to the belvu alignment */
+class BelvuAlignmentProperties
+{
+public:
+  GtkWidget *widget;
+  BelvuContext *bc;                 /* The belvu context */
+  
+  GtkWidget *columnsArea;           /* Drawing widget for the columns (i.e. name and coord columns) */
+  GtkWidget *columnsHeader;         /* Drawing widget for the header for the the columns area */
+  GtkWidget *seqArea;               /* Drawing widget for the actual sequence */
+  GtkWidget *seqHeader;             /* Drawing widget for the header for the sequence area */
+  GdkRectangle columnsRect;         /* Drawing area for the columns (i.e. name and coord columns) */
+  GdkRectangle seqRect;             /* Drawing area for the actual sequence */
+  GdkRectangle seqHeaderRect;       /* Drawing area for the sequence header */
+  GtkAdjustment *hAdjustment;       /* Controls horizontal scroll bar */
+  GtkAdjustment *vAdjustment;       /* Controls vertical scroll bar */
+  
+  int columnPadding;                /* Padding in between columns, in pixels */
+  int nameColumnPadding;            /* Padding after name column, in pixels */
+  char *title;                /* title to display at the top of the alignments */
+  int wrapWidth;                    /* Number of characters after which to wrap (or UNSET_INT for no wrapping) */
+  
+  gdouble charWidth;                /* The width of each character in the display */
+  gdouble charHeight;               /* The height of each character in the display */
+};
+
+
+/***********************************************************
+ *                         Properties                      *
+ ***********************************************************/
+
+static BelvuAlignmentProperties* belvuAlignmentGetProperties(GtkWidget *widget)
+{
+  return widget ? (BelvuAlignmentProperties*)(g_object_get_data(G_OBJECT(widget), "BelvuAlignmentProperties")) : NULL;
+}
+
+static void onDestroyBelvuAlignment(GtkWidget *belvuAlignment)
+{
+  BelvuAlignmentProperties *properties = belvuAlignmentGetProperties(belvuAlignment);
+
+  if (properties)
+    {
+      if (properties->title)
+        {
+          g_free(properties->title);
+          properties->title = NULL;
+        }
+      
+      /* Free the properties struct itself */
+      delete properties;
+      properties = NULL;
+      g_object_set_data(G_OBJECT(belvuAlignment), "BelvuAlignmentProperties", NULL);
+    }
+}
+
+
+/* Create the properties struct and initialise all values. */
+static void belvuAlignmentCreateProperties(GtkWidget *belvuAlignment, 
+                                           BelvuContext *bc,
+                                           GtkWidget *columnsArea,
+                                           GtkWidget *columnsHeader,
+                                           GtkWidget *seqArea,
+                                           GtkWidget *seqHeader,
+                                           GtkAdjustment *hAdjustment,
+                                           GtkAdjustment *vAdjustment,
+                                           const char *title,
+                                           const int wrapWidth)
+{
+  if (belvuAlignment)
+    {
+      BelvuAlignmentProperties *properties = new BelvuAlignmentProperties;
+      
+      properties->widget = belvuAlignment;
+      properties->bc = bc;
+      properties->columnsArea = columnsArea;
+      properties->columnsHeader = columnsHeader;
+      properties->seqArea = seqArea;
+      properties->seqHeader = seqHeader;
+      properties->columnPadding = 0; /* calculated in calculate-borders */
+      properties->hAdjustment = hAdjustment;
+      properties->vAdjustment = vAdjustment;
+      properties->title = g_strdup(title);
+      properties->wrapWidth = wrapWidth;
+      
+      properties->seqRect.x = 0;
+      properties->seqRect.y = DEFAULT_YPAD;
+      properties->seqHeaderRect.x = properties->seqRect.x;
+      properties->seqHeaderRect.y = DEFAULT_YPAD;
+      properties->columnsRect.x = DEFAULT_XPAD;
+      properties->columnsRect.y = DEFAULT_YPAD;
+
+      /* Find a fixed-width font */
+      const char *fontFamily = findFixedWidthFont(properties->seqArea);
+      PangoFontDescription *fontDesc = pango_font_description_from_string(fontFamily);
+      gtk_widget_modify_font(seqArea, fontDesc);
+
+      if (columnsArea)
+        gtk_widget_modify_font(columnsArea, fontDesc);
+
+      g_object_set_data(G_OBJECT(belvuAlignment), "BelvuAlignmentProperties", properties);
+      g_signal_connect(G_OBJECT(belvuAlignment), "destroy", G_CALLBACK (onDestroyBelvuAlignment), NULL);
+    }
+}
+
+/***********************************************************
+ *                         Misc                         *
+ ***********************************************************/
+
+/* This should be called after the font has changed. It caches
+ * the new font size in the properties and recalculates all sizes */
+void onBelvuAlignmentFontSizeChanged(GtkWidget *belvuAlignment)
+{
+  if (!belvuAlignment)
+    return;
+
+  BelvuAlignmentProperties *properties = belvuAlignmentGetProperties(belvuAlignment);
+  
+  if (!properties || !properties->seqArea)
+    return;
+  
+  getFontCharSize(properties->seqArea, properties->seqArea->style->font_desc, &properties->charWidth, &properties->charHeight, TRUE);
+
+  /* Update the column padding, which is based on the character width. We use
+   * slightly different padding if the view is wrapped because we don't draw 
+   * column separators */
+  if (properties->wrapWidth != UNSET_INT) /* wrapped */
+    {
+      properties->columnPadding = (DEFAULT_PADDING_CHARS * properties->charWidth);
+      properties->nameColumnPadding = (DEFAULT_NAME_COLUMN_PADDING_CHARS * properties->charWidth);
+    }
+  else /* unwrapped */
+    {
+      properties->columnPadding = (DEFAULT_PADDING_CHARS * properties->charWidth) / 2;
+      properties->nameColumnPadding = 0;
+    }
+  
+  
+  /* The font size affects the height of the header line */
+  properties->seqHeaderRect.height = properties->charHeight + DEFAULT_YPAD;
+
+  if (properties->seqHeader)
+    gtk_widget_set_size_request(properties->seqHeader, -1, properties->seqHeaderRect.y + properties->seqHeaderRect.height);
+
+  /* Set the size of the header columns widget */
+  updateHeaderColumnsSize(belvuAlignment);
+
+  /* Recalculate the size of the drawing areas */
+  calculateDrawingSizes(belvuAlignment);
+
+  belvuAlignmentRedrawAll(belvuAlignment);
+}
+
+
+
+/***********************************************************
+ *                         Drawing                         *
+ ***********************************************************/
+
+/* Refresh all */
+void belvuAlignmentRefreshAll(GtkWidget *belvuAlignment)
+{
+  gtk_widget_queue_draw(belvuAlignment);
+}
+
+
+/* Clear cached drawables and redraw all */
+void belvuAlignmentRedrawAll(GtkWidget *belvuAlignment)
+{
+  BelvuAlignmentProperties *properties = belvuAlignmentGetProperties(belvuAlignment);
+
+  if (properties->seqArea)
+    widgetClearCachedDrawable(properties->seqArea, NULL);
+  
+  if (properties->seqHeader)
+    widgetClearCachedDrawable(properties->seqHeader, NULL);
+  
+  if (properties->columnsArea)
+    widgetClearCachedDrawable(properties->columnsArea, NULL);
+
+  if (properties->columnsHeader)
+    widgetClearCachedDrawable(properties->columnsHeader, NULL);
+  
+  gtk_widget_queue_draw(belvuAlignment);
+}
+
+
+/* Clear cached drawables for the sequence area only */
+static void belvuAlignmentRedrawSequenceArea(GtkWidget *belvuAlignment)
+{
+  BelvuAlignmentProperties *properties = belvuAlignmentGetProperties(belvuAlignment);
+  
+  if (properties->seqArea)
+    widgetClearCachedDrawable(properties->seqArea, NULL);
+  
+  if (properties->seqHeader)
+    widgetClearCachedDrawable(properties->seqHeader, NULL);
+  
+  gtk_widget_queue_draw(belvuAlignment);
+}
+
+
+/* Find the background color of the given residue index i in the given alignment */
+static void findResidueBGcolor(BelvuContext *bc, ALN* alnp, int i, const gboolean isSelected, GdkColor *result) 
+{
+  int colorNum = 0;
+  char *alnpSeq = alnGetSeq(alnp);
+  
+  if (!alnpSeq || i >= alnGetSeqLen(alnp))
+    colorNum = WHITE;
+  else if (bc->lowercaseOn && alnpSeq[i] >= 'a' && alnpSeq[i] <= 'z') 
+    colorNum = ORANGE;
+  else if (alnp->nocolor)
+    colorNum = BOXCOLOR;
+  else if (alnp->markup)
+    colorNum = getMarkupColor(alnpSeq[i]);
+  else if (colorByConservation(bc) || colorByResId(bc))
+    colorNum = getConservColor(bc, alnpSeq[i], i);
+  else
+    colorNum = getColor(alnpSeq[i]);
+
+  convertColorNumToGdkColor(colorNum, isSelected, result);
+}
+
+
+/* Draw a single row in the columns area */
+static void drawSingleColumn(GtkWidget *widget,
+                             GdkDrawable *drawable, 
+                             BelvuAlignmentProperties *properties,
+                             ALN *alnp, 
+                             const int lineNum)
+{
+  int x = 0;
+  const int y = properties->columnsRect.y + (properties->charHeight * lineNum);
+  
+  const gboolean highlightAln = alignmentHighlighted(properties->bc, alnp);
+  GdkGC *gc = gdk_gc_new(drawable);
+  
+  if (highlightAln || alnp->color != WHITE)
+    {
+      /* Highlight the background */
+      GdkColor bgColor;
+      convertColorNumToGdkColor(alnp->color, highlightAln, &bgColor);
+      
+      gdk_gc_set_foreground(gc, &bgColor);
+      gdk_draw_rectangle(drawable, gc, TRUE, properties->columnsRect.x, y, properties->columnsRect.width, properties->charHeight);
+    }
+  
+  GdkColor *textColor = getGdkColor(BELCOLOR_ALIGN_TEXT, properties->bc->defaultColors, highlightAln, FALSE);
+  gdk_gc_set_foreground(gc, textColor);
+
+  /* Draw the name */
+  if (alnp->name)
+    {
+      x += properties->columnPadding;
+      drawText(widget, drawable, gc, x, y, alnp->name, NULL, NULL);
+      x += (properties->bc->maxNameLen * properties->charWidth) + properties->columnPadding;
+    }
+  
+  /* Draw the coords (but only if this is not GC markup; note that we always
+   * draw the column separator lines for the coords, though) */
+  gdk_draw_line(drawable, gc, x, y, x, y + properties->charHeight);
+  x += properties->columnPadding + properties->bc->maxStartLen * properties->charWidth; /* right-hand edge of column for right-aligned text */
+
+  if (alnp->markup != GC)
+    drawIntAsText(widget, drawable, gc, x, y, alnp->start);
+  
+  x += properties->columnPadding;
+  gdk_draw_line(drawable, gc, x, y, x, y + properties->charHeight);
+  
+  x += properties->columnPadding + properties->bc->maxEndLen * properties->charWidth; /* right-aligned */
+
+  if (alnp->markup != GC)
+    drawIntAsText(widget, drawable, gc, x, y, alnp->end);
+
+  x += properties->columnPadding;
+  gdk_draw_line(drawable, gc, x, y, x, y + properties->charHeight);
+  
+  /* Draw the score, if displaying scores (and if not a markup row) */
+  if (properties->bc->displayScores)
+    {
+      x += (properties->bc->maxScoreLen * properties->charWidth) + properties->columnPadding;
+      
+      if (!alnp->markup)
+        drawDoubleAsText(widget, drawable, gc, x, y, alnp->score);
+      
+      x += properties->columnPadding;
+      gdk_draw_line(drawable, gc, x, y, x, y + properties->charHeight);
+    }
+  
+  g_object_unref(gc);
+}
+
+
+/* Utility to return true if the given alignment is selected */
+static gboolean alignmentSelected(BelvuContext *bc, ALN *alnp)
+{
+  /* Return true if this alignment has the same name as the selected alignment */
+  return (bc->selectedAln && bc->selectedAln == alnp);
+}
+
+
+/* Draw a single character in the given sequence. In standard mode, fgColorsOnly
+ * should be false and the function will draw the background color for the 
+ * base (and will not draw any text). This is because drawing each character
+ * separately is slow, so all text in the default color is drawn at once
+ * by the calling function.
+ * However, if fgColorsOnly is true then this function checks if the required
+ * foreground color is different to the default and, if so, draws the character
+ * in that color. (It does not draw background colors in this mode.) */
+static void drawSequenceChar(BelvuAlignmentProperties *properties, 
+                             ALN *alnp,
+                             const int colIdx,
+                             const gboolean rowHighlighted,
+                             GtkWidget *widget,
+                             GdkDrawable *drawable,
+                             GdkGC *gc,
+                             GdkColor *defaultFgColor,
+                             const gboolean fgColorsOnly,
+                             const int x, 
+                             const int y)
+{
+  if (!fgColorsOnly)
+    {
+      /* Draw the background */
+      GdkColor bgColor;
+      findResidueBGcolor(properties->bc, alnp, colIdx, rowHighlighted, &bgColor);
+      gdk_gc_set_foreground(gc, &bgColor);
+      
+      gdk_draw_rectangle(drawable, gc, TRUE, x, y, properties->charWidth, properties->charHeight);
+    }
+  else if (colIdx < alnGetSeqLen(alnp) && colorByConservation(properties->bc))
+    {
+      /* Draw the text if it is in a different color to the default. This is only
+       * possible in color by conservation mode. We get the text colour from the 
+       * background color */
+      GdkColor fgColor, bgColor;
+      findResidueBGcolor(properties->bc, alnp, colIdx, rowHighlighted, &bgColor);
+      bg2fgColor(properties->bc, &bgColor, &fgColor);
+      
+      if (!colorsEqual(&fgColor, defaultFgColor))
+        {
+          gdk_gc_set_foreground(gc, &fgColor);
+          
+          char displayText[2];
+          displayText[0] = alnGetSeq(alnp)[colIdx];
+          displayText[1] = '\0';
+          drawText(widget, drawable, gc, x, y, displayText, NULL, NULL);
+        }
+    }
+  
+}
+
+
+/* Draw a single line in the sequence area.
+ * 
+ * This is rather convoluted in an attempt to maximise speed.  Drawing of text in
+ * GTK is particularly slow, and is best done a whole line at a time, rather than
+ * drawing individual characters.  The characters may each have a different background
+ * colour, so we draw the background colours first and then draw the text over the top
+ * a whole line at a time.  A further problem, though, is that some characters may
+ * have a different foreground colour to others on the same line (in colour-by-conservation
+ * mode), so some characters do need to be drawn individually.  There are usually
+ * relatively few characters that this affects, though, so we continue to draw the
+ * whole line in the default colour first, and then we look to see if any individual
+ * characters have a different foreground colour and just draw those over the top.
+*/
+static void drawSingleSequence(GtkWidget *widget,
+                                GdkDrawable *drawable, 
+                                BelvuAlignmentProperties *properties,
+                                ALN *alnp, 
+                                const int lineNum)
+{
+  if (!alnGetSeq(alnp))
+    return;
+  
+  const int startX = properties->seqRect.x;
+  int x = startX;
+  const int y = properties->seqRect.y + (properties->charHeight * lineNum);
+  
+  GdkGC *gc = gdk_gc_new(drawable);
+  GtkAdjustment *hAdjustment = properties->hAdjustment;
+  
+  GdkColor *defaultFgColor = getGdkColor(BELCOLOR_ALIGN_TEXT, properties->bc->defaultColors, FALSE, FALSE);
+  
+  /* Loop through each column in the current display range and color
+   * the according to the relevant highlight color */
+  int colIdx = hAdjustment->value;
+  int iMax = min(properties->bc->maxLen, (int)hAdjustment->value + (int)hAdjustment->page_size);
+  const gboolean rowHighlighted = alignmentSelected(properties->bc, alnp);
+  
+  if (properties->bc->displayColors)
+    {
+      for ( ; colIdx < iMax; ++colIdx)
+        {
+          drawSequenceChar(properties, alnp, colIdx, rowHighlighted, widget, drawable, gc, defaultFgColor, FALSE, x, y);
+          x += properties->charWidth;
+        }
+    }  
+  else if (rowHighlighted)
+    {
+      /* We're not displaying colors for individual chars, but we still need to
+       * highlight the background if the row is selected. */
+      GdkColor color;
+      convertColorNumToGdkColor(WHITE, TRUE, &color);
+      gdk_gc_set_foreground(gc, &color);
+      
+      gdk_draw_rectangle(drawable, gc, TRUE, startX, y, properties->seqRect.width, properties->charHeight);
+    }
+  
+  
+  /* Draw the sequence text (current display range only) */
+  if (alnGetSeq(alnp))
+    {
+      GdkColor *textColor = getGdkColor(BELCOLOR_ALIGN_TEXT, properties->bc->defaultColors, FALSE, FALSE);
+      gdk_gc_set_foreground(gc, textColor);
+
+      /* Start at the number of characters into the string where the horizontal 
+       * scrollbar indicates we are (making sure that's not out of the end of the
+       * string) */
+      if ((int)hAdjustment->value < alnGetSeqLen(alnp))
+        {
+          char *cp = alnGetSeq(alnp) + (int)hAdjustment->value;
+          char *displayText = g_strndup(cp, iMax - properties->hAdjustment->value);
+      
+          drawText(widget, drawable, gc, startX, y, displayText, NULL, NULL);
+      
+          g_free(displayText);
+        }
+    }
+  
+  /* Loop again and draw any characters that are not in the default text color.
+   * We don't draw every character individually because the pango layout calls
+   * are expensive, but we can't really avoid it when some characters are in
+   * difference colors.  (We could put markup in the pango layout instead, but
+   * generally the number of characters in a non-default color is small, so 
+   * this should be good enough for most cases.) */
+  if (properties->bc->displayColors)
+    {
+      for (x = startX, colIdx = hAdjustment->value; colIdx < iMax; ++colIdx)
+        {
+          drawSequenceChar(properties, alnp, colIdx, rowHighlighted, widget, drawable, gc, defaultFgColor, TRUE, x, y);
+          x += properties->charWidth;
+        }
+    } 
+  
+  g_object_unref(gc);
+}
+
+
+/* Return the foreground color selected for a given
+   background color in color-by-conservation mode 
+ */
+static void bg2fgColor(BelvuContext *bc, GdkColor *bgColor, GdkColor *result)
+{
+  int fgColorNum = BLACK; /* default colour for uncoloured or markup */
+  
+  /* See if the given bgcolor matches the max-conservation background colour */
+  int testColor = *getConsColor(bc, CONS_LEVEL_MAX, FALSE);
+  convertColorNumToGdkColor(testColor, FALSE, result);
+  
+  if (colorsEqual(bgColor, result))
+    {
+      fgColorNum = *getConsColor(bc, CONS_LEVEL_MAX, TRUE);
+    }
+  else
+    {
+      /* Try the mid-conservation colour */
+      int testColor = *getConsColor(bc, CONS_LEVEL_MID, FALSE);
+      convertColorNumToGdkColor(testColor, FALSE, result);
+      
+      if (colorsEqual(bgColor, result))
+        {
+          fgColorNum = *getConsColor(bc, CONS_LEVEL_MID, TRUE);
+        }
+      else
+        {
+          /* Lastly, try the low-conservation colour */
+          int testColor = *getConsColor(bc, CONS_LEVEL_LOW, FALSE);
+          convertColorNumToGdkColor(testColor, FALSE, result);
+          
+          if (colorsEqual(bgColor, result))
+            fgColorNum = *getConsColor(bc, CONS_LEVEL_LOW, TRUE);
+        }
+    }
+
+  /* Convert the foreground colour number into the GdkColor result. */
+  convertColorNumToGdkColor(fgColorNum, FALSE, result);
+}
+
+
+static void drawWrappedSequences(GtkWidget *widget, GdkDrawable *drawable, BelvuAlignmentProperties *properties)
+{
+  /*  Column makeup:
+   space, maxNameLen, 2xspace, maxEndLen, space, maxLen, maxEndLen
+   i.e. 4 spaces
+   */
+  
+  int i, oldpos, collapseRes = 0, collapsePos = 0, collapseOn = 0;
+  int numSpaces = WRAP_DISPLAY_PADDING_CHARS;
+  char collapseStr[10],
+  ch[2] = " ";
+  static int *pos=0;                    /* Current residue position of sequence j */
+  
+  GdkColor bgColor;
+  GdkColor *pBgColor = &bgColor;
+  GdkGC *gcText = gdk_gc_new(drawable);
+  GdkGC *gc = gdk_gc_new(drawable);
+  
+  BelvuContext *bc = properties->bc;
+  
+  
+  /* Initialise the sequence and position array */
+  char *seq = (char*)g_malloc(properties->wrapWidth + 1);
+  
+  if (!pos) 
+    pos = (int *)g_malloc(bc->alignArr->len * sizeof(int *));
+  
+  int j = 0;
+  for (j = 0; j < (int)bc->alignArr->len; ++j) 
+    pos[j] = g_array_index(bc->alignArr, ALN*, j)->start;
+  
+  
+  int paragraph = 0;
+  int totCollapsed = 0;
+  int line = 1; /* leave a blank line (line=0) at the top for spacing */
+  
+  if (properties->title)
+    {
+      const int x = properties->columnPadding;
+      const int y = line * properties->charHeight;
+      
+      drawText(widget, drawable, gcText, x, y, properties->title, NULL, NULL);
+      line += 2; /* increment, and also add another blank line for spacing */
+    }
+  
+  gboolean quit = FALSE;
+  while (!quit && paragraph * properties->wrapWidth + totCollapsed < bc->maxLen)
+    {
+      gboolean emptyPara = TRUE;
+      
+      for (j = 0; j < (int)bc->alignArr->len; ++j)
+        {
+          ALN *alnp = g_array_index(bc->alignArr, ALN*, j);
+          char *alnpSeq = alnGetSeq(alnp);
+          
+          if (alnp->hide) 
+            continue;
+          
+          int alnstart = paragraph*properties->wrapWidth +totCollapsed; 
+          int alnlen = ( (paragraph+1)*properties->wrapWidth +totCollapsed < bc->maxLen ? properties->wrapWidth : bc->maxLen - alnstart );
+          int alnend = min(alnstart + alnlen, alnGetSeqLen(alnp));
+          
+          gboolean emptyLine = TRUE;
+          for (i = alnstart; i < alnend; ++i) 
+            {
+              if (alnpSeq && !isGap(alnpSeq[i]) && alnpSeq[i] != ' ') 
+                {
+                  emptyLine = FALSE;
+                  emptyPara = FALSE;
+                  break;
+                }
+            }
+          
+          if (!emptyLine) 
+            {
+              const int y = line * properties->charHeight;
+              
+              if (y > properties->seqRect.y + properties->seqRect.height)
+                {
+                  quit = TRUE;
+                  break;
+                }
+
+              for (collapsePos = 0, oldpos = pos[j], i = alnstart; i < alnend; i++) 
+                {       
+                  const int xpos = bc->maxNameLen + bc->maxEndLen + numSpaces + i - alnstart - collapsePos;
+                  const int x = xpos * properties->charWidth;
+                  
+                  if (alnpSeq[i] == '[') 
+                    {
+                      /* Experimental - collapse block: "[" -> Collapse start, "]" -> Collapse end, e.g.
+                       1 S[..........]FKSJFE
+                       2 L[RVLKLKYKNS]KDEJHF
+                       3 P[RL......DK]FKEJFJ
+                                 |
+                                 V
+                       1 S[  0]FKSJFE
+                       2 L[ 10]KDEJHF
+                       3 P[  4]FKEJFJ
+                       
+                       Minimum collapse = 5 chars. The system depends on absolute coherence in format; 
+                       very strange results will be generated otherwise. Edges need to be avoided manually.
+                       */
+                      collapseOn = 1;
+                      collapsePos += 1;
+                      collapseRes = 0;
+                      continue;
+                    }
+                  
+                  if (alnpSeq[i] == ']') 
+                    {
+                      collapseOn = 0;
+                      collapsePos -= 4;
+                      alnend -= 3;
+                      
+                      sprintf(collapseStr, "[%3d]", collapseRes);
+                      drawText(widget, drawable, gcText, x, y, collapseStr, NULL, NULL);
+
+                      continue;
+                    }
+                  
+                  if (collapseOn) 
+                    {
+                      collapsePos++;
+                      if (!isGap(alnpSeq[i])) 
+                        {
+                          collapseRes++;
+                          pos[j]++;
+                        }
+                      alnend++;
+                      continue;
+                    }
+                  
+                  
+                  if (!isGap(alnpSeq[i]) && alnpSeq[i] != ' ') 
+                    {
+                      findResidueBGcolor(bc, alnp, i, FALSE, pBgColor);
+                      gdk_gc_set_foreground(gc, pBgColor);
+                      
+                      gdk_draw_rectangle(drawable, gc, TRUE, x, y, properties->charWidth, properties->charHeight);
+                      
+                      pos[j]++;
+                    }
+                  
+                  /* Foreground color */
+                  GdkColor fgColor;
+                  if (colorByConservation(bc))
+                    bg2fgColor(bc, pBgColor, &fgColor);
+                  else
+                    convertColorNumToGdkColor(BLACK, FALSE, &fgColor);
+                  
+                  gdk_gc_set_foreground(gc, &fgColor);
+
+                  *ch = alnpSeq[i];
+                  drawText(widget, drawable, gc, x, y, ch, NULL, NULL);
+                }
+          
+              drawText(widget, drawable, gcText, properties->charWidth, y, alnp->name, NULL, NULL);
+              
+              if (!alnp->markup) 
+                {
+                  char *tmpStr = g_strdup_printf("%*d", bc->maxEndLen, oldpos);
+                  drawText(widget, drawable, gcText, (bc->maxNameLen + 3) * properties->charWidth, y, tmpStr, NULL, NULL);
+                  g_free(tmpStr);
+                  
+                  if (alnend == bc->maxLen) 
+                    {
+                      char *tmpStr = g_strdup_printf("%-d", pos[j] - 1);
+                      drawText(widget, drawable, gcText, (bc->maxNameLen + bc->maxEndLen + alnlen + 5) * properties->charWidth, y, tmpStr, NULL, NULL);
+                      g_free(tmpStr);
+                    }
+                }
+              
+              line++;
+            }
+        }
+
+      /* Move to next paragraph */
+      paragraph++;
+      
+      /* Add a blank line (unless nothing was drawn for this paragraph) */
+      if (!emptyPara)
+        line++;
+      
+      totCollapsed += collapsePos;
+    }
+  
+  g_free(seq);
+  g_object_unref(gc);
+  g_object_unref(gcText);
+
+  /* Set the layout size now we know how big it is */
+  properties->seqRect.height = line * properties->charHeight;
+  
+  gtk_layout_set_size(GTK_LAYOUT(properties->seqArea),
+                      properties->seqRect.x + properties->seqRect.width,
+                      properties->seqRect.y + properties->seqRect.height);
+  
+  if (properties->hAdjustment)
+    gtk_adjustment_changed(properties->hAdjustment); /* signal that the scroll range has changed */
+  
+  if (properties->vAdjustment)
+    gtk_adjustment_changed(properties->vAdjustment);
+}
+
+
+/* Draw the header line for the columns section */
+static void drawBelvuColumnsHeader(GtkWidget *widget, GdkDrawable *drawable, BelvuAlignmentProperties *properties)
+{
+  BelvuContext *bc = properties->bc;
+  GdkGC *gc = gdk_gc_new(drawable);
+
+  /* Draw the summary line, which shows the number of sequences & alignment length */
+  int x = properties->columnPadding;
+  int y = DEFAULT_YPAD;
+  
+  char *tmpStr = g_strdup_printf("(%dx%d)", bc->alignArr->len, bc->maxLen);
+  
+  drawText(widget, drawable, gc, x, y, tmpStr, NULL, NULL);
+  y += properties->charHeight + DEFAULT_YPAD - 1;
+  
+  g_free(tmpStr);
+  
+  /* Draw a horizontal separator line */
+  x = 0;
+  gdk_draw_line(drawable, gc, x, y, x + properties->columnsRect.width, y);
+  
+  g_object_unref(gc);
+}
+
+
+/* Draw the alignment view */
+static void drawBelvuColumns(GtkWidget *widget, GdkDrawable *drawable, BelvuAlignmentProperties *properties)
+{
+  BelvuContext *bc = properties->bc;
+
+  /* Draw each visible alignment */
+  GtkAdjustment *vAdjustment = properties->vAdjustment;
+  
+  int i = vAdjustment->value;
+  int lineNum = 0;
+  const int iMax = min((int)bc->alignArr->len, (int)vAdjustment->value + (int)vAdjustment->page_size);
+  
+  for ( ; i < iMax; ++i)
+    {
+      ALN *alnp = g_array_index(bc->alignArr, ALN*, i);
+      
+      if (alnp && !alnp->hide)
+        {
+          drawSingleColumn(widget, drawable, properties, alnp, lineNum);
+          ++lineNum;
+        }
+    }
+}
+
+
+/* Draw the header line in the sequence area */
+static void drawBelvuSequenceHeader(GtkWidget *widget, GdkDrawable *drawable, BelvuAlignmentProperties *properties)
+{
+  /* The range starts at the current adjustment value (add one to make it a 1-based column number) */
+  IntRange displayRange = {(int)(properties->hAdjustment->value + 1),
+                           (int)min(properties->bc->maxLen, (int)properties->hAdjustment->value + (int)properties->hAdjustment->page_size)};
+  
+  drawHScale(widget, 
+             drawable,
+             &displayRange,
+             &properties->seqHeaderRect,
+             properties->charWidth, /* width between each minor tickmark */
+             TICKMARK_INTERVAL / 2, /* major markers half way between labels */
+             TICKMARK_INTERVAL,     /* interval between main tickmarks with labels */
+             MINOR_TICKMARK_HEIGHT,
+             MAJOR_TICKMARK_HEIGHT);
+}
+
+
+/* This draws some shading where the currently-selected column is in order to
+ * highlight it.  If there is no column selected, does nothing. */
+static void drawSelectedColumn(GtkWidget *widget, GdkDrawable *drawable, BelvuAlignmentProperties *properties)
+{
+  BelvuContext *bc = properties->bc;
+  
+  /* Quit if there is no column selected */
+  if (bc->highlightedCol < 1)
+    return;
+
+  GtkAdjustment *hAdjustment = properties->hAdjustment;
+  
+  const int iMin = properties->hAdjustment->value + 1;
+  const int iMax = min(bc->maxLen, (int)hAdjustment->value + (int)hAdjustment->page_size + 1);
+
+  /* Quit if the selected column is not in the visible range */
+  if (bc->highlightedCol < iMin || bc->highlightedCol > iMax)
+    return;
+
+  /* Get the column number as a zero-based index in the current range and 
+   * convert this to a distance from the left edge, which will be our x coord.
+   * Add half a char's width to get the x coord at the centre of the char. */
+  const int colIdx = bc->highlightedCol - iMin;
+  const int x = properties->seqRect.x + (colIdx * properties->charWidth) + (properties->charWidth / 2);
+  
+
+  /* Draw a vertical line at this index */
+  GdkGC *gc = gdk_gc_new(drawable);
+
+  GdkColor *color = getGdkColor(BELCOLOR_COLUMN_HIGHLIGHT, bc->defaultColors, FALSE, FALSE);
+  gdk_gc_set_foreground(gc, color);
+  gdk_gc_set_function(gc, GDK_INVERT);
+  gdk_draw_line(drawable, gc, x, 0, x, properties->seqRect.height);
+  
+  g_object_unref(gc);
+  
+//  /* Draw a transparent box at this index */
+//  cairo_t *cr = gdk_cairo_create(drawable);
+//  gdk_cairo_set_source_color(cr, color);
+//  cairo_rectangle(cr, x, 0, properties->charWidth, properties->seqRect.height);
+//  cairo_clip(cr);
+//  cairo_paint_with_alpha(cr, 0.2);
+//  cairo_destroy(cr);
+}
+
+
+/* Draw the alignment view */
+static void drawBelvuSequence(GtkWidget *widget, GdkDrawable *drawable, BelvuAlignmentProperties *properties)
+{
+  BelvuContext *bc = properties->bc;
+  
+  /* Draw each visible alignment */
+  GtkAdjustment *vAdjustment = properties->vAdjustment;
+  
+  int i = vAdjustment->value;
+  int lineNum = 0;
+  const int iMax = min((int)bc->alignArr->len, (int)vAdjustment->value + (int)vAdjustment->page_size);
+  
+  for ( ; i < iMax; ++i)
+    {
+      ALN *alnp = g_array_index(bc->alignArr, ALN*, i);
+      
+      if (alnp && !alnp->hide)
+        {
+          drawSingleSequence(widget, drawable, properties, alnp, lineNum);
+          ++lineNum;
+        }
+    }
+}
+
+
+/* Expose handler for the alignment section */
+static gboolean onExposeBelvuColumns(GtkWidget *widget, GdkEventExpose *event, gpointer data)
+{
+  GtkWidget *belvuAlignment = GTK_WIDGET(data);
+  GdkDrawable *window = GTK_LAYOUT(widget)->bin_window;
+
+  if (window)
+    {
+      GdkDrawable *bitmap = widgetGetDrawable(widget);
+      BelvuAlignmentProperties *properties = belvuAlignmentGetProperties(belvuAlignment);
+      
+      if (!bitmap)
+        {
+          /* There isn't a bitmap yet. Create it now. */
+          bitmap = createBlankSizedPixmap(widget, window, properties->columnsRect.width, properties->columnsRect.height);
+          drawBelvuColumns(widget, bitmap, properties);
+        }
+      
+      if (bitmap)
+        {
+          /* Push the bitmap onto the window */
+          GdkGC *gc = gdk_gc_new(window);
+          gdk_draw_drawable(window, gc, bitmap, 0, 0, 0, 0, -1, -1);
+          g_object_unref(gc);
+        }
+      else
+        {
+          g_warning("Failed to draw Belvu alignment [%p] - could not create bitmap.\n", widget);
+        }
+    }
+
+  return TRUE;
+}
+
+/* Expose handler for the alignment section */
+static gboolean onExposeBelvuSequence(GtkWidget *widget, GdkEventExpose *event, gpointer data)
+{
+  GtkWidget *belvuAlignment = GTK_WIDGET(data);
+  BelvuAlignmentProperties *properties = belvuAlignmentGetProperties(belvuAlignment);
+
+  GdkDrawable *window = GTK_LAYOUT(widget)->bin_window;
+  
+  if (window)
+    {
+      GdkDrawable *bitmap = widgetGetDrawable(widget);
+      
+      if (!bitmap)
+        {
+          /* There isn't a bitmap yet. Create it now. */
+          bitmap = createBlankSizedPixmap(widget, window, properties->seqRect.width, properties->seqRect.height);
+          
+          if (properties->wrapWidth == UNSET_INT)
+            drawBelvuSequence(widget, bitmap, properties);
+          else
+            drawWrappedSequences(widget, bitmap, properties);
+        }
+      
+      if (bitmap)
+        {
+          /* Push the bitmap onto the window */
+          GdkGC *gc = gdk_gc_new(window);
+          gdk_draw_drawable(window, gc, bitmap, 0, 0, 0, 0, -1, -1);
+          g_object_unref(gc);
+          
+          /* Draw the currently-selected column on top */
+          drawSelectedColumn(widget, window, properties);
+        }
+      else
+        {
+          g_warning("Failed to draw Belvu alignment [%p] - could not create bitmap.\n", widget);
+        }
+    }
+  
+  return TRUE;
+}
+
+
+/* Expose handler for the header widget of the alignment section */
+static gboolean onExposeBelvuSequenceHeader(GtkWidget *widget, GdkEventExpose *event, gpointer data)
+{
+  GtkWidget *belvuAlignment = GTK_WIDGET(data);
+  BelvuAlignmentProperties *properties = belvuAlignmentGetProperties(belvuAlignment);
+  GdkDrawable *window = widget->window;
+
+  if (window)
+    {
+      GdkDrawable *bitmap = widgetGetDrawable(widget);
+      
+      if (!bitmap)
+        {
+          /* There isn't a bitmap yet. Create it now. */
+          bitmap = createBlankSizedPixmap(widget, window, properties->seqRect.width, properties->seqRect.height);
+          drawBelvuSequenceHeader(widget, bitmap, properties);
+        }
+      if (bitmap)
+        {
+          /* Push the bitmap onto the window */
+          GdkGC *gc = gdk_gc_new(window);
+          gdk_draw_drawable(window, gc, bitmap, 0, 0, 0, 0, -1, -1);
+          g_object_unref(gc);
+        }
+      else
+        {
+          g_warning("Failed to draw Belvu alignment header [%p] - could not create bitmap.\n", widget);
+        }
+    }
+  
+  return TRUE;
+}
+
+
+/* Expose handler for the header widget of the columns section */
+static gboolean onExposeBelvuColumnsHeader(GtkWidget *widget, GdkEventExpose *event, gpointer data)
+{
+  GtkWidget *belvuAlignment = GTK_WIDGET(data);
+  BelvuAlignmentProperties *properties = belvuAlignmentGetProperties(belvuAlignment);
+  GdkDrawable *window = widget->window;
+  
+  if (window)
+    {
+      GdkDrawable *bitmap = widgetGetDrawable(widget);
+      
+      if (!bitmap)
+        {
+          /* There isn't a bitmap yet. Create it now. */
+          bitmap = createBlankSizedPixmap(widget, window, properties->seqRect.width, properties->seqRect.height);
+          drawBelvuColumnsHeader(widget, bitmap, properties);
+        }
+      
+      if (bitmap)
+        {
+          /* Push the bitmap onto the window */
+          GdkGC *gc = gdk_gc_new(window);
+          gdk_draw_drawable(window, gc, bitmap, 0, 0, 0, 0, -1, -1);
+          g_object_unref(gc);
+        }
+      else
+        {
+          g_warning("Failed to draw Belvu columns header [%p] - could not create bitmap.\n", widget);
+        }
+    }
+  
+  return TRUE;
+}
+
+/***********************************************************
+ *                         Scrolling                       *
+ ***********************************************************/
+
+/* Called when the horizontal scroll position has changed */
+static void onHScrollPosChangedBelvuAlignment(GtkObject *object, gpointer data)
+{
+  GtkWidget *belvuAlignment = GTK_WIDGET(data);
+  BelvuAlignmentProperties *properties = belvuAlignmentGetProperties(belvuAlignment);
+  
+  if (properties->wrapWidth == UNSET_INT)
+    {
+      /* We need to clear and re-draw the sequence area (unless we're displaying
+       * wrapped sequences, in which case we've already drawn the full sequence
+       * width in the drawing area */
+      belvuAlignmentRedrawSequenceArea(belvuAlignment);
+    }
+}
+
+/* Called when the vertical scroll position has changed */
+static void onVScrollPosChangedBelvuAlignment(GtkObject *object, gpointer data)
+{
+  GtkWidget *belvuAlignment = GTK_WIDGET(data);
+  BelvuAlignmentProperties *properties = belvuAlignmentGetProperties(belvuAlignment);
+  
+  if (properties->wrapWidth == UNSET_INT)
+    {
+      belvuAlignmentRedrawAll(belvuAlignment);
+    }
+}
+
+
+/* Called when the horizontal scroll range has changed */
+static void onHScrollRangeChangedBelvuAlignment(GtkObject *object, gpointer data)
+{
+  GtkWidget *belvuAlignment = GTK_WIDGET(data);
+  BelvuAlignmentProperties *properties = belvuAlignmentGetProperties(belvuAlignment);
+
+  /* Set the horizontal adjustment page size to be the number of characters
+   * that will fit in the width */
+  properties->hAdjustment->page_size = (int)(properties->seqRect.width / properties->charWidth);
+  properties->hAdjustment->page_increment = properties->hAdjustment->page_size;
+
+  /* Make sure the scroll position still lies within upper - page_size. */
+  if (properties->hAdjustment->value > properties->hAdjustment->upper - properties->hAdjustment->page_size)
+    properties->hAdjustment->value = properties->hAdjustment->upper - properties->hAdjustment->page_size;
+
+  /* Make sure we're still within the lower limit */
+  if (properties->hAdjustment->value < properties->hAdjustment->lower)
+    properties->hAdjustment->value = properties->hAdjustment->lower;
+
+  belvuAlignmentRedrawSequenceArea(belvuAlignment);
+}
+
+/* Called when the vertical scroll range has changed */
+static void onVScrollRangeChangedBelvuAlignment(GtkObject *object, gpointer data)
+{
+  GtkWidget *belvuAlignment = GTK_WIDGET(data);
+  BelvuAlignmentProperties *properties = belvuAlignmentGetProperties(belvuAlignment);
+  
+  /* Set the horizontal adjustment page size to be the number of characters
+   * that will fit in the width */
+  properties->vAdjustment->page_size = (int)(properties->seqArea->allocation.height / properties->charHeight);
+  properties->vAdjustment->page_increment = properties->vAdjustment->page_size;
+  
+  /* Make sure the scroll position still lies within upper - page_size. */
+  if (properties->vAdjustment->value > properties->vAdjustment->upper - properties->vAdjustment->page_size)
+    properties->vAdjustment->value = properties->vAdjustment->upper - properties->vAdjustment->page_size;
+  
+  /* Make sure we're still within the lower limit */
+  if (properties->vAdjustment->value < properties->vAdjustment->lower)
+    properties->vAdjustment->value = properties->vAdjustment->lower;
+
+  belvuAlignmentRedrawAll(belvuAlignment);
+}
+
+
+static void updateOnAlignmentSizeChanged(GtkWidget *belvuAlignment)
+{
+  BelvuAlignmentProperties *properties = belvuAlignmentGetProperties(belvuAlignment);
+  
+  if (properties->vAdjustment)
+    {
+      properties->vAdjustment->upper = properties->bc->alignArr->len + 1;
+      gtk_adjustment_changed(properties->vAdjustment);
+    }
+  
+  if (properties->hAdjustment)
+    {
+      properties->hAdjustment->upper = properties->bc->maxLen;
+      gtk_adjustment_changed(properties->hAdjustment);
+    }
+
+  belvuAlignmentRedrawAll(belvuAlignment);
+}
+
+
+/* Called when the vertical scroll range upper value has changed (i.e. the length
+ * of the alignments array has changed). */
+void updateOnVScrollSizeChaged(GtkWidget *belvuAlignment)
+{
+  /* Recalculate the borders, because the max name length etc. may have changed */
+  calculateDrawingSizes(belvuAlignment);
+  
+  /* Update the scroll ranges because the number of rows and columns may have changed */
+  updateOnAlignmentSizeChanged(belvuAlignment);
+}
+
+
+/* This should be called when the alignment length has changed, i.e. when columns
+ * have been deleted. */
+void updateOnAlignmentLenChanged(GtkWidget *belvuAlignment)
+{
+  updateOnAlignmentSizeChanged(belvuAlignment);
+}
+
+/***********************************************************
+ *                         Sizing                          *
+ ***********************************************************/
+
+int belvuAlignmentGetWidth(GtkWidget *belvuAlignment)
+{
+  if (!belvuAlignment)
+    return 0;
+
+  BelvuAlignmentProperties *properties = belvuAlignmentGetProperties(belvuAlignment);
+  return properties ? properties->seqRect.width : 0;
+}
+
+
+/* Get the width of the drawing area that shows the sequences */
+static int getAlignmentDisplayWidth(BelvuAlignmentProperties *properties)
+{
+  int result = 0;
+  
+  if (properties->wrapWidth == UNSET_INT)
+    {
+      /* Drawing can be very slow if we draw the full alignment, so we only
+       * draw what's in the current display width. */
+      result = properties->seqArea->allocation.width - SEQ_AREA_PADDING;
+    }
+  else
+    {
+      /* The sequences are wrapped, so we only have a short width to deal with
+       * and can therefore draw the full width. (Although specify a size limit
+       * in case the user specifies a very large width because this can cause
+       * a badalloc crash if too big.) */
+      result =
+        properties->columnPadding + (properties->bc->maxNameLen * properties->charWidth) + 
+        properties->nameColumnPadding + (properties->bc->maxEndLen * properties->charWidth) +
+        properties->columnPadding + (properties->wrapWidth * properties->charWidth) + 
+        properties->columnPadding + (properties->bc->maxEndLen * properties->charWidth) + 
+        properties->columnPadding + (properties->bc->maxScoreLen * properties->charWidth);
+      
+      if (result > MAX_PIXMAP_WIDTH)
+        {
+          result = MAX_PIXMAP_WIDTH;
+          g_warning("The alignment window is too large and will be clipped.\n");
+        }
+    }
+  
+  return result;
+}
+
+
+static int getAlignmentDisplayHeight(BelvuAlignmentProperties *properties)
+{
+  int result = 0;
+  
+  if (properties->wrapWidth == UNSET_INT)
+    {
+      result = properties->seqArea->allocation.height - DEFAULT_YPAD;
+    }  
+  else
+    {
+      /* Divide the full sequence length by the display width to give the number
+       * of paragraphs we require */
+      const int numParagraphs = ceil((double)properties->bc->maxLen / (double)properties->wrapWidth);
+      const int paragraphHeight = (properties->bc->alignArr->len + 1) * properties->charHeight;
+    
+      result = paragraphHeight * numParagraphs;
+      
+      /* Add space for the title, if given (one line for the title and one as a spacer) */
+      if (properties->title)
+        result += properties->charHeight * 2;
+      
+      if (result > MAX_PIXMAP_HEIGHT)
+        {
+          result = MAX_PIXMAP_HEIGHT;
+          g_warning("The alignment window is too large and will be clipped.\n");
+        }
+    }
+  
+  return result;
+}
+
+
+/* Update the size of the header-columns widget. Should be called after any
+ * change that affects the length of the text displayed in the columns area. */
+void updateHeaderColumnsSize(GtkWidget *belvuAlignment)
+{
+  if (!belvuAlignment)
+    return;
+  
+  BelvuAlignmentProperties *properties = belvuAlignmentGetProperties(belvuAlignment);
+  
+  if (properties->columnsArea)
+    {
+      /* There is a separate drawing area for the columns that contain the row
+       * headers; calculate its size. */
+      properties->columnsRect.width = (properties->bc->maxNameLen * properties->charWidth) + (2 * properties->columnPadding) +
+                                      (properties->bc->maxStartLen * properties->charWidth) + (2 * properties->columnPadding) +
+                                      (properties->bc->maxEndLen * properties->charWidth) + (2 * properties->columnPadding) +
+                                      properties->columnPadding;
+      
+      if (properties->bc->displayScores)
+        properties->columnsRect.width += (properties->bc->maxScoreLen * properties->charWidth) + (2 * properties->columnPadding);
+
+      /* Set the height of the header line to the the same as the sequence header line */
+      gtk_widget_set_size_request(properties->columnsHeader, -1, properties->seqHeaderRect.y + properties->seqHeaderRect.height);
+      
+      /* Set the height and width of the drawing area */
+      gtk_layout_set_size(GTK_LAYOUT(properties->columnsArea), properties->columnsRect.width, properties->columnsRect.height);
+      
+      /* Force the width of the drawing widget to be the width of the drawing area */
+      if (properties->columnsRect.width != properties->columnsArea->allocation.width)
+        gtk_widget_set_size_request(properties->columnsArea, properties->columnsRect.width, -1);
+    }
+}
+
+
+/* This function calculates the size of the drawing area for sequences based
+ * on either a) the current allocated size of the sequence area or b) for a 
+ * wrapped alignment, the full size required to draw everything.
+ * It also updates the height of the columns area, if applicable, so that it is
+ * the same height as the sequence area. */
+void calculateDrawingSizes(GtkWidget *belvuAlignment)
+{
+  if (!belvuAlignment)
+    return;
+  
+  BelvuAlignmentProperties *properties = belvuAlignmentGetProperties(belvuAlignment);
+
+  /* Recalculate the size of the drawing area for the sequences (both height
+   * and width may have changed on a size-allocate) */
+  properties->seqRect.width = getAlignmentDisplayWidth(properties);
+  properties->seqRect.height = getAlignmentDisplayHeight(properties);
+  
+  /* Update the size of the drawing widget and signal that the scroll range
+   * has changed (n/a for wrapped view because this gets done by the draw function. */
+  if (properties->wrapWidth == UNSET_INT)
+    {
+      gtk_layout_set_size(GTK_LAYOUT(properties->seqArea), properties->seqRect.x + properties->seqRect.width, properties->seqRect.y + properties->seqRect.height);
+
+      if (properties->hAdjustment)
+        gtk_adjustment_changed(properties->hAdjustment); /* signal that the scroll range has changed */
+      
+      if (properties->vAdjustment)
+        gtk_adjustment_changed(properties->vAdjustment);
+    }
+  
+  /* Keep the sequence-header area the same width as the sequence area */
+  properties->seqHeaderRect.width = properties->seqRect.width;
+
+  if (properties->columnsArea)
+    {
+      /* Update the height of the drawing area (the width shouldn't have
+       * changed for a size-allocate because the table cell does not expand) */
+      properties->columnsRect.height = properties->seqRect.height;
+      gtk_layout_set_size(GTK_LAYOUT(properties->columnsArea), properties->columnsRect.width, properties->columnsRect.height);
+    }
+}
+
+
+static void onSizeAllocateBelvuAlignment(GtkWidget *widget, GtkAllocation *allocation, gpointer data)
+{
+  GtkWidget *belvuAlignment = GTK_WIDGET(data);
+  
+  /* Update the size of the drawing areas */
+  calculateDrawingSizes(belvuAlignment);
+}
+
+
+/***********************************************************
+ *                Removing sequences                       *
+ ***********************************************************/
+
+void removeSelectedSequence(BelvuContext *bc, GtkWidget *belvuAlignment)
+{ 
+  if (!bc->selectedAln) 
+    {
+      g_critical("Please select a sequence to remove.\n");
+      return;
+    }
+  
+  const int idx = bc->selectedAln->nr - 1;
+  g_array_remove_index(bc->alignArr, idx);
+  arrayOrder(bc->alignArr);
+  
+  bc->saved = FALSE;
+  
+  g_message("Removed %s/%d-%d.  %d sequences left.\n\n", bc->selectedAln->name, bc->selectedAln->start, bc->selectedAln->end, bc->alignArr->len);
+  
+  bc->selectedAln = NULL;
+  
+  rmFinaliseGapRemoval(bc);
+  updateOnVScrollSizeChaged(belvuAlignment);  
+  onRowSelectionChanged(bc);
+}
+
+
+/* Get rid of seqs that are too gappy. */
+void removeGappySeqs(BelvuContext *bc, GtkWidget *belvuAlignment, const double cutoff)
+{
+  rmGappySeqs(bc, cutoff);
+  rmFinaliseGapRemoval(bc);
+  updateOnVScrollSizeChaged(belvuAlignment);  
+}
+
+/* Get rid of partial seqs. */
+void removePartialSeqs(BelvuContext *bc, GtkWidget *belvuAlignment)
+{
+  rmPartialSeqs(bc);
+  updateOnVScrollSizeChaged(belvuAlignment);  
+}
+
+/* Get rid of redundant seqs (those that are more than the given % identical). */
+void removeRedundantSeqs(BelvuContext *bc, GtkWidget *belvuAlignment, const double cutoff)
+{
+  mkNonRedundant(bc, cutoff);
+  updateOnVScrollSizeChaged(belvuAlignment);  
+}
+
+/* Get rid of outlier seqs (those that are less than the given % identical to any other). */
+void removeOutliers(BelvuContext *bc, GtkWidget *belvuAlignment, const double cutoff)
+{
+  rmOutliers(bc, cutoff);
+  updateOnVScrollSizeChaged(belvuAlignment);  
+}
+
+/* Get rid of seqs that have a score below the given value */
+void removeByScore(BelvuContext *bc, GtkWidget *belvuAlignment, const double cutoff)
+{
+  rmScore(bc, cutoff);
+  updateOnVScrollSizeChaged(belvuAlignment);
+  centerHighlighted(bc, belvuAlignment);
+}
+
+
+/* Scroll the alignment list if necessary to make sure that the currently
+ * highlighted sequence is visible */
+void centerHighlighted(BelvuContext *bc, GtkWidget *belvuAlignment)
+{
+  if (bc->selectedAln) 
+    {
+      BelvuAlignmentProperties *properties = belvuAlignmentGetProperties(belvuAlignment);
+      GtkAdjustment *vAdjustment = properties->vAdjustment;
+      
+      /* Create the range of y coords that we want to be in range */
+      const int newIdx = bc->selectedAln->nr - 1;
+      gtk_adjustment_clamp_page(vAdjustment, newIdx, newIdx + 1);
+    }
+}
+
+
+/* Utility to set the value of an adjustment and to bounds-limit it to lie
+ * between 'lower' and 'upper - page_size' */
+static void setAdjustmentValue(GtkAdjustment *adjustment, const int value)
+{
+  int newValue = value;
+
+  /* _set_value checks the lower limit, but we need to check the upper... */
+  if (newValue > adjustment->upper - adjustment->page_size)
+    newValue = adjustment->upper - adjustment->page_size;
+                     
+  gtk_adjustment_set_value(adjustment, newValue);
+}
+
+
+/* Utility to scroll an adjustment to the start/end of its range */
+static void adjustmentScrollExtremity(GtkAdjustment *adjustment, const gboolean start)
+{
+  if (start)
+    setAdjustmentValue(adjustment, adjustment->lower);
+  else
+    setAdjustmentValue(adjustment, adjustment->upper);
+}
+
+/* Utility to scroll an adjustment up or down by one page */
+static void adjustmentScrollPage(GtkAdjustment *adjustment, const gboolean lower)
+{
+  if (lower)
+    setAdjustmentValue(adjustment, adjustment->value - adjustment->page_size);
+  else
+    setAdjustmentValue(adjustment, adjustment->value + adjustment->page_size);
+}
+
+/* Utility to scroll an adjustment up or down by the given value */
+static void adjustmentScrollValue(GtkAdjustment *adjustment, const gboolean lower, const int value)
+{
+  if (lower)
+    setAdjustmentValue(adjustment, adjustment->value - value);
+  else
+    setAdjustmentValue(adjustment, adjustment->value + value);
+}
+
+
+/* Scroll vertically to the start (top) or end (bottom) of the alignment list */
+void vScrollStartEnd(GtkWidget *belvuAlignment, const gboolean start)
+{
+  BelvuAlignmentProperties *properties = belvuAlignmentGetProperties(belvuAlignment);
+  adjustmentScrollExtremity(properties->vAdjustment, start);
+}
+
+/* Scroll horizontally to the start (leftmost) or end (rightmost) coord */
+void hScrollStartEnd(GtkWidget *belvuAlignment, const gboolean start)
+{
+  BelvuAlignmentProperties *properties = belvuAlignmentGetProperties(belvuAlignment);
+  adjustmentScrollExtremity(properties->hAdjustment, start);
+}
+
+/* Scroll vertically one page up or down */
+void vScrollPageUpDown(GtkWidget *belvuAlignment, const gboolean up)
+{
+  BelvuAlignmentProperties *properties = belvuAlignmentGetProperties(belvuAlignment);
+  adjustmentScrollPage(properties->vAdjustment, up);
+}
+
+/* Scroll horizontally one page left or right */
+void hScrollPageLeftRight(GtkWidget *belvuAlignment, const gboolean left)
+{
+  BelvuAlignmentProperties *properties = belvuAlignmentGetProperties(belvuAlignment);
+  adjustmentScrollPage(properties->hAdjustment, left);
+}
+
+/* Scroll vertically the given number of rows up or down */
+void vScrollUpDown(GtkWidget *belvuAlignment, const gboolean up, const int numRows)
+{
+  BelvuAlignmentProperties *properties = belvuAlignmentGetProperties(belvuAlignment);
+  adjustmentScrollValue(properties->vAdjustment, up, numRows);
+}
+
+/* Scroll horizontally the given number of characters left or right */
+void hScrollLeftRight(GtkWidget *belvuAlignment, const gboolean left, const int numChars)
+{
+  BelvuAlignmentProperties *properties = belvuAlignmentGetProperties(belvuAlignment);
+  adjustmentScrollValue(properties->hAdjustment, left, numChars);
+}
+
+
+
+
+/* Select the row at the given y coord */
+static void selectRowAtCoord(BelvuAlignmentProperties *properties, const int y)
+{
+  BelvuContext *bc = properties->bc;
+  
+  const int rowIdx = properties->vAdjustment->value + ((y - properties->seqRect.y) / properties->charHeight);
+  
+  /* Set the selected alignment. Note that some alignments are hidden so
+   * we need to count how many visible alignments there are up to this row. */
+  int i = 0;
+  int count = -1;
+  bc->selectedAln = NULL;
+  
+  for ( i = 0; i < (int)bc->alignArr->len; ++i)
+    {
+      ALN *alnp = g_array_index(bc->alignArr, ALN*, i);
+      
+      if (!alnp->hide)
+        {
+          ++count;
+          if (count == rowIdx)
+            {
+              bc->selectedAln = alnp;
+              break;
+            }
+        }
+    }
+}
+
+
+/* Utility to find the column index (0-based from left edge) at the given
+ * x coordinate in the sequence area of the alignment view. */
+static int getColumnAtCoord(BelvuAlignmentProperties *properties, const int x)
+{
+  int result = (x - properties->seqRect.x) / properties->charWidth;
+  return result;
+}
+
+
+/* Select the column at the given x coord */
+static void selectColumnAtCoord(BelvuAlignmentProperties *properties, const int x, const gboolean highlightCol)
+{
+  BelvuContext *bc = properties->bc;
+
+  const int colIdx = getColumnAtCoord(properties, x);
+  
+  if (colIdx >= 0 && colIdx < bc->maxLen)
+    {
+      bc->selectedCol = colIdx + properties->hAdjustment->value + 1;
+      
+      if (highlightCol)
+        bc->highlightedCol = bc->selectedCol;
+      else
+        bc->highlightedCol = 0;
+    }
+}
+
+
+/* Mouse button handler for the columns area of the alignment window */
+static gboolean onButtonPressColumnsArea(GtkWidget *widget, GdkEventButton *event, gpointer data)
+{
+  gboolean handled = FALSE;
+  
+  GtkWidget *belvuAlignment = GTK_WIDGET(data);
+  BelvuAlignmentProperties *properties = belvuAlignmentGetProperties(belvuAlignment);
+  
+  if (event->type == GDK_BUTTON_PRESS && event->button == 1)  /* single click left button */
+    {
+      /* Select the clicked row */
+      selectRowAtCoord(properties, event->y);
+      onRowSelectionChanged(properties->bc);
+      handled = TRUE;
+    }
+  else if (event->type == GDK_2BUTTON_PRESS && event->button == 1) /* double click left button */
+    {
+      if (properties->bc->removingSeqs)
+        {
+          /* Removed the clicked sequence (which will be the selected one) */
+          removeSelectedSequence(properties->bc, belvuAlignment);
+        }
+      else 
+        {
+          /* Fetch the clicked sequence (i.e. the currently selected one) */
+          fetchAln(properties->bc, properties->bc->selectedAln);
+        }
+    }
+  
+  return handled;
+}
+
+
+/* Mouse button handler for the sequence area of the alignment window */
+static gboolean onButtonPressSeqArea(GtkWidget *widget, GdkEventButton *event, gpointer data)
+{
+  gboolean handled = FALSE;
+  
+  GtkWidget *belvuAlignment = GTK_WIDGET(data);
+  BelvuAlignmentProperties *properties = belvuAlignmentGetProperties(belvuAlignment);
+  
+  if (event->type == GDK_BUTTON_PRESS &&
+      (event->button == 1 || event->button == 2))  /* single click left or middle buttons */
+    {
+      /* If the middle button was pressed, highlight the selected column */
+      const gboolean highlightCol = (event->button == 2);
+      
+      /* If the left button was pressed, select the clicked row */
+      if (event->button == 1)
+        {
+          selectRowAtCoord(properties, event->y);
+          onRowSelectionChanged(properties->bc);
+        }
+      
+      /* Select the clicked column */
+      selectColumnAtCoord(properties, event->x, highlightCol);
+      onColSelectionChanged(properties->bc);
+      
+      handled = TRUE;
+    }
+  else if (event->type == GDK_2BUTTON_PRESS && event->button == 1) /* double click left button */
+    {
+      if (properties->bc->removingSeqs)
+        {
+          /* Removed the clicked sequence (i.e. the currently selected one) */
+          removeSelectedSequence(properties->bc, belvuAlignment);
+        }
+      else 
+        {
+          /* Fetch the clicked sequence (i.e. the currently selected one) */
+          fetchAln(properties->bc, properties->bc->selectedAln);
+        }
+    }
+  
+  return handled;
+}
+
+
+/* Mouse button handler release for the sequence area of the alignment window */
+static gboolean onButtonReleaseSeqArea(GtkWidget *widget, GdkEventButton *event, gpointer data)
+{
+  gboolean handled = FALSE;
+  
+  GtkWidget *belvuAlignment = GTK_WIDGET(data);
+  BelvuAlignmentProperties *properties = belvuAlignmentGetProperties(belvuAlignment);
+  
+  if (event->button == 2)  /* released middle button */
+    {
+      /* Scroll to centre on the current column */
+      int colIdx = getColumnAtCoord(properties, event->x);
+      double newValue = colIdx + properties->hAdjustment->value - (properties->hAdjustment->page_size / 2.0);
+      
+      if (newValue > properties->hAdjustment->upper - properties->hAdjustment->page_size)
+        newValue = properties->hAdjustment->upper - properties->hAdjustment->page_size;
+        
+      gtk_adjustment_set_value(properties->hAdjustment, newValue);
+      
+      /* Clear the current column highlihting */
+      properties->bc->highlightedCol = 0;
+      onColSelectionChanged(properties->bc);
+      
+      handled = TRUE;
+    }
+  else if (event->type == GDK_2BUTTON_PRESS && event->button == 1) /* double click left button */
+    {
+      if (properties->bc->removingSeqs)
+        {
+          /* Removed the clicked sequence (which will be the selected one) */
+          removeSelectedSequence(properties->bc, belvuAlignment);
+        }
+    }
+  
+  return handled;
+}
+
+
+/* Mouse move handler for the sequence area of the alignment window */
+static gboolean onMouseMoveSeqArea(GtkWidget *widget, GdkEventMotion *event, gpointer data)
+{
+  gboolean handled = FALSE;
+  
+  GtkWidget *belvuAlignment = GTK_WIDGET(data);
+  BelvuAlignmentProperties *properties = belvuAlignmentGetProperties(belvuAlignment);
+  
+  if (event->state & GDK_BUTTON2_MASK) /* middle button pressed */
+    {
+      /* Update the selected/highlighted column */
+      selectColumnAtCoord(properties, event->x, TRUE);
+      onColSelectionChanged(properties->bc);
+      
+      handled = TRUE;
+    }
+  
+  return handled;
+}
+
+
+/* Implement custom scrolling for horizontal mouse wheel movements over the alignment. */
+static gboolean onScrollAlignment(GtkWidget *widget, GdkEventScroll *event, gpointer data)
+{
+  gboolean handled = FALSE;
+  
+  GtkWidget *belvuAlignment = GTK_WIDGET(data);
+  BelvuAlignmentProperties *properties = belvuAlignmentGetProperties(belvuAlignment);
+  
+  switch (event->direction)
+    {
+      /* left/right scrolling for sequence area or sequence header only */
+      case GDK_SCROLL_LEFT:
+        {
+          if (widget == properties->seqArea || widget == properties->seqHeader)
+            hScrollLeftRight(belvuAlignment, TRUE, properties->hAdjustment->step_increment);
+          handled = TRUE;
+          break;
+        }
+        
+      case GDK_SCROLL_RIGHT:
+        {
+          if (widget == properties->seqArea || widget == properties->seqHeader)
+            hScrollLeftRight(belvuAlignment, FALSE, properties->hAdjustment->step_increment);
+          handled = TRUE;
+          break;
+        }
+
+      /* up/down scrolling for sequence area or columns area only */
+      case GDK_SCROLL_UP:
+        {
+          if (widget == properties->seqArea || widget == properties->columnsArea)
+            vScrollUpDown(belvuAlignment, TRUE, properties->vAdjustment->step_increment);
+          handled = TRUE;
+          break;
+        }
+        
+      case GDK_SCROLL_DOWN:
+        {
+          if (widget == properties->seqArea || widget == properties->columnsArea)
+            vScrollUpDown(belvuAlignment, FALSE, properties->vAdjustment->step_increment);
+          handled = TRUE;
+          break;
+        }
+        
+      default:
+        {
+          handled = FALSE;
+          break;
+        }
+    };
+  
+  return handled;
+}
+
+/***********************************************************
+ *                      Initialisation                     *
+ ***********************************************************/
+
+/* Set style properties for the belvu alignment widgets */
+static void setBelvuAlignmentStyle(BelvuContext *bc, GtkWidget *seqArea, GtkWidget *columnsArea)
+{
+  GdkColor *bgColor = getGdkColor(BELCOLOR_BACKGROUND, bc->defaultColors, FALSE, FALSE);
+
+  gtk_widget_modify_bg(seqArea, GTK_STATE_NORMAL, bgColor);
+
+  if (columnsArea)
+    gtk_widget_modify_bg(columnsArea, GTK_STATE_NORMAL, bgColor);
+}
+
+
+/* Create a widget that will draw the alignments. This type of widget is
+ * used for both the standard and wrapped views - pass wrapWidth as UNSET_INT
+ * for the standard view, or pass wrapWidth as the number of characters after
+ * which to wrap for the wrapped view. */
+GtkWidget* createBelvuAlignment(BelvuContext *bc, const char* title, const int wrapWidth)
+{
+  GtkWidget *belvuAlignment = NULL;      /* the outermost container */
+  
+  GtkWidget *seqArea = NULL;             /* the "sequence area", which will draw the actual peptide sequences */
+  GtkWidget *columnsArea = NULL;         /* optional "headers" column for drawing names, coords etc. */
+  GtkWidget *seqHeader = NULL;       /* header for the sequence area */
+  GtkWidget *columnsHeader = NULL;   /* header for the columns area */
+  
+  GtkAdjustment *hAdjustment = NULL;
+  GtkAdjustment *vAdjustment = NULL;
+  
+  if (wrapWidth == UNSET_INT)
+    {
+      /* The standard (unwrapped) view. Two columns that share the same vertical
+       * scrollbar but only the sequence area will have a horizontal scrollbar. */
+      
+      /* Place everything in a table */
+      belvuAlignment = gtk_table_new(3, 3, FALSE);
+      const int xpad = 0, ypad = 0;
+
+      /* Create the scrollbars */
+      hAdjustment = GTK_ADJUSTMENT(gtk_adjustment_new(0, 0, bc->maxLen, 5, 0, 0));
+      vAdjustment = GTK_ADJUSTMENT(gtk_adjustment_new(0, 0, bc->alignArr->len + 1, 1, 0, 0));
+      GtkWidget *hScrollbar = gtk_hscrollbar_new(hAdjustment);
+      GtkWidget *vScrollbar = gtk_vscrollbar_new(vAdjustment);
+      
+      /* Create the drawing areas */
+      seqArea = gtk_layout_new(NULL, NULL);
+      columnsArea = gtk_layout_new(NULL, NULL);
+      
+      /* Create a header widget for each drawing area */
+      columnsHeader = gtk_drawing_area_new();
+      seqHeader = gtk_drawing_area_new();
+      
+      /* Place all the widgets in the table */
+      gtk_table_attach(GTK_TABLE(belvuAlignment), columnsHeader,0, 1, 0, 1, GTK_FILL, GTK_SHRINK, xpad, ypad);
+      gtk_table_attach(GTK_TABLE(belvuAlignment), columnsArea,  0, 1, 1, 2, GTK_FILL, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), xpad, ypad);
+      gtk_table_attach(GTK_TABLE(belvuAlignment), seqHeader,    1, 2, 0, 1, GTK_FILL, GTK_SHRINK, xpad, ypad);
+      gtk_table_attach(GTK_TABLE(belvuAlignment), seqArea,      1, 2, 1, 2, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), xpad, ypad);
+      gtk_table_attach(GTK_TABLE(belvuAlignment), hScrollbar,   1, 2, 2, 3, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), GTK_SHRINK, xpad, ypad);
+      gtk_table_attach(GTK_TABLE(belvuAlignment), vScrollbar,   2, 3, 1, 2, GTK_SHRINK, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), xpad, ypad);
+
+      /* Connect signals */
+      gtk_widget_add_events(columnsArea, GDK_BUTTON_PRESS_MASK);
+      g_signal_connect(G_OBJECT(columnsArea), "expose-event", G_CALLBACK(onExposeBelvuColumns), belvuAlignment);  
+      g_signal_connect(G_OBJECT(columnsArea), "button-press-event", G_CALLBACK(onButtonPressColumnsArea), belvuAlignment);
+      g_signal_connect(G_OBJECT(columnsArea), "scroll-event",  G_CALLBACK(onScrollAlignment), belvuAlignment);
+      
+      g_signal_connect(G_OBJECT(columnsHeader), "expose-event", G_CALLBACK(onExposeBelvuColumnsHeader), belvuAlignment);  
+
+      gtk_widget_add_events(seqHeader, GDK_BUTTON_PRESS_MASK);
+      g_signal_connect(G_OBJECT(seqHeader), "expose-event", G_CALLBACK(onExposeBelvuSequenceHeader), belvuAlignment);  
+      g_signal_connect(G_OBJECT(seqHeader), "scroll-event",  G_CALLBACK(onScrollAlignment), belvuAlignment);
+
+      gtk_widget_add_events(seqArea, GDK_BUTTON_RELEASE_MASK);
+      gtk_widget_add_events(seqArea, GDK_POINTER_MOTION_MASK);
+      g_signal_connect(G_OBJECT(seqArea), "button-press-event", G_CALLBACK(onButtonPressSeqArea), belvuAlignment);
+      g_signal_connect(G_OBJECT(seqArea), "button-release-event", G_CALLBACK(onButtonReleaseSeqArea), belvuAlignment);
+      g_signal_connect(G_OBJECT(seqArea), "motion-notify-event", G_CALLBACK(onMouseMoveSeqArea), belvuAlignment);
+      g_signal_connect(G_OBJECT(seqArea), "scroll-event",  G_CALLBACK(onScrollAlignment), belvuAlignment);
+
+      g_signal_connect(G_OBJECT(hAdjustment), "changed", G_CALLBACK(onHScrollRangeChangedBelvuAlignment), belvuAlignment);
+      g_signal_connect(G_OBJECT(vAdjustment), "changed", G_CALLBACK(onVScrollRangeChangedBelvuAlignment), belvuAlignment);
+      g_signal_connect(G_OBJECT(hAdjustment), "value-changed", G_CALLBACK(onHScrollPosChangedBelvuAlignment), belvuAlignment);
+      g_signal_connect(G_OBJECT(vAdjustment), "value-changed", G_CALLBACK(onVScrollPosChangedBelvuAlignment), belvuAlignment);
+    }
+  else
+    {
+      /* For the wrapped view, we just have a single layout area. We'll need to
+       * draw the entire contents at once so that it can be printed. We can
+       * therefore just place it in a standard scrolled window. We also don't
+       * need to worry about button-press events because this widget is not
+       * interactive; it's just for printing. */
+      seqArea = gtk_layout_new(NULL, NULL);
+
+      belvuAlignment = gtk_scrolled_window_new(NULL, NULL);
+      gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(belvuAlignment), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+      gtk_container_add(GTK_CONTAINER(belvuAlignment), seqArea);
+      
+      hAdjustment = gtk_layout_get_hadjustment(GTK_LAYOUT(seqArea));
+      vAdjustment = gtk_layout_get_vadjustment(GTK_LAYOUT(seqArea));
+    }
+
+  gtk_widget_add_events(seqArea, GDK_BUTTON_PRESS_MASK);
+  g_signal_connect(G_OBJECT(seqArea), "expose-event",  G_CALLBACK(onExposeBelvuSequence), belvuAlignment);  
+  g_signal_connect(G_OBJECT(seqArea), "size-allocate", G_CALLBACK(onSizeAllocateBelvuAlignment), belvuAlignment);
+  
+  /* Set the style and properties */
+  g_assert(belvuAlignment);
+  setBelvuAlignmentStyle(bc, seqArea, columnsArea);
+  belvuAlignmentCreateProperties(belvuAlignment, bc, columnsArea, columnsHeader, seqArea, seqHeader, hAdjustment, vAdjustment, title, wrapWidth);
+
+  return belvuAlignment;
+}
+
+
+
+
+
diff --git a/belvuApp/belvuAlignment.hpp b/belvuApp/belvuAlignment.hpp
new file mode 100644
index 0000000..b773851
--- /dev/null
+++ b/belvuApp/belvuAlignment.hpp
@@ -0,0 +1,74 @@
+/*  File: belvuAlignment.h
+ *  Author: Gemma Barson, 2011-04-12
+ *  Copyright (c) 2011 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: Draws the alignment section in the main Belvu window
+ *----------------------------------------------------------------------------
+ */
+
+#ifndef _belvualignment_h_included_
+#define _belvualignment_h_included_
+
+#include <belvuApp/belvu_.hpp>
+#include <gtk/gtk.h>
+
+GtkWidget*              createBelvuAlignment(BelvuContext *bc, const char *title, const int wrapWidth);
+void                    belvuAlignmentRedrawAll(GtkWidget *belvuAlignment);
+void                    belvuAlignmentRefreshAll(GtkWidget *belvuAlignment);
+void                    updateOnAlignmentLenChanged(GtkWidget *belvuAlignment);
+
+void                    onBelvuAlignmentFontSizeChanged(GtkWidget *belvuAlignment);
+
+void                    updateOnVScrollSizeChaged(GtkWidget *belvuAlignment);
+void                    centerHighlighted(BelvuContext *bc, GtkWidget *belvuAlignment);
+
+void                    removeSelectedSequence(BelvuContext *bc, GtkWidget *belvuAlignment);
+void                    removeGappySeqs(BelvuContext *bc, GtkWidget *belvuAlignment, const double cutoff);
+void                    removePartialSeqs(BelvuContext *bc, GtkWidget *belvuAlignment);
+void                    removeRedundantSeqs(BelvuContext *bc, GtkWidget *belvuAlignment, const double cutoff);
+void                    removeOutliers(BelvuContext *bc, GtkWidget *belvuAlignment, const double cutoff);
+void                    removeByScore(BelvuContext *bc, GtkWidget *belvuAlignment, const double cutoff);
+
+void                    vScrollStartEnd(GtkWidget *belvuAlignment, const gboolean start);
+void                    hScrollStartEnd(GtkWidget *belvuAlignment, const gboolean start);
+void                    vScrollPageUpDown(GtkWidget *belvuAlignment, const gboolean up);
+void                    hScrollPageLeftRight(GtkWidget *belvuAlignment, const gboolean left);
+void                    vScrollUpDown(GtkWidget *belvuAlignment, const gboolean up, const int numRows);
+void                    hScrollLeftRight(GtkWidget *belvuAlignment, const gboolean left, const int numChars);
+
+int                     belvuAlignmentGetWidth(GtkWidget *belvuAlignment);
+
+void                    calculateDrawingSizes(GtkWidget *belvuAlignment);
+void                    updateHeaderColumnsSize(GtkWidget *belvuAlignment);
+
+
+#endif /* _belvualignment_h_included_ */
diff --git a/belvuApp/belvuConsPlot.cpp b/belvuApp/belvuConsPlot.cpp
new file mode 100644
index 0000000..b894ef1
--- /dev/null
+++ b/belvuApp/belvuConsPlot.cpp
@@ -0,0 +1,648 @@
+/*  File: belvuConsPlot.h
+ *  Author: Gemma Barson, 2011-07-01
+ *  Copyright (c) 2011 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: See belvuConsPlot.h
+ *----------------------------------------------------------------------------
+ */
+
+#include "belvuApp/belvuConsPlot.hpp"
+#include "belvuApp/belvuWindow.hpp"
+#include "seqtoolsUtils/utilities.hpp"
+#include <gtk/gtk.h>
+#include <gbtools/gbtools.hpp>
+#include <algorithm>
+
+using namespace std;
+
+
+#define DEFAULT_CONS_PLOT_SCALE_HEIGHT      200   /* default height of the conservation plot scale */
+#define CONS_PLOT_XPAD                      10    /* Default x padding for the conservation plot */
+#define CONS_PLOT_YPAD                      10    /* Default y padding for the conservation plot */
+#define CONS_PLOT_LABEL_PAD                 4     /* Padding around labels in the conservation plot */
+#define TICKMARK_INTERVAL                   10    /* how many values between tickmark labels */
+#define MAJOR_TICKMARK_HEIGHT               6     /* height of major tick marks in the sequence area header */
+#define MINOR_TICKMARK_HEIGHT               3     /* height of minor tick marks in the sequence area header */
+#define AVG_CONSERVATION_LABEL              "Average conservation"  /* label to show on the plot's "average conservation" line */
+#define CONS_PLOT_WINDOW_YPAD               30    /* extra y padding allocated to the plot's window on initialisation */
+
+
+/* Local function declarations */
+static void                         calculateConservation(GtkWidget *consPlot);
+static void                         calculateConsPlotBorders(GtkWidget *consPlot);
+
+
+
+/***********************************************************
+ *                         Properties                      *
+ ***********************************************************/
+
+/* Properties specific to belvu's conservation plot window */
+class ConsPlotProperties
+{
+public:
+  GtkWidget *widget;                  /* The conservation plot window */
+  BelvuContext *bc;                   /* The belvu context */
+  GtkActionGroup *actionGroup;
+    
+  GtkWidget *drawingArea;             /* The drawing widget */
+  GdkRectangle headerRect;            /* Space for drawing the header line */
+  GdkRectangle plotRect;              /* Space for drawing the main plot */
+  GdkRectangle yScaleRect;            /* Space for drawing the y scale */
+  GdkRectangle xScaleRect;            /* Space for drawing the y scale */
+    
+  int windowSize;                     /* Size of the sliding window used for smothing the profile */
+  int lineWidth;                      /* Line width of the plot */
+  double xScale;                      /* Used for scaling the x axis */
+  double yScale;                      /* Used for scaling the y axis */
+    
+  double maxcons;                     /* maximum conservation */
+  double mincons;                     /* minimum conservation */
+  double avgcons;                     /* average conservation */
+  double *smooth;                     /* Used for calculating the smoothed profile */
+};
+
+
+/* Properties for generic windows */
+static ConsPlotProperties* consPlotGetProperties(GtkWidget *consPlot)
+{
+  return consPlot ? (ConsPlotProperties*)(g_object_get_data(G_OBJECT(consPlot), "BelvuConsPlotProperties")) : NULL;
+}
+
+
+/* Does the job of destroying the window */
+static void onDestroyConsPlot(GtkWidget *consPlot)
+{
+  ConsPlotProperties *properties = consPlotGetProperties(consPlot);
+  
+  if (properties)
+    {
+      /* Free the properties struct itself */
+      delete properties;
+      properties = NULL;
+      g_object_set_data(G_OBJECT(consPlot), "BelvuConsPlotProperties", NULL);
+    }
+}
+
+
+/* Create the properties struct and initialise all values. */
+static void consPlotCreateProperties(GtkWidget *consPlot, 
+                                     BelvuContext *bc, 
+                                     GtkActionGroup *actionGroup,
+                                     GtkWidget *drawingArea)
+{
+  if (consPlot)
+    {
+      ConsPlotProperties *properties = new ConsPlotProperties;
+
+      properties->widget = consPlot;
+      properties->bc = bc;
+      properties->actionGroup = actionGroup;
+
+      properties->drawingArea = drawingArea;
+      
+      properties->windowSize = 1;
+      properties->lineWidth = 1;
+      properties->xScale = 10.0;
+      properties->yScale = 20.0;
+      
+      properties->smooth = NULL;
+      
+      g_object_set_data(G_OBJECT(consPlot), "BelvuConsPlotProperties", properties);
+      g_signal_connect(G_OBJECT(consPlot), "destroy", G_CALLBACK (onDestroyConsPlot), NULL);
+    }
+}
+
+
+BelvuContext* consPlotGetContext(GtkWidget *consPlot)
+{
+  ConsPlotProperties *properties = consPlotGetProperties(consPlot);
+  return (properties ? properties->bc : NULL);
+}
+
+
+/***********************************************************
+ *                         Drawing                         *
+ ***********************************************************/
+
+/* Clear cached drawables and redraw everything */
+static void belvuConsPlotRedrawAll(GtkWidget *consPlot)
+{
+  if (!consPlot)
+    return;
+  
+  ConsPlotProperties *properties = consPlotGetProperties(consPlot);
+  
+  if (properties && properties->drawingArea)
+    {
+      widgetClearCachedDrawable(properties->drawingArea, NULL);
+      gtk_widget_queue_draw(properties->drawingArea);
+    }
+}
+
+
+/* Recalculate the conservation array and redraw everything */
+void belvuConsPlotRecalcAll(GtkWidget *consPlot)
+{
+  if (consPlot)
+    {
+      calculateConservation(consPlot);
+      calculateConsPlotBorders(consPlot);
+    }
+}
+
+
+static void drawConsPlot(GtkWidget *widget, GdkDrawable *drawable, ConsPlotProperties *properties)
+{
+  if (!properties->drawingArea)
+    return;
+  
+  BelvuContext *bc = properties->bc;
+  GdkGC *gc = gdk_gc_new(drawable);
+  gdk_gc_set_line_attributes(gc, properties->lineWidth, GDK_LINE_SOLID, GDK_CAP_BUTT, GDK_JOIN_MITER);
+  
+  GtkAdjustment *hAdjustment = gtk_layout_get_hadjustment(GTK_LAYOUT(properties->drawingArea));
+  const double xMin = hAdjustment->value;
+  const double xMax = min(hAdjustment->value + hAdjustment->page_size, hAdjustment->upper);
+  int iMin = (xMin - (double)properties->plotRect.x) / properties->xScale;
+  int iMax = (xMax - (double)properties->plotRect.x) / properties->xScale;
+  
+  if (iMin < 0)
+    iMin = 0;
+  
+  if (iMax > bc->maxLen - 1)
+    iMax = bc->maxLen - 1;
+  
+  /* Draw the header line */
+  char *tmpStr = g_strdup_printf("Window = %d", properties->windowSize);
+  drawText(widget, drawable, gc, properties->headerRect.x, properties->headerRect.y, tmpStr, NULL, NULL);
+  g_free(tmpStr);
+  
+  /* Draw x scale */
+  GdkColor *scaleColor = getGdkColor(BELCOLOR_CONS_PLOT_SCALE, bc->defaultColors, FALSE, FALSE);
+  gdk_gc_set_foreground(gc, scaleColor);
+
+  const int majorXTickInterval = 10;
+  const int minorXTickInterval = 5;
+  
+  /* Get the start and end x coords of the plot. Note that we offset by the
+   * minimum x coord so that the leftmost edge is 0 rather than xMin */
+  double xStart = max(xMin, (double)properties->xScaleRect.x) - xMin;
+  const double xEnd = min(xMax, (double)properties->xScaleRect.x + (double)properties->xScaleRect.width) - xMin;
+  
+  /* Draw the base line for the x scale */
+  double y = properties->xScaleRect.y;
+  gdk_draw_line(drawable, gc, xStart, y, xEnd, y);
+
+  /* Loop through each visible column that will have a major tickmark. For
+   * each major tickmark we also draw the minor tickmark previous to it, so 
+   * loop until (i - minorXTickInterval) is outside the visible range. */
+  int i = roundToValue(iMin, majorXTickInterval);
+  double x = 0;
+  
+  for ( ; i - minorXTickInterval <= iMax; i += majorXTickInterval) 
+    {
+      /* Get the x position of this column */
+      x = properties->xScaleRect.x + (i * properties->xScale) - xMin;
+      
+      /* Draw the major tickmark (if in range; the very last one might not be) */
+      if (i <= iMax)
+        gdk_draw_line(drawable, gc, x, y, x, y + MAJOR_TICKMARK_HEIGHT);
+
+      /* Decrement the column number to give the previous minor tickmark
+       * position and draw the minor tickmark there (if it is still in the
+       * visible area). */
+      if (i + minorXTickInterval <= iMax)
+        {
+          double x2 = properties->xScaleRect.x + ((i + minorXTickInterval) * properties->xScale) - xMin;
+          gdk_draw_line(drawable, gc, x2, y, x2, y + MINOR_TICKMARK_HEIGHT);
+        }
+      
+      tmpStr = g_strdup_printf("%d", i);
+      drawText(widget, drawable, gc, x - minorXTickInterval, y + MAJOR_TICKMARK_HEIGHT + CONS_PLOT_LABEL_PAD, tmpStr, NULL, NULL);
+      g_free(tmpStr);
+    }
+  
+  /* Draw the y scale. Note that the scale is inversed; that is, the lowest number
+   * is at the bottom, i.e. with the highest y position. */
+  const double majorYTickInterval = 1.0;
+  const double minorYTickInterval = 0.5;
+
+  x = max(xMin, (double)properties->yScaleRect.x + (double)properties->yScaleRect.width) - xMin;
+  const double yStart = properties->yScaleRect.y + properties->yScaleRect.height;
+  const double yEnd = properties->yScaleRect.y;
+  
+  gdk_draw_line(drawable, gc, x, yEnd, x, yStart);
+
+  double f = properties->mincons;
+  y = 0;
+
+  for ( ; f < properties->maxcons; f += majorYTickInterval) 
+    {
+      y = yStart - (f * properties->yScale);
+      
+      gdk_draw_line(drawable, gc, x, y, x - MAJOR_TICKMARK_HEIGHT, y);
+      
+      if (f + minorYTickInterval < properties->maxcons) 
+        {
+          double y2 = yStart - ((f + minorYTickInterval) * properties->yScale);
+          gdk_draw_line(drawable, gc, x, y2, x - MINOR_TICKMARK_HEIGHT, y2);
+        }
+      
+      tmpStr = g_strdup_printf("%.0f", f);
+      PangoLayout *layout = gtk_widget_create_pango_layout(widget, tmpStr);
+      g_free(tmpStr);
+
+      int textWidth = 0, textHeight = 0;
+      pango_layout_get_size(layout, &textWidth, &textHeight);
+      textWidth /= PANGO_SCALE;
+      textHeight /= PANGO_SCALE;
+      
+      gdk_draw_layout(drawable, gc, 
+                      x - textWidth - MAJOR_TICKMARK_HEIGHT - CONS_PLOT_LABEL_PAD, 
+                      y - textHeight / 2, layout);
+      
+      g_object_unref(layout);
+    }
+  
+  /* Draw average line */
+  GdkColor *avgLineColor = getGdkColor(BELCOLOR_CONS_PLOT_AVG, bc->defaultColors, FALSE, FALSE);
+  gdk_gc_set_foreground(gc, avgLineColor);
+  const double yAvg = yStart - (properties->avgcons * properties->yScale);
+  
+  gdk_draw_line(drawable, gc, xStart, yAvg, xEnd, yAvg);
+  drawText(widget, drawable, gc, xEnd + CONS_PLOT_XPAD, yAvg, AVG_CONSERVATION_LABEL, NULL, NULL);
+  
+  /* Plot the conservation value for each column */
+  GdkColor *plotColor = getGdkColor(BELCOLOR_CONS_PLOT, bc->defaultColors, FALSE, FALSE);
+  gdk_gc_set_foreground(gc, plotColor);
+  
+  for (i = iMin + 1; i <= iMax; ++i) 
+    {
+      x = properties->xScaleRect.x + (i * properties->xScale) - xMin;
+      
+      const double y1 = yStart - (properties->smooth[i - 1] * properties->yScale);
+      const double y2 = yStart - (properties->smooth[i] * properties->yScale);
+      
+      gdk_draw_line(drawable, gc, x, y1, x + properties->xScale, y2);
+    }
+
+  /* Clean up */
+  g_object_unref(gc);
+}
+
+
+/***********************************************************
+ *                   Settings dialog                       *
+ ***********************************************************/
+
+static void showSettingsDialog(GtkWidget *consPlot)
+{
+  ConsPlotProperties *properties = consPlotGetProperties(consPlot);
+  BelvuContext *bc = properties->bc;
+  
+  char *title = g_strdup_printf("%sPlot Settings", belvuGetTitlePrefix(bc));
+
+  GtkWidget *dialog = gtk_dialog_new_with_buttons(title, 
+                                                  GTK_WINDOW(consPlot), 
+                                                  (GtkDialogFlags)(GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT),
+                                                  GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
+                                                  GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
+                                                  NULL);
+
+  g_free(title);
+
+  gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT);
+  
+  const int numRows = 3;
+  const int numCols = 4;
+  const int xpad = TABLE_XPAD;
+  const int ypad = TABLE_YPAD;
+
+  GtkTable *table = GTK_TABLE(gtk_table_new(numRows, numCols, FALSE));
+  gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), GTK_WIDGET(table), FALSE, FALSE, 12);
+
+  GtkWidget *winEntry = createTextEntryFromInt(dialog, table, 0, 1, xpad, ypad, "_Window size: ", properties->windowSize, NULL);
+  GtkWidget *xEntry = createTextEntryFromInt(dialog, table, 1, 1, xpad, ypad, "_X scale: ", properties->xScale, NULL);
+  GtkWidget *yEntry = createTextEntryFromInt(dialog, table, 1, 3, 0, ypad, "_Y scale: ", properties->yScale, NULL);
+  GtkWidget *lineEntry = createTextEntryFromInt(dialog, table, 2, 1, xpad, ypad, "_Line width: ", properties->lineWidth, NULL);
+
+  gtk_widget_show_all(dialog);
+  
+  if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
+    {
+      const int newWin = convertStringToInt(gtk_entry_get_text(GTK_ENTRY(winEntry)));
+      const int newX = convertStringToInt(gtk_entry_get_text(GTK_ENTRY(xEntry)));
+      const int newY = convertStringToInt(gtk_entry_get_text(GTK_ENTRY(yEntry)));
+      const int newLine = convertStringToInt(gtk_entry_get_text(GTK_ENTRY(lineEntry)));
+
+      gboolean changed = FALSE;
+      
+      /* Recalculate the conservation array if the window size has changed */
+      if (newWin != properties->windowSize)
+        {
+          changed = TRUE;
+          properties->windowSize = newWin;
+          calculateConservation(consPlot);
+        }
+      
+      /* Recalculate the window size if either scale has changed */
+      if (newX != properties->xScale || newY != properties->yScale)
+        {
+          changed = TRUE;
+          properties->xScale = newX;
+          properties->yScale = newY;
+          calculateConsPlotBorders(consPlot);
+        }
+
+      /* Redraw if anything has changed */
+      if (changed || newLine != properties->lineWidth)
+        {
+          changed = TRUE;
+          properties->lineWidth = newLine;
+          belvuConsPlotRedrawAll(consPlot);
+        }
+    }
+  
+  gtk_widget_destroy(dialog);  
+}
+
+
+/***********************************************************
+ *                     Calculations                        *
+ ***********************************************************/
+
+/* Calculate the max, min and average conservation. */
+static void calculateConservation(GtkWidget *consPlot)
+{
+  ConsPlotProperties *properties = consPlotGetProperties(consPlot);
+  BelvuContext *bc = properties->bc;
+  
+  /* Smooth the conservation profile by applying a window */
+  if (properties->smooth)
+    g_free(properties->smooth);
+  
+  properties->smooth = (double*)g_malloc(bc->maxLen * sizeof(double));
+  
+  double sum = 0.0;
+  
+  int i = 0;
+  for (i = 0; i < properties->windowSize; ++i) 
+    sum += bc->conservation[i];
+  
+  properties->smooth[properties->windowSize / 2] = sum / properties->windowSize;
+  
+  for ( ; i < bc->maxLen; ++i) 
+    {
+      sum -= bc->conservation[i-properties->windowSize];
+      sum += bc->conservation[i];
+      properties->smooth[i - properties->windowSize / 2] = sum/properties->windowSize;
+    }
+  
+  /* Find max and min and avg conservation */
+  properties->maxcons = -1;
+  properties->mincons = 10000;
+  properties->avgcons = 0;
+  
+  for (i = 0; i < bc->maxLen; ++i) 
+    {
+      if (properties->smooth[i] > properties->maxcons) 
+        properties->maxcons = properties->smooth[i];
+      
+      if (properties->smooth[i] < properties->mincons) 
+        properties->mincons = properties->smooth[i];
+      
+      properties->avgcons += bc->conservation[i];
+    }
+  
+  properties->avgcons /= bc->maxLen * 1.0;
+}
+
+
+/* Calculate the size of the drawing areas */
+static void calculateConsPlotBorders(GtkWidget *consPlot)
+{  
+  ConsPlotProperties *properties = consPlotGetProperties(consPlot);
+  
+  /* Calculate plot size */
+  properties->plotRect.width = properties->xScale * properties->bc->maxLen;
+  properties->plotRect.height = (properties->maxcons - properties->mincons) * properties->yScale;
+
+  /* y scale size (based on width required to display max conservation) */
+  char *tmpStr = g_strdup_printf("%.0f", properties->maxcons);
+  int textWidth, textHeight;
+  getTextSize(properties->drawingArea, tmpStr, &textWidth, &textHeight);
+  g_free(tmpStr);
+  
+  properties->yScaleRect.width = textWidth + MAJOR_TICKMARK_HEIGHT + CONS_PLOT_XPAD;
+  properties->yScaleRect.height = properties->plotRect.height;
+  
+  /* header line size (one character high) */
+  properties->headerRect.width = properties->plotRect.width;
+  properties->headerRect.height = textHeight;
+
+  /* x scale size */
+  properties->xScaleRect.width = properties->plotRect.width;
+  properties->xScaleRect.height = textHeight + MAJOR_TICKMARK_HEIGHT + CONS_PLOT_YPAD;
+
+  /* Calculate x and y coords */
+  properties->headerRect.x = CONS_PLOT_XPAD;
+  properties->headerRect.y = CONS_PLOT_YPAD;
+  
+  properties->yScaleRect.x = CONS_PLOT_XPAD;
+  properties->yScaleRect.y = properties->headerRect.y + properties->headerRect.height + CONS_PLOT_YPAD;
+  
+  properties->plotRect.x = properties->yScaleRect.x + properties->yScaleRect.width + CONS_PLOT_XPAD;
+  properties->plotRect.y = properties->yScaleRect.y;
+  
+  properties->xScaleRect.x = properties->plotRect.x;
+  properties->xScaleRect.y = properties->plotRect.y + properties->plotRect.height + CONS_PLOT_YPAD;
+
+  /* Set the size of the layout. This must include the rightmost extent of the plot
+   * rectangle, and also some extra space on the right for the 'average conservation'
+   * label. */
+  const int width = properties->plotRect.x + properties->plotRect.width + 
+                    getTextWidth(properties->drawingArea, AVG_CONSERVATION_LABEL) +
+                    (CONS_PLOT_XPAD * 2);
+  
+  gtk_layout_set_size(GTK_LAYOUT(properties->drawingArea), 
+                      width, 
+                      properties->xScaleRect.y + properties->xScaleRect.height);
+  
+  belvuConsPlotRedrawAll(consPlot);
+}
+
+/***********************************************************
+ *                        Events                           *
+ ***********************************************************/
+
+static gboolean onExposeConsPlot(GtkWidget *widget, GdkEventExpose *event, gpointer data)
+{
+  GtkWidget *consPlot = GTK_WIDGET(data);
+  ConsPlotProperties *properties = consPlotGetProperties(consPlot);
+  
+  GdkDrawable *window = GTK_LAYOUT(widget)->bin_window;
+  
+  if (window)
+    {
+      GdkDrawable *bitmap = widgetGetDrawable(widget);
+      
+      if (!bitmap)
+        {
+          /* There isn't a bitmap yet. Create it now. */
+          bitmap = createBlankSizedPixmap(widget, window, 
+                                          widget->allocation.width, 
+                                          properties->xScaleRect.y + properties->xScaleRect.height);
+
+          drawConsPlot(widget, bitmap, properties);
+        }
+      
+      if (bitmap)
+        {
+          /* Push the bitmap onto the window */
+          GdkGC *gc = gdk_gc_new(window);
+          GtkAdjustment *hAdjustment = gtk_layout_get_hadjustment(GTK_LAYOUT(widget));
+          gdk_draw_drawable(window, gc, bitmap, 0, 0, hAdjustment->value, 0, -1, -1);
+          g_object_unref(gc);
+        }
+      else
+        {
+          g_warning("Failed to draw conservation plot [%p] - could not create bitmap.\n", widget);
+        }
+    }
+  
+  return TRUE;
+}
+
+
+static void onSizeAllocateConsPlot(GtkWidget *widget, GtkAllocation *allocation, gpointer data)
+{
+  GtkWidget *consPlot = GTK_WIDGET(data);
+  belvuConsPlotRecalcAll(consPlot);
+}
+
+
+void onPlotOptsMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *consPlot = GTK_WIDGET(data);
+  showSettingsDialog(consPlot);
+}
+
+
+static gboolean onScrollPosChangedConsPlot(GtkObject *object, gpointer data)
+{
+  GtkWidget *consPlot = GTK_WIDGET(data);
+  ConsPlotProperties *properties = consPlotGetProperties(consPlot);
+  
+  if (properties->drawingArea)
+    {
+      belvuConsPlotRedrawAll(consPlot);
+    }
+  
+  return FALSE;
+}
+
+/***********************************************************
+ *                     Initialisation                      *
+ ***********************************************************/
+
+static void setConsPlotStyleProperties(GtkWidget *window, BelvuContext *bc, const int height)
+{
+  gtk_widget_set_name(window, BELVU_CONS_PLOT_WINDOW_NAME);
+  
+  /* Just hide the widget when it is closed rather than destroy it */
+  g_signal_connect(window, "delete-event", G_CALLBACK(gtk_widget_hide_on_delete), NULL);
+  
+  /* Set default size based on scale height and alignment window width */
+  int screenWidth = 300, screenHeight = 100;
+  gbtools::GUIGetTrueMonitorSize(window, &screenWidth, &screenHeight);
+  
+  const int width = screenWidth * DEFAULT_BELVU_WINDOW_WIDTH_FRACTION;
+  
+  gtk_window_set_default_size(GTK_WINDOW(window), width, height + CONS_PLOT_WINDOW_YPAD);
+}
+
+
+void createConsPlot(BelvuContext *bc)
+{
+  /* Create the window */
+  bc->consPlot = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+  
+  char *title = g_strdup_printf("%sConservation Profile", belvuGetTitlePrefix(bc));
+  gtk_window_set_title(GTK_WINDOW(bc->consPlot), title);
+  g_free(title);
+  
+  /* We must add all toplevel windows to the list of spawned windows */
+  bc->spawnedWindows = g_slist_prepend(bc->spawnedWindows, bc->consPlot);
+  
+  /* Create the context menu and set a callback to show it */
+  GtkActionGroup *actionGroup = NULL;
+  GtkUIManager *uiManager = createUiManager(bc->consPlot, bc, &actionGroup);
+  GtkWidget *contextmenu = createBelvuMenu(bc->consPlot, "/PlotContextMenu", uiManager);
+  
+  gtk_widget_add_events(bc->consPlot, GDK_BUTTON_PRESS_MASK);
+  g_signal_connect(G_OBJECT(bc->consPlot), "button-press-event", G_CALLBACK(onButtonPressBelvu), contextmenu);
+  
+  GtkWidget *vbox = gtk_vbox_new(FALSE, 0);
+  gtk_container_add(GTK_CONTAINER(bc->consPlot), vbox);
+  
+  /* We'll place the drawing area in a scrolled window */
+  GtkWidget *drawing = gtk_layout_new(NULL, NULL);
+  GtkWidget *scrollWin = gtk_scrolled_window_new(NULL, NULL);
+  gtk_container_add(GTK_CONTAINER(scrollWin), drawing);
+  
+  gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollWin), GTK_POLICY_ALWAYS, GTK_POLICY_ALWAYS);
+  gtk_box_pack_start(GTK_BOX(vbox), scrollWin, TRUE, TRUE, 0);
+  
+  /* Set default background color */
+  GdkColor *bgColor = getGdkColor(BELCOLOR_BACKGROUND, bc->defaultColors, FALSE, FALSE);
+  gtk_widget_modify_bg(drawing, GTK_STATE_NORMAL, bgColor);
+  
+  /* Set properties */
+  consPlotCreateProperties(bc->consPlot, bc, actionGroup, drawing);
+  
+  /* Calculate the plot size so we can set the initial window height correctly.
+   * Must be done after setting properties, but before showing the widgets. */
+  calculateConservation(bc->consPlot);
+  calculateConsPlotBorders(bc->consPlot);
+  ConsPlotProperties *properties = consPlotGetProperties(bc->consPlot);
+  setConsPlotStyleProperties(bc->consPlot, bc, properties->xScaleRect.y + properties->xScaleRect.height + scrollBarWidth());
+
+  /* Connect signals */
+  GtkAdjustment *hAdjustment = gtk_layout_get_hadjustment(GTK_LAYOUT(drawing));
+  g_signal_connect(G_OBJECT(drawing), "size-allocate", G_CALLBACK(onSizeAllocateConsPlot), bc->consPlot);
+  g_signal_connect(G_OBJECT(drawing), "expose-event", G_CALLBACK(onExposeConsPlot), bc->consPlot);
+  g_signal_connect(G_OBJECT(hAdjustment), "value-changed",  G_CALLBACK(onScrollPosChangedConsPlot), bc->consPlot);
+
+  gtk_widget_show_all(bc->consPlot);
+  gtk_window_present(GTK_WINDOW(bc->consPlot));
+}
diff --git a/belvuApp/belvuConsPlot.hpp b/belvuApp/belvuConsPlot.hpp
new file mode 100644
index 0000000..dc42b01
--- /dev/null
+++ b/belvuApp/belvuConsPlot.hpp
@@ -0,0 +1,47 @@
+/*  File: belvuConsPlot.h
+ *  Author: Gemma Barson, 2011-07-01
+ *  Copyright (c) 2011 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: Draws the conservation profile plot
+ *----------------------------------------------------------------------------
+ */
+
+#include "belvuApp/belvu_.hpp"
+
+#define BELVU_CONS_PLOT_WINDOW_NAME        "BelvuConsPlot"
+
+
+void                createConsPlot(BelvuContext *bc);
+void                belvuConsPlotRecalcAll(GtkWidget *consPlot);
+void                onPlotOptsMenu(GtkAction *action, gpointer data);
+
+BelvuContext*       consPlotGetContext(GtkWidget *consPlot);
diff --git a/belvuApp/belvuMain.cpp b/belvuApp/belvuMain.cpp
new file mode 100644
index 0000000..e09d093
--- /dev/null
+++ b/belvuApp/belvuMain.cpp
@@ -0,0 +1,1023 @@
+/*  File: belvuMain.c
+ *  Author: Gemma Barson, 2011-04-06
+ *  Copyright (c) 2011 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: main() function for Belvu application
+ *----------------------------------------------------------------------------
+ */
+
+#include "belvuApp/belvu_.hpp"
+#include "belvuApp/belvuWindow.hpp"
+#include "belvuApp/belvuTree.hpp"
+#include "seqtoolsUtils/utilities.hpp"
+#include "seqtoolsUtils/blxmsp.hpp"
+#include <string.h>
+#include <stdlib.h>
+#include <getopt.h>
+#include <ctype.h>
+
+
+/* Usage text. This is a duplicate of the text that is in 
+ * doc/User_doc/dotter_usage.txt, so ideally we would get rid of this and use
+ * the text from the file instead; for now, we must update both. */
+
+#define USAGE_TEXT "\
+\n\
+ Belvu - View multiple alignments in good-looking colours.\n\
+\n\
+ Usage: belvu [options] <multiple_alignment>|-\n\
+\n\
+   <multiple_alignment>|- = alignment file or pipe.\n\
+\n\
+ Options:\n\
+  -c          Print Conservation table.\n\
+  -l <file>   Load residue color code file.\n\
+  -L <file>   Load markup and organism color code file.\n\
+  -m <file>   Read file with matching sequence segments.\n\
+  -r          Read alignment in 'raw' format (Name sequence).\n\
+  -R          Do not parse coordinates when reading alignment.\n\
+  -o <format> Write alignment or tree to stdout in this format and exit.\n\
+                Valid formats: MSF, Mul(Stockholm), Selex, \n\
+                FastaAlign, Fasta, tree.\n\
+  -X <cutoff> Print UPGMA-based subfamilies at cutoff <cutoff>.\n\
+  -n <cutoff> Make non-redundant to <cutoff> %identity at startup.\n\
+  -Q <cutoff> Remove columns more gappy than <cutoff>.\n\
+  -q <cutoff> Remove sequences more gappy than <cutoff>.\n\
+  -G          Penalize gaps in pairwise comparisons.\n\
+  -i          Ignore gaps in conservation calculation.\n\
+  -P          Remove partial sequences at startup.\n\
+  -C          Don't write coordinates to saved file.\n\
+  -z <char>   Separator char between name and coordinates in saved file.\n\
+  -a          Show alignment annotations on screen (Stockholm format only).\n\
+  -p          Output random model probabilites for HMMER.\n\
+              (Based on all residues.)\n\
+  -S <order>  Sort sequences in this order.\n\
+                a -> alphabetically\n\
+                o -> by Swissprot organism, alphabetically\n\
+                s -> by score\n\
+                n -> by Neighbor-joining tree\n\
+                u -> by UPGMA tree\n\
+                S -> by similarity to first sequence\n\
+                i -> by identity to first sequence\n\
+  -s <file>   Read in file of scores.\n\
+  -T <method> Tree options:\n\
+                i -> Start up showing tree\n\
+                I -> Start up showing only tree\n\
+                d -> Show distances in tree\n\
+                n -> Neighbor-joining\n\
+                u -> UPGMA\n\
+                c -> Don't color tree by organism\n\
+                o -> Don't display sequence coordinates in tree\n\
+                b -> Use Scoredist distance correction (default)\n\
+                j -> Use Jukes-Cantor distance correction\n\
+                k -> Use Kimura distance correction\n\
+                s -> Use Storm & Sonnhammer distance correction\n\
+                r -> Use uncorrected distances\n\
+                p -> Print distance matrix and exit\n\
+                R -> Read distance matrix instead of alignment\n\
+              (only in combination with Tree routines)\n\
+  -b <n>      Apply boostrap analysis with <n> bootstrap samples\n\
+  -B          Print out bootstrap trees and exit\n\
+              (Negative value -> display bootstrap trees on screen)\n\
+  -O <label>  Read organism info after this label (default OS)\n\
+  -t <title>  Set window title.\n\
+  -u          Start up with uncoloured alignment (faster).\n\
+  -h, --help  Show more detailed usage information\n\
+  --compiled  Show package compile date\n\
+  --version   Show package version number\n\
+  --abbrev-title-on   Abbreviate window title prefixes\n\
+  --abbrev-title-off  Do not abbreviate window title prefixes\n\
+\n\
+"
+
+
+#define HELP_TEXT "\
+ Belvu - View multiple alignments in pretty colours.\n\
+\n\
+ Usage: belvu [options]  <multiple_alignment>|-\n\
+\n\
+ <multiple_alignment>|- = file or pipe in Stockholm/Selex/MSF/Fasta format (see below).\n\
+\n\
+\n\
+ Options:\n\
+\n\
+  -c          Print Conservation table.\n\
+  -l <file>   Load residue color code file.\n\
+\n\
+              Format: <symbol> <color>\n\
+              (Lines starting with # are ignored (comment lines))\n\
+\n\
+              Example of color code file:\n\
+\n\
+                  # Aroma\n\
+                  F YELLOW\n\
+                  Y YELLOW\n\
+                  W YELLOW\n\
+\n\
+                  # Yuck\n\
+                  D RED \n\
+                  N GREEN\n\
+                  X BLUE\n\
+\n\
+              Available colors:\n\
+\n\
+                    WHITE \n\
+                    BLACK \n\
+                    LIGHTGRAY\n\
+                    DARKGRAY\n\
+                    RED \n\
+                    GREEN\n\
+                    BLUE\n\
+                    YELLOW\n\
+                    CYAN \n\
+                    MAGENTA\n\
+                    LIGHTRED \n\
+                    LIGHTGREEN \n\
+                    LIGHTBLUE\n\
+                    DARKRED \n\
+                    DARKGREEN \n\
+                    DARKBLUE\n\
+                    PALERED \n\
+                    PALEGREEN \n\
+                    PALEBLUE\n\
+                    PALEYELLOW \n\
+                    PALECYAN \n\
+                    PALEMAGENTA\n\
+                    BROWN \n\
+                    ORANGE \n\
+                    PALEORANGE\n\
+                    PURPLE \n\
+                    VIOLET \n\
+                    PALEVIOLET\n\
+                    GRAY \n\
+                    PALEGRAY\n\
+                    CERISE \n\
+                    MIDBLUE\n\
+\n\
+\n\
+  -L <file>  Load markup and organism color code file.\n\
+             Colour the markup text by residue or colour organism in tree.\n\
+\n\
+	     Example to set color of letters A and B:\n\
+	     A GREEN\n\
+	     B YELLOW\n\
+\n\
+	     Example to set color of organism human:\n\
+	     #=OS BLUE human\n\
+\n\
+\n\
+  -m <file>   Read file with matching sequences segments. This is used to\n\
+              display a match of  a query sequence to a family.  The format\n\
+              of the match is :\n\
+\n\
+              Line 1: Name/start-end score\n\
+              Line 2: Query sequence in matching segment, no pads!\n\
+              Line 3: Sequence of matching segments (qstart1 qend1 fstart1\n\
+              fend2 qstart2 qend2 fstart2 fend2  etc...).\n\
+\n\
+              Example:\n\
+\n\
+              ZK673.9/238-260 21.58\n\
+              CPENWVQFTGNGTQYGVCLRGFT\n\
+              1 2 1 2  4 7 8 11  \n\
+\n\
+              NOTE: A sometimes easier way of doing this is to concatenate\n\
+              the match to the end of the alignment, after a line with\n\
+              exactly this string within the quotes: # matchFooter\n\
+\n\
+\n\
+  -r          Read alignment in 'raw' format (Name sequence).\n\
+\n\
+              Example of raw alignment file: \n\
+\n\
+                  seq1_name MFILKTP\n\
+                  seq1_name MYI.RTP\n\
+\n\
+  -R          Do not parse coordinates when reading alignment.\n\
+  -o <format> Write alignment or tree to stdout in this format and exit.\n\
+                Valid formats: Mul(Stockholm), Selex, MSF, \n\
+                FastaAlign, Fasta, tree.\n\
+  -X <cutoff> Print UPGMA-based subfamilies at cutoff <cutoff>.\n\
+  -n <cutoff> Make non-redundant to <cutoff> %identity at startup.\n\
+  -Q <cutoff> Remove columns more gappy than <cutoff>.\n\
+  -q <cutoff> Remove sequences more gappy than <cutoff>.\n\
+  -G          Penalize gaps in pairwise comparisons.\n\
+  -i          Ignore gaps in conservation calculation.\n\
+  -P          Remove partial sequences at startup.\n\
+  -C          Don't write coordinates to saved file.\n\
+  -z <char>   Separator char between name and coordinates in saved file.\n\
+  -a          Show alignment annotations on screen (Stockholm format only).\n\
+  -p          Output random model probabilites for HMMER.\n\
+              (Based on all residues.)\n\
+  -S <order>  Sort sequences in this order.\n\
+                a -> alphabetically\n\
+                o -> by Swissprot organism, alphabetically\n\
+                s -> by score\n\
+                n -> by Neighbor-joining tree\n\
+                u -> by UPGMA tree\n\
+                S -> by similarity to first sequence\n\
+                i -> by identity to first sequence\n\
+  -s <file>   Read in file of scores.A column with scores will\n\
+              automatically appear after the coordinates.\n\
+\n\
+              Format: <score> <sequence_id>\n\
+\n\
+              Example of score file:\n\
+\n\
+                  2.78 seq_1/180-206\n\
+                  2.78 seq_2/180-206\n\
+                  3.79 seq_3/42-94\n\
+\n\
+\n\
+  -T <method> Tree options:\n\
+                i -> Start up showing tree\n\
+                I -> Start up showing only tree\n\
+                d -> Show distances in tree\n\
+                n -> Neighbor-joining\n\
+                u -> UPGMA\n\
+                c -> Don't color tree by organism\n\
+                o -> Don't display sequence coordinates in tree\n\
+                b -> Use Scoredist distance correction (default)\n\
+                j -> Use Jukes-Cantor distance correction\n\
+                k -> Use Kimura distance correction\n\
+                s -> Use Storm & Sonnhammer distance correction\n\
+                r -> Use uncorrected distances\n\
+                p -> Print distance matrix and exit\n\
+                R -> Read distance matrix instead of alignment\n\
+                     (only in combination with Tree routines)\n\
+  -b <n>      Apply boostrap analysis with <n> bootstrap samples\n\
+  -B          Print out bootstrap trees and exit\n\
+              (Negative value -> display bootstrap trees on screen)\n\
+  -O <label>  Read organism info after this label (default OS)\n\
+  -t <title>  Set window title.\n\
+  -u          Start up with uncoloured alignment (faster).\n\
+  -h, --help  Show this help information\n\
+  --compiled  Show package compile date\n\
+  --version   Show package version number\n\
+\
+\
+\
+\
+\
+\
+"
+
+
+/* Common text to show at the bottom of help/usage text */
+#define FOOTER_TEXT "\
+ setenv BELVU_FETCH to desired sequence fetching program.\n\
+ setenv BELVU_FONT_SIZE to specify window font size.\n\
+ setenv BELVU_STATUSBAR_SIZE to specify statusbar font size (0 => hide statusbar).\n\
+\n\
+-----\n\
+" AUTHOR_TEXT_FULL " \n\
+\n\
+ Reference: Scoredist: A simple and robust protein sequence distance estimator.\n\
+            Erik LL Sonnhammer and Volker Hollich.\n\
+            BMC Bioinformatics 6:108 (2005)\n\
+\n\
+ See http://www.sanger.ac.uk/resources/software/seqtools/ for more info.\n\
+\n\
+ " BELVU_COPYRIGHT_STRING "\n\
+ " BELVU_LICENSE_STRING "\n\
+\n\
+ Version " BELVU_VERSION_COMPILE "\n\
+\n\
+"
+
+/* Text to show the version */
+#define VERSION_TEXT BELVU_PACKAGE_VERSION "\n"
+
+
+
+/* Prints usage info to stderr */
+static void showUsageText(const int exitCode)
+{
+  /* Pring usage info followed by authors */
+  /* Send to stderr if shown due to error, otherwise to stdout */
+  if (exitCode == EXIT_FAILURE)
+    g_message_info("%s%s", USAGE_TEXT, FOOTER_TEXT);
+  else
+    g_message("%s%s", USAGE_TEXT, FOOTER_TEXT);
+}
+
+/* Prints more detailed usage/help info to stderr */
+static void showHelpText(const int exitCode)
+{
+  /* Pring usage info followed by authors */
+  /* Send to stderr if shown due to error, otherwise to stdout */
+  if (exitCode == EXIT_FAILURE)
+    g_message_info("%s%s", HELP_TEXT, FOOTER_TEXT);
+  else
+    g_message("%s%s", HELP_TEXT, FOOTER_TEXT);
+}
+
+/* Prints version info to stderr */
+static void showVersionInfo()
+{
+  g_message(VERSION_TEXT);  
+}
+
+/* Prints compiled date (must go to stdout for our build scripts to work) */
+static void showCompiledInfo()
+{
+  g_message("%s\n", UT_MAKE_COMPILE_DATE());  
+}
+
+
+/* Convert swissprot name suffixes to organisms */
+static void suffix2organism(BelvuContext *bc, GArray *alignArr, GArray *organismArr) 
+{
+  int i = 0;
+  char *cp = NULL;
+  
+  for (i = 0; i < (int)alignArr->len; ++i) 
+    {
+      ALN *alnp = g_array_index(alignArr, ALN*, i);
+      
+      if (!alnp->markup && (cp = strchr(alnp->name, '_'))) 
+        {
+          char *suffix = (char*)g_malloc(strlen(cp) + 1);
+          strcpy(suffix, cp + 1);
+          
+          /* Add organism to table of organisms.  This is necessary to make all 
+           sequences of the same organism point to the same place and to make a 
+           non-redundant list of present organisms */
+          alnp->organism = suffix;
+          
+          /* Only insert a new organism if it is not already in the array */
+          int ip = 0;
+          if (!alnArrayFind(organismArr, alnp, &ip, organism_order))
+            {
+	      ALN *organism = createEmptyAln();
+	      alncpy(organism, alnp);
+	      organism->organism = alnp->organism;
+	    
+              g_array_append_val(organismArr, organism);
+              g_array_sort(organismArr, organism_order);
+
+              // Calculate the max organism name len
+              const int organismLen = strlen(alnp->organism) ;
+
+              if (organismLen > bc->maxOrganismLen)
+                bc->maxOrganismLen = organismLen ;
+            }
+          else
+            {
+              /* Store pointer to existing organism in ALN struct */
+              ALN *alnTmp = g_array_index(organismArr, ALN*, ip);
+	      g_free(alnp->organism);
+              alnp->organism = alnTmp->organism;
+            }
+        }
+    }
+}
+
+
+/* This is to read in sequence names and count sequences */
+static void treeReadDistancesNames(BelvuContext *bc)
+{
+  char   *cp = NULL;
+  
+  char line[MAXLENGTH + 1];
+  
+  if (!fgets (line, MAXLENGTH, bc->treeReadDistancesPipe))
+    g_error("Error reading distance matrix\n");
+  
+  if ((cp = strchr(line, '\n')))
+    *cp = 0;
+  
+  int nseq = 0;
+  
+  while ((cp = strtok(nseq ? 0 : line, " \t")))
+    {
+      ALN *aln = createEmptyAln();
+      
+      strncpy(aln->name, cp, MAXNAMESIZE);
+      
+      aln->name[MAXNAMESIZE] = 0;
+      aln->nr = nseq;
+      g_array_insert_val(bc->alignArr, nseq, aln);
+      
+      nseq++;
+      
+      /* printf("%d  %s\n", aln.nr, aln.name); */
+    }
+  
+  g_array_sort(bc->alignArr, nrorder);
+}
+
+
+static void readScores(char *filename, BelvuContext *bc)
+{
+  char line[MAXLENGTH+1], linecp[MAXLENGTH+1], *cp;
+  FILE *file;
+  int scoreLen;
+  
+  gboolean found = FALSE;
+  gboolean warnings = FALSE;
+
+  ALN aln;
+  initAln(&aln);
+
+  if (!(file = fopen(filename, "r")))
+    g_error("Cannot open file %s\n", filename);
+  
+  while (!feof (file))
+    { 
+      if (!fgets (line, MAXLENGTH, file)) break;
+      strcpy(linecp, line);
+      
+      initAln(&aln);
+      
+      if (!(cp = strtok(line, " "))) 
+	g_error("Error parsing score file %s.\nLine: %s\n", filename, linecp);
+      
+      if (!(sscanf(cp, "%f", &aln.score)))
+        g_error("Error parsing score file %s - bad score.\nLine: %s\n", filename, linecp);
+      
+      if (!(cp = strtok(0, "/"))) 
+	g_error("Error parsing score file %s.\nLine: %s\n", filename, linecp);
+      
+      strncpy(aln.name, cp, MAXNAMESIZE);
+      aln.name[MAXNAMESIZE] = 0;
+      
+      if (!(cp = strtok(0, "-"))) 
+	g_error("Error parsing score file %s.\nLine: %s\n", filename, linecp);
+      
+      if (!(aln.start = atoi(cp)))
+        g_error("Error parsing score file %s - no start coordinate.\nLine: %s\n", filename, linecp);
+      
+      if (!(cp = strtok(0, "\n"))) 
+	g_error("Error parsing score file %s.\nLine: %s\n", filename, linecp);
+      
+      if (!(aln.end = atoi(cp)))
+        g_error("Error parsing score file %s - no end coordinate.\nLine: %s\n", filename, linecp);
+      
+      int idx = 0;
+      if (!alignFind(bc->alignArr, &aln, &idx)) 
+        {
+	  warnings = TRUE;
+          /* printf("Warning: %s/%d-%d (score %.1f) not found in alignment\n", 
+           aln.name, aln.start, aln.end, aln.score);*/
+        }
+      else
+        {
+	  found = TRUE;
+	
+          g_array_index(bc->alignArr, ALN*, idx)->score = aln.score;
+
+          char *scoreStr = g_strdup_printf("%.1f", aln.score);
+          scoreLen = strlen(scoreStr);
+          g_free(scoreStr);
+
+          if (scoreLen > bc->maxScoreLen) 
+            bc->maxScoreLen = scoreLen;
+        }
+    }
+
+  fclose(file);
+  
+  if (found)
+    {
+      bc->displayScores = TRUE;
+    
+      if (warnings)
+        g_warning("Some sequences in the scores file were not found in the alignment.\n");
+    }
+  else
+    {
+      g_critical("Error reading scores file: no sequences in the scores file were found in the alignment.\n");
+    }
+}
+
+
+int main(int argc, char **argv)
+{
+  /* Install error handlers */
+  signal(SIGSEGV, errorHandler);
+  signal(SIGFPE, errorHandler);
+
+  FILE    
+  *file, *pipe;
+  
+  char    
+  *scoreFile = 0,
+  *readMatchFile = 0,
+  *colorCodesFile = 0,
+  *markupColorCodesFile = 0,
+  *output_format = 0,
+  *optargc;
+  
+  int     
+  i,
+  output_probs = 0,
+  show_ann = 0;
+  
+  double   
+  makeNRinit = 0.0,
+  init_rmGappyColumns = 0.0,
+  init_rmGappySeqs = 0.0;
+  
+  
+  
+  
+  /* Set up the GLib message handlers
+   * 
+   * There are two handlers: the default one for all non-critical messages, which will just log
+   * output to the console, and one for critical messages and errors, which will display a 
+   * pop-up message (the idea being that we don't bother the user unless it's something serious).
+   * Note that the latter needs to display a gtk dialog so can't be set up until after gtk_init
+   * has been called.
+   * 
+   * All errors and warnings will be sent to stderr, as will info messages (g_message_info).
+   * Program output destined for stdout should use g_message.
+   * g_debug will direct to stdout as well.
+   * 
+   * In summary:
+   *   g_error: pop-up error message (always fatal)
+   *   g_critical: pop-up error message
+   *   g_warning: error message logged to stderr
+   *   g_message_info: program info message sent to stderr
+   *   g_message: program output message set to stdout
+   *   (g_debug: not sure of usage scenarios but directs to stdout)
+   *   
+   */
+  BlxMessageData msgData;
+  msgData.titlePrefix = g_strdup(BELVU_PREFIX);
+  msgData.parent = NULL;
+  msgData.statusBar = NULL;
+
+  g_log_set_default_handler(defaultMessageHandler, &msgData);
+
+
+  /* Initialise up the context with default values */
+  BelvuContext *bc = createBelvuContext();
+
+
+  /* Set up tree defaults */
+  char treePickString[50];
+  strcpy(treePickString, SWAPstr);
+  
+  setTreeScaleCorr(bc, bc->treeMethod);
+  
+  
+  gboolean verbose = FALSE;
+  gboolean init_rmPartial = FALSE;
+  
+  static gboolean showHelp = FALSE;
+  static gboolean showCompiled = FALSE;
+  static gboolean showVersion = FALSE;
+  static gboolean abbrevTitle = FALSE;
+
+  gtk_parse_args(&argc, &argv);
+  
+  /* Get the input args. We allow long args, so we need to create a long_options array */
+  static struct option long_options[] =
+    {
+      {"abbrev-title-off",	no_argument,        &abbrevTitle, 0},
+      {"abbrev-title-on",	no_argument,        &abbrevTitle, 1},
+      {"compiled",		no_argument,        &showCompiled, 1},
+      {"version",	        no_argument,        &showVersion, 1},
+
+      {"help",                  no_argument,        0, 'h'},
+      {0, 0, 0, 0}
+    };
+  
+  const char  *optstring="aBb:CcGhil:L:m:n:O:o:PpQ:q:RrS:s:T:t:uX:z:";
+  extern int   optind;
+  extern char *optarg;
+  int          optionIndex; /* getopt_long stores the index into the option struct here */
+  int          optc;        /* the current option gets stored here */
+  
+  while ((optc = getopt_long(argc, argv, optstring, long_options, &optionIndex)) != EOF)
+    {
+      switch (optc) 
+        {
+          case 0:
+            /* we get here if getopt_long set a flag; nothing else to do */
+            break; 
+            
+          case 'a': show_ann = 1;                                       break;
+          case 'B': bc->outputBootstrapTrees = TRUE;                    break;
+          case 'b': bc->treebootstraps = atoi(optarg);                  break;
+          case 'C': bc->saveCoordsOn = FALSE;                           break;
+          case 'c': verbose = TRUE;                                     break;
+          case 'G': bc->penalize_gaps = TRUE;                           break;
+          case 'l': colorCodesFile = g_strdup(optarg);                  break;
+          case 'h': showHelp = TRUE;                                    break;
+          case 'i': bc->ignoreGapsOn = TRUE;                            break;
+          case 'L': markupColorCodesFile = g_strdup(optarg);            break;
+          case 'm': readMatchFile = g_strdup(optarg);                   break;
+          case 'n':  makeNRinit = atof(optarg);                         break;
+          case 'O': strncpy(bc->organismLabel, optarg, 2);              break;
+          case 'o': output_format = g_strdup(optarg);                   break;
+          case 'P': init_rmPartial = TRUE;                              break;
+          case 'Q': init_rmGappyColumns = atof(optarg);                 break;
+          case 'q': init_rmGappySeqs = atof(optarg);                    break;
+          case 'p': output_probs = 1;                                   break;
+          case 'R': bc->stripCoordTokensOn = bc->saveCoordsOn = FALSE;  break;
+          case 'r': bc->IN_FORMAT = RAW;                                break;
+            
+          case 'S': 
+            switch (*optarg)
+            {
+              case 'a': bc->sortType = BELVU_SORT_ALPHA;                break;
+              case 'o': bc->sortType = BELVU_SORT_ORGANISM;             break;
+              case 's': bc->sortType = BELVU_SORT_SCORE;                break;
+              case 'S': bc->sortType = BELVU_SORT_SIM;                  break;
+              case 'i': bc->sortType = BELVU_SORT_ID;                   break;
+              case 'n': 
+                bc->treeMethod = NJ;
+                bc->sortType = BELVU_SORT_TREE;                         break;
+              case 'u': 
+                bc->treeMethod = UPGMA; 
+                bc->sortType = BELVU_SORT_TREE;                         break;
+              default : g_error("Illegal sorting order: %s\n", optarg);   break;
+            };
+            break;
+            
+          case 's': scoreFile = g_strdup(optarg);                       break;
+            
+          case 'T': 
+          for (optargc = optarg; *optargc; optargc++) 
+            {
+              switch (*optargc)
+                {
+                  case 'n': 
+                    strcpy(bc->treeMethodString, NJstr);
+                    bc->treeMethod = NJ;                          break;
+                  case 'u': 
+                    strcpy(bc->treeMethodString, UPGMAstr);
+                    bc->treeMethod = UPGMA;                       break;
+                  case 'c':
+                    bc->treeColorsOn = FALSE;                     break;
+                  case 'd':
+                    bc->treeShowBranchlen = TRUE;                 break;
+                  case 'I':
+                    bc->onlyTree = TRUE; /* fall through */
+                  case 'i':
+                    bc->initTree = TRUE;                          break;
+                  case 'j':
+                    strcpy(bc->treeDistString, JUKESCANTORstr);
+                    bc->treeDistCorr = JUKESCANTOR;
+                    setTreeScaleCorr(bc, bc->treeMethod);         break;
+                  case 'k':
+                    strcpy(bc->treeDistString, KIMURAstr);
+                    bc->treeDistCorr = KIMURA;
+                    setTreeScaleCorr(bc, bc->treeMethod);         break;
+                  case 'o':
+                    bc->treeCoordsOn = FALSE;                     break;
+                  case 'p':
+                    bc->treePrintDistances = TRUE;  
+                    bc->initTree = TRUE;                          break;
+                  case 'R':
+                    bc->treeReadDistancesOn = TRUE;               break;
+                  case 's':
+                    strcpy(bc->treeDistString, STORMSONNstr);
+                    bc->treeDistCorr = STORMSONN;
+                    setTreeScaleCorr(bc, bc->treeMethod);         break;
+                  case 'b':
+                    strcpy(bc->treeDistString, SCOREDISTstr);
+                    bc->treeDistCorr = SCOREDIST;
+                    setTreeScaleCorr(bc, bc->treeMethod);         break;
+                  case 'r':
+                    strcpy(bc->treeDistString, UNCORRstr);
+                    bc->treeDistCorr = UNCORR;
+                    setTreeScale(bc, 1.0);          break;
+                  default : g_error("Illegal sorting order: %s\n", optarg);
+                }
+            } 
+            break;
+            
+          case 't': strncpy(bc->Title, optarg, 255);		  break;
+          case 'u': bc->displayColors = FALSE;                    break;
+          case 'X': bc->mksubfamilies_cutoff = atof(optarg);      break;
+          case 'z': bc->saveSeparator = *optarg;		  break;
+          default : g_error("Illegal option\n");                    break;
+        }
+    }
+  
+  if (showVersion)
+    {
+      showVersionInfo();
+      exit (EXIT_SUCCESS);
+    }
+
+  if (showCompiled)
+    {
+      showCompiledInfo();
+      exit (EXIT_SUCCESS);
+    }
+  
+  if (showHelp)
+    { 
+      showHelpText(EXIT_SUCCESS);
+      exit(EXIT_SUCCESS);
+    }
+  
+  if (argc-optind < 1) 
+    { 
+      showUsageText(EXIT_FAILURE);
+      exit(EXIT_FAILURE);
+    }
+  
+  if (!strcmp(argv[optind], "-")) 
+    {
+      pipe = stdin;
+      if (!*bc->Title) strcpy(bc->Title, "stdin");
+    }
+  else 
+    {
+      if (!(pipe = fopen(argv[optind], "r")))
+	g_error("Cannot open file %s\n", argv[optind]);
+      if (!*bc->Title) 
+	strncpy(bc->Title, argv[optind], 255);
+      
+      bc->fileName = g_path_get_basename(argv[optind]);
+      bc->dirName = g_path_get_dirname(argv[optind]);
+    }
+  
+  bc->abbrevTitle = abbrevTitle;
+  msgData.titlePrefix = abbrevTitle ? g_strdup(BELVU_PREFIX_ABBREV) : g_strdup(BELVU_PREFIX);
+    
+  if (bc->treeReadDistancesOn) 
+    {
+      /* Should this really be either or?  Problem: cannot read organism info when reading tree */
+      bc->treeReadDistancesPipe = pipe;
+      treeReadDistancesNames(bc);
+      
+      bc->initTree = TRUE;
+      bc->onlyTree = TRUE;
+      bc->treeCoordsOn = FALSE;
+    }
+  else
+    {
+      readFile(bc, pipe);
+    }
+  
+  if (bc->organismArr->len == 0)
+    suffix2organism(bc, bc->alignArr, bc->organismArr);
+  
+  setOrganismColors(bc->organismArr);
+  
+  if (scoreFile) 
+    readScores(scoreFile, bc);
+  
+  
+  /* Sort by the initial sort order. If sorting by similarity or ID, then
+   * we must have a selected sequence - select the first one that is not
+   * a markup line. */
+  if (bc->sortType == BELVU_SORT_SIM || bc->sortType == BELVU_SORT_ID)
+    {
+      g_array_sort(bc->alignArr, nrorder);
+
+      int i = 0;
+      bc->selectedAln = g_array_index(bc->alignArr, ALN*, i);
+
+      while (i < (int)bc->alignArr->len && bc->selectedAln && bc->selectedAln->markup)
+        {
+          ++i;
+          bc->selectedAln = g_array_index(bc->alignArr, ALN*, i);
+        }
+    }
+
+  doSort(bc, bc->sortType, FALSE);
+  
+  if (!bc->matchFooter && readMatchFile) 
+    {
+      if (!(file = fopen(readMatchFile, "r"))) 
+        g_error("Cannot open file %s\n", readMatchFile);
+      
+      readMatch(bc, file);
+      fclose(file);
+    }
+  else if (bc->matchFooter) 
+    {	 
+      readMatch(bc, pipe);
+      fclose(pipe);
+    }
+  
+  if (!bc->treeReadDistancesOn) 
+    {
+      checkAlignment(bc);
+      setConsSchemeColors(bc);
+    }
+  
+  if (verbose)
+    {
+      /* Print conservation statistics */
+      int i, j, max, consensus = 0 ;
+      double totcons = 0.0;
+    
+      g_message("\nColumn Consensus        Identity       Conservation\n");
+      g_message  ("------ ---------  -------------------  ------------\n");
+    
+      for (i = 0; i < bc->maxLen; ++i)
+        {
+          max = 0;
+          
+          for (j = 1; j < 21; j++)
+            {
+              if (bc->conservCount[j][i] > max)
+                {
+                  max = bc->conservCount[j][i];
+                  consensus = j;
+                }
+            }
+          
+          g_message("%4d       %c      %4d/%-4d = %5.1f %%  %4.1f\n", 
+                    i+1, b2aIndex(consensus), max, bc->alignArr->len, (double)max/bc->alignArr->len*100, bc->conservation[i]);
+          totcons += bc->conservation[i];
+        }
+      
+      g_message ("\nAverage conservation = %.1f\n", totcons/(bc->maxLen*1.0));
+      
+      exit(0);
+    }
+  
+  initMarkupColors();
+  initCustomColors();
+
+  if (colorCodesFile) 
+    {
+      if (!(file = fopen(colorCodesFile, "r"))) 
+        g_error("Cannot open file %s\n", colorCodesFile);
+      
+      readResidueColorScheme(bc, file, getColorArray(), TRUE);
+
+      bc->residueScheme = BELVU_SCHEME_CUSTOM;
+      bc->schemeType = BELVU_SCHEME_TYPE_RESIDUE;
+      bc->colorByResIdOn = FALSE;
+    }
+  
+  if (markupColorCodesFile) 
+    {
+      if (!(file = fopen(markupColorCodesFile, "r"))) 
+        g_error("Cannot open file %s\n", markupColorCodesFile);
+
+      readResidueColorScheme(bc, file, getMarkupColorArray(), FALSE);
+
+      bc->residueScheme = BELVU_SCHEME_CUSTOM;
+      bc->schemeType = BELVU_SCHEME_TYPE_RESIDUE;
+    }
+
+  setResidueSchemeColors(bc);
+
+  if (makeNRinit)
+    mkNonRedundant(bc, makeNRinit);
+  
+  if (init_rmPartial)
+    rmPartialSeqs(bc);
+  
+  if (init_rmGappyColumns)
+    rmEmptyColumns(bc, init_rmGappyColumns/100.0);
+  
+  if (init_rmGappySeqs) {
+    rmGappySeqs(bc, init_rmGappySeqs);
+    rmFinaliseGapRemoval(bc);
+  }
+  
+  if (output_format) 
+    {
+      if (!strcasecmp(output_format, "Stockholm") ||
+          !strcasecmp(output_format, "Mul") ||
+          !strcasecmp(output_format, "Selex"))
+        {
+          writeMul(bc, stdout);
+        }
+      else if (!strcasecmp(output_format, "MSF"))
+        {
+          writeMSF(bc, stdout);
+        }
+      else if (!strcasecmp(output_format, "FastaAlign")) 
+        {
+	  bc->saveFormat = BELVU_FILE_ALIGNED_FASTA;
+          writeFasta(bc, stdout);
+        }
+      else if (!strcasecmp(output_format, "Fasta")) 
+        {
+	  bc->saveFormat = BELVU_FILE_UNALIGNED_FASTA;
+          writeFasta(bc, stdout);
+        }
+      else if (!strcasecmp(output_format, "tree")) 
+        {
+          separateMarkupLines(bc);
+          
+          Tree *tree = treeMake(bc, TRUE, TRUE);
+          saveTreeNH(tree, tree->head, stdout);
+          destroyTree(&tree);
+          
+          g_message(";\n");
+          reInsertMarkupLines(bc);
+        }
+      else
+        {
+          g_error("Illegal output format: %s\n", output_format);
+        }
+
+      exit(0);
+    }
+  
+  if (bc->outputBootstrapTrees && bc->treebootstraps > 0) 
+    {
+      treeBootstrap(bc);
+      exit(0);
+    } 
+  
+  if (output_probs) 
+    {
+      outputProbs(bc, stdout);
+      exit(0);
+    }
+  
+  if (bc->mksubfamilies_cutoff) 
+    {
+      mksubfamilies(bc, bc->mksubfamilies_cutoff);
+      exit(0);
+    }
+
+  /* We've finished all of the command-line-only options so now initialise the GTK GUI */
+  gtk_init(&argc, &argv);
+
+  /* After gtk_init is called, we can start using the popup message handler */
+  g_log_set_handler(NULL, (GLogLevelFlags)(G_LOG_LEVEL_ERROR | G_LOG_LEVEL_CRITICAL | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION), 
+                    popupMessageHandler, &msgData);
+
+  /* Update bits of the context that require the display to be initialised */
+  bc->removeSeqsCursor = gdk_cursor_new(GDK_PIRATE);
+  bc->busyCursor = gdk_cursor_new(GDK_WATCH);
+  createBelvuColors(bc);
+
+  g_message_info("\n%d sequences, max len = %d\n", bc->alignArr->len, bc->maxLen);
+  
+  /* Try to get 8x13 font for menus, if not set on command line */
+  for ( i=0; i < argc; i++)
+    {
+      if (!strcmp(argv[i], "-font")) 
+        break;
+    }
+  
+  if (i == argc) 
+    {
+      argvAdd(&argc, &argv, "-font");
+      argvAdd(&argc, &argv, "8x13");
+    }
+  
+  if (show_ann) 
+    showAnnotationWindow(bc);
+
+  if (bc->outputBootstrapTrees && bc->treebootstraps < 0)
+    {	
+      /* Display [treebootstraps] bootstrap trees */
+      bc->treebootstrapsDisplay = TRUE;
+      
+      bc->treebootstraps = -bc->treebootstraps;
+      
+      treeBootstrap(bc);
+    }
+
+  if (!colorCodesFile) 
+    {
+      bc->schemeType = BELVU_SCHEME_TYPE_CONS;
+      bc->consScheme = BELVU_SCHEME_BLOSUM;
+      setConsSchemeColors(bc);
+    }
+  
+  /* Create the main belvu graph display of aligned sequences. */
+  if (createBelvuWindow(bc, &msgData))
+    {
+      gtk_main();
+    }
+
+  return(EXIT_SUCCESS) ;
+}
diff --git a/belvuApp/belvuTree.cpp b/belvuApp/belvuTree.cpp
new file mode 100644
index 0000000..6ea31ce
--- /dev/null
+++ b/belvuApp/belvuTree.cpp
@@ -0,0 +1,2842 @@
+/*  File: belvuTree.c
+ *  Author: Gemma Barson, 2011-05-06
+ *  Copyright (c) 2011 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: See belvuTree.h
+ *----------------------------------------------------------------------------
+ */
+
+
+#include "belvuApp/belvuTree.hpp"
+#include "belvuApp/belvuWindow.hpp"
+#include "seqtoolsUtils/utilities.hpp"
+#include <gbtools/gbtools.hpp>
+#include <gdk/gdkkeysyms.h>
+#include <string.h>
+#include <ctype.h> /* for isspace etc. */
+#include <math.h>
+#include <algorithm>
+
+using namespace std;
+
+
+#define DEFAULT_TREE_WINDOW_WIDTH_FRACTION      0.6    /* default width of tree window (as fraction of screen width) */
+#define DEFAULT_TREE_WINDOW_HEIGHT_FRACTION     0.35   /* default height of tree window (as fraction of screen height) */
+#define DEFAULT_XPAD                            10
+#define DEFAULT_YPAD                            10
+#define DIALOG_XPAD                             12      /* default x padding around dialog widgets */
+#define DIALOG_YPAD                             8       /* default y padding around dialog widgets */
+#define TABLE_XPAD                              12      /* default x padding around table elements */
+#define TABLE_YPAD                              2       /* default y padding around table elements */
+#define TITLE_MAIN_TREE_PREFIX                  ""                  /* prefix for tree window title for the main belvu tree */
+#define TITLE_BOOTSTRAP_TREE_PREFIX             "Bootstrap "        /* prefix for tree window title for bootstrap trees */
+#define TITLE_NJ_TREE_DESCRIPTION               "Neighbor-joining " /* window title tree description for NJ trees */
+#define TITLE_UPGMA_TREE_DESCRIPTION            "UPGMA "            /* window title tree description for NJ trees */
+
+
+
+/* Globals; original build methods in the tree dialog */
+static BelvuBuildMethod origBuildMethod;
+static BelvuDistCorr origDistCorr;
+
+
+/* Utility struct to hold data for the build-changed signal */
+typedef struct _BuildMethodChangedData
+{
+  BelvuContext *bc;
+  GtkWidget **treeScaleEntry;
+  GtkWidget *buildMethodCombo;
+  GtkWidget *distCorrCombo;
+} BuildMethodChangedData;
+
+
+/*  BLOSUM62 930809
+ 
+ #  Matrix made by matblas from blosum62.iij
+ #  * column uses minimum score
+ #  BLOSUM Clustered Scoring Matrix in 1/2 Bit Units
+ #  Blocks Database = /data/blocks_5.0/blocks.dat
+ #  Cluster Percentage: >= 62
+ #  Entropy =   0.6979, Expected =  -0.5209
+ 
+ Note: to use with a2b[], always subtract 1 from the values !!!!
+ 
+ A   R   N   D   C   Q   E   G   H   I   L   K   M   F   P   S   T   W   Y   V   B   Z   X  \* */ 
+static int BLOSUM62[24][24] = {
+{4, -1, -2, -2,  0, -1, -1,  0, -2, -1, -1, -1, -1, -2, -1,  1,  0, -3, -2,  0, -2, -1,  0, -4},
+{-1,  5,  0, -2, -3,  1,  0, -2,  0, -3, -2,  2, -1, -3, -2, -1, -1, -3, -2, -3, -1,  0, -1, -4},
+{-2,  0,  6,  1, -3,  0,  0,  0,  1, -3, -3,  0, -2, -3, -2,  1,  0, -4, -2, -3,  3,  0, -1, -4},
+{-2, -2,  1,  6, -3,  0,  2, -1, -1, -3, -4, -1, -3, -3, -1,  0, -1, -4, -3, -3,  4,  1, -1, -4},
+{0, -3, -3, -3,  9, -3, -4, -3, -3, -1, -1, -3, -1, -2, -3, -1, -1, -2, -2, -1, -3, -3, -2, -4},
+{-1,  1,  0,  0, -3,  5,  2, -2,  0, -3, -2,  1,  0, -3, -1,  0, -1, -2, -1, -2,  0,  3, -1, -4},
+{-1,  0,  0,  2, -4,  2,  5, -2,  0, -3, -3,  1, -2, -3, -1,  0, -1, -3, -2, -2,  1,  4, -1, -4},
+{ 0, -2,  0, -1, -3, -2, -2,  6, -2, -4, -4, -2, -3, -3, -2,  0, -2, -2, -3, -3, -1, -2, -1, -4},
+{-2,  0,  1, -1, -3,  0,  0, -2,  8, -3, -3, -1, -2, -1, -2, -1, -2, -2,  2, -3,  0,  0, -1, -4},
+{-1, -3, -3, -3, -1, -3, -3, -4, -3,  4,  2, -3,  1,  0, -3, -2, -1, -3, -1,  3, -3, -3, -1, -4},
+{-1, -2, -3, -4, -1, -2, -3, -4, -3,  2,  4, -2,  2,  0, -3, -2, -1, -2, -1,  1, -4, -3, -1, -4},
+{-1,  2,  0, -1, -3,  1,  1, -2, -1, -3, -2,  5, -1, -3, -1,  0, -1, -3, -2, -2,  0,  1, -1, -4},
+{-1, -1, -2, -3, -1,  0, -2, -3, -2,  1,  2, -1,  5,  0, -2, -1, -1, -1, -1,  1, -3, -1, -1, -4},
+{-2, -3, -3, -3, -2, -3, -3, -3, -1,  0,  0, -3,  0,  6, -4, -2, -2,  1,  3, -1, -3, -3, -1, -4},
+{-1, -2, -2, -1, -3, -1, -1, -2, -2, -3, -3, -1, -2, -4,  7, -1, -1, -4, -3, -2, -2, -1, -2, -4},
+{ 1, -1,  1,  0, -1,  0,  0,  0, -1, -2, -2,  0, -1, -2, -1,  4,  1, -3, -2, -2,  0,  0,  0, -4},
+{ 0, -1,  0, -1, -1, -1, -1, -2, -2, -1, -1, -1, -1, -2, -1,  1,  5, -2, -2,  0, -1, -1,  0, -4},
+{-3, -3, -4, -4, -2, -2, -3, -2, -2, -3, -2, -3, -1,  1, -4, -3, -2, 11,  2, -3, -4, -3, -2, -4},
+{-2, -2, -2, -3, -2, -1, -2, -3,  2, -1, -1, -2, -1,  3, -3, -2, -2,  2,  7, -1, -3, -2, -1, -4},
+{ 0, -3, -3, -3, -1, -2, -2, -3, -3,  3,  1, -2,  1, -1, -2, -2,  0, -3, -1,  4, -3, -2, -1, -4},
+{-2, -1,  3,  4, -3,  0,  1, -1,  0, -3, -4,  0, -3, -3, -2,  0, -1, -4, -3, -3,  4,  1, -1, -4},
+{-1,  0,  0,  1, -3,  3,  4, -2,  0, -3, -3,  1, -1, -3, -1,  0, -1, -3, -2, -2,  1,  4, -1, -4},
+{ 0, -1, -1, -1, -2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -2,  0,  0, -2, -1, -1, -1, -1, -1, -4},
+{-4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -1}
+};
+
+
+/* ASCII-to-binary translation table
+ Note: to use with BLOSUM62[], always subtract 1 from the values !!!! */
+#undef NA
+#define NA 23
+static int a2b[] =
+{
+NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+NA, 1,21, 5, 4, 7,14, 8, 9,10,NA,12,11,13, 3,NA,
+15, 6, 2,16,17,NA,20,18,NA,19,NA,NA,NA,NA,NA,NA,
+NA, 1,NA, 5, 4, 7,14, 8, 9,10,NA,12,11,13, 3,NA,
+15, 6, 2,16,17,NA,20,18,23,19,22,NA,NA,NA,NA,NA,
+
+NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA 
+};
+
+
+/* This struct represents an area on the main tree drawing area
+ * where a node is drawn. It can be used to find a node that was 
+ * clicked on. */
+typedef struct _ClickableRect
+{
+  GdkRectangle rect;                /* The area that this clickable rect covers on the drawing area */
+  TreeNode *node;                   /* The node associated with this area */
+  gboolean isBranch;                /* True if this is a tree branch line (false if it's the actual sequence name) */
+} ClickableRect;
+
+
+/* Properties specific to the belvu tree */
+class BelvuTreeProperties
+{
+public:
+  GtkWidget *widget;
+  BelvuContext *bc;	            /* The belvu context */
+  GtkActionGroup *actionGroup;
+    
+  Tree *tree;                     /* The underlying tree struct */
+  gboolean isMainTree;            /* True if tree is the main tree's root node. */
+    
+  GtkWidget *treeArea;            /* Drawing widget for the tree */
+  GdkRectangle treeRect;          /* Specifies the actual area in which we'll draw the tree within treeAre */
+    
+  gdouble charWidth;
+  gdouble charHeight;
+    
+  BelvuBuildMethod buildMethod;   /* The build method used to build the tree */
+  BelvuDistCorr distCorr;         /* The distance-correction method used to build the tree */
+    
+  double treeScale;               /* The tree scale (not used if main tree - uses the values in the context instead) */
+  double lineWidth;               /* Line width (not used if main tree) */
+  gboolean showBranchLen;         /* Whether to display branch lengths (not used if main tree) */
+  gboolean showOrganism;          /* Whether to show organism names (not used if main tree) */
+    
+  GArray *clickableRects;         /* Array of rectangles that associate clickable areas in treeArea to TreeNodes. */
+};
+
+
+
+/* Local function declarations */
+static Tree*                        createEmptyTree();
+static void                         calculateBelvuTreeBorders(GtkWidget *belvuTree);
+
+
+/***********************************************************
+ *                         Properties                      *
+ ***********************************************************/
+
+static BelvuTreeProperties* belvuTreeGetProperties(GtkWidget *widget)
+{
+  return widget ? (BelvuTreeProperties*)(g_object_get_data(G_OBJECT(widget), "BelvuTreeProperties")) : NULL;
+}
+
+static void onDestroyBelvuTree(GtkWidget *belvuTree)
+{
+  BelvuTreeProperties *properties = belvuTreeGetProperties(belvuTree);
+
+  /* We must remove the tree from the list of spawned windows */
+  properties->bc->spawnedWindows = g_slist_remove(properties->bc->spawnedWindows, belvuTree);
+  
+  /* If it is the main tree, also set the pointer in the context to null */
+  if (properties->isMainTree)
+    properties->bc->belvuTree = NULL;
+  
+  if (properties)
+    {
+      /* Free the properties struct itself */
+      delete properties;
+      properties = NULL;
+      g_object_set_data(G_OBJECT(belvuTree), "BelvuTreeProperties", NULL);
+    }
+}
+
+
+/* Create the properties struct and initialise all values. */
+static void belvuTreeCreateProperties(GtkWidget *belvuTree, 
+                                      BelvuContext *bc,
+                                      Tree *tree,
+                                      const gboolean isMainTree,
+                                      GtkActionGroup *actionGroup,
+                                      GtkWidget *treeArea,
+                                      BelvuBuildMethod buildMethod,
+                                      BelvuDistCorr distCorr)
+{
+  if (belvuTree)
+    {
+      BelvuTreeProperties *properties = new BelvuTreeProperties;
+
+      properties->widget = belvuTree;
+      properties->bc = bc;
+      
+      properties->tree = tree;
+      properties->isMainTree = isMainTree;
+      
+      properties->treeArea = treeArea;
+      properties->actionGroup = actionGroup;
+      
+      properties->buildMethod = buildMethod;
+      properties->distCorr = distCorr;
+      properties->treeScale = bc->treeScale;
+      properties->lineWidth = bc->treeLineWidth;
+      properties->showBranchLen = bc->treeShowBranchlen;
+      properties->showOrganism = bc->treeShowOrganism;
+      
+      properties->charHeight = 0;
+      properties->charWidth = 0;
+
+      properties->clickableRects = g_array_new(FALSE, FALSE, sizeof(ClickableRect));
+      
+      g_object_set_data(G_OBJECT(belvuTree), "BelvuTreeProperties", properties);
+      g_signal_connect(G_OBJECT(belvuTree), "destroy", G_CALLBACK (onDestroyBelvuTree), NULL);
+    }
+}
+
+
+BelvuContext* belvuTreeGetContext(GtkWidget *belvuTree)
+{
+  BelvuTreeProperties *properties = belvuTreeGetProperties(belvuTree);
+  return properties ? properties->bc : NULL;
+}
+
+
+GtkActionGroup* belvuTreeGetActionGroup(GtkWidget *belvuTree)
+{
+  BelvuTreeProperties *properties = belvuTreeGetProperties(belvuTree);
+  return (properties ? properties->actionGroup : NULL);
+}
+
+
+/* Get the tree scale for this tree. Uses the value from the main context
+ * if this is the main belvu tree, or the value stored in the properties 
+ * for other trees. */
+static double treeGetScale(BelvuTreeProperties *properties)
+{
+  return (properties->isMainTree ? properties->bc->treeScale : properties->treeScale);
+}
+
+static double treeGetLineWidth(BelvuTreeProperties *properties)
+{
+  return (properties->isMainTree ? properties->bc->treeLineWidth : properties->lineWidth);
+}
+
+static gboolean treeGetShowBranchLen(BelvuTreeProperties *properties)
+{
+  return (properties->isMainTree ? properties->bc->treeShowBranchlen : properties->showBranchLen);
+}
+
+static gboolean treeGetShowOrganism(BelvuTreeProperties *properties)
+{
+  return (properties->isMainTree ? properties->bc->treeShowOrganism : properties->showOrganism);
+}
+
+
+/***********************************************************
+ *                   Tree bootstrapping                    *
+ ***********************************************************/
+
+static int BSorder(gconstpointer xIn, gconstpointer yIn)
+{
+  const BootstrapGroup *x = (const BootstrapGroup*)xIn;
+  const BootstrapGroup *y = (const BootstrapGroup*)yIn;
+  
+  int result = 0;
+  
+  if (x && x->s && y && y->s)
+    result = strcmp(x->s, y->s);
+  else if (x && x->s)
+    result = 1;
+  else if (y && y->s)
+    result = -1;
+  else
+    result = 0;
+  
+  return result;
+}
+
+
+static int BSptrorder(gconstpointer xIn, gconstpointer yIn)
+{
+  const BootstrapGroup *x = *((const BootstrapGroup**)xIn);
+  const BootstrapGroup *y = *((const BootstrapGroup**)yIn);
+  
+  return BSorder(x, y);
+}
+
+
+static BootstrapGroup* createEmptyBootstrapGroup()
+{
+  BootstrapGroup *result = new BootstrapGroup;
+  
+  result->node = NULL;
+  result->s = NULL;
+  
+  return result;
+}
+
+
+/* Combines left and right sequence groups and insert to bootstrap group list */
+static GArray* fillBootstrapGroups(BelvuContext *bc, Tree *tree, TreeNode *node, const gboolean isMainTree) 
+{
+  GArray *result = NULL;
+  
+  BootstrapGroup *BS = createEmptyBootstrapGroup();
+  
+  if (!node->name)
+    {
+      /* Internal node */
+      /* Combine left node sequences into right node array */
+      
+      GArray *left = fillBootstrapGroups(bc, tree, node->left, isMainTree);
+      GArray *right = fillBootstrapGroups(bc, tree, node->right, isMainTree);
+      
+      /* Nothing to do for root */
+      if (node != tree->head)
+        {      
+          /* Combine left and right groups */
+          int i = 0;
+          for (i = 0 ; i < (int)left->len; ++i) 
+            {
+              char *s = g_array_index(left, char*, i);
+              g_array_append_val(right, s);
+              g_array_sort(right, strcmp_);
+            }
+          
+          g_array_unref(left);
+          
+          /* Create string with group members */
+          int ssize = 1;
+          for (i = 0 ; i < (int)right->len ; ++i) 
+            ssize += (strlen(g_array_index(right, char*, i)) + 1);
+          
+          BS->s = (char*)g_malloc(ssize+1);
+          BS->s[0] = 0;
+          
+          for (i = 0 ; i < (int)right->len ; ++i) 
+            {
+              char *ch = g_array_index(right, char*, i);
+              strcat(BS->s, ch);
+              strcat(BS->s, " ");
+            }
+          
+          /* printf("   New bootstrap group: %s\n", BS->s); */
+          
+          if (isMainTree) 
+            {
+              /* Associate this node with the group string */
+              BS->node =  node;
+              
+              /* Add group string to array of bootstrap groups */
+              g_array_append_val(bc->bootstrapGroups, BS);
+            }
+          else
+            {
+              /* Find group string and increment counter if exists */
+              BootstrapGroup *BS2;
+              
+              int ip = 0;
+              if (bsArrayFind(bc->bootstrapGroups, BS, &ip, BSptrorder)) 
+                {
+                  BS2 = g_array_index(bc->bootstrapGroups, BootstrapGroup*, ip);
+                  BS2->node->boot++;
+                  DEBUG_OUT("Found bootgroup %s (%d)\n", BS->s, ip);
+                }
+              else
+                {
+                  DEBUG_OUT("Did not find bootgroup %s\n", BS->s);
+                }
+              
+              if (BS && BS->s)
+                g_free(BS->s);
+              
+              if (BS)
+                delete BS;
+            }
+          
+          result = right;
+        }
+    }
+  else
+    {
+      /* Leaf node - return as embryonic array with one entry */
+      GArray *leaf = g_array_sized_new(FALSE, FALSE, sizeof(char*), bc->alignArr->len);
+      g_array_append_val(leaf, node->name);
+      g_array_sort(leaf, strcmp_);
+      result = leaf;
+    }
+  
+  return result;
+}
+
+
+static void normaliseBootstraps(BelvuContext *bc, TreeNode *node) 
+{
+  node->boot = 100.0 * (double)node->boot/(double)bc->treebootstraps;
+}
+
+
+/* Bootstrap the internal nodes in a tree.
+ 1. Set up a list (array) of all internal nodes with leaf content and pointer to node
+ 2. In bootstrap tree, for each internal node, check if its contents exists in list. If so, increment node's bootstrap count
+ 3. Turn increments to percentages
+ */
+static void treeBootstrapStats(BelvuContext *bc, Tree *tree)
+{
+  /* Traverse tree, fill array bootstrapGroups */
+  bc->bootstrapGroups = g_array_sized_new(FALSE, TRUE, sizeof(BootstrapGroup*), bc->alignArr->len);
+  fillBootstrapGroups(bc, tree, tree->head, TRUE);
+  g_array_sort(bc->bootstrapGroups, BSptrorder);
+
+#ifdef DEBUG
+  DEBUG_OUT("Created bootstrap groups:\n");
+  int i = 0;
+  for ( ; i < bc->bootstrapGroups->len; ++i)
+    {
+      BootstrapGroup *bs = g_array_index(bc->bootstrapGroups, BootstrapGroup*, i);
+      DEBUG_OUT("%d:  %s\n", i, (bs && bs->s ? bs->s : "null"));
+    }
+#endif
+  
+  treeBootstrap(bc);
+  
+  /* Turn increments to percentages */
+  treeTraverse(bc, tree->head, normaliseBootstraps);
+}
+
+
+void treeBootstrap(BelvuContext *bc)
+{
+  separateMarkupLines(bc);
+  
+  /* We will change the sequence strings in the alignments, so first
+   * we must make a copy so we can revert them. */
+  GArray *alignArrTmp = copyAlignArray(bc->alignArr);
+  
+#if defined(__CYGWIN__) || defined(DARWIN)
+  srand(time(0));
+#else
+  srand48(time(0));
+#endif
+  
+  int iter = 0;
+  for (iter = 0; iter < bc->treebootstraps; ++iter) 
+    {
+      /* Make bootstrapped Alignment */
+      int i = 0;
+      for (i = 0; i < bc->maxLen; ++i) 
+        {
+          int src = 0;
+          
+#if defined(__CYGWIN__) || defined(DARWIN)
+          src = (int)((((double)rand())/RAND_MAX) * bc->maxLen);
+#else
+          src = (int)(drand48() * bc->maxLen);
+#endif
+          
+          columnCopy(bc->alignArr, i, alignArrTmp, src);
+        }
+      
+      /* Create the bootstrap tree */
+      Tree* tree = treeMake(bc, FALSE, FALSE);
+      
+      if (bc->outputBootstrapTrees) 
+        {
+          if (bc->treebootstrapsDisplay) 
+            {
+              /* The tree window takes ownership of the tree struct */
+              createBelvuTreeWindow(bc, tree, FALSE);
+            }
+          else
+            {
+              /* Print the tree, then destroy it */
+              g_message("\n");
+              saveTreeNH(tree, tree->head, stdout);
+              g_message(";\n");
+              
+              destroyTree(&tree);
+            }
+        }
+      else
+        {
+          /* Collect the bootstrap statistics then destroy the tree */
+          fillBootstrapGroups(bc, tree, tree->head, FALSE);
+          destroyTree(&tree);
+        }
+    }
+  
+  /* Restore alignment */
+  int i = 0;
+  for (i = 0; i < (int)bc->alignArr->len; ++i)
+    {
+      ALN *srcAln = g_array_index(alignArrTmp, ALN*, i);
+      ALN *destAln = g_array_index(bc->alignArr, ALN*, i);
+      
+      if (destAln->sequenceStr)
+        g_string_free(destAln->sequenceStr, TRUE);
+      
+      if (srcAln->sequenceStr)
+        destAln->sequenceStr = srcAln->sequenceStr; /* take ownership of the sequence string */
+      else 
+        destAln->sequenceStr = NULL;
+    }
+  
+  g_array_free(alignArrTmp, TRUE); /* destroys the array and all its ALN structs */
+  
+  reInsertMarkupLines(bc);
+}
+
+
+/***********************************************************
+ *                   Business logic                        *
+ ***********************************************************/
+
+/*
+ * Expect format:
+ *
+ * name1 name2 name3
+ * 1-1   1-2   1-3
+ * 2-1   2-2   2-3
+ * 3-1   3-2   3-3
+ */
+static void treeReadDistances(BelvuContext *bc, double **pairmtx)
+{
+  char   *p;
+  int    i = 0, j = 0 ;
+  double  d;
+  char line[MAXLENGTH+1];
+  
+  while (!feof (bc->treeReadDistancesPipe))
+    { 
+      if (!fgets (line, MAXLENGTH, bc->treeReadDistancesPipe))
+	break;
+      
+      j = 0;
+      
+      while ( (p = strtok(j ? 0 : line, " \t")) && !isspace(*p))
+	{
+	  d = atof(p);
+	  DEBUG_OUT("%d  %d  %f\n", i, j, d);
+	  pairmtx[i][j] = d;
+	  j++;
+	}
+      
+      if (j != (int)bc->alignArr->len)
+	g_error("nseq = %d, but read %d distances in row %d\n", bc->alignArr->len, j, i);
+      
+      i++;
+    }
+  
+  if (j != (int)bc->alignArr->len)
+    g_error("nseq = %d, but read %d distance rows\n", bc->alignArr->len, i);
+  
+  return ;
+}
+
+
+/* Correct an observed distance to an estimated 'true' distance.
+ 
+ Adapted from Lasse Arvestad's lapd program
+ 
+ od = observed distance in percent 
+ 
+ */
+static double treeJUKESCANTOR(double od)
+{
+  double cd;
+  
+  od /= 100;
+  
+  od = 20.0/19.0*od;
+  if  (od > 0.95) od = 0.95; /* Limit to 300 PAM */
+  
+  cd = -19.0/20.0 * log(1-od);
+  
+  return cd*100;
+}
+
+
+
+/* Correct an observed distance to an estimated 'true' distance.
+ 
+ Adapted from Lasse Arvestad's lapd program
+ 
+ od = observed distance in percent 
+ 
+ */
+static double treeKimura(double od)
+{
+  double adjusted, cd;
+  
+  od /= 100;
+  
+  adjusted = od + 0.2 * od*od;
+  
+  if (adjusted > 0.95) adjusted = 0.95;   /* Limit to 300 PAM */
+  
+  cd = -log(1 - adjusted);
+  
+  return cd*100;
+}
+
+
+
+/* Correct an observed distance to an estimated 'true' distance.
+ 
+ Based on Christian Storm's 5th order polynomial curve fitting of ROSE simulated data
+ 
+ od = observed distance in percent 
+ 
+ */
+static double treeSTORMSONN(double od)
+{
+  double cd;			/* Corrected distance */
+  
+  if (od > 91.6) return 1000.0;	/* Otherwise log of negative value below */
+  
+  od /= 100;
+  
+  cd= -log(1 
+           -0.95844*od 
+           -0.69957*od*od
+           +2.4955*od*od*od
+           -4.6353*od*od*od*od
+           +2.8076*od*od*od*od*od);
+  
+  /* printf(" od=%f  cd=%f\n", od, cd); */
+  
+  if (cd > 3.0) cd=3.0; /* Limit to 300 PAM */
+  
+  return cd*100;
+}
+
+
+static double treeSCOREDIST(char *seq1, char *seq2, BelvuContext *bc)
+{
+  char *s1 = seq1;
+  char *s2 = seq2;
+  
+  
+  /* Calc scores */
+  int len = 0;
+  int sc = 0;
+  int s1sc = 0;
+  int s2sc = 0;
+  
+  for (len=0; *s1; s1++, s2++) 
+    {
+      if (bc->penalize_gaps) 
+        {
+          if (isGap(*s1) || isGap(*s2)) sc -= 0.6;	
+        }
+      
+      if (!isGap(*s1) && !isGap(*s2)) 
+        {
+          int val1 = a2b[(unsigned char)(*s1)];
+          int val2 = a2b[(unsigned char)(*s2)];
+          
+          if (val1 > 0 && val2 > 0)
+            {
+              sc += (double) BLOSUM62[val1 - 1][val2 - 1];
+              s1sc += (double) BLOSUM62[val1 - 1][val1 - 1];
+              s2sc += (double) BLOSUM62[val2 - 1][val2 - 1];
+            }
+
+          len++;
+        }
+    }
+  
+  double maxsc = (s1sc + s2sc) / 2.0;
+  
+  /* Calc expected score */
+  double expect =  -0.5209 * len;
+  
+  double od = ((double)sc - expect) / (maxsc - expect);
+  
+  if (!len || od < 0.05) od = 0.05;  /* Limit to 300 PAM;  len==0 if no overlap */
+  if (od > 1.0) od = 1.0; 
+  
+  double cd = -log(od);
+  
+  DEBUG_OUT("SCOREDIST: len=%d  sc=%d  maxsc=%.2f  expect=%.2f  maxsc-expect=%.2f  od=%.3f\n", len, sc, maxsc, expect, maxsc-expect, od);
+  
+  cd = cd * 100.0 * 1.337 /* Magic scaling factor optimized for Dayhoff data */ ;
+  
+  if (cd > 300) cd = 300;  /* Limit to 300 PAM */
+  
+  /*    if (!bc->penalize_gaps) {
+   g_free(s1);
+   g_free(s2);
+   } */
+  
+  return cd;
+}
+
+
+
+/* Sum branchlengths, allow going up parents
+ 
+ If going up parents, arg1 = parent  ;  arg2 = child.
+ 
+ If you're not interested in going up parents, simply call me with
+ the same node in both arguments.
+ 
+ */
+static double treeSize3way(TreeNode *node, TreeNode *fromnode) 
+{
+  int root = 0;
+  TreeNode *left = NULL;
+  TreeNode *right = NULL;
+  double len = 0.0;
+  
+  if (!node) 
+    return 0.0;
+  
+  /* Get the correct branch length */
+  if (node->left == fromnode || node->right == fromnode) /* Going up the tree */
+    len = fromnode->branchlen;
+  else
+    len = node->branchlen;
+  
+  if (node->left == fromnode) 
+    {
+      left = node->parent;
+      if (!left) 
+        root = 1;
+    }
+  else
+    {
+      left = node->left;
+    }
+  
+  if (node->right == fromnode) 
+    {
+      right = node->parent;
+      if (!right) 
+        root = 1;
+    }
+  else 
+    {
+      right = node->right;
+    }
+  
+  if (root)
+    {
+      double retval;
+      
+      /* go across tree root */
+      if (left) /* Coming from right */
+        retval = treeSize3way(left, left);
+      else  /* Coming from left */
+        retval = treeSize3way(right, right);
+      
+      DEBUG_OUT("Returning (%.1f + %.1f) = %.1f\n", fromnode->branchlen, retval, fromnode->branchlen + retval);
+      
+      return fromnode->branchlen + retval;
+    }
+  else 
+    {
+      double 
+      l = treeSize3way(left, node),
+      r = treeSize3way(right, node),
+      retval = (l + r)/2.0 + len;
+      
+      DEBUG_OUT("Returning (%.1f + %.1f)/2 + %.1f = %.1f\n", l, r, len, retval);
+      
+      return retval;
+    }
+}
+
+
+/* Calculate the difference between left and right trees if the tree
+ were to be rerooted at this node.
+ 
+ What is calculated (bal) is the difference between 'left' and
+ 'right' subtrees minus the length of the branch itself. If this
+ difference is negative, a perfectly balanced tree can be made.  For
+ imperfectly balanced trees we want to root at the branch that gives
+ the best balance.  However, perfectly balanced trees are all
+ 'perfect' so here we chose the branch with most equal subtrees.
+ 
+ Actually it is not "left" and "right" but "down" and "up" subtrees.  */
+static void treeCalcBalance(BelvuContext *bc, TreeNode *node) 
+{
+  double bal, lweight, rweight;
+  
+  if (node == bc->treeBestBalancedNode) 
+    return;
+  
+  DEBUG_OUT("Left/Downstream weight\n");
+  
+  lweight = treeSize3way(node, node);
+  
+  DEBUG_OUT("Right/Upstream weight\n");
+  
+  rweight = treeSize3way(node->parent, node);
+  
+  bal = fabsf(lweight - rweight) - node->branchlen;
+  
+  DEBUG_OUT("Node=%s (branchlen = %.1f).  Weights = %.1f  %.1f. Bal = %.1f\n", 
+            node->name, node->branchlen, lweight, rweight, bal);
+  
+  if (bal < bc->treeBestBalance) 
+    { /* better balance */
+      if (bc->treeBestBalance > 0.0 ||
+          /* If previous tree was not perfectly balanced, or
+       If previous tree was perfectly balanced - choose root with best subtree balance */
+          fabsf(lweight - rweight) < bc->treeBestBalance_subtrees)
+        {
+          DEBUG_OUT("            %s has better balance %.1f < %.1f\n", node->name, bal, bc->treeBestBalance);
+          
+          bc->treeBestBalancedNode = node;
+          bc->treeBestBalance = bal;
+          bc->treeBestBalance_subtrees = fabsf(lweight - rweight);
+        }
+    }
+}
+
+
+static TreeNode *treeParent2leaf(TreeNode *newparent, TreeNode *curr)
+{
+  if (!curr->parent) 
+    { /* i.e. the old root */
+      if (curr->left == newparent)
+        {
+          newparent->branchlen += curr->right->branchlen; /* Add second part of this vertex */
+          return curr->right;
+        }
+      else
+        {
+          newparent->branchlen += curr->left->branchlen;
+          return curr->left;
+        }
+    } 
+  else
+    {
+      if (curr->left == newparent) 
+        {
+          /* Change the link to the new parent to the old parent */
+          curr->left = treeParent2leaf(curr, curr->parent);
+          curr->left->branchlen = curr->branchlen;
+        }
+      else
+        {
+          curr->right = treeParent2leaf(curr, curr->parent);
+          curr->right->branchlen = curr->branchlen;
+        }
+    }
+  
+  return curr;
+}
+
+
+/* Balance the two sides of a tree branch by the weights of the two subtrees.
+ The branch has two sides: llen and rlen.
+ 
+ Rationale: The correct center point balances the treesizes on both sides.
+ 
+ Method: Calculate half the unbalance, add it to the appropriate side.
+ 
+ No real theory for this, but it seems to work in easy cases 
+ */
+static void treeBalanceByWeight(TreeNode *lnode, TreeNode *rnode, double *llen, double *rlen)
+{
+  double adhocRatio = 0.95;
+  
+  double 
+  halfbal, 
+  branchlen = *rlen+*llen;
+  double lweight = treeSize3way(lnode, lnode) /*- lnode->branchlen*/;
+  double rweight = treeSize3way(rnode, rnode) /*- rnode->branchlen*/;
+  
+  halfbal = fabsf(lweight-rweight) / 2.0;
+  
+  if (halfbal < *llen && halfbal < *rlen) {
+    
+    if (lweight < rweight) {
+      *llen += halfbal;
+      *rlen -= halfbal;
+    }
+    else {
+      *llen -= halfbal;
+      *rlen += halfbal;
+    }
+  }
+  else {
+    /* The difference is larger than the final branch -
+     give nearly all weight to the shorter one (cosmetic hack) */
+    if (lweight < rweight) {
+      *llen = branchlen*adhocRatio;
+      *rlen = branchlen*(1.0 - adhocRatio);
+    }
+    else {
+      *rlen = branchlen*adhocRatio;
+      *llen = branchlen*(1.0 - adhocRatio);
+    }
+  }
+}
+
+
+static void fillParents(TreeNode *parent, TreeNode *node)
+{
+  if (!node) 
+    return;
+  
+  node->parent = parent;
+  fillParents(node, node->left);
+  fillParents(node, node->right);
+}
+
+
+static char *fillOrganism(TreeNode *node)
+{
+  char 
+  *leftorganism,
+  *rightorganism;
+  
+  if (node->name) 
+    return node->organism;
+  
+  leftorganism = fillOrganism(node->left);
+  rightorganism = fillOrganism(node->right);
+  
+  /* printf("\nFill: (left=%s, right=%s):  ", leftorganism, rightorganism); */
+  
+  node->organism = (leftorganism == rightorganism ? leftorganism : NULL);
+  
+  return node->organism;
+}
+
+
+/* Allocate memory for a new TreeNode and initialise its contents to empty values */
+static TreeNode* createEmptyTreeNode()
+{
+  TreeNode *result = (TreeNode*)g_malloc(sizeof *result);
+  
+  result->dist = 0.0;
+  result->branchlen = 0.0;
+  result->boot = 0.0;
+  result->left = NULL;
+  result->right = NULL;
+  result->parent = NULL;
+  result->name = NULL;
+  result->organism =NULL;
+  result->aln = NULL;
+  result->box = 0;
+  result->color = 0;
+  
+  return result;
+}
+
+
+/* Recursively destroy the tree node and all its child nodes */
+static void destroyTreeNode(TreeNode **node)
+{
+  if (node == NULL || *node == NULL)
+    return;
+
+  /* Destroy all child nodes first */
+  destroyTreeNode(&((*node)->left));
+  destroyTreeNode(&((*node)->right));
+
+  /* Free memory owned by the node */
+  if ((*node)->name)
+    {
+      g_free((*node)->name);
+      (*node)->name = NULL;
+    }
+
+  /* Free the node struct itself, and set the pointer to it to null */
+  g_free(*node);
+  *node = NULL;
+}
+
+
+/* Swap the left and right branches of the given node */
+static void treeSwapNode(TreeNode *node)
+{
+  void *tmp;
+  
+  tmp = node->left;
+  node->left = node->right;
+  node->right = (TreeNode*)tmp;
+}
+
+
+/* Rerooting works roughly this way:
+ 
+ - A new node is created with one child being the node chosen as new root 
+ and the other child the previous parent of it.  The sum of left and right
+ branch lengths of the new root should equal the branch length of the chosen node.
+ - All previous parent nodes are visited and converted so that:
+ 1. The previous parent node becomes a child.
+ 2. The new parent is the node that calls.
+ 3. The branchlength of the previous parent node is assigned to its parent.
+ - When the previous root is reached, it is deleted and the other child
+ becomes the child of the calling node.
+ 
+ Note that treeReroot destroys the old tree, since it reuses the nodes.  
+ Use treecpy if you still need it for something later.
+ */
+static TreeNode *treeReroot(TreeNode *node)
+{
+  TreeNode *newroot = createEmptyTreeNode();
+  
+  newroot->left = node;
+  newroot->right = treeParent2leaf(node, node->parent);
+  
+  fillParents(newroot, newroot->left);
+  fillParents(newroot, newroot->right);
+  
+  newroot->left->branchlen = newroot->right->branchlen = node->branchlen / 2.0;
+  treeBalanceByWeight(newroot->left, newroot->right, 
+                      &newroot->left->branchlen, &newroot->right->branchlen);
+  
+  return newroot;
+}
+
+
+static gboolean doublesEqual(const double a, const double b)
+{
+  return (b < a + MACHINE_RES && b > a - MACHINE_RES);
+}
+
+
+/* Find the node which has most equal balance, return new tree with this as root.
+ */
+static TreeNode *treeFindBalance(BelvuContext *bc, TreeNode *node) 
+{
+  double lweight = treeSize3way(node->left, node->left);
+  double rweight = treeSize3way(node->right, node->right);
+  
+  bc->treeBestBalancedNode = node;
+  bc->treeBestBalance = fabsf(lweight - rweight);
+  
+  bc->treeBestBalance_subtrees = 
+  fabsf((lweight - node->left->branchlen) - (rweight - node->right->branchlen));
+  
+  DEBUG_OUT("Initial weights = %.1f  %.1f. Bal = %.1f\n", lweight, rweight, bc->treeBestBalance);
+  
+  treeTraverse(bc, node, treeCalcBalance);
+  
+  if (bc->treeBestBalancedNode == node)
+    return node;
+  else
+    return treeReroot(bc->treeBestBalancedNode);
+}
+
+
+/* Calculate the pairwise tree distances */
+static void calcPairwiseDistMatrix(BelvuContext *bc, double **pairmtx)
+{
+  /* Calculate pairwise distance matrix. Note that this only calculates
+   * the portion of the array above the diagonal (where j > i); the other
+   * values are left uninitialised and should not be used. */
+  arrayOrder(bc->alignArr);
+  
+  int i = 0;
+  for (i = 0; i < (int)bc->alignArr->len - 1; ++i)
+    {
+      ALN *aln_i = g_array_index(bc->alignArr, ALN*, i);
+      char *alniSeq = alnGetSeq(aln_i);
+      
+      int j = i+1;
+      for (j = i+1; j < (int)bc->alignArr->len; ++j)
+        {
+          ALN *aln_j = g_array_index(bc->alignArr, ALN*, j);
+          char *alnjSeq = alnGetSeq(aln_j);
+          
+          pairmtx[i][j] = 100.0 - percentIdentity(alniSeq, alnjSeq, bc->penalize_gaps);
+          
+          if (bc->treeDistCorr == KIMURA) 
+            pairmtx[i][j] = treeKimura(pairmtx[i][j]);
+          else if (bc->treeDistCorr == JUKESCANTOR) 
+            pairmtx[i][j] = treeJUKESCANTOR(pairmtx[i][j]);
+          else if (bc->treeDistCorr == STORMSONN) 
+            pairmtx[i][j] = treeSTORMSONN(pairmtx[i][j]);
+          else if (bc->treeDistCorr == SCOREDIST) 
+            pairmtx[i][j] = treeSCOREDIST(alniSeq, alnjSeq, bc);
+        }
+    }
+}
+
+
+/* Output the tree distances */
+static void printTreeDistances(BelvuContext *bc, double **pairmtx)
+{
+  double dist;
+
+  int i = 0;
+  for (i = 0; i < (int)bc->alignArr->len; i++) 
+    {
+      if (!bc->treeCoordsOn) 
+        {
+          g_message("%s\t", g_array_index(bc->alignArr, ALN*, i)->name);
+        }
+      else
+        {
+          g_message("%s/%d-%d\t",
+                    g_array_index(bc->alignArr, ALN*, i)->name,
+                    g_array_index(bc->alignArr, ALN*, i)->start,
+                    g_array_index(bc->alignArr, ALN*, i)->end);
+        }
+    }
+  g_message ("\n");
+  
+  for (i = 0; i < (int)bc->alignArr->len; ++i) 
+    {
+      int j = 0;
+      for (j = 0; j < (int)bc->alignArr->len; ++j) 
+        {
+          if (i == j) 
+            dist = 0.0;
+          else if (i < j)
+            dist = pairmtx[i][j];
+          else
+            dist = pairmtx[j][i];
+          
+          g_message("%7.3f\t", dist);
+        }
+      g_message ("\n");
+    }
+}
+
+
+#ifdef DEBUG
+/* Print the given matrix */
+static void printMtx(BelvuContext *bc, double **mtx) 
+{
+  int i, j;
+  
+  g_message ("\n");
+  for (i = 0; i < bc->alignArr->len; i++) 
+    {
+      for (j = 0; j < bc->alignArr->len; j++)
+        g_message("%6.2f ", mtx[i][j]);
+      
+      g_message ("\n");
+  }
+}
+
+
+/* Print staisitics about the tree construction */
+static void printTreeStats(BelvuContext *bc, double **pairmtx, double *avgdist, double **Dmtx, TreeNode **node)
+{
+  g_message("Node status, Avg distance:\n");
+  
+  int i = 0;
+  for (i = 0; i < bc->alignArr->len; i++)
+    g_message("%6d ", (node[i] ? 1 : 0)); 
+  
+  g_message("\n");
+  
+  for (i = 0; i < bc->alignArr->len; i++)
+    g_message("%6.2f ", avgdist[i]); 
+  
+  g_message("\n\nPairdistances, corrected pairdistances:");
+  printMtx(bc, pairmtx);
+  printMtx(bc, Dmtx);
+  g_message("\n");
+}
+#endif
+
+
+/* Construct the tree using the NJ method. Populates Dmtx */
+static void constructTreeNJ(BelvuContext *bc, double **pairmtx, double *avgdist, TreeNode **node, double **Dmtx)
+{
+  int count = 0;
+  
+  /* Calculate vector r (avgdist) */
+  int i = 0;
+  for (i = 0; i < (int)bc->alignArr->len; ++i)
+    {
+      if (!node[i]) 
+        continue;
+      
+      avgdist[i] = 0.0;
+      
+      int j = 0;
+      for (count=0, j = 0; j < (int)bc->alignArr->len; j++)
+        {
+          if (!node[j]) 
+            continue;
+          
+          if (i < j)
+            avgdist[i] += pairmtx[i][j];
+          else if (i > j)
+            avgdist[i] += pairmtx[j][i];
+          
+          count++;
+        }
+      
+      if (count == 2)	/* Hack, to accommodate last node */
+        avgdist[i] = 1;
+      else
+        avgdist[i] /= 1.0*(count - 2);
+    }
+  
+  /* Calculate corrected matrix Dij. Note again that only values 
+   * above the diagonal (where j > i) are populated; other values
+   * are uninitialised and should not be used. */
+  if (1 /* gjm */)
+    {
+      for (i = 0; i < (int)bc->alignArr->len - 1; ++i)
+        {
+          if (!node[i])
+            continue;
+          
+          int j = i+1;
+          for (j = i+1; j < (int)bc->alignArr->len; ++j)
+            {
+              if (!node[j]) 
+                continue;
+              
+              Dmtx[i][j] = pairmtx[i][j] - (avgdist[i] + avgdist[j]);
+            }
+        }
+    }
+  else
+    {		/* Felsenstein */
+      double Q = 0.0;
+      
+      for (i = 0; i < (int)bc->alignArr->len - 1; ++i)
+        {
+          if (!node[i])
+            continue;
+          
+          int j = i+1;
+          for (j = i+1; j < (int)bc->alignArr->len; j++)
+            {
+              if (!node[j]) 
+                continue;
+              
+              Q += pairmtx[i][j];
+            }
+        }
+      
+      for (i = 0; i < (int)bc->alignArr->len - 1; ++i)
+        {
+          if (!node[i])
+            continue;
+          
+          int j = i+1;
+          for (j = i+1; j < (int)bc->alignArr->len; j++)
+            {
+              if (!node[j])
+                continue;
+              
+              Dmtx[i][j] = (pairmtx[i][j] +
+                            (2.0*Q)/(count-(count == 2 ? 1 : 2)) - 
+                            avgdist[i] - avgdist[j]) / 2.0;
+            }
+        }
+    }
+}
+
+
+/* Find smallest distance pair in pairmtx */
+static double treeFindSmallestDist(BelvuContext *bc, double **pairmtx, double **curMtx, double **Dmtx, TreeNode **node, int *maxiOut, int *maxjOut)
+{
+  int maxi = -1;
+  int maxj = -1;
+  double maxid = 1000000;
+  double pmaxid = 1000000;
+
+  int i = 0;
+  for (i = 0; i < (int)bc->alignArr->len - 1; ++i) 
+    {
+      if (!node[i]) 
+        continue;
+      
+      int j = i+1;
+      for (j = i+1; j < (int)bc->alignArr->len; ++j) 
+        {
+          if (!node[j]) 
+            continue;
+          
+          /* printf("iter %d, i=%d. j=%d, dist= %f\n", iter, i, j, curMtx[i][j]);*/
+          if (curMtx[i][j] < maxid) 
+            {
+              maxid = curMtx[i][j];
+              pmaxid = pairmtx[i][j];
+              maxi = i;
+              maxj = j;
+            }
+          else if (bc->treeMethod == NJ && doublesEqual(Dmtx[i][j], maxid) && pairmtx[i][j] < pmaxid) 
+            {
+              /* To resolve ties - important for tree look! */
+              maxi = i;
+              maxj = j;
+              pmaxid = pairmtx[i][j];
+            }
+        }
+    }
+  
+  maxid = pairmtx[maxi][maxj]; /* Don't want to point to Dmtx in NJ */
+  
+  if (maxiOut)
+    *maxiOut = maxi;
+  
+  if (maxjOut)
+    *maxjOut = maxj;
+  
+  return maxid;
+}
+
+
+/* This does the work to create all the nodes in a tree. All the memory for
+ * the nodes etc. is allocated using a BlxHandle which is stored in the tree.
+ * To free the memory used by the tree, the handle should be destroyed. */
+Tree* treeMake(BelvuContext *bc, const gboolean doBootstrap, const gboolean displayFeedback)
+{
+  /* This can take a long time, so let the user know we're doing something.
+   * Only display feedback text if asked, though (e.g. we don't want this each
+   * time if calculating a lot of bootstrap trees) */
+  if (displayFeedback)
+    {
+      g_message_info("Calculating tree...\n");
+    }
+
+  setBusyCursor(bc, TRUE);
+
+  TreeNode *newnode = NULL ;
+  int maxi = -1, maxj = -1;
+  double maxid = 0.0, **pairmtx, **Dmtx, **curMtx, *src, *trg, 
+  *avgdist,		/* vector r in Durbin et al */
+  llen = 0, rlen = 0;
+  TreeNode **nodes;   /* Array of (primary) nodes.  Value=0 => stale column */
+
+  /* Create the tree struct */
+  Tree *tree = createEmptyTree();
+
+  /* Allocate memory */
+  BlxHandle localHandle = handleCreate(); /* handles local memory that will be free'd before we return */
+  
+  nodes = (TreeNode**)handleAlloc(&localHandle, bc->alignArr->len * sizeof(TreeNode *));
+  pairmtx = (double**)handleAlloc(&localHandle, bc->alignArr->len * sizeof(double *));
+  Dmtx = (double**)handleAlloc(&localHandle, bc->alignArr->len * sizeof(double *));
+  avgdist = (double*)handleAlloc(&localHandle, bc->alignArr->len * sizeof(double));
+
+  int i = 0;
+  for (i = 0; i < (int)bc->alignArr->len; ++i)
+    {
+      ALN *aln_i = g_array_index(bc->alignArr, ALN*, i);
+
+      pairmtx[i] = (double*)handleAlloc(&localHandle, bc->alignArr->len*sizeof(double));
+      Dmtx[i] = (double*)handleAlloc(&localHandle, bc->alignArr->len*sizeof(double));
+
+      nodes[i] = createEmptyTreeNode();
+      nodes[i]->name =  (char*)g_malloc(strlen(aln_i->name) + 50);
+      
+      if (!bc->treeCoordsOn) 
+        sprintf(nodes[i]->name, "%s", aln_i->name);
+      else
+        sprintf(nodes[i]->name, "%s/%d-%d", aln_i->name, aln_i->start, aln_i->end);
+      
+      nodes[i]->aln = aln_i;
+      nodes[i]->organism = aln_i->organism;
+    }
+
+  /* Get the pairwise tree distances (from file if given, or calculate them) */
+  if (bc->treeReadDistancesOn)
+    treeReadDistances(bc, pairmtx);
+  else
+    calcPairwiseDistMatrix(bc, pairmtx);
+
+  /* If requested (or if debug is on), print the distance matrix */
+  if (bc->treePrintDistances) 
+    {
+      printTreeDistances(bc, pairmtx);
+      exit(0);
+    }  
+
+#ifdef DEBUG
+  printTreeDistances(bc, pairmtx);
+#endif
+  
+  /* Construct the tree */
+  int iter = 0;
+  for (iter = 0; iter < (int)bc->alignArr->len - 1; ++iter)
+    {
+      if (bc->treeMethod == NJ)
+        {
+          constructTreeNJ(bc, pairmtx, avgdist, nodes, Dmtx);
+          curMtx = Dmtx;
+        }
+      else 
+        {
+          curMtx = pairmtx;
+        }
+      
+#ifdef DEBUG
+      printTreeStats(bc, pairmtx, avgdist, Dmtx, nodes);
+#endif
+      
+      /* Find smallest distance pair in pairmtx */
+      maxid = treeFindSmallestDist(bc, pairmtx, curMtx, Dmtx, nodes, &maxi, &maxj);
+
+      /* Merge rows & columns of maxi and maxj into maxi
+       Recalculate distances to other nodes */
+      for (i = 0; i < (int)bc->alignArr->len; ++i)
+        {
+          if (!nodes[i])
+            continue;
+          
+          if (i < maxi) 
+            trg = &pairmtx[i][maxi];
+          else if (i > maxi) 
+            trg = &pairmtx[maxi][i];
+          else continue;
+          
+          if (i < maxj) 
+            src = &pairmtx[i][maxj];
+          else if (i > maxj) 
+            src = &pairmtx[maxj][i];
+          else continue;
+          
+          if (bc->treeMethod == UPGMA) 
+            *trg = (*trg + *src) / 2.0;
+          else
+            *trg = (*trg + *src - maxid) / 2.0;
+        }
+      
+      /* Create node for maxi and maxj */
+      newnode = createEmptyTreeNode();
+      
+      if (bc->treeMethod == UPGMA)
+        {
+          /* subtract lower branch lengths from absolute distance
+           Horribly ugly, only to be able to share code UPGMA and NJ */
+          TreeNode *tmpnode = nodes[maxi]->left;
+          
+          for (llen = maxid; tmpnode; tmpnode = tmpnode->left)
+            llen -= tmpnode->branchlen;
+          
+          tmpnode = nodes[maxj]->right;
+          
+          for (rlen = maxid; tmpnode; tmpnode = tmpnode->right)
+            rlen -= tmpnode->branchlen;
+        }
+      else
+        {
+          llen = (maxid + avgdist[maxi] - avgdist[maxj]) / 2.0;
+          rlen = maxid - llen;
+          
+          if (iter == (int)bc->alignArr->len - 2)
+            { /* Root node */
+              
+              /* Not necessary anymore, the tree is re-balanced at the end which calls this too
+               treeBalanceByWeight(node[maxi], node[maxj], &llen, &rlen);*/
+              
+              /* Put entire length of root branch in one leg so the rebalancing 
+               will work properly (otherwise it is hard to take this branch into account */
+              rlen += llen;
+              llen = 0;
+            }
+        }
+      
+      DEBUG_OUT("Iter %d: Merging %d and %d, dist= %f\n", iter, maxi+1, maxj+1, curMtx[maxi][maxj]);
+      DEBUG_OUT("maxid= %f  llen= %f  rlen= %f\n", maxid, llen, rlen);
+      DEBUG_OUT("avgdist[left]= %f  avgdist[right]= %f\n\n", avgdist[maxi], avgdist[maxj]);
+      
+      newnode->left = nodes[maxi];
+      newnode->left->branchlen = llen;
+      
+      newnode->right = nodes[maxj];
+      newnode->right->branchlen = rlen;
+      
+      newnode->organism = (nodes[maxi]->organism == nodes[maxj]->organism ?
+                           nodes[maxi]->organism : NULL);
+      
+      nodes[maxi] = newnode;
+      nodes[maxj] = NULL;
+    }
+
+  fillParents(newnode, newnode->left);
+  fillParents(newnode, newnode->right);
+  
+  if (bc->treeMethod == UPGMA)
+    newnode->branchlen = 100 - maxid ;
+  
+  if (bc->treeMethod == NJ)
+    newnode = treeFindBalance(bc, newnode) ;
+  
+  fillOrganism(newnode);
+
+  /* Set the newnode to be the root node of the tree */
+  tree->head = newnode;
+
+  /* Clean up locally allocated memory */
+  handleDestroy(&localHandle);
+
+  if (doBootstrap && bc->treebootstraps) 
+    treeBootstrapStats(bc, tree);
+  
+  setBusyCursor(bc, FALSE);
+  
+  if (displayFeedback)
+    {
+      g_message_info("Finished calculating tree.\n");
+    }
+  
+  return tree;
+}
+
+
+/***********************************************************
+ *                   Find Orthologs                        *
+ ***********************************************************/
+
+static void treePrintNode(BelvuContext *bc, TreeNode *node) 
+{
+  if (node->name) 
+    g_message("%s ", node->name);
+}
+
+
+static gboolean treePrintOrthologsRecur(BelvuContext *bc, TreeNode *node) 
+{
+  gboolean found = FALSE;
+  
+  if (!node || !node->left || !node->right) 
+    return found;
+  
+  DEBUG_OUT("\n 1 (%s, seq=%s):  ", node->left->organism, node->left->name);
+  DEBUG_OUT("\n 2 (%s, seq=%s)\n: ", node->right->organism, node->right->name);
+  
+  if (node->left->organism && node->right->organism &&
+      node->left->organism != node->right->organism) 
+    {
+      found = TRUE;
+      
+      g_message("\nSpecies 1 (%s):  ", node->left->organism);
+      treeTraverse(bc, node->left, treePrintNode);
+      g_message("\nSpecies 2 (%s): ", node->right->organism);
+      treeTraverse(bc, node->right, treePrintNode);
+      g_message("\n");
+    }
+  else 
+    {
+      if (treePrintOrthologsRecur(bc, node->left))
+        found = TRUE;
+      
+      if (treePrintOrthologsRecur(bc, node->right))
+        found = TRUE;
+    }
+  
+  return found;
+}
+
+
+void treePrintOrthologs(BelvuContext *bc, GtkWidget *treeWindow) 
+{
+  BelvuTreeProperties *properties = belvuTreeGetProperties(treeWindow);
+  
+  if (properties->tree == NULL)
+    {
+      g_critical("Tree has not been calculated.\n");
+      return;
+    }
+  else if (treePrintOrthologsRecur(bc, properties->tree->head))
+    {
+      g_message_info("Found orthologs\n");
+    }
+  else
+    {
+      g_message_info("No orthologs\n");
+    }
+}
+
+
+/***********************************************************
+ *                        Drawing                          *
+ ***********************************************************/
+
+/* This is called to re-make the underlying tree for the given tree
+ * widget. It must be called after a change that renders the existing
+ * tree invalid, e.g. deleting an alignment or changing the build method */
+void belvuTreeRemakeTree(GtkWidget *belvuTree)
+{
+  BelvuTreeProperties *properties = belvuTreeGetProperties(belvuTree);
+  BelvuContext *bc = properties->bc;
+
+  /* Re-make the tree */
+  separateMarkupLines(bc);
+  
+  Tree *newTree = treeMake(bc, TRUE, TRUE);
+  
+  /* Update the contents of our tree with the new member variables (we don't 
+   * change the actual tree pointer if it already exists because the context 
+   * may point to the same tree struct). */
+  if (properties->tree)
+    {
+      destroyTreeContents(properties->tree);
+      
+      if (newTree)
+        {
+          properties->tree->head = newTree->head;
+          g_free(newTree);
+          newTree = properties->tree;
+        }
+    }
+  else
+    {
+      properties->tree = newTree;
+    }
+  
+  reInsertMarkupLines(bc);
+  
+  /* Make sure our properties are up to date with the data used to create
+   * the new tree. */
+  properties->buildMethod = bc->treeMethod;
+  properties->distCorr = bc->treeDistCorr;
+  
+  calculateBelvuTreeBorders(belvuTree);
+  
+  /* If the alignment is sorted by tree and we've changed the main belvu tree's
+   * order, we need to refresh the sort order */
+  if (properties->isMainTree)
+    onTreeOrderChanged(bc);
+}
+
+
+/* This is called when the tree settings have been changed. */
+static void belvuTreeUpdateSettings(BelvuContext *bc, GtkWidget *treeWindow)
+{
+  if (!treeWindow)
+    return;
+  
+  /* The tree window exists, so must be updated */
+  BelvuTreeProperties *properties = belvuTreeGetProperties(treeWindow);
+  g_assert(properties);
+  
+  if (properties->tree == NULL || properties->tree->head == NULL)
+    {
+      /* The underlying tree has been invalidated, so we'll need to re-make
+       * the whole tree. */
+      belvuTreeRemakeTree(treeWindow);
+    }
+  else
+    {
+      /* Just redraw the existing tree */
+      calculateBelvuTreeBorders(treeWindow);
+      belvuTreeRedrawAll(treeWindow, NULL);
+    }
+}
+
+
+/* Clear any cached drawables and redraw everything. It also recalculates
+ * the tree if the build method has changed. */
+void belvuTreeRedrawAll(gpointer widget, gpointer data)
+{
+  if (!widget || !stringsEqual(gtk_widget_get_name(GTK_WIDGET(widget)), BELVU_TREE_WINDOW_NAME, TRUE))
+    return;
+  
+  GtkWidget *belvuTree = GTK_WIDGET(widget);
+  BelvuTreeProperties *properties = belvuTreeGetProperties(belvuTree);
+
+  widgetClearCachedDrawable(properties->treeArea, NULL);
+  gtk_widget_queue_draw(belvuTree);
+}
+
+
+static void createClickableRect(BelvuTreeProperties *properties,
+                                TreeNode *node,
+                                const int x,
+                                const int y,
+                                const int width,
+                                const int height,
+                                const gboolean isBranch)
+{
+  ClickableRect clickRect;
+
+  clickRect.node = node;
+  clickRect.isBranch = isBranch;
+  
+  clickRect.rect.x = x;
+  clickRect.rect.y = y;
+  clickRect.rect.width = width;
+  clickRect.rect.height = height;
+  
+  g_array_append_val(properties->clickableRects, clickRect);
+}
+
+
+/* The actual tree drawing routine.
+ Note: must be in sync with treeDrawNodeBox, which draws clickable
+ boxes first.
+ */
+static double treeDrawNode(BelvuContext *bc, 
+                           GtkWidget *widget,
+                           GdkDrawable *drawable, 
+                           GdkGC *gc, 
+                           BelvuTreeProperties *properties,
+                           GdkColor *defaultColor, 
+                           TreeNode *node, 
+                           double x) 
+{
+  double y, yl, yr;
+  
+  if (!node) 
+    return 0.0;
+  
+  const int curX = x + roundNearest(node->branchlen * (double)(treeGetScale(properties) * properties->charWidth));
+
+  GdkGC *leftGc = gdk_gc_new(drawable);
+  gdk_gc_copy(leftGc, gc);
+  yl = treeDrawNode(bc, widget, drawable, leftGc, properties, defaultColor, node->left, curX);
+  
+  gdk_gc_set_foreground(gc, defaultColor);
+  yr = treeDrawNode(bc, widget, drawable, gc, properties, defaultColor, node->right, curX);
+  
+  GdkGC *gcTmp = gdk_gc_new(drawable);
+  gdk_gc_set_foreground(gcTmp, defaultColor);
+
+  if (yl) 
+    {
+      /* internal node */
+      y = (yl + yr) / 2.0;
+      
+      /* connect children */
+      gdk_draw_line(drawable, gc, curX, yr, curX, y);
+      gdk_gc_copy(gc, leftGc);
+      gdk_draw_line(drawable, gc, curX, yl, curX, y);
+      
+      if (node->left->organism != node->right->organism)
+        {
+          /* Reset color */
+          gdk_gc_set_foreground(gc, defaultColor);
+        }
+    }
+  else 
+    {
+      /* Sequence name */
+      const gboolean isSelected = (bc->selectedAln && bc->selectedAln == node->aln);
+      
+      y = bc->tree_y * properties->charHeight;
+      bc->tree_y++;
+      
+      if (bc->treeColorsOn && node->organism) 
+        {
+          /* Get the color for this organism */
+          ALN aln;
+          initAln(&aln);
+          
+          aln.organism = node->organism;
+          
+          int ip = 0;
+          if (alnArrayFind(bc->organismArr, &aln, &ip, organism_order)) 
+            {
+              GdkColor color;
+              int colorNum = g_array_index(bc->organismArr, ALN*, ip)->color;
+              convertColorNumToGdkColor(colorNum, FALSE, &color); /* we currently don't change the text color when the node is selected */
+              
+              gdk_gc_set_foreground(gc, &color);
+	    }
+	}
+      else
+        {
+          /* Just use the default color */
+          gdk_gc_set_foreground(gc, defaultColor);
+        }
+      
+      /* Draw the sequence name */
+      int nameWidth = 0, nameHeight = 0;
+      const int textX = curX + DEFAULT_XPAD;
+      const int textY = y - properties->charHeight / 2;
+
+      drawText(widget, drawable, gcTmp, textX, textY, node->name, &nameWidth, &nameHeight);
+
+      if (isSelected || (node->aln && node->aln->color != WHITE))
+        {
+          /* Highlight this node */
+          GdkColor color;
+          convertColorNumToGdkColor(node->aln->color, isSelected, &color);
+          
+          gdk_gc_set_foreground(gcTmp, &color);
+          gdk_draw_rectangle(drawable, gcTmp, TRUE, textX - DEFAULT_XPAD/2, textY - 1, nameWidth + DEFAULT_XPAD, nameHeight + 2);
+          
+          /* This is a bit hacky because it re-draws text we've already drawn because it was covered by the
+           * background. We should rearrange things slightly so that we can get nameWidth and nameHeight another
+           * way so we can avoidthis, but it's a very small performance hit so not worth worrying about. */
+          GdkColor *fgColor = getGdkColor(BELCOLOR_TREE_TEXT, bc->defaultColors, isSelected, FALSE);
+          gdk_gc_set_foreground(gcTmp, fgColor);
+          drawText(widget, drawable, gcTmp, curX + DEFAULT_XPAD, y - properties->charHeight / 2, node->name, NULL, NULL);
+        }
+      
+      /* Make a clickable box for the sequence name */
+      createClickableRect(properties, node, textX, textY, nameWidth, properties->charHeight, FALSE);
+
+      if (treeGetShowOrganism(properties) && node->organism) 
+        {
+          drawText(widget, drawable, gc, curX + nameWidth + DEFAULT_XPAD * 2, y - properties->charHeight / 2, node->organism, NULL, NULL);
+        }
+    }
+  
+  /* Horizontal branches. If highlighting orthologs, draw a shaded area underneath
+   * the branch. */
+  if (bc->highlightOrthologs && 
+      node->left && node->right &&
+      node->left->organism && node->right->organism &&
+      node->left->organism != node->right->organism) 
+    {
+      gdk_gc_set_foreground(gcTmp, defaultColor);
+      gdk_draw_rectangle(drawable, gcTmp, TRUE, x, y - properties->charHeight/2, curX - x, properties->charHeight);
+    }
+  
+  gdk_draw_line(drawable, gc, curX, y, x, y);
+  createClickableRect(properties, node, x, y - properties->charHeight/2, curX - x, properties->charHeight, TRUE);
+  
+  if (treeGetShowBranchLen(properties) && node->branchlen) 
+    {
+      /* Draw the branch label, which shows the branch length */
+      char *tmpStr = g_strdup_printf("%.1f", node->branchlen);
+
+      const int textWidth = getTextWidth(widget, tmpStr);
+      double pos = min((double)curX, x) + (abs((int)(curX - x)) / 2) - (textWidth * 0.5); /* centre text at middle of branch */
+
+      drawText(widget, drawable, gc, pos, y, tmpStr, NULL, NULL);
+      
+      g_free(tmpStr);
+    }
+  
+  /* This prints the tree bootstrap statistics */
+  if (bc->treebootstraps && !node->name && node != properties->tree->head && !bc->treebootstrapsDisplay) 
+    {
+      GdkColor *color = getGdkColor(BELCOLOR_TREE_BOOTSTRAP, bc->defaultColors, FALSE, FALSE);
+      gdk_gc_set_foreground(gc, color);
+
+      char *tmpStr = g_strdup_printf("%.0f", node->boot);
+      const int textWidth = getTextWidth(widget, tmpStr);
+      double pos = curX - textWidth - 0.5;
+      
+      if (pos < 0.0) 
+        pos = 0;
+      
+      g_message("%f  %f   \n", node->boot, pos / properties->charWidth);
+      drawText(widget, drawable,  gc, pos, y, tmpStr, NULL, NULL);
+
+      g_free(tmpStr);
+      gdk_gc_set_foreground(gc, defaultColor);
+    }
+  
+  g_object_unref(leftGc);
+
+  return y;
+}
+
+
+/* Destroy the contents of the given tree and reset all member variables to
+ * empty values. Does not destroy the tree struct itself */
+void destroyTreeContents(Tree *tree)
+{
+  if (tree == NULL)
+    return;
+
+  /* Free all memory used by the tree nodes */
+  if (tree->head)
+    destroyTreeNode(&tree->head);
+
+  tree->head = NULL;
+}
+
+
+/* Destroy the given tree's contents and the tree itself. */
+void destroyTree(Tree **tree)
+{
+  if (tree == NULL)
+    return;
+  
+  destroyTreeContents(*tree);
+  
+  /* Free the tree struct */
+  g_free(*tree);
+  *tree = NULL;
+}
+
+
+/* Create a tree struct, initialised with sensible empty values */
+static Tree* createEmptyTree()
+{
+  Tree *result = (Tree*)g_malloc(sizeof *result);
+  
+  result->head = NULL;
+  
+  return result;
+}
+
+
+static void drawBelvuTree(GtkWidget *widget, GdkDrawable *drawable, BelvuTreeProperties *properties)
+{
+  BelvuContext *bc = properties->bc;
+
+  if (!properties->tree || !properties->tree->head)
+    return;
+  
+  /* Clear any previous clickable rects that were created */
+  g_array_unref(properties->clickableRects);
+  properties->clickableRects = g_array_new(FALSE, FALSE, sizeof(ClickableRect));
+  
+  bc->tree_y = 1;
+
+  GdkGC *gc = gdk_gc_new(drawable);
+  GdkColor *defaultColor = getGdkColor(BELCOLOR_TREE_LINE, bc->defaultColors, FALSE, FALSE);
+  gdk_gc_set_line_attributes(gc, treeGetLineWidth(properties) * properties->charWidth, GDK_LINE_SOLID, GDK_CAP_BUTT, GDK_JOIN_MITER);
+  
+  treeDrawNode(bc, widget, drawable, gc, properties, defaultColor, properties->tree->head, properties->treeRect.x);
+
+  int xscale = treeGetScale(properties) * properties->charWidth;
+  int yscale = properties->charHeight;
+  
+  const int markerHt = 0.5 * yscale;
+  
+  const int xStart = properties->treeRect.x;
+  const int xWidth = 10 * xscale;
+  const int xHalfWidth = xWidth / 2;
+  int xMax = 0;
+  
+  /* Draw scale */
+  if (bc->treeMethod == UPGMA) 
+    {
+      xMax = xStart + (100 * xscale);
+
+      bc->tree_y += 2;
+      int y = bc->tree_y * yscale;
+
+      gdk_draw_line(drawable, gc, xStart, y, xMax, y);
+      
+      int x = xStart;
+      int i = 1;
+      for (; i <= 101; i += 10, x += xWidth) 
+        {
+          if (i < 101) 
+            {
+              /* Draw half-way marker lines */
+              gdk_draw_line(drawable, gc, x + xHalfWidth, y, x + xHalfWidth, y + markerHt);
+            }
+          
+          /* Draw the full marker line, with a label */
+          gdk_draw_line(drawable, gc, x, y, x, y + markerHt);
+
+          char *tmpStr = g_strdup_printf("%d", i - 1);
+          drawText(widget, drawable, gc,  x - (0.5 * xscale), y + (2 * markerHt), tmpStr, NULL, NULL);
+          g_free(tmpStr);
+        }
+    }
+  else
+    {
+      xMax = xStart + (10 * xscale);
+
+      bc->tree_y += 3;
+      int y = bc->tree_y * yscale;
+      int x = xStart;
+      
+      drawText(widget, drawable, gc, x + xHalfWidth, y - 3 * markerHt, "0.1", NULL, NULL);
+      
+      gdk_draw_line(drawable, gc, x, y, x + xWidth, y);
+      gdk_draw_line(drawable, gc, x, y - markerHt, x, y + markerHt);
+      gdk_draw_line(drawable, gc, x + xWidth, y - markerHt, x + xWidth, y + markerHt);
+    }
+  
+  if (bc->treeMethod == NJ) 
+    {	
+      int y = bc->tree_y * yscale;
+
+      double lweight, rweight;
+      
+      lweight = treeSize3way(properties->tree->head->left, properties->tree->head);
+      rweight = treeSize3way(properties->tree->head->right, properties->tree->head);
+      
+      char *tmpStr = NULL;
+#ifdef DEBUG
+      tmpStr = g_strdup_printf("Tree balance = %.1f (%.1f-%.1f)", fabsf(lweight - rweight), lweight, rweight);
+#else
+      tmpStr = g_strdup_printf("Tree balance = %.1f", fabsf(lweight - rweight));
+#endif
+      
+      drawText(widget, drawable, gc, xMax + 2 * DEFAULT_XPAD, y - markerHt, tmpStr, NULL, NULL);
+      g_free(tmpStr);
+    }
+  
+  g_object_unref(gc);
+}
+
+
+/* Expose function for the drawing area. The main belvuTree widget is passed as
+ * the user data. */
+static gboolean onExposeBelvuTree(GtkWidget *widget, GdkEventExpose *event, gpointer data)
+{
+  GtkWidget *belvuTree = GTK_WIDGET(data);
+  GdkDrawable *window = GTK_LAYOUT(widget)->bin_window;
+  
+  if (window)
+    {
+      GdkDrawable *bitmap = widgetGetDrawable(widget);
+      BelvuTreeProperties *properties = belvuTreeGetProperties(belvuTree);
+      
+      if (!bitmap)
+        {
+          /* There isn't a bitmap yet. Create it now. */
+          if (properties->treeRect.width > 0 && properties->treeRect.height > 0)
+            {
+              bitmap = createBlankSizedPixmap(widget, window, properties->treeRect.x * 2 + properties->treeRect.width, 
+                                              properties->treeRect.y * 2 + properties->treeRect.height);
+              
+              separateMarkupLines(properties->bc);
+              drawBelvuTree(widget, bitmap, properties);
+              reInsertMarkupLines(properties->bc);
+            }
+        }
+      
+      if (bitmap)
+        {
+          /* Push the bitmap onto the window */
+          GdkGC *gc = gdk_gc_new(window);
+          gdk_draw_drawable(window, gc, bitmap, 0, 0, 0, 0, -1, -1);
+          g_object_unref(gc);
+        }
+      else
+	{
+	  g_warning("Failed to draw Belvu tree [%p] - could not create bitmap.\n", widget);
+	}
+    }
+  
+  return TRUE;
+}
+
+
+/***********************************************************
+ *                       Mouse events                      *
+ ***********************************************************/
+
+/* Called when the tree has been left-clicked */
+static void onLeftClickTree(GtkWidget *belvuTree, const int x, const int y)
+{
+  BelvuTreeProperties *properties = belvuTreeGetProperties(belvuTree);
+  BelvuContext *bc = properties->bc;
+
+  /* We store a list of rectangles in our properties that tell us where 
+   * clickable items lie. Loop through them and see if the click point lies
+   * inside any of them. */
+  ClickableRect *foundRect = NULL;
+
+  int i = 0;
+  for ( ; i < (int)properties->clickableRects->len; ++i)
+    {
+      ClickableRect *clickRect = &g_array_index(properties->clickableRects, ClickableRect, i);
+      
+      if (pointInRect(x, y, &clickRect->rect))
+        {
+          foundRect = clickRect;
+          break; /* we shouldn't have overlapping items, so exit once we have found one */
+        }
+    }
+
+  if (foundRect)
+    {
+      if (foundRect->isBranch)
+        {
+          BelvuTreeProperties *properties = belvuTreeGetProperties(belvuTree);
+
+          /* We clicked on a tree branch - swap or re-root */
+          if (bc->treePickMode == NODESWAP)
+            {
+              treeSwapNode(foundRect->node);
+            }
+          else if (bc->treePickMode == NODEROOT)
+            {
+              /* Re-routing changes the tree's head node. */
+              properties->tree->head = treeReroot(foundRect->node);
+              
+              /* Re-routing can also affect the drawing area size, so recalculate borders */
+              calculateBelvuTreeBorders(belvuTree);
+            }
+          else
+            {
+              g_warning("Program error: unrecognised tree selection mode '%d'.\n", bc->treePickMode);
+            }
+          
+          belvuTreeRedrawAll(belvuTree, NULL);
+
+          /* If this is the main tree, then we need to update the main alignment
+           * to reflect the new tree order. */
+          if (properties->isMainTree)
+            onTreeOrderChanged(bc);
+        }
+      else if (foundRect->node)
+        {
+          bc->selectedAln = foundRect->node->aln;
+          onRowSelectionChanged(bc);
+        }
+    }
+}
+
+static gboolean onButtonPressBelvuTree(GtkWidget *widget, GdkEventButton *event, gpointer data)
+{
+  gboolean handled = FALSE;
+  
+  if (event->type == GDK_BUTTON_PRESS && event->button == 1) /* left click */
+    {
+      GtkWidget *belvuTree = GTK_WIDGET(data);
+      onLeftClickTree(belvuTree, event->x, event->y);
+      handled = TRUE;
+    }
+  
+  return handled;
+}
+
+
+/* This should be called if the font size of the tree window has changed. */
+void onBelvuTreeFontSizeChanged(GtkWidget *belvuTree)
+{
+  if (!belvuTree)
+    return;
+  
+  BelvuTreeProperties *properties = belvuTreeGetProperties(belvuTree);
+  
+  getFontCharSize(properties->treeArea, properties->treeArea->style->font_desc, &properties->charWidth, &properties->charHeight);
+  
+  calculateBelvuTreeBorders(belvuTree);
+  belvuTreeRedrawAll(belvuTree, NULL);
+}
+
+
+static gboolean onZoomBelvuTree(BelvuContext *bc, const gboolean zoomIn)
+{
+  if (bc->belvuTree)
+    {
+      int size = pango_font_description_get_size(bc->belvuTree->style->font_desc) / PANGO_SCALE;
+      
+      if (zoomIn)
+        widgetSetFontSizeAndCheck(bc->belvuTree, size + 1);
+      else
+        widgetSetFontSizeAndCheck(bc->belvuTree, size - 1);
+      
+      onBelvuTreeFontSizeChanged(bc->belvuTree);
+    }  
+  
+  return TRUE;
+}
+
+
+/* Key press handler */
+gboolean onKeyPressBelvuTree(GtkWidget *window, GdkEventKey *event, gpointer data)
+{
+  gboolean handled = FALSE;
+  
+  BelvuContext *bc = (BelvuContext*)data;
+  
+  switch (event->keyval)
+  {
+    case GDK_plus:      /* fall through */
+    case GDK_equal:     handled = onZoomBelvuTree(bc, TRUE);    break;
+    case GDK_minus:     /* fall through */
+    case GDK_underscore: handled = onZoomBelvuTree(bc, FALSE);  break;
+      
+    default: break;
+  };
+  
+  return handled;
+}
+
+
+/***********************************************************
+ *                    Settings dialog                      *
+ ***********************************************************/
+
+/* Callback to set the value of a boolean pointer (passed as the user data)
+ * when the given toggle button has changed value. */
+static gboolean onBoolChangedCallback(GtkWidget *button, const gint responseId, gpointer data)
+{
+  gboolean *value = (gboolean*)data;
+  *value = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button));
+  
+  return TRUE;
+}
+
+/* Callback to set the value of an integer (passed as the user data) when the
+ * given text entry (which must contain a double or int as text) has changed value */
+static gboolean onDoubleChangedCallback(GtkWidget *entry, const gint responseId, gpointer data)
+{
+  double *value = (double*)data;
+  
+  const gchar *text = gtk_entry_get_text(GTK_ENTRY(entry));
+  *value = g_strtod(text, NULL);
+  
+  return TRUE;
+}
+
+/* Utility to create a check button and place it in the given parent box. The
+ * button will control the setting of the given boolean value, which will be 
+ * updated when the button's parent dialog gets a response. */
+static void createCheckButton(const char *mnemonic, gboolean *value, GtkTable *table, const int row, const int col)
+{
+  g_assert(value);
+  
+  GtkWidget *button = gtk_check_button_new_with_mnemonic(mnemonic);
+  gtk_table_attach(table, button, col, col + 2, row, row + 1, GTK_FILL, GTK_SHRINK, TABLE_XPAD, TABLE_YPAD);
+  
+  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), *value);
+  widgetSetCallbackData(button, onBoolChangedCallback, value);
+}
+
+/* Utility to create a text entry box for updating the given integer value.
+ * The text entry is added to the given box, which should belong to a dialog.
+ * The value will be updated when the dialog gets a response. */
+static GtkWidget* createDoubleTextEntry(const char *labelText, double *value, GtkTable *table, int row, int col)
+{
+  g_assert(value);
+
+  /* Create the label */
+  GtkWidget *label = gtk_label_new(labelText);
+  gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5);
+  gtk_table_attach(table, label, col, col + 1, row, row + 1, GTK_FILL, GTK_SHRINK, TABLE_XPAD, TABLE_YPAD);
+  
+  /* Create the text entry */
+  GtkWidget *entry = gtk_entry_new();
+  gtk_table_attach(table, entry, col + 1, col + 2, row, row + 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), GTK_SHRINK, TABLE_XPAD, TABLE_YPAD);
+  widgetSetCallbackData(entry, onDoubleChangedCallback, value);
+  gtk_entry_set_activates_default(GTK_ENTRY(entry), TRUE);
+
+  char *defaultInput = convertDoubleToString(*value, 2);
+  gtk_entry_set_text(GTK_ENTRY(entry), defaultInput);
+
+  
+  const int defaultLen = min((int)strlen(defaultInput) * 8, 500);
+  gtk_widget_set_size_request(entry, defaultLen, -1);
+
+  g_free(defaultInput);
+  
+  return entry;
+}
+
+static GtkWidget* createTreeDisplayOptsButtons(GtkBox *box, 
+                                               double *treeScale,
+                                               double *lineWidth,
+                                               gboolean *showBranchLen, 
+                                               gboolean *showOrganism,
+					       GtkWidget **treeScaleEntry)
+{
+  /* Put the display options in a table in a frame */
+  GtkContainer *frame = GTK_CONTAINER(gtk_frame_new("Display options"));
+  gtk_box_pack_start(box, GTK_WIDGET(frame), FALSE, FALSE, DIALOG_YPAD);
+  
+  GtkTable *table = GTK_TABLE(gtk_table_new(2, 2, FALSE));
+  gtk_container_add(frame, GTK_WIDGET(table));
+
+  *treeScaleEntry = createDoubleTextEntry("Tree scale:", treeScale, table, 0, 0);
+  createDoubleTextEntry("Line width:", lineWidth, table, 1, 0);
+  createCheckButton("Display branch lengths", showBranchLen, table, 2, 0);
+  createCheckButton("Display organism", showOrganism, table, 3, 0);
+  
+  return GTK_WIDGET(frame);
+}
+
+
+static void createTreeInteractionButtons(GtkBox *box, BelvuPickMode *pickMode)
+{
+  GtkWidget *frame = gtk_frame_new("Interactions");
+  gtk_box_pack_start(box, GTK_WIDGET(frame), FALSE, FALSE, DIALOG_YPAD);
+  
+  /* Create the tree pick-method drop-down box */
+  GtkBox *hbox = GTK_BOX(gtk_hbox_new(FALSE, 0));
+  gtk_container_add(GTK_CONTAINER(frame), GTK_WIDGET(hbox));
+
+  GtkWidget *label = gtk_label_new("Action when picking a node:");
+  gtk_box_pack_start(hbox, label, FALSE, FALSE, DIALOG_XPAD);
+  
+  GtkComboBox *combo = createComboBox();
+  
+  GtkTreeIter *iter = NULL;
+  BelvuPickMode initMode = *pickMode;
+  
+  addComboItem(combo, iter, NODESWAP, SWAPstr, initMode);
+  addComboItem(combo, iter, NODEROOT, ROOTstr, initMode);
+
+  widgetSetCallbackData(GTK_WIDGET(combo), onComboChanged, pickMode);
+  
+  gtk_box_pack_start(hbox, GTK_WIDGET(combo), FALSE, FALSE, DIALOG_XPAD);
+}
+
+
+/* Returns true if the given tree setup is distance-correcting or not */
+static gboolean correctingDistances(const BelvuBuildMethod buildMethod, const BelvuDistCorr distCorr)
+{
+  return (buildMethod != UPGMA && distCorr != UNCORR);
+}
+
+
+/* Callback for when the build method has been changed. */
+gboolean onBuildMethodChanged(GtkWidget *combo, const gint responseId, gpointer data)
+{
+  BelvuContext *bc = (BelvuContext*)data;
+  
+  const int origVal = bc->treeMethod;
+  
+  onComboChanged(combo, responseId, &bc->treeMethod);
+  
+  /* This change invalidates the tree, so set the tree head to null to indicate this */
+  if (origVal != bc->treeMethod)
+    {
+      belvuContextSetTree(bc, NULL);
+    }
+  
+  return TRUE;
+}
+
+
+/* Callback for when the distance-correction method has been changed. */
+gboolean onDistCorrChanged(GtkWidget *combo, const gint responseId, gpointer data)
+{
+  BelvuContext *bc = (BelvuContext*)data;
+  
+  const int origVal = bc->treeDistCorr;
+
+  onComboChanged(combo, responseId, &bc->treeDistCorr);
+  
+  /* This change invalidates the tree, so set the tree head to null to indicate this */
+  if (origVal != bc->treeDistCorr)
+    {
+      belvuContextSetTree(bc, NULL);
+    }
+  
+  return TRUE;
+}
+
+
+/* Utility to create a standard 2-column combo box and place it in the given
+ * table with a label with the given text. */
+static GtkComboBox* createComboWithLabel(GtkTable *table, 
+                                         const char *labelText, 
+                                         const int col, 
+                                         const int row,
+                                         BlxResponseCallback callbackFunc,
+                                         gpointer data)
+{
+  /* Create the label, and right-align it */
+  GtkWidget *label = gtk_label_new(labelText);
+  gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5);
+  gtk_table_attach(table, label, col, col + 1, row, row + 1, GTK_FILL, GTK_SHRINK, TABLE_XPAD, TABLE_YPAD);
+  
+  GtkComboBox *combo = createComboBox();
+  gtk_table_attach(table, GTK_WIDGET(combo), col + 1, col + 2, row, row + 1, GTK_FILL, GTK_SHRINK, TABLE_XPAD, TABLE_YPAD);
+  
+  widgetSetCallbackData(GTK_WIDGET(combo), callbackFunc, data);
+  
+  return combo;
+} 
+
+static void updateTreeScaleEntry(GtkComboBox *combo, gpointer data)
+{
+  BuildMethodChangedData *userData = (BuildMethodChangedData*)data;
+
+  int newBuildMethod, newDistCorr;
+  onComboChanged(userData->buildMethodCombo, 0, &newBuildMethod);
+  onComboChanged(userData->distCorrCombo, 0, &newDistCorr);
+  
+  if (correctingDistances(origBuildMethod, origDistCorr) == correctingDistances((BelvuBuildMethod)newBuildMethod, (BelvuDistCorr)newDistCorr))
+    return;
+
+  /* If we're now distance-correcting and weren't previously (or vice versa)
+   * then reset the tree scale to the appropriate default value */
+  if (correctingDistances((BelvuBuildMethod)newBuildMethod, (BelvuDistCorr)newDistCorr))
+    {
+      char *tmpStr = g_strdup_printf("%.2f", DEFAULT_TREE_SCALE_CORR);
+      gtk_entry_set_text(GTK_ENTRY(*userData->treeScaleEntry), tmpStr);
+      g_free(tmpStr);
+    }
+  else
+    {
+      char *tmpStr = g_strdup_printf("%.2f", DEFAULT_TREE_SCALE_NON_CORR);
+      gtk_entry_set_text(GTK_ENTRY(*userData->treeScaleEntry), tmpStr);
+      g_free(tmpStr);
+    }    
+  
+  origBuildMethod = (BelvuBuildMethod)newBuildMethod;
+  origDistCorr = (BelvuDistCorr)newDistCorr;
+}
+
+
+/* Create the drop-down boxes for the build methods on the settings dialog */
+static void createTreeBuildMethodButtons(BelvuContext *bc, GtkBox *box, BelvuBuildMethod *buildMethod, BelvuDistCorr *distCorr, GtkWidget **treeScaleEntry)
+{
+  /* We'll put everything in a table inside a frame */
+  GtkWidget *frame = gtk_frame_new("Build methods");
+  gtk_box_pack_start(box, GTK_WIDGET(frame), FALSE, FALSE, DIALOG_YPAD);
+  
+  GtkTable *table = GTK_TABLE(gtk_table_new(2, 2, FALSE));
+  gtk_container_add(GTK_CONTAINER(frame), GTK_WIDGET(table));
+  
+  /* Create the build-method drop-down box */
+  static BuildMethodChangedData data;
+  data.bc = bc;
+  data.treeScaleEntry = treeScaleEntry;
+  
+  GtkComboBox *buildMethodCombo = createComboWithLabel(table, "Tree building method:", 0, 0, onBuildMethodChanged, bc);
+  data.buildMethodCombo = GTK_WIDGET(buildMethodCombo);
+  
+  GtkTreeIter *iter = NULL;
+  int initMode = *buildMethod;
+  addComboItem(buildMethodCombo, iter, NJ, NJstr, initMode);
+  addComboItem(buildMethodCombo, iter, UPGMA, UPGMAstr, initMode);
+  
+  /* Create the distance-correction method drop-down box */
+  GtkComboBox *distCorrCombo = createComboWithLabel(table, "Distance correction method:", 0, 1, onDistCorrChanged, bc);
+  data.distCorrCombo = GTK_WIDGET(distCorrCombo);
+  
+  iter = NULL;
+  initMode = *distCorr;
+  addComboItem(distCorrCombo, iter, UNCORR, UNCORRstr, initMode);
+  addComboItem(distCorrCombo, iter, JUKESCANTOR, JUKESCANTORstr, initMode);
+  addComboItem(distCorrCombo, iter, KIMURA, KIMURAstr, initMode);
+  addComboItem(distCorrCombo, iter, STORMSONN, STORMSONNstr, initMode);
+  addComboItem(distCorrCombo, iter, SCOREDIST, SCOREDISTstr, initMode);
+  
+  origBuildMethod = bc->treeMethod;
+  origDistCorr = bc->treeDistCorr;
+  g_signal_connect(G_OBJECT(buildMethodCombo), "changed", G_CALLBACK(updateTreeScaleEntry), &data);
+  g_signal_connect(G_OBJECT(distCorrCombo), "changed", G_CALLBACK(updateTreeScaleEntry), &data);
+
+}
+
+
+/* Utility function to create the content for the tree settings dialog */
+GtkWidget* createTreeSettingsDialogContent(BelvuContext *bc, 
+                                           GtkWidget *dialog, 
+                                           const gboolean isMainTree,
+                                           double *treeScale,
+                                           double *lineWidth,
+                                           gboolean *showBranchLen, 
+                                           gboolean *showOrganism,
+                                           BelvuPickMode *pickMode,
+                                           BelvuBuildMethod *buildMethod, 
+                                           BelvuDistCorr *distCorr)
+{
+  GtkBox *vbox = GTK_BOX(gtk_vbox_new(FALSE, 0));
+  gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), GTK_WIDGET(vbox), FALSE, FALSE, 0);
+  
+  static GtkWidget *treeScaleEntry = NULL;
+  
+  /* Only give the option to change the build method for the main belvu tree */
+  if (isMainTree)
+    createTreeBuildMethodButtons(bc, vbox, buildMethod, distCorr, &treeScaleEntry);
+
+  /* For all trees, give the option to change display settings */
+  GtkWidget *content = createTreeDisplayOptsButtons(vbox, treeScale, lineWidth, showBranchLen, showOrganism, &treeScaleEntry);
+  createTreeInteractionButtons(vbox, pickMode);
+
+  /* Set the focus on the main content area, because this has widgets that can
+   * activate the default response, thereby allowing the user to create the tree
+   * very quickly just by pressing Enter. */
+  gtk_container_set_focus_child(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), content);
+  
+  return GTK_WIDGET(vbox);
+}
+
+
+/* Called when the user makes a response on the tree settings dialog. The tree
+ * window is passed as the user data. */
+void onResponseTreeSettingsDialog(GtkDialog *dialog, gint responseId, gpointer data)
+{
+  BelvuContext *bc = (BelvuContext*)data;
+  gboolean destroy = TRUE;
+
+  /* Get the toplevel window that this dialog was created from and if if it's
+   * not a tree window then use the main belvu tree window. */
+  GtkWidget *window = GTK_WIDGET(gtk_window_get_transient_for(GTK_WINDOW(dialog)));
+  GtkWidget *treeWindow = NULL;
+  gboolean isMainTree = FALSE;
+  
+  if (window && stringsEqual(gtk_widget_get_name(window), BELVU_TREE_WINDOW_NAME, TRUE))
+    {
+      treeWindow = window;
+      BelvuTreeProperties *properties = belvuTreeGetProperties(treeWindow);
+      isMainTree = properties->isMainTree;
+    }
+  else 
+    {
+      treeWindow = bc->belvuTree;
+      isMainTree = TRUE;
+    }
+  
+  
+  switch (responseId)
+  {
+    case GTK_RESPONSE_ACCEPT:
+      /* Call all of the callbacks for each individual widget to update the 
+       * properties. Then refresh the window and show the tree. Destroy dialog
+       * if successful. */
+      destroy = widgetCallAllCallbacks(GTK_WIDGET(dialog), GINT_TO_POINTER(responseId));
+      belvuTreeUpdateSettings(bc, treeWindow);
+      
+      if (!treeWindow)
+        createAndShowBelvuTree(bc, isMainTree);
+      else
+        gtk_window_present(GTK_WINDOW(treeWindow));
+        
+      break;
+      
+    case GTK_RESPONSE_APPLY:
+      /* Never destroy */
+      destroy = FALSE;
+      widgetCallAllCallbacks(GTK_WIDGET(dialog), GINT_TO_POINTER(responseId));
+      belvuTreeUpdateSettings(bc, treeWindow);
+      break;
+      
+    case GTK_RESPONSE_CANCEL:
+    case GTK_RESPONSE_REJECT:
+      destroy = TRUE;
+      break;
+      
+    default:
+      break;
+  };
+  
+  if (destroy)
+    {
+      gtk_widget_destroy(GTK_WIDGET(dialog));
+    }
+}
+
+
+/* Dialog to allow the user to edit the settings for a tree */
+void showTreeSettingsDialog(GtkWidget *window, BelvuContext *bc)
+{
+  char *title = g_strdup_printf("%sTree Settings", belvuGetTitlePrefix(bc));
+  
+  GtkWidget *dialog = gtk_dialog_new_with_buttons(title,
+                                       GTK_WINDOW(window), 
+                                       (GtkDialogFlags)(GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL),
+                                       GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
+                                       GTK_STOCK_APPLY, GTK_RESPONSE_APPLY,
+                                       GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
+                                       NULL);
+
+  g_free(title);
+  
+  g_signal_connect(dialog, "response", G_CALLBACK(onResponseTreeSettingsDialog), bc);
+  gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT);
+  
+  GtkWidget *treeWindow = NULL;
+  gboolean isMainTree = FALSE;
+  
+  /* If this is a tree window then check the properties to see if it is the main
+   * window. Otherwise, use the main tree from the context. If it's the main window
+   * then updating the tree settings will change them in the context; otherwise
+   * we use locally-stored properties so that we can change them and only affect
+   * the local tree. (Note that the build method properties are only available
+   * on the main tree.) */
+  double *treeScale = &bc->treeScale;
+  double *lineWidth = &bc->treeLineWidth;
+  gboolean *showBranchLen = &bc->treeShowBranchlen;
+  gboolean *showOrganisms = &bc->treeShowOrganism;
+  
+  if (window && stringsEqual(gtk_widget_get_name(window), BELVU_TREE_WINDOW_NAME, TRUE))
+    {
+      treeWindow = window;
+      BelvuTreeProperties *properties = belvuTreeGetProperties(treeWindow);
+      isMainTree = properties->isMainTree;
+
+      if (!isMainTree)
+        {
+          /* Use locally-stored properties */
+          treeScale = &properties->treeScale;
+          lineWidth = &properties->lineWidth;
+          showBranchLen = &properties->showBranchLen;
+          showOrganisms = &properties->showOrganism;
+        }
+    }
+  else
+    {
+      treeWindow = bc->belvuTree;
+      isMainTree = TRUE;
+    }
+
+  createTreeSettingsDialogContent(bc, dialog, isMainTree,
+                                  treeScale, lineWidth,
+                                  showBranchLen, showOrganisms,
+                                  &bc->treePickMode, &bc->treeMethod, &bc->treeDistCorr);
+  
+  gtk_widget_show_all(dialog);
+  gtk_window_present(GTK_WINDOW(dialog));
+}
+
+/***********************************************************
+ *                          Sizing                         *
+ ***********************************************************/
+
+static void calculateNodeWidth(BelvuTreeProperties *properties, TreeNode *node, const int x)
+{
+  if (!node)
+    return;
+  
+  const int curX = x + (node->branchlen * treeGetScale(properties) * properties->charWidth);
+  
+  /* Recurse left and right */
+  calculateNodeWidth(properties, node->left, curX);
+  calculateNodeWidth(properties, node->right, curX);
+  
+  /* Check if the end of this text is outside the maximum x position found so far */
+  int textWidth = 0;
+  textWidth += getTextWidth(properties->treeArea, node->name) + DEFAULT_XPAD;
+  textWidth += getTextWidth(properties->treeArea, node->organism) + DEFAULT_XPAD;
+  
+  int pos = curX + textWidth;
+  
+  if (pos > properties->bc->maxTreeWidth) 
+    properties->bc->maxTreeWidth = pos;
+}
+
+static void calculateBelvuTreeBorders(GtkWidget *belvuTree)
+{
+  if (!belvuTree)
+    return;
+  
+  BelvuTreeProperties *properties = belvuTreeGetProperties(belvuTree);
+
+  if (!properties || !properties->tree || !properties->tree->head)
+    return;
+  
+  /* This loops through all nodes and calculates the max tree width */
+  properties->bc->maxTreeWidth = 0;
+  calculateNodeWidth(properties, properties->tree->head, properties->treeRect.x);
+  
+  int treeHeight = (properties->bc->alignArr->len + 7) * properties->charHeight;
+  
+  if (treeHeight > MAX_PIXMAP_HEIGHT)
+    {
+      treeHeight = MAX_PIXMAP_HEIGHT;
+      g_warning("The tree window is too large and will be clipped.\n");
+    }
+
+  int treeWidth = properties->bc->maxTreeWidth;
+  
+  if (treeWidth > MAX_PIXMAP_WIDTH)
+    {
+      treeWidth = MAX_PIXMAP_WIDTH;
+      g_warning("The tree window is too large and will be clipped.\n");
+    }
+  
+  properties->treeRect.x = DEFAULT_XPAD;
+  properties->treeRect.y = DEFAULT_YPAD;
+  properties->treeRect.width = treeWidth;
+  properties->treeRect.height = treeHeight;
+  
+  gtk_layout_set_size(GTK_LAYOUT(properties->treeArea), DEFAULT_XPAD * 2 + properties->treeRect.width, 
+                      DEFAULT_YPAD * 2 + properties->treeRect.height);
+}
+
+
+/***********************************************************
+ *                      Initialisation                     *
+ ***********************************************************/
+
+/* Set style properties for the belvu alignment widgets */
+static void setBelvuTreeStyle(BelvuContext *bc, GtkWidget *belvuTree)
+{
+  GdkColor *bgColor = getGdkColor(BELCOLOR_BACKGROUND, bc->defaultColors, FALSE, FALSE);
+  
+  gtk_widget_modify_bg(belvuTree, GTK_STATE_NORMAL, bgColor);
+}
+
+
+/* Create a widget for drawing a tree. Returns the GtkLayout widget that 
+ * does the drawing. Places the widget into the given parent box. */
+static GtkWidget* createBelvuTreeWidget(BelvuContext *bc, GtkBox *box)
+{
+  /* Create the drawing area */
+  GtkWidget *treeArea = gtk_layout_new(NULL, NULL);
+  
+  /* Make it scrollable. The scroll-window will be the outermost container and
+   * therefore will be the widget that we treat as the "belvu tree". */
+  GtkWidget *scrollWin = gtk_scrolled_window_new(NULL, NULL);
+  gtk_box_pack_start(box, scrollWin, TRUE, TRUE, 0);
+  
+  gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollWin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+  gtk_container_add(GTK_CONTAINER(scrollWin), treeArea);
+
+  /* Set the style */
+  setBelvuTreeStyle(bc, treeArea);
+  
+  return treeArea;
+}
+
+
+static void setTreeWindowStyleProperties(GtkWidget *window)
+{
+  gtk_widget_set_name(window, BELVU_TREE_WINDOW_NAME);
+  
+  /* Set the initial window size based on some fraction of the screen size */
+  int screenWidth = 300, screenHeight = 200;
+  gbtools::GUIGetTrueMonitorSize(window, &screenWidth, &screenHeight);
+  
+  const int width = screenWidth * DEFAULT_TREE_WINDOW_WIDTH_FRACTION;
+  const int height = screenHeight * DEFAULT_TREE_WINDOW_HEIGHT_FRACTION;
+  gtk_window_set_default_size(GTK_WINDOW(window), width, height);
+}
+
+
+/* Display an existing tree. Opens in a new window. */
+GtkWidget* createBelvuTreeWindow(BelvuContext *bc, Tree *tree, const gboolean isMainTree)
+{
+  /* Create the window */
+  GtkWidget *belvuTree = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+  setTreeWindowStyleProperties(belvuTree);
+
+  const char *titlePrefix = (isMainTree ? TITLE_MAIN_TREE_PREFIX : TITLE_BOOTSTRAP_TREE_PREFIX);
+  const char *titleDesc = (bc->treeMethod == NJ ? TITLE_NJ_TREE_DESCRIPTION : TITLE_UPGMA_TREE_DESCRIPTION);
+  
+  char *title = g_strdup_printf("%s%s%stree using %s distances of %s", 
+                                belvuGetTitlePrefix(bc),
+                                titlePrefix, 
+                                titleDesc,
+                                bc->treeDistString,
+                                bc->Title);
+  
+  gtk_window_set_title(GTK_WINDOW(belvuTree), title);
+  g_free(title);
+  
+  /* We must add all toplevel windows to the list of spawned windows */
+  bc->spawnedWindows = g_slist_prepend(bc->spawnedWindows, belvuTree);
+
+  /* If this is the main tree, then set it in the context */
+  if (isMainTree)
+    bc->belvuTree = belvuTree;
+
+  /* Create the context menu and set a callback to show it */
+  GtkActionGroup *actionGroup = NULL;
+  GtkUIManager *uiManager = createUiManager(belvuTree, bc, &actionGroup);
+  GtkWidget *contextmenu = createBelvuMenu(belvuTree, "/TreeContextMenu", uiManager);
+  
+  gtk_widget_add_events(belvuTree, GDK_BUTTON_PRESS_MASK);
+  g_signal_connect(G_OBJECT(belvuTree), "button-press-event", G_CALLBACK(onButtonPressBelvu), contextmenu);
+  
+  /* We'll place everything in a vbox */
+  GtkWidget *vbox = gtk_vbox_new(FALSE, 0);
+  gtk_container_add(GTK_CONTAINER(belvuTree), vbox);
+  
+  /* Add the alignment section */
+  GtkWidget *treeArea = createBelvuTreeWidget(bc, GTK_BOX(vbox));
+
+  /* Set the properties on the tree window */
+  belvuTreeCreateProperties(belvuTree, bc, tree, isMainTree, actionGroup, treeArea, bc->treeMethod, bc->treeDistCorr);
+
+  /* Set the initial size (must be called after properties are set) */
+  calculateBelvuTreeBorders(belvuTree);
+
+  /* Connect signals. Pass the window as the data. */
+  gtk_widget_add_events(treeArea, GDK_BUTTON_PRESS_MASK);
+  g_signal_connect(G_OBJECT(treeArea), "expose-event", G_CALLBACK(onExposeBelvuTree), belvuTree);  
+  g_signal_connect(G_OBJECT(treeArea), "button-press-event", G_CALLBACK(onButtonPressBelvuTree), belvuTree);  
+  g_signal_connect(G_OBJECT(belvuTree), "key-press-event", G_CALLBACK(onKeyPressBelvuTree), bc);
+  
+  /* Set the font size to be the same as the main alignment window */
+  if (bc->belvuAlignment)
+    widgetSetFontSize(belvuTree, GINT_TO_POINTER(pango_font_description_get_size(bc->belvuAlignment->style->font_desc) / PANGO_SCALE));
+  
+  onBelvuTreeFontSizeChanged(belvuTree);
+
+  gtk_widget_show_all(belvuTree);
+  gtk_window_present(GTK_WINDOW(belvuTree));
+
+  return belvuTree;
+}
+
+
+/* Create a new tree and create a tree-window to display it. If isMainTree is 
+ * true then set this as the main belvu tree. */
+GtkWidget* createAndShowBelvuTree(BelvuContext *bc, const gboolean isMainTree)
+{
+  GtkWidget *belvuTree = NULL;
+  
+  /* For the main tree, use the existing tree nodes if any; otherwise create
+   * one. For other trees, we always need to create the tree nodes. */
+  if (!isMainTree || !bc->mainTree || !bc->mainTree->head)
+    {
+      separateMarkupLines(bc);
+      Tree *tree = treeMake(bc, TRUE, TRUE);
+      
+      if (isMainTree)
+        belvuContextSetTree(bc, &tree);
+          
+      belvuTree = createBelvuTreeWindow(bc, tree, isMainTree);
+      reInsertMarkupLines(bc);
+    }
+  else
+    {
+      belvuTree = createBelvuTreeWindow(bc, bc->mainTree, isMainTree);
+    }
+  
+  return belvuTree;
+}
+
+
+
diff --git a/belvuApp/belvuTree.hpp b/belvuApp/belvuTree.hpp
new file mode 100644
index 0000000..352b6b6
--- /dev/null
+++ b/belvuApp/belvuTree.hpp
@@ -0,0 +1,76 @@
+/*  File: belvuTree.h
+ *  Author: Gemma Barson, 2011-05-06
+ *  Copyright (c) 2011 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: Takes care of drawing the tree windows for belvu
+ *----------------------------------------------------------------------------
+ */
+
+
+#ifndef _belvutree_h_included_
+#define _belvutree_h_included_
+
+
+#include <belvuApp/belvu_.hpp>
+#include <gtk/gtk.h>
+
+
+#define BELVU_TREE_WINDOW_NAME                  "BelvuTreeWindow"
+#define DEFAULT_TREE_SCALE_CORR			0.3	/* default scale for methods using distance correction */
+#define DEFAULT_TREE_SCALE_NON_CORR		1.0	/* default scale for methods not using distance correction */
+
+
+GtkWidget*                createAndShowBelvuTree(BelvuContext *bc, const gboolean isMainTree);
+GtkWidget*                createBelvuTreeWindow(BelvuContext *bc, Tree *tree, const gboolean isMainTree);
+void                      destroyTreeContents(Tree *tree);
+void                      destroyTree(Tree **tree);
+
+void                      belvuTreeRemakeTree(GtkWidget *belvuTree);
+void                      onBelvuTreeFontSizeChanged(GtkWidget *belvuTree);
+
+GtkActionGroup*           belvuTreeGetActionGroup(GtkWidget *belvuTree);
+
+void                      treeBootstrap(BelvuContext *bc);
+void                      belvuTreeRedrawAll(gpointer belvuTree, gpointer data);
+BelvuContext*             belvuTreeGetContext(GtkWidget *belvuTree);
+
+void                      showTreeSettingsDialog(GtkWidget *window, BelvuContext *bc);
+
+GtkWidget*                createTreeSettingsDialogContent(BelvuContext *bc, GtkWidget *dialog, const gboolean isMainTree,
+                                                          double *treeScale, double *lineWidth, 
+                                                          gboolean *showBranchLen, gboolean *showOrganism,
+                                                          BelvuPickMode *pickMode, BelvuBuildMethod *buildMethod, BelvuDistCorr *distCorr);
+
+
+void                      treePrintOrthologs(BelvuContext *bc, GtkWidget *treeWindow);
+
+#endif /* _belvutree_h_included_ */
diff --git a/belvuApp/belvuWindow.cpp b/belvuApp/belvuWindow.cpp
new file mode 100644
index 0000000..d7c8017
--- /dev/null
+++ b/belvuApp/belvuWindow.cpp
@@ -0,0 +1,4154 @@
+/*  File: belvuWindow.c
+ *  Author: Gemma Barson, 2011-04-11
+ *  Copyright (c) 2011 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: see belvuWindow.h
+ *----------------------------------------------------------------------------
+ */
+
+#include "belvuApp/belvuWindow.hpp"
+#include "belvuApp/belvuAlignment.hpp"
+#include "belvuApp/belvuTree.hpp"
+#include "belvuApp/belvuConsPlot.hpp"
+#include "belvuApp/belvu_.hpp"
+#include <gbtools/gbtools.hpp>
+#include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
+#include <string.h>
+#include <unistd.h>
+#include <algorithm>
+
+using namespace std;
+
+
+#define DEFAULT_WINDOW_BORDER_WIDTH      1    /* used to change the default border width around the blixem window */
+#define DEFAULT_FONT_SIZE_ADJUSTMENT     0   /* used to start with a smaller font than the default widget font */
+#define MAIN_BELVU_WINDOW_NAME           "BelvuWindow"
+#define WRAPPED_BELVU_WINDOW_NAME        "WrappedBelvuWindow"
+#define BELVU_ORGS_WINDOW_NAME           "BelvuOrgsWindow" 
+#define DEFAULT_WRAP_WINDOW_WIDTH_FRACTION      0.6    /* default width of wrap window (as fraction of screen width) */
+#define DEFAULT_WRAP_WINDOW_HEIGHT_FRACTION     0.85   /* default height of wrap window (as fraction of screen height) */
+#define MAX_ORGS_WINDOW_WIDTH_FRACTION          0.5    /* max width of organisms window (as fraction of screen width) */
+#define MAX_ORGS_WINDOW_HEIGHT_FRACTION         0.7    /* max height of organisms window (as fraction of screen height) */
+#define MAX_ANNOTATION_WINDOW_WIDTH_FRACTION    0.6    /* max width of annotation window (as fraction of screen width) */
+#define MAX_ANNOTATION_WINDOW_HEIGHT_FRACTION   0.7    /* max height of annotation window (as fraction of screen height) */
+#define ORGS_WINDOW_XPAD                        20     /* x padding for the organisms window */
+#define ORGS_WINDOW_YPAD                        20     /* y padding for the organisms window */
+
+/* Utility struct to pass data to the color-changed callback
+ * when a color has been changed on the edit-colors dialog */
+typedef struct _ColorChangeData
+{
+  GtkWidget *colorButton;               /* The color-picker button */
+  char *residue;                        /* The residue that this color applies to */
+} ColorChangeData;
+
+
+/* Properties specific to the belvu window */
+class BelvuWindowProperties
+{
+public:
+  GtkWidget *widget;                  /* The belvu window */
+  BelvuContext *bc;                   /* The belvu context */
+  GtkWidget *statusBar;               /* Message bar at the bottom of the main window */
+  GtkWidget *feedbackBox;             /* Feedback area showing info about the current selction */
+  GtkActionGroup *actionGroup;
+};
+
+
+/* Properties for generic windows */
+class GenericWindowProperties
+{
+public:
+  GtkWidget *widget;                  /* The window */
+  BelvuContext *bc;                   /* The belvu context */
+  GtkActionGroup *actionGroup;
+};
+
+
+
+
+/* Local function declarations */
+static void                      onCloseMenu(GtkAction *action, gpointer data);
+static void                      onQuitMenu(GtkAction *action, gpointer data);
+static void                      onHelpMenu(GtkAction *action, gpointer data);
+static void                      onAboutMenu(GtkAction *action, gpointer data);
+static void                      onPrintMenu(GtkAction *action, gpointer data);
+static void                      onFindMenu(GtkAction *action, gpointer data);
+static void                      onWrapMenu(GtkAction *action, gpointer data);
+static void                      onShowTreeMenu(GtkAction *action, gpointer data);
+static void                      onRecalcTreeMenu(GtkAction *action, gpointer data);
+static void                      onTreeOptsMenu(GtkAction *action, gpointer data);
+static void                      onConsPlotMenu(GtkAction *action, gpointer data);
+static void                      onSaveMenu(GtkAction *action, gpointer data);
+static void                      onSaveAsMenu(GtkAction *action, gpointer data);
+static void                      onOutputMenu(GtkAction *action, gpointer data);
+static void                      onFetchWWWMenu(GtkAction *action, gpointer data);
+static void                      onCompareMenu(GtkAction *action, gpointer data);
+static void                      onCleanUpMenu(GtkAction *action, gpointer data);
+
+static void                      onrmPickedMenu(GtkAction *action, gpointer data);
+static void                      onRemoveSeqsMenu(GtkAction *action, gpointer data);
+static void                      onrmGappySeqsMenu(GtkAction *action, gpointer data);
+static void                      onrmPartialSeqsMenu(GtkAction *action, gpointer data);
+static void                      onrmRedundantMenu(GtkAction *action, gpointer data);
+static void                      onrmOutliersMenu(GtkAction *action, gpointer data);
+static void                      onrmScoreMenu(GtkAction *action, gpointer data);
+static void                      onrmColumnPromptMenu(GtkAction *action, gpointer data);
+static void                      onrmColumnLeftMenu(GtkAction *action, gpointer data);
+static void                      onrmColumnRightMenu(GtkAction *action, gpointer data);
+static void                      onrmColumnCutoffMenu(GtkAction *action, gpointer data);
+static void                      onrmGappyColumnsMenu(GtkAction *action, gpointer data);
+static void                      onAutoRmEmptyColumnsMenu(GtkAction *action, gpointer data);
+static void                      onreadLabelsMenu(GtkAction *action, gpointer data);
+static void                      onselectGapsMenu(GtkAction *action, gpointer data);
+static void                      onhideMenu(GtkAction *action, gpointer data);
+static void                      onunhideMenu(GtkAction *action, gpointer data);
+
+static void                      onToggleSchemeType(GtkRadioAction *action, GtkRadioAction *current, gpointer data);
+static void                      onToggleColorScheme(GtkRadioAction *action, GtkRadioAction *current, gpointer data);
+static void                      onToggleSortOrder(GtkRadioAction *action, GtkRadioAction *current, gpointer data);
+
+static void                      ontogglePaletteMenu(GtkAction *action, gpointer data);
+static void                      ontoggleColorByResIdMenu(GtkAction *action, gpointer data);
+static void                      oncolorByResIdMenu(GtkAction *action, gpointer data);
+static void                      onsaveColorSchemeMenu(GtkAction *action, gpointer data);
+static void                      onloadColorSchemeMenu(GtkAction *action, gpointer data);
+static void                      onignoreGapsMenu(GtkAction *action, gpointer data);
+static void                      onprintColorsMenu(GtkAction *action, gpointer data);
+static void                      onexcludeHighlightedMenu(GtkAction *action, gpointer data);
+static void                      ondisplayColorsMenu(GtkAction *action, gpointer data);
+static void                      onlowercaseMenu(GtkAction *action, gpointer data);
+static void                      oneditColorSchemeMenu(GtkAction *action, gpointer data);
+
+static void                      onSaveTreeMenu(GtkAction *action, gpointer data);
+static void                      onFindOrthogsMenu(GtkAction *action, gpointer data);
+static void                      onShowOrgsMenu(GtkAction *action, gpointer data);
+
+static void                      onZoomInMenu(GtkAction *action, gpointer data);
+static void                      onZoomOutMenu(GtkAction *action, gpointer data);
+static void                      onSetFontMenu(GtkAction *action, gpointer data);
+
+static void                      showHelpDialog();
+static void                      showAboutDialog(GtkWidget *parent);
+static void                      showFindDialog(BelvuContext *bc, GtkWidget *window);
+static void                      showWrapDialog(BelvuContext *bc, GtkWidget *belvuWindow);
+static void                      createWrapWindow(GtkWidget *belvuWindow, const int linelen, const gchar *title);
+static void                      widgetGetDrawing(GtkWidget *window, gpointer data);
+static void	                 showMakeNonRedundantDialog(GtkWidget *belvuWindow);
+static void                      showRemoveOutliersDialog(GtkWidget *belvuWindow);
+static void                      showRemoveByScoreDialog(GtkWidget *belvuWindow);
+static void                      startRemovingSequences(GtkWidget *belvuWindow);
+static void                      endRemovingSequences(GtkWidget *belvuWindow);
+
+static void                      showRemoveGappySeqsDialog(GtkWidget *belvuWindow);
+static void                      showRemoveColumnsDialog(GtkWidget *belvuWindow);
+static void                      showRemoveColumnsCutoffDialog(GtkWidget *belvuWindow);
+static void                      showRemoveGappyColumnsDialog(GtkWidget *belvuWindow);
+
+static void                      showColorByResIdDialog(GtkWidget *belvuWindow);
+static void                      showEditResidueColorsDialog(GtkWidget *belvuWindow, const gboolean bringToFront);
+static void                      showEditConsColorsDialog(GtkWidget *belvuWindow, const gboolean bringToFront);
+static void                      saveOrResetConsColors(BelvuContext *bc, const gboolean save);
+static void                      showSelectGapCharDialog(GtkWidget *belvuWindow);
+
+static GtkWidget*                createPromptDialog(GtkWidget *window, const char *defaultResult, const char *title, const char *text1, const char *text2, GtkWidget **entry);
+
+static gboolean                  saveAlignmentPrompt(GtkWidget *window, BelvuContext *bc);
+static void                      showFontDialog(BelvuContext *bc, GtkWidget *window);
+
+static const char*               saveFasta(BelvuContext *bc, GtkWidget *parent);
+static const char*               saveMul(BelvuContext *bc, GtkWidget *parent);
+static const char*               saveMsf(BelvuContext *bc, GtkWidget *parent);
+static void                      showSaveAsDialog(BelvuContext *bc, GtkWidget *window);
+static gboolean                  saveAlignment(BelvuContext *bc, GtkWidget *window);
+
+static BelvuWindowProperties*    belvuWindowGetProperties(GtkWidget *widget);
+static GenericWindowProperties*  windowGetProperties(GtkWidget *widget);
+static BelvuContext*             windowGetContext(GtkWidget *window);
+static void                      createOrganismWindow(BelvuContext *bc);
+static void                      onDestroyBelvuWindow(GtkWidget *belvuWindow);
+
+
+/***********************************************************
+ *                      Menus and Toolbar                  *
+ ***********************************************************/
+
+#define rmPickedStr        "Remove highlighted line"
+#define rmPickedDesc       "Remove highlighted line"
+#define rmManyStr          "Remove many sequences..."
+#define rmManyDesc         "Remove many sequences"
+#define rmGappySeqsStr     "Remove gappy sequences..."
+#define rmGappySeqsDesc    "Remove gappy sequences"
+#define rmPartialSeqsStr   "Remove partial sequences"
+#define rmPartialSeqsDesc  "Remove partial sequences"
+#define rmRedundantStr     "Make non-redundant..."
+#define rmRedundantDesc    "Remove sequences that are more than a given percentage identical"
+#define rmOutliersStr      "Remove outliers..."
+#define rmOutliersDesc     "Remove sequences that are less than a given percentage identical"
+#define rmScoreStr         "Remove sequences by score..."
+#define rmScoreDesc        "Remove sequences below a given score"
+#define rmColumnPromptStr  "Remove columns..."
+#define rmColumnPromptDesc "Remove specific columns"
+#define rmColumnLeftStr    "<- Remove columns left of selection (inclusive)"
+#define rmColumnLeftDesc   "Remove columns to the left of the currently-selected column (inclusive)"
+#define rmColumnRightStr   "Remove columns right of selection (inclusive) ->"
+#define rmColumnRightDesc  "Remove columns to the right of the currently-selected column (inclusive) -> "
+#define rmColumnCutoffStr  "Remove columns by conservation..."
+#define rmColumnCutoffDesc "Remove columns with conservation between specific values"
+#define rmGappyColumnsStr  "Remove gappy columns..."
+#define rmGappyColumnsDesc "Remove columns with more than a specified percentage of gaps"
+#define readLabelsStr      "Read labels of highlighted sequence and spread them"
+#define readLabelsDesc     "Read labels of highlighted sequence and spread them"
+#define selectGapsStr      "Select gap character..."
+#define selectGapsDesc     "Select the character to use for displaying gaps"
+#define hideStr            "Hide highlighted line"
+#define hideDesc           "Hide the currently-highlighted line"
+#define unhideStr          "Unhide all hidden lines"
+#define unhideDesc         "Unhide all hidden lines"
+
+#define togglePaletteStr      "Toggle color schemes"
+#define togglePaletteDesc     "Toggle between conservation and residue color schemes"
+#define colorByResIdStr       "Set %ID threshold..."
+#define colorByResIdDesc      "Set the threshold above which to color residues"
+#define saveColorSchemeStr    "Save colour scheme..."
+#define saveColorSchemeDesc   "Save current colour scheme"
+#define loadColorSchemeStr    "Load colour scheme..."
+#define loadColorSchemeDesc   "Read colour scheme from file"
+#define editColorSchemeStr    "Edit current colour scheme..."
+#define editColorSchemeDesc   "Edit the current colour scheme"
+
+#define SaveTreeStr           "Save Tree"
+#define SaveTreeDesc          "Save Tree in New Hampshire format"
+#define FindOrthogsStr        "Find putative orthologs"
+#define FindOrthogsDesc       "Find putative orthologs"
+#define ShowOrgsStr           "Show organisms"
+#define ShowOrgsDesc          "Show current organisms"
+#define PlotOptsStr           "Plot settings..."
+#define PlotOptsDesc          "Edit conservation-plot settings"
+
+#define autoRmEmptyColumnsStr  "Automatically remove empty columns"
+#define autoRmEmptyColumnsDesc "Automatically remove columns that are 100% gaps after sequence deletions"
+#define excludeHighlightedStr  "Exclude highlighted from calculations"
+#define excludeHighlightedDesc "Exclude highlighted from calculations"
+#define lowercaseStr           "Highlight lowercase characters"
+#define lowercaseDesc          "Highlight lowercase characters"
+
+#define colorSimStr            "By average similarity by Blosum62"
+#define colorIdStr             "By percent identity"
+#define colorIdSimStr          "By percent identity + Blosum62"
+#define displayColorsStr        "Display colors (faster without)"
+#define printColorsStr         "Use gray shades (for printing)"
+#define ignoreGapsStr          "Ignore gaps in conservation calculation"
+#define thresholdStr           "Only colour residues above %ID threshold"
+
+#define ConsPlotStr            "Show conservation p_lot"
+#define ConsPlotDesc           "Plot conservation profile"
+#define WrapStr                "_Wrap for printing..."
+#define WrapDesc               "Wrap alignments for printing"
+#define OutputStr              "_Output score/coords"
+#define OutputDesc             "Output current alignment's score and coords"
+#define CompareStr             "Compare all and output identities"
+#define CompareDesc            "Compage all sequences against all others and output their identities"
+#define FetchWWWStr            "Fetch sequences via WWW"
+#define FetchWWWDesc           "Fetch sequences via WWW"
+
+
+/* Define the menu actions for standard menu entries */
+static const GtkActionEntry menuEntries[] = {
+  { "FileMenuAction",  NULL, "_File"},
+  { "EditMenuAction",  NULL, "_Edit"},
+  { "ColorMenuAction", NULL, "_Color"},
+  { "SettingsMenuAction", NULL, "_Settings"},
+  { "SortMenuAction",  NULL, "S_ort"},
+  { "HelpMenuAction",  NULL, "_Help"},
+
+  { "Close",	           GTK_STOCK_CLOSE,      "_Close",             "<control>W",        "Close",                 G_CALLBACK(onCloseMenu)},
+  { "Quit", 	           GTK_STOCK_QUIT,       "_Quit",              "<control>Q",        "Quit  Ctrl+Q",          G_CALLBACK(onQuitMenu)},
+  { "Help",	           GTK_STOCK_HELP,       "_Help",              "<control>H",        "Display help  Ctrl+H",  G_CALLBACK(onHelpMenu)},
+  { "About",	           GTK_STOCK_ABOUT,      "A_bout",             NULL,                "About",                 G_CALLBACK(onAboutMenu)},
+  { "Print",	           GTK_STOCK_PRINT,      "_Print...",          "<control>P",        "Print  Ctrl+P",         G_CALLBACK(onPrintMenu)},
+  { "Find",                GTK_STOCK_FIND,       "_Find...",           "<control>F",        "Find  Ctrl+F",          G_CALLBACK(onFindMenu)},
+  { "Wrap", 	           NULL,                 WrapStr,              NULL,                WrapDesc,                G_CALLBACK(onWrapMenu)},
+  { "ShowTree",	           NULL,                 "Show _tree",         NULL,                "Show tree",             G_CALLBACK(onShowTreeMenu)},
+  { "RecalcTree",          NULL,                 "Recalculate tree",   NULL,                "Recalculate tree (e.g. after alignment has changed or to reset after swapping nodes)",      G_CALLBACK(onRecalcTreeMenu)},
+  { "TreeOpts",	           GTK_STOCK_PREFERENCES,"Tree settings...",   NULL,                "Edit tree settings",    G_CALLBACK(onTreeOptsMenu)},
+  { "ConsPlot",	           NULL,                 ConsPlotStr,          NULL,                ConsPlotDesc,            G_CALLBACK(onConsPlotMenu)},
+  { "Save",                GTK_STOCK_SAVE,       "_Save",              "<control>S",        "Save alignment",        G_CALLBACK(onSaveMenu)},
+  { "SaveAs",	           GTK_STOCK_SAVE_AS,    "Save _as...",        "<shift><control>S", "Save alignment as",     G_CALLBACK(onSaveAsMenu)},
+  { "Output",	           NULL,                 OutputStr,            NULL,                OutputDesc,              G_CALLBACK(onOutputMenu)},
+  { "Compare",	           NULL,                 CompareStr,           NULL,                CompareDesc,             G_CALLBACK(onCompareMenu)},
+  { "CleanUp",	           GTK_STOCK_CLEAR,      "Clean _up windows",  NULL,                "Clean up windows",      G_CALLBACK(onCleanUpMenu)},
+
+  {"rmPicked",             NULL,                 rmPickedStr,          NULL,                rmPickedDesc,            G_CALLBACK(onrmPickedMenu)},
+  {"rmGappySeqs",          NULL,                 rmGappySeqsStr,       NULL,                rmGappySeqsDesc,         G_CALLBACK(onrmGappySeqsMenu)},
+  {"rmPartialSeqs",        NULL,                 rmPartialSeqsStr,     "<control>T" ,       rmPartialSeqsDesc,       G_CALLBACK(onrmPartialSeqsMenu)},
+  {"rmRedundant",          NULL,                 rmRedundantStr,       "<control>R",        rmRedundantDesc,         G_CALLBACK(onrmRedundantMenu)},
+  {"rmOutliers",           NULL,                 rmOutliersStr,        NULL,                rmOutliersDesc,          G_CALLBACK(onrmOutliersMenu)},
+  {"rmScore",              NULL,                 rmScoreStr,           NULL,                rmScoreDesc,             G_CALLBACK(onrmScoreMenu)},
+  {"rmColumnPrompt",       NULL,                 rmColumnPromptStr,    NULL,                rmColumnPromptDesc,      G_CALLBACK(onrmColumnPromptMenu)},
+  {"rmColumnLeft",         GTK_STOCK_GO_BACK,    rmColumnLeftStr,      NULL,                rmColumnLeftDesc,        G_CALLBACK(onrmColumnLeftMenu)},
+  {"rmColumnRight",        GTK_STOCK_GO_FORWARD, rmColumnRightStr,     NULL,                rmColumnRightDesc,       G_CALLBACK(onrmColumnRightMenu)},
+  {"rmColumnCutoff",       NULL,                 rmColumnCutoffStr,    NULL,                rmColumnCutoffDesc,      G_CALLBACK(onrmColumnCutoffMenu)},
+  {"rmGappyColumns",       NULL,                 rmGappyColumnsStr,    NULL,                rmGappyColumnsDesc,      G_CALLBACK(onrmGappyColumnsMenu)},
+  {"readLabels",           NULL,                 readLabelsStr,        NULL,                readLabelsDesc,          G_CALLBACK(onreadLabelsMenu)},
+  {"selectGaps",           NULL,                 selectGapsStr,        NULL,                selectGapsDesc,          G_CALLBACK(onselectGapsMenu)},
+  {"hide",                 NULL,                 hideStr,              NULL,                hideDesc,                G_CALLBACK(onhideMenu)},
+  {"unhide",               NULL,                 unhideStr,            NULL,                unhideDesc,              G_CALLBACK(onunhideMenu)},
+
+  {"togglePalette",        NULL,                 togglePaletteStr,     "T",                 togglePaletteDesc,       G_CALLBACK(ontogglePaletteMenu)},
+  {"colorByResId",         NULL,                 colorByResIdStr,      NULL,                colorByResIdDesc,        G_CALLBACK(oncolorByResIdMenu)},
+  {"saveColorScheme",      NULL,                 saveColorSchemeStr,   NULL,                saveColorSchemeDesc,     G_CALLBACK(onsaveColorSchemeMenu)},
+  {"loadColorScheme",      NULL,                 loadColorSchemeStr,   NULL,                loadColorSchemeDesc,     G_CALLBACK(onloadColorSchemeMenu)},
+  {"editColorScheme",    GTK_STOCK_SELECT_COLOR, editColorSchemeStr,   NULL,                editColorSchemeDesc,     G_CALLBACK(oneditColorSchemeMenu)},
+
+  {"SaveTree",             GTK_STOCK_FLOPPY,     SaveTreeStr,          NULL,                SaveTreeDesc,            G_CALLBACK(onSaveTreeMenu)},
+  {"ShowOrgs",             NULL,                 ShowOrgsStr,          NULL,                ShowOrgsDesc,            G_CALLBACK(onShowOrgsMenu)},
+  {"PlotOpts",             GTK_STOCK_PROPERTIES, PlotOptsStr,          NULL,                PlotOptsDesc,            G_CALLBACK(onPlotOptsMenu)},
+
+  {"ZoomIn",              GTK_STOCK_ZOOM_IN,    "Zoom in",            NULL,                 "Zoom in  =",               G_CALLBACK(onZoomInMenu)},
+  {"ZoomOut",             GTK_STOCK_ZOOM_OUT,   "Zoom out",           NULL,                 "Zoom out  -",              G_CALLBACK(onZoomOutMenu)},
+  {"SetFont",             NULL,                 "Set font size",      NULL,                 "Set font size",         G_CALLBACK(onSetFontMenu)}
+};
+
+/* Define the menu actions for toggle menu entries */
+static const GtkToggleActionEntry toggleMenuEntries[] = {
+  {"FetchWWW",               NULL, FetchWWWStr,                          NULL,                FetchWWWDesc,            G_CALLBACK(onFetchWWWMenu),           FALSE},
+  {"rmMany",     GTK_STOCK_DELETE, rmManyStr,                            NULL,                rmManyDesc,              G_CALLBACK(onRemoveSeqsMenu),         FALSE},
+  {"FindOrthogs",            NULL, FindOrthogsStr,                       NULL,                FindOrthogsDesc,         G_CALLBACK(onFindOrthogsMenu),        FALSE},
+  {"autoRmEmptyColumns",     NULL, autoRmEmptyColumnsStr,                NULL,                autoRmEmptyColumnsDesc,  G_CALLBACK(onAutoRmEmptyColumnsMenu), TRUE}, 
+  {"toggleColorByResId",     NULL, thresholdStr,                         NULL,                thresholdStr,            G_CALLBACK(ontoggleColorByResIdMenu), FALSE},
+  {"ignoreGaps",             NULL, ignoreGapsStr,                        NULL,                ignoreGapsStr,           G_CALLBACK(onignoreGapsMenu),         FALSE},
+  {"printColors",            NULL, printColorsStr,                       NULL,                printColorsStr,          G_CALLBACK(onprintColorsMenu),        FALSE},
+  {"excludeHighlighted",     NULL, excludeHighlightedStr,                NULL,                excludeHighlightedDesc,  G_CALLBACK(onexcludeHighlightedMenu), FALSE},
+  {"displayColors",          NULL, displayColorsStr,                     NULL,                displayColorsStr,        G_CALLBACK(ondisplayColorsMenu),      TRUE},
+  {"lowercase",              NULL, lowercaseStr,                         NULL,                lowercaseDesc,           G_CALLBACK(onlowercaseMenu),          FALSE}
+};
+
+
+/* Define the menu actions for radio-button menu entries */
+static const GtkRadioActionEntry schemeMenuEntries[] = {
+  {"ColorByResidue",       NULL, "Color by _residue",                       NULL, "Color by residue",                  BELVU_SCHEME_TYPE_RESIDUE},
+  {"ColorByCons",          NULL, "Color by _conservation",                  NULL, "Color by conservation",             BELVU_SCHEME_TYPE_CONS}
+};
+
+static const GtkRadioActionEntry colorSchemeMenuEntries[] = {
+  {"colorSchemeStandard",  NULL, "By residue: Erik's",                            NULL, "Erik's",                            BELVU_SCHEME_ERIK},
+  {"colorSchemeGibson",    NULL, "By residue: Toby's",                            NULL, "Toby's",                            BELVU_SCHEME_GIBSON},
+  {"colorSchemeCGP",       NULL, "By residue: Cys/Gly/Pro",                       NULL, "Cys/Gly/Pro",                       BELVU_SCHEME_CGP},
+  {"colorSchemeCGPH",       NULL, "By residue: Cys/Gly/Pro/His",                  NULL, "Cys/Gly/Pro/His",                   BELVU_SCHEME_CGPH},
+  {"colorSchemeEmpty",     NULL, "By residue: Clean slate",                       NULL, "Clean slate",                       BELVU_SCHEME_NONE},
+  {"colorSchemeCustom",    NULL, "By residue: Custom",                            NULL, "Custom",                            BELVU_SCHEME_CUSTOM},
+  {"colorSim",             NULL, colorSimStr,                         NULL, colorSimStr,                         BELVU_SCHEME_BLOSUM},
+  {"colorId",              NULL, colorIdStr,                          NULL, colorIdStr,                          BELVU_SCHEME_ID},
+  {"colorIdSim",           NULL, colorIdSimStr,                       NULL, colorIdSimStr,                       BELVU_SCHEME_ID_BLOSUM}
+};
+
+static const GtkRadioActionEntry sortMenuEntries[] = {
+  {"unsorted",             NULL,                     "unsorted",                           NULL, "Unsorted",                          BELVU_UNSORTED},
+  {"consSort",             NULL,                     "by conservation",                    NULL, "Sort by conservation",              BELVU_SORT_CONS},
+  {"scoreSort",            NULL,                     "by score",                           NULL, "Sort by score",                     BELVU_SORT_SCORE},
+  {"alphaSort",            GTK_STOCK_SORT_ASCENDING, "alphabetically",                     NULL, "Sort alphabetically",               BELVU_SORT_ALPHA},
+  {"organismSort",         NULL,                     "by swissprot organism",              NULL, "Sort by swissprot organism",        BELVU_SORT_ORGANISM},
+  {"treeSort",             NULL,                     "by tree order",                      NULL, "Sort by tree order",                BELVU_SORT_TREE},
+  {"simSort",              NULL,                     "by similarity to selected sequence", NULL, "Sort by similarity to highlighted sequence", BELVU_SORT_SIM},
+  {"idSort",               NULL,                     "by identity to selected sequence",   NULL, "Sort by identity to highlighted sequence",   BELVU_SORT_ID}
+};
+
+
+/* Define the menu layout */
+static const char standardMenuDescription[] =
+"<ui>"
+/* ACCELERATORS */
+"  <accelerator action='togglePalette'/>"
+"  <accelerator action='Find'/>"
+
+/* MAIN MENU BAR */
+"  <menubar name='MenuBar' accelerators='true'>"
+     /* File menu */
+"    <menu action='FileMenuAction'>"
+"      <menuitem action='Quit'/>"
+"      <menuitem action='Wrap'/>"
+"      <menuitem action='Print'/>"
+"      <separator/>"
+"      <menuitem action='ShowTree'/>"
+"      <menuitem action='TreeOpts'/>"
+"      <menuitem action='RecalcTree'/>"
+"      <separator/>"
+"      <menuitem action='ConsPlot'/>"
+"      <separator/>"
+"      <menuitem action='Save'/>"
+"      <menuitem action='SaveAs'/>"
+"      <menuitem action='Output'/>"
+"      <separator/>"
+"      <menuitem action='FetchWWW'/>"
+"      <menuitem action='Compare'/>"
+"      <menuitem action='CleanUp'/>"
+"    </menu>"
+    /* Edit menu */
+"    <menu action='EditMenuAction'>"
+"      <menuitem action='rmPicked'/>"
+"      <menuitem action='rmMany'/>"
+"      <menuitem action='rmGappySeqs'/>"
+"      <menuitem action='rmPartialSeqs'/>"
+"      <menuitem action='rmRedundant'/>"
+"      <menuitem action='rmOutliers'/>"
+"      <menuitem action='rmScore'/>"
+"      <separator/>"
+"      <menuitem action='rmColumnPrompt'/>"
+"      <menuitem action='rmColumnLeft'/>"
+"      <menuitem action='rmColumnRight'/>"
+"      <menuitem action='rmColumnCutoff'/>"
+"      <menuitem action='rmGappyColumns'/>"
+"      <menuitem action='autoRmEmptyColumns'/>"
+"      <separator/>"
+"      <menuitem action='readLabels'/>"
+"      <menuitem action='selectGaps'/>"
+"      <menuitem action='hide'/>"
+"      <menuitem action='unhide'/>"
+"    </menu>"
+     /* Color schemes menu */
+"    <menu action='ColorMenuAction'>"
+"      <menuitem action='colorSchemeStandard'/>"
+"      <menuitem action='colorSchemeGibson'/>"
+"      <menuitem action='colorSchemeCGP'/>"
+"      <menuitem action='colorSchemeCGPH'/>"
+"      <menuitem action='colorSchemeEmpty'/>"
+"      <menuitem action='colorSchemeCustom'/>"
+"      <separator/>"
+"      <menuitem action='colorSim'/>"
+"      <menuitem action='colorId'/>"
+"      <menuitem action='colorIdSim'/>"
+"      <separator/>"
+"      <menuitem action='editColorScheme'/>"
+"      <menuitem action='saveColorScheme'/>"
+"      <menuitem action='loadColorScheme'/>"
+"    </menu>"
+     /* Settings menu */
+"    <menu action='SettingsMenuAction'>"
+"      <menuitem action='toggleColorByResId'/>"
+"      <menuitem action='colorByResId'/>"
+"      <menuitem action='ignoreGaps'/>"
+"      <separator/>"
+"      <menuitem action='excludeHighlighted'/>"
+"      <menuitem action='printColors'/>"
+"      <menuitem action='displayColors'/>"
+"      <menuitem action='lowercase'/>"
+"    </menu>"
+     /* Sort menu */
+"    <menu action='SortMenuAction'>"
+"      <menuitem action='scoreSort'/>"
+"      <menuitem action='alphaSort'/>"
+"      <menuitem action='organismSort'/>"
+"      <menuitem action='treeSort'/>"
+"      <menuitem action='simSort'/>"
+"      <menuitem action='idSort'/>"
+"    </menu>"
+/* Help menu */
+"    <menu action='HelpMenuAction'>"
+"      <menuitem action='Help'/>"
+"      <menuitem action='About'/>"
+"    </menu>"
+"  </menubar>"
+
+/* CONTEXT MENUS */
+
+/* Main context menu */
+"  <popup name='ContextMenu' accelerators='true'>"
+"    <menuitem action='Quit'/>"
+"    <menuitem action='Wrap'/>"
+"    <menuitem action='Print'/>"
+"    <separator/>"
+"    <menuitem action='ShowTree'/>"
+"    <menuitem action='TreeOpts'/>"
+"    <menuitem action='RecalcTree'/>"
+"    <separator/>"
+"    <menuitem action='ConsPlot'/>"
+"    <separator/>"
+"    <menuitem action='Save'/>"
+"    <menuitem action='SaveAs'/>"
+"    <menuitem action='Output'/>"
+"    <separator/>"
+"    <menuitem action='FetchWWW'/>"
+"    <menuitem action='Compare'/>"
+"    <menuitem action='CleanUp'/>"
+"  </popup>"
+/* Wrapped-alignments window context menu */
+"  <popup name='WrapContextMenu' accelerators='true'>"
+"    <menuitem action='Close'/>"
+"    <menuitem action='Print'/>"
+"    <menuitem action='Wrap'/>"
+"  </popup>"
+/* Organisms window context menu */
+"  <popup name='OrgsContextMenu' accelerators='true'>"
+"    <menuitem action='Close'/>"
+"    <menuitem action='Print'/>"
+"  </popup>"
+/* Tree context menu */
+"  <popup name='TreeContextMenu' accelerators='true'>"
+"    <menuitem action='Close'/>"
+"    <menuitem action='Print'/>"
+"    <menuitem action='SaveTree'/>"
+"    <separator/>"
+"    <menuitem action='TreeOpts'/>"
+"    <menuitem action='RecalcTree'/>"
+"    <separator/>"
+"    <menuitem action='FindOrthogs'/>"
+"    <menuitem action='ShowOrgs'/>"
+"  </popup>"
+/* Conservation-plot context menu */
+"  <popup name='PlotContextMenu' accelerators='true'>"
+"    <menuitem action='Close'/>"
+"    <menuitem action='Print'/>"
+"    <separator/>"
+"    <menuitem action='PlotOpts'/>"
+"  </popup>"
+
+/* TOOLBAR */
+"  <toolbar name='Toolbar'>"
+"    <toolitem action='Help'/>"
+"    <toolitem action='rmMany'/>"
+"    <toolitem action='editColorScheme'/>"
+"    <toolitem action='alphaSort'/>"
+"    <separator/>"
+"    <toolitem action='ZoomIn'/>"
+"    <toolitem action='ZoomOut'/>"
+"    <toolitem action='Find'/>"
+"  </toolbar>"
+"</ui>";
+
+
+
+/* Utility function to create the UI manager for the menus */
+GtkUIManager* createUiManager(GtkWidget *window, 
+                              BelvuContext *bc, 
+                              GtkActionGroup **actionGroupOut)
+{
+  GtkActionGroup *action_group = gtk_action_group_new ("MenuActions");
+  
+  gtk_action_group_add_actions(action_group, menuEntries, G_N_ELEMENTS(menuEntries), window);
+  gtk_action_group_add_toggle_actions(action_group, toggleMenuEntries, G_N_ELEMENTS(toggleMenuEntries), window);
+
+  gtk_action_group_add_radio_actions(action_group, schemeMenuEntries, G_N_ELEMENTS(schemeMenuEntries), bc->schemeType, G_CALLBACK(onToggleSchemeType), window);
+  gtk_action_group_add_radio_actions(action_group, colorSchemeMenuEntries, G_N_ELEMENTS(colorSchemeMenuEntries), BELVU_SCHEME_BLOSUM, G_CALLBACK(onToggleColorScheme), window);
+  gtk_action_group_add_radio_actions(action_group, sortMenuEntries, G_N_ELEMENTS(sortMenuEntries), BELVU_SORT_CONS, G_CALLBACK(onToggleSortOrder), window);
+
+  greyOutInvalidActionsForGroup(bc, action_group);
+
+  GtkUIManager *ui_manager = gtk_ui_manager_new();
+  gtk_ui_manager_insert_action_group(ui_manager, action_group, 0);
+  gtk_ui_manager_set_add_tearoffs(ui_manager, TRUE);
+  
+  GtkAccelGroup *accel_group = gtk_ui_manager_get_accel_group(ui_manager);
+  gtk_window_add_accel_group(GTK_WINDOW(window), accel_group);
+  
+  if (actionGroupOut)
+    *actionGroupOut = action_group;
+  
+  return ui_manager;
+}
+
+
+/* Create a menu */
+GtkWidget* createBelvuMenu(GtkWidget *window, 
+                           const char *path, 
+                           GtkUIManager *ui_manager)
+{
+  GError *error = NULL;
+  if (!gtk_ui_manager_add_ui_from_string (ui_manager, standardMenuDescription, -1, &error))
+    {
+      prefixError(error, "Building menus failed: ");
+      reportAndClearIfError(&error, G_LOG_LEVEL_ERROR);
+    }
+  
+  GtkWidget *menu = gtk_ui_manager_get_widget (ui_manager, path);
+  
+  return menu;
+}
+
+
+/* The following functions implement the menu actions */
+
+/* FILE MENU ACTIONS */
+static void onCloseMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *window = GTK_WIDGET(data);
+  BelvuContext *bc = windowGetContext(window);
+
+  if (window == bc->consPlot) /* conservation plot is persistent, so just hide it rather than closing */
+    gtk_widget_hide_all(window);
+  else
+    gtk_widget_destroy(window);
+}
+
+static void onQuitMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *window = GTK_WIDGET(data);
+  BelvuContext *bc = windowGetContext(window);
+
+  if (stringsEqual(gtk_widget_get_name(window), MAIN_BELVU_WINDOW_NAME, TRUE))
+    {
+      /* If this is the main window, just call its destructor function, which
+       * handles save-checking and quitting the application itself (and we don't
+       * want to do that twice). */
+      onDestroyBelvuWindow(window);
+    }
+  else
+    {
+      gboolean quit = TRUE;
+      
+      /* Check if the alignment has been save and if not give the option to cancel */
+      if (!bc->saved)
+        quit = saveAlignmentPrompt(window, bc);
+      
+      if (quit)
+        gtk_main_quit();
+    }
+}
+
+static void onHelpMenu(GtkAction *action, gpointer data)
+{
+  showHelpDialog();
+}
+
+static void onAboutMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *belvuWindow = GTK_WIDGET(data);
+  showAboutDialog(belvuWindow);
+}
+
+/* For some widget the print function prints the visible window as it is, for
+ * others it prints only the cached drawables. This returns true if the latter. */
+static gboolean printCachedDrawablesOnly(GtkWidget *widget)
+{
+  const char *name = gtk_widget_get_name(widget);
+  
+  return (stringsEqual(name, WRAPPED_BELVU_WINDOW_NAME, TRUE) ||
+          stringsEqual(name, BELVU_TREE_WINDOW_NAME, TRUE) ||
+          stringsEqual(name, BELVU_ORGS_WINDOW_NAME, TRUE));
+}
+
+static void onPrintMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *window = GTK_WIDGET(data);
+
+  static GtkPageSetup *pageSetup = NULL;
+  static GtkPrintSettings *printSettings = NULL;
+  
+  if (!pageSetup)
+    {
+      pageSetup = gtk_page_setup_new();
+      gtk_page_setup_set_orientation(pageSetup, GTK_PAGE_ORIENTATION_PORTRAIT);
+    }
+  
+  if (!printSettings)
+    {
+      printSettings = gtk_print_settings_new();
+      gtk_print_settings_set_orientation(printSettings, GTK_PAGE_ORIENTATION_PORTRAIT);
+      gtk_print_settings_set_quality(printSettings, GTK_PRINT_QUALITY_HIGH);
+      gtk_print_settings_set_resolution(printSettings, DEFAULT_PRINT_RESOLUTION);
+    }
+  
+  /* If we're just printing the cached drawable, get the actual drawing
+   * area widget that should be drawn. (Otherwise it gets clipped to the 
+   * size of the container widget) */
+  const gboolean printCachedOnly = printCachedDrawablesOnly(window);
+  PrintScaleType scaleType = PRINT_FIT_BOTH;
+
+  GtkWidget *widgetToPrint = NULL;
+  
+  if (printCachedOnly)
+    {
+      widgetGetDrawing(window, &widgetToPrint);
+      scaleType = PRINT_FIT_WIDTH; /* might be very tall, so allow multiple pages height-wise */
+    }
+  else
+    {
+      widgetToPrint = window;
+    }
+  
+  blxPrintWidget(widgetToPrint, NULL, GTK_WINDOW(window), &printSettings, &pageSetup, NULL, printCachedOnly, scaleType);
+}
+
+static void onFindMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *window = GTK_WIDGET(data);
+  BelvuContext *bc = windowGetContext(window);
+
+  showFindDialog(bc, window);
+}
+
+static void onWrapMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *window = GTK_WIDGET(data);
+  BelvuContext *bc = windowGetContext(window);
+  
+  showWrapDialog(bc, bc->belvuWindow);
+}
+
+static void onShowTreeMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *belvuWindow = GTK_WIDGET(data);
+  BelvuWindowProperties *properties = belvuWindowGetProperties(belvuWindow);
+  
+  if (!properties->bc->belvuTree)
+    {
+      /* If the tree exists, create a window from it. Otherwise we need to
+       * create it before we show it. */
+      if (properties->bc->mainTree && properties->bc->mainTree->head)
+        createBelvuTreeWindow(properties->bc, properties->bc->mainTree, TRUE);
+      else
+        createAndShowBelvuTree(properties->bc, TRUE);
+    }
+
+  if (properties->bc->belvuTree)
+    gtk_window_present(GTK_WINDOW(properties->bc->belvuTree));
+}
+
+/* Utility to extract the context from any toplevel window type (i.e. the main
+ * window, the tree, or a wrapped-alignment window). */
+static BelvuContext* windowGetContext(GtkWidget *window)
+{
+  BelvuContext *bc = NULL;
+  const char *name = gtk_widget_get_name(window);
+  
+  if (stringsEqual(name, MAIN_BELVU_WINDOW_NAME, TRUE))
+    {
+      BelvuWindowProperties *properties = belvuWindowGetProperties(window);
+      bc = properties->bc;
+    }
+  else if (stringsEqual(name, BELVU_TREE_WINDOW_NAME, TRUE))
+    {
+      bc = belvuTreeGetContext(window);
+    }
+  else if (stringsEqual(name, BELVU_CONS_PLOT_WINDOW_NAME, TRUE))
+    {
+      bc = consPlotGetContext(window);
+    }
+  else /* generic windows */
+    {
+      GenericWindowProperties *properties = windowGetProperties(window);
+      bc = properties->bc;
+    }
+  
+  return bc;
+}
+
+static void onRecalcTreeMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *window = GTK_WIDGET(data);
+  BelvuContext *bc = windowGetContext(window);
+  
+  if (bc->belvuTree)
+    {
+      /* Update the tree window */
+      belvuTreeRemakeTree(bc->belvuTree);
+    }
+  else
+    {
+      /* No tree window, but make/re-make the underlying tree structure */
+      separateMarkupLines(bc);
+      Tree *tree = treeMake(bc, FALSE, TRUE);
+      reInsertMarkupLines(bc);
+      
+      belvuContextSetTree(bc, &tree);
+      onTreeOrderChanged(bc);
+    }
+}
+
+static void onTreeOptsMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *window = GTK_WIDGET(data);
+  BelvuContext *bc = windowGetContext(window);
+  
+  showTreeSettingsDialog(window, bc);
+}
+
+static void onConsPlotMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *window = GTK_WIDGET(data);
+  BelvuContext *bc = windowGetContext(window);
+
+  if (bc->consPlot)
+    {
+      gtk_widget_show_all(bc->consPlot);
+      gtk_window_present(GTK_WINDOW(bc->consPlot));
+    }
+  else
+    {
+      createConsPlot(bc);
+    }
+}
+
+
+static void onSaveMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *window = GTK_WIDGET(data);
+  BelvuContext *bc = windowGetContext(window);
+
+  saveAlignment(bc, window);
+}
+
+static void onSaveAsMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *window = GTK_WIDGET(data);
+  BelvuContext *bc = windowGetContext(window);
+  
+  showSaveAsDialog(bc, window);
+}
+
+static void onOutputMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *belvuWindow = GTK_WIDGET(data);
+  BelvuContext *bc = windowGetContext(belvuWindow);
+  
+  if (!bc->selectedAln) 
+    {
+      g_critical("Please select a sequence first.\n");
+    }
+  else
+    {
+      g_message("%.1f %s/%d-%d\n", 
+                bc->selectedAln->score,
+                bc->selectedAln->name,
+                bc->selectedAln->start,
+                bc->selectedAln->end);
+    
+      fflush(stdout);
+    }
+}
+
+static void onCompareMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *window = GTK_WIDGET(data);
+  BelvuContext *bc = windowGetContext(window);
+
+  listIdentity(bc);
+}
+
+static void onFetchWWWMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *window = GTK_WIDGET(data);
+  BelvuContext *bc = windowGetContext(window);
+
+  bc->useWWWFetch = gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(action));
+}
+
+/* This just calls gtk_widget_destroy but accepts gpointer arguments so
+ * that we can call it from a foreach fucntion. */
+static void destroyWidget(gpointer widget, gpointer data)
+{
+  gtk_widget_destroy(GTK_WIDGET(widget));
+}
+
+static void onCleanUpMenu(GtkAction *action, gpointer data)
+{
+  /* Close all windows that were spawned from the main window */
+  GtkWidget *belvuWindow = GTK_WIDGET(data);
+  BelvuWindowProperties *properties = belvuWindowGetProperties(belvuWindow);
+  
+  g_slist_foreach(properties->bc->spawnedWindows, destroyWidget, NULL);
+}
+
+/* EDIT MENU ACTIONS */
+static void onrmPickedMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *belvuWindow = GTK_WIDGET(data);
+  BelvuWindowProperties *properties = belvuWindowGetProperties(belvuWindow);
+
+  removeSelectedSequence(properties->bc, properties->bc->belvuAlignment);
+}
+
+static void onrmGappySeqsMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *belvuWindow = GTK_WIDGET(data);
+  showRemoveGappySeqsDialog(belvuWindow);
+}
+
+static void onrmPartialSeqsMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *belvuWindow = GTK_WIDGET(data);
+  BelvuWindowProperties *properties = belvuWindowGetProperties(belvuWindow);
+  removePartialSeqs(properties->bc, properties->bc->belvuAlignment);
+}
+
+static void onrmRedundantMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *belvuWindow = GTK_WIDGET(data);
+  showMakeNonRedundantDialog(belvuWindow);
+}
+
+static void onrmOutliersMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *belvuWindow = GTK_WIDGET(data);
+  showRemoveOutliersDialog(belvuWindow);
+}
+
+static void onrmScoreMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *belvuWindow = GTK_WIDGET(data);
+  showRemoveByScoreDialog(belvuWindow);
+}
+
+static void onrmColumnPromptMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *belvuWindow = GTK_WIDGET(data);
+  showRemoveColumnsDialog(belvuWindow);
+}
+
+static void onrmColumnLeftMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *belvuWindow = GTK_WIDGET(data);
+  BelvuWindowProperties *properties = belvuWindowGetProperties(belvuWindow);
+  
+  if (properties->bc->selectedCol > 0)
+    {
+      rmColumn(properties->bc, 1, properties->bc->selectedCol);
+      rmFinaliseColumnRemoval(properties->bc);
+
+      updateOnAlignmentLenChanged(properties->bc->belvuAlignment);
+
+      properties->bc->selectedCol = 0; /* cancel selection, because this col is deleted now */
+      properties->bc->highlightedCol = 0; /* cancel selection, because this col is deleted now */
+      
+      onColSelectionChanged(properties->bc);
+    }
+  else
+    {
+      g_critical("Please select a column first.\n\nMiddle-click with the mouse to select a column.\n");
+    }
+}
+
+static void onrmColumnRightMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *belvuWindow = GTK_WIDGET(data);
+  BelvuWindowProperties *properties = belvuWindowGetProperties(belvuWindow);
+  
+  if (properties->bc->selectedCol > 0)
+    {
+      rmColumn(properties->bc, properties->bc->selectedCol, properties->bc->maxLen);
+      rmFinaliseColumnRemoval(properties->bc);
+
+      updateOnAlignmentLenChanged(properties->bc->belvuAlignment);
+
+      properties->bc->selectedCol = 0; /* cancel selection, because this col is deleted now */
+      properties->bc->highlightedCol = 0; /* cancel selection, because this col is deleted now */
+      onColSelectionChanged(properties->bc);
+    }
+  else
+    {
+      g_critical("Please select a column first.\n\nMiddle-click with the mouse to select a column.\n");
+    }
+}
+
+/* Remove columns based on a conservation-cutoff */
+static void onrmColumnCutoffMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *belvuWindow = GTK_WIDGET(data);
+  BelvuWindowProperties *properties = belvuWindowGetProperties(belvuWindow);
+  
+  if (!colorByConservation(properties->bc)) 
+    {
+      g_critical("Please select a conservation coloring scheme from the Color menu first.\n");
+      return;
+    }
+
+  showRemoveColumnsCutoffDialog(belvuWindow);
+}
+
+/* Remove columns with more than a specified percentage of gaps */
+static void onrmGappyColumnsMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *belvuWindow = GTK_WIDGET(data);
+  showRemoveGappyColumnsDialog(belvuWindow);
+}
+
+/* Toggle the 'remove-many-sequences' option on or off */
+static void onRemoveSeqsMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *belvuWindow = GTK_WIDGET(data);
+  
+  const gboolean optionOn = gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(action));
+  
+  if (optionOn)
+    startRemovingSequences(belvuWindow);
+  else
+    endRemovingSequences(belvuWindow);
+}
+
+/* Toggle the 'auto-remove empty columns' option */
+static void onAutoRmEmptyColumnsMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *belvuWindow = GTK_WIDGET(data);
+  BelvuWindowProperties *properties = belvuWindowGetProperties(belvuWindow);
+  
+  const gboolean newVal = gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(action));
+  
+  if (properties->bc->rmEmptyColumnsOn != newVal)
+    {
+      properties->bc->rmEmptyColumnsOn = newVal;
+    }
+}
+
+static void onreadLabelsMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *belvuWindow = GTK_WIDGET(data);
+  BelvuWindowProperties *properties = belvuWindowGetProperties(belvuWindow);
+
+  if (!properties->bc->selectedAln) 
+    {
+      g_critical("Please select a sequence first.\n");
+      return;
+    }
+
+  char *title = g_strdup_printf("Read labels of %s from file", properties->bc->selectedAln->name);
+
+  const char *filename = getLoadFileName(belvuWindow, properties->bc->dirName, title);
+  g_free(title);
+
+  FILE *fil = fopen(filename, "r");
+
+  if (fil)
+    {
+      readLabels(properties->bc, fil);
+      belvuAlignmentRedrawAll(properties->bc->belvuAlignment);
+    }
+}
+
+static void onselectGapsMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *belvuWindow = GTK_WIDGET(data);
+  showSelectGapCharDialog(belvuWindow);
+}
+
+static void onhideMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *belvuWindow = GTK_WIDGET(data);
+  BelvuWindowProperties *properties = belvuWindowGetProperties(belvuWindow);
+
+  if (!properties->bc->selectedAln)
+    {
+      g_critical("Please select a sequence to hide.\n");
+    }
+  else
+    {
+      properties->bc->selectedAln->hide = TRUE;
+      belvuAlignmentRedrawAll(properties->bc->belvuAlignment);
+    }
+}
+
+static void onunhideMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *belvuWindow = GTK_WIDGET(data);
+  BelvuWindowProperties *properties = belvuWindowGetProperties(belvuWindow);
+
+  /* Reset the 'hide' flag to false in all sequences */
+  int i = 0;
+  for (i = 0; i < (int)properties->bc->alignArr->len; ++i)
+    {
+      g_array_index(properties->bc->alignArr, ALN*, i)->hide = FALSE;
+    }
+  
+  belvuAlignmentRedrawAll(properties->bc->belvuAlignment);
+}
+
+
+/***********************************************************
+ *                  Save on exit dialog                    *
+ ***********************************************************/
+
+/* Pops up a dialog asking the user whether they want to save the alignment
+ * or not. Deals with the save, if applicable, and returns true if the user
+ * still wishes to quit (or false if the user cancelled). */
+static gboolean saveAlignmentPrompt(GtkWidget *widget, BelvuContext *bc)
+{
+  char *title = g_strdup_printf("%sSave alignment?", belvuGetTitlePrefix(bc));
+  
+  GtkWidget *dialog = gtk_dialog_new_with_buttons(title,
+                                                  GTK_WINDOW(widget), 
+                                                  (GtkDialogFlags)(GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT),
+                                                  GTK_STOCK_YES, GTK_RESPONSE_YES,        /* yes, save the alignment and exit */
+                                                  GTK_STOCK_NO, GTK_RESPONSE_NO,          /* no, don't save (but still exit) */
+                                                  GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,  /* don't save and don't exit */
+                                                  NULL);
+
+  g_free(title);
+  
+  gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_YES);
+
+  /* Put message and icon into an hbox */
+  GtkWidget *hbox = gtk_hbox_new(FALSE, 0);
+  gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox, TRUE, TRUE, 0);
+
+  GtkWidget *image = gtk_image_new_from_stock(GTK_STOCK_DIALOG_QUESTION, GTK_ICON_SIZE_DIALOG);
+  gtk_box_pack_start(GTK_BOX(hbox), image, TRUE, TRUE, 0);
+
+  GtkWidget *label = gtk_label_new("Alignment was modified - save ?");
+  gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
+  gtk_widget_show_all(hbox);
+
+  gint response = gtk_dialog_run(GTK_DIALOG(dialog));
+  gboolean quit = FALSE;
+  
+  if (response == GTK_RESPONSE_YES)
+    {
+      quit = saveAlignment(bc, widget);
+    }
+  else if (response == GTK_RESPONSE_NO)
+    {
+      quit = TRUE;
+    }
+
+  gtk_widget_destroy(dialog);
+  
+  return quit;
+}
+
+/***********************************************************
+ *                  File menu actions                      *
+ ***********************************************************/
+
+static const char* saveFasta(BelvuContext *bc, GtkWidget *parent)
+{
+  char *title = g_strdup_printf("%s", bc->saveFormat == BELVU_FILE_UNALIGNED_FASTA ? "Save as unaligned Fasta file:" : "Save as aligned Fasta file:");
+  const char *filename = getSaveFileName(parent, bc->fileName, bc->dirName, NULL, title);
+  g_free(title);
+  
+  FILE *fil = fopen(filename, "w");
+  
+  if (fil)
+    {
+      writeFasta(bc, fil);
+    }
+  
+  return filename;
+}
+
+
+static const char* saveMsf(BelvuContext *bc, GtkWidget *parent)
+{
+  const char *filename = getSaveFileName(parent, bc->fileName, bc->dirName, NULL, "Save as MSF (/) file:");
+  
+  FILE *fil = fopen(filename, "w");
+  
+  if (fil)
+    {
+      writeMSF(bc, fil);
+    }
+  
+  return filename;
+}
+
+
+static const char* saveMul(BelvuContext *bc, GtkWidget *parent)
+{
+  const char *filename = getSaveFileName(parent, bc->fileName, bc->dirName, NULL, "Save as Stockholm file:");
+  FILE *fil = fopen(filename, "w");
+  
+  if (fil)
+    {
+      writeMul(bc, fil);
+    }
+  
+  return filename;
+}
+
+
+/***********************************************************
+ *                 Colour menu actions                     *
+ ***********************************************************/
+
+/* This function is called when the color scheme has been changed. It performs all 
+ * required updates. */
+static void onColorSchemeChanged(BelvuWindowProperties *properties)
+{
+  /* Make sure the correct scheme type is set in the menus */
+  switch (properties->bc->schemeType)
+    {
+      case BELVU_SCHEME_TYPE_RESIDUE:
+	setToggleMenuStatus(properties->actionGroup, "ColorByResidue", TRUE);
+	break;
+
+      case BELVU_SCHEME_TYPE_CONS:
+	setToggleMenuStatus(properties->actionGroup, "ColorByCons", TRUE);
+	break;
+    
+      default:
+	g_warning("Program error: unrecognised color scheme type '%d'.\n", properties->bc->schemeType);
+	break;
+    };
+  
+  /* Some menu actions are enabled/disabled depending on which scheme type is selected */
+  greyOutInvalidActions(properties->bc);
+  
+  /* Update the display */
+  updateSchemeColors(properties->bc);
+  belvuAlignmentRedrawAll(properties->bc->belvuAlignment);
+}
+
+
+static void onToggleSchemeType(GtkRadioAction *action, GtkRadioAction *current, gpointer data)
+{
+  GtkWidget *belvuWindow = GTK_WIDGET(data);
+  BelvuWindowProperties *properties = belvuWindowGetProperties(belvuWindow);
+
+  BelvuSchemeType newScheme = (BelvuSchemeType)gtk_radio_action_get_current_value(current);
+  
+  if (newScheme != properties->bc->schemeType)
+    {
+      properties->bc->schemeType = newScheme;
+      
+      /* Toggle the actual scheme to the current default for this scheme type */
+      if (newScheme == BELVU_SCHEME_TYPE_RESIDUE)
+        setRadioMenuStatus(properties->actionGroup, "colorSchemeStandard", properties->bc->residueScheme);
+      else
+        setRadioMenuStatus(properties->actionGroup, "colorSchemeStandard", properties->bc->consScheme);
+      
+      onColorSchemeChanged(properties);
+    }
+}
+
+
+static void onToggleColorScheme(GtkRadioAction *action, GtkRadioAction *current, gpointer data)
+{
+  GtkWidget *belvuWindow = GTK_WIDGET(data);
+  BelvuWindowProperties *properties = belvuWindowGetProperties(belvuWindow);
+  BelvuContext *bc = properties->bc;
+
+  /* Get the new color scheme */
+  BelvuColorScheme newScheme = (BelvuColorScheme)gtk_radio_action_get_current_value(current);
+
+  /* Determine what scheme type this puts us in */
+  if (newScheme > NUM_RESIDUE_SCHEMES)
+    {
+      /* The new scheme is a color-by-conservation scheme type */
+      if (bc->schemeType != BELVU_SCHEME_TYPE_CONS || bc->consScheme != newScheme)
+        {
+          bc->schemeType = BELVU_SCHEME_TYPE_CONS;
+          bc->consScheme = newScheme;
+          onColorSchemeChanged(properties);
+        }
+    }
+  else
+    {
+      /* The new scheme is a color-by-residue scheme type */
+      if (bc->schemeType != BELVU_SCHEME_TYPE_RESIDUE || bc->residueScheme != newScheme)
+        {
+          bc->schemeType = BELVU_SCHEME_TYPE_RESIDUE;
+          bc->residueScheme = newScheme;
+          setResidueSchemeColors(bc);
+          onColorSchemeChanged(properties);
+        }
+    }
+}
+
+
+static void onToggleSortOrder(GtkRadioAction *action, GtkRadioAction *current, gpointer data)
+{
+  GtkWidget *belvuWindow = GTK_WIDGET(data);
+  BelvuWindowProperties *properties = belvuWindowGetProperties(belvuWindow);
+  
+  properties->bc->sortType = (BelvuSortType)gtk_radio_action_get_current_value(current);
+  doSort(properties->bc, properties->bc->sortType, TRUE);
+
+  /* To do: This is a hack to overcome a bug where the sort order gets messed
+   * up when switching to tree-sort from a different sort order after having
+   * changed the tree order by swapping nodes. Calling doSort again seems to
+   * sort it out, although obviously this is not ideal. */
+  if (properties->bc->sortType == BELVU_SORT_TREE)
+    doSort(properties->bc, properties->bc->sortType, TRUE);
+
+  centerHighlighted(properties->bc, properties->bc->belvuAlignment);
+  belvuAlignmentRedrawAll(properties->bc->belvuAlignment);
+}
+
+
+/* Toggle between color-by-conservation and color-by-residue modes */
+static void ontogglePaletteMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *window = GTK_WIDGET(data);
+  
+  if (stringsEqual(gtk_widget_get_name(window), MAIN_BELVU_WINDOW_NAME, TRUE))
+    {
+      BelvuWindowProperties *properties = belvuWindowGetProperties(window);
+      
+      if (properties->bc->schemeType == BELVU_SCHEME_TYPE_CONS)
+        setToggleMenuStatus(properties->actionGroup, "ColorByResidue", TRUE);
+      else
+        setToggleMenuStatus(properties->actionGroup, "ColorByCons", TRUE);
+    }
+}
+
+/* This controls whether the color-by-residue-id option is toggle on or off */
+static void ontoggleColorByResIdMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *belvuWindow = GTK_WIDGET(data);
+  BelvuWindowProperties *properties = belvuWindowGetProperties(belvuWindow);
+
+  /* Toggle the flag */
+  properties->bc->colorByResIdOn = !properties->bc->colorByResIdOn;
+  
+  /* Update the color scheme and redraw */
+  updateSchemeColors(properties->bc);
+  belvuAlignmentRedrawAll(properties->bc->belvuAlignment);
+}
+
+/* This pops up a dialog to set the color-by-res-id threshold, and turns the option on */
+static void oncolorByResIdMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *belvuWindow = GTK_WIDGET(data);
+  showColorByResIdDialog(belvuWindow);  
+}
+
+static void onsaveColorSchemeMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *belvuWindow = GTK_WIDGET(data);
+  BelvuWindowProperties *properties = belvuWindowGetProperties(belvuWindow);
+
+  const char *filename = getSaveFileName(belvuWindow, properties->bc->fileName, properties->bc->dirName, NULL, "Save colour scheme");
+  FILE *fil = fopen(filename, "w");
+
+  if (filename)
+    {
+      if (properties->bc->dirName) g_free(properties->bc->dirName);
+      if (properties->bc->fileName) g_free(properties->bc->fileName);
+      properties->bc->dirName = g_path_get_dirname(filename);
+      properties->bc->fileName = g_path_get_basename(filename);
+    }
+  
+  saveResidueColorScheme(properties->bc, fil);
+}
+
+static void onloadColorSchemeMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *belvuWindow = GTK_WIDGET(data);
+  BelvuWindowProperties *properties = belvuWindowGetProperties(belvuWindow);
+
+  const char *filename = getLoadFileName(belvuWindow, properties->bc->dirName, "Read color scheme");
+  FILE *fil = fopen(filename, "r");
+
+  if (filename)
+    {
+      if (properties->bc->dirName) g_free(properties->bc->dirName);
+      if (properties->bc->fileName) g_free(properties->bc->fileName);
+      properties->bc->dirName = g_path_get_dirname(filename);
+      properties->bc->fileName = g_path_get_basename(filename);
+    }
+  
+  readResidueColorScheme(properties->bc, fil, getColorArray(), TRUE);
+
+  setRadioMenuStatus(properties->actionGroup, "colorSchemeStandard", BELVU_SCHEME_CUSTOM);
+  setToggleMenuStatus(properties->actionGroup, "ColorByResidue", TRUE);
+  onColorSchemeChanged(properties);
+}
+
+static void onignoreGapsMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *belvuWindow = GTK_WIDGET(data);
+  BelvuWindowProperties *properties = belvuWindowGetProperties(belvuWindow);
+
+  /* Toggle the 'ignore gaps' option */
+  properties->bc->ignoreGapsOn = !properties->bc->ignoreGapsOn;
+  
+  onColorSchemeChanged(properties);
+}
+
+static void onprintColorsMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *belvuWindow = GTK_WIDGET(data);
+  BelvuWindowProperties *properties = belvuWindowGetProperties(belvuWindow);
+  
+  /* Toggle the 'ignore gaps' option */
+  properties->bc->printColorsOn = !properties->bc->printColorsOn;
+  
+  onColorSchemeChanged(properties);
+}
+
+static void onexcludeHighlightedMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *belvuWindow = GTK_WIDGET(data);
+  BelvuWindowProperties *properties = belvuWindowGetProperties(belvuWindow);
+
+  const gboolean exclude = gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(action));
+  
+  setExcludeFromConsCalc(properties->bc, exclude);
+  
+  belvuAlignmentRedrawAll(properties->bc->belvuAlignment);
+}
+
+static void ondisplayColorsMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *belvuWindow = GTK_WIDGET(data);
+  BelvuWindowProperties *properties = belvuWindowGetProperties(belvuWindow);
+  
+  const gboolean newVal = gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(action));
+  
+  if (properties->bc->displayColors != newVal)
+    {
+      properties->bc->displayColors = newVal;
+      belvuAlignmentRedrawAll(properties->bc->belvuAlignment);
+    }
+}
+
+static void onlowercaseMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *belvuWindow = GTK_WIDGET(data);
+  BelvuWindowProperties *properties = belvuWindowGetProperties(belvuWindow);
+  
+  properties->bc->lowercaseOn = !properties->bc->lowercaseOn;
+  belvuAlignmentRedrawAll(properties->bc->belvuAlignment);
+}
+
+static void oneditColorSchemeMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *belvuWindow = GTK_WIDGET(data);
+  BelvuContext *bc = windowGetContext(belvuWindow);
+  
+  if (colorByConservation(bc))
+    showEditConsColorsDialog(belvuWindow, TRUE);
+  else
+    showEditResidueColorsDialog(belvuWindow, TRUE);
+}
+
+static void onSaveTreeMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *window = GTK_WIDGET(data);
+  BelvuContext *bc = windowGetContext(window);
+  
+  const char *filename = getSaveFileName(window, bc->fileName, bc->dirName, NULL, "Save tree in New Hampshire format");
+  
+  FILE *file = fopen(filename, "w");
+  
+  if (file)
+    {
+      saveTreeNH(bc->mainTree, bc->mainTree->head, file);
+
+      /* Add a terminating line and close the file. */
+      fprintf(file, ";\n");
+      fclose(file);
+      
+      g_message_info("Tree saved to %s\n", filename);
+    }
+}
+
+static void onFindOrthogsMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *window = GTK_WIDGET(data);
+  BelvuContext *bc = windowGetContext(window);
+
+  GtkWidget *treeWindow = NULL;
+  
+  /* If the current window is a tree, use that; otherwise use the main belvu tree */
+  if (stringsEqual(gtk_widget_get_name(window), BELVU_TREE_WINDOW_NAME, TRUE))
+    treeWindow = window;
+  else
+    treeWindow = bc->belvuTree;
+  
+  bc->highlightOrthologs = gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(action));
+      
+  /* If turning the option on, print the orthologs to stdout */
+  if (bc->highlightOrthologs)
+    treePrintOrthologs(bc, treeWindow);
+
+  /* Refresh the tree to show or hide the orthologs */
+  belvuTreeRedrawAll(bc->belvuTree, NULL);
+}
+
+static void onShowOrgsMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *window = GTK_WIDGET(data);
+  BelvuContext *bc = windowGetContext(window);
+  
+  if (bc->organismArr->len < 1)
+    {
+      g_critical("No organism details found.\n");
+    }
+  else if (bc->orgsWindow)
+    {
+      gtk_widget_show_all(bc->orgsWindow);
+      gtk_window_present(GTK_WINDOW(bc->orgsWindow));
+    }
+  else
+    {
+      createOrganismWindow(bc);
+    }
+}
+
+static void onZoomInMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *window = GTK_WIDGET(data);
+  BelvuContext *bc = windowGetContext(window);
+
+  incrementFontSize(bc);
+}
+
+static void onZoomOutMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *window = GTK_WIDGET(data);
+  BelvuContext *bc = windowGetContext(window);
+
+  decrementFontSize(bc);
+}
+
+static void onSetFontMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *window = GTK_WIDGET(data);
+  BelvuContext *bc = windowGetContext(window);
+
+  showFontDialog(bc, window);
+}
+
+
+/***********************************************************
+ *                         Properties                      *
+ ***********************************************************/
+
+static BelvuWindowProperties* belvuWindowGetProperties(GtkWidget *widget)
+{
+  return widget ? (BelvuWindowProperties*)(g_object_get_data(G_OBJECT(widget), "BelvuWindowProperties")) : NULL;
+}
+
+
+/* Does the job of destroying the belvu window */
+static void destroyBelvuWindow(GtkWidget *belvuWindow)
+{
+  BelvuWindowProperties *properties = belvuWindowGetProperties(belvuWindow);
+
+  if (properties)
+    {
+      destroyBelvuContext(&properties->bc);
+  
+      /* Free the properties struct itself */
+      delete properties;
+      properties = NULL;
+      g_object_set_data(G_OBJECT(belvuWindow), "BelvuWindowProperties", NULL);
+    }
+
+  gtk_main_quit();  
+}
+
+
+/* Signal handler for when the main belvu window is closed (note that if the
+ * alignment is not saved the user may cancel) */
+static void onDestroyBelvuWindow(GtkWidget *belvuWindow)
+{
+  gboolean destroy = TRUE;
+  
+  BelvuWindowProperties *properties = belvuWindowGetProperties(belvuWindow);
+  
+  if (!properties->bc->saved)
+    {
+      /* The alignment has not been saved - ask the user if they want to save/cancel */
+      BelvuWindowProperties *properties = belvuWindowGetProperties(belvuWindow);
+      destroy = saveAlignmentPrompt(belvuWindow, properties->bc);
+    }
+  
+  if (destroy)
+    {
+      destroyBelvuWindow(belvuWindow);
+    }
+}
+
+
+/* Create the properties struct and initialise all values. */
+static void belvuWindowCreateProperties(GtkWidget *belvuWindow, 
+					BelvuContext *bc, 
+					GtkWidget *statusBar,
+					GtkWidget *feedbackBox,
+                                        GtkActionGroup *actionGroup)
+{
+  if (belvuWindow)
+    {
+      BelvuWindowProperties *properties = new BelvuWindowProperties;
+     
+      properties->widget = belvuWindow;
+      properties->bc = bc;
+      properties->statusBar = statusBar;
+      properties->feedbackBox = feedbackBox;
+      properties->actionGroup = actionGroup;
+      
+      g_object_set_data(G_OBJECT(belvuWindow), "BelvuWindowProperties", properties);
+      g_signal_connect(G_OBJECT(belvuWindow), "destroy", G_CALLBACK (onDestroyBelvuWindow), NULL);
+    }
+}
+
+
+GtkActionGroup* belvuWindowGetActionGroup(GtkWidget *belvuWindow)
+{
+  BelvuWindowProperties *properties = belvuWindowGetProperties(belvuWindow);
+  return (properties ? properties->actionGroup : NULL);
+}
+
+
+/* Properties for generic windows */
+static GenericWindowProperties* windowGetProperties(GtkWidget *widget)
+{
+  return widget ? (GenericWindowProperties*)(g_object_get_data(G_OBJECT(widget), "GenericWindowProperties")) : NULL;
+}
+
+static void onDestroyGenericWindow(GtkWidget *window)
+{
+  GenericWindowProperties *properties = windowGetProperties(window);
+
+  /* We must remove the window from the list of spawned windows */
+  properties->bc->spawnedWindows = g_slist_remove(properties->bc->spawnedWindows, window);
+  
+  if (properties)
+    {
+      /* Free the properties struct */
+      delete properties;
+      properties = NULL;
+      g_object_set_data(G_OBJECT(window), "GenericWindowProperties", NULL);
+    }
+}
+
+
+/* Create the properties struct and initialise all values for a generic window. */
+static void genericWindowCreateProperties(GtkWidget *wrapWindow, 
+                                          BelvuContext *bc,
+                                          GtkActionGroup *actionGroup)
+{
+  if (wrapWindow)
+    {
+      GenericWindowProperties *properties = new GenericWindowProperties;
+
+      properties->widget = wrapWindow;
+      properties->bc = bc;
+      properties->actionGroup = actionGroup;
+
+      g_object_set_data(G_OBJECT(wrapWindow), "GenericWindowProperties", properties);
+      g_signal_connect(G_OBJECT(wrapWindow), "destroy", G_CALLBACK (onDestroyGenericWindow), NULL);
+    }
+}
+
+
+/***********************************************************
+ *                        Font size                        *
+ ***********************************************************/
+
+static void showFontDialog(BelvuContext *bc, GtkWidget *window)
+{
+  GtkWidget *entry = NULL;
+
+  const int oldSize = pango_font_description_get_size(window->style->font_desc) / PANGO_SCALE;
+  char *defaultText = g_strdup_printf("%d", oldSize);
+
+  char *title = g_strdup_printf("%sFont", belvuGetTitlePrefix(bc));
+  GtkWidget *dialog = createPromptDialog(window, defaultText, title, "Select font size:", "", &entry);
+  g_free(title);
+
+  gtk_widget_show_all(dialog);
+
+  if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
+    {
+      const int newSize = convertStringToInt(gtk_entry_get_text(GTK_ENTRY(entry)));
+
+      if (newSize >= MIN_FONT_SIZE && newSize <= MAX_FONT_SIZE)
+        {
+          widgetSetFontSize(bc->belvuWindow, GINT_TO_POINTER(newSize));
+          widgetSetFontSize(bc->belvuTree, GINT_TO_POINTER(newSize));
+          
+          onBelvuAlignmentFontSizeChanged(bc->belvuAlignment);
+          onBelvuTreeFontSizeChanged(bc->belvuTree);
+        }
+      else
+        {
+          g_critical("Invalid font size %d; font size must be between %d and %d.\n", newSize, MIN_FONT_SIZE, MAX_FONT_SIZE);
+        }
+    }
+
+  gtk_widget_destroy(dialog);
+}
+
+
+void incrementFontSize(BelvuContext *bc)
+{
+  if (bc->belvuAlignment)
+    {
+      int size = pango_font_description_get_size(bc->belvuAlignment->style->font_desc) / PANGO_SCALE;
+      widgetSetFontSizeAndCheck(bc->belvuAlignment, size + 1);
+      onBelvuAlignmentFontSizeChanged(bc->belvuAlignment);
+    }
+}
+
+void decrementFontSize(BelvuContext *bc)
+{
+  if (bc->belvuAlignment)
+    {
+      int size = pango_font_description_get_size(bc->belvuAlignment->style->font_desc) / PANGO_SCALE;
+      widgetSetFontSizeAndCheck(bc->belvuAlignment, size - 1);
+      onBelvuAlignmentFontSizeChanged(bc->belvuAlignment);
+    }
+}
+
+/***********************************************************
+ *		      Remove sequences			   *
+ ***********************************************************/
+
+/* This should be called when the 'removing sequences' option has changed */
+static void updateSequenceRemovalMode(GtkWidget *belvuWindow)
+{
+  BelvuWindowProperties *properties = belvuWindowGetProperties(belvuWindow);
+
+  if (properties->bc->removingSeqs)
+    {
+      gdk_window_set_cursor(belvuWindow->window, properties->bc->removeSeqsCursor);
+      g_message_info("Double-click on sequences to remove.  Esc or right-click to cancel.\n");
+    }
+  else
+    {
+      gdk_window_set_cursor(belvuWindow->window, properties->bc->defaultCursor);
+      g_message_info("Finished removing sequences.\n");
+    }
+
+  /* Force cursor to change immediately */
+    while (gtk_events_pending())
+    gtk_main_iteration();
+}
+
+
+static void startRemovingSequences(GtkWidget *belvuWindow)
+{
+  BelvuWindowProperties *properties = belvuWindowGetProperties(belvuWindow);
+  
+  if (!properties->bc->removingSeqs)
+    {
+      properties->bc->removingSeqs = TRUE;
+      updateSequenceRemovalMode(belvuWindow);
+    }
+}
+
+static void endRemovingSequences(GtkWidget *belvuWindow)
+{
+  BelvuWindowProperties *properties = belvuWindowGetProperties(belvuWindow);
+  
+  properties->bc->removingSeqs = FALSE;
+  updateSequenceRemovalMode(belvuWindow);
+}
+
+
+/***********************************************************
+ *			About dialog			   *
+ ***********************************************************/
+
+/* A GtkAboutDialogActivateLinkFunc() called when user clicks on website link in "About" window. */
+static void aboutDialogOpenLinkCB(GtkAboutDialog *about, const gchar *link, gpointer data)
+{
+  GError *error = NULL ;
+    
+  if (!seqtoolsLaunchWebBrowser(link, &error))
+    g_critical("Cannot show link in web browser: \"%s\"", link) ;    
+}
+
+
+/* Shows the 'About' dialog */
+static void showAboutDialog(GtkWidget *parent)
+{
+#if CHECK_GTK_VERSION(2, 6)
+  const gchar *authors[] = {AUTHOR_LIST, NULL} ;
+
+  gtk_about_dialog_set_url_hook(aboutDialogOpenLinkCB, NULL, NULL) ;
+  
+  gtk_show_about_dialog(GTK_WINDOW(parent),
+			"authors", authors,
+			"comments", belvuGetCommentsString(), 
+			"copyright", belvuGetCopyrightString(),
+			"license", belvuGetLicenseString(),
+			"name", belvuGetAppName(),
+			"version", belvuGetVersionString(),
+			"website", belvuGetWebSiteString(),
+			NULL) ;
+#endif
+  
+  return ;
+}
+
+/***********************************************************
+ *                      Help dialog                        *
+ ***********************************************************/
+
+static void showHelpDialog()
+{
+  GError *error = NULL;
+
+  /* The docs should live in /share/doc/seqtools/, in the same parent
+   * directory that our executable's 'bin' directory is in. Open the 'quick
+   * start' page. */
+  char rel_path[100] = "../share/doc/seqtools/belvu_quick_start.html";
+
+  /* Find the executable's path */
+  char *exe = g_find_program_in_path(g_get_prgname());
+  gboolean ok = (exe != NULL);
+
+  if (ok)
+    {
+      /* Get the executable's directory */
+      char *dir = g_path_get_dirname(exe);
+      
+      ok = dir != NULL;
+      
+      if (ok)
+        {
+          /* Get the path to the html page */
+          char *path = g_strdup_printf("%s/%s", dir, rel_path);
+          
+          ok = path != NULL;
+          
+          if (ok)
+            {
+              g_message_info("Opening help page '%s'\n", path);
+              seqtoolsLaunchWebBrowser(path, &error);
+              g_free(path);
+            }
+
+          g_free(dir);
+        }
+
+      g_free(exe);
+    }
+  
+  if (!ok)
+    {
+      if (error)
+        reportAndClearIfError(&error, G_LOG_LEVEL_CRITICAL);
+      else
+        g_critical("Could not find help documentation: %s\n", rel_path);
+    }
+}
+
+
+/***********************************************************
+ *                   Save As dialog                        *
+ ***********************************************************/
+
+/* Utility to call the correct save function for the current save format.
+ * Returns true if successful (false if not saved, e.g. if the user cancelled
+ * the save dialog). */
+static gboolean saveAlignment(BelvuContext *bc, GtkWidget *window)
+{
+  const char *filename = NULL;
+  
+  if (bc->saveFormat == BELVU_FILE_MSF)
+    filename = saveMsf(bc, window);
+  else if (bc->saveFormat == BELVU_FILE_ALIGNED_FASTA)
+    filename = saveFasta(bc, window);
+  else if (bc->saveFormat == BELVU_FILE_UNALIGNED_FASTA)
+    filename = saveFasta(bc, window);
+  else
+    filename = saveMul(bc, window);
+  
+  /* Remember the last filename */
+  if (filename)	
+    {
+      if (bc->dirName) g_free(bc->dirName);
+      if (bc->fileName) g_free(bc->fileName);
+      bc->dirName = g_path_get_dirname(filename);
+      bc->fileName = g_path_get_basename(filename);
+    }
+  
+  /* If the filename is null, the user must have cancelled. */
+  return (filename != NULL);
+}
+
+
+/* This creates a drop-down box for selecting a file format */
+static GtkComboBox* createFileFormatCombo(const int initFormatId)
+{
+  GtkComboBox *combo = createComboBox();
+  GtkTreeIter *iter = NULL;
+  
+  int i = 0;
+  for ( ; i < BELVU_NUM_FILE_FORMATS; ++i)
+    addComboItem(combo, iter, i, getFileFormatString(i), initFormatId);
+  
+  return combo;
+}
+
+
+/* Callback called when the 'save coords' toggle button is toggled. It updates
+ * the given widget (passed as data)  to be enabled if the toggle button is active
+ * or disabled otherwise. */
+static void onSaveCoordsToggled(GtkWidget *button, gpointer data)
+{
+  GtkWidget *otherWidget = GTK_WIDGET(data);
+  
+  if (otherWidget)
+    {
+      const gboolean isActive = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button));
+      gtk_widget_set_sensitive(otherWidget, isActive); 
+    }
+}
+
+
+static void showSaveAsDialog(BelvuContext *bc, GtkWidget *window)
+{
+  char *title = g_strdup_printf("%sSave As", belvuGetTitlePrefix(bc));
+
+  GtkWidget *dialog = gtk_dialog_new_with_buttons(title, 
+                                                  GTK_WINDOW(window), 
+                                                  (GtkDialogFlags)(GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT),
+                                                  GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
+                                                  GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
+                                                  NULL);
+
+  g_free(title);
+  
+  gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT);
+
+  GtkBox *contentArea = GTK_BOX(GTK_DIALOG(dialog)->vbox);
+  
+  /* Create a drop-down for selectin the file format */
+  GtkWidget *hbox = gtk_hbox_new(FALSE, DIALOG_XPAD);
+  gtk_box_pack_start(contentArea, hbox, FALSE, FALSE, DIALOG_XPAD);
+  
+  GtkWidget *label = gtk_label_new("Format: ");
+  gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, DIALOG_XPAD);
+  
+  GtkComboBox *combo = createFileFormatCombo(bc->saveFormat);
+  gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(combo), FALSE, FALSE, DIALOG_YPAD);
+  
+  /* Create a tick box for enabling the 'save coords' option */
+  GtkToggleButton *checkButton = GTK_TOGGLE_BUTTON(gtk_check_button_new_with_mnemonic("Save _coordinates"));
+  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkButton), bc->saveCoordsOn);
+  gtk_box_pack_start(contentArea, GTK_WIDGET(checkButton), FALSE, FALSE, DIALOG_YPAD);
+  
+  /* Create selection buttons to allow user to specify separator char */
+  GtkBox *hbox2 = GTK_BOX(gtk_hbox_new(FALSE, DIALOG_XPAD));
+  gtk_box_pack_start(contentArea, GTK_WIDGET(hbox2), FALSE, FALSE, DIALOG_YPAD);
+  
+  GtkWidget *separatorLabel = gtk_label_new("Separator character between name and coords:\n(Use = for GCG)");
+  gtk_misc_set_alignment(GTK_MISC(separatorLabel), 0.0, 0.0);
+  gtk_box_pack_start(hbox2, separatorLabel, FALSE, FALSE, DIALOG_XPAD);
+  
+  GtkBox *vbox = GTK_BOX(gtk_vbox_new(FALSE, DIALOG_YPAD));
+  gtk_box_pack_start(hbox2, GTK_WIDGET(vbox), FALSE, FALSE, DIALOG_XPAD);
+  
+  const gboolean button1Active = (bc->saveSeparator == '/');
+  GtkWidget *button1 = gtk_radio_button_new_with_label_from_widget(NULL, "slash  (/) ");
+  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button1), button1Active);
+  gtk_box_pack_start(vbox, button1, FALSE, FALSE, 0);
+  
+  GtkWidget *button2 = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(button1), "equals  (=) ");
+  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button2), !button1Active);
+  gtk_box_pack_start(vbox, button2, FALSE, FALSE, 0);
+  
+  /* The save separator is only applicable if saving coords */
+  gtk_widget_set_sensitive(GTK_WIDGET(hbox2), bc->saveCoordsOn); 
+  g_signal_connect(G_OBJECT(checkButton), "toggled", G_CALLBACK(onSaveCoordsToggled), hbox2);
+  
+  
+  gtk_widget_show_all(dialog);
+  
+  if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
+    {
+      bc->saveFormat = (BelvuFileFormat)gtk_combo_box_get_active(combo);
+      bc->saveCoordsOn = gtk_toggle_button_get_active(checkButton);
+    
+      if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button1)))
+	bc->saveSeparator = '/';
+      else 
+	bc->saveSeparator = '=';
+    
+    
+      saveAlignment(bc, window);
+    }
+  
+  gtk_widget_destroy(dialog);
+}
+
+
+/***********************************************************
+ *                     Find dialog                         *
+ ***********************************************************/
+
+static void findSeqs(BelvuContext *bc, const char *searchStr, const gboolean findAgain, const gboolean searchBackwards)
+{
+  /* Loop through each alignment and see if the name matches. If so,
+   * remember the index of the matching alignment. We start searching
+   * from the beginning of the alignment array, unless this is a 'find again'
+   * search, when we search from the next alignment after the previous result */
+  static int startIdx = 0;
+
+  if (findAgain && searchBackwards)
+    --startIdx;
+  else if (findAgain)
+    ++startIdx;
+  else
+    startIdx = 0;
+
+  const int increment = (searchBackwards ? -1 : 1);
+
+  int i = startIdx;
+  gboolean found = FALSE;
+
+  for ( ; i >= 0 && i < (int)bc->alignArr->len; i += increment)
+    {
+      ALN *alnp = g_array_index(bc->alignArr, ALN*, i);
+
+      if (wildcardSearch(alnp->name, searchStr))
+        {
+          bc->selectedAln = alnp;
+          onRowSelectionChanged(bc);
+
+          found = TRUE;
+          startIdx = i;
+          break;
+        }
+    }
+
+  /* If it's a find-again search and we failed to find a result, try
+   * again starting from the beginning */
+  if (findAgain && !found &&
+      ((searchBackwards && startIdx != (int)bc->alignArr->len - 1) || (!searchBackwards && startIdx != 0)) )
+    {
+      startIdx = (searchBackwards ? bc->alignArr->len - 1 : 0);
+      i = startIdx;
+
+      for ( ; i >= 0 && i < (int)bc->alignArr->len; i += increment)
+        {
+          ALN *alnp = g_array_index(bc->alignArr, ALN*, i);
+
+          if (wildcardSearch(alnp->name, searchStr))
+            {
+              bc->selectedAln = alnp;
+              onRowSelectionChanged(bc);
+
+              found = TRUE;
+              startIdx = i;
+              break;
+            }
+        }
+    }
+
+  if (!found)
+    g_critical("Alignment name '%s' not found.\n", searchStr);
+}
+
+
+static gboolean onFindSeqs(GtkWidget *button, const gint responseId, gpointer data)
+{
+  if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)))
+    {
+      const char *searchStr = getStringFromTextEntry(GTK_ENTRY(data));
+
+      GtkWidget *dialog = gtk_widget_get_toplevel(button);
+      GtkWidget *window = GTK_WIDGET(gtk_window_get_transient_for(GTK_WINDOW(dialog)));
+      BelvuContext *bc = windowGetContext(window);
+
+      /* If the the user hit forward or back, do a find-again search in the appropriate
+       * direction; otherwise do a normal search */
+      if (responseId == BLX_RESPONSE_FORWARD)
+        findSeqs(bc, searchStr, TRUE, FALSE);
+      else if (responseId == BLX_RESPONSE_BACK)
+        findSeqs(bc, searchStr, TRUE, TRUE);
+      else
+        findSeqs(bc, searchStr, FALSE, FALSE);
+    }
+
+  return TRUE;
+}
+
+
+/* To do: implement functionality to search for sequences by a pattern of residues */
+/* 
+static gboolean onFindResidues(GtkWidget *button, const gint responseId, gpointer data)
+{
+  if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)))
+    {
+      const char *searchStr = getStringFromTextEntry(GTK_ENTRY(data));
+
+      GtkWidget *dialog = gtk_widget_get_toplevel(button);
+      GtkWidget *window = GTK_WIDGET(gtk_window_get_transient_for(GTK_WINDOW(dialog)));
+      BelvuContext *bc = windowGetContext(window);
+
+      if (responseId == BLX_RESPONSE_FORWARD)
+        findResidues(bc, searchStr, TRUE, FALSE);
+      else if (responseId == BLX_RESPONSE_BACK)
+        findResidues(bc, searchStr, TRUE, TRUE);
+      else
+        findResidues(bc, searchStr, FALSE, FALSE);
+    }
+
+  return TRUE;
+}
+*/
+
+static void showFindDialog(BelvuContext *bc, GtkWidget *window)
+{
+  const BelvuDialogId dialogId = BELDIALOG_FIND;
+  GtkWidget *dialog = getPersistentDialog(bc->dialogList, dialogId);
+
+  if (!dialog)
+    {
+      char *title = g_strdup_printf("%sFind sequences", belvuGetTitlePrefix(bc));
+
+      dialog = gtk_dialog_new_with_buttons(title,
+                                           GTK_WINDOW(window),
+                                           GTK_DIALOG_DESTROY_WITH_PARENT,
+                                           GTK_STOCK_GO_BACK,
+                                           BLX_RESPONSE_BACK,
+                                           GTK_STOCK_GO_FORWARD,
+                                           BLX_RESPONSE_FORWARD,
+                                           GTK_STOCK_CLOSE,
+                                           GTK_RESPONSE_REJECT,
+                                           GTK_STOCK_OK,
+                                           GTK_RESPONSE_ACCEPT,
+                                           NULL);
+
+      g_free(title);
+      
+      /* These calls are required to make the dialog persistent... */
+      addPersistentDialog(bc->dialogList, dialogId, dialog);
+      g_signal_connect(dialog, "delete-event", G_CALLBACK(gtk_widget_hide_on_delete), NULL);
+
+      GtkBox *contentArea = GTK_BOX(GTK_DIALOG(dialog)->vbox);
+      const int numRows = 2;
+      const int numCols = 2;
+      GtkTable *table = GTK_TABLE(gtk_table_new(numRows, numCols, FALSE));
+      gtk_box_pack_start(contentArea, GTK_WIDGET(table), TRUE, TRUE, 0);
+
+
+      /*GtkRadioButton *button1 =*/ createRadioButton(table, 0, 0, NULL, "_Name search (wildcards * and ?)", TRUE, TRUE, FALSE, onFindSeqs, window, NULL);
+      /*createRadioButton(table, 0, 1, button1, "_Residue sequence search", FALSE, TRUE, FALSE, onFindResidues, window, NULL);*/
+
+
+      gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(window));
+      g_signal_connect(dialog, "response", G_CALLBACK(onResponseDialog), GINT_TO_POINTER(TRUE));
+    }
+
+  gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT);
+
+  gtk_widget_show_all(dialog);
+  gtk_window_present(GTK_WINDOW(dialog));
+}
+
+
+/***********************************************************
+ *                Remove sequences dialogs                 *
+ ***********************************************************/
+
+static GtkWidget* createPromptDialog(GtkWidget *window,
+                                     const char *defaultResult,
+                                     const char *title,
+                                     const char *text1,
+                                     const char *text2,
+                                     GtkWidget **entry)
+{ 
+  GtkWidget *dialog = gtk_dialog_new_with_buttons(title, 
+                                                  GTK_WINDOW(window),
+                                                  (GtkDialogFlags)(GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT),
+                                                  GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
+                                                  GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
+                                                  NULL);
+  
+  gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT);
+  
+  if (window)
+    pango_font_description_set_size(dialog->style->font_desc, pango_font_description_get_size(window->style->font_desc));
+  
+  GtkWidget *hbox = gtk_hbox_new(FALSE, 0);
+  gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox, FALSE, FALSE, 12);
+  
+  GtkWidget *label1 = gtk_label_new(text1);
+  gtk_misc_set_alignment(GTK_MISC(label1), 1, 0.5);
+  gtk_box_pack_start(GTK_BOX(hbox), label1, FALSE, FALSE, 0);
+  
+  *entry = gtk_entry_new();
+  gtk_box_pack_start(GTK_BOX(hbox), *entry, FALSE, FALSE, 0);
+
+  gtk_entry_set_width_chars(GTK_ENTRY(*entry), 3);
+  gtk_entry_set_activates_default(GTK_ENTRY(*entry), TRUE);
+
+  gtk_entry_set_text(GTK_ENTRY(*entry), defaultResult);
+  
+  GtkWidget *label2 = gtk_label_new(text2);
+  gtk_misc_set_alignment(GTK_MISC(label2), 0, 0.5);
+  gtk_box_pack_start(GTK_BOX(hbox), label2, FALSE, FALSE, 0);
+
+  gtk_widget_show_all(dialog);
+  
+  return dialog;
+}
+
+
+/* Show a dialog to ask the user what threshold to use for removing
+ * "gappy" sequences (i.e. sequences that are more than the given 
+ * percentage of gaps). */
+static void showRemoveGappySeqsDialog(GtkWidget *belvuWindow)
+{
+  static char *inputText = NULL;
+  
+  if (!inputText)
+    inputText = g_strdup("50");
+  
+  GtkWidget *entry = NULL;
+  BelvuContext *bc = windowGetContext(belvuWindow);
+  
+  char *title = g_strdup_printf("%sremove sequences", belvuGetTitlePrefix(bc));
+
+  GtkWidget *dialog = createPromptDialog(belvuWindow, inputText, title, "Remove sequences that are ", "% or more gaps.", &entry);
+  g_free(title);
+  
+  if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
+    {
+      if (inputText)
+	g_free(inputText);
+      
+      inputText = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry)));
+      const gdouble cutoff = g_strtod(inputText, NULL);
+      
+      BelvuWindowProperties *properties = belvuWindowGetProperties(belvuWindow);
+      removeGappySeqs(properties->bc, properties->bc->belvuAlignment, cutoff);
+    }
+  
+  gtk_widget_destroy(dialog);
+}
+
+
+static void showMakeNonRedundantDialog(GtkWidget *belvuWindow)
+{
+  static char *inputText = NULL;
+  
+  if (!inputText)
+    inputText = g_strdup("80.0");
+  
+  GtkWidget *entry = NULL;
+  BelvuContext *bc = windowGetContext(belvuWindow);
+  char *title = g_strdup_printf("%sremove sequences", belvuGetTitlePrefix(bc));
+  GtkWidget *dialog = createPromptDialog(belvuWindow, inputText, title, "Remove sequences that are more than ", "% identical.", &entry);
+  g_free(title);
+  
+  if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
+    {
+      if (inputText)
+	g_free(inputText);
+      
+      inputText = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry)));
+      const gdouble cutoff = g_strtod(inputText, NULL);
+      
+      BelvuWindowProperties *properties = belvuWindowGetProperties(belvuWindow);
+      removeRedundantSeqs(properties->bc, properties->bc->belvuAlignment, cutoff);
+    }
+  
+  gtk_widget_destroy(dialog);
+}
+
+
+static void showRemoveOutliersDialog(GtkWidget *belvuWindow)
+{
+  static char *inputText = NULL;
+  
+  if (!inputText)
+    inputText = g_strdup("20.0");
+  
+  GtkWidget *entry = NULL;
+  BelvuContext *bc = windowGetContext(belvuWindow);
+  char *title = g_strdup_printf("%sremove sequences", belvuGetTitlePrefix(bc));
+
+  GtkWidget *dialog = createPromptDialog(belvuWindow, inputText, title, "Remove sequences that are less than ", "% identical with any other.", &entry);
+  g_free(title);
+  
+  if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
+    {
+      if (inputText)
+	g_free(inputText);
+      
+      inputText = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry)));
+      const gdouble cutoff = g_strtod(inputText, NULL);
+      
+      BelvuWindowProperties *properties = belvuWindowGetProperties(belvuWindow);
+      removeOutliers(properties->bc, properties->bc->belvuAlignment, cutoff);
+    }
+  
+  gtk_widget_destroy(dialog);
+}
+
+
+static void showRemoveByScoreDialog(GtkWidget *belvuWindow)
+{
+  static char *inputText = NULL;
+  
+  if (!inputText)
+    inputText = g_strdup("20.0");
+  
+  GtkWidget *entry = NULL;
+  BelvuContext *bc = windowGetContext(belvuWindow);
+  char *title = g_strdup_printf("%sremove sequences", belvuGetTitlePrefix(bc));
+  GtkWidget *dialog = createPromptDialog(belvuWindow, inputText, title, "Remove sequences that have a score less than ", "", &entry);
+  g_free(title);
+  
+  if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
+    {
+      if (inputText)
+	g_free(inputText);
+      
+      inputText = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry)));
+      const gdouble cutoff = g_strtod(inputText, NULL);
+      
+      BelvuWindowProperties *properties = belvuWindowGetProperties(belvuWindow);
+      removeByScore(properties->bc, properties->bc->belvuAlignment, cutoff);
+    }
+  
+  gtk_widget_destroy(dialog);
+}
+
+
+/***********************************************************
+ *                     Remove columns                      *
+ ***********************************************************/
+
+static void showRemoveColumnsDialog(GtkWidget *belvuWindow)
+{
+  BelvuWindowProperties *properties = belvuWindowGetProperties(belvuWindow);
+  BelvuContext *bc = properties->bc;
+  
+  char *title = g_strdup_printf("%sRemove Columns", belvuGetTitlePrefix(bc));
+
+  GtkWidget *dialog = gtk_dialog_new_with_buttons(title, 
+                                                  GTK_WINDOW(belvuWindow), 
+                                                  (GtkDialogFlags)(GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT),
+                                                  GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
+                                                  GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
+                                                  NULL);
+
+  g_free(title);
+  
+  gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT);
+  
+  GtkWidget *hbox = gtk_hbox_new(FALSE, 0);
+  gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox, FALSE, FALSE, 12);
+  
+  GtkWidget *label1 = gtk_label_new("Remove columns from");
+  gtk_misc_set_alignment(GTK_MISC(label1), 1, 0.5);
+  gtk_box_pack_start(GTK_BOX(hbox), label1, FALSE, FALSE, 0);
+  
+  char *maxLenText = g_strdup_printf("%d", bc->maxLen);
+  GtkWidget *entry1 = gtk_entry_new();
+  gtk_box_pack_start(GTK_BOX(hbox), entry1, FALSE, FALSE, 0);
+  gtk_entry_set_width_chars(GTK_ENTRY(entry1), strlen(maxLenText) + 1);
+  gtk_entry_set_activates_default(GTK_ENTRY(entry1), TRUE);
+  gtk_entry_set_text(GTK_ENTRY(entry1), "1");
+  
+  GtkWidget *label2 = gtk_label_new("to");
+  gtk_misc_set_alignment(GTK_MISC(label2), 0, 0.5);
+  gtk_box_pack_start(GTK_BOX(hbox), label2, FALSE, FALSE, 0);
+
+  GtkWidget *entry2 = gtk_entry_new();
+  gtk_box_pack_start(GTK_BOX(hbox), entry2, FALSE, FALSE, 0);
+  gtk_entry_set_width_chars(GTK_ENTRY(entry2), strlen(maxLenText) + 3);
+  gtk_entry_set_activates_default(GTK_ENTRY(entry2), TRUE);
+  gtk_entry_set_text(GTK_ENTRY(entry2), maxLenText);
+  g_free(maxLenText);
+  maxLenText = NULL;
+  
+  gtk_widget_show_all(dialog);
+
+  
+  if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
+    {
+      const char *inputText1 = gtk_entry_get_text(GTK_ENTRY(entry1));
+      const int fromVal = convertStringToInt(inputText1);
+      
+      const char *inputText2 = gtk_entry_get_text(GTK_ENTRY(entry2));
+      const int toVal = convertStringToInt(inputText2);
+
+      rmColumn(bc, fromVal, toVal);
+      
+      rmFinaliseColumnRemoval(bc);
+      updateOnAlignmentLenChanged(bc->belvuAlignment);
+    }
+  
+  gtk_widget_destroy(dialog);
+}
+
+
+/* Remove columns with conservation below a given cutoff */
+static void showRemoveColumnsCutoffDialog(GtkWidget *belvuWindow)
+{
+  BelvuWindowProperties *properties = belvuWindowGetProperties(belvuWindow);
+  BelvuContext *bc = properties->bc;
+  
+  static char *fromText = NULL;
+  static char *toText = NULL;
+
+  if (!fromText)
+    fromText = g_strdup_printf("%.2f", -1.0);
+  
+  if (!toText)
+    toText = g_strdup_printf("%.2f", 0.9);
+  
+  char *title = g_strdup_printf("%sRemove Columns", belvuGetTitlePrefix(bc));
+
+  GtkWidget *dialog = gtk_dialog_new_with_buttons(title, 
+                                                  GTK_WINDOW(belvuWindow), 
+                                                  (GtkDialogFlags)(GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT),
+                                                  GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
+                                                  GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
+                                                  NULL);
+
+  g_free(title);
+  
+  gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT);
+  
+  GtkWidget *vbox = gtk_vbox_new(FALSE, DIALOG_YPAD);
+  gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), vbox, FALSE, FALSE, DIALOG_YPAD);
+  
+  /* Place a label at the top */
+  GtkWidget *label1 = gtk_label_new("Remove columns with a (maximum) conservation between: ");
+  gtk_misc_set_alignment(GTK_MISC(label1), 0.0, 0.5);
+  gtk_box_pack_start(GTK_BOX(vbox), label1, FALSE, FALSE, 0);
+  
+  /* Place the text entry boxes in an hbox */
+  GtkWidget *hbox = gtk_hbox_new(FALSE, 0);
+  gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, DIALOG_YPAD);
+
+  gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new(""), FALSE, FALSE, DIALOG_XPAD);
+  
+  GtkWidget *entry1 = gtk_entry_new();
+  gtk_box_pack_start(GTK_BOX(hbox), entry1, FALSE, FALSE, DIALOG_XPAD);
+  gtk_entry_set_width_chars(GTK_ENTRY(entry1), strlen(fromText) + 1);
+  gtk_entry_set_activates_default(GTK_ENTRY(entry1), TRUE);
+  gtk_entry_set_text(GTK_ENTRY(entry1), fromText);
+  
+  GtkWidget *label2 = gtk_label_new("<   conservation   <=");
+  gtk_misc_set_alignment(GTK_MISC(label2), 0, 0.5);
+  gtk_box_pack_start(GTK_BOX(hbox), label2, FALSE, FALSE, 0);
+  
+  GtkWidget *entry2 = gtk_entry_new();
+  gtk_box_pack_start(GTK_BOX(hbox), entry2, FALSE, FALSE, DIALOG_XPAD);
+  gtk_entry_set_width_chars(GTK_ENTRY(entry2), strlen(toText) + 3);
+  gtk_entry_set_activates_default(GTK_ENTRY(entry2), TRUE);
+  gtk_entry_set_text(GTK_ENTRY(entry2), toText);
+  
+  gtk_widget_show_all(dialog);
+  
+  
+  if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
+    {
+      g_free(fromText);
+      fromText = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry1)));
+      const double fromVal = g_strtod(fromText, NULL);
+
+      g_free(toText);
+      toText = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry2)));
+      const double toVal = g_strtod(toText, NULL);
+    
+      rmColumnCutoff(bc, fromVal, toVal);
+      updateOnAlignmentLenChanged(bc->belvuAlignment);
+    }
+  
+  gtk_widget_destroy(dialog);
+}
+
+
+/* Remove columns with a higher fraction of gaps than a specified cutoff */
+static void showRemoveGappyColumnsDialog(GtkWidget *belvuWindow)
+{
+  BelvuWindowProperties *properties = belvuWindowGetProperties(belvuWindow);
+  BelvuContext *bc = properties->bc;
+  
+  static char *inputText = NULL;
+  
+  if (!inputText)
+    inputText = g_strdup_printf("%.0f", 50.0);
+  
+  GtkWidget *entry = NULL;
+  char *title = g_strdup_printf("%sRemove Columns", belvuGetTitlePrefix(bc));
+  GtkWidget *dialog = createPromptDialog(belvuWindow, inputText, title, "Remove columns with more than ", " % gaps", &entry);
+  g_free(title);
+  
+  if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
+    {
+      g_free(inputText);
+      inputText = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry)));
+      const double cutoff = g_strtod(inputText, NULL);
+      
+      rmEmptyColumns(bc, cutoff/100.0);
+      
+      rmFinaliseColumnRemoval(bc);
+      updateOnAlignmentLenChanged(bc->belvuAlignment);
+    }
+  
+  gtk_widget_destroy(dialog);
+}
+
+/***********************************************************
+ *               Select gap character dialog                *
+ ***********************************************************/
+
+static void showSelectGapCharDialog(GtkWidget *belvuWindow)
+{
+  BelvuWindowProperties *properties = belvuWindowGetProperties(belvuWindow);
+  BelvuContext *bc = properties->bc;
+
+  char *title = g_strdup_printf("%sGap Character", belvuGetTitlePrefix(bc));
+
+  GtkWidget *dialog = gtk_dialog_new_with_buttons(title,
+                                                  GTK_WINDOW(belvuWindow), 
+                                                  (GtkDialogFlags)(GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL),
+                                                  GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
+                                                  GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
+                                                  NULL);
+
+  g_free(title);
+  
+  g_signal_connect(dialog, "response", G_CALLBACK(onResponseDialog), belvuWindow);
+  gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT);
+
+  GtkBox *hbox = GTK_BOX(gtk_hbox_new(FALSE, 12));
+  gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), GTK_WIDGET(hbox), FALSE, FALSE, 12);
+
+  GtkWidget *label = gtk_label_new("Select gap character:");
+  gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.0);
+  gtk_box_pack_start(hbox, label, FALSE, FALSE, 12);
+  
+  /* Create radio buttons for each gap character (only dot or dash at the moment) */
+  GtkBox *vbox = GTK_BOX(gtk_vbox_new(FALSE, 12));
+  gtk_box_pack_start(hbox, GTK_WIDGET(vbox), TRUE, TRUE, 0);
+  
+  const gboolean button1Active = (bc->gapChar == '.');
+  
+  GtkWidget *button1 = gtk_radio_button_new_with_label_from_widget(NULL, "dot  (.) ");
+  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button1), button1Active);
+  gtk_box_pack_start(vbox, button1, FALSE, FALSE, 0);
+
+  GtkWidget *button2 = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(button1), "dash  (-) ");
+  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button2), !button1Active);
+  gtk_box_pack_start(vbox, button2, FALSE, FALSE, 0);
+  
+  gtk_window_set_default_size(GTK_WINDOW(dialog), 300, -1);
+  gtk_widget_show_all(dialog);
+  
+  if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
+    {
+      char newChar;
+      
+      if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button1)))
+        newChar = '.';
+      else 
+        newChar = '-';
+      
+      if (newChar != bc->gapChar)
+        {
+          bc->gapChar = newChar;
+          
+          /* Change all the gaps in the sequences to use the new gap char */
+          int i,j;
+          for (i = 0; i < (int)bc->alignArr->len; ++i) 
+            {
+              ALN *alnp = g_array_index(bc->alignArr, ALN*, i);
+              char *alnpSeq = alnGetSeq(alnp);
+              
+              for (j = 0; j < bc->maxLen; ++j) 
+                {
+                  if (isGap(alnpSeq[j])) 
+                    alnpSeq[j] = bc->gapChar;
+                }
+            }
+          
+          belvuAlignmentRedrawAll(bc->belvuAlignment);
+        }
+    }
+  
+  gtk_widget_destroy(dialog);
+}
+
+
+/***********************************************************
+ *                Color by residue ID dialog               *
+ ***********************************************************/
+
+/* Dialog to prompt the user to enter a threshold for coloring residues by ID */
+static void showColorByResIdDialog(GtkWidget *belvuWindow)
+{
+  static char *inputText = NULL;
+  
+  if (!inputText)
+    inputText = g_strdup("20.0");
+  
+  GtkWidget *entry = NULL;
+  BelvuContext *bc = windowGetContext(belvuWindow);
+  char *title = g_strdup_printf("%sColor by Residue ID", belvuGetTitlePrefix(bc));
+  GtkWidget *dialog = createPromptDialog(belvuWindow, inputText, title, "Only colour residues above ", "% identity", &entry);
+  g_free(title);
+  
+  if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
+    {
+      if (inputText)
+	g_free(inputText);
+      
+      inputText = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry)));
+
+      BelvuWindowProperties *properties = belvuWindowGetProperties(belvuWindow);
+      properties->bc->colorByResIdCutoff = g_strtod(inputText, NULL);
+    
+      /* This sets the flag and also updates the associated 'toggle' menu item */
+      setToggleMenuStatus(properties->actionGroup, "toggleColorByResId", TRUE);
+    
+      /* Update the color scheme and redraw */
+      updateSchemeColors(properties->bc);
+      belvuAlignmentRedrawAll(properties->bc->belvuAlignment);
+    }
+  
+  gtk_widget_destroy(dialog);  
+}
+
+
+/***********************************************************
+ *                    Edit Colors dialog                   *
+ ***********************************************************/
+
+/* This creates a drop-down box for selecting a color */
+static GtkComboBox* createColorCombo(const int colorNum)
+{
+  GtkComboBox *combo = createComboBox();
+  GtkTreeIter *iter = NULL;
+  
+  int i = 0;
+  for (i = 0; i < NUM_TRUECOLORS; ++i)
+    addComboItem(combo, iter, i, getColorNumName(i), colorNum);
+  
+  return combo;
+}
+
+
+/* This is called when a color combo box has been changed and it updates
+ * the given color button (passed as the user data) to be the same color */
+static void updateColorButton(GtkWidget *combo, gpointer data)
+{
+  GtkWidget *colorButton = GTK_WIDGET(data);
+  
+  const int colorNum = gtk_combo_box_get_active(GTK_COMBO_BOX(combo));
+  
+  GdkColor color;
+  convertColorNumToGdkColor(colorNum, FALSE, &color);
+  
+  gtk_widget_modify_bg(colorButton, GTK_STATE_NORMAL, &color);
+}
+
+
+/* This is called when a color combo box has been changed and it updates the
+ * given residue (passed as the user data) */
+static void updateColorResidue(GtkWidget *combo, gpointer data)
+{
+  const int colorNum = gtk_combo_box_get_active(GTK_COMBO_BOX(combo));
+  const char *residue = (const char*)data;
+  
+  setColor(*residue, colorNum);
+  
+  
+  GtkWindow *dialogWindow = GTK_WINDOW(gtk_widget_get_toplevel(combo));
+  GtkWidget *belvuWindow = GTK_WIDGET(gtk_window_get_transient_for(dialogWindow));
+  BelvuWindowProperties *properties = belvuWindowGetProperties(belvuWindow);
+
+  onColorSchemeChanged(properties);
+}
+
+
+/* Create a color chooser button. This is a bit of a hack because it has to 
+ * deal with the old-style acedb colors, whereas ideally we would get rid of
+ * those and just use a GTK color-button widget. */
+static void createColorButton(const int colorNum, 
+                              GtkTable *table, 
+                              const int row, 
+                              const int col,
+                              const int xpad,
+                              const int ypad,
+                              GCallback callbackFunc,
+                              gpointer data)
+{
+  /* Create the color chooser. First get the current color for this residue */
+  GdkColor color;
+  convertColorNumToGdkColor(colorNum, FALSE, &color);
+  
+  /* Create a color box to display the currently-selected color. NB ideally we would get
+   * rid of the drop-down box and have a color-picker button instead, but this requires
+   * changes to the way colors are stored and saved in order to support more colors than
+   * just the old-style acedb list. */
+  GtkWidget *colorButton = gtk_event_box_new();
+  gtk_table_attach(table, colorButton, col, col + 1, row, row + 1, GTK_SHRINK, GTK_SHRINK, xpad, ypad);
+  gtk_widget_set_size_request(colorButton, 40, 20);
+  gtk_widget_modify_bg(colorButton, GTK_STATE_NORMAL, &color);
+  
+  /* Create a drop-down box to allow the user to select one of the old-style acedb colors. */
+  GtkWidget *combo = GTK_WIDGET(createColorCombo(colorNum));
+  gtk_table_attach(table, combo, col + 1, col + 2, row, row + 1, GTK_SHRINK, GTK_SHRINK, xpad, ypad);
+
+  /* This just updates the gtk color button with the new color when the combo box value has changed. */
+  g_signal_connect(G_OBJECT(combo), "changed", G_CALLBACK(updateColorButton), colorButton);
+
+  /* This attaches the 'proper' user callback function */
+  g_signal_connect(G_OBJECT(combo), "changed", callbackFunc, data);
+}
+
+
+/* This creates a single color item on the edit-residue-colors dialog */
+static void createResidueColorBox(GtkTable *table, 
+                                  char *residue,
+                                  GString *groups[],
+                                  int *row, 
+                                  int *col,
+                                  const int xpad,
+                                  const int ypad)
+{
+  /* Create the label */
+  GtkWidget *label = gtk_label_new(residue);
+  gtk_table_attach(table, label, *col, *col + 1, *row, *row + 1, GTK_SHRINK, GTK_SHRINK, xpad, ypad);
+  
+  /* Create the color chooser. First get the current color for this residue */
+  const int colorNum = getColor(*residue);
+  createColorButton(colorNum, table, *row, *col + 1, xpad, ypad, G_CALLBACK(updateColorResidue), residue);
+  
+  /* Append this residue to the group for this color */
+//to do:  g_string_append(groups[colorNum], residue);
+  
+  *row += 1;
+}
+
+
+/* Utility function to create the list of residues that belvu knows about */
+static GSList* createResidueList()
+{
+  GSList *list = NULL;
+  
+  list = g_slist_prepend(list, g_strdup("V"));
+  list = g_slist_prepend(list, g_strdup("Y"));
+  list = g_slist_prepend(list, g_strdup("W"));
+  list = g_slist_prepend(list, g_strdup("T"));
+  list = g_slist_prepend(list, g_strdup("S"));
+  list = g_slist_prepend(list, g_strdup("P"));
+  list = g_slist_prepend(list, g_strdup("F"));
+  list = g_slist_prepend(list, g_strdup("M"));
+  list = g_slist_prepend(list, g_strdup("K"));
+  list = g_slist_prepend(list, g_strdup("L"));
+  list = g_slist_prepend(list, g_strdup("I"));
+  list = g_slist_prepend(list, g_strdup("H"));
+  list = g_slist_prepend(list, g_strdup("G"));
+  list = g_slist_prepend(list, g_strdup("E"));
+  list = g_slist_prepend(list, g_strdup("Q"));
+  list = g_slist_prepend(list, g_strdup("C"));
+  list = g_slist_prepend(list, g_strdup("D"));
+  list = g_slist_prepend(list, g_strdup("N"));
+  list = g_slist_prepend(list, g_strdup("R"));
+  list = g_slist_prepend(list, g_strdup("A"));
+  
+  return list;
+}
+
+
+/* Create the colour boxes for the edit-residue-colors dialog */
+static void createResidueColorBoxes(GtkBox *box, GSList *residueList, GString *groups[])
+{
+  const int numRows = 10;
+  const int numCols = 7;
+  int xpad = 4;
+  int ypad = TABLE_YPAD;
+  
+  GtkTable *table = GTK_TABLE(gtk_table_new(numRows, numCols, FALSE));
+  gtk_box_pack_start(box, GTK_WIDGET(table), FALSE, FALSE, 0);
+  
+  int row = 0;
+  int col = 0;
+  
+  int i = 0;
+  GSList *residueItem = residueList;
+  const int numResidues = g_slist_length(residueList);
+  
+  for ( ; residueItem && i < numResidues / 2; ++i, residueItem = residueItem->next)
+    {
+      createResidueColorBox(table, (char*)(residueItem->data), groups, &row, &col, xpad, ypad);
+    }
+
+  GtkWidget *spacer = gtk_label_new(" ");
+  gtk_table_attach(table, spacer, col + 3, col + 4, row, row + 1, GTK_SHRINK, GTK_SHRINK, 30, ypad);
+
+  col += 4;
+  row = 0;
+
+  for ( ; residueItem; residueItem = residueItem->next)
+    {
+      createResidueColorBox(table, (char*)(residueItem->data), groups, &row, &col, xpad, ypad);
+    }
+}
+
+
+/* Create the content for the edit-residue-colors dialog */
+static void createEditResidueContent(GtkBox *box)
+{
+  GtkBox *vbox = GTK_BOX(gtk_vbox_new(FALSE, 0));
+  gtk_box_pack_start(box, GTK_WIDGET(vbox), TRUE, TRUE, 0);
+  
+  static GSList *residueList = NULL;
+  
+  if (!residueList)
+    residueList = createResidueList();
+  
+//  GString* groups[NUM_TRUECOLORS];
+//  int i = 0;
+//  for (i = 0; i < NUM_TRUECOLORS; ++i)
+//    groups[i] = g_string_new("");
+  
+  createResidueColorBoxes(vbox, residueList, NULL);
+  
+  
+//  GtkTable *table = GTK_TABLE(gtk_table_new(g_slist_length(residueList) + 1, 3, FALSE));
+//  gtk_box_pack_start(vbox, GTK_WIDGET(table), TRUE, TRUE, 0);
+//  int row = 0;
+//  const int xpad = TABLE_XPAD;
+//  const int ypad = TABLE_YPAD;
+//  
+//  GtkWidget *header = gtk_label_new("Groups:");
+//  gtk_table_attach(table, header, 0, 1, row, row + 1, GTK_SHRINK, GTK_SHRINK, xpad, ypad);
+//  ++row;
+//  
+//  for (i = 0; i < NUM_TRUECOLORS; ++i)
+//    {
+//      if (groups[i]->len > 0 && groups[i]->str)
+//        {
+//          GdkColor color;
+//          convertColorNumToGdkColor(i, FALSE, &color);
+//          
+//          GtkWidget *eventBox = gtk_event_box_new();
+//          gtk_widget_modify_bg(eventBox, GTK_STATE_NORMAL, &color);
+//          gtk_table_attach(table, eventBox, 0, 1, row, row + 1, GTK_FILL, GTK_SHRINK, xpad, ypad);
+//          
+//          GtkWidget *label = gtk_label_new(getColorNumName(i));
+//          gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.0);
+//          gtk_container_add(GTK_CONTAINER(eventBox), label);
+//          
+//          gtk_table_attach(table, gtk_label_new(":"), 1, 2, row, row + 1, GTK_FILL, GTK_SHRINK, xpad, ypad);
+//
+//          label = gtk_label_new(groups[i]->str);
+//          gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.0);
+//          gtk_table_attach(table, label, 2, 3, row, row + 1, GTK_FILL, GTK_SHRINK, xpad, ypad);
+//          
+//          ++row;
+//        }
+//    }
+// 
+}
+
+
+/* Called when the user responds to the edit-residue-colors dialog */
+void onResponseEditResidueColorsDialog(GtkDialog *dialog, gint responseId, gpointer data)
+{
+  gboolean destroy = TRUE;
+  GtkWidget *belvuWindow = GTK_WIDGET(data);
+  BelvuWindowProperties *properties = belvuWindowGetProperties(belvuWindow);
+  BelvuContext *bc = properties->bc;
+  
+  switch (responseId)
+  {
+    case GTK_RESPONSE_ACCEPT:
+      if (widgetCallAllCallbacks(GTK_WIDGET(dialog), GINT_TO_POINTER(responseId)))
+        {
+          /* Save the current color set and set the color scheme to 'custom' */
+          destroy = TRUE;
+          saveCustomColors(bc);
+          setToggleMenuStatus(properties->actionGroup, "colorSchemeCustom", TRUE);
+        }
+      break;
+      
+    case GTK_RESPONSE_CANCEL:
+    case GTK_RESPONSE_REJECT:
+      /* Reset the color scheme, refresh, and close the dialog. */
+      destroy = TRUE;
+      setResidueSchemeColors(bc);
+      updateSchemeColors(bc);
+      belvuAlignmentRedrawAll(bc->belvuAlignment);
+      break;
+      
+    default:
+      break;
+  };
+  
+  if (destroy)
+    {
+      gtk_widget_hide_all(GTK_WIDGET(dialog));
+    }
+}
+
+
+/* Show a dialog to allow the user to edit the residue colors */
+static void showEditResidueColorsDialog(GtkWidget *belvuWindow, const gboolean bringToFront)
+{
+  BelvuWindowProperties *properties = belvuWindowGetProperties(belvuWindow);
+  BelvuContext *bc = properties->bc;
+  
+  const BelvuDialogId dialogId = BELDIALOG_EDIT_RESIDUE_COLORS;
+  GtkWidget *dialog = getPersistentDialog(bc->dialogList, dialogId);
+  
+  if (!dialog)
+    {
+      char *title = g_strdup_printf("%sEdit Residue Colors", belvuGetTitlePrefix(bc));
+
+      dialog = gtk_dialog_new_with_buttons(title,
+                                           GTK_WINDOW(belvuWindow), 
+                                           (GtkDialogFlags)(GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL),
+                                           GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
+                                           GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
+                                           NULL);
+
+      g_free(title);
+      
+      /* These calls are required to make the dialog persistent... */
+      addPersistentDialog(bc->dialogList, dialogId, dialog);
+      g_signal_connect(dialog, "delete-event", G_CALLBACK(gtk_widget_hide_on_delete), NULL);
+      
+      g_signal_connect(dialog, "response", G_CALLBACK(onResponseEditResidueColorsDialog), belvuWindow);
+    }
+  else
+    {
+      /* Need to refresh the dialog contents, so clear and re-create content area */
+      dialogClearContentArea(GTK_DIALOG(dialog));
+    }
+  
+  gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT);
+  
+  GtkBox *vbox = GTK_BOX(GTK_DIALOG(dialog)->vbox);
+  createEditResidueContent(vbox);
+
+  /* Show / bring to front */
+  gtk_widget_show_all(dialog);
+  
+  if (bringToFront)
+    {
+      gtk_window_present(GTK_WINDOW(dialog));
+    }
+  
+}
+
+
+
+/* Called when the user responds to the edit-conservation-colors dialog */
+void onResponseConsColorsDialog(GtkDialog *dialog, gint responseId, gpointer data)
+{
+  gboolean destroy = TRUE;
+  GtkWidget *belvuWindow = GTK_WIDGET(data);
+  BelvuWindowProperties *properties = belvuWindowGetProperties(belvuWindow);
+  BelvuContext *bc = properties->bc;
+  
+  switch (responseId)
+  {
+    case GTK_RESPONSE_ACCEPT:
+      /* Close dialog if successful */
+      destroy = widgetCallAllCallbacks(GTK_WIDGET(dialog), GINT_TO_POINTER(responseId));
+      setToggleMenuStatus(properties->actionGroup, "ColorByCons", TRUE);
+      break;
+      
+    case GTK_RESPONSE_APPLY:
+      /* Never close */
+      destroy = FALSE;
+      widgetCallAllCallbacks(GTK_WIDGET(dialog), GINT_TO_POINTER(responseId));
+      setToggleMenuStatus(properties->actionGroup, "ColorByCons", TRUE);
+      break;
+      
+    case GTK_RESPONSE_CANCEL:
+    case GTK_RESPONSE_REJECT:
+      /* Reset the color scheme. */
+      destroy = TRUE;
+      saveOrResetConsColors(bc, FALSE); /* restores old values */
+      break;
+      
+    default:
+      break;
+  };
+  
+  onColorSchemeChanged(properties);
+
+  if (destroy)
+    {
+      gtk_widget_hide_all(GTK_WIDGET(dialog));
+    }
+}
+
+
+/* Callback called when a foreground conservation color has been changed */
+static void updateConsFgColor(GtkWidget *combo, gpointer data)
+{
+  int *colorNum = (int*)data;
+  *colorNum = gtk_combo_box_get_active(GTK_COMBO_BOX(combo));
+  
+  GtkWindow *dialogWindow = GTK_WINDOW(gtk_widget_get_toplevel(combo));
+  GtkWidget *belvuWindow = GTK_WIDGET(gtk_window_get_transient_for(dialogWindow));
+  BelvuWindowProperties *properties = belvuWindowGetProperties(belvuWindow);
+  
+  onColorSchemeChanged(properties);
+}
+
+
+/* Callback called when a background conservation color has been changed */
+static void updateConsBgColor(GtkWidget *combo, gpointer data)
+{
+  int *colorNum = (int*)data;
+  *colorNum = gtk_combo_box_get_active(GTK_COMBO_BOX(combo));
+  
+  GtkWindow *dialogWindow = GTK_WINDOW(gtk_widget_get_toplevel(combo));
+  GtkWidget *belvuWindow = GTK_WIDGET(gtk_window_get_transient_for(dialogWindow));
+  BelvuWindowProperties *properties = belvuWindowGetProperties(belvuWindow);
+  
+  onColorSchemeChanged(properties);
+}
+
+/* Callback called when the user 'ok's the edit-conservation-colors dialog
+ * to set the new threshold values. The given widget must be a GtkEntry and the
+ * user data a pointer to a double. */
+static gboolean onConsThresholdChanged(GtkWidget *widget, gint responseId, gpointer data)
+{
+  GtkEntry *entry = GTK_ENTRY(widget);
+  double *val = (double*)data;
+  
+  const gchar *inputText = gtk_entry_get_text(entry);
+  *val = g_strtod(inputText, NULL);
+  
+  return TRUE;
+}
+
+
+/* Add a single line in the edit-cons-colors dialog */
+static void addConsColorLine(BelvuContext *bc, const char *labelText, const BelvuConsLevel consLevel, double *cutoff, GtkTable *table, int *row)
+{
+  /* Label */
+  GtkWidget *label = gtk_label_new(labelText);
+  gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.0);
+  gtk_table_attach(table, label, 0, 1, *row, *row + 1, GTK_FILL, GTK_SHRINK, TABLE_XPAD, TABLE_YPAD);
+  
+  /* Threshold entry box */
+  GtkWidget *entry = gtk_entry_new();
+  gtk_entry_set_activates_default(GTK_ENTRY(entry), TRUE);
+  
+  char *defaultInput = g_strdup_printf("%.1f", *cutoff);
+  gtk_entry_set_text(GTK_ENTRY(entry), defaultInput);
+  gtk_entry_set_width_chars(GTK_ENTRY(entry), strlen(defaultInput) + 2);
+  g_free(defaultInput);
+  defaultInput = NULL;
+  
+  gtk_table_attach(table, entry, 1, 2, *row, *row + 1, GTK_FILL, GTK_SHRINK, TABLE_XPAD, TABLE_YPAD);
+  widgetSetCallbackData(entry, onConsThresholdChanged, cutoff);
+  
+  /* Text color chooser */
+  int *fgColorNum = getConsColor(bc, consLevel, TRUE);
+  createColorButton(*fgColorNum, table, *row, 2, 2, TABLE_YPAD, G_CALLBACK(updateConsFgColor), fgColorNum);
+
+  /* Background color chooser */
+  int *bgColorNum = getConsColor(bc, consLevel, FALSE);
+  createColorButton(*bgColorNum, table, *row, 4, 2, TABLE_YPAD, G_CALLBACK(updateConsBgColor), bgColorNum);
+
+  *row += 1;
+}
+
+
+/* Hacky function to save the current conservation colors or reset them to
+ * previously saved values (if 'save' is false). Ideally, the drawing 
+ * functions would not use the colors in the BelvuContext directly and we'd
+ * therefore be able to show the user different colors without having to change
+ * the BelvuContext, and hence without the need for this hacky undo function. */
+static void saveOrResetConsColors(BelvuContext *bc, const gboolean save)
+{
+  /* These are all the values we need to be able to restore if the dialog
+   * is cancelled... */
+  static double lowIdCutoff = 0;
+  static double midIdCutoff = 0;
+  static double maxIdCutoff = 0;
+  static double lowSimCutoff = 0;
+  static double midSimCutoff = 0;
+  static double maxSimCutoff = 0;
+  
+  static int maxfgColor = 0;
+  static int midfgColor = 0;
+  static int lowfgColor = 0;
+  static int maxbgColor = 0;
+  static int midbgColor = 0;
+  static int lowbgColor = 0;
+  static int maxfgPrintColor = 0;
+  static int midfgPrintColor = 0;
+  static int lowfgPrintColor = 0;
+  static int maxbgPrintColor = 0;
+  static int midbgPrintColor = 0;
+  static int lowbgPrintColor = 0;  
+  if (save)
+    {
+      /* Remember the current conservation colors */
+      lowIdCutoff = bc->lowIdCutoff;
+      midIdCutoff = bc->midIdCutoff;
+      maxIdCutoff = bc->maxIdCutoff;
+      lowSimCutoff = bc->lowSimCutoff;
+      midSimCutoff = bc->midSimCutoff;
+      maxSimCutoff = bc->maxSimCutoff;
+
+      maxfgColor = bc->maxfgColor;
+      midfgColor = bc->midfgColor;
+      lowfgColor = bc->lowfgColor;
+      maxbgColor = bc->maxbgColor;
+      midbgColor = bc->midbgColor;
+      lowbgColor = bc->lowbgColor;
+      maxfgPrintColor = bc->maxfgPrintColor;
+      midfgPrintColor = bc->midfgPrintColor;
+      lowfgPrintColor = bc->lowfgPrintColor;
+      maxbgPrintColor = bc->maxbgPrintColor;
+      midbgPrintColor = bc->midbgPrintColor;
+      lowbgPrintColor = bc->lowbgPrintColor;
+    }
+  else
+    {
+      /* Reset to the previously-saved values */
+      bc->lowIdCutoff = lowIdCutoff;
+      bc->midIdCutoff = midIdCutoff;
+      bc->maxIdCutoff = maxIdCutoff;
+      bc->lowSimCutoff = lowSimCutoff;
+      bc->midSimCutoff = midSimCutoff;
+      bc->maxSimCutoff = maxSimCutoff;
+
+      bc->maxfgColor = maxfgColor;
+      bc->midfgColor = midfgColor;
+      bc->lowfgColor = lowfgColor;
+      bc->maxbgColor = maxbgColor;
+      bc->midbgColor = midbgColor;
+      bc->lowbgColor = lowbgColor;
+      bc->maxfgPrintColor = maxfgPrintColor;
+      bc->midfgPrintColor = midfgPrintColor;
+      bc->lowfgPrintColor = lowfgPrintColor;
+      bc->maxbgPrintColor = maxbgPrintColor;
+      bc->midbgPrintColor = midbgPrintColor;
+      bc->lowbgPrintColor = lowbgPrintColor;
+    }
+}
+
+
+/* Create the content for the edit-conservation-color-scheme dialog */
+static void createEditConsColorsContent(GtkBox *box, BelvuContext *bc)
+{
+  /* Save current values so that we can restore them later if we cancel */
+  saveOrResetConsColors(bc, TRUE);
+  
+  /* We'll put everything in a vbox */
+  GtkBox *vbox = GTK_BOX(gtk_vbox_new(FALSE, 0));
+  gtk_box_pack_start(box, GTK_WIDGET(vbox), FALSE, FALSE, 0);
+  
+  /* Create the labels */
+  char *tmpStr = g_strdup_printf("Coloring by %s", bc->consScheme == BELVU_SCHEME_BLOSUM ? "average BLOSUM62 score" : "% identity");
+  
+  GtkWidget *label = gtk_label_new(tmpStr);
+  gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.0);
+  gtk_box_pack_start(vbox, label, FALSE, FALSE, DIALOG_YPAD);
+  
+  g_free(tmpStr);
+  tmpStr = NULL;
+
+  const gboolean colorById = (bc->consScheme == BELVU_SCHEME_ID || bc->consScheme == BELVU_SCHEME_ID_BLOSUM);
+  const gboolean colorBySim = (bc->consScheme == BELVU_SCHEME_BLOSUM || bc->consScheme == BELVU_SCHEME_ID_BLOSUM);
+  
+  if (colorBySim)
+    {
+      label = gtk_label_new("Similar residues according to BLOSUM62 are coloured as the most conserved one.");
+      gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.0);
+      gtk_box_pack_start(vbox, label, FALSE, FALSE, DIALOG_YPAD);
+    }
+  
+  /* Place the main widgets in a table */
+  GtkTable *table = GTK_TABLE(gtk_table_new(4, 6, FALSE));
+  gtk_box_pack_start(vbox, GTK_WIDGET(table), TRUE, TRUE, DIALOG_YPAD);
+  
+  /* 1st row contains labels */
+  int row = 0;
+  label = gtk_label_new("Threshold");\
+  gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.0);
+  gtk_table_attach(table, label, 1, 2, row, row + 1, GTK_FILL, GTK_SHRINK, TABLE_XPAD, TABLE_YPAD);
+
+  label = gtk_label_new("Text colour");
+  gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.0);
+  gtk_table_attach(table, label, 2, 4, row, row + 1, GTK_FILL, GTK_SHRINK, TABLE_XPAD, TABLE_YPAD);
+
+  label = gtk_label_new("Background colour");
+  gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.0);
+  gtk_table_attach(table, label, 4, 6, row, row + 1, GTK_FILL, GTK_SHRINK, TABLE_XPAD, TABLE_YPAD);
+  
+  ++row;
+  addConsColorLine(bc, "Max:", CONS_LEVEL_MAX, colorById ? &bc->maxIdCutoff : &bc->maxSimCutoff, table, &row);
+  addConsColorLine(bc, "Mid:", CONS_LEVEL_MID, colorById ? &bc->midIdCutoff : &bc->midSimCutoff, table, &row);
+  addConsColorLine(bc, "Low:", CONS_LEVEL_LOW, colorById ? &bc->lowIdCutoff : &bc->lowSimCutoff, table, &row);
+  
+  label = gtk_label_new("Press Enter or click Add to update the display after changing threshold values.");
+  gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.0);
+  gtk_box_pack_start(vbox, label, FALSE, FALSE, DIALOG_YPAD);
+
+  label = gtk_label_new("Click OK to save changes.");
+  gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.0);
+  gtk_box_pack_start(vbox, label, FALSE, FALSE, DIALOG_YPAD);
+}
+
+
+/* Show a dialog to allow the user to edit the conservation color scheme */
+static void showEditConsColorsDialog(GtkWidget *belvuWindow, const gboolean bringToFront)
+{
+  BelvuWindowProperties *properties = belvuWindowGetProperties(belvuWindow);
+  BelvuContext *bc = properties->bc;
+  
+  const BelvuDialogId dialogId = BELDIALOG_EDIT_CONS_COLORS;
+  GtkWidget *dialog = getPersistentDialog(bc->dialogList, dialogId);
+  
+  if (!dialog)
+    {
+      char *title = g_strdup_printf("%sEdit Conservation Colors", belvuGetTitlePrefix(bc));
+
+      dialog = gtk_dialog_new_with_buttons(title, 
+                                           GTK_WINDOW(belvuWindow), 
+                                           (GtkDialogFlags)(GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL),
+                                           GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
+                                           GTK_STOCK_ADD, GTK_RESPONSE_APPLY,
+                                           GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
+                                           NULL);
+
+      g_free(title);
+      
+      /* These calls are required to make the dialog persistent... */
+      addPersistentDialog(bc->dialogList, dialogId, dialog);
+      g_signal_connect(dialog, "delete-event", G_CALLBACK(gtk_widget_hide_on_delete), NULL);
+      
+      g_signal_connect(dialog, "response", G_CALLBACK(onResponseConsColorsDialog), belvuWindow);
+    }
+  else
+    {
+      /* Need to refresh the dialog contents, so clear and re-create content area */
+      dialogClearContentArea(GTK_DIALOG(dialog));
+    }
+  
+  gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_APPLY);
+  
+  GtkBox *vbox = GTK_BOX(GTK_DIALOG(dialog)->vbox);
+  createEditConsColorsContent(vbox, bc);
+  
+  /* Show / bring to front */
+  gtk_widget_show_all(dialog);
+  
+  if (bringToFront)
+    {
+      gtk_window_present(GTK_WINDOW(dialog));
+    }
+  
+}
+
+
+/***********************************************************
+ *                         Wrap window                     *
+ ***********************************************************/
+
+/* Create a text entry with a label.  'labelText' gives the label text and 
+ * defaultInput gives the default input to show in the text entry (may be null).
+ * Adds the result to table, if given, and returns the text entry widget */
+static GtkWidget* createTextEntryWithLabel(const char *labelText, 
+                                           const char *defaultInput, 
+                                           GtkTable *table,
+                                           const int col,
+                                           const int row)
+{
+  const int xpad = 2;
+  const int ypad = 2;
+  
+  /* Create the label in the given column */
+  GtkWidget *label = gtk_label_new(labelText);
+  gtk_misc_set_alignment(GTK_MISC(label), 1, 0);
+  gtk_table_attach(table, label, col, col + 1, row, row + 1, GTK_SHRINK, GTK_SHRINK, xpad, ypad);
+  
+  /* Create the entry in the next column */
+  GtkWidget *entry = gtk_entry_new();
+  gtk_entry_set_activates_default(GTK_ENTRY(entry), TRUE);
+
+  gtk_table_attach(table, entry, col + 1, col + 2, row, row + 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), GTK_SHRINK, xpad, ypad);
+  
+  if (defaultInput)
+    {
+      gtk_entry_set_text(GTK_ENTRY(entry), defaultInput);
+      const int defaultLen = min((int)strlen(defaultInput) * 8, 500);
+      gtk_widget_set_size_request(entry, defaultLen, -1);
+    }
+  
+  return entry;
+}
+
+
+/* This shows a dialog that asks the user for settings for the wrap-alignment
+ * view and then opens the wrap-alignment window on ok. */
+static void showWrapDialog(BelvuContext *bc, GtkWidget *belvuWindow)
+{
+  char *title = g_strdup_printf("%swrap alignment", belvuGetTitlePrefix(bc));
+
+  GtkWidget *dialog = gtk_dialog_new_with_buttons(title, 
+                                                  GTK_WINDOW(belvuWindow), 
+                                                  (GtkDialogFlags)(GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT),
+                                                  GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
+                                                  GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
+                                                  NULL);
+
+  g_free(title);
+  
+  gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT);
+  GtkWidget *contentArea = GTK_DIALOG(dialog)->vbox;
+
+  /* Create a text entry for the line width and title */
+  GtkWidget *table = gtk_table_new(2, 2, FALSE);
+  gtk_box_pack_start(GTK_BOX(contentArea), table, TRUE, TRUE, 0);
+  
+  GtkWidget *widthEntry = createTextEntryWithLabel("Line width", "80", GTK_TABLE(table), 0, 0);
+  GtkWidget *titleEntry = createTextEntryWithLabel("Title", bc->Title, GTK_TABLE(table), 0, 1);
+  
+  gtk_widget_show_all(dialog);
+  
+  if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
+    {
+      const gchar *inputText = gtk_entry_get_text(GTK_ENTRY(widthEntry));
+      const int linelen = convertStringToInt(inputText);
+      
+      const gchar *title = gtk_entry_get_text(GTK_ENTRY(titleEntry));
+      
+      createWrapWindow(belvuWindow, linelen, title);
+    }
+  
+  gtk_widget_destroy(dialog);
+}
+
+
+/* Utility function to return the child widget of the given container that
+ * has a cached drawable. Returns the first found (i.e. expects there to be
+ * only one).
+ * Sets the result in the user data, if found. The value of *result must be
+ * null on the first call. */
+static void widgetGetDrawing(GtkWidget *widget, gpointer data)
+{
+  GtkWidget **result = (GtkWidget**)data;
+
+  if (*result != NULL)
+    {
+      return;
+    }
+  else if (widgetGetDrawable(widget))
+    {
+      *result = widget;
+    }
+  else if (GTK_IS_CONTAINER(widget))
+    {
+      gtk_container_foreach(GTK_CONTAINER(widget), widgetGetDrawing, result);
+    }
+}
+
+
+static void setWrapWindowStyleProperties(GtkWidget *window)
+{
+  gtk_widget_set_name(window, WRAPPED_BELVU_WINDOW_NAME);
+  
+  /* Set the initial window size based on some fraction of the screen size */
+  int screenWidth = 300, screenHeight = 200;
+  gbtools::GUIGetTrueMonitorSize(window, &screenWidth, &screenHeight);
+
+  const int width = screenWidth * DEFAULT_WRAP_WINDOW_WIDTH_FRACTION;
+  const int height = screenHeight * DEFAULT_WRAP_WINDOW_HEIGHT_FRACTION;
+  gtk_window_set_default_size(GTK_WINDOW(window), width, height);
+}
+
+
+static void createWrapWindow(GtkWidget *belvuWindow, const int linelen, const gchar *title)
+{
+  BelvuWindowProperties *properties = belvuWindowGetProperties(belvuWindow);
+
+  /* Create the window */
+  GtkWidget *wrapWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+  setWrapWindowStyleProperties(wrapWindow);
+  
+  BelvuContext *bc = windowGetContext(belvuWindow);
+  char *windowTitle = g_strdup_printf("%s%s", belvuGetTitlePrefix(bc), properties->bc->Title);
+  gtk_window_set_title(GTK_WINDOW(wrapWindow), windowTitle);
+  g_free(windowTitle);
+  
+  /* We must add all toplevel windows to the list of spawned windows */
+  properties->bc->spawnedWindows = g_slist_prepend(properties->bc->spawnedWindows, wrapWindow);
+  
+  /* Create the context menu and set a callback to show it */
+  GtkActionGroup *actionGroup = NULL;
+  GtkUIManager *uiManager = createUiManager(wrapWindow, properties->bc, &actionGroup);
+  GtkWidget *contextmenu = createBelvuMenu(wrapWindow, "/WrapContextMenu", uiManager);
+  
+  gtk_widget_add_events(wrapWindow, GDK_BUTTON_PRESS_MASK);
+  g_signal_connect(G_OBJECT(wrapWindow), "button-press-event", G_CALLBACK(onButtonPressBelvu), contextmenu);
+  
+  /* We'll place everything in a vbox */
+  GtkWidget *vbox = gtk_vbox_new(FALSE, 0);
+  gtk_container_add(GTK_CONTAINER(wrapWindow), vbox);
+  
+  /* Add the alignment section */
+  GtkWidget *wrappedAlignment = createBelvuAlignment(properties->bc, title, linelen);
+  gtk_box_pack_start(GTK_BOX(vbox), wrappedAlignment, TRUE, TRUE, 0);
+  
+  /* Set properties */
+  genericWindowCreateProperties(wrapWindow, properties->bc, actionGroup);
+
+  /* Show window */
+  gtk_widget_show_all(wrapWindow);
+  gtk_window_present(GTK_WINDOW(wrapWindow));
+  
+  /* Make sure the font size is up to date */
+  onBelvuAlignmentFontSizeChanged(wrappedAlignment);
+}
+
+
+/***********************************************************
+ *                      Organisms window                   *
+ ***********************************************************/
+
+static void setOrgsWindowStyleProperties(GtkWidget *window, BelvuContext *bc)
+{
+  gtk_widget_set_name(window, BELVU_ORGS_WINDOW_NAME);
+
+  /* Set default size based on number of alignments and max name width */
+  gdouble charWidth = 0, charHeight = 0;
+  getFontCharSize(window, window->style->font_desc, &charWidth, &charHeight);
+
+  int screenWidth = 100, screenHeight = 100;
+  gbtools::GUIGetTrueMonitorSize(window, &screenWidth, &screenHeight);
+  
+  const int maxWidth = screenWidth * MAX_ORGS_WINDOW_WIDTH_FRACTION;
+  const int maxHeight = screenHeight * MAX_ORGS_WINDOW_HEIGHT_FRACTION;
+  
+  int width = min((gdouble)maxWidth, charWidth * bc->maxNameLen + ORGS_WINDOW_XPAD * 2);
+  int height = min((gdouble)maxHeight, charHeight * bc->organismArr->len + ORGS_WINDOW_YPAD * 2);
+  gtk_window_set_default_size(GTK_WINDOW(window), width, height);
+}
+
+
+/* This does the work to draw the organisms. */
+static void drawOrganisms(GtkWidget *widget, GdkDrawable *drawable, BelvuContext *bc)
+{
+  GdkGC *gc = gdk_gc_new(drawable);
+  GdkColor color;
+
+  gdouble charHeight = 0;
+  getFontCharSize(widget, widget->style->font_desc, NULL, &charHeight);
+
+  int y = ORGS_WINDOW_YPAD;
+  const int x = ORGS_WINDOW_XPAD;
+  int i = 0;
+
+  for ( ; i < (int)bc->organismArr->len; ++i) 
+    {
+      ALN *alnp = g_array_index(bc->organismArr, ALN*, i);
+    
+      convertColorNumToGdkColor(alnp->color, FALSE, &color);
+      gdk_gc_set_foreground(gc, &color);
+    
+      int text_width = 0;
+      drawText(widget, drawable, gc, x, y, alnp->organism, &text_width, NULL);
+
+      y += charHeight;
+    }
+ 
+  g_message_info("%d organisms found\n", bc->organismArr->len);
+  g_object_unref(gc);
+}
+
+
+/* Expose handler for the organisms view */
+static gboolean onExposeOrganismsView(GtkWidget *widget, GdkEventExpose *event, gpointer data)
+{
+  GdkDrawable *window = GTK_LAYOUT(widget)->bin_window;
+  BelvuContext *bc = (BelvuContext*)data;
+  
+  if (window)
+    {
+      GdkDrawable *bitmap = widgetGetDrawable(widget);
+      
+      if (!bitmap)
+	{
+	  /* There isn't a bitmap yet. Create it now. */
+          guint width = 0, height = 0;
+          gtk_layout_get_size(GTK_LAYOUT(widget), &width, &height);
+	  bitmap = createBlankSizedPixmap(widget, window, width, height);
+	  drawOrganisms(widget, bitmap, bc);
+	}
+      
+      if (bitmap)
+	{
+	  /* Push the bitmap onto the window */
+	  GdkGC *gc = gdk_gc_new(window);
+	  gdk_draw_drawable(window, gc, bitmap, 0, 0, 0, 0, -1, -1);
+	  g_object_unref(gc);
+	}
+      else
+	{
+	  g_warning("Failed to draw Organisms view [%p] - could not create bitmap.\n", widget);
+	}
+    }
+  
+  return TRUE;
+}
+
+
+static void createOrganismWindow(BelvuContext *bc)
+{
+  /* Create the window */
+  bc->orgsWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+  setOrgsWindowStyleProperties(bc->orgsWindow, bc);
+  g_signal_connect(bc->orgsWindow, "delete-event", G_CALLBACK(gtk_widget_hide_on_delete), NULL);
+  
+  char *title = g_strdup_printf("%sOrganisms", belvuGetTitlePrefix(bc));
+  gtk_window_set_title(GTK_WINDOW(bc->orgsWindow), title);
+  g_free(title);
+  
+  /* We must add all toplevel windows to the list of spawned windows */
+  bc->spawnedWindows = g_slist_prepend(bc->spawnedWindows, bc->orgsWindow);
+  
+  /* Create the context menu and set a callback to show it */
+  GtkActionGroup *actionGroup = NULL;
+  GtkUIManager *uiManager = createUiManager(bc->orgsWindow, bc, &actionGroup);
+  GtkWidget *contextmenu = createBelvuMenu(bc->orgsWindow, "/OrgsContextMenu", uiManager);
+  
+  gtk_widget_add_events(bc->orgsWindow, GDK_BUTTON_PRESS_MASK);
+  g_signal_connect(G_OBJECT(bc->orgsWindow), "button-press-event", G_CALLBACK(onButtonPressBelvu), contextmenu);
+  
+  /* Create a scrollable drawing area */
+  GtkWidget *scrollWin = gtk_scrolled_window_new(NULL, NULL);
+  gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollWin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+  gtk_container_add(GTK_CONTAINER(bc->orgsWindow), scrollWin);
+  
+  GtkWidget *drawing = gtk_layout_new(NULL, NULL);
+  gtk_container_add(GTK_CONTAINER(scrollWin), drawing);
+  g_signal_connect(G_OBJECT(drawing), "expose-event", G_CALLBACK(onExposeOrganismsView), bc);
+
+  /* Set layout size big enough to fit all organisms */
+  gdouble width = 0, height = 0;
+  getFontCharSize(drawing, drawing->style->font_desc, &width, &height);
+  width *= (bc->maxOrganismLen + 1);
+  height *= (bc->organismArr->len + 1);
+
+  /* The size is only approximate (especially the width), so add a sizeable buffer (e.g. double
+   * it). It's important the layout is not too small but doesn't matter if it's too big (because
+   * it will be in a scrollwin)  */
+  gtk_layout_set_size(GTK_LAYOUT(drawing), width * 2, height + 10);
+
+  /* Add some padding in the main window for space around the layout etc. It doesn't matter too
+   * much if this is too small because the window is resizable */
+  gtk_window_set_default_size(GTK_WINDOW(bc->orgsWindow), width * 2 + 20, height + 20) ;
+  
+  /* Set default background color */
+  GdkColor *bgColor = getGdkColor(BELCOLOR_BACKGROUND, bc->defaultColors, FALSE, FALSE);
+  gtk_widget_modify_bg(drawing, GTK_STATE_NORMAL, bgColor);
+  
+  /* Set properties */
+  genericWindowCreateProperties(bc->orgsWindow, bc, actionGroup);
+  
+  gtk_widget_show_all(bc->orgsWindow);
+  gtk_window_present(GTK_WINDOW(bc->orgsWindow));
+}
+
+
+/***********************************************************
+ *                           Updates                       *
+ ***********************************************************/
+
+void showAnnotationWindow(BelvuContext *bc)
+{
+  /* If there are no annotations, there's nothing to do */
+  if (g_slist_length(bc->annotationList) < 1) 
+    return;
+  
+  /* Loop through each annotation line */
+  GString *resultStr = g_string_new("");
+  int maxLen = 0;
+  GSList *annItem = bc->annotationList;
+  
+  for ( ; annItem; annItem = annItem->next)
+    {
+      /* Calculate the max line length */
+      const char *cp = (const char*)(annItem->data);
+      
+      if ((int)strlen(cp) > maxLen) 
+        maxLen = strlen(cp);
+      
+      /* Append this text to the string */
+      g_string_append_printf(resultStr, "%s\n", cp);
+    }
+  
+  /* Create the dialog */
+  char *title = g_strdup_printf("%sAnnotations", belvuGetTitlePrefix(bc));
+
+  GtkWidget *dialog = gtk_dialog_new_with_buttons(title, 
+                                                  NULL, 
+                                                  GTK_DIALOG_DESTROY_WITH_PARENT,
+                                                  GTK_STOCK_CLOSE, GTK_RESPONSE_ACCEPT,
+                                                  NULL);
+
+  g_free(title);
+  
+  gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_CLOSE);
+  g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(gtk_widget_destroy), NULL);
+  
+  /* Use a fixed-width font */
+  const char *fontFamily = findFixedWidthFont(dialog);
+  PangoFontDescription *fontDesc = pango_font_description_from_string(fontFamily);
+  pango_font_description_set_size(fontDesc, pango_font_description_get_size(dialog->style->font_desc));
+  
+  GtkWidget *textView = createScrollableTextView(resultStr->str, FALSE, fontDesc, FALSE, NULL, NULL, NULL);
+  gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), textView, TRUE, TRUE, 0);
+
+  const gchar *env = g_getenv(FONT_SIZE_ENV_VAR);
+  if (env)
+    widgetSetFontSizeAndCheck(dialog, convertStringToInt(env));
+
+
+  /* Set the initial size */
+  double charWidth, charHeight;
+  getFontCharSize(dialog, fontDesc, &charWidth, &charHeight);
+  int width = ((maxLen + 1) * charWidth) + scrollBarWidth();
+  int height = ((g_slist_length(bc->annotationList) + 1) * charHeight) + scrollBarWidth() + 40; /* extra fudge to allow space for buttons */
+
+  int maxWidth = 300, maxHeight = 200;
+  gbtools::GUIGetTrueMonitorSizeFraction(dialog, MAX_ANNOTATION_WINDOW_WIDTH_FRACTION, MAX_ANNOTATION_WINDOW_HEIGHT_FRACTION,
+                                  &maxWidth, &maxHeight);
+  width = min(width, maxWidth);
+  height = min(height, maxHeight);
+  
+  gtk_window_set_default_size(GTK_WINDOW(dialog), width, height);
+
+  gtk_widget_show_all(dialog);
+}
+
+
+/***********************************************************
+ *                           Updates                       *
+ ***********************************************************/
+
+
+/* Update the feedback box to show info about the currently-selected items */
+static void updateFeedbackBox(BelvuContext *bc, GtkWidget *feedbackBox)
+{
+  GString *resultStr = g_string_new("");
+  
+  char *tmpStr = NULL;
+  
+  /* If a column is selected, display the column number */
+  if (bc->selectedCol > 0)
+    {
+      tmpStr = g_strdup_printf("Column %d: ", bc->selectedCol);
+      g_string_append(resultStr, tmpStr);
+      g_free(tmpStr);
+    }
+  
+  /* If an alignment is selected, display info about it */
+  if (bc->selectedAln && alnGetSeq(bc->selectedAln))
+    {
+      char *selectedSeq = alnGetSeq(bc->selectedAln);
+      
+      tmpStr = g_strdup_printf("%s/%d-%d", bc->selectedAln->name, bc->selectedAln->start, bc->selectedAln->end);
+      g_string_append(resultStr, tmpStr);
+      g_free(tmpStr);
+      
+      /* If a column is selected, display info about the selected alignment's
+       * coord at that column position. */
+      if (bc->selectedCol > 0)
+        {
+          /* Print the char of the current sequence at the selected column */
+          tmpStr = g_strdup_printf("  %c = ", selectedSeq[bc->selectedCol - 1]);
+          g_string_append(resultStr, tmpStr);
+          g_free(tmpStr);
+          
+          /* Loop through each column before the selected column and calculate the
+           * number of gaps. Also note whether we see an asterisk in the sequence */
+          gboolean hasAsterisk = FALSE;
+          int numGaps = 0;
+          int colIdx = 0;
+          
+          for ( ; colIdx < bc->selectedCol; colIdx++)
+            {
+              if (isGap(selectedSeq[colIdx])) 
+                numGaps++;
+              else if (selectedSeq[colIdx] == '*') 
+                hasAsterisk = TRUE;
+            }
+          
+          if (hasAsterisk)
+            {
+              g_string_append(resultStr, "(unknown position due to insertion)");
+            }
+          else
+            {
+              tmpStr = g_strdup_printf("%d", bc->selectedCol - 1 + bc->selectedAln->start - numGaps);
+              g_string_append(resultStr, tmpStr);
+              g_free(tmpStr);
+            }
+        }
+      
+      /* Display the total number of highlighted alignments */
+      const int numHighlighted = g_slist_length(bc->highlightedAlns);
+      
+      tmpStr = g_strdup_printf(" (%d match", numHighlighted);
+      g_string_append(resultStr, tmpStr);
+      g_free(tmpStr);
+      
+      if (numHighlighted != 1)
+        g_string_append(resultStr, "es");
+      
+      g_string_append(resultStr, ")");
+    }
+  
+  gtk_entry_set_text(GTK_ENTRY(feedbackBox), resultStr->str);
+  
+  g_string_free(resultStr, TRUE);
+}
+
+
+/* This should be called whenever the selected sequence has changed */
+void onRowSelectionChanged(BelvuContext *bc)
+{
+  /* Redraw the alignment widget */
+  belvuAlignmentRedrawAll(bc->belvuAlignment);
+  centerHighlighted(bc, bc->belvuAlignment);
+  
+  /* Redraw all of the trees */
+  g_slist_foreach(bc->spawnedWindows, belvuTreeRedrawAll, NULL);
+  
+  /* Set the status of the 'exclude highlighted' toggle menu option
+   * depending on whether the newly-selected sequence is selected or not
+   * (or grey it out if nothing is selected) */
+  BelvuWindowProperties *properties = belvuWindowGetProperties(bc->belvuWindow);
+  enableMenuAction(properties->actionGroup, "excludeHighlighted", bc->selectedAln != NULL);
+  
+  if (bc->selectedAln)
+    {
+      setToggleMenuStatus(properties->actionGroup, "excludeHighlighted", bc->selectedAln->nocolor);
+
+      /* Copy the selected sequence name to the PRIMARY clipboard */
+      setPrimaryClipboardText(bc->selectedAln->name);
+    }
+
+  /* Highlight any alignments that have the same name as the selected alignment */
+  g_slist_free(bc->highlightedAlns); /* clear current list */
+  bc->highlightedAlns = NULL;
+
+  int i = 0;
+  for (i = 0; i < (int)bc->alignArr->len; ++i)
+    {
+      ALN *alnp = g_array_index(bc->alignArr, ALN*, i);
+
+      if (alignmentHighlighted(bc, alnp))
+        bc->highlightedAlns = g_slist_prepend(bc->highlightedAlns, alnp);
+    }
+
+  /* Update the feedback box */
+  updateFeedbackBox(properties->bc, properties->feedbackBox);
+  
+  /* If the current sort method is by similarity/id to the selected sequence,
+   * this has effectively been 'invalidated' by the fact that the selected
+   * sequence has changed. We don't undo the sort, but we must set the sort
+   * method to 'unsorted' so that the user can re-select the sort-by-sim/sort-by-id
+   * radio button if they want to sort by similarity/id to the newly-selected sequence */
+  setRadioMenuStatus(properties->actionGroup, "unsorted", BELVU_UNSORTED);
+}
+
+
+/* This should be called whenever the selected column has changed */
+void onColSelectionChanged(BelvuContext *bc)
+{
+  /* Update the feedback box */
+  BelvuWindowProperties *properties = belvuWindowGetProperties(bc->belvuWindow);
+  updateFeedbackBox(properties->bc, properties->feedbackBox);
+  
+  /* Refresh the alignment widget */
+  belvuAlignmentRefreshAll(bc->belvuAlignment);
+}
+
+
+/* This is called after a tree has changed */
+void onTreeOrderChanged(BelvuContext *bc)
+{
+  /* If sorting by tree order, we need to refresh the sort order */
+  if (bc->sortType == BELVU_SORT_TREE)
+    doSort(bc, bc->sortType, FALSE);
+
+  /* Recenter on the highlighted alignment */
+  centerHighlighted(bc, bc->belvuAlignment);
+
+  /* Redraw the tree and the alignment list */
+  belvuTreeRedrawAll(bc->belvuTree, NULL);
+  belvuAlignmentRedrawAll(bc->belvuAlignment);
+}
+
+
+/***********************************************************
+ *                         Key handlers                    *
+ ***********************************************************/
+
+static gboolean onKeyPressEscape(BelvuContext *bc)
+{
+  if (bc->removingSeqs)
+    {
+      /* Cancel 'removing sequences' mode */
+      BelvuWindowProperties *properties = belvuWindowGetProperties(bc->belvuWindow);
+      setToggleMenuStatus(properties->actionGroup, "rmMany", !bc->removingSeqs);
+    }
+  
+  return TRUE;
+}
+
+static gboolean onKeyPressHomeEnd(BelvuContext *bc, const gboolean home, const gboolean ctrl, const gboolean shift)
+{
+  /* Scroll to the top/bottom of the alignment list */
+  vScrollStartEnd(bc->belvuAlignment, home);
+  return TRUE;
+}
+
+static gboolean onKeyPressPageUpDown(BelvuContext *bc, const gboolean up, const gboolean ctrl, const gboolean shift)
+{
+  /* Scroll to the top/bottom of the alignment list */
+  vScrollPageUpDown(bc->belvuAlignment, up);
+  return TRUE;
+}
+
+static gboolean onKeyPressLeftRight(BelvuContext *bc, const gboolean left, const gboolean ctrl, const gboolean shift)
+{
+  if (ctrl)
+    {
+      /* Scroll one character left/right */
+      hScrollLeftRight(bc->belvuAlignment, left, 1);
+    }
+  else
+    {
+      /* Scroll to the top/bottom of the alignment list */
+      hScrollPageLeftRight(bc->belvuAlignment, left);
+    }
+  
+  return TRUE;
+}
+
+static gboolean onKeyPressUpDown(BelvuContext *bc, const gboolean up, const gboolean ctrl, const gboolean shift)
+{
+  if (ctrl)
+    {
+      /* Scroll one row up/down */
+      vScrollUpDown(bc->belvuAlignment, up, 1);
+    }
+  else
+    {
+      /* Scroll one page up/down */
+      vScrollPageUpDown(bc->belvuAlignment, up);
+    }
+  
+  return TRUE;
+}
+
+static gboolean onKeyPressCommaPeriod(BelvuContext *bc, const gboolean comma, const gboolean ctrl, const gboolean shift)
+{
+  if (ctrl)
+    {
+      if (shift) /* scroll to very start/end */
+        hScrollStartEnd(bc->belvuAlignment, comma);
+      else
+        hScrollPageLeftRight(bc->belvuAlignment, comma); /* Scroll left/right by one page */
+    }
+  else
+    {
+      /* Scroll left/right by one character */
+      hScrollLeftRight(bc->belvuAlignment, comma, 1);
+    }
+  
+  return TRUE;
+}
+
+static gboolean onKeyPressInsDel(BelvuContext *bc, const gboolean insert, const gboolean ctrl, const gboolean shift)
+{
+  /* Scroll to the leftmost/rightmost extent of the display */
+  hScrollStartEnd(bc->belvuAlignment, insert);
+  return TRUE;
+}
+
+static gboolean onKeyPressPlusMinus(BelvuContext *bc, const gboolean plus, const gboolean ctrl, const gboolean shift)
+{
+  /* Zoom in/out */
+  if (plus)
+    incrementFontSize(bc);
+  else
+    decrementFontSize(bc);
+    
+  return TRUE;
+}
+
+
+/***********************************************************
+ *                           Events                        *
+ ***********************************************************/
+
+/* Key press handler */
+gboolean onKeyPressBelvu(GtkWidget *window, GdkEventKey *event, gpointer data)
+{
+  gboolean handled = FALSE;
+  
+  BelvuContext *bc = (BelvuContext*)data;
+
+  const gboolean ctrl = (event->state & GDK_CONTROL_MASK) == GDK_CONTROL_MASK;	
+  const gboolean shift = (event->state & GDK_SHIFT_MASK) == GDK_SHIFT_MASK;	
+  
+  switch (event->keyval)
+    {
+      case GDK_Escape:    handled = onKeyPressEscape(bc);                          break;
+        
+      case GDK_Home:      handled = onKeyPressHomeEnd(bc, TRUE, ctrl, shift);      break;
+      case GDK_End:       handled = onKeyPressHomeEnd(bc, FALSE, ctrl, shift);     break;
+      case GDK_Page_Up:   handled = onKeyPressPageUpDown(bc, TRUE, ctrl, shift);   break;
+      case GDK_Page_Down: handled = onKeyPressPageUpDown(bc, FALSE, ctrl, shift);  break;
+        
+      case GDK_Left:      handled = onKeyPressLeftRight(bc, TRUE, ctrl, shift);    break;
+      case GDK_Right:     handled = onKeyPressLeftRight(bc, FALSE, ctrl, shift);   break;
+      case GDK_Up:        handled = onKeyPressUpDown(bc, TRUE, ctrl, shift);       break;
+      case GDK_Down:      handled = onKeyPressUpDown(bc, FALSE, ctrl, shift);      break;
+        
+      case GDK_less:      /* fall through */
+      case GDK_comma:     handled = onKeyPressCommaPeriod(bc, TRUE, ctrl, shift);  break;
+      case GDK_greater:   /* fall through */
+      case GDK_period:    handled = onKeyPressCommaPeriod(bc, FALSE, ctrl, shift); break;
+        
+      case GDK_Insert:    handled = onKeyPressInsDel(bc, TRUE, ctrl, shift);       break;
+      case GDK_Delete:    handled = onKeyPressInsDel(bc, FALSE, ctrl, shift);      break;
+
+      case GDK_plus:      /* fall through */
+      case GDK_equal:     handled = onKeyPressPlusMinus(bc, TRUE, ctrl, shift);    break;
+      case GDK_minus:     /* fall through */
+      case GDK_underscore: handled = onKeyPressPlusMinus(bc, FALSE, ctrl, shift);  break;
+
+      default: break;
+    };
+  
+  return handled;
+}
+
+
+/* Mouse button handler */
+gboolean onButtonPressBelvu(GtkWidget *window, GdkEventButton *event, gpointer data)
+{
+  gboolean handled = FALSE;
+  
+  if (event->type == GDK_BUTTON_PRESS && event->button == 3) /* right click */
+    {
+      /* For the main window, if we're removing sequences, then just cancel that mode. 
+       * Otherwise (and for any other window type) show the context menu. */
+      if (stringsEqual(gtk_widget_get_name(window), MAIN_BELVU_WINDOW_NAME, TRUE))
+	{
+	  BelvuWindowProperties *properties = belvuWindowGetProperties(window);
+	  if (properties->bc->removingSeqs)
+	    {
+              setToggleMenuStatus(properties->actionGroup, "rmMany", !properties->bc->removingSeqs);
+	      handled = TRUE;
+	    }
+	}
+
+      if (!handled)
+	{
+	  GtkMenu *contextMenu = GTK_MENU(data);
+	  gtk_menu_popup (contextMenu, NULL, NULL, NULL, NULL, event->button, event->time);
+	  handled = TRUE;
+	}
+    }
+  
+  return handled;
+}
+
+
+/***********************************************************
+ *                      Initialisation                     *
+ ***********************************************************/
+
+static GtkWidget* createFeedbackBox(GtkToolbar *toolbar)
+{
+  /* Bit of a hack, but add some space before the feedback box, just
+   * to avoid the toolbar being too cluttered. */
+  addToolbarWidget(toolbar, gtk_label_new("    "), -1);
+  
+  GtkWidget *feedbackBox = gtk_entry_new();
+  
+  /* User can copy text out but not edit contents */
+  gtk_editable_set_editable(GTK_EDITABLE(feedbackBox), FALSE);
+  
+  GtkToolItem *item = addToolbarWidget(toolbar, feedbackBox, -1);
+  gtk_tool_item_set_expand(item, TRUE); 
+  
+  /* We want the box to be printed, so connect the expose function that will 
+   * draw to a pixmap for printing */
+  g_signal_connect(G_OBJECT(feedbackBox), "expose-event", G_CALLBACK(onExposePrintable), NULL);
+  
+  return feedbackBox;
+}
+
+
+/* Set various properties for the main belvu window components */
+static void setStyleProperties(GtkWidget *window, GtkToolbar *toolbar)
+{
+  /* Set the initial window size based on some fraction of the screen size */
+  int width = 300, height = 200;
+  gbtools::GUIGetTrueMonitorSizeFraction(window, DEFAULT_BELVU_WINDOW_WIDTH_FRACTION, DEFAULT_BELVU_WINDOW_HEIGHT_FRACTION,
+                                  &width, &height);
+
+  gtk_window_set_default_size(GTK_WINDOW(window), width, height);
+  
+  gtk_container_set_border_width (GTK_CONTAINER(window), DEFAULT_WINDOW_BORDER_WIDTH); 
+  gtk_window_set_mnemonic_modifier(GTK_WINDOW(window), GDK_MOD1_MASK); /* MOD1 is ALT on most systems */
+  
+    /* Set toolbar style properties */
+  gtk_toolbar_set_style(toolbar, GTK_TOOLBAR_ICONS);
+  gtk_toolbar_set_icon_size(toolbar, GTK_ICON_SIZE_SMALL_TOOLBAR);
+}
+
+
+gboolean createBelvuWindow(BelvuContext *bc, BlxMessageData *msgData)
+{
+  gboolean ok = TRUE;
+  
+  GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+  gtk_widget_set_name(window, MAIN_BELVU_WINDOW_NAME);
+
+  /* Set a pointer to the main window in the context */
+  bc->belvuWindow = window;
+
+  /* Set the title */
+  char *title = g_strdup_printf("%s%s", belvuGetTitlePrefix(bc), bc->Title);
+  gtk_window_set_title(GTK_WINDOW(window), title);
+  g_free(title);
+  
+  /* Create the status bar */
+  GtkWidget *statusBar = gtk_statusbar_new();
+  gtk_statusbar_set_has_resize_grip(GTK_STATUSBAR(statusBar), TRUE);
+  setStatusBarShadowStyle(statusBar, "GTK_SHADOW_NONE");
+  gtk_statusbar_set_has_resize_grip(GTK_STATUSBAR(statusBar), FALSE);
+
+  /* Set the window and statusbar in the message handler data, now that we know them */
+  msgData->parent = GTK_WINDOW(window);
+  msgData->statusBar = GTK_STATUSBAR(statusBar);
+
+  /* Create the menu and toolbar */
+  GtkActionGroup *actionGroup = NULL;
+  GtkUIManager *uiManager = createUiManager(window, bc, &actionGroup);
+  
+  GtkWidget *menubar = createBelvuMenu(window, "/MenuBar", uiManager);
+  GtkWidget *contextmenu = createBelvuMenu(window, "/ContextMenu", uiManager);
+  GtkWidget *toolbar = createBelvuMenu(window, "/Toolbar", uiManager);
+  
+  addToolbarWidget(GTK_TOOLBAR(toolbar), gtk_label_new("    "), 0); /* hacky way to add some space at start of toolbar */
+
+  /* Create the feedback box on the toolbar */
+  GtkWidget *feedbackBox = createFeedbackBox(GTK_TOOLBAR(toolbar));
+  
+  /* Set the style properties */
+  setStyleProperties(window, GTK_TOOLBAR(toolbar));
+
+  /* Create the alignment section. Store it in the context so that we can update it. */
+  bc->belvuAlignment = createBelvuAlignment(bc, NULL, UNSET_INT);
+  
+  /* We'll put everything in a vbox */
+  GtkWidget *vbox = gtk_vbox_new(FALSE, 0);
+  gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(vbox));
+
+  /* Put the menu and toolbar on the same row using an hbox */
+  GtkWidget *hbox = gtk_hbox_new(FALSE, 0);
+  gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
+  gtk_box_pack_start(GTK_BOX(hbox), menubar, FALSE, FALSE, 0);
+  gtk_box_pack_start(GTK_BOX(hbox), toolbar, TRUE, TRUE, 0);
+  
+  gtk_box_pack_start(GTK_BOX(vbox), bc->belvuAlignment, TRUE, TRUE, 0);
+  gtk_box_pack_start(GTK_BOX(vbox), statusBar, FALSE, FALSE, 0);
+
+  /* Connect signals */
+  gtk_widget_add_events(window, GDK_BUTTON_PRESS_MASK);
+  gtk_widget_add_events(window, GDK_KEY_PRESS_MASK);
+  g_signal_connect(G_OBJECT(window), "button-press-event", G_CALLBACK(onButtonPressBelvu), contextmenu);
+  g_signal_connect(G_OBJECT(window), "key-press-event", G_CALLBACK(onKeyPressBelvu), bc);
+
+  belvuWindowCreateProperties(window, bc, statusBar, feedbackBox, actionGroup);
+
+  /* Set the default cursor (can only get the window's cursor after window is shown) */
+  bc->defaultCursor = NULL;
+
+  /* Show the main window (unless we only want the tree) */
+  if (!bc->onlyTree)
+    gtk_widget_show_all(window);
+  
+  /* If the BELVU_FONT_SIZE environment variable is set, we'll use it to set the
+   * default font size for all the widgets. */
+  const gchar *env = g_getenv(FONT_SIZE_ENV_VAR);
+  
+  if (env)
+    {
+      if (bc->belvuWindow)
+        widgetSetFontSizeAndCheck(bc->belvuWindow, convertStringToInt(env));
+
+      if (bc->belvuTree)
+        widgetSetFontSizeAndCheck(bc->belvuTree, convertStringToInt(env));
+    }
+
+  env = g_getenv(STATUSBAR_SIZE_ENV_VAR);
+  if (env)
+    {
+      const int height = convertStringToInt(env);
+      
+      /* If too small, hide the statusbar */
+      if (height < MIN_FONT_SIZE)
+        gtk_widget_hide_all(statusBar);
+      else
+        widgetSetFontSizeAndCheck(statusBar, height);
+    }
+
+  /* Make sure the alignment font size isup to date. Note: do this before
+   * creating the tree, because the tree flushes all pending gtk calls and 
+   * we must update the font size before the alignment is realised. */
+  onBelvuAlignmentFontSizeChanged(bc->belvuAlignment);
+
+  /* Show the tree on startup, if requested */
+  if (bc->initTree)
+    {
+      createAndShowBelvuTree(bc, TRUE);
+      onBelvuTreeFontSizeChanged(bc->belvuTree);
+    }
+  
+  if (!bc->onlyTree)
+    {
+      gtk_window_present(GTK_WINDOW(window));
+      
+      if (bc->sortType)
+        setRadioMenuStatus(actionGroup, "unsorted", bc->sortType);
+      
+      setToggleMenuStatus(actionGroup, "displayColors", bc->displayColors);
+
+      if (bc->schemeType == BELVU_SCHEME_TYPE_RESIDUE)
+        setRadioMenuStatus(actionGroup, "colorSchemeStandard", bc->residueScheme);
+      else
+        setRadioMenuStatus(actionGroup, "colorSchemeStandard", bc->consScheme);
+      
+      if (bc->initTree)
+        belvuAlignmentRedrawAll(bc->belvuAlignment); /* redraw, because tree creation removes markup which can mess this up */
+    }
+  
+  return ok;
+}
diff --git a/belvuApp/belvuWindow.hpp b/belvuApp/belvuWindow.hpp
new file mode 100644
index 0000000..dfc8a24
--- /dev/null
+++ b/belvuApp/belvuWindow.hpp
@@ -0,0 +1,61 @@
+/*  File: belvuWindow.h
+ *  Author: Gemma Barson, 2011-04-11
+ *  Copyright (c) 2011 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: The main Belvu window
+ *----------------------------------------------------------------------------
+ */
+
+#ifndef _belvuwindow_h_included_
+#define _belvuwindow_h_included_
+
+#include <belvuApp/belvu_.hpp>
+#include <gtk/gtk.h>
+
+gboolean              createBelvuWindow(BelvuContext *bc, BlxMessageData *msgData);
+void                  showAnnotationWindow(BelvuContext *bc);
+
+GtkUIManager*         createUiManager(GtkWidget *window, BelvuContext *bc, GtkActionGroup **actionGroupOut);
+GtkWidget*            createBelvuMenu(GtkWidget *window, const char *path, GtkUIManager *ui_manager);
+
+GtkActionGroup*       belvuWindowGetActionGroup(GtkWidget *belvuWindow);
+
+gboolean              onButtonPressBelvu(GtkWidget *window, GdkEventButton *event, gpointer data);
+
+void                  onRowSelectionChanged(BelvuContext *bc);
+void                  onColSelectionChanged(BelvuContext *bc);
+void                  onTreeOrderChanged(BelvuContext *bc);
+
+void                  incrementFontSize(BelvuContext *bc);
+void                  decrementFontSize(BelvuContext *bc);
+
+#endif /* _belvuwindow_h_included_ */
diff --git a/belvuApp/belvu_.hpp b/belvuApp/belvu_.hpp
new file mode 100644
index 0000000..93e6bd4
--- /dev/null
+++ b/belvuApp/belvu_.hpp
@@ -0,0 +1,577 @@
+/*  File: belvu_.h
+ *  Author: Gemma Barson, 2011-03-06
+ *  Copyright (c) 2011 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: Internal header for Belvu package-wide code
+ *----------------------------------------------------------------------------
+ */
+
+#ifndef DEF_BELVU_P_H
+#define DEF_BELVU_P_H
+
+#include "seqtoolsUtils/utilities.hpp"
+#include "seqtoolsUtils/blxmsp.hpp"
+#include "seqtoolsUtils/version.hpp"
+#include <sys/param.h>
+#include <gtk/gtk.h>
+#include <config.h>
+
+
+/*            blixem program version and information.                        */
+#define BELVU_TITLE   "Belvu"
+#define BELVU_PREFIX  "Belvu - " /* window title prefix */
+#define BELVU_PREFIX_ABBREV  "Bv: " /* abbreviated window title prefix */
+#define BELVU_DESC    "Multiple alignment visualisation tool."
+
+/* The Seqtools package version should be specified in src/version.m4. autoconf will then set PACKAGE_VERSION in config.h */
+#define BELVU_VERSION_STRING	   SEQTOOLS_VERSION
+#define BELVU_PACKAGE_VERSION	   UT_MAKE_VERSION_INFO_STRING(PACKAGE_NAME, SEQTOOLS_VERSION)
+#define BELVU_TITLE_STRING	   UT_MAKE_TITLE_STRING(BELVU_TITLE, BELVU_VERSION_STRING)
+#define BELVU_VERSION_COMPILE	   BELVU_VERSION_STRING "  " UT_MAKE_COMPILE_DATE()
+
+#define BELVU_COPYRIGHT_STRING	   UT_MAKE_COPYRIGHT_STRING("2011-2015")
+#define BELVU_WEBSITE_STRING	   "http://www.sanger.ac.uk/resources/software/seqtools/"
+#define BELVU_LICENSE_STRING	   UT_MAKE_LICENCE_STRING(BELVU_TITLE)
+
+
+#define DEFAULT_BELVU_WINDOW_WIDTH_FRACTION     0.95   /* default width of belvu window (as fraction of screen width) */
+#define DEFAULT_BELVU_WINDOW_HEIGHT_FRACTION    0.45   /* default height of belvu window (as fraction of screen height) */
+#define DIALOG_XPAD                             12      /* default x padding around dialog widgets */
+#define DIALOG_YPAD                             8       /* default y padding around dialog widgets */
+#define MAX_PIXMAP_WIDTH                        15000 /* max width in pixels of a pixmap */
+#define MAX_PIXMAP_HEIGHT                       15000 /* max width in pixels of a pixmap */
+#define FONT_SIZE_ENV_VAR                       "BELVU_FONT_SIZE"  /* optional environment variable to specify the default font size in points */
+#define STATUSBAR_SIZE_ENV_VAR                  "BELVU_STATUSBAR_SIZE"  /* optional environment variable to specify the font size for the statusbar in points */
+
+
+
+/* _MAX_PATH is 260 in WIN32 but each path component can be max. 256 in size */
+#define FIL_BUFFER_SIZE 256
+#define DIR_BUFFER_SIZE MAXPATHLEN
+
+#define MAXNAMESIZE  256
+#define MAXLENGTH 100000
+
+
+#define UPGMAstr "UPGMA"
+#define NJstr "NJ"
+
+#define SWAPstr "Swap"
+#define ROOTstr "Reroot"
+
+#define UNCORRstr "Uncorrected differences"
+#define KIMURAstr "Kimura correction"
+#define JUKESCANTORstr "Jukes-Cantor correction"
+#define STORMSONNstr "Storm & Sonnhammer correction"
+#define SCOREDISTstr "Scoredist correction"
+
+#define NOCOLOR -1
+#define NN NOCOLOR
+#define BG WHITE
+#define BOXCOLOR  WHITE /* LIGHTGRAY */
+
+
+/* List of color ids. Must be kept in sync with colorNames in belvu.c */
+enum Colour    
+{
+  WHITE, BLACK, LIGHTGRAY, DARKGRAY,
+  RED, GREEN, BLUE,
+  YELLOW, CYAN, MAGENTA,
+  LIGHTRED, LIGHTGREEN, LIGHTBLUE,
+  DARKRED, DARKGREEN, DARKBLUE,
+  PALERED, PALEGREEN, PALEBLUE,
+  PALEYELLOW, PALECYAN, PALEMAGENTA,
+  BROWN, ORANGE, PALEORANGE,
+  PURPLE, VIOLET, PALEVIOLET,
+  GRAY, PALEGRAY,
+  CERISE, MIDBLUE,
+  NUM_TRUECOLORS,
+  TRANSPARENT,	/* pseudocolour only for background */
+  FORECOLOR,	/* pseudocolor to force box->fcol after graphColor() */
+  BACKCOLOR	/* pseudocolor to force box->bcol after graphColor() */
+};
+
+
+enum { MUL, RAW };		/* Input formats for IN_FORMAT */
+enum { dummy, GF, GC, GS, GR };	/* Markup types in Stockholm format */
+
+
+/* Define the different file formats that belvu supports. This list
+ * must be kept in sync with fileFormatNames in belvu.c */
+typedef enum _BelvuFileFormat
+{
+  BELVU_FILE_MUL,		/* Stockholm or selex file format */
+  BELVU_FILE_MSF,		/* MSF file format */
+  BELVU_FILE_ALIGNED_FASTA,	/* Aligned FASTA file format */
+  BELVU_FILE_UNALIGNED_FASTA,	/* Unaligned FASTA file format */
+  
+  BELVU_NUM_FILE_FORMATS	/* must be last in list */
+} BelvuFileFormat;  
+
+
+/* Tree picking methods */
+typedef enum _BelvuPickMode
+{
+  NODESWAP,
+  NODEROOT
+} BelvuPickMode;
+
+
+/* Tree building methods */
+typedef enum _BelvuBuildMethod
+{
+  UPGMA,
+  NJ
+} BelvuBuildMethod;
+
+
+/* Distance correction methods for tree building */
+typedef enum _BelvuDistCorr
+{
+  UNCORR,
+  KIMURA,
+  STORMSONN,
+  SCOREDIST,
+  JUKESCANTOR
+} BelvuDistCorr; 
+
+
+/* The following are used to define default colors for certain types of features in Belvu.
+ * One of several different actual colors from the BlxColor struct may be used depending 
+ * on state, e.g. we use a different color if "print colors" (i.e. black and 
+ * white mode) is on. */
+typedef enum _BelvuColorId
+  {
+    BELCOLOR_MIN,                             /* dummy value so that we don't get a zero ID */
+    
+    BELCOLOR_BACKGROUND,                      /* default background color for general widgets */
+    BELCOLOR_ALIGN_TEXT,                      /* text color for alignments */
+    BELCOLOR_COLUMN_HIGHLIGHT,                /* highlight colour for the currently-selected column */
+    
+    BELCOLOR_TREE_BACKGROUND,                 /* background color for trees */
+    BELCOLOR_TREE_LINE,                       /* default line color for the tree */
+    BELCOLOR_TREE_TEXT,                       /* default text color for the tree */
+    BELCOLOR_TREE_BOOTSTRAP,
+    BELCOLOR_CONS_PLOT,                       /* line color of the plot on the conservation profile */
+    BELCOLOR_CONS_PLOT_AVG,                   /* line color of the average line on the conservation plot */
+    BELCOLOR_CONS_PLOT_SCALE,                 /* line color of the scale for the conservation plot */
+
+    BELCOLOR_NUM_COLORS
+  } BelvuColorId;
+
+
+/* This defines the possible sort orders */
+typedef enum _BelvuSortType
+  {
+    BELVU_UNSORTED,	       /* Not sorted */
+  
+    BELVU_SORT_SCORE,          /* Sort by score */
+    BELVU_SORT_ALPHA,          /* Sort alphabetically */
+    BELVU_SORT_ORGANISM,       /* Sort by organism */
+    BELVU_SORT_TREE,           /* Sort by tree order */
+    BELVU_SORT_SIM,            /* Sort by similarity to selected sequence */
+    BELVU_SORT_ID,             /* Sort by identity to selected sequence */
+    BELVU_SORT_CONS            /* Sort by conservation order */
+  } BelvuSortType;
+
+
+/* This defines the types of color scheme that we deal with */
+typedef enum _BelvuSchemeType
+  {
+    BELVU_SCHEME_TYPE_RESIDUE,          /* Color by residue */
+    BELVU_SCHEME_TYPE_CONS              /* Color by conservation */
+  } BelvuSchemeType;
+
+
+/* This defines the color schemes when coloring by residue */
+typedef enum _BelvuColorSchemes
+  {
+    BELVU_SCHEME_NONE,              /* Clean slate (no coloring) */
+    BELVU_SCHEME_ERIK,              /* Erik's original scheme */
+    BELVU_SCHEME_GIBSON,            /* Toby's */
+    BELVU_SCHEME_CGP,               /* Cys/Gly/Pro */
+    BELVU_SCHEME_CGPH,              /* Cys/Gly/Pro/His */
+    BELVU_SCHEME_CUSTOM,            /* Custom color scheme (this is activated after colors have been edited) */
+    
+    NUM_RESIDUE_SCHEMES,            /* this allows us to identify whether a scheme is a color-by-residue or -by-conservation mode scheme */
+    
+    BELVU_SCHEME_BLOSUM,            /* Average similarity by BLOSUM62 */
+    BELVU_SCHEME_ID,                /* Percent identity */
+    BELVU_SCHEME_ID_BLOSUM          /* Percent ID and BLOSUM62 */
+  } BelvuColorScheme;
+
+
+/* This defines the different levels of conservation that we colour by
+ * in color-by-conservation mode */
+typedef enum _BelvuConsLevel
+  {
+    CONS_LEVEL_MAX,                /* maximum conservation */
+    CONS_LEVEL_MID,                /* medium conservation */
+    CONS_LEVEL_LOW                 /* lowest conservation */
+  } BelvuConsLevel;
+
+
+/* Structs */
+typedef struct alnStruct {
+  char name[MAXNAMESIZE + 1];
+  int  start;
+  int  end;
+  GString *sequenceStr;         /* The sequence data */
+  int  nr;			/* Ordinal number in array - must be sorted on this */
+  char fetch[MAXNAMESIZE + 11];
+  float score;
+  int  color;			/* Background color of name */
+  int  markup;                  /* Markup line */
+  gboolean  hide;               /* Hide this line */
+  gboolean nocolor;		/* Exclude from coloring */
+  char *organism;
+  int startColIdx;              /* 0-based index indicating which column the sequence data starts in */
+} ALN;
+
+
+typedef struct _TreeNode 
+{
+  double dist;			/* Absolute distance position */
+  double branchlen;		/* Length of branch to higher node */
+  double boot;                  /* Bootstrap value */
+  struct _TreeNode *left;
+  struct _TreeNode *right;
+  struct _TreeNode *parent;
+  char *name;
+  char *organism;
+  ALN *aln;
+  int box;
+  int color;
+} TreeNode;
+
+
+typedef struct _Tree
+{
+  TreeNode *head;     /* Root node of the tree */
+} Tree;
+
+
+/* Struct to store bootstrap group */
+typedef struct BootstrapGroupStruct
+{   
+  TreeNode *node;    /* Points to node in original tree (for incrementing) */
+  char *s;           /* Sorted concatenation of all sequences in node, to be inserted in list */
+} BootstrapGroup;
+
+
+typedef struct SegStruct
+{
+  int  start;
+  int  end;
+  int  qstart;
+  int  qend;
+  struct SegStruct *next;
+} SEG;
+
+
+/* This enum contains IDs for all the persistent dialogs in the application, and should be used
+ * to access a stored dialog in the dialogList array in the BelvuContext. Note that the dialogList
+ * array will contain null entries until the dialogs are created for the first time */
+typedef enum
+  {
+    BELDIALOG_NOT_PERSISTENT = 0,   /* Reserved for dialogs that do not have an entry in the array */
+    
+    BELDIALOG_MAKE_TREE,            /* The make-tree dialog */
+    BELDIALOG_EDIT_RESIDUE_COLORS,  /* The edit-residue-colors dialog */
+    BELDIALOG_EDIT_CONS_COLORS,     /* The edit-conservation-colors dialog */
+    BELDIALOG_FIND,                 /* The find dialog */
+
+    BELDIALOG_NUM_DIALOGS           /* The number of dialogs. Must always be the last entry in this enum */
+  } BelvuDialogId;
+
+
+typedef struct BelvuContextStruct
+{
+  GtkWidget *belvuWindow;          /* Pointer to the main belvu window, or NULL if it has not been created yet */
+  GSList *spawnedWindows;          /* List of all top-level windows spawned from the main window */
+  GtkWidget *belvuTree;            /* The tree window */
+  GtkWidget *belvuAlignment;       /* The widget that draws the alignments for the main window */
+  GtkWidget *consPlot;             /* The conservation-plot window */
+  GtkWidget *orgsWindow;           /* The organisms window */
+
+  GdkCursor *defaultCursor;        /* default cursor */
+  GdkCursor *busyCursor;           /* cursor to use when busy */
+  GdkCursor *removeSeqsCursor;     /* cursor to use when removing sequences */
+
+  GArray *defaultColors;           /* Default colors used by Belvu */
+  
+  GArray *alignArr;
+  GArray *organismArr;
+  GArray *markupAlignArr;
+  GArray *bootstrapGroups;
+
+  ALN *selectedAln;                /* The currently-selected alignment */
+  GSList *highlightedAlns;         /* List of all currently-highlighted alignments
+                                    * (generally, all ALNs with the same name as
+                                    * the selectedAln are highlighted) */
+
+  Tree *mainTree;                  /* global current tree */
+  TreeNode *treeBestBalancedNode;
+
+  FILE *treeReadDistancesPipe;
+
+  int IN_FORMAT;
+  int maxScoreLen;
+  int alignYStart;
+  int treebootstraps;              /* Number of bootstrap trees to be made */
+  int maxLen;                      /* number of columns in alignment */
+  int maxTreeWidth;
+  int maxNameLen;                  /* Max string length of any sequence name */
+  int maxOrganismLen;              /* Max string length of any organism name */
+  int maxStartLen;                 /* Max string length of any sequence start */
+  int maxEndLen;                   /* Max string length of any sequence end */
+  int maxScoreen;                  /* Max string length of any sequence score */
+  int selectedCol;                 /* The currently-selected column index (0 for unset) */
+  int highlightedCol;              /* The currently-highlighted column index (0 for unset) */
+
+  int maxfgColor;                  /* Foreground color for max conservation */
+  int midfgColor;                  /* Foreground color for mid conservation */
+  int lowfgColor;                  /* Foreground color for lowmax conservation */
+  int maxbgColor;                  /* Background color for max conservation */
+  int midbgColor;                  /* Background color for mid conservation */
+  int lowbgColor;                  /* Background color for low conservation */
+  int maxfgPrintColor;             /* As above but for when the 'print colors' option is enabled */
+  int midfgPrintColor;
+  int lowfgPrintColor;
+  int maxbgPrintColor;
+  int midbgPrintColor;
+  int lowbgPrintColor;
+  
+  BelvuSchemeType schemeType;	      /* Current colour scheme mode (color-by-residue or -by-conservation) */
+  BelvuColorScheme residueScheme;     /* Which color-by-residue color scheme is selected */
+  BelvuColorScheme consScheme;	      /* Which color-by-conservation color scheme is selected */
+  
+  BelvuBuildMethod treeMethod;        /* Default building method for trees */
+  BelvuDistCorr treeDistCorr;         /* Default distance correction method for trees */
+  BelvuPickMode treePickMode;         /* Default action when picking a node in a tree */
+  
+  BelvuSortType sortType;             /* What data to sort the alignments by */
+  BelvuFileFormat saveFormat;	      /* Which file format to use for saving alignments */
+  
+  double treeBestBalance;
+  double treeBestBalance_subtrees;
+  double tree_y;
+  double lowIdCutoff;                 /* %id cutoff for lowest colour */
+  double midIdCutoff;                 /* %id cutoff for medium colour */
+  double maxIdCutoff;                 /* %id cutoff for maximum colour */
+  double lowSimCutoff;                /* %id cutoff for lowest colour */
+  double midSimCutoff;                /* %id cutoff for medium colour */
+  double maxSimCutoff;                /* %id cutoff for maximum colour */
+  double colorByResIdCutoff;          /* Cutoff when only coloring residues above a given %ID */
+  double mksubfamilies_cutoff; 
+  double treeScale;                   /* Default scale to use for drawing the tree */
+  double treeLineWidth;               /* Default line width of the branch lines in trees */
+  
+  char gapChar;
+  char saveSeparator;
+  char treeDistString[50];
+  char treeMethodString[50];
+  char Title[256];
+  char *fileName;		   /* Default file name for file browser */
+  char *dirName;		   /* Default directory for file browser */
+  char organismLabel[3];
+  
+  int **conservCount;              /* Matrix of conservation values (1st index is amino acid code; 2nd index is column index; value is the number of that residue in that column) - 21 x maxLen */
+  int **colorMap;                  /* Matrix of conservation colours - 21 x maxLen */
+  int *conservResidues;            /* Array of number of residues present in each column */
+  double *conservation;            /* The max conservation in each column [0..maxLen] */
+
+  GSList *annotationList;	   /* List of annotation lines from the input file */
+  
+  gboolean treeCoordsOn;
+  gboolean treeReadDistancesOn;
+  gboolean treePrintDistances;
+  gboolean penalize_gaps;
+  gboolean stripCoordTokensOn;
+  gboolean saveCoordsOn;
+  gboolean displayScores;
+  gboolean outputBootstrapTrees;   /* Output the individual bootstrap trees */
+  gboolean treebootstrapsDisplay;  /* Display bootstrap trees on screen */
+  gboolean treeColorsOn;           
+  gboolean treeShowOrganism;       /* whether to display the organism name in the tree */
+  gboolean treeShowBranchlen;      /* whether to display the branch length in the tree */
+  gboolean matchFooter;
+  gboolean saved;
+//  gboolean color_by_similarity;    /* FALSE => by id */
+//  gboolean color_by_conserv;       /* TRUE => by id or similarity; FALSE => by residue  */
+  gboolean ignoreGapsOn;
+  gboolean colorByResIdOn;         /* colour by residue type above identity cutoff */
+  gboolean id_blosum;              /* Paint similar residues too */
+  gboolean rmEmptyColumnsOn;       /* if true then remove empty columns after deleting sequences */
+  gboolean lowercaseOn;		   /* Set to true to highlight lowercase characters */
+  gboolean removingSeqs;	   /* Set to true if in the 'removing sequences' mode */
+  gboolean displayColors;	   /* Whether to display colors (faster without) */
+  gboolean haveCustomColors;       /* Whether the custom colors have been set */
+  gboolean printColorsOn;          /* Whether to use greyscale colors for printing */
+  gboolean highlightOrthologs;     /* Whether to highlight orthologs or not in the tree */
+  gboolean useWWWFetch;            /* Whether to fetch sequences via a web URL rather than a local program */
+  gboolean initTree;               /* Start up showing the tree */
+  gboolean onlyTree;               /* Start up showing only the tree */
+  gboolean abbrevTitle;            /* Abbreviate window title prefixes */
+
+  GtkWidget *dialogList[BELDIALOG_NUM_DIALOGS];   /* Array of all the persistent dialogs in the application */
+  
+} BelvuContext;
+
+
+/* Functions */
+const char*                               belvuGetAppName(void);
+const char*                               belvuGetTitlePrefix(BelvuContext *bc);
+const char*                               belvuGetCopyrightString(void);
+const char*                               belvuGetWebSiteString(void);
+const char*                               belvuGetCommentsString(void);
+const char*                               belvuGetLicenseString(void);
+const char*                               belvuGetVersionString(void);       
+
+BelvuContext*                             createBelvuContext();
+void                                      destroyBelvuContext(BelvuContext **bc);
+
+void                                      greyOutInvalidActions(BelvuContext *bc);
+void                                      greyOutInvalidActionsForGroup(BelvuContext *bc, GtkActionGroup *action_group);
+
+void					  setTreeScaleCorr(BelvuContext *bc, const int treeMethod);
+void					  setTreeScale(BelvuContext *bc, const double newScale) ;
+
+gint                                      alphaorder(gconstpointer xIn, gconstpointer yIn);
+gint                                      organism_order(gconstpointer xIn, gconstpointer yIn);
+gint                                      organismorder(gconstpointer xIn, gconstpointer yIn);
+gint                                      scoreorder(gconstpointer xIn, gconstpointer yIn);
+gint                                      nrorder(gconstpointer xIn, gconstpointer yIn);
+
+void                                      highlightScoreSort(char mode, BelvuContext *bc);
+void                                      treeSortBatch(BelvuContext *bc);
+void					  doSort(BelvuContext *bc, const BelvuSortType sortType, const gboolean showTree);
+
+
+void                                      arrayOrder(GArray *alignArr);
+gboolean                                  alignFind(GArray *alignArr, ALN *obj, int *idx);
+void                                      initAln(ALN *alnp);
+ALN*                                      createEmptyAln();
+
+void                                      setOrganismColors(GArray *organismArr);
+
+void                                      parseMulLine(BelvuContext *bc, char *line, ALN *aln);
+
+void                                      readMatch(BelvuContext *bc, FILE *fil);                
+void                                      checkAlignment(BelvuContext *bc);
+void                                      setConsSchemeColors(BelvuContext *bc);
+void					  updateSchemeColors(BelvuContext *bc);
+void                                      saveCustomColors(BelvuContext *bc);
+void                                      initResidueColors(BelvuContext *bc);
+void                                      initMarkupColors(void);              
+void                                      initCustomColors(void);              
+gboolean				  colorByConservation(BelvuContext *bc);
+gboolean				  colorByResidue(BelvuContext *bc);
+gboolean				  colorBySimilarity(BelvuContext *bc);
+gboolean                                  colorByResId(BelvuContext *bc);
+void                                      setResidueSchemeColors(BelvuContext *bc);
+const char*                               getColorNumName(const int colorNum);
+const char*				  getFileFormatString(const int formatId);
+int*                                      getConsColor(BelvuContext *bc, const BelvuConsLevel consLevel, const gboolean foreground);
+void                                      setExcludeFromConsCalc(BelvuContext *bc, const gboolean exclude);
+
+void                                      readLabels(BelvuContext *bc, FILE *fil);
+
+void                                      mkNonRedundant(BelvuContext *bc, double cutoff);
+void                                      rmPartialSeqs(BelvuContext *bc);         
+void                                      rmEmptyColumns(BelvuContext *bc, double cutoff);
+void                                      rmGappySeqs(BelvuContext *bc, double cutoff);
+void                                      rmFinaliseGapRemoval(BelvuContext *bc);
+void					  rmOutliers(BelvuContext *bc, const double cutoff);
+void					  rmScore(BelvuContext *bc, const double cutoff);
+void                                      rmColumn(BelvuContext *bc, const int from, const int to);
+void                                      rmColumnCutoff(BelvuContext *bc, const double from, const double to);
+void                                      rmFinaliseColumnRemoval(BelvuContext *bc);
+
+void                                      readFile(BelvuContext *bc, FILE *pipe);
+void                                      writeMul(BelvuContext *bc, FILE *fil);
+void                                      writeFasta(BelvuContext *bc, FILE *pipe);
+void                                      writeMSF(BelvuContext *bc, FILE *pipe);
+
+void                                      separateMarkupLines(BelvuContext *bc);
+void                                      reInsertMarkupLines(BelvuContext *bc);
+Tree*                                     treeMake(BelvuContext *bc, const gboolean doBootstrap, const gboolean displayFeedback);
+
+void                                      outputProbs(BelvuContext *bc, FILE *fil);
+void                                      mksubfamilies(BelvuContext *bc, double cutoff);        
+
+void                                      treeDisplay(BelvuContext *bc);       
+
+void                                      colorSim(BelvuContext *bc);          
+
+char                                      b2aIndex(const int idx);
+int                                       getMarkupColor(const char inputChar);
+int                                       getConservColor(BelvuContext *bc, const char inputChar, const int idx);
+int                                       getColor(const char inputChar);
+void                                      setColor(const char inputChar, const int colorNum);
+int*                                      getColorArray();
+int*                                      getMarkupColorArray();
+void                                      saveResidueColorScheme(BelvuContext *bc, FILE *fil);
+void                                      readResidueColorScheme(BelvuContext *bc, FILE *fil, int *colorarr, const gboolean storeCustomColors);
+
+char*                                     alnGetSeq(ALN *aln);
+int                                       alnGetSeqLen(ALN *aln);
+gboolean                                  isGap(char c);
+int                                       strcmp_(gconstpointer xIn, gconstpointer yIn);
+gboolean                                  alnArrayFind(GArray *a, void *s, int *ip, int (* orderFunc)(gconstpointer, gconstpointer));
+gboolean                                  bsArrayFind(GArray *a, void *s, int *ip, int (* orderFunc)(gconstpointer, gconstpointer));
+GArray*                                   copyAlignArray(GArray *inputArr);
+void                                      columnCopy(GArray *alignArrDest, int destIdx, GArray *alignArrSrc, int srcIdx);
+double                                    percentIdentity(char *s1, char *s2, const gboolean penalize_gaps);
+
+void                                      convertColorNumToGdkColor(const int colorNum, const gboolean isSelected, GdkColor *result);
+void                                      drawText(GtkWidget *widget, GdkDrawable *drawable, GdkGC *gc, const int x, const int y, const char *text, int *textWidth, int *textHeight);
+void                                      drawIntAsText(GtkWidget *widget, GdkDrawable *drawable, GdkGC *gc, const int x, const int y, const int value);
+void                                      drawDoubleAsText(GtkWidget *widget, GdkDrawable *drawable, GdkGC *gc, const int x, const int y, const double value);
+
+void                                      treeTraverse(BelvuContext *bc, TreeNode *node, void (*func)(BelvuContext *bc, TreeNode *treeNode));
+void                                      treeSort(BelvuContext *bc, const gboolean showTree);
+void                                      saveTreeNH(Tree *tree, TreeNode *node, FILE *file);
+
+void                                      listIdentity(BelvuContext *bc);
+void                                      belvuContextSetTree(BelvuContext *bc, Tree **tree);
+
+void                                      fetchAln(BelvuContext *bc, ALN *alnp);
+gboolean                                  alignmentHighlighted(BelvuContext *bc, ALN *alnp);
+void					  str2aln(BelvuContext *bc, char *src, ALN *alnp) ;
+void					  alncpy(ALN *dest, ALN *src);
+
+void                                      setBusyCursor(BelvuContext *bc, const gboolean busy);
+
+void                                      createBelvuColors(BelvuContext *bc) ;
+
+#endif /* DEF_BELVU_P_H */
diff --git a/blixemApp/Makefile.am b/blixemApp/Makefile.am
new file mode 100644
index 0000000..9963451
--- /dev/null
+++ b/blixemApp/Makefile.am
@@ -0,0 +1,54 @@
+
+SUBDIRS = .
+
+include $(top_srcdir)/Makefile.am.common
+
+# there's a problem on ubuntu 14 with finding X11 so this is a hopefully temporary hack...
+#X_LIB = -lX11 -lm
+
+blixem_CPPFLAGS = $(AM_CPPFLAGS)
+BLX_LIBS = $(top_builddir)/seqtoolsUtils/libSeqtoolsUtils.a
+
+# If gbtools is in a subdirectory, add it; otherwise look for a local installation
+if USE_GBTOOLS
+BLX_LIBS += $(top_builddir)/gbtools/.libs/libgbtools.a
+else
+BLX_LIBS += -lgbtools
+endif
+
+# the gtk deps etc. must go at the end so that gbtools can pick them up
+BLX_LIBS += $(DEPS_LIBS) $(X_LIB)
+
+# use sqlite for blixem if it's available
+if USE_SQLITE3
+AM_CPPFLAGS += $(DEPS_SQLITE3)
+BLX_LIBS += $(DEPS_SQLITE3_LIBS)
+blixem_CPPFLAGS += -DSQLITE3
+endif
+
+if USE_LIBCURL
+bin_PROGRAMS = blixem blixemh
+else
+bin_PROGRAMS = blixem
+endif
+
+blixem_SOURCES = blxmain.cpp blxview.cpp blxFetch.cpp sequencecellrenderer.cpp blxpanel.cpp bigpicture.cpp bigpicturegrid.cpp detailview.cpp detailviewtree.cpp blxwindow.cpp exonview.cpp coverageview.cpp blxdotter.cpp blxFetchDb.cpp blxcontext.cpp blxview.hpp blxcontext.hpp blixem_.hpp detailview.hpp detailviewtree.hpp sequencecellrenderer.hpp blxpanel.hpp bigpicture.hpp bigpicturegrid.hpp blxwindow.hpp exonview.hpp coverageview.hpp blxdotter.hpp 
+blixem_LDADD = $(BLX_LIBS)
+
+# Only compile the blixemh target if we have the libcurl library
+if USE_LIBCURL
+blixemh_SOURCES = $(blixem_SOURCES)
+blixemh_CPPFLAGS = $(blixem_CPPFLAGS) -DPFETCH_HTML
+
+# commented out for now....
+#blixemh_LDADD = $(top_builddir)/libpfetch/libpfetch.a $(BLX_LIBS) -lcurl
+
+# but I've commented it back in ....need to try a compile....
+blixemh_LDADD =  $(BLX_LIBS) -lcurl
+
+endif
+
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/blixemApp/Makefile.in
diff --git a/blixemApp/Makefile.in b/blixemApp/Makefile.in
new file mode 100644
index 0000000..a754ba6
--- /dev/null
+++ b/blixemApp/Makefile.in
@@ -0,0 +1,1232 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 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@
+
+# Common settings for compiles.
+#
+
+VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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 = :
+DIST_COMMON = $(top_srcdir)/Makefile.am.common $(srcdir)/Makefile.in \
+	$(srcdir)/Makefile.am $(top_srcdir)/config/depcomp
+
+# If gbtools is in a subdirectory, add it to the include path
+ at USE_GBTOOLS_TRUE@am__append_1 = -I$(top_srcdir)/gbtools/src/include
+
+# If gbtools is in a subdirectory, add it; otherwise look for a local installation
+ at USE_GBTOOLS_TRUE@am__append_2 = $(top_builddir)/gbtools/.libs/libgbtools.a
+ at USE_GBTOOLS_FALSE@am__append_3 = -lgbtools
+
+# use sqlite for blixem if it's available
+ at USE_SQLITE3_TRUE@am__append_4 = $(DEPS_SQLITE3)
+ at USE_SQLITE3_TRUE@am__append_5 = $(DEPS_SQLITE3_LIBS)
+ at USE_SQLITE3_TRUE@am__append_6 = -DSQLITE3
+ at USE_LIBCURL_FALSE@bin_PROGRAMS = blixem$(EXEEXT)
+ at USE_LIBCURL_TRUE@bin_PROGRAMS = blixem$(EXEEXT) blixemh$(EXEEXT)
+subdir = blixemApp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/./seqtools_version.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)"
+PROGRAMS = $(bin_PROGRAMS)
+am_blixem_OBJECTS = blixem-blxmain.$(OBJEXT) blixem-blxview.$(OBJEXT) \
+	blixem-blxFetch.$(OBJEXT) \
+	blixem-sequencecellrenderer.$(OBJEXT) \
+	blixem-blxpanel.$(OBJEXT) blixem-bigpicture.$(OBJEXT) \
+	blixem-bigpicturegrid.$(OBJEXT) blixem-detailview.$(OBJEXT) \
+	blixem-detailviewtree.$(OBJEXT) blixem-blxwindow.$(OBJEXT) \
+	blixem-exonview.$(OBJEXT) blixem-coverageview.$(OBJEXT) \
+	blixem-blxdotter.$(OBJEXT) blixem-blxFetchDb.$(OBJEXT) \
+	blixem-blxcontext.$(OBJEXT)
+blixem_OBJECTS = $(am_blixem_OBJECTS)
+am__DEPENDENCIES_1 =
+ at USE_SQLITE3_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1)
+am__DEPENDENCIES_3 = $(top_builddir)/seqtoolsUtils/libSeqtoolsUtils.a \
+	$(am__append_2) $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_2)
+blixem_DEPENDENCIES = $(am__DEPENDENCIES_3)
+am__blixemh_SOURCES_DIST = blxmain.cpp blxview.cpp blxFetch.cpp \
+	sequencecellrenderer.cpp blxpanel.cpp bigpicture.cpp \
+	bigpicturegrid.cpp detailview.cpp detailviewtree.cpp \
+	blxwindow.cpp exonview.cpp coverageview.cpp blxdotter.cpp \
+	blxFetchDb.cpp blxcontext.cpp blxview.hpp blxcontext.hpp \
+	blixem_.hpp detailview.hpp detailviewtree.hpp \
+	sequencecellrenderer.hpp blxpanel.hpp bigpicture.hpp \
+	bigpicturegrid.hpp blxwindow.hpp exonview.hpp coverageview.hpp \
+	blxdotter.hpp
+am__objects_1 = blixemh-blxmain.$(OBJEXT) blixemh-blxview.$(OBJEXT) \
+	blixemh-blxFetch.$(OBJEXT) \
+	blixemh-sequencecellrenderer.$(OBJEXT) \
+	blixemh-blxpanel.$(OBJEXT) blixemh-bigpicture.$(OBJEXT) \
+	blixemh-bigpicturegrid.$(OBJEXT) blixemh-detailview.$(OBJEXT) \
+	blixemh-detailviewtree.$(OBJEXT) blixemh-blxwindow.$(OBJEXT) \
+	blixemh-exonview.$(OBJEXT) blixemh-coverageview.$(OBJEXT) \
+	blixemh-blxdotter.$(OBJEXT) blixemh-blxFetchDb.$(OBJEXT) \
+	blixemh-blxcontext.$(OBJEXT)
+ at USE_LIBCURL_TRUE@am_blixemh_OBJECTS = $(am__objects_1)
+blixemh_OBJECTS = $(am_blixemh_OBJECTS)
+ at USE_LIBCURL_TRUE@blixemh_DEPENDENCIES = $(am__DEPENDENCIES_3)
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+AM_V_CXX = $(am__v_CXX_ at AM_V@)
+am__v_CXX_ = $(am__v_CXX_ at AM_DEFAULT_V@)
+am__v_CXX_0 = @echo "  CXX     " $@;
+am__v_CXX_1 = 
+CXXLD = $(CXX)
+CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+	-o $@
+AM_V_CXXLD = $(am__v_CXXLD_ at AM_V@)
+am__v_CXXLD_ = $(am__v_CXXLD_ at AM_DEFAULT_V@)
+am__v_CXXLD_0 = @echo "  CXXLD   " $@;
+am__v_CXXLD_1 = 
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = $(blixem_SOURCES) $(blixemh_SOURCES)
+DIST_SOURCES = $(blixem_SOURCES) $(am__blixemh_SOURCES_DIST)
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-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 \
+	tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+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@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPS_CFLAGS = @DEPS_CFLAGS@
+DEPS_LIBS = @DEPS_LIBS@
+DEPS_SQLITE3_CFLAGS = @DEPS_SQLITE3_CFLAGS@
+DEPS_SQLITE3_LIBS = @DEPS_SQLITE3_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+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_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+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_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+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@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = .
+
+#AM_CPPFLAGS = -g -Wall $(DEPS_CFLAGS) -I$(top_srcdir)
+AM_CPPFLAGS = $(DEPS_CFLAGS) -I$(top_srcdir) $(am__append_1) \
+	$(am__append_4)
+AM_CXXFLAGS = -std=c++11 -g -Wall
+
+# there's a problem on ubuntu 14 with finding X11 so this is a hopefully temporary hack...
+#X_LIB = -lX11 -lm
+blixem_CPPFLAGS = $(AM_CPPFLAGS) $(am__append_6)
+
+# the gtk deps etc. must go at the end so that gbtools can pick them up
+BLX_LIBS = $(top_builddir)/seqtoolsUtils/libSeqtoolsUtils.a \
+	$(am__append_2) $(am__append_3) $(DEPS_LIBS) $(X_LIB) \
+	$(am__append_5)
+blixem_SOURCES = blxmain.cpp blxview.cpp blxFetch.cpp sequencecellrenderer.cpp blxpanel.cpp bigpicture.cpp bigpicturegrid.cpp detailview.cpp detailviewtree.cpp blxwindow.cpp exonview.cpp coverageview.cpp blxdotter.cpp blxFetchDb.cpp blxcontext.cpp blxview.hpp blxcontext.hpp blixem_.hpp detailview.hpp detailviewtree.hpp sequencecellrenderer.hpp blxpanel.hpp bigpicture.hpp bigpicturegrid.hpp blxwindow.hpp exonview.hpp coverageview.hpp blxdotter.hpp 
+blixem_LDADD = $(BLX_LIBS)
+
+# Only compile the blixemh target if we have the libcurl library
+ at USE_LIBCURL_TRUE@blixemh_SOURCES = $(blixem_SOURCES)
+ at USE_LIBCURL_TRUE@blixemh_CPPFLAGS = $(blixem_CPPFLAGS) -DPFETCH_HTML
+
+# commented out for now....
+#blixemh_LDADD = $(top_builddir)/libpfetch/libpfetch.a $(BLX_LIBS) -lcurl
+
+# but I've commented it back in ....need to try a compile....
+ at USE_LIBCURL_TRUE@blixemh_LDADD = $(BLX_LIBS) -lcurl
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/blixemApp/Makefile.in
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .cpp .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(top_srcdir)/Makefile.am.common $(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 blixemApp/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign blixemApp/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_srcdir)/Makefile.am.common:
+
+$(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)
+	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+	fi; \
+	for p in $$list; do echo "$$p $$p"; done | \
+	sed 's/$(EXEEXT)$$//' | \
+	while read p p1; do if test -f $$p \
+	  ; 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) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+	      $(INSTALL_PROGRAM_ENV) $(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:
+	-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+
+blixem$(EXEEXT): $(blixem_OBJECTS) $(blixem_DEPENDENCIES) $(EXTRA_blixem_DEPENDENCIES) 
+	@rm -f blixem$(EXEEXT)
+	$(AM_V_CXXLD)$(CXXLINK) $(blixem_OBJECTS) $(blixem_LDADD) $(LIBS)
+
+blixemh$(EXEEXT): $(blixemh_OBJECTS) $(blixemh_DEPENDENCIES) $(EXTRA_blixemh_DEPENDENCIES) 
+	@rm -f blixemh$(EXEEXT)
+	$(AM_V_CXXLD)$(CXXLINK) $(blixemh_OBJECTS) $(blixemh_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/blixem-bigpicture.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/blixem-bigpicturegrid.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/blixem-blxFetch.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/blixem-blxFetchDb.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/blixem-blxcontext.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/blixem-blxdotter.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/blixem-blxmain.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/blixem-blxpanel.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/blixem-blxview.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/blixem-blxwindow.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/blixem-coverageview.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/blixem-detailview.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/blixem-detailviewtree.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/blixem-exonview.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/blixem-sequencecellrenderer.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/blixemh-bigpicture.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/blixemh-bigpicturegrid.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/blixemh-blxFetch.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/blixemh-blxFetchDb.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/blixemh-blxcontext.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/blixemh-blxdotter.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/blixemh-blxmain.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/blixemh-blxpanel.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/blixemh-blxview.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/blixemh-blxwindow.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/blixemh-coverageview.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/blixemh-detailview.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/blixemh-detailviewtree.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/blixemh-exonview.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/blixemh-sequencecellrenderer.Po at am__quote@
+
+.cpp.o:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+blixem-blxmain.o: blxmain.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixem-blxmain.o -MD -MP -MF $(DEPDIR)/blixem-blxmain.Tpo -c -o blixem-blxmain.o `test -f 'blxmain.cpp' || echo '$(srcdir)/'`blxmain.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixem-blxmain.Tpo $(DEPDIR)/blixem-blxmain.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='blxmain.cpp' object='blixem-blxmain.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixem-blxmain.o `test -f 'blxmain.cpp' || echo '$(srcdir)/'`blxmain.cpp
+
+blixem-blxmain.obj: blxmain.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixem-blxmain.obj -MD -MP -MF $(DEPDIR)/blixem-blxmain.Tpo -c -o blixem-blxmain.obj `if test -f 'blxmain.cpp'; then $(CYGPATH_W) 'blxmain.cpp'; else $(CYGPATH_W) '$(srcdir)/blxmain.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixem-blxmain.Tpo $(DEPDIR)/blixem-blxmain.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='blxmain.cpp' object='blixem-blxmain.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixem-blxmain.obj `if test -f 'blxmain.cpp'; then $(CYGPATH_W) 'blxmain.cpp'; else $(CYGPATH_W) '$(srcdir)/blxmain.cpp'; fi`
+
+blixem-blxview.o: blxview.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixem-blxview.o -MD -MP -MF $(DEPDIR)/blixem-blxview.Tpo -c -o blixem-blxview.o `test -f 'blxview.cpp' || echo '$(srcdir)/'`blxview.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixem-blxview.Tpo $(DEPDIR)/blixem-blxview.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='blxview.cpp' object='blixem-blxview.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixem-blxview.o `test -f 'blxview.cpp' || echo '$(srcdir)/'`blxview.cpp
+
+blixem-blxview.obj: blxview.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixem-blxview.obj -MD -MP -MF $(DEPDIR)/blixem-blxview.Tpo -c -o blixem-blxview.obj `if test -f 'blxview.cpp'; then $(CYGPATH_W) 'blxview.cpp'; else $(CYGPATH_W) '$(srcdir)/blxview.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixem-blxview.Tpo $(DEPDIR)/blixem-blxview.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='blxview.cpp' object='blixem-blxview.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixem-blxview.obj `if test -f 'blxview.cpp'; then $(CYGPATH_W) 'blxview.cpp'; else $(CYGPATH_W) '$(srcdir)/blxview.cpp'; fi`
+
+blixem-blxFetch.o: blxFetch.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixem-blxFetch.o -MD -MP -MF $(DEPDIR)/blixem-blxFetch.Tpo -c -o blixem-blxFetch.o `test -f 'blxFetch.cpp' || echo '$(srcdir)/'`blxFetch.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixem-blxFetch.Tpo $(DEPDIR)/blixem-blxFetch.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='blxFetch.cpp' object='blixem-blxFetch.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixem-blxFetch.o `test -f 'blxFetch.cpp' || echo '$(srcdir)/'`blxFetch.cpp
+
+blixem-blxFetch.obj: blxFetch.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixem-blxFetch.obj -MD -MP -MF $(DEPDIR)/blixem-blxFetch.Tpo -c -o blixem-blxFetch.obj `if test -f 'blxFetch.cpp'; then $(CYGPATH_W) 'blxFetch.cpp'; else $(CYGPATH_W) '$(srcdir)/blxFetch.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixem-blxFetch.Tpo $(DEPDIR)/blixem-blxFetch.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='blxFetch.cpp' object='blixem-blxFetch.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixem-blxFetch.obj `if test -f 'blxFetch.cpp'; then $(CYGPATH_W) 'blxFetch.cpp'; else $(CYGPATH_W) '$(srcdir)/blxFetch.cpp'; fi`
+
+blixem-sequencecellrenderer.o: sequencecellrenderer.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixem-sequencecellrenderer.o -MD -MP -MF $(DEPDIR)/blixem-sequencecellrenderer.Tpo -c -o blixem-sequencecellrenderer.o `test -f 'sequencecellrenderer.cpp' || echo '$(srcdir)/'`sequencecellrenderer.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixem-sequencecellrenderer.Tpo $(DEPDIR)/blixem-sequencecellrenderer.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='sequencecellrenderer.cpp' object='blixem-sequencecellrenderer.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixem-sequencecellrenderer.o `test -f 'sequencecellrenderer.cpp' || echo '$(srcdir)/'`sequencecellrenderer.cpp
+
+blixem-sequencecellrenderer.obj: sequencecellrenderer.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixem-sequencecellrenderer.obj -MD -MP -MF $(DEPDIR)/blixem-sequencecellrenderer.Tpo -c -o blixem-sequencecellrenderer.obj `if test -f 'sequencecellrenderer.cpp'; then $(CYGPATH_W) 'sequencecellrenderer.cpp'; else $(CYGPATH_W) '$(srcdir)/sequencecellrenderer.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixem-sequencecellrenderer.Tpo $(DEPDIR)/blixem-sequencecellrenderer.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='sequencecellrenderer.cpp' object='blixem-sequencecellrenderer.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixem-sequencecellrenderer.obj `if test -f 'sequencecellrenderer.cpp'; then $(CYGPATH_W) 'sequencecellrenderer.cpp'; else $(CYGPATH_W) '$(srcdir)/sequencecellrenderer.cpp'; fi`
+
+blixem-blxpanel.o: blxpanel.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixem-blxpanel.o -MD -MP -MF $(DEPDIR)/blixem-blxpanel.Tpo -c -o blixem-blxpanel.o `test -f 'blxpanel.cpp' || echo '$(srcdir)/'`blxpanel.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixem-blxpanel.Tpo $(DEPDIR)/blixem-blxpanel.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='blxpanel.cpp' object='blixem-blxpanel.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixem-blxpanel.o `test -f 'blxpanel.cpp' || echo '$(srcdir)/'`blxpanel.cpp
+
+blixem-blxpanel.obj: blxpanel.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixem-blxpanel.obj -MD -MP -MF $(DEPDIR)/blixem-blxpanel.Tpo -c -o blixem-blxpanel.obj `if test -f 'blxpanel.cpp'; then $(CYGPATH_W) 'blxpanel.cpp'; else $(CYGPATH_W) '$(srcdir)/blxpanel.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixem-blxpanel.Tpo $(DEPDIR)/blixem-blxpanel.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='blxpanel.cpp' object='blixem-blxpanel.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixem-blxpanel.obj `if test -f 'blxpanel.cpp'; then $(CYGPATH_W) 'blxpanel.cpp'; else $(CYGPATH_W) '$(srcdir)/blxpanel.cpp'; fi`
+
+blixem-bigpicture.o: bigpicture.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixem-bigpicture.o -MD -MP -MF $(DEPDIR)/blixem-bigpicture.Tpo -c -o blixem-bigpicture.o `test -f 'bigpicture.cpp' || echo '$(srcdir)/'`bigpicture.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixem-bigpicture.Tpo $(DEPDIR)/blixem-bigpicture.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='bigpicture.cpp' object='blixem-bigpicture.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixem-bigpicture.o `test -f 'bigpicture.cpp' || echo '$(srcdir)/'`bigpicture.cpp
+
+blixem-bigpicture.obj: bigpicture.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixem-bigpicture.obj -MD -MP -MF $(DEPDIR)/blixem-bigpicture.Tpo -c -o blixem-bigpicture.obj `if test -f 'bigpicture.cpp'; then $(CYGPATH_W) 'bigpicture.cpp'; else $(CYGPATH_W) '$(srcdir)/bigpicture.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixem-bigpicture.Tpo $(DEPDIR)/blixem-bigpicture.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='bigpicture.cpp' object='blixem-bigpicture.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixem-bigpicture.obj `if test -f 'bigpicture.cpp'; then $(CYGPATH_W) 'bigpicture.cpp'; else $(CYGPATH_W) '$(srcdir)/bigpicture.cpp'; fi`
+
+blixem-bigpicturegrid.o: bigpicturegrid.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixem-bigpicturegrid.o -MD -MP -MF $(DEPDIR)/blixem-bigpicturegrid.Tpo -c -o blixem-bigpicturegrid.o `test -f 'bigpicturegrid.cpp' || echo '$(srcdir)/'`bigpicturegrid.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixem-bigpicturegrid.Tpo $(DEPDIR)/blixem-bigpicturegrid.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='bigpicturegrid.cpp' object='blixem-bigpicturegrid.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixem-bigpicturegrid.o `test -f 'bigpicturegrid.cpp' || echo '$(srcdir)/'`bigpicturegrid.cpp
+
+blixem-bigpicturegrid.obj: bigpicturegrid.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixem-bigpicturegrid.obj -MD -MP -MF $(DEPDIR)/blixem-bigpicturegrid.Tpo -c -o blixem-bigpicturegrid.obj `if test -f 'bigpicturegrid.cpp'; then $(CYGPATH_W) 'bigpicturegrid.cpp'; else $(CYGPATH_W) '$(srcdir)/bigpicturegrid.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixem-bigpicturegrid.Tpo $(DEPDIR)/blixem-bigpicturegrid.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='bigpicturegrid.cpp' object='blixem-bigpicturegrid.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixem-bigpicturegrid.obj `if test -f 'bigpicturegrid.cpp'; then $(CYGPATH_W) 'bigpicturegrid.cpp'; else $(CYGPATH_W) '$(srcdir)/bigpicturegrid.cpp'; fi`
+
+blixem-detailview.o: detailview.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixem-detailview.o -MD -MP -MF $(DEPDIR)/blixem-detailview.Tpo -c -o blixem-detailview.o `test -f 'detailview.cpp' || echo '$(srcdir)/'`detailview.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixem-detailview.Tpo $(DEPDIR)/blixem-detailview.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='detailview.cpp' object='blixem-detailview.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixem-detailview.o `test -f 'detailview.cpp' || echo '$(srcdir)/'`detailview.cpp
+
+blixem-detailview.obj: detailview.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixem-detailview.obj -MD -MP -MF $(DEPDIR)/blixem-detailview.Tpo -c -o blixem-detailview.obj `if test -f 'detailview.cpp'; then $(CYGPATH_W) 'detailview.cpp'; else $(CYGPATH_W) '$(srcdir)/detailview.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixem-detailview.Tpo $(DEPDIR)/blixem-detailview.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='detailview.cpp' object='blixem-detailview.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixem-detailview.obj `if test -f 'detailview.cpp'; then $(CYGPATH_W) 'detailview.cpp'; else $(CYGPATH_W) '$(srcdir)/detailview.cpp'; fi`
+
+blixem-detailviewtree.o: detailviewtree.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixem-detailviewtree.o -MD -MP -MF $(DEPDIR)/blixem-detailviewtree.Tpo -c -o blixem-detailviewtree.o `test -f 'detailviewtree.cpp' || echo '$(srcdir)/'`detailviewtree.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixem-detailviewtree.Tpo $(DEPDIR)/blixem-detailviewtree.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='detailviewtree.cpp' object='blixem-detailviewtree.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixem-detailviewtree.o `test -f 'detailviewtree.cpp' || echo '$(srcdir)/'`detailviewtree.cpp
+
+blixem-detailviewtree.obj: detailviewtree.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixem-detailviewtree.obj -MD -MP -MF $(DEPDIR)/blixem-detailviewtree.Tpo -c -o blixem-detailviewtree.obj `if test -f 'detailviewtree.cpp'; then $(CYGPATH_W) 'detailviewtree.cpp'; else $(CYGPATH_W) '$(srcdir)/detailviewtree.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixem-detailviewtree.Tpo $(DEPDIR)/blixem-detailviewtree.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='detailviewtree.cpp' object='blixem-detailviewtree.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixem-detailviewtree.obj `if test -f 'detailviewtree.cpp'; then $(CYGPATH_W) 'detailviewtree.cpp'; else $(CYGPATH_W) '$(srcdir)/detailviewtree.cpp'; fi`
+
+blixem-blxwindow.o: blxwindow.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixem-blxwindow.o -MD -MP -MF $(DEPDIR)/blixem-blxwindow.Tpo -c -o blixem-blxwindow.o `test -f 'blxwindow.cpp' || echo '$(srcdir)/'`blxwindow.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixem-blxwindow.Tpo $(DEPDIR)/blixem-blxwindow.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='blxwindow.cpp' object='blixem-blxwindow.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixem-blxwindow.o `test -f 'blxwindow.cpp' || echo '$(srcdir)/'`blxwindow.cpp
+
+blixem-blxwindow.obj: blxwindow.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixem-blxwindow.obj -MD -MP -MF $(DEPDIR)/blixem-blxwindow.Tpo -c -o blixem-blxwindow.obj `if test -f 'blxwindow.cpp'; then $(CYGPATH_W) 'blxwindow.cpp'; else $(CYGPATH_W) '$(srcdir)/blxwindow.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixem-blxwindow.Tpo $(DEPDIR)/blixem-blxwindow.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='blxwindow.cpp' object='blixem-blxwindow.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixem-blxwindow.obj `if test -f 'blxwindow.cpp'; then $(CYGPATH_W) 'blxwindow.cpp'; else $(CYGPATH_W) '$(srcdir)/blxwindow.cpp'; fi`
+
+blixem-exonview.o: exonview.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixem-exonview.o -MD -MP -MF $(DEPDIR)/blixem-exonview.Tpo -c -o blixem-exonview.o `test -f 'exonview.cpp' || echo '$(srcdir)/'`exonview.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixem-exonview.Tpo $(DEPDIR)/blixem-exonview.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='exonview.cpp' object='blixem-exonview.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixem-exonview.o `test -f 'exonview.cpp' || echo '$(srcdir)/'`exonview.cpp
+
+blixem-exonview.obj: exonview.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixem-exonview.obj -MD -MP -MF $(DEPDIR)/blixem-exonview.Tpo -c -o blixem-exonview.obj `if test -f 'exonview.cpp'; then $(CYGPATH_W) 'exonview.cpp'; else $(CYGPATH_W) '$(srcdir)/exonview.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixem-exonview.Tpo $(DEPDIR)/blixem-exonview.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='exonview.cpp' object='blixem-exonview.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixem-exonview.obj `if test -f 'exonview.cpp'; then $(CYGPATH_W) 'exonview.cpp'; else $(CYGPATH_W) '$(srcdir)/exonview.cpp'; fi`
+
+blixem-coverageview.o: coverageview.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixem-coverageview.o -MD -MP -MF $(DEPDIR)/blixem-coverageview.Tpo -c -o blixem-coverageview.o `test -f 'coverageview.cpp' || echo '$(srcdir)/'`coverageview.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixem-coverageview.Tpo $(DEPDIR)/blixem-coverageview.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='coverageview.cpp' object='blixem-coverageview.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixem-coverageview.o `test -f 'coverageview.cpp' || echo '$(srcdir)/'`coverageview.cpp
+
+blixem-coverageview.obj: coverageview.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixem-coverageview.obj -MD -MP -MF $(DEPDIR)/blixem-coverageview.Tpo -c -o blixem-coverageview.obj `if test -f 'coverageview.cpp'; then $(CYGPATH_W) 'coverageview.cpp'; else $(CYGPATH_W) '$(srcdir)/coverageview.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixem-coverageview.Tpo $(DEPDIR)/blixem-coverageview.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='coverageview.cpp' object='blixem-coverageview.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixem-coverageview.obj `if test -f 'coverageview.cpp'; then $(CYGPATH_W) 'coverageview.cpp'; else $(CYGPATH_W) '$(srcdir)/coverageview.cpp'; fi`
+
+blixem-blxdotter.o: blxdotter.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixem-blxdotter.o -MD -MP -MF $(DEPDIR)/blixem-blxdotter.Tpo -c -o blixem-blxdotter.o `test -f 'blxdotter.cpp' || echo '$(srcdir)/'`blxdotter.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixem-blxdotter.Tpo $(DEPDIR)/blixem-blxdotter.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='blxdotter.cpp' object='blixem-blxdotter.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixem-blxdotter.o `test -f 'blxdotter.cpp' || echo '$(srcdir)/'`blxdotter.cpp
+
+blixem-blxdotter.obj: blxdotter.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixem-blxdotter.obj -MD -MP -MF $(DEPDIR)/blixem-blxdotter.Tpo -c -o blixem-blxdotter.obj `if test -f 'blxdotter.cpp'; then $(CYGPATH_W) 'blxdotter.cpp'; else $(CYGPATH_W) '$(srcdir)/blxdotter.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixem-blxdotter.Tpo $(DEPDIR)/blixem-blxdotter.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='blxdotter.cpp' object='blixem-blxdotter.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixem-blxdotter.obj `if test -f 'blxdotter.cpp'; then $(CYGPATH_W) 'blxdotter.cpp'; else $(CYGPATH_W) '$(srcdir)/blxdotter.cpp'; fi`
+
+blixem-blxFetchDb.o: blxFetchDb.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixem-blxFetchDb.o -MD -MP -MF $(DEPDIR)/blixem-blxFetchDb.Tpo -c -o blixem-blxFetchDb.o `test -f 'blxFetchDb.cpp' || echo '$(srcdir)/'`blxFetchDb.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixem-blxFetchDb.Tpo $(DEPDIR)/blixem-blxFetchDb.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='blxFetchDb.cpp' object='blixem-blxFetchDb.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixem-blxFetchDb.o `test -f 'blxFetchDb.cpp' || echo '$(srcdir)/'`blxFetchDb.cpp
+
+blixem-blxFetchDb.obj: blxFetchDb.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixem-blxFetchDb.obj -MD -MP -MF $(DEPDIR)/blixem-blxFetchDb.Tpo -c -o blixem-blxFetchDb.obj `if test -f 'blxFetchDb.cpp'; then $(CYGPATH_W) 'blxFetchDb.cpp'; else $(CYGPATH_W) '$(srcdir)/blxFetchDb.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixem-blxFetchDb.Tpo $(DEPDIR)/blixem-blxFetchDb.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='blxFetchDb.cpp' object='blixem-blxFetchDb.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixem-blxFetchDb.obj `if test -f 'blxFetchDb.cpp'; then $(CYGPATH_W) 'blxFetchDb.cpp'; else $(CYGPATH_W) '$(srcdir)/blxFetchDb.cpp'; fi`
+
+blixem-blxcontext.o: blxcontext.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixem-blxcontext.o -MD -MP -MF $(DEPDIR)/blixem-blxcontext.Tpo -c -o blixem-blxcontext.o `test -f 'blxcontext.cpp' || echo '$(srcdir)/'`blxcontext.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixem-blxcontext.Tpo $(DEPDIR)/blixem-blxcontext.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='blxcontext.cpp' object='blixem-blxcontext.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixem-blxcontext.o `test -f 'blxcontext.cpp' || echo '$(srcdir)/'`blxcontext.cpp
+
+blixem-blxcontext.obj: blxcontext.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixem-blxcontext.obj -MD -MP -MF $(DEPDIR)/blixem-blxcontext.Tpo -c -o blixem-blxcontext.obj `if test -f 'blxcontext.cpp'; then $(CYGPATH_W) 'blxcontext.cpp'; else $(CYGPATH_W) '$(srcdir)/blxcontext.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixem-blxcontext.Tpo $(DEPDIR)/blixem-blxcontext.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='blxcontext.cpp' object='blixem-blxcontext.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixem_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixem-blxcontext.obj `if test -f 'blxcontext.cpp'; then $(CYGPATH_W) 'blxcontext.cpp'; else $(CYGPATH_W) '$(srcdir)/blxcontext.cpp'; fi`
+
+blixemh-blxmain.o: blxmain.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixemh-blxmain.o -MD -MP -MF $(DEPDIR)/blixemh-blxmain.Tpo -c -o blixemh-blxmain.o `test -f 'blxmain.cpp' || echo '$(srcdir)/'`blxmain.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixemh-blxmain.Tpo $(DEPDIR)/blixemh-blxmain.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='blxmain.cpp' object='blixemh-blxmain.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixemh-blxmain.o `test -f 'blxmain.cpp' || echo '$(srcdir)/'`blxmain.cpp
+
+blixemh-blxmain.obj: blxmain.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixemh-blxmain.obj -MD -MP -MF $(DEPDIR)/blixemh-blxmain.Tpo -c -o blixemh-blxmain.obj `if test -f 'blxmain.cpp'; then $(CYGPATH_W) 'blxmain.cpp'; else $(CYGPATH_W) '$(srcdir)/blxmain.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixemh-blxmain.Tpo $(DEPDIR)/blixemh-blxmain.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='blxmain.cpp' object='blixemh-blxmain.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixemh-blxmain.obj `if test -f 'blxmain.cpp'; then $(CYGPATH_W) 'blxmain.cpp'; else $(CYGPATH_W) '$(srcdir)/blxmain.cpp'; fi`
+
+blixemh-blxview.o: blxview.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixemh-blxview.o -MD -MP -MF $(DEPDIR)/blixemh-blxview.Tpo -c -o blixemh-blxview.o `test -f 'blxview.cpp' || echo '$(srcdir)/'`blxview.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixemh-blxview.Tpo $(DEPDIR)/blixemh-blxview.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='blxview.cpp' object='blixemh-blxview.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixemh-blxview.o `test -f 'blxview.cpp' || echo '$(srcdir)/'`blxview.cpp
+
+blixemh-blxview.obj: blxview.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixemh-blxview.obj -MD -MP -MF $(DEPDIR)/blixemh-blxview.Tpo -c -o blixemh-blxview.obj `if test -f 'blxview.cpp'; then $(CYGPATH_W) 'blxview.cpp'; else $(CYGPATH_W) '$(srcdir)/blxview.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixemh-blxview.Tpo $(DEPDIR)/blixemh-blxview.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='blxview.cpp' object='blixemh-blxview.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixemh-blxview.obj `if test -f 'blxview.cpp'; then $(CYGPATH_W) 'blxview.cpp'; else $(CYGPATH_W) '$(srcdir)/blxview.cpp'; fi`
+
+blixemh-blxFetch.o: blxFetch.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixemh-blxFetch.o -MD -MP -MF $(DEPDIR)/blixemh-blxFetch.Tpo -c -o blixemh-blxFetch.o `test -f 'blxFetch.cpp' || echo '$(srcdir)/'`blxFetch.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixemh-blxFetch.Tpo $(DEPDIR)/blixemh-blxFetch.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='blxFetch.cpp' object='blixemh-blxFetch.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixemh-blxFetch.o `test -f 'blxFetch.cpp' || echo '$(srcdir)/'`blxFetch.cpp
+
+blixemh-blxFetch.obj: blxFetch.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixemh-blxFetch.obj -MD -MP -MF $(DEPDIR)/blixemh-blxFetch.Tpo -c -o blixemh-blxFetch.obj `if test -f 'blxFetch.cpp'; then $(CYGPATH_W) 'blxFetch.cpp'; else $(CYGPATH_W) '$(srcdir)/blxFetch.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixemh-blxFetch.Tpo $(DEPDIR)/blixemh-blxFetch.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='blxFetch.cpp' object='blixemh-blxFetch.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixemh-blxFetch.obj `if test -f 'blxFetch.cpp'; then $(CYGPATH_W) 'blxFetch.cpp'; else $(CYGPATH_W) '$(srcdir)/blxFetch.cpp'; fi`
+
+blixemh-sequencecellrenderer.o: sequencecellrenderer.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixemh-sequencecellrenderer.o -MD -MP -MF $(DEPDIR)/blixemh-sequencecellrenderer.Tpo -c -o blixemh-sequencecellrenderer.o `test -f 'sequencecellrenderer.cpp' || echo '$(srcdir)/'`sequencecellrenderer.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixemh-sequencecellrenderer.Tpo $(DEPDIR)/blixemh-sequencecellrenderer.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='sequencecellrenderer.cpp' object='blixemh-sequencecellrenderer.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixemh-sequencecellrenderer.o `test -f 'sequencecellrenderer.cpp' || echo '$(srcdir)/'`sequencecellrenderer.cpp
+
+blixemh-sequencecellrenderer.obj: sequencecellrenderer.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixemh-sequencecellrenderer.obj -MD -MP -MF $(DEPDIR)/blixemh-sequencecellrenderer.Tpo -c -o blixemh-sequencecellrenderer.obj `if test -f 'sequencecellrenderer.cpp'; then $(CYGPATH_W) 'sequencecellrenderer.cpp'; else $(CYGPATH_W) '$(srcdir)/sequencecellrenderer.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixemh-sequencecellrenderer.Tpo $(DEPDIR)/blixemh-sequencecellrenderer.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='sequencecellrenderer.cpp' object='blixemh-sequencecellrenderer.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixemh-sequencecellrenderer.obj `if test -f 'sequencecellrenderer.cpp'; then $(CYGPATH_W) 'sequencecellrenderer.cpp'; else $(CYGPATH_W) '$(srcdir)/sequencecellrenderer.cpp'; fi`
+
+blixemh-blxpanel.o: blxpanel.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixemh-blxpanel.o -MD -MP -MF $(DEPDIR)/blixemh-blxpanel.Tpo -c -o blixemh-blxpanel.o `test -f 'blxpanel.cpp' || echo '$(srcdir)/'`blxpanel.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixemh-blxpanel.Tpo $(DEPDIR)/blixemh-blxpanel.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='blxpanel.cpp' object='blixemh-blxpanel.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixemh-blxpanel.o `test -f 'blxpanel.cpp' || echo '$(srcdir)/'`blxpanel.cpp
+
+blixemh-blxpanel.obj: blxpanel.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixemh-blxpanel.obj -MD -MP -MF $(DEPDIR)/blixemh-blxpanel.Tpo -c -o blixemh-blxpanel.obj `if test -f 'blxpanel.cpp'; then $(CYGPATH_W) 'blxpanel.cpp'; else $(CYGPATH_W) '$(srcdir)/blxpanel.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixemh-blxpanel.Tpo $(DEPDIR)/blixemh-blxpanel.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='blxpanel.cpp' object='blixemh-blxpanel.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixemh-blxpanel.obj `if test -f 'blxpanel.cpp'; then $(CYGPATH_W) 'blxpanel.cpp'; else $(CYGPATH_W) '$(srcdir)/blxpanel.cpp'; fi`
+
+blixemh-bigpicture.o: bigpicture.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixemh-bigpicture.o -MD -MP -MF $(DEPDIR)/blixemh-bigpicture.Tpo -c -o blixemh-bigpicture.o `test -f 'bigpicture.cpp' || echo '$(srcdir)/'`bigpicture.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixemh-bigpicture.Tpo $(DEPDIR)/blixemh-bigpicture.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='bigpicture.cpp' object='blixemh-bigpicture.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixemh-bigpicture.o `test -f 'bigpicture.cpp' || echo '$(srcdir)/'`bigpicture.cpp
+
+blixemh-bigpicture.obj: bigpicture.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixemh-bigpicture.obj -MD -MP -MF $(DEPDIR)/blixemh-bigpicture.Tpo -c -o blixemh-bigpicture.obj `if test -f 'bigpicture.cpp'; then $(CYGPATH_W) 'bigpicture.cpp'; else $(CYGPATH_W) '$(srcdir)/bigpicture.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixemh-bigpicture.Tpo $(DEPDIR)/blixemh-bigpicture.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='bigpicture.cpp' object='blixemh-bigpicture.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixemh-bigpicture.obj `if test -f 'bigpicture.cpp'; then $(CYGPATH_W) 'bigpicture.cpp'; else $(CYGPATH_W) '$(srcdir)/bigpicture.cpp'; fi`
+
+blixemh-bigpicturegrid.o: bigpicturegrid.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixemh-bigpicturegrid.o -MD -MP -MF $(DEPDIR)/blixemh-bigpicturegrid.Tpo -c -o blixemh-bigpicturegrid.o `test -f 'bigpicturegrid.cpp' || echo '$(srcdir)/'`bigpicturegrid.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixemh-bigpicturegrid.Tpo $(DEPDIR)/blixemh-bigpicturegrid.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='bigpicturegrid.cpp' object='blixemh-bigpicturegrid.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixemh-bigpicturegrid.o `test -f 'bigpicturegrid.cpp' || echo '$(srcdir)/'`bigpicturegrid.cpp
+
+blixemh-bigpicturegrid.obj: bigpicturegrid.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixemh-bigpicturegrid.obj -MD -MP -MF $(DEPDIR)/blixemh-bigpicturegrid.Tpo -c -o blixemh-bigpicturegrid.obj `if test -f 'bigpicturegrid.cpp'; then $(CYGPATH_W) 'bigpicturegrid.cpp'; else $(CYGPATH_W) '$(srcdir)/bigpicturegrid.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixemh-bigpicturegrid.Tpo $(DEPDIR)/blixemh-bigpicturegrid.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='bigpicturegrid.cpp' object='blixemh-bigpicturegrid.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixemh-bigpicturegrid.obj `if test -f 'bigpicturegrid.cpp'; then $(CYGPATH_W) 'bigpicturegrid.cpp'; else $(CYGPATH_W) '$(srcdir)/bigpicturegrid.cpp'; fi`
+
+blixemh-detailview.o: detailview.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixemh-detailview.o -MD -MP -MF $(DEPDIR)/blixemh-detailview.Tpo -c -o blixemh-detailview.o `test -f 'detailview.cpp' || echo '$(srcdir)/'`detailview.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixemh-detailview.Tpo $(DEPDIR)/blixemh-detailview.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='detailview.cpp' object='blixemh-detailview.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixemh-detailview.o `test -f 'detailview.cpp' || echo '$(srcdir)/'`detailview.cpp
+
+blixemh-detailview.obj: detailview.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixemh-detailview.obj -MD -MP -MF $(DEPDIR)/blixemh-detailview.Tpo -c -o blixemh-detailview.obj `if test -f 'detailview.cpp'; then $(CYGPATH_W) 'detailview.cpp'; else $(CYGPATH_W) '$(srcdir)/detailview.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixemh-detailview.Tpo $(DEPDIR)/blixemh-detailview.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='detailview.cpp' object='blixemh-detailview.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixemh-detailview.obj `if test -f 'detailview.cpp'; then $(CYGPATH_W) 'detailview.cpp'; else $(CYGPATH_W) '$(srcdir)/detailview.cpp'; fi`
+
+blixemh-detailviewtree.o: detailviewtree.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixemh-detailviewtree.o -MD -MP -MF $(DEPDIR)/blixemh-detailviewtree.Tpo -c -o blixemh-detailviewtree.o `test -f 'detailviewtree.cpp' || echo '$(srcdir)/'`detailviewtree.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixemh-detailviewtree.Tpo $(DEPDIR)/blixemh-detailviewtree.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='detailviewtree.cpp' object='blixemh-detailviewtree.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixemh-detailviewtree.o `test -f 'detailviewtree.cpp' || echo '$(srcdir)/'`detailviewtree.cpp
+
+blixemh-detailviewtree.obj: detailviewtree.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixemh-detailviewtree.obj -MD -MP -MF $(DEPDIR)/blixemh-detailviewtree.Tpo -c -o blixemh-detailviewtree.obj `if test -f 'detailviewtree.cpp'; then $(CYGPATH_W) 'detailviewtree.cpp'; else $(CYGPATH_W) '$(srcdir)/detailviewtree.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixemh-detailviewtree.Tpo $(DEPDIR)/blixemh-detailviewtree.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='detailviewtree.cpp' object='blixemh-detailviewtree.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixemh-detailviewtree.obj `if test -f 'detailviewtree.cpp'; then $(CYGPATH_W) 'detailviewtree.cpp'; else $(CYGPATH_W) '$(srcdir)/detailviewtree.cpp'; fi`
+
+blixemh-blxwindow.o: blxwindow.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixemh-blxwindow.o -MD -MP -MF $(DEPDIR)/blixemh-blxwindow.Tpo -c -o blixemh-blxwindow.o `test -f 'blxwindow.cpp' || echo '$(srcdir)/'`blxwindow.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixemh-blxwindow.Tpo $(DEPDIR)/blixemh-blxwindow.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='blxwindow.cpp' object='blixemh-blxwindow.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixemh-blxwindow.o `test -f 'blxwindow.cpp' || echo '$(srcdir)/'`blxwindow.cpp
+
+blixemh-blxwindow.obj: blxwindow.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixemh-blxwindow.obj -MD -MP -MF $(DEPDIR)/blixemh-blxwindow.Tpo -c -o blixemh-blxwindow.obj `if test -f 'blxwindow.cpp'; then $(CYGPATH_W) 'blxwindow.cpp'; else $(CYGPATH_W) '$(srcdir)/blxwindow.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixemh-blxwindow.Tpo $(DEPDIR)/blixemh-blxwindow.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='blxwindow.cpp' object='blixemh-blxwindow.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixemh-blxwindow.obj `if test -f 'blxwindow.cpp'; then $(CYGPATH_W) 'blxwindow.cpp'; else $(CYGPATH_W) '$(srcdir)/blxwindow.cpp'; fi`
+
+blixemh-exonview.o: exonview.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixemh-exonview.o -MD -MP -MF $(DEPDIR)/blixemh-exonview.Tpo -c -o blixemh-exonview.o `test -f 'exonview.cpp' || echo '$(srcdir)/'`exonview.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixemh-exonview.Tpo $(DEPDIR)/blixemh-exonview.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='exonview.cpp' object='blixemh-exonview.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixemh-exonview.o `test -f 'exonview.cpp' || echo '$(srcdir)/'`exonview.cpp
+
+blixemh-exonview.obj: exonview.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixemh-exonview.obj -MD -MP -MF $(DEPDIR)/blixemh-exonview.Tpo -c -o blixemh-exonview.obj `if test -f 'exonview.cpp'; then $(CYGPATH_W) 'exonview.cpp'; else $(CYGPATH_W) '$(srcdir)/exonview.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixemh-exonview.Tpo $(DEPDIR)/blixemh-exonview.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='exonview.cpp' object='blixemh-exonview.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixemh-exonview.obj `if test -f 'exonview.cpp'; then $(CYGPATH_W) 'exonview.cpp'; else $(CYGPATH_W) '$(srcdir)/exonview.cpp'; fi`
+
+blixemh-coverageview.o: coverageview.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixemh-coverageview.o -MD -MP -MF $(DEPDIR)/blixemh-coverageview.Tpo -c -o blixemh-coverageview.o `test -f 'coverageview.cpp' || echo '$(srcdir)/'`coverageview.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixemh-coverageview.Tpo $(DEPDIR)/blixemh-coverageview.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='coverageview.cpp' object='blixemh-coverageview.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixemh-coverageview.o `test -f 'coverageview.cpp' || echo '$(srcdir)/'`coverageview.cpp
+
+blixemh-coverageview.obj: coverageview.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixemh-coverageview.obj -MD -MP -MF $(DEPDIR)/blixemh-coverageview.Tpo -c -o blixemh-coverageview.obj `if test -f 'coverageview.cpp'; then $(CYGPATH_W) 'coverageview.cpp'; else $(CYGPATH_W) '$(srcdir)/coverageview.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixemh-coverageview.Tpo $(DEPDIR)/blixemh-coverageview.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='coverageview.cpp' object='blixemh-coverageview.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixemh-coverageview.obj `if test -f 'coverageview.cpp'; then $(CYGPATH_W) 'coverageview.cpp'; else $(CYGPATH_W) '$(srcdir)/coverageview.cpp'; fi`
+
+blixemh-blxdotter.o: blxdotter.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixemh-blxdotter.o -MD -MP -MF $(DEPDIR)/blixemh-blxdotter.Tpo -c -o blixemh-blxdotter.o `test -f 'blxdotter.cpp' || echo '$(srcdir)/'`blxdotter.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixemh-blxdotter.Tpo $(DEPDIR)/blixemh-blxdotter.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='blxdotter.cpp' object='blixemh-blxdotter.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixemh-blxdotter.o `test -f 'blxdotter.cpp' || echo '$(srcdir)/'`blxdotter.cpp
+
+blixemh-blxdotter.obj: blxdotter.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixemh-blxdotter.obj -MD -MP -MF $(DEPDIR)/blixemh-blxdotter.Tpo -c -o blixemh-blxdotter.obj `if test -f 'blxdotter.cpp'; then $(CYGPATH_W) 'blxdotter.cpp'; else $(CYGPATH_W) '$(srcdir)/blxdotter.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixemh-blxdotter.Tpo $(DEPDIR)/blixemh-blxdotter.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='blxdotter.cpp' object='blixemh-blxdotter.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixemh-blxdotter.obj `if test -f 'blxdotter.cpp'; then $(CYGPATH_W) 'blxdotter.cpp'; else $(CYGPATH_W) '$(srcdir)/blxdotter.cpp'; fi`
+
+blixemh-blxFetchDb.o: blxFetchDb.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixemh-blxFetchDb.o -MD -MP -MF $(DEPDIR)/blixemh-blxFetchDb.Tpo -c -o blixemh-blxFetchDb.o `test -f 'blxFetchDb.cpp' || echo '$(srcdir)/'`blxFetchDb.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixemh-blxFetchDb.Tpo $(DEPDIR)/blixemh-blxFetchDb.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='blxFetchDb.cpp' object='blixemh-blxFetchDb.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixemh-blxFetchDb.o `test -f 'blxFetchDb.cpp' || echo '$(srcdir)/'`blxFetchDb.cpp
+
+blixemh-blxFetchDb.obj: blxFetchDb.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixemh-blxFetchDb.obj -MD -MP -MF $(DEPDIR)/blixemh-blxFetchDb.Tpo -c -o blixemh-blxFetchDb.obj `if test -f 'blxFetchDb.cpp'; then $(CYGPATH_W) 'blxFetchDb.cpp'; else $(CYGPATH_W) '$(srcdir)/blxFetchDb.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixemh-blxFetchDb.Tpo $(DEPDIR)/blixemh-blxFetchDb.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='blxFetchDb.cpp' object='blixemh-blxFetchDb.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixemh-blxFetchDb.obj `if test -f 'blxFetchDb.cpp'; then $(CYGPATH_W) 'blxFetchDb.cpp'; else $(CYGPATH_W) '$(srcdir)/blxFetchDb.cpp'; fi`
+
+blixemh-blxcontext.o: blxcontext.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixemh-blxcontext.o -MD -MP -MF $(DEPDIR)/blixemh-blxcontext.Tpo -c -o blixemh-blxcontext.o `test -f 'blxcontext.cpp' || echo '$(srcdir)/'`blxcontext.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixemh-blxcontext.Tpo $(DEPDIR)/blixemh-blxcontext.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='blxcontext.cpp' object='blixemh-blxcontext.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixemh-blxcontext.o `test -f 'blxcontext.cpp' || echo '$(srcdir)/'`blxcontext.cpp
+
+blixemh-blxcontext.obj: blxcontext.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT blixemh-blxcontext.obj -MD -MP -MF $(DEPDIR)/blixemh-blxcontext.Tpo -c -o blixemh-blxcontext.obj `if test -f 'blxcontext.cpp'; then $(CYGPATH_W) 'blxcontext.cpp'; else $(CYGPATH_W) '$(srcdir)/blxcontext.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/blixemh-blxcontext.Tpo $(DEPDIR)/blixemh-blxcontext.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='blxcontext.cpp' object='blixemh-blxcontext.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(blixemh_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o blixemh-blxcontext.obj `if test -f 'blxcontext.cpp'; then $(CYGPATH_W) 'blxcontext.cpp'; else $(CYGPATH_W) '$(srcdir)/blxcontext.cpp'; fi`
+
+# 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.
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	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"
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	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; \
+	$(am__define_uniq_tagged_files); \
+	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-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	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"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+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 \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    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 $(PROGRAMS)
+installdirs: installdirs-recursive
+installdirs-am:
+	for dir in "$(DESTDIR)$(bindir)"; 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:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+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."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-recursive
+
+clean-am: clean-binPROGRAMS clean-generic mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile 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-binPROGRAMS
+
+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 -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+	check-am clean clean-binPROGRAMS clean-generic cscopelist-am \
+	ctags ctags-am distclean distclean-compile distclean-generic \
+	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 installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \
+	uninstall-am uninstall-binPROGRAMS
+
+
+# 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/blixemApp/bigpicture.cpp b/blixemApp/bigpicture.cpp
new file mode 100644
index 0000000..4ce91e5
--- /dev/null
+++ b/blixemApp/bigpicture.cpp
@@ -0,0 +1,1547 @@
+/*  File: bigpicture.c
+ *  Author: Gemma Barson, 2009-11-23
+ *  Copyright (c) 2009 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: See bigpicture.h
+ *----------------------------------------------------------------------------
+ */
+
+#include <blixemApp/bigpicture.hpp>
+#include <blixemApp/blxcontext.hpp>
+#include <blixemApp/blxwindow.hpp>
+#include <blixemApp/detailview.hpp>
+#include <blixemApp/exonview.hpp>
+#include <blixemApp/coverageview.hpp>
+#include <blixemApp/blxpanel.hpp>
+#include <seqtoolsUtils/utilities.hpp>
+#include <math.h>
+#include <stdlib.h>
+#include <string.h>
+#include <algorithm>
+
+using namespace std;
+
+
+#define DEFAULT_GRID_NUM_HEADER_LINES   1	  /* the default number of lines of text in the grid header */
+#define DEFAULT_GRID_HEADER_Y_PAD	0	  /* the default y padding around the grid header */
+#define DEFAULT_LABEL_X_PADDING		5	  /* padding around the grid labels */
+#define DEFAULT_LABEL_Y_PADDING		-2	  /* padding around the grid labels */
+#define DEFAULT_GRID_CELL_WIDTH		100	  /* the default cell width of the grids */
+#define DEFAULT_GRID_NUM_HOZ_CELLS	5	  /* the default number of cells to show horizontally in the grids */
+#define DEFAULT_PERCENT_ID_PER_CELL	20	  /* the default %ID per vertical cell to show in the grids */
+#define DEFAULT_GRID_PERCENT_ID_MAX	100	  /* default maximum %ID to show on the scale */
+#define MIN_NUM_V_CELLS			1	  /* minimum number of vertical cells to show in the grid */
+#define GRID_SCALE_MIN_ID_PER_CELL      0.1       /* minimum %ID per grid cell */
+#define GRID_SCALE_MIN                  0         /* minimum possible value for grid scale */
+#define GRID_SCALE_MAX                  100       /* maximum possible value for grid scale */
+#define BIG_PICTURE_GRID_HEADER_NAME	"BigPictureGridHeader"
+#define BIG_PICTURE_WIDGET_NAME		"BigPictureWidget" /* name of the direct parent of the grids etc. */
+#define MAX_BIG_PICTURE_HEIGHT_RATIO	0.4	  /* max height of the big picture wrt the whole window size */
+#define BLX_SCROLL_INCREMENT_RATIO      20        /* determines speed of scrolling of big picture
+                                                   * (we use 1/nth of the display range as the scroll step) */
+
+/* Local function declarations */
+static GridHeaderProperties*	    gridHeaderGetProperties(GtkWidget *gridHeader);
+static int			    bigPictureGetInitialZoom(GtkWidget *bigPicture);
+
+static void                         drawBigPictureGridHeader(GtkWidget *header, GdkDrawable *drawable, GdkGC *gc);
+
+/***********************************************************
+ *                     Utility functions	           *
+ ***********************************************************/
+
+/* This causes a complete redraw of all the big picture components (including
+ * the coverage view, which depends on some big picture properties). */
+void bigPictureRedrawAll(GtkWidget *bigPicture)
+{
+  BigPictureProperties *properties = bigPictureGetProperties(bigPicture);
+  
+  widgetClearCachedDrawable(properties->header, NULL);
+  widgetClearCachedDrawable(properties->fwdStrandGrid, NULL);
+  widgetClearCachedDrawable(properties->revStrandGrid, NULL);
+  widgetClearCachedDrawable(properties->fwdExonView, NULL);
+  widgetClearCachedDrawable(properties->revExonView, NULL);
+  properties->coverageViewProperties()->redraw();
+  
+  gtk_widget_queue_draw(bigPicture);
+}
+
+
+/* This just causes an expose on all the big picture child widgets, and also
+ * on the coverage view */
+static void bigPictureRefreshAll(GtkWidget *bigPicture)
+{
+  BigPictureProperties *properties = bigPictureGetProperties(bigPicture);
+
+  gtk_widget_queue_draw(bigPicture);
+  gtk_widget_queue_draw(properties->coverageView());
+}
+
+
+/* This function calculates the cell size and number of cells for the big picture grids.
+ * It should be called whenever the big picture is resized or its display range changes. */
+void calculateBigPictureCellSize(GtkWidget *bigPicture, BigPictureProperties *properties)
+{
+  DEBUG_ENTER("calculateBigPictureCellSize");
+
+  BlxContext *bc = blxWindowGetContext(properties->blxWindow());
+  GtkWidget *header = properties->header;
+  GridHeaderProperties *headerProperties = gridHeaderGetProperties(header);
+  
+  /* Calculate the number of bases per cell and round it to a "nice" value from our stored list */
+  const int displayStart = convertDisplayIdxToDnaIdx(properties->displayRange.min(), bc->seqType, 1, 1, bc->numFrames, bc->displayRev, &bc->refSeqRange);
+  const int displayEnd = convertDisplayIdxToDnaIdx(properties->displayRange.max(), bc->seqType, 1, 1, bc->numFrames, bc->displayRev, &bc->refSeqRange);
+  const int displayWidth = abs(displayEnd - displayStart); /* use abs because can be negative if display reversed */
+  
+  const int defaultBasesPerCell = ceil((double)(displayWidth) / DEFAULT_GRID_NUM_HOZ_CELLS);
+  properties->basesPerCell = roundToValueFromList(defaultBasesPerCell, properties->roundValues, &properties->roundTo);
+
+  /* Adjust the cell width (and hence number of cells) proportionally wrt the rounded number of bases per cell */
+  const double defaultCellWidth = (double)(headerProperties->headerRect.width) / DEFAULT_GRID_NUM_HOZ_CELLS;
+  const double actualCellWidth = (defaultCellWidth * properties->basesPerCell) / defaultBasesPerCell;
+  properties->numHCells = ceil((double)headerProperties->headerRect.width / actualCellWidth);
+  
+  DEBUG_EXIT("calculateBigPictureCellSize returning");
+}
+
+
+/* Utility to convert the given decimal number (percent) to text 
+ * returned in 'text'). showDecimal indicates whether it should be
+ * shown as a decimal or not. If abbrev is true, 1000 is abbreviated 
+ * as 1k etc. 'unit' is a string displayed after the text and can be
+ * an empty string. */
+static void drawNumericLabel(char *text, 
+                             const gdouble percent,
+                             const gboolean showDecimal, 
+                             const gboolean abbrev, 
+                             const char *unit)
+{
+  if (!text)
+    {
+      return;
+    }
+  
+  if (showDecimal)
+    {
+      sprintf(text, "%1.1f%s", percent, unit);
+    }
+  else 
+    {
+      sprintf(text, "%d%s", (int)percent, unit);
+    
+      if (abbrev)
+        {
+          /* Abbreviate the number so 1000 becomes 1k, 1000000 becomes 1M etc. */
+          const int len = strlen(text);
+          int i = 3;
+
+          for ( ; i < len; i += 3)
+            {
+              char suffix = 0;
+
+              switch (i)
+                {
+                  case 3:  suffix = 'k'; break;
+                  case 6:  suffix = 'M'; break;
+                  case 9:  suffix = 'G'; break;
+                  case 12: suffix = 'T'; break;
+                  case 15: suffix = 'P'; break;
+                  case 18: suffix = 'E'; break;
+                  case 21: suffix = 'Z'; break;
+                  case 24: suffix = 'Y'; break;
+                  default: break;
+                };
+  
+              if (suffix && text[len-i]=='0' && text[len-i+1]=='0' && text[len-i+2]=='0')
+                {
+                  text[len-i] = suffix;
+                  text[len-i+1] = '\0';
+                }
+            }
+        }
+    }
+}
+
+
+static void drawVerticalGridLineHeaders(GtkWidget *header, 
+					GtkWidget *bigPicture, 
+                                        GdkDrawable *drawable,
+					GdkGC *gc, 
+					const GdkColor* const textColor, 
+					const GdkColor* const lineColor,
+                                        const gboolean abbrev)
+{
+  BlxContext *bc = bigPictureGetContext(bigPicture);
+  GridHeaderProperties *headerProperties = gridHeaderGetProperties(header);
+  BigPictureProperties *bpProperties = bigPictureGetProperties(bigPicture);
+  
+  /* Get the display range in dna coords */
+  IntRange dnaDispRange;
+  convertDisplayRangeToDnaRange(&bpProperties->displayRange, bc->seqType, bc->numFrames, bc->displayRev, &bc->refSeqRange, &dnaDispRange);
+
+  const int direction = bc->displayRev ? -1 : 1; /* to subtract instead of add when display reversed */
+  
+  /* Get the first base index and round it to a nice round number. We'll offset all of the gridlines 
+   * by the distance between this and the real start coord. */
+  const int firstBaseIdx = roundToValue(bc->displayRev ? dnaDispRange.max() : dnaDispRange.min(), bpProperties->roundTo);
+  
+  /* Calculate the top and bottom heights for the lines. */
+  const gint bottomBorder = headerProperties->headerRect.y + headerProperties->headerRect.height;
+  const gint topBorder = bottomBorder - headerProperties->markerHeight;
+
+  const int minX = headerProperties->headerRect.x;
+  const int maxX = headerProperties->headerRect.x + headerProperties->headerRect.width;
+
+  /* Loop through each grid cell */
+  gint hCell = 0;
+  for ( ; hCell <= bpProperties->numHCells; ++hCell)
+    {
+      /* Draw the label, showing which base index is at this x coord */
+      int numBasesFromLeft = bpProperties->basesPerCell * hCell;
+      int baseIdx = firstBaseIdx + (numBasesFromLeft * direction);
+
+      const int x = convertBaseIdxToRectPos(baseIdx, &headerProperties->headerRect, &dnaDispRange, TRUE, bc->displayRev, TRUE);
+      
+      if (x > minX && x < maxX)
+	{
+          /* If we're displaying negative coords, negate the base index */
+          if (bc->displayRev && bc->flags[BLXFLAG_NEGATE_COORDS])
+            baseIdx *= -1;
+            
+	  gdk_gc_set_foreground(gc, textColor);
+	  gchar text[numDigitsInInt(baseIdx) + 1];
+          drawNumericLabel(text, baseIdx, FALSE, abbrev, "");
+
+	  PangoLayout *layout = gtk_widget_create_pango_layout(header, text);
+	  gdk_draw_layout(drawable, gc, x, 0, layout);
+	  g_object_unref(layout);
+	  
+	  /* Draw a marker line (small cosmetic touch to better join the label to the grid below) */
+	  gdk_gc_set_foreground(gc, lineColor);
+	  gdk_draw_line (drawable, gc, x, topBorder, x, bottomBorder);
+	}
+    }
+}
+
+
+/* Draw the vertical gridlines for a big picture component. This is a generic routine used
+ * by the grids and the coverage view, so that they all have their gridlines spaced the same */
+void drawVerticalGridLines(GdkRectangle *drawingRect,
+			   GdkRectangle *highlightRect,
+			   const int yPadding,
+			   BlxContext *bc,
+			   BigPictureProperties *bpProperties,
+			   GdkDrawable *drawable)
+{
+  /* Get the display range in dna coords */
+  IntRange dnaDispRange;
+  convertDisplayRangeToDnaRange(&bpProperties->displayRange, bc->seqType, bc->numFrames, bc->displayRev, &bc->refSeqRange, &dnaDispRange);
+  
+  const int direction = bc->displayRev ? -1 : 1; /* to subtract instead of add when display reversed */
+  
+  /* Get the first base index (in terms of the nucleotide coords) and round it to a nice round
+   * number. We'll offset all of the gridlines by the distance between this and the real start coord. */
+  const int realFirstBaseIdx = convertDisplayIdxToDnaIdx(bpProperties->displayRange.min(), bc->seqType, 1, 1, bc->numFrames, bc->displayRev, &bc->refSeqRange);
+  const int firstBaseIdx = roundToValue(realFirstBaseIdx, bpProperties->roundTo);
+  
+  /* Calculate the top and bottom heights for the lines. */
+  const gint topBorder = highlightRect->y - yPadding;
+  const gint bottomBorder = drawingRect->y + drawingRect->height;
+  
+  const int minX = drawingRect->x;
+  const int maxX = drawingRect->x + drawingRect->width;
+  
+  gint hCell = 0;
+  for ( ; hCell <= bpProperties->numHCells; ++hCell)
+    {
+      /* Get the base index for this grid line and calc its x coord */
+      int numBasesFromLeft = bpProperties->basesPerCell * hCell;
+      int baseIdx = firstBaseIdx + (numBasesFromLeft * direction);
+      
+      const int x = convertBaseIdxToRectPos(baseIdx, drawingRect, &dnaDispRange, TRUE, bc->displayRev, TRUE);
+      
+      if (x > minX && x < maxX)
+	{
+	  GdkGC *gc = gdk_gc_new(drawable);
+
+	  GdkColor *lineColor = getGdkColor(BLXCOLOR_GRID_LINE, bc->defaultColors, FALSE, bc->usePrintColors);
+	  gdk_gc_set_foreground(gc, lineColor);
+	  gdk_draw_line (drawable, gc, x, topBorder, x, bottomBorder);
+          
+          g_object_unref(gc);
+	}
+    }
+}
+
+
+/* Get the standard height for grid cells */
+gint bigPictureGetCellHeight(GtkWidget *bigPicture)
+{
+  /* Base the cell height on the font height */
+  BigPictureProperties *properties = bigPictureGetProperties(bigPicture);
+  return roundNearest(properties->charHeight() + (gdouble)(2 * DEFAULT_LABEL_Y_PADDING));
+}
+
+
+/* Draw the horizontal grid lines for the big picture view */
+void drawHorizontalGridLines(GtkWidget *widget,
+			     GtkWidget *bigPicture,
+			     GdkRectangle *drawingRect,
+			     BlxContext *bc,
+			     BigPictureProperties *bpProperties,
+			     GdkDrawable *drawable,
+			     const gint numCells, 
+			     const gdouble rangePerCell, 
+			     const gdouble maxVal,
+                             const gboolean abbrev,
+			     const char *unit)
+{
+  const gint rightBorder = drawingRect->x + drawingRect->width;
+  
+  GdkColor *textColor = getGdkColor( BLXCOLOR_GRID_TEXT, bc->defaultColors, FALSE, bc->usePrintColors);
+  GdkGC *textGc = gdk_gc_new(drawable);
+  gdk_gc_set_foreground(textGc, textColor);
+  
+  GdkColor *lineColor = getGdkColor(BLXCOLOR_GRID_LINE, bc->defaultColors, FALSE, bc->usePrintColors);
+  GdkGC *lineGc = gdk_gc_new(drawable);
+  gdk_gc_set_foreground(lineGc, lineColor);
+  
+  /* Show decimal places if the range per cell is a fraction of a percent */
+  const gboolean showDecimal = (rangePerCell < 1.0);
+  const int cellHeight = bigPictureGetCellHeight(bigPicture);
+  
+  gint vCell = 0;
+  for ( ; vCell <= numCells; ++vCell)
+    {
+      gint y = drawingRect->y + (gint)((gdouble)vCell * cellHeight);
+      gint x = drawingRect->x - DEFAULT_LABEL_X_PADDING;
+      
+      /* Label this gridline with the %ID */
+      gdouble percent = maxVal - (rangePerCell * vCell);
+      char text[bpProperties->leftBorderChars + 3]; /* +3 to include decimal point, 1dp, and terminating nul */
+
+      drawNumericLabel(text, percent, showDecimal, abbrev, unit);
+      
+      PangoLayout *layout = gtk_widget_create_pango_layout(widget, text);
+      
+      int width = UNSET_INT;
+      pango_layout_get_pixel_size(layout, &width, NULL);
+
+      gdk_draw_layout(drawable, textGc, x - width, y - cellHeight/2, layout);
+      g_object_unref(layout);
+      
+      /* Draw the gridline */
+      gdk_draw_line (drawable, lineGc, drawingRect->x, y, rightBorder, y);
+    }
+  
+  g_object_unref(lineGc);
+  g_object_unref(textGc);
+}
+
+
+
+/* Refresh the header - clears and redraws its bitmap */
+static void redrawBigPictureGridHeader(GtkWidget *header)
+{
+  /* Check that the header is shown on screen */
+  if (GTK_LAYOUT(header)->bin_window)
+    {
+      /* Create a new bitmap to draw on to and set it in the widget. (This automatically
+       * deletes the old one, if there is one.) */
+      GdkDrawable *bitmap = gdk_pixmap_new(GTK_LAYOUT(header)->bin_window, header->allocation.width, header->allocation.height, -1);
+      gdk_drawable_set_colormap(bitmap, gdk_colormap_get_system());
+      widgetSetDrawable(header, bitmap);
+
+      /* Clear the bitmap to the background color */
+      GdkGC *gc = gdk_gc_new(bitmap);
+      
+      GtkStyle *style = gtk_widget_get_style(header);
+      GdkColor *bgColor = &style->bg[GTK_STATE_NORMAL];
+      gdk_gc_set_foreground(gc, bgColor);
+      gdk_draw_rectangle(bitmap, gc, TRUE, 0, 0, header->allocation.width, header->allocation.height);
+
+      /* Draw the header */
+      drawBigPictureGridHeader(header, bitmap, gc);
+      
+      g_object_unref(gc);
+    }
+}
+
+
+
+/* Draw the big picture header onto the given drawable */
+static void drawBigPictureGridHeader(GtkWidget *header, GdkDrawable *drawable, GdkGC *gc)
+{
+  GridHeaderProperties *properties = gridHeaderGetProperties(header);
+  BlxContext *bc = bigPictureGetContext(properties->bigPicture);
+  
+  /* Set the drawing properties */
+  gdk_gc_set_subwindow(gc, GDK_INCLUDE_INFERIORS);
+  
+  /* First, highlight any assembly gaps */
+  /* Get the display range in dna coords */
+  const IntRange* const displayRange = bigPictureGetDisplayRange(properties->bigPicture);
+  IntRange bpRange;
+  convertDisplayRangeToDnaRange(displayRange, bc->seqType, bc->numFrames, bc->displayRev, &bc->refSeqRange, &bpRange);
+  
+  GdkColor *gapColor = getGdkColor(BLXCOLOR_ASSEMBLY_GAP, bc->defaultColors, FALSE, bc->usePrintColors);
+  drawAssemblyGaps(header, drawable, gapColor, bc->displayRev, &properties->headerRect, &bpRange, bc->featureLists[BLXMSP_GAP]);
+  
+  /* Draw the grid headers */
+  drawVerticalGridLineHeaders(header, 
+			      properties->bigPicture, 
+                              drawable,
+			      gc,
+			      getGdkColor(BLXCOLOR_GRID_TEXT, bc->defaultColors, FALSE, bc->usePrintColors), 
+			      getGdkColor(BLXCOLOR_GRID_LINE, bc->defaultColors, FALSE, bc->usePrintColors),
+                              FALSE);
+}
+
+
+/* Recalculate the borders for the grid header. Should be called after a resize */
+void calculateGridHeaderBorders(GtkWidget *header)
+{
+  GridHeaderProperties *properties = gridHeaderGetProperties(header);
+  BigPictureProperties *bigPictureProperties = bigPictureGetProperties(properties->bigPicture);
+  
+  /* Calculate the size of the grid header (zero height if it does not have one) */
+  properties->headerRect.x = roundNearest(bigPictureProperties->contentXPos());
+  properties->headerRect.y = 0;
+  properties->headerRect.width = bigPictureProperties->contentWidth();
+  properties->headerRect.height = properties->refButton->allocation.height + (properties->headerYPad * 2);
+  
+  properties->markerHeight = properties->headerRect.height - roundNearest(bigPictureProperties->charHeight() * (gdouble)properties->numHeaderLines);
+  if (properties->markerHeight < 0)
+    properties->markerHeight = 0;
+  
+  gtk_layout_set_size(GTK_LAYOUT(header), header->allocation.width, properties->headerRect.height);
+  gtk_widget_set_size_request(header, 0, properties->headerRect.height);
+}
+
+
+/* Add the given child to the big picture. This is separated out into its
+ * own function in case we want to change the container type in the future. */
+static void addChildToBigPicture(GtkWidget *container, GtkWidget *child, gboolean expand)
+{
+  if (GTK_IS_BOX(container))
+    {
+      gtk_box_pack_start(GTK_BOX(container), child, expand, FALSE, 0);
+    }
+}
+
+
+/* This function removes the grids from the big picture and re-adds them in the
+ * correct order according to the displayRev flag. It should be called every
+ * time the strands are toggled. It assumes the two grids are both already in the 
+ * bigPicture container, and that the properties have been set for all 3 widgets. */
+void refreshGridOrder(GtkWidget *bigPicture)
+{
+  BigPictureProperties *bpProperties = bigPictureGetProperties(bigPicture);
+
+  GtkWidget *fwdStrandGrid = bigPictureGetFwdGrid(bigPicture);
+  GtkWidget *revStrandGrid = bigPictureGetRevGrid(bigPicture);
+  GtkWidget *fwdExonView = bigPictureGetFwdExonView(bigPicture);
+  GtkWidget *revExonView = bigPictureGetRevExonView(bigPicture);
+  GtkWidget *coverageView = bpProperties->coverageView();
+  
+  /* Increase the reference count to make sure the widgets aren't destroyed when we remove them. */
+  g_object_ref(fwdStrandGrid);
+  g_object_ref(revStrandGrid);
+  g_object_ref(fwdExonView);
+  g_object_ref(revExonView);
+  g_object_ref(coverageView);
+  
+  /* Find the direct container of the grids etc and remove them */
+  GtkWidget *bpContainer = getNamedChildWidget(bigPicture, BIG_PICTURE_WIDGET_NAME);
+  gtk_container_remove(GTK_CONTAINER(bpContainer), fwdStrandGrid);
+  gtk_container_remove(GTK_CONTAINER(bpContainer), revStrandGrid);
+  gtk_container_remove(GTK_CONTAINER(bpContainer), fwdExonView);
+  gtk_container_remove(GTK_CONTAINER(bpContainer), revExonView);
+  gtk_container_remove(GTK_CONTAINER(bpContainer), coverageView);
+  
+  /* Add them back, with the forward-strand grid at the top and the reverse-strand grid
+   * at the bottom, or vice versa if the strands are toggled. */
+  if (bigPictureGetDisplayRev(bigPicture))
+    {
+      addChildToBigPicture(bpContainer, revStrandGrid, FALSE);
+      addChildToBigPicture(bpContainer, revExonView, FALSE);
+      addChildToBigPicture(bpContainer, fwdExonView, FALSE);
+      addChildToBigPicture(bpContainer, fwdStrandGrid, FALSE);
+    }
+  else
+    {
+      addChildToBigPicture(bpContainer, fwdStrandGrid, FALSE);
+      addChildToBigPicture(bpContainer, fwdExonView, FALSE);
+      addChildToBigPicture(bpContainer, revExonView, FALSE);
+      addChildToBigPicture(bpContainer, revStrandGrid, FALSE);
+    }
+
+  /* Coverage view is always at the bottom for now because it covers both strands */
+  addChildToBigPicture(bpContainer, coverageView, FALSE);
+  
+  /* Decrease the ref count again */
+  g_object_unref(fwdStrandGrid);
+  g_object_unref(revStrandGrid);
+  g_object_unref(fwdExonView);
+  g_object_unref(revExonView);
+  
+  /* Must show all child widgets because some of them may not have been in this parent before.
+   * (Just calling gtk_widget_show on the individual trees doesn't seem to work.)
+   * However, we then need to re-hide any that may have been previously hidden by the user. */
+  gtk_widget_show_all(bigPicture);
+  gtk_container_foreach(GTK_CONTAINER(bigPicture), hideUserHiddenWidget, NULL);  
+}
+
+
+/* This recalculates the highlight box positions for all relevant child
+ * widgets of the big picture */
+static void updateHighlightBox(GtkWidget *bigPicture, BigPictureProperties *properties)
+{
+  callFuncOnAllBigPictureGrids(bigPicture, (gpointer)calculateGridHighlightBoxBorders);
+  callFuncOnAllBigPictureExonViews(bigPicture, (gpointer)calculateExonViewHighlightBoxBorders);
+  
+  properties->coverageViewProperties()->calculateHighlightBoxBorders();
+}
+
+
+/* This should be called to do the required updates after the big picture range has changed */
+static void onBigPictureRangeChanged(GtkWidget *bigPicture, BigPictureProperties *properties)
+{
+  /* Recalculate the exon view height, because it may have changed with more/less
+   * exons being scrolled into view */
+  calculateExonViewHeight(properties->fwdExonView);
+  calculateExonViewHeight(properties->revExonView);
+
+  /* We must force a resize, because the size-allocate signal does not
+   * get emitted if the exon views have shrunk, only if they have expanded. */
+  forceResize(bigPicture);
+      
+  /* Do a complete redraw */
+  bigPictureRedrawAll(bigPicture);
+
+  /* Refresh the dotter dialog, if it's open, because it may be tracking the big picture range */
+  refreshDialog(BLXDIALOG_DOTTER, properties->blxWindow());
+}
+
+
+/* Set the display range for the big picture, based on the given width (i.e. number of
+ * bases wide). Keeps the display centred on the same range that is shown in the detail view.
+ * If recalcHighlightBox is true, the highlight box borders are recalculated. */
+static void setBigPictureDisplayRange(GtkWidget *bigPicture, 
+                                      BigPictureProperties *properties, 
+                                      int width, 
+                                      const gboolean keepCentered)
+{
+  DEBUG_ENTER("setBigPictureDisplayRange");
+
+  GtkWidget *detailView = blxWindowGetDetailView(properties->blxWindow());
+  IntRange *detailViewRange = detailViewGetDisplayRange(detailView);
+
+  IntRange *displayRange = &properties->displayRange;
+  IntRange *fullRange = blxWindowGetFullRange(properties->blxWindow());
+  
+  int detailViewWidth = detailViewRange->max() - detailViewRange->min();
+  int maxWidth = fullRange->max() - fullRange->min();
+  
+  gboolean changedRange = FALSE;
+
+  if (width < detailViewWidth)
+    {
+      /* Don't display less than the detail view range */
+      displayRange->set(detailViewRange);
+      width = displayRange->max() - displayRange->min();
+      changedRange = TRUE;
+    }
+  else if (width >= maxWidth)
+    {
+      /* Don't display more than the full range of the reference sequence */
+      changedRange = displayRange->min() != fullRange->min() || displayRange->max() != fullRange->max();
+      displayRange->set(fullRange);
+    }
+  else if (keepCentered)
+    {
+      /* Keep the view centred on what's visible in the detail view */
+      const int newcentre = detailViewRange->centre();
+
+      /* Try to display an equal amount either side of the centre */
+      const int offset = roundNearest((double)width / 2.0);
+
+      displayRange->setMin(newcentre - offset);
+      displayRange->setMax(displayRange->min() + width); // uses updated min
+      
+      changedRange = TRUE;
+    }
+  
+  if (!changedRange) /* i.e. not already done */
+    {
+      /* See if we need to scroll the big picture range so that it completely 
+       * contains the detail-view range.
+       * NB We use a shorter big picture range so that we never get the highlight
+       * box bumped right up against the edge of the big picture; UNLESS the
+       * detail view range is larger than that limited range, in which case use
+       * the original range. NOTE: disabled the border because it messes up the
+       * initial big picture range when it is specified using the zoom-range arg */
+      const gdouble borderFraction = 0.0;
+      int border = displayRange->length() * borderFraction;
+
+      if (detailViewRange->length() > width - (2 * border))
+        border = 0;
+      
+      int offset = (displayRange->min() + border) - detailViewRange->min();
+      
+      if (offset > 0)
+        {
+          displayRange->setMin(displayRange->min() - offset);
+          displayRange->setMax(displayRange->min() + width); //uses the updated min
+          changedRange = TRUE;
+        }
+      
+      offset = detailViewRange->max() - (displayRange->max() - border);
+      
+      if (offset > 0)
+        {
+          displayRange->setMax(displayRange->max() + offset);
+          displayRange->setMin(displayRange->max() - width); //uses the updated max
+          changedRange = TRUE;
+        }
+    }
+
+  if (changedRange)
+    {
+      displayRange->boundsLimit(fullRange, TRUE);
+      onBigPictureRangeChanged(bigPicture, properties);
+    }
+  
+  updateHighlightBox(bigPicture, properties);
+  bigPictureRefreshAll(bigPicture);
+
+  DEBUG_EXIT("setBigPictureDisplayRange returning");
+}
+
+
+/* This function should be called every time the detail view display range has 
+ * changed. It updates the position of the highlight box on the big picture and,
+ * if necessary, scrolls to keep the highlight box in range. */
+void refreshBigPictureDisplayRange(GtkWidget *bigPicture, const gboolean keepCentered)
+{
+  DEBUG_ENTER("refreshBigPictureDisplayRange");
+
+  BigPictureProperties *properties = bigPictureGetProperties(bigPicture);
+  properties->refreshDisplayRange(keepCentered);
+  
+  DEBUG_EXIT("refreshBigPictureDisplayRange returning");
+}
+
+
+/* Given the centre x coord of a rectangle and its width, find the x coord of the 
+ * right edge. If an outer rectangle is given, limit the coord so that the
+ * rectangle lies entirely within the outer rect. */
+int getRightCoordFromCentre(const int centreCoord, const int width, const GdkRectangle *outerRect)
+{
+  int rightCoord = centreCoord + roundNearest((double)width / 2.0);
+  
+  if (outerRect)
+    {
+      if (rightCoord > outerRect->x + outerRect->width)
+	rightCoord = outerRect->x + outerRect->width;
+      else
+	{
+	  int rightCoordMin = outerRect->x + width;
+	  
+	  if (rightCoord < rightCoordMin) 
+	    {
+	      rightCoord = rightCoordMin;
+	    }
+	}
+    }
+  
+  return rightCoord;
+}
+
+
+/* Zoom the big picture in/out. Just halves or doubles the current display range. */
+void zoomBigPicture(GtkWidget *bigPicture, const gboolean zoomIn)
+{
+  BigPictureProperties *properties = bigPictureGetProperties(bigPicture);
+  IntRange *displayRange = &properties->displayRange;
+  int newWidth = UNSET_INT;
+  
+  if (zoomIn)
+    {
+      newWidth = roundNearest(((double)(displayRange->max() - displayRange->min())) / 2.0);
+    }
+  else
+    {
+      newWidth = (displayRange->max() - displayRange->min()) * 2;
+    }
+
+  setBigPictureDisplayRange(bigPicture, properties, newWidth, TRUE);
+  calculateBigPictureCellSize(bigPicture, properties);
+}
+
+
+/* Zoom the big picture out to view the whole reference sequence */
+void zoomWholeBigPicture(GtkWidget *bigPicture)
+{
+  BigPictureProperties *properties = bigPictureGetProperties(bigPicture);
+  IntRange *displayRange = &properties->displayRange;
+  IntRange *fullRange = blxWindowGetFullRange(properties->blxWindow());
+  
+  /* Check we're not already showing the whole range */
+  if (displayRange->min() != fullRange->min() || displayRange->max() != fullRange->max())
+    {
+      setBigPictureDisplayRange(bigPicture, properties, fullRange->max() - fullRange->min(), TRUE);
+      calculateBigPictureCellSize(bigPicture, properties);
+    }
+}
+
+
+/* Calculate the number of cells to show vertically in the grids, and update the
+ * grid's percent-ID range to be a full number of cells. */
+void calculateNumVCells(GtkWidget *bigPicture)
+{
+  BigPictureProperties *properties = bigPictureGetProperties(bigPicture);
+  
+  if (properties->idPerCell == 0.0)
+    {
+      g_warning("%%ID per cell setting is 0. Cannot calculate number of cells.\n");
+      return;
+    }
+  
+  const double idRangeLen = properties->percentIdRange.max - properties->percentIdRange.min;
+  properties->numVCells = ceil(idRangeLen / properties->idPerCell); 
+
+  if (properties->numVCells < MIN_NUM_V_CELLS)
+    {
+      properties->numVCells = MIN_NUM_V_CELLS;
+    }
+  
+  properties->percentIdRange.min = properties->percentIdRange.max - (properties->numVCells * properties->idPerCell);
+}
+
+
+/* update function to be called when the percent ID range or percent-ID-per-cell
+ * values have been changed */
+static void updateOnPercentIdChanged(GtkWidget *bigPicture)
+{
+  if (bigPicture)
+    {
+      BigPictureProperties *properties = bigPictureGetProperties(bigPicture);
+  
+      if (properties)
+        {
+          calculateNumVCells(bigPicture);
+  
+          callFuncOnAllBigPictureGrids(bigPicture, (gpointer)calculateGridBorders);
+          callFuncOnAllBigPictureGrids(bigPicture, (gpointer)calculateGridHighlightBoxBorders);
+          properties->coverageViewProperties()->calculateBorders();
+  
+          bigPictureRedrawAll(bigPicture);
+        }
+    }
+}
+
+
+/* Prepare the big picture for printing - this draws normally-transient 
+ * components onto the cached drawable so that they get included in the print.
+ * bigPictureRedrawAll should be called afterwards to remove the transient 
+ * components. */
+void bigPicturePrepareForPrinting(GtkWidget *bigPicture)
+{
+  BigPictureProperties *properties = bigPictureGetProperties(bigPicture);
+  
+  callFuncOnAllBigPictureGrids(bigPicture, (gpointer)gridPrepareForPrinting);
+  callFuncOnAllBigPictureExonViews(bigPicture, (gpointer)exonViewPrepareForPrinting);
+  properties->coverageViewProperties()->prepareForPrinting();
+}
+
+
+/***********************************************************
+ *			    Events			   *
+ ***********************************************************/
+
+static void onZoomInBigPicture(GtkButton *button, gpointer data)
+{
+  GtkWidget *bigPicture = GTK_WIDGET(data);
+  zoomBigPicture(bigPicture, TRUE);
+}
+
+
+static void onZoomOutBigPicture(GtkButton *button, gpointer data)
+{
+  GtkWidget *bigPicture = GTK_WIDGET(data);
+  zoomBigPicture(bigPicture, FALSE);
+}
+
+
+static void onZoomWholeBigPicture(GtkButton *button, gpointer data)
+{
+  GtkWidget *bigPicture = GTK_WIDGET(data);
+  zoomWholeBigPicture(bigPicture);
+}
+
+
+static gboolean onExposeGridHeader(GtkWidget *header, GdkEventExpose *event, gpointer data)
+{
+  GdkDrawable *window = GTK_LAYOUT(header)->bin_window;
+  
+  if (window)
+    {
+      /* Just push the stored bitmap onto the screen */
+      GdkDrawable *bitmap = widgetGetDrawable(header);
+
+      if (!bitmap)
+        {
+          /* If the cache is empty, create it now. */
+	  redrawBigPictureGridHeader(header);
+	  bitmap = widgetGetDrawable(header);
+        }
+      
+      if (bitmap)
+        {
+          GdkGC *gc = gdk_gc_new(window);
+          gdk_draw_drawable(window, gc, bitmap, 0, 0, 0, 0, -1, -1);
+          g_object_unref(gc);
+        }
+    }
+  
+  return TRUE;
+}
+
+
+/* Scroll the big picture left by one increment */
+void scrollBigPictureLeftStep(GtkWidget *bigPicture)
+{
+  BigPictureProperties *properties = bigPictureGetProperties(bigPicture);
+  BlxContext *bc = bigPictureGetContext(bigPicture);
+  
+  IntRange *displayRange = &properties->displayRange;
+  
+  if (displayRange->min() > bc->fullDisplayRange.min())
+    {
+      /* Check we can scroll the full increment amount. If not, scroll to the end of the full range */
+      int diff = displayRange->length() / BLX_SCROLL_INCREMENT_RATIO;
+
+      if (displayRange->min() - diff < bc->fullDisplayRange.min())
+        diff = displayRange->min() - bc->fullDisplayRange.min();
+
+      /* Update the range */
+      displayRange->set(displayRange->min() - diff, displayRange->max() - diff);
+
+      /* Update */
+      onBigPictureRangeChanged(bigPicture, properties);
+      updateHighlightBox(bigPicture, properties);
+      bigPictureRefreshAll(bigPicture);
+
+      /* Scroll the detail view too if necessary to keep it visible */
+      detailViewScrollToKeepInRange(bigPictureGetDetailView(bigPicture), displayRange);
+    }
+}
+
+
+/* Scroll the big picture right by one increment */
+void scrollBigPictureRightStep(GtkWidget *bigPicture)
+{
+  BigPictureProperties *properties = bigPictureGetProperties(bigPicture);
+  BlxContext *bc = bigPictureGetContext(bigPicture);
+  
+  IntRange *displayRange = &properties->displayRange;
+  
+  /* Check we're not already at the max of the full range. */
+  if (displayRange->max() < bc->fullDisplayRange.max())
+    {
+      /* Check we can scroll the full increment amount. If not, scroll to the end of the full range */
+      int diff = displayRange->length() / BLX_SCROLL_INCREMENT_RATIO;
+
+      if (displayRange->max() + diff > bc->fullDisplayRange.max())
+        diff = bc->fullDisplayRange.max() - displayRange->max();
+
+      /* Adjust the range */
+      displayRange->set(displayRange->min() + diff, displayRange->max() + diff);
+
+      /* Update */
+      onBigPictureRangeChanged(bigPicture, properties);
+      updateHighlightBox(bigPicture, properties);
+      bigPictureRefreshAll(bigPicture);
+
+      /* Scroll the detail view too if necessary to keep it visible */
+      detailViewScrollToKeepInRange(bigPictureGetDetailView(bigPicture), displayRange);
+    }
+}
+
+
+/* Recursively loop through the children of the given widget and sum the heights of any
+ * that are grid or exon-view widgets. */
+static int getBigPictureChildrenHeights(GtkWidget *widget, const int heightIn)
+{
+  GList *children = gtk_container_get_children(GTK_CONTAINER(widget));
+  GList *child = children;
+  int height = heightIn;
+  
+  for ( ; child; child = child->next)
+    {
+      GtkWidget *childWidget = GTK_WIDGET(child->data);
+
+      if (GTK_WIDGET_VISIBLE(childWidget))
+	{
+	  const gchar *name = gtk_widget_get_name(childWidget);
+      
+	  if (stringsEqual(name, BIG_PICTURE_GRID_NAME, TRUE) || 
+	      stringsEqual(name, BIG_PICTURE_EXON_VIEW_NAME, TRUE) ||
+	      stringsEqual(name, BIG_PICTURE_GRID_HEADER_NAME, TRUE))
+	    {
+	      height += childWidget->allocation.height;
+	    }
+	  else if (GTK_IS_CONTAINER(childWidget))
+	    {
+	      height += getBigPictureChildrenHeights(childWidget, height);
+	    }
+	}
+    }
+
+  g_list_free(children);
+    
+  return height;
+}
+
+
+/* Calculate the size of the big picture's children and set its size request to fit them in
+ * but don't go greater than the maximum. This is called when the exon view or grids change size
+ * etc. to make sure we only use as much space as necessary. Note that because the big picture
+ * is in a paned window this does not have an effect if the user has changed (i.e. specifically
+ * set) the pane size, which makes sense but it would be nice to have some way to be able to 
+ * revert to the original behaviour */
+static void bigPictureRecalculateSize(GtkWidget *bigPicture)
+{
+  DEBUG_ENTER("bigPictureRecalculateSize");
+
+  int height = getBigPictureChildrenHeights(bigPicture, 0);
+  height += 4; /* not sure where this extra space comes from (padding or something?) */
+
+  GtkWidget *blxWindow = bigPictureGetBlxWindow(bigPicture);
+  int maxHeight = blxWindow->allocation.height * MAX_BIG_PICTURE_HEIGHT_RATIO;
+  
+  height = min(height, maxHeight);
+  gtk_widget_set_size_request(bigPicture, -1, height);
+  
+  DEBUG_EXIT("bigPictureRecalculateSize returning");
+}
+
+
+/* Callback called when the big picture widget's size has changed */
+static void onSizeAllocateBigPicture(GtkWidget *bigPicture, GtkAllocation *allocation, gpointer data)
+{
+  DEBUG_ENTER("onSizeAllocateBigPicture");
+
+  /* Recalculate the widget size based on its child widget sizes. Note that we
+   * don't need to do anything else here because onScrollPosChanged will be 
+   * called, which does all the updating of the big picture range. */
+  bigPictureRecalculateSize(bigPicture);
+  
+  bigPictureRedrawAll(bigPicture);
+  
+  DEBUG_EXIT("onSizeAllocateBigPicture returning");
+}
+
+
+/***********************************************************
+ *                 Class member functions                  *
+ ***********************************************************/
+
+BigPictureProperties::BigPictureProperties(GtkWidget *bigPicture_in, 
+                                           GtkWidget *blxWindow_in, 
+                                           BlxContext *bc_in,
+                                           CoverageViewProperties *coverageViewP_in, 
+                                           GtkWidget *header_in, 
+                                           GtkWidget *fwdStrandGrid_in,
+                                           GtkWidget *revStrandGrid_in,
+                                           GtkWidget *fwdExonView_in,
+                                           GtkWidget *revExonView_in,
+                                           int previewBoxCentre_in,
+                                           const IntRange* const initRange_in,
+                                           const IntRange* const fullRange_in,
+                                           const int initialZoom_in,
+                                           const gdouble lowestId_in) :
+  BlxPanel(bigPicture_in, blxWindow_in, bc_in, coverageViewP_in, previewBoxCentre_in)
+{
+  header = header_in;
+  fwdStrandGrid = fwdStrandGrid_in;
+  revStrandGrid = revStrandGrid_in;
+  fwdExonView = fwdExonView_in;
+  revExonView = revExonView_in;
+
+  numHCells = UNSET_INT;
+  basesPerCell = UNSET_INT;
+  roundTo = 25;
+      
+  numVCells = UNSET_INT;
+  idPerCell = DEFAULT_PERCENT_ID_PER_CELL;
+  percentIdRange.min = lowestId_in;
+  percentIdRange.max = (gdouble)DEFAULT_GRID_PERCENT_ID_MAX;
+
+  leftBorderChars = numDigitsInInt(DEFAULT_GRID_PERCENT_ID_MAX) + 2; /* Extra fudge factor because
+                                                                        char width is approx */
+  initialZoom = initialZoom_in;
+      
+  if (initRange_in->isSet())
+    displayRange.set(initRange_in);
+  else
+    displayRange.set(fullRange_in);
+      
+  /* Create the list of "nice round values" to round the grid header values to.
+   * Create the list in reverse order (i.e. highest values first). */
+  roundValues = NULL;
+  roundValues = g_slist_prepend(roundValues, GINT_TO_POINTER(25));
+  roundValues = g_slist_prepend(roundValues, GINT_TO_POINTER(50));
+  roundValues = g_slist_prepend(roundValues, GINT_TO_POINTER(100));
+  roundValues = g_slist_prepend(roundValues, GINT_TO_POINTER(125));
+  roundValues = g_slist_prepend(roundValues, GINT_TO_POINTER(150));
+  roundValues = g_slist_prepend(roundValues, GINT_TO_POINTER(250));
+  roundValues = g_slist_prepend(roundValues, GINT_TO_POINTER(500));
+  roundValues = g_slist_prepend(roundValues, GINT_TO_POINTER(1000));
+  roundValues = g_slist_prepend(roundValues, GINT_TO_POINTER(2500));
+  roundValues = g_slist_prepend(roundValues, GINT_TO_POINTER(5000));
+  roundValues = g_slist_prepend(roundValues, GINT_TO_POINTER(10000));
+  roundValues = g_slist_prepend(roundValues, GINT_TO_POINTER(25000));
+}
+
+BigPictureProperties::~BigPictureProperties()
+{
+  if (roundValues)
+    {
+      g_slist_free(roundValues);
+      roundValues = NULL;
+    }
+}
+
+double BigPictureProperties::contentXPos() const
+{
+  return ((double)leftBorderChars * charWidth());
+}
+
+
+double BigPictureProperties::contentWidth() const
+{
+  double result = 0.0;
+
+  /* The big picture content covers the whole allocation minus the left border */
+  if (widget())
+    result = widget()->allocation.width - contentXPos();
+
+  return result;
+}
+
+
+/* Return the range that should be highlighted by the highlight box, i.e. the 
+ * detail-view range */
+const IntRange *BigPictureProperties::highlightRange() const
+{
+  const IntRange *result = NULL;
+  GtkWidget *detailView = blxWindowGetDetailView(blxWindow());
+
+  if (detailView)
+    result = detailViewGetDisplayRange(detailView);
+
+  return result;
+}
+
+
+void BigPictureProperties::refreshDisplayRange(const bool keepCentered)
+{
+  IntRange *bpRange = &displayRange;
+  
+  GtkWidget *detailView = blxWindowGetDetailView(blxWindow());
+  IntRange *dvRange = detailViewGetDisplayRange(detailView);
+  
+  if (!bpRange->isSet())
+    {
+      /* This is the first time we've refreshed the detail view range. Set the
+       * initial big picture range width to be a ratio of the detail view range width. */
+      const int width = (dvRange->max() - dvRange->min()) * bigPictureGetInitialZoom(widget());
+      setBigPictureDisplayRange(widget(), this, width, TRUE);
+    }
+  else
+    {
+      /* Call set-width (but just use the existing width) to force the required updates. */
+      const int width = bpRange->max() - bpRange->min();
+      setBigPictureDisplayRange(widget(), this, width, keepCentered);
+    }
+}
+
+/* Perform any required updates after the highlight box has been moved */
+void BigPictureProperties::onHighlightBoxMoved(const int displayIdx, const BlxSeqType seqType)
+{
+  /* The highlight box represents the detail-view range. If it has moved, we need to scroll
+   * the detail view itself to match its new position. */
+  GtkWidget *detailView = bigPictureGetDetailView(widget());
+  setDetailViewStartIdx(detailView, displayIdx, seqType);
+}
+
+
+
+/***********************************************************
+ *                       Properties                        *
+ ***********************************************************/
+
+BigPictureProperties* bigPictureGetProperties(GtkWidget *bigPicture)
+{
+  /* optimisation: cache result, because we know there is only ever one big picture */
+  static BigPictureProperties *properties = NULL;
+  
+  if (!properties && bigPicture)
+    properties = (BigPictureProperties*)(g_object_get_data(G_OBJECT(bigPicture), "BigPictureProperties"));
+  
+  return properties;
+}
+
+BlxContext* bigPictureGetContext(GtkWidget *bigPicture)
+{
+  GtkWidget *blxWindow = bigPictureGetBlxWindow(bigPicture);
+  return blxWindowGetContext(blxWindow);
+}
+
+static GridHeaderProperties* gridHeaderGetProperties(GtkWidget *gridHeader)
+{
+  /* optimisation: cache result, because we know there is only ever one grid header */
+  static GridHeaderProperties *properties = NULL;
+  
+  if (!properties && gridHeader)
+    properties = (GridHeaderProperties*)(g_object_get_data(G_OBJECT(gridHeader), "GridHeaderProperties"));
+  
+  return properties;
+}
+
+
+static void onDestroyBigPicture(GtkWidget *bigPicture)
+{
+  BigPictureProperties *properties = bigPictureGetProperties(bigPicture);
+  
+  if (properties)
+    {
+      delete properties;
+      g_object_set_data(G_OBJECT(bigPicture), "BigPictureProperties", NULL);
+    }
+}
+
+
+static BigPictureProperties* bigPictureCreateProperties(GtkWidget *bigPicture, 
+                                                        GtkWidget *blxWindow, 
+                                                        BlxContext *bc,
+                                                        CoverageViewProperties *coverageViewP, 
+                                                        GtkWidget *header, 
+                                                        GtkWidget *fwdStrandGrid,
+                                                        GtkWidget *revStrandGrid,
+                                                        GtkWidget *fwdExonView,
+                                                        GtkWidget *revExonView,
+                                                        int previewBoxCentre,
+                                                        const IntRange* const initRange,
+                                                        const IntRange* const fullRange,
+                                                        const int initialZoom,
+                                                        const gdouble lowestId)
+{
+  BigPictureProperties *properties = NULL;
+
+  if (bigPicture)
+    { 
+      properties = new BigPictureProperties(bigPicture, 
+                                            blxWindow, 
+                                            bc,
+                                            coverageViewP, 
+                                            header, 
+                                            fwdStrandGrid,
+                                            revStrandGrid,
+                                            fwdExonView,
+                                            revExonView,
+                                            previewBoxCentre,
+                                            initRange,
+                                            fullRange,
+                                            initialZoom,
+                                            lowestId);
+      
+      g_object_set_data(G_OBJECT(bigPicture), "BigPictureProperties", properties);
+      g_signal_connect(G_OBJECT(bigPicture), "destroy", G_CALLBACK(onDestroyBigPicture), NULL); 
+    }
+
+  return properties;
+}
+
+
+static void onDestroyGridHeader(GtkWidget *bigPicture)
+{
+  GridHeaderProperties *properties = gridHeaderGetProperties(bigPicture);
+  
+  if (properties)
+    {
+      delete properties;
+      properties = NULL;
+      g_object_set_data(G_OBJECT(bigPicture), "GridHeaderProperties", NULL);
+    }
+}
+
+static void gridHeaderCreateProperties(GtkWidget *gridHeader, GtkWidget *bigPicture, GtkWidget *refButton)
+{
+  if (gridHeader)
+    {
+      GridHeaderProperties *properties = new GridHeaderProperties;
+
+      properties->widget = gridHeader;
+      properties->bigPicture = bigPicture;
+      properties->refButton = refButton;
+      properties->numHeaderLines = DEFAULT_GRID_NUM_HEADER_LINES;
+      properties->headerYPad = DEFAULT_GRID_HEADER_Y_PAD;
+      
+      g_object_set_data(G_OBJECT(gridHeader), "GridHeaderProperties", properties);
+      g_signal_connect(G_OBJECT(gridHeader), "destroy", G_CALLBACK(onDestroyGridHeader), NULL);
+    }
+}
+
+
+
+
+GtkWidget* bigPictureGetBlxWindow(GtkWidget *bigPicture)
+{
+  BigPictureProperties *properties = bigPictureGetProperties(bigPicture);
+  return properties ? properties->blxWindow() : NULL;
+}
+
+GtkWidget* bigPictureGetDetailView(GtkWidget *bigPicture)
+{
+  GtkWidget *blxWindow = bigPictureGetBlxWindow(bigPicture);
+  return blxWindowGetDetailView(blxWindow);
+}
+
+
+GtkWidget* bigPictureGetFwdGrid(GtkWidget *bigPicture)
+{
+  BigPictureProperties *properties = bigPictureGetProperties(bigPicture);
+  return properties ? properties->fwdStrandGrid : NULL;
+}
+
+GtkWidget* bigPictureGetRevGrid(GtkWidget *bigPicture)
+{
+  BigPictureProperties *properties = bigPictureGetProperties(bigPicture);
+  return properties ? properties->revStrandGrid : NULL;
+}
+
+/* Get the active grid (forward strand grid by default, reverse strand grid if display toggled) */
+GtkWidget* bigPictureGetActiveGrid(GtkWidget *bigPicture)
+{
+  BigPictureProperties *properties = bigPictureGetProperties(bigPicture);
+  return bigPictureGetDisplayRev(bigPicture) ? properties->revStrandGrid : properties->fwdStrandGrid;
+}
+
+/* Get the in-active grid (reverse strand grid by default, forward strand grid if display toggled) */
+GtkWidget* bigPictureGetInactiveGrid(GtkWidget *bigPicture)
+{
+  BigPictureProperties *properties = bigPictureGetProperties(bigPicture);
+  return bigPictureGetDisplayRev(bigPicture) ? properties->fwdStrandGrid : properties->revStrandGrid;
+}
+
+GtkWidget* bigPictureGetFwdExonView(GtkWidget *bigPicture)
+{
+  BigPictureProperties *properties = bigPictureGetProperties(bigPicture);
+  return properties ? properties->fwdExonView : NULL;
+}
+
+GtkWidget* bigPictureGetRevExonView(GtkWidget *bigPicture)
+{
+  BigPictureProperties *properties = bigPictureGetProperties(bigPicture);
+  return properties ? properties->revExonView : NULL;
+}
+
+GtkWidget* bigPictureGetActiveExonView(GtkWidget *bigPicture)
+{
+  BigPictureProperties *properties = bigPictureGetProperties(bigPicture);
+  return bigPictureGetDisplayRev(bigPicture) ? properties->revExonView : properties->fwdExonView;
+}
+
+GtkWidget* bigPictureGetInactiveExonView(GtkWidget *bigPicture)
+{
+  BigPictureProperties *properties = bigPictureGetProperties(bigPicture);
+  return bigPictureGetDisplayRev(bigPicture) ? properties->fwdExonView : properties->revExonView;
+}
+
+gboolean bigPictureGetDisplayRev(GtkWidget *bigPicture)
+{
+  GtkWidget *blxWindow = bigPictureGetBlxWindow(bigPicture);
+  return blxWindow ? blxWindowGetDisplayRev(blxWindow) : FALSE;
+}
+
+IntRange* bigPictureGetDisplayRange(GtkWidget *bigPicture)
+{
+  BigPictureProperties *properties = bigPictureGetProperties(bigPicture);
+  return &properties->displayRange;
+}
+
+static int bigPictureGetInitialZoom(GtkWidget *bigPicture)
+{
+  BigPictureProperties *properties = bigPictureGetProperties(bigPicture);
+  return properties->initialZoom;
+}
+
+GtkWidget* bigPictureGetGridHeader(GtkWidget *bigPicture)
+{
+  BigPictureProperties *properties = bigPictureGetProperties(bigPicture);
+  return properties->header;
+}
+
+BlxSeqType bigPictureGetSeqType(GtkWidget *bigPicture)
+{
+  GtkWidget *blxWindow = bigPictureGetBlxWindow(bigPicture);
+  return blxWindowGetSeqType(blxWindow);
+}
+
+int bigPictureGetNumFrames(GtkWidget *bigPicture)
+{
+  GtkWidget *blxWindow = bigPictureGetBlxWindow(bigPicture);
+  return blxWindowGetNumFrames(blxWindow);
+}
+
+gdouble bigPictureGetIdPerCell(GtkWidget *bigPicture)
+{
+  BigPictureProperties *properties = bigPictureGetProperties(bigPicture);
+  return properties->idPerCell;
+}
+
+gboolean bigPictureSetIdPerCell(GtkWidget *bigPicture, const gdouble idPerCell)
+{
+  gboolean result = FALSE;
+  BigPictureProperties *properties = bigPictureGetProperties(bigPicture);
+  
+  if (idPerCell < GRID_SCALE_MIN_ID_PER_CELL)
+    {
+      g_critical("Cannot set ID per cell less than %1.1f.\n", GRID_SCALE_MIN_ID_PER_CELL);
+    }
+  else
+    {
+      properties->idPerCell = idPerCell;
+      updateOnPercentIdChanged(bigPicture);
+      result = TRUE;
+    }
+  
+  return result;
+}
+
+int bigPictureGetNumVCells(GtkWidget *bigPicture)
+{
+  BigPictureProperties *properties = bigPictureGetProperties(bigPicture);
+  return properties->numVCells;
+}
+
+DoubleRange* bigPictureGetPercentIdRange(GtkWidget *bigPicture)
+{
+  BigPictureProperties *properties = bigPictureGetProperties(bigPicture);
+  return &properties->percentIdRange;
+}
+
+gboolean bigPictureSetMaxPercentId(GtkWidget *bigPicture, const gdouble newValue)
+{
+  gboolean result = FALSE;
+  BigPictureProperties *properties = bigPictureGetProperties(bigPicture);
+  
+  if (newValue < GRID_SCALE_MIN)
+    {
+      g_critical("Cannot set grid scale less than %d.\n", GRID_SCALE_MIN);
+    }
+  else if (newValue > GRID_SCALE_MAX)
+    {
+      g_critical("Cannot set grid scale greater than %d.\n", GRID_SCALE_MAX);
+    }
+  else if (newValue < properties->percentIdRange.min)
+    {
+      g_critical("Cannot set grid maximum to %1.1f because this is less than the grid minimum of %1.1f.\n", (double)newValue, (double)properties->percentIdRange.min);
+    }
+  else
+    {
+      properties->percentIdRange.max = newValue;
+      updateOnPercentIdChanged(bigPicture);
+      result = TRUE;
+    }
+  
+  return result;
+}
+
+gboolean bigPictureSetMinPercentId(GtkWidget *bigPicture, const gdouble newValue)
+{
+  gboolean result = FALSE;
+  
+  if (bigPicture && newValue != -1) /* -1 means unset */
+    {
+      BigPictureProperties *properties = bigPictureGetProperties(bigPicture);
+      
+      if (properties)
+        {
+          if (newValue < GRID_SCALE_MIN)
+            {
+              g_critical("Cannot set grid scale less than %d.\n", GRID_SCALE_MIN);
+            }
+          else if (newValue > GRID_SCALE_MAX)
+            {
+              g_critical("Cannot set grid scale greater than %d.\n", GRID_SCALE_MAX);
+            }
+          else if (newValue > properties->percentIdRange.max)
+            {
+              g_critical("Cannot set grid minimum to %1.1f because this is greater than the grid maximum of %1.1f.\n", (double)newValue, (double)properties->percentIdRange.max);
+            }
+          else
+            {    
+              properties->percentIdRange.min = newValue;
+              updateOnPercentIdChanged(bigPicture);
+              result = TRUE;
+            }
+        }
+    }
+
+  return result;
+}
+
+/***********************************************************
+ *                     Initialization                      *
+ ***********************************************************/
+
+/* Create a tool button for the big picture header */
+static GtkWidget* createButton(GtkWidget *container, const char *label, const char *tooltip, GtkSignalFunc callback_func, gpointer data)
+{
+  GtkWidget *eventBox = gtk_event_box_new();
+  gtk_box_pack_start(GTK_BOX(container), eventBox, FALSE, FALSE, 0);
+  
+  GtkWidget *button = gtk_button_new_with_label(label);
+  gtk_container_add(GTK_CONTAINER(eventBox), button);
+  
+  /* gtk_widget_set_tooltip_text(button, tooltip); */ /* not in pre-GTK-2.12 */
+  
+  g_signal_connect(GTK_OBJECT(button), "clicked", callback_func, data);
+  
+  return button;
+}
+
+
+/* Create the header for the big picture section. This is a custom header
+ * that contains some tool buttons and the header labels for the grid. We
+ * squash them all into the same horizontal section to save space, and also
+ * so that we can hide any of the grids but still keep the header visible. */
+static GtkWidget *createBigPictureGridHeader(GtkWidget *bigPicture)
+{
+  GtkWidget *header = gtk_layout_new(NULL, NULL);
+  gtk_widget_set_name(header, BIG_PICTURE_GRID_HEADER_NAME);
+  
+  /* Create the header buttons. Put them in an hbox */
+  GtkWidget *hbox = gtk_hbox_new(FALSE, 0);
+  gtk_layout_put(GTK_LAYOUT(header), hbox, 0, 0);
+  
+  /* Store a ref to the first button so we can find out the height of the
+   * buttons when we come to calculate the grid borders */
+  GtkWidget *refButton = createButton(hbox, "Zoom in", "Zoom in (Ctrl-=)", (GtkSignalFunc)onZoomInBigPicture, bigPicture);
+  createButton(hbox, "Zoom out", "Zoom out (Ctrl--)", (GtkSignalFunc)onZoomOutBigPicture, bigPicture);
+  createButton(hbox, "Whole", "Zoom out to whole width (Shift-Ctrl--_", (GtkSignalFunc)onZoomWholeBigPicture, bigPicture);
+  
+  /* Create the header properties */
+  gridHeaderCreateProperties(header, bigPicture, refButton);
+  
+  /* Conect signals */
+  g_signal_connect(G_OBJECT(header), "expose-event", G_CALLBACK(onExposeGridHeader), NULL);
+  
+  return header;
+}
+
+
+GtkWidget* createBigPicture(GtkWidget *blxWindow, 
+                            BlxContext *bc,
+			    GtkContainer *parent,
+			    GtkWidget **fwdStrandGrid, 
+			    GtkWidget **revStrandGrid,
+                            const IntRange* const initRange,
+                            const IntRange* const fullRange,
+			    const int initialZoom,
+			    const gdouble lowestId)
+{
+  /* Create the main big picture widget, which will contain all of the 
+   * individual big-picture grids, plus a header, in a scrollable vbox. */
+  GtkWidget *bigPicture = gtk_scrolled_window_new(NULL, NULL);
+  gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(bigPicture), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+  gtk_container_add(parent, bigPicture);
+   
+  GtkWidget *vbox = gtk_vbox_new(FALSE, 0);
+  gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(bigPicture), vbox);
+  gtk_widget_set_name(vbox, BIG_PICTURE_WIDGET_NAME);
+  
+  /* Our big picture needs to have a header plus 4 panes:
+   * 1. the top grid (fwd strand)
+   * 2. the exon view
+   * 3. bottom grid (reverse strand) 
+   * 4. coverage view 
+   */
+  
+  GtkWidget *header = createBigPictureGridHeader(bigPicture);
+  addChildToBigPicture(vbox, header, FALSE);
+
+  *fwdStrandGrid = createBigPictureGrid(bigPicture, BLXSTRAND_FORWARD);
+  *revStrandGrid = createBigPictureGrid(bigPicture, BLXSTRAND_REVERSE);
+  GtkWidget *fwdExonView = createExonView(bigPicture, BLXSTRAND_FORWARD);
+  GtkWidget *revExonView = createExonView(bigPicture, BLXSTRAND_REVERSE);
+
+  /* Create the coverage view. */
+  CoverageViewProperties *coverageViewP = createCoverageView(blxWindow, bc);
+  
+  /* By default, make the forward strand the top grid */
+  addChildToBigPicture(vbox, *fwdStrandGrid, FALSE);
+  addChildToBigPicture(vbox, fwdExonView, FALSE);
+  addChildToBigPicture(vbox, revExonView, FALSE);
+  addChildToBigPicture(vbox, *revStrandGrid, FALSE);
+  addChildToBigPicture(vbox, coverageViewP->widget(), FALSE);
+
+  g_signal_connect(G_OBJECT(bigPicture), "size-allocate", G_CALLBACK(onSizeAllocateBigPicture), NULL);
+
+  /* Create the big picture properties. */
+  BigPictureProperties *properties = bigPictureCreateProperties(bigPicture, 
+                                                                blxWindow,
+                                                                bc,
+                                                                coverageViewP,
+                                                                header, 
+                                                                *fwdStrandGrid,
+                                                                *revStrandGrid,
+                                                                fwdExonView,
+                                                                revExonView,
+                                                                UNSET_INT,
+                                                                initRange,
+                                                                fullRange,
+                                                                initialZoom,
+                                                                lowestId);
+
+  /* Set a pointer to the parent big picture panel */
+  coverageViewP->setPanel(properties);
+  
+  return bigPicture;
+}
+
+
+
diff --git a/blixemApp/bigpicture.hpp b/blixemApp/bigpicture.hpp
new file mode 100644
index 0000000..da9f22a
--- /dev/null
+++ b/blixemApp/bigpicture.hpp
@@ -0,0 +1,197 @@
+/*  File: bigpicture.h
+ *  Author: Gemma Barson, 2009-11-23
+ *  Copyright (c) 2009 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: The "big picture" section displays an overview of the entire
+ *              portion of reference sequence that was passed to Blixem. The
+ *              reference sequence coordinates are shown along the top.
+ *
+ *              Alignments are shown as lines and are placed in a scaled grid
+ *              (one for each strand) against their %ID (see bigpicturegrid.h).
+ *
+ *              Exons and introns are drawn in standard notation in the 
+ *              transcript section (see exonview.h).
+ *----------------------------------------------------------------------------
+ */
+
+#ifndef _big_picture_included_
+#define _big_picture_included_
+
+#include <blixemApp/bigpicturegrid.hpp>
+#include <blixemApp/blxwindow.hpp>
+#include <blixemApp/blixem_.hpp>
+#include <blixemApp/blxpanel.hpp>
+
+
+
+class BigPictureProperties : public BlxPanel
+{
+public:
+  // Constructors
+  BigPictureProperties(GtkWidget *bigPicture_in, 
+                       GtkWidget *blxWindow_in, 
+                       BlxContext *bc,
+                       CoverageViewProperties *coverageViewP_in, 
+                       GtkWidget *header_in, 
+                       GtkWidget *fwdStrandGrid_in,
+                       GtkWidget *revStrandGrid_in,
+                       GtkWidget *fwdExonView_in,
+                       GtkWidget *revExonView_in,
+                       int previewBoxCentre_in,
+                       const IntRange* const initRange_in,
+                       const IntRange* const fullRange_in,
+                       const int initialZoom_in,
+                       const gdouble lowestId_in);
+
+  ~BigPictureProperties();
+
+  // Access
+  double contentXPos() const;
+  double contentWidth() const;
+
+  // Query
+  const IntRange *highlightRange() const;
+
+  // Update
+  void refreshDisplayRange(const bool keepCentered);
+  void onHighlightBoxMoved(const int displayIdx, const BlxSeqType seqType);
+
+  // Member variables
+  GtkWidget *header;		/* The grid header */
+  GtkWidget *fwdStrandGrid;	/* The grid that displays the forward ref seq strand */
+  GtkWidget *revStrandGrid;	/* The grid that displays the reverse ref seq strand */
+  GtkWidget *fwdExonView;	/* The section showing the exons for the forward ref seq strand */
+  GtkWidget *revExonView;	/* The section showing the exons for the reverse ref seq strand */
+    
+  GSList *roundValues;	        /* List of "nice" values to round to, for the display values in the grid header */
+  int initialZoom;		/* Multiple to multiply the detail view display range by to get the initial big picture display range */
+    
+  int numHCells;		/* The number of cells in the grid horizontally */
+  int basesPerCell;		/* The number of bases show per horizontal cell */
+  int roundTo;	           	/* The number of bases to round grid lines to the nearest multiple of */
+
+  int numVCells;		/* The number of cells in the grid vertically */
+  gdouble idPerCell;		/* The percent ID to show per vertical cell */
+  DoubleRange percentIdRange;	/* The max and min %ID values displayed */
+
+  int leftBorderChars;          /* The number of characters in the left border of the big picture grids */
+    
+};
+
+class GridHeaderProperties
+{
+public:
+  GtkWidget *widget;          /* The grid header widget */
+  GtkWidget *bigPicture;      /* The big picture view that this header belongs to */
+  GtkWidget *refButton;       /* A reference button, so we can query properties like its height */
+    
+  GdkRectangle headerRect;    /* The actual drawing area where we'll draw the labels */
+  int numHeaderLines;	      /* The number of lines of text in the header labels */
+  int markerHeight;	      /* The height of the marker lines between the grid and the header labels */
+  int headerYPad;	      /* Y padding around the header buttons */
+};
+
+
+/* Public function declarations */
+void			      setGdkColorBlack(GdkColor *color);
+void			      setGdkColorBlue(GdkColor *color);
+void			      setGdkColorYellow(GdkColor *color);
+void			      setGdkColorCyan(GdkColor *color);
+
+BigPictureProperties*	      bigPictureGetProperties(GtkWidget *bigPicture);
+GtkWidget*		      bigPictureGetBlxWindow(GtkWidget *bigPicture);
+GtkWidget*		      bigPictureGetFwdGrid(GtkWidget *bigPicture);
+GtkWidget*		      bigPictureGetRevGrid(GtkWidget *bigPicture);
+GtkWidget*		      bigPictureGetActiveGrid(GtkWidget *bigPicture);
+GtkWidget*		      bigPictureGetInactiveGrid(GtkWidget *bigPicture);
+GtkWidget*		      bigPictureGetFwdExonView(GtkWidget *bigPicture);
+GtkWidget*		      bigPictureGetRevExonView(GtkWidget *bigPicture);
+GtkWidget*		      bigPictureGetActiveExonView(GtkWidget *bigPicture);
+GtkWidget*		      bigPictureGetInactiveExonView(GtkWidget *bigPicture);
+gboolean		      bigPictureGetDisplayRev(GtkWidget *bigPicture);
+IntRange*		      bigPictureGetDisplayRange(GtkWidget *bigPicture);
+GtkWidget*		      bigPictureGetGridHeader(GtkWidget *bigPicture);
+GtkWidget*		      bigPictureGetDetailView(GtkWidget *bigPicture);
+BlxSeqType		      bigPictureGetSeqType(GtkWidget *bigPicture);
+int			      bigPictureGetNumFrames(GtkWidget *bigPicture);
+gdouble			      bigPictureGetIdPerCell(GtkWidget *bigPicture);
+DoubleRange*		      bigPictureGetPercentIdRange(GtkWidget *bigPicture);
+int			      bigPictureGetNumVCells(GtkWidget *bigPicture);
+BlxContext*		      bigPictureGetContext(GtkWidget *bigPicture);
+
+gboolean                      bigPictureSetIdPerCell(GtkWidget *bigPicture, const gdouble idPerCell);
+gboolean		      bigPictureSetMaxPercentId(GtkWidget *bigPicture, const gdouble newValue);
+gboolean		      bigPictureSetMinPercentId(GtkWidget *bigPicture, const gdouble newValue);
+
+void			      calculateGridHeaderBorders(GtkWidget *header);
+void			      refreshBigPictureDisplayRange(GtkWidget *bigPicture, const gboolean keepCentered);
+void                          calculateBigPictureCellSize(GtkWidget *bigPicture, BigPictureProperties *properties);
+void			      calculateNumVCells(GtkWidget *bigPicture);
+void			      bigPictureRedrawAll(GtkWidget *bigPicture);
+void                          bigPicturePrepareForPrinting(GtkWidget *bigPicture);
+
+void                          scrollBigPictureLeftStep(GtkWidget *bigPicture);
+void                          scrollBigPictureRightStep(GtkWidget *bigPicture);
+
+gint			      bigPictureGetCellHeight(GtkWidget *bigPicture);
+
+void			      drawVerticalGridLines(GdkRectangle *drawingRect, GdkRectangle *highlightRect,
+						    const int yPadding, BlxContext *bc, 
+						    BigPictureProperties *bpProperties, GdkDrawable *drawable);
+
+void			      drawHorizontalGridLines(GtkWidget *widget, GtkWidget *bigPicture,
+						      GdkRectangle *drawingRect, BlxContext *bc,
+						      BigPictureProperties *bpProperties, GdkDrawable *drawable,
+						      const gint numCells, const gdouble rangePerCell, 
+						      const gdouble maxVal, const gboolean abbrev, const char *unit);
+
+void			      zoomBigPicture(GtkWidget *bigPicture, const gboolean zoomIn);
+void			      zoomWholeBigPicture(GtkWidget *bigPicture);
+
+int			      getRightCoordFromCentre(const int centreCoord, 
+						      const int width, 
+						      const GdkRectangle *outerRect);
+
+void			      refreshGridOrder(GtkWidget *bigPicture);
+
+GtkWidget*		      createBigPicture(GtkWidget *blxWindow,
+                                               BlxContext *bc,
+					       GtkContainer *parent,
+					       GtkWidget **fwdStrandGrid, 
+					       GtkWidget **revStrandGrid,
+                                               const IntRange* const initRange,
+                                               const IntRange* const fullRange,
+					       const int bigPictZoom,
+					       const gdouble lowestId);
+
+
+#endif /* _big_picture_included_ */
diff --git a/blixemApp/bigpicturegrid.cpp b/blixemApp/bigpicturegrid.cpp
new file mode 100644
index 0000000..fdb25d7
--- /dev/null
+++ b/blixemApp/bigpicturegrid.cpp
@@ -0,0 +1,878 @@
+/*  File: bigpicturegrid.c
+ *  Author: Gemma Barson, 2009-11-23
+ *  Copyright (c) 2009 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: See bigpicturegrid.h
+ *----------------------------------------------------------------------------
+ */
+
+#include <blixemApp/bigpicturegrid.hpp>
+#include <blixemApp/blxcontext.hpp>
+#include <blixemApp/bigpicture.hpp>
+#include <blixemApp/detailview.hpp>
+#include <blixemApp/detailviewtree.hpp>
+#include <blixemApp/blxwindow.hpp>
+#include <blixemApp/blxpanel.hpp>
+#include <seqtoolsUtils/utilities.hpp>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#include <algorithm>
+
+using namespace std;
+
+
+#define BIG_PICTURE_MSP_LINE_NAME	"BigPictureMspLine"
+#define DEFAULT_MSP_LINE_HEIGHT		3	  /* the height of the MSP lines in the grid */
+#define DEFAULT_GRID_Y_PADDING		5	  /* this provides space between the grid and the edge of the widget */
+#define MIN_MSP_LINE_WIDTH		1	  /* used to make sure that MSP lines never shrink to nothing */
+
+typedef struct _DrawGridData
+{
+  GtkWidget *grid;
+  GdkDrawable *drawable;
+  GdkGC *gc;
+  GdkColor *color;
+  GdkColor *shadowColor;
+  gboolean drawColinearityLines;
+} DrawGridData;
+
+  
+
+/* Local function declarations */
+static BlxContext*	    gridGetContext(GtkWidget *grid);
+static IntRange*	    gridGetDisplayRange(GtkWidget *grid);
+static GdkColor*	    gridGetMspLineColor(GtkWidget *grid, const gboolean selected);
+static GtkWidget*	    gridGetBlxWindow(GtkWidget *grid);
+static void                 drawBigPictureGrid(GtkWidget *grid, GdkDrawable *drawable);
+
+/***********************************************************
+ *                     Utility functions	           *
+ ***********************************************************/
+
+/* Calls the given function (passed as the data pointer) on the given widget 
+ * if it is a grid in the big picture view, or, if it is a container, 
+ * calls the function on all children/grandchildren/etc that are grids */
+void callFuncOnAllBigPictureGrids(GtkWidget *widget, gpointer data)
+{
+  const gchar *name = gtk_widget_get_name(widget);
+  if (strcmp(name, BIG_PICTURE_GRID_NAME) == 0)
+    {
+      GtkCallback func = (GtkCallback)data;
+      func(widget, NULL);
+    }
+  else if (GTK_IS_CONTAINER(widget))
+    {
+      gtk_container_foreach(GTK_CONTAINER(widget), callFuncOnAllBigPictureGrids, data);
+    }
+}
+
+
+static int gridGetNumVCells(GtkWidget *grid)
+{
+  GtkWidget *bigPicture = gridGetBigPicture(grid);
+  return bigPictureGetNumVCells(bigPicture);
+}
+
+
+/* Convert an ID% value to the y coord on the given grid */
+gint convertValueToGridPos(GtkWidget *grid, const gdouble value)
+{
+  /* The top line of the grid is drawn one cell height down from the top of the grid border */
+  GridProperties *properties = gridGetProperties(grid);
+  
+  DoubleRange *valRange = bigPictureGetPercentIdRange(properties->bigPicture);
+  gdouble percent = (valRange->max - value) / (valRange->max - valRange->min);
+  
+  /* Make sure we do the multiplication on doubles before rounding to int */
+  gint result = properties->gridRect.y + roundNearest((gdouble)properties->gridRect.height * percent);
+  return result;
+}
+
+
+/* Calculates the size and position of an MSP line in the given grid. Return
+ * args can be null if not required. */
+static void calculateMspLineDimensions(GtkWidget *grid, 
+                                       const MSP* const msp, 
+                                       gboolean clip,
+                                       int *x, 
+                                       int *y, 
+                                       int *width, 
+                                       int *height)
+{
+  BlxContext *bc = gridGetContext(grid);
+  GridProperties *gridProperties = gridGetProperties(grid);
+
+  /* Get the display range in dna coords */
+  IntRange dnaDispRange;
+  convertDisplayRangeToDnaRange(gridGetDisplayRange(grid), bc->seqType, bc->numFrames, bc->displayRev, &bc->refSeqRange, &dnaDispRange);
+
+  /* The grid pos for coords gives the left edge of the coord, so draw to max + 1 to be inclusive */
+  const int mspMin = msp->qRange.min(true, bc->displayRev);
+  const int mspMax = msp->qRange.max(true, bc->displayRev);
+  
+  const int x1 = convertBaseIdxToRectPos(mspMin, &gridProperties->gridRect, &dnaDispRange, TRUE, bc->displayRev, TRUE);
+  const int x2 = convertBaseIdxToRectPos(mspMax, &gridProperties->gridRect, &dnaDispRange, TRUE, bc->displayRev, TRUE);
+  
+  const int xMin = min(x1, x2);
+  const int xMax = max(x1, x2);
+  
+  if (x)
+    *x = xMin;
+    
+  if (width)
+    *width = max((xMax - xMin), MIN_MSP_LINE_WIDTH);
+  
+  /* Find where in the y axis we should draw the line, based on the %ID value */
+  if (y)
+    *y = convertValueToGridPos(grid, msp->id);
+    
+  if (height)
+    *height = gridProperties->mspLineHeight;
+}
+
+
+/* Returns true if the given msp is displayed in the given grid, i.e. is the correct
+ * strand, is not an intron or exon, and (if checkRange is true) is not out of range */
+static gboolean mspShownInGrid(const MSP* const msp, GtkWidget *grid, gboolean checkRange)
+{
+  gboolean result = FALSE ; 
+
+  list<const SequenceGroup*> groups ;
+  BlxContext *bc = NULL ;
+
+  /* First check strand and type */
+  result = (grid && msp && mspIsBlastMatch(msp) && mspGetRefStrand(msp) == gridGetStrand(grid)) ;
+
+  /* If in a group, check that the group is visible */
+  if (result)
+    {
+      bc = gridGetContext(grid) ;
+      groups = bc->getSequenceGroups(msp->sSequence) ;
+      result = bc->isGroupVisible(groups, msp->sSequence->type) ;
+    }
+  
+  if (result)
+    {
+      if (checkRange)
+        {
+          /* See if the msp lies within the grid's display range */
+          const IntRange* const displayRange = gridGetDisplayRange(grid);
+          const IntRange* const mspRange = mspGetDisplayRange(msp);
+          result = rangesOverlap(mspRange, displayRange);
+        }
+      else
+        {
+          /* We're just checking the correct type and strand, so return true */
+          result = TRUE;
+        }
+    }
+  
+  return result;
+}
+
+
+/* Draw a line on the given grid to represent the given match */
+static void drawMspLine(const MSP* const msp, DrawGridData *drawData)
+{
+  /* Ignore introns. */
+  if (mspShownInGrid(msp, drawData->grid, TRUE))
+    {
+      gdk_gc_set_subwindow(drawData->gc, GDK_INCLUDE_INFERIORS);
+      gdk_gc_set_foreground(drawData->gc, drawData->color);
+      
+      /* Calculate where it should go */
+      int x, y, width, height;
+      calculateMspLineDimensions(drawData->grid, msp, TRUE, &x, &y, &width, &height);
+      
+      /* Draw a block rectangle */
+      gdk_draw_rectangle(drawData->drawable, drawData->gc, TRUE, x, y, width, height);
+      
+      /* Draw a drop-shadow, to make sure it is always visible even in the paler highlight colors */
+      const int shadowHt = 1;
+      gdk_gc_set_foreground(drawData->gc, drawData->shadowColor);
+      gdk_gc_set_line_attributes(drawData->gc, shadowHt, GDK_LINE_SOLID, GDK_CAP_BUTT, GDK_JOIN_MITER);
+      
+      int yBottom = y + height - shadowHt;
+      gdk_draw_line(drawData->drawable, drawData->gc, x, yBottom, x + width, yBottom);
+      
+      /* only draw the right-hand-side if the width is great enough to fit it and still be visible */
+      if (width > shadowHt + 1)
+      {
+	int xRight = x + width - shadowHt;
+	gdk_draw_line(drawData->drawable, drawData->gc, xRight, y, xRight, y + height);
+      }
+    }
+}
+
+
+/* Draw colinearity lines between the given MSP list item and the next one (if there is one) */
+static void drawColinearityLines(GList *mspListItem, DrawGridData *drawData)
+{
+  g_return_if_fail(drawData);
+
+  BlxContext *bc = gridGetContext(drawData->grid);
+  
+  if (drawData->drawColinearityLines && mspListItem && mspListItem->next && bc->flags[BLXFLAG_SHOW_COLINEARITY])
+    {
+      const IntRange* const displayRange = gridGetDisplayRange(drawData->grid);
+
+      const MSP* msp1 = (const MSP*)mspListItem->data;
+      const MSP* msp2 = (const MSP*)mspListItem->next->data;
+
+      /* If the display is reversed we need to swap the order of the msps */
+      if (bc->displayRev)
+        {
+          msp1 = (const MSP*)mspListItem->next->data;
+          msp2 = (const MSP*)mspListItem->data;
+        }
+
+      /* Check that the line will lie within the visible range */
+      if ((msp1->displayRange.max() < displayRange->max() && msp2->displayRange.min() > displayRange->min()) ||
+          (msp1->displayRange.max() > displayRange->max() && msp2->displayRange.min() < displayRange->min()))
+        {
+          ColinearityType colinearityType = COLINEAR_INVALID;
+
+          if ((bc->displayRev && msp1->qStrand == BLXSTRAND_FORWARD) || (!bc->displayRev && msp1->qStrand != BLXSTRAND_FORWARD))
+            colinearityType = mspIsColinear(msp2, msp1);
+          else
+            colinearityType = mspIsColinear(msp1, msp2);
+
+          if (colinearityType != COLINEAR_INVALID)
+            {
+              /* get the line color */
+              GdkColor *color = NULL;
+
+              if (colinearityType == COLINEAR_PERFECT)
+                color = getGdkColor(BLXCOLOR_COLINEAR_PERFECT, bc->defaultColors, FALSE, bc->usePrintColors);
+              else if (colinearityType == COLINEAR_IMPERFECT)
+                color = getGdkColor(BLXCOLOR_COLINEAR_IMPERFECT, bc->defaultColors, FALSE, bc->usePrintColors);
+              else
+                color = getGdkColor(BLXCOLOR_COLINEAR_NOT, bc->defaultColors, FALSE, bc->usePrintColors);
+
+              gdk_gc_set_foreground(drawData->gc, color);
+
+              /* get coords of the msp lines */
+              int x1, y1, width1, height1;
+              int x2, y2, width2, height2;
+              calculateMspLineDimensions(drawData->grid, msp1, FALSE, &x1, &y1, &width1, &height1);
+              calculateMspLineDimensions(drawData->grid, msp2, FALSE, &x2, &y2, &width2, &height2);
+
+              /* get coords of line to draw */
+              IntRange lineXRange(x1 + width1, x2);
+              IntRange lineYRange(y1 + height1 / 2, y2 + height2 / 2);
+
+              gdk_draw_line(drawData->drawable, drawData->gc, 
+                            lineXRange.min(), lineYRange.min(), lineXRange.max(), lineYRange.max());
+            }
+        }
+    }
+}
+
+
+/* Draw the MSPs for the given sequence in the given color. */
+static void drawSequenceMspLines(gpointer listItemData, gpointer data)
+{
+  const BlxSequence *seq = (const BlxSequence*)listItemData;
+  
+  /* Only applicable to alignments and transcripts */
+  if (!blxSequenceShownInGrid(seq))
+    return;
+  
+  DrawGridData *drawData = (DrawGridData*)data;  
+  GList *mspListItem = seq->mspList;
+
+  for ( ; mspListItem; mspListItem = mspListItem->next)
+    {
+      MSP *msp = (MSP*)(mspListItem->data);
+
+      /* Draw the msp (if it's on this grid and is in the visible range) */
+      if (mspShownInGrid(msp, drawData->grid, TRUE))
+        drawMspLine(msp, drawData);
+
+      /* Draw colinearity lines between this and the next msp. Note that we need to call this
+       * even if this msp is out of range, in case the next msp is in range. */
+      if (mspShownInGrid(msp, drawData->grid, FALSE))
+        drawColinearityLines(mspListItem, drawData);
+    }
+}
+
+
+/* Draw MSP lines that are in groups. Use the highlight color of the group if one is set */
+static void drawGroupedMspLines(gpointer listItemData, gpointer data)
+{
+  SequenceGroup *seqGroup = (SequenceGroup*)listItemData;
+  DrawGridData *drawData = (DrawGridData*)data;
+  GdkColor *origColor = drawData->color;
+  GdkColor *origShadowColor = drawData->shadowColor;
+
+  /* Use the group's highlight color, if this sequence should be highlighted */
+  if (seqGroup->highlighted)
+    {
+      /* Use the group's highlight color */
+      drawData->color = &seqGroup->highlightColor;
+      GdkColor shadowColor;
+      getDropShadowColor(drawData->color, &shadowColor);
+      drawData->shadowColor = &shadowColor;
+      
+      g_list_foreach(seqGroup->seqList, drawSequenceMspLines, drawData);
+
+      /* Set the draw data back to its original values */
+      drawData->color = origColor;
+      drawData->shadowColor = origShadowColor;
+    }
+  else
+    {
+      g_list_foreach(seqGroup->seqList, drawSequenceMspLines, drawData);
+    }
+  
+}
+
+
+/* Draw a line for each MSP in the given grid */
+static void drawMspLines(GtkWidget *grid, GdkDrawable *drawable)
+{
+  BlxContext *bc = gridGetContext(grid);
+  GdkGC *gc = gdk_gc_new(drawable);
+  
+  DrawGridData drawData = {
+    grid, 
+    drawable, 
+    gc, 
+    gridGetMspLineColor(grid, FALSE), 
+    gridGetMspLineColor(grid, FALSE),
+    FALSE
+  };
+  
+  /* Draw all MSPs for this grid */ 
+  g_list_foreach(bc->matchSeqs, drawSequenceMspLines, &drawData);  
+
+  /* Now draw MSPs that are in groups (to do: it would be good to do this in reverse
+   * Sort Order, so that those ordered first get drawn last and therefore appear on top) */
+  g_list_foreach(bc->sequenceGroups, drawGroupedMspLines, &drawData);
+  
+  /* Finally, draw selected sequences. These will appear on top of everything else and will have
+   * colinearity lines displayed (we only ever display colinearity lines for selected sequences
+   * in the grid because it would be too cluttered otherwise). */
+  drawData.color = gridGetMspLineColor(grid, TRUE);
+  GdkColor shadowColor;
+  getDropShadowColor(drawData.color, &shadowColor);
+  drawData.shadowColor = &shadowColor;
+  drawData.drawColinearityLines = TRUE;
+  g_list_foreach(bc->selectedSeqs, drawSequenceMspLines, &drawData);
+  
+  g_object_unref(gc);
+}
+
+
+/* Main function that does the drawing for the grid. Drawing is done onto a pixmap
+ * which is then stored in the grid properties */
+static void drawBigPictureGrid(GtkWidget *grid, GdkDrawable *drawable)
+{
+  GridProperties *properties = gridGetProperties(grid);
+  BigPictureProperties *bpProperties = bigPictureGetProperties(properties->bigPicture);
+  BlxContext *bc = bigPictureGetContext(properties->bigPicture);
+
+  /* Calculate some factors for scaling */
+  const gdouble percentPerCell = bigPictureGetIdPerCell(properties->bigPicture);
+  const gint numVCells = gridGetNumVCells(grid);
+
+  /* Highlight any regions that are assembly gaps */
+  /* Get the display range in dna coords */
+  IntRange bpRange;
+  convertDisplayRangeToDnaRange(&bpProperties->displayRange, bc->seqType, bc->numFrames, bc->displayRev, &bc->refSeqRange, &bpRange);
+  
+  GdkColor *color = getGdkColor(BLXCOLOR_ASSEMBLY_GAP, bc->defaultColors, FALSE, bc->usePrintColors);
+
+  drawAssemblyGaps(grid, drawable, color, bc->displayRev,
+                   &properties->gridRect, &bpRange, 
+                   bc->featureLists[BLXMSP_GAP]);
+  
+  /* Draw the grid lines */
+  drawVerticalGridLines(&properties->gridRect, &properties->highlightRect, properties->gridYPadding, bc, bpProperties, drawable);
+  drawHorizontalGridLines(grid, properties->bigPicture, &properties->gridRect, bc, bpProperties, drawable, numVCells, percentPerCell, bpProperties->percentIdRange.max, FALSE, "%");
+  
+  /* Draw lines corresponding to the MSPs */
+  drawMspLines(grid, drawable);
+}
+
+
+/* Prepare the grid for printing (draws the transient hightlight box
+ * onto the cached drawable). */
+void gridPrepareForPrinting(GtkWidget *grid)
+{
+  GdkDrawable *drawable = widgetGetDrawable(grid);
+  
+  if (drawable)
+    {
+      GridProperties *properties = gridGetProperties(grid);
+      BlxContext *bc = bigPictureGetContext(properties->bigPicture);
+
+      GdkColor *highlightBoxColor = getGdkColor(BLXCOLOR_HIGHLIGHT_BOX, bc->defaultColors, FALSE, bc->usePrintColors);
+      drawHighlightBox(drawable, &properties->highlightRect, HIGHLIGHT_BOX_MIN_WIDTH, highlightBoxColor);
+    }
+}
+
+
+void calculateGridHighlightBoxBorders(GtkWidget *grid)
+{
+  GridProperties *properties = gridGetProperties(grid);
+  g_return_if_fail(properties);
+
+  BlxContext *bc = gridGetContext(grid);
+  GtkWidget *bigPicture = properties->bigPicture;
+  GtkWidget *detailView = bigPictureGetDetailView(bigPicture);
+
+  IntRange *bpRange = bigPictureGetDisplayRange(bigPicture);
+  IntRange *dvRange = detailViewGetDisplayRange(detailView);
+
+  bc->highlightBoxCalcBorders(&properties->gridRect,
+                              &properties->highlightRect, 
+                              bpRange,
+                              dvRange,
+                              properties->mspLineHeight);
+}
+
+
+/* Calculate the borders for the big picture view */
+void calculateGridBorders(GtkWidget *grid)
+{
+  GridProperties *properties = gridGetProperties(grid);
+  BigPictureProperties *bigPictureProperties = bigPictureGetProperties(properties->bigPicture);
+  int numVCells = gridGetNumVCells(grid);
+  
+  /* Get some info about the size of the layout and the font used */
+  guint layoutWidth, layoutHeight;
+  gtk_layout_get_size(GTK_LAYOUT(grid), &layoutWidth, &layoutHeight);
+  
+  properties->displayRect.x = 0;
+  properties->displayRect.y = 0;
+  properties->displayRect.width = grid->allocation.width;
+  
+  /* Get the boundaries of the grid */
+  properties->gridRect.x = roundNearest(bigPictureProperties->contentXPos());
+  properties->gridRect.y = HIGHLIGHT_BOX_Y_PAD + properties->gridYPadding;
+  properties->gridRect.width = bigPictureProperties->contentWidth();
+  properties->gridRect.height = bigPictureGetCellHeight(properties->bigPicture) * numVCells;
+  
+  /* Get the boundaries of the highlight box */
+  calculateGridHighlightBoxBorders(grid);
+  
+  /* Get the total display height required. Set the layout size to fit. */
+  const int newHeight = properties->highlightRect.height;
+  
+  if (newHeight != properties->displayRect.height)
+    {
+      DEBUG_OUT("Setting new grid height = %d\n", newHeight);
+      properties->displayRect.height = newHeight;
+      gtk_layout_set_size(GTK_LAYOUT(grid), properties->displayRect.width, properties->displayRect.height);
+  
+      /* Set the size request to our desired height. We want a fixed heigh but don't set the
+       * width, because we want the user to be able to resize that. */
+      gtk_widget_set_size_request(grid, 0, properties->displayRect.height);
+    }
+}
+
+
+/***********************************************************
+ *			    Events			   *
+ ***********************************************************/
+
+/* Expose handler for the grid. If the grid has a bitmap cached from the previous
+ * call, this function just pushes that back to screen and then (optionally) draws
+ * the preview box directly to the window over the top of it. If the cached bitmap
+ * is null, this function first calls drawBigPictureGrid to create and cache
+ * the bitmap first. */
+static gboolean onExposeGrid(GtkWidget *grid, GdkEventExpose *event, gpointer data)
+{
+  GdkDrawable *window = GTK_LAYOUT(grid)->bin_window;
+
+  if (window)
+    {
+      GdkDrawable *bitmap = widgetGetDrawable(grid);
+      
+      if (!bitmap)
+        {
+          /* There isn't a bitmap yet. Create it now. */
+	  bitmap = createBlankPixmap(grid);
+          drawBigPictureGrid(grid, bitmap);
+        }
+      
+      if (bitmap)
+        {
+          /* Push the bitmap onto the window */
+          GdkGC *gc = gdk_gc_new(window);
+          gdk_draw_drawable(window, gc, bitmap, 0, 0, 0, 0, -1, -1);
+          g_object_unref(gc);
+
+          /* Draw the highlight box on top of it */
+          GridProperties *properties = gridGetProperties(grid);
+          BlxContext *bc = bigPictureGetContext(properties->bigPicture);
+
+          GdkColor *highlightBoxColor = getGdkColor(BLXCOLOR_HIGHLIGHT_BOX, bc->defaultColors, FALSE, bc->usePrintColors);
+          drawHighlightBox(window, &properties->highlightRect, HIGHLIGHT_BOX_MIN_WIDTH, highlightBoxColor);
+          
+          /* Draw the preview box too, if set */
+          BigPictureProperties *bpProperties = bigPictureGetProperties(properties->bigPicture);
+          bpProperties->drawPreviewBox(window, &properties->gridRect, &properties->highlightRect);
+        }
+      else
+	{
+	  g_warning("Failed to draw grid [%p] - could not create bitmap.\n", grid);
+	}
+    }
+  
+  return TRUE;
+}
+
+
+/* Re-calculate size info about the given grid following a resize */
+static void onSizeAllocateBigPictureGrid(GtkWidget *grid, GtkAllocation *allocation, gpointer data)
+{
+  DEBUG_ENTER("onSizeAllocateBigPictureGrid");
+
+  /* Recalculate the borders for the grids and the header */
+  GridProperties *properties = gridGetProperties(grid);
+  BigPictureProperties *bigPictureProperties = bigPictureGetProperties(properties->bigPicture);
+  
+  calculateGridHeaderBorders(bigPictureProperties->header);
+  calculateGridBorders(grid);
+  
+  DEBUG_EXIT("onSizeAllocateBigPictureGrid returning");
+}
+
+
+/* Mark the given MSP's sequence as selected if this MSP line contains the given coords.
+ * Returns true if it was selected. */
+static gboolean selectMspIfContainsCoords(GtkWidget *grid, 
+					  const MSP *msp,
+					  const int x,
+					  const int y,
+					  gboolean deselectOthers)
+{
+  gboolean wasSelected = FALSE;
+  
+  if (mspShownInGrid(msp, grid, TRUE))
+    {
+      int mspX, mspY, mspWidth, mspHeight;
+      calculateMspLineDimensions(grid, msp, TRUE, &mspX, &mspY, &mspWidth, &mspHeight);
+      
+      if (x >= mspX && x <= mspX + mspWidth && y >= mspY && y <= mspY + mspHeight)
+	{
+	  /* It's a hit. Select this sequence. */
+	  GtkWidget *blxWindow = gridGetBlxWindow(grid);
+	  
+	  if (deselectOthers)
+	    {
+	      blxWindowDeselectAllSeqs(blxWindow);
+	    }
+	  
+	  blxWindowSelectSeq(blxWindow, msp->sSequence);
+	  
+	  /* Update the selected strand */
+	  GtkWidget *detailView = blxWindowGetDetailView(blxWindow);
+	  detailViewSetSelectedStrand(detailView, gridGetStrand(grid));
+
+	  /* Scroll the detail view trees to bring the new selection into view */
+	  callFuncOnAllDetailViewTrees(detailView, treeScrollSelectionIntoView, NULL);
+
+	  wasSelected = TRUE;
+	}
+    }
+  
+  return wasSelected;
+}
+
+
+/* Loop through all the msp lines for this grid and mark them as selected
+ * if they contain the coords of the mouse press */
+static gboolean selectClickedMspLines(GtkWidget *grid, GdkEventButton *event, const gboolean ctrlModifier, const gboolean shiftModifier)
+{
+  /* Loop through all the MSPs until we find one under the click coords */
+  GtkWidget *blxWindow = gridGetBlxWindow(grid);
+  const MSP *msp = blxWindowGetMspList(blxWindow);
+  const gboolean deselectOthers = !ctrlModifier && !shiftModifier; /* whether to deselect all others first */
+  gboolean found = FALSE;
+
+  for ( ; msp && !found; msp = msp->next)
+    {
+      found = selectMspIfContainsCoords(grid, msp, event->x, event->y, deselectOthers);
+    }
+
+  return found;
+}
+
+
+static gboolean onButtonPressGrid(GtkWidget *grid, GdkEventButton *event, gpointer data)
+{
+  gboolean handled = FALSE;
+  
+  /* left button */
+  if (event->button == 1)
+    {
+      /* If we clicked on top of an msp line, select that msp */
+      const gboolean ctrlModifier = (event->state & GDK_CONTROL_MASK) == GDK_CONTROL_MASK;
+      const gboolean shiftModifier = (event->state & GDK_SHIFT_MASK) == GDK_SHIFT_MASK;
+      
+      handled = selectClickedMspLines(grid, event, ctrlModifier, shiftModifier);
+    }
+  
+  /* Middle button: always show the preview box; left button: show
+   * preview box if we double-clicked, or if we clicked in the highlight
+   * box (i.e. left button selects and drags the highlight box; middle 
+   * button or double-click makes the highlight box jump) */
+  GridProperties *properties = gridGetProperties(grid);
+  
+  if (event->button == 2 || 
+      (event->button == 1 && !handled && 
+       (event->type == GDK_2BUTTON_PRESS || 
+        clickedInRect(event, &properties->highlightRect, HIGHLIGHT_BOX_MIN_WIDTH))))
+    {
+      /* If dragging the highlight box (left button), then centre the preview 
+       * box on the existing highlight box centre; otherwise, centre it on the click pos */
+      int x = event->x;
+      
+      if (event->button == 1 && event->type == GDK_BUTTON_PRESS)
+        x = properties->highlightRect.x + properties->highlightRect.width / 2;
+
+      BigPictureProperties *bpProperties = bigPictureGetProperties(properties->bigPicture);
+      bpProperties->startPreviewBox(event->x, TRUE, x - event->x);
+      handled = TRUE;
+    }
+  
+  return handled;
+}
+
+
+static gboolean onButtonReleaseGrid(GtkWidget *grid, GdkEventButton *event, gpointer data)
+{
+  if (event->button == 1 || event->button == 2) /* left or middle button */
+    {
+      GridProperties *properties = gridGetProperties(grid);
+      BigPictureProperties *bpProperties = bigPictureGetProperties(properties->bigPicture);
+      bpProperties->finishPreviewBox(event->x, &properties->gridRect, &properties->highlightRect);
+    }
+  
+  return TRUE;
+}
+
+
+/* Implement custom scrolling for horizontal mouse wheel movements over the grid.
+ * This scrolls the position of the highlight box, i.e. it scrolls the display
+ * range in the detail view. */
+static gboolean onScrollGrid(GtkWidget *grid, GdkEventScroll *event, gpointer data)
+{
+  gboolean handled = FALSE;
+  
+  switch (event->direction)
+    {
+      case GDK_SCROLL_LEFT:
+	{
+          scrollBigPictureLeftStep(gridGetBigPicture(grid));
+	  handled = TRUE;
+	  break;
+	}
+	
+      case GDK_SCROLL_RIGHT:
+	{
+          scrollBigPictureRightStep(gridGetBigPicture(grid));
+	  handled = TRUE;
+	  break;
+	}
+
+      default:
+	{
+	  handled = FALSE;
+	  break;
+	}
+    };
+  
+  return handled;
+}
+
+
+static gboolean onMouseMoveGrid(GtkWidget *grid, GdkEventMotion *event, gpointer data)
+{
+  if ((event->state & GDK_BUTTON1_MASK) || /* left button */
+      (event->state & GDK_BUTTON2_MASK))   /* middle button */
+    {
+      /* Draw a preview box at the mouse pointer location */
+      BigPictureProperties *bpProperties = bigPictureGetProperties(gridGetBigPicture(grid));
+      bpProperties->startPreviewBox(event->x, FALSE, 0);
+    }
+  
+  return TRUE;
+}
+
+
+/***********************************************************
+ *                       Properties                        *
+ ***********************************************************/
+
+GridProperties* gridGetProperties(GtkWidget *widget)
+{
+  return widget ? (GridProperties*)(g_object_get_data(G_OBJECT(widget), "GridProperties")) : NULL;
+}
+
+static BlxContext* gridGetContext(GtkWidget *grid)
+{
+  GtkWidget *blxWindow = gridGetBlxWindow(grid);
+  return blxWindowGetContext(blxWindow);
+}
+
+static void onDestroyGrid(GtkWidget *widget)
+{
+  GridProperties *properties = gridGetProperties(widget);
+  
+  if (properties)
+    {
+      delete properties;
+      properties = NULL;
+      g_object_set_data(G_OBJECT(widget), "GridProperties", NULL);
+    }
+}
+
+
+GridProperties::GridProperties(GtkWidget *widget_in, 
+                               GtkWidget *bigPicture_in,
+                               gulong exposeHandlerId_in,
+                               BlxStrand strand_in)
+  : widget(widget_in),
+    bigPicture(bigPicture_in),
+    strand(strand_in),
+    mspLineHeight(DEFAULT_MSP_LINE_HEIGHT),
+    gridYPadding(DEFAULT_GRID_Y_PADDING),
+    exposeHandlerId(exposeHandlerId_in),
+    ignoreSizeAlloc(FALSE)
+{
+  gridRect.x = 0;
+  gridRect.y = 0;
+  gridRect.width = 0;
+  gridRect.height = 0;
+  displayRect.x = 0;
+  displayRect.y = 0;
+  displayRect.width = 0;
+  displayRect.height = 0;
+  highlightRect.x = 0;
+  highlightRect.y = 0;
+  highlightRect.width = 0;
+  highlightRect.height = 0;
+}
+
+
+static void gridCreateProperties(GtkWidget *widget, 
+				 GtkWidget *bigPicture,
+				 gulong exposeHandlerId,
+				 BlxStrand strand)
+{
+  if (widget)
+    { 
+      /* Work out how many characters we need to display in the left border for
+       * the vertical grid axis label.  This is the number of digits in the 
+       * largest label value plus one (for a '%' character)
+       * Add a fudge factor to give more space to allow for the fact that 
+       * the calculated char width is approximate and may not give enough space */
+      GridProperties *properties = new GridProperties(widget, 
+                                                      bigPicture,
+                                                      exposeHandlerId,
+                                                      strand);
+      
+      g_object_set_data(G_OBJECT(widget), "GridProperties", properties);
+      g_signal_connect(G_OBJECT(widget), "destroy", G_CALLBACK(onDestroyGrid), NULL); 
+    }
+}
+
+
+static GtkWidget* gridGetBlxWindow(GtkWidget *grid)
+{
+  GridProperties *properties = grid ? gridGetProperties(grid) : NULL;
+  return properties ? bigPictureGetBlxWindow(properties->bigPicture) : NULL;
+}
+
+
+BlxStrand gridGetStrand(GtkWidget *grid)
+{
+  GridProperties *properties = gridGetProperties(grid);
+  return properties->strand;
+}
+
+GtkWidget* gridGetBigPicture(GtkWidget *grid)
+{
+  GridProperties *properties = gridGetProperties(grid);
+  return properties ? properties->bigPicture : NULL;
+}
+
+static IntRange* gridGetDisplayRange(GtkWidget *grid)
+{
+  GtkWidget *bigPicture = gridGetBigPicture(grid);
+  return bigPictureGetDisplayRange(bigPicture);
+}
+
+static GdkColor *gridGetMspLineColor(GtkWidget *grid, const gboolean selected)
+{
+  GtkWidget *bigPicture = gridGetBigPicture(grid);
+  BlxContext *bc = bigPictureGetContext(bigPicture);
+  return getGdkColor(BLXCOLOR_MSP_LINE, bc->defaultColors, selected, bc->usePrintColors);
+}
+
+/***********************************************************
+ *                     Initialization                      *
+ ***********************************************************/
+
+GtkWidget* createBigPictureGrid(GtkWidget *bigPicture, BlxStrand strand)
+{
+  /* Create a layout area for the grid */
+  GtkWidget *grid = gtk_layout_new(NULL, NULL);
+  
+  /* Grid style properties */
+  gtk_widget_set_redraw_on_allocate(grid, FALSE);
+  gtk_widget_set_name(grid, BIG_PICTURE_GRID_NAME);
+  
+  /* Connect signals */
+  gtk_widget_add_events(grid, GDK_BUTTON_PRESS_MASK);
+  gtk_widget_add_events(grid, GDK_BUTTON_RELEASE_MASK);
+  gtk_widget_add_events(grid, GDK_POINTER_MOTION_MASK);
+  
+  gulong exposeHandlerId = g_signal_connect(G_OBJECT(grid), "expose-event", G_CALLBACK(onExposeGrid), NULL);  
+  g_signal_connect(G_OBJECT(grid), "size-allocate",	    G_CALLBACK(onSizeAllocateBigPictureGrid), NULL);
+  g_signal_connect(G_OBJECT(grid), "button-press-event",    G_CALLBACK(onButtonPressGrid),	      NULL);
+  g_signal_connect(G_OBJECT(grid), "button-release-event",  G_CALLBACK(onButtonReleaseGrid),	      NULL);
+  g_signal_connect(G_OBJECT(grid), "motion-notify-event",   G_CALLBACK(onMouseMoveGrid),	      NULL);
+  g_signal_connect(G_OBJECT(grid), "scroll-event",	    G_CALLBACK(onScrollGrid),		      NULL);
+  
+  /* Set required data in the grid. We can't set the tree yet because it hasn't been created yet. */
+  gridCreateProperties(grid, bigPicture, exposeHandlerId, strand);
+  
+  return grid;
+}
+
+
diff --git a/blixemApp/bigpicturegrid.hpp b/blixemApp/bigpicturegrid.hpp
new file mode 100644
index 0000000..526468b
--- /dev/null
+++ b/blixemApp/bigpicturegrid.hpp
@@ -0,0 +1,100 @@
+/*  File: bigpicturegrid.h
+ *  Author: Gemma Barson, 2009-11-23
+ *  Copyright (c) 2009 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: Creates a grid on the Big Picture section. A grid shows the
+ *              alignments on a particular strand of the reference sequence.
+ *              The x coord of the grid is the reference sequence coord and the
+ *              y coord is the %ID of the alignment. An alignment is shown as
+ *              a horizontal line between the start and end coords of the 
+ *              match, at the y coord corresponding to the relevant %ID.
+ *----------------------------------------------------------------------------
+ */
+
+#ifndef _big_picture_grid_included_
+#define _big_picture_grid_included_
+
+
+#include <gtk/gtk.h>
+#include <blixemApp/blixem_.hpp>
+#include <seqtoolsUtils/utilities.hpp>
+
+
+#define BIG_PICTURE_GRID_NAME		"BigPictureGrid"
+
+
+class GridProperties
+{
+public:
+  GridProperties(GtkWidget *widget_in, 
+                 GtkWidget *bigPicture_in,
+                 gulong exposeHandlerId_in,
+                 BlxStrand strand_in);
+
+  GtkWidget *widget;       /* The grid widget */
+  GtkWidget *bigPicture;   /* The big picture that this grid belongs to */
+    
+  BlxStrand strand;	     /* Whether this grid shows the fwd or rev strand of the ref sequence. */
+    
+  int mspLineHeight;	     /* The height of the msp lines */
+    
+  int gridYPadding;	     /* The y padding around the grid */
+    
+  gulong exposeHandlerId;  /* The handler ID for the expose event */
+  gboolean ignoreSizeAlloc; /* Flag to indicate that we should ignore size allocation events */
+    
+  GdkRectangle gridRect;
+  GdkRectangle displayRect;
+  GdkRectangle highlightRect;
+};
+
+
+/* Public function declarations */
+GridProperties*	    gridGetProperties(GtkWidget *widget);
+BlxStrand	    gridGetStrand(GtkWidget *grid);
+GtkWidget*	    gridGetBigPicture(GtkWidget *grid);
+
+void		    calculateGridBorders(GtkWidget *grid);
+void		    calculateGridHighlightBoxBorders(GtkWidget *grid);
+
+void		    callFuncOnAllBigPictureGrids(GtkWidget *widget, 
+						 gpointer data);
+
+gint		    convertValueToGridPos(GtkWidget *grid, 
+					  const gdouble value);
+
+void                gridPrepareForPrinting(GtkWidget *grid);
+
+GtkWidget*	    createBigPictureGrid(GtkWidget *bigPicture, 
+					 BlxStrand strand);
+
+#endif /* _big_picture_grid_included_ */
diff --git a/blixemApp/blixem_.hpp b/blixemApp/blixem_.hpp
new file mode 100644
index 0000000..69b7e32
--- /dev/null
+++ b/blixemApp/blixem_.hpp
@@ -0,0 +1,735 @@
+/*  File: blixem_.h
+ *  Author: Ed Griffiths, 2001-11-29
+ *  Copyright (c) 2009 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: Internal header for Blixem package-wide code
+ *----------------------------------------------------------------------------
+ */
+
+#ifndef DEF_BLIXEM_P_H
+#define DEF_BLIXEM_P_H
+
+#include <gtk/gtk.h>
+#include <config.h>
+
+#include <seqtoolsUtils/utilities.hpp>
+#include <seqtoolsUtils/blxmsp.hpp>
+#include <seqtoolsUtils/version.hpp>
+#include <seqtoolsUtils/seqtoolsFetch.hpp>
+#include <gbtools/gbtools.hpp>
+
+
+class BlxContext;
+
+
+
+/*            blixem program version and information.                        */
+#define BLIXEM_TITLE   "Blixem"
+#define BLIXEM_PREFIX  BLIXEM_TITLE" - "  /* The prefix to use for window titles etc. */
+#define BLIXEM_PREFIX_ABBREV  "B: "       /* An abbreviated version of the prefix to save space e.g. good for displaying in the taskbar */
+#define BLIXEM_DESC    "Multiple alignment visualisation tool."
+
+/* The Seqtools package version should be specified in src/version.m4. autoconf will then set PACKAGE_VERSION in config.h */
+#define BLIXEM_VERSION_STRING      SEQTOOLS_VERSION
+#define BLIXEM_PACKAGE_VERSION     UT_MAKE_VERSION_INFO_STRING(PACKAGE_NAME, SEQTOOLS_VERSION)
+#define BLIXEM_TITLE_STRING        UT_MAKE_TITLE_STRING(BLIXEM_TITLE, BLIXEM_VERSION_STRING)
+#define BLIXEM_VERSION_COMPILE     BLIXEM_VERSION_STRING "  " UT_MAKE_COMPILE_DATE()
+
+#define BLIXEM_COPYRIGHT_STRING    UT_MAKE_COPYRIGHT_STRING("2009-2015")
+#define BLIXEM_WEBSITE_STRING      "http://www.sanger.ac.uk/resources/software/seqtools/"
+#define BLIXEM_LICENSE_STRING      UT_MAKE_LICENCE_STRING(BLIXEM_TITLE)
+
+
+
+#define COLUMN_WIDTHS_GROUP             "column-widths"   /* group name in the config file */
+#define COLUMN_SUMMARY_GROUP            "summary-columns" /* group name in the config file for
+                                                             columns to include in the summary info */
+
+/* Define the columns' default widths and titles. */
+#define BLXCOL_DEFAULT_WIDTH            50    /* default width for generic columns */
+#define BLXCOL_SEQNAME_WIDTH            120   /* default width for the name column */
+#define BLXCOL_SCORE_WIDTH              40    /* default width for the score column */
+#define BLXCOL_ID_WIDTH                 45    /* default width for the ID column */
+#define BLXCOL_SOURCE_WIDTH             85    /* default width for source column  */
+#define BLXCOL_GROUP_WIDTH              58    /* default width for group column  */
+#define BLXCOL_START_WIDTH              50    /* default width for the start coord column */
+#define BLXCOL_END_WIDTH                80    /* default width for end coord column (bigger because it also spans the scrollbar) */
+#define BLXCOL_SEQUENCE_WIDTH           40    /* default width for sequence column */
+#define BLXCOL_ORGANISM_WIDTH           40    /* default width for organism column */
+#define BLXCOL_GENE_NAME_WIDTH          58    /* default width for gene-name column  */
+#define BLXCOL_STRAIN_WIDTH             85    /* default width for strain column  */
+#define BLXCOL_TISSUE_TYPE_WIDTH        100   /* default width for tissue-type column  */
+
+
+/* 
+ * config file groups/keywords, these should not be changed willy nilly as they
+ * are used external programs and users when constructing config files.
+ * If you change things or add additional groups or values, then you should
+ * update the getConfig function.
+ */
+
+/* For overall blixem settings. */
+#define BLIXEM_OLD_BULK_FETCH      "default-fetch-mode"      /* for compatibility with old config files (new config files use SEQTOOLS_BULK_FETCH) */
+
+/* Fetch settings */
+#define FETCH_MODE_KEY             "fetch-mode"  /* any group with this key is a fetch method, and this specifies what type of fetch to do */
+
+
+/* Required keys for http-and pipe-fetch groups */
+#ifdef PFETCH_HTML
+#define HTTP_FETCH_LOCATION       "url"
+#define HTTP_FETCH_PORT           "port"
+#define HTTP_FETCH_ARGS           "request"
+#define HTTP_FETCH_COOKIE_JAR     "cookie-jar"
+#define HTTP_FETCH_PROXY          "proxy"
+#define HTTP_FETCH_IPRESOLVE      "ipresolve"
+#define HTTP_FETCH_CAINFO         "cainfo"
+
+#define PIPE_FETCH_LOCATION       "command"
+#define PIPE_FETCH_ARGS           "args"
+#endif 
+
+/* Required keys for socket-fetch groups */
+#define SOCKET_FETCH_LOCATION     "command"
+#define SOCKET_FETCH_NODE         "node"
+#define SOCKET_FETCH_PORT         "port"
+#define SOCKET_FETCH_ARGS         "args"
+
+/* Required keys for www-fetch groups */
+#define WWW_FETCH_LOCATION       "url"
+#define WWW_FETCH_ARGS           "request"
+
+/* Required keys for db-fetch groups */
+#define DB_FETCH_LOCATION        "location"
+#define DB_FETCH_QUERY           "query"
+#define DB_FETCH_COLUMNS         "columns"
+
+/* Required keys for command-fetch groups */
+#define COMMAND_FETCH_SCRIPT        "command"
+#define COMMAND_FETCH_ARGS          "args"
+
+
+/* Generic fetch keys (applicable to more than one method) */
+#define FETCH_OUTPUT       "output"      /* output format */
+#define FETCH_SEPARATOR    "separator"   /* separator, when combining multiple sequences */
+#define FETCH_ERRORS       "errors"      /* list of messages that indicate errors */
+#define FETCH_DEBUG        "curl-debug"  /* enable verbose debug output */
+
+
+/* For settings */
+#define BLIXEM_SETTINGS_FILE             ".blixemrc"  /* default file name for saving blixem settings to */
+#define SETTINGS_GROUP                   "user-settings"
+#define STYLES_FILE_KEY                  "stylesfile" /* styles-file key in the [blixem] group */  
+
+#define SETTING_NAME_INVERT_SORT "invert-sort"
+#define SETTING_NAME_HIGHLIGHT_DIFFS "highlight-diffs"
+#define SETTING_NAME_HIGHLIGHT_VARIATIONS "highlight-variations"
+#define SETTING_NAME_SHOW_VARIATION_TRACK "show-variations-track"
+#define SETTING_NAME_SHOW_UNALIGNED "show-unaligned"
+#define SETTING_NAME_SHOW_UNALIGNED_SELECTED "show-unaligned-selected-seq"
+#define SETTING_NAME_LIMIT_UNALIGNED_BASES "limit-unaligned"
+#define SETTING_NAME_SHOW_POLYA_SITE "show-polya-site"
+#define SETTING_NAME_SHOW_POLYA_SITE_SELECTED "show-poly-site-selected-seq"
+#define SETTING_NAME_SHOW_POLYA_SIG "show-poly-sig"
+#define SETTING_NAME_SHOW_POLYA_SIG_SELECTED "show-polya-sig-selected-seq"
+#define SETTING_NAME_SHOW_SPLICE_SITES "show-splice-sites"
+#define SETTING_NAME_SHOW_MAYBE_CANONICAL "show-maybe-canonical"
+#define SETTING_NAME_SQUASH_MATCHES "squash-matches"
+#define SETTING_NAME_SHOW_COLINEARITY "show-colinearity"
+#define SETTING_NAME_SHOW_COLINEARITY_SELECTED "show-colinearity-selected"
+
+
+/* would be good to get rid of this.... */
+#define FULLNAMESIZE               255
+
+
+#define MKSTEMP_CONST_CHARS_GFF               "BLIXEM_gff"        /* the prefix to use when creating a temp file name */
+#define MKSTEMP_REPLACEMENT_CHARS             "XXXXXX"            /* the required string that will be replaced by unique chars when creating a temp file name */
+
+
+#define HIGHLIGHT_BOX_Y_PAD             2         /* this provides space between highlight box and the top/bottom of the grid */
+#define HIGHLIGHT_BOX_MIN_WIDTH         5         /* minimum width of the highlight box */
+
+
+/* Blixem config/fetch error domain */
+#define BLX_CONFIG_ERROR g_quark_from_string("Blixem config")
+#define BLX_FETCH_ERROR g_quark_from_string("Blixem config")
+
+/* Error codes */
+typedef enum
+  {
+    BLX_CONFIG_ERROR_NO_GROUPS,             /* no groups in config file */
+    BLX_CONFIG_ERROR_INVALID_KEY_TYPE,      /* invalid key type given in config file */
+    BLX_CONFIG_ERROR_MISSING_KEY,           /* a required key is missing */
+    BLX_CONFIG_ERROR_INVALID_FETCH_MODE,    /* invalid fetch mode specified */
+    BLX_CONFIG_ERROR_INVALID_OUTPUT_FORMAT, /* invalid output format specified for fetch mode */
+    BLX_CONFIG_ERROR_WARNINGS,              /* warnings found while reading config file */
+    BLX_CONFIG_ERROR_SUBSTITUTION,          /* error with substitution string */
+    BLX_CONFIG_ERROR_INVALID_FETCH_METHOD,  /* null fetch method */
+    BLX_CONFIG_ERROR_NO_EXE,                /* fetch method executable does not exist */
+    BLX_CONFIG_ERROR_NULL_FETCH,            /* fetch method is null */
+    BLX_CONFIG_ERROR_NO_ARGS,               /* mandatory args weren't specified */
+    BLX_CONFIG_ERROR_INVALID_IPRESOLVE      /* invalid value given for ipresolve config */
+  } BlxConfigError;
+
+
+/* Error codes */
+typedef enum
+  {
+    BLX_FETCH_ERROR_SOCKET,                /* error creating socket */
+    BLX_FETCH_ERROR_HOST,                  /* unknown host */
+    BLX_FETCH_ERROR_CONNECT,               /* error connecting to host */
+    BLX_FETCH_ERROR_SEND,                  /* error sending to socket */
+    BLX_FETCH_ERROR_PATH                   /* executable not found in path */
+  } BlxFetchError;
+
+
+
+/* Function pointer to a function that performs a fetch of a particular sequence */
+typedef void(*FetchFunc)(const char *seqName, gpointer fetchMethod, const gboolean bulk, GtkWidget *blxWindow);
+
+
+/* The following are used to define default colors for certain types of features in Blixem.
+ * One of several different actual colors from the BlxColor struct may be used depending 
+ * on state, e.g. we use a different color if "print colors" (i.e. black and 
+ * white mode) is on. */
+
+typedef enum 
+  {
+    BLXCOLOR_MIN,           /* dummy value so that we don't get a zero ID */
+  
+    BLXCOLOR_BACKGROUND,    /* background color of the widgets */
+    BLXCOLOR_REF_SEQ,       /* default background color for the reference sequence */  
+    BLXCOLOR_MATCH,         /* background color for an exact match */
+    BLXCOLOR_CONS,          /* background color for a conserved match */
+    BLXCOLOR_MISMATCH,      /* background color for a mismatch */
+    BLXCOLOR_INSERTION,     /* color for an insertion marker */
+    BLXCOLOR_EXON_START,    /* color for the start boundary line of an exon */
+    BLXCOLOR_EXON_END,      /* color for the end boundary line of an exon */
+    BLXCOLOR_CODON,         /* color in which to highlight the nucleotides for the currently-selected codon */
+    BLXCOLOR_MET,           /* background color for MET codons in the three frame translation */
+    BLXCOLOR_STOP,          /* background color for STOP codons in the three frame translation */
+    BLXCOLOR_GRID_LINE,     /* color of the gridlines in the big picture grids */
+    BLXCOLOR_GRID_TEXT,     /* color of the text in the big picture grids */
+    BLXCOLOR_HIGHLIGHT_BOX, /* color of the highlight box in the big picture */
+    BLXCOLOR_PREVIEW_BOX,   /* color of the preview box in the big picture */
+    BLXCOLOR_MSP_LINE,      /* color of the MSP lines in the big picture */
+    BLXCOLOR_SNP,           /* background color for SNPs */
+    BLXCOLOR_GROUP,         /* default highlight color for generic groups */
+    BLXCOLOR_MATCH_SET,     /* default highlight color for the special match-set group */
+    BLXCOLOR_EXON_FILL,     /* fill color for an exon in the big picture */
+    BLXCOLOR_EXON_LINE,     /* line color for an exon in the big picture */
+    BLXCOLOR_CDS_FILL,      /* fill color for a CDS in the big picture (coding region) */
+    BLXCOLOR_CDS_LINE,      /* line color for a CDS in the big picture (coding region) */
+    BLXCOLOR_UTR_FILL,      /* fill color for an UTR in the big picture (non-coding/untranslated region) */
+    BLXCOLOR_UTR_LINE,      /* line color for an UTR in the big picture (non-coding/untranslated region) */
+    BLXCOLOR_UNALIGNED_SEQ, /* color in which to show additional sequence in the match that is not part of the alignment */
+    BLXCOLOR_CANONICAL,     /* background highlight color for canonical intron bases */
+    BLXCOLOR_NON_CANONICAL, /* background highlight color for non-canonical intron bases */
+    BLXCOLOR_MAYBE_CANONICAL,/* background highlight color for splice sites that are "maybe"
+                              * canonical, that is, that would be canonical if on the other
+                              * strand (helps to identify problems in data; common with BAM) */
+    BLXCOLOR_POLYA_TAIL,    /* background color for polyA tails in the detail view */
+    BLXCOLOR_POLYA_SIGNAL,  /* background color for non-annotated polyA signals in the detail view */
+    BLXCOLOR_POLYA_SIGNAL_ANN,/* background color for annotated polyA signals in the detail view */
+    BLXCOLOR_POLYA_SITE_ANN,/* background color for annotated polyA sites in the detail view */
+    BLXCOLOR_TREE_GRID_LINES,/* color of the tree grid lines (i.e. column separator lines) */
+    BLXCOLOR_CLIP_MARKER,   /* color of the marker line used to indicate a match has been clipped */
+    BLXCOLOR_COVERAGE_PLOT, /* color of the coverage plot */
+    BLXCOLOR_ASSEMBLY_GAP,  /* highlight color for assembly gaps */
+    BLXCOLOR_SELECTION,     /* highlight color for selections */
+    BLXCOLOR_PARTIAL_EXON_CROSSHATCH, /* color of cross-hatch lines for partial exons */
+    BLXCOLOR_COLINEAR_PERFECT, /* color of lines joining alignment blocks that are perfectly colinear */
+    BLXCOLOR_COLINEAR_IMPERFECT, /* color of lines joining alignment blocks that are imperfectly colinear */
+    BLXCOLOR_COLINEAR_NOT,  /* color of lines joining alignment blocks that are not colinear */
+
+    BLXCOL_NUM_COLORS
+  } BlxColorId;
+  
+
+/* Utility struct to pass around a set of colors from a styles file */
+typedef struct _BlxStyleColors
+{
+  char *fillColor;
+  char *lineColor; 
+  char *fillColorSelected;
+  char *lineColorSelected;
+  char *fillColorCds;
+  char *lineColorCds;
+  char *fillColorCdsSelected;
+  char *lineColorCdsSelected;
+  gboolean normalFound;
+  gboolean cdsFound;
+} BlxStyleColors;
+
+  
+/* This enum contains a list of all the boolean options that the user can toggle on/off */
+typedef enum
+  {
+    BLXFLAG_MIN,                    /* Start index for looping through flags */
+  
+    BLXFLAG_INVERT_SORT,            /* Inverts the default sort order */
+    BLXFLAG_HIGHLIGHT_DIFFS,        /* Hides matching bases and highlights mis-matching ones */
+    BLXFLAG_HIGHLIGHT_VARIATIONS,   /* Whether to highlight bases that have variations in the reference sequence */
+    BLXFLAG_SHOW_VARIATION_TRACK,   /* Shows the Variations track */
+    BLXFLAG_SHOW_UNALIGNED,         /* Shows additional bits of the match sequence that are not part of the aligned section */
+    BLXFLAG_SHOW_UNALIGNED_SELECTED,/* Only show unaligned bits of sequence for the currently-selected sequence(s) */
+    BLXFLAG_LIMIT_UNALIGNED_BASES,  /* If the show-unaligned-sequence option is on, limits how many bases from the unaligned sequence are shown */
+    BLXFLAG_SHOW_POLYA_SITE,        /* Show polyA tails */
+    BLXFLAG_SHOW_POLYA_SITE_SELECTED,/* Only show polyA tails for the currently-selected sequence(s) */
+    BLXFLAG_SHOW_POLYA_SIG,         /* Show polyA signals in the reference sequence */
+    BLXFLAG_SHOW_POLYA_SIG_SELECTED,/* Only show polyA signals for the currently-selected sequence(s) */
+    BLXFLAG_SHOW_SPLICE_SITES,      /* Highlights splice sites in the reference sequence for the currently-selected MSPs */
+    BLXFLAG_SHOW_MAYBE_CANONICAL,   /* Highlights "maybe canonical" splice sites */
+    BLXFLAG_OPTIONAL_COLUMNS,       /* Gets set to true if the optional columns have been loaded */
+    BLXFLAG_SHOW_CDS,               /* True if CDS/UTR regions should be shown; false if plain exons should be shown */
+    BLXFLAG_NEGATE_COORDS,          /* True if coords should be negated when display is reversed (so coords appear to increase left-to-right when really they decrease) */
+    BLXFLAG_SAVE_TEMP_FILES,        /* save any temporary files that blixem creates, e.g. the GFF file created by the region-fetch fetch mode */
+    BLXFLAG_ABBREV_TITLE,           /* whether to abbreviate the window titles to save space */
+    BLXFLAG_LINK_FEATURES,          /* whether features with the same name should be linked */
+    BLXFLAG_SHOW_COLINEARITY,       /* whether to show colinearity lines between alignment blocks */
+    BLXFLAG_SHOW_COLINEARITY_SELECTED, /* whether to show colinearity lines for selected sequence only */
+    
+    BLXFLAG_NUM_FLAGS               /* Total number of flags e.g. for creating arrays and loops etc */
+  } BlxFlag;
+
+
+/* Structure representing a group of sequences. This groups several BlxSequences together and 
+ * sets various flags so that we can hide/highlight/etc all of the sequences in a group. */
+typedef struct _SequenceGroup
+  {
+    char *groupName;               /* user-friendly name for the group (should be unique to save confusion) */
+    int groupId;                   /* unique ID number for the group */
+    int order;                     /* field for sorting - lower numbers will be listed first */
+    GList *seqList;                /* list of BlxSequences */
+    gboolean ownsSeqNames;         /* If true, the group will free the sequence names when it is destroyed */
+    gboolean hidden;               /* true if the group should be hidden from the detail view */
+    gboolean isFilter;             /* true if this is a filter (i.e. hide everything not in a
+                                    * filter) */
+    gboolean isQuickGroup;         /* true if the group was created by a quick-group or
+                                    * quick-filter option */
+    gboolean highlighted;          /* true if the group should be highlighted */
+    GdkColor highlightColor;       /* the color to highlight the group's sequences in (in both the big picture and the detail view) */
+  } SequenceGroup;
+
+
+/* This enum gives a more meaningful way of indexing the "opts" string */
+typedef enum
+  {
+    BLXOPT_MODE = 0,              /* Blast mode: L = tblastx, N = blastn, P = blastp, T = tblastn, X = blastx */
+    BLXOPT_START_NEXT_MATCH = 1,  /* 'M' means start at next match. Blank to ignore. */
+    BLXOPT_SHOW_BIG_PICT = 2,     /* 'B' to show big picture, 'b' to hide it */
+    BLXOPT_REV_BIG_PICT = 3,      /* 'R' to show the reverse strand in the big picture; 'r' just show the forward strand (blxparser.c) */
+    BLXOPT_FULL_EMBL_INFO = 4,    /* 'F' to parse full embl info on startup; blank to just parse the sequence data (quicker) */
+    BLXOPT_FULL_ZOOM = 5,         /* 'Z' to use full zoom by default; blank otherwise (blxparser.c) */
+    BLXOPT_INVERT_SORT = 6,       /* 'I' to invert the default sort order; blank otherwise */
+    BLXOPT_HSP_GAPS = 7,          /* 'G' for HSP gaps mode; blank otherwise (blxparser.c) */
+    BLXOPT_SORT_MODE = 8,         /* Initial sort mode: i=ID, n=name, p=position, s=score, t=tissue type, m=strain, g=gene name, o=organism;
+                                   * OR: set to 'd' to automatically dotter the first sequence; blank otherwise (blxselect.c) */
+    
+    BLXOPT_NUM_OPTS               /* Total number of options (must always be last in list) */
+  } BlxOptsIdx ;
+
+
+/* This enum contains IDs for all the persistent dialogs in the application, and should be used
+ * to access a stored dialog in the dialogList array in the BlxContext. Note that the dialogList
+ * array will contain null entries until the dialogs are created for the first time */
+typedef enum
+  {
+    BLXDIALOG_NOT_PERSISTENT = 0,   /* Reserved for dialogs that do not have an entry in the array */
+    
+    BLXDIALOG_HELP,                 /* The Help dialog */
+    BLXDIALOG_SETTINGS,             /* The Settings dialog */
+    BLXDIALOG_SORT,                 /* The Sort dialog */
+    BLXDIALOG_FIND,                 /* The Find dialog */
+    BLXDIALOG_GROUPS,               /* The Groups dialog */
+    BLXDIALOG_VIEW,                 /* The View dialog */
+    BLXDIALOG_DOTTER,               /* The Dotter dialog */
+    
+    BLXDIALOG_NUM_DIALOGS           /* The number of dialogs. Must always be the last entry in this enum */
+  } BlxDialogId;
+
+
+/* This enum determines the how to find the match to call dotter on */
+typedef enum
+  {
+    BLXDOTTER_MATCH_SELECTED,  /* call dotter on the currently-selected match sequence */
+    BLXDOTTER_MATCH_ADHOC,     /* call dotter on a manually-pasted sequence */
+    BLXDOTTER_MATCH_SELF       /* call dotter on the reference sequence vs itself */
+  } DotterMatchType ;
+
+/* This enum determines how to find the reference sequence range to call dotter on */
+typedef enum
+  {
+    BLXDOTTER_REF_AUTO,        /* call dotter on an automatically-calculated ref seq range */
+    BLXDOTTER_REF_MANUAL,      /* call dotter on a manually entered ref seq range */
+    BLXDOTTER_REF_TRANSCRIPT   /* call dotter on a transcript range */
+  } DotterRefType;
+
+
+/* This enum gives access into the depthArray for the specific counter (i.e. per-base or all) */
+typedef enum 
+  {
+    DEPTHCOUNTER_NONE,
+
+    DEPTHCOUNTER_ALL_F, // all reads at this coord on + strand
+    DEPTHCOUNTER_GAP_F, // all reads at this coord on + strand
+    DEPTHCOUNTER_A_F,   // all reads with 'a' at this coord on forward strand
+    DEPTHCOUNTER_C_F,   // all reads with 'c' at this coord on forward strand
+    DEPTHCOUNTER_G_F,   // all reads with 'g' at this coord on forward strand
+    DEPTHCOUNTER_T_F,   // all reads with 't' or 'u' at this coord on forward strand
+    DEPTHCOUNTER_N_F,   // all reads with 'n' at this coord on forward strand
+
+    DEPTHCOUNTER_ALL_R, // all reads at this coord on - strand
+    DEPTHCOUNTER_GAP_R, // all reads at this coord on - strand
+    DEPTHCOUNTER_A_R,   // all reads with 'a' at this coord on reverse strand
+    DEPTHCOUNTER_C_R,   // all reads with 'c' at this coord on reverse strand
+    DEPTHCOUNTER_G_R,   // all reads with 'g' at this coord on reverse strand
+    DEPTHCOUNTER_T_R,   // all reads with 't' or 'u' at this coord on reverse strand
+    DEPTHCOUNTER_N_R,   // all reads with 'n' at this coord on reverse strand
+
+    DEPTHCOUNTER_NUM_ITEMS /*must be last*/
+} DepthCounter;
+
+
+/* Struct to hold all the settings that come from the command line options */
+class CommandLineOptions
+{
+public:
+  char *refSeq;                   /* the section of reference sequence we're viewing */
+  char *refSeqName;               /* the name of the reference sequence */
+  IntRange refSeqRange;           /* the range of the reference sequence (before any offset is applied) */
+  int refSeqOffset;               /* if non-zero, all parsed coords will be offset by this amount */
+  int startCoord;                 /* which coord to start the initial display range at */
+  gboolean startCoordSet;         /* true if the start coord has been specified on the command line */
+  MSP *mspList;                   /* the list of alignments */
+  GList *columnList;              /* the list of display columns */
+  char **geneticCode;             /* the genetic code */
+  
+  BlxStrand activeStrand;         /* which strand will initially be the active one */
+  gboolean negateCoords;          /* if this option is true, the display will show coords as negative when the reverse strand is active */
+  gboolean zoomWhole;             /* whether to zoom out to view the entire big picture range on startup */
+  int bigPictZoom;                /* initial zoom level for the big picture (as a multiple of the initial detail view range) */
+  IntRange bigPictRange;          /* initial range for the big picture (will override bigPictZoom if both are set) */
+  gboolean bigPictON;             /* whether to show the big picture by default */
+  gboolean hideInactive;          /* whether to show the inactive strand in the big picture/detail view */
+  BlxColumnId initSortColumn;     /* initial column to sort by */
+  gboolean sortInverted;          /* whether initial sort order should be inverted */
+  gboolean highlightDiffs;        /* whether the initial display should highlight mismatches rather than matches */
+  gboolean dotterFirst;           /* open dotter when blixem starts */
+  gboolean startNextMatch;        /* start at the coord of the next match from the default start coord */
+  gboolean squashMatches;         /* start with the 'squash matches' option on */
+  gboolean optionalColumns;       /* load data for optional columns on startup to populate additional info like tissue-type and strain */
+  gboolean saveTempFiles;         /* save any temporary files that blixem creates */
+  gboolean coverageOn;            /* show the coverage view on start-up */
+  gboolean abbrevTitle;           /* if true, use a abbreviated window titles to save space */
+  
+  gboolean mspFlagDefaults[MSPFLAG_NUM_FLAGS]; /* default values for MSP flags */     
+  
+  BlxBlastMode blastMode;         /* the blast match mode */
+  BlxSeqType seqType;             /* whether the display shows sequences as peptides or nucleotides */
+  int numFrames;                  /* the number of reading frames */
+  GHashTable *fetchMethods;       /* table of fetch methods (keyed on name as a GQuark) */
+  GArray *bulkFetchDefault;       /* the default method(s) for bulk fetching sequences (can be overridden by an MSPs data-type properties) */
+  GArray *userFetchDefault;       /* the default method(s) for fetching individual sequences interactively */
+  GArray *optionalFetchDefault;   /* the default method(s) for bulk fetching optional sequence data */
+  char *dataset;                  /* the name of a dataset, e.g. 'human' */
+  BlxMessageData msgData;         /* data to be passed to the message handlers */
+  gboolean mapCoords;             /* whether the map-coords command-line argument was specified */
+  int mapCoordsFrom;              /* the coord to map from */
+  int mapCoordsTo;                /* the coord to map to */
+  char *windowColor;              /* if not null, set the main window background color to this */
+
+  bool fetch_debug;               /* whether to include verbose debug output for fetch */
+  long ipresolve;                 /* whether to make curl use ipv4 or ipv6 */
+  const char *cainfo;             /* location of curl cainfo file */
+};
+
+
+/* blixem can use either efetch (default) or a pfetch server to get
+ * sequences, to use pfetch node/port information must be specified. */
+typedef struct
+  {
+    char *net_id ;
+    int port ;
+  } PfetchParams ;
+
+
+/* Used to pass around info about a match sequence when getting fetch command arguments */
+typedef struct
+{
+  const char *match_name;
+  const char *ref_name;
+  int match_start;
+  int match_end;
+  const char *dataset;
+  const char *source;
+  const char *filename;
+} MatchSequenceData ;
+
+
+/* Class to perform a user-fetch operation */
+class UserFetch
+{
+
+public:
+  UserFetch();
+
+  UserFetch(const BlxSequence *blxSeq,
+            const gboolean displayResults,
+            GtkWidget *blxWindow,
+            GtkWidget *dialog,
+#ifdef PFETCH_HTML
+            long ipresolve,
+            const char *cainfo,
+#endif
+            bool debug);
+
+  void performFetch();
+
+  GtkTextBuffer *getTextBuffer();
+  void setTextBuffer(GtkTextBuffer *text_buffer);
+
+#ifdef PFETCH_HTML
+  bool httpFetchSequence(const BlxFetchMethod *fetchMethod);
+#endif
+  void socketFetchSequence(const BlxFetchMethod *fetchMethod);
+  void commandFetchSequence(const BlxFetchMethod *fetchMethod);
+  void internalFetchSequence(const BlxFetchMethod *fetchMethod);
+  void wwwFetchSequence(const BlxFetchMethod *fetchMethod);
+  void sqliteFetchSequence(const BlxFetchMethod *fetchMethod);
+
+private:
+
+  const BlxSequence *blxSeq;
+  gboolean displayResults;
+  int attempt;
+  GtkWidget *blxWindow;
+  GtkWidget *dialog;
+  GtkTextBuffer *text_buffer;
+  bool debug;
+
+#ifdef PFETCH_HTML
+  long ipresolve;
+  const char *cainfo;
+#endif
+};
+
+
+/* Class to perform a bulk-fetch operation */
+class BulkFetch
+{
+public:
+  BulkFetch(gboolean External,
+            gboolean saveTempFiles,
+            BlxSeqType seqType,
+            GList **seqList,
+            GList *columnList,
+            GArray *defaultFetchMethods,
+            GHashTable *fetchMethods,
+            MSP **mspList,
+            BlxBlastMode *blastMode,
+            GArray* featureLists[],
+            GSList *supportedTypes, 
+            GSList *styles,
+            int refSeqOffset,
+            IntRange* const refSeqRange,
+            char *dataset,
+            gboolean optionalColumns,
+            GHashTable *lookupTable,
+#ifdef PFETCH_HTML
+            long ipresolve,
+            const char *cainfo,
+#endif
+            bool debug);
+
+  gboolean performFetch();
+  gboolean fetchList(GList *seqsToFetch, const BlxFetchMethod* const fetchMethod, GError **error);
+  gboolean httpFetchList(GList *seqsToFetch, const BlxFetchMethod* const fetchMethod, GError **error);
+  gboolean socketFetchList(GList *seqsToFetch, const BlxFetchMethod* const fetchMethod, GError **error);
+  void regionFetchList(GList *regionsToFetch, const BlxFetchMethod* const fetchMethod, GError **error);
+  void commandFetchList(GList *regionsToFetch, const BlxFetchMethod* const fetchMethod, GError **error);
+
+
+private:
+
+  void regionFetchFeature(const MSP* const msp, 
+                          const BlxFetchMethod* const fetchMethod,
+                          const char *script,
+                          const char *dataset,
+                          const char *tmpDir,
+                          GError **error);
+
+  int attempt;
+  gboolean External;
+  gboolean saveTempFiles;
+  BlxSeqType seqType;
+  GList **seqList; /* list of BlxSequence structs for all required sequences */
+  GList *columnList;
+  GArray *defaultFetchMethods;
+  GHashTable *fetchMethods;
+  MSP **mspList;
+  BlxBlastMode *blastMode;
+  GArray** featureLists;
+  GSList *supportedTypes; 
+  GSList *styles;
+  int refSeqOffset;
+  IntRange* refSeqRange;
+  char *dataset;
+  gboolean optionalColumns;
+  GHashTable *lookupTable;
+  bool debug;
+
+#ifdef PFETCH_HTML
+  long ipresolve;
+  const char *cainfo;
+#endif
+};
+
+
+
+/* blxview.c */
+/* Function to show blixem window, can be called from any application. */
+gboolean                            blxview(CommandLineOptions *options,
+                                            GArray* featureLists[],
+                                            GList *seqList, 
+                                            GSList *supportedTypes,
+                                            PfetchParams *pfetch, 
+                                            char *align_types, 
+                                            gboolean External,
+                                            GSList *styles,
+                                            GHashTable *lookupTable) ;
+
+BlxColumnInfo*                     getColumnInfo(const GList *columnList, const BlxColumnId columnId);
+int                                getColumnWidth(const GList *columnList, const BlxColumnId columnId);
+const char*                        getColumnTitle(const GList *columnList, const BlxColumnId columnId);
+void                               getColumnXCoords(const GList *columnList, const BlxColumnId columnId, IntRange *xRange);
+void                               saveColumnWidths(GList *columnList, GKeyFile *key_file);
+void                               saveSummaryColumns(GList *columnList, GKeyFile *key_file);
+gboolean                           showColumn(BlxColumnInfo *columnInfo);
+void                               resetColumnWidths(GList *columnList);
+
+void                               blviewRedraw(void);
+GtkWidget*                         getBlixemWindow(void);
+const IntRange*                    mspGetFullSRange(const MSP* const msp, const gboolean seqSelected, const BlxContext* const bc);
+const IntRange*                    mspGetDisplayRange(const MSP* const msp);
+const IntRange*                    mspGetFullDisplayRange(const MSP* const msp, const gboolean seqSelected, const BlxContext* const bc);
+void                               mspCalculateFullExtents(MSP *msp, const BlxContext* const bc, const int numUnalignedBases);
+void                               cacheMspDisplayRanges(const BlxContext* const bc, const int numUnalignedBases);
+
+gboolean                           mspGetMatchCoord(const MSP *msp, 
+                                                    const int qIdx, 
+                                                    const gboolean seqSelected,
+                                                    const int numUnalignedBases,
+                                                    BlxContext *bc,
+                                                    int *result_out);
+
+
+void                               drawAssemblyGaps(GtkWidget *widget,
+                                                    GdkDrawable *drawable,
+                                                    GdkColor *color,
+                                                    const gboolean displayRev,
+                                                    GdkRectangle *rect, 
+                                                    const IntRange* const dnaRange,
+                                                    const GArray *mspArray);
+
+GList*                             blxCreateColumns(const gboolean optionalColumns, const gboolean customSeqHeader);
+
+GSList*                            blxReadStylesFile(const char *keyFileName_in, GError **error);
+
+const char*                        blxGetAppName();
+const char*                        blxGetTitlePrefix(const BlxContext* const bc);
+const char*                        blxGetCopyrightString();
+const char*                        blxGetWebSiteString();
+char*                              blxGetCommentsString();
+const char*                        blxGetLicenseString();
+const char*                        blxGetVersionString();        
+
+/* dotter.c */
+//void                               selectFeatures(void);
+
+/* blxparser.c */
+gboolean                           mspHasFs(const MSP *msp);  
+char*                              readFastaSeq(FILE *seqfile, char *qname, int *startCoord, int *endCoord, const BlxSeqType seqType);
+
+/* blxFetch.c */
+BlxFetchMethod*                    getFetchMethodDetails(GQuark fetchMethodQuark, GHashTable *fetchMethods);
+GString*                           getFetchCommand(const BlxFetchMethod* const fetchMethod, const BlxSequence *blxSeq, const MSP* const msp, const char *refSeqName, const int refSeqOffset, const IntRange* const refSeqRange, const char *dataset, GError **error);
+GString*                           doGetFetchCommand(const BlxFetchMethod* const fetchMethod,MatchSequenceData *match_data, GError **error);
+GString*                           getFetchArgs(const BlxFetchMethod* const fetchMethod, const BlxSequence *blxSeq,const MSP* const msp,const char *refSeqName,const int refSeqOffset,const IntRange* const refSeqRange,const char *dataset,GError **error);
+GString*                           getFetchArgsMultiple(const BlxFetchMethod* const fetchMethod, GList *seqsToFetch, GError **error);
+void                               finaliseFetch(GList *seqList, GList *columnList);
+void                               sendFetchOutputToFile(GString *command, GKeyFile *keyFile, BlxBlastMode *blastMode,GArray* featureLists[],GSList *supportedTypes, GSList *styles, GList **seqList, MSP **mspListIn,const char *fetchName, const gboolean saveTempFiles, MSP **newMsps, GList **newSeqs, GList *columnList, GHashTable *lookupTable, const int refSeqOffset, const IntRange* const refSeqRange, GError **error);
+const char*                        outputTypeStr(const BlxFetchOutputType outputType);
+
+void                               fetchSeqsIndividually(GList *seqsToFetch, GtkWidget *blxWindow);
+gboolean                           populateSequenceDataHtml(GList *seqsToFetch, const BlxSeqType seqType, const BlxFetchMethod* const fetchMethod) ;
+gboolean                           populateFastaDataPfetch(GList *seqsToFetch, BlxFetchMethod *fetchMethod, gboolean External, const BlxSeqType seqType, GError **error) ;
+
+gboolean                           populateFullDataPfetch(GList *seqsToFetch, BlxFetchMethod *fetchMethod, gboolean External, const BlxSeqType seqType, GError **error);
+void                               blxInitConfig(const char *config_file, CommandLineOptions *options, GError **error) ;
+GKeyFile*                          blxGetConfig(void) ;
+
+void                               loadNativeFile(const char *filename, const char *buffer, GKeyFile *keyFile, BlxBlastMode *blastMode, GArray* featureLists[], GSList *supportedTypes, GSList *styles, MSP **newMsps, GList **newSeqs, GList *columnList, GHashTable *lookupTable, const int refSeqOffset, const IntRange* const refSeqRange, GError **error);
+void                               blxMergeFeatures(MSP *newMsps, GList *newSeqs, MSP **mspList, GList **seqList);
+
+/* Create/destroy sequences and MSPs */
+void                               blviewResetGlobals();
+
+BlxStyle*                          createBlxStyle(const char *styleName, const char *fillColor, const char *fillColorSelected, const char *lineColor, const char *lineColorSelected, const char *fillColorUtr, const char *fillColorUtrSelected, const char *lineColorUtr, const char *lineColorUtrSelected, GError **error);
+void                               destroyBlxStyle(BlxStyle *style);
+
+void                               createPfetchDropDownBox(GtkBox *box, GtkWidget *blxWindow);
+
+
+/* Dotter/Blixem Package-wide variables...........MORE GLOBALS...... */
+extern char      *stdcode1[];      /* 1-letter amino acid translation code */
+extern int       aa_atob[];
+extern int       PAM120[23][23];
+extern int       dotterGraph;
+extern float     fsPlotHeight;
+extern GtkWidget *blixemWindow;
+
+
+/* blxFetchDb.c */
+
+/* Function pointer for sqlite callback functions */
+typedef int (*SqliteFunc)(void*,int,char**,char**);
+
+void sqliteFetchSequences(GList *seqsToFetch, const BlxFetchMethod* const fetchMethod, GList *columnList, GError **error);
+void sqliteFetchSequence(const BlxSequence* const blxSeq, const BlxFetchMethod* const fetchMethod,const gboolean displayResults, const int attempt,GtkWidget *blxWindow);
+void sqliteValidateFetchMethod(const BlxFetchMethod* const fetchMethod, GError **error);
+int sqliteDisplayResultsCB(void *data, int argc, char **argv, char **azColName);
+void sqliteRequest(const char *database, const char *query, SqliteFunc callbackFunc, void *callbackData, GError **error);
+
+
+#endif /*  !defined DEF_BLIXEM_P_H */
diff --git a/blixemApp/blxFetch.cpp b/blixemApp/blxFetch.cpp
new file mode 100644
index 0000000..48ad362
--- /dev/null
+++ b/blixemApp/blxFetch.cpp
@@ -0,0 +1,3697 @@
+/*  File: blxFetch.c
+ *  Author: Ed Griffiths, 2008-06-17
+ *  Copyright (c) 2009 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: Blixem functions for control of sequence fetching and
+ *              display.
+ *              
+ *              Compiling with -DPFETCH_HTML includes code to issue
+ *              pfetch requests to a proxy pfetch server using html.
+ *              This requires libs libpfetch and libcurlobj
+ *              which in turn require libcurl.
+ *----------------------------------------------------------------------------
+ */
+
+
+#include <string>
+#include <sys/socket.h> /* for socket(), connect(), send(), and recv() */
+#include <netinet/in.h>
+#include <arpa/inet.h>  /* for sockaddr_in and inet_addr() */
+#include <netdb.h>                                          /* for gethostbyname() */
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <errno.h>
+#include <signal.h>
+#include <curl/curl.h>
+
+#include <seqtoolsUtils/utilities.hpp>
+#include <blixemApp/blxwindow.hpp>
+#include <blixemApp/detailview.hpp>
+#include <blixemApp/blixem_.hpp>
+#include <blixemApp/blxcontext.hpp>
+
+#ifdef PFETCH_HTML 
+#include <gbtools/gbtoolsPfetch.hpp>
+#endif
+
+
+using namespace std;
+using namespace gbtools ;
+
+/* States for parsing EMBL files */
+typedef enum
+  {
+    PARSING_NEWLINE,             /* parser is at the start of a new line */
+    PARSING_ID,                  /* parsing the 2-letter id at the start of a line */
+    PARSING_SEQUENCE_HEADER,     /* first line of the SQ section (does not contain sequence data) */
+    PARSING_SEQUENCE,            /* main body of the SQ section (contains sequence data on multiple lines) */
+    PARSING_IGNORE,              /* we're parsing an area we can ignore */
+    PARSING_FINISHED_SEQ,        /* finished parsing the current sequence */
+    PARSING_FINISHED,            /* finished parsing all records */
+    PARSING_CANCELLED,           /* cancelled by user */
+
+    PARSING_DATA,                /* parsing data for a particular column */
+
+    PARSING_TAG_SEARCH,          /* parsing a known section, looking for a particular tag name */
+    PARSING_TAG_NAME,            /* parsing a tag name */
+    PARSING_TAG_IGNORE,          /* parsing the tag data but ignore everything until we get to a quoted section */
+    PARSING_DATA_QUOTED          /* parsing the data for a tag; same as PARSING_DATA but we're in a quoted section */
+  } BlxSeqParserState;
+
+
+
+/* Used to draw/update a progress meter, consider as private. */
+class ProgressBarStruct
+{
+public:
+  ProgressBarStruct() 
+    : top_level(NULL), progress(NULL), label(NULL),
+      widget_destroy_handler_id(0), cancelled(false), seq_total(0), 
+      fetch_mode(BLXFETCH_MODE_NONE)
+  {};
+
+  GtkWidget *top_level ;
+  GtkWidget *progress ;
+  GtkWidget *label ;
+  GdkColor blue_bar_fg, red_bar_fg ;
+
+  gulong widget_destroy_handler_id;
+
+  gboolean cancelled ;
+  int seq_total ;
+  BlxFetchMode fetch_mode ;
+} ;
+
+typedef ProgressBarStruct *ProgressBar;
+
+enum {RCVBUFSIZE = 256} ;               /* size of receive buffer for socket fetch */
+
+/* This struct holds general info about a fetch that is in progress */
+typedef struct GeneralFetchDataStructType
+{
+  const BlxFetchMethod* fetchMethod;      /* details about the fetch method */
+  GList *columnList;                      /* list of BlxColumnInfo structs */ 
+  
+  char *buffer;                           /* receive buffer */
+  int lenReceived;                        /* number of chars received into the buffer */
+  BlxSequence *currentSeq;                /* the current sequence that we're processing */
+  GList *currentSeqItem;                  /* the current sequence that we're processing (list item pointer) */
+  GString *currentResult;                 /* this stores the current results that have been extracted for the section we're parsing */
+  BlxColumnInfo *currentColumn;           /* the column that the current section relates to */
+  ProgressBar bar;                        /* shows the progress of the fetch */
+  int numRequested;                       /* the total number of sequences requested */
+  int numFetched;                         /* the number of sequences fetched so far */
+  int numSucceeded;                       /* the number of sequences fetched successfully so far */
+  GString *curLine;                       /* this stores the part of the current line that we've parsed so far */
+  char sectionId[3];                      /* EMBL lines start with a two-letter identifier, which will be parsed into this string */
+  GString *tagName;                       /* In EMBL FT (feature type) sections, we look for tags of the format /tagname="value".
+                                           * The current tag name is parsed into this string. */
+  gboolean foundEndQuote;                 /* When we're in a quoted section, this is used to flag that we've found a second quote that
+                                           * we think is the end of the quoted section. However, a double quote means an escaped quote, so
+                                           * if the next char is also a quote, we know we need to include it in the text and carry on parsing. */
+  BlxSeqType seqType;
+  BlxSeqParserState parserState;
+  gboolean status;                        /* gets set to false if there is a problem */
+} GeneralFetchDataStruct, *GeneralFetchData ;
+
+
+
+#ifdef PFETCH_HTML 
+#define PFETCH_READ_SIZE 80     /* about a line */
+#define PFETCH_FAILED_PREFIX "PFetch failed:"
+
+
+class PFetchDataStruct
+{
+public:
+  PFetchDataStruct()
+    : title(NULL), widget_destroy_handler_id(0), pfetch(NULL),
+      got_response(false), fetchMethod(NULL), user_fetch(NULL)
+  {};
+
+  char *title;
+
+  gulong widget_destroy_handler_id;
+
+  Pfetch *pfetch ;
+
+  gboolean got_response;
+  const BlxFetchMethod *fetchMethod;
+  UserFetch *user_fetch;
+
+};
+
+typedef PFetchDataStruct *PFetchData ;
+
+
+/* this holds info about an http fetch that is in progress */
+typedef struct
+{
+  gboolean connection_closed;                               /* Gets set to true when pfetch connection is closed */
+  char *err_txt ;                                           /* if !status then err message here. */
+  gboolean stats ;                                          /* TRUE means record and output stats. */
+  int min_bytes, max_bytes, total_bytes, total_reads ;      /* Stats. */
+
+  Pfetch *pfetch ;
+
+  GList *seqList ;                                          /* List of sequences to fetch */
+  gboolean got_response;
+
+  GeneralFetchDataStruct fetchData ;                              /* general info about a fetch in progress*/
+} PFetchSequenceStruct, *PFetchSequence ;
+
+#endif
+
+
+/* Local function declarations */
+#ifdef PFETCH_HTML 
+
+static bool pfetch_reader_func(char *text, guint *actual_read, char **error, gpointer user_data) ;
+static bool pfetch_error_func(char *text, guint *actual_read, char **error, gpointer user_data) ;
+static void pfetch_closed_func(gpointer user_data) ;
+static void handle_dialog_close(GtkWidget *dialog, gpointer user_data);
+
+static bool sequence_pfetch_reader(char *text, guint *actual_read, char * *error, gpointer user_data) ;
+static bool sequence_pfetch_error(char *text, guint *actual_read, char * *error, gpointer user_data) ;
+static void sequence_pfetch_closed(gpointer user_data) ;
+static void sequence_dialog_closed(GtkWidget *dialog, gpointer user_data) ;
+
+static gboolean parsePfetchHtmlBuffer(const BlxFetchMethod* const fetchMethod,
+                                      char *read_text, int length, PFetchSequence fetch_data) ;
+#endif
+
+static int                         socketConstruct(const char *ipAddress, int port, gboolean External, GError **error) ;
+static void                        socketSend(int sock, const char *text, GError **error) ;
+
+static ProgressBar                 makeProgressBar(int seq_total, const BlxFetchMode fetch_mode) ;
+static void                        updateProgressBar(ProgressBar bar, const char *sequence, int numFetched, gboolean fetch_ok) ;
+static gboolean                    isCancelledProgressBar(ProgressBar bar) ;
+static void                        destroyProgressBar(ProgressBar bar) ;
+static void                        destroyProgressCB(GtkWidget *widget, gpointer cb_data) ; /* internal to progress bar. */
+static void                        cancelCB(GtkWidget *widget, gpointer cb_data) ; /* internal to progress bar. */
+
+static void                        readConfigFile(GKeyFile *key_file, CommandLineOptions *options, GError **error) ;
+
+static void                        checkFetchMethodExecutable(const BlxFetchMethod* const fetchMethod, GError **error);
+
+/* Pfetch local functions */
+static void                        appendCharToString(const char curChar, GString *result);
+static void                        appendCharToQuotedString(const char curChar, gboolean *foundEndQuote, GString *result);
+
+static void                        socketFetchInit(const BlxFetchMethod* const fetchMethod, GList *seqsToFetch, gboolean External, int *sock, GError **error);
+static void                        checkProgressBar(ProgressBar bar, BlxSeqParserState *parserState, gboolean *status);
+
+static int                         socketFetchReceiveBuffer(GeneralFetchData fetchData, const int bufferSize, const int sock);
+
+static void                        pfetchGetNextSequence(GeneralFetchData fetchData, const gboolean pfetch_ok);
+
+static void                        parseRawSequenceBuffer(GeneralFetchData fetchData, GError **error);
+
+static void                        pfetchGetParserStateFromId(GeneralFetchData fetchData);
+
+static void                        parseEmblBuffer(GeneralFetchData fetchData, GError **error);
+
+static gboolean                    pfetchFinishSequence(GeneralFetchData fetchData);
+
+static void                        pfetchGetParserStateFromTagName(GeneralFetchData fetchData);
+
+static bool                        configGetBool(GKeyFile *key_file, const char *group, const char *key, GError **error);
+static char*                       configGetString(GKeyFile *key_file, const char *group, const char *key, GError **error);
+
+#ifdef PFETCH_HTML
+static long                        configGetIpresolve(GKeyFile *key_file, const char *group, const char *key, GError **error);
+#endif
+
+/* global configuration object for blixem. */
+static GKeyFile *blx_config_G = NULL ;
+
+
+/* Utility to convert a fetch mode enum into a string (used in the config file) */
+const char *fetchModeStr(const BlxFetchMode fetchMode)
+{
+  /* Values must be in the same order as BlxFetchMode */
+  static const gchar* fetchModeNames[] = 
+    {
+#ifdef PFETCH_HTML 
+      "http",
+      "pipe",
+#endif
+      "socket",
+      "www",
+      "sqlite",
+      "command",
+      "internal",
+      "none",
+      NULL
+    }; 
+  
+  g_assert(g_strv_length((gchar**)fetchModeNames) == BLXFETCH_NUM_MODES);
+
+  const char *result = NULL;
+  
+  if (fetchMode < BLXFETCH_NUM_MODES)
+    result = fetchModeNames[fetchMode];
+  
+  return result;
+}
+
+
+/* Utility to convert a fetch-method output type into a string (used in the config file) */
+const char *outputTypeStr(const BlxFetchOutputType outputType)
+{
+  /* Values must be in the same order as BlxFetchMode */
+  static const gchar* outputNames[] = 
+    {
+      "<invalid>",
+      "raw",
+      "fasta",
+      "embl",
+      "list",
+      "gff",
+      NULL
+    }; 
+  
+  g_assert(g_strv_length((gchar**)outputNames) == BLXFETCH_NUM_OUTPUT_TYPES);
+
+  const char *result = NULL;
+  
+  if (outputType < BLXFETCH_NUM_OUTPUT_TYPES)
+    result = outputNames[outputType];
+  
+  return result;
+}
+
+
+/* Process a single substitution character. Returns false if it's not
+ * a known substitution char. */
+static gboolean doFetchStringSubstitutionChar(const char substitution_char, 
+                                          MatchSequenceData *match_data,
+                                          GString *result, 
+                                          GString *errorMsg)
+{
+  gboolean ok = TRUE;
+  
+  switch (substitution_char)
+    {
+    case 'p': 
+      g_string_append(result, g_get_prgname());
+      break;
+    case 'h': 
+      g_string_append(result, g_get_host_name());
+      break;
+    case 'u': 
+      g_string_append(result, g_get_user_name());
+      break;
+    case 'm': 
+      if (match_data->match_name)
+        g_string_append(result, match_data->match_name);
+      break;
+    case 'r': 
+      if (match_data->ref_name)
+        g_string_append(result, match_data->ref_name);
+      break;
+    case 's': 
+      g_string_append_printf(result, "%d", match_data->match_start);
+      break;
+    case 'e': 
+      g_string_append_printf(result, "%d", match_data->match_end);
+      break;
+    case 'd':
+      if (match_data->dataset)
+        g_string_append(result, match_data->dataset);
+      break;
+    case 'S':
+      if (match_data->source)
+        g_string_append(result, match_data->source);
+      break;
+    case 'f':
+      if (match_data->filename)
+        g_string_append(result, match_data->filename);
+      break;
+    case 'g':
+      g_string_append_printf(result, "%d", SEQTOOLS_GFF_VERSION);
+      break;
+    case '%':
+      break;
+    default:
+      ok = FALSE;
+      
+      if (!errorMsg)
+        errorMsg = g_string_new("");
+      
+      g_string_append_printf(errorMsg, "  Unknown substitution character '%%%c'\n", substitution_char);
+      break;
+    };
+
+  return ok;
+}
+
+
+/* Process a single substitution keyword. Its format should be:
+ *    %(<keyword>) 
+ * where <keyword> is a column name e.g. Source or a key value to 
+ * look up in the source stanza in the config file. */
+static int doFetchStringSubstitutionKeyword(const char* input_string, 
+                                            MatchSequenceData *match_data,
+                                            GString *result, 
+                                            GString *errorMsg)
+{
+  int len = 0;
+  gboolean ok = FALSE;
+
+  /* The input should start with '('. Search for the closing ')' and process
+   * the text in between */
+  if (input_string && *input_string == '(')
+    {
+      const char *cp = strchr(input_string, ')');
+      
+      if (cp)
+        {
+          len = cp - input_string - 1;
+          
+          if (len > 0)
+            {
+              char *key = g_strdup_printf("%s", input_string + 1);
+              key[len] = '\0';
+              
+              /*! \todo Ideally we'd allow the keyword to be a known column name in which case
+               * we'd need to add a check here. Needs a bit of code reorganisation to 
+               * create the columnList before we parse & fetch sequences - currently the columnList
+               * is only created when the window is created, i.e. after parsing & fetching is complete. */
+              
+              /* See if it's a field in this match's source stanza */
+              if (match_data->source)
+                {
+                  GKeyFile *key_file = blxGetConfig();
+                  
+                  if (key_file)
+                    {
+                      char *value = g_key_file_get_string(key_file, match_data->source, key, NULL);
+                      
+                      if (value)
+                        {
+                          g_string_append(result, value);
+                          ok = TRUE;
+                          
+                          g_free(value);
+                        }
+                    }
+                }
+              
+              g_free(key);
+            }
+        }        
+    }
+
+  if (!ok)
+    {
+      if (!errorMsg)
+        errorMsg = g_string_new("");
+     
+      g_string_append_printf(errorMsg, "  Failed to process substitution string '%s'\n", input_string);
+    }
+  
+  return len;
+}
+
+
+/* Process the fetch string, substituting the special substitution characters 
+ * for the actual data */
+static GString* doFetchStringSubstitutions(const char *command,
+                                           MatchSequenceData *match_data,
+                                           GError **error)
+{
+  GString *result = g_string_new("");
+  
+  /* Loop through the command and substitute any special chars with the relevant info  */
+  GString *errorMsg = NULL;
+  const char *c = command;
+      
+  while (c && *c)
+    {
+      /* If it's preceded by the special char, substitute it for the real value */
+      if (*c == '%')
+        {
+          /* Move to the next char, which should tell us what type of substitution to make */
+          ++c;
+          
+          if (c && *c)
+            {
+              switch (*c) {
+              case '%':
+                {
+                  g_string_append_c(result, *c);
+                  ++c;
+                  break;
+                }
+              case '(':
+                {
+                  int len = doFetchStringSubstitutionKeyword(c, match_data, result, errorMsg);
+                  if (len > 0)
+                    c += len + 2; /* progress past the len of the keyword plus the two brackets */
+                  else 
+                    ++c; /* failed; just increment past the current char */
+                  break;
+                }
+              default:
+                {
+                  doFetchStringSubstitutionChar(*c, match_data, result, errorMsg);
+                  ++c; /* Progress to next char even if failed */
+                  break;
+                }
+              };
+            }
+        }
+      else
+        {
+          /* Normal char; just append to the result */
+          g_string_append_c(result, *c);
+          ++c;
+        }
+    }
+
+  if (errorMsg)
+    {
+      g_set_error(error, BLX_CONFIG_ERROR, BLX_CONFIG_ERROR_SUBSTITUTION, "%s", errorMsg->str);
+      prefixError(*error, "Error constructing fetch command:\n");
+      g_string_free(errorMsg, TRUE);
+    }
+
+  return result;
+}
+
+
+static GString* doGetFetchArgs(const BlxFetchMethod* const fetchMethod,
+                               MatchSequenceData *match_data,
+                               GError **error)
+{
+  GString *result = doFetchStringSubstitutions(fetchMethod->args, match_data, error);
+
+  return result;
+}
+
+
+/* Return true if the given fetch method uses http */
+static gboolean fetchMethodUsesHttp(const BlxFetchMethod* const fetchMethod)
+{
+  return (fetchMethod->mode == BLXFETCH_MODE_WWW
+#ifdef PFETCH_HTML
+          || fetchMethod->mode == BLXFETCH_MODE_HTTP
+#endif
+          );
+}
+
+
+/* Compile a command path and arguments into a single string */
+GString* doGetFetchCommand(const BlxFetchMethod* const fetchMethod,
+                           MatchSequenceData *match_data,
+                           GError **error)
+{
+  GString *result = NULL;
+  GError *tmpError = NULL;
+
+  if (fetchMethod)
+    {
+      /* If an executable is required, check that it exists */
+      checkFetchMethodExecutable(fetchMethod, &tmpError);
+
+      if (!tmpError)
+        {
+          /* Compile the command and args into a single string */
+          char *command = NULL;
+      
+          /* For http methods, append the args (i.e. the request) after a '?'.
+           * For other methods, append the args after a space. */
+          if (fetchMethod->location && fetchMethod->args && fetchMethodUsesHttp(fetchMethod))
+            command = g_strdup_printf("%s?%s", fetchMethod->location, fetchMethod->args);
+          else if (fetchMethod->location && fetchMethod->args)
+            command = g_strdup_printf("%s %s", fetchMethod->location, fetchMethod->args);
+          else if (fetchMethod->location)
+            command = g_strdup(fetchMethod->location);
+          else if (fetchMethod->args)
+            command = g_strdup(fetchMethod->args);
+          else
+            return result;
+          
+          result = doFetchStringSubstitutions(command, match_data, error);
+          
+          /* Clean up */
+          g_free(command);
+        }
+    }
+
+  if (tmpError)
+    g_propagate_error(error, tmpError);
+  
+  return result;
+}
+
+
+GString* getFetchArgsMultiple(const BlxFetchMethod* const fetchMethod, GList *seqsToFetch, GError **error)
+{
+  /* Build up a string containing all the sequence names. */
+  GString *seq_string = g_string_sized_new(1000) ;
+  GList *seqItem = seqsToFetch;
+
+  const char *separator = fetchMethod->separator ? fetchMethod->separator : " ";
+  
+  for ( ; seqItem; seqItem = seqItem->next)
+    {
+      BlxSequence *blxSeq = (BlxSequence*)(seqItem->data);
+      g_string_append_printf(seq_string, "%s%s", blxSequenceGetName(blxSeq), separator);
+    }
+
+  MatchSequenceData match_data = {seq_string->str, NULL, 0, 0, NULL, NULL, NULL};
+  GString *result = doGetFetchArgs(fetchMethod, &match_data, error);
+
+  g_string_free(seq_string, TRUE);
+  
+  return result;
+}
+
+
+/* Get the command to call for the given fetch method. Parses
+ * the command and arguments and substitutes the following
+ * characters with values from the given sequence/msp. Note that 
+ * either blxSeq or msp must be given, but not both. '%%' is used
+ * to represent a normal '%' character.
+ * 
+ *   %p:      program name
+ *   %h:      host name
+ *   %u:      user name
+ *   %m:      match sequence name
+ *   %r:      reference sequence name
+ *   %s:      start coord
+ *   %e:      end coord
+ *   %d:      dataset
+ *   %S:      feature source
+ *   %f:      file name
+ *   %g:      supported GFF version
+ * 
+ * Returns the command and args compiled into a single string.
+ * The caller must free the result with g_string_free.
+ * Returns an empty string if the command/args are empty.
+*/
+GString* getFetchCommand(const BlxFetchMethod* const fetchMethod,
+                         const BlxSequence *blxSeq_in,
+                         const MSP* const msp,
+                         const char *refSeqName,
+                         const int refSeqOffset,
+                         const IntRange* const refSeqRange,
+                         const char *dataset,
+                         GError **error)
+{
+  const BlxSequence *blxSeq = blxSeq_in;
+
+  if (!blxSeq && msp)
+    blxSeq = msp->sSequence;
+
+  /* Extract info about the sequence / feature */
+  const char *name = blxSequenceGetName(blxSeq);
+  if (!name) name = mspGetSName(msp);
+  if (!name) name = "";
+  
+  const char *source = blxSeq ? blxSequenceGetSource(blxSeq) : NULL;
+  const char *filename = msp && msp->filename ? g_quark_to_string(msp->filename) : NULL;
+  int startCoord = msp ? mspGetQStart(msp) : blxSequenceGetStart(blxSeq, blxSeq->strand);
+  int endCoord = msp ? mspGetQEnd(msp) : blxSequenceGetEnd(blxSeq, blxSeq->strand);
+  startCoord += refSeqOffset;
+  endCoord += refSeqOffset;
+  boundsLimitValue(&startCoord, refSeqRange);
+  boundsLimitValue(&endCoord, refSeqRange);
+
+  /* Do the substitutions */
+  MatchSequenceData match_data = {name, refSeqName, startCoord, endCoord, dataset, source, filename};
+  GString *result = doGetFetchCommand(fetchMethod, &match_data, error);
+  
+  return result;
+}
+
+
+/* Get the arguments string for the given fetch method (replacing
+ * any substitution characters with the correct values for the given
+ * sequence) */
+GString* getFetchArgs(const BlxFetchMethod* const fetchMethod,
+                      const BlxSequence *blxSeq,
+                      const MSP* const msp,
+                      const char *refSeqName,
+                      const int refSeqOffset,
+                      const IntRange* const refSeqRange,
+                      const char *dataset,
+                      GError **error)
+{
+  g_assert(blxSeq || msp);
+
+  /* Extract info about the sequence / feature */
+
+#ifdef ED_G_NEVER_INCLUDE_THIS_CODE
+  const char *name = blxSequenceGetName(blxSeq);
+  if (!name) name = mspGetSName(msp);
+  if (!name) name = "";
+#endif /* ED_G_NEVER_INCLUDE_THIS_CODE */
+  const char *name ;
+
+  if (!(name = mspGetSNameOrig(msp)))
+    {
+      name = blxSequenceGetName(blxSeq);
+      if (!name) name = mspGetSName(msp);
+      if (!name) name = "";
+    }
+  
+  const char *source = blxSeq ? blxSequenceGetSource(blxSeq) : NULL;
+  const char *filename = msp && msp->filename ? g_quark_to_string(msp->filename) : NULL;
+  int startCoord = blxSeq ? blxSequenceGetStart(blxSeq, blxSeq->strand) : mspGetQStart(msp);
+  int endCoord = blxSeq ? blxSequenceGetEnd(blxSeq, blxSeq->strand) : mspGetQEnd(msp);
+  startCoord += refSeqOffset;
+  endCoord += refSeqOffset;
+  boundsLimitValue(&startCoord, refSeqRange);
+  boundsLimitValue(&endCoord, refSeqRange);
+
+  /* Do the substitutions */
+  MatchSequenceData match_data = {name, refSeqName, startCoord, endCoord, dataset, source, filename};
+  GString *result = doGetFetchArgs(fetchMethod, &match_data, error);
+  
+  return result;
+}
+
+
+/* Return true if the given string matches any in the given array
+ * of quarks (not case sensitive). */
+static gboolean stringInArray(const char *str, GArray *array)
+{
+  gboolean found = FALSE;
+
+  if (array)
+    {
+      const int len1 = strlen(str);
+      int i = 0;
+      
+      for ( ; !found && i < (int)array->len; ++i)
+        {
+          GQuark curQuark = g_array_index(array, GQuark, i);
+          const char *curStr = g_quark_to_string(curQuark);
+          
+          int len = min((int)strlen(curStr), len1);
+          
+          if (strncasecmp(curStr, str, len) == 0)
+            found = TRUE;
+        }
+    }
+  
+  return found;
+}
+
+
+/* Check that the given fetch method is not null; set the error if not */
+static void checkFetchMethodNonNull(const BlxFetchMethod* const fetchMethod, GError **error)
+{
+  if (!fetchMethod)
+    {
+      g_set_error(error, BLX_CONFIG_ERROR, BLX_CONFIG_ERROR_INVALID_FETCH_METHOD, 
+                  "Program error: fetch method is null\n");
+    }
+}
+
+
+/* Check that the given fetch method's executable is in the path; set 
+ * the error if not */
+static void checkFetchMethodExecutable(const BlxFetchMethod* const fetchMethod, GError **error)
+{
+  /* Only command- and socket-fetch require an executable */
+  if (fetchMethod &&
+      (fetchMethod->mode == BLXFETCH_MODE_COMMAND &&
+       fetchMethod->mode == BLXFETCH_MODE_SOCKET))
+    {
+      if (!fetchMethod->location || !g_find_program_in_path(fetchMethod->location))
+        {
+          g_set_error(error, BLX_CONFIG_ERROR, BLX_CONFIG_ERROR_NO_EXE,
+                      "[%s]: Executable '%s' not found in path: %s\n", 
+                      g_quark_to_string(fetchMethod->name), fetchMethod->location, getenv("PATH"));
+        }
+    }
+}
+
+
+#ifdef PFETCH_HTML 
+// Fetch the given list of sequences from an http proxy server. This enables
+// blixem to be run and get sequences from anywhere that can see the http 
+// proxy server
+//
+// NOTE, this function blocks until the sequences have been fetched which 
+// means fetch_data can be on the stack and that we can clear up at the end
+// of this function instead of some callback routine.
+// 
+gboolean BulkFetch::httpFetchList(GList *seqsToFetch, 
+                                  const BlxFetchMethod* const fetchMethod,
+                                  GError **error)
+{
+  gboolean status = FALSE ;
+  PFetchSequenceStruct fetch_data = {FALSE} ;               // n.b. struct is on the stack.
+
+  fetch_data.connection_closed = FALSE;
+  fetch_data.err_txt = NULL;
+  fetch_data.stats = FALSE ;
+  fetch_data.min_bytes = INT_MAX ;
+  fetch_data.max_bytes = 0 ;
+  fetch_data.total_bytes = 0 ;
+  fetch_data.total_reads = 0 ;
+  fetch_data.seqList = seqsToFetch;
+  fetch_data.fetchData.fetchMethod = fetchMethod;
+  fetch_data.fetchData.columnList = columnList;
+  fetch_data.fetchData.currentColumn = NULL;
+  fetch_data.fetchData.currentSeq = seqsToFetch ? (BlxSequence*)(seqsToFetch->data) : NULL;
+  fetch_data.fetchData.currentSeqItem = seqsToFetch;
+  fetch_data.fetchData.currentResult = g_string_new("");
+  fetch_data.fetchData.numRequested = g_list_length(seqsToFetch);
+  fetch_data.fetchData.numFetched = 0;
+  fetch_data.fetchData.numSucceeded = 0;
+  fetch_data.fetchData.curLine = g_string_new("");
+  fetch_data.fetchData.sectionId[0] = ' ';
+  fetch_data.fetchData.sectionId[1] = ' ';
+  fetch_data.fetchData.sectionId[2] = '\0';
+  fetch_data.fetchData.tagName = g_string_new("");
+  fetch_data.fetchData.foundEndQuote = FALSE;
+  fetch_data.fetchData.seqType = seqType ;
+  fetch_data.fetchData.parserState = PARSING_NEWLINE;
+  fetch_data.fetchData.status = TRUE ;
+
+
+  // progress bar is popped up to give user feedback that something is happening.
+  fetch_data.fetchData.bar = makeProgressBar(fetch_data.fetchData.numRequested, fetchMethod->mode) ;  
+  g_signal_connect(G_OBJECT(fetch_data.fetchData.bar->top_level), "destroy",
+                   G_CALLBACK(sequence_dialog_closed), &fetch_data) ;
+  
+  // Make the pfetch object, pipe or html.
+  if (fetchMethod->mode == BLXFETCH_MODE_PIPE)
+    {
+      fetch_data.pfetch =  new PfetchPipe(fetchMethod->location,
+                                          sequence_pfetch_reader, sequence_pfetch_error, sequence_pfetch_closed,
+                                          &fetch_data) ;
+    }
+  else
+    {
+      fetch_data.pfetch = new PfetchHttp(fetchMethod->location, fetchMethod->port,
+                                         fetchMethod->cookie_jar, ipresolve,
+                                         cainfo, fetchMethod->proxy,
+                                         sequence_pfetch_reader, sequence_pfetch_error, sequence_pfetch_closed,
+                                         &fetch_data) ;
+    }
+
+  fetch_data.pfetch->setDebug(debug) ;
+
+  // SORT OUT ERROR MESSAGE STUFF HERE.....
+  GError *g_error = NULL;
+  GString *request = getFetchArgsMultiple(fetchMethod, seqsToFetch, &g_error);
+
+  if (!g_error)
+    {
+      char *err_msg = NULL ;
+
+      /* Set up pfetch/curl connection routines, this is non-blocking so if connection
+       * is successful we block using our own flag. */
+      if ((fetch_data.pfetch->fetch(request->str, &err_msg)))
+        {
+          status = TRUE ;
+
+          while (!(fetch_data.connection_closed) && status && fetch_data.fetchData.parserState != PARSING_CANCELLED)
+            {
+              checkProgressBar(fetch_data.fetchData.bar,
+                               &fetch_data.fetchData.parserState, &fetch_data.fetchData.status);
+              gtk_main_iteration() ;
+            }
+
+          status = fetch_data.fetchData.status ;
+      
+          if (!status)
+            {
+              if (fetch_data.fetchData.parserState != PARSING_CANCELLED)
+                {
+                  g_critical("Sequence fetch from http server failed: %s\n",
+                             (fetch_data.err_txt ? fetch_data.err_txt : "no error")) ;
+                  
+                  if (fetch_data.err_txt)
+                    { 
+                      g_free(fetch_data.err_txt) ;
+                    }
+                }
+            }
+        }
+    }
+  else
+    {
+      status = FALSE ;
+    }
+
+  if (g_error)
+    {
+      g_propagate_error(error, g_error);
+    }
+
+  if (request)
+    g_string_free(request, FALSE);
+
+
+
+  // Get rid of the progress bar.
+  destroyProgressBar(fetch_data.fetchData.bar) ;
+
+
+  // Clear up fetch_data
+  g_string_free(fetch_data.fetchData.currentResult, TRUE);
+  g_string_free(fetch_data.fetchData.tagName, TRUE);
+  g_string_free(fetch_data.fetchData.curLine, TRUE);
+
+  delete fetch_data.pfetch ;
+
+  
+  return status ;
+}
+#endif
+
+
+
+
+
+/* Fetch a list of sequences using sockets.
+ * 
+ * adapted from Tony Cox's code pfetch.c
+ *
+ *  - this version incorporates a progress monitor as a window,
+ *    much easier for user to control + has a cancel button.
+ *  - can be called after the fasta sequence data is already populated:
+ *    in that case it will ignore the sequence data and just populate
+ *    the additional data.
+ *  - sequence data will also be ignored for sequences that do not 
+ *    require sequence data
+ */
+gboolean BulkFetch::socketFetchList(GList *seqsToFetch, 
+                                    const BlxFetchMethod* const fetchMethod,
+                                    GError **error)
+{
+  /* Initialise and send the requests */
+  int sock;
+  GError *tmpError = NULL;
+
+  socketFetchInit(fetchMethod, seqsToFetch, External, &sock, &tmpError);
+
+  /* Create a struct to pass around data releated to the fetch */
+  GeneralFetchDataStruct fetchData;
+  fetchData.fetchMethod = fetchMethod;
+  fetchData.columnList = columnList;
+  fetchData.currentColumn = NULL;
+  fetchData.seqType = seqType,
+  fetchData.status = (tmpError == NULL);
+
+  /* Get the sequences back. They will be returned in the same order that we asked for them, i.e. 
+   * in the order they are in our list. */
+  fetchData.currentSeqItem = seqsToFetch;
+  fetchData.currentSeq = (BlxSequence*)(fetchData.currentSeqItem->data);
+
+  if (!tmpError && fetchData.currentSeq)
+    {
+      char buffer[RCVBUFSIZE + 1];
+      fetchData.buffer = buffer;
+      fetchData.numRequested = g_list_length(seqsToFetch); /* total number of sequences requested */
+      fetchData.bar = makeProgressBar(fetchData.numRequested, fetchMethod->mode);
+      fetchData.numFetched = 0;
+      fetchData.numSucceeded = 0;
+      fetchData.parserState = PARSING_NEWLINE;
+      fetchData.curLine = g_string_new("");
+      fetchData.sectionId[0] = ' ';
+      fetchData.sectionId[1] = ' ';
+      fetchData.sectionId[2] = '\0';
+      fetchData.tagName = g_string_new("");
+      fetchData.currentResult = g_string_new("");
+      fetchData.foundEndQuote = FALSE;      
+     
+      while (fetchData.status &&
+             !tmpError &&
+             fetchData.parserState != PARSING_CANCELLED && 
+             fetchData.parserState != PARSING_FINISHED)
+        {
+          /* Receive and parse the next buffer */
+          checkProgressBar(fetchData.bar, &fetchData.parserState, &fetchData.status);
+          fetchData.lenReceived = socketFetchReceiveBuffer(&fetchData, RCVBUFSIZE, sock);
+          
+          if (fetchMethod->outputType == BLXFETCH_OUTPUT_EMBL)
+            {              
+              parseEmblBuffer(&fetchData, &tmpError);
+            }
+          else if (fetchMethod->outputType == BLXFETCH_OUTPUT_RAW)
+            {
+              parseRawSequenceBuffer(&fetchData, &tmpError);
+            }
+          else
+            {
+              g_set_error(error, BLX_ERROR, 1, "Invalid output format for fetch method %s (expected '%s' or '%s')\n", 
+                          g_quark_to_string(fetchMethod->name),
+                          outputTypeStr(BLXFETCH_OUTPUT_RAW),
+                          outputTypeStr(BLXFETCH_OUTPUT_EMBL));
+            }
+        }
+      
+      /* Finish up */
+      shutdown(sock, SHUT_RDWR);
+      destroyProgressBar(fetchData.bar);
+      fetchData.bar = NULL ;
+      
+      if (fetchData.tagName)
+        g_string_free(fetchData.tagName, TRUE);
+
+      if (fetchData.currentResult)
+        g_string_free(fetchData.currentResult, TRUE);
+
+      if (fetchData.status && !tmpError && fetchData.numSucceeded != fetchData.numRequested)
+        {
+          double proportionOk = (float)fetchData.numSucceeded / (float)fetchData.numRequested;
+
+          /* We don't display a critical error message when fetching the full EMBL file because we're
+           * going to re-try fetching just the fasta data anyway. Display a warning, or just an info
+           * message if a small proportion failed */
+          if (proportionOk < 0.5)
+            {
+              g_warning("pfetch sent back %d when %d requested\n", fetchData.numSucceeded, fetchData.numRequested) ;
+            }
+          else
+            {
+              g_message("pfetch sent back %d when %d requested\n", fetchData.numSucceeded, fetchData.numRequested) ;
+            }
+        }
+    }
+
+  if (tmpError)
+    g_propagate_error(error, tmpError);
+
+  return fetchData.status ;
+}
+
+
+/* Get the contents of the given config file. Returns the contents in
+ * a string which must be freed by the caller. Optionally return the 
+ * length of the string. */
+static gchar* getConfigFileContent(const char *config_file, gsize *len)
+{
+  gchar *content = NULL;
+
+  if (g_file_test(config_file, G_FILE_TEST_EXISTS))
+    {
+      GKeyFile *keyFile = g_key_file_new();
+      
+      if (g_key_file_load_from_file(keyFile, config_file, G_KEY_FILE_NONE, NULL))
+        content = g_key_file_to_data(keyFile, len, NULL);
+      
+      g_key_file_free(keyFile);
+    }
+
+  return content;
+}
+
+
+
+/* Set/Get global config, necessary because we don't have some blixem context pointer....
+ * To do: we do have a context now, so this should be moved to there. 
+ * Sets the error if there were any problems. Note that the error is not set if the
+ * config file does not exist or is empty  */
+void blxInitConfig(const char *config_file, CommandLineOptions *options, GError **error)
+{
+  g_assert(!blx_config_G) ;
+
+  /* Create the result and set it in the global. We always return something
+   * even if it's empty. */
+  GKeyFile *key_file = g_key_file_new();
+  blx_config_G = key_file;
+
+  /* Get the content of the supplied config file, if any */
+  gsize len1 = 0;
+  gchar *content1 = getConfigFileContent(config_file, &len1);
+
+  /* Get the content of the local settings file, if any */
+  char *settings_file = g_strdup_printf("%s/%s", g_get_home_dir(), BLIXEM_SETTINGS_FILE);
+  gsize len2 = 0;
+  gchar *content2 = getConfigFileContent(settings_file, &len2);
+
+  /* Merge both file contents into a single string, if applicable,
+   * or just use whichever content is non-null, if any */
+  gchar *content = NULL;
+  gsize len = 0;
+
+  if (content1 && content2)
+    {
+      /* Merge both file contents. Note that the second file supplied here
+       * will take priority if there are duplicate fields across the two files */
+      len = len1 + len2 + 2; /* need 2 extra chars for the sprintf below (newline and terminating nul) */
+      content = (gchar*)g_malloc(len);
+      sprintf(content, "%s\n%s", content1, content2);
+      
+      /* Free the original strings */
+      g_free(content1);
+      g_free(content2);
+    }
+  else if (content1)
+    {
+      len = len1;
+      content = content1;
+    }
+  else if (content2)
+    {
+      len = len2;
+      content = content2;
+    }
+
+  /* Now load the content into the key file, if we have any */  
+  if (content)
+    {
+      if (g_key_file_load_from_data(key_file, content, len, G_KEY_FILE_NONE, NULL))
+        {
+          /* Parse the config file to read in the blixem options */
+          readConfigFile(key_file, options, error);
+
+          if (error && *error && settings_file && config_file)
+            prefixError(*error, "Errors found while reading config files '%s' and '%s':\n", config_file, settings_file);
+          else if (error && *error && settings_file)
+            prefixError(*error, "Errors found while reading config file '%s':\n", settings_file);
+          else if (error && *error && config_file)
+            prefixError(*error, "Errors found while reading config file '%s':\n", config_file);
+        }
+
+      g_free(content);
+    }
+
+  g_free(settings_file);
+}
+
+
+
+GKeyFile *blxGetConfig(void)
+{
+  return blx_config_G ;
+}
+
+
+/* 
+ *                        Internal functions.
+ */
+
+
+static int socketConstruct(const char *ipAddress, int port, gboolean External, GError **error)
+{
+  int sock ;                       /* socket descriptor */
+  struct sockaddr_in *servAddr ;   /* echo server address */
+  struct hostent *hp ;
+
+
+  /* Create a reliable, stream socket using TCP */
+  if ((sock = socket(PF_INET, SOCK_STREAM, 0)) < 0)
+    {
+      g_set_error(error, BLX_FETCH_ERROR, BLX_FETCH_ERROR_SOCKET,
+                  "Error creating socket\n") ;
+      return -1 ;
+    }
+
+
+  /* Construct the server address structure */
+  servAddr = new struct sockaddr_in;
+  hp = gethostbyname(ipAddress) ;
+  
+  if (!hp)
+    {
+      g_set_error(error, BLX_FETCH_ERROR, BLX_FETCH_ERROR_HOST,
+                  "Unknown host \"%s\"\n", ipAddress);
+      return -1;
+    }
+  
+  servAddr->sin_family = AF_INET ;                          /* Internet address family */
+  bcopy((char*)hp->h_addr, (char*) &(servAddr->sin_addr.s_addr), hp->h_length) ;
+                                                            /* Server IP address */
+  servAddr->sin_port = htons ((unsigned short) port) ;      /* Server port */
+
+
+  /* Establish the connection to the server */
+  if (connect(sock, (struct sockaddr *) servAddr, sizeof(struct sockaddr_in)) < 0)
+    {
+      g_set_error(error, BLX_FETCH_ERROR, BLX_FETCH_ERROR_CONNECT, 
+                  "Error connecting socket to host '%s'\n", ipAddress) ;
+      sock = -1 ;
+    }
+
+  delete servAddr ;
+
+  return sock ;
+}
+
+
+static void socketSend (int sock, const char *text, GError **error)
+{
+  int len, bytes_to_send, bytes_written ;
+  char *tmp ;
+  struct sigaction oursigpipe, oldsigpipe ;
+
+  /* The adding of 0x20 to the end looks wierd but I think it's because the  */
+  /* server may not hold strings in the way C does (i.e. terminating '\0'),  */
+  /* so 0x20 is added to mark the end of the string and the C string term-   */
+  /* inator is moved up one and is not actually sent.                        */
+  len = strlen(text) ;
+  tmp = (char*)g_malloc(len + 2) ;
+  strcpy(tmp, text) ;
+  tmp[len] = 0x20 ;                                         /* Add new string terminator. */
+  tmp[len + 1] = 0 ;
+  bytes_to_send = len + 1 ;
+
+  /* send() can deliver a SIGPIPE if the socket has been disconnected, by    */
+  /* ignoring it we will receive -1 and can look for EPIPE as the errno.     */
+  oursigpipe.sa_handler = SIG_IGN ;
+  sigemptyset(&oursigpipe.sa_mask) ;
+  oursigpipe.sa_flags = 0 ;
+  if (sigaction(SIGPIPE, &oursigpipe, &oldsigpipe) < 0)
+    g_error("Cannot set SIG_IGN for SIGPIPE for socket write operations.\n") ;
+
+  bytes_written = send(sock, tmp, bytes_to_send, 0) ;
+  if (bytes_written == -1)
+    {
+      if (errno == EPIPE || errno == ECONNRESET || errno == ENOTCONN)
+        {
+          char *msg = getSystemErrorText();
+          g_set_error(error, BLX_FETCH_ERROR, BLX_FETCH_ERROR_CONNECT,
+                      "Socket connection to server has failed, error was: %s\n", msg) ;
+          g_free(msg);
+        }
+      else
+      {
+        char *msg = getSystemErrorText();
+        g_error("Fatal error on socket connection to pfetch server, error was: %s\n", msg) ;
+        g_free(msg);
+      }
+    }
+  else if (bytes_written != bytes_to_send)
+    {
+      g_error("send() call should have written %d bytes, but actually wrote %d.\n", bytes_to_send, bytes_written) ;
+    }
+
+  /* Reset the old signal handler.                                           */
+  if (sigaction(SIGPIPE, &oldsigpipe, NULL) < 0)
+    {
+      g_error("Cannot reset previous signal handler for signal SIGPIPE for socket write operations.\n") ;
+    }
+
+  g_free(tmp) ;
+}
+
+
+
+#ifdef PFETCH_HTML 
+
+// Callbacks for user-triggered single pfetch - called from UserFetch::httpFetchSequence()
+//
+
+static bool pfetch_reader_func(char         *text,
+                               guint        *actual_read,
+                               char **error,
+                               gpointer      user_data)
+{
+  PFetchData pfetch_data = (PFetchData)user_data;
+  bool status = true ;
+
+  if (actual_read && *actual_read > 0 && pfetch_data)
+    {
+      GtkTextBuffer *text_buffer = pfetch_data->user_fetch->getTextBuffer();
+
+      /* clear the buffer the first time... */
+      if(pfetch_data->got_response == FALSE)
+        {
+          gtk_text_buffer_set_text(text_buffer, "", 0);
+        }
+
+      gtk_text_buffer_insert_at_cursor(text_buffer, text, *actual_read);
+      pfetch_data->got_response = TRUE;
+
+      /* If we tried fetching the full entry and failed, try again
+       * with the next fetch method, if there is one */
+      if (stringInArray(text, pfetch_data->fetchMethod->errors))
+        {
+          pfetch_data->user_fetch->performFetch();
+        }
+    }
+
+  return status;
+}
+
+static bool pfetch_error_func(char         *text,
+                              guint        *actual_read,
+                              char **error,
+                              gpointer      user_data)
+{
+  g_warning("pfetch 'error' signal received: %s", text ? text : "") ;
+
+  return true;
+}
+
+
+static void pfetch_closed_func(gpointer user_data)
+{
+  DEBUG_OUT("pfetch closed\n");
+  PFetchData pfetch_data = (PFetchData)user_data;
+
+  if (pfetch_data && pfetch_data->pfetch)
+    {
+      GtkTextBuffer *text_buffer = pfetch_data->user_fetch->getTextBuffer();
+
+      if(!(pfetch_data->got_response))
+        {
+          /* If we didn't get a response then report an error and try again with the next fetch method */
+          gtk_text_buffer_set_text(text_buffer, "", 0);
+
+          const char *locn = "" ;
+
+          if (pfetch_data->fetchMethod && pfetch_data->fetchMethod->location)
+            {
+              locn = pfetch_data->fetchMethod->location;
+            }
+
+          char *handle_err = (static_cast<PfetchHttp *>(pfetch_data->pfetch))->getError() ;
+
+          char *err_msg = g_strdup_printf("Connection to '%s' closed without a response:\n%s\n",
+                                          locn, handle_err ? handle_err : "no error message");
+
+          gtk_text_buffer_insert_at_cursor(text_buffer, err_msg, strlen(err_msg));
+
+          g_free(err_msg) ;
+
+          pfetch_data->user_fetch->performFetch();
+        }
+    }
+
+  return;
+}
+
+
+/* GtkObject destroy signal handler */
+static void handle_dialog_close(GtkWidget *dialog, gpointer user_data)
+{
+  PFetchData pfetch_data   = (PFetchData)user_data;
+
+  pfetch_data->user_fetch->setTextBuffer(NULL);
+  pfetch_data->widget_destroy_handler_id = 0; /* can we get this more than once? */
+
+  if (pfetch_data->pfetch)
+    delete pfetch_data->pfetch ;
+
+  delete pfetch_data ;
+
+  return ;
+}
+
+
+
+// Callbacks for multiple pfetch requests triggered by config/blixem start up options
+// - called from BulkFetch::httpFetchList()
+//
+
+static bool sequence_pfetch_reader(char *text, guint *actual_read, char **error, gpointer user_data)
+{
+  bool status = true ;
+  PFetchSequence fetch_data = (PFetchSequence)user_data ;
+  ProgressBar bar = fetch_data->fetchData.bar ;
+
+  if (fetch_data->fetchData.parserState != PARSING_FINISHED && 
+      fetch_data->fetchData.parserState != PARSING_CANCELLED)
+    {
+      if (!(*text) || *actual_read <= 0)
+        {
+          fetch_data->fetchData.parserState = PARSING_FINISHED ;
+          fetch_data->fetchData.status = FALSE ;
+          fetch_data->err_txt = g_strdup("No data returned by http proxy server.") ;
+        }
+      else if (*actual_read > 0)
+        {
+          fetch_data->got_response = TRUE ;
+
+          if (isCancelledProgressBar(bar))
+            {
+              fetch_data->fetchData.status = FALSE ;
+              fetch_data->fetchData.parserState = PARSING_CANCELLED ;
+      
+              status = false ;
+            }
+          else if (!parsePfetchHtmlBuffer(fetch_data->fetchData.fetchMethod, text, *actual_read, fetch_data))
+            {
+              status = false ;
+            }
+        }
+    }
+
+  return status ;
+}
+
+static bool sequence_pfetch_error(char *text, guint *actual_read, char **error, gpointer user_data)
+{
+  g_warning("pfetch 'error' signal received: %s", text ? text : "") ;
+
+  return true ;
+}
+
+
+static void sequence_pfetch_closed(gpointer user_data)
+{
+  PFetchSequence fetch_data = (PFetchSequence)user_data ;
+
+  DEBUG_OUT("pfetch closed\n");
+
+  fetch_data->fetchData.parserState = PARSING_FINISHED ;
+  fetch_data->connection_closed = TRUE;
+
+  if (fetch_data->stats)
+    {
+      g_message("Stats for %d reads:\tmin = %d\tmax = %d\tmean = %d\n",
+                fetch_data->total_reads,
+                fetch_data->min_bytes, fetch_data->max_bytes,
+                (fetch_data->total_bytes / fetch_data->total_reads)) ;
+    }
+
+  if (!fetch_data->got_response)
+    {
+      const char *locn = "" ;
+
+      if (fetch_data && fetch_data->fetchData.fetchMethod && fetch_data->fetchData.fetchMethod->location)
+        locn = fetch_data->fetchData.fetchMethod->location ;
+
+      char *err_msg = (static_cast<PfetchHttp *>(fetch_data->pfetch))->getError() ;
+
+      g_warning("Connection to '%s' closed without a response:\n%s\n",
+                locn, err_msg ? err_msg : "no error message");
+
+      if (err_msg)
+        g_free(err_msg) ;
+    }
+
+  return ;
+}
+
+
+/* Progress meter has been destroyed so free all pfetch stuff. */
+static void sequence_dialog_closed(GtkWidget *dialog, gpointer user_data)
+{
+  PFetchSequence fetch_data = (PFetchSequence)user_data ;
+
+  fetch_data->fetchData.bar = NULL ;
+
+  return ;
+}
+
+
+
+
+/* Utility to record the stats for the current read buffer, if stats are enabled */
+static void pfetchHtmlRecordStats(const char *read_text, const int length, PFetchSequence fetch_data)
+{
+  if (fetch_data->stats)
+    {
+      if (length < fetch_data->min_bytes)
+        fetch_data->min_bytes = length ;
+
+      if (length > fetch_data->max_bytes)
+        fetch_data->max_bytes = length ;
+
+      fetch_data->total_bytes += length ;
+
+      fetch_data->total_reads++ ;
+  
+      if (length < 100)
+        {
+          char *str ;
+
+          str = g_strndup(read_text, length) ;
+          g_message("Read %d: \"%s\"\n", fetch_data->total_reads, str) ;
+          g_free(str) ;
+        }
+    }
+
+  return ;
+}
+
+
+/* Parse the buffer sent back by proxy server. The pfetch server sends back data separated
+ * by newlines. The data is either a valid IUPAC dna sequence or a valid IUPAC peptide
+ * sequence or an error message. The problem here is that the data is not returned to
+ * this function in complete lines so we have to reconstruct the lines as best we can. It's
+ * even possible for very long sequences that they may span several buffers. Note also
+ * that the buffer is _not_ null terminated, we have to use length to know when to stop reading.
+ */
+static gboolean parsePfetchHtmlBuffer(const BlxFetchMethod* const fetchMethod,
+                                      char *read_text,
+                                      int length,
+                                      PFetchSequence fetch_data)
+{
+  gboolean status = TRUE ;
+
+  /* Validate input and record stats, if requested */
+  g_assert(fetch_data && fetch_data->fetchData.currentSeqItem && fetch_data->fetchData.currentSeqItem->data);
+  pfetchHtmlRecordStats(read_text, length, fetch_data);
+  
+  GError *error = NULL;
+  
+  fetch_data->fetchData.buffer = read_text;
+  fetch_data->fetchData.lenReceived = length;
+
+  if (fetch_data->fetchData.fetchMethod->outputType == BLXFETCH_OUTPUT_EMBL)
+    {
+      /* We're fetching the full EMBL entries */
+      parseEmblBuffer(&fetch_data->fetchData, &error);
+    }
+  else if (fetch_data->fetchData.fetchMethod->outputType == BLXFETCH_OUTPUT_RAW)
+    {
+      /* The fetched entries just contain the FASTA sequence */
+      parseRawSequenceBuffer(&fetch_data->fetchData, &error);
+    }
+  else 
+    {
+      g_set_error(&error, BLX_CONFIG_ERROR, BLX_CONFIG_ERROR_INVALID_OUTPUT_FORMAT, 
+                  "Invalid output format specified for fetch method '%s'; expected '%s' or '%s'\n",
+                  g_quark_to_string(fetch_data->fetchData.fetchMethod->name), 
+                  outputTypeStr(BLXFETCH_OUTPUT_EMBL), 
+                  outputTypeStr(BLXFETCH_OUTPUT_RAW));
+    }
+  
+  if (error)
+    {
+      fetch_data->err_txt = g_strdup(error->message);
+      g_error_free(error);
+      error = NULL;
+    }
+  
+  status = fetch_data->fetchData.status ;
+  
+  return status;
+}
+
+
+
+#endif /* PFETCH_HTML */
+
+
+
+/* Functions to display, update, cancel and remove a progress meter. */
+
+static ProgressBar makeProgressBar(int seq_total, const BlxFetchMode fetch_mode)
+{
+  ProgressBar bar = new ProgressBarStruct;
+
+  bar->seq_total = seq_total ;
+  bar->cancelled = FALSE;
+  bar->widget_destroy_handler_id = 0;
+  bar->fetch_mode = fetch_mode;
+  
+  gdk_color_parse("blue", &(bar->blue_bar_fg)) ;
+  gdk_color_parse("red", &(bar->red_bar_fg)) ;
+
+  bar->top_level = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+  char *title = g_strdup_printf("Blixem - pfetching %d sequences...", seq_total) ;
+  gtk_window_set_title(GTK_WINDOW(bar->top_level), title) ;
+  g_free(title) ;
+  g_signal_connect(G_OBJECT(bar->top_level), "destroy", G_CALLBACK(destroyProgressCB), bar) ;
+
+
+  gtk_window_set_default_size(GTK_WINDOW(bar->top_level), 350, -1) ;
+
+  GtkWidget *frame = gtk_frame_new(NULL) ;
+  gtk_container_add(GTK_CONTAINER(bar->top_level), frame) ;
+
+  GtkWidget *vbox = gtk_vbox_new(FALSE, 5) ;
+  gtk_container_add(GTK_CONTAINER(frame), vbox) ;
+
+  bar->progress = gtk_progress_bar_new() ; 
+
+  gtk_widget_modify_fg(bar->progress, GTK_STATE_NORMAL, &(bar->blue_bar_fg)) ;
+
+  gtk_box_pack_start(GTK_BOX(vbox), bar->progress, TRUE, TRUE, 0);
+
+  bar->label = gtk_label_new("") ;
+  gtk_box_pack_start(GTK_BOX(vbox), bar->label, TRUE, TRUE, 0);
+
+  GtkWidget *hbox = gtk_hbox_new(FALSE, 0) ;
+  gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
+  gtk_container_border_width(GTK_CONTAINER(hbox), 5);
+
+  GtkWidget *cancel_button = gtk_button_new_with_label("Cancel") ;
+  gtk_box_pack_start(GTK_BOX(hbox), cancel_button, TRUE, TRUE, 0) ;
+  gtk_signal_connect(GTK_OBJECT(cancel_button), "clicked", GTK_SIGNAL_FUNC(cancelCB), (gpointer)bar) ;
+
+#ifdef PFETCH_HTML
+  /* We need to quit if the user cancels http-fetch due to a bug on the mac. See \note "Bad file descriptor" */
+  if (fetch_mode == BLXFETCH_MODE_HTTP)
+    gtk_widget_set_tooltip_text(cancel_button, "Cancel the current operation and exit the program");
+  else
+#endif
+    gtk_widget_set_tooltip_text(cancel_button, "Cancel the current operation and continue to start up the program");
+
+  gtk_widget_show_all(bar->top_level) ;
+  
+  while (gtk_events_pending())
+    {
+      gtk_main_iteration() ;
+    }
+
+  return bar ;
+}
+
+static void updateProgressBar(ProgressBar bar, const char *sequence, int numFetched, gboolean fetch_ok)
+{
+  char *label_text ;
+
+  if (fetch_ok)
+    gtk_widget_modify_fg(bar->progress, GTK_STATE_NORMAL, &(bar->blue_bar_fg)) ;
+  else
+    gtk_widget_modify_fg(bar->progress, GTK_STATE_NORMAL, &(bar->red_bar_fg)) ;
+
+  label_text = g_strdup_printf("%s - %s", sequence, fetch_ok ? "Fetched" : "Not found") ;
+  gtk_label_set_text(GTK_LABEL(bar->label), label_text) ;
+  g_free(label_text) ;
+  
+  gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(bar->progress),
+                                (double)((double)numFetched / (double)(bar->seq_total))) ;
+
+  while (gtk_events_pending())
+    gtk_main_iteration();
+
+  return ;
+}
+
+
+static gboolean isCancelledProgressBar(ProgressBar bar)
+{
+  return bar->cancelled ;
+}
+
+
+static void destroyProgressBar(ProgressBar bar)
+{
+  gtk_widget_destroy(bar->top_level) ;
+  
+  return ;
+}
+
+
+/* called from progress meter when being destroyed, do not call directly. */
+static void destroyProgressCB(GtkWidget *widget, gpointer cb_data)
+{
+  ProgressBar bar = (ProgressBar)cb_data ;
+
+  delete bar ;
+
+  return ;
+}
+
+
+/* Called from progress meter. */
+static void cancelCB(GtkWidget *widget, gpointer cb_data)
+{
+  ProgressBar bar = (ProgressBar)cb_data ;
+
+  bar->cancelled = TRUE ;
+
+#ifdef PFETCH_HTML
+  if (bar->fetch_mode == BLXFETCH_MODE_HTTP)
+    {
+      /*! \note "Bad file descriptor"
+       * There is a bug somewhere (in GTK or in our use of it) which means that on the mac GTK
+       * can get into an infinite loop of issuing "Bad file descriptor" error messages when pfetching
+       * over http or when pfetch-http is cancelled. This can continue in the background even if
+       * blixem then seems to start up ok. For now, make the Cancel button quit blixem
+       * altogether so that it at least is easy to get out of this state. */
+      g_message("\nCancelled http-fetch: quitting Blixem\n");
+
+      exit(1);
+    }
+#endif
+
+  return ;
+}
+
+
+
+
+
+/* 
+ *            Configuration file reading.
+ */
+
+/* Get default blixem options from the "blixem" stanza */
+static void readBlixemStanza(GKeyFile *key_file,
+                             const char *group, 
+                             CommandLineOptions *options,
+                             GError **error)
+{
+  /* Note that all values are optional, so don't set the error if they
+   * do not exist */
+
+  /* Get the window background color if set */
+  options->windowColor = g_key_file_get_string(key_file, group, SEQTOOLS_WINDOW_COLOR, NULL);
+
+  /* Get the comma-separated list of possible fetch methods */
+  options->bulkFetchDefault = keyFileGetCsv(key_file, group, SEQTOOLS_BULK_FETCH, NULL);
+  options->userFetchDefault = keyFileGetCsv(key_file, group, SEQTOOLS_USER_FETCH, NULL);
+  options->optionalFetchDefault = keyFileGetCsv(key_file, group, SEQTOOLS_OPTIONAL_FETCH, NULL);
+
+  /* If the bulk-fetch key wasn't found, try the old
+   * default-fetch-mode key, for backwards compatibility */
+  if (!options->bulkFetchDefault)
+    options->bulkFetchDefault = keyFileGetCsv(key_file, group, BLIXEM_OLD_BULK_FETCH, NULL);
+
+#ifdef PFETCH_HTML
+  options->ipresolve = configGetIpresolve(key_file, group, HTTP_FETCH_IPRESOLVE, NULL);
+  options->cainfo = configGetString(key_file, group, HTTP_FETCH_CAINFO, NULL);
+#endif
+
+  options->fetch_debug = configGetBool(key_file, group, FETCH_DEBUG, NULL);
+
+  /* Get the default values for the MSP flags, if they're specified in the blixem stanza. */
+  int flag = MSPFLAG_MIN + 1;
+  for ( ; flag < MSPFLAG_NUM_FLAGS; ++flag)
+    {
+      GError *tmpError = NULL;
+      const char *key = mspFlagGetConfigKey((MspFlag)flag);
+      gboolean value = g_key_file_get_boolean(key_file, group, key, &tmpError);
+      
+      /* If found, set it as the default */
+      if (!tmpError)
+        mspFlagSetDefault((MspFlag)flag, value);
+    }
+}
+
+
+/* Get the output type from the given fetch stanza. Returns BLXFETCH_OUTPUT_INVALID if
+ * not found. The input error value can be non-null, in which case any new error message
+ * will be appended. */
+static BlxFetchOutputType readFetchOutputType(GKeyFile *key_file, const char *group, GError **error)
+{
+  BlxFetchOutputType result = BLXFETCH_OUTPUT_INVALID;
+
+  GError *tmpError = NULL;
+  char *outputTypeName = removeDelimiters(g_key_file_get_string(key_file, group, FETCH_OUTPUT, &tmpError));
+
+  if (!tmpError)
+    {
+      /* Loop through all output types looking for one with this name */
+      int outputType = 0;
+      
+      for ( ; outputType < BLXFETCH_NUM_OUTPUT_TYPES; ++outputType)
+        {
+          if (stringsEqual(outputTypeName, outputTypeStr((BlxFetchOutputType)outputType), FALSE))
+            {
+              result = (BlxFetchOutputType)outputType;
+              break;
+            }
+        }
+      
+      if (result == BLXFETCH_OUTPUT_INVALID)
+        {
+          g_set_error(&tmpError, BLX_CONFIG_ERROR, BLX_CONFIG_ERROR_INVALID_OUTPUT_FORMAT,
+                      "Invalid output type '%s' for fetch method '%s'", outputTypeName, group);
+        }
+    }
+  
+  if (tmpError && error && *error)
+    postfixError(*error, "; %s", tmpError->message);
+  else if (tmpError)
+    g_propagate_error(error, tmpError);
+ 
+  g_free(outputTypeName);
+
+  return result;
+}
+
+
+/* Utilities to get a value from a key-file and remove delimiters and whitespace (where applicable).
+ * The input error may be non-null, in which case any new error message will be appended to it. */
+static char* configGetString(GKeyFile *key_file, const char *group, const char *key, GError **error)
+{
+  GError *tmpError = NULL;
+  
+  char *result = g_key_file_get_string(key_file, group, key, &tmpError);
+
+  if (result)
+    {
+      /* remove any leading/trailing whitespace */
+      result = g_strchug(g_strchomp(result));
+
+      /* remove any delimiters */
+      result = removeDelimiters(result);
+    }
+  
+  if (tmpError && error && *error)
+    postfixError(*error, "; %s", tmpError->message);
+  else if (tmpError)
+    g_propagate_error(error, tmpError);
+
+  return result;
+}
+
+static int configGetInteger(GKeyFile *key_file, const char *group, const char *key, GError **error)
+{
+  GError *tmpError = NULL;
+  int result = g_key_file_get_integer(key_file, group, key, &tmpError);
+
+  if (tmpError && error && *error)
+    postfixError(*error, "; %s", tmpError->message);
+  else if (tmpError)
+    g_propagate_error(error, tmpError);
+
+  return result;
+}
+
+static bool configGetBool(GKeyFile *key_file, const char *group, const char *key, GError **error)
+{
+  GError *tmpError = NULL;
+  bool result = g_key_file_get_boolean(key_file, group, key, &tmpError);
+
+  if (tmpError && error && *error)
+    postfixError(*error, "; %s", tmpError->message);
+  else if (tmpError)
+    g_propagate_error(error, tmpError);
+
+  return result;
+}
+
+#ifdef PFETCH_HTML
+static long configGetIpresolve(GKeyFile *key_file, const char *group, const char *key, GError **error)
+{
+  long result = CURL_IPRESOLVE_WHATEVER;
+  GError *tmpError = NULL;
+  char *tmp_str = g_key_file_get_string(key_file, group, key, &tmpError);
+
+  if (!tmpError)
+    {
+      if (tmp_str && strlen(tmp_str) == 4)
+        {
+          if (g_ascii_strncasecmp(tmp_str, "ipv4", 4) == 0)
+            result = CURL_IPRESOLVE_V4;
+          else if (g_ascii_strncasecmp(tmp_str, "ipv6", 4) == 0)
+            result = CURL_IPRESOLVE_V6;
+        }
+      else
+        {
+          g_set_error(&tmpError, BLX_CONFIG_ERROR, BLX_CONFIG_ERROR_INVALID_IPRESOLVE,
+                      "Unrecognised IP format '%s' (expected 'ipv4' or 'ipv6')", tmp_str);
+        }
+    }
+
+  if (tmpError && error && *error)
+    postfixError(*error, "; %s", tmpError->message);
+  else if (tmpError)
+    g_propagate_error(error, tmpError);
+
+  return result;
+}
+#endif 
+
+
+/* Get details about the given fetch method stanza and add it to 
+ * the list of fetch methods in 'options' */
+static void readFetchMethodStanza(GKeyFile *key_file, 
+                                  const char *group, 
+                                  CommandLineOptions *options, 
+                                  GError **error)
+{
+  BlxFetchMethod *result = NULL;
+
+  GError *tmpError = NULL;
+  char *fetchMode = configGetString(key_file, group, FETCH_MODE_KEY, &tmpError);
+
+  if (!tmpError)
+    result = createBlxFetchMethod(group);
+
+  /* Set the relevant properties for this type of fetch method. (Append a
+   * warning to tmpError for mandatory arguments if they are not found.) */
+  if (!tmpError)
+    {
+      if (stringsEqual(fetchMode, fetchModeStr(BLXFETCH_MODE_SOCKET), FALSE))
+        {
+          result->mode = BLXFETCH_MODE_SOCKET;
+          result->location = configGetString(key_file, group, SOCKET_FETCH_LOCATION, &tmpError);
+          result->node = configGetString(key_file, group, SOCKET_FETCH_NODE, &tmpError);
+          result->port = configGetInteger(key_file, group, SOCKET_FETCH_PORT, &tmpError);
+          result->args = configGetString(key_file, group, SOCKET_FETCH_ARGS, NULL);
+          result->errors = keyFileGetCsv(key_file, group, FETCH_ERRORS, NULL);
+          result->separator = configGetString(key_file, group, FETCH_SEPARATOR, NULL);
+          result->outputType = readFetchOutputType(key_file, group, &tmpError);
+        }
+    #ifdef PFETCH_HTML
+      else if (stringsEqual(fetchMode, fetchModeStr(BLXFETCH_MODE_HTTP), FALSE))
+        {
+          result->mode = BLXFETCH_MODE_HTTP;
+          result->location = configGetString(key_file, group, HTTP_FETCH_LOCATION, &tmpError);
+          result->port = configGetInteger(key_file, group, HTTP_FETCH_PORT, &tmpError);
+          result->cookie_jar = configGetString(key_file, group, HTTP_FETCH_COOKIE_JAR, &tmpError);
+          result->proxy = configGetString(key_file, group, HTTP_FETCH_PROXY, NULL);
+          result->args = configGetString(key_file, group, HTTP_FETCH_ARGS, NULL);
+          result->errors = keyFileGetCsv(key_file, group, FETCH_ERRORS, NULL);
+          result->separator = configGetString(key_file, group, FETCH_SEPARATOR, NULL);
+          result->outputType = readFetchOutputType(key_file, group, &tmpError);
+        }
+      else if (stringsEqual(fetchMode, fetchModeStr(BLXFETCH_MODE_PIPE), FALSE))
+        {
+          result->mode = BLXFETCH_MODE_PIPE;
+          result->location = configGetString(key_file, group, PIPE_FETCH_LOCATION, &tmpError);
+          result->args = configGetString(key_file, group, PIPE_FETCH_ARGS, NULL);
+          result->errors = keyFileGetCsv(key_file, group, FETCH_ERRORS, NULL);
+          result->outputType = readFetchOutputType(key_file, group, &tmpError);
+        }
+    #endif
+      else if (stringsEqual(fetchMode, fetchModeStr(BLXFETCH_MODE_WWW), FALSE))
+        {
+          result->mode = BLXFETCH_MODE_WWW;
+          result->location = configGetString(key_file, group, WWW_FETCH_LOCATION, &tmpError);
+          result->args = configGetString(key_file, group, WWW_FETCH_ARGS, NULL);
+        }
+      else if (stringsEqual(fetchMode, fetchModeStr(BLXFETCH_MODE_INTERNAL), FALSE))
+        {
+          result->mode = BLXFETCH_MODE_INTERNAL;
+        }
+      else if (stringsEqual(fetchMode, fetchModeStr(BLXFETCH_MODE_SQLITE), FALSE))
+        {
+          result->mode = BLXFETCH_MODE_SQLITE;
+          result->location = configGetString(key_file, group, DB_FETCH_LOCATION, &tmpError);
+          result->args = configGetString(key_file, group, DB_FETCH_QUERY, &tmpError);
+          result->errors = keyFileGetCsv(key_file, group, FETCH_ERRORS, NULL);
+          result->outputType = readFetchOutputType(key_file, group, &tmpError);
+          
+          /* Hard code the separator */
+          result->separator = g_strdup("','");
+        }
+      else if (stringsEqual(fetchMode, fetchModeStr(BLXFETCH_MODE_COMMAND), FALSE))
+        {
+          result->mode = BLXFETCH_MODE_COMMAND;
+          result->location = configGetString(key_file, group, COMMAND_FETCH_SCRIPT, &tmpError);
+          result->args = configGetString(key_file, group, COMMAND_FETCH_ARGS, NULL);
+          result->errors = keyFileGetCsv(key_file, group, FETCH_ERRORS, NULL);
+          result->outputType = readFetchOutputType(key_file, group, &tmpError);
+        }
+        else if (stringsEqual(fetchMode, fetchModeStr(BLXFETCH_MODE_NONE), FALSE))
+        {
+          result->mode = BLXFETCH_MODE_NONE;
+        }
+      else
+        {
+          g_set_error(&tmpError, BLX_CONFIG_ERROR, BLX_CONFIG_ERROR_INVALID_FETCH_MODE, "Unrecognised fetch mode '%s'", fetchMode);
+          result->mode = BLXFETCH_MODE_NONE;
+        }
+    }
+  
+  /* Add result to list */
+  if (!tmpError && result)
+    {
+      GQuark fetchName = g_quark_from_string(group);
+      g_hash_table_insert(options->fetchMethods, GINT_TO_POINTER(fetchName), result);
+    }
+  else if (result)
+    {
+      /* Fetch method details are incomplete, so delete it. */
+      delete result;
+    }
+  
+  /* Clean up */
+  g_free(fetchMode);
+
+  /* Error handling */
+  if (tmpError)
+    g_propagate_error(error, tmpError);
+}
+
+
+/* Tries to load values for this group if it is a standard, recognised group or 
+ * group type. If any required values are missing, sets the error. */
+static void readConfigGroup(GKeyFile *key_file, const char *group, CommandLineOptions *options, GError **error)
+{
+  /* Check for known group names first */
+  if (stringsEqual(group, BLIXEM_GROUP, FALSE))
+    {
+      readBlixemStanza(key_file, group, options, error);
+    }
+  else
+    {
+      /* Check if this is a fetch method; if it is it the group will have a fetch-mode key */
+      char *fetchMode = configGetString(key_file, group, FETCH_MODE_KEY, NULL);
+      
+      if (fetchMode)
+        readFetchMethodStanza(key_file, group, options, error);
+
+      g_free(fetchMode);
+    }
+}
+
+
+/* Read standard stanzas from the given config file. Sets the error if any problems */
+static void readConfigFile(GKeyFile *key_file, CommandLineOptions *options, GError **error)
+{
+  if (!key_file)
+    return;
+
+  /* Loop through each stanza in the config file */
+  gsize num_groups ;
+  char **groups = g_key_file_get_groups(key_file, (gsize*)(&num_groups));
+  char **group = groups;
+  int i = 0;
+  
+  for ( ; i < (int)num_groups ; i++, group++)
+    {
+      /* Read in the data in this stanza */
+      GError *tmpError = NULL;
+      readConfigGroup(key_file, *group, options, &tmpError) ;
+      
+      if (tmpError && error)
+        {
+          /* Compile all errors into one message */
+          if (*error == NULL)
+            g_set_error(error, BLX_CONFIG_ERROR, BLX_CONFIG_ERROR_WARNINGS, "  [%s]: %s\n", *group, tmpError->message);
+          else
+            postfixError(*error, "  [%s]: %s\n", *group, tmpError->message);
+        }
+    }
+  
+  /* For backwards compatibility with config files that do not set the optional-fetch
+   * field: If the default optional-fetch method is not set then find any fetch methods that
+   * have an output type of 'embl'. gb10: we may wish to remove this once we no longer have these
+   * config files. */
+  if (!options->optionalFetchDefault)
+    {
+      GHashTableIter iter;
+      gpointer key, value;
+
+      g_hash_table_iter_init (&iter, options->fetchMethods);
+      while (g_hash_table_iter_next (&iter, &key, &value))
+        {
+          BlxFetchMethod* fetchMethod = (BlxFetchMethod*)value;
+
+          if (fetchMethod->outputType == BLXFETCH_OUTPUT_EMBL)
+            {
+              if (!options->optionalFetchDefault)
+                options->optionalFetchDefault = g_array_sized_new(FALSE, TRUE, sizeof(GQuark), 1);
+
+              g_array_append_val(options->optionalFetchDefault, fetchMethod->name);
+            }
+        }
+    }
+
+  g_strfreev(groups);
+}
+
+
+/*******************************************************************
+ *                      Pfetch utility functions                   *
+ *******************************************************************/
+
+
+/* Initialise a pfetch connection with the given options and calls pfetch on each of the 
+ * sequences in the given list. */
+static void socketFetchInit(const BlxFetchMethod* const fetchMethod,
+                            GList *seqsToFetch, 
+                            gboolean External, 
+                            int *sock,
+                            GError **error)
+{
+  GError *tmpError = NULL;
+
+  /* open socket connection */
+  if (!tmpError)
+    {
+      *sock = socketConstruct(fetchMethod->node, fetchMethod->port, External, &tmpError) ;
+    }
+  
+  /* send the command/names to the server */
+  if (!tmpError)
+    {
+      GString *command = getFetchArgsMultiple(fetchMethod, seqsToFetch, &tmpError);
+      socketSend(*sock, command->str, &tmpError);
+      
+      if (command)
+        g_string_free(command, TRUE);
+    }
+  
+//  if (!tmpError)
+//    {
+//      /* For each sequence, send a command to fetch that sequence, in the order that they are in our list */
+//      GList *seqItem = seqsToFetch;
+//      
+//      for ( ; seqItem && !tmpError ; seqItem = seqItem->next)
+//        {
+//          BlxSequence *blxSeq = (BlxSequence*)(seqItem->data);
+//          socketSend(*sock, blxSequenceGetName(blxSeq), &tmpError);
+//        }
+//    }
+  
+  if (!tmpError)
+    {
+      /* send a final newline to flush the socket */
+      if (send(*sock, "\n", 1, 0) != 1)
+        {
+          g_set_error(&tmpError, BLX_FETCH_ERROR, BLX_FETCH_ERROR_SEND,
+                      "Failed to send final newline to socket\n") ;
+        }
+    }
+
+  if (tmpError)
+    g_propagate_error(error, tmpError);
+}
+
+
+/* Check the progress bar to see if the user cancelled. If so, sets the state to cancelled
+ * and the status to false (meaning don't continue). */
+static void checkProgressBar(ProgressBar bar, BlxSeqParserState *parserState, gboolean *status)
+{
+  if (isCancelledProgressBar(bar))
+    {
+      *status = FALSE;
+      *parserState = PARSING_CANCELLED;
+    }
+}
+
+
+/* Receive the next buffer back from a socket server. Only does anything if the status is ok
+ * (i.e. true). Checks the length etc and sets the state to finished if there is no more data
+ * to receive. Sets 'status' to false if there was an error. Returns the number of chars received. */
+static int socketFetchReceiveBuffer(GeneralFetchData fetchData, const int bufferSize, const int sock)
+{
+  int lenReceived = 0;
+  
+  if (fetchData->status == FALSE)
+    {
+      return lenReceived;
+    }
+  
+  /* Ask for the next chunk of data to be put into our buffer */
+  lenReceived = recv(sock, fetchData->buffer, bufferSize, 0);
+  
+  if (lenReceived < 0)
+    {
+      /* Problem with this one - skip to the next */
+      fetchData->status = FALSE;
+      char *msg = getSystemErrorText();
+      g_critical("Could not retrieve sequence data from pfetch server, error was: %s\n", msg) ;
+      g_free(msg);
+    }
+  else if (lenReceived == 0)
+    {
+      /* No more data, so quit out of the loop */
+      fetchData->parserState = PARSING_FINISHED;
+    }
+  
+  return lenReceived;
+}
+
+
+/* Update the given sequence and sequence item to the next item in the list (unless the state is
+ * 'finished' in which case there is nothing to do). Sets status to false if there was an
+ * error (i.e. if we ran out of sequences). */
+static void pfetchGetNextSequence(GeneralFetchData fetchData, const gboolean pfetch_ok)
+{
+  if (fetchData->parserState != PARSING_FINISHED)
+    {
+      /* Check that another BlxSequence item exists in the list */
+      if (fetchData->currentSeqItem->next)
+        {
+          updateProgressBar(fetchData->bar, blxSequenceGetName(fetchData->currentSeq), fetchData->numFetched, pfetch_ok) ;
+          
+          /* Move to the next BlxSequence */
+          fetchData->currentSeqItem = fetchData->currentSeqItem->next;
+          fetchData->currentSeq = (BlxSequence*)(fetchData->currentSeqItem->data);
+        }
+      else
+        {
+          fetchData->status = FALSE ;
+          g_critical("Unexpected data from pfetch server: received too many lines. (%d sequences were requested.)\n", fetchData->numRequested);
+        }
+    }
+}
+
+
+/* Parse the given buffer that contains an arbitrary section
+ * of data from a fasta file (or concatenation of multiple 
+ * fasta files). The parserState indicates on entry what 
+ * state we are in and is updated on exit with the new state,
+ * if it has changed. */
+static void parseRawSequenceBuffer(GeneralFetchData fetchData, GError **error)
+{
+  if (fetchData->status == FALSE || fetchData->parserState == PARSING_FINISHED || fetchData->parserState == PARSING_CANCELLED)
+    {
+      return;
+    }
+  
+  /* Loop through each character in the buffer */
+  int i = 0;
+  
+  for ( ; i < fetchData->lenReceived && fetchData->status; ++i)
+    {
+      /* Check for user cancellation again */
+      checkProgressBar(fetchData->bar, &fetchData->parserState, &fetchData->status);
+      
+      if (fetchData->parserState == PARSING_CANCELLED)
+        {
+          break;
+        }
+
+      const char curChar = fetchData->buffer[i];
+      
+      if (curChar == '\n')
+        {
+          /* finish up this sequence and move to the next one */
+          gboolean pfetch_ok = pfetchFinishSequence(fetchData);
+          pfetchGetNextSequence(fetchData, pfetch_ok);
+        }
+      else
+        {
+          /* Append this character to the current result string */
+          g_string_append_c(fetchData->currentResult, curChar);
+        }
+    }
+}
+
+
+/* Returns true if the given string is the terminating string of
+ * an embl file, i.e. '//' */
+static gboolean isEmblTerminator(GQuark value)
+{
+  static GQuark terminator = 0;
+  
+  if (!terminator)
+    terminator = g_quark_from_string("//");
+
+  return (value == terminator);
+}
+
+
+/* Get the parser state from the given two-letter at at the start of an EMBL file line. */
+static void pfetchGetParserStateFromId(GeneralFetchData fetchData)
+{
+  GQuark sectionId = g_quark_from_string(fetchData->sectionId);
+
+  /* First, check if the section id is the terminator string, in 
+   * which case finish this sequence */
+  if (isEmblTerminator(sectionId))
+    {
+      fetchData->parserState = PARSING_FINISHED_SEQ;
+      return;
+    }
+
+  /* Loop through all the columns and check if there's a column with
+   * an embl ID that matches the current section ID. If not, then there's 
+   * nothing to do for this tag (so default to parsing_ignore if not found) */
+  GList *item = fetchData->columnList;
+  fetchData->parserState = PARSING_IGNORE;
+  
+  for ( ; item; item = item->next)
+    {
+      BlxColumnInfo *columnInfo = (BlxColumnInfo*)(item->data);
+      
+      if (columnInfo->emblId && columnInfo->emblId == sectionId)
+        {
+          /* First, check if we need to bother getting the info for this column */
+          if (blxSequenceRequiresColumnData(fetchData->currentSeq, columnInfo->columnId) &&
+              !blxSequenceGetValueAsString(fetchData->currentSeq, columnInfo->columnId))
+            {
+              if (columnInfo->emblTag)
+                {
+                  /* The column has an embl tag; continue parsing to find the
+                   * tag. (Note that multiple columns may have this section ID so
+                   * the next step may end up finding a different column depending
+                   * on the embl tag; at this point, we're just finding out if any 
+                   * column has an embl tag that we need to continue parsing for,
+                   * so we don't set the currentColumn yet). */
+                  fetchData->parserState = PARSING_TAG_SEARCH;
+                }
+              else
+                {
+                  /* No tag to look for so start parsing the data for this column immediately */
+                  fetchData->currentColumn = columnInfo;
+
+                  /* If this is the sequence column, we need to parse the sequence header
+                   * first, so set a special parser state. Other columns can be parsed directly. */
+                  if (columnInfo->columnId == BLXCOL_SEQUENCE)
+                    fetchData->parserState = PARSING_SEQUENCE_HEADER;
+                  else
+                    fetchData->parserState = PARSING_DATA;
+                }
+
+              break; /* we found a column, so exit the loop */
+            }
+        }
+    }
+}
+
+
+/* Process the current character in the current buffer of EMBL data. The char might be read into
+ * various data locations depending on the current parser state, or might cause the parser state
+ * to change. */
+static void pfetchProcessEmblBufferChar(GeneralFetchData fetchData, const char curChar)
+{
+  switch (fetchData->parserState)
+    {
+      case PARSING_NEWLINE:
+      {
+        /* First char should be the start of the two-letter ID */
+        fetchData->sectionId[0] = curChar;
+        fetchData->parserState = PARSING_ID;
+        break;
+      }
+        
+      case PARSING_ID:
+      {
+        /* Read the second (and last) character from the ID. */
+        fetchData->sectionId[1] = curChar;
+        pfetchGetParserStateFromId(fetchData);
+        break;
+      }
+        
+      case PARSING_SEQUENCE:
+      {
+        /* Look out for the terminating "//" characters. We ignore newlines in the sequence
+         * body so won't catch these by the normal method. We can assume that if we see a single
+         * slash that it's the terminator, because we should never see one here otherwise */
+        if (curChar == '/')
+          {
+            fetchData->sectionId[0] = curChar;
+            fetchData->parserState = PARSING_ID; /* continue parsing to read the other '/' */
+          }
+        else
+          {
+            /* Add the character to the end of the sequence, but only if it is a valid IUPAC character
+             * (because we want to ignore whitespace, newlines and digits). */
+            if (isValidIupacChar(curChar, fetchData->seqType))
+              {
+                appendCharToString(curChar, fetchData->currentResult);
+              }
+          }
+        
+        break;
+      }
+        
+      case PARSING_DATA:
+      {
+        appendCharToString(curChar, fetchData->currentResult);
+        break;
+      }
+        
+      case PARSING_TAG_SEARCH:
+      {
+        /* If we find a forward slash, it's the start of a tag, so we'll parse the tag name next */
+        if (curChar == '/')
+          fetchData->parserState = PARSING_TAG_NAME;
+        
+        break;
+      }
+        
+      case PARSING_TAG_NAME:
+      {
+        if (curChar == '=') /* signals the end of the tag */
+          pfetchGetParserStateFromTagName(fetchData);
+        else
+          g_string_append_c(fetchData->tagName, curChar); /* read in tag name */
+        
+        break;
+      }
+        
+      case PARSING_TAG_IGNORE:
+      {
+        /* Look for the start quote before we start parsing the tag properly */
+        if (curChar == '"')
+          pfetchGetParserStateFromTagName(fetchData);
+        
+        break;
+      }
+        
+      case PARSING_DATA_QUOTED:
+      {
+        /* Like PARSING_DATA but we need to watch out for end quotes */
+        appendCharToQuotedString(curChar, &fetchData->foundEndQuote, fetchData->currentResult);
+        break;
+      }
+        
+      default:
+        break;
+        
+    };
+}
+
+
+static void checkParserState(GeneralFetchData fetchData, BlxSeqParserState origState)
+{
+  /* If we were parsing data for a column but the parser state has now changed to
+   * something else, then we've finished parsing the string, so save it in the 
+   * sequence */
+  if (fetchData->parserState != origState && fetchData->currentResult->str)
+    {
+      if (origState == PARSING_DATA || origState == PARSING_DATA_QUOTED)
+        {
+          blxSequenceSetValueFromString(fetchData->currentSeq, 
+                                        fetchData->currentColumn->columnId, 
+                                        fetchData->currentResult->str); 
+
+          /* Reset the result string and current column */
+          g_string_truncate(fetchData->currentResult, 0);
+          fetchData->currentColumn = NULL;
+        }
+    }
+
+  /* If parsing for this sequence has finished, tidy it up and move to the next sequence */
+  if (fetchData->parserState == PARSING_FINISHED_SEQ)
+    {
+      gboolean pfetch_ok = pfetchFinishSequence(fetchData);
+      pfetchGetNextSequence(fetchData, pfetch_ok);
+      fetchData->parserState = PARSING_NEWLINE;
+    }
+}
+
+
+/* Parse the given buffer, which contains an arbitrary section of
+ * data from an EMBL entry (or combination of multiple embl entries).
+ * The parserState indicates what state we are in on entry, and gets
+ * updated with the new state on exit. */
+static void parseEmblBuffer(GeneralFetchData fetchData, GError **error)
+{
+  if (fetchData->status == FALSE || 
+      fetchData->parserState == PARSING_FINISHED || 
+      fetchData->parserState == PARSING_CANCELLED)
+    {
+      return;
+    }
+
+  /* Loop through each character in the buffer */
+  int i = 0;
+  
+  for ( ; i < fetchData->lenReceived && fetchData->status; ++i)
+    {
+      checkProgressBar(fetchData->bar, &fetchData->parserState, &fetchData->status);
+
+      if (fetchData->parserState == PARSING_CANCELLED)
+        {
+          break;
+        }
+
+      /* Remember the state prior to processing this character */
+      BlxSeqParserState origState = fetchData->parserState;
+
+      const char curChar = fetchData->buffer[i];
+      g_string_append_c(fetchData->curLine, curChar);
+
+      /* Special treatment if we've previously found an end quote: if this char is NOT also
+       * a quote, then it means it genuinely was an end quote, so we finish reading the tag data that
+       * we were reading (by setting the tag name to null). We return to parsing the section
+       * that contained that tag in case there are any more tags in it that we're interested in. */
+      if (fetchData->foundEndQuote && curChar != '"')
+        {
+          g_string_truncate(fetchData->tagName, 0);
+          fetchData->foundEndQuote = FALSE;
+          fetchData->parserState = PARSING_TAG_SEARCH;
+        }
+      
+
+      /* Newline character means we need to re-read the 2-letter ID at the start of the
+       * line to find out what section we're in. Ignore newlines in the sequence body, though,
+       * because it spans several lines and does not have an ID on each line. */
+      if (curChar == '\n' && fetchData->parserState != PARSING_SEQUENCE)
+        {
+          if (fetchData->parserState == PARSING_SEQUENCE_HEADER)
+            {
+              /* We were previously in the sequence header, so the next line is the sequence body */
+              fetchData->parserState = PARSING_SEQUENCE;
+            }
+          else if (stringInArray(fetchData->curLine->str, fetchData->fetchMethod->errors))
+            {
+              /* The line is an error message. Finish this sequence and move to next. */
+              g_warning("[%s] Error fetching sequence '%s': %s", g_quark_to_string(fetchData->fetchMethod->name), blxSequenceGetName(fetchData->currentSeq), fetchData->curLine->str);
+              fetchData->parserState = PARSING_FINISHED_SEQ;
+            }
+          else
+            {
+              fetchData->parserState = PARSING_NEWLINE;
+            }
+
+          g_string_truncate(fetchData->curLine, 0);
+        }
+      else
+        {
+          pfetchProcessEmblBufferChar(fetchData, curChar);
+        }
+
+      checkParserState(fetchData, origState);
+    }
+}
+
+
+/* Check the given tag name to see if it contains data for a column we're interested
+ * in, and update the parser state accordingly. Sets the parser state to PARSING_IGNORE 
+ * if this is not a tag we care about. */
+static void pfetchGetParserStateFromTagName(GeneralFetchData fetchData)
+{
+  if (!fetchData->tagName || !fetchData->tagName->str)
+    return;
+
+  /* Check if there's a column with this section ID and tag. (Assumes
+   * that only one column at most will match.) */
+  GQuark foundSection = g_quark_from_string(fetchData->sectionId);
+  GQuark foundTag = g_quark_from_string(fetchData->tagName->str);
+  GList *item = fetchData->columnList;
+  fetchData->currentColumn = NULL;
+
+  for ( ; item && !fetchData->currentColumn; item = item->next)
+    {
+      BlxColumnInfo *columnInfo = (BlxColumnInfo*)(item->data);
+      GQuark currentSection = columnInfo->emblId;
+      GQuark currentTag = columnInfo->emblTag;
+
+      if (currentSection == foundSection && currentTag == foundTag)
+        {
+          fetchData->currentColumn = columnInfo;
+          
+          if (fetchData->parserState == PARSING_TAG_NAME)
+            {
+              /* Start parsing the data within the tag but initially ignore
+               * everything until we find a quoted section */
+              fetchData->parserState = PARSING_TAG_IGNORE;
+            }
+          else
+            {
+              /* Should only get here if we found a quoted section. Start 
+               * parsing the actual data for the current column. */
+              fetchData->parserState = PARSING_DATA_QUOTED;
+            }
+        }
+    }
+
+  if (!fetchData->currentColumn)
+    {
+      /* No column was found, so ignore this tag. Reset the tag name to
+       * zero-length so we know to start again */
+      fetchData->parserState = PARSING_IGNORE;
+      g_string_truncate(fetchData->tagName, 0);
+    }
+}
+
+
+/* Append the given char to the given GString, but only if it is not an end quote. Assumes the
+ * start quote has already been seen. Treats double quotes ("") as a single escaped quote and
+ * includes it in the text - foundEndQuote is set for the first quote found and if the next char
+ * this is called with is also a quote the quote is included and foundEndQuote reset.
+ * To do: this should really identify newlines and ignore the FT identifier and whitespace at the
+ * start of the line. Since none of our tags currently have multi-line data that's not worth doing just yet... */
+static void appendCharToQuotedString(const char curChar, gboolean *foundEndQuote, GString *result)
+{
+  if (curChar == '"')
+    {
+      if (*foundEndQuote)
+        {
+          /* The previous char was also a quote, which means this is an 
+           * escaped quote, so we do include the char in the text. */
+          appendCharToString(curChar, result);
+          *foundEndQuote = FALSE;
+        }
+      else
+        {
+          /* This looks like an end quote but we won't know until the next loop, so just flag it. */
+          *foundEndQuote = TRUE;
+        }
+    }
+  else
+    {
+      appendCharToString(curChar, result);
+    }
+}
+
+
+/* Append the given char to the given GString. Doesn't
+ * add whitespace chars to the start of the string. Also 
+ * filters out multiple whitespace chars. */
+static void appendCharToString(const char curChar, GString *result)
+{
+  if (result)
+    {
+      /* Don't add multiple consecutive whitespace characters, or
+       * white space at the start of the string */
+      const int len = result->len;
+      const char *str = result->str;
+
+      if (!isWhitespaceChar(curChar) || (len > 0 && !isWhitespaceChar(str[len - 1])))
+        {
+          g_string_append_c(result, curChar);
+        }
+    }
+}
+
+
+/* This is called when we've finished parsing a given sequence. It checks that the sequence
+ * data is valid (i.e. not an error message) and complements it if necessary. It updates the parser
+ * state to finished if we've got all the sequences we requested. Returns true if the pfetch
+ * was successful, false if not */
+static gboolean pfetchFinishSequence(GeneralFetchData fetchData)
+{
+  /* We issue warnings if a sequence fetch failed but set a limit on the number so we don't end
+   * up with pages and pages of terminal output */
+  static int numWarnings = 0;
+  const int maxWarnings = 50;
+
+  fetchData->numFetched += 1;
+  
+  if (fetchData->numFetched >= fetchData->numRequested)
+    {
+      /* We've fetched all of the sequences we requested. */
+      fetchData->parserState = PARSING_FINISHED;
+    }
+  
+  /* The pfetch failed if our sequence is null or equal to an error string. */
+  gboolean pfetch_ok = FALSE;
+  
+  /* If the sequence isn't required, or is already set, then we don't need 
+   * to check if it was fetched */
+  if (!blxSequenceRequiresColumnData(fetchData->currentSeq, BLXCOL_SEQUENCE) ||
+      blxSequenceGetValueAsString(fetchData->currentSeq, BLXCOL_SEQUENCE))
+    {
+      pfetch_ok = TRUE;
+    }
+  else 
+    {
+      if (!fetchData->currentResult || fetchData->currentResult->len == 0)
+        {
+          if (numWarnings < maxWarnings)
+            {
+              ++numWarnings;
+              g_warning("No sequence data fetched for '%s'\n", blxSequenceGetName(fetchData->currentSeq));
+            }
+        }
+      else if (stringInArray(fetchData->currentResult->str, fetchData->fetchMethod->errors))
+        {
+          if (numWarnings < maxWarnings)
+            {
+              ++numWarnings;
+              g_warning("Sequence fetch failed for '%s': %s\n", blxSequenceGetName(fetchData->currentSeq), fetchData->currentResult->str);
+            }
+        }
+      else if (!isValidIupacChar(fetchData->currentResult->str[0], fetchData->seqType))
+        {
+          if (numWarnings < maxWarnings)
+            {
+              ++numWarnings;
+              g_warning("Sequence fetch failed for '%s': invalid character '%c' found in fetched text: %s\n", blxSequenceGetName(fetchData->currentSeq), fetchData->currentResult->str[0], fetchData->currentResult->str);
+            }
+        }
+      else
+        {
+          /* Succeeded: save the result in the blxsequence */
+          pfetch_ok = TRUE;
+          blxSequenceSetValueFromString(fetchData->currentSeq, BLXCOL_SEQUENCE, fetchData->currentResult->str);
+        }
+    }
+  
+  if (pfetch_ok)
+    {
+      fetchData->numSucceeded += 1;
+    }
+
+  /* Reset the result string */
+  g_string_truncate(fetchData->currentResult, 0);
+  
+  return pfetch_ok;
+}
+
+
+
+
+
+
+/*******************************************************************
+ *                          Bulk fetch                             *
+ *******************************************************************/
+
+/* Returns true if the given fetch method retrieves sequence 
+ * data. Note that fetch methods that return gff files for 
+ * re-parsing will cause this function to return true. */
+static gboolean fetchMethodReturnsSequence(const BlxFetchMethod* const fetchMethod)
+{
+  gboolean result = FALSE;
+  
+  if (fetchMethod)
+    {
+      result = 
+        fetchMethod->outputType == BLXFETCH_OUTPUT_RAW ||
+        fetchMethod->outputType == BLXFETCH_OUTPUT_FASTA ||
+        fetchMethod->outputType == BLXFETCH_OUTPUT_EMBL || 
+        fetchMethod->outputType == BLXFETCH_OUTPUT_GFF;
+    }
+  
+  return result;
+}
+
+
+/* Returns true if the given fetch method retrieves data for
+ * optional columns. Note that fetch methods that return gff files for 
+ * re-parsing will cause this function to return true. */
+static gboolean fetchMethodReturnsOptionalColumns(const BlxFetchMethod* const fetchMethod)
+{
+  gboolean result = FALSE;
+  
+  if (fetchMethod)
+    {
+      /* - EMBL files can be parsed for optional columns like tissue-type and strain.
+       * - DB fetch methods that return a list of columns can also return optional columns.
+       * - GFF files will be re-parsed and the results will be checked again, so we return
+       * true for those too. */
+      result = 
+        fetchMethod->outputType == BLXFETCH_OUTPUT_EMBL || 
+        fetchMethod->outputType == BLXFETCH_OUTPUT_LIST || 
+        fetchMethod->outputType == BLXFETCH_OUTPUT_GFF;
+    }
+  
+  return result;
+}
+
+
+static const BlxFetchMethod* findFetchMethod(const BlxFetchMode mode, 
+                                             const BlxFetchOutputType outputType,
+                                             GHashTable *fetchMethods)
+{
+  const BlxFetchMethod* result = NULL;
+
+  GHashTableIter iter;
+  gpointer key, value;
+
+  g_hash_table_iter_init (&iter, fetchMethods);
+  while (g_hash_table_iter_next (&iter, &key, &value) && !result)
+    {
+      const BlxFetchMethod* fetchMethod = (const BlxFetchMethod*)value;
+      
+      if (fetchMethod->mode == mode && fetchMethod->outputType == outputType)
+        result = fetchMethod;
+    }
+
+  return result;
+}
+
+
+/* Checks the list of sequences for blixem to display to see which ones
+ * need fetching.
+ * Returns lists of all the sequences to be fetched, categorised by the fetch 
+ * mode that should be used to fetch them. The return value is a map of
+ * a GQuark (representing the fetch-mode string) to the GList of sequences
+ * to be fetched.
+ * This function can be called multiple times on the same sequences to
+ * re-try fetching sequences with different fetch methods if the original
+ * fetch method fails. Pass 'attempt' as 0 for the first try, 1 for 
+ * the second etc. 
+ * If optionalColumns is true, then this 'forces' optional data to be 
+ * loaded even if the bulk fetch method for a sequence does not return
+ * embl data. We do this by looking for another fetch method of the same
+ * mode that does return embl data. This is perhaps a bit hacky but avoids 
+ * us having to have yet another set of fetch methods in the config for the
+ * user-triggered load-optional-data action. */
+static GHashTable* getSeqsToPopulate(GList *inputList, 
+                                     const GArray *defaultFetchMethods,
+                                     const int attempt,
+                                     GHashTable *fetchMethods,
+                                     const gboolean optionalColumns)
+{
+  GHashTable *resultTable = g_hash_table_new(g_direct_hash, g_direct_equal);
+  
+  /* Loop through the input list */
+  GList *inputItem = inputList;
+  
+  for ( ; inputItem; inputItem = inputItem->next)
+    {
+      BlxSequence *blxSeq = (BlxSequence*)(inputItem->data);
+      GQuark fetchMethodQuark = blxSequenceGetFetchMethod(blxSeq, TRUE, optionalColumns, attempt, defaultFetchMethods);
+
+      if (fetchMethodQuark)
+        {
+          const BlxFetchMethod* fetchMethod = getFetchMethodDetails(fetchMethodQuark, fetchMethods);
+
+          if (fetchMethod)
+            {
+              /* Check if sequence data is required and is not already set.
+               * Also only attempt to fetch the sequence if this fetch method
+               * can return it! */
+              gboolean getSeq = (blxSequenceRequiresSeqData(blxSeq) && 
+                                 fetchMethodReturnsSequence(fetchMethod) &&
+                                 !blxSequenceGetSequence(blxSeq));
+              
+              /* Check if full embl data data is required and is not already set. */
+              gboolean getEmbl = (blxSequenceRequiresOptionalData(blxSeq) &&
+                                  (!blxSequenceGetOrganism(blxSeq) ||
+                                   !blxSequenceGetGeneName(blxSeq) ||
+                                   !blxSequenceGetTissueType(blxSeq) ||
+                                   !blxSequenceGetStrain(blxSeq)));
+              
+              /* Only attempt to fetch the embl data if this fetch method can
+               * return it, or, if optionalColumns is true, then search for a 
+               * fetch method that does return embl data */ 
+              if (getEmbl)
+                {
+                  if (!fetchMethodReturnsOptionalColumns(fetchMethod) && optionalColumns)
+                    {
+                      fetchMethod = findFetchMethod(fetchMethod->mode, BLXFETCH_OUTPUT_EMBL, fetchMethods);
+
+                      if (fetchMethod)
+                        fetchMethodQuark = fetchMethod->name;
+                      else
+                        fetchMethodQuark = 0;
+                    }
+
+                  getEmbl = fetchMethodReturnsOptionalColumns(fetchMethod);
+                }
+              
+              getSeq |= getEmbl;
+
+              if (getSeq)
+                {
+                  /* Get the result list for this fetch method. It's ok if it is 
+                   * null because the list will be created by g_list_prepend. */
+                  GList *resultList = (GList*)g_hash_table_lookup(resultTable, GINT_TO_POINTER(fetchMethodQuark));
+                  resultList = g_list_prepend(resultList, blxSeq);
+                  
+                  /* Update the existing (or insert the new) list */
+                  g_hash_table_insert(resultTable, GINT_TO_POINTER(fetchMethodQuark), resultList);
+                }
+            }
+          else
+            {
+              /* Warn user that fetch method details are missing (only warn once per fetch method) */
+              static GHashTable *seenMethods = NULL;
+
+              if (!seenMethods)
+                seenMethods = g_hash_table_new(g_direct_hash, g_direct_equal);
+
+              if (!g_hash_table_lookup(seenMethods, GINT_TO_POINTER(fetchMethodQuark)))
+                {
+                  g_warning("Error fetching sequence '%s'; could not find details for fetch method '%s'\n", blxSequenceGetName(blxSeq), g_quark_to_string(fetchMethodQuark));
+                  g_hash_table_insert(seenMethods, GINT_TO_POINTER(fetchMethodQuark), GINT_TO_POINTER(fetchMethodQuark));
+                }
+            }
+        }
+    }
+
+  return resultTable;
+}
+
+
+void sendFetchOutputToFile(GString *command,
+                           GKeyFile *keyFile,
+                           BlxBlastMode *blastMode,
+                           GArray* featureLists[],
+                           GSList *supportedTypes, 
+                           GSList *styles,
+                           GList **seqList,
+                           MSP **mspListIn,
+                           const char *fetchName,
+                           const gboolean saveTempFiles,
+                           MSP **newMsps,
+                           GList **newSeqs,
+                           GList *columnList,
+                           GHashTable *lookupTable,
+                           const int refSeqOffset,
+                           const IntRange* const refSeqRange,
+                           GError **error)
+{
+  /* Create a temp file for the results */
+  const char *tmpDir = getSystemTempDir();
+  char *fileName = g_strdup_printf("%s/%s_%s", tmpDir, MKSTEMP_CONST_CHARS_GFF, MKSTEMP_REPLACEMENT_CHARS);
+  int fileDesc = g_mkstemp(fileName);
+  GError *tmpError = NULL;
+  
+  if (!fileName || fileDesc == -1)
+    {
+      g_set_error(&tmpError, BLX_ERROR, 1, "  %s: Error creating temp file for fetch results (filename=%s)\n", fetchName, fileName);
+    }
+
+  if (fileDesc != -1)
+    {
+      close(fileDesc);
+    }
+
+  if (!tmpError)
+    {
+      /* Send the output to the temp file */
+      g_string_append_printf(command, " > %s", fileName);
+      
+      FILE *outputFile = fopen(fileName, "w");
+      
+      g_debug("Fetch command:\n%s\n", command->str);
+      
+      GtkWidget *dialog = gtk_message_dialog_new(NULL, GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_NONE, "Fetching features...");
+      gtk_widget_show_all(dialog);
+
+      g_message_info("Executing fetch...\n");
+      const gboolean success = (system(command->str) == 0);
+
+      gtk_widget_destroy(dialog);
+      
+      fclose(outputFile);
+
+      if (success)
+        {
+          /* Parse the results */
+          g_message_info("... ok.\n");
+          g_message_info("Parsing fetch results...");
+
+          loadNativeFile(fileName, NULL, keyFile, blastMode, featureLists, 
+                         supportedTypes, styles, newMsps, newSeqs, columnList, 
+                         lookupTable, refSeqOffset, refSeqRange, &tmpError);
+
+          if (!tmpError)
+            {
+              g_message_info("... ok.\n");
+            }
+          else
+            {
+              g_message_info("... failed.\n");
+            }
+        }
+      else
+        {
+          g_message_info("... failed.\n");
+          g_set_error(&tmpError, BLX_ERROR, 1, "  %s: Command failed.\n", fetchName);
+        }
+    }
+
+  /* Delete the temp file (unless the 'save temp files' option is on) */
+  if (!saveTempFiles)
+    {
+      if (unlink(fileName) != 0)
+        g_warning("Error removing temp file '%s'.\n", fileName);
+    }
+
+  g_free(fileName);
+
+  if (tmpError)
+    g_propagate_error(error, tmpError);
+}
+
+
+/* Called by regionFetchList. Fetches the sequences for a specific region.
+ *   tmpDir is the directory in which to place the temporary files
+ *   script is the script to call to do the fetch
+ *   dataset will be passed as the -dataset argument to the script if it is not null */
+void BulkFetch::regionFetchFeature(const MSP* const msp, 
+                                   const BlxFetchMethod* const fetchMethod,
+                                   const char *script,
+                                   const char *dataset,
+                                   const char *tmpDir,
+                                   GError **error)
+{
+  GKeyFile *keyFile = blxGetConfig();
+  const char *fetchName = g_quark_to_string(fetchMethod->name);
+  GError *tmpError = NULL;
+
+  /* Get the command string, including the args */
+  GString *command = getFetchCommand(fetchMethod, NULL, 
+                                     msp, mspGetRefName(msp), 
+                                     refSeqOffset, refSeqRange, 
+                                     dataset, &tmpError);
+
+  if (tmpError)
+    prefixError(tmpError, "  %s: Error constructing fetch command:\n", fetchName);
+  
+  if (!tmpError)
+    {
+      MSP *newMsps  = NULL;
+      GList *newSeqs = NULL;
+      
+      sendFetchOutputToFile(command, keyFile, blastMode, 
+                            featureLists, supportedTypes, styles, 
+                            seqList, mspList, fetchName, saveTempFiles, 
+                            &newMsps, &newSeqs, columnList, lookupTable, refSeqOffset, refSeqRange, &tmpError);
+
+      blxMergeFeatures(newMsps, newSeqs, mspList, seqList);
+    }
+  
+  if (command)
+    g_string_free(command, TRUE);
+
+  if (tmpError)
+    g_propagate_error(error, tmpError);
+}
+
+
+/* Fetch sequences for a given region. This uses the config file to find the
+ * script and arguments to call to fetch the sequences.
+ * The input GList contains a list of BlxSequences that are parent objects for
+ * MSPs that identify regions. For each region, the script is called to fetch
+ * all sequences that lie within that region, and the results are placed in 
+ * a temporary GFF file, which is then parsed to get the results. The GFF file
+ * is deleted when finished, unless the saveTempFiles argument is true. */
+void BulkFetch::regionFetchList(GList *regionsToFetch, 
+                                const BlxFetchMethod* const fetchMethod,
+                                GError **error)
+{
+  /* Get the command to run */
+  const gchar *script = fetchMethod->location;
+
+  if (!script)
+    {
+      g_set_error(error, BLX_ERROR, 1, "Error fetching sequences; no command given for fetch-method [%s].\n", g_quark_to_string(fetchMethod->name));
+      return;
+    }
+
+  const char *tmpDir = getSystemTempDir();
+
+  /* Loop through each region, creating a GFF file with the results for each region */
+  GList *regionItem = regionsToFetch;
+  GError *tmpError = NULL;
+
+  for ( ; regionItem && !tmpError; regionItem = regionItem->next)
+    {
+      BlxSequence *blxSeq = (BlxSequence*)(regionItem->data);
+      GList *mspItem = blxSeq->mspList;
+    
+      for ( ; mspItem; mspItem = mspItem->next)
+        {
+          const MSP* const msp = (const MSP*)(mspItem->data);
+
+          /* Only fetch regions that are at least partly inside our display range */
+          if (!rangesOverlap(&msp->qRange, refSeqRange))
+            continue;
+          
+          regionFetchFeature(msp, fetchMethod, script, dataset, tmpDir, &tmpError);
+        }
+    }
+
+  if (tmpError)
+    g_propagate_error(error, tmpError);
+}
+
+
+/* Fetch sequences using a given command-line script */
+void BulkFetch::commandFetchList(GList *regionsToFetch, 
+                                 const BlxFetchMethod* const fetchMethod, 
+                                 GError **error)
+{
+  /* Currently we only support an output type of gff */
+  if (fetchMethod->outputType == BLXFETCH_OUTPUT_GFF)
+    {
+      regionFetchList(regionsToFetch, fetchMethod, error);
+    }
+  else
+    {
+      g_warning("Fetch mode 'command' currently only supports an output type of 'gff'\n");
+    }
+}
+
+
+/* This function determines which function to call to fetch the 
+ * given list of features, based on the given fetch method.
+ * The first argument is the list  of features to fetch and 
+ * the second is the list of all features. */
+gboolean BulkFetch::fetchList(GList *seqsToFetch, 
+                              const BlxFetchMethod* const fetchMethod,
+                              GError **error)
+{
+  gboolean success = TRUE;
+  
+  if (g_list_length(seqsToFetch) > 0)
+    {
+      if (fetchMethod)
+        {
+          switch (fetchMethod->mode)
+            {
+            case BLXFETCH_MODE_SOCKET:
+              {  
+                success = socketFetchList(seqsToFetch, fetchMethod, error);
+                break;
+              }
+
+#ifdef PFETCH_HTML 
+            case BLXFETCH_MODE_HTTP: // fall through
+            case BLXFETCH_MODE_PIPE:
+              {
+                success = httpFetchList(seqsToFetch, fetchMethod, error);
+                break;
+              }
+#endif
+
+            case BLXFETCH_MODE_SQLITE:
+              {
+                sqliteFetchSequences(seqsToFetch, fetchMethod, columnList, error);
+                break;
+              }
+
+            case BLXFETCH_MODE_COMMAND:
+              {
+                commandFetchList(seqsToFetch, fetchMethod, error);
+                break;
+              }
+
+            case BLXFETCH_MODE_NONE:
+              {
+                /* do nothing */
+                break;
+              }
+
+            default:
+              {
+                g_set_error(error, BLX_ERROR, 1, "Bulk fetch is not implemented yet in %s mode.\n", g_quark_to_string(fetchMethod->name));
+                break;
+              }
+            }
+        }
+      else
+        {
+          g_set_error(error, BLX_ERROR, 1, "Fetch mode not specified.\n");
+        }
+    }
+  
+  return success;
+}
+
+
+
+
+
+UserFetch::UserFetch(const BlxSequence *blxSeq_in,
+                     const gboolean displayResults_in,
+                     GtkWidget *blxWindow_in,
+                     GtkWidget *dialog_in,
+#ifdef PFETCH_HTML
+                     long ipresolve_in,
+                     const char *cainfo_in,
+#endif
+                     bool debug_in)
+{
+  attempt = -1;
+  blxSeq = blxSeq_in;
+  displayResults = displayResults_in;
+  blxWindow = blxWindow_in;
+  dialog = dialog_in;
+  text_buffer = NULL;
+  debug = debug_in;
+
+#ifdef PFETCH_HTML
+  ipresolve = ipresolve_in;
+  cainfo = cainfo_in;
+#endif
+  
+}
+
+
+/* Perform the fetch */
+/* Fetch the given sequence and optionally display the results. 
+ * dialog and text_buffer are only used when recursing via httpFetchSequence;
+ * they should remain as NULL in all other cases. */
+void UserFetch::performFetch()
+{
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+  g_return_if_fail(blxSeq && bc);
+ 
+  ++attempt;
+
+  /* Look up the fetch method for this sequence */
+  GQuark fetchMethodQuark = blxSequenceGetFetchMethod(blxSeq, FALSE, FALSE, attempt, bc->userFetchDefault);
+  const BlxFetchMethod* const fetchMethod = getFetchMethodDetails(fetchMethodQuark, bc->fetchMethods);
+
+  if (!fetchMethod)
+    {
+      /* If this is the first attempt then we should have a fetch method; 
+       * therefore give a warning if no fetch method was found */
+      if (attempt == 0 && !fetchMethodQuark)
+        g_warning("No fetch method specified for sequence '%s'\n", blxSequenceGetName(blxSeq));
+      else if (fetchMethodQuark)
+        g_warning("Error fetching sequence '%s'; could not find details for fetch method '%s'\n", blxSequenceGetName(blxSeq), g_quark_to_string(fetchMethodQuark));
+
+      return;
+    }
+
+  if (fetchMethod->mode == BLXFETCH_MODE_NONE && attempt == 0)
+    {
+      g_message("Fetch method for '%s' is '%s'\n", blxSequenceGetName(blxSeq), fetchModeStr(BLXFETCH_MODE_NONE));
+      return;
+    }
+  
+  g_message("Fetching '%s' using method '%s' (attempt %d)\n", blxSequenceGetName(blxSeq), g_quark_to_string(fetchMethodQuark), attempt + 1);
+
+  
+  if (fetchMethod->mode == BLXFETCH_MODE_SOCKET)
+    {
+      socketFetchSequence(fetchMethod);
+    }
+#ifdef PFETCH_HTML 
+  else if (fetchMethod->mode == BLXFETCH_MODE_HTTP || fetchMethod->mode == BLXFETCH_MODE_PIPE)
+    {
+      httpFetchSequence(fetchMethod);
+    }
+#endif
+  else if (fetchMethod->mode == BLXFETCH_MODE_COMMAND)
+    {
+      commandFetchSequence(fetchMethod);
+    }
+  else if (fetchMethod->mode == BLXFETCH_MODE_WWW)
+    {
+      wwwFetchSequence(fetchMethod);
+    }
+  else if (fetchMethod->mode == BLXFETCH_MODE_SQLITE)
+    {
+      sqliteFetchSequence(fetchMethod);
+    }
+  else if (fetchMethod->mode == BLXFETCH_MODE_INTERNAL)
+    {
+      internalFetchSequence(fetchMethod);
+    }
+  else
+    {
+      /* Invalid fetch method. Try again with the next fetch method, if one is specified */
+      g_warning("Unknown fetch method: %s\n", g_quark_to_string(fetchMethod->name));
+      performFetch();
+    }
+}
+
+
+GtkTextBuffer* UserFetch::getTextBuffer()
+{
+  return text_buffer;
+}
+
+void UserFetch::setTextBuffer(GtkTextBuffer *text_buffer_in)
+{
+  text_buffer = text_buffer_in;
+}
+
+
+#ifdef PFETCH_HTML
+/* Use the http proxy to pfetch an entry */
+/* Note that this uses a callback to update the display 
+ * window; it cannot return the result immediately and the 
+ * code is not currently structured to allow the callback to
+ * do anything other than update the display window, so if
+ * we're just requesting the sequence, this currently just 
+ * returns null. */
+bool UserFetch::httpFetchSequence(const BlxFetchMethod *fetchMethod)
+{
+  gboolean ok = 0;
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+  PFetchData pfetch_data = NULL ;
+  GError *tmpError = NULL;
+  GString *command = NULL;
+  GString *request = NULL;
+
+
+  if (!displayResults)
+    {
+      g_warning("Program error: http-fetch expected to display results but displayResults is false.\n");
+
+      return ok;
+    }
+
+  if (fetchMethod->location == NULL)
+    g_set_error(&tmpError, BLX_ERROR, 1, "%s", "Failed to obtain preferences specifying how to pfetch.\n");
+  
+  if (!tmpError)
+    {
+      pfetch_data = new PFetchDataStruct;
+
+      pfetch_data->fetchMethod = fetchMethod;
+      pfetch_data->user_fetch = this;
+      
+      command = getFetchCommand(fetchMethod, blxSeq, NULL, bc->refSeqName, bc->refSeqOffset, &bc->refSeqRange, bc->dataset, &tmpError);
+    }
+  
+  if (!tmpError)
+    {
+      request = getFetchArgs(fetchMethod, blxSeq, NULL, 
+                             bc->refSeqName, bc->refSeqOffset, &bc->refSeqRange, 
+                             bc->dataset, &tmpError);
+    }
+  
+  if (!pfetch_data || tmpError)
+    {
+      /* Couldn't initiate the fetch; try again with a different fetch method */
+      if (pfetch_data)
+        {
+          delete pfetch_data->pfetch;
+          delete pfetch_data;
+          pfetch_data = NULL;
+        }
+
+      reportAndClearIfError(&tmpError, G_LOG_LEVEL_WARNING);
+      
+      performFetch();
+    }
+  else
+    {
+      pfetch_data->title = g_strdup_printf("%s%s", blxGetTitlePrefix(bc), command->str);
+      
+      if (!dialog || !text_buffer)
+        {
+          dialog = displayFetchResults(pfetch_data->title, "pfetching...\n", blxWindow, dialog, &text_buffer);
+        }
+
+      if (dialog && text_buffer)
+        {
+          gtk_window_set_title(GTK_WINDOW(dialog), pfetch_data->title);
+
+          pfetch_data->widget_destroy_handler_id = 
+            g_signal_connect(G_OBJECT(dialog), "destroy", 
+                             G_CALLBACK(handle_dialog_close), pfetch_data); 
+          
+          if (fetchMethod->mode == BLXFETCH_MODE_PIPE)
+            {
+              pfetch_data->pfetch =  new PfetchPipe(fetchMethod->location,
+                                                    pfetch_reader_func,
+                                                    pfetch_error_func, pfetch_closed_func,
+                                                    pfetch_data) ;
+            }
+          else
+            {
+              pfetch_data->pfetch = new PfetchHttp(fetchMethod->location, fetchMethod->port,
+                                                   fetchMethod->cookie_jar, ipresolve,
+                                                   cainfo, fetchMethod->proxy,
+                                                   pfetch_reader_func,
+                                                   pfetch_error_func, pfetch_closed_func,
+                                                   pfetch_data) ;
+            }
+
+          pfetch_data->pfetch->setDebug(debug) ;
+
+          char *err_msg = NULL ;
+
+          if (!(pfetch_data->pfetch->fetch(request->str, &err_msg)))
+            {
+              char *msg = g_strdup_printf("Error performing http fetch request:\n  Request: %s\n  Error: %s\n", 
+                                          command->str, 
+                                          (err_msg ? err_msg : "no error"));
+              g_warning("%s", msg);
+              displayFetchResults(pfetch_data->title, msg, blxWindow, dialog, &text_buffer);
+              g_free(msg);
+
+              performFetch();
+            }
+
+
+        }
+      else
+        {
+          g_warning("Error creating http fetch results dialog\n");
+        }
+    }
+
+  if (request)
+    {
+      g_string_free(request, FALSE);
+    }
+
+  return ok;
+}
+#endif
+
+
+/* Use the www-fetch method to fetch an entry and optionally display
+ * the results in a dialog.
+ * Opens a browser to display the results. Does nothing if 
+ * not displaying results! */
+void UserFetch::wwwFetchSequence(const BlxFetchMethod *fetchMethod)
+{
+  if (displayResults)
+    {
+      BlxContext *bc = blxWindowGetContext(blxWindow);
+
+      GError *error = NULL;
+      
+      GString *url = getFetchCommand(fetchMethod, 
+                                     blxSeq, 
+                                     NULL, 
+                                     bc->refSeqName, 
+                                     bc->refSeqOffset,
+                                     &bc->refSeqRange,
+                                     bc->dataset,
+                                     &error);
+
+
+      if (!error)
+        {
+          seqtoolsLaunchWebBrowser(url->str, &error);
+        }
+      
+      if (url)
+        {
+          g_string_free(url, TRUE);
+        }
+
+      /* If failed, re-try with the next-preferred fetch method, if there is one */
+      if (error)
+        {
+          performFetch();
+          g_error_free(error);
+        }
+    }
+}
+
+
+/* Use the command-fetch method to fetch an entry and optionally display
+ * the results in a dialog. */
+void UserFetch::commandFetchSequence(const BlxFetchMethod *fetchMethod)
+{
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+  GError *error = NULL;
+  GString *command = NULL;
+  GString *resultText = NULL;
+  
+  if (!error)
+    checkFetchMethodNonNull(fetchMethod, &error);
+
+  if (!error)
+    checkFetchMethodExecutable(fetchMethod, &error);
+
+  if (!error)
+    command = getFetchCommand(fetchMethod, blxSeq, NULL, bc->refSeqName, bc->refSeqOffset, &bc->refSeqRange, bc->dataset, &error);
+
+  if (!error && command)
+    resultText = getExternalCommandOutput(command->str, &error);
+
+  reportAndClearIfError(&error, G_LOG_LEVEL_WARNING);
+
+  if (resultText && resultText->str)
+    {
+      if (displayResults && !error)
+        {
+          char *title = g_strdup_printf("%s%s", blxGetTitlePrefix(bc), command->str);
+          displayFetchResults(title, resultText->str, blxWindow, dialog, &text_buffer);
+          g_free(title);
+        }
+
+      g_string_free(resultText, TRUE);
+    }
+  else
+    {
+      /* Try again with the next-preferred fetch method, if there is one */
+      if (resultText)
+        g_string_free(resultText, TRUE);
+      
+      performFetch();
+    }
+  
+  if (command)
+    g_string_free(command, TRUE);
+}
+
+
+/* This "fetch" method doesn't really fetch the sequence: it just
+ * returns the internally-stored sequence */
+void UserFetch::internalFetchSequence(const BlxFetchMethod *fetchMethod)
+{
+  const char *seq = blxSequenceGetSequence(blxSeq);
+  const char *seqName = blxSequenceGetName(blxSeq);
+
+  if (seq)
+    {
+      char *result = g_strdup_printf(">%s\n%s", seqName ? seqName : "", seq);
+
+      if (displayResults)
+        {
+          BlxContext *bc = blxWindowGetContext(blxWindow);
+          char *title = g_strdup_printf("%s%s", blxGetTitlePrefix(bc), seqName ? seqName : "");
+          displayFetchResults(title, result, blxWindow, dialog, &text_buffer);
+          g_free(title);
+        }
+
+      g_free(result);
+    }
+  else
+    {
+      g_warning("No sequence data found for '%s'\n", seqName ? seqName : "");
+      
+      /* Try again with the next-preferred fetch method, if there is one */
+      performFetch();
+    }
+}
+
+
+/* Use the given socket-fetch method to fetch an entry and optionally display the results. */
+void UserFetch::socketFetchSequence(const BlxFetchMethod *fetchMethod)
+{
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+  GError *error = NULL;
+  GString *resultText = NULL;
+  GString *command = NULL;
+
+  if (!error)
+    checkFetchMethodNonNull(fetchMethod, &error);
+
+  if (!error)
+    checkFetchMethodExecutable(fetchMethod, &error);
+
+  if (!error)
+    command = getFetchCommand(fetchMethod, blxSeq, NULL, bc->refSeqName, bc->refSeqOffset, &bc->refSeqRange, bc->dataset, &error);  
+
+  if (!error && command)
+    resultText = getExternalCommandOutput(command->str, &error);
+  
+  reportAndClearIfError(&error, G_LOG_LEVEL_WARNING);
+
+  if (resultText && resultText->len && !stringInArray(resultText->str, fetchMethod->errors))  /* Success */
+    {
+      if (displayResults)
+        {
+          char *title = g_strdup_printf("%s%s", blxGetTitlePrefix(bc), command->str);
+          displayFetchResults(title, resultText->str, blxWindow, dialog, &text_buffer);
+          g_free(title);
+        }
+
+      g_string_free(resultText, TRUE);
+    }
+  else   /* Failed */
+    {
+      if (resultText)
+        g_string_free(resultText, TRUE);
+
+      /* Try again with the next fetch method, if there is one set */
+      performFetch();
+    }
+
+  if (command)
+    g_string_free(command, TRUE);
+}
+
+/* Fetch a single sequence using sqlite. If displayResults is true, disply the
+ * results in a pop-up window. If result_out is non-null, populate it with the result. */
+void UserFetch::sqliteFetchSequence(const BlxFetchMethod *fetchMethod)
+{
+  DEBUG_ENTER("sqliteFetchSequence");
+
+  GError *tmpError = NULL;
+  sqliteValidateFetchMethod(fetchMethod, &tmpError);
+    
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+  GString *query = NULL;
+  
+  if (!tmpError)
+    {
+      query = getFetchArgs(fetchMethod, blxSeq, NULL, 
+                           bc->refSeqName, bc->refSeqOffset, &bc->refSeqRange,
+                           bc->dataset, &tmpError);
+    }
+  
+  if (query && !tmpError)
+    {
+      sqliteRequest(fetchMethod->location, 
+                    query->str,
+                    sqliteDisplayResultsCB,
+                    blxWindow,
+                    &tmpError);
+    }
+
+  g_string_free(query, TRUE);
+  
+
+  if (tmpError)
+    {
+      reportAndClearIfError(&tmpError, G_LOG_LEVEL_WARNING);
+      performFetch();
+    }
+    
+  DEBUG_EXIT("sqliteFetchSequence");
+}
+
+
+
+BulkFetch::BulkFetch(gboolean External_in,
+                     gboolean saveTempFiles_in,
+                     BlxSeqType seqType_in,
+                     GList **seqList_in,
+                     GList *columnList_in,
+                     GArray *defaultFetchMethods_in,
+                     GHashTable *fetchMethods_in,
+                     MSP **mspList_in,
+                     BlxBlastMode *blastMode_in,
+                     GArray* featureLists_in[],
+                     GSList *supportedTypes_in, 
+                     GSList *styles_in,
+                     int refSeqOffset_in,
+                     IntRange* const refSeqRange_in,
+                     char *dataset_in,
+                     gboolean optionalColumns_in,
+                     GHashTable *lookupTable_in,
+#ifdef PFETCH_HTML
+                     long ipresolve_in,
+                     const char *cainfo_in,
+#endif
+                     bool debug_in)
+{
+  attempt = -1;
+  External = External_in;
+  saveTempFiles = saveTempFiles_in;
+  seqType = seqType_in;
+  seqList = seqList_in; /* list of BlxSequence structs for all required sequences */
+  columnList = columnList_in;
+  defaultFetchMethods = defaultFetchMethods_in;
+  fetchMethods = fetchMethods_in;
+  mspList = mspList_in;
+  blastMode = blastMode_in;
+  featureLists = featureLists_in;
+  supportedTypes = supportedTypes_in; 
+  styles = styles_in;
+  refSeqOffset = refSeqOffset_in;
+  refSeqRange = refSeqRange_in;
+  dataset = dataset_in;
+  optionalColumns = optionalColumns_in;
+  lookupTable = lookupTable_in;
+  debug = debug_in;
+
+#ifdef PFETCH_HTML
+  ipresolve = ipresolve_in;
+  cainfo = cainfo_in;
+#endif
+ 
+}
+
+
+/* Find out if we need to fetch any sequences (they may all be 
+ * contained in the input files so there might not be anything to 
+ * fetch). If we do need to, then fetch them by the preferred method.
+ * If the preferred fetch method fails, recusively try any other
+ * fetch methods set up for each sequence until we have either fetched 
+ * everything or run out of fetch methods to try.
+ * 'attempt' should be passed as 0 for the first call. */
+gboolean BulkFetch::performFetch()
+{
+  gboolean success = FALSE; /* will get set to true if any of the fetch methods succeed */
+ 
+  ++attempt;
+ 
+  /* Fetch any sequences that do not have their sequence data
+   * already populated. If this is a re-try attempt, then use
+   * a secondary fetch method, if one is given; otherwise, exclude
+   * from the list (i.e. when we run out of fetch methods or everything
+   * has been successfully fetched, then this table will be empty). */
+  GHashTable *seqsTable = getSeqsToPopulate(*seqList, defaultFetchMethods, attempt, fetchMethods, optionalColumns);
+
+  if (g_hash_table_size(seqsTable) < 1)
+    {
+      /* Nothing to fetch */
+      success = TRUE;
+    }
+  else
+    {
+      /* Loop through each fetch mode */
+      GHashTableIter iter;
+      g_hash_table_iter_init(&iter, seqsTable);
+      gpointer key, value;
+      GError *error = NULL;
+      
+      while (g_hash_table_iter_next(&iter, &key, &value))
+        {
+          GList *seqsToFetch = (GList*)value;          
+          GQuark fetchMethodQuark = GPOINTER_TO_INT(key);
+
+          if (!fetchMethodQuark)
+            continue;
+          
+          g_message_info("Fetching %d items using method '%s' (attempt %d)\n", g_list_length(seqsToFetch), g_quark_to_string(fetchMethodQuark), attempt + 1);
+
+          const BlxFetchMethod* const fetchMethod = getFetchMethodDetails(fetchMethodQuark, fetchMethods);
+
+          if (!fetchMethod)
+            {
+              g_warning("Fetch method '%s' not found\n", g_quark_to_string(fetchMethodQuark));
+              continue;
+            }
+          
+          GError *tmpError = NULL;
+          
+          if (fetchList(seqsToFetch, fetchMethod, &tmpError))
+            {
+              success = TRUE;
+              
+              /* Compile all errors into a single error */
+              if (error && tmpError)
+                {
+                  prefixError(error, tmpError->message);
+                  g_error_free(tmpError);
+                  tmpError = NULL;
+                }
+              else if (tmpError)
+                {
+                  error = tmpError;
+                }
+            }
+          
+          /* We're done with this list now, so free the memory. Don't delete it from
+           * the table yet, though, because that will invalidate the iterators. */
+          g_list_free(seqsToFetch);
+        }
+      
+      if (success && error)
+        {
+          /* Some fetches succeeded, so just issue a warning */
+          prefixError(error, "Error fetching sequences:\n");
+          reportAndClearIfError(&error, G_LOG_LEVEL_CRITICAL);
+        }
+      else if (error)
+        {
+          /* All failed, so issue a critical warning */
+          prefixError(error, "Error fetching sequences:\n");
+          reportAndClearIfError(&error, G_LOG_LEVEL_WARNING);
+        }
+
+
+      /* Recurse to re-try any that failed. This returns straight
+       * away everything was fetched successfully, or if there are
+       * no more fetch methods to try. */
+      success = performFetch();
+    }
+
+  /* Clean up */
+  g_hash_table_unref(seqsTable);
+
+  return success;
+}
+
+
+
+/* Get the fetch-method struct containing the details for the 
+ * given fetch method */
+BlxFetchMethod* getFetchMethodDetails(GQuark fetchMethodQuark, GHashTable *fetchMethods)
+{
+  BlxFetchMethod *result = (BlxFetchMethod*)g_hash_table_lookup(fetchMethods, GINT_TO_POINTER(fetchMethodQuark));
+  return result;
+}
diff --git a/blixemApp/blxFetchDb.cpp b/blixemApp/blxFetchDb.cpp
new file mode 100644
index 0000000..1e3fb2e
--- /dev/null
+++ b/blixemApp/blxFetchDb.cpp
@@ -0,0 +1,273 @@
+/*  File: blxFetchDb.c
+ *  Author: Gemma Barson, 2012-08-06
+ *  Copyright (c) 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: Blixem functions for control of sequence fetching and
+ *              display.
+ *              
+ *              Compiling with -DSQLITE3 includes code to issue
+ *              fetch requests to an sqlite3 database.
+ *              This requires sqlite3 libs to be installed.
+ *----------------------------------------------------------------------------
+ */
+
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <errno.h>
+#include <signal.h>
+
+#ifdef SQLITE3
+#include <sqlite3.h>
+#endif
+
+#include <seqtoolsUtils/utilities.hpp>
+#include <blixemApp/blixem_.hpp>
+#include <blixemApp/blxwindow.hpp>
+
+/* Error codes and domain */
+#define BLX_FETCH_ERROR g_quark_from_string("Blixem config")
+
+
+typedef struct _SqliteFetchData
+{
+  GList *seqList;
+  GList *columnList;
+} SqliteFetchData;
+
+
+
+/********************/
+/* Local functions */
+/********************/
+
+/* Utility to find the given sequence in the given list */
+static BlxSequence* findBlxSequence(const char *seqName, GList *seqList)
+{
+  BlxSequence* result = NULL;
+  GList *item = seqList;
+
+  for (; item && !result; item = item->next)
+    {
+      BlxSequence* blxSeq = (BlxSequence*)(item->data);
+      const char *curName = blxSequenceGetName(blxSeq);
+      
+      if (stringsEqual(curName, seqName, FALSE))
+        result = blxSeq;
+    }
+
+  return result;
+}
+
+
+/* Callback to print the results of an sql query */
+//static int printResultsCB(void *NotUsed, int argc, char **argv, char **azColName)
+//{
+//  int i;
+//
+//  for (i = 0; i < argc; ++i)
+//    {
+//      g_message("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
+//    }
+//
+//  g_message("\n");
+//  return 0;
+//}
+
+
+/* Callback to display the results of an sql query in a pop-up dialog.
+ * The parent window is passed in the user data. */
+int sqliteDisplayResultsCB(void *data, int argc, char **argv, char **azColName)
+{
+  GtkWidget *parent = NULL;
+
+  if (data)
+    parent = GTK_WIDGET(data);
+
+  /* Compile the results into a single string */
+  GString *result = g_string_new("");
+  int i;
+
+  for (i = 0; i < argc; ++i)
+    {
+      g_string_append_printf(result, "%s = %s\n\n", azColName[i], argv[i] ? argv[i] : "NULL");
+    }
+
+  char *title = g_strdup_printf("%s - %s", g_get_prgname(), "SQL query");
+  displayFetchResults(title, result->str, parent, NULL, NULL);
+  g_free(title);
+
+  return 0;
+}
+
+
+/* Callback to populate the results of an sql query into a list of sequences */
+static int populateResultsListCB(void *data, int argc, char **argv, char **azColName)
+{
+  DEBUG_ENTER("populateResultsListCB");
+
+  static GQuark nameCol = 0;
+  if (!nameCol)
+    {
+      nameCol = g_quark_from_string("Name");
+    }
+  
+  SqliteFetchData *fetchData = (SqliteFetchData*)data;
+
+  /* Loop through the columns to find the name column,
+   * and find the BlxSequence with that name */
+  int i;
+  BlxSequence *blxSeq = NULL;
+
+  for (i = 0; i < argc && !blxSeq; ++i)
+    {
+      GQuark column = g_quark_from_string(azColName[i]);
+      
+      if (column == nameCol)
+        {
+          blxSeq = findBlxSequence(argv[i], fetchData->seqList);
+        }
+    }
+
+  /* Loop again to populate the sequence data */
+  if (blxSeq)
+    {
+      for (i = 0; i < argc; ++i)
+        {
+          DEBUG_OUT("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
+          blxSequenceSetColumn(blxSeq, azColName[i], argv[i], fetchData->columnList);
+        }
+    }
+
+  DEBUG_EXIT("populateResultsListCB");
+  return 0;
+}
+
+
+/* Execute the given sql query and call the callback on the results. */
+void sqliteRequest(const char *database, const char *query, SqliteFunc callbackFunc, void *callbackData, GError **error)
+{
+  DEBUG_ENTER("sqliteRequest");
+
+#ifdef SQLITE3
+  sqlite3 *db;
+
+  int rc = sqlite3_open(database, &db);
+  
+  if (rc)
+    {
+      fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
+      sqlite3_close(db);
+      return;
+    }
+
+  DEBUG_OUT("Database: %s\nQuery: %s\n", database, query);
+
+  char *zErrMsg = 0;
+  rc = sqlite3_exec(db, query, callbackFunc, callbackData, &zErrMsg);
+
+  if (rc != SQLITE_OK)
+    {
+      fprintf(stderr, "SQL error: %s\n", zErrMsg);
+      sqlite3_free(zErrMsg);
+    }
+
+  sqlite3_close(db);
+#else
+  g_set_error(error, BLX_ERROR, 1, "SQLite not available: sqlite3 may not be installed on your system, or has not been compiled into the package correctly.\n");
+#endif
+
+  DEBUG_EXIT("sqliteRequest");
+}
+
+
+/* Check that the fetch method is non-null and has a db and query */
+void sqliteValidateFetchMethod(const BlxFetchMethod* const fetchMethod, GError **error)
+{
+  if (!fetchMethod)
+    {
+      g_set_error(error, BLX_CONFIG_ERROR, BLX_CONFIG_ERROR_NULL_FETCH, "Program error: fetch method is null\n");
+    }
+  else if (!fetchMethod->location)
+    {
+      g_set_error(error, BLX_CONFIG_ERROR, BLX_CONFIG_ERROR_NO_EXE, "No database file specified for fetch method '%s'\n", g_quark_to_string(fetchMethod->name));
+    }
+  else if (!fetchMethod->args)
+    {
+      g_set_error(error, BLX_CONFIG_ERROR, BLX_CONFIG_ERROR_NO_ARGS, "No query specified for fetch method '%s'\n", g_quark_to_string(fetchMethod->name));
+    }
+}
+
+
+
+/********************/
+/* Public functions */
+/********************/
+
+
+/* Fetch multiple sequences using sqlite */
+void sqliteFetchSequences(GList *seqsToFetch, 
+                          const BlxFetchMethod* const fetchMethod, 
+                          GList *columnList,
+                          GError **error)
+{
+  DEBUG_ENTER("sqliteFetchSequences");
+
+  GError *tmpError = NULL;
+  sqliteValidateFetchMethod(fetchMethod, &tmpError);
+    
+  GString *query = NULL;
+
+  if (!tmpError)
+    {
+      query = getFetchArgsMultiple(fetchMethod, seqsToFetch, &tmpError);
+    }
+
+  SqliteFetchData fetchData = {seqsToFetch, columnList};
+  
+  if (query && !tmpError)
+    {
+      sqliteRequest(fetchMethod->location, 
+                    query->str,
+                    populateResultsListCB,
+                    &fetchData,
+                    &tmpError);
+    }
+
+  g_string_free(query, TRUE);
+  
+  if (tmpError)
+    g_propagate_error(error, tmpError);
+
+  DEBUG_EXIT("sqliteFetchSequences");
+}
+
diff --git a/blixemApp/blxcontext.cpp b/blixemApp/blxcontext.cpp
new file mode 100644
index 0000000..625b5a0
--- /dev/null
+++ b/blixemApp/blxcontext.cpp
@@ -0,0 +1,1202 @@
+/*  File: blxcontext.cpp
+ *  Author: Gemma Barson, 2016-04-06
+ *  Copyright (c) 2016 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: See blxcontext.hpp
+ *----------------------------------------------------------------------------
+ */
+
+
+#include <algorithm>
+
+#include <blixemApp/blxcontext.hpp>
+#include <blixemApp/blixem_.hpp>
+#include <seqtoolsUtils/blxGff3Parser.hpp>
+
+
+using namespace std;
+
+
+
+/***********************************************************
+ *                     Internal functions                  *
+ ***********************************************************/
+
+namespace // unnamed namespace
+{
+
+
+/* Return the group type based on a feature type. Returns NONE if featureType unset */
+GroupType getGroupType(const BlxSequenceType featureType)
+{
+  GroupType result = GroupType::NONE;
+  
+  if (featureType == BLXSEQUENCE_MATCH)
+    result = GroupType::MATCH;
+  else if (featureType != BLXSEQUENCE_UNSET)
+    result = GroupType::OTHER;
+
+  return result;
+}
+
+
+/* Return the group type */
+GroupType getGroupType(const SequenceGroup *group)
+{
+  GroupType result = GroupType::NONE;
+  
+  // Find the type based on the feature types in the blxsequence list.
+  if (group && group->seqList && g_list_length(group->seqList) > 0)
+    {
+      /* Get type from first item in list (assume all in group are the same
+       * - may not be true so this could be improved, maybe with a 'mixed' type) */
+      BlxSequence *firstSeq = (BlxSequence*)(group->seqList->data);
+      result = getGroupType(firstSeq->type);
+    }
+
+  return result;
+}
+
+
+/* This returns the name for the given flag enum. It returns null if the name
+ * has not been set. This is used to save settings in the config file; only 
+ * flags whose name is set in this function will be saved. */
+static const char* getFlagName(const BlxFlag flag)
+{
+  /* Create an array of names for all of the relevant settings */
+  static const char* names[BLXFLAG_NUM_FLAGS] = {0, 0};
+  
+  if (!names[1]) /* only populate it once */
+    {
+      names[BLXFLAG_HIGHLIGHT_DIFFS] = SETTING_NAME_HIGHLIGHT_DIFFS;
+      names[BLXFLAG_HIGHLIGHT_VARIATIONS] = SETTING_NAME_HIGHLIGHT_VARIATIONS;
+      names[BLXFLAG_SHOW_VARIATION_TRACK] = SETTING_NAME_SHOW_VARIATION_TRACK;
+      names[BLXFLAG_SHOW_UNALIGNED] = SETTING_NAME_SHOW_UNALIGNED;
+      names[BLXFLAG_SHOW_UNALIGNED_SELECTED] = SETTING_NAME_SHOW_UNALIGNED_SELECTED;
+      names[BLXFLAG_LIMIT_UNALIGNED_BASES] = SETTING_NAME_LIMIT_UNALIGNED_BASES;
+      names[BLXFLAG_SHOW_POLYA_SITE] = SETTING_NAME_SHOW_POLYA_SITE;
+      names[BLXFLAG_SHOW_POLYA_SITE_SELECTED] = SETTING_NAME_SHOW_POLYA_SITE_SELECTED;
+      names[BLXFLAG_SHOW_POLYA_SIG] = SETTING_NAME_SHOW_POLYA_SIG;
+      names[BLXFLAG_SHOW_POLYA_SIG_SELECTED] = SETTING_NAME_SHOW_POLYA_SIG_SELECTED;
+      names[BLXFLAG_SHOW_SPLICE_SITES] = SETTING_NAME_SHOW_SPLICE_SITES;
+      names[BLXFLAG_SHOW_MAYBE_CANONICAL] = SETTING_NAME_SHOW_MAYBE_CANONICAL;
+      names[BLXFLAG_SHOW_COLINEARITY] = SETTING_NAME_SHOW_COLINEARITY;
+      names[BLXFLAG_SHOW_COLINEARITY_SELECTED] = SETTING_NAME_SHOW_COLINEARITY_SELECTED;
+    }
+
+  if (flag <= BLXFLAG_MIN || flag >= BLXFLAG_NUM_FLAGS)
+    return NULL;
+  else
+    return names[flag];
+}
+
+
+/* Whether to include the given msp type in depth coverage calculations */
+static gboolean includeTypeInCoverage(BlxMspType mspType)
+{
+  return (mspType == BLXMSP_MATCH);
+}
+
+
+/* Utility to get the depth-counter enum from the given character */
+DepthCounter getDepthCounterForChar(const char c, const BlxStrand strand)
+{
+  DepthCounter result = DEPTHCOUNTER_NONE;
+
+  switch (c)
+    {
+    case 'a': //fall through
+    case 'A': 
+      if (strand == BLXSTRAND_REVERSE)
+        result = DEPTHCOUNTER_A_R;
+      else
+        result = DEPTHCOUNTER_A_F;
+      break;
+    case 'c': //fall through 
+    case 'C': 
+      if (strand == BLXSTRAND_REVERSE)
+        result = DEPTHCOUNTER_C_R;
+      else
+        result = DEPTHCOUNTER_C_F;
+      break;
+    case 'g':  //fall through
+    case 'G': 
+      if (strand == BLXSTRAND_REVERSE)
+        result = DEPTHCOUNTER_G_R; 
+      else
+        result = DEPTHCOUNTER_G_F; 
+      break;
+    case 'u':  //fall through
+    case 'U':   //fall through
+    case 't':  //fall through
+    case 'T': 
+      if (strand == BLXSTRAND_REVERSE)
+        result = DEPTHCOUNTER_T_R; 
+      else
+        result = DEPTHCOUNTER_T_F; 
+      break;
+    case 'n':  //fall through
+    case 'N': 
+      if (strand == BLXSTRAND_REVERSE)
+        result = DEPTHCOUNTER_N_R; 
+      else
+        result = DEPTHCOUNTER_N_F; 
+      break;
+    case '.': // indicates a gap
+      if (strand == BLXSTRAND_REVERSE)
+        result = DEPTHCOUNTER_GAP_R; 
+      else
+        result = DEPTHCOUNTER_GAP_F; 
+      break;
+    default:
+      break;
+    }
+
+  return result;
+}
+
+
+/* utility to free the given pointer and set it to null */
+static void freeAndNull(gpointer *ptr)
+{
+  if (ptr && *ptr)
+    {
+      g_free(*ptr);
+      *ptr = NULL;
+    }
+}
+
+
+} // unnamed namespace
+
+
+/***********************************************************
+ *                     BlxContext class                    *
+ ***********************************************************/
+
+BlxContext::BlxContext(CommandLineOptions *options,
+                       const IntRange* const refSeqRange_in,
+                       const IntRange* const fullDisplayRange_in,
+                       const char *paddingSeq_in,
+                       GArray* featureLists_in[],
+                       GList *seqList_in,
+                       GSList *supportedTypes_in,
+                       GtkWidget *widget_in,
+                       GtkWidget *statusBar_in,
+                       const gboolean External_in,
+                       GSList *styles_in)
+{
+  statusBar = statusBar_in;
+  
+  refSeq = options->refSeq;
+  refSeqName = options->refSeqName ? g_strdup(options->refSeqName) : g_strdup("Blixem-seq");
+  refSeqRange.set(refSeqRange_in);
+  fullDisplayRange.set(fullDisplayRange_in);
+  refSeqOffset = options->refSeqOffset;
+  optionalColumns = options->optionalColumns;
+
+  mspList = options->mspList;
+  columnList = options->columnList;
+  styles = styles_in;
+  
+  int typeId = 0;
+  for ( ; typeId < BLXMSP_NUM_TYPES; ++typeId)
+    {
+      featureLists[typeId] = featureLists_in[typeId];
+    }
+  
+  geneticCode = options->geneticCode;
+  blastMode = options->blastMode;
+  seqType = options->seqType;
+  numFrames = options->numFrames;
+  paddingSeq = paddingSeq_in;
+  bulkFetchDefault = options->bulkFetchDefault;
+  userFetchDefault = options->userFetchDefault;
+  optionalFetchDefault = options->optionalFetchDefault;
+  fetchMethods = options->fetchMethods;
+  dataset = g_strdup(options->dataset);
+  matchSeqs = seqList_in;
+  supportedTypes = supportedTypes_in;
+  
+  displayRev = FALSE;
+  external = External_in;
+  
+  selectedSeqs = NULL;
+  sequenceGroups = NULL;
+  
+  dotterRefType = BLXDOTTER_REF_AUTO;
+  dotterMatchType = BLXDOTTER_MATCH_SELECTED;
+  dotterAdhocSeq = NULL;
+  dotterHsps = FALSE;
+  dotterSleep = FALSE;
+  dotterStart = UNSET_INT;
+  dotterEnd = UNSET_INT;
+  dotterZoom = 0;
+  
+  defaultColors = NULL;
+  usePrintColors = FALSE;
+  windowColor = options->windowColor;
+  
+  createColors(widget_in);
+  
+  initialiseFlags(options);
+    
+  /* Null out all the entries in the dialogs list */
+  int dialogId = 0;
+  for ( ; dialogId < BLXDIALOG_NUM_DIALOGS; ++dialogId)
+    {
+      dialogList[dialogId] = NULL;
+    }
+    
+  spawnedProcesses = NULL;
+  minDepth = 0;
+  maxDepth = 0;
+
+  for (int counter = DEPTHCOUNTER_NONE + 1; counter < DEPTHCOUNTER_NUM_ITEMS; ++counter)
+    depthArray[counter] = NULL;
+ 
+  loadSettings();
+
+  /* do this after loading settings because the passed-in squashed 
+   * matches option should override the saved option in the settings */
+  modelId = options->squashMatches ? BLXMODEL_SQUASHED : BLXMODEL_NORMAL;
+
+  fetch_debug = options->fetch_debug;
+
+#ifdef PFETCH_HTML
+  ipresolve = options->ipresolve;
+  cainfo = options->cainfo;
+#endif
+
+  /* Calculate the font size */
+  if (widget_in)
+    getFontCharSize(widget_in, widget_in->style->font_desc, &m_charWidth, &m_charHeight);
+
+}
+
+
+BlxContext::~BlxContext()
+{
+  /* Free allocated strings */
+  freeAndNull((gpointer*)(&dataset));
+  freeAndNull((gpointer*)(&refSeqName));
+
+  /* Free table of fetch methods and the fetch-method structs */
+  /* to do */
+      
+  /* Free the list of selected sequence names (not the names themselves
+   * because we don't own them). */
+  if (selectedSeqs)
+    {
+      g_list_free(selectedSeqs);
+      selectedSeqs = NULL;
+    }
+      
+  deleteAllSequenceGroups();
+
+  /* Free the color array */
+  if (defaultColors)
+    {
+      int i = BLXCOLOR_MIN + 1;
+      for (; i < BLXCOL_NUM_COLORS; ++i)
+        {
+          BlxColor *blxColor = &g_array_index(defaultColors, BlxColor, i);
+          destroyBlxColor(blxColor);
+        }
+
+      g_array_free(defaultColors, TRUE);
+      defaultColors = NULL;
+    }
+
+  /* destroy the feature lists. note that the stored msps are owned
+   * by the msplist, not by the feature lists */
+  int typeId = 0;
+  for ( ; typeId < BLXMSP_NUM_TYPES; ++typeId)
+    g_array_free(featureLists[typeId], FALSE);
+      
+  destroyMspList(&(mspList));
+  destroyBlxSequenceList(&(matchSeqs));
+  blxDestroyGffTypeList(&(supportedTypes));
+  killAllSpawned();
+}
+
+
+/* Return true if we should filter features of the given type */
+bool BlxContext::filterGroupType(const GroupType groupType) const
+{
+  bool result = false;
+
+  if (groupType == GroupType::NONE)
+    {
+      // If a type wasn't specified then assume this means we're not bothered about checking
+      // against type and display everything.
+      result = false;
+    }
+  else
+    {
+      // Loop through all groups and see if any are filtering groups of this type
+      for (GList *item = sequenceGroups; item; item = item->next)
+        {
+          SequenceGroup *group = (SequenceGroup*)(item->data);
+
+          if (group->isFilter && getGroupType(group) == groupType)
+            {
+              result = true;
+              break;
+            }
+        }
+    }
+
+  return result;
+}
+
+
+/* Return true if the given group should be displayed */
+bool BlxContext::isGroupVisible(const SequenceGroup *group, const BlxSequenceType featureType) const
+{
+  bool result = false;
+
+  if (group && group->hidden)
+    {
+      // always hide
+      result = false;
+    }
+  else if (group && group->isFilter)
+    {
+      // always show because this group is itself a filter
+      result = true;
+    }
+  else if (group)
+    {
+      // This group isn't itself a filter, so we'll only show it if we're not filtering out
+      // features of this type
+      result = !filterGroupType(getGroupType(group));
+    }
+  else
+    {
+      // Decide what to do with ungrouped features based on the feature type
+      result = !filterGroupType(getGroupType(featureType));
+    }
+
+  return result;
+}
+
+
+/* Return true if a feature that is in several given groups should be displayed */
+bool BlxContext::isGroupVisible(list<const SequenceGroup*> groups, const BlxSequenceType featureType) const
+{
+  bool visible = false;
+
+  if (groups.empty())
+    {
+      // Decide what to do with ungrouped features based on the feature type
+      visible = !filterGroupType(getGroupType(featureType));
+    }
+
+  for (auto group : groups)
+    {
+      // If any group is hidden, hide the feature
+      // Otherwise, if any group is visible, show the feature
+      if (group->hidden)
+        {
+          visible = false;
+          break;
+        }
+      else if (isGroupVisible(group, featureType))
+        {
+          visible = true;
+        }
+    }
+
+  return visible;
+}
+
+
+/* Get the first group (or filter if isFilter) that is a quick group/filter */
+SequenceGroup* BlxContext::getQuickGroup(const bool isFilter)
+{
+  SequenceGroup *result = NULL;
+
+  for (GList *item = sequenceGroups; item; item = item->next)
+    {
+      SequenceGroup *group = (SequenceGroup*)(item->data);
+
+      if (group->isQuickGroup && group->isFilter == isFilter)
+        {
+          result = group;
+          break;
+        }
+    }
+
+  return result;
+}
+
+/* Free the memory used by the given sequence group and its members. */
+void BlxContext::destroySequenceGroup(SequenceGroup **seqGroup)
+{
+  if (seqGroup && *seqGroup)
+    {
+      /* Remove it from the list of groups */
+      sequenceGroups = g_list_remove(sequenceGroups, *seqGroup);
+      
+      /* Free the memory used by the group name */
+      if ((*seqGroup)->groupName)
+        {
+          g_free((*seqGroup)->groupName);
+        }
+      
+      /* Free the list of sequences */
+      if ((*seqGroup)->seqList)
+        {
+          freeStringList(&(*seqGroup)->seqList, (*seqGroup)->ownsSeqNames);
+        }
+      
+      delete *seqGroup;
+      *seqGroup = NULL;
+    }
+}
+
+
+/* Delete all groups */
+void BlxContext::deleteAllSequenceGroups()
+{
+  GList *groupItem = sequenceGroups;
+  GList *nextItem = NULL;
+  
+  while (groupItem)
+    {
+      nextItem = groupItem->next; // groupItem gets invalidated by destroySequenceGroup
+
+      SequenceGroup *group = (SequenceGroup*)(groupItem->data);
+      destroySequenceGroup(&group);
+
+      groupItem = nextItem;
+    }
+  
+  g_list_free(sequenceGroups);
+  sequenceGroups = NULL;
+}
+
+
+/* Disable all groups and filters, i.e. turn off filtering and highlighting. */
+void BlxContext::disableAllGroups()
+{
+  GList *groupItem = sequenceGroups;
+  
+  while (groupItem)
+    {
+      GList *nextItem = groupItem->next ;
+
+      SequenceGroup *group = (SequenceGroup*)(groupItem->data);
+
+      group->isFilter = FALSE;
+      group->highlighted = FALSE;
+      group->hidden = FALSE;
+
+      groupItem = nextItem;
+    }
+}
+
+
+/* Disable all "quick" groups and filters, i.e. turn off filtering and highlighting. Also resets
+ * the 'quick group' flag so they become a normal group (at the moment we have a concept of only
+ * one quick group at a time). */
+void BlxContext::disableAllQuickGroups()
+{
+  GList *groupItem = sequenceGroups;
+  
+  while (groupItem)
+    {
+      GList *nextItem = groupItem->next ;
+
+      SequenceGroup *group = (SequenceGroup*)(groupItem->data);
+
+      if (group->isQuickGroup)
+        {
+          group->isFilter = FALSE;
+          group->highlighted = FALSE;
+          group->hidden = FALSE;
+          group->isQuickGroup = FALSE;
+        }
+
+      groupItem = nextItem;
+    }
+}
+
+
+double BlxContext::charWidth() const
+{
+  return m_charWidth;
+}
+
+double BlxContext::charHeight() const
+{
+  return m_charHeight;
+}
+
+
+BlxStrand BlxContext::activeStrand() const
+{
+  BlxStrand result = BLXSTRAND_NONE;
+
+  result = displayRev ? BLXSTRAND_REVERSE : BLXSTRAND_FORWARD;
+  
+  return result;
+}
+
+
+/* Create the colors that blixem will use for various specific purposes */
+void BlxContext::createColors(GtkWidget *widget)
+{
+  /* Initialise the array with empty BlxColor structs */
+  defaultColors = g_array_sized_new(FALSE, FALSE, sizeof(BlxColor), BLXCOL_NUM_COLORS);
+  int i = BLXCOLOR_MIN + 1;
+  
+  for ( ; i < BLXCOL_NUM_COLORS; ++i)
+    {
+      BlxColor *blxColor = new BlxColor;
+      blxColor->name = NULL;
+      blxColor->desc = NULL;
+      g_array_append_val(defaultColors, *blxColor);
+    }
+  
+  /* Get the default background color of our widgets (i.e. that inherited from the theme).
+   * Convert it to a string so we can use the same creation function as the other colors */
+  char *defaultBgColorStr = convertColorToString(&widget->style->bg[GTK_STATE_NORMAL]);
+  createBlxColor(defaultColors, BLXCOLOR_BACKGROUND, "Background", "Background color", defaultBgColorStr, BLX_WHITE, "#bdbdbd", NULL);
+  
+  /* reference sequence */
+  createBlxColor(defaultColors, BLXCOLOR_REF_SEQ, "Reference sequence", "Default background color for the reference sequence", BLX_YELLOW, BLX_VERY_LIGHT_GREY, BLX_DARK_YELLOW, NULL);
+  
+  /* matches */
+  createBlxColor(defaultColors, BLXCOLOR_MATCH, "Exact match", "Exact match", BLX_LIGHT_CYAN, BLX_LIGHT_GREY, BLX_CYAN, NULL);
+  createBlxColor(defaultColors, BLXCOLOR_CONS, "Conserved match", "Conserved match", BLX_VIOLET, BLX_VERY_LIGHT_GREY, BLX_DARK_VIOLET, NULL);
+  createBlxColor(defaultColors, BLXCOLOR_MISMATCH, "Mismatch", "Mismatch", "#FFFFFF", BLX_WHITE, "#FED4EA", NULL);
+  createBlxColor(defaultColors, BLXCOLOR_INSERTION, "Insertion", "Insertion", "#9E00FF", BLX_VERY_DARK_GREY, NULL, NULL);
+  
+  /* exons */
+  createBlxColor(defaultColors, BLXCOLOR_EXON_START, "Exon start", "Exon start boundary", BLX_BLUE, BLX_GREY, NULL, NULL);
+  createBlxColor(defaultColors, BLXCOLOR_EXON_END, "Exon end", "Exon end boundary", BLX_DARK_BLUE, BLX_GREY, NULL, NULL);
+
+  createBlxColor(defaultColors, BLXCOLOR_EXON_FILL, "Exon fill color", "Exon fill color in big picture", BLX_PALE_YELLOW, BLX_GREY, NULL, NULL);
+  createBlxColor(defaultColors, BLXCOLOR_EXON_LINE, "Exon line color", "Exon line color in big picture", BLX_BLUE, BLX_VERY_DARK_GREY, NULL, NULL);
+  createBlxColor(defaultColors, BLXCOLOR_CDS_FILL, "CDS fill color", "Coding section fill color in big picture", BLX_LIGHT_GREEN, BLX_LIGHT_GREY, NULL, NULL);
+  createBlxColor(defaultColors, BLXCOLOR_CDS_LINE, "CDS line color", "Coding section line color in big picture", BLX_DARK_GREEN, BLX_DARK_GREY, BLX_VERY_DARK_GREEN, NULL);
+  createBlxColor(defaultColors, BLXCOLOR_UTR_FILL, "Exon fill color (UTR)", "Untranslated region fill color in big picture", BLX_LIGHT_RED, BLX_GREY, NULL, NULL);
+  createBlxColor(defaultColors, BLXCOLOR_UTR_LINE, "Exon line color (UTR)", "Untranslated region line color in big picture", BLX_DARK_RED, BLX_VERY_DARK_GREY, BLX_VERY_DARK_RED, NULL);
+  createBlxColor(defaultColors, BLXCOLOR_PARTIAL_EXON_CROSSHATCH, "Cross-hatch line color for partial exons", "Line color of cross-hatch highlighting for partial exons", BLX_GREY, BLX_GREY, NULL, NULL);
+  
+  /* codons */
+  createBlxColor(defaultColors, BLXCOLOR_CODON, "Codon nucleotides", "Codon nucleotides", BLX_SKY_BLUE, BLX_GREY, NULL, NULL);
+  createBlxColor(defaultColors, BLXCOLOR_MET, "MET codons", "MET codons", BLX_LAWN_GREEN, BLX_LIGHT_GREY, NULL, NULL);
+  createBlxColor(defaultColors, BLXCOLOR_STOP, "STOP codons", "MET codons", BLX_SALMON_RED, BLX_LIGHT_GREY, NULL, NULL);
+  
+  /* SNPs */
+  createBlxColor(defaultColors, BLXCOLOR_SNP, "SNPs", "SNPs", BLX_ORANGE, BLX_GREY, NULL, NULL);
+
+  /* Big Picture */
+  createBlxColor(defaultColors, BLXCOLOR_GRID_LINE, "Grid lines", "Big Picture grid lines", BLX_YELLOW, BLX_LIGHT_GREY, NULL, NULL);
+  createBlxColor(defaultColors, BLXCOLOR_GRID_TEXT, "Grid text", "Big Picture grid text", BLX_BLACK, BLX_BLACK, NULL, NULL);
+  createBlxColor(defaultColors, BLXCOLOR_HIGHLIGHT_BOX, "Highlight box", "Highlight box in the big picture", BLX_VERY_DARK_GREY, BLX_VERY_DARK_GREY, NULL, NULL);
+  createBlxColor(defaultColors, BLXCOLOR_PREVIEW_BOX, "Preview box", "Preview box in the big picture", BLX_BLACK, BLX_BLACK, NULL, NULL);
+  createBlxColor(defaultColors, BLXCOLOR_MSP_LINE, "Big picture match line", "Color of the lines representing matches in the Big Picture", BLX_BLACK, BLX_BLACK, BLX_CYAN, BLX_GREY);
+
+  /* groups */
+  createBlxColor(defaultColors, BLXCOLOR_GROUP, "Default group color", "Default highlight color for a new group", BLX_ORANGE_RED, BLX_VERY_LIGHT_GREY, NULL, NULL);
+  createBlxColor(defaultColors, BLXCOLOR_MATCH_SET, "Default match set color", "Default color for the match set group (applies only when it is created for the first time or after being deleted)", BLX_RED, BLX_VERY_LIGHT_GREY, NULL, NULL);
+
+  /* colinearity */
+  createBlxColor(defaultColors, BLXCOLOR_COLINEAR_PERFECT, "Perfect colinearity", "Color of lines joining alignment blocks with perfect colinearity", BLX_DARK_GREEN, BLX_LIGHT_GREY, BLX_DARK_GREEN, BLX_LIGHT_GREY);
+  createBlxColor(defaultColors, BLXCOLOR_COLINEAR_IMPERFECT, "Imperfect colinearity", "Color of lines joining alignment blocks with imperfect colinearity", BLX_ORANGE, BLX_GREY, BLX_ORANGE, BLX_GREY);
+  createBlxColor(defaultColors, BLXCOLOR_COLINEAR_NOT, "Not colinear", "Color of lines joining alignment blocks that are not colinear", BLX_RED, BLX_DARK_GREY, BLX_RED, BLX_DARK_GREY);
+
+  /* polyA features */
+  createBlxColor(defaultColors, BLXCOLOR_POLYA_TAIL, "polyA tail", "polyA tail", BLX_RED, BLX_DARK_GREY, NULL, NULL);
+  createBlxColor(defaultColors, BLXCOLOR_POLYA_SIGNAL, "polyA signal", "polyA signal", BLX_RED, BLX_DARK_GREY, NULL, NULL);
+  createBlxColor(defaultColors, BLXCOLOR_POLYA_SIGNAL_ANN, "Annotated polyA signal", "Annotated polyA signal", BLX_RED, BLX_DARK_GREY, NULL, NULL);
+  createBlxColor(defaultColors, BLXCOLOR_POLYA_SITE_ANN, "Annotated polyA site", "Annotated polyA site", BLX_RED, BLX_DARK_GREY, NULL, NULL);
+
+  /* misc */
+  createBlxColor(defaultColors, BLXCOLOR_UNALIGNED_SEQ, "Unaligned sequence", "Addition sequence in the match that is not part of the alignment", "#FFC432", BLX_WHITE, "#FFE8AD", NULL);
+  createBlxColor(defaultColors, BLXCOLOR_CANONICAL, "Canonical intron bases", "The two bases at the start/end of the intron for the selected MSP are colored this color if they are canonical", BLX_GREEN, BLX_GREY, NULL, NULL);
+  createBlxColor(defaultColors, BLXCOLOR_NON_CANONICAL, "Non-canonical intron bases", "The two bases at the start/end of the intron for the selected MSP are colored this color if they are not canonical", BLX_RED, BLX_DARK_GREY, NULL, NULL);
+  createBlxColor(defaultColors, BLXCOLOR_MAYBE_CANONICAL, "\"Maybe\" canonical intron bases", "The two bases at the start/end of the intron for the selected MSP are colored this color if they would be canonical if they were on the other strand", BLX_ORANGE, BLX_DARK_GREY, NULL, NULL);
+  createBlxColor(defaultColors, BLXCOLOR_TREE_GRID_LINES, "Tree grid lines", "Tree grid lines", BLX_VERY_DARK_GREY, BLX_VERY_DARK_GREY, BLX_VERY_DARK_GREY, BLX_VERY_DARK_GREY);
+  createBlxColor(defaultColors, BLXCOLOR_CLIP_MARKER, "Clipped-match indicator", "Marker to indicate a match has been clipped to the display range", BLX_RED, BLX_DARK_GREY, NULL, NULL);
+  createBlxColor(defaultColors, BLXCOLOR_COVERAGE_PLOT, "Coverage plot", "Coverage plot", BLX_ROYAL_BLUE, BLX_DARK_GREY, NULL, NULL);
+  createBlxColor(defaultColors, BLXCOLOR_ASSEMBLY_GAP, "Assembly gaps", "Highlight color for assembly gaps", "#D14553", BLX_DARK_GREY, NULL, NULL);
+  createBlxColor(defaultColors, BLXCOLOR_SELECTION, "Selection color", "Highlight color for selections", BLX_DARK_GREY, BLX_DARK_GREY, NULL, NULL);
+  
+  g_free(defaultBgColorStr);
+}
+/* Called on startup to set the initial state of the flags. Gets the state for
+ * the settings from the config file if specified, otherwises uses hard-coded
+ * defaults. */
+void BlxContext::initialiseFlags(CommandLineOptions *options)
+{
+  /* Initialise all the flags to false */
+  int flag = BLXFLAG_MIN + 1;
+  for ( ; flag < BLXFLAG_NUM_FLAGS; ++flag)
+    {
+      flags[flag] = FALSE;
+    }
+  
+  /* Set any specific flags that we want initialised to TRUE */
+  flags[BLXFLAG_LIMIT_UNALIGNED_BASES] = TRUE;
+  flags[BLXFLAG_SHOW_POLYA_SITE_SELECTED] = TRUE;
+  flags[BLXFLAG_SHOW_POLYA_SIG_SELECTED] = TRUE;
+  flags[BLXFLAG_SHOW_SPLICE_SITES] = TRUE;
+  flags[BLXFLAG_NEGATE_COORDS] = options->negateCoords;
+  flags[BLXFLAG_HIGHLIGHT_DIFFS] = options->highlightDiffs;
+  flags[BLXFLAG_SAVE_TEMP_FILES] = options->saveTempFiles;
+  flags[BLXFLAG_ABBREV_TITLE] = options->abbrevTitle;
+}
+
+
+/* load settings from the config file */
+void BlxContext::loadSettings()
+{
+  /* Override the defaults settings with those given in the config file, if any */
+  GKeyFile *key_file = blxGetConfig();
+
+  if (!key_file)
+    return;
+  
+  GError *error = NULL;
+
+  /* squash-matches */
+  int squashMatches = g_key_file_get_integer(blxGetConfig(), SETTINGS_GROUP, SETTING_NAME_SQUASH_MATCHES, &error);
+  
+  if (error)
+    {
+      /* we don't care if it wasn't found; just clear the error */
+      g_error_free(error);
+      error = NULL;
+    }
+  else
+    {
+      modelId = squashMatches ? BLXMODEL_SQUASHED : BLXMODEL_NORMAL;
+    }
+
+  /* loop through all the flags and see if any of them are given */
+  int flag = BLXFLAG_MIN + 1;
+  
+  for ( ; flag < BLXFLAG_NUM_FLAGS; ++flag)
+    {
+      const char *flagName = getFlagName((BlxFlag)flag);
+      
+      if (flagName)
+        {
+          int result = g_key_file_get_integer(key_file, SETTINGS_GROUP, flagName, &error);
+          
+          if (error)
+            {
+              g_error_free(error);
+              error = NULL;
+            }
+          else
+            {
+              flags[flag] = result;
+            }
+        }
+    }
+}
+
+
+/* Called by saveBlixemSettings; does the work to save the boolean flags */
+void BlxContext::saveSettingsFlags(GKeyFile *key_file)
+{
+  /* loop through each (save-able) setting */
+  int flag = BLXFLAG_MIN + 1;
+  
+  for ( ; flag < BLXFLAG_NUM_FLAGS; ++flag)
+    {
+      const char *flagName = getFlagName((BlxFlag)flag);
+
+      if (flagName)
+        g_key_file_set_integer(key_file, SETTINGS_GROUP, flagName, flags[flag]);
+    }
+}
+
+
+/* Kill all processes spawned from this blixem */
+void BlxContext::killAllSpawned()
+{
+  GSList *processes = spawnedProcesses;
+  
+  for ( ; processes; processes = processes->next)
+    {
+      pid_t pid = GPOINTER_TO_INT(processes->data);
+      kill(pid, 9);
+    }
+    
+  if (spawnedProcesses)
+    {
+      g_slist_free(spawnedProcesses);
+      spawnedProcesses = NULL;
+    }
+}
+
+
+/* Calculate the depth of coverage of short-reads for each reference sequence display coord.
+ * depthArray must be the same length as displayRange. */
+void BlxContext::calculateDepth(const int numUnalignedBases)
+{
+  /* Allocate the depth array, if null */
+  const int displayLen = fullDisplayRange.length();
+  
+  if (displayLen < 1)
+    return; 
+  
+  depthArray[DEPTHCOUNTER_ALL_F] = (int*)g_malloc0(sizeof(int) * displayLen);
+  depthArray[DEPTHCOUNTER_GAP_F] = (int*)g_malloc0(sizeof(int) * displayLen);
+  depthArray[DEPTHCOUNTER_A_F] = (int*)g_malloc0(sizeof(int) * displayLen);
+  depthArray[DEPTHCOUNTER_C_F] = (int*)g_malloc0(sizeof(int) * displayLen);
+  depthArray[DEPTHCOUNTER_G_F] = (int*)g_malloc0(sizeof(int) * displayLen);
+  depthArray[DEPTHCOUNTER_T_F] = (int*)g_malloc0(sizeof(int) * displayLen);
+  depthArray[DEPTHCOUNTER_N_F] = (int*)g_malloc0(sizeof(int) * displayLen);
+  
+  depthArray[DEPTHCOUNTER_ALL_R] = (int*)g_malloc0(sizeof(int) * displayLen);
+  depthArray[DEPTHCOUNTER_GAP_R] = (int*)g_malloc0(sizeof(int) * displayLen);
+  depthArray[DEPTHCOUNTER_A_R] = (int*)g_malloc0(sizeof(int) * displayLen);
+  depthArray[DEPTHCOUNTER_C_R] = (int*)g_malloc0(sizeof(int) * displayLen);
+  depthArray[DEPTHCOUNTER_G_R] = (int*)g_malloc0(sizeof(int) * displayLen);
+  depthArray[DEPTHCOUNTER_T_R] = (int*)g_malloc0(sizeof(int) * displayLen);
+  depthArray[DEPTHCOUNTER_N_R] = (int*)g_malloc0(sizeof(int) * displayLen);
+  
+  /* Initialise each entry to zero */  
+  int i = 0;
+  for ( ; i < displayLen; ++i)
+    {
+      depthArray[DEPTHCOUNTER_ALL_F][i] = 0;
+      depthArray[DEPTHCOUNTER_GAP_F][i] = 0;
+      depthArray[DEPTHCOUNTER_A_F][i] = 0;
+      depthArray[DEPTHCOUNTER_C_F][i] = 0;
+      depthArray[DEPTHCOUNTER_G_F][i] = 0;
+      depthArray[DEPTHCOUNTER_T_F][i] = 0;
+      depthArray[DEPTHCOUNTER_N_F][i] = 0;
+
+      depthArray[DEPTHCOUNTER_ALL_R][i] = 0;
+      depthArray[DEPTHCOUNTER_GAP_R][i] = 0;
+      depthArray[DEPTHCOUNTER_A_R][i] = 0;
+      depthArray[DEPTHCOUNTER_C_R][i] = 0;
+      depthArray[DEPTHCOUNTER_G_R][i] = 0;
+      depthArray[DEPTHCOUNTER_T_R][i] = 0;
+      depthArray[DEPTHCOUNTER_N_R][i] = 0;
+    }
+  
+  /* Loop through all MSP lists */
+  int mspType = 0;
+  
+  for ( ; mspType < BLXMSP_NUM_TYPES; ++mspType)
+    {
+      /* Only include MSPs of relevant types */
+      if (!includeTypeInCoverage((BlxMspType)mspType))
+        continue;
+      
+      /* Loop through all MSPs in this list */
+      GArray *mspArray = featureLists[mspType];
+      const int fullDisplayLen = fullDisplayRange.length();
+    
+      i = 0;
+      const MSP *msp = mspArrayIdx(mspArray, i);
+  
+      for ( ; msp; msp = mspArrayIdx(mspArray, ++i))
+        {
+          /* For each ref-seq coord that this alignment spans, increment the depth */
+          int alignIdx = msp->displayRange.min();
+          int qIdx = msp->qRange.min();
+
+          for ( ; alignIdx <= msp->displayRange.max(); ++alignIdx, ++qIdx)
+            {
+              /* Convert the msp coord to a zero-based coord. Note that parts of the
+               * msp range may be outside the ref seq range. */
+              const int displayIdx = alignIdx - fullDisplayRange.min();
+
+              if (displayIdx >= 0 && displayIdx < fullDisplayLen)
+                {
+                  /* Increment the main counter */
+                  if (msp->qStrand == BLXSTRAND_REVERSE)
+                    depthArray[DEPTHCOUNTER_ALL_R][displayIdx] += 1;
+                  else
+                    depthArray[DEPTHCOUNTER_ALL_F][displayIdx] += 1;
+
+                  /* Find the match sequence base at this coord */
+                  int sIdx = 0;
+                  const char *seq = mspGetMatchSeq(msp);
+
+                  if (mspGetMatchCoord(msp, qIdx, TRUE, numUnalignedBases, this, &sIdx))
+                    {
+                      /* Check we have the sequence. If not then don't do anything (this will
+                       * show up as "unknown" in the read depth display) */
+                      if (seq)
+                        {
+                          DepthCounter counter = getDepthCounterForChar(seq[sIdx - 1], msp->qStrand); // sIdx is 1-based
+
+                          if (counter != DEPTHCOUNTER_NONE)
+                            depthArray[counter][displayIdx] += 1;
+                        }
+                    }
+                  else
+                    {
+                      /* No base here so it must be a gap in the match sequence */
+                      if (msp->qStrand == BLXSTRAND_REVERSE)
+                        depthArray[DEPTHCOUNTER_GAP_R][displayIdx] += 1;
+                      else
+                        depthArray[DEPTHCOUNTER_GAP_F][displayIdx] += 1;
+                    }
+                }
+            }
+        }
+    } 
+  
+  /* Find the max and min depth (total depth over both strands) */
+  minDepth = depthArray[DEPTHCOUNTER_ALL_F][0] + depthArray[DEPTHCOUNTER_ALL_R][0];
+  maxDepth = minDepth;
+  
+  for (i = 1 ; i < displayLen; ++i)
+    {
+      const int cur_depth = depthArray[DEPTHCOUNTER_ALL_F][i] + depthArray[DEPTHCOUNTER_ALL_R][i];
+
+      if (cur_depth < minDepth)
+        minDepth = cur_depth;
+      
+      if (cur_depth > maxDepth)
+        maxDepth = cur_depth;
+    }  
+}
+
+
+
+/* Calculate the total depth of coverage of short-reads for the given range of ref seq coords.
+ * depthArray must be the same length as displayRange. */
+int BlxContext::calculateTotalDepth(const IntRange *range, const BlxStrand strand)
+{
+  int depth = 0;
+
+  /* Loop through all MSP lists */
+  for (int mspType = 0 ; mspType < BLXMSP_NUM_TYPES; ++mspType)
+    {
+      /* Only include MSPs of relevant types */
+      if (!includeTypeInCoverage((BlxMspType)mspType))
+        continue;
+      
+      /* Loop through all MSPs in this list */
+      GArray *mspArray = featureLists[mspType];
+    
+      int i = 0;
+      for (const MSP *msp = mspArrayIdx(mspArray, i); msp; msp = mspArrayIdx(mspArray, ++i))
+        {
+          /* If the alignment is in our range, increment the depth. Only include msps on the
+           * given strand (or both strands if given strand is "none") */
+          if ((strand == BLXSTRAND_NONE || msp->qStrand == strand) &&
+              rangesOverlap(range, &msp->displayRange))
+            ++depth;
+        }
+    } 
+
+  return depth;
+}
+
+/* Utility to get the value from the depth array at the given coord for the given
+ * counter. Validates the coord and counter are valid. The coord should be in display coords. */
+int BlxContext::getDepthForCounter(const int coord, const DepthCounter counter)
+{
+  int result = 0;
+
+  g_return_val_if_fail(valueWithinRange(coord, &fullDisplayRange) &&
+                       counter > DEPTHCOUNTER_NONE &&
+                       counter < DEPTHCOUNTER_NUM_ITEMS &&
+                       depthArray[counter] != NULL,
+                       result);
+
+  int idx = invertCoord(coord, &fullDisplayRange, displayRev); // invert if display reversed
+  idx -= fullDisplayRange.min(); // make 0-based
+
+  result = depthArray[counter][idx];
+
+  return result;
+}
+
+
+/* Return the read depth at the given display coord */
+int BlxContext::getDepth(const int coord, 
+                         const char *base_char,
+                         const BlxStrand strand)
+{
+  int result = 0;
+  g_return_val_if_fail(coord >= fullDisplayRange.min() &&
+                       coord <= fullDisplayRange.max(), 
+                       result);
+
+  if (base_char && strand == BLXSTRAND_NONE)
+    {
+      /* Get the depth for the specific base for both strands */
+      DepthCounter counter_f = getDepthCounterForChar(*base_char, BLXSTRAND_FORWARD);
+      DepthCounter counter_r = getDepthCounterForChar(*base_char, BLXSTRAND_REVERSE);
+      
+      result = 
+        getDepthForCounter(coord, counter_f) +
+        getDepthForCounter(coord, counter_r);
+    }
+  else if (base_char && strand != BLXSTRAND_NONE)
+    {
+      /* Get the depth for the specific base and given strand */
+      DepthCounter counter = getDepthCounterForChar(*base_char, strand);
+      result = getDepthForCounter(coord, counter);
+    }
+  else if (strand == BLXSTRAND_NONE)
+    {
+      /* Get the depth for all reads for both strands */
+      result = 
+        getDepthForCounter(coord, DEPTHCOUNTER_ALL_F) + 
+        getDepthForCounter(coord, DEPTHCOUNTER_ALL_R);
+    }
+  else if (strand == BLXSTRAND_FORWARD)
+    {
+      /* Get the depth for all reads for the forward strand */
+      result = getDepthForCounter(coord, DEPTHCOUNTER_ALL_F);
+    }
+  else if (strand == BLXSTRAND_REVERSE)
+    {
+      /* Get the depth for all reads for the reverse strand */
+      result = getDepthForCounter(coord, DEPTHCOUNTER_ALL_R);
+    }
+  else
+    {
+      /* All possible conditions should be covered above */
+      g_warn_if_reached();
+    }
+
+  return result;
+}
+
+
+bool BlxContext::isSeqSelected(const BlxSequence *seq) const
+{
+  GList *foundItem = NULL;
+  
+  if (seq)
+    {
+      foundItem = g_list_find(selectedSeqs, seq);
+    }
+  
+  return (foundItem != NULL);
+}
+
+
+/* Returns the first group that the given sequence belongs to, if any (null if none). */
+SequenceGroup *BlxContext::getFirstSequenceGroup(const BlxSequence *seqToFind) const
+{
+  SequenceGroup *result = NULL;
+  
+  if (!seqToFind)
+    return result;
+  
+  /* Loop through all the groups until we find this sequence in one */
+  GList *groupItem = sequenceGroups;
+  for ( ; groupItem; groupItem = groupItem->next)
+    {
+      /* See if our sequence struct is in this group's list */
+      SequenceGroup *group = (SequenceGroup*)(groupItem->data);
+      GList *foundItem = g_list_find(group->seqList, seqToFind);
+      
+      if (foundItem)
+        {
+          result = group;
+          break;
+        }
+    }
+  
+  return result;
+}
+
+
+/* Returns the groups that the given sequence belongs to, if any (empty list if none) */
+list<const SequenceGroup*> BlxContext::getSequenceGroups(const BlxSequence *seqToFind) const
+{
+  list<const SequenceGroup*> result;
+  
+  if (!seqToFind)
+    return result;
+  
+  /* Loop through all the groups until we find this sequence in one */
+  GList *groupItem = sequenceGroups;
+  for ( ; groupItem; groupItem = groupItem->next)
+    {
+      /* See if our sequence struct is in this group's list */
+      SequenceGroup *group = (SequenceGroup*)(groupItem->data);
+      GList *foundItem = g_list_find(group->seqList, seqToFind);
+      
+      if (foundItem)
+        {
+          result.push_back(group);
+        }
+    }
+  
+  return result;
+}
+
+
+/* Return a list of all selected features of the given type. Result should be free'd by caller
+ * using g_list_free */
+GList *BlxContext::getSelectedSeqsByType(const BlxSequenceType type) const
+{
+  GList *result = NULL;
+
+  GList *list_item = selectedSeqs;
+  
+  for ( ; list_item; list_item = list_item->next)
+    {
+      BlxSequence *curSeq = (BlxSequence*)(list_item->data);
+      
+      if (curSeq->type == type)
+        {
+          result = g_list_append(result, curSeq);
+        }
+    }
+
+  return result;
+}
+
+
+/* If there is one (and only one) selected transcript then return it; otherwise return null. If
+ * num_transcripts is given then return the number of selected transcripts. */
+BlxSequence* BlxContext::getSelectedTranscript(int *num_transcripts) const
+{
+  BlxSequence *result = NULL;
+
+  GList *list_item = selectedSeqs;
+  int num_found = 0;
+  
+  for ( ; list_item; list_item = list_item->next)
+    {
+      BlxSequence *curSeq = (BlxSequence*)(list_item->data);
+      
+      if (curSeq->type == BLXSEQUENCE_TRANSCRIPT)
+        {
+          ++num_found;
+          
+          if (result)
+            {
+              /* Found more than one - don't know which to choose so return null */
+              result = NULL;
+
+              /* If we don't need to return the count, then exit now */
+              if (!num_transcripts)
+                break;
+            }
+          else
+            {
+              /* First one found: set the result. Continue to make sure there aren't any more */
+              result = curSeq;
+            }
+        }
+    }
+
+  if (num_transcripts)
+    *num_transcripts = num_found;
+
+  return result;
+}
+
+
+// Return a set of all the different sources for the selected features
+std::set<GQuark> BlxContext::getSelectedSources() const
+{
+  std::set<GQuark> result;
+
+  for (GList *item = selectedSeqs; item; item = item->next)
+    {
+      const BlxSequence* blxSeq = (const BlxSequence*)(item->data);
+      const char *source = blxSequenceGetSource(blxSeq);
+
+      if (source)
+        result.insert(g_quark_from_string(source));
+    }
+
+  return result;
+}
+
+
+// Return a list of all features (BlxSequences) in the given sources
+GList* BlxContext::getFeaturesInSourceList(std::set<GQuark> sources) const
+{
+  GList *result = NULL;
+
+  // For now simply loop through all features and check source (could probably improve efficiency
+  // by using featureLists and checking by type)
+  for (GList *item = matchSeqs; item; item = item->next)
+    {
+      BlxSequence* blxSeq = (BlxSequence*)(item->data);
+      const char *source = blxSequenceGetSource(blxSeq);
+      
+      if (sources.find(g_quark_from_string(source)) != sources.end())
+        result = g_list_append(result, blxSeq);
+    }
+
+  return result;
+}
+
+
+void BlxContext::highlightBoxCalcBorders(GdkRectangle *drawingRect, 
+                                         GdkRectangle *highlightRect,
+                                         const IntRange *fullRange,
+                                         const IntRange *highlightRange,
+                                         const int yPadding)
+{
+  if (drawingRect && highlightRect && fullRange && highlightRange)
+    {
+      /* Get the full range in dna coords */
+      IntRange fullDnaRange;
+      convertDisplayRangeToDnaRange(fullRange, seqType, numFrames, displayRev, &refSeqRange, &fullDnaRange);
+      
+      /* Get the highlight range in dna coords */
+      IntRange highlightDnaRange;
+      convertDisplayRangeToDnaRange(highlightRange, seqType, numFrames, displayRev, &refSeqRange, &highlightDnaRange);
+      
+      /* Get the x coords for the start and end of the detail view display range */
+      const int x1 = convertBaseIdxToRectPos(highlightDnaRange.min(true, displayRev), drawingRect, &fullDnaRange, TRUE, displayRev, TRUE);
+      const int x2 = convertBaseIdxToRectPos(highlightDnaRange.max(true, displayRev), drawingRect, &fullDnaRange, TRUE, displayRev, TRUE);
+      
+      highlightRect->x = min(x1, x2);
+      highlightRect->y = 0;
+
+      highlightRect->width = abs(x1 - x2);
+
+      highlightRect->height = 
+        drawingRect->height + 
+        roundNearest(charHeight() / 2.0) + 
+        yPadding + 
+        (2 * HIGHLIGHT_BOX_Y_PAD);
+    }
+}
diff --git a/blixemApp/blxcontext.hpp b/blixemApp/blxcontext.hpp
new file mode 100644
index 0000000..d04e328
--- /dev/null
+++ b/blixemApp/blxcontext.hpp
@@ -0,0 +1,186 @@
+/*  File: blxcontext.hpp
+ *  Author: Gemma Barson, 2016-04-06
+ *  Copyright (c) 2016 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: A Blixem context class, containing all status information 
+ *              required for a blixem instance.
+ *----------------------------------------------------------------------------
+ */
+
+#ifndef DEF_BLXCONTEXT_H
+#define DEF_BLXCONTEXT_H
+
+#include <gtk/gtk.h>
+#include <blixemApp/blixem_.hpp>
+#include <set>
+
+
+// We filter features based on different types; for now, just 'matches' and 'everything else'.
+enum class GroupType {NONE, MATCH, OTHER};
+
+
+class BlxContext
+{
+public:
+  // Constructors
+  BlxContext(CommandLineOptions *options,
+             const IntRange* const refSeqRange_in,
+             const IntRange* const fullDisplayRange_in,
+             const char *paddingSeq_in,
+             GArray* featureLists_in[],
+             GList *seqList_in,
+             GSList *supportedTypes_in,
+             GtkWidget *widget_in,
+             GtkWidget *statusBar_in,
+             const gboolean External_in,
+             GSList *styles_in);
+
+  ~BlxContext();
+
+  // Access
+  double charWidth() const;
+  double charHeight() const;
+  BlxStrand activeStrand() const;
+
+  // Query
+  bool isSeqSelected(const BlxSequence *seq) const;
+  SequenceGroup *getFirstSequenceGroup(const BlxSequence *seqToFind) const;
+  std::list<const SequenceGroup*> getSequenceGroups(const BlxSequence *seqToFind) const;
+  GList *getSelectedSeqsByType(const BlxSequenceType type) const;
+  BlxSequence* getSelectedTranscript(int *num_transcripts) const;
+  std::set<GQuark> getSelectedSources() const;
+  GList* getFeaturesInSourceList(std::set<GQuark> sources) const;
+
+  void highlightBoxCalcBorders(GdkRectangle *drawingRect, GdkRectangle *highlightRect, 
+                               const IntRange *fullRange, const IntRange *highlightRange, 
+                               const int yPadding);
+
+  // Modify
+  void saveSettingsFlags(GKeyFile *key_file);
+  void killAllSpawned();
+
+  void calculateDepth(const int numUnalignedBases);
+  int calculateTotalDepth(const IntRange *range, const BlxStrand strand);
+  int getDepth(const int coord, const char *base_char = NULL, const BlxStrand strand = BLXSTRAND_NONE);
+  int getDepthForCounter(const int coord, const DepthCounter counter);
+
+  bool filterGroupType(const GroupType groupType) const;
+  bool isGroupVisible(const SequenceGroup *group, const BlxSequenceType feature_type = BLXSEQUENCE_UNSET) const;
+  bool isGroupVisible(std::list<const SequenceGroup*> groups, const BlxSequenceType featureType) const;
+  SequenceGroup* getQuickGroup(const bool isFilter);
+  void destroySequenceGroup(SequenceGroup **seqGroup);
+  void deleteAllSequenceGroups();
+  void disableAllGroups();
+  void disableAllQuickGroups();
+
+
+  GtkWidget *statusBar;                   /* The Blixem window's status bar */
+    
+  char *refSeq;                           /* The reference sequence (always forward strand, always DNA sequence) */
+  const char *refSeqName;                 /* The name of the reference sequence */
+  IntRange refSeqRange;                   /* The range of the reference sequence */
+  IntRange fullDisplayRange;              /* The range of the displayed sequence */
+  int refSeqOffset;                       /* how much the coordinate system has been offset from the input coords */
+
+  BlxBlastMode blastMode;                 /* The type of blast matching that was used */
+  BlxSeqType seqType;                     /* The type of the match sequences, e.g. DNA or peptide */
+  char **geneticCode;                     /* The genetic code used to translate DNA <-> peptide */
+  int numFrames;                          /* The number of reading frames */
+
+  GArray *bulkFetchDefault;               /* The default method(s) of bulk fetching sequences (can be overridden by an MSPs data-type properties) */
+  GArray *userFetchDefault;               /* The default method(s) for interactively fetching individual sequences */
+  GArray *optionalFetchDefault;           /* The default method(s) for bulk fetching optional sequence data */
+  GHashTable *fetchMethods;               /* List of fetch methods, keyed on name as a GQuark */
+
+  char* dataset;                          /* the name of a dataset, e.g. 'human' */
+  gboolean optionalColumns;               /* load data for optional columns on startup to populate additional info like tissue-type */
+  gboolean saveTempFiles;                 /* whether to save temporary files created to store results of file conversions */
+
+  MSP *mspList;                           /* List of all MSPs. Obsolete - use featureLists array instead */
+  GArray* featureLists[BLXMSP_NUM_TYPES]; /* Array indexed by the BlxMspType enum. Each array entry contains a zero-terminated array of all the MSPs of that type. */
+    
+  GList *matchSeqs;                       /* List of all match sequences (as BlxSequences). */
+  GSList *supportedTypes;                 /* List of supported GFF types */
+  const char *paddingSeq;                 /* A sequence of padding characters, used if the real sequence could not be found. All padded MSPs
+                                           * use this same padding sequence - it is constructed to be long enough for the longest required seq. */
+    
+  gboolean displayRev;                    /* True if the display is reversed (i.e. coords decrease as you read from left to right, rather than increase). */
+  gboolean external;                      /* True if Blixem was run externally or false if it was run internally from another program */
+    
+  GList *selectedSeqs;                    /* A list of sequences that are selected (as BlxSequences) */
+  GList *sequenceGroups;                  /* A list of SequenceGroups */
+    
+  DotterRefType dotterRefType;            /* Whether to dotter a ref seq range or a transcript */
+  DotterMatchType dotterMatchType;        /* Saved type of match to call dotter on */
+  char *dotterAdhocSeq;                   /* Saves the sequence text the user pastes into the dotter dialog */
+  gboolean dotterHsps;                    /* Whether the dotter "HSPs only" option is on by default */
+  gboolean dotterSleep;                   /* Whether the sleep-dotter option is on by default */
+  int dotterStart;                        /* Start coord to call dotter on, or UNSET_INT to calculate automatically */
+  int dotterEnd;                          /* End coord to call dotter on, or UNSET_INT to calculate automatically */
+  int dotterZoom;                         /* Zoom param to call dotter with, if using manual params */
+    
+  GArray *defaultColors;                  /* Default colors used by Blixem */
+  gboolean usePrintColors;                /* Whether to use print colors (i.e. black and white) */
+  char *windowColor;                      /* If not null, background color for the window */
+
+  GList *columnList;                      /* A list of details about all the columns in the detail view (might have been better to use an array here but it's a short list so not important) */
+  GSList *styles;
+    
+  gboolean flags[BLXFLAG_NUM_FLAGS];              /* Array of all the flags the user can toggle. Indexed by the BlxFlags enum. */
+  GtkWidget *dialogList[BLXDIALOG_NUM_DIALOGS];   /* Array of all the persistent dialogs in the application */
+  GSList *spawnedProcesses;                       /* List of processes spawned by Blixem */
+  BlxModelId modelId;                             /* which tree model to use (i.e. normal or squashed) */
+  
+  /* This array holds the depth (num alignments) at each coord of the ref seq for
+   * different types of counter. For each counter there is an array the same lenth as the
+   * reference sequence. This could cause memory problems with a large region. Generally
+   * though the length of the reference sequence is not that great and we are more concerned with
+   * fast access as the user interacts with the display.*/
+  int *depthArray[DEPTHCOUNTER_NUM_ITEMS];
+  int minDepth;                           /* minimum value in the depthArray */
+  int maxDepth;                           /* maximum value in the depthArray */
+
+  long ipresolve;                         /* specify whether curl should use ipv4/ipv6 */
+  const char *cainfo;                     /* specify location of curl cainfo file */
+  bool fetch_debug;                       /* enable verbose debug output in fetch methods */
+
+private:
+  void createColors(GtkWidget *widget);
+  void initialiseFlags(CommandLineOptions *options);
+  void loadSettings();
+
+  double m_charWidth;
+  double m_charHeight;
+};
+
+
+#endif /* DEF_BLXCONTEXT_H */
diff --git a/blixemApp/blxdotter.cpp b/blixemApp/blxdotter.cpp
new file mode 100644
index 0000000..6fcd08a
--- /dev/null
+++ b/blixemApp/blxdotter.cpp
@@ -0,0 +1,2401 @@
+/*  File: blxdotter.c
+ *  Author: Gemma Barson, 2010-02-03
+ *  Copyright (c) 2010 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: See blxdotter.h
+ *----------------------------------------------------------------------------
+ */
+
+#include <blixemApp/blxdotter.hpp>
+#include <blixemApp/blxcontext.hpp>
+#include <blixemApp/blxwindow.hpp>
+#include <blixemApp/bigpicture.hpp>
+#include <blixemApp/detailview.hpp>
+#include <seqtoolsUtils/utilities.hpp>
+#include <seqtoolsUtils/blxmsp.hpp>
+#include <gbtools/gbtools.hpp>
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <algorithm>
+
+using namespace std;
+
+
+#define DEFAULT_DOTTER_RANGE_SELF	2000
+#define DEFAULT_WINDOW_WIDTH            500
+#define MAX_WINDOW_WIDTH_FRACTION       0.3
+
+typedef struct _DotterDialogData
+  {
+    GtkWidget *blxWindow;           /* pointer to the main blixem window */
+    GtkWidget *dialog;
+    GtkWidget *notebook;
+    guint notebookPage;             /* current notebook page */
+
+    GtkWidget *autoButton;          /* radio button for automatic dotter parameters */
+    GtkWidget *manualButton;        /* radio button for manual dotter parameters */
+    GtkWidget *transcriptButton;    /* radio button for dottering against transcript rather than
+                                     * reference sequence range */
+
+    GtkWidget *startEntry;          /* the text entry box on the dialog for the start coord */
+    GtkWidget *endEntry;            /* the text entry box on the dialog for the end coord */
+    GtkWidget *zoomEntry;           /* the text entry box on the dialog for the zoom value */
+    
+    DotterMatchType matchType;      /* whether to call dotter on the selected match, an adhoc seq,
+                                     * or the query seq versus itself */
+    DotterRefType refType;          /* whether to use the ref seq or a transcript seq */
+    gboolean hspsOnly;              /* whether to call dotter on HSPs only */
+    gboolean sleep;                 /* whether to sleep dotter on startup */
+    
+    GtkWidget *selectedButton;      /* the radio button for the use-selected-sequence option */
+    GtkWidget *adhocButton;         /* the radio button for the use-adhoc-sequence option */
+    GtkWidget *selfButton;          /* the radio button for the use-self option */
+
+    GtkWidget *adhocSeqText;       /* text entry buffer for pasting sequence to dotter against into */
+  } DotterDialogData;
+
+
+/* Error codes and domain */
+#define BLX_DOTTER_ERROR g_quark_from_string("Dotter")
+
+typedef enum {
+  BLX_DOTTER_ERROR_NO_SEQS,	      /* no sequences are selected */
+  BLX_DOTTER_ERROR_TOO_MANY_SEQS,     /* too many sequences are selected */
+  BLX_DOTTER_ERROR_INVALID_SEQ,       /* selected sequence(s) are invalid */
+  BLX_DOTTER_ERROR_NOT_FOUND,	      /* failed to find the sequence */
+  BLX_DOTTER_ERROR_NO_REF_SEQ,	      /* failed to find the query sequence segment */
+  BLX_DOTTER_ERROR_INTERNAL_SEQ,      /* using internally-stored sequence (because fetch failed) */
+  BLX_DOTTER_ERROR_NO_MATCHES,        /* there are no matches on the requested sequence */
+  BLX_DOTTER_ERROR_NO_SEQ_DATA,       /* the match sequence has no sequence data (e.g. if could not pfetch it) */
+  BLX_DOTTER_ERROR_INVALID_STRAND,    /* there are no match sequences on the correct strand */
+  BLX_DOTTER_ERROR_NO_EXE,            /* no dotter executable found */
+  BLX_DOTTER_ERROR_PIPE,	      /* error opening pipe */
+  BLX_DOTTER_ERROR_FORK,	      /* error forking process */
+  BLX_DOTTER_ERROR_NEGATED_COORD,     /* warning that an original coord was not in range so we negated it */
+  BLX_DOTTER_ERROR_OUT_OF_RANGE,      /* dotter coord was out of range */
+  BLX_DOTTER_ERROR_NO_TRANSCRIPT      /* tried to dotter vs a transcript but none (or multiple) selected */
+} BlxDotterError;
+
+
+/* Local function declarations */
+static gboolean	      getDotterRange(GtkWidget *blxWindow, DotterMatchType matchType, const DotterRefType refType, int *dotterStart, int *dotterEnd, int *dotterZoom, GError **error);
+static gboolean	      smartDotterRange(GtkWidget *blxWindow, int *dotter_start_out, int *dotter_end_out, GError **error);
+static gboolean	      callDotterOnSelf(DotterDialogData *dialogData, GError **error);
+static gboolean	      callDotterOnAdhocSeq(DotterDialogData *dialogData, GError **error);
+static char*          getSelectedSequenceDNA(const BlxSequence *selectedSeq, const BlxContext *bc, GError **error);
+static void           textGetSeqDetails(const char *text, char **sequence, char **sequenceName);
+static char*          getDotterTitle(const BlxContext *bc, const DotterMatchType matchType, const DotterRefType refType, const char *adhocSeq); 
+static char*          getDotterTitleAdhocSeq(const BlxContext *bc, const char *adhocSeq, const DotterRefType refType);
+static const char*    getDotterRefSeqName(const BlxContext *bc, const gboolean transcript);
+static gboolean       boundsCheckDotterCoord(int *coordIn, BlxContext *bc, GError **error);
+static int            getDisplayCoord(const int coordIn, BlxContext *bc);
+static char*          textViewGetText(GtkWidget *textView);
+
+
+/*******************************************************************
+ *                       Response callbacks                        *
+ *******************************************************************/
+
+/* Called when the user has hit a response button on the dotter settings dialog */
+static void onResponseDotterDialog(GtkDialog *dialog, gint responseId, gpointer data)
+{
+  gboolean destroy = TRUE;
+  DotterDialogData *dialogData = (DotterDialogData*)(data);
+  
+  GError *error = NULL;
+  
+  switch (responseId)
+    {
+      case GTK_RESPONSE_ACCEPT:
+        /* Only continue to call dotter if saving the values is successful */
+	if (widgetCallAllCallbacks(GTK_WIDGET(dialog), GINT_TO_POINTER(responseId)))
+          {
+            switch (dialogData->matchType)
+              {
+                default: /* fall through */
+                case BLXDOTTER_MATCH_SELECTED:
+                  {
+                    /* The 'transcript' flag indicates that we're dottering vs the selected
+                     * transcript rather than the reference sequence*/
+                    destroy = callDotterOnSelectedSeqs(dialogData->blxWindow, 
+                                                       dialogData->hspsOnly, 
+                                                       dialogData->sleep,
+                                                       dialogData->refType,
+                                                       &error);
+                    break;
+                  }
+                case BLXDOTTER_MATCH_ADHOC:
+                  destroy = callDotterOnAdhocSeq(dialogData, &error);
+                  break;
+                case BLXDOTTER_MATCH_SELF:
+                  destroy = callDotterOnSelf(dialogData, &error);
+                  break;
+              }
+          }
+        else
+          {
+            destroy = FALSE; /* there was an error, so leave the dialog open */
+          }
+        
+	break;
+	
+      case GTK_RESPONSE_APPLY:
+	widgetCallAllCallbacks(GTK_WIDGET(dialog), GINT_TO_POINTER(responseId));
+	destroy = FALSE;
+	break;
+	
+      default:
+	break;
+    };
+
+  /* If any errors were found, report them */
+  if (error)
+    {
+      prefixError(error, "Could not start Dotter. ");
+      reportAndClearIfError(&error, G_LOG_LEVEL_CRITICAL);
+    }
+
+  if (destroy)
+    {
+      /* The dialog is persistent so hide it rather than destroying it. */
+      gtk_widget_hide_all(GTK_WIDGET(dialog));
+    }
+}
+
+
+/* Callback to be called when the user clicks OK or Apply on the dotter
+ * dialog. It sets the dotter mode according to the toggle state of the 
+ * "auto" button. */
+static gboolean onSaveDotterMode(GtkWidget *button, const gint responseId, gpointer data)
+{
+  DotterDialogData *dialogData = (DotterDialogData*)data;
+  GtkWidget *blxWindow = dialogData->blxWindow;
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+  
+  bc->dotterRefType = dialogData->refType;
+
+  return TRUE;
+}
+
+
+/* Callback to be called when the user clicks OK or Apply on the dotter
+ * dialog. It sets the sequence we should dotter against to be the selected
+ * sequence if the button is active. */
+static gboolean onSaveDotterSelectedSeq(GtkWidget *button, const gint responseId, gpointer data)
+{
+  GtkWidget *blxWindow = GTK_WIDGET(data);
+  BlxContext *blxContext = blxWindowGetContext(blxWindow);
+
+  if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)))
+    blxContext->dotterMatchType = BLXDOTTER_MATCH_SELECTED;
+
+  return TRUE;
+}
+
+
+/* Callback to be called when the user clicks OK or Apply on the dotter
+ * dialog. It sets the sequence we should dotter against to be the adhoc
+ * sequence if the button is active. */
+static gboolean onSaveDotterAdhoc(GtkWidget *button, const gint responseId, gpointer data)
+{
+  GtkWidget *blxWindow = GTK_WIDGET(data);
+  BlxContext *blxContext = blxWindowGetContext(blxWindow);
+
+  if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)))
+    blxContext->dotterMatchType = BLXDOTTER_MATCH_ADHOC;
+
+  return TRUE;
+}
+
+
+/* Callback to be called when the user clicks OK or Apply on the dotter
+ * dialog. It saves the adhoc sequence text. */
+static gboolean onSaveDotterAdhocSeq(GtkWidget *textView, const gint responseId, gpointer data)
+{
+  DotterDialogData *dialogData = (DotterDialogData*)data;
+  BlxContext *blxContext = blxWindowGetContext(dialogData->blxWindow);
+
+  if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dialogData->adhocButton)))
+    {
+      if (blxContext->dotterAdhocSeq)
+        {
+          g_free(blxContext->dotterAdhocSeq);
+          blxContext->dotterAdhocSeq = NULL;
+        }
+
+      GtkTextBuffer *textBuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textView));
+
+      GtkTextIter start, end;
+      gtk_text_buffer_get_bounds(textBuffer, &start, &end);
+
+      blxContext->dotterAdhocSeq = gtk_text_buffer_get_text(textBuffer, &start, &end, TRUE);
+    }
+
+  return TRUE;
+}
+
+
+/* Callback to be called when the user clicks OK or Apply on the dotter
+ * dialog. It sets the sequence we should dotter against to be the 
+ * reference sequence if the button is active. */
+static gboolean onSaveDotterSelf(GtkWidget *button, const gint responseId, gpointer data)
+{
+  GtkWidget *blxWindow = GTK_WIDGET(data);
+  BlxContext *blxContext = blxWindowGetContext(blxWindow);
+
+  if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)))
+    blxContext->dotterMatchType = BLXDOTTER_MATCH_SELF;
+
+  return TRUE;
+}
+
+
+/* Callback to be called when the user clicks OK or Apply on the dotter
+ * dialog. It saves the state of the 'HSPs only' button. */
+static gboolean onSaveDotterHsps(GtkWidget *button, const gint responseId, gpointer data)
+{
+  GtkWidget *blxWindow = GTK_WIDGET(data);
+  BlxContext *blxContext = blxWindowGetContext(blxWindow);
+  blxContext->dotterHsps = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button));
+  return TRUE;
+}
+
+
+/* Callback to be called when the user clicks OK or Apply on the dotter
+ * dialog. It saves the state of the 'sleep' button. */
+static gboolean onSaveDotterSleep(GtkWidget *button, const gint responseId, gpointer data)
+{
+  GtkWidget *blxWindow = GTK_WIDGET(data);
+  BlxContext *blxContext = blxWindowGetContext(blxWindow);
+  blxContext->dotterSleep = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button));
+  return TRUE;
+}
+
+
+/* Callback to be called when the user clicks OK or Apply on the dotter
+ * dialog. It saves the start parameter that was entered (if manual dotter
+ * params are being used). */
+static gboolean onSaveDotterStart(GtkWidget *entry, const gint responseId, gpointer data)
+{
+  gboolean result = TRUE;
+
+  DotterDialogData *dialogData = (DotterDialogData*)data;
+  BlxContext *bc = blxWindowGetContext(dialogData->blxWindow);
+
+  /* Only save the parameter if we are using manual parameters */
+  if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dialogData->manualButton)))
+    {
+      int newVal = atoi(gtk_entry_get_text(GTK_ENTRY(entry)));
+      GError *error = NULL;
+      
+      result = boundsCheckDotterCoord(&newVal, bc, &error);
+      
+      if (result)
+        {
+          bc->dotterStart = newVal;
+          reportAndClearIfError(&error, G_LOG_LEVEL_WARNING);
+        }
+      else
+        {
+          postfixError(error, "Value not saved.");
+          reportAndClearIfError(&error, G_LOG_LEVEL_CRITICAL);
+        }
+    }  
+  
+  return result;
+}
+
+static gboolean onSaveDotterEnd(GtkWidget *entry, const gint responseId, gpointer data)
+{
+  gboolean result = TRUE;
+  
+  DotterDialogData *dialogData = (DotterDialogData*)data;
+  BlxContext *bc = blxWindowGetContext(dialogData->blxWindow);
+  
+  /* Only save the parameter if we are using manual parameters */
+  if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dialogData->manualButton)))
+    {
+      int newVal = atoi(gtk_entry_get_text(GTK_ENTRY(entry)));
+
+      GError *error = NULL;
+      
+      result = boundsCheckDotterCoord(&newVal, bc, &error);
+      
+      if (result)
+        {
+          bc->dotterEnd = newVal;
+          reportAndClearIfError(&error, G_LOG_LEVEL_WARNING);
+        }
+      else
+        {
+          postfixError(error, "Value not saved.");
+          reportAndClearIfError(&error, G_LOG_LEVEL_CRITICAL);
+        }
+    }  
+  
+  return result;
+}
+
+static gboolean onSaveDotterZoom(GtkWidget *entry, const gint responseId, gpointer data)
+{
+  gboolean result = TRUE;
+  
+  DotterDialogData *dialogData = (DotterDialogData*)data;
+  BlxContext *blxContext = blxWindowGetContext(dialogData->blxWindow);
+  
+  /* Only save the parameter if we are using manual parameters */
+  if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dialogData->manualButton)))
+    {
+      const int newVal = atoi(gtk_entry_get_text(GTK_ENTRY(entry)));
+      
+      if (newVal < 0)
+        {
+          result = FALSE;
+          g_critical("Zoom must be greater than zero (or equal to zero to use auto zoom)");
+        }
+      else
+        {
+          blxContext->dotterZoom = newVal;
+        }
+    }  
+  
+  return result;
+}
+
+
+/*******************************************************************
+ *                            Events                               *
+ *******************************************************************/
+
+/* Called when the user changes the page on the notebook. Caches the page so we can reinstate it
+ * when we refresh the dialog */
+static gboolean onChangeCurrentPage(GtkNotebook *notebook, GtkWidget *page, gint pageNum, gpointer data)
+{
+  DotterDialogData *dialogData = (DotterDialogData*)data;
+
+  dialogData->notebookPage = pageNum;
+
+  return TRUE;
+}
+
+
+/* Called when the 'last saved' button in the dotter dialog is clicked. Populates
+ * the coord boxes with the start/end coords that were last saved */
+static void onLastSavedButtonClicked(GtkWidget *button, gpointer data)
+{
+  DotterDialogData *dialogData = (DotterDialogData*)data;
+  BlxContext *bc = blxWindowGetContext(dialogData->blxWindow);
+  
+  char *startString = convertIntToString(getDisplayCoord(bc->dotterStart, bc));
+  char *endString = convertIntToString(getDisplayCoord(bc->dotterEnd, bc));
+  char *zoomString = convertIntToString(bc->dotterZoom);
+  
+  gtk_entry_set_text(GTK_ENTRY(dialogData->startEntry), startString);
+  gtk_entry_set_text(GTK_ENTRY(dialogData->endEntry), endString);
+  gtk_entry_set_text(GTK_ENTRY(dialogData->zoomEntry), zoomString);
+  
+  /* Change the mode to manual */
+  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dialogData->manualButton), TRUE);
+}
+
+
+/* Called when the 'full range' button in the dotter dialog is clicked. Populates
+ * the coord boxes with the start/end of the full ref seq range */
+static void onFullRangeButtonClicked(GtkWidget *button, gpointer data)
+{
+  DotterDialogData *dialogData = (DotterDialogData*)data;
+  BlxContext *bc = blxWindowGetContext(dialogData->blxWindow);
+  
+  const int startCoord = (bc->displayRev ? bc->refSeqRange.max() : bc->refSeqRange.min());
+  const int endCoord = (bc->displayRev ? bc->refSeqRange.min() : bc->refSeqRange.max());
+  
+  char *startString = convertIntToString(getDisplayCoord(startCoord, bc));
+  char *endString = convertIntToString(getDisplayCoord(endCoord, bc));
+  
+  gtk_entry_set_text(GTK_ENTRY(dialogData->startEntry), startString);
+  gtk_entry_set_text(GTK_ENTRY(dialogData->endEntry), endString);
+  
+  g_free(startString);
+  g_free(endString);
+  
+  /* Change the mode to manual */
+  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dialogData->manualButton), TRUE);
+}
+
+
+/* Called when the 'big picture range' button in the dotter dialog is clicked. Populates
+ * the coord boxes with the start/end of the big picture's current display range */
+static void onBpRangeButtonClicked(GtkWidget *button, gpointer data)
+{
+  DotterDialogData *dialogData = (DotterDialogData*)data;
+  BlxContext *bc = blxWindowGetContext(dialogData->blxWindow);
+  GtkWidget *bigPicture = blxWindowGetBigPicture(dialogData->blxWindow);
+  const IntRange* const displayRange = bigPictureGetDisplayRange(bigPicture);
+
+  int qStart = convertDisplayIdxToDnaIdx(displayRange->min(), bc->seqType, 1, 1, bc->numFrames, bc->displayRev, &bc->refSeqRange);
+  int qEnd = convertDisplayIdxToDnaIdx(displayRange->max(), bc->seqType, bc->numFrames, bc->numFrames, bc->numFrames, bc->displayRev, &bc->refSeqRange);
+
+  boundsLimitValue(&qStart, &bc->refSeqRange);
+  boundsLimitValue(&qEnd, &bc->refSeqRange);
+  
+  char *startString = convertIntToString(getDisplayCoord(qStart, bc));
+  char *endString = convertIntToString(getDisplayCoord(qEnd, bc));
+  
+  gtk_entry_set_text(GTK_ENTRY(dialogData->startEntry), startString);
+  gtk_entry_set_text(GTK_ENTRY(dialogData->endEntry), endString);
+  
+  g_free(startString);
+  g_free(endString);
+  
+  /* Change the mode to manual */
+  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dialogData->manualButton), TRUE);
+}
+
+
+/* Called when the user enters in the adhoc-sequence text entry box. Sets the adhoc-sequence
+ * toggle button to be the active one and updates the dialog title. */
+static gboolean onAdhocSeqEntered(GtkWidget *widget, GdkEvent *event, gpointer data)
+{
+  DotterDialogData *dialogData = (DotterDialogData*)data;
+  BlxContext *bc = blxWindowGetContext(dialogData->blxWindow);
+
+  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dialogData->adhocButton), TRUE);
+
+  char *adhocSeq = textViewGetText(dialogData->adhocSeqText);
+  char *title = getDotterTitleAdhocSeq(bc, adhocSeq, dialogData->refType);
+
+  gtk_window_set_title(GTK_WINDOW(dialogData->dialog), title);
+
+  g_free(title);
+  g_free(adhocSeq);
+
+  /* Need to force a redraw of the dialog to get the new title */
+  /* gb10: queue_draw doesn't work, not sure how we would do this */
+  //gtk_widget_queue_draw(dialogData->dialog);
+  //
+  //while (gtk_events_pending())
+  //  gtk_main_iteration();
+
+  return FALSE; /* allow other handlers to continue */
+}
+
+
+/* Called when the auto/manual/transcript radio button is toggled to select where to get the
+ * ref seq coords from. */
+static void onRefTypeToggled(GtkWidget *button, gpointer data)
+{
+  DotterDialogData *dialogData = (DotterDialogData*)data;
+  BlxContext *bc = blxWindowGetContext(dialogData->blxWindow);
+  
+  char *title = getDotterTitle(bc, dialogData->matchType, dialogData->refType, bc->dotterAdhocSeq);
+  gtk_window_set_title(GTK_WINDOW(dialogData->dialog), title);
+  g_free(title);
+
+  if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dialogData->manualButton)))
+    {
+      dialogData->refType = BLXDOTTER_REF_MANUAL;
+
+      /* Manual coords. Leave values as they are but unlock the boxes so they can be edited. */
+      gtk_widget_set_sensitive(dialogData->startEntry, TRUE);
+      gtk_widget_set_sensitive(dialogData->endEntry, TRUE);
+      gtk_widget_set_sensitive(dialogData->zoomEntry, TRUE);
+    }
+  else
+    {
+      if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dialogData->transcriptButton)))
+        dialogData->refType = BLXDOTTER_REF_TRANSCRIPT;
+      else
+        dialogData->refType = BLXDOTTER_REF_AUTO;
+
+      /* Recalculate auto start/end in case user has selected a different sequence */
+      int autoStart = UNSET_INT, autoEnd = UNSET_INT;
+      getDotterRange(dialogData->blxWindow, dialogData->matchType, dialogData->refType,
+                     &autoStart, &autoEnd, NULL, NULL);
+
+      if (autoStart == UNSET_INT && autoEnd == UNSET_INT)
+        {
+          autoStart = bc->displayRev ? bc->refSeqRange.max() : bc->refSeqRange.min();
+          autoEnd = bc->displayRev ? bc->refSeqRange.min() : bc->refSeqRange.max();
+        }
+      
+      char *startString = convertIntToString(getDisplayCoord(autoStart, bc));
+      char *endString = convertIntToString(getDisplayCoord(autoEnd, bc));
+      char *zoomString = convertIntToString(bc->dotterZoom);
+
+      /* Display the new values */
+      gtk_entry_set_text(GTK_ENTRY(dialogData->startEntry), startString);
+      gtk_entry_set_text(GTK_ENTRY(dialogData->endEntry), endString);
+      gtk_entry_set_text(GTK_ENTRY(dialogData->zoomEntry), zoomString);
+      
+      g_free(startString);
+      g_free(endString);
+      g_free(zoomString);
+      
+      /* Lock out the entry boxes so they cannot be edited */
+      gtk_widget_set_sensitive(dialogData->startEntry, FALSE);
+      gtk_widget_set_sensitive(dialogData->endEntry, FALSE);
+      gtk_widget_set_sensitive(dialogData->zoomEntry, FALSE);
+    }
+}
+
+
+/* Called when the user toggles what type of match sequence to dotter against */
+static void onMatchTypeToggled(GtkWidget *button, gpointer data)
+{
+  DotterDialogData *dialogData = (DotterDialogData*)data;
+  BlxContext *bc = blxWindowGetContext(dialogData->blxWindow);
+  
+  if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dialogData->selfButton)))
+    {
+      dialogData->matchType = BLXDOTTER_MATCH_SELF;
+    }
+  else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dialogData->adhocButton)))
+    {
+      dialogData->matchType = BLXDOTTER_MATCH_ADHOC;
+      gtk_widget_grab_focus(dialogData->adhocSeqText);
+    }
+  else
+    {
+      dialogData->matchType = BLXDOTTER_MATCH_SELECTED;
+    }
+
+  /* Update the title of the dialog box to reflect the sequence we're dottering */
+  char *adhocSeq = textViewGetText(dialogData->adhocSeqText);
+  char *title = getDotterTitle(bc, dialogData->matchType, dialogData->refType, adhocSeq);
+
+  gtk_window_set_title(GTK_WINDOW(dialogData->dialog), title);
+
+  g_free(title);
+  g_free(adhocSeq);
+
+  /* If using auto coords, recalculate them */ 
+  if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dialogData->autoButton)))
+    {
+      int autoStart = UNSET_INT, autoEnd = UNSET_INT;
+      getDotterRange(dialogData->blxWindow, dialogData->matchType, dialogData->refType, &autoStart, &autoEnd, NULL, NULL);
+
+      if (autoStart == UNSET_INT)
+        autoStart = bc->displayRev ? bc->refSeqRange.max() : bc->refSeqRange.min();
+  
+      if (autoEnd == UNSET_INT)
+        autoEnd = bc->displayRev ? bc->refSeqRange.min() : bc->refSeqRange.max();
+  
+      char *startString = convertIntToString(getDisplayCoord(autoStart, bc));
+      char *endString = convertIntToString(getDisplayCoord(autoEnd, bc));
+      char *zoomString = convertIntToString(bc->dotterZoom);
+
+      /* Display the new values */
+      gtk_entry_set_text(GTK_ENTRY(dialogData->startEntry), startString);
+      gtk_entry_set_text(GTK_ENTRY(dialogData->endEntry), endString);
+      gtk_entry_set_text(GTK_ENTRY(dialogData->zoomEntry), zoomString);
+  
+      g_free(startString);
+      g_free(endString);
+      g_free(zoomString);
+    }
+}
+
+
+/* Called when the "call on self" button is toggled on the dotter dialog */
+static void onHspsButtonToggled(GtkWidget *button, gpointer data)
+{
+  DotterDialogData *dialogData = (DotterDialogData*)data;
+  dialogData->hspsOnly = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button));
+}
+
+
+/* Called when the "sleep" button is toggled on the dotter dialog */
+static void onSleepButtonToggled(GtkWidget *button, gpointer data)
+{
+  DotterDialogData *dialogData = (DotterDialogData*)data;
+  dialogData->sleep = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button));
+}
+
+
+static void onDestroyDotterDialog(GtkWidget *dialog, gpointer data)
+{
+  DotterDialogData *dialogData = (DotterDialogData*)data;
+  
+  if (dialogData)
+    {
+      delete dialogData;
+    }
+}
+
+
+/*******************************************************************
+ *                      Creating the dialog                        *
+ *******************************************************************/
+
+static GtkWidget* createTextEntry(GtkTable *table, 
+				  int col, 
+				  int row, 
+				  const int xpad, 
+				  const int ypad, 
+				  const char *title,
+				  BlxResponseCallback callbackFunc,
+                                  gpointer callbackData,
+				  const int initValue)
+{
+  /* Create a label in the given column */
+  GtkWidget *label = gtk_label_new(title);
+  gtk_label_set_use_markup(GTK_LABEL(label), TRUE);
+  gtk_table_attach(table, label, col, col + 1, row, row + 1, GTK_SHRINK, GTK_SHRINK, xpad, ypad);
+  
+  /* Create the text entry widget in the next column in the same row */
+  ++col;
+  GtkWidget *entry = gtk_entry_new();
+  gtk_table_attach(table, entry, col, col + 1, row, row + 1, GTK_SHRINK, GTK_SHRINK, xpad, ypad);
+  gtk_entry_set_activates_default(GTK_ENTRY(entry), TRUE);
+  
+  /* Set the initial text */
+  char *initText = convertIntToString(initValue);
+  gtk_entry_set_text(GTK_ENTRY(entry), initText);
+  g_free(initText);
+  
+  /* Add the callback data. This specifies what callback to use when the user hits OK or Apply on the dialog. */
+  widgetSetCallbackData(entry, callbackFunc, callbackData);
+  
+  return entry;
+}
+
+
+/* Set the initial size of the dotter window. We add a bit of width if possible because the title
+ * can be quite long and it updates dynamically (and may get longer) with user-selected options. */
+static void dotterDialogSetDefaultSize(GtkWidget *dialog, GtkWidget *blxWindow)
+{
+  /* We'll set the default window width to a preferred default, but make it smaller
+   * if it exceeds a maximum percentage of the screen size. Just use the height 
+   * allocated for the widgets. */
+  int maxWidth = 300;
+  gbtools::GUIGetTrueMonitorSizeFraction(dialog, MAX_WINDOW_WIDTH_FRACTION, 1, &maxWidth, NULL);
+  
+  const int width = min(DEFAULT_WINDOW_WIDTH, maxWidth);
+
+  gtk_window_set_default_size(GTK_WINDOW(dialog), width, -1);
+}
+
+
+static void createCoordsTab(DotterDialogData *dialogData, const int spacing)
+{
+  BlxContext *bc = blxWindowGetContext(dialogData->blxWindow);
+
+  /* Put everything in a table */
+  int numRows = 5;
+  int numCols = 3;
+  int row = 0;
+  int col = 0;
+  int xpad = spacing;
+  int ypad = spacing;
+
+  GtkTable *table = GTK_TABLE(gtk_table_new(numRows, numCols, FALSE));
+
+  /* Append the table as a new tab to the notebook */
+  gtk_notebook_append_page(GTK_NOTEBOOK(dialogData->notebook), GTK_WIDGET(table), gtk_label_new("Reference sequence"));
+
+  /* Radio buttons for auto/manual params. */
+  dialogData->autoButton = gtk_radio_button_new_with_mnemonic(NULL, "_Auto");
+  widgetSetCallbackData(dialogData->autoButton, onSaveDotterMode, dialogData);
+  gtk_widget_set_tooltip_text(dialogData->autoButton, "Dotter against the visible big picture range");
+  gtk_table_attach(table, dialogData->autoButton, 0, 1, row, row + 1, GTK_FILL, GTK_SHRINK, xpad, ypad);
+  ++row;
+
+  dialogData->manualButton = gtk_radio_button_new_with_mnemonic_from_widget(GTK_RADIO_BUTTON(dialogData->autoButton), "_Manual");
+  widgetSetCallbackData(dialogData->manualButton, onSaveDotterMode, dialogData);
+  gtk_widget_set_tooltip_text(dialogData->manualButton, "Dotter against manually-entered coords. Once saved, the same coords will be used until you change them manually again.");
+  gtk_table_attach(table, dialogData->manualButton, col, col + 1, row, row + 1, GTK_FILL, GTK_SHRINK, xpad, ypad);
+  ++row;
+
+  dialogData->transcriptButton = gtk_radio_button_new_with_mnemonic_from_widget(GTK_RADIO_BUTTON(dialogData->autoButton), "_Transcript");
+  widgetSetCallbackData(dialogData->transcriptButton, onSaveDotterMode, dialogData);
+  gtk_widget_set_tooltip_text(dialogData->transcriptButton, "Dotter against the currently selected transcript Note that if you are dottering against a selected sequence then you need to select both the sequence and the transcript. Hold Ctrl while you left-click to select multiple features.");
+  gtk_table_attach(table, dialogData->transcriptButton, col, col + 1, row, row + 1, GTK_FILL, GTK_SHRINK, xpad, ypad);
+  ++row;
+
+  /* Buttons that the user can click to populate the parameter boxes with certain values */
+  GtkWidget *lastSavedButton = gtk_button_new_with_mnemonic("_Last saved ->");
+  gtk_widget_set_tooltip_text(lastSavedButton, "Put the last-saved coords in the manual coords boxes");
+  gtk_table_attach(table, lastSavedButton, col, col + 1, row, row + 1, GTK_FILL, GTK_SHRINK, xpad, ypad);
+  ++row;
+
+  GtkWidget *fullRangeButton = gtk_button_new_with_mnemonic("_Full range ->");
+  gtk_widget_set_tooltip_text(fullRangeButton, "Put the full range in the manual coords boxes");
+  gtk_table_attach(table, fullRangeButton, col, col + 1, row, row + 1, GTK_FILL, GTK_SHRINK, xpad, ypad);
+  ++row;
+
+  GtkWidget *bpRangeButton = gtk_button_new_with_mnemonic("_Big picture range ->");
+  gtk_widget_set_tooltip_text(bpRangeButton, "Put the big picture range in the manual coords boxes");
+  gtk_table_attach(table, bpRangeButton, col, col + 1, row, row + 1, GTK_FILL, GTK_SHRINK, xpad, ypad);
+  ++row;
+
+  /* Disable last-saved button if no saved values exist */
+  if (bc->dotterStart == UNSET_INT)
+    {
+      gtk_widget_set_sensitive(lastSavedButton, FALSE);
+    }
+
+  /* Create the text entry boxes for the dotter parameters */
+  ++col;
+  row = 0;
+
+  dialogData->startEntry = createTextEntry(table, col, row, xpad, ypad, "<i>Start:</i>", onSaveDotterStart, 
+                                           dialogData, getDisplayCoord(bc->dotterStart, bc));
+  ++row;
+  dialogData->endEntry = createTextEntry(table, col, row, xpad, ypad, "<i>End:</i>", onSaveDotterEnd, 
+                                         dialogData, getDisplayCoord(bc->dotterEnd, bc));
+  ++row;
+  dialogData->zoomEntry = createTextEntry(table, col, row, xpad, ypad, "<i>Zoom:</i>", onSaveDotterZoom, 
+                                          dialogData, bc->dotterZoom);
+  ++row;
+
+  gtk_widget_set_tooltip_text(dialogData->zoomEntry, "The level of zoom to open Dotter with (higher values zoom in)");
+
+  /* There is an issue if the user selects a different sequence while the dotter dialog
+   * is still open: the auto range does not update automatically for the new sequence. To 
+   * mitigate this, connect the 'clicked' signal so that they can
+   * click on the 'auto' toggle button and have it refresh, even if that button is already selected.*/
+  g_signal_connect(G_OBJECT(dialogData->autoButton),      "clicked", G_CALLBACK(onRefTypeToggled), dialogData);
+  g_signal_connect(G_OBJECT(dialogData->manualButton),    "clicked", G_CALLBACK(onRefTypeToggled), dialogData);
+  g_signal_connect(G_OBJECT(dialogData->transcriptButton),"clicked", G_CALLBACK(onRefTypeToggled), dialogData);
+
+  g_signal_connect(G_OBJECT(lastSavedButton), "clicked", G_CALLBACK(onLastSavedButtonClicked), dialogData);
+  g_signal_connect(G_OBJECT(fullRangeButton), "clicked", G_CALLBACK(onFullRangeButtonClicked), dialogData);
+  g_signal_connect(G_OBJECT(bpRangeButton),   "clicked", G_CALLBACK(onBpRangeButtonClicked), dialogData);
+
+  /* Set the initial state of the toggle buttons and entry widgets */
+  switch (dialogData->refType)
+    {
+      case BLXDOTTER_REF_AUTO:
+        /* unset and then set to force callback to be called to set the auto coords */
+        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dialogData->transcriptButton), TRUE);
+        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dialogData->autoButton), TRUE);
+        break;
+      case BLXDOTTER_REF_MANUAL:
+        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dialogData->manualButton), TRUE);
+        break;
+      case BLXDOTTER_REF_TRANSCRIPT:
+        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dialogData->transcriptButton), TRUE);
+        break;
+    }
+}
+
+
+static void createSequenceTab(DotterDialogData *dialogData, const int spacing)
+{
+  GtkWidget *blxWindow = dialogData->blxWindow;
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+
+  /* Put everything in a table */
+  int numRows = 5;
+  int numCols = 3;
+  int row = 0;
+  int col = 0;
+  int xpad = spacing;
+  int ypad = spacing;
+
+  GtkTable *table = GTK_TABLE(gtk_table_new(numRows, numCols, FALSE));
+
+  /* Append the box as a new tab to the notebook */
+  gtk_notebook_append_page(GTK_NOTEBOOK(dialogData->notebook), GTK_WIDGET(table), gtk_label_new("Match sequence"));
+
+  /* Create radio buttons to choose whether to dotter against the selected match sequence, a
+   * manually entered adhoc sequence, or the reference sequence against itself. */
+  GtkBox *vbox = GTK_BOX(gtk_vbox_new(FALSE, spacing));
+  gtk_table_attach(table, GTK_WIDGET(vbox), col, col + 1, row, row + 2, GTK_FILL, GTK_FILL, xpad, ypad);
+
+  dialogData->selectedButton = gtk_radio_button_new_with_mnemonic(NULL, "_Selected match(es)");
+  gtk_widget_set_tooltip_text(dialogData->selectedButton, "Dotter against the selected match sequence");
+  widgetSetCallbackData(dialogData->selectedButton, onSaveDotterSelectedSeq, blxWindow);
+  gtk_box_pack_start(vbox, dialogData->selectedButton, FALSE, FALSE, spacing);
+
+  dialogData->selfButton = gtk_radio_button_new_with_mnemonic_from_widget(GTK_RADIO_BUTTON(dialogData->selectedButton), "Sel_f");
+  gtk_widget_set_tooltip_text(dialogData->selfButton, "Dotter the reference sequence against itself");
+  widgetSetCallbackData(dialogData->selfButton, onSaveDotterSelf, blxWindow);
+  gtk_box_pack_start(vbox, dialogData->selfButton, FALSE, FALSE, spacing);
+
+  ++col;
+  row = 0;
+  dialogData->adhocButton = gtk_radio_button_new_with_mnemonic_from_widget(GTK_RADIO_BUTTON(dialogData->selectedButton), "_Enter adhoc sequence");
+  gtk_widget_set_tooltip_text(dialogData->adhocButton, "Dotter against a manually entered sequence. This can be in raw or FASTA format.");
+  widgetSetCallbackData(dialogData->adhocButton, onSaveDotterAdhoc, blxWindow);
+  gtk_table_attach(table, dialogData->adhocButton, col, col + 1, row, row + 1, GTK_FILL, GTK_SHRINK, xpad, ypad);
+  ++row;
+
+  GtkTextBuffer *textBuffer = gtk_text_buffer_new(gtk_text_tag_table_new());
+  if (bc->dotterAdhocSeq)
+    gtk_text_buffer_set_text(textBuffer, bc->dotterAdhocSeq, -1);
+
+  dialogData->adhocSeqText = gtk_text_view_new_with_buffer(GTK_TEXT_BUFFER(textBuffer));
+  widgetSetCallbackData(dialogData->adhocSeqText, onSaveDotterAdhocSeq, dialogData);
+
+  const int numLines = 4;
+  const int charHeight = getTextHeight(dialogData->adhocSeqText, "A");
+  gtk_widget_set_size_request(dialogData->adhocSeqText, -1, roundNearest(charHeight * numLines));
+
+  GtkWidget *scrollWin = gtk_scrolled_window_new(NULL, NULL);
+  gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollWin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+  GtkWidget *frame = gtk_frame_new(NULL);
+  gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN);
+  gtk_container_add(GTK_CONTAINER(scrollWin), dialogData->adhocSeqText);
+  gtk_container_add(GTK_CONTAINER(frame), scrollWin);
+
+  gtk_table_attach(table, frame, col, col + 1, row, row + 1, 
+                   (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), xpad, ypad);
+  ++row;
+
+
+  /* Connect signals */
+  g_signal_connect(G_OBJECT(dialogData->selectedButton),  "clicked", G_CALLBACK(onMatchTypeToggled), dialogData);
+  g_signal_connect(G_OBJECT(dialogData->adhocButton),    "clicked", G_CALLBACK(onMatchTypeToggled), dialogData);
+  g_signal_connect(G_OBJECT(dialogData->selfButton),      "clicked", G_CALLBACK(onMatchTypeToggled), dialogData);
+
+  /* Add a callback to activate the adhocButton toggle button when the user enters some text... */
+  g_signal_connect(G_OBJECT(dialogData->adhocSeqText), "focus-in-event", G_CALLBACK(onAdhocSeqEntered), dialogData);
+
+  /* Set the initial state of the toggle buttons (unset it and then set it to
+   * force the callback to be called) */
+  switch (dialogData->matchType)
+    {
+      default: /* fall through */
+      case BLXDOTTER_MATCH_SELECTED:
+        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dialogData->selectedButton), TRUE);
+        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dialogData->selfButton), FALSE);
+        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dialogData->adhocButton), FALSE);
+        break;
+     
+      case BLXDOTTER_MATCH_SELF:
+        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dialogData->selectedButton), FALSE);
+        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dialogData->selfButton), TRUE);
+        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dialogData->adhocButton), FALSE);
+        break;
+
+      case BLXDOTTER_MATCH_ADHOC:
+        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dialogData->selectedButton), FALSE);
+        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dialogData->selfButton), FALSE);
+        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dialogData->adhocButton), TRUE);
+        break;
+    }
+}
+
+
+static void createOptionsTab(DotterDialogData *dialogData, const int spacing)
+{
+  BlxContext *bc = blxWindowGetContext(dialogData->blxWindow);
+
+  GtkBox *vbox = GTK_BOX(gtk_vbox_new(FALSE, 0));
+
+  /* Append the box as a new tab to the notebook */
+  gtk_notebook_append_page(GTK_NOTEBOOK(dialogData->notebook), GTK_WIDGET(vbox), gtk_label_new("Options"));
+
+  /* Add a tick box to set hsps-only */
+  GtkWidget *hspsButton = gtk_check_button_new_with_mnemonic("_HSPs only");
+  gtk_widget_set_tooltip_text(hspsButton, "Start dotter showing high-scoring pairs only");
+  gtk_box_pack_start(vbox, hspsButton, FALSE, FALSE, spacing);
+  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(hspsButton), bc->dotterHsps);
+  widgetSetCallbackData(hspsButton, onSaveDotterHsps, dialogData->blxWindow);
+
+  /* Add a tick box to set dotter sleep on startup (for debugging) */
+  GtkWidget *sleepButton = gtk_check_button_new_with_mnemonic("_Sleep on startup");
+  gtk_widget_set_tooltip_text(sleepButton, "Sleep dotter for a short period on startup (for debugging)");
+  gtk_box_pack_start(vbox, sleepButton, FALSE, FALSE, spacing);
+  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(sleepButton), bc->dotterSleep);
+  widgetSetCallbackData(sleepButton, onSaveDotterSleep, dialogData->blxWindow);
+  
+  g_signal_connect(G_OBJECT(hspsButton), "toggled", G_CALLBACK(onHspsButtonToggled), dialogData);
+  g_signal_connect(G_OBJECT(sleepButton), "toggled", G_CALLBACK(onSleepButtonToggled), dialogData);
+}
+
+
+/* First time round, create the dotter dialog. Subsequent calls re-use the same dialog but clear
+ * the contents ready to re-populate it. If resetData is true, reset entries to last-saved values */
+static GtkWidget* getOrCreateDotterDialog(GtkWidget *blxWindow, 
+                                          const gboolean resetValues,
+                                          DotterDialogData **dialogData_inout)
+{
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+  const BlxDialogId dialogId = BLXDIALOG_DOTTER;
+  GtkWidget *dialog = getPersistentDialog(bc->dialogList, dialogId);
+  DotterDialogData *dialogData = *dialogData_inout;
+  gboolean createContent = FALSE;
+  
+  if (!dialog)
+    {
+      createContent = TRUE;
+
+      dialog = gtk_dialog_new_with_buttons(NULL, 
+                                           GTK_WINDOW(blxWindow), 
+                                           GTK_DIALOG_DESTROY_WITH_PARENT,
+                                           GTK_STOCK_CANCEL,
+                                           GTK_RESPONSE_REJECT,
+                                           GTK_STOCK_SAVE,
+                                           GTK_RESPONSE_APPLY,
+                                           GTK_STOCK_EXECUTE,
+                                           GTK_RESPONSE_ACCEPT,
+                                           NULL);
+
+      /* These calls are required to make the dialog persistent... */
+      addPersistentDialog(bc->dialogList, dialogId, dialog);
+      g_signal_connect(dialog, "delete-event", G_CALLBACK(gtk_widget_hide_on_delete), NULL);
+      dotterDialogSetDefaultSize(dialog, blxWindow);
+
+      /* Create the dialog data struct first time round, but re-populate it each time. Create 
+       * a destructor function that will free the struct. */
+      *dialogData_inout = new DotterDialogData;
+      dialogData = *dialogData_inout;
+      dialogData->blxWindow = blxWindow;
+      dialogData->notebookPage = 0;
+      dialogData->dialog = dialog;
+      dialogData->matchType = bc->dotterMatchType;
+      dialogData->refType = bc->dotterRefType;
+      dialogData->hspsOnly = bc->dotterHsps;
+      dialogData->sleep = bc->dotterSleep;
+      dialogData->autoButton = NULL;
+      dialogData->manualButton = NULL;
+      dialogData->transcriptButton = NULL;
+      dialogData->startEntry = NULL;
+      dialogData->endEntry = NULL;
+      dialogData->zoomEntry = NULL;
+      dialogData->adhocSeqText = NULL;
+
+      g_signal_connect(G_OBJECT(dialog), "destroy", G_CALLBACK(onDestroyDotterDialog), dialogData);
+      g_signal_connect(dialog, "response", G_CALLBACK(onResponseDotterDialog), dialogData);
+    }
+  else if (resetValues)
+    {
+      /* Refresh the dialog by clearing its contents an re-creating it */
+      createContent = TRUE;
+      dialogClearContentArea(GTK_DIALOG(dialog));      
+
+      /* Reset to last-saved values */
+      dialogData->matchType = bc->dotterMatchType;
+      dialogData->refType = bc->dotterRefType;
+      dialogData->hspsOnly = bc->dotterHsps;
+      dialogData->sleep = bc->dotterSleep;
+    }
+  
+  if (createContent)
+    {
+      /* Create the dialog content */
+      GtkContainer *contentArea = GTK_CONTAINER(GTK_DIALOG(dialog)->vbox);
+      gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT);
+      const int spacing = 4;
+
+      /* Create the dialog content */
+      dialogData->notebook = gtk_notebook_new();
+      gtk_container_add(contentArea, dialogData->notebook);
+      g_signal_connect(G_OBJECT(dialogData->notebook), "switch-page", G_CALLBACK(onChangeCurrentPage), dialogData);
+  
+      createCoordsTab(dialogData, spacing);
+      createSequenceTab(dialogData, spacing);
+      createOptionsTab(dialogData, spacing);
+    }
+
+  char *adhocSeq = textViewGetText(dialogData->adhocSeqText);
+  char *title = getDotterTitle(bc, dialogData->matchType, dialogData->refType, adhocSeq);
+
+  gtk_window_set_title(GTK_WINDOW(dialog), title);
+
+  g_free(title);
+  g_free(adhocSeq);
+
+  return dialog;
+}
+
+
+/* Pop up a dialog to allow the user to edit dotter parameters and launch dotter */
+void showDotterDialog(GtkWidget *blxWindow, const gboolean resetValues)
+{
+  static DotterDialogData *dialogData = NULL;
+
+  GtkWidget *dialog = getOrCreateDotterDialog(blxWindow, resetValues, &dialogData);
+  
+  gtk_widget_show_all(dialog);
+
+  onRefTypeToggled(NULL, dialogData);
+
+  if (resetValues)
+    {
+      gtk_window_present(GTK_WINDOW(dialog));
+    }
+}
+
+
+/*******************************************************************
+ *		      Title utility functions                      *
+ *******************************************************************/
+
+/* Utility to get the title for the dotter dialog. Uses the selected sequence name if a single
+ * sequence is selected, or shows <no sequences> or <multiple sequences>. The result should be
+ * free'd with g_free. */
+static char* getDotterTitleSelectedSeq(const BlxContext *bc, const DotterRefType refType)
+{
+  char *result = NULL;
+  GString *resultStr = g_string_new(blxGetTitlePrefix(bc));
+
+  /* Get ref seq name */
+  const gboolean transcript = (refType == BLXDOTTER_REF_TRANSCRIPT);
+  const char *refSeqName = getDotterRefSeqName(bc, transcript);
+  g_string_append_printf(resultStr, "Dotter %s vs ", refSeqName);
+
+  /* Get selected match seq name */
+  GList *selectedSeqs = bc->getSelectedSeqsByType(BLXSEQUENCE_MATCH);
+  const int numSeqs = g_list_length(selectedSeqs);
+  
+  if (numSeqs == 1)
+    {
+      const BlxSequence *blxSeq = (const BlxSequence*)(selectedSeqs->data);
+      g_string_append(resultStr, blxSequenceGetName(blxSeq));
+    }
+  else if (numSeqs < 1)
+    {
+      g_string_append(resultStr, "<no sequences selected>");
+    }
+  else
+    {
+      g_string_append_printf(resultStr, "<%d sequences>", numSeqs);
+    }
+  
+  result = g_string_free(resultStr, FALSE);
+  
+  return result;
+}
+
+
+/* Get the dotter title for the adhoc sequence text */
+static char *getDotterTitleAdhocSeq(const BlxContext *bc, const char *adhocSeq, const DotterRefType refType)
+{
+  char *result = NULL;
+  GString *resultStr = g_string_new(blxGetTitlePrefix(bc));
+
+  /* Get ref seq name */
+  const gboolean transcript = (refType == BLXDOTTER_REF_TRANSCRIPT);
+  const char *refSeqName = getDotterRefSeqName(bc, transcript);
+  g_string_append_printf(resultStr, "Dotter %s vs ", refSeqName);
+
+  if (adhocSeq)
+    {
+      char *seqName = NULL;
+      textGetSeqDetails(adhocSeq, NULL, &seqName);
+
+      if (seqName)
+        {
+          g_string_append(resultStr, seqName);
+          g_free(seqName);
+        }
+      else
+        {
+          g_string_append(resultStr, "<adhoc sequence>");
+        }
+    }
+  else
+    {
+      g_string_append(resultStr, "<adhoc sequence>");
+    }
+
+  result = g_string_free(resultStr, FALSE);
+  return result;
+}
+
+
+/* Get the dotter title for the ref sequence vs itself */
+static char *getDotterTitleSelf(const BlxContext *bc, const DotterRefType refType)
+{
+  char *result = NULL;
+  GString *resultStr = g_string_new(blxGetTitlePrefix(bc));
+
+  /* Get ref seq name */
+  const gboolean transcript = (refType == BLXDOTTER_REF_TRANSCRIPT);
+  const char *refSeqName = getDotterRefSeqName(bc, transcript);
+  g_string_append_printf(resultStr, "%s vs %s", refSeqName, refSeqName);
+
+  result = g_string_free(resultStr, FALSE);
+  return result;
+}
+
+
+/* Get the title for the dotter dialog. */
+static char *getDotterTitle(const BlxContext *bc, 
+                            const DotterMatchType matchType, 
+                            const DotterRefType refType,
+                            const char *adhocSeq)
+{
+  char *result = NULL;
+
+  switch (matchType)
+    {
+      default:
+      case BLXDOTTER_MATCH_SELECTED: 
+        result = getDotterTitleSelectedSeq(bc, refType);
+        break;
+
+      case BLXDOTTER_MATCH_ADHOC: 
+        result = getDotterTitleAdhocSeq(bc, adhocSeq, refType);
+        break;
+
+      case BLXDOTTER_MATCH_SELF: 
+        result = getDotterTitleSelf(bc, refType);
+        break;
+    }
+
+  return result;
+}
+
+
+/*******************************************************************
+ *		      Dotter utility functions                     *
+ *******************************************************************/
+
+/* Get the display coord version of the given coord (i.e. negated if the
+ * 'negate coords' option is enabled and the display is reversed). Only 
+ * applicable to reference sequence coords. */
+static int getDisplayCoord(const int coordIn, BlxContext *bc)
+{
+  int result = coordIn;
+  
+  if (bc->displayRev && bc->flags[BLXFLAG_NEGATE_COORDS])
+    {
+      result *= -1;
+    }
+  
+  return result;
+}
+
+
+/* Check whether the given dotter coord is within the blixem ref seq range.
+ * The coord should be as the user sees it, i.e. negated if the 'negate coords'
+ * option is enabled and the display is reversed - in this case in input arg
+ * will be updated to reflect the real coord. 
+ * Returns false and sets the error if not in range. Also sets the error but 
+ * returns true if we succeeded but with a warning. */
+static gboolean boundsCheckDotterCoord(int *coordIn, BlxContext *bc, GError **error)
+{
+  gboolean ok = TRUE;
+  
+  const gboolean negate = bc->displayRev && bc->flags[BLXFLAG_NEGATE_COORDS];
+  
+  int coord = *coordIn;
+  
+  if (negate)
+    {
+      /* Display coords are negated - un-negate to get the real coord */
+      coord *= -1;
+    }
+  
+  if (!valueWithinRange(coord, &bc->refSeqRange))
+    {
+      /* Try negating it in case the user missed the minus sign off. */
+      coord *= -1;
+      
+      if (valueWithinRange(coord, &bc->refSeqRange))
+        {
+          g_set_error(error, BLX_DOTTER_ERROR, BLX_DOTTER_ERROR_NEGATED_COORD,
+                      "Negated coord '%d' because original coord was not in range.\n", *coordIn);
+        }
+      else
+        {
+          ok = FALSE;
+          g_set_error(error, BLX_DOTTER_ERROR, BLX_DOTTER_ERROR_OUT_OF_RANGE,
+                      "Coord '%d' is outside reference sequence range [%d -> %d].\n", 
+                      *coordIn, 
+                      (negate ? bc->refSeqRange.max() * -1 : bc->refSeqRange.min()),
+                      (negate ? bc->refSeqRange.min() * -1 : bc->refSeqRange.max()));
+        }
+    }
+  
+  *coordIn = coord;
+  
+  return ok;
+}
+
+
+/* Convert a blixem blast mode to a char for passing to dotter */
+char getDotterMode(const BlxBlastMode blastMode)
+{
+  char type = ' ';
+  
+  if (blastMode == BLXMODE_BLASTP || blastMode == BLXMODE_TBLASTN)
+    {
+      type = 'P';
+    }
+  else if (blastMode == BLXMODE_BLASTX)
+    {
+      type = 'X';
+    }
+  else if (blastMode == BLXMODE_BLASTN || blastMode == BLXMODE_TBLASTX)
+    {
+      type = 'N';
+    }
+  
+  return type;
+}
+
+
+
+/* Get the start/end coords. If the passed refType flag is auto, calculate coords
+ * automatically - otherwise use the stored manual coords. If refType is transcript
+ * then don't set the coords (they get set later) */
+static gboolean getDotterRange(GtkWidget *blxWindow, 
+                               const DotterMatchType matchType,
+                               const DotterRefType refType,
+			       int *dotterStart, 
+			       int *dotterEnd, 
+			       int *dotterZoom, 
+			       GError **error)
+{
+  g_return_val_if_fail(!error || *error == NULL, FALSE); /* if error is passed, its contents must be NULL */
+
+  GError *tmpError = NULL;
+  gboolean success = TRUE;
+  
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+  
+
+  if (refType == BLXDOTTER_REF_TRANSCRIPT)
+    {
+      BlxSequence *transcriptSeq = bc->getSelectedTranscript(NULL);
+
+      if (transcriptSeq)
+        {
+          if (dotterStart)
+            *dotterStart = transcriptSeq->qRangeFwd.min();
+
+          if (dotterEnd)
+            *dotterEnd = transcriptSeq->qRangeFwd.max();
+        }
+    }
+  else if (refType == BLXDOTTER_REF_MANUAL)
+    {
+      /* Use manual coords */
+      if (dotterStart) 
+        *dotterStart = bc->dotterStart;
+
+      if (dotterEnd) 
+        *dotterEnd = bc->dotterEnd;
+
+      if (dotterZoom) 
+        *dotterZoom = bc->dotterZoom;
+      
+      if ((dotterStart && *dotterStart == UNSET_INT) || (dotterEnd && *dotterEnd == UNSET_INT))
+	{
+	  g_debug("Manual dotter parameters were requested but one or more coord is not set (start=%d, end=%d). Calculating automatic parameters instead.\n",
+		  *dotterStart, *dotterEnd);
+	}
+    }
+  
+  if ((dotterStart && *dotterStart == UNSET_INT) || (dotterEnd && *dotterEnd == UNSET_INT))
+    {
+      /* Calculate automatic coords */
+      success = smartDotterRange(blxWindow, dotterStart, dotterEnd, &tmpError);
+    }
+
+  if (success && !tmpError && matchType == BLXDOTTER_MATCH_SELECTED)
+    {
+      /* Check that there are valid MSPs within the dotter range. Set a warning if not. */
+      gboolean found = FALSE;
+      const BlxStrand activeStrand = (bc->displayRev ? BLXSTRAND_REVERSE : BLXSTRAND_FORWARD);
+      const int qMin = min(*dotterStart, *dotterEnd);
+      const int qMax = max(*dotterStart, *dotterEnd);
+
+      GList *selectedSeqs = bc->getSelectedSeqsByType(BLXSEQUENCE_MATCH);
+      GList *seqItem = selectedSeqs;
+      
+      for ( ; seqItem; seqItem = seqItem->next)
+        {
+          const BlxSequence *seq = (const BlxSequence*)(seqItem->data);
+          GList *mspItem = seq->mspList;  
+          
+          for ( ; mspItem ; mspItem = mspItem->next)
+            {
+              const MSP *msp = (MSP*)(mspItem->data);
+              
+              if ((msp->qStrand == activeStrand || bc->blastMode == BLXMODE_BLASTN) &&
+                  msp->qRange.min() <= qMax && msp->qRange.max() >= qMin)
+                {
+                  found = TRUE;
+                  break;
+                }
+            }
+        }
+      
+      if (!found)
+        {
+          g_set_error(&tmpError, BLX_DOTTER_ERROR, BLX_DOTTER_ERROR_NO_MATCHES,
+            "There were no matches for the selected sequence(s) within the selected dotter range.\nThis may be because the range was trimmed - try zooming in on the region of interest.\n");
+        }
+    }
+
+  if (tmpError)
+    {
+      g_propagate_error(error, tmpError);
+    }
+
+  return success;
+}
+
+
+/* Attempts to set the range of dotter in a sensible way, when calling dotter on the reference
+ * sequence versus itself. For now it just uses the big picture range. It's different to setting
+ * the big picture range using manual coords because it gets updated whenever the user scrolls,
+ * whereas manual coords don't change until the user hits the button again.
+ * gb10: this is a much simpler replacement for the ifdef'd out smartDotterRange. We could do
+ * something much smarter but at the moment it doesn't seem to be necessary. */
+static gboolean smartDotterRange(GtkWidget *blxWindow,
+                                 int *dotter_start_out,
+                                 int *dotter_end_out,
+                                 GError **error)
+{
+  /* We'll just use a large-ish range centred on the current display range */
+  GtkWidget *bigPicture = blxWindowGetBigPicture(blxWindow);
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+  const IntRange* const displayRange = bigPictureGetDisplayRange(bigPicture);
+  
+  /* Convert to DNA coords */
+  int start = convertDisplayIdxToDnaIdx(displayRange->min(), bc->seqType, 1, 1, bc->numFrames, bc->displayRev, &bc->refSeqRange);
+  int end = convertDisplayIdxToDnaIdx(displayRange->max(), bc->seqType, 1, 1, bc->numFrames, bc->displayRev, &bc->refSeqRange);
+  
+  if (dotter_start_out)
+    *dotter_start_out = start;
+  
+  if (dotter_end_out)
+    *dotter_end_out = end;
+
+  boundsLimitValue(dotter_start_out, &bc->refSeqRange);
+  boundsLimitValue(dotter_end_out, &bc->refSeqRange);
+  
+  return TRUE;
+}
+
+
+#ifdef USE_OLD_AUTO_DOTTER_COORDS
+/* gb10: Users never liked this way of calculating auto dotter coords because it can return a range
+ * that is nowhere near the visible range in the big picture. I've changed auto coords to just
+ * use the visible big picture range instead for now. I've left the old code here because it's _almost_
+ * good - it just needs to do something more sensible when clipping the range - so this might be
+ * useful in future if we can improve it.  */
+
+/* Attempts to set the range of dotter in some sort of sensible way. The problem is that
+ * hits can occur over a much wider range than the user is looking at, so the function
+ * attempts to find the range of hits that corresponds to what the user can see.
+ * Returns TRUE if it managed to find sequences and set a sensible range, FALSE otherwise.
+ * Returns true but sets the error if there is a warning.
+ * NOTE: This function assumes that only a single sequence can be selected at any one time. */
+static gboolean smartDotterRange(GtkWidget *blxWindow,
+				 const char *dotterSSeq, 
+				 int *dotter_start_out, 
+				 int *dotter_end_out,
+				 GError **error)
+{
+  g_return_val_if_fail(!error || *error == NULL, FALSE); /* if error is passed, its contents must be NULL */
+
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+
+  /* Check that a sequence is selected */
+  GList *selectedSeqs = bc->getSelectedSeqsByType(BLXSEQUENCE_MATCH);
+  if (g_list_length(selectedSeqs) < 1)
+    {
+      g_set_error(error, BLX_DOTTER_ERROR, BLX_DOTTER_ERROR_NO_SEQS, "There are no sequences selected.\n");
+      return FALSE;
+    }
+
+  GtkWidget *bigPicture = blxWindowGetBigPicture(blxWindow);
+  const IntRange* const bigPicRange = bigPictureGetDisplayRange(bigPicture);
+  const BlxStrand activeStrand = (bc->displayRev ? BLXSTRAND_REVERSE : BLXSTRAND_FORWARD) ;
+
+  /* Loop through all MSPs in the selected sequence. We'll estimate the wanted
+   * query region from the extent of the HSP's that are completely within view. */
+  const BlxSequence *selectedSeq = (const BlxSequence*)(selectedSeqs->data);
+  int qMin = UNSET_INT, qMax = UNSET_INT;
+  GList *mspListItem = selectedSeq->mspList;  
+  
+  for ( ; mspListItem ; mspListItem = mspListItem->next)
+    {
+      const MSP *msp = (MSP*)(mspListItem->data);
+      
+      /* Get the msp start/end in terms of display coords, and find the min/max */
+      const IntRange* const mspDisplayRange = mspGetDisplayRange(msp);
+
+      /* Check if the MSP is in a visible strand is entirely within the big picture range */
+      if ((msp->qStrand == activeStrand || (bc->blastMode == BLXMODE_BLASTN)) &&
+	  rangesOverlap(mspDisplayRange, bigPicRange))
+	{
+	  int qSeqMin = msp->qRange.min;
+	  int qSeqMax = msp->qRange.max;
+	  int sSeqMin = msp->sRange.min;
+	  int sSeqMax = msp->sRange.max;
+	  
+	  /* Extrapolate qMin backwards to the start of the match sequence (i.e. where
+	   * s==0) and qMax forwards to the end of the match sequence (i.e. where s==sLength). */
+	  int distToSMin = sSeqMin - 1;
+	  int distToSMax = 200; /* default amount if sequence not found or if mode is tblastn */
+	  
+	  if (bc->blastMode != BLXMODE_TBLASTN && dotterSSeq)
+	    {
+	      distToSMax = strlen(dotterSSeq) - sSeqMax;
+	    }
+
+	  /* If the match sequence is a peptide sequence, convert the number of peptide
+	   * coords we want to traverse to the equivalent number of DNA coords */
+	  if (bc->seqType == BLXSEQ_PEPTIDE)
+	    {
+	      distToSMin *= bc->numFrames;
+	      distToSMax *= bc->numFrames;
+	    }
+
+	  /* If the strands are in opposite directions, the low end of the ref 
+	   * sequence corresponds to the high of the match sequence, and vice versa. */
+	  const gboolean sameDirection = (mspGetRefStrand(msp) == mspGetMatchStrand(msp));
+	  qSeqMin -= sameDirection ? distToSMin : distToSMax;
+	  qSeqMax += sameDirection ? distToSMax : distToSMin;
+
+	  /* Set the results */
+	  if (qMin == UNSET_INT || qSeqMin < qMin)
+	    {
+	      qMin = qSeqMin;
+	    }
+	  
+	  if (qMax == UNSET_INT || qSeqMax > qMax)
+	    {
+	      qMax = qSeqMax;
+	    }
+	}
+    }
+
+  if (qMin == UNSET_INT && qMax == UNSET_INT)
+    {
+      /* No alignments found. Give a warning, and use the big picture range. */
+      g_set_error(error, BLX_DOTTER_ERROR, BLX_DOTTER_ERROR_NO_MATCHES, 
+                  "There were no matches for the selected sequence(s) within the big picture range.\nZoom out to ensure alignments lie entirely within the big picture range.");
+      
+      qMin = convertDisplayIdxToDnaIdx(bigPicRange->min, bc->seqType, 1, 1, bc->numFrames, bc->displayRev, &bc->refSeqRange);
+      qMax = convertDisplayIdxToDnaIdx(bigPicRange->max, bc->seqType, 1, bc->numFrames, bc->numFrames, bc->displayRev, &bc->refSeqRange);
+    }
+  
+  /* Due to gaps, we might miss the ends - add some more */
+  int extend = 0.1 * (qMax - qMin) ;
+  qMin -= extend ;
+  qMax += extend ;
+
+  if (bc->blastMode == BLXMODE_BLASTX || bc->blastMode == BLXMODE_TBLASTX)
+    {
+      /* If sstart and send weren't in the end exons, we'll miss those - add some more */
+      extend = 0.2 * (qMax - qMin) ;
+      qMin -= extend ;
+      qMax += extend ;
+    }
+
+  /* Keep it within bounds. */
+  boundsLimitValue(&qMin, &bc->refSeqRange);
+  boundsLimitValue(&qMax, &bc->refSeqRange);
+
+  /* Apply min and max limits:  min 500 residues, max 10 Mb dots. */
+  int qLen = qMax - qMin;
+  int midCoord = qMin + qLen/2;
+
+  if (qLen < 500)
+    {
+      qLen = 500;
+    }
+
+  const int sLen = blxSequenceGetLength(selectedSeq);
+  if (qLen * sLen > 1e7)
+    {
+      qLen = 1e7 / sLen;
+    }
+
+  qMin = midCoord - (qLen / 2) ;
+  qMax = midCoord + (qLen / 2) ;
+
+  /* Bounds check again */
+  boundsLimitValue(&qMin, &bc->refSeqRange);
+  boundsLimitValue(&qMax, &bc->refSeqRange);
+
+  /* Return the start/end. The values start low and end high in normal 
+   * left-to-right display, or vice-versa if the display is reversed. */
+  *dotter_start_out = bc->displayRev ? qMax : qMin;
+  *dotter_end_out = bc->displayRev ? qMin : qMax;
+  
+  return TRUE;
+}
+#endif
+
+
+/* Utility to fetch the selected match sequence's DNA, or get it from the selected MSP.
+ * This function assumes that if multiple MSPs are selected, that they are all for 
+ * the same match sequence. Returns null if no MSPs are selected, with details of the error
+ * in 'error'.  If the sequence was found but there were warnings, it returns non-null with
+ * the warnings in 'error'. The return value should be free'd with g_free */
+static char* getSelectedSequenceDNA(const BlxSequence *blxSeq, const BlxContext *bc, GError **error)
+{
+  g_return_val_if_fail(!error || *error == NULL, FALSE); /* if error is passed, its contents must be NULL */
+  
+  char *dotterSSeq = NULL;
+  
+  /* If we're in seqbl mode, only part of the sequence is stored
+   * internally, so try to fetch the full sequence.
+   * gb10: I don't think this is applicable any more (or even if it
+   * will work if partial sequences are stored). If we do need to do
+   * a fetch here then we will need to look for a fetch method that
+   * returns the fasta sequence (rather than the embl entry). */
+  const BlxBlastMode blastMode = bc->blastMode;
+
+  if (!dotterSSeq && blastMode != BLXMODE_TBLASTX)
+    {
+      /* Check if sequence is stored internally (i.e. it was passed from acedb) */
+      g_debug("Looking for sequence stored internally... ");
+    
+      dotterSSeq = g_strdup(blxSequenceGetSequence(blxSeq));
+      
+      if (!dotterSSeq)
+	{
+	  g_debug("not found.\n");
+	  g_set_error(error, BLX_DOTTER_ERROR, BLX_DOTTER_ERROR_NOT_FOUND, "Failed to find sequence for '%s'.\n", blxSequenceGetName(blxSeq));
+	  return FALSE;
+	}
+
+      g_debug("found.\n");
+      
+      /* Dotter expects the passed sequence to be forwards and un-complemented but if this is
+       * the reverse strand the sequence will be complemented, so un-complement it. */
+      if (blxSeq->strand == BLXSTRAND_REVERSE)
+        {
+          blxComplement(dotterSSeq);
+        }
+    }
+
+  if (dotterSSeq && (strchr(dotterSSeq, SEQUENCE_CHAR_PAD) || blastMode == BLXMODE_TBLASTN))
+    {
+      g_warning("The sequence for '%s' is incomplete.\n", blxSequenceGetName(blxSeq));
+    }
+  
+  return dotterSSeq;
+}
+
+
+static const char* getDotterRefSeqName(const BlxContext *bc, const gboolean transcript)
+{
+  const char *result = "<no transcript selected>";
+  g_return_val_if_fail(bc, result);
+
+  if (transcript)
+    {
+      /* Get the sequence for a transcript */
+      int num_found = 0;
+      BlxSequence *transcriptSeq = bc->getSelectedTranscript(&num_found);
+      
+      if (transcriptSeq)
+        result = blxSequenceGetName(transcriptSeq);
+      else if (num_found > 0)
+        result = "<multiple transcripts>";
+    }
+  else
+    {
+      result = bc->refSeqName;
+    }
+
+  return result;
+}
+
+/* Get the section of reference sequence to dotter against. Also sets the dotterRange if getting
+ * the sequence for a transcript. */
+static char* getDotterRefSeq(GtkWidget *blxWindow,
+                             IntRange *dotterRange, 
+                             const int frame, 
+                             const gboolean transcript,
+                             const char** refSeqName_out,
+                             GError **error)
+{
+  char *result = NULL;
+  g_return_val_if_fail(blxWindow && dotterRange, result);
+
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+  GError *tmpError = NULL;
+
+  if (transcript)
+    {
+      /* Get the sequence for a transcript */
+      BlxSequence *transcriptSeq = blxWindowGetSelectedTranscript(blxWindow);
+      
+      if (transcriptSeq)
+        {
+          result = blxSequenceGetSplicedSequence(transcriptSeq, bc->refSeq, &bc->refSeqRange, &tmpError);
+          
+          if (refSeqName_out)
+            *refSeqName_out = blxSequenceGetName(transcriptSeq);
+        }
+      else
+        {
+          if (refSeqName_out)
+            *refSeqName_out = "<no transcript selected>";
+
+          g_set_error(&tmpError, BLX_DOTTER_ERROR, BLX_DOTTER_ERROR_NO_TRANSCRIPT,
+                      "Please select one (and only one) transcript to dotter against.\n\nUse Ctrl to select multiple features i.e. the transcript and the sequence(s) you want to dotter against it.");
+        }
+      
+      /* Set the range of coords of the result. */
+      if (result)
+        dotterRange->set(1, strlen(result));
+    }
+  else
+    {
+      /* Get the sequence for a range */
+      result = getSequenceSegment(bc->refSeq,
+                                  dotterRange,
+                                  BLXSTRAND_FORWARD,   /* always pass forward strand to dotter */
+                                  BLXSEQ_DNA,	  /* calculated dotter coords are always nucleotide coords */
+                                  BLXSEQ_DNA,          /* required sequence is in nucleotide coords */
+                                  frame,
+                                  bc->numFrames,
+                                  &bc->refSeqRange,
+                                  bc->blastMode,
+                                  bc->geneticCode,
+                                  FALSE,		  /* input coords are always left-to-right, even if display reversed */
+                                  FALSE,               /* always pass forward strand to dotter */
+                                  FALSE,               /* always pass forward strand to dotter */
+                                  &tmpError);
+
+      if (refSeqName_out)
+        *refSeqName_out = bc->refSeqName;
+    }
+
+  if (tmpError)
+    g_propagate_error(error, tmpError);
+
+  return result;
+}
+
+
+/* Utility to return the texxt contents of a GtkTextView. The result must be free'd by
+ * the caller with g_free */
+static char *textViewGetText(GtkWidget *textView)
+{
+  char *result = NULL;
+  g_return_val_if_fail(textView && GTK_IS_TEXT_VIEW(textView), result);
+
+  GtkTextBuffer *textBuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textView));
+  GtkTextIter start, end;
+  gtk_text_buffer_get_bounds(textBuffer, &start, &end);  
+
+  result = gtk_text_buffer_get_text(textBuffer, &start, &end, TRUE);
+  return result;
+}
+
+
+/* Extract the sequence DNA from the text. Also sets the sequence name if 
+ * the text is in fasta format; otherwise just expects the raw sequence. This also removes any
+ * newlines or whitespace from the sequence */
+static void textGetSeqDetails(const char *text, char **sequence, char **sequenceName)
+{
+  if (!text || !(*text) || !(sequence || sequenceName))
+    return ;
+
+  GString *sequenceStr = NULL;
+  GString *nameStr = NULL;
+  gboolean parsingHeader = FALSE;
+  gboolean parsingName = FALSE;
+  const char *cp = text;
+      
+  for ( ; cp && *cp; ++cp)
+    {
+      if (*cp == '>')
+        {
+          /* Start of FASTA header */
+          parsingName = TRUE;
+          parsingHeader = TRUE;
+        }
+      else if (isWhitespaceChar(*cp))
+        {
+          /* If we were parsing the name then stop because it ends at the first space. Ignore
+           * other whitespace chars. */
+          parsingName = FALSE;
+        }
+      else if (isNewlineChar(*cp))
+        {
+          /* If we were parsing the header then stop because it ends at the first newline.
+           * Ignore other newline chars. */
+          parsingHeader = FALSE;
+        }
+      else if (parsingHeader)
+        {
+          /* If parsing the name section of the header append it to the name (if name was 
+           * requested). Ignore the rest of the header. */
+          if (parsingName && sequenceName)
+            {
+              if (!nameStr)
+                nameStr = g_string_new(NULL);
+
+              g_string_append_c(nameStr, *cp);
+            }
+        }
+      else
+        {
+          /* Must now be parsing the sequence. If the sequence wasn't requested then quit. */
+          if (!sequence)
+            break;
+
+          if (!sequenceStr)
+            sequenceStr = g_string_new(NULL);
+
+          g_string_append_c(sequenceStr, *cp);
+        }
+    }
+      
+  if (sequenceStr && sequence)
+    *sequence = g_string_free(sequenceStr, FALSE);
+  else if (sequenceStr)
+    g_string_free(sequenceStr, TRUE);
+
+  if (nameStr && sequenceName)
+    *sequenceName = g_string_free(nameStr, FALSE);
+  else if (nameStr)
+    g_string_free(nameStr, TRUE);
+}
+
+
+/* Extract the sequence DNA from the text in the given widget. Also sets the sequence name if 
+ * the text is in fasta format; otherwise just expects the raw sequence. This also removes any
+ * newlines or whitespace from the sequence */
+static void textViewGetSeqDetails(GtkWidget *textView, char **sequence, char **sequenceName)
+{
+  char *text = textViewGetText(textView);
+  textGetSeqDetails(text, sequence, sequenceName);
+  g_free(text);
+}
+
+
+/*******************************************************************
+ *		      Functions to call dotter                     *
+ *******************************************************************/
+
+/* This actually executes the dotter child process */
+static GIOChannel* callDotterChildProcess(GtkWidget *blxWindow,
+                                          const char *dotterBinary, 
+                                          const int dotterZoom,
+                                          const gboolean hspsOnly,
+                                          const gboolean sleep,
+                                          const char *seq1Name,
+                                          const IntRange* const seq1Range,
+                                          const BlxStrand seq1Strand,
+                                          const gboolean seq1DisplayRev,
+                                          const char *seq2Name,
+                                          const IntRange* const seq2Range,
+                                          const BlxStrand seq2Strand,
+                                          const gboolean seq2DisplayRev,
+                                          BlxContext *bc,
+                                          GPid *childPid,
+                                          GError **error)
+{
+  DEBUG_OUT("callDotterChildProcess\n");
+
+  GIOChannel *ioChannel = NULL;
+  char *seq1OffsetStr = convertIntToString(seq1Range->min() - 1);
+  char *seq2OffsetStr = convertIntToString(seq2Range->min() - 1);
+  char *seq1LenStr = convertIntToString(seq1Range->length());
+  char *seq2LenStr = convertIntToString(seq2Range->length());
+  
+  /* Create the argument list - start with any options we want to pass */
+  GSList *argList = NULL;
+  argList = g_slist_append(argList, g_strdup(dotterBinary));
+  argList = g_slist_append(argList, g_strdup("-z"));
+  argList = g_slist_append(argList, convertIntToString(dotterZoom));
+  argList = g_slist_append(argList, g_strdup("-q"));
+  argList = g_slist_append(argList, seq1OffsetStr);
+  argList = g_slist_append(argList, g_strdup("-s"));
+  argList = g_slist_append(argList, seq2OffsetStr);
+  argList = g_slist_append(argList, g_strdup("--horizontal-type"));
+  argList = g_slist_append(argList, g_strdup("d"));
+  argList = g_slist_append(argList, g_strdup("--vertical-type"));
+
+  if (bc->seqType == BLXSEQ_PEPTIDE)
+    argList = g_slist_append(argList, g_strdup("p"));
+  else
+    argList = g_slist_append(argList, g_strdup("d"));
+
+  if (bc->flags[BLXFLAG_ABBREV_TITLE])
+    argList = g_slist_append(argList, g_strdup("--abbrev-title-on"));
+  else
+    argList = g_slist_append(argList, g_strdup("--abbrev-title-off"));
+
+  if (bc->windowColor)
+    argList = g_slist_append(argList, g_strdup_printf("--session_colour=%s", bc->windowColor));
+  
+  if (seq1Strand == BLXSTRAND_REVERSE)      argList = g_slist_append(argList, g_strdup("-r"));
+  if (seq2Strand == BLXSTRAND_REVERSE)	    argList = g_slist_append(argList, g_strdup("-v"));
+  if (seq1DisplayRev)			    argList = g_slist_append(argList, g_strdup("--reverse-h-display"));
+  if (seq2DisplayRev)			    argList = g_slist_append(argList, g_strdup("--reverse-v-display"));
+  if (hspsOnly)				    argList = g_slist_append(argList, g_strdup("-H"));
+  if (sleep)				    argList = g_slist_append(argList, g_strdup("--sleep=15"));
+  if (bc->flags[BLXFLAG_NEGATE_COORDS])	    argList = g_slist_append(argList, g_strdup("-N"));
+
+  /* now tell Dotter that we're calling it internally from another SeqTools
+   * program, so that it knows to expect piped data */
+  argList = g_slist_append(argList, g_strdup("-S"));
+  
+  /* Now pass the required arguments. These must be in the correct order. */
+  argList = g_slist_append(argList, g_strdup(seq1Name));
+  argList = g_slist_append(argList, seq1LenStr);
+  argList = g_slist_append(argList, g_strdup(seq2Name));
+  argList = g_slist_append(argList, seq2LenStr);
+  argList = g_slist_append(argList, g_strdup(dotterBinary));
+
+  /* Now pass the screen number - we want to start dotter on the same screen as blixem's main
+   * window */
+  if (blxWindow && GTK_IS_WINDOW(blxWindow))
+    {
+      GdkScreen *screen = gtk_window_get_screen(GTK_WINDOW(blxWindow));
+      if (screen)
+        {
+          char *screenStr = convertIntToString(gdk_screen_get_number(screen));
+          argList = g_slist_append(argList, g_strdup("--screen"));
+          argList = g_slist_append(argList, screenStr);
+        }
+    }
+
+  /* Terminate list with null */
+  argList = g_slist_append(argList, NULL);
+
+  /* Convert the list to an array */
+  DEBUG_OUT("Args = ");
+  char *argv[g_slist_length(argList)];
+  GSList *item = argList;
+  int i = 0;
+  
+  for ( ; item; item = item->next)
+    {
+      char *arg = (char*)(item->data);
+      argv[i] = arg;
+      ++i;
+      DEBUG_OUT(", %s", arg  );
+    }
+  DEBUG_OUT("\n");
+    
+  DEBUG_OUT("Executing dotter\n");
+
+  int standard_input = 0;
+
+  gboolean ok = g_spawn_async_with_pipes(NULL, //inherit parent' working directory
+                                         argv,
+                                         NULL, //inherit parent's environment
+                                         (GSpawnFlags)0,
+                                         NULL, 
+                                         NULL,
+                                         childPid,
+                                         &standard_input,
+                                         NULL,
+                                         NULL,
+                                         error);
+
+  if (ok)
+    ioChannel = g_io_channel_unix_new(standard_input);
+
+  return ioChannel;
+}
+
+
+/* Call dotter as an external process */
+gboolean callDotterExternal(GtkWidget *blxWindow,
+                            BlxContext *bc,
+                            int dotterZoom, 
+                            const gboolean hspsOnly,
+                            const gboolean sleep,
+                            const char *seq1Name,
+                            IntRange *seq1Range,
+                            char *seq1,
+                            const BlxStrand seq1Strand,
+			    const gboolean seq1DisplayRev,
+                            const char *seq2Name,
+                            IntRange *seq2Range,
+                            char *seq2,
+			    const BlxStrand seq2Strand,
+			    const gboolean seq2DisplayRev,
+                            const gboolean clipRange,
+                            const IntRange* const refSeqRange,
+                            const BlxSequence *transcriptSeq,
+                            GError **error)
+{
+  if (clipRange)
+    seq1Range->boundsLimit(&bc->refSeqRange, FALSE);
+
+  static char *dotterBinary = NULL;
+
+  /* Open pipe to new dotterBinary */
+  if (!dotterBinary) 
+    { 
+      g_debug("Looking for Dotter ...\n");
+      dotterBinary = g_find_program_in_path("dotter");
+
+      if (!dotterBinary)
+        {
+          g_set_error(error, BLX_DOTTER_ERROR, BLX_DOTTER_ERROR_NO_EXE, "No dotter executable found in path.\n$PATH=%s\n", getenv("PATH"));
+          dotterBinary = NULL;
+          return FALSE;
+        }
+    }
+  
+  g_debug("Calling %s with region: %d,%d - %d,%d\n", dotterBinary, seq1Range->min(), seq2Range->min(), seq1Range->max(), seq2Range->max());
+
+  /* Create the child process */
+  GPid childPid = 0;
+  gsize bytes_written = 0;
+  GError *tmpError = NULL;
+  
+  GIOChannel *ioChannel = callDotterChildProcess(blxWindow, dotterBinary, dotterZoom, hspsOnly, sleep,
+                                                 seq1Name, seq1Range, seq1Strand, seq1DisplayRev,
+                                                 seq2Name, seq2Range, seq2Strand, seq2DisplayRev,
+                                                 bc, &childPid, &tmpError);
+
+  if (ioChannel)
+    {
+      g_debug("Spawned process %d\n", childPid);
+      bc->spawnedProcesses = g_slist_append(bc->spawnedProcesses, GINT_TO_POINTER((int)childPid));
+    }
+  else
+    {
+      if (tmpError)
+        prefixError(tmpError, "Error creating child process for Dotter: ");
+      else
+        g_set_error(error, BLX_DOTTER_ERROR, BLX_DOTTER_ERROR_NO_EXE, "Error creating child process for Dotter.\n");
+    }
+
+  if (!tmpError)
+    {
+      /* Pass the sequences */
+      DEBUG_OUT("Piping sequences to dotter...\n");
+
+      g_io_channel_write_chars(ioChannel, seq1, seq1Range->length(), &bytes_written, &tmpError);
+
+      if (!tmpError)
+        g_io_channel_write_chars(ioChannel, seq2, seq2Range->length(), &bytes_written, &tmpError);
+
+      DEBUG_OUT("...done\n");
+    }
+
+  if (!tmpError)
+    {
+      /* Pass the features */
+      DEBUG_OUT("Piping features to dotter...\n");
+
+      if (transcriptSeq)
+        {
+          writeTranscriptToOutput(ioChannel, transcriptSeq, seq1Range, refSeqRange, &tmpError);
+        }
+      else
+        {
+          GList *seqItem = bc->matchSeqs;
+          for ( ; seqItem; seqItem = seqItem->next) 
+            {
+              BlxSequence *blxSeq = (BlxSequence*)(seqItem->data);
+              writeBlxSequenceToOutput(ioChannel, blxSeq, seq1Range, seq2Range, &tmpError);
+            }
+        }
+      
+      DEBUG_OUT("...done\n");
+    }
+      
+  /* Close the channel */
+  g_io_channel_shutdown(ioChannel, TRUE, NULL);
+
+  if (tmpError)
+    g_propagate_error(error, tmpError);
+
+  return TRUE;
+}
+
+
+/* Call dotter on the given sequence. Returns true if dotter was called; 
+ * false if we quit trying. */
+gboolean callDotterOnSelectedSeq(GtkWidget *blxWindow, 
+                                 const gboolean hspsOnly,
+                                 const gboolean sleep,
+                                 const DotterRefType refType,
+                                 const BlxSequence *selectedSeq,
+                                 GError **error)
+{
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+
+  /* Check this sequence is a valid blast match (just check the first MSP;
+   * they must all the same type if they have the same seq name) */
+  const MSP *firstMsp = (const MSP*)(selectedSeq->mspList->data);
+
+  if (!mspIsBlastMatch(firstMsp))
+    {
+      g_set_error(error, BLX_DOTTER_ERROR, BLX_DOTTER_ERROR_INVALID_SEQ, "You must select a valid match sequence first.\n");
+      return FALSE;
+    }
+  
+  /* We will display the active strand as the main strand in dotter */
+  const BlxStrand qStrand = blxWindowGetActiveStrand(blxWindow);
+
+  if (bc->seqType == BLXSEQ_PEPTIDE)
+    {
+      GList *mspItem = selectedSeq->mspList;
+      gboolean found = FALSE;
+      
+      for ( ; mspItem && !found; mspItem = mspItem->next)
+        {
+          const MSP* const msp = (const MSP*)(mspItem->data);
+          found = (msp->qStrand == qStrand);
+        }
+      
+      if (!found)
+        {
+          g_set_error(error, BLX_DOTTER_ERROR, BLX_DOTTER_ERROR_INVALID_STRAND, "You must select a match sequence on the active strand, or toggle strands first.\n");
+          return FALSE;
+        }
+    }
+  
+  /* Make a copy of the match sequence, because dotter takes ownership of this. */
+  char *dotterSSeq = getSelectedSequenceDNA(selectedSeq, bc, NULL);
+
+  if (!dotterSSeq)
+    {
+      g_set_error(error, BLX_DOTTER_ERROR, BLX_DOTTER_ERROR_NO_SEQ_DATA, "No sequence data for this sequence.\n");
+      return FALSE;
+    }
+  
+  /* Get the coords */
+  int dotterStart = UNSET_INT, dotterEnd = UNSET_INT, dotterZoom = 0;
+  GError *rangeError = NULL;
+  
+  gboolean ok = getDotterRange(blxWindow, BLXDOTTER_MATCH_SELECTED, refType, &dotterStart, &dotterEnd, &dotterZoom, &rangeError);
+
+  if (!ok)
+    {
+      prefixError(rangeError, "Error calculating dotter range. ");
+      g_propagate_error(error, rangeError);
+      return FALSE;
+    }
+  else if (ok && rangeError && error) /* if error is null, don't issue warnings */
+    {
+      /* There was a warning when calculating the range. Ask the user if they want to continue. */
+      prefixError(rangeError, "Warning: ");
+      postfixError(rangeError, "\nContinue?");
+
+      char *title = g_strdup_printf("%sWarning", blxGetTitlePrefix(bc));
+      ok = (runConfirmationBox(blxWindow, title, rangeError->message) == GTK_RESPONSE_ACCEPT);
+      
+      g_free(title);
+      g_error_free(rangeError);
+      rangeError = NULL;
+      
+      if (!ok)
+	return FALSE;
+    }
+  
+  /* Get the section of reference sequence that we're interested in */
+  const int frame = mspGetRefFrame(firstMsp, bc->seqType);
+  IntRange dotterRange;
+  dotterRange.set(dotterStart, dotterEnd);
+  GError *seqError = NULL;
+  const char *refSeqName = NULL;
+  const gboolean transcript = (refType == BLXDOTTER_REF_TRANSCRIPT);
+
+  char *refSeqSegment = getDotterRefSeq(blxWindow, &dotterRange, frame, transcript, &refSeqName, &seqError);
+  
+  if (!refSeqSegment)
+    {
+      g_propagate_error(error, seqError);
+      return FALSE;
+    }
+  else
+    {
+      /* If there was an error set but the sequence was still returned then it's a non-critical warning */
+      reportAndClearIfError(&seqError, G_LOG_LEVEL_WARNING);
+    }
+  
+  /* Get the match sequence name (chopping off the letters before the colon, if there is one). */
+  const char *dotterSName = strchr(mspGetSName(firstMsp), ':');
+  if (dotterSName)
+    {
+      dotterSName++;
+    }
+  else
+    {
+      dotterSName = mspGetSName(firstMsp);
+    }
+
+  IntRange sRange = {1, (int)strlen(dotterSSeq)};
+  
+  const int offset = dotterRange.min() - 1;
+  const BlxStrand refSeqStrand = blxWindowGetActiveStrand(blxWindow);
+  
+  if (transcript)
+    g_message("Calling dotter on %s vs %s\n", refSeqName, dotterSName);
+  else
+    g_message("Calling dotter on %s [%d,%d] vs %s\n", refSeqName, dotterStart, dotterEnd, dotterSName);
+  
+  g_debug("reference sequence: name =  %s, offset = %d\n"
+          "    match sequence: name =  %s, offset = %d\n", 
+          refSeqName, offset, dotterSName, 0);
+  
+  const gboolean revHozScale = (refSeqStrand == BLXSTRAND_REVERSE);
+  const gboolean revVertScale = FALSE; /* don't rev match seq scale, because it would show in dotter with -ve coords, but blixem always shows +ve coords */
+  const gboolean clipRange = !transcript; /* don't clip the range if using a transcript range */
+
+  /* If dottering vs a specific transcript, get it now */
+  const BlxSequence *transcriptSeq = NULL;
+  if (refType == BLXDOTTER_REF_TRANSCRIPT)
+    transcriptSeq = blxWindowGetSelectedTranscript(blxWindow);
+
+  return callDotterExternal(blxWindow, bc, dotterZoom, hspsOnly, sleep,
+                            refSeqName, &dotterRange, refSeqSegment, refSeqStrand, revHozScale,
+                            dotterSName, &sRange, dotterSSeq, selectedSeq->strand, revVertScale,
+                            clipRange, &bc->refSeqRange, transcriptSeq, error);
+}
+
+
+/* Call dotter on the currently-selected sequence(s). Returns true if all dotters were; 
+ * successful; false if there was a problem. */
+gboolean callDotterOnSelectedSeqs(GtkWidget *blxWindow, 
+                                  const gboolean hspsOnly,
+                                  const gboolean startup_sleep,
+                                  const DotterRefType refType,
+                                  GError **error)
+{
+  gboolean result = FALSE;
+  g_return_val_if_fail(!error || *error == NULL, result); /* if error is passed, its contents must
+                                                            be NULL */
+  const int max_dotters = 5;
+  GList *selectedSeqs = blxWindowGetSelectedSeqsByType(blxWindow, BLXSEQUENCE_MATCH);
+
+  const int numSeqsSelected = g_list_length(selectedSeqs);
+  
+  if (numSeqsSelected < 1)
+    {
+      g_set_error(error, BLX_DOTTER_ERROR, BLX_DOTTER_ERROR_NO_SEQS, "There are no sequences selected.\n");
+      return FALSE;
+    }
+  else
+    {
+      gboolean ok = TRUE;
+
+      if (numSeqsSelected > max_dotters)
+        {
+          char *msg = g_strdup_printf("You are about to open %d dotters - continue?", numSeqsSelected);
+
+          if (runConfirmationBox(blxWindow, "Run multiple dotters", msg) != GTK_RESPONSE_ACCEPT)
+            ok = FALSE;
+            
+          g_free(msg);
+        }
+
+      if (ok)
+        {
+          /* Call dotter on each selected sequence */
+          result = TRUE;
+          GList *item = selectedSeqs;
+
+          for ( ; item; item = item->next)
+            {
+              const BlxSequence *selectedSeq = (const BlxSequence*)(item->data);
+              result &= callDotterOnSelectedSeq(blxWindow, hspsOnly, startup_sleep, refType, selectedSeq, error);
+            }
+        }
+    }
+
+  return result;
+}
+
+
+/* Call dotter on the manually-entered adhoc sequence. Returns true if dotter 
+ * was called; false if we quit trying. */
+gboolean callDotterOnAdhocSeq(DotterDialogData *dialogData, GError **error)
+{
+  gboolean result = FALSE;
+  g_return_val_if_fail(!error || *error == NULL, result); /* if error is passed it must be NULL */
+  
+  GtkWidget *blxWindow = dialogData->blxWindow;
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+  const gboolean transcript = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dialogData->transcriptButton));
+  
+  /* We will display the active strand as the main strand in dotter */
+  const BlxStrand qStrand = blxWindowGetActiveStrand(blxWindow);
+
+  /* Get the sequence DNA (and name, if in fasta format) from the text entry */
+  char *dotterSName = NULL;
+  char *dotterSSeq = NULL;
+  textViewGetSeqDetails(dialogData->adhocSeqText, &dotterSSeq, &dotterSName);
+  
+  if (!dotterSSeq || *dotterSSeq == 0)
+    {
+      g_set_error(error, BLX_DOTTER_ERROR, BLX_DOTTER_ERROR_NO_SEQS, "Please enter a sequence into the entry box.\n");
+      return FALSE;
+    }
+
+  if (!dotterSName)
+    {
+      /* If we were given a raw sequence we won't have a name: just set a dummy name */
+      dotterSName = g_strdup("Unknown sequence");
+    }
+
+  /* Get the coords */
+  int dotterStart = UNSET_INT, dotterEnd = UNSET_INT, dotterZoom = 0;
+  GError *rangeError = NULL;
+  
+  gboolean ok = getDotterRange(blxWindow, dialogData->matchType, dialogData->refType, &dotterStart, &dotterEnd, &dotterZoom, &rangeError);
+
+  if (!ok)
+    {
+      prefixError(rangeError, "Error calculating dotter range. ");
+      g_propagate_error(error, rangeError);
+      return FALSE;
+    }
+  
+  /* Get the section of reference sequence that we're interested in */
+  const int frame = 1;
+  IntRange dotterRange;
+  dotterRange.set(dotterStart, dotterEnd);
+  GError *seqError = NULL;
+  const char *refSeqName = NULL;
+
+  char *refSeqSegment = getDotterRefSeq(blxWindow, &dotterRange, frame, transcript, &refSeqName, &seqError);
+  
+  if (!refSeqSegment)
+    {
+      g_propagate_error(error, seqError);
+      return FALSE;
+    }
+  else
+    {
+      /* If there was an error set but the sequence was still returned then it's a non-critical warning */
+      reportAndClearIfError(&seqError, G_LOG_LEVEL_WARNING);
+    }
+
+  IntRange sRange = {1, (int)strlen(dotterSSeq)};
+  
+  const int offset = dotterRange.min() - 1;
+  const BlxStrand refSeqStrand = blxWindowGetActiveStrand(blxWindow);
+  
+  if (transcript)
+    g_message("Calling dotter on %s vs %s\n", refSeqName, dotterSName);
+  else
+    g_message("Calling dotter on %s [%d,%d] vs %s\n", refSeqName, dotterStart, dotterEnd, dotterSName);
+  
+  g_debug("reference sequence: name =  %s, offset = %d\n"
+          "    match sequence: name =  %s, offset = %d\n", 
+          refSeqName, offset, dotterSName, 0);
+  
+  const gboolean revHozScale = (refSeqStrand == BLXSTRAND_REVERSE);
+  const gboolean revVertScale = FALSE; /* don't rev match seq scale, because it would show in dotter with -ve coords, but blixem always shows +ve coords */
+  const gboolean clipRange = !transcript; /* don't clip the range if using a transcript range */
+
+  /* If dottering vs a specific transcript, get it now */
+  const BlxSequence *transcriptSeq = NULL;
+  if (dialogData->refType == BLXDOTTER_REF_TRANSCRIPT)
+    transcriptSeq = blxWindowGetSelectedTranscript(blxWindow);
+
+  result = callDotterExternal(blxWindow, bc, dotterZoom, FALSE, dialogData->sleep,
+                              refSeqName, &dotterRange, refSeqSegment, refSeqStrand, revHozScale,
+                              dotterSName, &sRange, dotterSSeq, qStrand, revVertScale,
+                              clipRange, &bc->refSeqRange, transcriptSeq, error);
+
+  /* dotter takes ownership of dotterSSeq but not dotterSName, so free it */
+  g_free(dotterSName);
+  
+  return result;
+}
+
+
+/* Call dotter on the reference sequence versus itself.
+ *
+ * The follow notes on this are from http://sonnhammer.sbc.su.se/Dotter.html:
+ *
+ * When looking for overlaps between many sequences, for instance when assembling contigs, it can
+ * be uselful to make a dotplot of all sequences vs. each other. This way any overlap will show up 
+ * as a diagonal in the corner of a subsequence dotplot. Dotter has a built-in mechanism for this. 
+ * To run Dotter on many sequences at once, concatenate the sequence files (in fasta format). Then
+ * run dotter on the concatenated sequence file against itself, and green partitioning lines will
+ * appear between the sequences. At each partitioning line, the name of the following sequence is 
+ * printed. These lines can be turned on and off with the button "Draw lines a segment ends" in
+ * the "Feature series selection tool", which is launched from the main menu. 
+ */
+static gboolean callDotterOnSelf(DotterDialogData *dialogData, GError **error)
+{
+  GtkWidget *blxWindow = dialogData->blxWindow;
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+  
+  /* Get the auto range, if requested */
+  int dotterStart = UNSET_INT;
+  int dotterEnd = UNSET_INT;
+  int dotterZoom = 0;
+  
+  GError *tmpError = NULL;
+  if (!getDotterRange(blxWindow, dialogData->matchType, dialogData->refType, &dotterStart, &dotterEnd, &dotterZoom, &tmpError))
+    {
+      g_propagate_error(error, tmpError);
+      return FALSE;
+    }
+  
+  /* Get the section of reference sequence that we're interested in */
+  const BlxStrand qStrand = blxWindowGetActiveStrand(blxWindow);
+  const int frame = 1;
+  IntRange qRange;
+  qRange.set(dotterStart, dotterEnd);
+  const char *refSeqName = NULL;
+    
+  const gboolean transcript = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dialogData->transcriptButton));
+  char *refSeqSegment = getDotterRefSeq(blxWindow, &qRange, frame, transcript, &refSeqName, &tmpError);
+
+  if (!refSeqSegment)
+    {
+      g_propagate_error(error, tmpError);
+      return FALSE;
+    }
+  else
+    {
+      /* If there's an error but the sequence was still returned it's a non-critical warning */
+      reportAndClearIfError(&tmpError, G_LOG_LEVEL_WARNING);
+    }
+  
+  /* Make a copy of the reference sequence segment to pass as the match sequence */
+  char *dotterSSeq = g_strdup(refSeqSegment);
+
+  const gboolean revScale = (qStrand == BLXSTRAND_REVERSE);
+  
+  if (transcript)
+    g_message("Calling dotter on %s vs itself\n", refSeqName);
+  else
+    g_message("Calling dotter on %s [%d,%d] vs itself\n", refSeqName, dotterStart, dotterEnd);
+
+  /* If dottering vs a specific transcript, get it now */
+  const BlxSequence *transcriptSeq = NULL;
+  if (dialogData->refType == BLXDOTTER_REF_TRANSCRIPT)
+    transcriptSeq = blxWindowGetSelectedTranscript(blxWindow);
+
+  callDotterExternal(blxWindow, bc, dotterZoom, FALSE, dialogData->sleep,
+                     refSeqName, &qRange, refSeqSegment, qStrand, revScale,
+                     refSeqName, &qRange, dotterSSeq, qStrand, revScale,
+                     FALSE, &bc->refSeqRange, transcriptSeq, error);
+
+  return TRUE;
+}
+
diff --git a/blixemApp/blxdotter.hpp b/blixemApp/blxdotter.hpp
new file mode 100644
index 0000000..93e6ece
--- /dev/null
+++ b/blixemApp/blxdotter.hpp
@@ -0,0 +1,62 @@
+/*  File: blxdotter.h
+ *  Author: Gemma Barson, 2010-02-03
+ *  Copyright (c) 2010 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: Provides functionality to call Dotter as an external 
+ *              application.
+ *              
+ *              Determines which sequences to call Dotter with based on the
+ *              current selection in Blixem. Provides a dialog allowing the
+ *              user to set certain parameters and optionally calculates a 
+ *              sensible coordinate range to call Dotter with.
+ *
+ *              Generally Dotter will be called with one alignment sequence vs
+ *              a relevant portion of the reference sequence. It can also be
+ *              called on the reference sequence vs itself. This is useful if
+ *              the reference sequence has been constructed from several 
+ *              sequences concatenated together and one wishes to identify
+ *              alignments between those sequences.
+ *----------------------------------------------------------------------------
+ */
+
+#ifndef _blx_dotter_h_included_
+#define _blx_dotter_h_included_
+
+
+#include <gtk/gtk.h>
+#include <blixemApp/blixem_.hpp>
+
+void			showDotterDialog(GtkWidget *blxWindow, const gboolean bringToFront);
+gboolean		callDotterOnSelectedSeqs(GtkWidget *blxWindow, const gboolean hspsOnly, const gboolean sleep, const DotterRefType refType, GError **error);
+
+
+#endif /* _blx_dotter_h_included_ */
diff --git a/blixemApp/blxmain.cpp b/blixemApp/blxmain.cpp
new file mode 100644
index 0000000..17a5524
--- /dev/null
+++ b/blixemApp/blxmain.cpp
@@ -0,0 +1,902 @@
+/*  File: blxmain.c
+ *  Author: Erik Sonnhammer, 1999-08-26
+ *  Copyright (c) 2009 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: main() function for Blixem
+ *              BLast matches In an X-windows Embedded Multiple alignment
+ *----------------------------------------------------------------------------
+ */
+
+#include <string.h>
+#include <stdlib.h>
+#include <getopt.h>
+#include <unistd.h>
+
+#include <blixemApp/blixem_.hpp>
+#include <seqtoolsUtils/utilities.hpp>
+#include <seqtoolsUtils/blxparser.hpp>
+#include <seqtoolsUtils/blxGff3Parser.hpp>
+
+
+/* Some globals.... */
+
+
+/* global debug flag for blixem, set TRUE to get debugging output.           */
+gboolean blixem_debug_G = FALSE ;
+
+
+/* Usage text. This is a duplicate of the text that is in 
+ * doc/User_doc/blixem_usage.txt, so ideally we would get rid of this and use
+ * the text from the file instead; for now, we must update both. */
+
+#define USAGE_TEXT "\n\
+ Blixem - display multiple alignments against a reference sequence.\n\
+\n\
+ Usage: blixem [options] [<sequence_file>] <data_file> [X options] \n\
+\n\
+   <sequence_file> contains the reference sequence in FASTA format.\n\
+   <data_file> is a GFF v3 file containing alignments and other features.\n\
+   If <sequence_file> is ommitted, <data_file> should contain the reference\n\
+   sequence in FASTA format, below a comment line that reads ##FASTA.\n\
+\n\
+   Both <sequence_file> and <data_file> can be substituted by \"-\"\n\
+   for reading from stdin (pipe).  If <sequence_file> is piped, the first\n\
+   line should contain the sequence name and the second the sequence itself.\n\
+\n\
+\n\
+ Options:\n\
+  -t <type>, --display-type=<type>  MANDATORY\n\
+    Whether to display sequences in nucleotide or protein mode. Must be one of:\n\
+      N = nucleotide\n\
+      P = protein\n\
+\n\
+  -a <names>, --alignment-names=<names>\n\
+    Specify a string giving the names of the alignments, e.g. \"EST_mouse EST_human\" etc.\n\
+\n\
+  -c <file>, --config-file=<file>\n\
+    Read configuration options from 'file'.\n\
+\n\
+  --abbrev-title-on\n\
+    Abbreviate window title prefixes\n\
+\n\
+  --abbrev-title-off\n\
+    Do not abbreviate window title prefixes\n\
+\n\
+  --compiled\n\
+    Show package compile date.\n\
+\n\
+  -d <data_file>, --data-file=<data_file>\n\
+    Alternative way of specifying <data_file> using an argument\n\
+\n\
+  --dataset\n\
+    Optional string to indicate a data-set that the alignments are from.\n\
+\n\
+  -e <sequence_file>, --sequence-file=<sequence_file>\n\
+    Alternative way of specifying <sequence_file> using an argument\n\
+\n\
+  --dotter-first-match\n\
+    Call Dotter on the first match to the right of the default start coord.\n\
+\n\
+  --fetch-server <nodeid:port>\n\
+    Causes Blixem to get sequences from a fetch server at machine 'nodeid' on the given\n\
+    port (default 22100).\n\
+\n\
+  -h, --help\n\
+    More detailed usage information.\n\
+\n\
+  --hide-big-picture\n\
+    Hide the big picture section on start-up.\n\
+\n\
+  --hide-inactive-strand\n\
+    Hide the inactive strand (i.e. the reverse strand, or the forward strand if the -R option\n\
+    is used).\n\
+\n\
+  --highlight-diffs\n\
+    Enable 'highlight differences' mode, where mismatches (rather than matches) are highlighted.\n\
+\n\
+  --invert-sort\n\
+    Invert sorting order\n\
+\n\
+  -m <from[:to]>, --map-coords=<from[:to]>\n\
+    Map the coordinate system so that the given 'from' coordinate maps to the given\n\
+    'to' coordinate (or to '1' if 'to' is not given).\n\
+\n\
+  -n, --negate-coords\n\
+    When showing the reverse strand, negate the display coordinates.\n\
+\n\
+  -o <n>, --offset=<n>\n\
+    Offset the reference sequence coordinate system by n.\n\
+\n\
+  --optional-data\n\
+    Parse additional data such as organism and tissue-type on start-up.\n\
+\n\
+  --remove-input-files\n\
+    Delete the input files after they have been parsed.\n\
+\n\
+  -r, --reverse-strand\n\
+    Indicates that the given reference sequence is the reverse strand.\n\
+\n\
+  --save-temp-files\n\
+    Save any temporary files created by Blixem.\n\
+\n\
+  --show-coverage\n\
+    Display the coverage section on start-up.\n\
+\n\
+  --sort-mode=<mode>\n\
+    Default sort mode. Use --help option to see details.\n\
+\n\
+  --squash-matches\n\
+    Compress the alignment lists on start-up.\n\
+\n\
+  -s <n>, --start-coord=<n>\n\
+    Start with the display centred on coordinate n.\n\
+\n\
+  --start-next-match\n\
+    Start with the display centred on the first match to the right of the default start coord.\n\
+\n\
+  -y <file>, --styles-file=<file>\n\
+    Read color options from a key-value file. Use --help option to see details.\n\
+\n\
+  --version\n\
+    Show package version number.\n\
+\n\
+  -z <start:end>, --zoom-range=<start:end>\n\
+    Specify the initial range of coordinates to zoom the big picture in to.\n\
+\n\
+  --zoom-whole\n\
+    Start with the big picture zoomed out to view the full reference sequence range.\n\
+\n\
+ Some X options:\n\
+ -acefont <font> Main font.\n\
+ -font    <font> Menu font.\n\n"
+
+
+/* Text to show the authors, version and compile date */
+#define FOOTER_TEXT "\
+-----\n\
+" AUTHOR_TEXT_FULL " \n\
+\n\
+ Reference: Sonnhammer ELL & Durbin R (1994). A workbench for Large Scale\n\
+            Sequence Homology Analysis. Comput. Applic. Biosci. 10:301-307.\n\
+\n\
+ See http://www.sanger.ac.uk/resources/software/seqtools/ for more info.\n\
+\n\
+ " BLIXEM_COPYRIGHT_STRING "\n\
+ " BLIXEM_LICENSE_STRING "\n\
+\n\
+ Version " BLIXEM_VERSION_COMPILE "\n\
+\n\
+"
+
+/* Text to show the version */
+#define VERSION_TEXT BLIXEM_PACKAGE_VERSION"\n"
+
+#define HELP_TEXT "\n\
+FEATURES\n\
+  The prefered file format for <datafile> is GFF v3. (However, Blixem is still compatible with\n\
+  older file formats such as exblx and seqbl, as used by MSPcrunch).\n\
+\n\
+  Blixem is mainly aimed at displaying alignments, but can also show other features such as\n\
+  transcripts, variations and polyA tails. The following SO terms are treated specially in Blixem;\n\
+  other feature types will be displayed as a basic feature with simple positional information.\n%s\
+\n\
+SORT MODE\n\
+  The sort mode is specified with the --sort-mode=<mode> argument, where <mode> is\n\
+  one of the following:\n\
+    s = by Score\n\
+    i = by Identity\n\
+    n = by Name\n\
+    p = by Position\n\
+\n\
+  If optional data is loaded on start-up using the --optional-data argument, then the following\n\
+  sort modes are also valid:\n\
+    t = by Tissue type\n\
+    m = by Strain\n\
+    g = by Gene name\n\
+    o = by Organism\n\
+\n\
+COLOR KEY FILE\n\
+  The color key file is specified with the -y <file> or --styles-file=<file> argument. This is a .ini-\n\
+  like file that specifies attributes such as fill and line colors for features from particular \n\
+  sources (say EST_Human or polya_signal). The file should contain one or more source stanzas followed\n\
+  by one or more key=value pairs, i.e. \n\
+\n\
+    [<source>]\n\
+      <key>=<value>\n\
+      ...\n\
+\n\
+  <key> can be one of:\n\
+      colours:                 default colours\n\
+      transcript-cds-colours:  used to specify a different colour \n\
+                               for CDS sections of transcripts\n\
+\n\
+  <value> is a semi-colon separated list of fill and line colours of the format:\n\
+      <normal|selected> <fill|border> <colour>\n\
+\n\
+  <colour> can be in any of the forms accepted by XParseColor; these include name \n\
+           for a colour from rgb.txt, such as DarkSlateGray, or a hex specification \n\
+           such as #305050.\n\
+\n\
+  Example:\n\
+    colours=normal border #0000af ; selected border #0000af ; normal fill white ; \\\n\
+            selected fill #ffddcc ; \n\
+    transcript-cds-colours=normal border #0000af ; selected border #0000af ; \\\n\
+            normal fill white ; selected fill #ffddcc ; \n\
+\n\
+  Note that selection colors will be calculated automatically if they are not\n\
+  specified (a darker shade of the default color will be used when the feature is selected).\n\
+\n\
+MSPcrunch\n\
+  To make the datafile from blast output, run MSPcrunch with option -q.\n\
+\n\
+ o To pipe MSPcrunch output directly to Blixem, use \"-\"\n\
+   as the second parameter ([datafile]).  Example:\n\
+\n\
+   MSPcrunch -q <my.blast_output> | blixem <my.seq> -\n\
+\n\
+ o The BLAST program (blastp, blastn, blastx, tblastn, tblastx)\n\
+   is automatically detected from the Blast output header by MSPcrunch\n\
+   and is passed on to Blixem in the seqbl format (-q).\n\n" 
+
+
+/* set default values for command lines options */
+static void initCommandLineOptions(CommandLineOptions *options, char *refSeqName)
+{
+  options->refSeq = NULL;
+  options->refSeqName = refSeqName;
+  options->refSeqOffset = 0;
+  options->startCoord = 1;
+  options->startCoordSet = FALSE;
+  options->mspList = NULL;
+  options->columnList = NULL;
+  options->geneticCode = stdcode1;
+  options->activeStrand = BLXSTRAND_FORWARD;
+  options->bigPictZoom = 10;          
+  
+  options->zoomWhole = FALSE;
+  options->bigPictON = TRUE;          
+  options->hideInactive = FALSE;         
+  options->initSortColumn = BLXCOL_ID;
+  options->sortInverted = FALSE;        
+  options->highlightDiffs = FALSE;   
+  options->dotterFirst = FALSE; 
+  options->startNextMatch = FALSE;
+  options->squashMatches = FALSE;
+  options->optionalColumns = FALSE;
+  options->saveTempFiles = FALSE;
+  options->coverageOn = FALSE;
+  options->abbrevTitle = FALSE;
+  
+  options->blastMode = BLXMODE_UNSET;
+  options->seqType = BLXSEQ_NONE;
+  options->numFrames = 1;
+  options->mapCoords = FALSE;
+  options->mapCoordsFrom = UNSET_INT;
+  options->mapCoordsTo = 1; /* default to 1-based coordinate system if mapping coords but no 'to' value is specified */
+  options->fetchMethods = g_hash_table_new(g_direct_hash, g_direct_equal);
+  options->bulkFetchDefault = NULL;
+  options->userFetchDefault = NULL;
+  options->optionalFetchDefault = NULL;
+  options->dataset = NULL;
+
+  options->msgData.titlePrefix = g_strdup(BLIXEM_PREFIX);
+  options->msgData.parent = NULL;
+  options->msgData.statusBar = NULL;
+}
+
+
+static void validateOptions(CommandLineOptions *options)
+{
+  options->msgData.titlePrefix = options->abbrevTitle ? g_strdup(BLIXEM_PREFIX_ABBREV) : g_strdup(BLIXEM_PREFIX);
+}
+
+
+/* Determine the sequence type (nucleotide or peptide) from the given char */
+static BlxSeqType getSeqTypeFromChar(char seqChar)
+{
+  BlxSeqType result = BLXSEQ_NONE;
+  
+  if (seqChar == 'n' || seqChar == 'N')
+    result = BLXSEQ_DNA;
+  else if (seqChar == 'p' || seqChar == 'P')
+    result = BLXSEQ_PEPTIDE;
+  else
+    g_error("Bad display mode '%c'\n", seqChar);
+  
+  return result;
+}
+
+
+/* Get the sort mode from a char representing that mode */
+static BlxColumnId getSortModeFromChar(char sortChar)
+{
+  BlxColumnId result = BLXCOL_NONE;
+  
+  switch (sortChar)
+  {
+    case 's':
+      result = BLXCOL_SCORE;
+      break;
+    case 'i':
+      result = BLXCOL_ID;
+      break;
+    case 'n':
+      result = BLXCOL_SEQNAME;
+      break;
+    case 'p':
+      result = BLXCOL_START;
+      break;
+    case 't':
+      result = BLXCOL_TISSUE_TYPE;
+      break;
+    case 'm':
+      result = BLXCOL_STRAIN;
+      break;
+    case 'g':
+      result = BLXCOL_GENE_NAME;
+      break;
+    case 'o':
+      result = BLXCOL_ORGANISM;
+      break;
+
+    default:
+      g_error("Bad sort mode: %c\n", sortChar); 
+  }
+  
+  return result;
+}
+
+
+/* Get a list of all the supported GFF types, as a string. The result should
+ * be free'd with g_free. */
+static char* getSupportedTypesAsString(GSList *supportedTypes)
+{
+  GString *resultStr = g_string_new(NULL);
+  GSList *item = supportedTypes;
+  
+  for ( ; item; item = item->next)
+    {
+      BlxGffType *gffType = (BlxGffType*)(item->data);
+      g_string_append_printf(resultStr, "    %s\n", gffType->name);
+    }
+  
+  char *result = g_string_free(resultStr, FALSE);
+  
+  return result;
+}
+
+
+/* Prints usage info to stderr */
+static void showUsageText(const int exitCode)
+{
+  /* Pring usage info followed by authors. */
+  /* Send to stderr if shown due to error, otherwise to stdout */
+  if (exitCode == EXIT_FAILURE)
+    g_message_info("%s%s", USAGE_TEXT, FOOTER_TEXT);
+  else
+    g_message("%s%s", USAGE_TEXT, FOOTER_TEXT);
+}
+
+
+/* Prints extended usage info to stderr */
+static void showHelpText(GSList *supportedTypes, const int exitCode)
+{
+  /* Print the standard usage text, followed by the additional help text and authors */
+  GString *resultStr = g_string_new(USAGE_TEXT);
+
+  char *supported_types_string = getSupportedTypesAsString(supportedTypes);
+  
+  g_string_append_printf(resultStr, HELP_TEXT, supported_types_string);
+  g_string_append(resultStr, FOOTER_TEXT);
+
+  /* Send to stderr if shown due to error, otherwise to stdout */
+  if (exitCode == EXIT_FAILURE)
+    g_message_info("%s", resultStr->str);
+  else
+    g_message("%s", resultStr->str);
+  
+  g_free(supported_types_string);
+  g_string_free(resultStr, TRUE);
+}
+
+
+/* Prints version info to stderr */
+static void showVersionInfo()
+{
+  g_message(VERSION_TEXT);  
+}
+
+/* Prints compiled date (must go to stdout for our build scripts to work) */
+static void showCompiledInfo()
+{
+  g_message("%s\n", UT_MAKE_COMPILE_DATE());  
+}
+
+
+/* Entry point for blixem standalone program, you should be aware when
+ * altering this that blxview.c is also compiled into acedb and that
+ * blxview() is called directly by acedb code.
+ */
+int main(int argc, char **argv)
+{
+  /* Install error handlers */
+  signal(SIGSEGV, errorHandler);
+  signal(SIGFPE, errorHandler);
+
+  FILE *seqfile = NULL, *FSfile = NULL;
+  char *seqfilename = NULL;
+  char *FSfilename = NULL;
+  
+  int install = 1;
+  static gboolean showVersion = FALSE;      /* gets set to true if blixem was called with --version option */
+  static gboolean showCompiled = FALSE;     /* gets set to true if blixem was called with --compiled option */
+  
+  static gboolean rm_input_files = FALSE ; /* whether to remove input files once we're done with them */
+  PfetchParams *pfetch = NULL ;
+  gboolean xtra_data = FALSE ;      /* whether we have an extra data file to parse */
+  FILE *xtra_file = NULL ;          /* the extra data file */
+  char xtra_filename[1000] = {'\0'} ;
+  char *align_types = NULL ;        /* string containing alignment types, to display in the title */
+  char *config_file = NULL ;        /* optional blixem config file (usually "blixemrc") */
+  char *key_file = NULL ;           /* optional keyword file for passing style information */
+  GError *error = NULL ;
+ 
+  char refSeqName[FULLNAMESIZE+1] = "";
+
+  static CommandLineOptions options;
+  initCommandLineOptions(&options, refSeqName);
+ 
+  /* Set up the GLib message handlers
+   * 
+   * There are two handlers: the default one for all non-critical messages, which will just log
+   * output to the console, and one for critical messages and errors, which will display a 
+   * pop-up message (the idea being that we don't bother the user unless it's something serious).
+   * So, to get a pop-up message use g_critical, and to log a message or warning use g_message, 
+   * g_warning, g_debug etc. Note that g_error is always fatal.
+   */
+  g_log_set_default_handler(defaultMessageHandler, &options.msgData);
+  g_log_set_handler(NULL, (GLogLevelFlags)(G_LOG_LEVEL_ERROR | G_LOG_LEVEL_CRITICAL | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION), 
+                    popupMessageHandler, &options.msgData);
+
+  /* Get the list of supported GFF types, in case we need to print them out in the usage text */
+  GSList* supportedTypes = blxCreateSupportedGffTypeList(BLXSEQ_NONE);
+
+  gtk_parse_args(&argc, &argv);
+
+  /* Get the input args. We allow long args, so we need to create a long_options array */
+  static struct option long_options[] =
+    {
+      {"abbrev-title-off",      no_argument,        &options.abbrevTitle, 0},
+      {"abbrev-title-on",       no_argument,        &options.abbrevTitle, 1},
+      {"compiled",              no_argument,        &showCompiled, 1},
+      {"dataset",               required_argument,  NULL, 0},
+      {"dotter-first-match",    no_argument,        &options.dotterFirst, 1},
+      {"fetch-server",          required_argument,  NULL, 0},
+      {"hide-big-picture",      no_argument,        &options.bigPictON, 0},
+      {"hide-inactive-strand",  no_argument,        &options.hideInactive, 1},
+      {"highlight-diffs",       no_argument,        &options.highlightDiffs, 1},
+      {"invert-sort",           no_argument,        &options.sortInverted, 1},
+      {"optional-data",         no_argument,        &options.optionalColumns, 1},
+      {"remove-input-files",    no_argument,        &rm_input_files, 1},
+      {"save-temp-files",       no_argument,        &options.saveTempFiles, 1},
+      {"show-coverage",         no_argument,        &options.coverageOn, 1},
+      {"sort-mode",             required_argument,  NULL, 0},
+      {"squash-matches",        no_argument,        &options.squashMatches, 1},
+      {"start-next-match",      no_argument,        &options.startNextMatch, 1},
+      {"version",               no_argument,        &showVersion, 1},
+      {"zoom-whole",            no_argument,        &options.zoomWhole, 1},
+
+      {"alignment-names",       required_argument,  0, 'a'},
+      {"config-file",           required_argument,  0, 'c'},
+      {"data-file",             required_argument,  0, 'd'},
+      {"sequence-file",         required_argument,  0, 'e'},
+      {"help",                  no_argument,        0, 'h'},
+      {"disable-install",       no_argument,        0, 'i'}, /* "secret" option (hide from user) */
+      {"map-coords",            required_argument,  0, 'm'}, 
+      {"negate-coords",         no_argument,        0, 'n'}, 
+      {"offset",                required_argument,  0, 'o'},
+      {"reverse-strand",        no_argument,        0, 'r'},
+      {"start-coord",           required_argument,  0, 's'},
+      {"display-type",          required_argument,  0, 't'},
+      {"extra-file",            required_argument,  0, 'x'}, /* obsolete? */
+      {"styles-file",           required_argument,  0, 'y'},
+      {"zoom-range",            required_argument,  0, 'z'},
+      {0, 0, 0, 0}
+   };
+
+  const char  *optstring="a:c:d:e:him:no:rs:t:wx:y:z:";
+  extern int   optind;
+  extern char *optarg;
+  int          optionIndex; /* getopt_long stores the index into the option struct here */
+  int          optc;        /* the current option gets stored here */
+  gboolean wait = FALSE ;
+  gboolean have_args = FALSE;
+
+  while ((optc = getopt_long(argc, argv, optstring, long_options, &optionIndex)) != EOF)
+    {
+      have_args = TRUE;
+
+      switch (optc)
+        {
+        case 0:
+            if (long_options[optionIndex].flag != 0)
+              {
+                /* we get here if getopt_long set a flag; nothing else to do */
+              }
+            else if (stringsEqual(long_options[optionIndex].name, "fetch-server", TRUE))
+              {
+                pfetch = new PfetchParams;
+                pfetch->net_id = strtok(optarg, ":") ;
+                pfetch->port = atoi(strtok(NULL, ":")) ;
+              }                
+            else if (stringsEqual(long_options[optionIndex].name, "sort-mode", TRUE))
+              {
+                options.initSortColumn = getSortModeFromChar(*optarg);
+              }
+            else if (stringsEqual(long_options[optionIndex].name, "dataset", TRUE))
+              {
+                options.dataset = g_strdup(optarg);
+              }
+          break; 
+          
+        case '?':
+          break; /* getopt_long already printed an error message */
+          
+        case 'a':
+          align_types = g_strdup_printf("%s", optarg) ;
+          break;
+        case 'c': 
+          config_file = g_strdup(optarg) ;
+          break;
+        case 'd': 
+          FSfilename = g_strdup(optarg) ;
+          break;
+        case 'e': 
+          seqfilename = g_strdup(optarg) ;
+          break;
+        case 'h': 
+          {
+            showHelpText(supportedTypes, EXIT_SUCCESS);
+            exit(EXIT_SUCCESS) ;
+            break;
+          }
+        case 'i':
+          install = 0;
+          break;
+        case 'm':
+          {
+            options.mapCoords = TRUE;
+            options.mapCoordsFrom = atoi(optarg); /* will ignore anything after ':', if it exists */
+              
+            /* Optionally there may be a second number after a ':' character */
+            const char *cp = strchr(optarg, ':');
+            if (cp)
+              options.mapCoordsTo = atoi(cp + 1);
+              
+            break;
+          }
+        case 'n':
+          options.negateCoords = TRUE;
+          break;
+        case 'o':
+          options.refSeqOffset = convertStringToInt(optarg);
+          break;
+        case 'r':
+          options.activeStrand = BLXSTRAND_REVERSE;
+          break ;
+        case 's': 
+          options.startCoord = atoi(optarg);
+          options.startCoordSet = TRUE;
+          break;
+        case 't':
+          options.seqType = getSeqTypeFromChar(*optarg);
+          break;
+        case 'w':
+          wait = TRUE;
+          break ;
+        case 'x': 
+          xtra_data = TRUE ;
+          strcpy(xtra_filename, optarg);
+          break;
+        case 'y':
+          key_file = g_strdup(optarg) ;
+          break;
+        case 'z': 
+          {
+            int coord1 = atoi(optarg); /* will ignore anything after ':' */
+            const char *cp = strchr(optarg, ':');
+              
+            if (cp)
+              {
+                int coord2 = atoi(cp + 1);
+                options.bigPictRange.set(coord1, coord2);
+                
+                /* If the start coord hasn't already been specified on the
+                 * command line, base the default start on the centre of the
+                 * big picture range (can still be overridden if start coord
+                 * arg is found later) */
+                if (!options.startCoordSet)
+                  options.startCoord = options.bigPictRange.centre();
+              }
+            else
+              {
+                g_warning("Invalid parameters for --zoom-range argument; expected <start:end> but got '%s'. Zoom range will be ignored.\n", optarg);
+              }
+              
+            break;
+          }
+            
+        default : g_error("Illegal option\n");
+        }
+    }
+
+  if (!have_args)
+    {
+      showUsageText(EXIT_SUCCESS);
+      exit(EXIT_SUCCESS);
+    }
+
+  if (wait)
+    sleep(20);
+
+  if (showVersion)
+    {
+      /* Just show the version info */
+      showVersionInfo();
+      exit(EXIT_SUCCESS);
+    }
+
+  if (showCompiled)
+    {
+      /* Just show the version info */
+      showCompiledInfo();
+      exit(EXIT_SUCCESS);
+    }
+
+  validateOptions(&options);
+
+  /* Update the list of supported GFF types, filtering matches by the sequence type.
+   * (It's quick and dirty to destroy recreate this but it's a small list and only done once.) */
+  blxDestroyGffTypeList(&supportedTypes);
+  supportedTypes = blxCreateSupportedGffTypeList(options.seqType);
+  
+  const int numFiles = argc - optind;
+
+  /* Add -install for private colormaps */
+  if (install)
+    argvAdd(&argc, &argv, "-install");
+
+  gtk_init(&argc, &argv);
+
+  /* mapCoords essentially does the same thing as offset, so we shouldn't be
+   * given both.  Get the offset from mapCoords, if given. */
+  if (options.mapCoords)
+    {
+      if (options.refSeqOffset)
+        g_error("Error: 'map-coords' and 'offset' arguments are incompatible; please only specify one or the other.\n");
+      else
+        options.refSeqOffset = options.mapCoordsTo - options.mapCoordsFrom;
+    }
+  
+  /* Set up program configuration. */
+  blxInitConfig(config_file, &options, &error);
+  reportAndClearIfError(&error, G_LOG_LEVEL_WARNING);
+
+  /* Read in the key file, if there is one */
+  GSList *styles = blxReadStylesFile(key_file, &error);
+  reportAndClearIfError(&error, G_LOG_LEVEL_WARNING);
+
+  /* Get the file names */
+  if (numFiles == 1)
+    {
+      if (!FSfilename)
+        {
+          /* We have a single file containing both the aligments and the ref seq */
+          FSfilename = g_strdup(argv[optind]);
+        }
+      else
+        {
+          g_error("Data file specified twice - please specify at the last argument OR using the -d argument.");
+        }
+    }
+  else if (numFiles == 2)
+    {
+      if (!seqfilename && !FSfilename)
+        {
+          /* The ref seq is in a separate file (the first arg) */
+          seqfilename = g_strdup(argv[optind]);
+          FSfilename = g_strdup(argv[optind+1]);
+        }
+      else 
+        {
+          if (seqfilename && FSfilename)
+            g_error("Sequence file and data file specified twice - please specify these as the last arguments OR using the -e and -d arguments.");
+          else if (seqfilename)
+            g_error("Sequence file specified twice - please specify this as the penultimate argument OR using the -e argument.");
+          else if (FSfilename)
+            g_error("Data file specified twice - please specify this as the last argument OR using the-d argument.");
+        }
+    }
+  else if (numFiles > 2)
+    {
+      showUsageText(EXIT_FAILURE);
+    }
+
+  /* Parse the data file containing the homol descriptions.                */
+  if (FSfilename && !strcmp(FSfilename, "-"))
+    {
+      FSfile = stdin;
+    }
+  else if(FSfilename && !(FSfile = fopen(FSfilename, "r")))
+    {
+      g_error("Cannot open file %s\n", FSfilename);
+    }
+  
+  /* Parser compiles lists of MSPs per type into the following array. Initialise each GList in the array to NULL */
+  GArray* featureLists[BLXMSP_NUM_TYPES];
+  int typeId = 0;
+  for ( ; typeId < BLXMSP_NUM_TYPES; ++typeId)
+    featureLists[typeId] = g_array_new(TRUE, FALSE, sizeof(MSP*));
+  
+  GList *seqList = NULL; /* parser compiles a list of BlxSequences into this list */
+
+  char *dummyseq = NULL;    /* Needed for blxparser to handle both dotter and blixem */
+  char dummyseqname[FULLNAMESIZE+1] = "";
+
+  /* Create the columns */
+  options.columnList = blxCreateColumns(options.optionalColumns, (options.seqType == BLXSEQ_PEPTIDE));
+
+  /* Pass the config file to parseFS */
+  GKeyFile *inputConfigFile = blxGetConfig();
+  
+  /* Create a temporary lookup table for BlxSequences so we can link them on GFF ID */
+  GHashTable *lookupTable = g_hash_table_new(g_direct_hash, g_direct_equal);
+
+  /* Set the blast mode from the sequence type, if given. If not, blast mode might
+   * get set by parseFS (nasty for backwards compatibility; ideally we'll get rid
+   * of blastmode at some point). */
+  if (options.blastMode == BLXMODE_UNSET && options.seqType != BLXSEQ_NONE)
+    options.blastMode = (options.seqType == BLXSEQ_PEPTIDE ? BLXMODE_BLASTX : BLXMODE_BLASTN);
+  
+  if (FSfile)
+    {
+      parseFS(&options.mspList, FSfile, &options.blastMode, featureLists, &seqList, options.columnList, supportedTypes, styles,
+              &options.refSeq, options.refSeqName, &options.refSeqRange, &dummyseq, dummyseqname, inputConfigFile, lookupTable,
+              options.fetchMethods, &error) ;
+    }
+
+  reportAndClearIfError(&error, G_LOG_LEVEL_CRITICAL);  
+
+  /* Now see if blast mode was set and set seqtype from it if not already set... */
+  if (options.seqType == BLXSEQ_NONE && options.blastMode != BLXMODE_UNSET)
+    options.seqType = (options.blastMode == BLXMODE_BLASTN ? BLXSEQ_DNA : BLXSEQ_PEPTIDE);
+
+  /* Parse the reference sequence, if we have a separate sequence file (and it was
+   * not already specified in the features file) */
+  if (!options.refSeq && seqfilename)
+    {
+      /* Open the file (or stdin) */
+      if (!strcmp(seqfilename, "-"))
+        seqfile = stdin;
+      else if(!(seqfile = fopen(seqfilename, "r")))
+        g_error("Cannot open %s\n", seqfilename);
+      
+      /* Read in the reference sequence */
+      int startCoord = UNSET_INT;
+      int endCoord = UNSET_INT;
+      options.refSeq = readFastaSeq(seqfile, options.refSeqName, &startCoord, &endCoord, options.seqType);
+      
+      if (startCoord != UNSET_INT && endCoord != UNSET_INT)
+        options.refSeqRange.set(startCoord, endCoord);
+      
+      if (seqfile != stdin)
+        fclose(seqfile);
+    }
+  
+  if (!options.refSeq)
+    g_error("No reference sequence supplied.");
+  
+  /* If the ref seq range still has not been set, use 1-based coords */
+  if (!options.refSeqRange.isSet())
+    {
+      options.refSeqRange.set(1, strlen(options.refSeq));
+    }
+
+  if (FSfile && FSfile != stdin)
+    {
+      fclose(FSfile) ;
+    }
+
+  /* There may an additional file containing homol data in an alternative format. */
+  if (xtra_data)
+    {
+      if(!(xtra_file = fopen(xtra_filename, "r")))
+        {
+          g_error("Cannot open %s\n", xtra_filename) ;
+        }
+      
+      parseFS(&options.mspList, xtra_file, &options.blastMode, featureLists, &seqList, options.columnList, supportedTypes, styles,
+              &options.refSeq, options.refSeqName, NULL, &dummyseq, dummyseqname, blxGetConfig(), lookupTable, options.fetchMethods, &error) ;
+
+      reportAndClearIfError(&error, G_LOG_LEVEL_CRITICAL);
+      fclose(xtra_file) ;
+    }
+
+  /* Remove the input files if requested.                                  */
+  if (rm_input_files)
+    {
+      if(seqfilename && seqfilename[0] != '\0' && unlink(seqfilename) != 0)
+        {
+          char *msg = getSystemErrorText();
+          g_warning("Unlink of sequence input file \"%s\" failed: %s\n", seqfilename, msg) ;
+          g_free(msg);
+        }
+        
+      if(FSfilename && FSfilename[0] != '\0' && unlink(FSfilename) != 0)
+        {
+          char *msg = getSystemErrorText();
+          g_warning("Unlink of MSP input file \"%s\" failed: %s\n", FSfilename, msg) ;
+          g_free(msg);
+        }
+        
+      if (xtra_filename[0] != '\0' && unlink(xtra_filename) != 0)
+        {
+          char *msg = getSystemErrorText();
+          g_warning("Unlink of extra MSP sequence input file \"%s\" failed: %s\n", xtra_filename, msg) ;
+          g_free(msg);
+        }
+    }
+
+
+  if (seqfilename)
+    g_free(seqfilename);
+
+  if (FSfilename)
+    g_free(FSfilename);
+  
+  /* Now display the alignments. (Note that TRUE signals blxview() that it is being called from
+   * this standalone blixem program instead of as part of acedb. */
+  if (blxview(&options, featureLists, seqList, supportedTypes, pfetch, align_types, TRUE, styles, lookupTable))
+    {
+      gtk_main();
+    }
+ 
+  g_free(key_file);
+  g_free(config_file);
+  g_hash_table_unref(lookupTable);
+
+  printf("Exiting Blixem\n");
+  return (EXIT_SUCCESS) ;
+}
+
+
+
diff --git a/blixemApp/blxpanel.cpp b/blixemApp/blxpanel.cpp
new file mode 100644
index 0000000..13b0fe8
--- /dev/null
+++ b/blixemApp/blxpanel.cpp
@@ -0,0 +1,318 @@
+/*  File: blxpanel.cpp
+ *  Author: Gemma Barson, 2016-04-07
+ *  Copyright (c) 2016 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: See blxpanel.hpp
+ *----------------------------------------------------------------------------
+ */
+
+#include <blixemApp/blxpanel.hpp>
+#include <blixemApp/blxcontext.hpp>
+#include <blixemApp/coverageview.hpp>
+
+
+
+// Unnamed namespace
+namespace
+{
+
+#define DEFAULT_PREVIEW_BOX_LINE_WIDTH  1
+
+
+/* Convert an x coord in the given rectangle to a base index (in nucleotide coords) */
+static gint convertRectPosToBaseIdx(const gint x, 
+                                    const GdkRectangle* const displayRect,  
+                                    const IntRange* const dnaDispRange,
+                                    const gboolean displayRev)
+{
+  gint result = UNSET_INT;
+  
+  gdouble distFromEdge = (gdouble)(x - displayRect->x);
+  int basesFromEdge = (int)(distFromEdge / pixelsPerBase(displayRect->width, dnaDispRange));
+
+  if (displayRev)
+    {
+      result = dnaDispRange->max() - basesFromEdge;
+    }
+  else
+    {
+      result = dnaDispRange->min() + basesFromEdge;
+    }
+  
+  return result;
+}
+
+
+/* Given the centre x coord of a rectangle and its width, find the x coord of the 
+ * left edge. If an outer rectangle is given, limit the coord so that the
+ * rectangle lies entirely within the outer rect. */
+int getLeftCoordFromCentre(const int centreCoord, const int width, const GdkRectangle *outerRect)
+{
+  int leftCoord = centreCoord - roundNearest((double)width / 2.0);
+  
+  if (outerRect)
+    {
+      if (leftCoord < outerRect->x) 
+	leftCoord = outerRect->x;
+      else
+	{
+	  int leftCoordMax = outerRect->x + outerRect->width - width;
+	  
+	  if (leftCoord > leftCoordMax) 
+	    {
+	      leftCoord = leftCoordMax;
+	    }
+	}
+    }
+  
+  return leftCoord;
+}
+
+
+} // Unnamed namespace
+
+
+
+
+
+/* Default constructor */
+BlxPanel::BlxPanel() : 
+  displayRange(0, 0),
+  m_widget(NULL),
+  m_blxWindow(NULL),
+  m_bc(NULL),
+  m_coverageViewP(NULL),
+  m_previewBoxOn(false),
+  m_previewBoxCentre(0),
+  m_previewBoxOffset(0),
+  m_previewBoxLineWidth(DEFAULT_PREVIEW_BOX_LINE_WIDTH)
+{
+};
+
+/* Constructor */
+BlxPanel::BlxPanel(GtkWidget *widget_in, 
+                   GtkWidget *blxWindow_in, 
+                   BlxContext *bc_in,
+                   CoverageViewProperties *coverageViewP_in,
+                   int previewBoxCentre_in) :
+  displayRange(0, 0),
+  m_widget(widget_in),
+  m_blxWindow(blxWindow_in),
+  m_bc(bc_in),
+  m_coverageViewP(coverageViewP_in),
+  m_previewBoxOn(false),
+  m_previewBoxCentre(previewBoxCentre_in),
+  m_previewBoxOffset(0),
+  m_previewBoxLineWidth(DEFAULT_PREVIEW_BOX_LINE_WIDTH)
+{
+}
+
+
+/* Destructor */
+BlxPanel::~BlxPanel()
+{
+}
+
+GtkWidget* BlxPanel::widget() const
+{
+  return m_widget;
+}
+
+/* Return the main blixem window */
+GtkWidget* BlxPanel::blxWindow() const
+{
+  return m_blxWindow;
+}
+
+/* Return the coverage view class */
+CoverageViewProperties* BlxPanel::coverageViewProperties()
+{
+  return m_coverageViewP;
+}
+
+/* Return the coverage view widget */
+GtkWidget* BlxPanel::coverageView()
+{
+  GtkWidget *result = NULL;
+
+  if (m_coverageViewP)
+    result = m_coverageViewP->widget();
+
+  return result;
+}
+
+double BlxPanel::charWidth() const
+{
+  double result = 0.0;
+
+  if (m_bc)
+    result = m_bc->charWidth();
+
+  return result;
+}
+
+double BlxPanel::charHeight() const
+{
+  double result = 0.0;
+
+  if (m_bc)
+    result = m_bc->charHeight();
+
+  return result;
+}
+
+const GList* BlxPanel::columnList() const
+{
+  const GList *result = NULL;
+
+  if (m_bc)
+    result = m_bc->columnList;
+
+  return result;
+}
+
+
+void BlxPanel::refreshDisplayRange(const bool keepCentered)
+{
+}
+
+ 
+/* Show a preview box centred on the given x coord. If init is true, we're initialising
+ * a drag; otherwise, we're already dragging */
+void BlxPanel::startPreviewBox(const int x, const gboolean init, const int offset)
+{
+  if (init)
+    {
+      m_previewBoxOn = TRUE;
+      m_previewBoxOffset = offset;
+
+      static GdkCursor *cursor = NULL;
+      cursor = gdk_cursor_new(GDK_FLEUR);
+
+      gdk_window_set_cursor(m_blxWindow->window, cursor);
+    }
+
+  /* We might get called by a drag operation where the preview box drag has not been
+   * initialised; just ignore it */
+  if (!m_previewBoxOn)
+    return;
+
+  /* Whether dragging or initialising, we need to update the position */
+  m_previewBoxCentre = x + m_previewBoxOffset;
+
+  /* Refresh all child widgets, and also the coverage view (which may not
+   * be a direct child of the panel widget) */
+  gtk_widget_queue_draw(widget());
+  gtk_widget_queue_draw(coverageView());
+}
+
+
+/* Scroll the panel so that it is centred on the current preview box position, and clear
+ * the preview box. (Do nothing if preview box is not currently shown.)  */
+void BlxPanel::finishPreviewBox(const int xCentreIn, GdkRectangle *displayRect, GdkRectangle *highlightRect)
+{
+  gdk_window_set_cursor(m_blxWindow->window, NULL);
+
+  /* If we're not currently drawing a preview box then nothing to do */
+  if (!m_previewBoxOn)
+    return;
+
+  /* Apply any offset required to get the real centre coord */
+  const int xCentre = xCentreIn + m_previewBoxOffset;
+  
+  /* Get the display range in dna coords */
+  IntRange dnaDispRange;
+  convertDisplayRangeToDnaRange(&displayRange, m_bc->seqType, m_bc->numFrames, m_bc->displayRev, &m_bc->refSeqRange, &dnaDispRange);
+  
+  /* Find the base index where the new scroll range will start. This is the leftmost
+   * edge of the preview box if numbers increase in the normal left-to-right direction, 
+   * or the rightmost edge if the display is reversed. */
+  const int x = getLeftCoordFromCentre(xCentre, highlightRect->width, displayRect);
+  int baseIdx = convertRectPosToBaseIdx(x, displayRect, &dnaDispRange, m_bc->displayRev);
+  
+  /* Subtract 1 if the display is reversed to give the base to the right of x, rather than the base to the left of x */
+  if (m_bc->displayRev)
+    --baseIdx;
+  
+  /* Reset the preview box status. We don't need to un-draw it because we
+   * will redraw the whole big picture below. */
+  m_previewBoxOn = FALSE;
+  m_previewBoxOffset = 0;
+  
+  /* Perform any required updates following the change to the highlight box position. The base
+   * index is in terms of the nucleotide coords so we need to convert to display coords */
+  const int displayIdx = convertDnaIdxToDisplayIdx(baseIdx, m_bc->seqType, 1, m_bc->numFrames, m_bc->displayRev, &m_bc->refSeqRange, NULL);
+  onHighlightBoxMoved(displayIdx, m_bc->seqType);
+  
+  /* Re-centre the panel */
+  refreshDisplayRange(TRUE);
+  
+  gtk_widget_queue_draw(widget());
+}
+
+void BlxPanel::onHighlightBoxMoved(const int displayIdx, const BlxSeqType seqType)
+{
+}
+
+/* Draw the preview box on the given drawable within the boundaries of the given displayRect.
+ * The boundaries of the preview box are given by highlightRect.
+ * Only does anything if the preview box centre is set. */
+void BlxPanel::drawPreviewBox(GdkDrawable *drawable, 
+                              GdkRectangle *displayRect, 
+                              GdkRectangle *highlightRect)
+{
+  /* If not currently drawing the preview box then nothing to do */
+  if (!m_previewBoxOn)
+    {
+      return;
+    }
+
+  /* Get the display range in dna coords */
+  IntRange dnaDispRange;
+  convertDisplayRangeToDnaRange(&displayRange, m_bc->seqType, m_bc->numFrames, m_bc->displayRev, &m_bc->refSeqRange, &dnaDispRange);
+  
+  /* Find the x coord for the left edge of the preview box (or the right edge, if
+   * the display is right-to-left). */
+  int x = getLeftCoordFromCentre(m_previewBoxCentre, highlightRect->width, displayRect);
+  
+  /* Convert it to the base index and back again so that we get it rounded to the position of
+   * the nearest base. */
+  int baseIdx = convertRectPosToBaseIdx(x, displayRect, &dnaDispRange, m_bc->displayRev);
+  int xRounded = convertBaseIdxToRectPos(baseIdx, displayRect, &dnaDispRange, TRUE, m_bc->displayRev, TRUE);
+  
+  /* The other dimensions of the preview box are the same as the current highlight box. */
+  GdkRectangle previewRect = {xRounded, highlightRect->y, highlightRect->width, highlightRect->height};
+
+  GdkColor *previewBoxColor = getGdkColor(BLXCOLOR_PREVIEW_BOX, m_bc->defaultColors, FALSE, m_bc->usePrintColors);
+
+  drawHighlightBox(drawable, &previewRect, m_previewBoxLineWidth, previewBoxColor);
+}
diff --git a/blixemApp/blxpanel.hpp b/blixemApp/blxpanel.hpp
new file mode 100644
index 0000000..36b2582
--- /dev/null
+++ b/blixemApp/blxpanel.hpp
@@ -0,0 +1,106 @@
+/*  File: blxpanel.hpp
+ *  Author: Gemma Barson, 2016-04-07
+ *  Copyright (c) 2016 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: A base class for the big-picture and detail-view panels
+ *----------------------------------------------------------------------------
+ */
+
+#ifndef _blx_panel_included_
+#define _blx_panel_included_
+
+
+#include <gtk/gtk.h>
+#include <seqtoolsUtils/utilities.hpp>
+
+
+class CoverageViewProperties;
+class BlxContext;
+class IntRange;
+
+
+
+class BlxPanel
+{
+public:
+  // Construct/destruct
+  BlxPanel();
+
+  BlxPanel(GtkWidget *widget, 
+           GtkWidget *blxWindow, 
+           BlxContext *bc_in,
+           CoverageViewProperties *coverageViewP,
+           int previewBoxCentre);
+
+  virtual ~BlxPanel();
+
+  // Access
+  GtkWidget* widget() const;
+  GtkWidget* blxWindow() const;
+  virtual double charWidth() const;
+  virtual double charHeight() const;
+  GtkWidget* coverageView();
+  CoverageViewProperties *coverageViewProperties();
+  const GList *columnList() const;
+
+  virtual double contentXPos() const = 0;
+  virtual double contentWidth() const = 0;
+  virtual const IntRange* highlightRange() const { return NULL; };
+
+  // Update
+  virtual void refreshDisplayRange(const bool keepCentered);
+  virtual void onHighlightBoxMoved(const int displayIdx, const BlxSeqType seqType);
+
+  // Draw
+  void startPreviewBox(const int x, const gboolean init, const int offset);
+  void finishPreviewBox(const int xCentreIn, GdkRectangle *displayRect, GdkRectangle *highlightRect);
+  void drawPreviewBox(GdkDrawable *drawable, GdkRectangle *displayRect, GdkRectangle *highlightRect);
+
+
+  // Public member variables
+  IntRange displayRange;       /* The currently-displayed range of ref-sequence bases in the panel */
+
+private:
+  GtkWidget *m_widget;           /* The widget that draws this panel  */
+  GtkWidget *m_blxWindow;      /* The main blixem window that this panel belongs to */
+  BlxContext *m_bc;
+  CoverageViewProperties *m_coverageViewP;
+
+  bool m_previewBoxOn;         /* True if currently displaying the preview box */
+  int m_previewBoxCentre;      /* The base that the preview box is centered on */
+  int m_previewBoxOffset;      /* Can be used to offset the actual preview box position from previewBoxCentre */
+  int m_previewBoxLineWidth;
+};
+
+
+
+#endif // _blx_panel_included_
diff --git a/blixemApp/blxview.cpp b/blixemApp/blxview.cpp
new file mode 100644
index 0000000..09953c3
--- /dev/null
+++ b/blixemApp/blxview.cpp
@@ -0,0 +1,2012 @@
+/*  File: blxview.c
+ *  Author: Erik Sonnhammer, 1993-02-20
+ *  Copyright (c) 2009 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: Setup and miscellaneous functions for Blixem.
+ *               
+ *              This file is a bit of a mish-mash. It originally contained all
+ *              of the graphical stuff for Blixem, but that has been moved to
+ *              other files. This file now mostly contains setup functions,
+ *              but it also contains other functions that don't really belong
+ *              anywhere else.
+ *----------------------------------------------------------------------------
+ */
+
+
+/*
+MSP score codes (for obsolete exblx file format):
+----------------
+-1 exon                  -> Big picture + Alignment
+-2 intron                -> Big picture + Alignment
+-3 Any colored segment   -> Big picture
+-4 stringentSEGcolor     -> Big picture
+-5 mediumSEGcolor        -> Big picture
+-6 nonglobularSEGcolor   -> Big picture
+-10 hidden by hand
+*/
+
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <ctype.h>
+#include <gdk/gdkkeysyms.h>
+#include <algorithm>
+
+#include <blixemApp/blixem_.hpp>
+#include <blixemApp/blxcontext.hpp>
+#include <blixemApp/blxwindow.hpp>
+#include <blixemApp/detailview.hpp>
+#include <blixemApp/blxdotter.hpp>
+#include <blixemApp/sequencecellrenderer.hpp>
+#include <seqtoolsUtils/blxmsp.hpp>
+#include <seqtoolsUtils/blxparser.hpp>
+#include <seqtoolsUtils/utilities.hpp>
+#include <gbtools/gbtools.hpp>
+
+using namespace std;
+
+
+#define MAXALIGNLEN			      10000
+#define ORGANISM_PREFIX_SEPARATOR	      "  "
+#define GFF3_VERSION_HEADER		      "##gff-version 3"	  /* the header line of a GFF v3 file */
+#define GFF3_SEQUENCE_REGION_HEADER	      "##sequence-region" /* the start comment of the sequence-region comment line in a GFF v3 file */
+#define MIN_GAP_HIGHLIGHT_WIDTH		      5			  /* minimum width of assembly gaps markers */
+
+
+static void            blviewCreate(char *align_types, const char *paddingSeq, GArray* featureLists[], GList *seqList, GSList *supportedTypes, CommandLineOptions *options, const gboolean External, GSList *styles) ;
+static void            processGeneName(BlxSequence *blxSeq);
+static void            processOrganism(BlxSequence *blxSeq);
+
+
+/* GLOBAL VARIABLES... sigh... */
+
+GtkWidget *blixemWindow = NULL ;
+static char *padseq = 0;
+
+
+
+/*
+ *                Internal routines
+ */
+
+
+//static int possort(MSP *msp1, MSP *msp2) {
+//    return ( (msp1->qstart > msp2->qstart) ? 1 : -1 );
+//}
+//
+//static int namesort(MSP *msp1, MSP *msp2) {
+//    if (strcmp(msp1->sname, msp2->sname))
+//	return strcmp(msp1->sname, msp2->sname);
+//    else
+//	return possort(msp1, msp2);
+//}
+//static int scoresort(MSP *msp1, MSP *msp2) {
+//    return ( (msp1->score < msp2->score) ? 1 : -1 );
+//}
+//
+//static int idsort(MSP *msp1, MSP *msp2)
+//{
+//  int result = 0 ;
+//
+//  result = ( (msp1->id < msp2->id) ? 1 : -1 ) ;
+//
+//  return result ;
+//}
+
+
+//static void wholePrint(void)
+//{
+   // int
+//	tmp,
+//	dispstart_save = dispstart,
+//	BigPictON_save = BigPictON;
+//
+//    static int
+//	start=1, end=0;
+//    ACEIN zone_in;
+//
+//    if (!end) end = qlen;
+//
+//    /* Swap coords if necessary */
+//    if ((plusmin < 0 && start < end) || (plusmin > 0 && start > end )) {
+//	tmp = start;
+//	start = end;
+//	end = tmp;
+//    }
+//
+//    /* Apply max limit MAXALIGNLEN */
+//    if ((abs(start-end)+1) > MAXALIGNLEN*symbfact) {
+//	start = dispstart - plusmin*MAXALIGNLEN*symbfact;
+//	if (start < 1) start = 1;
+//	if (start > qlen) start = qlen;
+//
+//	end = start + plusmin*MAXALIGNLEN*symbfact;
+//	if (end > qlen) end = qlen;
+//	if (end < 1) end = 1;
+//    }
+//
+//    if (!(zone_in = messPrompt("Please state the zone you wish to print",
+//			       messprintf("%d %d", start, end),
+//			       "iiz", 0)))
+//      return;
+//
+//    aceInInt(zone_in, &start);
+//    aceInInt(zone_in, &end);
+//    aceInDestroy (zone_in);
+//
+//    dispstart = start;
+//    displen = abs(end-start)+1;
+//
+//    /* Validation */
+//    if (plusmin > 0 && start > end) {
+//	g_message("Please give a range where from: is less than to:");
+//	return;
+//    }
+//    else if (plusmin < 0 && start < end) {
+//	g_message("Please give a range where from: is more than to:");
+//	return;
+//    }
+//    if (displen/symbfact > MAXALIGNLEN) {
+//	g_message("Sorry, can't print more than %d residues.  Anyway, think of the paper!", MAXALIGNLEN*symbfact);
+//	return;
+//    }
+//
+//    wholePrintOn = 1;
+//    BigPictON = 0;
+////    oneGraph = 1;
+//
+//    blviewRedraw();
+//    graphPrint();
+//
+//    /* Restore */
+//    wholePrintOn = 0;
+//    dispstart = dispstart_save;
+//    displen = dispstart_save;
+////    oneGraph = 0;
+//    BigPictON = BigPictON_save;
+//
+//    blviewRedraw();
+//}
+
+//static void blxPrint(void)
+//{
+//  oneGraph = 1;
+//  blviewRedraw();
+//  graphPrint();
+//  oneGraph = 0;
+//
+//  blviewRedraw();
+//}
+
+
+/* Check we have everything we need */
+static void validateInput(CommandLineOptions *options)
+{
+  if (!options->refSeq)
+    {
+      g_error("Error: reference sequence not specified.\n");
+    }
+  
+  /* if we were given the blast mode instead of seq type, determine the display sequence type */
+  if (options->seqType == BLXSEQ_NONE && options->blastMode != BLXMODE_UNSET)
+    {
+      if (options->blastMode == BLXMODE_BLASTN)
+        options->seqType = BLXSEQ_DNA;
+      else
+        options->seqType = BLXSEQ_PEPTIDE;
+    }
+  
+  /* Check we have a valid seq type */
+  if (options->seqType == BLXSEQ_NONE)
+    {
+      g_message("\nNo sequence type specified. Detected ");
+      
+      GError *error = NULL;
+      BlxSeqType seqType = determineSeqType(options->refSeq, &error);
+      reportAndClearIfError(&error, G_LOG_LEVEL_ERROR);
+      
+      if (seqType == BLXSEQ_PEPTIDE)
+	{
+	  g_message("protein sequence. Will try to run Blixem in protein mode.\n");
+	  options->seqType = BLXSEQ_PEPTIDE;
+	}
+      else
+	{
+	  g_message("nucleotide sequence. Will try to run Blixem in nucelotide mode.\n");
+	  options->seqType = BLXSEQ_DNA;
+	}
+    }
+  
+  /* Ideally we'd get rid of blast mode and just deal with real sequence types (ref seq type, match
+   * seq type and display type), but it's too in-built for now so make sure it's set */
+  if (options->blastMode == BLXMODE_UNSET)
+    options->blastMode = (options->seqType == BLXSEQ_DNA ? BLXMODE_BLASTN : BLXMODE_BLASTX);
+  
+  /* Set the number of reading frames */
+  if (options->seqType == BLXSEQ_PEPTIDE)
+    options->numFrames = 3;
+  else
+    options->numFrames = 1;
+  
+  /* Now we've got the ref seq, we can work out the zoom, if zooming to view the whole sequence */
+  if (options->zoomWhole)
+    {
+      options->bigPictZoom = strlen(options->refSeq);
+    }
+  else
+    {
+      if (options->seqType == BLXSEQ_DNA)
+        options->bigPictZoom = 30;
+      else
+        options->bigPictZoom = 10;
+    }  
+}
+
+
+
+
+/* Utility to get the parent sequence of the given variant, if it is not already set.
+ * returns true if the returned parent is not null. */
+static gboolean getParent(BlxSequence *variant, BlxSequence **parent, GList *allSeqs)
+{
+  if (*parent == NULL)
+    {
+      *parent = blxSequenceGetVariantParent(variant, allSeqs);
+    }
+  
+  return (*parent != NULL);
+}
+
+
+/* This function checks if the given sequence is missing its optional data (such as organism
+ * and gene name) and, if so, looks for the parent sequence and copies the data from there. */
+static void populateMissingDataFromParent(BlxSequence *curSeq, GList *seqList, GList *columnList)
+{
+  BlxSequence *parent = NULL;
+  GList *item = columnList;
+  
+  for ( ; item; item = item->next)
+    {
+      BlxColumnInfo *columnInfo = (BlxColumnInfo*)(item->data);
+      GValue *value = blxSequenceGetValue(curSeq, columnInfo->columnId);
+      
+      if (!value)
+        {
+          getParent(curSeq, &parent, seqList);
+          GValue *parentValue = blxSequenceGetValue(parent, columnInfo->columnId);
+          blxSequenceSetValue(curSeq, columnInfo->columnId, parentValue);
+        }
+    }
+}
+
+
+/* Merge new features into our existing context: merges the newMsps list into mspList and newSeqs
+ * list into seqList. Takes ownership of the contents of both newMsps and newSeqs. */
+void blxMergeFeatures(MSP *newMsps, GList *newSeqs, MSP **mspList, GList **seqList)
+{
+  g_return_if_fail(mspList && seqList);
+
+  if (mspList && *mspList)
+    {
+      /* Append new MSPs to MSP list */
+      MSP *lastMsp = *mspList;
+  
+      while (lastMsp->next)
+        lastMsp = lastMsp->next;
+  
+      lastMsp->next = newMsps;
+    }
+  else
+    {
+      /* Create new msp list */
+      *mspList = newMsps;
+    }
+
+  /* Append new sequences to sequence list */
+  *seqList = g_list_concat(*seqList, newSeqs);
+}
+
+
+/* This function to loads the contents of a natively-supported features file
+ * (e.g. GFF) into blixem. The new features are appended onto the existing
+ * sequence and MSP lists.
+ * A non-local or non-native file can be passed to check if it is loadable
+ * and, if not, this function returns early and sets the error. */
+void loadNativeFile(const char *filename,
+                    const char *buffer,
+                    GKeyFile *keyFile,
+                    BlxBlastMode *blastMode,
+                    GArray* featureLists[],
+                    GSList *supportedTypes, 
+                    GSList *styles,
+                    MSP **newMsps,
+                    GList **newSeqs,
+                    GList *columnList,
+                    GHashTable *lookupTable,
+                    const int refSeqOffset,
+                    const IntRange* const refSeqRange,
+                    GError **error)
+{
+  if (!filename && !buffer)
+    {
+      g_set_error(error, BLX_ERROR, 1, "No file or buffer provided.");
+      return;
+    }
+
+  char *dummyseq1 = NULL;    /* Needed for blxparser to handle both dotter and blixem */
+  char dummyseqname1[FULLNAMESIZE+1] = "";
+  char *dummyseq2 = NULL;    /* Needed for blxparser to handle both dotter and blixem */
+  char dummyseqname2[FULLNAMESIZE+1] = "";
+
+  /* The range passed to the parser must be in the original parsed coords, so subtract the
+   * offset. (It is used to validate that the range in the GFF file we're reading in is within 
+   * blixem's known range.)  */
+  IntRange toplevelRange;
+  
+  if (refSeqRange)
+    {
+      toplevelRange.set(refSeqRange->min() - refSeqOffset, refSeqRange->max() - refSeqOffset);
+    }
+  
+  if (filename)
+    {
+      /* Open the file for reading */
+      FILE *file = fopen(filename, "r");
+
+      if (!file)
+        {
+          g_set_error(error, BLX_ERROR, 1, "Error opening file '%s' for reading.\n", filename);
+        }
+      else
+        {
+          parseFS(newMsps, file, blastMode, featureLists, newSeqs, columnList, supportedTypes, styles,
+                  &dummyseq1, dummyseqname1, &toplevelRange, &dummyseq2, dummyseqname2, keyFile, lookupTable, NULL, error) ;
+          
+          fclose(file);
+        }
+    }
+  else if (buffer)
+    {
+      parseBuffer(newMsps, buffer, blastMode, featureLists, newSeqs, columnList, supportedTypes, styles,
+                  &dummyseq1, dummyseqname1, &toplevelRange, &dummyseq2, dummyseqname2, keyFile, lookupTable, error) ;      
+    }
+}
+
+
+/* Once we've fetched all the sequences we need to do some post-processing. Loop 
+ * twice: once to modify any fields in our own custom manner, and once more to
+ * see if any with missing data can copy it from their parent. (Need to do these in
+ * separate loops or we don't know if the data we're copying is processed or not.) */
+void finaliseFetch(GList *seqList, GList *columnList)
+{
+  GList *seqItem = seqList;
+
+  for ( ; seqItem; seqItem = seqItem->next)
+    {
+      BlxSequence *blxSeq = (BlxSequence*)(seqItem->data);
+      processGeneName(blxSeq);
+      processOrganism(blxSeq);
+    }
+  
+  for (seqItem = seqList; seqItem; seqItem = seqItem->next)
+    {
+      BlxSequence *blxSeq = (BlxSequence*)(seqItem->data);
+      populateMissingDataFromParent(blxSeq, seqList, columnList);
+    }
+}
+
+
+/* Find any gaps in the reference sequence */
+static void findAssemblyGaps(const char *refSeq, GArray *featureLists[], MSP **mspList, const IntRange* const refSeqRange)
+{
+  /* Find the last msp in the list so we can append new ones to the end */
+  MSP *lastMsp = *mspList;
+  while (lastMsp && lastMsp->next)
+    lastMsp = lastMsp->next;
+  
+  /* Scan for the gap character */
+  const char *cp = strchr(refSeq, SEQUENCE_CHAR_GAP);
+
+  while (cp && *cp)
+    {
+      /* Found the start of a gap; remember the start coord */
+      const int startCoord = cp - refSeq + refSeqRange->min();
+    
+      /* Loop until we find a non-gap character (or the end of the string) */
+      while (cp && *cp == SEQUENCE_CHAR_GAP)
+	++cp;
+    
+      const int endCoord = cp - refSeq - 1 + refSeqRange->min();
+    
+      MSP *msp = createEmptyMsp(&lastMsp, mspList);
+      msp->type = BLXMSP_GAP;
+      msp->qRange.set(startCoord, endCoord);
+      
+      featureLists[msp->type] = g_array_append_val(featureLists[msp->type], msp);
+    
+      /* Continue looking for more gaps */
+      cp = strchr(cp, SEQUENCE_CHAR_GAP);
+    }
+}
+
+
+/* blxview() can be called either from other functions in the Blixem
+ * program itself or directly by functions in other programs such as
+ * xace.
+ *
+ * Interface
+ *    pfetch:  if non-NULL, then we use pfetch instead of efetch for
+ *             _all_ sequence fetching (use the node/port info. in the
+ *             pfetch struct to locate the pfetch server).
+ *
+ */
+gboolean blxview(CommandLineOptions *options,
+                 GArray* featureLists[],
+                 GList *seqList,
+                 GSList *supportedTypes,
+                 PfetchParams *pfetch, 
+                 char *align_types, 
+                 gboolean External,
+                 GSList *styles,
+                 GHashTable *lookupTable)
+{
+  if (blixemWindow)
+    gtk_widget_destroy(blixemWindow) ;
+
+  if (!External)
+    {
+      /* When being called internally, the config file will not have been
+       * initialised yet, so do it now. */
+      GError *error = NULL;
+      blxInitConfig(NULL, options, &error);
+      reportAndClearIfError(&error, G_LOG_LEVEL_WARNING);
+    }
+  
+  validateInput(options);
+  
+  /* Find any assembly gaps (i.e. gaps in the reference sequence) */
+  findAssemblyGaps(options->refSeq, featureLists, &options->mspList, &options->refSeqRange);
+
+  /* offset has not been applied yet, so pass offset=0 */
+  BulkFetch bulk_fetch(External, options->saveTempFiles, options->seqType,
+                       &seqList, options->columnList,
+                       options->bulkFetchDefault, options->fetchMethods, &options->mspList, &options->blastMode, 
+                       featureLists, supportedTypes, NULL, 0, &options->refSeqRange, 
+                       options->dataset, FALSE, lookupTable,
+#ifdef PFETCH_HTML
+                       options->ipresolve,
+                       options->cainfo,
+#endif
+                       options->fetch_debug); 
+
+  gboolean status = bulk_fetch.performFetch();
+
+  if (status)
+    {
+      finaliseFetch(seqList, options->columnList);
+
+      /* Construct missing data and do any other required processing now we have all the sequence data */
+      finaliseBlxSequences(featureLists, &options->mspList, &seqList, options->columnList, 
+                           options->refSeqOffset, options->seqType, 
+                           options->numFrames, &options->refSeqRange, TRUE, lookupTable);
+
+    }
+
+  /* Note that we create a blxview even if MSPlist is empty.
+   * But only if it's an internal call.  If external & anything's wrong, we die. */
+  if (status || !External)
+    {
+      blviewCreate(align_types, padseq, featureLists, seqList, supportedTypes, options, External, styles) ;
+    }
+
+  return status;
+}
+
+
+/* Find all of the different alignment types (i.e. source names) and 
+ * compile them into a single string, separated by the given separator string */
+static char* findAlignTypes(GArray* featureLists[], const char *separatorStr)
+{
+  GSList *sourceList = NULL;
+  GString *resultStr = g_string_new(NULL);
+  
+  /* Loop through all MSPs of type 'match' */
+  const GArray* const mspList = featureLists[BLXMSP_MATCH];
+  
+  int i = 0;
+  const MSP *msp = mspArrayIdx(mspList, i);
+  
+  for ( ; msp; msp = mspArrayIdx(mspList, ++i))
+    {
+      const char *source = mspGetSource(msp);
+      
+      if (source)
+        {
+          /* See if we've already seen this source. If not, add it to the list,
+           * and append it to the string. */
+          GQuark quark = g_quark_from_string(source);
+          
+          if (!g_slist_find(sourceList, GINT_TO_POINTER(quark)))
+            {
+              sourceList = g_slist_prepend(sourceList, GINT_TO_POINTER(quark));
+              
+              if (resultStr->len)
+                g_string_append(resultStr, separatorStr);
+              
+              g_string_append(resultStr, source);
+            }
+        }
+    }
+  
+  char *result = resultStr->str;
+  g_string_free(resultStr, FALSE);
+  
+  return result;
+}
+
+
+/* Initialize the display and the buttons */
+static void blviewCreate(char *align_types, 
+			 const char *paddingSeq,
+                         GArray* featureLists[],
+                         GList *seqList,
+                         GSList *supportedTypes,
+			 CommandLineOptions *options,
+                         const gboolean External,
+                         GSList *styles)
+{
+  if (!blixemWindow)
+    {
+      /* Create the window */
+      blixemWindow = createBlxWindow(options, paddingSeq, featureLists, seqList, supportedTypes, External, styles);
+
+      /* Set the window title. Get a description of all the alignment types 
+       * (unless already supplied) */
+      if (!align_types)
+        align_types = findAlignTypes(featureLists, ", ");
+
+      /* If no alignment description was set, create a generic description */
+      if (!align_types)
+        align_types = g_strdup_printf("%s", options->seqType == BLXSEQ_PEPTIDE ? "peptide alignment" : "nucleotide alignment");
+      
+      BlxContext *bc = blxWindowGetContext(blixemWindow);
+      
+      char *title = g_strdup_printf("%s(%s) %s %s",
+                                    blxGetTitlePrefix(bc),
+                                    align_types,
+                                    (options->dataset ? options->dataset : ""),
+                                    options->refSeqName);
+      
+      gtk_window_set_title(GTK_WINDOW(blixemWindow), title);
+      g_free(title);
+    }
+
+  char *nameSeparatorPos = (char *)strrchr(options->refSeqName, '/');
+  if (nameSeparatorPos)
+    {
+      options->refSeqName = nameSeparatorPos + 1;
+    }
+  
+  if (options->dotterFirst && options->mspList && options->mspList->sname &&
+      (mspIsBlastMatch(options->mspList) || options->mspList->type == BLXMSP_HSP || options->mspList->type == BLXMSP_GSP))
+    {
+      /* We must select the sequence before calling callDotter. Get the first
+       * sequence to the right of the start coord. */
+      MSP *msp = nextMatch(blxWindowGetDetailView(blixemWindow), NULL, FALSE);
+      
+      if (msp)
+        {
+          blxWindowSelectSeq(blixemWindow, msp->sSequence);
+          
+          GError *error = NULL;
+          
+          if (!error)
+            {
+              callDotterOnSelectedSeqs(blixemWindow, FALSE, FALSE, BLXDOTTER_REF_AUTO, NULL);
+            }
+            
+          reportAndClearIfError(&error, G_LOG_LEVEL_CRITICAL);
+        }
+      else 
+        {
+          g_error("Could not run Dotter on first sequence; no sequences found to the right of the start coord.\n");
+        }
+    }
+
+  if (options->startNextMatch)
+    {
+      /* Set the start coord to be the start of the next MSP on from the default start coord */
+      nextMatch(blxWindowGetDetailView(blixemWindow), NULL, FALSE);
+    }
+}
+
+/***********************************************************
+ *               Sequences and MSPs
+ ***********************************************************/
+
+/* The parsed gene name generally contains extra info that we're not interested in. This function
+ * tries to extract just the part of the info that we're interested in. */
+static void processGeneName(BlxSequence *blxSeq)
+{
+  /* Data is usually in the format: "Name=SMARCA2; Synonyms=BAF190B, BRM, SNF2A, SNF2L2;"
+   * Therefore, look for the Name tag and extract everything up to the ; or end of line.
+   * If there is no name tag, just include everything */
+  const char *geneName = blxSequenceGetGeneName(blxSeq);
+  
+  if (geneName)
+    {
+      const char *startPtr = strstr(geneName, "Name=");
+      
+      if (!startPtr)
+        {
+          startPtr = strstr(geneName, "name=");
+        }
+        
+      if (startPtr)
+        {
+          startPtr += 5;
+          const char *endPtr = strchr(startPtr, ';');
+          const int numChars = endPtr ? endPtr - startPtr : strlen(startPtr);
+          
+          char *result = (char*)g_malloc((numChars + 1) * sizeof(char));
+          
+          g_utf8_strncpy(result, startPtr, numChars);
+          result[numChars] = 0;
+          
+          blxSequenceSetValueFromString(blxSeq, BLXCOL_GENE_NAME, result);
+
+          g_free(result);
+        }
+    }
+}
+
+
+/* Add a prefix to the given BlxSequence's organism field, e.g. change "Homo sapiens (human)" 
+ * to "Hs - Homo sapiens (human)". This is so that we can have a very narrow column that just 
+ * displays the prefix part of the field. */
+static void processOrganism(BlxSequence *blxSeq)
+{
+  const char *organism = blxSequenceGetOrganism(blxSeq);
+  
+  if (organism)
+    {
+      /* To create the alias, we'll take the first letter of each word until we hit a non-alpha
+       * character. To reduce likelihood of duplicates, we'll take 3 chars from the second word
+       * and then quit. e.g. 
+       *   Homo sapiens (human)           -> Hsap
+       *   Mus musculus (house mouse)     -> Mmus 
+       *   Macaca mulatta (Rhesus monkey) -> Mmul 
+       */
+      int srcIdx = 0;
+      int srcLen = strlen(organism);
+      
+      int destIdx = 0;
+      int destLen = 5; /* limit the length of the alias */
+      char alias[destLen + 1];
+      
+      gboolean startWord = TRUE;
+      gboolean first = TRUE;
+      
+      for ( ; srcIdx < srcLen && destIdx < destLen; ++srcIdx)
+        {
+          if (organism[srcIdx] == ' ')
+            {
+              startWord = TRUE;
+            }
+          else if (g_ascii_isalpha(organism[srcIdx]))
+            {
+              if (startWord)
+                {
+                  alias[destIdx] = organism[srcIdx];
+                  ++destIdx;
+                  startWord = FALSE;
+
+                  if (!first)
+                    {
+                      /* For the second word, also include the next 2 chars 
+                       * and then exit. */
+                      ++srcIdx;
+                      if (srcIdx < srcLen && destIdx < destLen)
+                        {
+                          alias[destIdx] = organism[srcIdx];
+                          ++destIdx;
+                        }
+
+                      ++srcIdx;
+                      if (srcIdx < srcLen && destIdx < destLen)
+                        {
+                          alias[destIdx] = organism[srcIdx];
+                          ++destIdx;
+                        }
+                      break;
+                    }
+
+                  first = FALSE;
+                }
+            }
+          else
+            {
+              /* Finish if we've hit a char that's not an alpha char or space. */
+              break;
+            }
+        }
+
+      alias[destIdx] = '\0';
+      
+      if (destIdx > 0)
+        {
+          blxSeq->organismAbbrev = g_strdup(alias);
+        }
+    }
+}
+
+
+/* Returns true if this msp is part of a feature series */
+gboolean mspHasFs(const MSP *msp)
+{
+  gboolean result = (msp->type == BLXMSP_FS_SEG || msp->type == BLXMSP_XY_PLOT);
+  return result;
+}
+
+
+/* Return the (cached) full extent of the match that we're showing in match seq coords */
+const IntRange* mspGetFullSRange(const MSP* const msp, const gboolean seqSelected, const BlxContext* const bc)
+{
+  const IntRange *result = NULL;
+  
+  if (seqSelected || !bc->flags[BLXFLAG_SHOW_UNALIGNED_SELECTED] || !bc->flags[BLXFLAG_SHOW_POLYA_SITE_SELECTED])
+    result = &msp->fullSRange;
+  else
+    result = &msp->sRange;
+
+  if (!result->isSet())
+    g_warn_if_reached();
+  
+  return result;
+}
+
+/* Return the (cached) full extent of the match on the ref sequence in display coords
+ * (including any portions of unaligned sequence that we're showing). Depending on the
+ * options, the range may depend on whether the sequence is selected or not. */
+const IntRange* mspGetFullDisplayRange(const MSP* const msp, const gboolean seqSelected, const BlxContext* const bc)
+{
+  const IntRange *result = NULL;
+  
+  /* Check if showing unaligned sequence or polya tails for all sequences, or just the selected
+     sequence */
+  if ((bc->flags[BLXFLAG_SHOW_UNALIGNED] || bc->flags[BLXFLAG_SHOW_POLYA_SITE]) && 
+      (seqSelected || 
+       (bc->flags[BLXFLAG_SHOW_UNALIGNED] && !bc->flags[BLXFLAG_SHOW_UNALIGNED_SELECTED]) || 
+       (bc->flags[BLXFLAG_SHOW_POLYA_SITE] && !bc->flags[BLXFLAG_SHOW_POLYA_SITE_SELECTED])))
+    {
+      result = &msp->fullRange;
+    }
+  else
+    {
+      result = &msp->displayRange;
+    }
+
+  if (!result->isSet())
+    g_warn_if_reached();
+
+  return result;
+}
+
+/* Return the (cached) extent of the alignment that we're showing in display coords
+ * (excluding unaligned sequence) */
+const IntRange* mspGetDisplayRange(const MSP* const msp)
+{
+  return &msp->displayRange;
+}
+
+
+/* Get the full range of the given MSP that we want to display, in s coords. This will generally 
+ * be the coords of the alignment but could extend outside this range we are displaying unaligned 
+ * portions of the match sequence or polyA tails etc. */
+static void mspCalcFullSRange(const MSP* const msp, 
+			      const gboolean *flags,
+			      const int numUnalignedBases, 
+			      const GArray* const polyASiteList,
+			      IntRange *result)
+{
+  /* Normally we just display the part of the sequence in the alignment */
+  result->set(msp->sRange);
+  
+  if (mspIsBlastMatch(msp))
+    {
+      if (flags[BLXFLAG_SHOW_UNALIGNED] && mspGetMatchSeq(msp))
+	{
+	  /* We're displaying additional unaligned sequence outside the alignment range. Get 
+	   * the full range of the match sequence */
+	  result->set(1, mspGetMatchSeqLen(msp));
+	  
+	  if (flags[BLXFLAG_LIMIT_UNALIGNED_BASES])
+	    {
+	      /* Only include up to 'numUnalignedBases' each side of the MSP range (still limited
+	       * to the range we found above, though). */
+	      result->set(max(result->min(), msp->sRange.min() - numUnalignedBases), 
+                          min(result->max(), msp->sRange.max() + numUnalignedBases));
+	    }
+	}
+      
+      if (flags[BLXFLAG_SHOW_POLYA_SITE] && mspHasPolyATail(msp))
+	{
+	  /* We're displaying polyA tails, so override the 3' end coord with the full extent of
+	   * the s sequence if there is a polyA site here. The 3' end is the min q coord if the
+	   * match is on forward ref seq strand or the max coord if on the reverse. */
+	  const gboolean sameDirection = (mspGetRefStrand(msp) == mspGetMatchStrand(msp));
+	  
+	  if (sameDirection)
+	    {
+	      result->setMax(mspGetMatchSeqLen(msp));
+	    }
+	  else
+	    {
+	      result->setMin(1);
+	    }
+	}
+    }
+}
+
+
+/* Get the full range of the given MSP that we want to display, in q coords. This will generally 
+ * be the coords of the alignment but could extend outside this range we are displaying unaligned 
+ * portions of the match sequence or polyA tails etc. */
+static void mspCalcFullQRange(const MSP* const msp, 
+			      const gboolean *flags,
+			      const int numUnalignedBases, 
+			      const GArray* const polyASiteList,
+			      const int numFrames,
+			      const IntRange* const fullSRange,
+			      IntRange *result)
+{
+  /* Default to the alignment range so we can exit quickly if there are no special cases */
+  result->set(msp->qRange);
+  
+  if (mspIsBlastMatch(msp) && (flags[BLXFLAG_SHOW_UNALIGNED] || flags[BLXFLAG_SHOW_POLYA_SITE]))
+    {
+      /* Find the offset of the start and end of the full range compared to the alignment range and
+       * offset the ref seq range by the same amount. We need to multiply by the number of reading
+       * frames because q coords are in nucleotides and s coords are in peptides. */
+      const int startOffset = (msp->sRange.min() - fullSRange->min()) * numFrames;
+      const int endOffset = (fullSRange->max() - msp->sRange.max()) * numFrames;
+      
+      const gboolean sameDirection = (mspGetRefStrand(msp) == mspGetMatchStrand(msp));
+
+      if (sameDirection)
+        {
+          result->set(result->min() - startOffset, result->max() + endOffset);
+        }
+      else
+        {
+          result->set(result->min() - endOffset, result->max() + startOffset);
+        }
+    }
+}
+
+
+/* Calculate the full extent of the match sequence to display, in display coords,
+ * and cache the result in the msp. Includes any portions of unaligned sequence that we're
+ * displaying */
+void mspCalculateFullExtents(MSP *msp, const BlxContext* const bc, const int numUnalignedBases)
+{
+  mspCalcFullSRange(msp, bc->flags, numUnalignedBases, bc->featureLists[BLXMSP_POLYA_SITE], &msp->fullSRange);
+  mspCalcFullQRange(msp, bc->flags, numUnalignedBases, bc->featureLists[BLXMSP_POLYA_SITE], bc->numFrames, &msp->fullSRange, &msp->fullRange);
+ 
+  /* convert the Q range to display coords */
+  const int frame = mspGetRefFrame(msp, bc->seqType);
+  const int coord1 = convertDnaIdxToDisplayIdx(msp->fullRange.min(), bc->seqType, frame, bc->numFrames, bc->displayRev, &bc->refSeqRange, NULL);
+  const int coord2 = convertDnaIdxToDisplayIdx(msp->fullRange.max(), bc->seqType, frame, bc->numFrames, bc->displayRev, &bc->refSeqRange, NULL);
+  msp->fullRange.set(coord1, coord2);
+  
+  /* Remember the max len of all the MSPs in the detail-view */
+  if (typeShownInDetailView(msp->type) && msp->fullRange.length() > getMaxMspLen())
+    {
+      setMaxMspLen(msp->fullRange.length());
+    }
+}
+
+
+/* Convert the ref-seq range of the given msp in display coords and cache it in the msp */
+static void mspCalculateDisplayRange(MSP *msp, const BlxContext* const bc)
+{
+  const int frame = mspGetRefFrame(msp, bc->seqType);
+  const int coord1 = convertDnaIdxToDisplayIdx(msp->qRange.min(), bc->seqType, frame, bc->numFrames, bc->displayRev, &bc->refSeqRange, NULL);
+  const int coord2 = convertDnaIdxToDisplayIdx(msp->qRange.max(), bc->seqType, frame, bc->numFrames, bc->displayRev, &bc->refSeqRange, NULL);
+  msp->displayRange.set(coord1, coord2);  
+}
+
+
+/* This caches the display range (in display coords rather than dna coords,
+ * and inverted if the display is inverted) for each MSP */
+void cacheMspDisplayRanges(const BlxContext* const bc, const int numUnalignedBases)
+{
+  /* This also calculates the max msp len */
+  setMaxMspLen(0);
+  
+  MSP *msp = bc->mspList;
+  for ( ; msp; msp = msp->next)
+    {
+      mspCalculateDisplayRange(msp, bc);
+      mspCalculateFullExtents(msp, bc, numUnalignedBases);
+    }
+}
+
+
+/* Return the match-sequence coord of an MSP at the given reference-sequence coord,
+ * where the MSP is a gapped MSP and the ref-seq coord is known to lie within the
+ * MSP's alignment range. */
+static gboolean mspGetGappedAlignmentCoord(const MSP *msp, const int qIdx, const BlxContext *bc, int *result_out)
+{
+  gboolean success = FALSE;
+  int result = UNSET_INT;
+  
+  const gboolean qForward = (mspGetRefStrand(msp) == BLXSTRAND_FORWARD);
+  const gboolean sameDirection = (mspGetRefStrand(msp) == mspGetMatchStrand(msp));
+
+  /* Gapped alignment. Look to see if x lies inside one of the "gaps" ranges. */
+  GSList *rangeItem = msp->gaps;
+  
+  for ( ; rangeItem ; rangeItem = rangeItem->next)
+    {
+      CoordRange *curRange = (CoordRange*)(rangeItem->data);
+      
+      int qRangeMin, qRangeMax, sRangeMin, sRangeMax;
+      getCoordRangeExtents(curRange, &qRangeMin, &qRangeMax, &sRangeMin, &sRangeMax);
+      
+      /* We've "found" the value if it's in or before this range. Note that the
+       * the range values are in decreasing order if the q strand is reversed. */
+      gboolean found = qForward ? qIdx <= qRangeMax : qIdx >= qRangeMin;
+      
+      if (found)
+        {
+          gboolean inRange = (qForward ? qIdx >= qRangeMin : qIdx <= qRangeMax);
+          
+          if (inRange)
+            {
+              /* It's inside this range. Calculate the actual index. */
+              int offset = (qIdx - qRangeMin) / bc->numFrames;
+              result = sameDirection ? sRangeMin + offset : sRangeMax - offset;
+              success = TRUE;
+            }
+          
+          break;
+        }
+    }
+  
+  if (success && result_out)
+    *result_out = result;
+
+  return success;
+}
+
+
+/* Return the match-sequence coord of an MSP at the given reference-sequence coord,
+ * where the MSP is an ungapped MSP and the ref-seq coord is known to lie within the
+ * MSP's alignment range. */
+static gboolean mspGetUngappedAlignmentCoord(const MSP *msp, const int qIdx, const BlxContext *bc, int *result_out)
+{
+  gboolean success = FALSE;
+  int result = UNSET_INT;
+  
+  /* If strands are in the same direction, find the offset from qRange.min and add it to 
+   * sRange.min. If strands are in opposite directions, find the offset from qRange.min and
+   * subtract it from sRange.max. Note that the offset could be negative if we're outside
+   * the alignment range. */
+  int offset = (qIdx - msp->qRange.min()) / bc->numFrames ;
+  const gboolean sameDirection = (mspGetRefStrand(msp) == mspGetMatchStrand(msp));
+
+  result = (sameDirection) ? msp->sRange.min() + offset : msp->sRange.max() - offset ;
+  
+  if (result < msp->sRange.min() || result > msp->sRange.max())
+    {
+      result = UNSET_INT;
+      success = FALSE;
+    }
+  else
+    {
+      success = TRUE;
+    }
+  
+  if (success && result_out)
+    *result_out = result;
+
+  return success;
+}  
+
+
+/* Return the match-sequence coord of an MSP at the given reference-sequence coord,
+ * where the ref-seq coord is known to lie outside the MSP's alignment range. The 
+ * result will be unset unless the option to display unaligned portions of 
+ * sequence is enabled. */
+static gboolean mspGetUnalignedCoord(const MSP *msp, 
+                                     const int qIdx, 
+                                     const gboolean seqSelected, 
+                                     const int numUnalignedBases, 
+                                     const BlxContext *bc,
+                                     int *result_out)
+{
+  gboolean success = FALSE;
+  int result = UNSET_INT;
+  
+  /* First convert to display coords */
+  const int frame = mspGetRefFrame(msp, bc->seqType);
+  const int displayIdx = convertDnaIdxToDisplayIdx(qIdx, bc->seqType, frame, bc->numFrames, bc->displayRev, &bc->refSeqRange, NULL);
+  const IntRange* const mspRange = mspGetDisplayRange(msp);
+
+  /* Note that because we have converted to display coords the ref seq coords are
+   * now in the direction of the display, regardless of the ref seq strand. */
+  const gboolean sameDirection = (mspGetMatchStrand(msp) == mspGetRefStrand(msp));
+  const gboolean sForward = (sameDirection != bc->displayRev);
+  
+  if (displayIdx < mspRange->min())
+    {
+      /* Find the offset backwards from the low coord and subtract it from the low end
+       * of the s coord range (or add it to the high end, if the directions are opposite).
+       * We're working in display coords here. */
+      const int offset = mspRange->min() - displayIdx;
+      result = sForward ? msp->sRange.min() - offset : msp->sRange.max() + offset;
+      success = TRUE;
+    }
+  else
+    {
+      /* Find the offset forwards from the high coord and add it to the high end of the
+       * s coord range (or subtract it from the low end, if the directions are opposite). */
+      const int offset = displayIdx - mspRange->max();
+      result = sForward ? msp->sRange.max() + offset : msp->sRange.min() - offset;
+      success = TRUE;
+    }
+  
+  /* Get the full display range of the match sequence. If the result is still out of range
+   * then there's nothing to show for this qIdx. */
+  const IntRange *fullSRange = mspGetFullSRange(msp, seqSelected, bc);
+  
+  if (!valueWithinRange(result, fullSRange))
+    {
+      result = UNSET_INT;
+      success = FALSE;
+    }
+  
+  if (success && result_out)
+    *result_out = result;
+
+  return success;
+}
+
+
+
+/* Given a base index on the reference sequence, find the corresonding base 
+ * in the match sequence. Returns TRUE and sets the result if successful. */
+gboolean mspGetMatchCoord(const MSP *msp, 
+                          const int qIdx, 
+                          const gboolean seqSelected,
+                          const int numUnalignedBases,
+                          BlxContext *bc,
+                          int *result_out)
+{
+  gboolean success = FALSE;
+  
+  if (mspIsBlastMatch(msp) || mspIsBoxFeature(msp))
+    {
+      const gboolean inMspRange = valueWithinRange(qIdx, &msp->qRange);
+      
+      if (msp->gaps && g_slist_length(msp->gaps) >= 1 && inMspRange)
+        {
+          success = mspGetGappedAlignmentCoord(msp, qIdx, bc, result_out);
+        }
+      else if (!inMspRange && mspIsBlastMatch(msp))
+        {
+          /* The q index is outside the alignment range but if the option to show
+           * unaligned sequence is enabled we may still have a valie result. */
+          success = mspGetUnalignedCoord(msp, qIdx, seqSelected, numUnalignedBases, bc, result_out);
+        }
+      else
+        {
+          success = mspGetUngappedAlignmentCoord(msp, qIdx, bc, result_out);
+        }
+    }
+  
+  return success;
+}
+
+
+
+/***********************************************************
+ *               General
+ ***********************************************************/
+
+/* Redraw the entire blixem window. (Call blxWindowRedrawAll directly where possible,
+ * rather than this function, which relies on the global variable 'blixemWindow'). */
+void blviewRedraw(void)
+{
+  if (blixemWindow)
+    {
+      blxWindowRedrawAll(blixemWindow);
+    }
+}
+
+GtkWidget* getBlixemWindow()
+{
+  return blixemWindow;
+}
+
+
+/* Reset any global variables / singleton instances */
+void blviewResetGlobals()
+{
+  blixemWindow = NULL;
+  destroyMessageList();
+}
+
+/***********************************************************
+ *               Styles and colours
+ ***********************************************************/
+
+/* Set the given BlxColor elements from the given color string(s). Works out some good defaults
+ * for blxColor.selected blxcolor.print etc if these colors are not given */
+static void setBlxColorValues(const char *normal, const char *selected, BlxColor *blxColor, GError **error)
+{
+  GError *tmpError = NULL;
+  
+  if (normal)
+    {
+      getColorFromString(normal, &blxColor->normal, &tmpError);
+
+      if (!tmpError)
+        {
+          getSelectionColor(&blxColor->normal, &blxColor->selected); /* will use this if selection color is not given/has error */
+          
+          /* Calculate print coords as a greyscale version of normal colors */
+          convertToGrayscale(&blxColor->normal, &blxColor->print);            /* calculate print colors, because they are not given */
+          getSelectionColor(&blxColor->print, &blxColor->printSelected);
+        }
+
+      /* Treat white as transparent. Not ideal but blixem can read zmap styles
+       * files where this assumption is made */
+      blxColor->transparent = (!strncasecmp(normal, "white", 5) || !strncasecmp(normal, "#ffffff", 7));
+    }
+  else
+    {
+      blxColor->transparent = TRUE;
+    }
+
+  /* Use the selected-color string, if given */
+  if (!tmpError && selected)
+    {
+      getColorFromString(selected, &blxColor->selected, &tmpError);
+    }
+  
+  if (tmpError)
+    g_propagate_error(error, tmpError);
+}
+
+
+/* Create a BlxStyle. For transcripts, CDS and UTR features can have different colors, but they
+ * are from the same source and hence have the same style object. We therefore use the default
+ * fillColor, lineColor etc. variables for CDS features and provide additional options to supply 
+ * UTR colors as well. */
+BlxStyle* createBlxStyle(const char *styleName, 
+			 const char *fillColor, 
+			 const char *fillColorSelected, 
+			 const char *lineColor, 
+			 const char *lineColorSelected, 
+			 const char *fillColorUtr, 
+			 const char *fillColorUtrSelected, 
+			 const char *lineColorUtr, 
+			 const char *lineColorUtrSelected, 
+			 GError **error)
+{
+  BlxStyle *style = new BlxStyle;
+  GError *tmpError = NULL;
+
+  if (!styleName)
+    {
+      g_set_error(error, BLX_ERROR, 1, "Style name is NULL.\n");
+    }
+    
+  if (!tmpError)
+    {
+      style->styleName = g_strdup(styleName);
+    }
+  
+  if (!tmpError)
+    {      
+      setBlxColorValues(fillColor ? fillColor : fillColorUtr,
+                        fillColorSelected ? fillColorSelected : fillColorUtrSelected,
+                        &style->fillColor, &tmpError);
+    }
+  
+  if (!tmpError)
+    {
+      setBlxColorValues(lineColor ? lineColor : lineColorUtr,
+                        lineColorSelected ? lineColorSelected : lineColorUtrSelected,
+                        &style->lineColor, &tmpError);
+    }
+  
+  if (!tmpError)
+    {
+      setBlxColorValues(fillColorUtr ? fillColorUtr : fillColor,
+                        fillColorUtrSelected ? fillColorUtrSelected : fillColorSelected,
+                        &style->fillColorUtr, &tmpError);
+    }
+
+  if (!tmpError)
+    {
+      setBlxColorValues(lineColorUtr ? lineColorUtr : lineColor,
+                        lineColorUtrSelected ? lineColorUtrSelected : lineColorSelected,
+                        &style->lineColorUtr, &tmpError);
+    }
+
+  if (tmpError)
+    {
+      delete style;
+      style = NULL;
+      g_propagate_error(error, tmpError);
+    }
+  
+  return style;
+}
+
+
+/* Destroy a BlxStyle */
+void destroyBlxStyle(BlxStyle *style)
+{
+  if (style)
+    {
+      g_free(style->styleName);
+    }
+}
+
+
+/* This function highlights any regions within the given display range that
+ * are assembly gaps (which are BLXMSP_GAP type MSPs in the given MSP array).
+ * The given rect defines the drawing area on the given drawable that corresponds
+ * to the given display range. Gaps that lie within the display range are drawn
+ * within the rect at the appropriate positions. */
+void drawAssemblyGaps(GtkWidget *widget,
+                      GdkDrawable *drawable,
+                      GdkColor *color,
+                      const gboolean displayRev,
+                      GdkRectangle *rect, 
+                      const IntRange* const dnaRange,
+                      const GArray *mspArray)
+{
+  /* See if any gaps lie within the display range. */
+  int i = 0;
+  MSP *gap = mspArrayIdx(mspArray, i);
+  
+  for ( ; gap; gap = mspArrayIdx(mspArray, ++i))
+    {
+      if (rangesOverlap(&gap->qRange, dnaRange))
+        {
+	  /* Draw to max coord plus one (or min coord minus one if reversed) to be inclusive */
+          const int gapMin = gap->qRange.min(true, displayRev);
+          const int gapMax = gap->qRange.max(true, displayRev);
+
+	  const int x1 = convertBaseIdxToRectPos(gapMin, rect, dnaRange, TRUE, displayRev, TRUE);
+	  const int x2 = convertBaseIdxToRectPos(gapMax, rect, dnaRange, TRUE, displayRev, TRUE);
+          
+	  const int width = max(MIN_GAP_HIGHLIGHT_WIDTH, abs(x2 - x1));
+	
+          cairo_t *cr = gdk_cairo_create(drawable);
+          gdk_cairo_set_source_color(cr, color);
+          cairo_rectangle(cr, min(x1, x2), 0, width, widget->allocation.height);
+          cairo_clip(cr);
+          cairo_paint_with_alpha(cr, 0.1);
+          cairo_destroy(cr);
+        }
+    }
+  
+}
+
+
+/* Get the color strings for the given group from the given 
+ * styles file. If the string is not found then recurse
+ * through any parent styles */
+static void getStylesFileColorsRecursive(GKeyFile *keyFile,
+                                         const char *group,
+                                         BlxStyleColors *colors,
+                                         GError **error)
+{
+  /* Loop through the normal colors, if we still need to find any */
+  if (!colors->fillColor || !colors->lineColor ||
+      !colors->fillColorSelected || !colors->lineColorSelected)
+    {
+      char **normalColors = g_key_file_get_string_list(keyFile, group, "colours", NULL, NULL);
+      char **color = normalColors;
+      
+      if (normalColors)
+        colors->normalFound = TRUE;
+      
+      for ( ; color && *color; ++color)
+        {
+          /* Ignore leading whitespace */
+          char *c = *color;
+          while (*c == ' ')
+            ++c;
+          
+          if (c && *c)
+            {
+              if (!strncasecmp(c, "normal fill ", 12))
+                {
+                  if (!colors->fillColor) 
+                    colors->fillColor = g_strchug(g_strchomp(g_strdup(c + 12)));
+                }
+              else if (!strncasecmp(c, "normal border ", 14))
+                {
+                  if (!colors->lineColor)
+                    colors->lineColor = g_strchug(g_strchomp(g_strdup(c + 14)));
+                }
+              else if (!strncasecmp(c, "selected fill ", 14))
+                {
+                  if (!colors->fillColorSelected)
+                    colors->fillColorSelected = g_strchug(g_strchomp(g_strdup(c + 14)));
+                }
+              else if (!strncasecmp(c, "selected border ", 16))
+                {
+                  if (!colors->lineColorSelected)
+                    colors->lineColorSelected = g_strchug(g_strchomp(g_strdup(c + 16)));
+                }
+              else if (error && *error)
+                {
+                  postfixError(*error, "  '%s' is not a valid color field\n", c);
+                }
+              else
+                {
+                  g_set_error(error, BLX_ERROR, 1, "  '%s' is not a valid color field\n", c);
+                }
+            }
+        }
+
+      if (normalColors)
+        g_strfreev(normalColors);
+    }
+
+  /* Loop through the CDs colors, if we still need to find any */
+  if (!colors->fillColorCds || !colors->lineColorCds ||
+      !colors->fillColorCdsSelected || !colors->lineColorCdsSelected)
+    {
+      char **cdsColors = g_key_file_get_string_list(keyFile, group, "transcript-cds-colours", NULL, NULL);
+      char **color = cdsColors;
+
+      if (cdsColors)
+        colors->cdsFound = TRUE;
+
+      for ( ; color && *color; ++color)
+        {
+          /* Ignore leading whitespace */
+          char *c = *color;
+          while (*c == ' ')
+            ++c;
+          
+          if (c && *c)
+            {
+              if (!strncasecmp(c, "normal fill ", 12))
+                {
+                  if (!colors->fillColorCds) 
+                    colors->fillColorCds = g_strchug(g_strchomp(g_strdup(c + 12)));
+                }
+              else if (!strncasecmp(c, "normal border ", 14))
+                {
+                  if (!colors->lineColorCds)
+                    colors->lineColorCds = g_strchug(g_strchomp(g_strdup(c + 14)));
+                }
+              else if (!strncasecmp(c, "selected fill ", 14))
+                {
+                  if (!colors->fillColorCdsSelected)
+                    colors->fillColorCdsSelected = g_strchug(g_strchomp(g_strdup(c + 14)));
+                }
+              else if (!strncasecmp(c, "selected border ", 16))
+                {
+                  if (!colors->lineColorCdsSelected)
+                    colors->lineColorCdsSelected = g_strchug(g_strchomp(g_strdup(c + 16)));
+                }
+              else if (error && *error)
+                {
+                  postfixError(*error, "  '%s' is not a valid color field\n", c);
+                }
+              else
+                {
+                  g_set_error(error, BLX_ERROR, 1, "  '%s' is not a valid color field\n", c);
+                }
+            }
+        }
+      
+      if (cdsColors)
+        g_strfreev(cdsColors);
+    }
+
+  /* If there are still any outstanding, recurse to the next parent */
+  if (!colors->fillColor || !colors->lineColor || 
+      !colors->fillColorSelected || !colors->lineColorSelected || 
+      !colors->fillColorCds || !colors->lineColorCds ||
+      !colors->fillColorCdsSelected || !colors->lineColorCdsSelected)
+    {
+      char *parent = g_key_file_get_string(keyFile, group, "parent-style", NULL);
+      
+      if (parent)
+        {
+          getStylesFileColorsRecursive(keyFile, parent, colors, error);
+          g_free(parent);
+        }
+    }
+}
+
+
+/* For backwards compatibility, read the old-style color fields
+ * for the given source (group) from the given key file. (The 
+ * key names were changed to be consistent with zmap). */
+static void readStylesFileColorsOld(GKeyFile *keyFile, 
+                                    const char *group, 
+                                    GSList **stylesList,
+                                    GError **error)
+{
+  char *fillColor = g_key_file_get_string(keyFile, group, "fill_color", NULL);
+  char *lineColor = g_key_file_get_string(keyFile, group, "line_color", NULL);
+  char *fillColorSelected = g_key_file_get_string(keyFile, group, "fill_color_selected", NULL);
+  char *lineColorSelected = g_key_file_get_string(keyFile, group, "line_color_selected", NULL);
+  char *fillColorUtr = g_key_file_get_string(keyFile, group, "fill_color_utr", NULL);
+  char *lineColorUtr = g_key_file_get_string(keyFile, group, "line_color_utr", NULL);
+  char *fillColorUtrSelected = g_key_file_get_string(keyFile, group, "fill_color_utr_selected", NULL);
+  char *lineColorUtrSelected = g_key_file_get_string(keyFile, group, "line_color_utr_selected", NULL);
+  
+  /* If there was an error, skip this group. Otherwise, go ahead and create the style */
+  if (fillColor && lineColor)
+    {
+      BlxStyle *style = createBlxStyle(group, 
+                                       fillColor, fillColorSelected,
+                                       lineColor, lineColorSelected,
+                                       fillColorUtr, fillColorUtrSelected,
+                                       lineColorUtr, lineColorUtrSelected,
+                                       error);
+
+      if (style)
+        *stylesList = g_slist_append(*stylesList, style);
+    }
+  else if (!fillColor)
+    {
+      g_set_error(error, BLX_ERROR, 1, "Style '%s' does not contain required field fill_color", group);
+    }
+  else if (!lineColor)
+    {
+      g_set_error(error, BLX_ERROR, 1, "Style '%s' does not contain required field line_color", group);
+    }
+  
+  
+  if (fillColor) g_free(fillColor);
+  if (lineColor) g_free(lineColor);
+  if (fillColorSelected) g_free(fillColorSelected);
+  if (lineColorSelected) g_free(lineColorSelected);
+  if (fillColorUtr) g_free(fillColorUtr);
+  if (lineColorUtr) g_free(lineColorUtr);
+  if (fillColorUtrSelected) g_free(fillColorUtrSelected);
+  if (lineColorUtrSelected) g_free(lineColorUtrSelected);
+}
+
+
+/* Read the new-style color fields for the given source (group) 
+ * from the given key file. Returns true if colors were found. */
+static gboolean readStylesFileColors(GKeyFile *keyFile, 
+                                     const char *group, 
+                                     GSList **stylesList,
+                                     GError **error)
+{
+  gboolean result = FALSE;
+  GError *tmpError = NULL;
+  g_key_file_set_list_separator(keyFile, ';');
+
+  /* Get the colors from the styles. We may need to recurse through multiple
+   * style parents before we find them. */
+  BlxStyleColors colors = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, FALSE, FALSE};
+  getStylesFileColorsRecursive(keyFile, group, &colors, &tmpError);
+  
+  /* If colors were found, create the style */
+  if (!tmpError && (colors.normalFound || colors.cdsFound))
+    {
+      /* Unfortunately blixem stores cds/utr colors differently to zmap, which
+       * leads to the following messy logic:
+       * If the optional cds colors are set then the default 'colors' field 
+       * in the styles file gives our utr colors and the 'transcript-cds-colors'
+       * field gives our normal colors. Otherwise, the 'colors' field gives our
+       * normal colors and we don't set the utr colors (because they default 
+       * to the normal colors). */
+      BlxStyle *style = NULL;
+      
+      if (colors.cdsFound)
+        {
+          style = createBlxStyle(group, 
+                                 colors.fillColorCds, colors.fillColorCdsSelected,
+                                 colors.lineColorCds, colors.lineColorCdsSelected,
+                                 colors.fillColor, colors.fillColorSelected,
+                                 colors.lineColor, colors.lineColorSelected,
+                                 &tmpError);
+        }
+      else
+        {
+          style = createBlxStyle(group, 
+                                 colors.fillColor, colors.fillColorSelected,
+                                 colors.lineColor, colors.lineColorSelected,
+                                 NULL, NULL,
+                                 NULL, NULL,
+                                 &tmpError);
+        }
+
+      if (style)
+        *stylesList = g_slist_append(*stylesList, style);
+
+      if (tmpError)
+        prefixError(tmpError, "  "); /* indent the error message */
+    }
+  
+  /* Clean up */
+  if (colors.fillColor) g_free(colors.fillColor);
+  if (colors.lineColor) g_free(colors.lineColor);
+  if (colors.fillColorSelected) g_free(colors.fillColorSelected);
+  if (colors.lineColorSelected) g_free(colors.lineColorSelected);
+  if (colors.fillColorCds) g_free(colors.fillColorCds);
+  if (colors.lineColorCds) g_free(colors.lineColorCds);
+  if (colors.fillColorCdsSelected) g_free(colors.fillColorCdsSelected);
+  if (colors.lineColorCdsSelected) g_free(colors.lineColorCdsSelected);
+
+  /* Error handling */
+  if (tmpError)
+    g_propagate_error(error, tmpError);
+
+  return result;
+}
+
+
+/* Read in the styles file. Returns a list of style structs for each style
+ * found. Uses the given key file if specified, otherwise checks to see
+ * if there is a key file specified in the config file. */
+GSList* blxReadStylesFile(const char *keyFileName_in, GError **error)
+{
+  GSList *result = NULL;
+
+  char *keyFileName = NULL;
+
+  if (keyFileName_in)
+    {
+      keyFileName = g_strdup(keyFileName_in);
+    }
+  else
+    {
+      /* See if the styles file is specified in the config */
+      GKeyFile *keyFile = blxGetConfig();
+
+      if (keyFile)
+        keyFileName = g_key_file_get_string(keyFile, BLIXEM_GROUP, STYLES_FILE_KEY, NULL);
+    }
+  
+  if (!keyFileName)
+    {
+      return result;
+    }
+  
+  /* Load the key file */
+  GKeyFile *keyFile = g_key_file_new();
+  GKeyFileFlags flags = G_KEY_FILE_NONE ;
+
+  if (g_key_file_load_from_file(keyFile, keyFileName, flags, error))
+    {
+      /* Get all the groups (i.e. style names) from the file */
+      gsize num_groups;
+      char **groups = g_key_file_get_groups(keyFile, &num_groups) ;
+
+      /* Loop through each style */
+      char **group;
+      int i;
+      GError *tmpError = NULL;
+      
+      for (i = 0, group = groups ; i < (int)num_groups ; i++, group++)
+	{
+          gboolean found = readStylesFileColors(keyFile, *group, &result, &tmpError);
+
+          /* If it wasn't found, look for old-style colors */
+          if (!found && !tmpError)
+            readStylesFileColorsOld(keyFile, *group, &result, NULL);
+
+          if (tmpError)
+            {
+              /* Compile all errors into one */
+              prefixError(tmpError, "[%s]\n", *group);
+              
+              if (error && *error)
+                postfixError(*error, "%s", tmpError->message);
+              else
+                g_set_error(error, BLX_ERROR, 1, "%s", tmpError->message);
+
+              g_error_free(tmpError);
+              tmpError = NULL;
+            }
+        }
+      
+      if (tmpError)
+        {          
+          g_propagate_error(error, tmpError);
+        }
+      
+      g_strfreev(groups);
+    }
+  
+  if (error && *error)
+    {
+      prefixError(*error, "Errors found while reading styles file '%s'\n", keyFileName);
+      postfixError(*error, "\n");
+    }
+
+  g_free(keyFileName);
+  g_key_file_free(keyFile) ;
+  keyFile = NULL ;
+  
+  return result;
+}
+
+
+/***********************************************************
+ *                        Utilities
+ ***********************************************************/
+
+/* Returns a string which is the name of the Blixem application. */
+const char *blxGetAppName()
+{
+  return BLIXEM_TITLE ;
+}
+
+/* Returns a string which is used to prefix window titles (full or abbrev
+ * depending on settings). */
+const char *blxGetTitlePrefix(const BlxContext * const bc)
+{
+  return bc->flags[BLXFLAG_ABBREV_TITLE] ? BLIXEM_PREFIX_ABBREV : BLIXEM_PREFIX ;
+}
+
+/* Returns a copyright string for the Blixem application. */
+const char *blxGetCopyrightString()
+{
+  return BLIXEM_COPYRIGHT_STRING ;
+}
+
+/* Returns the Blixem website URL. */
+const char *blxGetWebSiteString()
+{
+  return BLIXEM_WEBSITE_STRING ;
+}
+
+/* Returns a comments string for the Blixem application. Note that unlike the const
+ * functions, this one allocates a new string which must be free'd by the caller */
+char *blxGetCommentsString()
+{
+  char *result = g_strdup_printf("%s\n%s\n%s %s\n\n%s\n", 
+                                 BLIXEM_TITLE_STRING, 
+                                 gbtools::UtilsGetVersionTitle(),
+                                 UT_COMPILE_PHRASE, 
+                                 UT_MAKE_COMPILE_DATE(), 
+                                 AUTHOR_TEXT);
+
+  return result;
+}
+
+/* Returns a license string for the blx application. */
+const char *blxGetLicenseString()
+{
+  return BLIXEM_LICENSE_STRING ;
+}
+
+/* Returns a string representing the Version/Release/Update of the Blixem code. */
+const char *blxGetVersionString()
+{
+  return BLIXEM_VERSION_STRING ;
+}
+
+
+/***********************************************************
+ *                      Columns
+ ***********************************************************/
+
+/* Check if the column has a column-width set in the config and if so override the default value */
+static void getColumnWidthsConfig(BlxColumnInfo *columnInfo)
+{
+  /* Do nothing for the sequence column, because it has dynamic width */
+  if (columnInfo->columnId == BLXCOL_SEQUENCE)
+    return;
+    
+  GKeyFile *key_file = blxGetConfig();
+  GError *error = NULL;
+
+  if (key_file && g_key_file_has_group(key_file, COLUMN_WIDTHS_GROUP) && g_key_file_has_key(key_file, COLUMN_WIDTHS_GROUP, columnInfo->title, &error))
+    {
+      if (!error)
+        {
+          const int newWidth = g_key_file_get_integer(key_file, COLUMN_WIDTHS_GROUP, columnInfo->title, &error);
+          
+          if (error)
+            {
+              reportAndClearIfError(&error, G_LOG_LEVEL_CRITICAL);
+            }
+          else if (newWidth > 0)
+            {
+              columnInfo->width = newWidth;
+              columnInfo->showColumn = TRUE;
+            }
+          else
+            {
+              columnInfo->showColumn = FALSE;
+            }
+        }
+    }
+}
+
+
+/* Check if the column has a column-summary flag set in the config and if so 
+ * override the default value */
+static void getColumnSummaryConfig(BlxColumnInfo *columnInfo)
+{
+  /* Do nothing if we can't show the summary for this column */
+  if (!columnInfo->canShowSummary)
+    return;
+    
+  GKeyFile *key_file = blxGetConfig();
+
+  if (key_file && g_key_file_has_group(key_file, COLUMN_SUMMARY_GROUP))
+    {
+      /* The value is true if we should include the column in summary info, false if we should
+       * not. If the group exists but the column is not listed then that also indicates we should not
+       * show it (this call will correctly return false in that case). */
+      columnInfo->showSummary = g_key_file_get_boolean(key_file, COLUMN_SUMMARY_GROUP, columnInfo->title, NULL);
+    }
+}
+
+
+/* This checks if the column has any properties specified for it in the config
+ * file and, if so, overrides the default values in the given column with 
+ * the config file values. */
+static void getColumnConfig(BlxColumnInfo *columnInfo)
+{
+  getColumnWidthsConfig(columnInfo);
+  getColumnSummaryConfig(columnInfo);
+}
+
+//static void destroyColumnList(GList **columnList)
+//{
+//  GList *column = *columnList;
+//  
+//  for ( ; column; column = column->next)
+//    {
+//      g_free(column->data);
+//    }
+//    
+//  g_list_free(*columnList);
+//  *columnList = NULL;
+//}
+
+
+/* This creates BlxColumnInfo entries for each column required in the detail view. It
+ * returns a list of the columns created. */
+GList* blxCreateColumns(const gboolean optionalColumns, const gboolean customSeqHeader)
+{
+  GList *columnList = NULL;
+  
+  /* Create the columns' data structs. The columns appear in the order
+   * that they are added here. */
+  blxColumnCreate(BLXCOL_SEQNAME,     TRUE,             "Name",       G_TYPE_STRING, RENDERER_TEXT_PROPERTY,     BLXCOL_SEQNAME_WIDTH,        TRUE,            TRUE,  TRUE,  TRUE,  TRUE,   "Name",        NULL, NULL, &columnList);
+  blxColumnCreate(BLXCOL_SOURCE,      TRUE,             "Source",     G_TYPE_STRING, RENDERER_TEXT_PROPERTY,     BLXCOL_SOURCE_WIDTH,         TRUE,            TRUE,  TRUE,  TRUE,  TRUE,   "Source",      NULL, NULL, &columnList);
+                                                                                                                                                                                                              
+  blxColumnCreate(BLXCOL_ORGANISM,    TRUE,             "Organism",   G_TYPE_STRING, RENDERER_TEXT_PROPERTY,     BLXCOL_ORGANISM_WIDTH,       optionalColumns, TRUE,  TRUE,  TRUE,  TRUE,   "Organism",    "OS", NULL, &columnList);
+  blxColumnCreate(BLXCOL_GENE_NAME,   TRUE,             "Gene Name",  G_TYPE_STRING, RENDERER_TEXT_PROPERTY,     BLXCOL_GENE_NAME_WIDTH,      optionalColumns, FALSE, TRUE,  TRUE,  TRUE,   "Gene name",   "GN", NULL, &columnList);
+  blxColumnCreate(BLXCOL_TISSUE_TYPE, TRUE,             "Tissue Type",G_TYPE_STRING, RENDERER_TEXT_PROPERTY,     BLXCOL_TISSUE_TYPE_WIDTH,    optionalColumns, FALSE, TRUE,  TRUE,  TRUE,   "Tissue type", "FT", "tissue_type", &columnList);
+  blxColumnCreate(BLXCOL_STRAIN,      TRUE,             "Strain",     G_TYPE_STRING, RENDERER_TEXT_PROPERTY,     BLXCOL_STRAIN_WIDTH,         optionalColumns, FALSE, TRUE,  TRUE,  TRUE,   "Strain",      "FT", "strain", &columnList);
+                                                                                                                                                                             
+  /* Insert optional columns here, with a dynamically-created IDs that are >= BLXCOL_NUM_COLS */                                                                             
+  int columnId = BLXCOL_NUM_COLUMNS;                                                                                                                                         
+  blxColumnCreate((BlxColumnId)columnId++, TRUE,        "Description",G_TYPE_STRING, RENDERER_TEXT_PROPERTY,     BLXCOL_DEFAULT_WIDTH,        optionalColumns, FALSE, TRUE,  TRUE,  TRUE,   "Description", "DE", NULL, &columnList);
+                                                                                                                                                                                                             
+  blxColumnCreate(BLXCOL_GROUP,       TRUE,             "Group",      G_TYPE_STRING, RENDERER_TEXT_PROPERTY,     BLXCOL_GROUP_WIDTH,          TRUE,            FALSE, FALSE, FALSE, TRUE,   "Group",       NULL, NULL, &columnList);
+  blxColumnCreate(BLXCOL_SCORE,       TRUE,             "Score",      G_TYPE_DOUBLE, RENDERER_TEXT_PROPERTY,     BLXCOL_SCORE_WIDTH,          TRUE,            TRUE,  FALSE, FALSE, FALSE,  "Score",       NULL, NULL, &columnList);
+  blxColumnCreate(BLXCOL_ID,          TRUE,             "%Id",        G_TYPE_DOUBLE, RENDERER_TEXT_PROPERTY,     BLXCOL_ID_WIDTH,             TRUE,            TRUE,  FALSE, FALSE, FALSE,  "Identity",    NULL, NULL, &columnList);
+  blxColumnCreate(BLXCOL_START,       TRUE,             "Start",      G_TYPE_INT,    RENDERER_TEXT_PROPERTY,     BLXCOL_START_WIDTH,          TRUE,            TRUE,  FALSE, FALSE, FALSE,  "Position",    NULL, NULL, &columnList);
+  blxColumnCreate(BLXCOL_SEQUENCE,    !customSeqHeader, "Sequence",   G_TYPE_POINTER,RENDERER_SEQUENCE_PROPERTY, BLXCOL_SEQUENCE_WIDTH,       TRUE,            TRUE,  FALSE, FALSE, FALSE,  NULL,          "SQ", NULL, &columnList);
+  blxColumnCreate(BLXCOL_END,         TRUE,             "End",        G_TYPE_INT,    RENDERER_TEXT_PROPERTY,     BLXCOL_END_WIDTH,            TRUE,            TRUE,  FALSE, FALSE, FALSE,  NULL,          NULL, NULL, &columnList);
+
+  /* For each column, check if it is configured in the config file and if so update accordingly */
+  GList *columnItem  = columnList;
+
+  for ( ; columnItem; columnItem = columnItem->next)
+    {
+      BlxColumnInfo *columnInfo = (BlxColumnInfo*)(columnItem->data);
+      getColumnConfig(columnInfo);
+    }
+
+  return columnList;
+}
+
+
+/* Return the width of the column with the given column id */
+int getColumnWidth(const GList *columnList, const BlxColumnId columnId)
+{
+  int result = 0;
+
+  BlxColumnInfo *columnInfo = getColumnInfo(columnList, columnId);
+
+  if (columnInfo)
+    {
+      result = columnInfo->width;
+    }
+  
+  return result;
+}
+
+
+/* Return the width of the column with the given column id */
+const char* getColumnTitle(const GList *columnList, const BlxColumnId columnId)
+{
+  const char *result = NULL;
+  
+  BlxColumnInfo *columnInfo = getColumnInfo(columnList, columnId);
+
+  if (columnInfo)
+    {
+      result = columnInfo->title;
+    }
+  
+  return result;
+}
+
+
+/* Gets the x coords at the start/end of the given column and populate them into the range
+ * return argument. */
+void getColumnXCoords(const GList *columnList, const BlxColumnId columnId, IntRange *xRange)
+{
+  xRange->set(0, 0);
+  
+  /* Loop through all visible columns up to the given column, summing their widths. */
+  const GList *columnItem = columnList;
+  
+  for ( ; columnItem; columnItem = columnItem->next)
+    {
+      BlxColumnInfo *columnInfo = (BlxColumnInfo*)(columnItem->data);
+      
+      if (columnInfo->columnId != columnId)
+        {
+          if (showColumn(columnInfo))
+            xRange->setMin(xRange->min() + columnInfo->width);
+        }
+      else
+        {
+          /* We've got to the required column. Calculate the x coord at the end
+           * of this column and then break. */
+          if (showColumn(columnInfo))
+            xRange->setMax(xRange->min() + columnInfo->width);
+          else
+            xRange->setMax(xRange->min()); /* return zero-width if column is not visible */
+          
+          break;
+        }
+    }
+}
+
+
+/* Returns true if the given column should be visible */
+gboolean showColumn(BlxColumnInfo *columnInfo)
+{
+  return (columnInfo->showColumn && columnInfo->dataLoaded && columnInfo->width > 0);
+}
+
+
+/* Save the column widths to the given config file. */
+void saveColumnWidths(GList *columnList, GKeyFile *key_file)
+{
+  /* Loop through each column */
+  GList *listItem = columnList;
+  
+  for ( ; listItem; listItem = listItem->next)
+    {
+      BlxColumnInfo *columnInfo = (BlxColumnInfo*)(listItem->data);
+
+      if (columnInfo && columnInfo->columnId != BLXCOL_SEQUENCE)
+        {
+          /* If column is not visible, set width to zero to indicate that it should be hidden */
+          if (columnInfo->showColumn)
+            g_key_file_set_integer(key_file, COLUMN_WIDTHS_GROUP, columnInfo->title, columnInfo->width);
+          else
+            g_key_file_set_integer(key_file, COLUMN_WIDTHS_GROUP, columnInfo->title, 0);
+        }
+    }
+}
+
+
+/* Save the summary columns to the given config file. */
+void saveSummaryColumns(GList *columnList, GKeyFile *key_file)
+{
+  /* Loop through each column */
+  GList *listItem = columnList;
+  
+  for ( ; listItem; listItem = listItem->next)
+    {
+      BlxColumnInfo *columnInfo = (BlxColumnInfo*)(listItem->data);
+
+      if (columnInfo && columnInfo->canShowSummary)
+        {
+          g_key_file_set_boolean(key_file, COLUMN_SUMMARY_GROUP, columnInfo->title, columnInfo->showSummary);
+        }
+    }
+}
+
+
+/* Reset column widths to default values */
+void resetColumnWidths(GList *columnList)
+{
+  /* Quick and dirty: just set the width and visibility manually. This should be
+   * done differently so we can just loop through and find the correct values somehow;
+   * currently we run the risk of getting out of sync with the initial values set in
+   * blxCreateColumns */
+  getColumnInfo(columnList, BLXCOL_SEQNAME)->width = BLXCOL_SEQNAME_WIDTH;
+  getColumnInfo(columnList, BLXCOL_SEQNAME)->showColumn = TRUE;
+
+  getColumnInfo(columnList, BLXCOL_SCORE)->width = BLXCOL_SCORE_WIDTH;
+  getColumnInfo(columnList, BLXCOL_SCORE)->showColumn = TRUE;
+
+  getColumnInfo(columnList, BLXCOL_ID)->width = BLXCOL_ID_WIDTH;
+  getColumnInfo(columnList, BLXCOL_ID)->showColumn = TRUE;
+
+  getColumnInfo(columnList, BLXCOL_START)->width = BLXCOL_START_WIDTH;
+  getColumnInfo(columnList, BLXCOL_START)->showColumn = TRUE;
+
+  getColumnInfo(columnList, BLXCOL_SEQUENCE)->width = BLXCOL_SEQUENCE_WIDTH;
+  getColumnInfo(columnList, BLXCOL_SEQUENCE)->showColumn = TRUE;
+
+  getColumnInfo(columnList, BLXCOL_END)->width = BLXCOL_END_WIDTH;
+  getColumnInfo(columnList, BLXCOL_END)->showColumn = TRUE;
+
+  getColumnInfo(columnList, BLXCOL_SOURCE)->width = BLXCOL_SOURCE_WIDTH;
+  getColumnInfo(columnList, BLXCOL_SOURCE)->showColumn = TRUE;
+
+  getColumnInfo(columnList, BLXCOL_GROUP)->width = BLXCOL_GROUP_WIDTH;
+  getColumnInfo(columnList, BLXCOL_GROUP)->showColumn = FALSE;
+
+  getColumnInfo(columnList, BLXCOL_ORGANISM)->width = BLXCOL_ORGANISM_WIDTH;
+  getColumnInfo(columnList, BLXCOL_ORGANISM)->showColumn = TRUE;
+
+  getColumnInfo(columnList, BLXCOL_GENE_NAME)->width = BLXCOL_GENE_NAME_WIDTH;
+  getColumnInfo(columnList, BLXCOL_GENE_NAME)->showColumn = FALSE;
+
+  getColumnInfo(columnList, BLXCOL_TISSUE_TYPE)->width = BLXCOL_TISSUE_TYPE_WIDTH;
+  getColumnInfo(columnList, BLXCOL_TISSUE_TYPE)->showColumn = FALSE;
+
+  getColumnInfo(columnList, BLXCOL_STRAIN)->width = BLXCOL_STRAIN_WIDTH;
+  getColumnInfo(columnList, BLXCOL_STRAIN)->showColumn = FALSE;
+
+}
+
+
+
+/***************** end of file ***********************/
diff --git a/blixemApp/blxview.hpp b/blixemApp/blxview.hpp
new file mode 100644
index 0000000..fc29af9
--- /dev/null
+++ b/blixemApp/blxview.hpp
@@ -0,0 +1,42 @@
+/*  File: blxview.h
+ *  Author: Erik Sonnhammer, 1992-02-20
+ *  Copyright (c) 2009 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: External interface to blixem window code.
+ *----------------------------------------------------------------------------
+ */
+
+#ifndef DEF_BLXVIEW_H
+#define DEF_BLXVIEW_H
+
+
+#endif /*  !defined DEF_BLXVIEW_H */
diff --git a/blixemApp/blxwindow.cpp b/blixemApp/blxwindow.cpp
new file mode 100755
index 0000000..b2095b6
--- /dev/null
+++ b/blixemApp/blxwindow.cpp
@@ -0,0 +1,6862 @@
+/*  File: blxWindow.c
+ *  Author: Gemma Barson, 2009-11-24
+ *  Copyright (c) 2009 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: See blxWindow.h
+ *----------------------------------------------------------------------------
+ */
+
+#include <blixemApp/blxwindow.hpp>
+#include <blixemApp/blxcontext.hpp>
+#include <blixemApp/detailview.hpp>
+#include <blixemApp/detailviewtree.hpp>
+#include <blixemApp/bigpicture.hpp>
+#include <blixemApp/blxdotter.hpp>
+#include <blixemApp/exonview.hpp>
+#include <blixemApp/coverageview.hpp>
+#include <blixemApp/blxpanel.hpp>
+#include <seqtoolsUtils/utilities.hpp>
+#include <seqtoolsUtils/blxGff3Parser.hpp>
+#include <seqtoolsUtils/blxmsp.hpp>
+#include <gbtools/gbtools.hpp>
+#include <gdk/gdkkeysyms.h>
+#include <string.h>
+#include <ctype.h>
+#include <algorithm>
+
+using namespace std;
+
+
+#define DEFAULT_WINDOW_BORDER_WIDTH      1    /* used to change the default border width around the blixem window */
+#define DEFAULT_COVERAGE_VIEW_BORDER     12   /* size of border to allow around the coverage view */
+#define DEFAULT_FONT_SIZE_ADJUSTMENT     -2   /* used to start with a smaller font than the default widget font */
+#define DEFAULT_SCROLL_STEP_INCREMENT    5    /* how many bases the scrollbar scrolls by for each increment */
+#define DEFAULT_WINDOW_WIDTH_FRACTION    0.9  /* what fraction of the screen size the blixem window width defaults to */
+#define DEFAULT_WINDOW_HEIGHT_FRACTION   0.6  /* what fraction of the screen size the blixem window height defaults to */
+#define LOAD_DATA_TEXT                   "Load optional\ndata"
+#define DEFAULT_TABLE_XPAD               2    /* default x-padding to use in tables */
+#define DEFAULT_TABLE_YPAD               2    /* default y-padding to use in tables */
+#define MAX_RECOMMENDED_COPY_LENGTH      100000 /* warn if about to copy text longer than this to the clipboard */
+
+
+typedef enum {SORT_TYPE_COL, SORT_TEXT_COL, N_SORT_COLUMNS} SortColumns;
+
+
+/* Utility struct used when comparing sequences to a search string */
+typedef struct _CompareSeqData
+  {
+    const char *searchStr;    /* the string to search for */
+    BlxColumnId searchCol;    /* the column ID, which defines what data to search e.g. Name or Tissue Type */
+    BlxContext *bc;       /* the main context */
+    GList *matchList;         /* resulting list of all BlxSequences that match */
+    GError *error;
+  } SeqSearchData;
+
+
+/* Properties specific to the blixem window */
+class BlxWindowProperties
+{
+public:
+  GtkWidget *widget;
+  GtkWidget *bigPicture;          /* The top section of the view, showing a "big picture" overview of the alignments */
+  GtkWidget *detailView;          /* The bottom section of the view, showing a detailed list of the alignments */
+  GtkWidget *mainmenu;            /* The main menu */
+  GtkWidget *seqHeaderMenu;      /* The context menu for tree headers */
+  GtkActionGroup *actionGroup;    /* The action-group for the menus */
+
+  BlxContext *blxContext;       /* The blixem view context */
+
+  GtkPageSetup *pageSetup;          /* Page setup for printing */
+  GtkPrintSettings *printSettings;  /* Used so that we can re-use the same print settings as a previous print */
+};
+
+
+/* Local function declarations */
+static BlxWindowProperties*       blxWindowGetProperties(GtkWidget *widget);
+
+static void                       onHelpMenu(GtkAction *action, gpointer data);
+static void                       onAboutMenu(GtkAction *action, gpointer data);
+static void                       onQuit(GtkAction *action, gpointer data);
+static void                       onPrintMenu(GtkAction *action, gpointer data);
+static void                       onPageSetupMenu(GtkAction *action, gpointer data);
+static void                       onSettingsMenu(GtkAction *action, gpointer data);
+static void                       onLoadMenu(GtkAction *action, gpointer data);
+static void                       onCopySeqsMenu(GtkAction *action, gpointer data);
+static void                       onCopySeqDataMenu(GtkAction *action, gpointer data);
+static void                       onCopySeqDataMarkMenu(GtkAction *action, gpointer data);
+static void                       onCopyRefSeqDnaMenu(GtkAction *action, gpointer data);
+static void                       onCopyRefSeqDisplayMenu(GtkAction *action, gpointer data);
+static void                       onSortMenu(GtkAction *action, gpointer data);
+static void                       onZoomInMenu(GtkAction *action, gpointer data);
+static void                       onZoomOutMenu(GtkAction *action, gpointer data);
+static void                       onFindMenu(GtkAction *action, gpointer data);
+static void                       onGoToMenu(GtkAction *action, gpointer data);
+static void                       onPrevMatchMenu(GtkAction *action, gpointer data);
+static void                       onNextMatchMenu(GtkAction *action, gpointer data);
+static void                       onFirstMatchMenu(GtkAction *action, gpointer data);
+static void                       onLastMatchMenu(GtkAction *action, gpointer data);
+static void                       onPageLeftMenu(GtkAction *action, gpointer data);
+static void                       onPageRightMenu(GtkAction *action, gpointer data);
+static void                       onScrollLeft1Menu(GtkAction *action, gpointer data);
+static void                       onScrollRight1Menu(GtkAction *action, gpointer data);
+static void                       onSquashMatchesMenu(GtkAction *action, gpointer data);
+static void                       onToggleStrandMenu(GtkAction *action, gpointer data);
+static void                       onViewMenu(GtkAction *action, gpointer data);
+static void                       onCreateGroupMenu(GtkAction *action, gpointer data);
+static void                       onEditGroupsMenu(GtkAction *action, gpointer data);
+static void                       onCreateQuickGroup(GtkAction *action, gpointer data);
+static void                       onCreateQuickFilter(GtkAction *action, gpointer data);
+static void                       onClearGroups(GtkAction *action, gpointer data);
+static void                       onHideSources(GtkAction *action, gpointer data);
+static void                       onDotterMenu(GtkAction *action, gpointer data);
+static void                       onCloseAllDottersMenu(GtkAction *action, gpointer data);
+static void                       onSelectFeaturesMenu(GtkAction *action, gpointer data);
+static void                       onDeselectAllRows(GtkAction *action, gpointer data);
+static void                       onStatisticsMenu(GtkAction *action, gpointer data);
+
+static gboolean                   onKeyPressBlxWindow(GtkWidget *window, GdkEventKey *event, gpointer data);
+static void                       onUpdateBackgroundColor(GtkWidget *blxWindow);
+
+static void                       onDestroyBlxWindow(GtkWidget *widget);
+
+static BlxStrand                  blxWindowGetInactiveStrand(GtkWidget *blxWindow);
+
+static GtkComboBox*               widgetGetComboBox(GtkWidget *widget);
+static BlxColumnId                getColumnFromComboBox(GtkComboBox *combo);
+
+static void                       onButtonClickedDeleteGroup(GtkWidget *button, gpointer data);
+static void                       blxWindowGroupsChanged(GtkWidget *blxWindow);
+static void                       getSequencesThatMatch(gpointer listDataItem, gpointer data);
+static GList*                     getSeqStructsFromText(GtkWidget *blxWindow, const char *inputText, const BlxColumnId searchCol, GError **error);
+
+static void                       createSortBox(GtkBox *parent, GtkWidget *detailView, const BlxColumnId initSortColumn, GList *columnList, const char *labelText, const gboolean searchableOnly);
+static GtkWidget*                 createCheckButton(GtkBox *box, const char *mnemonic, const char *tooltip, const gboolean isActive, GCallback callback, gpointer data);
+static void                       blxWindowSetUsePrintColors(GtkWidget *blxWindow, const gboolean usePrintColors);
+static gboolean                   blxWindowGetUsePrintColors(GtkWidget *blxWindow);
+
+static void                       blxWindowFindDnaString(GtkWidget *blxWindow, const char *inputSearchStr, const int startCoord, const gboolean searchLeft, const gboolean findAgain, GError **error);
+static GList*                     findSeqsFromList(GtkWidget *blxWindow, const char *inputText, const BlxColumnId inputCol, const gboolean rememberSearch, const gboolean findAgain, GError **error);
+static int                        getSearchStartCoord(GtkWidget *blxWindow, const gboolean startBeginning, const gboolean searchLeft);
+static GList*                     findSeqsFromColumn(GtkWidget *blxWindow, const char *inputText, const BlxColumnId searchCol, const gboolean rememberSearch, const gboolean findAgain, GError **error);
+static GtkWidget*                 dialogChildGetBlxWindow(GtkWidget *child);
+static gdouble                    calculateMspData(MSP *mspList, BlxContext *bc);
+
+static gboolean                   setFlagFromButton(GtkWidget *button, gpointer data);
+static void                       copySelectedSeqDataToClipboard(GtkWidget *blxWindow);
+static void                       copySelectedSeqRangeToClipboard(GtkWidget *blxWindow, const int fromIdx, const int toIdx);
+static void                       copyRefSeqToClipboard(GtkWidget *blxWindow, const int fromIdx_in, const int toIdx_in);
+static void                       copyRefSeqTranslationToClipboard(GtkWidget *blxWindow, const int fromIdx_in, const int toIdx_in);
+
+static void                       saveBlixemSettings(GtkWidget *blxWindow);
+
+
+/* MENU BUILDERS */
+
+/* Standard menu entries */
+static const GtkActionEntry mainMenuEntries[] = {
+  { "CopyMenuAction",   NULL, "Copy"},
+  { "GroupMenuAction",  NULL, "Group/Filter"},
+
+  { "Quit",             GTK_STOCK_QUIT,           "_Quit",                    "<control>Q",         "Quit  Ctrl+Q",                         G_CALLBACK(onQuit)},
+  { "Help",             GTK_STOCK_HELP,           "_Help",                    "<control>H",         "Display help  Ctrl+H",                 G_CALLBACK(onHelpMenu)},
+  { "About",            GTK_STOCK_ABOUT,          "About",                    NULL,                 "Program information",                  G_CALLBACK(onAboutMenu)},
+  { "Print",            GTK_STOCK_PRINT,          "_Print...",                "<control>P",         "Print  Ctrl+P",                        G_CALLBACK(onPrintMenu)},
+  { "PageSetup",        GTK_STOCK_PAGE_SETUP,     "Page set_up...",           NULL,                 "Page setup",                           G_CALLBACK(onPageSetupMenu)},
+  { "Settings",         GTK_STOCK_PREFERENCES,    "_Settings...",             "<control>S",         "Settings  Ctrl+S",                     G_CALLBACK(onSettingsMenu)},
+  { "Load",             GTK_STOCK_OPEN,           "_Open features file...",    NULL,                "Load additional features from file  Ctrl+O", G_CALLBACK(onLoadMenu)},
+
+  { "CopySeqNames",     NULL,                     "Copy match name(s)",       "<control>C",         "Copy selected match sequence's name(s)  Ctrl+C", G_CALLBACK(onCopySeqsMenu)},
+  { "CopySeqData",      NULL,                     "Copy match sequence (entire sequence)",  NULL,   "Copy whole sequence for selected match",         G_CALLBACK(onCopySeqDataMenu)},
+  { "CopySeqDataMark",  NULL,                     "Copy match sequence (selected section)","<shift><control>C","Copy selected match sequence segment  Shift+Ctrl+C", G_CALLBACK(onCopySeqDataMarkMenu)},
+  { "CopyRefSeqDna",    NULL,                     "Copy reference DNA",       "<alt>C",             "Copy selected reference sequence DNA  Alt+C", G_CALLBACK(onCopyRefSeqDnaMenu)},
+  { "CopyRefSeqDisplay",NULL,                     "Copy reference translation (current frame)","<shift><alt>C","Copy selected reference sequence translation  Shift+Alt+C", G_CALLBACK(onCopyRefSeqDisplayMenu)},
+
+  { "Sort",             GTK_STOCK_SORT_ASCENDING, "Sort...",                  NULL,                 "Sort sequences",                       G_CALLBACK(onSortMenu)},
+  { "ZoomIn",           GTK_STOCK_ZOOM_IN,        "Zoom in",                  "equal",              "Zoom in  =",                           G_CALLBACK(onZoomInMenu)},
+  { "ZoomOut",          GTK_STOCK_ZOOM_OUT,       "Zoom out",                 "minus",              "Zoom out  -",                          G_CALLBACK(onZoomOutMenu)},
+  { "GoTo",             GTK_STOCK_JUMP_TO,        "Go to position...",        "P",                  "Go to position  P",                    G_CALLBACK(onGoToMenu)},
+  { "FirstMatch",       GTK_STOCK_GOTO_FIRST,     "First match",              "<control>Home",      "Go to first match in selection (or all, if none selected)  Ctrl+Home",    G_CALLBACK(onFirstMatchMenu)},
+  { "PrevMatch",        GTK_STOCK_GO_BACK,        "Previous match",           "<control>Left",      "Go to previous match in selection (or all, if none selected)  Ctrl+Left", G_CALLBACK(onPrevMatchMenu)},
+  { "NextMatch",        GTK_STOCK_GO_FORWARD,     "Next match",               "<control>Right",     "Go to next match in selection (or all, if none selected)  Ctrl+Right",    G_CALLBACK(onNextMatchMenu)},
+  { "LastMatch",        GTK_STOCK_GOTO_LAST,      "Last match",               "<control>End",       "Go to last match in selection (or all, if none selected)  Ctrl+End",      G_CALLBACK(onLastMatchMenu)},
+  { "BackPage",         NULL,                     "<<",                       "<control>comma",     "Scroll left one page  Ctrl+,",         G_CALLBACK(onPageLeftMenu)},
+  { "BackOne",          NULL,                     "<",                        "comma",              "Scroll left one index  ,",             G_CALLBACK(onScrollLeft1Menu)},
+  { "FwdOne",           NULL,                     ">",                        "period",             "Scroll right one index  .",            G_CALLBACK(onScrollRight1Menu)},
+  { "FwdPage",          NULL,                     ">>",                       "<control>period",    "Scroll right one page  Ctrl+.",        G_CALLBACK(onPageRightMenu)},
+  { "Find",             GTK_STOCK_FIND,           "Find...",                  "<control>F",         "Find sequences  Ctrl+F",               G_CALLBACK(onFindMenu)},
+  { "ToggleStrand",     GTK_STOCK_REFRESH,        "Toggle strand",            "T",                  "Toggle the active strand  T",          G_CALLBACK(onToggleStrandMenu)},
+
+  { "View",             GTK_STOCK_FULLSCREEN,     "_View...",                 "V",                  "Edit view settings  V",                G_CALLBACK(onViewMenu)},
+  { "CreateGroup",      NULL,                     "Create Custom Group...",   "<shift><control>G",  "Create group  Shift+Ctrl+G",           G_CALLBACK(onCreateGroupMenu)},
+  { "EditGroups",       GTK_STOCK_EDIT,           "Edit _Groups...",          "<control>G",         "Edit groups  Ctrl+G",                  G_CALLBACK(onEditGroupsMenu)},
+  { "CreateQuickGroup", NULL,                     "Create group from clipboard", "G",               "Create a group based on features on the clipboard (clears existing group; hold shift to add to it)  G",  G_CALLBACK(onCreateQuickGroup)},
+  { "CreateQuickFilter",NULL,                     "Create filter from clipboard","F",               "Create a filter based on features on the clipboard (clears existing filter; hold shift to add to it)  F",  G_CALLBACK(onCreateQuickFilter)},
+  { "HideSources",      NULL,                     "Hide source(s)",           "H",                  "Hide the selected source(s)  H",        G_CALLBACK(onHideSources)},
+  { "ClearGroups",      NULL,                     "Clear groups/filters",     "C",                  "Disable all groups/filters (you can re-enable them from the Groups dialog)  C",        G_CALLBACK(onClearGroups)},
+  { "DeselectAllRows",  NULL,                     "Deselect _all",            "<shift><control>A",  "Deselect all  Shift+Ctrl+A",           G_CALLBACK(onDeselectAllRows)},
+
+  { "Dotter",           NULL,                     "_Dotter...",               "<control>D",         "Start Dotter  Ctrl+D",                 G_CALLBACK(onDotterMenu)},
+  { "CloseAllDotters",  GTK_STOCK_CLOSE,          "Close all Dotters",        NULL,                 "Close all Dotters",                    G_CALLBACK(onCloseAllDottersMenu)},
+  { "SelectFeatures",   GTK_STOCK_SELECT_ALL,     "Feature series selection tool...",  NULL,           "Feature series selection tool",        G_CALLBACK(onSelectFeaturesMenu)},
+
+  { "Statistics",       NULL,                     "Statistics",               NULL,                 "Show memory statistics",               G_CALLBACK(onStatisticsMenu)}
+};
+
+
+/* Menu entries for toggle-able actions */
+static GtkToggleActionEntry toggleMenuEntries[] = {
+  { "SquashMatches",    GTK_STOCK_DND_MULTIPLE,  "Squash matches",           NULL,                 "Squash matches", G_CALLBACK(onSquashMatchesMenu), FALSE} /* must be item 0 in list */
+};
+
+
+/* This defines the layout of the menu for a standard user */
+static const char standardMenuDescription[] =
+"<ui>"
+"  <popup name='ContextMenu' accelerators='true'>"
+"      <menuitem action='Quit'/>"
+"      <menuitem action='Help'/>"
+"      <menuitem action='Print'/>"
+//"      <menuitem action='PageSetup'/>"
+"      <menuitem action='Settings'/>"
+"      <menuitem action='Load'/>"
+"      <separator/>"
+"      <menu action='CopyMenuAction'>"
+"        <menuitem action='CopySeqNames'/>"
+"        <menuitem action='CopySeqData'/>"
+"        <menuitem action='CopySeqDataMark'/>"
+"        <menuitem action='CopyRefSeqDna'/>"
+"        <menuitem action='CopyRefSeqDisplay'/>"
+"      </menu>"
+"      <menuitem action='View'/>"
+"      <menu action='GroupMenuAction'>"
+"        <menuitem action='CreateQuickGroup'/>"
+"        <menuitem action='CreateQuickFilter'/>"
+"        <menuitem action='HideSources'/>"
+"        <menuitem action='ClearGroups'/>"
+"        <menuitem action='CreateGroup'/>"
+"        <menuitem action='EditGroups'/>"
+"      </menu>"
+"      <menuitem action='DeselectAllRows'/>"
+"      <separator/>"
+"      <menuitem action='Dotter'/>"
+"      <menuitem action='CloseAllDotters'/>"
+"  </popup>"
+"  <popup name='SeqHeaderContextMenu' accelerators='true'>"
+"      <menuitem action='CopyRefSeqDna'/>"
+"      <menuitem action='CopyRefSeqDisplay'/>"
+"  </popup>"
+"  <toolbar name='Toolbar'>"
+"    <toolitem action='Help'/>"
+"    <toolitem action='About'/>"
+"    <toolitem action='Settings'/>"
+"    <separator/>"
+"    <toolitem action='Sort'/>"
+"    <toolitem action='SquashMatches'/>"
+"    <toolitem action='ZoomIn'/>"
+"    <toolitem action='ZoomOut'/>"
+"    <separator/>"
+"    <toolitem action='GoTo'/>"
+"    <toolitem action='FirstMatch'/>"
+"    <toolitem action='PrevMatch'/>"
+"    <toolitem action='NextMatch'/>"
+"    <toolitem action='LastMatch'/>"
+"    <toolitem action='BackPage'/>"
+"    <toolitem action='BackOne'/>"
+"    <toolitem action='FwdOne'/>"
+"    <toolitem action='FwdPage'/>"
+"    <separator/>"
+"    <toolitem action='Find'/>"
+"    <toolitem action='ToggleStrand'/>"
+"  </toolbar>"
+"</ui>";
+
+
+/* This defines the additional menu components for a developer user */
+static const char developerMenuDescription[] =
+"<ui>"
+"  <popup name='ContextMenu' accelerators='true'>"
+"      <menuitem action='SelectFeatures'/>"
+"      <separator/>"
+"      <menuitem action='Statistics'/>"
+"  </popup>"
+"</ui>";
+
+
+
+/***********************************************************
+ *                         Utilities                       *
+ ***********************************************************/
+
+/* Return true if the current user is in our list of developers. */
+static gboolean userIsDeveloper()
+{
+  const gchar* developers[] = {"edgrif", "gb10"};
+
+  gboolean result = FALSE;
+  const gchar *user = g_get_user_name();
+  int numDevelopers = sizeof(developers) / sizeof(gchar*);
+  
+  int i = 0;
+  for (i = 0; i < numDevelopers; ++i)
+    {
+      if (strcmp(user, developers[i]) == 0)
+        {
+          result = TRUE;
+          break;
+        }
+    }
+
+  return result;
+}
+
+
+/* Returns the order number of the group that this sequence belongs to, or
+ * UNSET_INT if it does not belong to a group. */
+int sequenceGetGroupOrder(GtkWidget *blxWindow, const BlxSequence *seq)
+{
+  SequenceGroup *group = blxWindowGetSequenceGroup(blxWindow, seq);
+  return group ? group->order : UNSET_INT;
+}
+
+
+/* Scroll the detail view left/right by 1 base (or by 1 page, if the modifier
+ * is pressed) */
+static void scrollDetailView(GtkWidget *window, const gboolean moveLeft, const gboolean modifier)
+{
+  GtkWidget *detailView = blxWindowGetDetailView(window);
+  
+  if (moveLeft && modifier)
+    scrollDetailViewLeftPage(detailView);
+  else if (moveLeft)
+    scrollDetailViewLeft1(detailView);
+  else if (modifier)
+    scrollDetailViewRightPage(detailView);
+  else
+    scrollDetailViewRight1(detailView);
+}
+
+
+/* Move the current row selection up/down */
+static gboolean moveRowSelection(GtkWidget *blxWindow, const gboolean moveUp, const gboolean ctrlModifier, const gboolean shiftModifier)
+{
+  GtkWidget *detailView = blxWindowGetDetailView(blxWindow);
+  const int activeFrame = detailViewGetActiveFrame(detailView);
+  const BlxStrand activeStrand = detailViewGetSelectedStrand(detailView);
+  
+  GtkWidget *tree = detailViewGetTree(detailView, activeStrand, activeFrame);
+  return treeMoveRowSelection(tree, moveUp, shiftModifier);
+}
+
+
+/* Move the selected base index 1 base to the left/right. Moves by individual
+ * DNA bases (i.e. you have to move 3 bases in order to scroll a full peptide
+ * if viewing protein matches). Scrolls the detail view if necessary to keep 
+ * the new base in view. */
+static void moveSelectedBaseIdxBy1(GtkWidget *window, const gboolean moveLeft, const gboolean extend)
+{
+  GtkWidget *detailView = blxWindowGetDetailView(window);
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+
+  const gboolean displayRev = detailViewGetDisplayRev(detailView);
+  const int direction = (moveLeft == displayRev ? 1 : -1);
+  
+  int newDnaIdx = UNSET_INT;
+  gboolean ok = FALSE;
+
+  if (detailViewGetSelectedIdxSet(detailView))
+    {
+      newDnaIdx = properties->selectedIndex->dnaIdx + direction;
+      ok = TRUE;
+    }
+  
+  if (ok)
+    {
+      detailViewSetSelectedDnaBaseIdx(detailView, 
+                                      newDnaIdx, 
+                                      detailViewGetActiveFrame(detailView),
+                                      TRUE, 
+                                      TRUE,
+                                      extend);
+    }
+}
+
+
+/* Called when user pressed Home/End. If the modifier is pressed, scroll to the
+*  start/end of all matches in the current selection (or all matches, if no 
+* selection), or to the start/end of the entire display if the modifier is not pressed. */
+static void scrollToExtremity(GtkWidget *blxWindow, const gboolean moveLeft, const gboolean modifier, const gboolean extend)
+{
+  GtkWidget *detailView = blxWindowGetDetailView(blxWindow);
+  
+  if (modifier)
+    {
+      GList *selectedSeqs = blxWindowGetSelectedSeqs(blxWindow);
+
+      if (moveLeft)
+        firstMatch(detailView, selectedSeqs, extend);
+      else
+        lastMatch(detailView, selectedSeqs, extend);
+    }
+  else
+    {
+      const BlxSeqType seqType = blxWindowGetSeqType(blxWindow);
+      const IntRange* const fullRange = blxWindowGetFullRange(blxWindow);
+
+      if (moveLeft)
+        setDetailViewStartIdx(detailView, fullRange->min(), seqType);
+      else
+        setDetailViewEndIdx(detailView, fullRange->max(), seqType);
+    }
+}
+
+
+/* Jump left or right to the next/prev nearest match. Only include matches in the
+ * current selection, if any rows are selected. */
+static void goToMatch(GtkWidget *blxWindow, const gboolean moveLeft, const gboolean extend)
+{
+  GList *selectedSeqs = blxWindowGetSelectedSeqs(blxWindow);
+  
+  if (moveLeft)
+    {
+      prevMatch(blxWindowGetDetailView(blxWindow), selectedSeqs, extend);
+    }
+  else
+    {
+      nextMatch(blxWindowGetDetailView(blxWindow), selectedSeqs, extend);  
+    }
+}
+
+
+/* Move the selected display index 1 value to the left/right. Moves by full peptides
+ * if viewing protein matches. Scrolls the detail view if necessary to keep the new 
+ * index in view. If extend is true we extend the current selection range, otherwise
+ * just move the current selection index */
+static void moveSelectedDisplayIdxBy1(GtkWidget *window, const gboolean moveLeft, const gboolean extend)
+{
+  DEBUG_ENTER("moveSelectedDisplayIdxBy1()");
+
+  GtkWidget *detailView = blxWindowGetDetailView(window);
+  DetailViewProperties *detailViewProperties = detailViewGetProperties(detailView);
+
+  int newSelectedBaseIdx = UNSET_INT;
+  gboolean ok = FALSE;
+
+  if (detailViewGetSelectedIdxSet(detailView))
+    {
+      /* Decrement the index if moving left or increment if moving right */
+      newSelectedBaseIdx = detailViewProperties->selectedIndex->displayIdx;
+      
+      if (moveLeft)
+        --newSelectedBaseIdx;
+      else
+        ++newSelectedBaseIdx;
+
+      DEBUG_OUT("Moving selected display index to %d\n", newSelectedBaseIdx);
+
+      ok = TRUE;
+    }
+
+  if (ok)
+    {
+      detailViewSetSelectedDisplayIdx(detailView,
+                                      newSelectedBaseIdx,
+                                      detailViewProperties->selectedIndex->frame,
+                                      detailViewProperties->selectedIndex->baseNum,
+                                      TRUE,
+                                      TRUE,
+                                      extend);
+
+      detailViewRedrawAll(detailView);
+    }
+
+  DEBUG_EXIT("moveSelectedDisplayIdxBy1 returning ");
+}
+
+
+/* Zooms the display in/out. The modifiers control which section is zoomed */
+static void zoomBlxWindow(GtkWidget *window, const gboolean zoomIn, const gboolean ctrl, const gboolean shift)
+{
+  if (ctrl)
+    {
+      if (shift)
+        {
+          zoomWholeBigPicture(blxWindowGetBigPicture(window));
+        }
+      else
+        {
+          zoomBigPicture(blxWindowGetBigPicture(window), zoomIn);
+        }
+    }
+  else
+    {
+      zoomDetailView(blxWindowGetDetailView(window), zoomIn);
+    }
+}
+
+
+/* Force a redraw of all widgets. Clears cached bitmaps etc. first */
+void blxWindowRedrawAll(GtkWidget *blxWindow)
+{
+  GtkWidget *bigPicture = blxWindowGetBigPicture(blxWindow);
+  bigPictureRedrawAll(bigPicture);
+
+  GtkWidget *detailView = blxWindowGetDetailView(blxWindow);
+  detailViewRefreshAllHeaders(detailView);
+  
+  callFuncOnAllDetailViewTrees(detailView, widgetClearCachedDrawable, NULL);
+  
+  gtk_widget_queue_draw(blxWindow);
+}
+
+
+/* Utility to create a vbox with the given border and pack it into the given box.
+ * Also put a frame around it with the given label if includeFrame is true */
+static GtkWidget* createVBoxWithBorder(GtkWidget *parent, 
+                                       const int borderWidth,
+                                       const gboolean includeFrame,
+                                       const char *frameTitle)
+{
+  GtkWidget *vbox = gtk_vbox_new(FALSE, 0);
+  gtk_container_set_border_width(GTK_CONTAINER(vbox), borderWidth);
+
+  if (includeFrame)
+    {
+      GtkWidget *frame = gtk_frame_new(frameTitle);
+      gtk_box_pack_start(GTK_BOX(parent), frame, FALSE, FALSE, 0);
+      gtk_container_add(GTK_CONTAINER(frame), vbox);
+    }
+  else
+    {
+      gtk_box_pack_start(GTK_BOX(parent), vbox, FALSE, FALSE, 0);
+    }
+  
+  return vbox;
+}
+
+/* Utility to create an hbox with the given border and pack it into the given container */
+static GtkWidget* createHBoxWithBorder(GtkWidget *parent, const int borderWidth, const gboolean includeFrame, const char *frameTitle)
+{
+  GtkWidget *hbox = gtk_hbox_new(FALSE, 0);
+  gtk_container_set_border_width(GTK_CONTAINER(hbox), borderWidth);
+  
+  if (includeFrame)
+    {
+      GtkWidget *frame = gtk_frame_new(frameTitle);
+      gtk_container_add(GTK_CONTAINER(parent), frame);
+      gtk_container_add(GTK_CONTAINER(frame), hbox);
+    }
+  else
+    {
+      gtk_container_add(GTK_CONTAINER(parent), hbox);
+    }
+  
+  return hbox;
+}
+
+
+/* Utility to return true if any groups exist. Ignores the 'match set' group
+ * if it doesn't have any sequences. */
+static gboolean blxWindowGroupsExist(GtkWidget *blxWindow)
+{
+  gboolean result = FALSE;
+  
+  BlxContext *blxContext = blxWindowGetContext(blxWindow);
+  GList *groupList = blxContext->sequenceGroups;
+  
+  if (g_list_length(groupList) >= 1)
+    {
+      result = TRUE;
+    }
+  
+  return result;
+}
+
+
+/* Utility to create a text entry widget displaying the given double value. The
+ * given callback will be called when the user OK's the dialog that this widget 
+ * is a child of. */
+static GtkWidget* createTextEntryString(const char *value)
+{
+  GtkWidget *entry = gtk_entry_new();
+  
+  gtk_entry_set_text(GTK_ENTRY(entry), value);
+  gtk_entry_set_width_chars(GTK_ENTRY(entry), strlen(value) + 2);
+  gtk_entry_set_activates_default(GTK_ENTRY(entry), TRUE);
+  
+  return entry;
+}
+
+
+/* Utility to create a text entry widget displaying the given double value. The
+ * given callback will be called when the user OK's the dialog that this widget 
+ * is a child of. */
+static GtkWidget* createTextEntryInt(const int value)
+{
+  GtkWidget *entry = gtk_entry_new();
+  
+  char *displayText = convertIntToString(value);
+  gtk_entry_set_text(GTK_ENTRY(entry), displayText);
+  
+  gtk_entry_set_width_chars(GTK_ENTRY(entry), strlen(displayText) + 2);
+  gtk_entry_set_activates_default(GTK_ENTRY(entry), TRUE);
+  
+  g_free(displayText);
+
+  return entry;
+}
+
+
+/* This dialog is shown when the user attempts to load a file that
+ * is not in a natively-supported format. It asks the user what the
+ * source should be, and allows the user to edit the coordinate range
+ * to fetch data for. If the user enters valid values and hits OK then
+ * the return values are populated and we return TRUE; else return FALSE. */
+static gboolean showNonNativeFileDialog(GtkWidget *window, 
+                                        const char *filename,
+                                        GString **source_out,
+                                        int *start_out,
+                                        int *end_out)
+{
+  BlxContext *bc = blxWindowGetContext(window);
+  
+  char *title = g_strdup_printf("%sLoad Non-Native File", blxGetTitlePrefix(bc));
+
+  GtkWidget *dialog = gtk_dialog_new_with_buttons(title, 
+                                                  GTK_WINDOW(window),
+                                                  (GtkDialogFlags)(GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT),
+                                                  GTK_STOCK_CANCEL,
+                                                  GTK_RESPONSE_REJECT,
+                                                  GTK_STOCK_OK,
+                                                  GTK_RESPONSE_ACCEPT,
+                                                  NULL);
+
+  g_free(title);
+  
+  gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT);
+
+  GtkContainer *contentArea = GTK_CONTAINER(GTK_DIALOG(dialog)->vbox);
+
+  char *labelStr = g_strdup_printf("\nFile '%s' is not a natively-supported file format.\n\nSpecify the Source to fetch data from this file using an external command\n(a fetch method for the Source must be specified in the config file)\n", filename);  
+  GtkWidget *label = gtk_label_new(labelStr);
+  g_free(labelStr);
+  
+  GtkWidget *sourceEntry = createTextEntryString("");
+  GtkWidget *label2 = gtk_label_new("\n\nRegion to fetch data for:");
+  GtkWidget *startEntry = createTextEntryInt(bc->refSeqRange.min());
+  GtkWidget *endEntry = createTextEntryInt(bc->refSeqRange.max());
+  
+  GtkTable *table = GTK_TABLE(gtk_table_new(5, 2, FALSE));
+  gtk_container_add(contentArea, GTK_WIDGET(table));
+
+  gtk_table_attach(table, label, 0, 2, 0, 1, GTK_SHRINK, GTK_SHRINK, DEFAULT_TABLE_XPAD, DEFAULT_TABLE_YPAD);
+  gtk_table_attach(table, gtk_label_new("Source"), 0, 1, 1, 2, GTK_SHRINK, GTK_SHRINK, DEFAULT_TABLE_XPAD, DEFAULT_TABLE_YPAD);
+  gtk_table_attach(table, sourceEntry, 1, 2, 1, 2, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), GTK_SHRINK, DEFAULT_TABLE_XPAD, DEFAULT_TABLE_YPAD);
+  gtk_table_attach(table, label2, 0, 2, 2, 3, GTK_SHRINK, GTK_SHRINK, DEFAULT_TABLE_XPAD, DEFAULT_TABLE_YPAD);
+  gtk_table_attach(table, gtk_label_new("Start"), 0, 1, 3, 4, GTK_SHRINK, GTK_SHRINK, DEFAULT_TABLE_XPAD, DEFAULT_TABLE_YPAD);
+  gtk_table_attach(table, startEntry, 1, 2, 3, 4, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), GTK_SHRINK, DEFAULT_TABLE_XPAD, DEFAULT_TABLE_YPAD);
+  gtk_table_attach(table, gtk_label_new("End"), 0, 1, 4, 5, GTK_SHRINK, GTK_SHRINK, DEFAULT_TABLE_XPAD, DEFAULT_TABLE_YPAD);
+  gtk_table_attach(table, endEntry, 1, 2, 4, 5, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), GTK_SHRINK, DEFAULT_TABLE_XPAD, DEFAULT_TABLE_YPAD);
+
+  gtk_widget_show_all(dialog);
+  gint response = gtk_dialog_run(GTK_DIALOG(dialog));
+  gboolean result = FALSE;
+  
+  if (response == GTK_RESPONSE_ACCEPT)
+    {
+      const gchar *source = gtk_entry_get_text(GTK_ENTRY(sourceEntry));
+      
+      /* source is mandatory */
+      if (source && *source)
+        {
+          result = TRUE;
+          *source_out = g_string_new(source);
+
+          /* to do: start and end */
+        }
+    }
+
+  gtk_widget_destroy(dialog);
+
+  return result;
+}
+
+
+/* This function loads the contents of a non-natively supported features-
+ * file into blixem, using an external script to convert the file into
+ * a supported file format such as GFF. A fetch method stanza must exist in the
+ * config to define the script and its parameters.
+ * This function asks the user what Source the file relates to so that it can 
+ * look up the fetch method that should be used. It optionally also allows the
+ * user to specify a coordinate range to limit the fetch to.. */
+static void loadNonNativeFile(const char *filename,
+                              GtkWidget *blxWindow,
+                              MSP **newMsps,
+                              GList **newSeqs,
+                              GHashTable *lookupTable,
+                              const int refSeqOffset,
+                              const IntRange* const refSeqRange,
+                              GError **error)
+{
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+  GKeyFile *keyFile = blxGetConfig();
+
+  GString *source = NULL;
+  int start = bc->refSeqRange.min(), end = bc->refSeqRange.max();
+  
+  if (!showNonNativeFileDialog(blxWindow, filename, &source, &start, &end))
+    return;
+
+  GError *tmp_error = NULL;
+  BlxDataType *dataType = NULL;
+  const BlxFetchMethod *fetchMethod = NULL;
+
+  if (!source || !source->str)
+    {
+      g_set_error(&tmp_error, BLX_ERROR, 1, "No Source specified; cannot look up fetch method.\n");
+    }
+
+  if (!tmp_error)
+    {
+      dataType = getBlxDataType(0, source->str, keyFile, &tmp_error);
+
+      if (!dataType && !tmp_error)
+        g_set_error(&tmp_error, BLX_ERROR, 1, "No data-type found for source '%s'\n", source->str);
+    }
+
+  if (!tmp_error)
+    {
+      if (dataType->bulkFetch)
+        {
+          GQuark fetchMethodQuark = g_array_index(dataType->bulkFetch, GQuark, 0);
+          fetchMethod = getFetchMethodDetails(fetchMethodQuark, bc->fetchMethods);
+        }
+
+      if (!fetchMethod)
+        {
+          g_set_error(&tmp_error, BLX_ERROR, 1, "No fetch method specified for data-type '%s'\n", g_quark_to_string(dataType->name));
+        }
+
+      /* The output of the fetch must be a natively supported file format (i.e. GFF) */
+      if (!tmp_error && fetchMethod->outputType != BLXFETCH_OUTPUT_GFF)
+        {
+          g_set_error(&tmp_error, BLX_ERROR, 1, "Expected fetch method output type to be '%s' but got '%s'\n", outputTypeStr(BLXFETCH_OUTPUT_GFF), outputTypeStr(fetchMethod->outputType));
+        }
+    }
+     
+  if (!tmp_error)
+    {
+      MatchSequenceData match_data = {NULL, bc->refSeqName, start, end, bc->dataset, source->str, filename};
+      GString *command = doGetFetchCommand(fetchMethod, &match_data, &tmp_error);
+
+      if (!tmp_error && command && command->str)
+        {
+          const char *fetchName = g_quark_to_string(fetchMethod->name);
+          GSList *styles = blxReadStylesFile(NULL, NULL);
+
+          sendFetchOutputToFile(command, keyFile, &bc->blastMode, 
+                                bc->featureLists, bc->supportedTypes, styles,
+                                &bc->matchSeqs, &bc->mspList, 
+                                fetchName, bc->saveTempFiles, newMsps, newSeqs,
+                                bc->columnList, lookupTable, refSeqOffset, refSeqRange, &tmp_error);
+        }
+    }          
+
+  if (tmp_error)
+    g_propagate_error(error, tmp_error);
+}
+
+
+/* Utility to call the updateDepth functions for any coverage views we have */
+static void updateCoverageDepth(GtkWidget *blxWindow)
+{
+  BlxWindowProperties *properties = blxWindowGetProperties(blxWindow);
+
+  if (properties)
+    {
+      BigPictureProperties *bpProperties = bigPictureGetProperties(properties->bigPicture);
+
+      if (bpProperties && bpProperties->coverageViewProperties())
+        bpProperties->coverageViewProperties()->updateDepth();
+
+      DetailViewProperties *dvProperties = detailViewGetProperties(properties->detailView);
+
+      if (dvProperties && dvProperties->coverageViewProperties())
+        dvProperties->coverageViewProperties()->updateDepth();
+    }
+}
+
+
+/* Utility to hide any coverage views we have */
+static void coverageSetHidden(GtkWidget *blxWindow, const bool hide)
+{
+  BlxWindowProperties *properties = blxWindowGetProperties(blxWindow);
+
+  if (properties)
+    {
+      BigPictureProperties *bpProperties = bigPictureGetProperties(properties->bigPicture);
+      DetailViewProperties *dvProperties = detailViewGetProperties(properties->detailView);
+
+      if (bpProperties && bpProperties->coverageViewProperties())
+        widgetSetHidden(bpProperties->coverageViewProperties()->widget(), hide);
+
+      if (dvProperties && dvProperties->coverageViewProperties())
+        widgetSetHidden(dvProperties->coverageViewProperties()->widget(), hide);
+    }
+}
+
+
+/* Dynamically load in additional features from a file. (should be called after
+ * blixem's GUI has already started up, rather than during start-up where normal
+ * feature-loading happens) */
+static void dynamicLoadFeaturesFile(GtkWidget *blxWindow, const char *filename, const char *buffer, GError **error)
+{
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+
+  /* Must be passed either a filename or buffer */
+  g_return_if_fail(filename || buffer);
+  g_return_if_fail(bc);
+
+  GKeyFile *keyFile = blxGetConfig();
+  
+  /* We'll load the features from the file into some temporary lists */
+  MSP *newMsps = NULL;
+  GList *newSeqs = NULL;
+  GError *tmp_error = NULL;
+  int numAdded = 0;
+
+  /* Create a temporary lookup table for BlxSequences so we can link them on GFF ID */
+  GHashTable *lookupTable = g_hash_table_new(g_direct_hash, g_direct_equal);
+
+  /* Assume it's a natively-supported file and attempt to parse it. The first thing this
+   * does is check that it's a native file and if not it sets the error */
+  loadNativeFile(filename, buffer, keyFile, &bc->blastMode, bc->featureLists, bc->supportedTypes, bc->styles, &newMsps, &newSeqs, bc->columnList, lookupTable, bc->refSeqOffset, &bc->refSeqRange, &tmp_error);
+
+  if (tmp_error && filename)
+    {
+      /* Input file is not natively supported. We can still load it if
+       * there is a fetch method associated with it: ask the user what
+       * the Source is so that we can find the fetch method. Probably 
+       * should only get here if the input is an actual file so don't
+       * support this for buffers for now. */
+      g_error_free(tmp_error);
+      tmp_error = NULL;
+      
+      loadNonNativeFile(filename, blxWindow, &newMsps, &newSeqs, lookupTable, bc->refSeqOffset, &bc->refSeqRange, &tmp_error);
+    }
+
+  if (!tmp_error)
+    {
+      /* Count how many features were added. (Need to do this before blxMergeFeatures because
+       * once this list gets merged the count will no longer be correct.) */
+      numAdded = g_list_length(newSeqs);
+
+      /* Fetch any missing sequence data and finalise the new sequences */
+      BulkFetch bulk_fetch(FALSE, bc->saveTempFiles, bc->seqType, &newSeqs, bc->columnList,
+                           bc->bulkFetchDefault, bc->fetchMethods, &newMsps, &bc->blastMode,
+                           bc->featureLists, bc->supportedTypes, NULL, bc->refSeqOffset,
+                           &bc->refSeqRange, bc->dataset, FALSE, lookupTable,
+#ifdef PFETCH_HTML
+                           bc->ipresolve,
+                           bc->cainfo,
+#endif
+                           bc->fetch_debug);
+
+      bulk_fetch.performFetch();
+    }
+
+  if (newMsps)
+    {
+      finaliseFetch(newSeqs, bc->columnList);
+
+      finaliseBlxSequences(bc->featureLists, &newMsps, &newSeqs, bc->columnList, bc->refSeqOffset, bc->seqType, 
+                           bc->numFrames, &bc->refSeqRange, TRUE, lookupTable);
+
+      double lowestId = calculateMspData(newMsps, bc);
+      bigPictureSetMinPercentId(blxWindowGetBigPicture(blxWindow), lowestId);
+
+      /* Add the msps/sequences to the tree data models (must be done after finalise because
+       * finalise populates the child msp lists for parent features) */
+      detailViewAddMspData(blxWindowGetDetailView(blxWindow), newMsps, newSeqs);
+
+      /* Merge the temporary lists into the main lists (takes ownership of the temp lists) */
+      blxMergeFeatures(newMsps, newSeqs, &bc->mspList, &bc->matchSeqs);
+
+      /* Cache the new msp display ranges and sort and filter the trees. */
+      GtkWidget *detailView = blxWindowGetDetailView(blxWindow);
+      const int numUnalignedBases = detailViewGetNumUnalignedBases(detailView);
+      cacheMspDisplayRanges(bc, numUnalignedBases);
+      detailViewResortTrees(detailView);
+      callFuncOnAllDetailViewTrees(detailView, refilterTree, NULL);
+
+      /* Recalculate the coverage */
+      bc->calculateDepth(numUnalignedBases);
+      updateCoverageDepth(blxWindow);
+  
+      /* Re-calculate the height of the exon views */
+      GtkWidget *bigPicture = blxWindowGetBigPicture(blxWindow);
+      calculateExonViewHeight(bigPictureGetFwdExonView(bigPicture));
+      calculateExonViewHeight(bigPictureGetRevExonView(bigPicture));
+      forceResize(bigPicture);
+  
+      blxWindowRedrawAll(blxWindow);
+      
+      if (numAdded == 0)
+        g_warning("No features loaded\n");
+      else if (numAdded == 1)
+        g_message("Loaded %d new feature\n", numAdded);
+      else
+        g_message("Loaded %d new features\n", numAdded);
+    }
+
+  g_hash_table_unref(lookupTable);
+
+  if (tmp_error)
+    g_propagate_error(error, tmp_error);
+}
+
+
+/***********************************************************
+ *                         View panes menu                 *
+ ***********************************************************/
+
+/* Toggle visibility the n'th tree. This is the active strand's frame n if displaying
+ * protein matches (where we only display one strand), or the forward or reverse
+ * strand tree if displaying DNA matches (where both strands are displayed). */
+static void toggleTreeVisibility(GtkWidget *blxWindow, const int number)
+{
+  const gboolean toggled = blxWindowGetDisplayRev(blxWindow);
+  const BlxStrand activeStrand = toggled ? BLXSTRAND_REVERSE : BLXSTRAND_FORWARD;
+  
+  /* For protein matches, trees are always displayed in frame order (i.e. 1, 2, 3), 
+   * so just use the number pressed for the frame, and the active strand for the
+   * strand. */
+  int frame = number;
+  BlxStrand strand = activeStrand;
+  
+  /* For DNA matches, the frame is always 1, but the strand depends on which number
+   * was pressed: use 1 to toggle active strand, 2 for other strand */
+  if (blxWindowGetSeqType(blxWindow) == BLXSEQ_DNA)
+    {
+      frame = 1;
+      
+      if (number == 1)
+        {
+          strand = activeStrand;
+        }
+      else if (number == 2)
+        {
+          strand = toggled ? BLXSTRAND_FORWARD : BLXSTRAND_REVERSE;
+        }
+    }
+  
+  GtkWidget *detailView = blxWindowGetDetailView(blxWindow);
+  GtkWidget *tree = detailViewGetTreeContainer(detailView, strand, frame);
+  
+  if (tree && gtk_widget_get_parent(tree))
+    {
+      widgetSetHidden(tree, !widgetGetHidden(tree));
+    }
+}
+
+
+/* Toggle visibility of the active (1) or other (2) strand grid depending on the number pressed */
+static void toggleGridVisibility(GtkWidget *blxWindow, const int number)
+{
+  if (number == 1 || number == 2)
+    {
+      GtkWidget *bigPicture = blxWindowGetBigPicture(blxWindow);
+      const gboolean useFwdGrid = (number == 1) != blxWindowGetDisplayRev(blxWindow);
+      
+      GtkWidget *grid = useFwdGrid ? bigPictureGetFwdGrid(bigPicture) : bigPictureGetRevGrid(bigPicture);
+      widgetSetHidden(grid, !widgetGetHidden(grid));
+
+      /* We need to force a resize of the big picture because the size-allocate
+       * signal doesn't get emitted by default when its contents shrink */
+      forceResize(bigPicture);
+    }
+}
+
+
+/* Toggle visibility of the active (1) or other (2) strand exon view depending on the number pressed */
+static void toggleExonViewVisibility(GtkWidget *blxWindow, const int number)
+{
+  if (number == 1 || number == 2)
+    {
+      GtkWidget *bigPicture = blxWindowGetBigPicture(blxWindow);
+      const gboolean useFwdExonView = (number == 1) != blxWindowGetDisplayRev(blxWindow);
+      
+      GtkWidget *exonView = useFwdExonView ? bigPictureGetFwdExonView(bigPicture) : bigPictureGetRevExonView(bigPicture);
+      widgetSetHidden(exonView, !widgetGetHidden(exonView));
+
+      forceResize(bigPicture);
+    }
+}
+
+
+/* Toggle the visibility of tree/grid panes following a number key press */
+static void togglePaneVisibility(GtkWidget *blxWindow, const int number, const gboolean modifier1, const gboolean modifier2)
+{
+  /* Affects big picture if modifier1 was pressed, the detail view otherwise */
+  if (modifier1)
+    {
+      /* If modifier 2 was also pressed, affects the exon views; otherwise the grids */
+      if (modifier2)
+        {
+          toggleExonViewVisibility(blxWindow, number);
+        }
+      else
+        {
+          toggleGridVisibility(blxWindow, number);
+        }
+    }
+  else
+    {
+      toggleTreeVisibility(blxWindow, number);
+    }
+}
+
+
+/* Repeat the last find operation. Searches for the next (rightwards) match unless the given
+ * modifier is pressed, in which case it searches for the previous (leftwards) match */
+static void findAgain(GtkWidget *blxWindow, const gboolean modifier)
+{
+  GError *error = NULL;
+
+  const int startCoord = getSearchStartCoord(blxWindow, FALSE, modifier);
+
+  /* Try the DNA search. Does nothing if last search was not a DNA search. */
+  blxWindowFindDnaString(blxWindow, NULL, startCoord, modifier, TRUE, &error);
+
+  if (error)
+    {
+      /* DNA search was attempted but not found. Try looping round to the beginning */
+      g_error_free(error);
+      error = NULL;
+      const int newStart = getSearchStartCoord(blxWindow, TRUE, modifier);
+      blxWindowFindDnaString(blxWindow, NULL, newStart, modifier, TRUE, &error);
+    }
+  
+  if (!error)
+    {
+      /* Try the search-from-list search. Returns NULL if last search was not a list search */
+      GList *seqList = findSeqsFromList(blxWindow, NULL, BLXCOL_NONE, FALSE, TRUE, &error);
+      
+      if (!seqList && !error)
+        {
+          /* Try the search-by-name search. Returns NULL if last search was not a name search. */
+          seqList = findSeqsFromColumn(blxWindow, NULL, BLXCOL_NONE, FALSE, TRUE, &error);
+        }
+      
+      /* If either the list or name search succeeded, select the prev/next MSP from the 
+       * found sequence(s) depending on which direction we're searching. */
+      if (seqList)
+        {
+          blxWindowSetSelectedSeqList(blxWindow, seqList);
+          
+          if (modifier)
+            {
+              prevMatch(blxWindowGetDetailView(blxWindow), seqList, FALSE);
+            }
+          else
+            {
+              nextMatch(blxWindowGetDetailView(blxWindow), seqList, FALSE);
+            }
+        }
+    }
+  
+  if (error)
+    {
+      prefixError(error, "Find %s failed. ", (modifier ? "previous" : "next"));
+      reportAndClearIfError(&error, G_LOG_LEVEL_MESSAGE);
+    }
+}
+
+
+/* Called when the state of a check button is toggled */
+static void onVisibilityButtonToggled(GtkWidget *button, gpointer data)
+{
+  GtkWidget *widgetToToggle = GTK_WIDGET(data);
+  gboolean visible = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button));
+  widgetSetHidden(widgetToToggle, !visible);
+}
+
+
+/* Create a check button to control visibility of the given widget */
+static void createVisibilityButton(GtkWidget *widgetToToggle, const char *mnemonic, GtkWidget *container)
+{
+  GtkWidget *button = gtk_check_button_new_with_mnemonic(mnemonic);
+  gtk_container_add(GTK_CONTAINER(container), button);
+
+  /* Set the state depending on the widget's current visibility */
+  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), GTK_WIDGET_VISIBLE(widgetToToggle));
+  
+  g_signal_connect(G_OBJECT(button), "toggled", G_CALLBACK(onVisibilityButtonToggled), widgetToToggle);
+}
+
+
+/* Create a check button to control visibility of the given tree. */
+static void createTreeVisibilityButton(GtkWidget *detailView, const BlxStrand strand, const int frame, GtkWidget *container)
+{
+  /* Some trees may have been removed from the blixem window if they are not on the active 
+   * strand, so only show check boxes for those that are in the window (i.e. have a parent). 
+   * Note that we get the tree container here, which consists of the tree itself plus any headers etc. */
+  GtkWidget *tree = detailViewGetTreeContainer(detailView, strand, frame);
+  
+  if (gtk_widget_get_parent(tree))
+    {
+      const gboolean toggled = detailViewGetDisplayRev(detailView);
+      gboolean isActiveStrand = ((strand == BLXSTRAND_FORWARD) != toggled);
+
+      if (detailViewGetSeqType(detailView) == BLXSEQ_DNA)
+        {
+          /* We only have 1 frame, but trees are from both strands, so distinguish between strands.
+           * Put each strand in its own frame. */
+          char text1[] = "Show _active strand";
+          char text2[] = "Show othe_r strand";
+
+          GtkWidget *frame = gtk_frame_new(isActiveStrand ? "Active strand" : "Other strand");
+          gtk_container_add(GTK_CONTAINER(container), frame);
+          createVisibilityButton(tree, isActiveStrand ? text1 : text2, frame);
+        }
+      else
+        {
+          /* All the visible trees should be in the same strand, so just distinguish by frame number. */
+          char formatStr[] = "Show frame _%d";
+          char displayText[strlen(formatStr) + numDigitsInInt(frame) + 1];
+          sprintf(displayText, formatStr, frame);
+
+          createVisibilityButton(tree, displayText, container);
+        }
+    }
+}
+
+
+/* Callback called when the user clicks the 'bump exon view' button */
+static void onBumpExonView(GtkWidget *button, gpointer data)
+{
+  GtkWidget *exonView = GTK_WIDGET(data);
+  const gboolean expanded = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button));
+  exonViewSetExpanded(exonView, expanded);
+}
+
+
+/* Create the set of settings buttons to control display of an exon-view widget. */
+static void createExonButtons(GtkWidget *exonView, const char *visLabel, const char *bumpLabel, GtkWidget *parent)
+{
+  /* Pack everything in an hbox */
+  GtkWidget *hbox = gtk_hbox_new(FALSE, 0);
+  gtk_container_add(GTK_CONTAINER(parent), hbox);
+  
+  /* Create a check button to control visibility of the exon view */
+  createVisibilityButton(exonView, visLabel, hbox);
+
+  /* Create a check button to control whether the exon view is expanded or compressed */
+  const gboolean isBumped = exonViewGetExpanded(exonView);
+  createCheckButton(GTK_BOX(hbox),
+                    bumpLabel,
+                    NULL,
+                    isBumped,
+                    G_CALLBACK(onBumpExonView),
+                    exonView);
+}
+
+
+/* Shows the "View panes" dialog. This dialog allows the user to show/hide certain portions of the window. */
+void showViewPanesDialog(GtkWidget *blxWindow, const gboolean bringToFront)
+{
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+  const BlxDialogId dialogId = BLXDIALOG_VIEW;
+  GtkWidget *dialog = getPersistentDialog(bc->dialogList, dialogId);
+  
+  if (!dialog)
+    {
+      char *title = g_strdup_printf("%sView panes", blxGetTitlePrefix(bc));
+
+      dialog = gtk_dialog_new_with_buttons(title, 
+                                           GTK_WINDOW(blxWindow), 
+                                           GTK_DIALOG_DESTROY_WITH_PARENT,
+                                           GTK_STOCK_OK,
+                                           GTK_RESPONSE_ACCEPT,
+                                           NULL);
+
+      g_free(title);
+
+      /* These calls are required to make the dialog persistent... */
+      addPersistentDialog(bc->dialogList, dialogId, dialog);
+      g_signal_connect(dialog, "delete-event", G_CALLBACK(gtk_widget_hide_on_delete), NULL);
+      
+      g_signal_connect(dialog, "response", G_CALLBACK(onResponseDialog), GINT_TO_POINTER(TRUE));
+    }
+  else
+    {
+      /* Clear contents and re-create */
+      dialogClearContentArea(GTK_DIALOG(dialog));
+    }
+  
+  gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT);
+  GtkWidget *contentArea = GTK_DIALOG(dialog)->vbox;
+
+  int borderWidth = 12;
+  
+  /* Big picture */
+  GtkWidget *bp = blxWindowGetBigPicture(blxWindow);
+  GtkWidget *bpVbox = createVBoxWithBorder(contentArea, borderWidth, TRUE, "Big picture");
+  
+  createVisibilityButton(bp, "Show _big picture", bpVbox);
+  GtkWidget *bpSubBox = createVBoxWithBorder(bpVbox, borderWidth, FALSE, NULL);
+  
+  GtkWidget *bpActiveStrand = createVBoxWithBorder(bpSubBox, 0, TRUE, "Active strand");
+  createVisibilityButton(bigPictureGetActiveGrid(bp), "Show _grid", bpActiveStrand);
+  createExonButtons(bigPictureGetActiveExonView(bp), "Show _exons    ", "_Bump exons    ", bpActiveStrand);
+  
+  GtkWidget *bpOtherStrand = createVBoxWithBorder(bpSubBox, 0, TRUE, "Other strand");
+  createVisibilityButton(bigPictureGetInactiveGrid(bp), "Show gr_id", bpOtherStrand);
+  createExonButtons(bigPictureGetInactiveExonView(bp), "Show e_xons    ", "Bum_p exons    ", bpOtherStrand);
+  
+  /* Detail view */
+  GtkWidget *dvVbox = createVBoxWithBorder(contentArea, borderWidth, TRUE, "Alignment lists");
+  GtkWidget *dv = blxWindowGetDetailView(blxWindow);
+  createVisibilityButton(dv, "Show alignment _lists", dvVbox);
+  
+  GtkWidget *dvSubBox = createVBoxWithBorder(dvVbox, borderWidth, FALSE, NULL);
+  const int numFrames = blxWindowGetNumFrames(blxWindow);
+  int frame = 1;
+  for ( ; frame <= numFrames; ++frame)
+    {
+      createTreeVisibilityButton(dv, blxWindowGetActiveStrand(blxWindow), frame, dvSubBox);
+      createTreeVisibilityButton(dv, blxWindowGetInactiveStrand(blxWindow), frame, dvSubBox);
+    }
+  
+  /* Coverage views */
+  GtkWidget *bpCoverageView = blxWindowGetBigPictureCoverageView(blxWindow);
+  GtkWidget *dvCoverageView = blxWindowGetDetailViewCoverageView(blxWindow);
+  GtkWidget *coverageVbox = createVBoxWithBorder(contentArea, borderWidth, TRUE, "Coverage view");
+  createVisibilityButton(bpCoverageView, "Show _coverage view (big picture)", coverageVbox);
+  createVisibilityButton(dvCoverageView, "Show _coverage view (detail view)", coverageVbox);
+
+  
+  gtk_widget_show_all(dialog);
+  
+  if (bringToFront)
+    {
+      gtk_window_present(GTK_WINDOW(dialog));
+    }
+}
+
+
+
+/***********************************************************
+ *                          Find menu                      *
+ ***********************************************************/
+
+static GList* findSeqsFromColumn(GtkWidget *blxWindow, const char *inputText, const BlxColumnId inputCol, const gboolean rememberSearch, const gboolean findAgain, GError **error)
+{
+  /* Previous values (if applicable) */
+  static char *prevSearchStr = NULL;
+  static BlxColumnId prevSearchCol = BLXCOL_NONE;
+
+  /* Current values */
+  char *searchStr = NULL;
+  BlxColumnId searchCol = BLXCOL_NONE;
+  
+  /* If it's a find-again, use the existing values; otherwise, use the input values */
+  if (findAgain)
+    {
+      searchStr = prevSearchStr;
+      searchCol = prevSearchCol;
+    }
+  else
+    {
+      g_free(searchStr);
+      searchStr = g_strdup(inputText);
+      searchCol = inputCol;
+    
+      if (rememberSearch)
+        {
+          prevSearchStr = searchStr;
+          prevSearchCol = searchCol;
+        }
+    }
+  
+  if (!searchStr || searchCol == BLXCOL_NONE)
+    {
+      /* We will get here if we do a find-again when there wasn't a previous find */
+      return NULL;
+    }
+  
+  /* Loop through all the sequences and see if the sequence data for this column
+   * matches the search string */
+  GList *seqList = blxWindowGetAllMatchSeqs(blxWindow);
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+  SeqSearchData searchData = {searchStr, searchCol, bc, NULL, NULL};
+  
+  g_list_foreach(seqList, getSequencesThatMatch, &searchData);
+  
+  if (g_list_length(searchData.matchList) < 1)
+    {
+      GList *columnList = blxWindowGetColumnList(blxWindow);
+      const char *columnName = getColumnTitle(columnList, searchCol);
+
+      if (searchData.error)
+        g_propagate_error(error, searchData.error);
+      else
+        g_set_error(error, BLX_ERROR, BLX_ERROR_STRING_NOT_FOUND, "No sequences found where column '%s' matches text '%s'.\n", columnName, searchStr);
+    }
+  
+  return searchData.matchList;
+}
+
+
+/* Utility to extract the contents of a GtkTextView and return it as a string. The result is
+ * owned by the GtkTextView and should not be free'd. */
+static const char* getStringFromTextView(GtkTextView *textView)
+{
+  if (!textView || !GTK_WIDGET_SENSITIVE(GTK_WIDGET(textView)))
+    {
+      g_critical("Could not set search string: invalid text entry box\n");
+      return NULL;
+    }
+  
+  /* Get the input text from the text buffer and create the group */
+  GtkTextBuffer *textBuffer = gtk_text_view_get_buffer(textView);
+  
+  GtkTextIter start, end;
+  gtk_text_buffer_get_bounds(textBuffer, &start, &end);
+  
+  return gtk_text_buffer_get_text(textBuffer, &start, &end, TRUE);
+}
+
+
+/* Finds all the valid sequences blixem knows about whose column data matches
+ * an item from the given input text. Returns the results as a GList of BlxSequences.
+ * The input text may be a multi-line list (one search item per line). */
+static GList* findSeqsFromList(GtkWidget *blxWindow,
+                               const char *inputText, 
+                               const BlxColumnId inputCol, 
+                               const gboolean rememberSearch, 
+                               const gboolean findAgain, 
+                               GError **error)
+{
+  /* Previous values (if applicable) */
+  static char *prevSearchStr = NULL;
+  static BlxColumnId prevSearchCol = BLXCOL_NONE;
+  
+  /* Current values */
+  char *searchStr = NULL;
+  BlxColumnId searchCol = BLXCOL_NONE;
+  
+  /* If we-re doing a find-again, use the values from last time; otherwise use the input values */
+  if (findAgain)
+    {
+      searchStr = prevSearchStr;
+      searchCol = prevSearchCol;
+    }
+  else
+    {
+      g_free(searchStr);
+      searchStr = g_strdup(inputText);
+      searchCol = inputCol;
+    
+      if (rememberSearch)
+        {
+          prevSearchStr = searchStr;
+          prevSearchCol = searchCol;
+        }
+    }
+      
+  if (!searchStr || searchCol == BLXCOL_NONE)
+    {
+      /* We may get here if we did a find-again when there was no previous find */
+      return NULL;
+    }
+
+  
+  GError *tmpError = NULL;
+  GList *seqList = getSeqStructsFromText(blxWindow, searchStr, searchCol, &tmpError);
+
+  if (g_list_length(seqList) < 1)
+    {
+      GList *columnList = blxWindowGetColumnList(blxWindow);
+      const char *columnName = getColumnTitle(columnList, searchCol);
+      
+      if (tmpError)
+        g_propagate_error(error, tmpError);
+      else
+        g_set_error(error, BLX_ERROR, BLX_ERROR_STRING_NOT_FOUND, "No sequences found where column '%s' matches text '%s'.\n", columnName, searchStr);
+    }
+  
+  return seqList;
+}
+
+
+/* Callback called when requested to find sequences from a sequence name. Selects
+ * the sequences and scrolls to the start of the first match in the selection */
+static gboolean onFindSeqsFromName(GtkWidget *button, const gint responseId, gpointer data)
+{
+  gboolean result = TRUE;
+  
+  const char *inputText = NULL;
+  
+  if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)))
+    {
+      inputText = getStringFromTextEntry(GTK_ENTRY(data));
+    }
+  
+  GtkWidget *dialog = gtk_widget_get_toplevel(button);
+  GtkWidget *blxWindow = GTK_WIDGET(gtk_window_get_transient_for(GTK_WINDOW(dialog)));
+  
+  /* Find the combo box on the dialog (there should only be one), which tells
+   * us which column to search. */
+  GtkComboBox *combo = widgetGetComboBox(dialog);
+  BlxColumnId searchCol = getColumnFromComboBox(combo);
+
+  /* Find all sequences that match */
+  GError *error = NULL;
+  GList *seqList = findSeqsFromColumn(blxWindow, inputText, searchCol, TRUE, FALSE, &error);
+  
+  if (error)
+    {
+      reportAndClearIfError(&error, G_LOG_LEVEL_CRITICAL);
+      result = FALSE;
+    }
+  
+  if (seqList)
+    {
+      GtkWindow *dialogWindow = GTK_WINDOW(gtk_widget_get_toplevel(button));
+      GtkWidget *blxWindow = GTK_WIDGET(gtk_window_get_transient_for(dialogWindow));
+
+      blxWindowSetSelectedSeqList(blxWindow, seqList);
+      
+      if (responseId == BLX_RESPONSE_FORWARD)
+        {
+          nextMatch(blxWindowGetDetailView(blxWindow), seqList, FALSE);
+        }
+      else if (responseId == BLX_RESPONSE_BACK)
+        {
+          prevMatch(blxWindowGetDetailView(blxWindow), seqList, FALSE);
+        }
+      else
+        {
+          firstMatch(blxWindowGetDetailView(blxWindow), seqList, FALSE);
+        }
+    }
+    
+  return result;
+}
+
+
+/* Callback called when requested to find sequences from a given list. Selects
+ * the sequences ands scrolls to the start of the first match in the selection. */
+static gboolean onFindSeqsFromList(GtkWidget *button, const gint responseId, gpointer data)
+{
+  gboolean result = TRUE;
+  
+  const char *inputText = NULL;
+  
+  /* Nothing to do if this button is not active */
+  if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)))
+    {
+      inputText = getStringFromTextView(GTK_TEXT_VIEW(data));
+    }
+  
+  /* Get the dialog and main window */
+  GtkWidget *dialog = gtk_widget_get_toplevel(button);
+  GtkWidget *blxWindow = GTK_WIDGET(gtk_window_get_transient_for(GTK_WINDOW(dialog)));
+
+  /* Find the combo box on the dialog (there should only be one), which tells
+   * us which column to search. */
+  GtkComboBox *combo = widgetGetComboBox(dialog);
+  BlxColumnId searchCol = getColumnFromComboBox(combo);
+  
+  GError *error = NULL;
+  GList *seqList = findSeqsFromList(blxWindow, inputText, searchCol, TRUE, FALSE, &error);
+
+  if (error)
+    {
+      reportAndClearIfError(&error, G_LOG_LEVEL_CRITICAL);
+      result = FALSE;
+    }
+  
+  if (seqList)
+    {
+      blxWindowSetSelectedSeqList(blxWindow, seqList);
+      
+      if (responseId == BLX_RESPONSE_FORWARD)
+        {
+          nextMatch(blxWindowGetDetailView(blxWindow), seqList, FALSE);
+        }
+      else if (responseId == BLX_RESPONSE_BACK)
+        {
+          prevMatch(blxWindowGetDetailView(blxWindow), seqList, FALSE);
+        }
+      else
+        {
+          firstMatch(blxWindowGetDetailView(blxWindow), seqList, FALSE);
+        }
+    }
+  
+  return result;
+}
+
+
+/* Search for the given DNA string in the reference sequence. Searches for the next (rightwards)
+ * value from the given start coord, unless searchLeft is true in which case it searches leftwards.
+ * If findAgain is true it repeats the last DNA search. */
+static void blxWindowFindDnaString(GtkWidget *blxWindow, 
+                                   const char *inputSearchStr, 
+                                   const int refSeqStart,
+                                   const gboolean searchLeft, 
+                                   const gboolean findAgain, 
+                                   GError **error)
+{
+  /* Remember the last input string for use with findAgain */
+  static char *searchStr = NULL;
+  
+  if (!findAgain)
+    {
+      /* We must copy the input string because it may not exist if/when we come to do a 'find again' */
+      g_free(searchStr);
+      searchStr = g_strdup(inputSearchStr);
+    }
+  
+  const int searchStrMax = searchStr ? strlen(searchStr) - 1 : -1;
+  
+  if (searchStrMax < 0)
+    {
+      return;
+    }
+
+  const int searchStart = searchLeft ? searchStrMax : 0;
+  const int searchEnd = searchLeft ? 0 : searchStrMax;
+  const int searchStrIncrement = searchLeft ? -1 : 1;
+  
+  /* Values increase left-to-right in normal display or right-to-left in reversed display */
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+  const gboolean searchForward = (searchLeft == bc->displayRev);
+  const int refSeqIncrement = searchForward ? 1 : -1;
+  
+  /* We'll need to complement ref seq bases if the active strand is the reverse strand */
+  const gboolean complement = (blxWindowGetActiveStrand(blxWindow) == BLXSTRAND_REVERSE);
+  
+  int refSeqIdx = refSeqStart;
+  int searchStrIdx = searchStart;
+  int matchStart = UNSET_INT;
+  
+  while (refSeqIdx >= bc->refSeqRange.min() && refSeqIdx <= bc->refSeqRange.max() && searchStrIdx >= 0 && searchStrIdx <= searchStrMax)
+    {
+      const char refSeqBase = getSequenceIndex(bc->refSeq, refSeqIdx, complement, &bc->refSeqRange, BLXSEQ_DNA);
+      char searchStrBase = convertBaseToCorrectCase(searchStr[searchStrIdx], BLXSEQ_DNA);      
+      
+      if (refSeqBase == searchStrBase)
+        {
+          /* The base matches. If it's the first matching base, set the match-start coord (or if we're 
+           * searching leftwards, then always set the match-start coord, because the start is actually 
+           * the last coord that will be found). Then proceed to the next position in the search string */
+          if (matchStart == UNSET_INT)
+            {
+              matchStart = refSeqIdx;
+            }
+          
+          searchStrIdx += searchStrIncrement;
+          refSeqIdx += refSeqIncrement;
+        }
+      else if (matchStart != UNSET_INT)
+        {
+          /* We were in a match but this base doesn't match. Reset to the start of the 
+           * search string, and start looking again from one base after the place where the last
+           * match started. (We need to re-check all bases from there because we're comparing
+           * against a different section of the search string now.) */
+          searchStrIdx = searchStart;
+          refSeqIdx = matchStart + refSeqIncrement;
+          matchStart = UNSET_INT;
+        }
+      else
+        {
+          refSeqIdx += refSeqIncrement;
+        }
+    }
+  
+  /* Undo the last increment, so that we have the final coords of the matching section (if found) */
+  refSeqIdx -= refSeqIncrement;
+  searchStrIdx -= searchStrIncrement;
+  
+  /* If we reached the end of the search string, then we matched the whole lot. */
+  const gboolean finished = searchStrIdx == searchEnd;
+  
+  if (matchStart != UNSET_INT && finished)
+    {
+      GtkWidget *detailView = blxWindowGetDetailView(blxWindow);
+      const int frame = 1;
+      
+      int resultStart = searchLeft ? refSeqIdx : matchStart;
+      int resultEnd = searchLeft ? matchStart : refSeqIdx;
+      
+      /* Select the start index in the result */
+      detailViewSetSelectedDnaBaseIdx(detailView, resultStart, frame, TRUE, FALSE, FALSE);
+
+      /* Extend the selection to the end index */
+      detailViewSetSelectedDnaBaseIdx(detailView, resultEnd, frame, FALSE, TRUE, TRUE);
+      
+      detailViewRedrawAll(detailView);
+    }
+  else
+    {
+      g_set_error(error, BLX_ERROR, BLX_ERROR_STRING_NOT_FOUND, "The string '%s' was not found in the reference sequence searching to the %s from coord %d.\n", searchStr, (searchLeft ? "left" : "right"), refSeqStart);
+    }
+}
+
+
+/* Get the start coord for a search. If startBeginning is false, this gets the currently-selected display
+ * index (shifted by one base so that we don't start searching at the same position as a previous
+ * find result) or, if no base index is selected, returns the start coord of the current display range. If
+ * startBeginning is true, just start from the beginning of the reference sequence. The result is 
+ * nucleotide coord on the ref sequence. */
+static int getSearchStartCoord(GtkWidget *blxWindow, const gboolean startBeginning, const gboolean searchLeft)
+{
+  int result = UNSET_INT;
+  
+  const BlxContext *bc = blxWindowGetContext(blxWindow);
+  
+  if (startBeginning)
+    {
+      result = (searchLeft == bc->displayRev) ? bc->refSeqRange.min() : bc->refSeqRange.max();
+    }
+  else  
+    {
+      GtkWidget *detailView = blxWindowGetDetailView(blxWindow);
+      result = detailViewGetSelectedDisplayIdx(detailView);
+      
+      if (result != UNSET_INT)
+        {
+          /* Increment by one to make sure we don't re-find a previously-found match
+           * (or decrement if searching leftwards) */
+           if (searchLeft)
+             {
+                --result;
+              }
+            else
+              {
+                ++result;
+              }
+        }
+      else
+        {
+          /* The start display coord is the min coord if we're searching left and the max if searching right. */
+          const IntRange* const displayRange = detailViewGetDisplayRange(detailView);
+          result = searchLeft ? displayRange->max() : displayRange->min();
+        }
+
+      /* Convert the display coord to a nucleotide coord */
+      result = convertDisplayIdxToDnaIdx(result, bc->seqType, 1, 1, bc->numFrames, bc->displayRev, &bc->refSeqRange);
+    }
+  
+  return result;
+}
+
+
+/* Callback called when requested to search for a DNA string. If found, sets the currently-
+ * selected base index to the coord where the matching string starts. The text entry for the
+ * search string is passed as the callback data. */
+static gboolean onFindDnaString(GtkWidget *button, const gint responseId, gpointer data)
+{
+  gboolean result = TRUE;
+  
+  /* Get the search string from the text entry. If the toggle button is not active, call
+   * blxWindowFindDnaString with a NULL search string to "cancel" any previous searches
+   * so that "findAgain" will not attempt to perform a DNA search). */
+  const char *searchStr = NULL;
+
+  if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)))
+    {
+      searchStr = getStringFromTextEntry(GTK_ENTRY(data));
+
+      if (!searchStr || strlen(searchStr) < 1)
+        {
+          g_critical("DNA search failed. The search string was empty.\n");
+          result = FALSE;
+        }
+    }
+
+  /* Search left wrt the screen if the user hit 'back' search right if 'forward' */
+  const gboolean searchLeft = (responseId == BLX_RESPONSE_BACK);
+
+  GtkWindow *dialogWindow = GTK_WINDOW(gtk_widget_get_toplevel(button));
+  GtkWidget *blxWindow = GTK_WIDGET(gtk_window_get_transient_for(dialogWindow));
+  
+  const gboolean startBeginning = (responseId != BLX_RESPONSE_FORWARD && responseId != BLX_RESPONSE_BACK);
+  int startCoord = getSearchStartCoord(blxWindow, startBeginning, searchLeft);
+  
+  GError *error = NULL;
+  blxWindowFindDnaString(blxWindow, searchStr, startCoord, searchLeft, FALSE, &error);
+  
+  if (error)
+    {
+      if (!startBeginning)
+        {
+          /* Try looping round to the beginning */
+          postfixError(error, " Trying again from the %s of the range.\n", (searchLeft ? "end" : "start"));
+          reportAndClearIfError(&error, G_LOG_LEVEL_WARNING);
+          
+          startCoord = getSearchStartCoord(blxWindow, TRUE, searchLeft);
+          blxWindowFindDnaString(blxWindow, searchStr, startCoord, searchLeft, FALSE, &error);
+        }
+    }
+  
+  if (error)
+    {
+      result = FALSE;
+      prefixError(error, "DNA search failed. ");
+      reportAndClearIfError(&error, G_LOG_LEVEL_CRITICAL);
+    }
+  
+  return result;
+}
+
+
+/* Utility to create a drop-down combo box for selecting the column to search by */
+static void createSearchColumnCombo(GtkTable *table, const int col, const int row, GtkWidget *blxWindow)
+{
+  GtkWidget *hbox = gtk_hbox_new(FALSE, 0);
+  gtk_table_attach(table, hbox, col, col + 1, row, row + 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), GTK_SHRINK, DEFAULT_TABLE_XPAD, DEFAULT_TABLE_YPAD);
+  
+  GtkWidget *detailView = blxWindowGetDetailView(blxWindow);
+  DetailViewProperties *dvProperties = detailViewGetProperties(detailView);
+  GList *columnList = blxWindowGetColumnList(dvProperties->blxWindow());
+
+  createSortBox(GTK_BOX(hbox), detailView, BLXCOL_SEQNAME, columnList, "Search column: ", TRUE);  
+}
+
+
+static void onClearFindDialog(GtkWidget *button, gpointer data)
+{
+  GSList *entryList = (GSList*)data;
+  
+  for ( ; entryList; entryList = entryList->next)
+    {
+      if (GTK_IS_ENTRY(entryList->data))
+        {
+          GtkEntry *entry = GTK_ENTRY(entryList->data);
+          gtk_entry_set_text(entry, "");
+        }
+      else if (GTK_IS_TEXT_VIEW(entryList->data))
+        {
+          GtkTextView *textView = GTK_TEXT_VIEW(entryList->data);
+          gtk_text_buffer_set_text(gtk_text_view_get_buffer(textView), "", -1);
+        }
+      else
+        {
+          g_warning("onClearFindDialog: Unexpected widget type: expected GtkEntry or GtkTextView\n");
+        }
+    }
+}
+
+
+/* Clear up data created for the find dialog when it is destroyed
+ * (here for completeness but not actually called because the dialog
+ * is persistent). */
+static void onDestroyFindDialog(GtkWidget *widget, gpointer data)
+{
+  GSList *entryList = (GSList*)data;
+
+  if (entryList)
+    {
+      g_slist_free(entryList);
+    }
+}
+
+
+/* Show the 'Find' dialog */
+void showFindDialog(GtkWidget *blxWindow, const gboolean bringToFront)
+{
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+  const BlxDialogId dialogId = BLXDIALOG_FIND;
+  GtkWidget *dialog = getPersistentDialog(bc->dialogList, dialogId);
+  
+  if (!dialog)
+    {
+      char *title = g_strdup_printf("%sFind sequences", blxGetTitlePrefix(bc));
+
+      /* Note that we add some buttons here but some more at the end because
+       * we want to create a custom Clear button in the middle somewhere */
+      dialog = gtk_dialog_new_with_buttons(title, 
+                                           GTK_WINDOW(blxWindow), 
+                                           GTK_DIALOG_DESTROY_WITH_PARENT,
+                                           GTK_STOCK_GO_BACK,     /* previous match */
+                                           BLX_RESPONSE_BACK,
+                                           GTK_STOCK_GO_FORWARD,  /* next match */
+                                           BLX_RESPONSE_FORWARD,
+                                           NULL);
+      
+      g_free(title);
+      
+      /* These calls are required to make the dialog persistent... */
+      addPersistentDialog(bc->dialogList, dialogId, dialog);
+      g_signal_connect(dialog, "delete-event", G_CALLBACK(gtk_widget_hide_on_delete), NULL);
+      
+      GtkBox *contentArea = GTK_BOX(GTK_DIALOG(dialog)->vbox);
+      GtkBox *actionArea = GTK_BOX(GTK_DIALOG(dialog)->action_area);
+      const int numRows = 3;
+      const int numCols = 2;
+      GtkTable *table = GTK_TABLE(gtk_table_new(numRows, numCols, FALSE));
+      gtk_box_pack_start(contentArea, GTK_WIDGET(table), TRUE, TRUE, 0);
+
+      /* This list will be populated with the text entry widgets. */
+      GSList *entryList = NULL;
+
+      /* Column 1: match-seq search options */
+      GtkRadioButton *button1 = createRadioButton(table, 1, 1, NULL, "_Text search (wildcards * and ?)", TRUE, TRUE, FALSE, onFindSeqsFromName, blxWindow, &entryList);
+      createRadioButton(table, 1, 2, button1, "_List search", FALSE, TRUE, TRUE, onFindSeqsFromList, blxWindow, &entryList);
+      createSearchColumnCombo(table, 1, 3, blxWindow);
+      
+      /* Column 2: ref-seq search options */
+      createRadioButton(table, 2, 1, button1, "_DNA search", FALSE, TRUE, FALSE, onFindDnaString, blxWindow, &entryList);
+      
+      /* Add a button to clear the text entry fields. It's easier to do this
+       * here than in the response callback because we want to send different data */
+      GtkWidget *clearButton = gtk_button_new_from_stock(GTK_STOCK_CLEAR);
+      g_signal_connect(G_OBJECT(clearButton), "clicked", G_CALLBACK(onClearFindDialog), entryList);
+      gtk_box_pack_end(actionArea, clearButton, FALSE, FALSE, 0);
+
+      /* Add remaining buttons after the Clear button */
+      gtk_dialog_add_buttons(GTK_DIALOG(dialog),
+                             GTK_STOCK_CLOSE,       /* close / cancel */
+                             GTK_RESPONSE_REJECT,
+                             GTK_STOCK_OK,          /* ok, do the search */
+                             GTK_RESPONSE_ACCEPT,
+                             NULL);
+
+      gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(blxWindow));
+      g_signal_connect(dialog, "response", G_CALLBACK(onResponseDialog), GINT_TO_POINTER(TRUE));
+      g_signal_connect(dialog, "destroy", G_CALLBACK(onDestroyFindDialog), entryList);
+    }
+
+  gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT);
+  
+  gtk_widget_show_all(dialog);
+  
+  if (bringToFront)
+    {
+      gtk_window_present(GTK_WINDOW(dialog));
+    }
+}
+
+
+/* Show the 'Info' dialog, which displays info about the currently-selected sequence(s) */
+void showInfoDialog(GtkWidget *blxWindow)
+{
+  GtkWidget *dialog = gtk_dialog_new_with_buttons("Blixem - Sequence info", 
+						  NULL, 
+						  GTK_DIALOG_DESTROY_WITH_PARENT,
+						  GTK_STOCK_CLOSE,
+						  GTK_RESPONSE_REJECT,
+						  NULL);
+  
+  gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_REJECT);
+
+  int width = blxWindow->allocation.width * 0.7;
+  int height = blxWindow->allocation.height * 0.9;
+  
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+
+  /* Compile the message text from the selected sequence(s) */
+  GString *resultStr = g_string_new("");
+  GList *seqItem = bc->selectedSeqs;
+  
+  for ( ; seqItem; seqItem = seqItem->next)
+    {
+      BlxSequence *blxSeq = (BlxSequence*)(seqItem->data);
+      char *seqText = blxSequenceGetInfo(blxSeq, TRUE, bc->columnList);
+      g_string_append_printf(resultStr, "%s\n\n", seqText);
+      g_free(seqText);
+    }
+  
+  /* We'll use the same fixed-width font as the detail-view */
+  GtkWidget *detailView = blxWindowGetDetailView(blxWindow);
+  PangoFontDescription *fontDesc = detailViewGetFontDesc(detailView);
+  
+  GtkWidget *child = createScrollableTextView(resultStr->str, TRUE, fontDesc, TRUE, NULL, &height, NULL);
+                             
+  gtk_window_set_default_size(GTK_WINDOW(dialog), width, height);
+  gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), child, TRUE, TRUE, 0);
+  
+  g_signal_connect(dialog, "response", G_CALLBACK(onResponseDialog), NULL);
+  gtk_widget_show_all(dialog);
+  
+  g_string_free(resultStr, TRUE);
+}
+
+
+/* Toggle the bump state. Currently only the exon view can be bumped, so this just
+ * affects that. */
+static void toggleBumpState(GtkWidget *blxWindow)
+{
+  GtkWidget *bigPicture = blxWindowGetBigPicture(blxWindow);
+  
+  exonViewToggleExpanded(bigPictureGetFwdExonView(bigPicture));
+  exonViewToggleExpanded(bigPictureGetRevExonView(bigPicture));
+}
+
+/***********************************************************
+ *                    Group sequences menu                 *
+ ***********************************************************/
+
+/* Delete a single group */
+static void blxWindowDeleteSequenceGroup(GtkWidget *blxWindow, SequenceGroup *group)
+{
+  BlxContext *blxContext = blxWindowGetContext(blxWindow);
+  
+  if (blxContext->sequenceGroups)
+    {
+      blxContext->destroySequenceGroup(&group);
+      blxWindowGroupsChanged(blxWindow);
+    }
+}
+
+
+static void blxWindowDeleteAllSequenceGroups(GtkWidget *blxWindow)
+{
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+  bc->deleteAllSequenceGroups();
+  blxWindowGroupsChanged(blxWindow);
+}
+
+
+/* Update function to be called whenever groups have been added or deleted,
+ * or sequences have been added to or removed from a group */
+static void blxWindowGroupsChanged(GtkWidget *blxWindow)
+{
+  GtkWidget *detailView = blxWindowGetDetailView(blxWindow);
+  GtkWidget *bigPicture = blxWindowGetBigPicture(blxWindow);
+  
+  /* Re-sort all trees, because grouping affects sort order */
+  detailViewResortTrees(detailView);
+  
+  /* Refilter the trees (because groups affect whether sequences are visible) */
+  callFuncOnAllDetailViewTrees(detailView, refilterTree, NULL);
+
+  /* Resize exon view because transcripts may have been hidden/unhidden */
+  calculateExonViewHeight(bigPictureGetFwdExonView(bigPicture));
+  calculateExonViewHeight(bigPictureGetRevExonView(bigPicture));
+  forceResize(bigPicture);
+
+  /* Redraw all (because highlighting affects both big picture and detail view) */
+  blxWindowRedrawAll(blxWindow);
+}
+
+
+/* Create a new sequence group from the given list of sequence names, with a
+ * unique ID and name, and add it to the blxWindow's list of groups. The group 
+ * should be destroyed with destroySequenceGroup. If ownSeqNames is true, the group
+ * will take ownership of the sequence names and free them when it is destroyed. 
+ * Caller can optionally provide the group name; if not provided, a default name
+ * will be allocated. */
+static SequenceGroup* createSequenceGroup(GtkWidget *blxWindow, 
+                                          GList *seqList, 
+                                          const gboolean ownSeqNames, 
+                                          const char *groupName,
+                                          const bool isQuickGroup = false,
+                                          const bool isFilter = false,
+                                          const bool highlight = true,
+                                          const bool hide = false)
+{
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+  
+  /* Create the new group */
+  SequenceGroup *group = new SequenceGroup;
+  
+  group->seqList = seqList;
+  group->ownsSeqNames = ownSeqNames;
+  group->hidden = hide;
+  group->highlighted = highlight;
+  group->isQuickGroup = isQuickGroup;
+  group->isFilter = isFilter;
+  
+  /* Find a unique ID */
+  GList *lastItem = g_list_last(bc->sequenceGroups);
+  
+  if (lastItem)
+    {
+      SequenceGroup *lastGroup = (SequenceGroup*)(lastItem->data);
+      group->groupId = lastGroup->groupId + 1;
+    }
+  else
+    {
+      group->groupId = 1;
+    }
+
+  if (groupName)
+    {
+      group->groupName = g_strdup_printf("%s%d", groupName, group->groupId);
+    }
+  else
+    {
+      /* Create a default name based on the unique ID */
+      std::stringstream ss;
+      if (isFilter)
+        ss << "Filter";
+      else
+        ss << "Group";
+          
+      ss << group->groupId;
+      
+      group->groupName = g_strdup(ss.str().c_str());
+    }
+  
+  /* Set the order number. For simplicity, set the default order to be the same
+   * as the ID number, so groups are sorted in the order they were added */
+  group->order = group->groupId;
+
+  /* Set the default highlight color */
+  BlxColorId colorId = BLXCOLOR_GROUP;
+  GdkColor *color = getGdkColor(colorId, bc->defaultColors, FALSE, bc->usePrintColors);
+  group->highlightColor = *color;
+
+  /* Add it to the list, and update */
+  bc->sequenceGroups = g_list_append(bc->sequenceGroups, group);
+  blxWindowGroupsChanged(blxWindow);
+  
+  return group;
+}
+
+
+/* This function sets the sequence-group-name text based on the given text entry widget */
+static gboolean onGroupNameChanged(GtkWidget *widget, const gint responseId, gpointer data)
+{
+  gboolean result = TRUE;
+
+  GtkEntry *entry = GTK_ENTRY(widget);
+  SequenceGroup *group = (SequenceGroup*)data;
+  
+  const gchar *newName = gtk_entry_get_text(entry);
+  
+  if (!newName || strlen(newName) < 1)
+    {
+      g_critical("Invalid group name '%s' entered; reverting to previous group name '%s'.", newName, group->groupName);
+      gtk_entry_set_text(entry, group->groupName);
+      result = FALSE;
+    }
+  else
+    {
+      if (group->groupName) 
+        g_free(group->groupName);
+      
+      group->groupName = g_strdup(newName);
+    }
+  
+  return result;
+}
+
+
+/* This function is called when the sequence-group-order text entry widget's
+ * value has changed. It sets the new order number in the group. */
+static gboolean onGroupOrderChanged(GtkWidget *widget, const gint responseId, gpointer data)
+{
+  gboolean result = TRUE;
+  
+  GtkEntry *entry = GTK_ENTRY(widget);
+  SequenceGroup *group = (SequenceGroup*)data;
+  
+  const gchar *newOrder = gtk_entry_get_text(entry);
+  
+  if (!newOrder || strlen(newOrder) < 1)
+    {
+      g_critical("Invalid order number '%s' entered; reverting to previous order number '%d'.", newOrder, group->order);
+      char *orderStr = convertIntToString(group->order);
+      gtk_entry_set_text(entry, orderStr);
+      g_free(orderStr);
+      result = FALSE;
+    }
+  else
+    {
+      group->order = convertStringToInt(newOrder);
+      
+      GtkWindow *dialogWindow = GTK_WINDOW(gtk_widget_get_toplevel(widget));
+      GtkWidget *blxWindow = GTK_WIDGET(gtk_window_get_transient_for(dialogWindow));
+
+      blxWindowGroupsChanged(blxWindow);
+    }
+  
+  return result;
+}
+
+
+/* This callback is called when the dialog settings are applied. It sets the filter
+ * status of the passed group based on the toggle button's state */
+static gboolean onGroupFilterToggled(GtkWidget *button, const gint responseId, gpointer data)
+{
+  gboolean result = TRUE;
+  
+  SequenceGroup *group = (SequenceGroup*)data;
+  group->isFilter = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button));
+
+  /* Refilter trees and redraw all immediately show the new status */
+  GtkWidget *dialog = gtk_widget_get_toplevel(button);
+  GtkWidget *blxWindow = GTK_WIDGET(gtk_window_get_transient_for(GTK_WINDOW(dialog)));
+
+  blxWindowGroupsChanged(blxWindow);
+  
+  return result;
+}
+
+
+/* This callback is called when the dialog settings are applied. It sets the hidden
+ * status of the passed groupo based on the toggle button's state */
+static gboolean onGroupHiddenToggled(GtkWidget *button, const gint responseId, gpointer data)
+{
+  gboolean result = TRUE;
+  
+  SequenceGroup *group = (SequenceGroup*)data;
+  group->hidden = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button));
+
+  /* Refilter trees and redraw all immediately show the new status */
+  GtkWidget *dialog = gtk_widget_get_toplevel(button);
+  GtkWidget *blxWindow = GTK_WIDGET(gtk_window_get_transient_for(GTK_WINDOW(dialog)));
+
+  blxWindowGroupsChanged(blxWindow);
+  
+  return result;
+}
+
+
+/* This callback is called when the toggle button for a group's "highlighted" flag is toggled.
+ * It updates the group's highlighted flag according to the button's new status. */
+static gboolean onGroupHighlightedToggled(GtkWidget *button, const gint responseId, gpointer data)
+{
+  gboolean result = TRUE;
+  
+  SequenceGroup *group = (SequenceGroup*)data;
+  group->highlighted = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button));
+  
+  /* Redraw the blixem window to immediately show the new status. The toplevel
+   * parent of the button is the dialog, and the blixem window is the transient
+   * parent of the dialog. */
+  GtkWidget *dialog = gtk_widget_get_toplevel(button);
+  GtkWidget *blxWindow = GTK_WIDGET(gtk_window_get_transient_for(GTK_WINDOW(dialog)));
+  
+  blxWindowRedrawAll(blxWindow);
+  
+  return result;
+}
+
+
+/* Called when the user has changed the color of a group in the 'edit groups' dialog */
+static gboolean onGroupColorChanged(GtkWidget *button, const gint responseId, gpointer data)
+{  
+  gboolean result = TRUE;
+  
+  SequenceGroup *group = (SequenceGroup*)data;
+  gtk_color_button_get_color(GTK_COLOR_BUTTON(button), &group->highlightColor);
+  gdk_colormap_alloc_color(gdk_colormap_get_system(), &group->highlightColor, TRUE, TRUE);
+  
+  /* Redraw everything in the new colors */
+  GtkWindow *dialogWindow = GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(button)));
+  GtkWidget *blxWindow = GTK_WIDGET(gtk_window_get_transient_for(dialogWindow));
+  blxWindowRedrawAll(blxWindow);
+  
+  return result;
+}
+
+
+/* This function creates a widget that allows the user to edit the group
+ * pointed to by the given list item, and adds it to the table container
+ * widget at the given row. */
+static void createEditGroupWidget(GtkWidget *blxWindow, SequenceGroup *group, GtkTable *table, const int row, const int xpad, const int ypad)
+{
+  /* Show the group's name in a text box that the user can edit */
+  GtkWidget *nameWidget = gtk_entry_new();
+  gtk_entry_set_text(GTK_ENTRY(nameWidget), group->groupName);
+  gtk_entry_set_activates_default(GTK_ENTRY(nameWidget), TRUE);
+  widgetSetCallbackData(nameWidget, onGroupNameChanged, group);
+      
+  /* Add a check box for the 'isFilter' flag */
+  GtkWidget *isFilterWidget = gtk_check_button_new();
+  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(isFilterWidget), group->isFilter);
+  gtk_widget_set_tooltip_text(isFilterWidget, "If any Filter groups are set, Blixem will filter out features of the same type that are not in a Filter group");
+  widgetSetCallbackData(isFilterWidget, onGroupFilterToggled, group);
+      
+  /* Add a check box for the 'hidden' flag */
+  GtkWidget *isHiddenWidget = gtk_check_button_new();
+  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(isHiddenWidget), group->hidden);
+  gtk_widget_set_tooltip_text(isHiddenWidget, "Always hide features in this group");
+  widgetSetCallbackData(isHiddenWidget, onGroupHiddenToggled, group);
+
+  /* Add a check box for the 'highlighted' flag */
+  GtkWidget *isHighlightedWidget = gtk_check_button_new();
+  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(isHighlightedWidget), group->highlighted);
+  gtk_widget_set_tooltip_text(isHighlightedWidget, "Highlight features that are in this group (use the colour selector to set the highlight color)");
+  widgetSetCallbackData(isHighlightedWidget, onGroupHighlightedToggled, group);
+      
+  /* Show the group's order number in an editable text box */
+  GtkWidget *orderWidget = gtk_entry_new();
+
+  char *orderStr = convertIntToString(group->order);
+  gtk_entry_set_text(GTK_ENTRY(orderWidget), orderStr);
+  g_free(orderStr);
+      
+  gtk_entry_set_activates_default(GTK_ENTRY(orderWidget), TRUE);
+  gtk_widget_set_size_request(orderWidget, 30, -1);
+  widgetSetCallbackData(orderWidget, onGroupOrderChanged, group);
+
+  /* Show the group's highlight color in a button that will also launch a color-picker */
+  GtkWidget *colorButton = gtk_color_button_new_with_color(&group->highlightColor);
+  widgetSetCallbackData(colorButton, onGroupColorChanged, group);
+      
+  /* Create a button that will delete this group */
+  GtkWidget *deleteButton = gtk_button_new_from_stock(GTK_STOCK_DELETE);
+  g_signal_connect(G_OBJECT(deleteButton), "clicked", G_CALLBACK(onButtonClickedDeleteGroup), group);
+      
+  /* Put everything in the table */
+  gtk_table_attach(table, nameWidget,               1, 2, row, row + 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), GTK_SHRINK, xpad, ypad);
+  gtk_table_attach(table, isFilterWidget,           2, 3, row, row + 1, GTK_SHRINK, GTK_SHRINK, xpad, ypad);
+  gtk_table_attach(table, isHiddenWidget,           3, 4, row, row + 1, GTK_SHRINK, GTK_SHRINK, xpad, ypad);
+  gtk_table_attach(table, isHighlightedWidget,      4, 5, row, row + 1, GTK_SHRINK, GTK_SHRINK, xpad, ypad);
+  gtk_table_attach(table, orderWidget,              5, 6, row, row + 1, GTK_SHRINK, GTK_SHRINK, xpad, ypad);
+  gtk_table_attach(table, colorButton,              6, 7, row, row + 1, GTK_SHRINK, GTK_SHRINK, xpad, ypad);
+  gtk_table_attach(table, deleteButton,             7, 8, row, row + 1, GTK_SHRINK, GTK_SHRINK, xpad, ypad);
+}
+
+
+/* Like blxSequenceGetColumn but also supports the group column (which
+ * needs the context for its data) */
+static const char* blxSequenceGetColumnData(const BlxSequence* const blxSeq, 
+                                            const BlxColumnId columnId,
+                                            const BlxContext *bc)
+{
+  const char *result = NULL;
+
+  if (columnId == BLXCOL_GROUP)
+    {
+      const SequenceGroup *group = bc->getFirstSequenceGroup(blxSeq);
+
+      if (group)
+        result = group->groupName;
+    }
+  else
+    {
+      result = blxSequenceGetColumn(blxSeq, columnId);
+    }
+  
+  return result;
+}
+          
+
+/* Called for an entry from a list of BlxSequences. Compares the relevant data
+ * from the BlxSequence (as indicated by the searchCol member of the SeqSearchData
+ * struct) to the search string (also specified in the SeqSearchData). If it
+ * matches, it appends the BlxSequence to the result list in the SeqSearchData. */
+static void getSequencesThatMatch(gpointer listDataItem, gpointer data)
+{
+  /* Get the BlxSequence for this list item */
+  BlxSequence *seq = (BlxSequence*)listDataItem;
+  
+  /* Get the search data */
+  SeqSearchData *searchData = (SeqSearchData*)data;
+  
+  if (searchData->error)
+    return; /* already hit an error so don't try any more */
+
+  /* Get the relevant data for the search column */
+  const char *dataToCompare = blxSequenceGetColumnData(seq, searchData->searchCol, searchData->bc);
+  
+  if (!dataToCompare)
+    {
+      if (searchData->error)
+        {
+          /* Default error message is not that useful, so replace it */
+          reportAndClearIfError(&searchData->error, G_LOG_LEVEL_DEBUG);
+          g_set_error(&searchData->error, BLX_ERROR, BLX_ERROR_INVALID_COLUMN, "Invalid search column.\n");
+        }
+      
+      return;
+    }
+  
+  /* Do the search */
+  gboolean found = wildcardSearch(dataToCompare, searchData->searchStr);
+
+  if (searchData->searchCol == BLXCOL_SEQNAME)
+    {
+      /* Sequence names have a variant number postfix; if not found, try
+       * to match the text without this postfix. */
+      if (!found && dataToCompare)
+        {
+          char *seqName = g_strdup(dataToCompare);
+          char *cutPoint = strchr(seqName, '.');
+          
+          if (cutPoint)
+            {
+              *cutPoint = '\0';
+              found = wildcardSearch(seqName, searchData->searchStr);
+            }
+          
+          g_free(seqName);
+        }
+    }
+  
+  if (found)
+    {
+      /* Add this BlxSequence onto the result list. */
+      searchData->matchList = g_list_prepend(searchData->matchList, seq);
+    }  
+}
+
+
+/* If the given radio button is enabled, add a group based on the curently-
+ * selected sequences. */
+static gboolean onAddGroupFromSelection(GtkWidget *button, const gint responseId, gpointer data)
+{
+  gboolean result = TRUE;
+  
+  if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)))
+    {  
+      GtkWindow *dialogWindow = GTK_WINDOW(gtk_widget_get_toplevel(button));
+      GtkWidget *blxWindow = GTK_WIDGET(gtk_window_get_transient_for(dialogWindow));
+
+      BlxContext *blxContext = blxWindowGetContext(blxWindow);
+      
+      if (g_list_length(blxContext->selectedSeqs) > 0)
+        {
+          GList *list = g_list_copy(blxContext->selectedSeqs); /* group takes ownership of this */
+          createSequenceGroup(blxWindow, list, FALSE, NULL);
+        }
+      else
+        {
+          result = FALSE;
+          g_critical("Warning: cannot create group; no sequences are currently selected");
+        }
+    }
+  
+  return result;
+}
+
+
+/* If the given radio button is enabled, add a group based on the search text
+ * in the given text entry. This function finds the combo box on the dialog that
+ * specifies which column to search by, and searches the relevant column for
+ * the given search text. */
+static gboolean onAddGroupFromText(GtkWidget *button, const gint responseId, gpointer data)
+{
+  gboolean result = TRUE;
+  
+  /* Nothing to do if this radio button is not active */
+  if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)))
+    {
+      return result;
+    }
+  
+  /* Get the dialog and main window */
+  GtkWidget *dialog = gtk_widget_get_toplevel(button);
+  GtkWidget *blxWindow = GTK_WIDGET(gtk_window_get_transient_for(GTK_WINDOW(dialog)));
+
+  /* Get the search text from the text entry widget (which is passed as user data) */
+  const char *inputText = getStringFromTextEntry(GTK_ENTRY(data));
+
+  /* Find the combo box on the dialog (there should only be one), which tells
+   * us which column to search. */
+  GtkComboBox *combo = widgetGetComboBox(dialog);
+  BlxColumnId searchCol = getColumnFromComboBox(combo);
+  
+  GError *error = NULL;
+  GList *seqList = findSeqsFromColumn(blxWindow, inputText, searchCol, FALSE, FALSE, &error);
+
+  if (error)
+    {
+      reportAndClearIfError(&error, G_LOG_LEVEL_CRITICAL);
+      result = FALSE;
+    }
+
+  if (seqList)
+    {
+      GtkWindow *dialogWindow = GTK_WINDOW(gtk_widget_get_toplevel(button));
+      GtkWidget *blxWindow = GTK_WIDGET(gtk_window_get_transient_for(dialogWindow));
+
+      createSequenceGroup(blxWindow, seqList, FALSE, inputText);
+    }
+  
+  return result;
+}
+
+
+/* Utility function to take a list of search strings (newline separated), and
+ * return a list of BlxSequences whose column data matches one of those search
+ * strings. */
+static GList* getSeqStructsFromSearchStringList(GList *searchStringList, 
+                                                GList *seqList, 
+                                                BlxContext *bc, 
+                                                const BlxColumnId searchCol,
+                                                GError **error)
+{
+  SeqSearchData searchData = {NULL, searchCol, bc, NULL, NULL};
+  
+  /* Loop through all the names in the input list */
+  GList *nameItem = searchStringList;
+  for ( ; nameItem; nameItem = nameItem->next)
+    {
+      /* Compare this name to all names in the sequence list. If it matches,
+       * add it to the result list. */
+      searchData.searchStr = (const char*)(nameItem->data);
+      g_list_foreach(seqList, getSequencesThatMatch, &searchData);
+      
+      if (searchData.error)
+        break;
+    }
+
+  if (searchData.error)
+    g_propagate_error(error, searchData.error);
+  
+  return searchData.matchList;
+}
+
+
+/* Utility to create a GList of BlxSequences from a textual list of search strings.
+ * Returns only valid sequences that blixem knows about. Looks for sequences
+ * whose relevent data for the given column matches an item in the input text
+ * (which may be a multi-line list; one search string per line). */
+static GList* getSeqStructsFromText(GtkWidget *blxWindow, const char *inputText, const BlxColumnId searchCol, GError **error)
+{
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+
+  GError *tmpError = NULL;
+
+  GList *searchStringList = parseMatchList(inputText);
+
+  /* Extract the entries from the list that are sequences that blixem knows about */
+  GList *matchSeqs = bc->matchSeqs;
+  GList *seqList = getSeqStructsFromSearchStringList(searchStringList, matchSeqs, bc, searchCol, &tmpError);
+
+  if (tmpError)
+    g_propagate_error(error, tmpError);
+  
+  /* Must free the original name list and all its data. */
+  freeStringList(&searchStringList, TRUE);
+  
+  if (g_list_length(seqList) < 1)
+    {
+      g_list_free(seqList);
+      seqList = NULL;
+    }
+  
+  return seqList;
+}
+
+
+/* Create a group/filter from features on the clipboard. Adds to an existing quick group/filter
+ * if exists, otherwise creates one. */
+static void createGroupOrFilterFromClipboard(GtkClipboard *clipboard, 
+                                             const char *clipboardText, 
+                                             const bool isFilter,
+                                             gpointer data)
+{
+  /* Get the list of sequences to include */
+  GtkWidget *blxWindow = GTK_WIDGET(data);
+  GList *seqList = getSeqStructsFromText(blxWindow, clipboardText, BLXCOL_SEQNAME, NULL);
+  
+  if (seqList)
+    {
+      /* See if there's already a quick group/filter */
+      BlxContext *blxContext = blxWindowGetContext(blxWindow);
+      SequenceGroup *group = blxContext->getQuickGroup(isFilter);
+
+      if (group)
+        {
+          group->seqList = g_list_concat(group->seqList, seqList);
+          blxWindowGroupsChanged(blxWindow);
+        }
+      else
+        {
+          createSequenceGroup(blxWindow, seqList, FALSE, NULL, true, isFilter, !isFilter, false);
+        }
+
+      refreshDialog(BLXDIALOG_GROUPS, blxWindow);
+    }
+}
+
+
+/* Callback function to be used when requesting text from the clipboard to be used
+ * to create a group from the paste text */
+static void createGroupFromClipboard(GtkClipboard *clipboard, const char *clipboardText, gpointer data)
+{
+  createGroupOrFilterFromClipboard(clipboard, clipboardText, false, data) ;
+}
+
+/* Callback function to be used when requesting text from the clipboard to be used
+ * to create a filter from the paste text */
+static void createFilterFromClipboard(GtkClipboard *clipboard, const char *clipboardText, gpointer data)
+{
+  createGroupOrFilterFromClipboard(clipboard, clipboardText, true, data) ;
+}
+
+
+
+/* Callback function to be used when requesting text from the clipboard to be used
+ * to find sequences based on the paste text. Scrolls the first selected
+ * match into view. */
+void findSeqsFromClipboard(GtkClipboard *clipboard, const char *clipboardText, gpointer data)
+{
+  /* Get the list of sequences to include */
+  GtkWidget *blxWindow = GTK_WIDGET(data);
+  GList *seqList = getSeqStructsFromText(blxWindow, clipboardText, BLXCOL_SEQNAME, NULL);
+  
+  if (seqList)
+    {
+      blxWindowSetSelectedSeqList(blxWindow, seqList);
+    }
+}
+
+
+/* Callback function to be used when requesting text from the clipboard to be used
+ * to find and select sequences based on the paste text. Scrolls the first selected
+ * match into view. */
+void findAndSelectSeqsFromClipboard(GtkClipboard *clipboard, const char *clipboardText, gpointer data)
+{
+  /* Get the list of sequences to include */
+  GtkWidget *blxWindow = GTK_WIDGET(data);
+  GList *seqList = getSeqStructsFromText(blxWindow, clipboardText, BLXCOL_SEQNAME, NULL);
+  
+  if (seqList)
+    {
+      blxWindowSetSelectedSeqList(blxWindow, seqList);
+      firstMatch(blxWindowGetDetailView(blxWindow), seqList, FALSE);
+    }
+}
+
+
+static void hideSelectedSources(GtkWidget *blxWindow, const bool refresh = true)
+{
+  BlxContext *blxContext = blxWindowGetContext(blxWindow);
+  g_return_if_fail(blxContext);
+
+  std::set<GQuark> sourceList = blxContext->getSelectedSources();
+  GList *seqList = blxContext->getFeaturesInSourceList(sourceList);
+
+  if (seqList)
+    {
+      createSequenceGroup(blxWindow, seqList, FALSE, "HideSource", false, false, false, true);
+  
+      if (refresh)
+        {
+          blxWindowGroupsChanged(blxWindow);
+          refreshDialog(BLXDIALOG_GROUPS, blxWindow);
+        }
+    }
+}
+
+
+/* Disable all groups/filters */
+static void clearGroups(GtkWidget *blxWindow, const bool refresh = true)
+{
+  BlxContext *blxContext = blxWindowGetContext(blxWindow);
+
+  blxContext->disableAllGroups();
+  
+  if (refresh)
+    {
+      blxWindowGroupsChanged(blxWindow);
+      refreshDialog(BLXDIALOG_GROUPS, blxWindow);
+    }
+}
+
+
+/* This function creates a group (or filter, if filter=true) from features 
+ * on the clipboard text (which should contain valid sequence name(s)). */
+static void createQuickGroup(GtkWidget *blxWindow, const bool isFilter, const bool clearPrevious)
+{
+  BlxContext *blxContext = blxWindowGetContext(blxWindow);
+
+  if (clearPrevious)
+    blxContext->disableAllQuickGroups();
+  
+  if (isFilter)
+    requestPrimaryClipboardText(createFilterFromClipboard, blxWindow);
+  else
+    requestPrimaryClipboardText(createGroupFromClipboard, blxWindow);
+}
+
+
+/* If the given radio button is enabled, add a group based on the list of sequences
+ * in the given text entry. */
+static gboolean onAddGroupFromList(GtkWidget *button, const gint responseId, gpointer data)
+{
+  gboolean result = TRUE;
+  
+  if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)))
+    {
+      return result;
+    }
+  
+  /* Get the dialog and main window */
+  GtkWidget *dialog = gtk_widget_get_toplevel(button);
+  GtkWidget *blxWindow = GTK_WIDGET(gtk_window_get_transient_for(GTK_WINDOW(dialog)));
+  
+  /* Find the combo box on the dialog (there should only be one), which tells
+   * us which column to search. */
+  GtkComboBox *combo = widgetGetComboBox(dialog);
+  BlxColumnId searchCol = getColumnFromComboBox(combo);
+  
+  /* The text entry box was passed as the user data. We should have a (multi-line) text view */
+  const char *inputText = getStringFromTextView(GTK_TEXT_VIEW(data));
+
+  GError *error = NULL;
+  GList *seqList = findSeqsFromList(blxWindow, inputText, searchCol, FALSE, FALSE, &error);
+  
+  if (error)
+    {
+      reportAndClearIfError(&error, G_LOG_LEVEL_CRITICAL);
+      result = FALSE;
+    }
+  
+  if (seqList)
+    {
+      GtkWindow *dialogWindow = GTK_WINDOW(gtk_widget_get_toplevel(button));
+      GtkWidget *blxWindow = GTK_WIDGET(gtk_window_get_transient_for(dialogWindow));
+
+      createSequenceGroup(blxWindow, seqList, FALSE, NULL);
+    }
+  
+  return result;
+}
+
+
+/* Called when the user has clicked the "delete all groups" button on the "group sequences" dialog. */
+static void onButtonClickedDeleteAllGroups(GtkWidget *button, gpointer data)
+{
+  GtkWindow *dialogWindow = GTK_WINDOW(gtk_widget_get_toplevel(button));
+  GtkWidget *blxWindow = GTK_WIDGET(gtk_window_get_transient_for(dialogWindow));
+
+  /* Ask the user if they're sure */
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+  char *title = g_strdup_printf("%sDelete groups", blxGetTitlePrefix(bc));
+  gint response = runConfirmationBox(blxWindow, title, "This will delete ALL groups. Are you sure?");
+  g_free(title);
+
+  if (response == GTK_RESPONSE_ACCEPT)
+    {
+      blxWindowDeleteAllSequenceGroups(blxWindow);
+      
+      /* Close the dialog, because there are no groups left to display. */
+      gtk_widget_hide_all(GTK_WIDGET(dialogWindow));
+    }
+}
+
+
+/* Called when the user has clicked the "delete group" button on the "group sequences" dialog. */
+static void onButtonClickedDeleteGroup(GtkWidget *button, gpointer data)
+{
+  SequenceGroup *group = (SequenceGroup*)data;
+  
+  GtkWindow *dialogWindow = GTK_WINDOW(gtk_widget_get_toplevel(button));
+  GtkWidget *blxWindow = GTK_WIDGET(gtk_window_get_transient_for(dialogWindow));
+  
+  /* Ask the user if they're sure */
+  char formatStr[] = "Are you sure you wish to delete group '%s'?";
+  char messageText[strlen(formatStr) + strlen(group->groupName)];
+  sprintf(messageText, formatStr, group->groupName);
+  
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+  char *title = g_strdup_printf("%sDelete group", blxGetTitlePrefix(bc));
+  gint response = runConfirmationBox(blxWindow, title, messageText);
+  g_free(title);
+  
+  if (response == GTK_RESPONSE_ACCEPT)
+    {
+      blxWindowDeleteSequenceGroup(blxWindow, group);
+      refreshDialog(BLXDIALOG_GROUPS, blxWindow);
+    }
+}
+
+
+/* Called when the user chooses a different tabe on the groups dialog */
+static gboolean onSwitchPageGroupsDialog(GtkNotebook *notebook, GtkNotebookPage *page, guint pageNum, gpointer data)
+{
+  GtkDialog *dialog = GTK_DIALOG(data);
+
+  if (pageNum == 0)
+    {
+      /* For the create-groups page, set the default response to be 'accept' */
+      gtk_dialog_set_default_response(dialog, GTK_RESPONSE_ACCEPT);
+    }
+  else
+    {
+      /* For other pages, set default response to be 'apply' */
+      gtk_dialog_set_default_response(dialog, GTK_RESPONSE_APPLY);
+    }
+    
+  return FALSE;
+}
+
+
+/* Utility to find and return a notebook child of the given widget. Assumes there is only
+ * one - if there are more it will just return the first found. Returns NULL if not found. */
+static GtkNotebook* containerGetChildNotebook(GtkContainer *container)
+{
+  GtkNotebook *result = NULL;
+  
+  GList *children = gtk_container_get_children(container);
+  GList *child = children;
+  
+  for ( ; child; child = child->next)
+    {
+      GtkWidget *childWidget = GTK_WIDGET(child->data);
+      
+      if (GTK_IS_NOTEBOOK(childWidget))
+        {
+          result = GTK_NOTEBOOK(childWidget);
+          break;
+        }
+      else if (GTK_IS_CONTAINER(childWidget))
+       {
+         /* recurse */
+         containerGetChildNotebook(GTK_CONTAINER(childWidget));
+       }
+    }
+
+  g_list_free(children);
+ 
+  return result;
+}
+
+
+/* Callback called when user responds to groups dialog */
+void onResponseGroupsDialog(GtkDialog *dialog, gint responseId, gpointer data)
+{
+  gboolean destroy = FALSE;
+  gboolean refresh = FALSE;
+  
+  /* If a notebook was passed, only call callbacks for widgets in the active tab */
+  GtkNotebook *notebook = containerGetChildNotebook(GTK_CONTAINER(dialog->vbox));
+               
+  if (!notebook)
+    {
+      g_warning("Expected Groups dialog to contain a notebook widget. Dialog may not refresh properly.\n");
+    }
+
+  guint pageNo = notebook ? gtk_notebook_get_current_page(notebook) : 0;
+  GtkWidget *page = notebook ? gtk_notebook_get_nth_page(notebook, pageNo) : NULL;
+  
+  switch (responseId)
+  {
+    case GTK_RESPONSE_ACCEPT:
+      destroy = widgetCallAllCallbacks(page, GINT_TO_POINTER(responseId));
+      refresh = FALSE;
+      break;
+
+    case GTK_RESPONSE_APPLY:
+      widgetCallAllCallbacks(page, GINT_TO_POINTER(responseId));
+      destroy = FALSE;
+      refresh = (pageNo == 0); /* if created a new group, Edit Groups section must be refreshed */
+      break;
+      
+    case GTK_RESPONSE_CANCEL:
+    case GTK_RESPONSE_REJECT:
+      destroy = TRUE;
+      refresh = FALSE;
+      break;
+      
+    default:
+      break;
+  };
+  
+  if (destroy)
+    {
+      /* Groups dialog is persistent, so hide it rather than destroying it */
+      gtk_widget_hide_all(GTK_WIDGET(dialog));
+    }
+  else if (refresh)
+    {
+      GtkWidget *blxWindow = GTK_WIDGET(data);
+      refreshDialog(BLXDIALOG_GROUPS, blxWindow);
+    }
+}
+
+
+/* Create the 'create group' tab of the groups dialog. Appends it to the notebook. */
+static void createCreateGroupTab(GtkNotebook *notebook, BlxContext *bc, GtkWidget *blxWindow)
+{
+  const int numRows = 3;
+  const int numCols = 2;
+  const gboolean seqsSelected = g_list_length(bc->selectedSeqs) > 0;
+  
+  /* Put everything in a table */
+  GtkTable *table = GTK_TABLE(gtk_table_new(numRows, numCols, FALSE));
+
+  /* Append the table as a new tab to the notebook */
+  gtk_notebook_append_page(notebook, GTK_WIDGET(table), gtk_label_new("Create group"));
+  
+  /* Create the left-hand-side column */
+  GtkRadioButton *button1 = createRadioButton(table, 1, 1, NULL, "_Text search (wildcards * and ?)", !seqsSelected, TRUE, FALSE, onAddGroupFromText, blxWindow, NULL);
+  createRadioButton(table, 1, 2, button1, "_List search", FALSE, TRUE, TRUE, onAddGroupFromList, blxWindow, NULL);
+  createSearchColumnCombo(table, 1, 3, blxWindow);
+  
+  /* Create the right-hand-side column */
+  createRadioButton(table, 2, 1, button1, "Use current _selection", seqsSelected, FALSE, FALSE, onAddGroupFromSelection, blxWindow, NULL);
+}
+
+
+/* Create the 'edit groups' tab of the groups dialog. Appends it to the given notebook. */
+static void createEditGroupsTab(GtkNotebook *notebook, BlxContext *bc, GtkWidget *blxWindow)
+{
+  const int numRows = g_list_length(bc->sequenceGroups) + 4; /* +4 for: header; delete-all button;
+                                                                hide-all-seqs; hide-all-features */
+  const int numCols = 7;
+  const int xpad = DEFAULT_TABLE_XPAD;
+  const int ypad = DEFAULT_TABLE_YPAD;
+  int row = 1;
+  
+  /* Put everything in a table inside a scrolled window */
+  GtkTable *table = GTK_TABLE(gtk_table_new(numRows, numCols, FALSE));
+  GtkWidget *scrollWin = gtk_scrolled_window_new(NULL, NULL);
+  gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollWin), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
+  gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrollWin), GTK_WIDGET(table));
+  
+  /* Append the table as a new tab to the notebook */
+  gtk_notebook_append_page(GTK_NOTEBOOK(notebook), GTK_WIDGET(scrollWin), gtk_label_new("Edit groups"));
+  
+  /* Add labels for each column in the table */
+  gtk_table_attach(table, gtk_label_new("Group name"),    1, 2, row, row + 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), GTK_SHRINK, xpad, ypad);
+  gtk_table_attach(table, gtk_label_new("Filter"),        2, 3, row, row + 1, GTK_SHRINK, GTK_SHRINK, xpad, ypad);
+  gtk_table_attach(table, gtk_label_new("Hide"),          3, 4, row, row + 1, GTK_SHRINK, GTK_SHRINK, xpad, ypad);
+  gtk_table_attach(table, gtk_label_new("Highlight"),     4, 5, row, row + 1, GTK_SHRINK, GTK_SHRINK, xpad, ypad);
+  gtk_table_attach(table, gtk_label_new("Order"),         5, 6, row, row + 1, GTK_SHRINK, GTK_SHRINK, xpad, ypad);
+  ++row;
+  
+  /* Add a set of widgets for each group */
+  GList *groupItem = blxWindowGetSequenceGroups(blxWindow);
+  for ( ; groupItem; groupItem = groupItem->next)
+    {
+      SequenceGroup *group = (SequenceGroup*)(groupItem->data);
+      createEditGroupWidget(blxWindow, group, table, row, xpad, ypad);
+      ++row;
+    }
+  
+  /* Add a button to delete all groups */
+  GtkWidget *deleteGroupsButton = gtk_button_new_with_label("Delete all groups");
+  gtk_button_set_image(GTK_BUTTON(deleteGroupsButton), gtk_image_new_from_stock(GTK_STOCK_DELETE, GTK_ICON_SIZE_BUTTON));
+  gtk_widget_set_size_request(deleteGroupsButton, -1, 30);
+  g_signal_connect(G_OBJECT(deleteGroupsButton), "clicked", G_CALLBACK(onButtonClickedDeleteAllGroups), NULL);
+  gtk_table_attach(table, deleteGroupsButton, numCols - 1, numCols + 1, row, row + 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), GTK_SHRINK, xpad, ypad);
+}
+
+
+/* Shows the "Group sequences" dialog. This dialog allows the user to group sequences together.
+ * This tabbed dialog shows both the 'create group' and 'edit groups' dialogs in one. If the
+ * 'editGroups' argument is true and groups exist, the 'Edit Groups' tab is displayed by default;
+ * otherwise the 'Create Groups' tab is shown. */
+void showGroupsDialog(GtkWidget *blxWindow, const gboolean editGroups, const gboolean bringToFront)
+{
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+  const BlxDialogId dialogId = BLXDIALOG_GROUPS;
+  GtkWidget *dialog = getPersistentDialog(bc->dialogList, dialogId);
+  
+  if (!dialog)
+    {
+      char *title = g_strdup_printf("%sGroups", blxGetTitlePrefix(bc));
+
+      dialog = gtk_dialog_new_with_buttons(title,
+                                           GTK_WINDOW(blxWindow), 
+                                           GTK_DIALOG_DESTROY_WITH_PARENT,
+                                           GTK_STOCK_CANCEL,
+                                           GTK_RESPONSE_REJECT,
+                                           GTK_STOCK_APPLY,
+                                           GTK_RESPONSE_APPLY,
+                                           GTK_STOCK_OK,
+                                           GTK_RESPONSE_ACCEPT,
+                                           NULL);
+
+      g_free(title);
+      
+      /* These calls are required to make the dialog persistent... */
+      addPersistentDialog(bc->dialogList, dialogId, dialog);
+      g_signal_connect(dialog, "delete-event", G_CALLBACK(gtk_widget_hide_on_delete), NULL);
+      
+      /* Make sure we only connect the response event once */
+      g_signal_connect(dialog, "response", G_CALLBACK(onResponseGroupsDialog), blxWindow);
+    }
+  else
+    {
+      /* Refresh by deleting the dialog contents and re-creating them. */
+      dialogClearContentArea(GTK_DIALOG(dialog));
+    }
+  
+  /* Create tabbed pages */
+  GtkWidget *notebook = gtk_notebook_new();
+  gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), notebook, TRUE, TRUE, 0);
+
+  createCreateGroupTab(GTK_NOTEBOOK(notebook), bc, blxWindow);
+  createEditGroupsTab(GTK_NOTEBOOK(notebook), bc, blxWindow);
+
+  
+  /* Connect signals and show */
+  gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(blxWindow));
+  g_signal_connect(notebook, "switch-page", G_CALLBACK(onSwitchPageGroupsDialog), dialog);
+  
+  int width = 450, height = 300;
+  int maxwidth = width, maxheight = height;
+  gbtools::GUIGetTrueMonitorSizeFraction(dialog, 0.33, 0.33, &maxwidth, &maxheight);
+  gtk_window_set_default_size(GTK_WINDOW(dialog), std::min(width, maxwidth), std::min(height, maxheight));
+
+  gtk_widget_show_all(dialog);
+
+  if (editGroups && notebook && blxWindowGroupsExist(blxWindow))
+    {
+      gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), 1); /* 'edit' page is the 2nd page */
+    }
+  else
+    {
+      gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), 0); /* 'create' page is the 1st page */
+    }
+  
+  if (bringToFront)
+    {
+      /* If user has asked to edit groups (and some groups exist), make the second tab
+       * the default and the 'close' button the default action. (Must do this after showing
+       * the child widgets due to a GTK legacy whereby the notebook won't change tabs otherwise.) */
+      gtk_window_present(GTK_WINDOW(dialog));
+    }
+}
+
+
+/***********************************************************
+ *                         Settings menu                   *
+ ***********************************************************/
+
+/* This function should be called on the child widget of a dialog box that is a transient
+ * child of the main blixem window. It finds the parent dialog of the child and then finds
+ * the blxWindow from the dialog. */
+static GtkWidget* dialogChildGetBlxWindow(GtkWidget *child)
+{
+  GtkWidget *result = NULL;
+  
+  GtkWindow *dialogWindow = GTK_WINDOW(gtk_widget_get_toplevel(child));
+  
+  if (dialogWindow)
+    {
+      result = GTK_WIDGET(gtk_window_get_transient_for(dialogWindow));
+    }
+  
+  return result;
+}
+
+
+/* Updates the given flag from the given button. The passed in widget is the toggle button and
+ * the data is an enum indicating which flag was toggled. Returns the new value that was set. */
+static gboolean setFlagFromButton(GtkWidget *button, gpointer data)
+{
+  GtkWidget *blxWindow = dialogChildGetBlxWindow(button);
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+  
+  BlxFlag flag = (BlxFlag)GPOINTER_TO_INT(data);
+  const gboolean newValue = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button));
+
+  if (flag > BLXFLAG_MIN && flag < BLXFLAG_NUM_FLAGS)
+    bc->flags[flag] = newValue;
+  
+  return newValue;
+}
+
+
+/* This callback is called when one of the boolean flags is toggled on the settings dialog.
+ * This generic function sets the flag and redraws everything; if different 
+ * updates are required a custom callback function can be used instead. */
+static void onToggleFlag(GtkWidget *button, gpointer data)
+{
+  setFlagFromButton(button, data);
+  
+  GtkWidget *blxWindow = dialogChildGetBlxWindow(button);
+  blxWindowRedrawAll(blxWindow);
+}
+
+
+/* Callback function called when the 'squash matches' button is toggled */
+static void onSquashMatches(GtkWidget *button, gpointer data)
+{
+  const gboolean squash = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button));
+
+  GtkWidget *blxWindow = dialogChildGetBlxWindow(button);
+  BlxWindowProperties *properties = blxWindowGetProperties(blxWindow);
+  
+  setToggleMenuStatus(properties->actionGroup, "SquashMatches", squash);
+}
+
+
+/* Callback function called when the 'Show Variation track' button is toggled */
+static void onShowVariationTrackToggled(GtkWidget *button, gpointer data)
+{
+  const gboolean showSnpTrack = setFlagFromButton(button, data);
+  
+  GtkWidget *blxWindow = dialogChildGetBlxWindow(button);
+  GtkWidget *detailView = blxWindowGetDetailView(blxWindow);
+  
+  detailViewUpdateShowSnpTrack(detailView, showSnpTrack);
+}
+
+
+/* Utility to create a check button with certain given properties, and to pack it into the parent.
+ * Returns the new button. */
+static GtkWidget* createCheckButton(GtkBox *box, 
+                                    const char *mnemonic, 
+                                    const char *tooltip,
+                                    const gboolean isActive, 
+                                    GCallback callback, 
+                                    gpointer data)
+{
+  GtkWidget *button = gtk_check_button_new_with_mnemonic(mnemonic);
+  gtk_box_pack_start(box, button, FALSE, FALSE, 0);
+  
+  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), isActive);
+  
+  g_signal_connect(G_OBJECT(button), "toggled", callback, data);
+
+  if (tooltip)
+    gtk_widget_set_tooltip_text(button, tooltip);
+  
+  return button;
+}
+
+
+/* Callback to be called when the user has entered a new column size */
+static gboolean onColumnSizeChanged(GtkWidget *widget, const gint responseId, gpointer data)
+{
+  gboolean result = TRUE;
+  
+  GtkEntry *entry = GTK_ENTRY(widget);
+  BlxColumnInfo *columnInfo = (BlxColumnInfo*)data;
+  
+  const gchar *newSizeText = gtk_entry_get_text(entry);
+  const int newWidth = convertStringToInt(newSizeText);
+  
+  if (newWidth != columnInfo->width)
+    {
+      /* Check it's a sensible value. We could do with a better check really but
+       * for now just check that it's less than the screen width. This at least
+       * catches excessively large values, which can cause Blixem to crash. Slightly
+       * too-large values may make things look odd but should be recoverable. */
+      GtkWidget *blxWindow = dialogChildGetBlxWindow(widget);
+      
+      int maxWidth = 300;
+      gbtools::GUIGetTrueMonitorSize(blxWindow, &maxWidth, NULL);
+
+      if (newWidth > maxWidth)
+        {
+          g_critical("Column width '%d' too large; not changed.\n", newWidth);
+        }
+      else
+        {
+          columnInfo->width = newWidth;
+
+          GtkWidget *detailView = blxWindowGetDetailView(blxWindow);
+          updateDynamicColumnWidths(detailView);
+        }
+    }
+  
+  return result;
+}
+
+
+/* Callback to be called when the user has toggled the visibility of a column */
+static gboolean onColumnVisibilityChanged(GtkWidget *button, const gint responseId, gpointer data)
+{
+  gboolean result = TRUE;
+  
+  BlxColumnInfo *columnInfo = (BlxColumnInfo*)data;
+  columnInfo->showColumn = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button));
+  
+  GtkWidget *blxWindow = dialogChildGetBlxWindow(button);
+  GtkWidget *detailView = blxWindowGetDetailView(blxWindow);
+
+  updateDynamicColumnWidths(detailView);
+  
+  return result;
+}
+
+
+/* Callback to be called when the user has toggled which columns are included in summary info */
+static gboolean onSummaryColumnsChanged(GtkWidget *button, const gint responseId, gpointer data)
+{
+  gboolean result = TRUE;
+  
+  BlxColumnInfo *columnInfo = (BlxColumnInfo*)data;
+  columnInfo->showSummary = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button));
+  
+  GtkWidget *blxWindow = dialogChildGetBlxWindow(button);
+  GtkWidget *detailView = blxWindowGetDetailView(blxWindow);
+
+  /* Just clear the moused-over feedback area to make sure it's not showing invalid data. The
+   * user can mouse-over again to see the new data. */
+  clearFeedbackArea(detailView);
+  
+  return result;
+}
+
+
+/* Just calls gtk_widget_set_sensitive, but so that we can use it as a callback */
+static void widgetSetSensitive(GtkWidget *widget, gpointer data)
+{
+  gboolean sensitive = GPOINTER_TO_INT(data);
+  gtk_widget_set_sensitive(widget, sensitive);
+}
+
+
+/* Callback when the user hits the 'load optional data' button on the settings dialog */
+static void onButtonClickedLoadOptional(GtkWidget *button, gpointer data)
+{
+  GtkWidget *blxWindow = dialogChildGetBlxWindow(button);
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+
+  /* Create a temporary lookup table for BlxSequences so we can link them on GFF ID */
+  GHashTable *lookupTable = g_hash_table_new(g_direct_hash, g_direct_equal);
+  
+  GError *error = NULL;
+  BulkFetch bulk_fetch(bc->external, bc->flags[BLXFLAG_SAVE_TEMP_FILES],
+                       bc->seqType, &bc->matchSeqs, bc->columnList, bc->optionalFetchDefault, bc->fetchMethods, &bc->mspList,
+                       &bc->blastMode, bc->featureLists, bc->supportedTypes, NULL, bc->refSeqOffset,
+                       &bc->refSeqRange, bc->dataset, TRUE, lookupTable,
+#ifdef PFETCH_HTML
+                       bc->ipresolve,
+                       bc->cainfo,
+#endif
+                       bc->fetch_debug);
+  
+  gboolean success = bulk_fetch.performFetch();
+
+  finaliseFetch(bc->matchSeqs, bc->columnList);
+
+  if (error)
+    {
+      prefixError(error, "Error loading optional data. ");
+      reportAndClearIfError(&error, G_LOG_LEVEL_CRITICAL);
+    }
+  
+  if (success)
+    {
+      /* Set the flag to say that the data has now been loaded */
+      bc->flags[BLXFLAG_OPTIONAL_COLUMNS] = TRUE;
+      
+      /* Disable the button so user can't try to load data again. */
+      gtk_widget_set_sensitive(button, FALSE);
+      
+      /* Enable the text entry boxes for all columns. They are all in the container passed
+       * as the user data. */
+      GtkContainer *container = GTK_CONTAINER(data);
+      gtk_container_foreach(container, widgetSetSensitive, GINT_TO_POINTER(TRUE));
+      
+      /* Update the flag in all columns to indicate that the data is now loaded */
+      GtkWidget *detailView = blxWindowGetDetailView(blxWindow);
+      GList *listItem = detailViewGetColumnList(detailView);
+      
+      for ( ; listItem; listItem = listItem->next)
+        {
+          BlxColumnInfo *columnInfo = (BlxColumnInfo*)(listItem->data);
+          columnInfo->dataLoaded = TRUE;
+        }   
+      
+      /* Re-sort the trees, because the new data may affect the sort order. Also
+       * resize them, because whether data is loaded affects whether columns are shown. */
+      detailViewResortTrees(detailView);
+      updateDynamicColumnWidths(detailView);
+
+      /* Force a of resize the tree columns (updateDynamicColumnWidths won't resize them
+       * because the widths and visibility-flags haven't actually changed, but visibility
+       * IS affected because we've now loaded the data) */
+      callFuncOnAllDetailViewTrees(detailView, resizeTreeColumns, NULL);
+      resizeDetailViewHeaders(detailView);
+      updateDetailViewRange(detailView);
+      
+      detailViewRedrawAll(detailView);
+    }
+
+  g_hash_table_unref(lookupTable);
+}
+
+
+/* Create a button to allow the user to load the data for optional columns, if not already loaded */
+static GtkWidget* createColumnLoadDataButton(GtkTable *table, 
+                                             GtkWidget *detailView,
+                                             int *row,
+                                             const int cols,
+                                             int xpad,
+                                             int ypad)
+{
+  BlxContext *bc = blxWindowGetContext(detailViewGetBlxWindow(detailView));
+  const gboolean dataLoaded = bc->flags[BLXFLAG_OPTIONAL_COLUMNS];
+
+  /* Create the button */
+  GtkWidget *button = gtk_button_new_with_label(LOAD_DATA_TEXT);
+  gtk_widget_set_sensitive(button, !dataLoaded); /* only enable if data not yet loaded */
+
+  /* Add the button to the table, spanning all of the remaining columns */
+  gtk_table_attach(table, button, 0, 1, *row, *row + 1, GTK_SHRINK, GTK_SHRINK, xpad, ypad);
+  
+  /* Create an explanatory label spanning the rest of the columns */
+  GtkWidget *label = gtk_label_new("Fetches additional information e.g. from an\nEMBL file (as determined by the config).");
+  gtk_table_attach(table, label, 1, cols, *row, *row + 1, GTK_SHRINK, GTK_SHRINK, xpad, ypad);
+
+  *row += 1;
+
+  return button;
+}
+
+
+/* Create the settings buttons for a single column */
+static void createColumnButton(BlxColumnInfo *columnInfo, GtkTable *table, int *row)
+{
+  /* Create a label showing the column name */
+  GtkWidget *label = gtk_label_new(columnInfo->title);
+  gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
+  
+  /* Tick-box controlling whether column is displayed */
+  GtkWidget *showColButton = gtk_check_button_new();
+  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(showColButton), columnInfo->showColumn);
+  widgetSetCallbackData(showColButton, onColumnVisibilityChanged, (gpointer)columnInfo);
+  gtk_widget_set_tooltip_text(showColButton, "Whether to display this column");
+
+  /* Tick-box controlling whether column is included in summary info */
+  GtkWidget *showSummaryButton = gtk_check_button_new();
+  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(showSummaryButton), columnInfo->showSummary);
+  widgetSetCallbackData(showSummaryButton, onSummaryColumnsChanged, (gpointer)columnInfo);
+  gtk_widget_set_tooltip_text(showSummaryButton, "Whether to include this data in the moused-over-item feedback area");
+  
+  GtkWidget *entry = gtk_entry_new();
+  gtk_widget_set_tooltip_text(label, "The column width, in pixels");
+  
+  if (columnInfo->columnId == BLXCOL_SEQUENCE)
+    {
+      /* The sequence column updates dynamically, so don't allow the user to edit it */
+      char displayText[] = "<dynamic>";
+      gtk_entry_set_text(GTK_ENTRY(entry), displayText);
+      gtk_widget_set_sensitive(entry, FALSE);
+      gtk_widget_set_sensitive(showSummaryButton, FALSE);
+      gtk_widget_set_sensitive(showSummaryButton, FALSE);
+      gtk_entry_set_width_chars(GTK_ENTRY(entry), strlen(displayText) + 2); /* fudge up width a bit in case user enters longer text */
+    }
+  else
+    {
+      /* Grey out all the options if the column hasn't been loaded */
+      if (!columnInfo->dataLoaded)
+        {
+          gtk_widget_set_sensitive(showColButton, FALSE);
+          gtk_widget_set_sensitive(showSummaryButton, FALSE);
+          gtk_widget_set_sensitive(entry, FALSE);
+        }
+      else if (!columnInfo->canShowSummary)
+        {
+          gtk_widget_set_sensitive(showSummaryButton, FALSE);          
+        }
+
+      char *displayText = convertIntToString(columnInfo->width);
+      gtk_entry_set_text(GTK_ENTRY(entry), displayText);
+      
+      gtk_entry_set_width_chars(GTK_ENTRY(entry), strlen(displayText) + 2);
+      gtk_entry_set_activates_default(GTK_ENTRY(entry), TRUE);
+      
+      widgetSetCallbackData(entry, onColumnSizeChanged, (gpointer)columnInfo);
+      
+      g_free(displayText);
+    }
+  
+  gtk_table_attach(table, label,             0, 1, *row, *row + 1, GTK_FILL, GTK_SHRINK, 4, 4);
+  gtk_table_attach(table, showColButton,     1, 2, *row, *row + 1, GTK_FILL, GTK_SHRINK, 4, 4);
+  gtk_table_attach(table, showSummaryButton, 2, 3, *row, *row + 1, GTK_FILL, GTK_SHRINK, 4, 4);
+  gtk_table_attach(table, entry,             3, 4, *row, *row + 1, GTK_FILL, GTK_SHRINK, 4, 4);
+  *row += 1;
+}
+
+
+/* Create labels for the column properties widgets created by createColumnButton */
+static void createColumnButtonHeaders(GtkTable *table, int *row)
+{
+  GtkWidget *label = gtk_label_new("Show\ncolumn");
+  gtk_misc_set_alignment(GTK_MISC(label), 0.0, 1.0);
+  gtk_table_attach(table, label, 1, 2, *row, *row + 1, GTK_FILL, GTK_SHRINK, 4, 4);
+  gtk_widget_set_tooltip_text(label, "Whether to display this column");
+
+  label = gtk_label_new("Show mouse-\nover details");
+  gtk_misc_set_alignment(GTK_MISC(label), 0.0, 1.0);
+  gtk_table_attach(table, label, 2, 3, *row, *row + 1, GTK_FILL, GTK_SHRINK, 4, 4);
+  gtk_widget_set_tooltip_text(label, "Whether to include this data in the moused-over-item feedback area");
+
+  label = gtk_label_new("Column width");
+  gtk_misc_set_alignment(GTK_MISC(label), 0.0, 1.0);
+  gtk_table_attach(table, label, 3, 4, *row, *row + 1, GTK_FILL, GTK_SHRINK, 4, 4);
+  gtk_widget_set_tooltip_text(label, "The column width, in pixels");
+
+  *row += 1;
+}
+
+/* Create a set of widgets that allow columns settings to be adjusted */
+static void createColumnButtons(GtkWidget *parent, GtkWidget *detailView, const int border)
+{
+  /* put all the column settings in a table. Put the table in a
+   * scrolled window, because there are likely to be many rows */
+  GtkWidget *scrollWin = gtk_scrolled_window_new(NULL, NULL);
+  gtk_container_add(GTK_CONTAINER(parent), scrollWin);
+  
+  GList *columnList = detailViewGetColumnList(detailView);
+  const int rows = g_list_length(columnList) + 1;
+  const int cols = 4;
+  int row = 1;
+
+  GtkTable *table = GTK_TABLE(gtk_table_new(rows, cols, FALSE));  
+
+  gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrollWin), GTK_WIDGET(table));
+  gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollWin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+
+  /* Create a button to allow the user to load the full EMBL data, if not already loaded */
+  GtkWidget *button = createColumnLoadDataButton(table, detailView, &row, cols, border, border);
+  
+  /* Loop through each column and create widgets to control the properties */
+  createColumnButtonHeaders(table, &row);
+
+  GList *listItem = columnList;
+  for ( ; listItem; listItem = listItem->next)
+    {
+      BlxColumnInfo *columnInfo = (BlxColumnInfo*)(listItem->data);
+      createColumnButton(columnInfo, table, &row);
+    }
+  
+  g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(onButtonClickedLoadOptional), table);
+}
+
+
+/* Callback to be called when the user has entered a new percent-ID per cell */
+static gboolean onIdPerCellChanged(GtkWidget *widget, const gint responseId, gpointer data)
+{
+  GtkWidget *bigPicture = GTK_WIDGET(data);  
+  const char *text = gtk_entry_get_text(GTK_ENTRY(widget));
+  const gdouble newValue = g_strtod(text, NULL);
+  return bigPictureSetIdPerCell(bigPicture, newValue);
+}
+
+ 
+/* Callback to be called when the user has entered a new maximum percent-ID to display */
+static gboolean onMaxPercentIdChanged(GtkWidget *widget, const gint responseId, gpointer data)
+{
+  GtkWidget *bigPicture = GTK_WIDGET(data);  
+  const char *text = gtk_entry_get_text(GTK_ENTRY(widget));
+  const gdouble newValue = g_strtod(text, NULL);
+  return bigPictureSetMaxPercentId(bigPicture, newValue);
+}
+
+/* Callback to be called when the user has entered a new minimum percent-ID to display */
+static gboolean onMinPercentIdChanged(GtkWidget *widget, const gint responseId, gpointer data)
+{
+  GtkWidget *bigPicture = GTK_WIDGET(data);  
+  const char *text = gtk_entry_get_text(GTK_ENTRY(widget));
+  const gdouble newValue = g_strtod(text, NULL);
+  return bigPictureSetMinPercentId(bigPicture, newValue);
+}
+
+
+/* Callback to be called when the user has changed the depth-per-cell on the coverage view */
+static gboolean onDepthPerCellChanged(GtkWidget *widget, const gint responseId, gpointer data)
+{
+  CoverageViewProperties *coverageViewP = (CoverageViewProperties*)data;  
+  const char *text = gtk_entry_get_text(GTK_ENTRY(widget));
+  const gdouble newValue = g_strtod(text, NULL);
+  return coverageViewP->setDepthPerCell(newValue);
+}
+
+
+///* Utility to create a text entry widget displaying the given integer value. The
+// * given callback will be called when the user OK's the dialog that this widget 
+// * is a child of. */
+//static void createTextEntryFromInt(GtkWidget *parent, 
+//                                 const char *title, 
+//                                 const int value, 
+//                                 BlxResponseCallback callbackFunc, 
+//                                 gpointer callbackData)
+//{
+//  /* Pack label and text entry into a vbox */
+//  GtkWidget *vbox = createVBoxWithBorder(parent, 4, FALSE, NULL);
+//
+//  GtkWidget *label = gtk_label_new(title);
+//  gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
+//
+//  GtkWidget *entry = gtk_entry_new();
+//  gtk_box_pack_start(GTK_BOX(vbox), entry, FALSE, FALSE, 0);
+//
+//  char *displayText = convertIntToString(value);
+//  gtk_entry_set_text(GTK_ENTRY(entry), displayText);
+//
+//  gtk_entry_set_width_chars(GTK_ENTRY(entry), strlen(displayText) + 2);
+//  gtk_entry_set_activates_default(GTK_ENTRY(entry), TRUE);
+//
+//  widgetSetCallbackData(entry, callbackFunc, callbackData);
+//  
+//  g_free(displayText);
+//}
+
+
+/* Utility to create a text entry widget displaying the given double value. The
+ * given callback will be called when the user OK's the dialog that this widget 
+ * is a child of. */
+static void createTextEntry(GtkWidget *parent, 
+                            const char *title, 
+                            const gdouble value, 
+                            BlxResponseCallback callbackFunc, 
+                            gpointer callbackData)
+{
+  /* Pack label and text entry into a vbox */
+  GtkWidget *vbox = createVBoxWithBorder(parent, 4, FALSE, NULL);
+  
+  GtkWidget *label = gtk_label_new(title);
+  gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
+  
+  GtkWidget *entry = gtk_entry_new();
+  gtk_box_pack_start(GTK_BOX(vbox), entry, FALSE, FALSE, 0);
+  
+  char *displayText = convertDoubleToString(value, 1);
+  gtk_entry_set_text(GTK_ENTRY(entry), displayText);
+  
+  gtk_entry_set_width_chars(GTK_ENTRY(entry), strlen(displayText) + 2);
+  gtk_entry_set_activates_default(GTK_ENTRY(entry), TRUE);
+  
+  widgetSetCallbackData(entry, callbackFunc, callbackData);
+  
+  g_free(displayText);
+}
+
+
+/* Create a set of widgets to allow the user to edit grid properties */
+static void createGridSettingsButtons(GtkWidget *parent, GtkWidget *bigPicture)
+{
+  /* Group these buttons in a frame */
+  GtkWidget *frame = gtk_frame_new("Overview section");
+  gtk_box_pack_start(GTK_BOX(parent), frame, FALSE, FALSE, 0);
+
+  /* Arrange the widgets horizontally */
+  GtkWidget *hbox = createHBoxWithBorder(frame, 12, FALSE, NULL);
+  const DoubleRange* const percentIdRange = bigPictureGetPercentIdRange(bigPicture);
+  
+  createTextEntry(hbox, "%ID per cell", bigPictureGetIdPerCell(bigPicture), onIdPerCellChanged, bigPicture);
+  createTextEntry(hbox, "Max %ID", percentIdRange->max, onMaxPercentIdChanged, bigPicture);
+  createTextEntry(hbox, "Min %ID", percentIdRange->min, onMinPercentIdChanged, bigPicture);
+}
+
+
+/* Create a set of widgets to allow the user to edit coverage-view properties */
+static void createCoverageSettingsButtons(GtkWidget *parent, GtkWidget *bigPicture, GtkWidget *detailView)
+{
+  BigPictureProperties *bpProperties = bigPictureGetProperties(bigPicture);
+  DetailViewProperties *dvProperties = detailViewGetProperties(detailView);
+  
+  /* Group these buttons in a frame */
+  GtkWidget *frame = gtk_frame_new("Coverage section");
+  gtk_box_pack_start(GTK_BOX(parent), frame, FALSE, FALSE, 0);
+  
+  /* Arrange the widgets horizontally */
+  GtkWidget *hbox = createHBoxWithBorder(frame, 12, FALSE, NULL);
+  
+  createTextEntry(hbox, "Depth per cell (big picture)", 
+                  bpProperties->coverageViewProperties()->depthPerCell(),
+                  onDepthPerCellChanged, bpProperties->coverageViewProperties());
+
+  createTextEntry(hbox, "Depth per cell (detail view)", 
+                  dvProperties->coverageViewProperties()->depthPerCell(),
+                  onDepthPerCellChanged, dvProperties->coverageViewProperties());
+}
+
+
+/* Callback called when user has changed a blixem color */
+static gboolean onChangeBlxColor(GtkWidget *button, const gint responseId, gpointer data)
+{
+  GdkColor *color = (GdkColor*)data;
+  
+  /* update the color */
+  gtk_color_button_get_color(GTK_COLOR_BUTTON(button), color);
+  gdk_colormap_alloc_color(gdk_colormap_get_system(), color, TRUE, TRUE);
+  
+  /* Redraw */
+  GtkWindow *dialogWindow = GTK_WINDOW(gtk_widget_get_toplevel(button));
+  GtkWidget *blxWindow = GTK_WIDGET(gtk_window_get_transient_for(dialogWindow));
+  blxWindowRedrawAll(blxWindow);
+  
+  return TRUE;
+}
+
+
+/* Callback called when user has changed the blixem background color */
+static gboolean onChangeBackgroundColor(GtkWidget *button, const gint responseId, gpointer data)
+{
+  GdkColor *color = (GdkColor*)data;
+  
+  /* update the color */
+  gtk_color_button_get_color(GTK_COLOR_BUTTON(button), color);
+  gdk_colormap_alloc_color(gdk_colormap_get_system(), color, TRUE, TRUE);
+  
+  /* Update */
+  GtkWindow *dialogWindow = GTK_WINDOW(gtk_widget_get_toplevel(button));
+  GtkWidget *blxWindow = GTK_WIDGET(gtk_window_get_transient_for(dialogWindow));
+  onUpdateBackgroundColor(blxWindow);
+  
+  return TRUE;
+}
+
+
+/* Create a button to allow user to change the color of the given setting */
+static void createColorButton(GtkTable *table, GdkColor *color, BlxResponseCallback callbackFunc, gpointer callbackData,
+                              const int row, const int column, const int xpad, const int ypad)
+{
+  GtkWidget *colorButton = gtk_color_button_new_with_color(color);
+  widgetSetCallbackData(colorButton, callbackFunc, callbackData);
+
+  gtk_table_attach(table, colorButton, column, column + 1, row, row + 1, GTK_SHRINK, GTK_SHRINK, xpad, ypad);
+}
+
+
+/* Create buttons for the user to be able to change the blixem colour settings */
+static void createColorButtons(GtkWidget *parent, GtkWidget *blxWindow, const int borderWidth)
+{
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+  
+  /* put all the colors in a table. Put the table in a scrolled window, because
+   * there are likely to be many rows */
+  GtkWidget *scrollWin = gtk_scrolled_window_new(NULL, NULL);
+  gtk_container_add(GTK_CONTAINER(parent), scrollWin);
+  
+  const int numCols = 5;
+  const int numRows = BLXCOL_NUM_COLORS + 1; /* add one for header row */
+  const int xpad = 2;
+  const int ypad = 2;
+
+  GtkTable *table = GTK_TABLE(gtk_table_new(numRows, numCols, FALSE));
+  gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrollWin), GTK_WIDGET(table));
+  gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollWin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+
+  /* Add a header row */
+  int row = 1;
+  gtk_table_attach(table, gtk_label_new("Normal   "), 2, 3, row, row + 1, GTK_SHRINK, GTK_SHRINK, xpad, ypad);
+  gtk_table_attach(table, gtk_label_new("(selected)   "), 3, 4, row, row + 1, GTK_SHRINK, GTK_SHRINK, xpad, ypad);
+  gtk_table_attach(table, gtk_label_new("Print   "), 4, 5, row, row + 1, GTK_SHRINK, GTK_SHRINK, xpad, ypad);
+  gtk_table_attach(table, gtk_label_new("(selected)   "), 5, 6, row, row + 1, GTK_SHRINK, GTK_SHRINK, xpad, ypad);
+  
+  /* loop through all defined blixem colours */
+  int colorId = BLXCOLOR_MIN + 1;
+  
+  for ( ; colorId < BLXCOL_NUM_COLORS; ++colorId)
+    {
+      ++row;
+    
+      BlxColor *blxCol = getBlxColor(bc->defaultColors, colorId);
+      GtkWidget *label = gtk_label_new(blxCol->name);
+      gtk_table_attach(table, label, 1, 2, row, row + 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), GTK_SHRINK, xpad, ypad);
+
+      /* Special callback for the background color */
+      BlxResponseCallback callbackFunc = (colorId == BLXCOLOR_BACKGROUND) ? onChangeBackgroundColor : onChangeBlxColor;
+      
+      createColorButton(table, &blxCol->normal, callbackFunc, &blxCol->normal, row, 2, xpad, ypad);
+      createColorButton(table, &blxCol->print, callbackFunc, &blxCol->print, row, 4, xpad, ypad);
+      createColorButton(table, &blxCol->selected, callbackFunc, &blxCol->selected, row, 3, xpad, ypad);
+      createColorButton(table, &blxCol->printSelected, callbackFunc, &blxCol->printSelected, row, 5, xpad, ypad);
+    }
+}
+
+
+/* Called when the user toggles whether print colors should be used or not */
+static void onTogglePrintColors(GtkWidget *button, gpointer data)
+{
+  GtkWidget *blxWindow = GTK_WIDGET(data);
+  const gboolean usePrintColors = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button));
+  blxWindowSetUsePrintColors(blxWindow, usePrintColors);
+}
+
+
+/* Callback function called when the parent button of a set of sub-buttons is toggled. Enables/disables
+ * the child buttons depending on whether the parent is now active or not. The container widget of the
+ * child buttons is passed as the user data. */
+static void onParentBtnToggled(GtkWidget *button, gpointer data)
+{
+  const gboolean active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button));
+  GtkWidget *subComponents = GTK_WIDGET(data);
+
+  gtk_widget_set_sensitive(subComponents, active); 
+}
+
+
+/* Callback function called when the 'Show unaligned bases' or 'Show polyA tails'
+ * buttons are toggled. These are parent buttons so will cause child buttons 
+ * to be enabled/disabled. */
+static void onShowAdditionalSeqToggled(GtkWidget *button, gpointer data)
+{
+  onParentBtnToggled(button, data);
+  
+  /* Perform any required updates */
+  GtkWidget *blxWindow = dialogChildGetBlxWindow(button);
+  GtkWidget *detailView = blxWindowGetDetailView(blxWindow);
+  detailViewUpdateMspLengths(detailView, detailViewGetNumUnalignedBases(detailView));
+}
+
+
+/* Callback function called when the 'Limit unaligned bases' button is toggled */
+static void onLimitUnalignedBasesToggled(GtkWidget *button, gpointer data)
+{
+  /* Get the new value */
+  const gboolean limitUnalignedBases = setFlagFromButton(button, GINT_TO_POINTER(BLXFLAG_LIMIT_UNALIGNED_BASES));
+
+  /* Enable/disable the sub-options. Their widgets are all in the container passed as the data. */
+  GtkWidget *subComponents = GTK_WIDGET(data);
+  gtk_widget_set_sensitive(subComponents, limitUnalignedBases); 
+  
+  /* Get the detail view from the main window */
+  GtkWidget *blxWindow = dialogChildGetBlxWindow(button);
+  GtkWidget *detailView = blxWindowGetDetailView(blxWindow);
+  
+  /* Perform any required updates */
+  detailViewUpdateMspLengths(detailView, detailViewGetNumUnalignedBases(detailView));
+}
+
+
+/* Callback called when the user has changed the number of additional bases to show when the
+ * 'show unaligned bases' option is enabled. */
+static gboolean onSetNumUnalignedBases(GtkWidget *entry, const gint responseId, gpointer data)
+{
+  const char *numStr = gtk_entry_get_text(GTK_ENTRY(entry));
+  int numBases = convertStringToInt(numStr);
+  
+  GtkWidget *detailView = GTK_WIDGET(data);
+  detailViewSetNumUnalignedBases(detailView, numBases);
+
+  /* Perform any required updates */
+  detailViewUpdateMspLengths(detailView, numBases);
+
+  return TRUE;
+}
+
+
+/* Callback called when the 'selected seqs only' option of the 'show unaligned bases'
+ * option is toggled. */
+static void onToggleShowUnalignedSelected(GtkWidget *button, gpointer data)
+{
+  /* Get the new value */
+  setFlagFromButton(button, GINT_TO_POINTER(BLXFLAG_SHOW_UNALIGNED_SELECTED));
+ 
+  /* Perform any required updates */
+  GtkWidget *detailView = GTK_WIDGET(data);
+//  detailViewUpdateMspLengths(detailView, detailViewGetNumUnalignedBases(detailView));
+  refilterDetailView(detailView, NULL);
+}
+
+
+
+/* Create the check button for the 'limit number of unaligned bases' option on the settings dialog
+ * and pack it into the given container. */
+static void createLimitUnalignedBasesButton(GtkContainer *parent, GtkWidget *detailView, BlxContext *bc)
+{
+  /* Create an hbox for the "limit to so-many bases" option, which has a check button, text
+   * entry and some labels. Pack the hbox into the given parent. */
+  GtkWidget *hbox = gtk_hbox_new(FALSE, 0);
+  gtk_container_add(parent, hbox);
+  
+  /* Create a text entry box so the user can enter the number of bases */
+  GtkWidget *entry = gtk_entry_new();
+  gtk_entry_set_activates_default(GTK_ENTRY(entry), TRUE);
+  widgetSetCallbackData(entry, onSetNumUnalignedBases, detailView);
+  
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+  char *numStr = convertIntToString(properties->numUnalignedBases);
+  
+  gtk_entry_set_text(GTK_ENTRY(entry), numStr);
+  gtk_entry_set_width_chars(GTK_ENTRY(entry), strlen(numStr) + 2); /* fudge up width a bit in case user enters longer text */
+  g_free(numStr);
+  
+  /* Check button to enable/disable setting the limit */
+  GtkWidget *button = gtk_check_button_new_with_mnemonic("Li_mit to ");
+  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), bc->flags[BLXFLAG_LIMIT_UNALIGNED_BASES]);
+  g_signal_connect(G_OBJECT(button), "toggled", G_CALLBACK(onLimitUnalignedBasesToggled), entry);
+  
+  GtkWidget *label = gtk_label_new(" additional bases");
+
+  /* Pack it all in the hbox */
+  gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0);
+  gtk_box_pack_start(GTK_BOX(hbox), entry, FALSE, FALSE, 0);
+  gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
+
+  const char *tooltip = "Specifies the maximum number of additional bases to display from unaligned sections of sequence.";
+  gtk_widget_set_tooltip_text(button, tooltip);
+  gtk_widget_set_tooltip_text(entry, tooltip);
+  gtk_widget_set_tooltip_text(label, tooltip);
+}
+
+
+/* Create a "parent" option button that has a vbox container for "sub-components", i.e. more 
+ * option buttons (or other dialog widgets) that will be enabled only when the parent option is
+ * active. Returns the container for the sub-options, which should be packed with the sub-option widgets. */
+static GtkContainer* createParentCheckButton(GtkWidget *parent, 
+                                             GtkWidget *detailView,
+                                             BlxContext *bc,
+                                             const char *label,
+                                             const char *tooltip,
+                                             const BlxFlag flag,
+                                             GtkWidget **buttonOut,
+                                             GCallback callbackFunc)
+{
+  /* We'll the main button and any sub-components into a vbox */
+  GtkWidget *vbox = gtk_vbox_new(FALSE, 0);
+  gtk_box_pack_start(GTK_BOX(parent), vbox, FALSE, FALSE, 0);
+
+  /* Create a vbox for the sub-components. Create the vbox now so we can pass it to the main toggle
+   * button callback, but don't pack it in the container till we've added the main check button. The sub
+   * components are only active if the main check button is active. */
+  const gboolean active = bc->flags[flag];
+  GtkWidget *subContainer = gtk_vbox_new(FALSE, 0);
+  gtk_widget_set_sensitive(subContainer, active); 
+  
+  /* Main check button to enable/disable the option. This call puts it in the vbox. Set two callbacks:
+   * one to update the flag, and one to enable/disable the child buttons. */
+  GtkWidget *btn = gtk_check_button_new_with_mnemonic(label);
+  gtk_box_pack_start(GTK_BOX(vbox), btn, FALSE, FALSE, 0);
+  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(btn), active);
+
+  if (tooltip)
+    gtk_widget_set_tooltip_text(btn, tooltip);
+
+  /* Connect the toggleFlag callback first so that the flag is set correctly before the callbackFunc is called */
+  g_signal_connect(G_OBJECT(btn), "toggled", G_CALLBACK(onToggleFlag), GINT_TO_POINTER(flag));
+  
+  if (callbackFunc)
+    g_signal_connect(G_OBJECT(btn), "toggled", callbackFunc, subContainer);
+
+  if (buttonOut)
+    *buttonOut = btn;
+
+  /* Now add the subcomponent container to the vbox. Bit of a hack - put it inside an hbox with 
+   * a blank label preceeding it, so that the sub-components appear offset to the right slightly
+   * from the main button. */
+  GtkWidget *hbox = gtk_hbox_new(FALSE, 0);
+  gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new("   "), FALSE, FALSE, 0);
+  gtk_box_pack_start(GTK_BOX(hbox), subContainer, FALSE, FALSE, 0);
+  gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
+  
+  return GTK_CONTAINER(subContainer);
+}
+
+
+/* Refresh the given dialog, if it is open */
+void refreshDialog(const BlxDialogId dialogId, GtkWidget *blxWindow)
+{
+  /* This is a bit crude but does the job: if the dialog is visible, just call its
+   * 'show' function to re-create its contents. Only need to do anything for persistent
+   * dialogs. Note that we don't want to bring the dialog to the front, just refresh it in
+   * case the user looks at it again. */
+  if (blxWindow)
+    {
+      BlxContext *bc = blxWindowGetContext(blxWindow);
+      GtkWidget *dialog = getPersistentDialog(bc->dialogList, dialogId);
+      
+      if (dialog && GTK_WIDGET_VISIBLE(dialog))
+        {
+           switch (dialogId)
+             {
+               case BLXDIALOG_SETTINGS:
+                 showSettingsDialog(blxWindow, FALSE);
+                 break;
+
+               case BLXDIALOG_SORT:
+                 showSortDialog(blxWindow, FALSE);
+                 break;
+                 
+               case BLXDIALOG_HELP:
+                 showHelpDialog(blxWindow, FALSE);
+                 break;
+
+               case BLXDIALOG_FIND:
+                 showFindDialog(blxWindow, FALSE);
+                 break;
+
+               case BLXDIALOG_VIEW:
+                 showViewPanesDialog(blxWindow, FALSE);
+                 break;
+
+               case BLXDIALOG_DOTTER:
+                 showDotterDialog(blxWindow, FALSE);
+                 break;
+                 
+               case BLXDIALOG_GROUPS:
+                 showGroupsDialog(blxWindow, TRUE, FALSE); /* show the 'edit' pane because we've got here by adding/deleting a group */
+                 break;
+                 
+               default:
+                 break;
+             };
+        }
+    }
+  else
+    {
+      g_warning("Could not refresh dialog [ID=%d]; parent window not found.\n", dialogId);
+    }
+}
+
+
+/* Callback called when the user has responded to the font selection dialog */
+static void onResponseFontSelectionDialog(GtkDialog *dialog, gint responseId, gpointer data)
+{
+  if (responseId == GTK_RESPONSE_ACCEPT || responseId == GTK_RESPONSE_OK || responseId == GTK_RESPONSE_APPLY)
+    {
+      GtkWidget *blxWindow = GTK_WIDGET(data);
+
+      /* Check that the user selected a monospace font (unfortunately there's no easy way to get the
+       * font family in older GTK versions so don't bother checking) */
+      gboolean ok = TRUE;
+    
+#if CHECK_GTK_VERSION(2, 6)  
+      GtkFontSelection *fontSeln = GTK_FONT_SELECTION(gtk_buildable_get_internal_child(GTK_BUILDABLE(dialog), gtk_builder_new(), "font_selection"));
+      PangoFontFamily *family = gtk_font_selection_get_family(fontSeln);
+      ok = pango_font_family_is_monospace(family);
+#endif
+      
+      /* Get the selected font name */
+      gchar *fontName = gtk_font_selection_dialog_get_font_name(GTK_FONT_SELECTION_DIALOG(dialog));
+
+      if (!ok)
+        {
+          BlxContext *bc = blxWindowGetContext(blxWindow);
+
+          char *msg = g_strdup_printf("Selected font '%s' is not a fixed-width font. Matches may not appear correctly aligned. Are you sure you want to continue?", fontName);
+          char *title = g_strdup_printf("%sWarning", blxGetTitlePrefix(bc));
+
+          gint response = runConfirmationBox(GTK_WIDGET(dialog), "Blixem - Warning", msg);
+
+          g_free(title);
+          g_free(msg);
+
+          ok = (response == GTK_RESPONSE_ACCEPT);
+        }
+      
+      if (ok)
+        {
+          GtkWidget *detailView = blxWindowGetDetailView(blxWindow);
+          DetailViewProperties *properties = detailViewGetProperties(detailView);
+          
+          pango_font_description_free(properties->fontDesc);
+          properties->fontDesc = pango_font_description_from_string(fontName);
+          
+          updateDetailViewFontDesc(detailView);
+
+          g_debug("Set font family to '%s'\n", fontName);
+          blxWindowRedrawAll(blxWindow);
+          
+          if (responseId != GTK_RESPONSE_APPLY)
+            {
+              gtk_widget_destroy(GTK_WIDGET(dialog));
+            }
+        }
+    }
+  else
+    {
+      /* Cancelled */
+      gtk_widget_destroy(GTK_WIDGET(dialog));
+    }
+}
+
+
+/* Callback for when the font selection button is pressed. Opens the font selection dialog */
+static void onFontSelectionButtonPressed(GtkWidget *button, gpointer data)
+{
+  GtkWidget *dialog = gtk_font_selection_dialog_new("Select fixed-width font");
+  g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(onResponseFontSelectionDialog), data);
+  gtk_widget_show_all(dialog);
+}
+
+
+/* Create a button on the settings dialog to open a font-selection dialog */
+static void createFontSelectionButton(GtkBox *parent, GtkWidget *blxWindow)
+{
+  GtkWidget *hbox = gtk_hbox_new(FALSE, 0);
+  gtk_box_pack_start(parent, hbox, FALSE, FALSE, 0);
+
+  gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new("Change fixed-width font:   "), FALSE, FALSE, 0);
+  
+  GtkWidget *button = gtk_button_new_from_stock(GTK_STOCK_SELECT_FONT);
+  g_signal_connect(G_OBJECT(button), "pressed", G_CALLBACK(onFontSelectionButtonPressed), blxWindow);
+  gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0);
+}
+
+
+/* This function restores all settings to defaults */
+static void resetSettings(GtkWidget *blxWindow)
+{
+  gint responseId = runConfirmationBox(blxWindow, "Reset all settings", 
+    "This will reset all settings to their default values: are you sure you want to continue?");
+  
+  if (responseId == GTK_RESPONSE_ACCEPT)
+    {
+      resetColumnWidths(blxWindowGetColumnList(blxWindow));
+      showSettingsDialog(blxWindow, FALSE);
+    }
+}
+
+
+void onResponseSettingsDialog(GtkDialog *dialog, gint responseId, gpointer data)
+{
+  if (responseId == BLX_RESPONSE_RESET)
+    resetSettings(dialogChildGetBlxWindow(GTK_WIDGET(dialog)));
+  else
+    onResponseDialog(dialog, responseId, data); /* default handler */
+
+  /* If the save button was pressed, also save these settings to the config file */
+  if (responseId == GTK_RESPONSE_ACCEPT)
+    {
+      GtkWidget *blxWindow = dialogChildGetBlxWindow(GTK_WIDGET(dialog));
+      saveBlixemSettings(blxWindow);
+    }
+}
+
+
+/* Show/refresh the "Settings" dialog. */
+void showSettingsDialog(GtkWidget *blxWindow, const gboolean bringToFront)
+{
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+  const BlxDialogId dialogId = BLXDIALOG_SETTINGS;
+  GtkWidget *dialog = getPersistentDialog(bc->dialogList, dialogId);
+  
+  if (!dialog)
+    {
+      /* note: reset-to-defaults option commented out because it is incomplete:
+       * for now, the help page tells the user to delete the ~/.blixemrc file
+       * to reset to defaults */
+      char *title = g_strdup_printf("%sSettings", blxGetTitlePrefix(bc));
+
+      dialog = gtk_dialog_new_with_buttons(title,
+                                           GTK_WINDOW(blxWindow), 
+                                           GTK_DIALOG_DESTROY_WITH_PARENT,
+//                                           "Reset to defaults",
+//                                           BLX_RESPONSE_RESET,
+                                           GTK_STOCK_CLOSE,
+                                           GTK_RESPONSE_REJECT,
+                                           GTK_STOCK_APPLY,
+                                           GTK_RESPONSE_APPLY,
+                                           GTK_STOCK_SAVE,
+                                           GTK_RESPONSE_ACCEPT,
+                                           NULL);
+
+      g_free(title);
+      
+      int width = 300, height = 200;
+      gbtools::GUIGetTrueMonitorSizeFraction(dialog, 0.33, 0.33, &width, &height);
+      gtk_window_set_default_size(GTK_WINDOW(dialog), width, height);
+      
+      /* These calls are required to make the dialog persistent... */
+      addPersistentDialog(bc->dialogList, dialogId, dialog);
+      g_signal_connect(dialog, "delete-event", G_CALLBACK(gtk_widget_hide_on_delete), NULL);
+
+      g_signal_connect(dialog, "response", G_CALLBACK(onResponseSettingsDialog), GINT_TO_POINTER(TRUE));
+    }
+  else
+    {
+      /* Need to refresh the dialog contents, so clear and re-create content area */
+      dialogClearContentArea(GTK_DIALOG(dialog));
+    }
+
+  gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_APPLY);
+
+  int borderWidth = 12;
+  GtkWidget *detailView = blxWindowGetDetailView(blxWindow);
+  GtkWidget *bigPicture = blxWindowGetBigPicture(blxWindow);
+  
+  /* We'll put everything into a tabbed notebook */
+  GtkWidget *notebook = gtk_notebook_new();
+  gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), notebook, TRUE, TRUE, 0);
+
+
+  /* OPTIONS PAGE */
+  GtkWidget *optionsPage = gtk_vbox_new(FALSE, 0);
+  gtk_notebook_append_page(GTK_NOTEBOOK(notebook), GTK_WIDGET(optionsPage), gtk_label_new_with_mnemonic("Opt_ions"));
+
+  GtkWidget *scrollWin = gtk_scrolled_window_new(NULL, NULL);
+  gtk_container_add(GTK_CONTAINER(optionsPage), scrollWin);
+
+  GtkWidget *optionsBox = gtk_vbox_new(FALSE, 0);
+  gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrollWin), GTK_WIDGET(optionsBox));
+  gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollWin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+
+  GtkContainer *variationContainer = createParentCheckButton(optionsBox,
+                                                             detailView,
+                                                             bc,
+                                                             "Highlight _variations in reference sequence",
+                                                             "Any known variations will be highlighted in the reference sequence. Hover over them to see details or double-click to open the URL.",
+                                                             BLXFLAG_HIGHLIGHT_VARIATIONS,
+                                                             NULL,
+                                                             G_CALLBACK(onParentBtnToggled));
+  createCheckButton(GTK_BOX(variationContainer), 
+                    "Show variations trac_k",
+                    "Show a track above the reference sequence which shows the details of any variations that are highlighted in the reference sequence",
+                    bc->flags[BLXFLAG_SHOW_VARIATION_TRACK],
+                    G_CALLBACK(onShowVariationTrackToggled),
+                    GINT_TO_POINTER(BLXFLAG_SHOW_VARIATION_TRACK));
+
+
+  /* show-polyA-tails option and its sub-options. Connect onToggleFlag twice to the 'when selected' button to also toggle the 'show signals when selected' button in unison. */
+  GtkWidget *polyAParentBtn = NULL;
+  GtkContainer *polyAContainer = createParentCheckButton(optionsBox,
+                                                         detailView,
+                                                         bc,
+                                                         "Show polyA _tails",
+                                                         "Show polyA tails; polyA signals are also highlighted in the reference sequence.",
+                                                         BLXFLAG_SHOW_POLYA_SITE,
+                                                         &polyAParentBtn,
+                                                         G_CALLBACK(onShowAdditionalSeqToggled));
+  GtkWidget *polyABtn = createCheckButton(GTK_BOX(polyAContainer),
+                                          "Selected sequences only",
+                                          "Only show polyA tails for the currently-selected sequence(s)",
+                                          bc->flags[BLXFLAG_SHOW_POLYA_SITE_SELECTED],
+                                          G_CALLBACK(onToggleFlag),
+                                          GINT_TO_POINTER(BLXFLAG_SHOW_POLYA_SITE_SELECTED));
+
+  g_signal_connect(G_OBJECT(polyAParentBtn), "toggled", G_CALLBACK(onToggleFlag), GINT_TO_POINTER(BLXFLAG_SHOW_POLYA_SIG));
+  g_signal_connect(G_OBJECT(polyABtn), "toggled", G_CALLBACK(onToggleFlag), GINT_TO_POINTER(BLXFLAG_SHOW_POLYA_SIG_SELECTED));
+
+  const gboolean squashMatches = (bc->modelId == BLXMODEL_SQUASHED);
+  
+
+  /* show-unaligned-sequence option and its sub-options */
+  GtkContainer *unalignContainer = createParentCheckButton(optionsBox,
+                                                           detailView,
+                                                           bc,
+                                                           "Show _unaligned sequence",
+                                                           "Show unaligned sections of match sequences", 
+                                                           BLXFLAG_SHOW_UNALIGNED,
+                                                           NULL,
+                                                           G_CALLBACK(onShowAdditionalSeqToggled));
+  createLimitUnalignedBasesButton(unalignContainer, detailView, bc);
+  createCheckButton(GTK_BOX(unalignContainer),
+                    "Selected sequences only",
+                    "Only show unaligned sections of sequence for the currently-selected sequence(s)",
+                    bc->flags[BLXFLAG_SHOW_UNALIGNED_SELECTED],
+                    G_CALLBACK(onToggleShowUnalignedSelected),
+                    detailView);
+
+
+  /* show-colinearity-lines option and its sub-options */
+  GtkContainer *colinearityContainer = createParentCheckButton(optionsBox,
+                                                               detailView,
+                                                               bc,
+                                                               "Show _colinearity lines",
+                                                               "Show \"traffic-light\" colinearity lines between alignment blocks: green for perfectly colinear, orange for imperfectly colinear, red for not colinear",
+                                                               BLXFLAG_SHOW_COLINEARITY,
+                                                               NULL,
+                                                               G_CALLBACK(onParentBtnToggled));
+  createCheckButton(GTK_BOX(colinearityContainer),
+                    "Selected sequences only",
+                    "Only show colinearity lines in the Detail section for the currently-selected sequence(s). (Note that in the Overview section they are only ever displayed for the selected sequence.)", 
+                    bc->flags[BLXFLAG_SHOW_COLINEARITY_SELECTED],
+                    G_CALLBACK(onToggleFlag),
+                    GINT_TO_POINTER(BLXFLAG_SHOW_COLINEARITY_SELECTED));
+
+
+  /* Show splice-sites option and its sub-options */
+  GtkContainer *spliceSitesContainer = createParentCheckButton(optionsBox,
+                                                               detailView,
+                                                               bc,
+                                                               "Show Sp_lice Sites for selected seqs",
+                                                               "Highlights splice sites in the reference sequence for the currently selected feature(s). Green means canonical and red non-canonical.", 
+                                                               BLXFLAG_SHOW_SPLICE_SITES,
+                                                               NULL,
+                                                               G_CALLBACK(onParentBtnToggled));
+  createCheckButton(GTK_BOX(spliceSitesContainer),
+                    "Highlight \"maybe canonical\" splice sites",
+                    "With this option enabled, splice sites that would be canonical if they were on the other strand are highlighted in orange, rather than in red for non-canonical. This option can help find problems with strand representation in the input data.", 
+                    bc->flags[BLXFLAG_SHOW_MAYBE_CANONICAL],
+                    G_CALLBACK(onToggleFlag),
+                    GINT_TO_POINTER(BLXFLAG_SHOW_MAYBE_CANONICAL));
+
+  createCheckButton(GTK_BOX(optionsBox),
+                    "_Highlight differences",
+                    "Only display bases in a match sequence that are different to the reference sequence.",
+                    bc->flags[BLXFLAG_HIGHLIGHT_DIFFS],
+                    G_CALLBACK(onToggleFlag),
+                    GINT_TO_POINTER(BLXFLAG_HIGHLIGHT_DIFFS));
+  createCheckButton(GTK_BOX(optionsBox),
+                    "_Squash matches",
+                    "Compress matches to save space. Depending on how the input sources are configured, this may place matches from the same alignment onto the same line, and/or may compress duplicate reads into the same space.",
+                    squashMatches,
+                    G_CALLBACK(onSquashMatches),
+                    NULL);
+
+
+
+  /* DISPLAY PAGE */
+  GtkWidget *displayPage = gtk_vbox_new(FALSE, 0);
+  gtk_notebook_append_page(GTK_NOTEBOOK(notebook), GTK_WIDGET(displayPage), gtk_label_new_with_mnemonic("_Display"));
+
+  GtkWidget *displayScrollWin = gtk_scrolled_window_new(NULL, NULL);
+  gtk_container_add(GTK_CONTAINER(displayPage), displayScrollWin);
+
+  GtkWidget *displayBox = gtk_vbox_new(FALSE, 0);
+  gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(displayScrollWin), GTK_WIDGET(displayBox));
+  gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(displayScrollWin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+
+  GtkWidget *settingsBox = createVBoxWithBorder(displayBox, borderWidth, TRUE, "General");
+  const gboolean usePrintColours = blxWindowGetUsePrintColors(blxWindow);
+  createCheckButton(GTK_BOX(settingsBox),
+                    "Use _print colours",
+                    "Use black-and-white colours, suitable for printing",
+                    usePrintColours,
+                    G_CALLBACK(onTogglePrintColors),
+                    blxWindow);
+  createFontSelectionButton(GTK_BOX(settingsBox), blxWindow);
+
+  createGridSettingsButtons(displayBox, bigPicture);
+
+  createCoverageSettingsButtons(displayBox, bigPicture, detailView);
+
+
+  /* COLUMNS PAGE */
+  GtkWidget *columnsPage = gtk_vbox_new(FALSE, 0);
+  gtk_notebook_append_page(GTK_NOTEBOOK(notebook), GTK_WIDGET(columnsPage), gtk_label_new_with_mnemonic("Colum_ns"));
+
+  createColumnButtons(columnsPage, detailView, borderWidth);
+
+
+  /* COLOURS PAGE */
+  GtkWidget *appearancePage = gtk_vbox_new(FALSE, borderWidth);
+  gtk_notebook_append_page(GTK_NOTEBOOK(notebook), GTK_WIDGET(appearancePage), gtk_label_new_with_mnemonic("Colou_rs"));
+
+  createColorButtons(appearancePage, blxWindow, borderWidth);
+
+  
+  gtk_widget_show_all(dialog);
+  
+  if (bringToFront)
+    {
+      gtk_window_present(GTK_WINDOW(dialog));
+    }
+}
+
+
+/***********************************************************
+ *                       Sort menu                         *
+ ***********************************************************/
+
+/* See if this widget is a combo box, or if it has a child combo box */
+static GtkComboBox* widgetGetComboBox(GtkWidget *widget)
+{
+  GtkComboBox *result = NULL;
+  
+  if (GTK_IS_COMBO_BOX(widget))
+    {
+      result = GTK_COMBO_BOX(widget);
+    }
+  else if (GTK_IS_CONTAINER(widget))
+    {
+      GList *children = gtk_container_get_children(GTK_CONTAINER(widget));
+      GList *childItem = children;
+      
+      for ( ; childItem; childItem = childItem->next)
+        {
+          GtkWidget *childWidget = GTK_WIDGET(childItem->data);
+          result = widgetGetComboBox(childWidget);
+          
+          if (result)
+            break;
+        }
+
+      g_list_free(children);
+    }
+  
+  return result;
+}
+
+
+/* For a drop-down box that contains columns, find which column is currently
+ * selected */
+static BlxColumnId getColumnFromComboBox(GtkComboBox *combo)
+{
+  BlxColumnId result = BLXCOL_NONE;
+  
+  if (combo)
+    {
+      /* Get the combo box value */
+      GtkTreeIter iter;
+      
+      if (gtk_combo_box_get_active_iter(combo, &iter))
+        {
+          GtkTreeModel *model = gtk_combo_box_get_model(combo);
+          
+          GValue val = {0};
+          gtk_tree_model_get_value(model, &iter, SORT_TYPE_COL, &val);
+          
+          result = (BlxColumnId)g_value_get_int(&val);
+        }
+    }
+  
+  return result;
+}
+
+
+/* Callback function called when the 'invert sort order' button is toggled */
+static gboolean onInvertSortChanged(GtkWidget *button, const gint responseId, gpointer data)
+{
+  const gboolean invert = setFlagFromButton(button, data);
+  
+  GtkWidget *blxWindow = dialogChildGetBlxWindow(button);
+  GtkWidget *detailView = blxWindowGetDetailView(blxWindow);
+  
+  detailViewUpdateSortInverted(detailView, invert);
+  
+  return TRUE;
+}
+
+
+/* Callback called when the sort order has been changed in the drop-down box */
+static gboolean onSortOrderChanged(GtkWidget *widget, const gint responseId, gpointer data)
+{
+  GtkWidget *detailView = GTK_WIDGET(data);
+  DetailViewProperties *dvProperties = detailViewGetProperties(detailView);
+  GList *columnList = blxWindowGetColumnList(dvProperties->blxWindow());
+
+  if (GTK_WIDGET_REALIZED(detailView) && GTK_IS_CONTAINER(widget))
+    {
+      /* Loop through each child of the given widget (assumes that each child is or
+       * contains one combo box) */
+      GList *children = gtk_container_get_children(GTK_CONTAINER(widget));
+      GList *childItem = children;
+      const int numColumns = g_list_length(columnList);
+      int priority = 0;
+      
+      for ( ; childItem; childItem = childItem->next, ++priority)
+        {
+          if (priority >= numColumns)
+            {
+              g_critical("Exceeded max number of sort columns (%d).\n", numColumns);
+              break;
+            }
+          
+          /* See if this is a (or has a child) combo box */
+          GtkWidget *childWidget = GTK_WIDGET(childItem->data);
+          GtkComboBox *combo = widgetGetComboBox(childWidget);
+          
+          if (combo)
+            {
+              dvProperties->sortColumns[priority] = getColumnFromComboBox(combo);
+            }
+        }
+      
+      g_list_free(children);
+
+      /* Re-sort trees */
+      detailViewResortTrees(detailView);
+    }
+  
+  return TRUE;
+}
+
+
+/* Add an option for the sorting drop-down box */
+static GtkTreeIter* addSortBoxItem(GtkTreeStore *store, 
+                                   GtkTreeIter *parent, 
+                                   BlxColumnId sortColumn, 
+                                   const char *sortName,
+                                   BlxColumnId initSortColumn,
+                                   GtkComboBox *combo)
+{
+  GtkTreeIter iter;
+  gtk_tree_store_append(store, &iter, parent);
+  
+  gtk_tree_store_set(store, &iter, SORT_TYPE_COL, sortColumn, SORT_TEXT_COL, sortName, -1);
+  
+  if (sortColumn == initSortColumn)
+    {
+      gtk_combo_box_set_active_iter(combo, &iter);
+    }
+  
+  return NULL;
+}
+
+
+/* Create the combo box used for selecting sort criteria */
+static void createSortBox(GtkBox *parent, 
+                          GtkWidget *detailView, 
+                          const BlxColumnId initSortColumn, 
+                          GList *columnList, 
+                          const char *labelText,
+                          const gboolean searchableOnly)
+{
+  /* Put the label and drop-down in a box */
+  GtkWidget *box = gtk_hbox_new(FALSE, 0);
+  gtk_box_pack_start(parent, box, FALSE, FALSE, 0);
+  
+  /* Add a label, to make it obvious what the combo box is for */
+  GtkWidget *label = gtk_label_new(labelText);
+  gtk_label_set_use_markup(GTK_LABEL(label), TRUE);
+  gtk_container_add(GTK_CONTAINER(box), label);
+  
+  /* Create the data for the drop-down box. Use a tree so that we can sort by
+   * multiple criteria. */
+  GtkTreeStore *store = gtk_tree_store_new(N_SORT_COLUMNS, G_TYPE_INT, G_TYPE_STRING);
+  GtkComboBox *combo = GTK_COMBO_BOX(gtk_combo_box_new_with_model(GTK_TREE_MODEL(store)));
+  g_object_unref(store);
+  gtk_container_add(GTK_CONTAINER(box), GTK_WIDGET(combo));
+
+  /* Create a cell renderer to display the sort text. */
+  GtkCellRenderer *renderer = gtk_cell_renderer_text_new();
+  gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combo), renderer, FALSE);
+  gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combo), renderer, "text", SORT_TEXT_COL, NULL);
+  
+  GtkTreeIter *iter = NULL;
+  
+  /* Add a blank row for the case where nothing is selected (unless we only
+   * want searchable columns, because we can't search the NONE column) */
+  if (!searchableOnly)
+    iter = addSortBoxItem(store, iter , BLXCOL_NONE, "<select column>", initSortColumn, combo);
+
+  /* Add a row for each column that has the 'sortName' property set. */
+  GList *columnItem = columnList;
+
+  for ( ; columnItem; columnItem = columnItem->next)
+    {
+      BlxColumnInfo *columnInfo = (BlxColumnInfo*)(columnItem->data);
+
+      /* Only include columns that have a sort name and, if searchableOnly is
+       * true, only include columns that are searchable. */
+      if (columnInfo->sortName && (columnInfo->searchable || !searchableOnly))
+        {
+          iter = addSortBoxItem(store, iter, columnInfo->columnId, columnInfo->sortName, initSortColumn, combo);
+        }
+    }
+}
+
+
+/* Called when the user clicks the 'add new sort-by box' button on the sort dialog */
+static void onAddNewSortByBox(GtkButton *button, gpointer data)
+{
+  /* The user-data is the container box that contains the sort-by boxes */
+  GtkBox *box = GTK_BOX(data);
+
+  GtkWindow *dialogWindow = GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(button)));
+  GtkWidget *blxWindow = GTK_WIDGET(gtk_window_get_transient_for(dialogWindow));
+  GtkWidget *detailView = blxWindowGetDetailView(blxWindow);
+  DetailViewProperties *dvProperties = detailViewGetProperties(detailView);
+  GList *columnList = blxWindowGetColumnList(dvProperties->blxWindow());
+
+  /* Add another sort-by box to the container */
+  createSortBox(box, detailView, BLXCOL_NONE, columnList, "then by", FALSE);
+  
+  gtk_widget_show_all(GTK_WIDGET(box));
+}
+
+
+/* Show/refresh the "Sort" dialog. */
+void showSortDialog(GtkWidget *blxWindow, const gboolean bringToFront)
+{
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+  const BlxDialogId dialogId = BLXDIALOG_SORT;
+  GtkWidget *dialog = getPersistentDialog(bc->dialogList, dialogId);
+  
+  if (!dialog)
+    {
+      char *title = g_strdup_printf("%sSort", blxGetTitlePrefix(bc));
+
+      dialog = gtk_dialog_new_with_buttons(title,
+                                           GTK_WINDOW(blxWindow), 
+                                           GTK_DIALOG_DESTROY_WITH_PARENT,
+                                           GTK_STOCK_CANCEL,
+                                           GTK_RESPONSE_REJECT,
+                                           GTK_STOCK_APPLY,
+                                           GTK_RESPONSE_APPLY,
+                                           GTK_STOCK_OK,
+                                           GTK_RESPONSE_ACCEPT,
+                                           NULL);
+
+      g_free(title);
+      
+      /* These calls are required to make the dialog persistent... */
+      addPersistentDialog(bc->dialogList, dialogId, dialog);
+      g_signal_connect(dialog, "delete-event", G_CALLBACK(gtk_widget_hide_on_delete), NULL);
+      
+      g_signal_connect(dialog, "response", G_CALLBACK(onResponseDialog), GINT_TO_POINTER(TRUE));
+    }
+  else
+    {
+      /* Need to refresh the dialog contents, so clear and re-create content area */
+      dialogClearContentArea(GTK_DIALOG(dialog));
+    }
+  
+  gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_APPLY);
+  
+  const int borderWidth = 12;
+  GtkWidget *contentArea = GTK_DIALOG(dialog)->vbox;
+
+  GtkWidget *detailView = blxWindowGetDetailView(blxWindow);
+  DetailViewProperties *dvProperties = detailViewGetProperties(detailView);
+  GList *columnList = blxWindowGetColumnList(dvProperties->blxWindow());
+  const int numColumns = g_list_length(columnList);
+
+  /* Add a drop-down for each sort column that is currently specified (or just
+   * the default number if none specified). */
+  GtkWidget *vbox = gtk_vbox_new(FALSE, borderWidth);
+  gtk_container_add(GTK_CONTAINER(contentArea), vbox);
+  int sortPriority = 0;
+  const int minBoxes = 3;
+  
+  for ( ; sortPriority < numColumns; ++sortPriority)
+    {
+      const BlxColumnId columnId = dvProperties->sortColumns[sortPriority];
+      
+      if (columnId != BLXCOL_NONE || sortPriority < minBoxes)
+        {
+          if (sortPriority == 0)
+            createSortBox(GTK_BOX(vbox), detailView, columnId, columnList, "Sort by", FALSE);
+          else
+            createSortBox(GTK_BOX(vbox), detailView, columnId, columnList, "then by", FALSE);
+        }
+      else
+        {
+          break;
+        }
+    }
+  
+  widgetSetCallbackData(vbox, onSortOrderChanged, detailView);
+
+  
+  /* Add a button to add a new sort-by box */
+  GtkWidget *button = gtk_button_new_from_stock(GTK_STOCK_ADD);
+  gtk_box_pack_end(GTK_BOX(vbox), button, FALSE, FALSE, 0);
+  g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(onAddNewSortByBox), vbox);
+  
+  
+  /* Add a toggle button for the 'invert sort order' option */
+  GtkWidget *toggle = gtk_check_button_new_with_mnemonic("_Invert sort order");
+  gtk_box_pack_end(GTK_BOX(vbox), toggle, FALSE, FALSE, 0);
+  
+  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle), bc->flags[BLXFLAG_INVERT_SORT]);
+  widgetSetCallbackData(toggle, onInvertSortChanged, GINT_TO_POINTER(BLXFLAG_INVERT_SORT));
+  
+
+  /* Shot the dialog */
+  gtk_widget_show_all(dialog);
+  
+  if (bringToFront)
+    {
+      gtk_window_present(GTK_WINDOW(dialog));
+    }
+}
+
+
+/***********************************************************
+ *                  Statistics menu                        *
+ ***********************************************************/
+
+static void getStats(GtkWidget *blxWindow, GString *result, MSP *MSPlist)
+{
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+
+  /* Compile data for sequences */
+  int totalNumSeqs = 0;             /* total number of sequences */
+  int numValidSeqs = 0;             /* how many sequences have sequence data filled in */
+
+  gint32 seqDataSize = 0;           /* total memory used by the sequence data */
+  gint32 seqStructSize = 0;         /* total memory used by the sequence structs */
+
+  GList *seqItem = bc->matchSeqs;
+  for ( ; seqItem; seqItem = seqItem->next)
+    {
+      ++totalNumSeqs;
+      seqStructSize += sizeof(BlxSequence);
+      BlxSequence *blxSeq = (BlxSequence*)(seqItem->data);
+      const char *sequence = blxSequenceGetSequence(blxSeq);
+
+      if (sequence)
+        {
+          ++numValidSeqs;
+          seqDataSize += strlen(sequence) * sizeof(char);
+        }
+    }
+  
+
+  /* Compile data for MSPs */
+  int numMSPs = 0;                /* total number of MSPs */
+  gint32 mspStructSize = 0;       /* total memory used by the MSP structs */
+
+  MSP *msp = NULL;
+  for (msp = MSPlist; msp ; msp = msp->next)
+    {
+      ++numMSPs;
+      mspStructSize += sizeof(MSP);
+    }
+
+  
+  /* Other data */
+  int refSeqLen = strlen(blxWindowGetRefSeq(blxWindow));
+
+  
+  /* Create the text based on the results */
+  g_string_printf(result, "%s%d%s %s%d%s %s%d%s %s%d%s %s%d%s %s%d%s %s%d%s %s%d%s %s%d%s",
+                  "Length of reference sequence\t\t\t\t\t\t\t= ", refSeqLen, " characters\n\n",
+                  "Total number of match sequences\t\t\t\t\t\t= ", totalNumSeqs, "\n",
+                  "Number of match sequences containing sequence data\t= ", numValidSeqs, "\n",
+                  "Total memory used by sequence data\t\t\t\t\t= ", seqDataSize, " bytes\n\n",
+                  "Size of each sequence struct\t\t\t\t\t\t\t= ", (int)sizeof(BlxSequence), " bytes\n",
+                  "Total memory used by sequence structs\t\t\t\t\t= ", seqStructSize, " bytes\n\n",
+                  "Number of MSPs\t\t\t\t\t\t\t\t\t\t= ", numMSPs, "\n",
+                  "Size of each MSP\t\t\t\t\t\t\t\t\t\t= ", (int)sizeof(MSP), " bytes\n",
+                  "Total memory used by MSP structs\t\t\t\t\t\t= ", (int)sizeof(MSP) * numMSPs, " bytes");
+}
+
+
+static void showStatsDialog(GtkWidget *blxWindow, MSP *MSPlist)
+{
+  /* Create a dialog widget with an OK button */
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+  char *title = g_strdup_printf("%sStatistics", blxGetTitlePrefix(bc));
+
+  GtkWidget *dialog = gtk_dialog_new_with_buttons(title, 
+                                                  GTK_WINDOW(blxWindow),
+                                                  GTK_DIALOG_DESTROY_WITH_PARENT,
+                                                  GTK_STOCK_OK,
+                                                  GTK_RESPONSE_ACCEPT,
+                                                  NULL);
+
+  g_free(title);
+  
+  /* Ensure that the dialog box (along with any children) is destroyed when the user responds. */
+  g_signal_connect (dialog, "response", G_CALLBACK(gtk_widget_destroy), NULL);
+  
+  /* Create a text buffer containing the required text*/
+  GString *displayText = g_string_sized_new(200); /* will be extended if we need more space */
+  getStats(blxWindow, displayText, MSPlist);
+  GtkTextBuffer *textBuffer = gtk_text_buffer_new(gtk_text_tag_table_new());
+  
+  gtk_text_buffer_set_text(GTK_TEXT_BUFFER(textBuffer), displayText->str, -1);
+  
+  g_string_free(displayText, TRUE);
+  
+  /* Create a text view widget and put it in the vbox area of the dialog */
+  GtkWidget *textView = gtk_text_view_new_with_buffer(GTK_TEXT_BUFFER(textBuffer));
+  gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), textView, TRUE, TRUE, 0);
+  
+  /* Show the dialog */
+  gtk_widget_show(textView);
+  gtk_widget_show(dialog);
+}
+
+
+/***********************************************************
+ *                      About dialog                       *
+ ***********************************************************/
+
+/* A GtkAboutDialogActivateLinkFunc() called when user clicks on website link in "About" window. */
+static void aboutDialogOpenLinkCB(GtkAboutDialog *about, const gchar *link, gpointer data)
+{
+  GError *error = NULL ;
+    
+  if (!seqtoolsLaunchWebBrowser(link, &error))
+    g_critical("Cannot show link in web browser: \"%s\"", link) ;    
+}
+
+
+/* Shows the 'About' dialog */
+void showAboutDialog(GtkWidget *parent)
+{
+#if CHECK_GTK_VERSION(2, 6)
+  const gchar *authors[] = {AUTHOR_LIST, NULL} ;
+
+  gtk_about_dialog_set_url_hook(aboutDialogOpenLinkCB, NULL, NULL) ;
+  
+  char *comments_string = blxGetCommentsString();
+
+  gtk_show_about_dialog(GTK_WINDOW(parent),
+                        "authors", authors,
+                        "comments", blxGetCommentsString(), 
+                        "copyright", blxGetCopyrightString(),
+                        "license", blxGetLicenseString(),
+                        "name", blxGetAppName(),
+                        "version", blxGetVersionString(),
+                        "website", blxGetWebSiteString(),
+                        NULL) ;
+
+  g_free(comments_string);
+#endif
+}
+
+
+/***********************************************************
+ *                      Help menu                          *
+ ***********************************************************/
+
+void onResponseHelpDialog(GtkDialog *dialog, gint responseId, gpointer data)
+{
+  gboolean destroy = TRUE;
+  
+  switch (responseId)
+  {
+    case GTK_RESPONSE_ACCEPT:
+      destroy = TRUE;
+      break;
+      
+    case GTK_RESPONSE_HELP:
+      showAboutDialog(NULL);
+      destroy = FALSE;
+      break;
+      
+    case GTK_RESPONSE_CANCEL:
+    case GTK_RESPONSE_REJECT:
+      destroy = TRUE;
+      break;
+      
+    default:
+      break;
+  };
+  
+  if (destroy)
+    {
+      /* If it's a persistent dialog, just hide it, otherwise destroy it */
+      const gboolean isPersistent = GPOINTER_TO_INT(data);
+      
+      if (isPersistent)
+        {
+          gtk_widget_hide_all(GTK_WIDGET(dialog));
+        }
+      else
+        {
+          gtk_widget_destroy(GTK_WIDGET(dialog));
+        }
+    }
+}
+
+
+void showHelpDialog(GtkWidget *blxWindow, const gboolean bringToFront)
+{
+  GError *error = NULL;
+
+  /* The docs should live in /share/doc/seqtools/, in the same parent
+   * directory that our executable's 'bin' directory is in. Open the 'quick
+   * start' page. */
+  char rel_path[100] = "../share/doc/seqtools/blixem_quick_start.html";
+
+  /* Find the executable's path */
+  char *exe = g_find_program_in_path(g_get_prgname());
+  gboolean ok = (exe != NULL);
+
+  if (ok)
+    {
+      /* Get the executable's directory */
+      char *dir = g_path_get_dirname(exe);
+      
+      ok = dir != NULL;
+      
+      if (ok)
+        {
+          /* Get the path to the html page */
+          char *path = g_strdup_printf("%s/%s", dir, rel_path);
+          
+          ok = path != NULL;
+          
+          if (ok)
+            {
+              g_message("Opening help page '%s'\n", path);
+              seqtoolsLaunchWebBrowser(path, &error);
+              g_free(path);
+            }
+
+          g_free(dir);
+        }
+
+      g_free(exe);
+    }
+  
+  if (!ok)
+    {
+      if (error)
+        reportAndClearIfError(&error, G_LOG_LEVEL_CRITICAL);
+      else
+        g_critical("Could not find help documentation: %s\n", rel_path);
+    }
+}
+
+/***********************************************************
+ *                        Menu actions                     *
+ ***********************************************************/
+
+/* Called when the user selects the quit menu option, or hits the Quit shortcut key.
+ * Pops up a dialog showing user help information */
+static void onQuit(GtkAction *action, gpointer data)
+{
+  GtkWidget *blxWindow = GTK_WIDGET(data);
+  gtk_widget_destroy(blxWindow);
+}
+
+static void onHelpMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *blxWindow = GTK_WIDGET(data);
+  showHelpDialog(blxWindow, TRUE);
+}
+
+static void onAboutMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *blxWindow = GTK_WIDGET(data);
+  showAboutDialog(blxWindow);
+}
+
+static void onFindMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *blxWindow = GTK_WIDGET(data);
+  showFindDialog(blxWindow, TRUE);
+}
+
+static void onGoToMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *blxWindow = GTK_WIDGET(data);
+  
+  /* We currently only accept input in terms of DNA coords on the ref seq */
+  const BlxSeqType seqType = BLXSEQ_DNA;
+  
+  goToDetailViewCoord(blxWindowGetDetailView(blxWindow), seqType);
+}
+
+static void onPrevMatchMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *blxWindow = GTK_WIDGET(data);
+  GList *seqList = blxWindowGetSelectedSeqs(blxWindow);
+  prevMatch(blxWindowGetDetailView(blxWindow), seqList, FALSE);
+}
+
+static void onNextMatchMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *blxWindow = GTK_WIDGET(data);
+  GList *seqList = blxWindowGetSelectedSeqs(blxWindow);
+  nextMatch(blxWindowGetDetailView(blxWindow), seqList, FALSE);
+}
+
+static void onFirstMatchMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *blxWindow = GTK_WIDGET(data);
+  GList *seqList = blxWindowGetSelectedSeqs(blxWindow);
+  firstMatch(blxWindowGetDetailView(blxWindow), seqList, FALSE);
+}
+
+static void onLastMatchMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *blxWindow = GTK_WIDGET(data);
+  GList *seqList = blxWindowGetSelectedSeqs(blxWindow);
+  lastMatch(blxWindowGetDetailView(blxWindow), seqList, FALSE);
+}
+
+static void onPageLeftMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *blxWindow = GTK_WIDGET(data);
+  scrollDetailViewLeftPage(blxWindowGetDetailView(blxWindow));
+}
+
+static void onPageRightMenu(GtkAction *action, gpointer data)
+{  
+  GtkWidget *blxWindow = GTK_WIDGET(data);
+  scrollDetailViewRightPage(blxWindowGetDetailView(blxWindow));
+}
+
+static void onScrollLeft1Menu(GtkAction *action, gpointer data)
+{
+  GtkWidget *blxWindow = GTK_WIDGET(data);
+  scrollDetailViewLeft1(blxWindowGetDetailView(blxWindow));
+}
+
+static void onScrollRight1Menu(GtkAction *action, gpointer data)
+{
+  GtkWidget *blxWindow = GTK_WIDGET(data);
+  scrollDetailViewRight1(blxWindowGetDetailView(blxWindow));
+}
+
+static void onSquashMatchesMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *blxWindow = GTK_WIDGET(data);
+  
+  const gboolean squash = gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(action));
+  
+  GtkWidget *detailView = blxWindowGetDetailView(blxWindow);
+  detailViewUpdateSquashMatches(detailView, squash);
+  
+  /* Refresh the settings dialog, if it is open */
+  refreshDialog(BLXDIALOG_SETTINGS, blxWindow);
+}
+
+static void onToggleStrandMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *blxWindow = GTK_WIDGET(data);
+  toggleStrand(blxWindowGetDetailView(blxWindow));
+}
+
+/* Called when the user selects the View menu option, or hits the Settings shortcut key */
+static void onViewMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *blxWindow = GTK_WIDGET(data);
+  showViewPanesDialog(blxWindow, TRUE);
+}
+
+
+/* Called when the user selects the 'Group Sequences' menu option, or hits the relevant shortcut key */
+static void onCreateGroupMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *blxWindow = GTK_WIDGET(data);
+  showGroupsDialog(blxWindow, FALSE, TRUE);
+}
+
+
+/* Called when the user selects the 'Groups' menu option, or hits the relevant shortcut key */
+static void onEditGroupsMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *blxWindow = GTK_WIDGET(data);
+  showGroupsDialog(blxWindow, TRUE, TRUE);
+}
+
+/* Called when the user selects the 'Create group from clipboard' option */
+static void onCreateQuickGroup(GtkAction *action, gpointer data)
+{
+  GtkWidget *blxWindow = GTK_WIDGET(data);
+  createQuickGroup(blxWindow, false, true);
+}
+
+/* Called when the user selects the 'Create filter from clipboard' option */
+static void onCreateQuickFilter(GtkAction *action, gpointer data)
+{
+  GtkWidget *blxWindow = GTK_WIDGET(data);
+  createQuickGroup(blxWindow, true, true);
+}
+
+/* Called when the user selects the 'Hide source(s)' option */
+static void onHideSources(GtkAction *action, gpointer data)
+{
+  GtkWidget *blxWindow = GTK_WIDGET(data);
+
+  hideSelectedSources(blxWindow);
+}
+
+/* Called when the user selects the 'Clear groups/filters' option */
+static void onClearGroups(GtkAction *action, gpointer data)
+{
+  GtkWidget *blxWindow = GTK_WIDGET(data);
+
+  clearGroups(blxWindow);
+}
+
+/* Called when the user selects the Settings menu option, or hits the Settings shortcut key */
+static void onSettingsMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *blxWindow = GTK_WIDGET(data);
+  showSettingsDialog(blxWindow, TRUE);
+}
+
+
+static void onLoadMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *blxWindow = GTK_WIDGET(data);
+  GError *tmp_error = NULL;
+
+  char *filename = getLoadFileName(blxWindow, NULL, "Load file");
+  dynamicLoadFeaturesFile(blxWindow, filename, NULL, &tmp_error);
+  
+  g_free(filename);
+
+  reportAndClearIfError(&tmp_error, G_LOG_LEVEL_CRITICAL);
+}
+
+static void onCopySeqsMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *blxWindow = GTK_WIDGET(data);
+  copySelectionToClipboard(blxWindow);
+}
+
+static void onCopySeqDataMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *blxWindow = GTK_WIDGET(data);
+  copySelectedSeqDataToClipboard(blxWindow);
+}
+
+static void onCopySeqDataMarkMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *blxWindow = GTK_WIDGET(data);
+  GtkWidget *detailView = blxWindowGetDetailView(blxWindow);
+
+  /* Copy the portion of the match seq from the selected index
+   * to the clicked index */
+  IntRange *range = detailViewGetSelectedDnaIdxRange(detailView);
+
+  if (range)
+    {
+      const int fromIdx = range->min();
+      const int toIdx = range->max();
+
+      copySelectedSeqRangeToClipboard(blxWindow, fromIdx, toIdx);
+
+      delete range;
+    }
+  else
+    {
+      g_critical("Please middle-click on a coordinate first to set the mark\n");
+    }
+}
+
+/* Copy the ref seq for the currently-selected range of coords to the clipboard */
+static void onCopyRefSeqDnaMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *blxWindow = GTK_WIDGET(data);
+
+  GtkWidget *detailView = blxWindowGetDetailView(blxWindow);
+
+  /* Copy the portion of the ref seq from the selected index
+   * to the clicked index */
+  IntRange *range = detailViewGetSelectedDnaIdxRange(detailView);
+
+  if (range)
+    {
+      const int fromIdx = range->min();
+      const int toIdx = range->max();
+
+      copyRefSeqToClipboard(blxWindow, fromIdx, toIdx);
+
+      delete range;
+    }
+  else
+    {
+      g_critical("Please middle-click on a coordinate first to set the mark\n");
+    }
+}
+
+/* Copy the translation of the ref seq for the currently-selected range of coords 
+ * to the clipboard. Uses the currently-active reading frame. */
+static void onCopyRefSeqDisplayMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *blxWindow = GTK_WIDGET(data);
+
+  GtkWidget *detailView = blxWindowGetDetailView(blxWindow);
+
+  /* Copy the portion of the ref seq from the selected index
+   * to the clicked index */
+  IntRange *range = detailViewGetSelectedDnaIdxRange(detailView);
+
+  if (range)
+    {
+      const int fromIdx = range->min();
+      const int toIdx = range->max();
+
+      copyRefSeqTranslationToClipboard(blxWindow, fromIdx, toIdx);
+
+      delete range;
+    }
+  else
+    {
+      g_critical("Please middle-click on a coordinate first to set the mark\n");
+    }
+}
+
+static void onSortMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *blxWindow = GTK_WIDGET(data);
+  showSortDialog(blxWindow, TRUE);
+}
+
+static void onZoomInMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *blxWindow = GTK_WIDGET(data);
+  zoomDetailView(blxWindowGetDetailView(blxWindow), TRUE);
+}
+
+static void onZoomOutMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *blxWindow = GTK_WIDGET(data);
+  zoomDetailView(blxWindowGetDetailView(blxWindow), FALSE);
+}
+
+/* Called when the user selects the Dotter menu option, or hits the Dotter shortcut key */
+static void onDotterMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *blxWindow = GTK_WIDGET(data);
+  showDotterDialog(blxWindow, TRUE);
+}
+
+/* Called when the user selects the 'Close all Dotters' menu option */
+static void onCloseAllDottersMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *blxWindow = GTK_WIDGET(data);
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+
+  /* Check if there are actually any spawned processes */
+  if (g_slist_length(bc->spawnedProcesses) > 0)
+    {
+      gint responseId = runConfirmationBox(blxWindow, "Close all Dotters", 
+        "Are you sure you want to close all Dotters started from this Blixem?");
+
+      if (responseId == GTK_RESPONSE_ACCEPT)
+        {
+          bc->killAllSpawned();
+        }
+    }
+  else
+    {
+      g_message("No Dotters to close.\n");
+    }
+}
+
+/* Called when the user selects the 'Select Features' menu option, or hits the relevant shortcut key */
+static void onSelectFeaturesMenu(GtkAction *action, gpointer data)
+{
+//  selectFeatures();
+}
+
+
+/* Called when the user selects the 'Deselect all' menu option, or hits the relevant shortcut key */
+static void onDeselectAllRows(GtkAction *action, gpointer data)
+{
+  GtkWidget *blxWindow = GTK_WIDGET(data);
+  blxWindowDeselectAllSeqs(blxWindow);
+}
+
+
+/* Called when the user selects the Statistics menu option, or hits the Statistics shortcut key.
+ * Pops up a dialog showing memory usage statistics. */
+static void onStatisticsMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *blxWindow = GTK_WIDGET(data);
+  MSP *mspList = blxWindowGetMspList(blxWindow);
+  showStatsDialog(blxWindow, mspList);
+}
+
+
+/* Called when the user selects the Print menu option, or hits the Print shortcut key */
+static void onPrintMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *blxWindow = GTK_WIDGET(data);
+  BlxWindowProperties *properties = blxWindowGetProperties(blxWindow);
+
+  /* We need to do some work to prepare the big picture for printing */
+  bigPicturePrepareForPrinting(properties->bigPicture);
+  
+  blxPrintWidget(blxWindow, NULL, GTK_WINDOW(blxWindow), &properties->printSettings, &properties->pageSetup, NULL, TRUE, PRINT_FIT_BOTH);
+  
+  bigPictureRedrawAll(properties->bigPicture);
+}
+
+
+/* Called when the user selects the Page Setup menu option, or hits the Print shortcut key */
+static void onPageSetupMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *blxWindow = GTK_WIDGET(data);
+  BlxWindowProperties *properties = blxWindowGetProperties(blxWindow);
+
+  if (!properties->pageSetup)
+    properties->pageSetup = gtk_page_setup_new();
+  
+  if (!properties->printSettings)
+    properties->printSettings = gtk_print_settings_new();
+  
+  properties->pageSetup = gtk_print_run_page_setup_dialog(GTK_WINDOW(blxWindow), 
+                                                          properties->pageSetup, 
+                                                          properties->printSettings);
+}  
+
+/***********************************************************
+ *                         Events                          *
+ ***********************************************************/
+
+/* Mouse button handler */
+static gboolean onButtonPressBlxWindow(GtkWidget *window, GdkEventButton *event, gpointer data)
+{
+  if (event->type == GDK_BUTTON_PRESS && event->button == 3)
+    {
+      gtk_menu_popup (GTK_MENU (data), NULL, NULL, NULL, NULL, event->button, event->time);
+      return TRUE;
+  }
+  
+  return TRUE;
+}
+
+
+/* Mouse button handler for the paned window containing the big picture and detail view */
+static gboolean onButtonPressPanedWin(GtkWidget *panedWin, GdkEventButton *event, gpointer data)
+{
+  gboolean handled = FALSE;
+  
+  switch (event->button)
+    {
+    case 1: /* left button */
+      {
+        if (event->type == GDK_2BUTTON_PRESS) /* double-click */
+          {
+            /* When the user double-clicks the paned window separator, reset the splitter position
+             * (i.e. so that gets automatically positioned based on the child widgets' size)
+             * to do: This makes the splitter jump temporarily to the desired position but then it
+             * immediately jumps back, so I'm leaving it out for now */
+            /* gtk_paned_set_position(GTK_PANED(panedWin), 100); */
+            handled = TRUE;
+          }
+
+        break;
+      }
+      
+    default:
+      break;
+    };
+    
+  return handled;
+}
+
+
+/* Handlers for specific key presses */
+static gboolean onKeyPressEscape(GtkWidget *window, const gboolean ctrlModifier, const gboolean shiftModifier)
+{
+  /* Reset the selected base index. Leave the selected frame as it is, though. */
+  GtkWidget *detailView = blxWindowGetDetailView(window);
+  detailViewUnsetSelectedBaseIdx(detailView);
+  return TRUE;
+}
+
+static gboolean onKeyPressLeftRight(GtkWidget *window, 
+                                    const gboolean left, 
+                                    const gboolean ctrlModifier, 
+                                    const gboolean shiftModifier,
+                                    const gboolean metaModifier)
+{
+  if (ctrlModifier)
+    {
+      goToMatch(window, left, shiftModifier);
+    }
+  else if (metaModifier)
+    {
+      moveSelectedBaseIdxBy1(window, left, shiftModifier);
+    }
+  else
+    {
+      moveSelectedDisplayIdxBy1(window, left, shiftModifier);
+    }
+  
+  return TRUE;
+}
+
+static gboolean onKeyPressUpDown(GtkWidget *window, const gboolean up, const gboolean ctrlModifier, const gboolean shiftModifier)
+{
+  gboolean result = moveRowSelection(window, up, ctrlModifier, shiftModifier);
+  return result;
+}
+
+static gboolean onKeyPressHomeEnd(GtkWidget *window, const gboolean home, const gboolean ctrlModifier, const gboolean shiftModifier)
+{
+  scrollToExtremity(window, home, ctrlModifier, shiftModifier);
+  return TRUE;
+}
+
+static gboolean onKeyPressComma(GtkWidget *window, const gboolean ctrlModifier, const gboolean shiftModifier)
+{
+  scrollDetailView(window, TRUE, ctrlModifier);
+  return TRUE;
+}
+
+static gboolean onKeyPressPeriod(GtkWidget *window, const gboolean ctrlModifier, const gboolean shiftModifier)
+{
+  scrollDetailView(window, FALSE, ctrlModifier);
+  return TRUE;
+}
+
+static gboolean onKeyPressPlusMinus(GtkWidget *window, const gboolean zoomIn, const gboolean ctrlModifier, const gboolean shiftModifier)
+{
+  zoomBlxWindow(window, zoomIn, ctrlModifier, shiftModifier);
+  return TRUE;
+}
+
+static gboolean onKeyPressV(GtkWidget *window, const gboolean ctrlModifier, const gboolean shiftModifier)
+{
+  gboolean result = FALSE;
+  
+  if (ctrlModifier)
+    {
+      /* Paste from the default clipboard */
+      requestDefaultClipboardText(findAndSelectSeqsFromClipboard, window);
+      result = TRUE;
+    }
+  
+  return result;
+}
+
+static gboolean onKeyPressF(GtkWidget *window, const gboolean ctrlModifier, const gboolean shiftModifier)
+{
+  if (ctrlModifier)
+    {
+      showFindDialog(window, TRUE);
+    }
+  else
+    {
+      createQuickGroup(window, true, !shiftModifier);
+    }
+
+  return TRUE;
+}
+
+static gboolean onKeyPressP(GtkWidget *window, const gboolean ctrlModifier, const gboolean shiftModifier)
+{
+  gboolean result = FALSE;
+  
+  if (!ctrlModifier)
+    {
+      goToDetailViewCoord(blxWindowGetDetailView(window), BLXSEQ_DNA); /* for now, only accept input in terms of DNA seq coords */
+      result = TRUE;
+    }
+  
+  return result;
+}
+
+static gboolean onKeyPressG(GtkWidget *window, const gboolean ctrlModifier, const gboolean shiftModifier)
+{
+  gboolean result = FALSE;
+  
+  if (!ctrlModifier)
+    {       
+      createQuickGroup(window, false, !shiftModifier);
+      result = TRUE;
+    }
+  
+  return result;
+}
+
+static gboolean onKeyPressB(GtkWidget *window, const gboolean ctrlModifier, const gboolean shiftModifier)
+{
+  toggleBumpState(window);
+  
+  /* Refresh the view dialog, if it is open */
+  refreshDialog(BLXDIALOG_VIEW, window);
+  
+  return TRUE;
+}
+
+static gboolean onKeyPressT(GtkWidget *window, const gboolean ctrlModifier, const gboolean shiftModifier)
+{
+  toggleStrand(blxWindowGetDetailView(window));
+  return TRUE;
+}
+
+static gboolean onKeyPressI(GtkWidget *window, const gboolean ctrlModifier, const gboolean shiftModifier)
+{
+  showInfoDialog(window);
+  return TRUE;
+}
+
+static gboolean onKeyPressNumber(GtkWidget *window, const int number, const gboolean ctrlModifier, const gboolean shiftModifier)
+{
+  togglePaneVisibility(window, number, ctrlModifier, shiftModifier);
+  
+  /* Refresh the view dialog, if it is open */
+  refreshDialog(BLXDIALOG_VIEW, window);
+  
+  return TRUE;
+}
+
+static gboolean onKeyPressF3(GtkWidget *window, const gboolean ctrlModifier, const gboolean shiftModifier)
+{
+  findAgain(window, shiftModifier);
+  return TRUE;
+}
+
+/* Key press handler */
+static gboolean onKeyPressBlxWindow(GtkWidget *window, GdkEventKey *event, gpointer data)
+{
+  gboolean result = FALSE;
+  
+  const gboolean ctrlModifier = (event->state & GDK_CONTROL_MASK) == GDK_CONTROL_MASK;
+  const gboolean shiftModifier = (event->state & GDK_SHIFT_MASK) == GDK_SHIFT_MASK;
+  const gboolean metaModifier = (event->state & GDK_META_MASK) == GDK_META_MASK;
+  
+  switch (event->keyval)
+    {
+      case GDK_Escape:      result = onKeyPressEscape(window, ctrlModifier, shiftModifier);           break;
+      
+      case GDK_Left:        result = onKeyPressLeftRight(window, TRUE, ctrlModifier, shiftModifier, metaModifier);  break;
+      case GDK_Right:       result = onKeyPressLeftRight(window, FALSE, ctrlModifier, shiftModifier, metaModifier); break;
+      
+      case GDK_Up:          result = onKeyPressUpDown(window, TRUE, ctrlModifier, shiftModifier);     break;
+      case GDK_Down:        result = onKeyPressUpDown(window, FALSE, ctrlModifier, shiftModifier);    break;
+        
+      case GDK_Home:        result = onKeyPressHomeEnd(window, TRUE, ctrlModifier, shiftModifier);    break;
+      case GDK_End:         result = onKeyPressHomeEnd(window, FALSE, ctrlModifier, shiftModifier);   break;
+
+      case GDK_comma:       result = onKeyPressComma(window, ctrlModifier, shiftModifier);            break;
+      case GDK_period:      result = onKeyPressPeriod(window, ctrlModifier, shiftModifier);           break;
+
+      case GDK_equal:       /* fall through */
+      case GDK_plus:        result = onKeyPressPlusMinus(window, TRUE, ctrlModifier, shiftModifier);  break;
+      
+      case GDK_minus:       /* fall through */
+      case GDK_underscore:  result = onKeyPressPlusMinus(window, FALSE, ctrlModifier, shiftModifier); break;
+      
+      case GDK_F3:          result = onKeyPressF3(window, ctrlModifier, shiftModifier);               break;
+
+      case GDK_v:           /* fall through */
+      case GDK_V:           result = onKeyPressV(window, ctrlModifier, shiftModifier);                break;
+        
+      case GDK_f:           /* fall through */
+      case GDK_F:           result = onKeyPressF(window, ctrlModifier, shiftModifier);                break;
+
+      case GDK_g:           /* fall through */
+      case GDK_G:           result = onKeyPressG(window, ctrlModifier, shiftModifier);                break;
+
+      case GDK_p:           /* fall through */
+      case GDK_P:           result = onKeyPressP(window, ctrlModifier, shiftModifier);                break;
+                
+      case GDK_b:           /* fall through */
+      case GDK_B:           result = onKeyPressB(window, ctrlModifier, shiftModifier);                break;
+        
+      case GDK_t:           /* fall through */
+      case GDK_T:           result = onKeyPressT(window, ctrlModifier, shiftModifier);                break;
+
+      case GDK_i:           /* fall through */
+      case GDK_I:           result = onKeyPressI(window, ctrlModifier, shiftModifier);                break;
+
+      case GDK_1:           /* fall through */
+      case GDK_exclam:      result = onKeyPressNumber(window, 1, ctrlModifier, shiftModifier);        break;
+
+      case GDK_2:           /* fall through */
+      case GDK_quotedbl:    /* fall through */
+      case GDK_at:          result = onKeyPressNumber(window, 2, ctrlModifier, shiftModifier);        break;
+
+      case GDK_3:           /* fall through */
+      case GDK_currency:    result = onKeyPressNumber(window, 3, ctrlModifier, shiftModifier);        break;
+    };
+  
+  return result;
+}
+
+/***********************************************************
+ *                         Properties                      *
+ ***********************************************************/
+
+static BlxWindowProperties* blxWindowGetProperties(GtkWidget *widget)
+{
+  /* optimisation: cache result, because we know there is only ever one main window */
+  static BlxWindowProperties *properties = NULL;
+  
+  if (!properties && widget)
+    properties = (BlxWindowProperties*)(g_object_get_data(G_OBJECT(widget), "BlxWindowProperties"));
+  
+  return properties;
+}
+
+BlxContext* blxWindowGetContext(GtkWidget *blxWindow)
+{
+  BlxWindowProperties *properties = blxWindowGetProperties(blxWindow);
+  return properties ? properties->blxContext : NULL;
+}
+
+GList* blxWindowGetColumnList(GtkWidget *blxWindow)
+{
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+  return (bc ? bc->columnList : NULL);
+}
+
+/* This function saves all of blixem's customisable settings to
+ * a config file. */
+static void saveBlixemSettings(GtkWidget *blxWindow)
+{
+  g_return_if_fail(blxWindow);
+
+  char *filename = g_strdup_printf("%s/%s", g_get_home_dir(), BLIXEM_SETTINGS_FILE);
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+
+  GKeyFile *key_file = g_key_file_new();
+  GKeyFileFlags flags = G_KEY_FILE_NONE;
+  GError *error = NULL;
+  
+  /* Load existing contents so they can be merged, if the file already exists */
+  g_key_file_load_from_file(key_file, filename, flags, &error);
+  g_message("Saving Blixem settings to '%s'.\n", filename);
+
+  /* Write the settings */
+  bc->saveSettingsFlags(key_file);
+  g_key_file_set_integer(key_file, SETTINGS_GROUP, SETTING_NAME_SQUASH_MATCHES, (bc->modelId == BLXMODEL_SQUASHED));
+  detailViewSaveProperties(blxWindowGetDetailView(blxWindow), key_file);
+
+  /* Output to the config file */
+  gchar *file_content = g_key_file_to_data(key_file, NULL, NULL);
+      
+  if (!g_file_set_contents(filename, file_content, -1, NULL))
+    g_warning("Error saving settings to '%s'.\n", filename);
+
+  g_free(file_content);
+  g_key_file_free(key_file);
+}
+
+
+static void onDestroyBlxWindow(GtkWidget *widget)
+{
+  BlxWindowProperties *properties = blxWindowGetProperties(widget);
+  
+  if (properties)
+    {
+      delete properties->blxContext;
+      properties->blxContext = NULL;
+
+      if (properties->mainmenu)
+        {
+          gtk_widget_destroy(properties->mainmenu);
+          properties->mainmenu = NULL;
+        }
+
+      if (properties->seqHeaderMenu)
+        {
+          gtk_widget_destroy(properties->seqHeaderMenu);
+          properties->seqHeaderMenu = NULL;
+        }
+      
+      /* Destroy the print settings */
+      if (properties->printSettings)
+        {
+          g_object_unref(properties->printSettings);
+          properties->printSettings = NULL;
+        }
+      
+      /* Free the properties struct itself */
+      delete properties;
+      properties = NULL;
+      g_object_set_data(G_OBJECT(widget), "BlxWindowProperties", NULL);
+    }
+
+  /* Reset any globals */
+  blviewResetGlobals();
+  
+  gtk_main_quit();
+}
+
+
+/* Create the properties struct and initialise all values. */
+static void blxWindowCreateProperties(CommandLineOptions *options,
+                                      BlxContext *blxContext,
+                                      GtkWidget *widget, 
+                                      GtkWidget *bigPicture, 
+                                      GtkWidget *detailView,
+                                      GtkWidget *mainmenu,
+                                      GtkWidget *seqHeaderMenu,
+                                      GtkActionGroup *actionGroup,
+                                      const IntRange* const refSeqRange,
+                                      const IntRange* const fullDisplayRange,
+                                      const char *paddingSeq)
+{
+  if (widget)
+    {
+      BlxWindowProperties *properties = new BlxWindowProperties;
+      
+      properties->widget = widget;
+      properties->blxContext = blxContext;
+
+      properties->bigPicture = bigPicture;
+      properties->detailView = detailView;
+      properties->mainmenu = mainmenu;
+      properties->seqHeaderMenu = seqHeaderMenu;
+      properties->actionGroup = actionGroup;
+
+      properties->pageSetup = gtk_page_setup_new();
+      gtk_page_setup_set_orientation(properties->pageSetup, GTK_PAGE_ORIENTATION_LANDSCAPE);
+      
+      properties->printSettings = gtk_print_settings_new();
+      gtk_print_settings_set_orientation(properties->printSettings, GTK_PAGE_ORIENTATION_LANDSCAPE);
+      gtk_print_settings_set_quality(properties->printSettings, GTK_PRINT_QUALITY_HIGH);
+      gtk_print_settings_set_resolution(properties->printSettings, DEFAULT_PRINT_RESOLUTION);
+    
+      g_object_set_data(G_OBJECT(widget), "BlxWindowProperties", properties);
+      g_signal_connect(G_OBJECT(widget), "destroy", G_CALLBACK (onDestroyBlxWindow), NULL);
+    }
+}
+
+gboolean blxWindowGetDisplayRev(GtkWidget *blxWindow)
+{
+  BlxContext *blxContext = blxWindowGetContext(blxWindow);
+  return blxContext ? blxContext->displayRev : FALSE;
+}
+
+GtkWidget* blxWindowGetBigPicture(GtkWidget *blxWindow)
+{
+  BlxWindowProperties *properties = blxWindowGetProperties(blxWindow);
+  return properties ? properties->bigPicture : NULL;
+}
+
+GtkWidget* blxWindowGetDetailView(GtkWidget *blxWindow)
+{
+  BlxWindowProperties *properties = blxWindowGetProperties(blxWindow);
+  return properties ? properties->detailView : NULL;
+}
+
+GtkWidget* blxWindowGetBigPictureCoverageView(GtkWidget *blxWindow)
+{
+  GtkWidget *coverageView = NULL;
+  BlxWindowProperties *properties = blxWindowGetProperties(blxWindow);
+
+  if (properties && properties->bigPicture)
+    {
+      BigPictureProperties *bpProperties = bigPictureGetProperties(properties->bigPicture);
+      
+      if (bpProperties)
+        coverageView = bpProperties->coverageView();
+    }
+
+  return coverageView;
+}
+
+GtkWidget* blxWindowGetDetailViewCoverageView(GtkWidget *blxWindow)
+{
+  GtkWidget *coverageView = NULL;
+  BlxWindowProperties *properties = blxWindowGetProperties(blxWindow);
+
+  if (properties && properties->detailView)
+    {
+      DetailViewProperties *dvProperties = detailViewGetProperties(properties->detailView);
+      
+      if (dvProperties)
+        coverageView = dvProperties->coverageView();
+    }
+
+  return coverageView;
+}
+
+GtkWidget* blxWindowGetMainMenu(GtkWidget *blxWindow)
+{
+  BlxWindowProperties *properties = blxWindowGetProperties(blxWindow);
+  return properties ? properties->mainmenu : NULL;
+}
+
+GtkWidget* blxWindowGetSeqHeaderMenu(GtkWidget *blxWindow)
+{
+  BlxWindowProperties *properties = blxWindowGetProperties(blxWindow);
+  return properties ? properties->seqHeaderMenu : NULL;
+}
+
+BlxBlastMode blxWindowGetBlastMode(GtkWidget *blxWindow)
+{
+  BlxContext *blxContext = blxWindowGetContext(blxWindow);
+  return blxContext ? blxContext->blastMode : (BlxBlastMode)0;
+}
+
+char * blxWindowGetRefSeq(GtkWidget *blxWindow)
+{
+  BlxContext *blxContext = blxWindowGetContext(blxWindow);
+  return blxContext ? blxContext->refSeq : NULL;
+}
+
+const char * blxWindowGetRefSeqName(GtkWidget *blxWindow)
+{
+  BlxContext *blxContext = blxWindowGetContext(blxWindow);
+  return blxContext ? blxContext->refSeqName : NULL;
+}
+
+char** blxWindowGetGeneticCode(GtkWidget *blxWindow)
+{
+  BlxContext *blxContext = blxWindowGetContext(blxWindow);
+  return blxContext ? blxContext->geneticCode : NULL;
+}
+
+MSP* blxWindowGetMspList(GtkWidget *blxWindow)
+{
+  BlxContext *blxContext = blxWindowGetContext(blxWindow);
+  return blxContext ? blxContext->mspList : NULL;
+}
+
+GList* blxWindowGetAllMatchSeqs(GtkWidget *blxWindow)
+{
+  BlxContext *blxContext = blxWindowGetContext(blxWindow);
+  return blxContext ? blxContext->matchSeqs : NULL;
+}
+
+BlxSeqType blxWindowGetSeqType(GtkWidget *blxWindow)
+{
+  BlxContext *blxContext = blxWindowGetContext(blxWindow);
+  return blxContext ? blxContext->seqType : BLXSEQ_NONE;
+}
+
+IntRange* blxWindowGetFullRange(GtkWidget *blxWindow)
+{
+  BlxContext *blxContext = blxWindowGetContext(blxWindow);
+  return blxContext ? &blxContext->fullDisplayRange : NULL;
+}
+
+IntRange* blxWindowGetRefSeqRange(GtkWidget *blxWindow)
+{
+  BlxContext *blxContext = blxWindowGetContext(blxWindow);
+  return blxContext ? &blxContext->refSeqRange : NULL;
+}
+
+int blxWindowGetNumFrames(GtkWidget *blxWindow)
+{
+  BlxContext *blxContext = blxWindowGetContext(blxWindow);
+  return blxContext ? blxContext->numFrames : UNSET_INT;
+}
+
+int blxWindowGetDotterStart(GtkWidget *blxWindow)
+{
+  BlxContext *blxContext = blxWindowGetContext(blxWindow);
+  return blxContext ? blxContext->dotterStart : UNSET_INT;
+}
+
+int blxWindowGetDotterEnd(GtkWidget *blxWindow)
+{
+  BlxContext *blxContext = blxWindowGetContext(blxWindow);
+  return blxContext ? blxContext->dotterEnd : UNSET_INT;
+}
+
+int blxWindowGetDotterZoom(GtkWidget *blxWindow)
+{
+  BlxContext *blxContext = blxWindowGetContext(blxWindow);
+  return blxContext ? blxContext->dotterZoom : UNSET_INT;
+}
+
+const char* blxWindowGetPaddingSeq(GtkWidget *blxWindow)
+{
+  BlxContext *blxContext = blxWindowGetContext(blxWindow);
+  return blxContext ? blxContext->paddingSeq : NULL;
+}
+
+/* Return the active strand - forward strand by default, reverse strand if display toggled */
+BlxStrand blxWindowGetActiveStrand(GtkWidget *blxWindow)
+{
+  return blxWindowGetDisplayRev(blxWindow) ? BLXSTRAND_REVERSE : BLXSTRAND_FORWARD;
+}
+
+/* Return the inactive strand - reverse strand by default, forward strand if display toggled */
+static BlxStrand blxWindowGetInactiveStrand(GtkWidget *blxWindow)
+{
+  return blxWindowGetDisplayRev(blxWindow) ? BLXSTRAND_FORWARD : BLXSTRAND_REVERSE;
+}
+
+/* returns true if display coords should be negated */
+gboolean blxWindowGetNegateCoords(GtkWidget *blxWindow)
+{
+  /* We negate coords (literally just stick a '-' on the front) for display purposes if the
+   * display is reversed and the negate-coords option is enabled. This gives the effect that coords
+   * always increase left-to-right, whereas when the display is reversed they really decrease. */
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+  return (bc->displayRev && bc->flags[BLXFLAG_NEGATE_COORDS]);
+}
+
+/* Get the column info for a particular column */
+BlxColumnInfo *getColumnInfo(const GList *columnList, const BlxColumnId columnId)
+{
+  BlxColumnInfo *result = NULL;
+  
+  const GList *listItem = columnList;
+  
+  for ( ; listItem; listItem = listItem->next)
+  {
+    BlxColumnInfo *columnInfo = (BlxColumnInfo*)(listItem->data);
+    if (columnInfo && columnInfo->columnId == columnId)
+      {
+        result = columnInfo;
+        break;
+      }
+  }
+  
+  return result;
+}
+
+
+/* Returns the list of all sequence groups */
+GList *blxWindowGetSequenceGroups(GtkWidget *blxWindow)
+{
+  BlxContext *blxContext = blxWindowGetContext(blxWindow);
+  return blxContext->sequenceGroups;
+}
+
+
+/* Returns the group that the given sequence belongs to, if any (assumes the sequence
+ * is only in one group; otherwise it just returns the first group it finds). */
+SequenceGroup *blxWindowGetSequenceGroup(GtkWidget *blxWindow, const BlxSequence *seqToFind)
+{
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+  return bc->getFirstSequenceGroup(seqToFind);
+}
+
+
+static gboolean blxWindowGetUsePrintColors(GtkWidget *blxWindow)
+{
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+  return bc->usePrintColors;
+}
+
+
+/* This should be called whenever the background color has changed */
+static void onUpdateBackgroundColor(GtkWidget *blxWindow)
+{
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+
+  GdkColor *defaultBgColor = getGdkColor(BLXCOLOR_BACKGROUND, bc->defaultColors, FALSE, bc->usePrintColors);
+  setWidgetBackgroundColor(blxWindow, defaultBgColor);
+  
+  blxWindowRedrawAll(blxWindow);
+}
+
+
+/* This sets the 'use print colors' flag and then updates the display */
+static void blxWindowSetUsePrintColors(GtkWidget *blxWindow, const gboolean usePrintColors)
+{
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+  bc->usePrintColors = usePrintColors;
+  onUpdateBackgroundColor(blxWindow);
+}
+
+
+/***********************************************************
+ *                        Selections                       *
+ ***********************************************************/
+
+/* Return all the selected sequences */
+GList* blxWindowGetSelectedSeqs(GtkWidget *blxWindow)
+{
+  BlxContext *blxContext = blxWindowGetContext(blxWindow);
+  return blxContext ? blxContext->selectedSeqs : NULL;
+}
+
+
+/* Return a list of all selected features of the given type. Result should be free'd by caller
+ * using g_list_free */
+GList *blxWindowGetSelectedSeqsByType(GtkWidget *blxWindow, const BlxSequenceType type)
+{
+  GList *result = NULL;
+
+  BlxContext *blxContext = blxWindowGetContext(blxWindow);
+  result = blxContext->getSelectedSeqsByType(type);
+
+  return result;
+}
+
+/* If there is one (and only one) selected transcript then return it; otherwise return null */
+BlxSequence* blxWindowGetSelectedTranscript(GtkWidget *blxWindow)
+{
+  BlxSequence *result = NULL;
+
+  BlxContext *blxContext = blxWindowGetContext(blxWindow);
+  result = blxContext->getSelectedTranscript(NULL);
+
+  return result;
+}
+
+
+/* Get the selected sequences as a list of sequence names. The returned list
+ * is formatted as newline-separated values. */
+static GString* blxWindowGetSelectedSeqNames(GtkWidget *blxWindow)
+{
+  GList *listItem = blxWindowGetSelectedSeqs(blxWindow);
+  GString *result = g_string_new_len(NULL, 50);
+  gboolean first = TRUE;
+  
+  for ( ; listItem; listItem = listItem->next)
+    {
+      /* Add a separator before the name, unless it's the first one */
+      if (!first)
+        {
+          g_string_append(result, "\n");
+        }
+      else
+        {
+          first = FALSE;
+        }
+
+      const BlxSequence *seq = (const BlxSequence*)(listItem->data);
+      g_string_append(result, blxSequenceGetName(seq));
+    }
+
+  return result;
+}
+
+
+/* Get the selected sequence data. Only works for a single selection.
+ * Returns null if fails. */
+static const char* blxWindowGetSelectedSeqData(GtkWidget *blxWindow)
+{
+  GList *listItem = blxWindowGetSelectedSeqs(blxWindow);
+  const char *result = NULL;
+
+  if (g_list_length(listItem) < 1)
+    g_critical("Please select a sequence.\n");
+  else if (g_list_length(listItem) > 1)
+    g_critical("Please select a single sequence.\n");
+  else
+    {
+      const BlxSequence *seq = (const BlxSequence*)(listItem->data);
+      result = blxSequenceGetSequence(seq);
+    }
+
+  return result;
+}
+
+
+/* This function copies the currently-selected sequences' names to the default
+ * clipboard. */
+void copySelectionToClipboard(GtkWidget *blxWindow)
+{
+  if (g_list_length(blxWindowGetSelectedSeqs(blxWindow)) < 1)
+    {
+      g_critical("Please select a sequence");
+    }
+  else
+    {
+      GString *displayText = blxWindowGetSelectedSeqNames(blxWindow);
+
+      if (displayText)
+        {
+          setDefaultClipboardText(displayText->str);
+          g_string_free(displayText, TRUE);
+          g_message("Copied selected sequence name(s) to clipboard\n");
+        }
+    }
+}
+
+
+/* This function copies the currently-selected sequence's data to the default
+ * clipboard. */
+static void copySelectedSeqDataToClipboard(GtkWidget *blxWindow)
+{
+  const char *displayText = blxWindowGetSelectedSeqData(blxWindow);
+
+  if (displayText)
+    {
+      const int len = strlen(displayText);
+      
+      /* Warn user if they're about to copy a large sequence */
+      if (len <= MAX_RECOMMENDED_COPY_LENGTH || 
+          runConfirmationBox(blxWindow, "Copy sequence", "You are about to copy a large amount of text to the clipboard\n\nAre you sure you want to continue?") == GTK_RESPONSE_ACCEPT)
+        {
+          setDefaultClipboardText(displayText);
+          g_message("Copied selected sequence data to clipboard\n");
+        }
+    }
+}
+
+
+/* This function copies the currently-selected sequence's data to the default
+ * clipboard. Only copies the range between the given coords */
+static void copySelectedSeqRangeToClipboard(GtkWidget *blxWindow, const int fromIdx_in, const int toIdx_in)
+{
+  GList *listItem = blxWindowGetSelectedSeqs(blxWindow);
+  const char *sequence = NULL;
+
+  if (g_list_length(listItem) < 1)
+    g_critical("Please select a sequence.\n");
+  else if (g_list_length(listItem) > 1)
+    g_critical("Please select a single sequence.\n");
+  else
+    {
+      const BlxSequence *seq = (const BlxSequence*)(listItem->data);
+      sequence = blxSequenceGetSequence(seq);
+
+      if (sequence)
+        {
+          BlxContext *bc = blxWindowGetContext(blxWindow);
+          const gboolean reverse = (bc->displayRev != (seq->strand == BLXSTRAND_REVERSE));
+          int fromIdx = fromIdx_in;
+          int toIdx = toIdx_in;
+
+          /* Coords can be passed in any order. Swap them if from > to */
+          if (!reverse && fromIdx > toIdx)
+            {
+              int tmp = fromIdx;
+              fromIdx = toIdx;
+              toIdx = tmp;
+            }
+          else if (reverse && fromIdx < toIdx)
+            {
+              int tmp = fromIdx;
+              fromIdx = toIdx;
+              toIdx = tmp;
+            }
+          
+          /* Find the match-sequence coord at these ref-seq coords */
+          GtkWidget *detailView = blxWindowGetDetailView(blxWindow);
+          const int numUnalignedBases = detailViewGetNumUnalignedBases(detailView);
+
+          /* Loop through all msps and look for one which contains both the start and end coord. */
+          int matchStart = 0, matchEnd = 0;
+          GList *mspItem = seq->mspList;
+          const MSP *msp = NULL;
+
+          for ( ; mspItem && !msp; mspItem = mspItem->next)
+            {
+              const MSP *check_msp = (const MSP*)(mspItem->data);
+
+              if (mspGetMatchCoord(check_msp, fromIdx, TRUE, numUnalignedBases, bc, &matchStart) &&
+                  mspGetMatchCoord(check_msp, toIdx, TRUE, numUnalignedBases, bc, &matchEnd))
+                {
+                  msp = check_msp;
+                  break;
+                }
+            }
+
+          if (msp)
+            {
+              /* Match coords are 1-based: convert to 0-based */
+              --matchStart;
+              --matchEnd;
+
+              /* Match coords may be opposite direction to ref coords so make sure start < end */
+              if (matchStart > matchEnd)
+                {
+                  int tmp = matchStart;
+                  matchStart = matchEnd;
+                  matchEnd = tmp;
+                }
+
+              const int sourceLen = strlen(sequence);
+              const int len = matchEnd - matchStart + 1;
+              DEBUG_OUT("Copying %s (%d, %d) (len=%d) for ref seq (%d, %d)\n", 
+                        blxSequenceGetName(seq), matchStart, matchEnd, sourceLen, fromIdx, toIdx);
+
+              if (matchStart >= sourceLen || matchEnd >= sourceLen)
+                {
+                  g_critical("Coordinates (%d, %d) are not within match sequence length %d", matchStart, matchEnd, sourceLen);
+                }
+              else if (len > sourceLen)
+                {
+                  g_critical("Match sequence range (%d, %d) is longer than match sequence length (%d)", matchStart, matchEnd, sourceLen);
+                }
+              else if (len < 0)
+                {
+                  g_critical("Error: range length is negative (ref = %d, %d, match = %d, %d, len=%d)", 
+                             fromIdx, toIdx, matchStart, matchEnd, len);
+                }
+              else if (len == 0)
+                {
+                  g_critical("Error: range length is 0");
+                }
+              else if (matchStart > matchEnd)
+                {
+                  g_critical("Error copying sequence: match sequence start coord is less than the end coord");
+                }
+              else
+                {
+                  /* Ok, now do the copy */
+
+                  /* Warn user if they're about to copy a large sequence and ask to confirm */
+                  if (len <= MAX_RECOMMENDED_COPY_LENGTH || 
+                      runConfirmationBox(blxWindow, "Copy sequence", "You are about to copy a large amount of text to the clipboard\n\nAre you sure you want to continue?") == GTK_RESPONSE_ACCEPT)
+                    {
+                      char *displayText = g_strndup(sequence + matchStart, len);
+
+                      /* If the msp is in the opposite strand to the forward-direction strand (as
+                       * determined by displayRev) then we need to reverse the result */
+                      if (bc->displayRev != (msp->qStrand == BLXSTRAND_REVERSE))
+                        displayText = g_strreverse(displayText);
+
+                      setDefaultClipboardText(displayText);
+                      g_message("Copied sequence data for %s (%d, %d) to clipboard (%d, %d)\n", 
+                                blxSequenceGetName(seq), matchStart + 1, matchEnd + 1, fromIdx, toIdx);
+
+                      g_free(displayText);
+                    }
+                }
+            }
+          else
+            {
+              g_critical("Failed to find a match from sequence '%s' which contains the range (%d, %d)", 
+                         blxSequenceGetName(seq), fromIdx, toIdx);
+            }
+        }
+    }
+}
+
+
+/* This gets the ref seq segment for the given range of coords. Returns a newly allocated string
+ * which should be free'd by the caller with g_free */
+static char* getRefSeqSegment(GtkWidget *blxWindow, const int fromIdx_in, const int toIdx_in)
+{
+  DEBUG_ENTER("getRefSeqSegment()");
+
+  char *result = NULL;
+
+  const char *refSeq = blxWindowGetRefSeq(blxWindow);
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+
+  if (refSeq)
+    {
+      /* Need to get 0-based indices */
+      const IntRange* const refSeqRange = blxWindowGetRefSeqRange(blxWindow);
+      
+      const int fromIdx = min(fromIdx_in, toIdx_in) - refSeqRange->min();
+      const int toIdx = max(fromIdx_in, toIdx_in) - refSeqRange->min();
+      const int len = toIdx - fromIdx + 1;
+
+      /* Warn user if they're about to copy a large sequence */
+      if (len <= MAX_RECOMMENDED_COPY_LENGTH || 
+          runConfirmationBox(blxWindow, "Copy sequence", "You are about to copy a large amount of text to the clipboard\n\nAre you sure you want to continue?") == GTK_RESPONSE_ACCEPT)
+        {
+          result = g_strndup(refSeq + fromIdx, toIdx - fromIdx + 1);
+      
+          if (result)
+            {
+              /*! \todo Currently in dna mode the active strand pane is ignored (the strand is
+               * forward if the display is forward and vice versa). We could find the strand here
+               * that the user last clicked on and return the sequence for that. Needs a bit of
+               * thought to get all the directionality right. */
+              //GtkWidget *detailView = blxWindowGetDetailView(blxWindow);
+              //BlxStrand strand = detailViewGetSelectedStrand(detailView);
+
+              if (bc->displayRev)
+                {
+                  char *tmp = (char*)g_malloc(strlen(result) + 1);
+                  revComplement(tmp, result);
+                  g_free(result);
+                  result = tmp;
+                }
+            }
+        }
+    }
+  else
+    {
+      DEBUG_OUT("No reference sequence!\n");
+    }
+
+  DEBUG_EXIT("getRefSeqSegment returning %s", result);
+
+  return result;
+}
+
+
+/* This function copies the reference sequence, from the 
+ * clicked position to the marked position, onto the clipboard. */
+static void copyRefSeqToClipboard(GtkWidget *blxWindow, const int fromIdx, const int toIdx)
+{
+  char *dnaSeq = getRefSeqSegment(blxWindow, fromIdx, toIdx);
+
+  if (dnaSeq)
+    {
+      setDefaultClipboardText(dnaSeq);
+      g_message("Copied reference sequence from %d to %d\n", fromIdx, toIdx);
+
+      g_free(dnaSeq);
+    }
+  else
+    {
+      g_critical("Error getting DNA sequence for %d to %d\n", fromIdx, toIdx);
+    }
+}
+
+
+/* This function copies the reference sequence, from the 
+ * clicked position to the marked position, onto the clipboard. */
+static void copyRefSeqTranslationToClipboard(GtkWidget *blxWindow, const int fromIdx, const int toIdx)
+{
+  DEBUG_ENTER("copyRefSeqTranslationToClipboard()");
+
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+  GtkWidget *detailView = blxWindowGetDetailView(blxWindow);
+
+  if (bc && detailView)
+    {
+      char *dnaSeq = getRefSeqSegment(blxWindow, fromIdx, toIdx);
+
+      if (dnaSeq)
+        {
+          int requiredFrame = detailViewGetActiveFrame(detailView);
+          int offset = 0;
+
+          if (bc->seqType == BLXSEQ_PEPTIDE)
+            {
+              /* Get the offset from the start frame of the dna seq to the required reading frame */
+              int curFrame = fromIdx % 3;
+
+              /* If the display is reversed, use the end coord to calculate frame */
+              if (bc->displayRev)
+                curFrame = toIdx % 3;
+
+              if (curFrame < 1)
+                curFrame += 3;
+
+              int offset = requiredFrame - curFrame;
+              if (offset < 0)
+                offset += 3;
+            }
+
+          char *pepSeq = blxTranslate(dnaSeq + offset, bc->geneticCode);
+
+          if (pepSeq)
+            {
+              setDefaultClipboardText(pepSeq);
+              
+              g_message("Copied reference sequence translation from %d to %d for frame %d\n", fromIdx, toIdx, requiredFrame);
+              g_free(pepSeq);
+            }
+          else
+            {
+              g_critical("Error getting translation of DNA sequence from %d to %d for frame %d\n", fromIdx, toIdx, requiredFrame);
+            }
+
+          g_free(dnaSeq);
+        }
+      else
+        {
+          g_critical("Error getting DNA sequence for %d to %d\n", fromIdx, toIdx);
+        }
+    }
+
+  DEBUG_EXIT("copyRefSeqTranslationToClipboard returning ");
+}
+
+
+/* Update function to be called whenever the MSP selection has changed */
+void blxWindowSelectionChanged(GtkWidget *blxWindow)
+{
+  GtkWidget *detailView = blxWindowGetDetailView(blxWindow);
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+
+  if ((bc->flags[BLXFLAG_SHOW_UNALIGNED] && bc->flags[BLXFLAG_SHOW_UNALIGNED_SELECTED]) ||
+      (bc->flags[BLXFLAG_SHOW_POLYA_SITE] && bc->flags[BLXFLAG_SHOW_POLYA_SITE_SELECTED]))
+    {
+      /* When these options are enabled, the length of an MSP can depend on
+       * whether it is selected or not; changing the selection can therefore
+       * affect which MPSs are visible, so we need to re-filter the trees */
+      refilterDetailView(detailView, NULL);
+    }
+  
+  /* Redraw */
+  updateFeedbackBox(detailView);
+  blxWindowRedrawAll(blxWindow);
+  
+  /* Copy the selected sequence names to the PRIMARY clipboard */
+  GString *displayText = blxWindowGetSelectedSeqNames(blxWindow);
+  setPrimaryClipboardText(displayText->str);
+  g_string_free(displayText, TRUE);
+  
+  /* Refresh the dotter dialog, if it happens to be open */
+  refreshDialog(BLXDIALOG_DOTTER, blxWindow);
+}
+
+
+/* Call this function to select the given match sequence */
+void blxWindowSelectSeq(GtkWidget *blxWindow, BlxSequence *seq)
+{
+  if (!blxWindowIsSeqSelected(blxWindow, seq))
+    {
+      BlxContext *blxContext = blxWindowGetContext(blxWindow);
+      blxContext->selectedSeqs = g_list_append(blxContext->selectedSeqs, seq);
+      blxWindowSelectionChanged(blxWindow);
+    }
+}
+
+
+/* Utility function to set the list of selected sequences */
+void blxWindowSetSelectedSeqList(GtkWidget *blxWindow, GList *seqList)
+{
+  blxWindowDeselectAllSeqs(blxWindow);
+
+  BlxContext *blxContext = blxWindowGetContext(blxWindow);
+  blxContext->selectedSeqs = seqList;
+
+  blxWindowSelectionChanged(blxWindow);
+}
+
+
+/* Call this function to deselect the given sequence */
+void blxWindowDeselectSeq(GtkWidget *blxWindow, BlxSequence *seq)
+{
+  BlxContext *blxContext = blxWindowGetContext(blxWindow);
+
+  /* See if it's in the list and, if so, get a pointer to the list element */
+  GList *foundSeq = g_list_find(blxContext->selectedSeqs, seq);
+
+  if (foundSeq)
+    {
+      blxContext->selectedSeqs = g_list_remove(blxContext->selectedSeqs, foundSeq->data);
+      blxWindowSelectionChanged(blxWindow);
+    }
+}
+
+
+/* Call this function to deselect all sequences */
+void blxWindowDeselectAllSeqs(GtkWidget *blxWindow)
+{
+  BlxContext *blxContext = blxWindowGetContext(blxWindow);
+
+  if (g_list_length(blxContext->selectedSeqs) > 0)
+    {
+      g_list_free(blxContext->selectedSeqs);
+      blxContext->selectedSeqs = NULL;
+      blxWindowSelectionChanged(blxWindow);
+    }
+}
+
+/* Returns true if the given sequence is selected */
+gboolean blxWindowIsSeqSelected(GtkWidget *blxWindow, const BlxSequence *seq)
+{
+  BlxContext *blxContext = blxWindowGetContext(blxWindow);
+  return blxContext->isSeqSelected(seq);
+}
+
+
+/* Set the given sequence as selected or unselected, depending on the given argument */
+void blxWindowSetSeqSelected(GtkWidget *blxWindow, BlxSequence *seq, const gboolean selected)
+{
+  if (selected)
+    {
+      blxWindowSelectSeq(blxWindow, seq);
+    }
+  else
+    {
+      blxWindowDeselectSeq(blxWindow, seq);
+    }
+}
+
+
+BlxSequence* blxWindowGetLastSelectedSeq(GtkWidget *blxWindow)
+{
+  BlxSequence *result = NULL;
+  
+  GList *selectedSeqs = blxWindowGetSelectedSeqs(blxWindow);
+  
+  if (g_list_length(selectedSeqs) > 0)
+    {
+      /* Get the last-selected sequence */
+      GList *lastItem = g_list_last(selectedSeqs);
+      result = (BlxSequence*)(lastItem->data);
+    }
+  
+  return result;
+}
+
+
+/***********************************************************
+ *                      Initialisation                     *
+ ***********************************************************/
+
+static void onDragDataReceived(GtkWidget *widget, 
+                               GdkDragContext *context, 
+                               int x, 
+                               int y,
+                               GtkSelectionData *selectionData, 
+                               guint info, 
+                               guint time,
+                               gpointer userdata)
+{
+  DEBUG_ENTER("onDragDataReceived()");
+
+  g_return_if_fail(selectionData);
+
+  if ((info == TARGET_STRING || info == TARGET_URL) && selectionData->data)
+    {
+      DEBUG_OUT("Received drag and drop text:\n%s\n", selectionData->data);
+      GError *tmp_error = NULL;
+      
+      /* For now just assume the text contains supported file contents. The file parsing
+       * will fail if it's not a supported format. */
+      char *text = (char*)(gtk_selection_data_get_text(selectionData));
+      dynamicLoadFeaturesFile(widget, NULL, text, &tmp_error);
+
+      if (tmp_error)
+        {
+          prefixError(tmp_error, "Error processing text from drag-and-drop: ");
+          reportAndClearIfError(&tmp_error, G_LOG_LEVEL_CRITICAL);
+        }
+    }
+
+  DEBUG_EXIT("onDragDataReceived returning ");
+}
+
+
+/* Called when the user moves the cursor over the window during a drag */
+static gboolean onDragMotion(GtkWidget *widget, GdkDragContext *event, gint x, gint y, guint time, gpointer data)
+{
+  /* Bring the blixem window to the front so the user can see where they're going to drop */
+  gtk_window_present(GTK_WINDOW(widget));
+
+  /* Return true to indicate that the whole window is a drop zone */
+  return TRUE;
+}
+
+
+static void setDragDropProperties(GtkWidget *widget)
+{
+  DEBUG_ENTER("setDragDropProperties()");
+
+  static GtkTargetEntry targetentries[] =
+    {
+      { (gchar*)"STRING",        0, TARGET_STRING },
+      { (gchar*)"text/plain",    0, TARGET_STRING },
+      { (gchar*)"text/uri-list", 0, TARGET_URL },
+    };
+  
+  gtk_drag_dest_set(widget, GTK_DEST_DEFAULT_ALL, targetentries, 3,
+                    (GdkDragAction)(GDK_ACTION_COPY|GDK_ACTION_MOVE|GDK_ACTION_LINK));
+ 
+  g_signal_connect(widget, "drag-data-received", G_CALLBACK(onDragDataReceived), NULL);
+  g_signal_connect(widget, "drag-motion", G_CALLBACK(onDragMotion),	NULL);
+  
+  DEBUG_EXIT("setDragDropProperties returning ")
+}
+
+/* Set various properties for the blixem window */
+static void setStyleProperties(GtkWidget *widget, char *windowColor)
+{
+  DEBUG_ENTER("setStyleProperties()");
+
+  /* Set the initial window size based on some fraction of the screen size */
+  int width = 300, height = 200;
+  gbtools::GUIGetTrueMonitorSizeFraction(widget, DEFAULT_WINDOW_WIDTH_FRACTION, DEFAULT_WINDOW_HEIGHT_FRACTION,
+                                  &width, &height);
+  
+  gtk_window_set_default_size(GTK_WINDOW(widget), width, height);
+  
+  gtk_container_set_border_width (GTK_CONTAINER(widget), DEFAULT_WINDOW_BORDER_WIDTH); 
+  gtk_window_set_mnemonic_modifier(GTK_WINDOW(widget), GDK_MOD1_MASK); /* MOD1 is ALT on most systems */
+  
+  /* Set the default font size to be a bit smaller than usual */
+  int origSize = pango_font_description_get_size(widget->style->font_desc) / PANGO_SCALE;
+  const char *origFamily = pango_font_description_get_family(widget->style->font_desc);
+
+  char parseString[500];
+  sprintf(parseString, "gtk-font-name = \"%s %d\"", origFamily, origSize + DEFAULT_FONT_SIZE_ADJUSTMENT);
+  gtk_rc_parse_string(parseString);
+
+  DEBUG_EXIT("setStyleProperties returning ");
+}
+
+
+/* Create the main menu */
+static void createMainMenu(GtkWidget *window,
+                           BlxContext *bc,
+                           GtkWidget **mainmenu,
+                           GtkWidget **seqHeaderMenu,
+                           GtkWidget **toolbar,
+                           GtkActionGroup **actionGroupOut)
+{
+  GtkActionGroup *action_group = gtk_action_group_new ("MenuActions");
+  
+  if (actionGroupOut)
+    *actionGroupOut = action_group;
+
+  /* Set the squash-matches toggle button depending on the initial state */
+  toggleMenuEntries[0].is_active = (bc->modelId == BLXMODEL_SQUASHED);  
+
+  gtk_action_group_add_actions (action_group, mainMenuEntries, G_N_ELEMENTS (mainMenuEntries), window);
+  gtk_action_group_add_toggle_actions(action_group, toggleMenuEntries, G_N_ELEMENTS (toggleMenuEntries), window);
+
+  GtkUIManager *ui_manager = gtk_ui_manager_new ();
+  gtk_ui_manager_insert_action_group (ui_manager, action_group, 0);
+  
+  GtkAccelGroup *accel_group = gtk_ui_manager_get_accel_group (ui_manager);
+  gtk_window_add_accel_group (GTK_WINDOW (window), accel_group);
+  
+  GError *error = NULL;
+  gboolean ok = gtk_ui_manager_add_ui_from_string (ui_manager, standardMenuDescription, -1, &error);
+  
+  if (ok && userIsDeveloper())
+    ok = gtk_ui_manager_add_ui_from_string (ui_manager, developerMenuDescription, -1, &error);
+    
+  if (!ok)
+    {
+      prefixError(error, "Building menus failed: ");
+      reportAndClearIfError(&error, G_LOG_LEVEL_ERROR);
+    }
+  
+  *mainmenu = gtk_ui_manager_get_widget (ui_manager, "/ContextMenu");
+  *seqHeaderMenu = gtk_ui_manager_get_widget (ui_manager, "/SeqHeaderContextMenu");
+  *toolbar = gtk_ui_manager_get_widget (ui_manager, "/Toolbar");
+}
+
+
+/* calcID: caculated percent identity of an MSP
+ * 
+ * There seems to be a general problem with this routine for protein
+ * alignments, the existing code certainly does not do the right thing.
+ * I have fixed this routine for gapped sequence alignments but not for
+ * protein stuff at all.
+ * 
+ * To be honest I think this routine is a _waste_ of time, the alignment
+ * programs that feed data to blixem produce an identity anyway so why
+ * not use that...why reinvent the wheel......
+ * 
+ * */
+static void calcID(MSP *msp, BlxContext *bc)
+{
+  const gboolean sForward = (mspGetMatchStrand(msp) == BLXSTRAND_FORWARD);
+  const gboolean qForward = (mspGetRefStrand(msp) == BLXSTRAND_FORWARD);
+  
+  if (mspIsBlastMatch(msp) && msp->id < 0) /* Only calculate if ID is not already set */
+    {
+      msp->id = 0.0;
+
+      /* If there is no sequence data, leave the ID as zero */
+      const char *matchSeq = mspGetMatchSeq(msp);
+
+      if (matchSeq)
+        {
+          /* Note that this will reverse complement the ref seq if it is the reverse 
+           * strand. This means that where there is no gaps array the comparison is trivial
+           * as coordinates can be ignored and the two sequences just whipped through. */
+          GError *error = NULL;
+          IntRange qRange(msp->qRange); /* make a copy because it will be updated */
+          
+          char *refSeqSegment = getSequenceSegment(bc->refSeq,
+                                                   &qRange,
+                                                   mspGetRefStrand(msp), 
+                                                   BLXSEQ_DNA,        /* msp q coords are always nucleotide coords */
+                                                   bc->seqType,       /* required seq type is the display seq type */
+                                                   mspGetRefFrame(msp, bc->seqType),
+                                                   bc->numFrames,
+                                                   &bc->refSeqRange,
+                                                   bc->blastMode,
+                                                   bc->geneticCode,
+                                                   bc->displayRev,
+                                                   !qForward,
+                                                   TRUE,
+                                                   &error);
+          
+          if (!refSeqSegment)
+            {
+              prefixError(error, "Failed to calculate ID for sequence '%s' (match coords = %d - %d). ", mspGetSName(msp), msp->sRange.min(), msp->sRange.max());
+              reportAndClearIfError(&error, G_LOG_LEVEL_CRITICAL);
+              return;
+            }
+          else
+            {
+              /* If there's an error but the sequence was still returned it's 
+               * a non-critical warning. Only issue one warning because we can
+               * get many thousands and it can fill up the terminal if we output
+               * them all. */
+              if (error)
+                {
+                  static gboolean done = FALSE;
+                  
+                  if (!done)
+                    {
+                      g_warning("There were errors calculating the percent ID for some sequences because the match extends out of the reference sequence range; some IDs may be incorrect.\n");
+                      done = TRUE;
+                    }
+                  
+                  g_error_free(error);
+                  error = NULL;
+                }
+            }
+          
+          /* We need to find the number of characters that match out of the total number */
+          int numMatchingChars = 0;
+          int totalNumChars = 0;
+          const int numGaps = msp->gaps ? g_slist_length(msp->gaps) : 0;
+          
+          if (numGaps == 0)
+            {
+              /* Ungapped alignments. */
+              totalNumChars = qRange.length() / bc->numFrames;
+
+              if (bc->blastMode == BLXMODE_TBLASTN || bc->blastMode == BLXMODE_TBLASTX)
+                {
+                  int i = 0;
+                  for ( ; i < totalNumChars; i++)
+                    {
+                      if (toupper(matchSeq[i]) == toupper(refSeqSegment[i]))
+                        {
+                          numMatchingChars++;
+                        }
+                    }
+                }
+              else                                                  /* blastn, blastp & blastx */
+                {
+                  int i = 0;
+                  for ( ; i < totalNumChars; i++)
+                    {
+                      int sIndex = sForward ? msp->sRange.min() + i - 1 : msp->sRange.max() - i - 1;
+                      if (toupper(matchSeq[sIndex]) == toupper(refSeqSegment[i]))
+                        {
+                          numMatchingChars++;
+                        }
+                    }
+                }
+            }
+          else
+            {
+              /* Gapped alignments. */
+
+              /* To do tblastn and tblastx is not imposssible but would like to work from
+               * examples to get it right.... */
+              if (bc->blastMode == BLXMODE_TBLASTN)
+                {
+                  g_message("not implemented yet\n") ;
+                }
+              else if (bc->blastMode == BLXMODE_TBLASTX)
+                {
+                  g_message("not implemented yet\n") ;
+                }
+              else
+                {
+                  /* blastn and blastp remain simple but blastx is more complex since the query
+                   * coords are nucleic not protein. */
+                  GSList *rangeItem = msp->gaps;
+                  
+                  for ( ; rangeItem; rangeItem = rangeItem->next)
+                    {
+                      CoordRange *range = (CoordRange*)(rangeItem->data);
+                      
+                      int qRangeMin = 0, qRangeMax = 0, sRangeMin = 0, sRangeMax = 0;
+                      getCoordRangeExtents(range, &qRangeMin, &qRangeMax, &sRangeMin, &sRangeMax);
+                      
+                      totalNumChars += sRangeMax - sRangeMin + 1;
+                      
+                      /* Note that refSeqSegment is just the section of the ref seq relating to this msp.
+                       * We need to translate the first coord in the range (which is in terms of the full
+                       * reference sequence) into coords in the cut-down ref sequence. */
+                      int q_start = qForward ? (qRangeMin - qRange.min()) / bc->numFrames : (qRange.max() - qRangeMax) / bc->numFrames;
+                      const int qLen = strlen(refSeqSegment);
+                      
+                      /* We can index sseq directly (but we need to adjust by 1 for zero-indexing). We'll loop forwards
+                       * through sseq if we have the forward strand or backwards if we have the reverse strand,
+                       * so start from the lower or upper end accordingly. */
+                      int s_start = sForward ? sRangeMin - 1 : sRangeMax - 1 ;
+
+                      int sIdx = s_start, qIdx = q_start ;
+                      while (((sForward && sIdx < sRangeMax) || (!sForward && sIdx >= sRangeMin - 1)) && qIdx < qLen)
+                        {
+                          /* Check that qIdx is not less that 0, which could happen if we have somehow got duff data. */
+                          if (qIdx >= 0 && toupper(matchSeq[sIdx]) == toupper(refSeqSegment[qIdx]))
+                            {
+                              numMatchingChars++ ;
+                            }
+
+                          /* Move to the next base. The refSeqSegment is always forward, but we might have to
+                           * traverse the s sequence in reverse. */
+                          ++qIdx ;
+                          if (sForward) ++sIdx ;
+                          else --sIdx ;
+                        }
+                    }
+                }
+            }
+          
+          msp->id = (100.0 * numMatchingChars / totalNumChars);
+          
+          g_free(refSeqSegment);
+        }
+    }
+  
+  return ;
+}
+
+
+/* Calculate the ID and q frame for the given MSP and store 
+ * them in the MSP struct. Returns the calculated ID (or UNSET_INT if this msp
+ * is not a blast match). */
+static void calcMspData(MSP *msp, BlxContext *bc)
+{  
+  /* Calculate the ID */
+  if (mspIsBlastMatch(msp))
+    {
+      calcID(msp, bc);
+    }
+}
+
+
+static gdouble calculateMspData(MSP *mspList, BlxContext *bc)
+{
+  MSP *msp = mspList;
+  gdouble lowestId = -1.0;
+  
+  for ( ; msp; msp = msp->next)
+    {
+      calcMspData(msp, bc);
+      
+      if (mspIsBlastMatch(msp) && (lowestId == -1.0 || msp->id < lowestId))
+        {
+          lowestId = msp->id;
+        }
+    }
+  
+  return lowestId;
+}
+
+
+/* Calculate the reference sequence range from the range and offset given in 
+ * the option. Also translate this to display coords. */
+static void calculateRefSeqRange(CommandLineOptions *options,
+                                 IntRange &refSeqRange,
+                                 IntRange &fullDisplayRange)
+{
+  
+  /* Offset the reference sequence range, if an offset was specified. */ 
+  refSeqRange.set(options->refSeqRange);
+  refSeqRange.set(refSeqRange.min() + options->refSeqOffset,
+                  refSeqRange.max() + options->refSeqOffset);
+  
+  fullDisplayRange.set(refSeqRange);
+  
+  if (options->seqType == BLXSEQ_PEPTIDE)
+    {
+      /* Adjust the reference sequence reading frame so that it always starts at
+        * base 1 in frame 1. This makes the display easier because we can always just
+        * start drawing from the 1st base in the reference sequence. */
+      int base = UNSET_INT;
+      convertDnaIdxToDisplayIdx(refSeqRange.min(), options->seqType, 1, options->numFrames, FALSE, &refSeqRange, &base);
+      
+      int offset = (options->numFrames - base + 1);
+      
+      if (offset >= options->numFrames)
+          offset -= options->numFrames;
+      
+      refSeqRange.setMin(refSeqRange.min() + offset);
+      options->refSeq = options->refSeq + offset;
+      
+      /* Now do the same for when the ref seq is reversed */
+      convertDnaIdxToDisplayIdx(refSeqRange.max(), options->seqType, 1, options->numFrames, TRUE, &refSeqRange, &base);
+      offset = (options->numFrames - base + 1);
+      
+      if (offset >= options->numFrames) 
+          offset -= options->numFrames;
+      
+      refSeqRange.setMax(refSeqRange.max() - offset);
+      options->refSeq[refSeqRange.length()] = '\0';
+      
+      /* Now calculate the full display range in display coords */
+      fullDisplayRange.setMin(convertDnaIdxToDisplayIdx(refSeqRange.min(), options->seqType, 1, options->numFrames, FALSE, &refSeqRange, NULL));
+      fullDisplayRange.setMax(convertDnaIdxToDisplayIdx(refSeqRange.max(), options->seqType, 1, options->numFrames, FALSE, &refSeqRange, NULL));
+    }  
+}
+
+
+/* Create the main blixem window */
+GtkWidget* createBlxWindow(CommandLineOptions *options, 
+                           const char *paddingSeq, 
+                           GArray* featureLists[],
+                           GList *seqList, 
+                           GSList *supportedTypes,
+                           const gboolean External,
+                           GSList *styles)
+{
+  IntRange refSeqRange;
+  IntRange fullDisplayRange;
+  
+  calculateRefSeqRange(options, refSeqRange, fullDisplayRange);
+  
+  g_message("Reference sequence [%d - %d], display range [%d - %d]\n", 
+            refSeqRange.min(), refSeqRange.max(), fullDisplayRange.min(), fullDisplayRange.max());
+  
+  /* Offset the start coords, if applicable, and convert it to display coords */
+  int startCoord = options->startCoord + options->refSeqOffset;
+  if (options->seqType == BLXSEQ_PEPTIDE)
+    startCoord = convertDnaIdxToDisplayIdx(startCoord, options->seqType, 1, options->numFrames, FALSE, &refSeqRange, NULL);
+
+  if (options->bigPictRange.isSet())
+    {
+      /* Apply any offset */
+      options->bigPictRange.set(options->bigPictRange.min() + options->refSeqOffset,
+                                options->bigPictRange.max() + options->refSeqOffset);
+
+      /* Make sure the big picture range is not outside our ref seq range */
+      options->bigPictRange.boundsLimit(&refSeqRange, FALSE);
+
+      if (options->seqType == BLXSEQ_PEPTIDE)
+        {
+          /* Convert to peptide coords */
+          options->bigPictRange.setMin(convertDnaIdxToDisplayIdx(options->bigPictRange.min(), options->seqType, 1, options->numFrames, FALSE, &refSeqRange, NULL));
+          options->bigPictRange.setMax(convertDnaIdxToDisplayIdx(options->bigPictRange.max(), options->seqType, 1, options->numFrames, FALSE, &refSeqRange, NULL));
+        }
+    }
+  
+  
+  
+  /* Create the main blixem window */
+  GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+  setStyleProperties(window, options->windowColor);
+  setDragDropProperties(window);
+
+  /* Create a status bar */
+  GtkWidget *statusBar = gtk_statusbar_new();
+  gtk_statusbar_set_has_resize_grip(GTK_STATUSBAR(statusBar), TRUE);
+  setStatusBarShadowStyle(statusBar, "GTK_SHADOW_NONE");
+  
+  /* Set the window and statusbar in the message handler data, now that we know them */
+  options->msgData.parent = GTK_WINDOW(window);
+  options->msgData.statusBar = GTK_STATUSBAR(statusBar);
+  
+  /* Create a vertical box to pack everything in */
+  GtkWidget *vbox = gtk_vbox_new(FALSE, 0);
+  gtk_container_add(GTK_CONTAINER(window), vbox);
+  
+  /* Create the widgets. We need a single adjustment for the entire detail view, which will also be referenced
+   * by the big picture view, so create it first. */
+  GtkAdjustment *detailAdjustment = GTK_ADJUSTMENT(gtk_adjustment_new(0, /* initial value = 0 */
+                                                                      fullDisplayRange.min(), /* lower value */
+                                                                      fullDisplayRange.max(), /* upper value */
+                                                                      DEFAULT_SCROLL_STEP_INCREMENT, /* step increment used for mouse wheel scrolling */
+                                                                      0,   /* page increment dynamically set based on display range */
+                                                                      0)); /* page size dunamically set based on display range */
+  
+  BlxContext *blxContext = new BlxContext(options, 
+                                          &refSeqRange, 
+                                          &fullDisplayRange, 
+                                          paddingSeq, 
+                                          featureLists,
+                                          seqList, 
+                                          supportedTypes,
+                                          window, 
+                                          statusBar,
+                                          External,
+                                          styles);
+
+  /* Create the main menu */
+  GtkWidget *mainmenu = NULL;
+  GtkWidget *seqHeaderMenu = NULL;
+  GtkWidget *toolbar = NULL;
+  GtkActionGroup *actionGroup = NULL;
+  createMainMenu(window, blxContext, &mainmenu, &seqHeaderMenu, &toolbar, &actionGroup);
+  
+  const gdouble lowestId = calculateMspData(options->mspList, blxContext);
+  
+  GtkWidget *fwdStrandGrid = NULL, *revStrandGrid = NULL;
+
+  /* Create the two main sections - the big picture and detail view - in a paned window */
+  GtkWidget *panedWin = gtk_vpaned_new();
+  gtk_box_pack_start(GTK_BOX(vbox), panedWin, TRUE, TRUE, 0);
+  
+  GtkWidget *bigPicture = createBigPicture(window,
+                                           blxContext,
+                                           GTK_CONTAINER(panedWin),
+                                           &fwdStrandGrid, 
+                                           &revStrandGrid,
+                                           &options->bigPictRange,
+                                           &refSeqRange,
+                                           options->bigPictZoom,
+                                           lowestId);
+
+  GtkWidget *detailView = createDetailView(window,
+                                           blxContext,
+                                           GTK_CONTAINER(panedWin),
+                                           toolbar,
+					   detailAdjustment, 
+					   fwdStrandGrid, 
+					   revStrandGrid,
+					   options->mspList,
+                                           options->columnList,
+					   options->blastMode,
+					   options->seqType,
+					   options->numFrames,
+					   options->refSeqName,
+					   startCoord,
+					   options->sortInverted,
+					   options->initSortColumn,
+                                           options->optionalColumns,
+                                           options->windowColor);
+
+  
+  /* Create a custom scrollbar for scrolling the sequence column and put it at the bottom of the window */
+  GtkWidget *scrollBar = createDetailViewScrollBar(detailAdjustment, detailView);
+  gtk_box_pack_start(GTK_BOX(vbox), scrollBar, FALSE, TRUE, 0);
+
+  
+  /* Put the statusbar at the bottom */
+  gtk_box_pack_start(GTK_BOX(vbox), statusBar, FALSE, TRUE, 0);
+
+  
+  /* Set required data for the blixem window */
+  blxWindowCreateProperties(options,
+                            blxContext,
+                            window, 
+                            bigPicture, 
+                            detailView, 
+                            mainmenu,
+                            seqHeaderMenu,
+                            actionGroup,
+                            &refSeqRange, 
+                            &fullDisplayRange,
+                            paddingSeq);
+  
+  /* Connect signals */
+  g_signal_connect(G_OBJECT(panedWin), "button-press-event", G_CALLBACK(onButtonPressPanedWin), window);
+  g_signal_connect(G_OBJECT(window), "button-press-event", G_CALLBACK(onButtonPressBlxWindow), mainmenu);
+  g_signal_connect(G_OBJECT(window), "key-press-event", G_CALLBACK(onKeyPressBlxWindow), NULL);
+  
+  
+  const int numUnalignedBases = detailViewGetNumUnalignedBases(detailView);
+  cacheMspDisplayRanges(blxContext, numUnalignedBases);
+
+  /* Add the MSP's to the trees and sort them by the initial sort mode. This must
+   * be done after all widgets have been created, because it accesses their properties.*/
+  detailViewAddMspData(detailView, options->mspList, seqList);
+  detailViewUpdateMspLengths(detailView, numUnalignedBases);
+
+  /* Updated the cached display range and full extents of the MSPs */
+  if (blxContext)
+    blxContext->calculateDepth(numUnalignedBases);
+
+  updateCoverageDepth(window);
+  
+  /* Set the detail view font (again, this accesses the widgets' properties). */
+  updateDetailViewFontDesc(detailView);
+
+  /* Calculate the number of vertical cells in the grids (again, requires properties) */
+  calculateNumVCells(bigPicture);
+
+
+  /* Realise the widgets */
+  g_message_info("Starting %s\n", g_get_prgname());
+  gtk_widget_show_all(window);
+
+
+  /* If the options say to make the reverse strand the active strand, toggle the display now */
+  if (options->activeStrand == BLXSTRAND_REVERSE)
+    toggleStrand(detailView);
+
+  /* Hide the coverage view by default (unless told to display it) */
+  if (!options->coverageOn)
+    coverageSetHidden(window, TRUE);
+  
+  /* The trees use the normal model by default, so if we're starting in 
+   * 'squash matches' mode we need to change the model */
+  if (blxContext->modelId == BLXMODEL_SQUASHED)
+    {
+      callFuncOnAllDetailViewTrees(detailView, treeUpdateSquashMatches, NULL);
+      detailViewRedrawAll(detailView);
+    }
+  
+  /* If the options say to hide the inactive strand, hide it now. (This must be done
+   * after showing the widgets, or it will get shown again in show_all.). To do: we just
+   * hide the grid at the moment; hide the detail-view pane as well?  */
+  if (options->hideInactive && options->activeStrand == BLXSTRAND_FORWARD)
+    widgetSetHidden(revStrandGrid, TRUE);
+  else if (options->hideInactive && options->activeStrand == BLXSTRAND_REVERSE)
+    widgetSetHidden(fwdStrandGrid, TRUE);
+
+  if (!options->bigPictON)
+    widgetSetHidden(bigPicture, TRUE);
+
+  if (options->sortInverted)
+    {
+      blxContext->flags[BLXFLAG_INVERT_SORT] = TRUE;
+      detailViewUpdateSortInverted(detailView, options->sortInverted);
+    }
+  
+  /* Set the initial column widths. (This must be called after the widgets are 
+   * realised because it causes the scroll range to be updated, which in turn causes
+   * the big picture range to be set. The widgets must be realised before this because
+   * the initial big picture range depends on the detail view range, which is calculated
+   * from its window's width, and this will be incorrect if it has not been realised.) */
+  updateDynamicColumnWidths(detailView);
+  
+  /* Just once, at the start, update the visibility of all tree rows. (After this,
+   * filter updates will be done on affected rows only.) */
+  /* gb10: already done by updatemsplengths but still required at this point or matches
+   * do not display - look into whether we can remove the previous calls because refilter
+   * and resort are slow when there are many thousands of reads */
+  callFuncOnAllDetailViewTrees(detailView, refilterTree, NULL);
+  detailViewResortTrees(detailView);
+  
+  /* Calculate initial size of the exon views (depends on big picture range) */
+  calculateExonViewHeight(bigPictureGetFwdExonView(bigPicture));
+  calculateExonViewHeight(bigPictureGetRevExonView(bigPicture));
+  forceResize(bigPicture);
+
+  /* If the primary clipboard contains features, select them on startup */
+  requestPrimaryClipboardText(findSeqsFromClipboard, window);
+  
+  return window;
+}
diff --git a/blixemApp/blxwindow.hpp b/blixemApp/blxwindow.hpp
new file mode 100755
index 0000000..67797ad
--- /dev/null
+++ b/blixemApp/blxwindow.hpp
@@ -0,0 +1,121 @@
+/*  File: blxWindow.h
+ *  Author: Gemma Barson, 2009-11-24
+ *  Copyright (c) 2009 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: Creates the main Blixem window. Also creates a "context", 
+ *              which contains all of the variables associated with a Blixem
+ *              session. 
+ *
+ *              The context could live somewhere else, but was just included
+ *              here because there is one context for each Blixem window.
+ *              Ideally the context would be created earlier (perhaps in the
+ *              main function) but so far that has not been practical.
+ *----------------------------------------------------------------------------
+ */
+
+#ifndef _blxwindow_included_
+#define _blxwindow_included_
+
+#include <gtk/gtk.h>
+#include <blixemApp/blixem_.hpp>
+#include <seqtoolsUtils/utilities.hpp>
+
+
+/* Public function declarations */
+BlxContext*		  blxWindowGetContext(GtkWidget *widget);
+GList*                    blxWindowGetColumnList(GtkWidget *blxWindow);
+gboolean		  blxWindowGetDisplayRev(GtkWidget *blxWindow);
+GtkWidget*		  blxWindowGetBigPicture(GtkWidget *blxWindow);
+GtkWidget*		  blxWindowGetDetailView(GtkWidget *blxWindow);
+GtkWidget*                blxWindowGetBigPictureCoverageView(GtkWidget *blxWindow);
+GtkWidget*                blxWindowGetDetailViewCoverageView(GtkWidget *blxWindow);
+GtkWidget*		  blxWindowGetMainMenu(GtkWidget *blxWindow);
+GtkWidget*		  blxWindowGetSeqHeaderMenu(GtkWidget *blxWindow);
+BlxBlastMode		  blxWindowGetBlastMode(GtkWidget *blxWindow);
+IntRange*		  blxWindowGetFullRange(GtkWidget *blxWindow);
+IntRange*		  blxWindowGetRefSeqRange(GtkWidget *blxWindow);
+const char*		  blxWindowGetRefSeqName(GtkWidget *blxWindow);
+BlxSeqType		  blxWindowGetSeqType(GtkWidget *blxWindow);
+char**			  blxWindowGetGeneticCode(GtkWidget *blxWindow);
+char*			  blxWindowGetRefSeq(GtkWidget *blxWindow);
+int			  blxWindowGetNumFrames(GtkWidget *blxWindow);
+int			  blxWindowGetDotterStart(GtkWidget *blxWindow);
+int			  blxWindowGetDotterEnd(GtkWidget *blxWindow);
+int			  blxWindowGetDotterZoom(GtkWidget *blxWindow);
+MSP*			  blxWindowGetMspList(GtkWidget *blxWindow);
+GList*			  blxWindowGetAllMatchSeqs(GtkWidget *blxWindow);
+GList*			  blxWindowGetSequenceGroups(GtkWidget *blxWindow);
+SequenceGroup*		  blxWindowGetSequenceGroup(GtkWidget *blxWindow, const BlxSequence *seqToFind);
+const char*		  blxWindowGetPaddingSeq(GtkWidget *blxWindow);
+int			  blxWindowGetOffset(GtkWidget *blxWindow);
+BlxStrand		  blxWindowGetActiveStrand(GtkWidget *blxWindow);
+gboolean                  blxWindowGetNegateCoords(GtkWidget *blxWindow);
+
+GList*                    blxWindowGetSelectedSeqs(GtkWidget *blxWindow);
+GList*                    blxWindowGetSelectedSeqsByType(GtkWidget *blxWindow, const BlxSequenceType type);
+BlxSequence*              blxWindowGetSelectedTranscript(GtkWidget *blxWindow);
+void                      blxWindowSelectSeq(GtkWidget *blxWindow, BlxSequence *seq);
+void                      blxWindowSetSelectedSeqList(GtkWidget *blxWindow, GList *seqList);
+void                      blxWindowDeselectSeq(GtkWidget *blxWindow, BlxSequence *seq);
+void                      blxWindowDeselectAllSeqs(GtkWidget *blxWindow);
+gboolean                  blxWindowIsSeqSelected(GtkWidget *blxWindow, const BlxSequence *seq);
+void                      blxWindowSetSeqSelected(GtkWidget *blxWindow, BlxSequence *seq, const gboolean selected);
+void                      blxWindowSelectionChanged(GtkWidget *blxWindow);
+BlxSequence*              blxWindowGetLastSelectedSeq(GtkWidget *blxWindow);
+
+int                       sequenceGetGroupOrder(GtkWidget *blxWindow, const BlxSequence *seq);
+void                      copySelectionToClipboard(GtkWidget *blxWindow);
+void                      findSeqsFromClipboard(GtkClipboard *clipboard, const char *clipboardText, gpointer data);
+void                      findAndSelectSeqsFromClipboard(GtkClipboard *clipboard, const char *clipboardText, gpointer data);
+
+void                      refreshDialog(const BlxDialogId dialogId, GtkWidget *blxWindow);
+void                      showHelpDialog(GtkWidget *blxWindow, const gboolean bringToFront);
+void                      showSettingsDialog(GtkWidget *blxWindow, const gboolean bringToFront);
+void                      showSortDialog(GtkWidget *blxWindow, const gboolean bringToFront);
+void                      showViewPanesDialog(GtkWidget *blxWindow, const gboolean bringToFront);
+void                      showGroupsDialog(GtkWidget *blxWindow, const gboolean editGroups, const gboolean bringToFront);
+void                      showFindDialog(GtkWidget *blxWindow, const gboolean bringToFront);
+void                      showAboutDialog(GtkWidget *blxWindow);
+void                      showInfoDialog(GtkWidget *blxWindow);
+
+void                      blxWindowRedrawAll(GtkWidget *blxWindow);
+  
+GtkWidget*                createBlxWindow(CommandLineOptions *options, 
+                                          const char *paddingSeq, 
+                                          GArray* featureLists[], 
+                                          GList *seqList, 
+                                          GSList *supportedTypes,
+                                          const gboolean External,
+                                          GSList *styles);
+
+
+#endif /* _blxwindow_included_ */
diff --git a/blixemApp/coverageview.cpp b/blixemApp/coverageview.cpp
new file mode 100644
index 0000000..8f68b40
--- /dev/null
+++ b/blixemApp/coverageview.cpp
@@ -0,0 +1,716 @@
+/*  File: coverageview.c
+ *  Author: Gemma Barson, 2011-03-21
+ *  Copyright (c) 2011 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: This view shows a plot of the number of alignments at each
+ *              coordinate in the reference sequence.
+ *----------------------------------------------------------------------------
+ */
+
+#include "blixemApp/coverageview.hpp"
+#include "blixemApp/blxcontext.hpp"
+#include "blixemApp/blixem_.hpp"
+#include "blixemApp/blxpanel.hpp"
+#include <gtk/gtk.h>
+#include <math.h>
+
+/* We should remove references to the big picture and blxwindow here. The blxwindow is only used
+ * to get the big picture */
+#include "blixemApp/bigpicture.hpp"
+#include "blixemApp/blxwindow.hpp"
+
+
+#define DEFAULT_COVERAGE_VIEW_Y_PADDING		3	  /* this provides space between the drawing area and the edge of the widget */
+#define DEFAULT_NUM_V_CELLS			4	  /* number of vertical cells to show on the grid */
+#define MIN_LINE_WIDTH				0.5	  /* this provides space between the drawing area and the edge of the widget */
+#define COVERAGE_VIEW_NAME                      "CoverageView"
+
+
+
+/***********************************************************
+ *                    Class member functions               *
+ ***********************************************************/
+
+CoverageViewProperties::CoverageViewProperties(GtkWidget *widget_in, 
+                                               GtkWidget *blxWindow_in,
+                                               BlxContext *bc_in)
+{
+  m_widget = widget_in;
+  m_bc = bc_in;
+  m_panel = NULL;
+
+  m_blxWindow = blxWindow_in;
+
+  m_viewYPadding = DEFAULT_COVERAGE_VIEW_Y_PADDING;
+  m_numVCells = DEFAULT_NUM_V_CELLS;
+  m_rangePerCell = 0;
+  
+  if (bc_in)
+    m_maxDepth = &bc_in->maxDepth;
+}
+
+/* Get the coverage view widget */
+GtkWidget* CoverageViewProperties::widget()
+{
+  return m_widget;
+}
+
+/* Return the range of ref-seq coords that the coverage view currently displays */
+const IntRange* CoverageViewProperties::displayRange()
+{
+  const IntRange *result = NULL;
+  
+  // The range is the same as the parent panel
+  if (m_panel)
+    result = &m_panel->displayRange;
+
+  return result;
+}
+
+/* Return the range of ref-seq coords that should be highlighted in the highlight box, if any
+ * (returns NULL if not applicable) */
+const IntRange* CoverageViewProperties::highlightRange()
+{
+  const IntRange *result = NULL;
+
+  // The range is the same as the parent panel
+  if (m_panel)
+    result = m_panel->highlightRange();
+
+  return result;
+}
+
+/* Return the position of the left border. */
+double CoverageViewProperties::contentXPos() const
+{
+  double result = 0.0;
+
+  // Use the left border position of the parent panel
+  if (m_panel)
+    result = m_panel->contentXPos();
+
+  return result;
+}
+
+/* Return the position of the left border. */
+double CoverageViewProperties::contentWidth() const
+{
+  double result = 0.0;
+
+  // Use the left border position of the parent panel
+  if (m_panel)
+    result = m_panel->contentWidth();
+
+  return result;
+}
+
+
+/***********************************************************
+ *                       Properties                        *
+ ***********************************************************/
+
+CoverageViewProperties* coverageViewGetProperties(GtkWidget *widget)
+{
+  CoverageViewProperties *properties = NULL;
+
+  if (widget)
+    properties = (CoverageViewProperties*)(g_object_get_data(G_OBJECT(widget), "CoverageViewProperties"));
+  
+  return properties;
+}
+
+static void onDestroyCoverageView(GtkWidget *widget)
+{
+  CoverageViewProperties *properties = coverageViewGetProperties(widget);
+  
+  if (properties)
+    {
+      delete properties;
+      properties = NULL;
+      g_object_set_data(G_OBJECT(widget), "CoverageViewProperties", NULL);
+    }
+}
+
+static CoverageViewProperties* coverageViewCreateProperties(GtkWidget *widget, 
+                                                            GtkWidget *blxWindow,
+                                                            BlxContext *bc)
+{
+  CoverageViewProperties *properties = NULL;
+
+  if (widget)
+    { 
+      properties = new CoverageViewProperties(widget, blxWindow, bc);
+      
+      g_object_set_data(G_OBJECT(widget), "CoverageViewProperties", properties);
+      g_signal_connect(G_OBJECT(widget), "destroy", G_CALLBACK(onDestroyCoverageView), NULL); 
+    }
+
+  return properties;
+}
+
+
+/* Set the pointer to the parent panel that this coverage view belongs to */
+void CoverageViewProperties::setPanel(BlxPanel *panel)
+{
+  m_panel = panel;
+}
+
+
+/* This function should be called whenever the coverage depth data has changed */
+void CoverageViewProperties::updateDepth()
+{
+  /* Set up a list of 'nice' values to round to for displaying labels */
+  static GSList *roundValues = NULL;
+  
+  if (!roundValues)
+    {
+      roundValues = g_slist_prepend(roundValues, GINT_TO_POINTER(1));
+      roundValues = g_slist_prepend(roundValues, GINT_TO_POINTER(2));
+      roundValues = g_slist_prepend(roundValues, GINT_TO_POINTER(5));
+      roundValues = g_slist_prepend(roundValues, GINT_TO_POINTER(10));
+      roundValues = g_slist_prepend(roundValues, GINT_TO_POINTER(25));
+      roundValues = g_slist_prepend(roundValues, GINT_TO_POINTER(50));
+      roundValues = g_slist_prepend(roundValues, GINT_TO_POINTER(100));
+      roundValues = g_slist_prepend(roundValues, GINT_TO_POINTER(200));
+      roundValues = g_slist_prepend(roundValues, GINT_TO_POINTER(500));
+      roundValues = g_slist_prepend(roundValues, GINT_TO_POINTER(1000));
+      roundValues = g_slist_prepend(roundValues, GINT_TO_POINTER(2500));
+      roundValues = g_slist_prepend(roundValues, GINT_TO_POINTER(5000));
+      roundValues = g_slist_prepend(roundValues, GINT_TO_POINTER(10000));
+      roundValues = g_slist_prepend(roundValues, GINT_TO_POINTER(25000));
+      roundValues = g_slist_prepend(roundValues, GINT_TO_POINTER(50000));
+      roundValues = g_slist_prepend(roundValues, GINT_TO_POINTER(100000));
+      roundValues = g_slist_prepend(roundValues, GINT_TO_POINTER(250000));
+      roundValues = g_slist_prepend(roundValues, GINT_TO_POINTER(500000));
+      roundValues = g_slist_prepend(roundValues, GINT_TO_POINTER(1000000));
+      roundValues = g_slist_prepend(roundValues, GINT_TO_POINTER(2500000));
+      roundValues = g_slist_prepend(roundValues, GINT_TO_POINTER(5000000));
+      roundValues = g_slist_prepend(roundValues, GINT_TO_POINTER(10000000));
+      roundValues = g_slist_prepend(roundValues, GINT_TO_POINTER(25000000));
+      roundValues = g_slist_prepend(roundValues, GINT_TO_POINTER(50000000));
+      roundValues = g_slist_prepend(roundValues, GINT_TO_POINTER(100000000));
+      roundValues = g_slist_prepend(roundValues, GINT_TO_POINTER(250000000));
+      roundValues = g_slist_prepend(roundValues, GINT_TO_POINTER(500000000));
+    }
+
+  if (!m_rangePerCell)
+    {
+      /* First time round, calculate the range per cell, aiming for 
+       * around 5 cells. (If we enter this function again, it's because the
+       * user has manually entered the range per cell so we just need to calculate
+       * the relevant number of cells) */
+      m_numVCells = 5;
+      m_rangePerCell = ceil((gdouble)*m_maxDepth / (gdouble)m_numVCells);
+
+      /* Round the result and recalculate the number of cells */
+      m_rangePerCell = roundUpToValueFromList(m_rangePerCell, roundValues, NULL);
+      
+      if (m_rangePerCell < 1)
+        m_rangePerCell = 1;
+    }
+  
+  m_numVCells = (gdouble)*m_maxDepth / m_rangePerCell;
+  
+  recalculate();
+}
+
+double CoverageViewProperties::depthPerCell()
+{
+  return m_rangePerCell;
+}
+
+gboolean CoverageViewProperties::setDepthPerCell(const double depthPerCell_in)
+{
+  if (depthPerCell_in <= 0.0)
+    return FALSE;
+  
+  m_rangePerCell = depthPerCell_in;
+  updateDepth();
+
+  return TRUE;
+}
+
+/***********************************************************
+ *                         Drawing                         *
+ ***********************************************************/
+
+/* Clear the cached drawable and re-draw the coverage view */
+void CoverageViewProperties::redraw()
+{
+  widgetClearCachedDrawable(m_widget, NULL);
+  gtk_widget_queue_draw(m_widget);
+}
+
+
+/* Recalculate the size of the coverage view widget and redraw */
+void CoverageViewProperties::recalculate()
+{
+  calculateBorders();
+  redraw();
+}
+
+
+/* Draw a single bar of the coverage bar graph */
+static void drawCoverageBar(const double x1,
+			    const double x2,
+			    double y1,
+			    const double y2,
+			    cairo_t *cr)
+{
+  double height = y2 - y1;
+  double width = x2 - x1;
+
+  if (height <= MIN_LINE_WIDTH)
+    {
+      height = MIN_LINE_WIDTH;
+      y1 = y2 - height;
+    }
+  
+  if (width <= 0)
+    return;
+  
+  cairo_rectangle(cr, x1 - MIN_LINE_WIDTH, y1, width + (2 * MIN_LINE_WIDTH), height);
+  cairo_fill(cr);
+}
+
+
+/* Utility to get the max depth that the coverage view shows, based on 
+ * the number of cells and the range per cell. Note that this returns the
+ * max lable value, i.e. the value of the top gridline; the real max
+ * depth may be slightly greater than this, and may extend above the top
+ * gridline (the height of the widget is made big enough to accommodate this). */
+int CoverageViewProperties::maxLabeledDepth()
+{
+  /* to do: ideally we would round numcells to the nearest int rather than
+   * truncating, but there is a bug with that where the horizontal grid lines
+   * are sometimes not drawn with the correct labels */
+  int numCells = (int)(m_numVCells);
+  const int result = m_rangePerCell * numCells;
+  return result;
+}
+
+
+double CoverageViewProperties::charWidth() const
+{
+  double result = 0.0;
+
+  if (m_bc)
+    result = m_bc->charWidth();
+
+  return result;
+}
+
+
+/* Draw the actual coverage data as a bar chart */
+void CoverageViewProperties::drawPlot(GdkDrawable *drawable)
+{
+  const IntRange *dispRange = displayRange();
+  g_return_if_fail(m_bc && m_bc->maxDepth > 0 && dispRange);
+
+  cairo_t *cr = gdk_cairo_create(drawable);
+
+  const GdkColor *color = getGdkColor(BLXCOLOR_COVERAGE_PLOT, m_bc->defaultColors, FALSE, m_bc->usePrintColors);
+  gdk_cairo_set_source_color(cr, color);
+  
+  const double pixelsPerVal = (double)m_viewRect.height / (double)*m_maxDepth;
+  const int bottomBorder = m_viewRect.y + m_viewRect.height;
+  
+  /* Loop through each coord in the display range */
+  
+  double startX = -1.0;
+  double prevX = -1.0;
+  double prevY = -1.0;
+  int coord = dispRange->min();
+  
+  for ( ; coord <= dispRange->max(); ++coord)
+    {
+      /* Get the x position for this coord (always pass displayRev as false because
+       * display coords are already inverted if the display is reversed). */
+      const double x = convertBaseIdxToRectPos(coord, &m_viewRect, dispRange, TRUE, FALSE, TRUE);
+      const int depth = m_bc->getDepth(coord);
+
+      /* Calculate the y position based on the depth */
+      const double height = (pixelsPerVal * (double)depth);
+      const double y = (double)bottomBorder - height;
+
+      /* First time round, don't draw the line - just get the starting x and y.
+       * Also, don't draw the line if y is the same as prevY; drawing is quite
+       * expensive, so if we have multiple y values that are the same we remember
+       * the first x coord at this y value and draw from there all in one go. */
+      if (prevX == -1.0 && prevY == -1.0)
+        {
+          startX = x;
+        }
+      else if (y != prevY || coord == dispRange->max())
+        {
+          /* If we had multiple positions where y was the same, draw a horizontal
+           * line at that y position. If there was only one position at the previous y value then
+           * this will draw a single column in the bar chart (i.e. startX==prevX). */
+          drawCoverageBar(startX, x, prevY, bottomBorder, cr);
+          
+          /* If it's the last coord, also draw the current column, because there won't be another
+           * loop to take care of this */
+          if (coord == dispRange->max())
+            {
+              const int endX = convertBaseIdxToRectPos(coord + 1, &m_viewRect, dispRange, TRUE, FALSE, TRUE);
+              drawCoverageBar(x, endX, y, bottomBorder, cr);
+            }
+
+          /* Reset the starting point */
+          startX = x;
+        }
+
+      prevX = x;
+      prevY = y;
+    }
+  
+  cairo_destroy(cr);
+}
+
+
+/* Main function for drawing the coverage view */
+void CoverageViewProperties::draw(GdkDrawable *drawable)
+{
+  /* We should move the gridlines functions to BlxPanel so that we can remove references to
+   * bigpicture here */
+  GtkWidget *bigPicture = blxWindowGetBigPicture(m_blxWindow);
+  BigPictureProperties *bpProperties = bigPictureGetProperties(bigPicture);
+
+  drawVerticalGridLines(&m_viewRect, &m_highlightRect, 
+			m_viewYPadding, m_bc, bpProperties, drawable);
+  
+  drawHorizontalGridLines(m_widget, bigPicture, &m_viewRect, m_bc, bpProperties, drawable,
+			  (int)(m_numVCells), m_rangePerCell, (gdouble)*m_maxDepth, TRUE, "");
+  
+  drawPlot(drawable);
+}
+
+
+/* Calculate the borders of the highlight box (the shaded area that indicates the
+ * selection range). (This is just a convenience way to call calculateHighlightBoxBorders
+ * from an external function.) */
+void CoverageViewProperties::calculateHighlightBoxBorders()
+{  
+  if (m_bc)
+    {
+      m_bc->highlightBoxCalcBorders(&m_displayRect, &m_highlightRect, 
+                                    displayRange(), highlightRange(),
+                                    0);
+    }
+}
+
+
+/* Calculate the borders of the view */
+void CoverageViewProperties::calculateBorders()
+{
+  /* We should move cell height to BlxPanel so that we can get rid of references to big picture here */
+  GtkWidget *bigPicture = blxWindowGetBigPicture(m_blxWindow);
+  
+  /* Calculate the height based on the number of cells */
+  const int height = ceil(m_numVCells * (double)bigPictureGetCellHeight(bigPicture));
+  const int gridHeight = (int)m_numVCells * bigPictureGetCellHeight(bigPicture);
+  
+  m_displayRect.x = roundNearest(contentXPos());
+  m_displayRect.y = height - gridHeight;
+  
+  m_viewRect.x = m_displayRect.x;
+  m_viewRect.y = m_displayRect.y + HIGHLIGHT_BOX_Y_PAD + DEFAULT_COVERAGE_VIEW_Y_PADDING;
+
+  m_displayRect.width = contentWidth();
+  m_displayRect.height = height + 2 * (HIGHLIGHT_BOX_Y_PAD + DEFAULT_COVERAGE_VIEW_Y_PADDING);
+
+  /* If the width isn't set (e.g. we don't have a parent panel) then use the allocation width */
+  if (m_displayRect.width == 0.0)
+    m_displayRect.width = m_widget->allocation.width - m_viewRect.x;
+
+  m_viewRect.width = m_displayRect.width;
+  m_viewRect.height = gridHeight;
+  
+  /* Get the boundaries of the highlight box */
+  calculateHighlightBoxBorders();
+  
+  /* Set the size request to our desired height. We want a fixed heigh but don't set the
+   * width, because we want the user to be able to resize that. */
+  gtk_widget_set_size_request(m_widget, 0, m_displayRect.height);
+}
+
+
+/* Prepare the coverage view for printing (draws the transient hightlight box
+ * onto the cached drawable). */
+void CoverageViewProperties::prepareForPrinting()
+{
+  GdkDrawable *drawable = widgetGetDrawable(m_widget);
+  
+  if (drawable)
+    {
+      GdkColor *highlightBoxColor = getGdkColor(BLXCOLOR_HIGHLIGHT_BOX, m_bc->defaultColors, FALSE, m_bc->usePrintColors);
+      drawHighlightBox(drawable, &m_highlightRect, HIGHLIGHT_BOX_MIN_WIDTH, highlightBoxColor);
+    }
+}
+
+
+/***********************************************************
+ *                         Events                          *
+ ***********************************************************/
+
+/* Expose handler. */
+static gboolean onExposeCoverageView(GtkWidget *coverageView, GdkEventExpose *event, gpointer data)
+{
+  gboolean result = TRUE;
+  CoverageViewProperties *properties = coverageViewGetProperties(coverageView);
+
+  if (properties)
+    result = properties->expose(event, data);
+
+  return result;
+}
+
+
+gboolean CoverageViewProperties::expose(GdkEventExpose *event, gpointer data)
+{
+  gboolean result = TRUE;
+
+  GdkDrawable *window = GTK_LAYOUT(m_widget)->bin_window;
+  
+  if (window)
+    {
+      GdkDrawable *bitmap = widgetGetDrawable(m_widget);
+
+      if (!bitmap)
+        {
+          /* There isn't a bitmap yet. Create it now. */
+	  bitmap = createBlankPixmap(m_widget);
+          draw(bitmap);
+        }
+      
+      if (bitmap)
+        {
+          /* Push the bitmap onto the window */
+          GdkGC *gc = gdk_gc_new(window);
+          gdk_draw_drawable(window, gc, bitmap, 0, 0, 0, 0, -1, -1);
+          g_object_unref(gc);
+          
+          /* Draw the highlight box on top of it */
+          GdkColor *highlightBoxColor = getGdkColor(BLXCOLOR_HIGHLIGHT_BOX, m_bc->defaultColors, FALSE, m_bc->usePrintColors);
+          drawHighlightBox(window, &m_highlightRect, HIGHLIGHT_BOX_MIN_WIDTH, highlightBoxColor);
+          
+          /* Draw the preview box too, if set */
+          if (m_panel)
+            m_panel->drawPreviewBox(window, &m_viewRect, &m_highlightRect);
+        }
+      else
+	{
+	  g_warning("Failed to draw coverageView [%p] - could not create bitmap.\n", m_widget);
+	}
+    }
+  
+  return result;
+}
+
+
+static void onSizeAllocateCoverageView(GtkWidget *coverageView, GtkAllocation *allocation, gpointer data)\
+{
+  CoverageViewProperties *coverageViewP = coverageViewGetProperties(coverageView);
+
+  if (coverageViewP)
+    coverageViewP->calculateBorders();
+}
+
+
+static gboolean onButtonPressCoverageView(GtkWidget *coverageView, GdkEventButton *event, gpointer data)
+{
+  gboolean handled = FALSE;
+
+  CoverageViewProperties *properties = coverageViewGetProperties(coverageView);
+
+  if (properties)
+    handled = properties->buttonPress(event, data);
+
+  return handled;
+}
+
+  
+gboolean CoverageViewProperties::buttonPress(GdkEventButton *event, gpointer data)
+{
+  gboolean handled = FALSE;
+  
+  if (event->button == 2 ||
+      (event->button == 1 && !handled && 
+       (event->type == GDK_2BUTTON_PRESS || 
+        clickedInRect(event, &m_highlightRect, HIGHLIGHT_BOX_MIN_WIDTH))))
+    {
+      /* Draw the preview box (draw it on the other big picture components as well) */
+      int x = event->x;
+      
+      if (event->button == 1 && event->type == GDK_BUTTON_PRESS)
+        x = m_highlightRect.x + m_highlightRect.width / 2;
+      
+      if (m_panel)
+        m_panel->startPreviewBox(event->x, TRUE, x - event->x);
+
+      handled = TRUE;
+    }
+  
+  return handled;
+}
+
+
+static gboolean onButtonReleaseCoverageView(GtkWidget *coverageView, GdkEventButton *event, gpointer data)
+{
+  gboolean handled = FALSE;
+  CoverageViewProperties *properties = coverageViewGetProperties(coverageView);
+
+  if (properties)
+    handled = properties->buttonRelease(event, data);
+
+  return handled;
+}
+
+gboolean CoverageViewProperties::buttonRelease(GdkEventButton *event, gpointer data)
+{
+  if (event->button == 1 || event->button == 2) /* left or middle button */
+    {
+      if (m_panel)
+        m_panel->finishPreviewBox(event->x, &m_viewRect, &m_highlightRect);
+    }
+  
+  return TRUE;
+}
+  
+
+
+/* Implement custom scrolling for horizontal mouse wheel movements over the coverageView.
+ * This scrolls the position of the highlight box, i.e. it scrolls the display
+ * range in the detail view. */
+static gboolean onScrollCoverageView(GtkWidget *coverageView, GdkEventScroll *event, gpointer data)
+{
+  gboolean handled = FALSE;
+  CoverageViewProperties *properties = coverageViewGetProperties(coverageView);
+
+  if (properties)
+    handled = properties->scroll(event, data);
+
+  return handled;
+}
+
+
+gboolean CoverageViewProperties::scroll(GdkEventScroll *event, gpointer data)
+{  
+  gboolean handled = FALSE;
+
+  /* We should make the scroll functions here virtual functions that can be called from the base
+   * class BlxPanel. Then we can get rid of references to bigpicture */
+
+  switch (event->direction)
+  {
+    case GDK_SCROLL_LEFT:
+    {
+      scrollBigPictureLeftStep(blxWindowGetBigPicture(m_blxWindow));
+      handled = TRUE;
+      break;
+    }
+      
+    case GDK_SCROLL_RIGHT:
+    {
+      scrollBigPictureRightStep(blxWindowGetBigPicture(m_blxWindow));
+      handled = TRUE;
+      break;
+    }
+      
+    default:
+    {
+      handled = FALSE;
+      break;
+    }
+  };
+  
+  return handled;
+}
+
+
+gboolean CoverageViewProperties::mouseMove(GdkEventMotion *event, gpointer data)
+{
+  if ((event->state & GDK_BUTTON1_MASK) || /* left or middle button */
+       (event->state & GDK_BUTTON2_MASK))
+    {
+      /* Draw a preview box at the mouse pointer location */
+      if (m_panel)
+        m_panel->startPreviewBox(event->x, FALSE, 0);
+    }
+  
+  return TRUE;
+}
+
+static gboolean onMouseMoveCoverageView(GtkWidget *coverageView, GdkEventMotion *event, gpointer data)
+{
+  gboolean handled = FALSE;
+  CoverageViewProperties *properties = coverageViewGetProperties(coverageView);
+
+  if (properties)
+    handled = properties->mouseMove(event, data);
+
+  return handled;
+}
+
+
+
+/***********************************************************
+ *                     Initialisation                      *
+ ***********************************************************/
+
+CoverageViewProperties* createCoverageView(GtkWidget *blxWindow, 
+                                           BlxContext *bc)
+{
+  GtkWidget *coverageView = gtk_layout_new(NULL, NULL);
+
+  /* Style properties */
+  gtk_widget_set_redraw_on_allocate(coverageView, FALSE);
+  gtk_widget_set_name(coverageView, COVERAGE_VIEW_NAME);
+
+  /* Connect signals */
+  gtk_widget_add_events(coverageView, GDK_BUTTON_PRESS_MASK);
+  gtk_widget_add_events(coverageView, GDK_BUTTON_RELEASE_MASK);
+  gtk_widget_add_events(coverageView, GDK_POINTER_MOTION_MASK);
+  
+  g_signal_connect(G_OBJECT(coverageView), "expose-event",          G_CALLBACK(onExposeCoverageView),                 NULL);  
+  g_signal_connect(G_OBJECT(coverageView), "size-allocate",	    G_CALLBACK(onSizeAllocateCoverageView),           NULL);
+  g_signal_connect(G_OBJECT(coverageView), "button-press-event",    G_CALLBACK(onButtonPressCoverageView),	      NULL);
+  g_signal_connect(G_OBJECT(coverageView), "button-release-event",  G_CALLBACK(onButtonReleaseCoverageView),	      NULL);
+  g_signal_connect(G_OBJECT(coverageView), "motion-notify-event",   G_CALLBACK(onMouseMoveCoverageView),	      NULL);
+  g_signal_connect(G_OBJECT(coverageView), "scroll-event",	    G_CALLBACK(onScrollCoverageView),                 NULL);
+
+  /* Set required data in the coverageView. */
+  CoverageViewProperties *cvProperties = coverageViewCreateProperties(coverageView, blxWindow, bc);
+  
+  return cvProperties;
+}
+
diff --git a/blixemApp/coverageview.hpp b/blixemApp/coverageview.hpp
new file mode 100644
index 0000000..0f3e4f8
--- /dev/null
+++ b/blixemApp/coverageview.hpp
@@ -0,0 +1,114 @@
+/*  File: coverageview.h
+ *  Author: Gemma Barson, 2011-03-21
+ *  Copyright (c) 2011 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: This view shows a plot of the number of alignments at each
+ *              coordinate in the reference sequence.
+ *----------------------------------------------------------------------------
+ */
+ 
+#ifndef _coverage_view_h_included_
+#define _coverage_view_h_included_
+
+#include "blixemApp/blixem_.hpp"
+#include <gtk/gtk.h>
+
+
+class BlxPanel;
+
+
+
+class CoverageViewProperties
+{
+public:
+  CoverageViewProperties(GtkWidget *widget_in, 
+                         GtkWidget *blxWindow_in, 
+                         BlxContext *bc);
+
+  /* Access */
+  GtkWidget* widget();
+  const IntRange *displayRange();
+  const IntRange *highlightRange();
+  double contentXPos() const;
+  double contentWidth() const;
+  double depthPerCell();
+  int maxLabeledDepth();
+
+  /* Modify */
+  gboolean setDepthPerCell(const double depthPerCell);
+
+  /* Events */
+  gboolean expose(GdkEventExpose *event, gpointer data);
+  gboolean buttonPress(GdkEventButton *event, gpointer data);
+  gboolean buttonRelease(GdkEventButton *event, gpointer data);
+  gboolean mouseMove(GdkEventMotion *event, gpointer data);
+  gboolean scroll(GdkEventScroll *event, gpointer data);
+
+  /* Updates */
+  void setPanel(BlxPanel *panel);
+  void updateDepth();
+  void calculateBorders();
+  void calculateHighlightBoxBorders();
+
+  /* Drawing */
+  void draw(GdkDrawable *drawable);
+  void redraw();
+  void prepareForPrinting();
+
+private:
+  double charWidth() const;
+  void drawPlot(GdkDrawable *drawable);
+  void recalculate();
+
+  GtkWidget *m_widget;      /* The coverage view widget */
+  BlxContext *m_bc;
+  BlxPanel *m_panel;        /* The parent panel that the coverage view is part of */
+
+  GtkWidget *m_blxWindow;   /* The main blixem window */
+
+  int m_viewYPadding;	     /* The y padding around the view rect */
+  double m_numVCells;	     /* The number of cells to show vertically */
+  gdouble m_rangePerCell;    /* The range of depth values shown per grid cell on the plot */
+    
+  GdkRectangle m_viewRect;   /* The rectangle we draw in */
+  GdkRectangle m_displayRect; /* The total display area */
+  GdkRectangle m_highlightRect; /* The area that is highlighted (which indicates the detail-view
+                                 range) */
+
+  int *m_maxDepth;
+};
+
+
+CoverageViewProperties*     createCoverageView(GtkWidget *blxWindow, BlxContext *bc);
+
+
+#endif /* _coverage_view_h_included_ */
diff --git a/blixemApp/detailview.cpp b/blixemApp/detailview.cpp
new file mode 100755
index 0000000..b03cfc6
--- /dev/null
+++ b/blixemApp/detailview.cpp
@@ -0,0 +1,6535 @@
+/*  File: detailview.c
+ *  Author: Gemma Barson, 2009-11-23
+ *  Copyright (c) 2009 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: See detailview.h
+ *----------------------------------------------------------------------------
+ */
+
+#include <blixemApp/blixem_.hpp>
+#include <blixemApp/blxcontext.hpp>
+#include <blixemApp/detailview.hpp>
+#include <blixemApp/detailviewtree.hpp>
+#include <blixemApp/blxwindow.hpp>
+#include <blixemApp/bigpicture.hpp>
+#include <blixemApp/exonview.hpp>
+#include <seqtoolsUtils/utilities.hpp>
+#include <seqtoolsUtils/blxmsp.hpp>
+#include <blixemApp/coverageview.hpp>
+#include <gtk/gtk.h>
+#include <string.h>
+#include <stdlib.h>
+#include <math.h>
+#include <algorithm>
+#include <string>
+#include <sstream>
+
+
+using namespace std;
+
+
+#define DETAIL_VIEW_TOOLBAR_NAME        "DetailViewToolbarName"
+#define DETAIL_VIEW_WIDGET_NAME         "DetailViewWidget"
+#define DETAIL_VIEW_FEEDBACK_REF_COORD  "DetailViewFeedbackRefCoord"
+#define DETAIL_VIEW_FEEDBACK_MATCH_COORD "DetailViewFeedbackMatchCoord"
+#define DETAIL_VIEW_FEEDBACK_MATCH_NAME "DetailViewFeedbackMatchName"
+#define DETAIL_VIEW_FEEDBACK_MATCH_LEN  "DetailViewFeedbackMatchLen"
+#define DETAIL_VIEW_FEEDBACK_DEPTH      "DetailViewFeedbackDepth"
+#define DETAIL_VIEW_FEEDBACK_DEPTH_TOOLTIP "Read depth at selected coord(s) for active strand"
+#define DETAIL_VIEW_FEEDBACK_MATCH_NAME_TOOLTIP "Selected feature name"
+#define DETAIL_VIEW_FEEDBACK_MIN_WIDTH  2
+#define DETAIL_VIEW_FEEDBACK_MAX_WIDTH  30
+#define SORT_BY_NAME_STRING             "Name"
+#define SORT_BY_SCORE_STRING            "Score"
+#define SORT_BY_ID_STRING               "Identity"
+#define SORT_BY_POS_STRING              "Position"
+#define SORT_BY_GROUP_ORDER_STRING      "Group"
+#define FONT_INCREMENT_SIZE             1
+#define NO_SUBJECT_SELECTED_TEXT        "<no subject selected>"
+#define MULTIPLE_SUBJECTS_SELECTED_TEXT "<multiple subjects selected>"
+#define MULTIPLE_VARIATIONS_TEXT        "<multiple variations>"
+#define MULTIPLE_POLYA_SIGNALS_TEXT     "<multiple polyA signals>"
+#define MULTIPLE_POLYA_SITES_TEXT       "<multiple polyA sites>"
+#define DEFAULT_SNP_CONNECTOR_HEIGHT    0
+#define DEFAULT_NUM_UNALIGNED_BASES     5     /* the default number of additional bases to show if displaying unaligned parts of the match sequence */
+#define POLYA_SIG_BASES_UPSTREAM        50    /* the number of bases upstream from a polyA tail to search for polyA signals */
+#define POLYA_SIGNAL                    "aataaa"
+
+#define SETTING_NAME_NUM_UNALIGNED_BASES "num-unaligned-bases"
+
+
+typedef struct 
+{
+  const int startDnaIdx;              /* the DNA coord to start searching from */
+  const gboolean searchRight;         /* search towards the right or left */
+  const int searchDirection;          /* multiplier to add/subtract depending on whether searching right/left */
+  const gboolean displayRev;          /* true if the display is reversed */
+  const BlxSeqType seqType;           /* whether viewing DNA or peptide seqs */
+  const int numFrames;                /* number of reading frames */
+  const IntRange* const refSeqRange;  /* the full range of the reference sequence */
+  GList *seqList;                     /* only search matches in these sequences */
+
+  int offset;                         /* the offset of the found MSP */
+  int foundFrame;                     /* which ref seq frame the MSP we chose is in */
+  MSP *foundMsp;                      /* the found msp */
+} MatchSearchData;
+
+
+/* We need to store some info about the paned window for the SNP track so that we can cache and
+ * reinstate the splitter position when the user toggles the display off and on again. */
+class PanedWindowProperties
+{
+public:
+  GtkWidget *widget; /* the paned window */
+  int splitterPos; /* -1 for unset. If >=0 then it is a cached position ready for re-instating */
+};
+
+
+/* Utility struct to pass data to a recursive function */
+typedef struct _RecursiveFuncData
+{
+  const char *widgetName;   /* the name of widgets that the function will be called on */
+  GtkCallback callbackFunc; /* the function to call */
+  gpointer callbackData;    /* user data to pass to the function */
+} RecursiveFuncData;
+
+
+/* Local function declarations */
+static BlxContext*        detailViewGetContext(GtkWidget *detailView);
+static GtkWidget*             detailViewGetBigPicture(GtkWidget *detailView);
+static GtkWidget*             detailViewGetFeedbackBox(GtkWidget *detailView);
+static int                    detailViewGetSnpConnectorHeight(GtkWidget *detailView);
+static void                   refreshDetailViewHeaders(GtkWidget *detailView);
+
+static void                   panedWindowCreateProperties(GtkWidget *widget, const int splitterPos);
+static PanedWindowProperties* panedWindowGetProperties(GtkWidget *widget);
+static void                   onDestroyPanedWindow(GtkWidget *widget);
+static void                   snpTrackSetStrand(GtkWidget *snpTrack, const BlxStrand strand);
+static BlxStrand              snpTrackGetStrand(GtkWidget *snpTrack, GtkWidget *detailView);
+static void                   snpTrackSetHeight(GtkWidget *detailView, GtkWidget *snpTrack);
+static void                   getVariationDisplayRange(const MSP *msp, const gboolean expand, const BlxSeqType seqType, const int numFrames, const gboolean displayRev, const int activeFrame, const IntRange* const refSeqRange, IntRange *displayRange, IntRange *expandedRange);
+static void                   recalculateSnpTrackBorders(GtkWidget *snpTrack, gpointer data);
+
+static gboolean               widgetIsTree(GtkWidget *widget);
+static gboolean               widgetIsTreeContainer(GtkWidget *widget);
+static void                   updateCellRendererFont(GtkWidget *detailView, PangoFontDescription *fontDesc);
+static void                   setDetailViewScrollPos(GtkAdjustment *adjustment, int value);
+static const char*            spliceSiteGetBases(const BlxSpliceSite *spliceSite, const gboolean donor, const gboolean reverse, const gboolean revcomp);
+static int                    getNumSnpTrackRows(const BlxContext *bc, DetailViewProperties *properties, const BlxStrand strand, const int frame);
+static int                    getVariationRowNumber(const IntRange* const rangeIn, const int numRows, GSList **rows);
+static void                   freeRowsList(GSList *rows);
+
+static gboolean               coordAffectedByVariation(const int dnaIdx,
+                                                       const BlxStrand strand, 
+                                                       BlxContext *bc,
+                                                       const MSP **msp,
+                                                       gboolean *drawStartBoundary, 
+                                                       gboolean *drawEndBoundary, 
+                                                       gboolean *drawJoiningLines, 
+                                                       gboolean *drawBackground,
+                                                       gboolean *multipleVariations);
+
+static gboolean               coordAffectedByPolyASignal(const int dnaIdx,
+                                                         const BlxStrand strand, 
+                                                         BlxContext *bc,
+                                                         const MSP **mspOut,
+                                                         gboolean *multipleVariations);
+
+static gboolean                coordAffectedByPolyASite(const int dnaIdx,
+                                                        const BlxStrand strand, 
+                                                        BlxContext *bc,
+                                                        const MSP **mspOut,
+                                                        gboolean *multipleVariations);
+
+static GtkWidget*              detailViewContainerGetParentWidget(GtkContainer *container, GtkWidget *search_child, const char *parent_name);
+static gboolean                detailViewContainerIsParent(GtkContainer *container, GtkWidget *search_child);
+
+static void                    detailViewRefreshSelection(GtkWidget *detailView);
+
+static void                    setDetailViewIndex(DetailViewIndex *index, 
+                                                  const gboolean isSet, 
+                                                  const int dnaIdx,
+                                                  const int displayIdx,
+                                                  const int frame,
+                                                  const int baseNum);
+
+static void                    addBlxSpliceSite(GSList **spliceSites, const char *donorSite, const char *acceptorSite, const gboolean bothReqd) ;
+
+static void                    destroyBlxSpliceSite(gpointer listItemData, gpointer data);
+
+/***********************************************************
+ *                 Class member functions                  *
+ ***********************************************************/
+
+DetailViewProperties::DetailViewProperties(GtkWidget *detailView_in,
+                                           GtkWidget *blxWindow_in,
+                                           BlxContext *bc_in,
+                                           CoverageViewProperties *coverageViewP_in, 
+                                           GtkCellRenderer *renderer_in,
+                                           GList *fwdStrandTrees_in,
+                                           GList *revStrandTrees_in,
+                                           GtkWidget *feedbackBox_in,
+                                           GtkWidget *statusBar_in,
+                                           GList *columnList_in,
+                                           GtkAdjustment *adjustment_in, 
+                                           const int startCoord_in,
+                                           const BlxColumnId sortColumn_in) :
+  BlxPanel(detailView_in, blxWindow_in, bc_in, coverageViewP_in, 0)
+{
+  /* Find a fixed-width font */
+  const char *fontFamily = findFixedWidthFont(detailView_in);
+  PangoFontDescription *fontDesc_in = pango_font_description_from_string(fontFamily);
+  pango_font_description_set_size(fontDesc_in, pango_font_description_get_size(detailView_in->style->font_desc));
+
+  renderer = renderer_in;
+  fwdStrandTrees = fwdStrandTrees_in;
+  revStrandTrees = revStrandTrees_in;
+  feedbackBox = feedbackBox_in;
+  statusBar = statusBar_in;
+  adjustment = adjustment_in;
+  fontDesc = fontDesc_in;
+  snpConnectorHeight = DEFAULT_SNP_CONNECTOR_HEIGHT;
+  numUnalignedBases = DEFAULT_NUM_UNALIGNED_BASES;
+
+  selectedIndex = NULL;
+  setDetailViewIndex(&selectedRangeInit, FALSE, UNSET_INT, UNSET_INT, UNSET_INT, UNSET_INT);
+  setDetailViewIndex(&selectedRangeStart, FALSE, UNSET_INT, UNSET_INT, UNSET_INT, UNSET_INT);
+  setDetailViewIndex(&selectedRangeEnd, FALSE, UNSET_INT, UNSET_INT, UNSET_INT, UNSET_INT);
+      
+  /* The numunalignedbases may be set in the config file; if so, override the default */
+  GKeyFile *key_file = blxGetConfig();
+  if (key_file)
+    {
+      GError *error = NULL;
+      int numUnaligned = g_key_file_get_integer(key_file, SETTINGS_GROUP, SETTING_NAME_NUM_UNALIGNED_BASES, &error);
+          
+      if (!error) /* we don't care if it wasn't found */
+        numUnalignedBases = numUnaligned;
+    }
+
+  /* Add the splice sites that we want Blixem to identify as canonical */
+  spliceSites = NULL;
+  addBlxSpliceSite(&spliceSites, "GT", "AG", FALSE);
+  addBlxSpliceSite(&spliceSites, "GC", "AG", FALSE);
+  addBlxSpliceSite(&spliceSites, "AT", "AC", TRUE);
+
+  /* We don't know the display range yet, so set an arbitrary range centred
+   * on the start coord. Set the adjustment value to be unset so that we know
+   * we need to calculated it first time round. */
+  adjustment->value = UNSET_INT;
+  displayRange.set(startCoord_in - 1, startCoord_in + 1);
+
+  /* Find the padding between the background area of the tree cells and the actual
+   * drawing area. This is used to render the full height of the background area, so
+   * that we don't have gaps between rows. */ 
+  if (fwdStrandTrees)
+    {
+      //GtkWidget *widget = GTK_WIDGET(fwdStrandTrees->data);
+
+      //GtkWidget *tree = widgetIsTree(widget) ? widget : treeContainerGetTree(GTK_CONTAINER(widget));
+      //gtk_widget_realize(tree); /* must realize tree to pick up any overriden style properties */
+            
+      /* I can't get this to work properly using gtk_tree_view_get_cell_area etc. The cell
+       * area and background area come out wrong - perhaps because I'm not using a real
+       * row path. After a bit of experimentation it seems that the y padding is always
+       * related to the vertical-separator as follows: ypad = trunc(vseparator / 2) + 1 */
+      gint vertical_separator = 0, horizontal_separator = 0;
+      //gtk_widget_style_get (tree, "vertical-separator", &vertical_separator, NULL);
+      //gtk_widget_style_get (tree, "horizontal-separator", &horizontal_separator, NULL);
+          
+      cellXPadding = (horizontal_separator / 2) + 1;
+      cellYPadding = (vertical_separator / 2) + 1;
+    }
+  exonBoundaryLineWidth   = 1;
+  exonBoundaryLineStyle = GDK_LINE_SOLID;
+  exonBoundaryLineStylePartial = GDK_LINE_ON_OFF_DASH;
+      
+  /* Allocate sortColumns array to be same length as columnList */
+  const int numColumns = g_list_length(columnList_in);
+  sortColumns = new BlxColumnId[numColumns];
+      
+  int i = 0;
+  for ( ; i < numColumns; ++i)
+    sortColumns[i] = BLXCOL_NONE;
+
+  /* Sort by the default/input column, and then by name and then position */
+  sortColumns[0] = sortColumn_in;
+  sortColumns[1] = BLXCOL_SEQNAME;
+  sortColumns[2] = BLXCOL_START;
+}
+
+
+DetailViewProperties::~DetailViewProperties()
+{
+  /* N.B. Don't free the cell renderer, or it causes memory corruption. I'm not
+   * sure what owns it - the columns it is added to? */
+    
+  if (fwdStrandTrees)
+    {
+      g_list_free(fwdStrandTrees);
+      fwdStrandTrees = NULL;
+    }
+  
+  if (revStrandTrees)
+    {
+      g_list_free(revStrandTrees);
+      revStrandTrees = NULL;
+    }
+
+  if (fontDesc)
+    {
+      pango_font_description_free(fontDesc);
+      fontDesc = NULL;
+    }
+  
+  if (spliceSites)
+    {
+      g_slist_foreach(spliceSites, destroyBlxSpliceSite, NULL);
+      g_slist_free(spliceSites);
+      spliceSites = NULL;
+    }
+}
+
+double DetailViewProperties::charWidth() const
+{
+  return m_charWidth;
+}
+
+double DetailViewProperties::charHeight() const
+{
+  return m_charHeight;
+}
+
+/* Get the position of the left border of the main content, i.e. the 
+ * sequence column */
+double DetailViewProperties::contentXPos() const
+{
+  double result = 0.0;
+
+  IntRange range;
+  getColumnXCoords(columnList(), BLXCOL_SEQUENCE, &range);
+
+  result = (double)range.min();
+
+  return result;
+}
+
+/* Get the position of the right border of the main content, i.e. the 
+ * sequence column */
+double DetailViewProperties::contentWidth() const
+{
+  double result = (double)getColumnWidth(columnList(), BLXCOL_SEQUENCE);
+  return result;
+}
+
+
+void DetailViewProperties::setFontSize(const double charWidth, const double charHeight)
+{
+  m_charWidth = charWidth;
+  m_charHeight = charHeight;
+}
+
+
+/***********************************************************
+ *                     Utility functions                   *
+ ***********************************************************/
+
+/* Recursively call a given function on a given widget and its
+ * children if it/they have the given name. The callback function,
+ * callback data and widget name are passed in a RecursiveFuncData
+ * struct */
+void callFuncOnChildren(GtkWidget *widget, gpointer data)
+{
+  RecursiveFuncData *funcData = (RecursiveFuncData*)data;
+
+  if (stringsEqual(gtk_widget_get_name(widget), funcData->widgetName, TRUE))
+    funcData->callbackFunc(widget, funcData->callbackData);
+  
+  if (GTK_IS_CONTAINER(widget))
+    gtk_container_foreach(GTK_CONTAINER(widget), callFuncOnChildren, data);
+}
+
+
+/* Refresh headers for the detail view and its children */
+void detailViewRefreshAllHeaders(GtkWidget *detailView)
+{
+  DEBUG_ENTER("detailViewRefreshAllHeaders()");
+
+  refreshDetailViewHeaders(detailView);
+  callFuncOnAllDetailViewTrees(detailView, refreshTreeHeaders, NULL);
+  
+  RecursiveFuncData data = {SNP_TRACK_HEADER_NAME, recalculateSnpTrackBorders, detailView};
+  callFuncOnChildren(detailView, &data);
+
+  gtk_widget_queue_draw(detailView);
+
+  DEBUG_EXIT("detailViewRefreshAllHeaders returning ");
+}
+
+
+void detailViewRedrawAll(GtkWidget *detailView)
+{
+  DEBUG_ENTER("detailViewRedrawAll()");
+
+  /* Redraw all the trees */
+  callFuncOnAllDetailViewTrees(detailView, widgetClearCachedDrawable, NULL);
+
+  /* Recalculate the size of the snp track headers */
+  RecursiveFuncData data = {SNP_TRACK_HEADER_NAME, recalculateSnpTrackBorders, detailView};  
+  callFuncOnChildren(detailView, &data);
+
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+  if (properties && properties->coverageViewProperties())
+    properties->coverageViewProperties()->redraw();
+
+  gtk_widget_queue_draw(detailView);
+
+  DEBUG_EXIT("detailViewRedrawAll returning ");
+}
+
+
+/* Save any user-settings that are stored in the detail-view properties */
+void detailViewSaveProperties(GtkWidget *detailView, GKeyFile *key_file)
+{
+  DEBUG_ENTER("detailViewSaveProperties()");
+
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+  
+  g_key_file_set_integer(key_file, SETTINGS_GROUP, SETTING_NAME_NUM_UNALIGNED_BASES, properties->numUnalignedBases);
+  saveColumnWidths(detailViewGetColumnList(detailView), key_file);
+  saveSummaryColumns(detailViewGetColumnList(detailView), key_file);
+
+  DEBUG_EXIT("detailViewSaveProperties returning ");
+}
+
+
+/* Scroll the detail view so that the given coord is at the start of the display
+ * range (within bounds). the coord should be in terms of display coords */
+void setDetailViewStartIdx(GtkWidget *detailView, int coord, const BlxSeqType coordSeqType)
+{
+  DEBUG_ENTER("setDetailViewStartIdx()");
+
+  GtkAdjustment *adjustment = detailViewGetAdjustment(detailView);
+  setDetailViewScrollPos(adjustment, coord);
+
+  DEBUG_EXIT("setDetailViewStartIdx returning ");
+}
+
+
+/* Scroll the detail view so that the given coord is at the end of the display
+ * range (within bounds). the coord should be in terms of display coords */
+void setDetailViewEndIdx(GtkWidget *detailView, int coord, const BlxSeqType coordSeqType)
+{
+  DEBUG_ENTER("setDetailViewEndIdx()");
+
+  /* Get the new start coord */
+  const IntRange* const displayRange = detailViewGetDisplayRange(detailView);
+  const int displayLen = displayRange->length();
+  int newStart = coord - displayLen + 1;
+
+  GtkAdjustment *adjustment = detailViewGetAdjustment(detailView);
+  setDetailViewScrollPos(adjustment, newStart);
+
+  DEBUG_EXIT("setDetailViewEndIdx returning ");
+}
+
+
+/* Update the scroll position of the adjustment to the given value. Does bounds checking. */
+static void setDetailViewScrollPos(GtkAdjustment *adjustment, int value)
+{ 
+  DEBUG_ENTER("setDetailViewScrollPos()");
+
+  /* bounds checking */
+  int maxValue = adjustment->upper - adjustment->page_size + 1;
+  
+  if (value > maxValue)
+    {
+      value = maxValue;
+    }
+  
+  if (value < adjustment->lower)
+    {
+      value = adjustment->lower;
+    }
+  
+  adjustment->value = value;
+  
+  /* Emit notification that the scroll pos has changed */
+   gtk_adjustment_value_changed(adjustment);
+
+   DEBUG_EXIT("setDetailViewScrollPos returning ");
+}
+
+
+/* Scroll left/right by one base. */
+void scrollDetailViewLeft1(GtkWidget *detailView)
+{
+  DEBUG_ENTER("scrollDetailViewLeft1()");
+
+  GtkAdjustment *adjustment = detailViewGetAdjustment(detailView);
+  setDetailViewScrollPos(adjustment, adjustment->value - 1);
+
+  DEBUG_EXIT("scrollDetailViewLeft1 returning ");
+}
+
+void scrollDetailViewRight1(GtkWidget *detailView)
+{
+  DEBUG_ENTER("scrollDetailViewRight1()");
+
+  GtkAdjustment *adjustment = detailViewGetAdjustment(detailView);
+  setDetailViewScrollPos(adjustment, adjustment->value + 1);
+
+  DEBUG_EXIT("scrollDetailViewRight1 returning ");
+}
+
+/* Scroll by one step increment */
+void scrollDetailViewLeftStep(GtkWidget *detailView)
+{
+  DEBUG_ENTER("scrollDetailViewLeftStep()");
+
+  GtkAdjustment *adjustment = detailViewGetAdjustment(detailView);
+  setDetailViewScrollPos(adjustment, adjustment->value - adjustment->step_increment);
+
+  DEBUG_EXIT("scrollDetailViewLeftStep returning ");
+}
+
+void scrollDetailViewRightStep(GtkWidget *detailView)
+{
+  DEBUG_ENTER("scrollDetailViewRightStep()");
+
+  GtkAdjustment *adjustment = detailViewGetAdjustment(detailView);
+  setDetailViewScrollPos(adjustment, adjustment->value + adjustment->step_increment);
+
+  DEBUG_EXIT("scrollDetailViewRightStep returning ");
+}
+
+/* Scroll by one page size */
+void scrollDetailViewLeftPage(GtkWidget *detailView)
+{
+  DEBUG_ENTER("scrollDetailViewLeftPage()");
+
+  GtkAdjustment *adjustment = detailViewGetAdjustment(detailView);
+  setDetailViewScrollPos(adjustment, adjustment->value - adjustment->page_increment);
+
+  DEBUG_EXIT("scrollDetailViewLeftPage returning ");
+}
+
+void scrollDetailViewRightPage(GtkWidget *detailView)
+{
+  DEBUG_ENTER("scrollDetailViewRightPage()");
+
+  GtkAdjustment *adjustment = detailViewGetAdjustment(detailView);
+  setDetailViewScrollPos(adjustment, adjustment->value + adjustment->page_increment);
+
+  DEBUG_EXIT("scrollDetailViewRightPage returning ");
+}
+
+
+/* Calculate the number of bases that can be displayed in the sequence column */
+static int calcNumBasesInSequenceColumn(DetailViewProperties *properties)
+{
+  DEBUG_ENTER("calcNumBasesInSequenceColumn()");
+
+  int numChars = 0;
+  
+  /* Find the width of the sequence column */
+  int colWidth = UNSET_INT;
+  GList *listItem = blxWindowGetColumnList(properties->blxWindow());
+  
+  for ( ; listItem; listItem = listItem->next)
+    {
+      BlxColumnInfo *columnInfo = (BlxColumnInfo*)(listItem->data);
+      if (columnInfo && columnInfo->columnId == BLXCOL_SEQUENCE)
+        {
+          colWidth = columnInfo->width;
+          break;
+        }
+    }
+  
+  if (colWidth >= 0)
+    {
+      /* Don't include the cell padding area */
+      GtkCellRenderer *renderer = properties->renderer;
+      colWidth -= (2 * renderer->xpad) + (2 * renderer->xalign);
+      
+      /* Return the number of whole characters that fit in the column. */
+      numChars = (int)((gdouble)colWidth / properties->charWidth());
+    }
+  
+  DEBUG_EXIT("calcNumBasesInSequenceColumn returning %d", numChars);
+  return numChars;
+}
+
+
+/* This should be called when the width of the sequence column has changed (or the
+ * size of the font has changed). This function will adjust the scroll range of our
+ * custom scroll adjustment so that it represents the range that can be displayed 
+ * in the new column width. */
+void updateDetailViewRange(GtkWidget *detailView)
+{
+  DEBUG_ENTER("updateDetailViewRange()");
+
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+  
+  if (properties->adjustment)
+    {
+      int newPageSize = calcNumBasesInSequenceColumn(properties);
+      
+      /* Only trigger updates if things have actually changed */
+      if (newPageSize != properties->adjustment->page_size)
+        {
+          properties->adjustment->page_size = newPageSize;
+          properties->adjustment->page_increment = newPageSize;
+          
+          ///* Reset the display range so that it is between the scrollbar min and max. Try to keep
+//         * it centred on the same base. The base index is in terms of the display range coords, 
+//         * so the sequence type of the coord is whatever the display sequence type is. */
+//        const IntRange const *displayRange = &properties->displayRange;
+//
+//        /* First time through, both coords are set to the initial start coord. So, if
+//         * they are the same, just use that coord as the start coord */
+//        int newStart = displayRange->min;
+//        
+//        if (displayRange->min != displayRange->max)
+//          {
+//            int centre = displayRange->centre();
+//            int offset = roundNearest((double)properties->adjustment->page_size / 2.0);
+//            newStart = centre - offset;
+//          }
+//            
+//        const BlxSeqType seqType = blxWindowGetSeqType(properties->blxWindow());
+//        setDetailViewStartIdx(detailView, newStart, seqType);
+          
+          gtk_adjustment_changed(properties->adjustment); /* signal that the scroll range has changed */
+        }
+    }
+
+  DEBUG_EXIT("updateDetailViewRange returning ");
+}
+
+
+/* Find a child widget of this widget that is a paned widget. Returns null if it does not
+ * have one. If there are two, it returns the first one it finds. */
+static GtkWidget *findNestedPanedWidget(GtkContainer *parentWidget)
+{
+  DEBUG_ENTER("findNestedPanedWidget()");
+
+  GtkWidget *result = NULL;
+  
+  GList *children = gtk_container_get_children(parentWidget);
+  GList *child = children;
+  
+  while (child)
+    {
+      GtkWidget *childWidget = GTK_WIDGET(child->data);
+      if (GTK_IS_PANED(childWidget))
+        {
+          result = childWidget;
+          break;
+        }
+      
+      child = child->next;
+    }
+  
+  g_list_free(children);
+
+  DEBUG_EXIT("findNestedPanedWidget returning ");
+
+  return result;
+}
+
+
+/* Add all trees in the given list to the detail view. Note that the treeList may not contain
+ * actual trees, it may contain their containers (e.g. if they live in scrolled windows). 'first'
+ * indicates that this is the first (set of) tree(s) added. This information is used to determine
+ * which pane to put the tree in and/or whether the first tree in the list should have headers. */
+static void addTreesToDetailViewPane(GtkPaned *panedWin, 
+                                     GList *treeList, 
+                                     const gboolean first)
+{
+  DEBUG_ENTER("addTreesToDetailViewPane()");
+
+  int numTrees = g_list_length(treeList);
+  
+  if (numTrees == 1)
+    {
+      /* Two panes, one tree. Use 'first' flags to decide which pane to put it in */
+      GtkWidget *tree1 = GTK_WIDGET(treeList->data);
+      
+      if (first)
+        {
+          gtk_paned_pack1(panedWin, tree1, TRUE, TRUE);
+        }
+      else
+        {
+          gtk_paned_pack2(panedWin, tree1, TRUE, TRUE);
+        }
+    }
+  else if (numTrees == 2)
+    {
+      /* Two panes, two trees. Easy - put one in each. */
+      GtkWidget *tree1 = GTK_WIDGET(treeList->data);
+      GtkWidget *tree2 = GTK_WIDGET(treeList->next->data);
+      
+      gtk_paned_pack1(panedWin, tree1, TRUE, TRUE);
+      gtk_paned_pack2(panedWin, tree2, TRUE, TRUE);
+    }
+  else if (numTrees > 2)
+    {
+      /* Two panes, three trees. Put one tree in pane 1. There should be a
+       * nested widget in pane 2 that we can put the remaining trees in. */
+      GtkWidget *tree1 = GTK_WIDGET(treeList->data);
+      gtk_paned_pack1(panedWin, tree1, TRUE, TRUE);
+
+      GtkWidget *nestedPanedWidget = findNestedPanedWidget(GTK_CONTAINER(panedWin));
+      
+      if (nestedPanedWidget)
+        {
+          /* Create a new list containing the remaining trees and call this 
+           * function again on the nested paned widget. */
+          GList *remainingTrees = NULL;
+          GList *nextTree = treeList->next;
+          while (nextTree)
+            {
+              remainingTrees = g_list_append(remainingTrees, nextTree->data);
+              nextTree = nextTree->next;
+            }
+          
+          /* Pass 'first' as false to make sure we don't add any more headers */
+          addTreesToDetailViewPane(GTK_PANED(nestedPanedWidget), remainingTrees, FALSE);
+        }
+    }
+
+  DEBUG_EXIT("addTreesToDetailViewPane returning ");
+}
+
+
+/* Returns true if this widget is a detail-view-tree */
+static gboolean widgetIsTree(GtkWidget *widget)
+{
+  gboolean result = FALSE;
+
+  const char *name = gtk_widget_get_name(widget);
+  result = (strcmp(name, DETAIL_VIEW_TREE_NAME) == 0);
+
+  return result;
+}
+
+
+/* Returns true if this widget is a detail-view-tree-container (that is, 
+ * a container that has only one child that is a detail-view-tree.) */
+static gboolean widgetIsTreeContainer(GtkWidget *widget)
+{
+  gboolean result = FALSE;
+
+  const char *name = gtk_widget_get_name(widget);
+  result = (strcmp(name, DETAIL_VIEW_TREE_CONTAINER_NAME) == 0);
+
+  return result;
+}
+
+
+/* Given a widget contains a single detail-view-tree somewhere in its child
+ * hierarchy, return that tree. */
+static GtkWidget *treeContainerGetTree(GtkContainer *container)
+{
+  GtkWidget *result = NULL;
+  
+  GList *children = gtk_container_get_children(container);
+  GList *child = children;
+  
+  for ( ; child && !result; child = child->next)
+    {
+      if (GTK_IS_WIDGET(child->data))
+        {
+          GtkWidget *childWidget = GTK_WIDGET(child->data);
+          
+          if (widgetIsTree(childWidget))
+            {
+              result = childWidget;
+            }
+          else if (GTK_IS_CONTAINER(childWidget))
+           {
+             result = treeContainerGetTree(GTK_CONTAINER(childWidget));
+           }
+        }
+    }
+
+  g_list_free(children);
+  
+  return result;
+}
+
+
+/* Returns true if the given container is a parent (of any level) of the given child */
+static gboolean detailViewContainerIsParent(GtkContainer *container, GtkWidget *search_child)
+{
+  gboolean result = FALSE;
+
+  /* Loop through all children of the given container and see if any are the search_child */
+  GList *check_list = gtk_container_get_children(GTK_CONTAINER(container));
+  GList *check_child = check_list;
+
+  for ( ; check_child && !result ; check_child = check_child->next)
+    {
+      GtkWidget *check_widget = GTK_WIDGET(check_child->data);
+
+      if (check_widget == search_child)
+        {
+          result = TRUE;
+        }
+      else if (GTK_IS_CONTAINER(check_widget))
+        {
+          /* Recurse through the current widget's children */
+          result = detailViewContainerIsParent(GTK_CONTAINER(check_widget), search_child);
+        }
+    }
+  
+  g_list_free(check_list);
+
+  return result;
+}
+
+
+/* Find the parent of the given child widget, where the parent has the given name.
+ * The parent and widget must both be in the given container */
+static GtkWidget *detailViewContainerGetParentWidget(GtkContainer *container, GtkWidget *search_child, const char *parent_name)
+{
+  GtkWidget *result = NULL;
+
+  /* Loop through all children in the container looking for a widget with parent_name */
+  GList *container_children = gtk_container_get_children(container);
+  GList *cur_item = container_children;
+  
+  for ( ; cur_item && !result; cur_item = cur_item->next)
+    {
+      if (GTK_IS_WIDGET(cur_item->data))
+        {
+          GtkWidget *cur_widget = GTK_WIDGET(cur_item->data);
+          
+          /* If the name matches, then check if this widget is a container with a child
+           * (or child-of-a-child) that matches search_child. If not, keep on searching. */
+          if (strcmp(gtk_widget_get_name(cur_widget), parent_name) == 0 && GTK_IS_CONTAINER(cur_widget))
+            {
+              if (detailViewContainerIsParent(GTK_CONTAINER(cur_widget), search_child))
+                {
+                  result = cur_widget;
+                  break;
+                }
+            }
+          
+          if (GTK_IS_CONTAINER(cur_widget))
+           {
+             result = detailViewContainerGetParentWidget(GTK_CONTAINER(cur_widget), search_child, parent_name);
+           }
+        }
+    }
+
+  g_list_free(container_children);
+  
+  return result;
+}
+
+
+/* This function removes all detail-view-trees from the given container widget. */
+static void removeAllTreesFromContainer(GtkWidget *widget, gpointer data)
+{
+  DEBUG_ENTER("removeAllTreesFromContainer()");
+
+  /* See if this widget is a tree (or a container containing only a single tree - the
+   * detail view contains the outermost single-tree container, e.g. typically the trees
+   * will live in a vbox or scrolled window, and it is this container that the detail view
+   * knows about) */
+  if (widgetIsTree(widget) || widgetIsTreeContainer(widget))
+    {
+      GtkContainer *parent = GTK_CONTAINER(data);
+      gtk_container_remove(parent, widget);
+    }
+  else if (GTK_IS_CONTAINER(widget))
+    {
+      /* It is a nested container, containing multiple children. Recurse. */
+      gtk_container_foreach(GTK_CONTAINER(widget), removeAllTreesFromContainer, widget);
+    }
+
+  DEBUG_EXIT("removeAllTreesFromContainer returning ");
+}
+
+
+/* This function removes the trees from the detail view and re-adds them in the
+ * correct order according to the displayRev flag. It should be called every
+ * time the strands are toggled. It assumes the trees are already in the 
+ * detailView container, and that the properties have been set for all 3 widgets. */
+static void refreshTreeOrder(GtkWidget *detailView)
+{
+  DEBUG_ENTER("refreshTreeOrder()");
+
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+  BlxContext *bc = detailViewGetContext(detailView);
+  gboolean toggled = detailViewGetDisplayRev(detailView);
+
+  /* Get the direct parent of the trees */
+  GtkWidget *detailViewContainer = getNamedChildWidget(detailView, DETAIL_VIEW_WIDGET_NAME);
+
+  gtk_container_foreach(GTK_CONTAINER(detailView), removeAllTreesFromContainer, detailViewContainer);
+
+  /* Extract the named detail-view widget, which is the direct parent of the trees. This 
+   * should be a paned window. */
+  GtkWidget *panedWin = getNamedChildWidget(detailView, DETAIL_VIEW_WIDGET_NAME);
+
+  if (!GTK_IS_PANED(panedWin))
+    {
+      g_error("Unexpected detail view type: expected a paned widget. Could not add child trees.\n");
+    }
+
+  if (bc->seqType == BLXSEQ_DNA)
+    {
+      /* Add both trees - the order they're added will depend on whether the display is toggled or not. */
+      addTreesToDetailViewPane(GTK_PANED(panedWin), properties->fwdStrandTrees, !toggled);
+      addTreesToDetailViewPane(GTK_PANED(panedWin), properties->revStrandTrees, toggled);
+    }
+  else if (bc->seqType == BLXSEQ_PEPTIDE)
+    {
+      /* Only add one set of trees - the reverse strand if toggled, the forward strand if not. */
+      GList *treeList = toggled ? properties->revStrandTrees : properties->fwdStrandTrees;
+      addTreesToDetailViewPane(GTK_PANED(panedWin), treeList, TRUE);
+    }
+  
+  /* Must show all child widgets because some of them may not have been in this parent before.
+   * (Just calling gtk_widget_show on the individual trees doesn't seem to work.)
+   * However, we then need to re-hide any that may have been previously hidden by the user. */
+  gtk_widget_show_all(detailView);
+  gtk_container_foreach(GTK_CONTAINER(detailView), hideUserHiddenWidget, NULL);
+
+  DEBUG_EXIT("refreshTreeOrder returning ");
+}
+
+
+/* Refresh a header that contains fixed-width text that needs to be resized whenever a zoom
+ * happens; updates the height of the widget and the font description, and clears its cached
+ * drawable, if it has one. This just sets things up ready for the next expose event, where 
+ * the actual drawing will take place. */
+void refreshTextHeader(GtkWidget *header, gpointer data)
+{
+  const char *widgetName = gtk_widget_get_name(header);
+  
+  if (GTK_IS_LABEL(header))
+    {
+      /* For straightforward labels, just update the font size. */
+      GtkWidget *detailView = GTK_WIDGET(data);
+      
+      PangoFontDescription *dvFont = detailViewGetFontDesc(detailView);
+      int newSize = pango_font_description_get_size(dvFont);
+
+      pango_font_description_set_size(header->style->font_desc, newSize);
+      gtk_widget_modify_font(header, header->style->font_desc);
+    }
+  else if (!strcmp(widgetName, SNP_TRACK_HEADER_NAME) || !strcmp(widgetName, DNA_TRACK_HEADER_NAME))
+    {
+      /* Clear the cached drawable so that it gets recreated on the next expose */
+      widgetClearCachedDrawable(header, NULL);
+
+      /* Update the font and the widget height, in case the font-size has changed. */
+      GtkWidget *detailView = GTK_WIDGET(data);
+      gtk_widget_modify_font(header, detailViewGetFontDesc(detailView));
+     
+      if (!strcmp(widgetName, SNP_TRACK_HEADER_NAME))
+        {
+          /* SNP track - must adjust its size based on the char height and number of rows visible */
+          snpTrackSetHeight(detailView, header);
+        }
+      else if (GTK_IS_LAYOUT(header))
+        {
+          /* Normal text header. Set the height to the character height */
+          const gdouble charHeight = detailViewGetCharHeight(detailView);
+          gtk_layout_set_size(GTK_LAYOUT(header), header->allocation.width, roundNearest(charHeight));
+          gtk_widget_set_size_request(header, -1, roundNearest(charHeight));
+        }
+
+      gtk_widget_queue_draw(header);
+    }
+  
+  /* If this is a container, recurse over each child */
+  if (GTK_IS_CONTAINER(header))
+    {
+      gtk_container_foreach(GTK_CONTAINER(header), refreshTextHeader, data);
+    }
+}
+
+
+/* Refresh the headers for the detail view. NOte: does not refresh tree view
+ * headers; use detailViewRefreshAllHeaders if you want to do that */
+static void refreshDetailViewHeaders(GtkWidget *detailView)
+{
+  DEBUG_ENTER("refreshDetailViewHeaders()");
+
+  /* Loop through all widgets and call refreshTextHeader. This
+   * updates the font etc. if it is a type of widget that requires that. */
+  gtk_container_foreach(GTK_CONTAINER(detailView), refreshTextHeader, detailView);
+  
+  /* Loop through all columns and call the individual refresh callbacks for
+   * each of their headers. This updates the specific information within the header. */
+  GList *columnList = detailViewGetColumnList(detailView);
+  GList *column = columnList;
+  
+  for ( ; column; column = column->next)
+    {
+      BlxColumnInfo *columnInfo = (BlxColumnInfo*)column->data;
+      if (columnInfo)
+        {
+          if (columnInfo->headerWidget && columnInfo->refreshFunc)
+            {
+              columnInfo->refreshFunc(columnInfo->headerWidget, detailView);
+            }
+        }
+      else
+        {
+          g_critical("Invalid column data for detail view header; header may not be refreshed correctly.\n");
+        }
+    }
+
+  DEBUG_EXIT("refreshDetailViewHeaders returning ");
+}
+
+
+/* Resize the detail view header widgets. Should be called whenever a column is resized. */
+void resizeDetailViewHeaders(GtkWidget *detailView)
+{
+  DEBUG_ENTER("resizeDetailViewHeaders()");
+
+  GList *listItem = detailViewGetColumnList(detailView);
+  
+  for ( ; listItem; listItem = listItem->next)
+    {
+      BlxColumnInfo *columnInfo = (BlxColumnInfo*)listItem->data;
+
+      /* For the sequence column, don't set the size request, or we won't be able
+       * to shrink the window. (The sequence col header will be resized dynamically.) */
+      if (columnInfo->columnId != BLXCOL_SEQUENCE)
+        {
+          /* For other columns, we can set the size request: they're small enough
+           * that we can live without the need to shrink below their sum widths. */
+          if (showColumn(columnInfo))
+            {
+              widgetSetHidden(columnInfo->headerWidget, FALSE);
+              gtk_widget_set_size_request(columnInfo->headerWidget, columnInfo->width, -1);
+            }
+          else
+            {
+              /* Zero width: we must hide the widget because it always seems to have
+               * some width even if we set the size request to 0 */
+              widgetSetHidden(columnInfo->headerWidget, TRUE);
+            }
+        }
+    }
+
+  DEBUG_EXIT("resizeDetailViewHeaders returning ");
+}
+
+
+/* Update the font description for all relevant components of the detail view */
+void updateDetailViewFontDesc(GtkWidget *detailView)
+{
+  DEBUG_ENTER("updateDetailViewFontDesc()");
+
+  PangoFontDescription *fontDesc = detailViewGetFontDesc(detailView);
+  
+  gtk_widget_modify_font(detailView, fontDesc);
+  callFuncOnAllDetailViewTrees(detailView, (GtkCallback)gtk_widget_modify_font, fontDesc);
+  
+  updateCellRendererFont(detailView, fontDesc);
+  refreshDetailViewHeaders(detailView);
+  callFuncOnAllDetailViewTrees(detailView, refreshTreeHeaders, NULL);
+  callFuncOnAllDetailViewTrees(detailView, treeUpdateFontSize, NULL);
+  detailViewRedrawAll(detailView);
+
+  DEBUG_EXIT("updateDetailViewFontDesc returning ");
+}
+
+
+static void incrementFontSize(GtkWidget *detailView)
+{
+  DEBUG_ENTER("incrementFontSize()");
+
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+  int newSize = (pango_font_description_get_size(properties->fontDesc) / PANGO_SCALE) + FONT_INCREMENT_SIZE;
+  
+  if (newSize <= MAX_FONT_SIZE)
+    {
+      pango_font_description_set_size(properties->fontDesc, newSize * PANGO_SCALE);
+      updateDetailViewFontDesc(detailView);
+    }
+
+  DEBUG_EXIT("incrementFontSize returning ");
+}
+
+
+static void decrementFontSize(GtkWidget *detailView)
+{
+  DEBUG_ENTER("decrementFontSize()");
+
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+  int newSize = (pango_font_description_get_size(properties->fontDesc) / PANGO_SCALE) - FONT_INCREMENT_SIZE;
+  
+  /* Note that the font needs to be big enough to cover the vertical separators and padding around the
+   * cell, otherwise we will end up with visible gaps between rows. */
+  if (newSize >= MIN_FONT_SIZE && newSize >= (detailViewGetCellYPadding(detailView) * 2))
+    {
+      pango_font_description_set_size(properties->fontDesc, newSize * PANGO_SCALE);
+      updateDetailViewFontDesc(detailView);
+    }
+
+  DEBUG_EXIT("decrementFontSize returning ");
+}
+
+
+/* Zoom the detail view in/out */
+void zoomDetailView(GtkWidget *detailView, const gboolean zoomIn)
+{
+  DEBUG_ENTER("zoomDetailView()");
+
+  if (zoomIn)
+    {
+      incrementFontSize(detailView);
+    }
+  else
+    {
+      decrementFontSize(detailView);
+    }
+  
+  updateDetailViewRange(detailView);
+
+  DEBUG_EXIT("zoomDetailView returning ");
+}
+
+  
+/* set the contents of a text entry box */
+static void entrySetContents(GtkWidget *widget, const char *value)
+{
+  if (widget && GTK_IS_ENTRY(widget))
+    {
+      gtk_entry_set_text(GTK_ENTRY(widget), value);
+
+      int len = strlen(value) + 1;
+      const int charWidth = 8;
+
+      if (len < DETAIL_VIEW_FEEDBACK_MIN_WIDTH)
+        len = DETAIL_VIEW_FEEDBACK_MIN_WIDTH;
+
+      if (len > DETAIL_VIEW_FEEDBACK_MAX_WIDTH)
+        {
+          len = DETAIL_VIEW_FEEDBACK_MAX_WIDTH;
+
+          /* For the Name box, if the name length has exceeded the box width then also set the
+           * name as the tooltip so that the user can easily see the full name. Otherwise, use
+           * the default tooltip text */
+          if (stringsEqual(gtk_widget_get_name(widget), DETAIL_VIEW_FEEDBACK_MATCH_NAME, TRUE))
+            gtk_widget_set_tooltip_text(widget, value);
+        }
+      else if (stringsEqual(gtk_widget_get_name(widget), DETAIL_VIEW_FEEDBACK_MATCH_NAME, TRUE))
+        {
+          gtk_widget_set_tooltip_text(widget, DETAIL_VIEW_FEEDBACK_MATCH_NAME_TOOLTIP);
+        }
+
+      gtk_widget_set_size_request(widget, len * charWidth, -1) ;
+    }
+}
+
+
+/* Clear the contents of a text entry box */
+static void entryClearContents(GtkWidget *widget)
+{
+  entrySetContents(widget, "");
+}
+
+
+/* Clear the contents of all widgets in the feedback box */
+static void feedbackBoxClearValues(GtkWidget *feedbackBox)
+{
+  entryClearContents(getNamedChildWidget(feedbackBox, DETAIL_VIEW_FEEDBACK_REF_COORD));
+  entryClearContents(getNamedChildWidget(feedbackBox, DETAIL_VIEW_FEEDBACK_MATCH_COORD));
+  entryClearContents(getNamedChildWidget(feedbackBox, DETAIL_VIEW_FEEDBACK_MATCH_NAME));
+  entryClearContents(getNamedChildWidget(feedbackBox, DETAIL_VIEW_FEEDBACK_MATCH_LEN));
+  entryClearContents(getNamedChildWidget(feedbackBox, DETAIL_VIEW_FEEDBACK_DEPTH));
+}
+
+
+/* Set the contents of the child text-entry widget with the given name to the given string value */
+static void feedbackBoxSetString(GtkWidget *feedbackBox, const char *widgetName, const char *value)
+{
+  GtkWidget *widget = getNamedChildWidget(feedbackBox, widgetName);
+  entrySetContents(widget, value);
+}
+
+
+/* Set the contents of the child text-entry widget with the given name to the given int value */
+static void feedbackBoxSetInt(GtkWidget *feedbackBox, const char *widgetName, const int value)
+{
+  GtkWidget *widget = getNamedChildWidget(feedbackBox, widgetName);
+  char *resultString = g_strdup_printf("%d", value);
+
+  entrySetContents(widget, resultString);
+
+  g_free(resultString);
+}
+
+
+/* Set the tooltip of the child text-entry widget with the given name */
+static void feedbackBoxSetTooltip(GtkWidget *feedbackBox, const char *widgetName, const char* tooltip)
+{
+  GtkWidget *widget = getNamedChildWidget(feedbackBox, widgetName);
+
+  gtk_widget_set_tooltip_text(widget, tooltip);
+}
+
+
+/* Simple utility to return true if we should negate coords for the display */
+static gboolean negateCoords(BlxContext *bc)
+{
+  return (bc->displayRev && bc->flags[BLXFLAG_NEGATE_COORDS]);
+}
+
+
+static void feedbackBoxSetRefCoord(GtkWidget *feedbackBox,
+                                   GtkWidget *detailView,
+                                   const BlxSequence *seq)
+{
+  BlxContext *bc = detailViewGetContext(detailView);
+  
+  if (detailViewGetSelectedIdxRangeSet(detailView))
+    {
+      /* A range of coordinates is selected */
+      IntRange *range = detailViewGetSelectedDnaIdxRange(detailView);
+
+      if (range)
+        {
+          stringstream result_ss;
+          result_ss << range->start(bc->displayRev, negateCoords(bc))
+                    << ".."
+                    << range->end(bc->displayRev, negateCoords(bc));
+
+          string result_str = result_ss.str();
+          feedbackBoxSetString(feedbackBox, DETAIL_VIEW_FEEDBACK_REF_COORD, result_str.c_str());
+
+          delete range;
+        }
+    }
+  else if (detailViewGetSelectedIdxSet(detailView))
+    {
+      /* A single coord is selected */
+      int qIdx = detailViewGetSelectedDnaIdx(detailView);
+
+      /* Negate the coord for the display, if necessary */
+      int coord = qIdx;
+
+      if (negateCoords(bc))
+        coord *= -1;
+
+      feedbackBoxSetInt(feedbackBox, DETAIL_VIEW_FEEDBACK_REF_COORD, coord);
+    }
+}
+
+static bool getMatchCoordForRefCoord(GtkWidget *detailView, 
+                                     const BlxSequence *seq,
+                                     const int qIdx,
+                                     int &sIdx)
+{
+  bool found = FALSE;
+
+  BlxContext *bc = detailViewGetContext(detailView);
+  g_return_val_if_fail(bc && seq, found);
+
+  GList *mspListItem = seq->mspList;
+  const int numUnalignedBases = detailViewGetNumUnalignedBases(detailView);
+              
+  for ( ; mspListItem; mspListItem = mspListItem->next)
+    {
+      MSP *msp = (MSP*)(mspListItem->data);
+      BlxContext *bc = detailViewGetContext(detailView);
+                  
+      if (mspGetMatchCoord(msp, qIdx, TRUE, numUnalignedBases, bc, &sIdx))
+        {
+          found = TRUE;
+          break;
+        }
+    }
+
+  return found;
+}
+
+/* Get the match coord for the feedback box. Returns true and sets sIdx if found. */
+static void feedbackBoxSetMatchCoord(GtkWidget *feedbackBox,
+                                     GtkWidget *detailView,
+                                     const BlxSequence *seq)
+{
+  if (seq && seq->type != BLXSEQUENCE_VARIATION)
+    {
+      if (g_list_length(seq->mspList) > 0)
+        {
+          MSP *firstMsp = (MSP*)(seq->mspList->data);
+          
+          if (mspGetMatchSeq(firstMsp))
+            {
+              const int sLen = strlen(mspGetMatchSeq(firstMsp));
+              feedbackBoxSetInt(feedbackBox, DETAIL_VIEW_FEEDBACK_MATCH_LEN, sLen);
+            }
+
+          /* If a q index/range is selected, see if there is a valid base at that coord(s)
+           * for any of the MSPs for the selected sequence. */
+          if (detailViewGetSelectedIdxRangeSet(detailView))
+            {
+              BlxContext *bc = detailViewGetContext(detailView);
+              IntRange *range = detailViewGetSelectedDnaIdxRange(detailView);
+              int start = UNSET_INT;
+              int end = UNSET_INT;
+
+              if (range && 
+                  getMatchCoordForRefCoord(detailView, seq, range->start(bc->displayRev), start) &&
+                  getMatchCoordForRefCoord(detailView, seq, range->end(bc->displayRev), end))
+                {
+                  stringstream result_ss;
+                  result_ss << start << ".." << end;
+
+                  string result_str = result_ss.str();
+                  feedbackBoxSetString(feedbackBox, DETAIL_VIEW_FEEDBACK_MATCH_COORD, result_str.c_str());
+                }
+
+              if (range)
+                delete range;
+            }
+          else if (detailViewGetSelectedIdxSet(detailView))
+            {
+              int qIdx = detailViewGetSelectedDnaIdx(detailView);
+              int sIdx = UNSET_INT;
+              
+              if (getMatchCoordForRefCoord(detailView, seq, qIdx, sIdx))
+                {
+                  feedbackBoxSetInt(feedbackBox, DETAIL_VIEW_FEEDBACK_MATCH_COORD, sIdx);
+                }
+            }
+        }
+    }
+}
+
+
+static void feedbackBoxSetMatchName(GtkWidget *feedbackBox,
+                                    const BlxSequence *seq, 
+                                    const int numSeqsSelected)
+{
+  string resultString("");
+  
+  /* Find the sequence name text (or some default text to indicate that a sequence is not selected) */
+  const char *noSeqText = numSeqsSelected > 0 ? MULTIPLE_SUBJECTS_SELECTED_TEXT : NO_SUBJECT_SELECTED_TEXT;
+
+  if (seq)
+    {
+      const char *seqName = blxSequenceGetName(seq);
+      const char *sequence = blxSequenceGetSequence(seq);
+
+      if (seqName)
+        resultString += seqName;
+        
+      /* For variations, also include the variation data in the name box */
+      if (seq->type == BLXSEQUENCE_VARIATION && sequence)
+        {
+          resultString += " : ";
+          resultString += sequence;
+        }
+    }
+  else
+    {
+      resultString += noSeqText;
+    }
+
+  feedbackBoxSetString(feedbackBox, DETAIL_VIEW_FEEDBACK_MATCH_NAME, resultString.c_str());
+}
+
+
+static void feedbackBoxSetDepth(GtkWidget *feedbackBox,
+                                GtkWidget *detailView,
+                                const BlxSequence *seq)
+{
+  BlxContext *bc = detailViewGetContext(detailView);
+  const BlxStrand strand = bc->activeStrand();
+  
+  if (detailViewGetSelectedIdxRangeSet(detailView))
+    {
+      /* A range of coordinates is selected. Sum the read depth over the range. */
+      IntRange *range = detailViewGetSelectedDisplayIdxRange(detailView);
+
+      if (range)
+        {
+          int depth = bc->calculateTotalDepth(range, strand);
+          feedbackBoxSetInt(feedbackBox, DETAIL_VIEW_FEEDBACK_DEPTH, depth);
+          delete range;
+        }
+
+      feedbackBoxSetTooltip(feedbackBox, DETAIL_VIEW_FEEDBACK_DEPTH, DETAIL_VIEW_FEEDBACK_DEPTH_TOOLTIP);
+    }
+  else if (detailViewGetSelectedIdxSet(detailView))
+    {
+      /* A single coord is selected */
+      const int coord = detailViewGetSelectedDisplayIdx(detailView);
+      const int depth = bc->getDepth(coord, NULL, strand);
+
+      feedbackBoxSetInt(feedbackBox, DETAIL_VIEW_FEEDBACK_DEPTH, depth);
+
+      if (bc->seqType == BLXSEQ_DNA)
+        {
+          /* Show the specific base support of the reads at this coord, i.e. how many a's, t's, g's
+           * and c's. Show this in the tooltip for now to avoid clutter (we could perhaps add this to
+           * the main box but only show the box if coverage is enabled, or have its own option). */
+          const int depth_a = bc->getDepth(coord, "a", strand);
+          const int depth_c = bc->getDepth(coord, "c", strand);
+          const int depth_g = bc->getDepth(coord, "g", strand);
+          const int depth_t = bc->getDepth(coord, "t", strand);
+          const int depth_n = bc->getDepth(coord, "n", strand);
+          const int depth_gaps = bc->getDepth(coord, ".", strand);
+          const int total_bases = depth_a + depth_c + depth_g + depth_t + depth_n + depth_gaps;
+
+          stringstream tmp_ss;
+          tmp_ss << DETAIL_VIEW_FEEDBACK_DEPTH_TOOLTIP;
+
+          /* Always show ACGT, even if 0, for consistency. We could change this however we like,
+           * e.g. it might be good to show them in descending order */
+          tmp_ss << "\nA: " << depth_a << "\nC: " << depth_c 
+                 << "\nG: " << depth_g << "\nT: " << depth_t;
+
+          /* Only show N, Gaps and Unknown if they are non-zero because most of the time they're
+           * not relevant */
+          if (depth_n > 0)
+            tmp_ss << "\nN: " << depth_n;
+
+          if (depth_gaps > 0)
+            tmp_ss << "\nGaps: " << depth_gaps;
+
+          if (total_bases < depth)
+            tmp_ss << "\nUnknown: " << depth - total_bases;
+
+          string tmp_str = tmp_ss.str();
+          feedbackBoxSetTooltip(feedbackBox, DETAIL_VIEW_FEEDBACK_DEPTH, tmp_str.c_str());
+        }
+    }
+  else
+    {
+      feedbackBoxSetTooltip(feedbackBox, DETAIL_VIEW_FEEDBACK_DEPTH, DETAIL_VIEW_FEEDBACK_DEPTH_TOOLTIP);
+    }
+}
+
+
+/* Set the text displayed in the user feedback boxes based on the given MSPs sequence name
+ * (if an MSP is given), and also the currently-selected base index (if there is one). */
+static void setFeedbackText(GtkWidget *detailView, 
+                            const BlxSequence *seq, 
+                            const int numSeqsSelected, 
+                            GtkWidget *feedbackBox)
+{
+  DEBUG_ENTER("setFeedbackText()");
+
+  /* Clear existing values */
+  feedbackBoxClearValues(feedbackBox);
+
+  feedbackBoxSetRefCoord(feedbackBox, detailView, seq) ;
+  feedbackBoxSetMatchName(feedbackBox, seq, numSeqsSelected) ;
+  feedbackBoxSetMatchCoord(feedbackBox, detailView, seq) ; // also sets match length
+  feedbackBoxSetDepth(feedbackBox, detailView, seq) ;
+  
+  DEBUG_EXIT("setFeedbackText returning ");
+}
+
+
+/* Updates the feedback box with info about any currently-selected MSPs. This 
+ * currently assumes single-MSP selections, but could be extended in the future 
+ * to display, say, summary information about multiple MSPs. */
+void updateFeedbackBox(GtkWidget *detailView)
+{
+  DEBUG_ENTER("updateFeedbackBox()");
+
+  BlxContext *bc = detailViewGetContext(detailView);
+  const int numSeqsSelected = g_list_length(bc->selectedSeqs);
+  const BlxSequence *seq = NULL;
+
+  /* currently we only properly handle single sequence selection so only pass the sequence if 1
+   * and only 1 sequence is selected */
+  if (numSeqsSelected == 1) 
+    {
+      seq = (const BlxSequence*)(bc->selectedSeqs->data);
+    }
+  
+  GtkWidget *feedbackBox = detailViewGetFeedbackBox(detailView);
+
+  setFeedbackText(detailView, seq, numSeqsSelected, feedbackBox);
+
+  gtk_widget_queue_draw(feedbackBox);
+  
+  DEBUG_EXIT("updateFeedbackBox returning ");
+}
+
+
+/* Clear the feedback area */
+void clearFeedbackArea(GtkWidget *detailView)
+{
+  DEBUG_ENTER("clearFeedbackArea()");
+
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+
+  if (properties)
+    {
+      GtkStatusbar *statusBar = GTK_STATUSBAR(properties->statusBar);
+      
+      if (statusBar)
+        {
+          guint contextId = gtk_statusbar_get_context_id(GTK_STATUSBAR(statusBar), DETAIL_VIEW_STATUSBAR_CONTEXT);
+          gtk_statusbar_push(GTK_STATUSBAR(statusBar), contextId, "");
+        }
+    }
+
+  DEBUG_EXIT("clearFeedbackArea returning ");
+}
+
+
+/* This updates the detail-view feedback area with info about a given nucleotide in the reference sequence */
+void updateFeedbackAreaNucleotide(GtkWidget *detailView, const int dnaIdx, const BlxStrand strand)
+{
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+  BlxContext *bc = blxWindowGetContext(properties->blxWindow());
+
+  /* First clear the existing message if there is one */
+  GtkStatusbar *statusBar = GTK_STATUSBAR(properties->statusBar);
+  
+  if (statusBar)
+    {
+      guint contextId = gtk_statusbar_get_context_id(GTK_STATUSBAR(statusBar), DETAIL_VIEW_STATUSBAR_CONTEXT);
+      gtk_statusbar_pop(GTK_STATUSBAR(statusBar), contextId);
+      
+      /* See if there's a variation at the given coord */
+      const MSP *msp = NULL;
+      
+      gboolean multiple = FALSE;
+      
+      if (coordAffectedByVariation(dnaIdx, strand, bc, &msp, NULL, NULL, NULL, NULL, &multiple))
+        {
+          if (msp && mspGetSName(msp))
+            {
+              char *displayText = NULL;
+              
+              /* If we're displaying coords negated, negate it now */
+              int coord = (negateCoords(bc) ? -1 * dnaIdx : dnaIdx);
+
+              /* If there are multiple variations on this coord, display some summary text.
+               * Otherwise, check we've got the sequence info to display. We should have, but 
+               * if not just display the name. */
+              if (multiple)
+                displayText = g_strdup_printf("%d  %s", coord, MULTIPLE_VARIATIONS_TEXT);
+              else if (mspGetMatchSeq(msp))
+                displayText = g_strdup_printf("%d  %s : %s", coord, mspGetSName(msp), mspGetMatchSeq(msp));
+              else
+                displayText = g_strdup_printf("%d  %s", coord, mspGetSName(msp));
+              
+              /* Send the message to the status bar */
+              gtk_statusbar_push(GTK_STATUSBAR(statusBar), contextId, displayText);
+              g_free(displayText);
+            }
+        }
+      else if (coordAffectedByPolyASignal(dnaIdx, strand, bc, &msp, &multiple) && msp)
+        {
+          char *displayText = NULL;
+
+          /* If we're displaying coords negated, negate it now */
+          const int negate = (negateCoords(bc) ? -1 : 1);
+          int coord = negate * dnaIdx;
+
+          /* If there are multiple signals on this coord, display some summary text.
+           * Otherwise, check we've got the sequence info to display. If not just display the name. */
+          if (multiple)
+            {
+              displayText = g_strdup_printf("%d  %s", coord, MULTIPLE_POLYA_SIGNALS_TEXT);
+            }
+          else
+            {
+              if (bc->displayRev) /* swap coords and negage if applicable */
+                displayText = g_strdup_printf("%d %s: %d,%d", coord, "polyA signal", negate * msp->qRange.max(), negate * msp->qRange.min());
+              else
+                displayText = g_strdup_printf("%d %s: %d,%d", coord, "polyA signal", msp->qRange.min(), msp->qRange.max());
+            }
+              
+          /* Send the message to the status bar */
+          gtk_statusbar_push(GTK_STATUSBAR(statusBar), contextId, displayText);
+          g_free(displayText);
+        }
+      else if (coordAffectedByPolyASite(dnaIdx, strand, bc, &msp, &multiple) && msp)
+        {
+          char *displayText = NULL;
+
+          /* If we're displaying coords negated, negate it now */
+          const int negate = (negateCoords(bc) ? -1 : 1);
+          int coord = negate * dnaIdx;
+
+          /* If there are multiple sites on this coord, display some summary text.
+           * Otherwise, check we've got the sequence info to display. If not just display the name. */
+          if (multiple)
+            {
+              displayText = g_strdup_printf("%d  %s", coord, MULTIPLE_POLYA_SITES_TEXT);
+            }
+          else
+            {
+              if (bc->displayRev) /* swap coords and negate if applicable */
+                displayText = g_strdup_printf("%d %s: %d,%d", coord, "polyA site", negate * msp->qRange.max(), negate * msp->qRange.min());
+              else
+                displayText = g_strdup_printf("%d %s: %d,%d", coord, "polyA site", msp->qRange.min(), msp->qRange.max());
+            }
+              
+          /* Send the message to the status bar */
+          gtk_statusbar_push(GTK_STATUSBAR(statusBar), contextId, displayText);
+          g_free(displayText);
+        }
+    }
+}
+
+
+/* Scroll the detail-view if necessary to keep it within the given range */
+void detailViewScrollToKeepInRange(GtkWidget *detailView, const IntRange* const range)
+{
+  DEBUG_ENTER("detailViewScrollToKeepInRange()");
+
+  IntRange *displayRange = detailViewGetDisplayRange(detailView);
+  const BlxSeqType seqType = detailViewGetSeqType(detailView);
+      
+  if (displayRange->min() < range->min())
+    {
+      setDetailViewStartIdx(detailView, range->min(), seqType);
+    }
+  else if (displayRange->max() > range->max())
+    {
+      setDetailViewEndIdx(detailView, range->max(), seqType);
+    }
+
+  DEBUG_EXIT("detailViewScrollToKeepInRange returning ");
+}
+
+
+/* If the selected base index is outside the current display range, scroll to
+ * keep it in range. We scroll by the minimum number of bases possible if 
+ * scrollMinimum is true; otherwise we re-centre on the selection. */
+static void scrollToKeepSelectionInRange(GtkWidget *detailView, const gboolean scrollMinimum)
+{
+  DEBUG_ENTER("scrollToKeepSelectionInRange()");
+
+  IntRange *displayRange = detailViewGetDisplayRange(detailView);
+  const gboolean selectedBaseSet = detailViewGetSelectedIdxSet(detailView);
+  const int selectedBaseIdx = detailViewGetSelectedDisplayIdx(detailView);
+
+  if (selectedBaseSet && !valueWithinRange(selectedBaseIdx, displayRange))
+    {
+      const BlxSeqType seqType = detailViewGetSeqType(detailView);
+      
+      if (scrollMinimum)
+        {
+          if (selectedBaseIdx < displayRange->min())
+            {
+              setDetailViewStartIdx(detailView, selectedBaseIdx, seqType);
+            }
+          else if (selectedBaseIdx > displayRange->max())
+            {
+              setDetailViewEndIdx(detailView, selectedBaseIdx, seqType);
+            }
+        }
+      else
+        {
+          const int newStart = selectedBaseIdx - (displayRange->length() / 2);
+          setDetailViewStartIdx(detailView, newStart, seqType);
+        }
+    }
+
+  DEBUG_EXIT("scrollToKeepSelectionInRange returning ");
+}
+
+
+/* This is called when the Squash matches option has been toggled. It switches to the condensed 
+ * view of the trees (where multiple MSPs in the same sequence appear on the same row) if squash
+ * is true, or reverts to the expanded version (where each MSP has its own row) if squash is false. */
+void detailViewUpdateSquashMatches(GtkWidget *detailView, const gboolean squash)
+{
+  DEBUG_ENTER("detailViewUpdateSquashMatches()");
+
+  BlxContext *bc = detailViewGetContext(detailView);
+  
+  if (squash && bc->modelId != BLXMODEL_SQUASHED)
+    {
+      /* Set the "squashed" model to be active */
+      bc->modelId = BLXMODEL_SQUASHED;
+      callFuncOnAllDetailViewTrees(detailView, treeUpdateSquashMatches, NULL);
+    }
+  else if (!squash && bc->modelId != BLXMODEL_NORMAL)
+    {
+      /* Set the normal model to be active */
+      bc->modelId = BLXMODEL_NORMAL;
+      callFuncOnAllDetailViewTrees(detailView, treeUpdateSquashMatches, NULL);
+    }
+
+  detailViewRedrawAll(detailView);
+
+  DEBUG_EXIT("detailViewUpdateSquashMatches returning ");
+}
+
+
+
+/* Sort comparison function for sorting by group */
+static gint sortByGroupCompareFunc(const MSP *msp1, const MSP *msp2, GtkWidget *blxWindow)
+{
+  gint result = 0;
+  
+  /* Get the order number out of the group and sort on that. If the sequence
+   * is not in a group, its order number is UNSET_INT, and it gets sorted after
+   * any sequences that are in groups. */
+  const int msp1Order = sequenceGetGroupOrder(blxWindow, msp1->sSequence);
+  const int msp2Order = sequenceGetGroupOrder(blxWindow, msp2->sSequence);
+  
+  if (msp1Order == UNSET_INT && msp2Order != UNSET_INT)
+    {
+      result = 1;
+    }
+  else if (msp1Order != UNSET_INT && msp2Order == UNSET_INT)
+    {
+      result = -1;
+    }
+  else
+    {
+      result = msp1Order - msp2Order;
+    }
+
+  return result;
+}
+
+/* Sort comparison function for sorting by the start position on the 
+ * reference sequence. (Does a secondary sort by the alignment length) */
+static gint sortByStartCompareFunc(const MSP *msp1, const MSP *msp2, const gboolean displayRev)
+{
+  gint result = 0;
+
+  if (displayRev)
+    {
+      /* Display is reversed (i.e. numbers shown descending) so use compare on the max coord
+       * and look for the max */
+      result = msp2->qRange.max() - msp1->qRange.max();
+    }
+  else 
+    {
+      result = msp1->qRange.min() - msp2->qRange.min();
+    }
+  
+  if (result == 0)
+    {
+      /* If the MSPs have the same start coord, do a secondary sort 
+       * by alignment length */
+      result = msp1->qRange.length() - msp2->qRange.length();
+    }
+
+  return result;
+}
+
+/* Sort comparison function for sorting by doubles */
+static gint sortByDoubleCompareFunc(const MSP *msp1, const MSP *msp2)
+{
+  gint result = 0;
+  
+  gdouble dResult = msp1->id - msp2->id;
+  
+  if (dResult == 0)
+    result = 0;
+  else if (dResult > 0)
+    result = 1;
+  else 
+    result = -1;
+  
+  return result;
+}
+
+/* Sort comparison function for sorting by the start position on the reference sequence
+ * when we have multiple MSPs to compare (does a secondary sort by alignment length) */
+static gint sortByStartCompareFuncMultiple(GList *mspList1, GList *mspList2, const gboolean msp1Fwd, const gboolean msp2Fwd, const gboolean displayRev)
+{
+  gint result = 0;
+
+  const int coord1 = findMspListQExtent(mspList1, !displayRev, BLXSTRAND_NONE); /* find min coord unless display rev */
+  const int coord2 = findMspListQExtent(mspList2, !displayRev, BLXSTRAND_NONE);
+
+  result = coord1 - coord2;
+
+  if (displayRev)
+    {
+      /* Display is reversed (i.e. numbers shown descending) so reverse the result */
+      result *= -1;
+    }
+
+  return result;
+}
+
+/* Sort comparison function for sorting by string values. Allows NULL values and
+ * sorts them AFTER non-null values. Comparison is case-insensitive. */
+static int sortByStringCompareFunc(const char *str1, const char *str2)
+{
+  int result = 0;
+
+  if (!str1 && !str2)
+    {
+      result = 0;
+    }
+  else if (!str1)
+    {
+      result = 1;
+    }
+  else if (!str2)
+    {
+      result = -1;
+    }
+  else
+    {
+      const int len = min(strlen(str1), strlen(str2));
+      result = g_ascii_strncasecmp(str1, str2, len);
+    }
+  
+  return result;
+}
+
+
+/* Determine the sort order for this column. Columns may have a different default
+ * sort order (e.g. name is sorted ascending, but score is sorted descending.)
+ * However, the opposite sort order is returned if the detail view's invert-sort-
+ * order flag is set. */
+static GtkSortType getColumnSortOrder(BlxContext *bc, const BlxColumnId columnId)
+{
+  GtkSortType result = GTK_SORT_ASCENDING;
+
+  switch (columnId)
+    {
+      case BLXCOL_SCORE: /* fall through */
+      case BLXCOL_ID:
+        result = GTK_SORT_DESCENDING;
+        break;
+        
+      default: /* all others ascending */
+        break;
+    };
+
+  if (bc->flags[BLXFLAG_INVERT_SORT])
+    {
+      result = (result == GTK_SORT_ASCENDING) ? GTK_SORT_DESCENDING : GTK_SORT_ASCENDING;
+    }
+
+  return result;
+}
+
+
+/* We're only interested in sorting exons, basic features and matches */
+static gboolean mspIsSortable(const MSP* const msp)
+{
+  return (msp && (typeIsMatch(msp->type) || mspIsBoxFeature(msp)));
+}
+
+
+/* Sort comparison function for sorting by a particular column of the tree view. */
+gint sortByColumnCompareFunc(GList *mspGList1,
+                             GList *mspGList2,
+                             GtkWidget *detailView, 
+                             const BlxColumnId sortColumn)
+{
+  gint result = 0;
+  
+  /* Get the first MSP in each list. */
+  MSP *msp1 = mspGList1 ? (MSP*)(mspGList1->data) : NULL;
+  MSP *msp2 = mspGList2 ? (MSP*)(mspGList2->data) : NULL;
+
+  /* If an msp is of a type that we don't bother sorting, place it before any that we do sort */
+  if (!mspIsSortable(msp1) && !mspIsSortable(msp2))
+    return 0;
+  else if (!mspIsSortable(msp1))
+    return -1;
+  else if (!mspIsSortable(msp2))
+    return 1;
+
+  /* Check whether either row has more than one MSP. If so, it means some options
+   * aren't applicable (\to do: unless they're short reads, which should be identical if
+   * they're in the same row, so we can treat those as singular). */
+  const gboolean multipleMsps = 
+    (g_list_length(mspGList1) > 1 || g_list_length(mspGList2) > 1);
+  
+  BlxContext *bc = detailViewGetContext(detailView);
+  gboolean displayRev = bc->displayRev;
+
+  switch (sortColumn)
+  {
+    case BLXCOL_NONE:
+      result = 0;
+      break;
+      
+    case BLXCOL_SCORE:
+      result = multipleMsps ? 0 : (int)(msp1->score - msp2->score);
+      break;
+      
+    case BLXCOL_ID:
+      result = multipleMsps ? 0 : sortByDoubleCompareFunc(msp1, msp2);
+      break;
+      
+    case BLXCOL_START:
+      if (multipleMsps)
+        result = sortByStartCompareFuncMultiple(mspGList1, mspGList2, msp1->qStrand == BLXSTRAND_FORWARD, msp2->qStrand == BLXSTRAND_FORWARD, displayRev);
+      else
+        result = sortByStartCompareFunc(msp1, msp2, displayRev);
+      break;
+      
+    case BLXCOL_GROUP:
+      result = sortByGroupCompareFunc(msp1, msp2, detailViewGetBlxWindow(detailView));
+      break;
+      
+    default:
+      /* Generic string column */
+      result = sortByStringCompareFunc(mspGetColumn(msp1, sortColumn), mspGetColumn(msp2, sortColumn));
+      break;
+  };
+
+  /* Invert the result if we need to sort descending instead of ascending. */
+  if (getColumnSortOrder(bc, sortColumn) == GTK_SORT_DESCENDING)
+    {
+      result *= -1;
+    }
+  
+  return result;
+}
+
+
+/* This is the main sort comparison function for comparing two BlxSequences.
+ * The sort criteria are specified in the detailView properties;
+ * we may sort by multiple columns.
+ * 
+ * Returns a negative value if the first row appears before the second,
+ * positive if the second appears before the first, or 0 if they are 
+ * equivalent. */
+static gint detailViewSortByColumns(gconstpointer a, gconstpointer b)
+{
+  gint result = UNSET_INT;
+
+  const BlxSequence *seq1 = (const BlxSequence*)a;
+  const BlxSequence *seq2 = (const BlxSequence*)b;
+
+  GtkWidget *blxWindow = getBlixemWindow();
+  GtkWidget *detailView = blxWindowGetDetailView(blxWindow);
+  GList *columnList = detailViewGetColumnList(detailView);
+  const int numColumns = g_list_length(columnList);
+
+  /* Sort by each requested column in order of priority */
+  BlxColumnId *sortColumns = detailViewGetSortColumns(detailView);
+  
+  if (sortColumns)
+    {
+      int priority = 0;
+
+      for ( ; priority < numColumns; ++priority)
+        {
+          BlxColumnId sortColumn = sortColumns[priority];
+        
+          /* NONE indicates an unused entry in the priority array; if we reach
+           * an unset value, there should be no more values after it */
+          if (sortColumn == BLXCOL_NONE)
+            break;
+
+          /* Extract the MSPs for the two rows that we're comparing */
+          GList *mspGList1 = seq1->mspList;
+          GList *mspGList2 = seq2->mspList;
+  
+          /* Do the comparison on this column */
+          result = sortByColumnCompareFunc(mspGList1, mspGList2, detailView, sortColumn);
+          
+          /* If rows are equal, continue to sort; otherwise we're done */
+          if (result != 0)
+            break;
+        }
+    }
+  
+  return result;
+}
+
+
+
+/* Re-sort all trees */
+void detailViewResortTrees(GtkWidget *detailView)
+{
+  DEBUG_ENTER("detailViewResortTrees()");
+
+  /* Sort the data for each tree */
+  callFuncOnAllDetailViewTrees(detailView, resortTree, NULL);
+
+  /* Sort the list of BlxSequences (uesd by the exon view) */
+  BlxContext *bc = detailViewGetContext(detailView);
+  bc->matchSeqs = g_list_sort(bc->matchSeqs, detailViewSortByColumns);
+
+  bigPictureRedrawAll(detailViewGetBigPicture(detailView));
+
+  DEBUG_EXIT("detailViewResortTrees returning ");
+}
+
+
+/* Set the value of the 'invert sort order' flag */
+void detailViewUpdateSortInverted(GtkWidget *detailView, const gboolean invert)
+{
+  DEBUG_ENTER("detailViewUpdateSortInverted()");
+
+  detailViewResortTrees(detailView);
+
+  DEBUG_EXIT("detailViewUpdateSortInverted returning ");
+}
+
+
+/* Set the value of the 'Show SNP track' flag */
+void detailViewUpdateShowSnpTrack(GtkWidget *detailView, const gboolean showSnpTrack)
+{
+  DEBUG_ENTER("detailViewUpdateShowSnpTrack()");
+
+  refreshDetailViewHeaders(detailView);
+  callFuncOnAllDetailViewTrees(detailView, refreshTreeHeaders, NULL);
+  detailViewRedrawAll(detailView);
+  
+  refreshDialog(BLXDIALOG_SETTINGS, detailViewGetBlxWindow(detailView));
+
+  DEBUG_EXIT("detailViewUpdateShowSnpTrack returning ");
+}
+
+
+/* This performs required updates required after editing anything that affects
+ * the display length of MSPs in the detail-view, e.g. the 'show unaligned sequence'
+ * or 'show polyA tails' options. */
+void detailViewUpdateMspLengths(GtkWidget *detailView, const int numUnalignedBases)
+{
+  DEBUG_ENTER("detailViewUpdateMspLengths()");
+
+  /* Re-calculate the full extent of all MSPs, and the max msp length */
+  setMaxMspLen(0);
+  
+  BlxContext *bc = detailViewGetContext(detailView);
+  MSP *msp = bc->mspList;
+  
+  for ( ; msp; msp = msp->next)
+    {
+      mspCalculateFullExtents(msp, bc, numUnalignedBases);
+    }
+  
+  /* Do a full re-sort and re-filter because the lengths of the displayed match
+   * sequences may have changed (and we need to make sure they're sorted by start pos) */
+  detailViewResortTrees(detailView);
+  callFuncOnAllDetailViewTrees(detailView, refilterTree, NULL);
+  detailViewRedrawAll(detailView);
+
+  DEBUG_EXIT("detailViewUpdateMspLengths returning ");
+}
+
+
+/* Set the number of additional bases to show for the show-unaligned-sequence option */
+void detailViewSetNumUnalignedBases(GtkWidget *detailView, const int numBases)
+{
+  DEBUG_ENTER("detailViewSetNumUnalignedBases()");
+
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+  properties->numUnalignedBases = numBases;
+  detailViewUpdateMspLengths(detailView, properties->numUnalignedBases);
+
+  DEBUG_EXIT("detailViewSetNumUnalignedBases returning ");
+}
+
+
+int getBaseIndexAtColCoords(const int x, const int y, const gdouble charWidth, const IntRange* const displayRange)
+{
+  int result = UNSET_INT;
+  
+  const int leftEdge = 0; /* to do: allow for padding? check upper bound? */
+  
+  if (x > leftEdge)
+    {
+      result = (int)(((gdouble)x - leftEdge) / charWidth);
+    }
+  
+  result += displayRange->min();
+  
+  return result;
+}
+
+
+/* Get the nucleotide at the given x/y position in the given sequence-column header (protein
+ * matches only). */
+static void getSeqColHeaderClickedNucleotide(GtkWidget *header, GtkWidget *detailView, const int x, const int y, int *coordOut, int *frameOut, int *baseOut)
+{
+  int coord = getBaseIndexAtColCoords(x, y, detailViewGetCharWidth(detailView), detailViewGetDisplayRange(detailView));
+  
+  if (coord != UNSET_INT)
+    {   
+      /* Get the base number of the clicked base within the active frame. The
+       * base number is determined by which row in the header the mouse pointer 
+       * is over: for frame 1, row 1 will give base 1; for frame 2, row 2 will
+       * give base 1, etc. Start by getting the frame number for the clicked row: */
+      int frame = detailViewGetActiveFrame(detailView);
+      int row = seqColHeaderGetRow(header);
+      const int numFrames = detailViewGetNumFrames(detailView);
+      
+      /* The header widget passed to this function is the originally-clicked widget.
+       * If the pointer has dragged onto another row in the header, we can work out
+       * which one based on the y coord. If it is outside altogether, take the 
+       * topmost/bottommost row. (NB this assumes all rows in the header have the 
+       * same height as this one - should be true because they're just simple labels). */
+      if (y < 0 || y > header->allocation.height)
+        {
+          const int offsetRows = floor((double)y / (double)header->allocation.height); /* can be negative */
+          row += offsetRows;
+          
+          if (row < 1)
+            {
+              row = 1;
+            }
+          else if (row > numFrames)
+            {
+              row = numFrames;
+            }
+        }
+      
+      /* Calculate the base number based on the row and the currently-active frame */
+      int baseNum = row - frame + 1;
+      
+      if (baseNum < 1)
+        {
+          /* Cycle round if gone below the min base number */
+          baseNum += numFrames;
+          --coord;
+        }
+      
+      if (coordOut)
+        *coordOut = coord;
+      
+      if (frameOut)
+        *frameOut = frame;
+      
+      if (baseOut)
+        *baseOut = baseNum;
+    }
+}
+
+
+/* Select the coord at the given x,y position in the given sequence column header */
+static void selectClickedNucleotide(GtkWidget *header, GtkWidget *detailView, const int x, const int y, const gboolean extend)
+{
+  DEBUG_ENTER("selectClickedNucleotide()");
+
+  int coord, frame, baseNum;
+  getSeqColHeaderClickedNucleotide(header, detailView, x, y, &coord, &frame, &baseNum);
+  
+  detailViewSetSelectedDisplayIdx(detailView, coord, frame, baseNum, FALSE, TRUE, extend);
+
+  DEBUG_EXIT("selectClickedNucleotide returning ");
+}
+
+
+/* If the user clicked on a SNP in the SNP header, select it. This updates the 
+ * feedback box with the SNP name and coord, selects the SNP coord and recentres 
+ * on it (if allowScroll is true), clearing any previous selections. If expandSnps
+ * is true it means that the SNPs are drawn full-width (i.e. showing all the sequence
+ * in the MSP) and we should take into account when clicking; otherwise, the SNP
+ * is just shown as a marker at its actual coord, and we only need to check the
+ * position of that coord to see if the user clicked there. snpTrack is the widget
+ * that was clicked on and the optional 'colHeader' argument can be passed if coordinates
+ * should be converted to the coordinate system of that column header (i.e. if the SNP track
+ * widget is not the same width of the sequence column, the coords will need converting). */
+void selectClickedSnp(GtkWidget *snpTrack,
+                      GtkWidget *colHeader,
+                      GtkWidget *detailView, 
+                      const int xIn, 
+                      const int yIn, 
+                      const gboolean expandSnps,
+                      const int clickedBase)
+{
+  DEBUG_ENTER("selectClickedSnp()");
+
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+  GtkWidget *blxWindow = detailViewGetBlxWindow(detailView);
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+  const int activeFrame = detailViewGetActiveFrame(detailView);
+  
+  /* Convert x coord to sequence-column coords */
+  int x = xIn, y = yIn;
+  
+  if (colHeader)
+    {
+      gtk_widget_translate_coordinates(snpTrack, colHeader, xIn, 0, &x, NULL);
+    }
+
+  int clickedDisplayIdx = getBaseIndexAtColCoords(x, y, properties->charWidth(), &properties->displayRange);
+
+  /* Get the clicked row index (0-based) */
+  const int rowHeight = ceil(properties->charHeight());
+  const int clickedRow = y / rowHeight;
+  const int numRows = getNumSnpTrackRows(bc, properties, snpTrackGetStrand(snpTrack, detailView), activeFrame);
+
+  if (clickedDisplayIdx != UNSET_INT)
+    {
+      /* Loop through all variations and see if there are any at this displayIdx and row */
+      GList *snpList = NULL;
+      GSList *rows = NULL;
+      int i = 0;
+      const MSP *msp = mspArrayIdx(bc->featureLists[BLXMSP_VARIATION], i);
+      
+      for ( ; msp; msp = mspArrayIdx(bc->featureLists[BLXMSP_VARIATION], ++i))
+        {
+          /* Get the variation coords in terms of display coords, and also the 'expanded' range
+           * of coords where the variation is displayed */
+          IntRange mspExpandedRange;
+          getVariationDisplayRange(msp, expandSnps, bc->seqType, bc->numFrames, bc->displayRev, activeFrame, &bc->refSeqRange, NULL, &mspExpandedRange);
+          
+          const int clickedDnaIdx = convertDisplayIdxToDnaIdx(clickedDisplayIdx, bc->seqType, 1, clickedBase, bc->numFrames, bc->displayRev, &bc->refSeqRange);
+          gboolean found = FALSE;
+          int dnaIdxToSelect = UNSET_INT;
+          
+          /* Get the row this variation is in */
+          int mspRow = 1;
+          if (expandSnps)
+            mspRow = getVariationRowNumber(&mspExpandedRange, numRows, &rows) - 1;
+
+          if (expandSnps && valueWithinRange(clickedDisplayIdx, &mspExpandedRange) && mspRow == clickedRow)
+            {
+              /* We clicked inside this MSP on the variation track. Select the first coord in
+               * the MSP. */
+              found = TRUE;
+              dnaIdxToSelect = msp->qRange.min();
+            }
+          else if (!expandSnps && valueWithinRange(clickedDnaIdx, &msp->qRange))
+            {
+              /* We clicked on a coord in the ref seq header that is affected by this variation.
+               * Select the clicked coord. */
+              found = TRUE;
+              dnaIdxToSelect = clickedDnaIdx;
+            }
+          
+          if (found)
+            {
+              snpList = g_list_prepend(snpList, msp->sSequence);
+              detailViewSetSelectedDnaBaseIdx(detailView, dnaIdxToSelect, activeFrame, TRUE, FALSE, FALSE);
+            }
+        }
+      
+      freeRowsList(rows);
+
+      /* Clear any existing selections and select the new SNP(s) */
+      blxWindowSetSelectedSeqList(blxWindow, snpList);
+    }
+
+  DEBUG_EXIT("selectClickedSnp returning ");
+}
+
+
+/***********************************************************
+ *                          Drawing                        *
+ ***********************************************************/
+
+/* Draw a vertical separator line at the edges of the given widget */
+void drawColumnSeparatorLine(GtkWidget *widget, 
+                             GdkDrawable *drawable, 
+                             GdkGC *gc, 
+                             const BlxContext *bc)
+{
+  const int lineWidth = 1; /* width of the separator lines */
+  
+  if (GTK_WIDGET_VISIBLE(widget) && widget->allocation.width > lineWidth)
+    {
+      GdkColor *color = getGdkColor(BLXCOLOR_TREE_GRID_LINES, bc->defaultColors, FALSE, bc->usePrintColors);
+      gdk_gc_set_foreground(gc, color);
+      
+      /* We want dashed lines */
+      gdk_gc_set_line_attributes(gc, lineWidth, GDK_LINE_ON_OFF_DASH, GDK_CAP_BUTT, GDK_JOIN_MITER);
+      
+      /* Make the dashes very short and closely packed (i.e. dash length of 1 pixel and gaps of 1 pixel) */
+      int listLen = 1;
+      gint8 dashList[listLen];
+      dashList[0] = 1;
+      gdk_gc_set_dashes(gc, 0, dashList, listLen);
+      
+      /* Draw vertical lines. Draw the rightmost edge of each widget (because we don't really want a
+       * line at the leftmost edge of the first cell of the tree view.) */
+      const int x = widget->allocation.x + widget->allocation.width - lineWidth;
+      const int y1 = widget->allocation.y;
+      const int y2 = y1 + widget->allocation.height;
+      
+      gdk_draw_line(drawable, gc, x, y1, x, y2);
+    }
+}
+
+
+/* Populates the 'bases' string with the two bases from the ref seq adjacent to the start/end
+ * of the given MSP (if it is an exon/match). 'Start' here means at the lower value coord end
+ * of the MSP. 'revStrand' is true if this MSP is on the reverse strand of the ref seq */
+static void mspGetAdjacentBases(const MSP* const msp, char *bases, const gboolean start, const gboolean revStrand, const BlxContext *bc)
+{
+  if (start)
+    {
+      bases[0] = getSequenceIndex(bc->refSeq, msp->qRange.min() - 2, revStrand, &bc->refSeqRange, BLXSEQ_DNA);
+      bases[1] = getSequenceIndex(bc->refSeq, msp->qRange.min() - 1, revStrand, &bc->refSeqRange, BLXSEQ_DNA);
+      bases[2] = '\0';
+    }  
+  else
+    {
+      bases[0] = getSequenceIndex(bc->refSeq, msp->qRange.max() + 1, revStrand, &bc->refSeqRange, BLXSEQ_DNA);
+      bases[1] = getSequenceIndex(bc->refSeq, msp->qRange.max() + 2, revStrand, &bc->refSeqRange, BLXSEQ_DNA);
+      bases[2] = '\0';
+    }
+}
+
+
+/* This function returns the prev/next MSP in the given sequence in order of start position on
+ * the ref seq. Returns the next MSP (with the next-highest start coord) if 'getNext' is true; 
+ * otherwise returns the previous one. The return value will be NULL if there is no next/prev MSP.
+ * The error will be set if there was any problem (e.g. if the given MSP does not exist the the sequence).
+ * Only considers exons and matches. */
+static const MSP* sequenceGetNextMsp(const MSP* const msp, 
+                                     const BlxSequence *blxSeq, 
+                                     const gboolean getNext, 
+                                     GError **error)
+{
+  const MSP *result = NULL;
+
+  GList *mspItem = blxSeq->mspList;
+  const MSP *prevMsp = NULL;
+  gboolean found = FALSE;
+  
+  /* Loop through all MSPs and look for the given one. */
+  for ( ; mspItem; mspItem = mspItem->next)
+    {
+      const MSP* const curMsp = (const MSP*)(mspItem->data);
+      
+      if (curMsp == msp)
+        {
+          found = TRUE;
+          
+          /* If looking for the previous MSP, we already know it. */
+          if (!getNext)
+            {
+              result = prevMsp;
+              break;
+            }
+          else
+            {
+              /* Continue looping to find the next MSP. */
+              continue;
+            }
+        }
+      
+      if (found && getNext)
+        {
+          /* We've found the input MSP and we're on the next one. See if it is an exon/match,
+           * otherwise continue looping. */
+          if (mspIsBoxFeature(curMsp) || mspIsBlastMatch(msp))
+            {
+              result = curMsp;
+              break;
+            }
+        }
+      
+      /* Set the previous MSP (but only if it's an exon/match) */
+      if (mspIsBoxFeature(curMsp) || mspIsBlastMatch(curMsp))
+        {
+          prevMsp = curMsp;
+        }
+    }
+  
+  if (!found && error)
+    {
+      g_set_error(error, BLX_ERROR, 1, "The given MSP '%s' was not found in the given sequence '%s'.\n", mspGetSName(msp), blxSequenceGetName(blxSeq));
+    }
+  
+  return result;
+}
+
+
+/* Determine whether the bases at the other end of the intron for the start/end of 
+ * the given MSP are canonical. 'canonicalStart' and 'canonicalEnd' contain the two bases to look
+ * for at the start/end of the next/previous MSP to determine if the result is canonical. */
+static gboolean mspIsSpliceSiteCanonicalOtherEnd(const MSP* const msp,
+                                                 const BlxSequence *blxSeq,
+                                                 const gboolean isMinCoord, 
+                                                 const gboolean revStrand,
+                                                 const gboolean donor,
+                                                 const gboolean revcomp,
+                                                 const BlxContext *bc,
+                                                 const BlxSpliceSite *spliceSite)
+{
+  gboolean result = FALSE;
+ 
+  /* Get the previous MSP if we're looking at the min coord of the current MSP, or 
+   * the next MSP if we're at the end */
+  const MSP *nextMsp = sequenceGetNextMsp(msp, blxSeq, !isMinCoord, NULL);
+  
+  if (nextMsp)
+    {
+      /* Get the two bases at the end of the previous MSP / start of the next MSP */
+      char bases[3];
+      mspGetAdjacentBases(nextMsp, bases, !isMinCoord, revStrand, bc);
+      
+      /* If the original site was a donor site, look for an acceptor site (or vice versa) */
+      const char *canonicalBases = spliceSiteGetBases(spliceSite, !donor, revStrand, revcomp);
+
+      if (stringsEqual(bases, canonicalBases, FALSE))
+        {
+          result = TRUE;
+        }
+    }
+  
+  return result;
+}
+
+
+/* Create a BlxSpliceSite and add it to the given list */
+static void addBlxSpliceSite(GSList **spliceSites, const char *donorSite, const char *acceptorSite, const gboolean bothReqd)
+{
+  BlxSpliceSite *spliceSite = new BlxSpliceSite;
+
+  if (strlen(donorSite) < 2 || strlen(acceptorSite) < 2)
+    {
+      g_critical("Error adding splice site info ['%s', '%s'].\n", donorSite, acceptorSite);
+      return;
+    }
+  
+  spliceSite->donorSite[0] = donorSite[0];
+  spliceSite->donorSite[1] = donorSite[1];
+  spliceSite->donorSite[2] = '\0';
+
+  spliceSite->donorSiteComp[0] = complementChar(donorSite[0], NULL);
+  spliceSite->donorSiteComp[1] = complementChar(donorSite[1], NULL);
+  spliceSite->donorSiteComp[2] = '\0';
+
+  spliceSite->donorSiteRev[0] = donorSite[1];
+  spliceSite->donorSiteRev[1] = donorSite[0];
+  spliceSite->donorSiteRev[2] = '\0';
+
+  spliceSite->donorSiteRevComp[0] = complementChar(donorSite[1], NULL);
+  spliceSite->donorSiteRevComp[1] = complementChar(donorSite[0], NULL);
+  spliceSite->donorSiteRevComp[2] = '\0';
+
+
+  spliceSite->acceptorSite[0] = acceptorSite[0];
+  spliceSite->acceptorSite[1] = acceptorSite[1];
+  spliceSite->acceptorSite[2] = '\0';
+  
+  spliceSite->acceptorSiteComp[0] = complementChar(acceptorSite[0], NULL);
+  spliceSite->acceptorSiteComp[1] = complementChar(acceptorSite[1], NULL);
+  spliceSite->acceptorSiteComp[2] = '\0';
+  
+  spliceSite->acceptorSiteRev[0] = acceptorSite[1];
+  spliceSite->acceptorSiteRev[1] = acceptorSite[0];
+  spliceSite->acceptorSiteRev[2] = '\0';
+  
+  spliceSite->acceptorSiteRevComp[0] = complementChar(acceptorSite[1], NULL);
+  spliceSite->acceptorSiteRevComp[1] = complementChar(acceptorSite[0], NULL);
+  spliceSite->acceptorSiteRevComp[2] = '\0';
+  
+  spliceSite->bothReqd = bothReqd;
+  
+  /* Add it to the list */
+  *spliceSites = g_slist_append(*spliceSites, spliceSite);
+}
+
+
+/* Frees the memory used by a BlxSpliceSite */
+static void destroyBlxSpliceSite(gpointer listItemData, gpointer data)
+{
+  BlxSpliceSite *spliceSite = (BlxSpliceSite*)listItemData;
+  
+  delete spliceSite;
+}
+
+
+/* Return the canonical bases at the donor/acceptor end of the given BlxSpliceSite. Returns them in
+ * reverse order if 'reverse' is true, e.g. for a GC-AG intron, the dono is GC and acceptor is AG.
+ * If reverse is true the donor returns CG and acceptor returns GA. The result is a pointer to the
+ * string in the splice site, which is owned by the Detail View properties. 
+ * If revcomp is true, then revcomp the result and swap whether it's a donor or acceptor. */
+static const char* spliceSiteGetBases(const BlxSpliceSite *spliceSite, 
+                                      const gboolean donor,
+                                      const gboolean reverse,
+                                      const gboolean revcomp)
+{
+  const char *result = NULL;
+
+  if (revcomp)
+    {
+      /* Reverse the logic for everything and use complement */
+      if (donor)
+        result = reverse ? spliceSite->acceptorSiteComp : spliceSite->acceptorSiteRevComp;
+      else
+        result = reverse ? spliceSite->donorSiteComp : spliceSite->donorSiteRevComp;
+    }
+  else
+    {
+      if (donor)
+        result = reverse ? spliceSite->donorSiteRev : spliceSite->donorSite;
+      else
+        result = reverse ? spliceSite->acceptorSiteRev : spliceSite->acceptorSite;
+    }
+
+  return result;
+}
+
+
+/* Determines whether the intron splice sites for the given MSP are canonical or not and returns
+ * the relevant highlight color: green for canonical and red for non-canonical.
+ * We look for GT-AG, GC-AG or AT-AC introns. The latter must have both ends of the intron matching
+ * to be canonical. GC is the donor site and AG is the acceptor site.
+ * We may also return orange if a site is "maybe" canonical. This means it would be canonical if
+ * it were on the other strand (i.e its revcomp is canonical). This is useful for identifying
+ * errors in input data (common in BAM, which doesn't have comprehensive representation of all
+ * strand combinations). */
+static BlxColorId getMspSpliceSiteColor(const MSP* const msp, 
+                                        const BlxSequence *blxSeq, 
+                                        const gboolean isMinCoord, 
+                                        const gboolean revStrand,
+                                        const BlxContext *bc,
+                                        GSList *spliceSites)
+{
+  BlxColorId colorId = BLXCOLOR_NON_CANONICAL;
+  gboolean canonical = FALSE;
+  gboolean maybe_canonical = FALSE;
+
+  GSList *item = spliceSites;
+  for ( ; item; item = item->next)
+    {
+      const BlxSpliceSite *spliceSite = (const BlxSpliceSite*)(item->data);
+
+      /* Get the two adjacent bases at the start/end of the given MSP */
+      char bases[3];
+      mspGetAdjacentBases(msp, bases, isMinCoord, revStrand, bc);
+      
+      /* The min coord end of the MSP is the acceptor site of the intron and the max coord the 
+       * donor site (or vice versa if the strand is reversed). */
+      const gboolean donor = (isMinCoord == revStrand);
+      gboolean revcomp = FALSE;
+      const char *canonicalBases = spliceSiteGetBases(spliceSite, donor, revStrand, revcomp);
+
+      if (stringsEqual(bases, canonicalBases, FALSE))
+        {
+          if (spliceSite->bothReqd)
+            {
+              /* Must also check if the other end of the intron matches */
+              if (mspIsSpliceSiteCanonicalOtherEnd(msp, blxSeq, isMinCoord, revStrand, donor, revcomp, bc, spliceSite))
+                {
+                  canonical = TRUE;
+                  break;
+                }
+            }
+          else
+            {
+              canonical = TRUE;
+              break;
+            }
+        }
+      else if (bc->flags[BLXFLAG_SHOW_MAYBE_CANONICAL] && !maybe_canonical) /* don't need to check if already set */
+        {
+          /* Check if the revcomp would be canonical. Toggle the donor and revStrand flags - this gets
+           * the expected bases as if it were the "other" splice site (i.e. donor vs acceptor)
+           * and reverses the order of the bases. We also need to complement them. */
+          revcomp = TRUE;
+          canonicalBases = spliceSiteGetBases(spliceSite, donor, revStrand, revcomp);
+
+          if (stringsEqual(bases, canonicalBases, FALSE))
+            {
+              if (spliceSite->bothReqd)
+                {
+                  /* Must also check if the other end of the intron matches */
+                  if (mspIsSpliceSiteCanonicalOtherEnd(msp, blxSeq, isMinCoord, revStrand, donor, revcomp, bc, spliceSite))
+                    {
+                      /* don't break because we need to continue to check in case it's definitely canonical */
+                      maybe_canonical = TRUE;
+                    }
+                }
+              else
+                {
+                  /* don't break because we need to continue to check in case it's definitely canonical */
+                  maybe_canonical = TRUE;
+                }
+            }
+        }
+    }
+
+  if (canonical)
+    colorId = BLXCOLOR_CANONICAL;
+  else if (maybe_canonical)
+    colorId = BLXCOLOR_MAYBE_CANONICAL;
+  else
+    colorId = BLXCOLOR_NON_CANONICAL;
+
+  return colorId;
+}
+
+
+/* If the given MSP is an exon/match, get the 2 nucleotides from the reference sequence at the
+ * splice sites of the adjacent introns. Inserts the results into the given hash table with
+ * an enum indicating whether the nucleotides are canonical/non-canonical. Only considers
+ * MSPs that are within the given ref seq range. */
+static void mspGetSpliceSiteCoords(const MSP* const msp, 
+                                   const BlxSequence *blxSeq, 
+                                   const IntRange* const qRange, 
+                                   const BlxContext *bc, 
+                                   GSList *spliceSites,
+                                   GHashTable *result)
+{
+  const gboolean revStrand = (mspGetRefStrand(msp) != BLXSTRAND_FORWARD);
+  
+  /* Ignore the termini (i.e. 5' end of first exon and 3' end of last exon) */
+  const gboolean getMin = (msp->sSequence && msp->qRange.min() != blxSequenceGetStart(msp->sSequence, msp->qStrand));
+  const gboolean getMax = (msp->sSequence && msp->qRange.max() != blxSequenceGetEnd(msp->sSequence, msp->qStrand));
+  
+  /* See if the min coord is within the given range */
+  if (getMin && valueWithinRange(msp->qRange.min(), qRange) && msp->qRange.min() >= bc->refSeqRange.min() + 2)
+    {
+      /* Find out if the adjacent bases are canonical/non-canonical. */
+      BlxColorId colorId = getMspSpliceSiteColor(msp, blxSeq, TRUE, revStrand, bc, spliceSites);
+
+      /* Insert the two coords into the hash table */
+      g_hash_table_insert(result, GINT_TO_POINTER(msp->qRange.min() - 2), GINT_TO_POINTER(colorId));
+      g_hash_table_insert(result, GINT_TO_POINTER(msp->qRange.min() - 1), GINT_TO_POINTER(colorId));
+    }
+  
+  /* See if the max coord is within the given range */
+  if (getMax && valueWithinRange(msp->qRange.max(), qRange) && msp->qRange.max() <= bc->refSeqRange.max() - 2)
+    {
+      /* Find out if they are canonical/non-canonical */
+      BlxColorId colorId = getMspSpliceSiteColor(msp, blxSeq, FALSE, revStrand, bc, spliceSites);
+      
+      /* Insert the two coords into the hash table */
+      g_hash_table_insert(result, GINT_TO_POINTER(msp->qRange.max() + 1), GINT_TO_POINTER(colorId));
+      g_hash_table_insert(result, GINT_TO_POINTER(msp->qRange.max() + 2), GINT_TO_POINTER(colorId));
+    }
+}
+
+
+/* This looks through all of the polyA signals and sees if any of them are in the given display
+ * range (in nucleotide coords) and whether we want to display them. If the 'display polyA signals for
+ * selected sequences only' option is enabled, then any selected sequence MSPs that have polyA tails
+ * should be passed in the given GSList. Any coords within a relevant polyA signal range are added to
+ * the given hash table with the BlxColorId that they should be drawn with. */
+static void getAnnotatedPolyASignalBasesToHighlight(const BlxContext *bc,
+                                                    GSList *polyATailMsps,
+                                                    const BlxStrand qStrand,
+                                                    const IntRange* const qRange,
+                                                    GHashTable *result)
+{
+  /* We've more work to do if showing polyA signals (unless we're only showing them for selected
+   * sequences and there were no relevant selected sequences) */
+  if (bc->flags[BLXFLAG_SHOW_POLYA_SIG] && (!bc->flags[BLXFLAG_SHOW_POLYA_SIG_SELECTED] || g_slist_length(polyATailMsps) > 0))
+    {
+      BlxColorId colorId = BLXCOLOR_POLYA_SIGNAL_ANN;
+
+      /* Loop through all polyA signals */
+      int i = 0;
+      const MSP *sigMsp = mspArrayIdx(bc->featureLists[BLXMSP_POLYA_SIGNAL], i);
+      
+      for ( ; sigMsp; sigMsp = mspArrayIdx(bc->featureLists[BLXMSP_POLYA_SIGNAL], ++i))
+        {
+          /* Only interested the polyA signal has the correct strand and is within the display range. */
+          if (sigMsp->qStrand == qStrand && rangesOverlap(&sigMsp->qRange, qRange))
+            {
+              gboolean addSignal = FALSE;
+              
+              if (bc->flags[BLXFLAG_SHOW_POLYA_SIG_SELECTED])
+                {
+                  /* We're only interested in polyA signals that are 50 bases upstream of one of our polyA-tail MSPs */
+                  GSList *item = polyATailMsps;
+                  
+                  for ( ; item && !addSignal; item = item->next)
+                    {
+                      const MSP* const tailMsp = (const MSP*)(item->data);
+                      const int qEnd = tailMsp->qRange.max();
+                      const int qStart = qEnd - POLYA_SIG_BASES_UPSTREAM;
+                      
+                      IntRange upstreamRange(qStart, qEnd); /* sorts out which is min and which is max */
+                                        
+                      addSignal = rangesOverlap(&sigMsp->qRange, &upstreamRange);
+                    }
+                }
+              else
+                {
+                  /* Add all signals that are in the display range */
+                  addSignal = TRUE;
+                }
+            
+              if (addSignal)
+                {
+                  /* Add each base in the polyA signal range to the hash table. This may overwrite
+                   * splice site bases that we previously found, which is fine (something has to take priority). */
+                  int i = sigMsp->qRange.min();
+                  for ( ; i <= sigMsp->qRange.max(); ++i)
+                    {
+                      g_hash_table_insert(result, GINT_TO_POINTER(i), GINT_TO_POINTER(colorId));
+                    }
+                }
+            }
+        }
+    }
+}
+
+
+/* Scan upstream from any polyA tails to see if there are any polyA signals in the reference
+ * sequence. Actually, because the visible range in the detail-view is generally quite small and
+ * we don't want to re-scan lots of times, lets just scan through the whole visible range once
+ * and show all signals - but only if there is at least one visible polyA tail in the range. */
+static void getPolyASignalBasesToHighlight(GtkWidget *detailView,
+                                           const BlxContext *bc,
+                                           GSList *polyATailMsps,
+                                           const IntRange* const qRange,
+                                           GHashTable *result)
+{
+  /* If only showing polyAs for selected sequences, check that there's a (selected) msp with a
+     polyA tail in range (i.e. in the input list). Otherwise show all polyA signals. */
+  if (bc->flags[BLXFLAG_SHOW_POLYA_SIG] && (!bc->flags[BLXFLAG_SHOW_POLYA_SIG_SELECTED] || g_slist_length(polyATailMsps) > 0))
+    {
+      BlxColorId colorId = BLXCOLOR_POLYA_SIGNAL;
+
+      /* Loop through each base in the visible range */
+      const char *seq = bc->refSeq;
+      int idx = qRange->min() - bc->refSeqRange.min(); /* convert to 0-based */
+      const int max_idx = qRange->max() - bc->refSeqRange.min(); /* convert to 0-based */
+      const char *comparison = POLYA_SIGNAL;
+      const int comparison_len = strlen(comparison);
+      const char *cp = NULL;
+
+      for ( ; idx < max_idx && cp && *cp; ++idx)
+        {
+          if (idx < 0)
+            continue;
+
+          cp = seq + idx;
+
+          if (cp == NULL || *cp == 0)
+            break;
+
+          if (!strncasecmp(cp, comparison, comparison_len))
+            {
+              /* Add each base in the polyA signal range to the hash table. This may overwrite
+               * splice site bases that we previously found, which is fine (something has to take priority). */
+              int i = idx + bc->refSeqRange.min(); /* convert back to coords */
+              const int max = i + comparison_len;
+
+              for ( ; i < max; ++i)
+                {
+                  g_hash_table_insert(result, GINT_TO_POINTER(i), GINT_TO_POINTER(colorId));
+                }
+            }
+        }
+    }
+}
+
+
+/* This looks through all of the polyA sites and sees if any of them are in the given display
+ * range (in nucleotide coords) and whether we want to display them. */
+static void getAnnotatedPolyASiteBasesToHighlight(const BlxContext *bc,
+                                                  const BlxStrand qStrand,
+                                                  const IntRange* const qRange,
+                                                  GHashTable *result)
+{
+  /* We've more work to do if showing polyA signals (unless we're only showing them for selected
+   * sequences and there were no relevant selected sequences) */
+  if (bc->flags[BLXFLAG_SHOW_POLYA_SIG])
+    {
+      BlxColorId colorId = BLXCOLOR_POLYA_SITE_ANN;
+
+      /* Loop through all polyA signals */
+      int i = 0;
+      const MSP *siteMsp = mspArrayIdx(bc->featureLists[BLXMSP_POLYA_SITE], i);
+      
+      for ( ; siteMsp; siteMsp = mspArrayIdx(bc->featureLists[BLXMSP_POLYA_SITE], ++i))
+        {
+          /* Only interested the polyA site has the correct strand and is within the display range. */
+          if (siteMsp->qStrand == qStrand && rangesOverlap(&siteMsp->qRange, qRange))
+            {
+              /* Add just the first base in the polyA signal range to the hash table (because the
+               * site is between the two bases in the range and we only want to draw it once). */
+              g_hash_table_insert(result, GINT_TO_POINTER(siteMsp->qRange.min()), GINT_TO_POINTER(colorId));
+            }
+        }
+    }
+}
+
+
+/* This function looks for special bases in the reference sequence header to highlight and stores their
+ * coords in the returned hash table with the BlxColorId (converted to a gpointer with GINT_TO_POINTER)
+ * of the fill color they should be drawn with. These special coords include splice sites and polyA signals. */
+GHashTable* getRefSeqBasesToHighlight(GtkWidget *detailView, 
+                                      const IntRange* const qRange, 
+                                      const BlxSeqType seqType,
+                                      const BlxStrand qStrand)
+{
+  GHashTable *result = g_hash_table_new(g_direct_hash, g_direct_equal);
+
+  GtkWidget *blxWindow = detailViewGetBlxWindow(detailView);
+  const BlxContext *bc = blxWindowGetContext(blxWindow);
+  
+  /* We only highlight nucleotides, so there is nothing to do if we're showing a peptide sequence,
+   * or if the show-splice-sites or show-polyA-signals options are disabled. */
+  if (seqType == BLXSEQ_PEPTIDE || 
+      (!bc->flags[BLXFLAG_SHOW_SPLICE_SITES] && !bc->flags[BLXFLAG_SHOW_POLYA_SIG]))
+    {
+      return result;
+    }
+  
+  /* Loop through the selected sequences. If showing polyA signals for selected sequences, we'll 
+   * compile a list of MSPs we're interested in seeing polyA signals for (i.e. those with polyA tails) */
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+  GList *seqItem = blxWindowGetSelectedSeqs(blxWindow);
+  GSList *polyATailMsps = NULL;
+  
+  for ( ; seqItem; seqItem = seqItem->next)
+    {
+      const BlxSequence *blxSeq = (const BlxSequence*)(seqItem->data);
+      GList *mspItem = blxSeq->mspList;
+     
+      /* Loop through all MSPs for this sequence */ 
+      for ( ; mspItem; mspItem = mspItem->next)
+        {
+          MSP *msp = (MSP*)(mspItem->data);
+          
+          /* Only look at matches/exons on the correct strand */
+          if ((mspIsBlastMatch(msp) || msp->type == BLXMSP_EXON || msp->type == BLXMSP_BASIC) && 
+              mspGetRefStrand(msp) == qStrand)
+            {
+              if (bc->flags[BLXFLAG_SHOW_SPLICE_SITES])
+                mspGetSpliceSiteCoords(msp, blxSeq, qRange, bc, properties->spliceSites, result);
+              
+              if (bc->flags[BLXFLAG_SHOW_POLYA_SIG] && mspHasPolyATail(msp))
+                polyATailMsps = g_slist_append(polyATailMsps, msp);
+            }
+        }
+    }
+  
+  /* Now check the polyA signals and sites and see if any of them are in range. */
+  getPolyASignalBasesToHighlight(detailView, bc, polyATailMsps, qRange, result);
+  getAnnotatedPolyASignalBasesToHighlight(bc, polyATailMsps, qStrand, qRange, result);
+  getAnnotatedPolyASiteBasesToHighlight(bc, qStrand, qRange, result);
+
+  return result;
+}
+
+
+static void drawDnaTrack(GtkWidget *dnaTrack, GtkWidget *detailView, const BlxStrand strand, const int frame)
+{
+  GdkDrawable *drawable = createBlankPixmap(dnaTrack);
+  
+  GtkWidget *blxWindow = detailViewGetBlxWindow(detailView);
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+  
+  /* Find the segment of the ref sequence to display (complemented if this tree is
+   * displaying the reverse strand, and reversed if the display is toggled). Ref seq
+   * coords are in nucleotides, so convert display range to nucleotide coords. */
+  IntRange *displayRange = detailViewGetDisplayRange(detailView);
+  
+  const int qIdx1 = convertDisplayIdxToDnaIdx(displayRange->min(), bc->seqType, frame, 1, bc->numFrames, bc->displayRev, &bc->refSeqRange);         /* 1st base in frame */
+  const int qIdx2 = convertDisplayIdxToDnaIdx(displayRange->max(), bc->seqType, frame, bc->numFrames, bc->numFrames, bc->displayRev, &bc->refSeqRange); /* last base in frame */
+  IntRange qRange = {min(qIdx1, qIdx2), max(qIdx1, qIdx2)};
+  
+  GError *error = NULL;
+  
+  gchar *segmentToDisplay = getSequenceSegment(bc->refSeq,
+                                               &qRange,
+                                               strand, 
+                                               BLXSEQ_DNA,      /* ref seq is always in nucleotide coords */
+                                               BLXSEQ_DNA,      /* required segment is in nucleotide coords */
+                                               frame, 
+                                               bc->numFrames,
+                                               &bc->refSeqRange,
+                                               bc->blastMode,
+                                               bc->geneticCode,
+                                               bc->displayRev,
+                                               bc->displayRev,
+                                               bc->displayRev,
+                                               &error);
+  
+  if (!segmentToDisplay)
+    {
+      g_assert(error);
+      prefixError(error, "Could not draw DNA header. ");
+      reportAndClearIfError(&error, G_LOG_LEVEL_WARNING);
+      return;
+    }
+  else
+    {
+      /* If there's an error but the sequence was still returned it's a non-critical warning */
+      reportAndClearIfError(&error, G_LOG_LEVEL_WARNING);
+    }
+    
+    
+  GdkGC *gc = gdk_gc_new(drawable);
+  
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+  const int activeFrame = detailViewGetActiveFrame(detailView);
+  const BlxStrand activeStrand = blxWindowGetActiveStrand(blxWindow);
+  const gboolean highlightSnps = bc->flags[BLXFLAG_HIGHLIGHT_VARIATIONS];
+
+  gtk_layout_set_size(GTK_LAYOUT(dnaTrack), dnaTrack->allocation.width, roundNearest(properties->charHeight()));
+  
+  /* Find out if there are any bases in the introns that need highlighting. */
+  GHashTable *basesToHighlight = getRefSeqBasesToHighlight(detailView, &qRange, BLXSEQ_DNA, activeStrand);
+  
+  /* We'll loop forward/backward through the display range depending on which strand we're viewing */
+  int incrementValue = bc->displayRev ? -bc->numFrames : bc->numFrames;
+  int displayLen = qRange.length();
+  char displayText[displayLen + 1];
+  int displayTextPos = 0;
+  
+  int qIdx = bc->displayRev ? qRange.max() : qRange.min();
+  int displayIdx = convertDnaIdxToDisplayIdx(qIdx, bc->seqType, activeFrame, bc->numFrames, bc->displayRev, &bc->refSeqRange, NULL);
+  const int y = 0;
+  DrawBaseData baseData = {qIdx,
+                           0,
+                           strand,
+                           UNSET_INT,
+                           BLXSEQ_DNA,
+                           TRUE,
+                           FALSE,
+                           FALSE,
+                           FALSE,
+                           highlightSnps,
+                           TRUE,
+                           BLXCOLOR_BACKGROUND,
+                           NULL,
+                           NULL,
+                           FALSE,
+                           FALSE,
+                           FALSE,
+                           FALSE,
+                           detailViewGetSelectedDnaIdxRange(detailView)};
+  
+  while (qIdx >= qRange.min() && qIdx <= qRange.max())
+    {
+      /* Get the character to display at this index, and its position */
+      displayText[displayTextPos] = getSequenceIndex(bc->refSeq, qIdx, bc->displayRev, &bc->refSeqRange, BLXSEQ_DNA);
+      const int x = (int)((gdouble)displayTextPos * properties->charWidth());
+      
+      baseData.dnaIdx = qIdx;
+      baseData.baseChar = displayText[displayTextPos];
+      baseData.displayIdxSelected = detailViewIsDisplayIdxSelected(detailView, displayIdx);
+      baseData.dnaIdxSelected = detailViewIsDnaIdxSelected(detailView, qIdx);
+
+      /* Color the base depending on whether it is selected or affected by a SNP */
+      drawHeaderChar(bc, properties, drawable, gc, x, y, basesToHighlight, &baseData);
+      
+      /* Increment indices */
+      ++displayTextPos;
+      ++displayIdx;
+      qIdx += incrementValue;
+    }
+  
+  /* Make sure the string is terminated properly */
+  displayText[displayTextPos] = '\0';
+  
+  /* Draw the text */
+  PangoLayout *layout = gtk_widget_create_pango_layout(detailView, displayText);
+  pango_layout_set_font_description(layout, detailViewGetFontDesc(detailView));
+  
+  if (layout)
+    {
+      gtk_paint_layout(dnaTrack->style, drawable, GTK_STATE_NORMAL, TRUE, NULL, detailView, NULL, 0, 0, layout);
+      g_object_unref(layout);
+    }
+  
+  drawColumnSeparatorLine(dnaTrack, drawable, gc, bc);
+  
+  g_hash_table_unref(basesToHighlight);
+  g_free(segmentToDisplay);
+  g_object_unref(gc);
+}
+
+
+/* Utility to find the display coord(s) that a variation lies on. If expand is true, 
+ * it means that if the variation contains more than one alternative, and these will be 
+ * displayed horizontally across the display, taking up more width than where 
+ * the actual variation coords lie. expandedRange will take this into account. displayRange 
+ * always returns the actual msp start/end in display coords. */
+static void getVariationDisplayRange(const MSP *msp, 
+                                     const gboolean expand,
+                                     const BlxSeqType seqType, 
+                                     const int numFrames,
+                                     const gboolean displayRev, 
+                                     const int activeFrame,
+                                     const IntRange* const refSeqRange,
+                                     IntRange *displayRange,
+                                     IntRange *expandedRange)
+{
+  /* Convert the MSP coords to display coords. We want to display the variation
+   * in the same position regardless of reading frame, so always use frame 1. */
+  const IntRange* const mspRange = mspGetDisplayRange(msp);
+
+  if (displayRange)
+    displayRange->set(mspRange);
+  
+  if (!expandedRange)
+    return;
+
+  /* Work out the expanded range (it will be the same as the MSP range if unexpanded) */
+  expandedRange->set(mspRange);
+  
+  if (expand && mspGetMatchSeq(msp))
+    {
+      /* Expand the variation range so that we display its entire sequence. We'll 
+       * position the variation so that the middle of its sequence lies at the centre
+       * coord of its ref seq range */
+      const int numChars = strlen(mspGetMatchSeq(msp));
+
+      int offset = (int)((double)numChars / 2.0);
+  
+      if (numChars % 2 == 0)
+        {
+          /* Shift to the right by one if we've got an even number of chars */
+          --offset;
+        }
+  
+      expandedRange->setMin(expandedRange->centre() - offset);
+      expandedRange->setMax(expandedRange->min() + numChars - 1); // uses updated min
+    }
+}
+
+
+/* Utility that returns true if the given bool is either true or not 
+ * requested (i.e. the pointer is null) */
+static gboolean trueOrNotRequested(const gboolean* const ptr)
+{
+  return (ptr == NULL || *ptr == TRUE);
+}
+
+
+/* Determine whether the given coord in the given frame/strand is affected by
+ * a variation. Sets whether to draw the start/end/top/bottom boundaries for the coord
+ * when outlining it by the extent of the found variation. Also sets drawBackground to true
+ * if the background of the base should be highlighted in the variation color (i.e. if the base
+ * is part of a selected variation). Sets multipleVariations to true if there is more than
+ * one variation at this coord */
+static gboolean coordAffectedByVariation(const int dnaIdx,
+                                         const BlxStrand strand, 
+                                         BlxContext *bc,
+                                         const MSP **mspOut, /* the variation we found */
+                                         gboolean *drawStartBoundary, 
+                                         gboolean *drawEndBoundary, 
+                                         gboolean *drawJoiningLines, 
+                                         gboolean *drawBackground,
+                                         gboolean *multipleVariations)
+{
+  gboolean result = FALSE;
+  
+  /* Loop through all variations */
+  int i = 0;
+  const MSP *msp = mspArrayIdx(bc->featureLists[BLXMSP_VARIATION], i);
+  
+  for ( ; msp; msp = mspArrayIdx(bc->featureLists[BLXMSP_VARIATION], ++i))
+    {
+      if (mspGetRefStrand(msp) == strand && valueWithinRange(dnaIdx, &msp->qRange))
+        {
+          /* If result has already been set, then there are multiple variations on this coord */
+          if (result && multipleVariations)
+            *multipleVariations = TRUE;
+
+          result = TRUE;
+          
+          if (mspOut)
+            *mspOut = msp;
+          
+          /* We draw the start boundary of this base if it's the first base in the variation's range 
+           * and the end boundary if it's the last, unless it's a zero-length feature, i.e. an insertion
+           * site; in this case we draw a line to the right of the coord in the direction of the
+           * reference sequence (i.e. to give just a vertical line at the site, not an outline around the bases) */
+          const gboolean isFirst = (dnaIdx == msp->qRange.min());
+          const gboolean isLast = (dnaIdx == msp->qRange.max());
+          const gboolean isZeroLen = mspIsZeroLenVariation(msp);
+
+          /* Note that if any of the boundaries are already set to be drawn (by a previous snp
+           * found in this loop) then we keep the current value */
+          if (drawStartBoundary)
+            *drawStartBoundary |= (isZeroLen != bc->displayRev ? isLast : isFirst);
+            
+          if (drawEndBoundary)
+            *drawEndBoundary |= (isZeroLen != bc->displayRev ? isFirst : isLast);
+
+          /* Don't draw joining lines between the start and end boundaries if it's zero-length */
+          if (drawJoiningLines)
+            *drawJoiningLines |= !isZeroLen;
+            
+          /* Highlight the background if the variation is selected (unless it's a zero-length variation) */
+          if (drawBackground)
+            *drawBackground |= !isZeroLen && bc->isSeqSelected(msp->sSequence);
+          
+          /* If we only want to know if this coord is affected by a snp, we can return now.
+           *
+           * If we also need the boundary-lines info for this coord, then we need to check 
+           * all snps that are at this coord, because some may have different boundaries to
+           * others. We can break if all boundar-lines have already been set to true, though.
+           *
+           * If we need to return whether there are multiple snps at this coord, we can return
+           * after we've found the second on (i.e. after multipleVariations is set to TRUE). */
+          if (trueOrNotRequested(drawStartBoundary) &&
+              trueOrNotRequested(drawEndBoundary) && 
+              trueOrNotRequested(drawJoiningLines) && 
+              trueOrNotRequested(drawBackground) &&
+              trueOrNotRequested(multipleVariations))
+            break;
+        }
+    }
+  
+  return result;
+}
+
+
+/* Determine whether the given coord in the given frame/strand is affected by
+ * a polyA signal */
+static gboolean coordAffectedByPolyASignal(const int dnaIdx,
+                                           const BlxStrand strand, 
+                                           BlxContext *bc,
+                                           const MSP **mspOut, /* the variation we found */
+                                           gboolean *multiple)
+{
+  gboolean result = FALSE;
+  
+  /* Loop through all variations */
+  int i = 0;
+  const MSP *msp = mspArrayIdx(bc->featureLists[BLXMSP_POLYA_SIGNAL], i);
+  
+  for ( ; msp; msp = mspArrayIdx(bc->featureLists[BLXMSP_POLYA_SIGNAL], ++i))
+    {
+      if (mspGetRefStrand(msp) == strand && valueWithinRange(dnaIdx, &msp->qRange))
+        {
+          /* If result has already been set, then there are multiple signals on this coord */
+          if (result && multiple)
+            *multiple = TRUE;
+
+          result = TRUE;
+          
+          if (mspOut)
+            *mspOut = msp;
+          
+          /* If we only want to know if this coord is affected by a polyA signal, we can return now.
+           *
+           * If we need to return whether there are multiple sites at this coord, we can return
+           * after we've found the second on (i.e. after multiple is set to TRUE). */
+          if (trueOrNotRequested(multiple))
+            break;
+        }
+    }
+  
+  return result;
+}
+
+
+/* Determine whether the given coord in the given frame/strand is affected by
+ * a polyA site */
+static gboolean coordAffectedByPolyASite(const int dnaIdx,
+                                         const BlxStrand strand, 
+                                         BlxContext *bc,
+                                         const MSP **mspOut, /* the variation we found */
+                                         gboolean *multiple)
+{
+  gboolean result = FALSE;
+  
+  /* Loop through all variations */
+  int i = 0;
+  const MSP *msp = mspArrayIdx(bc->featureLists[BLXMSP_POLYA_SITE], i);
+  
+  for ( ; msp; msp = mspArrayIdx(bc->featureLists[BLXMSP_POLYA_SITE], ++i))
+    {
+      if (mspGetRefStrand(msp) == strand && valueWithinRange(dnaIdx, &msp->qRange))
+        {
+          /* If result has already been set, then there are multiple sites on this coord */
+          if (result && multiple)
+            *multiple = TRUE;
+
+          result = TRUE;
+          
+          if (mspOut)
+            *mspOut = msp;
+          
+          /* If we only want to know if this coord is affected by a polyA signal, we can return now.
+           *
+           * If we need to return whether there are multiple sites at this coord, we can return
+           * after we've found the second on (i.e. after multiple is set to TRUE). */
+          if (trueOrNotRequested(multiple))
+            break;
+        }
+    }
+  
+  return result;
+}
+
+
+/* Draw a rectangle with an outline and a fill color */
+static void drawRectangle(GdkDrawable *drawable, 
+                          GdkGC *gc, 
+                          GdkColor *fillColor,
+                          GdkColor *outlineColor,
+                          const int x, 
+                          const int y,
+                          const int width, 
+                          const int height,
+                          const gboolean drawLeft,
+                          const gboolean drawRight,
+                          const gboolean drawTop,
+                          const gboolean drawBottom)
+{
+  const int lineWidth = 1;
+  
+  if (fillColor)
+    {
+      gdk_gc_set_foreground(gc, fillColor);
+      gdk_draw_rectangle(drawable, gc, TRUE, x, y, width, height);
+    }
+
+  if (outlineColor)
+    {
+      gdk_gc_set_foreground(gc, outlineColor);
+      gdk_gc_set_line_attributes(gc, lineWidth, GDK_LINE_SOLID, GDK_CAP_BUTT, GDK_JOIN_MITER);
+      
+      int w = width - lineWidth;
+      int h = height - lineWidth;
+      
+      if (drawLeft)
+        gdk_draw_line(drawable, gc, x, y, x, y + h);
+        
+      if (drawRight)
+        gdk_draw_line(drawable, gc, x + w, y, x + w, y + h);
+
+      if (drawTop)
+        gdk_draw_line(drawable, gc, x, y, x + w, y);
+
+      if (drawBottom)
+        gdk_draw_line(drawable, gc, x, y + h, x + w, y + h);
+
+      //gdk_draw_rectangle(drawable, gc, FALSE, x, y, width - lineWidth, height - lineWidth);
+    }
+}
+
+
+/* Returns true if the given coord (which must be in nucleotide coords) is within the
+ * range of any MSP that is selected. Only considers MSPs that are on the given ref seq
+ * frame and strand (if given; otherwise considers all MSPs). */
+static gboolean isCoordInSelectedMspRange(const BlxContext *bc,
+                                          const int dnaIdx, 
+                                          const BlxStrand refSeqStrand, 
+                                          const int refSeqFrame,
+                                          const BlxSeqType seqType)
+{
+  gboolean inSelectedMspRange = FALSE;
+  
+  /* Loop through all the selected sequences */
+  GList *seqItem = bc->selectedSeqs;
+  
+  for ( ; seqItem && !inSelectedMspRange; seqItem = seqItem->next)
+    {
+      /* Loop through all the MSPs in this sequence */
+      const BlxSequence* const blxSeq = (const BlxSequence*)(seqItem->data);
+      GList *mspItem = blxSeq->mspList;
+      
+      for ( ; mspItem && !inSelectedMspRange; mspItem = mspItem->next)
+        {
+          const MSP* const msp = (const MSP*)(mspItem->data);
+          const int mspFrame = mspGetRefFrame(msp, seqType);
+          
+          if ((mspIsBlastMatch(msp) || mspIsBoxFeature(msp)) && 
+              (refSeqStrand == BLXSTRAND_NONE || mspGetRefStrand(msp) == refSeqStrand) &&
+              (refSeqFrame == UNSET_INT || mspFrame == refSeqFrame))
+            {
+              /* Passed-in coord is the nucleotide for base 1 in frame 1 of the current display index.
+               * We need to compare against base1 for the frame for the individual MSP, though, so 
+               * we need to convert it: just add 1 base if we're in frame 2 or 2 bases if we're in frame3. */
+              int idx = dnaIdx;
+              
+              if (bc->displayRev)
+                {
+                  idx -= (mspFrame - 1);
+                }
+              else
+                {
+                  idx += (mspFrame - 1);
+                }
+              
+              inSelectedMspRange = valueWithinRange(idx, &msp->qRange);
+            }
+        }
+    }
+
+  return inSelectedMspRange;
+}
+
+
+/* Determine whether any highlighting needs to be done for snps in the ref seq */
+static void getSnpHighlighting(DrawBaseData *data,
+                               BlxContext *bc)
+{     
+  gboolean drawBackground = FALSE;
+  
+  if (coordAffectedByVariation(data->dnaIdx, data->strand, bc, NULL,
+                               &data->drawStart, &data->drawEnd, &data->drawJoiningLines, &drawBackground, NULL))
+    {
+      /* The coord is affected by a SNP. Outline it in the "selected" SNP color
+       * (which is darker than the normal color) */
+      data->outlineColor = getGdkColor(BLXCOLOR_SNP, bc->defaultColors, TRUE, bc->usePrintColors);
+      
+      /* If the SNP is selected, also fill it with the SNP color (using the
+       * "unselected" SNP color, which is lighter than the outline). */
+      if (drawBackground)
+        {
+          data->fillColor = getGdkColor(BLXCOLOR_SNP, bc->defaultColors, data->shadeBackground, bc->usePrintColors);
+        }
+    }
+}
+
+
+/* Draw a given nucleotide or peptide. Determines the color depending on various
+ * parameters */
+void drawHeaderChar(BlxContext *bc,
+                    DetailViewProperties *properties,
+                    GdkDrawable *drawable,
+                    GdkGC *gc,
+                    const int x,
+                    const int y,
+                    GHashTable *basesToHighlight,
+                    DrawBaseData *data)
+{
+  if (!data->selectionRange || (data->selectionRange && data->selectionRange->length() == 1))
+    {
+      /* Shade the background if the base is selected XOR if the base is within the range of a 
+       * selected sequence. (If both conditions are true we don't shade, to give the effect of an
+       * inverted selection color.) */
+      gboolean inSelectedMspRange = isCoordInSelectedMspRange(bc, data->dnaIdx, data->strand, data->frame, data->seqType);
+      data->shadeBackground = (data->displayIdxSelected != inSelectedMspRange);
+    }
+  else
+    {
+      /* We have a range of selected coords. Just shade if this coord is in that range. */
+      data->shadeBackground = valueWithinRange(data->dnaIdx, data->selectionRange);
+    }
+
+  /* Reset background color and outlines to defaults */
+  data->outlineColor = NULL;
+  data->fillColor = NULL;
+  data->drawStart = FALSE;
+  data->drawEnd = FALSE;
+  data->drawJoiningLines = FALSE;
+ 
+  /* Check if this coord already has a special color stored for it */
+  gpointer hashValue = g_hash_table_lookup(basesToHighlight, GINT_TO_POINTER(data->dnaIdx));
+
+  if (hashValue)
+    {
+      BlxColorId colorId = (BlxColorId)GPOINTER_TO_INT(hashValue);
+      GdkColor *color = getGdkColor(colorId, bc->defaultColors, data->shadeBackground, bc->usePrintColors);
+
+      if (colorId == BLXCOLOR_POLYA_SITE_ANN)
+        {
+          /* For polyA sites we don't shade the background; instead we want to draw a bar after the
+           * coord (or before if the display is reversed), so set the outline. 
+           * (NB Bit of a hack to use the colorId to identify polyA sites here but it works fine.) */ 
+          data->outlineColor = color;
+          
+          if (bc->displayRev)
+            data->drawStart = TRUE;
+          else
+            data->drawEnd = TRUE;
+        }
+      else
+        {
+          /* Normal highlighting: just fill in the background with the specified color */
+          data->fillColor = color;
+        }
+    }
+
+  /* Check if this base is in the currently-selected codon and needs highlighting */
+  if (data->seqType == BLXSEQ_DNA && data->showCodons && (data->dnaIdxSelected || data->displayIdxSelected || data->shadeBackground))
+    {
+      if (data->dnaIdxSelected || data->displayIdxSelected)
+        {
+          /* The coord is a nucleotide in the currently-selected codon. The color depends
+           * on whether the actual nucleotide itself is selected, or just the codon that it 
+           * belongs to. */
+          data->fillColor = getGdkColor(BLXCOLOR_CODON, bc->defaultColors, data->dnaIdxSelected, bc->usePrintColors);
+          
+        }
+      else if (!data->fillColor)
+        {
+          /* The coord is not selected but this coord is within the range of a selected MSP, so 
+           * shade the background. */
+          data->fillColor = getGdkColor(data->defaultBgColor, bc->defaultColors, data->shadeBackground, bc->usePrintColors);
+        }
+    }
+
+  /* Check if this base is a SNP (or other variation) and needs highlighting */
+  if (data->highlightSnps)
+    {
+      getSnpHighlighting(data, bc);
+    }
+  
+  /* If the base is not already assigned some special highlighting, then
+   * check whether it should be highlighted as a stop or MET. Otherwise,
+   * give it the default background colour. */
+  if (!data->fillColor)
+    {
+      if (data->seqType == BLXSEQ_PEPTIDE && data->baseChar == SEQUENCE_CHAR_MET)
+        {
+          /* The coord is a MET codon */
+          data->fillColor = getGdkColor(BLXCOLOR_MET, bc->defaultColors, data->shadeBackground, bc->usePrintColors);
+        }
+      else if (data->seqType == BLXSEQ_PEPTIDE && data->baseChar == SEQUENCE_CHAR_STOP)
+        {
+          /* The coord is a STOP codon */
+          data->fillColor = getGdkColor(BLXCOLOR_STOP, bc->defaultColors, data->shadeBackground, bc->usePrintColors);
+        }
+      else if (data->showBackground)
+        {
+          /* Use the default background color for the reference sequence */
+          data->fillColor = getGdkColor(data->defaultBgColor, bc->defaultColors, data->shadeBackground, bc->usePrintColors);
+        }
+    }
+  
+  /* Ok, now we know all the colours and outlines, draw the background for the base */
+  if (data->topToBottom)
+    {
+      /* We're drawing nucleotides from top-to-bottom instead of left-to-right, so the start border is
+       * the top border and the bottom border is the end border. */
+      drawRectangle(drawable, gc, data->fillColor, data->outlineColor, x, y, ceil(properties->charWidth()), roundNearest(properties->charHeight()),
+                    data->drawJoiningLines, data->drawJoiningLines, data->drawStart, data->drawEnd);
+    }
+  else
+    {
+      drawRectangle(drawable, gc, data->fillColor, data->outlineColor, x, y, ceil(properties->charWidth()), roundNearest(properties->charHeight()),
+                    data->drawStart, data->drawEnd, data->drawJoiningLines, data->drawJoiningLines);
+    }
+}
+
+
+/* This works out the row number (1-based) to draw a variation with the given range
+ * in. Variations are drawn in row 1 if possible, but if the given range overlaps
+ * another variation in row 1, then we will try row 2, then row 3 etc.
+ * If numRows is UNSET_INT, then the straightforward row calculation is returned.
+ * If numRows is given, then the result is inverted (i.e. if there are three rows, rows
+ * 1 is translated to 3, 2->2 and 3->1. This is so that we can draw the first row at the
+ * bottom). */
+static int getVariationRowNumber(const IntRange* const rangeIn, const int numRows, GSList **rows)
+{
+  /* Loop through each row and add it to the first row where it will not overlap any other */
+  GSList *row = *rows;
+  int rowNum = 1;
+
+  for ( ; row; row = row->next, ++rowNum)
+    {
+      /* See if it overlaps an existing range */
+      GSList *ranges = (GSList*)(row->data);
+      GSList *rangeItem = ranges;
+      
+      gboolean overlaps = FALSE;
+  
+      for ( ; rangeItem && !overlaps; rangeItem = rangeItem->next)
+        {
+          IntRange *range = (IntRange*)(rangeItem->data);
+          overlaps = rangesOverlap(range, rangeIn);
+        }
+
+      if (!overlaps)
+        {
+          /* Doesn't overlap anything in this row; add it to the row and exit */
+          IntRange *range = new IntRange;
+          range->set(rangeIn);
+          ranges = g_slist_append(ranges, range);
+          
+          row->data = ranges;
+
+          if (numRows != UNSET_INT)
+            rowNum = numRows - rowNum + 1; /* invert row order */
+          
+          return rowNum;
+        }
+    }
+
+  /* If we get here, we didn't find a row that we don't overlap, so add a new row */
+  GSList *ranges = NULL;
+  IntRange *range = new IntRange;
+  range->set(rangeIn);
+  ranges = g_slist_append(ranges, range);
+  *rows = g_slist_append(*rows, ranges);
+
+  if (numRows != UNSET_INT)
+    rowNum = numRows - rowNum + 1; /* invert row order */
+
+  return rowNum;
+}
+
+
+/* This deletes the memory allocated to the 'rows' array created
+ * when drawing the snp track */
+static void freeRowsList(GSList *rows)
+{
+  GSList *rowItem = rows;
+  for ( ; rowItem; rowItem = rowItem->next)
+    {
+      GSList *ranges = (GSList*)(rowItem->data);
+      GSList *rangeItem = ranges;
+      
+      for ( ; rangeItem; rangeItem = rangeItem->next)
+        {
+          IntRange *range = (IntRange*)(rangeItem->data);
+          delete range;
+        }
+
+      g_slist_free(ranges);
+    }
+
+  g_slist_free(rows);
+}
+
+
+/* Utility to calculate the number of rows we need in the SNP track to avoid 
+ * any overlapping variations. */
+static int getNumSnpTrackRows(const BlxContext *bc, 
+                              DetailViewProperties *properties, 
+                              const BlxStrand strand, 
+                              const int frame)
+{
+  DEBUG_ENTER("getNumSnpTrackRows()");
+
+  int numRows = 0; /* Always show one row, even if it is empty */
+
+  int i = 0;
+  const MSP* msp = mspArrayIdx(bc->featureLists[BLXMSP_VARIATION], i);
+  GSList *rows = NULL;
+
+  for ( ; msp; msp = mspArrayIdx(bc->featureLists[BLXMSP_VARIATION], ++i))
+    {
+      if (mspGetRefStrand(msp) == strand && mspGetMatchSeq(msp))
+        {
+          /* Get the range of display coords where this SNP will appear */
+          IntRange mspDisplayRange, mspExpandedRange;
+          getVariationDisplayRange(msp, TRUE, bc->seqType, bc->numFrames, bc->displayRev, frame, &bc->refSeqRange, &mspDisplayRange, &mspExpandedRange);
+
+          /* See if the variation is in the current display range */
+          if (rangesOverlap(&mspExpandedRange, &properties->displayRange))
+            {
+              /* Get the row number (1-based) to draw this variation in. */
+              int row = getVariationRowNumber(&mspExpandedRange, UNSET_INT, &rows);
+              
+              /* Keep track of how many rows we've seen so we can size the widget accordingly */
+              if (row > numRows)
+                numRows = row;
+            }
+        }
+    }
+
+  freeRowsList(rows);
+  
+  DEBUG_EXIT("getNumSnpTrackRows returning %d", numRows);
+  return numRows;
+}
+
+
+/* Recalculate the size of the variations track. This needs to be done whenever
+ * we turn the track on/off, and also whenever we we scroll, because more/less
+ * variations can appear and if they overlap then we add extra rows in which to
+ * draw them. */
+static void recalculateSnpTrackBorders(GtkWidget *snpTrack, gpointer data)
+{
+  DEBUG_ENTER("recalculateSnpTrackBorders()");
+
+  //GtkWidget *detailView = GTK_WIDGET(data);
+  //snpTrackSetHeight(detailView, snpTrack);
+
+  DEBUG_EXIT("recalculateSnpTrackBorders returning ");
+}
+
+
+/* Function that does the drawing for the variations track */
+static void drawVariationsTrack(GtkWidget *snpTrack, GtkWidget *detailView)
+{
+  DEBUG_ENTER("drawVariationsTrack()");
+
+  /* Create the drawable for the widget (whether we're actually going to do any drawing or not) */
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+  GdkDrawable *drawable = createBlankSizedPixmap(snpTrack, snpTrack->window, snpTrack->allocation.width, ceil(properties->charHeight()) * 10);
+
+  GtkWidget *blxWindow = detailViewGetBlxWindow(detailView);
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+  
+  if (!bc->flags[BLXFLAG_SHOW_VARIATION_TRACK] || !bc->flags[BLXFLAG_HIGHLIGHT_VARIATIONS])
+    {
+      DEBUG_EXIT("drawVariationsTrack returning");
+      return;
+    }
+  
+  const int activeFrame = detailViewGetActiveFrame(detailView);
+  
+  BlxStrand strand = snpTrackGetStrand(snpTrack, detailView);
+  
+  GdkGC *gc = gdk_gc_new(drawable);
+  
+  /* Find the left margin. It will be at the same x coord as the left edge of
+   * the sequence column header. */
+  int leftMargin = UNSET_INT;
+  BlxColumnInfo *seqColInfo = getColumnInfo(detailViewGetColumnList(detailView), BLXCOL_SEQUENCE);
+  gtk_widget_translate_coordinates(seqColInfo->headerWidget, snpTrack, 0, 0, &leftMargin, NULL);
+  
+  /* Maintain lists for each row where the variations are drawn; remember their display
+   * ranges and don't allow any to overlap. */
+  const int numRows = getNumSnpTrackRows(bc, properties, strand, activeFrame);
+
+  /* Loop through all variations and see if any are in the current display range */
+  const int y = 0;
+  const int rowHeight = ceil(properties->charHeight());
+  int i = 0;
+  const MSP *msp = mspArrayIdx(bc->featureLists[BLXMSP_VARIATION], i);
+  GSList *rows = NULL;
+
+  for ( ; msp; msp = mspArrayIdx(bc->featureLists[BLXMSP_VARIATION], ++i))
+    {
+      if (mspGetRefStrand(msp) == strand && mspGetMatchSeq(msp))
+        {
+          /* Get the range of display coords where this SNP will appear */
+          IntRange mspDisplayRange, mspExpandedRange;
+          getVariationDisplayRange(msp, TRUE, bc->seqType, bc->numFrames, bc->displayRev, activeFrame, &bc->refSeqRange, &mspDisplayRange, &mspExpandedRange);
+
+          /* See if the variation is in the current display range */
+          if (rangesOverlap(&mspExpandedRange, &properties->displayRange))
+            {
+              /* Get the row number to draw this variation in. */
+              const int rowNum = getVariationRowNumber(&mspExpandedRange, numRows, &rows);
+              const int rowIdx = rowNum - 1;
+              
+              int x = leftMargin + (int)((gdouble)(mspExpandedRange.min() - properties->displayRange.min()) * properties->charWidth());
+              const int width = ceil((gdouble)strlen(mspGetMatchSeq(msp)) * properties->charWidth());
+              const gboolean isSelected = blxWindowIsSeqSelected(blxWindow, msp->sSequence);
+              
+              /* Draw the outline in the default SNP color. If the SNP is selected, also
+               * fill in the rectangle in the SNP color (use the selected color for the
+               * outline and the unselected color for the fill, so that the outline is darker). */
+              GdkColor *outlineColor = getGdkColor(BLXCOLOR_SNP, bc->defaultColors, TRUE, bc->usePrintColors);
+              GdkColor *fillColor = isSelected ? getGdkColor(BLXCOLOR_SNP, bc->defaultColors, FALSE, bc->usePrintColors) : NULL;
+              
+              /* Draw the background rectangle for the char */
+              drawRectangle(drawable, gc, fillColor, outlineColor, x, y + (rowHeight * rowIdx), width, rowHeight, TRUE, TRUE, TRUE, TRUE);
+              
+              /* Draw the text */
+              PangoLayout *layout = gtk_widget_create_pango_layout(detailView, mspGetMatchSeq(msp));
+              pango_layout_set_font_description(layout, properties->fontDesc);
+
+              if (layout)
+                {
+                  gtk_paint_layout(snpTrack->style, drawable, GTK_STATE_NORMAL, TRUE, NULL, detailView, NULL, x, y + (rowHeight * rowIdx), layout);
+                  g_object_unref(layout);
+                }             
+            }
+        }
+    }
+
+  freeRowsList(rows);
+  
+  drawColumnSeparatorLine(snpTrack, drawable, gc, bc);
+  
+  g_object_unref(gc);
+
+  DEBUG_EXIT("drawVariationsTrack returning ");
+}
+
+
+/* This function centres the detail view display on the currently-selected base index. Does 
+ * nothing if there isn't a selected base. */
+static void detailViewCentreOnSelection(GtkWidget *detailView)
+{
+  DEBUG_ENTER("detailViewCentreOnSelection()");
+
+  const gboolean selectedBaseSet = detailViewGetSelectedIdxSet(detailView);
+  const int selectedBaseIdx = detailViewGetSelectedDisplayIdx(detailView);
+  
+  if (selectedBaseSet)
+    {
+      /* The coord is in terms of the display coords, i.e. whatever the displayed seq type is. */
+      const BlxSeqType seqType = detailViewGetSeqType(detailView);
+      const IntRange* const displayRange = detailViewGetDisplayRange(detailView);
+      
+      int newStart = selectedBaseIdx - (displayRange->length() / 2);
+      setDetailViewStartIdx(detailView, newStart, seqType);
+    }
+
+  DEBUG_EXIT("detailViewCentreOnSelection returning ");
+}
+
+
+/* In the detail view, get the base index at the given coords, if those coords lie within the
+ * sequence column; returns UNSET_INT otherwise. */
+static int getBaseIndexAtDetailViewCoords(GtkWidget *detailView, const int x, const int y)
+{
+  int baseIdx = UNSET_INT;
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+  GList *columnList = detailViewGetColumnList(detailView);
+
+  /* Get the x coords at the start/end of the sequence column */
+  IntRange xRange;
+  getColumnXCoords(columnList, BLXCOL_SEQUENCE, &xRange);
+  
+  /* See if our x coord lies inside the sequence column */
+  if (x >= xRange.min() && x <= xRange.max())
+    {
+      /* Get the 0-based char index at x */
+      gdouble charWidth = properties->charWidth();
+      int charIdx = (int)(((gdouble)x - xRange.min()) / charWidth);
+
+      /* Add the start of the scroll range to convert this to the display index */
+      GtkAdjustment *adjustment = properties->adjustment;
+      baseIdx = charIdx + adjustment->value;
+    }
+  
+  return baseIdx;
+}
+
+
+/***********************************************************
+ *              Detail view scrollbar events               *
+ ***********************************************************/
+
+/* Callback called when the detail-view scrollbar's range has changed */
+static void onScrollRangeChangedDetailView(GtkObject *object, gpointer data)
+{
+  DEBUG_ENTER("onScrollRangeChangedDetailView");
+
+  GtkAdjustment *adjustment = GTK_ADJUSTMENT(object);
+  GtkWidget *detailView = GTK_WIDGET(data);
+  
+  IntRange *displayRange = detailViewGetDisplayRange(detailView);
+
+  /* First time round, set the adjusment range to be centred on the centre of
+   * the detail-view range*/
+  if (adjustment->value == UNSET_INT)
+    {
+      adjustment->value = displayRange->centre() - (adjustment->page_size / 2);
+
+      if (adjustment->value < adjustment->lower)
+        adjustment->value = adjustment->lower;
+      else if (adjustment->value > adjustment->upper - adjustment->page_size + 1)
+        adjustment->value = adjustment->upper - adjustment->page_size + 1;
+    }
+
+  int newStart = adjustment->value;
+  int newEnd = newStart + adjustment->page_size - 1;
+  
+  /* Only update if something has changed */
+  if (displayRange->min() != newStart || displayRange->max() != newEnd)
+    {
+      IntRange oldRange = {displayRange->min(), displayRange->max()};
+
+      displayRange->set(newStart, newEnd);
+      
+      /* Refilter the data for all trees in the detail view because rows may have scrolled in/out of view */
+      refilterDetailView(detailView, &oldRange);
+
+      /* Refresh the detail view header (which may contain the DNA sequence), and 
+       * the headers for all the trees (which contains the reference sequence) */
+      refreshDetailViewHeaders(detailView);
+      callFuncOnAllDetailViewTrees(detailView, refreshTreeHeaders, NULL);
+      detailViewRedrawAll(detailView);
+
+      /* Update the big picture because the highlight box has moved (and changed size) */
+      GtkWidget *bigPicture = detailViewGetBigPicture(detailView);
+      refreshBigPictureDisplayRange(bigPicture, FALSE);
+      calculateBigPictureCellSize(bigPicture, bigPictureGetProperties(bigPicture));
+    }
+  
+  DEBUG_EXIT("onScrollRangeChangedDetailView returning");
+}
+
+
+/* Callback called when the detail-view scrollbar's position has changed */
+static void onScrollPosChangedDetailView(GtkObject *object, gpointer data)
+{
+  DEBUG_ENTER("onScrollPosChangedDetailView");
+
+  GtkAdjustment *adjustment = GTK_ADJUSTMENT(object);
+  GtkWidget *detailView = GTK_WIDGET(data);
+  
+  /* Set the display range so that it starts at the new scroll pos */
+  int newStart = adjustment->value;
+  int newEnd = adjustment->value + adjustment->page_size - 1;
+
+  /* Only update if something has changed */
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+  IntRange *displayRange = &properties->displayRange;
+  
+  if (displayRange->min() != newStart || displayRange->max() != newEnd)
+    {
+      IntRange oldRange(displayRange->min(), displayRange->max());
+
+      displayRange->set(newStart, newEnd);
+
+      /* Refilter the data for all trees in the detail view because rows may have scrolled in/out of view */
+      refilterDetailView(detailView, &oldRange);
+
+      /* Refresh the detail view header (which may contain the DNA sequence), and 
+       * the headers for all the trees (which contains the reference sequence) */
+      refreshDetailViewHeaders(detailView);
+      callFuncOnAllDetailViewTrees(detailView, refreshTreeHeaders, NULL);
+      detailViewRedrawAll(detailView);
+
+      /* Update the big picture because the highlight box has moved */
+      GtkWidget *bigPicture = blxWindowGetBigPicture(properties->blxWindow());
+      refreshBigPictureDisplayRange(bigPicture, FALSE);
+    }
+  
+  DEBUG_EXIT("onScrollPosChangedDetailView returning");
+}
+
+
+/***********************************************************
+ *            Detail View toolbar events                   *
+ ***********************************************************/
+
+/* Set the font for the detail view cell renderer. Should be called after
+ * the font size is changed by zooming in/out of the detail view. */
+static void updateCellRendererFont(GtkWidget *detailView, PangoFontDescription *fontDesc)
+{
+  /* Calculate the row height from the font size */
+  gdouble charWidth, charHeight;
+  getFontCharSize(detailView, fontDesc, &charWidth, &charHeight);
+  
+  /* Cache these results, because we use them often for calculations */
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+  properties->setFontSize(charWidth, charHeight);
+  
+  /* Set the row height. Subtract the padding between the cell's actual area and
+   * its background area. We will render at the background area's height, so that
+   * we draw over the "gaps" between the cells, giving the impression of no gaps. */
+  gint rowHeight = roundNearest(charHeight) - (detailViewGetCellYPadding(detailView) * 2);
+
+  GtkCellRenderer *renderer = detailViewGetRenderer(detailView);
+  gtk_cell_renderer_set_fixed_size(renderer, 0, rowHeight);
+}
+
+
+/* Refilter the tree row that this msp is in */
+static void refilterMspRow(MSP *msp, GtkWidget *detailView, BlxContext *bc)
+{
+  //DEBUG_ENTER("refilterMspRow(msp=[%d,%d])", msp->fullRange.min, msp->fullRange.max);
+
+  /* Find the tree row that this MSP is in and force that row to update
+   * its visibility status. */
+  gchar *pathStr = mspGetTreePath(msp, bc->modelId);
+  
+  if (pathStr)
+    {
+      GtkTreePath *path = gtk_tree_path_new_from_string(pathStr);
+      
+      if (path)
+        {
+          GtkWidget *tree = detailViewGetTree(detailView, mspGetRefStrand(msp), mspGetRefFrame(msp, bc->seqType));
+          GtkTreeModel *model = treeGetBaseDataModel(GTK_TREE_VIEW(tree));
+          GtkTreeIter iter;
+          
+          if (gtk_tree_model_get_iter(model, &iter, path))
+            {
+              gtk_tree_model_row_changed(model, path, &iter);
+            }
+        }
+
+      gtk_tree_path_free(path);
+    }
+  
+  //DEBUG_EXIT("refilterMspRow returning ");
+}
+
+
+/* Utility to see if the start value of the first range is within the second
+ * range. If 'rev' is true, the 'start' of range1 is the max value rather than
+ * the min value of this range. */
+static gboolean startValueWithinRange(const IntRange* const range1,
+                                      const IntRange* const range2,
+                                      const gboolean rev)
+{
+  gboolean result = FALSE;
+  
+  if (rev)
+    result = valueWithinRange(range1->max(), range2);
+  else 
+    result = valueWithinRange(range1->min(), range2);
+  
+  return result;
+}
+
+
+/* Quick search to find any MSP in the given array that whose start coord
+ * lies within the given range. Sets the found array index in 'idx' or returns 
+ * FALSE if no MSP was found in this range. */
+static gboolean getAnyMspInRange(GArray *mspArray, 
+                                 const IntRange* const range, 
+                                 const gboolean displayRev, 
+                                 int *idx)
+{
+  gboolean result = FALSE;
+  
+  /* Do a binary search based on start coord until we find a start coord 
+   * that lies within the given range. */
+  int iMax = mspArray->len - 1;
+  int iMin = 0;
+
+  while (1)
+    {
+      const int i = iMin + (iMax - iMin) / 2;  
+      const MSP *msp = mspArrayIdx(mspArray, i);
+      
+      if (!msp)
+        break;
+    
+      if (startValueWithinRange(&msp->displayRange, range, displayRev))
+        {
+          result = TRUE;
+          *idx = i;
+          break;
+        }
+    
+      if (iMax - iMin < 1)
+        break;
+    
+      if ((msp->displayRange.min() < range->min()) != displayRev)
+        {
+          iMin = i + 1;
+        }
+      else
+        {
+          iMax = i - 1;
+        }
+    }
+  
+  return result;
+}
+
+
+/* Refilter the tree rows for all MSPs in the given array whose start coords
+ * lie within the given range. 'startIdx' should be an index in the array that
+ * gives the position of an MSP that is known to lie within this range (i.e. 
+ * it gives us a rough starting point so that we don't have to search through
+ * the entire array; it does not necessarily have to be the FIRST MSP that lies
+ * within range). */
+static void refilterMspList(const int startIdx, 
+                            GArray *array,
+                            const IntRange* const range, 
+                            GtkWidget *detailView, 
+                            BlxContext *bc)
+{
+  DEBUG_ENTER("refilterMspList(startIdx=%d, range=[%d,%d])", startIdx, range->min(), range->max());
+
+  /* Loop forwards through the array from the start index, refiltering the rows
+   * for each MSP until we find an MSP that is out of range. */
+  int i = startIdx;
+  MSP *msp = mspArrayIdx(array, i);
+  
+  for ( ; msp; msp = mspArrayIdx(array, ++i))
+    {
+      if (!startValueWithinRange(&msp->displayRange, range, bc->displayRev))
+        break;
+      
+      refilterMspRow(msp, detailView, bc);
+    }
+  
+  /* Also loop backwards from the start index, because startIdx may not have 
+   * been the very first MSP in the array that was in range. */
+  i = startIdx - 1;
+  msp = mspArrayIdx(array, i);
+  
+  for ( ; msp; msp = mspArrayIdx(array, --i))
+    {
+      if (!startValueWithinRange(&msp->displayRange, range, bc->displayRev))
+        break;
+      
+      refilterMspRow(msp, detailView, bc);
+    }
+  
+  DEBUG_EXIT("refilterMspList returning ");
+}
+
+
+/* Refilter rows in the detail-view trees for MSPs of the given type. Only filter
+ * the rows of MSPs that lie within the given display range. */
+static void refilterMspArrayByRange(BlxMspType mspType, 
+                                   BlxContext *bc, 
+                                   const IntRange* const displayRange, 
+                                   GtkWidget *detailView)
+{
+  //DEBUG_ENTER("refilterMspArrayByRange(mspType=%d)", mspType);
+
+  if (!displayRange)
+    return;
+  
+  /* We only want to update MSPs that are within the given display range.
+   * 
+   * We want to avoid searching through the entire MSP array, because it may 
+   * contain many thousands of MSPs. However, it is difficult to do a quick
+   * search to find an item from the list based on two values (i.e. the start and
+   * end of its range). 
+   * What we do is extend the start of the display range by the maximum MSP
+   * length so that we can do a binary search just on the start coord of the MSP 
+   * to check that it lies within the extended range. For any MSP that lies within
+   * the display range, it must be true that its start coord lies within this 
+   * extended range.
+   * Because the extended range is based on the maximum MSP length, it is likely
+   * to include some MSPs that do not actually lie within the display range.
+   * However, there is no harm in filtering a few extra rows, and this should 
+   * still be more efficient that searching through the entire array of MSPs. */
+
+  const int maxLen = getMaxMspLen();
+
+  /* If the display is reversed, the 'start' is the maximum coord end 
+   * rather than the minimum coord */
+  IntRange extendedRange;
+  
+  if (bc->displayRev)
+    {
+      extendedRange.set(displayRange->min(), displayRange->max() + maxLen);
+    }
+  else
+    {
+      extendedRange.set(displayRange->min() - maxLen, displayRange->max());
+    }
+  
+  int startIdx = 0;
+  
+  if (getAnyMspInRange(bc->featureLists[mspType], &extendedRange, bc->displayRev, &startIdx))
+    {
+      refilterMspList(startIdx, bc->featureLists[mspType], &extendedRange, detailView, bc);
+    }
+  
+  //DEBUG_EXIT("refilterMspArrayByRange returning ");
+}
+
+
+/* Refilter the rows in the detail-view trees. Only updates the rows in the
+ * current display range and (if given) the old display range. */
+void refilterDetailView(GtkWidget *detailView, const IntRange* const oldRange)
+{
+  DEBUG_ENTER("refilterDetailView(oldRange=[%d,%d])", oldRange ? oldRange->min() : 0, oldRange ? oldRange->max() : 0);
+  
+  BlxContext *bc = detailViewGetContext(detailView);
+  
+  if (bc->flags[BLXFLAG_SHOW_POLYA_SITE] || bc->flags[BLXFLAG_SHOW_UNALIGNED])
+    {
+      /* If these options are enabled, then determining which rows need to be 
+       * refiltered becomes much more complex because visible alignments lengths
+       * may differ from the actual alignment coords, and may differ depending
+       * on whether the sequence is selected or not. For now, play safe and
+       * refilter everything. */
+      callFuncOnAllDetailViewTrees(detailView, refilterTree, NULL);
+    }
+  else
+    {
+      /* We only want to update MSPs that are in the old detail-view range
+       * and the new detail-view range. (Because updating every row in all
+       * trees can be very slow if there are a lot of MSPs.) */
+      const IntRange* const newRange = detailViewGetDisplayRange(detailView);
+
+      /* Only consider MSPs that are shwon in the detail-view */
+      int mspType = 0;
+      for ( ; mspType < BLXMSP_NUM_TYPES; ++mspType)
+        {
+          if (typeShownInDetailView((BlxMspType)mspType))
+            {
+              refilterMspArrayByRange((BlxMspType)mspType, bc, oldRange, detailView);
+              refilterMspArrayByRange((BlxMspType)mspType, bc, newRange, detailView);
+            }
+        }
+      
+      detailViewRedrawAll(detailView);
+    }
+
+  DEBUG_EXIT("refilterDetailView returning ");
+}
+
+
+/***********************************************************
+ *                       Properties                        *
+ ***********************************************************/
+
+static void assertDetailView(GtkWidget *detailView)
+{
+  /* Check it's a valid detail-view tree type */
+  if (!detailView)
+    g_error("Detail-view widget is null\n");
+  
+  if (!GTK_IS_WIDGET(detailView))
+    g_error("Detail-view is not a valid widget [%p]\n", detailView);
+  
+  if (!GTK_IS_CONTAINER(detailView))
+    g_error("Detail-view is not a valid container [%p]\n", detailView);
+  
+  if (!detailViewGetProperties(detailView))
+    g_error("Tree properties not set [widget=%p]\n", detailView);
+}
+
+GtkWidget* detailViewGetBlxWindow(GtkWidget *detailView)
+{
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+  return properties ? properties->blxWindow() : NULL;
+}
+
+GtkAdjustment* detailViewGetAdjustment(GtkWidget *detailView)
+{
+  assertDetailView(detailView);
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+  return properties ? properties->adjustment : NULL;
+}
+
+GtkCellRenderer* detailViewGetRenderer(GtkWidget *detailView)
+{
+  assertDetailView(detailView);
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+  return properties ? properties->renderer : NULL;
+}
+
+/* Get the list of columns */
+GList* detailViewGetColumnList(GtkWidget *detailView)
+{
+  BlxContext *bc = detailViewGetContext(detailView);
+  return bc ? bc->columnList : NULL;
+}
+
+/* For the given list of columns, extract their types into an
+ * array of 'GType's */
+GType* columnListGetTypes(GList *columnList)
+{
+  GType *result = NULL;
+  const int len = g_list_length(columnList);
+
+  if (len > 0)
+    {
+      result = (GType*)g_malloc(sizeof(GType) * len);
+
+      GList *item = columnList;
+      int i = 0;
+      
+      for ( ; item; item = item->next, ++i)
+        {
+          BlxColumnInfo* columnInfo = (BlxColumnInfo*)(item->data);
+          result[i] = columnInfo->type;
+        }
+    }
+  
+  return result;
+}
+
+gboolean detailViewGetDisplayRev(GtkWidget *detailView)
+{
+  return blxWindowGetDisplayRev(detailViewGetBlxWindow(detailView));
+}
+
+PangoFontDescription *detailViewGetFontDesc(GtkWidget *detailView)
+{
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+  return properties ? properties->fontDesc : NULL;
+}
+
+int detailViewGetCellXPadding(GtkWidget *detailView)
+{
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+  return properties ? properties->cellXPadding : 0;
+}
+
+int detailViewGetCellYPadding(GtkWidget *detailView)
+{
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+  return properties ? properties->cellYPadding : 0;
+}
+
+/* Get the character width. */
+gdouble detailViewGetCharWidth(GtkWidget *detailView)
+{
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+  return properties ? properties->charWidth() : 0.0;
+}
+
+gdouble detailViewGetCharHeight(GtkWidget *detailView)
+{
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+  return properties ? properties->charHeight() : 0.0;
+}
+
+
+/* Get the outermost container for the GtkTreeView for the given frame on the given strand */
+GtkWidget* detailViewGetTreeContainer(GtkWidget *detailView, const BlxStrand activeStrand, const int frame)
+{
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+  GtkWidget *result = NULL;
+  
+  /* Get the list of trees for the relevant strand */
+  GList *list = (activeStrand == BLXSTRAND_FORWARD) ? properties->fwdStrandTrees : properties->revStrandTrees;
+
+  /* The list should be sorted in order of frame number, and we should not be requesting a frame number
+   * greater than the number of items in the list */
+  if (frame <= (int)g_list_length(list))
+    {
+      GList *listItem = list;
+      int count = 1;
+      
+      for ( ; listItem && count < frame; ++count)
+        {
+          listItem = listItem->next;
+        }
+
+      if (count == frame && 
+          GTK_IS_WIDGET(listItem->data) && 
+          (widgetIsTree(GTK_WIDGET(listItem->data)) || widgetIsTreeContainer(GTK_WIDGET(listItem->data))))
+        {
+          result = GTK_WIDGET(listItem->data);
+        }
+    }
+  
+  return result;
+}
+
+
+/* Extract the actual GtkTreeView for the given frame on the given strand */
+GtkWidget* detailViewGetTree(GtkWidget *detailView, const BlxStrand activeStrand, const int frame)
+{
+  GtkWidget *result = NULL;
+  GtkWidget *treeContainer = detailViewGetTreeContainer(detailView, activeStrand, frame);
+  
+  if (treeContainer && widgetIsTree(treeContainer))
+    {
+      result = treeContainer;
+    }
+  else if (treeContainer)
+    {
+      result = treeContainerGetTree(GTK_CONTAINER(treeContainer));
+    }
+  
+  if (!result)
+    {
+      g_warning("Tree not found for '%s' strand, frame '%d'. Returning NULL.\n", ((activeStrand == BLXSTRAND_FORWARD) ? "forward" : "reverse"), frame);
+    }
+  
+  return result;
+}
+
+int detailViewGetNumFrames(GtkWidget *detailView)
+{
+  BlxContext *bc = detailViewGetContext(detailView);
+  return bc->numFrames;
+}
+
+static GtkWidget* detailViewGetFeedbackBox(GtkWidget *detailView)
+{
+  DetailViewProperties *detailViewProperties = detailViewGetProperties(detailView);
+  return detailViewProperties->feedbackBox;
+}
+
+IntRange* detailViewGetDisplayRange(GtkWidget *detailView)
+{
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+  return properties ? &properties->displayRange : NULL;
+}
+
+IntRange* detailViewGetRefSeqRange(GtkWidget *detailView)
+{
+  GtkWidget *blxWindow = detailViewGetBlxWindow(detailView);
+  return blxWindowGetRefSeqRange(blxWindow);
+}
+
+BlxSeqType detailViewGetSeqType(GtkWidget *detailView)
+{
+  BlxContext *bc = detailViewGetContext(detailView);
+  return bc->seqType;
+}
+
+/* Returns true if the selected index is set */
+gboolean detailViewGetSelectedIdxSet(GtkWidget *detailView)
+{
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+  return properties && properties->selectedIndex ? properties->selectedIndex->isSet : FALSE;
+}
+
+/* Return the last-selected coord in display coords */
+int detailViewGetSelectedDisplayIdx(GtkWidget *detailView)
+{
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+  return properties && properties->selectedIndex && properties->selectedIndex->isSet ? properties->selectedIndex->displayIdx : UNSET_INT;
+}
+
+/* Return the initial index which initiated a selection range */
+static DetailViewIndex *detailViewGetInitSelectedIndexStruct(GtkWidget *detailView)
+{
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+  return properties ? &properties->selectedRangeInit : NULL;
+}
+
+/* Return the "first" end of the selection range, which is the other end to the last-selected
+ * index (i.e. if the start of the range was selected last, return the end of the range, and vice versa)  */
+static DetailViewIndex *detailViewGetFirstSelectedIndexStruct(GtkWidget *detailView)
+{
+  DetailViewIndex *result = NULL;
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+
+  if (properties)
+    {
+      DetailViewIndex *lastIdx = properties->selectedIndex;
+
+      if (lastIdx == &properties->selectedRangeStart)
+        result = &properties->selectedRangeEnd;
+      else
+        result = &properties->selectedRangeStart;
+    }
+
+  return result;
+}
+
+/* Return the last-selected index struct */
+static DetailViewIndex *detailViewGetLastSelectedIndexStruct(GtkWidget *detailView)
+{
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+  return properties ? properties->selectedIndex : NULL;
+}
+
+/* Return the last-selected coord in dna coords */
+int detailViewGetSelectedDnaIdx(GtkWidget *detailView)
+{
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+  return properties && properties->selectedIndex && properties->selectedIndex->isSet ? properties->selectedIndex->dnaIdx : UNSET_INT;
+}
+
+/* Return true if a range of coords is selected (rather than a single coord) */
+gboolean detailViewGetSelectedIdxRangeSet(GtkWidget *detailView)
+{
+  gboolean result = FALSE;
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+
+  if (properties && 
+      properties->selectedRangeStart.isSet && 
+      properties->selectedRangeEnd.isSet &&
+      properties->selectedRangeStart.dnaIdx != properties->selectedRangeEnd.dnaIdx)
+    {
+      result = TRUE;
+    }
+
+  return result;
+}
+
+/* Return the selection range in display coords. Allocates a  new IntRange* which should be
+ * free'd by the caller with delete */
+IntRange *detailViewGetSelectedDisplayIdxRange(GtkWidget *detailView)
+{
+  IntRange *result = NULL;
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+
+  if (properties && properties->selectedRangeStart.isSet && properties->selectedRangeEnd.isSet)
+    {
+      result = new IntRange;
+      result->set(properties->selectedRangeStart.displayIdx, properties->selectedRangeEnd.displayIdx);
+    }
+
+  return result;
+}
+
+/* Return the selection range in dna coords. Allocates a  new IntRange* which should be
+ * free'd by the caller with delete */
+IntRange *detailViewGetSelectedDnaIdxRange(GtkWidget *detailView)
+{
+  IntRange *result = NULL;
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+
+  if (properties && properties->selectedRangeStart.isSet && properties->selectedRangeEnd.isSet)
+    {
+      result = new IntRange;
+      result->set(properties->selectedRangeStart.dnaIdx, properties->selectedRangeEnd.dnaIdx);
+    }
+
+  return result;
+}
+
+/* Get the active frame. Returns the last-selected frame, or 1 if no frame is selected. */
+int detailViewGetActiveFrame(GtkWidget *detailView)
+{
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+  int result = 1;
+  
+  if (detailViewGetSelectedIdxSet(detailView))
+    {
+      result = properties->selectedIndex->frame;
+    }
+
+  return result;
+}
+
+/* Get the strand of the tree that was last selected (which defaults to the active strand if none is selected). */
+BlxStrand detailViewGetSelectedStrand(GtkWidget *detailView)
+{
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+  return properties ? properties->selectedStrand : BLXSTRAND_FORWARD;
+}
+
+/* Set the strand of the tree that was last selected. */
+void detailViewSetSelectedStrand(GtkWidget *detailView, BlxStrand strand)
+{
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+  properties->selectedStrand = strand;
+}
+
+
+int detailViewGetNumUnalignedBases(GtkWidget *detailView)
+{
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+  return properties ? properties->numUnalignedBases : FALSE;
+}
+
+
+static int detailViewGetSnpConnectorHeight(GtkWidget *detailView)
+{
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+  return properties ? properties->snpConnectorHeight : UNSET_INT;
+}
+
+
+BlxColumnId* detailViewGetSortColumns(GtkWidget *detailView)
+{
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+  return properties ? properties->sortColumns : NULL;
+}
+
+
+/* Perform required updates after the selected base has changed. */
+static void updateFollowingBaseSelection(GtkWidget *detailView,
+                                         const gboolean allowScroll,
+                                         const gboolean scrollMinimum)
+{
+  if (allowScroll)
+    {
+      scrollToKeepSelectionInRange(detailView, scrollMinimum);
+    }
+  
+  /* Update the feedback box */
+  updateFeedbackBox(detailView);
+  
+  /* Update the headers so that the newly-selected index is highlighted */
+  detailViewRefreshAllHeaders(detailView);
+}
+
+
+/* Return true if the given display index is in the selection range */
+gboolean detailViewIsDisplayIdxSelected(GtkWidget *detailView, const int displayIdx)
+{
+  gboolean result = FALSE;
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+
+  if (properties)
+    {
+      /* Check if the coord is in the selection range */
+      IntRange *range = detailViewGetSelectedDisplayIdxRange(detailView);
+
+      if (range)
+        {
+          result = valueWithinRange(displayIdx, range);
+          delete range;
+        }
+      else if (detailViewGetSelectedIdxSet(detailView))
+        {
+          /* Check if the coord matches the selected index */
+          result = (displayIdx == detailViewGetSelectedDisplayIdx(detailView));
+        }
+    }
+
+  return result;
+}
+
+
+/* Return true if the given dna index is in the selection range */
+gboolean detailViewIsDnaIdxSelected(GtkWidget *detailView, const int dnaIdx)
+{
+  gboolean result = FALSE;
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+
+  if (properties)
+    {
+      IntRange *range = detailViewGetSelectedDnaIdxRange(detailView);
+
+      if (range)
+        {
+          /* Check if the coord is in the selection range */
+          result = valueWithinRange(dnaIdx, range);
+          delete range;
+        }
+      else if (detailViewGetSelectedIdxSet(detailView))
+        {
+          /* Check if the coord matches the selected index */
+          result = (dnaIdx == detailViewGetSelectedDnaIdx(detailView));
+        }
+    }
+
+  return result;
+}
+
+
+/* Utility to set the info in a DetailViewIndex struct */
+static void setDetailViewIndex(DetailViewIndex *index, 
+                               const gboolean isSet, 
+                               const int dnaIdx,
+                               const int displayIdx,
+                               const int frame,
+                               const int baseNum)
+{
+  DEBUG_ENTER("setDetailViewIndex(%d, %d, %d, %d, %d)", isSet, dnaIdx, displayIdx, frame, baseNum);
+
+  if (index)
+    {
+      index->isSet = isSet;
+      index->dnaIdx = dnaIdx;
+      index->displayIdx = displayIdx;
+      index->frame = frame;
+      index->baseNum = baseNum;
+    }
+
+  DEBUG_EXIT("setDetailViewIndex returning ");
+}
+
+
+/* Cancel the current base index selection */
+void detailViewUnsetSelectedBaseIdx(GtkWidget *detailView)
+{
+  DEBUG_ENTER("detailViewUnsetSelectedBaseIdx()");
+
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+
+  setDetailViewIndex(&properties->selectedRangeInit, FALSE, UNSET_INT, UNSET_INT, UNSET_INT, UNSET_INT);
+  setDetailViewIndex(&properties->selectedRangeStart, FALSE, UNSET_INT, UNSET_INT, UNSET_INT, UNSET_INT);
+  setDetailViewIndex(&properties->selectedRangeEnd, FALSE, UNSET_INT, UNSET_INT, UNSET_INT, UNSET_INT);
+  
+  properties->selectedIndex = NULL;
+  
+  updateFollowingBaseSelection(detailView, FALSE, FALSE);
+
+  DEBUG_EXIT("detailViewUnsetSelectedBaseIdx returning ");
+}
+
+
+/* This function does the work to update the selected index (called by the display/dna specific
+ * functions). It makes sure the selection range is updated correctly when extending the
+ * range. 
+ * Performs any required refreshes. Scrolls the view to keep the selected base 
+ * in view if allowScroll is true. (Such scrolling is by the minimum
+ * number of bases necessary if scrollMinimum is true.) 
+ * if extend is true, then extend the current range rather than starting a new 
+ * selection. */
+static void detailViewSetSelectedIndex(GtkWidget *detailView, 
+                                       const int dnaIdx_in,
+                                       const int displayIdx_in,
+                                       const int frame,
+                                       const int baseNum,
+                                       const gboolean allowScroll, 
+                                       const gboolean scrollMinimum,
+                                       const gboolean extend)
+{
+  DEBUG_ENTER("detailViewSetSelectedIndex(%d, %d, %d, %d, %d)", dnaIdx_in, displayIdx_in, frame, baseNum, extend);
+
+  GtkWidget *blxWindow = detailViewGetBlxWindow(detailView);
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+
+  int dnaIdx = dnaIdx_in;
+  int displayIdx = displayIdx_in;
+
+  /* Trim coords to the blixem range */
+  if (blxWindow)
+    {
+      IntRange *displayRange = blxWindowGetFullRange(blxWindow);
+      IntRange* dnaRange = blxWindowGetRefSeqRange(blxWindow);
+      boundsLimitValue(&displayIdx, displayRange);
+      boundsLimitValue(&dnaIdx, dnaRange);
+    }  
+  
+  if (!extend || !properties->selectedIndex ||
+      !properties->selectedRangeStart.isSet || !properties->selectedRangeEnd.isSet)
+    {
+      DEBUG_OUT("Setting selected index to %d\n", dnaIdx);
+
+      /* Nothing set or not extending - set the start and end of the range to be the same */
+      setDetailViewIndex(&properties->selectedRangeInit, TRUE, dnaIdx, displayIdx, frame, baseNum);
+      setDetailViewIndex(&properties->selectedRangeStart, TRUE, dnaIdx, displayIdx, frame, baseNum);
+      setDetailViewIndex(&properties->selectedRangeEnd, TRUE, dnaIdx, displayIdx, frame, baseNum);
+
+      /* The last-selected index can point to either start or end as they are the same */
+      properties->selectedIndex = &properties->selectedRangeStart;
+    }
+  else
+    {
+      DEBUG_OUT("Extending existing range (%d, %d) to %d\n", 
+                properties->selectedRangeStart.dnaIdx, properties->selectedRangeEnd.dnaIdx, dnaIdx);
+
+      /* Extend or trim the existing range by setting the start or end of the range to the new
+       * value depending on whether the click was before or after the initial selection
+       * index. If the user clicked on the inital index, then trim the end that was last modified. */
+      const int initIdx = properties->selectedRangeInit.dnaIdx;
+      const int lastIdx = properties->selectedIndex->dnaIdx;
+
+      if (dnaIdx < initIdx || (dnaIdx == initIdx && lastIdx < initIdx))
+        {
+          setDetailViewIndex(&properties->selectedRangeStart, TRUE, dnaIdx, displayIdx, frame, baseNum);
+          properties->selectedIndex = &properties->selectedRangeStart;
+        }
+
+      if (dnaIdx > initIdx || (dnaIdx == initIdx && lastIdx > initIdx))
+        {
+          setDetailViewIndex(&properties->selectedRangeEnd, TRUE, dnaIdx, displayIdx, frame, baseNum);
+          properties->selectedIndex = &properties->selectedRangeEnd;
+        }
+
+      if (properties->selectedRangeStart.dnaIdx > properties->selectedRangeEnd.dnaIdx)
+        {
+          DEBUG_OUT("Warning: selection range start is greater than end!!\n");
+        }
+    }
+
+  updateFollowingBaseSelection(detailView, allowScroll, scrollMinimum);
+
+  DEBUG_EXIT("detailViewSetSelectedIndex returning ");
+}
+
+
+/* Set the selected base index to a specific DNA index. */
+void detailViewSetSelectedDnaBaseIdx(GtkWidget *detailView,
+                                     const int dnaIdx,
+                                     const int frame,
+                                     const gboolean allowScroll,
+                                     const gboolean scrollMinimum,
+                                     const gboolean extend)
+{
+  DEBUG_ENTER("detailViewSetSelectedDnaBaseIdx()");
+
+  BlxContext *bc = detailViewGetContext(detailView);
+
+  /* For protein matches, calculate the display index and base number of this dna idx */
+  int baseNum = UNSET_INT;
+  const int displayIdx = convertDnaIdxToDisplayIdx(dnaIdx, bc->seqType, frame, bc->numFrames, bc->displayRev, &bc->refSeqRange, &baseNum);
+
+  detailViewSetSelectedIndex(detailView, dnaIdx, displayIdx, frame, baseNum, allowScroll, scrollMinimum, extend);
+
+  DEBUG_EXIT("detailViewSetSelectedDnaBaseIdx returning ");
+}
+
+
+/* Set which frame is the active (currently-selected) reading frame */
+void detailViewSetActiveFrame(GtkWidget *detailView, const int frame)
+{
+  DEBUG_ENTER("detailViewSetActiveFrame()");
+  
+  if (detailViewGetSelectedIdxSet(detailView))
+    {
+      /* Keep the selected DNA coord(s) the same but update the frame */
+      const int initIdx = detailViewGetInitSelectedIndexStruct(detailView)->dnaIdx;
+      const int firstIdx = detailViewGetFirstSelectedIndexStruct(detailView)->dnaIdx;
+      const int lastIdx = detailViewGetLastSelectedIndexStruct(detailView)->dnaIdx;
+
+      detailViewSetSelectedDnaBaseIdx(detailView, initIdx, frame, FALSE, FALSE, FALSE);
+      detailViewSetSelectedDnaBaseIdx(detailView, firstIdx, frame, FALSE, FALSE, TRUE);
+      detailViewSetSelectedDnaBaseIdx(detailView, lastIdx, frame, FALSE, FALSE, TRUE);
+    }
+
+  DEBUG_EXIT("detailViewSetActiveFrame returning ");
+}
+
+
+/* Set the selected base index to the given display index and base/frame number. */
+void detailViewSetSelectedDisplayIdx(GtkWidget *detailView, 
+                                     const int displayIdx, 
+                                     const int frame, 
+                                     const int baseNum, 
+                                     const gboolean allowScroll,
+                                     const gboolean scrollMinimum,
+                                     const gboolean extend)
+{
+  DEBUG_ENTER("detailViewSetSelectedDisplayIdx(%d, %d, %d)", displayIdx, frame, baseNum);
+
+  BlxContext *bc = detailViewGetContext(detailView);
+  
+  /* For protein matches, calculate the base index in terms of the DNA sequence */
+  const int dnaIdx = convertDisplayIdxToDnaIdx(displayIdx, 
+                                               bc->seqType, 
+                                               frame, 
+                                               baseNum, 
+                                               bc->numFrames, 
+                                               bc->displayRev, 
+                                               &bc->refSeqRange);
+
+  detailViewSetSelectedIndex(detailView, dnaIdx, displayIdx, frame, baseNum, allowScroll, scrollMinimum, extend);
+
+  DEBUG_EXIT("detailViewSetSelectedDisplayIdx returning ");
+}
+
+
+/* Unselect and then reslect the currently selected coordinate(s). This makes sure the display
+ * coordinate agrees with the dna coord in the selection structs. */
+static void detailViewRefreshSelection(GtkWidget *detailView)
+{
+  if (detailViewGetSelectedIdxSet(detailView))
+    {
+      DetailViewIndex *init = detailViewGetInitSelectedIndexStruct(detailView);
+      DetailViewIndex *first = detailViewGetFirstSelectedIndexStruct(detailView);
+      DetailViewIndex *last = detailViewGetLastSelectedIndexStruct(detailView);
+
+      const int initIdx = init->dnaIdx;
+      const int firstIdx = first->dnaIdx;
+      const int lastIdx = last->dnaIdx;
+
+      const int initFrame = init->frame;
+      const int firstFrame = first->frame;
+      const int lastFrame = last->frame;
+
+      /* Unset, then select the inital index (with extend=false) */
+      detailViewUnsetSelectedBaseIdx(detailView);
+      detailViewSetSelectedDnaBaseIdx(detailView, initIdx, initFrame, FALSE, TRUE, FALSE);
+
+      /* Now set the extents, passing extend=true to extend either side of the init index */
+      detailViewSetSelectedDnaBaseIdx(detailView, firstIdx, firstFrame, FALSE, TRUE, TRUE);
+      detailViewSetSelectedDnaBaseIdx(detailView, lastIdx, lastFrame, FALSE, TRUE, TRUE);
+    }
+}
+
+
+int detailViewGetClickedBaseIdx(GtkWidget *detailView)
+{
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+  return properties->clickedBaseIdx;
+}
+
+
+/* Set the selected base index to the given display index and base/frame number.
+ *  Performs any required refreshes. Scrolls the view to keep the selected base 
+ * in view if allowScroll is true. (Such scrolling is by the minimum
+ * number of bases necessary if scrollMinimum is true.) */
+void detailViewSetClickedBaseIdx(GtkWidget *detailView, 
+                                  const int clickedBaseIdx, 
+                                  const int frame, 
+                                  const int baseNum, 
+                                  const gboolean allowScroll,
+                                  const gboolean scrollMinimum)
+{
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+
+  /* For protein matches, calculate the base index in terms of the DNA sequence and cache it */
+  BlxContext *bc = detailViewGetContext(detailView);
+  properties->clickedBaseIdx = convertDisplayIdxToDnaIdx(clickedBaseIdx, bc->seqType, frame, baseNum, bc->numFrames, bc->displayRev, &bc->refSeqRange);
+}
+
+
+static GtkWidget *detailViewGetBigPicture(GtkWidget *detailView)
+{
+  GtkWidget *blxWindow = detailViewGetBlxWindow(detailView);
+  return blxWindowGetBigPicture(blxWindow);
+}
+
+
+DetailViewProperties* detailViewGetProperties(GtkWidget *widget)
+{
+  /* optimisation: cache result, because we know there is only ever one detail view */
+  static DetailViewProperties *properties = NULL;
+
+  if (!properties && widget)
+    properties = (DetailViewProperties*)(g_object_get_data(G_OBJECT(widget), "DetailViewProperties"));
+  
+  return properties;
+}
+
+static BlxContext* detailViewGetContext(GtkWidget *detailView)
+{
+  GtkWidget *blxWindow = detailViewGetBlxWindow(detailView);
+  return blxWindowGetContext(blxWindow);
+}
+
+static void onDestroyDetailView(GtkWidget *widget)
+{
+  DetailViewProperties *properties = detailViewGetProperties(widget);
+  if (properties)
+    {
+      delete properties;
+      g_object_set_data(G_OBJECT(widget), "DetailViewProperties", NULL);
+    }
+}
+
+
+static DetailViewProperties* detailViewCreateProperties(GtkWidget *detailView,
+                                                        GtkWidget *blxWindow,
+                                                        BlxContext *bc,
+                                                        CoverageViewProperties *coverageViewP,
+                                                        GtkCellRenderer *renderer,
+                                                        GList *fwdStrandTrees,
+                                                        GList *revStrandTrees,
+                                                        GtkWidget *feedbackBox,
+                                                        GtkWidget *statusBar,
+                                                        GList *columnList,
+                                                        GtkAdjustment *adjustment, 
+                                                        const int startCoord,
+                                                        const BlxColumnId sortColumn)
+{
+  DetailViewProperties *properties = NULL;
+
+  if (detailView)
+    { 
+      properties = new DetailViewProperties(detailView,
+                                            blxWindow,
+                                            bc,
+                                            coverageViewP,
+                                            renderer,
+                                            fwdStrandTrees,
+                                            revStrandTrees,
+                                            feedbackBox,
+                                            statusBar,
+                                            columnList,
+                                            adjustment, 
+                                            startCoord,
+                                            sortColumn);
+ 
+      g_object_set_data(G_OBJECT(detailView), "DetailViewProperties", properties);
+      g_signal_connect(G_OBJECT(detailView), "destroy", G_CALLBACK(onDestroyDetailView), NULL); 
+    }
+
+  return properties;
+}
+
+
+/* Get/set functions for the sequence column header's row number. (There is only
+ * one property to set, so it's not worth having a struct for the properties.) */
+void seqColHeaderSetRow(GtkWidget *header, const int frame)
+{
+  g_object_set_data(G_OBJECT(header), "seqColHeaderFrameNumber", GINT_TO_POINTER(frame));
+}
+
+int seqColHeaderGetRow(GtkWidget *header)
+{
+  return header ? GPOINTER_TO_INT(g_object_get_data(G_OBJECT(header), "seqColHeaderFrameNumber")) : UNSET_INT;
+}
+
+/* Gets the base number within the given reading frame that this header row corresponds to*/
+int seqColHeaderGetBase(GtkWidget *header, const int frame, const int numFrames)
+{
+  const int row = seqColHeaderGetRow(header);
+  
+  int baseNum = UNSET_INT;
+  
+  if (row != UNSET_INT)
+    {
+      baseNum = row - (frame - 1);
+
+      /* Cyclic decrement */
+      if (baseNum < 1)
+        {
+          baseNum += numFrames;
+        }
+    }
+  
+  return baseNum;
+}
+
+/* Get the coord at the given position in the sequence header */
+static int seqColHeaderGetCoordAtPos(GtkWidget *header, GtkWidget *detailView, const int x, const int y)
+{
+  int baseIdx = UNSET_INT;
+  
+  GtkAdjustment *adjustment = detailViewGetAdjustment(detailView);
+
+  if (x >= 0 && x <= header->allocation.width)
+    {
+      /* Get the 0-based char index at x */
+      gdouble charWidth = detailViewGetCharWidth(detailView);
+      int charIdx = (int)((gdouble)x / charWidth);
+      
+      /* Add the start of the scroll range to convert this to the display index */
+      baseIdx = charIdx + adjustment->value;
+    }
+  else if (x < 0)
+    {
+      baseIdx = adjustment->value;
+    }
+  else if (x > header->allocation.width)
+    {
+      baseIdx = adjustment->value = adjustment->page_size;
+    }
+  
+  return baseIdx;
+}
+
+/***********************************************************
+ *                Paned window properties
+ *
+ * This is requried for the SNP track paned windows, because
+ * we need to cache the splitter position when the user toggles
+ * it off so that we can reinstate it when the toggle back on.
+ ***********************************************************/
+
+static void panedWindowCreateProperties(GtkWidget *widget, const int splitterPos)
+{
+  if (widget)
+    { 
+      PanedWindowProperties *properties = new PanedWindowProperties;
+
+      properties->widget = widget;
+      properties->splitterPos = splitterPos;
+      
+      g_object_set_data(G_OBJECT(widget), "PanedWindowProperties", properties);
+      g_signal_connect(G_OBJECT(widget), "destroy", G_CALLBACK(onDestroyPanedWindow), NULL); 
+    }
+}
+
+
+static PanedWindowProperties* panedWindowGetProperties(GtkWidget *widget)
+{
+  PanedWindowProperties *properties = NULL;
+
+  if (!properties && widget)
+    properties = (PanedWindowProperties*)(g_object_get_data(G_OBJECT(widget), "PanedWindowProperties"));
+  
+  return properties;
+}
+
+
+static void onDestroyPanedWindow(GtkWidget *widget)
+{
+  PanedWindowProperties *properties = panedWindowGetProperties(widget);
+
+  if (properties)
+    {
+      delete properties;
+      properties = NULL;
+      g_object_set_data(G_OBJECT(widget), "DetailViewProperties", NULL);
+    }
+}
+
+
+/* Get/set functions for the SNP track header strand. (There is only one property
+ * to set, so it's not worth having a struct for the properties.) */
+static void snpTrackSetStrand(GtkWidget *snpTrack, const BlxStrand strand)
+{
+  g_object_set_data(G_OBJECT(snpTrack), "snpTrackStrand", GINT_TO_POINTER(strand));
+}
+
+static BlxStrand snpTrackGetStrand(GtkWidget *snpTrack, GtkWidget *detailView)
+{
+  BlxStrand strand = BLXSTRAND_NONE;
+  
+  if (snpTrack)
+    {
+      strand = (BlxStrand)GPOINTER_TO_INT(g_object_get_data(G_OBJECT(snpTrack), "snpTrackStrand"));
+    }
+  
+  if (strand == BLXSTRAND_NONE)
+    {
+      /* use the active strand instead */
+      strand = blxWindowGetActiveStrand(detailViewGetBlxWindow(detailView));
+    }
+  
+  return strand;
+}
+
+
+static void snpTrackSetHeight(GtkWidget *detailView, GtkWidget *snpTrack)
+{
+  DEBUG_ENTER("snpTrackSetHeight()");
+
+  BlxContext *bc = detailViewGetContext(detailView);
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+  GtkWidget *snpScrollWin = detailViewContainerGetParentWidget(GTK_CONTAINER(detailView), snpTrack, SNP_TRACK_SCROLL_WIN_NAME);
+
+  const int activeFrame = detailViewGetActiveFrame(detailView);
+  BlxStrand strand = snpTrackGetStrand(snpTrack, detailView);
+  const int numRows = getNumSnpTrackRows(bc, properties, strand, activeFrame);
+  const gdouble charHeight = detailViewGetCharHeight(detailView);
+
+  /* Set the height to the total character height plus the connector line height */
+  const int height = roundNearest(charHeight * (numRows + (gdouble)detailViewGetSnpConnectorHeight(detailView)));
+  gtk_layout_set_size(GTK_LAYOUT(snpTrack), snpTrack->allocation.width, height);
+  gtk_widget_set_size_request(snpTrack, -1, height);
+  gtk_widget_set_size_request(snpScrollWin, -1, height);
+  DEBUG_OUT("Strand %d, frame %d: Set SNP track height to %d\n", (int)strand, activeFrame, height);
+
+  /* Get the parent scrolled window and set the adjustment step increment to be one
+   * char height */
+  if (snpScrollWin && GTK_IS_SCROLLED_WINDOW(snpScrollWin))
+    {
+      GtkAdjustment *snpAdjustment = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(snpScrollWin));
+
+      if (snpAdjustment)
+        {
+          snpAdjustment->step_increment = (int)charHeight + detailViewGetSnpConnectorHeight(detailView);
+        }
+    }
+  else
+    {
+      g_warning("Error setting scroll increment for variations track\n");
+      DEBUG_OUT("Error setting scroll increment for variations track\n");
+    }
+
+  /* Now set the paned window splitter bar position. */
+  const gboolean showSnpTrack = bc->flags[BLXFLAG_SHOW_VARIATION_TRACK] && bc->flags[BLXFLAG_HIGHLIGHT_VARIATIONS];
+  GtkWidget *panedWidget = detailViewContainerGetParentWidget(GTK_CONTAINER(detailView), snpTrack, SNP_TRACK_CONTAINER_NAME);
+  GtkPaned *panedWin = GTK_IS_PANED(panedWidget) ? GTK_PANED(panedWidget) : NULL;
+  PanedWindowProperties *snpProperties = panedWindowGetProperties(GTK_WIDGET(panedWin));
+
+  if (panedWin && showSnpTrack)
+    {
+      /* Set it to the saved position, if there is one set */
+      if (snpProperties->splitterPos >= 0)
+        {
+          /* Use the cached position then reset the cache (because the splitter bar will keep
+           * track of it from here). */
+          DEBUG_OUT("Setting splitter position to %d\n", snpProperties->splitterPos);
+
+          /* gb10: actually I'm going to reset it to 'unset' because that's probably a bit more
+           * sensible when re-showing the snp track (which is the only time this cache gets
+           * used). Could do with tidying up this logic a bit. It might be nice to offer the
+           * option to use the cached position too. */
+          //gtk_paned_set_position(panedWin, snpProperties->splitterPos);
+          gtk_paned_set_position(panedWin, -1);
+          snpProperties->splitterPos = -1;
+        }
+    }
+  else if (panedWin)
+    {
+      /* Save the current value then set it to 0 to hide the SNP track */
+      int splitterPos = gtk_paned_get_position(panedWin);
+
+      if (splitterPos > 0)
+        {
+          DEBUG_OUT("Setting splitter position to 0 and caching old position %d\n", splitterPos);
+          snpProperties->splitterPos = splitterPos;
+          gtk_paned_set_position(panedWin, 0);
+        }
+    }
+  else
+    {
+      g_warning("Error setting splitter bar position for variations track\n");
+      DEBUG_OUT("Error setting splitter bar position for variations track\n");
+    }
+
+  DEBUG_EXIT("snpTrackSetHeight returning ");
+}
+
+
+/***********************************************************
+ *                     Events                              *
+ ***********************************************************/
+
+/* Expose function for generic text headers. Draws vertical separator lines and then lets the
+ * default handler continue.  */
+gboolean onExposeGenericHeader(GtkWidget *headerWidget, GdkEventExpose *event, gpointer data)
+{
+  GdkGC *gc = gdk_gc_new(headerWidget->window);
+  
+  GtkWidget *detailView = GTK_WIDGET(data);
+  const BlxContext *bc = detailViewGetContext(detailView);
+  
+  drawColumnSeparatorLine(headerWidget, headerWidget->window, gc, bc);
+  
+  g_object_unref(gc);
+  
+  return FALSE;
+}
+
+
+/* expose function to push a cached bitmap to screen */
+gboolean onExposeDnaTrack(GtkWidget *headerWidget, GdkEventExpose *event, gpointer data)
+{
+  GdkWindow *window = GTK_IS_LAYOUT(headerWidget) ? GTK_LAYOUT(headerWidget)->bin_window : headerWidget->window;
+  
+  if (window)
+    {
+      /* See if there's a cached drawable and, if not, create it */
+      GdkDrawable *bitmap = widgetGetDrawable(headerWidget);
+
+      if (!bitmap)
+        {
+          /* There isn't a bitmap yet. Create it now. */
+          GtkWidget *detailView = GTK_WIDGET(data);
+          const BlxStrand activeStrand = detailViewGetDisplayRev(detailView) ? BLXSTRAND_REVERSE : BLXSTRAND_FORWARD;
+          
+          drawDnaTrack(headerWidget, detailView, activeStrand, seqColHeaderGetRow(headerWidget));
+          bitmap = widgetGetDrawable(headerWidget);
+        }
+      
+      if (bitmap)
+        {
+          /* Push the bitmap onto the window */
+          GdkGC *gc = gdk_gc_new(window);
+          gdk_draw_drawable(window, gc, bitmap, 0, 0, 0, 0, -1, -1);
+          g_object_unref(gc);
+        }
+    }
+  
+  return FALSE;
+}
+
+
+/* Expose handler for the variations-track header */
+static gboolean onExposeVariationsTrack(GtkWidget *snpTrack, GdkEventExpose *event, gpointer data)
+{
+  GdkDrawable *window = GTK_LAYOUT(snpTrack)->bin_window;
+  
+  if (window)
+    {
+      GdkDrawable *bitmap = widgetGetDrawable(snpTrack);
+      if (!bitmap)
+        {
+          /* There isn't a bitmap yet. Create it now. */
+          GtkWidget *detailView = GTK_WIDGET(data);
+          drawVariationsTrack(snpTrack, detailView);
+          
+          bitmap = widgetGetDrawable(snpTrack);
+        }
+      
+      if (bitmap)
+        {
+          /* Push the bitmap onto the window */
+          GdkGC *gc = gdk_gc_new(window);
+          gdk_draw_drawable(window, gc, bitmap, 0, 0, 0, 0, -1, -1);
+          g_object_unref(gc);
+        }
+      else
+        {
+          g_critical("Failed to draw SNP track [%p] - could not create bitmap.\n", snpTrack);
+        }
+    }
+  
+  return TRUE;
+}
+
+
+/* Handler for when the mouse button is pressed in the SNP track header */
+static gboolean onButtonPressSnpTrack(GtkWidget *snpTrack, GdkEventButton *event, gpointer data)
+{
+  gboolean handled = FALSE;
+  GtkWidget *detailView = GTK_WIDGET(data);
+
+  switch (event->button)
+  {
+    case 1:
+      {
+        GtkWidget *blxWindow = detailViewGetBlxWindow(detailView);
+        BlxContext *bc = blxWindowGetContext(blxWindow);
+        GList *columnList = detailViewGetColumnList(detailView);
+        
+        if (event->type == GDK_BUTTON_PRESS) /* first click */
+          {
+            /* Select the variation that was clicked on.  */
+            blxWindowDeselectAllSeqs(blxWindow);
+
+            /* The SNP track is not the same width as the sequence column, so pass the
+             * sequence column header so that we can convert to the correct coords */
+            BlxColumnInfo *seqColInfo = getColumnInfo(columnList, BLXCOL_SEQUENCE);
+
+            selectClickedSnp(snpTrack, seqColInfo->headerWidget, detailView, event->x, event->y, TRUE, UNSET_INT); /* SNPs are always expanded in the SNP track */
+            
+            detailViewRefreshAllHeaders(detailView);
+          }      
+        else if (event->type == GDK_2BUTTON_PRESS) /* double-click */
+          {
+            /* If a variation was double-clicked, open its URL in a browser. 
+             * If multiple are selected, use the last-selected one. */
+            GList *seqItem = g_list_last(blxWindowGetSelectedSeqs(blxWindow));
+            
+            if (seqItem)
+              {
+                BlxSequence *seq = (BlxSequence*)(seqItem->data);
+                UserFetch *user_fetch = new UserFetch(seq, TRUE, blxWindow, NULL,
+#ifdef PFETCH_HTML
+                                                      bc->ipresolve, bc->cainfo,
+#endif
+                                                      bc->fetch_debug);
+
+                user_fetch->performFetch();
+              }
+          }
+
+        handled = TRUE;
+        break;
+      }
+  }
+
+  if (!handled)
+    { 
+      propagateEventButton(snpTrack, detailView, event);
+    }
+  
+  return handled;
+}
+
+
+/* Parent handler for button presses anywhere on the detail view. */
+static gboolean onButtonPressDetailView(GtkWidget *detailView, GdkEventButton *event, gpointer data)
+{
+  gboolean handled = FALSE;
+  
+  const gboolean shiftModifier = (event->state & GDK_SHIFT_MASK) == GDK_SHIFT_MASK;
+
+  switch (event->button)
+  {
+    case 2:
+    {
+      /* Middle button: select the base index at the clicked coords */
+      
+      /* First make sure the detail view trees are fully drawn (so that the
+       * cached drawable is up to date - see notes in onExposeDetailViewTree)
+       * and then set the mouse-drag flag. */
+      detailViewRedrawAll(detailView);
+      gdk_window_process_all_updates();
+      setMouseDragMode(TRUE);
+      
+      int baseIdx = getBaseIndexAtDetailViewCoords(detailView, event->x, event->y);
+      
+      if (baseIdx != UNSET_INT)
+        {
+          /* For protein matches, select the first base in the triplet */
+          const int baseNum = 1;
+          const int frame = detailViewGetActiveFrame(detailView);
+          detailViewSetSelectedDisplayIdx(detailView, baseIdx, frame, baseNum, FALSE, TRUE, shiftModifier);
+        }
+      
+      handled = TRUE;
+      break;
+    }
+      
+    case 3:
+    {
+      /* Right button: store the clicked coord (required for copying ref seq),
+       * and then show the context menu. */
+      int baseIdx = getBaseIndexAtDetailViewCoords(detailView, event->x, event->y);
+      if (baseIdx != UNSET_INT)
+        {
+          const int baseNum = 1;
+          const int frame = detailViewGetActiveFrame(detailView);
+          detailViewSetClickedBaseIdx(detailView, baseIdx, frame, baseNum, FALSE, TRUE);
+        }
+      
+      GtkWidget *mainmenu = blxWindowGetMainMenu(detailViewGetBlxWindow(detailView));
+      gtk_menu_popup (GTK_MENU(mainmenu), NULL, NULL, NULL, NULL, event->button, event->time);
+      handled = TRUE;
+      break;
+    }
+      
+    default:
+      break;
+  };
+  
+  return handled;
+}
+
+
+static gboolean onMouseMoveDetailView(GtkWidget *detailView, GdkEventMotion *event, gpointer data)
+{
+  gboolean handled = FALSE;
+
+  const gboolean shiftModifier = (event->state & GDK_SHIFT_MASK) == GDK_SHIFT_MASK;
+  
+  if (event->state & GDK_BUTTON2_MASK)
+    {
+      /* Moving mouse with middle mouse button down. Update the currently-selected base
+       * (but don't re-centre on the selected base until the mouse button is released). */
+      const int baseIdx = getBaseIndexAtDetailViewCoords(detailView, event->x, event->y);
+      
+      if (baseIdx != UNSET_INT)
+        {
+          /* For protein matches, get the 1st base in the peptide */
+          const int baseNum = 1;
+          const int frame = detailViewGetActiveFrame(detailView);
+
+          /* If shift is pressed, extend the current selection range */
+          detailViewSetSelectedDisplayIdx(detailView, baseIdx, frame, baseNum, FALSE, TRUE, shiftModifier);
+        }
+      
+      handled = TRUE;
+    }
+  
+  return handled;
+}
+
+
+/* Implement custom scrolling for horizontal mouse wheel movements over the detailview.
+ * This scrolls our custom horizontal scrollbar for the whole Detail View. Leaves
+ * vertical scrolling to the default handler. */
+static gboolean onScrollDetailView(GtkWidget *detailView, GdkEventScroll *event, gpointer data)
+{
+  gboolean handled = FALSE;
+  
+  switch (event->direction)
+    {
+      case GDK_SCROLL_LEFT:
+        {
+          scrollDetailViewLeftStep(detailView);
+          handled = TRUE;
+          break;
+        }
+
+      case GDK_SCROLL_RIGHT:
+        {
+          scrollDetailViewRightStep(detailView);
+          handled = TRUE;
+          break;
+        }
+
+      default:
+        {
+          /* Default handler can handle vertical scrolling */
+          handled = FALSE;
+          break;
+        }
+    };
+  
+  return handled;
+}
+
+
+static gboolean onButtonReleaseDetailView(GtkWidget *detailView, GdkEventButton *event, gpointer data)
+{
+  gboolean handled = FALSE;
+  
+  /* Right button: show context menu (handled in button-press event) */
+  if (event->button == 3)
+    {
+      handled = TRUE;
+    }
+  
+  /* Middle button: scroll the selected base index to the centre (unless CTRL is pressed) */
+  if (event->button == 2)
+    {
+      /* Cancel middle-drag mode */
+      setMouseDragMode(FALSE);
+
+      const gboolean ctrlModifier = (event->state & GDK_CONTROL_MASK) == GDK_CONTROL_MASK;
+      
+      if (!ctrlModifier)
+        {
+          /* Move the scrollbar so that the currently-selected base index is at the centre */
+          const gboolean selectedBaseSet = detailViewGetSelectedIdxSet(detailView);
+          const int selectedBaseIdx = detailViewGetSelectedDisplayIdx(detailView);
+          
+          if (selectedBaseSet)
+            {
+              /* The coord is in terms of the display coords, i.e. whatever the displayed seq type is. */
+              const BlxSeqType seqType = detailViewGetSeqType(detailView);
+              const IntRange* const displayRange = detailViewGetDisplayRange(detailView);
+              
+              int newStart = selectedBaseIdx - (displayRange->length() / 2);
+              setDetailViewStartIdx(detailView, newStart, seqType);
+            }
+        }
+
+      detailViewRedrawAll(detailView);
+      
+      handled = TRUE;
+    }
+  
+  return handled;
+}
+
+
+/* Show the detail-view-header context menu, if applicable (return false if not) */
+static gboolean detailViewHeaderShowContextMenu(GtkWidget *header, GtkWidget *detailView, GdkEventButton *event)
+{
+  gboolean handled = FALSE;
+
+  /* Check if the click is in the selected coord range and if so show the sequence-header menu */
+  if (detailViewGetSelectedIdxSet(detailView))
+    {
+      const int displayIdx = seqColHeaderGetCoordAtPos(header, detailView, event->x, event->y);
+      IntRange *range = detailViewGetSelectedDisplayIdxRange(detailView);
+
+      if (valueWithinRange(displayIdx, range))
+        {
+          GtkWidget *blxWindow = detailViewGetBlxWindow(detailView);
+          GtkWidget *menu = blxWindowGetSeqHeaderMenu(blxWindow);
+
+          gtk_menu_popup (GTK_MENU(menu), NULL, NULL, NULL, NULL, event->button, event->time);
+
+          handled = TRUE;
+        }
+    }
+
+  return handled;
+}
+
+
+/* Handler for when a mouse button is pressed on a sequence column header widget.
+ * This signal only gets connected for protein matches, where there are 3 header
+ * widgets, each showing the DNA nucleotides for a specific reading frame. */
+static gboolean onButtonPressSeqColHeader(GtkWidget *header, GdkEventButton *event, gpointer data)
+{
+  gboolean handled = FALSE;
+
+  const gboolean shiftModifier = (event->state & GDK_SHIFT_MASK) == GDK_SHIFT_MASK;
+  GtkWidget *detailView = GTK_WIDGET(data);
+  
+  switch (event->button)
+  {
+    case 1:
+      {
+        if (event->type == GDK_BUTTON_PRESS)
+          {
+            /* Select the SNP that was clicked on.  */
+            blxWindowDeselectAllSeqs(detailViewGetBlxWindow(detailView));
+            const int clickedBase = seqColHeaderGetBase(header, 1, detailViewGetNumFrames(detailView));
+
+            selectClickedSnp(header, NULL, detailView, event->x, event->y, FALSE, clickedBase); /* SNPs are always un-expanded in the DNA track */
+            
+            detailViewRefreshAllHeaders(detailView);
+          }
+        else if (event->type == GDK_2BUTTON_PRESS)
+          {
+            /* Double-click: toggle variations-track visibility */
+            BlxContext *bc = detailViewGetContext(detailView);
+            const gboolean showTrack = !bc->flags[BLXFLAG_SHOW_VARIATION_TRACK];
+            
+            /* If we're enabling the variations track, also make sure that variations are highlighted in the header */
+            if (showTrack)
+              bc->flags[BLXFLAG_HIGHLIGHT_VARIATIONS] = TRUE;
+            
+            bc->flags[BLXFLAG_SHOW_VARIATION_TRACK] = showTrack;
+            detailViewUpdateShowSnpTrack(detailView, showTrack);
+          }
+
+        handled = TRUE;
+        break;
+      }
+      
+    case 2:
+      {
+        /* Middle button: select the nucleotide that was clicked on. */
+        selectClickedNucleotide(header, detailView, event->x, event->y, shiftModifier);
+        handled = TRUE;
+        break;
+      }
+      
+    case 3: /* right button */
+      {
+        handled = detailViewHeaderShowContextMenu(header, detailView, event);
+        break;
+      }
+
+    default:
+      break;
+  }
+
+  if (!handled)
+    { 
+      propagateEventButton(header, detailView, event);
+    }
+  
+  return handled;
+}
+
+
+static gboolean onButtonReleaseSeqColHeader(GtkWidget *header, GdkEventButton *event, gpointer data)
+{
+  gboolean handled = FALSE;
+  
+  /* Middle button: scroll the selected base index to the centre (unless CTRL is pressed) */
+  if (event->button == 2)
+    {
+      const gboolean ctrlModifier = (event->state & GDK_CONTROL_MASK) == GDK_CONTROL_MASK;
+      
+      if (!ctrlModifier)
+        {
+          /* Move the scrollbar so that the currently-selected base index is at the centre */
+          GtkWidget *detailView = GTK_WIDGET(data);
+          detailViewCentreOnSelection(detailView);
+        }
+      
+      handled = TRUE;
+    }
+
+  return handled;
+}
+
+
+static gboolean onMouseMoveSeqColHeader(GtkWidget *header, GdkEventMotion *event, gpointer data)
+{
+  GtkWidget *detailView = GTK_WIDGET(data);
+  const gboolean shiftModifier = (event->state & GDK_SHIFT_MASK) == GDK_SHIFT_MASK;
+
+  if (event->state & GDK_BUTTON2_MASK)
+    {
+      /* Moving mouse with middle mouse button down. Update the currently-selected base */
+      selectClickedNucleotide(header, detailView, event->x, event->y, shiftModifier);
+    }
+  else
+    {
+      /* Get the nucelotide we're hovering over and feedback info about that nucelotide in the
+       * feedback area */
+      int baseIdx, frame, baseNum;
+      getSeqColHeaderClickedNucleotide(header, detailView, event->x, event->y, &baseIdx, &frame, &baseNum);
+      
+      if (baseIdx != UNSET_INT && frame != UNSET_INT && baseNum != UNSET_INT)
+        {
+          BlxContext *bc = detailViewGetContext(detailView);
+          const int dnaIdx = convertDisplayIdxToDnaIdx(baseIdx, bc->seqType, frame, baseNum, bc->numFrames, bc->displayRev, &bc->refSeqRange);
+          const BlxStrand strand = blxWindowGetActiveStrand(detailViewGetBlxWindow(detailView));
+          
+          updateFeedbackAreaNucleotide(detailView, dnaIdx, strand);
+        }
+    }
+  
+  return TRUE;
+}
+
+
+/* Updates the widths of any dynamic-sized columns (really they are fixed-width
+ * columns so we update their widths manually here). */
+void updateDynamicColumnWidths(GtkWidget *detailView)
+{
+  /* Currently, only the sequence column has dynamic width, so just sum all of the
+   * other (visible) column widths and subtract from the allocation width. */
+  int width = detailView->allocation.width;
+  BlxColumnInfo *seqColInfo = NULL;
+  
+  GList *listItem = detailViewGetColumnList(detailView);
+  for ( ; listItem; listItem = listItem->next)
+    {
+      BlxColumnInfo *columnInfo = (BlxColumnInfo*)(listItem->data);
+      
+      if (columnInfo->columnId == BLXCOL_SEQUENCE)
+        seqColInfo = columnInfo;
+      else if (columnInfo->showColumn && columnInfo->dataLoaded)
+        width -= columnInfo->width;
+    }
+      
+  if (seqColInfo && seqColInfo->width != width)
+    {
+      seqColInfo->width = width;
+  
+      callFuncOnAllDetailViewTrees(detailView, resizeTreeColumns, NULL);
+      resizeDetailViewHeaders(detailView);
+
+      updateDetailViewRange(detailView);
+    }
+}
+
+
+/***********************************************************
+ *                     Callbacks                           *
+ ***********************************************************/
+
+/* If there are two trees and one is visible and the other hidden, toggle their hidden states */
+static void swapTreeVisibility(GtkWidget *detailView)
+{
+  /* Only do anything for DNA matches, where we have 1 frame and both strands are visible. */
+  if (detailViewGetSeqType(detailView) == BLXSEQ_DNA)
+    {
+      GtkWidget *tree1 = detailViewGetTreeContainer(detailView, BLXSTRAND_FORWARD, 1);
+      GtkWidget *tree2 = detailViewGetTreeContainer(detailView, BLXSTRAND_REVERSE, 1);
+      
+      if (widgetGetHidden(tree1) != widgetGetHidden(tree2))
+        {
+          widgetSetHidden(tree1, !widgetGetHidden(tree1));
+          widgetSetHidden(tree2, !widgetGetHidden(tree2));
+        }
+    }
+}
+
+
+/* If one grid is visible and the other hidden, toggle their hidden states */
+static void swapGridVisibility(GtkWidget *bigPicture)
+{
+  GtkWidget *grid1 = bigPictureGetFwdGrid(bigPicture);
+  GtkWidget *grid2 = bigPictureGetRevGrid(bigPicture);
+  
+  if (widgetGetHidden(grid1) != widgetGetHidden(grid2))
+    {
+      widgetSetHidden(grid1, !widgetGetHidden(grid1));
+      widgetSetHidden(grid2, !widgetGetHidden(grid2));
+    }
+}
+
+
+/* If one exon view is visible and the other hidden, toggle their hidden states */
+static void swapExonViewVisibility(GtkWidget *bigPicture)
+{
+  GtkWidget *exonView1 = bigPictureGetFwdExonView(bigPicture);
+  GtkWidget *exonView2 = bigPictureGetRevExonView(bigPicture);
+  
+  if (widgetGetHidden(exonView1) != widgetGetHidden(exonView2))
+    {
+      widgetSetHidden(exonView1, !widgetGetHidden(exonView1));
+      widgetSetHidden(exonView2, !widgetGetHidden(exonView2));
+    }
+}
+
+
+void toggleStrand(GtkWidget *detailView)
+{
+  DEBUG_ENTER("toggleStrand");
+
+  BlxContext *blxContext = detailViewGetContext(detailView);
+  GtkWidget *bigPicture = detailViewGetBigPicture(detailView);
+
+  /* Update the flag */
+  blxContext->displayRev = !blxContext->displayRev;
+  
+  /* Invert the display range for both detail view and big picture */
+  IntRange *bpRange = bigPictureGetDisplayRange(bigPicture);
+  const IntRange* const fullRange = &blxContext->fullDisplayRange;
+  const int bpStart = fullRange->max() - bpRange->min() + fullRange->min();
+  const int bpEnd = fullRange->max() - bpRange->max() + fullRange->min();
+  bpRange->set(bpStart, bpEnd);
+
+  IntRange *displayRange = detailViewGetDisplayRange(detailView);
+  const int newStart = fullRange->max() - displayRange->max() + fullRange->min();
+  setDetailViewStartIdx(detailView, newStart, blxContext->seqType);
+
+  /* Re-select the currently-selected index/range, if set, because the display coords
+   * have changed and need updating in the index structs. */
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+  detailViewRefreshSelection(detailView);
+ 
+  /* Re-calculate the cached display ranges for the MSPs */
+  cacheMspDisplayRanges(blxContext, properties->numUnalignedBases);
+  
+  /* Update the feedback box */
+  updateFeedbackBox(detailView);
+  
+  /* If one grid/tree is hidden and the other visible, toggle which is hidden */
+  swapTreeVisibility(detailView);
+  swapGridVisibility(bigPicture);
+  swapExonViewVisibility(bigPicture);
+  
+  /* Toggle the order of the trees and grids. */
+  refreshTreeOrder(detailView);
+  refreshGridOrder(bigPicture);
+
+  /* Redraw the tree and detail-view headers. Also need to resort because if the display is
+   * reversed it affects sorting by position. */
+  refreshDetailViewHeaders(detailView);
+  detailViewResortTrees(detailView);
+  callFuncOnAllDetailViewTrees(detailView, refreshTreeHeaders, NULL);
+  callFuncOnAllDetailViewTrees(detailView, refilterTree, NULL);
+  detailViewRedrawAll(detailView);
+  
+  /* Redraw the grids and grid headers */
+  refreshBigPictureDisplayRange(bigPicture, FALSE);
+  
+  DEBUG_EXIT("toggleStrand returning");
+}
+
+
+/* Go to a user-specified coord on the reference sequence (in terms of the DNA
+ * or peptide sequence as specified by coordSeqType). Selects the base index
+ * and centres on it. */
+void goToDetailViewCoord(GtkWidget *detailView, const BlxSeqType coordSeqType)
+{
+  static gchar defaultInput[32] = "";
+  static gboolean toplevelCoords = FALSE;
+
+  BlxContext *bc = detailViewGetContext(detailView);
+  
+  /* Pop up a dialog to request a coord from the user */
+  char *title = g_strdup_printf("%sGo to position", blxGetTitlePrefix(bc));
+
+  GtkWidget *dialog = gtk_dialog_new_with_buttons(title,
+                                                  NULL, 
+                                                  (GtkDialogFlags)(GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_NO_SEPARATOR),
+                                                  GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
+                                                  GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
+                                                  NULL);
+
+  g_free(title);
+  
+  gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT);
+  GtkWidget *contentArea = GTK_DIALOG(dialog)->vbox;
+  const int padding = 4;
+
+  /* Create a text-entry widget for the user to enter the coord */
+  GtkWidget *hbox = gtk_hbox_new(FALSE, 0);
+  gtk_box_pack_start(GTK_BOX(contentArea), hbox, FALSE, FALSE, padding);
+
+  GtkWidget *label = gtk_label_new("Enter coord: ");
+  gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, padding);
+
+  GtkWidget *entry = gtk_entry_new();
+  gtk_entry_set_text(GTK_ENTRY(entry), defaultInput);
+  gtk_entry_set_activates_default(GTK_ENTRY(entry), TRUE);
+  gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, padding);
+
+  /* Create a tick-box to toggle to top-level coords (default is local coords) */
+  GtkWidget *checkBox = gtk_check_button_new_with_mnemonic("Use _top-level coords");
+  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkBox), toplevelCoords);
+  gtk_box_pack_start(GTK_BOX(contentArea), checkBox, FALSE, FALSE, padding);
+
+  /* Show the dialog and wait for a response */
+  gtk_widget_show_all(dialog);
+
+  if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
+    {
+      const gchar *inputText = gtk_entry_get_text(GTK_ENTRY(entry));
+      toplevelCoords = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkBox));
+
+      /* Convert the input string to an int */
+      int requestedCoord = atoi(inputText);
+      
+      if (requestedCoord)
+        {
+          /* Remember this input for next time */
+          sprintf(defaultInput, "%d", requestedCoord);
+          
+          int coord = requestedCoord;
+          
+          /* If display coords are negated, assume the user has entered a 
+           * negative coord too, and un-negate it. */
+          const gboolean negate = negateCoords(bc);
+          
+          if (negate)
+            {
+              coord *= -1;
+            }
+
+          /* If the user entered a top-level coord, apply the offset to convert to local coords */
+          if (toplevelCoords)
+            {
+              coord += bc->refSeqOffset;
+            }
+
+          /* Check if it's in range. If not, try negating it in case the user
+           * entered the wrong sign */
+          if (!valueWithinRange(coord, &bc->refSeqRange))
+            {
+              g_debug("Coord '%d' does not lie within the reference sequence range [%d %d]; trying '%d'\n", requestedCoord, negate ? bc->refSeqRange.max() * -1 : bc->refSeqRange.min(), negate ? bc->refSeqRange.min() * -1 : bc->refSeqRange.max(), requestedCoord * -1);
+              coord *= -1;
+            }
+          
+          if (valueWithinRange(coord, &bc->refSeqRange))
+            {
+              const int activeFrame = detailViewGetActiveFrame(detailView);
+              detailViewSetSelectedDnaBaseIdx(detailView, coord, activeFrame, TRUE, FALSE, FALSE);
+              detailViewRedrawAll(detailView);
+            }
+          else
+            {
+              g_debug("Coord '%d' does not lie within the reference sequence range [%d %d]\n", negate ? coord * -1 : coord, negate? bc->refSeqRange.max() * -1 : bc->refSeqRange.min(), negate ? bc->refSeqRange.min() * -1 : bc->refSeqRange.max());
+              g_critical("Coord was not in the reference sequence range [%d %d]\n", negate ? bc->refSeqRange.max() * -1 : bc->refSeqRange.min(), negate ? bc->refSeqRange.min() * -1 : bc->refSeqRange.max());
+            }
+        }
+    }
+
+  gtk_widget_destroy(dialog);
+}
+
+
+/* This sets the main sort column to be the given column (it does not change
+ * any secondary sort columns). */
+void detailViewSetSortColumn(GtkWidget *detailView, const BlxColumnId sortColumn)
+{
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+  GList *columnList = blxWindowGetColumnList(properties->blxWindow());
+  const int numColumns = g_list_length(columnList);
+
+  if (numColumns > 0)
+    {      
+      if (properties->sortColumns[0] != sortColumn)
+        {
+          properties->sortColumns[0] = sortColumn;
+          detailViewResortTrees(detailView);
+        }
+    }
+}
+
+
+/* Find the next MSP (out the MSPs in this tree) whose start/end is the next closest to the
+ * current start position of the display, searching only in the direction specified by the
+ * search criteria passed in the user data. Updates the searchData with the offset found. */
+static gboolean findNextMatchInTree(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data)
+{
+  MatchSearchData *searchData = (MatchSearchData*)data;
+
+  /* Loop through all MSPs in this tree row. */
+  GList* mspListItem = treeGetMsps(model, iter);
+  
+  for ( ; mspListItem; mspListItem = mspListItem->next)
+    {
+      MSP *msp = (MSP*)(mspListItem->data);
+
+      /* Check its in the sequence list (if given), is a valid match or exon, and is in a visible layer */
+      if (mspLayerIsVisible(msp) &&
+          (mspIsBoxFeature(msp) || mspIsBlastMatch(msp)) &&
+          (!searchData->seqList || g_list_find(searchData->seqList, msp->sSequence)))
+        {
+          /* Get the offset of the msp coords from the given start coord and find the smallest,
+           * ignorning zero and negative offsets (negative means its the wrong direction) */
+          const int offset1 = (msp->qRange.min() - searchData->startDnaIdx) * searchData->searchDirection;
+          const int offset2 = (msp->qRange.max() - searchData->startDnaIdx) * searchData->searchDirection;
+          
+          int currentFrame = mspGetRefFrame(msp, searchData->seqType);
+          int currentBest = UNSET_INT;
+          
+          if (offset1 > 0 && (offset2 <= 0 || offset2 >= offset1))
+            {
+              currentBest = offset1;
+            }
+          else
+            {
+              currentBest = offset2;
+            }
+          if (currentBest > 0)
+            {
+              gboolean useNew = FALSE;
+
+              /* Check if this is the first one we've looked at */
+              useNew |= (searchData->offset == UNSET_INT);
+              
+              /* Check if this offset is smaller than the previous best */
+              useNew |= (currentBest < searchData->offset);
+              
+              /* If it's the same as the previous best, use the one with the smallest 
+               * frame number, i.e. give preference to the topmost frame (in the hope
+               * that this will be the least confusing!) */
+              useNew |= (currentBest == searchData->offset && currentFrame < searchData->foundFrame);
+              
+              if (useNew)
+                {
+                  searchData->offset = currentBest;
+                  searchData->foundFrame = currentFrame;
+                  searchData->foundMsp = msp;
+                }
+            }
+        }
+    }
+  
+  return FALSE;
+}
+
+
+/* Find and go to the next match (either left or right depending on the search flag).
+ * If a list of sequence names is given, only look at matches in those sequences.
+ * startDnaIdx determines where to start searching from. Sets the found match idx as
+ * the currently-selected base index.
+ * If extend is true, extend the current selection range to the next match position */
+static MSP* goToNextMatch(GtkWidget *detailView,
+                          const int startDnaIdx,
+                          const gboolean searchRight,
+                          GList *seqList, 
+                          const gboolean extend)
+{
+  BlxContext *bc = detailViewGetContext(detailView);
+  
+  const int searchDirection = (searchRight != bc->displayRev) ? 1 : -1;
+
+  MatchSearchData searchData = {startDnaIdx, 
+                                searchRight, 
+                                searchDirection, 
+                                bc->displayRev, 
+                                bc->seqType,
+                                bc->numFrames,
+                                &bc->refSeqRange,
+                                seqList,
+                                UNSET_INT,
+                                UNSET_INT,
+                                NULL};
+
+  /* Loop through the MSPs in all visible trees */
+  int frame = 1;
+
+  for (  ; frame <= searchData.numFrames; ++frame)
+    {
+      GtkWidget *treeContainer = detailViewGetTreeContainer(detailView, BLXSTRAND_FORWARD, frame);
+      GtkWidget *tree = treeContainerGetTree(GTK_CONTAINER(treeContainer));
+      
+      if (GTK_WIDGET_VISIBLE(tree) && gtk_widget_get_parent(treeContainer)) /* ignore if not currently included in view */
+        {
+          GtkTreeModel *model = treeGetBaseDataModel(GTK_TREE_VIEW(tree));
+          gtk_tree_model_foreach(model, findNextMatchInTree, &searchData);
+        }
+
+      treeContainer = detailViewGetTreeContainer(detailView, BLXSTRAND_REVERSE, frame);
+      tree = treeContainerGetTree(GTK_CONTAINER(treeContainer));
+      
+      if (GTK_WIDGET_VISIBLE(tree) && gtk_widget_get_parent(treeContainer)) /* ignore if not currently included in view */
+        {
+          GtkTreeModel *model = treeGetBaseDataModel(GTK_TREE_VIEW(tree));
+          gtk_tree_model_foreach(model, findNextMatchInTree, &searchData);
+        }
+    }
+  
+  if (searchData.offset != UNSET_INT)
+    {
+      /* Offset the start coord by the found amount. */
+      int newDnaIdx = searchData.startDnaIdx + (searchData.offset * searchDirection);
+      detailViewSetSelectedDnaBaseIdx(detailView, newDnaIdx, searchData.foundFrame, TRUE, FALSE, extend);
+      callFuncOnAllDetailViewTrees(detailView, treeScrollSelectionIntoView, NULL);
+      detailViewRedrawAll(detailView);
+    }
+  
+  return searchData.foundMsp;
+}
+
+
+/* Go to the previous match (optionally limited to matches in the given list)  */
+MSP* prevMatch(GtkWidget *detailView, GList *seqList, const gboolean extend)
+{
+  /* Jump to the nearest match to the currently selected base index, if there is
+   * one and if it is currently visible. Otherwise use the current display centre. */
+  int startDnaIdx = detailViewGetSelectedDnaIdx(detailView);
+  int startCoord = detailViewGetSelectedDisplayIdx(detailView);
+  const IntRange* const displayRange = detailViewGetDisplayRange(detailView);
+  
+  if (!valueWithinRange(startCoord, displayRange))
+    {
+      startCoord = displayRange->centre();
+      
+      /* Use base 1 within the currently selected frame for this display coord */
+      int frame = detailViewGetActiveFrame(detailView);
+      BlxContext *bc = detailViewGetContext(detailView);
+      startDnaIdx = convertDisplayIdxToDnaIdx(startCoord, bc->seqType, frame, 1, bc->numFrames, bc->displayRev, &bc->refSeqRange);
+    }
+  
+  return goToNextMatch(detailView, startDnaIdx, FALSE, seqList, extend);
+}
+
+
+/* Go to the next match (optionally limited to matches in the given list)  */
+MSP* nextMatch(GtkWidget *detailView, GList *seqList, const gboolean extend)
+{
+  /* Jump to the nearest match to the currently selected base index, if there is
+   * one and if it is currently visible. Otherwise use the current display centre. */
+  int startDnaIdx = detailViewGetSelectedDnaIdx(detailView);
+  int startCoord = detailViewGetSelectedDisplayIdx(detailView);
+  const IntRange* const displayRange = detailViewGetDisplayRange(detailView);
+  
+  if (!valueWithinRange(startCoord, displayRange))
+    {
+      startCoord = displayRange->centre();
+      
+      /* Use base 1 within the currently selected frame for this display coord */
+      int frame = detailViewGetActiveFrame(detailView);
+      BlxContext *bc = detailViewGetContext(detailView);
+      startDnaIdx = convertDisplayIdxToDnaIdx(startCoord, bc->seqType, frame, 1, bc->numFrames, bc->displayRev, &bc->refSeqRange);
+    }
+  
+  return goToNextMatch(detailView, startDnaIdx, TRUE, seqList, extend);
+}
+
+
+/* Go to the first match (optionally limited to matches in the given list)  */
+MSP* firstMatch(GtkWidget *detailView, GList *seqList, const gboolean extend)
+{
+  /* Jump to the nearest match to the start of the ref seq */
+  const IntRange* const refSeqRange = detailViewGetRefSeqRange(detailView);
+  const int startIdx = detailViewGetDisplayRev(detailView) ? refSeqRange->max() : refSeqRange->min();
+  
+  return goToNextMatch(detailView, startIdx, TRUE, seqList, extend);
+}
+
+
+/* Go to the last match (optionally limited to matches in the given list)  */
+MSP* lastMatch(GtkWidget *detailView, GList *seqList, const gboolean extend)
+{
+  /* Jump to the nearest match to the end of the reference sequence */
+  const IntRange* const refSeqRange = detailViewGetRefSeqRange(detailView);
+  const int startIdx = detailViewGetDisplayRev(detailView) ? refSeqRange->min() : refSeqRange->max();
+
+  return goToNextMatch(detailView,
+                       startIdx, FALSE, seqList, extend);
+}
+
+/***********************************************************
+ *                     Initialization                      *
+ ***********************************************************/
+
+/* This loops through all the columns and adds each column's header widget to the header bar. */
+static void addColumnsToHeaderBar(GtkBox *headerBar, GList *columnList)
+{
+  /* Loop through each column and add its header widget to the header bar */
+  GList *columnItem = columnList;
+  
+  for ( ; columnItem; columnItem = columnItem->next)
+    {
+      BlxColumnInfo *columnInfo = (BlxColumnInfo*)(columnItem->data);
+
+      /* The sequence column is a special one that wants to fill any additional space, so
+       * set the 'expand' property to true for that column only. */
+      const gboolean expand = (columnInfo->columnId == BLXCOL_SEQUENCE );
+      gtk_box_pack_start(headerBar, columnInfo->headerWidget, expand, TRUE, 0);
+    }
+}
+
+
+/* Create the header bar for the detail view. This contains the labels for the
+ * detail-view trees (since we only want one label at the top, rather than 
+ * individual labels for each tree). For protein sequence matches, the header
+ * for the sequence column will also show the DNA sequence (separated into reading
+ * frames). 
+ * Column data is compiled into the detailViewColumns return argument. 
+ * If includeSnpTrack is true then the snp track widget will also be created. */
+static GtkWidget* createDetailViewHeader(GtkWidget *detailView, 
+                                         const BlxSeqType seqType, 
+                                         const int numFrames,
+                                         GList *columnList,
+                                         const gboolean includeSnpTrack,
+                                         GtkWidget **snpTrack)
+{
+  GtkBox *headerBar = GTK_BOX(gtk_hbox_new(FALSE, 0)); /* hbox for the column headers */
+  
+  /* Create a SNP track, if requested */
+  if (includeSnpTrack && snpTrack)
+    {
+      *snpTrack = createSnpTrackHeader(detailView, BLXSTRAND_NONE);
+    }
+
+  /* Add all the column headers to the header bar */
+  addColumnsToHeaderBar(headerBar, columnList);
+
+  return GTK_WIDGET(headerBar);
+}
+
+
+/* Create the variations track header widget. If the strand is BLXSTRAND_NONE
+ * then the active strand will be used. */
+GtkWidget* createSnpTrackHeader(GtkWidget *detailView, const BlxStrand strand)
+{
+  GtkWidget *snpTrack = gtk_layout_new(NULL, NULL);
+
+  gtk_widget_set_name(snpTrack, SNP_TRACK_HEADER_NAME);  
+  snpTrackSetStrand(snpTrack, strand);
+
+  gtk_widget_add_events(snpTrack, GDK_BUTTON_PRESS_MASK);
+  g_signal_connect(G_OBJECT(snpTrack), "expose-event", G_CALLBACK(onExposeVariationsTrack), detailView);
+  g_signal_connect(G_OBJECT(snpTrack), "button-press-event", G_CALLBACK(onButtonPressSnpTrack), detailView);
+  
+  return snpTrack;
+}
+
+
+/* Create a custom header widget for the sequence column for protein matches (this is where
+ * we will display the triplets that make up the codons.) Returns NULL for DNA matches. */
+static void createSeqColHeader(GtkWidget *detailView,
+                               const BlxSeqType seqType,
+                               const int numFrames,
+                               GList *columnList)
+{
+  if (seqType == BLXSEQ_PEPTIDE)
+    {
+      GtkWidget *header = gtk_vbox_new(FALSE, 0);
+      
+      int frame = 0;
+      for ( ; frame < numFrames; ++frame)
+        {
+          GtkWidget *line = gtk_layout_new(NULL, NULL);
+          gtk_box_pack_start(GTK_BOX(header), line, FALSE, TRUE, 0);
+
+          gtk_widget_set_name(line, DNA_TRACK_HEADER_NAME);
+          seqColHeaderSetRow(line, frame + 1);
+
+          /* Disable double buffering to try to speed up drawing */
+          GTK_WIDGET_UNSET_FLAGS (line, GTK_DOUBLE_BUFFERED);
+
+          gtk_widget_add_events(line, GDK_BUTTON_PRESS_MASK);
+          gtk_widget_add_events(line, GDK_BUTTON_RELEASE_MASK);
+          gtk_widget_add_events(line, GDK_POINTER_MOTION_MASK);
+          g_signal_connect(G_OBJECT(line), "expose-event", G_CALLBACK(onExposeDnaTrack), detailView);
+          g_signal_connect(G_OBJECT(line), "button-press-event", G_CALLBACK(onButtonPressSeqColHeader), detailView);
+          g_signal_connect(G_OBJECT(line), "button-release-event", G_CALLBACK(onButtonReleaseSeqColHeader), detailView);
+          g_signal_connect(G_OBJECT(line), "motion-notify-event", G_CALLBACK(onMouseMoveSeqColHeader), detailView);
+        }
+
+      /* Set the header widget (and its refresh function) in the column data */
+      BlxColumnInfo* columnInfo = getColumnInfo(columnList, BLXCOL_SEQUENCE);
+      columnInfo->headerWidget = header;
+      columnInfo->refreshFunc = refreshTextHeader;
+    }
+}
+
+
+/* Create the horizontal scrollbar for custom scrolling. This takes ownership of
+ * the GtkAdjustment. */
+ GtkWidget* createDetailViewScrollBar(GtkAdjustment *adjustment, GtkWidget *detailView)
+{
+  GtkWidget *scrollBar = gtk_hscrollbar_new(adjustment);
+  
+  /* Connect signals */
+  g_signal_connect(G_OBJECT(adjustment), "changed", G_CALLBACK(onScrollRangeChangedDetailView), detailView);
+  g_signal_connect(G_OBJECT(adjustment), "value-changed", G_CALLBACK(onScrollPosChangedDetailView), detailView);
+  
+  return scrollBar;
+}
+
+
+static void createFeedbackBoxEntry(GtkBox *parent,
+                                   const char *widget_name,
+                                   const char *tooltip,
+                                   GCallback cb_func,
+                                   gpointer cb_data)
+{
+  const int charWidth = 8; /* guesstimate */
+
+  GtkWidget *entry = gtk_entry_new() ;
+
+  gtk_widget_set_name(entry, widget_name);
+  gtk_widget_set_tooltip_text(entry, tooltip);
+  gtk_editable_set_editable(GTK_EDITABLE(entry), FALSE);
+  gtk_widget_set_size_request(entry, DETAIL_VIEW_FEEDBACK_MIN_WIDTH * charWidth, -1) ;
+
+  gtk_box_pack_start(GTK_BOX(parent), entry, FALSE, FALSE, 0);
+
+  /* We want the box to be printed, so connect the expose function that will 
+   * draw to a pixmap for printing */
+  g_signal_connect(G_OBJECT(entry), "expose-event", cb_func, cb_data);
+}
+
+
+/* Create the feedback box. (This is actually a set of several boxes which feed
+ * back info to the user about the currently-selected base/sequence.) */
+static GtkWidget* createFeedbackBox(GtkToolbar *toolbar, char *windowColor)
+{
+  /* Put all feedback boxes into a parent hbox */
+  GtkWidget *feedbackBox = gtk_hbox_new(FALSE, 0);
+  GtkBox *box = GTK_BOX(feedbackBox);
+
+  blxSetWidgetColor(feedbackBox, windowColor);
+
+  /* Reference sequence coord */
+  createFeedbackBoxEntry(box, DETAIL_VIEW_FEEDBACK_REF_COORD, "Reference sequence coord(s)",
+                         G_CALLBACK(onExposePrintable), NULL);
+
+  /* Match sequence "name:coord/len" */
+  gtk_box_pack_start(box, gtk_label_new("  "), FALSE, FALSE, 0);
+
+  createFeedbackBoxEntry(box, DETAIL_VIEW_FEEDBACK_MATCH_NAME, DETAIL_VIEW_FEEDBACK_MATCH_NAME_TOOLTIP, 
+                         G_CALLBACK(onExposePrintable), NULL);
+
+  gtk_box_pack_start(box, gtk_label_new(":"), FALSE, FALSE, 0);
+
+  createFeedbackBoxEntry(box, DETAIL_VIEW_FEEDBACK_MATCH_COORD, "Match sequence coord(s)", 
+                         G_CALLBACK(onExposePrintable), NULL);
+
+  gtk_box_pack_start(box, gtk_label_new("/"), FALSE, FALSE, 0);
+
+  createFeedbackBoxEntry(box, DETAIL_VIEW_FEEDBACK_MATCH_LEN, "Match sequence length", 
+                         G_CALLBACK(onExposePrintable), NULL);
+
+  /* Read depth at selected coord(s) */
+  gtk_box_pack_start(box, gtk_label_new("  "), FALSE, FALSE, 0);
+  
+  createFeedbackBoxEntry(box, DETAIL_VIEW_FEEDBACK_DEPTH, DETAIL_VIEW_FEEDBACK_DEPTH_TOOLTIP, 
+                         G_CALLBACK(onExposePrintable), NULL);
+  
+  return feedbackBox;
+}
+
+
+/* Create the status bar for the detail-view toolbar. (This feeds back info to the user 
+ * about the currently-moused-over sequence.) */
+static GtkWidget* createStatusBar(GtkToolbar *toolbar, char *windowColor)
+{
+  GtkWidget *statusBar = gtk_statusbar_new() ;
+  gtk_statusbar_set_has_resize_grip(GTK_STATUSBAR(statusBar), FALSE);
+  blxSetWidgetColor(statusBar, windowColor);
+
+  /* Make it expandable so we use all available space. Set minimum size to be 0
+   * because it's better to show it small than not at all. */
+  gtk_widget_set_size_request(statusBar, 0, -1) ;
+  //GtkToolItem *item = addToolbarWidget(toolbar, statusBar, 0) ;
+  //gtk_tool_item_set_expand(item, TRUE); /* make as big as possible */
+
+  setStatusBarShadowStyle(statusBar, "GTK_SHADOW_NONE");
+
+  return statusBar;
+}
+
+
+/* Create the detail view toolbar */
+static GtkWidget* createDetailViewButtonBar(GtkWidget *detailView, 
+                                            GtkWidget *toolbarIn,
+                                            BlxBlastMode mode,
+                                            const BlxColumnId sortColumn,
+                                            GList *columnList,
+                                            char *windowColor,
+                                            GtkWidget **feedbackBox,
+                                            GtkWidget **statusBar)
+{
+  GtkToolbar *toolbar = GTK_TOOLBAR(toolbarIn);
+
+  blxSetWidgetColor(GTK_WIDGET(toolbar), windowColor);
+  
+  gtk_toolbar_set_style(toolbar, GTK_TOOLBAR_ICONS);
+  gtk_toolbar_set_icon_size(toolbar, GTK_ICON_SIZE_SMALL_TOOLBAR);
+
+  *feedbackBox = createFeedbackBox(toolbar, windowColor);
+  *statusBar = createStatusBar(toolbar, windowColor);
+
+  /* Create a parent hbox which will hold the main toolbar
+   * and the detail-view tools. (We do this rather than putting
+   * the detail-view tools directly into the toolbar so that
+   * we have more control over spacing. In particular, the 
+   * toolbar tools go into a nice drop-down box when there isn't
+   * enough space, but the detail-view tools won't display if 
+   * that happens, so we keep them separate.) */
+  GtkBox *hbox = GTK_BOX(gtk_hbox_new(FALSE, 0));
+  gtk_box_pack_start(hbox, toolbarIn, TRUE, TRUE, 0);
+  gtk_box_pack_start(hbox, *feedbackBox, FALSE, FALSE, 0);
+  gtk_box_pack_start(hbox, *statusBar, TRUE, TRUE, 0);
+
+  /* Put the toolbar in a handle box so that it can be torn off */
+  GtkWidget *toolbarContainer = createToolbarHandle();
+  gtk_container_add(GTK_CONTAINER(toolbarContainer), GTK_WIDGET(hbox));
+  blxSetWidgetColor(toolbarContainer, windowColor);
+
+  return toolbarContainer;
+}
+
+
+/* Create two detail-view trees and place them in the 2 panes of the container (if one is
+ * given). The first tree gets associated with grid1 and appended to list1, and the second
+ * with grid2 and list2. If hasHeaders is true, the first tree will have visible headers. */
+static void createTwoPanedTrees(GtkWidget *detailView,
+                                GtkPaned *panedWin, 
+                                GtkCellRenderer *renderer,
+                                GtkWidget *grid1, 
+                                GtkWidget *grid2,
+                                GList **list1,
+                                GList **list2,
+                                BlxSeqType seqType,
+                                GList *columnList,
+                                const char* const refSeqName,
+                                const int frame1,
+                                const int frame2,
+                                const gboolean includeSnpTrack)
+{
+  GtkWidget *tree1 = createDetailViewTree(grid1, detailView, renderer, list1, columnList, seqType, refSeqName, frame1, includeSnpTrack);
+  GtkWidget *tree2 = createDetailViewTree(grid2, detailView, renderer, list2, columnList, seqType, refSeqName, frame2, includeSnpTrack);
+  
+  if (panedWin)
+    {
+      gtk_paned_pack1(GTK_PANED(panedWin), tree1, TRUE, TRUE);
+      gtk_paned_pack2(GTK_PANED(panedWin), tree2, TRUE, TRUE);
+    }
+}
+
+
+/* Create three detail-view trees and place them in the paned widget. We only have
+ * two panes in the widget, so two of the trees will be placed in a second, nested
+ * paned widget. */
+static void createThreePanedTrees(GtkWidget *detailView,
+                                  GtkPaned *panedWin,
+                                  GtkCellRenderer *renderer,
+                                  GtkWidget *grid,
+                                  GList **list,
+                                  BlxSeqType seqType,
+                                  const gboolean addToDetailView,
+                                  GList *columnList,
+                                  const char* const refSeqName,
+                                  const gboolean includeSnpTrack)
+{
+  const int frame1 = 1, frame2 = 2, frame3 = 3;
+  
+  /* Create a tree for pane1 (but only add it to the detailView if instructed to).
+   * The first tree has headers. */
+  GtkWidget *tree1 = createDetailViewTree(grid, detailView, renderer, list, columnList, seqType, refSeqName, frame1, includeSnpTrack);
+
+  GtkPaned *nestedPanedWidget = NULL;
+  if (addToDetailView)
+    {
+      gtk_paned_pack1(GTK_PANED(panedWin), tree1, TRUE, TRUE);
+      
+      /* Create another paned widget and place it in pane 2 */
+      nestedPanedWidget = GTK_PANED(gtk_vpaned_new());
+      gtk_paned_pack2(panedWin, GTK_WIDGET(nestedPanedWidget), TRUE, TRUE);
+    }
+  
+  /* Create two more trees (and place them in the nested paned widget, if it is not null). 
+   * Neither of these trees should have headers. */
+  createTwoPanedTrees(detailView, nestedPanedWidget, renderer, grid, grid, list, list, seqType, columnList, refSeqName, frame2, frame3, includeSnpTrack);
+}
+
+
+/* Create the trees for the detail view, creating sub-panes if necessary depending
+ * on how many trees we need */
+static void createDetailViewPanes(GtkWidget *detailView, 
+                                  GtkPaned *panedWin,
+                                  GtkCellRenderer *renderer,
+                                  GtkWidget *fwdStrandGrid, 
+                                  GtkWidget *revStrandGrid, 
+                                  const int numFrames,
+                                  GList **fwdStrandTrees,
+                                  GList **revStrandTrees,
+                                  BlxSeqType seqType,
+                                  GList *columnList,
+                                  const char* const refSeqName,
+                                  const gboolean includeSnpTrack)
+{
+  if (numFrames == 1)
+    {
+      /* DNA matches: we need 2 trees, one for the forward strand and one for the reverse. */
+      createTwoPanedTrees(detailView, 
+                          panedWin, 
+                          renderer,
+                          fwdStrandGrid, 
+                          revStrandGrid, 
+                          fwdStrandTrees, 
+                          revStrandTrees, 
+                          seqType,
+                          columnList,
+                          refSeqName,
+                          1,
+                          1,
+                          includeSnpTrack);
+    }
+  else if (numFrames == 3)
+    {
+      /* Protein matches: we need 3 trees for the 3 reading frames for EACH strand (although only
+       * one set of trees will be displayed at a time). */
+      createThreePanedTrees(detailView, panedWin, renderer, fwdStrandGrid, fwdStrandTrees, seqType, TRUE, columnList, refSeqName, includeSnpTrack);
+      createThreePanedTrees(detailView, panedWin, renderer, revStrandGrid, revStrandTrees, seqType, FALSE, columnList, refSeqName, includeSnpTrack);
+    }
+}
+
+
+
+/***********************************************************
+ *                     Initialization                      *
+ ***********************************************************/
+
+/* Add the MSPs to the detail-view trees. Calculates and returns the lowest ID 
+ * out of all the blast matches. modelId specifies which tree data model should
+ * be active at the start. If create is true, the tree data stores are created;
+ * otherwise we assume they already exist. */
+void detailViewAddMspData(GtkWidget *detailView, MSP *mspList, GList *seqList)
+{
+  BlxContext *bc = detailViewGetContext(detailView);
+
+  /* First, make sure there is a data model for each tree */
+  callFuncOnAllDetailViewTrees(detailView, treeCreateBaseDataModel, NULL);
+
+  /* Loop through each MSP, and add it to the correct tree based on its strand and
+   * reading frame. Also find the lowest ID value out of all the matches. */
+  MSP *msp = mspList;
+  
+  for ( ; msp; msp = msp->next)
+    {
+      /* Only add matches/exons to trees. For exons, only add the parent exon;
+       * it's child UTR/CDSs will be added automatically */
+      if (mspIsBlastMatch(msp) || msp->type == BLXMSP_EXON || msp->type == BLXMSP_BASIC)
+        {
+          /* Find the tree that this MSP should belong to based on its reading frame and strand */
+          BlxStrand strand = mspGetRefStrand(msp);
+          const int frame = mspGetRefFrame(msp, bc->seqType);
+          GtkWidget *tree = detailViewGetTree(detailView, strand, frame);
+
+          if (tree)
+            {
+              GtkListStore *store = GTK_LIST_STORE(treeGetBaseDataModel(GTK_TREE_VIEW(tree)));
+              addMspToTree(msp, tree, store);
+            }
+          else
+            {
+              g_warning("Could not determine alignment list. Sequence may not be shown. (sequence = '%s', q range [%d-%d], s range [%d-%d])\n", mspGetSName(msp), msp->qRange.min(), msp->qRange.max(), msp->sRange.min(), msp->sRange.max());
+            }
+        }
+    }
+    
+  /* Finally, create a custom-filtered version of the data store for each tree. We do 
+   * this AFTER adding the data so that it doesn't try to re-filter every time we add a row.
+   * To do: Note that if we're calling this function a second time to add additional rows, the filter
+   * will already exist so this may be slow and we may need to look into improving this. */
+  callFuncOnAllDetailViewTrees(detailView, treeCreateFilteredDataModel, NULL);
+  
+  /* Also create a second data store that will store one sequence per row (as opposed to one
+   * MSP per row). This data store will be switched in when the user selects 'squash matches'. */
+  callFuncOnAllDetailViewTrees(detailView, addSequencesToTree, seqList);
+}
+
+
+static gboolean onMouseMoveSnpSplitter(GtkWidget *paned, GdkEventMotion *event, gpointer data)
+{
+  GtkWidget *detailView = GTK_WIDGET(data);
+
+  if ((event->state & GDK_BUTTON1_MASK)) /* left button */
+    {
+      /* If the splitter position is zero then disable the snp track display */
+
+      if (GTK_IS_PANED(paned))
+        {
+          const int splitterPos = gtk_paned_get_position(GTK_PANED(paned));
+          BlxContext *bc = detailViewGetContext(detailView);
+
+          if (splitterPos != 0 && 
+              !(bc->flags[BLXFLAG_SHOW_VARIATION_TRACK] && bc->flags[BLXFLAG_HIGHLIGHT_VARIATIONS]) )
+            {
+              /* Show the track. We must also enable highlight-variations or it will not make any
+               * sense (and probably won't work anyway because the code checks both values). */
+              bc->flags[BLXFLAG_SHOW_VARIATION_TRACK] = TRUE;
+              bc->flags[BLXFLAG_HIGHLIGHT_VARIATIONS] = TRUE;
+              detailViewRefreshAllHeaders(detailView);
+              DEBUG_OUT("Enabled variations track (exposed by splitter)\n");
+            }
+          else if (splitterPos == 0 && bc->flags[BLXFLAG_SHOW_VARIATION_TRACK])
+            {
+              /* Disable the variations track. Leave the highlight-varations setting as it is. */
+              bc->flags[BLXFLAG_SHOW_VARIATION_TRACK] = FALSE;
+              detailViewRefreshAllHeaders(detailView);
+              DEBUG_OUT("Disabled variations track (hidden by splitter)\n");
+            }
+        }
+    }
+
+  return FALSE; /* allow default handler to continue */
+}
+
+
+/* Utility to create the paned window for the snp track. The otherWidget is the container for all
+ * the other widgets to go into the 2nd pane of the new paned window. */
+GtkWidget* snpTrackCreatePanedWin(GtkWidget *detailView, GtkWidget *snpTrack, GtkWidget *otherWidget)
+{
+  GtkPaned *paned = GTK_PANED(gtk_vpaned_new());
+  gtk_widget_set_name(GTK_WIDGET(paned), SNP_TRACK_CONTAINER_NAME);  
+
+  /* Top pane is the snp track. Put it inside a scrollwin */
+  GtkWidget *snpScrollWin = gtk_scrolled_window_new(NULL, NULL);
+  gtk_container_add(GTK_CONTAINER(snpScrollWin), snpTrack);
+
+  gtk_widget_set_name(GTK_WIDGET(snpScrollWin), SNP_TRACK_SCROLL_WIN_NAME);  
+  gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(snpScrollWin), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
+
+  gtk_paned_pack1(paned, snpScrollWin, FALSE, TRUE);
+  gtk_paned_pack2(paned, otherWidget, TRUE, TRUE);
+
+  /* Connect to signals for the splitter bar handle */
+  g_signal_connect(G_OBJECT(paned), "motion-notify-event", G_CALLBACK(onMouseMoveSnpSplitter), detailView);
+
+  /* Create properties struct for the paned window, which will cache the splitter position */
+  panedWindowCreateProperties(GTK_WIDGET(paned), -1);
+
+  return GTK_WIDGET(paned);
+}
+
+
+GtkWidget* createDetailView(GtkWidget *blxWindow,
+                            BlxContext *bc,
+                            GtkContainer *parent,
+                            GtkWidget *toolbar,
+                            GtkAdjustment *adjustment, 
+                            GtkWidget *fwdStrandGrid, 
+                            GtkWidget *revStrandGrid,
+                            MSP *mspList,
+                            GList *columnList,
+                            BlxBlastMode mode,
+                            BlxSeqType seqType,
+                            int numFrames,
+                            const char* const refSeqName,
+                            const int startCoord,
+                            const gboolean sortInverted,
+                            const BlxColumnId sortColumn,
+                            const gboolean optionalDataLoaded,
+                            char *windowColor)
+{
+  /* We'll group the trees in their own container so that we can pass them all around
+   * together (so that operations like zooming and scrolling can act on the group). The
+   * trees might be a direct child of this or a grandchild/grand-grandchild, so we will need
+   * to look at all children recursively and check if they're the correct type. (We'll give 
+   * all of our detail-view trees the same name so that we can identify them.) */
+  GtkWidget *detailView = gtk_vbox_new(FALSE, 0);
+  gtk_container_add(parent, detailView);
+  
+  GtkWidget *panedWin = gtk_vpaned_new();
+  gtk_widget_set_name(panedWin, DETAIL_VIEW_WIDGET_NAME);
+
+  /* Update the sequence column with a custom header type. (Must be done
+   * before calling createDetailViewHeader) */
+  createSeqColHeader(detailView, seqType, numFrames, columnList);
+
+  /* Create the toolbar. We need to remember the feedback box and status bar so we can set them in the properties. */
+  GtkWidget *feedbackBox = NULL;
+  GtkWidget *statusBar = NULL;
+  GtkWidget *buttonBar = createDetailViewButtonBar(detailView, toolbar, mode, sortColumn, columnList, windowColor, &feedbackBox, &statusBar);
+
+  /* Create the header bar. If viewing protein matches include one SNP track in the detail 
+   * view header; otherwise create SNP tracks in each tree header. */
+  const gboolean singleSnpTrack = (seqType == BLXSEQ_PEPTIDE);
+  GtkWidget *snpTrack = NULL;
+  GtkWidget *header = createDetailViewHeader(detailView, seqType, numFrames, columnList, singleSnpTrack, &snpTrack);
+
+  /* Create a custom cell renderer to render the sequences in the detail view */
+  GtkCellRenderer *renderer = sequence_cell_renderer_new();
+
+  /* Create the trees. */
+  GList *fwdStrandTrees = NULL, *revStrandTrees = NULL;
+  createDetailViewPanes(detailView, 
+                        GTK_PANED(panedWin),
+                        renderer,
+                        fwdStrandGrid, 
+                        revStrandGrid, 
+                        numFrames, 
+                        &fwdStrandTrees,
+                        &revStrandTrees,
+                        seqType,
+                        columnList,
+                        refSeqName,
+                        !singleSnpTrack);
+
+  /* Add the elements into the main widget */
+  gtk_box_pack_start(GTK_BOX(detailView), buttonBar, FALSE, TRUE, 0);
+
+  if (snpTrack)
+    {
+      /* Add the snp track in a pane so it can be resized vs everything below it.
+       * Top pane is the snp track, bottom pane is everything else (in a vbox) */
+      GtkWidget *vbox = gtk_vbox_new(FALSE, 0);
+      gtk_box_pack_start(GTK_BOX(vbox), header, FALSE, TRUE, 0);
+      gtk_box_pack_start(GTK_BOX(vbox), panedWin, TRUE, TRUE, 0);
+
+      GtkWidget *paned = snpTrackCreatePanedWin(detailView, snpTrack, vbox);
+      gtk_box_pack_start(GTK_BOX(detailView), GTK_WIDGET(paned), TRUE, TRUE, 0);
+    }
+  else
+    {
+      gtk_box_pack_start(GTK_BOX(detailView), header, FALSE, TRUE, 0);
+      gtk_box_pack_start(GTK_BOX(detailView), panedWin, TRUE, TRUE, 0);
+    }
+
+  /* Add a coverage view */
+  CoverageViewProperties *coverageViewP = createCoverageView(blxWindow, bc);
+  gtk_box_pack_start(GTK_BOX(detailView), coverageViewP->widget(), FALSE, TRUE, 0);
+
+  /* Connect signals */
+  gtk_widget_add_events(detailView, GDK_BUTTON_PRESS_MASK);
+  g_signal_connect(G_OBJECT(detailView), "button-press-event",   G_CALLBACK(onButtonPressDetailView),   NULL);
+  g_signal_connect(G_OBJECT(detailView), "button-release-event", G_CALLBACK(onButtonReleaseDetailView), NULL);
+  g_signal_connect(G_OBJECT(detailView), "motion-notify-event",  G_CALLBACK(onMouseMoveDetailView),     NULL);
+  g_signal_connect(G_OBJECT(detailView), "scroll-event",         G_CALLBACK(onScrollDetailView),        NULL);
+
+  DetailViewProperties *properties = detailViewCreateProperties(detailView, 
+                                                                blxWindow, 
+                                                                bc,
+                                                                coverageViewP,
+                                                                renderer,
+                                                                fwdStrandTrees,
+                                                                revStrandTrees,
+                                                                feedbackBox, 
+                                                                statusBar,
+                                                                columnList,
+                                                                adjustment, 
+                                                                startCoord,
+                                                                sortColumn);
+
+  coverageViewP->setPanel(properties);
+
+  return detailView;
+}
+
diff --git a/blixemApp/detailview.hpp b/blixemApp/detailview.hpp
new file mode 100644
index 0000000..8e1e29b
--- /dev/null
+++ b/blixemApp/detailview.hpp
@@ -0,0 +1,369 @@
+/*  File: detailview.c
+ *  Author: Gemma Barson, 2009-11-23
+ *  Copyright (c) 2009 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: The "detail view" section shows the sequence data in detail,
+ *              down to the actual nucleotides and peptides. There is a 
+ *              separate section to show the alignments for each strand and
+ *              (in protein mode) reading-frame. Each section is a list of
+ *              alignments (called a "tree" in the code - see detailviewtree.h)
+ *
+ *              Since there are 6 combinations of strand and reading frame for
+ *              proteins, only one strand is shown at the time and the user can
+ *              "toggle" which strand is currently shown (active). In DNA mode,
+ *              we show both strands together, and toggling the active strand
+ *              controls which strand is shown at the top (and which direction
+ *              sequences are displayed).
+ *----------------------------------------------------------------------------
+ */
+
+#ifndef _detail_view_included_
+#define _detail_view_included_
+
+#include <gtk/gtk.h>
+#include <seqtoolsUtils/utilities.hpp>
+#include <blixemApp/blxwindow.hpp>
+#include <blixemApp/blxpanel.hpp>
+
+
+class CoverageViewProperties;
+
+
+#define SNP_TRACK_HEADER_NAME           "SNP track header"
+#define SNP_TRACK_SCROLL_WIN_NAME       "SNP scroll window"
+#define SNP_TRACK_CONTAINER_NAME        "SNP track container"
+#define DNA_TRACK_HEADER_NAME           "DNA track header"
+#define DETAIL_VIEW_STATUSBAR_CONTEXT   "statusBarCtx"
+
+
+/* Column name to use when multiple, duplicate reads with different names are
+ * shown on the same row. Note that this is a printf format that must take the
+ * number of reads as an integer argument. */
+#define DUPLICATE_READS_COLUMN_NAME               "(%d) matches" 
+#define DUPLICATE_READS_COLUMN_NAME_SGL           "(%d) match" /* as above but for when there is just one read */
+
+
+/* This struct contains info about canonical splice sites */
+typedef struct _BlxSpliceSite
+  {
+    char donorSite[3];                  /* The bases expected at the donor splice site */
+    char acceptorSite[3];               /* The bases expected at the acceptor splice site */
+
+    char donorSiteRev[3];               /* Same as donorSite but reversed */
+    char acceptorSiteRev[3];            /* Same as acceptorSite but reversed */
+
+    char donorSiteComp[3];              /* Same as donorSite but complemented */
+    char acceptorSiteComp[3];           /* Same as acceptorSite but complemented */
+
+    char donorSiteRevComp[3];           /* Same as donorSite but revcomp'd */
+    char acceptorSiteRevComp[3];        /* Same as acceptorSite but revcomp'd */
+    
+    gboolean bothReqd;                  /* Whether both donor and acceptor sites must match in order to be considered canonical */
+  } BlxSpliceSite;
+
+
+/* Info about a particular coord (used for recording which coordinates are selected). */
+typedef struct _DetailViewIndex
+{
+  gboolean isSet;                /* True if this info has been set (the other values are invalid
+                                  * if not) */
+  int dnaIdx;                    /* The index in terms of the DNA sequence */
+  int displayIdx;                /* The index in the display range (nucleotide or peptide) */
+  int frame;                     /* The reading frame */
+  int baseNum;                   /* The base within the reading frame */
+} DetailViewIndex;
+
+
+/* Essential info required by the the detail view */
+class DetailViewProperties : public BlxPanel
+{
+public:
+  // Constructors
+  DetailViewProperties(GtkWidget *detailView_in,
+                       GtkWidget *blxWindow_in,
+                       BlxContext *bc_in,
+                       CoverageViewProperties *coverageViewP_in, 
+                       GtkCellRenderer *renderer_in,
+                       GList *fwdStrandTrees_in,
+                       GList *revStrandTrees_in,
+                       GtkWidget *feedbackBox_in,
+                       GtkWidget *statusBar_in,
+                       GList *columnList_in,
+                       GtkAdjustment *adjustment_in, 
+                       const int startCoord_in,
+                       const BlxColumnId sortColumn_in);
+
+  ~DetailViewProperties();
+
+  // Access
+  double charWidth() const;
+  double charHeight() const;
+  double contentXPos() const;
+  double contentWidth() const;
+
+  // Update
+  void setFontSize(const double charWidth, const double charHeight);
+
+  // Member variables
+  GtkCellRenderer *renderer;           /* The cell renderer that renders the sequences */
+  GtkAdjustment *adjustment;           /* The scroll adjustment control for the detail view */
+
+  GtkWidget *feedbackBox;              /* A text box that feeds back info to the user about the currently selected items */
+  GtkWidget *statusBar;                /* A status bar that feeds back info to the user about the currently moused-over items */
+  BlxColumnId* sortColumns;            /* Array of columns to sort by, in order of priority. The length of this array will be set to the same length as columnList */
+    
+  GList *fwdStrandTrees;               /* A list of all the trees that show the forward strand of the ref seq */
+  GList *revStrandTrees;               /* A list of all the trees that show the reverse strand of the ref seq */
+    
+  int cellXPadding;                    /* The x padding between the tree cell background area and their drawing area */
+  int cellYPadding;                    /* The y padding between the tree cell background area and their drawing area */
+        
+  DetailViewIndex selectedRangeInit;   /* Caches the initial selected index when selecting a range */
+  DetailViewIndex selectedRangeStart;  /* The currently-selected range start (if shift-selecting) */
+  DetailViewIndex selectedRangeEnd;    /* The currently-selected range end (if shift-selecting) */
+  DetailViewIndex *selectedIndex;      /* Pointer to the last-selected index (i.e. start or end of range) */
+
+  int clickedBaseIdx;                  /* Stores the index the user right clicked on (used when copying a range of ref seq) */
+
+  BlxStrand selectedStrand;            /* BlxStrand of the tree that the last-selected  */
+  PangoFontDescription *fontDesc;      /* The fixed-width font that will be used to display the alignments */
+
+  int snpConnectorHeight;              /* The height of the connector between the SNP track and the DNA base track */
+  int numUnalignedBases;               /* If the display-unaligned-sequence option is on, this specifies how many additional bases to show at each end of the alignment */
+        
+  int exonBoundaryLineWidth;                 /* line width for exon boundaries */
+  GdkLineStyle exonBoundaryLineStyle;        /* line style for exon boundaries */
+  GdkLineStyle exonBoundaryLineStylePartial; /* line style for exon boundaries (where the boundary is part-way through a codon) */
+    
+  GSList *spliceSites;           /* List of splice sites that can be found and highlighted by
+                                    Blixem */
+
+private:
+  double m_charWidth;
+  double m_charHeight;
+};
+
+
+typedef struct _DrawBaseData
+{
+  int dnaIdx;
+  char baseChar;
+  BlxStrand strand;
+  int frame;
+  BlxSeqType seqType;
+  gboolean topToBottom;         /* true if we're displaying bases top-to-bottom instead of left-to-right */
+  gboolean displayIdxSelected;  /* whether to use default background color or leave blank */
+  gboolean dnaIdxSelected;      /* true if this base is the currently-selected dna index */
+  gboolean showBackground;      /* true if we should draw the background colour */
+  gboolean highlightSnps;       /* whether to highlight variations */
+  gboolean showCodons;          /* whether to highlight DNA bases within the selected codon, for protein matches */
+  BlxColorId defaultBgColor;    /* the default background color for the header */
+  GdkColor *fillColor;
+  GdkColor *outlineColor;
+  gboolean drawStart;
+  gboolean drawEnd;
+  gboolean drawJoiningLines;
+  gboolean shadeBackground;
+  IntRange *selectionRange;     /* the range of reference seq coords that is selected, in dna coords */
+} DrawBaseData;
+
+
+
+/* Public function declarations */
+int                     detailViewGetNumFrames(GtkWidget *detailView);
+IntRange*               detailViewGetDisplayRange(GtkWidget *detailView);
+int                     detailViewGetClickedBaseIdx(GtkWidget *detailView);
+gboolean                detailViewGetSelectedIdxSet(GtkWidget *detailView);
+int                     detailViewGetSelectedDisplayIdx(GtkWidget *detailView);
+int                     detailViewGetSelectedDnaIdx(GtkWidget *detailView);
+gboolean                detailViewGetSelectedIdxRangeSet(GtkWidget *detailView);
+IntRange*               detailViewGetSelectedDisplayIdxRange(GtkWidget *detailView);
+IntRange*               detailViewGetSelectedDnaIdxRange(GtkWidget *detailView);
+int                     detailViewGetOldSelectedBaseIdx(GtkWidget *detailView);
+GtkAdjustment*          detailViewGetAdjustment(GtkWidget *detailView);
+GtkWidget*              detailViewGetTree(GtkWidget *detailView, const BlxStrand strand, const int frame);
+GtkWidget*              detailViewGetTreeContainer(GtkWidget *detailView, const BlxStrand strand, const int frame);
+gboolean                detailViewGetDisplayRev(GtkWidget *detailView);
+PangoFontDescription*   detailViewGetFontDesc(GtkWidget *detailView);
+GtkCellRenderer*        detailViewGetRenderer(GtkWidget *detailView);
+int                     detailViewGetCellXPadding(GtkWidget *detailView);
+int                     detailViewGetCellYPadding(GtkWidget *detailView);
+BlxSeqType              detailViewGetSeqType(GtkWidget *detailView);
+IntRange*               detailViewGetRefSeqRange(GtkWidget *detailView);
+GtkWidget*              detailViewGetBlxWindow(GtkWidget *detailView);
+gdouble                 detailViewGetCharWidth(GtkWidget *detailView);
+gdouble                 detailViewGetCharHeight(GtkWidget *detailView);
+int                     detailViewGetNumUnalignedBases(GtkWidget *detailView);
+BlxColumnId*            detailViewGetSortColumns(GtkWidget *detailView);
+GList*                  detailViewGetColumnList(GtkWidget *detailView);
+GType*                  columnListGetTypes(GList *columnList);
+int                     detailViewGetActiveFrame(GtkWidget *detailView);
+BlxStrand               detailViewGetSelectedStrand(GtkWidget *detailView);
+void                    detailViewSetSelectedStrand(GtkWidget *detailView, BlxStrand strand);
+
+DetailViewProperties*   detailViewGetProperties(GtkWidget *widget);
+
+int                     detailViewGetColumnWidth(GtkWidget *detailView, const BlxColumnId columnId);
+const char*             detailViewGetColumnTitle(GtkWidget *detailView, const BlxColumnId columnId);
+void                    detailViewGetColumnXCoords(DetailViewProperties *properties, const BlxColumnId columnId, IntRange *xRange);
+gboolean                detailViewShowColumn(BlxColumnInfo *columnInfo);
+void                    detailViewSaveProperties(GtkWidget *detailView, GKeyFile *key_file);
+void                    detailViewResetColumnWidths(GtkWidget *detailView);
+
+int                     getBaseIndexAtColCoords(const int x, const int y, const gdouble charWidth, const IntRange* const displayRange);
+
+MSP*                    prevMatch(GtkWidget *detailView, GList *seqList, const gboolean extend);
+MSP*                    nextMatch(GtkWidget *detailView, GList *seqList, const gboolean extend);
+MSP*                    firstMatch(GtkWidget *detailView, GList *seqList, const gboolean extend);
+MSP*                    lastMatch(GtkWidget *detailView, GList *seqList, const gboolean extend);
+void                    goToDetailViewCoord(GtkWidget *detailView, const BlxSeqType coordSeqType);
+void                    setDetailViewStartIdx(GtkWidget *detailView, int coord, const BlxSeqType coordSeqType);
+void                    setDetailViewEndIdx(GtkWidget *detailView, int coord, const BlxSeqType coordSeqType);
+void                    scrollDetailViewLeft1(GtkWidget *detailView);
+void                    scrollDetailViewRight1(GtkWidget *detailView);
+void                    scrollDetailViewLeftStep(GtkWidget *detailView);
+void                    scrollDetailViewRightStep(GtkWidget *detailView);
+void                    scrollDetailViewLeftPage(GtkWidget *detailView);
+void                    scrollDetailViewRightPage(GtkWidget *detailView);
+
+void                    detailViewSetSortColumn(GtkWidget *detailView, const BlxColumnId sortColumn);
+
+void                    zoomDetailView(GtkWidget *detailView, const gboolean zoomIn);
+
+void                    updateDynamicColumnWidths(GtkWidget *detailView);
+void                    refilterDetailView(GtkWidget *detailView, const IntRange* const oldRange);
+
+void                    detailViewSetSelectedDisplayIdx(GtkWidget *detailView, 
+                                                        const int selectedBaseIdx, 
+                                                        const int frame, 
+                                                        const int baseNum, 
+                                                        const gboolean allowScroll, 
+                                                        const gboolean scrollMinimum,
+                                                        const gboolean extend);
+
+void                    detailViewSetSelectedDnaBaseIdx(GtkWidget *detailView,
+                                                        const int selectedDnaBaseIdx,
+                                                        const int frame,
+                                                        const gboolean allowScroll,
+                                                        const gboolean scrollMinimum,
+                                                        const gboolean extend);
+
+void                    detailViewScrollToKeepInRange(GtkWidget *detailView, const IntRange* const range);
+
+gboolean                detailViewIsDisplayIdxSelected(GtkWidget *detailView, const int displayIdx);
+gboolean                detailViewIsDnaIdxSelected(GtkWidget *detailView, const int dnaIdx);
+
+void                    detailViewUnsetSelectedBaseIdx(GtkWidget *detailView);
+void                    detailViewSetActiveFrame(GtkWidget *detailView, const int frame);
+void                    detailViewResortTrees(GtkWidget *detailView);
+
+void                    updateFeedbackBox(GtkWidget *detailView);
+void                    clearFeedbackArea(GtkWidget *detailView);
+void                    updateFeedbackAreaNucleotide(GtkWidget *detailView, const int dnaIdx, const BlxStrand strand);
+void                    toggleStrand(GtkWidget *detailView);
+
+void                    detailViewAddMspData(GtkWidget *detailView, MSP *mspList, GList *seqList);
+
+void                    updateDetailViewFontDesc(GtkWidget *detailView);
+void                    updateDetailViewRange(GtkWidget *detailView);
+void                    resizeDetailViewHeaders(GtkWidget *detailView);
+void                    detailViewRedrawAll(GtkWidget *detailView);
+void                    detailViewRefreshAllHeaders(GtkWidget *detailView);
+
+void                    detailViewUpdateSquashMatches(GtkWidget *detailView, const gboolean squash);
+void                    detailViewUpdateSortInverted(GtkWidget *detailView, const gboolean invert);
+void                    detailViewUpdateShowSnpTrack(GtkWidget *detailView, const gboolean showSnpTrack);
+void                    detailViewUpdateMspLengths(GtkWidget *detailView, const int numUnalignedBases);
+
+void                    detailViewSetNumUnalignedBases(GtkWidget *detailView, const int numBases);
+void                    detailViewToggleSnpTrack(GtkWidget *detailView);
+
+GtkWidget*              createSnpTrackHeader(GtkWidget *detailView, const BlxStrand strand);
+void                    refreshTextHeader(GtkWidget *widget, gpointer data);
+gboolean                onExposeDnaTrack(GtkWidget *headerWidget, GdkEventExpose *event, gpointer data);
+
+void                    selectClickedSnp(GtkWidget *snpTrack,
+                                         GtkWidget *colHeader,
+                                         GtkWidget *detailView, 
+                                         const int xIn, 
+                                         const int yIn, 
+                                         const gboolean expandSnps,
+                                         const int clickedBase);
+
+void                    seqColHeaderSetRow(GtkWidget *header, const int frame);
+int                     seqColHeaderGetRow(GtkWidget *header);
+int                     seqColHeaderGetBase(GtkWidget *header, const int frame, const int numFrames);
+
+GHashTable*             getRefSeqBasesToHighlight(GtkWidget *detailView, const IntRange* const displayRange, const BlxSeqType seqType, const BlxStrand strand);
+
+void                    drawColumnSeparatorLine(GtkWidget *widget, GdkDrawable *drawable, GdkGC *gc, const BlxContext *bc);
+gboolean                onExposeGenericHeader(GtkWidget *headerWidget, GdkEventExpose *event, gpointer data);
+
+gint                    sortByColumnCompareFunc(GList *mspGList1,
+                                                GList *mspGList2,
+                                                GtkWidget *detailView, 
+                                                const BlxColumnId sortColumn);
+
+void                    drawHeaderChar(BlxContext *bc,
+                                       DetailViewProperties *properties,
+                                       GdkDrawable *drawable,
+                                       GdkGC *gc,
+                                       const int x,
+                                       const int y,
+                                       GHashTable *intronBases,
+                                       DrawBaseData *baseData);
+
+GtkWidget*              createDetailView(GtkWidget *blxWindow,
+                                         BlxContext *bc,
+                                         GtkContainer *parent,
+                                         GtkWidget *toolbar,
+                                         GtkAdjustment *adjustment, 
+                                         GtkWidget *fwdStrandGrid, 
+                                         GtkWidget *revStrandGrid,
+                                         MSP *mspList,
+                                         GList *columnList,
+                                         BlxBlastMode mode,
+                                         BlxSeqType seqType,
+                                         int numFrames,
+                                         const char* const refSeqName,
+                                         const int startCoord,
+                                         const gboolean sortInverted,
+                                         const BlxColumnId sortColumn,
+                                         const gboolean optionalDataLoaded,
+                                         char *windowColor);
+
+GtkWidget*              createDetailViewScrollBar(GtkAdjustment *adjustment, 
+                                                  GtkWidget *blxWindow);
+
+GtkWidget*              snpTrackCreatePanedWin(GtkWidget* detailView, GtkWidget *snpTrack, GtkWidget *otherWidget); 
+
+#endif /* _detail_view_included_ */
diff --git a/blixemApp/detailviewtree.cpp b/blixemApp/detailviewtree.cpp
new file mode 100755
index 0000000..5d1a145
--- /dev/null
+++ b/blixemApp/detailviewtree.cpp
@@ -0,0 +1,3182 @@
+/*  File: detailviewtree.c
+ *  Author: Gemma Barson, 2009-11-23
+ *  Copyright (c) 2009 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: See detailviewtree.h
+ *----------------------------------------------------------------------------
+ */
+
+#include <blixemApp/detailviewtree.hpp>
+#include <blixemApp/blxcontext.hpp>
+#include <blixemApp/detailview.hpp>
+#include <blixemApp/bigpicturegrid.hpp>
+#include <blixemApp/sequencecellrenderer.hpp>
+#include <blixemApp/blxwindow.hpp>
+#include <seqtoolsUtils/utilities.hpp>
+#include <seqtoolsUtils/blxmsp.hpp>
+#include <gdk/gdkkeysyms.h>
+#include <string.h>
+#include <math.h>
+#include <algorithm>
+
+using namespace std;
+
+
+/* Global variables */
+
+/* This enables "mouse-drag" mode: see the expose function for how this is used. */
+static gboolean g_mouse_drag_mode = FALSE;  
+
+
+/* Local function declarations */
+static GtkWidget*	treeGetDetailView(GtkWidget *tree);
+static gboolean		onSelectionChangedTree(GObject *selection, gpointer data);
+static gint		sortColumnCompareFunc(GtkTreeModel *model, GtkTreeIter *iter1, GtkTreeIter *iter2, gpointer data);
+static int		calculateColumnWidth(TreeColumnHeaderInfo *headerInfo, GtkWidget *tree);
+static gboolean		isTreeRowVisible(GtkTreeModel *model, GtkTreeIter *iter, gpointer data);
+static gboolean		onExposeRefSeqHeader(GtkWidget *headerWidget, GdkEventExpose *event, gpointer data);
+static GList*		treeGetSequenceRows(GtkWidget *tree, const BlxSequence *clickedSeq);
+static BlxSequence*	treeGetSequence(GtkTreeModel *model, GtkTreeIter *iter);
+static void             destroyTreePathList(GList **list);
+static int              treeHeaderGetCoordAtPos(GtkWidget *header, GtkWidget *tree, const int x, const int y);
+
+/***********************************************************
+ *                Tree - utility functions                 *
+ ***********************************************************/
+
+/* This sets the "mouse drag mode" flag */
+void setMouseDragMode(const gboolean value)
+{
+  g_mouse_drag_mode = value;
+}
+
+/* Check the given widget is a detail-view tree and has its properties set */
+static void assertTree(GtkWidget *tree)
+{
+  if (!tree)
+    g_error("Tree is null\n");
+  
+  if (!GTK_IS_WIDGET(tree))
+    g_error("Tree is not a valid widget [%p]\n", tree);
+    
+  if (!GTK_IS_TREE_VIEW(tree))
+    g_error("Tree is not a valid tree view [%p]\n", tree);
+
+  if (strcmp(gtk_widget_get_name(tree), DETAIL_VIEW_TREE_NAME) != 0)
+    g_error("Tree is not a valid detail-view tree [%p]\n", tree);
+
+  if (!treeGetProperties(tree))
+    g_error("Tree properties not set [widget=%p]\n", tree);
+}
+
+
+static GtkWidget *treeGetDetailView(GtkWidget *tree)
+{
+  assertTree(tree);
+  
+  /* optimisation: cache result, because we know there is only ever one detail view */
+  static GtkWidget *detailView = NULL;
+
+  if (!detailView)
+    {
+      TreeProperties *properties = treeGetProperties(tree);
+      detailView = properties ? properties->detailView : NULL;
+    }
+  
+  return detailView;
+}
+
+GtkWidget *treeGetBlxWindow(GtkWidget *tree)
+{
+  GtkWidget *detailView = treeGetDetailView(tree);
+  return detailViewGetBlxWindow(detailView);
+}
+
+BlxStrand treeGetStrand(GtkWidget *tree)
+{
+  assertTree(tree);
+  TreeProperties *properties = treeGetProperties(tree);
+  return gridGetStrand(properties->grid);
+}
+
+static gboolean treeGetDisplayRev(GtkWidget *tree)
+{
+  assertTree(tree);
+  GtkWidget *detailView = treeGetDetailView(tree);
+  return detailViewGetDisplayRev(detailView);
+}
+
+int treeGetFrame(GtkWidget *tree)
+{
+  assertTree(tree);
+  TreeProperties *properties = treeGetProperties(tree);
+  return properties->readingFrame;
+}
+
+static gboolean treeHasSnpHeader(GtkWidget *tree)
+{
+  TreeProperties *properties = treeGetProperties(tree);
+  return properties->hasSnpHeader;
+}
+
+
+/* Returns the currently-displayed range in the tree view */
+static IntRange* treeGetDisplayRange(GtkWidget *tree)
+{
+  assertTree(tree);
+  TreeProperties *properties = treeGetProperties(tree);
+  return properties ? detailViewGetDisplayRange(properties->detailView) : NULL;
+}
+
+static PangoFontDescription* treeGetFontDesc(GtkWidget *tree)
+{
+  GtkWidget *detailView = treeGetDetailView(tree);
+  return detailViewGetFontDesc(detailView);
+}
+
+int treeGetCellXPadding(GtkWidget *tree)
+{
+  GtkWidget *detailView = treeGetDetailView(tree);
+  return detailViewGetCellXPadding(detailView);
+}
+
+int treeGetCellYPadding(GtkWidget *tree)
+{
+  GtkWidget *detailView = treeGetDetailView(tree);
+  return detailViewGetCellYPadding(detailView);
+}
+
+static gdouble treeGetCharWidth(GtkWidget *tree)
+{
+  GtkWidget *detailView = treeGetDetailView(tree);
+  return detailViewGetCharWidth(detailView);
+}
+
+static TreeColumnHeaderInfo* treeColumnGetHeaderInfo(GtkWidget *tree, BlxColumnId columnId)
+{
+  /* Loop through each headerinfo item until we find the one that contains this column id */
+  TreeProperties *properties = treeGetProperties(tree);
+  GList *headerInfoItem = properties->treeColumnHeaderList;
+  TreeColumnHeaderInfo *result = NULL;
+  
+  for ( ; headerInfoItem && !result; headerInfoItem = headerInfoItem->next)
+    {
+      TreeColumnHeaderInfo *headerInfo = (TreeColumnHeaderInfo*)(headerInfoItem->data);
+      
+      /* Loop through each column id included under this header */
+      GList *columnIdItem = headerInfo->columnIds;
+      
+      for ( ; columnIdItem && !result; columnIdItem = columnIdItem->next)
+	{
+	  if (GPOINTER_TO_INT(columnIdItem->data) == columnId)
+	    {
+	      result = headerInfo;
+	    }
+	}
+    }
+  
+  return result;
+}
+
+/***********************************************************
+ *			utility functions		   *
+ ***********************************************************/
+
+/* Call the given function on all trees in the detail view */
+void callFuncOnAllDetailViewTrees(GtkWidget *detailView, GtkCallback func, gpointer data)
+{
+  int numFrames = detailViewGetNumFrames(detailView);
+  
+  /* Call the function on the forward strand tree and reverse strand tree
+   * for each frame. */
+  int frame = 1;
+  for ( ; frame <= numFrames; ++frame)
+    {
+      GtkWidget *fwdTree = detailViewGetTree(detailView, BLXSTRAND_FORWARD, frame);
+      GtkWidget *revTree = detailViewGetTree(detailView, BLXSTRAND_REVERSE, frame);
+      
+      if (fwdTree)
+	{
+	  func(fwdTree, data);
+	}
+      
+      if (revTree)
+	{
+	  func(revTree, data);
+	}
+    }
+}
+
+
+/* Add the msps in the given BlxSequence to a single row in the given tree store */
+static void addSequenceMspsToSingleRow(BlxSequence *blxSeq, GtkWidget *tree, GtkListStore *store)
+{
+  /* Only add msps that are in the correct strand for this tree (since the same 
+   * sequence may have matches against both ref seq strands) */
+  GList *mspsToAdd = NULL;
+  GList *mspItem = blxSeq->mspList;
+  const BlxStrand treeStrand = treeGetStrand(tree);
+  
+  for ( ; mspItem; mspItem = mspItem->next)
+    {
+      MSP *msp  = (MSP*)(mspItem->data);
+      if (typeShownInDetailView(msp->type) && msp->qStrand == treeStrand && msp->qFrame == treeGetFrame(tree))
+        {
+          mspsToAdd = g_list_append(mspsToAdd, msp);
+        }
+    }
+
+  /* Now add a row to the tree store, if there is anything to add */
+  if (g_list_length(mspsToAdd) > 0)
+    {
+      GtkWidget *detailView = treeGetDetailView(tree);
+      GList *columnList = detailViewGetColumnList(detailView);
+
+      GtkTreeIter iter;
+      gtk_list_store_append(store, &iter);
+
+      /* If there is only one msp, then we can add specific info about that MSP */
+      MSP *msp = (g_list_length(mspsToAdd) == 1 ? (MSP*)mspsToAdd->data : NULL);
+
+      /* Add the hard-coded column data */
+      const double score = msp ? msp->score : 0.0;
+      const double id = msp ? msp->id : 0.0;
+      const int start = msp ? msp->sRange.min() : blxSequenceGetStart(blxSeq, treeStrand);
+      const int end = msp ? msp->sRange.max() : blxSequenceGetEnd(blxSeq, treeStrand);
+
+      /* Loop through the rest of the columns */
+      GList *item = columnList;
+      
+      for ( ; item; item = item->next)
+        {
+          BlxColumnInfo *columnInfo = (BlxColumnInfo*)(item->data);
+
+          if (columnInfo->columnId == BLXCOL_SCORE)
+            gtk_list_store_set(store, &iter, columnInfo->columnIdx, score, -1);
+          else if (columnInfo->columnId == BLXCOL_ID)
+            gtk_list_store_set(store, &iter, columnInfo->columnIdx, id, -1);
+          else if (columnInfo->columnId == BLXCOL_START)
+            gtk_list_store_set(store, &iter, columnInfo->columnIdx, start, -1);
+          else if (columnInfo->columnId == BLXCOL_SEQUENCE)
+            gtk_list_store_set(store, &iter, columnInfo->columnIdx, mspsToAdd, -1);
+          else if (columnInfo->columnId == BLXCOL_END)
+            gtk_list_store_set(store, &iter, columnInfo->columnIdx, end, -1);
+          else
+            {
+              GValue *val = blxSequenceGetValue(blxSeq, columnInfo->columnId);
+              if (val) gtk_list_store_set_value(store, &iter, columnInfo->columnIdx, val);
+            }
+        }
+      
+      /* Remember which row these msps are in */
+      GtkTreePath *path = gtk_tree_model_get_path(GTK_TREE_MODEL(store), &iter);
+      GList *mspItem = mspsToAdd;
+      
+      for ( ; mspItem; mspItem = mspItem->next)
+        {
+          MSP *curMsp = (MSP*)(mspItem->data);
+          curMsp->treePaths[BLXMODEL_SQUASHED] = gtk_tree_path_to_string(path);
+        }
+
+      gtk_tree_path_free(path);
+    }
+}
+
+
+/* Add the msps in the given BlxSequence to the given tree store with a separate
+ * row for each msp */
+static void addSequenceMspsToSeparateRows(BlxSequence *blxSeq, GtkWidget *tree, GtkListStore *store)
+{
+  const BlxStrand treeStrand = treeGetStrand(tree);
+  GList *mspItem = blxSeq->mspList;
+  
+  for ( ; mspItem; mspItem = mspItem->next)
+    {
+      MSP *msp  = (MSP*)(mspItem->data);
+
+      /* Only add msps that are in the correct strand for this tree (since the same 
+       * sequence may have matches against both ref seq strands) */
+      if (typeShownInDetailView(msp->type) && 
+          msp->qStrand == treeStrand && 
+          msp->qFrame == treeGetFrame(tree))
+        {
+          addMspToTree(msp, tree, store);
+        }
+    }
+}
+
+
+/* Add the given BlxSequence as a row in the given tree store */
+static void addSequenceToTree(BlxSequence *blxSeq, GtkWidget *tree, GtkListStore *store)
+{
+  /* Only add matches and transcripts to the detail-view. Also, 
+   * we exclude sequences with squash-identical-features set because
+   * these are added separately. */
+  if (!blxSequenceShownInDetailView(blxSeq) ||
+      blxSequenceGetFlag(blxSeq, MSPFLAG_SQUASH_IDENTICAL_FEATURES))
+    {
+      return;
+    }
+
+  /* If the squash-linked-features property is set, add all msps in this
+   * sequence to the same row; otherwise, add them to separate rows*/
+  if (blxSequenceGetFlag(blxSeq, MSPFLAG_SQUASH_LINKED_FEATURES))
+    addSequenceMspsToSingleRow(blxSeq, tree, store);
+  else
+    addSequenceMspsToSeparateRows(blxSeq, tree, store);
+}
+
+
+/* Comparison function for sorting/determining if two alignments are identical;
+ * they are identical if the DNA sequence, start positions, source, score and ID
+ * are all identical */
+static int sortByDnaCompareFunc(gconstpointer a, gconstpointer b)
+{
+  double result = 0;
+  
+  const MSP* const msp1 = *((const MSP**)a);
+  const MSP* const msp2 = *((const MSP**)b);
+
+  const char *sequence1 = mspGetMatchSeq(msp1);
+  const char *sequence2 = mspGetMatchSeq(msp2);
+
+  const gboolean msp1HasSeq = (sequence1 != NULL);
+  const gboolean msp2HasSeq = (sequence2 != NULL);
+
+  if (msp1HasSeq && msp2HasSeq)
+    {
+      result = msp1->qRange.min() - msp2->qRange.min();
+
+      if (result == 0) result = msp1->sRange.length() - msp2->sRange.length();
+      if (result == 0) result = msp1->score - msp2->score;
+      if (result == 0) result = msp1->id - msp2->id;
+      if (result == 0) result = strncmp(sequence1 + msp1->sRange.min() - 1, sequence2 + msp2->sRange.min() - 1, msp1->sRange.length());
+    }
+  else if (!msp1HasSeq && !msp2HasSeq)
+    {
+      result = 0;
+    }
+  else if (!msp1HasSeq)
+    {
+      result = -1;
+    }
+  else 
+    {
+      result = 1;
+    }
+
+  /* For fractional results, round up (or down if negative), so that we still
+   * recognise a fracional difference as a difference (e.g. a difference of 
+   * -0.2 in the scores would mean a < b, so we return -1). */
+  if (result > 0)
+    return ceil(result);
+  else if (result < 0)
+    return floor(result);
+  else 
+    return 0;
+}
+
+
+/* For matches that should be squashed if identical, add them to the given tree, 
+ * placing duplicate sequences on the same row as each other to create a compact tree. */
+static void addFeaturesToCompactTree(GtkWidget *tree, GtkListStore *store, GtkWidget *blxWindow)
+{
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+  const BlxStrand treeStrand = treeGetStrand(tree);
+
+  /* Extract matches that should be squashed if identical into their own array. */
+  GArray *matchArray = bc->featureLists[BLXMSP_MATCH];
+  GArray *array = g_array_sized_new(FALSE, FALSE, sizeof(MSP*), matchArray->len);
+
+  int i = 0;
+  for ( ; i < (int)matchArray->len; ++i)
+    {
+      MSP *val = g_array_index(matchArray, MSP*, i);
+
+      if (mspGetFlag(val, MSPFLAG_SQUASH_IDENTICAL_FEATURES))
+        g_array_prepend_val(array, val);
+    }
+
+  /* Sort the array by DNA sequence so that duplicates are adjacent. */ 
+  g_array_sort(array, sortByDnaCompareFunc);
+
+  /* Loop through each MSP, compiling a list of MSPs to add to the
+   * current row. */
+  i = 0;
+  MSP *prevMsp = NULL;
+  MSP *msp = mspArrayIdx(array, i);
+  GList *mspsToAdd = NULL;
+  
+  for ( ; msp || prevMsp; msp = mspArrayIdx(array, ++i))
+    {
+      if (msp && mspGetRefStrand(msp) != treeStrand)
+        continue;
+      
+      if (msp && prevMsp && sortByDnaCompareFunc(&prevMsp, &msp) == 0)
+        {
+          /* Same as previous sequence; add to current row */
+          mspsToAdd = g_list_prepend(mspsToAdd, msp);
+        }
+      else
+        {
+          if (g_list_length(mspsToAdd) > 0)
+            {
+              /* Add the current msp list to the tree */
+              GtkTreeIter iter;
+              gtk_list_store_append(store, &iter);
+
+              /* Loop through the columns */
+              GList *item = blxWindowGetColumnList(blxWindow);
+      
+              for ( ; item; item = item->next)
+                {
+                  BlxColumnInfo *columnInfo = (BlxColumnInfo*)(item->data);
+                  
+                  if (columnInfo->columnId == BLXCOL_SCORE)
+                    gtk_list_store_set(store, &iter, columnInfo->columnIdx, prevMsp->score, -1);
+                  else if (columnInfo->columnId == BLXCOL_ID)
+                    gtk_list_store_set(store, &iter, columnInfo->columnIdx, prevMsp->id, -1);
+                  else if (columnInfo->columnId == BLXCOL_START)
+                    gtk_list_store_set(store, &iter, columnInfo->columnIdx, prevMsp->sRange.min(), -1);
+                  else if (columnInfo->columnId == BLXCOL_SEQUENCE)
+                    gtk_list_store_set(store, &iter, columnInfo->columnIdx, mspsToAdd, -1);
+                  else if (columnInfo->columnId == BLXCOL_END)
+                    gtk_list_store_set(store, &iter, columnInfo->columnIdx, prevMsp->sRange.max(), -1);
+                  else
+                    {
+                      GValue *val = blxSequenceGetValue(prevMsp->sSequence, columnInfo->columnId);
+                      if (val) gtk_list_store_set_value(store, &iter, columnInfo->columnIdx, val);
+                    }
+                }
+              
+              /* Remember which row these msps are in */
+              GtkTreePath *path = gtk_tree_model_get_path(GTK_TREE_MODEL(store), &iter);
+              GList *mspItem = mspsToAdd;
+          
+              for ( ; mspItem; mspItem = mspItem->next)
+                {
+                  MSP *curMsp = (MSP*)(mspItem->data);
+                  curMsp->treePaths[BLXMODEL_SQUASHED] = gtk_tree_path_to_string(path);
+                }
+
+              gtk_tree_path_free(path);
+          
+              /* Reset the list pointer ready for the next row. Note that
+               * we do not free the list because it is now owned by the tree */
+              mspsToAdd = NULL;
+            }
+          
+          /* Add the new msp */
+          if (msp)
+            mspsToAdd = g_list_prepend(mspsToAdd, msp);
+        }
+      
+      prevMsp = msp;
+    }
+  
+  /* Re-sort by default sort order (required for filtering) if this msp type
+   * appears in the detail-view */
+  if (typeShownInDetailView(BLXMSP_MATCH))
+    g_array_sort(bc->featureLists[BLXMSP_MATCH], compareFuncMspArray);
+}
+
+
+/* Add all of the BlxSequences that are in the given tree's strand to the tree */
+void addSequencesToTree(GtkWidget *tree, gpointer data)
+{
+  GList *seqList = (GList*)data;
+  
+  /* Create the data store for the tree. We must know how many columns
+   * we have, and their data types. */
+  GtkWidget *detailView = treeGetDetailView(tree);  
+  GList *columnList = detailViewGetColumnList(detailView);
+  const int numCols = g_list_length(columnList);
+  GType *typeList = columnListGetTypes(columnList);
+
+  GtkListStore *store = gtk_list_store_newv(numCols, typeList);
+  
+  /* Set the sort function for each column */
+  int colNum = 0;
+  for ( ; colNum < numCols; ++colNum)
+    {
+      gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(store), colNum,	sortColumnCompareFunc, tree, NULL);
+    }
+
+  /* Add the rows - one row per sequence. Use the list we've already compiled of all
+   * sequences as BlxSequences */
+  GtkWidget *blxWindow = treeGetBlxWindow(tree);
+  GList *seqItem = seqList;
+  
+  for ( ; seqItem; seqItem = seqItem->next)
+    {
+      BlxSequence *blxSeq = (BlxSequence*)(seqItem->data);
+      addSequenceToTree(blxSeq, tree, store);
+    }
+
+  /* Also add one row for each match that has duplcate DNA to the compact tree */
+  addFeaturesToCompactTree(tree, store, blxWindow);
+  
+  /* Create a filtered version which will only show sequences that are in the display range */
+  GtkTreeModel *filter = gtk_tree_model_filter_new(GTK_TREE_MODEL(store), NULL);
+  gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(filter), (GtkTreeModelFilterVisibleFunc)isTreeRowVisible, tree, NULL);
+  
+  /* Lose the local reference to 'store' because the tree filter has a reference to it. */
+  g_object_unref(G_OBJECT(store));
+  
+  /* Remember the base tree store in the properties so we can switch between this and the 'unsquashed' tree model */
+  TreeProperties *properties = treeGetProperties(tree);
+  properties->treeModels[BLXMODEL_SQUASHED] = GTK_TREE_MODEL(filter);
+  
+  /* Note that we don't decrement the ref count to 'filter' even though we're losing
+   * the local pointer to it, because we've also added a pointer to it from the tree
+   * properties. */
+}
+
+
+/* Return the MSP(s) in a given tree row */
+GList* treeGetMsps(GtkTreeModel *model, GtkTreeIter *iter)
+{
+  GList *mspGList = NULL;  
+
+  /* Get the sequence column index (note this may be different to the column id) */
+  GtkWidget *blxWindow = getBlixemWindow();
+  GList *columnList = blxWindowGetColumnList(blxWindow);
+  BlxColumnInfo *columnInfo = getColumnInfo(columnList, BLXCOL_SEQUENCE);
+
+  if (columnInfo)
+    gtk_tree_model_get(model, iter, columnInfo->columnIdx, &mspGList, -1);
+
+  return mspGList;
+}
+
+
+/* For the given tree view, return the data model used for the visible view
+ * (which may be a filtered tree model). */
+static GtkTreeModel* treeGetVisibleDataModel(GtkTreeView *tree)
+{
+  /* Just return the model stored directly in the tree view. This will be the filter
+   * if there is one, otherwise it will be the original data model. */
+  assertTree(GTK_WIDGET(tree));
+  return gtk_tree_view_get_model(tree);
+}
+
+/* Get the status bar that this tree should report details about moused-over rows to.
+ * This may be different to the main window status bar. */
+static GtkStatusbar* treeGetStatusBar(GtkWidget *tree)
+{
+  GtkWidget *detailView = treeGetDetailView(tree);
+  DetailViewProperties *dvProperties = detailViewGetProperties(detailView);
+  return GTK_STATUSBAR(dvProperties->statusBar);
+  
+  //GTK_STATUSBAR(treeGetContext(tree)->statusBar);
+}
+
+/* For the given tree view, return the current base data model i.e. all data in the tree
+ * without any filtering. Returns the same as treeGetVisibleDataModel if the tree does
+ * not have a filter. */
+GtkTreeModel* treeGetBaseDataModel(GtkTreeView *tree)
+{
+  assertTree(GTK_WIDGET(tree));
+  
+  GtkTreeModel *result = NULL;
+  
+  if (tree)
+    {
+      GtkTreeModel *model = gtk_tree_view_get_model(tree);
+      if (model && GTK_IS_TREE_MODEL_FILTER(model))
+        {
+          result = gtk_tree_model_filter_get_model(GTK_TREE_MODEL_FILTER(model));
+        }
+      else
+        {
+          result = model;
+        }
+    }
+  
+  return result;
+}
+
+
+/* Decrease the font size in the detail view trees (i.e. effectively zoom out) */
+void treeUpdateFontSize(GtkWidget *tree, gpointer data)
+{
+  PangoFontDescription *fontDesc = treeGetFontDesc(tree);  
+  gtk_widget_modify_font(tree, fontDesc);
+}
+
+
+/* This function updates the tree following a change in which tree model we're viewing */
+void treeUpdateSquashMatches(GtkWidget *tree, gpointer data)
+{
+  BlxContext *bc = treeGetContext(tree);
+  TreeProperties *properties = treeGetProperties(tree);
+  
+  /* Find the new model */
+  GtkTreeModel *newModel = properties->treeModels[bc->modelId];
+  
+  if (newModel)
+    gtk_tree_view_set_model(GTK_TREE_VIEW(tree), newModel);
+  
+  /* Re-sort and re-filter, because the new one might not be up to date */
+  /* Note that we sort the base data model, not the filtered one (i.e. sort all rows, 
+   * not just visible ones) */
+  newModel = treeGetBaseDataModel(GTK_TREE_VIEW(tree));
+  
+  if (newModel)
+    {
+      resortTree(tree, NULL);
+      refilterTree(tree, NULL);
+    }
+}
+
+
+/***********************************************************
+ *			      Updates			   *
+ ***********************************************************/
+
+
+/* Refresh the tree header widgets */
+void refreshTreeHeaders(GtkWidget *tree, gpointer data)
+{
+  TreeProperties *properties = treeGetProperties(tree);
+  
+  /* Loop through all column headers and call their individual refresh functions
+   * (this sets the specific data for the column headers) */
+  GList *headerItem = properties->treeColumnHeaderList;
+  PangoFontDescription *fontDesc = treeGetFontDesc(tree);
+  
+  for ( ; headerItem; headerItem = headerItem->next)
+    {
+      TreeColumnHeaderInfo *headerInfo = (TreeColumnHeaderInfo*)headerItem->data;
+      
+      if (headerInfo && headerInfo->headerWidget)
+	{
+	  /* Set the background color  */
+	  BlxContext *bc = treeGetContext(tree);
+	  GdkColor *bgColor = getGdkColor(BLXCOLOR_REF_SEQ, bc->defaultColors, FALSE, bc->usePrintColors);
+	  gtk_widget_modify_bg(headerInfo->headerWidget, GTK_STATE_NORMAL, bgColor);
+	  gtk_widget_modify_bg(headerInfo->headerWidget, GTK_STATE_NORMAL, bgColor);
+
+	  /* Update the font, in case its size has changed */
+	  labelSetFont(headerInfo->headerWidget, fontDesc);
+
+	  /* Call the refresh function, if there is one */
+	  if (headerInfo->refreshFunc)
+	    {
+	      headerInfo->refreshFunc(headerInfo->headerWidget, tree);
+	    }
+	}
+    }
+}
+
+
+/* Resize tree header widgets (should be called after the column width has changed) */
+static void resizeTreeHeaders(GtkWidget *tree, gpointer data)
+{
+  TreeProperties *properties = treeGetProperties(tree);
+  GList *header = properties->treeColumnHeaderList;
+  
+  for ( ; header; header = header->next)
+    {
+      TreeColumnHeaderInfo *headerInfo = (TreeColumnHeaderInfo*)header->data;
+      
+      if (headerInfo && headerInfo->headerWidget && g_list_length(headerInfo->columnIds) > 0)
+	{
+	  int firstColId = GPOINTER_TO_INT(headerInfo->columnIds->data);
+
+          /* For the sequence column, don't set the size request to the real size, or we 
+           * won't be able to shrink the window. (The sequence col header will be resized
+           * dynamically anyway.) */
+	  if (firstColId != BLXCOL_SEQUENCE)
+	    {
+	      /* For other columns, we can set the size request: they're small enough
+	       * that we can live without the need to shrink below their sum widths. */
+	      const int width = calculateColumnWidth(headerInfo, tree);
+	      gtk_widget_set_size_request(headerInfo->headerWidget, width, -1);
+	    }
+	}
+    }
+  
+  refreshTreeHeaders(tree, NULL);
+}
+
+
+/* Resize the columns for this tree. Should be called after the column width
+ * is changed manually by the user. */
+void resizeTreeColumns(GtkWidget *tree, gpointer data)
+{
+  GtkWidget *detailView = treeGetDetailView(tree);
+  
+  GList *listItem = detailViewGetColumnList(detailView);
+
+  /* Loop through each column in the tree and set the column width and visibility
+   * based on what's stored in our column info. */
+  for ( ; listItem; listItem = listItem->next)
+    {
+      BlxColumnInfo *columnInfo = (BlxColumnInfo*)(listItem->data);
+
+      /* We don't set the width of the sequence column - this is an autosize column, so it will 
+       * be updated dynamically when any of the other columns change. */
+//      if (columnInfo->columnId != BLXCOL_SEQUENCE)
+	{
+	  GtkTreeViewColumn *treeColumn = gtk_tree_view_get_column(GTK_TREE_VIEW(tree), columnInfo->columnIdx);
+      
+	  int width = columnInfo->width;
+	  if (columnInfo->columnId == BLXCOL_END)
+	    {
+	      width -= scrollBarWidth();
+	    }
+
+	  if (width > 0)
+	    {
+              const gboolean displayColumn = showColumn(columnInfo);
+	      gtk_tree_view_column_set_visible(treeColumn, displayColumn);
+	      gtk_tree_view_column_set_fixed_width(treeColumn, width);
+	    }
+	  else
+	    {
+	      /* Can't have 0 width, so hide the column instead */
+	      gtk_tree_view_column_set_visible(treeColumn, FALSE);
+	    }
+	}
+    }
+
+  resizeTreeHeaders(tree, NULL);
+}
+
+
+/***********************************************************
+ *			  Selections			   *
+ ***********************************************************/
+
+
+/* Scrolls the currently-selected row(s) into view */
+void treeScrollSelectionIntoView(GtkWidget *tree, gpointer data)
+{
+  /* Get the last selected sequence */
+  GtkWidget *blxWindow = treeGetBlxWindow(tree);
+  const BlxSequence *lastSelectedSeq = blxWindowGetLastSelectedSeq(blxWindow);
+  
+  /* Get the tree row(s) that contain that sequence. (If multiple, just use 1st one) */
+  GList *rows = treeGetSequenceRows(tree, lastSelectedSeq);
+  
+  if (g_list_length(rows) > 0)
+    {
+      GtkTreePath *path = (GtkTreePath*)(rows->data);
+      gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(tree), path, NULL, FALSE, 0.0, 0.0);
+    }
+
+  destroyTreePathList(&rows);
+}
+
+
+/* We handle row selections ourselves */
+static gboolean onSelectionChangedTree(GObject *selection, gpointer data)
+{
+  return TRUE;
+}
+
+
+/***********************************************************
+ *                   Sorting and filtering                 *
+ ***********************************************************/
+
+/* Refilter the data for the given tree */
+void refilterTree(GtkWidget *tree, gpointer data)
+{
+  assertTree(tree);
+  
+  GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(tree));
+  gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(model));
+}
+
+
+/* Update the cached path pointer for each msp in this tree row. Should be called
+ * after the paths have changed, e.g. after a sort. */
+static gboolean updateMspPaths(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data)
+{
+  BlxModelId modelId = (BlxModelId)GPOINTER_TO_INT(data);
+  GList *mspItem = treeGetMsps(model, iter);
+  
+  for ( ; mspItem; mspItem = mspItem->next)
+    {
+      MSP *msp = (MSP*)(mspItem->data);
+      
+      /* clear any existing path string */
+      if (msp->treePaths[modelId])
+        g_free(msp->treePaths[modelId]);
+      
+      msp->treePaths[modelId] = gtk_tree_path_to_string(path);
+    }
+  
+  return FALSE;
+}
+
+
+/* Re-sort the data for the given tree */
+void resortTree(GtkWidget *tree, gpointer data)
+{
+  GtkWidget *detailView = treeGetDetailView(tree);
+  DetailViewProperties *dvProperties = detailViewGetProperties(detailView);
+  GList *columnList = blxWindowGetColumnList(dvProperties->blxWindow());
+  const int numColumns = g_list_length(columnList);
+
+  if (numColumns < 1)
+    return; 
+
+  /* Find the main column to sort by. We set this as the sort column on the tree.
+   * It actually doesn't make a lot of difference which column we set except that 
+   * we call the correct sort-by function; the sort-by function will actually sort 
+   * by multiple columns based on the detail-view properties. */
+  int sortColumn = dvProperties->sortColumns[0];
+  
+  /* The column ID enum includes some values that are not valid tree columns, i.e. those
+   * outside the enum for the max number of columns. If we've got one of these, then
+   * set the tree to be unsorted. */
+  if (sortColumn >= numColumns)
+    sortColumn = GTK_TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID;
+  
+  /* Note that the sort function takes care of whether it's asc or desc, so we
+   * always set asc. */
+  GtkSortType sortOrder = GTK_SORT_ASCENDING;
+  
+  /* Not sure if there's a better way to do this, but we can force a re-sort by 
+   * setting the sort column to something else and then back again. */
+  GtkTreeModel *model = treeGetBaseDataModel(GTK_TREE_VIEW(tree));
+  gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(model), GTK_TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID, sortOrder);
+  gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(model), sortColumn, sortOrder);
+
+  
+  /* Update the cached path held by each MSP about the row it is in. */
+  BlxContext *bc = treeGetContext(tree);
+  gtk_tree_model_foreach(model, updateMspPaths, GINT_TO_POINTER(bc->modelId));
+}
+
+
+/* Utility that returns true if the given MSP is currently shown in the tree with the given
+ * strand/frame */
+static gboolean isMspVisible(const MSP* const msp, 
+			     const BlxContext *bc, 
+			     const int frame, 
+			     const IntRange* const displayRange,
+			     const int numUnalignedBases,
+                             const gboolean seqSelected,
+                             list<const SequenceGroup*> groups)
+{
+  g_return_val_if_fail(msp && msp->sSequence, FALSE) ;
+
+  gboolean result = TRUE ;
+
+  /* Check if the msp should be filtered out */
+  result = bc->isGroupVisible(groups, msp->sSequence->type);
+
+  if (result)
+    {
+      /* Check the MSP in the current display range. Get the full MSP display range including
+       * any portions outside the actual alignment. */
+      const IntRange *mspDisplayRange = mspGetFullDisplayRange(msp, seqSelected, bc);
+      result = rangesOverlap(mspDisplayRange, displayRange);
+    }
+
+  return result;
+}
+
+
+/* Filter function. Returns true if the given row in the given tree model should be visible. */
+static gboolean isTreeRowVisible(GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
+{
+  gboolean bDisplay = FALSE;
+  
+  GList *mspList = treeGetMsps(model, iter);
+  
+  if (g_list_length(mspList) > 0)
+    {
+      GtkWidget *tree = GTK_WIDGET(data);
+      TreeProperties *properties = treeGetProperties(tree);
+      DetailViewProperties *dvProperties = detailViewGetProperties(properties->detailView);
+      BlxContext *bc = blxWindowGetContext(dvProperties->blxWindow());
+
+      /* Check the first msp to see if this sequence is in a group that's hidden.
+       * (Note that all MSPs in the same row should be in the same sequence - we 
+       * don't check this here because this function is called many times so we
+       * avoid any unnecessary checks.) */
+      const MSP *firstMsp = (const MSP*)(mspList->data);
+      list <const SequenceGroup*> groups = bc->getSequenceGroups(firstMsp->sSequence);
+      
+      if (bc->isGroupVisible(groups, firstMsp->sSequence->type))
+	{
+	  BlxContext *bc = treeGetContext(tree);
+          GtkWidget *detailView = treeGetDetailView(tree);
+          DetailViewProperties *dvProperties = detailViewGetProperties(detailView);
+
+	  const int frame = properties->readingFrame;
+	  const IntRange* const displayRange = &dvProperties->displayRange;
+          const gboolean seqSelected = bc->isSeqSelected(firstMsp->sSequence);
+
+	  /* Show the row if any MSP in the list is an exon or blast match in the correct frame/strand
+	   * and within the display range */
+	  GList *mspListItem = mspList;
+	
+	  for ( ; mspListItem; mspListItem = mspListItem->next)
+	    {
+	      const MSP* msp = (const MSP*)(mspListItem->data);
+	      
+              if (isMspVisible(msp, bc, frame, displayRange, dvProperties->numUnalignedBases, seqSelected, groups))
+		{
+		  bDisplay = TRUE;
+		  break;
+		}
+	    }	  
+	}
+    }
+  
+  return bDisplay;
+}
+
+
+/***********************************************************
+ *                       Properties                        *
+ ***********************************************************/
+
+TreeProperties* treeGetProperties(GtkWidget *widget)
+{
+  return widget ? (TreeProperties*)(g_object_get_data(G_OBJECT(widget), "TreeProperties")) : NULL;
+}
+
+BlxContext* treeGetContext(GtkWidget *tree)
+{
+  GtkWidget *blxWindow = treeGetBlxWindow(tree);
+  return blxWindowGetContext(blxWindow);
+}
+
+static void onDestroyTree(GtkWidget *widget)
+{
+  TreeProperties *properties = treeGetProperties(widget);
+  
+  if (properties)
+    {
+      if (properties->treeColumnHeaderList)
+	{
+	  g_list_free(properties->treeColumnHeaderList);
+	  properties->treeColumnHeaderList = NULL;
+	}
+    
+      delete properties;
+      properties = NULL;
+      g_object_set_data(G_OBJECT(widget), "TreeProperties", NULL);
+    }
+}
+
+static void treeCreateProperties(GtkWidget *widget, 
+				 GtkWidget *grid, 
+				 GtkWidget *detailView, 
+				 const int frame,
+				 GList *treeColumnHeaderList,
+				 const gboolean hasSnpHeader)
+{
+  if (widget)
+    { 
+      TreeProperties *properties = new TreeProperties;
+
+      properties->widget = widget;
+      properties->grid = grid;
+      properties->detailView = detailView;
+      properties->readingFrame = frame;
+      properties->treeColumnHeaderList = treeColumnHeaderList;
+      properties->hasSnpHeader = hasSnpHeader;
+      
+      int i = 0;
+      for ( ; i < BLXMODEL_NUM_MODELS; ++i)
+        properties->treeModels[i] = NULL;
+
+      g_object_set_data(G_OBJECT(widget), "TreeProperties", properties);
+      g_signal_connect(G_OBJECT(widget), "destroy", G_CALLBACK(onDestroyTree), NULL); 
+    }
+}
+
+
+/* returns true if display coords should be negated */
+static gboolean treeGetNegateCoords(GtkWidget *tree)
+{
+  /* We negate coords (literally just stick a '-' on the front) for display purposes if the
+   * display is reversed and the negate-coords option is enabled. This gives the effect that coords
+   * always increase left-to-right, whereas when the display is reversed they really decrease. */
+  return blxWindowGetNegateCoords(treeGetBlxWindow(tree));
+}
+
+
+/***********************************************************
+ *                       Tree events                       *
+ ***********************************************************/
+
+/* Handler for when vertical scrollbar for the tree has changed (either value or range) */
+static void onScrollChangedTree(GtkObject *object, gpointer data)
+{
+  GtkWidget *tree = GTK_WIDGET(data);
+  
+  /* Remove any message from the detail-view status bar, because this shows info for the
+   * currently-moused-over item, which may have changed now we've scrolled. */
+   GtkStatusbar *statusBar = treeGetStatusBar(tree);
+   
+   if (statusBar)
+     {
+       guint contextId = gtk_statusbar_get_context_id(GTK_STATUSBAR(statusBar), DETAIL_VIEW_STATUSBAR_CONTEXT);
+       gtk_statusbar_pop(GTK_STATUSBAR(statusBar), contextId);
+     }
+}
+
+
+/* Draw the part of the tree header that shows the reference sequence (either as
+ * nucleotide sequence, or a peptide sequence if viewing protein matches) */
+static void drawRefSeqHeader(GtkWidget *headerWidget, GtkWidget *tree)
+{
+  GdkDrawable *drawable = createBlankPixmap(headerWidget);
+  
+  BlxContext *bc = treeGetContext(tree);
+  const BlxStrand strand = treeGetStrand(tree);
+  const int frame = treeGetFrame(tree);
+  
+  GtkWidget *detailView = treeGetDetailView(tree);
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+  
+  const gboolean highlightSnps = treeHasSnpHeader(tree) && bc->flags[BLXFLAG_HIGHLIGHT_VARIATIONS];
+  
+  /* Find the segment of the ref seq to display. Ref seq is in nucleotide coords so convert the 
+   * display range to nucleotide coords. */
+  const int qIdx1 = convertDisplayIdxToDnaIdx(properties->displayRange.min(), bc->seqType, frame, 1, bc->numFrames, bc->displayRev, &bc->refSeqRange);
+  const int qIdx2 = convertDisplayIdxToDnaIdx(properties->displayRange.max(), bc->seqType, frame, bc->numFrames, bc->numFrames, bc->displayRev, &bc->refSeqRange); 
+  IntRange qRange(qIdx1, qIdx2);
+
+  /* The q range may be outside the ref seq range if we are at the start/end and we have included
+   * "missing" bases to make up complete codons. Adjust to within the range, but maintain the same
+   * base number within the reading frame. */
+  int offsetMin = 0;
+  int offsetMax = 0;
+  
+  while (qRange.min() < bc->refSeqRange.min())
+    {
+      qRange.setMin(qRange.min() + bc->numFrames);
+      ++offsetMin;
+    }
+
+  while (qRange.max() > bc->refSeqRange.max())
+    {
+      qRange.setMax(qRange.max() - bc->numFrames);
+      ++offsetMax;
+    }
+  
+  GError *error = NULL;
+  
+  gchar *segmentToDisplay = getSequenceSegment(bc->refSeq,
+                                               &qRange,
+					       strand, 
+					       BLXSEQ_DNA,      /* input ref seq is always in nucleotide coords */
+                                               bc->seqType,     /* required segment is in display coords */
+					       frame, 
+					       bc->numFrames,
+					       &bc->refSeqRange,
+					       bc->blastMode,
+					       bc->geneticCode,
+					       bc->displayRev,
+					       bc->displayRev,	/* show backwards if display reversed */
+					       TRUE,		/* always complement reverse strand */
+					       &error);
+  
+  if (!segmentToDisplay)
+    {
+      g_assert(error);
+      prefixError(error, "Could not draw reference sequence header. ");
+      reportAndClearIfError(&error, G_LOG_LEVEL_WARNING);
+      return;
+    }
+  else
+    {
+      /* If there's an error but the sequence was still returned it's a non-critical warning */
+      reportAndClearIfError(&error, G_LOG_LEVEL_WARNING);
+    }
+  
+  GdkGC *gc = gdk_gc_new(drawable);
+
+  /* Offset the x coord where we'll start drawing if we did not start at the beginning of the display range. */
+  const int offset = bc->displayRev ? offsetMax : offsetMin;
+  gdouble xStart = (gdouble)offset * properties->charWidth();
+  const int yStart = 0;
+  
+  /* Find out if there are any special bases that need highlighting. */
+  GHashTable *basesToHighlight = getRefSeqBasesToHighlight(detailView, &qRange, bc->seqType, strand);
+
+  const int incrementValue = bc->displayRev ? -1 * bc->numFrames : bc->numFrames;
+  int displayIdx = properties->displayRange.min();
+
+  DrawBaseData baseData = {qIdx1,
+                           0,
+                           strand,
+                           frame,
+                           bc->seqType,
+                           FALSE,
+                           FALSE,
+                           FALSE,
+                           TRUE,
+                           highlightSnps,
+                           FALSE,
+                           BLXCOLOR_REF_SEQ,
+                           NULL,
+                           NULL,
+                           FALSE,
+                           FALSE,
+                           FALSE,
+                           FALSE,
+                           detailViewGetSelectedDnaIdxRange(detailView)};
+
+  while (displayIdx >= properties->displayRange.min() && displayIdx <= properties->displayRange.max())
+    {
+      baseData.displayIdxSelected = detailViewIsDisplayIdxSelected(detailView, displayIdx + offset);
+      baseData.dnaIdxSelected = baseData.displayIdxSelected;
+      baseData.baseChar = segmentToDisplay[displayIdx - properties->displayRange.min()];
+      
+      const int x = (int)((gdouble)xStart + (gdouble)(displayIdx - properties->displayRange.min()) * properties->charWidth());
+
+      /* Draw the character, seting the background color and outline depending on whether this base is selected or
+       * is affected by a SNP or polyA signal etc. */
+      drawHeaderChar(bc, properties, drawable, gc, x, yStart, basesToHighlight, &baseData);
+     
+      baseData.dnaIdx += incrementValue;
+      ++displayIdx;
+    }
+  
+  /* Mark up the text to highlight the selected base, if there is one */
+  PangoLayout *layout = gtk_widget_create_pango_layout(detailView, segmentToDisplay);
+  pango_layout_set_font_description(layout, detailViewGetFontDesc(detailView));
+  
+  if (layout)
+    {
+      gtk_paint_layout(headerWidget->style, drawable, GTK_STATE_NORMAL, TRUE, NULL, detailView, NULL, xStart, yStart, layout);
+      g_object_unref(layout);
+    }
+  
+  drawColumnSeparatorLine(headerWidget, drawable, gc, bc);
+ 
+  g_hash_table_unref(basesToHighlight);
+  g_free(segmentToDisplay);
+  g_object_unref(gc);
+}
+
+
+
+/* expose function to push a cached bitmap to screen */
+static gboolean onExposeRefSeqHeader(GtkWidget *headerWidget, GdkEventExpose *event, gpointer data)
+{
+  GdkWindow *window = GTK_IS_LAYOUT(headerWidget) ? GTK_LAYOUT(headerWidget)->bin_window : headerWidget->window;
+  
+  if (window)
+    {
+      /* See if there's a cached drawable and, if not, create it */
+      GdkDrawable *bitmap = widgetGetDrawable(headerWidget);
+      
+      if (!bitmap)
+	{
+	  /* There isn't a bitmap yet. Create it now. */
+	  GtkWidget *tree = GTK_WIDGET(data);
+	  drawRefSeqHeader(headerWidget, tree);
+	  bitmap = widgetGetDrawable(headerWidget);
+	}
+      
+      if (bitmap)
+	{
+	  /* Push the bitmap onto the window */
+	  GdkGC *gc = gdk_gc_new(window);
+	  gdk_draw_drawable(window, gc, bitmap, 0, 0, 0, 0, -1, -1);
+          g_object_unref(gc);
+	}
+    }
+  
+  return FALSE;
+}
+
+
+/* This function checks if there is a display index/range selected and, if so, 
+ * colors the background for that range with the relevant highlight color. */
+static void treeHighlightSelectedBase(GtkWidget *tree, GdkDrawable *drawable)
+{
+  GtkWidget *detailView = treeGetDetailView(tree);
+  DetailViewProperties *properties = detailViewGetProperties(detailView);
+  GList *columnList = detailViewGetColumnList(detailView);
+  
+  int start = UNSET_INT;
+  int end = UNSET_INT;
+  gboolean ok = FALSE;
+
+  /* Use the selection range, if set, otherwise the selected coord */
+  if (detailViewGetSelectedIdxSet(detailView))
+    {
+      /* Display coords may be in reverse direction but this access function returns them 
+       * in min->max order */
+      IntRange *range = detailViewGetSelectedDisplayIdxRange(detailView);
+
+      if (range)
+        {
+          start = range->min();
+          end = range->max();
+          ok = TRUE;
+          delete range;
+        }
+    }
+  else if(detailViewGetSelectedIdxSet(detailView))
+    {
+      start = end = properties->selectedIndex->displayIdx;
+      ok = TRUE;
+    }
+
+  if (ok)
+    {
+      int coord = start;
+      for ( ; coord <= end; ++coord)
+        {
+          if (valueWithinRange(coord, &properties->displayRange))
+            {
+              /* Convert the display-range index to a 0-based index in the display range */
+              const int charIdx = coord - properties->displayRange.min();
+      
+              /* Get the x coords for the start and end of the sequence column */
+              IntRange xRange;
+              getColumnXCoords(columnList, BLXCOL_SEQUENCE, &xRange);
+      
+              const int x = xRange.min() + (charIdx * properties->charWidth());
+              const int y = 0;
+      
+              BlxContext *bc = blxWindowGetContext(properties->blxWindow());
+              GdkColor *color = getGdkColor(BLXCOLOR_SELECTION, bc->defaultColors, FALSE, bc->usePrintColors);
+      
+              drawRect(drawable, color, x, y, roundNearest(properties->charWidth()), tree->allocation.height, 0.3, CAIRO_OPERATOR_XOR);
+            }
+        }
+    }
+}
+
+
+/* Expose function for a detail-view tree 
+ * 
+ * There is a bit of hacky code in here to try to speed up the redraw of the
+ * tree, which can be very slow on some systems (I'm not sure why but it seems
+ * quite a common problem with GtkTreeView, sadly).
+ * 
+ * The way the drawing works is as follows:
+ *  - First time round, there is no cached drawable, so it creates the drawable
+ *    and saves it in the widget. It is blank at this point. The default handler
+ *    then continues.
+ *  - The default handler gets the cell renderer to draw each row. The cell
+ *    renderer draws to the cached drawable as well as the window.
+ *  - Even though we have a cached drawable, we always let the default handler
+ *    do the drawing and overwrite the cached drawable (see notes below) ...
+ *  - ... EXCEPT when middle-dragging. The default handler would have to re-draw
+ *    everything when middle-dragging, because the highlighted column on
+ *    every row changes, and this can be slow. We therefore use the cached 
+ *    drawable instead and draw the highlighted column over the top of it.
+ *
+ * Notes:
+ *  - Ideally on subsequent calls we would just push the cached drawable to screen,
+ *    (unless it has been cleared to force a re-draw). However, this does not
+ *    work well for vertical scrolling, because it slows things down if we clear 
+ *    and re-draw everything (I think the renderer normally just draws the
+ *    relevant rows, so is quicker). This is why we let the default handler do 
+ *    the drawing in most cases.  (We could perhaps implement some cleverer
+ *    caching for vertical scrolling. Ideally caching needs to be done by the
+ *    renderer, not by the tree.)
+ *  - It should be safe to use the cached drawable while middle-dragging because the
+ *    user should not be doing any other operations that will change what is
+ *    shown in the trees (although we might need to introduce some blocks to avoid 
+ *    other inputs happening by accident). We make sure the cached drawable is 
+ *    up to date by forcing a re-draw when the user clicks the mouse, and then
+ *    set the "mouse drag mode" flag to indicate that we want to use it (and
+ *    to also stop it being overwritten).
+ *  - The previously-highlighted column will still be highlighted for the duration 
+ *    of a drag, but the highlighting is in a slightly different color, so this is
+ *    actually quite a useful effect because you can see where you started dragging
+ *    from.
+ * */
+static gboolean onExposeDetailViewTree(GtkWidget *tree, GdkEventExpose *event, gpointer data)
+{
+  gboolean handled = FALSE;
+  GdkDrawable *drawable = widgetGetDrawable(tree);
+
+  if (g_mouse_drag_mode && drawable)
+    {
+      /* Push the cached drawable to the window */
+      GdkGC *gc = gdk_gc_new(drawable);
+      GdkWindow *window = gtk_tree_view_get_bin_window(GTK_TREE_VIEW(tree));
+      gdk_draw_drawable(window, gc, drawable, 0, 0, 0, 0, -1, -1);
+      g_object_unref(gc);
+      
+      treeHighlightSelectedBase(tree, window);
+
+      handled = TRUE;
+    }
+  else
+    {
+      /* Create a new drawable to draw to. Our custom cell renderer will draw 
+       * to this as well as the widget's window. The cached drawable is used
+       * for printing and for mouse-drag mode. */
+      GdkDrawable *drawable = gdk_pixmap_new(tree->window, tree->allocation.width, tree->allocation.height, -1);
+      gdk_drawable_set_colormap(drawable, gdk_colormap_get_system());
+      widgetSetDrawable(tree, drawable);
+
+      /* Draw a blank rectangle of the required widget background color */
+      GdkGC *gc = gdk_gc_new(drawable);
+      
+      GdkColor *bgColor = tree->style->bg;
+      gdk_gc_set_foreground(gc, bgColor);
+      gdk_draw_rectangle(drawable, gc, TRUE, 0, 0, tree->allocation.width, tree->allocation.height);
+      
+      g_object_unref(gc);
+      
+      /* Let the default handler continue to do the actual drawing */
+      handled = FALSE;
+    }
+  
+  return handled;
+}
+
+
+/* Select the range of rows in the given tree from the first path to the last inclusive */
+static void treeSelectRowRange(GtkWidget *blxWindow, GtkTreeModel *model, GtkTreePath *firstPath, GtkTreePath *lastPath)
+{
+  /* We currently only ever have a list, so this function assumes the model is a list. If 
+   * the alignment lists are ever changed to be trees, this function will need updating. */
+  if (GTK_IS_TREE_STORE(model))
+    {
+      g_warning("Error selecting range of rows: function not implemented (expected alignments to be in a list store, not a tree store).");
+      return;
+    }
+  
+  /* Loop through all the rows from the last selected one to the one that was clicked
+   * on. The direction depends on which one appears first in the list. */
+  gint *firstIdx = gtk_tree_path_get_indices(firstPath);
+  gint *lastIdx = gtk_tree_path_get_indices(lastPath);
+  
+  gint currentIdx = *firstIdx;
+  const gint incrementValue = *firstIdx < *lastIdx ? 1 : -1;
+  gboolean done = FALSE;
+  
+  while (!done)
+    {
+      /* Select the sequence in the current row */
+      GtkTreePath *currentPath = gtk_tree_path_new_from_indices(currentIdx, -1);
+      
+      GtkTreeIter currentIter;
+      if (gtk_tree_model_get_iter(model, &currentIter, currentPath))
+	{
+	  BlxSequence *currentSeq = treeGetSequence(model, &currentIter);
+	  blxWindowSelectSeq(blxWindow, currentSeq);
+	}
+      else
+	{
+	  g_warning("Invalid iterator found when selecting a range of rows\n");
+	  done = TRUE;
+	}
+      
+      /* Get the next path, unless we're already at the last one */
+      if (currentIdx == *lastIdx)
+	{
+	  done = TRUE;
+	}
+      else
+	{
+	  currentIdx += incrementValue;
+	}
+
+      gtk_tree_path_free(currentPath);
+    }
+}
+
+
+static gboolean treeSelectRow(GtkWidget *tree, GdkEventButton *event)
+{
+  const gboolean ctrlModifier = (event->state & GDK_CONTROL_MASK) == GDK_CONTROL_MASK;
+  const gboolean shiftModifier = (event->state & GDK_SHIFT_MASK) == GDK_SHIFT_MASK;
+  
+  if (!ctrlModifier && !shiftModifier)
+    {
+      blxWindowDeselectAllSeqs(treeGetBlxWindow(tree));
+    }
+  
+  /* If we've clicked a different tree to the previously selected one, make this tree's 
+   * reading frame the active one */
+  GtkWidget *detailView = treeGetDetailView(tree);
+  detailViewSetActiveFrame(detailView, treeGetFrame(tree));
+  
+  /* Find which row was clicked */
+  GtkTreePath *clickedPath = NULL;
+  GtkTreeViewColumn *clickedCol = NULL;
+  int cell_x, cell_y;
+  gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(tree), event->x, event->y, &clickedPath, &clickedCol, &cell_x, &cell_y);
+
+  if (clickedPath)
+    {
+      GtkTreeModel *model = treeGetVisibleDataModel(GTK_TREE_VIEW(tree));
+      GtkTreeIter clickedIter;
+      gtk_tree_model_get_iter(model, &clickedIter, clickedPath);
+      
+      /* Get the sequence of the MSP(s) in this row */
+      BlxSequence *clickedSeq = treeGetSequence(model, &clickedIter);
+
+      if (clickedSeq)
+	{
+	  GtkWidget *blxWindow = treeGetBlxWindow(tree);
+	  
+	  if (!ctrlModifier && !shiftModifier)
+	    {
+	      /* No modifiers: select the sequence */
+	      blxWindowSelectSeq(blxWindow, clickedSeq);
+	    }
+	  else if (ctrlModifier && !shiftModifier)
+	    {
+	      /* Ctrl pressed: toggle the selection state of the sequence */
+	      blxWindowSetSeqSelected(blxWindow, clickedSeq, !blxWindowIsSeqSelected(blxWindow, clickedSeq));
+	    }
+	  else if (!ctrlModifier && shiftModifier)
+	    {
+	      /* Shift pressed: select all rows between the last-selected sequence and the clicked row */
+	      const BlxSequence *lastSelectedSeq = blxWindowGetLastSelectedSeq(blxWindow);
+	      GList *lastSelectedRows = treeGetSequenceRows(tree, lastSelectedSeq);
+	      
+	      if (g_list_length(lastSelectedRows) > 0) /* do nothing if no rows were previously selected */
+		{
+		  /* Get the tree row for the last selected sequence. (If there are multiple rows for this
+		   * sequence, the desired behaviour here is a bit ambiguous, so for now just use any of them */
+		  GtkTreePath *lastSelectedPath = (GtkTreePath*)(lastSelectedRows->data);
+		  treeSelectRowRange(blxWindow, model, lastSelectedPath, clickedPath);
+		}
+
+              destroyTreePathList(&lastSelectedRows);
+	    }
+	}
+
+      GtkWidget *detailView = treeGetDetailView(tree);
+      detailViewSetSelectedStrand(detailView, treeGetStrand(tree));
+      detailViewRedrawAll(detailView);
+
+      gtk_tree_path_free(clickedPath);
+    }
+  
+  return TRUE; /* handled */
+}
+
+
+static gboolean treePfetchRow(GtkWidget *tree)
+{
+  /* Get the selected sequence (assumes that only one is selected) */
+  GtkWidget *blxWindow = treeGetBlxWindow(tree);
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+  GList *selectedSeqs = blxWindowGetSelectedSeqs(blxWindow);
+  
+  if (selectedSeqs)
+    {
+      BlxSequence *clickedSeq = (BlxSequence*)selectedSeqs->data;
+      UserFetch *user_fetch = new UserFetch(clickedSeq, TRUE, blxWindow, NULL,
+#ifdef PFETCH_HTML
+                                            bc->ipresolve, bc->cainfo,
+#endif
+                                            bc->fetch_debug);
+
+      user_fetch->performFetch();
+    }
+
+  return TRUE;
+}
+
+
+static gboolean onButtonPressTree(GtkWidget *tree, GdkEventButton *event, gpointer data)
+{
+  gboolean handled = FALSE;
+  
+  switch (event->button)
+    {
+    case 1:
+      {
+	/* Left button: selects a row, or shows the pfetch window if this was a double-click. */
+	if (event->type == GDK_BUTTON_PRESS)
+	  {
+	    handled = treeSelectRow(tree, event);
+	  }
+	else if (event->type == GDK_2BUTTON_PRESS)
+	  {
+	    handled = treePfetchRow(tree);
+	  }
+
+	break;
+      }
+      
+    default:
+      break;
+    };
+  
+  if (!handled)
+    { 
+      propagateEventButton(tree, treeGetDetailView(tree), event);
+    }
+  
+  return handled;
+}
+
+/* Select the variation that was clicked on, if any */
+static void treeHeaderSelectClickedVariation(GtkWidget *header, GtkWidget *tree, const int x, const int y)
+{
+  /* If variations are highlighted, select the variation that was clicked on, if any.  */
+  BlxContext *bc = treeGetContext(tree);
+  GtkWidget *detailView = treeGetDetailView(tree);
+
+  if (bc->flags[BLXFLAG_HIGHLIGHT_VARIATIONS])
+    {
+      blxWindowDeselectAllSeqs(treeGetBlxWindow(tree));
+      int clickedBase = 1; /* only get in here for DNA matches; so frame/base number is always one */
+
+      selectClickedSnp(header, NULL, detailView, x, y, FALSE, clickedBase); /* SNPs are always un-expanded in the DNA track */
+	    
+      detailViewRefreshAllHeaders(detailView);
+    }
+}
+
+
+/* Show/hide the variations track (and highlight variations in the ref
+ * sequence, if not already highighted). */
+static void treeShowHideVariations(GtkWidget *tree)
+{
+  GtkWidget *detailView = treeGetDetailView(tree);
+  BlxContext *bc = treeGetContext(tree);
+
+  const gboolean showTrack = !bc->flags[BLXFLAG_SHOW_VARIATION_TRACK];
+  bc->flags[BLXFLAG_SHOW_VARIATION_TRACK] = showTrack;
+            
+  if (showTrack)
+    bc->flags[BLXFLAG_HIGHLIGHT_VARIATIONS] = TRUE;
+            
+  detailViewUpdateShowSnpTrack(detailView, showTrack);
+}
+
+
+/* Show the tree-header context menu, if applicable (return false if not) */
+static gboolean treeHeaderShowContextMenu(GtkWidget *header, GtkWidget *tree, GdkEventButton *event)
+{
+  gboolean handled = FALSE;
+
+  GtkWidget *detailView = treeGetDetailView(tree);
+
+  /* Check if the click is in the selected coord range and if so show the sequence-header menu */
+  if (detailViewGetSelectedIdxSet(detailView))
+    {
+      const int displayIdx = treeHeaderGetCoordAtPos(header, tree, event->x, event->y);
+      IntRange *range = detailViewGetSelectedDisplayIdxRange(detailView);
+
+      if (valueWithinRange(displayIdx, range))
+        {
+          GtkWidget *blxWindow = treeGetBlxWindow(tree);
+          GtkWidget *menu = blxWindowGetSeqHeaderMenu(blxWindow);
+
+          gtk_menu_popup (GTK_MENU(menu), NULL, NULL, NULL, NULL, event->button, event->time);
+
+          handled = TRUE;
+        }
+    }
+
+  return handled;
+}
+
+
+static gboolean onButtonPressTreeHeader(GtkWidget *header, GdkEventButton *event, gpointer data)
+{
+  gboolean handled = FALSE;
+  GtkWidget *tree = GTK_WIDGET(data);
+  GtkWidget *detailView = treeGetDetailView(tree);
+
+  switch (event->button)
+    {
+    case 1: /* left button */
+      {
+	if (event->type == GDK_BUTTON_PRESS)
+	  {
+            /* Set the active frame to the tree that was clicked on */
+            detailViewSetActiveFrame(detailView, treeGetFrame(tree));
+            treeHeaderSelectClickedVariation(header, tree, event->x, event->y);
+	  }
+	else if (event->type == GDK_2BUTTON_PRESS)
+	  {
+            /* Double click */
+            treeShowHideVariations(tree);
+	  }
+	
+	handled = TRUE;
+	break;
+      }
+
+    case 3: /* right button */
+      {
+        /* Set the active frame to the tree that was clicked on */
+        detailViewSetActiveFrame(detailView, treeGetFrame(tree));
+        detailViewRefreshAllHeaders(detailView);
+
+        /* Show tree-header context menu, if applicable */
+        handled = treeHeaderShowContextMenu(header, tree, event);
+        break;
+      }
+      
+    default:
+      break;
+    };
+  
+  if (!handled)
+    {
+      /* Propagate to the detail view, translating event coords to detail view widget coords */
+      GtkWidget *detailView = treeGetDetailView(tree);
+      propagateEventButton(header, detailView, event);
+    }
+  
+  return handled;
+}
+
+
+static BlxSequence* treeGetSequence(GtkTreeModel *model, GtkTreeIter *iter)
+{
+  BlxSequence *result = NULL;
+  GList *mspGList = treeGetMsps(model, iter);
+  
+  if (g_list_length(mspGList) > 0)
+    {
+      const MSP *firstMsp = (const MSP*)(mspGList->data);
+      result = firstMsp->sSequence;
+    }
+  
+  return result;
+}
+
+
+/* utility to destroy a GList of GtkTreePaths: destroys the data and the list
+ * and sets the list pointer to null */
+static void destroyTreePathList(GList **list)
+{
+  GList *item = *list;
+
+  for ( ; item; item = item->next)
+    {
+      GtkTreePath *path = (GtkTreePath*)(item->data);
+      gtk_tree_path_free(path);
+    }
+
+  g_list_free(*list);
+  *list = NULL;
+}
+
+
+/* Get all the tree rows that contain MSPs from the given sequence. Returns
+ * a GList of GtkTreePaths; the result must be freed by calling destroyTreePathList */
+static GList *treeGetSequenceRows(GtkWidget *tree, const BlxSequence *clickedSeq)
+{
+  GList *resultList = NULL;
+  
+  /* Loop through all tree rows looking for any with a matching sequence */
+  GtkTreeModel *model = treeGetVisibleDataModel(GTK_TREE_VIEW(tree));
+  
+  GtkTreeIter iter;
+  gboolean validIter = gtk_tree_model_get_iter_first(model, &iter);
+  
+  while (validIter)
+    {
+      /* Loop through all msps in this row and see if any belong
+       * to the clicked sequence. (For normal matches we could just
+       * check one msp because they should all belong to the same
+       * BlxSequence, but for short reads we squash matches from 
+       * different sequences onto the same row, so we can't assume
+       * this) */
+      GList *mspItem = treeGetMsps(model, &iter);
+      
+      for ( ; mspItem; mspItem = mspItem->next)
+	{
+	  const MSP *firstMsp = (const MSP*)(mspItem->data);
+          
+	  if (firstMsp->sSequence == clickedSeq)
+	    {
+	      GtkTreePath *path = gtk_tree_model_get_path(model, &iter);
+	      resultList = g_list_append(resultList, path);
+              break;
+	    }
+	}
+      
+      validIter = gtk_tree_model_iter_next(model, &iter);
+    }
+
+  return resultList;
+}
+
+
+/* Move the current row selection up/down by one row */
+gboolean treeMoveRowSelection(GtkWidget *tree, const gboolean moveUp, const gboolean shiftModifier)
+{
+  /* Get the last selected sequence */
+  GtkWidget *blxWindow = treeGetBlxWindow(tree);
+  BlxSequence *lastSelectedSeq = blxWindowGetLastSelectedSeq(blxWindow);
+  
+  /* Get the row in this tree that contain MSPs from that sequence (if there are multiple 
+   * rows behaviour is a bit ambiguous; for now just act on the first one that was found) */
+  GList *rows = treeGetSequenceRows(tree, lastSelectedSeq);
+
+  if (g_list_length(rows) > 0)
+    {
+      GtkTreePath *path = (GtkTreePath*)(rows->data);
+      GtkTreeModel *model = treeGetVisibleDataModel(GTK_TREE_VIEW(tree));
+      
+      GtkTreeIter newRowIter;
+      gboolean newRowExists = FALSE;
+      
+      /* We have to use a path to get the previous row and an iter to get the next row (because
+       * gtk_tree_path_next is cyclic, so we can't tell if we're at the bottom already). */
+      if (moveUp && gtk_tree_path_prev(path))
+	{
+	  newRowExists = gtk_tree_model_get_iter(model, &newRowIter, path);
+	}
+      else if (!moveUp)
+	{
+	  newRowExists = gtk_tree_model_get_iter(model, &newRowIter, path);
+	  newRowExists &= gtk_tree_model_iter_next(model, &newRowIter);
+	}
+      
+      if (newRowExists)
+	{
+	  BlxSequence *newSeq = treeGetSequence(model, &newRowIter);
+
+	  if (shiftModifier && blxWindowIsSeqSelected(blxWindow, newSeq))
+	    {
+	      /* The new row is already selected; deselect the last-selected row */
+	      blxWindowDeselectSeq(blxWindow, lastSelectedSeq);
+	    }
+	  else if (shiftModifier)
+	    {
+	      /* Add new row to current selection */
+	      blxWindowSelectSeq(blxWindow, newSeq);
+	    }
+	  else
+	    {
+	      /* New row becomes sole selection */
+	      blxWindowDeselectAllSeqs(treeGetBlxWindow(tree));
+	      blxWindowSelectSeq(blxWindow, newSeq);
+	    }
+	  
+	  treeScrollSelectionIntoView(tree, NULL);
+	}
+    }
+
+  destroyTreePathList(&rows);
+  
+  return TRUE;
+}
+
+
+static gboolean onButtonReleaseTree(GtkWidget *tree, GdkEventButton *event, gpointer data)
+{
+  propagateEventButton(tree, treeGetDetailView(tree), event);
+  return FALSE;
+}
+
+
+static gboolean onButtonReleaseTreeHeader(GtkWidget *header, GdkEventButton *event, gpointer data)
+{
+  GtkWidget *tree = GTK_WIDGET(data);
+  propagateEventButton(tree, treeGetDetailView(tree), event);
+  return FALSE;
+}
+
+
+static gboolean onMouseMoveTree(GtkWidget *tree, GdkEventMotion *event, gpointer data)
+{
+  if (!(event->state & GDK_BUTTON1_MASK) &&
+      !(event->state & GDK_BUTTON2_MASK) &&
+      !(event->state & GDK_BUTTON3_MASK) &&
+      !(event->state & GDK_BUTTON4_MASK) &&
+      !(event->state & GDK_BUTTON5_MASK))
+    {
+      /* Feed back details about the currently-hovered over row in the detail-view statusbar area */
+      GtkStatusbar *statusBar = treeGetStatusBar(tree);
+      
+      if (statusBar)
+        {
+          /* Remove any previous message */
+          guint contextId = gtk_statusbar_get_context_id(GTK_STATUSBAR(statusBar), DETAIL_VIEW_STATUSBAR_CONTEXT);
+          gtk_statusbar_pop(GTK_STATUSBAR(statusBar), contextId);
+          
+          /* Add details about the current row that is being hovered over */
+          int bin_x = event->x, bin_y = event->y;
+    //      gtk_tree_view_convert_widget_to_bin_window_coords(GTK_TREE_VIEW(tree), event->x, event->y, &bin_x, &bin_y); //only from GTK v2.12
+          
+          GtkTreePath *path = NULL;
+          GtkTreeViewColumn *column = NULL;
+          
+          if (gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(tree), bin_x, bin_y, &path, &column, NULL, NULL))
+            {
+              GtkTreeIter iter;
+              GtkTreeModel *model = treeGetVisibleDataModel(GTK_TREE_VIEW(tree));
+              gtk_tree_model_get_iter(model, &iter, path);
+
+              GList *mspList = treeGetMsps(model, &iter);
+              
+              if (g_list_length(mspList) > 0)
+                {
+                  const MSP* const msp = (const MSP*)(mspList->data);
+                  
+                  /* Note: this assumes that all MSPs in this row are in the same BlxSequence.
+                   * If there are more, it will just show data for the first BlxSequence found. */
+                  if (msp->sSequence)
+                    {
+                      GtkWidget *detailView = treeGetDetailView(tree);
+                      GList *columnList = detailViewGetColumnList(detailView);
+
+                      char *displayText = blxSequenceGetSummaryInfo(msp->sSequence, columnList);
+                  
+                      if (displayText)
+                        {
+                          gtk_statusbar_push(GTK_STATUSBAR(statusBar), contextId, displayText);
+                          g_free(displayText);
+                        }
+                    }
+                }
+            }
+
+          gtk_tree_path_free(path);
+        }
+	
+      return TRUE;
+    }
+  else
+    {
+      propagateEventMotion(tree, treeGetDetailView(tree), event);
+      return FALSE;
+    }
+}
+
+/* Get the display index at the given position in the tree header */
+static int treeHeaderGetCoordAtPos(GtkWidget *header, GtkWidget *tree, const int x, const int y)
+{
+  int baseIdx = UNSET_INT;
+  
+  GtkWidget *detailView = treeGetDetailView(tree);
+  GtkAdjustment *adjustment = detailViewGetAdjustment(detailView);
+
+  if (x >= 0 && x <= header->allocation.width)
+    {
+      /* Get the 0-based char index at x */
+      gdouble charWidth = detailViewGetCharWidth(detailView);
+      int charIdx = (int)((gdouble)x / charWidth);
+      
+      /* Add the start of the scroll range to convert this to the display index */
+      baseIdx = charIdx + adjustment->value;
+    }
+  else if (x < 0)
+    {
+      baseIdx = adjustment->value;
+    }
+  else if (x > header->allocation.width)
+    {
+      baseIdx = adjustment->value = adjustment->page_size;
+    }
+  
+  return baseIdx;
+}
+
+
+static gboolean onMouseMoveTreeHeader(GtkWidget *header, GdkEventMotion *event, gpointer data)
+{
+  gboolean handled = FALSE;
+  GtkWidget *tree = GTK_WIDGET(data);
+
+  if (event->state & GDK_BUTTON2_MASK)
+    {
+      /* Propagate the event to the detail view. The start of the header widget is at 
+       * the start of the sequence column, so offset the coords before propagating. */
+      GtkWidget *detailView = treeGetDetailView(tree);
+      IntRange xRange;
+      getColumnXCoords(detailViewGetColumnList(detailView), BLXCOL_SEQUENCE, &xRange);
+      event->x += xRange.min();
+
+      propagateEventMotion(tree, treeGetDetailView(tree), event);
+      handled = FALSE;
+    }
+  else
+    {
+      /* If we're hovering over a base that's affected by a variation, then feed back info
+       * about the variation to the user. Only applicable if we're showing a nucleotide sequence. */
+      BlxContext *bc = treeGetContext(tree);
+      
+      if (bc->seqType == BLXSEQ_DNA)
+        {
+          /* Get the index we're hovering over */
+          GtkWidget *detailView = treeGetDetailView(tree);
+          const int displayIdx = treeHeaderGetCoordAtPos(header, tree, event->x, event->y);
+          const int dnaIdx = convertDisplayIdxToDnaIdx(displayIdx, bc->seqType, detailViewGetActiveFrame(detailView), treeGetFrame(tree), bc->numFrames, bc->displayRev, &bc->refSeqRange);
+          
+          updateFeedbackAreaNucleotide(detailView, dnaIdx, treeGetStrand(tree));
+        }
+    }
+      
+  return handled;
+}
+
+
+//static void onDragBeginTree(GtkWidget *widget, GdkDragContext *event, gpointer data)
+//{
+//}
+//
+//static void onDragEndTree(GtkWidget *widget, GdkDragContext *event, gpointer data)
+//{
+//}
+//
+//static gboolean onDragMotionTree(GtkWidget *widget, GdkDragContext *event, gint x, gint y, guint time, gpointer data)
+//{
+//  return FALSE;
+//}
+
+/* Returns false => not in a drop zone */
+static gboolean onDragDropTree(GtkWidget *widget,
+                               GdkDragContext *drag_context,
+                               gint            x,
+                               gint            y,
+                               guint           time,
+                               gpointer        user_data)
+{
+  /* This call is required to stop a warning from gtk about drag-and-drop not
+   * being supported for tree views */
+  g_signal_stop_emission_by_name(widget, "drag-drop");
+  return FALSE;
+}
+
+static gboolean onEnterTree(GtkWidget *tree, GdkEventCrossing *event, gpointer data)
+{
+  /* Return true to stop the default handler re-drawing when the focus changes */
+  return TRUE;
+}
+
+
+/* Clear the detail-view feedback area */
+static void clearStatusbar(GtkWidget *tree)
+{
+  GtkStatusbar *statusBar = treeGetStatusBar(tree);
+  
+  if (statusBar)
+    {
+      guint contextId = gtk_statusbar_get_context_id(GTK_STATUSBAR(statusBar), DETAIL_VIEW_STATUSBAR_CONTEXT);
+      gtk_statusbar_pop(GTK_STATUSBAR(statusBar), contextId);
+    }
+}
+
+
+static gboolean onLeaveTree(GtkWidget *tree, GdkEventCrossing *event, gpointer data)
+{
+  /* Remove any statusbar message that was added by mousing over the tree rows */
+  clearStatusbar(tree);
+  
+  /* Return true to stop the default handler re-drawing when the focus changes */
+  return TRUE;
+}
+
+static gboolean onLeaveTreeHeader(GtkWidget *header, GdkEventCrossing *event, gpointer data)
+{
+  /* Remove any statusbar message that was added by mousing over the tree header */
+  GtkWidget *tree = GTK_WIDGET(data);
+  clearStatusbar(tree);
+  
+  return TRUE;
+}
+
+
+/* Add a row to the given tree containing the given MSP */
+void addMspToTree(MSP *msp, GtkWidget *tree, GtkListStore *store)
+{
+  if (tree)
+    {
+      GtkWidget *detailView = treeGetDetailView(tree);
+      GList *columnList = detailViewGetColumnList(detailView);
+
+      GtkTreeIter iter;
+      gtk_list_store_append(store, &iter);
+      
+      /* The SequenceCellRenderer expects a GList of MSPs, so put our MSP in a list. For exons,
+       * we want to add the child CDS/UTRs rather than the exon itself, so use the child list.
+       * Note that this means we can have multiple MSPs on the same row even when the 'squash
+       * matches' option is not on (which makes sense because realistically they are the same
+       * object). */
+      GList *mspGList = NULL;
+      
+      if (msp->type == BLXMSP_EXON && g_list_length(msp->childMsps) > 0)
+        {
+          mspGList = msp->childMsps;
+        }
+      else
+        {
+          mspGList = g_list_append(NULL, msp);
+        }
+
+      /* Loop through the rest of the columns */
+      GList *item = columnList;
+      
+      for ( ; item; item = item->next)
+        {
+          BlxColumnInfo *columnInfo = (BlxColumnInfo*)(item->data);
+
+          if (columnInfo->columnId == BLXCOL_SCORE)
+            gtk_list_store_set(store, &iter, columnInfo->columnIdx, msp->score, -1);
+          else if (columnInfo->columnId == BLXCOL_ID)
+            gtk_list_store_set(store, &iter, columnInfo->columnIdx, msp->id, -1);
+          else if (columnInfo->columnId == BLXCOL_START)
+            gtk_list_store_set(store, &iter, columnInfo->columnIdx, msp->sRange.min(), -1);
+          else if (columnInfo->columnId == BLXCOL_SEQUENCE)
+            gtk_list_store_set(store, &iter, columnInfo->columnIdx, mspGList, -1);
+          else if (columnInfo->columnId == BLXCOL_END)
+            gtk_list_store_set(store, &iter, columnInfo->columnIdx, msp->sRange.max(), -1);
+          else
+            {
+              GValue *val = blxSequenceGetValue(msp->sSequence, columnInfo->columnId);
+              if (val) gtk_list_store_set_value(store, &iter, columnInfo->columnIdx, val);
+            }
+        }
+      
+      /* Remember the path to this tree row for each MSP */
+      GtkTreePath *path = gtk_tree_model_get_path(GTK_TREE_MODEL(store), &iter);
+      GList *mspItem = mspGList;
+      
+      for ( ; mspItem; mspItem = mspItem->next)
+        {
+          MSP *curMsp = (MSP*)(mspItem->data);
+          curMsp->treePaths[BLXMODEL_NORMAL] = gtk_tree_path_to_string(path);
+        }
+
+      gtk_tree_path_free(path);
+    }
+}
+
+
+/* Cell data function for the "name" column. This displays the sequence name, but
+ * abbreviated to fit the cell, and with a symbol appended to indicate the s strand */
+static void cellDataFunctionNameCol(GtkTreeViewColumn *column,
+				     GtkCellRenderer *renderer, 
+				     GtkTreeModel *model, 
+				     GtkTreeIter *iter, 
+				     gpointer data)
+{
+  GtkWidget *tree = GTK_WIDGET(data);
+  
+  /* Get the MSP(s) for this row. They should all have the same sequence name. */
+  GList	*mspGList = treeGetMsps(model, iter);
+  const int numMsps = g_list_length(mspGList);
+
+  if (GTK_WIDGET_VISIBLE(tree) && numMsps > 0)
+    {
+      MSP *msp = (MSP*)(mspGList->data);
+
+      const int colWidth = gtk_tree_view_column_get_width(column);
+      const gdouble charWidth = treeGetCharWidth(tree);
+      const int maxLen = (int)((gdouble)colWidth / charWidth);
+
+      if (maxLen > 2)
+	{
+	  /* Get the display name */
+          const char *name = mspGetSName(msp);
+          char *displayName = NULL;
+
+          if (!name)
+            name = "<no name>";
+	
+	  /* If the display is squashed and identical matches are on 
+           * the same linke, we need to create a name that includes the
+           * number of duplicate matches. */
+          BlxContext *bc = treeGetContext(tree);
+
+	  if (bc->modelId == BLXMODEL_SQUASHED && mspGetFlag(msp, MSPFLAG_SQUASH_IDENTICAL_FEATURES))
+	    {
+              char *name2 = g_strdup_printf(numMsps == 1 ? DUPLICATE_READS_COLUMN_NAME_SGL : DUPLICATE_READS_COLUMN_NAME, numMsps);
+              displayName = abbreviateText(name2, maxLen - 2);
+              g_free(name2);
+            }
+          
+          if (!displayName)
+            displayName = abbreviateText(name, maxLen - 2);
+          
+          if (displayName)
+            {
+              char displayText[maxLen + 1];
+              sprintf(displayText, "%s", displayName);
+	  
+              int i = strlen(displayName);
+              for ( ; i < maxLen - 1; ++i)
+                {
+                  displayText[i] = ' ';
+                }
+
+              displayText[maxLen - 1] = getStrandAsChar(msp && msp->sSequence ? msp->sSequence->strand : BLXSTRAND_NONE);
+              displayText[maxLen] = 0;
+
+              g_object_set(renderer, RENDERER_TEXT_PROPERTY, displayText, NULL);
+              
+              g_free(displayName);
+            }
+	}
+      else
+	{
+	  g_object_set(renderer, RENDERER_TEXT_PROPERTY, "", NULL);
+	}
+    }
+}
+
+
+/* Cell data function for the "start" column. This displays the start coord of the match 
+ * sequence in normal left-to-right display, but the end coord if the display is reversed */
+static void cellDataFunctionStartCol(GtkTreeViewColumn *column,
+				     GtkCellRenderer *renderer, 
+				     GtkTreeModel *model, 
+				     GtkTreeIter *iter, 
+				     gpointer data)
+{
+  GtkWidget *tree = GTK_WIDGET(data);
+
+  /* Get the MSPs in this row */
+  GList	*mspGList = treeGetMsps(model, iter);
+  
+  if (g_list_length(mspGList) > 0)
+    {  
+      /* We want to display the min coord if we're in the same direction as the q strand,
+       * or the max coord if we're in the opposite direction (unless the display is reversed,
+       * in which case it's vice versa). */
+      const MSP* const msp = (const MSP*)(mspGList->data);
+      
+      if (mspIsBlastMatch(msp))
+        {
+          const gboolean sameDirection = (treeGetStrand(tree) == mspGetMatchStrand(msp));
+          const gboolean findMin = (treeGetDisplayRev(tree) != sameDirection);
+          
+          int coord = findMspListSExtent(mspGList, findMin);
+
+          char displayText[numDigitsInInt(coord) + 1];
+          sprintf(displayText, "%d", coord);
+          g_object_set(renderer, RENDERER_TEXT_PROPERTY, displayText, NULL);
+        }
+      else
+        {
+          g_object_set(renderer, RENDERER_TEXT_PROPERTY, "", NULL);
+        }
+    }
+  else
+    {
+      g_object_set(renderer, RENDERER_TEXT_PROPERTY, "", NULL);
+    }
+}
+
+
+/* Cell data function for the "end" column. This displays the end coord of the match 
+ * sequence in normal left-to-right display, but the start coord if the display is reversed */
+static void cellDataFunctionEndCol(GtkTreeViewColumn *column, 
+				   GtkCellRenderer *renderer, 
+				   GtkTreeModel *model, 
+				   GtkTreeIter *iter, 
+				   gpointer data)
+{
+  GtkWidget *tree = GTK_WIDGET(data);
+
+  /* Get the MSPs in this row */
+  GList	*mspGList = treeGetMsps(model, iter);
+  
+  if (g_list_length(mspGList) > 0)
+    {  
+      /* We want to display the max coord if we're in the same direction as the q strand,
+       * or the min coord if we're in the opposite direction (unless the display is reversed,
+       * in which case it's vice versa). */
+      const MSP* const msp = (const MSP*)(mspGList->data);
+      
+      if (mspIsBlastMatch(msp))
+        {
+          const gboolean sameDirection = (treeGetStrand(tree) == mspGetMatchStrand(msp));
+          const gboolean findMin = (treeGetDisplayRev(tree) == sameDirection);
+          
+          int coord = findMspListSExtent(mspGList, findMin);
+
+          char displayText[numDigitsInInt(coord) + 1];
+          sprintf(displayText, "%d", coord);
+          g_object_set(renderer, RENDERER_TEXT_PROPERTY, displayText, NULL);
+        }
+      else
+        {
+          g_object_set(renderer, RENDERER_TEXT_PROPERTY, "", NULL);
+        }
+    }
+  else
+    {
+      g_object_set(renderer, RENDERER_TEXT_PROPERTY, "", NULL);
+    }
+}
+
+
+/* Cell data function for the score column. */
+static void cellDataFunctionScoreCol(GtkTreeViewColumn *column, 
+				    GtkCellRenderer *renderer, 
+				    GtkTreeModel *model, 
+				    GtkTreeIter *iter, 
+				    gpointer data)
+{
+  /* Get the MSP(s) for this row. Do not display coords if the row contains
+   * multiple MSPs (unless they're short-reads, where we can assume that they
+   * all have the same score because duplicate short-reads are grouped together). */
+  GList	*mspGList = treeGetMsps(model, iter);
+
+  if (g_list_length(mspGList) < 1)
+    {
+      g_object_set(renderer, RENDERER_TEXT_PROPERTY, "", NULL);
+    }
+  else
+    {
+      const MSP* const msp = (const MSP*)(mspGList->data);
+    
+      /* If the score is negative it means do not show */
+      if (msp->score >= 0.0 && (g_list_length(mspGList) == 1 || mspGetFlag(msp, MSPFLAG_SQUASH_IDENTICAL_FEATURES)))
+	{
+	  const gdouble score = msp->score;
+	  char displayText[numDigitsInInt((int)score) + 3]; /* +3 to include decimal point, 1 dp, and terminating nul */
+	  
+    //      sprintf(displayText, "%1.1f", score); 
+	  sprintf(displayText, "%d", (int)score); 
+	  
+	  g_object_set(renderer, RENDERER_TEXT_PROPERTY, displayText, NULL);
+	}
+      else
+	{
+	  g_object_set(renderer, RENDERER_TEXT_PROPERTY, "", NULL);
+	}
+	
+    }
+}
+
+
+/* Cell data function for the id column. */
+static void cellDataFunctionIdCol(GtkTreeViewColumn *column, 
+				  GtkCellRenderer *renderer, 
+				  GtkTreeModel *model, 
+				  GtkTreeIter *iter, 
+				  gpointer data)
+{
+  /* Get the MSP(s) for this row. Do not display coords if the row contains multiple MSPs */
+  GList	*mspGList = treeGetMsps(model, iter);
+  
+  if (g_list_length(mspGList) < 1)
+    {
+      g_object_set(renderer, RENDERER_TEXT_PROPERTY, "", NULL);
+    }
+  else
+    {
+      const MSP* const msp = (const MSP*)(mspGList->data);
+
+      /* If the score is negative it means do not show. Also only display the
+       * ID if we only have one msp in the row (unless they are short reads, in 
+       * which case the ID should be the same for all of them) */
+      if (msp->id >= 0.0 && (g_list_length(mspGList) == 1 || mspGetFlag(msp, MSPFLAG_SQUASH_IDENTICAL_FEATURES)))
+	{
+	  const gdouble id = msp->id;
+	  char displayText[numDigitsInInt((int)id) + 3]; /* +3 to include decimal point, 1 dp, and terminating nul */
+	  
+          sprintf(displayText, "%1.1f", id); 
+//	  sprintf(displayText, "%d", (int)id); 
+
+	  g_object_set(renderer, RENDERER_TEXT_PROPERTY, displayText, NULL);
+	}
+      else
+	{
+	  g_object_set(renderer, RENDERER_TEXT_PROPERTY, "", NULL);
+	}
+    }
+}
+
+
+/* Cell data function for the Group column. */
+static void cellDataFunctionGroupCol(GtkTreeViewColumn *column, 
+                                     GtkCellRenderer *renderer, 
+                                     GtkTreeModel *model, 
+                                     GtkTreeIter *iter, 
+                                     gpointer data)
+{
+  /* Get the MSP(s) for this row and find out they are in a group. All MSPs in a row should
+   * be in the same sequence. */
+  GList	*mspGList = treeGetMsps(model, iter);
+  
+  if (g_list_length(mspGList) > 0)
+    {
+      const MSP* const msp = (const MSP*)(mspGList->data);
+
+      GtkWidget *tree = GTK_WIDGET(data);
+      GtkWidget *blxWindow = treeGetBlxWindow(tree);
+
+      SequenceGroup *group = blxWindowGetSequenceGroup(blxWindow, msp->sSequence);
+      
+      if (group)
+        {
+          g_object_set(renderer, RENDERER_TEXT_PROPERTY, group->groupName, NULL);
+        }
+    }
+}
+
+
+/* Cell data function for the Organism column. */
+static void cellDataFunctionOrganismCol(GtkTreeViewColumn *column, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
+{
+  GList	*mspGList = treeGetMsps(model, iter);
+  if (g_list_length(mspGList) > 0)
+    {
+      const MSP* const msp = (const MSP*)(mspGList->data);
+
+      /* Use the abbreviation if available. */
+      const char *text = mspGetOrganismAbbrev(msp);
+
+      if (!text)
+        {
+          text = mspGetOrganism(msp);
+        }
+      
+      if (text)
+        {
+          g_object_set(renderer, RENDERER_TEXT_PROPERTY, text, NULL);
+        }
+    }
+}
+
+
+/* Cell data function for generic text columns. */
+static void cellDataFunctionGenericCol(GtkTreeViewColumn *column, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
+{
+  BlxColumnId columnId = (BlxColumnId)GPOINTER_TO_INT(data);
+  GList	*mspGList = treeGetMsps(model, iter);
+
+  if (g_list_length(mspGList) > 0)
+    {
+      const MSP* const msp = (const MSP*)(mspGList->data);
+      const char *text = mspGetColumn(msp, columnId);
+      
+      if (text)
+        {
+          g_object_set(renderer, RENDERER_TEXT_PROPERTY, text, NULL);
+        }
+    }
+}
+
+
+static const char* mspListGetSource(GList *mspList)
+{
+  const char *result = NULL;
+  GList *item = mspList;
+  
+  for ( ; item; item = item->next)
+    {
+      const MSP* const msp = (const MSP*)(item->data);
+      const char *source = mspGetSource(msp);
+
+      if (!source)
+        {
+          /* If any source is null, return null */
+          result = NULL;
+          break;
+        }
+      else if (!result)
+        {
+          /* First one found; set result */
+          result = source;
+        }
+      else if (strcmp(source, result) != 0)
+        {
+          /* All sources are not the same. Return null. */
+          result = NULL;
+          break;
+        }      
+    }
+
+  return result;
+}
+
+
+/* Cell data function for the Source column. */
+static void cellDataFunctionSourceCol(GtkTreeViewColumn *column, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
+{
+  GList	*mspGList = treeGetMsps(model, iter);
+  const char *source = mspListGetSource(mspGList);
+  
+  if (source)
+    {
+      g_object_set(renderer, RENDERER_TEXT_PROPERTY, source, NULL);
+    }
+  else
+    {
+      g_object_set(renderer, RENDERER_TEXT_PROPERTY, "", NULL);
+    }
+}
+
+
+/* Callback called when the width of the sequence column has changed. */
+static void onSeqColWidthChanged(GtkTreeViewColumn *column, GParamSpec *paramSpec, gpointer data)
+{
+  GtkWidget *detailView = GTK_WIDGET(data);
+  updateDynamicColumnWidths(detailView);
+}
+
+
+/* Create a single column in the tree. */
+static GtkTreeViewColumn* createTreeColumn(GtkWidget *tree, 
+                                           GtkWidget *detailView,
+                                           GtkCellRenderer *renderer, 
+                                           BlxColumnInfo *columnInfo,
+                                           BlxColumnInfo *seqColInfo)
+{
+  /* Create the column in the tree */
+  GtkTreeViewColumn *column = gtk_tree_view_column_new_with_attributes(
+    columnInfo->title, 
+    renderer, 
+    columnInfo->propertyName, columnInfo->columnIdx,  /* set the relevant property in the tree for the given column */
+    RENDERER_DATA_PROPERTY, seqColInfo->columnIdx,  /* set the 'data' property in the tree to be the 'sequence' column (i.e. the MSP data) */
+    NULL);
+
+  /* Reduce the width of the end col by the scrollbar width. (This is so it matches the width
+   * of the header, which does not have a scrollbar. ) */
+  int width = columnInfo->width;
+  if (columnInfo->columnId == BLXCOL_END)
+    {
+      width = width - scrollBarWidth();
+    }
+  
+  if (columnInfo->columnId == BLXCOL_SEQUENCE)
+    {
+      g_signal_connect(G_OBJECT(column), "notify::width", G_CALLBACK(onSeqColWidthChanged), detailView);
+    }
+  
+  /* Set the column properties and add the column to the tree */
+  if (width > 0)
+    {
+      gboolean displayColumn = showColumn(columnInfo);
+      gtk_tree_view_column_set_visible(column, displayColumn);
+      gtk_tree_view_column_set_fixed_width(column, width);
+    }
+  else
+    {
+      /* Can't have 0 width, so hide the column instead */
+      gtk_tree_view_column_set_visible(column, FALSE);
+    }
+  
+  gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
+  gtk_tree_view_column_set_resizable(column, TRUE);
+  gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column);
+  
+  /* Special treatment for specific columns */
+  switch (columnInfo->columnId)
+  {
+    case BLXCOL_SEQUENCE:
+      gtk_tree_view_column_set_expand(column, TRUE);
+      gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
+      break;
+      
+    case BLXCOL_SEQNAME:
+      gtk_tree_view_column_set_cell_data_func(column, renderer, cellDataFunctionNameCol, tree, NULL);
+      break;
+
+    case BLXCOL_START:
+      gtk_tree_view_column_set_cell_data_func(column, renderer, cellDataFunctionStartCol, tree, NULL);
+      break;
+      
+    case BLXCOL_END:
+      gtk_tree_view_column_set_cell_data_func(column, renderer, cellDataFunctionEndCol, tree, NULL);
+      break;
+      
+    case BLXCOL_SCORE:
+      gtk_tree_view_column_set_cell_data_func(column, renderer, cellDataFunctionScoreCol, tree, NULL);
+      break;
+
+    case BLXCOL_ID:
+      gtk_tree_view_column_set_cell_data_func(column, renderer, cellDataFunctionIdCol, tree, NULL);
+      break;
+
+    case BLXCOL_GROUP:
+      gtk_tree_view_column_set_cell_data_func(column, renderer, cellDataFunctionGroupCol, tree, NULL);
+      break;
+      
+    case BLXCOL_SOURCE:
+      gtk_tree_view_column_set_cell_data_func(column, renderer, cellDataFunctionSourceCol, tree, NULL);
+      break;
+
+    case BLXCOL_ORGANISM:
+      gtk_tree_view_column_set_cell_data_func(column, renderer, cellDataFunctionOrganismCol, tree, NULL);
+      break;
+    
+    default:
+      gtk_tree_view_column_set_cell_data_func(column, renderer, cellDataFunctionGenericCol, GINT_TO_POINTER(columnInfo->columnId), NULL);
+      break;
+  }
+  
+  return column;
+}
+
+
+/* Refresh the name column header. This displays an abbreviated version of the
+ * reference sequence name. It needs refreshing when the columns change size,
+ * so we can re-abbreviate with more/less text as required. */
+static void refreshNameColHeader(GtkWidget *headerWidget, gpointer data)
+{
+  GtkWidget *label = getLabelWidget(headerWidget);
+  
+  if (GTK_IS_LABEL(label))
+    {
+      GtkWidget *tree = GTK_WIDGET(data);
+
+      /* Update the font, in case its size has changed */
+      gtk_widget_modify_font(label , treeGetFontDesc(tree));
+
+      TreeColumnHeaderInfo *headerInfo = treeColumnGetHeaderInfo(tree, BLXCOL_SEQNAME);
+      const int colWidth = calculateColumnWidth(headerInfo, tree);
+
+      /* Abbreviate the name */
+      const char *refSeqName = blxWindowGetRefSeqName(treeGetBlxWindow(tree));
+      const int maxLen = (int)((gdouble)colWidth / treeGetCharWidth(tree));
+      
+      char strandChar = (treeGetStrand(tree) == BLXSTRAND_FORWARD ? '+' : '-');
+      char *stringToAppend = g_strdup_printf("(%c%d)", strandChar, treeGetFrame(tree));
+      const int numCharsToAppend = strlen(stringToAppend);
+      
+      gchar *displayText = NULL;
+      
+      if (maxLen > numCharsToAppend)
+	{
+	  /* Abbreviate the name and then append the strand/frame */
+	  gchar *displayName = abbreviateText(refSeqName, maxLen - numCharsToAppend);
+	  displayText = g_strconcat(displayName, stringToAppend, NULL);
+	  g_free(displayName);
+	}
+      else
+	{
+	  /* No space to concatenate the frame and strand. Just include whatever of the name we can */
+	  displayText = abbreviateText(refSeqName, maxLen);
+	}
+
+      g_free(stringToAppend);
+
+      if (displayText)
+	{
+	  gtk_label_set_text(GTK_LABEL(label), displayText);
+	  g_free(displayText);
+	}
+    }
+  else
+    {
+      g_warning("Unexpected widget type for Name column header; header may not refresh properly.\n");
+    }
+}
+
+
+/* Refresh the start column header. This displays the start index of the current display range */
+static void refreshStartColHeader(GtkWidget *headerWidget, gpointer data)
+{
+  GtkWidget *label = getLabelWidget(headerWidget);
+  
+  if (GTK_IS_LABEL(label))
+    {
+      GtkWidget *tree = GTK_WIDGET(data);
+      BlxContext *bc = treeGetContext(tree);
+
+      /* Update the font, in case its size has changed */
+      gtk_widget_modify_font(label, treeGetFontDesc(tree));
+
+      int displayVal = getStartDnaCoord(treeGetDisplayRange(tree), 
+					treeGetFrame(tree),
+					bc->seqType, 
+					bc->displayRev, 
+					bc->numFrames,
+					&bc->refSeqRange);
+      
+      if (treeGetNegateCoords(tree))
+        displayVal *= -1;
+
+      const int displayTextLen = numDigitsInInt(displayVal) + 1;
+      
+      gchar displayText[displayTextLen];
+      sprintf(displayText, "%d", displayVal);
+      displayText[displayTextLen - 1] = '\0';
+      
+      gtk_label_set_text(GTK_LABEL(label), displayText);
+    }
+  else
+    {
+      g_warning("Unexpected widget type for Start column header; header may not refresh properly.\n");
+    }
+}
+
+
+/* Refresh the start column header. This displays the end index of the current display range */
+static void refreshEndColHeader(GtkWidget *headerWidget, gpointer data)
+{
+  GtkWidget *label = getLabelWidget(headerWidget);
+
+  if (GTK_IS_LABEL(label))
+    {
+      GtkWidget *tree = GTK_WIDGET(data);
+      BlxContext *bc = treeGetContext(tree);
+    
+      int displayVal = getEndDnaCoord(treeGetDisplayRange(tree),
+				      treeGetFrame(tree),
+				      bc->seqType, 
+				      bc->displayRev, 
+				      bc->numFrames,
+				      &bc->refSeqRange);
+      
+      if (treeGetNegateCoords(tree))
+        displayVal *= -1;
+      
+      const int displayTextLen = numDigitsInInt(displayVal) + 1;
+      
+      gchar displayText[displayTextLen];
+      sprintf(displayText, "%d", displayVal);
+      displayText[displayTextLen - 1] = '\0';
+      
+      gtk_label_set_text(GTK_LABEL(label), displayText);
+    }
+  else
+    {
+      g_warning("Unexpected widget type for End column header; header may not refresh properly.\n");
+    }
+}
+
+
+static int calculateColumnWidth(TreeColumnHeaderInfo *headerInfo, GtkWidget *tree)
+{
+  GtkWidget *detailView = treeGetDetailView(tree);
+  GList *columnList = detailViewGetColumnList(detailView);
+  
+  /* Sum the width of all columns that this header includes */
+  GList *listItem = headerInfo->columnIds;
+  int width = 0;
+  
+  for ( ; listItem; listItem = listItem->next)
+    {
+      BlxColumnId columnId = (BlxColumnId)GPOINTER_TO_INT(listItem->data);
+      
+      BlxColumnInfo *columnInfo = getColumnInfo(columnList, columnId);
+      
+      if (showColumn(columnInfo))
+        {
+          width = width + columnInfo->width;
+        }
+    }
+  
+  return width;
+}
+
+
+/* Utility function to create a TreeColumnHeaderInfo struct and initialise its values */
+static TreeColumnHeaderInfo* createTreeColumnHeaderInfo(GtkWidget *headerWidget, 
+							GtkWidget *tree, 
+							GList *columnIds, 
+							GtkCallback refreshFunc)
+{
+  TreeColumnHeaderInfo *headerInfo = new TreeColumnHeaderInfo;
+  
+  headerInfo->headerWidget = headerWidget;
+  headerInfo->tree = tree;
+  headerInfo->columnIds = columnIds;
+  headerInfo->refreshFunc = refreshFunc;
+  
+  return headerInfo;
+}
+
+
+/* Create the column header widget for the given column in the tree header. It gets placed in
+ * a TreecolumnHeaderInfo struct along with other header properties. The tree header shows
+ * information about the reference sequence. */
+static TreeColumnHeaderInfo* createTreeColHeader(GList **columnHeaders, 
+                                                 GtkTreeViewColumn *treeColumn,
+                                                 BlxColumnInfo *columnInfo,
+                                                 TreeColumnHeaderInfo* firstTreeCol,
+                                                 GtkWidget *headerBar,
+                                                 GtkWidget *tree,
+                                                 GtkWidget *detailView,
+                                                 const char* const refSeqName,
+                                                 const int frame,
+                                                 const BlxStrand strand)
+{
+  /* Create a header widget for this column, if required. Also create a list of other 
+   * column IDs we wish to merge under the same header (i.e. the 'Name' header spans over
+   * the name column as well as the score and Id columns). */
+  GtkWidget *columnHeader = NULL;
+  GList *columnIds = NULL;
+  GtkCallback refreshFunc = NULL;
+  
+  switch (columnInfo->columnId)
+    {
+      case BLXCOL_SEQNAME:
+	{
+	  /* The header above the name column will display the reference sequence name.
+	   * This header will also span the score and id columns (and any optional columns)
+           * seeing as we don't need to show any info anout the ref seq in those columns. */
+	  columnHeader = createLabel("", 0.0, 1.0, TRUE, TRUE, TRUE);
+	  refreshFunc = refreshNameColHeader;
+	  columnIds = g_list_append(columnIds, GINT_TO_POINTER(columnInfo->columnId));
+	  g_signal_connect(G_OBJECT(columnHeader), "expose-event", G_CALLBACK(onExposeGenericHeader), detailView);
+	  break;
+	}
+	
+      case BLXCOL_SEQUENCE:
+	{
+	  /* The sequence column header contains the reference sequence. */
+	  columnHeader = gtk_layout_new(NULL, NULL);
+	  
+	  seqColHeaderSetRow(columnHeader, frame);
+	  gtk_widget_set_name(columnHeader, DNA_TRACK_HEADER_NAME);
+	  g_signal_connect(G_OBJECT(columnHeader), "expose-event", G_CALLBACK(onExposeRefSeqHeader), tree);
+	  
+	  refreshFunc = refreshTextHeader;
+	  columnIds = g_list_append(columnIds, GINT_TO_POINTER(columnInfo->columnId));
+
+          gtk_widget_add_events(columnHeader, GDK_BUTTON_PRESS_MASK);
+          gtk_widget_add_events(columnHeader, GDK_BUTTON_RELEASE_MASK);
+          gtk_widget_add_events(columnHeader, GDK_POINTER_MOTION_MASK);
+          gtk_widget_add_events(columnHeader, GDK_LEAVE_NOTIFY);
+          g_signal_connect(G_OBJECT(columnHeader), "button-press-event",    G_CALLBACK(onButtonPressTreeHeader), tree);
+          g_signal_connect(G_OBJECT(columnHeader), "button-release-event",  G_CALLBACK(onButtonReleaseTreeHeader), tree);
+          g_signal_connect(G_OBJECT(columnHeader), "motion-notify-event",   G_CALLBACK(onMouseMoveTreeHeader), tree);
+          g_signal_connect(G_OBJECT(columnHeader), "leave-notify-event",    G_CALLBACK(onLeaveTreeHeader), tree);
+          
+	  break;
+	}
+
+      case BLXCOL_START:
+	{
+	  /* The start column header displays the start index of the current display range */
+	  columnHeader = createLabel("", 0.0, 1.0, TRUE, TRUE, TRUE);
+	  refreshFunc = refreshStartColHeader;
+	  columnIds = g_list_append(columnIds, GINT_TO_POINTER(columnInfo->columnId));
+          g_signal_connect(G_OBJECT(columnHeader), "expose-event", G_CALLBACK(onExposeGenericHeader), detailView);
+	  break;
+	}
+	
+      case BLXCOL_END:
+	{
+	  /* The end column header displays the start index of the current display range */
+	  columnHeader = createLabel("", 0.0, 1.0, TRUE, TRUE, TRUE);
+	  refreshFunc = refreshEndColHeader;
+	  columnIds = g_list_append(columnIds, GINT_TO_POINTER(columnInfo->columnId));
+          g_signal_connect(G_OBJECT(columnHeader), "expose-event", G_CALLBACK(onExposeGenericHeader), detailView);
+	  break;
+	}
+
+      default:
+        /* Any columns not specified above will not have their own header, so add them under the
+         * first column's header instead. */
+        {
+          if (firstTreeCol)
+            {
+              firstTreeCol->columnIds = g_list_append(firstTreeCol->columnIds, GINT_TO_POINTER(columnInfo->columnId));
+            }
+          
+          break;
+        }
+    };
+
+  TreeColumnHeaderInfo *headerInfo = NULL;
+  
+  if (columnHeader)
+    {
+      /* Create a header info struct for each column, even if its contents are null */
+      headerInfo = createTreeColumnHeaderInfo(columnHeader, tree, columnIds, refreshFunc);
+      *columnHeaders = g_list_append(*columnHeaders, headerInfo);
+    }
+  
+  return headerInfo;
+}
+
+
+///* Tooltip function for detail-view trees */
+//static gboolean onQueryTooltip(GtkWidget *tree, gint x, gint y, gboolean keyboard_mode, GtkTooltip *tooltip, gpointer data)
+//{
+//  int binx, biny;
+//  gtk_tree_view_convert_widget_to_bin_window_coords(GTK_TREE_VIEW(tree), x, y, &binx, &biny);
+//  
+//  GtkTreeViewColumn *column = NULL;
+//  gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(tree), binx, biny, NULL, &column, NULL, NULL);
+//  
+//  if (column == gtk_tree_view_get_column(GTK_TREE_VIEW(tree), BLXCOL_SEQNAME))
+//    {
+//        gtk_tooltip_set_text(tooltip, "hello");
+//
+//    }
+//  
+//  return TRUE;
+//}
+
+
+/* Create the columns. Returns a list of header info for the column headers */
+static GList* createTreeColumns(GtkWidget *tree, 
+                                GtkWidget *detailView,
+                                GtkCellRenderer *renderer, 
+                                const BlxSeqType seqType,
+                                GList *columnList,
+                                GtkWidget *columnHeaderBar,
+                                const char* const refSeqName,
+                                const int frame,
+                                const BlxStrand strand)
+{
+  /* We'll create a list of tree column headers */
+  GList *treeColumns = NULL;
+
+  /* The columns are defined by the columnList from the detail view. This list contains the
+   * info such as the column width and title for each column. Loop through and create the tree
+   * column header for each detail-view column. If any columns do not require their own header
+   * in the tree, add them under the first column's header instead. */
+  TreeColumnHeaderInfo* firstTreeCol = NULL;
+  GList *column = columnList;
+  BlxColumnInfo *seqColInfo = getColumnInfo(columnList, BLXCOL_SEQUENCE);
+  
+  for ( ; column; column = column->next)
+    {
+      BlxColumnInfo *columnInfo = (BlxColumnInfo*)column->data;
+      
+      if (columnInfo)
+	{
+	  GtkTreeViewColumn *treeColumn = createTreeColumn(tree, detailView, renderer, columnInfo, seqColInfo);
+          
+	  TreeColumnHeaderInfo* headerInfo = createTreeColHeader(&treeColumns, 
+                                                                 treeColumn, 
+                                                                 columnInfo, 
+                                                                 firstTreeCol, 
+                                                                 columnHeaderBar, 
+                                                                 tree, 
+                                                                 detailView, 
+                                                                 refSeqName, 
+                                                                 frame, 
+                                                                 strand);
+          
+          if (!firstTreeCol)
+            {
+              firstTreeCol = headerInfo;
+            }
+	}
+      else
+	{
+	  g_warning("Error creating column; invalid column info in detail-view column-list.\n");
+	}
+    }
+  
+  /* Set a tooltip to display the sequence name. To do: at the moment this shows
+   * the tooltip when hovering anywhere over the tree: really we probably just
+   * want to show it when hovering over the name column. */
+//  gtk_tree_view_set_tooltip_column(GTK_TREE_VIEW(tree), BLXCOL_SEQNAME); /* only in GTK 2.12 and higher */
+//  gtk_widget_set_has_tooltip(tree, TRUE);
+//  g_signal_connect(G_OBJECT(tree), "query-tooltip", G_CALLBACK(onQueryTooltip), NULL);
+
+  return treeColumns;
+}
+
+
+/* Add the header widget for each column to the tree's header bar */
+static void addColumnsToTreeHeader(GtkWidget *headerBar, GList *columnList)
+{
+  GList *columnItem = columnList;
+  
+  for ( ; columnItem; columnItem = columnItem->next)
+    {
+      TreeColumnHeaderInfo *columnInfo = (TreeColumnHeaderInfo*)(columnItem->data);
+      
+      /* Put the header widget in an event box so that we can color its background. */
+      GtkWidget *eventBox = gtk_event_box_new();
+      gtk_container_add(GTK_CONTAINER(eventBox), columnInfo->headerWidget);
+      
+      /* Put the event box into the header bar. If it's the sequence column, set the expand property. */
+      gboolean expand = (g_list_find(columnInfo->columnIds, GINT_TO_POINTER(BLXCOL_SEQUENCE)) != NULL);
+      
+      gtk_box_pack_start(GTK_BOX(headerBar), eventBox, expand, TRUE, 0);
+    }
+}
+
+
+/* This is the main sort comparison function for comparing two rows of a 
+ * tree view. The sort criteria are specified in the detailView properties;
+ * we may sort by multiple columns.
+ * 
+ * Returns a negative value if the first row appears before the second,
+ * positive if the second appears before the first, or 0 if they are 
+ * equivalent. */
+static gint sortColumnCompareFunc(GtkTreeModel *model, GtkTreeIter *iter1, GtkTreeIter *iter2, gpointer data)
+{
+  gint result = UNSET_INT;
+
+  GtkWidget *tree = GTK_WIDGET(data);
+  GtkWidget *detailView = treeGetDetailView(tree);
+  DetailViewProperties *dvProperties = detailViewGetProperties(detailView);
+  GList *columnList = blxWindowGetColumnList(dvProperties->blxWindow());
+  const int numColumns = g_list_length(columnList);
+
+  /* Sort by each requested column in order of priority */
+  if (dvProperties->sortColumns)
+    {
+      int priority = 0;
+
+      for ( ; priority < numColumns; ++priority)
+        {
+          BlxColumnId sortColumn = dvProperties->sortColumns[priority];
+          
+          /* NONE indicates an unused entry in the priority array; if we reach
+           * an unset value, there should be no more values after it */
+          if (sortColumn == BLXCOL_NONE)
+            break;
+
+          /* Extract the MSPs for the two rows that we're comparing */
+          GList *mspGList1 = treeGetMsps(model, iter1);
+          GList *mspGList2 = treeGetMsps(model, iter2);
+  
+          /* Do the comparison on this column */
+          result = sortByColumnCompareFunc(mspGList1, mspGList2, detailView, sortColumn);
+          
+          /* If rows are equal, continue to sort; otherwise we're done */
+          if (result != 0)
+            break;
+        }
+    }
+  
+  return result;
+}
+
+
+/* Create the base data store for a detail view tree */
+void treeCreateBaseDataModel(GtkWidget *tree, gpointer data)
+{
+  /* Create the data store for the tree view (unless it already exists) */
+  if (treeGetBaseDataModel(GTK_TREE_VIEW(tree)))
+    return;
+  
+  /* Create the data store for the tree. We must know how many columns
+   * we have, and their data types. */
+  GtkWidget *detailView = treeGetDetailView(tree);  
+  GList *columnList = detailViewGetColumnList(detailView);
+  const int numCols = g_list_length(columnList);
+  GType *typeList = columnListGetTypes(columnList);
+
+  GtkListStore *store = gtk_list_store_newv(numCols, typeList);
+
+  /* Set the sort function for each column */
+  int colNum = 0;
+  for ( ; colNum < numCols; ++colNum)
+    {
+      gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(store), colNum,	sortColumnCompareFunc, tree, NULL);
+    }
+  
+  gtk_tree_view_set_model(GTK_TREE_VIEW(tree), GTK_TREE_MODEL(store));
+  
+  /* gtk_tree_view_set_model increments the reference count to 'store', so we should
+   * decrement the reference count when we lose our local reference to it. */
+  g_object_unref(G_OBJECT(store));  
+}
+
+
+/* Create a filtered version of the data store to only show rows that are within the display range. */
+void treeCreateFilteredDataModel(GtkWidget *tree, gpointer data)
+{
+  GtkTreeModel *baseModel = treeGetBaseDataModel(GTK_TREE_VIEW(tree));
+
+  /* If there is already a filtered model, there's nothing to do. (If the visible
+   * model is different to the base model, we can assume it's the filtered model.)*/
+  if (treeGetVisibleDataModel(GTK_TREE_VIEW(tree)) != baseModel)
+    return;
+  
+  GtkTreeModel *filter = gtk_tree_model_filter_new(GTK_TREE_MODEL(baseModel), NULL);
+
+  gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(filter), 
+					 (GtkTreeModelFilterVisibleFunc)isTreeRowVisible, 
+					 tree, 
+					 NULL);
+  
+  /* Add the filtered store to the tree view */
+  gtk_tree_view_set_model(GTK_TREE_VIEW(tree), GTK_TREE_MODEL(filter));
+  
+  /* Keep a reference to the model in the properties so we can switch between this and the 'squashed' model */
+  TreeProperties *properties = treeGetProperties(tree);
+  properties->treeModels[BLXMODEL_NORMAL] = gtk_tree_view_get_model(GTK_TREE_VIEW(tree));
+  
+  /* Note that we would normally decrement the reference count to 'filter' because we 
+   * will lose the local pointer to it.  However, we've also added a pointer to it
+   * from our properties, so we would need to increment the reference count again */
+}
+
+
+static void setTreeStyle(GtkTreeView *tree)
+{
+  gtk_widget_set_name(GTK_WIDGET(tree), DETAIL_VIEW_TREE_NAME);
+  gtk_widget_set_redraw_on_allocate(GTK_WIDGET(tree), FALSE);
+  
+  gtk_tree_view_set_grid_lines(tree, GTK_TREE_VIEW_GRID_LINES_NONE);
+  gtk_tree_selection_set_mode(gtk_tree_view_get_selection(tree), GTK_SELECTION_MULTIPLE);
+  gtk_tree_view_set_reorderable(tree, TRUE);
+  gtk_tree_view_set_headers_visible(tree, FALSE);
+  gtk_tree_view_set_enable_search(tree, FALSE);
+  
+  /* Set the background color for the rows to be the same as the widget's background color */
+  gtk_widget_modify_base(GTK_WIDGET(tree), GTK_STATE_NORMAL, GTK_WIDGET(tree)->style->bg);
+
+  /* The default text color when rows are selected is white. This doesn't work 
+   * well against our default background color of cyan, so use the same text color
+   * as unselected rows. */
+  gtk_widget_modify_text(GTK_WIDGET(tree), GTK_STATE_SELECTED, GTK_WIDGET(tree)->style->text);
+  gtk_widget_modify_text(GTK_WIDGET(tree), GTK_STATE_ACTIVE, GTK_WIDGET(tree)->style->text);
+  
+  /* Set the expander size to 0 so that we can have tiny rows (otherwise the min is 12pt).
+   * Also set the vertical separator to 0 so that we can have the option of the smallest
+   * fonts possible. (The vertical separator causes gaps between rows. We want rows to be
+   * flush, so we render over this gap. However, the bigger the vertical separator, the
+   * bigger the row height (and hence font size) we must have to cover the gaps.) */
+  char parseString[500];
+  sprintf(parseString, "style \"packedTree\"\n"
+	  "{\n"
+	  "GtkTreeView::expander-size	      = 0\n"
+	  "GtkTreeView::vertical-separator    = 0\n"
+	  "GtkTreeView::horizontal-separator  = 0\n"
+	  "}"
+	  "widget \"*%s*\" style \"packedTree\"", DETAIL_VIEW_TREE_NAME);
+  gtk_rc_parse_string(parseString);  
+}
+
+
+/* Create the widget that will contain all the header widgets. If includeNnpTrack is
+ * not null then the snpTrack is also created */
+static GtkWidget *createDetailViewTreeHeader(GtkWidget *detailView, 
+                                             const BlxStrand strand,
+                                             const gboolean includeSnpTrack,
+                                             GtkWidget **snpTrack)
+{
+  GtkWidget *columnHeaderBar = gtk_hbox_new(FALSE, 0);
+  
+  if (includeSnpTrack && snpTrack)
+    {
+      *snpTrack = createSnpTrackHeader(detailView, strand);
+    }
+   
+  return columnHeaderBar;
+}
+
+
+GtkWidget* createDetailViewTree(GtkWidget *grid, 
+				GtkWidget *detailView, 
+				GtkCellRenderer *renderer,
+				GList **treeList,
+				GList *columnList,
+				BlxSeqType seqType,
+				const char* const refSeqName,
+				const int frame,
+				const gboolean includeSnpTrack)
+{
+  /* Find the strand the tree belongs to from the grid */
+  const BlxStrand strand = gridGetStrand(grid);
+  
+  /* Create a tree view for the list of match sequences */
+  GtkWidget *tree = gtk_tree_view_new();
+  setTreeStyle(GTK_TREE_VIEW(tree));
+
+  /* Put it in a scrolled window for vertical scrolling only (hoz scrolling will be via our
+   * custom adjustment). Always display the scrollbars because we assume the column widths 
+   * are the same for all trees and they won't be if one shows a scrollbar and another doesn't. */
+  GtkWidget *scrollWin = gtk_scrolled_window_new(NULL, NULL);
+  //gtk_widget_set_name(scrollWin, DETAIL_VIEW_TREE_CONTAINER_NAME);
+  gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollWin), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
+  gtk_container_add(GTK_CONTAINER(scrollWin), tree);
+
+  GtkAdjustment *adjustment = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(scrollWin));
+  g_signal_connect(G_OBJECT(adjustment), "changed", G_CALLBACK(onScrollChangedTree), tree);
+  g_signal_connect(G_OBJECT(adjustment), "value-changed", G_CALLBACK(onScrollChangedTree), tree);
+
+  /* Create a header */
+  GtkWidget *snpTrack = NULL;
+  GtkWidget *columnHeaderBar = createDetailViewTreeHeader(detailView, strand, includeSnpTrack, &snpTrack);
+  
+  /* Pack the headers and alignments in a container. */
+  GtkWidget *container = NULL;
+
+  if (snpTrack)
+    {
+      /* Add the snp track in a pane so it can be resized vs everything below it.
+       * Top pane is the snp track, bottom pane is everything else (in a vbox) */
+      GtkWidget *vbox = gtk_vbox_new(FALSE, 0);
+      //gtk_widget_set_name(vbox, DETAIL_VIEW_TREE_CONTAINER_NAME);
+      gtk_box_pack_start(GTK_BOX(vbox), columnHeaderBar, FALSE, TRUE, 0);
+      gtk_box_pack_start(GTK_BOX(vbox), scrollWin, TRUE, TRUE, 0);
+
+      container = snpTrackCreatePanedWin(detailView, snpTrack, vbox);
+      //gtk_widget_set_name(container, DETAIL_VIEW_TREE_CONTAINER_NAME);
+    }
+  else
+    {
+      /* Just put everything in a vbox */
+      container = gtk_vbox_new(FALSE, 0);
+      //gtk_widget_set_name(container, DETAIL_VIEW_TREE_CONTAINER_NAME);
+
+      gtk_box_pack_start(GTK_BOX(container), columnHeaderBar, FALSE, FALSE, 0);
+      gtk_box_pack_start(GTK_BOX(container), scrollWin, TRUE, TRUE, 0);
+    }  
+
+  /* Create the tree columns */
+  GList *treeColumnHeaderList = createTreeColumns(tree, detailView, renderer, seqType, columnList, columnHeaderBar, refSeqName, frame, strand);
+  
+  /* Add the columns to the tree header */
+  addColumnsToTreeHeader(columnHeaderBar, treeColumnHeaderList);
+  
+  /* Set the essential tree properties */
+  treeCreateProperties(tree, grid, detailView, frame, treeColumnHeaderList, includeSnpTrack);
+  
+  /* Connect signals */
+  gtk_widget_add_events(tree, GDK_FOCUS_CHANGE_MASK);
+  g_signal_connect(G_OBJECT(tree), "button-press-event",    G_CALLBACK(onButtonPressTree),	NULL);
+  g_signal_connect(G_OBJECT(tree), "button-release-event",  G_CALLBACK(onButtonReleaseTree),	detailView);
+  g_signal_connect(G_OBJECT(tree), "motion-notify-event",   G_CALLBACK(onMouseMoveTree),	detailView);
+  g_signal_connect(G_OBJECT(tree), "enter-notify-event",    G_CALLBACK(onEnterTree),		NULL);
+  g_signal_connect(G_OBJECT(tree), "leave-notify-event",    G_CALLBACK(onLeaveTree),		NULL);
+  //g_signal_connect(G_OBJECT(tree), "drag-begin",	    G_CALLBACK(onDragBeginTree),	NULL);
+  //g_signal_connect(G_OBJECT(tree), "drag-end",		    G_CALLBACK(onDragEndTree),		NULL);
+  //g_signal_connect(G_OBJECT(tree), "drag-motion",	    G_CALLBACK(onDragMotionTree),	NULL);
+  g_signal_connect(G_OBJECT(tree), "drag-drop",		    G_CALLBACK(onDragDropTree),		NULL);
+  g_signal_connect(G_OBJECT(tree), "expose-event",	    G_CALLBACK(onExposeDetailViewTree), NULL);
+
+  GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree));
+  g_signal_connect(G_OBJECT(selection), "changed", G_CALLBACK(onSelectionChangedTree), tree);
+
+  /* Put the contents in a frame */
+  GtkWidget *treeFrame = gtk_frame_new(NULL);
+  gtk_widget_set_name(treeFrame, DETAIL_VIEW_TREE_CONTAINER_NAME);
+  gtk_frame_set_shadow_type(GTK_FRAME(treeFrame), GTK_SHADOW_IN);
+  gtk_container_add(GTK_CONTAINER(treeFrame), container);
+  
+  /* Add the tree's outermost container to the given tree list. Also increase its ref count so that
+   * we can add/remove it from its parent (which we do to switch panes when we toggle strands)
+   * without worrying about it being destroyed. */
+  *treeList = g_list_append(*treeList, treeFrame);
+  g_object_ref(treeFrame);
+
+  return treeFrame;
+}
+
diff --git a/blixemApp/detailviewtree.hpp b/blixemApp/detailviewtree.hpp
new file mode 100644
index 0000000..badca52
--- /dev/null
+++ b/blixemApp/detailviewtree.hpp
@@ -0,0 +1,136 @@
+/*  File: detailviewtree.h
+ *  Author: Gemma Barson, 2009-11-23
+ *  Copyright (c) 2009 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: A detail-view tree shows all of the alignments for a particular 
+ *              reading-frame and strand of the reference sequence. It 
+ *              constitutes one pane in the detail-view. It has a header
+ *              showing the reference sequence and, lined up below this, shows
+ *              the sequence data for each match sequence within the current
+ *              display range.
+ *
+ *              One row in the tree represents one match sequence. Only matches
+ *              that lie within the current display range are visible in the
+ *              tree. The display range is specified by selecting a range from
+ *              the big picture or by scrolling etc.
+ *
+ *              All detail-view trees share the same scrollbar/display-range
+ *              so that they all show the same section of reference sequence.
+ *              The cell contents of the tree are drawn by a custom cell 
+ *              renderer - see sequencecellrenderer.h.
+ *----------------------------------------------------------------------------
+ */
+
+#ifndef _detail_view_tree_included_
+#define _detail_view_tree_included_
+
+#include <gtk/gtk.h>
+#include <seqtoolsUtils/utilities.hpp>
+#include <blixemApp/sequencecellrenderer.hpp>
+#include <blixemApp/detailview.hpp>
+
+#define DETAIL_VIEW_TREE_NAME		  "DetailViewTreeName"
+#define DETAIL_VIEW_TREE_CONTAINER_NAME	  "DetailViewTreeContainerName"
+#define START_TRUE                        1
+#define START_FALSE                       2
+
+/* This struct holds info about a tree header widget. */
+typedef struct _TreeColumnHeaderInfo
+  {
+    GtkWidget *headerWidget;	/* The actual header widget */
+    GtkWidget *tree;		/* The tree view that this header belongs to */
+    GList *columnIds;		/* A list of columns spanned by this header. (Columns must be adjacent to each other.) */
+    GtkCallback refreshFunc;    /* Function to be called when a refresh is requested */
+  } TreeColumnHeaderInfo;
+
+
+/* This struct holds info about a detail-view tree pane */
+class TreeProperties 
+{
+public:
+  GtkWidget *widget;                /* The tree widget */
+  GtkWidget *grid;		    /* The grid that this tree corresponds to */
+  GtkWidget *detailView;	    /* The detail view that this tree belongs to */
+
+  int readingFrame;		    /* Which reading frame this tree displays */
+  GList *treeColumnHeaderList;      /* List of info about the tree column headers */
+  gboolean hasSnpHeader;	    /* Whether a SNP track is shown above this tree */
+
+  GtkTreeModel *treeModels[BLXMODEL_NUM_MODELS];  /* The tree data store(s) */
+};
+
+
+/* Public function declarations */
+BlxContext*	  treeGetContext(GtkWidget *tree);
+TreeProperties*	  treeGetProperties(GtkWidget *widget);
+BlxStrand	  treeGetStrand(GtkWidget *tree);
+GList*		  treeGetMsps(GtkTreeModel *model, GtkTreeIter *iter);
+GtkTreeModel*	  treeGetBaseDataModel(GtkTreeView *tree);
+GtkWidget*	  treeGetBlxWindow(GtkWidget *tree);
+int		  treeGetCellXPadding(GtkWidget *tree);
+int		  treeGetCellYPadding(GtkWidget *tree);
+int               treeGetFrame(GtkWidget *tree);
+
+void		  callFuncOnAllDetailViewTrees(GtkWidget *widget, GtkCallback func, gpointer data);
+
+void		  refilterTree(GtkWidget *tree, gpointer data);
+void		  resortTree(GtkWidget *tree, gpointer data);
+void		  refreshTreeHeaders(GtkWidget *tree, gpointer data);
+void		  resizeTreeColumns(GtkWidget *tree, gpointer data);
+void		  treeUpdateFontSize(GtkWidget *tree, gpointer data);
+
+void		  treeUpdateSquashMatches(GtkWidget *tree, gpointer data);
+
+gboolean	  treeMoveRowSelection(GtkWidget *tree, const gboolean moveUp, const gboolean shiftModifier);
+void		  treeScrollSelectionIntoView(GtkWidget *tree, gpointer data);
+
+void              addMspToTree(MSP *msp, GtkWidget *tree, GtkListStore *store);
+void		  addSequencesToTree(GtkWidget *tree, gpointer data);
+
+void              treeDrawCachedBitmap(GtkWidget *tree, gpointer data);
+
+void              setMouseDragMode(const gboolean value);
+
+GtkWidget*	  createDetailViewTree(GtkWidget *grid, 
+				       GtkWidget *detailView,
+				       GtkCellRenderer *renderer,
+				       GList **treeList,
+				       GList *columnList,
+				       BlxSeqType seqType,
+				       const char* const refSeqName,
+				       const int frame,
+				       const gboolean includeSnpTrack);
+
+void		   treeCreateBaseDataModel(GtkWidget *tree, gpointer data);
+void		   treeCreateFilteredDataModel(GtkWidget *tree, gpointer data);
+
+#endif /* _detail_view_tree_included_ */
diff --git a/blixemApp/exonview.cpp b/blixemApp/exonview.cpp
new file mode 100644
index 0000000..b98074e
--- /dev/null
+++ b/blixemApp/exonview.cpp
@@ -0,0 +1,929 @@
+/*  File: exonview.c
+ *  Author: Gemma Barson, 2009-12-24
+ *  Copyright (c) 2009 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: See exonview.h
+ *----------------------------------------------------------------------------
+ */
+
+#include <blixemApp/exonview.hpp>
+#include <blixemApp/blxcontext.hpp>
+#include <blixemApp/detailviewtree.hpp>
+#include <blixemApp/bigpicture.hpp>
+#include <blixemApp/bigpicturegrid.hpp>
+#include <blixemApp/detailview.hpp>
+#include <blixemApp/blxwindow.hpp>
+#include <seqtoolsUtils/utilities.hpp>
+#include <seqtoolsUtils/blxmsp.hpp>
+#include <blixemApp/blxpanel.hpp>
+#include <string.h>
+#include <stdlib.h>
+#include <algorithm>
+
+using namespace std;
+
+
+#define DEFAULT_EXON_HEIGHT			 10
+#define DEFAULT_EXON_HEIGHT_BUMPED		 7
+#define	DEFAULT_EXON_YPAD			 4
+#define	DEFAULT_EXON_YPAD_BUMPED		 4
+
+class ExonViewProperties
+{
+public:
+  GtkWidget *widget;                  /* The exon view */
+  GtkWidget *bigPicture;	      /* The big picture that this view belongs to */
+  BlxStrand currentStrand;	      /* Which strand of the ref seq this view displays exons for */
+    
+  gboolean expanded;		      /* Whether the exon view is expanded or compressed */
+    
+  int yPad;			      /* y padding */
+    
+  GdkRectangle exonViewRect;	      /* The drawing area for the exon view */
+  GdkRectangle highlightRect;       /* The area that the highlight box will cover (indicating the current detail-view display range) */
+    
+  int exonHeight;                   /* the height of an individual exon */ 
+};
+
+
+/* Utility struct to pass around data required for drawing exons */
+typedef struct _DrawData
+  {
+    GdkDrawable *drawable;
+    GdkGC *gc;
+    GdkRectangle *exonViewRect;
+    GtkWidget *blxWindow;
+    BlxContext *bc;
+    const BlxStrand strand;
+    const IntRange* const displayRange;
+    const IntRange* const refSeqRange;
+    const gboolean displayRev;
+    const int numFrames;
+    const BlxSeqType seqType;
+    gboolean expanded;		      /* whether exon view is expaned or compressed */
+    gboolean normalOnly;	      /* Only draw "normal" MSPs, i.e. thse that are not selected and are not in a group */
+    int yPad;			      /* y padding */
+    int y;			      /* y position to draw this exon at (constant if view compressed; increases if view bumped) */
+    int height;			      /* height of exon box */
+  } DrawData;
+
+
+
+/* Local function declarations */
+static GtkWidget*		exonViewGetBigPicture(GtkWidget *exonView);
+static GtkWidget*		exonViewGetBlxWindow(GtkWidget *exonView);
+static ExonViewProperties*	exonViewGetProperties(GtkWidget *exonView);
+
+
+/***********************************************************
+ *                       Utility functions                 *
+ ***********************************************************/
+
+/* Calls the given function (passed as the data pointer) on the given widget 
+ * if it is an exon view in the big picture view, or, if it is a container, 
+ * calls the function on all children/grandchildren/etc that are exon views */
+void callFuncOnAllBigPictureExonViews(GtkWidget *widget, gpointer data)
+{
+  const gchar *name = gtk_widget_get_name(widget);
+  if (strcmp(name, BIG_PICTURE_EXON_VIEW_NAME) == 0)
+    {
+      GtkCallback func = (GtkCallback)data;
+      func(widget, NULL);
+    }
+  else if (GTK_IS_CONTAINER(widget))
+    {
+      gtk_container_foreach(GTK_CONTAINER(widget), callFuncOnAllBigPictureExonViews, data);
+    }
+}
+
+
+static gboolean calculateExonIntronDimensions(const MSP* const msp, 
+                                              BlxContext *bc,
+                                              const IntRange* const displayRange,
+                                              GdkRectangle *exonViewRect,
+                                              int *x, 
+                                              int *width)
+{
+  gboolean drawn = FALSE;
+  
+  /* Find the coordinates of the start and end base in this msp, converting to display coords. Note
+   * that display coords always increase from left-to-right, even if the actual coords are inverted. */
+  const IntRange* const mspDisplayRange = mspGetDisplayRange(msp);
+
+  if (rangesOverlap(mspDisplayRange, displayRange))
+    {
+      drawn = TRUE;
+
+      /* Get the display range in dna coords */
+      IntRange dnaDispRange;
+      convertDisplayRangeToDnaRange(displayRange, bc->seqType,
+                                    bc->numFrames, bc->displayRev,
+                                    &bc->refSeqRange, &dnaDispRange);
+      
+      /* The grid pos for coords gives the left edge of the coord, so draw to max + 1 to be inclusive */
+      const int qStart = msp->qRange.min(true, bc->displayRev);
+      const int qEnd = msp->qRange.max(true, bc->displayRev);
+  
+      const gint x1 = convertBaseIdxToRectPos(qStart, exonViewRect, &dnaDispRange,
+                                              TRUE, bc->displayRev, FALSE);
+      const gint x2 = convertBaseIdxToRectPos(qEnd, exonViewRect, &dnaDispRange, 
+                                              TRUE, bc->displayRev, FALSE);
+      
+      *x = min(x1, x2);
+      *width = abs(x1 - x2);
+    }
+ 
+  return drawn;
+}
+
+
+/* Returns true if the given MSP should be shown in this exon view */
+static gboolean showMspInExonView(const MSP *msp, const BlxStrand strand, BlxContext *bc)
+{
+  /* Check it's an exon or intron */
+  gboolean showMsp = mspIsBoxFeature(msp) || mspIsIntron(msp);
+  
+  /* Check it's in a visible layer */
+  showMsp &= mspLayerIsVisible(msp);
+  
+  /* Check it's the correct strand */
+  showMsp &= (mspGetRefStrand(msp) == strand);
+
+  /* Check if its in a group that's hidden */
+  if (showMsp)
+    {
+      list <const SequenceGroup*> groups = bc->getSequenceGroups(msp->sSequence) ;
+      showMsp &= bc->isGroupVisible(groups, msp->sSequence->type) ;
+    }
+
+  return showMsp;
+}
+
+
+/* Mark the given exon's transcript as selected if this exon contains the given coords.
+ * Returns true if it was selected. */
+static gboolean selectExonIfContainsCoords(GtkWidget *exonView, 
+                                           ExonViewProperties *properties,
+                                           BlxContext *bc,
+                                           const IntRange* const displayRange,
+                                           const MSP *msp,
+                                           const int x,
+                                           const int y,
+                                           gboolean deselectOthers,
+                                           const int mspY,
+                                           gboolean *drawn)
+{
+  gboolean wasSelected = FALSE;
+  
+  if (showMspInExonView(msp, properties->currentStrand, bc) && 
+      rangesOverlap(displayRange, mspGetDisplayRange(msp)))
+    {
+      *drawn = TRUE;
+      
+      int mspX = UNSET_INT, mspWidth = UNSET_INT;
+      calculateExonIntronDimensions(msp, bc, displayRange, &properties->exonViewRect, &mspX, &mspWidth);
+
+      if (x >= mspX && x <= mspX + mspWidth && y >= mspY && y <= mspY + properties->exonHeight)
+	{
+	  /* It's a hit. Select this sequence. */
+	  GtkWidget *blxWindow = exonViewGetBlxWindow(exonView);
+	  
+	  if (deselectOthers)
+	    {
+	      blxWindowDeselectAllSeqs(blxWindow);
+	    }
+	  
+	  blxWindowSelectSeq(blxWindow, msp->sSequence);
+	  
+	  /* Update the selected strand */
+	  GtkWidget *detailView = blxWindowGetDetailView(blxWindow);
+          ExonViewProperties *properties = exonViewGetProperties(exonView);
+	  detailViewSetSelectedStrand(detailView, properties->currentStrand);
+
+	  /* Scroll the detail view trees to bring the new selection into view */
+	  callFuncOnAllDetailViewTrees(detailView, treeScrollSelectionIntoView, NULL);
+
+	  wasSelected = TRUE;
+	}
+    }
+  
+  return wasSelected;
+}
+
+
+/* Loop through all the msp lines for this grid and mark them as selected
+ * if they contain the coords of the mouse press */
+static gboolean selectClickedExon(GtkWidget *exonView, 
+                                  GdkEventButton *event, 
+                                  const gboolean ctrlModifier, 
+                                  const gboolean shiftModifier)
+{
+  ExonViewProperties *properties = exonViewGetProperties(exonView);
+  const gboolean deselectOthers = !ctrlModifier && !shiftModifier; /* whether to deselect all others first */
+
+  /* Loop through all the MSPs until we find one under the click coords */
+  GtkWidget *blxWindow = exonViewGetBlxWindow(exonView);
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+  GList *seqItem = blxWindowGetAllMatchSeqs(blxWindow);
+
+  gboolean found = FALSE;
+  int y = properties->yPad;
+  
+  for ( ; seqItem && !found; seqItem = seqItem->next)
+    {
+      const BlxSequence* const seq = (const BlxSequence*)(seqItem->data);
+      GList *mspItem = seq->mspList;
+      gboolean drawn = FALSE;
+            
+      for ( ; mspItem && !found; mspItem = mspItem->next)
+        {
+          const MSP* const msp = (const MSP*)(mspItem->data);
+          found = selectExonIfContainsCoords(exonView, properties, bc, 
+                                             bigPictureGetDisplayRange(properties->bigPicture),
+                                             msp, event->x, event->y, deselectOthers, y, &drawn);
+        }
+
+      if (drawn && properties->expanded)
+        y += properties->exonHeight + properties->yPad;
+    }
+
+  return found;
+}
+
+
+void calculateExonViewHeight(GtkWidget *exonView)
+{
+  DEBUG_ENTER("calculateExonViewHeight");
+
+  ExonViewProperties *properties = exonViewGetProperties(exonView);
+
+  BigPictureProperties *bpProperties = bigPictureGetProperties(properties->bigPicture);
+  const IntRange* const displayRange = &bpProperties->displayRange;
+  
+  BlxContext *bc = blxWindowGetContext(bpProperties->blxWindow());
+
+  /* Calculate the height based on how many exon lines will actually be drawn */
+  int numExons = 0;
+  int maxExons = properties->expanded ? UNSET_INT : 1; /* unset means no limit */
+  
+  /* Loop through all sequences */
+  GList *seqItem = bc->matchSeqs;
+  
+  for ( ; seqItem; seqItem = seqItem->next)
+    {
+      /* Loop through all msps */
+      const BlxSequence *seq = (BlxSequence*)(seqItem->data);
+      GList *mspItem = seq->mspList;
+      
+      for ( ; mspItem; mspItem = mspItem->next)
+	{
+	  const MSP *msp = (const MSP*)(mspItem->data);
+          
+          if (showMspInExonView(msp, properties->currentStrand, bc))
+	    {
+	      const IntRange* const mspDisplayRange = mspGetDisplayRange(msp);
+              
+              if (rangesOverlap(mspDisplayRange, displayRange))
+		{
+		  ++numExons;
+		  break; /* break inner loop and move to next sequence */
+		}
+	    }
+	}
+      
+      /* Break after we've found the maximum number of lines, if a max is specified */
+      if (maxExons != UNSET_INT && numExons >= maxExons)
+	{
+	  break;
+	}
+    }
+  
+  const int newHeight = (numExons * (properties->exonHeight + properties->yPad)) + (2 * properties->yPad);
+  
+  if (newHeight != properties->exonViewRect.height)
+    {
+      DEBUG_OUT("Setting new height = %d\n", newHeight);
+      properties->exonViewRect.height = newHeight;
+      gtk_widget_set_size_request(exonView, -1, properties->exonViewRect.height);
+    }
+  
+  DEBUG_EXIT("calculateExonViewHeight returning");
+}
+
+
+void calculateExonViewHighlightBoxBorders(GtkWidget *exonView)
+{
+  ExonViewProperties *properties = exonViewGetProperties(exonView);
+  BlxContext *bc = bigPictureGetContext(properties->bigPicture);
+  
+  /* Get the big picture display range in dna coords */
+  IntRange bpRange;
+  convertDisplayRangeToDnaRange(bigPictureGetDisplayRange(properties->bigPicture), bc->seqType, bc->numFrames, bc->displayRev, &bc->refSeqRange, &bpRange);
+
+  /* Get the detail view display range in dna coords */
+  IntRange dvRange;
+  GtkWidget *detailView = bigPictureGetDetailView(properties->bigPicture);
+  convertDisplayRangeToDnaRange(detailViewGetDisplayRange(detailView), bc->seqType, bc->numFrames, bc->displayRev, &bc->refSeqRange, &dvRange);
+  
+  /* Calculate how many pixels from the left edge of the widget to the first base in the range. */
+  const int x1 = convertBaseIdxToRectPos(dvRange.min(true, bc->displayRev), &properties->exonViewRect, &bpRange, TRUE, bc->displayRev, TRUE);
+  const int x2 = convertBaseIdxToRectPos(dvRange.max(true, bc->displayRev), &properties->exonViewRect, &bpRange, TRUE, bc->displayRev, TRUE);
+  
+  properties->highlightRect.x = min(x1, x2);
+  properties->highlightRect.y = 0;
+  
+  properties->highlightRect.width = abs(x1 - x2);
+  properties->highlightRect.height = exonView->allocation.height;
+}
+
+
+static void calculateExonViewBorders(GtkWidget *exonView)
+{
+  ExonViewProperties *properties = exonViewGetProperties(exonView);
+  BigPictureProperties *bigPictureProperties = bigPictureGetProperties(properties->bigPicture);
+  
+  /* Calculate the size of the exon view */
+  properties->exonViewRect.x = roundNearest(bigPictureProperties->contentXPos());
+  properties->exonViewRect.width = bigPictureProperties->contentWidth();
+  
+  /* Calculate the size of the highlight box */
+  calculateExonViewHighlightBoxBorders(exonView);
+}
+
+
+/***********************************************************
+ *                       Drawing functions                 *
+ ***********************************************************/
+
+/* Draw an exon (well, any box-shaped feature, actually) */
+static void drawExon(const MSP* const msp, 
+                     DrawData *data, 
+                     const BlxSequence *blxSeq, 
+                     const gboolean isSelected, 
+                     const gint x, 
+                     const gint y,
+                     const gint widthIn,
+                     const gint height)
+{
+  /* Clip to the drawing area (or just beyond, so we don't get end lines where the exon doesn't really end) */
+  gint xStart = x;
+  gint xEnd = x + widthIn;
+  gint width = widthIn;
+  
+  const gint xMin = data->exonViewRect->x;
+  const gint xMax = data->exonViewRect->x + data->exonViewRect->width;
+  
+  if (xStart <= xMax && xEnd >= xMin)
+    {
+      if (xStart < xMin)
+        {
+          xStart = xMin - 1;
+          width = xEnd - xStart;
+        }
+
+      if (xEnd > xMax)
+        {
+          xEnd = xMax + 1;
+          width = xEnd - xStart;
+        }
+
+      /* Draw the fill rectangle */
+      const GdkColor *fillColor = mspGetColor(msp, data->bc->defaultColors, BLXCOLOR_BACKGROUND, blxSeq, isSelected, data->bc->usePrintColors, TRUE, BLXCOLOR_EXON_FILL, BLXCOLOR_EXON_LINE, BLXCOLOR_CDS_FILL, BLXCOLOR_CDS_LINE, BLXCOLOR_UTR_FILL, BLXCOLOR_UTR_LINE);
+      gdk_gc_set_foreground(data->gc, fillColor);
+      gdk_draw_rectangle(data->drawable, data->gc, TRUE, xStart, y, width, height);
+      
+      /* Draw outline (exon box outline always the same (unselected) color; only intron lines change when selected) */
+      const GdkColor *lineColor = mspGetColor(msp, data->bc->defaultColors, BLXCOLOR_BACKGROUND, blxSeq, isSelected, data->bc->usePrintColors, FALSE, BLXCOLOR_EXON_FILL, BLXCOLOR_EXON_LINE, BLXCOLOR_CDS_FILL, BLXCOLOR_CDS_LINE, BLXCOLOR_UTR_FILL, BLXCOLOR_UTR_LINE);
+      gdk_gc_set_foreground(data->gc, lineColor);
+      gdk_draw_rectangle(data->drawable, data->gc, FALSE, xStart, y, width, height);
+    }
+}
+  
+
+/* Utility to actually draw the line for an intron. Clips it if necessary, maintaining the same
+ * angle for the line */
+static void drawIntronLine(DrawData *data, const gint x1, const gint y1, const gint x2, const gint y2, GdkRectangle *clipRect)
+{
+  /* Only draw anything if at least part of the line is within range. We are only ever called with
+   * y values that are in range so don't bother checking them. */
+  const gint xMax = clipRect->x + clipRect->width;
+  
+  if (x1 <= xMax && x2 >= clipRect->x)
+    {
+      int xStart = x1;
+      int xEnd = x2;
+      int yStart = y1;
+      int yEnd = y2;
+      
+      /* Clip the start/end x values if out of range */
+      if (xStart < clipRect->x)
+        {
+          const int origWidth = abs(xEnd - xStart);
+        
+          xStart = clipRect->x;
+
+          const int newWidth = abs(xEnd - xStart);
+          const int newHeight = roundNearest((double)(yEnd - yStart) * (double)newWidth / (double)origWidth); /* negative if yend < ystart */
+          
+          yStart = yEnd - newHeight;
+        }
+
+      if (xEnd > xMax)
+        {
+          const int origWidth = abs(xEnd - xStart);
+
+          xEnd = xMax;
+
+          const int newWidth = abs(xEnd - xStart);
+          const int newHeight = roundNearest((double)(yEnd - yStart) * (double)newWidth / (double)origWidth);
+          
+          yEnd = yStart + newHeight;
+        }
+        
+      gdk_draw_line(data->drawable, data->gc, xStart, yStart, xEnd, yEnd);
+    }
+}
+
+
+/* Draw an intron */
+static void drawIntron(const MSP* const msp, 
+                       DrawData *data, 
+                       const BlxSequence *blxSeq, 
+                       const gboolean isSelected, 
+                       const gint x, 
+                       const gint y, 
+                       const gint width, 
+                       const gint height)
+{
+  const GdkColor *lineColor = mspGetColor(msp, data->bc->defaultColors, BLXCOLOR_BACKGROUND, blxSeq, isSelected, data->bc->usePrintColors, FALSE, BLXCOLOR_EXON_FILL, BLXCOLOR_EXON_LINE, BLXCOLOR_CDS_FILL, BLXCOLOR_CDS_LINE, BLXCOLOR_UTR_FILL, BLXCOLOR_UTR_LINE);
+  gdk_gc_set_foreground(data->gc, lineColor);
+
+  int yTop = y;
+  int yBottom = y + roundNearest((double)height / 2.0);
+  
+  /* Draw the first section, from the given x to the mid point, sloping up */
+  int xStart = x;
+  int xEnd = x + roundNearest((double)width / 2.0);
+  drawIntronLine(data, xStart, yBottom, xEnd, yTop, data->exonViewRect);
+
+  /* Draw the second section, from the mid point to the end, sloping down */
+  xStart  = xEnd;
+  xEnd = x + width;
+  drawIntronLine(data, xStart, yTop, xEnd, yBottom, data->exonViewRect);
+}
+
+
+/* Draw the given exon/intron, if it is in range. Returns true if it was drawn */
+static gboolean drawExonIntron(const MSP *msp, 
+                               DrawData *data,
+                               const gboolean isSelected,
+                               const BlxSequence *blxSeq)
+{
+  int x = UNSET_INT, width = UNSET_INT;
+  
+  gboolean drawn = calculateExonIntronDimensions(msp, data->bc, data->displayRange, 
+                                                 data->exonViewRect, &x, &width);
+
+  if (drawn)
+    {
+      if (mspIsBoxFeature(msp))
+	{
+	  drawExon(msp, data, blxSeq, isSelected, x, data->y, width, data->height);
+	}
+      else if (mspIsIntron(msp))
+	{
+	  drawIntron(msp, data, blxSeq, isSelected, x, data->y, width, data->height);
+	}
+    }
+  
+  return drawn;
+}
+
+
+/* Draw the msps in the given sequence, if they are exons/introns. Use the color
+ * specified in the user data */
+static void drawExonIntronItem(gpointer listItemData, gpointer data)
+{
+  const BlxSequence *seq = (const BlxSequence*)listItemData;
+  DrawData *drawData = (DrawData*)data;
+
+  const gboolean isSelected = blxWindowIsSeqSelected(drawData->blxWindow, seq);
+  SequenceGroup *group = drawData->bc->getFirstSequenceGroup(seq);
+  gboolean seqDrawn = FALSE;
+  
+  if (!drawData->normalOnly || (!isSelected && !group))
+    {
+      /* Loop through all msps in this sequence */
+      GList *mspListItem = seq->mspList;
+  
+      for ( ; mspListItem; mspListItem = mspListItem->next)
+	{
+	  MSP *msp = (MSP*)(mspListItem->data);
+      
+          if (showMspInExonView(msp, drawData->strand, drawData->bc))
+	    {
+	      seqDrawn |= drawExonIntron(msp, drawData, isSelected, seq);
+	    }
+	}
+    }
+  
+  /* If the view is expanded, increase the y-coord for the next sequence */
+  if (seqDrawn && drawData->expanded)
+    {
+      drawData->y += drawData->height + drawData->yPad;
+    }
+}
+
+
+/* Draw the exon view */
+static void drawExonView(GtkWidget *exonView, GdkDrawable *drawable)
+{
+  GtkWidget *blxWindow = exonViewGetBlxWindow(exonView);
+  BlxContext *bc = blxWindowGetContext(blxWindow);
+  
+  ExonViewProperties *properties = exonViewGetProperties(exonView);
+  const IntRange* const displayRange = bigPictureGetDisplayRange(properties->bigPicture);
+
+  /* First, highlight any assembly gaps */
+  /* Get the display range in dna coords */
+  IntRange bpRange;
+  convertDisplayRangeToDnaRange(displayRange, bc->seqType, bc->numFrames, bc->displayRev, &bc->refSeqRange, &bpRange);
+  
+  GdkColor *gapColor = getGdkColor(BLXCOLOR_ASSEMBLY_GAP, bc->defaultColors, FALSE, bc->usePrintColors);
+  drawAssemblyGaps(exonView, drawable, gapColor, bc->displayRev, &properties->exonViewRect, &bpRange, bc->featureLists[BLXMSP_GAP]);
+  
+  /* Set a clip rectangle for drawing the exons and introns (because they are drawn "over the
+   * edges" to make sure intron lines have the correct slope etc.) */
+  GdkGC *gc = gdk_gc_new(drawable);
+  
+  gdk_gc_set_clip_origin(gc, 0, 0);
+  gdk_gc_set_clip_rectangle(gc, &properties->exonViewRect);
+  
+  /* Draw the exons and introns. Since we could have a lot of them in the loop, extract all the
+   * info we need now and pass it around so we don't have to look for this stuff each time. */
+  
+  DrawData drawData = {
+    drawable,
+    gc,
+    &properties->exonViewRect,
+    blxWindow,
+    bc,
+    properties->currentStrand,
+    displayRange,
+    &bc->refSeqRange,
+    bc->displayRev,
+    bc->numFrames,
+    bc->seqType,
+    properties->expanded,
+    FALSE,
+    properties->yPad,
+    properties->exonViewRect.y,
+    properties->exonHeight
+  };
+  
+  /* If the view is compressed (i.e. exons will overlap each other), then
+   * only draw "normal" MSPs the first time round, and draw grouped/selected
+   * MSPs afterwards, so that they appear on top. If the view is expanded, 
+   * we can draw them all in a single loop, because they will not overlap. */
+  drawData.normalOnly = !properties->expanded;
+  
+  /* Loop through all sequences, drawing all msps that are exons/introns */
+  GList *seqList = blxWindowGetAllMatchSeqs(blxWindow);
+  g_list_foreach(seqList, drawExonIntronItem, &drawData);
+
+  if (!properties->expanded)
+    {
+      drawData.normalOnly = FALSE;
+  
+      /* Draw all selected msps */
+      g_list_foreach(bc->selectedSeqs, drawExonIntronItem, &drawData);
+      
+      /* Increment the y value when finished, because we calculate the view height based on this */
+      drawData.y += drawData.height + drawData.yPad;
+    }
+
+  /* Set the height based on the height of the exons that were actually drawn */
+  const int newHeight = drawData.y - properties->exonViewRect.y + drawData.yPad;
+  gtk_layout_set_size(GTK_LAYOUT(exonView), exonView->allocation.width, newHeight);
+  
+  g_object_unref(gc);
+}
+
+
+/* Prepare the exon view for printing (draws the transient hightlight box
+ * onto the cached drawable). */
+void exonViewPrepareForPrinting(GtkWidget *exonView)
+{
+  GdkDrawable *drawable = widgetGetDrawable(exonView);
+  
+  if (drawable)
+    {
+      ExonViewProperties *properties = exonViewGetProperties(exonView);
+      BlxContext *bc = bigPictureGetContext(properties->bigPicture);
+      
+      GdkColor *highlightBoxColor = getGdkColor(BLXCOLOR_HIGHLIGHT_BOX, bc->defaultColors, FALSE, bc->usePrintColors);
+      drawHighlightBox(drawable, &properties->highlightRect, HIGHLIGHT_BOX_MIN_WIDTH, highlightBoxColor);
+    }
+}
+
+
+
+/***********************************************************
+ *                       Properties                        *
+ ***********************************************************/
+
+static ExonViewProperties* exonViewGetProperties(GtkWidget *exonView)
+{
+  return exonView ? (ExonViewProperties*)(g_object_get_data(G_OBJECT(exonView), "ExonViewProperties")) : NULL;
+}
+
+static void onDestroyExonView(GtkWidget *exonView)
+{
+  ExonViewProperties *properties = exonViewGetProperties(exonView);
+  if (properties)
+    {
+      delete properties;
+      properties = NULL;
+      g_object_set_data(G_OBJECT(exonView), "ExonViewProperties", NULL);
+    }
+}
+
+static void exonViewCreateProperties(GtkWidget *exonView, 
+				     GtkWidget *bigPicture, 
+				     const BlxStrand currentStrand)
+{
+  if (exonView)
+    {
+      ExonViewProperties *properties = new ExonViewProperties;
+      
+      properties->widget              = exonView;
+      properties->bigPicture	      = bigPicture;
+      properties->currentStrand	      = currentStrand;
+      
+      properties->expanded	      = FALSE;
+      properties->yPad		      =	DEFAULT_EXON_YPAD;
+      
+      properties->exonViewRect.x      = 0;
+      properties->exonViewRect.y      = DEFAULT_EXON_YPAD;
+      properties->exonViewRect.width  = 0;
+      properties->exonViewRect.height = DEFAULT_EXON_HEIGHT;
+
+      properties->exonHeight          = DEFAULT_EXON_HEIGHT;
+      
+      gtk_widget_set_size_request(exonView, 0, DEFAULT_EXON_HEIGHT + (2 * DEFAULT_EXON_YPAD));
+
+      g_object_set_data(G_OBJECT(exonView), "ExonViewProperties", properties);
+      g_signal_connect(G_OBJECT(exonView), "destroy", G_CALLBACK(onDestroyExonView), NULL);
+    }
+}
+
+static GtkWidget* exonViewGetBigPicture(GtkWidget *exonView)
+{
+  ExonViewProperties *properties = exonViewGetProperties(exonView);
+  return properties->bigPicture;
+}
+
+static GtkWidget* exonViewGetBlxWindow(GtkWidget *exonView)
+{
+  GtkWidget *bigPicture = exonViewGetBigPicture(exonView);
+  return bigPictureGetBlxWindow(bigPicture);
+}
+
+gboolean exonViewGetExpanded(GtkWidget *exonView)
+{
+  ExonViewProperties *properties = exonViewGetProperties(exonView);
+  return properties->expanded;
+}
+
+/* Set whether the view is expanded or not */
+void exonViewSetExpanded(GtkWidget *exonView, const gboolean expanded)
+{
+  ExonViewProperties *properties = exonViewGetProperties(exonView);
+  properties->expanded = expanded;
+
+  if (expanded)
+    {
+      properties->yPad = DEFAULT_EXON_YPAD_BUMPED;
+      properties->exonHeight = DEFAULT_EXON_HEIGHT_BUMPED;
+    }
+  else 
+    {
+      properties->yPad = DEFAULT_EXON_YPAD;
+      properties->exonHeight = DEFAULT_EXON_HEIGHT;
+    }
+  
+  calculateExonViewHeight(exonView);
+  forceResize(properties->bigPicture);
+  bigPictureRedrawAll(properties->bigPicture);
+}
+
+
+/* Toggle whether the view is expanded or not */
+void exonViewToggleExpanded(GtkWidget *exonView)
+{
+  ExonViewProperties *properties = exonViewGetProperties(exonView);
+  exonViewSetExpanded(exonView, !properties->expanded);
+}
+
+
+/***********************************************************
+ *                       Events                            *
+ ***********************************************************/
+
+static gboolean onExposeExonView(GtkWidget *exonView, GdkEventExpose *event, gpointer data)
+{
+  GdkDrawable *drawable = widgetGetDrawable(exonView);
+  
+  if (!drawable)
+    {
+      /* Create a pixmap and draw the exon view onto it */
+      drawable = createBlankPixmap(exonView);
+      drawExonView(exonView, drawable);
+    }
+  
+  if (drawable)
+    {  
+      /* Push the pixmap onto the screen */
+      GdkDrawable *window = GTK_LAYOUT(exonView)->bin_window;
+      
+      GdkGC *gc = gdk_gc_new(window);
+      gdk_draw_drawable(window, gc, drawable, 0, 0, 0, 0, -1, -1);
+      g_object_unref(gc);
+      
+      /* Draw the highlight box on top of it */
+      ExonViewProperties *properties = exonViewGetProperties(exonView);
+      BigPictureProperties *bpProperties = bigPictureGetProperties(properties->bigPicture);
+      BlxContext *bc = blxWindowGetContext(bpProperties->blxWindow());
+      
+      GdkColor *highlightBoxColor = getGdkColor(BLXCOLOR_HIGHLIGHT_BOX, bc->defaultColors, FALSE, bc->usePrintColors);
+      drawHighlightBox(window, &properties->highlightRect, HIGHLIGHT_BOX_MIN_WIDTH, highlightBoxColor);
+
+      /* Draw the preview box too, if it is set */
+      bpProperties->drawPreviewBox(window, &properties->exonViewRect, &properties->highlightRect);
+    }
+  
+  return TRUE;
+}
+
+static void onSizeAllocateExonView(GtkWidget *exonView, GtkAllocation *allocation, gpointer data)
+{
+  DEBUG_ENTER("onSizeAllocateExonView");
+
+  calculateExonViewBorders(exonView);
+  
+  DEBUG_EXIT("onSizeAllocateExonView returning");
+}
+
+
+static gboolean onButtonPressExonView(GtkWidget *exonView, GdkEventButton *event, gpointer data)
+{
+  gboolean handled = FALSE;
+
+  if (event->button == 1) /* left button */
+    {
+      /* If we clicked on top of an exon, select that msp */
+      const gboolean ctrlModifier = (event->state & GDK_CONTROL_MASK) == GDK_CONTROL_MASK;
+      const gboolean shiftModifier = (event->state & GDK_SHIFT_MASK) == GDK_SHIFT_MASK;
+
+      handled = selectClickedExon(exonView, event, ctrlModifier, shiftModifier);
+    }
+  
+  ExonViewProperties *properties = exonViewGetProperties(exonView);
+
+  if (event->button == 2 ||
+      (event->button == 1 && !handled && 
+       (event->type == GDK_2BUTTON_PRESS || 
+        clickedInRect(event, &properties->highlightRect, HIGHLIGHT_BOX_MIN_WIDTH))))
+    {
+      /* Draw the preview box (draw it on the other big picture components as well) */
+      int x = event->x;
+      
+      if (event->button == 1 && event->type == GDK_BUTTON_PRESS)
+        x = properties->highlightRect.x + properties->highlightRect.width / 2;
+      
+      BigPictureProperties *bpProperties = bigPictureGetProperties(properties->bigPicture);
+      bpProperties->startPreviewBox(event->x, TRUE, x - event->x);
+      handled = TRUE;
+    }
+  
+  return handled;
+}
+
+
+static gboolean onButtonReleaseExonView(GtkWidget *exonView, GdkEventButton *event, gpointer data)
+{
+  if (event->button == 1 || event->button == 2) /* left or middle button */
+    {
+      ExonViewProperties *properties = exonViewGetProperties(exonView);
+      BigPictureProperties *bpProperties = bigPictureGetProperties(properties->bigPicture);
+      bpProperties->finishPreviewBox(event->x, &properties->exonViewRect, &properties->highlightRect);
+    }
+  
+  return TRUE;
+}
+
+
+static gboolean onMouseMoveExonView(GtkWidget *exonView, GdkEventMotion *event, gpointer data)
+{
+  if ((event->state & GDK_BUTTON1_MASK) || (event->state & GDK_BUTTON2_MASK)) /* left or middle button */
+    {
+      /* Draw a preview box at the mouse pointer location */
+      ExonViewProperties *properties = exonViewGetProperties(exonView);
+      BigPictureProperties *bpProperties = bigPictureGetProperties(properties->bigPicture);
+      bpProperties->startPreviewBox(event->x, FALSE, 0);
+    }
+  
+  return TRUE;
+}
+
+
+/* Implement custom scrolling for horizontal mouse wheel movements over the grid.
+ * This scrolls the position of the highlight box, i.e. it scrolls the display
+ * range in the detail view. */
+static gboolean onScrollExonView(GtkWidget *exonView, GdkEventScroll *event, gpointer data)
+{
+  gboolean handled = FALSE;
+  
+  switch (event->direction)
+    {
+      case GDK_SCROLL_LEFT:
+	{
+          scrollBigPictureLeftStep(exonViewGetBigPicture(exonView));
+	  handled = TRUE;
+	  break;
+	}
+	
+      case GDK_SCROLL_RIGHT:
+	{
+          scrollBigPictureRightStep(exonViewGetBigPicture(exonView));
+	  handled = TRUE;
+	  break;
+	}
+
+      default:
+	{
+	  handled = FALSE;
+	  break;
+	}
+    };
+  
+  return handled;
+}
+
+
+
+/***********************************************************
+ *                       Initialisation                    *
+ ***********************************************************/
+
+/* Create the part of the view that will show the exons */
+GtkWidget *createExonView(GtkWidget *bigPicture, const BlxStrand currentStrand)
+{
+  GtkWidget *exonView = gtk_layout_new(NULL, NULL);
+  gtk_widget_set_name(exonView, BIG_PICTURE_EXON_VIEW_NAME);
+
+  /* Connect signals */
+  gtk_widget_add_events(exonView, GDK_BUTTON_PRESS_MASK);
+  gtk_widget_add_events(exonView, GDK_BUTTON_RELEASE_MASK);
+  gtk_widget_add_events(exonView, GDK_POINTER_MOTION_MASK);
+  
+  g_signal_connect(G_OBJECT(exonView),	"expose-event",		G_CALLBACK(onExposeExonView),	      NULL);
+  g_signal_connect(G_OBJECT(exonView),	"size-allocate",	G_CALLBACK(onSizeAllocateExonView),   NULL);
+  g_signal_connect(G_OBJECT(exonView),	"button-press-event",   G_CALLBACK(onButtonPressExonView),    NULL);
+  g_signal_connect(G_OBJECT(exonView),	"button-release-event", G_CALLBACK(onButtonReleaseExonView),  NULL);
+  g_signal_connect(G_OBJECT(exonView),	"motion-notify-event",  G_CALLBACK(onMouseMoveExonView),      NULL);
+  g_signal_connect(G_OBJECT(exonView),  "scroll-event",	        G_CALLBACK(onScrollExonView),         NULL);
+
+  exonViewCreateProperties(exonView, bigPicture, currentStrand);
+
+  return exonView;
+}
diff --git a/blixemApp/exonview.hpp b/blixemApp/exonview.hpp
new file mode 100644
index 0000000..d8f225b
--- /dev/null
+++ b/blixemApp/exonview.hpp
@@ -0,0 +1,66 @@
+/*  File: exonview.h
+ *  Author: Gemma Barson, 2009-12-24
+ *  Copyright (c) 2009 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: A section of the big picture showing exons, introns and basic
+ *              (box-shaped) features for a particular strand of the reference
+ *              sequence. The naming is all based around exons but has been 
+ *              expanded to draw any box-shape feature.
+ *
+ *              Pending: It would be good to consolidate the Blixem and Dotter
+ *              exonview stuff - see the comment in seqtoolsExonView.h
+ *----------------------------------------------------------------------------
+ */
+
+#ifndef _exon_view_included_
+#define _exon_view_included_
+
+#include <gtk/gtk.h>
+#include <blixemApp/blixem_.hpp>
+
+#define BIG_PICTURE_EXON_VIEW_NAME		"BigPictureExonView"
+
+
+/* Public function declarations */
+GtkWidget*	createExonView(GtkWidget *bigPicture, const BlxStrand strand);
+
+void            exonViewPrepareForPrinting(GtkWidget *exonView);
+
+gboolean	exonViewGetExpanded(GtkWidget *exonView);
+void		exonViewSetExpanded(GtkWidget *exonView, const gboolean expanded);
+void		exonViewToggleExpanded(GtkWidget *exonView);
+
+void            callFuncOnAllBigPictureExonViews(GtkWidget *widget, gpointer data);
+void		calculateExonViewHeight(GtkWidget *exonView);
+void            calculateExonViewHighlightBoxBorders(GtkWidget *exonView);
+
+#endif /* _exon_view_included_ */
diff --git a/blixemApp/sequencecellrenderer.cpp b/blixemApp/sequencecellrenderer.cpp
new file mode 100755
index 0000000..9cf6a48
--- /dev/null
+++ b/blixemApp/sequencecellrenderer.cpp
@@ -0,0 +1,1679 @@
+/*  File: sequencecellrenderer.c
+ *  Author: Gemma Barson, 2009-10-15
+ *  Copyright (c) 2009 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: See sequencecellrenderer.h
+ *----------------------------------------------------------------------------
+ */
+
+#include <blixemApp/sequencecellrenderer.hpp>
+#include <blixemApp/blxcontext.hpp>
+#include <blixemApp/detailview.hpp>
+#include <blixemApp/detailviewtree.hpp>
+#include <blixemApp/blxwindow.hpp>
+#include <seqtoolsUtils/blxmsp.hpp>
+#include <seqtoolsUtils/utilities.hpp>
+#include <gtk/gtkcellrenderertext.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <math.h>
+#include <string.h>
+
+
+#define SEQUENCE_CELL_RENDERER_NAME	"SequenceCellRenderer"
+#define GAP_WIDTH_AS_FRACTION		0.375	/* multiplier used to get the width of the "gap" marker based on a fraction of char width */
+#define MIN_GAP_WIDTH			2
+
+typedef struct _RenderData
+  {
+    BlxContext *bc;
+    GdkRectangle *cell_area;
+    GdkWindow *window;
+    GtkStateType state;
+    GdkGC *gc;
+    const BlxStrand qStrand;
+    const int qFrame;
+    const int selectedBaseIdx;
+    IntRange *selectionRange;
+    gboolean seqSelected;
+    GList *selectedSeqs;
+    const int cellXPadding;
+    const int cellYPadding;
+    const gdouble charWidth;
+    const gdouble charHeight;
+    const IntRange* const displayRange;
+    const gboolean highlightDiffs;
+    GdkDrawable *drawable;
+    GtkWidget *blxWindow;
+    GdkColor *exonColor;
+    GdkColor *exonColorSelected;
+    GdkColor *cdsColor;
+    GdkColor *cdsColorSelected;
+    GdkColor *utrColor;
+    GdkColor *utrColorSelected;
+    GdkColor *crosshatchColor;
+    GdkColor *crosshatchColorSelected;
+    GdkColor *insertionColor;
+    GdkColor *insertionColorSelected;
+    GdkColor *matchColor;
+    GdkColor *matchColorSelected;
+    GdkColor *consColor;
+    GdkColor *consColorSelected;
+    GdkColor *mismatchColor;
+    GdkColor *mismatchColorSelected;
+    GdkColor *unalignedSeqColor;
+    GdkColor *unalignedSeqColorSelected;
+    GdkColor *exonBoundaryColorStart;
+    GdkColor *exonBoundaryColorEnd;
+    GdkColor *polyAColor;
+    GdkColor *polyAColorSelected;
+    GdkColor *clipMarkerColor;
+    int exonBoundaryWidth;
+    GdkLineStyle exonBoundaryStyle;
+    GdkLineStyle exonBoundaryStylePartial;
+    gboolean limitUnalignedBases;
+    int numUnalignedBases;
+  } RenderData;
+
+
+
+/* Properties */
+enum 
+{
+  PROP_0,
+  
+  PROP_TEXT,
+  PROP_MSP,
+  PROP_DATA
+};
+
+
+/* Some boring function declarations: GObject type system stuff */
+static void     sequence_cell_renderer_init       (SequenceCellRenderer      *cellrenderersequence);
+static void     sequence_cell_renderer_class_init (SequenceCellRendererClass *klass);
+static void     sequence_cell_renderer_finalize (GObject *gobject);
+
+static gboolean mspGetVisibleRange(MSP *msp, RenderData *data, IntRange *result);
+void		drawAllVisibleExonBoundaries(GtkWidget *tree, RenderData *data);
+
+static void mspDrawSequenceText(GtkWidget *tree,
+                                gchar *displayText, 
+                                const IntRange* const segmentRange,
+                                RenderData *data);
+
+
+static void segmentGetCoordsForBaseIdx(const int segmentIdx, 
+                                       const IntRange* const segmentRange,
+                                       RenderData *data,
+                                       int *x, 
+                                       int* y);
+
+
+/* These functions are the heart of our custom cell renderer: */
+static void     sequence_cell_renderer_get_size   (GtkCellRenderer            *cell,
+                                                          GtkWidget                  *widget,
+                                                          GdkRectangle               *cell_area,
+                                                          gint                       *x_offset,
+                                                          gint                       *y_offset,
+                                                          gint                       *width,
+                                                          gint                       *height);
+static void     sequence_cell_renderer_render     (GtkCellRenderer            *cell,
+                                                          GdkDrawable                *window,
+                                                          GtkWidget                  *tree,
+                                                          GdkRectangle               *background_area,
+                                                          GdkRectangle               *cell_area,
+                                                          GdkRectangle               *expose_area,
+                                                          GtkCellRendererState       flags);
+static void sequence_cell_renderer_get_property (GObject      *object,
+					 guint         param_id,
+					 GValue	      *value,
+					 GParamSpec   *pspec);
+static void sequence_cell_renderer_set_property (GObject      *object,
+					 guint         param_id,
+					 const GValue *value,
+					 GParamSpec   *pspec);
+
+static   gpointer parent_class;
+
+
+
+/***************************************************************************/
+
+/* Custom version of gtk_paint_layout that draws the same thing to two GdkDrawables */
+static void paintLayout2(GtkStyle *style,
+			 GdkDrawable *drawable1,
+			 GdkDrawable *drawable2,
+			 GtkStateType state_type,
+			 gboolean use_text,
+			 GdkRectangle *area,
+			 GtkWidget *widget,
+			 gchar *detail,
+			 gint x,
+			 gint y,
+			 PangoLayout *layout)
+{
+  if (drawable1)
+    gtk_paint_layout (style, drawable1, state_type, use_text, area, widget, detail, x, y, layout);
+  
+  if (drawable2)
+    gtk_paint_layout (style, drawable2, state_type, use_text, area, widget, detail, x, y, layout);
+}
+
+/* Custom version of gdk_draw_line that draws the same thing to two GdkDrawables */
+void drawLine2(GdkDrawable *drawable1,
+               GdkDrawable *drawable2,
+               GdkGC *gc,
+               gint x1,
+               gint y1,
+               gint x2,
+               gint y2)
+{
+  if (drawable1)
+    {
+//      cairo_t *cr = gdk_cairo_create(drawable1);
+//      cairo_set_line_width(cr, 0.5);
+//      cairo_move_to(cr, x1 + 0.5, y1);
+//      cairo_line_to(cr, x2 + 0.5, y2);
+//      cairo_stroke(cr); 
+//      cairo_destroy(cr);
+      gdk_draw_line(drawable1, gc, x1, y1, x2, y2);
+    }
+  
+  if (drawable2)
+    {
+//      cairo_t *cr = gdk_cairo_create(drawable2);
+//      cairo_set_line_width(cr, 0.5);
+//      cairo_move_to(cr, x1 + 0.5, y1);
+//      cairo_line_to(cr, x2 + 0.5, y2);
+//      cairo_stroke(cr); 
+//      cairo_destroy(cr);
+      
+      gdk_draw_line(drawable2, gc, x1, y1, x2, y2);
+    }
+}
+
+/* Custom version of gdk_draw_rectangle that draws the same thing to two GdkDrawables */
+void drawRectangle2(GdkDrawable *drawable1,
+		    GdkDrawable *drawable2,
+		    GdkGC *gc,
+		    gboolean filled,
+		    gint x,
+		    gint y,
+		    gint width,
+		    gint height)
+{
+//  cairo_t *cr = gdk_cairo_create(drawable1);
+//  cairo_rectangle(cr, x, y, width, height);
+//  cairo_fill(cr);
+//  cairo_destroy(cr);
+  
+  if (drawable1)
+    {
+      gdk_draw_rectangle(drawable1, gc, filled, x, y, width, height);
+    }
+  
+  if (drawable2)
+    {
+      gdk_draw_rectangle(drawable2, gc, filled, x, y, width, height);
+    }
+}
+
+
+/* Fill a rectangle with crosshatch lines */
+void drawCrosshatchRectangle(GdkDrawable *drawable1,
+                             GdkDrawable *drawable2,
+                             GdkGC *gc,
+                             gint x,
+                             gint y,
+                             gint width,
+                             gint height)
+{
+  /* Draw diagonal lines from top-right to bottom-left. */
+  drawLine2(drawable1, drawable2, gc, x + width, y, x, y + height);
+  drawLine2(drawable1, drawable2, gc, x + width / 2, y, x, y + height / 2);
+  drawLine2(drawable1, drawable2, gc, x + width, y + height / 2, x + width / 2, y + height);
+}
+
+
+/***************************************************************************
+ *
+ *  sequence_cell_renderer_get_type: here we register our type with
+ *                                          the GObject type system if we
+ *                                          haven't done so yet. Everything
+ *                                          else is done in the callbacks.
+ *
+ ***************************************************************************/
+
+GType
+sequence_cell_renderer_get_type (void)
+{
+  static GType cell_sequence_type = 0;
+  
+  if (cell_sequence_type == 0)
+    {
+      static const GTypeInfo cell_sequence_info =
+      {
+	sizeof (SequenceCellRendererClass),
+	NULL,                                                     /* base_init */
+	NULL,                                                     /* base_finalize */
+	(GClassInitFunc) sequence_cell_renderer_class_init,
+	NULL,                                                     /* class_finalize */
+	NULL,                                                     /* class_data */
+	sizeof (SequenceCellRenderer),
+	0,                                                        /* n_preallocs */
+	(GInstanceInitFunc) sequence_cell_renderer_init,
+      };
+      
+      /* Derive from GtkCellRenderer */
+      cell_sequence_type = g_type_register_static (GTK_TYPE_CELL_RENDERER,
+						   "SequenceCellRenderer",
+						   &cell_sequence_info,
+                                                   (GTypeFlags)0);
+    }
+  
+  return cell_sequence_type;
+}
+
+
+/***************************************************************************
+ *
+ *  sequence_cell_renderer_init: set some default properties of the
+ *                                      parent (GtkCellRendererText).
+ *
+ ***************************************************************************/
+
+static void
+sequence_cell_renderer_init (SequenceCellRenderer *cellrenderersequence)
+{
+  GTK_CELL_RENDERER(cellrenderersequence)->mode = GTK_CELL_RENDERER_MODE_INERT;
+  GTK_CELL_RENDERER(cellrenderersequence)->xalign = 0;
+  GTK_CELL_RENDERER(cellrenderersequence)->yalign = 0;
+  GTK_CELL_RENDERER(cellrenderersequence)->xpad = 0;
+  GTK_CELL_RENDERER(cellrenderersequence)->ypad = 0;
+
+  cellrenderersequence->data = NULL;
+  cellrenderersequence->mspGList = NULL;
+  cellrenderersequence->text = NULL;
+}
+
+
+/***************************************************************************
+ *
+ *  sequence_cell_renderer_class_init:
+ *
+ *  If you want cells that can be activated on their own (ie. not
+ *  just the whole row selected) or cells that are editable, you
+ *  will need to override 'activate' and 'start_editing'.
+ *
+ ***************************************************************************/
+
+static void
+sequence_cell_renderer_class_init (SequenceCellRendererClass *klass)
+{
+  GtkCellRendererClass *cell_class   = GTK_CELL_RENDERER_CLASS(klass);
+  GObjectClass         *object_class = G_OBJECT_CLASS(klass);
+  
+  parent_class           = g_type_class_peek_parent (klass);
+  object_class->finalize = sequence_cell_renderer_finalize;
+
+  /* Override the two crucial functions that are the heart
+   *   of a cell renderer in the parent class */
+  cell_class->get_size = sequence_cell_renderer_get_size;
+  cell_class->render   = sequence_cell_renderer_render;
+  
+  /* Override functions to get/set properties */
+  object_class->get_property = sequence_cell_renderer_get_property;
+  object_class->set_property = sequence_cell_renderer_set_property;
+  
+  g_object_class_install_property (object_class,
+                                   PROP_DATA,
+                                   g_param_spec_pointer (RENDERER_DATA_PROPERTY,
+                                                         "Data",
+                                                         "Pointer to the msp",
+                                                         G_PARAM_WRITABLE));
+
+  g_object_class_install_property (object_class,
+                                   PROP_MSP,
+                                   g_param_spec_pointer (RENDERER_SEQUENCE_PROPERTY,
+                                                         "Sequence",
+                                                         "Pointer to an msp whose sequence to display",
+                                                         G_PARAM_WRITABLE));
+
+  g_object_class_install_property (object_class,
+                                   PROP_TEXT,
+                                   g_param_spec_string (RENDERER_TEXT_PROPERTY,
+                                                        "Text",
+                                                        "Text field",
+							NULL,
+                                                        G_PARAM_WRITABLE));
+}
+
+
+/***************************************************************************
+ *
+ *  sequence_cell_renderer_finalize: free any resources here
+ *
+ ***************************************************************************/
+
+static void
+sequence_cell_renderer_finalize (GObject *object)
+{
+  /*
+   SequenceCellRenderer *cellrenderersequence = SEQUENCE_CELL_RENDERER(object);
+   */
+  
+  /* Free any dynamically allocated resources here */
+  
+  (* G_OBJECT_CLASS (parent_class)->finalize) (object);
+}
+
+
+/***************************************************************************
+ *
+ *  sequence_cell_renderer_new: return a new cell renderer instance
+ *
+ ***************************************************************************/
+
+GtkCellRenderer *
+sequence_cell_renderer_new (void)
+{
+  return (GtkCellRenderer*)g_object_new(SEQUENCE_CELL_RENDERER_TYPE, NULL);
+}
+
+
+/***************************************************************************
+ *
+ *  sequence_cell_renderer_set_property: 
+ *
+ ***************************************************************************/
+
+static void setAllPropertiesNull(SequenceCellRenderer *renderer)
+{
+  if (renderer->text)
+    g_free(renderer->text);
+
+  renderer->text = NULL;
+  renderer->mspGList = NULL;
+}
+
+static void
+sequence_cell_renderer_set_property (GObject      *object,
+				     guint         param_id,
+				     const GValue *value,
+				     GParamSpec   *pspec)
+{
+  SequenceCellRenderer *renderer = SEQUENCE_CELL_RENDERER(object);
+  
+  switch (param_id)
+  {
+    case PROP_DATA:
+      /* Additional data. DON'T reset other properties. */
+      renderer->data = (GList*)g_value_get_pointer(value);
+      break;
+      
+    case PROP_MSP:
+      /* We set either the msp data or the text data, not both;
+       * so make sure nothing else is set */
+      setAllPropertiesNull(renderer);
+      renderer->mspGList = (GList*)g_value_get_pointer(value);
+      break;
+
+    case PROP_TEXT:
+      /* We set either the msp data or the text data, not both;
+       * so make sure nothing else is set */
+      setAllPropertiesNull(renderer);
+      renderer->text = g_strdup(g_value_get_string(value));
+      break;
+      
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+      break;
+  };
+}
+
+
+/***************************************************************************
+ *
+ *  sequence_cell_renderer_get_property: 
+ *
+ ***************************************************************************/
+
+static void
+sequence_cell_renderer_get_property (GObject      *object,
+					 guint         param_id,
+					 GValue	      *value,
+					 GParamSpec   *pspec)
+{
+  SequenceCellRenderer *renderer = SEQUENCE_CELL_RENDERER(object);
+  switch (param_id)
+  {
+    case PROP_DATA:
+      g_value_set_pointer(value, renderer->data);
+      break;
+
+    case PROP_MSP:
+      g_value_set_pointer(value, renderer->mspGList);
+      break;
+      
+    case PROP_TEXT:
+      g_value_set_string(value, renderer->text);
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+      break;
+  };
+}
+
+
+static void
+get_size (GtkCellRenderer *cell,
+	  GtkWidget       *widget,
+	  GdkRectangle    *cell_area,
+	  gint            *x_offset,
+	  gint            *y_offset,
+	  gint            *width,
+	  gint            *height)
+{
+  if (height)
+    *height = cell->height;
+  
+  if (width)
+    *width = cell->width;
+  
+  if (cell_area)
+    cell_area->height = cell->height;
+}
+
+
+/* Render function for a cell that contains simple text */
+static void rendererDrawSimpleText(SequenceCellRenderer *renderer, 
+                                   GtkWidget *tree,
+                                   GdkWindow *window, 
+                                   GtkStateType state, 
+                                   GdkRectangle *cell_area)
+{
+  gchar *displayText = renderer->text;
+  PangoLayout *layout = gtk_widget_create_pango_layout(tree, displayText);
+
+  PangoFontDescription *font_desc = pango_font_description_copy(tree->style->font_desc);
+  pango_layout_set_font_description(layout, font_desc);
+  pango_font_description_free(font_desc);
+
+  paintLayout2(tree->style,
+	       window,
+	       widgetGetDrawable(tree),
+	       state,
+	       TRUE,
+	       NULL,
+	       tree,
+	       NULL, 
+	       cell_area->x - treeGetCellXPadding(tree),
+	       cell_area->y - treeGetCellYPadding(tree),
+	       layout);
+  
+  g_object_unref(layout);
+}
+
+
+/* The given renderer is an MSP. This function checks if there is a base index
+ * selected and, if so, colors the background for that base with the given color. */
+static void highlightSelectedBase(const int selectedBaseIdx,
+                                  const GdkColor *highlightColor,
+                                  RenderData *data)
+{
+  if (selectedBaseIdx != UNSET_INT && valueWithinRange(selectedBaseIdx, data->displayRange))
+    {
+      /* Convert the display-range index to a 0-based index for the section of sequence displayed */
+      const int segmentIdx = selectedBaseIdx - data->displayRange->min();
+      
+      int x, y;
+      segmentGetCoordsForBaseIdx(segmentIdx, data->displayRange, data, &x, &y);
+
+      gdk_gc_set_foreground(data->gc, highlightColor);
+      drawRectangle2(data->window, data->drawable, data->gc, TRUE, x, y, roundNearest(data->charWidth), roundNearest(data->charHeight));
+    }
+}
+
+
+/* Returns true if the min coord (or max coord, if 'start' is false) is a
+ * partial codon, i.e. if it does not start at base 1 (if start) or end at
+ * base 3 (if end)... or vice versa if the display is reversed */
+static gboolean exonCoordIsPartialCodon(const MSP* const msp, const gboolean start, RenderData *data, int *displayIdxOut)
+{
+  /* To be a complete codon, if we're at the start the the coord must be base 1 
+   * or if we're at the end then coord must be base 3 */
+  const int reqdBase = (start != data->bc->displayRev) ? 1 : data->bc->numFrames;
+  
+  /* Calculate the actual base number of the start/end coord */
+  const int dnaIdx = start ? msp->qRange.min() : msp->qRange.max();
+  
+  int baseNum = UNSET_INT;
+  const int frame = mspGetRefFrame(msp, data->bc->seqType);
+  
+  const int displayIdx = convertDnaIdxToDisplayIdx(dnaIdx, data->bc->seqType, frame, 
+    data->bc->numFrames, data->bc->displayRev, &data->bc->refSeqRange, &baseNum);
+  
+  if (displayIdxOut)
+    *displayIdxOut = displayIdx;
+
+  gboolean isPartial = (baseNum != reqdBase);
+  return isPartial;
+}
+
+
+static gboolean coordIsSelected(RenderData *data, const int coord)
+{
+  gboolean result = FALSE;
+  
+  gboolean coordSelected = FALSE;
+
+  if (data->selectionRange && valueWithinRange(coord, data->selectionRange))
+    coordSelected = TRUE;
+
+  if (data->selectionRange && data->selectionRange->length() > 1)
+    {
+      /* There is a range of selected coords. We highlight the base if it's in this range.
+       * We only highlight selection-range coords for the currently selected sequence(s), unless 
+       * there are no selected sequences, in which case highlight all rows. */
+      if (data->seqSelected || !data->selectedSeqs || g_list_length(data->selectedSeqs) < 1)
+        result = coordSelected;
+      else
+        result = FALSE;
+    }
+  else
+    {
+      /* We highlight the base if the coord is selected OR the sequence is selected but not if
+       * both are true, i.e. we invert the highlight colour if both the coord and the sequence
+       * are selected. */
+      result = (coordSelected != data->seqSelected);
+    }
+
+  return result;
+}
+
+
+/* Highlight the start (min) peptide of the given msp if it is a partial codon, i.e. if it
+ * does not start at base 1 (or end at base 3, if the display is reversed). OR highlight the end
+ * (max) codon if 'start' is FALSE. The x/y coords give the top left corner of the peptide. */
+static void exonHighlightPartialCodons(const MSP* const msp, 
+                                       const gboolean start, 
+                                       const int x, 
+                                       const int y, 
+                                       RenderData *data)
+{
+  int displayIdx = UNSET_INT;
+  gboolean isPartial = exonCoordIsPartialCodon(msp, start, data, &displayIdx);
+  
+  if (isPartial && valueWithinRange(displayIdx, data->displayRange)) 
+    {
+      /* It's not a complete codon, so highlight this base */
+      const gboolean isSelected = coordIsSelected(data, displayIdx);
+
+      GdkColor *color = (isSelected ? data->crosshatchColorSelected : data->crosshatchColor);
+      gdk_gc_set_foreground(data->gc, color);
+
+      drawCrosshatchRectangle(data->window, data->drawable, data->gc, x, y, data->charWidth, data->charHeight);
+    }
+}
+
+
+
+/* The given renderer is an MSP that is drawn as a simple box. This function draws the feature
+ * or part of the feature that is in view, if it is within the current display range. */
+static void drawBoxFeature(SequenceCellRenderer *renderer,
+                           MSP *msp,
+                           GtkWidget *tree,
+                           RenderData *data)
+{
+  if (mspLayerIsVisible(msp))
+    {
+      IntRange segmentRange;
+      
+      if (!mspGetVisibleRange(msp, data, &segmentRange))
+        {
+          return;
+        }
+
+      const int segmentLen = segmentRange.length();
+
+      int x, y;
+      segmentGetCoordsForBaseIdx(0, &segmentRange, data, &x, &y);
+      const int width = ceil((gdouble)segmentLen * data->charWidth);
+      const int height = roundNearest(data->charHeight) - 1;
+
+      /* Just draw one big rectangle the same color for the whole thing. Color depends if row
+       * is selected, but note we don't highlight the whole row if a coord range is also selected. */
+      gboolean fill = TRUE;
+      const gboolean highlightExon = data->seqSelected && (!data->selectionRange || data->selectionRange->length() < 2);
+      const GdkColor *color = mspGetColor(msp, 
+                                          data->bc->defaultColors, 
+                                          BLXCOLOR_BACKGROUND, 
+                                          msp->sSequence, 
+                                          highlightExon, 
+                                          data->bc->usePrintColors, 
+                                          fill,
+                                          BLXCOLOR_EXON_FILL, BLXCOLOR_EXON_LINE,
+                                          BLXCOLOR_CDS_FILL, BLXCOLOR_CDS_LINE,
+                                          BLXCOLOR_UTR_FILL, BLXCOLOR_UTR_LINE,
+                                          FALSE);
+
+      gdk_gc_set_foreground(data->gc, color);
+      drawRectangle2(data->window, data->drawable, data->gc, fill, x, y, width, height);
+      
+      /* If a base is selected, highlight it. Its color depends on whether it the base is within the exon range or not. */
+      if (data->selectionRange)
+        {
+          int i = 0;
+          for (i = data->selectionRange->min(); i <= data->selectionRange->max(); ++i)
+            {
+              if (i != UNSET_INT && valueWithinRange(i, &segmentRange))
+                {
+                  /* Call coordIsSelected to determine highlighting of this base */
+                  const gboolean highlightBase = coordIsSelected(data, i);
+                  color = mspGetColor(msp, data->bc->defaultColors, BLXCOLOR_BACKGROUND, msp->sSequence, highlightBase, data->bc->usePrintColors, TRUE, BLXCOLOR_EXON_FILL, BLXCOLOR_EXON_LINE, BLXCOLOR_CDS_FILL, BLXCOLOR_CDS_LINE, BLXCOLOR_UTR_FILL, BLXCOLOR_UTR_LINE);
+                  highlightSelectedBase(i, color, data);
+                }
+            }
+        }
+
+      /* And now draw the outline (do this after the base highlight because otherwise that will
+       * erase the boundary) */
+      fill = FALSE;
+      color = mspGetColor(msp, data->bc->defaultColors, BLXCOLOR_BACKGROUND, msp->sSequence, data->seqSelected, data->bc->usePrintColors, fill, BLXCOLOR_EXON_FILL, BLXCOLOR_EXON_LINE, BLXCOLOR_CDS_FILL, BLXCOLOR_CDS_LINE, BLXCOLOR_UTR_FILL, BLXCOLOR_UTR_LINE);
+      gdk_gc_set_foreground(data->gc, color);
+      drawRectangle2(data->window, data->drawable, data->gc, fill, x, y, width, height);
+      
+      /* If the start or end index is not a full codon, highlight it in a different color */
+      exonHighlightPartialCodons(msp, !data->bc->displayRev, x, y, data);
+      exonHighlightPartialCodons(msp, data->bc->displayRev, x + width - data->charWidth, y, data);
+    }
+} 
+
+
+/* Get the base from the given sequence at the given index. Converts to
+ * upper or lower case as appropriate for the sequence type. The given index is
+ * assumed to be 1-based. If the given BlxSequence has null sequence data, then
+ * this function returns a padding character instead */
+static char blxSeqGetMatchSeqBase(BlxSequence *blxSeq, const int sIdx, const BlxSeqType seqType)
+{
+  char result = SEQUENCE_CHAR_PAD;
+  
+  const char *sequence = blxSequenceGetSequence(blxSeq);
+  
+  if (sequence && sIdx <= (int)strlen(sequence))
+    {
+      result = sequence[sIdx - 1];
+      result = convertBaseToCorrectCase(result, seqType);
+    }
+
+  return result;
+}
+
+
+/* Color in the background of a particular base in the given match sequence. Returns
+ * the calculated index into the match sequence (for effiency, so that we don't have to
+ * recalculate it later on). Returns the equivalent index in the subject sequence, or 
+ * UNSET_INT if there is none. */
+static void mspDrawBaseBg(MSP *msp,
+                          const int segmentIdx, 
+                          const IntRange* const segmentRange,
+                          char *refSeqSegment, 
+                          RenderData *data,
+                          const int x,
+                          const int y,
+                          gchar *displayText,
+                          int *sIdx,
+                          int *qIdx)
+{
+  char sBase = '\0';
+  GdkColor *baseBgColor = NULL;
+  
+  /* From the segment index, find the display index and the ref seq coord */
+  const int displayIdx = segmentRange->min() + segmentIdx;
+  *qIdx = convertDisplayIdxToDnaIdx(displayIdx, data->bc->seqType, data->qFrame, 1, data->bc->numFrames, data->bc->displayRev, &data->bc->refSeqRange);
+  
+  /* Find the match-sequence coord at this ref-seq coord */
+  gboolean found_sIdx = mspGetMatchCoord(msp, *qIdx, data->seqSelected, data->numUnalignedBases, data->bc, sIdx);
+  
+  /* Highlight the base if its base index is selected, or if its sequence is selected.
+   * (If it is selected in both, show it in the normal color) */
+  gboolean selected = coordIsSelected(data, displayIdx);
+
+  if (!valueWithinRange(*qIdx, &msp->qRange))
+    {
+      /* We're outside the alignment range. There might still be a base to display if
+       * we're displaying unaligned parts of the match sequence or polyA tails; otherwise, we 
+       * show nothing. */
+      if (found_sIdx)
+	{
+          sBase = blxSeqGetMatchSeqBase(msp->sSequence, *sIdx, data->bc->seqType);
+
+          if (data->bc->flags[BLXFLAG_SHOW_POLYA_SITE] && 
+              (!data->bc->flags[BLXFLAG_SHOW_POLYA_SITE_SELECTED] || data->seqSelected) &&
+              mspCoordInPolyATail(*qIdx, msp))
+            {
+              baseBgColor = selected ? data->polyAColorSelected : data->polyAColor;
+            }
+          else
+            {
+              baseBgColor = selected ? data->unalignedSeqColorSelected : data->unalignedSeqColor;
+            }
+	}
+    }
+  else if (!found_sIdx)
+    {
+      /* We're inside the alignment range but there is no base to display: we must be in a deletion. */
+      sBase = SEQUENCE_CHAR_DELETION;
+      baseBgColor = selected ? data->mismatchColorSelected : data->mismatchColor;
+    }
+  else
+    {
+      /* There is a base in the match sequence. See if it matches the ref sequence */
+      sBase = blxSeqGetMatchSeqBase(msp->sSequence, *sIdx, data->bc->seqType);
+      char qBase = refSeqSegment[segmentIdx];
+
+      if (tolower(sBase) == tolower(qBase))
+	{
+	  /* Match */
+	  baseBgColor = selected ? data->matchColorSelected : data->matchColor;
+	  
+	  /* If we're highlighting differences, don't show this base (show a dash instead) */
+	  if (data->highlightDiffs)
+	    {
+	      sBase = SEQUENCE_CHAR_BLANK;
+	    }
+	}
+      else if (data->bc->blastMode != BLXMODE_BLASTN && PAM120[aa_atob[(unsigned int)qBase]-1 ][aa_atob[(unsigned int)sBase]-1 ] > 0)
+	{
+	  /* 'Conserved' match (i.e. similar amino acid) */
+	  baseBgColor = selected ? data->consColorSelected : data->consColor;
+	}
+      else
+	{
+	  /* Mismatch */
+	  baseBgColor = selected ? data->mismatchColorSelected : data->mismatchColor;
+	}
+    }
+
+  /* Draw the background color */
+  if (baseBgColor)
+    {
+      gdk_gc_set_foreground(data->gc, baseBgColor);
+      drawRectangle2(data->window, data->drawable, data->gc, TRUE, x, y, ceil(data->charWidth), roundNearest(data->charHeight));
+    }
+  
+  if (sBase != '\0')
+    {
+      /* Add this character into the display text */
+      displayText[segmentIdx] = sBase;
+    }
+  else
+    {
+      displayText[segmentIdx] = ' ';
+    }
+}
+
+
+static PangoLayout* pangoGetLayoutFromText(gchar *displayText, GtkWidget *tree, PangoFontDescription *font_desc)
+{
+  PangoLayout *layout = gtk_widget_create_pango_layout(tree, displayText);
+  pango_layout_set_font_description(layout, font_desc);
+  return layout;
+}
+
+
+/* Return the x/y coords for the top-left corner where we want to draw the base
+ * with the given index in the segment, where the segment starts at the given 
+ * index in the display. */
+static void segmentGetCoordsForBaseIdx(const int segmentIdx, 
+                                       const IntRange* const segmentRange,
+                                       RenderData *data,
+                                       int *x, 
+                                       int* y)
+{
+  /* Find the start of the segment with respect to the display range */
+  const int startPos = segmentRange->min() - data->displayRange->min();
+  
+  /* Find the position of the character within the segment */
+  int charIdx = startPos + segmentIdx;
+
+  /* Calculate the coords */
+  *x = data->cell_area->x - data->cellXPadding + (int)((gdouble)charIdx * data->charWidth);
+  *y = data->cell_area->y - data->cellYPadding;
+}
+
+
+/* Draw the start/end boundaries for the given MSP if it is an exon whose start/end
+ * coords are within the current display range */
+static gboolean exonDrawBoundary(const MSP *msp, RenderData *rd)
+{
+  if (msp && msp->type == BLXMSP_EXON)
+    {
+      /* Get the msp's start/end in terms of the display coords */
+      const IntRange* const mspRange = mspGetDisplayRange(msp);
+      
+      if (valueWithinRange(mspRange->min(), rd->displayRange))
+	{
+	  /* Draw the lower index. The color and line style depend on whether it's the start or end index. */
+	  GdkColor *color = rd->bc->displayRev ? rd->exonBoundaryColorEnd : rd->exonBoundaryColorStart;
+	  gdk_gc_set_foreground(rd->gc, color);
+	  
+          /* Check if it's the boundary of a partial codon - we'll draw a dotted
+           * line if it is, to indicate that the boundary is not exactly at this position. */
+          const gboolean isPartial = exonCoordIsPartialCodon(msp, !rd->bc->displayRev, rd, NULL);
+	  GdkLineStyle lineStyle = isPartial ? rd->exonBoundaryStylePartial : rd->exonBoundaryStyle;
+          gdk_gc_set_line_attributes(rd->gc, rd->exonBoundaryWidth, lineStyle, GDK_CAP_BUTT, GDK_JOIN_MITER);
+
+          const int idx = mspRange->min() - rd->displayRange->min();
+          
+	  int x = UNSET_INT, y = UNSET_INT;
+	  segmentGetCoordsForBaseIdx(idx, rd->displayRange, rd, &x, &y);
+          
+          drawLine2(rd->window, rd->drawable, rd->gc, x, y, x, y + roundNearest(rd->charHeight));
+	}
+      
+      if (valueWithinRange(mspRange->max(), rd->displayRange))
+	{
+	  /* Draw the upper index. The color and line style depend on whether it's the start or end index. */
+	  GdkColor *color = rd->bc->displayRev ? rd->exonBoundaryColorStart : rd->exonBoundaryColorEnd;
+	  gdk_gc_set_foreground(rd->gc, color);
+	  
+          /* Check if it's the boundary of a partial codon - we'll draw a dotted
+           * line if it is, to indicate that the boundary is not exactly at this position. */
+          const gboolean isPartial = exonCoordIsPartialCodon(msp, rd->bc->displayRev, rd, NULL);
+	  GdkLineStyle lineStyle = isPartial ? rd->exonBoundaryStylePartial : rd->exonBoundaryStyle;
+          gdk_gc_set_line_attributes(rd->gc, rd->exonBoundaryWidth, lineStyle, GDK_CAP_BUTT, GDK_JOIN_MITER);
+	  
+	  const int idx = mspRange->max() + 1 - rd->displayRange->min();
+
+	  int x = UNSET_INT, y = UNSET_INT;
+	  segmentGetCoordsForBaseIdx(idx, rd->displayRange, rd, &x, &y);
+
+          drawLine2(rd->window, rd->drawable, rd->gc, x, y, x, y + roundNearest(rd->charHeight));
+	}
+    }
+  
+  return FALSE;
+}
+
+
+/* Draw the boundaries of all exons in the given tree that are within the current
+ * display range */
+void drawAllVisibleExonBoundaries(GtkWidget *tree, RenderData *data)
+{
+  /* Loop through all MSPs. */
+  const MSP *msp = blxWindowGetMspList(data->blxWindow);
+
+  for ( ; msp; msp = msp->next)
+    {
+      if (mspIsExon(msp) && mspGetRefFrame(msp, data->bc->seqType) == data->qFrame && mspGetRefStrand(msp) == data->qStrand)
+	{
+	  exonDrawBoundary(msp, data);
+	}
+    }
+}
+
+
+/* Draw a vertical yellow line to indicate an insertion between two bases in the match sequence */
+static void mspDrawInsertionMarker(int sIdx, 
+                                   int lastFoundSIdx, 
+                                   int qIdx, 
+                                   int lastFoundQIdx, 
+                                   int x, 
+                                   int y, 
+                                   RenderData *data)
+{
+  if (sIdx != UNSET_INT && lastFoundSIdx != UNSET_INT && abs(sIdx - lastFoundSIdx) > 1)
+    {
+      /* There is a gap between this index and the previous one (in a left-to-right sense),
+       * so draw an insertion marker between these two bases (at the position given by x and y). */
+      
+      /* This is not very sophisticated - just uses a fudge factor to find a suitable width and
+       * draws it half over the current base and half over the previous one. */
+      int gapWidth = roundNearest(data->charWidth * GAP_WIDTH_AS_FRACTION);
+
+      if (gapWidth < MIN_GAP_WIDTH)
+	{
+	  gapWidth = MIN_GAP_WIDTH;
+        }
+
+      /* No selections to worry about. Draw the whole thing in the normal color */
+      gdk_gc_set_foreground(data->gc, data->insertionColor);
+      drawRectangle2(data->window, data->drawable, data->gc, TRUE, x - gapWidth/2, y, gapWidth, roundNearest(data->charHeight));
+    }
+}
+
+
+/* Draw the given sequence text at the given coords */
+static void mspDrawSequenceText(GtkWidget *tree,
+                                gchar *displayText, 
+                                const IntRange* const segmentRange,
+                                RenderData *data)
+{
+  if (g_utf8_validate(displayText, -1, NULL))
+    {
+      /* Get the coords for the first base. The display text should have been
+       * was constructed such that everything else will line up from here. */
+      int x, y;
+      segmentGetCoordsForBaseIdx(0, segmentRange, data, &x, &y);
+      
+      PangoFontDescription *font_desc = pango_font_description_copy(tree->style->font_desc);
+      PangoLayout *layout = pangoGetLayoutFromText(displayText, tree, font_desc);
+      pango_font_description_free(font_desc);
+
+      if (layout)
+	{
+	  paintLayout2(tree->style, data->window, data->drawable, data->state, TRUE, NULL, tree, NULL, x, y, layout);
+	  g_object_unref(layout);
+	}
+      else
+	{
+	  g_warning("Error creating layout while trying to display sequence:\n%s\n", displayText);
+	}
+    }
+  else
+    {
+      g_warning("Invalid string constructed when trying to display sequence.\n");
+    }
+  
+}
+
+
+/* Get the range of the msp that is inside the currently displayed range. The
+ * return value is FALSE if no part of the msp is visible. The result coords 
+ * are in display coords. */
+static gboolean mspGetVisibleRange(MSP *msp, RenderData *data, IntRange *result)
+{
+  gboolean found = FALSE;
+  
+  /* Get the full display range of the MSP (including any portions of unaligned sequence etc.) */
+  const IntRange *fullRange = mspGetFullDisplayRange(msp, data->seqSelected, data->bc);
+  result->set(fullRange);
+  
+  if (rangesOverlap(result, data->displayRange))
+    {
+      /* Limit the returned range to the display range. */
+      result->boundsLimit(data->displayRange, FALSE);
+      found = TRUE;
+    }
+  else
+    {
+      /* No portion of the MSP range is in the display range, so return unset range */
+      result->reset();
+    }
+
+  return found;
+}
+
+
+/* If the current MSP has been clipped (i.e. extends outside the current reference
+ * sequence range) then draw a marker at the clip point so that the user knows there
+ * is more data for the match that isn't shown. */
+static void mspDrawClippedMarker(const MSP* const msp,
+                                 const int qIdx, 
+                                 const int segmentIdx, 
+                                 const IntRange* const segmentRange,
+                                 const int x, 
+                                 const int y, 
+                                 RenderData *data)
+{
+  gboolean clipStart = FALSE;
+  gboolean clipEnd = FALSE;
+  
+  /* Check if we're at the very first/last index in the reference sequence range */
+  if (qIdx == data->bc->refSeqRange.min() && msp->qRange.min() < qIdx)
+    {
+      if (data->bc->displayRev)
+        {
+          clipEnd = TRUE;
+        }
+      else
+        {
+          clipStart = TRUE;
+        }
+    }
+  else if (qIdx == data->bc->refSeqRange.max() && msp->qRange.max() > qIdx)
+    {
+      if (data->bc->displayRev)
+        {
+          clipStart = TRUE;
+        }
+      else
+        {
+          clipEnd = TRUE;
+        }
+    }
+
+  if (clipStart || clipEnd)
+    {
+      gdouble gapWidth = data->charWidth * GAP_WIDTH_AS_FRACTION;
+      const int xPos = clipStart ? x : roundNearest((gdouble)x + data->charWidth - gapWidth);
+
+      gdk_gc_set_foreground(data->gc, data->clipMarkerColor);
+      drawRectangle2(data->window, data->drawable, data->gc, TRUE, xPos, y, gapWidth, roundNearest(data->charHeight));
+    }
+}
+
+
+/* Draw the the given MSP. As well as the sequence text this also draws the background
+ * color for each base based on how well it matches the reference sequence, and also
+ * draws insertion markers and "clipped" markers. 
+ * Optionally returns the visible range of the MSP in segmentRange_out. */
+static void drawMsp(SequenceCellRenderer *renderer,
+                    MSP *msp,
+                    GtkWidget *tree,
+                    RenderData *data)
+{
+  /* Extract the section of the reference sequence that we're interested in. */
+  IntRange segmentRange;
+  
+  if (!mspGetVisibleRange(msp, data, &segmentRange))
+    {
+      return;
+    }
+
+  /* The ref seq is in nucleotide coords, so convert the segment coords to nucleotide coords */
+  const int coord1 = convertDisplayIdxToDnaIdx(segmentRange.min(), data->bc->seqType, data->qFrame, 1, data->bc->numFrames, data->bc->displayRev, &data->bc->refSeqRange);
+  const int coord2 = convertDisplayIdxToDnaIdx(segmentRange.max(), data->bc->seqType, data->qFrame, data->bc->numFrames, data->bc->numFrames, data->bc->displayRev, &data->bc->refSeqRange);
+
+  IntRange qRange(coord1, coord2);
+
+  GError *error = NULL;
+  gchar *refSeqSegment = getSequenceSegment(data->bc->refSeq,
+                                            &qRange,
+					    data->qStrand, 
+                                            BLXSEQ_DNA,               /* ref seq is always in nucleotide coords */
+					    data->bc->seqType,        /* required segment is in display coords */
+					    data->qFrame, 
+					    data->bc->numFrames,
+					    &data->bc->refSeqRange,
+					    data->bc->blastMode,
+					    data->bc->geneticCode,
+					    data->bc->displayRev,
+					    data->bc->displayRev,
+					    TRUE,
+					    &error);
+
+  if (!refSeqSegment)
+    {
+      g_assert(error);
+      prefixError(error, "Could not draw alignment for sequence '%s'. ", mspGetSName(msp));
+      reportAndClearIfError(&error, G_LOG_LEVEL_WARNING);
+      return;
+    }
+  else
+    {
+      /* If there's an error but the sequence was still returned it's a non-critical warning */
+      reportAndClearIfError(&error, G_LOG_LEVEL_WARNING);
+    }
+    
+  /* We'll populate a string with the characters we want to display as we loop through the indices. */
+  const int segmentLen = strlen(refSeqSegment);
+  gchar displayText[segmentLen + 1];
+  displayText[0] = '\0';
+  
+  int lastFoundSIdx = UNSET_INT;  /* remember the last index where we found a valid base */
+  int lastFoundQIdx = UNSET_INT;  /* remember the last index where we found a valid base */
+
+  int segmentIdx = 0;
+  for ( ; segmentIdx < segmentLen; ++segmentIdx)
+    {
+      int x = UNSET_INT, y = UNSET_INT;
+      segmentGetCoordsForBaseIdx(segmentIdx, &segmentRange, data, &x, &y);
+      
+      /* Find the base in the match sequence and draw the background color according to how well it matches */
+      int sIdx = UNSET_INT, qIdx = UNSET_INT;
+      mspDrawBaseBg(msp, segmentIdx, &segmentRange, refSeqSegment, data, x, y, displayText, &sIdx, &qIdx);
+      
+      /* If there is an insertion (i.e. extra bases on the match sequence) between this 
+       * and the previous coord, draw a marker */
+      mspDrawInsertionMarker(sIdx, lastFoundSIdx, qIdx, lastFoundQIdx, x, y, data);
+
+      /* If this match has been clipped, draw a marker to indicate as such */
+      mspDrawClippedMarker(msp, qIdx, segmentIdx, &segmentRange, x, y, data);
+
+      if (sIdx != UNSET_INT)
+	{
+	  lastFoundSIdx = sIdx;
+	  lastFoundQIdx = qIdx;
+	}
+    }
+
+  /* Null-terminate the string */
+  displayText[segmentLen] = '\0';
+//  insertChar(displayText, &segmentIdx, '\0', msp);
+
+  /* Draw the sequence text */
+  mspDrawSequenceText(tree, displayText, &segmentRange, data);
+
+  g_free(refSeqSegment);
+}    
+
+
+/* Draw a colinearity line between the two given MSPs, if applicable */
+static void mspDrawColinearityLine(const MSP* msp1, const MSP* msp2, const gboolean selected, RenderData *data)
+{
+  if (msp1 && msp2 && data && data->bc)
+    {
+      /* If the display is reversed we need to swap the order of the msps */
+      if (data->bc->displayRev)
+        {
+          const MSP* tmp = msp1;
+          msp1 = msp2;
+          msp2 = tmp;
+        }
+
+      ColinearityType colinearityType = COLINEAR_INVALID;
+
+      if ((data->bc->displayRev && msp1->qStrand == BLXSTRAND_FORWARD) || (!data->bc->displayRev && msp1->qStrand != BLXSTRAND_FORWARD))
+        colinearityType = mspIsColinear(msp2, msp1);
+      else
+        colinearityType = mspIsColinear(msp1, msp2);
+
+      if (colinearityType != COLINEAR_INVALID)
+        {
+          /* get the line color */
+          GdkColor *color = NULL;
+
+          if (colinearityType == COLINEAR_PERFECT)
+            color = getGdkColor(BLXCOLOR_COLINEAR_PERFECT, data->bc->defaultColors, FALSE, data->bc->usePrintColors);
+          else if (colinearityType == COLINEAR_IMPERFECT)
+            color = getGdkColor(BLXCOLOR_COLINEAR_IMPERFECT, data->bc->defaultColors, FALSE, data->bc->usePrintColors);
+          else
+            color = getGdkColor(BLXCOLOR_COLINEAR_NOT, data->bc->defaultColors, FALSE, data->bc->usePrintColors);
+
+          gdk_gc_set_foreground(data->gc, color);
+
+          /* Get the coords of the line */
+          const int y = data->cell_area->y + (data->charHeight / 2);
+          int x1 = data->cell_area->x + ((msp1->displayRange.max(true, data->bc->displayRev) - data->displayRange->min()) * data->charWidth); /* +1 to get rightmost edge of char */
+          int x2 = data->cell_area->x + ((msp2->displayRange.min(true, data->bc->displayRev) - data->displayRange->min()) * data->charWidth) - 1; /* -1 offset by 1 pixel so we don't overdraw the char */
+
+          if (x1 < data->cell_area->x + data->cell_area->width && x2 > data->cell_area->x)
+            {
+              if (x1 < data->cell_area->x)
+                x1 = data->cell_area->x;
+      
+              if (x2 > data->cell_area->x + data->cell_area->width)
+                x2 = data->cell_area->x + data->cell_area->width;
+
+              drawLine2(data->window, data->drawable, data->gc, x1, y, x2, y);
+            }
+        }
+    }
+}
+
+
+/* Draw a colinearity line between the given msp and the previous/next one in the BlxSequence's list */
+static void mspDrawColinearityLineAdjacent(const MSP* msp, const gboolean selected, RenderData *data, gboolean prev)
+{
+  if (data && msp && msp->sSequence)
+    {
+      /* Find the current msp in the list, and get the one before it */
+      GList *mspItem = msp->sSequence->mspList;
+
+      for ( ; mspItem; mspItem = mspItem->next)
+        {
+          if (mspItem->data == msp)
+            break;
+        }
+      
+      if (mspItem) /* found it */
+        {
+          GList *adjacentItem = (prev ? mspItem->prev : mspItem->next);
+          
+          if (adjacentItem)
+            {
+              const MSP* adjacentMsp = (const MSP*)(adjacentItem->data);
+
+              if (prev)
+                mspDrawColinearityLine(adjacentMsp, msp, selected, data);
+              else
+                mspDrawColinearityLine(msp, adjacentMsp, selected, data);
+            }  
+        }
+    }
+}
+
+
+/* Draw colinearity lines between the two given, adjacent MSPs in the same row, if applicable */
+static void mspDrawColinearityLines(const MSP* cur_msp, const MSP* prev_msp, const gboolean selected, RenderData *data)
+{
+  g_return_if_fail(data);
+
+  if (data && data->bc && data->bc->flags[BLXFLAG_SHOW_COLINEARITY] &&
+      (selected || !data->bc->flags[BLXFLAG_SHOW_COLINEARITY_SELECTED]))
+    {
+      if (data->bc->seqType == BLXSEQ_DNA)
+        {
+          /* Draw a line between the adjacent MSPs*/
+          mspDrawColinearityLine(prev_msp, cur_msp, selected, data);
+
+          /* If it's the first MSP in the row, then check for adjacent MSPs in the sequence that may be
+           * in different rows. */
+          if (prev_msp == NULL)
+            mspDrawColinearityLineAdjacent(cur_msp, selected, data, TRUE);
+          
+          /* If it's the last MSP in the row, then check for adjacent MSPs in the sequence that may be
+           * in different rows. */
+          if (cur_msp == NULL)
+            mspDrawColinearityLineAdjacent(prev_msp, selected, data, FALSE);
+        }
+      else
+        {
+          /* Protein mode. The two given MSPs are in the same row and hence the same frame, but
+           * we therefore can't assume they're adjacent because the real next/previous MSP might
+           * be in a different frame. Therefore we have to draw the line to the previous AND next
+           * MSP for every MSP (i.e. we draw the joining lines twice; if they are in the same frame
+           * they will overlap but otherwise they need to be shown in each frame) */
+          if (cur_msp)
+            mspDrawColinearityLineAdjacent(cur_msp, selected, data, TRUE);
+          
+          if (prev_msp)
+            mspDrawColinearityLineAdjacent(prev_msp, selected, data, FALSE);
+        }
+
+    }
+}
+
+
+/* There can be multiple MSPs in the same cell. This function loops through them
+ * and draws each one (IF it is in the correct strand/frame for this tree). */
+static void rendererDrawMsps(SequenceCellRenderer *renderer,
+                             GtkWidget *tree,
+                             GdkWindow *window, 
+                             GtkStateType state,
+                             GdkRectangle *cell_area)
+{
+  /* Extract all the info from the tree that we'll need repeatedly. */
+  TreeProperties *treeProperties = treeGetProperties(tree);
+  DetailViewProperties *detailViewProperties = detailViewGetProperties(treeProperties->detailView);
+  BlxContext *bc = blxWindowGetContext(detailViewProperties->blxWindow());
+  
+  const gboolean highlightDiffs = bc->flags[BLXFLAG_HIGHLIGHT_DIFFS]; /* swap match/mismatch colors if this is true */
+  const MSP *firstMsp = (const MSP*)(renderer->mspGList->data);
+  const BlxSequence *seq = firstMsp ? firstMsp->sSequence : NULL;
+
+  GdkColor *matchColor = getGdkColor(BLXCOLOR_MATCH, bc->defaultColors, FALSE, bc->usePrintColors);
+  GdkColor *matchColorSelected = getGdkColor(BLXCOLOR_MATCH, bc->defaultColors, TRUE, bc->usePrintColors);
+  GdkColor *mismatchColor = getGdkColor(BLXCOLOR_MISMATCH, bc->defaultColors, FALSE, bc->usePrintColors);
+  GdkColor *mismatchColorSelected = getGdkColor(BLXCOLOR_MISMATCH, bc->defaultColors, TRUE, bc->usePrintColors);
+  GdkColor *backgroundColorSelected = getGdkColor(BLXCOLOR_BACKGROUND, bc->defaultColors, TRUE, bc->usePrintColors);
+  
+  GdkGC *gc = gdk_gc_new(window);
+  
+  /* Make the dashes of the partial-boundary lines very short and closely
+   * packed (i.e. dash length of 2 pixels and gaps of 1 pixel) */
+  int listLen = 2;
+  gint8 dashList[listLen];
+  dashList[0] = 2;
+  dashList[1] = 1;
+  gdk_gc_set_dashes(gc, 1, dashList, listLen);
+
+  RenderData data = {
+    bc,
+    cell_area,
+    window,
+    state,
+    gc,
+    treeGetStrand(tree),
+    treeProperties->readingFrame,
+    detailViewGetSelectedDisplayIdx(treeProperties->detailView),
+    detailViewGetSelectedDisplayIdxRange(treeProperties->detailView),
+    blxWindowIsSeqSelected(detailViewProperties->blxWindow(), seq),
+    blxWindowGetSelectedSeqs(detailViewProperties->blxWindow()),
+    detailViewProperties->cellXPadding,
+    detailViewProperties->cellYPadding,
+    detailViewProperties->charWidth(),
+    detailViewProperties->charHeight(),
+    &detailViewProperties->displayRange,
+    highlightDiffs,
+    widgetGetDrawable(tree),
+    detailViewProperties->blxWindow(),
+    getGdkColor(BLXCOLOR_EXON_FILL, bc->defaultColors, FALSE, bc->usePrintColors),
+    getGdkColor(BLXCOLOR_EXON_FILL, bc->defaultColors, TRUE, bc->usePrintColors),
+    getGdkColor(BLXCOLOR_CDS_FILL, bc->defaultColors, FALSE, bc->usePrintColors),
+    getGdkColor(BLXCOLOR_CDS_FILL, bc->defaultColors, TRUE, bc->usePrintColors),
+    getGdkColor(BLXCOLOR_UTR_FILL, bc->defaultColors, FALSE, bc->usePrintColors),
+    getGdkColor(BLXCOLOR_UTR_FILL, bc->defaultColors, TRUE, bc->usePrintColors),
+    getGdkColor(BLXCOLOR_PARTIAL_EXON_CROSSHATCH, bc->defaultColors, FALSE, bc->usePrintColors),
+    getGdkColor(BLXCOLOR_PARTIAL_EXON_CROSSHATCH, bc->defaultColors, TRUE, bc->usePrintColors),
+    getGdkColor(BLXCOLOR_INSERTION, bc->defaultColors, FALSE, bc->usePrintColors),
+    getGdkColor(BLXCOLOR_INSERTION, bc->defaultColors, TRUE, bc->usePrintColors),
+    highlightDiffs ? mismatchColor : matchColor,
+    highlightDiffs ? mismatchColorSelected : matchColorSelected,
+    getGdkColor(BLXCOLOR_CONS, bc->defaultColors, FALSE, bc->usePrintColors),
+    getGdkColor(BLXCOLOR_CONS, bc->defaultColors, TRUE, bc->usePrintColors),
+    highlightDiffs ? matchColor : mismatchColor,
+    highlightDiffs ? matchColorSelected : mismatchColorSelected,
+    getGdkColor(BLXCOLOR_UNALIGNED_SEQ, bc->defaultColors, FALSE, bc->usePrintColors),
+    getGdkColor(BLXCOLOR_UNALIGNED_SEQ, bc->defaultColors, TRUE, bc->usePrintColors),
+    getGdkColor(BLXCOLOR_EXON_START, bc->defaultColors, FALSE, bc->usePrintColors),
+    getGdkColor(BLXCOLOR_EXON_END, bc->defaultColors, FALSE, bc->usePrintColors),
+    getGdkColor(BLXCOLOR_POLYA_TAIL, bc->defaultColors, FALSE, bc->usePrintColors),
+    getGdkColor(BLXCOLOR_POLYA_TAIL, bc->defaultColors, TRUE, bc->usePrintColors),
+    getGdkColor(BLXCOLOR_CLIP_MARKER, bc->defaultColors, FALSE, bc->usePrintColors),
+    detailViewProperties->exonBoundaryLineWidth,
+    detailViewProperties->exonBoundaryLineStyle,
+    detailViewProperties->exonBoundaryLineStylePartial,
+    bc->flags[BLXFLAG_LIMIT_UNALIGNED_BASES],
+    detailViewProperties->numUnalignedBases
+  };  
+  
+  /* If a range is selected highlight it now in case we don't come to process it (in 
+   * which case this will get drawn over). */
+  if (data.selectionRange)
+    {
+      int i = 0;
+      for (i = data.selectionRange->min(); i <= data.selectionRange->max(); ++i)
+        {
+          if (coordIsSelected(&data, i))
+            highlightSelectedBase(i, backgroundColorSelected, &data);
+        }
+    }
+
+  /* Draw all MSPs in this row */
+  GList *mspListItem = renderer->mspGList;
+  MSP *savedMsp = NULL;
+  MSP *prevMsp = NULL;
+  
+  for ( ; mspListItem; mspListItem = mspListItem->next)
+    {
+      MSP *msp = (MSP*)(mspListItem->data);
+      
+      if (mspIsBlastMatch(msp))
+        {
+          gboolean selected = blxWindowIsSeqSelected(detailViewProperties->blxWindow(), msp->sSequence);
+
+          if (mspGetFlag(msp, MSPFLAG_SQUASH_IDENTICAL_FEATURES) && !mspGetFlag(msp, MSPFLAG_SQUASH_LINKED_FEATURES))
+            {
+              /* The first condition here means that identical matches are placed in the
+               * same row and the second means that matches linked in any other way aren't. Hence
+               * if we get here we know that if we have multiple MSPs in this row then they
+               * must be identical (i.e. duplicate) matches and we only need to draw one of them.
+               * This is an important optimisation for BAM data, where we can have hundreds of
+               * identical reads on the same row.
+               * gb10 2014: Ideally we should add optimisation for the case where we have both 
+               * linked features and identical matches in the same row, but this isn't used at the
+               * moment. */
+              
+              /* If any of the MSPs is selected, we want to draw the row as selected, so loop through
+               * checking if any are selected. If a selected one is found then draw it; otherwise,
+               * save the first MSP so we can go back and draw that. */
+              if (selected)
+                {
+                  data.seqSelected = TRUE;
+                  drawMsp(renderer, msp, tree, &data);
+                  savedMsp = NULL;
+                  break;
+                }
+              else if (!savedMsp)
+                {
+                  savedMsp = msp;
+                }
+            }
+          else
+            {
+              /* Ordinary row: draw all MSPs */
+              drawMsp(renderer, msp, tree, &data);
+              mspDrawColinearityLines(msp, prevMsp, selected, &data);
+            }
+        }
+      else if (mspIsBoxFeature(msp))
+        {
+          drawBoxFeature(renderer, msp, tree, &data);
+        }
+      
+      prevMsp = msp;
+    }
+  
+  /* Draw colinearity lines for the last msp. Passing curMsp as null indicates it's the last msp
+   * so we search for adjacent msps in different rows. */
+  if (prevMsp)
+    mspDrawColinearityLines(NULL, prevMsp, blxWindowIsSeqSelected(detailViewProperties->blxWindow(), prevMsp->sSequence), &data);
+
+  if (savedMsp)
+    drawMsp(renderer, savedMsp, tree, &data);
+  
+  drawAllVisibleExonBoundaries(tree, &data);
+  
+  g_object_unref(gc);
+
+  if (data.selectionRange)
+    {
+      delete data.selectionRange;
+      data.selectionRange = NULL;
+    }
+}
+
+
+static GtkStateType getState(GtkWidget *widget, GtkCellRendererState flags)
+{
+  GtkStateType state;
+  if ((flags & GTK_CELL_RENDERER_SELECTED) == GTK_CELL_RENDERER_SELECTED)
+    {
+      state = GTK_WIDGET_HAS_FOCUS(widget) ? GTK_STATE_SELECTED : GTK_STATE_ACTIVE;
+    }
+  else if ((flags & GTK_CELL_RENDERER_PRELIT) == GTK_CELL_RENDERER_PRELIT && GTK_WIDGET_STATE (widget) == GTK_STATE_PRELIGHT)
+    {
+      state = GTK_STATE_PRELIGHT;
+    }
+  else if (GTK_WIDGET_STATE (widget) == GTK_STATE_INSENSITIVE)
+    {
+      state = GTK_STATE_INSENSITIVE;
+    }
+  else
+    {
+      state = GTK_STATE_NORMAL;
+    }
+  
+  return state;
+}
+
+
+/* Utility function that returns true if any of the MSPs in the given list
+ * is selected. */
+static gboolean mspListContainsSelectedMsp(GList *mspList, const BlxContext* const bc)
+{
+  gboolean isSelected = FALSE;
+  GList *mspItem = mspList;
+  
+  for ( ; mspItem && !isSelected; mspItem = mspItem->next)
+    {
+      const MSP* const msp = (const MSP*)(mspItem->data);
+      isSelected = bc->isSeqSelected(msp->sSequence);
+    }
+  
+  return isSelected;
+}
+
+
+/* Utility to determine if any MSP in the given list is in a group and, if so
+ * to return that group.  Returns the first group found and ignores any 
+ * subsequent MSPs in the list that also have groups. Returns null if no group
+ * was found. */
+static SequenceGroup* mspListContainsGroupedMsp(GList *mspList, const BlxContext* const bc)
+{
+  SequenceGroup *group = NULL;
+  GList *mspItem = mspList;
+  
+  for ( ; mspItem && !group; mspItem = mspItem->next)
+    {
+      const MSP* const msp = (const MSP*)(mspItem->data);
+      group = bc->getFirstSequenceGroup(msp->sSequence);
+    }
+  
+  return group;
+  
+}
+
+
+/* This function sets the background color for the row. */
+static void rendererSetBackgroundColor(GtkCellRenderer *cell, GtkWidget *tree, GdkWindow *window, GdkRectangle *background_area)
+{
+  SequenceCellRenderer *renderer = SEQUENCE_CELL_RENDERER(cell);
+  
+  if (renderer->data)
+    {
+      /* Find out whether the MSP(s) that this cell is displaying are in 
+       * a grouped sequence or are selected. */
+      const BlxContext* const bc = blxWindowGetContext(treeGetBlxWindow(tree));
+      GList *mspList = renderer->data;
+      
+      const gboolean isSelected = mspListContainsSelectedMsp(mspList, bc);
+      const SequenceGroup* const group = mspListContainsGroupedMsp(mspList, bc);
+      
+      GdkGC *gc = gdk_gc_new(window);
+
+      if (isSelected || (group && group->highlighted))
+	{
+	  if (group && group->highlighted && isSelected)
+	    {
+	      /* Use the group's highlight color but darken it because it is also selected */
+	      GdkColor color;
+	      getSelectionColor(&group->highlightColor, &color);
+	      gdk_gc_set_foreground(gc, &color);
+	    }
+	  else if (group && group->highlighted)
+	    {
+	      /* Use the group's highlight color */
+	      gdk_gc_set_foreground(gc, &group->highlightColor);
+	    }
+	  else
+	    {
+	      /* Not in a group but is selected. Use the background color but darken it. */
+	      GdkColor color;
+	      getSelectionColor(&tree->style->bg[GTK_STATE_NORMAL], &color);
+	      gdk_gc_set_foreground(gc, &color);
+	    }
+	}
+      else
+        {
+  	  gdk_gc_set_foreground(gc, &tree->style->bg[GTK_STATE_NORMAL]);
+        }
+
+      drawRectangle2(window, widgetGetDrawable(tree), gc, TRUE, background_area->x, background_area->y, background_area->width, background_area->height);
+      
+      g_object_unref(gc);
+    }
+}
+
+
+/* Draw the tree grid lines (i.e. column separators) */
+static void rendererDrawGridLines(GtkWidget *tree, GdkWindow *window, GdkRectangle *cell_area)
+{
+  GdkDrawable *drawable = widgetGetDrawable(tree);
+  BlxContext *bc = treeGetContext(tree);
+
+  GdkGC *gc = gdk_gc_new(window);
+
+  /* Set the line color */
+  GdkColor *color = getGdkColor(BLXCOLOR_TREE_GRID_LINES, bc->defaultColors, FALSE, bc->usePrintColors);
+  gdk_gc_set_foreground(gc, color);
+  
+  /* We want dashed lines */
+  const int lineWidth = 1;
+  gdk_gc_set_line_attributes(gc, lineWidth, GDK_LINE_ON_OFF_DASH, GDK_CAP_BUTT, GDK_JOIN_MITER);
+
+  /* Make the dashes very short and closely packed (i.e. dash length of 1 pixel and gaps of 1 pixel) */
+  int listLen = 1;
+  gint8 dashList[listLen];
+  dashList[0] = 1;
+  gdk_gc_set_dashes(gc, 0, dashList, listLen);
+  
+  /* Draw vertical lines. Draw the right edge of each cell (because we don't really want a
+   * line at the leftmost edge of the first cell.) */
+  const int x = cell_area->x + cell_area->width - lineWidth;
+  drawLine2(window, drawable, gc, x, cell_area->y, x, cell_area->y + cell_area->height);
+  
+  g_object_unref(gc);
+}
+
+
+/***************************************************************************
+ *
+ *  sequence_cell_renderer_get_size: crucial - calculate the size
+ *                                          of our cell, taking into account
+ *                                          padding and alignment properties
+ *                                          of parent.
+ *
+ ***************************************************************************/
+
+static void
+sequence_cell_renderer_get_size (GtkCellRenderer *cell,
+                                        GtkWidget       *widget,
+                                        GdkRectangle    *cell_area,
+                                        gint            *x_offset,
+                                        gint            *y_offset,
+                                        gint            *width,
+                                        gint            *height)
+{
+  get_size(cell, widget, cell_area, x_offset, y_offset, width, height);  
+}
+
+
+/***************************************************************************
+ *
+ *  sequence_cell_renderer_render: crucial - do the rendering.
+ *
+ ***************************************************************************/
+
+static void
+sequence_cell_renderer_render (GtkCellRenderer *cell,
+			       GdkDrawable     *window,
+			       GtkWidget       *tree,
+			       GdkRectangle    *background_area,
+			       GdkRectangle    *cell_area,
+			       GdkRectangle    *expose_area,
+			       GtkCellRendererState flags)
+{
+  rendererSetBackgroundColor(cell, tree, window, background_area);
+  
+  SequenceCellRenderer *renderer = SEQUENCE_CELL_RENDERER(cell);
+  
+  MSP *msp = renderer->mspGList ? (MSP*)(renderer->mspGList->data) : NULL;
+  
+  if (msp)
+    {
+      rendererDrawMsps(renderer, tree, window, getState(tree, flags), cell_area);
+    }
+  else
+    {
+      rendererDrawSimpleText(renderer, tree, window, getState(tree, flags), cell_area);
+    }
+  
+  rendererDrawGridLines(tree, window, background_area);
+}
+
+
+
diff --git a/blixemApp/sequencecellrenderer.hpp b/blixemApp/sequencecellrenderer.hpp
new file mode 100644
index 0000000..03aadb1
--- /dev/null
+++ b/blixemApp/sequencecellrenderer.hpp
@@ -0,0 +1,102 @@
+/*  File: sequencecellrenderer.h
+ *  Author: Gemma Barson, 2009-10-15
+ *  Copyright (c) 2009 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: A custom renderer to render cells in the detail-view trees.
+ *              Each row in the tree contains a match sequence, and the 
+ *              renderer draws the portion of that sequence that is within the
+ *              current display range.
+ *
+ *              Each base is colored to indicate whether it is a match, 
+ *              mismatch or conserved (similar) match.
+ *              Markers are drawn to indicate deletions or insertions.
+ *
+ *              This renderer was originally designed for renderer the cell
+ *              that draws the sequence data, hence the name, but it has since
+ *              been extended to draw the plain text cells too because it
+ *              colors the background and sets the correct font.
+ *----------------------------------------------------------------------------
+ */
+
+
+#ifndef _sequence_cell_renderer_included_
+#define _sequence_cell_renderer_included_
+
+#include <blixemApp/blixem_.hpp>
+#include <gtk/gtk.h>
+#include <gtk/gtkcellrenderertext.h>
+
+/* Some boilerplate GObject type check and type cast macros.
+ *  'klass' is used here instead of 'class', because 'class'
+ *  is a c++ keyword */
+
+#define SEQUENCE_CELL_RENDERER_TYPE             (sequence_cell_renderer_get_type())
+#define SEQUENCE_CELL_RENDERER(obj)             (G_TYPE_CHECK_INSTANCE_CAST((obj),  SEQUENCE_CELL_RENDERER_TYPE, SequenceCellRenderer))
+#define SEQUENCE_CELL_RENDERER_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass),  SEQUENCE_CELL_RENDERER_TYPE, SequenceCellRendererClass))
+#define IS_SEQUENCE_CELL_RENDERER(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SEQUENCE_CELL_RENDERER_TYPE))
+#define IS_SEQUENCE_CELL_RENDERER_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass),  SEQUENCE_CELL_RENDERER_TYPE))
+#define SEQUENCE_CELL_RENDERER_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj),  SEQUENCE_CELL_RENDERER_TYPE, SequenceCellRendererClass))
+
+
+/* Define the property names that we will use to set the data in the renderer */
+#define RENDERER_TEXT_PROPERTY          "text"
+#define RENDERER_SEQUENCE_PROPERTY      "sequence"
+#define RENDERER_DATA_PROPERTY          "data"
+
+
+
+/* SequenceCellRenderer: Our custom cell renderer
+ *   structure. Extend according to need */
+
+typedef struct _SequenceCellRenderer
+{
+  GtkCellRenderer   parent;
+  
+  /* The cell renderer can be used to render a match sequence or plain text */
+  char *text;       /* generic text property */
+  GList *mspGList;  /* property for the sequence column. Contains the MSP(s) to be displayed in this row */
+  GList *data;      /* property for data that is set for every column */
+  
+} SequenceCellRenderer;
+
+
+typedef struct _SequenceCellRendererClass
+{
+  GtkCellRendererTextClass  parent_class;
+} SequenceCellRendererClass;
+
+
+GType                sequence_cell_renderer_get_type (void);
+GtkCellRenderer     *sequence_cell_renderer_new (void);
+int		     rendererGetCellBackgroundPadding(GtkCellRenderer *cell);
+
+#endif /* _sequence_cell_renderer_included_ */
diff --git a/config.h.in b/config.h.in
new file mode 100644
index 0000000..aace7f3
--- /dev/null
+++ b/config.h.in
@@ -0,0 +1,151 @@
+/* config.h.in.  Generated from configure.ac by autoheader.  */
+
+/* Define to 1 if you have the <arpa/inet.h> header file. */
+#undef HAVE_ARPA_INET_H
+
+/* Define to 1 if you have the <curl/curl.h> header file. */
+#undef HAVE_CURL_CURL_H
+
+/* Define to 1 if you have the `dup2' function. */
+#undef HAVE_DUP2
+
+/* Define to 1 if you have the <execinfo.h> header file. */
+#undef HAVE_EXECINFO_H
+
+/* Define to 1 if you have the `floor' function. */
+#undef HAVE_FLOOR
+
+/* Define to 1 if you have the `fork' function. */
+#undef HAVE_FORK
+
+/* Define to 1 if you have the `gethostbyname' function. */
+#undef HAVE_GETHOSTBYNAME
+
+/* Define to 1 if you have the <gtk.h> header file. */
+#undef HAVE_GTK_H
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the `memset' function. */
+#undef HAVE_MEMSET
+
+/* Define to 1 if you have the <netdb.h> header file. */
+#undef HAVE_NETDB_H
+
+/* Define to 1 if you have the <netinet/in.h> header file. */
+#undef HAVE_NETINET_IN_H
+
+/* Define to 1 if you have the `socket' function. */
+#undef HAVE_SOCKET
+
+/* Define to 1 if you have the <sqlite3.h> header file. */
+#undef HAVE_SQLITE3_H
+
+/* Define to 1 if you have the `sqrt' function. */
+#undef HAVE_SQRT
+
+/* 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 `strcasecmp' function. */
+#undef HAVE_STRCASECMP
+
+/* Define to 1 if you have the `strchr' function. */
+#undef HAVE_STRCHR
+
+/* Define to 1 if you have the `strcspn' function. */
+#undef HAVE_STRCSPN
+
+/* Define to 1 if you have the `strerror' function. */
+#undef HAVE_STRERROR
+
+/* 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 `strncasecmp' function. */
+#undef HAVE_STRNCASECMP
+
+/* Define to 1 if you have the `strrchr' function. */
+#undef HAVE_STRRCHR
+
+/* Define to 1 if you have the `strstr' function. */
+#undef HAVE_STRSTR
+
+/* Define to 1 if you have the `strtol' function. */
+#undef HAVE_STRTOL
+
+/* Define to 1 if you have the <sys/socket.h> header file. */
+#undef HAVE_SYS_SOCKET_H
+
+/* 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/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the `uname' function. */
+#undef HAVE_UNAME
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to 1 if you have the `vfork' function. */
+#undef HAVE_VFORK
+
+/* Define to 1 if you have the <vfork.h> header file. */
+#undef HAVE_VFORK_H
+
+/* Define to 1 if `fork' works. */
+#undef HAVE_WORKING_FORK
+
+/* Define to 1 if `vfork' works. */
+#undef HAVE_WORKING_VFORK
+
+/* 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
+
+/* "SeqTools package version" */
+#undef SEQTOOLS_VERSION
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Version number of package */
+#undef VERSION
+
+/* Define to `int' if <sys/types.h> does not define. */
+#undef pid_t
+
+/* Define to `unsigned int' if <sys/types.h> does not define. */
+#undef size_t
+
+/* Define as `fork' if `vfork' does not work. */
+#undef vfork
diff --git a/config/compile b/config/compile
new file mode 100755
index 0000000..531136b
--- /dev/null
+++ b/config/compile
@@ -0,0 +1,347 @@
+#! /bin/sh
+# Wrapper for compilers which do not understand '-c -o'.
+
+scriptversion=2012-10-14.11; # UTC
+
+# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+# Written by Tom Tromey <tromey at cygnus.com>.
+#
+# 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, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake at gnu.org> or send patches to
+# <automake-patches at gnu.org>.
+
+nl='
+'
+
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent tools from complaining about whitespace usage.
+IFS=" ""	$nl"
+
+file_conv=
+
+# func_file_conv build_file lazy
+# Convert a $build file to $host form and store it in $file
+# Currently only supports Windows hosts. If the determined conversion
+# type is listed in (the comma separated) LAZY, no conversion will
+# take place.
+func_file_conv ()
+{
+  file=$1
+  case $file in
+    / | /[!/]*) # absolute file, and not a UNC file
+      if test -z "$file_conv"; then
+	# lazily determine how to convert abs files
+	case `uname -s` in
+	  MINGW*)
+	    file_conv=mingw
+	    ;;
+	  CYGWIN*)
+	    file_conv=cygwin
+	    ;;
+	  *)
+	    file_conv=wine
+	    ;;
+	esac
+      fi
+      case $file_conv/,$2, in
+	*,$file_conv,*)
+	  ;;
+	mingw/*)
+	  file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
+	  ;;
+	cygwin/*)
+	  file=`cygpath -m "$file" || echo "$file"`
+	  ;;
+	wine/*)
+	  file=`winepath -w "$file" || echo "$file"`
+	  ;;
+      esac
+      ;;
+  esac
+}
+
+# func_cl_dashL linkdir
+# Make cl look for libraries in LINKDIR
+func_cl_dashL ()
+{
+  func_file_conv "$1"
+  if test -z "$lib_path"; then
+    lib_path=$file
+  else
+    lib_path="$lib_path;$file"
+  fi
+  linker_opts="$linker_opts -LIBPATH:$file"
+}
+
+# func_cl_dashl library
+# Do a library search-path lookup for cl
+func_cl_dashl ()
+{
+  lib=$1
+  found=no
+  save_IFS=$IFS
+  IFS=';'
+  for dir in $lib_path $LIB
+  do
+    IFS=$save_IFS
+    if $shared && test -f "$dir/$lib.dll.lib"; then
+      found=yes
+      lib=$dir/$lib.dll.lib
+      break
+    fi
+    if test -f "$dir/$lib.lib"; then
+      found=yes
+      lib=$dir/$lib.lib
+      break
+    fi
+    if test -f "$dir/lib$lib.a"; then
+      found=yes
+      lib=$dir/lib$lib.a
+      break
+    fi
+  done
+  IFS=$save_IFS
+
+  if test "$found" != yes; then
+    lib=$lib.lib
+  fi
+}
+
+# func_cl_wrapper cl arg...
+# Adjust compile command to suit cl
+func_cl_wrapper ()
+{
+  # Assume a capable shell
+  lib_path=
+  shared=:
+  linker_opts=
+  for arg
+  do
+    if test -n "$eat"; then
+      eat=
+    else
+      case $1 in
+	-o)
+	  # configure might choose to run compile as 'compile cc -o foo foo.c'.
+	  eat=1
+	  case $2 in
+	    *.o | *.[oO][bB][jJ])
+	      func_file_conv "$2"
+	      set x "$@" -Fo"$file"
+	      shift
+	      ;;
+	    *)
+	      func_file_conv "$2"
+	      set x "$@" -Fe"$file"
+	      shift
+	      ;;
+	  esac
+	  ;;
+	-I)
+	  eat=1
+	  func_file_conv "$2" mingw
+	  set x "$@" -I"$file"
+	  shift
+	  ;;
+	-I*)
+	  func_file_conv "${1#-I}" mingw
+	  set x "$@" -I"$file"
+	  shift
+	  ;;
+	-l)
+	  eat=1
+	  func_cl_dashl "$2"
+	  set x "$@" "$lib"
+	  shift
+	  ;;
+	-l*)
+	  func_cl_dashl "${1#-l}"
+	  set x "$@" "$lib"
+	  shift
+	  ;;
+	-L)
+	  eat=1
+	  func_cl_dashL "$2"
+	  ;;
+	-L*)
+	  func_cl_dashL "${1#-L}"
+	  ;;
+	-static)
+	  shared=false
+	  ;;
+	-Wl,*)
+	  arg=${1#-Wl,}
+	  save_ifs="$IFS"; IFS=','
+	  for flag in $arg; do
+	    IFS="$save_ifs"
+	    linker_opts="$linker_opts $flag"
+	  done
+	  IFS="$save_ifs"
+	  ;;
+	-Xlinker)
+	  eat=1
+	  linker_opts="$linker_opts $2"
+	  ;;
+	-*)
+	  set x "$@" "$1"
+	  shift
+	  ;;
+	*.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
+	  func_file_conv "$1"
+	  set x "$@" -Tp"$file"
+	  shift
+	  ;;
+	*.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
+	  func_file_conv "$1" mingw
+	  set x "$@" "$file"
+	  shift
+	  ;;
+	*)
+	  set x "$@" "$1"
+	  shift
+	  ;;
+      esac
+    fi
+    shift
+  done
+  if test -n "$linker_opts"; then
+    linker_opts="-link$linker_opts"
+  fi
+  exec "$@" $linker_opts
+  exit 1
+}
+
+eat=
+
+case $1 in
+  '')
+     echo "$0: No command.  Try '$0 --help' for more information." 1>&2
+     exit 1;
+     ;;
+  -h | --h*)
+    cat <<\EOF
+Usage: compile [--help] [--version] PROGRAM [ARGS]
+
+Wrapper for compilers which do not understand '-c -o'.
+Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
+arguments, and rename the output as expected.
+
+If you are trying to build a whole package this is not the
+right script to run: please start by reading the file 'INSTALL'.
+
+Report bugs to <bug-automake at gnu.org>.
+EOF
+    exit $?
+    ;;
+  -v | --v*)
+    echo "compile $scriptversion"
+    exit $?
+    ;;
+  cl | *[/\\]cl | cl.exe | *[/\\]cl.exe )
+    func_cl_wrapper "$@"      # Doesn't return...
+    ;;
+esac
+
+ofile=
+cfile=
+
+for arg
+do
+  if test -n "$eat"; then
+    eat=
+  else
+    case $1 in
+      -o)
+	# configure might choose to run compile as 'compile cc -o foo foo.c'.
+	# So we strip '-o arg' only if arg is an object.
+	eat=1
+	case $2 in
+	  *.o | *.obj)
+	    ofile=$2
+	    ;;
+	  *)
+	    set x "$@" -o "$2"
+	    shift
+	    ;;
+	esac
+	;;
+      *.c)
+	cfile=$1
+	set x "$@" "$1"
+	shift
+	;;
+      *)
+	set x "$@" "$1"
+	shift
+	;;
+    esac
+  fi
+  shift
+done
+
+if test -z "$ofile" || test -z "$cfile"; then
+  # If no '-o' option was seen then we might have been invoked from a
+  # pattern rule where we don't need one.  That is ok -- this is a
+  # normal compilation that the losing compiler can handle.  If no
+  # '.c' file was seen then we are probably linking.  That is also
+  # ok.
+  exec "$@"
+fi
+
+# Name of file we expect compiler to create.
+cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
+
+# Create the lock directory.
+# Note: use '[/\\:.-]' here to ensure that we don't use the same name
+# that we are using for the .o file.  Also, base the name on the expected
+# object file name, since that is what matters with a parallel build.
+lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
+while true; do
+  if mkdir "$lockdir" >/dev/null 2>&1; then
+    break
+  fi
+  sleep 1
+done
+# FIXME: race condition here if user kills between mkdir and trap.
+trap "rmdir '$lockdir'; exit 1" 1 2 15
+
+# Run the compile.
+"$@"
+ret=$?
+
+if test -f "$cofile"; then
+  test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
+elif test -f "${cofile}bj"; then
+  test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
+fi
+
+rmdir "$lockdir"
+exit $ret
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/config/depcomp b/config/depcomp
new file mode 100755
index 0000000..4ebd5b3
--- /dev/null
+++ b/config/depcomp
@@ -0,0 +1,791 @@
+#! /bin/sh
+# depcomp - compile a program generating dependencies as side-effects
+
+scriptversion=2013-05-30.07; # UTC
+
+# Copyright (C) 1999-2013 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, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Originally written by Alexandre Oliva <oliva at dcc.unicamp.br>.
+
+case $1 in
+  '')
+    echo "$0: No command.  Try '$0 --help' for more information." 1>&2
+    exit 1;
+    ;;
+  -h | --h*)
+    cat <<\EOF
+Usage: depcomp [--help] [--version] PROGRAM [ARGS]
+
+Run PROGRAMS ARGS to compile a file, generating dependencies
+as side-effects.
+
+Environment variables:
+  depmode     Dependency tracking mode.
+  source      Source file read by 'PROGRAMS ARGS'.
+  object      Object file output by 'PROGRAMS ARGS'.
+  DEPDIR      directory where to store dependencies.
+  depfile     Dependency file to output.
+  tmpdepfile  Temporary file to use when outputting dependencies.
+  libtool     Whether libtool is used (yes/no).
+
+Report bugs to <bug-automake at gnu.org>.
+EOF
+    exit $?
+    ;;
+  -v | --v*)
+    echo "depcomp $scriptversion"
+    exit $?
+    ;;
+esac
+
+# Get the directory component of the given path, and save it in the
+# global variables '$dir'.  Note that this directory component will
+# be either empty or ending with a '/' character.  This is deliberate.
+set_dir_from ()
+{
+  case $1 in
+    */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
+      *) dir=;;
+  esac
+}
+
+# Get the suffix-stripped basename of the given path, and save it the
+# global variable '$base'.
+set_base_from ()
+{
+  base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
+}
+
+# If no dependency file was actually created by the compiler invocation,
+# we still have to create a dummy depfile, to avoid errors with the
+# Makefile "include basename.Plo" scheme.
+make_dummy_depfile ()
+{
+  echo "#dummy" > "$depfile"
+}
+
+# Factor out some common post-processing of the generated depfile.
+# Requires the auxiliary global variable '$tmpdepfile' to be set.
+aix_post_process_depfile ()
+{
+  # If the compiler actually managed to produce a dependency file,
+  # post-process it.
+  if test -f "$tmpdepfile"; then
+    # Each line is of the form 'foo.o: dependency.h'.
+    # Do two passes, one to just change these to
+    #   $object: dependency.h
+    # and one to simply output
+    #   dependency.h:
+    # which is needed to avoid the deleted-header problem.
+    { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
+      sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
+    } > "$depfile"
+    rm -f "$tmpdepfile"
+  else
+    make_dummy_depfile
+  fi
+}
+
+# A tabulation character.
+tab='	'
+# A newline character.
+nl='
+'
+# Character ranges might be problematic outside the C locale.
+# These definitions help.
+upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
+lower=abcdefghijklmnopqrstuvwxyz
+digits=0123456789
+alpha=${upper}${lower}
+
+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
+
+# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
+depfile=${depfile-`echo "$object" |
+  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
+tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
+
+rm -f "$tmpdepfile"
+
+# Avoid interferences from the environment.
+gccflag= dashmflag=
+
+# 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
+
+cygpath_u="cygpath -u -f -"
+if test "$depmode" = msvcmsys; then
+  # This is just like msvisualcpp but w/o cygpath translation.
+  # Just convert the backslash-escaped backslashes to single forward
+  # slashes to satisfy depend.m4
+  cygpath_u='sed s,\\\\,/,g'
+  depmode=msvisualcpp
+fi
+
+if test "$depmode" = msvc7msys; then
+  # This is just like msvc7 but w/o cygpath translation.
+  # Just convert the backslash-escaped backslashes to single forward
+  # slashes to satisfy depend.m4
+  cygpath_u='sed s,\\\\,/,g'
+  depmode=msvc7
+fi
+
+if test "$depmode" = xlc; then
+  # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
+  gccflag=-qmakedep=gcc,-MF
+  depmode=gcc
+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.
+## Unfortunately, FreeBSD c89 acceptance of flags depends upon
+## the command line argument order; so add the flags where they
+## appear in depend2.am.  Note that the slowdown incurred here
+## affects only configure: in makefiles, %FASTDEP% shortcuts this.
+  for arg
+  do
+    case $arg in
+    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
+    *)  set fnord "$@" "$arg" ;;
+    esac
+    shift # fnord
+    shift # $arg
+  done
+  "$@"
+  stat=$?
+  if test $stat -ne 0; then
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  mv "$tmpdepfile" "$depfile"
+  ;;
+
+gcc)
+## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
+## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
+## (see the conditional assignment to $gccflag above).
+## 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).  Also, it might not be
+##   supported by the other compilers which use the 'gcc' depmode.
+## - 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 -ne 0; then
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  # 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.
+## 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.  hp depmode also adds that space, but also prefixes the VPATH
+## to the object.  Take care to not repeat it in the output.
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+  tr ' ' "$nl" < "$tmpdepfile" \
+    | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -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 -ne 0; then
+    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 ' ' "$nl" < "$tmpdepfile" \
+      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
+      | tr "$nl" ' ' >> "$depfile"
+    echo >> "$depfile"
+    # The second pass generates a dummy entry for each header file.
+    tr ' ' "$nl" < "$tmpdepfile" \
+      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+      >> "$depfile"
+  else
+    make_dummy_depfile
+  fi
+  rm -f "$tmpdepfile"
+  ;;
+
+xlc)
+  # 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
+  ;;
+
+aix)
+  # The C for AIX Compiler uses -M and outputs the dependencies
+  # in a .u file.  In older versions, 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.
+  # Version 6 uses the directory in both cases.
+  set_dir_from "$object"
+  set_base_from "$object"
+  if test "$libtool" = yes; then
+    tmpdepfile1=$dir$base.u
+    tmpdepfile2=$base.u
+    tmpdepfile3=$dir.libs/$base.u
+    "$@" -Wc,-M
+  else
+    tmpdepfile1=$dir$base.u
+    tmpdepfile2=$dir$base.u
+    tmpdepfile3=$dir$base.u
+    "$@" -M
+  fi
+  stat=$?
+  if test $stat -ne 0; then
+    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+    exit $stat
+  fi
+
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+  do
+    test -f "$tmpdepfile" && break
+  done
+  aix_post_process_depfile
+  ;;
+
+tcc)
+  # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
+  # FIXME: That version still under development at the moment of writing.
+  #        Make that this statement remains true also for stable, released
+  #        versions.
+  # It will wrap lines (doesn't matter whether long or short) with a
+  # trailing '\', as in:
+  #
+  #   foo.o : \
+  #    foo.c \
+  #    foo.h \
+  #
+  # It will put a trailing '\' even on the last line, and will use leading
+  # spaces rather than leading tabs (at least since its commit 0394caf7
+  # "Emit spaces for -MD").
+  "$@" -MD -MF "$tmpdepfile"
+  stat=$?
+  if test $stat -ne 0; then
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
+  # We have to change lines of the first kind to '$object: \'.
+  sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
+  # And for each line of the second kind, we have to emit a 'dep.h:'
+  # dummy dependency, to avoid the deleted-header problem.
+  sed -n -e 's|^  *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+## The order of this option in the case statement is important, since the
+## shell code in configure will try each of these formats in the order
+## listed in this file.  A plain '-MD' option would be understood by many
+## compilers, so we must ensure this comes after the gcc and icc options.
+pgcc)
+  # Portland's C compiler understands '-MD'.
+  # Will always output deps to 'file.d' where file is the root name of the
+  # source file under compilation, even if file resides in a subdirectory.
+  # The object file name does not affect the name of the '.d' file.
+  # pgcc 10.2 will output
+  #    foo.o: sub/foo.c sub/foo.h
+  # and will wrap long lines using '\' :
+  #    foo.o: sub/foo.c ... \
+  #     sub/foo.h ... \
+  #     ...
+  set_dir_from "$object"
+  # Use the source, not the object, to determine the base name, since
+  # that's sadly what pgcc will do too.
+  set_base_from "$source"
+  tmpdepfile=$base.d
+
+  # For projects that build the same source file twice into different object
+  # files, the pgcc approach of using the *source* file root name can cause
+  # problems in parallel builds.  Use a locking strategy to avoid stomping on
+  # the same $tmpdepfile.
+  lockdir=$base.d-lock
+  trap "
+    echo '$0: caught signal, cleaning up...' >&2
+    rmdir '$lockdir'
+    exit 1
+  " 1 2 13 15
+  numtries=100
+  i=$numtries
+  while test $i -gt 0; do
+    # mkdir is a portable test-and-set.
+    if mkdir "$lockdir" 2>/dev/null; then
+      # This process acquired the lock.
+      "$@" -MD
+      stat=$?
+      # Release the lock.
+      rmdir "$lockdir"
+      break
+    else
+      # If the lock is being held by a different process, wait
+      # until the winning process is done or we timeout.
+      while test -d "$lockdir" && test $i -gt 0; do
+        sleep 1
+        i=`expr $i - 1`
+      done
+    fi
+    i=`expr $i - 1`
+  done
+  trap - 1 2 13 15
+  if test $i -le 0; then
+    echo "$0: failed to acquire lock after $numtries attempts" >&2
+    echo "$0: check lockdir '$lockdir'" >&2
+    exit 1
+  fi
+
+  if test $stat -ne 0; then
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  # Each line is of the form `foo.o: dependent.h',
+  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
+  # Do two passes, one to just change these to
+  # `$object: dependent.h' and one to simply `dependent.h:'.
+  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
+  # Some versions of the HPUX 10.20 sed can't process this invocation
+  # correctly.  Breaking it into two sed invocations is a workaround.
+  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
+    | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+hp2)
+  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
+  # compilers, which have integrated preprocessors.  The correct option
+  # to use with these is +Maked; it writes dependencies to a file named
+  # 'foo.d', which lands next to the object file, wherever that
+  # happens to be.
+  # Much of this is similar to the tru64 case; see comments there.
+  set_dir_from  "$object"
+  set_base_from "$object"
+  if test "$libtool" = yes; then
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir.libs/$base.d
+    "$@" -Wc,+Maked
+  else
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir$base.d
+    "$@" +Maked
+  fi
+  stat=$?
+  if test $stat -ne 0; then
+     rm -f "$tmpdepfile1" "$tmpdepfile2"
+     exit $stat
+  fi
+
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
+  do
+    test -f "$tmpdepfile" && break
+  done
+  if test -f "$tmpdepfile"; then
+    sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
+    # Add 'dependent.h:' lines.
+    sed -ne '2,${
+               s/^ *//
+               s/ \\*$//
+               s/$/:/
+               p
+             }' "$tmpdepfile" >> "$depfile"
+  else
+    make_dummy_depfile
+  fi
+  rm -f "$tmpdepfile" "$tmpdepfile2"
+  ;;
+
+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.
+  set_dir_from  "$object"
+  set_base_from "$object"
+
+  if test "$libtool" = yes; then
+    # Libtool generates 2 separate objects for the 2 libraries.  These
+    # two compilations output dependencies in $dir.libs/$base.o.d and
+    # in $dir$base.o.d.  We have to check for both files, because
+    # one of the two compilations can be disabled.  We should prefer
+    # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
+    # automatically cleaned when .libs/ is deleted, while ignoring
+    # the former would cause a distcleancheck panic.
+    tmpdepfile1=$dir$base.o.d          # libtool 1.5
+    tmpdepfile2=$dir.libs/$base.o.d    # Likewise.
+    tmpdepfile3=$dir.libs/$base.d      # Compaq CCC V6.2-504
+    "$@" -Wc,-MD
+  else
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir$base.d
+    tmpdepfile3=$dir$base.d
+    "$@" -MD
+  fi
+
+  stat=$?
+  if test $stat -ne 0; then
+    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+    exit $stat
+  fi
+
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+  do
+    test -f "$tmpdepfile" && break
+  done
+  # Same post-processing that is required for AIX mode.
+  aix_post_process_depfile
+  ;;
+
+msvc7)
+  if test "$libtool" = yes; then
+    showIncludes=-Wc,-showIncludes
+  else
+    showIncludes=-showIncludes
+  fi
+  "$@" $showIncludes > "$tmpdepfile"
+  stat=$?
+  grep -v '^Note: including file: ' "$tmpdepfile"
+  if test $stat -ne 0; then
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  # The first sed program below extracts the file names and escapes
+  # backslashes for cygpath.  The second sed program outputs the file
+  # name when reading, but also accumulates all include files in the
+  # hold buffer in order to output them again at the end.  This only
+  # works with sed implementations that can handle large buffers.
+  sed < "$tmpdepfile" -n '
+/^Note: including file:  *\(.*\)/ {
+  s//\1/
+  s/\\/\\\\/g
+  p
+}' | $cygpath_u | sort -u | sed -n '
+s/ /\\ /g
+s/\(.*\)/'"$tab"'\1 \\/p
+s/.\(.*\) \\/\1:/
+H
+$ {
+  s/.*/'"$tab"'/
+  G
+  p
+}' >> "$depfile"
+  echo >> "$depfile" # make sure the fragment doesn't end with a backslash
+  rm -f "$tmpdepfile"
+  ;;
+
+msvc7msys)
+  # 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
+  ;;
+
+#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 preprocessed file to stdout, regardless of -o.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test "X$1" != 'X--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
+
+  test -z "$dashmflag" && dashmflag=-M
+  # Require at least two characters before searching for ':'
+  # in the target name.  This is to cope with DOS-style filenames:
+  # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
+  "$@" $dashmflag |
+    sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
+  rm -f "$depfile"
+  cat < "$tmpdepfile" > "$depfile"
+  # Some versions of the HPUX 10.20 sed can't process this sed invocation
+  # correctly.  Breaking it into two sed invocations is a workaround.
+  tr ' ' "$nl" < "$tmpdepfile" \
+    | 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 $?
+  # Remove any Libtool call
+  if test "$libtool" = yes; then
+    while test "X$1" != 'X--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+  # X makedepend
+  shift
+  cleared=no eat=no
+  for arg
+  do
+    case $cleared in
+    no)
+      set ""; shift
+      cleared=yes ;;
+    esac
+    if test $eat = yes; then
+      eat=no
+      continue
+    fi
+    case "$arg" in
+    -D*|-I*)
+      set fnord "$@" "$arg"; shift ;;
+    # Strip any option that makedepend may not understand.  Remove
+    # the object too, otherwise makedepend will parse it as a source file.
+    -arch)
+      eat=yes ;;
+    -*|$object)
+      ;;
+    *)
+      set fnord "$@" "$arg"; shift ;;
+    esac
+  done
+  obj_suffix=`echo "$object" | sed 's/^.*\././'`
+  touch "$tmpdepfile"
+  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
+  rm -f "$depfile"
+  # makedepend may prepend the VPATH from the source file name to the object.
+  # No need to regex-escape $object, excess matching of '.' is harmless.
+  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
+  # Some versions of the HPUX 10.20 sed can't process the last invocation
+  # correctly.  Breaking it into two sed invocations is a workaround.
+  sed '1,2d' "$tmpdepfile" \
+    | tr ' ' "$nl" \
+    | 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 preprocessed file to stdout.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test "X$1" != 'X--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 -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+             -e '/^#line [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 preprocessed file to stdout.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test "X$1" != 'X--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  IFS=" "
+  for arg
+  do
+    case "$arg" in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
+        set fnord "$@"
+        shift
+        shift
+        ;;
+    *)
+        set fnord "$@" "$arg"
+        shift
+        shift
+        ;;
+    esac
+  done
+  "$@" -E 2>/dev/null |
+  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
+  echo "$tab" >> "$depfile"
+  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+msvcmsys)
+  # 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
+  ;;
+
+none)
+  exec "$@"
+  ;;
+
+*)
+  echo "Unknown depmode $depmode" 1>&2
+  exit 1
+  ;;
+esac
+
+exit 0
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/config/install-sh b/config/install-sh
new file mode 100755
index 0000000..377bb86
--- /dev/null
+++ b/config/install-sh
@@ -0,0 +1,527 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2011-11-20.07; # UTC
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# 'make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.
+
+nl='
+'
+IFS=" ""	$nl"
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit=${DOITPROG-}
+if test -z "$doit"; then
+  doit_exec=exec
+else
+  doit_exec=$doit
+fi
+
+# Put in absolute file names if you don't have them in your path;
+# or use environment vars.
+
+chgrpprog=${CHGRPPROG-chgrp}
+chmodprog=${CHMODPROG-chmod}
+chownprog=${CHOWNPROG-chown}
+cmpprog=${CMPPROG-cmp}
+cpprog=${CPPROG-cp}
+mkdirprog=${MKDIRPROG-mkdir}
+mvprog=${MVPROG-mv}
+rmprog=${RMPROG-rm}
+stripprog=${STRIPPROG-strip}
+
+posix_glob='?'
+initialize_posix_glob='
+  test "$posix_glob" != "?" || {
+    if (set -f) 2>/dev/null; then
+      posix_glob=
+    else
+      posix_glob=:
+    fi
+  }
+'
+
+posix_mkdir=
+
+# Desired mode of installed file.
+mode=0755
+
+chgrpcmd=
+chmodcmd=$chmodprog
+chowncmd=
+mvcmd=$mvprog
+rmcmd="$rmprog -f"
+stripcmd=
+
+src=
+dst=
+dir_arg=
+dst_arg=
+
+copy_on_change=false
+no_target_directory=
+
+usage="\
+Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+   or: $0 [OPTION]... SRCFILES... DIRECTORY
+   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+   or: $0 [OPTION]... -d DIRECTORIES...
+
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
+
+Options:
+     --help     display this help and exit.
+     --version  display version info and exit.
+
+  -c            (ignored)
+  -C            install only if different (preserve the last data modification time)
+  -d            create directories instead of installing files.
+  -g GROUP      $chgrpprog installed files to GROUP.
+  -m MODE       $chmodprog installed files to MODE.
+  -o USER       $chownprog installed files to USER.
+  -s            $stripprog installed files.
+  -t DIRECTORY  install into DIRECTORY.
+  -T            report an error if DSTFILE is a directory.
+
+Environment variables override the default commands:
+  CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
+  RMPROG STRIPPROG
+"
+
+while test $# -ne 0; do
+  case $1 in
+    -c) ;;
+
+    -C) copy_on_change=true;;
+
+    -d) dir_arg=true;;
+
+    -g) chgrpcmd="$chgrpprog $2"
+	shift;;
+
+    --help) echo "$usage"; exit $?;;
+
+    -m) mode=$2
+	case $mode in
+	  *' '* | *'	'* | *'
+'*	  | *'*'* | *'?'* | *'['*)
+	    echo "$0: invalid mode: $mode" >&2
+	    exit 1;;
+	esac
+	shift;;
+
+    -o) chowncmd="$chownprog $2"
+	shift;;
+
+    -s) stripcmd=$stripprog;;
+
+    -t) dst_arg=$2
+	# Protect names problematic for 'test' and other utilities.
+	case $dst_arg in
+	  -* | [=\(\)!]) dst_arg=./$dst_arg;;
+	esac
+	shift;;
+
+    -T) no_target_directory=true;;
+
+    --version) echo "$0 $scriptversion"; exit $?;;
+
+    --)	shift
+	break;;
+
+    -*)	echo "$0: invalid option: $1" >&2
+	exit 1;;
+
+    *)  break;;
+  esac
+  shift
+done
+
+if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
+  # When -d is used, all remaining arguments are directories to create.
+  # When -t is used, the destination is already specified.
+  # Otherwise, the last argument is the destination.  Remove it from $@.
+  for arg
+  do
+    if test -n "$dst_arg"; then
+      # $@ is not empty: it contains at least $arg.
+      set fnord "$@" "$dst_arg"
+      shift # fnord
+    fi
+    shift # arg
+    dst_arg=$arg
+    # Protect names problematic for 'test' and other utilities.
+    case $dst_arg in
+      -* | [=\(\)!]) dst_arg=./$dst_arg;;
+    esac
+  done
+fi
+
+if test $# -eq 0; then
+  if test -z "$dir_arg"; then
+    echo "$0: no input file specified." >&2
+    exit 1
+  fi
+  # It's OK to call 'install-sh -d' without argument.
+  # This can happen when creating conditional directories.
+  exit 0
+fi
+
+if test -z "$dir_arg"; then
+  do_exit='(exit $ret); exit $ret'
+  trap "ret=129; $do_exit" 1
+  trap "ret=130; $do_exit" 2
+  trap "ret=141; $do_exit" 13
+  trap "ret=143; $do_exit" 15
+
+  # Set umask so as not to create temps with too-generous modes.
+  # However, 'strip' requires both read and write access to temps.
+  case $mode in
+    # Optimize common cases.
+    *644) cp_umask=133;;
+    *755) cp_umask=22;;
+
+    *[0-7])
+      if test -z "$stripcmd"; then
+	u_plus_rw=
+      else
+	u_plus_rw='% 200'
+      fi
+      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
+    *)
+      if test -z "$stripcmd"; then
+	u_plus_rw=
+      else
+	u_plus_rw=,u+rw
+      fi
+      cp_umask=$mode$u_plus_rw;;
+  esac
+fi
+
+for src
+do
+  # Protect names problematic for 'test' and other utilities.
+  case $src in
+    -* | [=\(\)!]) src=./$src;;
+  esac
+
+  if test -n "$dir_arg"; then
+    dst=$src
+    dstdir=$dst
+    test -d "$dstdir"
+    dstdir_status=$?
+  else
+
+    # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+    # might cause directories to be created, which would be especially bad
+    # if $src (and thus $dsttmp) contains '*'.
+    if test ! -f "$src" && test ! -d "$src"; then
+      echo "$0: $src does not exist." >&2
+      exit 1
+    fi
+
+    if test -z "$dst_arg"; then
+      echo "$0: no destination specified." >&2
+      exit 1
+    fi
+    dst=$dst_arg
+
+    # If destination is a directory, append the input filename; won't work
+    # if double slashes aren't ignored.
+    if test -d "$dst"; then
+      if test -n "$no_target_directory"; then
+	echo "$0: $dst_arg: Is a directory" >&2
+	exit 1
+      fi
+      dstdir=$dst
+      dst=$dstdir/`basename "$src"`
+      dstdir_status=0
+    else
+      # Prefer dirname, but fall back on a substitute if dirname fails.
+      dstdir=`
+	(dirname "$dst") 2>/dev/null ||
+	expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	     X"$dst" : 'X\(//\)[^/]' \| \
+	     X"$dst" : 'X\(//\)$' \| \
+	     X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
+	echo X"$dst" |
+	    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\/\)[^/].*/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\/\)$/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\).*/{
+		   s//\1/
+		   q
+		 }
+		 s/.*/./; q'
+      `
+
+      test -d "$dstdir"
+      dstdir_status=$?
+    fi
+  fi
+
+  obsolete_mkdir_used=false
+
+  if test $dstdir_status != 0; then
+    case $posix_mkdir in
+      '')
+	# Create intermediate dirs using mode 755 as modified by the umask.
+	# This is like FreeBSD 'install' as of 1997-10-28.
+	umask=`umask`
+	case $stripcmd.$umask in
+	  # Optimize common cases.
+	  *[2367][2367]) mkdir_umask=$umask;;
+	  .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+
+	  *[0-7])
+	    mkdir_umask=`expr $umask + 22 \
+	      - $umask % 100 % 40 + $umask % 20 \
+	      - $umask % 10 % 4 + $umask % 2
+	    `;;
+	  *) mkdir_umask=$umask,go-w;;
+	esac
+
+	# With -d, create the new directory with the user-specified mode.
+	# Otherwise, rely on $mkdir_umask.
+	if test -n "$dir_arg"; then
+	  mkdir_mode=-m$mode
+	else
+	  mkdir_mode=
+	fi
+
+	posix_mkdir=false
+	case $umask in
+	  *[123567][0-7][0-7])
+	    # POSIX mkdir -p sets u+wx bits regardless of umask, which
+	    # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+	    ;;
+	  *)
+	    tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+	    trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+	    if (umask $mkdir_umask &&
+		exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+	    then
+	      if test -z "$dir_arg" || {
+		   # Check for POSIX incompatibilities with -m.
+		   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+		   # other-writable bit of parent directory when it shouldn't.
+		   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+		   ls_ld_tmpdir=`ls -ld "$tmpdir"`
+		   case $ls_ld_tmpdir in
+		     d????-?r-*) different_mode=700;;
+		     d????-?--*) different_mode=755;;
+		     *) false;;
+		   esac &&
+		   $mkdirprog -m$different_mode -p -- "$tmpdir" && {
+		     ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+		     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+		   }
+		 }
+	      then posix_mkdir=:
+	      fi
+	      rmdir "$tmpdir/d" "$tmpdir"
+	    else
+	      # Remove any dirs left behind by ancient mkdir implementations.
+	      rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+	    fi
+	    trap '' 0;;
+	esac;;
+    esac
+
+    if
+      $posix_mkdir && (
+	umask $mkdir_umask &&
+	$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+      )
+    then :
+    else
+
+      # The umask is ridiculous, or mkdir does not conform to POSIX,
+      # or it failed possibly due to a race condition.  Create the
+      # directory the slow way, step by step, checking for races as we go.
+
+      case $dstdir in
+	/*) prefix='/';;
+	[-=\(\)!]*) prefix='./';;
+	*)  prefix='';;
+      esac
+
+      eval "$initialize_posix_glob"
+
+      oIFS=$IFS
+      IFS=/
+      $posix_glob set -f
+      set fnord $dstdir
+      shift
+      $posix_glob set +f
+      IFS=$oIFS
+
+      prefixes=
+
+      for d
+      do
+	test X"$d" = X && continue
+
+	prefix=$prefix$d
+	if test -d "$prefix"; then
+	  prefixes=
+	else
+	  if $posix_mkdir; then
+	    (umask=$mkdir_umask &&
+	     $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+	    # Don't fail if two instances are running concurrently.
+	    test -d "$prefix" || exit 1
+	  else
+	    case $prefix in
+	      *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+	      *) qprefix=$prefix;;
+	    esac
+	    prefixes="$prefixes '$qprefix'"
+	  fi
+	fi
+	prefix=$prefix/
+      done
+
+      if test -n "$prefixes"; then
+	# Don't fail if two instances are running concurrently.
+	(umask $mkdir_umask &&
+	 eval "\$doit_exec \$mkdirprog $prefixes") ||
+	  test -d "$dstdir" || exit 1
+	obsolete_mkdir_used=true
+      fi
+    fi
+  fi
+
+  if test -n "$dir_arg"; then
+    { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
+    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
+    { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
+      test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
+  else
+
+    # Make a couple of temp file names in the proper directory.
+    dsttmp=$dstdir/_inst.$$_
+    rmtmp=$dstdir/_rm.$$_
+
+    # Trap to clean up those temp files at exit.
+    trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+
+    # Copy the file name to the temp name.
+    (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
+
+    # 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 $cpprog $src $dsttmp" command.
+    #
+    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
+    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
+    { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
+    { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+
+    # If -C, don't bother to copy if it wouldn't change the file.
+    if $copy_on_change &&
+       old=`LC_ALL=C ls -dlL "$dst"	2>/dev/null` &&
+       new=`LC_ALL=C ls -dlL "$dsttmp"	2>/dev/null` &&
+
+       eval "$initialize_posix_glob" &&
+       $posix_glob set -f &&
+       set X $old && old=:$2:$4:$5:$6 &&
+       set X $new && new=:$2:$4:$5:$6 &&
+       $posix_glob set +f &&
+
+       test "$old" = "$new" &&
+       $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
+    then
+      rm -f "$dsttmp"
+    else
+      # Rename the file to the real destination.
+      $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
+
+      # The rename failed, perhaps because mv can't rename something else
+      # to itself, or perhaps because mv is so ancient that it does not
+      # support -f.
+      {
+	# Now remove or move aside any old file at destination location.
+	# We try this two ways since rm can't unlink itself on some
+	# systems and the destination file might be busy for other
+	# reasons.  In this case, the final cleanup might fail but the new
+	# file should still install successfully.
+	{
+	  test ! -f "$dst" ||
+	  $doit $rmcmd -f "$dst" 2>/dev/null ||
+	  { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+	    { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+	  } ||
+	  { echo "$0: cannot unlink or rename $dst" >&2
+	    (exit 1); exit 1
+	  }
+	} &&
+
+	# Now rename the file to the real destination.
+	$doit $mvcmd "$dsttmp" "$dst"
+      }
+    fi || exit 1
+
+    trap '' 0
+  fi
+done
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/config/missing b/config/missing
new file mode 100755
index 0000000..db98974
--- /dev/null
+++ b/config/missing
@@ -0,0 +1,215 @@
+#! /bin/sh
+# Common wrapper for a few potentially missing GNU programs.
+
+scriptversion=2013-10-28.13; # UTC
+
+# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+# Originally written 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, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+if test $# -eq 0; then
+  echo 1>&2 "Try '$0 --help' for more information"
+  exit 1
+fi
+
+case $1 in
+
+  --is-lightweight)
+    # Used by our autoconf macros to check whether the available missing
+    # script is modern enough.
+    exit 0
+    ;;
+
+  --run)
+    # Back-compat with the calling convention used by older automake.
+    shift
+    ;;
+
+  -h|--h|--he|--hel|--help)
+    echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due
+to PROGRAM being missing or too old.
+
+Options:
+  -h, --help      display this help and exit
+  -v, --version   output version information and exit
+
+Supported PROGRAM values:
+  aclocal   autoconf  autoheader   autom4te  automake  makeinfo
+  bison     yacc      flex         lex       help2man
+
+Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
+'g' are ignored when checking the name.
+
+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
+
+# Run the given program, remember its exit status.
+"$@"; st=$?
+
+# If it succeeded, we are done.
+test $st -eq 0 && exit 0
+
+# Also exit now if we it failed (or wasn't found), and '--version' was
+# passed; such an option is passed most likely to detect whether the
+# program is present and works.
+case $2 in --version|--help) exit $st;; esac
+
+# Exit code 63 means version mismatch.  This often happens when the user
+# tries to use an ancient version of a tool on a file that requires a
+# minimum version.
+if test $st -eq 63; then
+  msg="probably too old"
+elif test $st -eq 127; then
+  # Program was missing.
+  msg="missing on your system"
+else
+  # Program was found and executed, but failed.  Give up.
+  exit $st
+fi
+
+perl_URL=http://www.perl.org/
+flex_URL=http://flex.sourceforge.net/
+gnu_software_URL=http://www.gnu.org/software
+
+program_details ()
+{
+  case $1 in
+    aclocal|automake)
+      echo "The '$1' program is part of the GNU Automake package:"
+      echo "<$gnu_software_URL/automake>"
+      echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:"
+      echo "<$gnu_software_URL/autoconf>"
+      echo "<$gnu_software_URL/m4/>"
+      echo "<$perl_URL>"
+      ;;
+    autoconf|autom4te|autoheader)
+      echo "The '$1' program is part of the GNU Autoconf package:"
+      echo "<$gnu_software_URL/autoconf/>"
+      echo "It also requires GNU m4 and Perl in order to run:"
+      echo "<$gnu_software_URL/m4/>"
+      echo "<$perl_URL>"
+      ;;
+  esac
+}
+
+give_advice ()
+{
+  # Normalize program name to check for.
+  normalized_program=`echo "$1" | sed '
+    s/^gnu-//; t
+    s/^gnu//; t
+    s/^g//; t'`
+
+  printf '%s\n' "'$1' is $msg."
+
+  configure_deps="'configure.ac' or m4 files included by 'configure.ac'"
+  case $normalized_program in
+    autoconf*)
+      echo "You should only need it if you modified 'configure.ac',"
+      echo "or m4 files included by it."
+      program_details 'autoconf'
+      ;;
+    autoheader*)
+      echo "You should only need it if you modified 'acconfig.h' or"
+      echo "$configure_deps."
+      program_details 'autoheader'
+      ;;
+    automake*)
+      echo "You should only need it if you modified 'Makefile.am' or"
+      echo "$configure_deps."
+      program_details 'automake'
+      ;;
+    aclocal*)
+      echo "You should only need it if you modified 'acinclude.m4' or"
+      echo "$configure_deps."
+      program_details 'aclocal'
+      ;;
+   autom4te*)
+      echo "You might have modified some maintainer files that require"
+      echo "the 'autom4te' program to be rebuilt."
+      program_details 'autom4te'
+      ;;
+    bison*|yacc*)
+      echo "You should only need it if you modified a '.y' file."
+      echo "You may want to install the GNU Bison package:"
+      echo "<$gnu_software_URL/bison/>"
+      ;;
+    lex*|flex*)
+      echo "You should only need it if you modified a '.l' file."
+      echo "You may want to install the Fast Lexical Analyzer package:"
+      echo "<$flex_URL>"
+      ;;
+    help2man*)
+      echo "You should only need it if you modified a dependency" \
+           "of a man page."
+      echo "You may want to install the GNU Help2man package:"
+      echo "<$gnu_software_URL/help2man/>"
+    ;;
+    makeinfo*)
+      echo "You should only need it if you modified a '.texi' file, or"
+      echo "any other file indirectly affecting the aspect of the manual."
+      echo "You might want to install the Texinfo package:"
+      echo "<$gnu_software_URL/texinfo/>"
+      echo "The spurious makeinfo call might also be the consequence of"
+      echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might"
+      echo "want to install GNU make:"
+      echo "<$gnu_software_URL/make/>"
+      ;;
+    *)
+      echo "You might have modified some files without having the proper"
+      echo "tools for further handling them.  Check the 'README' file, it"
+      echo "often tells you about the needed prerequisites for installing"
+      echo "this package.  You may also peek at any GNU archive site, in"
+      echo "case some other package contains this missing '$1' program."
+      ;;
+  esac
+}
+
+give_advice "$1" | sed -e '1s/^/WARNING: /' \
+                       -e '2,$s/^/         /' >&2
+
+# Propagate the correct exit status (expected to be 127 for a program
+# not found, 63 for a program that failed due to version mismatch).
+exit $st
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/configure b/configure
new file mode 100755
index 0000000..3f0df09
--- /dev/null
+++ b/configure
@@ -0,0 +1,7204 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.69 for SeqTools 4.44.1.
+#
+# Report bugs to <gb10 at sanger.ac.uk>.
+#
+#
+# Copyright (C) 1992-1996, 1998-2012 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
+
+# Use a proper internal environment variable to ensure we don't fall
+  # into an infinite loop, continuously re-executing ourselves.
+  if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
+    _as_can_reexec=no; export _as_can_reexec;
+    # 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
+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+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+as_fn_exit 255
+  fi
+  # We don't want this to propagate to other subprocesses.
+          { _as_can_reexec=; unset _as_can_reexec;}
+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
+test -x / || 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 \$(( 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 :
+  export CONFIG_SHELL
+             # 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
+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+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
+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 gb10 at sanger.ac.uk
+$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_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+  test -f "$1" && test -x "$1"
+} # as_fn_executable_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; }
+
+  # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
+  # already done that, so ensure we don't try to do so again and fall
+  # in an infinite loop.  This has already happened in practice.
+  _as_can_reexec=no; export _as_can_reexec
+  # 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 -pR'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -pR'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
+    as_ln_s='cp -pR'
+  fi
+else
+  as_ln_s='cp -pR'
+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
+
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# 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'"
+
+
+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='SeqTools'
+PACKAGE_TARNAME='seqtools'
+PACKAGE_VERSION='4.44.1'
+PACKAGE_STRING='SeqTools 4.44.1'
+PACKAGE_BUGREPORT='gb10 at sanger.ac.uk'
+PACKAGE_URL=''
+
+ac_unique_file="blixemApp/blxmain.cpp"
+# 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"
+
+enable_option_checking=no
+ac_subst_vars='am__EXEEXT_FALSE
+am__EXEEXT_TRUE
+LTLIBOBJS
+LIBOBJS
+USE_SQLITE3_FALSE
+USE_SQLITE3_TRUE
+USE_LIBCURL_FALSE
+USE_LIBCURL_TRUE
+subdirs
+USE_GBTOOLS_FALSE
+USE_GBTOOLS_TRUE
+DEPS_SQLITE3_LIBS
+DEPS_SQLITE3_CFLAGS
+DEPS_LIBS
+DEPS_CFLAGS
+PKG_CONFIG_LIBDIR
+PKG_CONFIG_PATH
+PKG_CONFIG
+EGREP
+GREP
+GLIB_GENMARSHAL
+RANLIB
+LN_S
+CPP
+am__fastdepCC_FALSE
+am__fastdepCC_TRUE
+CCDEPMODE
+ac_ct_CC
+CFLAGS
+CC
+am__fastdepCXX_FALSE
+am__fastdepCXX_TRUE
+CXXDEPMODE
+am__nodep
+AMDEPBACKSLASH
+AMDEP_FALSE
+AMDEP_TRUE
+am__quote
+am__include
+DEPDIR
+OBJEXT
+EXEEXT
+ac_ct_CXX
+CPPFLAGS
+LDFLAGS
+CXXFLAGS
+CXX
+AM_BACKSLASH
+AM_DEFAULT_VERBOSITY
+AM_DEFAULT_V
+AM_V
+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_silent_rules
+enable_dependency_tracking
+'
+      ac_precious_vars='build_alias
+host_alias
+target_alias
+CXX
+CXXFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CCC
+CC
+CFLAGS
+CPP
+GLIB_GENMARSHAL
+PKG_CONFIG
+PKG_CONFIG_PATH
+PKG_CONFIG_LIBDIR
+DEPS_CFLAGS
+DEPS_LIBS
+DEPS_SQLITE3_CFLAGS
+DEPS_SQLITE3_LIBS'
+ac_subdirs_all='gbtools'
+
+# 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
+  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 SeqTools 4.44.1 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/seqtools]
+  --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
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+  case $ac_init_help in
+     short | recursive ) echo "Configuration of SeqTools 4.44.1:";;
+   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-silent-rules   less verbose build output (undo: "make V=1")
+  --disable-silent-rules  verbose build output (undo: "make V=0")
+  --enable-dependency-tracking
+                          do not reject slow dependency extractors
+  --disable-dependency-tracking
+                          speeds up one-time build
+
+Some influential environment variables:
+  CXX         C++ compiler command
+  CXXFLAGS    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>
+  CC          C compiler command
+  CFLAGS      C compiler flags
+  CPP         C preprocessor
+  GLIB_GENMARSHAL
+              The glib-genmarshal executable.
+  PKG_CONFIG  path to pkg-config utility
+  PKG_CONFIG_PATH
+              directories to add to pkg-config's search path
+  PKG_CONFIG_LIBDIR
+              path overriding pkg-config's built-in search path
+  DEPS_CFLAGS C compiler flags for DEPS, overriding pkg-config
+  DEPS_LIBS   linker flags for DEPS, overriding pkg-config
+  DEPS_SQLITE3_CFLAGS
+              C compiler flags for DEPS_SQLITE3, overriding pkg-config
+  DEPS_SQLITE3_LIBS
+              linker flags for DEPS_SQLITE3, overriding pkg-config
+
+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 <gb10 at sanger.ac.uk>.
+_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
+SeqTools configure 4.44.1
+generated by GNU Autoconf 2.69
+
+Copyright (C) 2012 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_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_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_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_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 gb10 at sanger.ac.uk ##
+## -------------------------------- ##"
+     ) | 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_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_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_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
+
+# 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 ||
+	 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_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
+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 SeqTools $as_me 4.44.1, which was
+generated by GNU Autoconf 2.69.  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
+
+# 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_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.
+
+
+
+am__api_version='1.14'
+
+# 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 as_fn_executable_p "$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; }
+# 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 (
+   am_has_slept=no
+   for am_try in 1 2; do
+     echo "timestamp, slept: $am_has_slept" > conftest.file
+     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
+     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
+     if test "$2" = conftest.file || test $am_try -eq 2; then
+       break
+     fi
+     # Just in case.
+     sleep 1
+     am_has_slept=yes
+   done
+   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; }
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+  ( sleep 1 ) &
+  am_sleep_pid=$!
+fi
+
+rm -f conftest.file
+
+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 --is-lightweight"; then
+  am_missing_run="$MISSING "
+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 as_fn_executable_p "$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 as_fn_executable_p "$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
+	   as_fn_executable_p "$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; }
+
+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 as_fn_executable_p "$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
+
+# Check whether --enable-silent-rules was given.
+if test "${enable_silent_rules+set}" = set; then :
+  enableval=$enable_silent_rules;
+fi
+
+case $enable_silent_rules in # (((
+  yes) AM_DEFAULT_VERBOSITY=0;;
+   no) AM_DEFAULT_VERBOSITY=1;;
+    *) AM_DEFAULT_VERBOSITY=1;;
+esac
+am_make=${MAKE-make}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
+$as_echo_n "checking whether $am_make supports nested variables... " >&6; }
+if ${am_cv_make_support_nested_variables+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if $as_echo 'TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+	@$(TRUE)
+.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then
+  am_cv_make_support_nested_variables=yes
+else
+  am_cv_make_support_nested_variables=no
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
+$as_echo "$am_cv_make_support_nested_variables" >&6; }
+if test $am_cv_make_support_nested_variables = yes; then
+    AM_V='$(V)'
+  AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+  AM_V=$AM_DEFAULT_VERBOSITY
+  AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AM_BACKSLASH='\'
+
+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='seqtools'
+ VERSION='4.44.1'
+
+
+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"}
+
+# For better backward compatibility.  To be removed once Automake 1.9.x
+# dies out for good.  For more background, see:
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+mkdir_p='$(MKDIR_P)'
+
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+# Always define AMTAR for backward compatibility.  Yes, it's still used
+# in the wild :-(  We should find a proper way to deprecate it ...
+AMTAR='$${TAR-tar}'
+
+
+# We'll loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar  pax cpio none'
+
+am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
+
+
+
+
+
+
+# POSIX will say in a future version that running "rm -f" with no argument
+# is OK; and we want to be able to make that assumption in our Makefile
+# recipes.  So use an aggressive probe to check that the usage we want is
+# actually supported "in the wild" to an acceptable degree.
+# See automake bug#10828.
+# To make any issue more visible, cause the running configure to be aborted
+# by default if the 'rm' program in use doesn't match our expectations; the
+# user can still override this though.
+if rm -f && rm -fr && rm -rf; then : OK; else
+  cat >&2 <<'END'
+Oops!
+
+Your 'rm' program seems unable to run without file operands specified
+on the command line, even when the '-f' option is present.  This is contrary
+to the behaviour of most rm programs out there, and not conforming with
+the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
+
+Please tell bug-automake at gnu.org about your system, including the value
+of your $PATH and any error possibly output before this message.  This
+can help us improve future automake versions.
+
+END
+  if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
+    echo 'Configuration will proceed anyway, since you have set the' >&2
+    echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
+    echo >&2
+  else
+    cat >&2 <<'END'
+Aborting the configuration process, to ensure you take notice of the issue.
+
+You can download and install GNU coreutils to get an 'rm' implementation
+that behaves properly: <http://www.gnu.org/software/coreutils/>.
+
+If you want to complete the configuration process using your problematic
+'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+to "yes", and re-run configure.
+
+END
+    as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5
+  fi
+fi
+ac_config_headers="$ac_config_headers config.h"
+
+
+# Set up calling of Makefiles in toplevel directory and subdirectories
+ac_config_files="$ac_config_files Makefile blixemApp/Makefile dotterApp/Makefile belvuApp/Makefile seqtoolsUtils/Makefile doc/Makefile doc/User_doc/Makefile doc/Design_notes/Makefile doc/Design_notes/modules/Makefile examples/Makefile test/Makefile test/data/Makefile test/scripts/Makefile test/scripts/automated/Makefile test/scripts/automated/belvu/Makefile test/scripts/automated/blixem/Makefile test/scripts/automated/dotter/Makefile test/scripts/manual/Makefile test/scripts/manual/belvu [...]
+
+
+# removed from the above: libpfetch/Makefile
+
+
+# Check if this is a Git repository and, if so, include info about the current
+# status in the version info. Otherwise use PACKAGE_VERSION (which will get
+# set from VERSION_NUMBER in version.m4).
+if test -d "$srcdir/../.git"
+then
+cat >>confdefs.h <<_ACEOF
+#define SEQTOOLS_VERSION "`git describe --abbrev=1`"
+_ACEOF
+
+else
+$as_echo "#define SEQTOOLS_VERSION PACKAGE_VERSION" >>confdefs.h
+
+fi
+
+# Checks for programs.
+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 as_fn_executable_p "$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 as_fn_executable_p "$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
+
+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_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
+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='\'
+  am__nodep='_no'
+fi
+ if test "x$enable_dependency_tracking" != xno; then
+  AMDEP_TRUE=
+  AMDEP_FALSE='#'
+else
+  AMDEP_TRUE='#'
+  AMDEP_FALSE=
+fi
+
+
+
+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".
+  rm -rf conftest.dir
+  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 10 /bin/sh.
+      echo '/* dummy */' > 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
+      ;;
+    msvc7 | msvc7msys | 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
+
+
+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 as_fn_executable_p "$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 as_fn_executable_p "$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 as_fn_executable_p "$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 as_fn_executable_p "$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 as_fn_executable_p "$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 as_fn_executable_p "$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
+
+{ $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>
+struct stat;
+/* 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
+
+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 whether $CC understands -c and -o together" >&5
+$as_echo_n "checking whether $CC understands -c and -o together... " >&6; }
+if ${am_cv_prog_cc_c_o+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+  # Make sure it works both with $CC and with simple cc.
+  # Following AC_PROG_CC_C_O, we do the test twice because some
+  # compilers refuse to overwrite an existing .o file with -o,
+  # though they will create one.
+  am_cv_prog_cc_c_o=yes
+  for am_i in 1 2; do
+    if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5
+   ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } \
+         && test -f conftest2.$ac_objext; then
+      : OK
+    else
+      am_cv_prog_cc_c_o=no
+      break
+    fi
+  done
+  rm -f core conftest*
+  unset am_i
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
+$as_echo "$am_cv_prog_cc_c_o" >&6; }
+if test "$am_cv_prog_cc_c_o" != yes; then
+   # Losing compiler, so override with the script.
+   # FIXME: It is wrong to rewrite CC.
+   # But if we don't then we get into trouble of one sort or another.
+   # A longer-term fix would be to have automake use am__CC in this case,
+   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+   CC="$am_aux_dir/compile $CC"
+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".
+  rm -rf conftest.dir
+  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 10 /bin/sh.
+      echo '/* dummy */' > 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
+      ;;
+    msvc7 | msvc7msys | 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
+
+
+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 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
+
+{ $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
+
+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 as_fn_executable_p "$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 as_fn_executable_p "$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
+
+
+# Extract the first word of "glib-genmarshal", so it can be a program name with args.
+set dummy glib-genmarshal; 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_GLIB_GENMARSHAL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$GLIB_GENMARSHAL"; then
+  ac_cv_prog_GLIB_GENMARSHAL="$GLIB_GENMARSHAL" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_GLIB_GENMARSHAL="glib-genmarshal"
+    $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
+GLIB_GENMARSHAL=$ac_cv_prog_GLIB_GENMARSHAL
+if test -n "$GLIB_GENMARSHAL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GLIB_GENMARSHAL" >&5
+$as_echo "$GLIB_GENMARSHAL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+# Checks for libraries.
+
+# Checks for header files.
+
+
+{ $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"
+      as_fn_executable_p "$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"
+      as_fn_executable_p "$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 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 arpa/inet.h netdb.h netinet/in.h stdlib.h string.h sys/socket.h unistd.h gtk.h sqlite3.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.
+ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default"
+if test "x$ac_cv_type_pid_t" = xyes; then :
+
+else
+
+cat >>confdefs.h <<_ACEOF
+#define pid_t int
+_ACEOF
+
+fi
+
+ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
+if test "x$ac_cv_type_size_t" = xyes; then :
+
+else
+
+cat >>confdefs.h <<_ACEOF
+#define size_t unsigned int
+_ACEOF
+
+fi
+
+
+# Checks for library functions.
+for ac_header in vfork.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "vfork.h" "ac_cv_header_vfork_h" "$ac_includes_default"
+if test "x$ac_cv_header_vfork_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_VFORK_H 1
+_ACEOF
+
+fi
+
+done
+
+for ac_func in fork vfork
+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
+
+if test "x$ac_cv_func_fork" = xyes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fork" >&5
+$as_echo_n "checking for working fork... " >&6; }
+if ${ac_cv_func_fork_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  ac_cv_func_fork_works=cross
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+
+	  /* By Ruediger Kuhlmann. */
+	  return fork () < 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_func_fork_works=yes
+else
+  ac_cv_func_fork_works=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_fork_works" >&5
+$as_echo "$ac_cv_func_fork_works" >&6; }
+
+else
+  ac_cv_func_fork_works=$ac_cv_func_fork
+fi
+if test "x$ac_cv_func_fork_works" = xcross; then
+  case $host in
+    *-*-amigaos* | *-*-msdosdjgpp*)
+      # Override, as these systems have only a dummy fork() stub
+      ac_cv_func_fork_works=no
+      ;;
+    *)
+      ac_cv_func_fork_works=yes
+      ;;
+  esac
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5
+$as_echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;}
+fi
+ac_cv_func_vfork_works=$ac_cv_func_vfork
+if test "x$ac_cv_func_vfork" = xyes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working vfork" >&5
+$as_echo_n "checking for working vfork... " >&6; }
+if ${ac_cv_func_vfork_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  ac_cv_func_vfork_works=cross
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+/* Thanks to Paul Eggert for this test.  */
+$ac_includes_default
+#include <sys/wait.h>
+#ifdef HAVE_VFORK_H
+# include <vfork.h>
+#endif
+/* On some sparc systems, changes by the child to local and incoming
+   argument registers are propagated back to the parent.  The compiler
+   is told about this with #include <vfork.h>, but some compilers
+   (e.g. gcc -O) don't grok <vfork.h>.  Test for this by using a
+   static variable whose address is put into a register that is
+   clobbered by the vfork.  */
+static void
+#ifdef __cplusplus
+sparc_address_test (int arg)
+# else
+sparc_address_test (arg) int arg;
+#endif
+{
+  static pid_t child;
+  if (!child) {
+    child = vfork ();
+    if (child < 0) {
+      perror ("vfork");
+      _exit(2);
+    }
+    if (!child) {
+      arg = getpid();
+      write(-1, "", 0);
+      _exit (arg);
+    }
+  }
+}
+
+int
+main ()
+{
+  pid_t parent = getpid ();
+  pid_t child;
+
+  sparc_address_test (0);
+
+  child = vfork ();
+
+  if (child == 0) {
+    /* Here is another test for sparc vfork register problems.  This
+       test uses lots of local variables, at least as many local
+       variables as main has allocated so far including compiler
+       temporaries.  4 locals are enough for gcc 1.40.3 on a Solaris
+       4.1.3 sparc, but we use 8 to be safe.  A buggy compiler should
+       reuse the register of parent for one of the local variables,
+       since it will think that parent can't possibly be used any more
+       in this routine.  Assigning to the local variable will thus
+       munge parent in the parent process.  */
+    pid_t
+      p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(),
+      p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid();
+    /* Convince the compiler that p..p7 are live; otherwise, it might
+       use the same hardware register for all 8 local variables.  */
+    if (p != p1 || p != p2 || p != p3 || p != p4
+	|| p != p5 || p != p6 || p != p7)
+      _exit(1);
+
+    /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent
+       from child file descriptors.  If the child closes a descriptor
+       before it execs or exits, this munges the parent's descriptor
+       as well.  Test for this by closing stdout in the child.  */
+    _exit(close(fileno(stdout)) != 0);
+  } else {
+    int status;
+    struct stat st;
+
+    while (wait(&status) != child)
+      ;
+    return (
+	 /* Was there some problem with vforking?  */
+	 child < 0
+
+	 /* Did the child fail?  (This shouldn't happen.)  */
+	 || status
+
+	 /* Did the vfork/compiler bug occur?  */
+	 || parent != getpid()
+
+	 /* Did the file descriptor bug occur?  */
+	 || fstat(fileno(stdout), &st) != 0
+	 );
+  }
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_func_vfork_works=yes
+else
+  ac_cv_func_vfork_works=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_vfork_works" >&5
+$as_echo "$ac_cv_func_vfork_works" >&6; }
+
+fi;
+if test "x$ac_cv_func_fork_works" = xcross; then
+  ac_cv_func_vfork_works=$ac_cv_func_vfork
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5
+$as_echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;}
+fi
+
+if test "x$ac_cv_func_vfork_works" = xyes; then
+
+$as_echo "#define HAVE_WORKING_VFORK 1" >>confdefs.h
+
+else
+
+$as_echo "#define vfork fork" >>confdefs.h
+
+fi
+if test "x$ac_cv_func_fork_works" = xyes; then
+
+$as_echo "#define HAVE_WORKING_FORK 1" >>confdefs.h
+
+fi
+
+for ac_func in dup2 floor gethostbyname memset socket sqrt strcasecmp strchr strcspn strerror strncasecmp strrchr strstr strtol uname
+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
+
+
+# Check for dependencies required by all executables
+
+
+
+
+
+
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+	if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
+set dummy ${ac_tool_prefix}pkg-config; 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_PKG_CONFIG+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_PKG_CONFIG="$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
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+if test -n "$PKG_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
+$as_echo "$PKG_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_path_PKG_CONFIG"; then
+  ac_pt_PKG_CONFIG=$PKG_CONFIG
+  # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; 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_ac_pt_PKG_CONFIG+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $ac_pt_PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_ac_pt_PKG_CONFIG="$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
+ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
+if test -n "$ac_pt_PKG_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
+$as_echo "$ac_pt_PKG_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_pt_PKG_CONFIG" = x; then
+    PKG_CONFIG=""
+  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
+    PKG_CONFIG=$ac_pt_PKG_CONFIG
+  fi
+else
+  PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
+fi
+
+fi
+if test -n "$PKG_CONFIG"; then
+	_pkg_min_version=0.9.0
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5
+$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
+	if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; 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" >&5
+$as_echo "no" >&6; }
+		PKG_CONFIG=""
+	fi
+fi
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for DEPS" >&5
+$as_echo_n "checking for DEPS... " >&6; }
+
+if test -n "$DEPS_CFLAGS"; then
+    pkg_cv_DEPS_CFLAGS="$DEPS_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 gtk+-2.0 >= 2.10\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "glib-2.0 gtk+-2.0 >= 2.10") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_DEPS_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0 gtk+-2.0 >= 2.10" 2>/dev/null`
+		      test "x$?" != "x0" && pkg_failed=yes
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$DEPS_LIBS"; then
+    pkg_cv_DEPS_LIBS="$DEPS_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 gtk+-2.0 >= 2.10\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "glib-2.0 gtk+-2.0 >= 2.10") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_DEPS_LIBS=`$PKG_CONFIG --libs "glib-2.0 gtk+-2.0 >= 2.10" 2>/dev/null`
+		      test "x$?" != "x0" && pkg_failed=yes
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+   	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        DEPS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "glib-2.0 gtk+-2.0 >= 2.10" 2>&1`
+        else
+	        DEPS_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "glib-2.0 gtk+-2.0 >= 2.10" 2>&1`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$DEPS_PKG_ERRORS" >&5
+
+	as_fn_error $? "Package requirements (glib-2.0 gtk+-2.0 >= 2.10) were not met:
+
+$DEPS_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables DEPS_CFLAGS
+and DEPS_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details." "$LINENO" 5
+elif test $pkg_failed = untried; then
+     	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables DEPS_CFLAGS
+and DEPS_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details" "$LINENO" 5; }
+else
+	DEPS_CFLAGS=$pkg_cv_DEPS_CFLAGS
+	DEPS_LIBS=$pkg_cv_DEPS_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+fi
+
+# Check for dependencies required by sqlite code
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for DEPS_SQLITE3" >&5
+$as_echo_n "checking for DEPS_SQLITE3... " >&6; }
+
+if test -n "$DEPS_SQLITE3_CFLAGS"; then
+    pkg_cv_DEPS_SQLITE3_CFLAGS="$DEPS_SQLITE3_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sqlite3\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "sqlite3") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_DEPS_SQLITE3_CFLAGS=`$PKG_CONFIG --cflags "sqlite3" 2>/dev/null`
+		      test "x$?" != "x0" && pkg_failed=yes
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$DEPS_SQLITE3_LIBS"; then
+    pkg_cv_DEPS_SQLITE3_LIBS="$DEPS_SQLITE3_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sqlite3\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "sqlite3") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_DEPS_SQLITE3_LIBS=`$PKG_CONFIG --libs "sqlite3" 2>/dev/null`
+		      test "x$?" != "x0" && pkg_failed=yes
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+   	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        DEPS_SQLITE3_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "sqlite3" 2>&1`
+        else
+	        DEPS_SQLITE3_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "sqlite3" 2>&1`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$DEPS_SQLITE3_PKG_ERRORS" >&5
+
+	HAVE_SQLITE3=0
+elif test $pkg_failed = untried; then
+     	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+	HAVE_SQLITE3=0
+else
+	DEPS_SQLITE3_CFLAGS=$pkg_cv_DEPS_SQLITE3_CFLAGS
+	DEPS_SQLITE3_LIBS=$pkg_cv_DEPS_SQLITE3_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	HAVE_SQLITE3=1
+fi
+
+# Check if the gbtools library exists as a subdirectory. This should be the case for
+# the dist. It doesn't exist in the git repository though, so for development it
+# either needs to be copied in or installed locally.
+ if test -e "$srcdir/gbtools/configure.ac"; then
+  USE_GBTOOLS_TRUE=
+  USE_GBTOOLS_FALSE='#'
+else
+  USE_GBTOOLS_TRUE='#'
+  USE_GBTOOLS_FALSE=
+fi
+
+
+
+if test -z "$USE_GBTOOLS_TRUE"; then :
+  subdirs="$subdirs gbtools"
+
+fi
+
+# Check for the curl library. This is only required by blixemh, so don't fail
+# if we can't find it, but set the USE_LIBCURL to false. Note: I think we should
+# probably be using pkg-config to find the curl dependencies, but that doesn't work
+# on my mac (perhaps because it's in /usr instead of /opt/local), so I just check for
+# the header and set the dependencies manually in Makefile.am.
+#PKG_CHECK_MODULES([LIBCURL_DEPS], [curl], [HAVE_LIBCURL=1], [HAVE_LIBCURL=0])
+for ac_header in curl/curl.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "curl/curl.h" "ac_cv_header_curl_curl_h" "$ac_includes_default"
+if test "x$ac_cv_header_curl_curl_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_CURL_CURL_H 1
+_ACEOF
+ HAVE_LIBCURL=1
+else
+  HAVE_LIBCURL=0
+fi
+
+done
+
+ if test "$HAVE_LIBCURL" -eq 1; then
+  USE_LIBCURL_TRUE=
+  USE_LIBCURL_FALSE='#'
+else
+  USE_LIBCURL_TRUE='#'
+  USE_LIBCURL_FALSE=
+fi
+
+
+# Similar check for sqlite
+ if test "$HAVE_SQLITE3" -eq 1; then
+  USE_SQLITE3_TRUE=
+  USE_SQLITE3_FALSE='#'
+else
+  USE_SQLITE3_TRUE='#'
+  USE_SQLITE3_FALSE=
+fi
+
+
+# Check for execinfo.h. This is used to provide backtraces but is not available
+# on all systems.
+for ac_header in execinfo.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "execinfo.h" "ac_cv_header_execinfo_h" "$ac_includes_default"
+if test "x$ac_cv_header_execinfo_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_EXECINFO_H 1
+_ACEOF
+
+fi
+
+done
+
+
+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
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5
+$as_echo_n "checking that generated files are newer than configure... " >&6; }
+   if test -n "$am_sleep_pid"; then
+     # Hide warnings about reused PIDs.
+     wait $am_sleep_pid 2>/dev/null
+   fi
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5
+$as_echo "done" >&6; }
+ 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__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
+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 "${USE_GBTOOLS_TRUE}" && test -z "${USE_GBTOOLS_FALSE}"; then
+  as_fn_error $? "conditional \"USE_GBTOOLS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_LIBCURL_TRUE}" && test -z "${USE_LIBCURL_FALSE}"; then
+  as_fn_error $? "conditional \"USE_LIBCURL\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_SQLITE3_TRUE}" && test -z "${USE_SQLITE3_FALSE}"; then
+  as_fn_error $? "conditional \"USE_SQLITE3\" 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 -pR'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -pR'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
+    as_ln_s='cp -pR'
+  fi
+else
+  as_ln_s='cp -pR'
+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
+
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+  test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# 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 SeqTools $as_me 4.44.1, which was
+generated by GNU Autoconf 2.69.  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 <gb10 at sanger.ac.uk>."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_version="\\
+SeqTools config.status 4.44.1
+configured by $0, generated by GNU Autoconf 2.69,
+  with options \\"\$ac_cs_config\\"
+
+Copyright (C) 2012 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"
+
+_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" ;;
+    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+    "blixemApp/Makefile") CONFIG_FILES="$CONFIG_FILES blixemApp/Makefile" ;;
+    "dotterApp/Makefile") CONFIG_FILES="$CONFIG_FILES dotterApp/Makefile" ;;
+    "belvuApp/Makefile") CONFIG_FILES="$CONFIG_FILES belvuApp/Makefile" ;;
+    "seqtoolsUtils/Makefile") CONFIG_FILES="$CONFIG_FILES seqtoolsUtils/Makefile" ;;
+    "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
+    "doc/User_doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/User_doc/Makefile" ;;
+    "doc/Design_notes/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Design_notes/Makefile" ;;
+    "doc/Design_notes/modules/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Design_notes/modules/Makefile" ;;
+    "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;;
+    "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;;
+    "test/data/Makefile") CONFIG_FILES="$CONFIG_FILES test/data/Makefile" ;;
+    "test/scripts/Makefile") CONFIG_FILES="$CONFIG_FILES test/scripts/Makefile" ;;
+    "test/scripts/automated/Makefile") CONFIG_FILES="$CONFIG_FILES test/scripts/automated/Makefile" ;;
+    "test/scripts/automated/belvu/Makefile") CONFIG_FILES="$CONFIG_FILES test/scripts/automated/belvu/Makefile" ;;
+    "test/scripts/automated/blixem/Makefile") CONFIG_FILES="$CONFIG_FILES test/scripts/automated/blixem/Makefile" ;;
+    "test/scripts/automated/dotter/Makefile") CONFIG_FILES="$CONFIG_FILES test/scripts/automated/dotter/Makefile" ;;
+    "test/scripts/manual/Makefile") CONFIG_FILES="$CONFIG_FILES test/scripts/manual/Makefile" ;;
+    "test/scripts/manual/belvu/Makefile") CONFIG_FILES="$CONFIG_FILES test/scripts/manual/belvu/Makefile" ;;
+    "test/scripts/manual/blixem/Makefile") CONFIG_FILES="$CONFIG_FILES test/scripts/manual/blixem/Makefile" ;;
+    "test/scripts/manual/dotter/Makefile") CONFIG_FILES="$CONFIG_FILES test/scripts/manual/dotter/Makefile" ;;
+    "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+
+  *) 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"" || {
+  # Older Autoconf 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"`
+    # 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'`; 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
+}
+ ;;
+
+  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
+
+#
+# CONFIG_SUBDIRS section.
+#
+if test "$no_recursion" != yes; then
+
+  # Remove --cache-file, --srcdir, and --disable-option-checking arguments
+  # so they do not pile up.
+  ac_sub_configure_args=
+  ac_prev=
+  eval "set x $ac_configure_args"
+  shift
+  for ac_arg
+  do
+    if test -n "$ac_prev"; then
+      ac_prev=
+      continue
+    fi
+    case $ac_arg in
+    -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=*)
+      ;;
+    --config-cache | -C)
+      ;;
+    -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+      ac_prev=srcdir ;;
+    -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+      ;;
+    -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+      ac_prev=prefix ;;
+    -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+      ;;
+    --disable-option-checking)
+      ;;
+    *)
+      case $ac_arg in
+      *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+      esac
+      as_fn_append ac_sub_configure_args " '$ac_arg'" ;;
+    esac
+  done
+
+  # Always prepend --prefix to ensure using the same prefix
+  # in subdir configurations.
+  ac_arg="--prefix=$prefix"
+  case $ac_arg in
+  *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+  esac
+  ac_sub_configure_args="'$ac_arg' $ac_sub_configure_args"
+
+  # Pass --silent
+  if test "$silent" = yes; then
+    ac_sub_configure_args="--silent $ac_sub_configure_args"
+  fi
+
+  # Always prepend --disable-option-checking to silence warnings, since
+  # different subdirs can have different --enable and --with options.
+  ac_sub_configure_args="--disable-option-checking $ac_sub_configure_args"
+
+  ac_popdir=`pwd`
+  for ac_dir in : $subdirs; do test "x$ac_dir" = x: && continue
+
+    # Do not complain, so a configure script can configure whichever
+    # parts of a large source tree are present.
+    test -d "$srcdir/$ac_dir" || continue
+
+    ac_msg="=== configuring in $ac_dir (`pwd`/$ac_dir)"
+    $as_echo "$as_me:${as_lineno-$LINENO}: $ac_msg" >&5
+    $as_echo "$ac_msg" >&6
+    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
+
+
+    cd "$ac_dir"
+
+    # Check for guested configure; otherwise get Cygnus style configure.
+    if test -f "$ac_srcdir/configure.gnu"; then
+      ac_sub_configure=$ac_srcdir/configure.gnu
+    elif test -f "$ac_srcdir/configure"; then
+      ac_sub_configure=$ac_srcdir/configure
+    elif test -f "$ac_srcdir/configure.in"; then
+      # This should be Cygnus configure.
+      ac_sub_configure=$ac_aux_dir/configure
+    else
+      { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no configuration information is in $ac_dir" >&5
+$as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2;}
+      ac_sub_configure=
+    fi
+
+    # The recursion is here.
+    if test -n "$ac_sub_configure"; then
+      # Make the cache file name correct relative to the subdirectory.
+      case $cache_file in
+      [\\/]* | ?:[\\/]* ) ac_sub_cache_file=$cache_file ;;
+      *) # Relative name.
+	ac_sub_cache_file=$ac_top_build_prefix$cache_file ;;
+      esac
+
+      { $as_echo "$as_me:${as_lineno-$LINENO}: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&5
+$as_echo "$as_me: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&6;}
+      # The eval makes quoting arguments work.
+      eval "\$SHELL \"\$ac_sub_configure\" $ac_sub_configure_args \
+	   --cache-file=\"\$ac_sub_cache_file\" --srcdir=\"\$ac_srcdir\"" ||
+	as_fn_error $? "$ac_sub_configure failed for $ac_dir" "$LINENO" 5
+    fi
+
+    cd "$ac_popdir"
+  done
+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
+
+
+
+echo \
+"-------------------------------------------------
+
+ ${PACKAGE_NAME} Version ${PACKAGE_VERSION}
+
+ Prefix: '${prefix}'
+ Compiler: '${CC} ${CFLAGS} ${CPPFLAGS}'
+
+ Now type 'make [<target>]'
+   where the optional [<target>] is:
+     all       - build all binaries (default)
+     install   - build and install everything
+     <program> - build specific program
+"
+
+if test "$HAVE_LIBCURL" -eq 0; then
+echo " Warning: libcurl not found; excluding blixemh
+"
+fi
+
+if test "$HAVE_SQLITE3" -eq 0; then
+echo " Warning: sqlite3 not found
+"
+fi
+
+echo "-------------------------------------------------
+"
+
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000..34f87d7
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,130 @@
+#                                               -*- Autoconf -*-
+# Process this file with autoconf to produce a configure script.
+
+m4_include([./seqtools_version.m4])
+
+AC_PREREQ([2.50])
+AC_INIT([SeqTools], VERSION_NUMBER, [gb10 at sanger.ac.uk])
+AC_CONFIG_AUX_DIR([config])
+AC_CONFIG_SRCDIR([blixemApp/blxmain.cpp])
+AM_INIT_AUTOMAKE([1.9 foreign])
+AC_CONFIG_HEADERS([config.h])
+
+# Set up calling of Makefiles in toplevel directory and subdirectories
+AC_CONFIG_FILES([Makefile
+blixemApp/Makefile
+dotterApp/Makefile
+belvuApp/Makefile
+seqtoolsUtils/Makefile
+doc/Makefile
+doc/User_doc/Makefile
+doc/Design_notes/Makefile
+doc/Design_notes/modules/Makefile
+examples/Makefile
+test/Makefile
+test/data/Makefile
+test/scripts/Makefile
+test/scripts/automated/Makefile
+test/scripts/automated/belvu/Makefile
+test/scripts/automated/blixem/Makefile
+test/scripts/automated/dotter/Makefile
+test/scripts/manual/Makefile
+test/scripts/manual/belvu/Makefile
+test/scripts/manual/blixem/Makefile
+test/scripts/manual/dotter/Makefile
+])
+
+# removed from the above: libpfetch/Makefile
+
+
+# Check if this is a Git repository and, if so, include info about the current
+# status in the version info. Otherwise use PACKAGE_VERSION (which will get
+# set from VERSION_NUMBER in version.m4).
+if test -d "$srcdir/../.git" 
+then AC_DEFINE_UNQUOTED([SEQTOOLS_VERSION], ["`git describe --abbrev=1`"], ["SeqTools package version"])
+else AC_DEFINE([SEQTOOLS_VERSION], [PACKAGE_VERSION], ["SeqTools package version"])
+fi
+
+# Checks for programs.
+AC_PROG_CXX
+AC_PROG_CC
+AC_PROG_CPP
+AC_PROG_INSTALL
+AC_PROG_LN_S
+AC_PROG_MAKE_SET
+AC_PROG_RANLIB
+AC_ARG_VAR(GLIB_GENMARSHAL, [The glib-genmarshal executable.])
+AC_CHECK_PROG(GLIB_GENMARSHAL, glib-genmarshal, glib-genmarshal)
+
+# Checks for libraries.
+
+# Checks for header files.
+AC_CHECK_HEADERS([arpa/inet.h netdb.h netinet/in.h stdlib.h string.h sys/socket.h unistd.h gtk.h sqlite3.h])
+
+# Checks for typedefs, structures, and compiler characteristics.
+AC_TYPE_PID_T
+AC_TYPE_SIZE_T
+
+# Checks for library functions.
+AC_FUNC_FORK
+AC_CHECK_FUNCS([dup2 floor gethostbyname memset socket sqrt strcasecmp strchr strcspn strerror strncasecmp strrchr strstr strtol uname])
+
+# Check for dependencies required by all executables
+PKG_CHECK_MODULES([DEPS], [glib-2.0 gtk+-2.0 >= 2.10])
+
+# Check for dependencies required by sqlite code
+PKG_CHECK_MODULES([DEPS_SQLITE3], [sqlite3], [HAVE_SQLITE3=1], [HAVE_SQLITE3=0])
+
+# Check if the gbtools library exists as a subdirectory. This should be the case for
+# the dist. It doesn't exist in the git repository though, so for development it
+# either needs to be copied in or installed locally.
+AM_CONDITIONAL([USE_GBTOOLS], [test -e "$srcdir/gbtools/configure.ac"])
+AM_COND_IF([USE_GBTOOLS], [AC_CONFIG_SUBDIRS([gbtools])])
+
+# Check for the curl library. This is only required by blixemh, so don't fail
+# if we can't find it, but set the USE_LIBCURL to false. Note: I think we should 
+# probably be using pkg-config to find the curl dependencies, but that doesn't work
+# on my mac (perhaps because it's in /usr instead of /opt/local), so I just check for
+# the header and set the dependencies manually in Makefile.am.
+#PKG_CHECK_MODULES([LIBCURL_DEPS], [curl], [HAVE_LIBCURL=1], [HAVE_LIBCURL=0])
+AC_CHECK_HEADERS([curl/curl.h], [HAVE_LIBCURL=1], [HAVE_LIBCURL=0])
+AM_CONDITIONAL([USE_LIBCURL], [test "$HAVE_LIBCURL" -eq 1])
+
+# Similar check for sqlite
+AM_CONDITIONAL([USE_SQLITE3], [test "$HAVE_SQLITE3" -eq 1])
+
+# Check for execinfo.h. This is used to provide backtraces but is not available
+# on all systems.
+AC_CHECK_HEADERS([execinfo.h])
+
+AC_OUTPUT
+
+
+echo \
+"-------------------------------------------------
+
+ ${PACKAGE_NAME} Version ${PACKAGE_VERSION}
+
+ Prefix: '${prefix}'
+ Compiler: '${CC} ${CFLAGS} ${CPPFLAGS}'
+
+ Now type 'make @<:@<target>@:>@'
+   where the optional @<:@<target>@:>@ is:
+     all       - build all binaries (default)
+     install   - build and install everything
+     <program> - build specific program
+"
+
+if test "$HAVE_LIBCURL" -eq 0; then
+echo " Warning: libcurl not found; excluding blixemh
+"
+fi
+
+if test "$HAVE_SQLITE3" -eq 0; then
+echo " Warning: sqlite3 not found
+"
+fi
+
+echo "-------------------------------------------------
+"
+
diff --git a/doc/Design_notes/Makefile b/doc/Design_notes/Makefile
new file mode 100644
index 0000000..55a20b5
--- /dev/null
+++ b/doc/Design_notes/Makefile
@@ -0,0 +1,592 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# doc/Design_notes/Makefile.  Generated from Makefile.in by configure.
+
+# Copyright (C) 1994-2013 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.
+
+
+VPATH = ../../../../doc/Design_notes
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/seqtools
+pkgincludedir = $(includedir)/seqtools
+pkglibdir = $(libdir)/seqtools
+pkglibexecdir = $(libexecdir)/seqtools
+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 = :
+subdir = doc/Design_notes
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/./seqtools_version.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_$(V))
+am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY))
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-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 \
+	tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+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 = ${SHELL} /var/tmp/seqtools.12251/seqtools/src/config/missing aclocal-1.14
+AMTAR = $${TAR-tar}
+AM_DEFAULT_VERBOSITY = 1
+AUTOCONF = ${SHELL} /var/tmp/seqtools.12251/seqtools/src/config/missing autoconf
+AUTOHEADER = ${SHELL} /var/tmp/seqtools.12251/seqtools/src/config/missing autoheader
+AUTOMAKE = ${SHELL} /var/tmp/seqtools.12251/seqtools/src/config/missing automake-1.14
+AWK = gawk
+CC = gcc
+CCDEPMODE = depmode=gcc3
+CFLAGS = -g -O2
+CPP = gcc -E
+CPPFLAGS = 
+CXX = g++
+CXXDEPMODE = depmode=gcc3
+CXXFLAGS = -g -O2
+CYGPATH_W = echo
+DEFS = -DHAVE_CONFIG_H
+DEPDIR = .deps
+DEPS_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/gtk-2.0 -I/usr/lib/x86_64-linux-gnu/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/pango-1.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/freetype2 -I/usr/include/pixman-1 -I/usr/include/libpng12 -I/usr/include/harfbuzz  
+DEPS_LIBS = -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo -lpango-1.0 -lfontconfig -lgobject-2.0 -lglib-2.0 -lfreetype  
+DEPS_SQLITE3_CFLAGS =  
+DEPS_SQLITE3_LIBS = -lsqlite3  
+ECHO_C = 
+ECHO_N = -n
+ECHO_T = 
+EGREP = /bin/grep -E
+EXEEXT = 
+GLIB_GENMARSHAL = glib-genmarshal
+GREP = /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
+LDFLAGS = -Xlinker -rpath -Xlinker /software/acedb/gtk/lib
+LIBOBJS = 
+LIBS = 
+LN_S = ln -s
+LTLIBOBJS = 
+MAKEINFO = ${SHELL} /var/tmp/seqtools.12251/seqtools/src/config/missing makeinfo
+MKDIR_P = /bin/mkdir -p
+OBJEXT = o
+PACKAGE = seqtools
+PACKAGE_BUGREPORT = gb10 at sanger.ac.uk
+PACKAGE_NAME = SeqTools
+PACKAGE_STRING = SeqTools 4.44.1
+PACKAGE_TARNAME = seqtools
+PACKAGE_URL = 
+PACKAGE_VERSION = 4.44.1
+PATH_SEPARATOR = :
+PKG_CONFIG = /usr/bin/pkg-config
+PKG_CONFIG_LIBDIR = 
+PKG_CONFIG_PATH = /software/acedb/gtk/lib/pkgconfig
+RANLIB = ranlib
+SET_MAKE = 
+SHELL = /bin/sh
+STRIP = 
+VERSION = 4.44.1
+abs_builddir = /var/tmp/seqtools.12251/seqtools/src/build/trusty-x86_64/doc/Design_notes
+abs_srcdir = /var/tmp/seqtools.12251/seqtools/src/build/trusty-x86_64/../../doc/Design_notes
+abs_top_builddir = /var/tmp/seqtools.12251/seqtools/src/build/trusty-x86_64
+abs_top_srcdir = /var/tmp/seqtools.12251/seqtools/src/build/trusty-x86_64/../..
+ac_ct_CC = gcc
+ac_ct_CXX = g++
+am__include = include
+am__leading_dot = .
+am__quote = 
+am__tar = $${TAR-tar} chof - "$$tardir"
+am__untar = $${TAR-tar} xf -
+bindir = ${exec_prefix}/bin
+build_alias = 
+builddir = .
+datadir = ${datarootdir}
+datarootdir = ${prefix}/share
+docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
+dvidir = ${docdir}
+exec_prefix = ${prefix}
+host_alias = 
+htmldir = ${docdir}
+includedir = ${prefix}/include
+infodir = ${datarootdir}/info
+install_sh = ${SHELL} /var/tmp/seqtools.12251/seqtools/src/config/install-sh
+libdir = ${exec_prefix}/lib
+libexecdir = ${exec_prefix}/libexec
+localedir = ${datarootdir}/locale
+localstatedir = ${prefix}/var
+mandir = ${datarootdir}/man
+mkdir_p = $(MKDIR_P)
+oldincludedir = /usr/include
+pdfdir = ${docdir}
+prefix = /var/tmp/seqtools.12251/trusty-x86_64
+program_transform_name = s,x,x,
+psdir = ${docdir}
+sbindir = ${exec_prefix}/sbin
+sharedstatedir = ${prefix}/com
+srcdir = ../../../../doc/Design_notes
+subdirs =  gbtools
+sysconfdir = ${prefix}/etc
+target_alias = 
+top_build_prefix = ../../
+top_builddir = ../..
+top_srcdir = ../../../..
+SUBDIRS = modules
+
+# these are included in the distribution, but are not installed
+EXTRA_DIST = architecture.html \
+build.html \
+index.html \
+modules \
+specs.html
+
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/doc/Design_notes/Makefile.in
+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 doc/Design_notes/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign doc/Design_notes/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):
+
+# 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.
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	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"
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	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; \
+	$(am__define_uniq_tagged_files); \
+	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-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	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"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+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 \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    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:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+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."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-recursive
+
+clean-am: clean-generic 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
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+	check-am clean clean-generic cscopelist-am ctags ctags-am \
+	distclean distclean-generic 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 pdf \
+	pdf-am ps ps-am tags tags-am 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/doc/Design_notes/Makefile.am b/doc/Design_notes/Makefile.am
new file mode 100644
index 0000000..cd220f6
--- /dev/null
+++ b/doc/Design_notes/Makefile.am
@@ -0,0 +1,13 @@
+
+SUBDIRS = modules
+
+# these are included in the distribution, but are not installed
+EXTRA_DIST = architecture.html \
+build.html \
+index.html \
+modules \
+specs.html
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/doc/Design_notes/Makefile.in
diff --git a/doc/Design_notes/Makefile.in b/doc/Design_notes/Makefile.in
new file mode 100644
index 0000000..b8ded29
--- /dev/null
+++ b/doc/Design_notes/Makefile.in
@@ -0,0 +1,592 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 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@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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 = :
+subdir = doc/Design_notes
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/./seqtools_version.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-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 \
+	tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+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@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPS_CFLAGS = @DEPS_CFLAGS@
+DEPS_LIBS = @DEPS_LIBS@
+DEPS_SQLITE3_CFLAGS = @DEPS_SQLITE3_CFLAGS@
+DEPS_SQLITE3_LIBS = @DEPS_SQLITE3_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+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_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+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_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+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@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = modules
+
+# these are included in the distribution, but are not installed
+EXTRA_DIST = architecture.html \
+build.html \
+index.html \
+modules \
+specs.html
+
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/doc/Design_notes/Makefile.in
+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 doc/Design_notes/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign doc/Design_notes/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):
+
+# 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.
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	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"
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	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; \
+	$(am__define_uniq_tagged_files); \
+	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-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	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"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+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 \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    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:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+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."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-recursive
+
+clean-am: clean-generic 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
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+	check-am clean clean-generic cscopelist-am ctags ctags-am \
+	distclean distclean-generic 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 pdf \
+	pdf-am ps ps-am tags tags-am 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/doc/Design_notes/architecture.html b/doc/Design_notes/architecture.html
new file mode 100644
index 0000000..3736d81
--- /dev/null
+++ b/doc/Design_notes/architecture.html
@@ -0,0 +1,23 @@
+<head>
+  <title>SeqTools - Architecture</title>
+</head>
+
+
+<body>
+<div class="outer">
+  <h1>Architecture</h1>
+  <p>
+    The SeqTools package consists of the following modules:<br />
+    <div class="subsection">
+      <p>
+        <a href="modules/blixemApp.html">blixemApp</a>: blixem and blixemh application code<br />
+        <a href="modules/dotterApp.html">dotterApp</a>: dotter application code<br />
+        <a href="modules/belvuApp.html">belvuApp</a>: belvu application code<br />
+        <a href="modules/seqtoolsUtils.html">seqtoolsUtils</a>: generic utilities<br />
+        <a href="modules/libpfetch.html">libpfetch</a>: utilities for fetching over http (only required for blixemh: requires libcurl)<br />
+      </p>
+    </div>
+  </p>
+
+</div>
+</body>
diff --git a/doc/Design_notes/build.html b/doc/Design_notes/build.html
new file mode 100644
index 0000000..0d9584c
--- /dev/null
+++ b/doc/Design_notes/build.html
@@ -0,0 +1,54 @@
+<head>
+  <title>SeqTools - Build System</title>
+</head>
+
+
+<body>
+<div class="outer">
+  <h1>Build System</h1>
+  This page describes how to compile the SeqTools package using the Autotools scripts included with the source code.
+
+  <h2>Autotools</h2>
+  <p>
+    The SeqTools package is configured and built using the GNU Build System (aka Autotools).  The relevant configuration files are listed below:
+    <ul>
+      <li>src/version.m4: This specifies the version number for the build. It is included by configure.ac, which sets the version number in the PACKAGE_VERSION variable in the config.h file, which is included by the code.
+      <li>src/configure.ac: This file is processed by autoconf to produce the configure file.
+      <li>src/Makefile.am: This file is processed by automake to produce the Makefile.in file.
+      <li>src/AUTHORS, src/COPYING, src/README, src/NEWS, src/ChangeLog: These files are for information.
+      <li>subdirectory Makefile.am files: The subdirectories blixemApp, dotterApp, seqtoolsUtils and libpfetch all contain a Makefile.am file, which is processed by automake to create a Makefile.in file in that directory.
+    </ul>
+  </p>
+
+  <p>
+    The build process is as follows:
+    <ul>
+      <li>Run '<code>autoreconf -i</code>' in the <code>src</code> directory. This runs autoheader, aclocal, autoconf and automake and creates the configure script (and some other required files) in the src directory.
+      <li><code>cd</code> to the directory where the code is to be built (this can be src or any other directory, e.g. src/build) and run the configure script from there. This will create a makefile in the build directory (and subdirectories for blixemApp, dotterApp, seqtoolsUtils and libpfetch, which all contain a makefile for building that module). It will also create the config.h file that will be included by the code, and a few other required files.
+      <li>Run <code>make</code> in the build directory to build everything (or in a subdirectory to build just that module).
+    </ul>
+  </p>
+
+  <h2>Modules</h2>
+  <p>
+    The source code includes the following modules. Each module has its own subdirectory with a makefile that produces a <code>.a</code> convenience library that is statically linked by the executables that require that code. The executables are built by the main <code>Makefile</code> in the <code>src</code> directory. The blixem and blixemh executables both use the same source code (the blixemApp code) but blixemh is compiled using the <code>PFETCH_HTML</code> flag, which conditionally  [...]
+    <ul>
+      <li>blixemApp: Blixem application code.
+      <li>dotterApp: Dotter application code.
+      <li>seqtoolsUtils: Generic utility functions. Required by dotter, blixem and blixemh.
+      <li>seqtoolsUtils: Generic seqtools utility functions. Required by dotter, blixem and blixemh.
+      <li>libpfetch: Utilities for fetching sequences over http. Required by blixemh.
+      <li>gbtools: Generic utility functions from an external repository of shared code. This code is included in the distribution so that it is automatically compiled as part of the seqtools package.
+    </ul>
+  </p>
+
+  <h2>Dependencies</h2>
+  <p>
+    <ul>
+      <li>All of the executables in the SeqTools package require the GLib and GTK+ libraries. These are built using pkg-config. configure.ac specifies which version of the libraries are required.
+      <li>blixemh uses the libpfetch library, which requires the libcurl library.
+      <li>blixem and blixemh compile in the sqlite3 library if it is availble. If it is not available, the sqlite functionality is disabled.
+    </ul>
+  </p>
+</div>
+</body>
diff --git a/doc/Design_notes/index.html b/doc/Design_notes/index.html
new file mode 100644
index 0000000..2e78963
--- /dev/null
+++ b/doc/Design_notes/index.html
@@ -0,0 +1,16 @@
+<head>
+  <title>SeqTools - Design Notes</title>
+</head>
+
+
+<body>
+<div class="outer">
+  <h1>Design Notes</h1>
+
+  <a href="specs.html">Functional specification</a><br />
+  <a href="architecture.html">Architecture</a><br />
+  <a href="build.html">Build</a><br />
+  <a href="../User_doc/todo.html">Outstanding issues / feature requests</a><br />
+
+</div>
+</body>
diff --git a/doc/Design_notes/modules/Makefile b/doc/Design_notes/modules/Makefile
new file mode 100644
index 0000000..73125a8
--- /dev/null
+++ b/doc/Design_notes/modules/Makefile
@@ -0,0 +1,592 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# doc/Design_notes/modules/Makefile.  Generated from Makefile.in by configure.
+
+# Copyright (C) 1994-2013 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.
+
+
+VPATH = ../../../../../doc/Design_notes/modules
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/seqtools
+pkgincludedir = $(includedir)/seqtools
+pkglibdir = $(libdir)/seqtools
+pkglibexecdir = $(libexecdir)/seqtools
+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 = :
+subdir = doc/Design_notes/modules
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/./seqtools_version.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_$(V))
+am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY))
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-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 \
+	tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+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 = ${SHELL} /var/tmp/seqtools.12251/seqtools/src/config/missing aclocal-1.14
+AMTAR = $${TAR-tar}
+AM_DEFAULT_VERBOSITY = 1
+AUTOCONF = ${SHELL} /var/tmp/seqtools.12251/seqtools/src/config/missing autoconf
+AUTOHEADER = ${SHELL} /var/tmp/seqtools.12251/seqtools/src/config/missing autoheader
+AUTOMAKE = ${SHELL} /var/tmp/seqtools.12251/seqtools/src/config/missing automake-1.14
+AWK = gawk
+CC = gcc
+CCDEPMODE = depmode=gcc3
+CFLAGS = -g -O2
+CPP = gcc -E
+CPPFLAGS = 
+CXX = g++
+CXXDEPMODE = depmode=gcc3
+CXXFLAGS = -g -O2
+CYGPATH_W = echo
+DEFS = -DHAVE_CONFIG_H
+DEPDIR = .deps
+DEPS_CFLAGS = -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/gtk-2.0 -I/usr/lib/x86_64-linux-gnu/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/pango-1.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/freetype2 -I/usr/include/pixman-1 -I/usr/include/libpng12 -I/usr/include/harfbuzz  
+DEPS_LIBS = -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo -lpango-1.0 -lfontconfig -lgobject-2.0 -lglib-2.0 -lfreetype  
+DEPS_SQLITE3_CFLAGS =  
+DEPS_SQLITE3_LIBS = -lsqlite3  
+ECHO_C = 
+ECHO_N = -n
+ECHO_T = 
+EGREP = /bin/grep -E
+EXEEXT = 
+GLIB_GENMARSHAL = glib-genmarshal
+GREP = /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
+LDFLAGS = -Xlinker -rpath -Xlinker /software/acedb/gtk/lib
+LIBOBJS = 
+LIBS = 
+LN_S = ln -s
+LTLIBOBJS = 
+MAKEINFO = ${SHELL} /var/tmp/seqtools.12251/seqtools/src/config/missing makeinfo
+MKDIR_P = /bin/mkdir -p
+OBJEXT = o
+PACKAGE = seqtools
+PACKAGE_BUGREPORT = gb10 at sanger.ac.uk
+PACKAGE_NAME = SeqTools
+PACKAGE_STRING = SeqTools 4.44.1
+PACKAGE_TARNAME = seqtools
+PACKAGE_URL = 
+PACKAGE_VERSION = 4.44.1
+PATH_SEPARATOR = :
+PKG_CONFIG = /usr/bin/pkg-config
+PKG_CONFIG_LIBDIR = 
+PKG_CONFIG_PATH = /software/acedb/gtk/lib/pkgconfig
+RANLIB = ranlib
+SET_MAKE = 
+SHELL = /bin/sh
+STRIP = 
+VERSION = 4.44.1
+abs_builddir = /var/tmp/seqtools.12251/seqtools/src/build/trusty-x86_64/doc/Design_notes/modules
+abs_srcdir = /var/tmp/seqtools.12251/seqtools/src/build/trusty-x86_64/../../doc/Design_notes/modules
+abs_top_builddir = /var/tmp/seqtools.12251/seqtools/src/build/trusty-x86_64
+abs_top_srcdir = /var/tmp/seqtools.12251/seqtools/src/build/trusty-x86_64/../..
+ac_ct_CC = gcc
+ac_ct_CXX = g++
+am__include = include
+am__leading_dot = .
+am__quote = 
+am__tar = $${TAR-tar} chof - "$$tardir"
+am__untar = $${TAR-tar} xf -
+bindir = ${exec_prefix}/bin
+build_alias = 
+builddir = .
+datadir = ${datarootdir}
+datarootdir = ${prefix}/share
+docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
+dvidir = ${docdir}
+exec_prefix = ${prefix}
+host_alias = 
+htmldir = ${docdir}
+includedir = ${prefix}/include
+infodir = ${datarootdir}/info
+install_sh = ${SHELL} /var/tmp/seqtools.12251/seqtools/src/config/install-sh
+libdir = ${exec_prefix}/lib
+libexecdir = ${exec_prefix}/libexec
+localedir = ${datarootdir}/locale
+localstatedir = ${prefix}/var
+mandir = ${datarootdir}/man
+mkdir_p = $(MKDIR_P)
+oldincludedir = /usr/include
+pdfdir = ${docdir}
+prefix = /var/tmp/seqtools.12251/trusty-x86_64
+program_transform_name = s,x,x,
+psdir = ${docdir}
+sbindir = ${exec_prefix}/sbin
+sharedstatedir = ${prefix}/com
+srcdir = ../../../../../doc/Design_notes/modules
+subdirs =  gbtools
+sysconfdir = ${prefix}/etc
+target_alias = 
+top_build_prefix = ../../../
+top_builddir = ../../..
+top_srcdir = ../../../../..
+SUBDIRS = .
+
+# these are included in the distribution, but are not installed
+EXTRA_DIST = belvuApp.html \
+blixemApp.html \
+dotterApp.html \
+libpfetch.html \
+seqtoolsUtils.html
+
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/doc/Design_notes/modules/Makefile.in
+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 doc/Design_notes/modules/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign doc/Design_notes/modules/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):
+
+# 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.
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	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"
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	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; \
+	$(am__define_uniq_tagged_files); \
+	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-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	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"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+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 \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    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:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+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."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-recursive
+
+clean-am: clean-generic 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
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+	check-am clean clean-generic cscopelist-am ctags ctags-am \
+	distclean distclean-generic 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 pdf \
+	pdf-am ps ps-am tags tags-am 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/doc/Design_notes/modules/Makefile.am b/doc/Design_notes/modules/Makefile.am
new file mode 100644
index 0000000..4ad31a7
--- /dev/null
+++ b/doc/Design_notes/modules/Makefile.am
@@ -0,0 +1,13 @@
+
+SUBDIRS = .
+
+# these are included in the distribution, but are not installed
+EXTRA_DIST = belvuApp.html \
+blixemApp.html \
+dotterApp.html \
+libpfetch.html \
+seqtoolsUtils.html
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/doc/Design_notes/modules/Makefile.in
diff --git a/doc/Design_notes/modules/Makefile.in b/doc/Design_notes/modules/Makefile.in
new file mode 100644
index 0000000..e6f8c4f
--- /dev/null
+++ b/doc/Design_notes/modules/Makefile.in
@@ -0,0 +1,592 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 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@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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 = :
+subdir = doc/Design_notes/modules
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/./seqtools_version.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-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 \
+	tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+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@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPS_CFLAGS = @DEPS_CFLAGS@
+DEPS_LIBS = @DEPS_LIBS@
+DEPS_SQLITE3_CFLAGS = @DEPS_SQLITE3_CFLAGS@
+DEPS_SQLITE3_LIBS = @DEPS_SQLITE3_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+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_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+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_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+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@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = .
+
+# these are included in the distribution, but are not installed
+EXTRA_DIST = belvuApp.html \
+blixemApp.html \
+dotterApp.html \
+libpfetch.html \
+seqtoolsUtils.html
+
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/doc/Design_notes/modules/Makefile.in
+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 doc/Design_notes/modules/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign doc/Design_notes/modules/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):
+
+# 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.
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	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"
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	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; \
+	$(am__define_uniq_tagged_files); \
+	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-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	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"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+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 \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    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:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+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."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-recursive
+
+clean-am: clean-generic 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
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+	check-am clean clean-generic cscopelist-am ctags ctags-am \
+	distclean distclean-generic 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 pdf \
+	pdf-am ps ps-am tags tags-am 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/doc/Design_notes/modules/belvuApp.html b/doc/Design_notes/modules/belvuApp.html
new file mode 100644
index 0000000..6b1659a
--- /dev/null
+++ b/doc/Design_notes/modules/belvuApp.html
@@ -0,0 +1,88 @@
+<head>
+  <title>SeqTools - belvuApp</title>
+</head>
+
+
+<body>
+<div class="outer">
+  <h1>belvuApp</h1>
+  <p>
+    The belvuApp module contains the code for the Belvu application.
+  </p>
+
+  <h2><code>main()</code> function</h2>
+  <p>
+    The Belvu <code>main()</code> function lives in <code>belvuMain.c</code>.  The <code>main()</code> function performs the following jobs.
+    <ul>
+      <li>read in the command-line arguments that were passed to Belvu;
+      <li>print usage information if incorrect arguments, or the help argument, were passed;
+      <li>parse the input alignment file (or the input distance matrix, if argument <code>-T R</code> was given;
+      <li>convert swissprot name suffixes to organisms;
+      <li>set the default colours for organisms;
+      <li>read in the scores file, if given;
+      <li>sort alignments by the default sort order (or the given sort order, if passed as an argument);
+      <li>read in match segments from a match file, if given, or look for match footers in the input alignment file, if given;
+      <li>set the initial residue colours;
+      <li>print the conservation table and exit, if requested;
+      <li>read in residue and/or markup colours from a colour file, if given;
+      <li>make the alignment non-redundant, if requested;
+      <li>remove partial sequences, if requested;
+      <li>remove gappy columns, if requested;
+      <li>remove gappy sequences, if requested;
+      <li>save the alignment and exit, if requested;
+      <li>create bootstrap trees and exit, if requested;
+      <li>output model probabilities and exit, if requested;
+      <li>print subfamilies and exit, if requested;
+      <li>show the annotation window, if requested;
+      <li>display bootstrap trees, if requested;
+      <li>display the main window (and/or the tree, if requested); and
+      <li>enter the main GTK loop to await user interaction.
+    </ul>
+  </p>
+
+  <h2>The Belvu window</h2>
+  <p><code>belvuWindow.h/.c</code></p>
+  <p>
+    We use GTK+ widgets to create the Belvu graphical components. The main Belvu window is created by the <code>createBelvuWindow()</code> function in <code>belvuWindow.c</code>.
+  </p>
+  <p>
+    A Belvu window comprises the following components:
+    <ul>
+      <li>Menubar
+      <li>Toolbar
+      <li>Alignment section
+      <li>Statusbar
+    </ul>
+  </p>
+
+  <h3>The alignment section</h3>
+  <p><code>belvuAlignment.h/.c</code></p>
+  <p>
+    This is the main portion of the Belvu window and shows the actual alignment.  There are two main modes for this window: normal and 'wrapped'.  The normal mode is currently only used for the alignment in the main window.  The wrapped mode is used whenever we create a wrapped-alignment window for printing; we can have as many wrapped-alignment windows as we like.
+  </p>
+  <p>
+    In normal mode, there are two drawing areas: one for the static columns such as name, start and end; these do not scroll horizontally (although they do scroll vertically).  The other drawing area displays the sequence data, and scrolls both horizontally and vertically.  In wrapped mode, only the sequence area is displayed (although sequence names are still drawn, they are all drawn inside the one widget and the whole thing scrolls together).  Since the sequence area always exists, th [...]
+  </p>
+  <p>
+    In normal mode, the user will be interacting with the widget a lot, so update speed is essential; therefore, only the currently-visible characters are drawn.  Wrapped mode, however, is designed for printing, so the whole area must be drawn, which can be slow.  There is also a limitation on the size of this window because we use a GdkPixmap to do the drawing, and we get a crash if we request a GdkPixmap that is too large (this appears to be undocumented, so we have had to guess a reas [...]
+  </p>
+
+  <h2>The Tree window</h2>
+  <p><code>belvuTree.h/.c</code></p>
+  <p>
+    This window displays the tree.  There is only ever one tree (stored in the main context), and it must be calculated before the tree window can be shown.  The underlying tree must be recalculated whenever it is invalidated by making changes such as deleting sequences or columns; we don't recalculate the tree automatically because it can take a long time and the user may have further edits to make.  The tree window must therefore be able to handle an invalid (null) tree until the user  [...]
+  </p>
+
+  <h2>The Conservation Plot</h2>
+  <p><code>belvuConstPlot.h/.c</code></p>
+  <p>
+    This window shows the plot of the conservation profile.  There is only ever one conservation plot window.
+  </p>
+
+  <h2>The Annotation Window</h2>
+  <p>
+    This displays a list of all the annotation lines.  There is only ever one annotation window.  It is currently only available if requested on the command-line, and cannot be reopened if closed; it would make more sense to be able to open it from within the program.
+  </p>
+  
+</div>
+</body>
diff --git a/doc/Design_notes/modules/blixemApp.html b/doc/Design_notes/modules/blixemApp.html
new file mode 100644
index 0000000..5df9634
--- /dev/null
+++ b/doc/Design_notes/modules/blixemApp.html
@@ -0,0 +1,168 @@
+<head>
+  <title>SeqTools - blixemApp</title>
+</head>
+
+
+<body>
+<div class="outer">
+  <h1>blixemApp</h1>
+  <p>
+    The blixemApp module contains the code for the Blixem application.  There are two different Blixem executables: blixem and blixemh.  They are essentially the same, but blixemh has some additional functionality that allows sequences to be fetched over http.  This introduces a dependency on the libcurl library, so we also offer the standard blixem executable which can be compiled on systems where libcurl is not available.  The same source files are used for both executables, with the l [...]
+  </p>
+
+  <h2><code>main()</code> function</h2>
+  The Blixem <code>main()</code> function lives in <code>blxmain.c</code>.  The <code>main()</code> function performs the following jobs:
+  <ul>
+    <li>read in the command-line arguments that were passed to Blixem;
+    <li>parse the input files;
+    <li>create the Blixem window; and
+    <li>enter the main GTK loop to await user interaction.
+  </ul>
+
+  <h2>The Blixem window</h2>
+  <p><code>blxwindow.h/.c</code></p>
+  <p>
+    We use GTK+ widgets to create the Blixem graphical components. The main Blixem window is created by the <code>blxview()</code> function in <code>blxview.c</code>. <code>blxview()</code> also does any initialisation required, e.g. fetching any sequence data that was not provided in the input files.
+  </p>
+  <p>
+    The Blixem window has two main sections, the 'Big Picture' and the 'Detail View', which are separated by a splitter bar (by placing the detail-view and big-picture widgets in a GtkPaned). There is also a scrollbar at the bottom which controls the range of coordinates that is currently displayed in the Detail View.  The Big Picture also uses this range because it highlights the current detail-view range and centres itself on it.
+  </p>
+
+  <h3>A note on properties</h3>
+  <p>
+    We need to be able to set various properties for the main blixem window (as well as other widgets). We can set a property on a widet using the <code>g_object_set_data()</code> function. This requires passing the property name as a string, so we define 'set' and 'get' functions for any properties that we wish to set, so that the string need only be specified in these two functions, reducing the scope for error.
+  </p>
+  <p>
+    Rather than creating a 'get' and 'set' function for each property we wish to set, we place all properties in a struct and set the struct as the property on the widget. This means that we can access all properties with one call to the <code>g_object_get_data</code> function (via our 'get' function), which is advantageous because this can be slow if called many times.  For the main window, our properties struct will be called something like <code>BlxWindowProperties</code>, will be cre [...]
+  </p>
+  <p>
+    If we just wish to access one property in the properties struct, it is convenient to have an access function that gets the properties struct and returns that particular property.  However, one should avoid using these convenience functions if multiple properties are required - it is more efficient to get the properties struct once and access the individual properties directly from there.
+  </p>
+  <p>
+    In addition to these properties structs that are set on widgets, there is also a Blixem-wide properties struct called the 'Blixem context'. This is where to store properties that do not pertain to any particular widget.
+  </p>
+
+  <h3>Big Picture</h3>
+  <p><code>bigpicture.h/.c</code></p>
+  <p>
+    The "big picture" section displays an overview of the entire portion of reference sequence that was passed to Blixem. The reference sequence coordinates are shown along the top. Alignments are shown as lines and are placed in a scaled grid (one for each strand) against their %ID. Exons and introns are drawn in standard notation in the transcript section.
+  </p>
+  <p>
+    The Big Picture contains the following main widgets, all inside a vbox. The vbox is placed inside a scrolled window so that all of the contents scroll together if they get too big for their pane.  Any of these main widgets can be hidden to save space.
+    <ul>
+      <li>Forward-strand grid: the grid showing alignments on the forward strand.
+      <li>Forward-strand exons: a drawing area showing exons and introns on the forward strand.
+      <li>Reverse-strand exons: a drawing area showing exons and introns on the forward strand.
+      <li>Reverse-strand grid: the grid showing alignments on the forward strand.
+    </ul>
+  </p>
+  <p>
+    The vbox also contains a header widget, which displays labels showing the reference sequence coordinates. This was designed as a separate widget (rather than being included as part of a grid) so that it is unaffected if a grid is hidden or the order is changed. The labels are spaced at the same intervals as the vertical lines on the grids. Some work is put into dividing the big-picture range so that we have nicely-spaced lines with nice round numbers as the headers.  This is not triv [...]
+  </p>
+  <p>
+    There are zoom buttons on the big picture that allow the user to zoom in or out.  "Zoom whole" zooms out so that we are viewing the whole section of reference sequence that was passed to Blixem. If we are zoomed in at all then we are obviously not viewing the full reference sequence range - the range that is displayed in the big picture is centred on the detail-view range, and scrolls when the detail-view range scrolls.
+  </p>
+  <p>
+    The current detail-view range is highlighted as a shaded area on the big picture. (This highlighting is done by having each grid and exon-view draw a shaded background spanning the relevant range of coordinates before drawing its real contents on top. Crude as this is, the effect is pretty good.) The user can select a different detail-view range by middle-clicking/middle-dragging in the big picture. This will show a preview box (similar to the original shaded area) of where the new d [...]
+  </p>
+
+  <h4>Re-ordering and hiding widgets</h4>
+  <p>
+    The default order is that the forward-strand grid and exon-view are shown at the top with the reverse-strand widgets below. However, if the user toggles the display (so that the reverse strand becomes the active strand), the reverse-strand grid and exon-view are then shown at the top.  To change the order of the widgets, they are simply removed from their parent and re-added in the correct order. To hide a widget we essentially use the <code>gtk_widget_hide()</code> function, but we  [...]
+  </p>
+  
+  <h4>Big-Picture Grid</h4>
+  <p><code>bigpicturegrid.h/.c</code></p>
+  <p>
+    Each grid on the Big Picture is a GtkLayout. The grid's properties-struct will define which strand of the reference sequence the grid relates to. Vertical lines are drawn at regular intervals corresponding to the labeled reference sequence coordinates in the big-picture-header. Horizontal lines are drawn at regular intervals to indicate the %ID of alignments.  The default of %ID values shown on the grid is <em>n</em>% to 100%, where <em>n</em> is the lowest %ID of any alignment in th [...]
+  </p>
+  <p>
+    Alignments are drawn on the grid as a horizontal line spanning the range of reference sequence coordinates where the alignment lies. They are drawn at a y-coordinate corresponding to their %ID. In theory the line should have zero height, but obviously we give it some height so that it can be seen and clicked on. Clicking on an alignment will select it in both the big-picture and in the detail-view.
+  </p>
+
+  <h4>Exon-View</h4>
+  <p><code>exonview.h/.c</code></p>
+  <p>
+    The 'Exon View' shows all exons and introns for the current big-picture range. (Perhaps 'Transcript View' would be a better name.) An exon can be split into two regions: CDS (coding) and UTR (non-coding/untranslated), or it may be entirely CDS or entirely UTR. We represent this by having a 'parent' exon object with one or two child objects for the CDS and/or UTR regions of that exon. This makes drawing the exons very easy because we just spin through all of the CDS/UTR objects and dr [...]
+  </p>
+  <p>
+    Introns are also stored as objects that can be drawn directly. Again, they may not be supplied in the input file, so we must work them out. We work out whether an intron is CDS or UTR according to whether its adjacent exons are CDS or UTR.
+  </p>
+  <p>
+    There are two exon-views: one for each strand. By default, all exons and introns for a strand are drawn on the same line, overlapping. They can be 'bumped' so that they display on separate lines instead.
+  </p>
+
+  <h3>Detail View</h3>
+  <p><code>detailview.h/.c</code></p>
+  <p>
+    The 'Detail View' shows the alignment sequences in detail. It has a different layout depending on whether we are in nucleotide or protein mode:
+    <ul>
+      <li>nucleotide mode: two panes, one for the forward strand and one for the reverse strand, with the active strand shown at the top.
+      <li>protein mode: three panes, one for each reading frame. Shows only the active strand.
+    </ul>
+  </p>
+  <p>
+    The 'active strand' is the forward strand by default. The user can switch to the reverse strand (or back again) using the 'toggle' option.
+  </p>
+  <p>
+    Each pane in the detail view therefore shows one reading frame of one strand of the reference sequence. The panes are separated by splitter bars. (Note that we need three panes in protein mode but a GtkPaned widget only provides two panes, so we need to have a second, nested GtkPaned inside the first GtkPaned widget in this case.) The detail-view also has a toolbar and a header widget. The header widget shows the labels for the columns in the pane. It is a separate widget because we  [...]
+  </p>
+
+  <h4>Detail-view pane</h4>
+  <p><code>detailviewtree.h/.c</code></p>
+  <p>
+    Each pane in the detail-view shows a list of alignments for a particular reading-frame and strand of the reference sequence. A list is implemented as a GtkTreeView, so the code often refers to it as a detail-view-tree.
+  </p>
+  <p>
+    An alignment list has several columns, such as the sequence name, %ID, start and end coordinates etc. The main column of interest however is the 'sequence column', which shows the actual sequence data. The list has a header, which shows the current portion of the reference sequence above the 'sequence column', so that the match sequences are shown lined up with the reference sequence. Things like SNPs and polyA signals can be highlighted in the reference sequence header. The header a [...]
+  </p>
+  <p>
+    One row in the tree represents one match sequence or exon. Only matches/exons that lie within the current detail-view display range are visible in the tree. The display range is controlled by the scrollbar at the bottom of the main window.  All detail-view trees share the same scrollbar/display-range so that they all show the same section of reference sequence. The cell contents of the tree are drawn by a custom cell renderer.
+  </p>
+  <p>
+    Middle-clicking/middle-dragging in the detail-view tree highlights the moused-over coordinate, and feeds back info about the currently selected coordinate in the feedback box on the toolbar. Left-clicking selects a row, and feeds back info about the selected sequence in the feedback box. Multiple rows can be selected and operations can be performed on the selected sequence(s), e.g. creating a group from them or running Dotter.
+  </p>
+  <p>
+    Note: The aim in using GtkTreeView was to take advantage of all of the functionality that comes with it: filtering, sorting, row selections, column headers, column resizing etc. etc. However, as more customisations have been added a lot of this functionality has had to be implemented manually, so perhaps in hindsight it would have been better to use a GtkLayout and do all of the drawing manually (which might give us better performance). If we ever need to change to a real tree with c [...]
+  </p>
+
+  <h4>Detail-view columns</h4>
+  <p>
+    The <code>BlxColumnId</code> enum defines a list of all columns that should exist in the detail-view-panes. The columns in the GtkTreeViews are created from this information during initialisation. This makes it relatively easy to add new columns - see the note against <code>BlxColumnId</code> in <code>blixem_.h</code> for details.
+  </p>
+
+  <h4>Toolbar</h4>
+  <p>
+    The toolbar is part of the detail view for historic reasons but actually contains some functions relating to the whole of Blixem.  It contains a drop-down box for sorting the detail-vew, buttons for Settings and Help, buttons for navigation and zooming in the detail-view, a feedback box containing info about the currently selected match/coordinate and a feedback area containing info about the currently moused-over match.
+  </p>
+
+  <h3>Sequences, selections and groups</h3>
+  <p>
+    A Group is a struct that stores a list of (match) sequences, along with any properties that are relevant (e.g. highlight color, visibility etc.). A Selection is essentially just a list of sequences too, so many functions are designed to operate on a list of sequences so that they work with either a Group or a Selection. The Groups functionality is very basic at the moment, offering just a simple mechanism to highlight or hide a set of sequences, but it could be extended to give much  [...]
+  </p>
+
+  <h2>Calling Dotter</h2>
+  <p>
+    Blixem can call Dotter on the currently selected sequence.  (Currently this is limited to a single sequence at a time, but the aim is to allow multiple Dotters to be started simultaneously from a multiple selection).  Dotter is spawned as a new process.  Blixem keeps track of all of the processes it has started via the spawnedProcesses member of the blixem context, and kills them when the main Blixem window is destroyed.
+  </p>
+  <h3>Call Dotter on Self</h3>
+  <p>
+    This option allows the user to call Dotter on the reference sequence versus itself.  The aim of this option is to be able to analyse internal repeats.  
+  </p>
+  <h3>Dotter parameters</h3>
+  <p>
+    When the user selects the 'Dotter' option they get presented with the Dotter dialog, which allows them to edit parameters before calling Dotter.  The default parameters are for Auto coords, and for a Zoom factor of 0 (which means 'none', i.e. Dotter will calculate a sensible default zoom).  Default parameters should be ok in most cases, so all the user needs to do is hit Execute.  They can also specify parameters by entering coords manually or by clicking one of the buttons to use th [...]
+  </p>
+
+  <h3>Auto coords</h3>
+  <p>
+    The 'Smart' or 'Auto' coords option means that Blixem will attempt to calculate a sensible range of coords to call Dotter with, based on the sequence that is currently selected. The auto coords need to be calculated when the Dotter dialog is opened, so that they can be displayed to the user before they execute Dotter. They need to be recalculated if the user selects a different sequence, selects the 'Self' option, or switches back to Auto coords after selecting the Manual coords opti [...]
+  </p>
+
+  <h3>Fetching sequence data</h3>
+  <p>
+    In the old seqbl file format, it was possible to get incomplete sequence data passed in (i.e. not the full length of the match sequence).  Therefore, by default Blixem will try to fetch the sequence from the pfetch server (only available to users within the Sanger Institute) in order to get the full sequence data if possible.  If this fails, it will use the sequence data that is stored in Blixem. The sequence data is fetched when the Dotter dialog is first opened because it is used t [...]
+  </p>
+
+</div>
+</body>
diff --git a/doc/Design_notes/modules/dotterApp.html b/doc/Design_notes/modules/dotterApp.html
new file mode 100644
index 0000000..15ba122
--- /dev/null
+++ b/doc/Design_notes/modules/dotterApp.html
@@ -0,0 +1,83 @@
+<head>
+  <title>SeqTools - dotterApp</title>
+</head>
+
+
+<body>
+<div class="outer">
+  <h1>dotterApp</h1>
+  <p>
+    The dotterApp module contains the code for the Dotter application. Dotter can be called standalone from the command line, but is often called from Blixem.
+  </p>
+
+  <h2><code>main()</code> function</h2>
+  <p>
+    The Dotter <code>main()</code> function lives in <code>dotterMain.c</code>.  The <code>main()</code> function performs the following jobs:
+    <ul>
+      <li>read in the command-line arguments that were passed to Dotter, OR read in the streamed-in arguments if called from within SeqTools;
+      <li>parse the input files;
+      <li>create the Dotter window; and
+      <li>enter the main GTK loop to await user interaction.
+    </ul>
+  </p>
+
+  <h2>The Dotter window</h2>
+  <p><code>dotter.h/.c</code></p>
+  <p>
+    We use GTK+ widgets to create the Dotter graphical components. The main Dotter window is created by the <code>dotter()</code> function in <code>dotter.c</code>. <code>dotter()</code> also does any initialisation required and creates a main dotter context (a struct containing properties for the current dotter session).  Note that there can be multiple Dotter windows for the same Dotter session. Each Dotter window has a separate context for Dotter-wide properties pertaining only to tha [...]
+  </p>
+  <p>
+    A Dotter window comprises the following components:
+    <ul>
+      <li>The menu bar
+      <li>The dot-matrix plot
+      <li>Exons/introns for the active strand
+      <li>Exons/introns for the other strand
+    </ul>
+  </p>
+
+  <h3>The dot-matrix plot</h3>
+  <p><code>dotplot.c, dotterKarlin.c</code></p>
+  <p>
+    This is the main portion of the Dotter window and shows the actual dot-plot or 'pixelmap'.  The 'pixelmap' that represents the dot-plot is actually just an array whose length is the image width times the image height. The calculation of this array can be intensive for large sequences, but it only needs to be calculated once on startup (or if the settings are changed). The pixelmap is transformed to a GdkImage using info the Greyramp Tool. The image is then drawn by the dot-plot widge [...]
+  </p>
+  <p>
+    By default, a crosshair is displayed on the dot-plot to indicate the currently-selected coordinate and can be moved by left-clicking or by pressing the arrow keys.
+  </p>
+
+  <h4>HSPs</h4>
+  <p>
+    This is the High Scoring Pair view. It is off by default, but can be toggled by the user or by a command-line argument. HSPs are high-scoring alignments that have known start and end coordinates - they are drawn as a straight, solid line between those coordinates.  There are three different modes for the HSP view:
+    <ul>
+      <li>Red lines: in this mode, all HSPs are drawn as red lines. The HSPs are drawn over the top of the standard dot-plot image.
+      <li>Score-based: in this mode, HSPs are drawn in different colors depending on their score. The HSPs are drawn over the top of the standard dot-plot image.
+      <li>Greyramp: in this mode, the HSPs are drawn in a shade of grey based on their score (by default, the darker the shade the higher the score). Greyramp-tool filtering applies.  In this mode, the HSP image REPLACES the standard dot-plot image.
+    </ul>
+  </p>
+
+  <h3>The exon/intron view</h3>
+  This is a drawing area showing the exons and introns within the Dotter display range for a particular strand. Two exon views are used - the 'active' strand exon view is shown first, with the other strand underneath it. The 'active' strand is the strand of the reference sequence that was passed to Dotter. The exons and introns are lined up with the scale on the dot-plot, and by default the crosshair extends over the exon view. 
+
+  <h3>Saving a dot-plot</h3>
+  A dot-plot can be saved. Dotter dumps chunks of data (whose size is known) to a binary file. If the size of any data changes, the file format must be changed. Old file formats should still be supported. A saved dot-plot can be loaded by calling Dotter from the command line with the <code>-l</code> argument.
+
+  <h2>The Greyramp Tool</h2>
+  <p><code>greyramp.c</code></p>
+  <p>
+    This window is associated with a particular Dotter window and controls the filtering of noise on the dot-plot.  The Greyramp Tool is owned by the Dotter window and will be destroyed along with it.
+  </p>
+
+  <h2>The Alignment Tool</h2>
+  <p><code>alignment.c</code></p>
+  <p>
+    This window is associated with a particular Dotter window.  It shows the sequence data for both of the sequences at the currently-selected coordinate in the Dotter window, and highlights the sequences to indicate matching/mis-matching bases.  The Alignment Tool window is owned by the Dotter window and will be destroyed along with it.
+  </p>
+
+  <h2>Batch mode</h2>
+  <p>
+    Calculating a dot-plot can take a long time.  Batch mode allows Dotter to be run in the background. The dot-plot is saved to file and can be loaded by running Dotter from the command-line with the <code>-l</code> argument.
+  </p>
+  
+
+</div>
+</body>
diff --git a/doc/Design_notes/modules/libpfetch.html b/doc/Design_notes/modules/libpfetch.html
new file mode 100644
index 0000000..500ac9f
--- /dev/null
+++ b/doc/Design_notes/modules/libpfetch.html
@@ -0,0 +1,12 @@
+<head>
+  <title>SeqTools - libpfetch</title>
+</head>
+
+
+<body>
+<div class="outer">
+  <h1>libpfetch</h1>
+  <p>This module provides utilities for fetching sequences over http.  This functionality is only required by blixemh - the libpfetch code is conditionally compiled into blixemh using the PFETCH_HTML flag.  Note that use of libpfetch introduces a dependency on libcurl - the development version of libcurl must be installed in order to compile blixemh.</p>
+
+</div>
+</body>
diff --git a/doc/Design_notes/modules/seqtoolsUtils.html b/doc/Design_notes/modules/seqtoolsUtils.html
new file mode 100644
index 0000000..28ec11e
--- /dev/null
+++ b/doc/Design_notes/modules/seqtoolsUtils.html
@@ -0,0 +1,68 @@
+<head>
+  <title>SeqTools - seqtoolsUtils</title>
+</head>
+
+
+<body>
+<div class="outer">
+  <h1>seqtoolsUtils</h1>
+  <p>
+    The seqtoolsUtils module contains code that is common to both Blixem and Dotter. The more significant functionality is described below.
+  </p>
+
+  <h2>Features</h2>
+  <p><code>blxmsp.h/.c</code></p>
+  <p>
+    The seqtoolsUtils module defines structs for our features. Supported features include matches, exons, introns, SNPs, polyA tails and polyA signals.
+  </p>
+
+  <h2>File parsing</h2>
+  <p><code>blxparser.h/.c, blxGff3parser.h/.c</code></p>
+  <p>
+    Functions to parse the features file. The recommended file format is GFF version 3. However, the older exblx/seqbl file formats (as output from MSPcrunch) are also supported. Note that the reference sequence can be passed as part of the features file or in a separate file - if the latter, then it is parsed separately by the main() function, not by this module.
+  </p>
+
+  <h2>Sequence translation</h2>
+  <p><code>translate.c, iupac.h</code></p>
+  <p>
+    Defines various functions and matrices used to reverse/complement nucleotide sequences and to translate nucleotide sequences to peptides.
+  </p>
+
+  <h2>Web browser</h2>
+  <p><code>seqtoolsWebBrowser.c</code></p>
+  <p>
+    Defines functions to open a URL in the user's default web browser.
+  </p>
+
+  <h2>Coordinate conversions</h2>
+  <p><code>utilities.c</code></p>
+  <p>
+    There are two functions that underpin all conversion of coordinates between how they are displayed and how they are stored: <code>convertDisplayIdxToDnaIdx</code> and <code>convertDnaIdxToDisplayIdx</code>.  They convert a DNA index to display coords and vice versa.  The display coords are either DNA or peptide coords depending on whether Blixem is in nucleotide or protein mode.  These functions also take care of inverting the coords if the display is reversed (i.e. if the reverse st [...]
+  </p>
+
+  <h2>Drawing and Printing</h2>
+  <p><code>utilities.c</code></p>
+  <p>
+    Printing in GTK+ is performed using the Cairo graphics package.  We must provide some way of telling Cairo what to draw*.  We implement this as follows:
+    <ul>
+      <li>Each widget's expose function draws to a pixmap (i.e. GdkDrawable) and then pushes this pixmap to the screen.  The pixmap is cached by setting it as a property on the widget using <code>widgetSetDrawable</code>.  If the cached pixmap already exists, the expose function will not re-create it; it will just push the existing pixmap to the screen.  (To force the widget to re-draw itself you must therefore clear the cached pixmap, using the <code>widgetClearCachedDrawable</code> function.)
+      <li>The cached pixmap can be retrieved using the <code>widgetGetDrawable</code> function.  The pixmap can be printed by Cairo, so this provides a way to print the contents of an individual widget.  Only widgets that have a cached pixmap will be printed.
+      <li>In order to print multiple widgets (e.g. all of the child widgets in a container such as the top-level window), we must combine the pixmaps of the individual widgets.  We do this by recursing through all of the child widgets, extracting their cached pixmaps (if they have one), and drawing them onto a single, overall pixmap.  Their position on the main pixmap can be found by translating the top-left corner position from the widget's coordinate system (0,0) to the overall parent  [...]
+      <li>The print operation is initiated using the <code>blxPrintWidget</code> function.  This creates a GtkPrintOperation and sets the print-settings and page-setup for it, if given (i.e. these can be cached by the calling function so that the same settings can be used the next time a print is performed).  It then runs the print operation, which opens the print dialog.  When the user OKs the dialog, this function updates the input print settings with the returned settings from the dialog.
+      <li>When the user OKs the print dialog, the <code>onBeginPrint</code> callback is called.  This function does any preparation required, e.g. setting the number of pages required.
+      <li>Next, <code>onDrawPage</code> is called to do the drawing for each page.
+    </ul>
+  </p>
+  <p>*UPDATE: A lot of the functions used here are now deprecated.  It looks like GTK has improved support for drawing widgets' windows directly, which probably means that all of the pixmap stuff mentioned here is no longer necessary.</p>
+
+  <p>
+    Current issues with this are:
+    <ul>
+      <li>We always assume a single page and scale the entire image down to fit (this is usually adequate for Blixem and Dotter).
+      <li>Text quality is really poor.
+      <li>Items in a scrollable window are not clipped to the visible region; this is generally not an issue because other widgets will be drawn over the unwanted regions. However, if not all of the widgets are drawn, some of the unwanted regions may be visible.
+    </ul>
+  </p>
+
+</div>
+</body>
diff --git a/doc/Design_notes/specs.html b/doc/Design_notes/specs.html
new file mode 100644
index 0000000..6efab7b
--- /dev/null
+++ b/doc/Design_notes/specs.html
@@ -0,0 +1,15 @@
+<head>
+  <title>SeqTools - Functional Spec</title>
+</head>
+
+
+<body>
+<div class="outer">
+  <h1>Functional specification</h1>
+  <p>We don't have a formal functional specification for the SeqTools programs; instead, required behaviours are defined by means of a test plan, which specifies a set of testable actions and their expected outcomes.  The test plan is an OpenOffice spreadsheet.  To get a general overview of program behaviour, see the user documentation.</p>
+  <ul>
+    <li><a href="../../test/test_plan.ods">Test plan (.ods file)</a></li>
+    <li><a href="../User_doc/index.html">User documentation</a></li>
+  </ul>
+</div>
+</body>
diff --git a/doc/Makefile.am b/doc/Makefile.am
new file mode 100644
index 0000000..f615951
--- /dev/null
+++ b/doc/Makefile.am
@@ -0,0 +1,8 @@
+
+SUBDIRS = User_doc Design_notes
+
+EXTRA_DIST = Design_notes index.html 
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/doc/Makefile.in
diff --git a/doc/Makefile.in b/doc/Makefile.in
new file mode 100644
index 0000000..cbb6acb
--- /dev/null
+++ b/doc/Makefile.in
@@ -0,0 +1,585 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 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@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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 = :
+subdir = doc
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/./seqtools_version.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-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 \
+	tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+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@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPS_CFLAGS = @DEPS_CFLAGS@
+DEPS_LIBS = @DEPS_LIBS@
+DEPS_SQLITE3_CFLAGS = @DEPS_SQLITE3_CFLAGS@
+DEPS_SQLITE3_LIBS = @DEPS_SQLITE3_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+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_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+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_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+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@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = User_doc Design_notes
+EXTRA_DIST = Design_notes index.html 
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/doc/Makefile.in
+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 doc/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign doc/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):
+
+# 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.
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	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"
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	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; \
+	$(am__define_uniq_tagged_files); \
+	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-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	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"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+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 \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    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:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+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."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-recursive
+
+clean-am: clean-generic 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
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+	check-am clean clean-generic cscopelist-am ctags ctags-am \
+	distclean distclean-generic 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 pdf \
+	pdf-am ps ps-am tags tags-am 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/doc/User_doc/Belvu_manual/Belvu_manual.pdf b/doc/User_doc/Belvu_manual/Belvu_manual.pdf
new file mode 100644
index 0000000..6729186
Binary files /dev/null and b/doc/User_doc/Belvu_manual/Belvu_manual.pdf differ
diff --git a/doc/User_doc/Blixem_manual/Blixem_manual.pdf b/doc/User_doc/Blixem_manual/Blixem_manual.pdf
new file mode 100644
index 0000000..b48b761
Binary files /dev/null and b/doc/User_doc/Blixem_manual/Blixem_manual.pdf differ
diff --git a/doc/User_doc/Dotter_manual/Dotter_manual.pdf b/doc/User_doc/Dotter_manual/Dotter_manual.pdf
new file mode 100644
index 0000000..e20d67f
Binary files /dev/null and b/doc/User_doc/Dotter_manual/Dotter_manual.pdf differ
diff --git a/doc/User_doc/Makefile.am b/doc/User_doc/Makefile.am
new file mode 100644
index 0000000..d0b7d78
--- /dev/null
+++ b/doc/User_doc/Makefile.am
@@ -0,0 +1,22 @@
+
+SUBDIRS = .
+
+# these will be installed alongside the programs
+dist_doc_DATA = todo.html \
+release_notes.html \
+belvu_quick_start.html \
+blixem_quick_start.html \
+dotter_quick_start.html \
+belvu_usage.txt \
+blixem_usage.txt \
+dotter_usage.txt \
+Blixem_manual/Blixem_manual.pdf \
+Dotter_manual/Dotter_manual.pdf \
+Belvu_manual/Belvu_manual.pdf
+
+# these are included in the distribution, but are not installed
+EXTRA_DIST = index.html manuals.html
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/doc/User_doc/Makefile.in
diff --git a/doc/User_doc/Makefile.in b/doc/User_doc/Makefile.in
new file mode 100644
index 0000000..d03b5a8
--- /dev/null
+++ b/doc/User_doc/Makefile.in
@@ -0,0 +1,657 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 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@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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 = :
+subdir = doc/User_doc
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+	$(dist_doc_DATA)
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/./seqtools_version.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-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 \
+	tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+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__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__installdirs = "$(DESTDIR)$(docdir)"
+DATA = $(dist_doc_DATA)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+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@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPS_CFLAGS = @DEPS_CFLAGS@
+DEPS_LIBS = @DEPS_LIBS@
+DEPS_SQLITE3_CFLAGS = @DEPS_SQLITE3_CFLAGS@
+DEPS_SQLITE3_LIBS = @DEPS_SQLITE3_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+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_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+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_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+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@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = .
+
+# these will be installed alongside the programs
+dist_doc_DATA = todo.html \
+release_notes.html \
+belvu_quick_start.html \
+blixem_quick_start.html \
+dotter_quick_start.html \
+belvu_usage.txt \
+blixem_usage.txt \
+dotter_usage.txt \
+Blixem_manual/Blixem_manual.pdf \
+Dotter_manual/Dotter_manual.pdf \
+Belvu_manual/Belvu_manual.pdf
+
+
+# these are included in the distribution, but are not installed
+EXTRA_DIST = index.html manuals.html
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/doc/User_doc/Makefile.in
+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 doc/User_doc/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign doc/User_doc/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-dist_docDATA: $(dist_doc_DATA)
+	@$(NORMAL_INSTALL)
+	@list='$(dist_doc_DATA)'; test -n "$(docdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(docdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(docdir)" || exit 1; \
+	fi; \
+	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)$(docdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \
+	done
+
+uninstall-dist_docDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(dist_doc_DATA)'; test -n "$(docdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir)
+
+# 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.
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	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"
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	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; \
+	$(am__define_uniq_tagged_files); \
+	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-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	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"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+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 \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    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 $(DATA)
+installdirs: installdirs-recursive
+installdirs-am:
+	for dir in "$(DESTDIR)$(docdir)"; 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:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+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."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-recursive
+
+clean-am: clean-generic 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-dist_docDATA
+
+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
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-dist_docDATA
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+	check-am clean clean-generic cscopelist-am ctags ctags-am \
+	distclean distclean-generic distclean-tags distdir dvi dvi-am \
+	html html-am info info-am install install-am install-data \
+	install-data-am install-dist_docDATA 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 pdf pdf-am ps ps-am tags \
+	tags-am uninstall uninstall-am uninstall-dist_docDATA
+
+
+# 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/doc/User_doc/belvu_quick_start.html b/doc/User_doc/belvu_quick_start.html
new file mode 100644
index 0000000..1fdb9a7
--- /dev/null
+++ b/doc/User_doc/belvu_quick_start.html
@@ -0,0 +1,127 @@
+<head>
+  <title>Belvu - Quick Start</title>
+</head>
+
+<body>
+<h1>Belvu - Quick Start</h1>
+
+<ul>
+  <li><a href="release_notes.html">What's new</a></li>
+  <li><a href="#t_overview">Overview</a></li>
+  <li><a href="#t_controls">Controls</a></li>
+  <li><a href="#t_styles">Styles</a></li>
+</ul>
+
+
+<div id="t_overview">
+  <h2>Overview</h2>
+  <p>Belvu - a multiple alignment viewer.</p>
+  <p>This page gives a quick-start guide to using Belvu. Other documentation is available here:</p>
+  <ul>
+    <li><a href="release_notes.html">What's new</a> (revision history)</li>
+    <li><a href="belvu_usage.txt">Usage</a> (command line options)</li>
+    <li><a href="Belvu_manual.pdf">User manual</a></li>
+    <li><a href="todo.html">Outstanding issues</a></li>
+  </ul>
+</div>
+
+
+<div id="t_controls">
+  <h2>Controls</h2>
+  <div id="t_mouse">
+    <h3>Mouse</h3>
+    <h4>Left mouse button</h4>
+    <ul>
+      <li>Click on a residue to select the row and column (current selection will be shown in the feedback box at the top).</li>
+      <li>Double click on a sequence to fetch.</li>
+      <li>Scrollbars: drag and page.</li>
+    </ul>
+    
+    <h4>Middle mouse button</h4>
+    <ul>
+      <li>In alignment: select column and display crosshair. Drag to move the crosshair; release to centre on column.</li>
+      <li>Scrollbars: drag and jump.</li>
+    </ul>
+    
+    <h4>Right mouse button</h4>
+    <ul>
+      <li>File menu (or Text menu when in the feedback box on the toolbar).</li>
+    </ul>
+    
+    <h4>Mouse wheel</h4>
+    <ul>
+      <li>You can scroll horizontally and vertically using your mouse's scroll wheel, if it has these functions.</li>
+    </ul>
+  </div>
+
+  <div id="t_keyboard">
+    <h3>Keyboard shortcuts</h3>
+    <h4>Application</h4>
+    <ul>
+      <li>Ctrl-Q: Quit application</li>
+      <li>Ctrl-W: Close current window</li>
+      <li>Ctrl-H: Show this help page</li>
+      <li>Ctrl-S: Save alignment</li>
+      <li>Shift-Ctrl-S: Save alignment as</li>
+      <li>Ctrl-P: Print</li>
+      <li>Ctrl-F: Find</li>
+    </ul>
+    
+    <h4>Display</h4>
+    <ul>
+      <li>T: Toggle color mode</li>
+      <li>= (equal): Zoom in (increase text size)</li> 
+      <li>- (minus): Zoom out (decrease text size)</li> 
+    </ul>
+    
+    <h4>Editing</h4>
+    <ul>
+      <li>Ctrl-R: Make non-redundant</li>
+      <li>Ctrl-T: Remove partial sequences</li>
+    </ul>
+    
+    <h4>Navigation</h4>
+    <ul>
+      <li>Arrow keys: Scroll one page up/down/left/right</li>
+      <li>Ctrl and Arrow keys: Scroll one row or column up/down/left/right</li>
+      <li>PageUp: Scroll one page up</li>
+      <li>PageDown: Scroll one page down</li>
+      <li>Home: Go to Top</li>
+      <li>End: Go to Bottom</li>
+      <li>Insert: Go to Start of line</li>
+      <li>Delete: Go to End of line</li>
+      <li>, (comma): Scroll one column left</li>
+      <li>. (period): Scroll one column right</li>
+      <li>Ctrl-comma: Scroll one page left</li>
+      <li>Ctrl-period: Scroll one page right</li>
+      <li>Shift-Ctrl-comma: Go to Start of line</li>
+      <li>Shift-Ctrl-period: Go to End of line</li>
+    </ul>
+  </div>
+</div>
+    
+
+<div id="t_styles">
+  <h2>Styles</h2>
+  <p>You can change the look of GTK programs such as Belvu using the gtkrc file. Create or edit the file called <code>.gtkrc-2.0</code> in your home directory. Here are some suggestions for styles that you can modify:</p>
+  <pre>
+# Change the default font size
+gtk-font-name = "san serif 12"
+
+style "scrollbar-style"
+{
+# Change the color of the scrollbars
+        bg[NORMAL] = "#82cafa"
+        bg[INSENSITIVE] = "#82cafa"
+        bg[PRELIGHT] = "#97daff"
+
+# Change the size of the scrollbars
+        GtkRange::slider-width=12
+}
+
+class "*Scrollbar*" style "scrollbar-style"
+
+  </pre>
+</div>
+
+</body>
diff --git a/doc/User_doc/belvu_usage.txt b/doc/User_doc/belvu_usage.txt
new file mode 100644
index 0000000..fbe0a5a
--- /dev/null
+++ b/doc/User_doc/belvu_usage.txt
@@ -0,0 +1,180 @@
+
+ Belvu - View multiple alignments in pretty colours.
+
+ Usage: belvu [options]  <multiple_alignment>|-
+
+ <multiple_alignment>|- = file or pipe in Stockholm/Selex/MSF/Fasta format (see below).
+
+
+ Options:
+
+  -c          Print Conservation table.
+  -l <file>   Load residue color code file.
+
+              Format: <symbol> <color>
+              (Lines starting with # are ignored (comment lines))
+
+              Example of color code file:
+
+                  # Aroma
+                  F YELLOW
+                  Y YELLOW
+                  W YELLOW
+
+                  # Yuck
+                  D RED 
+                  N GREEN
+                  X BLUE
+
+              Available colors:
+
+                    WHITE 
+                    BLACK 
+                    LIGHTGRAY
+                    DARKGRAY
+                    RED 
+                    GREEN
+                    BLUE
+                    YELLOW
+                    CYAN 
+                    MAGENTA
+                    LIGHTRED 
+                    LIGHTGREEN 
+                    LIGHTBLUE
+                    DARKRED 
+                    DARKGREEN 
+                    DARKBLUE
+                    PALERED 
+                    PALEGREEN 
+                    PALEBLUE
+                    PALEYELLOW 
+                    PALECYAN 
+                    PALEMAGENTA
+                    BROWN 
+                    ORANGE 
+                    PALEORANGE
+                    PURPLE 
+                    VIOLET 
+                    PALEVIOLET
+                    GRAY 
+                    PALEGRAY
+                    CERISE 
+                    MIDBLUE
+
+
+  -L <file>  Load markup and organism color code file.
+             Colour the markup text by residue or colour organism in tree.
+
+	     Example to set color of letters A and B:
+	     A GREEN
+	     B YELLOW
+
+	     Example to set color of organism human:
+	     #=OS BLUE human
+
+
+  -m <file>   Read file with matching sequences segments. This is used to
+              display a match of  a query sequence to a family.  The format
+              of the match is :
+
+              Line 1: Name/start-end score
+              Line 2: Query sequence in matching segment, no pads!
+              Line 3: Sequence of matching segments (qstart1 qend1 fstart1
+              fend2 qstart2 qend2 fstart2 fend2  etc...).
+
+              Example:
+
+              ZK673.9/238-260 21.58
+              CPENWVQFTGNGTQYGVCLRGFT
+              1 2 1 2  4 7 8 11  
+
+              NOTE: A sometimes easier way of doing this is to concatenate
+              the match to the end of the alignment, after a line with
+              exactly this string within the quotes: # matchFooter
+
+
+  -r          Read alignment in 'raw' format (Name sequence).
+
+              Example of raw alignment file: 
+
+                  seq1_name MFILKTP
+                  seq1_name MYI.RTP
+
+  -R          Do not parse coordinates when reading alignment.
+  -o <format> Write alignment or tree to stdout in this format and exit.
+                Valid formats: Mul(Stockholm), Selex, MSF, 
+                FastaAlign, Fasta, tree.
+  -X <cutoff> Print UPGMA-based subfamilies at cutoff <cutoff>.
+  -n <cutoff> Make non-redundant to <cutoff> %identity at startup.
+  -Q <cutoff> Remove columns more gappy than <cutoff>.
+  -q <cutoff> Remove sequences more gappy than <cutoff>.
+  -G          Penalize gaps in pairwise comparisons.
+  -i          Ignore gaps in conservation calculation.
+  -P          Remove partial sequences at startup.
+  -C          Don't write coordinates to saved file.
+  -z <char>   Separator char between name and coordinates in saved file.
+  -a          Show alignment annotations on screen (Stockholm format only).
+  -p          Output random model probabilites for HMMER.
+              (Based on all residues.)
+  -S <order>  Sort sequences in this order.
+                a -> alphabetically
+                o -> by Swissprot organism, alphabetically
+                s -> by score
+                n -> by Neighbor-joining tree
+                u -> by UPGMA tree
+                S -> by similarity to first sequence
+                i -> by identity to first sequence
+  -s <file>   Read in file of scores.A column with scores will
+              automatically appear after the coordinates.
+
+              Format: <score> <sequence_id>
+
+              Example of score file:
+
+                  2.78 seq_1/180-206
+                  2.78 seq_2/180-206
+                  3.79 seq_3/42-94
+
+
+  -T <method> Tree options:
+                i -> Start up showing tree
+                I -> Start up showing only tree
+                d -> Show distances in tree
+                n -> Neighbor-joining
+                u -> UPGMA
+                c -> Don't color tree by organism
+                o -> Don't display sequence coordinates in tree
+                b -> Use Scoredist distance correction (default)
+                j -> Use Jukes-Cantor distance correction
+                k -> Use Kimura distance correction
+                s -> Use Storm & Sonnhammer distance correction
+                r -> Use uncorrected distances
+                p -> Print distance matrix and exit
+                R -> Read distance matrix instead of alignment
+                     (only in combination with Tree routines)
+  -b <n>      Apply boostrap analysis with <n> bootstrap samples
+  -B          Print out bootstrap trees and exit
+              (Negative value -> display bootstrap trees on screen)
+  -O <label>  Read organism info after this label (default OS)
+  -t <title>  Set window title.
+  -u          Start up with uncoloured alignment (faster).
+  -h, --help  Show this help information
+  --compiled  Show package compile date
+  --version   Show package version number
+ setenv BELVU_FETCH to desired sequence fetching program.
+ setenv BELVU_FONT_SIZE to specify window font size.
+ setenv BELVU_STATUSBAR_SIZE to specify statusbar font size (0 => hide statusbar).
+
+-----
+ Written by Gemma Barson <gb10 at sanger.ac.uk>
+ Based on original code by Erik Sonnhammer <Erik.Sonnhammer at sbc.su.se> 
+
+ Reference: Scoredist: A simple and robust protein sequence distance estimator.
+            Erik LL Sonnhammer and Volker Hollich.
+            BMC Bioinformatics 6:108 (2005)
+
+ See http://www.sanger.ac.uk/resources/software/seqtools/ for more info.
+
+ Copyright (c) 2011: Genome Research Ltd.
+ Belvu is distributed under the GNU Public License; see http://www.gnu.org/copyleft/gpl.txt
+
diff --git a/doc/User_doc/blixem_quick_start.html b/doc/User_doc/blixem_quick_start.html
new file mode 100644
index 0000000..e76c4ea
--- /dev/null
+++ b/doc/User_doc/blixem_quick_start.html
@@ -0,0 +1,331 @@
+<head>
+  <title>Blixem - Quick Start</title>
+</head>
+
+
+<body>
+<h1>Blixem - Quick Start</h1>
+
+<ul>
+  <li><a href="release_notes.html">What's new</a></li>
+  <li><a href="#t_overview">Overview</a></li>
+  <li><a href="#t_zooming">Zooming</a></li>
+  <li><a href="#t_scrolling">Scrolling</a></li>
+  <li><a href="#t_selections">Selecting sequences</a></li>
+  <li><a href="#t_menu">Main menu</a></li>
+  <li><a href="#t_mouseover">Feedback bar</a></li>
+  <li><a href="#t_statusbar">Status bar</a></li>
+  <li><a href="#t_find">Find</a></li>
+  <li><a href="#t_fetch">Fetching sequences</a></li>
+  <li><a href="#t_copy">Copy and paste</a></li>
+  <li><a href="#t_sorting">Sorting</a></li>
+  <li><a href="#t_groups">Groups</a></li>
+  <li><a href="#t_dotter">Dotter</a></li>
+  <li><a href="#t_settings">Settings</a></li>
+  <li><a href="#t_key">Colour key</a></li>
+  <li><a href="#t_shortcuts">Keyboard shortcuts</a></li>
+</ul>
+
+
+<div id="t_overview">
+  <h2>Overview</h2>
+  <p>This page gives a quick-start guide to using Blixem. Other documentation is available here:</p>
+  <ul>
+    <li><a href="release_notes.html">What's new</a> (revision history)</li>
+    <li><a href="blixem_usage.txt">Usage</a> (command line options)</li>
+    <li><a href="Blixem_manual.pdf">User manual</a></li>
+    <li><a href="todo.html">Outstanding issues</a></li>
+  </ul>
+</div>
+
+
+<div id="t_zooming">
+  <h2>Zooming</h2>
+  <ul>
+    <li>Zoom in to the currently-selected region in the big picture using the +/- buttons in the top-left corner of the window, or using the Ctrl '=' and Ctrl '-' shortcut keys.  The 'Whole' button zooms out to show the full length of the query sequence.</li>
+    <li>Zoom in/out of the detail view using the +/- buttons on the toolbar, or using the '=' and '-' shortcut keys.</li>
+  </ul>
+</div>
+
+
+<div id="t_scrolling">
+  <h2>Scrolling</h2>
+  <ul>
+    <li>Middle-click in the big picture to scroll to an area.</li>
+    <li>Middle-click in the detail view to centre on a base.</li>
+    <li>Use the horizontal scrollbar at the bottom of the window to scroll the detail view.</li>
+    <li>Use the mouse-wheel to scroll up/down in the list of alignments.</li>
+    <li>Use the mouse-wheel to scroll the alignments left/right (if your mouse has a horizontal scroll-wheel).</li>
+    <li>Ctrl-left and Ctrl-right arrow keys scroll to the start/end of the previous/next match (limited to currently-selected sequences, if any are selected).</li>
+    <li>The Home/End keys scroll to the start/end of the display.</li>
+    <li>Ctrl-Home and Ctrl-End scroll to the start/end of the currently-selected alignments (or to the first/last alignment if none are selected).</li>
+    <li>The ',' (comma) and '.' (full-stop) keys scroll the display one nucleotide to the left/right.</li>
+    <li>Pressing Ctrl and ',' (comma) or '.' (full-stop) scrolls the display one page to the left/right.</li>
+    <li>You can scroll to a specific position using the Go-to button on the toolbar, or by pressing the 'p' shortcut key.</li>
+  </ul>
+</div>
+
+
+<div id="t_selections">
+  <h2>Selections</h2>
+  <ul>
+    <li>You can select a sequence by clicking on its row in the alignment list.  Selected sequences are highlighted in cyan in the big picture.</li>
+    <li>You can select a sequence by clicking on it in the big picture.</li>
+    <li>The name of the sequence you selected is displayed in the feedback box on the toolbar.  If there are multiple alignments for the same sequence, all of them will be selected.</li>
+    <li>You can select multiple sequences by holding down the Ctrl or Shift keys while selecting rows.</li>
+    <li>You can deselect a single sequence by Ctrl-clicking on its row.</li>
+    <li>You can deselect all sequences by right-clicking and selecting 'Deselect all', or with the Shift-Ctrl-A keyboard shortcut.</li>
+    <li>You can move the selection up/down a row using the up/down arrow keys.</li>
+    <li>If the 'Show Splice Sites' option is on (see the 'Settings' dialog), splice sites will be highlighted on the reference sequence for the currently-selected alignment(s).</li>
+  </ul>
+  
+  <ul>
+    <li>You can select a nucleotide/peptide by middle-clicking on it in the detail view.  This selects the entire column at that index, and the coordinate number on the query sequence is shown in the feedback box.  (The coordinate on the subject sequence is also shown if a subject sequence is selected.) Hold Shift to select a range.</li>
+    <li>For protein matches, when a peptide is selected, the three nucleotides for that peptide (for the current reading frame) are highlighted in the header in blue.  The current reading frame is whichever alignment list currently has the focus - click in a different list to change the reading frame.  The darker highlighting indicates the specific nucleotide that is currently selected (i.e. whose coordinate is displayed in the feedback box).</li>
+    <li>You can move the selection to the previous/next nucleotide using the left and right arrow keys. Hold Shift to select a range.</li>
+    <li>You can move the selection to the previous/next peptide by holding Alt (or Cmd on a Mac) while using the left and right arrow keys. Hold Shift to select a range.</li>
+    <li>You can move the selection to the start/end of the previous/next matchb by holding Ctrl while using the left and right arrow keys (limited to just the selected sequences if any are selected). Hold Shift to select a range.</li>
+    <li>To select a coordinate without the display re-centering on it, hold down Ctrl as you middle-click.</li>
+  </ul>
+</div>
+
+
+<div id="t_menu">
+  <h2>Main menu</h2>
+  Right-click anywhere in the Blixem window to pop up the main menu.  The menu options are:
+  
+  <ul>
+    <li>Quit: Quit Blixem.</li>
+    <li>Help: Display this help.</li>
+    <li>Print: Print the display</li>
+    <li>Settings: Edit settings.</li>
+    <li>View: Display the View dialog box. This allows you to show/hide parts of the display.</li>
+    <li>Create Group: Create a group of sequences.</li>
+    <li>Edit Groups: Edit properties for groups.</li>
+    <li>Deselect all: Deselect all sequences.</li>
+    <li>Dotter: Run Dotter and/or set Dotter parameters.</li>
+    <li>Feature series selection tool: ???</li>
+  </ul>
+</div>
+
+
+<div id="t_mouseover">
+  <h2>Feedback about current items</h2>
+  There are two feedback boxes on the toolbar that display information about current items:
+  <ul>
+    <li>The first shows info about the currently-selected alignment and/or the currently-selected index.</li>
+    <li>The second shows info about the currently moused-over alignment. As a minimum this will display the sequence name. It will also show additional data such as organism and tissue type if available - if not already loaded, this data can be loaded by clicking the 'Load optional data' button on the Settings dialog.</li>
+  </ul>
+</div>
+
+
+<div id="t_statusbar">
+  <h2>Status bar</h2>
+  <ul>
+    <li>The status bar at the bottom of the window shows all messages and warnings, including non-critical messages.</li>
+    <li>Critical messages are also displayed in a popup dialog or message list.</li>
+    <li>The user may switch between popup dialogs or the message list by selecting the 'Switch to scrolled message window' on the popup dialog or the 'Switch to popup messages' check box on the message list.</li>
+  </ul>
+</div>
+
+
+<div id="t_find">
+  <h2>Find sequences</h2>
+  <ul>
+    <li>Click the find icon on the toolbar or press the Ctrl-F shortcut to open the find dialog.</li>
+    <li>To search for sequences by name, use either the 'Sequence name search' or 'Sequence name list' search box.  Enter the sequence name you wish to search for and hit 'OK', 'Forward' or 'Back'.</li>
+    <li>To search for a string of nucleotides in the reference sequence, use the 'DNA search' box.  Enter the string of nucleotides and hit 'OK', 'Forward' or 'Back'.  Note that the search is only performed on the active strand: use the 'Toggle strand' button on the toolbar or hit the 't' shortcut key to toggle which strand is active.</li>
+    <li>Using the 'OK' button will search for the first match in the entire Blixem range.</li>
+    <li>Using the 'Forward' or 'Back' buttons will search for the next/previous match from the current position.</li>
+    <li>After performing a find, you can repeat the search by hitting the F3 key (or Shift-F3 to search backwards).</li>
+    <li>You can perform a fast find on sequence name(s) in the selection buffer by hitting the 'f' shortcut key.</li>
+  </ul>
+</div>
+
+
+<div id="t_fetch">
+  <h2>Fetch sequences</h2>
+  <ul>
+    <li>Double-click a row to fetch a sequence.</li>
+    <li>In the Settings dialog, click the 'Load optional data' button to fetch additional information such as organism and tissue-type. This data can be viewed by enabling the corresponding column and is also displayed in the feedback area of the toolbar when a sequence is moused-over.</li>
+  </ul>
+</div>
+
+
+<div id="t_copy">
+  <h2>Copy and paste</h2>
+  <ul>
+    <li>When sequence(s) are selected, their names are copied to the selection buffer and can be pasted by middle-clicking.</li>
+    <li>To paste sequence names from the selection buffer, hit the 'f' keyboard shortcut. Blixem will select the sequences and jump to the start of the selection.</li>
+    <li>To copy sequence name(s) to the default clipboard, select the sequence(s) and hit Ctrl-C. Sequence names can then be pasted into other applications using Ctrl-V.</li>
+    <li>The clipboard text can also be pasted into Blixem using Ctrl-V. If the clipboard contains valid sequence names, those sequences will be selected and the display will jump to the start of the selection.</li>
+    <li>Note that text from the feedback box and some text labels (e.g. the reference sequence start/end coords) can be copied by selecting it with the mouse and then hitting Ctrl-C.</li>
+    <li>Text can be pasted into dialog box text entry boxes using Ctrl-V (or middle-clicking to paste from the selection buffer).</li>
+  </ul>
+</div>
+
+
+<div id="t_sorting">
+  <h2>Sorting</h2>
+  <ul>
+    <li>The alignments can be sorted by selecting the column(s) you wish to sort by from the drop-down boxes on the Sort dialog. Open the dialog from the icon on the toolbar.</li>
+    <li>You can reverse the sort order by selecting the 'Invert sort order' option on the Sort dialog. Note that some columns sort ascending by default (e.g. name, start, end) and some sort descending (score and ID). This option reverses that sort order.</li>
+    <li>If you sort by one of the optional columns (e.g. organism or tissue-type) the sort will have no effect until the data for that column is loaded. Load the data by clicking the 'Load optional data' button in the 'Columns' section of the Settings dialog.</li>
+    <li>You can place alignments in a group and then sort by group to keep specific sequences always on top.  See the Groups section for more details.</li>
+  </ul>
+</div>
+
+
+<div id="t_groups">
+  <h2>Groups</h2>
+  <p>Alignments can be grouped together so that they can be sorted/highlighted/hidden etc.</p>
+  
+  <h3>Creating a group from a selection:</h3>
+  <ul>
+    <li>Select the sequences you wish to include in the group by left-clicking their rows in the detail view.  Multiple rows can be selected by holding the Ctrl or Shift keys while clicking.</li>
+    <li>Right-click and select 'Create Group', or use the Shift-Ctrl-G shortcut key. (Note that Ctrl-G will also shortcut to here if no groups currently exist.)</li>
+    <li>Ensure that the 'From selection' radio button is selected, and click 'OK'.</li>
+  </ul>
+
+  <h3>Creating a group from a sequence name:</h3>
+  <ul>
+    <li>Right-click and select 'Create Group', or use the Shift-Ctrl-G shortcut key. (Or Ctrl-G if no groups currently exist.)</li>
+    <li>Select the 'From name' radio button and enter the name of the sequence in the box below.  You may use the following wildcards to search for sequences: '*' for any number of characters; '?' for a single character.  For example, searching for '*X' will find all sequences whose name ends in 'X' (i.e. all exons).</li>
+    <li>Click 'OK'.</li>
+  </ul>
+  
+  <h3>Creating a group from sequence name(s):</h3>
+  <ul>
+    <li>Right-click and select 'Create Group', or use the Shift-Ctrl-G shortcut key. (Or Ctrl-G if no groups currently exist.)</li>
+    <li>Select the 'From name(s)' radio button.</li>
+    <li>Enter the sequence name(s) in the text box.</li>
+    <li>You may use the following wildcards in a sequence name: '*' for any number of characters; '?' for a single character.  (For example, searching for '*X' will find all sequences whose name ends in 'X', i.e. all exons).</li>
+    <li>You may search for multiple sequence names by separating them with the following delimiters: newline, comma or semi-colon.</li>
+    <li>You may paste sequence names directly from ZMap: click on the feature in ZMap and then middle-click in the text box on the Groups dialog.  Grouping in Blixem works on the sequence name alone, so the feature coords will be ignored.</li>
+    <li>Click 'OK'.</li>
+  </ul>
+  
+  <h3>Creating a temporary 'match-set' group from the current selection:</h3>
+  <ul>
+    <li>You can quickly create a group from a current selection (e.g. selected features in ZMap) using the 'Toggle match set' option.</li>
+    <li>To create a match-set group, select the required items (e.g. in ZMap) and then select 'Toggle match set' from the right-click menu in Blixem, or hit the 'g' shortcut key.</li>
+    <li>To clear the match-set group, choose the 'Toggle match set' option again, or hit the 'g' shortcut key again.</li>
+    <li>While it exists, the match-set group can be edited like any other group, via the 'Edit Groups' dialog.</li>
+    <li>If you delete the match-set group from the 'Edit Groups' dialog, all settings (e.g. highlight color) will be lost. To maintain these settings, clear the group using the 'Toggle match set' menu option (or 'g' shortcut key) instead.</li>
+  </ul>
+  
+  <h3>Editing groups:</h3>
+  To edit a group, right-click and select 'Edit Groups', or use the Ctrl-G shortcut key. You can change the following properties for a group:
+  <ul>
+    <li>Name: you can specify a more meaningful name to help identify the group.</li>
+    <li>Hide: tick this box to hide the alignments in the alignment lists.</li>
+    <li>Highlight: tick this box to highlight the alignments.</li>
+    <li>Color: the color the group will be highlighted in, if 'Highlight' is enabled.  The default color for all groups is red, so you may wish to change this if you want different groups to be highlighted in different colors.</li>
+    <li>Order: when sorting by Group, alignments in a group with a lower order number will appear before those with a higher order number (or vice versa if sort order is inverted). Alignments in a group will appear before alignments that are not in a group.</li>
+    <li>To delete a single group, click on the 'Delete' button next to the group you wish to delete.</li>
+    <li>To delete all groups, click on the 'Delete all groups' button.</li>
+  </ul>
+</div>
+
+
+<div id="t_dotter">
+  <h2>Dotter</h2>
+  <ul>
+    <li>To start Dotter, or to edit the Dotter parameters, right-click and select 'Dotter' or use the Ctrl-D keyboard shortcut.	The Dotter settings dialog will pop up.</li>
+    <li>To run Dotter with the default (automatic) parameters, just hit RETURN, or click the 'Execute' button.</li>
+    <li>To enter manual parameters, click the 'Manual' radio button and enter the values in the 'Start' and 'End' boxes.</li>
+    <li>To revert to the last-saved manual parameters, click the 'Last saved' button.</li>
+    <li>To dotter against a transcript's sequence, click the Transcript radio button. You will need to select a transcript to dotter against. Hold down Ctrl to select a transcript without deselecting the match you want to dotter.</li>
+    <li>To change the match sequence to dotter against, select the Match Sequence tab. You can dotter the currently selected match (default), any ad-hoc sequence in raw or FASTA format, or you can dotter the reference sequence vs itself.</li>
+    <li>To save the parameters without running Dotter, click Save and then Cancel'.</li>
+    <li>To save the parameters and run Dotter, click 'Execute'.</li>
+    <li>To close all Dotters that have been started from the current Blixem, right-click in the Blixem window and choose 'Close all Dotters'.</li>
+    <li>Note that all Dotters opened from within Blixem will be closed when Blixem exits.</li>
+  </ul>
+</div>
+
+
+<div id="t_settings">
+  <h2>Settings</h2>
+  The settings menu can be accessed by right-clicking and selecting Settings, or by the shortcut Ctrl-S. Soome settings (those in the 'Features' and 'Display options' panes on the dialog, as well as the column widths) are saved to the file ".blixemrc" in your home directory when you quit Blixem, and will be restored the next time Blixem is run. To revert to the default settings, just delete the ".blixemrc" file.
+  <ul>
+    <li><b>Highlight variations</b>:Tick this box to highlight bases in the reference sequence that have SNPs, insertions, deletions etc.  Hover over a highlighted base to see details of the variation in the feedback area.</li>
+    <li><b>Show variations track</b>:The variations track shows the details of the variations.  Double-click on a variation to open its URL.  The Highlight-Variations option must be enabled to use this option.  A shortcut to quickly enable both options is to double-click the reference sequence.  Double click the reference sequence again to hide the variations track.</li>
+    <li><b>PolyA tails</b>:Tick this option to show polyA tails in the alignment lists.  By default polyA tails are only shown for the currently-selected sequence(s).  To show them for all sequences, un-tick the 'Selected sequences only' box.  When a polA tail is displayed, polyA signals are also highlighted in the reference sequence.</li>
+    <li><b>Show Unaligned Sequence</b>:Show any additional unaligned parts of the match sequence at the start/end of the alignment.  Specify the number of additional bases to show in 'Limit to... bases', or untick this option to show all of the unaligned sequence.  Tick the 'Selected sequences only' option to only show unaligned sequence for the currently selected sequence(s).  Note that this option does not work with the 'Squash Matches' option, so it will not do anything if 'Squash Mat [...]
+    <li><b>Show Splice Sites</b>:Shows splice sites for the currently-selected alignment(s).  Splice sites are highlighted on the reference sequence in green (for canonical) or red (for non-canonical).  Blixem identifies GT-AG, GC-AG and AT-AC introns as canonical.</li>
+    <li><b>Highlight Differences</b>:When this option is set, matching bases are blanked out and mismatches are highlighted, making it easier to see where alignments differ from the reference sequence.</li>
+    <li><b>Squash Matches</b>:Group multiple alignments from the same sequence together into the same row in the detail view, rather than showing them on separate rows.</li>
+    <li><b>Columns</b>:Show/hide columns or edit the width of columns (in pixels).  Click the 'Load optional data' button to load the data for the optional columns such as organism and tissue-type - then tick the check box to show this column in the Blixem window. The optional columns are greyed out if their data is not loaded.  Once optional data is loaded you can also sort by it. Note that optional data is loaded on startup for DNA matches but not for protein matches, because the latte [...]
+    <li><b>Grid properties</b>:Set the maximum/minimum %ID values shown in the big picture.  Expand or contract the grid scale by adjusting '%ID per cell'.  The ID per cell can be set to as low as 0.1.  Note that setting a low ID-per-cell can result in a large number of cells and hence a very large grid, and Blixem is not currently very clever about dealing with this.</li>
+  </ul>
+</div>
+
+
+<div id="t_key">
+  <h2>Color key</h2>
+  In the detail view, the following colors and symbols have the following meanings:
+  
+  <ul>
+    <li><span style="background:yellow">Yellow</span>: Query sequence</li>
+    <li><span style="background:cyan">Cyan</span>: Identical match</li>
+    <li><span style="background:slateblue">Blue</span>: Similar match</li>
+    <li><span style="background:grey">Grey</span>: Mismatch</li>
+    <li><span style="background:grey"><b><code>.</code></b></span>: Deletion</li>
+    <li><span style="background:purple">|</span> Purple bar: Insertion</li>
+    <li><span style="background:palegreen">________</span> Empty green box: Coding (CDS) exon</li>
+    <li><span style="background:lightcoral">________</span> Empty red box: Non-coding (UTR) exon</li>
+    <li><span style="background:royalblue">|</span> Blue bar: Start boundary of an exon</li>
+    <li><span style="background:darkblue">|</span> Dark blue bar: End boundary of an exon</li>
+    <li><span style="background:lightskyblue">Blue</span> in DNA headerNucleotides of the selected codon. Darker blue indicates the specific nucleotide displayed in the feedback box.</li>
+    <li><span style="background:salmon"><code>*</code></span> STOPs are highlighted in red in the translation</li>
+    <li><span style="background:lawngreen"><code>M</code></span> METs are highlighted in green in the translation</li>
+  </ul>
+</div>
+
+
+<div id="t_shortcuts">
+  <h2>Keyboard shortcuts</h2>
+  <ul>
+    <li><b>Ctrl-Q</b>    Quit</li>
+    <li><b>Ctrl-H</b>    Help</li>
+    <li><b>Ctrl-P</b>    Print</li>
+    <li><b>Ctrl-S</b>    'Settings' menu</li>
+    
+    <li><b>Ctrl-F</b>    Open the Find dialog</li>
+    <li><b>f</b>    Perform a find on sequence name(s) in the current selection buffer</li>
+    
+    <li><b>Ctrl-G</b>    Edit groups (or create a group if none currently exist)</li>
+    <li><b>Shift-Ctrl-G</b>    Create group</li>
+    <li><b>g</b>    Toggle the 'match set' Group</li>
+    
+    <li><b>Shift-Ctrl-A</b>    Deselect all alignments</li>
+    <li><b>Escape</b>    Deselect the currently-selected base index</li>
+    
+    <li><b>Ctrl-D</b>    Dotter</li>
+    
+    <li><b>Left</b>/<b>right</b> arrow keys    Move the currently-selected coordinate one place to the left/right</li>
+    <li><b>Alt-Left (Cmd-Left on Macs)</b>/<b>right</b>    Same as left/right arrow keys, but for proteins it scrolls by a single nucleotide, rather than an entire codon.</li>
+    <li><b>Ctrl-Left</b>/<b>right</b>    Scroll to the start/end of the previous/next alignment (limited to just the selected sequences, if any are selected).</li>
+    <li><b>Home</b>/<b>End</b>    Scroll to the start/end of the display.</li>
+    <li><b>Ctrl-Home</b>/<b>End</b>    Scroll to the first/last alignment (limited to just the selected sequences, if any are selected).</li>
+    <li><b>,</b> (comma)    scroll left one coordinate</li>
+    <li><b>.</b> (period)    scroll right one coordinate</li>
+    
+    <li><b>=</b> (equals)    zoom in detail view</li>
+    <li><b>-</b> (subtract)    zoom out detail view</li>
+    <li><b>Ctrl</b>-<b>=</b>     zoom in big picture</li>
+    <li><b>Ctrl</b>-<b>-</b>      zoom out big picture</li>
+    <li><b>Shift</b>-<b>Ctrl</b>-<b>-</b>      zoom out big picture to whole width</li>
+    
+    <li><b>V</b>    'View' menu (for toggling visibility)</li>
+    <li><b>1</b>, <b>2</b>, <b>3</b>    These number keys toggle visibility of the 1st, 2nd (and 3rd, for protein matches) alignment list.</li>
+    <li><b>Ctrl</b>-<b>1</b>, <b>Ctrl</b>-<b>2</b>    This toggles visibility of the 1st and 2nd big picture grid.</li>
+    <li><b>Shift</b>-<b>Ctrl</b>-<b>1</b>, <b>Shift</b>-<b>Ctrl</b>-<b>2</b>    This toggles visibility of the 1st and 2nd exon views.</li>
+    
+    <li><b>p</b>    Go to position</li>
+    <li><b>t</b>    Toggle the active strand</li>
+  </ul>
+</div>
+
+</body>
diff --git a/doc/User_doc/blixem_usage.txt b/doc/User_doc/blixem_usage.txt
new file mode 100644
index 0000000..e26a0d9
--- /dev/null
+++ b/doc/User_doc/blixem_usage.txt
@@ -0,0 +1,208 @@
+ Blixem - display multiple alignments against a reference sequence.
+
+ Usage: blixem [options] [<sequencefile>] <datafile> [X options] 
+
+   <sequencefile> contains the reference sequence in FASTA format.
+   <datafile> is a GFF v3 file containing alignments and other features.
+   If <sequencefile> is ommitted, <datafile> should contain the reference
+   sequence in FASTA format, below a comment line that reads ##FASTA.
+
+   Both <sequencefile> and <datafile> can be substituted by "-"
+   for reading from stdin (pipe).  If <sequencefile> is piped, the first
+   line should contain the sequence name and the second the sequence itself.
+
+
+ Options:
+  -t <type>, --display-type=<type>  MANDATORY
+    Whether to display sequences in nucleotide or protein mode. Must be one of:
+      N = nucleotide
+      P = protein
+
+  -a <names>, --alignment-names=<names>
+    Specify a string giving the names of the alignments, e.g. "EST_mouse EST_human" etc.
+
+  -c <file>, --config-file=<file>
+    Read configuration options from 'file'.
+
+  --compiled
+    Show package compile date.
+
+  --dataset
+    Optional string to indicate a data-set that the alignments are from.
+
+  --dotter-first-match
+    Call Dotter on the first match to the right of the default start coord.
+
+  --fetch-server <nodeid:port>
+    Causes Blixem to get sequences from a fetch server at machine 'nodeid' on the given
+    port (default 22100).
+
+  -h, --help
+    More detailed usage information.
+
+  --hide-big-picture
+    Hide the big picture section on start-up.
+
+  --hide-inactive-strand
+    Hide the inactive strand (i.e. the reverse strand, or the forward strand if the -R option
+    is used).
+
+  --highlight-diffs
+    Enable 'highlight differences' mode, where mismatches (rather than matches) are highlighted.
+
+  --invert-sort
+    Invert sorting order
+
+  -m <from[:to]>, --map-coords=<from[:to]>
+    Map the coordinate system so that the given 'from' coordinate maps to the given
+    'to' coordinate (or to '1' if 'to' is not given).
+
+  -n, --negate-coords
+    When showing the reverse strand, negate the display coordinates.
+
+  -o <n>, --offset=<n>
+    Offset the reference sequence coordinate system by n.
+
+  --optional-data
+    Parse additional data such as organism and tissue-type on start-up.
+
+  --remove-input-files
+    Delete the input files after they have been parsed.
+
+  -r, --reverse-strand
+    Indicates that the given reference sequence is the reverse strand.
+
+  --save-temp-files
+    Save any temporary files created by Blixem.
+
+  --show-coverage
+    Display the coverage section on start-up.
+
+  --sort-mode=<mode>
+    Default sort mode. Use --help option to see details.
+
+  --squash-matches
+    Compress the alignment lists on start-up.
+
+  -s <n>, --start-coord=<n>
+    Start with the display centred on coordinate n.
+
+  --start-next-match
+    Start with the display centred on the first match to the right of the default start coord.
+
+  -y <file>, --styles-file=<file>
+    Read color options from a key-value file. Use --help option to see details.
+
+  --version
+    Show package version number.
+
+  -z <start:end>, --zoom-range=<start:end>
+    Specify the initial range of coordinates to zoom the big picture in to.
+
+  --zoom-whole
+    Start with the big picture zoomed out to view the full reference sequence range.
+
+ Some X options:
+ -acefont <font> Main font.
+ -font    <font> Menu font.
+
+
+FEATURES
+  The prefered file format for <datafile> is GFF v3. (However, Blixem is still compatible with
+  older file formats such as exblx and seqbl, as used by MSPcrunch).
+
+  Blixem is mainly aimed at displaying alignments, but can also show other features such as
+  transcripts, variations and polyA tails. The supported SO terms are:
+    match
+    nucleotide_match
+    protein_match
+    match_part
+    match_set
+    transcript
+    primary_transcript
+    processed_transcript
+    mRNA
+    CDS
+    UTR
+    exon
+    intron
+    SNP
+    copy_number_variation
+    substitution
+    insertion
+    deletion
+    sequence_alteration
+    polyA_signal_sequence
+    polyA_site
+    read
+    region
+
+SORT MODE
+  The sort mode is specified with the --sort-mode=<mode> argument, where <mode> is
+  one of the following:
+    s = by Score
+    i = by Identity
+    n = by Name
+    p = by Position
+
+  If optional data is loaded on start-up using the --optional-data argument, then the following
+  sort modes are also valid:
+    t = by Tissue type
+    m = by Strain
+    g = by Gene name
+    o = by Organism
+
+COLOR KEY FILE
+  The color key file is specified with the -y <file> or --styles-file=<file> argument. This is a .ini-
+  like file that specifies attributes such as fill and line colors for features from particular 
+  sources (say EST_Human or polya_signal). The file should contain one or more source stanzas followed
+  by one or more key=value pairs, i.e. 
+
+    [<source>]
+      <key>=<value>
+      ...
+
+  <key> can be one of:
+      colours:                 default colours
+      transcript-cds-colours:  used to specify a different colour 
+                               for CDS sections of transcripts
+
+  <value> is a semi-colon separated list of fill and line colours of the format:
+      <normal|selected> <fill|border> <colour>
+
+  <colour> can be in any of the forms accepted by XParseColor; these include name 
+           for a colour from rgb.txt, such as DarkSlateGray, or a hex specification 
+           such as #305050.
+
+  Example:
+    colours=normal border #0000af ; selected border #0000af ; normal fill white ; \
+            selected fill #ffddcc ; 
+    transcript-cds-colours=normal border #0000af ; selected border #0000af ; \
+            normal fill white ; selected fill #ffddcc ; 
+
+  Note that selection colors will be calculated automatically if they are not
+  specified (a darker shade of the default color will be used when the feature is selected).
+
+MSPcrunch
+  To make the datafile from blast output, run MSPcrunch with option -q.
+
+ o To pipe MSPcrunch output directly to Blixem, use "-"
+   as the second parameter ([datafile]).  Example:
+
+   MSPcrunch -q <my.blast_output> | blixem <my.seq> -
+
+ o The BLAST program (blastp, blastn, blastx, tblastn, tblastx)
+   is automatically detected from the Blast output header by MSPcrunch
+   and is passed on to Blixem in the seqbl format (-q).
+
+-----
+ Written by Gemma Barson <gb10 at sanger.ac.uk>
+ Based on original code by Erik Sonnhammer <Erik.Sonnhammer at sbc.su.se> 
+
+ Reference: Sonnhammer ELL & Durbin R (1994). A workbench for Large Scale
+            Sequence Homology Analysis. Comput. Applic. Biosci. 10:301-307.
+
+ See http://www.sanger.ac.uk/resources/software/seqtools/ for more info.
+
+ Copyright (c) 2009-2011: Genome Research Ltd.
+ Blixem is distributed under the GNU Public License; see http://www.gnu.org/copyleft/gpl.txt
diff --git a/doc/User_doc/dotter_quick_start.html b/doc/User_doc/dotter_quick_start.html
new file mode 100644
index 0000000..bb779ee
--- /dev/null
+++ b/doc/User_doc/dotter_quick_start.html
@@ -0,0 +1,79 @@
+<head>
+  <title>Dotter - Quick Start</title>
+</head>
+
+
+<body>
+<h1>Dotter - Quick Start</h1>
+
+<ul>
+  <li><a href="release_notes.html">What's new</a></li>
+  <li><a href="#t_overview">Overview</a></li>
+  <li><a href="#t_mouse">Mouse controls</a></li>
+  <li><a href="#t_shortcuts">Keyboard shortcuts</a></li>
+  <li><a href="#t_settings">Settings</a></li>
+  <li><a href="#t_key">Colour key</a></li>
+</ul>
+
+
+<div id="t_overview">
+  <h2>Overview</h2>
+  <p>This page gives a quick-start guide to using Dotter. Other documentation is available here:</p>
+  <ul>
+    <li><a href="release_notes.html">What's new</a> (revision history)</li>
+    <li><a href="dotter_usage.txt">Usage</a> (command line options)</li>
+    <li><a href="Dotter_manual.pdf">User manual</a></li>
+    <li><a href="todo.html">Outstanding issues</a></li>
+  </ul>
+</div>
+
+
+<div id="t_mouse">
+  <h2>Mouse controls</h2>
+  <ul>
+    <li>Left button: position crosshair.</li>
+    <li>Middle button: drag to zoom in to a region.</li>
+  </ul>
+</div>
+
+
+<div id="t_shortcuts">
+  <h2>Keyboard shortcuts</h2>
+  <ul>
+    <li>Arrow keys: move crosshair one dot in arrow direction. Hold Shift to move by a single nucleotide rather than a whole amino-acid (if applicable).</li>
+    <li>, . : move crosshair along diagonals. Hold Shift to move by a single nucleotide, i.e. <, >.</li>
+    <li>[ ] : move along reverse diagonals. Hold Shift to move by a single nucleotide, i.e. {, }</li>
+    <li>Ctrl-Q : quit Dotter (including any child/parent Dotters)</li>
+    <li>Ctrl-W : close the current window (if in the Dotter window, will close the related alignment/greyramp tool as well)</li>
+    <li>Ctrl-P : print the Dotter window</li>
+    <li>Ctrl-S : settings</li>
+    <li>Ctrl-H : show this Help page</li>
+    <li>Ctrl-A : show the alignment tool</li>
+    <li>Ctrl-D : show the Dotter main window</li>
+    <li>Ctrl-G : show the greyramp tool</li>
+  </ul>
+</div>
+
+
+<div id="t_settings">  
+  <h2>Settings</h2>
+  <ul>
+    <li>Zoom: enter a higher value to zoom out. A value of 1 means 100%, 2 means 50% etc. A fraction of 1 can be entered in order to zoom in (e.g. 0.5 for a 200% zoom), but the display will appear stretched.</li>
+    <li>Horizontal range: enter the min and max coords to display on the horizontal scale. Note that this will be limited to the horizontal sequence range that Dotter was started up with.</li>
+    <li>Vertical range: enter the min and max coords to display on the vertical scale. Note that this will be limited to the vertical sequence range that Dotter was started up with.</li>
+    <li>Sliding window size: affects cut-off limit for how dots are drawn</li>
+    <ul>
+</div>
+
+
+<div id="t_key">
+  <h2>Residue colours (alignment tool)</h2>
+  <ul>
+    <li><span style="background:cyan">Cyan</span> = Identical Residue.</li>
+    <li><span style="background:slateblue">Blue</span> = Positive Score.</li>
+    <li>No colour = Negative score.</li>
+    <ul>
+</div>
+
+
+</body>
diff --git a/doc/User_doc/dotter_usage.txt b/doc/User_doc/dotter_usage.txt
new file mode 100644
index 0000000..eaab80d
--- /dev/null
+++ b/doc/User_doc/dotter_usage.txt
@@ -0,0 +1,92 @@
+
+ Dotter - Sequence dotplots with image enhancement tools.
+
+ Usage: dotter [options] <horizontal_sequence> <vertical_sequence>  [X options]
+
+   Where <horizontal_sequence> and <vertical_sequence> are file names for FASTA files
+   containing the two sequences.
+
+   Allowed sequence types:   Protein  -   Protein
+			     DNA      -   DNA
+			     DNA      -   Protein
+
+ Options:
+  -h, --help
+    Show this usage information
+
+  -b <file>, --batch-save=<file>
+    Batch mode; save dot matrix to <file>
+
+  -e <file>, --batch-export=<file>
+    Batch mode; export plot to PDF file <file>
+
+  -l <file>, --load
+    Load dot matrix from <file>
+
+  -m <float>, --memory-limit=<float>
+    Memory usage limit in Mb (default 0.5)
+
+  -z <int>, --zoom
+    Set zoom (compression) factor
+
+  -p <int>, --pixel-factor
+    Set pixel factor manually (ratio pixelvalue/score)
+
+  -W <int>, --window-size
+    Set sliding window size. (K => Karlin/Altschul estimate)
+
+  -M <file>, --matrix-file=<file>
+    Read in score matrix from <file> (Blast format; Default: Blosum62).
+
+  -F <file>, --sequence-file
+    Read in sequences and data from <file> (replaces sequencefiles).
+
+  -f <file>, --feature-file
+    Read feature segments from <file>
+
+  -H, --hsp-mode
+    Do not calculate dotplot at startup.
+
+  -R, --reverse-greyramp
+    Reversed Greyramp tool at start.
+
+  -r, --reverse-horizontal
+    Reverse and complement horizontal_sequence (if DNA)
+
+  -v, --reverse-vertical
+    Reverse and complement vertical_sequence (if DNA)
+
+  -D, --disable-mirror
+    Don't display mirror image in self comparisons
+
+  -w, --watson-only
+    For DNA: horizontal_sequence top strand only (Watson)
+
+  -c, --crick-only
+    For DNA: horizontal_sequence bottom strand only (Crick)
+
+  -q <int>, --horizontal-offset=<int>
+    Horizontal_sequence offset
+
+  -s <int>, --vertical-offset=<int>
+    Vertical_sequence offset
+
+  --compiled
+    Show package compile date
+
+  --version
+    Show package version
+
+-----
+ Written by Gemma Barson <gb10 at sanger.ac.uk>
+ Based on original code by Erik Sonnhammer <Erik.Sonnhammer at sbc.su.se> 
+
+ Reference: Sonnhammer ELL & Durbin R (1995). A dot-matrix program
+ 	    with dynamic threshold control suited for genomic DNA and protein
+ 	    sequence analysis. Gene 167(2):GC1-10.
+
+ See http://www.sanger.ac.uk/resources/software/seqtools/ for more info.
+
+ Copyright (c) 2010-2011: Genome Research Ltd.
+ Dotter is distributed under the GNU Public License; see http://www.gnu.org/copyleft/gpl.txt
+
diff --git a/doc/User_doc/index.html b/doc/User_doc/index.html
new file mode 100644
index 0000000..4fc537a
--- /dev/null
+++ b/doc/User_doc/index.html
@@ -0,0 +1,32 @@
+<head>
+  <title>SeqTools - User documentation</title>
+</head>
+
+
+<body>
+<div class="outer">
+  <h1>SeqTools User Documentation</h1>
+  <ul>
+    <li><a href="manuals.html">User manuals</a></li>
+    <li><a href="release_notes.html">Release history</a></li>
+  </ul>
+
+  <ul>
+    <li><a href="blixem_usage.txt">Blixem usage</a></li>
+    <li><a href="blixem_quick_start.html">Blixem quick start</a></li>
+  </ul>
+
+
+  <ul>
+    <li><a href="dotter_usage.txt">Dotter usage</a></li>
+    <li><a href="dotter_quick_start.html">Dotter quick start</a></li>
+  </ul>
+
+
+  <ul>
+    <li><a href="belvu_usage.txt">Belvu usage</a></li>
+    <li><a href="belvu_quick_start.html">Belvu quick start</a></li>
+  </ul>
+
+</div>
+</body>
diff --git a/doc/User_doc/manuals.html b/doc/User_doc/manuals.html
new file mode 100644
index 0000000..88fe01f
--- /dev/null
+++ b/doc/User_doc/manuals.html
@@ -0,0 +1,16 @@
+<head>
+  <title>SeqTools - User manuals</title>
+</head>
+
+
+<body>
+<div class="outer">
+  <h1>User manuals</h1>
+    <ul>
+      <li><a href="Blixem_manual.pdf">Blixem_manual.pdf</a></li>
+      <li><a href="Dotter_manual.pdf">Dotter_manual.pdf</a></li>
+      <li><a href="Belvu_manual.pdf">Belvu_manual.pdf</a></li>
+    </ul>
+
+</div>
+</body>
diff --git a/doc/User_doc/release_notes.html b/doc/User_doc/release_notes.html
new file mode 100755
index 0000000..54407b7
--- /dev/null
+++ b/doc/User_doc/release_notes.html
@@ -0,0 +1,723 @@
+<head>
+  <title>SeqTools - Release Notes</title>
+</head>
+
+
+<body>
+
+<h2>SeqTools - Release Notes</h2>
+
+<h4>Version 4.44.0</h4>
+<ul>
+  <li>Blixem
+  <ul>
+    <li>Features can now be added to multiple different groups/filters.
+  </ul>
+  <li>Belvu
+  <ul>
+    <li>Fix a problem where column highlighting can get out of sync with the text.
+  </ul>
+</ul>
+
+<h4>Version 4.43.0</h4>
+<ul>
+  <li>Blixem
+  <ul>
+    <li>Add an option to show the coverage view aligned in the detail section, as well as the overview section.
+    <li>Select clipboard features on start up, e.g. if you start blixem from selected features in zmap, then those features will be selected on start-up in blixem. You can then press 'g' or 'f' to group or filter those features.
+    <li>Improve group/filter functionality. Add shortcut keys to quickly group/filter/hide the selected features. See the new Group/Filter submenu on the right-click menu. Note that these keys work on the clipboard text so they can also be used to group/filter features that you have selected in zmap. 
+  </ul>
+  <li>Dotter
+    <ul>
+      <li>Fix a bug where SFS files were not being loaded. Note that the colour scheme has changed and you now need to use X11 color names or hex values in the file (see https://en.wikipedia.org/wiki/X11_color_names)
+      <li>Fix a problem where breakline labels were overlapping or not completely displayed.
+    </ul>
+</ul>
+
+<h4>Version 4.42.1</h4>
+<ul>
+  <li>Remove calls to the to_string function to fix a compile error on FreeBSD.
+</ul>
+
+<h4>Version 4.42.0</h4>
+<ul>
+  <li>Blixem
+  <ul>
+    <li>Added a feedback box to show the read depth at the selected coord. Hover over this box to see the specific base support (i.e. the number of A/C/G/Ts).
+  </ul>
+</ul>
+
+<h4>Version 4.41.0</h4>
+<ul>
+  <li>Switch to c++0x standard.
+</ul>
+
+
+<h4>Version 4.40.0</h4>
+<ul>
+  <li>Blixem
+  <ul>
+    <li>Blixem can now accept a 'command' tag in a gff line for a region feature. The given command should return gff and will be run by blixem on the given region.
+    <li>Blixem now supports fetching sequence data over https.
+  </ul>
+</ul>
+
+<h4>Version 4.39.3</h4>
+<ul>
+  <li>Blixem
+  <ul>
+    <li>Further improve the display of features in the detail view when they have transparent fill, making sure that they have a visible border.
+  </ul>
+</ul>
+
+<h4>Version 4.39.2</h4>
+<ul>
+  <li>Blixem
+  <ul>
+    <li>Improve the display of features in the detail view when they have transparent fill.
+  </ul>
+</ul>
+
+<h4>Version 4.39.1</h4>
+<ul>
+  <li>Belvu
+  <ul>
+    <li>Fix a bug in Belvu where the display was being initialised in command-line-only modes.
+  </ul>
+</ul>
+
+<h4>Version 4.39.0</h4>
+<ul>
+  <li>Dotter
+  <ul>
+    <li>Fix intermittent instability problems.
+  </ul>
+</ul>
+
+<h4>Version 4.38.0</h4>
+<ul>
+  <li>Blixem
+  <ul>
+    <li>There is now an optional setting to highlight "maybe-canonical" splice sites in Blixem. This can be used to help identify problems where the strand is incorrect in the input data - it highlights splice sites in a different colour if they would be canonical were they on the other strand.
+    <li>Fixed a bug with colinearity lines when an alignment's cigar string contains introns.
+  </ul>
+</ul>
+
+<h4>Version 4.37.0</h4>
+<ul>
+  <li>Blixem
+  <ul>
+    <li>There are now separate feedback boxes for the selected sequence name coordinates. Hover over each box to see a tooltip describing its contents.
+  </ul>
+</ul>
+
+<h4>Version 4.36</h4>
+<ul>
+  <li>Minor under-the-hood changes
+</ul>
+
+<h4>Version 4.35</h4>
+<ul>
+  <li>Blixem
+  <ul>
+    <li> Bug fix in sorting features, RT 473624
+  </ul>
+  <li> Compilation of the seqtools in parallel, RT 467905
+</ul>
+
+<h4>Version 4.34.6</h4>
+<ul>Belvu
+  <li>Fix bug with sorting by similarity/identity to first sequence (RT:473624)
+</ul>
+
+<h4>Version 4.34.2</h4>
+<ul>All
+  <li>Fix an error compiling with multiple threads (RT:467905)
+</ul>
+
+<h4>Version 4.34</h4>
+<ul>
+  <li>Blixem
+  <ul>
+    <li>Added functionality to shift-select a range of coordinates, and copy the reference/match sequence for that range.
+    <li>DNA search now highlights the resultant range of coordinates.
+    <li>Added a splitter bar to allow the variations track to be resized. 
+  </ul>
+  <li>Dotter
+  <ul>
+    <li>Fix a crash pressing Esc on an undocked alignment or greyramp tool.
+  </ul>
+  <li>All
+  <ul>
+    <li>Code reorganisation: the codebase is now in C++ rather than C, and a new module 'gbtools' has been created for generic utility functions.
+  </ul>
+</ul>
+
+<h4>Version 4.33</h4>
+<ul>
+  <li>Blixem/Dotter
+  <ul>
+    <li> Multi-dotter support; may now start multiple dotters from blixem
+    <li>The organism abbreviation is now 4 characters, rather than 2, to help avoid duplicates. (RT:456864) 
+  </ul>
+</ul>
+
+<h4>Version 4.32</h4>
+<ul>
+  <li>Blixem
+  <ul>
+    <li>Previously-unsupported GFF feature types can now be displayed as a new 'basic feature' type.
+    <li>Styles are now applied to the detail view as well as the big picture, so feature display is more consistent across the two views.
+    <li>Fix a bug where styles were not being applied to dynamically-loaded features.
+  </ul>
+  <li>Dotter
+  <ul>
+    <li>Added a 'maximise' button for the greyramp tool.
+    <li>Small fixes to inconsistencies in context-sensitive menus and keyboard shortcuts.
+  </ul>
+</ul>
+  
+
+<h4>Version 4.31</h4>
+<ul>
+  <li>All
+  <ul>
+    <li>Fix configure error on Cygwin on Windows 7.
+    <li>Make dependency on sqlite optional.
+  </ul>
+</ul>
+
+<h4>Version 4.30</h4>
+<ul>
+  <li>Blixem
+  <ul>
+    <li> Fix potential crash with internal processing
+    <li> Fix two bugs in data input
+  </ul>
+  <li>Dotter
+  <li>Belvu
+</ul>
+
+<h4>Version 4.29</h4>
+<ul>
+  <li>Blixem
+  <ul>
+    <li>Added the facility to run Dotter on an ad-hoc sequence (RT:408836).
+    <li>Added the facility to run Dotter against a transcript.
+  </ul>
+  <li>Dotter
+  <ul>
+    <li>Minimise the greyramp tool to a simple contrast slider. Use Ctrl-G to toggle between this and the full greyramp tool.
+  </ul>
+  <li>Belvu
+  <ul>
+    <li>Fix a bug with tree bootstrapping in Belvu.
+  </ul>
+</ul>
+
+<h4>Version 4.28</h4>
+<ul>
+  <li>Blixem
+  <ul>
+    <li>Fixed a bug where Blixem would crash if you drag-and-droped a pseudogene into it from ZMap. (RT:407536)
+    <li>Store original as well as upper-cased feature names to solve a lookup problem when fetching sequence data (RT:408965)
+  </ul>
+  <li>Dotter
+  <ul>
+    <li>Fixed a bug in Dotter where one of the coord labels on the alignment tool is not centred after resizing the window. 
+  </ul>
+</ul>
+  
+<h4>Version 4.27</h4>
+<ul>
+  <li>Blixem
+  <ul>
+    <li>You can now drag and drop features into Blixem. The dragged data must be text in GFF3 format (RT234245).
+    <li>Dotter auto-coords now uses the big picture range to make it more consistent (RT131802).
+  </ul>
+  <li>Dotter
+  <ul>
+    <li>Dotter's windows are now dockable. You can toggle docKing with Ctrl-K, and toggle the Alignment and Greyramp tool visibility with Ctrl-A and Ctrl-G respectively (RT398273).
+    <li>Splice sites are now highlighted in the alignment tool for known HSPs (RT335980).
+    <li>Fix a crash with showing HSPs.
+  </ul>
+</ul>
+
+<h4>Version 4.26</h4>
+<ul>
+  <li>Blixem
+  <ul>
+    <li>Add lines to show colinearity between alignment blocks.
+  </ul>
+</ul>
+
+<h4>Version 4.25</h4>
+<ul>
+  <li>Blixem
+  <ul>
+    <li>Add support for fetching sequence data from SQLite databases.
+  </ul>
+</ul>
+
+<h4>Version 4.24</h4>
+<ul>
+  <li>Blixem
+  <ul>
+    <li>Add support for a "cigar_bam" attribute in GFF, which contains a BAM-style cigar string.
+  </ul>
+</ul>
+
+<h4>Version 4.23</h4>
+<ul>
+  <li>Blixem
+  <ul>
+    <li>Minor change to use the GFF Gap string in preference to the new cigar_bam attribute (which isn't fully implemented yet)
+  </ul>
+</ul>
+
+<h4>Version 4.22</h4>
+<ul>
+  <li>Blixem
+  <ul>
+    <li>Add new config options for linking and squashing features
+    <li>Add a Clear button to the Find dialog
+    <li>Work-in-progress to add support for a cigar_bam attribute in the GFF
+  </ul>
+  <li>Dotter
+  <ul>
+    <li>Make sure dotter doesn't try to use X if it's not required
+  </ul>
+</ul>
+
+<h4>Version 4.21</h4>
+<ul>
+  <li>Blixem
+  <ul>
+    <li>Splice-site highlighting is enabled by default
+    <li>Improved support for small screens
+    <li>New colour scheme (RT329278)
+  </ul>
+  <li>Dotter
+  <ul>
+    <li>Add command-line arguments to specify sequence types (so Dotter does not have to guess)
+  </ul>
+</ul>
+
+<h4>Version 4.20</h4>
+<ul>
+  <li>All
+  <ul>
+    <li>Minor internal robustness improvements
+  </ul>
+</ul>
+
+<h4>Version 4.19</h4>
+<ul>
+  <li>All
+  <ul>
+    <li>Usage/version/help info are now printed to stdout, with successful exit code
+  </ul>
+</ul>
+
+<h4>Version 4.18</h4>
+<ul>
+  <li>Blixem
+  <ul>
+    <li>Add option to abbreviate window title prefixes
+    <li>Improve coverage view scale and labelling
+  </ul>
+</ul>  
+
+<h4>Version 4.17</h4>
+<ul>
+  <li>Blixem
+  <ul>
+    <li>Copy match/reference sequence to the clipboard from the right-click menu
+    <li>Allow loading of non-native file formats using fetch methods
+  </ul>
+  <li>Dotter
+  <ul>
+    <li>Fix crash on long slices
+    <li>Fix intermittent label rendering on long slices
+  </ul>
+</ul>
+
+<h4>Version 4.16</h4>
+<ul>
+  <li>All
+  <ul>
+    <li>Fixed a bug where the link in the About dialog did not work.
+    <li>Include the following font in the preferences list when searching for a fixed-width font: DejaVu Sans Mono
+  </ul>
+  <li>Blixem
+  <ul>
+    <li>Fixed a bug where Blixem was passing incorrect values in the %s and %e substitution variables for fetch method arguments (RT286051).
+  </ul>
+  <li>Dotter
+  <ul>
+    <li>Fixed a bug where the sequence labels in the Alignment tool were truncated.
+    <li>Removed deprecated drawing functions from Dotter (might address RT281848: intermittent problems with drawing axis labels).
+  </ul>
+</ul>
+
+<h4>Version 4.15</h4>
+<ul>
+  <li>Blixem
+  <ul>
+    <li>Fix a bug where blixem column label text overlaps
+    <li>Fix a bug where the source column is sometimes blank
+    <li>Make sure all stdout messages are flushed
+    <li>Improved error handling: check executables are in the path before trying to call them
+  </ul>
+</ul>
+
+<h4>Version 4.14</h4>
+<ul>
+  <li>Blixem
+  <ul>
+    <li>Sequence-fetching has been generalised so that it can now be used by users outside the Sanger. Data sources can be specified in the config file.
+    <li>The config file can now be used to specify whether features with the same name should be linked under the same parent.
+    <li>Fix an error that can occur when opening the help page in Firefox.
+  </ul>
+  <li>Belvu
+  <ul>
+    <li>Added keyboard shortcuts for Make-non-redundant (Ctrl-R) and Remove-partial-sequences (Ctrl-T)
+  </ul>
+</ul>
+  
+<h4>Version 4.13.2</h4>
+<ul>
+  <li>Blixem
+    <ul>
+      <li>Fixed a compilation error on Ubuntu 12.04.
+    </ul>
+  </ul>
+
+<h4>Version 4.13.1</h4>
+<ul>
+  <li>Blixem
+    <ul>
+      <li>Fixed a bug where features were not being linked under the same parent correctly.
+    </ul>
+  </ul>
+
+<h4>Version 4.13</h4>
+<ul>
+  <li>Blixem
+    <ul>
+      <li>Fixed a bug where the --squash-matches argument was being overridden by the config file.
+    </ul>
+  <li>Dotter
+    <ul>
+      <li>You can now select and copy sequence from the alignment tool using the mouse.
+      <li>Fixed a bug where the coordinates in the alignment tool were wrong if you set the display length to an even number.
+      <li>Fixed an issue where the greyramp tool had the wrong context menu.
+      <li>Fixed some bugs with printing: the alignment tool labels were not printed correctly; Ctrl-P on the alignment tool printed the wrong window; the background colour was not white in the print; the background colour in the alignment tool was getting messed up after a print operation.
+    </ul>
+  </ul>
+
+<h3>Version 4.12</h3>
+<ul>
+  <li>Blixem
+    <ul>
+      <li>Performance improvements when reading in large GFF files.
+      <li>Short reads are now counted as duplicates in the 'squashed' view even if they are from different sources.
+      <li>The detail-view now scrolls the selected match into view when you jump to the next/previous match. This also now works when matches are squashed.
+      <li>Fixed some bugs with handling of short read data that was causing some reads to appear misaligned.
+      <li>Fixed a bug where the sort order was incorrect for short reads.
+      <li>Fixed a bug in protein mode where the variations track would flicker, and you were unable to select features in the variations track.
+      <li>Removed duplicate sequence data from the sample GFF files.
+    </ul>
+</ul>
+
+<h3>Version 4.10.1</h3>
+<ul>
+  <li>Blixem
+  <ul>
+    <li>Added examples directory
+    <li>Improvements to test scripts
+    <li>Fixed incorrect return value from Blixem's main function
+  </ul>
+</ul>
+
+
+<h3>Version 4.10</h3>
+<ul>
+  <li>Blixem
+  <ul>
+    <li>Display settings are now saved on exit.
+  </ul>
+  <li>Dotter
+  <ul>
+    <li>Fixed a bug where exons were not always being displayed.
+    <li>Fixed a bug where Dotter would fail when comparing a very long horizontal sequence to a short vertical sequence (<a href="https://rt.sanger.ac.uk/Ticket/Display.html?id=242777">RT:242777</a>).
+    <li>Fixed an issue where you could not scroll to the very edge of the plot (<a href="https://rt.sanger.ac.uk/Ticket/Display.html?id=251308">RT:251308</a>).
+  </ul>
+  <li> Belvu
+  <ul>
+    <li>Fixed a crash when running in non-graphical mode.
+  </ul>
+</ul>
+
+<h3>Version 4.9</h3>
+<ul>
+  <li>Blixem
+    <ul>
+      <li>Fixed a bug from version 4.7 where blixem would crash if no config file was given.
+      <li>Fixed a bug in Blixem where Dotter would fail to start after opening the Blixem help page.
+    </ul>
+
+  <li>General
+    <ul>
+      <li>Fixed some memory leaks.
+    </ul>
+</ul>
+
+<h3>Version 4.8.1</h3>
+<ul>
+  <li>Blixem
+    <ul>
+      <li>Fixed a buffer overrun bug introduced in version 4.7.
+    </ul>
+</ul>
+
+<h3>Version 4.8</h3>
+<ul>
+  <li>Blixem
+    <ul>
+      <li>Improvements to installation scripts.
+      <li>Updated user manuals for changes since version 4.2.
+      <li>Fixed an issue where Blixem would fail to start if a config file was given but did not contain pfetch groups.
+    </ul>
+</ul>
+
+<h3>Version 4.7</h3>
+<ul>
+  <li>Blixem
+    <ul>
+      <li>Overlapping items in the variations track are now drawn on separate lines rather than being drawn over the top of each other.
+      <li>Split codons are now highlighted in exons in the detail view.
+      <li>Improvements to navigation in the big picture: double-clicking/dragging now scrolls the selected range (like middle-clicking/dragging); left-clicking on the highlight box and dragging allows it to be moved; the cursor now changes when dragging the highlight box; and the horizontal mouse wheel now works when over the transcript view.
+      <li>If you change column visibility or sizes, these settings are now remembered when you close and re-open Blixem.  You can revert to the default column visibility and sizes using the 'Reset to defaults' button on the Settings dialog.
+    </ul>
+
+  <li>Dotter
+    <ul>
+      <li>Fixed an issue with printing where only the visible part of the scrolled window was printed.
+      <li>Added the ability to export plots to PDF.  In batch mode, either the dot-matrix or the PDF, or both, can be saved.
+    </ul>
+    
+</ul>
+
+<h3>Version 4.6</h3>
+<ul>
+  <li>Blixem
+  <ul>
+    <li>Made the main window title more informative.
+    <li>Exons can now be selected by clicking in the big picture, and are sorted in the same order as the detail view.
+  </ul>
+  <li>Dotter
+  <ul>
+    <li>The transcript sections can now be bumped.
+    <li>The area near the border where alignments cannot be calculated (due to the sliding window calculation) is now shaded in red.
+  </ul>
+</ul>
+
+<h3>Version 4.5</h3>
+<ul>
+  <li>Blixem
+  <ul>
+    <li>Blixem now highlights regions in the reference sequence that are gaps (<a href="https://rt.sanger.ac.uk/Ticket/Display.html?id=225707">RT:225707</a>)
+    <li>Blixem now handles gap characters in the reference sequence (<a href="https://rt.sanger.ac.uk/Ticket/Display.html?id=226652">RT:226652</a>)
+    <li>Fixed a bug where multiple UTRs in the same exon are not displayed (<a href="https://rt.sanger.ac.uk/Ticket/Display.html?id=225220">RT:225220</a>)
+  </ul>
+  <br/>
+  <li>Belvu
+  <ul>
+    <li>Fixed a bug with the last column not being fully shown.
+    <li>Fixed a bug with columns not being resized correctly after deleting sequences.
+    <li>Made sure all terminal messages are terminated with a line break.
+    <li>Added <code>BELVU_STATUSBAR_SIZE</code> environment variable to allow the statusbar to have a different font size to the main window. (Set this to zero to hide the statusbar.)
+    <li>Fixed an issue where the fetch and annotations windows were not using the font size specified by <code>BELVU_FONT_SIZE</code>.
+    <li>Fixed a bug where the wrong colour scheme was selected in the menu when loading a residue colour scheme on start-up.
+    <li>Improved the size of the fetch window.
+    <li>Fixed a performance issue when reading in files with many annotation lines.
+  </ul>
+</ul>
+
+<h3>Version 4.4.1</h3>
+<ul>
+  <li>Belvu
+  <ul>
+    <li>Fixed a potential crash when opening the tree window if the user scrolls the mouse-wheel at the same time.
+    <li>Fixed an issue where user could not re-select the sort-by-similarity/id option after changing the selection.
+    <li>Added a fix to make sure tree cannot get so large that it causes a crash.
+    <li>Fixed a bug with sorting by similarity on start up when the first line is a markup line.
+  </ul>
+</ul>
+
+<h3>Version 4.4</h3>
+<ul>
+  <li>Blixem
+  <ul>
+    <li>There is a new --zoom-range argument, which allows the caller to specify the initial big picture range.
+    <li>Reference sequence coordinates can now be specified in the FASTA definition line in the sequence file; the line format must be:   <code>>name start end</code>
+    <li>Fixed a bug where introns that are partially out of range were not being shown.
+    <li>Fixed a bug where short reads were incorrectly being squashed onto the same line in 'squash matches' mode when their sources are different.
+    <li>Fixed a bug where the initial exon view height was sometimes being calculated incorrectly.
+    <li>Fixed a bug where starting Dotter fails if the fetch command returns a string such as "no match".
+  </ul>
+  <br/>
+  <li>Belvu
+  <ul>
+    <li>Added Belvu to the SeqTools package.
+    <li>The functionality to left-click a menu to get a default action has been removed; left- or right-clicking a menu will now always show the drop-down menu.  The default left-click actions have been moved to a toolbar adjacent to the menu; hover over the toolbar icons for tooltips.
+    <li>There is a new status bar at the bottom of the window; look out for feedback and helpful hints here.
+    <li>The color menu now only contains the color schemes; the other settings from this menu have been moved to the new Settings menu.
+    <li>You can quickly toggle between color-by-residue and color-by-conservation modes using the keyboard shortcut 't'.
+    <li>The 'toggle last palette' menu option has been removed because its original purpose (of being able to switch back to a custom color scheme) was not clear. There is now a 'custom' entry in the color scheme sub-menu that you can use for this purpose.  (Note that this only applies to color-by-residue mode.)
+    <li>There are some new keyboard shortcuts - see the <a href="belvu_quick_start.html">quick start guide</a> for details.
+    <li>You can now control the text size of the alignments using the zoom buttons on the toolbar.  You can change the text size of the menus using the <code>BELVU_FONT_SIZE</code> environment variable (e.g. <code>setenv BELVU_FONT_SIZE 14</code>).  NB To change the font size for all GTK applications, use the <code>~/.gtkrc-2.0</code> file instead (e.g. <code>gtk-font-name="sans serif 14"</code>).
+    <li>You can now search for an alignment by name using the Find button on the toolbar (or the Ctrl-F shortcut key).
+    <li>You can "tear off" drop-down menus using the dotted line at the top.
+    <li>You now get a different cursor when you are in the remove-many-sequences mode, rather than a dialog box that you must close to exit the mode; you can now exit this mode by deselecting the option in the toolbar or menu; by pressing the 'Esc' key; or by left-clicking anywhere in the alignment window.
+    <li>When you edit the alignment, the tree becomes invalidated and must be recalculated using the 'Recalculate tree' option on the File menu or right-click menu.
+    <li>If you change a tree by clicking a branch to swap nodes/re-root the tree, then the current tree window will be updated (rather than creating a new tree window, as in the old Belvu).  If the alignment is sorted by tree order, then it will be updated to reflect the new tree.  To revert to the original tree, you can recalculate it using the 'Recalculate tree' option on the File menu or right-click menu.
+  </ul>
+</ul>
+
+<h3>Version 4.2</h3>
+<ul>
+  <li>Blixem
+  <ul>
+    <li>Blixem now supports fetching of short-read data from BAM files.
+    <li>Blixem command-line arguments have changed.
+  </ul>
+</ul>
+
+<h3>Version 4.1.14 </h3>
+<ul>
+  <li>Blixem
+  <ul>
+    <li>Short reads: The 'short_read' feature type is now supported.
+    <li>Coverage: A new 'coverage view' has been added to show coverage depth - it can be enabled via the View dialog.
+    <li>Sorting: The sort-by drop-down box has been replaced with a Sort dialog, allowing sorting by multiple columns - open it with the Sort button on the toolbar.  The 'invert sort order' option has been moved from the Settings dialog to the Sort dialog.
+    <li>Search by column: When grouping or finding sequences, you can now search on data in different columns, not just the Name column.  See the Group and Find dialogs.
+    <li>Groups: You can now hide all sequences that are not in a group.  See the Groups dialog.
+  </ul>
+  <br/>
+  <li>Dotter
+  <ul>
+    <li>The 'short_read' feature type is now supported.
+    <li>The right-click menu has been shortened by placing the display options into a sub-menu.
+  </ul>
+</ul>
+
+<h3>Version 4.1.13 </h3>
+<ul>
+  <li>Blixem
+  <ul>
+    <li>Replaced the Help dialog with HTML help pages.
+  </ul>
+  <br/>
+  <li>Dotter
+  <ul>
+    <li>Fixed some bugs with scrolling in the alignment tool.
+    <li>Replaced the Help dialog with HTML help pages.
+  </ul>
+</ul>
+
+<h3>Version 4.1.12 </h3>
+<ul>
+<li>Blixem
+  <ul>
+    <li>You can now change the active reading frame by clicking in a list header (as well as in the list itself).
+  </ul>
+</ul>
+
+<h3>Version 4.1.11 </h3>
+<ul>
+  <li>Blixem
+  <ul>
+    <li>The 'Source' column is now enabled by default.  It is also sortable and its contents are now shown in the feedback area.
+    <li>Column widths can now be specified in the Blixem config file (which is supplied via the <code>-c</code> command line argument).
+  </ul>
+  <br/>
+  <li>Dotter
+  <ul>
+    <li>Fixed an issue where Dotter was overwriting the primary clipboard contents on startup.
+  </ul>
+</ul>
+
+<h3>Version 4.1.10 </h3>
+<ul>
+  <li>Blixem
+  <ul>
+    <li>Fixed a bug with populating optional data for protein variants.
+  </ul>
+</ul>
+
+<h3>Version 4.1.9 </h3>
+<ul>
+  <li>Blixem
+  <ul>
+    <li>Printing now scales to fit the page.
+    <li>Fixed a bug where splice sites were incorrectly being shown at termini.
+  </ul>
+  <br/>
+  <li>Dotter
+  <ul>
+    <li>You can now print from Dotter.
+    <li>There is now an exon view for the vertical sequence.
+    <li>There are now separator lines between sequences when Dottering multiple sequences.
+  </ul>
+</ul>
+
+<h3>Version 4.1.6</h3>
+<ul>
+  <li>Dotter
+  <ul>
+    <li>You can now copy coordinates from the alignment tool using the right-click menu.
+    <li>Re-added the exon view for the vertical sequence.
+  </ul>
+</ul>
+
+<h3>Version 4.1.5 </h3>
+<ul>
+  <li>Blixem  
+  <ul>
+    <li>Close all Dotters: There is a new menu option to close all Dotters started from the current Blixem. Right-click in Blixem to see the menu.
+  </ul>
+  <br/>
+  <li>Dotter
+  <ul>
+    <li>Dotter re-vamp: Dotter has been re-written to facilitate future improvements.  Most of the changes so far are under-the-hood, but you will notice a few cosmetic differences and additional shortcuts.
+    <li>Menu bar: As well as the right-click menu, there is now a menu-bar at the top of the main Dotter window.
+    <li>CDS/UTR regions: Exons are now separated into CDS and UTR regions: CDS regions are coloured green and UTR red.
+    <li>Close all sub-Dotters: You can close all related Dotter windows using the Quit menu option or Ctrl-Q.  This will close all sub-Dotters that were started under the same parent Dotter (by middle-dragging to zoom in to a region).  To just close an individual Dotter window, click on the x in the corner of the window or use your system shortcut for closing a window (e.g. Ctrl-W, or Cmd-W on Macs).  Note that the alignment tool and greyramp tool will be destroyed along with their paren [...]
+    <li>Close all Dotters from Blixem: All Dotter windows spawned from a Blixem will be closed when that Blixem is closed.
+    <li>Navigation keys: You no longer need to hold Shift when moving diagonally along an alignment using the keys ',.[]'. You can hold down Shift to move a single nucleotide at a time along a protein sequence, rather than moving a whole amino-acid.
+    <li>Keyboard shortcuts: The following keyboard shortcuts have been added to show the Alignment tool, main Dotter window or Greyramp tool, respectively: Ctrl-A, Ctrl-D and Ctrl-G.
+    <li>Settings dialog: The Parameter Control dialog box has been replaced by a more intuitive Settings dialog.  From here you can change the zoom or edit the display range.
+  </ul>
+</ul>
+
+<h3>Version 4.1.4 </h3>
+<ul>
+  <li>Blixem
+  <ul>
+    <li>Variations: SNPs, insertions, deletions etc. can be highlighted in the reference sequence, and shown in a 'variations track' above the reference sequence. See the Settings dialog or double-click the reference sequence to show/hide the variations track. Double-click a variation to open its URL. This is an experimental feature and the display is quite crude - please give us feedback on how you would like variations to be displayed, particularly where they overlap.
+    <li>PolyA tails: PolyA tails can be shown and polyA signals highlighted in the reference sequence. See the Settings dialog.
+    <li>CDS/UTR regions: Exons are now separated into CDS and UTR regions: CDS regions are coloured green and UTR red. Don't forget, you can quickly bump/un-bump the exon view by pressing 'b'.
+    <li>Moused-over item feedback: There is now an additional feedback area on the toolbar that shows information about the currently moused-over item.
+    <li>Status bar: There is now a status bar at the bottom of the window, which shows non-critical messages and warnings.
+    <li>Grid scale: The grid scale now has a finer level of granularity; you can set %ID per cell to as low as 0.1 (see the Settings dialog).
+  </ul>
+  <br/>
+  <li>Dotter
+  <ul>
+    <li>New Dotter: Dotter has had a re-vamp - check the Dotter Help page for more info.
+  </ul>
+</ul>
+
+</body>
diff --git a/doc/User_doc/todo.html b/doc/User_doc/todo.html
new file mode 100644
index 0000000..393fd3b
--- /dev/null
+++ b/doc/User_doc/todo.html
@@ -0,0 +1,61 @@
+<head>
+  <title>SeqTools - To Do</title>
+</head>
+
+
+<body>
+  <h2>SeqTools package to-do lists</h2>
+
+  <h3>Blixem</h3>
+  <ul>
+    <li>Issues
+    <ul>
+      <li>Variations: the variations track is experimental code and will need to be improved, in particular in its handling of overlapping features.
+      <li>Feature-series: this functionality was disabled when Blixem and Dotter were re-written at version 4. We should consider whether this is still a useful feature and, if so, whether to use the original SFS file format or to switch to GFF.  The SFS file format is documented <a href="http://sfixem.sbc.su.se/SFS_desc.html">here</a>.
+      <li>Multiple row selections: using the up/down arrow keys to move the row selection doesn't always work if there are adjacent rows from the same match sequence.
+      <li>DNA search: this currently just jumps to the start of the DNA section that was found; we should also highlight the found DNA in the reference sequence.
+      <li>Printing: the pfetch window should have a print option.
+    </ul>
+    <br/>
+    <li>Enhancements
+    <ul>
+      <li>It would be nice to be able to view the sequence data for an insertion (a vertical yellow line in a match sequence) in Blixem, e.g. by hovering over it with the mouse.
+      <li>When you hover over an exon in the exon view in Blixem (when bumped), it would be nice if info about the exon were shown in the toolbar feedback area.
+      <li>When running Dotter on a large range it takes a long time to start up and there is no indication that anything is happening; it would be good to have a status bar of some description, and a cancel button. When running from Blixem, we should report if Dotter fails to start.
+      <li>When calling Dotter from Blixem, start Dotter with the crosshair placed at the currently-selected coords in Blixem (if applicable).
+      <li>Cosmetic: the %ID labels on the big picture grid should be right-aligned.
+      <li>Button tooltips: the zoom buttons in the big-picture should have tooltips.
+    </ul>
+  </ul>
+
+  <h3>Dotter</h3>
+  <ul>
+    <li>Issues
+    <ul>
+      <li>There is a bug where the dot-plot can appear blacked-out if the plot is very wide and you zoom in (say to about half of the default compression factor).
+    </ul>
+    <br/>
+    <li>Enhancements
+    <ul>
+      <li>If you hit the boundary of one sequence when moving along a diagonal in Dotter and continue to press the movement keys (,.[]), then it stops moving on the one sequence but continues to move along the other, i.e. it goes off the diagonal. It would be nicer if it stopped moving altogether.
+    </ul>
+  </ul>
+
+  <h3>Belvu</h3>
+  <ul>
+    <li>Issues
+    <ul>
+      <li>Printing: the pfetch window should have a print option; so should the Annotations window.
+      <li>In the colour-by-conservation colour schemes, the foreground colour is tied to the background colour.  This means that if the same background colour is specified more than once, the foreground colours are ambiguous.
+      <li>Colours dialog: the dialog for editing the residue colours used to have a section at the bottom showing residues grouped by colour. This has not been implemented in the new Belvu yet.
+      <li>For short alignments, the initial window size is too large.
+    </ul>
+    <br/>
+    <li>Enhancements
+    <ul>
+      <li>Undo function (<a href="https://rt.sanger.ac.uk/Ticket/Display.html?id=214316">RT:214316</a>).
+      <li>Search-for-residues function (<a href="https://rt.sanger.ac.uk/Ticket/Display.html?id=212364">RT:212364</a>).
+    </ul>
+</ul>
+
+</body>
diff --git a/doc/index.html b/doc/index.html
new file mode 100644
index 0000000..e415bcc
--- /dev/null
+++ b/doc/index.html
@@ -0,0 +1,16 @@
+<head>
+  <title>SeqTools</title>
+</head>
+
+
+<body>
+<div class="outer">
+  <h1>SeqTools</h1>
+  <p>This documentation contains all information related to the source-code and usage of the SeqTools package.</p>
+  <ul>
+    <li><a href="Design_notes/index.html">Design notes</a></li>
+    <li><a href="User_doc/index.html">User documentation</a></li>
+  </ul>
+
+</div>
+</body>
diff --git a/dotterApp/Makefile.am b/dotterApp/Makefile.am
new file mode 100644
index 0000000..340f0bf
--- /dev/null
+++ b/dotterApp/Makefile.am
@@ -0,0 +1,25 @@
+
+SUBDIRS = .
+
+include $(top_srcdir)/Makefile.am.common
+
+# there's a problem on ubuntu 14 with finding X11 so this is a hopefully temporary hack...
+#X_LIB = -lX11 -lm
+
+bin_PROGRAMS = dotter
+dotter_SOURCES = dotterMain.cpp greyramptool.cpp alignmenttool.cpp dotplot.cpp dotter.cpp dotterKarlin.cpp seqtoolsExonView.cpp dotter_.hpp dotter.hpp seqtoolsExonView.hpp 
+dotter_LDADD = $(top_builddir)/seqtoolsUtils/libSeqtoolsUtils.a 
+
+# If gbtools is in a subdirectory, add it; otherwise look for a local installation
+if USE_GBTOOLS
+dotter_LDADD += $(top_builddir)/gbtools/.libs/libgbtools.a            
+else
+dotter_LDADD += -lgbtools
+endif
+
+# the gtk deps etc. must go at the end so that gbtools can pick them up
+dotter_LDADD += $(DEPS_LIBS) $(X_LIB)
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/dotterApp/Makefile.in
diff --git a/dotterApp/Makefile.in b/dotterApp/Makefile.in
new file mode 100644
index 0000000..6be102a
--- /dev/null
+++ b/dotterApp/Makefile.in
@@ -0,0 +1,729 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 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@
+
+# Common settings for compiles.
+#
+
+VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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 = :
+DIST_COMMON = $(top_srcdir)/Makefile.am.common $(srcdir)/Makefile.in \
+	$(srcdir)/Makefile.am $(top_srcdir)/config/depcomp
+
+# If gbtools is in a subdirectory, add it to the include path
+ at USE_GBTOOLS_TRUE@am__append_1 = -I$(top_srcdir)/gbtools/src/include
+bin_PROGRAMS = dotter$(EXEEXT)
+
+# If gbtools is in a subdirectory, add it; otherwise look for a local installation
+ at USE_GBTOOLS_TRUE@am__append_2 = $(top_builddir)/gbtools/.libs/libgbtools.a            
+ at USE_GBTOOLS_FALSE@am__append_3 = -lgbtools
+subdir = dotterApp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/./seqtools_version.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)"
+PROGRAMS = $(bin_PROGRAMS)
+am_dotter_OBJECTS = dotterMain.$(OBJEXT) greyramptool.$(OBJEXT) \
+	alignmenttool.$(OBJEXT) dotplot.$(OBJEXT) dotter.$(OBJEXT) \
+	dotterKarlin.$(OBJEXT) seqtoolsExonView.$(OBJEXT)
+dotter_OBJECTS = $(am_dotter_OBJECTS)
+am__DEPENDENCIES_1 =
+dotter_DEPENDENCIES =  \
+	$(top_builddir)/seqtoolsUtils/libSeqtoolsUtils.a \
+	$(am__append_2) $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+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)
+AM_V_CXX = $(am__v_CXX_ at AM_V@)
+am__v_CXX_ = $(am__v_CXX_ at AM_DEFAULT_V@)
+am__v_CXX_0 = @echo "  CXX     " $@;
+am__v_CXX_1 = 
+CXXLD = $(CXX)
+CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+	-o $@
+AM_V_CXXLD = $(am__v_CXXLD_ at AM_V@)
+am__v_CXXLD_ = $(am__v_CXXLD_ at AM_DEFAULT_V@)
+am__v_CXXLD_0 = @echo "  CXXLD   " $@;
+am__v_CXXLD_1 = 
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = $(dotter_SOURCES)
+DIST_SOURCES = $(dotter_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-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 \
+	tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+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@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPS_CFLAGS = @DEPS_CFLAGS@
+DEPS_LIBS = @DEPS_LIBS@
+DEPS_SQLITE3_CFLAGS = @DEPS_SQLITE3_CFLAGS@
+DEPS_SQLITE3_LIBS = @DEPS_SQLITE3_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+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_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+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_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+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@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = .
+
+#AM_CPPFLAGS = -g -Wall $(DEPS_CFLAGS) -I$(top_srcdir)
+AM_CPPFLAGS = $(DEPS_CFLAGS) -I$(top_srcdir) $(am__append_1)
+AM_CXXFLAGS = -std=c++11 -g -Wall
+dotter_SOURCES = dotterMain.cpp greyramptool.cpp alignmenttool.cpp dotplot.cpp dotter.cpp dotterKarlin.cpp seqtoolsExonView.cpp dotter_.hpp dotter.hpp seqtoolsExonView.hpp 
+
+# the gtk deps etc. must go at the end so that gbtools can pick them up
+dotter_LDADD = $(top_builddir)/seqtoolsUtils/libSeqtoolsUtils.a \
+	$(am__append_2) $(am__append_3) $(DEPS_LIBS) $(X_LIB)
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/dotterApp/Makefile.in
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .cpp .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(top_srcdir)/Makefile.am.common $(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 dotterApp/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign dotterApp/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_srcdir)/Makefile.am.common:
+
+$(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)
+	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+	fi; \
+	for p in $$list; do echo "$$p $$p"; done | \
+	sed 's/$(EXEEXT)$$//' | \
+	while read p p1; do if test -f $$p \
+	  ; 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) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+	      $(INSTALL_PROGRAM_ENV) $(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:
+	-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+
+dotter$(EXEEXT): $(dotter_OBJECTS) $(dotter_DEPENDENCIES) $(EXTRA_dotter_DEPENDENCIES) 
+	@rm -f dotter$(EXEEXT)
+	$(AM_V_CXXLD)$(CXXLINK) $(dotter_OBJECTS) $(dotter_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/alignmenttool.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dotplot.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dotter.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dotterKarlin.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dotterMain.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/greyramptool.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/seqtoolsExonView.Po at am__quote@
+
+.cpp.o:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+# 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.
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	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"
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	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; \
+	$(am__define_uniq_tagged_files); \
+	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-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	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"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+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 \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    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 $(PROGRAMS)
+installdirs: installdirs-recursive
+installdirs-am:
+	for dir in "$(DESTDIR)$(bindir)"; 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:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+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."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-recursive
+
+clean-am: clean-binPROGRAMS clean-generic mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile 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-binPROGRAMS
+
+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 -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+	check-am clean clean-binPROGRAMS clean-generic cscopelist-am \
+	ctags ctags-am distclean distclean-compile distclean-generic \
+	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 installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \
+	uninstall-am uninstall-binPROGRAMS
+
+
+# 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/dotterApp/alignmenttool.cpp b/dotterApp/alignmenttool.cpp
new file mode 100644
index 0000000..c47b180
--- /dev/null
+++ b/dotterApp/alignmenttool.cpp
@@ -0,0 +1,1472 @@
+/*  File: alignmenttool.c
+ *  Author: Gemma Barson, 2010-09-02
+ *  Copyright (c) 2010 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: Creates the alignment tool window for a Dotter window.
+ *              The alignment tool shows the sequence data for the currently-
+ *              selected coordinates in the main Dotter window that it is
+ *              associated with. The two windows work together so that when the
+ *              selected coords are changed on one window they are updated on
+ *              the other. The alignment tool is owned by the Dotter window and
+ *              will be destroyed when the Dotter window is closed.
+ *----------------------------------------------------------------------------
+ */
+
+#include <dotterApp/dotter_.hpp>
+#include <seqtoolsUtils/utilities.hpp>
+#include <gtk/gtk.h>
+#include <math.h>
+#include <string.h>
+#include <gdk/gdkkeysyms.h>
+
+
+static int atob[]       /* OLD (starting at 1) ASCII-to-binary translation table  (Inherited from blast) */
+= {
+NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,24,NA,NA,NA,NA,NA,
+NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+NA, 1,21, 5, 4, 7,14, 8, 9,10,NA,12,11,13, 3,NA,
+15, 6, 2,16,17,NA,20,18,23,19,22,NA,NA,NA,NA,NA,
+NA, 1,21, 5, 4, 7,14, 8, 9,10,NA,12,11,13, 3,NA,
+15, 6, 2,16,17,NA,20,18,23,19,22,NA,NA,NA,NA,NA,
+
+NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA 
+};
+
+
+
+#define DEFAULT_ALIGNMENT_LENGTH                    125   /* default number of sequence chars to display in the alignment tool */
+#define MIN_ALIGNMENT_LENGTH                        0     /* min number of sequence chars to display in the alignment tool */
+#define SELECTED_COORD_MARKER_HEIGHT                12    /* the height of the marker that indicates the currently-selected coord */
+
+
+/* Function pointer for expose functions */
+typedef gboolean (*ExposeFunc)(GtkWidget *widget, GdkEventExpose *event, gpointer data);
+
+
+class SequenceProperties
+{
+public:
+  GtkWidget *widget;
+  const char *seqName;
+  const char *sequence;
+  BlxSeqType seqType;               /* whether this sequence is in nucleotide or peptide coords */
+  BlxStrand strand;
+  int frame;
+  IntRange *displayRange;           /* the displayed range; pointer to refDisplayRange or matchDisplayRange */
+  IntRange *fullRange;              /* the full range of the sequence; pointer to refSeqRange or matchSeqRange */
+  IntRange fullRangeDisplayCoords;  /* the full range of the sequence in display coords (i.e. converted to peptide coords where appropriate) */
+  gboolean scaleReversed;           /* whether the scale for this sequence is shown reversed (i.e. high-to-low rather than low-to-high) */
+  GSList *compSeqs;                 /* list of other sequence widgets that this sequence will be compared against */
+  gboolean horizontal;              /* true if this is the horizontal (ref) seq, false if it's the vertical (match) seq */
+};
+
+
+class AlignmentToolProperties
+{
+public:
+  GtkWidget *widget;
+  GtkWidget *alignmentWindow;      /* the toplevel window the greyrampTool will be in IF
+                                    * undocked from the main window */
+  int alignmentLen;                 /* the number of coords wide the alignment too displays */
+  IntRange refDisplayRange;         /* the current ref seq range displayed in the tool */
+  IntRange matchDisplayRange;       /* the current match seq range displayed in the tool */
+
+  gboolean dragging;                /* true when a drag is in progress */
+  int dragStart;                    /* set to the start coord where the user initiates a drag */
+
+  GtkWidget *selectionWidget;       /* text in this widget should be highlighted (null if none) */
+  IntRange selectionRange;
+  
+  DotterWindowContext *dotterWinCtx;
+
+  gboolean spliceSitesOn;
+};
+
+
+
+/* Local function declarations */
+static void                        drawSequence(GdkDrawable *drawable, GtkWidget *widget, GtkWidget *alignmentTool);
+static void                        drawSequenceHeader(GtkWidget *widget, GtkWidget *alignmentTool, GdkDrawable *drawable, const gboolean horizontal);
+static int                         getSequenceOffset(SequenceProperties *properties, DotterContext *dc);
+static int                         getCoordAtPos(const int x, GtkWidget *sequenceWidget, GtkWidget *alignmentTool);
+static void                        connectSequenceSignals(GtkWidget *widget, GtkWidget *alignmentTool);
+static void                        sequenceInitiateDragging(GtkWidget *sequenceWidget, GtkWidget *alignmentTool, const int x);
+static void                        sequenceFinishDragging(GtkWidget *sequenceWidget, GtkWidget *alignmentTool, const int x);
+static void                        highlightSequenceBase(SequenceProperties *seq1, AlignmentToolProperties *atProperties, DotterWindowContext *dwc, const int displayIdx, const int seq1Idx, const int seq1Start, const gboolean highlight, GdkGC *gc, GdkDrawable *drawable);
+static void                        selectVisibleSequence(GtkWidget *sequenceWidget, GtkWidget *alignmentTool);
+static int                         getDisplayStart(SequenceProperties *properties, DotterContext *dc);
+static char*                       getSequenceBetweenCoords(GtkWidget *sequenceWidget, const int startCoord, const int endCoord, DotterWindowContext *dwc);
+static int                         getSequenceStart(SequenceProperties *properties, DotterContext *dc, const gboolean convertToDisplayCoords);
+static int                         getSequenceEnd(SequenceProperties *properties, DotterContext *dc, const gboolean convertToDisplayCoords);
+static gboolean                    onDeleteAlignmentTool(GtkWidget *widget, GdkEvent *event, gpointer data);
+
+static void highlightSpliceSite(SequenceProperties *seq1,
+                                AlignmentToolProperties *atProperties,
+                                DotterWindowContext *dwc,
+                                const int coord,
+                                const gboolean isStart,
+                                GdkGC *gc,
+                                GdkDrawable *drawable);
+
+
+
+/***********************************************************
+ *                       Properties                        *
+ ***********************************************************/
+
+static SequenceProperties* sequenceGetProperties(GtkWidget *widget)
+{
+  return widget ? (SequenceProperties*)(g_object_get_data(G_OBJECT(widget), "SequenceProperties")) : NULL;
+}
+
+static void onDestroySequenceWidget(GtkWidget *widget)
+{
+  SequenceProperties *properties = sequenceGetProperties(widget);
+  
+  if (properties)
+    {
+      g_object_set_data(G_OBJECT(widget), "SequenceProperties", NULL);
+      delete properties;
+      properties = NULL;
+    }
+}
+
+static void sequenceCreateProperties(GtkWidget *widget, 
+                                     DotterContext *dc,
+                                     const char *seqName,
+                                     const char *sequence,
+                                     const BlxSeqType seqType,
+                                     const BlxStrand strand,
+                                     const int frame,
+                                     IntRange *displayRange,
+                                     IntRange *fullRange,
+                                     gboolean scaleReversed,
+                                     GSList *compSeqs,
+                                     gboolean horizontal)
+{
+  if (widget)
+    {
+      SequenceProperties *properties = new SequenceProperties;
+
+      properties->widget = widget;
+      properties->seqName = seqName;
+      properties->sequence = sequence;
+      properties->seqType = seqType;
+      properties->strand = strand;
+      properties->frame = frame;
+      properties->displayRange = displayRange;
+      properties->fullRange = fullRange;
+      properties->scaleReversed = scaleReversed;
+      properties->compSeqs = compSeqs;
+      properties->horizontal = horizontal;
+
+      properties->fullRangeDisplayCoords.set(getSequenceStart(properties, dc, TRUE),
+                                             getSequenceEnd(properties, dc, TRUE));
+      
+      g_object_set_data(G_OBJECT(widget), "SequenceProperties", properties);
+      g_signal_connect(G_OBJECT(widget), "destroy", G_CALLBACK(onDestroySequenceWidget), NULL); 
+    }
+}
+
+
+static AlignmentToolProperties* alignmentToolGetProperties(GtkWidget *widget)
+{
+  return widget ? (AlignmentToolProperties*)(g_object_get_data(G_OBJECT(widget), "AlignmentToolProperties")) : NULL;
+}
+
+static void onDestroyAlignmentTool(GtkWidget *widget)
+{
+  AlignmentToolProperties *properties = alignmentToolGetProperties(widget);
+  
+  if (properties)
+    {
+      g_object_set_data(G_OBJECT(widget), "AlignmentToolProperties", NULL);
+      delete properties;
+      properties = NULL;
+    }
+}
+
+static void alignmentToolCreateProperties(GtkWidget *widget,
+                                          GtkWidget *alignmentWindow, 
+                                          DotterWindowContext *dotterWinCtx)
+{
+  if (widget)
+    {
+      AlignmentToolProperties *properties = new AlignmentToolProperties;
+    
+      properties->widget = widget;
+      properties->alignmentWindow = alignmentWindow;
+      properties->dotterWinCtx = dotterWinCtx;
+      properties->alignmentLen = DEFAULT_ALIGNMENT_LENGTH;
+      properties->refDisplayRange.set(0, 20);
+      properties->matchDisplayRange.set(0, 20); /* to do: put real values in here for the ranges */
+
+      properties->dragging = FALSE;
+      properties->dragStart = 0;
+      properties->selectionWidget = NULL;
+      
+      properties->spliceSitesOn = TRUE;
+
+      g_object_set_data(G_OBJECT(widget), "AlignmentToolProperties", properties);
+      g_signal_connect(G_OBJECT(widget), "destroy", G_CALLBACK(onDestroyAlignmentTool), NULL); 
+    }
+}
+
+
+/***********************************************************
+ *                       Events                            *
+ ***********************************************************/
+
+void alignmentToolRedrawAll(GtkWidget *alignmentTool)
+{
+  callFuncOnAllChildWidgets(alignmentTool, (gpointer)widgetClearCachedDrawable);
+  gtk_widget_queue_draw(alignmentTool);
+}
+
+
+/* Called when the alignment tool window changes size */
+static void onSizeAllocateAlignmentTool(GtkWidget *alignmentTool, GtkAllocation *allocation, gpointer data)
+{
+  alignmentToolRedrawAll(alignmentTool);
+}
+
+
+/* Expose function for a widget containing a section of sequence. SequenceProperties should
+ * be set on any widget that this is to be called for. */
+static gboolean onExposeSequence(GtkWidget *widget, GdkEventExpose *event, gpointer data)
+{
+  GtkWidget *alignmentTool = GTK_WIDGET(data);
+  GdkWindow *drawable = widgetGetDrawable(widget);
+  
+  if (!drawable)
+    {
+      drawable = createBlankPixmap(widget);
+      drawSequence(drawable, widget, alignmentTool);
+    }
+  
+  if (drawable)
+    {
+      GdkGC *gc = gdk_gc_new(widget->window);
+      gdk_draw_drawable(widget->window, gc, drawable, 0, 0, 0, 0, -1, -1);
+      g_object_unref(gc);
+    }
+  
+  return TRUE;
+}
+
+
+/* Expose function for a widget containing a reference sequence header. */
+static gboolean onExposeRefSequenceHeader(GtkWidget *widget, GdkEventExpose *event, gpointer data)
+{
+  GtkWidget *alignmentTool = GTK_WIDGET(data);
+  GdkDrawable *drawable = widgetGetDrawable(widget);
+
+  if (!drawable)
+    {
+      drawable = createBlankPixmap(widget);
+      drawSequenceHeader(widget, alignmentTool, drawable, TRUE);
+    }
+  
+  if (drawable)
+    {
+      GdkGC *gc = gdk_gc_new(widget->window);
+      gdk_draw_drawable(widget->window, gc, drawable, 0, 0, 0, 0, -1, -1);
+      g_object_unref(gc);
+    }
+  
+  return TRUE;
+}
+
+
+/* Expose function for a widget containing a match sequence header. */
+static gboolean onExposeMatchSequenceHeader(GtkWidget *widget, GdkEventExpose *event, gpointer data)
+{
+  GtkWidget *alignmentTool = GTK_WIDGET(data);
+  GdkDrawable *drawable = widgetGetDrawable(widget);
+  
+  if (!drawable)
+    {
+      drawable = createBlankPixmap(widget);
+      drawSequenceHeader(widget, alignmentTool, drawable, FALSE);
+    }
+  
+  if (drawable)
+    {
+      GdkGC *gc = gdk_gc_new(widget->window);
+      gdk_draw_drawable(widget->window, gc, drawable, 0, 0, 0, 0, -1, -1);
+      g_object_unref(gc);
+    }
+  
+  return TRUE;
+}
+
+
+/* This should be called when the range displayed by the alignment tool has changed */
+static void onAlignmentToolRangeChanged(GtkWidget *alignmentTool)
+{
+  alignmentToolRedrawAll(alignmentTool);
+}
+
+
+/* Mouse button handler when clicking on a sequence */
+static gboolean onButtonPressSequence(GtkWidget *sequenceWidget, GdkEventButton *event, gpointer data)
+{
+  gboolean handled = FALSE;
+  
+  if (event->type == GDK_BUTTON_PRESS && event->button == 1) /* left click */
+    {
+      GtkWidget *alignmentTool = GTK_WIDGET(data);
+      sequenceInitiateDragging(sequenceWidget, alignmentTool, event->x);
+      handled = TRUE;
+    }
+  else if (event->type == GDK_2BUTTON_PRESS && event->button == 1) /* left double-click */
+    {
+      GtkWidget *alignmentTool = GTK_WIDGET(data);
+      selectVisibleSequence(sequenceWidget, alignmentTool);
+      handled = TRUE;
+    }
+
+  return handled;
+}
+
+
+/* Mouse button handler when releasing from a click on a sequence widget */
+static gboolean onButtonReleaseSequence(GtkWidget *sequenceWidget, GdkEventButton *event, gpointer data)
+{
+  gboolean handled = FALSE;
+
+  if (event->button == 1) /* left click */
+    {
+      GtkWidget *alignmentTool = GTK_WIDGET(data);
+      sequenceFinishDragging(sequenceWidget, alignmentTool, event->x);
+      handled = TRUE;
+    }
+    
+  return handled;
+}
+
+
+static gboolean onMouseMoveSequence(GtkWidget *sequenceWidget, GdkEventMotion *event, gpointer data)
+{
+  gboolean handled = FALSE;
+
+  if (event->state & GDK_BUTTON1_MASK) /* left drag */
+    {
+      /* Update the current selection range */
+      GtkWidget *alignmentTool = GTK_WIDGET(data);
+      
+      AlignmentToolProperties *atProperties = alignmentToolGetProperties(alignmentTool);
+
+      if (atProperties)
+        {
+          const int newCoord = getCoordAtPos(event->x, sequenceWidget, alignmentTool);
+      
+          atProperties->selectionRange.set(atProperties->dragStart, newCoord);
+          widgetClearCachedDrawable(sequenceWidget, NULL);
+          gtk_widget_queue_draw(sequenceWidget);
+      
+          handled = TRUE;
+        }
+    }
+  
+  return handled;
+}
+
+
+void alignmentToolSetSpliceSitesOn(GtkWidget *alignmentTool, const gboolean spliceSitesOn)
+{
+  if (alignmentTool)
+    {
+      AlignmentToolProperties *properties = alignmentToolGetProperties(alignmentTool);
+      
+      if (properties)
+        {
+          properties->spliceSitesOn = spliceSitesOn;
+          alignmentToolRedrawAll(alignmentTool);
+        }
+    }
+}
+
+gboolean alignmentToolGetSpliceSitesOn(GtkWidget *alignmentTool)
+{
+  gboolean result = FALSE;
+
+  if (alignmentTool)
+    {
+      AlignmentToolProperties *properties = alignmentToolGetProperties(alignmentTool);
+
+      if (properties)
+        result = properties->spliceSitesOn;
+    }
+
+  return result;
+}
+
+
+/***********************************************************
+ *                       Get/set functions                 *
+ ***********************************************************/
+
+/* Set the alignment range centre based on the currently-selected match/ref seq coord. */
+void updateAlignmentRange(GtkWidget *alignmentTool, DotterWindowContext *dwc)
+{
+  AlignmentToolProperties *properties = alignmentToolGetProperties(alignmentTool);
+
+  if (properties && dwc && dwc->dotterCtx)
+    {
+      DotterContext *dc = dwc->dotterCtx;
+
+      /* Re-create the range, centred on the set coordinate and with the alignment tool's alignment 
+       * length. Note that the length is the number of display chars but the reference sequence is
+       * in nucleotide coords so needs converting. (The match sequence is always in display coords so
+       * will be correct whether we're displaying nucleotides or peptides.) */
+      int len = properties->alignmentLen * getResFactor(dc, TRUE);
+      int offset = ceil((double)properties->alignmentLen / 2.0) * getResFactor(dc, TRUE);
+      properties->refDisplayRange.setMin(dwc->refCoord - offset);
+      properties->refDisplayRange.setMax(properties->refDisplayRange.min() + len); //uses updated min
+
+      len = properties->alignmentLen * getResFactor(dc, FALSE);
+      offset = ceil((double)properties->alignmentLen / 2.0) * getResFactor(dc, FALSE);
+      properties->matchDisplayRange.setMin(dwc->matchCoord - offset);
+      properties->matchDisplayRange.setMax(properties->matchDisplayRange.min() + len); //uses updated min
+    }
+}
+
+
+/***********************************************************
+ *                       Initialisation                    *
+ ***********************************************************/
+
+/* Create a widget that will display the reference sequence for the given
+ * frame/strand. Add it to the given row in the given table and increment
+ * the row number. Also add it to the given refSeqList */
+static void createRefSeqWidget(GtkWidget *alignmentTool,
+                               AlignmentToolProperties *properties,
+                               const int frame,
+                               const BlxStrand strand,
+                               const char strandChar,
+                               GSList *matchSeqList,
+                               GtkTable *table,
+                               const int xpad,
+                               const int ypad,
+                               int *row,
+                               GSList **refSeqList)
+{
+  g_return_if_fail(properties->dotterWinCtx && properties->dotterWinCtx->dotterCtx) ;
+
+  DotterContext *dc = properties->dotterWinCtx->dotterCtx;
+  
+  /* Create a label containing the name */
+  char *text = g_strdup_printf("%s (%c%d):", dc->refSeqName, strandChar, frame);
+  GtkWidget *label = createLabel(text, 0.0, 0.0, FALSE, TRUE, TRUE);
+  labelSetFont(label, dc->fontDesc);
+  g_free(text);
+  gtk_table_attach(table, label, 1, 2, *row, *row + 1, GTK_FILL, GTK_SHRINK, xpad, ypad);
+  
+  /* Find which sequence is applicable (fwd or rev strand or translated peptide seq) */
+  char *sequence = dc->refSeq;
+  
+  if (dc->displaySeqType == BLXSEQ_DNA && strand == BLXSTRAND_REVERSE)
+    sequence = dc->refSeqRev;
+  else if (dc->blastMode == BLXMODE_BLASTX)
+    sequence = dc->peptideSeqs[frame - 1];
+  
+  /* Create the widget that will render the sequence data. */
+  GtkWidget *refSeqWidget = gtk_drawing_area_new();
+  gtk_widget_set_size_request(refSeqWidget, -1, roundNearest(dc->charHeight));
+  *refSeqList = g_slist_append(*refSeqList, refSeqWidget);
+  
+  sequenceCreateProperties(refSeqWidget, dc, dc->refSeqName, sequence, dc->refSeqType, strand, 
+                           frame, &properties->refDisplayRange, &dc->refSeqFullRange,
+                           dc->hozScaleRev, matchSeqList, TRUE);
+
+  gtk_table_attach(table, refSeqWidget, 2, 3, *row, *row + 1, GTK_FILL, GTK_SHRINK, xpad, ypad);
+  gtk_widget_add_events(refSeqWidget, GDK_EXPOSURE_MASK);
+
+  connectSequenceSignals(refSeqWidget, alignmentTool);
+  
+  *row += 1;
+}
+
+
+/* Create a drawing-area widget and add it to the given table in the
+ * given row. Increments the row number when done. the given expose
+ * function will draw the widget. */
+static void createDrawingAreaWidget(DotterContext *dc,
+                                    GCallback exposeFunc,
+                                    gpointer exposeFuncData,
+                                    const int height,
+                                    GtkTable *table,
+                                    const int xpad,
+                                    const int ypad,
+                                    int *row)
+{
+  g_return_if_fail(exposeFunc) ;
+
+  GtkWidget *widget = gtk_drawing_area_new();
+  gtk_widget_set_size_request(widget, -1, height);
+  gtk_table_attach(table, widget, 2, 3, *row, *row + 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), GTK_SHRINK, xpad, ypad);
+  g_signal_connect(G_OBJECT(widget), "expose-event", exposeFunc, exposeFuncData);
+
+  *row += 1;
+}
+
+
+
+/* Create the section of the alignment tool for the given strand */
+static GtkWidget* createAlignmentToolSection(BlxStrand strand,
+                                             GtkWidget *alignmentTool,
+                                             AlignmentToolProperties *properties)
+{
+  g_return_val_if_fail(properties && properties->dotterWinCtx && properties->dotterWinCtx->dotterCtx, NULL) ;
+
+  /* We'll pack everything into a table */
+  DotterContext *dc = properties->dotterWinCtx->dotterCtx;
+  const int numRows = dc->numFrames + 3;  /* 2 rows for the headers, 1 for the sseq and 1 for each ref seq frame */
+  const int numCols = 2;              /* 2 columns: label and sequence */
+  const int xpad = 2;
+  const int ypad = 0;
+  const char strandChar = (strand == BLXSTRAND_FORWARD ? '+' : '-');
+  
+  GtkTable *table = GTK_TABLE(gtk_table_new(numRows, numCols, FALSE));
+  int row = 0;
+
+  /* Create the widget that will render the match sequence. Need to do this first so we can pass
+   * it as data to the ref sequence widgets. */
+  GtkWidget *matchSeqWidget = gtk_drawing_area_new();
+  gtk_widget_set_size_request(matchSeqWidget, -1, roundNearest(dc->charHeight));
+  
+  /* We need to create a list of match seqs (just one entry) and ref seqs to pass as data to the
+   * ref seq and match seq respectively. */
+  GSList *matchSeqList = NULL;
+  matchSeqList = g_slist_append(matchSeqList, matchSeqWidget);
+  
+  GSList *refSeqList = NULL;
+  
+  /* Create a header line for this strand of the reference sequence. This widget will display
+   * the currently-selected ref seq coord. */
+  createDrawingAreaWidget(dc, G_CALLBACK(onExposeRefSequenceHeader), alignmentTool,
+                          roundNearest(dc->charHeight) + SELECTED_COORD_MARKER_HEIGHT,
+                          table, xpad, ypad, &row);
+    
+  /* Add a line for each frame of the reference sequence */
+  int frame = 1;
+  for (frame = 1; frame <= dc->numFrames; ++frame)
+    {
+      createRefSeqWidget(alignmentTool, properties, frame, strand, strandChar, matchSeqList, table, xpad, ypad, &row, &refSeqList);
+    }
+  
+  /* Add a label for the match sequence */
+  char *text = g_strdup_printf("%s:", dc->matchSeqName);
+  GtkWidget *label = createLabel(text, 0.0, 0.0, FALSE, TRUE, TRUE);
+  labelSetFont(label, dc->fontDesc);
+  g_free(text);
+  gtk_table_attach(table, label, 1, 2, row, row + 1, GTK_FILL, GTK_SHRINK, xpad, ypad);
+  
+  /* Now add the data to the match-sequence widget and add it to the bottom row of the table */
+  char *matchSequence = dc->matchSeqStrand == BLXSTRAND_REVERSE ? dc->matchSeqRev : dc->matchSeq;
+  
+  sequenceCreateProperties(matchSeqWidget, dc, dc->matchSeqName, matchSequence, dc->matchSeqType, dc->matchSeqStrand,
+                           1, &properties->matchDisplayRange, &dc->matchSeqFullRange, dc->vertScaleRev, refSeqList, FALSE);
+  
+  gtk_table_attach(table, matchSeqWidget, 2, 3, row, row + 1, GTK_FILL, GTK_SHRINK, xpad, ypad);
+  gtk_widget_add_events(matchSeqWidget, GDK_EXPOSURE_MASK);
+
+  connectSequenceSignals(matchSeqWidget, alignmentTool);
+    
+  ++row;
+  
+  /* Create the bottom label. This will display the currently-selected match seq coord.  */
+  createDrawingAreaWidget(dc, G_CALLBACK(onExposeMatchSequenceHeader), alignmentTool,
+                          roundNearest(dc->charHeight) + SELECTED_COORD_MARKER_HEIGHT + roundNearest(dc->charHeight), /* extra charheight for spacing */
+                          table, xpad, ypad, &row);
+ 
+  
+  /* Make sure neither header is focused at the start because if it is
+   * then its text will be selected and we will inadvertently overwrite the
+   * contents of the primary clipboard. */
+  gtk_container_set_focus_child(GTK_CONTAINER(table), matchSeqWidget);
+ 
+  return GTK_WIDGET(table);
+}
+
+
+/* Create a window to hold the alignment tool when it is un-docked */
+static GtkWidget *createAlignmentToolWindow(DotterWindowContext *dwc, GtkWidget *alignmentTool)
+{
+  g_return_val_if_fail(dwc && alignmentTool, NULL) ;
+
+  GtkWidget *alignmentWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+  gtk_window_set_default_size(GTK_WINDOW(alignmentWindow), 1160, -1);
+
+  char *title = g_strdup_printf("%sAlignment tool", dotterGetTitlePrefix(dwc->dotterCtx));
+  gtk_window_set_title(GTK_WINDOW(alignmentWindow), title);
+  g_free(title);
+
+  g_signal_connect(G_OBJECT(alignmentWindow), "delete-event", G_CALLBACK(onDeleteAlignmentTool), alignmentTool);
+
+  return alignmentWindow;
+}
+
+
+/* Return the alignment tool widget and set the return widget to be a window that it can be
+ * undocked into. */
+GtkWidget* createAlignmentTool(DotterWindowContext *dotterWinCtx, GtkWidget **alignmentWindow_out)
+{
+  g_return_val_if_fail(dotterWinCtx, NULL) ;
+
+  DEBUG_ENTER("createAlignmentTool");
+
+  /* We'll put everything in a vbox, inside a frame */  
+  GtkWidget *alignmentTool = gtk_frame_new(NULL);
+  gtk_frame_set_shadow_type(GTK_FRAME(alignmentTool), GTK_SHADOW_ETCHED_IN);
+  
+  GtkWidget *vbox = gtk_vbox_new(FALSE, 0);
+  gtk_container_add(GTK_CONTAINER(alignmentTool), vbox);
+
+  GtkWidget *alignmentWindow = createAlignmentToolWindow(dotterWinCtx, alignmentTool);
+    
+  /* Remember the headers so we can store them in the properties. We'll need to update them
+   * when the range updates since they contain the centre coord of the current display range. */
+  alignmentToolCreateProperties(alignmentTool, alignmentWindow, dotterWinCtx);
+  AlignmentToolProperties *properties = alignmentToolGetProperties(alignmentTool);
+
+  if (properties && properties->dotterWinCtx && properties->dotterWinCtx->dotterCtx)
+    {
+      DotterContext *dc = properties->dotterWinCtx->dotterCtx;
+
+      /* Put the forward ref seq strand on top, unless the display is reversed */
+      BlxStrand qStrand = dc->hozScaleRev ? BLXSTRAND_REVERSE : BLXSTRAND_FORWARD;
+      GtkWidget *section1 = createAlignmentToolSection(qStrand, alignmentTool, properties);
+      gtk_box_pack_start(GTK_BOX(vbox), section1, FALSE, FALSE, 0);
+
+      /* Only show the other reference sequence strand if we're displaying sequences as nucleotides */
+      if (dc->displaySeqType == BLXSEQ_DNA)
+        {
+          qStrand = (qStrand == BLXSTRAND_FORWARD ? BLXSTRAND_REVERSE : BLXSTRAND_FORWARD);
+          GtkWidget *section2 = createAlignmentToolSection(qStrand, alignmentTool, properties);
+          gtk_box_pack_start(GTK_BOX(vbox), section2, FALSE, FALSE, 0);
+        }
+  
+      gtk_widget_add_events(alignmentTool, GDK_BUTTON_PRESS_MASK);
+      gtk_widget_add_events(alignmentTool, GDK_KEY_PRESS_MASK);
+
+      g_signal_connect(G_OBJECT(alignmentTool), "size-allocate", G_CALLBACK(onSizeAllocateAlignmentTool), NULL);
+      gtk_widget_show_all(alignmentTool);
+  
+      onAlignmentToolRangeChanged(alignmentTool);
+
+      if (alignmentWindow_out)
+        *alignmentWindow_out = alignmentWindow;
+    }
+
+  DEBUG_EXIT("createAlignmentTool returning ");
+  return alignmentTool;
+}
+
+
+/***********************************************************
+ *                           Drawing                       *
+ ***********************************************************/
+
+/* Highlight splice site dinucleotides for known HSPs */
+static void drawSequenceSpliceSites(GdkDrawable *drawable,
+                                    GtkWidget *widget, 
+                                    GtkWidget *alignmentTool, 
+                                    SequenceProperties *seq1,
+                                    GdkGC *gc)
+{
+  AlignmentToolProperties *atProperties = alignmentToolGetProperties(alignmentTool);
+
+  if (!atProperties || !drawable || !gc || !seq1 || !atProperties->spliceSitesOn)
+    return;
+
+  DotterWindowContext *dwc = atProperties->dotterWinCtx;
+  DotterContext *dc = atProperties->dotterWinCtx->dotterCtx;
+
+  /* Only do highlighting if both seqs are DNA */
+  if (dc->matchSeqType != BLXSEQ_DNA || dc->refSeqType != BLXSEQ_DNA)
+    return;
+
+  /* Only do the highlighting in the reference sequence */
+  if (!seq1 || !seq1->seqName || !dc->refSeqName || strcmp(seq1->seqName, dc->refSeqName) != 0)
+    return;
+
+  /* Loop through each MSP looking for one that has the relevant sequence name, and has start/end
+   * within the current visible range */
+  MSP *msp = dc->mspList;
+  
+  for ( ; msp; msp = msp->next)
+    {
+      const char *mspName = msp->sname;
+
+      if (!mspName || 
+          msp->type != BLXMSP_MATCH || 
+          msp->qStrand != seq1->strand || 
+          strcmp(mspName, dc->matchSeqName))
+        {
+          /* Not an MSP from our match sequence */
+          continue;
+        }
+
+      /* If the splice site adjacent to the start coord is within range then highlight it */
+      if (valueWithinRange(msp->qRange.min() - 1, seq1->displayRange) || 
+          valueWithinRange(msp->qRange.min() - 2, seq1->displayRange))
+        {
+          /* Get the leftmost coord (for rev strand this is the max of the two coords) */
+          int coord = seq1->strand == BLXSTRAND_REVERSE ? msp->qRange.min() - 1 : msp->qRange.min() - 2;
+          gboolean isStart = (seq1->strand == BLXSTRAND_FORWARD);
+          highlightSpliceSite(seq1, atProperties, dwc, coord, isStart, gc, drawable);
+        }
+
+      /* If the splice site adjacent to the end coord is within range then highlight it */
+      if (valueWithinRange(msp->qRange.max() + 1, seq1->displayRange) || 
+          valueWithinRange(msp->qRange.max() + 2, seq1->displayRange))
+        {
+          /* Get the leftmost coord (for rev strand this is the max of the two coords) */
+          int coord = seq1->strand == BLXSTRAND_REVERSE ? msp->qRange.max() + 2 : msp->qRange.max() + 1;
+          gboolean isEnd = (seq1->strand == BLXSTRAND_FORWARD);
+          highlightSpliceSite(seq1, atProperties, dwc, coord, !isEnd, gc, drawable);
+        }
+    }
+}
+
+
+/* Set the alignment length based on the given widget's width. Note that this is called multiple
+ * times redundantly (once for each sequence widget and once for each header widget). Ideally
+ * we'd call this once after any change in window size, but we need to know the width allocation
+ * for the sequence/header widgets to do that. At the moment it's not worth doing the code
+ * reorganisation to do that so this just gets called on each widget before it gets drawn. */
+static void setAlignmentLength(GtkWidget *widget, GtkWidget *alignmentTool, AlignmentToolProperties *properties)
+{
+  g_return_if_fail(widget && properties && properties->dotterWinCtx && properties->dotterWinCtx->dotterCtx);
+
+  /* Get the length of the sequence we can display i.e. number of chars wide the widget is */
+  properties->alignmentLen = widget->allocation.width / properties->dotterWinCtx->dotterCtx->charWidth;
+
+  if (properties->alignmentLen < MIN_ALIGNMENT_LENGTH)
+    properties->alignmentLen = MIN_ALIGNMENT_LENGTH;
+
+  /* The display code assumes we always have an odd length; if we
+   * are given an even length, round it down */
+  if (properties->alignmentLen % 2 == 0)
+    --properties->alignmentLen;
+
+  updateAlignmentRange(alignmentTool, properties->dotterWinCtx);
+}
+
+
+/* Draw the sequence data for the given sequence-widget. Draws the text and highlights each base
+ * according to how well it matches */
+static void drawSequence(GdkDrawable *drawable, GtkWidget *widget, GtkWidget *alignmentTool)
+{
+  AlignmentToolProperties *atProperties = alignmentToolGetProperties(alignmentTool);
+  SequenceProperties *seq1 = sequenceGetProperties(widget);
+
+  g_return_if_fail(atProperties && atProperties->dotterWinCtx && atProperties->dotterWinCtx->dotterCtx && seq1) ;
+
+  DotterWindowContext *dwc = atProperties->dotterWinCtx;
+  DotterContext *dc = atProperties->dotterWinCtx->dotterCtx;
+
+  /* Set the alignment length from the widget width */
+  setAlignmentLength(widget, alignmentTool, atProperties);
+
+  GdkGC *gc = gdk_gc_new(drawable);
+
+  const int seq1Len = strlen(seq1->sequence);
+  
+  /* If text on this widget is selected, then we'll highlight any bases within
+   * the selection range. */
+  const gboolean highlight = (atProperties->selectionWidget == widget);
+
+  /* Get the sequence coord at the start of the display (leftmost edge) */
+  int seq1Start = getDisplayStart(seq1, dc);
+  const int seq1Offset = getSequenceOffset(seq1, dc);
+  
+  /* Loop through each display coord (0-based from left edge of display) */
+  int displayIdx = 0;
+  char seq1Text[atProperties->alignmentLen + 1];
+
+  for ( ; displayIdx <= atProperties->alignmentLen; ++displayIdx)
+    {
+      seq1Text[displayIdx] = ' ';
+    
+      /* Get the 0-based index into sequence 1 and extract the character at this index */
+      const int seq1Idx = displayIdx - seq1Offset;
+      
+      if (seq1Idx >= 0 && seq1Idx < seq1Len)
+        {
+          seq1Text[displayIdx] = seq1->sequence[seq1Idx];
+          highlightSequenceBase(seq1, atProperties, dwc, displayIdx, seq1Idx, seq1Start, highlight, gc, drawable);
+        }
+    }
+  
+  /* terminate the display text string */
+  seq1Text[displayIdx] = '\0';
+  
+  /* Highlight splice sites */
+  drawSequenceSpliceSites(drawable, widget, alignmentTool, seq1, gc);
+
+  /* Draw the sequence text over the top of any highlighting */
+  PangoLayout *layout = gtk_widget_create_pango_layout(widget, seq1Text);
+  pango_layout_set_font_description(layout, dc->fontDesc);
+  
+  if (layout)
+    {
+      gtk_paint_layout(widget->style, drawable, GTK_STATE_NORMAL, TRUE, NULL, widget, NULL, 0, 0, layout);
+      g_object_unref(layout);
+    }
+  
+  g_object_unref(gc);
+}
+
+
+/* Utility called by drawSequenceHeader to draw a marker line at the given coords */
+static void drawSequenceHeaderMarker(GdkDrawable *drawable, const int x, const int y, const gdouble charWidth)
+{
+  g_return_if_fail(drawable) ;
+
+  /* Draw a marker line below where the text will go */
+  const int x1 = x + roundNearest((charWidth / 2.0));
+  
+  GdkGC *gc = gdk_gc_new(drawable);
+  gdk_draw_line(drawable, gc, x1, y, x1, y +  + SELECTED_COORD_MARKER_HEIGHT);
+  g_object_unref(gc);
+}
+
+
+/* Utility called by drawSequenceHeader to draw the header text at the given coords */
+static void drawSequenceHeaderText(GtkWidget *widget, 
+                                   GdkDrawable *drawable, 
+                                   const int x, 
+                                   const int y, 
+                                   const int coordIn, 
+                                   DotterContext *dc,
+                                   const gboolean horizontal)
+{
+  g_return_if_fail(widget && drawable && dc) ;
+
+  int coord = getDisplayCoord(coordIn, dc, horizontal);
+  char *displayText = convertIntToString(coord);
+  
+  PangoLayout *layout = gtk_widget_create_pango_layout(widget, displayText);
+  pango_layout_set_font_description(layout, dc->fontDesc);
+  
+  if (layout)
+    {
+      /* Offset the text so that the middle of the text is lined up with the coord of interest */
+      const int offset = ceil((((gdouble)numDigitsInInt(coord) / 2.0) - 1) * dc->charWidth);
+    
+      gtk_paint_layout(widget->style, drawable, GTK_STATE_NORMAL, TRUE, NULL, widget, NULL, x - offset, y, layout);
+      g_object_unref(layout);
+    }
+  
+  g_free(displayText);
+  
+}
+
+
+/* Draw a sequence header that displays the centre coord of the given display range. If
+ * markerFirst is true the marker is drawn above the text, otherwise below. */
+static void drawSequenceHeader(GtkWidget *widget, 
+                               GtkWidget *alignmentTool,
+                               GdkDrawable *drawable, 
+                               const gboolean horizontal)
+{
+  AlignmentToolProperties *properties = alignmentToolGetProperties(alignmentTool);
+  DotterWindowContext *dwc = properties->dotterWinCtx;
+
+  g_return_if_fail(widget && properties && dwc && dwc->dotterCtx) ;
+  
+  DotterContext *dc = dwc->dotterCtx;
+
+  /* Make sure the alignment length is up to date */
+  setAlignmentLength(widget, alignmentTool, properties);
+
+  /* Find the coord to display */
+  const int coord = horizontal ? dwc->refCoord : dwc->matchCoord;
+
+  const IntRange* const displayRange = horizontal ? &properties->refDisplayRange : &properties->matchDisplayRange;
+  
+  /* Find the position to display at. Find the position of the char at this coord */
+  const int displayIdx = convertToDisplayIdx(coord - displayRange->min(), horizontal, dc, 1, NULL) - 1;
+  int x = (int)((gdouble)displayIdx * dc->charWidth);
+  int y = 0;
+
+  if (horizontal)
+    {
+      /* For the ref sequence, draw the marker below the label. */
+      drawSequenceHeaderText(widget, drawable, x, y, coord, dc, horizontal);
+      y += roundNearest(dc->charHeight);
+      drawSequenceHeaderMarker(drawable, x, y, dc->charWidth);
+    }
+  else
+    {
+      /* For the match sequence, draw the marker above the label */
+      drawSequenceHeaderMarker(drawable, x, y, dc->charWidth);
+      y += SELECTED_COORD_MARKER_HEIGHT;
+      drawSequenceHeaderText(widget, drawable, x, y, coord, dc, horizontal);
+    }
+}
+
+
+
+/***********************************************************
+ *                      Utility functions                  *
+ ***********************************************************/
+
+static gboolean onDeleteAlignmentTool(GtkWidget *widget, GdkEvent *event, gpointer data)
+{
+  GtkWidget *alignmentTool = GTK_WIDGET(data);
+  AlignmentToolProperties *properties = alignmentToolGetProperties(alignmentTool);
+
+  if (properties && properties->dotterWinCtx)
+    dotterSetToggleMenuStatus(properties->dotterWinCtx, "ToggleAlignment", FALSE);
+
+  return TRUE;
+}
+
+/* Return the coord that the alignment tool display starts at (adjusted for strand direction
+ * and converted from dna to peptide coords if applicable). */
+static int getDisplayStart(SequenceProperties *properties, DotterContext *dc)
+{
+  g_return_val_if_fail(properties && dc, 0) ;
+
+  const gboolean forward = (properties->strand == BLXSTRAND_FORWARD);
+  int displayStart = forward ? properties->displayRange->min() : properties->displayRange->max();
+
+  displayStart = convertToDisplayIdx(displayStart, properties->horizontal, dc, properties->frame, NULL);
+
+  return displayStart;
+}
+
+
+/* Return the coord that the alignment tool display ends at (adjusted for strand direction
+ * and converted from dna to peptide coords if applicable). */
+static int getDisplayEnd(SequenceProperties *properties, DotterContext *dc)
+{
+  g_return_val_if_fail(properties && dc, 0) ;
+
+  const gboolean forward = (properties->strand == BLXSTRAND_FORWARD);
+  int displayEnd = forward ? properties->displayRange->max() : properties->displayRange->min();
+
+  displayEnd = convertToDisplayIdx(displayEnd, properties->horizontal, dc, properties->frame, NULL);
+
+  return displayEnd;
+}
+
+
+/* Get the start coord of the bit of sequence displayed by a given 
+ * sequence widget. Adjusts the start so that we have the correct
+ * coord for the relevant frame/strand. Converts to display coords
+ * if requested, otherwise returns the nucleotide coord. */
+static int getSequenceStart(SequenceProperties *properties, DotterContext *dc, const gboolean convertToDisplayCoords)
+{
+  g_return_val_if_fail(properties && dc, 0) ;
+
+  const gboolean forward = (properties->strand == BLXSTRAND_FORWARD);
+
+  /* Get the start coord of the sequence data */
+  int seqStart = forward ? properties->fullRange->min() : properties->fullRange->max();
+  
+  /* Offset this coord so that we have the first coord that starts our reading frame */
+  int reqdFrame = properties->frame;
+  int frame = UNSET_INT;
+  convertToDisplayIdx(seqStart, properties->horizontal, dc, 1, &frame);
+  
+  int offset = reqdFrame - frame;
+  if (offset < 0)
+    {
+      offset += dc->numFrames;
+    }
+
+  seqStart = forward ? seqStart + offset : seqStart - offset;
+
+  if (convertToDisplayCoords)
+    seqStart = convertToDisplayIdx(seqStart, properties->horizontal, dc, reqdFrame, NULL);
+
+  return seqStart;
+}
+
+
+/* Get the end coord of the bit of sequence displayed by a given 
+ * sequence widget. Adjusts the end so that we have the correct
+ * coord for the relevant frame/strand. Converts to display coords
+ * if requested, otherwise returns the nucleotide coord. */
+static int getSequenceEnd(SequenceProperties *properties, DotterContext *dc, const gboolean convertToDisplayCoords)
+{
+  g_return_val_if_fail(properties && dc, 0) ;
+
+  const gboolean forward = (properties->strand == BLXSTRAND_FORWARD);
+
+  /* Get the end coord of the sequence data */
+  int seqEnd = forward ? properties->fullRange->max() : properties->fullRange->min();
+  
+  /* Offset this coord so that we have the last coord that ends our reading frame */
+  int reqdFrame = properties->frame;
+  int frame = UNSET_INT;
+  convertToDisplayIdx(seqEnd, properties->horizontal, dc, dc->numFrames, &frame);
+  
+  int offset = reqdFrame - frame;
+  seqEnd = forward ? seqEnd + offset : seqEnd - offset;
+
+  if (convertToDisplayCoords)
+    seqEnd = convertToDisplayIdx(seqEnd, properties->horizontal, dc, reqdFrame, NULL);
+
+  return seqEnd;
+}
+
+
+/* Calculate how many bases into the alignment tool's display range the 
+ * given sequence starts. */
+static int getSequenceOffset(SequenceProperties *properties, DotterContext *dc)
+{
+  int result = 0;
+  
+  g_return_val_if_fail(properties && dc, result) ;
+
+  const int seqStart = getSequenceStart(properties, dc, TRUE);
+  
+  /* Calculate the offset. Note that this may be positive or negative because it
+   * can be in either direction. */
+  const int displayStart = getDisplayStart(properties, dc);
+
+  if (properties->strand == BLXSTRAND_REVERSE)
+    result = displayStart - seqStart;
+  else
+    result = seqStart - displayStart - 1;
+
+  return result;
+}
+
+
+/* Get the sequence coordinate at the given x position within the given sequence widget */
+static int getCoordAtPos(const int x, GtkWidget *sequenceWidget, GtkWidget *alignmentTool)
+{
+  AlignmentToolProperties *atProperties = alignmentToolGetProperties(alignmentTool);
+  SequenceProperties *properties = sequenceGetProperties(sequenceWidget);
+
+  g_return_val_if_fail(atProperties && properties && atProperties->dotterWinCtx && atProperties->dotterWinCtx->dotterCtx, 0) ;
+
+  DotterContext *dc = atProperties->dotterWinCtx->dotterCtx;
+
+  /* Get the 0-based character index from the leftmost edge of the widget */
+  const int displayIdx = (int)((double)x / (double)dc->charWidth);
+
+  /* Get the coord of the first (leftmost) character in the display */
+  int displayStart = getDisplayStart(properties, dc);
+
+  /* Apply the offset to get the 0-based coord into the sequence, and add the range
+   * min to get the real coord */
+  int coord = 0;
+  if (properties->strand == BLXSTRAND_REVERSE)
+    coord = displayStart - displayIdx;
+  else
+    coord = displayStart + displayIdx + 1;
+
+  /* Bounds-limit the result */
+  boundsLimitValue(&coord, &properties->fullRangeDisplayCoords);
+  
+  return coord;
+}
+
+
+/* Connect signals for a sequence widget */
+static void connectSequenceSignals(GtkWidget *widget, GtkWidget *alignmentTool)
+{
+  g_return_if_fail(widget && alignmentTool) ;
+
+  gtk_widget_add_events(widget, GDK_EXPOSURE_MASK);
+  gtk_widget_add_events(widget, GDK_BUTTON_PRESS_MASK);
+  gtk_widget_add_events(widget, GDK_BUTTON_RELEASE_MASK);
+  gtk_widget_add_events(widget, GDK_BUTTON_MOTION_MASK);
+  
+  g_signal_connect(G_OBJECT(widget), "expose-event", G_CALLBACK(onExposeSequence), alignmentTool);
+  g_signal_connect(G_OBJECT(widget), "button-press-event", G_CALLBACK(onButtonPressSequence), alignmentTool);
+  g_signal_connect(G_OBJECT(widget), "button-release-event", G_CALLBACK(onButtonReleaseSequence), alignmentTool);
+  g_signal_connect(G_OBJECT(widget), "motion-notify-event", G_CALLBACK(onMouseMoveSequence), alignmentTool);
+}
+
+
+/* Get the bit of sequence from the given sequence widget between
+ * the given coords. Returns a new string which should be freed by
+ * the caller using g_free. */
+static char *getSequenceBetweenCoords(GtkWidget *sequenceWidget,
+                                      const int startCoord,
+                                      const int endCoord,
+                                      DotterWindowContext *dwc)
+{
+  char *result = NULL;
+  SequenceProperties *properties = sequenceGetProperties(sequenceWidget);
+
+  g_return_val_if_fail(properties && dwc && dwc->dotterCtx, result) ;
+
+  DotterContext *dc = dwc->dotterCtx;
+
+  /* Get the 0-based index into the bit of sequence for this frame/strand */
+  int startIdx = 0;
+  const int seqStart = getSequenceStart(properties, dc, TRUE);
+  
+  if (properties->strand == BLXSTRAND_REVERSE)
+    startIdx = seqStart - endCoord;
+  else
+    startIdx = startCoord - seqStart;
+  
+  /* Get the length of sequence we want to show */
+  int numChars = endCoord - startCoord + 1;
+  
+  /* Sanity check that we're not going to try to index out of range */
+  if (startIdx + numChars > (int)strlen(properties->sequence))
+    {
+      /* We shouldn't get here, but if we do then just limiting
+       * it to the string length should give something sensible */
+      numChars = strlen(properties->sequence) - startIdx;
+    }
+  
+  result = g_strndup(properties->sequence + startIdx, numChars + 1);
+  result[numChars] = '\0';
+
+  return result;
+}
+
+
+/* Set the widget that contains the current sequence selection. */
+static void setSelectionWidget(AlignmentToolProperties *atProperties, GtkWidget *selectionWidget)
+{
+  g_return_if_fail(atProperties) ;
+  
+  atProperties->selectionWidget = selectionWidget;
+  dotterEnableSelectionMenus(atProperties->dotterWinCtx, selectionWidget != NULL);
+}
+
+
+/* This clears the current selection */
+void alignmentToolClearSequenceSelection(GtkWidget *alignmentTool)
+{
+  AlignmentToolProperties *atProperties = alignmentToolGetProperties(alignmentTool);
+
+  g_return_if_fail(atProperties) ;
+
+  if (atProperties->selectionWidget)
+    {
+      /* clear current selection widget and redraw it */
+      GtkWidget *widget = atProperties->selectionWidget;
+      setSelectionWidget(atProperties, NULL);
+      widgetClearCachedDrawable(widget, NULL);
+      gtk_widget_queue_draw(widget);
+    }
+}
+
+void alignmentToolCopySeln(GtkWidget* alignmentTool)
+{
+  AlignmentToolProperties *atProperties = alignmentToolGetProperties(alignmentTool);
+
+  g_return_if_fail(atProperties) ;
+  
+  if (atProperties->selectionWidget)
+    {
+      /* copy the selection to the clipboard */
+      char *text = getSequenceBetweenCoords(atProperties->selectionWidget,
+                                            atProperties->selectionRange.min(),
+                                            atProperties->selectionRange.max(),
+                                            atProperties->dotterWinCtx);
+
+      setDefaultClipboardText(text);
+      setPrimaryClipboardText(text);
+      
+      g_free(text);
+    }
+}
+
+void alignmentToolCopySelnCoords(GtkWidget *alignmentTool)
+{
+  AlignmentToolProperties *atProperties = alignmentToolGetProperties(alignmentTool);
+
+  g_return_if_fail(atProperties && atProperties->dotterWinCtx) ;
+
+  if (atProperties->selectionWidget)
+    {
+      SequenceProperties *properties = sequenceGetProperties(atProperties->selectionWidget);
+      
+      if (properties)
+        {
+          DotterContext *dc = atProperties->dotterWinCtx->dotterCtx;
+
+          /* Convert the selected coords to dna coords */
+          int start = convertToDnaIdx(atProperties->selectionRange.min(), properties->horizontal, dc, properties->frame, 1);
+          int end = convertToDnaIdx(atProperties->selectionRange.max(), properties->horizontal, dc, properties->frame, dc->numFrames);
+
+          /* Negate the coords for display, if necessary */
+          start = getDisplayCoord(start, dc, properties->horizontal);
+          end = getDisplayCoord(end, dc, properties->horizontal);
+
+          /* Swap start and end if strand is reversed */
+          if (properties->strand == BLXSTRAND_REVERSE)
+            {
+              int tmp = start;
+              start = end;
+              end = tmp;
+            }    
+
+          char *text = g_strdup_printf("%d, %d", start, end);
+          
+          setDefaultClipboardText(text);
+          setPrimaryClipboardText(text);
+      
+          g_free(text);
+        }
+    }
+}
+
+/* Initiate dragging on a sequence widget */
+static void sequenceInitiateDragging(GtkWidget *sequenceWidget, GtkWidget *alignmentTool, const int x)
+{
+  AlignmentToolProperties *atProperties = alignmentToolGetProperties(alignmentTool);
+
+  g_return_if_fail(atProperties) ;  
+
+  /* flag that we're dragging */
+  atProperties->dragging = TRUE;
+  atProperties->dragStart = getCoordAtPos(x, sequenceWidget, alignmentTool);
+
+  /* flag that we should highlight the selected sequence (clear any current selection first) */
+  alignmentToolClearSequenceSelection(alignmentTool);
+  
+  atProperties->selectionRange.set(atProperties->dragStart, atProperties->dragStart);
+
+  setSelectionWidget(atProperties, sequenceWidget);
+}
+
+
+/* Finish dragging on a sequence widget */
+static void sequenceFinishDragging(GtkWidget *sequenceWidget, GtkWidget *alignmentTool, const int x)
+{
+  AlignmentToolProperties *atProperties = alignmentToolGetProperties(alignmentTool);
+  DotterWindowContext *dwc = atProperties->dotterWinCtx;
+
+  g_return_if_fail(atProperties && dwc) ;
+
+  if (atProperties->dragging)
+    {
+      /* cancel the dragging and highlighting flags */
+      atProperties->dragging = FALSE;
+  
+      /* get the range of coords that the user dragged over */
+      int minCoord = atProperties->dragStart;
+      int maxCoord = getCoordAtPos(x, sequenceWidget, alignmentTool);
+
+      if (minCoord > maxCoord)
+        {
+          int tmp = minCoord;
+          minCoord = maxCoord;
+          maxCoord = tmp;
+        }
+      
+      /* Get the sequence between these coords and place it on the clipboard */
+      char *result = getSequenceBetweenCoords(sequenceWidget, minCoord, maxCoord, dwc);
+      setPrimaryClipboardText(result);
+      
+      g_free(result);
+    }
+}
+
+
+/* Select all of the visible text in a sequence widget */
+static void selectVisibleSequence(GtkWidget *sequenceWidget, GtkWidget *alignmentTool)
+{
+  SequenceProperties *properties = sequenceGetProperties(sequenceWidget);
+  AlignmentToolProperties *atProperties = alignmentToolGetProperties(alignmentTool);
+
+  g_return_if_fail(properties && atProperties && atProperties->dotterWinCtx && atProperties->dotterWinCtx->dotterCtx) ;
+
+  DotterContext *dc = atProperties->dotterWinCtx->dotterCtx;
+  
+  /* cancel any dragging operation */
+  atProperties->dragging = FALSE;
+
+  /* flag that we should highlight the selected sequence (clear any current
+   * selection first) and set the coords of the highlighted bit */
+  alignmentToolClearSequenceSelection(alignmentTool);
+
+  int start = getDisplayStart(properties, dc);
+  int end = getDisplayEnd(properties, dc);
+
+  if (properties->strand == BLXSTRAND_FORWARD)
+    {
+      ++start;
+      ++end;
+    }
+  
+  boundsLimitValue(&start, &properties->fullRangeDisplayCoords);
+  boundsLimitValue(&end, &properties->fullRangeDisplayCoords);
+  
+  atProperties->selectionRange.set(start, end);
+  setSelectionWidget(atProperties, sequenceWidget);
+
+  /* copy the selection to the primary clipboard */
+  char *result = getSequenceBetweenCoords(sequenceWidget,
+                                          atProperties->selectionRange.min(),
+                                          atProperties->selectionRange.max(),
+                                          atProperties->dotterWinCtx);
+  
+  setPrimaryClipboardText(result);
+  g_free(result);
+}
+
+
+/* Get the colour that the given base in the given sequence should
+ * be highlighted according to how well it matches the other sequences
+ * at the same display index. */
+static DotterColorId getBaseHighlightColor(SequenceProperties *seq1,
+                                           DotterContext *dc,
+                                           const int displayIdx,
+                                           const int seq1Idx,
+                                           const int seq1DisplayStart)
+{
+  g_return_val_if_fail(seq1 && dc, DOTCOLOR_BACKGROUND) ;
+
+  /* Compare the base in the current sequence to the base at the
+   * same display position in all other sequences and find whether
+   * any match. Exact matches take precedence over conserved matches.
+   * If none match, just use the background colour (i.e. no highlighting). */
+  DotterColorId colorId = DOTCOLOR_BACKGROUND;
+ 
+  GSList *item = seq1->compSeqs;
+ 
+  for ( ; item; item = item->next)
+    {
+      /* Get info about the other sequence */
+      GtkWidget *seq2Widget = GTK_WIDGET(item->data);
+      SequenceProperties *seq2 = sequenceGetProperties(seq2Widget);
+
+      if (seq2)
+        {
+          const int seq2Len = strlen(seq2->sequence);
+
+          /* Get the sequence coord at the start of the display (leftmost edge) */
+          const int seq2Offset = getSequenceOffset(seq2, dc);
+    
+          /* Get the zero-based index into the sequence and compare the bases to determine the highlight color */
+          const int seq2Idx = displayIdx - seq2Offset;
+      
+          if (seq2Idx >= 0 && seq2Idx < seq2Len)
+            {
+              if (seq1->sequence[seq1Idx] == seq2->sequence[seq2Idx])
+                {
+                  colorId = DOTCOLOR_MATCH;
+                  break;
+                }
+              else if (dc->blastMode != BLXMODE_BLASTN && 
+                       dc->matrix[atob[(unsigned int)seq1->sequence[seq1Idx]] - 1 ][atob[(unsigned int)seq2->sequence[seq2Idx]] - 1 ] > 0)
+                {
+                  colorId = DOTCOLOR_CONS;
+                }
+            }
+        }
+    }
+
+  return colorId;
+}
+
+
+static void highlightSpliceSite(SequenceProperties *seq1,
+                                AlignmentToolProperties *atProperties,
+                                DotterWindowContext *dwc,
+                                const int coord,
+                                const gboolean isStart,
+                                GdkGC *gc,
+                                GdkDrawable *drawable)
+{
+  g_return_if_fail(seq1 && atProperties && dwc && dwc->dotterCtx && gc && drawable) ;
+  
+  DotterContext *dc = dwc->dotterCtx;
+
+  /* check if it's canonical (green if yes, red if not) */
+  DotterColorId colorId = DOTCOLOR_NON_CANONICAL;
+
+  int seqIdx = (seq1->strand == BLXSTRAND_REVERSE ? seq1->fullRange->max() - coord : coord - seq1->fullRange->min());
+
+  if (isStart && strncasecmp(&seq1->sequence[seqIdx], "ag", 2) == 0)
+    colorId = DOTCOLOR_CANONICAL;
+  else if (!isStart && strncasecmp(&seq1->sequence[seqIdx], "gt", 2) == 0)
+    colorId = DOTCOLOR_CANONICAL;
+ 
+  GdkColor *color = getGdkColor(colorId, dc->defaultColors, FALSE, dwc->usePrintColors);
+  gdk_gc_set_foreground(gc, color);
+
+  int displayIdx = (seq1->strand == BLXSTRAND_REVERSE ? seq1->displayRange->max() - coord : coord - seq1->displayRange->min() - 1);
+  const int x = (int)((gdouble)displayIdx * dc->charWidth);
+  gdk_draw_rectangle(drawable, gc, TRUE, x, 0, ceil(dc->charWidth * 2), roundNearest(dc->charHeight));
+}
+
+
+static void highlightSequenceBase(SequenceProperties *seq1,
+                                  AlignmentToolProperties *atProperties,
+                                  DotterWindowContext *dwc,
+                                  const int displayIdx,
+                                  const int seq1Idx,
+                                  const int seq1Start,
+                                  const gboolean highlight,
+                                  GdkGC *gc,
+                                  GdkDrawable *drawable)
+{
+  g_return_if_fail(seq1 && dwc && dwc->dotterCtx && atProperties && gc && drawable) ;
+
+  DotterContext *dc = dwc->dotterCtx;
+  DotterColorId colorId = getBaseHighlightColor(seq1, dc, displayIdx, seq1Idx, seq1Start);
+
+  /* Get the real display coordinate */
+  int seq1Coord = (seq1->strand == BLXSTRAND_REVERSE ? seq1Start - displayIdx : seq1Start + displayIdx + 1);
+
+  const gboolean selected = highlight && valueWithinRange(seq1Coord, &atProperties->selectionRange);
+  
+  /* We don't need to bother drawing the background if it's the standard
+   * (non-selected) background color */
+  if (colorId != DOTCOLOR_BACKGROUND || selected)
+    {
+      GdkColor *color = getGdkColor(colorId, dc->defaultColors, selected, dwc->usePrintColors);
+      gdk_gc_set_foreground(gc, color);
+
+      const int x = (int)((gdouble)displayIdx * dc->charWidth);
+      gdk_draw_rectangle(drawable, gc, TRUE, x, 0, ceil(dc->charWidth), roundNearest(dc->charHeight));
+    }
+}
+
diff --git a/dotterApp/dotplot.cpp b/dotterApp/dotplot.cpp
new file mode 100644
index 0000000..f2973e9
--- /dev/null
+++ b/dotterApp/dotplot.cpp
@@ -0,0 +1,3255 @@
+/*  File: dotplot.c
+ *  Author: Gemma Barson, 2010-09-08
+ *  Copyright (c) 2010 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: The dotplot widget is the main part of the Dotter window. It
+ *              calculates and draws the dot-matrix plot.
+ *----------------------------------------------------------------------------
+ */
+
+#include <dotterApp/dotter_.hpp>
+#include <dotterApp/seqtoolsExonView.hpp>
+#include <gtk/gtk.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <stdio.h>
+#include <algorithm>
+
+using namespace std;
+
+
+#define PIXELS_PER_MARK_X                           100   /* number of pixels between each major tick mark on the x scale */
+#define PIXELS_PER_MARK_Y                           50    /* number of pixels between each major tick mark on the y scale */
+#define CROSSHAIR_TEXT_PADDING                      5     /* padding between the crosshair and the coord display text */ 
+#define ANNOTATION_LABEL_PADDING		    5	  /* padding around annotation labels, if shown */
+
+/* max width / height to allow for a gdk image. Guesstimate based on the fact that 
+ * it blacks out the lower part of the plot (overdraws on it?) if we allow more than this.
+ * gb10: this was 16000 but reducing it because some users are seeing crashing with long, skinny plots. */
+#define MAX_IMAGE_DIMENSION                         12000 
+
+
+int atob_0[]	/* NEW (starting at 0) ASCII-to-binary translation table */
+= {
+NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,
+NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,
+NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,23,NR,NR,NR,NR,NR,
+NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,
+NR, 0,20, 4, 3, 6,13, 7, 8, 9,NR,11,10,12, 2,NR,
+14, 5, 1,15,16,NR,19,17,22,18,21,NR,NR,NR,NR,NR,
+NR, 0,20, 4, 3, 6,13, 7, 8, 9,NR,11,10,12, 2,NR,
+14, 5, 1,15,16,NR,19,17,22,18,21,NR,NR,NR,NR,NR,
+
+NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,
+NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,
+NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,
+NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,
+NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,
+NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,
+NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,
+NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR,NR 
+};
+
+//static int atob[]	/* OLD (starting at 1) ASCII-to-binary translation table  (Inherited from blast) */
+//= {
+//NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+//NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+//NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,24,NA,NA,NA,NA,NA,
+//NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+//NA, 1,21, 5, 4, 7,14, 8, 9,10,NA,12,11,13, 3,NA, /* A, B, C, D, ..., P */
+//15, 6, 2,16,17,NA,20,18,23,19,22,NA,NA,NA,NA,NA, /* Q, R, S, T, ... */
+//NA, 1,21, 5, 4, 7,14, 8, 9,10,NA,12,11,13, 3,NA, /* a, b, c, d, ..., p */
+//15, 6, 2,16,17,NA,20,18,23,19,22,NA,NA,NA,NA,NA, /* q, r, s, t, ... */
+//
+//NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+//NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+//NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+//NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+//NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+//NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+//NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+//NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA 
+//};
+
+char aa_btoa[]	/* binary-to-ASCII translation table */
+= "-ARNDCQEGHILKMFPSTWYVBZX*" ;
+
+
+#define NN 5
+
+int ntob[] = {
+NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+NN, 0,NN, 1,NN,NN,NN, 2,NN,NN,NN,NN,NN,NN, 4,NN,
+NN,NN,NN,NN, 3,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+NN, 0,NN, 1,NN,NN,NN, 2,NN,NN,NN,NN,NN,NN, 4,NN,
+NN,NN,NN,NN, 3,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+
+NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN
+};
+
+int ntob_compl[] = {
+NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+NN, 3,NN, 2,NN,NN,NN, 1,NN,NN,NN,NN,NN,NN, 4,NN,
+NN,NN,NN,NN, 0,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+NN, 3,NN, 2,NN,NN,NN, 1,NN,NN,NN,NN,NN,NN, 4,NN,
+NN,NN,NN,NN, 0,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+
+NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,
+NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN,NN
+};
+
+double aafq[20]	/* Amino acid residue frequencies used by S. Altschul */
+= {.081, .057, .045, .054, .015, .039, .061, .068, .022, .057,
+.093, .056, .025, .040, .049, .068, .058, .013, .032, .067 } ;
+
+
+
+/* Local function declarations */
+static void                       drawDotterScale(GtkWidget *dotplot, GdkDrawable *drawable);
+static void                       drawImage(GtkWidget *dotplot, GdkDrawable *drawable);
+static void                       drawHsps(GtkWidget *dotplot, GdkDrawable *drawable);
+static void			  drawBreaklines(GtkWidget *dotplot, GdkDrawable *drawable);
+static void                       drawRubberBand(GtkWidget *dotplot, GdkDrawable *drawable);
+static void                       calculateDotplotBorders(GtkWidget *dotplot, DotplotProperties *properties);
+static GdkColormap*               insertGreyRamp (DotplotProperties *properties);
+static void                       transformGreyRampImage(GdkImage *image, unsigned char *pixmap, DotplotProperties *properties);
+static void                       initPixmap(unsigned char **pixmap, const int width, const int height);
+static const char*                getShortMspName(const MSP* const msp);
+static void                       calculateImageHsps(int strength, int sx, int sy, int ex, int ey, DotplotProperties *properties);
+static void                       getMspScreenCoords(const MSP* const msp, DotplotProperties *properties, int *sx, int *ex, int *sy, int *ey);
+static void                       setCoordsFromPos(GtkWidget *dotplot, const int x, const int y);
+static void                       getCoordsFromPos(GtkWidget *dotplot, const int x, const int y, int *refCoord, int *matchCoord);
+static void			  getPosFromSelectedCoords(GtkWidget *dotplot, int *x, int *y);
+static void                       getPosFromCoords(DotplotProperties *properties, int qCoord, int sCoord, int *x, int *y);
+static void                       setPoint(GdkPoint *point, const int x, const int y, GdkRectangle *rect);
+static gdouble                    getScaleFactor(DotplotProperties *properties, const gboolean horizontal);
+static void                       initWindow(const char *winsizeIn, DotplotProperties *properties);
+static void                       calculateImage(DotplotProperties *properties);
+static void                       drawDotplot(GtkWidget *dotplot, GdkDrawable *drawable);
+static void                       dotplotDrawCrosshair(GtkWidget *dotplot, GdkDrawable *drawable);
+static void                       clearPixmaps(DotplotProperties *properties);
+
+
+#ifdef ALPHA
+static void                       reversebytes(void *ptr, int n);
+#endif
+
+/***********************************************************
+ *                          Properties                     *
+ ***********************************************************/
+
+DotplotProperties* dotplotGetProperties(GtkWidget *widget)
+{
+  return widget ? (DotplotProperties*)(g_object_get_data(G_OBJECT(widget), "DotplotProperties")) : NULL;
+}
+
+static void onDestroyDotplot(GtkWidget *widget)
+{
+  DotplotProperties *properties = dotplotGetProperties(widget);
+  
+  if (properties)
+    {
+      if (properties->pixelmap)
+	{
+	  g_free(properties->pixelmap);
+	  properties->pixelmap = NULL;
+	}
+
+    if (properties->hspPixmap)
+      {
+	g_free(properties->hspPixmap);
+	properties->hspPixmap = NULL;
+      }
+
+    if (properties->image)
+      {
+        gdk_image_unref(properties->image);
+        properties->image = NULL;
+      }
+    
+      delete properties;
+      properties = NULL;
+      g_object_set_data(G_OBJECT(widget), "DotplotProperties", NULL);
+    }
+}
+
+
+/* Create the properties object for the dotplot. Note that we still create the properties
+ * even if widget is null, because we could be running in batch mode. */
+static DotplotProperties* dotplotCreateProperties(GtkWidget *widget,
+                                                  DotterWindowContext *dwc,
+                                                  const gboolean hspsOn,
+                                                  const gboolean breaklinesOn,
+                                                  const char *exportFileName)
+{
+  DotplotProperties *properties = new DotplotProperties;
+
+  properties->widget = widget;
+  properties->dotterWinCtx = dwc;
+  properties->hozExons1 = NULL;
+  properties->hozExons2 = NULL;
+  properties->vertExons1 = NULL;
+  properties->vertExons2 = NULL;
+  
+  properties->plotRect.x = 0;
+  properties->plotRect.y = 0;
+  properties->plotRect.width = 0;
+  properties->plotRect.height = 0;
+  
+  if (widget) /* only create colormap if we have a widget (i.e. we're not in batch/non-graphical mode) */
+    {
+      properties->colorMap = insertGreyRamp(properties);
+      gtk_widget_set_default_colormap(properties->colorMap);
+    }
+  
+  properties->image = NULL;
+
+  properties->pixelmap = NULL;
+  properties->hspPixmap = NULL;
+
+  properties->crosshairOn = TRUE;
+  properties->crosshairCoordsOn = TRUE;
+  properties->crosshairFullscreen = TRUE;
+
+  properties->pixelmapOn = !hspsOn;
+  properties->hspMode = hspsOn ? DOTTER_HSPS_LINE : DOTTER_HSPS_OFF;
+  
+  properties->gridlinesOn = FALSE;
+  properties->breaklinesOn = breaklinesOn;
+  properties->hozLabelsOn = TRUE;
+  properties->vertLabelsOn = TRUE;
+
+  properties->dragStart.x = UNSET_INT;
+  properties->dragStart.y = UNSET_INT;
+  properties->dragEnd.x = UNSET_INT;
+  properties->dragEnd.y = UNSET_INT;
+      
+  properties->exportFileName = exportFileName;
+
+  if (widget)
+    {
+      g_object_set_data(G_OBJECT(widget), "DotplotProperties", properties);
+      g_signal_connect(G_OBJECT(widget), "destroy", G_CALLBACK(onDestroyDotplot), NULL); 
+    }
+  
+  properties->hozScale.basesPerMark = 0;
+  properties->hozScale.basesPerSubmark = 0;
+  properties->hozScale.numMarks = 0;
+  properties->hozScale.numSubmarks = 0;
+  properties->hozScale.firstSubmarkPos = 0;
+  properties->hozScale.firstSubmarkCoord = 0;
+  properties->hozScale.startCoord = 0;
+  properties->hozScale.endCoord = 0;
+  properties->hozScale.labels = NULL;
+
+  properties->vertScale.basesPerMark = 0;
+  properties->vertScale.basesPerSubmark = 0;
+  properties->vertScale.numMarks = 0;
+  properties->vertScale.numSubmarks = 0;
+  properties->vertScale.firstSubmarkPos = 0;
+  properties->vertScale.firstSubmarkCoord = 0;
+  properties->vertScale.startCoord = 0;
+  properties->vertScale.endCoord = 0;
+  properties->vertScale.labels = NULL;
+
+  return properties;
+}
+
+
+DotterHspMode dotplotGetHspMode(GtkWidget *dotplot)
+{
+  DEBUG_ENTER("dotplotGetHspMode");
+
+  DotplotProperties *properties = dotplotGetProperties(dotplot);
+  
+  DEBUG_EXIT("dotplotGetHspMode returning ");
+  return properties->hspMode;
+}
+
+int dotplotGetSlidingWinSize(GtkWidget *dotplot)
+{
+  DotplotProperties *properties = dotplotGetProperties(dotplot);
+  return properties->slidingWinSize;
+}
+
+gboolean dotplotSetSlidingWinSize(GtkWidget *dotplot, const int newValue, GError **error)
+{
+  gboolean changed = FALSE;
+  DotplotProperties *properties = dotplotGetProperties(dotplot);
+  
+  if (newValue <= 0)
+    {
+      g_set_error(error, DOTTER_ERROR, DOTTER_ERROR_INVALID_WIN_SIZE, "Sliding window size must be greater than 0.\n");
+    }
+  else if (newValue != properties->slidingWinSize)
+    {
+      properties->slidingWinSize = newValue;
+      changed = TRUE;
+    }
+  
+  return changed;
+}
+
+void dotplotSetBreaklinesOn(GtkWidget *dotplot, const gboolean breaklinesOn)
+{
+  DotplotProperties *properties = dotplotGetProperties(dotplot);
+  properties->breaklinesOn = breaklinesOn;
+  calculateDotplotBorders(dotplot, properties);
+}
+
+void dotplotSetHozLabelsOn(GtkWidget *dotplot, const gboolean labelsOn)
+{
+  DotplotProperties *properties = dotplotGetProperties(dotplot);
+  properties->hozLabelsOn = labelsOn;
+  calculateDotplotBorders(dotplot, properties);
+}
+
+void dotplotSetVertLabelsOn(GtkWidget *dotplot, const gboolean labelsOn)
+{
+  DotplotProperties *properties = dotplotGetProperties(dotplot);
+  properties->vertLabelsOn = labelsOn;
+  calculateDotplotBorders(dotplot, properties);
+}
+
+int dotplotGetImageWidth(GtkWidget *dotplot)
+{
+  DotplotProperties *properties = dotplotGetProperties(dotplot);
+  return properties->imageWidth;
+}
+
+int dotplotGetImageHeight(GtkWidget *dotplot)
+{
+  DotplotProperties *properties = dotplotGetProperties(dotplot);
+  return properties->imageHeight;
+}
+
+double dotplotGetExpResScore(GtkWidget *dotplot)
+{
+  DotplotProperties *properties = dotplotGetProperties(dotplot);
+  return properties->expResScore;
+}
+
+int dotplotGetPixelFac(GtkWidget *dotplot)
+{
+  DotplotProperties *properties = dotplotGetProperties(dotplot);
+  return properties->pixelFac;
+}
+
+void dotplotToggleBumpExons(GtkWidget *dotplot)
+{
+  DotplotProperties *properties = dotplotGetProperties(dotplot);
+  exonViewToggleBumped(properties->hozExons1);
+  exonViewToggleBumped(properties->hozExons2);
+  exonViewToggleBumped(properties->vertExons1);
+  exonViewToggleBumped(properties->vertExons2);
+}
+
+/* Returns true if the pixelmap image should be displayed */
+static gboolean showImage(DotplotProperties *properties)
+{
+  /* Show the greyscale if hsp mode is greyscale or the dot-plot pixelmap is enabled */
+  return (properties->pixelmapOn || properties->hspMode == DOTTER_HSPS_GREYSCALE);
+}
+
+
+/* This returns true if the dot-plot should be shown. */
+static gboolean showDotplot(DotplotProperties *properties)
+{
+  /* The HSP greyscale mode overrides the dotplot, so don't show it if that is enabled. */
+  return (properties->pixelmapOn && !(properties->hspMode == DOTTER_HSPS_GREYSCALE && properties->hspPixmap));
+}
+
+
+/* Initialise the given pixmap */
+static void initPixmap(unsigned char **pixmap, const int width, const int height)
+{
+  DEBUG_ENTER("initPixmap");
+
+  if (*pixmap)
+    g_free(*pixmap);
+  
+  const int pixelmapLen = width  * height;
+  *pixmap = (unsigned char *)g_malloc(sizeof(unsigned char*) * pixelmapLen);
+  
+  int i = 0;
+  for (i=0; i < pixelmapLen; i++)
+    {
+      (*pixmap)[i] = 0;
+    }
+  
+  DEBUG_EXIT("initPixmap returning ");
+}
+
+
+/* Utility to reset all values in a pixmap to 0 */
+static void resetPixmapBackground(unsigned char *pixmap, DotplotProperties *properties)
+{
+  const int pixelmapLen = properties->image->width * properties->image->height;
+  
+  int i = 0;
+  for (i = 0; i < pixelmapLen; i++) 
+    {
+      pixmap[i] = 0;
+    }
+}
+
+
+/* Set the HSP viewing mode */
+void setHspMode(GtkWidget *dotplot, DotterHspMode hspMode)
+{
+  DotplotProperties *properties = dotplotGetProperties(dotplot);
+  DotterContext *dc = properties->dotterWinCtx->dotterCtx;
+  
+  properties->hspMode = hspMode;
+  
+  if (properties->hspMode)
+    {
+      if (!properties->hspPixmap)
+        {
+          /* The HSP pixelmap doesn't exist yet so create it */
+          initPixmap(&properties->hspPixmap, properties->image->width, properties->image->height);
+        }
+      
+      /* For greyscale mode, loop through all match MSPs and set the pixel strength */
+      if (properties->hspMode == DOTTER_HSPS_GREYSCALE) 
+        {
+          resetPixmapBackground(properties->hspPixmap, properties);
+          MSP *msp = dc->mspList;
+          
+          for ( ; msp; msp = msp->next)
+            {
+              const char *mspName = getShortMspName(msp);
+              if (!mspName || strcmp(mspName, dc->matchSeqName))
+                {
+                  /* Not an MSP from our match sequence */
+                  continue;
+                }
+              
+              int sx, ex, sy, ey;
+              getMspScreenCoords(msp, properties, &sx, &ex, &sy, &ey);
+              
+              /* Draw as greyscale pixmap */
+              const int strength = (int)msp->score;
+              calculateImageHsps(strength, sx, sy, ex, ey, properties);
+            }
+          
+          /* Overwrite the image with the HSP pixmap */
+          transformGreyRampImage(properties->image, properties->hspPixmap, properties);
+        }
+    }
+
+  if (showDotplot(properties))
+    {
+      /* Make sure the dot-plot pixmap is set (we may have overwritten it if the previous mode
+       * was HSP_GREYSCALE). */
+      
+      if (!properties->pixelmap)
+        {
+          /* The dot-plot pixelmap doesn't exist yet so create it */
+          initPixmap(&properties->pixelmap, properties->image->width, properties->image->height);
+          calculateImage(properties);
+        }
+      
+      transformGreyRampImage(properties->image, properties->pixelmap, properties);
+    }
+  
+  widgetClearCachedDrawable(dotplot, NULL);
+  gtk_widget_queue_draw(dotplot);
+}
+
+
+/* Toggle grid lines on/off */
+void dotplotToggleGrid(GtkWidget *dotplot)
+{
+  DotplotProperties *properties = dotplotGetProperties(dotplot);
+  properties->gridlinesOn = !properties->gridlinesOn;
+
+  widgetClearCachedDrawable(dotplot, NULL);
+  gtk_widget_queue_draw(dotplot);
+}
+
+
+/* Toggle the pixelmap on/off */
+void dotplotTogglePixelmap(GtkWidget *dotplot)
+{
+  DotplotProperties *properties = dotplotGetProperties(dotplot);
+  properties->pixelmapOn = !properties->pixelmapOn;
+  
+  if (!properties->pixelmap)
+    {
+      /* The dot-plot pixelmap doesn't exist yet so create it */
+      initPixmap(&properties->pixelmap, properties->image->width, properties->image->height);
+      calculateImage(properties);
+    }
+  
+  if (properties->hspMode != DOTTER_HSPS_GREYSCALE)
+    {
+      /* Make sure the image has the dot-plot pixels, not the HSP pixels, which might previously
+       * have overwritten it */
+      transformGreyRampImage(properties->image, properties->pixelmap, properties);
+    }
+  
+  widgetClearCachedDrawable(dotplot, NULL);
+  gtk_widget_queue_draw(dotplot);
+}
+
+
+/* Toggle functions for the crosshair properties */
+void toggleCrosshairOn(GtkWidget *dotplot)
+{
+  DotplotProperties *properties = dotplotGetProperties(dotplot);
+  properties->crosshairOn = !properties->crosshairOn;
+  
+  exonViewSetShowCrosshair(properties->hozExons1, properties->crosshairOn && properties->crosshairFullscreen);
+  exonViewSetShowCrosshair(properties->hozExons2, properties->crosshairOn && properties->crosshairFullscreen);
+  exonViewSetShowCrosshair(properties->vertExons1, properties->crosshairOn && properties->crosshairFullscreen);
+  exonViewSetShowCrosshair(properties->vertExons2, properties->crosshairOn && properties->crosshairFullscreen);
+  
+  refreshDotplot(dotplot);
+}
+
+void toggleCrosshairCoordsOn(GtkWidget *dotplot)
+{
+  DotplotProperties *properties = dotplotGetProperties(dotplot);
+  properties->crosshairCoordsOn = !properties->crosshairCoordsOn;
+  gtk_widget_queue_draw(dotplot);
+}
+
+void toggleCrosshairFullscreen(GtkWidget *dotplot)
+{
+  DotplotProperties *properties = dotplotGetProperties(dotplot);
+  properties->crosshairFullscreen = !properties->crosshairFullscreen;
+  
+  exonViewSetShowCrosshair(properties->hozExons1, properties->crosshairOn && properties->crosshairFullscreen);
+  exonViewSetShowCrosshair(properties->hozExons2, properties->crosshairOn && properties->crosshairFullscreen);
+  exonViewSetShowCrosshair(properties->vertExons1, properties->crosshairOn && properties->crosshairFullscreen);
+  exonViewSetShowCrosshair(properties->vertExons2, properties->crosshairOn && properties->crosshairFullscreen);
+
+  refreshDotplot(dotplot);
+}
+
+/***********************************************************
+ *			       Events                      *
+ ***********************************************************/
+
+/* Expose handler for dot-plot window */
+static gboolean onExposeDotplot(GtkWidget *dotplot, GdkEventExpose *event, gpointer data)
+{
+  GdkDrawable *window = GTK_LAYOUT(dotplot)->bin_window;
+  DotplotProperties *properties = dotplotGetProperties(dotplot);
+
+  if (window)
+    {
+      GdkDrawable *bitmap = widgetGetDrawable(dotplot);
+
+      if (!bitmap)
+        {
+          if (properties->exportFileName)
+            {
+              /* Set the background colour to something sensible for printing */
+              GdkColor *defaultBgColor = getGdkColor(DOTCOLOR_BACKGROUND, properties->dotterWinCtx->dotterCtx->defaultColors, FALSE, TRUE);
+              setWidgetBackgroundColor(gtk_widget_get_toplevel(dotplot), defaultBgColor);
+            }
+
+          bitmap = createBlankPixmap(dotplot);
+          drawDotplot(dotplot, bitmap);
+        }
+      
+      if (bitmap)
+        {
+          /* Push the bitmap onto the window */
+          GdkGC *gc = gdk_gc_new(window);
+          gdk_draw_drawable(window, gc, bitmap, 0, 0, 0, 0, -1, -1);
+          g_object_unref(gc);
+          
+          /* Draw anything else that needs to be refreshed on each expose */
+          dotplotDrawCrosshair(dotplot, window);
+          drawRubberBand(dotplot, window);
+        }
+    }
+
+  if (properties->exportFileName)
+    {
+      /* We're in batch mode and have been asked to export the plot to pdf; print it, 
+      * and then quit */
+      GError *error = NULL;
+      exportPlot(dotplot, GTK_WINDOW(gtk_widget_get_toplevel(dotplot)), properties->exportFileName, &error);
+      gtk_main_quit();
+    }
+
+  
+  return TRUE;
+}
+
+/* mouse-press handler for the dot plot window */
+static gboolean onButtonPressDotplot(GtkWidget *dotplot, GdkEventButton *event, gpointer data)
+{
+  gboolean handled = FALSE;
+  
+  if (event->type == GDK_BUTTON_PRESS && event->button == 1) /* left click */
+    {
+      setCoordsFromPos(dotplot, event->x, event->y);
+      handled = FALSE; /* let the parent update any other widgets that need refreshing */
+    }
+  else if (event->type == GDK_BUTTON_PRESS && event->button == 2) /* middle click */
+    {
+      /* Remember start point for drag */
+      DotplotProperties *properties = dotplotGetProperties(dotplot);
+      setPoint(&properties->dragStart, event->x, event->y, &properties->plotRect);
+      handled = TRUE;
+    }
+  
+  return handled;
+}
+
+
+/* mouse-release handler for the dot plot window */
+static gboolean onButtonReleaseDotplot(GtkWidget *dotplot, GdkEventButton *event, gpointer data)
+{
+  gboolean handled = FALSE;
+  
+  if (event->type == GDK_BUTTON_RELEASE && event->button == 2) /* middle click */
+    {
+      /* Call dotter on the selected region */
+      DotplotProperties *properties = dotplotGetProperties(dotplot);
+      DotterContext *dc = properties->dotterWinCtx->dotterCtx;
+      
+      if (properties->dragStart.x != UNSET_INT && properties->dragEnd.x != UNSET_INT)
+        {
+          /* Get the sequence coords for the start and end of the drag rectangle. */
+	  const gdouble zoomFactor = 0; 
+	
+	  int qStart, qEnd, sStart, sEnd;
+	  getCoordsFromPos(dotplot, properties->dragStart.x, properties->dragStart.y, &qStart, &sStart);
+	  getCoordsFromPos(dotplot, properties->dragEnd.x, properties->dragEnd.y, &qEnd, &sEnd);
+
+	  IntRange qRange, sRange;
+	  qRange.set(qStart, qEnd);
+	  sRange.set(sStart, sEnd);
+	
+          /* Ignore small mouse moves as they are likely to be accidental or cancelled clicks */
+          if (qRange.max() - qRange.min() > 10 && sRange.max() - sRange.min() > 10)
+            {
+	      g_debug("Calling dotter internally with the range: q=%d %d, s=%d %d\n", qRange.min(), qRange.max(), sRange.min(), sRange.max());
+              callDotterInternal(dc, &qRange, &sRange, zoomFactor, properties->breaklinesOn) ;
+            }
+        }
+      
+      /* Clear drag */
+      setPoint(&properties->dragStart, UNSET_INT, UNSET_INT, NULL);
+      setPoint(&properties->dragEnd, UNSET_INT, UNSET_INT, NULL);
+      
+      gtk_widget_queue_draw(dotplot);
+      handled = TRUE;
+    }
+  
+  return handled;
+}
+
+
+/* Mouse move handler */
+static gboolean onMouseMoveDotplot(GtkWidget *dotplot, GdkEventMotion *event, gpointer data)
+{
+  gboolean handled = FALSE;
+  
+  if (event->state & GDK_BUTTON1_MASK)  /* left-drag */
+    {
+      setCoordsFromPos(dotplot, event->x, event->y);
+      handled = FALSE; /* let the parent update any other widgets that need refreshing */
+    }
+  else if (event->state & GDK_BUTTON2_MASK)  /* middle-drag */
+    {
+      DotplotProperties *properties = dotplotGetProperties(dotplot);
+      setPoint(&properties->dragEnd, event->x, event->y, &properties->plotRect);
+      gtk_widget_queue_draw(dotplot);
+      handled = TRUE;
+    }
+  
+  return handled;
+}
+
+
+/***********************************************************
+ *                        Initialisation                   *
+ ***********************************************************/
+
+/* Calculate the width/height of the image */
+static int getImageDimension(DotplotProperties *properties, const gboolean horizontal)
+{
+  DEBUG_ENTER("getImageDimension(horizontal=%d)", horizontal);
+
+  DotterWindowContext *dwc = properties->dotterWinCtx;
+  DotterContext *dc = properties->dotterWinCtx->dotterCtx;
+  
+  const IntRange* const seqRange = horizontal ? &dwc->refSeqRange : &dwc->matchSeqRange;
+  const int seqLen = seqRange->length();
+  DEBUG_OUT("Sequence length = %d\n", seqLen);
+  
+  int imageLen = (int)ceil((double)seqLen / getScaleFactor(properties, horizontal));
+  DEBUG_OUT("Image length = %d\n", imageLen);
+
+  if (seqLen / dc->numFrames > imageLen * dwc->zoomFactor)
+    {
+      g_critical("seqLen/resfac > imageLen * zoom (%d > %d (%d*%f))", seqLen / dc->numFrames, (int)(imageLen * dwc->zoomFactor), imageLen, dwc->zoomFactor);
+    }
+  
+  DEBUG_EXIT("getImageDimension returning ");
+  return imageLen;
+}  
+
+
+/* Set the coords for the initial crosshair position. Use the given coords if in range, or
+ * use the center of each seq range otherwise */
+static void initCrosshairCoords(const int qcenter, const int scenter, DotterWindowContext *dwc)
+{
+  if (valueWithinRange(qcenter, &dwc->refSeqRange))
+    {
+      dwc->refCoord = qcenter;
+    }
+  else
+    {
+      dwc->refCoord = dwc->refSeqRange.centre();
+    }
+  
+  if (valueWithinRange(qcenter, &dwc->matchSeqRange))
+    {
+      dwc->matchCoord = qcenter;
+    }
+  else
+    {
+      dwc->matchCoord = dwc->matchSeqRange.centre();
+    }
+}
+
+
+/* Create a GdkImage of the given size. If the given dimensions are
+ * too big for GDK to handle, they are reduced and the zoom level
+ * is also adjusted. */
+static GdkImage* createImage(DotplotProperties *properties)
+{
+  DotterWindowContext *dwc = properties->dotterWinCtx;
+
+  if (properties->imageWidth > MAX_IMAGE_DIMENSION)
+    {
+      int origLen = properties->imageWidth * dwc->zoomFactor;
+
+      properties->imageWidth = MAX_IMAGE_DIMENSION;
+      dwc->zoomFactor = ceil((double)origLen / (double)properties->imageWidth); /* adjust zoom so we can still show the original range */
+
+      properties->imageWidth = getImageDimension(properties, TRUE);   /* rounds the new value to the nearest 4 etc. */
+      properties->imageHeight = getImageDimension(properties, FALSE); 
+
+      g_warning("Image too wide - setting zoom to %d\n", (int)dwc->zoomFactor);
+    }
+  
+  if (properties->imageHeight > MAX_IMAGE_DIMENSION)
+    {
+      int origLen = properties->imageHeight * dwc->zoomFactor;
+
+      properties->imageHeight = MAX_IMAGE_DIMENSION;
+      dwc->zoomFactor = ceil((double)origLen / (double)properties->imageHeight);
+
+      properties->imageWidth = getImageDimension(properties, TRUE);
+      properties->imageHeight = getImageDimension(properties, FALSE);
+
+      g_warning("Image too tall - setting zoom to %d\n", (int)dwc->zoomFactor);
+    }
+
+  GdkImage *image = gdk_image_new(GDK_IMAGE_NORMAL, gdk_visual_get_system(), properties->imageWidth, properties->imageHeight);
+
+  return image;
+}
+
+
+
+/* Create the actual drawing area for the dotplot */
+static GtkWidget* createDotplotDrawingArea(DotterWindowContext *dwc, 
+                                           const char *loadFileName,
+                                           const char *saveFileName,
+                                           const char *exportFileName,
+                                           const gboolean hspsOn,
+                                           const gboolean breaklinesOn,
+                                           const char *initWinsize,
+                                           const int pixelFacIn,
+                                           const int zoomFacIn,
+                                           const int qcenter,
+                                           const int scenter)
+{
+  DEBUG_ENTER("createDotplotDrawingArea");
+
+  /* If we're in batch mode and we're exporting the matrix only (i.e. we have a save file
+   * but we don't have an export file), then we don't need to create the plot */
+  gboolean batch = (saveFileName || exportFileName);
+  gboolean showPlot = (exportFileName || !batch);
+
+  GtkWidget *dotplot = (showPlot ? gtk_layout_new(NULL, NULL) : NULL);
+  
+  DotplotProperties *properties = dotplotCreateProperties(dotplot, dwc, hspsOn, breaklinesOn, exportFileName);
+  
+  if (loadFileName)
+    {
+      /* Load existing dotplot file (initialises and populates the pixmap) */
+      GError *error = NULL;
+      loadPlot(dotplot, loadFileName, &error);
+      
+      prefixError(error, "Error loading dot plot. ");
+      reportAndClearIfError(&error, G_LOG_LEVEL_CRITICAL);
+    }
+  else 
+    {
+      initWindow(initWinsize, properties);
+      
+      /* Set pixelFac so that expResScore is at 1/5 of the range. 
+       * This positions expResScore at 51.2 */
+      properties->pixelFac = pixelFacIn ? pixelFacIn : 0.2 * NUM_COLORS / properties->expResScore;
+      
+      /* Calculate the image size */
+      properties->imageWidth = getImageDimension(properties, TRUE);
+      properties->imageHeight = getImageDimension(properties, FALSE);
+
+      /* Create the GdkImage (adjusts the width/height/zoom if original dimensions are too big) */
+      if (showPlot)
+        properties->image = createImage(properties);
+
+      DEBUG_OUT("Set image w=%d, h=%d\n", properties->imageWidth, properties->imageHeight);
+      
+      unsigned char **pixmap = NULL; /* which pixelmap we're displaying at the start */
+      
+      if (properties->hspMode == DOTTER_HSPS_GREYSCALE)
+        {
+          pixmap = &properties->hspPixmap;
+          initPixmap(pixmap, properties->imageWidth, properties->imageHeight);
+        }
+      else if (properties->pixelmapOn)
+        {
+          pixmap = &properties->pixelmap;
+          initPixmap(pixmap, properties->imageWidth, properties->imageHeight);
+          calculateImage(properties);
+        }
+      
+      /* Push the pixelmap to the GdkImage */
+      if (showPlot && pixmap)
+        transformGreyRampImage(properties->image, *pixmap, properties);
+    }
+  
+  if (saveFileName)
+    {
+      /* Batch mode: save the dot matrix;  */
+      GError *error = NULL;
+      savePlot(dotplot, properties, saveFileName, &error);
+      
+      prefixError(error, "Error saving dot plot. ");
+      reportAndClearIfError(&error, G_LOG_LEVEL_CRITICAL);
+    }
+
+  if (showPlot)
+    {
+      /* Set the crosshair coords (only applicable if not in batch mode) */
+      if (!batch)
+        initCrosshairCoords(qcenter, scenter, properties->dotterWinCtx);
+
+      /* Calculate the size of the dot-plot */
+      calculateDotplotBorders(dotplot, properties);
+    }
+  
+  DEBUG_EXIT("createDotplotDrawingArea returning ");
+  return dotplot;
+}
+
+
+/* Put all the dotplot and exon widgets in a table. The table gets put in a
+ * scrolled window and the scrolled window is returned. */
+static GtkWidget* createDotplotTable(GtkWidget *dotplotCont, 
+                                     GtkWidget *hozExons1,
+                                     GtkWidget *hozExons2,
+                                     GtkWidget *vertExons1,
+                                     GtkWidget *vertExons2)
+{
+  const int xpad = 0;
+  const int ypad = 0;
+  const int numRows = 4;
+  const int numCols = 4;
+  
+  GtkTable *table = GTK_TABLE(gtk_table_new(numRows, numCols, FALSE));
+  
+  gtk_table_attach(table, dotplotCont, 1, 2, 1, 2, GTK_FILL, GTK_FILL, xpad, ypad);
+  gtk_table_attach(table, vertExons1, 2, 3, 1, 2, GTK_FILL, GTK_FILL, xpad, ypad);
+  gtk_table_attach(table, vertExons2, 3, 4, 1, 2, GTK_FILL, GTK_FILL, xpad, ypad);
+  gtk_table_attach(table, hozExons1, 1, 2, 2, 3, GTK_FILL, GTK_FILL, xpad, ypad);
+  gtk_table_attach(table, hozExons2, 1, 2, 3, 4, GTK_FILL, GTK_FILL, xpad, ypad);
+  
+  /* Put the table in a scrolled window with a horizontal scrollbar */
+  GtkWidget *scrollWin = gtk_scrolled_window_new(NULL, NULL);
+  gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrollWin), GTK_WIDGET(table));
+  gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollWin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+  
+  return GTK_WIDGET(scrollWin);
+}
+
+
+/* Return the reverse strand if the given strand is forward and vice versa */
+static BlxStrand getOppositeStrand(BlxStrand strand)
+{
+  return (strand == BLXSTRAND_FORWARD ? BLXSTRAND_REVERSE : BLXSTRAND_FORWARD);
+}
+
+
+/* Create the exons view widgets for dotter */
+static void createDotterExonViews(GtkWidget *dotplot, 
+                                  DotterWindowContext *dwc, 
+                                  GtkWidget **hozExons1,
+                                  GtkWidget **hozExons2,
+                                  GtkWidget **vertExons1,
+                                  GtkWidget **vertExons2)
+{
+  DotplotProperties *properties = dotplotGetProperties(dotplot);
+  DotterContext *dc = dwc->dotterCtx;
+  const gboolean showCrosshair = properties->crosshairOn && properties->crosshairFullscreen;
+
+  /* The strand that was passed to dotter is the main strand, so show that first */
+  *hozExons1 = createDotterExonView(dotplot, 
+                                    NULL,
+                                    TRUE,
+                                    dc->refSeqStrand, 
+                                    dwc, 
+                                    properties->imageWidth,
+                                    properties->imageHeight,
+                                    &dwc->refSeqRange, 
+                                    showCrosshair,
+                                    &properties->hozExons1);
+  
+  *hozExons2 = createDotterExonView(dotplot, 
+                                    NULL,
+                                    TRUE,
+                                    getOppositeStrand(dc->refSeqStrand), 
+                                    dwc, 
+                                    properties->imageWidth, 
+                                    properties->imageHeight,
+                                    &dwc->refSeqRange, 
+                                    showCrosshair, 
+                                    &properties->hozExons2);
+  
+  *vertExons1 = createDotterExonView(dotplot, 
+                                     NULL, 
+                                     FALSE,
+                                     dc->matchSeqStrand, 
+                                     dwc, 
+                                     properties->imageWidth,
+                                     properties->imageHeight,
+                                     &dwc->matchSeqRange,
+                                     showCrosshair,
+                                     &properties->vertExons1);
+
+  *vertExons2 = createDotterExonView(dotplot, 
+                                     NULL, 
+                                     FALSE,
+                                     getOppositeStrand(dc->matchSeqStrand),
+                                     dwc, 
+                                     properties->imageWidth, 
+                                     properties->imageHeight,
+                                     &dwc->matchSeqRange, 
+                                     showCrosshair,
+                                     &properties->vertExons2);
+}
+
+
+/* Create the drawing area for the dot plot. The 'dotplot' output arg is populated with the
+ * actual drawing area; the return arg is the overall container widget for the dot plot that will
+ * be packed into the dotter window UNLESS we're running in batch mode, in which case the return 
+ * will be no widgets displayed to the user. */
+GtkWidget* createDotplot(DotterWindowContext *dwc, 
+                         const char *loadFileName,
+                         const char *saveFileName,
+                         const char *exportFileName,
+                         const gboolean hspsOn,
+                         const gboolean breaklinesOn,
+                         const char *initWinsize,
+                         const int pixelFacIn,
+                         const int zoomFacIn,
+                         const int qcenter,
+                         const int scenter,
+                         GtkWidget **dotplot)
+{
+  DEBUG_ENTER("createDotplot");
+
+  /* Create the actual drawing area for the dot plot */
+  *dotplot = createDotplotDrawingArea(dwc, loadFileName, saveFileName, exportFileName, hspsOn, breaklinesOn, initWinsize, pixelFacIn, zoomFacIn, qcenter, scenter);
+
+  /* Create and realise the container widgets etc. only if not in batch mode, or if
+   * in batch mode and exporting to PDF (which requires the widget to draw itself). */
+  const gboolean batch = (exportFileName || saveFileName);
+  const gboolean createWindow = (!batch || exportFileName);
+
+  if (!createWindow)
+    {
+      return NULL;
+    }
+
+  /* Create the 4 exon views: one for each strand, for both sequences */
+  GtkWidget *hozExons1 = NULL;
+  GtkWidget *hozExons2 = NULL;
+  GtkWidget *vertExons1 = NULL;
+  GtkWidget *vertExons2 = NULL;
+  createDotterExonViews(*dotplot, dwc, &hozExons1, &hozExons2, &vertExons1, &vertExons2);
+
+  /* Put everything in a table */
+  GtkWidget *parent = createDotplotTable(*dotplot, hozExons1, hozExons2, vertExons1, vertExons2);
+  
+  gtk_widget_add_events(*dotplot, GDK_BUTTON_PRESS_MASK);
+  gtk_widget_add_events(*dotplot, GDK_BUTTON_RELEASE_MASK);
+  gtk_widget_add_events(*dotplot, GDK_POINTER_MOTION_MASK);
+  g_signal_connect(G_OBJECT(*dotplot), "expose-event", G_CALLBACK(onExposeDotplot), NULL);
+  g_signal_connect(G_OBJECT(*dotplot), "button-press-event", G_CALLBACK(onButtonPressDotplot), NULL);
+  g_signal_connect(G_OBJECT(*dotplot), "button-release-event", G_CALLBACK(onButtonReleaseDotplot), NULL);
+  g_signal_connect(G_OBJECT(*dotplot), "motion-notify-event",   G_CALLBACK(onMouseMoveDotplot), NULL);
+
+  DEBUG_EXIT("createDotplot returning ");
+  return parent;
+}
+
+
+/* Delete image and pixmaps. Needed if we have to re-create them at a different size. */
+static void clearPixmaps(DotplotProperties *properties)
+{
+  if (properties->image)
+    {
+      gdk_image_unref(properties->image);
+      properties->image = NULL;
+    }
+  
+  if (properties->pixelmap)
+    {
+      g_free(properties->pixelmap);
+      properties->pixelmap = NULL;
+    }
+  
+  if (properties->hspPixmap)
+    {
+      g_free(properties->hspPixmap);
+      properties->hspPixmap = NULL;
+    }
+}
+
+
+/* Return the alphabet size for the given sequence type (4 for DNA, 20 for protein) */
+static int getAlphabetSize(const BlxSeqType seqType)
+{
+  return (seqType == BLXSEQ_DNA ? 4 : 20);
+}
+
+
+
+static void initWindow(const char *winsizeIn, DotplotProperties *properties)
+{
+  DotterContext *dc = properties->dotterWinCtx->dotterCtx;
+  
+  double exp1, exp2, exp3, lambda;
+  int win1, win2, win3;
+  
+  const int alphabetSize = getAlphabetSize(dc->displaySeqType);
+  
+  /* Call winsizeFromlambdak even if we don't want to set the window
+   size in order to get the other parameters (properties->expResScore) */
+  
+  if (dc->blastMode == BLXMODE_BLASTX) 
+    {
+      win1 = winsizeFromlambdak(dc->matrix, atob_0, alphabetSize, dc->peptideSeqs[0], dc->matchSeq, &exp1, &lambda);
+      win2 = winsizeFromlambdak(dc->matrix, atob_0, alphabetSize, dc->peptideSeqs[1], dc->matchSeq, &exp2, &lambda);
+      win3 = winsizeFromlambdak(dc->matrix, atob_0, alphabetSize, dc->peptideSeqs[2], dc->matchSeq, &exp3, &lambda);
+      properties->expResScore = (exp1 + exp2 + exp3)/3.0;
+      properties->slidingWinSize = (win1 + win2 + win3)/3.0;
+    }
+  else if (dc->blastMode == BLXMODE_BLASTN)
+    {
+      properties->slidingWinSize = winsizeFromlambdak(dc->matrix, ntob, alphabetSize, dc->refSeq, dc->matchSeq, &properties->expResScore, &lambda);
+    }
+  else
+    {
+      properties->slidingWinSize = winsizeFromlambdak(dc->matrix, atob_0, alphabetSize, dc->refSeq, dc->matchSeq, &properties->expResScore, &lambda);
+    }
+  
+  if (!winsizeIn || toupper(*winsizeIn) == 'K') 
+    {
+      if (properties->slidingWinSize < 3) 
+        {
+          g_critical("Karlin/Altschul estimate of window size = %d ignored. Using 10 instead.\n", properties->slidingWinSize);
+          properties->slidingWinSize = 10;
+        }
+      
+      if (properties->slidingWinSize > 50) 
+        {
+          g_critical("Karlin/Altschul estimate of window size = %d ignored. Using 50 instead.\n", properties->slidingWinSize);
+          properties->slidingWinSize = 50;
+        }
+    }
+  else
+    {
+      if (!atoi(winsizeIn))
+        {
+          g_error("Bad window size specification: %s\n", winsizeIn);
+        }
+      
+      properties->slidingWinSize = atoi(winsizeIn);
+    }
+}
+
+
+/* Get a base in the horizontal (reference) sequence. The given index is zero-based within our
+ * current display range. */
+static char getHozSeqBase(DotterWindowContext *dwc, const int idx, const int frame, const int offset)
+{
+  DotterContext *dc = dwc->dotterCtx;
+
+  char result;
+
+  if (dc->blastMode == BLXMODE_BLASTX)
+    {
+      result = dc->peptideSeqs[frame][idx + offset];
+    }
+  else
+    {
+      /* Reverse the sequence if the scale is reversed */
+      const int coord = dc->hozScaleRev ? dwc->refSeqRange.max() - idx : dwc->refSeqRange.min() + idx;
+      
+      /* Complement the sequence if it's the reverse strand */
+      const gboolean complement = (dc->refSeqStrand == BLXSTRAND_REVERSE && dc->refSeqType == BLXSEQ_DNA && dc->hozScaleRev);
+
+      result = getSequenceIndex(dc->refSeq, coord, complement, &dc->refSeqFullRange, dc->refSeqType);
+    }
+  
+  return result;
+}
+
+
+/* Get a base in the vertical (match) sequence. The given index is zero-based within our
+ * current display range. */
+static char getVertSeqBase(DotterWindowContext *dwc, const int idx)
+{
+  DotterContext *dc = dwc->dotterCtx;
+
+  /* Reverse the sequence if the scale is reversed. */
+  const int coord = dc->vertScaleRev ? dwc->matchSeqRange.max() - idx : dwc->matchSeqRange.min() + idx;
+
+  const gboolean complement = (dc->matchSeqStrand == BLXSTRAND_REVERSE && dc->refSeqType == BLXSEQ_DNA && dc->vertScaleRev);
+  
+  return getSequenceIndex(dc->matchSeq, coord, complement, &dc->matchSeqFullRange, dc->matchSeqType);
+}
+
+
+/* Populate the array of binary values for the match sequence (used by calculateImage) */
+static void populateMatchSeqBinaryVals(DotterWindowContext *dwc, const int slen, const int translationTable[], int *sIndex)
+{
+  int sIdx = 0;
+  
+  for ( ; sIdx < slen; ++sIdx) 
+    {
+      const char sBase = getVertSeqBase(dwc, sIdx);
+      const int asciiVal = (int)sBase;
+      const int aminoAcidId = translationTable[asciiVal];
+      sIndex[sIdx] = aminoAcidId;
+    }
+}
+
+
+/* Create the score vector that is used by calculateImage. Allocates memory but does not populate it
+ * except for the not-a-residue entry) */
+static void createScoreVec(DotterWindowContext *dwc, const int vecLen, const int qlen, BlxHandle *handle, gint32 ***scoreVecPtr)
+{
+  DotterContext *dc = dwc->dotterCtx;
+  
+  *scoreVecPtr = (gint32**)handleAlloc(handle, vecLen * sizeof(int*));
+  gint32 **scoreVec = *scoreVecPtr;
+
+  /* Allocate memory for each row in the score vector. Each row is the length of the ref sequence */
+  int rowIdx = 0;
+  for ( ; rowIdx < vecLen; ++rowIdx)
+    {
+      scoreVec[rowIdx] = (gint32*)handleAlloc(handle, qlen * sizeof(gint32));
+    }
+
+  if (dc->blastMode != BLXMODE_BLASTN)
+    {
+      /* Populate non-protein symbols in scorevector */
+      int qIdx = 0;
+      for (qIdx = 0; qIdx < qlen; ++qIdx) 
+        {
+          scoreVec[vecLen - 1][qIdx] = dc->matrix[vecLen - 2][vecLen - 2];
+        }
+    }
+}
+
+
+static void populateScoreVec(DotterWindowContext *dwc, const int vecLen, const int qlen, const int frame, const int offset, const int translationTable[], int **scoreVec)
+{
+  DotterContext *dc = dwc->dotterCtx;
+  
+  /* Loop through each row */
+  int rowIdx = 0;
+  for (rowIdx = 0; rowIdx < vecLen - 1; ++rowIdx)
+    {
+      /* Loop through each index on the row */
+      int qIdx = 0;
+      for (qIdx = 0; qIdx < qlen; ++qIdx)
+        {
+          const char qBase = getHozSeqBase(dwc, qIdx, frame, offset);
+          const int asciiVal = (int)qBase;
+          const int aminoAcidId = translationTable[asciiVal];
+          const gint32 score = dc->matrix[rowIdx][aminoAcidId]; /* score of this base in the q seq wrt the current amino acid ID 'i' */
+          
+          scoreVec[rowIdx][qIdx] = score;
+        }
+    }
+}
+
+
+/* Return the translation table required for a sequence of the given type and strand */
+static int* getTranslationTable(const BlxSeqType seqType, const BlxStrand strand)
+{
+  int *result = NULL;
+  
+  if (seqType == BLXSEQ_PEPTIDE)
+    {
+      result = atob_0;
+    }
+  else
+    {
+      result = (strand == BLXSTRAND_REVERSE ? ntob_compl : ntob);
+    }
+     
+  return result;
+}
+
+
+static int* getRowToDelete(const int sIdx, const int slen, const int *sIndex, int **scoreVec, int *zero, const int slidingWinSize, const BlxStrand strand)
+{
+  int *delrow = NULL;
+  
+  if (strand == BLXSTRAND_REVERSE)
+    {
+      if (sIdx < slen - slidingWinSize) 
+        {
+          delrow = scoreVec[sIndex[sIdx + slidingWinSize]];
+        }
+      else
+        {
+          delrow = zero;
+        }
+    }
+  else
+    {
+      if (sIdx >= slidingWinSize) 
+        {
+          delrow = scoreVec[sIndex[sIdx - slidingWinSize]];
+        }
+      else
+        {
+          delrow = zero;
+        }
+    } 
+  
+  return delrow;
+}
+
+
+/* This does the work for calculateImage, for a particular strand and reading frame of the reference sequence */
+static void doCalculateImage(const BlxStrand qStrand, 
+                             const int incrementVal, 
+                             const int sStart, 
+                             const int frame,
+                             DotterWindowContext *dwc,
+                             DotplotProperties *properties,
+                             const int pepQSeqLen,
+                             const int pepQSeqOffset,
+                             const int slen,
+                             const int qlen,
+                             const int vecLen,
+                             const int win2,
+                             int **scoreVec,
+                             int *sIndex,
+                             int *sum1,
+                             int *sum2,
+                             int *zero)
+{
+  DotterContext *dc = dwc->dotterCtx;
+  const int pixelmapLen = properties->imageWidth * properties->imageHeight;
+
+  int qIdx, sIdx, qmax, dotpos, dotposq, dotposs;
+  
+  int *newsum;	/* The current row of scores being calculated */
+  int *oldsum;	/* Remembers the previous row of calculated scores */
+  int *delrow;	/* Pointer to the row in scoreVec to subtract */
+  int *addrow;	/* Pointer to the row in scoreVec to add */
+  
+  /* Reset the sum vectors */
+  int idx = 0;
+  for ( ; idx < pepQSeqLen; ++idx) 
+    {
+      sum1[idx] = 0;
+      sum2[idx] = 0;
+    }
+  
+  /* Get the range of valid calculations (excluding the initial sliding window size, where we don't have enough 
+   * info to calculate the average properly - exclude the winsize at the start if fwd or the end if reverse) */
+  IntRange validRange;
+  validRange.set(qStrand == BLXSTRAND_REVERSE ? 0 : properties->slidingWinSize,
+                 qStrand == BLXSTRAND_REVERSE ? slen - properties->slidingWinSize : slen);
+  
+  /* Re-populate the score vector for this reading frame */
+  populateScoreVec(dwc, vecLen, pepQSeqLen, frame, pepQSeqOffset, getTranslationTable(dc->displaySeqType, qStrand), scoreVec);
+  
+  /* Loop through each base in the match sequence */
+  for (sIdx = sStart ; sIdx >= 0 && sIdx < slen; sIdx += incrementVal)
+    {   
+      /* Set oldsum to the previous row. (newsum will be overwritten, but we re-use the
+       * same two vectors (sum1 and sum2) here to save having to keep allocating memory) */
+      oldsum = (sIdx & 1) ? sum2 : sum1;
+      newsum = (sIdx & 1) ? sum1 : sum2;
+      
+      delrow = getRowToDelete(sIdx, slen, sIndex, scoreVec, zero, properties->slidingWinSize, qStrand);
+      
+      /* We add the pre-calculated value from the score vector for the current amino acid */
+      addrow = scoreVec[sIndex[sIdx]];
+      *newsum = *addrow;
+      ++addrow;
+      
+      qmax = min(properties->slidingWinSize, pepQSeqLen);
+      
+      for (qIdx = 1; qIdx < qmax ; ++qIdx)
+        {
+          ++newsum;
+          *newsum = *oldsum + *addrow;
+          ++oldsum;
+          ++addrow;
+        }
+      
+      qmax = (dc->blastMode != BLXMODE_BLASTX && dwc->selfComp ? sIdx + 1 : pepQSeqLen);
+      qmax = min(qmax, pepQSeqLen);
+      
+      for ( ; qIdx < qmax ; ++qIdx) 
+        {
+          ++newsum;
+          *newsum = *oldsum + *addrow - *delrow;
+          ++oldsum;
+          ++addrow;
+          ++delrow;
+          
+          if (*newsum > 0 && valueWithinRange(sIdx, &validRange)) 
+            {
+              dotposq = (qIdx - win2)/dwc->zoomFactor;
+              dotposs = (sIdx - (incrementVal * win2))/dwc->zoomFactor;
+              
+              /* Only fill half the submatrix */
+              const int qPosLocal = qIdx - win2 - (dotposq * dwc->zoomFactor);  /* query position in local submatrix (of one pixel) */
+              int sPosLocal = sIdx - (incrementVal * win2) - (dotposs * dwc->zoomFactor);  /* subject position in local submatrix (of one pixel) */
+              
+              if (qStrand == BLXSTRAND_REVERSE)
+                {
+                  /* Set the origin (0,0) to the bottom left corner of submatrix
+                   Ugly but correct. Zoom = pixels/submatrix */
+                  sPosLocal = dwc->zoomFactor - 1 - sPosLocal;
+                }
+              
+              if (sPosLocal >= qPosLocal)
+                {
+                  dotpos = properties->imageWidth*dotposs + dotposq;
+                  
+                  if (dotpos < 0 || dotpos >= pixelmapLen) 
+                    {
+                      g_critical ( "Pixel %d out of bounds. Pixelmap len=%d, mode =%d, ref sequqnece strand=%s\n", dotpos, pixelmapLen, dc->blastMode, (qStrand == BLXSTRAND_REVERSE ? "reverse" : "forward"));
+                    }
+                  else
+                    {
+                      /* Keep the max dot value of all diagonals in this pixel */
+                      const int val = *newsum * properties->pixelFac / properties->slidingWinSize;
+                      unsigned char dotValue = (val > 255 ? 255 : (unsigned char)val);
+                      unsigned char *curDot = &properties->pixelmap[dotpos];
+                      
+                      if (dotValue > *curDot)
+                        {
+                          *curDot = dotValue;
+                        }
+                    }
+                }
+            }
+        } 
+    }
+}
+
+
+/* Print some debug info for the calculateImage function to stdout */
+static void printCalculateImageStats(DotterWindowContext *dwc, const int qlen, const int slen)
+{
+  DotterContext *dc = dwc->dotterCtx;
+  
+  double speed = 17.2;  /* Speed in Mdots/seconds. SGI MIPS R10000 (clobber) */
+  /* speed = 5.7;  DEC Alpha AXP 3000/700 */
+  /* speed = 3.7;  SGI R4400: */
+  
+  double numDots = qlen/1e6*slen; /* total number of dots (millions) */
+  
+  if (dwc->selfComp) 
+    numDots /= 2;
+  
+  if (dc->blastMode == BLXMODE_BLASTN && !(dc->watsonOnly || dc->crickOnly)) 
+    numDots *= 2;
+  
+  if (dc->blastMode == BLXMODE_BLASTX) 
+    numDots *= 3;
+  
+  int min = (int)(numDots/speed/60);
+  int sec = (int)(numDots/speed) - min*60;
+  
+  g_message("%d vs. %d residues => %.2f million dots. ", qlen, slen, numDots);
+  
+  if (min+sec >= 2) 
+    {
+      g_message("(Takes ");
+      
+      if (min)
+        g_message("%d:%.2d minutes", min, sec);
+      else 
+        g_message("%d seconds", sec);
+      
+      g_message(" on an SGI MIPS R10000)");
+    }
+  
+  g_message("\n");
+  fflush(stdout);
+}
+
+
+/* This function calculates the data that will be put into the dotplot image. It puts the max
+ * diagonal for each pixel into *pixelmap */
+static void calculateImage(DotplotProperties *properties)
+{
+  DEBUG_ENTER("calculateImage");
+
+  g_assert(properties->slidingWinSize > 0);
+  
+  int qIdx, sIdx;     /* Loop variables */
+  int dotpos;
+  
+  BlxHandle handle = handleCreate();
+  
+  /* Extract some often-used data */
+  DotterWindowContext *dwc = properties->dotterWinCtx;
+  DotterContext *dc = properties->dotterWinCtx->dotterCtx;
+  const int qlen = dwc->refSeqRange.length();
+  const int slen = dwc->matchSeqRange.length();
+  const int win2 = properties->slidingWinSize/2;
+
+  /* Print some statistics about what we're about to do */
+  printCalculateImageStats(dwc, qlen, slen);
+  
+  /* Find the offset of the current display range within the full range of the bit of reference sequence we have */
+  const int qOffset = dc->refSeqStrand == BLXSTRAND_REVERSE 
+    ? dc->refSeqFullRange.max() - dwc->refSeqRange.max()
+    : dwc->refSeqRange.min() - dc->refSeqFullRange.min();
+  
+  /* Convert from nucleotides to peptides, if applicable */
+  const int resFactor = (dc->blastMode == BLXMODE_BLASTX ? dc->numFrames : 1);
+  const int pepQSeqLen = qlen / resFactor;
+  const int pepQSeqOffset = qOffset / resFactor;
+  const int vecLen = (dc->displaySeqType == BLXSEQ_DNA ? 6 : 25);
+
+  /* Initialize lookup tables for faster execution. scoreVec is an array of precalculated 
+   * scores for qseq residues. sIndex contains the match sequence forward strand bases as 
+   * binary values (i.e. amino-acid IDs 0 -> 23) */
+  gint32 **scoreVec = NULL;
+  createScoreVec(dwc, vecLen, pepQSeqLen, &handle, &scoreVec);
+
+  gint32 *sIndex = (gint32*)handleAlloc(&handle, slen * sizeof(gint32));
+  populateMatchSeqBinaryVals(dwc, slen, getTranslationTable(dc->matchSeqType, BLXSTRAND_FORWARD), sIndex);
+  
+  /* Allocate some vectors for use in averaging the values for whole rows at a time. Initialise the
+   * 'zero' array now but leave the sum arrays because these will be reset in doCalculateWindow. */
+  gint32 *zero = (gint32*)handleAlloc(&handle, pepQSeqLen * sizeof(gint32));
+  gint32 *sum1 = (gint32*)handleAlloc(&handle, pepQSeqLen * sizeof(gint32));
+  gint32 *sum2 = (gint32*)handleAlloc(&handle, pepQSeqLen * sizeof(gint32));
+
+  int idx = 0;
+  for (idx = 0; idx < pepQSeqLen; ++idx) 
+    {
+      zero[idx] = 0;
+    }
+
+  if (dc->blastMode == BLXMODE_BLASTX)
+    {
+      /* Protein -> Nucleotide matches. Calculate the result for each reqding frame of the
+       * reference sequence, and use the overall max values. */
+      int frame = 0;
+      for ( ; frame < dc->numFrames; ++frame)
+        {
+          doCalculateImage(BLXSTRAND_FORWARD, 1, 0, frame,
+                           dwc, properties, pepQSeqLen, pepQSeqOffset, slen, qlen, vecLen, win2,
+                           scoreVec, sIndex, sum1, sum2, zero);
+
+        }
+    }
+  else if (dc->blastMode == BLXMODE_BLASTP) 
+    {
+      /* Protein -> Protein matches. Straightforward comparison of the two sequences. */
+      doCalculateImage(BLXSTRAND_FORWARD, 1, 0, 0,
+                       dwc, properties, pepQSeqLen, pepQSeqOffset, slen, qlen, vecLen, win2,
+                       scoreVec, sIndex, sum1, sum2, zero);
+    }
+  else if (dc->blastMode == BLXMODE_BLASTN)
+    {
+      /* Nucleotide -> Nucleotide matches. Calculate the result for each strand of the reference
+       * sequence, and use the overall max values. */
+      
+      if (!dc->crickOnly)
+        {
+          doCalculateImage(BLXSTRAND_FORWARD, 1, 0, 0,
+                          dwc, properties, pepQSeqLen, pepQSeqOffset, slen, qlen, vecLen, win2,
+                          scoreVec, sIndex, sum1, sum2, zero);
+        }
+
+      if (!dc->watsonOnly)
+        {
+          doCalculateImage(BLXSTRAND_REVERSE, -1, slen - 1, 0,
+                           dwc, properties, pepQSeqLen, pepQSeqOffset, slen, qlen, vecLen, win2,
+                           scoreVec, sIndex, sum1, sum2, zero);
+        }
+    }
+
+  if (dwc->selfComp && dc->displayMirror) 
+    {
+      /* Copy mirror image */
+      
+      int dotposCopy;
+      
+      for (sIdx = 0; sIdx < properties->imageHeight; ++sIdx) 
+        { 
+          for (qIdx = 0; qIdx < sIdx ; ++qIdx) 
+            {
+              dotpos = properties->imageWidth * sIdx + qIdx;
+              dotposCopy = properties->imageWidth * qIdx + sIdx;
+
+              const int pixelmapLen = properties->imageWidth * properties->imageHeight;
+
+              if (dotpos < 0 || dotpos >= pixelmapLen)
+                g_critical ( "Source pixel out of bounds (%d) in mirrorCopy: %d\n",
+                            pixelmapLen-1, dotpos);
+              if (dotposCopy < 0 || dotposCopy >= pixelmapLen)
+                g_critical ( "Destination pixel out of bounds (%d) in mirrorCopy: %d\n",
+                            pixelmapLen-1, dotposCopy);
+              properties->pixelmap[dotposCopy] = properties->pixelmap[dotpos];
+            }
+        }
+    }
+  
+  handleDestroy(&handle);
+  
+  DEBUG_EXIT("calculateImage returning ");
+}
+
+
+void loadPlot(GtkWidget *dotplot, const char *loadFileName, GError **error)
+{
+  DotplotProperties *properties = dotplotGetProperties(dotplot);
+  DotterWindowContext *dwc = properties->dotterWinCtx;
+  DotterContext *dc = properties->dotterWinCtx->dotterCtx;
+  
+  /* Open the file */
+  FILE *loadFile = fopen (loadFileName, "rb");
+  
+  if (!loadFile)
+    {
+      g_set_error(error, DOTTER_ERROR, DOTTER_ERROR_OPENING_FILE, "Could not open file '%s'", loadFileName);
+      return;
+    }
+
+  /* 'dotstart' is the sum of how many bytes there are before the dot-plot data starts. We remember this
+   * value so that we can look ahead to check the length of the file with fseek but still know where
+   * to jump back to in the file to start reading the dot-plot data. */
+  int dotstart = 0;
+
+  /* Read in the format, zoom, and image size */
+  unsigned char format;
+  gboolean ok = fread(&format, 1, sizeof(unsigned char), loadFile) == sizeof(unsigned char);
+  dotstart += sizeof(unsigned char);
+
+  if (format != 1 && format != 2 && format != 3) 
+    {
+      g_set_error(error, DOTTER_ERROR, DOTTER_ERROR_READING_FILE, "Unknown dotter file format version: %d", format);
+      return;
+    }
+  
+  /* Read in the zoom factor (an int in formats 1 and 2, or gdouble in later formats) */
+  if (format == 1 || format == 2)
+    {
+      ok &= fread(&dwc->zoomFactor, 1, sizeof(gint32), loadFile) == sizeof(gint32);
+      dotstart += sizeof(gint32);
+    }
+  else
+    {
+      ok &= fread(&dwc->zoomFactor, 1, sizeof(gdouble), loadFile) == sizeof(gdouble);
+      dotstart += sizeof(gdouble);
+    }
+  
+  /* Read in the image size */
+  ok &= fread(&properties->imageWidth, 1, sizeof(gint32), loadFile) == sizeof(gint32);
+  dotstart += sizeof(gint32);
+
+  ok &= fread(&properties->imageHeight, 1, sizeof(gint32), loadFile) == sizeof(gint32);
+  dotstart += sizeof(gint32);
+  
+  if (!ok)
+    {
+      g_set_error(error, DOTTER_ERROR, DOTTER_ERROR_READING_FILE, "Error reading file '%s'", loadFileName);
+      return;
+    }
+  
+#ifdef ALPHA
+  reversebytes(&dwc->zoomFactor, sizeof(gdouble));
+  reversebytes(&properties->imageWidth, sizeof(gint32));
+  reversebytes(&properties->imageHeight, sizeof(gint32));
+#endif
+  
+  if (format == 1) 
+    {
+      /* Don't actually know these variables for sure - guess the most common */
+      properties->pixelFac = 50;
+      properties->slidingWinSize = 25;
+    }
+  else 
+    {
+      ok &= fread(&properties->pixelFac, 1, sizeof(gint32), loadFile) == sizeof(gint32);
+      dotstart += sizeof(gint32);
+
+      ok &= fread(&properties->slidingWinSize, 1, sizeof(gint32), loadFile) == sizeof(gint32);
+      dotstart += sizeof(gint32);
+
+      /* Read in the matrix name (read the length of the name first) */
+      gint32 matrixNameLen;
+      ok &= fread(&matrixNameLen, 1, sizeof(gint32), loadFile) == sizeof(gint32);
+      dotstart += sizeof(gint32);
+
+#ifdef ALPHA
+      if (ok)
+        {
+          reversebytes(&properties->pixelFac, sizeof(gint32));
+          reversebytes(&properties->slidingWinSize, sizeof(gint32));
+          reversebytes(&matrixNameLen, sizeof(gint32));
+        }
+#endif
+
+      ok &= matrixNameLen <= MAX_MATRIX_NAME_LENGTH;
+      char matrixName[MAX_MATRIX_NAME_LENGTH + 1];
+
+      ok &= fread(&matrixName, sizeof(char), matrixNameLen, loadFile) == matrixNameLen * sizeof(char);
+      dotstart += sizeof(char) * matrixNameLen;
+
+      if (ok)
+        {
+          /* Terminate the matrix name and copy it into the context. */
+          matrixName[matrixNameLen] = 0;
+          g_free(dc->matrixName);
+          dc->matrixName = g_strdup(matrixName);
+      
+          /* Read in the matrix data */
+          int i = 0;
+          int j = 0;
+          
+          for (i = 0; i < 24; i++)
+            {
+              for (j = 0; j < 24; j++) 
+                {
+                  gint32 matrixVal;
+                  ok &= fread(&matrixVal, 1, sizeof(gint32), loadFile) == sizeof(gint32); 
+                  dotstart += sizeof(gint32);
+#ifdef ALPHA
+                  reversebytes(&matrixVal, sizeof(gint32));
+#endif
+                  dc->matrix[i][j] = matrixVal;
+                }
+            }
+        }
+    }
+  
+  if (!ok)
+    {
+      g_set_error(error, DOTTER_ERROR, DOTTER_ERROR_READING_FILE, "Error reading file '%s'", loadFileName);
+      return;
+    }
+  
+  fseek(loadFile, 0, SEEK_END);
+  int n = ftell(loadFile);
+
+  const int pixelmapLen = properties->imageHeight*properties->imageWidth;
+
+  if (n - dotstart != pixelmapLen)
+    {
+      g_set_error(error, DOTTER_ERROR, DOTTER_ERROR_READING_FILE, "Wrong number of pixels in %s: %d. Expected %d * %d = %d\n", 
+            loadFileName, n - dotstart, properties->imageWidth, properties->imageHeight, pixelmapLen);
+      return;
+    }
+  
+  /* Allocate memory for the pixmap */
+  initPixmap(&properties->pixelmap, properties->imageWidth, properties->imageHeight);
+  
+  fseek(loadFile, dotstart, SEEK_SET);
+  
+  int i = 0;
+  for (i = 0; i < pixelmapLen; i++)
+    {
+      unsigned char pixelVal;
+      ok &= fread(&pixelVal, 1, sizeof(unsigned char), loadFile) == sizeof(unsigned char); 
+#ifdef ALPHA
+      reversebytes(&pixelVal, sizeof(unsigned char));
+#endif
+      properties->pixelmap[i] = pixelVal;
+    }
+  
+  
+//  if ((n = fread(properties->pixelmap, sizeof(unsigned char), pixelmapLen, loadFile)) != pixelmapLen)
+//    {
+//      g_set_error(error, DOTTER_ERROR, DOTTER_ERROR_READING_FILE, "Read wrong number of pixels from %s: %d. Expected %d * %-d = %d\n", 
+//              loadFileName, n, properties->imageWidth, properties->imageHeight, pixelmapLen);
+//      return;
+//    }
+  
+  fclose(loadFile);
+
+  g_message("Dotplot file '%s' was loaded successfully.\n", loadFileName);
+
+  if (format == 1) 
+    {
+      g_message("Old dotplot file format '1' was used, so the windowsize and pixel factor are estimates.\n");
+    }
+
+  fflush(stdout);
+
+  /* Create the image */
+  if (properties->image)
+    gdk_image_unref(properties->image);
+
+  properties->image = createImage(properties);
+}
+
+
+/* savePlot writes a 1 byte unsigned-char at the start of the file to indicate the file format. 
+ * It then writes various parameters (as determined by that format) and then the dot-matrix itself.
+ *
+ * The format char is one of the following:
+ *   '1'  The original format, with the following fields: format (uchar), zoom (int), image width (int), image height (int) 
+ *   '2'  In addition to the format '1' fields: pixelFac (int), win size (int), matrix name len (int), matrix name (MNlen chars) 
+ *   '3'  as format 2 but changed zoom from int to gdouble 
+ *
+ * Note that formats 1 and 2 used to assume that the 'int' date type was always 4 bytes. We now make
+ * sure this is the case by using the gint32 data type, which is guaranteed to be 32 bits (4 bytes)
+ * on any system.  The standard for chars/uchars (1 byte) and doubles/gdoubles (8 bytes) should be 
+ * consistent for all systems so we don't need to worry about those.
+ */
+void savePlot(GtkWidget *dotplot, DotplotProperties *propertiesIn, const char *saveFileName, GError **error)
+{
+  /* We may be passed the properties as null if we are given the dotplot. */
+  DotplotProperties *properties = propertiesIn ? propertiesIn : dotplotGetProperties(dotplot);
+  
+  g_assert(properties);
+  
+  DotterWindowContext *dwc = properties->dotterWinCtx;
+  DotterContext *dc = properties->dotterWinCtx->dotterCtx;
+
+  /* This is the latest file format number. Increment this if you change anything that will break
+   * compatibility with the current format. */
+  unsigned char format = 3;
+
+  gboolean batch = (saveFileName ? TRUE : FALSE); /* whether this is part of a batch process */
+
+  
+  /* Open the file. Use the given file name (i.e. if we're in batch mode) or ask the user to 
+   * select a file. */
+  static const char *fileName = NULL;
+
+  if (batch)
+    fileName = saveFileName;
+  else if (dotplot)
+    fileName = getSaveFileName(dotplot, fileName, NULL, ".dotter", "Save dot-plot in dotter format");
+  
+  g_message("Saving dot-matrix to '%s'.\n", fileName);
+
+  FILE *saveFile = NULL;
+  
+  if (fileName) 
+    {
+      saveFile = fopen (fileName, "wb");
+      
+      if (!saveFile)
+        {
+          g_set_error(error, DOTTER_ERROR, DOTTER_ERROR_OPENING_FILE, "Failed to open file '%s'.\n", fileName);
+          return;
+        }
+    }
+  else
+    {
+      g_set_error(error, DOTTER_ERROR, DOTTER_ERROR_OPENING_FILE, "No file name specified.\n");
+      return;
+    }
+  
+  /* Get the length of the matrix name */
+  const gint32 MNlen = strlen(dc->matrixName);
+  gint32 MNlenSave = MNlen;
+  
+#ifdef ALPHA
+  reversebytes(&dwc->zoomFactor, sizeof(gdouble));
+  reversebytes(&properties->imageWidth, sizeof(gint32));
+  reversebytes(&properties->imageHeight, sizeof(gint32));
+  reversebytes(&pixelFac, sizeof(gint32));
+  reversebytes(&slidingWinSize, sizeof(gint32));
+  reversebytes(&MNlenSave, sizeof(gint32));
+#endif
+  
+  gboolean ok = fwrite(&format, 1, sizeof(unsigned char), saveFile) == sizeof(unsigned char);
+  ok &= fwrite(&dwc->zoomFactor, 1, sizeof(gdouble), saveFile) == sizeof(gdouble);
+  ok &= fwrite(&properties->imageWidth, 1, sizeof(gint32), saveFile) == sizeof(gint32);
+  ok &= fwrite(&properties->imageHeight, 1, sizeof(gint32), saveFile) == sizeof(gint32);
+  ok &= fwrite(&properties->pixelFac,  1, sizeof(gint32), saveFile) == sizeof(gint32); /* New feature of format 2  */
+  ok &= fwrite(&properties->slidingWinSize, 1, sizeof(gint32), saveFile) == sizeof(gint32); /* New feature of format 2  */
+  ok &= fwrite(&MNlenSave, 1, sizeof(gint32), saveFile) == sizeof(gint32); /* New feature of format 2  */
+  ok &= fwrite(dc->matrixName, sizeof(char), MNlen, saveFile) == sizeof(char) * MNlen; /* New feature of format 2  */
+  
+  
+  /* Loop through the matrix and write the values to the file */
+  int i = 0;
+  int j = 0;
+  gint32 mtx = 0;
+  
+  for (i = 0; i < 24; i++)
+    {
+      for (j = 0; j < 24; j++)
+        {
+          mtx = dc->matrix[i][j];
+#ifdef ALPHA
+          reversebytes(&mtx, sizeof(gint32));
+#endif
+          ok &= fwrite(&mtx, 1, sizeof(gint32), saveFile) == sizeof(gint32); /* New feature of format 2  */
+        }
+    }
+  
+#ifdef ALPHA
+  reversebytes(&dwc->zoomFactor, sizeof(gdouble));
+  reversebytes(&properties->imageWidth, sizeof(gint32));
+  reversebytes(&properties->imageHeight, sizeof(gint32));
+  reversebytes(&pixelFac, sizeof(gint32));
+  reversebytes(&slidingWinSize, sizeof(gint32));
+#endif
+  
+  
+  /* Loop through the dotplot values and write them to file */
+  const int imgSize = properties->imageWidth * properties->imageHeight;
+  
+  for (i = 0; i < imgSize; i++)
+    {
+      unsigned char pixelVal = properties->pixelmap[i];
+#ifdef ALPHA
+      reversebytes(&pixelVal, sizeof(unsigned char));
+#endif
+      ok &= fwrite(&pixelVal, 1, sizeof(unsigned char), saveFile) == sizeof(unsigned char); 
+    }
+  
+  
+//  ok &= fwrite(properties->pixelmap, sizeof(unsigned char), imgSize, saveFile) == imgSize;
+  
+  if (!ok)
+    {
+      g_set_error(error, DOTTER_ERROR, DOTTER_ERROR_SAVING_FILE, "Error writing data to file '%s'.\n", fileName);
+    }
+  
+  fclose(saveFile);
+  saveFile = 0;
+}
+
+
+/* Export the plot to a graphical format (currently only PDF is supported by GTK).
+ * the drawable can be NULL. */
+void exportPlot(GtkWidget *dotplot, 
+                GtkWindow *window,
+                const char *exportFileName,
+                GError **error)
+{
+  gboolean batch = (exportFileName ? TRUE : FALSE); /* whether this is part of a batch process */
+  
+  /* Open the file. Use the given file name (i.e. if we're in batch mode) or ask the user to 
+   * select a file. */
+  static const char *fileName = NULL;
+
+  if (batch)
+    fileName = exportFileName;
+  else if (dotplot)
+    fileName = getSaveFileName(dotplot, fileName, NULL, ".pdf", "Export dot-plot");
+  
+  GtkPrintSettings *printSettings = gtk_print_settings_new();
+  GtkPageSetup *pageSetup = gtk_page_setup_new();
+  
+  gtk_page_setup_set_orientation(pageSetup, GTK_PAGE_ORIENTATION_LANDSCAPE);
+  gtk_print_settings_set_orientation(printSettings, GTK_PAGE_ORIENTATION_LANDSCAPE);
+  gtk_print_settings_set_quality(printSettings, GTK_PRINT_QUALITY_HIGH);
+  gtk_print_settings_set_resolution(printSettings, DEFAULT_PRINT_RESOLUTION);
+
+  blxPrintWidget(dotplot, NULL, window, &printSettings, &pageSetup, fileName, TRUE, PRINT_FIT_BOTH);
+}
+
+
+/* Clear previous image and pixmaps and re-create them */
+static void recalculateDotplotBorders(GtkWidget *dotplot, DotplotProperties *properties)
+{
+  DEBUG_ENTER("recalculateDotplotBorders");
+
+  /* Clear any previous image and pixmaps */
+  clearPixmaps(properties);
+
+  /* Recalculate the image size */
+  properties->imageWidth = getImageDimension(properties, TRUE);
+  properties->imageHeight = getImageDimension(properties, FALSE);
+  
+  DEBUG_OUT("Set image w=%d, h=%d\n", properties->imageWidth, properties->imageHeight);
+
+  /* Create the image */
+  if (properties->image)
+    gdk_image_unref(properties->image);
+    
+  properties->image = createImage(properties);
+
+  /* Create the new pixmap */
+  if (properties->hspMode == DOTTER_HSPS_GREYSCALE)
+    {
+      initPixmap(&properties->hspPixmap, properties->imageWidth, properties->imageHeight);
+      transformGreyRampImage(properties->image, properties->hspPixmap, properties);
+    }
+  else if (properties->pixelmapOn)
+    {
+      initPixmap(&properties->pixelmap, properties->imageWidth, properties->imageHeight);
+      calculateImage(properties);
+      transformGreyRampImage(properties->image, properties->pixelmap, properties);
+    }
+  
+  calculateDotplotBorders(dotplot, properties);
+  
+  DEBUG_EXIT("recalculateDotplotBorders");
+}
+
+
+static void findScaleUnit (gdouble cutoff, int *u, int *sub)
+{
+  gdouble unit = *u ;
+  gdouble subunit = *u ;
+  
+  if (cutoff < 0)
+    cutoff = -cutoff ;
+  
+  while (unit < cutoff)
+    { unit *= 2 ;
+      subunit *= 5 ;
+      if (unit >= cutoff)
+	break ;
+      unit *= 2.5000001 ;	/* safe rounding */
+      if (unit >= cutoff)
+	break ;
+      unit *= 2 ;
+      subunit *= 2 ;
+    }
+  subunit /= 10 ;
+  if (subunit > *sub)
+    *sub = roundNearest(subunit) ;
+  *u = roundNearest(unit) ;
+}
+
+
+/* Note [Scale Labels] -- gb10
+ * 
+ * We use GtkLabel child widgets to draw the scale labels on the dotplot.
+ * Originally the labels were drawn directly on the dotplot drawing area
+ * using pango/cairo. However, there were some bugs with this where some
+ * of the labels were sometimes not getting drawn, and sometimes dotter 
+ * would crash (with the crash happening in the pango or cairo function 
+ * that was drawing the text).
+ *
+ * I could not find the cause for these bugs so I have used another
+ * approach using GtkLabel widgets to draw the labels instead. This 
+ * appears to fix these problems.
+ *
+ * Note that we create the labels outside of the expose function
+ * and add them to an array so that we can keep track of them (we
+ * don't want to create loads of new labels every time we redraw).
+ * However, the text and position of the labels is set in the expose
+ * function, because this is where the scale markers are drawn, which 
+ * defines the position for the labels. We also don't know the exact
+ * font (and hence text size) until the widgets are realised, and again
+ * this affects the position of the labels, so it's easiest to do it 
+ * all in the expose function.
+ * 
+ */
+
+/* Create the label widgets for the scale. See note [Scale Labels]
+ * for an explanation about why we use label widgets rather than
+ * drawing the labels using pango. */
+static void createScaleLabels(GtkWidget *dotplot,
+                              DotplotScaleProperties *scale)
+{
+  /* Loop through each major tickmark and create a label for it. Store
+   * the list of labels. The text and position will be set when we draw
+   * the scale markers, so for now we just need to make sure there are
+   * enough labels in the list. */
+  if (!scale->labels)
+    {
+      scale->labels = g_array_sized_new(FALSE, FALSE, sizeof(GtkWidget*), scale->numMarks);
+    }
+
+  /* If we don't have enough labels, create more now. */
+  int i = scale->labels->len;
+  for ( ; i < scale->numMarks; ++i)
+    {
+      GtkWidget *eventBox = gtk_event_box_new();
+      GtkWidget *label = gtk_label_new(NULL);
+      
+      gtk_container_add(GTK_CONTAINER(eventBox), label);
+      gtk_layout_put(GTK_LAYOUT(dotplot), eventBox, 0, 0);
+      
+      g_array_append_val(scale->labels, eventBox);
+    }
+
+  /* If we have too many labels, hide the extra ones. (Note that 
+   * drawTickmarkLabels will take care of re-showing any that are
+   * required later.) */
+  i = scale->numMarks;
+  for ( ; i < (int)scale->labels->len; ++i)
+    {
+      GtkWidget *eventBox = GTK_WIDGET(g_array_index(scale->labels, GtkWidget*, i));
+      gtk_widget_hide(eventBox);
+    }
+
+}
+
+
+/* This calculates the properties for the axis scale such as how many
+* tickmarks to draw, the range of coordinates to show etc. */
+static void calculateScaleProperties(GtkWidget *dotplot,
+                                     DotplotProperties *properties,
+                                     const gboolean horizontal)
+{
+  DotterWindowContext *dwc = properties->dotterWinCtx;
+  DotterContext *dc = dwc->dotterCtx;
+
+  const gdouble scaleFactor = getScaleFactor(properties, horizontal);
+  const gboolean reversedScale = ((horizontal && dc->hozScaleRev) || (!horizontal && dc->vertScaleRev));
+
+  DotplotScaleProperties *scale = horizontal ? &properties->hozScale : &properties->vertScale;
+  const IntRange* const displayRange = horizontal ? &dwc->refSeqRange : &dwc->matchSeqRange;
+
+  scale->basesPerMark = 1;
+  scale->basesPerSubmark = 1;
+  gdouble cutoff = horizontal ? PIXELS_PER_MARK_X : PIXELS_PER_MARK_Y;
+  cutoff *= scaleFactor;
+  
+  findScaleUnit(cutoff, &scale->basesPerMark, &scale->basesPerSubmark);
+  
+  /* Round up the start coord to find the coord and position of the first submark */
+  scale->startCoord = UNSET_INT;
+  scale->endCoord = UNSET_INT;
+  scale->firstSubmarkCoord = UNSET_INT; 
+  int firstMarkCoord = UNSET_INT;
+  
+  if (reversedScale)
+    {
+      /* Horizontal scale is reversed. 	Round the max coord down to the nearest basesPerSubmark */
+      scale->startCoord = displayRange->max();
+      scale->endCoord = displayRange->min();
+      scale->firstSubmarkCoord = (int)((double)scale->startCoord / (double)scale->basesPerSubmark) * scale->basesPerSubmark;
+      firstMarkCoord = (int)((double)scale->startCoord / (double)scale->basesPerMark) * scale->basesPerMark;
+    }
+  else
+    {
+      /* Round the min coord up to the nearest basesPerSubmark */
+      scale->startCoord = displayRange->min();
+      scale->endCoord = displayRange->max();
+      scale->firstSubmarkCoord = ceil((double)scale->startCoord / (double)scale->basesPerSubmark) * scale->basesPerSubmark;
+      firstMarkCoord = ceil((double)scale->startCoord / (double)scale->basesPerMark) * scale->basesPerMark;
+    }
+
+  /* find the leftmost/topmost border for the coord that is varying. For the horizontal
+   * scale, the x coord is varying, for the vertical scale the y coord */
+  const int variableBorder = horizontal ? properties->plotRect.x : properties->plotRect.y;
+
+  scale->firstSubmarkPos = variableBorder + abs(scale->firstSubmarkCoord - scale->startCoord) / scaleFactor;
+
+  scale->numMarks = (int)((gdouble)(abs(scale->endCoord - firstMarkCoord) + 1) / scale->basesPerMark) + 1;
+  scale->numSubmarks = (int)((gdouble)(abs(scale->endCoord - scale->firstSubmarkCoord) + 1) / scale->basesPerSubmark) + 1;
+
+  createScaleLabels(dotplot, scale);
+}
+
+
+/* Utility to get max breakpoint label size */
+int getMaxBreakpointLabelSize(GtkWidget *dotplot, DotterContext *dc)
+{
+  int max_len = 0;
+
+  cairo_surface_t *surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 500, 500);
+  cairo_t *cr = cairo_create (surface);  
+
+  PangoLayout *layout = pango_cairo_create_layout(cr);
+  pango_layout_set_font_description(layout, dotplot->style->font_desc);
+
+  for (MSP *msp = dc->mspList; msp; msp = msp->next)
+    {
+      if (msp->type == BLXMSP_FS_SEG && msp->desc)
+        {
+          int len = 0;
+          pango_layout_set_text(layout, msp->desc, -1);
+          pango_layout_get_pixel_size(layout, &len, NULL);
+
+          if (len > max_len)
+            max_len = len;
+        }
+    }
+
+  cairo_destroy(cr);
+  cairo_surface_destroy(surface);
+
+  return max_len;
+}
+
+
+/* Utility to get the total height required for the dotplot */
+int getDotplotHeight(GtkWidget *dotplot, DotplotProperties *properties)
+{
+  /* Make sure the plot is tall enough to fit the vertical label */
+  cairo_surface_t *surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 500, 500);
+  cairo_t *cr = cairo_create (surface);  
+
+  PangoLayout *layout = pango_cairo_create_layout(cr);
+  pango_layout_set_text(layout, properties->dotterWinCtx->dotterCtx->matchSeqName, -1);
+  pango_layout_set_font_description(layout, dotplot->style->font_desc);
+
+  /* use the text WIDTH as the height, because it will be rotated vertically */
+  int height = 0;
+  pango_layout_get_pixel_size(layout, &height, NULL);
+
+  g_object_unref(layout);
+  cairo_destroy(cr);
+  cairo_surface_destroy(surface);
+      
+  const int dotplotHeight = max(height, properties->plotRect.height);
+
+  /* The basic height is the height of the dotplot plus padding and scale */
+  int result = properties->plotRect.y + 
+               dotplotHeight +
+               DEFAULT_Y_PADDING + 
+               SCALE_LINE_WIDTH;
+    
+  if (properties->breaklinesOn && properties->hozLabelsOn)
+    {
+      /* Add space for breakline labels. They are rotated 90 degrees so we need to 
+       * add enough height for the full label length */
+      const int labelSize = getMaxBreakpointLabelSize(dotplot, properties->dotterWinCtx->dotterCtx) ;
+      result += labelSize + ANNOTATION_LABEL_PADDING;
+    }      
+
+  return result;
+}
+
+/* Utility to get the total width of the dotplot */
+int getDotplotWidth(GtkWidget *dotplot, DotplotProperties *properties)
+{
+  int result = properties->plotRect.x +
+               properties->plotRect.width + 
+               DEFAULT_X_PADDING + 
+               SCALE_LINE_WIDTH;
+  
+  if (properties->breaklinesOn && properties->vertLabelsOn)
+    {
+      /* Add space for breakline labels */
+      const int labelSize = getMaxBreakpointLabelSize(dotplot, properties->dotterWinCtx->dotterCtx) ;
+      result += labelSize + ANNOTATION_LABEL_PADDING;
+    }
+  
+  return result;
+}
+
+
+static void calculateDotplotBorders(GtkWidget *dotplot, DotplotProperties *properties)
+{
+  DEBUG_ENTER("calculateDotplotBorders");
+
+  DotterContext *dc = properties->dotterWinCtx->dotterCtx;
+
+  properties->plotRect.x = DEFAULT_X_PADDING + dc->scaleWidth + dc->charHeight;
+  properties->plotRect.y = DEFAULT_Y_PADDING + dc->scaleHeight + dc->charHeight;
+  properties->plotRect.width = properties->imageWidth;
+  properties->plotRect.height = properties->imageHeight;
+  
+  const int totalWidth = getDotplotWidth(dotplot, properties);
+  const int totalHeight = getDotplotHeight(dotplot, properties);
+  
+  if (dotplot)
+    {
+      gtk_widget_set_size_request(dotplot, totalWidth, totalHeight);
+
+      widgetClearCachedDrawable(dotplot, NULL);
+      gtk_widget_queue_draw(dotplot);
+    }
+  
+  calculateScaleProperties(dotplot, properties, TRUE);
+  calculateScaleProperties(dotplot, properties, FALSE);
+
+  DEBUG_EXIT("calculateDotplotBorders returning ");
+}
+
+
+/***********************************************************
+ *                        Drawing                          *
+ ***********************************************************/
+
+/* Refresh cached drawables */
+void refreshDotplot(GtkWidget *dotplot)
+{
+  DotplotProperties *properties = dotplotGetProperties(dotplot);
+  gtk_widget_queue_draw(dotplot);
+  gtk_widget_queue_draw(properties->hozExons1);
+  gtk_widget_queue_draw(properties->hozExons2);
+  gtk_widget_queue_draw(properties->vertExons1);
+  gtk_widget_queue_draw(properties->vertExons2);
+}
+
+
+/* Clear all cached drawables and redraw everything */
+void redrawDotplot(GtkWidget *dotplot)
+{
+  DotplotProperties *properties = dotplotGetProperties(dotplot);
+  widgetClearCachedDrawable(properties->hozExons1, NULL);
+  widgetClearCachedDrawable(properties->hozExons2, NULL);
+  widgetClearCachedDrawable(properties->vertExons1, NULL);
+  widgetClearCachedDrawable(properties->vertExons2, NULL);
+
+  callFuncOnAllChildWidgets(dotplot, (gpointer)widgetClearCachedDrawable);
+
+  gtk_widget_queue_draw(dotplot);
+}
+
+
+/* Recalculate and redraw everything */
+void recalcDotplot(GtkWidget *dotplot)
+{
+  DotplotProperties *properties = dotplotGetProperties(dotplot);
+  
+  recalculateDotplotBorders(dotplot, properties);
+  
+  calculateDotterExonViewBorders(properties->hozExons1, properties->imageWidth, properties->imageHeight);
+  calculateDotterExonViewBorders(properties->hozExons2, properties->imageWidth, properties->imageHeight);
+  calculateDotterExonViewBorders(properties->vertExons1, properties->imageWidth, properties->imageHeight);
+  calculateDotterExonViewBorders(properties->vertExons2, properties->imageWidth, properties->imageHeight);
+  
+  redrawDotplot(dotplot);
+}
+
+
+/* Draws the main dotplot components (does not include transient components
+ * like the crosshair or rubberband). */
+static void drawDotplot(GtkWidget *dotplot, GdkDrawable *drawable)
+{
+  drawImage(dotplot, drawable);
+  drawDotterScale(dotplot, drawable);
+  drawBreaklines(dotplot, drawable);
+  drawHsps(dotplot, drawable);
+}
+
+
+/* This prepares the dotplot for printing. It draws the crosshair onto the
+ * cached pixmap, because it is this pixmap that will be used in the print.
+ * (Normally the crosshair does not get drawn to the pixmap - it just gets 
+ * drawn to the screen by the expose function). */
+void dotplotPrepareForPrinting(GtkWidget *dotplot)
+{
+  GdkDrawable *drawable = widgetGetDrawable(dotplot);
+  
+  if (!drawable)
+    {
+      drawable = createBlankPixmap(dotplot);
+      drawDotplot(dotplot, drawable);
+    }
+  
+  if (drawable)
+    {
+      dotplotDrawCrosshair(dotplot, drawable);
+    }
+  
+  /* Do the same for each exon view */
+  DotplotProperties *properties = dotplotGetProperties(dotplot);
+  exonViewPrepareForPrinting(properties->hozExons1);
+  exonViewPrepareForPrinting(properties->hozExons2);
+  exonViewPrepareForPrinting(properties->vertExons1);
+  exonViewPrepareForPrinting(properties->vertExons2);
+}
+
+
+/* Utility used by drawScaleMarkers to draw grid lines */
+static void drawGridline(GdkDrawable *drawable, DotplotProperties *properties, const int xStart, const int yStart, const gboolean horizontal)
+{
+  if (properties->gridlinesOn)
+    {
+      GdkGC *gc = gdk_gc_new(drawable);
+
+      DotterWindowContext *dwc = properties->dotterWinCtx;
+      DotterContext *dc = properties->dotterWinCtx->dotterCtx;
+      
+      GdkColor *gridColor = getGdkColor(DOTCOLOR_GRID, dc->defaultColors, FALSE, dwc->usePrintColors);
+      gdk_gc_set_foreground(gc, gridColor);
+      
+      int xEnd = horizontal ? xStart : xStart + properties->plotRect.width;
+      int yEnd = horizontal ? yStart + properties->plotRect.height : yStart;
+    
+      gdk_draw_line(drawable, gc, xStart, yStart, xEnd, yEnd);
+      
+      g_object_unref(gc);
+    }  
+}
+
+
+/* Utility used by drawScaleMarkers to draw the labels for the tick marks */
+static void drawTickmarkLabel(GtkWidget *dotplot, 
+                              DotterContext *dc, 
+                              GdkDrawable *drawable,
+                              GtkWidget *labelParent,
+                              const int coordIn,
+                              const int xIn,
+                              const int yIn,
+                              const GdkRectangle* const rect,
+                              const gboolean horizontal)
+{
+  int coord = getDisplayCoord(coordIn, dc, horizontal);
+  char *displayText = convertIntToString(coord);
+
+  cairo_t *cr = gdk_cairo_create(drawable);
+  PangoLayout *layout = pango_cairo_create_layout(cr);
+  pango_layout_set_text(layout, displayText, -1);
+
+  /* We'll centre the text at half the text width for the horizontal 
+   * axis, or half the height for the vertical. */
+  int width = UNSET_INT, height = UNSET_INT;
+  pango_layout_get_pixel_size(layout, &width, &height);
+
+  const int x = xIn - (horizontal ? (double)width / 2.0 : width);
+  const int y = yIn - (horizontal ? dc->charHeight : (double)dc->charHeight / 2.0);
+
+  /* We use label child items rather than drawing the text directly
+   * on the drawable: see note [Scale Labels] for an explanation.
+   * Update the text in the label and move it to the correct position.
+   * The label is in an event box so we need to get the child widget */
+  GtkLabel *label = GTK_LABEL(gtk_container_get_children(GTK_CONTAINER(labelParent))->data);
+  gtk_label_set_text(label, displayText);
+
+  gtk_widget_show_all(labelParent);
+  gtk_layout_move(GTK_LAYOUT(dotplot), labelParent, x, y);
+  
+  g_object_unref(layout);  
+  cairo_destroy(cr);
+  g_free(displayText);
+}
+
+
+static void drawScaleMarkers(GtkWidget *dotplot, 
+                             GdkDrawable *drawable, 
+                             GdkGC *gc, 
+                             const IntRange* const displayRange,
+                             DotplotProperties *properties,
+                             const gboolean horizontal)
+{
+  /* We scale down by the zoom factor, and also divide by the number 
+   * of frames so that one dot represents one peptide */
+  DotterContext *dc = properties->dotterWinCtx->dotterCtx;
+  DotplotScaleProperties *scale = horizontal ? &properties->hozScale : &properties->vertScale;
+
+  const gdouble scaleFactor = getScaleFactor(properties, horizontal);
+  const gboolean reversedScale = ((horizontal && dc->hozScaleRev) || (!horizontal && dc->vertScaleRev));
+  const int direction = reversedScale ? -1 : 1;
+    
+  const int staticBorder = horizontal 
+    ? properties->plotRect.y - SCALE_LINE_WIDTH
+    : properties->plotRect.x - SCALE_LINE_WIDTH;
+
+  int i = 0;
+  int majorTickIdx = 0;
+
+  for ( ; i < scale->numSubmarks; ++i)
+    {
+      const int basesFromFirstMark = i * scale->basesPerSubmark;
+      const int coord = scale->firstSubmarkCoord + (direction * basesFromFirstMark);
+      const gboolean isMajorTick = (coord % scale->basesPerMark == 0);
+
+      const int currentPos = scale->firstSubmarkPos + (basesFromFirstMark / scaleFactor);
+      const int tickHeight = isMajorTick ? DEFAULT_MAJOR_TICK_HEIGHT : DEFAULT_MINOR_TICK_HEIGHT;
+      
+      /* Draw the marker line */
+      int x1 = horizontal ? currentPos : staticBorder - tickHeight;
+      int x2 = horizontal ? currentPos : staticBorder;
+      int y1 = horizontal ? staticBorder - tickHeight : currentPos;
+      int y2 = horizontal ? staticBorder : currentPos;
+
+      gdk_draw_line(drawable, gc, x1, y1, x2, y2);
+      
+      /* Draw a grid line, if applicable */
+      drawGridline(drawable, properties, x2, y2, horizontal);
+          
+      /* Draw a lable on major tick marks */
+      if (isMajorTick)
+        {
+          if (majorTickIdx < (int)scale->labels->len)
+            {
+              GtkWidget *label = g_array_index(scale->labels, GtkWidget*, majorTickIdx);
+              drawTickmarkLabel(dotplot, dc, drawable, label, coord, x1, y1, &properties->plotRect, horizontal);
+            }
+          
+          ++majorTickIdx;
+        }
+    }
+}
+
+
+static void drawLabel(GtkWidget *dotplot, GdkDrawable *drawable, GdkGC *gc)
+{
+  DotplotProperties *properties = dotplotGetProperties(dotplot);
+  DotterContext *dc = properties->dotterWinCtx->dotterCtx;
+  int textWidth = UNSET_INT;
+  int textHeight = UNSET_INT;
+
+  cairo_t *cr = gdk_cairo_create(drawable);
+  
+  PangoLayout *layout = pango_cairo_create_layout(cr);
+  pango_layout_set_font_description(layout, dotplot->style->font_desc);
+  pango_layout_set_text(layout, dc->refSeqName, -1);
+  pango_layout_get_pixel_size(layout, &textWidth, &textHeight);
+
+  int x = properties->plotRect.x + (properties->plotRect.width / 2) - (textWidth / 2);
+  int y = properties->plotRect.y - (dc->scaleHeight + dc->charHeight);
+
+  cairo_move_to (cr, x, y);
+  pango_cairo_show_layout(cr, layout);
+
+  g_object_unref(layout);
+
+  /* Vertical label */
+  layout = pango_cairo_create_layout(cr);
+  pango_layout_set_font_description(layout, dotplot->style->font_desc);
+  pango_layout_set_text(layout, dc->matchSeqName, -1);
+  pango_layout_get_pixel_size(layout, &textWidth, &textHeight);
+ 
+  x = properties->plotRect.x - (dc->scaleWidth + dc->charHeight);
+  y = properties->plotRect.y + (properties->plotRect.height / 2) + (textWidth / 2);
+  
+  cairo_move_to (cr, x, y);
+  cairo_rotate(cr, 270.0 * G_PI / 180.0);
+  pango_cairo_show_layout(cr, layout);
+
+  g_object_unref(layout);
+  cairo_destroy(cr);
+}
+
+
+/* Draw the outer rectangle of the dot plot, with a scale along the left and top */
+static void drawDotterScale(GtkWidget *dotplot, GdkDrawable *drawable)
+{
+  GdkGC *gc = gdk_gc_new(drawable);
+
+  DotplotProperties *properties = dotplotGetProperties(dotplot);
+  
+  /* Draw the outline rectangle of the dot plot */
+  gdk_gc_set_line_attributes(gc, SCALE_LINE_WIDTH, GDK_LINE_SOLID, GDK_CAP_BUTT, GDK_JOIN_MITER);
+  
+  gdk_draw_rectangle(drawable, gc, FALSE, 
+                     properties->plotRect.x - SCALE_LINE_WIDTH, properties->plotRect.y - SCALE_LINE_WIDTH, 
+                     properties->plotRect.width + SCALE_LINE_WIDTH, properties->plotRect.height + SCALE_LINE_WIDTH);
+
+  drawLabel(dotplot, drawable, gc);
+  
+  drawScaleMarkers(dotplot, drawable, gc, &properties->dotterWinCtx->refSeqRange, properties, TRUE);
+  drawScaleMarkers(dotplot, drawable, gc, &properties->dotterWinCtx->matchSeqRange, properties, FALSE);
+  
+  g_object_unref(gc);
+}
+
+
+/* Draw an individual breakline */
+static void drawBreakline(const MSP* const msp, GtkWidget *dotplot, DotplotProperties *properties, GdkDrawable *drawable)
+{
+  g_assert(msp && msp->type == BLXMSP_FS_SEG);
+  DotterContext *dc = properties->dotterWinCtx->dotterCtx;
+  DotterWindowContext *dwc = properties->dotterWinCtx;
+
+  /* The q range min and max should be the same coord */
+  if (msp->qRange.min() != msp->qRange.max())
+    g_warning("Breakline coords should be the same but min=%d and max=%d\n", msp->qRange.min(), msp->qRange.max());
+
+  /* See if this msp is the vertical or horizontal sequence. It could be both for a self comparison. 
+   * We check if the name matches the sequence name or the values @1 or @2 for hoz and vert resp. */
+  gboolean horizontal = (msp->qname && strcmp(msp->qname, dc->refSeqName) == 0);
+  gboolean vertical = (msp->qname && strcmp(msp->qname, dc->matchSeqName) == 0);
+  
+  vertical |= (msp->qname && strcmp(msp->qname, "@2") == 0);
+  
+  if(msp->qname && strcmp(msp->qname, "@1") == 0)
+    {
+      horizontal = TRUE;
+      if (dwc->selfComp)
+        vertical = TRUE;
+    }
+
+  /* Set the line color */
+  GdkGC *gc = gdk_gc_new(drawable);
+  gdk_gc_set_line_attributes(gc, SCALE_LINE_WIDTH, GDK_LINE_SOLID, GDK_CAP_BUTT, GDK_JOIN_MITER);
+  gdk_gc_set_foreground(gc, &msp->fsColor);
+
+  if (horizontal)
+    {
+      /* Find the x position of this coord and draw a vertical line here */
+      int sy = properties->plotRect.y;
+      int ey = properties->plotRect.y + properties->plotRect.height + ANNOTATION_LABEL_PADDING;
+    
+      int sx, ex; /* start/end coordinates [0..n] */
+      getMspScreenCoords(msp, properties, &sx, &ex, NULL, NULL);
+      gdk_draw_line(drawable, gc, sx, sy, ex, ey);
+    
+      /* Draw a label at the bottom (if labels enabled) */
+      if (properties->hozLabelsOn && msp->desc)
+	{
+          cairo_t *cr = gdk_cairo_create(drawable);
+          PangoLayout *layout = pango_cairo_create_layout(cr);
+          pango_layout_set_text(layout, msp->desc, -1);
+          pango_layout_set_font_description(layout, dotplot->style->font_desc);
+
+          cairo_move_to (cr, ex, ey);
+          cairo_rotate(cr, 1.5708); //rotate by 90 degrees
+          pango_cairo_show_layout(cr, layout);
+
+	  g_object_unref(layout);
+          cairo_destroy(cr);
+	}
+    }
+  
+  if (vertical)
+    {
+      /* Find the y position of this coord and draw a horizontal line here */
+      int sx = properties->plotRect.x;
+      int ex = properties->plotRect.x + properties->plotRect.width + ANNOTATION_LABEL_PADDING;
+
+      int sy, ey; /* start/end coordinates [0..n]. Note that breakline coords are always
+		   * stored in the q coords even for the vertical sequence. */
+      getMspScreenCoords(msp, properties, &sy, &ey, NULL, NULL);
+    
+      /* hack the coords because they've been based at the x coord. Really we should store them
+       * properly in the s range but for historic reasons they're in the q range. */
+      sy += properties->plotRect.y - properties->plotRect.x;
+      ey += properties->plotRect.y - properties->plotRect.x;
+    
+      gdk_draw_line(drawable, gc, sx, sy, ex, ey);
+    
+      /* Draw a label at the RHS (if labels enabled) */
+      if (properties->vertLabelsOn && msp->desc)
+	{
+          cairo_t *cr = gdk_cairo_create(drawable);
+          PangoLayout *layout = pango_cairo_create_layout(cr);
+          pango_layout_set_text(layout, msp->desc, -1);
+          pango_layout_set_font_description(layout, dotplot->style->font_desc);
+
+          cairo_move_to (cr, ex, ey);
+          pango_cairo_show_layout(cr, layout);
+
+	  g_object_unref(layout);
+          cairo_destroy(cr);
+	}
+    }
+
+  g_object_unref(gc);
+}
+
+
+/* If a sequence file contains multiple sequences, this draws breaklines between the segments.
+ * Only does anything if the 'draw breaklines' option is enabled. */
+static void drawBreaklines(GtkWidget *dotplot, GdkDrawable *drawable)
+{
+  DotplotProperties *properties = dotplotGetProperties(dotplot);
+  DotterWindowContext *dwc = properties->dotterWinCtx;
+  DotterContext *dc = dwc->dotterCtx;
+  
+  if (properties->breaklinesOn)
+    {
+      const MSP* msp = dc->mspList;
+    
+      for ( ; msp; msp = msp->next)
+	{
+	  if (msp->type == BLXMSP_FS_SEG)
+	    {
+	      drawBreakline(msp, dotplot, properties, drawable);
+	    }
+	}      
+    }  
+}
+
+
+/* Draw the crosshair that indicates the position of the currently-selected coords */
+static void dotplotDrawCrosshair(GtkWidget *dotplot, GdkDrawable *drawable)
+{
+  DotplotProperties *properties = dotplotGetProperties(dotplot);
+  
+  if (properties->crosshairOn)
+    {
+      GdkGC *gc = gdk_gc_new(drawable);
+
+      DotterWindowContext *dwc = properties->dotterWinCtx;
+      DotterContext *dc = dwc->dotterCtx;
+
+      /* Set the line color for the crosshair */
+      GdkColor *lineColor = getGdkColor(DOTCOLOR_CROSSHAIR, dc->defaultColors, FALSE, dwc->usePrintColors);
+      gdk_gc_set_foreground(gc, lineColor);
+      
+      int x = UNSET_INT, y = UNSET_INT;
+      getPosFromSelectedCoords(dotplot, &x, &y);
+
+      /* Draw the horizontal line (y position is at the match sequence coord position). x coords
+       * depend on whether it's across the whole widget or just the dot-plot rectangle */
+      int x1 = properties->crosshairFullscreen ? dc->scaleWidth: properties->plotRect.x;
+      int width = properties->crosshairFullscreen ? dotplot->allocation.width : properties->plotRect.width;
+      gdk_draw_line(drawable, gc, x1, y, x1 + width, y);
+
+      /* Draw the vertical line (x position is at the ref sequence coord position - inverted if the display is reversed) */
+      int y1 = properties->crosshairFullscreen ? dc->scaleHeight : properties->plotRect.y;
+      int height = properties->crosshairFullscreen ? dotplot->allocation.height : properties->plotRect.height;
+      gdk_draw_line(drawable, gc, x, y1, x, y1 + height);
+      
+      if (properties->crosshairCoordsOn)
+        {
+          /* Draw the coord text */
+          char *displayText = g_strdup_printf("%d, %d", 
+                                              getDisplayCoord(dwc->refCoord, dc, TRUE), 
+                                              getDisplayCoord(dwc->matchCoord, dc, FALSE));
+          
+          if (displayText && strlen(displayText) > 0)
+            {
+              cairo_t *cr = gdk_cairo_create(drawable);
+              PangoLayout *layout = pango_cairo_create_layout(cr);
+              pango_layout_set_font_description(layout, dotplot->style->font_desc);
+              pango_layout_set_text(layout, displayText, -1);
+              
+              int textWidth = UNSET_INT, textHeight = UNSET_INT;
+              pango_layout_get_pixel_size(layout, &textWidth, &textHeight);
+
+              /* We draw the label below-right by default, or above/left if it won't fit */
+              const int totalWidth = getDotplotWidth(dotplot, properties);
+              const int totalHeight = getDotplotHeight(dotplot, properties);
+
+              if (x + CROSSHAIR_TEXT_PADDING + textWidth > totalWidth)
+                {
+                  x -= CROSSHAIR_TEXT_PADDING + textWidth;
+                }
+              else
+                {
+                  x += CROSSHAIR_TEXT_PADDING;
+                }
+              
+              if (y + CROSSHAIR_TEXT_PADDING + textHeight > totalHeight)
+                {
+                  y -= CROSSHAIR_TEXT_PADDING + textHeight;
+                }
+              else
+                {
+                  y += CROSSHAIR_TEXT_PADDING;
+                }
+
+              cairo_set_source_rgb (cr, 0.0, 0.0, 1.0);
+              cairo_move_to (cr, x, y);
+              pango_cairo_show_layout(cr, layout);
+
+              g_object_unref(layout);
+              cairo_destroy(cr);
+            }
+
+          g_free(displayText);
+        }
+      
+      g_object_unref(gc);
+    }
+}
+
+
+/* Draw the current image */
+static void drawImage(GtkWidget *dotplot, GdkDrawable *drawable)
+{
+  DEBUG_ENTER("drawImage");
+  
+  DotplotProperties *properties = dotplotGetProperties(dotplot);
+ 
+  if (showImage(properties))
+    {  
+      GdkGC *gc = gdk_gc_new(drawable);
+      
+      gdk_draw_image(drawable, gc, properties->image,
+                     0, 0, properties->plotRect.x, properties->plotRect.y,
+                     properties->image->width, properties->image->height); 
+
+      /* We cannot calculate the image in the sliding-window size border,
+       * so shade that in to indicate it is not part of the plot */
+      DotterWindowContext *dwc = properties->dotterWinCtx;
+      DotterContext *dc = dwc->dotterCtx;
+
+      GdkColor *color = getGdkColor(DOTCOLOR_BORDER, dc->defaultColors, FALSE, dwc->usePrintColors);
+      const double alpha = 1;
+      const int hBorder = properties->slidingWinSize / (2 * getScaleFactor(properties, TRUE));
+      const int vBorder = properties->slidingWinSize / (2 * getScaleFactor(properties, FALSE));
+
+      cairo_operator_t op = CAIRO_OPERATOR_OVER;
+      GdkRectangle *r = &properties->plotRect;
+
+      drawRect(drawable, color, r->x, r->y, vBorder, r->height, alpha, op);
+      drawRect(drawable, color, r->x + r->width - vBorder, r->y, vBorder, r->height, alpha, op);
+      drawRect(drawable, color, r->x, r->y, r->width, hBorder, alpha, op);
+      drawRect(drawable, color, r->x, r->y + r->height - hBorder, r->width, hBorder, alpha, op);      
+
+      g_object_unref(gc);
+    }
+  
+  DEBUG_EXIT("drawImage returning ");
+}
+
+
+/* Utility to cut off anything before the ':' in an MSP name. Returns the full name if 
+ * there is no colon. Returns a pointer into the original name, so the result should not 
+ * be free'd */
+static const char* getShortMspName(const MSP* const msp)
+{
+  const char *result = NULL;
+  const char *sName = mspGetSName(msp);
+  
+  if (sName)
+    {
+      const char *mspName = strchr(sName, ':');  
+      result = mspName ? ++mspName : sName;
+    }
+  
+  return result;
+}
+
+
+static void calculateImageHsps(int strength, int sx, int sy, int ex, int ey, DotplotProperties *properties)
+{
+  /* Get zero-based coords from the edge of the drawing rectangle */
+  sx -= properties->plotRect.x;
+  ex -= properties->plotRect.x;
+  sy -= properties->plotRect.y;
+  ey -= properties->plotRect.y;
+  
+  const int xInc = (sx < ex) ? 1 : -1;
+  const int xLen = (ex - sx) * xInc + 1;
+  const int yInc = (sy < ey) ? 1 : -1;
+  const int yLen = (ey - sy) * yInc + 1;
+  
+  const int width = properties->image->width;
+  const int height = properties->image->height;
+  const int pixelmapLen = width * height;
+  
+  unsigned char dotValue;
+  
+  if (strength < NUM_COLORS)
+    dotValue = (unsigned char)strength;
+  else 
+    dotValue = NUM_COLORS - 1;
+  
+  int i = 0;
+  for (i = 0; i < xLen && i < yLen; ++i)
+    {
+      const int x = sx + i * xInc;
+      const int y = sy + i * yInc;
+      
+      if (x >= 0 && x < width && y >= 0 && y < height) 
+	{
+          const int dotpos = width * (y) + x;
+
+          /* Use the new value if greater than the existing value. Ignore pixels out of range. */
+          if (dotpos >= 0 && dotpos < pixelmapLen && dotValue > properties->hspPixmap[dotpos]) 
+            {
+              properties->hspPixmap[dotpos] = dotValue;
+            }
+	}
+    }
+}
+
+
+/* Utility to get the screen coords for the start and end coords of the given MSP */
+static void getMspScreenCoords(const MSP* const msp, DotplotProperties *properties, int *sx, int *ex, int *sy, int *ey)
+{
+  const gboolean sameDirection = (mspGetRefStrand(msp) == mspGetMatchStrand(msp));
+
+  const int qStart = msp->qRange.min();
+  const int qEnd = msp->qRange.max();
+  const int sStart = sameDirection ? msp->sRange.min() : msp->sRange.max();
+  const int sEnd = sameDirection ? msp->sRange.max() : msp->sRange.min();
+
+  getPosFromCoords(properties, qStart, sStart, sx, sy);
+  getPosFromCoords(properties, qEnd, sEnd, ex, ey);
+}
+  
+
+static void drawHsps(GtkWidget *dotplot, GdkDrawable *drawable)
+{
+  DotplotProperties *properties = dotplotGetProperties(dotplot);
+
+  if (properties->hspMode != DOTTER_HSPS_LINE && properties->hspMode != DOTTER_HSPS_FUNC)
+    {
+      /* Greyscale hsps are drawn as a pixmap via the drawImage function, so do nothing here */
+      return;
+    }
+
+  GdkGC *gc = gdk_gc_new(drawable);
+
+  DotterContext *dc = properties->dotterWinCtx->dotterCtx;
+  
+  /* we'll clip the hsp lines to the dotplot drawing area */
+  gdk_gc_set_clip_origin(gc, 0, 0);
+  gdk_gc_set_clip_rectangle(gc, &properties->plotRect);
+  
+  /* Loop through all MSPs */
+  MSP *msp = dc->mspList;
+  int sx, ex, sy, ey; /* start/end coordinates [0..n] */
+  
+  for (msp = dc->mspList; msp;  msp = msp->next)
+    {    
+      const char *mspName = getShortMspName(msp);
+      if (!mspName || strcmp(mspName, dc->matchSeqName) != 0)
+        {
+          /* Not an MSP from our sequence */
+          continue;
+        }
+        
+      getMspScreenCoords(msp, properties, &sx, &ex, &sy, &ey);
+      
+      if (properties->hspMode == DOTTER_HSPS_LINE) 
+        {
+          /* Draw in red */
+          GdkColor hspLineColor;
+          gdk_color_parse("red", &hspLineColor);
+          gdk_colormap_alloc_color(gdk_colormap_get_system(), &hspLineColor, TRUE, TRUE);
+          gdk_gc_set_foreground(gc, &hspLineColor);
+
+          gdk_draw_line(drawable, gc, sx, sy, ex, ey);
+        }
+      else if (properties->hspMode == DOTTER_HSPS_FUNC)
+        {
+          /* Get color based on score: */
+          GdkColor scoreColor;
+          
+          if (msp->score < 75.0)
+            {
+              gdk_color_parse("dark red", &scoreColor);
+            }
+          if (msp->score < 100.0) 
+            {
+              gdk_color_parse("magenta", &scoreColor);
+            }
+          else
+            {
+              gdk_color_parse("red", &scoreColor);
+            }
+          
+          gdk_colormap_alloc_color(gdk_colormap_get_system(), &scoreColor, TRUE, TRUE);
+          gdk_gc_set_foreground(gc, &scoreColor);
+          
+          gdk_draw_line(drawable, gc, sx, sy, ex, ey);
+        }
+    }
+  
+  g_object_unref(gc);
+}
+
+
+/* If middle-dragging, draw a rubber-band box around the currently-selected region */
+static void drawRubberBand(GtkWidget *dotplot, GdkDrawable *drawable)
+{
+  DotplotProperties *properties = dotplotGetProperties(dotplot);
+  
+  if (properties->dragStart.x != UNSET_INT && properties->dragEnd.x != UNSET_INT)
+    {
+      GdkGC *gc = gdk_gc_new(drawable);
+      
+      gdk_gc_set_function(gc, GDK_INVERT);
+      
+      gdk_draw_line(drawable, gc, properties->dragStart.x, properties->dragStart.y, properties->dragEnd.x, properties->dragStart.y);
+      gdk_draw_line(drawable, gc, properties->dragStart.x, properties->dragStart.y, properties->dragStart.x, properties->dragEnd.y);
+      gdk_draw_line(drawable, gc, properties->dragStart.x, properties->dragEnd.y, properties->dragEnd.x, properties->dragEnd.y);
+      gdk_draw_line(drawable, gc, properties->dragEnd.x, properties->dragStart.y, properties->dragEnd.x, properties->dragEnd.y);
+      
+      g_object_unref(gc);
+    }
+}
+
+
+/***********************************************************
+ *                       Internal routines                 *
+ ***********************************************************/
+
+static GdkColormap *insertGreyRamp (DotplotProperties *properties)
+{
+  gboolean success[NUM_COLORS];
+
+  GdkVisual *visual = gdk_visual_get_system();
+  GdkColormap *cmap = gdk_colormap_get_system();
+  
+  if (visual->type == GDK_VISUAL_PSEUDO_COLOR) 
+    {
+      g_critical("Pseudo-color display not supported.\n");
+    }
+  
+  /* true color display */
+  int i = 0;
+  
+  for (i = 0; i < NUM_COLORS; i++)
+    {
+      properties->greyRamp[i].red = i<<8;
+      properties->greyRamp[i].green =  i<<8;
+      properties->greyRamp[i].blue = i<<8;
+    }
+  
+  gdk_colormap_alloc_colors(cmap, properties->greyRamp, NUM_COLORS, FALSE, TRUE, success);
+  
+  return cmap;
+}
+
+
+static void transformGreyRampImage(GdkImage *image, unsigned char *pixmap, DotplotProperties *properties)
+{
+  DEBUG_ENTER("transformGreyRampImage");
+
+  if (!pixmap)
+    {
+      g_warning("Pixelmap is NULL; image will not be drawn.\n");
+      return;
+    }
+    
+  /* Note1 : here we stick to client byte-order, and rely on Xlib to swap
+   if the server is different */
+  
+  /* Note2: The exact function of this routine depends on the visual. If it's
+   a pseudo color visual, we're just getting the pixel values for the 
+   greyramp colormap entries. These values don't change, but the colors
+   they represent do. If it's a true-colour visual, the map entries 
+   are changed to give the correct values. It so happens that the 
+   transformation here is the same in both cases, this is not true 
+   for changing the grey-ramp. */
+  
+  int row, col;
+#if G_BYTE_ORDER == G_BIG_ENDIAN
+  DEBUG_OUT("G_BYTE_ORDER == G_BIG_ENDIAN\n");
+  gboolean byterev = (image->byte_order == GDK_LSB_FIRST);
+#else
+  DEBUG_OUT("G_BYTE_ORDER != G_BIG_ENDIAN\n");
+  gboolean byterev = (image->byte_order == GDK_MSB_FIRST);
+#endif
+
+  DEBUG_OUT("width=%d, height=%d, byterev=%d, image->bpp=%d, image->bpl=%d\n", 
+            image->width, image->height, byterev, image->bpp, image->bpl);
+  
+  /* Switch on the number of bytes per pixel */
+  switch (image->bpp)
+  { 
+    case 1:
+      for (row = 0; row < image->height; row++)
+	{ 
+	  guint8 *ptr = ((guint8 *)image->mem) + row * image->bpl;
+	  guint8 *sptr = ((guint8 *)pixmap) + row * image->width; 
+	  for (col = 0 ; col < image->width; col++)
+	    *ptr++ = (guint8) properties->greyMap[*sptr++];
+	}
+      break;
+    case 2:
+      for (row = 0; row < image->height; row++)
+	{ 
+	  guint16 *ptr = (guint16 *)(((guint8 *)(image->mem))+row*image->bpl);
+	  guint8 *sptr = ((guint8 *)pixmap) +row * image->width;
+	  if (byterev)
+	    for (col = 0 ; col < image->width; col++)
+	      { 
+		guint32 pixel = properties->greyMap[*sptr++];
+		*ptr++ = ((pixel & 0xff00) >> 8) | ((pixel & 0xff) << 8);
+	      }
+	  else
+	    for (col = 0 ; col < image->width; col++)
+	      *ptr++ = (guint16) properties->greyMap[*sptr++];
+	}
+      break;
+    case 3:
+      for (row = 0; row < image->height; row++)
+	{ 
+	  guint8 *ptr = ((guint8 *)image->mem) + row*image->bpl;
+	  guint8 *sptr = ((guint8 *)pixmap) +row * image->width;
+	  for (col = 0 ; col < image->width; col++)
+	    {
+	      guint32 pixel = properties->greyMap[*sptr++]; 
+	      *ptr++ = (guint8)pixel;
+	      *ptr++ = (guint8)(pixel>>8);
+	      *ptr++ = (guint8)(pixel>>16); 
+	    }
+	}
+      break;
+    case 4:
+      for (row = 0; row < image->height; row++)
+	{ 
+	  guint32 *ptr = (guint32 *)(((guint8 *)image->mem) + row*image->bpl);
+	  guint8 *sptr = ((guint8 *)pixmap) +row * image->width;
+	  if (byterev)
+	    for (col = 0 ; col < image->width; col++)
+	      { 
+		guint32 pixel = properties->greyMap[*sptr++];
+		*ptr++ = 
+                ((pixel & 0xff000000) >> 24) |
+                ((pixel & 0xff0000) >> 8) |
+                ((pixel & 0xff00) << 8) |
+                ((pixel & 0xff) << 24);
+	      }
+	  else
+	    for (col = 0 ; col < image->width; col++)
+	      *ptr++ = (guint32) properties->greyMap[*sptr++];
+	}
+      break;
+  }
+
+  DEBUG_EXIT("transformGreyRampImage returning ");
+}
+
+
+/* Update the dot plot crosshair after a change to the selected coords */
+void dotplotUpdateCrosshair(GtkWidget *dotplot, DotterWindowContext *dwc)
+{
+  gtk_widget_queue_draw(dotplot);
+}
+
+
+/* Update the dot-plot image following a change in the greyramp */
+void dotplotUpdateGreymap(GtkWidget *dotplot, gpointer data)
+{
+  DEBUG_ENTER("dotplotUpdateGreymap");
+
+  DotplotProperties *properties = dotplotGetProperties(dotplot);
+  unsigned char *ramp = (unsigned char*)data;
+  
+  /* First calculate the new mapping from weight to pixels */
+  int i = 0;
+  for (i = 0; i < NUM_COLORS; i++)
+    {
+      GdkColor *color = &properties->greyRamp[ramp[i]];
+      properties->greyMap[i] = color->pixel;
+    }
+  
+  /* Now recreate the image from the pixmap. Use the HSP pixmap if enabled, otherwise
+   * use the standard pixelmap. */ 
+  if (properties->hspMode == DOTTER_HSPS_GREYSCALE)
+    {
+      transformGreyRampImage(properties->image, properties->hspPixmap, properties);
+    }
+  else if (properties->pixelmap)
+    {
+      transformGreyRampImage(properties->image, properties->pixelmap, properties);
+    }
+  
+  widgetClearCachedDrawable(dotplot, NULL);
+  gtk_widget_queue_draw(dotplot);
+  
+  DEBUG_EXIT("dotplotUpdateGreymap returning ");
+}
+
+
+/* Get the reference/match sequence coords at the given x/y position */
+static void getCoordsFromPos(GtkWidget *dotplot, const int x, const int y, 
+			     int *refCoord, int *matchCoord)
+{
+  DotplotProperties *properties = dotplotGetProperties(dotplot);
+  DotterWindowContext *dwc = properties->dotterWinCtx;
+  DotterContext *dc = properties->dotterWinCtx->dotterCtx;
+  
+  /* For ref seq, convert to number of nucleotides */
+  gdouble scaleFactor = getScaleFactor(properties, TRUE);
+  const int numBasesHoz = (x - properties->plotRect.x) * scaleFactor;
+  
+  if (dc->hozScaleRev)
+    {
+      *refCoord = dwc->refSeqRange.max() - numBasesHoz;
+    }
+  else
+    {
+      *refCoord = dwc->refSeqRange.min() + numBasesHoz;
+    }
+
+  /* Round to nearest whole pixel and limit to valid range */
+  *refCoord = roundToValue(*refCoord, getResFactor(dc, TRUE));
+  boundsLimitValue(refCoord, &dwc->refSeqRange);
+
+  scaleFactor = getScaleFactor(properties, FALSE);
+  const int numBasesVert = (y - properties->plotRect.y) * scaleFactor;  
+  
+  if (dc->vertScaleRev)
+    {
+      *matchCoord = dwc->matchSeqRange.max() - numBasesVert;
+    }
+  else
+    {
+      *matchCoord = dwc->matchSeqRange.min() + numBasesVert;
+    }
+  
+  /* Round to nearest whole pixel and limit to valid range */
+  *matchCoord = roundToValue(*matchCoord, getResFactor(dc, FALSE));
+  boundsLimitValue(matchCoord, &dwc->matchSeqRange);
+}
+
+
+/* Set the currently-selected coords from the given x/y position */
+static void setCoordsFromPos(GtkWidget *dotplot, const int x, const int y)
+{
+  DotplotProperties *properties = dotplotGetProperties(dotplot);
+  DotterWindowContext *dwc = properties->dotterWinCtx;
+
+  getCoordsFromPos(dotplot, x, y, &dwc->refCoord, &dwc->matchCoord);
+  
+  refreshDotplot(dotplot);
+}  
+
+
+/* Get the x,y position of the given coords */
+static void getPosFromCoords(DotplotProperties *properties, int qCoord, int sCoord, int *x, int *y)
+{
+  DotterWindowContext *dwc = properties->dotterWinCtx;
+  DotterContext *dc = properties->dotterWinCtx->dotterCtx;
+  
+  const gdouble hScaleFactor = getScaleFactor(properties, TRUE);
+  const gdouble vScaleFactor = getScaleFactor(properties, FALSE);
+
+  if (x)
+    {
+      if (dc->hozScaleRev)
+	*x = properties->plotRect.x + (dwc->refSeqRange.max() - qCoord) / hScaleFactor;
+      else
+	*x = properties->plotRect.x + (qCoord - dwc->refSeqRange.min()) / hScaleFactor;
+    }
+  
+  if (y)
+    {
+      if (dc->vertScaleRev)
+	*y = properties->plotRect.y + (dwc->matchSeqRange.max() - sCoord) / vScaleFactor;
+      else
+	*y = properties->plotRect.y + (sCoord - dwc->matchSeqRange.min()) / vScaleFactor;
+    }
+}
+
+
+/* Get the x,y position of the currently selected coords */
+static void getPosFromSelectedCoords(GtkWidget *dotplot, int *x, int *y)
+{
+  DotplotProperties *properties = dotplotGetProperties(dotplot);
+  DotterWindowContext *dwc = properties->dotterWinCtx;
+
+  getPosFromCoords(properties, dwc->refCoord, dwc->matchCoord, x, y);
+}
+
+
+/* If the given point is outside the given rect, move it to the edge of the rect */
+static void boundsLimitPoint(GdkPoint *point, GdkRectangle *rect)
+{
+  if (point->x < rect->x)
+    point->x = rect->x;
+  
+  if (point->x > rect->x + rect->width)
+    point->x = rect->x + rect->width;
+  
+  if (point->y < rect->y)
+    point->y = rect->y;
+  
+  if (point->y > rect->y + rect->height)
+    point->y = rect->y + rect->height;
+  
+}
+
+
+/* Utility to set the values of a GdkPoint and optionally bounds limit it to the given rectangle */
+static void setPoint(GdkPoint *point, const int x, const int y, GdkRectangle *rect)
+{
+  point->x = x;
+  point->y = y;
+  
+  if (rect)
+    boundsLimitPoint(point, rect);
+}
+
+
+/* Utility to get the scale factor for the horizontal/vertical sequence. Includes zoom and conversion
+ * between nucleotide/display coords if applicable. */
+static gdouble getScaleFactor(DotplotProperties *properties, const gboolean horizontal)
+{
+  DotterContext *dc = properties->dotterWinCtx->dotterCtx;
+  gdouble result = properties->dotterWinCtx->zoomFactor * (gdouble)getResFactor(dc, horizontal);
+  return result;
+}
+
+
+/* REVERSEBYTES changes order of n bytes at location ptr
+ */
+#ifdef ALPHA
+static void reversebytes(void *ptr, int n)
+{ 
+  static char copy[256], *cp;
+  int  i;
+  
+  cp = ptr;
+  memcpy(copy, ptr, n);  /* Note: strcpy doesn't work - stops at \0 */
+  
+  for(i=0; i<n; i++) *cp++ = copy[n-i-1];
+}
+#endif
+
+
diff --git a/dotterApp/dotter.cpp b/dotterApp/dotter.cpp
new file mode 100644
index 0000000..e962724
--- /dev/null
+++ b/dotterApp/dotter.cpp
@@ -0,0 +1,4084 @@
+/*  File: dotplot.c
+ *  Author: Erik Sonnhammer, 1993-09-04
+ *  Copyright (c) 2010 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: This file contains functions that initialise Dotter and create
+ *              the main Dotter window. 
+ *----------------------------------------------------------------------------
+ */
+
+
+/*
+   DOTTER - Sequence-sequence dotplot in a pixel background image
+
+   Memory requirements:
+   The pixelmap + (alphabetsize+4) x qlen + 2 x slen
+
+          Pending (this is an old list - may be out of date):
+
+          change filqueryopen to filqueryeditopen (.dotter) when getting new code.
+
+          Fix revcomp when zooming in.
+
+          Add to alignment tool the extent and score of the current window.
+
+          (Raise initial cutoffs when compressed. ?)
+
+          HSP drawing bugged for reverse matches and for reversed scale
+          (Huge job to fix ... do only if really necessary)
+
+          Score matrix for DNA w/ transversions/transitions...? literature?
+
+-------------------------------------------------------------------------------- */
+
+/* CPU usage profiling on SGI:
+
+   cc dotter.c, no optimization
+   pixie -o dotter.pixie dotter
+   dotter.pixie -wD -b t seq seq
+   prof -pixie -h -only calcWindow dotter dotter.Addrs dotter.Counts
+*/
+
+#include <seqtoolsUtils/version.hpp>
+#include <seqtoolsUtils/utilities.hpp>
+#include <dotterApp/dotter_.hpp>
+#include <dotterApp/seqtoolsExonView.hpp>
+#include <gbtools/gbtools.hpp>
+#include <gdk/gdkkeysyms.h>
+#include <math.h>
+#include <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <algorithm>
+
+using namespace std;
+
+
+/* tint stuff used to be in graph.h, now local - rd 960524
+   NB colours as Erik liked them before Jean tinkered!
+   could rename #define's more sensibly now
+*/
+
+//#define TINT_WHITE      0x00
+//#define TINT_HIGHLIGHT1 0x01  /* highest priority, dna highlighting */
+//#define TINT_HIGHLIGHT2 0x02  /* highlight friends */
+//#define TINT_RED        0x04 
+//#define TINT_LIGHTGRAY  0x08 
+//#define TINT_MAGENTA    0x10 
+//#define TINT_CYAN       0x20 
+//#define TINT_LIGHTGREEN 0x40 
+//#define TINT_YELLOW     0x80 
+
+//static int tints[8] = { LIGHTRED, MIDBLUE, RED, LIGHTGRAY, 
+//                      MAGENTA, CYAN, LIGHTGREEN, YELLOW } ;
+
+#define MAX_WINDOW_WIDTH_FRACTION             0.8 /* max init width of dotter window as fraction of screen size */
+#define MAX_WINDOW_HEIGHT_FRACTION            0.8 /* max init height of dotter window as fraction of screen size */
+#define MAIN_WINDOW_NAME                      "DotterMainWindow"
+
+#define DOCK_WINDOWS_DEFAULT TRUE
+#define MINIMISE_GREYRAMP_DEFAULT TRUE
+
+//class GeneDataStruct
+//{
+//public:
+//  GeneDataStruct() : name(NULL), start(0), end(0), strand(0), 
+//                     msp_start(NULL), msp_end(NULL), y_pos(0.0) {};
+//
+//  const char *name ;
+//  int start, end ;
+//  char strand ;
+//  MSP *msp_start, *msp_end ;
+//  float y_pos ;
+//};
+//typedef GeneDataStruct, *GeneData ;
+//
+//typedef struct
+//{
+//  GList *forward_genes ;
+//  GList *reverse_genes ;
+//  char strand  ;
+//} GeneStrandStruct, *GeneStrand ;
+//
+
+
+/* Struct containing properties for a dotter window */
+class DotterProperties
+{
+public:
+  GtkWidget *widget;
+  GtkWidget *greyrampTool;                  /* the greyramp tool */
+  GtkWidget *greyrampWindow;                /* the window containing the greyramp too when undocked */
+  GtkWidget *greyrampContainer;             /* the container containing the greyramp tool when docked */
+  GtkWidget *greyrampToolMinimised;         /* the minimised version of the greyramp tool */
+  GtkWidget *alignmentTool;                 /* the alignment tool */
+  GtkWidget *alignmentWindow;               /* the window containing the alignment tool when undocked */
+  GtkWidget *alignmentContainer;            /* the container containing the alignment tool when docked */
+  GtkWidget *dotplot;                       /* the dotplot drawing area */
+  
+  gboolean windowsDocked;                   /* if true, all tools are docked into a single window */
+  DotterWindowContext *dotterWinCtx;
+  const char *exportFileName;
+};
+
+
+/* Local function declarations */
+
+static void showSettingsDialog(GtkWidget *dotterWindow);
+static void readmtx(int mtx[24][24], char *mtxfile);
+static void mtxcpy(int mtx[24][24], int BLOSUM62[24][24]);
+static void DNAmatrix(int mtx[24][24]);
+//static void drawAllFeatures(MSP *msp) ;
+//static void drawGenes(MSP *msp, float forward_y, float reverse_y, float depth) ;
+//gint compareMSPs(gconstpointer a, gconstpointer b) ;
+//static void getGenePositionsCB(gpointer data, gpointer user_data) ;
+//gint compareGenes(gconstpointer a, gconstpointer b) ;
+//static void setYoffsets(GList *first, float min_offset, float max_offset) ;
+//static void drawGenesCB(gpointer data, gpointer user_data) ;
+//static void drawMSPGene(MSP *msp, float y_offset) ;
+//static int gArrayGetLen(GArray *array);
+
+static void                   showHideGreyrampTool(GtkWidget *dotterWindow, const gboolean show);
+static void                   showHideAlignmentTool(GtkWidget *dotterWindow, const gboolean show);
+static GtkWidget*             createDotterWindow(DotterContext *dc, DotterWindowContext *dwc, const DotterHspMode hspMode, GtkWidget *dotplot, GtkWidget *dotplotContainer, GtkWidget *greyrampContainer, GtkWidget *alignmentContainer, GtkWidget *greyrampTool, GtkWidget *alignmentTool, GtkWidget *greyrampToolMinimised, const char *exportFileName, char *windowColor);
+static DotterContext*         dotterGetContext(GtkWidget *dotterWindow);
+static void                   redrawAll(GtkWidget *dotterWindow, gpointer data);
+static void                   refreshAll(GtkWidget *dotterWindow, gpointer data);
+static gboolean               onKeyPressDotter(GtkWidget *widget, GdkEventKey *event, gpointer data);
+static gboolean               negateDisplayCoord(DotterContext *dc, const gboolean horizontal);
+static gboolean               setStartCoord(GtkWidget *dotterWindow, DotterWindowContext *dwc, const gboolean horizontal, const int newValue);
+static gboolean               setEndCoord(GtkWidget *dotterWindow, DotterWindowContext *dwc, const gboolean horizontal, const int newValue);
+static void                   printDotterWindow(GtkWidget *dotterWindow);
+static DotterProperties*      dotterGetProperties(GtkWidget *dotterWindow);
+
+static GtkWidget* createDotterInstance(DotterContext *dotterCtx,
+                                       DotterWindowContext *dotterWinCtx,
+                                       const char *loadFileName,
+                                       const char *saveFileName,
+                                       const char *exportFileName,
+                                       const gboolean hspsOn,
+                                       const gboolean breaklinesOn,
+                                       const char* winsizeIn,
+                                       const int pixelFacIn,
+                                       const int zoomFacIn,
+                                       const int qcenter,
+                                       const int scenter,
+                                       const gboolean greyramSwap,
+                                       char *windowColor);
+
+static void                       onQuitMenu(GtkAction *action, gpointer data);
+static void                       onCloseMenu(GtkAction *action, gpointer data);
+static void                       onSavePlotMenu(GtkAction *action, gpointer data);
+static void                       onExportPlotMenu(GtkAction *action, gpointer data);
+static void                       onPrintMenu(GtkAction *action, gpointer data);
+static void                       onSettingsMenu(GtkAction *action, gpointer data);
+static void                       onShowHideGreyrampMenu(GtkAction *action, gpointer data);
+static void                       onShowHideAlignmentMenu(GtkAction *action, gpointer data);
+static void                       onToggleCrosshairMenu(GtkAction *action, gpointer data);
+static void                       onToggleCoordsMenu(GtkAction *action, gpointer data);
+static void                       onToggleFullscreenMenu(GtkAction *action, gpointer data);
+static void                       onTogglePixelmapMenu(GtkAction *action, gpointer data);
+static void                       onToggleGridMenu(GtkAction *action, gpointer data);
+static void                       onHelpMenu(GtkAction *action, gpointer data);
+static void                       onAboutMenu(GtkAction *action, gpointer data);
+static void                       onMaximiseGreyrampMenu(GtkAction *action, gpointer data);
+static void                       onMinimiseGreyrampMenu(GtkAction *action, gpointer data);
+static void                       onToggleUsePrintColorsMenu(GtkAction *action, gpointer data);
+static void                       onToggleBumpExonsMenu(GtkAction *action, gpointer data);
+static void                       onToggleDockWindowsMenu(GtkAction *action, gpointer data);
+static void                       onPrintColorsChanged(GtkWidget *dotterWindow);
+static void                       onCloseAlignmentMenu(GtkAction *action, gpointer data);
+static void                       onPrintAlignmentMenu(GtkAction *action, gpointer data);
+static void                       onCopyHCoordMenu(GtkAction *action, gpointer data);
+static void                       onCopyVCoordMenu(GtkAction *action, gpointer data);
+static void                       onCopySelnMenu(GtkAction *action, gpointer data);
+static void                       onCopySelnCoordsMenu(GtkAction *action, gpointer data);
+static void                       onClearSelnMenu(GtkAction *action, gpointer data);
+
+
+/* Menu builders: the action entry list lists menu actions for all menus */
+static const GtkActionEntry menuEntries[] = {
+{ "FileMenuAction",   NULL, "_File"},
+{ "EditMenuAction",   NULL, "_Edit"},
+{ "ViewMenuAction",   NULL, "_View"},
+{ "HelpMenuAction",   NULL, "_Help"},
+
+{ "Quit",           GTK_STOCK_QUIT,         "_Quit all dotters",      "<control>Q", "Quit all dotters",           G_CALLBACK(onQuitMenu)},
+{ "Close",          GTK_STOCK_CLOSE,        "_Close this dotter",     "<control>W", "Close this dotter",          G_CALLBACK(onCloseMenu)},
+{ "SavePlot",       GTK_STOCK_SAVE,         "_Save plot",             NULL,         "Save plot",                  G_CALLBACK(onSavePlotMenu)},
+{ "ExportPlot",     NULL,                   "_Export plot",           NULL,         "Export plot",                G_CALLBACK(onExportPlotMenu)},
+{ "Print",          GTK_STOCK_PRINT,        "_Print...",              "<control>P", "Print",                      G_CALLBACK(onPrintMenu)},
+{ "Settings",       GTK_STOCK_PREFERENCES,  "Settings",               "<control>S", "Set dotter parameters",      G_CALLBACK(onSettingsMenu)},
+{ "Help",           GTK_STOCK_HELP,         "_Help",                  "<control>H", "Dotter Help",                G_CALLBACK(onHelpMenu)},
+{ "About",          GTK_STOCK_ABOUT,        "_About",                 NULL,         "About Dotter",               G_CALLBACK(onAboutMenu)},
+
+{ "MaximiseGreyramp", NULL,                 "_Maximise greyramp",     "<control>G", "Maximise the greyramp tool", G_CALLBACK(onMaximiseGreyrampMenu)},
+{ "MinimiseGreyramp", NULL,                 "M_inimise greyramp",     "<control>G", "Minimise the greyramp tool", G_CALLBACK(onMinimiseGreyrampMenu)},
+
+{ "CloseAlignment", NULL, "_Close tool",              "<control>A",       "Close the alignment tool",                                            G_CALLBACK(onCloseAlignmentMenu)},
+{ "PrintAlignment", NULL, "_Print alignment...",      NULL,               "Print the alignment tool window",                                     G_CALLBACK(onPrintAlignmentMenu)},
+{ "CopyHCoord",     NULL, "Copy _horizontal coord",   NULL,               "Copy the current horizontal sequence coord to the clipboard",         G_CALLBACK(onCopyHCoordMenu)},
+{ "CopyVCoord",     NULL, "Copy _vertical coord",     NULL,               "Copy the current vertical sequence coord to the clipboard",           G_CALLBACK(onCopyVCoordMenu)},
+{ "CopySeln",       NULL, "Copy selectio_n",          "<control>C",       "Copy the current selection to the clipboard",                         G_CALLBACK(onCopySelnMenu)},
+{ "ClearSeln",      NULL, "C_lear current selection", "Escape","Clear the current selection",                                                    G_CALLBACK(onClearSelnMenu)},
+{ "CopySelnCoords", NULL, "Copy selection coor_ds",   "<shift><control>C","Copy the start/end coords of the current selection to the clipboard", G_CALLBACK(onCopySelnCoordsMenu)}
+
+};
+
+/* Toggle-able menu entries are listed here: */
+static GtkToggleActionEntry toggleMenuEntries[] = {
+{ "TogglePixmap",     NULL, "Pixelmap",              NULL,  "Show the pixelmap",              G_CALLBACK(onTogglePixelmapMenu),        TRUE},
+{ "ToggleGrid",       NULL, "Gridlines",             NULL,  "Show grid lines",                G_CALLBACK(onToggleGridMenu),            FALSE},
+{ "ToggleCrosshair",  NULL, "Crosshair",             NULL,  "Show the crosshair",             G_CALLBACK(onToggleCrosshairMenu),       TRUE},
+{ "ToggleCoords",     NULL, "Crosshair label",       NULL,  "Show the crosshair label",       G_CALLBACK(onToggleCoordsMenu),          TRUE},
+{ "ToggleFullscreen", NULL, "Crosshair fullscreen",  NULL,  "Show the crosshair full screen", G_CALLBACK(onToggleFullscreenMenu),      TRUE},
+{ "TogglePrintColors",NULL, "Use print colors",      NULL,  "Use print _colors",              G_CALLBACK(onToggleUsePrintColorsMenu),  FALSE},
+{ "ToggleBumpExons",  NULL, "Bump exons",            "B",   "_Bump exons",                    G_CALLBACK(onToggleBumpExonsMenu),       FALSE},
+{ "ToggleGreyramp",   NULL, "_Greyramp tool",        "<control>G", "Maximise/minimise the greyramp tool",G_CALLBACK(onShowHideGreyrampMenu),   TRUE},
+{ "ToggleAlignment",  NULL, "_Alignment tool",       "<control>A", "Show/hide the alignment tool",G_CALLBACK(onShowHideAlignmentMenu), TRUE},
+{ "DockWindows",      NULL, "Dock windows",          "<control>K", "_Dock windows",           G_CALLBACK(onToggleDockWindowsMenu),     DOCK_WINDOWS_DEFAULT}
+};
+
+/* Radio-button menu entries are listed here: */
+static const GtkRadioActionEntry radioMenuEntries[] = {
+{ "HspsOff",    NULL, "HSPs off",                     NULL,  "Hide Blast HSPs",                                    DOTTER_HSPS_OFF},
+{ "HspsGrey",   NULL, "Draw HSPs (greyramp)",         NULL,  "Draw Blast HSPs as greyramp",                        DOTTER_HSPS_GREYSCALE},
+{ "HspsLine",   NULL, "Draw HSPs (red lines)",        NULL,  "Draw Blast HSPs as solid red lines",                 DOTTER_HSPS_LINE},
+{ "HspsFunc",   NULL, "Draw HSPs (color = f(score))", NULL,  "Draw Blast HSPs with color as a function of score",  DOTTER_HSPS_FUNC}
+};
+
+
+
+/* Menu UI descriptions */
+static const char mainMenuDescription[] =
+"<ui>"
+"  <menubar name='MenuBar'>"
+"    <menu action='FileMenuAction'>"
+"      <menuitem action='SavePlot'/>"
+"      <menuitem action='ExportPlot'/>"
+"      <separator/>"
+"      <menuitem action='Print'/>"
+"      <menuitem action='TogglePrintColors'/>"
+"      <separator/>"
+"      <menuitem action='Close'/>"
+"      <menuitem action='Quit'/>"
+"    </menu>"
+"    <menu action='EditMenuAction'>"
+"      <menuitem action='CopyHCoord'/>"
+"      <menuitem action='CopyVCoord'/>"
+"      <menuitem action='CopySeln'/>"
+"      <menuitem action='CopySelnCoords'/>"
+"      <menuitem action='ClearSeln'/>"
+"      <separator/>"
+"      <menuitem action='Settings'/>"
+"    </menu>"
+"    <menu action='ViewMenuAction'>"
+"      <menuitem action='ToggleGreyramp'/>"
+"      <menuitem action='ToggleAlignment'/>"
+"      <menuitem action='DockWindows'/>"
+"      <separator/>"
+"      <menuitem action='ToggleCrosshair'/>"
+"      <menuitem action='ToggleCoords'/>"
+"      <menuitem action='ToggleFullscreen'/>"
+"      <separator/>"
+"      <menuitem action='TogglePixmap'/>"
+"      <menuitem action='ToggleGrid'/>"
+"      <separator/>"
+"      <menuitem action='HspsOff'/>"
+"      <menuitem action='HspsGrey'/>"
+"      <menuitem action='HspsLine'/>"
+"      <menuitem action='HspsFunc'/>"
+"     <separator/>"
+"      <menuitem action='ToggleBumpExons'/>"
+"    </menu>"
+"    <menu action='HelpMenuAction'>"
+"      <menuitem action='Help'/>"
+"      <menuitem action='About'/>"
+"    </menu>"
+"  </menubar>"
+"  <popup name='ContextMenu' accelerators='true'>"
+"    <menuitem action='Close'/>"
+"    <menuitem action='Quit'/>"
+"    <menuitem action='Help'/>"
+"    <menuitem action='SavePlot'/>"
+"    <menuitem action='Print'/>"
+"    <separator/>"
+"    <menuitem action='Settings'/>"
+"    <separator/>"
+"    <menuitem action='ToggleGreyramp'/>"
+"    <menuitem action='ToggleAlignment'/>"
+"    <menuitem action='DockWindows'/>"
+"    <separator/>"
+"    <menu action='ViewMenuAction'>"
+"      <separator/>"
+"      <menuitem action='ToggleCrosshair'/>"
+"      <menuitem action='ToggleCoords'/>"
+"      <menuitem action='ToggleFullscreen'/>"
+"      <separator/>"
+"      <menuitem action='TogglePixmap'/>"
+"      <menuitem action='ToggleGrid'/>"
+"      <separator/>"
+"      <menuitem action='HspsOff'/>"
+"      <menuitem action='HspsGrey'/>"
+"      <menuitem action='HspsLine'/>"
+"      <menuitem action='HspsFunc'/>"
+"    </menu>"
+"  </popup>"
+"  <popup name='MinimisedGreyrampContextMenu' accelerators='true'>"
+"    <menuitem action='MaximiseGreyramp'/>"
+"  </popup>"
+"  <popup name='MaximisedGreyrampContextMenu' accelerators='true'>"
+"    <menuitem action='MinimiseGreyramp'/>"
+"  </popup>"
+"  <popup name='AlignmentContextMenu' accelerators='true'>"
+"      <menuitem action='CopyHCoord'/>"
+"      <menuitem action='CopyVCoord'/>"
+"      <menuitem action='CopySeln'/>"
+"      <menuitem action='CopySelnCoords'/>"
+"      <menuitem action='ClearSeln'/>"
+"      <separator/>"
+"      <menuitem action='CloseAlignment'/>"
+"      <menuitem action='Print'/>"
+"  </popup>"
+"</ui>";
+
+
+
+/* Global variables */
+
+static int    MATRIX[24][24];
+//              MSPoffset,      /* Difference between real MSP coord and coord stored in MSP */
+//              HSPgaps = 0.
+//              fsBoxStart,
+//              fsRightOn = 1,
+//              fsBottomOn = 1,
+//              fsAnnRightOn = 1,
+//              fsAnnBottomOn = 1,
+//              fsEndLinesOn = 0;
+
+//static Graph  fsGraph=0;
+
+#define MAXALIGNLEN 501
+
+//static char fsPlotHeighttx[10];
+
+       float fsPlotHeight=2.0;  /* The height of feature series XY plots */
+//static MSP   *msp;
+
+/*  BLOSUM62 930809
+
+     A   R   N   D   C   Q   E   G   H   I   L   K   M   F   P   S   T   W   Y   V   B   Z   X  \* */ 
+int BLOSUM62[24][24] = {
+  {  4, -1, -2, -2,  0, -1, -1,  0, -2, -1, -1, -1, -1, -2, -1,  1,  0, -3, -2,  0, -2, -1,  0, -4 },
+  { -1,  5,  0, -2, -3,  1,  0, -2,  0, -3, -2,  2, -1, -3, -2, -1, -1, -3, -2, -3, -1,  0, -1, -4 },
+  { -2,  0,  6,  1, -3,  0,  0,  0,  1, -3, -3,  0, -2, -3, -2,  1,  0, -4, -2, -3,  3,  0, -1, -4 },
+  { -2, -2,  1,  6, -3,  0,  2, -1, -1, -3, -4, -1, -3, -3, -1,  0, -1, -4, -3, -3,  4,  1, -1, -4 },
+  {  0, -3, -3, -3,  9, -3, -4, -3, -3, -1, -1, -3, -1, -2, -3, -1, -1, -2, -2, -1, -3, -3, -2, -4 },
+  { -1,  1,  0,  0, -3,  5,  2, -2,  0, -3, -2,  1,  0, -3, -1,  0, -1, -2, -1, -2,  0,  3, -1, -4 },
+  { -1,  0,  0,  2, -4,  2,  5, -2,  0, -3, -3,  1, -2, -3, -1,  0, -1, -3, -2, -2,  1,  4, -1, -4 },
+  { 0, -2,  0, -1, -3, -2, -2,  6, -2, -4, -4, -2, -3, -3, -2,  0, -2, -2, -3, -3, -1, -2, -1, -4 },
+  { -2,  0,  1, -1, -3,  0,  0, -2,  8, -3, -3, -1, -2, -1, -2, -1, -2, -2,  2, -3,  0,  0, -1, -4 },
+  { -1, -3, -3, -3, -1, -3, -3, -4, -3,  4,  2, -3,  1,  0, -3, -2, -1, -3, -1,  3, -3, -3, -1, -4 },
+  { -1, -2, -3, -4, -1, -2, -3, -4, -3,  2,  4, -2,  2,  0, -3, -2, -1, -2, -1,  1, -4, -3, -1, -4 },
+  { -1,  2,  0, -1, -3,  1,  1, -2, -1, -3, -2,  5, -1, -3, -1,  0, -1, -3, -2, -2,  0,  1, -1, -4 },
+  { -1, -1, -2, -3, -1,  0, -2, -3, -2,  1,  2, -1,  5,  0, -2, -1, -1, -1, -1,  1, -3, -1, -1, -4 },
+  { -2, -3, -3, -3, -2, -3, -3, -3, -1,  0,  0, -3,  0,  6, -4, -2, -2,  1,  3, -1, -3, -3, -1, -4 },
+  { -1, -2, -2, -1, -3, -1, -1, -2, -2, -3, -3, -1, -2, -4,  7, -1, -1, -4, -3, -2, -2, -1, -2, -4 },
+  { 1, -1,  1,  0, -1,  0,  0,  0, -1, -2, -2,  0, -1, -2, -1,  4,  1, -3, -2, -2,  0,  0,  0, -4 },
+  { 0, -1,  0, -1, -1, -1, -1, -2, -2, -1, -1, -1, -1, -2, -1,  1,  5, -2, -2,  0, -1, -1,  0, -4 },
+  { -3, -3, -4, -4, -2, -2, -3, -2, -2, -3, -2, -3, -1,  1, -4, -3, -2, 11,  2, -3, -4, -3, -2, -4 },
+  { -2, -2, -2, -3, -2, -1, -2, -3,  2, -1, -1, -2, -1,  3, -3, -2, -2,  2,  7, -1, -3, -2, -1, -4 },
+  { 0, -3, -3, -3, -1, -2, -2, -3, -3,  3,  1, -2,  1, -1, -2, -2,  0, -3, -1,  4, -3, -2, -1, -4 },
+  { -2, -1,  3,  4, -3,  0,  1, -1,  0, -3, -4,  0, -3, -3, -2,  0, -1, -4, -3, -3,  4,  1, -1, -4 },
+  { -1,  0,  0,  1, -3,  3,  4, -2,  0, -3, -3,  1, -1, -3, -1,  0, -1, -3, -2, -2,  1,  4, -1, -4 },
+  { 0, -1, -1, -1, -2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -2,  0,  0, -2, -1, -1, -1, -1, -1, -4 },
+  { -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -1 }
+ };
+
+
+//GArray *fsArr = NULL;  /* Stores Feature Series - t he actual segments are stored
+//                         as MSPs, using these fields:
+//                         msp->sframe  = [1..2] sequence
+//                         msp->qstart = segment start
+//                         msp->qend   = segment end
+//                         msp->fs     = Ordinal number of series that this MSP belongs to.
+//                         msp->fsColor  = color
+//                         msp->desc   = annotation
+//                         */
+
+
+/***********************************************************
+ *                       Properties                        *
+ ***********************************************************/
+
+/* free memory used by color structs */
+static void destroyDotterColors(DotterContext *dc)
+{
+  if (!dc || !dc->defaultColors)
+    return;
+
+  int i = DOTCOLOR_MIN + 1;
+  
+  for ( ; i < DOTCOLOR_NUM_COLORS; ++i)
+    {
+      BlxColor *blxColor = &g_array_index(dc->defaultColors, BlxColor, i);
+      destroyBlxColor(blxColor);
+    }
+
+  g_array_free(dc->defaultColors, FALSE);
+  dc->defaultColors = NULL;
+}
+
+
+/* Create the colors that Dotter will use for various specific purposes */
+static void createDotterColors(DotterContext *dc)
+{
+  /* Initialise the array with empty BlxColor structs */
+  dc->defaultColors = g_array_sized_new(FALSE, FALSE, sizeof(BlxColor), DOTCOLOR_NUM_COLORS);
+  int i = DOTCOLOR_MIN + 1;
+  
+  for ( ; i < DOTCOLOR_NUM_COLORS; ++i)
+    {
+      BlxColor *blxColor = new BlxColor;
+      blxColor->name = NULL;
+      blxColor->desc = NULL;
+      g_array_append_val(dc->defaultColors, *blxColor);
+    }
+
+  /* Get the default background color of our widgets (i.e. that inherited from the theme).
+   * Convert it to a string so we can use the same creation function as the other colors */
+  GtkWidget *tmp = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+  char *defaultBgColorStr = convertColorToString(&tmp->style->bg[GTK_STATE_NORMAL]);
+  createBlxColor(dc->defaultColors, DOTCOLOR_BACKGROUND, "Background", "Background color", defaultBgColorStr, BLX_WHITE, "#bdbdbd", NULL);
+  g_free(defaultBgColorStr);
+  gtk_widget_destroy(tmp);
+  
+  /* matches */
+  createBlxColor(dc->defaultColors, DOTCOLOR_MATCH, "Exact match", "Exact match", BLX_LIGHT_CYAN, BLX_LIGHT_CYAN, BLX_CYAN, BLX_CYAN);
+  createBlxColor(dc->defaultColors, DOTCOLOR_CONS, "Conserved match", "Conserved match", BLX_VIOLET, BLX_VIOLET, BLX_DARK_VIOLET, BLX_DARK_VIOLET);
+  createBlxColor(dc->defaultColors, DOTCOLOR_MISMATCH, "Mismatch", "Mismatch", "#cacaca", BLX_WHITE, "#cacaca", BLX_WHITE);
+  
+  /* exons */
+  createBlxColor(dc->defaultColors, DOTCOLOR_EXON_FILL, "Exon fill color", "Exon fill color", BLX_YELLOW, BLX_YELLOW, NULL, NULL);
+  createBlxColor(dc->defaultColors, DOTCOLOR_EXON_LINE, "Exon line color", "Exon outline color", BLX_BLUE, BLX_BLUE, NULL, NULL);
+  createBlxColor(dc->defaultColors, DOTCOLOR_CDS_FILL, "CDS fill color", "Coding section fill color", BLX_LIGHT_GREEN, BLX_LIGHT_GREEN, NULL, NULL);
+  createBlxColor(dc->defaultColors, DOTCOLOR_CDS_LINE, "CDS line color", "Coding section outline color", BLX_DARK_GREEN, BLX_DARK_GREEN, BLX_VERY_DARK_GREEN, BLX_VERY_DARK_GREEN);
+  createBlxColor(dc->defaultColors, DOTCOLOR_UTR_FILL, "UTR fill color", "Untranslated region fill color", BLX_LIGHT_RED, BLX_LIGHT_RED, NULL, NULL);
+  createBlxColor(dc->defaultColors, DOTCOLOR_UTR_LINE, "UTR line color", "Untranslated region outline color", BLX_DARK_RED, BLX_DARK_RED, BLX_VERY_DARK_RED, BLX_VERY_DARK_RED);
+
+  /* dot plot */
+  createBlxColor(dc->defaultColors, DOTCOLOR_CROSSHAIR, "Crosshair", "Color of the crosshair on the dot plot", BLX_BLUE, BLX_BLUE, NULL, NULL);
+  createBlxColor(dc->defaultColors, DOTCOLOR_GRID, "Grid", "Line color of the grid on the dot plot", BLX_LIGHT_RED, BLX_LIGHT_RED, NULL, NULL);
+  createBlxColor(dc->defaultColors, DOTCOLOR_BORDER, "Grid", "Highlight color for the border where the alignment cannot be calculated", "#ffeeee", "#bbbbbb", NULL, NULL);
+
+  /* greyramp */
+  createBlxColor(dc->defaultColors, DOTCOLOR_THRESHOLD_MARKER, "Greyramp threshold marker color", "Outline color of the threshold marker on the greyramp tool", BLX_RED, BLX_RED, BLX_GREEN, BLX_GREEN);
+  createBlxColor(dc->defaultColors, DOTCOLOR_MARKER_LINE, "Greyramp marker outline color", "Outline color of the triangle markers on the greyramp tool", BLX_BLACK, BLX_BLACK, BLX_GREEN, BLX_GREEN);
+  createBlxColor(dc->defaultColors, DOTCOLOR_MARKER_FILL, "Greyramp marker fill color", "Fill color of the triangle markers on the greyramp tool", BLX_WHITE, BLX_WHITE, NULL, NULL);
+
+  /* misc */
+  createBlxColor(dc->defaultColors, DOTCOLOR_BREAKLINE, "Breakline color", "Color of the separator lines between sequences, if there were multiple sequences in the input file", BLX_GREEN, BLX_GREEN, NULL, NULL);
+  createBlxColor(dc->defaultColors, DOTCOLOR_CANONICAL, "Canonical", "Canonical splice sites", BLX_GREEN, BLX_GREEN, NULL, NULL);
+  createBlxColor(dc->defaultColors, DOTCOLOR_NON_CANONICAL, "Non-canonical", "Non-canonical splice sites", BLX_RED, BLX_RED, NULL, NULL);
+}
+
+
+/* Get the initial zoom factor, calculating it if the passed-in zoom is 0 */
+static gdouble getInitZoomFactor(DotterContext *dc, const gdouble zoomFacIn, const int qLen, const int sLen)
+{
+  DEBUG_ENTER("getInitZoomFactor");
+
+  gdouble result = zoomFacIn;
+  
+  if (result <= 0)
+    {
+      if (dc->memoryLimit)
+        {
+          result = (int)sqrt((qLen / dc->numFrames / 1e6 * sLen - 1e-6) / dc->memoryLimit) + 1;
+        }
+      else
+        {
+          g_error("Cannot calculate zoom; division by 0 (memory limit is 0).\n");
+        }
+    }
+  
+  DEBUG_EXIT("getInitZoomFactor returning %f", result);
+  return result;
+}
+
+
+static DotterContext* createDotterContext(DotterOptions *options,
+                                          BlxBlastMode blastMode, 
+                                          const gboolean showWindow,
+                                          const BlxStrand refSeqStrand,
+                                          const BlxStrand matchSeqStrand,
+                                          MSP *mspList,
+                                          GList *seqList,
+                                          int matrix[24][24],
+                                          char *matrixName)
+{
+  DEBUG_ENTER("createDotterContext");
+
+  DotterContext *result = new DotterContext;
+  
+  result->blastMode = blastMode;
+  result->displaySeqType = (blastMode == BLXMODE_BLASTN) ? BLXSEQ_DNA : BLXSEQ_PEPTIDE;
+  result->numFrames = (blastMode == BLXMODE_BLASTX) ? 3 : 1;
+  result->geneticCode = stdcode1;
+  mtxcpy(result->matrix, matrix);
+  result->matrixName = matrixName;
+  result->mspList = mspList;
+  result->seqList = seqList;
+  result->windowList = NULL;
+  result->abbrevTitle = options->abbrevTitle;
+  
+  result->watsonOnly = options->watsonOnly;
+  result->crickOnly = options->crickOnly;
+  
+  /* Set the fixed-width font (not applicable in batch mode) */
+  if (showWindow)
+    {
+      GtkWidget *tmp = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+      const char *fontFamily = findFixedWidthFont(tmp);
+      result->fontDesc = pango_font_description_from_string(fontFamily);
+      pango_font_description_set_size(result->fontDesc, pango_font_description_get_size(tmp->style->font_desc));
+      getFontCharSize(tmp, result->fontDesc, &result->charWidth, &result->charHeight);
+      gtk_widget_destroy(tmp);
+    }
+  else
+    {
+      result->fontDesc = NULL;
+    }
+  
+  result->refSeqName = g_strdup(options->qname);
+  result->refSeq = options->qseq; /* take ownership of passed-in seq */
+  result->refSeqRev = NULL;
+  result->refSeqType = (blastMode == BLXMODE_BLASTP ? BLXSEQ_PEPTIDE : BLXSEQ_DNA);
+  
+  /* for dna ref sequences, reverse-complement the ref seq */
+  if (result->refSeqType == BLXSEQ_DNA && result->refSeq)
+    {
+      result->refSeqRev = (char*)g_malloc(strlen(result->refSeq) + 1);
+      revComplement(result->refSeqRev, result->refSeq);
+    }
+  else if (result->refSeq)
+    {
+      /* Just reverse it */
+      result->refSeqRev = g_strdup(result->refSeq);
+      g_strreverse(result->refSeqRev);
+    }
+  
+  result->refSeqStrand = refSeqStrand;
+
+  result->matchSeqName = g_strdup(options->sname);
+  result->matchSeq = options->sseq; /* take ownership of passed-in seq */
+  result->matchSeqRev = NULL;
+  result->matchSeqType = (blastMode == BLXMODE_BLASTN ? BLXSEQ_DNA : BLXSEQ_PEPTIDE);
+  result->matchSeqStrand = matchSeqStrand;
+  
+  result->refSeqFullRange.set(options->qoffset + 1, options->qoffset + strlen(options->qseq));
+  result->matchSeqFullRange.set(options->soffset + 1, options->soffset + strlen(options->sseq));
+  
+  result->hozScaleRev = options->hozScaleRev;
+  result->vertScaleRev = options->vertScaleRev;
+  result->negateCoords = options->negateCoords;
+  
+  result->displayMirror = options->mirrorImage;
+  
+  result->memoryLimit = options->memoryLimit;
+  
+  result->defaultColors = NULL;
+  
+  
+  /* Reverse/comp match seq if applicable */
+  if (result->matchSeqType == BLXSEQ_DNA && result->matchSeqStrand == BLXSTRAND_REVERSE && result->matchSeq)
+    {
+      result->matchSeqRev = (char*)g_malloc(strlen(result->matchSeq) + 1);
+      revComplement(result->matchSeqRev, result->matchSeq);
+    }
+  else if (result->matchSeqStrand == BLXSTRAND_REVERSE && result->matchSeq)
+    {
+      /* Peptide sequence. Just reverse */
+      result->matchSeqRev = g_strdup(result->matchSeq);
+      g_strreverse(result->matchSeqRev);
+    }
+  
+  int i = 0;
+  for ( ; i < result->numFrames; ++i)
+    {
+      result->peptideSeqs[i] = NULL;
+    }
+  
+  if (result->blastMode == BLXMODE_BLASTX) 
+    {
+      /* Create the 3 frame translations (for the strand we're interested in only). */
+      const gboolean rev = (result->hozScaleRev);
+      char *refSeqToUse = (rev ? result->refSeqRev : result->refSeq);
+      
+      int i = 0;
+      for (i = 0; i < result->numFrames; i++)
+        {
+          /* Get the start coord at this index and calculate which reading frame it really is
+           * (because the first coord in the sequence might not be base 1 in frame 1). */
+          const int startCoord = rev ? result->refSeqFullRange.max() - i : result->refSeqFullRange.min() + i;
+        
+          int frame = UNSET_INT;
+          convertToDisplayIdx(startCoord, TRUE, result, 1, &frame);
+
+          result->peptideSeqs[frame - 1] = blxTranslate(refSeqToUse + i, result->geneticCode);
+
+          DEBUG_OUT("Frame %d starts at coord %d for hoz seq strand = %d.\n", frame, startCoord, result->refSeqStrand);
+        }
+      
+      /* Check all of the frames got set */
+      for (i = 0; i < result->numFrames; ++i)
+        {
+          if (result->peptideSeqs[i] == NULL)
+            {
+              g_error("Error calculating translated sequence for reading frame %d.\n", i + 1);
+            }
+        }
+    }
+  
+  if (showWindow)
+    { 
+      createDotterColors(result);
+    }
+  
+  /* Calculate the height and width of the horizontal and vertical scales */
+  const int leftBorderChars = max(numDigitsInInt(result->matchSeqFullRange.min()), numDigitsInInt(result->matchSeqFullRange.max())) + 1;
+  result->scaleWidth = DEFAULT_MAJOR_TICK_HEIGHT * 2 + (roundNearest)((gdouble)leftBorderChars * result->charWidth) + SCALE_LINE_WIDTH;
+  result->scaleHeight = DEFAULT_MAJOR_TICK_HEIGHT + roundNearest(result->charHeight) + SCALE_LINE_WIDTH;
+  
+  result->msgData = &options->msgData;
+  
+  DEBUG_EXIT("createDotterContext returning");
+  return result;
+}
+
+
+static void destroyDotterContext(DotterContext **dc)
+{
+  DEBUG_ENTER("destroyDotterContext");
+
+  if ((*dc))
+    {
+    if ((*dc)->blastMode == BLXMODE_BLASTX)
+      {
+        int i = 0;
+        for ( ; i < (*dc)->numFrames; i++)
+          {
+            if ((*dc)->peptideSeqs && (*dc)->peptideSeqs[i])
+              {
+                g_free((*dc)->peptideSeqs[i]);
+                (*dc)->peptideSeqs[i] = NULL;
+              }
+          }
+      }
+    
+    /* destroy the msps, sequence structs and colors */
+    destroyMspList(&(*dc)->mspList);
+    destroyBlxSequenceList(&(*dc)->seqList);
+    destroyDotterColors((*dc));
+
+    /* Free stuff allocated in calling routine (usually dotterMain) */
+    g_free((*dc)->refSeq);
+    (*dc)->refSeq = NULL;
+    
+    g_free((*dc)->refSeqName);
+    (*dc)->refSeqName = NULL;
+    
+    g_free((*dc)->matchSeq);
+    (*dc)->matchSeq = NULL;
+    
+    g_free((*dc)->matchSeqName);
+    (*dc)->matchSeqName = NULL;
+
+      if ((*dc)->matrixName)
+        {
+          g_free((*dc)->matrixName);
+          (*dc)->matrixName = NULL;
+        }
+    }  
+
+  /* free the context struct itself */
+  delete *dc;
+  *dc = NULL;
+  
+  DEBUG_EXIT("destroyDotterContext returning ");
+}
+
+static void destroyDotterWindowContext(DotterWindowContext **dwc)
+{
+  DEBUG_ENTER("destroyDotterWindowContext");
+
+  if ((*dwc)->printSettings)
+    g_object_unref((*dwc)->printSettings);
+  
+  delete *dwc;
+  *dwc = NULL;
+  
+  DEBUG_EXIT("destroyDotterWindowContext returning ");
+}
+
+static DotterProperties* dotterGetProperties(GtkWidget *dotterWindow)
+{
+  return dotterWindow ? (DotterProperties*)(g_object_get_data(G_OBJECT(dotterWindow), "DotterProperties")) : NULL;
+}
+
+static void onDestroyDotterWindow(GtkWidget *dotterWindow)
+{
+  DEBUG_ENTER("onDestroyDotterWindow");
+
+  DotterProperties *properties = dotterGetProperties(dotterWindow);
+  
+  if (properties)
+    {
+      if (properties->dotterWinCtx)
+        {
+          DotterContext *dc = properties->dotterWinCtx->dotterCtx;
+
+          g_object_unref(properties->dotterWinCtx->uiManager);
+          properties->dotterWinCtx->uiManager = NULL;
+
+          /* free the context for this window */
+          destroyDotterWindowContext(&properties->dotterWinCtx);
+
+          /* if it's the last window, then we also need to destroy the main context
+           * and quit the program */
+          if (dc && dc->windowList)
+            {
+              dc->windowList = g_slist_remove(dc->windowList, dotterWindow);
+
+              if (g_slist_length(dc->windowList) < 1)
+                {
+                  g_slist_free(dc->windowList);
+                  dc->windowList = NULL;
+                  destroyDotterContext(&dc);
+                  gtk_main_quit();
+                }
+            }
+        }
+
+      delete properties;
+      properties = NULL;
+      g_object_set_data(G_OBJECT(dotterWindow), "DotterProperties", NULL);
+    }
+  
+  DEBUG_EXIT("onDestroyDotterWindow returning ");
+}
+
+
+/* Close all windows associated with the given dotter context */
+static void dotterContextCloseAllWindows(DotterContext *dc)
+{
+  if (!dc || !dc->windowList)
+    return;
+
+  /* Can't loop through the list because pointers are removed from it when we destroy the
+   * windows. Also, when the last window is destroyed, dc will be destroyed. So: loop while we
+   * still have more than one entry in the list. We know we must quit after the last entry. */
+  int len = g_slist_length(dc->windowList);
+  
+  while (len > 0)
+    {
+      GtkWidget *window = GTK_WIDGET(dc->windowList->data);
+      gtk_widget_destroy(window);
+      
+      if (len == 1) /* just processed the last one so break */
+        break;
+      else
+        len = g_slist_length(dc->windowList);
+    }
+}
+
+/* "Close" the given window. Only really closes it if it's the main window;
+ * for other windows, return false to indicate we haven't handled it. */
+static gboolean closeWindow(GtkWidget *widget)
+{
+  gboolean handled = FALSE;
+  const char *name = gtk_widget_get_name(widget);
+  
+  if (name && strcmp(name, MAIN_WINDOW_NAME) == 0)
+    {
+      handled = TRUE;
+      gtk_widget_destroy(widget);
+    }
+
+  return handled;
+}
+
+
+/* Convert a dna index to display (dna or peptide) index, if applicable. If horizontal is true
+ * we have the horizontal (reference) sequence, otherwise the vertical (match) sequence. */
+int convertToDisplayIdx(const int dnaIdx, const gboolean horizontal, DotterContext *dc, const int frameIn, int *baseNum)
+{
+  //DEBUG_ENTER("convertToDisplayIdx(dnaIdx=%d, hoz=%d, frameIn=%d)", dnaIdx, horizontal, frameIn);
+
+  int result = dnaIdx;
+  
+  if (baseNum)
+    *baseNum = 1;
+  
+  /* Match seq coords are always in display coords already, so only do anything if this is the
+   * ref seq. Also, we only need to convert if it's peptide-nucleotide match. */
+  if (horizontal && dc->blastMode == BLXMODE_BLASTX)
+    {
+      /* If the strand is reversed, the frame will be inverted; un-invert it first */
+      const gboolean rev = (horizontal && dc->hozScaleRev) || (!horizontal && dc->vertScaleRev);
+      int frame = frameIn;
+      
+      double fraction = 0.0;
+      
+      if (rev)
+        fraction = (double)(dnaIdx + frame - 1) / (double)dc->numFrames;
+      else
+        fraction = (double)(dnaIdx - frame + 1) / (double)dc->numFrames;
+      
+      DEBUG_OUT("frame=%d, fraction=%f\n", frame, fraction);
+
+      /* Round to the higher value so that 0.3, 0.6 and 1.0 all round
+       * to the same value. If values are negative this still works; 0, -0.3
+       * and -0.6 will all round to 0.
+       *
+       * To illustrate (the top section shows nucleotide coords, reading 
+       * from top-to-bottom then left-to-right): 
+       * 
+       *              Display forwards        Display reversed
+       * Frame1:         -5 -2  1  4             6  3  0 -3
+       * Frame2:         -4 -1  2  5             5  2 -1 -4
+       * Frame3:         -3  0  3  6             4  1 -2 -5
+       * 
+       * Peptide coord:  -1  0  1  2             2  1  0 -1
+       *
+       * */
+      result = ceil(fraction);
+    
+      /* We want base 1 in the requested reading frame. */
+      if (baseNum)
+        {
+          *baseNum = (dnaIdx - frame + 1) % dc->numFrames;
+        
+          /* If we have a negative base number, adding 3 shifts it to the
+           * correct base number. (This also fixes the fact that mod3 gives 0
+           * for base 3.) */
+          if (*baseNum < 1)
+            *baseNum += dc->numFrames;
+
+          /* invert base number order when the sequence is reversed, i.e. if the mod3 of
+           * the coords gives base numbers 123123123 etc then change these to 321321321 etc */
+          if (rev)
+            {
+              *baseNum = dc->numFrames - *baseNum + 1;
+            }
+        }
+    }
+  
+  //DEBUG_EXIT("convertToDisplayIdx returning %d", result);
+  return result;
+}
+
+
+/* Convert a display index (dna or peptide) to a dna index (original sequence coord),
+ * if applicable. If horizontal is true we have the horizontal (reference) sequence, 
+ * otherwise the vertical (match) sequence. */
+int convertToDnaIdx(const int displayIdx, 
+                    const gboolean horizontal, 
+                    DotterContext *dc, 
+                    const int frame, 
+                    int baseNum)
+{
+  DEBUG_ENTER("convertToDnaIdx(displayIdx=%d, hoz=%d, frame=%d, base=%d)", displayIdx, horizontal, frame, baseNum);
+
+  int result = displayIdx;
+  
+  /* Match seq coords are always in display coords already, so only do anything if this is the
+   * ref seq. Also, we only need to convert if it's peptide-nucleotide match. */
+  if (horizontal && dc->blastMode == BLXMODE_BLASTX)
+    {
+      if (dc->hozScaleRev)
+        result = (displayIdx * dc->numFrames) - dc->numFrames - frame + baseNum + 1;
+      else
+        result = (displayIdx * dc->numFrames) - dc->numFrames + frame + baseNum - 1;
+      
+      DEBUG_OUT("dnaIdx=%d\n", result);
+    }
+  
+  DEBUG_EXIT("convertToDnaIdx returning %d", result);
+  return result;
+}
+
+
+static DotterWindowContext* createDotterWindowContext(DotterContext *dotterCtx,
+                                                      const IntRange* const refSeqRange,
+                                                      const IntRange* const matchSeqRange,
+                                                      const gdouble zoomFacIn,
+						      const gboolean showWindow)
+{
+  DEBUG_ENTER("createDotterWindowContext");
+
+  DotterWindowContext *result = new DotterWindowContext;
+  
+  result->dotterCtx = dotterCtx;
+  
+  result->refSeqRange.set(refSeqRange);
+  result->matchSeqRange.set(matchSeqRange);
+
+  result->refCoord = UNSET_INT;
+  result->matchCoord = UNSET_INT;
+  
+  result->zoomFactor = getInitZoomFactor(dotterCtx, zoomFacIn, refSeqRange->length(), matchSeqRange->length());
+
+  /* See if we're comparing the same portion of sequence against itself */
+  result->selfComp = (refSeqRange->min() == matchSeqRange->min() && 
+                      refSeqRange->max() == matchSeqRange->max() &&
+                      stringsEqual(dotterCtx->refSeq, dotterCtx->matchSeq, FALSE));
+
+  result->usePrintColors = FALSE;
+
+  if (showWindow) 
+    {
+      result->pageSetup = gtk_page_setup_new();
+      gtk_page_setup_set_orientation(result->pageSetup, GTK_PAGE_ORIENTATION_LANDSCAPE);
+      
+      result->printSettings = gtk_print_settings_new();
+      gtk_print_settings_set_orientation(result->printSettings, GTK_PAGE_ORIENTATION_LANDSCAPE);
+      gtk_print_settings_set_quality(result->printSettings, GTK_PRINT_QUALITY_HIGH);
+      gtk_print_settings_set_resolution(result->printSettings, DEFAULT_PRINT_RESOLUTION);
+    }
+  else 
+    {
+      result->pageSetup = NULL;
+      result->printSettings = NULL;
+    }
+
+  /* Null out all the entries in the dialogs list */
+  int dialogId = 0;
+  for ( ; dialogId < DOTDIALOG_NUM_DIALOGS; ++dialogId)
+    {
+      result->dialogList[dialogId] = NULL;
+    }
+  
+  DEBUG_EXIT("createDotterWindowContext returning");
+  return result;
+}
+
+/* properties specific to a particular dotter window */
+static void dotterCreateProperties(GtkWidget *dotterWindow, 
+                                   GtkWidget *greyrampTool, 
+                                   GtkWidget *greyrampWindow,
+                                   GtkWidget *greyrampContainer,
+                                   GtkWidget *greyrampToolMinimised,
+                                   GtkWidget *alignmentTool,
+                                   GtkWidget *alignmentWindow,
+                                   GtkWidget *alignmentContainer,
+                                   GtkWidget *dotplot,
+                                   DotterWindowContext *dotterWinCtx,
+                                   const char *exportFileName)
+{
+  DEBUG_ENTER("dotterCreateProperties");
+
+  if (dotterWindow)
+    {
+      DotterProperties *properties = new DotterProperties;
+
+      properties->widget = dotterWindow;
+      properties->greyrampTool = greyrampTool;
+      properties->greyrampWindow = greyrampWindow;
+      properties->greyrampContainer = greyrampContainer;
+      properties->greyrampToolMinimised = greyrampToolMinimised;
+      properties->alignmentTool = alignmentTool;
+      properties->alignmentWindow = alignmentWindow;
+      properties->alignmentContainer = alignmentContainer;
+      properties->dotplot = dotplot;
+      properties->windowsDocked = DOCK_WINDOWS_DEFAULT;
+      properties->dotterWinCtx = dotterWinCtx;
+      properties->exportFileName = exportFileName;
+      
+      g_object_set_data(G_OBJECT(dotterWindow), "DotterProperties", properties);
+      g_signal_connect(G_OBJECT(dotterWindow), "destroy", G_CALLBACK(onDestroyDotterWindow), NULL); 
+    }
+  
+  DEBUG_EXIT("dotterCreateProperties returning ");
+}
+
+
+/* Utility to extract the dotter context from the dotter window properties */
+static DotterContext* dotterGetContext(GtkWidget *dotterWindow)
+{
+  DotterProperties *properties = dotterGetProperties(dotterWindow);
+  return properties ? properties->dotterWinCtx->dotterCtx : NULL;
+}
+
+
+/* Perform required updates following a change to the currently-selected coords */
+static void updateOnSelectedCoordsChanged(GtkWidget *dotterWindow)
+{
+  DotterProperties *properties = dotterGetProperties(dotterWindow);
+
+  /* Make sure the coords are in range */
+  boundsLimitValue(&properties->dotterWinCtx->refCoord, &properties->dotterWinCtx->refSeqRange);
+  boundsLimitValue(&properties->dotterWinCtx->matchCoord, &properties->dotterWinCtx->matchSeqRange);
+  
+  /* Update the alignment view and dotplot */
+  updateAlignmentRange(properties->alignmentTool, properties->dotterWinCtx);
+  alignmentToolRedrawAll(properties->alignmentTool);
+  
+  /* Need to clear cached drawables for the alignment tool but can just refresh the dotplot */
+  widgetClearCachedDrawable(properties->alignmentTool, NULL);
+  refreshDotplot(properties->dotplot);
+}
+
+
+/* Set the initial currently-selected ref seq and match seq coords (i.e. the coords 
+ * where the crosshair is centred) */
+static void setInitSelectedCoords(GtkWidget *dotterWindow, const int refCoord, const int matchCoord)
+{
+  DEBUG_ENTER("setInitSelectedCoords");
+
+  DotterProperties *properties = dotterGetProperties(dotterWindow);
+  DotterWindowContext *dwc = properties->dotterWinCtx;
+  
+  if (valueWithinRange(refCoord, &dwc->refSeqRange))
+    dwc->refCoord = refCoord;
+  else
+    dwc->refCoord = dwc->refSeqRange.centre();
+
+  if (valueWithinRange(matchCoord, &dwc->matchSeqRange))
+    dwc->matchCoord = matchCoord;
+  else
+    dwc->matchCoord = dwc->matchSeqRange.centre();
+  
+  updateOnSelectedCoordsChanged(dotterWindow);
+  
+  DEBUG_EXIT("setInitSelectedCoords returning ");
+}
+
+
+/***********************************************************
+ *                    External routines                    *
+ ***********************************************************/
+
+
+
+void dotter (const BlxBlastMode blastMode,
+             DotterOptions *options,
+             const BlxStrand refSeqStrand,
+             const BlxStrand matchSeqStrand,
+              int   qcenter,
+              int   scenter,
+              MSP  *mspList,
+              GList *seqList,
+             int   MSPoff)
+{
+  DEBUG_ENTER("dotter(mode=%d, qname=%s, qoff=%d, qstrand=%d, sname=%s, soff=%d, sstrand=%d)",
+              blastMode, options->qname, options->qoffset, refSeqStrand, options->sname, options->soffset, matchSeqStrand);
+  
+  const int qlen = strlen(options->qseq);
+  const int slen = strlen(options->sseq);
+  
+  if (qlen < 1) g_error("queryseq is empty\n");
+  if (slen < 1) g_error("subjectseq is empty\n");
+
+  int i = 0;
+  for (i = 0; i < qlen; i++) options->qseq[i] = toupper(options->qseq[i]);
+  for (i = 0; i < slen; i++) options->sseq[i] = toupper(options->sseq[i]);
+
+  if (!options->memoryLimit) 
+    {
+      options->memoryLimit = 0.5; /* Mb */
+    }
+
+  /* Get score matrix */
+  char *matrixName = (char*)g_malloc((MAX_MATRIX_NAME_LENGTH + 1) * sizeof(char));
+  
+  if (options->mtxfile) 
+    {
+      readmtx(MATRIX, options->mtxfile);
+      strncpy(matrixName, options->mtxfile, MAX_MATRIX_NAME_LENGTH);
+    }
+  else if (blastMode == BLXMODE_BLASTN) 
+    {
+      DNAmatrix(MATRIX);
+      strcpy(matrixName, "DNA+5/-4");
+    }
+  else
+    {
+      mtxcpy(MATRIX, BLOSUM62);
+      strcpy(matrixName, "BLOSUM62");
+    }
+
+  /* If a save/export file was given, that implies we're in batch mode.
+   * We don't display the window in batch mode, unless we're exporting to PDF, in
+   * which case we need to create the window so that we have something to print  */
+  const gboolean batchMode = (options->savefile || options->exportfile);
+  const gboolean createWindow = options->exportfile || !batchMode;
+  
+  if (batchMode) 
+    {
+      /* Don't do batch processing if output file can't be opened */
+      if (options->savefile && !fopen (options->savefile, "wb"))
+        g_error("Failed to open %s\n", options->savefile);
+
+      if (options->exportfile && !fopen (options->exportfile, "wb"))
+        g_error("Failed to open %s\n", options->exportfile);
+    }
+  
+  /* Create the main dotter context (shared properties for all dotter windows in this process) */
+  DotterContext *dotterCtx = createDotterContext(options, blastMode, createWindow, refSeqStrand, matchSeqStrand, mspList, seqList, MATRIX, matrixName);
+
+  /* Create a context specific to the initial dotter window */
+  DotterWindowContext *dotterWinCtx = createDotterWindowContext(dotterCtx, &dotterCtx->refSeqFullRange, &dotterCtx->matchSeqFullRange, options->dotterZoom, createWindow);
+
+  /* Create the widgets */
+  createDotterInstance(dotterCtx, 
+                       dotterWinCtx,
+                       options->loadfile,
+                       options->savefile,
+                       options->exportfile,
+                       options->hspsOnly,
+                       options->breaklinesOn,
+                       options->winsize,
+                       options->pixelFacset,
+                       options->dotterZoom,
+                       qcenter,
+                       scenter,
+                       options->swapGreyramp,
+                       options->windowColor);
+
+  DEBUG_EXIT("dotter returning");
+  return ;
+}
+
+
+/* Create all the widgets for a dotter instance. Uses the existing dotter context. Multiple
+ * instances (i.e. multiple dotter windows) can exist that share the same main context but display
+ * a different range of coords etc,. This creates the widgets and shows them. */
+static GtkWidget* createDotterInstance(DotterContext *dotterCtx,
+                                       DotterWindowContext *dotterWinCtx,
+                                       const char *loadFileName,
+                                       const char *saveFileName,
+                                       const char *exportFileName,
+                                       const gboolean hspsOn,
+                                       const gboolean breaklinesOn,
+                                       const char* winsizeIn,
+                                       const int pixelFacIn,
+                                       const int zoomFacIn,
+                                       const int qcenter,
+                                       const int scenter,
+                                       const gboolean greyrampSwap,
+                                       char *windowColor)
+{
+  DEBUG_ENTER("createDotterInstance");
+
+  GtkWidget *dotterWindow = NULL;
+
+  GtkWidget *dotplot = NULL;
+  GtkWidget *dotplotWidget = createDotplot(dotterWinCtx, 
+                                           loadFileName,
+                                           saveFileName,
+                                           exportFileName,
+                                           hspsOn,
+                                           breaklinesOn,
+                                           winsizeIn,
+                                           pixelFacIn,
+                                           zoomFacIn,
+                                           qcenter,
+                                           scenter,
+                                           &dotplot);
+  
+  /* Only create the graphical elements if there is a graphical dotplot widget */
+  if (dotplotWidget)
+    {
+      GtkWidget *greyrampContainer = gtk_frame_new(NULL); /* container for when docked */
+      gtk_frame_set_shadow_type(GTK_FRAME(greyrampContainer), GTK_SHADOW_NONE);
+      GtkWidget *greyrampWindow = NULL; /* container for when undocked */
+      GtkWidget *greyrampTool = createGreyrampTool(dotterWinCtx, 40, 100, greyrampSwap, &greyrampWindow);
+      GtkWidget *greyrampToolMinimised = createGreyrampToolMinimised(dotterWinCtx, 40, 100);
+      registerGreyrampCallback(greyrampTool, dotplot, dotplotUpdateGreymap);
+      registerGreyrampCallback(greyrampToolMinimised, dotplot, dotplotUpdateGreymap);
+      blxSetWidgetColor(greyrampWindow, windowColor);
+
+      GtkWidget *alignmentContainer = gtk_frame_new(NULL); /* container for when docked */
+      gtk_frame_set_shadow_type(GTK_FRAME(alignmentContainer), GTK_SHADOW_NONE);
+      GtkWidget *alignmentWindow = NULL; /* container for when undocked */
+      GtkWidget *alignmentTool = createAlignmentTool(dotterWinCtx, &alignmentWindow);
+      blxSetWidgetColor(alignmentWindow, windowColor);
+
+      if (DOCK_WINDOWS_DEFAULT)
+        {
+          /* Dock into containers that will go into the main window */
+          gtk_container_add(GTK_CONTAINER(alignmentContainer), alignmentTool);
+          gtk_container_add(GTK_CONTAINER(greyrampContainer), greyrampTool);
+        }
+      else
+        {
+          /* Add to the separate toplevel windows */
+          gtk_container_add(GTK_CONTAINER(alignmentWindow), alignmentTool);
+          gtk_container_add(GTK_CONTAINER(greyrampWindow), greyrampTool);
+        }
+  
+      const DotterHspMode hspMode = dotplotGetHspMode(dotplot);
+      dotterWindow = createDotterWindow(dotterCtx, dotterWinCtx, hspMode, 
+                                        dotplot, dotplotWidget, 
+                                        greyrampContainer, alignmentContainer, 
+                                        greyrampTool, alignmentTool, greyrampToolMinimised,
+                                        exportFileName, windowColor);
+      
+      /* Set the tool windows as transient for the main window and clear them up when the
+       * main window is destroyed */
+      gtk_window_set_transient_for(GTK_WINDOW(greyrampWindow), GTK_WINDOW(dotterWindow));
+      gtk_window_set_transient_for(GTK_WINDOW(alignmentWindow), GTK_WINDOW(dotterWindow));
+      gtk_window_set_destroy_with_parent(GTK_WINDOW(greyrampWindow), TRUE);
+      gtk_window_set_destroy_with_parent(GTK_WINDOW(alignmentWindow), TRUE);
+
+      /* Set the handlers for the alignment and greyramp tools. Connect them here so we can pass
+       * the main window as data. */
+      gtk_widget_add_events(alignmentWindow, GDK_KEY_PRESS_MASK);
+      gtk_widget_add_events(greyrampWindow, GDK_KEY_PRESS_MASK);
+      g_signal_connect(G_OBJECT(alignmentWindow), "key-press-event", G_CALLBACK(onKeyPressDotter), dotterWindow);
+      g_signal_connect(G_OBJECT(greyrampWindow), "key-press-event", G_CALLBACK(onKeyPressDotter), dotterWindow);
+
+      /* Keep track of all the windows we create, so that we can destroy the DotterContext when
+       * the last one is closed */
+      dotterCtx->windowList = g_slist_append(dotterCtx->windowList, dotterWindow);
+      
+      dotterCreateProperties(dotterWindow, 
+                             greyrampTool, greyrampWindow, greyrampContainer, greyrampToolMinimised,
+                             alignmentTool, alignmentWindow, alignmentContainer,
+                             dotplot, dotterWinCtx, exportFileName);
+      DotterProperties *properties = dotterGetProperties(dotterWindow);
+      
+      setInitSelectedCoords(dotterWindow, qcenter, scenter);
+      
+      updateGreyMap(properties->greyrampTool);
+
+      if (MINIMISE_GREYRAMP_DEFAULT)
+        {
+          /* Hide the full greyramp tool (this shows the minimised version instead) */
+          setToggleMenuStatus(properties->dotterWinCtx->actionGroup, "ToggleGreyramp", FALSE);
+        }
+    }
+  
+  DEBUG_EXIT("createDotterInstance returning ");
+  return dotterWindow;
+}
+
+
+/* Open another dotter window, internal to the existing process (i.e. using the same sequences
+ * etc. but just displaying a different range). */
+void callDotterInternal(DotterContext *dc, 
+                        const IntRange* const refSeqRange,
+                        const IntRange* const matchSeqRange,
+                        const gdouble zoomFactor,
+                        const gboolean breaklinesOn)
+{
+  DotterWindowContext *dwc = createDotterWindowContext(dc, refSeqRange, matchSeqRange, zoomFactor, TRUE);
+  createDotterInstance(dc, dwc, NULL, NULL, NULL, FALSE, breaklinesOn, NULL, 0, 0, 0, 0, FALSE, NULL);
+}
+
+
+
+/***********************************************************
+ *                    External routines                    *
+ ***********************************************************/
+
+/* RMEXP will subtract the expected score to remove background noise
+   due to biased composition. Gos's idea - not explored yet.
+
+static void rmExp(void){}
+*/
+
+
+///* Utility to return the Feature Series that the given MSP belongs to */
+//static FeatureSeries* mspGetFeatureSeries(const MSP *msp)
+//{
+//  return msp->fs;
+//}
+
+
+/* Returns true if this MSP is part of a Feature Series and that feature series is currently displayed */
+//static gboolean mspShowFs(const MSP *msp)
+//{
+//  FeatureSeries *fs = mspGetFeatureSeries(msp);
+//  return (fs && fs->on);
+//}
+
+
+/* Return the y position of the lower edge of a feature-series MSP, given its height.
+   Calculate it if it is not set yet. Updates the max y coord to be the lower edge of
+   this MSP. Returns 0 if the MSP is not in a Feature Series */
+//float mspGetFsBottomEdge(MSP *msp, float *maxy, float height)
+//{
+//  float result = 0;
+//  
+//  FeatureSeries *fs = mspGetFeatureSeries(msp);
+//  
+//  if (fs)
+//    {
+//      result = fs->y;
+//
+//      if (!result)
+//        {
+//          *maxy += height;
+//          fs->y = *maxy;
+//          result = *maxy;
+//        }
+//    }
+//  
+//  return result;
+//}
+
+
+/* Return the x position of the rightmost edge of a feature-series MSP, given its height.
+   Calculae it if it is not yet set. Updates the max x coord to be the rightmost edge of
+   this MSP. Returns 0 if the MSP is not in a FeatureSeries */
+//float mspGetFsRightEdge(MSP *msp, float *maxx, float height)
+//{
+//  float result = 0;
+//
+//  FeatureSeries *fs = mspGetFeatureSeries(msp);
+//
+//  if (fs)
+//    {
+//      result = fs->x;
+//      
+//      if (!result)
+//        {
+//          *maxx += height;
+//          fs->x = *maxx;
+//          result = *maxx;
+//        }
+//    }
+//  
+//  return result;
+//}
+
+
+//static float seq2graphX(int pos)
+//{
+//    float x;
+//
+//    x = ceil((float)(pos + MSPoffset - qoffset)/zoom/resfac);
+//
+//    if (reversedScale)
+//      x = RightBorder - x;
+//    else
+//      x += LeftBorder-1;
+//
+//    return x;
+//}
+//
+//static float seq2graphY(int pos)
+//{
+//    float y;
+//
+//    y = ceil((float)(pos - soffset)/zoom);
+//    
+//    y += TopBorder-1;
+//
+//    return y;
+//}
+
+
+//static void XdrawSEG(MSP *msp, float offset)
+//{
+//    /* Horizontal axis */
+//
+//    float  
+//      sx = seq2graphX(mspGetQStart(msp)), 
+//      ex = seq2graphX(mspGetQEnd(msp));
+//    
+//    offset += TopBorder + slen4 -1;
+//    oldcolor = graphColor(msp->fsColor); oldLinew = graphLinewidth(.25);
+//
+//    if (fsEndLinesOn) {
+//      graphLine(sx, TopBorder, sx, TopBorder+slen4-2);
+//      graphLine(ex, TopBorder, ex, TopBorder+slen4-2);
+//    }
+//
+//    graphFillRectangle(sx, offset, ex, offset - msp->score/100.0 * fonth);
+//    graphColor(BLACK);
+//    graphRectangle(sx, offset, ex, offset - msp->score/100.0 * fonth);
+//
+//    graphColor(BLACK);
+//    if (fsAnnBottomOn && msp->desc) {
+//      graphText(msp->desc, sx, offset);
+//    }    
+//    graphColor(oldcolor); graphLinewidth(oldLinew);
+//}
+
+
+//static void XdrawSEGxy(MSP *msp, float offset)
+//{
+//    int i, inNotFilled=0, descShown=0;
+//    float  
+//      x, y, 
+//      xold=0, yold=0;
+//
+//    offset += TopBorder + slen4 -1;
+//    oldcolor = graphColor(msp->fsColor); oldLinew = graphLinewidth(.25);
+//
+//    for (i = 0; i < qlen; i++)
+//      {
+//      const int xyVal = g_array_index(msp->xy, int, i);
+//
+//      if (xyVal == XY_NOT_FILLED)
+//        {
+//          inNotFilled = 1;
+//        }
+//      else
+//        {
+//          x = seq2graphX(i);
+//          y = offset-1 - (float)xyVal / 100 * fsPlotHeight * fonth;
+//          
+//          if (xold && (x != xold || y != yold) && (!inNotFilled || msp->fsShape == BLXCURVE_INTERPOLATE))
+//            {
+//              graphLine(xold, yold, x, y);
+//              
+//              if (fsAnnBottomOn && msp->desc && !descShown)
+//                {
+//                  int linecolor = graphColor(BLACK);
+//                  graphText(msp->desc, xold, offset);
+//                  graphColor(linecolor);
+//                  descShown = 1;
+//                }
+//            }
+//              
+//          xold = x;
+//          yold = y;
+//          inNotFilled = 0;
+//        }
+//      }
+//    
+//    graphColor(oldcolor); graphLinewidth(oldLinew);
+//}
+//
+//
+//static void YdrawSEG(MSP *msp, float offset)
+//{
+//    /* Vertical axis */
+//
+//    float  
+//      sx = seq2graphY(mspGetQStart(msp)), 
+//      ex = seq2graphY(mspGetQEnd(msp));
+//    
+//    offset += LeftBorder + qlen4 -1;
+//    oldcolor = graphColor(msp->fsColor); oldLinew = graphLinewidth(.25);
+//
+//    if (fsEndLinesOn) {
+//      graphLine(LeftBorder, sx, LeftBorder+qlen4-2, sx);
+//      graphLine(LeftBorder, ex, LeftBorder+qlen4-2, ex);
+//    }
+//
+//    graphFillRectangle(offset, sx, offset - msp->score/100.0 * fonth, ex);
+//    graphColor(BLACK);
+//    graphRectangle    (offset, sx, offset - msp->score/100.0 * fonth, ex);
+//
+//    graphColor(BLACK);
+//    if (fsAnnRightOn && msp->desc) {
+//      graphText(msp->desc, offset, sx);
+//    }    
+//    graphColor(oldcolor); graphLinewidth(oldLinew);
+//}
+//
+//
+//static void YdrawSEGxy(MSP *msp, float offset)
+//{
+//    int i, inNotFilled=0, descShown=0;
+//    float  
+//      x, y, 
+//      xold=0, yold=0;
+//
+//    offset += LeftBorder + qlen4 -1;
+//    oldcolor = graphColor(msp->fsColor); oldLinew = graphLinewidth(.25);
+//
+//    for (i = 0; i < qlen; i++)
+//      {
+//      const int xyVal = g_array_index(msp->xy, int, i);
+//      
+//      if (xyVal == XY_NOT_FILLED)
+//        {
+//          inNotFilled = 1;
+//        }
+//      else
+//        {
+//          x = seq2graphY(i);
+//          y = offset-1 - (float)xyVal / 100 * fsPlotHeight * fonth;
+//          
+//          if (xold && (x != xold || y != yold) && (!inNotFilled || msp->fsShape == BLXCURVE_INTERPOLATE)) 
+//            {
+//              graphLine(yold, xold, y, x);
+//              
+//              if (fsAnnRightOn && msp->desc && !descShown) 
+//                {
+//                  int linecolor = graphColor(BLACK);
+//                  graphText(msp->desc, offset, xold);
+//                  graphColor(linecolor);
+//                  descShown = 1;
+//                }
+//            }
+//
+//          xold = x;
+//          yold = y;
+//          inNotFilled = 0;
+//        }
+//      }
+//    
+//    graphColor(oldcolor); graphLinewidth(oldLinew);
+//}
+
+
+//static int isHorizontalMSP(MSP *msp) {
+//
+//    if (!msp->qname)
+//      g_error("No qname set in MSP - I need this to associate it with one of the sequences");
+//
+//    if (!strcasecmp(msp->qname, qname) || !strcmp(msp->qname, "@1"))
+//        return 1;
+//    else
+//        return 0;
+//}
+//
+//
+//static int isVerticalMSP(MSP *msp) {
+//
+//    if (!msp->qname) 
+//      g_error("No qname set in MSP - I need this to associate it with one of the sequences");
+//
+//    if (!strcasecmp(msp->qname, sname) || !strcmp(msp->qname, "@2"))
+//        return 1;
+//    else
+//        return 0;
+//}
+
+
+//static void drawAllFeatures(MSP *msp)
+//{
+//  float sx, ex, 
+//    y, 
+//    height,           /* box height/width */
+//    boxHeight=10,
+//    textHeight,
+//    oldLinew;
+//  int i;
+//  float posx=0, posy=0;               /* Next series to be drawn */
+//
+//  int top, bottom ;
+//  float feature_boundary, feature_top, feature_bottom, feature_strand ;
+//  float forward_y, reverse_y, depth ;
+//  float old_line_width ;
+//
+//
+//  /* Set forward/reverse strand gene drawing positions. */
+//  graphGetBounds(&top, &bottom) ;
+//  feature_boundary = 3.0 ;                                /* Allows for line thickness etc... */
+//  feature_top = TopBorder + slen4 ;
+//  feature_bottom = bottom ;
+//  feature_strand = feature_top + ((feature_bottom - feature_top + 1) / 2) ;
+//
+//  forward_y = feature_top + feature_boundary ;
+//  reverse_y = feature_strand + feature_boundary ;
+//  depth = (feature_strand - feature_boundary) - (feature_top + feature_boundary) - fonth ;
+//
+//
+//  /* Draw a strand separator. */
+//  old_line_width = graphLinewidth(2) ;
+//  graphLine(LeftBorder - 1, feature_strand, LeftBorder - 1 + qlen4, feature_strand) ;
+//  graphLinewidth(old_line_width) ;
+//
+//
+//  /* Now draw the genes. */
+//  drawGenes(msp, forward_y, reverse_y, depth) ;
+//
+//
+//  if (fsArr)
+//    {
+//      /* Loop through each feature-series in the feature-series array and set coords to 0 */
+//      for (i = 0; i < gArrayGetLen(fsArr); i++)
+//      {
+//        FeatureSeries *fs = &g_array_index(fsArr, FeatureSeries, i);
+//        fs->y = fs->x = 0;
+//      }
+//    }
+//
+//  textHeight = fonth;
+//  boxHeight = fonth;
+//
+//  oldLinew = graphLinewidth(1);
+//
+//  BlxStrand strand = BLXSTRAND_NONE;
+//  
+//  if (selfcomp || !reversedScale) 
+//    strand = BLXSTRAND_FORWARD;
+//  else 
+//    strand = BLXSTRAND_REVERSE;
+//
+//
+//  for (; msp; msp = msp->next)
+//    {    
+//      height = boxHeight;
+//
+//      if (mspHasFs(msp))
+//      {
+//        sx = seq2graphX(mspGetQStart(msp));
+//        ex = seq2graphX(mspGetQEnd(msp));
+//
+//        if (msp->qStrand != strand)
+//          y = reverse_y ;
+//        else
+//          y = forward_y ;
+//
+//          if (!mspShowFs(msp))
+//          continue;
+//
+//        /* Adjust height to score */
+//        if (msp->score > 0)
+//          {
+//            height = boxHeight * msp->score / 100.0;
+//          }
+//
+//        if (fsBottomOn && (isHorizontalMSP(msp) || (selfcomp && isVerticalMSP(msp))))
+//          {
+//            /* HORIZONTAL AXIS (X) */
+//                  
+//            if (msp->type == BLXMSP_XY_PLOT)
+//              {
+//                XdrawSEGxy(msp, mspGetFsRightEdge(msp, &posx, fonth*(fsPlotHeight+1)));
+//              }
+//            else if (msp->type == BLXMSP_FS_SEG)
+//              {
+//                XdrawSEG(msp, mspGetFsRightEdge(msp, &posx, boxHeight+textHeight));
+//              }
+//          }
+//
+//        if (fsRightOn &&  (isVerticalMSP(msp) || (selfcomp && isHorizontalMSP(msp))))
+//          {
+//            /* VERTICAL AXIS (Y) */
+//
+//            if (msp->type == BLXMSP_XY_PLOT)
+//              {
+//                YdrawSEGxy(msp, mspGetFsBottomEdge(msp, &posy, fonth*(fsPlotHeight+1)));
+//              }
+//            else if (msp->type == BLXMSP_FS_SEG)
+//              {
+//                YdrawSEG(msp, mspGetFsBottomEdge(msp, &posy, boxHeight+textHeight));
+//              }
+//          }
+//
+//        graphColor(oldcolor); 
+//        graphLinewidth(oldLinew);
+//      }
+//    }
+//
+//  return ;
+//}
+
+
+//static void drawGenes(MSP *msp, float forward_y, float reverse_y, float depth)
+//{
+//  gboolean bump_genes = FALSE ;                                   /* Make this user settable... */
+//
+//  float height,               /* box height/width */
+//    sy, ey, midy, x, y, oldLinew ;
+//
+//  height = fonth ;
+//
+//  oldLinew = graphLinewidth(1);
+//
+//  BlxStrand strand = BLXSTRAND_NONE;
+//  if (selfcomp || !reversedScale) 
+//    strand = BLXSTRAND_FORWARD;
+//  else 
+//    strand = BLXSTRAND_REVERSE;
+//
+//
+//  if (bump_genes)
+//    {
+//      MSP *gene_msp, *tmp ;
+//      GList *exon_intron_list = NULL ;
+//      GeneStrandStruct strand_genes = {NULL} ;
+//
+//      /* MSP's are in any old order and only some are exons/introns, here we make a list of
+//       * intron/exon MSP's and then sort that list into transcripts for drawing... */
+//
+//      /* Sort all introns/exons by gene and position within gene. */
+//      gene_msp = tmp = msp ;
+//      for ( ; tmp ; tmp = tmp->next)
+//      {
+//        if (tmp->score < 0)
+//          exon_intron_list = g_list_append(exon_intron_list, tmp) ;
+//      }
+//      exon_intron_list = g_list_sort(exon_intron_list, compareMSPs) ;
+//
+//
+//#ifdef ED_G_NEVER_INCLUDE_THIS_CODE
+//      g_list_foreach(exon_intron_list, printMSP, NULL) ;
+//#endif /* ED_G_NEVER_INCLUDE_THIS_CODE */
+//
+//
+//      /* Produce two lists, one for each strand, of genes sorted by position from the sorted intron/exon list. */
+//      strand_genes.strand = '+' ;
+//      g_list_foreach(exon_intron_list, getGenePositionsCB, &strand_genes) ;
+//      strand_genes.forward_genes = g_list_sort(strand_genes.forward_genes, compareGenes) ;
+//      strand_genes.forward_genes = g_list_first(strand_genes.forward_genes) ;
+//
+//      strand_genes.strand = '-' ;
+//      g_list_foreach(exon_intron_list, getGenePositionsCB, &strand_genes) ;
+//      strand_genes.reverse_genes = g_list_sort(strand_genes.reverse_genes, compareGenes) ;
+//      strand_genes.reverse_genes = g_list_first(strand_genes.reverse_genes) ;
+//
+//      /* Set y offsets for forward and reverse stranded genes. */
+//      setYoffsets(strand_genes.forward_genes, forward_y, forward_y + depth) ;
+//      setYoffsets(strand_genes.reverse_genes, reverse_y, reverse_y + depth) ;
+//
+//
+//#ifdef ED_G_NEVER_INCLUDE_THIS_CODE
+//      printf("Forward:\n") ;
+//      g_list_foreach(strand_genes.forward_genes, printGene, NULL) ;
+//      printf("Reverse:\n") ;
+//      g_list_foreach(strand_genes.reverse_genes, printGene, NULL) ;
+//      printf("\n") ;
+//#endif /* ED_G_NEVER_INCLUDE_THIS_CODE */
+//
+//      /* Draw the strands. */
+//      oldcolor = graphColor(BLUE); 
+//      g_list_foreach(strand_genes.forward_genes, drawGenesCB, &strand_genes) ;
+//
+//      oldcolor = graphColor(MAGENTA); 
+//      g_list_foreach(strand_genes.reverse_genes, drawGenesCB, &strand_genes) ;
+//
+//      graphColor(oldcolor); 
+//
+//    }
+//  else
+//    {
+//      for (; msp; msp = msp->next)
+//      {    
+//        if (msp->score < 0)
+//          {
+//            if (msp->qStrand != strand)
+//              y = reverse_y ;
+//            else
+//              y = forward_y ;
+//
+//            oldcolor = graphColor(BLUE); 
+//            drawMSPGene(msp, y) ;
+//
+//            if (selfcomp) /* Draw the boxes on vertical axes too */
+//              {
+//                sy = ceil((float)(mspGetQStart(msp)+MSPoffset - qoffset)/zoom);
+//                ey = ceil((float)(mspGetQEnd(msp)+MSPoffset - qoffset)/zoom);
+//              
+//                sy += TopBorder-1;
+//                ey += TopBorder-1;
+//              
+//                x = LeftBorder + qlen4 + 10;
+//                if (msp->qStrand != strand) x += 20;
+//              
+//                if (msp->score == -1.0) /* EXON */
+//                  {
+//                    oldcolor = graphColor(BLUE); 
+//                    graphRectangle(x, sy, x + height, ey);
+//                  }
+//                else if (msp->score == -2.0) /* INTRON */
+//                  {
+//                    oldcolor = graphColor(BLUE); 
+//                    midy = 0.5 * (sy + ey) ;
+//                    graphLine (x + height/2, sy, x, midy) ;
+//                    graphLine (x + height/2, ey, x, midy) ;
+//                  }
+//              }
+//
+//            graphColor(oldcolor) ;
+//          }
+//      }
+//    }
+//
+//  graphLinewidth(oldLinew) ;
+//
+//  return ;
+//}
+
+
+/* A GCompareFunc() to compare gene MSPs.... */
+//gint compareMSPs(gconstpointer a, gconstpointer b)
+//{
+//  int result = 0 ;
+//  MSP *msp_a = (MSP *)a, *msp_b = (MSP *)b ;
+//
+//  if (!(result = strcmp(msp_a->sname, msp_b->sname)))
+//    {
+//      if (mspGetSStart(msp_a) < mspGetSStart(msp_b))
+//      result = -1 ;
+//      else if (mspGetSStart(msp_a) > mspGetSStart(msp_b))
+//      result = 1 ;
+//      else
+//      {
+//        /* I actually don't think this should ever happen as it means either there are
+//         * duplicates or worse there are overlapping introns/exons within a gene.... */
+//        if (mspGetSEnd(msp_a) < mspGetSEnd(msp_b))
+//          result = -1 ;
+//        else if (mspGetSEnd(msp_a) > mspGetSEnd(msp_b))
+//          result = 1 ;
+//        else
+//          result = 0 ;
+//      }
+//    }
+//
+//  return result ;
+//}
+
+
+///* A GFunc() to record start/end of genes. */
+//static void getGenePositionsCB(gpointer data, gpointer user_data)
+//{
+//  MSP *msp = (MSP *)data ;
+//  GeneStrand strand_genes = (GeneStrand)user_data ;
+//  GList *gene_list ;
+//  GeneData gene ;
+//
+//  /* We need genes added according to strand... */
+//  if (msp->qframe[1] == strand_genes->strand)
+//    {
+//      const char *curr_name = NULL ;
+//      int curr_length ;
+//
+//      if (strand_genes->strand == '+')
+//      gene_list = strand_genes->forward_genes ;
+//      else
+//      gene_list = strand_genes->reverse_genes ;
+//
+//      if (gene_list)
+//      {
+//        /* Look at last element, this is the last gene we added. */
+//        gene_list = g_list_last(gene_list) ;
+//
+//        curr_name = (((GeneData)(gene_list->data))->name) ;
+//        curr_length = strlen(curr_name) - 1 ;
+//      }
+//
+//      /* If there's no gene or we are starting a new gene then just add to the list,
+//       * otherwise record latest msp end position. */
+//      if (!gene_list || strncmp(mspGetSName(msp), curr_name, curr_length) != 0)
+//      {
+//        gene = new GeneDataStruct ;
+//        gene->name = mspGetSName(msp) ;
+//        gene->start = mspGetSStart(msp) ;
+//        gene->end = mspGetSEnd(msp) ;
+//        gene->strand = msp->qframe[1] ;
+//        gene->msp_start = msp ;
+//
+//        gene_list = g_list_append(gene_list, gene) ;
+//      }
+//      else
+//      {
+//        gene = (GeneData)(gene_list->data) ;
+//
+//        gene->end = mspGetSEnd(msp) ;
+//        gene->msp_end = msp ;
+//      }
+//
+//      if (strand_genes->strand == '+')
+//      strand_genes->forward_genes = gene_list ;
+//      else
+//      strand_genes->reverse_genes = gene_list ;
+//    }
+//
+//  return ;
+//}
+//
+//
+
+/* A GCompareFunc() to compare genes for position.... */
+//gint compareGenes(gconstpointer a, gconstpointer b)
+//{
+//  int result = 0 ;
+//  GeneData gene_a = (GeneData)a, gene_b = (GeneData)b ;
+//
+//  if (gene_a->strand == '+' && gene_b->strand == '-')
+//    result = -1 ;
+//  else if (gene_a->strand == '-' && gene_b->strand == '+')
+//    result = 1 ;
+//  else
+//    {
+//      if (gene_a->start < gene_b->start)
+//      result = -1 ;
+//      else if (gene_a->start > gene_b->start)
+//      result = 1 ;
+//      else
+//      result = 0 ;
+//    }
+//
+//  return result ;
+//}
+
+
+
+//static void setYoffsets(GList *gene_list, float min_offset, float max_offset)
+//{
+//  GList *curr_ptr, *next_ptr ;
+//  float curr_y = 0.0, bump_incr = 0.5 ;
+//
+//
+//  /* Go through the gene list comparing, reordering and assigning y offsets to the genes
+//   * so they can be drawn without overlapping. */
+//  curr_ptr = gene_list ;
+//  next_ptr = curr_ptr->next ;
+//  curr_y = min_offset - bump_incr ;
+//
+//  /* Go through all genes. */
+//  while (curr_ptr)
+//    {
+//      GList *list_ptr = g_list_first(gene_list) ;
+//
+//      /* For each gene look at all the preceding genes and to decide its y offset so it is
+//       * bumped correctly. */
+//      while (list_ptr)
+//      {
+//        GeneData list_gene = (GeneData)list_ptr->data ;
+//        GeneData curr_gene = (GeneData)curr_ptr->data ;
+//
+//        if (list_ptr == curr_ptr)
+//          {
+//            /* This gene overlaps all previous ones and needs a new offset. */
+//            curr_y += bump_incr ;
+//            if (curr_y > max_offset)
+//              curr_y = max_offset ;
+//
+//            curr_gene->y_pos = curr_y ;
+//            break ;
+//          }
+//        else if (curr_gene->start > list_gene->end)
+//          {
+//            /* This gene coes not overlap the list gene so give is the same offset. */
+//            curr_gene->y_pos = list_gene->y_pos ;
+//
+//            if (list_ptr->next != curr_ptr)
+//              {
+//                list_ptr = g_list_remove(list_ptr, curr_gene) ;
+//                list_ptr = g_list_insert_before(gene_list, list_ptr->next, curr_gene) ;
+//              }
+//
+//            break ;
+//          }
+//        else
+//          {
+//            /* This gene overlaps the list gene so move on to the next one. */
+//            list_ptr = g_list_next(list_ptr) ;
+//          }
+//      }
+//
+//      /* update curr/next until we get to the end of the list... */
+//      if ((curr_ptr = next_ptr))
+//      next_ptr = curr_ptr->next ;
+//    }
+//
+//  return ;
+//}
+//
+
+///* A GFunc() to record start/end of genes. */
+//static void drawGenesCB(gpointer data, gpointer user_data_unused)
+//{
+//  GeneData gene = (GeneData)data ;
+//  MSP *msp ;
+//
+//  msp = gene->msp_start ;
+//  do
+//    {
+//      drawMSPGene(msp, gene->y_pos) ;
+//
+//      msp = msp->next ;
+//    } while (msp && msp != gene->msp_end) ;
+//
+//  return ;
+//}
+//
+//
+//static void drawMSPGene(MSP *msp, float y_offset)
+//{
+//  float height,               /* box height/width */
+//    sx, ex, midx ;
+//
+//  height = fonth ;
+//
+//  sx = seq2graphX(mspGetQStart(msp));
+//  ex = seq2graphX(mspGetQEnd(msp));
+//
+//  if (msp->score == -1.0) /* EXON */
+//    {
+//      graphRectangle(sx, y_offset, ex, y_offset + height);
+//    }
+//  else if (msp->score == -2.0) /* INTRON */
+//    {
+//
+//      midx = 0.5 * (sx + ex) ;
+//      graphLine (sx, y_offset + height/2, midx, y_offset) ;
+//      graphLine (ex, y_offset + height/2, midx, y_offset) ;
+//    }
+//
+//  return ;
+//}
+//
+
+//static void printMSP(gpointer data, gpointer user_data)
+//{
+//  MSP *msp = (MSP *)data ;
+//  
+//  printf("%s:\t%d,%d\t->\t%d,%d\n",
+//       msp->sname, msp->sstart, msp->send, msp->qstart, msp->qend) ;
+//  
+//
+//  return ;
+//}
+//
+
+//static void printGene(gpointer data, gpointer user_data)
+//{
+//  GeneData gene = (GeneData)data ;
+//  
+//  printf("%s: '%c' %d -> %d   is at position: %f\n",
+//       gene->name, gene->strand, gene->start, gene->end, gene->y_pos) ;
+//  
+//
+//  return ;
+//}
+
+
+//static void fsSelAll(void)
+//{
+//  int i;
+//  graphActivate(fsGraph);
+//  
+//  for (i = 0; i < gArrayGetLen(fsArr); i++) 
+//    {
+//      FeatureSeries *fs = &g_array_index(fsArr, FeatureSeries, i);
+//      fs->on = 1;
+//      graphBoxDraw(fsBoxStart+i, WHITE, BLACK);
+//    }
+//}
+//
+//static void fsSelNone(void)
+//{
+//  int i;
+//  graphActivate(fsGraph);
+//  
+//  for (i = 0; i < gArrayGetLen(fsArr); i++) 
+//    {
+//      FeatureSeries *fs = &g_array_index(fsArr, FeatureSeries, i);
+//      fs->on = 0;
+//      graphBoxDraw(fsBoxStart+i, BLACK, WHITE);
+//    }
+//}
+//
+//static void fsSelNoCurves(void)
+//{
+//  int i;
+//  graphActivate(fsGraph);
+//  
+//  for (i = 0; i < gArrayGetLen(fsArr); i++) 
+//    {
+//      FeatureSeries *fs = &g_array_index(fsArr, FeatureSeries, i);
+//      
+//      if (fs->xy) 
+//      {
+//        fs->on = 0;
+//        graphBoxDraw(fsBoxStart+i, BLACK, WHITE);
+//      }
+//    }
+//}
+//
+//static void fsSelNoSegments(void)
+//{
+//  int i;
+//  graphActivate(fsGraph);
+//  
+//  for (i = 0; i < gArrayGetLen(fsArr); i++) 
+//    {
+//      FeatureSeries *fs = &g_array_index(fsArr, FeatureSeries, i);
+//      
+//      if (!fs->xy) 
+//      {
+//        fs->on = 0;
+//        graphBoxDraw(fsBoxStart+i, BLACK, WHITE);
+//      }
+//    }
+//}
+//
+//static void fsToggleBottom(void)
+//{
+//    fsBottomOn = !fsBottomOn;
+//    selectFeatures();
+//}
+//static void fsToggleRight(void)
+//{
+//    fsRightOn = !fsRightOn;
+//    selectFeatures();
+//}
+//static void fsToggleAnnBottom(void)
+//{
+//    fsAnnBottomOn = !fsAnnBottomOn;
+//    selectFeatures();
+//}
+//static void fsToggleAnnRight(void)
+//{
+//    fsAnnRightOn = !fsAnnRightOn;
+//    selectFeatures();
+//}
+//static void fsToggleEndLines(void)
+//{
+//    fsEndLinesOn = !fsEndLinesOn;
+//    selectFeatures();
+//}
+//static void fsSel(int box, double x_unused, double y_unused, int modifier_unused)
+//{
+//    if (box-fsBoxStart < 0 || box-fsBoxStart > gArrayGetLen(fsArr))
+//      return;
+//    
+//    FeatureSeries *fs = &g_array_index(fsArr, FeatureSeries, box - fsBoxStart);
+//    int *on = &fs->on;
+//
+//    graphActivate(fsGraph);
+//
+//
+//    if (*on) {
+//      *on = 0;
+//      graphBoxDraw(box, BLACK, WHITE);
+//    }
+//    else {
+//      *on = 1;
+//      graphBoxDraw(box, WHITE, BLACK);
+//    }
+//
+//}
+//static void setfsPlotHeight(char *cp)
+//{
+//    fsPlotHeight = atof(cp);
+//}
+//    
+//
+//void selectFeatures(void)
+//{
+//  int i, box;
+//  float y=1.0;
+//
+//  if (!graphActivate(fsGraph))
+//    {
+//      fsGraph = graphCreate (TEXT_SCROLL, "Feature Series Selection Tool", 0, 0, 0.4, 0.6);
+//    }
+//  graphPop();
+//  graphRegister(PICK, fsSel);
+//
+//  if (1 /* dotterWindow */) {
+//
+//    box = graphButton("Show bottom series", fsToggleBottom, 1, y);
+//    if (!fsBottomOn) graphBoxDraw(box, BLACK, WHITE);
+//    else graphBoxDraw(box, WHITE, BLACK);
+//    y += 1.5;
+//
+//    box = graphButton("Show right series", fsToggleRight, 1, y);
+//    if (!fsRightOn) graphBoxDraw(box, BLACK, WHITE);
+//    else graphBoxDraw(box, WHITE, BLACK);
+//    y += 1.5;
+//
+//    box = graphButton("Show bottom annotations", fsToggleAnnBottom, 1, y);
+//    if (!fsAnnBottomOn) graphBoxDraw(box, BLACK, WHITE);
+//    else graphBoxDraw(box, WHITE, BLACK);
+//    y += 1.5;
+//
+//    box = graphButton("Show right annotations", fsToggleAnnRight, 1, y);
+//    if (!fsAnnRightOn) graphBoxDraw(box, BLACK, WHITE);
+//    else graphBoxDraw(box, WHITE, BLACK);
+//    y += 1.5;
+//
+//    box = graphButton("Draw lines at segment ends", fsToggleEndLines, 1, y);
+//    if (!fsEndLinesOn) graphBoxDraw(box, BLACK, WHITE);
+//    else graphBoxDraw(box, WHITE, BLACK);
+//    y += 2;
+//  }
+//
+//  sprintf(fsPlotHeighttx, "%.1f", fsPlotHeight);
+//  graphText("Height of curves (XY series):", 1, y);
+//  graphTextScrollEntry (fsPlotHeighttx, 6, 4, 31, y, setfsPlotHeight);
+//  y += 2;
+//
+//  graphLinewidth(0.1);
+//  graphLine(0, y, 2000, y);
+//  y += 0.5;
+//
+//  graphText("Pick to select/unselect series", 1, y);
+//  y += 1.5;
+//  graphButton("All", fsSelAll, 1, y);
+//  graphButton("No curves", fsSelNoCurves, 13, y);
+//  graphButton("No segments", fsSelNoSegments, 24, y);
+//  fsBoxStart = 1+graphButton("None", fsSelNone, 6, y);
+//  y += 2;
+//
+//  graphTextBounds(50, gArrayGetLen(fsArr) * 1.5 + y + 5);
+//
+//  for (i = 0; i < gArrayGetLen(fsArr); i++)
+//    {
+//      float  margin = 0.1;
+//      FeatureSeries *fs = &g_array_index(fsArr, FeatureSeries, i);
+//
+//      box = graphBoxStart();
+//      graphText(fs->name, 1, y);      
+//      graphRectangle(1 - margin, y - margin, 1 + margin + strlen(fs->name), y + 1 + margin);
+//      graphBoxEnd();
+//
+//      if (!fs->on) 
+//      {
+//        graphBoxDraw(box, BLACK, WHITE);
+//      }
+//      else 
+//      {
+//        graphBoxDraw(box, WHITE, BLACK);
+//      }
+//      
+//      y += 1.5;
+//    }
+//
+//  graphRedraw();
+//
+//  return ;
+//}
+//
+//
+//float fsTotalHeight(MSP *msplist)
+//{
+//    int i;
+//    float maxy = 0;
+//      
+//    if (!fsArr || !gArrayGetLen(fsArr))
+//      {
+//      return 0.0;
+//      }
+//
+//    for (i = 0; i < gArrayGetLen(fsArr); i++) 
+//      {
+//      FeatureSeries *fs = &g_array_index(fsArr, FeatureSeries, i);
+//      fs->y = fs->x = 0;
+//      }
+//      
+//    for (msp = msplist; msp; msp = msp->next) 
+//      {
+//        if (mspShowFs(msp))
+//        {
+//          if (msp->type == BLXMSP_XY_PLOT) 
+//            {
+//              mspGetFsBottomEdge(msp, &maxy, fsPlotHeight+1);
+//            }
+//          else if (msp->type == BLXMSP_FS_SEG) 
+//            {
+//              mspGetFsBottomEdge(msp, &maxy, 1+1);
+//            }
+//        }
+//      }
+//    
+//    return maxy + 2;
+//}
+
+
+/* Callbacks to be called when the dotter parameters have changed. */
+static gboolean onZoomFactorChanged(GtkWidget *widget, const gint responseId, gpointer data)
+{
+  gboolean result = TRUE;
+  
+  GtkWidget *dotterWindow = GTK_WIDGET(data);
+  DotterProperties *properties = dotterGetProperties(dotterWindow);
+  
+  const char *text = gtk_entry_get_text(GTK_ENTRY(widget));
+  gdouble newValue = g_strtod(text, NULL);
+  
+  if (newValue <= 0)
+    {
+      g_critical("Zoom factor must be greater than zero.\n");
+      result = FALSE;
+    }
+  else if (newValue != properties->dotterWinCtx->zoomFactor)
+    {
+      properties->dotterWinCtx->zoomFactor = newValue;
+      redrawAll(dotterWindow, NULL);
+    }
+  
+  return result;
+}
+
+static gboolean onQStartChanged(GtkWidget *widget, const gint responseId, gpointer data)
+{
+  GtkWidget *dotterWindow = GTK_WIDGET(data);
+  DotterProperties *properties = dotterGetProperties(dotterWindow);
+  DotterWindowContext *dwc = properties->dotterWinCtx;
+  
+  const char *text = gtk_entry_get_text(GTK_ENTRY(widget));
+  int newValue = convertStringToInt(text);
+  
+  /* If display coords are negated, we must un-negate it before we use it */
+  if (negateDisplayCoord(dwc->dotterCtx, TRUE))
+    newValue *= -1;
+  
+  if (!valueWithinRange(newValue, &dwc->dotterCtx->refSeqFullRange))
+    g_warning("Limiting reference sequence start to range %d -> %d.\n", dwc->dotterCtx->refSeqFullRange.min(), dwc->dotterCtx->refSeqFullRange.max());
+  
+  boundsLimitValue(&newValue, &dwc->dotterCtx->refSeqFullRange);
+  
+  gboolean changed = setStartCoord(dotterWindow, dwc, TRUE, newValue);
+  
+  /* If it's a self comparison, also update the vertical range. */
+  if (dwc->selfComp)
+    changed = setStartCoord(dotterWindow, dwc, FALSE, newValue) || changed;
+
+  /* Check the crosshair is still in range and if not clip it */
+  updateOnSelectedCoordsChanged(dotterWindow);
+
+  if (changed)
+    redrawAll(dotterWindow, NULL);
+  
+  return TRUE;
+}
+
+static gboolean onQEndChanged(GtkWidget *widget, const gint responseId, gpointer data)
+{
+  GtkWidget *dotterWindow = GTK_WIDGET(data);
+  DotterProperties *properties = dotterGetProperties(dotterWindow);
+  DotterWindowContext *dwc = properties->dotterWinCtx;
+  
+  const char *text = gtk_entry_get_text(GTK_ENTRY(widget));
+  int newValue = convertStringToInt(text);
+
+  /* If display coords are negated, we must un-negate it before we use it */
+  if (negateDisplayCoord(dwc->dotterCtx, TRUE))
+    newValue *= -1;
+  
+  if (!valueWithinRange(newValue, &dwc->dotterCtx->refSeqFullRange))
+    g_warning("Limiting reference sequence end to range %d -> %d.\n", dwc->dotterCtx->refSeqFullRange.min(), dwc->dotterCtx->refSeqFullRange.max());
+
+  boundsLimitValue(&newValue, &dwc->dotterCtx->refSeqFullRange);
+
+  gboolean changed = setEndCoord(dotterWindow, dwc, TRUE, newValue);
+  
+  /* If it's a self comparison, also update the vertical range. */
+  if (dwc->selfComp)
+    changed = setEndCoord(dotterWindow, dwc, FALSE, newValue) || changed;
+  
+  /* Check the crosshair is still in range and if not clip it */
+  updateOnSelectedCoordsChanged(dotterWindow);
+
+  if (changed)
+    redrawAll(dotterWindow, NULL);
+
+  return TRUE;
+}
+
+static gboolean onSStartChanged(GtkWidget *widget, const gint responseId, gpointer data)
+{
+  GtkWidget *dotterWindow = GTK_WIDGET(data);
+  DotterProperties *properties = dotterGetProperties(dotterWindow);
+  DotterWindowContext *dwc = properties->dotterWinCtx;
+  
+  const char *text = gtk_entry_get_text(GTK_ENTRY(widget));
+  int newValue = convertStringToInt(text);
+  
+  /* If display coords are negated, we must un-negate it before we use it */
+  if (negateDisplayCoord(dwc->dotterCtx, FALSE))
+    newValue *= -1;
+  
+  if (!valueWithinRange(newValue, &dwc->dotterCtx->matchSeqFullRange))
+    g_warning("Limiting vertical sequence start to range %d -> %d.\n", dwc->dotterCtx->matchSeqFullRange.min(), dwc->dotterCtx->matchSeqFullRange.max());
+
+  boundsLimitValue(&newValue, &dwc->dotterCtx->matchSeqFullRange);
+  
+  gboolean changed = setStartCoord(dotterWindow, dwc, FALSE, newValue);
+
+  /* Check the crosshair is still in range and if not clip it */
+  updateOnSelectedCoordsChanged(dotterWindow);
+
+  if (changed)
+    redrawAll(dotterWindow, NULL);
+
+  return TRUE;
+}
+
+static gboolean onSEndChanged(GtkWidget *widget, const gint responseId, gpointer data)
+{
+  GtkWidget *dotterWindow = GTK_WIDGET(data);
+  DotterProperties *properties = dotterGetProperties(dotterWindow);
+  DotterWindowContext *dwc = properties->dotterWinCtx;
+  
+  const char *text = gtk_entry_get_text(GTK_ENTRY(widget));
+  int newValue = convertStringToInt(text);
+  
+  /* If display coords are negated, we must un-negate it before we use it */
+  if (negateDisplayCoord(dwc->dotterCtx, FALSE))
+    newValue *= -1;
+  
+  if (!valueWithinRange(newValue, &dwc->dotterCtx->matchSeqFullRange))
+    g_warning("Limiting vertical sequence end to range %d -> %d.\n", dwc->dotterCtx->matchSeqFullRange.min(), dwc->dotterCtx->matchSeqFullRange.max());
+
+  boundsLimitValue(&newValue, &dwc->dotterCtx->matchSeqFullRange);
+  
+  gboolean changed = setEndCoord(dotterWindow, dwc, FALSE, newValue);
+  
+  /* Check the crosshair is still in range and if not clip it */
+  updateOnSelectedCoordsChanged(dotterWindow);
+
+  if (changed)
+    redrawAll(dotterWindow, NULL);
+  
+  return TRUE;
+}
+
+static gboolean onSlidingWinSizeChanged(GtkWidget *widget, const gint responseId, gpointer data)
+{
+  gboolean result = FALSE;
+  
+  GtkWidget *dotterWindow = GTK_WIDGET(data);
+  DotterProperties *properties = dotterGetProperties(dotterWindow);
+  
+  const char *text = gtk_entry_get_text(GTK_ENTRY(widget));
+  int newValue = convertStringToInt(text);
+
+  GError *error = NULL;
+  gboolean changed = dotplotSetSlidingWinSize(properties->dotplot, newValue, &error);
+  
+  if (error)
+    {
+      reportAndClearIfError(&error, G_LOG_LEVEL_CRITICAL);
+    }
+  else
+    {
+      result = TRUE;
+    }
+  
+  if (changed)
+    redrawAll(dotterWindow, NULL);
+  
+  return result;
+}
+
+
+/* Callback called when the user has changed the 'splice sites on' option */
+static gboolean onSetSpliceSitesOn(GtkWidget *button, const gint responseId, gpointer data)
+{
+  GtkWidget *dotterWindow = GTK_WIDGET(data);
+  DotterProperties *properties = dotterGetProperties(dotterWindow);
+  
+  const gboolean spliceSitesOn = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button));
+  alignmentToolSetSpliceSitesOn(properties->alignmentTool, spliceSitesOn);
+  
+  return TRUE;
+}
+
+/* Callback called when the user has changed the 'breaklines on' option */
+static gboolean onSetBreaklinesOn(GtkWidget *button, const gint responseId, gpointer data)
+{
+  GtkWidget *dotterWindow = GTK_WIDGET(data);
+  DotterProperties *properties = dotterGetProperties(dotterWindow);
+  
+  const gboolean breaklinesOn = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button));
+  dotplotSetBreaklinesOn(properties->dotplot, breaklinesOn);
+  
+  return TRUE;
+}
+
+/* Callback called when the user has changed the 'horizontal labels on' option */
+static gboolean onSetHozLabelsOn(GtkWidget *button, const gint responseId, gpointer data)
+{
+  GtkWidget *dotterWindow = GTK_WIDGET(data);
+  DotterProperties *properties = dotterGetProperties(dotterWindow);
+  
+  const gboolean labelsOn = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button));
+  dotplotSetHozLabelsOn(properties->dotplot, labelsOn);
+  
+  return TRUE;
+}
+
+/* Callback called when the user has changed the 'vertical labels on' option */
+static gboolean onSetVertLabelsOn(GtkWidget *button, const gint responseId, gpointer data)
+{
+  GtkWidget *dotterWindow = GTK_WIDGET(data);
+  DotterProperties *properties = dotterGetProperties(dotterWindow);
+  
+  const gboolean labelsOn = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button));
+  dotplotSetVertLabelsOn(properties->dotplot, labelsOn);
+  
+  return TRUE;
+}
+
+
+/* Callback when we receive a response for the settings dialog */
+static void onResponseSettingsDialog(GtkDialog *dialog, gint responseId, gpointer data)
+{
+  gboolean destroy = TRUE;
+  
+  switch (responseId)
+  {
+    case GTK_RESPONSE_ACCEPT:
+      /* Destroy if successful */
+      destroy = widgetCallAllCallbacks(GTK_WIDGET(dialog), GINT_TO_POINTER(responseId));
+      break;
+      
+    case GTK_RESPONSE_APPLY:
+      widgetCallAllCallbacks(GTK_WIDGET(dialog), GINT_TO_POINTER(responseId));
+      destroy = FALSE;
+      break;
+      
+    case GTK_RESPONSE_CANCEL:
+    case GTK_RESPONSE_REJECT:
+      destroy = TRUE;
+      break;
+      
+    default:
+      break;
+  };
+  
+  if (destroy)
+    {
+      /* If it's a persistent dialog, just hide it, otherwise destroy it */
+      const gboolean isPersistent = GPOINTER_TO_INT(data);
+      
+      if (isPersistent)
+        {
+          gtk_widget_hide_all(GTK_WIDGET(dialog));
+        }
+      else
+        {
+          gtk_widget_destroy(GTK_WIDGET(dialog));
+        }
+    }
+}
+
+
+/* Create the paraemter control widgets for the settings dialog */
+static void settingsDialogParamControls(GtkWidget *dialog, GtkWidget *dotterWindow, const int border)
+{
+  DotterProperties *properties = dotterGetProperties(dotterWindow);
+  DotterWindowContext *dwc = properties->dotterWinCtx;
+  DotterContext *dc = dwc->dotterCtx;
+  
+  /* Put everything in a frame */
+  GtkWidget *frame = gtk_frame_new("Parameters");
+  gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), frame);
+  gtk_container_set_border_width(GTK_CONTAINER(frame), border); 
+  
+  /* Create a table to lay out the widgets */
+  const int numRows = 4;
+  const int numCols = 3;
+  const int xpad = 2;
+  const int ypad = 2;
+  
+  GtkTable *table = GTK_TABLE(gtk_table_new(numRows, numCols, FALSE));
+  gtk_container_add(GTK_CONTAINER(frame), GTK_WIDGET(table));
+  
+  /* Get the start and end values of each range, and negate them for display if necessary */
+  const int qStart = getDisplayCoord(getStartCoord(dwc, TRUE), dc, TRUE);
+  const int qEnd = getDisplayCoord(getEndCoord(dwc, TRUE), dc, TRUE);
+  const int sStart = getDisplayCoord(getStartCoord(dwc, FALSE), dc, FALSE);
+  const int sEnd = getDisplayCoord(getEndCoord(dwc, FALSE), dc, FALSE);
+  
+  GtkWidget *zoomEntry = createTextEntryFromDouble(dotterWindow, table, 1, 2, xpad, ypad, "_Zoom: ", dwc->zoomFactor, onZoomFactorChanged);
+  gtk_widget_set_tooltip_text(zoomEntry, "Zoom out by this factor, e.g. a zoom factor of 3 will shrink the window to 1/3 of its full size");
+
+  GtkWidget *windowEntry = NULL;
+  
+  /* Create the boxes for the sequence ranges. If it's a self comparison, we only really have one range. */
+  if (dwc->selfComp)
+    {
+      createTextEntryFromInt(dotterWindow, table, 2, 2, xpad, ypad, "Range: ", qStart, onQStartChanged);
+      createTextEntryFromInt(dotterWindow, table, 2, 3, xpad, ypad, NULL, qEnd, onQEndChanged);
+      windowEntry = createTextEntryFromInt(dotterWindow, table, 3, 2, xpad, ypad, "Sliding _window size: ", dotplotGetSlidingWinSize(properties->dotplot), onSlidingWinSizeChanged);
+    }
+  else
+    {
+      createTextEntryFromInt(dotterWindow, table, 2, 2, xpad, ypad, "_Horizontal range: ", qStart, onQStartChanged);
+      createTextEntryFromInt(dotterWindow, table, 2, 3, xpad, ypad, NULL, qEnd, onQEndChanged);
+      createTextEntryFromInt(dotterWindow, table, 3, 2, xpad, ypad, "_Vertical range: ", sStart, onSStartChanged);
+      createTextEntryFromInt(dotterWindow, table, 3, 3, xpad, ypad, NULL, sEnd, onSEndChanged);
+      windowEntry = createTextEntryFromInt(dotterWindow, table, 4, 2, xpad, ypad, "Sliding _window size: ", dotplotGetSlidingWinSize(properties->dotplot), onSlidingWinSizeChanged);
+    }
+
+  if (windowEntry)
+    gtk_widget_set_tooltip_text(windowEntry, "The size of the sliding window used to average pairwise scores. Note that this causes the matrix to be recalculated, which may time a long time for a large plot.");
+}
+
+
+/* Create the display control widgets for the settings dialog */
+static void settingsDialogDisplayControls(GtkWidget *dialog, GtkWidget *dotterWindow, const int border)
+{
+  DotterProperties *properties = dotterGetProperties(dotterWindow);
+  DotplotProperties *dotplotProperties = dotplotGetProperties(properties->dotplot);
+  
+  /* Put everything in a vbox inside a frame */
+  GtkWidget *frame = gtk_frame_new("Display");
+  gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), frame);
+  gtk_container_set_border_width(GTK_CONTAINER(frame), border); 
+  
+  GtkWidget *vbox = gtk_vbox_new(FALSE, 0);
+  gtk_container_add(GTK_CONTAINER(frame), vbox);
+
+  /* Create a check box for toggling splice sites on and off */
+  GtkWidget *splicesBtn = gtk_check_button_new_with_mnemonic("Highlight _splice sites");
+  gtk_widget_set_tooltip_text(splicesBtn, "For known high-scoring pairs, highlight splice-sites in the alignment tool");
+  gtk_container_add(GTK_CONTAINER(vbox), splicesBtn);
+  gboolean spliceSitesOn = alignmentToolGetSpliceSitesOn(properties->alignmentTool);
+  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(splicesBtn), spliceSitesOn);
+  widgetSetCallbackData(splicesBtn, onSetSpliceSitesOn, dotterWindow);
+  
+  /* Create a check box for toggling breaklines on and off. If breaklines are
+   * off at startup then it means that there are not multiple sequences, so
+   * the option is not applicable. */
+  static int disableBreaklines = -1; /* -1 for unset; 0 for false; 1 for true */
+
+  if (disableBreaklines == -1)
+    disableBreaklines = !dotplotProperties->breaklinesOn;
+  
+  GtkWidget *breaklinesBtn = gtk_check_button_new_with_mnemonic("Show _breaklines");
+  gtk_container_add(GTK_CONTAINER(vbox), breaklinesBtn);
+  gtk_widget_set_tooltip_text(breaklinesBtn, "Show breaklines between sequences when dottering multiple sequences that have been concatenated");
+  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(breaklinesBtn), dotplotProperties->breaklinesOn);
+  
+  if (disableBreaklines)
+    gtk_widget_set_sensitive(breaklinesBtn, FALSE);
+  
+  widgetSetCallbackData(breaklinesBtn, onSetBreaklinesOn, dotterWindow);
+  
+  /* Add buttons to allow the user to turn off hoz/vert annotation labels */
+  GtkWidget *hozBtn = gtk_check_button_new_with_mnemonic("Show _horizontal sequence labels");
+  gtk_widget_set_tooltip_text(hozBtn, "Show labels for each breakline between multiple sequences on the horizontal axis");
+  gtk_container_add(GTK_CONTAINER(vbox), hozBtn);
+  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(hozBtn), dotplotProperties->hozLabelsOn);
+  widgetSetCallbackData(hozBtn, onSetHozLabelsOn, dotterWindow);
+
+  GtkWidget *vertBtn = gtk_check_button_new_with_mnemonic("Show _vertical sequence labels");
+  gtk_widget_set_tooltip_text(vertBtn, "Show labels for each breakline between multiple sequences on the vertical axis");
+  gtk_container_add(GTK_CONTAINER(vbox), vertBtn);
+  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(vertBtn), dotplotProperties->vertLabelsOn);
+  widgetSetCallbackData(vertBtn, onSetVertLabelsOn, dotterWindow);
+  
+}
+
+
+/* Pop up a dialog to allow the user to set the dotter parameters */
+static void showSettingsDialog(GtkWidget *dotterWindow)
+{
+  DotterProperties *properties = dotterGetProperties(dotterWindow);
+  DotterWindowContext *dwc = properties->dotterWinCtx;
+
+  const DotterDialogId dialogId = DOTDIALOG_SETTINGS;
+  GtkWidget *dialog = getPersistentDialog(dwc->dialogList, dialogId);
+  
+  if (!dialog)
+    {
+      /* Create the dialog */
+      char *title = g_strdup_printf("%sSettings", dotterGetTitlePrefix(dwc->dotterCtx));
+
+      dialog = gtk_dialog_new_with_buttons(title,
+                                           GTK_WINDOW(dotterWindow), 
+                                           GTK_DIALOG_DESTROY_WITH_PARENT,
+                                           GTK_STOCK_OK,
+                                           GTK_RESPONSE_ACCEPT,
+                                           GTK_STOCK_CANCEL,
+                                           GTK_RESPONSE_REJECT,
+                                           NULL);
+
+      g_free(title);
+      
+      /* These 2 calls are required to make the dialog persistent... */
+      addPersistentDialog(dwc->dialogList, dialogId, dialog);
+      g_signal_connect(dialog, "delete-event", G_CALLBACK(gtk_widget_hide_on_delete), NULL);
+      
+      g_signal_connect(dialog, "response", G_CALLBACK(onResponseSettingsDialog), GINT_TO_POINTER(TRUE));
+    }
+  else
+    {
+      /* Clear contents and re-create */
+      dialogClearContentArea(GTK_DIALOG(dialog));
+    }
+
+  /* Create the contents */
+  const int border = 12; /* border around individual sections */
+  settingsDialogParamControls(dialog, dotterWindow, border);
+  settingsDialogDisplayControls(dialog, dotterWindow, border);
+
+  gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT);
+  gtk_widget_show_all(dialog);
+  gtk_window_present(GTK_WINDOW(dialog));
+  
+  return;
+}
+
+
+/* Redraw the main dotter window, the alignment tool and the greyramp tool. Re-calculates borders etc. */
+static void redrawAll(GtkWidget *dotterWindow, gpointer data)
+{
+  gtk_widget_queue_draw(dotterWindow);
+  
+  DotterProperties *properties = dotterGetProperties(dotterWindow);
+  DotterWindowContext *dwc = properties->dotterWinCtx;
+
+  /* Check the range values are the correct way round. */
+  dwc->refSeqRange.sort();
+  dwc->matchSeqRange.sort();
+  
+  if (properties)
+    {
+      gtk_widget_queue_draw(properties->greyrampTool);
+      gtk_widget_queue_draw(properties->alignmentTool);
+      recalcDotplot(properties->dotplot);
+    }
+}
+
+
+/* Refresh the main dotter window, the alignment tool and the greyramp tool. Clears any cached
+ * pixmaps but does not recalculate borders etc. */
+static void refreshAll(GtkWidget *dotterWindow, gpointer data)
+{
+  callFuncOnAllChildWidgets(dotterWindow, (gpointer)widgetClearCachedDrawable);
+  gtk_widget_queue_draw(dotterWindow);
+
+  DotterProperties *properties = dotterGetProperties(dotterWindow);
+  
+  if (properties)
+    {
+      gtk_widget_queue_draw(properties->greyrampTool);
+      callFuncOnAllChildWidgets(properties->alignmentTool, (gpointer)widgetClearCachedDrawable);
+      callFuncOnAllChildWidgets(properties->dotplot, (gpointer)widgetClearCachedDrawable);
+    }
+}
+
+
+static void readmtx(int MATRIX[24][24], char *mtxfile)
+{
+    FILE *fil;
+    int row, col;
+    char line[1025] = "#", *p;
+    
+    char *mtxfileText = g_strdup_printf("%s/%s", getenv("BLASTMAT"), mtxfile);
+  
+    if (!(fil = fopen(mtxfile, "r")) &&
+        !(fil = fopen(mtxfileText, "r")))
+      {
+        char *msg = g_strdup_printf("Failed to open score matrix file %s - not found in ./ or $BLASTMAT/.\n", mtxfile);
+        g_error(msg, mtxfile);
+        g_free(msg);
+      }
+  
+    g_free(mtxfileText);
+    mtxfileText = NULL;
+    
+    /* Ignore header ... */
+    while (!feof(fil) && *line == '#')
+      {
+        fgets(line, 1024, fil);
+      }
+
+    /* Read in the pairwise scores */
+    for (row = 0; row < 24; row++)
+    {
+        if (!(fgets(line, 1024, fil)))
+            g_error("Wrong number of rows in matrix file: %d (should be 24).\n", row);
+
+        p = strtok(line, " \t\n");
+        for (col = 0; col < 24; col++) 
+        {
+            while (*p == '*' || isalpha((int) *p))
+                p = strtok(NULL, " \t\n");
+          
+            if (!p) 
+              g_error("Error on row %d in matrix file.\n", row);
+
+            MATRIX[row][col] = atoi(p);
+
+            p = strtok(NULL, " \t\n");
+        }
+    }
+
+    g_message("I read your score matrix %s.\n", mtxfile);
+    fclose(fil);
+}
+
+static void mtxcpy(int dest[24][24], int src[24][24])
+{
+    int i, j;
+
+    for (i = 0 ; i < 24 ; i++)
+        for (j = 0 ; j < 24 ; j++)
+            dest[i][j] = src[i][j];
+}
+
+
+static void DNAmatrix(int mtx[24][24])
+{
+    int i, j;
+
+    for (i = 0 ; i < 6 ; i++)
+        for (j = 0 ; j < 6 ; j++) {
+            if ( i < 4 && j < 4) 
+                mtx[i][j] = (i == j ? 5 : -4);
+            else 
+                mtx[i][j] = -4;
+        }
+}
+
+
+/* Utility to get the length of the given GArray. Returns 0 if array is null. */
+//static int gArrayGetLen(GArray *array)
+//{
+//  return (array ? array->len : 0);
+//}
+
+
+/***********************************************************
+ *               Show/hide parts of the view               *
+ ***********************************************************/
+
+/* Show/hide the greyramp tool, bringing it to the front */
+static void showHideGreyrampTool(GtkWidget *dotterWindow, const gboolean show)
+{
+  DotterProperties *properties = dotterGetProperties(dotterWindow);
+
+  if (properties && properties->greyrampWindow && GTK_IS_WIDGET(properties->greyrampWindow))
+    {
+      /* Get the parent widget for the greyramp too. This is the container if docked or the
+       * window otherwise */
+      GtkWidget *parent = properties->windowsDocked ? properties->greyrampContainer : properties->greyrampWindow;
+
+      if (parent && show)
+        {
+          /* Show it, and bring it to the front if it's a toplevel window */
+          gtk_widget_show_all(parent);
+      
+          if (GTK_IS_WINDOW(parent))
+            gtk_window_present(GTK_WINDOW(parent));
+
+          /* Hide the minimised version */
+          gtk_widget_hide(properties->greyrampToolMinimised);
+        }
+      else if (parent)
+        {
+          /* Hide it, and show the minimised version instead */
+          gtk_widget_hide(parent);
+          gtk_widget_show_all(properties->greyrampToolMinimised);
+        }
+    }
+}
+
+/* Show/hide the alignment tool, bringing it to the front */
+static void showHideAlignmentTool(GtkWidget *dotterWindow, const gboolean show)
+{
+  DotterProperties *properties = dotterGetProperties(dotterWindow);
+
+  if (properties && properties->alignmentWindow && GTK_IS_WIDGET(properties->alignmentWindow))
+    {
+      /* Get the parent widget for the alignment too. This is the container if docked or the
+       * window otherwise */
+      GtkWidget *parent = properties->windowsDocked ? properties->alignmentContainer : properties->alignmentWindow;
+
+      if (parent && show)
+        {
+          /* Show it, and bring it to the front if it's a toplevel window */
+          gtk_widget_show_all(parent);
+      
+          if (GTK_IS_WINDOW(parent))
+            gtk_window_present(GTK_WINDOW(parent));
+        }
+      else if (parent)
+        {
+          /* Hide it */
+          gtk_widget_hide(parent);
+        }
+
+    }
+}
+
+/* Bring the main dotter window to the front */
+static void showDotterWindow(GtkWidget *dotterWindow)
+{
+  gtk_window_present(GTK_WINDOW(dotterWindow));
+}
+
+
+/* Move the given widget from source to dest */
+static void reparentWidget(GtkWidget *widget, GtkContainer *source, GtkContainer *dest, const gboolean show)
+{
+  g_return_if_fail(widget && source && dest);
+
+  /* If the container ref to the widget is removed it might be destroyed, so make sure there is a
+   * ref to it. */
+  g_object_ref(widget);
+  gtk_container_remove(source, widget);
+  gtk_container_add(dest, widget);
+  g_object_unref(widget);
+
+  /* Hide the old widget */
+  gtk_widget_hide(GTK_WIDGET(source));
+
+  /* Show the new widget (only if it's toggled on) */
+  if (show)
+    gtk_widget_show_all(GTK_WIDGET(dest));
+}
+
+
+static void dotterToggleDockWindows(GtkWidget *dotterWindow)
+{
+  g_return_if_fail(dotterWindow);
+
+  DotterProperties *properties = dotterGetProperties(dotterWindow);
+  gboolean greyrampVisible = getToggleMenuStatus(properties->dotterWinCtx->actionGroup, "ToggleGreyramp");
+  gboolean alignmentVisible = getToggleMenuStatus(properties->dotterWinCtx->actionGroup, "ToggleAlignment");
+
+  if (properties->windowsDocked)
+    {
+      reparentWidget(properties->alignmentTool, GTK_CONTAINER(properties->alignmentContainer), GTK_CONTAINER(properties->alignmentWindow), alignmentVisible);
+      reparentWidget(properties->greyrampTool, GTK_CONTAINER(properties->greyrampContainer), GTK_CONTAINER(properties->greyrampWindow), greyrampVisible);
+    }
+  else
+    {
+      reparentWidget(properties->alignmentTool, GTK_CONTAINER(properties->alignmentWindow), GTK_CONTAINER(properties->alignmentContainer), alignmentVisible);
+      reparentWidget(properties->greyrampTool, GTK_CONTAINER(properties->greyrampWindow), GTK_CONTAINER(properties->greyrampContainer), greyrampVisible);
+    }
+
+  properties->windowsDocked = !properties->windowsDocked;
+}
+
+/* Enable/disable menu options that use the selection in the alignment tool. This is a callback
+ * called from the alignment tool following a selection/deselection. */
+void dotterEnableSelectionMenus(DotterWindowContext *dwc, const gboolean enable)
+{
+  enableMenuAction(dwc->actionGroup, "CopySelnCoords", enable);
+  enableMenuAction(dwc->actionGroup, "CopySeln", enable);
+  enableMenuAction(dwc->actionGroup, "ClearSeln", enable);
+}
+
+/* Toggle the given menu item on or off */
+void dotterSetToggleMenuStatus(DotterWindowContext *dwc, 
+                               const char *menuItem,
+                               const gboolean enable)
+{
+  setToggleMenuStatus(dwc->actionGroup, menuItem, enable);
+}
+
+/***********************************************************
+ *                       Help Dialog                       *
+ ***********************************************************/
+
+/* A GtkAboutDialogActivateLinkFunc() called when user clicks on website link in "About" window. */
+static void aboutDialogOpenLinkCB(GtkAboutDialog *about, const gchar *link, gpointer data)
+{
+  GError *error = NULL ;
+    
+  if (!seqtoolsLaunchWebBrowser(link, &error))
+    g_critical("Cannot show link in web browser: \"%s\"", link) ;    
+}
+
+
+/* Shows the 'About' dialog */
+static void showAboutDialog(GtkWidget *parent)
+{
+#if CHECK_GTK_VERSION(2, 6)
+  const gchar *authors[] = {AUTHOR_LIST, NULL} ;
+
+  gtk_about_dialog_set_url_hook(aboutDialogOpenLinkCB, NULL, NULL) ;
+
+  gtk_show_about_dialog(GTK_WINDOW(parent),
+                        "authors", authors,
+                        "comments", dotterGetCommentsString(), 
+                        "copyright", dotterGetCopyrightString(),
+                        "license", dotterGetLicenseString(),
+                        "name", dotterGetAppName(),
+                        "version", dotterGetVersionString(),
+                        "website", dotterGetWebSiteString(),
+                        NULL) ;
+#endif
+  
+  return ;
+}
+
+
+static void showHelpDialog(GtkWidget *dotterWindow)
+{
+  GError *error = NULL;
+  
+  /* The docs should live in /share/doc/seqtools/, in the same parent
+   * directory that our executable's 'bin' directory is in. Open the 'quick
+   * start' page. */
+  char rel_path[100] = "../share/doc/seqtools/dotter_quick_start.html";
+  
+  /* Find the executable's path */
+  char *exe = g_find_program_in_path(g_get_prgname());
+  gboolean ok = (exe != NULL);
+  
+  if (ok)
+    {
+      /* Get the executable's directory */
+      char *dir = g_path_get_dirname(exe);
+      
+      ok = dir != NULL;
+      
+      if (ok)
+        {
+          /* Get the path to the html page */
+          char *path = g_strdup_printf("%s/%s", dir, rel_path);
+          
+          ok = path != NULL;
+          
+          if (ok)
+            {
+              g_message("Opening help page '%s'\n", path);
+              seqtoolsLaunchWebBrowser(path, &error);
+              g_free(path);
+            }
+          
+          g_free(dir);
+        }
+
+      g_free(exe);
+    }
+  
+  if (!ok)
+    {
+      if (error)
+        reportAndClearIfError(&error, G_LOG_LEVEL_CRITICAL);
+      else
+        g_critical("Could not find help documentation: %s\n", rel_path);
+    }
+}
+
+
+/***********************************************************
+ *                          Events                         *
+ ***********************************************************/
+
+static void onQuitMenu(GtkAction *action, gpointer data)
+{
+  /* Close all associated windows */
+  GtkWidget *dotterWindow = GTK_WIDGET(data);
+  DotterContext *dc = dotterGetContext(dotterWindow);
+  dotterContextCloseAllWindows(dc);
+}
+
+static void onCloseMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *dotterWindow = GTK_WIDGET(data);
+  closeWindow(dotterWindow);
+}
+
+static void onSavePlotMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *dotterWindow = GTK_WIDGET(data);
+  DotterProperties *properties = dotterGetProperties(dotterWindow);
+
+  GError *error = NULL;
+  savePlot(properties->dotplot, NULL, NULL, &error);
+  
+  prefixError(error, "Error saving plot. ");
+  reportAndClearIfError(&error, G_LOG_LEVEL_CRITICAL);
+}
+
+static void onExportPlotMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *dotterWindow = GTK_WIDGET(data);
+  DotterProperties *properties = dotterGetProperties(dotterWindow);
+
+  /* Set the background colour to something sensible for printing */
+  GdkColor *defaultBgColor = getGdkColor(DOTCOLOR_BACKGROUND, properties->dotterWinCtx->dotterCtx->defaultColors, FALSE, TRUE);
+  setWidgetBackgroundColor(dotterWindow, defaultBgColor);
+  redrawAll(dotterWindow, NULL);
+  
+  GError *error = NULL;
+  exportPlot(properties->dotplot, GTK_WINDOW(dotterWindow), NULL, &error);
+  
+  prefixError(error, "Error exporting plot. ");
+  reportAndClearIfError(&error, G_LOG_LEVEL_CRITICAL);
+
+  /* Revert the background colour */
+  onPrintColorsChanged(dotterWindow);
+
+  redrawAll(dotterWindow, NULL);
+}
+
+static void onPrintMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *dotterWindow = GTK_WIDGET(data);
+  printDotterWindow(dotterWindow);
+}
+
+static void onSettingsMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *dotterWindow = GTK_WIDGET(data);
+  showSettingsDialog(dotterWindow);
+}
+
+static void onHelpMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *dotterWindow = GTK_WIDGET(data);
+  showHelpDialog(dotterWindow);
+}
+
+static void onAboutMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *dotterWindow = GTK_WIDGET(data);
+  showAboutDialog(dotterWindow);
+}
+
+static void onCloseAlignmentMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *dotterWindow = GTK_WIDGET(data);
+  DotterProperties *properties = dotterGetProperties(dotterWindow);
+
+  if (properties && properties->dotterWinCtx)
+    setToggleMenuStatus(properties->dotterWinCtx->actionGroup, "ToggleAlignment", FALSE);
+}
+
+
+/* Called when the user selects the print menu option for the alignment tool */
+static void onPrintAlignmentMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *dotterWindow = GTK_WIDGET(data);
+  DotterProperties *properties = dotterGetProperties(dotterWindow);
+  DotterWindowContext *dwc = properties->dotterWinCtx;
+  GtkWidget *alignmentTool = properties->alignmentTool;
+
+  /* Set the background colour to something sensible for printing */
+  GdkColor *defaultBgColor = getGdkColor(DOTCOLOR_BACKGROUND, dwc->dotterCtx->defaultColors, FALSE, TRUE);
+  setWidgetBackgroundColor(alignmentTool, defaultBgColor);
+  alignmentToolRedrawAll(alignmentTool);
+
+  /* Make sure cached drawables are re-drawn before we print them. */
+  gdk_window_process_all_updates();
+  
+  GtkWidget *window = gtk_widget_get_toplevel(alignmentTool);
+  blxPrintWidget(alignmentTool, NULL, GTK_WINDOW(window), &dwc->printSettings, &dwc->pageSetup, NULL, TRUE, PRINT_FIT_BOTH);
+
+  /* Revert the background colour */
+  defaultBgColor = getGdkColor(DOTCOLOR_BACKGROUND, dwc->dotterCtx->defaultColors, FALSE, dwc->usePrintColors);
+  setWidgetBackgroundColor(alignmentTool, defaultBgColor);
+  alignmentToolRedrawAll(alignmentTool);
+}
+
+
+/* Utility to copy an integer value as a string to the primary clipboard */
+static void copyIntToPrimaryClipboard(const int val)
+{
+  char *displayText = convertIntToString(val);
+  setPrimaryClipboardText(displayText);
+  g_free(displayText); 
+}
+
+/* Callback called when the user selects the 'copy horizontal coord' menu option */
+static void onCopyHCoordMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *dotterWindow = GTK_WIDGET(data);
+  DotterProperties *properties = dotterGetProperties(dotterWindow);
+  
+  copyIntToDefaultClipboard(properties->dotterWinCtx->refCoord);
+  copyIntToPrimaryClipboard(properties->dotterWinCtx->refCoord);
+}
+
+/* Callback called when the user selects the 'copy vertical coord' menu option */
+static void onCopyVCoordMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *dotterWindow = GTK_WIDGET(data);
+  DotterProperties *properties = dotterGetProperties(dotterWindow);
+
+  copyIntToDefaultClipboard(properties->dotterWinCtx->matchCoord);
+  copyIntToPrimaryClipboard(properties->dotterWinCtx->matchCoord);
+}
+
+/* Callback called when the user selects the 'copy selection' menu option */
+static void onCopySelnMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *dotterWindow = GTK_WIDGET(data);
+  DotterProperties *properties = dotterGetProperties(dotterWindow);
+
+  alignmentToolCopySeln(properties->alignmentTool);
+}
+
+/* Callback called when the user selects the 'copy selection coords' menu option */
+static void onCopySelnCoordsMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *dotterWindow = GTK_WIDGET(data);
+  DotterProperties *properties = dotterGetProperties(dotterWindow);
+
+  alignmentToolCopySelnCoords(properties->alignmentTool);
+}
+
+/* Callback called when the user selects the 'clear selection' menu option */
+static void onClearSelnMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *dotterWindow = GTK_WIDGET(data);
+  DotterProperties *properties = dotterGetProperties(dotterWindow);
+
+  alignmentToolClearSequenceSelection(properties->alignmentTool);
+}
+
+
+/* Callback called when the user selects the 'maximise greyramp' menu option */
+static void onMaximiseGreyrampMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *dotterWindow = GTK_WIDGET(data);
+
+  showHideGreyrampTool(dotterWindow, TRUE);
+}
+
+/* Callback called when the user selects the 'minimise greyramp' menu option */
+static void onMinimiseGreyrampMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *dotterWindow = GTK_WIDGET(data);
+
+  showHideGreyrampTool(dotterWindow, FALSE);
+}
+
+static void onShowHideGreyrampMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *dotterWindow = GTK_WIDGET(data);
+
+  gboolean show = gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(action));
+
+  showHideGreyrampTool(dotterWindow, show);
+}
+
+static void onShowHideAlignmentMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *dotterWindow = GTK_WIDGET(data);
+
+  gboolean show = gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(action));
+
+  showHideAlignmentTool(dotterWindow, show);
+}
+
+static void onToggleCrosshairMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *dotterWindow = GTK_WIDGET(data);
+  DotterProperties *properties = dotterGetProperties(dotterWindow);
+  toggleCrosshairOn(properties->dotplot);
+}
+
+static void onToggleCoordsMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *dotterWindow = GTK_WIDGET(data);
+  DotterProperties *properties = dotterGetProperties(dotterWindow);
+  toggleCrosshairCoordsOn(properties->dotplot);
+}
+
+static void onToggleFullscreenMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *dotterWindow = GTK_WIDGET(data);
+  DotterProperties *properties = dotterGetProperties(dotterWindow);
+  toggleCrosshairFullscreen(properties->dotplot);
+}
+
+static void onTogglePixelmapMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *dotterWindow = GTK_WIDGET(data);
+  DotterProperties *properties = dotterGetProperties(dotterWindow);
+  dotplotTogglePixelmap(properties->dotplot);
+}
+
+static void onToggleGridMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *dotterWindow = GTK_WIDGET(data);
+  DotterProperties *properties = dotterGetProperties(dotterWindow);
+  dotplotToggleGrid(properties->dotplot);
+}
+
+static void onToggleHspMode(GtkRadioAction *action, GtkRadioAction *current, gpointer data)
+{
+  GtkWidget *dotterWindow = GTK_WIDGET(data);
+  DotterProperties *properties = dotterGetProperties(dotterWindow);
+  
+  const DotterHspMode hspMode = (const DotterHspMode)gtk_radio_action_get_current_value(current);
+  setHspMode(properties->dotplot, hspMode);
+}
+
+static void onPrintColorsChanged(GtkWidget *dotterWindow)
+{
+  DotterProperties *properties = dotterGetProperties(dotterWindow);
+  DotterWindowContext *dwc = properties->dotterWinCtx;
+
+  /* Refresh the background colors for both the main window and the alignment tool */
+  GdkColor *defaultBgColor = getGdkColor(DOTCOLOR_BACKGROUND, dwc->dotterCtx->defaultColors, FALSE, dwc->usePrintColors);
+  
+  setWidgetBackgroundColor(dotterWindow, defaultBgColor);
+  setWidgetBackgroundColor(properties->alignmentTool, defaultBgColor);
+  
+  /* Redraw everything */
+  refreshAll(dotterWindow, NULL);
+}
+
+static void onToggleUsePrintColorsMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *dotterWindow = GTK_WIDGET(data);
+  DotterProperties *properties = dotterGetProperties(dotterWindow);
+  DotterWindowContext *dwc = properties->dotterWinCtx;
+  
+  /* Toggle the flag*/
+  dwc->usePrintColors = !dwc->usePrintColors;
+  onPrintColorsChanged(dotterWindow);
+}
+
+static void onToggleBumpExonsMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *dotterWindow = GTK_WIDGET(data);
+  DotterProperties *properties = dotterGetProperties(dotterWindow);
+  dotplotToggleBumpExons(properties->dotplot);
+}
+
+static void onToggleDockWindowsMenu(GtkAction *action, gpointer data)
+{
+  GtkWidget *dotterWindow = GTK_WIDGET(data);
+  dotterToggleDockWindows(dotterWindow);
+}
+
+
+/* Mouse button handler */
+static gboolean onButtonPressDotter(GtkWidget *window, GdkEventButton *event, gpointer data)
+{
+  gboolean handled = FALSE;
+  
+  if (event->type == GDK_BUTTON_PRESS && event->button == 3) /* right click */
+    {
+      GtkMenu *contextMenu = GTK_MENU(data);
+      gtk_menu_popup (contextMenu, NULL, NULL, NULL, NULL, event->button, event->time);
+    }
+  else if (event->type == GDK_BUTTON_PRESS && event->button == 1) /* left click */
+    {
+      /* If the dot-plot was clicked the selected coords will have changed. Perform required updates. */
+      updateOnSelectedCoordsChanged(window);
+      handled = TRUE;
+    }
+  
+  return handled;
+}
+
+/* Mouse button handler for the alignment/greyramp tools */
+static gboolean onButtonPressTool(GtkWidget *greyrampTool, GdkEventButton *event, gpointer data)
+{
+  gboolean handled = FALSE;
+  
+  if (event->type == GDK_BUTTON_PRESS && event->button == 3) /* right click */
+    {
+      GtkMenu *contextMenu = GTK_MENU(data);
+      gtk_menu_popup (contextMenu, NULL, NULL, NULL, NULL, event->button, event->time);
+      handled = TRUE;
+    }
+  
+  return handled;
+}
+
+
+/* Mouse move handler */
+static gboolean onMouseMoveDotter(GtkWidget *window, GdkEventMotion *event, gpointer data)
+{
+  gboolean handled = FALSE;
+  
+  if (event->state & GDK_BUTTON1_MASK)  /* left-drag */
+    {
+      /* If the dot-plot was clicked the selected coords will have changed. Perform required updates. */
+      updateOnSelectedCoordsChanged(window);
+      handled = TRUE;
+    }
+
+  return handled;
+}
+
+
+/* Get the factor to convert between nucleotide and display (e.g. peptide) coords, or 1 if no
+ * conversion is necessary */
+int getResFactor(DotterContext *dc, const gboolean horizontal)
+{
+  return horizontal && dc->blastMode == BLXMODE_BLASTX ? dc->numFrames : 1;
+}
+
+
+/* Returns true if display coordinates should be shown negated for the given scale. */
+static gboolean negateDisplayCoord(DotterContext *dc, const gboolean horizontal)
+{
+  gboolean result = FALSE;
+  
+  if (dc->negateCoords)
+    {
+    if (horizontal)
+      result = dc->hozScaleRev;
+    else 
+      result = dc->vertScaleRev;
+    }
+  
+  return result;
+}
+
+
+/* Convert the given coord to a display coord (just negates it for the display if necessary) */
+int getDisplayCoord(const int coordIn, DotterContext *dc, const gboolean horizontal)
+{
+  int result = coordIn;
+  
+  if (negateDisplayCoord(dc, horizontal))
+    result *= -1;
+  
+  return result;
+}
+
+
+/* Get the currently-selected (i.e. crosshair) coord for the horizontal or 
+ * vertical sequence, as indicated by the bool */
+int getSelectedCoord(DotterWindowContext *dwc, const gboolean horizontal)
+{
+  return (horizontal ? dwc->refCoord : dwc->matchCoord);
+}
+
+
+/* Get the start coord of the display range for the given sequence */
+int getStartCoord(DotterWindowContext *dwc, const gboolean horizontal)
+{
+  int result = UNSET_INT;
+  
+  if (horizontal)
+    result = dwc->dotterCtx->hozScaleRev ? dwc->refSeqRange.max() : dwc->refSeqRange.min();
+  else
+    result = dwc->dotterCtx->vertScaleRev ? dwc->matchSeqRange.max() : dwc->matchSeqRange.min();
+  
+  return result;
+}
+
+/* Get the end coord of the display range for the given sequence */
+int getEndCoord(DotterWindowContext *dwc, const gboolean horizontal)
+{
+  int result = UNSET_INT;
+  
+  if (horizontal)
+    result = dwc->dotterCtx->hozScaleRev ? dwc->refSeqRange.min() : dwc->refSeqRange.max();
+  else
+    result = dwc->dotterCtx->vertScaleRev ? dwc->matchSeqRange.min() : dwc->matchSeqRange.max();
+  
+  return result;
+}
+
+
+
+/* Set the start coord of the display range for the given sequence */
+static gboolean setStartCoord(GtkWidget *dotterWindow, DotterWindowContext *dwc, const gboolean horizontal, const int newValue)
+{
+  gboolean changed = FALSE; 
+  
+  if (horizontal)
+    {
+      if (dwc->dotterCtx->hozScaleRev)
+        changed = dwc->refSeqRange.setMax(newValue);
+      else
+        changed = dwc->refSeqRange.setMin(newValue);
+    }
+  else
+    {
+      if (dwc->dotterCtx->vertScaleRev)
+        changed = dwc->matchSeqRange.setMax(newValue);
+      else
+        changed = dwc->matchSeqRange.setMin(newValue);
+    }
+  
+  return changed;
+}
+
+/* Set the end coord of the display range for the given sequence */
+static gboolean setEndCoord(GtkWidget *dotterWindow, DotterWindowContext *dwc, const gboolean horizontal, const int newValue)
+{
+  gboolean changed = FALSE;
+  
+  if (horizontal)
+    {
+      if (dwc->dotterCtx->hozScaleRev)
+        changed = dwc->refSeqRange.setMin(newValue);
+      else
+        changed = dwc->refSeqRange.setMax(newValue);
+    }
+  else
+    {
+      if (dwc->dotterCtx->vertScaleRev)
+        changed = dwc->matchSeqRange.setMin(newValue);
+      else
+        changed = dwc->matchSeqRange.setMax(newValue);
+    }
+  
+  return changed;
+}
+
+/* Move the given sequence coord by the given number of coords (which can be negative to move 
+ * in the decreasing direction. 'horizontal' indicates whether it's the horizontal or vertical
+ * sequence that we're modifying and 'reverse' indicates whether that sequence's scale is shown reversed. */
+static void incrementCoord(GtkWidget *dotterWindow, 
+                           DotterContext *dc,
+                           int *coord, 
+                           const gboolean reverse, 
+                           const gboolean horizontal, 
+                           const gboolean convertCoords,
+                           const int numCoords)
+{
+  const int incValue = convertCoords ? numCoords * getResFactor(dc, horizontal) : numCoords;
+
+  if (reverse)
+    {
+      *coord -= incValue;
+    }
+  else
+    {
+      *coord += incValue;
+    }
+  
+  updateOnSelectedCoordsChanged(dotterWindow);
+}
+
+
+/* Handle Q key press (Ctrl-Q => close all windows) */
+static gboolean onKeyPressQ(GtkWidget *dotterWindow, const gboolean ctrlModifier)
+{
+  if (ctrlModifier)
+    dotterContextCloseAllWindows(dotterGetContext(dotterWindow));
+  
+  return ctrlModifier;
+}
+
+/* Handle W key press (Ctrl-W => close window) */
+static gboolean onKeyPressW(GtkWidget *widget, const gboolean ctrlModifier)
+{
+  gboolean handled = FALSE;
+
+  if (ctrlModifier)
+    {
+      handled = closeWindow(widget);
+    }
+  
+  return handled;
+}
+
+/* Handle H key press (Ctrl-H => show help dialog) */
+static gboolean onKeyPressH(GtkWidget *dotterWindow, const gboolean ctrlModifier)
+{
+  if (ctrlModifier)
+    showHelpDialog(dotterWindow);
+  
+  return ctrlModifier;
+}
+
+
+/* Handle S key press (Ctrl-S => show settings dialog) */
+static gboolean onKeyPressS(GtkWidget *dotterWindow, const gboolean ctrlModifier)
+{
+  if (ctrlModifier)
+    showSettingsDialog(dotterWindow);
+    
+  return ctrlModifier;
+}
+
+/* Handle G key press (Ctrl-G => show/hide greyramp tool) */
+static gboolean onKeyPressG(GtkWidget *dotterWindow, const gboolean ctrlModifier)
+{
+  if (ctrlModifier)
+    {
+      DotterProperties *properties = dotterGetProperties(dotterWindow);
+      gboolean active = getToggleMenuStatus(properties->dotterWinCtx->actionGroup, "ToggleGreyramp");
+
+      /* Toggle the visiblity */
+      setToggleMenuStatus(properties->dotterWinCtx->actionGroup, "ToggleGreyramp", !active);
+    }
+  
+  return ctrlModifier;
+}
+
+/* Handle A key press (Ctrl-A => show/hide alignment tool) */
+static gboolean onKeyPressA(GtkWidget *dotterWindow, const gboolean ctrlModifier)
+{
+  if (ctrlModifier)
+    {
+      DotterProperties *properties = dotterGetProperties(dotterWindow);
+      gboolean active = getToggleMenuStatus(properties->dotterWinCtx->actionGroup, "ToggleAlignment");
+
+      /* Toggle the visiblity */
+      setToggleMenuStatus(properties->dotterWinCtx->actionGroup, "ToggleAlignment", !active);
+    }
+  
+  return ctrlModifier;
+}
+
+/* Handle C key press (Ctrl-C => copy selection; Shift-Ctrl-C => copy selection coords) */
+static gboolean onKeyPressC(GtkWidget *dotterWindow, 
+                            const gboolean ctrlModifier,
+                            const gboolean shiftModifier)
+{
+  if (ctrlModifier)
+    {
+      DotterProperties *properties = dotterGetProperties(dotterWindow);
+
+      if (shiftModifier)
+        alignmentToolCopySelnCoords(properties->alignmentTool);
+      else
+        alignmentToolCopySeln(properties->alignmentTool);
+    }
+
+  return ctrlModifier;
+}
+
+/* Handle D key press (Ctrl-D => show dotplot) */
+static gboolean onKeyPressD(GtkWidget *dotterWindow, const gboolean ctrlModifier)
+{
+  if (ctrlModifier)
+    showDotterWindow(dotterWindow);
+  
+  return ctrlModifier;
+}
+
+/* Handle K key press (Ctrl-K => dock/undock windows) */
+static gboolean onKeyPressK(GtkWidget *dotterWindow, const gboolean ctrlModifier)
+{
+  if (ctrlModifier)
+    {
+      DotterProperties *properties = dotterGetProperties(dotterWindow);
+      setToggleMenuStatus(properties->dotterWinCtx->actionGroup, "DockWindows", !properties->windowsDocked);
+    }
+  
+  return ctrlModifier;
+}
+
+/* Handle up/down key presses */
+static gboolean onKeyPressUpDown(GtkWidget *dotterWindow, const gboolean isUp, const gboolean modifier)
+{
+  /* Increment/decrement the vertical (i.e. match) sequence coord */
+  DotterProperties *properties = dotterGetProperties(dotterWindow);
+  DotterWindowContext *dwc = properties->dotterWinCtx;
+  
+  const int numCoords = isUp ? -1 : 1;
+  
+  incrementCoord(dotterWindow, dwc->dotterCtx, &dwc->matchCoord, dwc->dotterCtx->vertScaleRev, FALSE, !modifier, numCoords);  
+  return TRUE;
+}
+
+/* Handle left/right key presses */
+static gboolean onKeyPressLeftRight(GtkWidget *dotterWindow, const gboolean isLeft, const gboolean modifier)
+{
+  /* Increment/decrement the horizontal (i.e. reference) sequence coord */
+  DotterProperties *properties = dotterGetProperties(dotterWindow);
+  DotterWindowContext *dwc = properties->dotterWinCtx;
+
+  const int numCoords = isLeft ? -1 : 1;
+  
+  incrementCoord(dotterWindow, dwc->dotterCtx, &dwc->refCoord, dwc->dotterCtx->hozScaleRev, TRUE, !modifier, numCoords);
+  return TRUE;
+}
+
+/* Handle comma/period key presses */
+static gboolean onKeyPressCommaPeriod(GtkWidget *dotterWindow, const gboolean isComma, const gboolean modifier)
+{
+  /* Increment/decrement both sequence coords */
+  DotterProperties *properties = dotterGetProperties(dotterWindow);
+  DotterWindowContext *dwc = properties->dotterWinCtx;
+
+  incrementCoord(dotterWindow, dwc->dotterCtx, &dwc->refCoord, dwc->dotterCtx->hozScaleRev, TRUE, !modifier, isComma ? -1 : 1);
+  incrementCoord(dotterWindow, dwc->dotterCtx, &dwc->matchCoord, dwc->dotterCtx->vertScaleRev, FALSE, !modifier, isComma ? -1 : 1);
+  return TRUE;
+}
+
+/* Handle left/right square bracket presses */
+static gboolean onKeyPressLeftRightBracket(GtkWidget *dotterWindow, const gboolean isLeft, const gboolean modifier)
+{
+  /* Increment the horizontal and decrement the vertical, or vice versa */
+  DotterProperties *properties = dotterGetProperties(dotterWindow);
+  DotterWindowContext *dwc = properties->dotterWinCtx;
+
+  incrementCoord(dotterWindow, dwc->dotterCtx, &dwc->refCoord, dwc->dotterCtx->hozScaleRev, TRUE, !modifier, isLeft ? -1 : 1);
+  incrementCoord(dotterWindow, dwc->dotterCtx, &dwc->matchCoord, dwc->dotterCtx->vertScaleRev, FALSE, !modifier, isLeft ? 1 : -1);
+  return TRUE;
+
+}
+
+/* Handle Esc key press (clear selection) */
+static gboolean onKeyPressEsc(GtkWidget *dotterWindow)
+{
+  DotterProperties *properties = dotterGetProperties(dotterWindow);
+
+  alignmentToolClearSequenceSelection(properties->alignmentTool);
+
+  return TRUE;
+}
+
+
+/* Key presses applicable to all windows */
+gboolean onKeyPressDotter(GtkWidget *widget, GdkEventKey *event, gpointer data)
+{
+  gboolean handled = FALSE;
+  
+  GtkWidget *dotterWindow = GTK_WIDGET(data);
+  
+  const gboolean ctrlModifier = (event->state & GDK_CONTROL_MASK) == GDK_CONTROL_MASK;  
+  const gboolean shiftModifier = (event->state & GDK_SHIFT_MASK) == GDK_SHIFT_MASK;  
+  
+  switch (event->keyval)
+    {
+      case GDK_A:   /* fall through */
+      case GDK_a:   handled = onKeyPressA(dotterWindow, ctrlModifier);              break;
+
+      case GDK_C:   /* fall through */
+      case GDK_c:   handled = onKeyPressC(dotterWindow, ctrlModifier, shiftModifier); break;
+
+      case GDK_D:   /* fall through */
+      case GDK_d:   handled = onKeyPressD(dotterWindow, ctrlModifier);              break;
+
+      case GDK_G:   /* fall through */
+      case GDK_g:   handled = onKeyPressG(dotterWindow, ctrlModifier);              break;
+        
+      case GDK_H:   /* fall through */
+      case GDK_h:   handled = onKeyPressH(dotterWindow, ctrlModifier);              break;
+
+      case GDK_K:   /* fall through */
+      case GDK_k:   handled = onKeyPressK(dotterWindow, ctrlModifier);              break;
+
+      case GDK_Q:   /* fall through */
+      case GDK_q:   handled = onKeyPressQ(dotterWindow, ctrlModifier);              break;
+
+      case GDK_S:   /* fall through */
+      case GDK_s:   handled = onKeyPressS(dotterWindow, ctrlModifier);              break;
+
+      case GDK_W:   /* fall through */
+      case GDK_w:   handled = onKeyPressW(widget, ctrlModifier);                    break;
+
+      case GDK_Escape:        handled = onKeyPressEsc(dotterWindow);
+
+      case GDK_Up:            handled = onKeyPressUpDown(dotterWindow, TRUE, shiftModifier);        break;
+      case GDK_Down:          handled = onKeyPressUpDown(dotterWindow, FALSE, shiftModifier);       break;
+            
+      case GDK_Left:          handled = onKeyPressLeftRight(dotterWindow, TRUE, shiftModifier);     break;
+      case GDK_Right:         handled = onKeyPressLeftRight(dotterWindow, FALSE, shiftModifier);    break;
+            
+      case GDK_comma:         handled = onKeyPressCommaPeriod(dotterWindow, TRUE, shiftModifier);   break;
+      case GDK_less:          handled = onKeyPressCommaPeriod(dotterWindow, TRUE, shiftModifier);   break;
+      case GDK_period:        handled = onKeyPressCommaPeriod(dotterWindow, FALSE, shiftModifier);  break;
+      case GDK_greater:       handled = onKeyPressCommaPeriod(dotterWindow, FALSE, shiftModifier);  break;
+        
+      case GDK_bracketleft:   handled = onKeyPressLeftRightBracket(dotterWindow, TRUE, shiftModifier);        break;
+      case GDK_braceleft:     handled = onKeyPressLeftRightBracket(dotterWindow, TRUE, shiftModifier);        break;
+      case GDK_bracketright:  handled = onKeyPressLeftRightBracket(dotterWindow, FALSE, shiftModifier);       break;
+      case GDK_braceright:    handled = onKeyPressLeftRightBracket(dotterWindow, FALSE, shiftModifier);       break;
+        
+      default: break;
+    }
+  
+  return handled;
+}
+
+
+/***********************************************************
+ *                      Initialisation                     *
+ ***********************************************************/
+
+/* This creates BlxColumnInfo entries for each "column" of data (a misnomer in dotter
+ * because we don't currently display this data in columns! The format comes from blixem which does
+ * display the data in columns, and we use the same parser, and the same data structures, for dotter). */
+GList* dotterCreateColumns()
+{
+  GList *columnList = NULL;
+  
+  /* Create the columns' data structs. The columns appear in the order
+   * that they are added here. */
+  blxColumnCreate(BLXCOL_SEQNAME, FALSE, "Name", G_TYPE_STRING, NULL, 0, TRUE, TRUE, FALSE, FALSE, FALSE, "Name", NULL, NULL, &columnList);
+
+  return columnList;
+}
+
+
+/* Create the UI manager for the menus */
+static GtkUIManager* createUiManager(GtkWidget *window, const DotterHspMode hspMode, GtkActionGroup **actionGroup_out)
+{
+  GtkActionGroup *action_group = gtk_action_group_new ("MenuActions");
+
+  gtk_action_group_add_actions(action_group, menuEntries, G_N_ELEMENTS (menuEntries), window);
+  gtk_action_group_add_toggle_actions(action_group, toggleMenuEntries, G_N_ELEMENTS (toggleMenuEntries), window);
+  gtk_action_group_add_radio_actions(action_group, radioMenuEntries, G_N_ELEMENTS (radioMenuEntries), hspMode, G_CALLBACK(onToggleHspMode), window);
+
+  /* If the HSPs are on initially then we're in hspOnly mode, so we don't show the pixmap; therefore,
+   * only turn the pixelmap on if hsps are off */
+  enableMenuAction(action_group, "TogglePixmap", (hspMode == DOTTER_HSPS_OFF));
+
+  /* Disable menu items that require a selection */
+  enableMenuAction(action_group, "CopySeln", FALSE);
+  enableMenuAction(action_group, "CopySelnCoords", FALSE);
+  enableMenuAction(action_group, "ClearSeln", FALSE);
+  
+  GtkUIManager *ui_manager = gtk_ui_manager_new ();
+  gtk_ui_manager_insert_action_group (ui_manager, action_group, 0);
+  gtk_ui_manager_set_add_tearoffs(ui_manager, TRUE);
+  
+  GtkAccelGroup *accel_group = gtk_ui_manager_get_accel_group (ui_manager);
+  gtk_window_add_accel_group (GTK_WINDOW (window), accel_group);
+
+  if (actionGroup_out)
+    *actionGroup_out = action_group;
+
+  return ui_manager;
+}
+
+
+/* Create a menu. Optionally add it to the given menu bar, if menuBar is not null, with the given label */
+static GtkWidget* createDotterMenu(GtkWidget *window, 
+                                   const char *menuDescription, 
+                                   const char *path, 
+                                   GtkUIManager *ui_manager)
+{
+  GError *error = NULL;
+  if (!gtk_ui_manager_add_ui_from_string (ui_manager, menuDescription, -1, &error))
+    {
+      prefixError(error, "Building menus failed: ");
+      reportAndClearIfError(&error, G_LOG_LEVEL_ERROR);
+    }
+  
+  GtkWidget *menu = gtk_ui_manager_get_widget (ui_manager, path);
+  
+  return menu;
+}
+
+
+static GtkWidget* createDotterWindow(DotterContext *dc, 
+                                     DotterWindowContext *dwc,
+                                     const DotterHspMode hspMode, 
+                                     GtkWidget *dotplot,
+                                     GtkWidget *dotplotContainer, 
+                                     GtkWidget *greyrampContainer,
+                                     GtkWidget *alignmentContainer,
+                                     GtkWidget *greyrampTool,
+                                     GtkWidget *alignmentTool,
+                                     GtkWidget *greyrampToolMinimised,
+                                     const char *exportFileName,
+                                     char *windowColor)
+{ 
+  DEBUG_ENTER("createDotterWindow");
+
+  GtkWidget *dotterWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+  gtk_widget_set_name(dotterWindow, MAIN_WINDOW_NAME);
+  
+  char *title = g_strdup_printf("%s%s vs. %s", dotterGetTitlePrefix(dc), dc->refSeqName, dc->matchSeqName);
+  gtk_window_set_title(GTK_WINDOW(dotterWindow), title);
+  g_free(title);
+  
+  /* Set the parent window in the message handlers' data, now we know it */
+  dc->msgData->parent = GTK_WINDOW(dotterWindow);
+  
+  /* Create the menu bar, and a right-click context menu */
+  dwc->uiManager = createUiManager(dotterWindow, hspMode, &dwc->actionGroup);
+  GtkWidget *menuBar = createDotterMenu(dotterWindow, mainMenuDescription, "/MenuBar", dwc->uiManager);
+  GtkWidget *contextMenu = createDotterMenu(dotterWindow, mainMenuDescription, "/ContextMenu", dwc->uiManager);
+  GtkWidget *contextMenuGreyrampMin = createDotterMenu(dotterWindow, mainMenuDescription, "/MinimisedGreyrampContextMenu", dwc->uiManager);
+  GtkWidget *contextMenuGreyrampMax = createDotterMenu(dotterWindow, mainMenuDescription, "/MaximisedGreyrampContextMenu", dwc->uiManager);
+  GtkWidget *contextMenuAlignment = createDotterMenu(dotterWindow, mainMenuDescription, "/AlignmentContextMenu", dwc->uiManager);
+
+  blxSetWidgetColor(menuBar, windowColor);
+
+  /* We'll set the default window size based on the dotplot/exon widget size, up to a 
+   * max based on screen size. */
+  int maxWidth = 300, maxHeight = 200;
+  gbtools::GUIGetTrueMonitorSizeFraction(dotterWindow, MAX_WINDOW_WIDTH_FRACTION, MAX_WINDOW_HEIGHT_FRACTION, &maxWidth, &maxHeight);
+
+  const int exonViewHeight = 2 * (DEFAULT_EXON_HEIGHT + (2 * DEFAULT_EXON_YPAD));
+  DotplotProperties *dotplotProperties = dotplotGetProperties(dotplot);
+  const int dotplotWidth = getDotplotWidth(dotplot, dotplotProperties);
+  int greyrampWidth = 400; /* roughly */
+  const int alignmentToolHeight = 300; /* roughly */
+
+  /* We'll base the layout on the relative size of the dotplot to the window size - we'll place
+   * the greyramp tool on the same row as the dotplot if it'll fit and we can still display the
+   * entire dotplot (not worrying about exons for now). If it won't fit, we'll place the greyramp
+   * tool on the row below, adjacent to the alignment tool. */
+  /*! \todo Ideally we'd adjust the layout after the user changes the settings, i.e. the zoom or
+   * the range of sequence displayed */
+  gboolean maximise_dotplot = FALSE;
+
+  if (dotplotWidth > maxWidth - greyrampWidth)
+    {
+      maximise_dotplot = TRUE;
+      greyrampWidth = 0; /* on a different row so don't include it in the width calculation */
+    }
+
+  if (MINIMISE_GREYRAMP_DEFAULT)
+    {
+      greyrampWidth = 0; /* full greyramp tool not shown so don't include it in the width calc */
+    }
+
+  int width = dotplotWidth + exonViewHeight + greyrampWidth;
+  int height = getDotplotHeight(dotplot, dotplotProperties) + exonViewHeight + alignmentToolHeight;
+  width = min(width, maxWidth);
+  height = min(height, maxHeight);
+  
+  gtk_window_set_default_size(GTK_WINDOW(dotterWindow), width, height);
+
+  /* Put the widgets in a table */
+  const int numRows = 3;
+  const int numCols = 2;
+  int padding = 0;
+  int row = 0;
+
+  GtkTable *table = GTK_TABLE(gtk_table_new(numRows, numCols, FALSE));
+  gtk_container_add(GTK_CONTAINER(dotterWindow), GTK_WIDGET(table));
+
+  gtk_table_attach(table, menuBar, 0, numCols, row, row + 1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), GTK_SHRINK, padding, padding);
+  ++row;
+
+  if (maximise_dotplot)
+    {
+      /* dotplot spans all columns; alignment tool + greyramp on same row. */
+      gtk_table_attach(table, dotplotContainer, 0, numCols, row, row + 1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), padding, padding);
+      ++row;
+      gtk_table_attach(table, greyrampToolMinimised, 0, numCols, row, row + 1, GTK_SHRINK, GTK_SHRINK, padding, padding);
+      ++row;
+      gtk_table_attach(table, alignmentContainer, 0, 1, row, row + 1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), GTK_SHRINK, padding, padding);
+      gtk_table_attach(table, greyrampContainer, 1, 2, row, row + 1, GTK_SHRINK, GTK_FILL, padding, padding);
+    }
+  else
+    {
+      /* dotplot and greyramp on same row; alignment tool spans all columns */
+      gtk_table_attach(table, dotplotContainer, 0, 1, row, row + 1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), padding, padding);
+      gtk_table_attach(table, greyrampContainer, 1, 2, row, row + 1, GTK_SHRINK, GTK_FILL, padding, padding);
+      ++row;
+      gtk_table_attach(table, greyrampToolMinimised, 0, numCols, row, row + 1, GTK_SHRINK, GTK_SHRINK, padding, padding);
+      ++row;
+      gtk_table_attach(table, alignmentContainer, 0, numCols, row, row + 1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), GTK_SHRINK, padding, padding);
+    }
+
+  gtk_widget_add_events(dotterWindow, GDK_BUTTON_PRESS_MASK);
+  gtk_widget_add_events(dotterWindow, GDK_POINTER_MOTION_MASK);
+  g_signal_connect(G_OBJECT(dotterWindow), "key-press-event", G_CALLBACK(onKeyPressDotter), dotterWindow);
+  g_signal_connect(G_OBJECT(dotterWindow), "motion-notify-event", G_CALLBACK(onMouseMoveDotter), NULL);
+  g_signal_connect(G_OBJECT(dotterWindow), "button-press-event", G_CALLBACK(onButtonPressDotter), contextMenu);
+  g_signal_connect(G_OBJECT(greyrampTool), "button-press-event", G_CALLBACK(onButtonPressTool), contextMenuGreyrampMax);
+  g_signal_connect(G_OBJECT(greyrampToolMinimised), "button-press-event", G_CALLBACK(onButtonPressTool), contextMenuGreyrampMin);
+  g_signal_connect(G_OBJECT(alignmentTool), "button-press-event", G_CALLBACK(onButtonPressTool), contextMenuAlignment);
+  
+  gtk_widget_show_all(dotterWindow);
+  
+  DEBUG_EXIT("createDotterWindow returning ");
+  return dotterWindow;
+}
+
+
+/***********************************************************
+ *                       Utilities                         *
+ ***********************************************************/
+
+
+/* Returns a string which is the name of the Dotter application. */
+const char *dotterGetAppName(void)
+{
+  return DOTTER_TITLE ;
+}
+
+/* Returns a string which is the prefix to window titles. */
+const char *dotterGetTitlePrefix(DotterContext *dc)
+{
+  return dc->abbrevTitle ? DOTTER_PREFIX_ABBREV : DOTTER_PREFIX ;
+}
+
+/* Returns a copyright string for the Dotter application. */
+const char *dotterGetCopyrightString(void)
+{
+  return DOTTER_COPYRIGHT_STRING ;
+}
+
+/* Returns the Dotter website URL. */
+const char *dotterGetWebSiteString(void)
+{
+  return DOTTER_WEBSITE_STRING ;
+}
+
+/* Returns a comments string for the Dotter application. Note that unlike the const
+ * functions, this one allocates a new string which must be free'd by the caller */
+const char *dotterGetCommentsString(void)
+{
+  char *result = g_strdup_printf("%s\n%s\n%s %s\n\n%s\n", 
+                                 DOTTER_TITLE_STRING, 
+                                 gbtools::UtilsGetVersionTitle(),
+                                 UT_COMPILE_PHRASE, 
+                                 UT_MAKE_COMPILE_DATE(), 
+                                 AUTHOR_TEXT);
+
+  return result;
+}
+
+/* Returns a license string for the dotter application. */
+const char *dotterGetLicenseString(void)
+{
+  return DOTTER_LICENSE_STRING ;
+}
+
+/* Returns a string representing the Version/Release/Update of the Dotter code. */
+const char *dotterGetVersionString(void)
+{
+  return DOTTER_VERSION_STRING ;
+}
+
+/* Utility to copy an integer value as a string to the default clipboard */
+void copyIntToDefaultClipboard(const int val)
+{
+  char *displayText = convertIntToString(val);
+  setDefaultClipboardText(displayText);
+  g_free(displayText); 
+}
+
+
+/* Print the main dotter window */
+static void printDotterWindow(GtkWidget *dotterWindow)
+{
+  DotterProperties *properties = dotterGetProperties(dotterWindow);
+
+  /* Set the background colour to something sensible for printing */
+  GdkColor *defaultBgColor = getGdkColor(DOTCOLOR_BACKGROUND, properties->dotterWinCtx->dotterCtx->defaultColors, FALSE, TRUE);
+  setWidgetBackgroundColor(dotterWindow, defaultBgColor);
+  redrawAll(dotterWindow, NULL);
+
+  /* The crosshair on the dotplot does not get cached in the dotplot's drawable,
+   * but we want it to show in the print, so draw it on now. */
+  GtkWidget *dotplot = properties->dotplot;
+  dotplotPrepareForPrinting(dotplot);
+  
+  /* Print the parent of the dotplot, because this contains the exon views as well.
+   * Note that we don't want to print the scrolled window, because that will chop off
+   * parts of the plot that are not currently visible; we want to print the whole plot) */
+  GtkWidget *parent = gtk_widget_get_parent(dotplot);
+
+  /* Do the print */
+  DotterWindowContext *dwc = properties->dotterWinCtx;
+  blxPrintWidget(parent, NULL, GTK_WINDOW(dotterWindow), &dwc->printSettings, &dwc->pageSetup, NULL, TRUE, PRINT_FIT_BOTH);
+  
+  /* Revert the background colour */
+  onPrintColorsChanged(dotterWindow);
+
+  /* Redraw the entire dotplot to make sure the crosshair we added gets cleared */
+  redrawAll(dotterWindow, NULL);
+}
+
+
+/**************************** eof ***************************/
diff --git a/dotterApp/dotter.hpp b/dotterApp/dotter.hpp
new file mode 100644
index 0000000..24f0fb3
--- /dev/null
+++ b/dotterApp/dotter.hpp
@@ -0,0 +1,137 @@
+/*  File: dotter.h
+ *  Author: Erik Sonnhammer, 1999-08-26
+ *  Copyright (c) 2010 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: 
+ * Exported functions:
+ *   Only 3 parameters are mandatory, the rest can be set to NULL.
+ *   A minimal call would look like:
+ *
+ *   dotter(type, 0, 0, qseq, 0, 0, sseq, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+ *
+ *   NOTE: qseq and sseq must be g_malloc'ed in the calling routine.  
+ *   They are g_free'd by Dotter.
+ *----------------------------------------------------------------------------
+ */
+
+#ifndef DEF_DOTTER_H
+#define DEF_DOTTER_H
+
+#include <seqtoolsUtils/blxmsp.hpp>
+
+
+/* Possible graphical formats the plot can be exported as */
+typedef enum _DotterExportFormat
+  {
+    DOTTER_EXPORT_NONE,         /* Don't export the plot to a graphical format */
+    DOTTER_EXPORT_PDF,          /* PDF */
+    DOTTER_EXPORT_PS,           /* Postscript */
+    DOTTER_EXPORT_SVG           /* Scalable vector graphics */
+  } DotterExportFormat;
+
+
+/* Options specifying the initial state for dotter */
+typedef struct _DotterOptions
+  {
+    int qoffset;              /* qoffset + 1 gives the value of the first coord on the ref seq */
+    int soffset;              /* soffset + 1 gives the value of the first coord on the match seq */
+    gboolean selfcall;        /* whether called internally, i.e. so that features/sequences will be piped into dotter rather than read from files */
+    int qlen;                 /* length of the ref seq */
+    int slen;                 /* length of the match seq */
+    int dotterZoom;           /* initial zoom level */
+    int install : 1;          /* whether to add -install to the dotter args (for private colormaps) */
+    int pixelFacset;
+    int seqInSFS;             /* whether the sequences are in the features file, i.e. there are no separate sequence files */
+    
+    float memoryLimit;
+    
+    char *savefile;           /* file to save the dot-plot to (batch mode; saves the dot-matrix so it can be loaded later and interacted with) */
+    char *exportfile;         /* file to export the dot-plot to (batch mode; exports to a graphical format, e.g. pdf or ps. Default is pdf unless file extension indicates otherwise) */
+    char *loadfile;           /* file to load a dot-plot from */
+    char *FSfilename;         /* file containing features i.e. MSPs */
+    char *mtxfile;            /* caller-supplied matrix file */
+    
+    char *winsize;            /* caller-supplied sliding-window size */
+    
+    char *qname;              /* reference (horizontal) sequence name */
+    char *qseq;               /* reference (horizontal) sequence data */
+    char *sname;              /* match (vertical) sequence name */
+    char *sseq;               /* match (vertical) sequence data */
+    
+    gboolean mirrorImage;     /* display mirror image in self comparisons (i.e. so we only have to calculate half of the dot-plot) */
+    gboolean watsonOnly;      /* only show the watson (forward) strand of the ref seq */
+    gboolean crickOnly;       /* only show the crick (reverse) strand of the ref seq */
+    gboolean hspsOnly;        /* only draw HSPs (i.e. don't calculate the dot-plot, just draw lines where we know HSPs should be) */
+    gboolean swapGreyramp;    /* swap the default black/white points on the greyramp tool (inverts the colors) */
+    gboolean breaklinesOn;    /* whether to enable breaklines between sequences */
+    gboolean hozScaleRev;     /* revese the horizontal scale */
+    gboolean vertScaleRev;    /* revese the vertical scale */
+    gboolean negateCoords;    /* negate the displayed coords when the scale is reversed, i.e. so they still appear to increase from left-to-right */
+    gboolean abbrevTitle;     /* abbrev window title prefix to save space */
+    
+    BlxMessageData msgData;   /* data to be passed to the message handlers */
+
+    char *windowColor;        /* if not null, background color for the window */
+  } DotterOptions;
+
+
+void dotter(
+	const BlxBlastMode blastMode, /* Mandatory, one of { BLASTP, BLASTN, BLASTX } 
+			      P -> Protein-Protein
+			      N -> DNA-DNA
+			      X -> DNA-Protein */
+	
+	DotterOptions *options, /* Optional, may be NULL 
+                                   Various options for display features */
+
+	const BlxStrand refSeqStrand,   /* which strand of the reference sequence was passed */
+
+        const BlxStrand matchSeqStrand, /* which strand of the match sequence was passed */
+
+	int   qcenter,	   /* Optional, may be NULL 
+			      Coordinate to centre horisontal sequence on */
+
+	int   scenter,	   /* Optional, may be NULL 
+			      Coordinate to centre horisontal sequence on */
+
+	MSP *MSPs,	   /* Optional, may be NULL
+			      List of MSPs containing genes and blast matches */
+
+	GList *seqList,	   /* Optional, may be NULL
+			      List of all match sequences, as BlxSequences */
+	    
+	int   MSPoff	   /* Optional, may be NULL
+			      Coordinate offset of MSPs */
+);
+
+
+#endif /*  !defined DEF_DOTTER_H */
diff --git a/dotterApp/dotterKarlin.cpp b/dotterApp/dotterKarlin.cpp
new file mode 100644
index 0000000..35ef807
--- /dev/null
+++ b/dotterApp/dotterKarlin.cpp
@@ -0,0 +1,458 @@
+/*  File: dotterKarlin.c
+ *  Author: Erik Sonnhammer, 1995-08-28
+ *  Copyright (c) 2010 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: Karlin/Altschul statistics calculations
+ *----------------------------------------------------------------------------
+ */
+
+
+#include <dotterApp/dotter_.hpp>
+#include <gtk/gtk.h>
+#include <math.h>
+#include <stdlib.h>
+
+
+#define MAXIT 20	/* Maximum number of iterations used in calculating K */
+/* For greater accuracy, set SUMLIMIT to 0.00001 */
+/* For higher speed, set SUMLIMIT to 0.001 */
+#define SUMLIMIT 0.01
+
+
+/* integer power function
+ * Originally submission by John Spouge, 6/25/90
+ * From blast/gish/fct/fct_powi.c
+ */
+double fct_powi(double x, register int n)
+/* x  argument */ 
+/* n  power */
+{
+    int	i;
+    double	y;
+    
+    y = 1.;
+    for (i = abs(n); i > 0; i /= 2) {
+	if (i&1)
+	    y *= x;
+	x *= x;
+    }
+    if (n >= 0)
+	return y;
+    return 1./y;
+}
+
+
+/* fct_gcd(a, b)
+ * Return the greatest common divisor of a and b.
+ * From blast/gish/fct/fct_gcd.c
+ */
+long fct_gcd(long a, long b)
+{
+    long	c;
+    
+    b = abs(b);
+    if (b > a)
+	c=a, a=b, b=c;
+    
+    while (b != 0) {
+	c = a%b;
+	a = b;
+	b = c;
+    }
+    return a;
+}
+
+
+/*
+ * Return values accurate to approx. 16 digits for the quantity exp(x)-1
+ * for all values of x, both large and small.
+ * from blast/gish/fct/fct_expm.c
+ */
+
+double fct_expm1(double x)
+{
+    double absx = ((x < 0) ? -x : x) ;
+    
+    if (absx > .33)
+	return exp(x) - 1.;
+    
+    if (absx < 1.e-16)
+	return x;
+    
+    return x * (1. + x *
+		(0.5 + x * (1./6. + x *
+			    (1./24. + x * (1./120. + x *
+					   (1./720. + x * (1./5040. + x *
+							   (1./40320. + x * (1./362880. + x *
+									     (1./3628800. + x * (1./39916800. + x *
+												 (1./479001600. + x/6227020800.)
+												 ))
+									     ))
+							   ))
+					   ))
+			    )));
+}
+
+
+/* etop() -- given an Expect value, return the associated probability 
+ * From blast/blast/lib/etop.c
+ */
+double etop(double E)
+{
+        return -fct_expm1(-E);
+}
+
+
+/* From blast/blast/lib/karlin.c
+ *
+ *  long	low;	 	 Lowest score (must be negative)    
+ *  long	high;		 Highest score (must be positive)   
+ *  double	*pr;		 Probabilities for various scores   
+ *  double	*lambda;	 Pointer to parameter lambda        
+ *  double	*K;		 Pointer to parmeter K              
+ *  double	*H;		 Pointer to parmeter H              
+ */
+double karlin(long low, long high, double *pr, double *lambda, double *K, double *H)
+{
+
+/**************** Statistical Significance Parameter Subroutine ****************
+
+	Version 1.0	February 2, 1990
+
+	Program by:	Stephen Altschul
+
+	Address:	National Center for Biotechnology Information
+			National Library of Medicine
+			National Institutes of Health
+			Bethesda, MD  20894
+
+	Internet:	altschul at ncbi.nlm.nih.gov
+
+See:	Karlin, S. & Altschul, S.F. "Methods for Assessing the Statistical
+	Significance of Molecular Sequence Features by Using General Scoring
+	Schemes,"  Proc. Natl. Acad. Sci. USA 87 (1990), 2264-2268.
+
+	Computes the parameters lambda and K for use in calculating the
+	statistical significance of high-scoring segments or subalignments.
+
+	The scoring scheme must be integer valued.  A positive score must be
+	possible, but the expected (mean) score must be negative.
+
+	A program that calls this routine must provide the value of the lowest
+	possible score, the value of the greatest possible score, and a pointer
+	to an array of probabilities for the occurence of all scores between
+	these two extreme scores.  For example, if score -2 occurs with
+	probability 0.7, score 0 occurs with probability 0.1, and score 3
+	occurs with probability 0.2, then the subroutine must be called with
+	low = -2, high = 3, and pr pointing to the array of values
+	{ 0.7, 0.0, 0.1, 0.0, 0.0, 0.2 }.  The calling program must also provide
+	pointers to lambda and K; the subroutine will then calculate the values
+	of these two parameters.  In this example, lambda=0.330 and K=0.154.
+
+	The parameters lambda and K can be used as follows.  Suppose we are
+	given a length N random sequence of independent letters.  Associated
+	with each letter is a score, and the probabilities of the letters
+	determine the probability for each score.  Let S be the aggregate score
+	of the highest scoring contiguous segment of this sequence.  Then if N
+	is sufficiently large (greater than 100), the following bound on the
+	probability that S is greater than or equal to x applies:
+	
+		P( S >= x )   <=   1 - exp [ - KN exp ( - lambda * x ) ].
+	
+	In other words, the p-value for this segment can be written as
+	1-exp[-KN*exp(-lambda*S)].
+
+	This formula can be applied to pairwise sequence comparison by assigning
+	scores to pairs of letters (e.g. amino acids), and by replacing N in the
+	formula with N*M, where N and M are the lengths of the two sequences
+	being compared.
+
+	In addition, letting y = KN*exp(-lambda*S), the p-value for finding m
+	distinct segments all with score >= S is given by:
+
+                               2             m-1           -y
+                1 - [ 1 + y + y /2! + ... + y   /(m-1)! ] e
+
+	Notice that for m=1 this formula reduces to 1-exp(-y), which is the same
+	as the previous formula.
+
+*******************************************************************************/
+
+    int		i, j;
+    long	range, lo, hi, first, last;
+    double	up, new_val, sum, Sum, av, beta, oldsum, oldsum2;
+    double	*p = NULL, *P = NULL, *ptrP, *ptr1, *ptr2;
+    double	ratio;
+
+    /* Check that scores and their associated probabilities are valid     */
+
+    if (low >= 0.) {
+	g_critical("Karlin-Altschul statistics error: There must be at least one negative score in the substitution matrix.");
+	return -1.0;
+    }
+
+    for (i=range=high-low; i > -low && pr[i] == 0.0; --i);
+    if (i <= -low) {
+	g_critical("Karlin-Altschul statistics error: A positive score is impossible in the context of the scoring scheme, the residue composition of the query sequence, and the residue composition assumed for the database.");
+	return -1.0;
+    }
+
+    for (sum=i=0; i<=range; sum += pr[i++])
+	if (pr[i] < 0.) {
+	    g_critical("Karlin-Altschul statistics error: Negative probabilities for scores are disallowed.");
+	    return -1.0;
+	}
+
+    if (sum<0.99995 || sum>1.00005)
+      g_message("Score probabilities sum to %.5lf and will be normalized to 1.\n", sum);
+
+    p = (double *)g_malloc(sizeof(*p) * (range+1));
+    for (Sum=low,i=0; i<=range; ++i)
+	Sum += i*(p[i]=pr[i]/sum);
+
+    if (Sum >= 0.) {
+	g_critical("Karlin/Altschul statistics failed due to non-negative expected score: %#0.3lg", Sum);
+	return Sum;
+    }
+
+    /* Calculate the parameter lambda */
+
+    up = 0.5;
+    do {
+	up *= 2;
+	ptr1 = p;
+	for (sum=0,i=low; i<=high; ++i)
+	    sum += *ptr1++ * exp(up*i);
+    } while (sum<1.0);
+    
+    /* Root solving by the bisection method */
+    for (*lambda=0., j=0; j<25; ++j) {
+	new_val = (*lambda+up)/2.0;
+	ptr1 = p;
+	for (sum=0., i=low; i <= high; ++i)
+	    sum += *ptr1++ * exp(new_val*i);
+	if (sum > 1.0)
+	    up = new_val;
+	else
+	    *lambda = new_val;
+    }
+    beta = exp(*lambda);
+
+
+    /* Calculate the relative entropy of the p's and q's, parameter H */
+    ptr1 = p;
+    for (av=0, i=low; i<=high; ++i)
+	av += *ptr1++ *i*exp(*lambda*i);
+    *H = *lambda*av;
+    
+    /* Calculate the parameter K */
+    if (low == -1 || high == 1) {
+	*K = (high == 1 ? av : Sum*Sum/av);
+	*K *= 1.0 - 1./beta;
+	goto OKExit;
+    }
+    Sum = 0.;
+    lo = hi = 0;
+    P = (double *)g_malloc(MAXIT* (range+1) * sizeof(*P));
+    *P = sum = oldsum = oldsum2 = 1.;
+    for (j=0;  j<MAXIT && sum > SUMLIMIT; oldsum = sum, Sum += sum /= ++j) {
+	first = last = range;
+	for (ptrP = P + (hi += high) - (lo += low); ptrP >= P; *ptrP-- =sum) {
+	    ptr1 = ptrP - first;
+	    ptr2 = p + first;
+	    for (sum=0., i=first; i <= last; ++i)
+		sum += *ptr1-- * *ptr2++;
+	    if (first != 0)
+		--first;
+	    if (ptrP-P <= range)
+		--last;
+	}
+	new_val = fct_powi(beta, lo-1);
+	for (sum=0, i=lo; i != 0; ++i)
+	    sum += *++ptrP * (new_val *= beta);
+	for (; i <= hi; ++i)
+	    sum += *++ptrP;
+	oldsum2 = oldsum;
+    }
+
+
+    /* Geometric progression correction terms to accommodate fewer iterations */
+    ratio = oldsum / oldsum2;
+    if (ratio >= (1.0 - SUMLIMIT*0.001))
+      {
+	g_critical ("Value calculated for K was too high due to insufficient iterations.  "
+		   "Fudging it.") ;
+	*K = 0.1 ;
+	goto OKExit ;
+/* was:
+        g_error("Value calculated for K was too high due to insufficient iterations.  "
+       	      "Alternatively, the expected average score is insufficiently negative.") ;
+*/
+      }
+    while (sum > SUMLIMIT*0.01) {
+	oldsum *= ratio;
+	Sum += sum = oldsum / ++j;
+    }
+    
+    for (i=low; p[i-low] == 0.; ++i)
+	;
+    for (j= -i;i<high && j>1;)
+	if (p[++i-low])
+	    j = fct_gcd(j,i);
+    
+    *K = (j*exp(-2.*Sum))/(av*etop(*lambda * j));
+
+OKExit:
+	   
+    g_free(p);
+    g_free(P);
+    return 0;		/* Parameters calculated successfully */
+}
+
+
+/* Adapted from blastp.c */
+int winsizeFromlambdak(gint32 mtx[24][24], int *tob, int abetsize, const char *qseq, const char *sseq, 
+		       double *exp_res_score, double *Lambda)
+{
+    gint32 
+        lows=0, highs=0,
+        range;
+  
+    int    
+	i, j,
+	*n1, *n2,
+	qlen=0, slen=0,
+	retval,
+	n = 100;		/* Nominal size of dot-matrix */
+    double  
+	*fq1, *fq2, *prob, K, H,
+	qij, exp_MSP_score, sum;
+    
+    
+    n1 = (int *)g_malloc((abetsize+4)*sizeof(int));
+    n2 = (int *)g_malloc((abetsize+4)*sizeof(int));
+    fq1 = (double *)g_malloc((abetsize+4)*sizeof(double));
+    fq2 = (double *)g_malloc((abetsize+4)*sizeof(double));
+    
+
+    /* Find high and lows score in score matrix */
+    for (i = 0; i < abetsize; ++i)
+	for (j = 0; j <  abetsize; ++j) {
+	    if (mtx[i][j] < lows ) lows  = mtx[i][j];
+	    if (mtx[i][j] > highs) highs = mtx[i][j];
+	}
+
+
+    /* Sum counts of residues */
+    for (i = 0; i < abetsize; ++i)
+      {
+	n1[i] = 0;
+      }
+    for (i = 0; qseq[i]; ++i)
+      {
+	/* only count unambiguous letters */
+	if (tob[(int)qseq[i]] < abetsize )
+	  {
+	    n1[tob[(int)qseq[i]]]++;
+	    qlen++;
+	  }
+      }
+    for (i = 0; i < abetsize; ++i) n2[i] = 0;
+    for (i = 0; sseq[i]; ++i) {
+	/* only count unambiguous letters */
+	if (tob[(int)sseq[i]] != NA ) {
+	    n2[tob[(int)sseq[i]]]++;
+	    slen++;
+	}
+    }
+		    
+
+    /* Convert counts to frequencies */
+    for (i = 0; i < abetsize; ++i) {
+	fq1[i] = (double)n1[i] / qlen;
+	fq2[i] = (double)n2[i] / slen;
+    }	
+    
+
+    /* Calculate probability of each score */
+    range = highs - lows;
+    prob = (double *)g_malloc(sizeof(double)*(range+1));
+    for (i = 0; i <= range; ++i) prob[i] = 0.0;
+    
+    for (i = 0; i < abetsize; ++i)
+      {
+	for (j = 0; j < abetsize ; ++j)
+	  {
+	    prob[mtx[i][j]-lows] += fq1[i] * fq2[j];
+	  }
+      }
+
+    if ((*exp_res_score = karlin(lows, highs, prob, Lambda, &K, &H)))
+      {
+	g_critical("Setting ad hoc values to winsize=%d and expected score=%.3f", 25, *exp_res_score);
+	return 25;
+      }
+    
+
+    /* Calculate expected score per residue in MSP */
+    *exp_res_score = sum = 0;
+    for (i = 0; i < abetsize; ++i)
+	for (j = 0; j < abetsize ; ++j) {
+	    qij = fq1[i]*fq2[j]*exp(*Lambda*mtx[i][j]); /* Is this correct? */
+	    sum += qij;
+	    *exp_res_score += qij*mtx[i][j];
+	}
+    if (sum -1.0 > 0.0001)
+	g_warning("Warning: SUM(PiPj*exp(Lambda*Sij)) = %f (Should be 1.0)\n", sum);
+
+    exp_MSP_score = (log(n*n) + log(K)) / *Lambda;
+
+    retval = (int) (exp_MSP_score / *exp_res_score + 0.5);
+
+    g_message("Karlin/Altschul statistics for these sequences and score matrix:\n");
+    g_message("   K      = %.3f\n", K);
+    g_message("   Lambda = %.3f\n", *Lambda);
+    g_message("   => Expected MSP score in a %dx%d matrix = %.3f\n", n, n, exp_MSP_score);
+
+    g_message("   Expected residue score in MSP = %.3f\n", *exp_res_score);
+    g_message("   => Expected MSP length = %d\n", retval);
+
+
+    g_free(prob);
+    g_free(n1);
+    g_free(n2);
+    g_free(fq1);
+    g_free(fq2);
+
+    return retval;
+}
+ 
diff --git a/dotterApp/dotterMain.cpp b/dotterApp/dotterMain.cpp
new file mode 100644
index 0000000..6481498
--- /dev/null
+++ b/dotterApp/dotterMain.cpp
@@ -0,0 +1,915 @@
+/*  File: dotterMain.c
+ *  Author: esr, 1999-08-26
+ *  Copyright (c) 2010 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: main() function for Dotter application
+ *----------------------------------------------------------------------------
+ */
+
+#include <dotterApp/dotter_.hpp>
+#include <seqtoolsUtils/utilities.hpp>
+#include <seqtoolsUtils/blxGff3Parser.hpp>
+#include <seqtoolsUtils/blxparser.hpp>
+#include <seqtoolsUtils/blxmsp.hpp>
+#include <string.h>
+#include <stdlib.h>
+#include <getopt.h>
+#include <ctype.h>
+#include <unistd.h>
+
+#define UNSET_INT  -1
+
+/* Usage text. This is a duplicate of the text that is in 
+ * doc/User_doc/dotter_usage.txt, so ideally we would get rid of this and use
+ * the text from the file instead; for now, we must update both. */
+
+#define USAGE_TEXT "\
+\n\
+ Dotter - Sequence dotplots with image enhancement tools.\n\
+\n\
+ Usage: dotter [options] <horizontal_sequence> <vertical_sequence>  [X options]\n\
+\n\
+   Where <horizontal_sequence> and <vertical_sequence> are file names for FASTA files\n\
+   containing the two sequences.\n\
+\n\
+   Allowed sequence types:   Protein  -   Protein\n\
+			     DNA      -   DNA\n\
+			     DNA      -   Protein\n\
+\n\
+ Options:\n\
+  -h, --help\n\
+    Show this usage information\n\
+\n\
+  -b <file>, --batch-save=<file>\n\
+    Batch mode; save dot matrix to <file>\n\
+\n\
+  -e <file>, --batch-export=<file>\n\
+    Batch mode; export plot to PDF file <file>\n\
+\n\
+  -l <file>, --load\n\
+    Load dot matrix from <file>\n\
+\n\
+  -m <float>, --memory-limit=<float>\n\
+    Memory usage limit in Mb (default 0.5)\n\
+\n\
+  -z <int>, --zoom\n\
+    Set zoom (compression) factor\n\
+\n\
+  -p <int>, --pixel-factor\n\
+    Set pixel factor manually (ratio pixelvalue/score)\n\
+\n\
+  -W <int>, --window-size\n\
+    Set sliding window size. (K => Karlin/Altschul estimate)\n\
+\n\
+  -M <file>, --matrix-file=<file>\n\
+    Read in score matrix from <file> (Blast format; Default: Blosum62).\n\
+\n\
+  -F <file>, --sequence-file\n\
+    Read in sequences and data from <file> (replaces sequencefiles).\n\
+\n\
+  -f <file>, --feature-file\n\
+    Read feature segments from <file>\n\
+\n\
+  -H, --hsp-mode\n\
+    Do not calculate dotplot at startup.\n\
+\n\
+  -R, --reverse-greyramp\n\
+    Reversed Greyramp tool at start.\n\
+\n\
+  -r, --reverse-horizontal\n\
+    Reverse and complement horizontal_sequence (if DNA)\n\
+\n\
+  -v, --reverse-vertical\n\
+    Reverse and complement vertical_sequence (if DNA)\n\
+\n\
+  -D, --disable-mirror\n\
+    Don't display mirror image in self comparisons\n\
+\n\
+  -w, --watson-only\n\
+    For DNA: horizontal_sequence top strand only (Watson)\n\
+\n\
+  -c, --crick-only\n\
+    For DNA: horizontal_sequence bottom strand only (Crick)\n\
+\n\
+  -q <int>, --horizontal-offset=<int>\n\
+    Horizontal_sequence offset\n\
+\n\
+  -s <int>, --vertical-offset=<int>\n\
+    Vertical_sequence offset\n\
+\n\
+  --horizontal-type=p|d\n\
+    Horizontal_sequence type ('p' for peptide or 'd' for DNA)\n\
+\n\
+  --vertical-type=p|d\n\
+    Vertical_sequence type ('p' for peptide or 'd' for DNA)\n\
+\n\
+  --abbrev-title-on\n\
+    Abbreviate window title prefixes\n\
+\n\
+  --abbrev-title-off\n\
+    Do not abbreviate window title prefixes\n\
+\n\
+  --session_colour=<colour_str>\n\
+    Set the background colour of the dotter window\n\
+\n\
+  --compiled\n\
+    Show package compile date\n\
+\n\
+  --version\n\
+    Show package version\n\
+\n"
+
+/* Text to show the version */
+#define VERSION_TEXT DOTTER_PACKAGE_VERSION"\n"
+
+
+/* Text to show the authors, version and compile date */
+#define FOOTER_TEXT "\
+-----\n\
+" AUTHOR_TEXT_FULL " \n\
+\n\
+ Reference: Sonnhammer ELL & Durbin R (1995). A dot-matrix program\n\
+ 	    with dynamic threshold control suited for genomic DNA and protein\n\
+ 	    sequence analysis. Gene 167(2):GC1-10.\n\
+\n\
+ See http://www.sanger.ac.uk/resources/software/seqtools/ for more info.\n\
+\n\
+ " DOTTER_COPYRIGHT_STRING "\n\
+ " DOTTER_LICENSE_STRING "\n\
+\n\
+ Version " DOTTER_VERSION_COMPILE "\n\
+\n\
+"
+
+
+static void setDefaultOptions(DotterOptions *options)
+{
+  options->qoffset = 0;
+  options->soffset = 0;
+  options->selfcall = FALSE;
+  options->qlen = UNSET_INT;
+  options->slen = UNSET_INT;
+  options->dotterZoom = 0;
+  options->install = 1;
+  options->pixelFacset = 0;
+  options->seqInSFS = 0;
+  
+  options->memoryLimit = 0.0;
+  
+  options->savefile = NULL;
+  options->exportfile = NULL;
+  options->loadfile = NULL;
+  options->FSfilename = NULL;
+  options->mtxfile = NULL;
+
+  options->winsize = NULL;
+  options->qname = NULL;
+  options->qseq = NULL;
+  options->sname = NULL;
+  options->sseq = NULL;
+  
+  options->mirrorImage = TRUE;
+  options->watsonOnly = FALSE;
+  options->crickOnly = FALSE;
+  options->hspsOnly = FALSE;
+  options->swapGreyramp = FALSE;
+  options->breaklinesOn = TRUE;
+  options->hozScaleRev = FALSE;
+  options->vertScaleRev = FALSE;
+  options->negateCoords = FALSE;
+  options->abbrevTitle = FALSE;
+  
+  options->msgData.titlePrefix = g_strdup(DOTTER_PREFIX);
+  options->msgData.parent = NULL;
+  options->msgData.statusBar = NULL;
+
+  options->windowColor = NULL;
+}
+
+
+/* free the memory used by options (doesn't free the options struct itself) */
+static void freeOptions(DotterOptions *options)
+{
+  g_free(options->msgData.titlePrefix);
+}
+
+
+
+static void strNamecpy(char *dest, char *src)
+{
+  char *cp;
+
+  while (*src && *src == ' ')
+    src++;
+
+  strcpy(dest, src);
+
+  if ((cp = (char *)strchr(dest, ' ')))
+    *cp = 0;
+  if ((cp = (char *)strchr(dest, '\n')))
+    *cp = 0;
+
+  return ;
+}
+
+
+static void addBreakline (MSP **MSPlist, char *name, char *desc, int pos, const int sFrame)
+{
+  MSP *msp = NULL;
+  MSP *lastMsp = NULL;
+  char *cp = NULL;
+
+  if (!*MSPlist) 
+    {
+      /* Create the first msp in the list */
+      msp = createEmptyMsp(&lastMsp, MSPlist);
+    }
+   else
+    {
+      /* Append a new msp to the end of the list */
+      MSP *lastMsp = *MSPlist;
+      while(lastMsp->next) 
+	lastMsp = lastMsp->next;
+
+      msp = createEmptyMsp(&lastMsp, MSPlist);
+    }
+
+  msp->qname = (char*)g_malloc(strlen(name)+1);
+  strcpy(msp->qname, name);
+
+  msp->desc = g_strdup(desc);
+  if ((cp = (char *)strchr(msp->desc, ' ')))
+    *cp = 0;
+  if ((cp = (char *)strchr(msp->desc, '\n')))
+    *cp = 0;
+
+  msp->qRange.set(pos, pos);
+  msp->sRange.set(0, 0);
+  msp->type = BLXMSP_FS_SEG;
+  msp->score = 100.0;
+
+  gdk_color_parse("#00ff00", &msp->fsColor);
+  gboolean failures[1];
+  gdk_colormap_alloc_colors(gdk_colormap_get_system(), &msp->fsColor, 1, TRUE, TRUE, failures);
+//   insertFS(msp, "chain_separator");
+}		      
+
+
+/* Print the usage text to stderr */
+static void showUsageText(const int exitCode)
+{
+  /* Send to stderr if shown due to error, otherwise to stdout */
+  if (exitCode == EXIT_FAILURE)
+    g_message_info("%s%s", USAGE_TEXT, FOOTER_TEXT);
+  else
+    g_message("%s%s", USAGE_TEXT, FOOTER_TEXT);
+}
+
+/* Prints version info to stderr */
+static void showVersionInfo()
+{
+  g_message(VERSION_TEXT);  
+}
+
+/* Prints compiled date (must go to stdout for our build scripts to work) */
+static void showCompiledInfo()
+{
+  g_message("%s\n", UT_MAKE_COMPILE_DATE());  
+}
+
+
+static void validateOptions(DotterOptions *options)
+{
+  options->msgData.titlePrefix = options->abbrevTitle ? g_strdup(DOTTER_PREFIX_ABBREV) : g_strdup(DOTTER_PREFIX);
+}
+
+
+int main(int argc, char **argv)
+{
+  DEBUG_OUT("dotter main\n");
+
+  /* Install error handlers */
+  signal(SIGSEGV, errorHandler);
+  signal(SIGFPE, errorHandler);
+
+  static DotterOptions options;
+  setDefaultOptions(&options);
+  
+  char   
+      line[MAXLINE+1],
+      *curChar, *cc, *cq,  
+      *qfilename, *sfilename,
+      text[MAXLINE+1];
+
+  FILE *qfile, *sfile;
+  MSP *MSPlist = NULL;
+  GList *seqList = NULL;
+  
+  /* MSPlist above is obsolete and should be replaced by featureLists, which contains all the MSPs
+   * but in GLists in an array indexed by type. Initialise each GList to NULL. */
+  GArray* featureLists[BLXMSP_NUM_TYPES];
+  int typeId = 0;
+  for ( ; typeId < BLXMSP_NUM_TYPES; ++typeId)
+    {
+      featureLists[typeId] = g_array_new(TRUE, FALSE, sizeof(MSP*));
+    }
+  
+  static gboolean showHelp = FALSE;
+  static gboolean showVersion = FALSE;
+  static gboolean showCompiled = FALSE;
+  static gboolean hozScaleRev = FALSE;
+  static gboolean vertScaleRev = FALSE;
+  static BlxSeqType qSeqType = BLXSEQ_NONE;
+  static BlxSeqType sSeqType = BLXSEQ_NONE;
+  
+  /* The strand stuff is a bit hacky, because dotter was originally never designed to deal with
+   * reverse match seq strands, so match and ref seq strands work in different ways. If the ref seq
+   * strand is reversed then the horizontal scale is reversed as well. (Because the 'active' (top) strand
+   * in Blixem is always the reverse strand if the display is reversed. Note that for DNA matches both 
+   * strands are always shown anyway, so the -r option essentially just swaps which strand is shown at 
+   * the top of the alignment tool, and of course reverses the direction of the display.)
+   * The vertical scale was never originally designed to be reversed in dotter. I've 
+   * added the vertScaleRev flag in case we might want to do this in the future, but this is currently
+   * always set to false, even if we have the reverse match seq strand (which is indicated with the -v option). */
+  BlxStrand qStrand = BLXSTRAND_FORWARD;
+  BlxStrand sStrand = BLXSTRAND_FORWARD;
+
+  gtk_parse_args(&argc, &argv);
+  
+  /* Get the input args. We allow long args, so we need to create a long_options array */
+  static struct option long_options[] =
+    {
+      {"abbrev-title-off",	no_argument,        &options.abbrevTitle, 0},
+      {"abbrev-title-on",	no_argument,        &options.abbrevTitle, 1},
+      {"version",		no_argument,        &showVersion, 1},
+      {"compiled",		no_argument,        &showCompiled, 1},
+      {"reverse-h-display",	no_argument,        &hozScaleRev, 1},
+      {"reverse-v-display",	no_argument,        &vertScaleRev, 1},
+
+      {"help",                  no_argument,        0, 'h'},
+      {"batch-save",            required_argument,  0, 'b'},
+      {"batch-export",          required_argument,  0, 'e'},
+      {"load",                  required_argument,  0, 'l'},
+      {"memory-limit",          required_argument,  0, 'm'},
+      {"zoom",                  required_argument,  0, 'z'},
+      {"pixel-factor",          required_argument,  0, 'p'},
+      {"window-size",           required_argument,  0, 'W'},
+      {"matrix-file",           required_argument,  0, 'M'},
+      {"sequence-file",         required_argument,  0, 'F'},
+      {"feature-file",          required_argument,  0, 'f'},
+      {"hsp-mode",              no_argument,        0, 'H'},
+      {"reverse-greyramp",      no_argument,        0, 'R'},
+      {"reverse-horizontal",    no_argument,        0, 'r'},
+      {"reverse-vertical",      no_argument,        0, 'v'},
+      {"disable-mirror",        no_argument,        0, 'D'},
+      {"watson-only",           no_argument,        0, 'w'},
+      {"crick-only",            no_argument,        0, 'c'},
+      {"horizontal-offset",     required_argument,  0, 'q'},
+      {"vertical-offset",       required_argument,  0, 's'},
+      {"horizontal-type",       required_argument,  0, 0},
+      {"vertical-type",         required_argument,  0, 0},
+      {"negate-coords",         no_argument,        0, 'N'},
+      {"session_colour",        required_argument,  0, 0},
+      {"sleep",                 required_argument,  0, 0},
+      {0, 0, 0, 0}
+    };
+
+  const char  *optstring="b:cDe:f:F:hHil:M:m:Np:q:Rrs:SvW:wz:";
+  extern int   optind;
+  extern char *optarg;
+  int          optionIndex; /* getopt_long stores the index into the option struct here */
+  int          optc;        /* the current option gets stored here */
+  int sleepSecs = -1;
+  
+  while ((optc = getopt_long(argc, argv, optstring, long_options, &optionIndex)) != EOF)
+    {
+      switch (optc) 
+        {
+	  case 0:
+            if (long_options[optionIndex].flag != 0)
+              {
+                /* we get here if getopt_long set a flag; nothing else to do */
+              }
+            else if (stringsEqual(long_options[optionIndex].name, "horizontal-type", TRUE))
+              {
+                if (*optarg == 'p')
+                  qSeqType = BLXSEQ_PEPTIDE;
+                else if (*optarg == 'd')
+                  qSeqType = BLXSEQ_DNA;
+                else
+                  g_critical("Invalid value for horizontal-type argument: expected 'p' or 'd'\n");
+              }                
+            else if (stringsEqual(long_options[optionIndex].name, "vertical-type", TRUE))
+              {
+                if (*optarg == 'p')
+                  sSeqType = BLXSEQ_PEPTIDE;
+                else if (*optarg == 'd')
+                  sSeqType = BLXSEQ_DNA;
+                else
+                  g_critical("Invalid value for vertical-type argument: expected 'p' or 'd'\n");
+              }                
+            else if (stringsEqual(long_options[optionIndex].name, "session_colour", TRUE))
+              {
+                options.windowColor = g_strdup(optarg);
+              }
+            else if (stringsEqual(long_options[optionIndex].name, "sleep", TRUE))
+              {
+                sleepSecs = convertStringToInt(optarg);
+              }
+            break;
+          
+	  case '?':
+            break; /* getopt_long already printed an error message */
+	  
+          case 'b': options.savefile = g_strdup(optarg);   break;
+          case 'c': options.crickOnly = TRUE;              break;
+          case 'D': options.mirrorImage = FALSE;           break;
+          case 'e': options.exportfile = g_strdup(optarg); break;
+          case 'f': options.FSfilename = g_strdup(optarg); break;
+          case 'F': 
+            options.seqInSFS = 1;        
+            options.FSfilename = (char*)g_malloc(strlen(optarg)+1);
+            strcpy(options.FSfilename, optarg);            break;
+	  case 'h': 
+            showHelp = TRUE;                               break;
+          case 'H': options.hspsOnly = TRUE;               break;
+          case 'i': options.install = 0;                   break;
+          case 'l': 
+            options.loadfile = (char*)g_malloc(strlen(optarg)+1);
+            strcpy(options.loadfile, optarg);              break;
+          case 'M': 
+            options.mtxfile = (char*)g_malloc(strlen(optarg)+1);
+            strcpy(options.mtxfile, optarg);               break;
+          case 'm': options.memoryLimit = atof(optarg);    break;
+	  case 'N': options.negateCoords = TRUE;           break;
+          case 'p': options.pixelFacset = atoi(optarg);    break;
+          case 'q': options.qoffset = atoi(optarg);        break;
+          case 'R': options.swapGreyramp = TRUE;           break;
+          case 'r': qStrand = BLXSTRAND_REVERSE;	   break;
+          case 's': options.soffset = atoi(optarg);        break;
+          case 'S': 
+            options.selfcall = TRUE;                       break;
+          case 'v': sStrand = BLXSTRAND_REVERSE;	   break;
+          case 'W': 
+            options.winsize = (char*)g_malloc(strlen(optarg)+1);
+            strcpy(options.winsize, optarg);               break;
+          case 'w': options.watsonOnly = TRUE;             break;
+          case 'z': options.dotterZoom = atoi(optarg);     break;
+          default : g_error("Illegal option\n");
+        }
+    }
+
+  if (sleepSecs > 0)
+    usleep(sleepSecs * 1000);
+
+  /* We're in batch mode if we've specified a save file or an export file */
+  const gboolean batchMode = options.savefile || options.exportfile;
+
+  /* We create the window in batch mode only if exporting (because this needs
+   * to print the window); otherwise, don't create the window in batch mode.
+   * Obviously we don't need to create the window if just showing usage info either. */
+  const gboolean createWindow = (options.exportfile || !batchMode) && !showHelp && !showVersion && !showCompiled;
+
+  /* Initialise gtk */
+  if (createWindow)
+    gtk_init(&argc, &argv);
+
+  /* Set the message handlers to use our custom handlers. We normally assign a popup
+   * message handler for critical messages, but don't do this in batch mode because
+   * we can't have user interaction, so use the default handler for all in that case. */
+  g_log_set_default_handler(defaultMessageHandler, &options.msgData);
+
+  if (batchMode && !createWindow)
+    g_log_set_handler(NULL, (GLogLevelFlags)(G_LOG_LEVEL_ERROR | G_LOG_LEVEL_CRITICAL | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION), defaultMessageHandler, &options.msgData);
+  else
+    g_log_set_handler(NULL, (GLogLevelFlags)(G_LOG_LEVEL_ERROR | G_LOG_LEVEL_CRITICAL | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION), popupMessageHandler, &options.msgData);
+
+  if (showHelp)
+    {
+      showUsageText(EXIT_SUCCESS);
+      exit(EXIT_SUCCESS);
+    }
+  
+  if (showVersion)
+    {
+      showVersionInfo();
+      exit (EXIT_SUCCESS);
+    }
+  
+  if (showCompiled)
+    {
+      showCompiledInfo();
+      exit (EXIT_SUCCESS);
+    }
+  
+  validateOptions(&options);
+
+  options.hozScaleRev = hozScaleRev;
+  options.vertScaleRev = vertScaleRev;
+  
+  /* There's a bug if the rev-scale options are not used with the rev strand and vv, so
+   * for now if one option is set, force the other. */
+  if (options.hozScaleRev || qStrand == BLXSTRAND_REVERSE)
+    {
+      options.hozScaleRev = TRUE;
+      qStrand = BLXSTRAND_REVERSE;
+    }
+  
+  if (options.vertScaleRev || sStrand == BLXSTRAND_REVERSE)
+    {
+      options.vertScaleRev = TRUE;
+      sStrand = BLXSTRAND_REVERSE;
+    }
+  
+  
+  if (options.selfcall) /* Blixem/Dotter calling dotter */
+    {
+      DEBUG_OUT("Dotter was called internally.\n");
+      
+      /* The input arguments (following the options) are: qname, qlen, sname, slen. */
+      if (argc - optind < 5 || argc - optind > 5)
+        {
+          g_error("Incorrect number of arguments passed to dotter from internal program call\n"); 
+        }
+      
+      options.qname = g_strdup(argv[optind]);
+      options.qlen = atoi(argv[optind + 1]);
+      options.sname = g_strdup(argv[optind + 2]);
+      options.slen = atoi(argv[optind + 3]);
+      
+      /* Allocate memory for the sequences, now we know their lengths */
+      options.qseq = (char*)g_malloc(sizeof(char) * (options.qlen+1));
+      options.sseq = (char*)g_malloc(sizeof(char) * (options.slen+1));
+
+      /* Read in the sequences from the piped input */
+      DEBUG_OUT("Reading sequences from pipe...\n");
+
+      int l = fread(options.qseq, 1, options.qlen, stdin); 
+      if (l != options.qlen) 
+        {
+          g_error("Only read %d chars to qseq, expected %d\n", l, options.qlen);
+        }
+      options.qseq[options.qlen] = 0;
+
+      l = fread(options.sseq, 1, options.slen, stdin);
+      if (l != options.slen) 
+        {
+          g_error("Only read %d chars to sseq, expected %d\n", l, options.slen);
+        }
+      options.sseq[options.slen] = 0;
+      DEBUG_OUT("...done.\n");
+
+      /* Read in the features from the piped input */
+      DEBUG_OUT("Reading features from pipe...\n");
+      MSP *lastMsp = NULL;
+      
+      while (!feof (stdin))
+        { 
+          /* read in the blxsequences. they are separated by newlines */
+          if (!fgets (text, MAXLINE, stdin) || (unsigned char)*text == (unsigned char)EOF)
+            break;
+
+          int numMsps = 0;
+          BlxSequence *blxSeq = readBlxSequenceFromText(text, &numMsps);
+          seqList = g_list_append(seqList, blxSeq);
+          
+          /* read in the msps for this blx sequence and add them to the msplist */
+          int i = 0;
+          for ( ; i < numMsps; ++i)
+            {
+              /* msps are also separated by newlines */
+              if (!fgets (text, MAXLINE, stdin) || (unsigned char)*text == (unsigned char)EOF)
+                break;
+
+              MSP *msp = createEmptyMsp(&lastMsp, &MSPlist);
+              readMspFromText(msp, text);
+              
+              /* add it to the relevant feature list. */
+              featureLists[msp->type] = g_array_append_val(featureLists[msp->type], msp);
+              
+              /* add the msp to the blxsequence */
+              blxSeq->mspList = g_list_append(blxSeq->mspList, msp);
+              msp->sSequence = blxSeq;
+              
+              /* really horrible hack */
+              if (msp->type == BLXMSP_FS_SEG)
+                {
+                    //insertFS(msp, "chain_separator");
+                  options.breaklinesOn = TRUE;
+                }
+            }
+        }
+        
+      fclose(stdin);
+      DEBUG_OUT("...done.\n");
+    }
+  else if (options.seqInSFS)
+    {
+      /* The -F option has been used, which replaces the input sequence files. We should therefore
+       * only have 0 input arguments*/
+      if (argc - optind > 0)
+        {
+          showUsageText(EXIT_FAILURE);
+          exit(EXIT_FAILURE);
+        }
+    }
+  else
+    {
+
+      /* The input arguments (following the options) are: qfile, sfile, so we should have 2 arguments */
+      if (argc - optind < 2 || argc - optind > 2) 
+        {
+          showUsageText(EXIT_FAILURE);
+          exit(EXIT_FAILURE);
+        }
+
+      if(!(qfile = fopen(argv[optind], "r"))) 
+        {
+          g_error("Cannot open %s\n", argv[optind]); 
+        }
+    
+      qfilename = argv[optind];
+      fseek(qfile, 0, SEEK_END);
+      options.qlen = ftell(qfile);
+      fseek(qfile, 0, SEEK_SET);
+    
+      if ((curChar = (char *)strrchr(argv[optind], '/')))
+        {
+          options.qname = g_strdup(curChar+1);
+        }
+      else
+        {
+          options.qname = g_strdup(argv[optind]);
+        }
+
+      if (!(sfile = fopen(argv[optind+1], "r"))) 
+        {
+          g_error("Cannot open %s\n", argv[optind+1]); 
+        }
+    
+      sfilename = argv[optind+1];
+      fseek(sfile, 0, SEEK_END);
+      options.slen = ftell(sfile);
+      fseek(sfile, 0, SEEK_SET);
+    
+      if ((curChar = (char *)strrchr(argv[optind]+1, '/')))
+        {
+          options.sname = g_strdup(curChar+1);
+        }
+      else
+        {
+          options.sname = g_strdup(argv[optind+1]);
+        }
+
+      /* Allocate memory for the sequences, now we know their lengths */
+      options.qseq = (char*)g_malloc(sizeof(char) * (options.qlen+1));
+      options.sseq = (char*)g_malloc(sizeof(char) * (options.slen+1));
+
+      /* Read in the sequences */
+      int l = 0, count = 0;
+      cc = options.qseq;
+      char *firstdesc = NULL;
+    
+      while (!feof(qfile))
+        {
+          if (!fgets(line, MAXLINE, qfile))
+            {
+              break;
+            }
+      
+          if ((cq = (char *)strchr(line, '\n')))
+            {
+              *cq = 0;
+            }
+
+          /* Name headers */
+          if ((cq = (char *)strchr(line, '>'))) 
+            {
+
+              cq++;
+              if (++l == 1) 
+                {
+
+                  options.qname = (char*)g_malloc(strlen(cq)+1); strNamecpy(options.qname, cq);
+                  firstdesc = g_strdup(cq);
+                }
+              else
+                {
+
+                /* Multiple sequences - add break lines */
+                  if (l == 2) 
+                    {
+
+                      options.breaklinesOn = TRUE;
+
+                      /* Second sequence - add break line to mark first sequence */
+                      addBreakline (&MSPlist, qfilename, firstdesc, options.qoffset, 1);
+                      
+                      /* change sequence name to filename */
+                      options.qname = (char*)g_malloc(strlen(qfilename)+1); strcpy(options.qname, qfilename);
+                    }
+                  
+                  addBreakline (&MSPlist, qfilename, cq, count + options.qoffset, 1);
+                }
+            }
+          else 
+            {
+              /* Read in sequence data */
+              for (cq = line; *cq; cq++) 
+                {
+                  /* Don't know yet what type of sequence it is, so accept chars for both types */
+                  if (isValidIupacChar(*cq, BLXSEQ_DNA) || isValidIupacChar(*cq, BLXSEQ_PEPTIDE))
+                    {
+                      *cc++ = *cq;
+                      count++;
+                    }
+                }
+            }
+        }
+
+      *cc = 0;
+
+      if (firstdesc)
+        {
+          g_free(firstdesc);
+          firstdesc = NULL;
+        }
+
+      l = 0, count = 0;
+      cc = options.sseq;
+    
+      while (!feof(sfile))
+        {
+          if (!fgets(line, MAXLINE, sfile))
+            break;
+          if ((cq = (char *)strchr(line, '\n')))
+            *cq = 0;
+
+          /* Name headers */
+          if ((cq = (char *)strchr(line, '>'))) {
+      	cq++;
+      	if (++l == 1) {
+          options.sname = (char*)g_malloc(strlen(cq)+1); strNamecpy(options.sname, cq);
+      	    firstdesc = g_strdup(cq);
+      	}
+      	else {
+      	  /* Multiple sequences - add break lines */
+
+      	    if (l == 2) {
+      		options.breaklinesOn = TRUE;
+
+      	        /* Second sequence - add break line to mark first sequence */
+      	        addBreakline (&MSPlist, sfilename, firstdesc, options.soffset, 2);
+      		
+      		/* change sequence name to filename */
+      		options.sname = (char*)g_malloc(strlen(sfilename)+1); strcpy(options.sname, sfilename);
+      	    }
+      	    addBreakline (&MSPlist, sfilename, cq, count + options.soffset, 2);
+      	}
+          }
+          else 
+            {
+              for (cq = line; *cq; cq++) 
+                {
+                  /* Don't know yet what type of sequence it is, so accept chars for both types */
+                  if (isValidIupacChar(*cq, BLXSEQ_DNA) || isValidIupacChar(*cq, BLXSEQ_PEPTIDE))
+                    {
+                      *cc++ = *cq;
+                      count++;
+                    }
+                }
+            }
+        }
+      
+      *cc = 0;
+      
+      if (firstdesc)
+        {
+          g_free(firstdesc);
+          firstdesc = NULL;
+        }
+    }
+
+  BlxBlastMode blastMode = BLXMODE_UNSET;
+
+  if (options.FSfilename) 
+    {
+      FILE *file;
+      
+      if (!strcmp(options.FSfilename, "-")) 
+        {
+          file = stdin;
+        }
+      else if(!(file = fopen(options.FSfilename, "r")))
+        {
+          g_error("Cannot open %s\n", options.FSfilename);
+        }
+      
+      GSList *supportedTypes = blxCreateSupportedGffTypeList(BLXSEQ_NONE);
+      GList *columnList = dotterCreateColumns();
+      GError *error = NULL;
+  
+      /* Create a temporary lookup table for BlxSequences so we can link them on GFF ID */
+      GHashTable *lookupTable = g_hash_table_new(g_direct_hash, g_direct_equal);
+
+      parseFS(&MSPlist, file, &blastMode, featureLists, &seqList, columnList, supportedTypes, NULL, &options.qseq, options.qname, NULL, &options.sseq, options.sname, NULL, lookupTable, NULL, &error);
+
+      reportAndClearIfError(&error, G_LOG_LEVEL_CRITICAL);
+      
+      finaliseBlxSequences(featureLists, &MSPlist, &seqList, columnList, 0, BLXSEQ_NONE, -1, NULL, FALSE, lookupTable);
+      
+      blxDestroyGffTypeList(&supportedTypes);
+    }
+
+  /* Determine sequence types */
+  if (qSeqType == BLXSEQ_NONE)
+    {
+      GError *error = NULL;
+      qSeqType = determineSeqType(options.qseq, &error);
+      prefixError(error, "Error starting dotter; could not determine the sequence type for '%s'.\n", options.qname);
+      reportAndClearIfError(&error, G_LOG_LEVEL_ERROR);
+    }
+  
+  if (sSeqType == BLXSEQ_NONE)
+    {
+      GError *error = NULL;
+      sSeqType = determineSeqType(options.sseq, &error);
+      prefixError(error, "Error starting dotter; could not determine the sequence type for '%s'.\n", options.sname);
+      reportAndClearIfError(&error, G_LOG_LEVEL_ERROR);
+    }
+  
+  if (qSeqType == BLXSEQ_PEPTIDE && sSeqType == BLXSEQ_PEPTIDE) 
+    {
+      g_message("\nDetected sequence types: Protein vs. Protein\n");
+      blastMode = BLXMODE_BLASTP;
+    }
+  else if (qSeqType == BLXSEQ_DNA && sSeqType == BLXSEQ_DNA) 
+    {
+      g_message("\nDetected sequence types: DNA vs. DNA\n");
+      blastMode = BLXMODE_BLASTN;
+    }
+  else if (qSeqType == BLXSEQ_DNA && sSeqType == BLXSEQ_PEPTIDE) 
+    {
+      g_message("\nDetected sequence types: DNA vs. Protein\n");
+      blastMode = BLXMODE_BLASTX;;
+    }
+  else
+    {
+      g_error("Illegal sequence types: Protein vs. DNA - turn arguments around!\n");
+    }
+    
+  /* Add -install for private colormaps */
+  if (options.install) 
+    {
+      argvAdd(&argc, &argv, "-install");
+    }
+
+  /* Create the dot-plot */
+  dotter(blastMode, &options, qStrand, sStrand, 0, 0, MSPlist, seqList, 0);
+
+  /* Start the gtk loop to await user interaction */
+  if (createWindow)
+    {
+      gtk_main();
+    }
+  
+  /* destroy the feature lists. note that the stored msps are owned
+   * by the msplist, not by the feature lists */
+  typeId = 0;
+  for ( ; typeId < BLXMSP_NUM_TYPES; ++typeId)
+    g_array_free(featureLists[typeId], FALSE);
+
+  freeOptions(&options);
+
+  g_message("Exiting Dotter\n");
+  return (EXIT_SUCCESS) ;
+}
diff --git a/dotterApp/dotter_.hpp b/dotterApp/dotter_.hpp
new file mode 100644
index 0000000..b110981
--- /dev/null
+++ b/dotterApp/dotter_.hpp
@@ -0,0 +1,394 @@
+/*  File: dotter_.h
+ *  Author: esr, 1999-08-26
+ *  Copyright (c) 2010 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: Internal header for Dotter package-wide code
+ *----------------------------------------------------------------------------
+ */
+
+#ifndef _dotter_p_h_included_
+#define _dotter_p_h_included_
+
+#include <dotterApp/dotter.hpp>
+#include <seqtoolsUtils/version.hpp>
+#include <config.h>
+
+#define NR                    23                        /* Not A residue */
+#define NA                    24                        /* Not A residue */
+#define NUM_READING_FRAMES    3                         /* number of reading frames for protein sequences */
+
+#define DEFAULT_MAJOR_TICK_HEIGHT                   10    /* default height for major tick marks on the scale */
+#define DEFAULT_MINOR_TICK_HEIGHT                   5     /* default height for minor tick marks on the scale */
+#define DEFAULT_X_PADDING                           0     /* default horizontal padding around the dot plot */
+#define DEFAULT_Y_PADDING                           0     /* default vertical padding around the dot plot */
+#define SCALE_LINE_WIDTH                            1     /* the line width in pixels of the scale boundary and tick marks */
+#define MAX_MATRIX_NAME_LENGTH                      500   /* max length of the matrix name */
+#define NUM_COLORS                                  256   /* the number of colors in our greyscale */
+
+extern char *stdcode1[];        /* 1-letter amino acid translation code */
+
+
+/*            dotter program version and information.                        */
+#define DOTTER_TITLE   "Dotter"
+#define DOTTER_PREFIX  "Dotter - "
+#define DOTTER_PREFIX_ABBREV "D: "
+#define DOTTER_DESC    "Dot-matrix plotter for detailed comparision of two sequences."
+
+/* The Seqtools package version should be specified in src/version.m4. autoconf will then set PACKAGE_VERSION in config.h */
+#define DOTTER_VERSION_STRING      SEQTOOLS_VERSION
+#define DOTTER_PACKAGE_VERSION     UT_MAKE_VERSION_INFO_STRING(PACKAGE_NAME, SEQTOOLS_VERSION)
+#define DOTTER_TITLE_STRING        UT_MAKE_TITLE_STRING(DOTTER_TITLE, DOTTER_VERSION_STRING)
+#define DOTTER_VERSION_COMPILE     DOTTER_VERSION_STRING "  " UT_MAKE_COMPILE_DATE()
+
+#define DOTTER_COPYRIGHT_STRING    UT_MAKE_COPYRIGHT_STRING("2010-2015")
+#define DOTTER_WEBSITE_STRING      "http://www.sanger.ac.uk/resources/software/seqtools/"
+#define DOTTER_LICENSE_STRING      UT_MAKE_LICENCE_STRING(DOTTER_TITLE)
+
+
+
+/* Dotter error domain */
+#define DOTTER_ERROR g_quark_from_string("Dotter")
+
+/* Error codes */
+typedef enum
+  {
+    DOTTER_ERROR_INVALID_LENGTH,         /* an invalid alignment length was specified */
+    DOTTER_ERROR_INVALID_WIN_SIZE,       /* an invalid sliding window size was specified */
+    DOTTER_ERROR_OPENING_FILE,           /* error opening file */
+    DOTTER_ERROR_READING_FILE,           /* error reading file */
+    DOTTER_ERROR_SAVING_FILE             /* error saving file */
+  } DotterError;
+
+
+typedef enum _DotterHspMode
+  {
+    DOTTER_HSPS_OFF = 0,            /* HSPs not shown. Make this option 0 so we can use it as a boolean to check if HSPs are shown or not. */
+    DOTTER_HSPS_LINE,               /* draw HSPs as solid lines */
+    DOTTER_HSPS_FUNC,               /* draw HSPs as a function of their score */
+    DOTTER_HSPS_GREYSCALE           /* HSPs are drawn as greyscale, overriding the dot-plot */
+  } DotterHspMode;
+
+/* The following are used to define default colors for certain types of features in Dotter.
+ * One of several different actual colors from the BlxColor struct may be used depending 
+ * on state, e.g. we use a different color if "print colors" (i.e. black and 
+ * white mode) is on. */
+
+typedef enum 
+{
+  DOTCOLOR_MIN,                             /* dummy value so that we don't get a zero ID */
+  
+  DOTCOLOR_BACKGROUND,                      /* background color for widgets */
+  DOTCOLOR_MATCH,                           /* background color for an exact match */
+  DOTCOLOR_CONS,                            /* background color for a conserved match */
+  DOTCOLOR_MISMATCH,                        /* background color for a mismatch */
+  DOTCOLOR_EXON_FILL,                       /* fill color for an exon in the exon view */
+  DOTCOLOR_EXON_LINE,                       /* line color for an exon in the exon view */
+  DOTCOLOR_CDS_FILL,                        /* fill color for a CDS in the exon view (coding region) */
+  DOTCOLOR_CDS_LINE,                        /* line color for a CDS in the exon view (coding region) */
+  DOTCOLOR_UTR_FILL,                        /* fill color for an UTR in the exon view (non-coding/untranslated region) */
+  DOTCOLOR_UTR_LINE,                        /* line color for an UTR in the exon view (non-coding/untranslated region) */
+  DOTCOLOR_CROSSHAIR,                       /* color of the dotplot crosshair */
+  DOTCOLOR_GRID,                            /* color of the dotplot grid */
+  DOTCOLOR_BORDER,                          /* color of the dotplot border */
+  DOTCOLOR_MARKER_FILL,                     /* fill color of the position markers on the greyramp */
+  DOTCOLOR_MARKER_LINE,                     /* line color of the position markers on the greyramp */
+  DOTCOLOR_THRESHOLD_MARKER,                /* line color of the threshold marker on the greyramp */
+  DOTCOLOR_BREAKLINE,                       /* the color of break-lines between sequences */
+  DOTCOLOR_CANONICAL,
+  DOTCOLOR_NON_CANONICAL,
+  
+  DOTCOLOR_NUM_COLORS
+} DotterColorId;
+
+
+/* This enum contains IDs for all the persistent dialogs in the application, and should be used
+ * to access a stored dialog in the dialogList array in the DotterWindowContext. Note that the dialogList
+ * array will contain null entries until the dialogs are created for the first time */
+typedef enum
+  {
+    DOTDIALOG_NOT_PERSISTENT = 0,   /* Reserved for dialogs that do not have an entry in the array */
+    
+    DOTDIALOG_HELP,                 /* The Help dialog */
+    DOTDIALOG_SETTINGS,             /* The Settings dialog */
+    
+    DOTDIALOG_NUM_DIALOGS           /* The number of dialogs. Must always be the last entry in this enum */
+  } DotterDialogId;
+
+
+/* General properties for the dotter session. These settings are common to all dotter windows
+ * open for the same process (i.e. if you start a sub-dotter from within dotter it will inherit
+ * these properties). */
+typedef struct _DotterContext
+{
+  BlxBlastMode blastMode;                   /* the blast mode used */
+  BlxSeqType displaySeqType;                /* whether the display shows sequences as nucleotide or peptide */
+  int numFrames;                            /* the number of reading frames */
+  char **geneticCode;                       /* code used to translate nucleotide triplets to amino acids */
+  gint32 matrix[24][24];                    /* matrix for determining conserved matches */
+  char *matrixName;                         /* matrix name */
+  MSP *mspList;                             /* list of all MSPs in dotter */
+  GList *seqList;                           /* list of all matches sequences as BlxSequences */
+  GSList *windowList;                       /* list of all windows that use this context */
+
+  gboolean watsonOnly;                      /* true if we only display the watson strand */
+  gboolean crickOnly;                       /* true if we only display the crick strand */
+  
+  PangoFontDescription *fontDesc;           /* fixed-width font to use for alignment */
+  gdouble charWidth;                        /* the fixed-width font width */
+  gdouble charHeight;                       /* the fixed-width font height */
+  
+  char *refSeqName;                         /* the reference sequence name */
+  char *refSeq;                             /* the passed-in reference sequence */
+  char *refSeqRev;                          /* the reverse-complement of refSeq (or NULL if not applicable) */
+  IntRange refSeqFullRange;                 /* the full reference sequence range passed to dotter on startup */
+  BlxStrand refSeqStrand;                   /* which strand of the ref seq we were passed */
+  BlxSeqType refSeqType;                    /* whether refSeq is in nucleotide or peptide coords */
+
+  char* peptideSeqs[NUM_READING_FRAMES];    /* Array of 3 strings containing the 3 frame translations of the reference sequence */
+  
+  char *matchSeqName;                       /* the match sequence name */
+  char *matchSeq;                           /* the match sequence */
+  char *matchSeqRev;                        /* the revsere-complemented match sequence (or NULL if not applicable) */
+  IntRange matchSeqFullRange;               /* the full match sequence range passed to dotter on startup */
+  BlxStrand matchSeqStrand;                 /* which strand of the match seq we were passed */
+  BlxSeqType matchSeqType;                  /* whether matchSeq is in nucleotide or peptide coords */
+  
+  gboolean hozScaleRev;                     /* true if horizontal coords should increase from right-to-left rather than left-to-right */
+  gboolean vertScaleRev;                    /* true if vertical coords should increase from bottom-to-top rather than top-to-bottom */
+  gboolean negateCoords;                    /* negate displayed coords if the scale is reversed, i.e. so coords still appear to increase left-to-right */
+  gboolean displayMirror;                   /* whether to display a mirror image in self comparisons */
+  gboolean abbrevTitle;                     /* abbreviate window titles to save space */
+
+  double memoryLimit;                       /* maximum Mb allowed for dotplot */
+  
+  int scaleWidth;                           /* width of the dotplot scale */
+  int scaleHeight;                          /* height of the dotplot scale */
+
+  GArray *defaultColors;                    /* Default colors used by Dotter */
+  
+  BlxMessageData *msgData;                  /* Data to be passed to message handlers */
+} DotterContext;
+
+
+/* Struct containing properties specific to a particular dotter window.  */
+typedef struct _DotterWindowContext
+  {
+    DotterContext *dotterCtx;
+    
+    IntRange refSeqRange;                     /* displayed ref seq range currently displayed in this window */
+    IntRange matchSeqRange;                   /* displayed match seq range currently displayed in this window */
+    
+    int refCoord;                             /* currently-selected ref seq coord */
+    int matchCoord;                           /* currently-selected match seq coord */
+    
+    gdouble zoomFactor;                       /* we divide by this to scale the dotplot, i.e. <1 zooms in, >1 zooms out */
+    gboolean selfComp;                        /* true if we're comparing the same portion ref seq against itself */
+    
+    GtkWidget *dialogList[DOTDIALOG_NUM_DIALOGS]; /* list of all persistent dialogs for this window */
+    
+    GtkPrintSettings *printSettings;          /* print settings */
+    GtkPageSetup *pageSetup;                  /* page setup for printing */
+    gboolean usePrintColors;                  /* whether to use print colours */
+
+    GtkUIManager *uiManager;                  /* the ui manager for this dotter window */
+    GtkActionGroup *actionGroup;              /* the menu actions for this window */
+  } DotterWindowContext;
+
+
+class DotplotScaleProperties
+{
+public:
+  GtkWidget *widget;                  /* The dotplot scale widget */
+  int basesPerMark;                   /* how many bases per major tickmark */
+  int basesPerSubmark;                /* how many bases per minor tickmark */
+  int numMarks;                       /* how many major tickmarks there are */
+  int numSubmarks;                    /* how many minor tickmarks there are */
+  int firstSubmarkPos;                /* the position of the first tickmark */
+  int firstSubmarkCoord;              /* the coordinate the first tickmark represents */
+  int startCoord;                     /* the overall start coord */
+  int endCoord;                       /* the overall end coord */
+  GArray *labels;
+};
+
+
+class DotplotProperties
+{
+public:
+  GtkWidget *widget;                  /* The dotplot widget */
+  DotterWindowContext *dotterWinCtx;  /* pointer to the dotter context for the window that this tool belongs to */
+  GdkRectangle plotRect;              /* the space where the dot plot will be */
+  GtkWidget *hozExons1;               /* shows main strand exons for horizontal sequence */
+  GtkWidget *hozExons2;               /* shows other strand exons for horizontal sequence */
+  GtkWidget *vertExons1;              /* shows main strand exons for vertical sequence */
+  GtkWidget *vertExons2;              /* shows other strand exons for vertical sequence */
+    
+  gulong greyMap[NUM_COLORS];         /* maps weight -> pixel value. fixed mapping in pseudo colour displays
+                                         variable mapping in truecolor displays */
+  GdkColor greyRamp[NUM_COLORS];      /* 256 grey colors, black->white, only used in true color displays */
+  GdkColormap *colorMap;              /* the greyramp colormap */
+    
+  int imageWidth;
+  int imageHeight;
+  GdkImage *image;                    /* the greyramp image */
+    
+  double expResScore;
+  int pixelFac;
+  int slidingWinSize;
+    
+  /* Dynamic properties: */
+  unsigned char *pixelmap;            /* source data for drawing the dot-plot */
+  unsigned char *hspPixmap;           /* source data for drawing the HSP dot-plot */
+    
+  gboolean crosshairOn;               /* whether to show the crosshair that marks the position of the currently-selected coord */
+  gboolean crosshairCoordsOn;         /* whether to display the crosshair label */
+  gboolean crosshairFullscreen;       /* whether to show the crosshair over the whole widget or just within the dot-plot rectangle */
+    
+  gboolean pixelmapOn;                /* whether to show the dot-plot pixelmap or not */
+  DotterHspMode hspMode;              /* how (and whether) to show high-scoring pairs from Blast */
+    
+  gboolean gridlinesOn;               /* whether to show grid lines */
+  gboolean breaklinesOn;              /* whether to show break-lines between sequences */
+  gboolean hozLabelsOn;               /* whether to show labels for features on the horizontal sequence */
+  gboolean vertLabelsOn;              /* whether to show labels for features on the vertical sequence */
+    
+  GdkPoint dragStart;                 /* start point for mid-click drag */
+  GdkPoint dragEnd;                   /* end point for mid-click drag */
+
+  const char *exportFileName;         /* file to export the plot to if in batch "export to pdf" mode */
+
+  DotplotScaleProperties hozScale;    /* horizontal scale properties */
+  DotplotScaleProperties vertScale;   /* vertical scale properties */
+};
+
+
+
+
+const char*         dotterGetAppName(void);
+const char*         dotterGetTitlePrefix(DotterContext *dc);
+const char*         dotterGetCopyrightString(void);
+const char*         dotterGetWebSiteString(void);
+const char*         dotterGetCommentsString(void);
+const char*         dotterGetLicenseString(void);
+const char*         dotterGetVersionString(void);
+
+int                 winsizeFromlambdak(int mtx[24][24], int *tob, int abetsize, const char *qseq, const char *sseq, 
+                                       double *exp_res_score, double *Lambda);
+
+void                argvAdd(int *argc, char ***argv, const char *s);
+
+
+/* dotter.c */
+int                 getResFactor(DotterContext *dc, const gboolean horizontal);
+int                 getDisplayCoord(const int coordIn, DotterContext *dc, const gboolean horizontal);
+void                copyIntToDefaultClipboard(const int val);
+int                 getStartCoord(DotterWindowContext *dwc, const gboolean horizontal);
+int                 getEndCoord(DotterWindowContext *dwc, const gboolean horizontal);
+int                 getSelectedCoord(DotterWindowContext *dwc, const gboolean horizontal);
+void                dotterEnableSelectionMenus(DotterWindowContext *dwc, const gboolean enable);
+
+void                callDotterInternal(DotterContext *dc, 
+                                       const IntRange* const refSeqRange,
+                                       const IntRange* const matchSeqRange,
+                                       const gdouble zoomFactor,
+                                       const gboolean breaklinesOn);
+
+void                dotterSetToggleMenuStatus(DotterWindowContext *dwc, 
+                                              const char *menuItem,
+                                              const gboolean enable);
+
+
+/* greyramptool.c */
+GtkWidget*          createGreyrampTool(DotterWindowContext *dwc, const int bottomVal, const int topVal, const gboolean swapValues, GtkWidget **greyrampWindow_out);
+GtkWidget*          createGreyrampToolMinimised(DotterWindowContext *dwc, const int blackPoint, const int whitePoint);
+void                registerGreyrampCallback(GtkWidget *greyramp, GtkWidget *widget, GtkCallback func);
+void                updateGreyMap(GtkWidget *greyramp);
+
+/* alignmenttool.c */
+GtkWidget*          createAlignmentTool(DotterWindowContext *dotterWinCtx, GtkWidget **alignmentWindow_out);
+void                updateAlignmentRange(GtkWidget *alignmentTool, DotterWindowContext *dwc);
+void                alignmentToolSetSpliceSitesOn(GtkWidget *alignmentTool, const gboolean spliceSitesOn);
+gboolean            alignmentToolGetSpliceSitesOn(GtkWidget *alignmentTool);
+void                alignmentToolRedrawAll(GtkWidget *alignmentTool);
+void                alignmentToolCopySeln(GtkWidget* alignmentTool);
+void                alignmentToolCopySelnCoords(GtkWidget *alignmentTool);
+void                alignmentToolClearSequenceSelection(GtkWidget *alignmentTool);
+
+/* dotplot.c */
+GtkWidget*          createDotplot(DotterWindowContext *dwc, 
+                                  const char *loadFileName,
+                                  const char *saveFileName,
+                                  const char *exportFileName,
+                                  const gboolean hspsOn,
+                                  const gboolean breaklinesOn,
+                                  const char *initWinsize,
+                                  const int pixelFacIn,
+                                  const int zoomFacIn,
+                                  const int qcenter,
+                                  const int scenter,
+                                  GtkWidget **dotplot);
+
+void                dotplotPrepareForPrinting(GtkWidget *dotplot);
+int                 convertToDisplayIdx(const int dnaIdx, const gboolean horizontal, DotterContext *dc, const int frame, int *baseNum);
+int                 convertToDnaIdx(const int displayIdx, const gboolean horizontal, DotterContext *dc, const int frame, int baseNum);
+int                 getDotplotWidth(GtkWidget *dotplot, DotplotProperties *properties);
+int                 getDotplotHeight(GtkWidget *dotplot, DotplotProperties *properties);
+DotplotProperties*  dotplotGetProperties(GtkWidget *widget);
+void                dotplotToggleBumpExons(GtkWidget *dotplot);
+
+DotterHspMode       dotplotGetHspMode(GtkWidget *dotplot);
+int                 dotplotGetSlidingWinSize(GtkWidget *dotplot);
+gboolean            dotplotSetSlidingWinSize(GtkWidget *dotplot, const int newValue, GError **error);
+void                dotplotSetBreaklinesOn(GtkWidget *dotplot, const gboolean breaklinesOn);
+void                dotplotSetHozLabelsOn(GtkWidget *dotplot, const gboolean breaklinesOn);
+void                dotplotSetVertLabelsOn(GtkWidget *dotplot, const gboolean breaklinesOn);
+int                 dotplotGetImageWidth(GtkWidget *dotplot);
+int                 dotplotGetImageHeight(GtkWidget *dotplot);
+double              dotplotGetExpResScore(GtkWidget *dotplot);
+int                 dotplotGetPixelFac(GtkWidget *dotplot);
+void                dotplotUpdateGreymap(GtkWidget *dotplot, gpointer data);
+void                dotplotUpdateCrosshair(GtkWidget *dotplot, DotterWindowContext *dwc);
+void                dotplotTogglePixelmap(GtkWidget *dotplot);
+void                dotplotToggleGrid(GtkWidget *dotplot);
+void                toggleCrosshairOn(GtkWidget *dotplot);
+void                toggleCrosshairCoordsOn(GtkWidget *dotplot);
+void                toggleCrosshairFullscreen(GtkWidget *dotplot);
+void                setHspMode(GtkWidget *dotplot, DotterHspMode hspMode);
+void                refreshDotplot(GtkWidget *dotplot);
+void                redrawDotplot(GtkWidget *dotplot);
+void                recalcDotplot(GtkWidget *dotplot);
+void                savePlot(GtkWidget *dotplot, DotplotProperties *properties, const char *saveFileName, GError **error);
+void                exportPlot(GtkWidget *dotplot, GtkWindow *window, const char *exportFileName, GError **error);
+void                loadPlot(GtkWidget *dotplot, const char *loadFileName, GError **error);
+
+GList*              dotterCreateColumns();
+
+#endif /* _dotter_p_h_included_ */
diff --git a/dotterApp/greyramptool.cpp b/dotterApp/greyramptool.cpp
new file mode 100644
index 0000000..a314ada
--- /dev/null
+++ b/dotterApp/greyramptool.cpp
@@ -0,0 +1,1038 @@
+/*  File: greyramp.c
+ *  Author: Gemma Barson, 2010-08-31
+ *  Copyright (c) 2010 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: Creates the greyramp tool window for a Dotter window.
+ *              The greyramp tool is used to control how much noise is filtered 
+ *              out in the dotplot. The greyramp too is owned by the Dotter 
+ *              window and will be destroyed when that window is closed.
+ *----------------------------------------------------------------------------
+ */
+
+#include <gtk/gtk.h>
+#include <seqtoolsUtils/utilities.hpp>
+#include <dotterApp/dotter_.hpp>
+
+//#define MAXY                            20
+//#define MINY                            140
+//#define BORDER                          20
+#define GREYRAMP_MIN                    0       /* min possible value to set the black/white point to */
+#define GREYRAMP_MAX			255	/* max possible value to set the black/white point to */
+#define GRADIENT_RECT_WIDTH             256     /* width of the gradient drawing area */
+#define GRADIENT_RECT_HEIGHT            100     /* height of the gradient drawing area */
+#define GRADIENT_RECT_HEIGHT_MIN        20      /* height of the gradient drawing area when "minimised" */
+#define GRADIENT_RECT_MARKER_HEIGHT     10      /* height of the triangular markers on the gradient area */
+#define GRADIENT_RECT_X_PADDING         10      /* x padding around the gradient area */
+#define GRADIENT_RECT_Y_PADDING         10      /* y padding around the gradient area */
+#define GRADIENT_RECT_X_PADDING_MIN     2       /* x padding around the gradient area when minimised */
+#define GRADIENT_RECT_Y_PADDING_MIN     2       /* y padding around the gradient area when minimised */
+#define GRADIENT_RECT_FRAME_PADDING     10      /* padding around the outside of the gradient widget */
+
+
+
+typedef struct _CallbackItem
+{
+  GtkWidget *widget;
+  GtkCallback func;
+} CallbackItem;
+
+
+class GreyrampProperties
+{
+public:
+  GtkWidget *widget;
+  GtkWidget *greyrampWindow;          /* the toplevel window the greyrampTool will be in IF
+                                       * undocked from the main window */
+  DotterWindowContext *dwc;
+  GdkRectangle gradientRect;          /* the area where the gradient ectangle is drawn */
+    
+  GtkWidget *whiteSpinButton;         /* spin button to control the position of the white point in the gradient */
+  GtkWidget *blackSpinButton;         /* spin button to control the position of the black point in the gradient */
+    
+  int blackPoint;                     /* current position for the black point */
+  int whitePoint;                     /* current position for the white point */
+  int lastBlackPoint;                 /* the previous value for the black-point spin button (so we can undo) */
+  int lastWhitePoint;                 /* the previous value for the white-point spin button (so we can undo) */
+    
+  gboolean swapValues;                /* top and bottom values are swapped (i.e. so top is max and bottom is min) */
+
+  gboolean draggingWhite;             /* set to true when dragging the white-point marker */
+  gboolean draggingBlack;             /* set to true when dragging the black-point marker */
+  gboolean draggingThreshold;         /* set to true when dragging the threshold marker */
+  gint dragXPos;                      /* x position of where the drag started */
+    
+  GSList *callbackItems;              /* a list of callbacks to be called when the greyramp is updated */
+
+  int greyrampMinDist;                /* minimum dist between black and white point */
+};
+
+
+/***********************************************************
+ *                       Properties                        *
+ ***********************************************************/
+
+static GreyrampProperties* greyrampGetProperties(GtkWidget *greyramp)
+{
+  return greyramp ? (GreyrampProperties*)(g_object_get_data(G_OBJECT(greyramp), "GreyrampProperties")) : NULL;
+}
+
+static void onDestroyGreyramp(GtkWidget *greyramp)
+{
+  GreyrampProperties *properties = greyrampGetProperties(greyramp);
+  
+  if (properties)
+    {
+      if (properties->callbackItems)
+        {
+          GSList *item = properties->callbackItems;
+          for ( ; item; item = item->next)
+            {
+              CallbackItem *callbackItem = (CallbackItem*)(item->data);
+              delete callbackItem;
+            }
+          
+          g_slist_free(properties->callbackItems);
+        }
+      
+      delete properties;
+      properties = NULL;
+      g_object_set_data(G_OBJECT(greyramp), "GreyrampProperties", NULL);
+    }
+}
+
+static void greyrampCreateProperties(GtkWidget *greyramp, 
+                                     GtkWidget *greyrampWindow,
+				     DotterWindowContext *dwc,
+                                     GdkRectangle *gradientRect,
+                                     GtkWidget *whiteSpinButton,
+                                     GtkWidget *blackSpinButton,
+                                     const int blackPoint, 
+                                     const int whitePoint,
+                                     const int lastBlackPoint,
+                                     const int lastWhitePoint,
+                                     const gboolean swapValues,
+                                     const int greyrampMinDist)
+{
+  if (greyramp)
+    {
+      GreyrampProperties *properties = new GreyrampProperties;
+
+      properties->widget = greyramp;
+      properties->greyrampWindow = greyrampWindow;
+      properties->dwc = dwc;
+      properties->gradientRect.x = gradientRect->x;
+      properties->gradientRect.y = gradientRect->y;
+      properties->gradientRect.width = gradientRect->width;
+      properties->gradientRect.height = gradientRect->height;
+      properties->whiteSpinButton = whiteSpinButton;
+      properties->blackSpinButton = blackSpinButton;
+      properties->blackPoint = blackPoint;
+      properties->whitePoint = whitePoint;
+      properties->lastBlackPoint = lastBlackPoint;
+      properties->lastWhitePoint = lastWhitePoint;
+      properties->swapValues = swapValues;
+      properties->draggingWhite = FALSE;
+      properties->draggingBlack = FALSE;
+      properties->draggingThreshold = FALSE;
+      properties->dragXPos = 0;
+      properties->callbackItems = NULL;
+      properties->greyrampMinDist = greyrampMinDist;
+      
+      g_object_set_data(G_OBJECT(greyramp), "GreyrampProperties", properties);
+      g_signal_connect(G_OBJECT(greyramp), "destroy", G_CALLBACK(onDestroyGreyramp), NULL); 
+    }
+}
+
+
+/* Functions to set the white/black points. Does bounds checking and updates. */
+static void greyrampSetWhitePoint(GtkWidget *greyramp, GreyrampProperties *properties, const int whitePoint)
+{
+  properties->whitePoint = whitePoint;
+  
+  const int greyrampMin = GREYRAMP_MIN;
+  const int greyrampMax = GREYRAMP_MAX;
+
+  if (properties->whitePoint < greyrampMin)
+    {
+      properties->whitePoint = greyrampMin;
+    }
+  
+  if (properties->whitePoint > greyrampMax)
+    {
+      properties->whitePoint = greyrampMax;
+    }
+
+  if (properties->blackPoint - properties->whitePoint < properties->greyrampMinDist)
+    {
+      properties->whitePoint = properties->blackPoint - properties->greyrampMinDist;
+    }
+  
+  if (properties->whiteSpinButton)
+    {
+      gtk_spin_button_set_value(GTK_SPIN_BUTTON(properties->whiteSpinButton), properties->whitePoint);
+    }
+  else
+    {
+      gtk_widget_queue_draw(greyramp);
+      updateGreyMap(greyramp);
+    }
+}
+
+static void greyrampSetBlackPoint(GtkWidget *greyramp, GreyrampProperties *properties, const int blackPoint)
+{
+  properties->blackPoint = blackPoint;
+  
+  const int greyrampMin = GREYRAMP_MIN;
+  const int greyrampMax = GREYRAMP_MAX;
+
+  if (properties->blackPoint < greyrampMin)
+    {
+      properties->blackPoint = greyrampMin;
+    }
+  
+  if (properties->blackPoint > greyrampMax)
+    {
+      properties->blackPoint = greyrampMax;
+    }
+
+  if (properties->blackPoint - properties->whitePoint < properties->greyrampMinDist)
+    {
+      properties->blackPoint = properties->whitePoint + properties->greyrampMinDist;
+    }
+
+  if (properties->blackSpinButton)
+    {
+      gtk_spin_button_set_value(GTK_SPIN_BUTTON(properties->blackSpinButton), properties->blackPoint);
+    }
+  else
+    {
+      gtk_widget_queue_draw(greyramp);
+      updateGreyMap(greyramp);
+    }
+}
+
+
+/* This registers callbacks so that the given function is called on the given widget whenever the
+ * greyramp changes */
+void registerGreyrampCallback(GtkWidget *greyramp, GtkWidget *widget, GtkCallback func)
+{
+  DEBUG_ENTER("registerGreyrampCallback");
+
+  GreyrampProperties *properties = greyrampGetProperties(greyramp);
+  
+  CallbackItem *callbackItem = new CallbackItem;
+  callbackItem->widget = widget;
+  callbackItem->func = func;
+  
+  properties->callbackItems = g_slist_append(properties->callbackItems, callbackItem);
+  
+  DEBUG_EXIT("registerGreyrampCallback returning ");
+}
+
+
+/***********************************************************
+ *                         Utilities                       *
+ ***********************************************************/
+
+static gboolean onDeleteGreyrampTool(GtkWidget *widget, GdkEvent *event, gpointer data)
+{
+  GtkWidget *greyrampTool = GTK_WIDGET(data);
+  GreyrampProperties *properties = greyrampGetProperties(greyrampTool);
+
+  if (properties && properties->dwc)
+    dotterSetToggleMenuStatus(properties->dwc, "ToggleGreyramp", FALSE);
+
+  return TRUE;
+}
+
+
+/* This should be called whenever the black- or white- point has changed. It causes
+ * the greymap for all graphs that have one to be updated. */
+void updateGreyMap(GtkWidget *greyramp)
+{
+  GreyrampProperties *properties = greyrampGetProperties(greyramp);
+  
+  unsigned char *ramp = (unsigned char*)g_malloc(256 * sizeof(unsigned char));
+  
+  int whitePoint = properties->whitePoint;
+  int blackPoint = properties->blackPoint;
+  
+  /* If black and white point are the same, make the white point less than the black point
+   * (But make sure it's still in bounds) */
+  if (blackPoint == whitePoint && blackPoint < GREYRAMP_MAX)
+    {
+      ++blackPoint;
+    }
+  else if (blackPoint == whitePoint)
+    {
+      --whitePoint;
+    }
+  
+  if (blackPoint < whitePoint)
+    {
+      int i = 0;
+    
+      for (i = 0 ; i < blackPoint ; ++i)
+	ramp[i] = 0x0 ;
+    
+      gdouble fac = 0xff / (gdouble)(whitePoint - blackPoint) ;
+    
+      for ( ; i < whitePoint && i < 256 ; ++i)
+	ramp[i] =  fac * (i - blackPoint) ; 
+    
+      for ( ; i < 256 ; ++i)
+	ramp[i] = 0xff ;
+    }
+  else
+    { 
+      int i = 0;
+      
+      for (i = 0 ; i < whitePoint ; ++i)
+	ramp[i] = 0xff ;
+      
+      gdouble fac = 0xff / (gdouble)(blackPoint - whitePoint) ;
+      
+      for ( ; i < blackPoint && i < 256 ; ++i)
+	ramp[i] = fac * (blackPoint - i) ; 
+      
+      for ( ; i < 256 ; ++i)
+	ramp[i] = 0x0 ;
+    }
+  
+  
+  /* Loop through our list of widgets that require their callbacks to be called */
+  GSList *item = properties->callbackItems;
+  
+  for ( ; item; item = item->next)
+    {
+      CallbackItem *callbackItem = (CallbackItem*)(item->data);
+      callbackItem->func(callbackItem->widget, ramp);
+    }
+  
+  g_free(ramp);
+}
+
+
+/* Determine the extent of the white marker and return the coords in the given result rectangle */
+static void getWhiteMarkerRect(GreyrampProperties *properties, GdkRectangle *result)
+{
+  result->x = properties->gradientRect.x + properties->whitePoint - (GRADIENT_RECT_MARKER_HEIGHT / 2);
+  result->y = properties->gradientRect.y - GRADIENT_RECT_MARKER_HEIGHT - (GRADIENT_RECT_Y_PADDING / 2);
+  result->width = GRADIENT_RECT_MARKER_HEIGHT;
+  result->height = GRADIENT_RECT_MARKER_HEIGHT;
+}
+
+/* Determine the extent of the black marker and return the coords in the given result rectangle */
+static void getBlackMarkerRect(GreyrampProperties *properties, GdkRectangle *result)
+{
+  result->x = properties->gradientRect.x + properties->blackPoint - (GRADIENT_RECT_MARKER_HEIGHT / 2);
+  result->y = properties->gradientRect.y + properties->gradientRect.height + (GRADIENT_RECT_Y_PADDING / 2);
+  result->width = GRADIENT_RECT_MARKER_HEIGHT;
+  result->height = GRADIENT_RECT_MARKER_HEIGHT;
+}
+
+/* Determine the extent of the threshold marker and return the coords in the given result rectangle */
+static void getThresholdMarkerRect(GreyrampProperties *properties, GdkRectangle *result)
+{
+  result->x = properties->gradientRect.x + properties->whitePoint + (properties->blackPoint - properties->whitePoint) / 2 - (GRADIENT_RECT_MARKER_HEIGHT / 2);
+  result->y = properties->gradientRect.y + (properties->gradientRect.height / 2) - (GRADIENT_RECT_MARKER_HEIGHT / 2);
+  result->width = GRADIENT_RECT_MARKER_HEIGHT;
+  result->height = GRADIENT_RECT_MARKER_HEIGHT;
+}
+
+
+/* Determine whether the given point is inside the white marker */
+static gboolean pointInWhiteMarker(GreyrampProperties *properties, const int x, const int y)
+{
+  GdkRectangle markerRect;
+  getWhiteMarkerRect(properties, &markerRect);
+  return pointInRect(x, y, &markerRect);
+}
+
+/* Determine whether the given point is inside the black marker */
+static gboolean pointInBlackMarker(GreyrampProperties *properties, const int x, const int y)
+{
+  GdkRectangle markerRect;
+  getBlackMarkerRect(properties, &markerRect);
+  return pointInRect(x, y, &markerRect);
+}
+
+/* Determine whether the given point is inside the threshold marker */
+static gboolean pointInThresholdMarker(GreyrampProperties *properties, const int x, const int y)
+{
+  GdkRectangle markerRect;
+  getThresholdMarkerRect(properties, &markerRect);
+  return pointInRect(x, y, &markerRect);
+}
+
+
+/***********************************************************
+ *                         Drawing                         *
+ ***********************************************************/
+
+/* Draw the gradient rectangle for the greyramp tool */
+static void drawGradient(GdkDrawable *drawable, GtkWidget *greyramp)
+{
+  GreyrampProperties *properties = greyrampGetProperties(greyramp);
+  GdkRectangle *rect = &properties->gradientRect;
+
+  /* Create a gradient */
+  cairo_pattern_t *pattern = cairo_pattern_create_linear(rect->x, rect->y, rect->x + rect->width, rect->y);
+
+  /* If the positions are the same, make the black pos slightly smaller (to emulate historic behaviour) */
+  int whitePoint = properties->whitePoint;
+  int blackPoint = properties->blackPoint;
+  
+  if (whitePoint == blackPoint)
+    {
+      if (blackPoint <= 1)
+        {
+          whitePoint += 1;
+        }
+      else
+        {
+          blackPoint -= 1;
+        }
+    }
+
+  /* Get the white and black points as fractions of 1.0 */
+  gdouble blackPos = blackPoint / ((gdouble)GREYRAMP_MAX);
+  gdouble whitePos = whitePoint / ((gdouble)GREYRAMP_MAX);
+  
+  /* Add a stop at the start and end. The start is white if the whitePos is less than blackPos */
+  const int whiteEnd = whitePos < blackPos ? 0 : 1;
+  const int blackEnd = whitePos < blackPos ? 1 : 0;
+  cairo_pattern_add_color_stop_rgb(pattern, whiteEnd, 1.0, 1.0, 1.0);
+  cairo_pattern_add_color_stop_rgb(pattern, blackEnd, 0.0, 0.0, 0.0);
+  
+  /* Add stop points at the black/white positions */
+  cairo_pattern_add_color_stop_rgb(pattern, whitePos, 1.0, 1.0, 1.0);
+  cairo_pattern_add_color_stop_rgb(pattern, blackPos, 0.0, 0.0, 0.0);
+  
+  if (cairo_pattern_status(pattern) == CAIRO_STATUS_SUCCESS)
+    {
+      cairo_t *cr = gdk_cairo_create(drawable);
+      
+      gdk_cairo_rectangle(cr, rect);
+      cairo_set_source(cr, pattern);
+      cairo_fill(cr);
+      
+      cairo_destroy(cr);
+    }
+  
+  cairo_pattern_destroy(pattern);
+}
+
+
+/* Draw the marker that indicates where the white point is */
+static void drawWhiteMarker(GdkDrawable *drawable, GtkWidget *greyramp)
+{
+  GreyrampProperties *properties = greyrampGetProperties(greyramp);
+  DotterContext *dc = properties->dwc->dotterCtx;
+  
+  GdkRectangle markerRect;
+  getWhiteMarkerRect(properties, &markerRect);
+  
+  /* Draw a triangle. Line color is the 'selected' color if dragging */
+  GdkColor *fillColor = getGdkColor(DOTCOLOR_MARKER_FILL, dc->defaultColors, FALSE, properties->dwc->usePrintColors);
+  GdkColor *lineColor = getGdkColor(DOTCOLOR_MARKER_LINE, dc->defaultColors, properties->draggingWhite, properties->dwc->usePrintColors);
+
+  int numPoints = 3;
+  GdkPoint points[numPoints];
+  points[0].x = markerRect.x;
+  points[0].y = markerRect.y;
+  points[1].x = markerRect.x + markerRect.width;
+  points[1].y = markerRect.y;
+  points[2].x = markerRect.x + (markerRect.width / 2);
+  points[2].y = markerRect.y + markerRect.height;
+
+  /* Draw and outline of marker */
+  GdkGC *gc = gdk_gc_new(drawable);
+  
+  gdk_gc_set_foreground(gc, fillColor);
+  gdk_draw_polygon(drawable, gc, TRUE, points, numPoints);
+  gdk_gc_set_foreground(gc, lineColor);
+  gdk_draw_polygon(drawable, gc, FALSE, points, numPoints);
+  
+  g_object_unref(gc);
+}
+
+
+/* Draw the marker that indicates where the black point is */
+static void drawBlackMarker(GdkDrawable *drawable, GtkWidget *greyramp)
+{
+  GreyrampProperties *properties = greyrampGetProperties(greyramp);
+  DotterContext *dc = properties->dwc->dotterCtx;
+
+  GdkRectangle markerRect;
+  getBlackMarkerRect(properties, &markerRect);
+  
+  /* Draw a triangle. Line color is the 'selected' color if dragging */
+  GdkColor *fillColor = getGdkColor(DOTCOLOR_MARKER_FILL, dc->defaultColors, FALSE, properties->dwc->usePrintColors);
+  GdkColor *lineColor = getGdkColor(DOTCOLOR_MARKER_LINE, dc->defaultColors, properties->draggingBlack, properties->dwc->usePrintColors);
+  
+  int numPoints = 3;
+  GdkPoint points[numPoints];
+  points[0].x = markerRect.x + (markerRect.width / 2);
+  points[0].y = markerRect.y;
+  points[1].x = markerRect.x;
+  points[1].y = markerRect.y + markerRect.height;
+  points[2].x = markerRect.x + markerRect.width;
+  points[2].y = markerRect.y + markerRect.height;
+  
+  /* Draw fill in white and line in black (or green if dragging) */
+  GdkGC *gc = gdk_gc_new(drawable);
+  
+  gdk_gc_set_foreground(gc, fillColor);
+  gdk_draw_polygon(drawable, gc, TRUE, points, numPoints);
+  gdk_gc_set_foreground(gc, lineColor);
+  gdk_draw_polygon(drawable, gc, FALSE, points, numPoints);
+  
+  g_object_unref(gc);
+}
+
+
+/* Draw the marker that indicates where the threshold is */
+static void drawThresholdMarker(GdkDrawable *drawable, GtkWidget *greyramp)
+{
+  GreyrampProperties *properties = greyrampGetProperties(greyramp);
+  DotterContext *dc = properties->dwc->dotterCtx;
+  
+  GdkRectangle markerRect;
+  getThresholdMarkerRect(properties, &markerRect);
+  
+  /* Draw the threshold marker outline (there's no fill because we want the background greyramp to show through) */
+  GdkGC *gc = gdk_gc_new(drawable);
+  
+  GdkColor *lineColor = getGdkColor(DOTCOLOR_THRESHOLD_MARKER, dc->defaultColors, properties->draggingThreshold, properties->dwc->usePrintColors);
+  gdk_gc_set_foreground(gc, lineColor);
+  gdk_draw_rectangle(drawable, gc, FALSE, markerRect.x, markerRect.y, markerRect.width, markerRect.height);
+  
+  g_object_unref(gc);
+}
+
+
+/***********************************************************
+ *                       Events                        *
+ ***********************************************************/
+
+/* Handler for when the 'Close' button is pressed. Hides the greyramp window. */
+static void onCloseGreyramp(GtkWidget *greyramp, gpointer data)
+{
+  GtkWidget *greyrampTool = GTK_WIDGET(data);
+  GreyrampProperties *properties = greyrampGetProperties(greyrampTool);
+
+  if (properties && properties->dwc)
+    dotterSetToggleMenuStatus(properties->dwc, "ToggleGreyramp", FALSE);
+}
+
+
+/* Expose function for the gradient area */
+static gboolean onExposeGradient(GtkWidget *gradient, GdkEventExpose *event, gpointer data)
+{
+  GdkWindow *drawable = GTK_LAYOUT(gradient)->bin_window;
+  GtkWidget *greyramp = GTK_WIDGET(data);
+
+  if (drawable && greyramp)
+    {
+      drawGradient(drawable, greyramp);
+      drawWhiteMarker(drawable, greyramp);
+      drawBlackMarker(drawable, greyramp);
+      drawThresholdMarker(drawable, greyramp);
+    }
+  
+  return TRUE;
+}
+
+
+/* Expose function for the minimised version of the gradient area */
+static gboolean onExposeGradientMinimised(GtkWidget *gradient, GdkEventExpose *event, gpointer data)
+{
+  GdkWindow *drawable = GTK_LAYOUT(gradient)->bin_window;
+  GtkWidget *greyramp = GTK_WIDGET(data);
+
+  if (drawable && greyramp)
+    {
+      drawGradient(drawable, greyramp);
+      drawThresholdMarker(drawable, greyramp);
+    }
+  
+  return TRUE;
+}
+
+
+/* Mouse-button press handler */
+static gboolean onButtonPressGradient(GtkWidget *gradient, GdkEventButton *event, gpointer data)
+{
+  gboolean handled = FALSE;
+  
+  if (event->button == 1)
+    {
+      GtkWidget *greyramp = GTK_WIDGET(data);
+      GreyrampProperties *properties = greyrampGetProperties(greyramp);
+      
+      /* See if we clicked inside one of the markers */
+      if (pointInWhiteMarker(properties, event->x, event->y))
+        {
+          properties->draggingWhite = TRUE;
+          properties->dragXPos = event->x;
+        }
+      else if (pointInBlackMarker(properties, event->x, event->y))
+        {
+          properties->draggingBlack = TRUE;
+          properties->dragXPos = event->x;
+        }
+      else if (pointInThresholdMarker(properties, event->x, event->y))
+        {
+          properties->draggingThreshold = TRUE;
+          properties->dragXPos = event->x;
+        }
+
+      if (properties->draggingWhite || properties->draggingBlack || properties->draggingThreshold)
+        {
+          /* Remember the current values so we can undo if this is the start of a drag */
+          properties->lastBlackPoint =  properties->blackPoint; 
+          properties->lastWhitePoint =  properties->whitePoint;
+
+          gtk_widget_queue_draw(greyramp);
+        }
+      
+      handled = TRUE;
+    }
+  
+  return handled;
+}
+
+/* Mouse-button release handler */
+static gboolean onButtonReleaseGradient(GtkWidget *gradient, GdkEventButton *event, gpointer data)
+{
+  GtkWidget *greyramp = GTK_WIDGET(data);
+  GreyrampProperties *properties = greyrampGetProperties(greyramp);
+  
+  properties->draggingWhite = FALSE;
+  properties->draggingBlack = FALSE;
+  properties->draggingThreshold = FALSE;
+  properties->dragXPos = 0;
+  
+  gtk_widget_queue_draw(greyramp);
+  
+  return TRUE;
+}
+
+
+/* Mouse-motion event handler. */
+static gboolean onMouseMoveGradient(GtkWidget *gradient, GdkEventMotion *event, gpointer data)
+{
+  gboolean handled = FALSE;
+  
+  if (event->state & GDK_BUTTON1_MASK) /* left button pressed */
+    {
+      GtkWidget *greyramp = GTK_WIDGET(data);
+      GreyrampProperties *properties = greyrampGetProperties(greyramp);
+      
+      if (properties->draggingWhite)
+        {
+          /* Move the white point by the amount offset since the last move/button-press */
+          const int offset = event->x - properties->dragXPos;
+          properties->dragXPos = event->x;
+          greyrampSetWhitePoint(greyramp, properties, properties->whitePoint + offset);
+        }
+      else if (properties->draggingBlack)
+        {
+          /* Move the black point */
+          const int offset = event->x - properties->dragXPos;
+          properties->dragXPos = event->x;
+          greyrampSetBlackPoint(greyramp, properties, properties->blackPoint + offset);
+        }
+      else if (properties->draggingThreshold)
+        {
+          /* Move both points together */
+          const int offset = event->x - properties->dragXPos;
+          properties->dragXPos = event->x;
+          greyrampSetWhitePoint(greyramp, properties, properties->whitePoint + offset);
+          greyrampSetBlackPoint(greyramp, properties, properties->blackPoint + offset);
+        }
+      
+      handled = TRUE;
+    }
+  
+  return handled;
+}
+
+
+/* Called when the black-point spin button's value has changed */
+static void onBlackSpinButtonChanged(GtkSpinButton *blackSpinButton, gpointer data)
+{ 
+  GtkWidget *greyramp = GTK_WIDGET(data);
+  GreyrampProperties *properties = greyrampGetProperties(greyramp);
+
+  properties->blackPoint = gtk_spin_button_get_value_as_int(blackSpinButton);
+  
+  gtk_widget_queue_draw(greyramp);
+  updateGreyMap(greyramp);
+}
+
+
+/* Called when the white-point spin button's value has changed */
+static void onWhiteSpinButtonChanged(GtkSpinButton *whiteSpinButton, gpointer data)
+{ 
+  GtkWidget *greyramp = GTK_WIDGET(data);
+  GreyrampProperties *properties = greyrampGetProperties(greyramp);
+
+  properties->whitePoint = gtk_spin_button_get_value_as_int(whiteSpinButton);
+  
+  gtk_widget_queue_draw(greyramp);
+  updateGreyMap(greyramp);
+}
+
+
+/* Undo: this restores the previous spin button values that were saved before the last drag. */
+static gint onPressUndoButton(GtkWidget *button, gpointer data)
+{
+  GtkWidget *greyramp = GTK_WIDGET(data);
+  GreyrampProperties *properties = greyrampGetProperties(greyramp);
+
+  int temp = properties->blackPoint; 
+  properties->blackPoint = properties->lastBlackPoint; 
+  properties->lastBlackPoint = temp;
+  
+  temp = properties->whitePoint; 
+  properties->whitePoint = properties->lastWhitePoint; 
+  properties->lastWhitePoint = temp;
+  
+  if (properties->blackSpinButton)
+    gtk_spin_button_set_value(GTK_SPIN_BUTTON(properties->blackSpinButton), (float)properties->blackPoint) ;
+
+  if (properties->whiteSpinButton)
+    gtk_spin_button_set_value(GTK_SPIN_BUTTON(properties->whiteSpinButton), (float)properties->whitePoint); 
+  
+  return TRUE;
+}
+
+
+/* Swap the min and max values - has the effect of inverting the colors */
+static gint onPressSwapButton(GtkWidget *button, gpointer data)
+{
+  GtkWidget *greyramp = GTK_WIDGET(data);
+  GreyrampProperties *properties = greyrampGetProperties(greyramp);
+  
+  int temp = properties->blackPoint; 
+  properties->blackPoint = properties->whitePoint; 
+  properties->whitePoint = temp;
+  
+  properties->swapValues = !properties->swapValues;
+  
+  if (properties->blackSpinButton)
+    gtk_spin_button_set_value(GTK_SPIN_BUTTON(properties->blackSpinButton), (float)properties->blackPoint) ;
+
+  if (properties->whiteSpinButton)
+    gtk_spin_button_set_value(GTK_SPIN_BUTTON(properties->whiteSpinButton), (float)properties->whitePoint);
+  
+  return TRUE;
+}
+
+
+static void onMaximiseGreyrampClicked(GtkWidget *button, gpointer data)
+{
+  GtkWidget *greyrampTool = GTK_WIDGET(data);
+  GreyrampProperties *properties = greyrampGetProperties(greyrampTool);
+
+  dotterSetToggleMenuStatus(properties->dwc, "ToggleGreyramp", TRUE);
+}
+
+
+/***********************************************************
+ *                    Initialisation                       *
+ ***********************************************************/
+
+/* Utility to create a spin button with the range 0 to 255 and various other default values. */
+static GtkWidget* createSpinButton(const gdouble initValue, GCallback callbackFunc, GtkWidget *greyramp)
+{
+  GtkObject *adjustment = gtk_adjustment_new(initValue, 
+                                             0.0,       /* lower */
+                                             255.0,     /* upper */
+                                             1.0,       /* step increment */
+                                             1.0,       /* page increment */
+                                             0.0);      /* page size */
+  
+  GtkWidget *spinButton = gtk_spin_button_new(GTK_ADJUSTMENT(adjustment), 
+                                              0.5, /* climb rate, i.e. amount to increase per button click */
+                                              0);  /* num decimal places to display */
+  
+  g_signal_connect(spinButton,"value_changed", callbackFunc, greyramp);
+  
+  return spinButton;
+}
+
+
+/* Create the toolbar for the greyramp window. */
+static GtkWidget* createGreyrampToolbar(GtkTable *table,
+                                        const int col,
+                                        GtkWidget *greyramp, 
+                                        GtkWidget *whiteSpinButton, 
+                                        GtkWidget *blackSpinButton,
+                                        const int blackPoint,
+                                        const int whitePoint)
+{
+  GtkWidget *quitButton = gtk_button_new_with_label("Close");
+  GtkWidget *swapButton = gtk_button_new_with_label("Swap");
+  GtkWidget *undoButton = gtk_button_new_with_label("Undo");
+
+  gtk_widget_set_tooltip_text(quitButton, "Close the full greyramp tool and show the minimised version instead (Ctrl-G)");
+  gtk_widget_set_tooltip_text(swapButton, "Swap the black and white point to invert the colours");
+  gtk_widget_set_tooltip_text(undoButton, "Undo/redo the last change to the sliders");
+
+  g_signal_connect(G_OBJECT(quitButton), "pressed", G_CALLBACK(onCloseGreyramp), greyramp); 
+  g_signal_connect(G_OBJECT(undoButton), "pressed", G_CALLBACK(onPressUndoButton), greyramp);
+  g_signal_connect(G_OBJECT(swapButton), "pressed", G_CALLBACK(onPressSwapButton), greyramp);
+
+  /* Pack them vertically into the 'toolbar' (which is just a vbox for now) */
+  GtkWidget *vbox = gtk_vbox_new(FALSE, 0);
+  gtk_container_border_width(GTK_CONTAINER(vbox), 5);
+
+  const int padding = 5;
+  int row = 0;
+
+  gtk_table_attach(table, whiteSpinButton, col, col + 1, row, row + 1, GTK_SHRINK, GTK_SHRINK, padding, padding);
+  ++row;
+  gtk_table_attach(table, quitButton, col, col + 1, row, row + 1, GTK_SHRINK, GTK_SHRINK, padding, padding);
+  ++row;
+  gtk_table_attach(table, swapButton, col, col + 1, row, row + 1, GTK_SHRINK, GTK_SHRINK, padding, padding);
+  ++row;
+  gtk_table_attach(table, undoButton, col, col + 1, row, row + 1, GTK_SHRINK, GTK_SHRINK, padding, padding);
+  ++row;
+  gtk_table_attach(table, blackSpinButton, col, col + 1, row, row + 1, GTK_SHRINK, GTK_SHRINK, padding, padding);
+  ++row;
+
+  /* Make sure neither spin button is focused at the start because if it is
+   * then its text will be selected and we will inadvertently overwrite the
+   * contents of the primary clipboard. */
+  gtk_container_set_focus_child(GTK_CONTAINER(vbox), quitButton);
+  
+  return vbox;
+}
+
+
+/* Create the rectangle area that displays the gradient */
+static GtkWidget* createGradientRect(GtkWidget *greyramp, GdkRectangle *rect)
+{
+  /* Put it in a frame with a border */
+  GtkWidget *frame = gtk_frame_new(NULL);
+  gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN);
+  gtk_container_set_border_width(GTK_CONTAINER(frame), GRADIENT_RECT_FRAME_PADDING);
+  
+  /* Get the total size of the gradient area, including markers and padding */
+  const int totalWidth = GRADIENT_RECT_WIDTH + (2 * GRADIENT_RECT_X_PADDING) ;
+  const int totalHeight = GRADIENT_RECT_HEIGHT + (2 * (GRADIENT_RECT_MARKER_HEIGHT + GRADIENT_RECT_Y_PADDING));
+
+  /* We'll draw the gradient and the child markers onto a layout */
+  GtkWidget *layout = gtk_layout_new(NULL, NULL);
+  gtk_layout_set_size(GTK_LAYOUT(layout), totalWidth, totalHeight);
+  gtk_widget_set_size_request(layout, totalWidth, totalHeight);
+  gtk_container_add(GTK_CONTAINER(frame), layout);
+
+  gtk_widget_add_events(layout, GDK_BUTTON_PRESS_MASK);
+  gtk_widget_add_events(layout, GDK_BUTTON_RELEASE_MASK);
+  gtk_widget_add_events(layout, GDK_POINTER_MOTION_MASK);
+  
+  g_signal_connect(G_OBJECT(layout), "expose-event", G_CALLBACK(onExposeGradient), greyramp);
+  g_signal_connect(G_OBJECT(layout), "button-press-event", G_CALLBACK(onButtonPressGradient), greyramp);
+  g_signal_connect(G_OBJECT(layout), "button-release-event", G_CALLBACK(onButtonReleaseGradient), greyramp);
+  g_signal_connect(G_OBJECT(layout), "motion-notify-event", G_CALLBACK(onMouseMoveGradient), greyramp);
+  
+  /* Set the size of the gradient rectangle to be drawn */
+  rect->x = GRADIENT_RECT_X_PADDING;
+  rect->y = GRADIENT_RECT_MARKER_HEIGHT + GRADIENT_RECT_Y_PADDING;
+  rect->width = GRADIENT_RECT_WIDTH;
+  rect->height = GRADIENT_RECT_HEIGHT;
+  
+  return frame;
+}
+
+
+/* Create the minimised version of the rectangle area that displays the gradient */
+static GtkWidget* createGradientRectMinimised(GdkRectangle *rect, GtkWidget *greyrampTool)
+{
+  /* Get the total size of the gradient area, including markers and padding */
+  const int totalWidth = GRADIENT_RECT_WIDTH + (2 * GRADIENT_RECT_X_PADDING) ;
+  const int totalHeight = GRADIENT_RECT_HEIGHT_MIN + (2 * GRADIENT_RECT_Y_PADDING_MIN);
+
+  /* We'll draw the gradient and the child markers onto a layout */
+  GtkWidget *greyramp = gtk_layout_new(NULL, NULL);
+  gtk_layout_set_size(GTK_LAYOUT(greyramp), totalWidth, totalHeight);
+  gtk_widget_set_size_request(greyramp, totalWidth, totalHeight);
+
+  gtk_widget_add_events(greyramp, GDK_BUTTON_PRESS_MASK);
+  gtk_widget_add_events(greyramp, GDK_BUTTON_RELEASE_MASK);
+  gtk_widget_add_events(greyramp, GDK_POINTER_MOTION_MASK);
+  
+  g_signal_connect(G_OBJECT(greyramp), "expose-event", G_CALLBACK(onExposeGradientMinimised), greyrampTool);
+  g_signal_connect(G_OBJECT(greyramp), "button-press-event", G_CALLBACK(onButtonPressGradient), greyrampTool);
+  g_signal_connect(G_OBJECT(greyramp), "button-release-event", G_CALLBACK(onButtonReleaseGradient), greyrampTool);
+  g_signal_connect(G_OBJECT(greyramp), "motion-notify-event", G_CALLBACK(onMouseMoveGradient), greyrampTool);
+  
+  /* Set the size of the gradient rectangle to be drawn */
+  rect->x = GRADIENT_RECT_X_PADDING_MIN;
+  rect->y = GRADIENT_RECT_Y_PADDING_MIN;
+  rect->width = GRADIENT_RECT_WIDTH;
+  rect->height = GRADIENT_RECT_HEIGHT_MIN;
+  
+  return greyramp;
+}
+
+
+/* Create a window to hold the greyramp tool when it is un-docked */
+static GtkWidget *createGreyrampToolWindow(DotterWindowContext *dwc, GtkWidget *greyrampTool)
+{
+  GtkWidget *greyrampWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+
+  char *title = g_strdup_printf("%sGreyramp Tool", dotterGetTitlePrefix(dwc->dotterCtx));
+  gtk_window_set_title(GTK_WINDOW(greyrampWindow), title);
+  g_free(title);
+
+  /* Set event handlers */
+  gtk_widget_add_events(greyrampTool, GDK_BUTTON_PRESS_MASK);
+  g_signal_connect(G_OBJECT(greyrampWindow), "delete-event", G_CALLBACK(onDeleteGreyrampTool), greyrampTool);
+
+  return greyrampWindow;
+}
+
+
+/* Create the minimised version of the greyramp widget. */
+GtkWidget* createGreyrampToolMinimised(DotterWindowContext *dwc,
+                                       const int whitePoint,
+                                       const int blackPoint)
+{
+  DEBUG_ENTER("createGreyrampToolMinimised");
+  
+  GtkWidget *greyrampTool = gtk_hbox_new(FALSE, 0) ;
+
+  /* Create a layout for drawing the greyramp gradient onto. This will be in the first column,
+   * spanning all rows */
+  GdkRectangle gradientRect;
+  GtkWidget *gradient = createGradientRectMinimised(&gradientRect, greyrampTool);
+  gtk_box_pack_start(GTK_BOX(greyrampTool), gradient, TRUE, TRUE, 0);
+
+  /* Create a 'maximise' button to toggle to the full sized greyramp tool */
+  GtkWidget *button = gtk_button_new_with_label("Maximise");
+  gtk_box_pack_start(GTK_BOX(greyrampTool), button, FALSE, FALSE, 0);
+  g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(onMaximiseGreyrampClicked), greyrampTool);
+  gtk_widget_set_tooltip_text(button, "Maximise the greyramp tool for more options (Ctrl-G)");
+
+  greyrampCreateProperties(greyrampTool, 
+                           NULL,
+			   dwc,
+                           &gradientRect,
+                           NULL, 
+                           NULL, 
+                           blackPoint, 
+                           whitePoint, 
+                           0,
+                           255, 
+                           FALSE,
+                           blackPoint - whitePoint);
+  
+  gtk_widget_show_all(greyrampTool);
+  
+  updateGreyMap(greyrampTool);
+                   
+  DEBUG_EXIT("createGreyrampToolMinimised returning ");
+  return greyrampTool;
+}
+
+
+/* Create the greyramp widget. Pass the initial value for the top and bottom spin buttons. If
+ * 'swapValues' is true these will be swapped. */
+GtkWidget* createGreyrampTool(DotterWindowContext *dwc,
+                              const int whitePointIn,
+                              const int blackPointIn,
+                              const gboolean swapValues,
+                              GtkWidget **greyrampWindow_out)
+{
+  DEBUG_ENTER("createGreyrampTool");
+
+  /* Create the window */
+  GtkWidget *greyrampTool = gtk_frame_new(NULL);
+  gtk_frame_set_shadow_type(GTK_FRAME(greyrampTool), GTK_SHADOW_ETCHED_IN);
+
+  /* Outer container is a table */
+  const int numRows = 5;
+  const int numCols = 2;
+  const int padding = 0;
+  GtkTable *table = GTK_TABLE(gtk_table_new(numRows, numCols, FALSE));
+  gtk_container_add(GTK_CONTAINER(greyrampTool), GTK_WIDGET(table));
+  
+  /* Create a layout for drawing the greyramp gradient onto. This will be in the first column,
+   * spanning all rows */
+  GdkRectangle gradientRect;
+  GtkWidget *gradientWidget = createGradientRect(greyrampTool, &gradientRect);
+  gtk_table_attach(table, gradientWidget, 0, 1, 0, numRows, GTK_SHRINK, GTK_SHRINK, padding, padding);
+
+  /* Create the toolbar and pack it into the parent */
+  const int whitePoint = swapValues ? blackPointIn : whitePointIn;
+  const int blackPoint = swapValues ? whitePointIn : blackPointIn;
+  
+  GtkWidget *whiteSpinButton = createSpinButton(whitePoint + 1, G_CALLBACK(onWhiteSpinButtonChanged), greyrampTool);
+  GtkWidget *blackSpinButton = createSpinButton(blackPoint + 1, G_CALLBACK(onBlackSpinButtonChanged), greyrampTool);
+
+  createGreyrampToolbar(table, 1, greyrampTool, whiteSpinButton, blackSpinButton, blackPoint, whitePoint);
+
+  GtkWidget *greyrampWindow = createGreyrampToolWindow(dwc, greyrampTool);
+  
+  greyrampCreateProperties(greyrampTool, 
+                           greyrampWindow,
+			   dwc,
+                           &gradientRect,
+                           whiteSpinButton, 
+                           blackSpinButton, 
+                           blackPoint, 
+                           whitePoint, 
+                           0,
+                           255, 
+                           swapValues,
+                           0);
+
+  gtk_spin_button_set_value(GTK_SPIN_BUTTON(whiteSpinButton), (float)whitePoint);
+  gtk_spin_button_set_value(GTK_SPIN_BUTTON(blackSpinButton), (float)blackPoint);
+  
+  gtk_widget_show_all(greyrampTool);
+  
+  updateGreyMap(greyrampTool);
+
+  if (greyrampWindow_out)
+    *greyrampWindow_out = greyrampWindow;
+                   
+  DEBUG_EXIT("createGreyrampTool returning ");
+  return greyrampTool;
+}
+  
+
diff --git a/dotterApp/seqtoolsExonView.cpp b/dotterApp/seqtoolsExonView.cpp
new file mode 100644
index 0000000..66e19c4
--- /dev/null
+++ b/dotterApp/seqtoolsExonView.cpp
@@ -0,0 +1,750 @@
+/*  File: seqtoolsExonView.c
+ *  Author: Gemma Barson, 2009-12-24
+ *  Copyright (c) 2010 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: See seqtoolsExonView.h
+ *----------------------------------------------------------------------------
+ */
+
+#include <dotterApp/seqtoolsExonView.hpp>
+#include <dotterApp/dotter_.hpp>
+#include <seqtoolsUtils/blxmsp.hpp>
+#include <string.h>
+#include <stdlib.h>
+#include <algorithm>
+
+using namespace std;
+
+
+typedef struct _ExonViewProperties
+  {
+    GtkWidget *parent;		      /* The parent widget that this view belongs to */
+    GtkCallback refreshFunc;	      /* Callback function to call on the parent when we require a refresh */
+    DotterContext *dc;		      /* Dotter session context */
+    DotterWindowContext *dwc;	      /* Dotter window context */
+  
+    BlxStrand strand;                 /* Which strand of the sequence this view displays exons for */
+    gboolean horizontal;              /* Whether these exons are for the horizontal or vertical sequence  */
+    const IntRange* qRange;           /* the range of ref seq coords the exon view displays, in nucleotide coords */
+    
+    gboolean bumped;		      /* Whether the exon view is expanded (bumped) or compressed */
+    int yPad;			      /* y padding */
+    
+    GdkRectangle exonViewRect;	      /* The drawing area for the exon view */
+    int exonHeight;                   /* the height of an individual exon */ 
+    
+    gboolean showCrosshair;           /* Flag that indicates whether we should draw the crosshair */
+  } ExonViewProperties;
+
+
+/* Utility struct to pass around data required for drawing exons */
+typedef struct _DrawData
+  {
+    GtkWidget *parent;
+    GdkDrawable *drawable;
+    GdkGC *gc;
+    DotterContext *dc;
+    DotterWindowContext *dwc;
+
+    GdkRectangle *exonViewRect;
+    const IntRange* const qRange;
+    
+    int yPad;			      /* y padding */
+    int y;			      /* y position to draw this exon at (constant if view compressed; increases if view bumped) */
+    int height;			      /* height of exon box */
+
+    const BlxStrand strand;           /* which strand of the sequence these exons are on */
+    gboolean horizontal;              /* whether these exons are for the horizontal or vertical sequence */
+    gboolean bumped;		      /* whether exon view is expaned or compressed */
+    gboolean normalOnly;	      /* Only draw "normal" MSPs, i.e. thse that are not selected and are not in a group */
+  } DrawData;
+
+
+
+/* Local function declarations */
+static ExonViewProperties*	exonViewGetProperties(GtkWidget *exonView);
+static void                     drawExonView(GtkWidget *exonView, GdkDrawable *drawable);
+
+
+/***********************************************************
+ *                       Utility functions                 *
+ ***********************************************************/
+
+/* Draw an exon */
+static void drawExon(const MSP* const msp, 
+                     DrawData *data, 
+                     const BlxSequence *blxSeq, 
+                     const gboolean isSelected, 
+                     const gint x, 
+                     const gint y,
+                     const gint widthIn,
+                     const gint heightIn)
+{
+  /* Clip to the drawing area (or just beyond, so we don't get end lines where the exon doesn't really end) */
+  gint xStart = x;
+  gint xEnd = x + widthIn;
+  gint width = widthIn;
+  
+  const gint xMin = (data->horizontal ? data->exonViewRect->x : data->exonViewRect->y);
+  const gint xMax = xMin + (data->horizontal ? data->exonViewRect->width : data->exonViewRect->height);
+  
+  if (xStart <= xMax && xEnd >= xMin)
+    {
+      if (xStart < xMin)
+        {
+          xStart = xMin - 1;
+          width = xEnd - xStart;
+        }
+
+      if (xEnd > xMax)
+        {
+          xEnd = xMax + 1;
+          width = xEnd - xStart;
+        }
+
+      /* Swap x and y if this is the vertical sequence */
+      int yStart = y;
+      gint height = heightIn;
+
+      if (!data->horizontal)
+        {
+          yStart = xStart;
+          xStart = y;
+          height = width;
+          width = heightIn;
+        }
+      
+      /* Draw the fill rectangle */
+      const GdkColor *fillColor = mspGetColor(msp, data->dc->defaultColors, DOTCOLOR_BACKGROUND, blxSeq, isSelected, data->dwc->usePrintColors, TRUE, DOTCOLOR_EXON_FILL, DOTCOLOR_EXON_LINE, DOTCOLOR_CDS_FILL, DOTCOLOR_CDS_LINE, DOTCOLOR_UTR_FILL, DOTCOLOR_UTR_LINE);
+      gdk_gc_set_foreground(data->gc, fillColor);
+      gdk_draw_rectangle(data->drawable, data->gc, TRUE, xStart, yStart, width, height);
+      
+      /* Draw outline (exon box outline always the same (unselected) color; only intron lines change when selected) */
+      const GdkColor *lineColor = mspGetColor(msp, data->dc->defaultColors, DOTCOLOR_BACKGROUND, blxSeq, isSelected, data->dwc->usePrintColors, FALSE, DOTCOLOR_EXON_FILL, DOTCOLOR_EXON_LINE, DOTCOLOR_CDS_FILL, DOTCOLOR_CDS_LINE, DOTCOLOR_UTR_FILL, DOTCOLOR_UTR_LINE);
+      gdk_gc_set_foreground(data->gc, lineColor);
+      gdk_draw_rectangle(data->drawable, data->gc, FALSE, xStart, yStart, width, height);
+    }
+}
+  
+
+static void swapValues(int *val1, int*val2)
+{
+  int tmp = *val1;
+  *val1 = *val2;
+  *val2 = tmp;
+}
+
+
+/* Utility to actually draw the line for an intron. Clips it if necessary, maintaining the same
+ * angle for the line */
+static void drawIntronLine(DrawData *data, const gint x1, const gint y1, const gint x2, const gint y2, GdkRectangle *clipRect)
+{
+  /* Only draw anything if at least part of the line is within range. We are only ever called with
+   * y values that are in range so don't bother checking them. */
+  const gint xMin = data->horizontal ? clipRect->x : clipRect->y;
+  const gint xMax = xMin + (data->horizontal ? clipRect->width : clipRect->height);
+  
+  if (x1 <= xMax && x2 >= xMin)
+    {
+      int xStart = x1;
+      int xEnd = x2;
+      int yStart = y1;
+      int yEnd = y2;
+      
+      /* Clip the start/end x values if out of range */
+      if (xStart < xMin)
+        {
+          const int origWidth = abs(xEnd - xStart);
+        
+          xStart = xMin;
+
+          const int newWidth = abs(xEnd - xStart);
+          const int newHeight = roundNearest((double)(yEnd - yStart) * (double)newWidth / (double)origWidth); /* negative if yend < ystart */
+          
+          yStart = yEnd - newHeight;
+        }
+
+      if (xEnd > xMax)
+        {
+          const int origWidth = abs(xEnd - xStart);
+
+          xEnd = xMax;
+
+          const int newWidth = abs(xEnd - xStart);
+          const int newHeight = roundNearest((double)(yEnd - yStart) * (double)newWidth / (double)origWidth);
+          
+          yEnd = yStart + newHeight;
+        }
+      
+      /* Swap x and y if we're drawing the view vertically rather than horizontally */
+      if (!data->horizontal)
+        {
+          swapValues(&xStart, &yStart);
+          swapValues(&xEnd, &yEnd);
+        }
+      
+      gdk_draw_line(data->drawable, data->gc, xStart, yStart, xEnd, yEnd);
+    }
+}
+
+
+/* Draw an intron */
+static void drawIntron(const MSP* const msp, 
+                       DrawData *data, 
+                       const BlxSequence *blxSeq, 
+                       const gboolean isSelected, 
+                       const gint xIn, 
+                       const gint yIn, 
+                       const gint widthIn, 
+                       const gint heightIn)
+{
+  const GdkColor *lineColor = mspGetColor(msp, data->dc->defaultColors, DOTCOLOR_BACKGROUND, blxSeq, isSelected, data->dwc->usePrintColors, FALSE, DOTCOLOR_EXON_FILL, DOTCOLOR_EXON_LINE, DOTCOLOR_CDS_FILL, DOTCOLOR_CDS_LINE, DOTCOLOR_UTR_FILL, DOTCOLOR_UTR_LINE);
+  gdk_gc_set_foreground(data->gc, lineColor);
+
+  /* The intron is drawn as two lines, making a trianglar shape, peaking at the
+   * middle coord of the intron (which is the x coord here at the moment). (Note that
+   * for the vertical exon view, x and y coords will be swapped in drawIntronLine.)
+   * For the horizontal sequence, peaks are above the centre y coord (smaller value)
+   * For the vertical sequence, peaks are effectively below the centre y coord (larger value) */
+  const int yOffset = roundNearest((double)heightIn / 2.0);
+  int yTop = data->horizontal ? yIn : yIn + heightIn;
+  int yBottom = yIn + yOffset;
+  
+  /* Draw the first section, from the given x to the mid point, sloping up */
+  int xStart = xIn;
+  int xEnd = xStart + roundNearest((double)widthIn / 2.0);
+  drawIntronLine(data, xStart, yBottom, xEnd, yTop, data->exonViewRect);
+
+  /* Draw the second section, from the mid point to the end, sloping down */
+  xStart  = xEnd;
+  xEnd = xIn + widthIn;
+  drawIntronLine(data, xStart, yTop, xEnd, yBottom, data->exonViewRect);
+}
+
+
+/* Draw the given exon/intron, if it is in range. Returns true if it was drawn */
+static gboolean drawExonIntron(const MSP *msp, DrawData *data, const gboolean isSelected, const BlxSequence *blxSeq)
+{
+  gboolean drawn = FALSE;
+  
+  if (rangesOverlap(&msp->qRange, data->qRange))
+    {
+      drawn = TRUE;
+
+      /* The grid pos for coords gives the left/top edge of the coord, so draw to max + 1 to be inclusive */
+      const int qStart = msp->qRange.min(true);
+      const int qEnd = msp->qRange.max(true);
+
+      /* Get the length-ways position (technically this will actually be y for the vertical sequence) */
+      const gint x1 = convertBaseIdxToRectPos(qStart, data->exonViewRect, data->qRange, data->horizontal, data->dc->hozScaleRev, FALSE);
+      const gint x2 = convertBaseIdxToRectPos(qEnd, data->exonViewRect, data->qRange, data->horizontal, data->dc->hozScaleRev, FALSE);
+      
+      gint x = min(x1, x2);
+      gint width = abs(x1 - x2);
+      gint y = data->y + data->yPad;
+      gint height = data->height;
+      
+      if (mspIsBoxFeature(msp))
+	{
+	  drawExon(msp, data, blxSeq, isSelected, x, y, width, height);
+	}
+      else if (mspIsIntron(msp))
+	{
+	  drawIntron(msp, data, blxSeq, isSelected, x, y, width, height);
+	}
+    }
+    
+  return drawn;
+}
+
+
+/* Returns true if the given MSP should be shown in this exon view */
+static gboolean showMspInExonView(const MSP *msp, DrawData *drawData)
+{
+  /* Check it's an exon or intron */
+  gboolean showMsp = mspIsBoxFeature(msp) || mspIsIntron(msp);
+  
+  /* Check it's in a visible layer */
+  showMsp &= mspLayerIsVisible(msp);
+  
+  /* Check it's the correct strand */
+  showMsp &= (mspGetRefStrand(msp) == drawData->strand);
+
+  /* Check it's for the correct sequence */
+  if (drawData->horizontal)
+    showMsp &= stringsEqual(msp->qname, drawData->dc->refSeqName, FALSE);
+  else
+    showMsp &= stringsEqual(msp->qname, drawData->dc->matchSeqName, FALSE);
+  
+  return showMsp;
+}
+
+/* Draw the msps in the given sequence, if they are exons/introns. Use the color
+ * specified in the user data */
+static void drawExonIntronItem(gpointer listItemData, gpointer data)
+{
+  const BlxSequence *seq = (const BlxSequence*)listItemData;
+  DrawData *drawData = (DrawData*)data;
+
+  const gboolean isSelected = FALSE; /* selections not implemented in dotter yet */
+  gboolean seqDrawn = FALSE;
+  
+  if (!drawData->normalOnly || !isSelected)
+    {
+      /* Loop through all msps in this sequence */
+      GList *mspListItem = seq->mspList;
+  
+      for ( ; mspListItem; mspListItem = mspListItem->next)
+	{
+	  MSP *msp = (MSP*)(mspListItem->data);
+      
+	  if (showMspInExonView(msp, drawData))
+	    {
+	      seqDrawn |= drawExonIntron(msp, drawData, isSelected, seq);
+	    }
+	}
+    }
+  
+  /* If the view is bumped, increase the y-coord for the next sequence */
+  if (seqDrawn && drawData->bumped)
+    {
+      drawData->y += drawData->height + (2 * drawData->yPad) ;
+    }
+}
+
+
+static void drawCrosshair(GtkWidget *exonView, GdkDrawable *drawable, GdkGC *gc)
+{
+  ExonViewProperties *properties = exonViewGetProperties(exonView);
+  
+  if (properties->showCrosshair)
+    {
+      DotterContext *dc = properties->dc;
+      DotterWindowContext *dwc = properties->dwc;
+      
+      const gdouble scaleFactor = dwc->zoomFactor * getResFactor(dc, properties->horizontal);
+      const int coord = getSelectedCoord(dwc, properties->horizontal);
+      
+      /* Work out the distance from the left/top edge of the rect */
+      const int distFromEdge = abs(coord - getStartCoord(dwc, properties->horizontal)) / scaleFactor;
+
+      GdkColor *color = getGdkColor(DOTCOLOR_CROSSHAIR, dc->defaultColors, FALSE, dwc->usePrintColors);
+      gdk_gc_set_foreground(gc, color);
+      
+      if (properties->horizontal)
+        {
+          /* Draw a vertical line at x */
+          const int x = properties->exonViewRect.x + distFromEdge;
+          gdk_draw_line(drawable, gc, x, 0, x, exonView->allocation.height);
+        }
+      else
+        {
+          /* Draw a horizontal line at y */
+          const int y = properties->exonViewRect.y + distFromEdge;
+          gdk_draw_line(drawable, gc, 0, y, exonView->allocation.width, y);
+        }
+    }
+}
+
+
+/* Prepare the exon view for printing. Draws the crosshair onto the cached
+ * drawable. (Normally it is drawn directly to screen in the expose function.) */
+void exonViewPrepareForPrinting(GtkWidget *exonView)
+{
+  GdkDrawable *drawable = widgetGetDrawable(exonView);
+  
+  if (!drawable)
+    {
+      drawable = createBlankPixmap(exonView);
+      drawExonView(exonView, drawable);
+    }
+  
+  if (drawable)
+    {
+      GdkGC *gc = gdk_gc_new(drawable);
+      drawCrosshair(exonView, drawable, gc);
+      g_object_unref(gc);
+    }
+}
+
+
+/* Draw the exon view */
+static void drawExonView(GtkWidget *exonView, GdkDrawable *drawable)
+{
+  DEBUG_ENTER("drawExonView");
+  
+  ExonViewProperties *properties = exonViewGetProperties(exonView);
+  DotterContext *dc = properties->dc;
+
+  GdkGC *gc = gdk_gc_new(drawable);
+
+  /* Set a clip rectangle for drawing the exons and introns (because they are drawn "over the
+   * edges" to make sure intron lines have the correct slope etc.) */
+  gdk_gc_set_clip_origin(gc, 0, 0);
+  gdk_gc_set_clip_rectangle(gc, &properties->exonViewRect);
+  
+  /* Draw the exons and introns. Since we could have a lot of them in the loop, extract all the
+   * info we need now and pass it around so we don't have to look for this stuff each time. */
+  
+  DrawData drawData = {
+    properties->parent,
+    drawable,
+    gc,
+    properties->dc,
+    properties->dwc,
+    
+    &properties->exonViewRect,
+    properties->qRange,
+    
+    properties->yPad,
+    properties->horizontal ? properties->exonViewRect.y : properties->exonViewRect.x,
+    properties->exonHeight,
+
+    properties->strand,
+    properties->horizontal,
+    properties->bumped,
+    FALSE
+  };
+  
+  /* Loop through all sequences, drawing all msps that are exons/introns */
+  GList *seqList = dc->seqList;
+  g_list_foreach(seqList, drawExonIntronItem, &drawData);
+
+  g_object_unref(gc);
+  DEBUG_EXIT("drawExonView returning ");
+}
+
+
+void calculateDotterExonViewHeight(GtkWidget *exonView)
+{
+  ExonViewProperties *properties = exonViewGetProperties(exonView);
+  DotterContext *dc = properties->dc;
+
+  /* Calculate the height based on how many exon lines will actually be drawn */
+  int numExons = 0;
+  int maxExons = properties->bumped ? UNSET_INT : 1; /* unset means no limit */
+  
+  /* Loop through all sequences */
+  GList *seqItem = dc->seqList;
+  
+  for ( ; seqItem; seqItem = seqItem->next)
+    {
+      /* Loop through all msps */
+      const BlxSequence *seq = (BlxSequence*)(seqItem->data);
+      GList *mspItem = seq->mspList;
+      
+      for ( ; mspItem; mspItem = mspItem->next)
+	{
+	  const MSP *msp = (const MSP*)(mspItem->data);
+	  
+	  if ((mspIsBoxFeature(msp) || mspIsIntron(msp)) && 
+              mspGetRefStrand(msp) == properties->strand &&
+	      rangesOverlap(&msp->qRange, properties->qRange))
+            {
+              ++numExons;
+              break; /* break inner loop and move to next sequence */
+            }
+	}
+      
+      /* Break after we've found the maximum number of lines, if a max is specified */
+      if (maxExons != UNSET_INT && numExons >= maxExons)
+	{
+	  break;
+	}
+    }
+  
+  if (properties->horizontal)
+    {
+      properties->exonViewRect.height = (numExons * (properties->exonHeight + 2 * properties->yPad)) + (2 * properties->yPad);
+      gtk_widget_set_size_request(exonView, -1, properties->exonViewRect.height);
+      gtk_layout_set_size(GTK_LAYOUT(exonView), exonView->allocation.width, properties->exonViewRect.height);
+    }
+  else
+    {
+      properties->exonViewRect.width = (numExons * (properties->exonHeight + 2 * properties->yPad)) + (2 * properties->yPad);
+      gtk_widget_set_size_request(exonView, properties->exonViewRect.width, -1);
+      gtk_layout_set_size(GTK_LAYOUT(exonView), properties->exonViewRect.width, exonView->allocation.height);
+    }
+}
+
+
+void calculateDotterExonViewBorders(GtkWidget *exonView, const int width, const int height)
+{
+  DEBUG_ENTER("calculateDotterExonViewBorders(width=%d, height=%d)", width, height);
+
+  ExonViewProperties *properties = exonViewGetProperties(exonView);
+  
+  /* Calculate the area where the exon view will be drawn */
+  if (properties->horizontal)
+    {
+      properties->exonViewRect.x = properties->dc->scaleWidth + properties->dc->charHeight; /* use same left border as dotplot */
+      properties->exonViewRect.y = 0;
+      properties->exonViewRect.width = width;
+      properties->exonViewRect.height = properties->exonHeight + (2 * properties->yPad);
+    }
+  else
+    {
+      properties->exonViewRect.x = 0;
+      properties->exonViewRect.y = properties->dc->scaleHeight + properties->dc->charHeight; /* use same top border as dotplot */
+      properties->exonViewRect.width = properties->exonHeight + (2 * properties->yPad);
+      properties->exonViewRect.height = height;
+    }
+  
+  gtk_layout_set_size(GTK_LAYOUT(exonView), properties->exonViewRect.x + properties->exonViewRect.width, properties->exonViewRect.y + properties->exonViewRect.height);
+  gtk_widget_set_size_request(exonView, properties->exonViewRect.x + properties->exonViewRect.width, properties->exonViewRect.y + properties->exonViewRect.height);
+  
+  /* If the display is bumped, we need to do more work to determine the height
+   * because it depends on the number of exons that are visible */
+  if (properties->bumped)
+    calculateDotterExonViewHeight(exonView);
+
+  widgetClearCachedDrawable(exonView, NULL);
+  gtk_widget_queue_draw(exonView);
+  
+  DEBUG_OUT("seq horizontal=%d, x=%d, y=%d, w=%d, h=%d\n", properties->horizontal, properties->exonViewRect.x, properties->exonViewRect.y, properties->exonViewRect.width, properties->exonViewRect.height);
+  DEBUG_EXIT("calculateDotterExonViewBorders returning ");
+}
+
+/***********************************************************
+ *                       Properties                        *
+ ***********************************************************/
+
+static ExonViewProperties* exonViewGetProperties(GtkWidget *exonView)
+{
+  return exonView ? (ExonViewProperties*)(g_object_get_data(G_OBJECT(exonView), "ExonViewProperties")) : NULL;
+}
+
+static void onDestroyExonView(GtkWidget *exonView)
+{
+  ExonViewProperties *properties = exonViewGetProperties(exonView);
+  if (properties)
+    {
+      delete properties;
+      properties = NULL;
+      g_object_set_data(G_OBJECT(exonView), "ExonViewProperties", NULL);
+    }
+}
+
+static void exonViewCreateProperties(GtkWidget *exonView, 
+				     GtkWidget *parent, 
+				     GtkCallback refreshFunc,
+                                     const gboolean horizontal,
+				     const BlxStrand strand,
+				     DotterContext *dc,
+				     DotterWindowContext *dwc,
+				     const int width,
+				     const IntRange* const qRange,
+                                     const gboolean showCrosshair)
+{
+  if (exonView)
+    {
+      ExonViewProperties *properties = new ExonViewProperties;
+      
+      properties->parent	      = parent;
+      properties->refreshFunc	      = refreshFunc;
+      properties->dc		      = dc;
+      properties->dwc		      = dwc;
+
+      properties->strand	      = strand;
+      properties->horizontal          = horizontal;
+      properties->qRange	      = qRange;
+      
+      properties->bumped	      = FALSE;
+      properties->yPad		      =	DEFAULT_EXON_YPAD;
+      
+      properties->exonViewRect.x      = 0;
+      properties->exonViewRect.y      = DEFAULT_EXON_YPAD;
+      properties->exonViewRect.width  = width;
+      properties->exonViewRect.height = DEFAULT_EXON_HEIGHT;
+
+      properties->exonHeight          = DEFAULT_EXON_HEIGHT;
+      properties->showCrosshair       = showCrosshair;
+      
+      gtk_widget_set_size_request(exonView, 0, DEFAULT_EXON_HEIGHT + (2 * DEFAULT_EXON_YPAD));
+
+      g_object_set_data(G_OBJECT(exonView), "ExonViewProperties", properties);
+      g_signal_connect(G_OBJECT(exonView), "destroy", G_CALLBACK(onDestroyExonView), NULL);
+    }
+}
+
+gboolean exonViewGetBumped(GtkWidget *exonView)
+{
+  ExonViewProperties *properties = exonViewGetProperties(exonView);
+  return properties->bumped;
+}
+
+/* Set whether the view is bumped or not */
+void exonViewSetBumped(GtkWidget *exonView, const gboolean bumped)
+{
+  ExonViewProperties *properties = exonViewGetProperties(exonView);
+  properties->bumped = bumped;
+
+  if (bumped)
+    {
+      properties->yPad = DEFAULT_EXON_YPAD_BUMPED;
+      properties->exonHeight = DEFAULT_EXON_HEIGHT_BUMPED;
+    }
+  else 
+    {
+      properties->yPad = DEFAULT_EXON_YPAD;
+      properties->exonHeight = DEFAULT_EXON_HEIGHT;
+    }
+  
+  calculateDotterExonViewHeight(exonView);
+
+  /* Refresh the parent */
+  if (properties->refreshFunc)
+    properties->refreshFunc(properties->parent, NULL);
+
+  /* Redraw all */
+  widgetClearCachedDrawable(exonView, NULL);
+  gtk_widget_queue_draw(exonView);
+}
+
+
+/* Toggle whether the view is bumped or not */
+void exonViewToggleBumped(GtkWidget *exonView)
+{
+  ExonViewProperties *properties = exonViewGetProperties(exonView);
+  exonViewSetBumped(exonView, !properties->bumped);
+}
+
+void exonViewSetShowCrosshair(GtkWidget *exonView, const gboolean showCrosshair)
+{
+  ExonViewProperties *properties = exonViewGetProperties(exonView);
+  properties->showCrosshair = showCrosshair;
+}
+
+
+/***********************************************************
+ *                       Events                            *
+ ***********************************************************/
+
+static gboolean onExposeExonView(GtkWidget *exonView, GdkEventExpose *event, gpointer data)
+{
+  GdkDrawable *drawable = widgetGetDrawable(exonView);
+  
+  if (!drawable)
+    {
+      /* Create a pixmap and draw the exon view onto it */
+      drawable = createBlankPixmap(exonView);
+      drawExonView(exonView, drawable);
+    }
+  
+  if (drawable)
+    {  
+      /* Push the pixmap onto the screen */
+      GdkDrawable *window = GTK_LAYOUT(exonView)->bin_window;
+      
+      GdkGC *gc = gdk_gc_new(window);
+
+      gdk_draw_drawable(window, gc, drawable, 0, 0, 0, 0, -1, -1);
+
+      /* Draw the crosshair over the top */
+      drawCrosshair(exonView, window, gc);
+      
+      g_object_unref(gc);
+    }
+
+
+  return TRUE;
+}
+
+static void onSizeAllocateExonView(GtkWidget *exonView, GtkAllocation *allocation, gpointer data)
+{
+
+}
+
+
+static gboolean onButtonPressExonView(GtkWidget *exonView, GdkEventButton *event, gpointer data)
+{
+  gboolean handled = FALSE;
+  return handled;
+}
+
+
+static gboolean onButtonReleaseExonView(GtkWidget *exonView, GdkEventButton *event, gpointer data)
+{
+  return TRUE;
+}
+
+
+static gboolean onMouseMoveExonView(GtkWidget *exonView, GdkEventMotion *event, gpointer data)
+{
+  return TRUE;
+}
+
+
+/***********************************************************
+ *                       Initialisation                    *
+ ***********************************************************/
+
+/* Create the part of the view that will show the exons. Returns the outermost container of the
+ * exon and sets the exonViewOut output arg to the actual layout widget for the exon view. */
+GtkWidget *createDotterExonView(GtkWidget *parent, 
+				GtkCallback refreshFunc,
+                                const gboolean horizontal,
+				const BlxStrand strand, 
+				DotterWindowContext *dwc,
+				const int width,
+                                const int height,
+				const IntRange* const qRange,
+                                const gboolean showCrosshair,
+                                GtkWidget **exonViewOut)
+{
+  DEBUG_ENTER("createDotterExonView(width=%d, height=%d, qRange=%d %d)", width, height, qRange->min(), qRange->max());
+
+  DotterContext *dc = dwc->dotterCtx;
+  
+  GtkWidget *exonView = gtk_layout_new(NULL, NULL);
+  gtk_widget_set_name(exonView, SEQTOOLS_EXON_VIEW_NAME);
+
+  if (exonViewOut)
+    *exonViewOut = exonView;
+  
+  /* Connect signals */
+  gtk_widget_add_events(exonView, GDK_BUTTON_PRESS_MASK);
+  gtk_widget_add_events(exonView, GDK_BUTTON_RELEASE_MASK);
+  gtk_widget_add_events(exonView, GDK_POINTER_MOTION_MASK);
+  
+  g_signal_connect(G_OBJECT(exonView),	"expose-event",		G_CALLBACK(onExposeExonView),	      NULL);
+  g_signal_connect(G_OBJECT(exonView),	"size-allocate",	G_CALLBACK(onSizeAllocateExonView),   NULL);
+  g_signal_connect(G_OBJECT(exonView),	"button-press-event",   G_CALLBACK(onButtonPressExonView),    NULL);
+  g_signal_connect(G_OBJECT(exonView),	"button-release-event", G_CALLBACK(onButtonReleaseExonView),  NULL);
+  g_signal_connect(G_OBJECT(exonView),	"motion-notify-event",  G_CALLBACK(onMouseMoveExonView),      NULL);
+
+  exonViewCreateProperties(exonView, parent, refreshFunc, horizontal, strand, dc, dwc, width, qRange, showCrosshair);
+  calculateDotterExonViewBorders(exonView, width, height);
+  
+  DEBUG_EXIT("createDotterExonView returning ");
+  return exonView;
+}
diff --git a/dotterApp/seqtoolsExonView.hpp b/dotterApp/seqtoolsExonView.hpp
new file mode 100644
index 0000000..ee6efbf
--- /dev/null
+++ b/dotterApp/seqtoolsExonView.hpp
@@ -0,0 +1,84 @@
+/*  File: seqtoolsExonView.h
+ *  Author: Gemma Barson, 2009-12-24
+ *  Copyright (c) 2010 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: Widget to draw the exons and introns in Dotter.
+ *
+ *              seqtoolsExonView.c/.h were copied from exonview.c/.h. They
+ *              contain much of the same code so the aim was to make these
+ *              files generic enough for both Blixem and Dotter to use and to
+ *              put them in the seqtoolsUtils library. Unfortunately due to
+ *              time constraints this didn't happen, so these files still 
+ *              contain some Dotter- and Blixem- specific stuff: in Dotter
+ *              we need to draw the crosshair over the exon view; in Blixem
+ *              we need to draw the highlight box to indicate the current
+ *              detail-view range.
+ *----------------------------------------------------------------------------
+ */
+
+#ifndef _seqtools_exon_view_included_
+#define _seqtools_exon_view_included_
+
+#include <gtk/gtk.h>
+#include <seqtoolsUtils/blxmsp.hpp>
+#include <dotterApp/dotter_.hpp>
+
+#define SEQTOOLS_EXON_VIEW_NAME		"SeqtoolsExonView"
+#define DEFAULT_EXON_HEIGHT			 10
+#define DEFAULT_EXON_HEIGHT_BUMPED		 7
+#define	DEFAULT_EXON_YPAD			 10
+#define	DEFAULT_EXON_YPAD_BUMPED		 4
+
+
+/* Public function declarations */
+GtkWidget *createDotterExonView(GtkWidget *parent, 
+				GtkCallback refreshFunc,
+                                const gboolean horizontal,
+				const BlxStrand strand, 
+				DotterWindowContext *dwc,
+				const int width,
+                                const int height,
+				const IntRange* const qRange,
+                                const gboolean drawCrosshair,
+                                GtkWidget **exonViewOut);
+
+//gboolean	exonViewGetBumped(GtkWidget *exonView);
+//void		exonViewSetBumped(GtkWidget *exonView, const gboolean bumped);
+void		exonViewToggleBumped(GtkWidget *exonView);
+//
+//void            callFuncOnAllChildExonViews(GtkWidget *widget, gpointer data);
+void		calculateDotterExonViewHeight(GtkWidget *exonView);
+void		calculateDotterExonViewBorders(GtkWidget *exonView, const int width, const int height);
+void            exonViewSetShowCrosshair(GtkWidget *exonView, const gboolean showCrosshair);
+void            exonViewPrepareForPrinting(GtkWidget *exonView);
+
+#endif /* _seqtools_exon_view_included_ */
diff --git a/examples/DA730641.fasta b/examples/DA730641.fasta
new file mode 100644
index 0000000..f25ebbf
--- /dev/null
+++ b/examples/DA730641.fasta
@@ -0,0 +1,16 @@
+>DA730641.1 Homo sapiens cDNA clone NT2RM4000472, 5' end, mRNA sequence.
+AAAATCTGGCGCGGCTTTTGCCTTTTGCGCCAGCGTGAGCTCGGTTAGGGTCTCCACGGC
+CGTGCTTTCACCCCTCAGGGAGGCGTCGGTGATTCGGTCACAGCCTCAGCCTCCGTCGCT
+CTGTGACCTGCGGGTATTGGATGATTCGTAGCTGAGACTCCGCTACACCCCTGAAGTGGG
+GAAATGGTGTGTGTTCTCATTTTACCCAAGATCTTTGGCCAGTGCAGGGCATAGAAGATT
+CATTCCACAAACTTATACTGAGAAGATATGAGAAATGTGGACAGAAGAATTTACAATTAA
+GGAAAGGCTCTAAAAGTGTGAATAAGTGTAAGGTGCAGAAAGGAGGTTATAATGGACTTT
+ACCAATGCTTATCAACTACCCAGAGCAAAATAATTCAGTGTAATACATCTGTCAAAGTTT
+TTCATAAATTTTCAAATTCAAACAACATAAGACATACTGGAGAGAAATCATTTAAATGTA
+AAAAATGTGGCAGATCATTTCGCAAGTTCCTCCAACTAACTTAACATAAGGGAATACATG
+CTGGAGAGATACCCTACAAATAAATGTGAAGAATGTGGCAAAGCCTCTAATAGGTCCACA
+AGCATTACTAAATATAAGAAAATTCATGCTGGAGAGAAACCCCTCATGTGAAGAACGTGT
+CAGAATCTTTACCTCATCCTCAAGCTTTGACAAACATAAGAGAATTCATACTGGAGAGAA
+ACCCTACACGTGAAGAATGTGGCAAAGCCTTGAGACAATTCACAGTTCTGAATGAACATA
+AGAAAATTCATACTGGAAAAGAACCCTNCCAATGTGAAGAATGNGCAAAGCTTTTAAACA
+GTCCANAAGCCTGAATGACATAAGAA
diff --git a/examples/Makefile.am b/examples/Makefile.am
new file mode 100644
index 0000000..6bcf55f
--- /dev/null
+++ b/examples/Makefile.am
@@ -0,0 +1,17 @@
+
+SUBDIRS = .
+
+EXTRA_DIST = \
+DA730641.fasta \
+PF02171_seed.stock \
+Q9H8G1.fasta \
+README \
+chr4_dna_align.gff \
+chr4_protein_align.gff \
+chr4_ref_seq.fasta \
+chr4_ref_seq_short.fasta \
+chr4_translation_frame1.fasta
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/examples/Makefile.in
diff --git a/examples/Makefile.in b/examples/Makefile.in
new file mode 100644
index 0000000..91a876b
--- /dev/null
+++ b/examples/Makefile.in
@@ -0,0 +1,595 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 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@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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 = :
+subdir = examples
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am README
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/./seqtools_version.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-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 \
+	tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+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@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPS_CFLAGS = @DEPS_CFLAGS@
+DEPS_LIBS = @DEPS_LIBS@
+DEPS_SQLITE3_CFLAGS = @DEPS_SQLITE3_CFLAGS@
+DEPS_SQLITE3_LIBS = @DEPS_SQLITE3_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+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_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+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_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+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@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = .
+EXTRA_DIST = \
+DA730641.fasta \
+PF02171_seed.stock \
+Q9H8G1.fasta \
+README \
+chr4_dna_align.gff \
+chr4_protein_align.gff \
+chr4_ref_seq.fasta \
+chr4_ref_seq_short.fasta \
+chr4_translation_frame1.fasta
+
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/examples/Makefile.in
+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 examples/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign examples/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):
+
+# 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.
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	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"
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	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; \
+	$(am__define_uniq_tagged_files); \
+	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-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	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"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+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 \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    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:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+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."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-recursive
+
+clean-am: clean-generic 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
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+	check-am clean clean-generic cscopelist-am ctags ctags-am \
+	distclean distclean-generic 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 pdf \
+	pdf-am ps ps-am tags tags-am 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/examples/PF02171_seed.stock b/examples/PF02171_seed.stock
new file mode 100644
index 0000000..6337c18
--- /dev/null
+++ b/examples/PF02171_seed.stock
@@ -0,0 +1,59 @@
+# STOCKHOLM 1.0
+#=GS YQ53_CAEEL/650-977     AC Q09249.1
+#=GS Q21691_CAEEL/673-1001  AC Q21691.1
+#=GS O48771_ARATH/542-860   AC O48771.1
+#=GS Q9ZVD5_ARATH/577-885   AC Q9ZVD5.2
+#=GS TAG76_CAEEL/660-966    AC P34681.2
+#=GS O16720_CAEEL/566-867   AC O16720.2
+#=GS PINH_ARATH/625-946     AC Q9XGW1.1
+#=GS AGO1_SCHPO/500-799     AC O74957.1
+#=GS O76922_DROME/555-852   AC O76922.1
+#=GS PIWI_DROME/538-829     AC Q9VKM1.1
+#=GS Q17567_CAEEL/397-708   AC Q17567.1
+#=GS PIWL1_HUMAN/555-847    AC Q96J94.1
+#=GS PIWI_ARCFU/110-406     AC O28951.1
+#=GS PIWI_ARCFU/110-406     DR PDB; 1w9h A; 110-406;
+#=GS PIWI_ARCFU/110-406     DR PDB; 2bgg A; 110-406;
+#=GS PIWI_ARCFU/110-406     DR PDB; 2bgg B; 110-406;
+#=GS PIWI_ARCFU/110-406     DR PDB; 1ytu A; 110-406;
+#=GS PIWI_ARCFU/110-406     DR PDB; 2w42 A; 110-406;
+#=GS PIWI_ARCFU/110-406     DR PDB; 2w42 B; 110-406;
+#=GS PIWI_ARCFU/110-406     DR PDB; 1ytu B; 110-406;
+#=GS Y1321_METJA/426-699    AC Q58717.1
+#=GS O67434_AQUAE/419-694   AC O67434.1
+#=GS O67434_AQUAE/419-694   DR PDB; 2nub A; 419-694;
+#=GS O67434_AQUAE/419-694   DR PDB; 1yvu A; 419-694;
+#=GS O67434_AQUAE/419-694   DR PDB; 2f8s A; 419-694;
+#=GS O67434_AQUAE/419-694   DR PDB; 2f8s B; 419-694;
+#=GS Q21495_CAEEL/52-336    AC Q21495.4
+#=GS O16386_CAEEL/548-847   AC O16386.1
+#=GS O02095_CAEEL/574-878   AC O02095.2
+#=GS Q19645_CAEEL/674-996   AC Q19645.1
+#=GS Q23415_CAEEL/40-350    AC Q23415.1
+#=GS O62275_CAEEL/594-924   AC O62275.1
+YQ53_CAEEL/650-977                DILVGIAR.EKKPD.VHDILKYFEESIGLQTIQLCQQTVDKM.....MG....GQGGRQTIDNVMRKFNLKCGGTNFFVEIPNAVRGKAVCSNNETLRKKLLEHVQFIGFEISHGASRTLFDRSRSQMDGEPSVVGVSYSLT...NSTQLGGFTYLQTQKEYKLQKLDE............FFPKCVRSYKEHSKT.LPTRIVIYRVGAGEGNFNRVKE.EVEEMRRTFD.......KIQ.PGYR..PHLVVIIAQRASHARVFPSCISG.....................NRATDQNIPSGTCV...ENVLTSYGYDEFILSSQTPLIGTVRPCKYTILVNDA...KWSKNEL.MHL......TYFRAFGHQVSY....QPPSV........PDVLYAAENLAKRGRNNYK
+Q21691_CAEEL/673-1001             TIVFGIIA.EKRPD.MHDILKYFEEKLGQQTIQISSETADKF.....MR....DHGGKQTIDNVIRKLNPKCGGTNFLIDVPESVGHRVVCNNSAEMRAKLYAKTQFIGFEMSHTGARTRFDIQKVMFDGDPTVVGVAYSL..KHSAQLGGFSYFQESRLHKLTN.LQE............KMQICLNAYEQSSSY.LPETVVVYRVGSGEGDYPQIVN.EVNEMKLAAR.......KKK.HGYN..PKFLVICTQRNSHIRVFPEHINE....................RGKSMEQNVKSGTCV...DVPGASHGYEEFILCCQTPLIGTVKPTKYTIIVNDC...RWSKNEI.MNV......TYHLAFAHQVSY....APPAI........PNVSYAAQNLAKRGHNNYK
+O48771_ARATH/542-860              FILCILPERKTSDI.YGPWKKICLTEEGIHTQCICPIKI.................SDQYLTNVLLKINSKLGGINS.LLGIEYSYNIPLINKIPTL.........ILGMDVSHGPPGR.........ADVPSVAAVVGSKCWPLISRYRAAVRTQSPRLEMIDSLFQP..IENTEKGDNGIMNELFVEFYRTSRARKPKQIIIFRDGVSESQFEQVLKIEVDQIIKAYQ.......RLG.ESDV..PKFTVIVAQKNHHTKLFQAKGPE...........................NVPAGTVV...DTKIVHPTNYDFYMCAHAGKIGTSRPAHYHVLLDEI...GFSPDDL.QNL......IHSLSYKLLNSI....FNVSSLLCVFVLSVAPVRYAHLAAAQVAQFTK
+Q9ZVD5_ARATH/577-885              FILCVLPDKKNSDL.YGPWKKKNLTEFGIVTQCMAPTRQPND................QYLTNLLLKINAKLGGLNS.MLSVERTPAFTVISKVPTI.........ILGMDVSHGSPGQ.........SDVPSIAAVVSSREWPLISKYRASVRTQPSKAEMIESLVKK.....NGTEDDGIIKELLVDFYTSSNKRKPEHIIIFRDGVSESQFNQVLNIELDQIIEACK.......LLD.ANWN..PKFLLLVAQKNHHTKFFQPTSPE...........................NVPPGTII...DNKICHPKNNDFYLCAHAGMIGTTRPTHYHVLYDEI...GFSADEL.QEL......VHSLSYVYQRST....SAISV........VAPICYAHLAAAQLGTFMK
+TAG76_CAEEL/660-966               CIIVVLQS.KNSDI.YMTVKEQSDIVHGIMSQCVLMKNVSRP..............TPATCANIVLKLNMKMGGIN..SRIVADKITNKYLVDQPTM.........VVGIDVTHPTQAE.......MRMNMPSVAAIVANVD.LLPQSYGANVKVQKKCRESVVY.LLD............AIRERIITFYRHTKQ.KPARIIVYRDGVSEGQFSEVLREEIQSIRTACL.......AIA.EDFR..PPITYIVVQKRHHARIFCKYQND.....................MVGKAKNVPPGTTV...DTGIVSPEGFDFYLCSHYGVQGTSRPARYHVLLDEC...KFTADEI.QSI......TYGMCHTYGRCT....RSVSI........PTPVYYADLVATRARCHVK
+O16720_CAEEL/566-867              LIVVVLPG..KTPI.YAEVKRVGDTVLGIATQCVQAKNAIRT..............TPQTLSNLCLKMNVKLGGVNS.ILLPNVRPR...IFNEPVI.........FLGCDITHPAAGD.........TRKPSIAAVVGSMD.AHPSRYAATVRVQQHRQEIITD.LTY............MVRELLVQFYRNTRF.KPARIVVYRDGVSEGQLFNVLQYELRAIREACV.......MLE.SGYQ..PGITFIAVQKRHHTRLFAADKAD.....................QVGKAFNIPPGTTV...DVGITHPTEFDFFLCSHAGIQGTSRPSHYHVLWDDN...DLTADEL.QQL......TYQMCHTYVRCT....RSVSI........PAPAYYAHLVAFRARYHLV
+PINH_ARATH/625-946                LLLAILPD.NNGSL.YGDLKRICETELGLISQCCLTKHVFKI..............SKQYLANVSLKINVKMGGRNT.VLVDAISCRIPLVSDIPTI.........IFGADVTHPENGE.........ESSPSIAAVVASQDWPEVTKYAGLVCAQAHRQELIQDLYKTWQDPVRGTVSGGMIRDLLISFRKATGQ.KPLRIIFYRDGVSEGQFYQVLLYELDAIRKACA.......SLE.PNYQ..PPVTFIVVQKRHHTRLFANNHRD...................KNSTDRSGNILPGTVV...DTKICHPTEFDFYLCSHAGIQGTSRPAHYHVLWDEN...NFTADGI.QSL......TNNLCYTYARCT....RSVSI........VPPAYYAHLAAFRARFYLE
+AGO1_SCHPO/500-799                YLFFILDK.NSPEP.YGSIKRVCNTMLGVPSQCAISKHILQS..............KPQYCANLGMKINVKVGGINC.SLIPKSNP....LGNVPTL.........ILGGDVYHPGVGA..........TGVSIASIVASVD.LNGCKYTAVSRSQPRHQEVIEG.MKD............IVVYLLQGFRAMTKQ.QPQRIIYFRDGTSEGQFLSVINDELSQIKEACH.......SLS.PKYN..PKILVCTTQKRHHARFFIKNKSD......................GDRNGNPLPGTII...EKHVTHPYQYDFYLISHPSLQGVSVPVHYTVLHDEI...QMPPDQF.QTL......CYNLCYVYARAT....SAVSL........VPPVYYAHLVSNLARYQDV
+O76922_DROME/555-852              IVMVVMRS.PNEEK.YSCIKKRTCVDRPVPSQVVTLKVIAPR.....QQ...KPTGLMSIATKVVIQMNAKLMGA...PWQVVIPL.......HGLM.........TVGFDVCHSPKNK...........NKSYGAFVATMDQKESFRYFSTVNEHIKGQELSEQ.MSV............NMACALRSYQEQHRS.LPERILFFRDGVGDGQLYQVVNSEVNTLKDRLDEI...YKSAG.KQEG..CRMTFIIVSKRINSRYFT.............................GHRNPVPGTVV...DDVITLPERYDFFLVSQAVRIGTVSPTSYNVISDNM...GLNADKL.QML......SYKMTHMYYNYS....GTIRV........PAVCHYAHKLAFLVAESIN
+PIWI_DROME/538-829                LILCLVPN.DNAER.YSSIKKRGYVDRAVPTQVVTLKTTKNR.....SL........MSIATKIAIQLNCKLGYT...PWMIELPL.......SGLM.........TIGFDIAKSTRDR...........KRAYGALIASMDLQQNSTYFSTV.TECSAFDVLANTLWP............MIAKALRQYQHEHRK.LPSRIVFYRDGVSSGSLKQLFEFEVKDIIEKLKTE...YARVQ.LSP...PQLAYIVVTRSMNTRFFLN.............................GQNPPPGTIV...DDVITLPERYDFYLVSQQVRQGTVSPTSYNVLYSSM...GLSPEKM.QKL......TYKMCHLYYNWS....GTTRV........PAVCQYAKKLATLVGTNLH
+Q17567_CAEEL/397-708              MLVVMLAD.DNKTR.YDSLKKYLCVECPIPNQCVNLRTLAGK.....SKDGGENKNLGSIVLKIVLQMICKTGGA...LWKVNIPL.......KSTM.........IVGYDLYHDSTLK...........GKTVGACVSTTS.NDFTQFYSQTRPHENPTQLGNN.LTH............FVRKSLKQYYDNNDKTLPSRLILYRDGAGDGQIPYIKNTEVKLVRDACDAVTDKAAELS.NKVQEKIKLAFIIVTKRVNMRILKQGSSS.......................KSAINPQPGTVV...DTTVTRPERMDFYLVPQFVNQGTVTPVSYNIIHDDT...GLGPDKH.QQL......AFKLCHLYYNWQ....GTVRV........PAPCQYAHKLAFLTAQSLH
+PIWL1_HUMAN/555-847               IVVCLLSS.NRKDK.YDAIKKYLCTDCPTPSQCVVARTLGKQ.....QT.......VMAIATKIALQMNCKMGGE...LWRVDIPL.......KLVM.........IVGIDCYHDMTAG...........RRSIAGFVASIN.EGMTRWFSRCIFQDRGQELVDG.LKV............CLQAALRAW.NSCNEYMPSRIIVYRDGVGDGQLKTLVNYEVPQFLDCLK.......SIG.RGYN..PRLTVIVVKKRVNTRFFAQSGGR.........................LQNPLPGTVI...DVEVTRPEWYDFFIVSQAVRSGSVSPTHYNVIYDNS...GLKPDHI.QRL......TYKLCHIYYNWP....GVIRV........PAPCQYAHKLAFLVGQSIH
+PIWI_ARCFU/110-406                GIMLVLPE.YNTPL.YYKLKSYLINS..IPSQFMRYDILSNR.....NL........TFYVDNLLVQFVSKLGGK...PWILNVDPEK....................GSDIIIGTGAT........RIDNVNLFCFAMVFK.KDGTMLWNEISPIVTSSEYLTY.LKS............TIKKVVYGFKKSNPDWDVEKLTLHVSG....KRPKMKDGETKILKETVE.......ELK.KQEMVSRDVKYAILHLNETHPFWVMGDPN........................NRFHPYEGTKVKLSSKRYLLTLLQPYLKRNGLEMVTPIKPLSVEIVSDN.....WTSEEYYHNVHEILDEIYYLSKMNWRGF....RSRNL........PVTVNYPKLVAGIIANVNR
+#=GR PIWI_ARCFU/110-406     SS    --EEEESS.S-HHH.HHHHHHHHHTT..S--EEEEHHHHCTS.....TH........HHHHHHHHHHHHHH----...--EE---TT-....................---EEE----E........ESSSSEEE-EEEEEE.----EEEEEE--SEEGGGHHHH.HHH............HHHHHH---TTTSTT---SEEEEEE--....---S-----HHHHHHHHH.......HHH.HTTSS-TT-EEEEEEEEE---EEEE--TT........................TT-------EEESSSSEEEEEEE-TCEE----EEEEEEEEEEEEEEEE-.....--TTTHHHHHHHHHHHHHHHTT------....---SS........-HHHHHHHHH---HHHHHH
+Y1321_METJA/426-699               CFALIIGKEKYKDNDYYEILKKQLFDLKIISQNILWENWRKD.....DK........GYMTNNLLIQIMGKLGIK...YFILDSKTPYDY................IMGLDTGLGIFGN............HRVGGCTVVYDSEGKIRRIQPIETPAPGERLHLP................YVIEYLEN..KANIDMENKNILFLRDG.......FIQNSERNDLKEISK.......ELN.......SNIEVISIRKNNKYKVFTSDYRI........................GSVFGNDGIFLPHKTPFGSNPVKLSTWLRFNCGNEEGLK...IN.............ESI.MQL......LYDLTKMNYSALYGEGRYLRI........PAPIHYADKFVKALGKNWK
+O67434_AQUAE/419-694              LVIVFLEEYPKVDP.YKSFLLYDFVKRELLKKMIPSQVILNR.....TL...KNENLKFVLLNVAEQVLAKTGNIP..YKLKEIEGKVDA................FVGIDISRITRDG..........KTVNAVAFTKIFNSKGELVRYYLTSYPAFGEKLTEK................AIGDVFSLLEKLGF.KKGSKIVVHRDG.......RLYRDEVAAFK...........KYG.ELYG..YSLELLEIIKRNNPRFFSNEKFI..............................KGYFYKLSEDSVILATYNQVY.......EGTHQPIKVRKVYGE.....LPVEVL.CSQ......ILSLTLMNYSSF....QPIKL........PATVHYSDKITKLMLRGIE
+#=GR O67434_AQUAE/419-694   SS    EEEEEE---S---S.SS--HHHHHHHHHHHHTT--EEEEEHH.....HH...HHS-HHHHHHHHHHHHHHH---BS..-EES------SE................EE--EEEEEE---..........-ECEEEEEEEEEE----EEEEEEEEETT---HHHHH................H---HHHHHHH---.----EEEEEE--.......---HHHHHHHH...........H--.----..-EEEEEEEE-SS---EEES-S--..............................---EEEETTTEEEE--S----.......---B--EEEEEEE--.....--HHHH.HHH......HHHHGGGG--TT....S--SS........-TTTTTHHHHHHHHH----
+Q21495_CAEEL/52-336               GIVLPTPRIFFRDG..........QETSLNNQSFRNPT...................DFAQTGFFVDAKQQLGGLN..YVVNS.....ETWNDSGLL.........LIGLSTAPYLNSY........SSENVTTIGFVSNTM.DHPQKFAGGYKYVKSGSDVFGQVMPE............ILLNSLRSARKARKI.KPMNIVIYLCGMSESRFSIVKEEYVRNCHSVFK.......TLG.EKYS..PQLTIIVGSKGHSTRLYARGERD........................QISNLQPGTIV...DSVIVSPDYNKFFHCGAVARQGTCKATKYTVLYPE....SPKMEWI.QRM......TNDLCYMHEIVF....HPVSL........PAPLYLTAEMAERGTKNLA
+O16386_CAEEL/548-847              QLIMFITK..SMNN.YHTEIKCLEQEFDLLTQDIRFETAVKL.....AQ.......QQNTRKNIIYKTNMKLGGLN..YELRS.....GVFSNSKRL.........IIGFETSQRGGLG..........DAPIAIGFAANMM.SHSQQFAGGYMFVKKSADNYGPVIPE............ILLTILKQAKANRPNDRPDELLIYFSGVSEGQHALVNEYYANQVKAACG.......LFN.ESFR..PHITLILASKVHNTRVYKSENGG........................GVCNVEPGTVI...DHTIVSPVLSEWYHAGSLARQGTSKLVKYSLIFNTK...KNEKLSVYERL......TNELCYEMQIVF....HPTSL........PIPLHIAGTYSERGSQMLA
+O02095_CAEEL/574-878              QLLFFVVK..SRYN.YHQQIKALEQKYDVLTQEIRAETAEKV.....FR.......QPQTRLNIINKTNMKLGGLN..YAIGS.....EAFNKPNRL.........IVGFVTSQRVGGN.........PDYPISVGFAANML.KHHQKFAGGYVYVHRDRDVFGSIIKD............TLLAIFKTCTEQRG..RPDDILLYFNGVSEGQFSMINEEFSARVKEACMAF...QKEGT.PPFR..PHITIIASSKAHNERLYKSDKGR.........................IVNLEPGTVV...DHTIVSNVYTEWYHASAVARQGTAKATKFTLIFTTKAGPQAEPLWHLEQL......TNDLCYDHQIVF....HPVGL........PVPLYIADRYSQRGAMVLA
+Q19645_CAEEL/674-996              PFVLFISD..DVPN.IHECLKFEERMSDIPTQHVLLKNVKKMRDNIEKKSQGGRRAYDLTLDNIVMKANIKCGGLN..YT.ADIPRDLACWNEVSTF.........VIGMDVAHPDRNA.......AREGNPSTVGLSCNSA.ENPYSFIGDFLYTDPRREAIQDEILR...........KFTDQSVRNFAEIRG..FPKKVIIFRDGVSFGEETAALK.EVEIIEQTIKTA...AKSMGHSDYA..PKVLAIVVKKRHHTRFYAKGGHH......................GNMPINPLPDTSV...GGDIAEYGKRQIFIQAFRPVQGTAKVPSFLVIRDDE...EVSDEHV.AKM......VCAVCSLHQLVN....SPTSI........PTPVYVAHELAKRGTGLYK
+Q23415_CAEEL/40-350               KFAFVITD.DSITH.LHKKYKALEQKSMMVIQDMKISKANSV.....VK.....DGKRLTLENVINKTNMKLGGLN..YTVSDAKKSMT....DEQL.........IIGVGVSAPPAGT.KYMMDNKGHLNPQIIGFASNA..VANHEFVGDFVLAPSGQDTMAS.IED............VLKSSIDLFEMNRNT.LPKRIIIYRSGASDGSHASILAYEIPLARATIQ.......GYS.KDIN....LIYIIVTKEHSYRFFRDQLRS....................GGKATEMNIPPGIVL...DSAVTNPACKQFFLNGHTTLQGTAKTPLYTILADDC...NAPMDRL.EEL......TYTLCHHHQIVA....LSTSI........PTPLYVANEYAKRGRDLWS
+O62275_CAEEL/594-924              TFVFIITD.DSITT.LHQRYKMIEKDTKMIVQDMKLSKALSV..........INAGKRLTLENVINKTNVKLGGSN..YVFVDAKKQL.....DSHL.........IIGVGISAPPAGT.KYAMENKGVLNPNVIGYAYNA..QHNQEFSGDFVLNSASQDTLAP.IED............IVMHSLNEYQKFHDGGLPRRVIVYRTGTSEGNHGSIMAYEIPLARAAMR.......DFS.PDIQ....LVYIVVSKDHSFRFFKPDLASLASRPQATSSTASRHSAMPAAPKAWDLNIAPGILV...DSIVTNPACKQFFLNSHITLQGTAKTPLYTVLADDA...KVSMTAL.EDI......TYKLCHLHQIVG....LPTSL........PTPLYVANEYAKRGRNLWN
+#=GC SS_cons                      EEEEEESS-S-HHC.CCHHHHHHHCCHHCHHCCEECCCCCCC.....CH...HHS-HHHHHHHHHHHHHHH---BS..-EEC---TT-SE................EE--EEEEEE--E........ESSCCEEEEEEEEEE----EEEEEEEEETCEGGHHHHH.HHH............HHHHHHHHHCCTSTT---SEEEEEE--.......S--HHHHHHHHHHHH.......HHH.HTTSS.TCEEEEEEEECC---EEEC-STT........................TT....---EEECTTTEEEEEEC-TCEE....EEEEEEEEEEEEEEEE-.....--CCCHHHHHHHHHHHHHHHCCGG--TT....S--SS........-CCCCCHHHHHHHHHHHHH
+#=GC seq_cons                     hllhllsc.pspst.YtshhKhhppchsl.oQslphcsh.ph...............tthhsNllhKhNsKlGGhN..hhlssh.h........sph.........llGhDlu+sssus..........tssolsuhsushs.ppsppahushphpppsp-hhss.lpp............hltphLpsapcpspp.hPp+IllYRDGsS-Gph.plhp.Elspl+cshc.......pls.psap..PplshIllpKpcpsRhFtpstsp.........................thNs.PGTlV...DsslspPsth-FaLsupsshpGTs+Ps+YsllhD-h...thss-cl.ppL......oapLCaha.psh....pslul........PsPlaYAcphAppstp.hc
+//
diff --git a/examples/Q9H8G1.fasta b/examples/Q9H8G1.fasta
new file mode 100644
index 0000000..08a7da7
--- /dev/null
+++ b/examples/Q9H8G1.fasta
@@ -0,0 +1,11 @@
+>Q9H8G1.2 Zinc finger protein 430.
+MENLKSGVYPLKEASGCPGADRNLLVYSFYEKGPLTFRDVAIEFSLEEWQCLDTAQQDLY
+RKVMLENYRNLVFLAGIAVSKPDLITCLEQGKEPWNMKRHAMVDQPPVTYSHFAQDLWPE
+QGIKDSFQEVILRRYGKCGHEDLQLRTGCRSVDECNLHKECYDELNQCLTTTQSEIFQYD
+KYVNVFYKFSNPNIQKIRHTGKKPFKCKKCDKSFCMLLHLTQHKRIHIRENSYQCEECGK
+VFNWFSTLTRHRRIHTGEKPYKCEQCGKAFKQSSTLTTHKIIHTGEKPYRCEECGKTFNR
+SSHLTTHKRIHTGEKPYRCEECGRAFNRSSHLTTHKIIHTGEKPYKCEECGKAFNQSSTL
+TTHKIIHAGEKPYKCEECGKAFYRFSYLTKHKIIHTGEKFYKCEECGKGFNWSSTLTKHK
+RIHTGEKPYKCEQCGKAFNESSNLTAHKIIHTGEKPYKCEECGKAFNRSPKLTAHKVIHS
+GEKPYKCEECGKAFNQFSNLTKHKITHIGDTSYKYLECDKAFSQSSTLTKHKVIHTGEKP
+YNCEEYGKAFNQSSNLIEQSNSYWRETLQM
diff --git a/examples/README b/examples/README
new file mode 100644
index 0000000..2caa833
--- /dev/null
+++ b/examples/README
@@ -0,0 +1,24 @@
+EXAMPLES
+
+This directory contains sample data that you can try out the programs with. Below are minimal incantations for each program to use this sample data.
+
+There are more examples available in the 'test' directory.
+
+
+Blixem (nucleotide mode):
+blixem -t N chr4_ref_seq.fasta chr4_dna_align.gff
+
+Blixem (protein mode):
+blixem -t P chr4_ref_seq.fasta chr4_protein_align.gff
+
+Dotter (nucleotide-nucleotide mode):
+dotter chr4_ref_seq_short.fasta DA730641.fasta
+
+Dotter (nucleotide-protein mode):
+dotter chr4_ref_seq_short.fasta Q9H8G1.fasta
+
+Dotter (protein-protein mode):
+dotter chr4_translation_frame1.fasta Q9H8G1.fasta
+
+Belvu:
+belvu PF02171_seed.stock
diff --git a/examples/chr4_dna_align.gff b/examples/chr4_dna_align.gff
new file mode 100644
index 0000000..e90eff5
--- /dev/null
+++ b/examples/chr4_dna_align.gff
@@ -0,0 +1,2269 @@
+##gff-version 3
+##sequence-region chr4-04 246635 359336
+chr4-04	EST_Human	nucleotide_match	254341	254784	407.000000	+	.	Target=H29997.1 15 472 +;percentID=95.6;Gap=M340 I1 M6 I1 M13 I1 M5 I1 M15 I1 M9 I1 M5 I1 M7 I1 M4 I1 M5 I1 M2 I1 M10 I1 M9 I1 M4 I1 M10 ;sequence=AATTCGGCACGATGGGAGTTAGGTACTTTTTATACAGATTCCAAATATGCCATTTTAGTATTCCACAATTATGCCACCATTTGGAAAGAAAGGATTGTTGACAGCAAAAGATACCCCTACTAAATATGGGTCACAGATATTTTACCCTACCCTAGGCTATCCACCTACCACAGAAAGCTGCAGTTCATTGCTGGGGCTACCAGAAATGCCAAGATGAGATTACCTAGAGAAACAGGAGGGTCGGCCAAGCAGCAACGGCCACCACCCTTTCCGGGGAACTC [...]
+chr4-04	EST_Human	nucleotide_match	254353	254821	467.000000	+	.	Target=CR738687.1 1 469 +;percentID=99.8;sequence=TTTTTATACAGATTCCAAATATGCCATTTTAGTATTCCACAATTATGCCACCATTTGGAAAGAAAGGATTGTTGACAGCAAAAGATACCCCTACTAAATATGGGTCACAGATATTTTACCCTACCCTAGGCTATCCACCTACCACAGAAAGCTGCAGTTCATTGCTGGGGCTACCAGAAATGCCAAGATGAGATTACCTAGAGAAACAGGAGGGTCGGCCAAGCAGCAACGGCCACCACCCTTTCCGGGGAACTCCTTATGGCCCTTATCCCAACTTTGCCTAACAACCTGCCCACCCTGCAATGGGGTATCAAATGTGAATATACTCTAGGACTGAAAGATTGTATAAATTGGGAGAGGTTCTTTATTTCCCCCAGG [...]
+chr4-04	EST_Human	nucleotide_match	254371	254823	435.000000	-	.	Target=AI806801.1 7 459 +;percentID=98;sequence=GCTCATTTTTTTTTTTTTTTTTTGGTTATAGCTGATTGTTATGGCCTCTCCTACAGAAACAAGAGTTGGGTTGTGCCCTTATTGCTTTCTGCTGGAGAACCTGGGGGAAATAAAGAACCTCTCCCAATTTATACAATCTTTCAGTCCTAGAGTATATTCACATTTGATACCCCATTGCAGGGTGGGCAGGTTGTTAGGCAAAGTTGGGATAAGGGCCATAAGGAGTTCCCCGGAAAGGGTGGTGGCCGTTGCTGCTTGGCCGACCCTCCTGTTTCTCTAGGTAATCTCATCTTGGCATTTCTGGTAGCCCCAGCAATGAACTGCAGCTTTCTGTGGTAGGTGGATAGCCTAGGGTAGGGTAAAATATCTGTGACCCATAT [...]
+chr4-04	EST_Human	nucleotide_match	254530	254816	283.000000	+	.	Target=AV753258.1 1 287 +;percentID=99.3;sequence=AAATGCCAAGATGAGATTACCTAGAGAAACAGGAGGGTCGGGCAAGCAGCAACGGGCACCACCCTTTCCGGGGAACTCCTTATGGCCCTTATCCCAACTTTGCCTAACAACCTGCCCACCCTGCAATGGGGTATCAAATGTGAATATACTCTAGGACTGAAAGATTGTATAAATTGGGAGAGGTTCTTTATTTCCCCCAGGTTCTCCAGCAGAAAGCAATAAGGGCACTCCATAATTCTTGTTTCTGTAGGAGAGGCCATCTCCATCAGCTATAACCAAAAAAAAAAATTCACTGGCCGTCGTTTTACAACGTCGTGACTGGGCCCTGGCGTTACCCAACTTAATCGCCTTGCAGCACATACCCCTTTCGCCAGCTGG [...]
+chr4-04	EST_Human	nucleotide_match	254553	254839	232.000000	+	.	Target=AV752332.1 1 292 +;percentID=91.6;Gap=M18 D1 M16 D1 M3 I1 M82 I1 M42 I1 M13 I1 M9 I1 M24 I1 M27 I1 M18 D2 M17 I2 M2 I1 M7 D1 M4 ;sequence=GAGAAACAGGAGGGTCGGCAAGCAGCAACGGACAGACGCCTTTCCGGGGAACTCCTTATGGCCCTTATCCCAACTTTGCCTAACAACCTGCCCACCCTGCAATGGGGTATCAAATGTGAAGTATACTCTAGGACTGAAAGATGGTATAAAGTGGGAGAGGTTCGTTTATTTCCCCCAGGGTTCTCCAGGCAGAAAGCAATAAGGGCACTCCAGTAATTCTTGTTTCTGTAGGAGAGGCCAGTCTCCATCAGCTATAACCAAAAATTACAATTCACTGGCCGTC [...]
+chr4-04	EST_Human	nucleotide_match	336559	336754	179.000000	-	.	Target=AA211349.1 255 455 +;percentID=95.5;Gap=M32 I1 M90 I1 M9 I1 M20 I1 M27 I1 M18 ;sequence=CCCGTTCGCACCAAAACCGTGAAGAAGGCGGCCCGGGTCATCATAGAAAAGTACTACACGCGCCTGGGCAACGACTTCCACACGAACAAGCGCGTGTGCGACNGAGATCGCCATTATCCACAGCAAAAAGCTCCGCAACAAGATAGCAGGTTACGTCACGCATCTGATGAAGCGAATTCAGAGAGGCCCAGTAAGAGGTATCTCCATCAAGCTGCAGGAGGAGGAGAGAGAAAGGAGAGACAATTATGTTCCTGAAGGTCTCAGCCTTGGATCAGGAGATTATTGANAGTAGATCCTGACACTAAGGAAATGCTGAAGCTTTTGGACTTCGGC [...]
+chr4-04	EST_Human	nucleotide_match	254681	254806	108.000000	-	.	Target=H29898.1 1 128 +;percentID=92.2;Gap=M17 I2 M109 ;sequence=GGNTATAGCTTATTTCNTTATGGCCTCTCCTACAGAAACAAGAATTATGGAGTGCCCTTATTGCTTTCTGCTGGAGAACCTGGGGGAAATAAAGAACCTCTCCCAATTTATACAATCTTTCAATCATATTCAAAACACAGAAATAATCAGACTATAACAATGCTGCATAGATAGTGGTATACAAGTNCCCTGACTCTAACTTCTTCCTAACTTAAAAGTTCAATTTTCAAGTCAC
+chr4-04	EST_Human	nucleotide_match	336568	336755	156.000000	+	.	Target=AI150945.1 1 189 +;percentID=91.5;Gap=M47 I1 M141 ;sequence=AGATTTATTGAAAATCATACTTCCCTACACAAAAAATTCAAACAGGTACCCCGAGGCGTCTTGAAATTCATCCCAACTGTATGCTGAGTGACCTGAAGGTTGGACAGACTGCCTACATCCAAAAGCTTCAACATTTACTTAGTGTCAGGATCTACTTCAATAATCTCCTGATCCAAGGCTGAGACCTTAGGAACATAATTGACTATCATTTGTCTCTCCTGCTACTGCAGATTGATGGATATACCTCTTACTGGACCTGTCTGAATTCGCTTTATCACATGCGTGACGTAACCTGCTATCTTGTTGCCGAGCTTTTTGCTGAGGATAATAGGAAACTACTCGCACACACGCTTGTTCGAGT [...]
+chr4-04	EST_Human	nucleotide_match	256713	257250	534.000000	-	.	Target=AI080623.1 1 538 +;percentID=99.6;sequence=TTTTTAAACATAGGCATGTTTCTAGTAGTGTCAAAGAAAAGGATTTTCTGAAAGAAATTAAAGACTTGAAACCTTTTGCATAATTTATACTGGCTTGGTCAACACCATGGGTTGGGTTGACTCCAAGAAGGGTGACTGACGCAGAACTCAGAGGCATCATTTTGGATGAATGGTCCAGGTGTTAAAACATTTGGAGGGAGAATAGAAAATCTCATTTGATGTTGAGAATATTTAGTGAAACAAAATTTTGAGAAATATCAATAATGGTGCTCGTTATGTTGCATTGTGCTGGGTCTAAAGCACCCACAATGGATCTGGAATTTACAGTAGCACAGATGTATAGGAGTGCCTGGCCAATGAGGGTAGCAGGGGAGAACA [...]
+chr4-04	EST_Human	nucleotide_match	336914	337425	228.000000	-	.	Target=AA521317.1 44 548 +;percentID=75.1;Gap=M35 I1 M1 I1 M7 I1 M2 I2 M3 I1 M1 I1 M3 I2 M17 D1 M9 D1 M9 I1 M19 I1 M16 I2 M2 I1 M1 I1 M8 D1 M12 D1 M4 D1 M9 D2 M2 D1 M10 D2 M73 D1 M3 D1 M1 D3 M1 D1 M1 D4 M1 D1 M104 D1 M136 ;sequence=CACCTACGCTGTCACGTGCAGCCTCAAACTCCTGGACTTGTGATCTCCCGCCTCAGCTTACCTAGTAGCTGGGACCACGAATGTCCACAGATGCACTCCACCTACCCGGCTAATTATTTTTTGTATAATTAGCTGGGGTCTTTACCATCATGCCCAGGGCTGGTCTCTAACTCCTGGGAAACATTCTTATTGCAAA [...]
+chr4-04	EST_Human	nucleotide_match	256732	257891	821.000000	-	.	Target=BU902103.1 1 1164 +;percentID=86.4;Gap=M140 I1 M1 I7 M1 I1 M177 I1 M3 I1 M8 I1 M306 I1 M7 I1 M5 I4 M1 I1 M49 D5 M132 D1 M13 D1 M116 D1 M7 D1 M16 D1 M34 D1 M22 D1 M5 D1 M10 I1 M15 I1 M9 D1 M15 I1 M12 D1 M1 D1 M7 D1 M17 D1 M13 ;sequence=TAGCCCTTAGTGGCATGTTTCTGATGGTGACAGGCTTGGTTTATAAAATCTCTAACATGGTCCTGGACTTTCCCTAATCTGTTAACCCAGAAACAGCATTTTTCTCCTAGCATAAGGCAAATGCTTTTGTGAGCTGCAGCTAGTGTGGCAAGACCTCTACAATTTTGAACTACAGCCACGAGATAA [...]
+chr4-04	EST_Human	nucleotide_match	337225	337543	170.000000	-	.	Target=AI095103.1 15 334 +;percentID=77.6;Gap=M28 I2 M157 D2 M60 I1 M1 I1 M65 D1 M5 ;sequence=TTTAAATTTTTATTTATTTATTTATTTATTTATTTATTTATTCATTGAGATGGAGTCTCGCCCTGTCACCCAGGCTGGAGCGCAGCGGCACAATGTCGGCCCACTGCAACCTCCGCCCCCCGGGTTCAAGTGACTCTCCCGCCCCAGTCTCCCGAGCAGCTGGGACCACAGGCATGCGCCACCACACCCGGCCAACTTTCCATTTTTAGTGGAGACAGGGTTTCTCCATGCCGGCCAGGCCGGTCTCGAACTCCTGACCTCAGGTGATCCACCCGCCTCAGCCTCCCGAAGTGCTGGGATTACAGGCGTGAGCCACCATGCCCGGCCTAGGGAG [...]
+chr4-04	EST_Human	nucleotide_match	337233	337331	41.000000	+	.	Target=DB084699.1 141 240 +;percentID=72.8;Gap=M11 I1 M60 D2 M11 D1 M8 I2 M3 I1 M3 ;sequence=AAAACAGCTTTAACCTGGATGTGGAGGAGGATGACATTGAGAATCTCTTAGAGGTGGTTCATGAGGAATGGGTTAATGAGGAGTCATTGGAACTGATACAGGAACATGTAGCTGAAGAAGAGGCAAGAGAATAGGGAACTGGCTGGGCACNGGTGGCTCACATCTATAATCCCTGCACTTTGGGAGGCCGAGGCAGGTGGATCACTTGAGCAATTTCCAGTCCTCCAAGCTCCATTCATGGGACACTTGACATTCAGGGACGTGGCCATAGAATTCTCTCAGGAGGAGTGGAAATGCCTGGACCCTGTGCAGAAGGCTTTATACAGGGATGTGATG [...]
+chr4-04	EST_Human	nucleotide_match	256891	257073	179.000000	+	.	Target=EL593706.1 12 194 +;percentID=98.9;sequence=GCCCTTGGTCATCATTGTCCAGGCACTCCTATACATCTGTGCTACTGTAAATTCCAGATCCATTGTGGGTGCTTTAGACCCAGCACAATGCAACACAACGAGCACCATTATTGATATTTCTCAAAATTTTGTTTCACTAAATATTCTCAACATCAAATGAGATTTTCTATTCTCCCTCCAAATGTTTTAACACCAAACGTGGCTTGCCAGCCCAAGGGC
+chr4-04	EST_Human	nucleotide_match	337233	337299	43.000000	+	.	Target=DB093425.1 141 207 +;percentID=82.1;sequence=AAAACAGCTTTAACCTGGATGTGGAGGAGGATGACATTGAGAATCTCTTAGAGGTGGTTCATGAGGAATGGGTTAATGAGGAGTCATTGGAACTGATACAGGAACATGTAGCTGAAGAAGAGGCAAGAGAATAGGGAACTGGCTGGGCACGGTGGCTCACATCTATAATCCCTGCACTTTGGGAGGCCGAGGCAGGTGGATCACTTGAGGGACACTTGACATTCAGGGACGTGGCCATAGAATTCTCTCAGGAGGAGTGGAAATGCCTGGACCCTGTGCAGAAGGCTTTATACAGGGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGAATCTGTCTTCCTGACCTGAGTATTATCTCCATGATGAAG [...]
+chr4-04	EST_Human	nucleotide_match	337233	337299	43.000000	+	.	Target=DB039972.1 138 204 +;percentID=82.1;sequence=CAGCTTTAACCTGGATGTGGAGGAGGATGACATTGAGAATCTCTTAGAGGTGGTTCATGAGGAATGGGTTAATGAGGAGTCATTGGAACTGATACAGGAACATGTAGCCTGAAGAAGAGGCAAGAGAATAGGGAACTGGCTGGGCACGGTGGCTCACATCTATAATCCCTGCACTTTGGGAGGCCGAGGCAGGTGGATCACTTGAGGGACACTTGACATTCAGGGACGTGGCCATAGAATTCTCTCAGGAGGAGTGGAAATGCCTGGACCCTGTGCAGAAGGCTTTATACAGGGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGAATCTGTCTTCCTGACCTGAGTATTATCTCCATGATGAAGCAA [...]
+chr4-04	EST_Human	nucleotide_match	257183	257755	551.000000	+	.	Target=BX495940.1 1 571 +;percentID=98.4;Gap=M63 I2 M310 D4 M196 ;sequence=CAAGTCTTTAATTCCTTTCAGAAAATCCTTTTCTTTGACACTACTAGAAACATGCCTATGTTTAAAAAAAAAAAAAAATAGGACCCATGTCTGGCTCCCCTGGCAGCAGCAACTTTAGTGGCAGGATCTCACATGTCGGGTAGCCAACAAGGACCCTGGTCAATGTTTGGAACTGACCTCACCTTCTGCATCCATTTTTATCGACTACAGAACTTTACTTCCTGTGTGAAATGCAGGCTTATCTCTGTCTCTCTGGAAACTTGACGAGCACAAGCACTCTGGCTTCCTTCACCCCTAACATTTCCATTGTCCCGGTTGATGCTTCCTTGCTGTTACCCTTTACTACCTCACAC [...]
+chr4-04	EST_Human	nucleotide_match	257061	257591	527.000000	+	.	Target=DA115622.1 1 533 +;percentID=99.6;Gap=M185 I1 M310 I1 M36 ;sequence=ATGTTTTAACACCTGGACCATTCATCCAAAATGATGCCTCTGAGTTCTGCGTCAGTCACCCTTCTTGGAGTCAACCCAACCCATGGTGTTGACCAAGCCAGTATAAATTATGCAAAAGGTTTCAAGTCTTTAATTTCTTTCAGAAAATCCTTTTCTTTGACACTACTAGAAACATGCCTATGTTTAAAAAAAAAAAAAATAGGACCCATGTCTGGCTCCCCTGGCAGCAGCAACTTTAGTGGCAGGATCTCACATGTCGGGTAGCCAACAAGGACCCTGGTCAATGTTTGGAACTGACCTCACCTTCTGCATCCATTTTTATCGACTACAGAACTTTACTTCCTGTGTGAAAT [...]
+chr4-04	EST_Human	nucleotide_match	257377	257906	321.000000	+	.	Target=DB271521.1 3 546 +;percentID=81.2;Gap=M30 D1 M3 I1 M108 I3 M37 D2 M176 I1 M1 I3 M15 I1 M1 I7 M2 I1 M154 ;sequence=TGTTTATGGAGTGCAGAACTTTACTTCCTATGGAAGATGCAGGCTCATCTCTGCCTCTCTGCAAATTGGACCAGAACATACACTCTGGCTTACCTCACCCCTAAAATTTCCATTGTTCTGGGTGATGCTTCTCTGCTGTTACCCTTATTTACCACCTCACACCAGATCAGCTCAGAAGTTTATCTAATTTCCTTCCACAATGAGCTTGTCATCACAAGTGCCACCACAGGAATAGCTGTCATTGTTATTGCCTCCTCAACTTTCCACAACCCATCTCTGGAACTGACTCATAAAATAGAAACCACTG [...]
+chr4-04	EST_Human	nucleotide_match	257380	257914	317.000000	+	.	Target=AL691897.1 1 548 +;percentID=80.6;Gap=M27 D1 M3 I1 M108 I3 M37 D2 M176 I1 M1 I3 M15 I1 M1 I7 M2 I1 M56 D1 M105 ;sequence=ATGGAGTGCAGAACTTTACTTCCTATGGAAGATGCAGGCTCATCTCTGCCTCTCTGCAAATTGGACCAGAACATACACTCTGGCTTACCTCACCGCTAAAATTTCCATTGTTCTGGGTGATGCTTCTCTGCTGTTACCCTTATTTACCACCTCACACCAGATCAGCTCAGAAGTTTATCTAATTTCCTTCCACAATGAGCTTGTCATCACAAGTGCCACCACAGGAATAGCTGTCATTGTTATTGCCTCCTCAACTTTCCACAACCCATCTCTGGAACTGACTCATAAAATAGAAACCAC [...]
+chr4-04	EST_Human	nucleotide_match	257556	258020	464.000000	+	.	Target=BF511884.1 2 466 +;percentID=99.8;sequence=TTTTTTTTTTTTTTTTTCCTGAGTTTGGCATCTCAGGTGCCACTATAGGAATAGCTGGCATAATTATTGCCTCCTCAACTTACCAAAACCTGTCTCTGGAACTGACTCACAAAATAAAAACTACTGCTCAGACTCTTACAGAGTGACACCAACAAGTTGATTATCTCGTGGCTGTAGTTTGAAATTGTAGAGGTCTTGCTGCAGCTCAGGAAAGAATCTGCCTTATGCTAGGAGAAAAATGCTGTTTCTGGGTTAACAGATTAGGGAAAGTCCAGGACCATGTTAGAGGTTTTACAAACCAGGCCTGTCACCATCAGAAACATGCCACTGAAAGCTAGTTCTCTTGGGGTGCCACTTGGTTCCAATTCTCATGACATC [...]
+chr4-04	EST_Human	nucleotide_match	257557	258296	740.000000	-	.	Target=BX101722.1 1 740 +;percentID=100;sequence=AACGTTCCCTCCTCAATAGATTGAGACTCCAAAAATCTTTGAGTCTAGGGGCACTGTGGGTCTTCTGTAACTACTTCCTGGTAATATGAGATAAAGAATTCATCAGTATCTCATTCTCTTGCTTTTTGTCAGAAAAAGATTCCATCCATGTTCTCCCAGAAGGTTGAACTTGCATTGTCCAGAGGAAATGTGTAGGGACATGGCTGTGCAGATTGGGGGAAAATAGGTCGATATTCCTGTTGCAGGACCATTTGAAGTCTGAGAGTTTCTAGGTGAGAGGAAACGAACCTGGTTACTAGATTTAGTGAGCAAGGCTCACAAAAGAGAGAAAGGAAGACAAAGGCTAGGGATCCCCAAAAAGTGGGATGTCATGAGAATT [...]
+chr4-04	EST_Human	nucleotide_match	337110	337352	51.000000	+	.	Target=BF964632.1 366 622 +;percentID=65.3;Gap=M3 D1 M12 I1 M18 D1 M8 I1 M12 D1 M6 I1 M2 I1 M1 I2 M4 I1 M3 I1 M2 I1 M6 D1 M6 D1 M6 D1 M3 D1 M2 D1 M5 I1 M2 I1 M13 I1 M33 I1 M8 I1 M17 I1 M4 I1 M2 I1 M14 I1 M20 I1 M8 I1 M6 I1 M3 I1 M6 ;sequence=GTCGGTTAGGGCCTCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATTGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTC [...]
+chr4-04	EST_Human	nucleotide_match	257572	257941	370.000000	+	.	Target=AI684693.1 1 370 +;percentID=100;sequence=CCTGAGTTTGGCATCTCAGGTGCCACTATAGGAATAGCTGGCATAATTATTGCCTCCTCAACTTACCAAAACCTGTCTCTGGAACTGACTCACAAAATAAAAACTACTGCTCAGACTCTTACAGAGTGACACCAACAAGTTGATTATCTCGTGGCTGTAGTTTGAAATTGTAGAGGTCTTGCTGCAGCTCAGGAAAGAATCTGCCTTATGCTAGGAGAAAAATGCTGTTTCTGGGTTAACAGATTAGGGAAAGTCCAGGACCATGTTAGAGGTTTTACAAACCAGGCCTGTCACCATCAGAAACATGCCACTGAAAGCTAGTTCTCTTGGGGTGCCACTTGGTTCCAATTCTCATGACATCCCACTTTTT
+chr4-04	EST_Human	nucleotide_match	257572	257968	393.000000	+	.	Target=AA969119.1 1 399 +;percentID=99.5;Gap=M10 I1 M21 I1 M366 ;sequence=CCTGAGTTTGAGCATCTCAGGTGCCACTATAGAGAATAGCTGGCATAATTATTGCCTCCTCAACTTACCAAAACCTGTCTCTGGAACTGACTCACAAAATAAAAACTACTGCTCAGACTCTTACAGAGTGACACCAACAAGTTGATTATCTCGTGGCTGTAGTTTGAAATTGTAGAGGTCTTGCTGCAGCTCAGGAAAGAATCTGCCTTATGCTAGGAGAAAAATGCTGTTTCTGGGTTAACAGATTAGGGAAAGTCCAGGACCATGTTAGAGGTTTTACAAACCAGGCCTGTCACCATCAGAAACATGCCACTGAAAGCTAGTTCTCTTGGGGTGCCACTTGGTTCCAATTCT [...]
+chr4-04	EST_Human	nucleotide_match	336536	336753	200.000000	+	.	Target=BU197993.1 6 223 +;percentID=95.9;sequence=TTTTTTTTTTTTTTTTTTTTTTTTTTGCTGTTGTCCCAGATTTATTGAAAATAATACAGCACTACAGAAAAAATTCAAACAGGTCCCCGAGGCGTTTTGAAATTCATCCCAACTGTAGGCTGAGTGACCTGAAGGTTGGACAGACTGCCGAAGTCCAAAAGCTTCAGCATTTCCTTAGTGTCAGGATCTACTTCAATAATCTCCTGATCCAAGGCTGAGACCTCAGGAACATAATTGTCTCTCCTTTCTCCCTCCTCCTCCTGCAGCTTGATGGAGATACCTCTTACTGGGCCTCTCTGAATTCGCTTCATCAGATGCGTGACGTAACCTGCTATCTTGTTGCGGAGCTTTTTGCTGGGGATAATGGCGATCTCCTCG [...]
+chr4-04	EST_Human	nucleotide_match	257572	258059	488.000000	+	.	Target=AI143189.1 1 488 +;percentID=100;sequence=CCTGAGTTTGGCATCTCAGGTGCCACTATAGGAATAGCTGGCATAATTATTGCCTCCTCAACTTACCAAAACCTGTCTCTGGAACTGACTCACAAAATAAAAACTACTGCTCAGACTCTTACAGAGTGACACCAACAAGTTGATTATCTCGTGGCTGTAGTTTGAAATTGTAGAGGTCTTGCTGCAGCTCAGGAAAGAATCTGCCTTATGCTAGGAGAAAAATGCTGTTTCTGGGTTAACAGATTAGGGAAAGTCCAGGACCATGTTAGAGGTTTTACAAACCAGGCCTGTCACCATCAGAAACATGCCACTGAAAGCTAGTTCTCTTGGGGTGCCACTTGGTTCCAATTCTCATGACATCCCACTTTTTGGGGATCCC [...]
+chr4-04	EST_Human	nucleotide_match	257572	258175	564.000000	+	.	Target=DB357764.1 1 596 +;percentID=96.9;Gap=M497 D1 M8 D1 M7 D1 M19 D1 M8 D1 M36 D1 M5 D1 M1 D1 M15 ;sequence=CCTGAGTTTGGCATCTCAGGTGCCACTATAGGAATAGCTGGCATAATTATTGCCTCCTCAACTTACCAAAACCTGTCTCTGGAACTGACTCACAAAATAAAGACTACTGCTCAGACTCTTACAGAGTGACACCAACAAGTTGATTATCTCGTGGCTGTAGTTTGAAATTGTAGAGGTCTTGCTGCAGCTCAGGAAAGAATCTGCCTTATGCTAGGAGAAAAATGCTGTTTCTGGGTTAACAGATTAGGGAAAGTCCAGGACCATGTTAGAGGTTTTACAAACCAGGCCTGTCACCATCAGAAACATGCCACTGAAAG [...]
+chr4-04	EST_Human	nucleotide_match	257845	258418	574.000000	+	.	Target=DA745472.1 1 574 +;percentID=100;sequence=TTTACAAACCAGGCCTGTCACCATCAGAAACATGCCACTGAAAGCTAGTTCTCTTGGGGTGCCACTTGGTTCCAATTCTCATGACATCCCACTTTTTGGGGATCCCTAGCCTTTGTCTTCCTTTCTCTCTTTTGTGAGCCTTGCTCACTAAATCTAGTAACCAGGTTCGTTTCCTCTCACCTAGAAACTCTCAGACTTCAAATGGTCCTGCAACAGGAATATCGACCTATTTTCCCCCAATCTGCACAGCCATGTCCCTACACATTTCCTCTGGACAATGCAAGTTCAACCTTCTGGGAGAACATGGATGGAATCTTTTTCTGACAAAAAGCAAGAGAATGAGATACTGATGAATTCTTTATCTCATATTACCAGGAAG [...]
+chr4-04	EST_Human	nucleotide_match	257865	258171	283.000000	-	.	Target=BF091525.1 8 318 +;percentID=96.1;Gap=M60 I1 M10 I1 M22 I1 M124 I1 M91 ;sequence=CACTCGCTTGTCTGGAAAAGATTCCATCCATGTTCTCCCAGAAGGTTGAACTTGCATTGTCCAGAGGCAAATGTGTATCGGACATGGCTGTGCATATTGGGCGGAAAATAGGTCGATATTCCTGTTGCAGGACCATTTGAAGTCTGAGAGTTTCTAGGTGAGAGGAAACGAACCTGGTTACTACATTTAGTGAGCAAGGCTCACAAAAGAGAGAATGGAAGACTAATGGCTAGGGATCCCCAAAAAGTGTGATGTCATGAGAATTGGAACCAAGTGGCACCCCAAGAGAACTAGCTTTCAGTGGCATGTTTCTGATGGACAACGCGATT
+chr4-04	EST_Human	nucleotide_match	257907	258469	557.000000	-	.	Target=GD261951.1 1 561 +;percentID=99.6;Gap=M18 D1 M10 D1 M533 ;sequence=CACAGTATGAGCAATTATGGGTGTCTTAGGGGTGTTTCTGGGTATTCTTTCTTCATGGGTATTTCCTGTCCACTCTGCTCAAATTTAGCGTACATATCTTGGGTTGTCTTTGGAGCATGAGATTTTTCTCCCCCAGGGGCTTTTTCCTGCTCATGTCTAACTGCCTCCTCTAACGTTCCCTCCTCAATAGATTGAGACTCCAAAAATCTTTGAGTCTAGGGGCACTGTGGGTCTTCTGTAACTACTTCCTGGTAATATGAGATAAAGAATTCATCAGTATCTCATTCTCTTGCTTTTTGTCAGAAAAAGATTCCATCCATGTTCTCCCAGAAGGTTGAACTTGCATTGTCCAGA [...]
+chr4-04	EST_Human	nucleotide_match	258964	259751	714.000000	-	.	Target=DA570951.1 1 788 +;percentID=95.1;sequence=TCTGATGTCTTCATGTGTTTATCCCCAGCTATGTATGCTTCACTGCTCTTCTTTGTGTTGTGGCTGCGGTTTCCTCGCTGTTCTCTTCATGCCATGTGGTTTCACTAGGACTTTCTAGGCTCTGATGAGAAGTTTGGAATTTTTGATGTATATTGTTTTTAACTGGCGTGTTTGAGATTGTAGCTTGTCAATGCAACATTCAGATCATGTAATTGAGGTAAGACTAATTCACTGTCCACATGTAGGAGGATTAAGTGAGCACCGTTTTTCTCTTTGTAAAAGAAAAATTGTATGAGAATCTAACACAAAGTGTGTTAGATGTAACATACCTTAATATATATTAAAGCATGAATATGGGTTGGTTGCAGATTGTAAGCA [...]
+chr4-04	EST_Human	nucleotide_match	258996	259238	158.000000	-	.	Target=CN414775.1 117 370 +;percentID=83.5;Gap=M19 I2 M66 D1 M26 I3 M4 I2 M1 I1 M4 I1 M1 I2 M88 I1 M33 ;sequence=GAGATGGGGTTTCACCATGTTGGCCAGGATGGTCTCGATCTTTTGACCTCATGATCTGCCTGCCTTGGCCTCCTGAAGTACTGGGATTACAGGCATGAGCCACCGTGCCTGGCCAGAATATTATATCTTTGAGTGTGAATGTTAAATGGTGGAAAAACAATAGAATGATCTCTGTAGATTCAAAATCTGCACTGATCTTTTTTGTCCAGATTCATATTACAATCTTGAGGAATTTCTCATAATTCTTTGTTTTAGTGGATGCATTTCATGGGCTACAGTTTTCATTTTTACTCACCTAACTTTATCCAAGTCCTT [...]
+chr4-04	EST_Human	nucleotide_match	258996	259241	164.000000	-	.	Target=BG702736.1 35 292 +;percentID=84.1;Gap=M22 I2 M93 I3 M4 I2 M1 I1 M4 I1 M1 I2 M88 I1 M33 ;sequence=AGCGGGATTACAGGCGTGAGCCACCGTGCCTGGCCAGAATATTATATCTTTGAGTGTGAATGTTAAATGGTGGAAAAACAATAGAATGATCTCTGTAGATTCAAAATCTGCACTGATCTTTTTTTGTCCAGATTCATATTACAATCTTGAGGAATTTCTCATAATTCTTTGTTTTAGTGGATGCATTTCATGGGCTACAGTTTTCATTTTTACTCACCTAACTTTATCCAAGTCCTTGGTCACCTTCTCTGGAAAAAAATTTGAAGATTATGGCAGCTGTTGAATCCAAACAGTTTCTCAGTGATTTTTTTTTTTTTTTTTTT [...]
+chr4-04	EST_Human	nucleotide_match	259276	259737	380.000000	-	.	Target=BI039926.1 6 485 +;percentID=91.7;Gap=M5 D1 M114 D1 M20 I1 M11 I1 M7 I1 M9 I1 M12 I1 M9 I1 M7 I1 M5 I1 M4 I1 M6 I1 M5 I1 M4 I1 M9 I1 M3 I1 M6 I1 M12 I1 M8 I1 M5 I1 M5 I1 M9 I1 M185 ;sequence=CGAACGTGTTATCCCCAGCTATGTATGCCTCACTGCTCTTCTTGGTGTTATGGCTACAGTTTCCTCACTGTTCTCCTCATGCCATGCAATTTCACTTGGACTTTCCAGGCTCTGATGAGAAGTTGGAATTTTTAATGTATATTGGTTTTTAACTGGGCGTGTTTAGCGATTATATGCTTATCAATGCCAACATTCAGCATCATGTCAATTGCAGGTCAAGACTCAATTCC [...]
+chr4-04	EST_Human	nucleotide_match	259608	259748	90.000000	+	.	Target=DA136141.1 1 138 +;percentID=83.9;Gap=M7 D1 M5 D2 M2 D1 M74 I2 M39 D1 M9 ;sequence=AAAAAGTCGAACCTATCAGAACCTGGAAAGTCCATGTGAAATTGCATGGCATGAAGAGAACAGTGAGAAAACCGTAGCCATAACACAAGGAGAGGAGCTGTGAGGCATACATAGCTGAGGATAAACATAAAACAAATCCTCTTTAAGGAGCGCCTCTGCCCAGCTGCCCAACTTTCTGGGAAGTGAGAAGCACCTCTGCCCAGCTGCCCCACCGTCTGGGAAGTGAGCAGCGCCTCTCCCTGGCCCCCAGCCCTGTCTGGGAATGAGAAGCGCCTTTGCCCGGCCACTGCACCGCCTGGGACGTGAGGAGCGCCTCTGCCTGGCTGCCACACCTTCTTG [...]
+chr4-04	EST_Human	nucleotide_match	259668	259918	232.000000	+	.	Target=CA427639.1 440 689 +;percentID=96.5;Gap=M219 D1 M31 ;sequence=TTTTTTTTTTTTTTTTATTATTTACGATGTGAGCTGGTGAGAAATTGTAAGAATGATTTTTATAAAATTTAGTACACAAATTTTTAGATGCAAGTTCACAATTTGTGTATTGTTATATTTGATCTAGTTAGAAAATTTCATTTTGTGGCTTTAACTGGAGAACTCTATATGAACCGTTTTCTTTAGTTGTTCCTTTCACTTTTTACTTGACATAAATGAGTTTATGTATTGTGTGCCAATTTGTTCAGGTAAGTACTGGGAAATCTTTTAAGTCATGGAGATGTTTTGATATAAAATTGTAGTGAACATAAGAAAGTGCTGTGTGTGTAATAGATGCTCCACAATTAGCCATAAATATT [...]
+chr4-04	EST_Human	nucleotide_match	259781	259895	69.000000	-	.	Target=CN414775.1 1 116 +;percentID=80.3;Gap=M22 I1 M93 
+chr4-04	EST_Human	nucleotide_match	260116	260701	566.000000	+	.	Target=BU785955.1 47 632 +;percentID=98.3;sequence=GCCCCCTTTCCACCCACGCGTCCGGTAATTTCACAATGTGTATAGCCACATTGTGAAATTACATTTAACCAGTATTTTCTGTGCACTAACTTTTTAAAAAAATTTTGTAATTTCTGACCAGCCCACATACTTTATGGAGTTAAAAAAGAAGAATGAGAAACGGGAAAATTATACCTCTAGCATGAGCACCACATTAAAACAGAGACTTTTTACAGGGAGATTCTCAAAAATGATCCATTAGATTTTACAGTAATTACATAAAAATAAGAAAACATAGATTTTAATTCAAAATGTTTTAGGTTTCTAGATTTCCAGTAAATTATCCACAGTATTAATAGAAACTTCTTTGTTCCAATATTGCTATTTTCTTCGGAAAA [...]
+chr4-04	EST_Human	nucleotide_match	260207	260737	266.000000	-	.	Target=AW876304.1 19 526 +;percentID=78.6;Gap=M10 D3 M1 D1 M18 I1 M33 D2 M3 D2 M13 D1 M1 D1 M1 D2 M4 D1 M3 D1 M16 I2 M8 I2 M46 I2 M11 I2 M52 I1 M102 D1 M62 D1 M3 D1 M5 D1 M1 D1 M22 D1 M1 D2 M1 D4 M19 D1 M1 D1 M1 D2 M45 D2 M1 D1 M14 ;sequence=NTCGACGAGTTGTCCGAGTTATACACTTTATTTTTCAATGTACAATTATTTTTTACTACAGATCGTTCTGTGATTGTAATATATCAAAGTATAATCCATATGTTTCTGAGTCCTGAATGAATACTTAAAAAAAATGTTTCATATTTGTCTTTGAACATGCAGTGTCTTGTCCTGCAAACACATACG [...]
+chr4-04	EST_Human	nucleotide_match	260470	260696	127.000000	-	.	Target=DA243951.1 367 595 +;percentID=80;Gap=M6 D1 M1 D1 M12 I1 M2 I1 M2 I1 M2 I1 M1 I1 M6 I1 M96 I2 M7 D2 M1 D1 M3 D1 M82 ;sequence=TGTGTTAAAATTTTTGTGCCGTGAATGAAGTGTTTTATTATGCCACCAACTTTCACCTATCCAACCTTACTCAAGGGTGTACGTTAAAGATGGTAACAATGTACTATCTGGTAATATAATTGAATGACATCTCTAGTCTTTTTTAGTGGCTTTCAACAGCAAATAAATTGAAGAATATTGTTTGCATGTTACATTTTTATTCTTATTGAAATTTTTCAAAAGGTTTTGTGAGTACATAGTATGTGTATATATTTATGGTATATATGGGTTATTTTGATACAGGCATACAGTATGT [...]
+chr4-04	EST_Human	nucleotide_match	337233	337698	291.000000	+	.	Target=DA588900.1 54 546 +;percentID=82.2;Gap=M97 I1 M193 I1 M7 I3 M1 I4 M1 I4 M2 I2 M1 I1 M2 I4 M2 I1 M1 I1 M14 I1 M1 I1 M7 I1 M2 I1 M2 I1 M133 ;sequence=GGCGTGGAGATATGGCGCAACTGCGGCGCGATTGACTTCTAAAGAGTCATGTTGGCCGGGCCCGGGGGCTCATACCTGTAATCCCGGCACTTTGGGAGGCCGAGACGGGCAGATCACGAGGTCAGGAGATCAAGACCATCCTGGCTAACACNGGTGAAACCCCGTCTCTACTACGAATACAAAAAATTACCTGGGCGTGTTGGCGGGCACCTGTAGTCCCAGCTACTCAGGAGGCTGAGGCAGGAGAATGGTGTGAACCCGGGAGGCGGAGCT [...]
+chr4-04	EST_Human	nucleotide_match	260560	260696	67.000000	-	.	Target=AL037864.1 447 589 +;percentID=76.6;Gap=M6 D1 M1 D1 M12 I1 M2 I1 M2 I1 M2 I1 M1 I1 M6 I1 M96 I2 M7 ;sequence=GGGGTGCAATAAAATGCAGTAAATTTTAAAATTCTCTTAAGATAATGTGTGAACTTAATTTTTGAAATAAAAATTGTTATTGTGTTAAAATTTTTGTGCCGTGAATGAAGTGTTTTATTATGCCACCAACTTTCACCTATCCAACCTTACTCAAGGGTGTACGTTAAAGATGGTAACAATGTACTATCTGGTAATATAATTGAATGACATCTCTAGTCTTTTTTAGTGGCTTTCAACAGCAAATAAATTGAAGAATATTGTTTGCATGTTACATTTTTATTCTTATTGAAATTTTTCAAAAGGTTTTGTGAGT [...]
+chr4-04	EST_Human	nucleotide_match	337233	337698	291.000000	+	.	Target=DA283460.1 62 554 +;percentID=82.2;Gap=M97 I1 M193 I1 M7 I3 M1 I4 M1 I4 M2 I2 M1 I1 M2 I4 M2 I1 M1 I1 M14 I1 M1 I1 M7 I1 M2 I1 M2 I1 M133 ;sequence=AAGTGGATGGCGTGGAGATATGGCGCAACTGCGGCGCGATTGACTTCTAAAGAGTCATGTTGGCCGGGCGCGGGGGCTCATGCCTGTAATCCCGGCACTTTGGGAGGCCGAGACGGGCAGATCACGAGGTCAGGAGATCAAGACCATCCTGGCTAACACNGGTGAAACCCCGTCTCTACTACGAATACAAAAAATTACCTGGGCGTGTTGGCGGGCACCTGTGGTCCCAGCTGCTCAGGAGGCTGAGGCAGGAGAATGGTGTGAACCCGGGAG [...]
+chr4-04	EST_Human	nucleotide_match	261262	261616	213.000000	-	.	Target=DA243951.1 1 366 +;percentID=81.4;Gap=M34 I2 M2 I3 M98 D1 M5 D2 M28 I3 M65 I1 M56 I1 M1 I1 M6 I1 M1 I2 M14 D1 M40 I1 M1 
+chr4-04	EST_Human	nucleotide_match	261262	261642	231.000000	-	.	Target=AL037864.1 54 446 +;percentID=81.6;Gap=M19 I1 M41 I2 M2 I3 M98 D1 M5 D2 M28 I3 M65 I1 M56 I1 M1 I1 M6 I1 M1 I2 M14 D1 M40 I1 M1 
+chr4-04	EST_Human	nucleotide_match	261326	261631	209.000000	-	.	Target=DB288459.1 225 537 +;percentID=85.1;Gap=M8 I1 M41 I2 M2 I3 M98 D1 M5 D2 M28 I3 M65 I1 M56 ;sequence=AATAAAAGATGCACCAGGAAAATCTGAGCAGAGAGGCTTTTAGTGGTTGACTTACTGAGTGATGCCTGAAGTAGGTGTTCAGAGTAATACTTTGCGTTATACTGAGAGAGAATCTGAATTTTAGTAGTAAATTGTTTTGCCAACNTGTATATTTATGTAATAAGTGCAATAAAATGCAGTAAATTTTAAAATTCTCTTAAGATAATGTGTGAACTTAATTTTTGAAATAAAAATTGTTATTGTGTTAAAATTTTTGTGCCGTGAATGAAGTGTTTTATTATGCCACCAACTTTCACCTATCCAACCTTACTCAAGGGTGTA [...]
+chr4-04	EST_Human	nucleotide_match	337233	337698	296.000000	+	.	Target=DA787952.1 64 555 +;percentID=82.7;Gap=M290 I1 M7 I3 M1 I4 M1 I4 M2 I2 M1 I1 M2 I4 M2 I1 M1 I1 M14 I1 M1 I1 M7 I1 M2 I1 M2 I1 M133 ;sequence=GGAAGTGGATGGCGTGGAGATATGGCGCAACTGCGGCGCGATCGACTTCTAAAGAGTCATGTTGGCCGGGCGCGGGGGCTCATACCTGTAATCCCGGCACTTTGGGAGGCCGAGACGGGCAGATCACGAGGTCAGGAGATCAAGACCATCCTGGCTAACACGGTGAAACCCCGTCTCTACTACGAATACAAAAAATTACCTGGGCGTGTTGGCGGGCACCTGTAGTCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATGGTGTGAACCCGGGAGGCGGGG [...]
+chr4-04	EST_Human	nucleotide_match	261928	262144	150.000000	-	.	Target=DB288459.1 1 224 +;percentID=85.4;Gap=M54 I2 M87 I1 M12 I1 M1 I2 M3 I1 M1 I2 M31 D2 M26 
+chr4-04	EST_Human	nucleotide_match	261929	262384	297.000000	+	.	Target=BU616016.1 42 501 +;percentID=84;Gap=M25 D2 M31 I2 M1 I1 M3 I2 M1 I1 M99 I1 M52 D1 M2 D1 M45 I5 M101 I1 M14 D1 M29 D1 M16 D1 M1 D2 M27 ;sequence=TTTTTTTTTTTTTTTTTTAACACAATAACAATTTTTATTTCAAAAATTAAGTTCACACATTATCTTAAGAGAATTTTAAAATTTACTGCATTTTATTGCACTTATTACATAAATATACAGTTGGCAAAACAATTTACTACTAAAATTCAGATTCTCTCTCAGTATAACGCAAAGTATTACTCTGAACACCTACTTCAGGCATCACTCAGTAGTCAACCACTAAAAGCCTCTCTGCTCAGATTTTCCTGGTGCATCTTTTATTTCTCTTCTCTTTCA [...]
+chr4-04	EST_Human	nucleotide_match	337390	337508	63.000000	-	.	Target=BM800078.1 225 343 +;percentID=77.7;Gap=M26 I1 M12 D1 M3 I1 M72 D1 M4 ;sequence=ACTGGTGCCATCTCAGCTCACTGCAACTTCTGACTCCCGAGTTCAAGTGATTCTTTTGCCTCAGTCTCCCAAGTAGCTGGGACAACAGGGGCGTGCCGAGAAGCCCAGCTAATTTTGTACTTGTAGTAGAGAGCGGGTTTCACCACGCTGGCCAAAATTGTCTCAACCTCTTGATCTCATGATCCACCGCCTCACCCTCCCAAAGTGCTGGGATTACAGGCATGAGAGTCTCACTCTGTCCTTCAGGCTGTGAGTGCAGTCTCCTGATCTTGGCTCACTGCAACCTCTGTCTCCTGGGTTCAAGTGATTCTTGTGCCTCAGCCTACCAAGTAGCTGAGATAC [...]
+chr4-04	EST_Human	nucleotide_match	261929	262384	297.000000	+	.	Target=CA442913.1 42 501 +;percentID=84;Gap=M25 D2 M31 I2 M1 I1 M3 I2 M1 I1 M99 I1 M52 D1 M2 D1 M45 I5 M101 I1 M14 D1 M29 D1 M16 D1 M1 D2 M27 ;sequence=TTTTTTTTTTTTTTTTTTAACACAATAACAATTTTTATTTCAAAAATTAAGTTCACACATTATCTTAAGAGAATTTTAAAATTTACTGCATTTTATTGCACTTATTACATAAATATACAGTTGGCAAAACAATTTACTACTAAAATTCAGATTCTCTCTCAGTATAACGCAAAGTATTACTCTGAACACCTACTTCAGGCATCACTCAGTAGTCAACCACTAAAAGCCTCTCTGCTCAGATTTTCCTGGTGCATCTTTTATTTCTCTTCTCTTTCA [...]
+chr4-04	EST_Human	nucleotide_match	337539	337697	159.000000	+	.	Target=DB221880.1 174 332 +;percentID=100;sequence=CTTTGCGTCTGGCTACTACCAGACCGCGGGTTAGGGGCTTCATCTCTCTGCGTCCTCAGTTCTGGGAGGCCTTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTGGTAGCTAAGACTCCCGAATACNTTCAGAAGTGGGGAAATGAACTATGTCCCTTGATATATTTGTATTTTCAGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGACCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTGTTGCTATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAA [...]
+chr4-04	EST_Human	nucleotide_match	261929	262388	297.000000	+	.	Target=DB316679.1 24 489 +;percentID=83.8;Gap=M25 D2 M31 I2 M1 I1 M3 I2 M1 I1 M29 I1 M70 I2 M52 D1 M2 D1 M45 I5 M101 I1 M14 D1 M29 D1 M16 D1 M1 D2 M31 ;sequence=AACACAATAACAATTTTTATTTCAAAAATTAAGTTCACACATTATCTTAAGAGAATTTTAAAATTTACTGCATTTTATTGCACTTATTACATAAATATACAGTTGGCAAAACAATTTACTTACTAAAATTCAGATTCTCTCTCAGTATAACGCAAAGTATTACTCAGAACACCTACTTCAGGCATCACTCAGTAAGTCAACCACTAAAAGCCTCTCTGCTCAGATTTTCCTGGTGCATCTTTTATTTCTCTTCTCTTTCATGTAGAA [...]
+chr4-04	EST_Human	nucleotide_match	337486	337720	88.000000	+	.	Target=DA231238.1 266 503 +;percentID=70.1;Gap=M14 D1 M10 I1 M1 I1 M3 I1 M24 I1 M2 I1 M7 I1 M6 D1 M8 D1 M157 ;sequence=AGATTCTCGCAAATCTGGAAGCGGATCGCGTGGAGTGACGGTCACACCGCGGCGAATTAATTCCCAAAGACTCATGTTACATGAGAAAGCCACCAAGAAGACCAAAGAAAAGGAGACAAGGATGGCCTCTTCCTCAGGGATGCCTTGACTTTCAAGGATGTGGCTATAGAATTCTCTTTGGAGGAGTGGAAATGCCTGAACCCTGCACGGAGGGCTTTATACAGGGCCGTGATGTTGGAGAACTACAGGAACCTGGAGTCTGTGGGATCGACTTCTAAGGACTCTTGGTACATGAGGAAGAAACCCGGAA [...]
+chr4-04	EST_Human	nucleotide_match	261929	262384	299.000000	-	.	Target=BQ187251.1 136 596 +;percentID=84.3;Gap=M27 D2 M1 D1 M16 D1 M29 D1 M14 I1 M101 I5 M45 D1 M2 D1 M52 I2 M99 I1 M1 I2 M3 I1 M1 I2 M31 D2 M25 ;sequence=GAGAAATATTTAGGCTAAAATTAAGACTATGTAAACATCAGAGGATTTACAGTAGAAAGAACTAAGGAACTAACACTTCAGACTTTAAAATAAATCAGAGTATTAAGTATAACAAAAGTTGAACCTGTTAGAAAATTTCCTTGTATATAAGTTGAAAAGTAGGTTTTTGAAGAGATATATTCGAAATATATTTTTTCACTTGAAAAAAGTAAAAATTTTTTTCAAAAGCAAATAATTCAACTCTAAAATTATACTATTTCAACATTCTCATTT [...]
+chr4-04	EST_Human	nucleotide_match	337553	337710	106.000000	-	.	Target=DB346087.1 132 289 +;percentID=83.5;sequence=GCAGCATTATGAAGCTTTTTATTTGTGAGTCAACAAGGCTTCAGTCTCAGTCAAATAATGGAAGGGCTCCCAAGAAAGACAACAGAGAAAATACAAAAATACACGAGGGCAGATCTTAACCTTCTAGAGCAAAATTATCCTTACCCAGGAAGACCAGGTTCCTGTAGTTCTCCAACATCACATCCCAGTACAAAGCTTTCTGCACAGGGTCCAGGGATTTCCACTCCTCCTGAGAGAATTCTATGGCTACATCCCTGAATGTCAAAGGTCCCTGAAATGAAAAACACATTTCAACATGAGCAATGGGAGAGCTCTTATCTATACATAAAATGAGAAGAGGAGAGAACTGTCACATCAATTTGATTGTGTGTTTTCA [...]
+chr4-04	EST_Human	nucleotide_match	261929	262388	299.000000	+	.	Target=AI681521.1 35 498 +;percentID=83.9;Gap=M25 D2 M31 I2 M1 I1 M3 I2 M1 I1 M99 I1 M52 D1 M2 D1 M45 I5 M101 I1 M14 D1 M29 D1 M16 D1 M1 D2 M31 ;sequence=TTTTTTTTTTTAACACAATAACAATTTTTATTTCAAAAATTAAGTTCACACATTATCTTAAGAGAATTTTAAAATTTACTGCATTTTATTGCACTTATTACATAAATATACAGTTGGCAAAACAATTTACTACTAAAATTCAGATTCTCTCTCAGTATAACGCAAAGTATTACTCTGAACACCTACTTCAGGCATCACTCAGTAGTCAACCACTAAAAGCCTCTCTGCTCAGATTTTCCTGGTGCATCTTTTATTTCTCTTCTCTTTCATGTAG [...]
+chr4-04	EST_Human	nucleotide_match	337567	337697	89.000000	+	.	Target=DB447371.2 219 349 +;percentID=84;sequence=GGTCTAGCGGGGCCTTTGTGCCGACAGAGCTCCACTTCCTGTCCCCGCGGCTCTGTGTCCCCTGCTAGCCGTAGGCCGTGTGACCCGCAGGCACCGGGAGATCCAGAAGTGAAACGCCAGGCTCTCTGGAGGCCAGGAGATGGTGTGATTTGTCCAGAGAATCTTTCCTAAGAGGAAATCCCAGAGAAGCAGGAGAAAGAGAAAGAAATGGCTGGTGCTCAGACTCTGGTGACGTTCAGGGATGTGGCCATAGAATTCTCCCTGGAGGAGTGGAAATGCCTGGACCTCGCTCAGCAGAATTTGTACAGGGATGTGATGTTGGAGAACTACAGAAACTTGGTCTCCGTTGGTCTCACTGTCTGTAAGCCAGGCCTGATCA [...]
+chr4-04	EST_Human	nucleotide_match	261929	262384	301.000000	+	.	Target=CA312619.1 42 502 +;percentID=84.5;Gap=M25 D2 M31 I2 M1 I1 M3 I2 M1 I1 M99 I2 M52 D1 M2 D1 M45 I5 M101 I1 M14 D1 M29 D1 M16 D1 M1 D2 M27 ;sequence=TTTTTTTTTTTTTTTTTTAACACAATAACAATTTTTATTTCAAAAATTAAGTTCACACATTATCTTAAGAGAATTTTAAAATTTACTGCATTTTATTGCACTTATTACATAAATATACAGTTGGCAAAACAATTTACTACTAAAATTCAGATTCTCTCTCAGTATAACGCAAAGTATTACTCTGAACACCTACTTCAGGCATCACTCAGTAAGTCAACCACTAAAAGCCTCTCTGCTCAGATTTTCCTGGTGCATCTTTTATTTCTCTTCTCTT [...]
+chr4-04	EST_Human	nucleotide_match	337320	337490	92.000000	+	.	Target=BX956892.1 257 425 +;percentID=77.2;Gap=M39 D2 M130 ;sequence=GGCCCACCTCGTGGGCTCCACGGAGGCCTGGCTTCTGTCCTGTGCTTGTAGATTCGCCCGGACCAGGAAGCGGATCGCGTGGACTGGAAGTCACACTGCGGCGGGAGGGGGTATGTTGACTCTGAGCAATAAACAACATATTTCTAACATTCATGATTGACTTCTAAAGACTCTGGGTATGTGAAGAAGAAACTCANAAGAGGAAGAGGAAAGCAAAGGAGTCAGGGATGGCTCTTCCTCAGGTAATTGANTGAGTCTGACCAACATGGAGAAACCCTGTCTCTAGCAAAAATACAAAATTANCTGGGCATGGTGGTGTGTGCCTGCAATCCCTGCTACTCAGGAGACTGAGGCAGAAGA [...]
+chr4-04	EST_Human	nucleotide_match	261929	262388	301.000000	+	.	Target=AW513477.1 26 490 +;percentID=84.2;Gap=M25 D2 M31 I2 M1 I1 M3 I2 M1 I1 M99 I2 M52 D1 M2 D1 M45 I5 M101 I1 M14 D1 M29 D1 M16 D1 M1 D2 M31 ;sequence=TTAACACAATAACAATTTTTATTTCAAAAATTAAGTTCACACATTATCTTAAGAGAATTTTAAAATTTACTGCATTTTATTGCACTTATTACATAAATATACAGTTGGCAAAACAATTTACTACTAAAATTCAGATTCTCTCTCAGTATAACGCAAAGTATTACTCTGAACACCTACTTCAGGCATCACTCAGTAAGTCAACCACTAAAAGCCTCTCTGCTCAGATTTTCCTGGTGCATCTTTTATTTCTCTTCTCTTTCATGTAGAAGTCTAT [...]
+chr4-04	EST_Human	nucleotide_match	261963	262384	273.000000	+	.	Target=BU620973.1 15 442 +;percentID=83.7;Gap=M24 I2 M1 I1 M3 I2 M1 I1 M99 I1 M52 D1 M2 D1 M45 I5 M101 I1 M14 D1 M29 D1 M16 D1 M1 D2 M27 ;sequence=TTTTTTTTTTTTTTTTTTAAAATTTACTGCATTTTATTGCACTTATTACATAAATATACAGTTGGCAAAACAATTTACTACTAAAATTCAGATTCTCTCTCAGTATAACGCAAAGTATTACTCTGAACACCTACTTCAGGCATCACTCAGTAGTCAACCACTAAAAGCCTCTCTGCTCAGATTTTCCTGGTGCATCTTTTATTTCTCTTCTCTTTCATGTAGAAGTCTATGAATAATGCCCACCTAATGCAAAGGAGTTTCTCATATCTCTGACGCAGCAA [...]
+chr4-04	EST_Human	nucleotide_match	262014	262384	88.000000	+	.	Target=AL571386.2 97 502 +;percentID=65.5;Gap=M6 D1 M17 I1 M53 I2 M8 I2 M4 I1 M2 I1 M38 I2 M2 I2 M47 I5 M50 I2 M5 D1 M4 I1 M1 I2 M5 I1 M1 I1 M5 I1 M2 I2 M9 I1 M5 I2 M26 D1 M32 I1 M2 I2 M2 I2 M9 I1 M2 I3 M31 ;sequence=AAGSTTATAAATAATCTAAAAATTTTCAAATNGTANTGNATTTATAGCATAAAAGTACAATTAGTAAAATGATTCACTAGTAATTTAATTACATTTAATTTAAAGTAAAATTAAAAATGCCTTTTCTCTATGATGCAGAATATTACTCCAAACACCTACCTCATGCATCACTCAATATGAAAAGTAAACTAACAGGGCCTCTCCACTTAGAT [...]
+chr4-04	EST_Human	nucleotide_match	337564	337697	88.000000	+	.	Target=BG192751.1 53 186 +;percentID=83;Gap=M26 D1 M10 I1 M97 ;sequence=TCCTTATACTATAATCTGTAACGAAAATACATACAAAGTTGAAAAACAGGACTTCTCGNGGGCACTTGACATTCAGTGCGTGGCCATACCAATTCTCTCAGGAGGAGTGGAAATGCCTGGACCCTGTGCAGAAGGCTTTATACAGGGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGAATCTGTCTTCCTGACCTGAGTATTATCTCCATGATGAAGCAAAGGACAGAGCCCAGGACTGTGGAGAATGAAATGAAAGTAGCAAAAAATCCAGATAGGTGGGAAGGTATCAAAGATATCAAC
+chr4-04	EST_Human	nucleotide_match	262041	262384	223.000000	-	.	Target=CB158662.1 189 533 +;percentID=83.8;Gap=M27 D2 M1 D1 M16 D1 M29 D1 M14 I1 M101 I5 M45 D1 M2 D1 M52 I2 M50 ;sequence=AGAAACACCAGAGAATTTTTACTAGAATATAATTTGTAGGTGCAGTAAATGTGAAGAAATATTTAGGCTAAAATTAAGACTATGTAAACATCAGAGGATTTACAGTAGAAAGAACTAAGGAACTAACACTTCATATTTTATAATAAATCAGAGTATTAAGTATAACAAAAGTTGAACCTGTTAGAAAATTTCCTTGTATATAAGTTGAAAAGTAGGTTTTTGAAGAGATATATTCGAAATATATTTTTTCACTTGAAAAAAGTAAAAATTTTTTTCAAAAGCAAATAATTCAACTCTAAAATTAT [...]
+chr4-04	EST_Human	nucleotide_match	337567	337697	87.000000	+	.	Target=CB128971.1 258 388 +;percentID=83.2;sequence=AATCAGGCACATGTCTGGAGAGGAGAAGACGGCTTCCGGGATCTAGCGGGGCCTTTGTCCCGACAGAGCTCCACTTCCTGTCCCCGCGGCTCTGTGTCCCCTGCTAGCCGTAGGCCGTGTGACCCGCAGGCACCGGGAGATCCAGAAGTGAAACGCCAGGCTCTCTGGAGGCCAGGAGATGGTGTGATTTGTCCAGAGAATCTTTCCTAAGAGGAAATCCCAGAGAAGCAGGAGAAAGAGAAAGAAATGGCTGGTGCTCAGACTCTGTTGACGTTCAGGGATGTGGCCATAGAATTCTCCCTGGAGGAGTGGAAATGCCTGGACCTCGCTCAGCAGAATTTGTACAGGGATGTGATGTTGGAGAGCTACAGAAACTT [...]
+chr4-04	EST_Human	nucleotide_match	262065	262360	178.000000	+	.	Target=BX453464.2 1 299 +;percentID=81.6;Gap=M25 D1 M2 I2 M4 D1 M45 D1 M2 D1 M45 I5 M101 I1 M14 D1 M29 D1 M6 I1 M17 ;sequence=CTGAACACCTACTTGAGGCATCACTTAGTAGTCACTCCTAAAAGCCTCTCTGCTCAGATTTTCCTGGTGCATCTTTTATTTCTCTTCTCTTTCATGTAGAAGTCTATGAATAATGCCCACCTAATGCAAAGGAGTTTCTCATATCTCTGACGCAGCAACAATTTATCACATGCTTTCACATAAATGAGAATGTTGAAATAGTATAATTTTAGAGTTGAATCATTCGCTTTTGAAAAAAATTTTTACTTTTTTCAAGTGAAAAAATATATTCCGAATATATCGTGTTCAAAAACCTACTTTGC [...]
+chr4-04	EST_Human	nucleotide_match	262149	262360	129.000000	-	.	Target=Z30125.1 157 372 +;percentID=81.7;Gap=M23 D1 M29 D1 M14 I1 M100 I5 M28 D1 M7 I1 M8 ;sequence=AAGAAATATTTAGGCTAAAATTAAGACTATGTAAACATCAGAGGATTTACCGTAGAAAGAACTAAGGAACTAACACTNCAGACTTTAAAATAAATCAGAGTATTAAGTATAACAAAAGTTGACCCTGTTAGAAAATNTCCTTGTATATAAGTTGAAAAGTAGGTTTGTGAAGAGATATATTCGAAATATATTTTTTCACTTGAAAAAAGTAAAAATTTTTCACAAAAGCAAATAACTCATCTCTAAAATTATTCTATTTCAACATTCTCATTTATGTGAAAGCATGTGATAAATTGTTGCTGCGTCAGAGATATGAGAAACTCTTTTG [...]
+chr4-04	EST_Human	nucleotide_match	262180	262384	114.000000	-	.	Target=AV732491.2 195 391 +;percentID=80.8;Gap=M27 D2 M1 D1 M16 D1 M29 D1 M14 I1 M21 D4 M42 D1 M1 D1 M27 I1 M3 I1 M13 ;sequence=AAGAAAAGAAACACCAGAGAATTTTTACTAGAATATAATTTGTAGGTGCAGTAAATGTGAAGAAATATTTAGGCTAAAATTAAGACTATGTAAACATCAGAGGATTTACAGTAGAAAGAACTAAGGAACTAACACTTCAGACTTTAAAATAAATCAGAGTATTAAGTATAACAAAAGTTGAACCTGTTAGAAAATTTCCTTGTATATAAGTTGAAAAGTAGGTTTTTGAAGAGATATATTCGAAATATATTTTTTCACTTGAAAAAAGTAAAAATTTTTTTCAAAAGCAAATAATTCAAC [...]
+chr4-04	EST_Human	nucleotide_match	262226	262375	94.000000	-	.	Target=BG569463.1 605 751 +;percentID=83.7;Gap=M3 I1 M15 D2 M1 D1 M4 D1 M11 D1 M29 D1 M18 I1 M23 I1 M40 ;sequence=GCATAAGAAAATTCATACTGGAGAGAAACCCTACACGTGTGGAGACTGTGGCAAAACCTTTAGACAGTCTGCAAATCTTTATGCACATAAGAAAATTCATACTGGAGATAAAACCATACAAGTGTAAAGAATGTGGCAAAGCCTTTAAGTCATACTACAGCATTCTTAAACATAAGAGAACTCATACCAGGGGAATGTCTTACGAAGGTGACGAATGTCGCGGTCTTTAAATGCTCCTCAATCCTTTCTAATCATAAGATAATTCATAATGAAGAGAAACTCTAAAATGTGAAACACATGTGAGAAGGCTTTTAA [...]
+chr4-04	EST_Human	nucleotide_match	262384	262680	170.000000	-	.	Target=BM803355.1 496 795 +;percentID=78.3;Gap=M63 I2 M17 I1 M2 D1 M51 D1 M13 D1 M4 I2 M36 I1 M22 D1 M49 I1 M36 ;sequence=TTAACTAAAATTAAAAATGTGGCAAAGACTTCCAATTCTAGTCAGTTCTTAATGTAATTCCTACTGAAGAAAACACCTNGGAAATACAAAAAATGTGGCAAAACTTGTAACCAATGCTTAGCATTTTTGCACATGATAGTATTTATATGTGAGACTACTTGTACAAACATAAAAATATACAAAAGCTATTGTCTACTTGAAATTTATAGTTAATAAAAGCATTATAAATGTAATTTCTGTTGAAAGACCTTTTAGAAAATATAGGCCATTAAAGTGAAGAATAGTCTTAAGACAGAGAATACAAAG [...]
+chr4-04	EST_Human	nucleotide_match	262394	262680	189.000000	+	.	Target=DB349057.1 4 292 +;percentID=83.5;Gap=M24 I1 M132 D1 M47 D1 M2 I1 M17 I2 M63 ;sequence=ATCTTGTTTTGAGACAGAGTTTCACTCTTGTTACCCAGGCTGGAGTGCAATGGCACGATCTCAGCTCACCGCAACCTCCACCTCCTGGGTTCAAGCCATTCTCCTGTCTCAGCCTCCTGAGTAGCTGGGATTACAGCCATGCACCACCATGTCCTGCTAATTTTTGTATTTTTAGTACAGACGAGGTTTCTCCATATTGGTCAGGCTGTCCTTGAACTCCCGACCTCAGGTGATCCACCCTCCTTGGCCTCCCAAAGTGTTGGGATTACAGGCGTGAGCCACCGCGCCTGGCCTCTGGTTTCTTAACCTGCAGTTTCTGAACAGAGGTTTTTCC [...]
+chr4-04	EST_Human	nucleotide_match	262394	262680	189.000000	+	.	Target=DB324740.1 2 290 +;percentID=83.5;Gap=M24 I1 M132 D1 M47 D1 M2 I1 M17 I2 M63 ;sequence=CTTGTTTTGAGACAGAGTTTCACTCTTGTTACCCAGGCTGGAGTGCAATGGCACGATCTCAGCTCACCGCAACCTCCACCTCCTGGGTTCAAGCCATTCTCCTGTCTCAGCCTCCTGAGTAGCTGGGATTACAGCCATGCACCACCATGTCCTGCTAATTTTTGTATTTTTAGTACAGACGAGGTTTCTCCATATTGGTCAGGCTGTCCTTGAACTCCCGACCTCAGGTGATCCACCCTCCTTGGCCTCCCAAAGTGTTGGGATTACAGGCGTGAGCCACCGCGCCTGGCCTCTGGTTTCTTAACCTGCAGTTTCTGAACAGAGGTTTTTCCAC [...]
+chr4-04	EST_Human	nucleotide_match	262394	262680	189.000000	+	.	Target=DB326282.1 2 290 +;percentID=83.5;Gap=M24 I1 M132 D1 M47 D1 M2 I1 M17 I2 M63 ;sequence=CTTGTTTTGAGACAGAGTTTCACTCTTGTTACCCAGGCTGGAGTGCAATGGCACGATCTCAGCTCACCGCAACCTCCACCTCCTGGGTTCAAGCCATTCTCCTGTCTCAGCCTCCTGAGTAGCTGGGATTACAGCCATGCACCACCATGTCCTGCTAATTTTTGTATTTTTAGTACAGACGAGGTTTCTCCATATTGGTCAGGCTGTCCTTGAACTCCCGACCTCAGGTGATCCACCCTCCTTGGCCTCCCAAAGTGTTGGGATTACAGGCGTGAGCCACCGCGCCTGGCCTCTGGTTTCTTAACCTGCAGTTTCTGAACAGAGGTTTTTCCAC [...]
+chr4-04	EST_Human	nucleotide_match	262397	262680	188.000000	+	.	Target=DB315243.1 2 287 +;percentID=83.7;Gap=M21 I1 M132 D1 M47 D1 M2 I1 M17 I2 M63 ;sequence=GTTTTGAGACAGAGTTTCACTCTTGTTACCCAGGCTGGAGTGCAATGGCACGATCTCAGCTCACCGCAACCTCCACCTCCTGGGTTCAAGCCATTCTCCTGTCTCAGCCTCCTGAGTAGCTGGGATTACAGCCATGCACCACCATGTCCTGCTAATTTTTGTATTTTTAGTACAGACGAGGTTTCTCCATATTGGTCAGGCTGTCCTTGAACTCCCGACCTCAGGTGATCCACCCTCCTTGGCCTCCCAAAGTGTTGGGATTACAGGCGTGAGCCACCGCGCCTGGCCTCTGGTTTCTTAACCTGCAGTTTCTGAACAGAGGTTTTTCCACATT [...]
+chr4-04	EST_Human	nucleotide_match	262405	263065	333.000000	-	.	Target=DB507896.2 7 652 +;percentID=77.1;Gap=M21 I1 M114 I1 M4 D1 M47 D1 M3 I1 M9 D2 M20 I1 M18 D1 M1 D1 M73 D1 M2 D1 M2 D1 M6 D2 M1 D1 M9 D1 M4 D3 M17 D1 M1 D1 M13 D1 M31 D1 M32 I2 M66 D2 M132 I1 M13 ;sequence=GATGACCACTACAAATGTGAAGAGGGTTGTAGTACCTTTATTTGTATCACAGATTTTATTGTACACATTTTGTACTAGAAGAAAACTCTGAAGTAGTTGCTCAAACTTTGTTCAACATCAGGGAATTTATATTGAAGAAAAACTTTGCAAATTTAATAAATTTTAAAAAACACTTTTTCAAAAAGTACAGCTTAGAAGACACCAGAGTTCATACTAA [...]
+chr4-04	EST_Human	nucleotide_match	262647	263199	551.000000	+	.	Target=DA327460.1 4 557 +;percentID=99.8;Gap=M154 I1 M399 ;sequence=TTAGCTGGGATTACAGGCGTGAGCCACCGTGCCCGGCCAACAAAGAAAGTTTCTAACAGGTTGAACTTTGGATTTTTTTACACTTAATACTCCGATTTCTTGTAAGGTGTTAGTTCCTTAGTTCTTTCTCCAGTAAATCCTCTGATGTTTACATAGGCCTTAATTTTAGCCTAAATATTTCTCCACATTTATTGCATCTACAAATTCTCTTCTAATATAAACTCTCTAGTGTTTCTTAACCTGCAGTTTTTGAACAGATGTTTTTCCACATTTATTACATTTGTCGTATTTCGCTCCAATGTAAATTCTCTGATGTTGAACAAAGTTTGAGCAACTGCTTCTGAGTCTTCCGCTAGTACA [...]
+chr4-04	EST_Human	nucleotide_match	262671	262905	81.000000	+	.	Target=BX453464.2 300 541 +;percentID=70.2;Gap=M45 D6 M25 I1 M3 I3 M2 I1 M2 I2 M107 I1 M22 I1 M5 I1 M3 I2 M5 I1 M10 
+chr4-04	EST_Human	nucleotide_match	262672	262824	76.000000	-	.	Target=Z30125.1 2 156 +;percentID=77.8;Gap=M75 I2 M1 I4 M2 I1 M31 D6 M27 I1 M11 
+chr4-04	EST_Human	nucleotide_match	262672	263089	407.000000	+	.	Target=AW381146.1 2 419 +;percentID=98.8;Gap=M6 D1 M69 I1 M342 ;sequence=GGTGGCCTCCAGCAAAGAAAGTTTCTAACAGGTTGAACTTTGGATTTTTTTACACTTAATACTCCGATTTCTTGTANAGGTGTTAGTTCCTTAGTTCTTTCTCCAGTAAATCCTCTGATGTTTACATAGGCTTAATTTTAGCCTAAATATTTCTCCACATTTATTGCATCTACAAATTCTCTTCTAATATAAACTCTCTAGTGTTTCTTAACCTGCAGTTTTTGAACAGATGTTTTTCCACATTTATTACATTTGTCGTATTTCGCTCCAATGTAAATTCTCTGATGTTGAACAAAGTTTGAGCAACTGCTTCTGAGTCTTCCGCTAGTACAAAATGTGTACAGTAAGATCCAGG [...]
+chr4-04	EST_Human	nucleotide_match	262683	262879	113.000000	-	.	Target=R22735.1 104 308 +;percentID=80.9;Gap=M109 I1 M21 I2 M1 I4 M2 I2 M21 D1 M9 D3 M7 I1 M8 I1 M11 I1 M4 ;sequence=GCTTGAACCCAGGAGGTGGAGGTTGCGGTGANTGAGATCGTGCCATTGCACTCCAGCCTGGGTAACAAGAGTGAAACTCTGTCTCAAAACAAGAAAAAAAGAAAAGAAACACCAGAGAATTTTTACTAGAATATAATTTGTAGGTGCAGTAAATGTGAAGAAATATTTAGGCTAAAATTAAGACTATGTAAACATCAGAGGATTTACAGTAGGAAAGAACTAAGGAACTAACACTTCAGACTTTTAAAATAAATCAGAGTATTTAAGTATTAACAAAAGTTGGAACCTGTTTAGGAAATTTCCCTTGTATT [...]
+chr4-04	EST_Human	nucleotide_match	337567	337698	93.000000	-	.	Target=BI007170.1 381 512 +;percentID=84.8;sequence=GTTCTCACAGAATCTCCCATTTGCAGAGAGTTTCCCAAACGCTATGTAATAGTGTGGCTTTGCAGGGTACAGTGGCTCATGGCTGTAATCCCAACACTTTGGAAGAGCGAGCCAGGAGATCCCTTAAGTCCAGGAATTCAAGGCTGCAGTGAGCTATGATTGCCACCGCACTCTAGCCTGGATGACAGCGTTAGACCCTGTCTCAAAAAACAAAAATTATGGGGCCTCCACTCTGCCCACCCGAGCTCTCACCTGTGTTCACACCTTTGATGCACTCCCTGCCGTCTGGATCGTTTGCTATTTTCTCTTCACTCTGCAGAGTCCAGGNATCTCTCTTTTGCTCTAACATGGAGGTAACACTCAGGTCAGGAAGACAG [...]
+chr4-04	EST_Human	nucleotide_match	262683	262887	121.000000	-	.	Target=BG569463.1 399 604 +;percentID=81.6;Gap=M138 I2 M1 I4 M2 I1 M31 D6 M27 
+chr4-04	EST_Human	nucleotide_match	262683	262879	124.000000	-	.	Target=DW431518.1 53 250 +;percentID=82.6;Gap=M130 D1 M2 D1 M2 D1 M11 I1 M15 I1 M3 I1 M4 I1 M27 ;sequence=GGCCATTACGGCCGGGAGAGTGAAACTCTGTCTCAAAACAAGAAAAAAAGAAAAGAAACACCAGAGAATTTTTACTAGAATATAATTTGTAGGTGCAGTAAATGTGAAGAAATATTTAGGCTAAAATTAAGACTATGTAAACATCAGAGGATTTACAGTAGAAAGAACTAAGGAACTAACACTTCAGACTTTAAAATCAATCAGAGTATTAAGTATAACAAAAGTTGAACCTGTTAGAAAATTTCCTTGTATATAAGTTGAAAAGTAGG
+chr4-04	EST_Human	nucleotide_match	337568	337774	102.000000	-	.	Target=N94749.1 67 272 +;percentID=75.6;Gap=M5 D2 M18 I1 M13 D1 M15 I1 M153 ;sequence=CAGCATTATGAAGCTTTTTATTTGTGAGTCAACAAGGCTTCAGTCTCAGTCAAATAATGGAAGGGCTCCCAAGAAAGACAACAGAGAAAATACAAAAATACACGAGGGCAGATCTTAACTTCTAGAGCAAAATTATCCTTACCCAGGAAGACCAGGTTCCTGTAGTTCTCCAACATCACATCCCAGTACAAAGCTTTCTGCACAGGGTCCAGGGATTTCCACTCCTCCTGAGAGAATTCTATGGCTACATCCCTGAATGTCAAAGGTCCCTGTGTAAGAGCCATCCCTGACTCCTTTTCTTTCCTCTTCTTCCTCTTCTGGGGCTTCTCTCTCAGTCAATAT [...]
+chr4-04	EST_Human	nucleotide_match	262683	263232	263.000000	-	.	Target=BF031091.1 3 557 +;percentID=77.2;Gap=M25 I1 M8 D2 M81 D1 M3 D1 M67 I1 M26 D1 M41 D6 M1 D2 M18 I1 M6 I1 M66 D1 M1 D2 M2 D3 M1 D4 M33 I1 M7 I1 M25 I1 M21 I1 M5 I1 M4 I1 M10 I1 M6 I1 M6 I1 M3 I4 M2 I3 M21 I1 M1 I1 M5 I1 M1 I2 M8 I1 M12 I1 M5 I1 M6 ;sequence=TCGAGAAAAGTTATAGAAATATAAAAAATATAGAAAAGTCATATCTCCTCACATTTTACTAACTAGCACAGTTCATACTTAATAAAAACATTATAAATGTAATTTCTGTTGAAAGACTTCAGAAAATATAGGCCTTTAAAGTGAAGAAGAGTATTCTTAAGACAA [...]
+chr4-04	EST_Human	nucleotide_match	337569	337697	99.000000	+	.	Target=DB028799.1 62 190 +;percentID=88.4;sequence=AGTGCGTTACCAAACAGCTTTAACCTGGATGTGGAGGAGGATGACATTGAGAATCTCTTAGAGGGACACTTGACATTCAGGGACGTGGCCATAGAATTCTCTCAGGAGGAGTGGAAATGCCTGGACCCTGTGCAGAAGGCTTTATACAGGGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGAATCTGTCTTCCTGACCTGAGTATTATCTCCATGATGAAGCAAAGGACAGAGCCCTGGACTGTGGAGAATGAAATGAAAGTAGCAAAAAATCCAGATAGGTGGGAAGGTATCAAAGATATCAACACAGGGAGGAGCTGTGCAGTGAGAAGCAAAGCAGGAAACAAGCCTATTACAAATCAACTTGGA [...]
+chr4-04	EST_Human	nucleotide_match	262690	263252	563.000000	+	.	Target=DB253512.1 1 563 +;percentID=100;sequence=AAGTTTCTAACAGGTTGAACTTTGGATTTTTTTACACTTAATACTCCGATTTCTTGTAAGGTGTTAGTTCCTTAGTTCTTTCTCCAGTAAATCCTCTGATGTTTACATAGGCTTAATTTTAGCCTAAATATTTCTCCACATTTATTGCATCTACAAATTCTCTTCTAATATAAACTCTCTAGTGTTTCTTAACCTGCAGTTTTTGAACAGATGTTTTTCCACATTTATTACATTTGTCGTATTTCGCTCCAATGTAAATTCTCTGATGTTGAACAAAGTTTGAGCAACTGCTTCTGAGTCTTCCGCTAGTACAAAATGTGTACAGTAAGATCCAGGATACAAGTACAGGTACTACACCCTCTTTATATTTGTATTGTCT [...]
+chr4-04	EST_Human	nucleotide_match	337569	337697	99.000000	+	.	Target=CD358945.1 105 233 +;percentID=88.4;sequence=GGATGTGGAGGAGGATGACATTGAGAATCTCTTAGAGGTGGTTCATGAGGAATGGGTTAATGAGGAGTCATTGGAACTGATACAGGAACATGTAGCTGAAGAAGAGGGACACTTGACATTCAGGGACGTGGCCATAGAATTCTCTCAGGAGGAGTGGAAATGCCTGGACCCTGTGCAGAAGGCTTTATACAGGGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGAATCTGTCTTCCTGACCTGAGTATTATCTCCATGATGAAGCAAAGGACAGAGCCCTGGACTGTGGAGAATGAAATGAAAGTAGCAAAAAATCCAGATAGGTGGGAAGGTATCAAAGATATCAACACAGGGAGGAGCTGTGCAG [...]
+chr4-04	EST_Human	nucleotide_match	262696	263335	640.000000	+	.	Target=DN992929.1 8 647 +;percentID=100;sequence=CACGAGGCTAACAGGTTGAACTTTGGATTTTTTTACACTTAATACTCCGATTTCTTGTAAGGTGTTAGTTCCTTAGTTCTTTCTCCAGTAAATCCTCTGATGTTTACATAGGCTTAATTTTAGCCTAAATATTTCTCCACATTTATTGCATCTACAAATTCTCTTCTAATATAAACTCTCTAGTGTTTCTTAACCTGCAGTTTTTGAACAGATGTTTTTCCACATTTATTACATTTGTCGTATTTCGCTCCAATGTAAATTCTCTGATGTTGAACAAAGTTTGAGCAACTGCTTCTGAGTCTTCCGCTAGTACAAAATGTGTACAGTAAGATCCAGGATACAAGTACAGGTACTACACCCTCTTTATATTTGTATTGTC [...]
+chr4-04	EST_Human	nucleotide_match	337569	337697	99.000000	+	.	Target=DB050382.1 121 249 +;percentID=88.4;sequence=AAAACAGCTTTAACCTGGATGTGGAGGAGGATGACATTGAGAATCTCTTAGAGGTGGTTCATGAGGAATGGGTTAATGAGGAGTCATTGGAACTGATACAGGAACATGTAGCTGAAGAAGAGGGACACTTGACATTCAGGGACGTGGCCATAGAATTCTCTCAGGAGGAGTGGAAATGCCTGGACCCTGTGCAGAAGGCTTTATACAGGGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGAATCTGTCTTCCTGACCTGAGTATTATCTCCATGATGAAGCAAAGGACAGAGCCCTGGACTGTGGAGAATGAAATGAAAGTAGCAAAAAATCCAGATAGGTGGGAAGGTATCAAAGATATCAACACA [...]
+chr4-04	EST_Human	nucleotide_match	262701	262825	73.000000	-	.	Target=BQ187251.1 1 135 +;percentID=80.7;Gap=M76 I2 M1 I4 M2 I1 M31 I1 M8 I1 M3 I1 M4 
+chr4-04	EST_Human	nucleotide_match	262701	262859	94.000000	+	.	Target=BU616016.1 502 670 +;percentID=80.5;Gap=M4 I1 M3 I1 M8 I1 M31 I1 M2 I4 M1 I2 M110 
+chr4-04	EST_Human	nucleotide_match	262701	262869	101.000000	+	.	Target=CA312619.1 503 681 +;percentID=81;Gap=M4 I1 M3 I1 M8 I1 M31 I1 M2 I4 M1 I2 M120 
+chr4-04	EST_Human	nucleotide_match	262701	262905	108.000000	+	.	Target=BU620973.1 443 661 +;percentID=78.2;Gap=M4 I1 M3 I1 M8 I1 M31 I1 M2 I4 M1 I2 M133 I1 M5 I2 M2 I1 M6 I1 M5 D1 M4 
+chr4-04	EST_Human	nucleotide_match	262701	262878	108.000000	-	.	Target=CB158662.1 1 188 +;percentID=81.4;Gap=M129 I2 M1 I1 M1 I1 M1 I3 M31 I1 M8 I1 M3 I1 M4 
+chr4-04	EST_Human	nucleotide_match	262701	262879	109.000000	-	.	Target=AV732491.2 6 194 +;percentID=81.5;Gap=M130 I2 M1 I4 M2 I1 M31 I1 M8 I1 M3 I1 M4 
+chr4-04	EST_Human	nucleotide_match	262701	262879	110.000000	+	.	Target=CA442913.1 502 690 +;percentID=81.5;Gap=M4 I1 M3 I1 M8 I1 M31 I1 M2 I4 M1 I2 M130 
+chr4-04	EST_Human	nucleotide_match	262702	263330	272.000000	+	.	Target=AL571386.2 503 1152 +;percentID=73.5;Gap=M10 I1 M26 I1 M3 I2 M3 I2 M2 I2 M106 I1 M12 D1 M1 D1 M2 D1 M1 D1 M23 I2 M150 I1 M1 I2 M1 I1 M2 I2 M1 I1 M2 I2 M22 I1 M4 I1 M4 I1 M1 I1 M41 I1 M48 D1 M2 I1 M26 I1 M4 I1 M5 I1 M66 D2 M3 D1 M23 I1 M14 D1 M11 
+chr4-04	EST_Human	nucleotide_match	262707	263020	163.000000	-	.	Target=N75183.1 10 329 +;percentID=77.5;Gap=M126 I2 M23 D1 M1 D1 M2 D1 M1 D1 M12 I1 M28 D1 M77 I2 M2 I2 M3 I2 M3 I1 M26 I1 M5 ;sequence=GTATTACAAATCTTATTGTACGCATTTTGTACTAGAGAAAAACACTGAAGCAGTTGCTCAAACTTTGTTCAACATCAGGGAATTTATATTGGAGAAAAATCCTGCAAATGTAATGAATTTGGAAAAACATTTTTTTTCAAAAACTACGGCGTAGAAAACATGAATTTATATTGAAATGTGTTTTTGCAGATGCAGTAAGTATGAAAAATATTTAATCCAAAATTGAGTCTATGTAAATATTAAATAATTTACAGTAGAAATAACTAAGGCACTGACACTTTAGACATTACAC [...]
+chr4-04	EST_Human	nucleotide_match	337570	337617	40.000000	+	.	Target=DB170146.1 171 218 +;percentID=91.7;sequence=GTTTTCCTCTGGCTCCTGCGAGGGCTTGGTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGGAACTCGTAACATTCAGGGATGTGGCCATAGAATTCTCCCCTGAAGGGTGGAAATGTCTGGAGCAAATAAAAGAGCCCTGCAATTTGAAGATACATGAGACAGCAGCCAAACCCCCAGCTATATGTTCTCCTTTCAGCCAAGACCTTTCACCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAAAAGATACGAGAA [...]
+chr4-04	EST_Human	nucleotide_match	262743	263325	282.000000	-	.	Target=BG527927.1 1 598 +;percentID=75.9;Gap=M24 I1 M2 I1 M22 D2 M66 I1 M5 I1 M4 I1 M26 I1 M2 D1 M89 I1 M1 I1 M4 I1 M4 I1 M22 I2 M2 I1 M1 I2 M2 I1 M1 I2 M1 I1 M150 I3 M23 D1 M1 D1 M2 D1 M1 D1 M12 I2 M28 D1 M55 D1 M24 ;sequence=TAATTTATATTGGAGAAAACTTTATAAGTGTAAAGAATGTGACAAAACTTAACCAATACTCACATCTTATTGCACAGGAAAGCATTTTTACTTGAGAAAGATTGTACAAGTATAAAGAATGTGAAAAAGTCATTGATATCTTTTCACATCTTACTCAACACCAGAGTTTATACTTATTAAAAGCATTATAAATGCAATTAC [...]
+chr4-04	EST_Human	nucleotide_match	337570	337752	110.000000	+	.	Target=BU954839.1 151 332 +;percentID=81.2;Gap=M156 D1 M1 D2 M8 D1 M4 I2 M3 I1 M7 ;sequence=GGGGTCTCCTTGCGGCCGGCGGGGTGCTGGGTTCCCGTCTGCTGCCTCTCGGAGAGTCCCGGGTGACTGCCGCAGGCTCCATCGCCCTGTGGCCTGCAGGTATTGCGAGATTTATAGGGAGGACGCTGGGACCCCCAAAAGCTGGGAAATGGGACTATTGGCATTCAGGGATGTGGCTCTAGAATTCTCTCCAGAGGAGTGGGAATGCCTGGACCCAGCTCAGCGGAGTTTGTATAGGGATGTGATGTTAGAGAACTACAGAAACCTGATCTCCCTTGGTGAGGATAGCTTCANTATGCAATTCCTATTTCACAGTCTTGCTATGTCTAAGCCAGA [...]
+chr4-04	EST_Human	nucleotide_match	262745	263089	340.000000	+	.	Target=AW381151.1 1 344 +;percentID=99.4;Gap=M50 D1 M294 ;sequence=GTAAGGTGTTAGTTCCTTAGTTCTTTCTCCAGTAAATCCTCTGATGTTTAATAGGCTTAATTTTAGCCTAAATATTTCTCCACATTTATTGCATCTACAAATTCTCTTCTAATATAAACTCTCTAGTGTTTCTTAACCTGCAGTTTTTGAACAGATGTTTTTCCACATTTATTACATTTGTCGTATTTCGCTCCAATGTAAATTCTCCGATGTTGAACAAAGTTTGAGCAACTGCTTCTGAGTCTTCCGCTAGTACAAAATGTGTACAGTAAGATCCAGGATACAAGTACAGGTACTACACCCTCTTTATATTTGTATTGTCTGTCTTAAGAATACTCTTCTTC
+chr4-04	EST_Human	nucleotide_match	337570	337752	111.000000	+	.	Target=EL735851.1 3 184 +;percentID=81.7;Gap=M156 D1 M1 D2 M8 D1 M4 I2 M3 I1 M7 ;sequence=ATGGGACTATTGGCATTCAGGGATGTGGCTCTAGAATTCTCTCCAGAGGAGTGGGAATGCCTGGACCCAGCTCAGCGGAGTTTGTATAGGGATGTGATGTTAGAGAACTACAGAAACCTGATCTCCCTTGGTGAGGATAGCTTCAATATGCAATTCCTATTTCACAGTCTTGCTATGTCTAAGCCAGAACTGATCATCTGTCTGGAGGCAAGGAAAGAGCCCTGGAACGTGAACACAGAGAAGACAGCCAAACACTCAGCCATGTGCCCAACTTTCTTGTACAAAGTTGGCATTATAAGAAAGCATTGCTTATCAATTTGTTGCAACGAACAGGTCAC [...]
+chr4-04	EST_Human	nucleotide_match	262827	263193	213.000000	+	.	Target=AA617794.1 1 348 +;percentID=81.8;Gap=M37 D4 M1 D3 M2 D2 M1 D1 M90 D2 M1 D6 M68 I1 M67 D1 M3 D1 M77 ;sequence=ACATTTACTGCATCTACAAAATATTTTCTAGTGTAAACTGTTTAAGCTGCAGTTTTTGAACAAATGTTTTTCCACATTTATTACATTTGTAGGATTTCTCTCCAATATAAATTTTCTGATGTTGAAGAAAGTCTCCTTCAGTGTTTTCCCCTATTATAAAATGTGTACAACAAAATCCATGAGAGAAGTACAGGTACTACAACCCTCTTTATATTTGTATTGTTTGTCTTAAGAATACTCTTCTTCACTTTAAAGGCCTATATTTTCTGAAGTCTTTCAACAGAAATTACATTTATAATGTTTTTATTAAG [...]
+chr4-04	EST_Human	nucleotide_match	337570	337826	97.000000	+	.	Target=DA311782.1 219 483 +;percentID=70.4;Gap=M126 I1 M2 I4 M4 I1 M56 I1 M4 I1 M19 D1 M15 I2 M19 D1 M10 ;sequence=AGGCGCGCAGTCTGAGAGGAGGGGGCTGGCATCCGGGATCTTCGGCGGCCTTGGCCTGTTGCTTCAGCCTGAGCTCGGTTAGGGCCTCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGAT [...]
+chr4-04	EST_Human	nucleotide_match	262866	263123	188.000000	+	.	Target=DB326282.1 291 542 +;percentID=88.1;Gap=M4 D1 M1 D1 M173 I1 M31 D3 M1 D2 M1 D1 M21 I1 M18 
+chr4-04	EST_Human	nucleotide_match	262866	263116	190.000000	+	.	Target=DB324740.1 291 537 +;percentID=88.5;Gap=M4 D1 M1 D1 M173 I1 M31 D3 M37 
+chr4-04	EST_Human	nucleotide_match	262866	263123	191.000000	+	.	Target=DB349057.1 293 547 +;percentID=88.1;Gap=M4 D1 M1 D1 M173 I1 M31 D3 M36 I1 M8 
+chr4-04	EST_Human	nucleotide_match	262866	263136	203.000000	+	.	Target=DB315243.1 288 551 +;percentID=89;Gap=M4 D1 M1 D1 M173 I1 M31 D3 M1 D2 M1 D1 M52 
+chr4-04	EST_Human	nucleotide_match	262866	263338	279.000000	-	.	Target=CF140195.1 114 565 +;percentID=82.7;Gap=M1 I1 M3 I1 M29 I3 M40 D2 M4 I1 M59 D3 M1 D2 M2 D3 M6 D3 M3 D1 M2 D4 M1 D1 M3 D1 M80 D1 M1 D2 M1 D3 M31 I1 M173 D1 M1 D1 M4 ;sequence=CACGAGGTGTGAGAAGGCTTTTAATCACACCTCAATCTGTTGTAGACATAAGAGTAATTATATTGATGAGAAGCCAAATTAAAATTAAAAATGTGGCAAAGACTTCCAATTCTAGTCAGTTCTTAATGTAATTCCTACTGAAGAAAACACCTGGAAATACAAAAAATGTGGCAAAACTTGTAACCAATGCTTAGCATTTTTGCACATGATAGTATTTATATGTGAGACTACTTGTACAAACATAAAA [...]
+chr4-04	EST_Human	nucleotide_match	337570	337695	117.000000	+	.	Target=AV742687.1 206 330 +;percentID=96.8;Gap=M17 D1 M108 ;sequence=AATTCGCGGCCGCGTCGACTCTGCGAGAAGACGACAGAAGGGGCTGTTGCTCAGCCTGAGCTCGGTTAGGGCCTCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGGNCGGGGCATGGTGGCTCACGCCTGTA [...]
+chr4-04	EST_Human	nucleotide_match	262866	263358	297.000000	-	.	Target=BM803355.1 26 495 +;percentID=83.2;Gap=M26 D4 M23 I3 M3 I1 M37 D2 M4 I1 M59 D3 M1 D2 M2 D3 M6 D3 M3 D1 M2 D4 M1 D1 M3 D1 M85 D3 M31 I1 M173 D1 M1 D1 M4 
+chr4-04	EST_Human	nucleotide_match	262895	263338	237.000000	-	.	Target=CB999730.1 305 742 +;percentID=80;Gap=M1 I1 M3 I1 M29 I3 M40 D2 M4 I1 M59 D3 M1 D2 M2 D3 M6 D3 M3 D1 M2 D4 M1 D1 M3 D1 M85 D3 M31 I1 M7 I1 M47 I1 M13 I1 M15 I1 M16 I1 M11 I1 M6 I1 M11 I1 M12 I1 M5 I1 M8 ;sequence=GGACTGGAGATAAAACCATACAAGTGTAAAGAATGTGGCAAAGCCTTTAAGTCATACTACAGCATTCTTAAACATAAGAGAACTCATACCAGGGGAATGTCTTACGAAGGTGACGAATGTCGCGGTCTTTAAATGCTCCTCAATCCTTTCTAATCATAAGATAATTCATAATGAAGAGAAACTCTAAAATGTGAAAAATGTGAGAAGG [...]
+chr4-04	EST_Human	nucleotide_match	337570	337697	120.000000	+	.	Target=CN399123.1 109 236 +;percentID=96.9;sequence=GGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAGAAGATATGAGAAATGTGGGCATGATAATTTACAATTAAGGAAAGGCTGTAAAAGTATGAACGTG [...]
+chr4-04	EST_Human	nucleotide_match	262931	263288	349.000000	-	.	Target=AW191584.1 12 371 +;percentID=98.9;Gap=M138 I1 M31 I2 M161 D1 M27 ;sequence=TTTTTTTTTTTTGGCAAAACTTTTAATCAATGCTCATATCTTTTTGCATGTGATAGCATTTATACATGAGAATAATTGCACAAATATAAAAATACAAAAGCCATTAATTTCTACTCACATCTTACCAGATATCAGAATTTATGGTTAACTAAAAGCATTATAAATGTAATTTCTGTTGAAAAAGACCTTTTAGAAAATATAGGCCATTAAAGCGAAGAAGAGTATTCTTAAGACAGACAATACAAATATAAAGAGGGTGTAGTACCTGTACTTGTATCCTGGATCTTACTGTACACATTTTGTACTAGCGGAAGACTCAGAAGCAGTTGCTCAAACTTTGTTCAC [...]
+chr4-04	EST_Human	nucleotide_match	337570	337697	114.000000	+	.	Target=CD385642.1 186 313 +;percentID=94.5;sequence=AACCGGACCGAAGGAGTAGAAACTTTGTCTCACTTCAGCCAGAGCGCGGGGTTAGGGCTTCATTGCCTCGTGTCCTCTGCTCCCGGAGACTTCGGTGATTCTGCCACTCACTCCGTCGCTCTGTGACCTGCTGGCATTGAATGATTTATAGCTAAGACTCCAGGACACCCCTGAGGCCGAGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTAGACCCTGCCCAACAGAATTTATATAGAGATGTGATGTTGGAGAACTACAGAGACCTCGTCTCCCTGGTGTTGTTATCTCTAACCAGACCTGGTCACCTGTCTGGAGCAAAGAAAAGAGCCTTACAATTTG [...]
+chr4-04	EST_Human	nucleotide_match	262953	263293	337.000000	-	.	Target=BU785632.1 16 356 +;percentID=99.4;sequence=TTTTTTTTTTTTTTTAAATGCGGCAAAACTTTTAATCAATGCTCATATCTTTTTGCATGTGATAGCATTTATACATGAGAATAATTGCACAAATATAAAAATACAAAAGCCATTAATTTCTACTCACATCTTACCAGATATCAGAATTTATGGTTAACAAAAGCATTATAAATGTAATTTCTGTTGAAAGACCTTTTAAAAAATATAGGCCATTAAAGCGAAGAAGAGTATTCTTAAGACAGACAATACAAATATAAAGAGGGTGTAGTACCTGTACTTGTATCCTGGATCTTACTGTACACATTTTGTACTAGCGGAAGACTCAGAAGCAGTTGCTCAAACTTTGTTCAACATCA
+chr4-04	EST_Human	nucleotide_match	337570	337695	120.000000	+	.	Target=AV725968.1 126 251 +;percentID=97.6;sequence=CCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGGCCGGGCATGGTGGCTCACGCCTGTAATCCCAGCACTTCGGGAGGCTGAGGCGGGTGGATCACCTGAGGTCGGGAGTTCGAGACCAGCCTGGCCGGCATGGAGAAACCCTGTCTNCACTAAAA [...]
+chr4-04	EST_Human	nucleotide_match	263087	263338	122.000000	-	.	Target=CN430381.1 381 618 +;percentID=78.7;Gap=M1 I1 M3 I1 M29 I3 M40 D2 M4 I1 M59 D3 M1 D2 M2 D3 M6 D3 M3 D1 M2 D4 M1 D1 M3 D1 M78 ;sequence=GGGAAACCCTACACGTGTGGAGACTGTGGCAAAACCTTTAGACAGTCTGCAAATCTTTATGCACATAAGAAAATTCATACTGGAGATAAAACCATACAAGTGTAAAGAATGTGGCAAAGCCTTTAAGTCATACTACAGCATTCTTAAACATAAGAGAACTCATACCAGGGGAATGTCTTACGAAGGTGACGAATGTCGCGGTCTTTAAATGCTCCTCAATCCTTTCTAATCATAAGATAATTCATAATGAAGAGAAACTCTAAAATGTGAAAAATGTGAGAAGGCT [...]
+chr4-04	EST_Human	nucleotide_match	337570	337752	111.000000	+	.	Target=DA809929.1 188 369 +;percentID=81.7;Gap=M156 D1 M1 D2 M8 D1 M4 I2 M3 I1 M7 ;sequence=AGAGAGGAAGGGGCGGCCTTGGGGATCTGGCGGGGCCTTTGTCTCCTTGCGGCCGGCGGGGTGCTGGGTTCCCGTCTGCTGCCTCTCGGAGAGTCCCGGGTGACTGCCGCAGGCTCCATCGCCCTGTGGCCTGCAGGTATTGCGAGATTTATAGGGAGGACGCTGGGACCCCCAAAAGCTGGGAAATGGGACTATTGGCATTCAGGGATGTGGCTCTAGAATTCTCTCCAGAGGAGTGGGAATGCCTGGACCCAGCTCAGCGGAGTTTGTATAGGGATGTGATGTTAGAGAACTACAGAAACCTGATCTCCCTTGGTGAGGATAGCTTCAATATGC [...]
+chr4-04	EST_Human	nucleotide_match	263195	263338	80.000000	-	.	Target=DB116515.1 380 530 +;percentID=79.7;Gap=M1 I1 M3 I1 M29 I3 M40 D2 M4 I1 M37 I1 M17 I2 M11 ;sequence=AGAAACCCTACACGTGTGGAGACTGTGGCAAAACCTTTAGACAGTCTGCAAATCTTTATGCACATAAGAAAATTCATACTGGAGATAAAACCATACAAGTGTAAAGAATGTGGCAAAGCCTTTAAGTCATACTACAGCATTCTTAAACATAAGAGAACTCATACCAGGGGAATGTCTTACGAAGGTGACGAATGTCGCGGTCTTTAAATGCTCCTCAATCCTTTCTAATCATAAGATAATTCATAATGAAGAGAAACTCTAAAATGTGAAAAATGTGAGAAGGCTTTTAATCACACCTCAATCTGTTGTAGACATAAGAGTA [...]
+chr4-04	EST_Human	nucleotide_match	337570	337697	112.000000	+	.	Target=DA571532.1 162 289 +;percentID=93.8;sequence=GTAGCTCCAGCCAGAGCTCGGTTAGGGCCTCATCGCTCTGCTCCCGCTCCTTAGGGAAGCCTCGGTGATTCTGCCACAGCCTCAGCCTCTGTGGCTCTGTGACCTGCCGGTATTGGATGATTCGTATCTAAGACTCTGGGACACTCCTGAAGTCGGGAAATGGAACTCTTAACATTCAAGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGTCTGGACATTTCCCAGCAGAATTTATATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTGGGTGTTACTATCTCTAACCCAGACCTGGTCACCAGTCTGGAGCAAAGAAAAGAGCCCTACAATTTGAAGATACATGAAACAGCAGCCA [...]
+chr4-04	EST_Human	nucleotide_match	263226	263338	57.000000	-	.	Target=CX759702.1 668 782 +;percentID=78.2;Gap=M1 I1 M3 I1 M29 I3 M40 D2 M4 I1 M10 D2 M22 ;sequence=AGGATGGACTTAGACAGTTTCGGTCCGGATTCCGGGATGAACCCTTTAAATGTTTAGAATGTGGTAAAGCGTTTACTAGTTCCACAACCCTTACTAAACATAGGAGAATTCATACTGGAGAGAAACCCTACACATGTGAAGAATGTGGCAAAGCCTTTAGACAGTCAGCAATCCTTTATGTACATAGGAGAATTCATACTGGAGAGAAACCCTACACATGTGGAGAATGTGGCAAAACCTTTAGACAGTCTGCAAATCTTTATGCGCATAAGAAAATTCATACTGGAGAGAAACCCTACACGTGTGGAGACTGTGGCAAAACCTTTAGA [...]
+chr4-04	EST_Human	nucleotide_match	337571	337697	88.000000	+	.	Target=BX956892.1 426 552 +;percentID=84.3
+chr4-04	EST_Human	nucleotide_match	263236	263338	55.000000	-	.	Target=CX760338.1 629 733 +;percentID=79.8;Gap=M1 I1 M3 I1 M29 I3 M39 D2 M5 I1 M10 D2 M12 ;sequence=AACCCTTTAAATGTTTAGAATGTGGTAAAGCGTTTACTAGTTCCACAACCCTTACTAAACATAGGAGAATTCATACTGGAGAGAAACCCTACACATGTGAAGAATGTGGCAAAGCCTTTAGACAGTCAGCAATCCTTTATGTACATAGGAGAATTCATACTGGAGAGAAACCCTACACATGTGGAGAATGTGGCAAAACCTTTAGACAGTCTGCAAATCTTTATGCGCATAAGAAAATTCATACTGGAGAGAAACCCTACACGTGTGGAGACTGTGGCAAAACCTTTAGACAGTCTGCAAATCTTTATGCACATAAGAAAATTCATACT [...]
+chr4-04	EST_Human	nucleotide_match	337570	337697	120.000000	+	.	Target=BQ069369.1 161 288 +;percentID=96.9;sequence=TTGCTTCAGCCTGAGCTCGGTTAGGGCCTCACTTGCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAGAAGATATGAGAA [...]
+chr4-04	EST_Human	nucleotide_match	263655	263758	76.000000	-	.	Target=CF140195.1 10 113 +;percentID=86.5
+chr4-04	EST_Human	nucleotide_match	263655	263943	214.000000	-	.	Target=CX759702.1 380 667 +;percentID=87.2;Gap=M170 D1 M118 
+chr4-04	EST_Human	nucleotide_match	263655	263943	214.000000	-	.	Target=CX760338.1 341 628 +;percentID=87.2;Gap=M170 D1 M118 
+chr4-04	EST_Human	nucleotide_match	263655	263955	226.000000	-	.	Target=CN430381.1 81 380 +;percentID=87.7;Gap=M182 D1 M118 
+chr4-04	EST_Human	nucleotide_match	263655	263955	226.000000	-	.	Target=DB116515.1 80 379 +;percentID=87.7;Gap=M182 D1 M118 
+chr4-04	EST_Human	nucleotide_match	263655	263957	228.000000	-	.	Target=CB999730.1 3 304 +;percentID=87.8;Gap=M184 D1 M118 
+chr4-04	EST_Human	nucleotide_match	263657	263955	184.000000	-	.	Target=BG569463.1 103 398 +;percentID=81.7;Gap=M182 D1 M10 I1 M1 I1 M72 D2 M23 D2 M6 
+chr4-04	EST_Human	nucleotide_match	264242	264314	43.000000	-	.	Target=CN430381.1 3 75 +;percentID=80.8
+chr4-04	EST_Human	nucleotide_match	264242	264315	44.000000	-	.	Target=DB116515.1 1 74 +;percentID=81
+chr4-04	EST_Human	nucleotide_match	264242	264328	57.000000	-	.	Target=BG569463.1 11 97 +;percentID=83.7
+chr4-04	EST_Human	nucleotide_match	264558	264895	182.000000	-	.	Target=CX760338.1 1 340 +;percentID=77.1;Gap=M147 I2 M191 
+chr4-04	EST_Human	nucleotide_match	264558	264907	183.000000	-	.	Target=CX759702.1 29 379 +;percentID=76.4;Gap=M7 D1 M151 I2 M191 
+chr4-04	EST_Human	nucleotide_match	265157	265518	219.000000	-	.	Target=DA239049.1 219 580 +;percentID=80.4;Gap=M334 I1 M7 D1 M20 ;sequence=AAATATTTCAATGTAATGCACGTGTCAAAGTTTTTAGTAAATTTGCAAATTCAAACAAAGATAAGACAAGACATACTGGAGAGAAACACTTTAAATGTAACGAATGTGGCAAGTCATTTCAGAAGTTCTCAGACCTAACTCAACATAAAGGAATTCATGCNTGGAGAGAAACCCTACACTTGTGAAGAACGTGGCAAAGACTTTGGATGGTACACAGACCTGAATCAACACAAGAAAATTCATACTGGAGAGAAACCTTACAAATGTGAAGAATGTGGCAAAGCCTTTAATAGGTCAACAAACCTTACTGCACATAAGAGAATTCACAACAGAGAGAAAGCTTACACAGGTGA [...]
+chr4-04	EST_Human	nucleotide_match	337570	337700	123.000000	+	.	Target=AU138611.1 149 279 +;percentID=96.9;sequence=GAGCTCGGTTAGGGCCTCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGGTGTCTGGAAATGAAGTATGGAAATGAAATCATGAATAAAGACCCAGTTTTCAGAATCTCTCCACGAAGTAGAGGAACTCATACCAATCCAGAAGAGCCT [...]
+chr4-04	EST_Human	nucleotide_match	265281	265381	42.000000	-	.	Target=BQ069369.1 682 793 +;percentID=74.3;Gap=M4 D1 M14 I1 M12 I1 M4 I1 M9 I1 M7 I1 M3 I1 M9 I1 M2 I1 M8 I1 M8 I1 M10 I2 M10 
+chr4-04	EST_Human	nucleotide_match	265281	265379	85.000000	-	.	Target=DB215628.1 463 561 +;percentID=92.9;sequence=ACTCACTGTAGCGCGTGGCTCCGTAGGCCACACCGAGGAACAGGGCGGAGTAGCGGCCGAGCTGCGAAAGAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTTGAGAAGATATGAGAAATGTGGGCATGATAATTTACAATTAAGGAAAGGCTGTAAAAGTATGAACGTGTGTAAAGTGCAGAAGGGAGTTTATAATGGAATTAATAAATGCTTGTCAAATACTCAGAGCAAAATATTTCAATGTAATGCACGTGTCAAAGTTTTTAGTAAATTTGCAAATTCAAACAAAGATAAGACAAGACATACTGGAGAGAAACACTTTAAATGTAACGA [...]
+chr4-04	EST_Human	nucleotide_match	265283	265379	83.000000	-	.	Target=DA803972.1 462 558 +;percentID=92.8;sequence=AGCGGGCGGTGTTCCCGGCTCCGTGGGGCCGTCTTCCCGGCGAGTCCGCGACGGTCGCCGCCCACGGCGAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACNTGAGAAGATATGAGAAATGTGGGCATGATAATTTACAATTAAGGAAAGGCTGTAAAAGTATGAACGTGTGTAAAGTGCAGAAGGGAGTTTATAATGGAATTAATAAATGCTTGTCAAATACTCAGAGCAAAATATTTCAATGTAATGCACGTGTCAAAGTTTTTAGTAAATTTGCAAATTCAAACAAAGATAAGACAAGACATACTGGAGAGAAACACTTTAAATGTAACGAA [...]
+chr4-04	EST_Human	nucleotide_match	265502	265668	111.000000	-	.	Target=DA730641.1 703 865 +;percentID=83.9;Gap=M27 D2 M70 I1 M3 D1 M22 D1 M33 D1 M7 ;sequence=AAAATCTGGCGCGGCTTTTGCCTTTTGCGCCAGCGTGAGCTCGGTTAGGGTCTCCACGGCCGTGCTTTCACCCCTCAGGGAGGCGTCGGTGATTCGGTCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTCGTAGCTGAGACTCCGCTACACCCCTGAAGTGGGGAAATGGTGTGTGTTCTCATTTTACCCAAGATCTTTGGCCAGTGCAGGGCATAGAAGATTCATTCCACAAACTTATACTGAGAAGATATGAGAAATGTGGACAGAAGAATTTACAATTAAGGAAAGGCTCTAAAAGTGTGAATAAGTGTAAGGT [...]
+chr4-04	EST_Human	nucleotide_match	265556	265695	118.000000	-	.	Target=CN421855.1 561 700 +;percentID=92.1;sequence=GCGAGGGCTTGGTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGGAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGCTATATGTTCTCCTTTCAGCCAAGACCTTTCACCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAAAAGATACGAGAAATGTGGACATGAGAATTTACAATTAAGAAAAGGCTGTAAACGTGTGAATGAGTGTAAGGTGCAGAAAGGAGTTAATAATGGAGTTTACCAGTGCTTGTCAACTACCCAGAGCAAAATATTTCAATGTAATACAT [...]
+chr4-04	EST_Human	nucleotide_match	337570	337695	120.000000	+	.	Target=BU178885.1 143 268 +;percentID=97.6;sequence=GGTTAGGGCCTCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGGCCGGGCATGGTGGCTCACGCCTGTAATCCCAGCACTTCGGGAGGCTGAGGCGGGTGGATCACCTGAGGTCAGGAGTTCGGGACCGGCCTGGCCGGCATGGAGAAA [...]
+chr4-04	EST_Human	nucleotide_match	265589	265668	51.000000	-	.	Target=BI463333.1 675 752 +;percentID=84;Gap=M15 I1 M12 D2 M19 D1 M31 ;sequence=AGCGGGGCTGAGCTCGGTTAGGGCCTCACCGACCTGCTTCCACCCCTCAGGGAGGCCTCAGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTCGTAGCTAAGACTCTACGACATCCCTGAAGCCGGGAAATGGTGTGTGTTCTCATTTTACCCAAGATCTTTGGCCAGTGCAGGGCATAGAAGATTCATTCCACAAACTTATACTGAGAAGATATGAGAAATGTGGACAGAAGAATTTACAATTAAGGAAAGGCTCTAAAAGTGTGAATAAGTGTAAGGTGCAGAAAGGAGGTTATAATGGACTTTACCAATGCTTATCAACT [...]
+chr4-04	EST_Human	nucleotide_match	265619	265695	69.000000	-	.	Target=DA666860.1 482 558 +;percentID=94.8;sequence=ACCTGGTCACCTGTCTGGAGCAAATAAAAGAGCCCTGCAATTTGAAGATACATGAGACAGCAGCCAAACCCCCAGCTATATGTTCTCCTTTCAGCCAAGACCTTTCACCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAAAAGATACGAGAAATGTGGACATGAGAATTTACAATTAAGAAAAGGCTGTAAACGTGTGAATGAGTGTAAGGTGCAGAAAGGAGTTAATAATGGAGTTTACCAGTGCTTGTCAACTACCCAGAGCAAAATATTTCAATGTAATACATGTGTTAAAGTTTTTAGTAAATTTTCAAATTCAAACAAACATAAGATAAGACATACTGGAGAGAAACCCTTTAAATGTACA [...]
+chr4-04	EST_Human	nucleotide_match	265717	265885	111.000000	-	.	Target=BG718573.1 564 730 +;percentID=84.2;Gap=M45 I1 M30 D2 M68 I1 M8 D1 M11 D1 M3 ;sequence=AGCGGGCTTTTGCGTCAGGCTTCTGCCTGAGCTCGGTTAGGGCCTCACCGACCTGCTTCCACCCCTCAGGAAGGCCTCAGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTCGTAGCTAAGACTCTACGACATCCCTGAAGCCGGGAAATGGTGTGTGTTCTCATTTTACCCAAGATCTTTGGCCAGTGCAGGGCATAGAAGATTCATTCCACAAACTTATACTGAGAAGATATGAGAAATGTGGACAGAAGAATTTACAATTAAGGAAAGGCTCTAAAAGTGTGAATAAGTGTAAGGTGCAGAAAGG [...]
+chr4-04	EST_Human	nucleotide_match	265920	266419	289.000000	-	.	Target=DA730641.1 187 701 +;percentID=80.8;Gap=M123 I6 M2 I3 M2 I1 M3 I1 M1 I1 M114 D1 M3 D2 M1 D3 M20 I1 M5 I3 M1 I2 M30 I1 M6 D1 M45 I4 M81 D2 M53 I1 M1 
+chr4-04	EST_Human	nucleotide_match	265920	266419	291.000000	-	.	Target=BI463333.1 159 673 +;percentID=81;Gap=M123 I6 M2 I3 M2 I1 M3 I1 M1 I1 M114 D1 M3 D2 M1 D3 M20 I1 M5 I3 M1 I2 M30 I1 M6 D1 M45 I4 M81 D2 M53 I1 M1 
+chr4-04	EST_Human	nucleotide_match	265922	266419	286.000000	-	.	Target=CN278785.1 85 596 +;percentID=80.7;Gap=M123 I6 M2 I3 M2 I1 M3 I1 M1 I1 M114 D1 M3 D2 M1 D3 M20 I1 M5 I3 M1 I2 M30 I1 M6 D1 M45 I4 M36 D1 M41 D1 M32 I1 M9 D1 M14 ;sequence=GCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTCGTAGCTAAGACTCTACGACATCCCTGAAGCCGGGAAATGGTGTGTGTTCTCATTTTACCCAAGATCTTTGGCCAGTGCAGGGCATAGAAGATTCATTCCACAAACTTATACTGAGAAGATATGAGAAATGTGGACAGAAGAATTTACAATTAAGGAAAGGCTCTAAAAGTGTGAATAAGTGTAAGGTGCAGAAAGGAGGTTATAA [...]
+chr4-04	EST_Human	nucleotide_match	337570	337740	121.000000	+	.	Target=BG778551.1 157 323 +;percentID=86.5;Gap=M136 D1 M4 D1 M6 D1 M15 D1 M6 ;sequence=GCACTTCAGCCAGAGCGCGGGGTTAGGGGTTCATTGCCTTGTGTCCTCTGCTCCGGGAGACTTCGGTGATTCTGCCACTCACTCCGTCGCTCTGTGACCTGCTGGCATTGAATGATTTATAGCTAAGACTCCAGGACACCCCTGAAGCCGAGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTAGACCCTGCCCAACAGAATTTATATAGAGATGTGATGTTGGAGAACTACAGAAACCTCGTCTCCCTGGCTGTGTATTCTTATTACAACCAAGGCATTTTACCAGAGCAAGGCATACAAGATTCAT [...]
+chr4-04	EST_Human	nucleotide_match	265956	266419	297.000000	-	.	Target=CD652116.1 249 725 +;percentID=83.2;Gap=M130 I3 M3 I1 M1 I1 M5 I2 M1 I3 M1 I1 M4 I1 M139 I1 M1 I1 M2 I4 M124 D1 M9 D1 M17 D1 M4 D1 M7 D1 M11 ;sequence=AGAGGTAATCCGGGAGGCCTCGGCGCTTTAGAAAGAGCCTCAGCCTCCATCGCTCCGCTAACCTGCGGGTATTGGATGATTCGGAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCA [...]
+chr4-04	EST_Human	nucleotide_match	265975	266303	252.000000	+	.	Target=BE172609.1 3 336 +;percentID=88.7;Gap=M111 I1 M4 D1 M21 I1 M27 I1 M150 I1 M1 I1 M2 I1 M12 ;sequence=GAGTAAAAGGTTTCTCTCCAGTATGAATTCTCTTATGTTCATTAAATATTAAAGACCATTTAAAGGCTTTGCCACATTCTTCACAAGTGTAGGGTTTCTCTCCAGCATGAATTACCTTATGTTGAGTTAGGTGTGAAAACCTTCTGAAATGATTTGCCACATTCTTTAAAAGTGTTTCTCTCCAGTATGTCTTGTCTTACGTTTGTTTGAATTTGAAAATTTACTAACAACTTTGACACTTGCTTTACACTGAAGTATTTGGCTCTGGGTAGTTGACAAGCATTCATTAAATTCATTATAACCTCCTTTCTGCAACTTACA [...]
+chr4-04	EST_Human	nucleotide_match	337571	337697	127.000000	+	.	Target=CD701489.1 216 342 +;percentID=100;sequence=CGATAAGCTGATATCGAATCGTATCGGCCATTATGGCCGGGGTCTTTGCGTCTGGCTACTACCAGACCGCGGGTTAGGGGCTTCATCTCTCTGCGTCCTCAGTTCTGGGAGGCCTTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTGGTAGCTAAGACTCCCGAATACTTCAGAAGTGGGGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGACCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGCTATGTGTTCTCATTTCACCCAAGACCATTGGCCA [...]
+chr4-04	EST_Human	nucleotide_match	265995	266419	250.000000	-	.	Target=DA571532.1 386 820 +;percentID=80.2;Gap=M107 I1 M7 I2 M7 D1 M6 I2 M2 I1 M1 I1 M24 I1 M5 D1 M123 I1 M1 I1 M2 I4 M28 D1 M87 D1 M21 
+chr4-04	EST_Human	nucleotide_match	265999	266419	289.000000	-	.	Target=CD654571.1 372 794 +;percentID=85.7;Gap=M130 I3 M3 I1 M1 I1 M3 I7 M188 I1 M4 D1 M25 D1 M5 D1 M13 D1 M3 D1 M1 D1 M6 D1 M7 D1 M1 D1 M4 D1 M1 D1 M3 I1 M3 D1 M8 ;sequence=AGAGGTAATCCGGCTTCATCTCTCTGCGTTCTCAGTTGTGGGAGGCCTTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTGGTAGCTAAGACTCCCGAATACTTCAGAAGTGGGGAAATGGAACTCTTAACGTTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGACCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACT [...]
+chr4-04	EST_Human	nucleotide_match	266020	266230	155.000000	-	.	Target=DA239049.1 1 218 +;percentID=87.2;Gap=M95 I1 M1 I1 M2 I4 M56 I1 M57 
+chr4-04	EST_Human	nucleotide_match	266027	266420	253.000000	-	.	Target=DB115439.1 143 551 +;percentID=83.3;Gap=M129 I6 M1 I2 M1 I1 M1 I3 M153 I1 M1 I1 M1 I1 M1 I3 M22 D1 M4 D2 M77 ;sequence=GTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGCTATATGTTCTCCTTTCAGCCAAGACCTTTCACCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAAAAGATACGAGAAATGTGGACATGAGAATTTACAATTAAGAAAAGGCTGTAAACGTGTGAATGAGTGTAAGGTGCAGAAAGGAG [...]
+chr4-04	EST_Human	nucleotide_match	337570	337740	121.000000	+	.	Target=EL735691.1 3 169 +;percentID=86.5;Gap=M136 D1 M4 D1 M6 D1 M15 D1 M6 ;sequence=ATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTAGACCCTGCCCAACAGAATTTATATAGAGATGTGATGTTGGAGAACTACAGAAACCTCGTCTCCCTGGCTGTGTATTCTTATTACAACCAAGGCATTTTACCAGAGCAAGGCATACAAGATTCATTCAAAAAAGCAACACTGGGAAGATATGGGAGCTGTGGCCTTGAAAATATATGCTTATGGAAAAACTGGGAAAGTATAGGTGAAGGTGAAGGACAAAAGGAATGTTATAATCTATGTAGCCAATATTTGACAACTAGTCATAACAAACATTTAACTG [...]
+chr4-04	EST_Human	nucleotide_match	266028	266502	188.000000	-	.	Target=BG026620.1 271 741 +;percentID=73.3;Gap=M19 D1 M21 D1 M3 I1 M1 I1 M7 D1 M12 I1 M15 I1 M32 D1 M76 I1 M7 I2 M7 D1 M6 I2 M2 I1 M1 I1 M24 I1 M5 D1 M67 D1 M8 D1 M15 D1 M21 D1 M9 I1 M4 I1 M3 I2 M3 D1 M6 I1 M4 D1 M2 D1 M4 I1 M11 D1 M2 D1 M4 D1 M7 D1 M4 D1 M12 D1 M3 I1 M4 D1 M5 D1 M4 D2 M12 ;sequence=CACACCTCAGGGAGGCTCGGTGATTTTGCCAGAGCCTCAGGCCTCCATCGCTCTGTAACCTGCGGGTATGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAA [...]
+chr4-04	EST_Human	nucleotide_match	266029	266422	251.000000	-	.	Target=DA666860.1 73 481 +;percentID=83;Gap=M131 I6 M1 I2 M1 I1 M1 I3 M153 I1 M1 I1 M1 I1 M1 I3 M22 D1 M4 D2 M75 
+chr4-04	EST_Human	nucleotide_match	266029	266420	251.000000	-	.	Target=CN421855.1 154 560 +;percentID=83.2;Gap=M129 I6 M1 I2 M1 I1 M1 I3 M153 I1 M1 I1 M1 I1 M1 I3 M22 D1 M4 D2 M75 
+chr4-04	EST_Human	nucleotide_match	266032	266420	252.000000	-	.	Target=DC306304.1 171 574 +;percentID=83.5;Gap=M129 I6 M1 I2 M1 I1 M1 I3 M153 I1 M1 I1 M1 I1 M1 I3 M22 D1 M4 D2 M72 ;sequence=GTTTTCCTCTGGCTCCTGCGAGGGCTTGGTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGCTATATGTTCTCCTTTCAGCCAAGACCTTTCACCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAAAAGATACGAGAAATGTGGACATGAGAATTTACAATTAAGAAAAGGCTGTAAACGT [...]
+chr4-04	EST_Human	nucleotide_match	337570	337697	120.000000	+	.	Target=BG026620.1 117 244 +;percentID=96.9
+chr4-04	EST_Human	nucleotide_match	266033	266420	251.000000	-	.	Target=DC315881.1 171 574 +;percentID=83.5;Gap=M72 I1 M57 I6 M1 I2 M1 I1 M1 I3 M153 I1 M1 I1 M1 I1 M1 I3 M22 D1 M4 D2 M71 ;sequence=GTTTTCCTCTGGCTCCTGCGAGGGCTTGGTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGCTATATGTTCTCCTTTCAGCCAAGACCTTTCACCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTTGAAAAGATACGAGAAATGTGGACATGAGAATTTACAATTAAGAAAAGGCTG [...]
+chr4-04	EST_Human	nucleotide_match	337570	337700	123.000000	+	.	Target=DN989940.1 137 267 +;percentID=96.9;sequence=CACGAGGCTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGGTGTCTGGAAATGAAGTATGGAAATGAAATCATGAATAAAGACCCAGTTTTCAGAATCTCTCCACGAAGTAGAGGAACTCATACCAATCCAGAAGAGCCTGAAGAAGATGTT [...]
+chr4-04	EST_Human	nucleotide_match	266048	266419	210.000000	-	.	Target=BG718573.1 178 563 +;percentID=80.5;Gap=M123 I6 M2 I3 M2 I1 M3 I1 M1 I1 M114 D1 M3 D2 M1 D3 M20 I1 M5 I3 M1 I2 M30 I1 M6 D1 M46 I3 M3 D1 M4 
+chr4-04	EST_Human	nucleotide_match	266049	266419	255.000000	-	.	Target=BQ069369.1 289 681 +;percentID=85.3;Gap=M130 I3 M3 I1 M1 I1 M3 I7 M131 I1 M16 I1 M1 I1 M2 I4 M35 I1 M7 I1 M17 I1 M25 
+chr4-04	EST_Human	nucleotide_match	266049	266421	274.000000	-	.	Target=DA803972.1 70 461 +;percentID=87.3;Gap=M73 I1 M59 I3 M3 I1 M1 I1 M5 I2 M1 I3 M1 I1 M4 I1 M139 I1 M1 I1 M2 I4 M84 
+chr4-04	EST_Human	nucleotide_match	266049	266421	275.000000	-	.	Target=DB215628.1 71 462 +;percentID=87.5;Gap=M73 I1 M59 I3 M3 I1 M1 I1 M5 I2 M1 I3 M1 I1 M4 I1 M139 I1 M1 I1 M2 I4 M84 
+chr4-04	EST_Human	nucleotide_match	266054	266370	198.000000	+	.	Target=BF734985.1 3 336 +;percentID=82.8;Gap=M5 I1 M8 D1 M12 I1 M19 D1 M25 D1 M7 I4 M2 I1 M33 I1 M107 I1 M4 I1 M1 I3 M1 I2 M5 I1 M1 I1 M3 I3 M81 ;sequence=TACACCTGGTGTAGGGTTCTCTCCAGCACTGAGTTCCTTTTTGTTGAGTAGGTCTGCGAGCGTCTGATATGACTGCCACATTCGTTACTTTAAAGTGTTTCTCTCCAGTATGTCTTGTCCTTATCTTTGTTTGAATTTGCTAATTTACTAAAAACTTTGACACGTGCATTACATTGAAATATTTTGCTCTGAGTATTTGACAAGCATTTATTAATTCCATTATAAACTCCCTTCTGCACTTTACACACGTTCATACTTTTACAGCCTTTCCTT [...]
+chr4-04	EST_Human	nucleotide_match	337571	337697	127.000000	+	.	Target=BM800016.1 160 286 +;percentID=100;sequence=TACTACCAGACCGCGGGTTAGGGGCTTCATCTCTCTGCGTTCTCAGTTGTGGGAGGCCTTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTGGTAGCTAAGACTCCCGAATACTTCAGAAGTGGGGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGACCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTGTTGCTATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAAGAAAAGAGCCCTACAATGTGAAGATACATAAGATCGTAGCCAGACC [...]
+chr4-04	EST_Human	nucleotide_match	266059	266395	235.000000	+	.	Target=BF735517.1 1 351 +;percentID=86.2;Gap=M8 D1 M57 D1 M7 I4 M2 I1 M1 I1 M26 D1 M3 D1 M108 I1 M4 I1 M1 I3 M1 I2 M5 I1 M1 I1 M3 I3 M106 ;sequence=GTGTAGGGTTCTCTCCAGCATGAATTCCTTTATGTTGAGTTAGGTCTGAGAACTTCTGAAATGACTGCCACATTCGTTACATTTAAAGTGTTTCTCTCCAGTATGTCTGTCTATCTTTGTTTGAATTTGCAAATTTACTAAAAACTTTGACACGTGCATTACATTGAAATATTTTGCTCTGAGTATTTGACAAGCATTTATTAATTCCATTATAAACTCCCTTCTGCACTTTACACACGTTCATACTTTTACAGCCTTTCCTTAATTGTAAATTATCATG [...]
+chr4-04	EST_Human	nucleotide_match	337570	337740	121.000000	+	.	Target=DR002780.1 100 266 +;percentID=86.5;Gap=M136 D1 M4 D1 M6 D1 M15 D1 M6 ;sequence=CACGAGGGTGATTCTGCCACTCACTCCGTCGCTCTGTGACCTGCTGGCATTAGAATGATTTATAGCTAAGACTCCAGGACACCCCTGAAGCCGAGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTAGACCCTGCCCAACAGAATTTATATAGAGATGTGATGTTGGAGAACTACAGAAACCTCGTCTCCCTGGCTGTGTATTCTTATTACAACCAAGGCATTTTACCAGAGCAAGGCATACAAGATTCATTCAAAAAAGCAACACTGGGAAGATATGGGAGCTGTGGCCTTGAAAATATATGCTTAT [...]
+chr4-04	EST_Human	nucleotide_match	266059	266445	243.000000	+	.	Target=CV312743.1 1 411 +;percentID=82.8;Gap=M14 I1 M30 I1 M1 I1 M3 I1 M2 I1 M4 I1 M1 I1 M4 I1 M7 D1 M3 I1 M1 I2 M15 D1 M129 I1 M4 I1 M1 I3 M1 I2 M5 I1 M1 I1 M3 I3 M140 I1 M5 I1 M2 I1 M9 ;sequence=GTGTAGGGTTCATCATCCAGCATGACTTCCTTTATGTTGAGGTAGAGATCTCGACGAGCGTGTCTGTCAATGACTGCACATACGTTAATTAAAGTGTACTCTCCAGTATGTCTTGTCTTATCTAAGTTTGAATTTGCAAATTTACTAAAAACTTTGACACGTGCATTACATTGCAATATTTTGCTCTGAGTATTTGACAAGCATTTATTAATTCCATTATCACCTCCCTTC [...]
+chr4-04	EST_Human	nucleotide_match	337571	337697	127.000000	+	.	Target=BP200889.1 175 301 +;percentID=100;sequence=GTCTTTGCGTCTGGCTACTACCAGACCGCGGGTTAGGGGCTTCATCTCTCTGCGTTCTCAGTTGTGGGAGGCCTTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTGGTAGCTAAGACTCCCGAATACTTCAGAAGTGGGGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGACCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTGTTGCTATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAAGAAAAGAGCCCTACAATGTGAAGATACATAA [...]
+chr4-04	EST_Human	nucleotide_match	266060	266420	230.000000	-	.	Target=DC365868.1 171 546 +;percentID=83.1;Gap=M129 I6 M1 I2 M1 I1 M1 I3 M153 I1 M1 I1 M1 I1 M1 I3 M22 D1 M4 D2 M44 ;sequence=GTTTTCCTCTGGCTCCTGCGAGGGCTTGGTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGCTATATGTTCTCCTTTCAGCCAAGACCTTTCACCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAAAAGATACGAGAAATGTGGACATGAGAATTTACAATTAAGAAAAGGCTGTAAACGT [...]
+chr4-04	EST_Human	nucleotide_match	337571	337697	127.000000	+	.	Target=DA803616.1 175 301 +;percentID=100;sequence=GTCTTTGCGTCTGGCTACTACCAGACCGCGGGTTAGGGGCTTCATCTCTCTGCGTTCTCAGTTGTGGGAGGCCTTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTGGTAGCTAAGACTCCCGAATACTTCAGAAGTGGGGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGACCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTGTTGCTATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAAGAAAAGAGCCCTACAATGTGAAGATACATAA [...]
+chr4-04	EST_Human	nucleotide_match	266065	266419	153.000000	-	.	Target=BI561969.1 400 799 +;percentID=74.8;Gap=M89 I1 M8 I1 M17 I1 M6 I1 M3 I1 M7 I1 M1 I2 M2 I1 M1 I2 M3 I1 M3 I4 M1 I1 M2 I2 M7 I1 M1 I1 M34 I1 M6 I1 M1 I1 M9 I1 M22 I1 M30 I1 M5 I1 M11 I1 M13 I1 M1 I6 M4 I1 M32 I1 M4 I1 M4 I1 M6 I1 M6 I1 M4 I1 M5 I1 M1 I1 M6 ;sequence=AGCGGGTTTTCCTCTGGCTCCTGCGAGGGCTTGGTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGA [...]
+chr4-04	EST_Human	nucleotide_match	337571	337697	97.000000	+	.	Target=DB084699.1 241 367 +;percentID=88.2
+chr4-04	EST_Human	nucleotide_match	266067	266419	259.000000	-	.	Target=DA309597.1 227 597 +;percentID=87.3;Gap=M130 I3 M3 I1 M1 I1 M5 I2 M1 I3 M1 I1 M4 I1 M139 I1 M1 I1 M2 I4 M66 ;sequence=AGCGGGGCGTCACCTCGGACATACGAACAGCGGGCGGTGTTCCCGGCTCCGTGGGGCCGTCTTCCCGGCGAGTCCGCGACGGTCGCCGCCCACGGCGAGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAGA [...]
+chr4-04	EST_Human	nucleotide_match	266069	266419	266.000000	-	.	Target=DA799182.1 175 537 +;percentID=88.5;Gap=M130 I3 M3 I1 M1 I1 M3 I7 M192 D1 M4 I1 M17 ;sequence=GTCTTTGCGTCTGGCTACTACCAGACCGCGGGTTAGGGGCTTCATCTCTCTGCGTCCTCAGTTCTGGGAGGCATTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTGGTATCTAAGACTCCCGAATACTTCAGAAGTGGGGAAATGCTATGTGTTCTCATTTCACCCAAGACCATTGGCCAGTGCAGGGCATAGAAGATTCATTCCACAAACTTATACTGAGATGATATGAGAAATGTGGACATGATAATTTACAATTAAGAAAAGGCTGTAAAAGTTTGAATGAGTGTAAGTTGCAGA [...]
+chr4-04	EST_Human	nucleotide_match	337571	337697	127.000000	+	.	Target=BX485984.1 163 289 +;percentID=100;sequence=GGCTACTACCAGACCGCGGGTTAGGGGCTTCATCTCTCTGCGTCCTCAGTTCTGGGAGGCATTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTGGTATCTAAGACTCCCGAATACTTCAGAAGTGGGGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGACCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTGTTGCTATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAAGAAAAGAGCCCTACAATGTGAAGATACATAAGATCGTAGCCAG [...]
+chr4-04	EST_Human	nucleotide_match	266081	266419	255.000000	-	.	Target=BM800016.1 383 731 +;percentID=88.3;Gap=M130 I3 M3 I1 M1 I1 M3 I7 M192 D1 M3 D1 M5 
+chr4-04	EST_Human	nucleotide_match	337571	337697	127.000000	+	.	Target=DA460146.1 210 336 +;percentID=100;sequence=AGAGAGGAGGCGGTGGCTTCCGGGATGTGGCGCGGGTCTTTGCGTCTGGCTACTACCAGACCGCGGGTTAGGGGCTTCATCTCTCTGCGTTCTCAGTTGTGGGAGGCCTTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTGGTAGCTAAGACTCCCGAATACTTCAGAAGTGGGGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGACCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTGTTGCTATCTCTAACCCAGACCTGGTCACCTGTCTGGAG [...]
+chr4-04	EST_Human	nucleotide_match	266081	266419	339.000000	-	.	Target=DC397567.1 238 576 +;percentID=100;sequence=GAAGTGGGGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGATCTCCCTGGGTGTTGCTATCTCTAACCCAGACCTGGTCATCTATCTGGAGCAAAGAAAGGAGCCCTACAAAGTGAAGATACATGAGACAGTAGCCAAACACCCAGCTGTGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCGTTCCACAAACTTATATTAAGAAGATATGAGAAATGTGGACATGAGAATTTAGAATTAAGAAAAAGCTGTAAAAGGAAGGTGCAG [...]
+chr4-04	EST_Human	nucleotide_match	337573	337697	97.000000	+	.	Target=DA628344.1 48 172 +;percentID=88.8;sequence=AGACCCGGAAGTGGATGGCGTGGAGGTATGGCGCAACTGCGGCGCGGACACTTGACATTCAGGGACGTGGCCATAGAATTCTCTCAGGAGGAGTGGAAATGCCTGGACCCTGTGCAGAAGGCTTTATACAGGGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGAATCTGTCTTCCTGACCTGAGTATTATCTCCATGATGAAGCAAAGGACAGAGCCCTGGACTGTGGAGAATGAAATGAAAGTAGCAAAAAATCCAGATAGGTGGGAAGGTATCAAAGATATCAACACAGGGAGGAGCTATGCGGTGAGAAGCAAAGCAGGAAACAAGCCTATTACAAATCAACTTGGATTAACCTTTCAGTTACCT [...]
+chr4-04	EST_Human	nucleotide_match	266088	266419	238.000000	-	.	Target=CN399123.1 237 586 +;percentID=86.6;Gap=M130 I3 M3 I1 M1 I1 M5 I2 M1 I3 M1 I1 M4 I1 M139 I1 M1 I1 M2 I4 M45 
+chr4-04	EST_Human	nucleotide_match	266104	266419	224.000000	-	.	Target=DA806351.1 238 571 +;percentID=86.2;Gap=M130 I3 M3 I1 M1 I1 M5 I2 M1 I3 M1 I1 M4 I1 M139 I1 M1 I1 M2 I4 M29 ;sequence=AGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCATTCCACAAAC [...]
+chr4-04	EST_Human	nucleotide_match	266136	266419	190.000000	-	.	Target=CV024709.1 227 522 +;percentID=84.1;Gap=M128 I6 M1 I2 M1 I1 M1 I3 M153 ;sequence=ATGGAACTCGTAACATTCAGGGATGTGGCCATAGAATTCTCCCCTGAAGAGTGGAAATGTCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTTTTGTGATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAATAAAAGAGCCCTGCAATTTGAAGATACATGAGACAGCAGCCAAACCCCCAGCTATATGTTCTCCTTTCAGCCAAGACCTTTCACCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAAAAGATACGAGAAATGTGGACATGAGAATTTACAATTAA [...]
+chr4-04	EST_Human	nucleotide_match	337571	337660	90.000000	+	.	Target=BX503083.1 183 272 +;percentID=100;sequence=GGGGGGAGGAGGGTGTCCTCAGCAACGGTGACCCGCACCAAAGCCCTCCTCACCGGGGTCACCGCCACAGCCGGTGCGAGGCCCGCAGGGCGCTGGGGATGCGCGACCGACTCCCGTGAACCTGCTCCTCGCGCGTCAGGGAGAGCTGTGCACCCGACTAGGCTCTGTGAGGACGGACTGAGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGACCAGCAGAATTTGTATAGAGAT
+chr4-04	EST_Human	nucleotide_match	266136	266419	202.000000	-	.	Target=DB229909.1 290 585 +;percentID=86.1;Gap=M130 I3 M3 I1 M1 I1 M5 I2 M1 I3 M1 I1 M4 I1 M139 ;sequence=GTTGCTTCAGCCTGAGCTCGGTTAGGGCCTCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGC [...]
+chr4-04	EST_Human	nucleotide_match	337571	337697	115.000000	+	.	Target=AL700660.1 176 302 +;percentID=95.3;sequence=GGTCTTTGCGTCTGGCTACTACCAGACCGCGGGTTAGGGGCTTCATCTCTCTGCGTTCTCAGTTGTGGGAGGCCTTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGCTATTGGATGATTGGTAGCTAACACTCCCGGATACTTCACAAGTGAGGAAATGGAATTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGTACCCTGACCAGCAGAATTGGTATCAACATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTGTTGCTATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAAGAAAAGAGCCCTACAATGTGAAGATACAT [...]
+chr4-04	EST_Human	nucleotide_match	266136	266419	204.000000	-	.	Target=DA335223.1 250 545 +;percentID=86.5;Gap=M130 I3 M3 I1 M1 I1 M5 I2 M1 I3 M1 I1 M4 I1 M139 ;sequence=ATACTCTGGTTTCTCTTCAGAACAGCGGGGCGTCACCTCGGACATACGAACAGCGGGCGGTGTTCCCGGCTCCGTGGGGCCGTCTTCCCGGCGAGTCCGCGACGGTCGCCGCCCACGGCGAGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACT [...]
+chr4-04	EST_Human	nucleotide_match	337571	337697	127.000000	+	.	Target=DA385292.1 182 308 +;percentID=100;sequence=GGCGCGGGTCTTTGCGTCTGGCTACTACCAGACCGCGGGTTAGGGGCTTCATCTCTCTGCGTTCTCAGTTGTGGGAGGCCTTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTGGTAGCTAAGACTCCCGAATACTTCAGAAGTGGGGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGACCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTGTTGCTATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAAGAAAAGAGCCCTACAATGTGAAGA [...]
+chr4-04	EST_Human	nucleotide_match	266142	266393	135.000000	+	.	Target=CV312697.1 6 270 +;percentID=79.3;Gap=M3 D1 M9 I1 M12 I1 M61 D1 M13 D1 M3 I1 M5 I1 M2 D1 M1 D1 M8 I1 M11 I1 M4 I1 M1 I3 M1 I2 M5 I1 M1 I1 M3 I3 M2 I1 M102 ;sequence=TCCACGTGTACACTCCACGTATGTCTTGTCTCTATCAAAGAACGAATTTGCAAATTTACTAAAAACATCGACACGTGCATTACATTGAAATATTTGCTCTGAGTATAGAACAAGACATAATAAATTCCATTATAAACTCCCTTCTGCACTTTACACACGTTCATACTATTTACAGCCTTTCCTTAATTGTAAATTATCATGCCCACATTTCTCATATCTTCTCAGTATAAGTTTGTGGAATGAATCTTCTATCCCC [...]
+chr4-04	EST_Human	nucleotide_match	337571	337697	127.000000	+	.	Target=DA757889.1 173 299 +;percentID=100;sequence=CTTTGCGTCTGGCTACTACCAGACCGCGGGTTAGGGGCTTCATCTCTCTGCGTCCTCAGTTCTGGGAGGCCTTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTGGTAGCTAAGACTCCCGAATACTTCAGAAGTGGGGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGACCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTGTTGCTATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAAGAAAAGAGCCCTACAATGTGAAGATACATAAGA [...]
+chr4-04	EST_Human	nucleotide_match	266142	266419	196.000000	-	.	Target=BP248393.1 293 582 +;percentID=85.9;Gap=M130 I3 M3 I1 M1 I1 M5 I2 M1 I3 M1 I1 M4 I1 M133 ;sequence=AAAGTTGCTTCAGCCTGAGCTCGGTTAGGGCCTCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTT [...]
+chr4-04	EST_Human	nucleotide_match	337573	337697	97.000000	+	.	Target=DA145375.1 58 182 +;percentID=88.8;sequence=AGCCGCCTGCAGACCCGGAAGTGGATGGCGTGGAGATATGGCGCAACTGCGGCGCGGACACTTGACATTCAGGGACGTGGCCATAGAATTCTCTCAGGAGGAGTGGAAATGCCTGGACCCTGTGCAGAAGGCTTTATACAGGGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGAATNTGTCTTCCTGACCTGAGTATTATCTCCATGATGAAGCAAAGGACAGAGCCCTGGACTGTGGAGAATGAAATGAAAGTAGCAAAAAATCCAGATAGGTGGGAAGGTATCAAAGATATCAACACAGGGAGGAGCTATGCGGTGAGAAGCAAAGCAGGAAACAAGCCTATTACAAATCAACTTGGATTAACCTT [...]
+chr4-04	EST_Human	nucleotide_match	266214	266444	145.000000	-	.	Target=BP240055.1 333 572 +;percentID=82.7;Gap=M20 D2 M2 D1 M130 I3 M3 I1 M1 I1 M5 I2 M1 I3 M1 I1 M4 I1 M61 ;sequence=GTTGCTTCAGCCTGAGCTCGTTTAGGGCCTCACTTCCTTGCTTCCACACCTGAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGGGAACTACAGAAACCTGGTCTCCCTAGGTCTCTTGATGGGAAGGACCA [...]
+chr4-04	EST_Human	nucleotide_match	337661	337697	33.000000	+	.	Target=BQ365590.1 9 46 +;percentID=94.7;Gap=M3 I1 M34 ;sequence=TGTTGTACGTGAATGTTGGAGAACTACAGGAACCTGGTCTCCCTGCGTTTGTGATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAATAAAAGAGCCCTGAATTTGAAGATACATGAGACAGCAGCCAAACCCCCAGGTAGGTGAGACTGAATGAAGGAGAGGACACAGGCTAGGAGGCCAGAGGTCAGGAAGGAAGCCAGGCCTTCAAATGTAGTCTGGGAAACTGCGCCAATAAAAATAATTTCCGAAAAGGCTGCATTTTTTCTCTTATTCACAAATAGGGTCATCTTCTGTCCCATGCTCTTAAATCTTCTAAGAATTTCCTTTTTTTCTTCAGTGATCTCCAAGTTTGCAAGGAGAG [...]
+chr4-04	EST_Human	nucleotide_match	266249	266419	112.000000	-	.	Target=DA385292.1 404 583 +;percentID=84.7;Gap=M130 I3 M3 I1 M1 I1 M3 I7 M20 D1 M1 D2 M10 
+chr4-04	EST_Human	nucleotide_match	337571	337697	127.000000	+	.	Target=DB135798.1 176 302 +;percentID=100;sequence=GTCTTTGCGTCTGGCTACTACCAGACCGCGGGTTAGGGGCTTCATCTCTCTGCGTTCTCAGTTGTGGGAGGCCTTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTGGTAGCTAAGACTCCCGAATACNTTCAGAAGTGGGGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGACCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTGTTGCTATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAAGAAAAGAGCCCTACAATGTGAAGATACATA [...]
+chr4-04	EST_Human	nucleotide_match	266301	266419	84.000000	-	.	Target=DA736785.1 656 774 +;percentID=84;sequence=GCGGCATCCGGGATCTGGCGCGGCTTTTGCTTGTAGCTCCAGCCAGAGCTCGGTTAGGGCCTCATCGCTCTGCTCCCGCTCCTTAGGGAAGCCTCGGTGATTCTGCCACAGCCTCAGCCTCTGTGGCTCTGTGACCTGCCGGTATTGGATGATTCGTATCTAAGACTCTGGGACACTCCTGAAGTCGGGAAATGGTGAGTGTGCAGGGCAGGGCGTCCCAAGGCTGTGGAGGCCTCATCGGAACCGGCGGGAAATGGCGGCGGTGGGAGGAGTCTGTGAATGGAGTTCCCGCTCAGCCCTCTGTCCTCAGTCCCCTCCGGTGAGGGACCCGCGCTCTTGTCAGTCCCCGTACAGCGGCTCTGGCCCAGCCTGCAGCCCT [...]
+chr4-04	EST_Human	nucleotide_match	337571	337697	127.000000	+	.	Target=DA418713.1 175 301 +;percentID=100;sequence=CTTTTTGCGTCTGGCTACTACCAGACCGCGGGTTAGGGGCTTCATCTCTCTGCGTTCTCAGTTGTGGGAGGCCTTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTGGTAGCTAAGACTCCCGAATACTTCAGAAGTGGGGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGACCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTGTTGCTATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAAGAAAAGAGCCCTACAATGTGAAGATACATAA [...]
+chr4-04	EST_Human	nucleotide_match	266349	266419	55.000000	-	.	Target=BU854428.1 406 476 +;percentID=88.7;sequence=GGGGGCGCGGCGTTTTCCTCTGGCTCCTGCGAGGGCTTGGTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGGAACTCGTAACATTCAGGGATGTGGCCATAGAATTCTCCCCTGAAGAGTGGAAATGTCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTTTTGTGATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAATAAAAGAGCCCTGCAATTTGAAG [...]
+chr4-04	EST_Human	nucleotide_match	337571	337697	125.000000	+	.	Target=CD654571.1 149 275 +;percentID=99.2
+chr4-04	EST_Human	nucleotide_match	266370	266738	365.000000	-	.	Target=DB343927.1 1 369 +;percentID=98.9;sequence=ACTTCTAATGGCACAGTGCTATATTGGGGAGGAGGAAGAACTGTGGTTGGTAAATGTAACAAACTTTGTATCCTGTTCTATGTGGCTCTTGGCATTGTGCTTACCTGAGGCATTGCATGTAACTCATTTATAAATTTCACTAAAAGGCATTTTGATCAGTATATGTTTGTTACATATATATGTCTGTGAAGAAATTATGGCCTGTGGTATTTTGTTATGCCATCTTACTAATGTACTTTGTATAAGTTTATATATTANATTTTTAAAGTATATTCGTATGAATCTAGTAAGCAGGATAATTTATTTTTATTTCTTTCANCTGTGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCANGGGATANAA
+chr4-04	EST_Human	nucleotide_match	338124	338229	22.000000	+	.	Target=BG192751.1 187 292 +;percentID=63.6;Gap=M4 I1 M2 I1 M2 D1 M2 D1 M4 D1 M5 I1 M10 I1 M2 D1 M71 
+chr4-04	EST_Human	nucleotide_match	266962	267477	340.000000	-	.	Target=DB269867.1 26 549 +;percentID=83.5;Gap=M64 I2 M14 I2 M3 I1 M35 I1 M21 D1 M94 I1 M48 I1 M1 I2 M221 D1 M13 ;sequence=TTTTGAAACTTTGCTTATATAAATCTCTGTGTATGTATCCTAGTTGAAGTTTGTTGAGCTTCTTCATTTTTTACATCCTTATTTTACTTTTGGAACTTTCTCACTCATTACTTTTGTATTTTTCACATCCACAATTTGTTTTTTATATTTTAACGTTTTCATCGATACCTCATTTGTCTTATTATATTTAGTTGTATGTGTTCCCCTTTAGCTCATTGAGGATTTTTCAGGTTAATTTTTTAAAATTTCTACATCTTCATTTCTTATGGTTGTTTTCTGAAAAGTTTTAAATTTTTTAATTGGGCC [...]
+chr4-04	EST_Human	nucleotide_match	267101	267656	501.000000	-	.	Target=AW977656.1 1 545 +;percentID=96;Gap=M357 D1 M77 D1 M26 D1 M7 D1 M8 D1 M26 D1 M5 D1 M3 D1 M9 D1 M8 D1 M13 D1 M6 ;sequence=CTAGCACCTTAACAATATCCCAATTCTTTCTGTTGGGAAATAGTTTTGTTGACAGATTCACTGGTAATCTTTTAAGACCACAGTTATAAATGACACATCACTTTTATTTTGCAGCTCCTAAGATGTCGTTTTTGAGTTTGATTTTTGAAACTTTGCTTATATATGTGCTTTGCTGTAAATCTGTGTGTGTAACCTTGTTGAAGTTTGTTGAGCTTCTTCCGTTTTTATATCCTTTTTTAACTTGAAAATTTCTGTCTTTATTTTGCATTTTTCACCTTCATGATTTGTTTTTTGTTTTTA [...]
+chr4-04	EST_Human	nucleotide_match	337573	337697	97.000000	+	.	Target=AU143777.1 42 166 +;percentID=88.8;sequence=GGAAGTGGATGGCGTGGAGATATGGCGCAACTGCGGCGCGGACACTTGACATTCAGGGACGTGGCCATAGAATTCTCTCAGGAGGAGTGGAAATGCCTGGACCCTGTGCAGAAGGCTTTATACAGGGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGAATCTGTCTTCCTGACCTGAGTATTATCTCCATGATGAAGCAAAGGACAGAGCCCTGGACTGTGGAGAATGAAATGAAAGTAGCAAAAAATCCAGATAGGTGGGAAGGTATCAAAGATATCAACACAGATGGAGTCCTGTTCTGTCGCCCAGGCTGGAGTACAGTGGTGTGATCTCGGCTCACTGCAACTTCCGCCTCCCAGGGAGGAGCT [...]
+chr4-04	EST_Human	nucleotide_match	267427	268011	312.000000	-	.	Target=DA189566.1 7 572 +;percentID=79.8;Gap=M11 I1 M42 D2 M1 D1 M1 D1 M2 D1 M34 I2 M2 I1 M18 I1 M2 I3 M10 I2 M24 I1 M83 I1 M1 I1 M112 D6 M1 D2 M68 D3 M51 D1 M2 D1 M6 D2 M30 D1 M5 D1 M4 D2 M1 D2 M4 D6 M38 ;sequence=TTTTTATGTTGCTTATTTATTAACAGATTATGATGAACAGTTTATGATCATTTTTATGCTCTTTAAAATTTTAGAGAATAATTAAAATGTTTTCTGCACTATCATGATAATGGTACAGAACCTTACATTTGTATATGTTCATGTCTTTCCCAAAAAGTTACNTTATTTTCATATGATTATGTTTTGTTTTCTTGCATCATATTATTTTCAGTG [...]
+chr4-04	EST_Human	nucleotide_match	337577	337697	90.000000	+	.	Target=CN426971.1 249 369 +;percentID=87.7;Gap=M60 D1 M2 I1 M58 ;sequence=CGCGTCCGCGTTGGGTGAAGGTGACGGCGTCGAGCAAAGGTGGGAGACAATGCCTTGGAGCTGCAAATCTTCTCTGAGTCTGAAGCATCCTGCCTGACGCGTTTGCTCACATTGACCCGTGCCTTCCCTCAGTCCTTCTCATCTCTACTGAGATTCCGTCTCACCCTGACCCTGTGACATGAACTTCTGAAGAGTCCACTGGGCATGGTCCTGGGAAGGGCTCACACCCAGACATGGATGGAGACGGGTTGACATTCAGGGACGTGGCCATCGAATTCTCTCAAGATGAGTGGAAATGCCTGAACTCTACACAGAGGACTTTATACAGGGATGTGATGTTGGAGAACTACAGGAA [...]
+chr4-04	EST_Human	nucleotide_match	273072	273298	110.000000	+	.	Target=CR739309.1 2 227 +;percentID=75.8;Gap=M82 D2 M61 I1 M41 I1 M1 I1 M13 I1 M4 D1 M1 D1 M6 D1 M13 ;sequence=TAAAAATACAAAAAATTAGCCGGGCGTGGTGGTGCATGCCTGTAATCCCAGCTTCTCGGGAGGCTGAGGCAGGAGAATCGCCTCCCCAGGAGGCAGAGGTTGTGGTGAGCCAAAATCATGCCATTGCTCTCCAGCCTGGGCAACAAGAGCAAAACCCTGTCTCAAAATTAAAAAAAAAAAACAAAACCAACAAAAATATAAAGATTAAAAACAAACCACTAAAATGGAGTTGAAAACTAGAATAAAAAATTCTGACCTATAAAATATTGAATCTAATATATATGTATCATAAAGACAATCTTTTAAATAACTACAGT [...]
+chr4-04	EST_Human	nucleotide_match	273172	273298	46.000000	+	.	Target=CB120026.1 2 129 +;percentID=70.2;Gap=M45 I1 M41 I1 M1 I1 M13 I1 M4 D1 M1 D1 M6 D1 M13 ;sequence=GTTGTGGTGAGCCAAAATCATGCCATTGCTCTCCAGCCTGGGCAACAAGAGCAAAACCCTGTCTCAAAATTAAAAAAAAAAAACAAAACCAACAAAAATATAAAGATTAAAAACAAACCACTAAAATGGAGTTGAAAACTAGAATAAAAAATTCTGACCTATAAAATATTGAATCTAATATATATGTATCATAAAGACAATCTTTTAAATAACTACAGTTTTCAACTGTGACTATGTACTTATGAAGAGCTGGCATTTTGAATCTTTGGCATTCAAGGTACAGCAGCAAAAGAAAATTAAGTCAATAATTAATAAAATGCTCTGA [...]
+chr4-04	EST_Human	nucleotide_match	273448	273969	290.000000	-	.	Target=DN917339.1 17 530 +;percentID=79.9;Gap=M31 D1 M11 D1 M61 D1 M8 I1 M3 I1 M3 I2 M127 D1 M1 D3 M46 I1 M7 I1 M2 I2 M40 D1 M67 I1 M1 I1 M26 D1 M9 D1 M14 D1 M1 D1 M14 D1 M4 D1 M2 D1 M7 D1 M7 D1 M8 D1 M4 ;sequence=ACGCAGAGTCGCGGGATATATTTAATATTTTCTTTGTTAGAATTTTTATTGTATTCAACTCCATTTTACTGGGCAATCTTTTTTCATGTAGATACTCCTTGATTATTTAATTTTTTTCACTTCTAATCTTCATATTTGGTAATTTTCAAATCTATACCTTTAATGATCAAGTGGTGTTTAATTCAAATAAAAATAATTGGGTTTCACTTGAGGC [...]
+chr4-04	EST_Human	nucleotide_match	338023	338235	28.000000	+	.	Target=CK001884.1 256 459 +;percentID=60.4;Gap=M16 D1 M2 D1 M30 I1 M15 D1 M3 D1 M7 D1 M11 D3 M2 D1 M22 D1 M5 D1 M14 I1 M20 I2 M21 D2 M32 ;sequence=GGGCTACAGGCCCGGAAACGGATCGCGTTGGGTGAAGGTGACGGCGTCGAGCCATTGACTTCCAAAGACTCCTGGCACATGAGGAAGAAACCCAGAAGAGGAGAGCAAAGGAGTCAGGAATGGCTTTTACTCAGTTGACATTCAGGGACGTGGCCATCGAATTCTCTCAAGATGAGTGGAAATGCCTGAACTCTACACAGAGGACTTTATACAGGGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGATCCATCTGTGATAGCCTCTCTTCTTA [...]
+chr4-04	EST_Human	nucleotide_match	273475	273876	261.000000	-	.	Target=BP395595.1 19 413 +;percentID=84.3;Gap=M9 D1 M195 I1 M7 I1 M2 I1 M1 I1 M51 D2 M13 D3 M4 D1 M1 D1 M3 D2 M3 D3 M19 I1 M1 I1 M80 ;sequence=CTCGAGCCGCGCCCGACCTTTTGTTTTAATCTTTCTGTTTGCCTGGTAATTTTAAACTCTGTACCTTTTATGACCCTGTGGTATTTAATTCAAATAAAAATCATTGGGTTTCACTTTGAGCAAATTAAAATGTACATATAAATCAGATATTTCTATTGCCTATAAAAGTTATCTGTGTGGTATTTGCATGTATAAATATTGCCCCTACTTTGTTCGTAAATTATTTATTCACTTGAGTGGTCACCAGTGTTTTCTTGTGTACGTGAGTAATCAAAGAAACTGTAA [...]
+chr4-04	EST_Human	nucleotide_match	273487	273867	270.000000	-	.	Target=BM671203.1 310 689 +;percentID=86.9;Gap=M27 D1 M3 D1 M82 I1 M2 I3 M24 D1 M37 D1 M6 D1 M9 I1 M8 I1 M2 I1 M2 I1 M67 D1 M6 D1 M1 D1 M20 D1 M76 ;sequence=TTTTTTTTTTTTTTTTTTAATTTTGAGACAGGGTTTTGCTCTTGTTGCCCAGGCTGGAGAGCAATGGCATGATTTTTGGCTCACCACAACCTCTGCCTCCTGGGGAGGCGATTCTCCTGCCTCAGCCTCCCGAGAAGCTGGGATTACAGGCATGCACCACCACGCCCGGCTAATTTTTTGTATTTTTAGTAGAGATGGGGTTTCTCCATATTGGTTATTCTGGGGTCTCGAACTCCTGACCTCAGGTGATCCACCTGCCTTGGCCTCCCAA [...]
+chr4-04	EST_Human	nucleotide_match	273510	273867	244.000000	-	.	Target=BM671221.1 310 666 +;percentID=85.5;Gap=M27 D1 M3 D1 M82 I1 M2 I3 M24 D1 M37 D1 M6 D1 M9 I1 M8 I1 M2 I1 M2 I1 M67 D1 M6 D1 M1 D1 M20 D1 M53 ;sequence=TTTTTTTTTTTTTTTTTTAATTTTGAGACAGGGTTTTGCTCTTGTTGCCCAGGCTGGAGAGCAATGGCATGATTTTGGGCTCACCACAACCTCTGCCTCCTGGGGAGGCGATTCTCCTGCCTCAGCCTCCCGAGAAGCTGGGATTACAGGCATGCACCACCACGCCCGGCTAATTTTTTGTATTTTTAGTAGAGATGGGGTTTCTCCATATTGGTTATTCTGGGGTCTCGAACTCCTGACCTCAGGTGATCCACCTGCCTTGGCCTCCCAA [...]
+chr4-04	EST_Human	nucleotide_match	273642	274089	287.000000	-	.	Target=CA941914.1 140 587 +;percentID=83.4;Gap=M54 I1 M69 D1 M3 D1 M23 D1 M11 D1 M61 D1 M8 I1 M3 I1 M3 I2 M128 D4 M46 I1 M7 I1 M2 I2 M21 ;sequence=GATATGTTCTATGCCAAATTATCTGATTTCAAATTCAAAATTTCTGAAATAAAATGCCCAAGTTTACACATTGTGTAATAAGTACATGTATTGACATGGCTCATTTTCATTAGAGCATTTTATTAATTATTGAGATGCATTTTCTTTTACTGCTTTACATTTCATGCCAAAGATTCAAAATCCTGGCTCTTCAATAAGAACATAGTCACAGTTAAAAACTGTAGTTATTTAAAGGATTGTTTTTATGGTACATCTGTATATATTTAATATTTTGTGGGTTA [...]
+chr4-04	EST_Human	nucleotide_match	337570	337697	120.000000	+	.	Target=BP248393.1 165 292 +;percentID=96.9
+chr4-04	EST_Human	nucleotide_match	273787	274250	168.000000	+	.	Target=BX435704.1 8 491 +;percentID=71.4;Gap=M15 I1 M65 I2 M3 I1 M1 I1 M8 I1 M1 I1 M3 I2 M1 I1 M42 D1 M43 D1 M37 D2 M10 D2 M2 D4 M2 D1 M50 I2 M3 I1 M3 I3 M1 I3 M25 I1 M1 I1 M7 I1 M17 I1 M12 I1 M7 I1 M20 I1 M5 I2 M18 I1 M2 I1 M6 I1 M24 D1 M7 I1 M11 ;sequence=CTTGCTTCCAATGATTTTTATTGGGAATTAAACAATACATGGTCATAAAAGGTACAAAGTTGAAAATTACCATACAAATATGAAGATTAAAAACACACAAAAAAGTAAATGATCAAGGAGAACCTACATGAAAAGAGACTCCCCAGTAAAATACAGTTGAAAACAAGAGA [...]
+chr4-04	EST_Human	nucleotide_match	273787	274089	198.000000	+	.	Target=DB316147.1 19 319 +;percentID=84.9;Gap=M80 I2 M3 I1 M1 I1 M8 I1 M1 I1 M3 I2 M1 I1 M42 D1 M43 D1 M37 D2 M10 D2 M2 D4 M2 D1 M59 ;sequence=ATATTTTTTTAACTTGCTCCAATGATTTTTATTGGAATTAAACAATACATGGTCATAAAAGGTACAAAGTTGAAAATTACCATACAAATATGAAGATTAAAAACACACAAAAAAGTAAATGATCAAGGAGAACCTACATGAAAAGAGACTCCCCAGTAAAATACAGTTGAAAACAAGAGAAAATTCTGACCTATAAAATATTGAATATAATACAGACGTATCATAAAAACAATCCTTTAAATAACTAGTTTCCAACTGTGACTTATGAAGAGCTGGCATTTTGAA [...]
+chr4-04	EST_Human	nucleotide_match	273788	274089	197.000000	+	.	Target=AW590651.1 10 309 +;percentID=84.9;Gap=M79 I2 M3 I1 M1 I1 M8 I1 M1 I1 M3 I2 M1 I1 M42 D1 M43 D1 M37 D2 M10 D2 M2 D4 M2 D1 M59 ;sequence=AACTTGCTTCAATGATTTTTATTGGAATTAAACAATACATGGTCATAAAAGGTACAAAGTTGAAAATTACCATACAAATATGAAGATTAAAAACACACAAAAAAGTAAATGATCAAGGAGAACCTACATGAAAAGAGACTCCCCAGTAAAATACAGTTGAAAACAAGAGAAAATTCTGACCTATAAAATATTGAATATAATACAGACGTATGATAAAAACAATCCTTTAAATAACTAGTTTTCAACTGTGACTTATGAAGAGCTGGCATTTTGAATCTTTGACAT [...]
+chr4-04	EST_Human	nucleotide_match	273924	274089	120.000000	+	.	Target=CR739309.1 228 394 +;percentID=87;Gap=M2 D1 M8 I3 M35 D1 M119 
+chr4-04	EST_Human	nucleotide_match	273924	274089	120.000000	+	.	Target=CB120026.1 130 296 +;percentID=87;Gap=M2 D1 M8 I3 M35 D1 M119 
+chr4-04	EST_Human	nucleotide_match	274099	274378	144.000000	-	.	Target=BM671203.1 21 309 +;percentID=78;Gap=M58 I1 M26 D2 M50 D3 M1 D1 M23 I1 M6 I2 M5 I2 M1 I4 M11 I1 M11 I2 M18 I1 M2 I1 M62 
+chr4-04	EST_Human	nucleotide_match	274099	274378	144.000000	-	.	Target=BM671221.1 21 309 +;percentID=78;Gap=M58 I1 M26 D2 M50 D3 M1 D1 M23 I1 M6 I2 M5 I2 M1 I4 M11 I1 M11 I2 M18 I1 M2 I1 M62 
+chr4-04	EST_Human	nucleotide_match	274359	274776	206.000000	+	.	Target=BX435704.1 492 903 +;percentID=77.2;Gap=M15 I2 M3 I1 M24 I1 M105 D1 M2 D2 M4 D5 M1 D2 M41 D4 M98 I1 M14 I1 M4 D1 M4 D1 M7 I1 M12 D1 M8 I1 M23 I3 M36 
+chr4-04	EST_Human	nucleotide_match	276251	276568	314.000000	-	.	Target=AW189324.1 1 318 +;percentID=99.4;sequence=GTAATTTCCAAGGGACCATAAAATATCTCATAGTTTAAAAAGTCTAGCTTAAGGTAACAATCTAACTTCTTTTTTACCCACATAGGATCTTACTTTGTTTCCCAGGATGTAGTGCAGTGGTGGGTTCACAGCTCAGTGCAGCCTTGAACTCTCCAATATCAAACACTTTTCCCATATCAGCCTCCCAAGTAGCTGGGATCACAAGCACATGCCACCATGTCCAGCTAATTTTTTTGGTATTTTTTGTAGAGACAGGGTTTTGCCACGTTGCTCAGGCTGGTCATGAACTTCTGGGCTCAAGAAATCTACCTGCCTTGG
+chr4-04	EST_Human	nucleotide_match	337598	337774	84.000000	-	.	Target=AW130582.1 69 244 +;percentID=74.9;Gap=M5 D2 M18 I1 M13 D1 M15 I1 M123 ;sequence=TTCAGCATTATGAAGCTTTTTATTTGTGAGTCAACAAGGCTTCAGTCTCAGTCAAATAATGGAAGGGCTCCCAAGAAAGACAACAGAGAAAATACAAAAATACACGAGGGCAGATCTTAACTTCTAGAGCAAAATTATCCTTACCCAGGAAGACCAGGTTCCTGTAGTTCTCCAACATCACATCCCAGTACAAAGCTTTCTGGACAGGGTCCAGGGATTTCCACTCCTCCTGAGAGAATTCTATCGGAC
+chr4-04	EST_Human	nucleotide_match	278622	278654	25.000000	+	.	Target=DB473756.1 3 35 +;percentID=87.9;sequence=ATTGCACTCCAGCCTGGGTGACAGAGTGAGACTCCATCTCAAAAAAAAAAAAAATTCTAATGAAAGGTTTTTAGAAAAGGGAGGAGAGAAAATACTCTTCCTTTATTTTCCAGTTGGAGGACTAAGTCTCTCATTTCTGTTTTGCACTTATATTTACAATAACCACATCCAAAAACTCTGCTTCGAACTCATGGACATCTGATTTCCAGCATGGCCTGGATTTAGGCACCTGCAGGGAGACATTGGGCATACTGTCTTCACAGGAAAGAGGGTTTGTGGGGGAAAAATGCAGAATAGAAAAGGTGCTATCAAGAATCCATGGGTGAGCTTTGGTGCACAATTGGTGAAAGAACTGGTTAGTGCTACAGATACTGGCCCAG [...]
+chr4-04	EST_Human	nucleotide_match	278735	279140	260.000000	+	.	Target=DB473756.1 36 444 +;percentID=83.1;Gap=M1 I1 M23 D1 M18 I1 M5 I1 M16 I1 M2 I1 M21 I2 M3 I1 M146 D1 M3 D3 M14 D1 M90 I1 M58 
+chr4-04	EST_Human	nucleotide_match	278808	279173	257.000000	+	.	Target=AA551515.1 1 365 +;percentID=85.9;Gap=M14 I2 M3 I1 M146 D1 M3 D3 M14 D1 M90 I1 M91 ;sequence=GCTAGACGACTAAGTCTCTCATTTCTGTTTTGCACTTATATTTACAATAACCACATCCAAAAACTCTGCTTCGAACTCATGGACATCTGATTTCCAGCATGGCCTGGATTTAGGCACCTGCAGGGAGACCTTGGGCATACTGTCTTCACAGGAAAGAGGGTTTGTGGGGGAAAAATGCAGAATAGAAAAGGTGCTATCAAGAATCCATGGGTGAGCTTTGGTGCACAATTGGTGAAAGAACTGGTTAGTGCTACAGATACTGGCCCAGGCAGGACAGCTCTGACTTATAAATGTGTGCGTGCAGGGAGATAAGATGGTCAGGTGATCC [...]
+chr4-04	EST_Human	nucleotide_match	338124	338252	25.000000	+	.	Target=DB028799.1 191 320 +;percentID=62.7;Gap=M4 I1 M2 I1 M2 D1 M2 D1 M4 D1 M5 I1 M10 I1 M2 D1 M85 I1 M9 
+chr4-04	EST_Human	nucleotide_match	278812	279209	283.000000	+	.	Target=AA493610.1 5 401 +;percentID=86.3;Gap=M10 I2 M3 I1 M146 D1 M3 D3 M14 D1 M90 I1 M127 ;sequence=GGTCGACGACTAAGTCTCTCATTTCTGTTTTGCACTTATATTTACAATAACCACATCCAAAAACTCTGCTTCGAACTCATGGACATCTGATTTCCAGCATGGCCTGGATTTAGGCACCTGCAGGGAGACCTTGGGCATACTGTCTTCACAGGAAAGAGGGTTTGTGGGGGAAAAATGCAGAATAGAAAAGGTGCTATCAAGAATCCATGGGTGAGCTTTGGTGCACAATTGGTGAAAGAACTGGTTAGTGCTACAGATACTGGCCCAGGCAGGACAGCTCTGACTTATAAATGTGTGCGTGCAGGGAGATAAGATGGTCAGGTGATC [...]
+chr4-04	EST_Human	nucleotide_match	338023	338180	23.000000	+	.	Target=AA125955.1 220 369 +;percentID=61.5;Gap=M16 D1 M2 D1 M25 I1 M1 I1 M19 D1 M3 D1 M7 D1 M11 D3 M2 D1 M22 D1 M5 D1 M14 I1 M20 ;sequence=GCACCCTCCACCTCAGCATTGACTTCCAAAGACTCCTGGCACATGAGGAAGAAACCCAGAAGAGGAGAGCAAAGGAGTCAGGAATGGCTTTTACTCAGTTGACATTCAGGGACGTGGCCATCGAATTCTCTCAAGATGAGTGGAAATGCCTGAACTCTACACAGAGGACTTTATACAGGGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGATCCATCTGTGATAGCCTCTCTTCTTATCCAAGCAAAGGGCTGAGATTCTTGAAAAAGCCACAGCACATCA [...]
+chr4-04	EST_Human	nucleotide_match	278933	279259	230.000000	-	.	Target=AW089533.1 79 401 +;percentID=86;Gap=M177 I1 M90 D1 M14 D3 M3 D1 M38 ;sequence=TTTTTTTTGCAGACAAGCTGTCACACTGTGAATTGTCCTGTGATTCTAGGTCTCCTCCAAGGGTCAAAGGAGACTGAGGACTGCTTCTAGAGTTTTCCACTAACAGGCCACGTAAGTGTCCCGAAGATTCATGGCTTCTTTCTACCTCCCAGATCTTGAATCTGCACCAGTAACCTCTTTCCTGCAGTAGCCTAGATTTCTGGATCACCTGACCATCTTATCTCCCTGCACGCACACATTTATAAGTCAGAGCTGTCCTGCCTGGGCCAGTATCTGTAGCACTAACCAGTTCTTTCACCAATTGTGCACCAAAGCTCACCCATGGATTCTTGATAGCACCTT [...]
+chr4-04	EST_Human	nucleotide_match	279397	279470	50.000000	-	.	Target=AW089533.1 5 78 +;percentID=84.2
+chr4-04	EST_Human	nucleotide_match	282950	283018	65.000000	-	.	Target=BQ949754.1 742 810 +;percentID=97.1;sequence=ATTTTAGAATGATAGGAAGTTTCTCGAGTTAGCCTTCATGCAATTTTGTAGATTAAAACATAAAATTTGTCCAGAACTTAAAGATTTAGATGCCTTCCTAAATTGTTACAATGCTTTACCAAATCTATGACTTCTACATAACACAAACCAGTGGTCAAATGTAAACACTATATTGTAGATTTACTGTAGGTTTTCAACCTTTTTTAGATTTATGCATGTGGACATTTTTATAATGTAATTACAATCACCACAAGGTTAGCTTTTTTAATTGCAGACAGTAATGCATGTCACACTAATATGTAGTGGCCTTTTCAAGGCCTAGTCCCAGGGAAAACATTTTGTAGAGTATAGGGGAGTGGGAGGAAGGGGAGGAATAA [...]
+chr4-04	EST_Human	nucleotide_match	337577	337697	90.000000	+	.	Target=DA281897.1 128 248 +;percentID=87.7;Gap=M60 D1 M2 I1 M58 ;sequence=AGGCCCGGAAACGGATCGCGTTGGGTGAAGGTGACGGCGTCGAGCCATTGACTTCCAAAGACTCCTGGCACATGAGGAAGAAACCCAGAAGAGGAGAGCAAAGGAGTCAGGAATGGCTTTTACTCAGTTGACATTCAGGGACGTGGCCATCGAATTCTCTCAAGATGAGTGGAAATGCCTGAACTCTACACAGAGGACTTTATACAGGGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGATCCATCTGTGATAGCCTCTCTTCTTATCCAAGCAAAGGGCTGAGATTCTTGAAAAGCCACAGCACATCATGTTCCATTCATTTTATAAGCGGGAAATTCTCTTCCT [...]
+chr4-04	EST_Human	nucleotide_match	282950	283018	65.000000	-	.	Target=BG014278.1 185 253 +;percentID=97.1;sequence=TTCTGAGCTTCAGATAATATCTTAACTGTGGAACTCAAAAGTTTGATCACTGAATTAGGCAGTTATTATTACCTAGGTACCCCCGCTGTTACACAGGTGTTTAGATACGTGTTCCTGAATGAAGCTGCTTTTGAATTTTGTTATGTTGAAATGCAAGAAATAACAATGATGGCAGCAATTAAGGTCACAGAAATCATTAGGTAAAGGAAAACCAATGAGGAGTTCTGCAGTTTTCTTTTAATAAGTAAAGTGAGACTTGGGTGGTGGGAAGAAGGAAGGTGGGAAGAAGGAATTAGACACTCTGCCTGCCACTCTGCGTGTGTGTGCTCTCGCGCACGTGCTGTCTATATGGAAG
+chr4-04	EST_Human	nucleotide_match	338124	338250	52.000000	+	.	Target=BG576135.1 242 368 +;percentID=72.3;Gap=M97 D1 M3 D1 M2 D1 M4 I1 M7 I1 M5 I1 M6 ;sequence=AGCTCCACTTCCTGTCCCCGCGGCTCTGTGTCCCTGCTAGCCGTAGGCCGTGTGACCCGCAGGCACCGGGAGATCCAGAAGTGAAACGCCAGGCTCTCTGGAGGCCAGGAGATGACTCTGTTGACGTTCAGGGATGTGGCCATAGAATTCTCCCTGGAGGAGTGGAAATGCCTGGACCTCGCTCAGCAGAATTTGTACAGGGATGTGATGTTGGAGAACTACAGAAACTTGTTCTCCGTTGGTCTCACTGTCTGTAAGCCAGGCCTGATCACCTGCCTGGAGCAACGAAAAGAGCCCTGGAATGTGAAGAGACAGGAGGCAGCAGACGGACA [...]
+chr4-04	EST_Human	nucleotide_match	282950	283018	65.000000	-	.	Target=DB200520.1 512 580 +;percentID=97.1;sequence=AATGTAATTACAATCACCACAAGGTTAGCTTTTTTAATTGCAGACAGTAATGCATGTCACACCTAATATGTAGTGGCCTTTTCAAGGCCTAGTCCCAGGGAAAACATTTTGTAGAGTATAGGGGAGTGGGAGGAAGGGGAGGAATAATTTTTTATTTAAAGTTGATTTCTGCACTATCTTTTTCTCAGTTACCTGCATGAATAAATAATGAGAAATATTTTGTGACTTTAATTGGTAAATATGTTACAAAACCAAGTACTTAATCTTTTACATCATGTCTTCAGCTATTTGTATTTTAACCAGTAATTTCAATGGTCTGAAACATGATTCTGAGCTTCACATAATATCTTAACTGTGGAACTCAAAAGTTTGATCAC [...]
+chr4-04	EST_Human	nucleotide_match	338124	338165	24.000000	+	.	Target=CB128971.1 389 430 +;percentID=78.6
+chr4-04	EST_Human	nucleotide_match	282957	283206	213.000000	-	.	Target=F33235.1 1 251 +;percentID=92.9;Gap=M36 I1 M18 D1 M102 I1 M93 ;sequence=TGAGTTCTTAAATTTTCCAAAAAGGTATAATTGCAAACATATAGGATTTCCCCCCATTTTAACCTTACCAGTTTCAAAGGAAAGTAAAGGTACTGGATTACATGAAGACAGCATGTGTGCGAGTGCACACGCATGCAGGGTGGCAGGTAGAGTGTCTTAATTCCTTTTTCTTACTACCCAAGTCTCACTTCACAGAAATCATTAGGTAAAGGAAAACCAACGAGGAGTTCTGCAGTTTTCTTTTAATAACTGAGGCTGAGGCAGGAGAATCGCTTCAACCCTGGAGGTGGAGGTTGCAGTGAGCCAAGATTGTGCCACTGCATTCCAGCCTGAGCGATAGAGTGAGACTCCA
+chr4-04	EST_Human	nucleotide_match	337606	337697	76.000000	-	.	Target=T69725.1 269 359 +;percentID=89.1;Gap=M61 D1 M30 ;sequence=CGTGGTGGCGGGACCTGTAGCCCAGCTACTAGGGAAGGNTGAGGAGGCAATGGTNTGACATGGGAGGCGGACTTCAATAAACGAGATGGCNCACTCACTCCACTCCGCCTCAAAAAAAAAAAGGAGCAATCTAAAATCATATCAGAACTGAAGAGACCAGAAGTGCTGAACAACTGGGGGTTTGGCTGCTGTCTCATGTATCTTCAAATTGCAGGGTCTTTTNTTTGCTCCAGACAGGTGACCAGGTNTGGGTTAGAGNTCACAAAACCCAGGGAGACCAGGTTCCTNTAGTTNTCCAACATCACATCTCTATACAANTTCTGCTGGGNGGGTCCAGACATTTCCACTNTTCAGGGGAG
+chr4-04	EST_Human	nucleotide_match	282991	283187	132.000000	-	.	Target=BU170536.1 14 214 +;percentID=83.2;Gap=M154 I1 M4 I1 M7 I1 M7 I1 M9 I1 M4 D1 M11 ;sequence=TAAAATAGGGGAGAAAAGCTATCATTCCAACATGTAGGATTTCTCCCCTATTTTAACCTTACCAGTTTCAAAGGAAAGAAAAGGGAGTGGCTTCCATATAGACAGCACGTGCGCGAGAGCACACACACGCAGAGTGGCAGGCAGAGTGTCTAATTCCTTCTTCCCACCTTCCTCNNNTCCACACCNAGTCTCACTTTACTTATTAAAAGAAAACTGCAGAACTCCCCAATGGGTTTCTTTTACCTAATGATTTCTGGGAACTTTATNTGCCGGCCACCCTTGTAATTTCTTGGCATTTCCACCTACCAAAATTTCCAAAGCGCCTTTCCT [...]
+chr4-04	EST_Human	nucleotide_match	338124	338252	25.000000	+	.	Target=CD358945.1 234 363 +;percentID=62.7;Gap=M4 I1 M2 I1 M2 D1 M2 D1 M4 D1 M5 I1 M10 I1 M2 D1 M85 I1 M9 
+chr4-04	EST_Human	nucleotide_match	283034	283277	197.000000	+	.	Target=EB387371.1 498 736 +;percentID=91.4;Gap=M167 D5 M72 ;sequence=TTGTAGAGTATAGGGGAGTGGGAGGAAGGGGAGGAATAATTTTTTATTTAAAGTTGATTTCTGCACTATCTTTTTCTCAGTTACCTGCATGAATAAATAATGAGAAATATTTTGTGACTTTAATTGGTAAATATGTTACAAAACCAAGTACTTAATCTTTTACATCATGTCTTCAGCTATTTGTATTTTAACCAGTAATTTCAATGGTCTGAAACATGATTCTGAGCTTCACATAATATCTTAACTGTGGAACTCAAAAGTTTGATCACTGAATTTGGCAGTTATTATTACCTAGGTACCCCCGCTGTTACACAGGTGTTTAGATACGTGTTCCTGAATGAAGCTGCTTTTGAATTTTG [...]
+chr4-04	EST_Human	nucleotide_match	338124	338284	28.000000	+	.	Target=DA145375.1 183 342 +;percentID=62.3;Gap=M4 I1 M2 I1 M2 D1 M2 D1 M4 D1 M5 I1 M10 I1 M2 D1 M85 I1 M9 D1 M6 D1 M3 I1 M5 D1 M15 
+chr4-04	EST_Human	nucleotide_match	283034	283319	225.000000	+	.	Target=AU138541.1 353 630 +;percentID=90.2;Gap=M167 D5 M90 D1 M3 D2 M18 ;sequence=AAGTACTTAATCTTTTACATCATGTCTTCAGCTATTTGTATTTTAACCAGTAATTTCAATGGTCTGAAACATGATTCTGAGCTTCACATAATATCTTAACTGTGGAACTCAAAAGTTTGATCACTGAATTTGGCAGTTATTATTACCTAGGTACCCCCGCTGTTACACAGGTGTTTAGATACGTGTTCCTGAATGAAGCTGCTTTTGAATTTTGTTATGTTGAAATGCAAGAAATAACAATGATGGCAGCAATTAAGGTCACAGAAATCATTAGGTAAAGGAAAACCAATGAGGAGTTCTGCAGTTTTCTTTTAATAAGTAAAGTGAGACTTGGGTGGTGGGAAGA [...]
+chr4-04	EST_Human	nucleotide_match	338023	338235	28.000000	+	.	Target=DA281897.1 249 452 +;percentID=60.4;Gap=M16 D1 M2 D1 M30 I1 M15 D1 M3 D1 M7 D1 M11 D3 M2 D1 M22 D1 M5 D1 M14 I1 M20 I2 M21 D2 M32 
+chr4-04	EST_Human	nucleotide_match	283034	283319	229.000000	+	.	Target=CR747967.1 423 700 +;percentID=91.3;Gap=M167 D5 M90 D1 M3 D2 M18 ;sequence=CTCAGTTACCTGCATGAATAAATAATGAGAAATATTTTGTGACTTTAATTGGTAAATATGTTACAAAACCAAGTACTTAATCTTTTACATCATGTCTTCAGCTATTTGTATTTTAACCAGTAATTTCAATGGTCTGAAACATGATTCTGAGCTTCACATAATATCTTAACTGTGGAACTCAAAAGTTTGATCACTGAATTTGGCAGTTATTATTACCTAGGTACCCCCGCTGTTACACAGGTGTTTAGATACGTGTTCCTGAATGAAGCTGCTTTTGAATTTTGTTATGTTGAAATGCAAGAAATAACAATGATGGCAGCAATTAAGGTCACAGAAATCATTAGGT [...]
+chr4-04	EST_Human	nucleotide_match	338124	338220	51.000000	+	.	Target=BG708988.1 371 467 +;percentID=76.3;sequence=AGCGGGTCTCTCGCTGCAGCTGGAGCTGCAGGTCTCGCCTTCACTGCCCTGTGTCCTCTGCTCGCAGAGGCCCAGCCTCTGTGGCCCTGTGACCTGCAGGTATTGAGAGATCCACAGCTAAGACGCCAGGTACCCCGGAAGCCTAGAAATGGGCGACCTGAGGTCTGGAGTGTATCCTCTCAAGGGAGCAAGTGGATCCCTGGGGCAGAGAGGAAGCTTCTAGTGTACTCTTACTTTGAAAAGGAGACGTTGACATTTAGGGATGTGGCCATAGAATTCTCTCTGGAGGAGTGGGAATGCCTGGACCCTGCTCAGCAGAATTTATATATGAATGTGATGTTAGAGAACTACAAAAACCTGGTCTTCTTGGGTATTGC [...]
+chr4-04	EST_Human	nucleotide_match	283034	283520	383.000000	+	.	Target=CK822888.1 125 606 +;percentID=90.2;Gap=M167 D5 M90 D1 M3 D2 M56 I1 M77 I2 M86 ;sequence=AAGAAATAACAATGATGGCAGCAATTAAGGTCACAGAAATCATTAGGTAAAGGAAAACCAATGAGGAGTTCTGCAGTTTTCTTTTAATAAGTAAAGTGAGACTTGGGTGGTGGGAAGAAGGAAGGTGGGAAGAAGGAATTAGACACTCTGCCTGCCACTCTGCGTGTGTGTGCTCTCGCGCACGTGCTGTCTATATGGAAGCCACTCCCTTTTCTTTCCTTTGAAACTGGTAAGGTTAAAATAGGGGAGAAATCCTACATGTTGGAATGATAGCTTTTTGGAAAATTTAAGAAACTCTCCAGGCTCTCCATCTTGATTTATGCTTGAGTTGT [...]
+chr4-04	EST_Human	nucleotide_match	337577	337697	90.000000	+	.	Target=CD358872.1 109 229 +;percentID=87.7;Gap=M60 D1 M2 I1 M58 ;sequence=GTTGGGTGAAGGTGACGGCGTCGAGCCATTGACTTCCAAAGACTCCTGGCACATGAGGAAGAAACCCAGAAGAGGAGAGCAAAGGAGTCAGGAATGGCTTTTACTCAGTTGACATTCAGGGACGTGGCCATCGAATTCTCTCAAGATGAGTGGAAATGCCTGAACTCTACACAGAGGACTTTATACAGGGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGATCCATCTGTGATAGCCTCTCTTCTTATCCAAGCAAAGGGCTGAGATTCTTGAAAAGCCACAGCACATCATGTTCCATTCATTTTATAAGCGGGAAATTCTCTTCCTGACCAGAGTATTATCCTAT [...]
+chr4-04	EST_Human	nucleotide_match	283034	283520	383.000000	+	.	Target=BP206017.1 94 575 +;percentID=90.2;Gap=M167 D5 M90 D1 M3 D2 M56 I1 M77 I2 M86 ;sequence=CACAGAATTCATTAGGTGGAGGAAAACCAATGAGGAGTTCTGCAGTTTTCTTTTAATAAGTAAAGTGAGACTTGGGTGGTGGGAAGAAGGAAGGTGGGAAGAAGGAATTAGACACTCTGCCTGCCACTCTGCGTGTGTGTGCTCTCGCGCACGTGCTGTCTATATGGAAGCCACTCCCTTTTCTTTCCTTTGAAACTGGTAAGGTTAAAATAGGGGAGAAATCCTACATGTTGGAATGATAGCTTTTTGGAAAATTTAAGAAACTCTCCAGGCTCTCCATCTTGATTTATGCTTGAGTTGTTATGTGCCATATTTGCTTTGAACTCTGATTAT [...]
+chr4-04	EST_Human	nucleotide_match	337577	337697	90.000000	+	.	Target=CK001884.1 135 255 +;percentID=87.7;Gap=M60 D1 M2 I1 M58 
+chr4-04	EST_Human	nucleotide_match	283034	283520	383.000000	+	.	Target=BU184304.1 132 613 +;percentID=90.2;Gap=M167 D5 M90 D1 M3 D2 M56 I1 M77 I2 M86 ;sequence=GAAATGCAAGAAATAACAATGATGGCAGCAATTAAGGTCACAGAAATCATTAGGTAAAGGAAAACCAATGAGGAGTTCTGCAGTTTTCTTTTAATAAGTAAAGTGAGACTTGGGTGGTGGGAAGAAGGAAGGTGGGAAGAAGGAATTAGACACTCTGCCTGCCACTCTGCGTGTGTGTGCTCTCGCGCACGTGCTGTCTATATGGAAGCCACTCCCTTTTCTTTCCTTTGAAACTGGTAAGGTTAAAATAGGGGAGAAATCCTACATGTTGGAATGATAGCTTTTTGGAAAATTTAAGAAACTCTCCAGGCTCTCCATCTTGATTTATGCTT [...]
+chr4-04	EST_Human	nucleotide_match	331605	331775	169.000000	+	.	Target=BP231503.1 1 172 +;percentID=99.4;Gap=M89 I1 M82 ;sequence=CTTTGCGTCTGGCTACTACCAGACCGCGGGTTAGGGGCTTCATCTCTCTGCGTTCTCAGTTGTGGGAGGCCTTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTGGTAGCTAAGACTCCCGAATACTTCAGAAGTGGGGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGACCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTGTTGCTATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAAGAAAAGAGCCCTACAATG [...]
+chr4-04	EST_Human	nucleotide_match	283034	283519	385.000000	-	.	Target=AA502757.1 1 482 +;percentID=90.4;Gap=M85 I2 M77 I1 M56 D2 M3 D1 M90 D2 M4 D2 M164 ;sequence=TTATTTATGATAGCTCATCCATCACAGTTTAATCTAAAAATGAAATTTCTACAGAAACAGGAACTATTTTGACAAAGAAAAAAAAAATCCCTCATCCAAACTTCTTTGTAGTGGTAAAGGCTGCAAATTTGCAGCGTTTAGAAAACTACACTATCAACAAGCTTTGCTTTATGGACTGAGATGTACAAAATCTAGAAAGCAGATGAAAGTGAATTATTTCAAAGTTTTAGTAAAACTTCTGATAATCAGAGTTCAAAGCAAATATGGCACATAACAACTCAAGCATAAATCAAGATGGAGAGCCTGGAGAGTTTTTTAAAATTTCCCA [...]
+chr4-04	EST_Human	nucleotide_match	338124	338226	61.000000	+	.	Target=CV024818.1 167 269 +;percentID=79.6;sequence=ATGGCTAAAAGACCGGGATCCCCTGGAAGCCGAGAAATGGGACTGTTGACATTCAGAGATGTAGTCATAGAATTCTCTCTGGAGGAGTGGCAATGCCTGGATCACGCTCAGCAGAATTTATATAGAGATGTGATGTTAGAGAACTACAGAAACCTGGTCTCCCTGGGTATTGCTGTCTCTAAGCCAGACTTGATCACCTGTCTGGAGCAAAATAAAGAGCCTTGGAATATAAAGAGAAATGAGATGGTAACCAAACACCCAGTTATGTGTTCTCATTTCACCCAAGACCTTCCGCCAGAGCTAGGCATAAAAGATTCACTCCAAAAAGTAATACCAAGAAGATATGGAAAAAGTGGACATGACAATTTACAAGTAAA [...]
+chr4-04	EST_Human	nucleotide_match	283061	283520	358.000000	-	.	Target=BQ002681.1 317 771 +;percentID=89.6;Gap=M86 I2 M77 I1 M56 D2 M3 D1 M90 D5 M140 ;sequence=TTTTTTTTTTTTTCTTTTAAGATTTAGCATTTTATTTTAGTCTCTTATCTTAGTTTGGACCACTTGTACCCAGTACTCTACCTACTACAGACTATTTAACTTACCCAACAAAATCAAAAGAGGTTGCTGACCAGATTTATAGGGGACATAACTGTTTATATTATCAAAGTGTTTGCATAACCAAAAGTACAATAATAAAGATGAAAATGCCTCCTATTTCTTTTAGAAAATAATACTTAATAAGCTTGCTGCATCTTTGATGTTTTTACTACTACTGCATGACAATGAATATCTGATAGAAAAAAGAAATGTATACTTGAATTATGATAGCT [...]
+chr4-04	EST_Human	nucleotide_match	338023	338180	23.000000	+	.	Target=DA259842.1 404 552 +;percentID=61.2;Gap=M16 D1 M2 D1 M30 I1 M15 D1 M3 D1 M7 D1 M11 D3 M2 D1 M22 D1 M5 D1 M14 I1 M20 ;sequence=AGGCCCGGAAACGGATCGCGTTGGGTGAAGGTGACGGCGTCGAGCGACCTCTCTGACCTCATCTCCTGCCTGTGTCCTCCTCGCTCCCTCTGCTCCAGCCAAGCATGCGTCCTTCCTGTTCCTGGGCCGAGCTTGCTCCTGCCTCAAGGCCTTCACGTGGGCTGTGCCTCTGCTGGAACTCGCTGGCCCCTCAGCTGCAGCATTGACTTCCAAAGACTCCTGGCACATGAGGAAGAAACCCAGAAGAGGAGAGCAAAGGAGTCAGGAATGGCTTTTACTCAGTTGACATTCAGGGA [...]
+chr4-04	EST_Human	nucleotide_match	283062	283522	348.000000	-	.	Target=BG208379.1 352 802 +;percentID=89;Gap=M11 D2 M2 D1 M2 D1 M69 I2 M77 I1 M56 D2 M3 D1 M90 D5 M78 D1 M60 ;sequence=CTGGCCGCATCCATGTTTATTAGACCAAGGCACAAAACGTTTAGTGCATAAACCCAGTTTCTTTTAAGATTTAGCATTTTATTTTAGTCTCTTATCTTATTTGGACCACTGACCCAGACTCTACTACTCAAACTTTTTAATTACCCACAAAATCAAAGAAGGTGGTTGCCCAAATTTTGTGGGCACAAACGGTAAATTAAAAAAAGGTGGGGTACCCCAGAGGCCAATATTAAAAAAGAAAAAGGCCCGCCTTTTTTTTTTTTGAAAAAAAAAAATAAAAAAAAACGCCGGCCCCCTTTTAGGGGTTTT [...]
+chr4-04	EST_Human	nucleotide_match	338023	338212	25.000000	+	.	Target=DA072857.1 396 576 +;percentID=60.8;Gap=M16 D1 M2 D1 M30 I1 M15 D1 M3 D1 M7 D1 M11 D3 M2 D1 M22 D1 M5 D1 M14 I1 M20 I2 M21 D2 M9 ;sequence=AAACGGATCGCGTTGGGTGAAGGTGACGGCGTCGAGCGACCTCTCTGACCTCATCTCCTGCCTGTGTCCTCCTCGCTCCCTCTGCTCCAGCCAAGCATGCGTCCTTCCTGTTCCTGGGCCGAGCTTGCTCCTGCCTCAAGGCCTTCACGTGAGCTGTGCCTCTGCTGGAACTCGCTGGCCCCTCAGCTGCAGCATTGACTTCCAAAGACTCCTGGCACATGAGGAAGAAACCCAGAAGAGGAGAGCAAAGGAGTCAGGAATGGCTTTTACTCAGTTGACATTC [...]
+chr4-04	EST_Human	nucleotide_match	283062	283520	357.000000	-	.	Target=BG181940.1 71 524 +;percentID=89.8;Gap=M86 I2 M77 I1 M56 D2 M3 D1 M90 D5 M139 ;sequence=CGGTCTGTATCTGGGTTTTTTACTACTTCTGCATGACAATGAATATCTGATAGAAAAAAGAAATGTATACTTGAATTATGATAGCTCATCCACCACAGTTTAATCTAAAAATGAAATTTCTACAGAAACAGGAACTATTTTGACAAAGAAAAAAAAAATCCCTCATCCAAACTTCTTTGTAGTGGTAAAGGCTGCAAATTTGCAGCGTTTAGAAAACTACACTATCAACAAGCTTTGCTTTATGGACTGAGATGTACAAAATCTAGAAAGCAGATGAAAGTGAATTATTTCAAAGTTTTAGTAAAACTTCTGATAATCAGAGTTCAAAGCAAA [...]
+chr4-04	EST_Human	nucleotide_match	338023	338235	28.000000	+	.	Target=CD358872.1 230 433 +;percentID=60.4;Gap=M16 D1 M2 D1 M30 I1 M15 D1 M3 D1 M7 D1 M11 D3 M2 D1 M22 D1 M5 D1 M14 I1 M20 I2 M21 D2 M32 
+chr4-04	EST_Human	nucleotide_match	283070	283474	323.000000	-	.	Target=BM987890.1 11 410 +;percentID=90.9;Gap=M40 I2 M77 I1 M56 D2 M3 D1 M90 D5 M131 ;sequence=TTTTTTTTTTTTTCTACAGAAACAGGAACTATTTTGACAAAGAAAAAAAAAATCCCTCATCCAAACTTCTTTGTAGTGGTAAAGGCTGCAAATTTGCAGCGTTTAGAAAACTACACTATCAACAAGCTTTGCTTTATGGACTGAGATGTACAAAATCTAGAAAGCAGATGAAAGTGAATTATTTCAAAGTTTTAGTAAAACTTCTGATAATCAGAGTTCAAAGCAAATATGGCACATAACAACTCAAGCATAAATCAAGATGGAGAGCCTGGAGAGTTTCTTAAATTTTCCAAAAAGCTATCATTCCAACATGTAGGATTTCTCCCCTATTTT [...]
+chr4-04	EST_Human	nucleotide_match	337571	337697	127.000000	+	.	Target=DB074733.1 175 301 +;percentID=100;sequence=GTCTTTGCGTCTGGCTACTACCAGACCGCGGGTTAGGGGCTTCATCTCTCTGCGTTCTCAGTTGTGGGAGGCCTTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTGGTAGCTAAGACTCCCGAATACTTCAGAAGTGGGGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGACCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTGTTGCTATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAAGAAAAGAGCCCTACAATGTGAAGATACATAA [...]
+chr4-04	EST_Human	nucleotide_match	283084	283520	343.000000	-	.	Target=AA843154.1 51 481 +;percentID=90.2;Gap=M71 I1 M92 I1 M56 D2 M3 D1 M90 D5 M117 ;sequence=TACTACTACTGCATGACAATGAATATCTGATAGAAAAAAGAAATGTATACTTGAATTATGATAGCTCATCCATCACAGTTTAATCTAAAAATGAAATTTCTACAGAAACAGGAACTATTTTGAAAAAAAAAAAAAAATCCCTCATCCAAACTTCTTTGTAGTGGTAAAGGCTGCAAATTTGCAGCGTTTAGAAAACTACACTATCAACAAGCTTTGCTTTATGGACTGAGATGTACAAAATCTAGAAAGCAGATGAAAGTGAATTATTTCAAAGTTTTAGTAAAACTTCTGATAATCAGAGTTCAAAGCAAATATGGCACATAACAACTCAAG [...]
+chr4-04	EST_Human	nucleotide_match	337571	337697	127.000000	+	.	Target=DA533464.1 175 301 +;percentID=100;sequence=GTCTTTGCGTCTGGCTACTACCAGACCGCGGGTTAGGGGCTTCATCTCTCTGCGTTCTCAGTTGTGGGAGGCCTTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTGGTAGCTAAGACTCCCGAATACTTCAGAAGTGGGGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGACCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTGTTGCTATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAAGAAAAGAGCCCTACAATGTGAAGATACATAA [...]
+chr4-04	EST_Human	nucleotide_match	283111	283522	328.000000	-	.	Target=AI494074.1 3 409 +;percentID=90.8;Gap=M88 I2 M77 I1 M56 D2 M3 D1 M90 D5 M90 ;sequence=TTTTTTTTTTTATGATAGCTCATCCATCACAGTTTAATCTAAAAATGAAATTTCTACAGAAACAGGAACTATTTTGACAAAGAAAAAAAAAATCCCTCATCCAAACTTCTTTGTAGTGGTAAAGGCTGCAAATTTGCAGCGTTTAGAAAACTACACTATCAACAAGCTTTGCTTTATGGACTGAGATGTACAAAATCTAGAAAGCAGATGAAAGTGAATTATTTCAAAGTTTTAGTAAAACTTCTGATAATCAGAGTTCAAAGCAAATATGGCACATAACAACTCAAGCATAAATCAAGATGGAGAGCCTGGAGAGTTTCTTAAATTTTCCAAAA [...]
+chr4-04	EST_Human	nucleotide_match	337571	337697	127.000000	+	.	Target=DA224929.1 173 299 +;percentID=100;sequence=CTTTGCGTCTGGCTACTACCAGACCGCGGGTTAGGGGCTTCATCTCTCTGCGTTCTCAGTTGTGGGAGGCCTTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTGGTAGCTAAGACTCCCGAATACTTCAGAAGTGGGGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGACCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTGTTGCTATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAAGAAAAGAGCCCTACAATGTGAAGATACATAAGA [...]
+chr4-04	EST_Human	nucleotide_match	283332	283775	333.000000	-	.	Target=CB146734.1 139 587 +;percentID=87.8;Gap=M129 I2 M1 I1 M7 I1 M203 D1 M21 I1 M58 I1 M24 ;sequence=ATTTTTTTTTTTTTTTTTTAGTAGAGACGGGGTTTCACCGTGTTAGCCAGGATGATCTCTATCTCCTGACCTTGTGATCTGCCTGCCTTGGCCTCCCAAAGTGCTGGGATTACAGGCGTGAGCCACCGTGCCCTTTCTAGCCGCATCCTTTTAAATTATTCATCTGTTGAAGGATGTTTGAGGTTTTTCACTTTTTGGCTTTTGTAAGTAATATGGTTTGGATCTGTGGCGCCATTCAAATCTCACATCAAATTGTAAGCCTGAATGTTGTAGGTGGGGCCTGGTGGGAGGTGACTGGATTATATGGTTGGATTCTCATGAATCA [...]
+chr4-04	EST_Human	nucleotide_match	337571	337697	127.000000	+	.	Target=DB136011.1 172 298 +;percentID=100;sequence=TTTGCGTCTGGCTACTACCAGACCGCGGGTTAGGGGCTTCATCTCTCTGCGTTCTCAGTTGTGGGAGGCCTTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTGGTAGCTAAGACTCCCGAATACTTCAGAAGTGGGGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGACCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTGTTGCTATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAAGAAAAGAGCCCTACAATGTGAAGATACATAAGAT [...]
+chr4-04	EST_Human	nucleotide_match	287971	288229	140.000000	-	.	Target=BF964632.1 344 616 +;percentID=78.5;Gap=M4 I1 M70 I1 M4 I1 M24 I1 M1 I1 M30 I1 M1 I1 M2 I1 M38 I1 M10 I1 M17 I1 M2 I1 M10 I1 M6 I1 M20 I1 M13 D1 M6 
+chr4-04	EST_Human	nucleotide_match	288533	289027	282.000000	-	.	Target=BU179167.1 340 869 +;percentID=80.6;Gap=M79 D1 M31 I1 M19 I2 M6 I1 M6 I1 M17 I1 M82 I1 M1 I1 M1 I4 M1 I1 M1 I1 M3 I1 M52 I1 M18 I1 M3 I1 M4 I1 M5 I1 M8 I1 M2 I1 M23 I1 M1 I5 M15 I1 M14 I1 M8 I1 M7 I1 M8 I1 M5 I1 M15 D1 M7 D4 M11 I1 M4 I1 M4 I1 M6 I1 M5 I1 M5 I1 M9 I1 M3 ;sequence=CTCCTTAGGGAAGCCTCGGTGATTCTGCCACAGCCTCAGCCTCTGTGGCTCTGTGACCTGCCGGTATTGGATGATTCGTATCTAAGACTCTGGGACACTCCTGAAGTCGGGAAATGGAACTCTTAACATTCAAGGATGTG [...]
+chr4-04	EST_Human	nucleotide_match	338124	338197	66.000000	-	.	Target=AA935244.1 3 76 +;percentID=94.6;sequence=TCATGTATCTTCACTTTGTAGGGCTCCTTTCTTTGCTCCAGATAGATGACCAGGTCTGGGTTAGAGATAGCAACACCCAGGGAGATCAGGTTCCTGTAGGTCTCCAACAT
+chr4-04	EST_Human	nucleotide_match	288675	288915	188.000000	-	.	Target=AA349226.1 1 242 +;percentID=88.9;Gap=M30 I1 M18 I1 M177 D1 M15 ;sequence=TTGAGGAGCTGTATGTCAAAGTATTTTTTTTCAAATATTCTTTTCGTATTATGTCTAAAATGTGTAACGTGAGTAGTGGACATAGTGGGATTTGGTTCAGAAATCCCAGGAACACCAAGGACAGATGTTGCCTCTTTNCTACTTAGTGTTTTTNAATCCTATGGAGGCTGCAAATGTAATTCTACAAAAATTCTTACTTAGCAATTTTATCAGAACAATAAGCATTTCCTAAATATGAAAAA
+chr4-04	EST_Human	nucleotide_match	338124	338223	50.000000	+	.	Target=DB244653.1 346 441 +;percentID=77;Gap=M78 D1 M1 D2 M13 D1 M4 ;sequence=ACTCTCAAGCGCGCCGCGAAAGGAGGGAGCAGCTTCCGGGACCTGGCGCGGCTTTTGTGTTGGGCAGCGCGAATGTGGCGAGCTCGGTGCGTCTCCGCTGCTCCTTCCCCTTATCCCTGGGAGGTCCAAGTGGTCCCGCGGCAGCTTCTGTTGCTCTGGGACCTGCAGGTCCCGGAAGGTCCTTAGGGAGGACCCCAGACACCGGAGACTGGGAAATGGGACTATTGGCATTCAGGGATGTGGCTCTAGAATTCTCTCCAGAGGAGTGGGAATGCCTGGACCCAGCTCAGCGGAGTTTGTATAGGGATGTGATGTTAGAGAACTACAGAAACCTGATCTCCCTTGGTCTTG [...]
+chr4-04	EST_Human	nucleotide_match	288733	289153	327.000000	-	.	Target=BG400733.1 304 725 +;percentID=89.4;Gap=M56 D1 M63 I2 M117 I1 M31 I1 M18 I1 M42 D1 M55 D1 M6 D1 M29 ;sequence=TGCAGTGGCTCATGCCTGTAATCCAAGGACTTTGGGAGGCCGAGGCAGGCGGATCACGAGGTCAAGAGATCGAGATCATCCTGGCCAACATGGTGAAGCCCCGTCTCTACTAAAAATACAAAAATTAGCTGGGCATGGTGGTGCGCACCTGGAGTCCCAGCTACTCGGGAGGCTGAAGCAGGAGAATCACTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCACCACTGCACTCCAGCCTGGTGACAGAGTTAGACTCCGTCTCAAAAAATAAAATAAAATAAAAAATAAACCAGGTAGTTTG [...]
+chr4-04	EST_Human	nucleotide_match	288909	289153	201.000000	+	.	Target=BI016270.1 1 245 +;percentID=91.5;Gap=M8 I1 M44 D1 M13 I1 M122 D1 M56 ;sequence=TCCTCAGTAACACAAATATTCCAGTGTCTCCAAAAGCAATGGAACAGCAGTCAATCATGCAGCCCCTTTATAAGCGATAAAGTGGACATTAGCTCTCCCTGTAAACTTAAAGGGAGATCACTAAAGAAAAAAGAGAATTCTTGGATTTAACAGCATGGAACAGAAGATGCCCCTATTTGTGAACATGAGACAAAATGCAGCTTTTTCAGAAATTATTTTCACTGGAGCAGAGCTTCCCAAACTACCTGGTTTATTTCTCCATTTCATTTTATTTTT
+chr4-04	EST_Human	nucleotide_match	338124	338219	74.000000	+	.	Target=CV024709.1 131 226 +;percentID=88.5
+chr4-04	EST_Human	nucleotide_match	288964	289027	48.000000	-	.	Target=EL736128.1 227 290 +;percentID=87.5;sequence=ATGGAACTCTTAACATTCAAGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGTCTGGACATTTCCCAGCAGAATTTATATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTGGGTGTTACTATCTCTAACCCAGACCTGGTCACCAGTCTGGAGCAAAGAAAAGAGCCCTACAATTTGAAGATACATGAAACAGCAGCCAGACCCCCAGTGATCTCCCTTCAAGTTTACAGGGAGTGCCAGTGTCCACTTTATCACTTACAAAGGGCTACATGCCCAACTTTCTTGTACAAAGTTGGCATTATAAGAAAGCATTGCTTATCAATTTGTTGCAACGAACAGGTCACTATCAGTCAAAATAA [...]
+chr4-04	EST_Human	nucleotide_match	338056	338581	522.000000	-	.	Target=DB295442.1 1 527 +;percentID=99.6;Gap=M128 I1 M398 ;sequence=GAGACGGAGTCTAACTCTGTCACCAGGCTGGAGTGCAGTGGTGTGATCTTGGCTCACTGCAACCTCCGCCTCCTGGGTTCAAGTGATTCTCCTGCCTCAGCCTCCCGAGTAGCTGGGACTCCAGGTGCCGCACCACCATGCCCAGCTAATTTTTGTATTTTTAGTAGAGACGGGGTTTCACCATGTTGGCCAGGATGATCTCGATCTCTTGACCTCGTGATCCGCCTGCCTCGGCCTCCCAAAGTCCTTGGATTACAGGCATGAGCCACTGCACCCGGCCCCAAACCACATTTTAAGGCCTGGCTTCCTTCTTGACCTTTGGTCCCCTTGCCTGTGCCCTCTCCTCCATTCACTCTCACC [...]
+chr4-04	EST_Human	nucleotide_match	289059	289174	-1.000000	-	.	Target=DA311782.1 360 480 +;percentID=57.7;Gap=M5 I2 M5 I1 M12 D1 M10 I2 M3 I1 M1 I1 M6 I2 M12 D2 M6 D1 M1 D1 M16 I1 M17 D1 M9 I2 M4 D1 M2 
+chr4-04	EST_Human	nucleotide_match	289128	289384	186.000000	+	.	Target=DB295442.1 267 527 +;percentID=87.1;Gap=M11 D1 M2 D2 M38 I1 M144 I1 M8 I2 M7 I2 M7 I1 M37 
+chr4-04	EST_Human	nucleotide_match	338124	338222	53.000000	+	.	Target=BM462194.1 298 396 +;percentID=76.8;sequence=TTGTGTCCCCTGCTAGCCGTAGGCCGTGTGACCCGCAGGCACCGGGAGATCCAGAAGTGAAACGCCAGGCTCTCTGGAGGCCAGGAGATGGTGTGATTTGTCCAGAGAATCTTTCCTAAGAGGAAATCCCAGAGAAGCAGGAGAAAGAGAAAGAAATGGCTGGTGCTCAGACTCTGTTGACGTTCAGGGATGTGGCCATAGAATTCTCCCTGGAGGAGTGGAAATGCCTGGACCTCGCTCAGCAGAATTTGTACAGGGATGTGATGTTGGAGAACTACAGAAACTTGTTCTCCGTTGGTCTCACTGTCTGTAAGCCAGGCCTGATCACCTGCCTGGAGCAACGAAAAGAGCCCTGGAATGTGAAGAGACAGGAGGCA [...]
+chr4-04	EST_Human	nucleotide_match	289163	289305	36.000000	-	.	Target=DA628344.1 184 332 +;percentID=66.9;Gap=M9 I1 M3 I2 M4 I2 M3 I1 M33 I1 M1 I1 M6 D1 M1 D1 M44 I1 M7 D1 M5 D1 M5 I1 M12 I1 M2 D1 M3 
+chr4-04	EST_Human	nucleotide_match	338124	338252	25.000000	+	.	Target=DB050382.1 250 379 +;percentID=62.7;Gap=M4 I1 M2 I1 M2 D1 M2 D1 M4 D1 M5 I1 M10 I1 M2 D1 M85 I1 M9 
+chr4-04	EST_Human	nucleotide_match	289163	289305	36.000000	-	.	Target=DA145375.1 194 342 +;percentID=66.9;Gap=M9 I1 M3 I2 M4 I2 M3 I1 M33 I1 M1 I1 M6 D1 M1 D1 M44 I1 M7 D1 M5 D1 M5 I1 M12 I1 M2 D1 M3 
+chr4-04	EST_Human	nucleotide_match	338124	338242	61.000000	+	.	Target=DB479243.2 200 318 +;percentID=75.6;sequence=GTAGGCCGTGTGACCCGCAGGCACCGGGAGATCCAGAAGTGAAACGCCAGGCTCTCTGGAGGCCAGGAGATGACTCTGTTGACGTTCAGGGATGTGGCCATAGAATTCTCCCTGGAGGAGTGGAAATGCCTGGACCTCGCTCAGCAGAATTTGTACAGGGATGTGATGTTGGAGAACTACAGAAACTTGTTCTCCGTTGGTCTCACTGTCTGTAAGCCAGGCCTGATCACCTGCCTGGAGCAACGAAAAGAGCCCTGGAATGTGAAGAGACAGGAGGCAGCAGACGGACATCCAGGTGGGTGGGAATGAACGAAGCAGGTAACCCAGAGATGGGATTTCACCATGCTACTCAGGCTTGTCTTGAACTCCTGGGCTCA [...]
+chr4-04	EST_Human	nucleotide_match	289194	289305	34.000000	-	.	Target=DB075319.1 351 469 +;percentID=68.6;Gap=M9 I1 M3 I2 M4 I2 M3 I1 M33 I1 M1 I1 M6 D1 M1 D1 M44 I1 M6 ;sequence=AAAACAGCTTTAACCTGGATGTGGAGGAGGATGACATTGAGAATTTCTTAGAGGTGGTTCATGAGGAATGGGTTAATGAGGAGTCATTGGAACTGATACAGGAACATGTAGCTGAAGAAGAGGCAAGAGAATAGGGAACCTGGCTGGGCACNGGTGGCCTCACATCTATAATCCCTGCACTTTGGGAGGCCGAGGCAGGTGGATCACTTGAGGGACACTTGACATTCAGGGACGTGGCCATAGAATTCTCTCAGGAGGAGTGGAAATGCCTGGACCCTGTGCAGAAGGCTTTATACAGGGATGTGATGTTGGA [...]
+chr4-04	EST_Human	nucleotide_match	338124	338219	68.000000	-	.	Target=BX281319.1 295 390 +;percentID=85.4;sequence=TGGAAGATATCTCTCCAGTATGTCTTATCTTATGTCTATTTAGATTTGACGATTTACTAAAGACTTTCACACATTTATTAAATTGAAAGATTTTGGTATGTGTAGTTGATAAAGATTGGTTAAGTCCATTACAACATTCTTTCTGCACCTTAGATTCACCCACACTTTCCCAATCTTTCTTTAATTGTAAATTCTCAATGCCATAGCTTCCATATCTTCTCAGTATCACTTTTTGAAATGAATCTTTTATACCATGCTCTGGCAAGAGGTCTTGGGTGAAATGAGAAGAAACAGCTGGGTGTCTGGCTACTGTCTCATGTTTCTTCACATTCCAGGGCTCATTCCTTTGCTCTAGACAGGTGATCAGGTCTGGCTTA [...]
+chr4-04	EST_Human	nucleotide_match	289194	289305	34.000000	-	.	Target=DA825213.1 173 291 +;percentID=68.6;Gap=M9 I1 M3 I2 M4 I2 M3 I1 M33 I1 M1 I1 M6 D1 M1 D1 M44 I1 M6 ;sequence=GGATGGCTGTGGAGATATGGCGCAACTGCGGCGCGGACACTTGACATTCAGGGACGTGGCCATAGAATTCTCTCAGGAGGAGTGGAAATGCCTGGACCCTGTGCAGAAGGCTTTATACAGGGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGAATCTGTCTTCCTGACCTGAGTATTATCTCCATGATGAAGCAAAGGACAGAGCCCTGGACTGTGGAGAATGAAATGAAAGTAGCAAAAAATCCAGATAGGTGGGAAGGTATCAAAGATATCAACACAGGGAGGAGCTGTGCAGTGAGAAGC [...]
+chr4-04	EST_Human	nucleotide_match	338124	338219	73.000000	+	.	Target=DB056944.1 301 396 +;percentID=87.5;sequence=GTTTTTCCTCTGGCTCCTGCGAGGGCTTGGTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCCGGGAAATGGAACTCGTAACATTCAGGGATGTGGCCATAGAATTCTCCCCTGAAGAGTGGAAATGTCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTTTTGTGATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAATAAAAGAGCCCTGCAATTTGAAGATACATGAG [...]
+chr4-04	EST_Human	nucleotide_match	289194	289305	34.000000	-	.	Target=DB093425.1 348 466 +;percentID=68.6;Gap=M9 I1 M3 I2 M4 I2 M3 I1 M33 I1 M1 I1 M6 D1 M1 D1 M44 I1 M6 
+chr4-04	EST_Human	nucleotide_match	338124	338219	80.000000	+	.	Target=BU179167.1 244 339 +;percentID=91.7
+chr4-04	EST_Human	nucleotide_match	289194	289305	34.000000	-	.	Target=DB039972.1 345 463 +;percentID=68.6;Gap=M9 I1 M3 I2 M4 I2 M3 I1 M33 I1 M1 I1 M6 D1 M1 D1 M44 I1 M6 
+chr4-04	EST_Human	nucleotide_match	338124	338225	52.000000	+	.	Target=BM153152.1 231 332 +;percentID=75.5;sequence=GGTCCCCGCGGCTCTGTGTCCCCTGCTAGCCGTAGGCCGTGTGACCCGCAGGCACCGGGAGATCCAGAAGTGAAACGCCAGGCTCTCTGGAGGCCAGGATACTACNTTGTTGACGTTCAGGGATGTGGCCATAGAATTCTCCCTGGAGGAGTGGAAATGCCTGGACCTCGCTCAGCAGAATTTGTACAGGGATGTGATGTTGGAGAACTACAGAAACTTGTTCTCCGTTGGTCTCACTGTCTGTAAGCCAGGCCTGATCACCTGCCTGGAGCAACGAAAAGAGCCCTGGAATGTGAAGAGACAGGAGGCAGCAGACGGACATCCAGCTATGTCTTCTCATTTTACCCAAGACCTTCTGCCAGAGCAGGGCATACAAG [...]
+chr4-04	EST_Human	nucleotide_match	289195	289417	27.000000	-	.	Target=DA281897.1 248 469 +;percentID=59.9;Gap=M5 I1 M11 D1 M4 D1 M20 I1 M1 I1 M11 D1 M12 D1 M9 I1 M10 D1 M25 D1 M4 D1 M4 D1 M3 I1 M7 I1 M25 I1 M3 D1 M8 D1 M2 I1 M36 I1 M13 
+chr4-04	EST_Human	nucleotide_match	338124	338222	53.000000	+	.	Target=DA039065.1 296 394 +;percentID=76.8;sequence=GTGTCCCCTGCTAGCCGTAGGCCGTGTGACCCGCAGGCACCGGGAGATCCAGAAGTGAAACGCCAGGCTCTCTGGAGGCCAGGAGATGGTGTGATTTGTCCAGAGAATCTTTCCTAAGAGGAAATCCCAGAGAAGCAGGAGAAAGAGAAAGAAATGGCTGGTGCTCAGACTCTGTTGACGTTCAGGGATGTGGCCATAGAATTCTCCCTGGAGGAGTGGAAATGCCTGGACCTCGCTCAGCAGAATTTGTACAGGGATGTGATGTTGGAGAACTACAGAAACTTGTTCTCCGTTGGTCTCACTGTCTGTAAGCCAGGCCTGATCACCTGCCTGGAGCAACGAAAAGAGCCCTGGAATGTGAAGAGACAGGAGGCAGC [...]
+chr4-04	EST_Human	nucleotide_match	289195	289417	27.000000	-	.	Target=CK001884.1 255 476 +;percentID=59.9;Gap=M5 I1 M11 D1 M4 D1 M20 I1 M1 I1 M11 D1 M12 D1 M9 I1 M10 D1 M25 D1 M4 D1 M4 D1 M3 I1 M7 I1 M25 I1 M3 D1 M8 D1 M2 I1 M36 I1 M13 
+chr4-04	EST_Human	nucleotide_match	338124	338229	24.000000	+	.	Target=DB084699.1 368 473 +;percentID=64.5;Gap=M4 I1 M2 I1 M2 D1 M2 D1 M4 D1 M5 I1 M10 I1 M2 D1 M71 
+chr4-04	EST_Human	nucleotide_match	289195	289322	60.000000	-	.	Target=DB479243.2 200 327 +;percentID=73.4
+chr4-04	EST_Human	nucleotide_match	338124	338229	24.000000	+	.	Target=AU143777.1 167 272 +;percentID=64.5;Gap=M4 I1 M2 I1 M2 D1 M2 D1 M4 D1 M5 I1 M10 I1 M2 D1 M71 
+chr4-04	EST_Human	nucleotide_match	289207	289322	45.000000	-	.	Target=BG708988.1 371 488 +;percentID=70.6;Gap=M97 I1 M7 I1 M3 D1 M3 I1 M5 
+chr4-04	EST_Human	nucleotide_match	338124	338219	74.000000	+	.	Target=DA703911.1 289 384 +;percentID=88.5;sequence=GGCTCCTGCGAGGGCTTGGTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGGAACTCGTAACATTCAGGGATGTGGCCATAGAATTCTCCCCTGAAGAGTGGAAATGTCTGGACCCTGCCCGGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTTTTGTGATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAATAAAAGAGCCCTGCAATTTGAAGATACATGAGACAGCAGCCAAA [...]
+chr4-04	EST_Human	nucleotide_match	289214	289322	50.000000	-	.	Target=BG576135.1 242 352 +;percentID=74.1;Gap=M97 I1 M3 I2 M3 D1 M5 
+chr4-04	EST_Human	nucleotide_match	338124	338284	28.000000	+	.	Target=DA628344.1 173 332 +;percentID=62.3;Gap=M4 I1 M2 I1 M2 D1 M2 D1 M4 D1 M5 I1 M10 I1 M2 D1 M85 I1 M9 D1 M6 D1 M3 I1 M5 D1 M15 
+chr4-04	EST_Human	nucleotide_match	289216	289322	81.000000	-	.	Target=DA803616.1 302 406 +;percentID=88.8;Gap=M96 D1 M4 D1 M5 
+chr4-04	EST_Human	nucleotide_match	289216	289322	81.000000	-	.	Target=DA224929.1 300 404 +;percentID=88.8;Gap=M96 D1 M4 D1 M5 
+chr4-04	EST_Human	nucleotide_match	289216	289322	81.000000	-	.	Target=DA418713.1 302 406 +;percentID=88.8;Gap=M96 D1 M4 D1 M5 
+chr4-04	EST_Human	nucleotide_match	338124	338219	50.000000	+	.	Target=DB447371.2 350 445 +;percentID=76
+chr4-04	EST_Human	nucleotide_match	289218	289322	79.000000	-	.	Target=DA460146.1 337 439 +;percentID=88.6;Gap=M96 D1 M1 D1 M6 
+chr4-04	EST_Human	nucleotide_match	289219	289322	53.000000	-	.	Target=BU954839.1 315 415 +;percentID=78.3;Gap=M41 I1 M9 D1 M18 D2 M2 D1 M4 D1 M3 I1 M22 
+chr4-04	EST_Human	nucleotide_match	338124	338219	74.000000	+	.	Target=DB203397.1 255 350 +;percentID=88.5;sequence=CTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCGGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGGAACTCGTAACATTCAGGGATGTGGCCATAGAATTCTCCCCTGAAGAGTGGAAATGTCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTTTTGTGATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAATAAAAGAGCCCTGCAATTTGAAGATACATGAGACAGCAGCCAAACCCCCAGCTATATGTTCTCCTTTCAGCCAAGACC [...]
+chr4-04	EST_Human	nucleotide_match	289220	289322	52.000000	-	.	Target=EL735851.1 167 266 +;percentID=78.1;Gap=M41 I1 M9 D1 M18 D2 M2 D1 M4 D1 M3 I1 M21 
+chr4-04	EST_Human	nucleotide_match	338124	338219	74.000000	+	.	Target=DB111318.1 297 392 +;percentID=88.5;sequence=TTTCCTCTGGCTCCTGCGAGGGCTTGGTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGGAACTCGTAACATTCAGGGATGTGGCCATAGAATTCTCCCCTGAAGAGTGGAAATGTCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTTTTGTGATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAATAAAAGAGCCCTGCAATTTGAAGATACATGAGACAG [...]
+chr4-04	EST_Human	nucleotide_match	289220	289322	75.000000	-	.	Target=CN265977.1 253 355 +;percentID=86.4;sequence=GGATTGATCCCACCTAGAATCTGCATACAAAAGTTGGCCTCTGCCTGGGATTCCCAACACTGGACCAGACTTTGGGTTGAAGACATACGAAAAACTCACAGAAGACATTTTCTGCATCATGAGAGGAACTCTTAACATTCAAGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGTCTGGACATTTCCCAGCAGAATTTATATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTGGGTGTTACTATCTCTAACCCAGACCTGGTCACCAGTCTGGAGCAAAGAAAAGAGCCCTACAATTTGAAGATACATGAAACAGCAGCCAGACCCCCAGCTGTGTGTTCTCATTTCACCCAAAACCTT [...]
+chr4-04	EST_Human	nucleotide_match	289221	289322	50.000000	-	.	Target=BM153152.1 231 332 +;percentID=74.5
+chr4-04	EST_Human	nucleotide_match	338124	338225	54.000000	+	.	Target=DA000562.1 257 358 +;percentID=76.5;sequence=CTTTGTCCCGACAGAGCTCCACTTCCTGTCCCCGCGGCTCTGTGTCCCCTGCTAGCCGTAGGCCGTGTGACCCGCAGGCACCGGGAGATCCAGAAGTGAAACGCCAGGCTCTCTGGAGGCCAGGAGATGACTCTGTTGACGTTCAGGGATGTGGCCATAGAATTCTCCCTGGAGGAGTGGAAATGCCTGGACCTCGCTCAGCAGAATTTGTACAGGGATGTGACGTTGGAGAACTACAGAAACTTGTTCTCCGTTGGTCTCACTGTCTGTAAGCCAGGCCTGGTCACCTGCCTGGAGCAACGAAAAGAGCCCTGGAATGTGAAGAGACAGGAGGCAGCAGACGGACATCCAGCTATGTCTTCTCATTTTACCCAAGA [...]
+chr4-04	EST_Human	nucleotide_match	289221	289322	52.000000	-	.	Target=DA000562.1 257 358 +;percentID=75.5
+chr4-04	EST_Human	nucleotide_match	338124	338226	61.000000	+	.	Target=BG717274.1 442 544 +;percentID=79.6;sequence=AGCGGGGGTACTTGATCCAGGTATATGTCACATTCCCAACTGTTGGCTGGGCCCAAGCAAATTAGTAAAATAAATTAGGTGCTGTGTGAAAGTATACGCCACAATCACACCTGCGGGAAGGACCAGGAATAAATTTCACAATTCTACGTATTTCCCAGCTTTAGGTCTGAGAGTCTACACTTCTGAGCTCCAGTTCTTCTCTTCACTGCTCTGCGTCCTCTGTTCCTAGAGGCCAAGCCACTGTGGCCTTGTGTTCTGCAGGTATCCGCAGATTTATGGCTAAAAGACCGGGATCCCCTGGAAGCCGAGAAATGGGACTGTTGACATTCAGAGATGTAGTCATAGAATTCTCTCTGGAGGAGTGGCAATGCCTGGAT [...]
+chr4-04	EST_Human	nucleotide_match	289223	289322	52.000000	-	.	Target=DB152890.1 282 377 +;percentID=79.4;Gap=M41 I1 M9 D1 M18 D2 M2 D1 M4 D1 M3 I1 M14 D1 M3 ;sequence=CTTTTTGTCTCCTTGCGGCCGGCGGGGTGCTGGGTTCCCGTCTGCTGCCTCTCGGAGAGTCCCGGGTGACTGCCGCAGGCTCCATCGCCCTGTGGCCTGCAGGTATTGCGAGATTTATAGGGAGGACGCTGGGACCCCCAAAAGCTGGGAAATGGGACTATTGGCATTCAGGGATGTGGCTCTAGAATTCTCTCCAGAGGAGTGGGAATGCCTGGACCCAGCTCAGCGGAGTTTGTATAGGGATGTGATGTTAGAGAACTACAGAAACCTGATCTCCCTTGGTCTTGCTATGTCTAAGCCAGAACTGATCATCTGTCTGGAGGC [...]
+chr4-04	EST_Human	nucleotide_match	338124	338228	75.000000	+	.	Target=AI525680.1 280 383 +;percentID=85.7;Gap=M95 D1 M9 ;sequence=TGACAGGAATTCGGCACGAGCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGGAACTCGTAACATTCAGGGATGTGGCCATAGAATTCTCCCCTGAAGAGTGGAAATGTCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTTTTGTGATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAATAAAAGAGCCCTGCAATTTGAAGATACATGAGACAGCA [...]
+chr4-04	EST_Human	nucleotide_match	289223	289322	52.000000	-	.	Target=DB244653.1 346 441 +;percentID=79.4;Gap=M41 I1 M9 D1 M18 D2 M2 D1 M4 D1 M3 I1 M14 D1 M3 
+chr4-04	EST_Human	nucleotide_match	338124	338219	70.000000	-	.	Target=T69725.1 174 268 +;percentID=85.4;Gap=M43 D1 M52 
+chr4-04	EST_Human	nucleotide_match	289223	289322	79.000000	-	.	Target=DB136011.1 299 397 +;percentID=90;Gap=M96 D1 M3 
+chr4-04	EST_Human	nucleotide_match	289224	289322	51.000000	-	.	Target=DA081687.1 258 356 +;percentID=75.8;sequence=CTTTTGTCCCGACAGAGCTCCACTTCCTGTCCCCGCGGCTCTGTGTCCCCTGCTAGCCGTAGGCCGTGTGACCCGCAGGCACCGGGAGATCCAGAAGTGAAACGCCAGGCTCTCTGGAGGCCAGGAGATGACTCTGTTGACGTTCAGGGATGTGGCCATAGAATTCTCCCTGGAGGAGTGGAAATGCCTGGACCTCGCTCAGCAGAATTTGTACAGGGATGTGATGTTGGAGAACTACAGAAACTTGTTCTCCGTTGGTCTCACTGTCTGTAAGCCAGGCCTGATCACCTGCCTGGAGCAACGAAAAGAGCCCTGGAATGTGAAGAGACAGGAGGCAGCAGACGGACATCCAGGTATTTTCTTTGTGGTTACCATGG [...]
+chr4-04	EST_Human	nucleotide_match	338124	338219	80.000000	+	.	Target=EL736128.1 131 226 +;percentID=91.7
+chr4-04	EST_Human	nucleotide_match	289224	289322	51.000000	-	.	Target=DA039065.1 296 394 +;percentID=75.8
+chr4-04	EST_Human	nucleotide_match	338124	338219	74.000000	+	.	Target=CD689816.1 300 395 +;percentID=88.5;sequence=GTATCGGCCATTATGGCCGGGGGGGCTTGGTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCGCAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGGAACTCGTAACATTCAGGGATGTGGCCATAGAATTCTCCCCTGAAGAGTGGAAATGTCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTTTTGTGATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAATAAAAGAGCCCTGCAATTTGAAGATACATGAGA [...]
+chr4-04	EST_Human	nucleotide_match	289224	289322	51.000000	-	.	Target=DA644046.1 325 423 +;percentID=75.8;sequence=AGAGCTCCACTTCCTGTCCCCGCGGCTCTGTGTCCCCTGCTAGCCGTAGGCCGTGTGACCCGCAGGCACCGGGAGATCCAGAAGTGAAACGCCAGGCTCTCTGGAGGCCAGGAGATGGTGTGATTTGTCCAGAGAATCTTTCCTAAGAGGAAATCCCAGAGAAGCAGGAGAAAGAGAAAGAAATGGCTGGTGCTCAGACTCTGTTGACGTTCAGGGATGTGGCCATAGAATTCTCCCTGGAGGAGTGGAAATGCCTGGACCTCGCTCAGCAGAATTTGTACAGGGATGTGATGTTGGAGAACTACAGAAACTTGTTCTCCGTTGGTCTCACTGTCTGTAAGCCAGGCCTGATCACCTGCCTGGAGCAACGAAAAGAG [...]
+chr4-04	EST_Human	nucleotide_match	338124	338219	74.000000	+	.	Target=DB201918.1 301 396 +;percentID=88.5;sequence=TTTTTTTCCTCTGGCTCCTGCGAGGGCTTGGTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGGAACTCGTAACATTCAGGGATGTGGCCATAGAATTCTCCCCTGAAGAGTGGAAATGTCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTTTTGTGATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAATAAAAGAGCCCTGCAATTTGAAGATACATGAG [...]
+chr4-04	EST_Human	nucleotide_match	289224	289322	51.000000	-	.	Target=BM462194.1 298 396 +;percentID=75.8
+chr4-04	EST_Human	nucleotide_match	338124	338219	74.000000	+	.	Target=DA685292.1 264 359 +;percentID=88.5;sequence=GCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGGAACTCGTAACATTCAGGGATGTGGCCATAGAATTCTCCCCTGAAGAGTGGAAATGTCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTTTTGTGATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAATAAAAGAGCCCTGCAATTTGAAGATACATGAGACAGCAGCCAAACCCCCAGCTATATGTTCTCCTTTCA [...]
+chr4-04	EST_Human	nucleotide_match	289227	289288	48.000000	-	.	Target=DB170146.1 228 289 +;percentID=88.7
+chr4-04	EST_Human	nucleotide_match	289227	289322	51.000000	-	.	Target=DA809929.1 352 444 +;percentID=79.6;Gap=M41 I1 M9 D1 M18 D2 M2 D1 M4 D1 M3 I1 M14 
+chr4-04	EST_Human	nucleotide_match	338124	338219	74.000000	+	.	Target=DA422914.1 293 388 +;percentID=88.5;sequence=CTCTGGCTCCTGCGAGGGCTTGGTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGGAACTCGTAACATTCAGGGATGTGGCCATAGAATTCTCCCCTGAAGAGTGGAAATGTCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTTTTGTGATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAATAAAAGAGCCCTGCAATTTGAAGATACATGAGACAGCAGC [...]
+chr4-04	EST_Human	nucleotide_match	289227	289322	68.000000	+	.	Target=BX281319.1 295 390 +;percentID=85.4
+chr4-04	EST_Human	nucleotide_match	338124	338219	74.000000	+	.	Target=BI561969.1 304 399 +;percentID=88.5
+chr4-04	EST_Human	nucleotide_match	289227	289322	71.000000	-	.	Target=DB056944.1 301 396 +;percentID=86.5
+chr4-04	EST_Human	nucleotide_match	289227	289322	72.000000	-	.	Target=BI560805.1 294 389 +;percentID=87.5;sequence=AGCGGGGCTCCTGCGAGGGCTTGGTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGGAACTCGTAACATTCAGGGATGTGGCCATAGAATTCTCCCCTGAAGAGTGGAAATGTCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTTTTGTGATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAATAAAAGAGCCCTGCAATTTGAAGATACATGAGACAGCAG [...]
+chr4-04	EST_Human	nucleotide_match	289227	289322	72.000000	-	.	Target=CV024709.1 131 226 +;percentID=87.5
+chr4-04	EST_Human	nucleotide_match	289227	289322	72.000000	-	.	Target=AI525680.1 280 375 +;percentID=87.5
+chr4-04	EST_Human	nucleotide_match	338124	338219	80.000000	+	.	Target=DA571532.1 290 385 +;percentID=91.7
+chr4-04	EST_Human	nucleotide_match	289227	289322	72.000000	-	.	Target=AL545089.3 286 381 +;percentID=87.5;sequence=TCCCGGGATGCTTGGTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGGAACTCGTAACATTCAGGGATGTGGCCATAGAATTCTCCCCTGAAGAGTGGAAATGTCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACGTACAGGAACCTGGTCTCCCTGGGTTTTGTGATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAATAAAAGAGCCCTGCAATTTGAAGATACATGAGACAGCAGCCAAACCC [...]
+chr4-04	EST_Human	nucleotide_match	289227	289322	72.000000	-	.	Target=DA888845.1 298 393 +;percentID=87.5;sequence=TTTTCCTCTGGCTCCTGCGAGGGCTTGGTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGGAACTCGTAACATTCAGGGATGTGGCCATAGAATTCTCCTCTGAAGAGTGGAAATGTCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTTTTGTGATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAATAAAAGAGCCCTGCAATTTGAAGATACATGAGACA [...]
+chr4-04	EST_Human	nucleotide_match	338124	338219	74.000000	+	.	Target=DA888845.1 298 393 +;percentID=88.5
+chr4-04	EST_Human	nucleotide_match	289227	289322	72.000000	-	.	Target=CD689816.1 300 395 +;percentID=87.5
+chr4-04	EST_Human	nucleotide_match	289227	289322	72.000000	-	.	Target=DB203397.1 255 350 +;percentID=87.5
+chr4-04	EST_Human	nucleotide_match	289227	289322	72.000000	-	.	Target=DB201918.1 301 396 +;percentID=87.5
+chr4-04	EST_Human	nucleotide_match	289227	289322	72.000000	-	.	Target=DB111318.1 297 392 +;percentID=87.5
+chr4-04	EST_Human	nucleotide_match	289227	289322	72.000000	-	.	Target=DA685292.1 264 359 +;percentID=87.5
+chr4-04	EST_Human	nucleotide_match	289227	289322	72.000000	-	.	Target=DA917260.1 293 388 +;percentID=87.5;sequence=CTCTGGCTCCTGCGAGGGCTTGGTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGGAACTCGTAACATTCAGGGATGTGGCCATAGAATTCTCCCCTGAAGAGTGGAAATGTCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTTTTGTGATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAATAAAAGAGCCCTGCAATTTGAAGATACATGAGACAGCAGC [...]
+chr4-04	EST_Human	nucleotide_match	289227	289322	72.000000	-	.	Target=DB187202.1 291 386 +;percentID=87.5;sequence=CTGGCTCCTGCGAGGGCTTGGTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGGAACTCGTAACATTCAGGGATGTGGCCATAGAATTCTCCCCTGAAGAGTGGAAATGTCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTTTTGTGATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAATAAAAGAGCCCTGCAATTTGAAGATACATGAGACAGCAGCCA [...]
+chr4-04	EST_Human	nucleotide_match	289227	289322	72.000000	-	.	Target=DA422914.1 293 388 +;percentID=87.5
+chr4-04	EST_Human	nucleotide_match	289227	289322	72.000000	-	.	Target=DA703911.1 289 384 +;percentID=87.5
+chr4-04	EST_Human	nucleotide_match	289227	289322	72.000000	-	.	Target=BI561969.1 304 399 +;percentID=87.5
+chr4-04	EST_Human	nucleotide_match	289227	289322	72.000000	-	.	Target=BU854428.1 310 405 +;percentID=87.5
+chr4-04	EST_Human	nucleotide_match	289227	289322	73.000000	-	.	Target=CD385642.1 313 407 +;percentID=88.5;Gap=M18 D1 M77 
+chr4-04	EST_Human	nucleotide_match	289227	289322	74.000000	-	.	Target=BU179167.1 244 339 +;percentID=88.5
+chr4-04	EST_Human	nucleotide_match	289227	289322	74.000000	-	.	Target=DA571532.1 290 385 +;percentID=88.5
+chr4-04	EST_Human	nucleotide_match	289227	289322	74.000000	-	.	Target=EL736128.1 131 226 +;percentID=88.5
+chr4-04	EST_Human	nucleotide_match	289227	289322	76.000000	-	.	Target=BP231503.1 300 395 +;percentID=89.6
+chr4-04	EST_Human	nucleotide_match	289227	289322	77.000000	-	.	Target=DA385292.1 309 403 +;percentID=90.6;Gap=M90 D1 M5 
+chr4-04	EST_Human	nucleotide_match	289227	289322	78.000000	-	.	Target=CD654571.1 276 371 +;percentID=90.6
+chr4-04	EST_Human	nucleotide_match	289227	289322	78.000000	-	.	Target=BM800016.1 287 382 +;percentID=90.6
+chr4-04	EST_Human	nucleotide_match	289227	289322	78.000000	-	.	Target=DB074733.1 302 397 +;percentID=90.6
+chr4-04	EST_Human	nucleotide_match	289227	289322	78.000000	-	.	Target=DB135798.1 303 398 +;percentID=90.6
+chr4-04	EST_Human	nucleotide_match	289227	289322	78.000000	-	.	Target=DA564196.1 302 397 +;percentID=90.6;sequence=GTCTTTGCGTCTGGCTACTACCAGACCGCGGGTTAGGGGCTTCATCTCTCTGCGTCCTCAGTTCTGGGAGGCCTTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTGGTAGCTAAGACTCCCGAATACTTCAGAAGTGGGGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGACCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTGTTGCTATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAAGAAAAGAGCCCTACAATGTGAAGATACATAA [...]
+chr4-04	EST_Human	nucleotide_match	289227	289322	78.000000	-	.	Target=DB221880.1 333 428 +;percentID=90.6
+chr4-04	EST_Human	nucleotide_match	289227	289322	78.000000	-	.	Target=DA801371.1 302 397 +;percentID=90.6;sequence=GTCTTTGCGTCTGGCTACTACCAGACCGCGGGTTAGGGGCTACATCTCTCTGCGTCCTCAGTTCTGGGAGGCATTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTGGTATCTAAGACTCCCGAATACTTCAGAAGTGGGGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGACCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTGTTGCTATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAAGAAAAGAGCCCTACAATGTGAAGATACATAA [...]
+chr4-04	EST_Human	nucleotide_match	289227	289322	78.000000	-	.	Target=BU177765.1 285 380 +;percentID=90.6;sequence=GGACCAGACCGCGGGTTAGGGGCTTCATCTCTCTGCGTTCTCAGTTGTGGGAGGCCTTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTGGTAGCTAAGACTCCCGAATACTTCAGAAGTGGGGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGACCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTGTTGCTATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAAGAAAAGAGCCCTACAATGTGAAGATACATAAGATCGTAGCCAGACCCC [...]
+chr4-04	EST_Human	nucleotide_match	289227	289322	78.000000	-	.	Target=DA002438.1 280 375 +;percentID=90.6;sequence=AGACCGCGGGTTAGGGGCTTCATCTCTCTGCGTTCTCAGTTGTGGGAGGCCTTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTGGTAGCTAAGACTCCCGAATACTTCAGAAGTGGGGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGACCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTGTTGCTATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAAGAAAAGAGCCCTACAATGTGAAGATACATAAGATCGTAGCCAGACCCCCAGAT [...]
+chr4-04	EST_Human	nucleotide_match	289227	289322	78.000000	-	.	Target=DA757889.1 300 395 +;percentID=90.6
+chr4-04	EST_Human	nucleotide_match	289227	289322	96.000000	-	.	Target=DC397567.1 142 237 +;percentID=100
+chr4-04	EST_Human	nucleotide_match	289247	289322	76.000000	+	.	Target=AA935244.1 1 76 +;percentID=100
+chr4-04	EST_Human	nucleotide_match	338124	338219	96.000000	+	.	Target=DA757889.1 300 395 +;percentID=100
+chr4-04	EST_Human	nucleotide_match	289565	289735	25.000000	-	.	Target=DB080772.1 335 506 +;percentID=59.7;Gap=M9 I1 M3 I1 M10 D1 M2 D1 M25 I1 M16 D1 M8 I1 M35 D1 M49 I1 M10 ;sequence=TGGCCTACTGGATGCGCGCAAACCCGGAAGCGGATTATGTGGAGTGAAAGTTACACCGTGGCGGATTGACTTCTAAGGACTCTTGGTACATGAGGAAGAAACCCGGAAGGGGAAGAGGAAAGCAAAGGCGTCAGGAATGGTTCTTCCTCAGGGTCTATTGACATTCAGGGATGTGGCCATAGAATTCTCTCAGGAGGAGTGGAAATGCCTGGACCCTGCTCAGAGGACTCTATACAGAGATGTGATGTTGGAGAATTATAGGAACCTGGTCTCCCTGGGTGAGGATAACTTCCCTCCAGAAGTGGGGAT [...]
+chr4-04	EST_Human	nucleotide_match	338124	338219	78.000000	+	.	Target=DC397567.1 142 237 +;percentID=90.6
+chr4-04	EST_Human	nucleotide_match	289565	289735	25.000000	-	.	Target=CN417586.1 356 527 +;percentID=59.7;Gap=M9 I1 M3 I1 M10 D1 M2 D1 M25 I1 M16 D1 M8 I1 M35 D1 M49 I1 M10 ;sequence=GCGTCCGCCTGGCTTCTGTACTGCGCGCGCACATGCGCGCAAACCCGGAAGCGGATTATGTGGAGTGAAAGTTACACCGTGGCGGATTGACTTCTAAGGACTCTTGGTACATGAGGAAGAAACCCGGAAGGGGAAGAGGAAAGCAAAGGCGTCAGGAATGGTTCTTCCTCAGGGTCTATTGACATTCAGGGATGTGGCCATAGAATTCTCTCAGGAGGAGTGGAAATGCCTGGACCCTGCTCAGAGGACTCTATACAGAGATGTGATGTTGGAGAATTATAGGAACCTGGTCTCCCTGGGTGAGGATAA [...]
+chr4-04	EST_Human	nucleotide_match	289645	289945	219.000000	-	.	Target=DA804383.1 125 426 +;percentID=87.3;Gap=M169 D2 M39 D1 M10 I2 M2 I2 M31 D1 M28 I1 M18 ;sequence=ATTGCCTTGTGTCCTCTGCTCCGGGAGACTTCGGTGATTCTGCCACTCACTCCGTCGCTCTGTGACCTGCTGGCATTGAATGATTTATAGCTAAGACTCCAGGACACCCCTGAAGCCGAGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTAGACCCTGCCCAACAGAATTTATATAGAGATGTGATGTTGGAGAACTACAGAAACCTCGTCTCCCTGGGTGAGAATAACTTCAATACATAATTCCTAATTCTCCCTCAGAGTTTTATTTTCTTTCTTTGTAGACTGTCTCT [...]
+chr4-04	EST_Human	nucleotide_match	289663	289945	216.000000	-	.	Target=BP199153.1 159 440 +;percentID=89.2;Gap=M169 D2 M39 D1 M10 I2 M2 I2 M29 D1 M1 D1 M28 ;sequence=ACTCACTTCAGCCAGAGCGCGGGGTTAGGGCTTCATTGCCTTGTGTCCTCTGCTCCGGGAGACTTCGGTGATTCTGCCACTCACTCCGTCGCTCTGTGACCTGCTGGCATTGAATGATTTATAGCTAAGACTCCAGGACACCCCTGAAGCCGAGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTAGACCCTGCCCAACAGAATTTATATAGAGATGTGATGTTGGAGAACTACAGAAACCTCGTCTCCCTGGGTGAGAATAACTTCAATACATAATTCCTAATTCTCCCTCA [...]
+chr4-04	EST_Human	nucleotide_match	289720	289947	109.000000	+	.	Target=N94749.1 50 272 +;percentID=75.7;Gap=M12 D1 M13 D1 M1 D1 M12 D1 M1 D1 M20 I1 M2 I1 M5 D2 M155 
+chr4-04	EST_Human	nucleotide_match	338124	338219	74.000000	+	.	Target=BI560805.1 294 389 +;percentID=88.5
+chr4-04	EST_Human	nucleotide_match	289720	289950	111.000000	+	.	Target=DB346087.1 51 277 +;percentID=75.5;Gap=M12 D1 M13 D1 M1 D1 M12 D1 M1 D1 M20 I1 M2 I1 M5 D1 M159 
+chr4-04	EST_Human	nucleotide_match	338124	338219	93.000000	+	.	Target=DA385292.1 309 403 +;percentID=99;Gap=M89 D1 M6 
+chr4-04	EST_Human	nucleotide_match	289738	289945	174.000000	-	.	Target=BP260998.1 148 353 +;percentID=92.3;Gap=M169 D2 M37 ;sequence=AGCTCGGTTAGGGCCTGGCTTCCGTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGGCGTAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGGTGAGGATAACTTTAATGCGTAATTCCTAATACTCCCTCTGAGTTTTATTTTCTATTTTTGTAGAATGTCTTTTGAGATATATC [...]
+chr4-04	EST_Human	nucleotide_match	289746	289945	171.000000	-	.	Target=BF964632.1 147 343 +;percentID=93.5;Gap=M169 D2 M18 D1 M10 
+chr4-04	EST_Human	nucleotide_match	289764	289948	111.000000	-	.	Target=DB080772.1 148 334 +;percentID=80.2;Gap=M180 I2 M5 
+chr4-04	EST_Human	nucleotide_match	289764	289948	111.000000	-	.	Target=CN417586.1 169 355 +;percentID=80.2;Gap=M180 I2 M5 
+chr4-04	EST_Human	nucleotide_match	289774	289945	104.000000	-	.	Target=DA809929.1 188 351 +;percentID=82.6;Gap=M157 D1 M1 D2 M1 D3 M4 D2 M1 
+chr4-04	EST_Human	nucleotide_match	289774	289945	104.000000	-	.	Target=EL735851.1 3 166 +;percentID=82.6;Gap=M157 D1 M1 D2 M1 D3 M4 D2 M1 
+chr4-04	EST_Human	nucleotide_match	289774	289945	105.000000	-	.	Target=BU954839.1 151 314 +;percentID=82.6;Gap=M157 D1 M1 D2 M1 D3 M4 D2 M1 
+chr4-04	EST_Human	nucleotide_match	289774	289945	106.000000	-	.	Target=BP240055.1 162 332 +;percentID=81.5;Gap=M148 D1 M9 I1 M6 D1 M7 
+chr4-04	EST_Human	nucleotide_match	289780	289938	102.000000	-	.	Target=DA224550.1 382 540 +;percentID=82.5;Gap=M152 D1 M2 I1 M4 ;sequence=ATGCGCAGTTTCCTACAGGCCCGGAAACGGATCGCGTTGGGTGAAGGTGACGGCGTCGAGCGTGAGTGACCCTCTGTGTAGATTAAACCTGCGCTCCCTGTTTCCCATTTCCACAGCCGATGTCCAGGGTCGATACGGCCCTTAAAATCCCCGCACACTCCACCCCAGAAAGGTGGGAGACAATGCCTTGGAGCTGCAAATCTTCTCTGAGTCTGAAGCATCCTGCCTGACGCGTTTGCTCACATTGACCCGTGCCTTCCCTCAGTCCTTCTCATCTCTACTGAGATTCCGTCTCACCCTGACCCTGTGACATGAACTTCTGAAGAGTCCACTGGGCATGGTCCTGGGAAGGGC [...]
+chr4-04	EST_Human	nucleotide_match	338738	339173	289.000000	+	.	Target=CD385642.1 408 857 +;percentID=82.4;Gap=M229 I1 M99 I1 M8 I1 M11 I1 M18 I1 M12 I2 M7 I1 M4 I1 M8 I1 M2 I1 M2 I2 M15 I1 M21 
+chr4-04	EST_Human	nucleotide_match	289786	289945	111.000000	-	.	Target=BG026620.1 117 270 +;percentID=87;Gap=M133 D1 M1 D3 M3 I1 M13 D2 M2 D1 M1 
+chr4-04	EST_Human	nucleotide_match	289803	289945	113.000000	-	.	Target=DA311782.1 219 359 +;percentID=90.2;Gap=M134 D1 M3 D1 M4 
+chr4-04	EST_Human	nucleotide_match	289804	289948	103.000000	-	.	Target=BU537030.1 136 280 +;percentID=85.5;sequence=GGGAGACCAGGAAGCGGATCCCGTGGAATGACGGTCACGCCGCGGCGGGCGGATTGACTTCTAAAGAATCTTGGTACGTGAGGAAGAAACCCAGAAGAGGAAGAGGAAAGCAAAGGAGTCAGGGATGGCTCTTCCTCAGGGTCTATTGACATTCAGGGACGTGGCCATAGAATTCTCTCAGGAGGAGTGGAAATGCCTGGACCCTGCTCAGAGGACTCTTTACAGGGATGTGATGCTGGAGAATTATAGGAACCTGGTCTCCCTGGGTGAGGATAACCTCCTGGGGATGTGCCCTTGTGTATCTTTGTATTTTCTCTTGTTGCCTCTTGGGAGCCACATCCTTACTTGACTAAAATGGAAGCCGTATTGATTTTGA [...]
+chr4-04	EST_Human	nucleotide_match	338124	338223	97.000000	+	.	Target=DB136011.1 299 397 +;percentID=99;Gap=M95 D1 M4 
+chr4-04	EST_Human	nucleotide_match	289809	289942	88.000000	-	.	Target=DA628344.1 48 183 +;percentID=83.2;Gap=M126 I2 M8 
+chr4-04	EST_Human	nucleotide_match	289809	289942	88.000000	-	.	Target=DA825213.1 37 172 +;percentID=83.2;Gap=M126 I2 M8 
+chr4-04	EST_Human	nucleotide_match	289809	289942	89.000000	-	.	Target=DA145375.1 58 193 +;percentID=83.2;Gap=M126 I2 M8 
+chr4-04	EST_Human	nucleotide_match	289809	289949	91.000000	-	.	Target=DB075319.1 208 350 +;percentID=82.6;Gap=M133 I2 M8 
+chr4-04	EST_Human	nucleotide_match	289809	289949	91.000000	-	.	Target=DB093425.1 205 347 +;percentID=82.6;Gap=M133 I2 M8 
+chr4-04	EST_Human	nucleotide_match	289809	289949	91.000000	-	.	Target=DB039972.1 202 344 +;percentID=82.6;Gap=M133 I2 M8 
+chr4-04	EST_Human	nucleotide_match	289815	289944	122.000000	-	.	Target=DA501191.1 230 359 +;percentID=96.9;sequence=ACTGCCCAATCAGGCGCGCAGTCTGAGAGGAGGGGGCGGCATCCGGGATCTTCGGCGGCCTTGGCCTGTTGCTTCAGCCTGAGCTCGGTTAGGGCCTCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGGTGTCTGGAAATGAAGTATG [...]
+chr4-04	EST_Human	nucleotide_match	338124	338219	96.000000	+	.	Target=CD654571.1 276 371 +;percentID=100
+chr4-04	EST_Human	nucleotide_match	289815	289944	122.000000	-	.	Target=AU138611.1 150 279 +;percentID=96.9
+chr4-04	EST_Human	nucleotide_match	338124	338219	96.000000	+	.	Target=DA460146.1 337 432 +;percentID=100
+chr4-04	EST_Human	nucleotide_match	289815	289944	122.000000	-	.	Target=DN989940.1 138 267 +;percentID=96.9
+chr4-04	EST_Human	nucleotide_match	338124	338219	96.000000	+	.	Target=BP200889.1 302 397 +;percentID=100
+chr4-04	EST_Human	nucleotide_match	289815	289945	123.000000	-	.	Target=CD688651.1 190 320 +;percentID=96.9;sequence=CTTGATATCGAATCGTATCGGCCATTATGGCCGGGGAGCCTGAGCTCGGTTAGGGCCTCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGGTGTCTGGAAATGAAGTATAGAAATGAAATCATGAATAAAGACCCAGTTTTCAGAATCT [...]
+chr4-04	EST_Human	nucleotide_match	338124	338219	74.000000	+	.	Target=DB187202.1 291 386 +;percentID=88.5
+chr4-04	EST_Human	nucleotide_match	289815	289945	123.000000	-	.	Target=BU156411.1 134 264 +;percentID=96.9;sequence=CTCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGGTGTCTGGAAATGAAGTATGGAAATGAAATCATGAATAAAGACCCAGTTTTCAGAATCTCTCCACGAAGTAGAGGAACTCATACCAATCCAGAAGAGCCTGAAGAAGATGTTCAA [...]
+chr4-04	EST_Human	nucleotide_match	338267	338497	99.000000	+	.	Target=CN417586.1 503 736 +;percentID=72.8;Gap=M1 I1 M17 D1 M81 I2 M98 I1 M6 D1 M4 I1 M22 
+chr4-04	EST_Human	nucleotide_match	289817	289958	92.000000	-	.	Target=BM800078.1 418 560 +;percentID=82.5;Gap=M10 I1 M132 
+chr4-04	EST_Human	nucleotide_match	338124	338223	97.000000	+	.	Target=DA803616.1 302 400 +;percentID=99;Gap=M95 D1 M4 
+chr4-04	EST_Human	nucleotide_match	289817	289933	95.000000	-	.	Target=DA102026.1 317 433 +;percentID=90.6;sequence=GCAGCTTGAGAGGCGGAGGGGGTTTCCGGGATCTGGCGGGGCCTTTGTCTTGTGCTCCAGCTGGAGCTTTGGTCCCGTATTCTCGGCTATTTATCCCCAGCTGCGGGAGGCCCTGGTGACTCTGCTGCTGCAGTGTCTGGTTTCCCTGTGACCTGCAGGTACNTGGGAGTTACATAGCTAAGATGCCAGGACACCCCGAAAGCCGGAAAACGAGACGCATTCTCACTATGTTGCCCAGGCTGGTCTTGAACTCCTTCCCTCAAGTGATTCTTCTGCCTAATCCTCCCAAAGTTCTTAGATTACAGGGACTACTGGCATTCAGTGATGTGGTCATAGAATTCTCTCCAGAGGAGTGGGCATGCCTGGACCCTGCCCAG [...]
+chr4-04	EST_Human	nucleotide_match	338302	338608	162.000000	+	.	Target=AV725968.1 252 562 +;percentID=76.4;Gap=M64 I1 M1 I1 M60 D1 M43 I1 M5 D1 M81 I1 M31 I2 M1 I1 M4 D1 M14 
+chr4-04	EST_Human	nucleotide_match	289817	289933	95.000000	-	.	Target=DA703641.1 265 381 +;percentID=90.6;sequence=GTGCTCCAGCTGGAGCTTTGGTCCCGTATTCTCGGCTATTTATCCCCAGCTGCGGGAGGCCCTTGTGACTCTGCTGCTGCAGTGTCTGGTTTCCCTGTGACCTGCAGGTACTGGGAGTTACATAGCTAAGATGCCAGGACACCCCGAAAGCCGGAAAACGAGACGCATTCTCACTATGTTGCCCAGGCTGGTCTTGAACTCCTTCCCTCAAGTGATTCTTCTGCCTAATCCTCCCAAAGTTCTTAGATTACAGGGACTACTGGCATTCAGTGATGTGGTCATAGAATTCTCTCCAGAGGAGTGGGCATGCCTGGACCCTGCCCAGCGAAATTTGTATAGGGATGTGATGTTCGAGAACTACAGAAACCTGGTCTCCC [...]
+chr4-04	EST_Human	nucleotide_match	338124	338230	97.000000	+	.	Target=BX485984.1 290 394 +;percentID=96.3;Gap=M95 D1 M2 D1 M8 
+chr4-04	EST_Human	nucleotide_match	289817	289933	95.000000	-	.	Target=DA692754.1 287 403 +;percentID=90.6;sequence=GATCTGGCGGGGCCTTTGTCTTGTGCTCCAGCTGGAGCTTTGGTCCCGTATTCTCGGCTATTTATCCCCAGCTGCGGGAGGCCCTGGTGACTCTGCTGCTGCAGTGTCTGGTTTCCCTGTGACCTGCAGGTACTGGGAGTTACATAGCTAAGATGCCAGGACACCCCGAAAGCCGGAAAACGAGACGCATTCTCACTATGTTGCCCAGGCTGGTCTTGAACTCCTTCCCTCAAGTGATTCTTCTGCCTAATCCTCCCAAAGTTCTTAGATTACAGGGACTACTGGCATTCAGTGATGTGGTCATAGAATTCTCTCCAGAGGAGTGGGCATGCCTGGACCCTGCCCAGCGAAATTTGTATAGGGATGTGATGTTCGAG [...]
+chr4-04	EST_Human	nucleotide_match	338124	338219	80.000000	+	.	Target=CN265977.1 253 348 +;percentID=91.7
+chr4-04	EST_Human	nucleotide_match	289817	289945	121.000000	+	.	Target=AI095103.1 326 454 +;percentID=96.9
+chr4-04	EST_Human	nucleotide_match	338142	338219	35.000000	+	.	Target=DA809929.1 370 444 +;percentID=74.7;Gap=M60 D1 M1 D2 M14 
+chr4-04	EST_Human	nucleotide_match	289818	289851	32.000000	+	.	Target=AA935244.1 77 110 +;percentID=97.1
+chr4-04	EST_Human	nucleotide_match	289818	289941	88.000000	-	.	Target=DA000562.1 133 256 +;percentID=85.5
+chr4-04	EST_Human	nucleotide_match	289818	289933	88.000000	+	.	Target=BX281319.1 391 506 +;percentID=87.9
+chr4-04	EST_Human	nucleotide_match	289818	289958	89.000000	-	.	Target=DB263540.1 248 389 +;percentID=81.7;Gap=M10 I1 M131 ;sequence=AGACCAGGAAGCGGATCCCGTGGAGTGAAGGTCGCACCGCGGCGTAGAGATGGGGTTTCTCCATGTTGGTCAGTATGGTCTCGAACTCCCGACATCAGGTGATCCGCCTGCCTCGGCCTCCCAAAGTGCTGGGATTACAGGTGTGAGCCACCGCACTCAGCCTCCCTGTTTTGAAGGATTGACTTCTAAAGACTTGGTACGTGAGGAAAAAACACGGAAGAGGAAGAGGAAAGCAAAGGAGTCAGGGATGGCTCTTCCTCAGGGTCTACTGACATTCAGGGATGTGGCCATAGAATTCTCTCAGGAGGAGTGGAAATGCCTGGACCCTGCTCAGAGGACTCTATACAGAGACGTGATGCT [...]
+chr4-04	EST_Human	nucleotide_match	338147	338219	41.000000	+	.	Target=DB170146.1 219 289 +;percentID=80;Gap=M4 D2 M67 
+chr4-04	EST_Human	nucleotide_match	289818	289938	89.000000	-	.	Target=DA259842.1 283 403 +;percentID=86.8
+chr4-04	EST_Human	nucleotide_match	338267	338364	35.000000	+	.	Target=DA237788.1 473 570 +;percentID=69.6;Gap=M1 I1 M17 D1 M79 ;sequence=ACATGCGCGCAAACCCGGAAGCGGATTATGTGGAGTGAAAGTTACACCGTGGCGGATTGACTTCTAAGGACTCTTGGTACATGAGGAAGAAACCCGGAAGGGGAAGAGGAAAGCAAAGGCGTCAGGAATGGTTCTTCCTCAGGGTCTATTGACATTCAGGGATGTGGCCATAGAATTCTCTCAGGAGGAGTGGAAATGCCTGGACCCTGCTCAGAGGACTCTATACAGAGACGTGATGTTGGAGAATTATAGGAACCTGGTCTCCCTGGGTGAGGATAACTTCCCTCCAAAAGTGGGGATGTTCCCTTGTGTATCTTTGCATTTTCTCTTGTTTCTCTTGGGAGTTGCATCCTTG [...]
+chr4-04	EST_Human	nucleotide_match	289818	289938	89.000000	-	.	Target=AA125955.1 99 219 +;percentID=86.8
+chr4-04	EST_Human	nucleotide_match	338124	338219	74.000000	+	.	Target=DA917260.1 293 388 +;percentID=88.5
+chr4-04	EST_Human	nucleotide_match	289818	289938	89.000000	-	.	Target=DA072857.1 275 395 +;percentID=86.8
+chr4-04	EST_Human	nucleotide_match	338277	338520	119.000000	+	.	Target=DB029777.1 328 576 +;percentID=75.3;Gap=M7 I1 M8 I2 M9 D1 M61 I1 M1 I1 M125 I1 M32 ;sequence=GGGGCTGGATGTGGAGGAGGATGACATTGAGAATCTCTTAGAGGTGGTTCATGAGGAATGGGTTAATGAGGAGTCATTGGAACTGATACAGGAACATGTAGCTGAAGAAGAGGGACACTTGACATTCAGGGACGTGGCCATAGAATTCTCTCAGGAGGAGTGGAAATGCCTGGACCCTGTGCAGAAGGCTTTATACAGGGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTAAGGATAATGCCCCTCCAGAAGTTGGGGTCTGCCCTTAGTATCTCTGCATTTTCCCTTGTGTGCCTCTTGGGAGCCCCTGCATTGCT [...]
+chr4-04	EST_Human	nucleotide_match	289818	289938	89.000000	-	.	Target=DA483132.1 275 395 +;percentID=86.8;sequence=AAACGGATCGCGTTGGGTGAAGGTGACGGCGTCGAGCGACCTCTCTGACCTCATCTCCTGCCTGTGTCCTCCTCGCTCCCTCTGCTCCAGCCAAGCATGCGTCCTTCCTGTTCCTGGGCCGAGCTTGCTCCTGCCTCAAGGCCTTCACGTGGGCTGTGCCTCTGCTGGAACTCGCTGGCCCCTCAGCTGCAGCATTGACTTCCAAAGACTCCTGGCACATGAGGAAGAAACCCAGAAGAGGAGAGCAAAGGAGTCAGGAATGGCTTTTACTCAGTTGACATTCAGGGACGTGGCCATCGAATTCTCTCAAGATGAGTGGAAATGCCTGAACTCTACACAGAGGACTTTATACAGGGATGTGATGTTGGAGAACTACA [...]
+chr4-04	EST_Human	nucleotide_match	338302	338561	106.000000	+	.	Target=AV742687.1 331 575 +;percentID=73.5;Gap=M8 D1 M3 I2 M53 I1 M25 D1 M28 D3 M3 D2 M10 D1 M9 D1 M1 D1 M9 I1 M2 D1 M16 D1 M31 D1 M2 D1 M1 D1 M7 D1 M4 D1 M6 D1 M6 D1 M17 
+chr4-04	EST_Human	nucleotide_match	289818	289946	89.000000	-	.	Target=BG708988.1 242 370 +;percentID=85.5;Gap=M4 I1 M3 D1 M79 I1 M2 D1 M39 
+chr4-04	EST_Human	nucleotide_match	289818	289938	89.000000	-	.	Target=BM153152.1 110 230 +;percentID=86.8
+chr4-04	EST_Human	nucleotide_match	289818	289946	89.000000	-	.	Target=DA321991.1 202 330 +;percentID=84.5;sequence=CTATATATGCAAACCCTTTGGGATGGCCACTAAATTTGTCACAGAGTATGGTAACAGTGGTTGACTGAACCACAGCCATGAAAGTGAGCTTCCAGCTCTTCTGCTGTTGCACCGCAGTCCACATTGCCAGCATTGATGGAACGGGCATCAGCCTCCATCTTCTCCTCAATGGACGTGATCACGTGGGCCAGCATTGCCTGGAGGGTCTATTGACATTCAGGGACGTGGCCATAGAATTCTCTCAGGAGGAGTGGAAATGCCTGGACCCTGCTCAGAGGACTCTTTACAGGGATGTGATGCTGGAGAATTATAGGAACCTGGTCTCCCTGGATTTTCGGTCTGTCACCCAGGCTAAAGTGCAGTGGTGTCACCTNGGC [...]
+chr4-04	EST_Human	nucleotide_match	338310	339034	694.000000	+	.	Target=BG400733.1 1 725 +;percentID=98.1;Gap=M416 I2 M148 I1 M66 D1 M57 D1 M5 D1 M30 
+chr4-04	EST_Human	nucleotide_match	289818	289941	90.000000	-	.	Target=DB479243.2 76 199 +;percentID=86.3
+chr4-04	EST_Human	nucleotide_match	289818	289941	90.000000	-	.	Target=DA081687.1 134 257 +;percentID=86.3
+chr4-04	EST_Human	nucleotide_match	289818	289941	90.000000	-	.	Target=BG576135.1 118 241 +;percentID=86.3
+chr4-04	EST_Human	nucleotide_match	289818	289958	91.000000	-	.	Target=BQ690668.1 423 564 +;percentID=82.4;Gap=M9 I1 M132 ;sequence=TCTCAACCTTTAGGCGCCTGAAGCGCAAACGTCGCGATCCCAGTCTCAGGGAGGCCGAGTTCTCTGCCTGGTGCTGGGATCTTGTGGACCCCACCGAAGGCGTCGTCGCACCCCACCTCCCGCCTCATGCTGGGCCTTGCTGCACCCCAAGTCTCCCCTTAGCAGTCACCACTTTCCTTGAGCCAGCGTTGGGGAGGTGCCAGGGGCCAGTCCTGTGACACGAGATGGGGTTTCTCCATGTTGGTCAGGATGGTCTCGAACTCCCGACATCAGGTGATCCGCCTGCCTCGGCCTCCCAAAGTGCTGGGATTACAGGTGTGAGCCACCGCACTCAGCCTCCCTGTTTTGAAGGATTGACTTC [...]
+chr4-04	EST_Human	nucleotide_match	337571	337697	127.000000	+	.	Target=BP231503.1 173 299 +;percentID=100
+chr4-04	EST_Human	nucleotide_match	289818	289948	91.000000	-	.	Target=DA039065.1 165 295 +;percentID=84.7
+chr4-04	EST_Human	nucleotide_match	289818	289948	91.000000	-	.	Target=DA644046.1 194 324 +;percentID=84.7
+chr4-04	EST_Human	nucleotide_match	289818	289948	91.000000	-	.	Target=BM462194.1 167 297 +;percentID=84.7
+chr4-04	EST_Human	nucleotide_match	289818	289945	96.000000	-	.	Target=DB152890.1 154 281 +;percentID=87.5
+chr4-04	EST_Human	nucleotide_match	289818	289945	96.000000	-	.	Target=DB244653.1 218 345 +;percentID=87.5
+chr4-04	EST_Human	nucleotide_match	289818	289944	111.000000	-	.	Target=BU179167.1 117 243 +;percentID=93.7
+chr4-04	EST_Human	nucleotide_match	289818	289944	111.000000	-	.	Target=DA571532.1 163 289 +;percentID=93.7
+chr4-04	EST_Human	nucleotide_match	289818	289945	112.000000	-	.	Target=EL736128.1 3 130 +;percentID=93.8
+chr4-04	EST_Human	nucleotide_match	289818	289946	113.000000	-	.	Target=CN265977.1 124 252 +;percentID=93.8
+chr4-04	EST_Human	nucleotide_match	289818	289945	116.000000	-	.	Target=AL545089.3 157 285 +;percentID=95.3;Gap=M106 I1 M22 
+chr4-04	EST_Human	nucleotide_match	289818	289945	116.000000	-	.	Target=DA888845.1 170 297 +;percentID=95.3
+chr4-04	EST_Human	nucleotide_match	289818	289945	116.000000	-	.	Target=DA703911.1 161 288 +;percentID=95.3
+chr4-04	EST_Human	nucleotide_match	289818	289945	118.000000	-	.	Target=BI560805.1 166 293 +;percentID=96.1
+chr4-04	EST_Human	nucleotide_match	289818	289945	118.000000	-	.	Target=CV024709.1 3 130 +;percentID=96.1
+chr4-04	EST_Human	nucleotide_match	289818	289945	118.000000	-	.	Target=DR002880.1 170 297 +;percentID=96.1;sequence=CACGAGGCTGGCTCCTGCGAGGGCTTGGTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGGAACTCGTAACATTCAGGGATGTGGCCATAGAATTCTCCCCTGAAGAGTGGAAATGTCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTTTTGTGATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAATAAAAGAGCCCTGCAATTTGAAGATACATGAGAC [...]
+chr4-04	EST_Human	nucleotide_match	289818	289945	118.000000	-	.	Target=AI525680.1 152 279 +;percentID=96.1
+chr4-04	EST_Human	nucleotide_match	289818	289945	118.000000	-	.	Target=DA118777.1 170 297 +;percentID=96.1;sequence=CTTGGCCTGTTGCTTCAGCCTGAGCTCGGTTAGGGCCTCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCGTAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAGAAG [...]
+chr4-04	EST_Human	nucleotide_match	289818	289945	118.000000	-	.	Target=CD689816.1 172 299 +;percentID=96.1
+chr4-04	EST_Human	nucleotide_match	289818	289945	118.000000	-	.	Target=DB203397.1 127 254 +;percentID=96.1
+chr4-04	EST_Human	nucleotide_match	289818	289945	118.000000	-	.	Target=DB201918.1 173 300 +;percentID=96.1
+chr4-04	EST_Human	nucleotide_match	289818	289945	118.000000	-	.	Target=DB111318.1 169 296 +;percentID=96.1
+chr4-04	EST_Human	nucleotide_match	289818	289945	118.000000	-	.	Target=DA685292.1 136 263 +;percentID=96.1
+chr4-04	EST_Human	nucleotide_match	289818	289945	118.000000	-	.	Target=DA917260.1 165 292 +;percentID=96.1
+chr4-04	EST_Human	nucleotide_match	289818	289945	118.000000	-	.	Target=DB187202.1 163 290 +;percentID=96.1
+chr4-04	EST_Human	nucleotide_match	289818	289945	118.000000	-	.	Target=DA422914.1 165 292 +;percentID=96.1
+chr4-04	EST_Human	nucleotide_match	289818	289945	118.000000	-	.	Target=DB056944.1 173 300 +;percentID=96.1
+chr4-04	EST_Human	nucleotide_match	289818	289945	118.000000	-	.	Target=BI561969.1 176 303 +;percentID=96.1
+chr4-04	EST_Human	nucleotide_match	289818	289945	118.000000	-	.	Target=BU854428.1 182 309 +;percentID=96.1
+chr4-04	EST_Human	nucleotide_match	289818	289944	119.000000	-	.	Target=BQ069369.1 162 288 +;percentID=96.9
+chr4-04	EST_Human	nucleotide_match	289818	289944	119.000000	-	.	Target=CN399123.1 110 236 +;percentID=96.9
+chr4-04	EST_Human	nucleotide_match	289818	289944	119.000000	-	.	Target=DB095116.1 150 276 +;percentID=96.9;sequence=GAGCTCGGTTAGGGCCTCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAGAAGATATGAGAAATGTGGGCATGA [...]
+chr4-04	EST_Human	nucleotide_match	289818	289944	119.000000	-	.	Target=BP248393.1 166 292 +;percentID=96.9
+chr4-04	EST_Human	nucleotide_match	289818	289945	120.000000	-	.	Target=CD652116.1 121 248 +;percentID=96.9
+chr4-04	EST_Human	nucleotide_match	289818	289945	120.000000	-	.	Target=DA806351.1 110 237 +;percentID=96.9
+chr4-04	EST_Human	nucleotide_match	289818	289945	120.000000	-	.	Target=DA766426.1 132 259 +;percentID=96.9;sequence=ACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCAGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAGAAGATATGAGAAATGTGGGCATGATAATTTACAATTAAGGA [...]
+chr4-04	EST_Human	nucleotide_match	289818	289945	120.000000	-	.	Target=DB229909.1 162 289 +;percentID=96.9
+chr4-04	EST_Human	nucleotide_match	289818	289945	120.000000	-	.	Target=DA399659.1 134 261 +;percentID=96.9;sequence=CTCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAGAAGATATGAGAAATGTGGGCATGATAATTTACAATTAAG [...]
+chr4-04	EST_Human	nucleotide_match	289818	289945	120.000000	-	.	Target=DA758630.1 176 303 +;percentID=96.9;sequence=GGCGGCCTTGGCCTGTTGCTTCAGCCTGAGCTCGGTTAGGGCCTCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACT [...]
+chr4-04	EST_Human	nucleotide_match	289818	289945	120.000000	-	.	Target=DA799229.1 162 289 +;percentID=96.9;sequence=GTTGCTTCAGCCTGAGCTCGGTTAGGGCCTCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAGAAGATATGAGA [...]
+chr4-04	EST_Human	nucleotide_match	289818	289945	120.000000	-	.	Target=DA787611.1 165 292 +;percentID=96.9;sequence=CTGTTGCTTCAGCCTGAGCTCGGTTAGGGCCTCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAGAAGATATG [...]
+chr4-04	EST_Human	nucleotide_match	289818	289945	120.000000	-	.	Target=DB158549.1 164 291 +;percentID=96.9;sequence=CTGTTGCTTCAGCCTGAGCTCGGTTAGGGCCTCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAGAAGATATGA [...]
+chr4-04	EST_Human	nucleotide_match	289818	289945	120.000000	-	.	Target=DA741721.1 162 289 +;percentID=96.9;sequence=GTTGCTTCAGCCTGAGCTCGGTTAGGGCCTCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAGAAGATATGAGA [...]
+chr4-04	EST_Human	nucleotide_match	289818	289945	120.000000	-	.	Target=DB231938.1 164 291 +;percentID=96.9;sequence=CTGTTGCTTCAGCCTGAGCTCGGTTAGGGCCCCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAGAAGATATGA [...]
+chr4-04	EST_Human	nucleotide_match	289818	289945	120.000000	-	.	Target=DR423054.1 180 307 +;percentID=96.9;sequence=CTTCGGCGGCCTTGGCCTGTTGCTTCAGCCTGAGCTCGGTTAGGGCCTCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGTATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTA [...]
+chr4-04	EST_Human	nucleotide_match	289818	289945	120.000000	-	.	Target=DA246722.1 182 309 +;percentID=96.9;sequence=ATCTTCGGCGGCCTTGGCCTGTTGCTTCAGCCTGAGCTCGGTTAGGGCCTCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCATTCCACAAACT [...]
+chr4-04	EST_Human	nucleotide_match	289818	289945	120.000000	-	.	Target=BP273260.1 162 289 +;percentID=96.9;sequence=GTTGCTTCAGCCTGAGCTCGGTTAGGGCCTCACTTTCCTGCTTCCTTACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAGAAGATATGAGA [...]
+chr4-04	EST_Human	nucleotide_match	289818	289945	120.000000	-	.	Target=BP420960.1 163 290 +;percentID=96.9;sequence=CGTCTATTCAGCCTGAGCTCGGTTAGGGCCTCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAGAAGATATGAG [...]
+chr4-04	EST_Human	nucleotide_match	289818	289945	120.000000	-	.	Target=DA240008.1 164 291 +;percentID=96.9;sequence=CTGTTGCTTCAGCCTGAGCTCGGTTAGGGCCTCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGNGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAGAAGATATGA [...]
+chr4-04	EST_Human	nucleotide_match	289818	289945	120.000000	-	.	Target=DC411795.1 162 289 +;percentID=96.9;sequence=GTTGCTTCAGCCTGAGCTCGGTTAGGGCCTCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAGAAGATATGAGA [...]
+chr4-04	EST_Human	nucleotide_match	289818	289945	120.000000	-	.	Target=DC411178.1 162 289 +;percentID=96.9;sequence=GTTGCTTCAGCCTGAGCTCGGTTAGGGCCTCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAGAAGATATGAGA [...]
+chr4-04	EST_Human	nucleotide_match	289818	289944	121.000000	-	.	Target=CD654571.1 149 275 +;percentID=97.6
+chr4-04	EST_Human	nucleotide_match	289818	289946	121.000000	-	.	Target=DA309597.1 98 226 +;percentID=96.9
+chr4-04	EST_Human	nucleotide_match	289818	289946	121.000000	-	.	Target=DA335223.1 121 249 +;percentID=96.9
+chr4-04	EST_Human	nucleotide_match	289818	289946	121.000000	-	.	Target=DA324408.1 74 202 +;percentID=96.9;sequence=GAACAGCGGGCGGTGTTCCCGGCTCCGTGGGGCCGTCTTCCCGGCGAGTCCGCGACGGTCGCCGCCCACGGCGAGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAGAAGATATGA
+chr4-04	EST_Human	nucleotide_match	289818	289944	123.000000	-	.	Target=BM906511.1 171 297 +;percentID=98.4;sequence=GTCCGGATTTCGGGATCCAGACCGCGGGTTAGGGGCTTCATCTCTCTGCGTCCTCAGTTCTGGGAGGCCTTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTGGTAGCTAAGACTCCCGAATACTTCAGAAGTGGGGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGACCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTGTTGCTATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAAGAAAAGAGCCCTACAATGTGAAGATACATAAGAT [...]
+chr4-04	EST_Human	nucleotide_match	289818	289944	123.000000	-	.	Target=BM800016.1 160 286 +;percentID=98.4
+chr4-04	EST_Human	nucleotide_match	289818	289944	123.000000	-	.	Target=CD701489.1 216 342 +;percentID=98.4
+chr4-04	EST_Human	nucleotide_match	289818	289944	123.000000	-	.	Target=DA460146.1 210 336 +;percentID=98.4
+chr4-04	EST_Human	nucleotide_match	289818	289944	123.000000	-	.	Target=DB074733.1 175 301 +;percentID=98.4
+chr4-04	EST_Human	nucleotide_match	289818	289944	123.000000	-	.	Target=BP200889.1 175 301 +;percentID=98.4
+chr4-04	EST_Human	nucleotide_match	289818	289944	123.000000	-	.	Target=DA803616.1 175 301 +;percentID=98.4
+chr4-04	EST_Human	nucleotide_match	289818	289944	123.000000	-	.	Target=DA224929.1 173 299 +;percentID=98.4
+chr4-04	EST_Human	nucleotide_match	289818	289944	123.000000	-	.	Target=DB135798.1 176 302 +;percentID=98.4
+chr4-04	EST_Human	nucleotide_match	289818	289944	123.000000	-	.	Target=DB136011.1 172 298 +;percentID=98.4
+chr4-04	EST_Human	nucleotide_match	289818	289944	123.000000	-	.	Target=DA418713.1 175 301 +;percentID=98.4
+chr4-04	EST_Human	nucleotide_match	289818	289944	123.000000	-	.	Target=DA564196.1 175 301 +;percentID=98.4
+chr4-04	EST_Human	nucleotide_match	289818	289944	123.000000	-	.	Target=DA801371.1 175 301 +;percentID=98.4
+chr4-04	EST_Human	nucleotide_match	289818	289944	123.000000	-	.	Target=BU177765.1 158 284 +;percentID=98.4
+chr4-04	EST_Human	nucleotide_match	289818	289944	123.000000	-	.	Target=BX485984.1 163 289 +;percentID=98.4
+chr4-04	EST_Human	nucleotide_match	289818	289944	123.000000	-	.	Target=DA002438.1 153 279 +;percentID=98.4
+chr4-04	EST_Human	nucleotide_match	289818	289944	123.000000	-	.	Target=BP231503.1 173 299 +;percentID=98.4
+chr4-04	EST_Human	nucleotide_match	289818	289944	123.000000	-	.	Target=DA757889.1 173 299 +;percentID=98.4
+chr4-04	EST_Human	nucleotide_match	289818	289944	123.000000	-	.	Target=DA385292.1 182 308 +;percentID=98.4
+chr4-04	EST_Human	nucleotide_match	289818	289944	127.000000	-	.	Target=CN273339.1 168 294 +;percentID=100;sequence=GCCTTTTGCGCCAGCGTGAGCTCGGTTAGGGTCTCCACGGCCGTGCTTTCACCCCTCAGGGAGGCGTCGGTGATTCGGTCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTCGTAGCTGAGACTCCGCTACACCCCTGAAGTGGGGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGATCTCCCTGGGTGTTGCTATCTCTAACCCAGACCTGGTCATCTATCTGGAGCAAAGAAAGGAGCCCTACAAGTGAAGATACATGAGACAGTAG [...]
+chr4-04	EST_Human	nucleotide_match	289818	289944	127.000000	-	.	Target=CX788870.1 166 292 +;percentID=100;sequence=CGGGATCGCCAGCGTGAGCTCGGTTAGGGTCTCCACGGCCGTGCTTTCACCCCTCAGGGAGGCGTCGGTGATTCGGTCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTCGTAGCTGAGACTCCGCTACACCCCTGAAGTGGGGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGATCTCCCTGGGTGTTGCTATCTCTAACCCAGACCTGGTCATCTATCTGGAGCAAAGAAAGGAGCCCTACAAAGTGAAGATACATGAGACAGTAGC [...]
+chr4-04	EST_Human	nucleotide_match	289818	289945	128.000000	-	.	Target=DC397567.1 14 141 +;percentID=100
+chr4-04	EST_Human	nucleotide_match	289818	289976	145.000000	-	.	Target=DB221880.1 174 332 +;percentID=95.6
+chr4-04	EST_Human	nucleotide_match	289819	289938	86.000000	-	.	Target=DA281897.1 128 247 +;percentID=86
+chr4-04	EST_Human	nucleotide_match	289819	289938	86.000000	-	.	Target=CK001884.1 135 254 +;percentID=86
+chr4-04	EST_Human	nucleotide_match	289819	289945	111.000000	-	.	Target=CD385642.1 186 312 +;percentID=93.8
+chr4-04	EST_Human	nucleotide_match	289859	289944	74.000000	-	.	Target=DA817816.1 175 260 +;percentID=93;sequence=GTCTTTGCGTCTGGCTACTACCAGACCGCGGGTTAGGGGCTTCATCTCTCTGCGTCCTCAGTTCTGGGAGGCATTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTGGTATCTAAGACTCCCGAATACTTCAGAAGTGGGGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGACCAGCAGCACATCAATAGTCTAACATACTCACCTTTTGGAGACTCTCCTCTCTTCCGGAATCCGATGTCAGACCCTAAGAAGAAGGAAGAGAGATTGAAACCAACAAATCCAGCAGCCCAGAAGGCTCTTACTACAC [...]
+chr4-04	EST_Human	nucleotide_match	299097	299266	92.000000	-	.	Target=DA799182.1 4 174 +;percentID=77.2;Gap=M28 I1 M142 
+chr4-04	EST_Human	nucleotide_match	289889	289945	49.000000	-	.	Target=DB170146.1 171 227 +;percentID=93
+chr4-04	EST_Human	nucleotide_match	289965	290299	201.000000	+	.	Target=AA521317.1 244 562 +;percentID=82.4;Gap=M51 D1 M1 D1 M1 D2 M1 D3 M6 D2 M1 D1 M1 D1 M106 D1 M60 D1 M73 D1 M1 D1 M3 D1 M14 
+chr4-04	EST_Human	nucleotide_match	290290	290776	330.000000	-	.	Target=DA016989.1 13 499 +;percentID=84.8;Gap=M65 D1 M50 D4 M2 D1 M25 I1 M25 I2 M127 I2 M1 I2 M163 D1 M3 D1 M11 I1 M7 ;sequence=TTAATGCAGATGCACATGTTGTTTTTCAGATACAGACTTACTCAGACATTGCCACCGTCTCCAACTTCTGTAACCTTATAGGGTCTGCAGAGAATGCCATGTTTGAAGATGATGATTGGTGGTCTTGGGATGAAAAGTATTTGTGTTGTGATAACNGGTGTTGGGGTAAGGGACTCTGTGTGCTGTGTCTGCTTTCTCTAACTGAGTGGTACTATAATGGGTCTAGAGGGAGGAGCGTCAGCATTAACAGGAGACTTGCTGTAAAAAGCTAATTCATGGACCCTTTTCAAACCTGCAGAA [...]
+chr4-04	EST_Human	nucleotide_match	290612	290935	60.000000	-	.	Target=BM800078.1 85 417 +;percentID=62.6;Gap=M32 D1 M73 D1 M41 I1 M5 D1 M19 I1 M4 I1 M6 I1 M4 I1 M6 I1 M4 D2 M15 I1 M2 I1 M5 I1 M3 I1 M4 I1 M6 I1 M3 D1 M4 D1 M15 I1 M12 I1 M5 I1 M1 I1 M4 I1 M21 D1 M22 
+chr4-04	EST_Human	nucleotide_match	290652	290772	91.000000	-	.	Target=AW851594.1 16 136 +;percentID=87.6;sequence=TAATGCATGTGGATGTGCTGTTTTTCAAATGCAGACTTACTCAGACATTGCCACCATCTCCAGCCTCTGTAACCTTTAAAGGGCTTGCAGATAATGCCACGTTTCAGGATGTTGATTGCTGGTCTTGTCTTCGGAT
+chr4-04	EST_Human	nucleotide_match	290687	290890	51.000000	-	.	Target=BQ690668.1 222 422 +;percentID=64.9;Gap=M50 I1 M1 I1 M61 D1 M6 D1 M1 D1 M6 D1 M12 D1 M4 I1 M7 I1 M26 D1 M3 D1 M20 
+chr4-04	EST_Human	nucleotide_match	290687	290893	52.000000	-	.	Target=DB263540.1 44 247 +;percentID=64.9;Gap=M53 I1 M1 I1 M61 D1 M6 D1 M1 D1 M6 D1 M12 D1 M4 I1 M7 I1 M26 D1 M3 D1 M20 
+chr4-04	EST_Human	nucleotide_match	290721	290948	105.000000	+	.	Target=DB048715.1 25 253 +;percentID=74.1;Gap=M4 D1 M4 I1 M19 D1 M7 D1 M70 I1 M13 I1 M62 I1 M46 ;sequence=AAAAACAGCTTTAACCTGGATGTGGAGGAGGATGACATTGAGAATCTCTTAGAGGATTGACTTCTAAAGAGTCATGTTGGCCGGGCGCGGGGGCTCATACCTGTAATCCCGGCACTTTGGGAGGCCGAGACTGGGCAGATCACTGAGGTCAGGAGATCAAGACCATCCTGGCTAACACGGTGAAACCCCGTCTCTACTACGAATACAAAAAATTACCTGGGCGTGTTGGCGGGCACCTGTGGTCCCAGCTGCTCAGGAGGCTGAGGCAGGAGAATGGTGTGAACCCGGGAGGCGGAGCTTGCAGTGAGCTGAGATCGGGCCA [...]
+chr4-04	EST_Human	nucleotide_match	298685	298993	211.000000	+	.	Target=AV693207.1 33 336 +;percentID=85.2;Gap=M18 D1 M75 D1 M41 I1 M4 D1 M38 D1 M3 D2 M124 ;sequence=GTGATTTGCTTCGCTTCCTCACACACCTCACAGCTTTCCCATTAATAAGTCCTGTTTGCTCACATGAACTCCATGTTTTGATGGGGCCTCAATCTCATTCTGAACAGGGTAAAGTAGGGACGGGATTCCGGACCACAGCTCCTCCCACGCCGGCACCGCGCAGGCCGCCGCGGTGTCTTCCGGATGAGCTCCTACTCACTCCACAGCCCGGGGGTGCAGGGCTACCGGCGCAGAGCTGCACAAGGAGGGCTGCAGGCTGGGCCAGAGCCGCTGTACGGGGACTGACAAGAGCGCGGGTCCCTCACCGGAGGGGACTGAGGACAGAGG [...]
+chr4-04	EST_Human	nucleotide_match	290723	290948	106.000000	+	.	Target=DA588900.1 1 227 +;percentID=75;Gap=M3 I1 M5 I2 M6 D1 M3 I1 M2 D1 M8 D1 M1 D1 M2 D1 M116 I1 M29 I1 M46 
+chr4-04	EST_Human	nucleotide_match	298685	298993	211.000000	+	.	Target=AV694308.1 33 336 +;percentID=85.2;Gap=M18 D1 M75 D1 M41 I1 M4 D1 M38 D1 M3 D2 M124 ;sequence=GTGATTTGCTTCGCTTCCTCACACACCTCACAGCTTTCCCATTAATAAGTCCTGTTTGCTCACATGAACTCCATGTTTTGATGGGGCCTCAATCTCATTCTGAACAGGGTAAAGTAGGGACGGGATTCCGGACCACAGCTCCTCCCACGCCGGCACCGCGCAGGCCGCCGCGGTGTCTTCCGGATGAGCTCCTACTCACTCCACAGCCCGGGGGTGCAGGGCTACCGGCGCAGAGCTGCACAAGGAGGGCTGCAGGCTGGGCCAGAGCCGCTGTACGGGGACTGACAAGAGCGCGGGTCCCTCACCGGAGGGGACTGAGGACAGAGG [...]
+chr4-04	EST_Human	nucleotide_match	290723	290948	109.000000	+	.	Target=DA787952.1 11 236 +;percentID=75.8;Gap=M3 I1 M5 I2 M6 D1 M3 I1 M2 D1 M8 D1 M2 D1 M1 D1 M145 I1 M46 
+chr4-04	EST_Human	nucleotide_match	298708	299302	404.000000	-	.	Target=DA386535.1 2 585 +;percentID=85.1;Gap=M81 D1 M134 I1 M63 D1 M18 D1 M3 D1 M1 D1 M2 D6 M164 D1 M4 I1 M41 D1 M71 ;sequence=AGAGAGGAGGGTGCGGCATCCGGGATCTGGCGCGGCTTTTGCTTGTAGCTCCAGCCAGAGCTCGGTTAGGGCCTCATCGCTCTGCTCCCGCTCCTTAGGGAAGCCTCGGTGATTCTGCCACAGCCTCAGCCTCTGTGGCTCTGTGACCTGCCGGTATTGGATGATTCGTATCTAAGACTCTGGGACACTCCTGAAGTCGGGAAATGGTGAGTGTGCAGGGCAGGGCGTCCCAAGGCTGTGGAGGCCTCATCGGAACCGGCGGGAAATGGCGGCGGTGGGAGGAGTCTGTGAATGGAGTTCC [...]
+chr4-04	EST_Human	nucleotide_match	290758	290933	95.000000	-	.	Target=CF123528.1 462 637 +;percentID=78.2;Gap=M57 I1 M36 I2 M43 D2 M17 D1 M20 ;sequence=CACGNAGGAAGCAGTGGTAACAACGCAAAGTACGCGGGGGAGGATTCACTTCCAAAGAGACATATTATGCAAGGAAGCAACTTGGAAGAGGGAAGAAAAGAAGTCAGGAATGGCCCTTACTCAGGGACCCTTGAAATTCATGGATGTGGCCATAGAGTTCTCTCAGGAAGAGTGGAAATGCCTGGACCCTGCGCAGAGGACTTTATACAGGGACGTGATGTTGGAGAATTATAGGAACCTGGTCTCCCTGGGAATCTGTCTTCCTGACCTGAGTGTTACCTCCATGTTAGAGCAAAAGAGAGATCCCTGGACTCTGCAGAGTGAAGAGAAAATAGCAAAC [...]
+chr4-04	EST_Human	nucleotide_match	298741	299319	383.000000	-	.	Target=DA152889.1 2 568 +;percentID=84.3;Gap=M17 D1 M80 D1 M134 I1 M63 D1 M18 D1 M3 D1 M1 D1 M2 D6 M164 D1 M4 I1 M41 D1 M38 ;sequence=GAATGAGGCGCGCAGCAGAGAGGAGGGTGCGGCATCCGGGAGCTGGCGCGGCTTTTGCTTGTAGCTCCAGCCAGAGCTCGGTTAGGGCCTCATCGCTCTGCTCCCGCTCCTTAGGGAAGCCTCGGTGATTCTGCCACAGCCTCAGCCTCTGTGGCTCTGTGACCTGCCGGTATTGGATGATTCGTATCTAAGACTCTGGGACACTCCTGAAGTCGGGAAATGGTGAGTGTGCAGGGCAGGGCGTCCCAAGGCTGTGGAGGCCTCATCGGAACCGGCGGGAAATGGCGGCGGTGG [...]
+chr4-04	EST_Human	nucleotide_match	290784	290890	28.000000	-	.	Target=DA102026.1 212 316 +;percentID=66.7;Gap=M5 D1 M5 I1 M39 I2 M43 D3 M2 D1 M8 
+chr4-04	EST_Human	nucleotide_match	290784	290890	28.000000	-	.	Target=DA703641.1 160 264 +;percentID=66.7;Gap=M5 D1 M5 I1 M39 I2 M43 D3 M2 D1 M8 
+chr4-04	EST_Human	nucleotide_match	290784	290890	28.000000	-	.	Target=DA692754.1 182 286 +;percentID=66.7;Gap=M5 D1 M5 I1 M39 I2 M43 D3 M2 D1 M8 
+chr4-04	EST_Human	nucleotide_match	291353	291599	170.000000	+	.	Target=AW197712.1 4 251 +;percentID=85.3;Gap=M11 I1 M3 I2 M13 I1 M8 D1 M1 D1 M5 D1 M203 ;sequence=TTTTGCAATTCAGAGGAATTTTTTATTTTTGTGTTTGTAGTTATTATGAGACTTGTGAAAAAAACCACTGAAACTGCAGAGATGGGGAACAGGTTGCTGGATAGGATGTCTCTAGAAACACTGACTTTAATTTTATAAAAAAGAATTTAAGGCACAAAAGTATATTGCTTTTCCTCATTTATCTGCTTTTGGGTATCAGGAAATTGTGAGCACCAGCTCTGGAGAGGCAGTAGGGGTAGCCACCCCAAACT
+chr4-04	EST_Human	nucleotide_match	298685	298993	210.000000	+	.	Target=AV695420.2 33 336 +;percentID=84.8;Gap=M18 D1 M75 D1 M41 I1 M4 D1 M38 D1 M3 D2 M124 ;sequence=GTGATTTGCTTCGCTTCCTCACACACCTCACAGCTTTCCCATTAATAAGTCCTGTTTGCTCACATGAACTCCATGTTTTGATGGGGCCTCAATCTCATTCTGAACAGGGTAAAGTAGGGACGGGATTCCGGACCACAGCTCCTCCCACGCCGGCACCGCGCAGGCCGCCGCGGTGTCTTCCGGATGAGCTCCTACTCACTCCACAGCCCGGGGGTGCAGGGCTACCGGCGCAGAGCTGCACAAGGAGGGCTGCAGGCTGGGCCAGAGCCGCTGTACGGNGACTGACAAGAGCGCGGGTCCCTCACCGGAGGGGACTGAGGACAGAGG [...]
+chr4-04	EST_Human	nucleotide_match	291358	291810	327.000000	+	.	Target=AI335588.1 3 457 +;percentID=86.7;Gap=M6 I1 M3 I2 M13 I1 M8 D1 M1 D1 M5 D1 M224 I2 M170 D1 M19 ;sequence=TTTTCAGAGGAATTTTTTATTTTTGTGTTTGTAGTTATTATGAGACTTGTGAAAAAAACCACTGAAACTGCAGAGATGGGGAACAGGTTGCTGGATAGGATGTCTCTAGAAACACTGACTTTAATTTTATAAAAAAGAATTTAAGGCACAAAAGTATATTGCTTTTCCTCATTTATCTGCTTTTGGGTATCAGGAAATTGTGAGCACCAGCTCTGGAGAGGCAGTAGGGGTAGCCACCCCAAACTCTGATCTCCTCTAAGCAGTTCTGTGAGAGATTTCAGTGTGGGGTAAGACCTGGACAAGGTTCAGCAGAGGG [...]
+chr4-04	EST_Human	nucleotide_match	291358	291841	334.000000	+	.	Target=AI379940.1 3 485 +;percentID=85.3;Gap=M6 I1 M3 I2 M13 I1 M8 D1 M1 D1 M5 D1 M224 I2 M170 D1 M25 D1 M1 D1 M4 D1 M3 D1 M6 I1 M7 ;sequence=TTTTCAGAGGAATTTTTTATTTTTGTGTTTGTAGTTATTATGAGACTTGTGAAAAAAACCACTGAAACTGCAGAGATGGGGAACAGGTTGCTGGATAGGATGTCTCTAGAAACACTGACTTTAATTTTATAAAAAAGAATTTAAGGCACAAAAGTATATTGCTTTTCCTCATTTATCTGCTTTTGGGTATCAGGAAATTGTGAGCACCAGCTCTGGAGAGGCAGTAGGGGTAGCCACCCCAAACTCTGATCTCCTCTAAGCAGTTCTGTGAGAGATTTCAGTGTGG [...]
+chr4-04	EST_Human	nucleotide_match	291368	291786	290.000000	+	.	Target=T78596.1 7 433 +;percentID=84.2;Gap=M12 I1 M8 D1 M1 D1 M5 D1 M224 I2 M16 I1 M12 I1 M21 I1 M6 I1 M6 I1 M16 I1 M11 I1 M23 I1 M55 ;sequence=TTTTTTTTTTTTTTTGTGTTTGTAGTTATTATGAGACTTNTGAAAAAAACCACTGAAACTGCAGAGATGGGGAACAGGTTGCTGGANAGGATNTCTCTAGAAACACTGACTTTAATTTTATAAAAAAGANTTTAAGGCACAAAAGTATATTGCTTTTCCNCATTTATCTGCTTTTGGGNATCAGGAAATTGTGAGCACCAGCTCTGGAGAGGCAGTAGGGGTAGCCACCCCAAACTCTGATCTCCTCTAAGCAGTTCTGTGAGAGATTTCAGTGTGGGGGTAAG [...]
+chr4-04	EST_Human	nucleotide_match	291406	292079	477.000000	-	.	Target=BX111612.1 1 693 +;percentID=86.1;Gap=M21 D1 M35 D1 M67 D1 M3 I1 M21 I3 M5 I1 M3 I4 M5 I1 M1 I4 M78 I3 M12 I3 M6 I1 M28 D1 M170 I2 M215 ;sequence=CATGAATAAATGATTGAATTNGCATCGTGTGTTCAGTACAAAGACAGAAACTGTATGGAGACTTAAGCTTAATTTGTGTTACTTCCCTTTTATTGTTTTGTGAGTTTTAATGCCACCATCTGATCAGCTGTTCATTGACAGAAGAGAAATTGTTGTTATTATTTGTGTTGTTTTTACCTTGCTAAGAATAAATAATTAGCTTCTAATATAATTGGTCTAGAAAAACATAAGGGTTTTGGTTAAATTCCTTGTTATTGTGTGTTATAATGTTATAA [...]
+chr4-04	EST_Human	nucleotide_match	292064	292390	224.000000	-	.	Target=AA496479.1 190 516 +;percentID=86;Gap=M7 I1 M3 I2 M45 D2 M1 D1 M65 I1 M1 I1 M1 I2 M53 D5 M13 I1 M1 I1 M51 D1 M77 ;sequence=ACTGTGTTATGGGAGTAGAGTACTTTTGTCCTTCATCTTACCTCAGAGTTAGCTGATCAGGGACAGGGGATATCACATCTGGAGCCAAGATGTGCAGGACCACCAGGACAGCGCCATTTTCTGTTTGCACCACACAAAGTCAGCCTGAGTGTCTCCTCCGTGGATCACTATGAGGGCATCATTACTCAGCATCTTTGAGTAATGAGACATTTGAGGATGTCATGTGCAGACTGGGGTCAGTCTGACAAGGTCTAATTCTGCTCCCATTTCAGAGGAAGATAAGTGACTCATGCAGGGT [...]
+chr4-04	EST_Human	nucleotide_match	338124	338219	96.000000	+	.	Target=AL700660.1 303 398 +;percentID=100
+chr4-04	EST_Human	nucleotide_match	292413	292594	110.000000	-	.	Target=AA496479.1 7 189 +;percentID=80.3;Gap=M180 I1 M2 
+chr4-04	EST_Human	nucleotide_match	298203	298747	413.000000	+	.	Target=DC338413.1 1 560 +;percentID=88.7;Gap=M90 I1 M8 I1 M19 I1 M1 I1 M35 D3 M13 I1 M155 I7 M1 I3 M3 I1 M1 I4 M147 D1 M23 D1 M44 ;sequence=AGACTCGGCCATGTCTTTCTTCTGACAGAAAACTTGCGGAGTTTCCTCAACACCAGTCAATGCTCCAACCCCAACGGGGTGTCCAGCAACGTCACTAACTGACACCACCCAGAGTCAGCTGCNTGACCCCACAAGCTCAGCACTCTTCCCGCAGCTGCTCTCCTGCAGACTGCCAGTCCCTGCCTCTGGACACCCGTCTTCATTTCTGAACCCCTGCCTACAAACCAGGGACGCCCACACCCTCCTCAAGTTCAATAATGTGGCAGAACTACTCACAGAACTAAGAGA [...]
+chr4-04	EST_Human	nucleotide_match	338320	338543	124.000000	-	.	Target=BM800078.1 3 224 +;percentID=78.6;Gap=M114 D1 M72 D1 M36 
+chr4-04	EST_Human	nucleotide_match	298203	298758	433.000000	+	.	Target=DC413588.1 1 566 +;percentID=89.7;Gap=M153 D3 M168 I7 M1 I3 M3 I1 M1 I4 M147 D1 M23 D1 M55 ;sequence=AGACTCGGCCATGTCTTTCTTCTGACAGAAAACTTGCGGAGTTTCCTCAACACCAGTCAATGCTCCAACCCCAACGGGGTGTCCAGCAACTCACTAACGACACCACCCAGAGTCAGCGCTGACCCCACAAGCTCAGCACTCTTCCCGCAGCTGCTCTCCTGCAGACGCCAGTCCCTGCCTCTGGACACCCGTCTTCATTTCTGAACCCCTGCCTACAAACCAGGGACGCCCACACCCTCCTCAAGTTCAATAATGTGGCAGAACTACTCACAGAACTAAGAGAAGCGCTGTGCGCACCGACACCAGCGTATTCTAAAAGA [...]
+chr4-04	EST_Human	nucleotide_match	299097	299205	81.000000	-	.	Target=CN399123.1 1 109 +;percentID=87.2
+chr4-04	EST_Human	nucleotide_match	298213	298728	403.000000	+	.	Target=DC393066.1 1 526 +;percentID=89.8;Gap=M143 D3 M168 I7 M1 I3 M3 I1 M1 I4 M147 D1 M23 D1 M25 
+chr4-04	EST_Human	nucleotide_match	299097	299220	86.000000	-	.	Target=CD654571.1 25 148 +;percentID=84.7
+chr4-04	EST_Human	nucleotide_match	298229	298794	434.000000	+	.	Target=DC396648.1 1 575 +;percentID=89.2;Gap=M127 D3 M168 I7 M1 I3 M3 I1 M1 I4 M147 D1 M23 D1 M75 D1 M15 ;sequence=AGAAAACTTGCGGAGTTTCCTCAACACCAGTCAATGCTCCAACCCCAACGGGGTGTCCAGCAACTCACTAACGACACCACCCAGAGTCAGCGCTGACCCCACAAGCTCAGCACTCTTCCCGCAGCTGCTCTCCTGCAGACGCCAGTCCCTGCCTCTGGACACCCGTCTTCATTTCTGAACCCCTGCCTACAAACCAGGGACGCCCACACCCTCCTCAAGTTCAATAATGTGGCAGAACTACTCACAGAACTAAGAGAAGCGCTGTGCGCACCGACACCAGCGTATTCTAAAAGATGCGAACAGACACCAGCGT [...]
+chr4-04	EST_Human	nucleotide_match	299097	299240	92.000000	-	.	Target=BM906511.1 27 170 +;percentID=81.9
+chr4-04	EST_Human	nucleotide_match	298308	298691	270.000000	-	.	Target=R78014.1 1 384 +;percentID=85.9;Gap=M86 D1 M110 D1 M1 D1 M51 D1 M2 D1 M12 I1 M27 I1 M25 I1 M5 I1 M10 D2 M10 I1 M21 I1 M4 I1 M13 ;sequence=GGACAGCGTCGGCCGCGGCTCCTGGTTTGGGGACTGCCAGCGGGTCTTGAAGGAAAGGCTTTTGTGAGGTGTGTGAGCAAGCGACAANATCACCCGCCCGCTCCAACTATTCCACCAGTCCCTTTGCCCTGTGCACCTCCTCCGCGTGGCTGTTCCTGAGTAACATCTTTTAGAATACGCTGGTGTCGGTGCGCACGGCTTNCTTCAGTTCTGTGAGTAGTTCTGCCACATTGCTGAACTTGAGGTTGTGGGGCGCCCCTGGGTTTGTAGACAGGCGTTCAGA [...]
+chr4-04	EST_Human	nucleotide_match	338738	339219	268.000000	+	.	Target=BU179167.1 340 851 +;percentID=80;Gap=M78 D1 M16 D1 M2 I1 M36 I4 M109 I8 M1 I1 M53 I1 M19 I1 M6 I1 M1 I1 M10 I3 M6 I1 M21 I1 M13 I1 M4 I1 M4 I1 M15 I1 M2 I1 M2 I2 M7 I1 M9 I1 M2 I1 M18 D2 M2 D2 M2 D1 M12 I2 M10 I1 M6 I1 M9 
+chr4-04	EST_Human	nucleotide_match	298462	299220	411.000000	-	.	Target=BE540535.1 13 752 +;percentID=79.9;Gap=M52 I1 M23 D1 M32 D1 M12 I1 M1 I1 M11 I1 M18 I1 M8 I1 M70 D1 M15 D5 M2 D1 M1 D1 M13 D1 M6 D1 M20 D1 M7 D1 M11 D1 M23 I1 M1 I1 M60 I1 M12 I1 M31 I1 M40 D1 M6 D1 M2 D2 M18 I1 M20 I1 M11 I1 M34 D1 M18 I1 M6 I1 M11 D1 M12 D1 M12 D2 M9 D1 M5 D1 M12 I1 M3 D1 M4 D1 M3 D1 M8 D1 M12 D1 M15 D1 M10 D1 M1 D1 M5 D2 M17 ;sequence=GGCTTCAGTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCC [...]
+chr4-04	EST_Human	nucleotide_match	338142	338232	38.000000	+	.	Target=BU954839.1 333 422 +;percentID=73.4;Gap=M60 D1 M1 D2 M21 I1 M3 I1 M3 
+chr4-04	EST_Human	nucleotide_match	298464	299256	506.000000	-	.	Target=DA735070.1 4 802 +;percentID=83;Gap=M35 D1 M134 I1 M63 D1 M18 D1 M3 D1 M1 D1 M2 D6 M164 D1 M4 I1 M41 D1 M75 D1 M23 D1 M129 I1 M10 I1 M10 I2 M1 I2 M1 I4 M1 I7 M53 I1 M7 I1 M3 ;sequence=GTAGCTCCAGCCAGAGCTCGGTTAGGGCCTCATCGCTCTGCTCCCGCTCCTTAGGGAAGCCTCGGTGATTCTGCCACAGCCTCAGCCTCTGTGGCTCTGTGACCTGCCGGTATTGGATGATTCGTATCTAAGACTCTGGGACACTCCTGAAGTCGGGAAATGGTGAGTGTGCAGGGCAGGGCGTCCCAAGGCTGTGGAGGCCTCATCGGAACCGGCGGGAAATGGCGGCGGTGGGAG [...]
+chr4-04	EST_Human	nucleotide_match	338145	338271	23.000000	+	.	Target=DA483132.1 396 523 +;percentID=62.1;Gap=M1 D1 M14 I1 M20 I2 M21 D2 M32 I1 M18 D1 M14 I1 M3 
+chr4-04	EST_Human	nucleotide_match	298477	299242	503.000000	-	.	Target=AL521029.3 8 775 +;percentID=84.2;Gap=M21 D1 M134 I1 M63 D1 M18 D1 M3 D1 M1 D1 M2 D6 M164 D1 M4 I1 M41 D1 M75 D1 M23 D1 M147 I4 M1 I1 M3 I3 M1 I7 M50 ;sequence=CCCGGGATCGGTTAGGGCCTCATCGCTCTGCTCCCGCTCCTTAGGGAAGCCTCGGTGATTCTGCCACAGCCTCAGCCTCTGTGGCTCTGTGACCTGCCGGTATTGGATGATTCGTATCTAAGACTCTGGGACACTCCTGAAGTCGGGAAATGGTGAGTGTGCAGGGCAGGGCGTCCCAAGGCTGTGGAGGCCTCATCGGAACCGGCGGGAAATGGCGGCGGTGGGAGGAGTCTGTGAATGGAGTTCCCGCTCAGCCCTCTG [...]
+chr4-04	EST_Human	nucleotide_match	338258	338353	28.000000	+	.	Target=DA888845.1 394 494 +;percentID=66.7;Gap=M13 I2 M3 I1 M14 I1 M1 I1 M65 
+chr4-04	EST_Human	nucleotide_match	298477	299246	511.000000	-	.	Target=BQ050525.1 2 773 +;percentID=84.5;Gap=M25 D1 M134 I1 M63 D1 M18 D1 M3 D1 M1 D1 M2 D6 M164 D1 M4 I1 M41 D1 M75 D1 M23 D1 M147 I4 M1 I1 M3 I3 M1 I7 M50 ;sequence=AGAGCTCGGTTAGGGCCTCATCGCTCTGCTCCCGCTCCTTAGGGAAGCCTCGGTGATTCTGCCACAGCCTCAGCCTCTGTGGCTCTGTGACCTGCCGGTATTGGATGATTCGTATCTAAGACTCTGGGACACTCCTGAAGTCGGGAAATGGTGAGTGTGCAGGGCAGGGCGTCCCAAGGCTGTGGAGGCCTCATCGGAACCGGCGGGAAATGGCGGCGGTGGGAGGAGTCTGTGAATGGAGTTCCCGCTCAGCCCTCTGTC [...]
+chr4-04	EST_Human	nucleotide_match	338124	338219	94.000000	+	.	Target=BP231503.1 300 395 +;percentID=99
+chr4-04	EST_Human	nucleotide_match	299097	299210	84.000000	-	.	Target=BU179167.1 3 116 +;percentID=86.8
+chr4-04	EST_Human	nucleotide_match	298525	298978	353.000000	-	.	Target=DA592987.1 98 549 +;percentID=89.2;Gap=M26 D1 M132 I1 M93 D1 M1 D1 M199 ;sequence=GGGATCTGGCGCGGCGTTTTCCTCTGGCTCCTGCGAGGGCTTGGTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCCTCAGTCCCCTCCGGTGACGGACCGGGCTCCTGTCGGTCCCCGCACGGCGGCTCTGGCCCAGCCTGCGGCCCTCCTTGTGCAGTTCTGCGCCCGCAGCCCCGCACCTTCCCTGGGCCGTGGGGTGAGGAGGAGCTCATCTGGAAGACGCCGGCGCCCGCGTGCGAGGTGCCCGCCTGGGAGGAGCTGTGGTCCGGGGGTCCGGTCCCTACTTTACCCTGTTCGGAATGAGATCGAGGCCC [...]
+chr4-04	EST_Human	nucleotide_match	298535	299220	406.000000	-	.	Target=BG251450.1 10 681 +;percentID=81.4;Gap=M134 I1 M63 D1 M18 D1 M3 D1 M1 D1 M2 D6 M77 D1 M7 D1 M78 D1 M4 I1 M3 D1 M37 D1 M42 D1 M18 I1 M8 I1 M30 D1 M9 I1 M5 D1 M28 D1 M5 I1 M15 I1 M5 I1 M20 D1 M20 D1 M6 D1 M26 ;sequence=TCATCGCTCTGCTCCCGCTCCTTAGGGAAGCCTCGGTGATTCTGCCACAGCCTCAGCCTCTGTGGCTCTGTGACCTGCCGGTATTGGATGATTCGTATCTAAGACTCTGGGACACTCCTGAAGTCGGGAAATGGTGAGTGTGCAGGGCAGGGCGTCCCAAGGCTGTGGAGGCCTCATCGGAACCGGCGGGAAATGGCGGCGGTG [...]
+chr4-04	EST_Human	nucleotide_match	338124	338219	96.000000	+	.	Target=DB074733.1 302 397 +;percentID=100
+chr4-04	EST_Human	nucleotide_match	298560	299272	479.000000	-	.	Target=CN310771.1 3 701 +;percentID=84.8;Gap=M25 D1 M25 D1 M134 I1 M63 D1 M18 D1 M3 D1 M1 D1 M2 D6 M164 D1 M4 I1 M41 D1 M75 D1 M23 D1 M119 ;sequence=GGGCGGCTTTTGCTTGTAGCTCCAGCCGAGCTCGGTTAGGGCCTCATCGCTCTGCTCCCGCTCCTTAGGGAAGCCTCGGTGATTCTGCCACAGCCTCAGCCTCTGTGGCTCTGTGACCTGCCGGTATTGGATGATTCGTATCTAAGACTCTGGGACACTCCTGAAGTCGGGAAATGGTGAGTGTGCAGGGCAGGGCGTCCCAAGGCTGTGGAGGCCTCATCGGAACCGGCGGGAAATGGCGGCGGTGGGAGGAGTCTGTGAATGGAGTTCCCGCTCAGC [...]
+chr4-04	EST_Human	nucleotide_match	338124	338219	96.000000	+	.	Target=DB135798.1 303 398 +;percentID=100
+chr4-04	EST_Human	nucleotide_match	298611	299220	416.000000	-	.	Target=CN310770.1 5 602 +;percentID=85.3;Gap=M134 I1 M63 D1 M18 D1 M3 D1 M1 D1 M2 D6 M164 D1 M4 I1 M41 D1 M75 D1 M23 D1 M68 ;sequence=GCTCTGCTCCCGCTCCTTAGGGAAGCCTCGGTGATTCTGCCACAGCCTCAGCCTCTGTGGCTCTGTGACCTGCCGGTATTGGATGATTCGTATCTAAGACTCTGGGACACTCCTGAAGTCGGGAAATGGTGAGTGTGCAGGGCAGGGCGTCCCAAGGCTGTGGAGGCCTCATCGGAACCGGCGGGAAATGGCGGCGGTGGGAGGAGTCTGTGAATGGAGTTCCCGCTCAGCCCTCTGTCCTCAGTCCCCTCCGGTGAGGGACCCGCGCTCTTGTCAGTCCCCGTACAGCGGCTC [...]
+chr4-04	EST_Human	nucleotide_match	338303	338538	147.000000	-	.	Target=CF123528.1 383 619 +;percentID=82.1;Gap=M29 I1 M4 D1 M102 I1 M36 I2 M43 D2 M19 
+chr4-04	EST_Human	nucleotide_match	298618	299269	410.000000	-	.	Target=DA732237.1 1 640 +;percentID=82;Gap=M48 D1 M134 I1 M63 D1 M18 D1 M3 D1 M1 D1 M2 D6 M164 D1 M4 I1 M41 D1 M75 D1 M16 D1 M6 D1 M20 I1 M35 I1 M6 ;sequence=GCTTTTGCTTGTAGCTCCAGCCAGAGCTCGGTTAGGGCCTCATCGCTCTGCTCCCGCTCCTTAGGGAAGCCTCGGTGATTCTGCCACAGCCTCAGCCTCTGTGGCTCTGTGACCTGCCGGTATTGGATGATTCGTATCTAAGACTCTGGGACACTCCTGAAGTCGGGAAATGGTGAGTGTGCAGGGCAGGGCGTCCCAAGGCTGTGGAGGCCTCATCGGAACCGGCGGGAAATGGCGGCGGTGGGAGGAGTCTGTGAATGGAGTTCCCGC [...]
+chr4-04	EST_Human	nucleotide_match	338124	338223	97.000000	+	.	Target=DA533464.1 302 400 +;percentID=99;Gap=M95 D1 M4 
+chr4-04	EST_Human	nucleotide_match	298624	299291	449.000000	-	.	Target=DA736785.1 1 655 +;percentID=84.8;Gap=M70 D1 M134 I1 M63 D1 M18 D1 M3 D1 M1 D1 M2 D6 M164 D1 M4 I1 M41 D1 M75 D1 M23 D1 M55 
+chr4-04	EST_Human	nucleotide_match	298640	299246	429.000000	-	.	Target=DN999087.1 4 602 +;percentID=86.3;Gap=M10 I1 M4 D1 M63 I1 M56 D1 M24 I1 M112 D5 M2 D1 M1 D1 M13 D1 M132 I1 M96 D2 M82 ;sequence=CACGAGCTTGGTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGGTGAGTGTGCGGGGCAGGGCGTCCGGAGGCTGGGGAGGCCTCATCGGAACCGGCGGGAAATGGCGGCGGCGGGACCGAGTCTGCGAACGGAGTCCCCGCTGCCGCCTCTCAGCCCTCAGTCCCCTCCGGTGACGGACCGG [...]
+chr4-04	EST_Human	nucleotide_match	338370	338449	5.000000	+	.	Target=BG026620.1 245 321 +;percentID=57.3;Gap=M2 D1 M11 D1 M1 D1 M6 I1 M21 D1 M5 D1 M24 I1 M5 
+chr4-04	EST_Human	nucleotide_match	299097	299180	70.000000	-	.	Target=CN278785.1 1 84 +;percentID=91.7
+chr4-04	EST_Human	nucleotide_match	298672	299265	412.000000	-	.	Target=DA787270.1 1 586 +;percentID=85.8;Gap=M29 I1 M4 D1 M63 I1 M56 D1 M24 I1 M112 D5 M2 D1 M1 D1 M13 D1 M132 I1 M93 D1 M1 D1 M52 ;sequence=TTTCCTCTGGCTCCTGCGAGGGCTTGGTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGGTGAGTGTGCGGGGCAGGGCGTCCGGAGGCTGGGGAGGCCTCATCGGAACCGGCGGGAAATGGCGGCGGCGGGACCGAGTCTGCGAACGGAGTCCCCGCTGCCGCCTCTCAGCCCTCA [...]
+chr4-04	EST_Human	nucleotide_match	338124	338223	50.000000	+	.	Target=DB152890.1 282 377 +;percentID=77;Gap=M78 D1 M1 D2 M13 D1 M4 
+chr4-04	EST_Human	nucleotide_match	338124	338296	127.000000	+	.	Target=DR002880.1 298 471 +;percentID=86.9;Gap=M128 I1 M6 I1 M31 D1 M7 
+chr4-04	EST_Human	nucleotide_match	299097	299240	90.000000	-	.	Target=BX485984.1 19 162 +;percentID=81.2
+chr4-04	EST_Human	nucleotide_match	338124	338222	75.000000	+	.	Target=BU854428.1 310 408 +;percentID=87.9
+chr4-04	EST_Human	nucleotide_match	338142	338226	36.000000	+	.	Target=EL735851.1 185 266 +;percentID=73.3;Gap=M60 D1 M1 D2 M21 
+chr4-04	EST_Human	nucleotide_match	339524	340011	488.000000	-	.	Target=AW978510.1 80 567 +;percentID=100;sequence=GACAGTCTTGCTTTGTTGCCAAGGCTGGAGTGTAGTCCCAGAATCTTGGCTCACTGCAACCTCCGCCTCCCGGGTTCAAGCCATTCAAACATAACTCGTTATCTTTTAAACTCTGGTTATCAATTAAACTCTGGTAAAATTAGTTTTCTTAATATGTTGCTTCCCTCAGTTTCCAAGAACCTATCAACAATGTTAAGTGAGAATTTACTACACACTTAAATAAGTTATATAGGTGTGTGTGTGAGACACACATTTTTATATAGCTACAGAGAGATACATCTCAATGACAGAATCTCAACAGACTTCCTACTAAGACAAAATTATAATAGCTATTAACAAATAAGAGAACAATTGAGAGCTTAATATACACTTAGTAAT [...]
+chr4-04	EST_Human	nucleotide_match	338124	338222	53.000000	+	.	Target=DA081687.1 258 356 +;percentID=76.8
+chr4-04	EST_Human	nucleotide_match	339609	340011	403.000000	-	.	Target=AA836242.1 19 421 +;percentID=100;sequence=TCCGCCTCCCGGGTTCAAGCCATTCAAACATAACTCGTTATCTTTTAAACTCTGGTTATCAATTAAACTCTGGTAAAATTAGTTTTCTTAATATGTTGCTTCCCTCAGTTTCCAAGAACCTATCAACAATGTTAAGTGAGAATTTACTACACACTTAAATAAGTTATATAGGTGTGTGTGTGAGACACACATTTTTATATAGCTACAGAGAGATACATCTCAATGACAGAATCTCAACAGACTTCCTACTAAGACAAAATTATAATAGCTATTAACAAATAAGAGAACAATTGAGAGCTTAATATACACTTAGTAATGTTCTATGCTGGTTAATGACATAGCACATTTATGCTTGTTAATGATACAGTGCATTTAAGA [...]
+chr4-04	EST_Human	nucleotide_match	338124	338222	53.000000	+	.	Target=DA644046.1 325 423 +;percentID=76.8
+chr4-04	EST_Human	nucleotide_match	338124	338221	82.000000	+	.	Target=BG779893.1 303 400 +;percentID=91.8;sequence=GGGCTTTTGCTTGTAGCTCCAGCCAGAGCTCGGTTAGGGCCTCATCGCTCTGCTCCCGCTCCTTAGGGAAGCCTCGGTGATTCTGCCACAGCCTCAGCCTCTGTGGCTCTGTGACCTGCCGGTATTGGATGATTCGTATCTAAGACTCTGGGACACTCCTGAAGTCGGGAAATGGAACTCTTAACATTCAAGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGTCTGGACATTTCCCAGCACGAATTTATATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTGGGTGTTACTATCTCTAACCCAGACCTGGTCACCAGTCTGGAGCAAAGAAAAGAGCCCTACAATTTGAAGATACATG [...]
+chr4-04	EST_Human	nucleotide_match	347760	348104	227.000000	+	.	Target=AW089533.1 66 401 +;percentID=84.4;Gap=M5 D1 M1 D2 M1 D1 M6 D1 M1 D1 M1 D3 M245 I1 M19 D1 M56 
+chr4-04	EST_Human	nucleotide_match	338267	338366	37.000000	+	.	Target=DA297086.1 457 556 +;percentID=70.2;Gap=M1 I1 M17 D1 M81 ;sequence=GGAAGCGGATTATGTGGAGTGAAAGTTACACCGTGGCGGATTGACTTCTAAGGACTCTTGGTACATGAGGAAGAAACCCGGAAGGGGAAGAGGAAAGCAAAGGCGTCAGGAGTGGTTCTTCCTCAGGGTCTATTGACATTCAGGGATGTGGCCATAGAATTCTCTCAGGAGGAGTGGAAATGCCTGGACCCTGCTCAGAGGACTCTATACAGAGACGTGATGTTGGAGAATTATAGGAACCTGGTCTCCCTGGGTGAGGATAACTTCCCTCCAAAAGTGGGGATGTTCCCTTGTGTATCTTTGCATTTTCTCTTGTTTCTCTTGGGAGTTGCATCCTTGCTTGACTAAAATGGAA [...]
+chr4-04	EST_Human	nucleotide_match	352965	353859	858.000000	+	.	Target=BX452265.2 1 909 +;percentID=97.9;Gap=M765 I1 M8 I1 M18 I1 M6 I1 M14 I1 M10 I1 M6 I1 M8 I1 M10 I1 M5 I1 M12 I1 M3 I1 M11 I1 M7 I1 M12 ;sequence=CTGGGTCTACAGTGAAGTTAATGCTTGGCAGACCTGTTATTTAAGCATCAGACAGTTGAGGATTCCATTTTCTGAGGAGACTGAACTTTCTTTAAGATCTTGATCAATAAGACTGGTGCTGAGAAAAAAAAAACCCAGTTAATATCTGCAAATGGAGATGCTGATACAATAAATATGAGTAGGTGTGGCTCCTGCTGTTTGGCTCTTGCGAGATGTTTGGAAATGCTCTAACCTAGTCATTGGACAGGTTTCTAGATGACCGTTACTGAGCGTTGAT [...]
+chr4-04	EST_Human	nucleotide_match	338124	338219	96.000000	+	.	Target=BM800016.1 287 382 +;percentID=100
+chr4-04	EST_Human	nucleotide_match	353336	354028	692.000000	+	.	Target=CR743452.1 1 693 +;percentID=99.9;sequence=TCTCCCTCCAGATTTCTAGGTGGGCAGGACTTCTCCCTGCCTCTAGCTGCCAGGGACTGGAGCTTGGTTATAGGACTGCTTCACAATTCACGGTGGGAATAAAGTCAGCCAGCATGCCTACAGGGACACATGTAGCTGTGCTTTTGGGCAGGTCACAGGTCAGGAAAAACTCCTCCTGGATTTTGGTTGCATGGACTTGGAGCCAAGTTGTAGTGCCACGTCAAGATCCACCATCAAATAAATATTGGCAAGCCTACATCCAGGGGCAGAGATGGATATTTCTGTCTGTGGGTCCCTGTGTGAGTAGGATTTCTTCCACATCATGACTGACATGTGCAAGGGGTGCAGTTTGGGGTAATTCAGAGATCACAGACAGAA [...]
+chr4-04	EST_Human	nucleotide_match	338302	338608	194.000000	+	.	Target=BU178885.1 269 576 +;percentID=82.3;Gap=M64 I1 M1 I1 M61 D1 M129 I1 M31 D1 M4 D1 M7 I1 M7 
+chr4-04	EST_Human	nucleotide_match	338124	338219	96.000000	+	.	Target=DB221880.1 333 428 +;percentID=100
+chr4-04	EST_Human	nucleotide_match	338338	338575	145.000000	-	.	Target=DA569791.1 119 359 +;percentID=81;Gap=M13 I1 M5 I1 M128 D1 M62 I1 M1 I1 M28 ;sequence=ATACAGAAACCTGGTCTCCCTGGGTGTTACTATCTCTAACCCAGACCTGGTCACCAGTCTGGAGCAAAGAAAAGAGCCCTACAATTTGAAGATACATGAAACAGCAGCCAGACCCCCAGAGTTTTGCTCTGATTGCCCAGGCTGGAGTGCAGTGGCATGATCTTGGCTCACTACAACCTCCGCCTCCCAGGTTCAAGTGATTTTCCTGCCTCAGCCTCGCAAGTAGCTGGGACTACAGGTGCCCACCATCATGCCGTACTCATTTTGCCTTTTTAGTAGAGATGAGGTTTCACCATGTTGGCCAGTCTGGTCTTGAACTCCTAACCTCAGGTAAT [...]
+chr4-04	EST_Human	nucleotide_match	338124	338223	97.000000	+	.	Target=DA224929.1 300 398 +;percentID=99;Gap=M95 D1 M4 
+chr4-04	EST_Human	nucleotide_match	338583	338857	260.000000	-	.	Target=BI016270.1 1 276 +;percentID=97.5;Gap=M53 D1 M15 I1 M190 I1 M16 
+chr4-04	EST_Human	nucleotide_match	338124	338230	97.000000	+	.	Target=DA418713.1 302 406 +;percentID=96.3;Gap=M95 D1 M2 D1 M8 
+chr4-04	EST_Human	nucleotide_match	338617	338714	62.000000	+	.	Target=DR002880.1 473 566 +;percentID=83.8;Gap=M8 D2 M25 D1 M24 D1 M37 
+chr4-04	EST_Human	nucleotide_match	338124	338293	126.000000	+	.	Target=BQ365590.1 47 214 +;percentID=87.6;Gap=M2 D1 M54 D1 M112 
+chr4-04	EST_Human	nucleotide_match	338125	338219	72.000000	+	.	Target=CD385642.1 314 407 +;percentID=88.5;Gap=M15 D1 M79 
+chr4-04	EST_Human	nucleotide_match	338852	339091	234.000000	+	.	Target=AA349226.1 2 242 +;percentID=98.3;Gap=M22 I1 M218 
+chr4-04	EST_Human	nucleotide_match	338145	338271	23.000000	+	.	Target=CN426971.1 370 497 +;percentID=62.1;Gap=M1 D1 M14 I1 M20 I2 M21 D2 M32 I1 M18 D1 M14 I1 M3 
+chr4-04	EST_Human	nucleotide_match	347562	347624	34.000000	+	.	Target=AW089533.1 2 65 +;percentID=78.5;Gap=M24 I2 M32 D1 M6 
+chr4-04	EST_Human	nucleotide_match	349004	349034	29.000000	-	.	Target=DB473756.1 3 33 +;percentID=96.8
+chr4-04	EST_Human	nucleotide_match	353288	353919	392.000000	-	.	Target=AV722306.1 4 648 +;percentID=82.9;Gap=M64 I1 M2 I1 M1 I1 M3 I1 M2 I2 M1 I1 M1 I3 M36 I3 M1 I1 M124 D2 M5 D7 M6 D1 M1 D1 M190 D1 M83 I2 M1 I7 M1 I5 M1 I1 M65 D2 M8 D2 M20 ;sequence=GTAAACCTAAGACTGATGAGGGCTGTATTGAGAAGGCATGAGCTTGCTTGAGTGGCATGCTTGCCCATCATAGTCCCAGCTACAAAATAAAATATGATTAATTCTCATTGTAAGTATAGCTGTAGGCCATTTGGTTTTGTTTATGCCACTAGCACCATCTGCCAAGACACCAAGGAGGATTCATAATGTCCTGTGTCTCAGGTGAAAGGACTTTAGATGTTGCTCCTCTCAGTGATCTCCG [...]
+chr4-04	EST_Human	nucleotide_match	353399	354119	410.000000	-	.	Target=CA415400.1 18 725 +;percentID=80.9;Gap=M74 I1 M20 D4 M1 D1 M164 I1 M2 I1 M1 I1 M1 I3 M1 I1 M1 I1 M1 I2 M39 I3 M1 I1 M45 D2 M1 D2 M2 D1 M7 D1 M116 D4 M57 D1 M88 D1 M5 I1 M14 D1 M9 D1 M6 D4 M1 D1 M8 D1 M7 D1 M7 D1 M2 D1 M7 D1 M4 ;sequence=TTTTTTTTTTTTTTTTTTAAATGTGAGCATTTTATTTCAGAAATTTTGAATTTGAAATCAGATAAATTTGACATAGAATGTATCAGAAACTGAAAACACAGTAAGATGGCAGGAGGTTCTCTACCCACAACTTCTACAGTTATAAAAAAGCAGCAGTTATGTCCTGAAAAAAGGAACTTTATGG [...]
+chr4-04	EST_Human	nucleotide_match	338613	338902	185.000000	+	.	Target=BQ365590.1 215 501 +;percentID=83.3;Gap=M12 D2 M88 I2 M1 I1 M5 I1 M23 D1 M2 D3 M124 D1 M28 
+chr4-04	EST_Human	nucleotide_match	338738	338801	48.000000	+	.	Target=EL736128.1 227 290 +;percentID=87.5
+chr4-04	EST_Human	nucleotide_match	353550	354118	327.000000	-	.	Target=DB352298.1 1 568 +;percentID=80.7;Gap=M73 I1 M20 D4 M1 D1 M164 I1 M2 I1 M1 I1 M1 I3 M1 I1 M1 I1 M1 I2 M39 I3 M1 I1 M45 D2 M1 D2 M2 D1 M7 D1 M116 D4 M57 D1 M20 ;sequence=AAATGTGAGCATTTTATTTCAGAAATTTTGAATTTGAAATCAGATAAATTTGACATAGAATGTATCAGAAACTGAAAACACAGTAAGATGGCAGGAGGTTCTCTACCCACAACTTCTACAGTTATAAAAAAGCAGCAGTTATGTCCTGAAAAAAGGAACTTTATGGGAGCTTTGGAATCCATGTCAAGGGTTGTGAACCCAAGACTGAGGAGGGCTGTATTGAAAAGACATGCCCTTGCTTGAGTGGCATGC [...]
+chr4-04	EST_Human	nucleotide_match	353558	353964	264.000000	-	.	Target=BI062009.1 1 417 +;percentID=83.6;Gap=M109 I1 M2 I1 M1 I1 M1 I3 M1 I1 M1 I1 M1 I2 M39 I4 M141 D1 M2 I1 M46 D1 M1 D1 M4 D2 M53 ;sequence=AAAAGAACCTTTATGAAAACTTAGAAATCCGTGTAAAAGATTGTGAATCCAAGACTGAGGAGGGCTGTATTAAGAGGGCATGCACTTGCTTGAGTGGCATGCTTGCCCATCATAGTCCCAGCTACCGAATGAAATATGAATAATTCTCACTGTAAACATAGCTATAGATCATTTGGTTTTGTTCCTGCCACTATCACCATCTGCCAAGACACTTAGGAGAATTCATAATGTCCTGTGTCTCAGGTGAAAGGCCTTGACATGTTGGTCCTGCCTGTGATCTATAAA [...]
+chr4-04	EST_Human	nucleotide_match	353563	354250	428.000000	+	.	Target=BI754448.1 1 712 +;percentID=82.5;Gap=M44 I1 M4 D2 M4 D1 M1 D1 M46 I1 M2 D1 M12 D1 M128 I4 M39 I2 M1 I1 M1 I1 M1 I3 M1 I1 M1 I1 M2 I1 M139 D2 M45 I7 M2 I2 M5 I1 M2 I2 M1 I3 M1 I1 M18 D1 M174 I1 M5 ;sequence=CCACCATTGAATAAATATTGGCAGGCCTACATCCAGGNGCACAGAATGGATGTTTCTGTGGGTCTCTGTGTGTGCAGGATTTCTTCCACACTATGACTGATCAGGGAAAGGGGTGGGTTTGGGCTAATTTACAGATCACAGGCAGGACCAACATGTCAAGGCCTTTCACCTGAGACACAGGACATTATGAATTCTCCTAAGTGTCTTGGCAGAT [...]
+chr4-04	EST_Human	nucleotide_match	353572	354158	363.000000	+	.	Target=CN272206.1 4 613 +;percentID=82.5;Gap=M39 D2 M4 D1 M1 D1 M46 I1 M2 D1 M141 I4 M39 I2 M1 I1 M1 I1 M1 I3 M1 I1 M1 I1 M2 I1 M139 D2 M45 I7 M2 I2 M5 I1 M2 I2 M1 I3 M1 I1 M18 D1 M87 ;sequence=TTGAATAAATATTGGCAGGCCTACATCCAGGGGCACAGATGGATGTTTCTGTGGGTCTCTGTGTGTGCAGGATTTCTTCCACACTATGACTGATCAGGGAAAGGGGTGGGTTTTGGGCTAATTTACAGATCACAGGCAGGACCAACATGTCAAGGCCTTTCACCTGAGACACAGGACATTATGAATTCTCCTAAGTGTCTTGGCAGATGGTGATAGTGGCAGGAACAAAACCAA [...]
+chr4-04	EST_Human	nucleotide_match	353592	354084	261.000000	+	.	Target=BX493503.1 1 492 +;percentID=78.7;Gap=M36 D4 M21 D1 M94 D1 M7 D1 M2 D2 M1 D2 M45 I1 M1 I3 M39 I2 M1 I1 M1 I1 M1 I3 M1 I1 M1 I1 M2 I1 M164 D1 M1 D4 M20 I1 M39 ;sequence=CATCCAGGGGCACAGATGGATGTTTCTCTCTGTGGGTGTCTGGGCAGGATTTCTTCCCACCATGACTGATATGTGCAAAGGGTGGATTTTGGGCTAATTCAGAGATCACAGATAGAACCAACTTCTAAAGGCCTTTCACCTGAGGCATAGGTGTCTTGGTTTAGGTGTCTTCACAGATGGTGCTAGTAGCAGGAACAGAACCAAATGGTCTACAGCTAAGTCTACAATGAAAATTGGACACATTTTATTCTGT [...]
+chr4-04	EST_Human	nucleotide_match	353596	354499	865.000000	-	.	Target=BX435704.1 1 905 +;percentID=98;Gap=M6 I1 M17 I1 M762 I1 M16 I1 M4 D1 M23 D1 M9 I1 M26 D1 M29 D1 M8 
+chr4-04	EST_Human	nucleotide_match	353983	354511	527.000000	-	.	Target=DB316147.1 1 529 +;percentID=99.8
+chr4-04	EST_Human	nucleotide_match	353988	354501	506.000000	-	.	Target=AW590651.1 1 514 +;percentID=99.2
+chr4-04	EST_Human	nucleotide_match	354053	354549	288.000000	+	.	Target=CA941914.1 1 502 +;percentID=80.4;Gap=M18 D1 M174 I1 M2 I6 M1 I1 M16 I2 M37 D1 M30 D1 M70 D1 M1 D1 M17 D2 M1 D1 M1 D1 M62 I1 M20 I1 M5 I1 M1 I1 M32 
+chr4-04	EST_Human	nucleotide_match	354410	354549	76.000000	+	.	Target=BP395595.1 24 167 +;percentID=77.8;Gap=M82 I1 M2 I1 M8 I1 M8 I1 M40 
+chr4-04	EST_Human	nucleotide_match	354637	354895	149.000000	+	.	Target=BP395595.1 169 420 +;percentID=81;Gap=M33 I1 M91 D1 M1 D3 M3 D3 M5 D1 M1 D1 M4 D1 M18 I2 M93 
+chr4-04	EST_Human	nucleotide_match	354639	354726	53.000000	+	.	Target=CA941914.1 503 590 +;percentID=81.3;Gap=M2 D1 M28 I1 M57 
+chr4-04	EST_Human	nucleotide_match	299097	299240	92.000000	-	.	Target=BM800016.1 16 159 +;percentID=81.9
+chr4-04	EST_Human	nucleotide_match	299097	299266	92.000000	-	.	Target=DA801371.1 4 174 +;percentID=77.2;Gap=M28 I1 M142 
+chr4-04	EST_Human	nucleotide_match	299097	299240	92.000000	-	.	Target=BU177765.1 14 157 +;percentID=81.9
+chr4-04	EST_Human	nucleotide_match	299097	299240	92.000000	-	.	Target=DA002438.1 9 152 +;percentID=81.9
+chr4-04	EST_Human	nucleotide_match	299097	299266	92.000000	-	.	Target=DA817816.1 4 174 +;percentID=77.2;Gap=M28 I1 M142 
+chr4-04	EST_Human	nucleotide_match	299097	299266	93.000000	-	.	Target=DB135798.1 4 175 +;percentID=77.3;Gap=M28 I1 M126 I1 M16 
+chr4-04	EST_Human	nucleotide_match	299097	299266	93.000000	-	.	Target=DB221880.1 2 173 +;percentID=77.3;Gap=M28 I1 M126 I1 M16 
+chr4-04	EST_Human	nucleotide_match	299097	299223	93.000000	-	.	Target=DN989940.1 11 137 +;percentID=86.6
+chr4-04	EST_Human	nucleotide_match	299097	299266	94.000000	-	.	Target=DB074733.1 4 174 +;percentID=77.8;Gap=M28 I1 M142 
+chr4-04	EST_Human	nucleotide_match	299097	299266	94.000000	-	.	Target=BP200889.1 4 174 +;percentID=77.8;Gap=M28 I1 M142 
+chr4-04	EST_Human	nucleotide_match	299097	299266	94.000000	-	.	Target=DA803616.1 4 174 +;percentID=77.8;Gap=M28 I1 M142 
+chr4-04	EST_Human	nucleotide_match	299097	299266	94.000000	-	.	Target=DA224929.1 2 172 +;percentID=77.8;Gap=M28 I1 M142 
+chr4-04	EST_Human	nucleotide_match	299097	299266	94.000000	-	.	Target=DB136011.1 1 171 +;percentID=77.8;Gap=M28 I1 M142 
+chr4-04	EST_Human	nucleotide_match	299097	299266	94.000000	-	.	Target=DA564196.1 4 174 +;percentID=77.8;Gap=M28 I1 M142 
+chr4-04	EST_Human	nucleotide_match	299097	299266	94.000000	-	.	Target=BP231503.1 2 172 +;percentID=77.8;Gap=M28 I1 M142 
+chr4-04	EST_Human	nucleotide_match	299097	299266	94.000000	-	.	Target=DA757889.1 2 172 +;percentID=77.8;Gap=M28 I1 M142 
+chr4-04	EST_Human	nucleotide_match	299097	299267	95.000000	-	.	Target=DA418713.1 3 174 +;percentID=77.9;Gap=M29 I1 M142 
+chr4-04	EST_Human	nucleotide_match	299097	299276	96.000000	-	.	Target=CD701489.1 34 215 +;percentID=76.9;Gap=M10 I1 M28 I1 M142 
+chr4-04	EST_Human	nucleotide_match	299097	299275	99.000000	-	.	Target=DA385292.1 1 181 +;percentID=77.9;Gap=M9 I1 M28 I1 M142 
+chr4-04	EST_Human	nucleotide_match	299097	299256	103.000000	-	.	Target=DA571532.1 4 162 +;percentID=82.5;Gap=M35 D1 M124 
+chr4-04	EST_Human	nucleotide_match	299097	299246	107.000000	-	.	Target=AU138611.1 1 149 +;percentID=86;Gap=M18 D1 M131 
+chr4-04	EST_Human	nucleotide_match	299097	299246	107.000000	-	.	Target=DB095116.1 1 149 +;percentID=86;Gap=M18 D1 M131 
+chr4-04	EST_Human	nucleotide_match	299097	299258	112.000000	-	.	Target=BQ069369.1 1 161 +;percentID=85.3;Gap=M30 D1 M3 I1 M3 D1 M124 
+chr4-04	EST_Human	nucleotide_match	299097	299258	113.000000	-	.	Target=BP248393.1 5 165 +;percentID=85.2;Gap=M30 D1 M131 
+chr4-04	EST_Human	nucleotide_match	299097	299247	118.000000	-	.	Target=BI463333.1 9 158 +;percentID=89.4;Gap=M26 D1 M124 
+chr4-04	EST_Human	nucleotide_match	299097	299302	118.000000	-	.	Target=DA460146.1 2 209 +;percentID=78.8;Gap=M36 I1 M28 I1 M142 
+chr4-04	EST_Human	nucleotide_match	299097	299274	124.000000	-	.	Target=BG718573.1 2 177 +;percentID=85.4;Gap=M3 D1 M49 D1 M124 
+chr4-04	EST_Human	nucleotide_match	299097	299255	159.000000	-	.	Target=CX788870.1 7 165 +;percentID=100
+chr4-04	EST_Human	nucleotide_match	299097	299326	165.000000	-	.	Target=DA501191.1 1 229 +;percentID=86.1;Gap=M98 D1 M131 
+chr4-04	EST_Human	nucleotide_match	299097	299263	167.000000	-	.	Target=CN273339.1 1 167 +;percentID=100
+chr4-04	EST_Human	nucleotide_match	299097	299279	183.000000	-	.	Target=DA730641.1 4 186 +;percentID=100
+chr4-04	EST_Human	nucleotide_match	299187	299282	47.000000	-	.	Target=DA592987.1 1 97 +;percentID=75.5;Gap=M46 I1 M4 D1 M44 I1 M1 
+chr4-04	EST_Human	nucleotide_match	299996	300237	193.000000	+	.	Target=BG010868.1 1 239 +;percentID=90.5;Gap=M175 D2 M1 D1 M63 ;sequence=AGGGCCTGAACACGTCTTTTCTGCTGGAAGTGAGGGAACAGCCTCTCTACCAACTTTTCTCCTCAGGCTCAAGGGTGGGTGGGACAGTGCCCCTAGAGAGAGCAGGGGCTGCGAGCTGAGAGTGTCCACGTGAAGACCATGGTCTCCCAGTCACTGTTTGGTGCCGGTGTGGTGGTCTCAGTTCAGCCAGGTCTGGGCTCTCTTCCCATGACCAGGAAGAATAAGACATACAGACCCCATGCGCCGGGT
+chr4-04	EST_Human	nucleotide_match	300247	301026	616.000000	+	.	Target=CA312024.1 18 799 +;percentID=90.3;Gap=M45 D1 M2 D1 M37 I7 M1 I3 M201 D1 M67 D1 M145 D2 M2 D2 M80 D1 M70 D1 M26 I1 M4 I3 M38 D1 M22 D1 M28 ;sequence=TTTTTTTTTTTTTTTTTTAAAGCAGAATAGGATTTATTAAGCAAAAGGAAAGCTCTCAGCAGAAAGGGGACATGAAAGCAGGTTGCCAGAAATGGGGCTGAGTTCTGGGTCTTTTATGTGGCAAGAACGAGGAAGTCTTCTGTGGGTTCTGCCCAAATGGGAGGGGTAAATTTCCCCGCTAAGGGTGTTGTATCTGTGCATGCCTGGAGTTGACCACAGTGACTCCATCTTGGTTATTACCCATGAGTGCCCAAGCAAAACCGACAGCAGGT [...]
+chr4-04	EST_Human	nucleotide_match	300771	301157	335.000000	+	.	Target=W90643.1 54 440 +;percentID=93.3;sequence=GCCTGCCTCGGNCTCCCAAAGTGCTGGGATCACAGGTGTGAGCTACTGCGCCCGGTTTCCTCTTTCTTTTAAATATCATACAGTAAACAAGGAATGATGGGTCCACAGGAAGAGAGACCACCATGTCTTCAGATCTCCTCACAGCCTTGCCCTCCAGAGTTTAGATGTGGAGGGAATAGATTAAAGGCAAACTTCTTGTTTTGCTGTTTATCTTTGGACCTGTCAGGCTGTAACTGTGTGTTTTTCTCCTGTGGTGTGGGGCACTGCGTGAGTTTAAGCACCAATCACATACATCCACATGTACCTGCACTTCTGTTCCCAGAAGGAAGACCGTGAGTGTGAGTTGTCCAGGTCCTTGATATTTTGAACAAATAATTGA [...]
+chr4-04	EST_Human	nucleotide_match	300806	300950	100.000000	+	.	Target=BF796782.1 1 145 +;percentID=85.8;Gap=M13 D1 M5 D1 M4 I1 M109 I1 M6 I1 M2 D1 M3 ;sequence=AAAGAATGTTGGGGCACACAAGCAGAGAACACCATGTCTTCAGATCTCTTCACAGCCTTGTCCTCCAGAGTTTAGAAGTGGAGGGAAAAGATTAAAGGCAATCTTCTTGTTTTGCTATTTGTCCTTGGACCTAATCTGGACTTAATTTGGACACACAGGCTAACGAAGGCCGTGAGTGTGAGTTGTCCAGGTCCTTGGCAACAAAGAATTGAACAAAATGCACAAAGTAACAAAGGAACAAAACAGAGGGAGGAAGCATCAAAAGCGGAAATTTATTAAGGTAAGAAATAGGGTGGGTATGGGCTTGAGCAAGTGGCTCAAGGACCCAGTT [...]
+chr4-04	EST_Human	nucleotide_match	300820	300926	82.000000	+	.	Target=BE243937.1 3 109 +;percentID=88.9;Gap=M5 D1 M4 I1 M97 ;sequence=GGCCACACAAGCAGAGAACACCATGTCTTCAGATCTCTTCACAGCCTTGTCCTCCAGAGTTTAGAAGTGGAGGGAAAAGTTTATAGGCAATGTTCTTGTTTTGCTATTTGT
+chr4-04	EST_Human	nucleotide_match	301028	301631	291.000000	+	.	Target=BF796782.1 146 740 +;percentID=77.2;Gap=M2 D1 M5 I1 M1 I1 M2 I1 M1 I2 M36 D6 M25 I1 M3 I1 M1 I6 M51 D1 M2 D2 M1 D1 M1 D2 M1 D1 M3 D1 M166 D1 M112 I4 M7 I1 M7 D1 M34 D1 M8 D2 M5 D1 M5 D1 M1 D1 M12 I1 M16 D1 M6 D1 M3 D1 M4 D1 M4 D1 M2 D1 M30 I1 M18 
+chr4-04	EST_Human	nucleotide_match	301131	301782	516.000000	+	.	Target=CA314198.1 20 665 +;percentID=90.1;Gap=M291 D1 M43 I1 M79 I1 M112 I1 M64 D1 M1 D1 M1 D5 M1 D1 M51 ;sequence=TTTTTTTTTTTTTTTTTTGAATAGCAAAAGCAAGATTTTATTAAAGTGAGAAAGCACTCTACAGGGTGGGTGTGAGCCCCAGCAAGCCGCCCAAGGACCCGGTTACAATGTTTTCTGGGTTTTAAGTACTCCTTTTGAGGTTCCTATCAGCTACCCCTTATCTNAATGAAGGATTTGGTCCTTGGCTAATCAAAGGTTGAGGCGAATTGGTACCCTATGCAGATNAAGGCATGGCCTGTGCTTGGCCCACGGCCACTCCAAGGCACTGTCCTTTTCTATCAGAGAACTGGTACAAGGGGGAGGGTTGTAGGAC [...]
+chr4-04	EST_Human	nucleotide_match	301134	301778	519.000000	+	.	Target=BU685417.1 19 658 +;percentID=90.9;Gap=M331 I1 M80 I1 M112 I1 M64 D1 M1 D1 M1 D5 M1 D1 M47 ;sequence=TTTTTTTTTTTTTTTTTTAGCAAAAGCAAGATTTTATTAAAGTGAGAAAGCACTCTACAGGGTGGGTGTGAGCCCCAGCAAGCCGCCCAAGGACCCGGTTACAATGTTTTCTGGGTTTTAAGTACTCCTTTTGAGGTTCCTATCAGCTACCCCTTATCTGAATGAAGGATTTGGTCCTTGGCTAATCAAAGGTTGAGGCGAATTGGTACCCTATGCAGATGAAGGCATGGCCTGTGCTTGGCCCACGGCCACTCCAAGGCACTGTCCTTTTCTATCAGAGAACTGGTACAAGGGGGAGGGTTGTAGCGACAGTCGCTTTC [...]
+chr4-04	EST_Human	nucleotide_match	301197	301828	513.000000	+	.	Target=CB854294.1 1 626 +;percentID=91.3;Gap=M268 I1 M80 I1 M112 I1 M64 D1 M1 D1 M1 D5 M1 D1 M86 D1 M10 ;sequence=GCCGCCCAAGGACCCGGTTACAATGTTTTCTGGGTTTTAAGTACTCCTTTTGAGGTTCCTATCAGCTACCCCTTATCTGAATGAAGGATTTGGTCCTTGGCTAATCAAAGGTTGAGGCGAATTGGTACCCTATGCAGATGAAGGCATGGCCTGTGCTTGGCCCACGGCCACTCCAAGGCACTGTCCTTTTCTATCAGAGAACTGGTACAAGGGGGAGGGTTGTAGCGACAGTCGCTTTCGATCCTTTGCTACTCGGGTGTAGATGAGGTTTTTCCTTTTGGTTTAGATGTAGGAAGTTCACGTTAACTGGCTTT [...]
+chr4-04	EST_Human	nucleotide_match	301340	301916	501.000000	+	.	Target=BY797195.2 1 584 +;percentID=93.5;Gap=M125 I1 M80 I1 M112 I1 M120 I4 M140 ;sequence=GCATGGTCTGTGCTTGGCCCACGGCCACTCCAAGGCACTGTCCTTTTCTATCAGAGAACTGGTACAAGGGGGAGGGTTGTAGTGACAGTCGCCTTCGATCCTTTGCTACTCGGGTGTAGATGAGGTTTTTCCTTTTGGTTTAGTTGTAGGAAGTTCACGTTAACTGGCTTTAGGTTCCCTGCTCCCAGACCTTGGTGTTTTTTCTTGTAGGAAGTCAGCACGAATTGGCCTTAAGTTCCCTGTCTCCAGACCCTATTCTCCTGCCTCACTTCTGTATAAGTCAATACCATCTTAAAACAAATCTAACTTTAAATAAAGGAAAAAAGAAAATCAATAC [...]
+chr4-04	EST_Human	nucleotide_match	301368	302020	587.000000	-	.	Target=BQ224228.1 191 858 +;percentID=95.2;Gap=M478 D1 M44 I1 M29 I1 M11 I1 M8 I1 M6 I1 M13 I1 M3 I1 M6 I1 M3 I1 M6 I1 M2 I1 M6 I1 M3 I1 M4 I1 M3 I1 M5 I1 M1 I1 M13 D1 M7 ;sequence=CATGTGAGATGTGCCTTTCAGCTTGCGCCGTGATTGTGAGGCCTCCCTAGCATTGTGGAGTTTGGGGCATTGGCCAGGCGCGGTCCACTGCACTCCAACCTGGGCAACAGAGTGAGACTGCATATCAAAAAAAAAAAAATAGTGGAGCATTTACATTCAGTCATCATGAGATGGATACTAATATTCCAAGAATTCTTCCATCTCTATGAGAACAAGCCCATTTTAACTTTCTGGAGGATAAAATAGC [...]
+chr4-04	EST_Human	nucleotide_match	301445	302023	442.000000	-	.	Target=BM906511.1 391 1008 +;percentID=89;Gap=M345 I1 M8 I1 M17 I1 M6 I1 M9 I1 M5 I1 M2 I1 M5 I1 M10 I1 M8 I1 M6 I1 M6 I1 M12 I1 M2 I1 M5 I1 M8 I1 M10 I2 M4 I1 M5 I1 M5 I1 M6 I1 M8 I1 M4 I1 M6 I1 M4 I1 M3 I1 M10 I1 M2 I1 M4 I1 M3 I1 M1 I1 M6 I1 M6 I1 M3 I1 M5 I2 M5 I1 M7 I1 M4 I1 M9 D1 M4 
+chr4-04	EST_Human	nucleotide_match	301462	302023	559.000000	-	.	Target=CA439736.1 136 696 +;percentID=99.8;Gap=M487 D1 M74 ;sequence=TTTATTTTTTTTTTTTTTAGTAGAGATGGGGTTTCACCGTGTTAGCCAGGATGGTCTTGATCTCCTGACCTGGTGATCCGCCCACTTTGGCCTCCCAAAGTGCTGGGATTACAGGCATGAGCCACCGCGCCCGGCCAGAATTCTTCCATCTCTATGAGAACAAGCCCATTTTAACTTTCTGGAGGATAAAATAGCATGCTGAGGAAAGCCAAAGTGCGCCAGTTTACAGACAGCTCACTCCCAGAAGCAGAGCCACCTAATTCACCAGCATCTGACCACTCACACCTGAAGGAGCCAAACTGAGCCCAGAAGAATGGCCCAGCTAAGCCCAGCCTAAATTTCTAACCAGCTCAACCCTG [...]
+chr4-04	EST_Human	nucleotide_match	301465	301994	526.000000	-	.	Target=BF345586.1 1 530 +;percentID=99.6;sequence=CCCATTTTAACTTTCTGGAGGATAAAATAGCATGCTGAGGAAAGCCAAAGTGCGCCAGTTTACAGACAGCTCACTCCCAGAAGCAGAGCCACCTAATTCACCAGCATCTGACCACTCACACCTGAAGGAGCCAAACTGAGCCCAGAAGAATGGCCCAGCTAAGCCCAGCCTAAATTTCTAACCAGCTCAACCCTGAGCTAGTATGTTTCAGGATTGTTATGCAGTTATAGCTTAGTAATATATACACCCATTAAAGACAGGATTCCAGGATTCCAGGACAGATTGATTACAAATAACCTGCAAATGCTTGGCACCCTGTAAGTATTGATATTGTGTTTCCTTTATTTAAAGTTAAATTTGTTGTAAGATGGTATTGAC [...]
+chr4-04	EST_Human	nucleotide_match	301469	302029	451.000000	-	.	Target=CN271553.1 1 550 +;percentID=91.5;Gap=M55 D1 M1 D1 M1 D3 M6 D1 M229 D1 M1 D5 M1 D1 M1 D1 M64 I1 M112 I1 M56 I1 M20 ;sequence=CTTTTTCAGAATTATTCCATCTCTATGACAACAAGCCCATTTTAGCTTTCTGGAGAATAGCATCTGAGAAAAGCCAAAGTGCCTCAGTTTACAGACAGCTCACTCACAGAAGCAGAGCCACCTAATTCACCAGCATCTAACCACTCACACCTGAAGGAGCCAAACTGAGCCCAGAAGAATGGCCCGGCTGAGCCCAGCCTAAATTTCTAACCAGCTCAATCCTGAGCTAGTATGTTTCGGGATTGTTATGCAGTTATAAGTTAGTAATATATACACCCATTAAAGACAGGATCTCA [...]
+chr4-04	EST_Human	nucleotide_match	301503	302080	263.000000	-	.	Target=BG338431.1 460 992 +;percentID=77.4;Gap=M29 D1 M15 I1 M61 D1 M1 D1 M1 D3 M6 D1 M12 I1 M96 D1 M22 D1 M10 D1 M15 D1 M7 I1 M4 D1 M12 D1 M7 D1 M28 D1 M3 D1 M6 D1 M4 D2 M1 D2 M4 D1 M1 D3 M1 D1 M2 D1 M6 D1 M1 D1 M5 D1 M6 D1 M14 D1 M3 D1 M7 I1 M31 D1 M11 D1 M4 I1 M3 I1 M3 D1 M4 D1 M15 D1 M8 D1 M11 D2 M1 D1 M15 D1 M1 D1 M9 D1 M1 D2 M4 D1 M2 D1 M3 D1 M1 D1 M10 ;sequence=GCTAAACCCAATGCTCAGCAATTTTCTCAAATAGTTTTACAGTTTTTCCAAGAGACT [...]
+chr4-04	EST_Human	nucleotide_match	301503	302223	508.000000	-	.	Target=BX115999.1 34 744 +;percentID=86.4;Gap=M95 I1 M93 D1 M47 D1 M141 D2 M1 D1 M56 I1 M2 I3 M52 D4 M1 D4 M77 D2 M1 D1 M99 I1 M40 ;sequence=GTGACAAGAGCAAAACTGCATCTCAAAAATAAAAAAGACAAATATTTTAAAATTTCTTCTTGTATTCATGCCCTTGGCAGTGGCTTTTATAGTCGTTCCCATCAAGAGACAGATTCTGCTTCCCAAACCTTGACTCTTTCTTGCCTTATTTGCACTGGCCAAAGCTGTGCACATGACAGTATGTCAGTTTGGTACCTAGGTTCAAACAGTTTTAAATGCTTCGTTTTGTTTTTCAGAACCCTTTCATCTCTATTAGAACAAGCCCATTTAACTTTCTGGAGGATAAA [...]
+chr4-04	EST_Human	nucleotide_match	301748	302080	253.000000	-	.	Target=BQ428430.1 539 870 +;percentID=89.1;Gap=M29 D1 M76 D1 M1 D1 M1 D3 M6 D1 M116 I1 M8 I1 M46 I1 M9 I1 M7 I1 M8 I1 M19 ;sequence=TTTGTAGGTATGATTAGTGCATTATAGGTGTTTTCAAATTTCTCCTATGATAAATTAAAAATGTAATGTTGGGCATTAATTTCCTAAACCCAATGCTCAGCAATTTTCTCAAATTGTTTACAGTTTTTCCAAGAGACTTCAGAACCATTCCCTGGAGTGAATTATTTCCAATGGTGAAGAGTAATGGATGGATGGCATGAGATTCTCAAAAAAATCTTGCTCCTATTTCAGAAGTGTCACTCCAGCCCCTTGAAGGTCCAGGAAACCTGGCTGAGTAGTGTGGTCTATGGAGGTGC [...]
+chr4-04	EST_Human	nucleotide_match	301841	302080	151.000000	-	.	Target=BG110742.1 584 803 +;percentID=85.9;Gap=M80 I1 M26 D1 M1 D1 M1 D3 M6 D1 M14 D1 M20 D1 M22 D1 M8 D1 M2 D1 M4 D1 M2 D1 M1 D1 M6 D1 M9 D1 M2 D2 M3 D1 M4 D1 M2 D1 M6 ;sequence=CCTGTAGTCCCAGCTACTCGGGAAGCTGAGGCAGGAGAATCGCTTGAACCCAGGATGCAGAGGTTGCAGTGAGCTGATGTTGTGCCACTGCAGTGCAGCCTGCCAACAGAGTAAGACCCGTCTCAACAACAACAACAAAAAAGAAGAAAATTTTTAGGAGACAATGTTTTTCCAAGAGACTTCAGAACCATTCCCTGGAGTGAATTATTTCCAATGGTGAAGAGTAATGGATGGATGGCATGAGATTCT [...]
+chr4-04	EST_Human	nucleotide_match	302004	302854	631.000000	-	.	Target=BQ722919.1 4 844 +;percentID=88.5;Gap=M208 I2 M220 D6 M28 D2 M73 I1 M116 I1 M22 I1 M11 I1 M40 I1 M30 D2 M1 D2 M3 D1 M1 D5 M1 D3 M4 D1 M35 I1 M4 I1 M15 I1 M7 I1 M7 I1 M3 ;sequence=CACTTGCCCTATGGCTGCTCCTAAATGTGGGGTCTTAGAAAACATCTTGTCCCTTCGAAGCATACTCTGCTGGTTGGCTAAATTGCACTGGGAAAAAATAGCAGCAGCCCTATTGCTATGTCACTTGCCTGCAGAGCAAAAGTTGATTCAGGAACAGTAATTTGACTTTGTCTATATTAAAAATCATAAATAGTCAACAAATGCAAAAAATGCAAAGAATTTGTAGGTATGATTAGTGCATT [...]
+chr4-04	EST_Human	nucleotide_match	302095	302557	344.000000	-	.	Target=BG338431.1 2 459 +;percentID=88.2;Gap=M37 I1 M95 D5 M28 D2 M189 I1 M70 I1 M3 I1 M30 D2 M2 
+chr4-04	EST_Human	nucleotide_match	302095	302640	422.000000	-	.	Target=BQ428430.1 1 538 +;percentID=89.6;Gap=M214 D6 M28 D2 M189 I1 M73 I1 M30 D2 M2 
+chr4-04	EST_Human	nucleotide_match	302096	302518	313.000000	-	.	Target=BG110742.1 166 583 +;percentID=88.1;Gap=M92 D6 M28 D2 M189 I1 M73 I1 M14 I1 M19 
+chr4-04	EST_Human	nucleotide_match	302253	302709	344.000000	-	.	Target=AU144283.1 1 451 +;percentID=87.8;Gap=M64 I1 M2 I1 M125 D1 M91 D6 M28 D2 M131 I1 M7 ;sequence=CAGGAACAGTAATTTGACTTTGTCTATATTAAAAATCATAAATAGTCAACAAATACAAAAAATACAAAGAGTTTGCAGATATGATCAGNGCATTATAGGNGTTTTCAAATTTCTCCTATGATAAATTAAAAATGTAATGTTGGACATTAATTTCCTAAACCCAATGCTCAGCAATTTTCTCAAATTGTTTCGCTTTTCCCAAGAGACTTCAGAACCATTCCCTGGAGNGAATTATTTCCAATGGTGAAGAGTAATGGATGGATGGGATGACATTCTCAAAAAAATCTTGCTCCTATTTCAGAAGNGTCACTCCAGCCCCTTGAAGGT [...]
+chr4-04	EST_Human	nucleotide_match	302268	302708	441.000000	-	.	Target=AA278523.1 1 441 +;percentID=100;sequence=AGGAACAGTAATTTGATTTAGTCTATATTAAAAATCATAAATAGTCTACAAATACAAAAAATAAAGAGTTTGCAGCTATGTTGAGTGCATTATAGGTGTTTTCAAATTTCTCCTATGATAAATTAAAAATGTAACGTTGGGCATTAATTTCCTAAACCCAATGCTCAGCAATTTCCTCAAATTGTTGCCAGTTTTTCCAAGAGACTTCAGAACCATTCCCTGGAGTGAATTATTTCCAATGGTGAAGAGTAAGGGGTGGATGGGATGAGATTCTAAAAAAAAAAAAAATCTTGCTTCTATTTCAGAAGTGTCACTCTTCAGCCCCGTGAAGGACACGAAAAGCTGGCTGAGTAGTGTGGTCTATGGAGGTGCAGGGGCT [...]
+chr4-04	EST_Human	nucleotide_match	302434	302891	456.000000	+	.	Target=AI703192.1 1 458 +;percentID=99.8;sequence=TAGAATCTTATCCCATCCACCCCTTACTCTTCACCATTGGAAATAATTCACTCCAGGGAATGGTTCTGAAGTCTCTTGGAAAAACTGGCAACAATTTGAGGAAATTGCTGAGCATTGGGTTTAGGAAATTAATGCCCAACGTTACATTTTTAATTTATCATAGGAGAAATTTGAAAACACCTATAATGCACTCAACATAGCTGCAAACTCTTTATTTTTTGTATTTGTAGACTATTTATGATTTTTAATATAGACTAAATCAAATTACTGTTCCTGAAACAACTTTTGCTCTGCAGGCAAGTGACATAGCAATAGGGCTGCTGATATTTTTTCCTGCTGCAATTTAGCCAACCAGCAGAGTATGCTTTGAAGGGCCAA [...]
+chr4-04	EST_Human	nucleotide_match	302464	302830	298.000000	+	.	Target=BQ365830.1 6 371 +;percentID=91.1;Gap=M16 D1 M8 D1 M28 D1 M125 I1 M2 I1 M185 ;sequence=CTACATCACGATAGGAAATAATCACTCCAGGAATGGTTCTGAAGTCTCTTGGGACAAGCGAAACAATTTGAGAAAATTGCTGAGCATTGGGTTTAGGAAATTAATGTCCAACATTACATTTTTAATTTATCATAGGAGAAATTTGTAAACACCTATAATGCACTGATCATATCTGCAAACTCTTTGTATTTTTTGTATTTGTTGACTATTTATGATTTTTAATATAGACAAAGTCAAATTACTGTTCCTGAATCAACTTTTGCTCTGTAGACAAATGACATAGCAATAGGGCTGCTGCTTTTTTTTCCCAGTGCAATTTAGCCGACCAGCAGAG [...]
+chr4-04	EST_Human	nucleotide_match	303000	303409	210.000000	-	.	Target=CV408888.1 19 450 +;percentID=78.5;Gap=M22 D1 M41 D1 M68 D1 M1 D1 M59 I1 M1 I1 M3 I4 M1 I3 M2 I1 M1 I3 M1 I1 M4 I5 M1 I1 M5 I1 M3 I1 M6 I1 M1 I5 M55 I1 M2 I2 M19 I1 M68 D1 M2 D3 M2 D2 M32 ;sequence=TAGAGGATCCCGTGTGTTCCTTTGTCTTTCATTGTTTACTCAGTTGAGTAAATATCATGGTTTCAGTTTTGGGGAATGCAATTTCTTACAGCAAAGTCCTTCCTCCACAATAATATTCACCACGGTCAGGCCACCTAGCACAGTGGGCTTAGTATGTGTGGAACTGGTTTGAATCAGGAGCAAAACAAGCAGTAGAGGTGAGTAGAGAACACAGGCGGGACTG [...]
+chr4-04	EST_Human	nucleotide_match	303000	303489	277.000000	+	.	Target=CB993178.1 47 558 +;percentID=80.4;Gap=M32 D2 M2 D3 M2 D1 M87 I2 M2 I1 M55 I5 M1 I1 M6 I1 M3 I1 M5 I1 M1 I5 M4 I1 M1 I3 M1 I1 M2 I3 M1 I4 M3 I1 M1 I1 M59 D1 M1 D1 M68 D1 M144 ;sequence=TCTAGCGAGGTGACAGCGTAGAACCAGGATTACAGGCGTGCGCCAGTTAAGCCAGAATCTTTAGAGTGAGACCCAGGCAATGGCGATTTTAGGCTCTCCAGGTGATTACAATATGCAACCATGCTCCCAAATGTCTGCTGTAAACCAACATCTTTCGGAGGACCAGTTGAAAATAATATTTCTCAAATTAATGTGAAAAGTGTTTGCTGTTGAGTTGCGGCCTTTCAGTCCCGCCT [...]
+chr4-04	EST_Human	nucleotide_match	303221	303489	184.000000	+	.	Target=CN268901.1 116 381 +;percentID=84.8;Gap=M53 D1 M1 D1 M68 D1 M144 ;sequence=CGCGTCCGAATTAATGTGAAAAGTGTTTGCTGTTGAGTTGCGGCCTTTCAGTCCCGCCTTTGTTCTCTACTCACCACTGTTGAGTTGTGGCCTTTCAGTCCCGCCTGTGTTCTCTACTCACCTCTACTGCTTGTTTTGCTCCTGATTCAAACCAGTTCCACACATACTAAGCCCACTGTGCTAGGTGGCCTGACCGTGGTGAATATTATTGTGGAGGAAGGACTTTGCTGTAAGAAATTGCATTCCCCAAAACTGAAACCATGATATTTACTCAACTGAGGTAAAAAATGAAAGACTAAGGGGGACTCCCAAGGGTCAGGGCAAGAATAAATACCTTGGAATATTA [...]
+chr4-04	EST_Human	nucleotide_match	303443	303570	128.000000	-	.	Target=BQ224228.1 63 190 +;percentID=100
+chr4-04	EST_Human	nucleotide_match	303625	303971	208.000000	+	.	Target=DB353038.1 4 348 +;percentID=81.3;Gap=M19 D1 M11 D3 M23 D1 M5 D2 M35 D1 M42 I1 M53 I2 M17 I3 M134 ;sequence=AAGATTAAATATGTAATATTTAAATTTTATTGAATGACATGCATACAGAAATATATGTCCAAAGCATTAACATAATGCTCAGTAAATTATTACAAACAAATACATTTGTGTAGGCATAGGATAGAACTAGCCTTGTTTCTGCCACACAAACCACTTTCTNTTTTCCTCCCCTCCAAAAGTAACCACAATCTTAAGAGCTAATGTTGTAGATAAAGTTTGTCTTTTTATACAATTATTTTATTAGAGAATATTTTAAACATATATGCAATAAGCAATGTAGTATAATAGACTGATGCTCAGCCTAAACATCTAC [...]
+chr4-04	EST_Human	nucleotide_match	303821	303971	119.000000	-	.	Target=CD514482.1 178 329 +;percentID=89.5;Gap=M135 I1 M16 ;sequence=CAGGTGATTCACATGCACATTAATAATTGTTAACTGGTAGTAATTCTGTAATTGAAAGGGAAACGCTTATACAGATGTACTGATTTGTCAGACAGGTACAGTAATGACTATGTTTCGATGCATATACATCTTATCTTACAGAAAATGAAAATAATAAAGTGGGGATGGGGAAGGAGTTGAAGTAGAAATTAAACAGAAATGAGACATAATTAGCAGATGTTCAGGTGGAGCATCAGCCTATTATACTATTTTGGTTACTGTGTATAAGTTAAAAATATTCTCTAATAAAACACTTGTATAAAAAGACAAACAATCTATAACATTGCCTCTTGGCTGGGCACGGTGGCTCACGCCTGTAA [...]
+chr4-04	EST_Human	nucleotide_match	303939	304316	180.000000	-	.	Target=BX483315.1 117 492 +;percentID=75.3;Gap=M3 D1 M12 I2 M5 D1 M11 D1 M5 D1 M3 D1 M59 I2 M105 D1 M6 I1 M120 I1 M26 D1 M9 D1 M6 ;sequence=ACCTGAGGCAGGAGAATCATATGAACCTGGGAGGCAGAGGTTGCAGTGAGCCGAGATCACGCCATTTCACTTCAACCTGGGTGACAGAGTGAGAGTCCCTCTCAAAAAAAACAAAAACAAAAACAACTTGATGAATAAAATTAAGAAAAATTGGGCCGGGCGCGGTGGCTCATGCTGGTAATCCCAGCACTTTGGGAGGCCGAGGTGGGCGGATCCCCTGAGGTCAGGAGTTTGAGGCCAGCCTGACCAACATGGAGAAACCTCCTCTCTACTAAAAATACAAAAAAT [...]
+chr4-04	EST_Human	nucleotide_match	304269	304456	147.000000	+	.	Target=DB353038.1 349 535 +;percentID=89.4;Gap=M8 D1 M179 
+chr4-04	EST_Human	nucleotide_match	304269	304455	113.000000	-	.	Target=CD514482.1 1 177 +;percentID=82.9;Gap=M109 D2 M39 D2 M3 D5 M18 D1 M8 
+chr4-04	EST_Human	nucleotide_match	304622	304820	165.000000	+	.	Target=AJ713840.1 33 235 +;percentID=91.6;Gap=M108 I2 M65 I2 M26 ;sequence=GCCGCAGTGGTGGTGGGAATTCAGAATAAAATAACAAATCAAAATGCATGTGCAATATGCGACCTGTGGGAGCATTTCATCAACAATGTCTCACAGTCATATGTGACCTTTACTGACTCGCCCAAAATTCGGTCATTTATACACCAAGTGCACATAAATTTCATAGTTTCCTATTAAAATTATATTTAATGCCTTTATAAAATCTAACTCAGTTTTCTGATCAAATTAAGTAACATT
+chr4-04	EST_Human	nucleotide_match	304622	304959	241.000000	+	.	Target=BX395253.2 14 346 +;percentID=87.1;Gap=M108 I2 M65 I2 M25 D1 M2 D1 M3 D1 M19 D1 M3 D1 M2 D1 M1 D2 M1 D1 M100 ;sequence=CCTCAGATAAAATAACAAATCAAAATGCATGTGCAATATGCGACCTGTGGGAGCATTTCATCAACAATGTCTCACAGTCATATGTGACCTTTACTGACTCGCCCAAAATTCGGTCATTTATACACCAAGTGCACATAAATTTCATAGTTTCCTATTAAAATTATATTTAATGCCTTTATAAAATCTAACTCAGTTTTCTGATCAAATTAAGTAACATTTTATATGACGTTTTAAGTTCCGTTTATATTAAACTTACATAATTTTATTAGGCAGCGTATGCGTGTCTACTACCAAATATTCTT [...]
+chr4-04	EST_Human	nucleotide_match	315735	315938	139.000000	+	.	Target=DB302170.1 356 558 +;percentID=84.3;Gap=M52 D1 M151 ;sequence=CTCTTGACCAGAAGATTTGTTTACCTACCATTTCATTGGTAGTATGGCCTGCGGTGACCATTTTTTTGTGTGTGTACAGCAGTCATACAGGCTTTGCCTTTAATGATCTCTTATGGTTAGAAAACACAATAAAAACAAACTGGCTACCTGGACAAATTGTATATTACCAGATCATCACTAGCAGCTTTCAGTTGCACTTCAGTCCTTTATCAAATTCATAAAGAATTGTTCTGGGAAGTGAGGAGCACCTCTGCCTGGCCACCCTGTCTGGGAAGTGAGGAGCCCCGCTTCCCGGGAGCCGCCCCATCTGGGAAGTGAGGAGCGCTTGCCTGGCCGCCCAACTGTCTGGGAAGTGTGGT [...]
+chr4-04	EST_Human	nucleotide_match	315736	315932	134.000000	+	.	Target=DB313739.1 353 548 +;percentID=84.3;Gap=M51 D1 M145 ;sequence=CTTGACCAGAAGATTTGTTTACCTACCATTTCATTGGTAGTATGGCCTGCGGTGACCATTTTTTTGTGTGTGTACAGCGTCATACAGGCTTTGCCTTTAATGATCTCTTATGGTTAGAAAACACAATAAAAACAAACTGGCTACTGGACAAATTGTATATTACCAGATCATCACTAGCAGCTTTCAGTTGCACTTCAGTCCTTTATCAAATTCATAAAGAATTGTTCTGGGAAGTGAGGAGCACCTCTGCCTGGCCACCCTGTCTGGGAAGTGAGGAGCCCCGCTTCCCGCGAGCCGCCCCATCTGGGAAGTGAGGAGCGCTTGCCTGGCCGCCCAACTGTCTGGGAAGTGAGGTGTGC [...]
+chr4-04	EST_Human	nucleotide_match	315736	315930	137.000000	+	.	Target=AA292824.1 253 447 +;percentID=85.1;sequence=ACGGTATGGGAAGTCAGGAGCGCCTCTGCCCAGCTGCCCTGTCTGGGAAGTAAGGAGCGCCTCTGCCTCGCCGCCATCCCGTCTGCGAAGTGAGGCGTGCCTCTGCCCGGCCTCCTCACCGTCTGGGAAATGAGAAGCGCCTCTGCCCGGCCACCGTCCCATCTGGGAAGTGAGGAGCGCTTCTGCCCAGCCACCGCCCTGTCTGGAAAGTGAGGAGCACCTCTGCCCAGCCCCCTCACCCTTTGTAAGGGAGGAGTGCCTCTGCCCAGCCCCTGCACCGTCTGGGAAGTGAGGAGCGCCTCTGCCCGGCCCCCTCACCATCTGGGAAGTGAGGAGCGTCTCTGCCCAGCCGCTGTGCAACCTTCCACGTGTGAAG [...]
+chr4-04	EST_Human	nucleotide_match	315736	315943	141.000000	+	.	Target=BQ018108.1 371 577 +;percentID=84.1;Gap=M51 D1 M156 ;sequence=TTTTTTTTTTTTTTTTCTCTTGACCAGAAGATTTGTTTACCTACCATTTCATTGGTAGTATGGCCTGCGGTGACCATTTTTTTGTGTGTGTACAGCGTCATACAGGCTTTGCCTTTAATGATCTCTTATGGTTAGAAAACACAATAAAAACAAACTGGCTACTGGACAAATTGTATATTACCAGATCATCACTAGCAGCTTTCAGTTGCACTTCAGTCCTTTATCAAATTCATAAAGAATTGTTCTGGGAAGTGAGGAGCACCTCTGCCTGGCCACCCTGTCTGGGAAGTGAGGAGCCCCGCTTCCCGCGAGCCGCCCCATCTGGGAAGTGAGGAGCGCTTGCCTGGCCGCCCAACTGT [...]
+chr4-04	EST_Human	nucleotide_match	315736	315943	141.000000	-	.	Target=DA935082.1 192 398 +;percentID=84.1;Gap=M156 D1 M51 ;sequence=CGGAACGCTGCAGCCCAGGCTTCCTCCCACAGTGGCCCTTGGAAGCAGGCCGCAGAGTAGACAGCTGCTCCTTTTGGAAGAGTCAGTCCCCTGTGTTTTCTGAACTGTTTTTCCTAGCATGTATGTGGGTAGAGCTTTCATGCATCTCTAGTAATAATAAGCTGAAATTAGTTTTTTTTTTAATTCTCCAATTTAAAACTTTTAATTAAAAAGTAAATTTTAATGTCGAAAATGCAAACTTGGGGAGGGCAGAAAGATCACACACAAGGCTGTCACTTCATACTTGCAGGATTGCACAGCAGCCGGGCAGAGGCGCTCCTCACTTCCCAGATGGGGCGGCGGGCAGCAGAGACGCACCT [...]
+chr4-04	EST_Human	nucleotide_match	315736	315943	141.000000	-	.	Target=DA513682.1 307 513 +;percentID=84.1;Gap=M156 D1 M51 ;sequence=CGCCAAATTGTAGTTGAAGCTAAGGAAGGGGAATCTGGCCCCTGCTGGGAGAGGGAACTGGAATGCCACACAAGGCAAGGCCTGCTTCCTTCCTTCCCCTCTGCTGCTGCTGCCTCGGAACGCTGCAGCCCAGGCTTCCTCCCACAGTGGCCCTTGGAAGCAGGCCGCAGAGTAGACAGCTGCTCCTTTTGGAAGAGTCAGTCCCCTGTGTTTTCTGAACTGTTTTTCCTAGCATGTATGTGGGTAGAGCTTTCATGCATCTCTAGTAATAATAAGCTGAAATTAGTTTTTTTTTTAATTCTCCAATTTAAAACTTTTAATTAAAAAGTAAATTTTAATGTCGAAAATGCAAACTTGGG [...]
+chr4-04	EST_Human	nucleotide_match	315736	315943	141.000000	+	.	Target=CB160516.1 352 558 +;percentID=84.1;Gap=M51 D1 M156 ;sequence=TTGACCAGAAGATTTGTTTACCTACCATTTCATTGGTAGTATGGCCTGCGGTGACCATTTTTTTGTGTGTGTACAGCGTCATACAGGCTTTGCCTTTAATGATCTCTTATGGTTAGAAAACACAATAAAAACAAACTGGCTACTGGACAAATTGTATATTACCAGATCATCACTAGCAGCTTTCAGTTGCACTTCAGTCCTTTATCAAATTCATAAAGAATTGTTCTGGGAAGTGAGGAGCACCTCTGCCTGGCCACCCTGTCTGGGAAGTGAGGAGCCCCGCTTCCCGCGAGCCGCCCCATCTGGGAAGTGAGGAGCGCTTGCCTGGCCGCCCAACTGTCTGGGAAGTGAGGTGTGCC [...]
+chr4-04	EST_Human	nucleotide_match	315736	315935	142.000000	-	.	Target=AA401684.1 15 214 +;percentID=85.5;sequence=TTTTAGCATTTTTTTTTTAATTAAAAAGTAAACTTTAATGTCGAAAATGCAAACTTGGGGAGGGCAGAAAGATCACACACAAGGCTGTCACTTCACACGTGGAAGGTTGCACAGCGGCTGGGCAGAGACGCTCCTCACTTCCCAGATGGTGAGGGGGCCGGGCAGAGGCGCTCCTCACTTCCCAGACGGTGCAGGGGCTGGGCAGAGGCACTCCTCCCTTACAAAGGGTGAGGGGGCT
+chr4-04	EST_Human	nucleotide_match	315736	315943	143.000000	+	.	Target=BU623852.1 258 462 +;percentID=85.1;Gap=M20 D1 M3 D2 M182 ;sequence=TTTTTTTTTTTTTTTTTTCTCTTGACCAGAAGATTTGTTTACCTACCATTTCATTGGTAGTATGGCCTGCGGTGACCATTTTTTTGTGTGTGTACAGCGTCATACAGGCTTTGCCTTTAATGATCTCTTATGGTTAGAAAACACAATAAAAACAAACTGGCTACTGGACAAATTGTATATTACCAGATCATCACTAGCAGCTTTCAGTTGCACTTCAGTCCTTTATCAAATTCATAAAGAATTGTTCTGGGAAGTGAGGAGCACCTCTGCCTGGCCACCCTGTCTGGGAAGTGAGGAGCCCCGCTTCCCGGGAGCCGCCCCATCTGGGAAGTGAGGAGCGCCTCTGCCCGGCT [...]
+chr4-04	EST_Human	nucleotide_match	315788	315935	94.000000	+	.	Target=BQ371442.1 79 227 +;percentID=82.8;Gap=M4 D1 M4 I1 M8 I1 M3 I1 M13 D1 M114 ;sequence=CTTGAGCATCCTGCTAGTCCTGAGCATCCTGCTGTCCTGAGCATCCTGCTGTCCTGGTCATCCTGCTGTCCTGATCATCCTGCTGTCCTGATCATCCTGCTGTCCTGATCATCCTGCTGCCCGGCTGCTGTGCAACCTTCCAAGAGTGAAGTGACAGCCTTGTGTGTGATCTTTCTGCCCTCCCCAAGTTTGCATTTTCGACATTGAAGTTTACTTTTTAATTAAAAAAAAGGAGATTGAGATCATTCTGGCCAACATGGTGAAACTCCGTCTCTACTGAAAATACAAGAATTAGGCCGGCATCGCGGTTTGTGCCTGTGGTCCCAGCTACTCGGGA
+chr4-04	EST_Human	nucleotide_match	315797	315948	94.000000	-	.	Target=BX504916.1 415 567 +;percentID=81;Gap=M9 I1 M143 ;sequence=AAGGTATTAGAGTGATATGAATTTCACTAGAAATATTGATAGTTTTGTTTTATTTCATTTTTTGAGAATGAGTCTCTGTCTGTTACCCAGGCTGGAGTGCAATGGTGCAATCTTGGCTCACTGCAACCTCCACCTCCTGGGTTCAAGCAATTCTCCTGCCTCAGCCTCCTGAGTAGCTGGGACTACAGGTGCGCACCACCATGTCTGGCTAATTTTTGTATTTTTACTAGAGAGGGGGTTTCACCATGTTGGCCAGGCTGGTCTCGAACTCCTGACCTCAGGTAATCCACCTGCCTCGGCTTCCCAAAGTGTTGGGATTACAGGTGTGAGGCACCACGCCCGAACGATAGTTTTATAAAACCT [...]
+chr4-04	EST_Human	nucleotide_match	316004	316385	197.000000	-	.	Target=BX504916.1 33 414 +;percentID=76.7;Gap=M24 I1 M18 I1 M2 D1 M201 I1 M1 I1 M66 D1 M1 D1 M11 D1 M2 D1 M36 I1 M15 
+chr4-04	EST_Human	nucleotide_match	319773	320263	483.000000	+	.	Target=BX485043.1 4 494 +;percentID=99.2;sequence=TGTTTTTTTTTTTTTTTTTGAGATGCAGTTTCGCTCCTGTTGCCCAGGCTGTAGTGCAATGGTGCAATCTCGGCTCACCGCAACCTCCGCCTCCCGGGTTCAAGCAACTCTCCTGCCTCAGCCTCCCAAGTAGCTGGGATTACATGCATGCCTGTAATTAACCATGCCTGGCTAATTTTGTATTTCTAGTAGAGATGGGGTTTCTCCATGTTGGTCAGGCTGGTCTCGAACTCCCGACCTCAGGTGATCCACCCGCCTCGGCCTCCCAAAGTGTTGGGATTACTGGCGTGAGCCACTGCACCTGGCTATTTTCATAGAAATTGACAAGCTGCTCTTTCTAAATTCTATACAGACATGCAAAAAAATCAAACACATGAG [...]
+chr4-04	EST_Human	nucleotide_match	320155	320306	140.000000	+	.	Target=R50084.1 2 153 +;percentID=93.4;sequence=NAAAACAAAAATGAAATTTATTTCTGANATTCTNACTAAAATNTTATACTAACCAAACAATATGGCATTACCATAAGANTTGATTTTGAGCTCCCACCCAGGNTTGATACAGNGCCAAAGGANCCCCCGCCCCAGCCAAGAAAANTGGTGAGT
+chr4-04	EST_Human	nucleotide_match	329659	330014	309.000000	+	.	Target=BF913255.1 2 356 +;percentID=93.5;Gap=M352 D1 M3 ;sequence=TGTTAGAATGCTGCTGGAGGATTCCGGGATCTCACAGGCTGGATTTCAGAGTCCTGAATTTTAGACTTTTCAAGGACATGTGCCCATCTGGGGTTCAGGCATAATAGTCTATATTAACTGATGGTGACTGTGTGCATGTCACCATAACATGTTACATTATTAACTCACTTAAGGGACTCCATGAGGCAGGTACTGCTATCTTCACTTTACAGAGGACATTGAGCACAGGCAAGTAACTTGCCCATGGTCACAAACCTGGAAATAGCAGAGCAGCTGGGATATGCACCCAGAGTCTGTGTACTTAGCCACAGTGCAGTCCTGCTTAACTGCAGAACAAAATTATGTGTGTGAGCTCTGATGGC [...]
+chr4-04	EST_Human	nucleotide_match	329659	330014	309.000000	+	.	Target=BF914407.1 2 356 +;percentID=93.5;Gap=M352 D1 M3 ;sequence=TGTTAGAATGCTGCTGGAGGATTCCGGGATCTCACAGGCTGGATTTCAGAGTCCTGAATTTTAGACTTTTCAAGGACATGTGCCCATCTGGGGTTCAGGCATAATAGTCTATATTAACTGATGGTGACTGTGTGCATGTCACCATAACATGTTACATTATTAACTCACTTAAGGGACTCCATGAGGCAGGTACTGCTATCTTCACTTTACAGAGGACATTGAGCACAGGCAAGTAACTTGCCCATGGTCACAAACCTGGAAATAGCAGAGCAGCTGGGATATGCACCCAGAGTCTGTGTACTTAGCCACAGTGCAGTCCTGCTTAACTGCAGAACAAAATTATGTGTGTGAGCTCTGATGGC [...]
+chr4-04	EST_Human	nucleotide_match	330002	330154	107.000000	+	.	Target=GD264276.1 1 159 +;percentID=85.5;Gap=M13 I4 M124 I1 M11 I1 M5 ;sequence=TGTGTAAGCATATGAGCATCTGCCCAAGCAGACAAGTGTCAAAGTACGCGAATGCCGTCCGAGCACTGCCTGAGCATACACTTCTCTCAAAGGGTTCTGCTCATCAACGGAGCCGGCCAGTGACTTTTCTGATCGCTTAATGGCATAAATACATGTATCCAGCCTCTCCACGCTGTTAAAACACAGAATCAAATTCTGCAGAGCCCATTTTCTCTGGCTCATGAAATTCTGTTGTAGGCCGAGAGTTCACATCGCTTTCAGTAACTGTAATTCTCTAAGCAGGTGTAGTTTCATCTTCAAACTCATCATCA
+chr4-04	EST_Human	nucleotide_match	330338	330923	395.000000	+	.	Target=BX952419.1 1 594 +;percentID=84.5;Gap=M23 D2 M36 I3 M1 I3 M39 D1 M65 I1 M1 I1 M1 I1 M34 I1 M2 I1 M93 D1 M9 I1 M9 D1 M251 I1 M17 ;sequence=CACCCTGCGGGGCTCCGCAGCTCGGGGTCACCCAGGGGTGTGGTCCCAGCTTTGCCCTCAATGCCCATGCTGTCCGCCCCGGCCCTGGCTTGGCTGACAGCGGCCAGTCCAGGTGGGGCTTGGGCTAGGGGCACGGCCCTCCCACCTTTCCAGAATCCAAGTCCTCGCCGCCACTGCCAGGTCCTGCCAATACCCCTGGTGGCCCTGGCAACACCCCAGTTGCAGCGTCGCCATCGCAGGGCAGACCCCGGCCAACCTCAAAGCGACTGTGCAGTGGGGCCAA [...]
+chr4-04	EST_Human	nucleotide_match	330419	330894	467.000000	+	.	Target=DB451844.1 1 476 +;percentID=98.9;sequence=TGGCTAGGCCGACGGCAGCCGGGTCCGGGTGGGGCTCGGGCTCGGGGCGCGCCCCTCCCATCTCTCCAGGGTCCGCGTCCTCGCTGCCGCCAGGTCCCGCCGAGATCCTCGGTGGCCCCGGCTCCAGCGGCTGCAGCGTCGCCATCGCCGGGCAGACCCCGGCCGACCTCAAAGCGACCGCGCGGTGGGGCCGGCGGGGACTGGGGCTGCGCAGCGCGGCCTGGGGTGGGGGCGGCGGGGCCCCCAGGAGCTCCTGGGAACCGAGGGTCCTGNGGCGGTCCCGCCCCGCACAGCTCCGGGTGAGCTTGGGGAGGGAGACACACTCTCAGCCCACCTCGCCCCGCCCGACAGCGCTCCGAGTCCTGAGTCCCCTCAACC [...]
+chr4-04	EST_Human	nucleotide_match	330616	331134	472.000000	-	.	Target=BU159504.1 1 520 +;percentID=95.4;Gap=M482 I1 M22 I1 M2 D1 M12 ;sequence=CGCAGCCTGCAGGCCGACCTCAGTCCGTCCTCACAGAGCCTAGTTGGGTGCACAGCTCTCCCTGACGCGCGAGGAGCAGGTTCACGGGAGTCGGTCGCGCATCCCCAGCGCCCTGCGGGCCTCGCACCGGCTGTGGCGGTGACCCCGGTGAGGAGGGCTTTGGTGCGGGTCACCGTTGCTGAGGACACCCTCCTCCCCCGGAAGCGCGGTCCTGGGGGTCTGGGGGGCGGGTCCCTGACCGCTGTAAACAATAGGTCGGTGGTGTCCACGCAGCAGGCAGCAAATTCTCAGGAAGTGAGCGTCCCGTCTTTGGCTTCACCTTCGTGTCTGTAGAATGGGGGTGAGGGG [...]
+chr4-04	EST_Human	nucleotide_match	316143	316248	57.000000	+	.	Target=BQ371442.1 228 333 +;percentID=77.6;Gap=M67 I1 M11 D1 M27 
+chr4-04	EST_Human	nucleotide_match	330657	331168	508.000000	-	.	Target=BM720074.1 1 512 +;percentID=99.6;sequence=CGAATCATCTCTCCACAAATCCTGCCTTCGGGGCCGCAGCCTGCAGGCCGACCTCAGTCCGTCCTCACAGAGCCTAGTTGGGTGCACAGCTCTCCCTGACGCGCGAGGAGCAGGTTCACGGGAGTCGGTCGCGCATCCCCAGCGCCCTGCGGGCCTCGCACCGGCTGTGGCGGTGACCCCGGTGAGGAGGGCTTTGGTGCGGGTCACCGTTGCTGAGGACACCCTCCTCCCCCGGAAGCGCGGTCCTGGGGGTCTGGGGGGCGGGTCCCTGACCGCTGTAAACAATAGGTCGGTGGTGTCCACGCAGCAGGCAGCAAATACTCAGGAAGTGAGCGTCCCGTCTTTGGCTTCACCTTCGTGTCTGTAGAATGGGGGTGA [...]
+chr4-04	EST_Human	nucleotide_match	331568	332172	360.000000	+	.	Target=DA386535.1 1 585 +;percentID=82;Gap=M37 D1 M26 D1 M5 D1 M55 I1 M149 I1 M1 I1 M22 D6 M1 D2 M1 D1 M163 D2 M4 D1 M7 D1 M2 D1 M1 D2 M2 D1 M1 D1 M3 D1 M6 D1 M2 D1 M18 D1 M57 I2 M17 
+chr4-04	EST_Human	nucleotide_match	331602	331775	162.000000	+	.	Target=AL700660.1 1 175 +;percentID=96.6;Gap=M92 I1 M82 
+chr4-04	EST_Human	nucleotide_match	331603	331775	169.000000	+	.	Target=DB135798.1 1 175 +;percentID=98.9;Gap=M91 I1 M64 I1 M18 
+chr4-04	EST_Human	nucleotide_match	331603	331775	171.000000	+	.	Target=BP200889.1 1 174 +;percentID=99.4;Gap=M91 I1 M82 
+chr4-04	EST_Human	nucleotide_match	331605	331775	165.000000	+	.	Target=DA757889.1 1 172 +;percentID=98.3;Gap=M89 I1 M82 
+chr4-04	EST_Human	nucleotide_match	331592	331812	92.000000	+	.	Target=DB024685.1 1 226 +;percentID=73.2;Gap=M13 D1 M26 D1 M5 D1 M55 I1 M56 I1 M4 I1 M2 D1 M1 D1 M20 I1 M2 I3 M15 I1 M1 I1 M10 I1 M6 ;sequence=ATCTGGCGCCGCTTTTGCGTCAGGCTTCTGCCTGAGCTCGGTTAGGGCCTCACCGACCTGCTTCCACCCCTCAGGGAGGCCTCAGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTCGTAGCTAAGACTCTACGACATCCCTGAAGCCGGGAAATGGTGTTGCTCTCTTTAACTCAGACCTGATCACCTGTTTGGAGCAAAGAAAAGAGCCCTTTAATGGGAAGACACATGAGACAGTAGCCAAAGCCCCAGGTGTGTGT [...]
+chr4-04	EST_Human	nucleotide_match	331603	331775	163.000000	+	.	Target=DA799182.1 1 174 +;percentID=97.1;Gap=M91 I1 M82 
+chr4-04	EST_Human	nucleotide_match	331607	332209	404.000000	+	.	Target=DA787270.1 1 587 +;percentID=85.4;Gap=M31 D1 M55 I1 M8 I1 M56 D1 M78 I3 M48 D2 M1 D5 M25 D1 M124 D1 M3 D1 M2 D1 M2 D2 M5 D1 M2 D1 M1 D1 M3 D1 M3 D1 M5 D1 M130 
+chr4-04	EST_Human	nucleotide_match	331606	332149	358.000000	+	.	Target=DA223739.1 3 530 +;percentID=85.1;Gap=M32 D1 M55 I1 M8 I1 M56 D1 M78 I3 M48 D2 M1 D5 M25 D1 M130 I1 M33 D7 M1 D2 M2 D2 M7 D1 M46 ;sequence=GTTTTTCCTCTGGCTCCTGCGAGGGCTTGGTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGGTGAGTGTGCGGGGCAGGGCGTCCGGAGGCTGGGGAGGCCTCATCGGAACCGGCGGGAAATGGCGGCGGCGGGACCGAGTCTGCGAACGGAGTCCCCGCTGCCGCCTCTC [...]
+chr4-04	EST_Human	nucleotide_match	331616	332417	476.000000	+	.	Target=DA735070.1 4 803 +;percentID=81.6;Gap=M16 D1 M5 D1 M55 I1 M149 I1 M1 I1 M22 D6 M1 D2 M1 D1 M163 D2 M4 D1 M7 D1 M2 D1 M1 D2 M2 D1 M1 D1 M3 D1 M6 D1 M2 D1 M18 D1 M57 I2 M17 D1 M22 D1 M133 I1 M10 I1 M7 I2 M1 I1 M1 I7 M1 I2 M2 I3 M52 I1 M10 I1 M4 
+chr4-04	EST_Human	nucleotide_match	331605	331775	169.000000	+	.	Target=DA224929.1 1 172 +;percentID=99.4;Gap=M89 I1 M82 
+chr4-04	EST_Human	nucleotide_match	331606	331775	168.000000	+	.	Target=DA418713.1 4 174 +;percentID=99.4;Gap=M88 I1 M82 
+chr4-04	EST_Human	nucleotide_match	331582	332256	412.000000	+	.	Target=DA736785.1 3 655 +;percentID=82.6;Gap=M23 D1 M26 D1 M5 D1 M55 I1 M149 I1 M1 I1 M22 D6 M1 D2 M1 D1 M163 D2 M4 D1 M7 D1 M2 D1 M1 D2 M2 D1 M1 D1 M3 D1 M6 D1 M2 D1 M18 D1 M57 I2 M17 D1 M22 D1 M60 
+chr4-04	EST_Human	nucleotide_match	331603	331775	171.000000	+	.	Target=DA803616.1 1 174 +;percentID=99.4;Gap=M91 I1 M82 
+chr4-04	EST_Human	nucleotide_match	331614	332348	447.000000	+	.	Target=CD518149.1 27 742 +;percentID=82.2;Gap=M9 I1 M9 D1 M5 D1 M55 I1 M149 I1 M1 I1 M22 D6 M1 D2 M1 D1 M163 D2 M4 D1 M7 D1 M2 D1 M1 D2 M2 D1 M1 D1 M3 D1 M6 D1 M2 D1 M18 D1 M57 I1 M3 I1 M14 D1 M14 I1 M8 D1 M41 D1 M105 I1 M5 ;sequence=GCTGGTANNCCGGTCCGGAATTCCCGTGGATTCCAGCCAGAGCTCGGTTAGGGCCTCATCGCTCTGCTCCCGCTCCTTAGGGAAGCCTCGGTGATTCTGCCACAGCCTCAGCCTCTGTGGCTCTGTGACCTGCCGGTATTGGATGATTCGTATCTAAGACTCTGGGACACTCCTGAAGTCGGGAAATGGTGAGT [...]
+chr4-04	EST_Human	nucleotide_match	331615	331775	151.000000	+	.	Target=BX485984.1 1 162 +;percentID=96.9;Gap=M79 I1 M82 
+chr4-04	EST_Human	nucleotide_match	331606	332262	383.000000	+	.	Target=DA732237.1 4 640 +;percentID=80.8;Gap=M26 D1 M5 D1 M55 I1 M149 I1 M1 I1 M22 D6 M1 D2 M1 D1 M165 D1 M5 I1 M22 D2 M1 D1 M3 D8 M4 D1 M8 D1 M57 I2 M17 D1 M18 D1 M3 D1 M25 I1 M33 I1 M8 
+chr4-04	EST_Human	nucleotide_match	331603	331775	171.000000	+	.	Target=DB074733.1 1 174 +;percentID=99.4;Gap=M91 I1 M82 
+chr4-04	EST_Human	nucleotide_match	331603	331775	171.000000	+	.	Target=DA533464.1 1 174 +;percentID=99.4;Gap=M91 I1 M82 
+chr4-04	EST_Human	nucleotide_match	331605	331775	163.000000	+	.	Target=DB221880.1 1 173 +;percentID=97.7;Gap=M89 I1 M64 I1 M18 
+chr4-04	EST_Human	nucleotide_match	331633	332240	422.000000	+	.	Target=DN999087.1 10 602 +;percentID=86.3;Gap=M61 I1 M8 I1 M56 D1 M78 I3 M48 D2 M1 D5 M25 D1 M124 D1 M3 D1 M2 D1 M2 D2 M5 D1 M2 D1 M1 D1 M3 D1 M3 D1 M5 D1 M161 
+chr4-04	EST_Human	nucleotide_match	246258	246797	375.000000	+	.	Target=DB269867.1 18 566 +;percentID=85.3;Gap=M41 I3 M30 I1 M7 I1 M1 I2 M43 D1 M20 I1 M319 I2 M2 I1 M1 I1 M40 D1 M15 D1 M18 
+chr4-04	EST_Human	nucleotide_match	331640	331775	134.000000	+	.	Target=CD654571.1 12 148 +;percentID=99.3;Gap=M54 I1 M82 
+chr4-04	EST_Human	nucleotide_match	246494	246827	326.000000	+	.	Target=BM987769.1 1 334 +;percentID=98.8;sequence=TTTTTTTTTTTTTTTTCTGAAAATCTTTAAATTTTTTAATTTGGCCATGTTGCCCTAATATTTTGTATGCATTGTAATATTTGCTTGTTATTTGAAGATTAACAAAAAGCCATTTGTCACAATCTTTACAATGTTGCTTTGTCCTGACATAGTCTGAAACCAATTGTCTTTGATAGAGATTATGGGAGCCTCCCATACATGTTTTAAGGATGTGTCTTGTCTGGAATTTCATGTTTTTCAGTTAAAAGGGTTTGTTCATGTTTCTTCTTAACAGTCTCTAATCACTTGCCCTACCTACTTTCTGTATTTAACACTGCAGTCTGCTCCTGAAACA
+chr4-04	EST_Human	nucleotide_match	246886	246953	29.000000	+	.	Target=BU155753.1 321 388 +;percentID=72.5;Gap=M33 I1 M5 D1 M29 ;sequence=GTCCTCTTCTCCTAGGGGCCCAGCCTCTGTGGCCCTGTGACCTGCAGGTATTGGGAGATCCCCAGCTAAGACGCCAGGTCCTCCTGGAAGCCTAGAAATGGGACCACTGACAATTAGGGATGTGACTGTAGAATTCTCTCTGGAGGAGTGGCATTGCCTGGACACTGCACAGCAGAATTTATATAGGGATGTGATGTTAGAGAACTACAGAAACCTGGTCTTCCTGGGTATTGCTGTCTCTAAGCCAGACCTGATCACCTGTCTGGAGCAAGGAAAAGAGCCCTGTAATATGAAGAGACATGAGATGGTAGCCAAACCCCCAGCATTTTATTTAATGGGAGAATGAAACCAGTGT [...]
+chr4-04	EST_Human	nucleotide_match	330657	331010	350.000000	+	.	Target=BU739888.1 33 386 +;percentID=99.4;sequence=TTTTTTTTTTTTTTTTTTCCTGGTTTTTTTCTGGCCCCCAGGAGCTCCTGGGAACCGAGGGTCCTGGGGCGGTCCCGCCCCGCACAGCTCCGGGTGAGCTTGGGGAGGGAGACACACTCCCAGCCCACCTCGCCCCGCCCGACAGCGCTCCGAGTCCTGAGTCCCCTCACCCCCATTCTACAGACACGAAGGTGAAGCCAAAGACGGGACGCTCACTTCCTGAGTATTTGCTGCCTGCTGCGTGGACACCACCGACCTATTGTTTACAGCGGTCAGGGACCCGCCCCCCAGACCCCCAGGACCGCGCTTCCGGGGGAGGAGGGTGTCCTCAGCAACGGTGACCCGCACCAAAGCCCTCCTCACCGGGGTCACCGCCA [...]
+chr4-04	EST_Human	nucleotide_match	247211	247276	40.000000	-	.	Target=BF223897.1 329 392 +;percentID=81.8;Gap=M23 D1 M1 D1 M40 ;sequence=GTCTTTTTCTTATGTATATTTGAATTTGAGAATTTATGAAGGACTTTAACATATTTATCACATTGAAATATTTTGCTCTGGGTAGTTGTCAAACATTGGTTAAGTCCATTATAACCTCTTTTGTGCACCTTATGCTCATCCGCACTTTTACAGCCTTTTCTTAATTGTAAATTCTCATGTCCATATTTTCCATATCTTCTCAGTATCACTTTTTGAAAAGAATCTTTTAAGCCCTGCTTTGGCCAAAGGTCTTGGGCAAAATGAGAACACACAACTGAAAGAAATAAAAGTAACAATTACCCCACTTACTAGACTCAGATGAATATACTTTACAAATCTAACCTATAAAAATATA [...]
+chr4-04	EST_Human	nucleotide_match	331633	332403	476.000000	+	.	Target=AL521029.3 10 775 +;percentID=82.9;Gap=M5 D1 M55 I1 M149 I1 M1 I1 M22 D6 M1 D2 M1 D1 M163 D2 M4 D1 M7 D1 M2 D1 M1 D2 M2 D1 M1 D1 M3 D1 M6 D1 M2 D1 M18 D1 M57 I2 M17 D1 M22 D1 M151 I3 M1 I7 M1 I2 M2 I3 M52 
+chr4-04	EST_Human	nucleotide_match	247236	247782	181.000000	+	.	Target=BG026620.1 241 764 +;percentID=70.8;Gap=M3 D1 M1 D2 M5 D1 M7 I1 M19 I1 M5 I1 M3 D1 M24 D1 M3 I1 M1 I1 M6 D1 M14 I2 M12 I1 M26 D1 M82 D2 M2 D1 M3 D2 M3 D1 M111 D1 M15 D1 M9 I4 M1 I1 M25 D1 M3 D1 M5 D1 M12 D1 M7 D1 M2 D1 M7 D1 M1 D1 M7 I1 M16 D1 M6 D1 M12 D1 M3 D3 M4 D1 M2 D1 M7 D2 M9 D1 M7 D1 M2 D1 M1 D1 M7 I1 M9 
+chr4-04	EST_Human	nucleotide_match	247254	247433	54.000000	+	.	Target=DA311782.1 388 567 +;percentID=67.7;Gap=M9 I1 M3 I1 M8 D1 M14 I1 M7 I1 M9 D1 M11 I1 M9 D3 M5 D1 M15 I1 M84 
+chr4-04	EST_Human	nucleotide_match	247299	247614	213.000000	-	.	Target=BF223897.1 8 327 +;percentID=84.2;Gap=M8 I1 M268 I1 M2 I3 M6 D1 M31 
+chr4-04	EST_Human	nucleotide_match	247340	247667	191.000000	+	.	Target=BE177799.1 5 337 +;percentID=79.6;Gap=M16 D1 M250 I1 M4 I5 M57 ;sequence=ATAGTTCTTTCAGTTGTGTGTCTCATTTTGCCCAAGACCTTTGGCCAGAGCAGAGCATAAAAGATTCTTACCAAAAAGTGATACTGAGAAAATTTGAAAAATGTGGACATGGCAATTTACACTTTAAAAAAGGCTGTGAAAGTGTGGATGAGTGTAAGTTACACAAAAGAGGTTATAATGGACTTAACCAATGTTTGACAACTACCCAGAGCAAAATATTTCAATGTGGTAAATATGTGAAAGTCTTTCATCAATTTTCAAATTCAAAGAGACATAAAAGAAGACATACTGAAAAAAAACCTTTGAAATATATAGAAGGTGACAAAGCTTTTAACCAGTCCTCAACCC [...]
+chr4-04	EST_Human	nucleotide_match	247345	247648	178.000000	+	.	Target=DA572502.1 22 331 +;percentID=80.1;Gap=M101 I1 M3 D1 M80 D1 M4 I1 M67 I2 M1 I1 M1 I1 M2 I2 M43 ;sequence=CATGAGATGGTAGCCAACCCCTCAGTTATATGTTCTCATTTTGCCCAAGATTTTTGGCCAGAGCAGAACATAAAAGATTCTTTCCAAAAAGTGATACTGAAAAGATATGAAAAACGTGGACATGGAAATTTACAGTTAATAAAAAGGTGTGAAAGTGTAGATGAGTGTAAGGTGCACACAGGAGGTTATAATGGACTTAACCAGTGTAGTACAACTACCCAGAGCAAAGTATTTCAATGTGATAAATATGGGAAAGTCTTTCATAAATTTTCAAATTCAAATAGACATAATATAAGACATACTGAAAAAAAACCTT [...]
+chr4-04	EST_Human	nucleotide_match	331633	331775	86.000000	+	.	Target=BI463333.1 16 158 +;percentID=81.5;Gap=M5 D1 M55 I1 M56 I1 M4 I1 M2 D1 M1 D1 M17 
+chr4-04	EST_Human	nucleotide_match	247345	247845	264.000000	+	.	Target=DA737145.1 326 831 +;percentID=77.5;Gap=M101 I1 M3 D1 M80 D1 M4 I1 M67 I2 M1 I1 M1 I1 M2 I2 M65 D1 M5 I1 M5 D1 M3 I1 M34 D2 M2 D2 M27 I1 M2 D1 M51 I1 M2 I1 M13 I1 M24 ;sequence=ACTCTGTGTCCTGTGCTCCTACAGGCCCAGCCTCTGTGGCCCTGTGACCTGCAGGTATTGGGAGATCCACAGCTAAGACACCAGGACCCCTGGAAGCCTAGAAATGGGACCATTGCAATTTAGAGATGTGGCCATAGAATTCTCTCTGGAGGAGTGGCATTGCCTGGACACTGCACAGCGGAATCTATATAGGAATGTGATGTTAGAGAACTACAGTAACCTGGTCTTCCTTGGTATTGTTGTC [...]
+chr4-04	EST_Human	nucleotide_match	247346	247752	232.000000	+	.	Target=CV022989.1 128 536 +;percentID=79.8;Gap=M184 I1 M5 D1 M66 I2 M1 I1 M1 I1 M2 I2 M63 I1 M4 D1 M37 I1 M6 D1 M2 D4 M29 ;sequence=ATGTTAAAGAACTACAGAAACCTGGTCTTCCTGGGTATTGCTGTCTCTAAGCCAGACCTGATCACCTGTCTGGAGCAAGGAAAAGAGCCCTGTAATATGAAGAGACATGAGATGGTAGCCAAACCCCCAGTTATGTGTTCTCATATTGCTGAAGACCTTTGCCCAGAGCGAGACATAAAATATTTTTTCCAAAAAGTCATACTGAGGAGATATGATAAATGTGAACATGAGAATTTACAATTAAGAAAGGGCTGTAAAAGTGTGGATGAGTGTAAGGTGTGCAAAGGAGGTTATAA [...]
+chr4-04	EST_Human	nucleotide_match	247346	247770	235.000000	+	.	Target=BU509138.1 453 884 +;percentID=79;Gap=M261 I1 M4 I5 M12 D1 M4 I1 M8 I1 M15 I1 M16 I1 M25 D2 M6 D1 M4 I1 M6 D1 M8 D1 M11 I1 M16 I1 M23 ;sequence=GTTCGCGTGGGCGCAGCTCCAGGTCTCGTCTTCACTGCTCTATGTCCTCTGCTCCTAGAGGTCCACCTTCTGTGGCCCCGTTACCTGCAGGTATTGGGAGATCCACAGCTAAGACGCCAGGACTCCCTGGAAGCCTAGAAATGGCCAGAAAAACTGGGAAAATCACAGGCTCTTCCACTTACTGGATGTTTGACAAAATATTCTTCTTGGGCCAAAAACATTGGCATTACTGGGACCACTGACATTTAGGGATGTGGCCATAGAATTCTCTCTGGAG [...]
+chr4-04	EST_Human	nucleotide_match	247346	247804	239.000000	+	.	Target=BU167813.1 350 812 +;percentID=76.9;Gap=M261 I1 M7 I3 M1 I2 M6 D1 M14 I1 M33 I1 M4 D1 M34 D1 M11 D2 M17 I1 M66 ;sequence=TCTGCGTCTCGTCTTCGTTCTTCTGTGTCCTCTGCTGCTAGAGGTCCAGCCTCTGTGGCTCTGTGACCTGCGGGTATTGGGGGATCCACAGCTAAGACGCCAGGACCCCCCGGAAGCCTAGAAATGGGACCATTGACATTTATGGATGTGGCCATAGAATTCTGTCTGGAGGAGTGGCAATGCCTGGACATTGCACAGCAGAATTTATATAGGAATGTGATGTTAGAGAACTACAGAAACCTGGTCTTCCTGGGTATTGCTGTCTCTAAGCCAGACCTGATCACCTGTCTGGAGCAAGAA [...]
+chr4-04	EST_Human	nucleotide_match	247346	247804	260.000000	+	.	Target=BM465909.1 220 680 +;percentID=79.5;Gap=M261 I1 M4 I5 M56 I1 M6 D1 M18 D2 M6 D1 M4 I1 M6 D1 M8 D1 M9 D1 M4 I1 M70 ;sequence=GACCACTGACATTTAGGGATGTGGCCATAGAATTCTCTCTGGAGGAGTGGCAATGCCTGGACACTTCACAGCAGAATTTGTATAGGAATGTGATGTTAGATAACTACAGAAACCTGGTCTTCCTGGGTATTGCTGTCTCTAAGCCAGACCTGATCACTTGTCTGGAGCAAGGAAAAGAGCCCTGCAATATGAAGAGACATGCGATGGTAGCCAAACCCCCAGTTGTGTGTTCTCATTTTGCCCAAGACCTTTGGCCAAAGCAGGGCTTAAAAGATTCTTTTCAAAAAGTGATACTGA [...]
+chr4-04	EST_Human	nucleotide_match	247346	247804	262.000000	+	.	Target=EL737031.1 128 588 +;percentID=79.7;Gap=M261 I1 M4 I5 M56 I1 M6 D1 M18 D2 M6 D1 M4 I1 M6 D1 M8 D1 M9 D1 M4 I1 M70 ;sequence=ATGTTAGATAACTACAGAAACCTGGTCTTCCTGGGTATTGCTGTCTCTAAGCCAGACCTGATCACTTGTCTGGAGCAAGGAAAAGAGCCCTGCAATATGAAGAGACATGCGATGGTAGCCAAACCCCCAGTTGTGTGTTCTCATTTTGCCCAAGACCTTTGGCCAAAGCAGGGCTTAAAAGATTCTTTTCAAAAAGTGATACTGAGAAGATATGGAAAATATGGACATGAGAATTTACAATTAAGAAAAGGCTGTAAAAGTGCGGATGAGCATAAGGTGCACAAAAGAGGTTATAAT [...]
+chr4-04	EST_Human	nucleotide_match	331625	332403	481.000000	+	.	Target=BQ050525.1 1 773 +;percentID=83;Gap=M7 D1 M5 D1 M55 I1 M149 I1 M1 I1 M22 D6 M1 D2 M1 D1 M163 D2 M4 D1 M7 D1 M2 D1 M1 D2 M2 D1 M1 D1 M3 D1 M6 D1 M2 D1 M18 D1 M57 I2 M17 D1 M22 D1 M151 I3 M1 I7 M1 I2 M1 I1 M1 I2 M52 
+chr4-04	EST_Human	nucleotide_match	247346	247824	329.000000	+	.	Target=DA666860.1 73 552 +;percentID=85.5;Gap=M260 I1 M3 I5 M60 D1 M1 D1 M1 D1 M46 D4 M38 D1 M4 I1 M38 I2 M20 
+chr4-04	EST_Human	nucleotide_match	247347	247715	251.000000	+	.	Target=DB215628.1 71 446 +;percentID=84.7;Gap=M74 I1 M185 I1 M5 I5 M19 D1 M2 I1 M38 D1 M3 I1 M41 
+chr4-04	EST_Human	nucleotide_match	331618	331775	156.000000	+	.	Target=BM800016.1 1 159 +;percentID=99.4;Gap=M76 I1 M82 
+chr4-04	EST_Human	nucleotide_match	247347	247715	251.000000	+	.	Target=DA803972.1 70 445 +;percentID=84.7;Gap=M74 I1 M185 I1 M5 I5 M19 D1 M2 I1 M38 D1 M3 I1 M41 
+chr4-04	EST_Human	nucleotide_match	247348	247895	531.000000	+	.	Target=BG718573.1 177 726 +;percentID=98.5;Gap=M379 I1 M52 I1 M96 I1 M9 D1 M11 
+chr4-04	EST_Human	nucleotide_match	247348	247947	584.000000	+	.	Target=BI463333.1 158 756 +;percentID=98.8;Gap=M531 I1 M31 D1 M31 D1 M5 
+chr4-04	EST_Human	nucleotide_match	331640	332486	407.000000	+	.	Target=BE540535.1 1 802 +;percentID=78.3;Gap=M7 D1 M46 I1 M8 I1 M24 D1 M31 D1 M14 I1 M1 I1 M30 I1 M8 I1 M25 I3 M40 D1 M7 D2 M1 D5 M25 D1 M5 D1 M21 D1 M5 D1 M8 D1 M27 I1 M2 I1 M59 D1 M10 D5 M1 D1 M2 D1 M2 D1 M5 D1 M27 I1 M36 D1 M6 D1 M22 I1 M20 I1 M4 I1 M41 D1 M17 I1 M7 I1 M12 D1 M10 D1 M9 D2 M12 D1 M5 D1 M7 I1 M10 D1 M2 D1 M4 D1 M8 D1 M5 D1 M10 D1 M4 D1 M7 I1 M10 D2 M6 D2 M8 D1 M9 D3 M2 D1 M8 D4 M6 D1 M8 D2 M3 D1 M2 D1 M5 D1 [...]
+chr4-04	EST_Human	nucleotide_match	331668	331775	80.000000	+	.	Target=CN278786.1 34 142 +;percentID=88.3;Gap=M26 I1 M56 I1 M4 I1 M2 D1 M1 D1 M17 ;sequence=CCCACGCGTCCGCCGACCTGCTTCCACCCCTCAGGGAGGCCTCAGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTCGTAGCTAAGACTCTACGACATCCCTGAAGCCGGGAAATGGTGTGTGTTCTCATTTTACCCAAGATCTTTGGCCAGTGCAGGGCATAGAAGATTCATTCCACAAACTTATACTGAGAAGATATGAGAAATGTGGACAGAAGAATTTACAATTAAGGAAAGGCTCTAAAAGTGTGAATAAG
+chr4-04	EST_Human	nucleotide_match	247348	248030	662.000000	+	.	Target=DA730641.1 186 866 +;percentID=98.4;Gap=M638 D1 M34 D1 M9 
+chr4-04	EST_Human	nucleotide_match	331668	332269	392.000000	+	.	Target=CN310770.1 20 602 +;percentID=84.7;Gap=M26 I1 M149 I1 M1 I1 M22 D6 M1 D2 M1 D1 M163 D2 M4 D1 M7 D1 M2 D1 M1 D2 M2 D1 M1 D1 M3 D1 M6 D1 M2 D1 M18 D1 M57 I2 M17 D1 M22 D1 M73 
+chr4-04	EST_Human	nucleotide_match	247349	247430	60.000000	+	.	Target=DB056944.1 397 478 +;percentID=86.6
+chr4-04	EST_Human	nucleotide_match	247349	247430	60.000000	+	.	Target=DA703911.1 385 466 +;percentID=86.6
+chr4-04	EST_Human	nucleotide_match	247349	247437	69.000000	+	.	Target=CN265977.1 349 437 +;percentID=88.8
+chr4-04	EST_Human	nucleotide_match	247349	247428	70.000000	+	.	Target=AL700660.1 399 478 +;percentID=93.8
+chr4-04	EST_Human	nucleotide_match	247349	247433	71.000000	+	.	Target=DA324408.1 203 287 +;percentID=91.8
+chr4-04	EST_Human	nucleotide_match	247349	247438	76.000000	+	.	Target=DC411795.1 290 379 +;percentID=92.2
+chr4-04	EST_Human	nucleotide_match	247349	247438	76.000000	+	.	Target=DC411178.1 290 379 +;percentID=92.2
+chr4-04	EST_Human	nucleotide_match	247349	247452	81.000000	+	.	Target=DA240008.1 292 395 +;percentID=88.5
+chr4-04	EST_Human	nucleotide_match	247349	247439	81.000000	+	.	Target=DA757889.1 396 486 +;percentID=94.5
+chr4-04	EST_Human	nucleotide_match	247349	247462	84.000000	+	.	Target=DA422914.1 389 503 +;percentID=87;Gap=M108 I1 M6 
+chr4-04	EST_Human	nucleotide_match	247349	247526	136.000000	+	.	Target=DA685292.1 360 537 +;percentID=88.2
+chr4-04	EST_Human	nucleotide_match	247349	247526	136.000000	+	.	Target=DA917260.1 389 566 +;percentID=88.2
+chr4-04	EST_Human	nucleotide_match	247349	247526	136.000000	+	.	Target=DB187202.1 387 564 +;percentID=88.2
+chr4-04	EST_Human	nucleotide_match	247349	247537	141.000000	+	.	Target=BP420960.1 291 479 +;percentID=87.3
+chr4-04	EST_Human	nucleotide_match	247349	247540	142.000000	+	.	Target=BP273260.1 290 481 +;percentID=87
+chr4-04	EST_Human	nucleotide_match	247349	247537	143.000000	+	.	Target=DB111318.1 393 581 +;percentID=87.8
+chr4-04	EST_Human	nucleotide_match	247349	247539	145.000000	+	.	Target=DB201918.1 397 587 +;percentID=88
+chr4-04	EST_Human	nucleotide_match	247349	247549	149.000000	+	.	Target=DA246722.1 310 510 +;percentID=87.1
+chr4-04	EST_Human	nucleotide_match	247349	247535	149.000000	+	.	Target=BP231503.1 396 582 +;percentID=89.8
+chr4-04	EST_Human	nucleotide_match	247349	247544	150.000000	+	.	Target=DB203397.1 351 546 +;percentID=88.3
+chr4-04	EST_Human	nucleotide_match	247349	247546	152.000000	+	.	Target=CD689816.1 396 593 +;percentID=88.4
+chr4-04	EST_Human	nucleotide_match	247349	247565	159.000000	+	.	Target=DR423054.1 308 524 +;percentID=86.6
+chr4-04	EST_Human	nucleotide_match	247349	247579	169.000000	+	.	Target=DA741721.1 290 520 +;percentID=86.6
+chr4-04	EST_Human	nucleotide_match	247349	247579	169.000000	+	.	Target=DB231938.1 292 522 +;percentID=86.6
+chr4-04	EST_Human	nucleotide_match	247349	247579	169.000000	+	.	Target=DB095116.1 277 507 +;percentID=86.6
+chr4-04	EST_Human	nucleotide_match	247349	247584	174.000000	+	.	Target=DA118777.1 298 533 +;percentID=86.9
+chr4-04	EST_Human	nucleotide_match	247349	247579	177.000000	+	.	Target=CD701489.1 343 573 +;percentID=88.3
+chr4-04	EST_Human	nucleotide_match	247349	247596	180.000000	+	.	Target=DA787611.1 293 540 +;percentID=86.3
+chr4-04	EST_Human	nucleotide_match	247349	247594	180.000000	+	.	Target=DB158549.1 292 537 +;percentID=86.6
+chr4-04	EST_Human	nucleotide_match	247349	247597	181.000000	+	.	Target=DA799229.1 290 538 +;percentID=86.3
+chr4-04	EST_Human	nucleotide_match	247349	247599	183.000000	+	.	Target=DA758630.1 304 554 +;percentID=86.5
+chr4-04	EST_Human	nucleotide_match	247349	247601	185.000000	+	.	Target=DA399659.1 262 514 +;percentID=86.6
+chr4-04	EST_Human	nucleotide_match	247349	247626	208.000000	+	.	Target=DB170146.1 290 573 +;percentID=87.7;Gap=M257 I1 M3 I5 M18 
+chr4-04	EST_Human	nucleotide_match	247349	247662	219.000000	+	.	Target=DA766426.1 260 579 +;percentID=85.4;Gap=M257 I1 M5 I5 M19 D1 M2 I1 M30 
+chr4-04	EST_Human	nucleotide_match	247349	247671	224.000000	+	.	Target=DA806351.1 238 566 +;percentID=85.2;Gap=M257 I1 M5 I5 M19 D1 M2 I1 M39 
+chr4-04	EST_Human	nucleotide_match	247349	247759	226.000000	+	.	Target=BU155753.1 389 807 +;percentID=78.8;Gap=M181 I1 M5 D1 M66 I2 M1 I1 M1 I1 M2 I2 M63 I1 M4 D1 M27 I1 M10 I1 M13 D2 M3 D1 M9 I1 M9 I1 M5 I1 M7 
+chr4-04	EST_Human	nucleotide_match	247349	247691	233.000000	+	.	Target=CN399123.1 237 585 +;percentID=84.6;Gap=M257 I1 M5 I5 M19 D1 M2 I1 M38 D1 M3 I1 M17 
+chr4-04	EST_Human	nucleotide_match	247349	247800	245.000000	+	.	Target=BI560805.1 390 830 +;percentID=80.5;Gap=M200 I1 M31 D1 M15 D1 M9 I1 M3 I5 M2 I1 M19 I2 M7 I1 M12 I1 M7 I1 M7 D1 M5 D1 M1 D1 M8 D1 M2 D1 M23 I1 M5 D1 M5 D4 M1 D1 M14 D1 M2 D1 M6 D1 M9 D3 M8 D1 M6 D1 M1 D1 M10 D2 M1 D1 M8 
+chr4-04	EST_Human	nucleotide_match	247349	247711	249.000000	+	.	Target=DA309597.1 227 595 +;percentID=84.9;Gap=M257 I1 M5 I5 M19 D1 M2 I1 M38 D1 M3 I1 M37 
+chr4-04	EST_Human	nucleotide_match	247349	247758	260.000000	+	.	Target=CD654571.1 372 771 +;percentID=83.7;Gap=M257 I1 M3 I5 M21 D1 M2 D1 M2 D3 M1 D1 M30 D1 M3 I1 M11 I1 M4 D1 M21 D1 M7 D5 M14 D1 M2 D1 M3 D1 M7 D1 M4 
+chr4-04	EST_Human	nucleotide_match	247349	247803	261.000000	+	.	Target=BQ069369.1 289 758 +;percentID=80.3;Gap=M257 I1 M5 I5 M10 I1 M9 D1 M2 I1 M38 D1 M4 I1 M6 I1 M9 I1 M14 I1 M15 D1 M3 D3 M12 I1 M16 I1 M8 I1 M5 I1 M4 I1 M9 I1 M6 I1 M6 I1 M5 I1 M6 
+chr4-04	EST_Human	nucleotide_match	247349	247607	270.000000	+	.	Target=DA571532.1 386 641 +;percentID=81.7;Gap=M106 D2 M2 D1 M3 D2 M3 D1 M137 I2 M1 I1 M1 
+chr4-04	EST_Human	nucleotide_match	247349	247858	279.000000	+	.	Target=CD652116.1 249 755 +;percentID=79;Gap=M257 I2 M1 I1 M1 I1 M3 I2 M19 I1 M2 D1 M38 D1 M4 I1 M44 D1 M3 D3 M24 I1 M3 D1 M20 D1 M9 D1 M29 D1 M9 D1 M4 D1 M2 D1 M15 I1 M10 
+chr4-04	EST_Human	nucleotide_match	247349	247631	283.000000	+	.	Target=DB024685.1 279 561 +;percentID=100
+chr4-04	EST_Human	nucleotide_match	247362	247667	191.000000	+	.	Target=BG391074.1 1 313 +;percentID=81.8;Gap=M27 D1 M70 I1 M147 I1 M4 I5 M56 I1 M1 ;sequence=TTTTGCCCAAGACCTTTGGCCAAAGCAGGCTTAAAAGATTCTTTTCAAAAAGTGATACTGAGAAGATATGGAAAATATGGACATGAGAATTTACAATATAAGAAAAGGCTGTAAAAGTGCGGATGAGCATAAGGTGCACAAAAGAGGTTATAATGGACTTAACCAATGTTTGACAACTACCCAGAGCAAAATATTTCACTGTGATAAATATGTTAAAGTCCTTCATAAATTCTCAAATTCAAATATACATAAGAAAAGACAAACTGGAAAGAAACCTTTCAAATGTAAAGAATGTGGCAAATCATGTTGCATACTTTCACAACTAACTCAGCATA [...]
+chr4-04	EST_Human	nucleotide_match	247386	247804	217.000000	+	.	Target=AL705298.1 2 422 +;percentID=77;Gap=M221 I1 M7 I3 M1 I2 M6 D1 M14 I1 M33 I1 M4 D1 M38 D1 M1 D2 M4 D1 M84 ;sequence=AGCAGCATATAAAAGATCCTTTCCAAAAAGCGACACTGAGAAGATATAAAAACTGTGAACATAAAAATGTACATTTAAAAAAAGACCCTAAAAGTGTGGATGAGTGTAAGGTGCACAGAGGAGGTTATAATGGATTTAACCAATGTTTGCCAGCTACCCAGAGCAAAATATTTCTATTTGATAAATGTGTGAAAGCCTTTCATAAATTTTCAAATTCAAACAGACATAAGATAAGCCATACTGAAAAAAAACTTTTCAAATGCAAAGAATGTGGCAAATCATTTTGCATGCTTCCACATCTAGCTC [...]
+chr4-04	EST_Human	nucleotide_match	334972	335150	108.000000	+	.	Target=BG999393.1 8 183 +;percentID=81.9;Gap=M15 D1 M3 D2 M21 D1 M15 D1 M10 D1 M44 I2 M62 I1 M3 ;sequence=CCCCGGTTCTGGGTAGCTGGGATACGTGCGTGACACCACGNCCGGCTAATTTCTGTGTTTTTAGTAGATATGGGATTCACCATATTGGCCAGGCTGGTCTCGAACTCCTGACCTTAGGTGATCCACCCACCTCGGTCTTCCAAAGTACTGGGATTACAGGCATGAGCCACCGCGCCCAGCCCTATAGTTATTATTTCTATTGCTTTTACCTTGTGAAGACTAAATATTTAGCTTCTAATATACATGTCCTAGAAAACACTATGCATTTTGGTTAAATTCCTTGTTACTGTATGTTATAAAATAGACAGGGAATTGGGTGAAA [...]
+chr4-04	EST_Human	nucleotide_match	247396	247715	188.000000	+	.	Target=DN997781.1 8 327 +;percentID=81.1;Gap=M59 D2 M2 D1 M3 D2 M3 D1 M76 I1 M61 I6 M65 D1 M3 I1 M37 D1 M3 ;sequence=GCACGAGGAAGATTCATTCCACAAACTTATACCAAAAGGACATGAGAAACGTGGACATGAGAATTTAAGAAAAACTTGTAAAAGTATAAATGAGTGTAAGGTGCAGAAAGGTGGTTATAATAGAATTAACCAATGCTTATTAACTACCCANGAAAAAAACAATTCAATCTAATATATGTGTCAAAGTTTTTCATAAATTTTCAAATTCAAACAAAGATAAGATAAGATATACTGGAGATAAAACCTTTAAATGTAAAGAATGTGGCAAATCATTTCACGTGCTCTCACGCCTAACTCAACACAAAAGAATT [...]
+chr4-04	EST_Human	nucleotide_match	335150	335283	96.000000	-	.	Target=AI221100.1 5 141 +;percentID=86.1;Gap=M79 I2 M2 I1 M53 ;sequence=TTTTTTTTTTTTTTCTAGACCAATTATATTAAAAGCTAATTATTTATTCTTAGCAAGGTAAAAACAACACAAATAATAACAACACTTTCTCTTCTGTCAATGAACAGCTGATCAGATGGTGGCATTAAAACTCACAAAACAATAAAAGGGAAGTAACACAAATTAAGCTTAAGTCTCCATACAGTTTCTGTCTTTGTACTGAACACACGATGCTGAATTCAATCATTTATTCATGTGCTCTAGACTGCAAGTTCCTTGATGGTAGGGACCATGACTGCTTTATGTCTTTTTCTAATGATCATATGAAATAGAAGCAATTAGCTTATTGATCAGTTTGAGTCTCCAGATTCCTCATTT [...]
+chr4-04	EST_Human	nucleotide_match	247435	247667	149.000000	+	.	Target=BP420445.1 4 243 +;percentID=82.5;Gap=M172 I1 M4 I5 M56 I1 M1 ;sequence=GGAAAATATGGACATGAGAATTTACAATTAAGAAAAGGCTGTAAAAGTGCGGATGAGCATAAGGTGCACAAAAGAGGTTATAATGGACTTAACCAATGTTTGACAACTACCCAGAGCAAAATATTTCAATGTGATAAATATGTTAAAGTCCTTCATAAATTCTCAAATTCAAATATACATAAGAAAAGACAAACTGGAAAGAAACCTTTCAAATGTAAAGAATGTGGCAAATCATGTTGCATACTTTCACAACTAACTCAGCATAAGAAAACTGCTACTAGAGTGAATTTCTACAAATGTAAGACATGTGGAAAAGCCTTTAACCAGTTCTCAAATCTTACTAAACATA [...]
+chr4-04	EST_Human	nucleotide_match	335150	335264	87.000000	-	.	Target=AW135251.1 14 131 +;percentID=88.1;Gap=M60 I2 M2 I1 M53 ;sequence=TTTTTTTTTTTTTTTATATTAGAAGCTAATTATTTATTCTTAGCAAGGTAAAAACAACACAAATAATAACAACAATTTCTCTTCTGTCAATGAACAGCTGATCAGATGGTGGCATTAAAACTCACAAAACAATAAAAGGGAAGTAACACAAATTAAGCTTAAGTCTCCATACAGTTTCTGTCTTTGTACTGAACACACGATGCTGAATTCAATCATTTATTCATGTGCTCTAGACTGCAAGTTCCTTGATGGTAGGGACCATGACTGCTTTATGTCTTTTTCTAATGATCATATGAAATAGAAGCAATTAGCTTATTGATCAGTTTGAGTCTCCAGATTCCTCATTTTTCACCAAA [...]
+chr4-04	EST_Human	nucleotide_match	247455	247715	149.000000	+	.	Target=BP336027.1 1 266 +;percentID=80;Gap=M8 D1 M10 D1 M55 I1 M5 D1 M66 I2 M1 I1 M1 I1 M2 I2 M63 I1 M4 D1 M37 I1 M5 ;sequence=ACAATTAAGAAAGGCTGTAAAGTGTGGATGAGTGTAAGGTGTGCAAAGGAGGTTATAATGGACTTAACCAATGTCTGATAACTACCCAGAGCAAAATGTATCAATGTGATAAATATGTAAAAGTCTTCTATAAGTTTTCAAATTCAGATAGACATAAGATAAGACATACTGAAAAGAAAACTTGCAAATGTAAAGAATGTGGCAAATCATTTTGCATGCTTTCACAACTAACTCGACATAAGAGAATTCATATTAGAGAGAATTCCCACAAATGTGAAGAATGTGGCAAAGCCTTTAACCA [...]
+chr4-04	EST_Human	nucleotide_match	335150	335270	91.000000	+	.	Target=AW020056.1 378 501 +;percentID=87.9;Gap=M53 I1 M2 I2 M66 ;sequence=GCACGAGTGCAGACTGGGGTCAGTCTGACAAGGTCTAATTCTGCTCCCATTTCAGAGGAAGATAAGTGACTCATGCAGGGTTTGTTCCTCCCCTCACAGAAAGAATCTCCTTGGTTTGTACCCAGATAAGAATTGCTCCAGTTTTCTGGTTCTTTGGTGAAAAATGAGGAATCTGGAGACTCAAACTGATCAATAAGCTAATTGCTTCTATTTCATATGATCATTAGAAAAAGACATAAAGCAGTCATGGTCCCTACCATCAAGGAACTTGCAGTCTAGAGCACATGAATAAATGATTGAATTCAGCATCGTGTGTTCAGTACAAAGACAGAAACTGTATGGAGACTTAAGCTTA [...]
+chr4-04	EST_Human	nucleotide_match	335305	335796	339.000000	-	.	Target=AI379940.1 3 493 +;percentID=85.1;Gap=M16 D1 M40 D1 M80 I1 M83 D1 M3 I1 M32 D2 M2 D1 M180 D1 M34 I3 M1 I1 M14 
+chr4-04	EST_Human	nucleotide_match	247460	247614	105.000000	-	.	Target=BF508454.1 25 180 +;percentID=84;Gap=M8 I1 M147 ;sequence=TTTTTTTTTTTTTTTTTGCCTTTTTCTTATGTATATTTGAATTTGAGAATTTATGAAGGACTTTAACATATTTATCACATTGACATATTTTGCTCTGGGTAGTTGTCAAACATTGGTTAAGTCCATTATAACCTCTTTTGTGCACCTTATGCTCATCCGCACTTTTACAGCCTTTTCTTA
+chr4-04	EST_Human	nucleotide_match	335427	335766	200.000000	-	.	Target=N20005.1 3 351 +;percentID=81.1;Gap=M19 D2 M87 I1 M10 I7 M37 I1 M36 D1 M3 I1 M32 D2 M2 D1 M14 I1 M52 I1 M10 I1 M12 I1 M5 I1 M15 ;sequence=TATAGTTACTTTGAGACTTGTGAAAAATCCACTGAAACTGCAAAGATGGAGAACAGGTTGCTGGATGGGATGTCTCTAGAAATACTGGTTTTAATTTTACATAAAATAATTTAAGTACATTAAATTCAAAGTACATTGCCTTTCTCCATTTATCAGCTTTTGGTGTTTCAGGAAATTGGGAGCACCAGCTCTGGAGAGGCAGTAGGAATAGCTACTCCAAACTCTGATCTTCTCTAAGCAGTTCTGTGAGGGTATTTCAGTGTGGGGTCAGACCTGGACAAGG [...]
+chr4-04	EST_Human	nucleotide_match	247956	248409	180.000000	+	.	Target=BM800562.1 506 990 +;percentID=72.4;Gap=M60 D1 M5 I1 M52 I1 M42 I1 M8 I1 M5 I1 M14 I1 M10 I1 M10 I1 M13 I1 M11 I1 M10 I2 M1 I1 M8 I1 M2 I1 M7 I1 M11 I1 M23 I1 M1 I1 M10 D1 M3 I1 M9 I1 M20 I1 M6 I1 M10 I1 M3 I1 M8 I1 M18 I1 M5 I1 M22 I1 M12 I1 M3 I1 M2 I1 M11 I1 M17 ;sequence=GGACGCGTGGGTTGCAATTTAGAGATGTGGCCATAGAATTCTCTCTGGAGGAGTGGCATTGCCTGGACACTGCACAGCGGAATCTATATAGGAATGTGATGTTAGAGAACTACAGTAACCTGGTCTTCCTTGGTATTGTTGTCTC [...]
+chr4-04	EST_Human	nucleotide_match	247956	248468	284.000000	+	.	Target=DA732282.1 220 736 +;percentID=78.2;Gap=M60 D1 M5 I1 M52 I1 M123 I2 M62 I1 M3 D1 M47 I1 M33 D1 M3 I1 M36 D1 M53 D1 M14 I1 M7 I1 M10 ;sequence=CCAAAAAGTGATACTGAGAAGATATGAAAAACGTGGACATGGAAATTTACAGTTAATAAAAAGGTGTGAAAGTGTAGATGAGTGTAAGGTGCACACAGGAGGTTATAATGGACTTAACCAGTGTAGTACAACTACCCAGAGCAAAGTATTTCAATGTGATAAATATGGGAAAGTCTTTCATAAATTTTCAAATTCAAATAGACATAATATAAGACATACTGAAAAAAAACCTTTCAAATGCATAGAATGTGGCAAAGCTTTTAACCAGTTCTCAACCCT [...]
+chr4-04	EST_Human	nucleotide_match	335206	335452	147.000000	+	.	Target=BG999393.1 185 436 +;percentID=80.8;Gap=M69 D1 M5 I1 M82 D1 M3 I1 M50 I1 M22 I1 M2 I2 M1 I1 M11 
+chr4-04	EST_Human	nucleotide_match	247956	248575	285.000000	+	.	Target=BG289439.1 224 851 +;percentID=75.3;Gap=M60 D1 M5 I1 M52 I1 M123 I2 M14 I1 M48 I1 M3 D1 M81 D1 M2 I1 M51 I1 M6 I1 M2 I1 M1 I1 M12 D1 M3 I1 M8 I2 M11 I1 M1 I1 M15 I1 M5 I1 M10 D1 M5 I1 M12 D1 M7 I1 M3 I1 M8 D1 M2 D1 M7 D1 M4 D1 M5 I1 M1 I1 M6 D1 M11 D1 M5 D1 M5 D1 M7 D1 M4 ;sequence=CTTTCCAAAAAGTGATACTGAGAAGATATGAAAAACGTGGACATGGAAATTTACAGTTAATAAAAAGGTGTGAAAGTGTAGATGAGTGTAAGGTGCACACAGGAGGTTATAATGGACTTAACCAGTGTAGTACAACTA [...]
+chr4-04	EST_Human	nucleotide_match	335150	335319	127.000000	+	.	Target=T79074.1 94 269 +;percentID=87.5;Gap=M53 I1 M2 I2 M62 I1 M6 I1 M18 I1 M29 ;sequence=ATGAATAAATGATTGAATTCAGCATCGTGTGTTCAGTACAAAGACAGAAACTGTATGGAGACTTAAGCTTAATTTGTGTTACTTCCCTTTTATTGTTTTGTGAGTTTTAATGCCACCATCTGATCAGCTGTTCATTGACAGAAGAGAAATTGTTGTTATTATTTGTGTTGTTTTTACCTTGCTAAGAATAAATAATTAGCTTCTAATATAATTGGGTCTAGGAAAAACATAAGGGTTTTGGGTTAAATTCCNTGTTATTGTGTGTTATAATGTTATAAAATAGGGGGNATTAGGCCTAAAATAGGGTTAAGGGTACNGGGA
+chr4-04	EST_Human	nucleotide_match	248067	248563	276.000000	+	.	Target=DA572502.1 332 829 +;percentID=78.7;Gap=M3 D1 M117 I1 M1 I1 M56 D1 M7 I1 M90 I1 M3 D1 M90 D1 M26 D1 M8 D1 M17 I1 M6 I1 M12 D1 M11 I1 M19 I1 M6 I1 M11 D1 M6 
+chr4-04	EST_Human	nucleotide_match	248108	248718	607.000000	-	.	Target=AW291262.1 18 628 +;percentID=99.5;sequence=TTTTTTTTTTTTTTTTTAACAATATTCTTCACTTTATTTGCTGTTTAAAGCCAAAGGAAACATATTACCAGAAATGTCATTCAACTATGTTATCAACTATGTTTCTCACCTGTCTGAATTCTCTGGTGTACAGTAAGGGTTGAGGACCAAGTAAAATCTTTGCCACATTCTTCACATGTGTAGGGTTTCTCTCCAATATGAATATTCGTATGTTCATTCAGGCTTCTGGACCATCTAAAGGCTTTGCCACATTCTTTACATTTGTAGGGTTTCTCTGCAGTATGAATTTTCTTATGTTCATTCAGTGCAGAGGACTGTCTAAAGGCTTTGCCACATTCTTCACATTTGTAGGGTTTTTGCCCANAATGAATTCTCTT [...]
+chr4-04	EST_Human	nucleotide_match	335150	335264	87.000000	-	.	Target=AA628705.1 3 120 +;percentID=88.1;Gap=M60 I2 M2 I1 M53 ;sequence=TTTTATATTAGAAGCTAATTATTTATTCTTAGCAAGGTAAAAACAACACAAATAATAACAACAATTTCTCTTCTGTCAATGAACAGCTGATCAGATGGTGGCATTAAAACTCACAAAACAATAAAAGGGAAGTAACACAAATTAAGCTTAAGTCTCCATACAGTTTCTGTCTTTGTACTGAACACACGATGCTGAATTCAATCATTTATTCATGTGCTCTAGACTGCAAGTTCCTTGATGGTAGGGACCATGACTGCTTTATGTCTTTTTCTAATGATCATATGAAATAGAAGCAATTAGCTTATTGATCAGTTTGAGTCTCCAGATTCCTCATTTTTCACCAAAGAACC
+chr4-04	EST_Human	nucleotide_match	248136	248432	181.000000	+	.	Target=BP336027.1 267 565 +;percentID=80.7;Gap=M51 I2 M246 
+chr4-04	EST_Human	nucleotide_match	248187	248720	502.000000	-	.	Target=DB369343.1 1 535 +;percentID=96.8;Gap=M228 D2 M194 D1 M22 I1 M6 I1 M4 I1 M15 I1 M62 ;sequence=GGAACAATATTCTTCACTTTATTTGCTGTTTAAAGCCAAAGGAAACATATTACTAGAAATGTCATTCAACTATGTTATCAACTATGTTTCTCACCTGTCTGAATTCTCTGGTGTACAGTAAGGGTTGAGGACCAAGTAAAATCTTTGCCACATTCTTCACATGTGTAGGGTTTCTCTCCAATATGAATATTCGTATGTTCATTCAGGCTTCTGGACCATCTAAAGGCTGCCACATTCTTTACATTTGTAGGGTTTCTCTGCAGTATGAATTTTCTTATGTTCATTCAGTGCAGAGGACTGTCTAAAGGCTTTGCCACATTCTTCACA [...]
+chr4-04	EST_Human	nucleotide_match	331694	331775	60.000000	+	.	Target=CN278785.1 3 84 +;percentID=88.1;Gap=M56 I1 M4 I1 M2 D1 M1 D1 M17 
+chr4-04	EST_Human	nucleotide_match	248205	248373	106.000000	+	.	Target=BX100770.1 550 718 +;percentID=81.2;sequence=CTGGAGCGGACAGGGTGGCTTCCGGGTTTGGCGGGTACTTTGTCTCTCGCTCTAGCCGGAGCTGCAGGTCTCGTCTTCCCTGGTCTGTGTCCTCTTCTCCTAGGGGCCCAGCCTCTGTGGCCCTGTGACCTGCAGGTATTGGGAGATCCCCAGCTAAGACGCCAGGTCCTCCTGGAAGCCTAGAAATGTTATGTGTTCTCATATTGCTGAAGACCTTTGCCCAGAGCGAGACATAAAATATTTTTTCCAAAAAGTCATACTGAGGAGATATGATAAATGTGAACATGAGAATTTACAATTAAGAAAGGGCTGTAAAAGTGTGGATGAGTGTAAGGTGTGCAAAGGAGGTTATAATGGACTTAACCAATGTCTGATA [...]
+chr4-04	EST_Human	nucleotide_match	248216	248527	206.000000	+	.	Target=DN997781.1 328 639 +;percentID=83
+chr4-04	EST_Human	nucleotide_match	248217	248336	81.000000	+	.	Target=DB215628.1 447 566 +;percentID=84.4;Gap=M31 I1 M3 D1 M85 
+chr4-04	EST_Human	nucleotide_match	248218	248318	53.000000	+	.	Target=BU167813.1 813 916 +;percentID=77.4;Gap=M30 I1 M16 I1 M5 I1 M50 
+chr4-04	EST_Human	nucleotide_match	248218	248400	75.000000	+	.	Target=BM465909.1 681 873 +;percentID=73.1;Gap=M39 I1 M12 D1 M32 I1 M7 I1 M9 I1 M5 I1 M14 I1 M8 I1 M7 I1 M16 I2 M8 I2 M17 D1 M7 
+chr4-04	EST_Human	nucleotide_match	248218	248362	87.000000	+	.	Target=AL705298.1 423 568 +;percentID=80.4;Gap=M105 I1 M40 
+chr4-04	EST_Human	nucleotide_match	248253	248457	114.000000	+	.	Target=BP420445.1 244 447 +;percentID=78.7;Gap=M2 D1 M55 D1 M4 I1 M18 I1 M6 D1 M117 
+chr4-04	EST_Human	nucleotide_match	331568	331775	206.000000	+	.	Target=DA460146.1 1 209 +;percentID=99.5;Gap=M126 I1 M82 
+chr4-04	EST_Human	nucleotide_match	248253	248599	181.000000	+	.	Target=BG391074.1 314 657 +;percentID=77.1;Gap=M2 D1 M55 D1 M4 I1 M18 I1 M6 D1 M161 D1 M2 I1 M40 D1 M29 D1 M24 
+chr4-04	EST_Human	nucleotide_match	248253	248576	181.000000	+	.	Target=BE177799.1 338 653 +;percentID=79.4;Gap=M175 I1 M2 D1 M73 D1 M16 D1 M8 D1 M11 D1 M5 D1 M9 D1 M4 D1 M3 D1 M9 
+chr4-04	EST_Human	nucleotide_match	248385	248497	77.000000	+	.	Target=DA803972.1 446 558 +;percentID=84.2
+chr4-04	EST_Human	nucleotide_match	248580	249122	517.000000	-	.	Target=DB362556.1 1 543 +;percentID=97.1;sequence=GGAGACGGAGTCTCACTCTGTCGCCTAGGCTGGCGTGCAGTGCAGTGGCGCTATCTAGGCTCACTGCAAGCTCTGCCTCCTGGGTTCACACCATTCTCCTGCCTCAGCCTCCTGAGTAGCTGGGACTACAGGCACTCACCACCATGCCCAGTTATTTTTTTGTATTTTTAGTAGAGATGGGGTTTCACCATGTTAGCCAGGATGGTCTTGACCTCCTGAACTTGTGATCCGCCTGCCTTGGCCTCCCAAAGTGCTGGGATTATAGGCATGAGCCACTGCGCCTGGCCTACTCTGATGGATTATTACATGGTGTATGCCTGTATTCAAATAACTAATATATGCCAGAAATATGTACATATACTATGTGCCTACAAAAAT [...]
+chr4-04	EST_Human	nucleotide_match	248935	249438	336.000000	+	.	Target=AA017090.1 1 529 +;percentID=83.9;Gap=M11 I1 M16 D1 M100 D1 M37 D1 M1 D1 M47 I1 M50 D1 M45 I1 M43 I1 M7 I1 M21 I1 M4 I1 M3 I1 M4 I1 M6 I1 M8 I1 M3 I1 M10 I1 M2 I1 M7 I1 M3 I2 M8 I1 M7 I1 M1 I1 M4 I1 M3 I1 M3 I1 M1 I1 M7 I1 M2 I1 M7 I1 M4 I1 M4 I1 M6 I1 M14 ;sequence=GTGAAACCCTATTCTCTACTAAAAATACAAAATGTGGCCAGGCCTGGTGGTGTGTGTCTGTAGTCCCAGCTACTCAGGAGGCTGAGGCAGGAGAATCACTTGAACCTGGGAGGCGGAGGTTGCGGTGANCGAGATTGTGCCACTGCACGCCANC [...]
+chr4-04	EST_Human	nucleotide_match	249003	249445	440.000000	-	.	Target=CR746939.1 25 467 +;percentID=99.5;sequence=AGCGCTGGAGAGTTTTTTTTTTTTTTTTCTTACACCTAACGGTTTATTTTTAGAGCAATACATTTATATATTTAACTTCATGTAAATAAAAATGAAAAGTCCGTATGTGTTTGCAGGACAAGACACTACATGTTCAAAGACAAATATGAAACATTTTTTTTAAGTATTCATTCAGGACTCANAAACATATGAATTATACTTTGATATATTACAATCACAAAACGATCTGTAGTAAAAAATAATTGTACATTGAAAAATAAAGTGTATAACTGGACTTGTGTAATACAAAGAATAAATACTTAAGGTGATGAATATCTCATTTACTCTGATGGATTTTTTCTTTTTTTGGAGACGGAGTCTCACTCTGTCGCCTAGGC [...]
+chr4-04	EST_Human	nucleotide_match	249194	249789	478.000000	+	.	Target=AW876428.1 8 601 +;percentID=90.3;Gap=M54 D1 M7 D1 M55 I1 M7 D1 M470 ;sequence=GACGAGTAGTCGAGGTATACACTATATTTTTCAATGTACAATTATTTTTCACTACAGATCGTCCGTGATGCAATATATCAAAGTACAATCCATATGTATCTGAGTCCTGAATGAATACTTAANGAAAAATGTTCATATTTGTCCTTGAACATGCAGTGTCTTGTCCTGCAAACACATACGGACTTTTCATTTTCATCCACATGAAGTTAAACATACAAATGCACTGCTCCAAAAATAAACCGTTAGGTGCAAGAAAACTACAGAGCAAGCAATAGTGCTTGCGCGAGAGTCTGCACCCACCCTCCAAAGAAAAGATCAACATTGGAACAAAGAAGACTCTCT [...]
+chr4-04	EST_Human	nucleotide_match	249195	249712	500.000000	+	.	Target=AW876304.1 12 530 +;percentID=98.3;Gap=M4 I1 M514 
+chr4-04	EST_Human	nucleotide_match	331644	332345	383.000000	+	.	Target=BG251450.1 1 681 +;percentID=80;Gap=M50 I1 M149 I1 M1 I1 M22 D6 M1 D2 M1 D1 M80 D1 M6 D1 M77 D1 M5 I1 M5 D1 M16 D2 M1 D1 M3 D7 M1 D1 M1 D1 M10 D1 M44 D1 M6 I1 M5 I1 M8 I1 M6 I1 M27 D1 M14 I1 M3 D1 M27 D1 M6 I1 M17 I1 M1 I1 M23 D1 M19 D1 M8 D1 M26 
+chr4-04	EST_Human	nucleotide_match	249196	249783	486.000000	+	.	Target=AW876242.1 1 588 +;percentID=91.3;sequence=TCGAGTTATACACTTTATTTTTCAATGTACAATTATTTTTCACTACAGATCGTTCCGTGATTGCAATATATCAAAGTACAATCCATATGTTTCTGAGTCCTGAATGAATACTTAACAAAAATGTTTCATATTTGTCCTTGAACATGCAGTGTCTTGTCCTGCAAACACATACGGACTTTTCATTTTCATCCACATGAAGTTAAACATACAAATGCACTGCTCCAAAAATAAACCGTTAGGTGCAAGAAAACTACAGAGCAAGCAATAGTGCTTGCGCGAGAGTCTGCACCCACCCTCCAAAGAAAAGATCAACATTGGAACAAAGAAGACTCTCTCATAAGGTGGACAATTCACTAGAAATCCAGAAACCCAAAACAC [...]
+chr4-04	EST_Human	nucleotide_match	249236	249804	282.000000	-	.	Target=BU785955.1 42 630 +;percentID=77.2;Gap=M28 I1 M1 I2 M5 I1 M3 I2 M10 D1 M7 D1 M3 D1 M33 D1 M13 I1 M50 I1 M1 I3 M25 I2 M1 I2 M1 I3 M24 I3 M5 I1 M62 I1 M98 D1 M56 D2 M10 D1 M2 D1 M48 D1 M2 D2 M2 D1 M33 I1 M1 I5 M6 I1 M3 I3 M23 
+chr4-04	EST_Human	nucleotide_match	330936	331116	179.000000	+	.	Target=BX503083.1 2 182 +;percentID=99.4
+chr4-04	EST_Human	nucleotide_match	249593	250186	342.000000	+	.	Target=BG564801.1 18 627 +;percentID=80.9;Gap=M28 I1 M1 I3 M1 I1 M1 I1 M1 I1 M22 I4 M13 I2 M1 I2 M33 I1 M16 I2 M1 I2 M57 I2 M1 I1 M35 D3 M3 D1 M70 I3 M12 I1 M5 I1 M17 D2 M1 D1 M1 D1 M4 D1 M1 D1 M35 I1 M40 D1 M51 D3 M39 I1 M90 ;sequence=AAACATTCTATATTTTCTTCTTTTTATTTAATGACTCTAGAATCTAATGGATTGTCGTTGAGAATCTCCCCATACAAACTCCTTGTTTTTATTTGTCTGGTGCTCATGCTAGAGCTATAATTTCTTTGATTCTCTTTTTTGTTTTCACTTCATGAAGTGTTTATTATGTGAGCTGGTCAGAAATTATAAGAA [...]
+chr4-04	EST_Human	nucleotide_match	336052	336604	549.000000	+	.	Target=DA016989.1 1 554 +;percentID=99.6;Gap=M155 I1 M398 
+chr4-04	EST_Human	nucleotide_match	249696	250129	424.000000	+	.	Target=CA427639.1 2 435 +;percentID=98.8
+chr4-04	EST_Human	nucleotide_match	330988	331260	267.000000	-	.	Target=EL955530.1 47 317 +;percentID=99.3;Gap=M46 D2 M225 ;sequence=GCGGCGCTCTAAACTAGTGGATCCCCGGGCTGCAGGAATCGAATTCCAGTCTCACATAAACATACAAAAGTCACAGACACACACACACACACGCACGCACCCACGCACGCACAGCCCATCCTTCCTCCAAGGCTCGCGAATCATCTCTCCACAAATCCTGCCTTCGGGGCCGCAGCCTGCAGGCCGACCTCAGTCCGTCCTCACAGAGCCTAGTTGGGTGCACAGCTCTCCCTGACGCGCGAGGAGCAGGTTCACGGGAGTCGGTCGCGCATCCCCAGCGCCCTGCGGGCCTCGCACCGGCTGTGGCGGTGACCCCGAATTCTTCCATCTCTATGAGAACAAGCCCATTTTAACTTTCTG [...]
+chr4-04	EST_Human	nucleotide_match	249924	250452	521.000000	-	.	Target=AA017091.1 1 530 +;percentID=99.2;Gap=M264 D1 M248 I1 M10 I1 M6 ;sequence=GCGNCCGCACTAAGAAATGAGGAGTGCCTCTGCTCGGCGGCCCTACCATCTGGGAGTAAGGAGCGCCTCTTCCTGGCTGCCCCACCATCTGGGAAGTGAGGAGCATCTCTGTCCAGCTGCTGCACCATCTGGGAAGTGAGGAGAGCCTTTGCCCAGATGCTGTGCAACCCTCCAAGTGTGAAGTGGCAGCCTTGTATGTGATCTTTATGTCCTCCCTAAGTTTGCATTTTTGACATTAAAGTTTACTTTTAAATTAAAAAAAAACCCTCTTTAAATTCAGAATGAGTCAGTTTTGCAGCCTGGGAACAGATGTCCTCTCCACATGCACAATTAATGCCATTTCTTCA [...]
+chr4-04	EST_Human	nucleotide_match	249934	250218	187.000000	+	.	Target=BX956046.1 14 292 +;percentID=84.3;Gap=M26 D2 M43 I1 M50 D3 M83 D2 M48 I1 M16 D1 M11 ;sequence=ATAACTAAATAAGTTTGTTCAGGCAAGTACTGGGAAGACATAAGTATTGGGGATGTTTTGATAAATAATTGTAGTGAACAAACACAAAGTGCTGGGTCTGTAATAGATGCTCCATAACTAGCCATAAATATTCCTGGAGTTAGTTCGTAGCTCCAAGTAAAAGATTAAAAATATCTATGTTGAAGAAATGTCATTAATTGTGCATGTGGAGAGGACGTGTTCCCAGGCTGCAAAACTGACTCAGTCTGAATTTAAAGAGGATTTCTGTTTTTATTTTCTAATTATCTTTAGTTTTGTGATGTCTTCTTTTCCTTTGTGTTTTGGCT [...]
+chr4-04	EST_Human	nucleotide_match	335361	335786	289.000000	-	.	Target=T78596.1 3 433 +;percentID=83.9;Gap=M47 D1 M80 I1 M83 D1 M3 I1 M32 D2 M2 D1 M28 I1 M10 I1 M21 I1 M7 I1 M10 I1 M12 I1 M9 I1 M27 I1 M50 
+chr4-04	EST_Human	nucleotide_match	331581	332159	380.000000	+	.	Target=DA289388.1 3 564 +;percentID=85;Gap=M22 I1 M2 D1 M3 D1 M28 D1 M55 I1 M8 I1 M56 D1 M78 I3 M48 D2 M1 D5 M25 D1 M124 D1 M3 D1 M2 D1 M2 D2 M5 D1 M2 D1 M1 D1 M3 D1 M3 D1 M5 D1 M80 ;sequence=GTTGGCTTCCGGGATCTGGCGCGGCGTTTTCCTCTGGCTCCTGCGAGGGCTTGGTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGGTGAGTGTGCGGGGCAGGGCGTCCGGAGGCTGGGGAGGCC [...]
+chr4-04	EST_Human	nucleotide_match	250017	250218	134.000000	+	.	Target=BX645181.1 3 202 +;percentID=84.3;Gap=M38 D3 M39 I1 M94 I1 M16 D1 M11 ;sequence=GGGTGTGTAATAGATGCTTCATAATTAGCCATAAATATTCCTGGAGTTAGTTTGTAGCTCCAAGTAAGAGATTGAAAATAATCTGTGGCGAACAAATGGCATTAATTGTGCATGTGGAGAGGACGTCTGTTCTCAGGCTGCAGAACCAACTCATTATGAATGTAAAGAGGATTTCTTTTCTTATTTTCTAATTATCTTCAGTTTTGTGATATCTTTATGATTTATCCCCAGCTATGTATGCCTCAGAGCCTTTCTTCATTTTTGCGTTATGGCTAGTTTGTCACTGTTCTCTTCATTCCACGTAATTTCACGTGGACTTTAGGTTAACTGGGGTGTTTGAG [...]
+chr4-04	EST_Human	nucleotide_match	250028	250218	123.000000	+	.	Target=BE619505.1 1 189 +;percentID=84.1;Gap=M19 I1 M2 I1 M1 I1 M18 D1 M48 D4 M65 I1 M21 D1 M11 ;sequence=ATGCTCCATAATTAGCCATAAATATTATTCTTTCTGGAGTGAGTAGTAGCTCCAAGTAAGAGAATGAAAATGTCTATAGTGAAGAAATGGCAGTCTGCATGTGGAGAGAACATCTGTTACCAGGCTGCAAAACTGACTCATTCTGAATTTAAAGAGAACCTCTGATTTTATTTTCTAATTATCTTTAGTTTTGGAATATCTTTATGGTTTATTCCCAGCTATGTATGCCTCACACCCCTTCTTCTTGTGTTATGGCTACAGTCTTCTCACTGTTCTCTTTTTGCCATGTAATTTCATACAGACTTTCTATGTTCTGATTAGA [...]
+chr4-04	EST_Human	nucleotide_match	335591	335755	110.000000	+	.	Target=BX111612.1 538 702 +;percentID=84;Gap=M68 I1 M80 D1 M16 
+chr4-04	EST_Human	nucleotide_match	250170	250443	159.000000	+	.	Target=BX114674.1 305 582 +;percentID=79.6;Gap=M4 I1 M9 D1 M6 I2 M3 I1 M205 I1 M46 ;sequence=TGTCGTCCAGCCTCCCCCATGTCACCAGCAACCACGTCAGCTACAATGGCCTGTATGGAGTGGCAGTATTTAGCCAGAAGGATGGCTCCAGCGAGTTACCTCGAGGCTACAGGGCTCAAGAGAACTTCAGCGAGGATGGGGACGCCATCCTCTGGGAGACAGAGCTGGAGAAGGAGGACGACCCACTGCGCCGGCCCATCACCATAGCTCTTGTTGAGTCTAACAGTATTAATCACAATGGAGGTGAGTATACCCCCTCAGCCCCTGCTCAAGAACCTTCCATGGCTCCCCACTGTCTTTTTTTTTCTCCAATTTAAAACTTTTAATTTAATTTA [...]
+chr4-04	EST_Human	nucleotide_match	336530	336753	202.000000	-	.	Target=BG754914.1 266 489 +;percentID=95.1;sequence=GCCAACATGGGCCGCGTTCGCACCAAAACCGTGAAGAAGGCGGCCCGGGTCATCATAGAAAAGTACTACACGCGCCTGGGCAACGACTTCCACACGAACAAGCGCGTGTGCGAGGAGATCGCCATTATCCCCAGCAAAAAGCTCCGCAACAAGATAGCAGGTTATGTCACGCATCTGATGAAGCGAATTCAGAGAGGCCCAGTAAGAGGTATCTCCATCAAGCTGCAGGAGGAGGAGAGAGAAAGGAGAGACAATTATGTTCCTGAGGTCTCAGCCTTGGATCAGGAGATTATTGAAGTAGATCCTGACACTAAGGAAATGCTGAAGCTTTTGGACTTCGGCAGTCTGTCCAACCTTCAGGTCACTCAGCCTACAG [...]
+chr4-04	EST_Human	nucleotide_match	250170	250463	168.000000	+	.	Target=BM051754.1 17 317 +;percentID=79.5;Gap=M4 I1 M9 D1 M6 I2 M3 I1 M205 I1 M43 I2 M2 I2 M17 D1 M3 ;sequence=GCCACTGTCTTTTTTTTTCTCCAATTTAAAACTTTTAATTTAATTTAAATTTAAAAGTAAACTTTAATGTCAAAGATGCAAACCTGGGTAGGGCAGAAAAATCACACACAAGGTTGCCACTTCACACTTGGAGGGTTGCACAGCGGCCAGGCAGAGGCGCTCCTCACTTCCCAGACAGTGTGGGGGCCAGGGAGAGGCGCTCCTCACTTCCCAGACAGCGTGGGGGCCAGGGAGAGGTGCTCCTCACTTCCCAGACGGTGGGGCGGCCGAGCAGAGGTGCTTCTTATTTTTGAGACGGTGCGGCCGCCAGGCAGGGC [...]
+chr4-04	EST_Human	nucleotide_match	336536	336753	202.000000	-	.	Target=BG682179.1 266 483 +;percentID=96.3;sequence=CCAACATGGGCCGCGTTCGCACCAAAACCGTGAAGAAGGCGGCCCGGGTCATCATAGAAAAGTACTACACGCGCCTGGGCAACGACTTCCACACGAACAAGCGCGTGTGCGAGGAGATCGCCATTATCCCCAGCAAAAAGCTCCGCAACAAGATAGCAGGTTATGTCACGCATCTGATGAAGCGAATTCAGAGAGGCCCAGTAAGAGGTATCTCCATCAAGCTGCAGGAGGAGGAGAGAGAAACGGAGAGACAATTATGTTCCTGAGGTCTCAGCCTTGGATCAGGAGATTATTGAAGTAGATCCTGACACTAAGGAAATGCTGAAGCTTTTGGACTTCGGCAGTCTGTCCAACCTTCAGGTCACTCAGCCTACAG [...]
+chr4-04	EST_Human	nucleotide_match	250182	250814	624.000000	-	.	Target=DA136141.1 1 632 +;percentID=99.4;Gap=M626 D1 M6 
+chr4-04	EST_Human	nucleotide_match	336539	336775	196.000000	-	.	Target=CD176941.1 17 252 +;percentID=91.6;Gap=M19 D1 M217 ;sequence=ACCGACCGAAGAGTAGAAGGAATTCATTATGTTCCTGAGGTCTCAGCCTTGCATCAGGAGATTATTGAAGTAGATCCTGACACTAAGGAAATGCTGAAGCTTTTGGACTTCGGCAGTCTGTCCAACCTTCAGGTCACTCAGCCTACAGTTGGGATGAATTTCAAAACGCCTCGGGGACCTGTTTGAACTTTTTCTGTAGTGCTGTATTATTTTCAATAAATCTGGGACAACAGCAAAAAAAAAAAAAAAAAAAACCC
+chr4-04	EST_Human	nucleotide_match	250188	250452	251.000000	-	.	Target=AW196461.1 1 272 +;percentID=97.4;Gap=M198 I1 M8 I1 M10 I1 M15 I1 M6 I1 M13 I1 M3 I1 M12 ;sequence=GCGGCCGCACTAAGAAATGAGGAGTGCCTCTGCTCGGCGGCCCTACCATCTGGGAGTAAGGAGCGCCTCTTCCTGGCTGCCCCACCATCTGGGAAGTGAGGAGCATCTCTGTCCAGCTGCTGCACCATCTGGGAAGTGAGGAGAGCCTTTGCCCAGATGCTGTGCAACCCTCCAAGTGTGAAGTGGCAGCCTTGTATGGTGATCTTTTATGTCCTCCCCTAAGTTTGCATTTTTTGACATTTAAAGTTTACTTTTTAAANTTAAAAAAAAAAAAAAAAACNCTCGTGCCC
+chr4-04	EST_Human	nucleotide_match	336539	336756	198.000000	-	.	Target=BG755162.1 267 486 +;percentID=95.5;Gap=M208 I1 M1 I1 M9 ;sequence=GGCCAACATGGGCCGCGTTCGCACCAAAACCGTGAAGAAGGCGGCCCGGGTCATCATAGAAAAGTACTACACGCGCCTGGGCAACGACTTCCACACGAACAAGCGCGTGTGCTGAGGAGATCGCCATTATCCCCAGTCAAAAAGCTCCGCAACAAGATAGCAGGTTATGTCACGCATCTGATGAAGCGAATTCAGAGAGGCCCAGTAAGAGGTATCTCCATCAAGCTGCAGGAGGAGGAGAGAGAAAGGAGAGACAATTATGTTCCATGAGGTCTCAGCCTTGGATCAGGAGATTATTGAAGTAGATCCTGACACTAAGGAAATGCTGAAGCTTCTGGACTTCGGCAGTCTGTC [...]
+chr4-04	EST_Human	nucleotide_match	250193	250336	116.000000	+	.	Target=AA609601.1 1 144 +;percentID=90.3;sequence=TTTCTAATTTAAAAGTAAACTTTAATATTGAAAATGCAAACTTGGGGAGGGCAGAAAGATCACACACAGGGCTGCCACTTCACACTTGGAGGGTTGCACAGCAGCCGGGCAAAGGCTCTCCTCACTTCTCAGATGGTGCTGCGGCTGGCGGGAGGCGCGGGCCAGGGGGAGGGGCTTTTCACTTCCCCGATGGTGGGGCGATCAGGCAGAGGCGCTCCTCACTTCCCAGACAGTGGGGCGGCCAGGCAGAGGCGCTCCTCGCTTCCCAGACAGTGGGGCGGCCAGGCAGAGGCGCTCCTCGCTTCCCAGACAATGGAGCGGCCAGGCAGAGACACTCCTCACTTCCCAGACATTGTGGCGACCAAGGAGAGTCGCTCC [...]
+chr4-04	EST_Human	nucleotide_match	336536	336753	200.000000	+	.	Target=AI564812.1 2 219 +;percentID=95.9;sequence=TTTTTTTTTTTTTTTTTTTTTTGCTGTTGTCCCAGATTTATTGAAAATAATACAGCACTACAGAAAAAATTCAAACAGGTCCCCGAGGCGTTTTGAAATTCATCCCAACTGTAGGCTGAGTGACCTGAAGGTTGGACAGACTGCCGAAGTCCAAAAGCTTCAGCATTTCCTTAGTGTCAGGATCTACTTCAATAATCTCCTGATCCAAGGCTGAGACCTCAGGAACATAATTGTCTCTCCTTTCTCTCTCCTCCTCCTGCAGCTTGATGGAGATACCTCTTACTGGGCCTCTCTGAATTCGCTTCATCAGATGCGTGACGTAACCTGCTATCTTGTTGCGGAGCTTTTTGCTGGGGATAATGGCGATCTCCTCGCACA [...]
+chr4-04	EST_Human	nucleotide_match	250198	250340	120.000000	+	.	Target=W95750.1 1 143 +;percentID=91.6;sequence=AATTTAAAAGTAAACTTTAATATTGAAAATGCAAACTTNGGGAGGGCAGAAAGATCACACACAGGGCTGCCACTTCACACTTGGAGGGTTGCACAGCAGCCGGGCAAAGGCTCTCCTCACTTCCCAGATGGTGCTGCGGCTGGC
+chr4-04	EST_Human	nucleotide_match	336536	336753	201.000000	+	.	Target=AA633038.1 1 217 +;percentID=96.3;Gap=M21 D1 M196 ;sequence=TTTTTTTTTTTTTTTTTTATTTTGTTGTCCCAGATTTATTGAAAATAATACAGCACTACAGAAAAAATTCAAACAGGTCCCCGAGGCGTTTTGAAATTCATCCCAACTGTAGGCTGAGTGACCTGAAGGTTGGACAGACTGCCGAAGTCCAAAAGCTTCAGCATTTCCTTAGTGTCAGGATCTACTTCAATAATCTCCTGATCCAAGGCTGAGACCTCAGGAACATAATTGTCTCTCCTTTCTCTCTCCTCCTCCTGCAGCTTGATGGAGATACCTCTTACTGGGCCTCTCTGAATTCGCTTCATCAGATGCGTGACATAACCTGCTATCTTGTTGCGGACTTTTTGCTGGGGATAATGGC [...]
+chr4-04	EST_Human	nucleotide_match	250213	250452	240.000000	-	.	Target=AI654212.1 1 240 +;percentID=100;sequence=GCGGCCGCACTAAGAAATGAGGAGTGCCTCTGCTCGGCGGCCCTACCATCTGGGAGTAAGGAGCGCCTCTTCCTGGCTGCCCCACCATCTGGGAAGTGAGGAGCATCTCTGTCCAGCTGCTGCACCATCTGGGAAGTGAGGAGAGCCTTTGCCCAGATGCTGTGCAACCCTCCAAGTGTGAAGTGGCAGCCTTGTATGTGATCTTTATGTCCTCCCTAAGTTTGCATTTTTGACATTAAA
+chr4-04	EST_Human	nucleotide_match	330988	331228	239.000000	-	.	Target=DA689205.1 116 356 +;percentID=99.6;sequence=ATGGGTCAGTCGGTCCTGAGAGATGGGCGAGCGCCGTTCCGAAGGGACGGGCGATGGCCTCCGTTGCCCTCGGCCGATCGAAAGGGAGTCGGGTTCAGATCCCCGAATCCGACAGACACACACACACACACGCACGCACCCACGCACGCACAGCCCATCCTTCCTCCAAGGCTCGCGAATCATCTCTCCACAAATCCTGCCTTCGGGGCCGCAGCCTGCAGGCCGACCTCAGTCCGTCCTCACAGAGCCTAGTTGGGTGCACAGCTCTCCCTGACGCGCGAGGAGCAGGTTCACGGGAGTCGGTCGCGCATCCCCAGCGCCCTGCGGGCCTCGCACCGGCTGTGGCGGCGACCCCGAATTCTTCCATCTCTATGAG [...]
+chr4-04	EST_Human	nucleotide_match	250358	250634	130.000000	+	.	Target=AA609601.1 145 424 +;percentID=74.6;Gap=M16 D2 M22 I1 M38 I1 M2 I1 M2 I2 M112 I1 M13 D1 M69 
+chr4-04	EST_Human	nucleotide_match	250675	250794	62.000000	+	.	Target=BX645181.1 205 324 +;percentID=79.7;Gap=M2 I1 M5 D1 M7 I1 M28 I1 M1 I2 M5 I1 M17 D2 M1 D1 M44 D2 M4 
+chr4-04	EST_Human	nucleotide_match	250675	250890	127.000000	+	.	Target=BE619505.1 192 408 +;percentID=80.6;Gap=M14 I1 M111 I1 M3 I2 M3 D1 M21 D1 M11 D1 M50 
+chr4-04	EST_Human	nucleotide_match	250702	251062	185.000000	+	.	Target=BX956046.1 293 663 +;percentID=78.3;Gap=M5 I1 M3 D2 M1 D2 M9 D1 M76 I1 M2 I2 M3 D1 M19 I1 M1 I2 M16 D1 M50 D1 M25 I1 M1 I3 M20 I1 M3 I1 M7 I1 M6 I1 M11 I4 M17 D1 M1 D1 M64 I1 M11 
+chr4-04	EST_Human	nucleotide_match	250787	251592	762.000000	-	.	Target=BF965584.1 1 793 +;percentID=98.1;Gap=M30 D1 M89 D1 M308 D1 M194 D1 M26 I1 M71 D1 M31 D1 M9 D1 M2 D1 M2 D1 M11 D1 M7 D1 M3 D1 M3 D1 M1 D1 M5 ;sequence=ATAAGACAAGATGATGTACTCTAGGGCTTTGCTTTAAGTTTGAAGCACCTGGAGTTTCTAATGCTGATGGTAATTATAGGGAAGACATTAAAAGGGTAACTTGCTAAAGGTCCCATAATGTCCATTCTGTGACCAAAGTAAGTAAATTTGCATTAAAAATCACTGAGAAAATGATACTCTCCAAAATTTTTCCAGAGAAGGTTACCAAGGACTTGGTTAAAGTTAGTTAGATGACTAAGAATGAAAACTGTAGACCATGAACTGCATCCA [...]
+chr4-04	EST_Human	nucleotide_match	250835	251105	138.000000	+	.	Target=BX645181.1 325 615 +;percentID=77.9;Gap=M8 D1 M50 I3 M1 I1 M25 I1 M1 I3 M6 I4 M12 I2 M12 I1 M6 I1 M10 I2 M1 I1 M1 I1 M9 I1 M3 I1 M1 I1 M50 D1 M14 D1 M58 
+chr4-04	EST_Human	nucleotide_match	250989	251816	825.000000	+	.	Target=EB388150.1 1 827 +;percentID=99.9;Gap=M784 D1 M43 ;sequence=CTAAGACTAGGTAAAGCATTAATATGAGTGGGTTGCATATTGTCAGCACCATATGAAGAAAATATCAGAATTTTGAAATTTCTTCAGAGAAAATGTATCTTAGAGGTAAATTTTTTAGGAGACTTAATGGTAGAGAAGAATTTTACATTTAATATTCTATGACATACTTATAGCAAAACTTTTTTCATGCAGAATTTTCTATTTTTGAATGTGAATCTTAAGTGTTGGAAAATAATAGAATGGTCTCTGTAGATTCAAAATTTGGAATGATCTTTTTTGTCCAGATTGATACTGCAATCCTGAGGAATTTCTCTTATGATTTTTTATTTTAGTGGATGCAGTTCATGGTCTACAGTTTTCA [...]
+chr4-04	EST_Human	nucleotide_match	251178	251417	162.000000	+	.	Target=CN414775.1 114 349 +;percentID=85.1;Gap=M39 I1 M85 D2 M52 D2 M1 D1 M2 D1 M37 I1 M18 
+chr4-04	EST_Human	nucleotide_match	252424	253113	679.000000	-	.	Target=BG290372.1 1 693 +;percentID=99.3;Gap=M461 I1 M54 I1 M107 I1 M31 I1 M5 D1 M31 ;sequence=CTAGGTTATGATTATAGAGCGAGGATTATTATAATATTGGAATAAAGAATAAGTACTGCTGATTAATTATATTCATATATAATCATATCTAAGATCTATGTCTGGCGTAACTATTGTTGTTTTACATTTTGTTATACTGGAACAGCTCGTGTCCTCGGTCTCTTGCCTCTGCACCTGGGTGGCTTGCCGCCCACACATTTGCACACACATATAACAAAAAATGTATCAGTTGATTTAATTTTGTTAAATATTTACTAAGAATGGGTGTTGAAGATAATCACTTATTTTCTGTTTGAAGAGGGTGTTTAACAAAGAGTGTTTTCTCTGGAGTCA [...]
+chr4-04	EST_Human	nucleotide_match	252621	253446	814.000000	+	.	Target=DA568484.1 1 825 +;percentID=99.2;Gap=M816 D1 M9 ;sequence=TAAACACTACCCATAACACTGTGTTAATAAATTTAATTTTCACAGTAATTCCATAGCATAGGCATTATTATTATCCTTATTTTAAAGAGAAAGAAATAGAGCCACAGAGAAAAATTACTTGCTCACAACAGTGGAGCCAGTTTTAAAACACAGGGAACTTTGACTCCAGAGAAAACACTCTTTGTTAAACACCCTCTTCAAACAGAAAATAAGTGATTATCTTCAACACCCATTCTTAGTAAATATTTAACAAAATTAAATCAACTGATACATTTTTTGTTATATGTGTGTGCAAATGTGTGGGCGGCAAGCCACCCAGGTGCAGAGGCAAGAGACCGAGGACACGAGCTGTTCCAGTATAA [...]
+chr4-04	EST_Human	nucleotide_match	254205	254806	577.000000	-	.	Target=DB354994.1 1 602 +;percentID=97.7;Gap=M522 I1 M20 D1 M59 ;sequence=GGTTATAGCTGATGGAGATGGCCTCTCCTACAGAAACAAGAATTATGGAGTGCCCTTATTGCTTTCTGCTGGAGAACCTGGGGGAAATAAAGAACCTCTCCCAATTTATACAATCTTTCAGTCCTAGAGTATATTCACATTTGATACCCCATTGCAGGGTGGGCAGGTTGTTAGGCAAAGTTGGGATAAGGGCCATAAGGAGTTCCCCGGAAAGGGTGGTGGCCGTTGCTGCTTGGCCGACCCTCCTGTTTCTCTAGGTAATCTCATCTTGGCATTTCTGGTAGCCCCAGCAATGAACTGCAGCTTTCTGTGGTAGGTGGATAGCCTAGGGTAGGGTAAAATATCTGTGACCCA [...]
+chr4-04	EST_Human	nucleotide_match	254324	254806	483.000000	-	.	Target=AI336023.1 1 483 +;percentID=100;sequence=GGTTATAGCTGATGGAGATGGCCTCTCCTACAGAAACAAGAATTATGGAGTGCCCTTATTGCTTTCTGCTGGAGAACCTGGGGGAAATAAAGAACCTCTCCCAATTTATACAATCTTTCAGTCCTAGAGTATATTCACATTTGATACCCCATTGCAGGGTGGGCAGGTTGTTAGGCAAAGTTGGGATAAGGGCCATAAGGAGTTCCCCGGAAAGGGTGGTGGCCGTTGCTGCTTGGCCGACCCTCCTGTTTCTCTAGGTAATCTCATCTTGGCATTTCTGGTAGCCCCAGCAATGAACTGCAGCTTTCTGTGGTAGGTGGATAGCCTAGGGTAGGGTAAAATATCTGTGACCCATATTTAGTAGGGGTATCTTTTGCTG [...]
+chr4-04	EST_Human	nucleotide_match	332156	332662	393.000000	-	.	Target=DC393066.1 1 522 +;percentID=89.3;Gap=M215 I2 M96 I3 M2 I2 M1 I7 M1 I3 M151 D1 M22 D1 M17 ;sequence=ATGTCTTTCTTCTGACAGAAAACTTGCGGAGTTTCCTCAACACCAGTCAATGCTCCAACCCCAACGGGGTGTCCAGCAACTCACTAACGACACCACCCAGAGTCAGCGCTGACCCCACAAGCTCAGCACTCTTCCCGCAGCTGCTCTCCTGCAGACGCCAGTCCCTGCCTCTGGACACCCGTCTTCATTTCTGAACCCCTGCCTACAAACCAGGGACGCCCACACCCTCCTCAAGTTCAATAATGTGGCAGAACTACTCACAGAACTAAGAGAAGCGCTGTGCGCACCGACACCAGCGTATTCTAAAAGATGCGAACAGAC [...]
+chr4-04	EST_Human	nucleotide_match	336531	336753	203.000000	-	.	Target=BM009041.1 268 490 +;percentID=95.5;sequence=GCGCCAACATGGGCCGCGTTCGCACCAAAACCGTGAAGAAGGCGGCCCGGGTCATCATAGAAAAGTACTACACGCGCCTGGGCAACGACTTCCACACGAACAAGCGCGTGTGCGAGGAGATCGCCATTATCCCCAGCAAAAAGCTCCGCAACAAGATAGCAGGTTATGTCACGCATCTGATGAAGCGAATTCAGAGAGGCCCAGTAAGAGGTATCTCCATCAAGCTGCAGGAGGAGGAGAGAGAAAGGAGAGACAATTATGTTCCTGAGGTCTCAGCCTTGGATCAGGAGATTATTGAAGTAGATCCTGACACTAAGGAAATGCTGAAGCTTTTGGACTTCGGCAGTCTGTCCAACCTTCAGGTCACTCAGCCTAC [...]
+chr4-04	EST_Human	nucleotide_match	336536	336754	160.000000	+	.	Target=BI159833.1 8 243 +;percentID=87.8;Gap=M17 D1 M15 I1 M29 I1 M30 I1 M27 I1 M11 I1 M10 I1 M8 I1 M6 I1 M10 I1 M2 I1 M6 I1 M3 I1 M6 I1 M2 I1 M10 I1 M6 I2 M9 I1 M11 ;sequence=GGTCGAGTTTTTTTTTTTGTTTTTCTTGCTGTGGTCCCACAATTTATTGAAAATAATACAGCACTACAGAAAAAAATTCAAACAGGTCCCCGAGGCGTTTGTGAAATTCATCCCAACTGTAGGCTGAGTTGACCTGAAGGTTTGGACAGACGTGCCGAAGTTCCAAAGAGCTTCAGCATTTCTCCTTAGGTGCTCAGGATTCATACTTCAATTAATCTCCTGTGATCCAAGTGTTGAGACCTTCAGGAACAT [...]
+chr4-04	known_cds	mRNA	264464	299110	.	-	.	ID=transcript1;Name=Z95704.2-001
+chr4-04	known_cds	exon	264464	266419	.	-	.	Parent=transcript1
+chr4-04	known_cds	CDS	264888	266419	.	-	2	Parent=transcript1
+chr4-04	known_cds	exon	289227	289322	.	-	.	Parent=transcript1
+chr4-04	known_cds	CDS	289227	289322	.	-	2	Parent=transcript1
+chr4-04	known_cds	exon	289818	289944	.	-	.	Parent=transcript1
+chr4-04	known_cds	CDS	289818	289944	.	-	0	Parent=transcript1
+chr4-04	known_cds	exon	299097	299110	.	-	.	Parent=transcript1
+chr4-04	known_cds	CDS	299097	299099	.	-	0	Parent=transcript1
+chr4-04	ensembl_variation	SNP	358038	358038	.	+	.	Name=rs112781035;variant_sequence=T/C;
+chr4-04	ensembl_variation	insertion	263638	263639	.	+	.	Name=rs111682324;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	358053	358053	.	+	.	Name=rs111267637;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	263649	263649	.	+	.	Name=rs115291458;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	358455	358455	.	+	.	Name=rs6831791;variant_sequence=G/A;
+chr4-04	ensembl_variation	deletion	263651	263652	.	+	.	Name=rs71654578;variant_sequence=AG/-;
+chr4-04	ensembl_variation	SNP	358456	358456	.	+	.	Name=rs79147894;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	263652	263652	.	+	.	Name=rs78782155;variant_sequence=G/A;
+chr4-04	ensembl_variation	insertion	358665	358666	.	+	.	Name=rs72598754;variant_sequence=-/G;
+chr4-04	ensembl_variation	SNP	263804	263804	.	+	.	Name=rs114544910;variant_sequence=C/T;
+chr4-04	ensembl_variation	insertion	358666	358667	.	+	.	Name=rs35953653;variant_sequence=-/G;
+chr4-04	ensembl_variation	SNP	263916	263916	.	+	.	Name=rs116247731;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	358879	358879	.	+	.	Name=rs60333530;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	263969	263969	.	+	.	Name=rs115321593;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	358932	358932	.	+	.	Name=rs56733551;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	263970	263970	.	+	.	Name=rs116766523;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	358988	358988	.	+	.	Name=rs59182798;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	264216	264216	.	+	.	Name=rs13110246;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	359013	359013	.	+	.	Name=rs114311518;variant_sequence=G/C;
+chr4-04	ensembl_variation	insertion	264240	264241	.	+	.	Name=rs71654579;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	359201	359201	.	+	.	Name=rs58835461;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	264241	264241	.	+	.	Name=rs118069740;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	359301	359301	.	+	.	Name=rs79360490;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	264558	264558	.	+	.	Name=rs17775145;variant_sequence=G/A;
+chr4-04	ensembl_variation	deletion	359304	359306	.	+	.	Name=rs77588968;variant_sequence=GTT/-;
+chr4-04	ensembl_variation	SNP	264681	264681	.	+	.	Name=rs77776147;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	264832	264832	.	+	.	Name=rs115469042;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	264941	264941	.	+	.	Name=rs11731285;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	265298	265299	.	+	.	Name=rs34590377;variant_sequence=-/C;
+chr4-04	ensembl_variation	insertion	265300	265301	.	+	.	Name=rs34359434;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	265324	265324	.	+	.	Name=rs61792061;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	265339	265339	.	+	.	Name=rs61792062;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	265341	265341	.	+	.	Name=rs61792063;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	265349	265349	.	+	.	Name=rs61792064;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	265355	265355	.	+	.	Name=rs61792065;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	265359	265359	.	+	.	Name=rs61792066;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	265369	265369	.	+	.	Name=rs61792067;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	265380	265380	.	+	.	Name=rs61792068;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	265387	265387	.	+	.	Name=rs61792069;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	265391	265391	.	+	.	Name=rs61792070;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	265397	265397	.	+	.	Name=rs61792071;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	265399	265399	.	+	.	Name=rs61792072;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	265411	265411	.	+	.	Name=rs61792073;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	265414	265414	.	+	.	Name=rs61792074;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	265427	265427	.	+	.	Name=rs61792075;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	265433	265433	.	+	.	Name=rs61792076;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	265435	265435	.	+	.	Name=rs61792077;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	265437	265437	.	+	.	Name=rs61792078;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	265439	265439	.	+	.	Name=rs61792079;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	265441	265441	.	+	.	Name=rs61792080;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	265444	265444	.	+	.	Name=rs61792081;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	265465	265465	.	+	.	Name=rs61792082;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	265469	265469	.	+	.	Name=rs61792083;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	265479	265479	.	+	.	Name=rs61792084;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	265485	265485	.	+	.	Name=rs61792085;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	265495	265495	.	+	.	Name=rs61792086;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	265500	265500	.	+	.	Name=rs61792087;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	265504	265504	.	+	.	Name=rs61792088;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	265514	265514	.	+	.	Name=rs61792089;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	265519	265519	.	+	.	Name=rs61792090;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	265522	265522	.	+	.	Name=rs61792091;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	265527	265527	.	+	.	Name=rs61792092;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	265536	265536	.	+	.	Name=rs79816310;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	265550	265550	.	+	.	Name=rs61792093;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	265558	265558	.	+	.	Name=rs61792094;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	265563	265563	.	+	.	Name=rs114747783;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	265566	265566	.	+	.	Name=rs61792095;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	265637	265637	.	+	.	Name=rs61597111;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	265743	265743	.	+	.	Name=rs114872625;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	265970	265970	.	+	.	Name=rs61730555;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	266047	266047	.	+	.	Name=rs61730554;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	266124	266124	.	+	.	Name=rs114394748;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	266171	266171	.	+	.	Name=rs115069723;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	266491	266491	.	+	.	Name=rs77771572;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	266659	266659	.	+	.	Name=rs79366248;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	266863	266863	.	+	.	Name=rs4629385;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	267075	267075	.	+	.	Name=rs79767202;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	267076	267076	.	+	.	Name=rs2883231;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	267173	267173	.	+	.	Name=rs76052254;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	267230	267230	.	+	.	Name=rs79263269;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	267232	267232	.	+	.	Name=rs117235891;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	267437	267437	.	+	.	Name=rs78343340;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	267442	267442	.	+	.	Name=rs114536727;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	267511	267511	.	+	.	Name=rs75569198;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	267528	267528	.	+	.	Name=rs73795403;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	267621	267621	.	+	.	Name=rs6811431;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	267634	267634	.	+	.	Name=rs79242577;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	267878	267878	.	+	.	Name=rs115102557;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	267963	267963	.	+	.	Name=rs75849171;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	267968	267968	.	+	.	Name=rs75105190;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	268300	268300	.	+	.	Name=rs78676359;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	268371	268371	.	+	.	Name=rs58641957;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	268580	268580	.	+	.	Name=rs13435268;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	268590	268590	.	+	.	Name=rs73791808;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	268623	268624	.	+	.	Name=rs34079698;variant_sequence=-/G;
+chr4-04	ensembl_variation	SNP	268659	268659	.	+	.	Name=rs73791809;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	268771	268771	.	+	.	Name=rs76605095;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	269041	269041	.	+	.	Name=rs73791811;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	269042	269042	.	+	.	Name=rs7694325;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	269457	269457	.	+	.	Name=rs73213596;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	269477	269477	.	+	.	Name=rs75591813;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	269546	269546	.	+	.	Name=rs116839202;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	269629	269629	.	+	.	Name=rs115946034;variant_sequence=G/A;
+chr4-04	ensembl_variation	deletion	269693	269694	.	+	.	Name=rs113923591;variant_sequence=AG/-;
+chr4-04	ensembl_variation	SNP	270046	270046	.	+	.	Name=rs61192761;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	270058	270058	.	+	.	Name=rs13136187;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	270510	270510	.	+	.	Name=rs116611457;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	270574	270574	.	+	.	Name=rs6824022;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	270656	270656	.	+	.	Name=rs6814846;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	270698	270698	.	+	.	Name=rs6824248;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	270742	270743	.	+	.	Name=rs113777886;variant_sequence=-/AAAAAC;
+chr4-04	ensembl_variation	SNP	270880	270880	.	+	.	Name=rs75684666;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	271072	271072	.	+	.	Name=rs56218479;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	271076	271076	.	+	.	Name=rs73213597;variant_sequence=C/T;
+chr4-04	ensembl_variation	insertion	271391	271392	.	+	.	Name=rs111756381;variant_sequence=-/A;
+chr4-04	ensembl_variation	insertion	271400	271401	.	+	.	Name=rs57017607;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	271580	271580	.	+	.	Name=rs113114939;variant_sequence=A/C;
+chr4-04	ensembl_variation	insertion	271717	271718	.	+	.	Name=rs36014294;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	271755	271755	.	+	.	Name=rs115916539;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	271980	271980	.	+	.	Name=rs79879654;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	272177	272177	.	+	.	Name=rs112899466;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	272456	272456	.	+	.	Name=rs74547440;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	272471	272471	.	+	.	Name=rs80057113;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	272494	272494	.	+	.	Name=rs79897974;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	272520	272520	.	+	.	Name=rs76533221;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	272521	272521	.	+	.	Name=rs76333467;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	272522	272522	.	+	.	Name=rs6837796;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	272523	272523	.	+	.	Name=rs79651239;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	272524	272524	.	+	.	Name=rs11729365;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	272526	272526	.	+	.	Name=rs77511484;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	272528	272528	.	+	.	Name=rs74521993;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	272533	272533	.	+	.	Name=rs74358611;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	272535	272535	.	+	.	Name=rs78139614;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	272548	272548	.	+	.	Name=rs77869118;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	272554	272554	.	+	.	Name=rs75349959;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	272563	272563	.	+	.	Name=rs78652590;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	272565	272565	.	+	.	Name=rs75105672;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	272571	272571	.	+	.	Name=rs75824078;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	272579	272579	.	+	.	Name=rs78345290;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	272600	272600	.	+	.	Name=rs78397384;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	272605	272605	.	+	.	Name=rs76198714;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	272606	272606	.	+	.	Name=rs75041583;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	272621	272621	.	+	.	Name=rs76152366;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	272671	272671	.	+	.	Name=rs115038596;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	272743	272743	.	+	.	Name=rs78746414;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	272777	272777	.	+	.	Name=rs79262119;variant_sequence=T/A;
+chr4-04	ensembl_variation	insertion	272925	272926	.	+	.	Name=rs111326176;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	273157	273157	.	+	.	Name=rs11733683;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	273217	273217	.	+	.	Name=rs111551744;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	273246	273247	.	+	.	Name=rs71166804;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	273314	273314	.	+	.	Name=rs113970876;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	273476	273476	.	+	.	Name=rs6815868;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	273576	273576	.	+	.	Name=rs116671481;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	273872	273872	.	+	.	Name=rs114250682;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	273875	273875	.	+	.	Name=rs76980245;variant_sequence=A/T;
+chr4-04	ensembl_variation	insertion	273881	273882	.	+	.	Name=rs35971123;variant_sequence=-/ATAA;
+chr4-04	ensembl_variation	SNP	273882	273882	.	+	.	Name=rs117802913;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	273969	273969	.	+	.	Name=rs79516104;variant_sequence=A/G;
+chr4-04	ensembl_variation	deletion	274008	274009	.	+	.	Name=rs112737400;variant_sequence=AC/-;
+chr4-04	ensembl_variation	insertion	274083	274084	.	+	.	Name=rs112052577;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	274084	274084	.	+	.	Name=rs76583286;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	274097	274098	.	+	.	Name=rs59901961;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	274120	274120	.	+	.	Name=rs56217474;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	274287	274287	.	+	.	Name=rs113652207;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	274394	274394	.	+	.	Name=rs56023157;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	274492	274492	.	+	.	Name=rs114234114;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	274493	274493	.	+	.	Name=rs111711081;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	274728	274728	.	+	.	Name=rs116524627;variant_sequence=G/A;
+chr4-04	ensembl_variation	deletion	274752	274753	.	+	.	Name=rs72495105;variant_sequence=CA/-;
+chr4-04	ensembl_variation	SNP	274910	274910	.	+	.	Name=rs116067225;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	274943	274943	.	+	.	Name=rs77762064;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	275116	275116	.	+	.	Name=rs2353602;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	275207	275207	.	+	.	Name=rs56327123;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	275229	275229	.	+	.	Name=rs79295381;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	275234	275234	.	+	.	Name=rs76166839;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	275238	275238	.	+	.	Name=rs78490597;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	275251	275251	.	+	.	Name=rs79208974;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	275418	275418	.	+	.	Name=rs115129711;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	275599	275599	.	+	.	Name=rs28616744;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	275744	275744	.	+	.	Name=rs115932953;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	275870	275870	.	+	.	Name=rs78697570;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	275902	275902	.	+	.	Name=rs6810785;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	276449	276449	.	+	.	Name=rs74570414;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	276696	276696	.	+	.	Name=rs73791813;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	276765	276765	.	+	.	Name=rs11722521;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	276983	276983	.	+	.	Name=rs11723615;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	277057	277057	.	+	.	Name=rs7665727;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	277173	277173	.	+	.	Name=rs73217569;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	277356	277356	.	+	.	Name=rs79991484;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	277481	277481	.	+	.	Name=rs75314292;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	277739	277739	.	+	.	Name=rs113847214;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	277748	277748	.	+	.	Name=rs6843821;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	277924	277924	.	+	.	Name=rs74675982;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	277955	277955	.	+	.	Name=rs6814967;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	278063	278063	.	+	.	Name=rs73064337;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	278095	278095	.	+	.	Name=rs77279928;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	278196	278196	.	+	.	Name=rs9328738;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	278326	278326	.	+	.	Name=rs13327936;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	278380	278380	.	+	.	Name=rs78833908;variant_sequence=T/C;
+chr4-04	ensembl_variation	insertion	278627	278628	.	+	.	Name=rs71654580;variant_sequence=-/T;
+chr4-04	ensembl_variation	SNP	278680	278680	.	+	.	Name=rs12719767;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	278849	278849	.	+	.	Name=rs76862729;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	278915	278915	.	+	.	Name=rs73791814;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	279086	279086	.	+	.	Name=rs114676750;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	279226	279226	.	+	.	Name=rs118183222;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	279396	279396	.	+	.	Name=rs10002733;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	280006	280006	.	+	.	Name=rs111484673;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	280353	280353	.	+	.	Name=rs7697560;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	280426	280426	.	+	.	Name=rs2353599;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	280496	280496	.	+	.	Name=rs4438712;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	281028	281028	.	+	.	Name=rs116669208;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	281038	281038	.	+	.	Name=rs10023604;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	281408	281408	.	+	.	Name=rs116529450;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	281440	281440	.	+	.	Name=rs73217572;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	281442	281442	.	+	.	Name=rs13112393;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	281649	281649	.	+	.	Name=rs61792096;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	281707	281707	.	+	.	Name=rs11722197;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	281746	281747	.	+	.	Name=rs35663095;variant_sequence=-/T;
+chr4-04	ensembl_variation	SNP	281994	281994	.	+	.	Name=rs114334217;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	282006	282006	.	+	.	Name=rs6820547;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	282046	282046	.	+	.	Name=rs6826459;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	282160	282160	.	+	.	Name=rs66712247;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	282499	282499	.	+	.	Name=rs11723261;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	282528	282528	.	+	.	Name=rs113987817;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	282608	282608	.	+	.	Name=rs10027325;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	282633	282633	.	+	.	Name=rs61792097;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	282668	282668	.	+	.	Name=rs116753444;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	282909	282909	.	+	.	Name=rs114784277;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	283037	283037	.	+	.	Name=rs78207271;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	283041	283041	.	+	.	Name=rs78342895;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	283076	283076	.	+	.	Name=rs113509731;variant_sequence=T/C;
+chr4-04	ensembl_variation	deletion	283084	283085	.	+	.	Name=rs3047214;variant_sequence=CT/-;
+chr4-04	ensembl_variation	SNP	283118	283118	.	+	.	Name=rs1986557;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	283353	283353	.	+	.	Name=rs13120331;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	283355	283355	.	+	.	Name=rs13120332;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	283395	283395	.	+	.	Name=rs13126833;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	283404	283404	.	+	.	Name=rs13120513;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	283538	283538	.	+	.	Name=rs13110510;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	283652	283652	.	+	.	Name=rs58644592;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	283694	283694	.	+	.	Name=rs74325388;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	283767	283767	.	+	.	Name=rs114055282;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	283883	283883	.	+	.	Name=rs13111233;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	284122	284122	.	+	.	Name=rs73791815;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	284201	284201	.	+	.	Name=rs73791816;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	284604	284604	.	+	.	Name=rs75349991;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	284653	284653	.	+	.	Name=rs73791817;variant_sequence=G/A;
+chr4-04	ensembl_variation	insertion	284857	284858	.	+	.	Name=rs34876350;variant_sequence=-/T;
+chr4-04	ensembl_variation	SNP	284884	284884	.	+	.	Name=rs6841950;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	284956	284956	.	+	.	Name=rs6855867;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	285053	285053	.	+	.	Name=rs77807218;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	285548	285548	.	+	.	Name=rs6832556;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	285893	285893	.	+	.	Name=rs73791818;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	285984	285984	.	+	.	Name=rs73791819;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	286344	286344	.	+	.	Name=rs57092574;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	286395	286395	.	+	.	Name=rs59106553;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	286600	286600	.	+	.	Name=rs56229296;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	286676	286676	.	+	.	Name=rs10428380;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	286677	286677	.	+	.	Name=rs61792098;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	286678	286678	.	+	.	Name=rs10428381;variant_sequence=A/C;
+chr4-04	ensembl_variation	deletion	286707	286707	.	+	.	Name=rs34118991;variant_sequence=A/-;
+chr4-04	ensembl_variation	SNP	286709	286709	.	+	.	Name=rs78205493;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	286712	286712	.	+	.	Name=rs61792099;variant_sequence=C/A;
+chr4-04	ensembl_variation	deletion	286768	286768	.	+	.	Name=rs111452322;variant_sequence=A/-;
+chr4-04	ensembl_variation	SNP	286823	286823	.	+	.	Name=rs13133253;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	286824	286824	.	+	.	Name=rs13149604;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	286970	286970	.	+	.	Name=rs28411935;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	287046	287046	.	+	.	Name=rs28784663;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	287141	287141	.	+	.	Name=rs59163505;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	287649	287649	.	+	.	Name=rs12506277;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	287664	287664	.	+	.	Name=rs12505343;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	287846	287846	.	+	.	Name=rs74996354;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	288012	288012	.	+	.	Name=rs79405074;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	288074	288074	.	+	.	Name=rs12501727;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	288284	288284	.	+	.	Name=rs28498753;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	288309	288309	.	+	.	Name=rs116752037;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	288697	288697	.	+	.	Name=rs55711923;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	288786	288786	.	+	.	Name=rs116635147;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	288787	288787	.	+	.	Name=rs118058299;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	288793	288793	.	+	.	Name=rs75532834;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	288799	288799	.	+	.	Name=rs75833793;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	288803	288803	.	+	.	Name=rs79718948;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	288809	288809	.	+	.	Name=rs78732596;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	288816	288816	.	+	.	Name=rs76212162;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	288829	288829	.	+	.	Name=rs76100058;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	288845	288845	.	+	.	Name=rs76162446;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	288853	288853	.	+	.	Name=rs76652139;variant_sequence=G/A;
+chr4-04	ensembl_variation	insertion	288868	288869	.	+	.	Name=rs59264418;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	288870	288870	.	+	.	Name=rs79212688;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	288875	288875	.	+	.	Name=rs79318474;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	288877	288877	.	+	.	Name=rs77194027;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	288893	288893	.	+	.	Name=rs76758124;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	288895	288895	.	+	.	Name=rs80331174;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	288899	288899	.	+	.	Name=rs74338602;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	288922	288922	.	+	.	Name=rs77462754;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	288925	288925	.	+	.	Name=rs78318185;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	288930	288930	.	+	.	Name=rs74906145;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	288932	288932	.	+	.	Name=rs74708111;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	288936	288936	.	+	.	Name=rs77287525;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	288968	288968	.	+	.	Name=rs77927389;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	288974	288974	.	+	.	Name=rs78043905;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	288976	288976	.	+	.	Name=rs79280619;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	288977	288977	.	+	.	Name=rs75233992;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	288981	288981	.	+	.	Name=rs74658891;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	288982	288982	.	+	.	Name=rs79723991;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	288996	288996	.	+	.	Name=rs77103782;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	289001	289001	.	+	.	Name=rs75039624;variant_sequence=T/A;
+chr4-04	ensembl_variation	insertion	289006	289007	.	+	.	Name=rs34182736;variant_sequence=-/C;
+chr4-04	ensembl_variation	insertion	289018	289019	.	+	.	Name=rs35350742;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	289034	289034	.	+	.	Name=rs79931657;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	289040	289040	.	+	.	Name=rs76221862;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	289046	289046	.	+	.	Name=rs111551553;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	289058	289058	.	+	.	Name=rs77014946;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	289068	289068	.	+	.	Name=rs112921104;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	289139	289139	.	+	.	Name=rs61792114;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	289213	289213	.	+	.	Name=rs13118678;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	289244	289244	.	+	.	Name=rs112253195;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	289272	289272	.	+	.	Name=rs112132883;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	289488	289488	.	+	.	Name=rs74686788;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	289490	289490	.	+	.	Name=rs76324531;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	289560	289560	.	+	.	Name=rs78205047;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	289649	289649	.	+	.	Name=rs115426268;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	289835	289835	.	+	.	Name=rs114239297;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	289877	289877	.	+	.	Name=rs62619793;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	290284	290284	.	+	.	Name=rs61792115;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	290322	290322	.	+	.	Name=rs77503766;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	290381	290381	.	+	.	Name=rs7654568;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	290641	290641	.	+	.	Name=rs78355952;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	290914	290914	.	+	.	Name=rs2352936;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	290925	290925	.	+	.	Name=rs113238980;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	291039	291039	.	+	.	Name=rs73217573;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	291053	291053	.	+	.	Name=rs77223069;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	291086	291086	.	+	.	Name=rs77380000;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	291328	291328	.	+	.	Name=rs35130395;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	291397	291397	.	+	.	Name=rs6846655;variant_sequence=A/T;
+chr4-04	ensembl_variation	deletion	291420	291421	.	+	.	Name=rs60725655;variant_sequence=AA/-;
+chr4-04	ensembl_variation	SNP	291421	291421	.	+	.	Name=rs76782413;variant_sequence=A/C;
+chr4-04	ensembl_variation	deletion	291421	291421	.	+	.	Name=rs57681246;variant_sequence=A/-;
+chr4-04	ensembl_variation	SNP	291662	291662	.	+	.	Name=rs2352935;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	291759	291759	.	+	.	Name=rs10003142;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	291950	291950	.	+	.	Name=rs9994510;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	291959	291959	.	+	.	Name=rs116809879;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	291969	291969	.	+	.	Name=rs75991748;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	292000	292000	.	+	.	Name=rs114428980;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	292001	292001	.	+	.	Name=rs10005733;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	292007	292007	.	+	.	Name=rs76099983;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	292067	292067	.	+	.	Name=rs76572209;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	292085	292085	.	+	.	Name=rs75658930;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	292104	292104	.	+	.	Name=rs75819259;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	292127	292127	.	+	.	Name=rs77790028;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	292189	292189	.	+	.	Name=rs113056980;variant_sequence=C/T;
+chr4-04	ensembl_variation	deletion	292203	292203	.	+	.	Name=rs113693845;variant_sequence=C/-;
+chr4-04	ensembl_variation	SNP	292235	292235	.	+	.	Name=rs78686789;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	292242	292242	.	+	.	Name=rs75639235;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	292310	292310	.	+	.	Name=rs74491581;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	292331	292331	.	+	.	Name=rs115789757;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	292369	292369	.	+	.	Name=rs11723803;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	292388	292388	.	+	.	Name=rs73791820;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	292486	292486	.	+	.	Name=rs73791821;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	292668	292668	.	+	.	Name=rs12503543;variant_sequence=C/T;
+chr4-04	ensembl_variation	insertion	292851	292852	.	+	.	Name=rs35105663;variant_sequence=-/G;
+chr4-04	ensembl_variation	SNP	292938	292938	.	+	.	Name=rs76541352;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	293171	293171	.	+	.	Name=rs114109973;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	293226	293226	.	+	.	Name=rs7655058;variant_sequence=A/G;
+chr4-04	ensembl_variation	deletion	293230	293231	.	+	.	Name=rs34906622;variant_sequence=AT/-;
+chr4-04	ensembl_variation	insertion	293251	293252	.	+	.	Name=rs35866088;variant_sequence=-/TA;
+chr4-04	ensembl_variation	insertion	293262	293263	.	+	.	Name=rs61392588;variant_sequence=-/TA;
+chr4-04	ensembl_variation	SNP	293271	293271	.	+	.	Name=rs112663915;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	293417	293417	.	+	.	Name=rs113125124;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	293735	293735	.	+	.	Name=rs113135022;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	293796	293796	.	+	.	Name=rs75049882;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	293865	293865	.	+	.	Name=rs117321689;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	293926	293926	.	+	.	Name=rs74282718;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	294017	294017	.	+	.	Name=rs6856961;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	294018	294018	.	+	.	Name=rs28787332;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	294113	294113	.	+	.	Name=rs4401407;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	294196	294196	.	+	.	Name=rs112043870;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	294263	294263	.	+	.	Name=rs13110091;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	294264	294264	.	+	.	Name=rs77249364;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	294286	294286	.	+	.	Name=rs114659363;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	294335	294335	.	+	.	Name=rs76028337;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	294349	294349	.	+	.	Name=rs77928010;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	294394	294394	.	+	.	Name=rs114696014;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	294397	294397	.	+	.	Name=rs116057011;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	294398	294398	.	+	.	Name=rs115476119;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	294410	294410	.	+	.	Name=rs116128125;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	294422	294422	.	+	.	Name=rs114643969;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	294424	294424	.	+	.	Name=rs115678115;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	294442	294442	.	+	.	Name=rs116157903;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	294444	294444	.	+	.	Name=rs114873384;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	294508	294508	.	+	.	Name=rs112870397;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	294529	294529	.	+	.	Name=rs114001772;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	295525	295526	.	+	.	Name=rs35984540;variant_sequence=-/G;
+chr4-04	ensembl_variation	SNP	295912	295912	.	+	.	Name=rs116435429;variant_sequence=T/C;
+chr4-04	ensembl_variation	insertion	296040	296041	.	+	.	Name=rs113397472;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	296170	296170	.	+	.	Name=rs115869462;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	296274	296274	.	+	.	Name=rs114674955;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	296447	296447	.	+	.	Name=rs112095322;variant_sequence=T/C;
+chr4-04	ensembl_variation	insertion	296943	296944	.	+	.	Name=rs35602170;variant_sequence=-/A;
+chr4-04	ensembl_variation	insertion	296956	296957	.	+	.	Name=rs35409469;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	297077	297077	.	+	.	Name=rs111677123;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	297525	297525	.	+	.	Name=rs12505835;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	297529	297529	.	+	.	Name=rs79627729;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	297547	297547	.	+	.	Name=rs12511388;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	297557	297557	.	+	.	Name=rs112408556;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	297686	297686	.	+	.	Name=rs78153223;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	297812	297813	.	+	.	Name=rs35894346;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	297893	297893	.	+	.	Name=rs74635655;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	297915	297915	.	+	.	Name=rs77149905;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	297932	297932	.	+	.	Name=rs2352927;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	297989	297989	.	+	.	Name=rs2352928;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	298080	298080	.	+	.	Name=rs4373108;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	298094	298094	.	+	.	Name=rs4417915;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	298338	298338	.	+	.	Name=rs11730801;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	298364	298364	.	+	.	Name=rs75390499;variant_sequence=C/T;
+chr4-04	ensembl_variation	insertion	298364	298365	.	+	.	Name=rs71166805;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	298373	298373	.	+	.	Name=rs7660634;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	298772	298772	.	+	.	Name=rs7661412;variant_sequence=G/A;
+chr4-04	ensembl_variation	deletion	298931	298931	.	+	.	Name=rs34512845;variant_sequence=T/-;
+chr4-04	ensembl_variation	SNP	299178	299178	.	+	.	Name=rs10019188;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	299259	299259	.	+	.	Name=rs6852858;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	299261	299261	.	+	.	Name=rs79657896;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	299271	299271	.	+	.	Name=rs116560731;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	299364	299364	.	+	.	Name=rs115951453;variant_sequence=T/C;
+chr4-04	ensembl_variation	deletion	299601	299603	.	+	.	Name=rs35887445;variant_sequence=AAT/-;
+chr4-04	ensembl_variation	SNP	299746	299746	.	+	.	Name=rs76135225;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	299778	299778	.	+	.	Name=rs73791822;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	299964	299964	.	+	.	Name=rs12512676;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	300235	300235	.	+	.	Name=rs114556916;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	300407	300407	.	+	.	Name=rs78640123;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	300442	300442	.	+	.	Name=rs79902242;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	300501	300501	.	+	.	Name=rs115429563;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	300647	300647	.	+	.	Name=rs10014959;variant_sequence=C/A;
+chr4-04	ensembl_variation	deletion	300773	300773	.	+	.	Name=rs34548090;variant_sequence=G/-;
+chr4-04	ensembl_variation	SNP	300795	300795	.	+	.	Name=rs10019453;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	300831	300831	.	+	.	Name=rs115080519;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	301077	301077	.	+	.	Name=rs61792116;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	301272	301272	.	+	.	Name=rs111874231;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	301574	301574	.	+	.	Name=rs115723820;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	301595	301595	.	+	.	Name=rs116821973;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	301720	301720	.	+	.	Name=rs111833408;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	301773	301773	.	+	.	Name=rs61792117;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	301774	301774	.	+	.	Name=rs1986866;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	302008	302008	.	+	.	Name=rs4129956;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	302136	302136	.	+	.	Name=rs28863627;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	302226	302226	.	+	.	Name=rs11729208;variant_sequence=G/A;
+chr4-04	ensembl_variation	deletion	302421	302421	.	+	.	Name=rs112492846;variant_sequence=T/-;
+chr4-04	ensembl_variation	insertion	302434	302435	.	+	.	Name=rs59966100;variant_sequence=-/T;
+chr4-04	ensembl_variation	SNP	302574	302574	.	+	.	Name=rs117549951;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	302664	302664	.	+	.	Name=rs113743932;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	302726	302726	.	+	.	Name=rs10012510;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	302791	302791	.	+	.	Name=rs116734627;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	302820	302820	.	+	.	Name=rs11732707;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	302849	302849	.	+	.	Name=rs114157292;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	302857	302857	.	+	.	Name=rs115119741;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	302934	302934	.	+	.	Name=rs6828802;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	303059	303059	.	+	.	Name=rs79005758;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	303303	303303	.	+	.	Name=rs116439516;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	303443	303443	.	+	.	Name=rs77848190;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	303493	303493	.	+	.	Name=rs114568657;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	303609	303609	.	+	.	Name=rs113641721;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	304003	304003	.	+	.	Name=rs118148467;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	304008	304008	.	+	.	Name=rs116850815;variant_sequence=G/C;
+chr4-04	ensembl_variation	deletion	304262	304264	.	+	.	Name=rs75640186;variant_sequence=CCA/-;
+chr4-04	ensembl_variation	SNP	304388	304388	.	+	.	Name=rs77782115;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	304649	304649	.	+	.	Name=rs7439780;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	305287	305287	.	+	.	Name=rs115791032;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	305291	305291	.	+	.	Name=rs10034550;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	305514	305515	.	+	.	Name=rs35820483;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	305932	305932	.	+	.	Name=rs113109546;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	306092	306092	.	+	.	Name=rs75589822;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	306196	306196	.	+	.	Name=rs112823067;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	306541	306541	.	+	.	Name=rs113283879;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	306661	306661	.	+	.	Name=rs113261074;variant_sequence=G/A;
+chr4-04	ensembl_variation	insertion	306732	306733	.	+	.	Name=rs55700348;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	306855	306855	.	+	.	Name=rs80171987;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	307094	307094	.	+	.	Name=rs6822366;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	307307	307307	.	+	.	Name=rs6828943;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	307369	307369	.	+	.	Name=rs116835805;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	307433	307433	.	+	.	Name=rs13434593;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	307622	307623	.	+	.	Name=rs34524149;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	307707	307707	.	+	.	Name=rs75026280;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	307710	307710	.	+	.	Name=rs79151868;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	307710	307711	.	+	.	Name=rs77347601;variant_sequence=-/AAG;
+chr4-04	ensembl_variation	insertion	307718	307719	.	+	.	Name=rs72598751;variant_sequence=-/AAG;
+chr4-04	ensembl_variation	insertion	307719	307720	.	+	.	Name=rs34024398;variant_sequence=-/AAG;
+chr4-04	ensembl_variation	SNP	307720	307720	.	+	.	Name=rs111794249;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	307721	307721	.	+	.	Name=rs111372533;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	307722	307722	.	+	.	Name=rs114503066;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	307723	307723	.	+	.	Name=rs61792118;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	307725	307725	.	+	.	Name=rs115416518;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	307805	307805	.	+	.	Name=rs80124885;variant_sequence=T/A;
+chr4-04	ensembl_variation	insertion	307854	307855	.	+	.	Name=rs34349366;variant_sequence=-/A;
+chr4-04	ensembl_variation	insertion	307985	307986	.	+	.	Name=rs58082865;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	308010	308010	.	+	.	Name=rs6848983;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	308068	308068	.	+	.	Name=rs76841021;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	308152	308152	.	+	.	Name=rs113058803;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	308154	308154	.	+	.	Name=rs78352775;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	308499	308499	.	+	.	Name=rs13434802;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	308549	308549	.	+	.	Name=rs78627900;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	308596	308596	.	-	.	Name=rs80261151;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	308962	308962	.	+	.	Name=rs78296438;variant_sequence=C/T;
+chr4-04	ensembl_variation	sequence_alteration	309253	309253	.	+	.	Name=rs7669892;variant_sequence=C/A/G;
+chr4-04	ensembl_variation	SNP	309258	309258	.	+	.	Name=rs111456805;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	309558	309558	.	+	.	Name=rs10005699;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	309686	309686	.	+	.	Name=rs7685662;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	309727	309727	.	+	.	Name=rs115057862;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	309800	309800	.	+	.	Name=rs61587838;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	309903	309903	.	+	.	Name=rs11248012;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	310033	310033	.	+	.	Name=rs79743945;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	310044	310044	.	+	.	Name=rs111938627;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	310283	310283	.	+	.	Name=rs4690251;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	310297	310297	.	+	.	Name=rs115915074;variant_sequence=G/A;
+chr4-04	ensembl_variation	insertion	310378	310379	.	+	.	Name=rs35995816;variant_sequence=-/C;
+chr4-04	ensembl_variation	deletion	310384	310384	.	+	.	Name=rs34668634;variant_sequence=G/-;
+chr4-04	ensembl_variation	SNP	310384	310384	.	+	.	Name=rs74921165;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	310488	310488	.	+	.	Name=rs73791826;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	310670	310670	.	+	.	Name=rs115756802;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	310691	310691	.	+	.	Name=rs10021364;variant_sequence=T/C;
+chr4-04	ensembl_variation	insertion	311030	311031	.	+	.	Name=rs34750316;variant_sequence=-/G;
+chr4-04	ensembl_variation	insertion	311038	311039	.	+	.	Name=rs35476693;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	311039	311039	.	+	.	Name=rs56011643;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	311425	311425	.	+	.	Name=rs11248013;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	311487	311487	.	+	.	Name=rs56275185;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	311801	311801	.	+	.	Name=rs113103124;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	311857	311857	.	+	.	Name=rs28372409;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	312061	312061	.	+	.	Name=rs114212536;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	312137	312137	.	+	.	Name=rs116298770;variant_sequence=T/G;
+chr4-04	ensembl_variation	insertion	312178	312179	.	+	.	Name=rs33943278;variant_sequence=-/T;
+chr4-04	ensembl_variation	insertion	312189	312190	.	+	.	Name=rs34195785;variant_sequence=-/T;
+chr4-04	ensembl_variation	insertion	312198	312199	.	+	.	Name=rs58342775;variant_sequence=-/T;
+chr4-04	ensembl_variation	SNP	312665	312665	.	+	.	Name=rs4374577;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	312920	312920	.	+	.	Name=rs76219687;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	312950	312950	.	+	.	Name=rs71602458;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	312953	312953	.	+	.	Name=rs115547082;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	313003	313003	.	+	.	Name=rs111938647;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	313947	313947	.	+	.	Name=rs17718976;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	314108	314108	.	+	.	Name=rs80303103;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	314208	314208	.	+	.	Name=rs77792255;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	314210	314210	.	+	.	Name=rs113601353;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	314362	314362	.	+	.	Name=rs114942228;variant_sequence=C/T;
+chr4-04	ensembl_variation	insertion	314439	314440	.	+	.	Name=rs35701209;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	314539	314539	.	+	.	Name=rs11731415;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	314541	314541	.	+	.	Name=rs111321884;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	314849	314849	.	+	.	Name=rs28441553;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	315279	315279	.	+	.	Name=rs73791827;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	315673	315673	.	+	.	Name=rs6847267;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	315805	315805	.	+	.	Name=rs113858749;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	315890	315890	.	+	.	Name=rs116611682;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	315911	315911	.	+	.	Name=rs79784952;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	316162	316162	.	+	.	Name=rs2001947;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	316377	316377	.	+	.	Name=rs113252687;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	316378	316378	.	+	.	Name=rs112644506;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	316379	316379	.	+	.	Name=rs111893160;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	316729	316729	.	+	.	Name=rs80298182;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	316923	316923	.	+	.	Name=rs78692002;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	316927	316927	.	+	.	Name=rs79600249;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	317690	317690	.	+	.	Name=rs113988940;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	317691	317691	.	+	.	Name=rs28752043;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	317726	317727	.	+	.	Name=rs35042441;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	317756	317756	.	+	.	Name=rs76913492;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	318058	318058	.	+	.	Name=rs79291724;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	318196	318196	.	+	.	Name=rs73217578;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	318269	318269	.	+	.	Name=rs115720072;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	318273	318273	.	+	.	Name=rs7661700;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	318274	318274	.	+	.	Name=rs6847881;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	318275	318275	.	+	.	Name=rs6818538;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	318359	318359	.	+	.	Name=rs61792119;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	318364	318364	.	+	.	Name=rs13110321;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	318532	318532	.	+	.	Name=rs113880905;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	318536	318536	.	+	.	Name=rs77098660;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	318549	318549	.	+	.	Name=rs13120968;variant_sequence=A/C;
+chr4-04	ensembl_variation	deletion	318549	318549	.	+	.	Name=rs59164415;variant_sequence=A/-;
+chr4-04	ensembl_variation	SNP	318550	318550	.	+	.	Name=rs13110777;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	318556	318556	.	+	.	Name=rs113670149;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	318760	318760	.	+	.	Name=rs57380154;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	319105	319105	.	+	.	Name=rs113386709;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	319121	319121	.	+	.	Name=rs113921175;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	319123	319123	.	+	.	Name=rs79056760;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	319125	319125	.	+	.	Name=rs77386963;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	319208	319208	.	+	.	Name=rs10033213;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	319553	319553	.	+	.	Name=rs73217579;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	319689	319689	.	+	.	Name=rs59071324;variant_sequence=A/G;
+chr4-04	ensembl_variation	deletion	319773	319773	.	+	.	Name=rs111444295;variant_sequence=T/-;
+chr4-04	ensembl_variation	SNP	319787	319787	.	+	.	Name=rs77253907;variant_sequence=T/G;
+chr4-04	ensembl_variation	deletion	319788	319788	.	+	.	Name=rs71166806;variant_sequence=T/-;
+chr4-04	ensembl_variation	SNP	320059	320059	.	+	.	Name=rs58102171;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	320411	320411	.	+	.	Name=rs115396080;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	320461	320461	.	+	.	Name=rs73217581;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	320464	320464	.	+	.	Name=rs73217582;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	320481	320481	.	+	.	Name=rs116547041;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	320595	320595	.	+	.	Name=rs115894987;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	320667	320667	.	+	.	Name=rs76112048;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	320696	320696	.	+	.	Name=rs79929361;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	320771	320771	.	+	.	Name=rs60533229;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	320897	320897	.	+	.	Name=rs60869410;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	320934	320934	.	+	.	Name=rs28849156;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	320997	320997	.	+	.	Name=rs113388729;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	321077	321077	.	+	.	Name=rs117139226;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	321415	321415	.	+	.	Name=rs73217583;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	321731	321731	.	+	.	Name=rs113847733;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	321825	321825	.	+	.	Name=rs118076268;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	321902	321902	.	+	.	Name=rs11946825;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	321929	321929	.	+	.	Name=rs73791830;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	321960	321960	.	+	.	Name=rs114639949;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	322026	322026	.	+	.	Name=rs11947752;variant_sequence=C/T;
+chr4-04	ensembl_variation	deletion	322051	322053	.	+	.	Name=rs79443965;variant_sequence=AGC/-;
+chr4-04	ensembl_variation	SNP	322080	322080	.	+	.	Name=rs61792120;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	322223	322223	.	+	.	Name=rs77034783;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	322352	322352	.	+	.	Name=rs114122353;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	322359	322359	.	+	.	Name=rs75081609;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	322515	322515	.	+	.	Name=rs75039103;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	322521	322521	.	+	.	Name=rs76235782;variant_sequence=A/T;
+chr4-04	ensembl_variation	sequence_alteration	322726	322726	.	+	.	Name=rs56182615;variant_sequence=C/T/G;
+chr4-04	ensembl_variation	SNP	322759	322759	.	+	.	Name=rs73217585;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	322787	322787	.	+	.	Name=rs57257197;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	322810	322810	.	+	.	Name=rs73064352;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	322814	322814	.	+	.	Name=rs115106197;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	322931	322931	.	+	.	Name=rs59194971;variant_sequence=C/T;
+chr4-04	ensembl_variation	insertion	322943	322944	.	+	.	Name=rs77039116;variant_sequence=-/TTGAGTCA;
+chr4-04	ensembl_variation	SNP	322946	322946	.	+	.	Name=rs114685629;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	322956	322956	.	+	.	Name=rs11929868;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	322990	322990	.	+	.	Name=rs73064354;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	323003	323003	.	+	.	Name=rs76467771;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	323327	323327	.	+	.	Name=rs59419008;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	323331	323331	.	+	.	Name=rs112256327;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	323335	323335	.	+	.	Name=rs59883453;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	323339	323339	.	+	.	Name=rs61520487;variant_sequence=C/T;
+chr4-04	ensembl_variation	deletion	323339	323340	.	+	.	Name=rs35906781;variant_sequence=CA/-;
+chr4-04	ensembl_variation	deletion	323339	323342	.	+	.	Name=rs60219376;variant_sequence=CATA/-;
+chr4-04	ensembl_variation	deletion	323357	323358	.	+	.	Name=rs35228659;variant_sequence=TA/-;
+chr4-04	ensembl_variation	insertion	323358	323359	.	+	.	Name=rs57380674;variant_sequence=-/TA;
+chr4-04	ensembl_variation	SNP	323404	323404	.	+	.	Name=rs73064356;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	323406	323406	.	+	.	Name=rs79704925;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	323463	323463	.	+	.	Name=rs112448993;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	323474	323474	.	+	.	Name=rs56678228;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	323586	323586	.	+	.	Name=rs114449464;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	323689	323689	.	+	.	Name=rs116533437;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	323746	323746	.	+	.	Name=rs61792122;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	323886	323886	.	+	.	Name=rs12640520;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	323953	323953	.	+	.	Name=rs114158562;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	323954	323954	.	+	.	Name=rs112695261;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	324069	324069	.	+	.	Name=rs75268814;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	324071	324071	.	+	.	Name=rs76585603;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	324242	324243	.	+	.	Name=rs58570103;variant_sequence=-/AAT;
+chr4-04	ensembl_variation	SNP	324335	324335	.	+	.	Name=rs116460974;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	324337	324337	.	+	.	Name=rs6839107;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	324435	324435	.	+	.	Name=rs6853199;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	324719	324719	.	+	.	Name=rs115372345;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	324747	324747	.	+	.	Name=rs116073575;variant_sequence=C/T;
+chr4-04	ensembl_variation	insertion	324766	324767	.	+	.	Name=rs35252169;variant_sequence=-/TTT;
+chr4-04	ensembl_variation	SNP	325036	325036	.	+	.	Name=rs73217587;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	325079	325079	.	+	.	Name=rs7654234;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	325097	325097	.	+	.	Name=rs114779353;variant_sequence=C/T;
+chr4-04	ensembl_variation	deletion	325097	325097	.	+	.	Name=rs34822758;variant_sequence=C/-;
+chr4-04	ensembl_variation	SNP	325127	325127	.	+	.	Name=rs75843656;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	325317	325317	.	+	.	Name=rs115520686;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	325406	325406	.	+	.	Name=rs112979686;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	325470	325470	.	+	.	Name=rs112880788;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	325883	325883	.	+	.	Name=rs61792123;variant_sequence=A/C;
+chr4-04	ensembl_variation	insertion	325944	325945	.	+	.	Name=rs34701336;variant_sequence=-/T;
+chr4-04	ensembl_variation	SNP	325980	325980	.	+	.	Name=rs7655981;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	325992	325992	.	+	.	Name=rs7689416;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	326146	326146	.	+	.	Name=rs13129786;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	326256	326256	.	+	.	Name=rs6846653;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	326475	326475	.	+	.	Name=rs6853198;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	326493	326493	.	+	.	Name=rs6837456;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	326508	326508	.	+	.	Name=rs6847222;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	326803	326803	.	+	.	Name=rs73217589;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	326806	326806	.	+	.	Name=rs13110772;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	326881	326881	.	+	.	Name=rs112983012;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	326904	326904	.	+	.	Name=rs112300904;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	326936	326936	.	+	.	Name=rs112465689;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	326944	326944	.	+	.	Name=rs111641016;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	327198	327198	.	+	.	Name=rs61792124;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	327227	327227	.	+	.	Name=rs115915710;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	327353	327353	.	+	.	Name=rs13137548;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	327380	327380	.	+	.	Name=rs61792125;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	327504	327504	.	+	.	Name=rs7655080;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	327659	327659	.	+	.	Name=rs11936209;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	327804	327804	.	+	.	Name=rs76457459;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	328019	328019	.	+	.	Name=rs76445368;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	328044	328044	.	+	.	Name=rs78730328;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	328421	328421	.	+	.	Name=rs58094550;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	328480	328480	.	+	.	Name=rs61431967;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	328492	328492	.	+	.	Name=rs58361877;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	328509	328509	.	+	.	Name=rs112625818;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	328511	328511	.	+	.	Name=rs58145935;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	328556	328556	.	+	.	Name=rs112101530;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	328697	328697	.	+	.	Name=rs58020250;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	328767	328767	.	+	.	Name=rs59806409;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	328812	328812	.	+	.	Name=rs114353359;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	328821	328821	.	+	.	Name=rs73792140;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	328906	328906	.	+	.	Name=rs61792130;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	329042	329042	.	+	.	Name=rs73217597;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	329062	329062	.	+	.	Name=rs116230769;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	329136	329136	.	+	.	Name=rs115432903;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	329432	329432	.	+	.	Name=rs73792142;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	329501	329501	.	+	.	Name=rs3762866;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	329686	329686	.	+	.	Name=rs3762867;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	329821	329821	.	+	.	Name=rs116873815;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	330114	330114	.	+	.	Name=rs73064371;variant_sequence=C/T;
+chr4-04	ensembl_variation	deletion	330181	330181	.	+	.	Name=rs111227600;variant_sequence=G/-;
+chr4-04	ensembl_variation	SNP	330505	330505	.	+	.	Name=rs13121052;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	330589	330589	.	+	.	Name=rs13131469;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	330684	330684	.	+	.	Name=rs73064374;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	330741	330741	.	+	.	Name=rs13121530;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	330797	330797	.	+	.	Name=rs73064378;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	330849	330849	.	+	.	Name=rs6599327;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	330895	330895	.	+	.	Name=rs116410854;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	330901	330901	.	+	.	Name=rs115618128;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	330950	330950	.	+	.	Name=rs77640350;variant_sequence=T/A;
+chr4-04	ensembl_variation	deletion	331091	331091	.	+	.	Name=rs35724339;variant_sequence=A/-;
+chr4-04	ensembl_variation	SNP	331136	331136	.	+	.	Name=rs77220685;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	331146	331146	.	+	.	Name=rs115073815;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	331229	331229	.	+	.	Name=rs115913393;variant_sequence=G/C;
+chr4-04	ensembl_variation	deletion	331229	331230	.	+	.	Name=rs3834806;variant_sequence=GT/-;
+chr4-04	ensembl_variation	SNP	331349	331349	.	+	.	Name=rs114334322;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	331372	331372	.	+	.	Name=rs7677824;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	331658	331658	.	+	.	Name=rs3749520;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	331666	331666	.	+	.	Name=rs3749521;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	331675	331675	.	+	.	Name=rs3749522;variant_sequence=C/A;
+chr4-04	ensembl_variation	insertion	331693	331694	.	+	.	Name=rs5855672;variant_sequence=-/C;
+chr4-04	ensembl_variation	insertion	331694	331695	.	+	.	Name=rs33917951;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	331696	331696	.	+	.	Name=rs115407293;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	331740	331740	.	+	.	Name=rs3749523;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	331764	331764	.	+	.	Name=rs73064385;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	331866	331866	.	+	.	Name=rs4261927;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	331896	331896	.	+	.	Name=rs4261928;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	331897	331897	.	+	.	Name=rs75145605;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	331907	331907	.	+	.	Name=rs115677187;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	332063	332063	.	+	.	Name=rs116780403;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	332087	332087	.	+	.	Name=rs114871510;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	332128	332128	.	+	.	Name=rs116640416;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	332138	332138	.	+	.	Name=rs114002176;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	332449	332449	.	+	.	Name=rs115050279;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	332542	332542	.	+	.	Name=rs78894128;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	332627	332627	.	+	.	Name=rs115709135;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	332671	332671	.	+	.	Name=rs73064387;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	332781	332781	.	+	.	Name=rs116470367;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	333030	333030	.	+	.	Name=rs115795345;variant_sequence=G/A;
+chr4-04	ensembl_variation	insertion	333288	333289	.	+	.	Name=rs72598752;variant_sequence=-/G;
+chr4-04	ensembl_variation	insertion	333289	333290	.	+	.	Name=rs35185356;variant_sequence=-/G;
+chr4-04	ensembl_variation	SNP	333310	333310	.	+	.	Name=rs11729526;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	333322	333322	.	+	.	Name=rs58500057;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	333384	333384	.	+	.	Name=rs11729532;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	333526	333526	.	+	.	Name=rs73064394;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	333531	333531	.	+	.	Name=rs79051926;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	333596	333596	.	+	.	Name=rs11727981;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	333610	333610	.	+	.	Name=rs77176200;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	333976	333976	.	+	.	Name=rs114724588;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	334213	334213	.	+	.	Name=rs61580954;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	334254	334254	.	+	.	Name=rs73064400;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	334293	334293	.	+	.	Name=rs79034091;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	334304	334304	.	+	.	Name=rs77849020;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	334418	334418	.	+	.	Name=rs115464827;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	334428	334428	.	+	.	Name=rs116126290;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	334497	334497	.	+	.	Name=rs114656131;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	334591	334591	.	+	.	Name=rs78640996;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	334600	334600	.	+	.	Name=rs75091307;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	334613	334613	.	+	.	Name=rs75234965;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	334617	334617	.	+	.	Name=rs79083622;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	334621	334621	.	+	.	Name=rs78396383;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	334647	334647	.	+	.	Name=rs78538668;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	334664	334664	.	+	.	Name=rs79582683;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	334671	334671	.	+	.	Name=rs75793340;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	334696	334696	.	+	.	Name=rs76910478;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	334710	334710	.	+	.	Name=rs79841389;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	334754	334754	.	+	.	Name=rs79300438;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	334764	334764	.	+	.	Name=rs77132186;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	334771	334771	.	+	.	Name=rs80049316;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	334777	334777	.	+	.	Name=rs76813187;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	334797	334797	.	+	.	Name=rs77321155;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	334808	334808	.	+	.	Name=rs77442745;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	334824	334824	.	+	.	Name=rs77506680;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	334835	334835	.	+	.	Name=rs74897519;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	334856	334856	.	+	.	Name=rs74597574;variant_sequence=T/A;
+chr4-04	ensembl_variation	deletion	334862	334862	.	+	.	Name=rs111597104;variant_sequence=T/-;
+chr4-04	ensembl_variation	deletion	334871	334871	.	+	.	Name=rs34755542;variant_sequence=T/-;
+chr4-04	ensembl_variation	deletion	334875	334875	.	+	.	Name=rs56926897;variant_sequence=T/-;
+chr4-04	ensembl_variation	SNP	334876	334876	.	+	.	Name=rs78157142;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	335283	335283	.	+	.	Name=rs115605875;variant_sequence=A/T;
+chr4-04	ensembl_variation	insertion	335301	335302	.	+	.	Name=rs36060329;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	335394	335394	.	+	.	Name=rs116161766;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	335434	335434	.	+	.	Name=rs78313348;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	335438	335438	.	+	.	Name=rs114851193;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	335452	335452	.	+	.	Name=rs116644845;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	335613	335613	.	+	.	Name=rs79021988;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	335932	335932	.	+	.	Name=rs77188978;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	336301	336301	.	+	.	Name=rs116439268;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	336463	336463	.	+	.	Name=rs112100920;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	336494	336494	.	+	.	Name=rs55901060;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	336615	336615	.	-	.	Name=rs14938;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	336658	336658	.	-	.	Name=rs11552842;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	336671	336671	.	-	.	Name=rs11552833;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	336689	336689	.	-	.	Name=rs11552836;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	336704	336704	.	-	.	Name=rs11543161;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	336827	336827	.	+	.	Name=rs77959891;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	337019	337019	.	+	.	Name=rs114171904;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	337084	337084	.	+	.	Name=rs114752580;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	337185	337185	.	+	.	Name=rs117558645;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	337271	337271	.	+	.	Name=rs3762868;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	337376	337376	.	-	.	Name=rs75291536;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	337376	337376	.	+	.	Name=rs61792144;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	337474	337474	.	+	.	Name=rs2352932;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	337501	337501	.	+	.	Name=rs59095927;variant_sequence=G/A;
+chr4-04	ensembl_variation	insertion	337513	337514	.	+	.	Name=rs35268031;variant_sequence=-/A;
+chr4-04	ensembl_variation	insertion	337537	337538	.	+	.	Name=rs71166807;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	337538	337538	.	+	.	Name=rs115220023;variant_sequence=G/A;
+chr4-04	ensembl_variation	deletion	337567	337567	.	+	.	Name=rs60315529;variant_sequence=T/-;
+chr4-04	ensembl_variation	SNP	337613	337613	.	+	.	Name=rs4571280;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	337709	337709	.	+	.	Name=rs75808368;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	337769	337769	.	+	.	Name=rs79176412;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	337794	337794	.	+	.	Name=rs113901747;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	337845	337845	.	+	.	Name=rs116240104;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	337921	337921	.	+	.	Name=rs115461380;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	337926	337926	.	+	.	Name=rs116746268;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	338031	338031	.	+	.	Name=rs76818296;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	338036	338036	.	+	.	Name=rs74606788;variant_sequence=A/T;
+chr4-04	ensembl_variation	deletion	338114	338115	.	+	.	Name=rs3833613;variant_sequence=AA/-;
+chr4-04	ensembl_variation	SNP	338115	338115	.	+	.	Name=rs76078467;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	338129	338129	.	+	.	Name=rs75245145;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	338156	338156	.	+	.	Name=rs79227679;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	338171	338171	.	+	.	Name=rs111369004;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	338186	338186	.	+	.	Name=rs78725891;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	338198	338198	.	+	.	Name=rs78575109;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	338200	338200	.	+	.	Name=rs79869819;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	338202	338202	.	+	.	Name=rs76167181;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	338203	338203	.	+	.	Name=rs75942616;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	338205	338205	.	+	.	Name=rs80052234;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	338213	338213	.	+	.	Name=rs61733103;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	338246	338246	.	+	.	Name=rs79348421;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	338252	338252	.	+	.	Name=rs76962477;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	338258	338258	.	+	.	Name=rs80241916;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	338260	338260	.	+	.	Name=rs76915575;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	338266	338266	.	+	.	Name=rs74323716;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	338289	338289	.	+	.	Name=rs77578216;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	338296	338296	.	+	.	Name=rs77544910;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	338306	338306	.	+	.	Name=rs74908199;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	338308	338308	.	+	.	Name=rs74691923;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	338310	338310	.	+	.	Name=rs75092352;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	338311	338311	.	+	.	Name=rs75382858;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	338313	338313	.	+	.	Name=rs78000808;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	338322	338322	.	+	.	Name=rs78396627;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	338334	338334	.	+	.	Name=rs75796306;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	338337	338337	.	+	.	Name=rs75299168;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	338355	338355	.	+	.	Name=rs79742766;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	338359	338359	.	+	.	Name=rs76521508;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	338364	338364	.	+	.	Name=rs113399189;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	338851	338851	.	+	.	Name=rs34483255;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	338884	338884	.	+	.	Name=rs61792145;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	339385	339385	.	+	.	Name=rs77018968;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	339386	339386	.	+	.	Name=rs80197975;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	339388	339388	.	+	.	Name=rs74471344;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	339557	339557	.	+	.	Name=rs73792145;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	339582	339582	.	+	.	Name=rs73066313;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	339652	339652	.	+	.	Name=rs115731956;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	340019	340019	.	+	.	Name=rs12646983;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	340020	340020	.	+	.	Name=rs12646984;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	340190	340190	.	+	.	Name=rs12647018;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	340684	340684	.	+	.	Name=rs115802431;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	340685	340685	.	+	.	Name=rs116208259;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	340889	340889	.	+	.	Name=rs68126535;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	341215	341215	.	+	.	Name=rs112275142;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	341270	341270	.	+	.	Name=rs61792146;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	341319	341319	.	+	.	Name=rs61792147;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	341361	341361	.	+	.	Name=rs112609182;variant_sequence=C/G;
+chr4-04	ensembl_variation	insertion	341530	341531	.	+	.	Name=rs113198024;variant_sequence=-/A;
+chr4-04	ensembl_variation	insertion	341542	341543	.	+	.	Name=rs57927172;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	341654	341654	.	+	.	Name=rs114945348;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	341656	341656	.	+	.	Name=rs115561965;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	341673	341673	.	+	.	Name=rs117325980;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	341802	341802	.	+	.	Name=rs113620767;variant_sequence=T/G;
+chr4-04	ensembl_variation	deletion	341814	341814	.	+	.	Name=rs35997079;variant_sequence=T/-;
+chr4-04	ensembl_variation	SNP	341959	341959	.	+	.	Name=rs114424096;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	342039	342039	.	+	.	Name=rs76566288;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	342113	342113	.	+	.	Name=rs73217600;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	342377	342377	.	+	.	Name=rs117405395;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	342426	342426	.	+	.	Name=rs79662803;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	342994	342994	.	+	.	Name=rs73066317;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	343020	343021	.	+	.	Name=rs34322430;variant_sequence=-/T;
+chr4-04	ensembl_variation	SNP	343192	343192	.	+	.	Name=rs116803324;variant_sequence=C/A;
+chr4-04	ensembl_variation	insertion	343293	343294	.	+	.	Name=rs34073128;variant_sequence=-/T;
+chr4-04	ensembl_variation	SNP	246640	246640	.	+	.	Name=rs116068146;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	343527	343527	.	+	.	Name=rs76849836;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	246656	246656	.	+	.	Name=rs73793586;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	343528	343528	.	+	.	Name=rs75337215;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	246664	246664	.	+	.	Name=rs116435106;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	343533	343533	.	+	.	Name=rs74666941;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	246700	246700	.	+	.	Name=rs61795003;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	343543	343543	.	+	.	Name=rs60750098;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	247207	247207	.	+	.	Name=rs74848272;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	343652	343652	.	+	.	Name=rs115888797;variant_sequence=G/C;
+chr4-04	ensembl_variation	deletion	247255	247256	.	+	.	Name=rs34738994;variant_sequence=AT/-;
+chr4-04	ensembl_variation	SNP	343734	343734	.	+	.	Name=rs116269826;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	247818	247818	.	+	.	Name=rs74643185;variant_sequence=C/T;
+chr4-04	ensembl_variation	insertion	343795	343796	.	+	.	Name=rs3037605;variant_sequence=-/TGCT;
+chr4-04	ensembl_variation	SNP	247825	247825	.	+	.	Name=rs10028482;variant_sequence=G/A;
+chr4-04	ensembl_variation	insertion	343796	343797	.	+	.	Name=rs59301713;variant_sequence=-/GCTT;
+chr4-04	ensembl_variation	insertion	247876	247877	.	+	.	Name=rs35065588;variant_sequence=-/G;
+chr4-04	ensembl_variation	SNP	344138	344138	.	+	.	Name=rs73217601;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	248055	248055	.	+	.	Name=rs9994989;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	344144	344144	.	+	.	Name=rs115196964;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	248174	248174	.	+	.	Name=rs34951088;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	344236	344236	.	+	.	Name=rs61450142;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	248244	248244	.	+	.	Name=rs35862389;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	344405	344405	.	+	.	Name=rs61481977;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	248328	248328	.	+	.	Name=rs34505342;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	344519	344519	.	+	.	Name=rs7663963;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	248417	248417	.	+	.	Name=rs116639095;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	344606	344606	.	+	.	Name=rs113552584;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	248709	248709	.	+	.	Name=rs6599322;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	344685	344685	.	+	.	Name=rs7697421;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	248744	248744	.	+	.	Name=rs76252400;variant_sequence=A/G;
+chr4-04	ensembl_variation	deletion	344719	344719	.	+	.	Name=rs35754231;variant_sequence=T/-;
+chr4-04	ensembl_variation	SNP	248848	248848	.	+	.	Name=rs10002898;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	344861	344861	.	+	.	Name=rs116839538;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	248893	248893	.	+	.	Name=rs79724879;variant_sequence=G/A;
+chr4-04	ensembl_variation	insertion	344874	344875	.	+	.	Name=rs34984368;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	249303	249303	.	+	.	Name=rs61795004;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	344995	344995	.	+	.	Name=rs73066320;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	249430	249430	.	+	.	Name=rs6857106;variant_sequence=G/T;
+chr4-04	ensembl_variation	deletion	345039	345040	.	+	.	Name=rs78231244;variant_sequence=TT/-;
+chr4-04	ensembl_variation	SNP	249537	249537	.	+	.	Name=rs73793588;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	345252	345252	.	+	.	Name=rs56905415;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	249567	249567	.	+	.	Name=rs73793589;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	345475	345475	.	+	.	Name=rs57731643;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	249661	249661	.	+	.	Name=rs77805970;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	345914	345914	.	+	.	Name=rs4371565;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	250036	250036	.	+	.	Name=rs56985696;variant_sequence=T/C;
+chr4-04	ensembl_variation	insertion	346032	346033	.	+	.	Name=rs34797742;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	250405	250405	.	+	.	Name=rs77219899;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	346689	346689	.	+	.	Name=rs114511550;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	250432	250432	.	+	.	Name=rs116924127;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	346699	346699	.	+	.	Name=rs77114946;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	250434	250434	.	+	.	Name=rs111351468;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	346726	346726	.	+	.	Name=rs115410125;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	250450	250450	.	+	.	Name=rs73793590;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	346758	346758	.	+	.	Name=rs6821220;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	250454	250454	.	-	.	Name=rs76503349;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	346898	346898	.	+	.	Name=rs2352945;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	250522	250522	.	+	.	Name=rs74984113;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	347038	347038	.	+	.	Name=rs73066321;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	250544	250544	.	+	.	Name=rs73793591;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	347120	347120	.	+	.	Name=rs7669794;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	250595	250595	.	+	.	Name=rs113846040;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	347125	347125	.	+	.	Name=rs7682942;variant_sequence=G/C;
+chr4-04	ensembl_variation	insertion	250597	250598	.	+	.	Name=rs34607998;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	347185	347185	.	+	.	Name=rs116749675;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	250641	250641	.	+	.	Name=rs79167157;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	347194	347194	.	+	.	Name=rs17329078;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	250645	250645	.	+	.	Name=rs75984075;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	347203	347203	.	+	.	Name=rs11248014;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	250669	250669	.	+	.	Name=rs112544218;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	347219	347219	.	+	.	Name=rs9715622;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	251416	251416	.	+	.	Name=rs73793592;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	347255	347255	.	+	.	Name=rs6820996;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	251624	251624	.	+	.	Name=rs78148790;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	347262	347262	.	+	.	Name=rs35032247;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	251893	251893	.	+	.	Name=rs73213590;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	347411	347411	.	+	.	Name=rs61792150;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	251896	251896	.	+	.	Name=rs73793593;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	347470	347470	.	+	.	Name=rs7439657;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	252048	252048	.	+	.	Name=rs77078697;variant_sequence=T/C;
+chr4-04	ensembl_variation	insertion	347547	347548	.	+	.	Name=rs71654581;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	252137	252137	.	+	.	Name=rs73213592;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	347714	347714	.	+	.	Name=rs115249188;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	252480	252480	.	+	.	Name=rs28712710;variant_sequence=G/C;
+chr4-04	ensembl_variation	insertion	347747	347748	.	+	.	Name=rs34239724;variant_sequence=-/T;
+chr4-04	ensembl_variation	SNP	252501	252501	.	+	.	Name=rs56147344;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	347918	347918	.	+	.	Name=rs116584319;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	252804	252804	.	+	.	Name=rs12510827;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	348062	348062	.	+	.	Name=rs115321965;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	252836	252836	.	+	.	Name=rs79780296;variant_sequence=A/G;
+chr4-04	ensembl_variation	deletion	348062	348062	.	+	.	Name=rs112852083;variant_sequence=C/-;
+chr4-04	ensembl_variation	SNP	252871	252871	.	+	.	Name=rs12498545;variant_sequence=C/T;
+chr4-04	ensembl_variation	deletion	348066	348066	.	+	.	Name=rs72598753;variant_sequence=C/-;
+chr4-04	ensembl_variation	SNP	252966	252966	.	+	.	Name=rs112158821;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	348096	348096	.	+	.	Name=rs114067128;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	252998	252998	.	+	.	Name=rs77983317;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	348167	348167	.	+	.	Name=rs77495498;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	253008	253008	.	+	.	Name=rs114218307;variant_sequence=G/A;
+chr4-04	ensembl_variation	insertion	348235	348236	.	+	.	Name=rs34379509;variant_sequence=-/G;
+chr4-04	ensembl_variation	SNP	253328	253328	.	+	.	Name=rs111786358;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	348524	348524	.	+	.	Name=rs7690318;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	253491	253491	.	-	.	Name=rs78084122;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	348580	348580	.	+	.	Name=rs73066324;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	253525	253525	.	+	.	Name=rs76336650;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	348946	348946	.	+	.	Name=rs7672205;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	253601	253601	.	+	.	Name=rs61795006;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	349596	349596	.	+	.	Name=rs61792151;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	253766	253766	.	+	.	Name=rs115681450;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	349716	349716	.	+	.	Name=rs73066326;variant_sequence=C/T;
+chr4-04	ensembl_variation	deletion	253821	253824	.	+	.	Name=rs113305604;variant_sequence=TCTT/-;
+chr4-04	ensembl_variation	SNP	349728	349728	.	+	.	Name=rs73066328;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	253847	253847	.	+	.	Name=rs112505624;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	349784	349784	.	+	.	Name=rs7697144;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	253881	253881	.	+	.	Name=rs4518181;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	349847	349847	.	+	.	Name=rs73219204;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	254213	254213	.	+	.	Name=rs117855818;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	349862	349862	.	+	.	Name=rs61140156;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	254419	254419	.	+	.	Name=rs114233186;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	349867	349867	.	+	.	Name=rs59346249;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	254569	254569	.	+	.	Name=rs73064335;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	349874	349874	.	+	.	Name=rs60690562;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	254583	254583	.	+	.	Name=rs73793595;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	349882	349882	.	+	.	Name=rs61237401;variant_sequence=C/T;
+chr4-04	ensembl_variation	insertion	254685	254686	.	+	.	Name=rs112652832;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	349889	349889	.	+	.	Name=rs60202579;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	254746	254746	.	+	.	Name=rs114645989;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	349900	349900	.	+	.	Name=rs58672922;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	254807	254807	.	+	.	Name=rs74482758;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	349904	349904	.	+	.	Name=rs58161640;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	254816	254816	.	+	.	Name=rs74852956;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	349912	349912	.	+	.	Name=rs60368971;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	255073	255073	.	+	.	Name=rs78456397;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	349913	349913	.	+	.	Name=rs58597776;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	255102	255102	.	+	.	Name=rs57435500;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	349914	349914	.	+	.	Name=rs13149871;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	255263	255263	.	+	.	Name=rs60229242;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	349923	349923	.	+	.	Name=rs13149881;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	255264	255264	.	+	.	Name=rs61795007;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	349935	349935	.	+	.	Name=rs59747454;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	255429	255429	.	+	.	Name=rs77982137;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	349942	349942	.	+	.	Name=rs60944334;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	255594	255594	.	+	.	Name=rs73793596;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	349968	349968	.	+	.	Name=rs60057712;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	255758	255758	.	+	.	Name=rs114400649;variant_sequence=C/A;
+chr4-04	ensembl_variation	insertion	349977	349978	.	+	.	Name=rs59361684;variant_sequence=-/TACT;
+chr4-04	ensembl_variation	SNP	255905	255905	.	+	.	Name=rs73793597;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	349982	349982	.	+	.	Name=rs57550020;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	255966	255966	.	+	.	Name=rs111626473;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	349984	349984	.	+	.	Name=rs61671519;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	255994	255994	.	+	.	Name=rs112631443;variant_sequence=G/A;
+chr4-04	ensembl_variation	deletion	350020	350020	.	+	.	Name=rs111839333;variant_sequence=A/-;
+chr4-04	ensembl_variation	SNP	256429	256429	.	+	.	Name=rs114007248;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	350044	350044	.	+	.	Name=rs116268551;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	256450	256450	.	+	.	Name=rs61792060;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	350083	350083	.	+	.	Name=rs115799425;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	256598	256598	.	+	.	Name=rs117573143;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	350525	350525	.	+	.	Name=rs78870565;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	256698	256698	.	+	.	Name=rs111929404;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	350579	350579	.	+	.	Name=rs6825544;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	256851	256851	.	+	.	Name=rs73213593;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	350795	350795	.	+	.	Name=rs12647659;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	256975	256975	.	+	.	Name=rs73793599;variant_sequence=C/T;
+chr4-04	ensembl_variation	deletion	350928	350928	.	+	.	Name=rs36000451;variant_sequence=T/-;
+chr4-04	ensembl_variation	SNP	256979	256979	.	+	.	Name=rs11728100;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	351044	351044	.	+	.	Name=rs10212688;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	257048	257048	.	+	.	Name=rs115632218;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	351209	351209	.	+	.	Name=rs74463326;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	257154	257154	.	+	.	Name=rs115337428;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	351489	351489	.	+	.	Name=rs77592170;variant_sequence=C/T;
+chr4-04	ensembl_variation	deletion	257246	257246	.	+	.	Name=rs112220317;variant_sequence=A/-;
+chr4-04	ensembl_variation	SNP	351651	351651	.	+	.	Name=rs112845648;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	257249	257249	.	+	.	Name=rs28517538;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	351661	351661	.	+	.	Name=rs11721823;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	257258	257258	.	+	.	Name=rs74653446;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	351729	351729	.	+	.	Name=rs113082510;variant_sequence=C/T;
+chr4-04	ensembl_variation	insertion	257258	257259	.	+	.	Name=rs35178489;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	351741	351741	.	+	.	Name=rs6819237;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	257259	257259	.	+	.	Name=rs75047593;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	351783	351783	.	+	.	Name=rs78734670;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	257318	257318	.	+	.	Name=rs73793600;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	351853	351853	.	+	.	Name=rs115361560;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	257365	257365	.	+	.	Name=rs112776858;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	351970	351970	.	+	.	Name=rs12499633;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	257384	257384	.	+	.	Name=rs113402102;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	351972	351972	.	+	.	Name=rs115597071;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	257406	257406	.	+	.	Name=rs75759167;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	352394	352394	.	+	.	Name=rs113243205;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	257500	257500	.	+	.	Name=rs77113404;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	352661	352661	.	+	.	Name=rs55718920;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	257553	257553	.	+	.	Name=rs117100792;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	352768	352768	.	+	.	Name=rs74559842;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	257555	257555	.	+	.	Name=rs118023272;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	352890	352890	.	+	.	Name=rs56171831;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	257729	257729	.	+	.	Name=rs75581629;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	352937	352937	.	+	.	Name=rs74437406;variant_sequence=G/A;
+chr4-04	ensembl_variation	deletion	257941	257941	.	+	.	Name=rs35957357;variant_sequence=T/-;
+chr4-04	ensembl_variation	SNP	352955	352955	.	+	.	Name=rs7682616;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	258032	258032	.	+	.	Name=rs79914894;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	352968	352968	.	+	.	Name=rs56048545;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	258294	258294	.	+	.	Name=rs77234191;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	353088	353088	.	+	.	Name=rs78449876;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	258471	258471	.	+	.	Name=rs28565113;variant_sequence=T/A;
+chr4-04	ensembl_variation	insertion	353097	353098	.	+	.	Name=rs59855402;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	258512	258512	.	+	.	Name=rs7657860;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	353183	353183	.	+	.	Name=rs75612802;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	258609	258609	.	+	.	Name=rs115761664;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	353271	353271	.	+	.	Name=rs77936062;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	258627	258627	.	+	.	Name=rs7658064;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	353898	353898	.	+	.	Name=rs116976302;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	258692	258692	.	+	.	Name=rs113702774;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	353902	353902	.	+	.	Name=rs60054816;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	258788	258788	.	+	.	Name=rs73213594;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	354013	354013	.	+	.	Name=rs75739380;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	258920	258920	.	+	.	Name=rs78301707;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	354044	354044	.	+	.	Name=rs114751295;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	259525	259525	.	+	.	Name=rs79043901;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	354051	354051	.	+	.	Name=rs17719492;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	259638	259638	.	+	.	Name=rs73793601;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	354238	354238	.	+	.	Name=rs7675459;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	259679	259679	.	+	.	Name=rs76635023;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	354256	354256	.	+	.	Name=rs76886738;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	260121	260121	.	+	.	Name=rs10006781;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	354270	354270	.	+	.	Name=rs115249012;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	260165	260165	.	+	.	Name=rs28703806;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	354274	354274	.	+	.	Name=rs116671819;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	260166	260166	.	+	.	Name=rs28415975;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	354589	354589	.	+	.	Name=rs73219209;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	260173	260173	.	+	.	Name=rs28429717;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	354613	354613	.	+	.	Name=rs113178711;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	260176	260176	.	+	.	Name=rs111766204;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	354756	354756	.	+	.	Name=rs76524747;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	260415	260415	.	+	.	Name=rs114500782;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	354878	354878	.	+	.	Name=rs61792154;variant_sequence=A/G;
+chr4-04	ensembl_variation	deletion	260415	260417	.	+	.	Name=rs74271677;variant_sequence=TTT/-;
+chr4-04	ensembl_variation	SNP	354955	354955	.	+	.	Name=rs79402412;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	260417	260417	.	+	.	Name=rs77926823;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	354969	354969	.	+	.	Name=rs115388974;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	260441	260441	.	+	.	Name=rs73793602;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	355103	355103	.	+	.	Name=rs79922358;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	260587	260587	.	+	.	Name=rs17164747;variant_sequence=G/T;
+chr4-04	ensembl_variation	insertion	355103	355104	.	+	.	Name=rs111431602;variant_sequence=-/TCTT;
+chr4-04	ensembl_variation	SNP	260810	260810	.	+	.	Name=rs115074177;variant_sequence=G/C;
+chr4-04	ensembl_variation	insertion	355108	355109	.	+	.	Name=rs72490219;variant_sequence=-/CTTT;
+chr4-04	ensembl_variation	SNP	260950	260950	.	+	.	Name=rs60056532;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	355109	355109	.	+	.	Name=rs77399824;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	261095	261095	.	+	.	Name=rs79716987;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	355176	355176	.	+	.	Name=rs75801112;variant_sequence=G/T;
+chr4-04	ensembl_variation	deletion	261104	261106	.	+	.	Name=rs61296103;variant_sequence=GGG/-;
+chr4-04	ensembl_variation	SNP	355177	355177	.	+	.	Name=rs76633695;variant_sequence=T/G;
+chr4-04	ensembl_variation	insertion	261106	261107	.	+	.	Name=rs71164502;variant_sequence=-/GG;
+chr4-04	ensembl_variation	SNP	356081	356081	.	+	.	Name=rs80248324;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	261156	261156	.	+	.	Name=rs7688540;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	357570	357571	.	+	.	Name=rs59300063;variant_sequence=-/G;
+chr4-04	ensembl_variation	SNP	261274	261274	.	+	.	Name=rs76539830;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	357657	357657	.	+	.	Name=rs61792156;variant_sequence=A/T;
+chr4-04	ensembl_variation	insertion	261381	261382	.	+	.	Name=rs34809141;variant_sequence=-/CA;
+chr4-04	ensembl_variation	SNP	357669	357669	.	+	.	Name=rs11937955;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	261601	261601	.	+	.	Name=rs75442577;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	357785	357785	.	+	.	Name=rs2624729;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	262062	262062	.	+	.	Name=rs10010286;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	357793	357793	.	+	.	Name=rs76047999;variant_sequence=T/C;
+chr4-04	ensembl_variation	insertion	262144	262145	.	+	.	Name=rs112945850;variant_sequence=-/TC;
+chr4-04	ensembl_variation	SNP	357793	357793	.	-	.	Name=rs113200034;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	262145	262146	.	+	.	Name=rs59995882;variant_sequence=-/CT;
+chr4-04	ensembl_variation	SNP	357806	357806	.	+	.	Name=rs62171238;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	262152	262152	.	+	.	Name=rs75470053;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	357817	357817	.	+	.	Name=rs74475438;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	262153	262153	.	+	.	Name=rs77148043;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	357818	357818	.	+	.	Name=rs2784390;variant_sequence=C/T;
+chr4-04	ensembl_variation	insertion	262400	262401	.	+	.	Name=rs35751601;variant_sequence=-/T;
+chr4-04	ensembl_variation	SNP	357821	357821	.	+	.	Name=rs55769528;variant_sequence=G/A;
+chr4-04	ensembl_variation	insertion	262448	262449	.	+	.	Name=rs34190666;variant_sequence=-/G;
+chr4-04	ensembl_variation	SNP	357823	357823	.	+	.	Name=rs74482379;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	262572	262572	.	+	.	Name=rs34293116;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	357841	357841	.	+	.	Name=rs28867109;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	262589	262589	.	+	.	Name=rs34181697;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	357856	357856	.	+	.	Name=rs111353602;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	262598	262598	.	+	.	Name=rs34529823;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	357857	357857	.	-	.	Name=rs79712056;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	262617	262617	.	+	.	Name=rs35773246;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	357870	357870	.	-	.	Name=rs75801552;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	262624	262624	.	+	.	Name=rs36116654;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	357884	357884	.	+	.	Name=rs11723986;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	262874	262874	.	+	.	Name=rs115899071;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	357892	357892	.	-	.	Name=rs113296940;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	262934	262934	.	+	.	Name=rs17775090;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	357914	357914	.	+	.	Name=rs112521424;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	263205	263205	.	+	.	Name=rs80276391;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	357918	357918	.	-	.	Name=rs80163004;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	263319	263319	.	+	.	Name=rs7674560;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	357918	357918	.	-	.	Name=rs77278650;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	263400	263400	.	+	.	Name=rs112824916;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	357926	357926	.	-	.	Name=rs112532717;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	263427	263427	.	+	.	Name=rs111314890;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	357931	357931	.	+	.	Name=rs77220357;variant_sequence=C/A;
+chr4-04	ensembl_variation	deletion	263482	263482	.	+	.	Name=rs112413297;variant_sequence=A/-;
+chr4-04	ensembl_variation	SNP	357956	357956	.	+	.	Name=rs111411991;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	263562	263562	.	+	.	Name=rs112975726;variant_sequence=C/T;
+chr4-04	ensembl_variation	insertion	357956	357957	.	-	.	Name=rs35441996;variant_sequence=-/G;
+chr4-04	ensembl_variation	SNP	263638	263638	.	+	.	Name=rs115344128;variant_sequence=C/A;
+chr4-04	polya_signal	polyA_signal_sequence	249422	249427	.	+	.
+chr4-04	polya_signal	polyA_signal_sequence	249755	249760	.	+	.
+chr4-04	polya_site	polyA_site	249773	249774	.	+	.
+chr4-04	polya_site	polyA_site	249444	249445	.	+	.
+chr4-04	transcript_trunc	mRNA	247349	249774	.	+	.	ID=transcript2;Name=RP11-2H3.4-001
+chr4-04	transcript_trunc	exon	247349	249774	.	+	.	Parent=transcript2
+chr4-04	transcript_trunc	mRNA	331622	352339	.	+	.	ID=transcript3;Name=RP11-2H3.1-003
+chr4-04	transcript_trunc	exon	331622	331775	.	+	.	Parent=transcript3
+chr4-04	transcript_trunc	exon	337571	337697	.	+	.	Parent=transcript3
+chr4-04	transcript_trunc	exon	338124	338219	.	+	.	Parent=transcript3
+chr4-04	transcript_trunc	exon	351997	352339	.	+	.	Parent=transcript3
+chr4-04	transcript_trunc	mRNA	331603	331775	.	+	.	ID=transcript4;Name=RP11-2H3.1-006
+chr4-04	transcript_trunc	exon	331603	331775	.	+	.	Parent=transcript4
+chr4-04	CCDS_Gene	mRNA	264888	299099	.	-	.	ID=transcript5;Name=CCDS46990.1
+chr4-04	CCDS_Gene	exon	299097	299099	.	-	.	Parent=transcript5
+chr4-04	CCDS_Gene	CDS	299097	299099	.	-	0	Parent=transcript5
+chr4-04	CCDS_Gene	exon	289818	289944	.	-	.	Parent=transcript5
+chr4-04	CCDS_Gene	CDS	289818	289944	.	-	1	Parent=transcript5
+chr4-04	CCDS_Gene	exon	289227	289322	.	-	.	Parent=transcript5
+chr4-04	CCDS_Gene	CDS	289227	289322	.	-	1	Parent=transcript5
+chr4-04	CCDS_Gene	exon	264888	266419	.	-	.	Parent=transcript5
+chr4-04	CCDS_Gene	CDS	264888	266419	.	-	0	Parent=transcript5
+chr4-04	CCDS_Gene	mRNA	331773	338219	.	+	.	ID=transcript6;Name=CCDS33931.1
+chr4-04	CCDS_Gene	exon	331773	331775	.	+	.	Parent=transcript6
+chr4-04	CCDS_Gene	exon	337571	337697	.	+	.	Parent=transcript6
+chr4-04	CCDS_Gene	exon	338124	338219	.	+	.	Parent=transcript6
+chr4-04	Augustus	mRNA	330156	330563	.	-	.	ID=transcript7;Name=AUGUSTUS00000051712
+chr4-04	Augustus	exon	330156	330563	.	-	.	Parent=transcript7
+chr4-04	Augustus	CDS	330156	330563	.	-	0	Parent=transcript7
+chr4-04	Genscan	mRNA	330013	333007	.	-	.	ID=transcript8;Name=GENSCAN00000046298
+chr4-04	Genscan	exon	332861	333007	.	-	.	Parent=transcript8
+chr4-04	Genscan	CDS	332861	333007	.	-	0	Parent=transcript8
+chr4-04	Genscan	exon	330841	331098	.	-	.	Parent=transcript8
+chr4-04	Genscan	CDS	330841	331098	.	-	0	Parent=transcript8
+chr4-04	Genscan	exon	330289	330722	.	-	.	Parent=transcript8
+chr4-04	Genscan	CDS	330289	330722	.	-	2	Parent=transcript8
+chr4-04	Genscan	exon	330013	330175	.	-	.	Parent=transcript8
+chr4-04	Genscan	CDS	330013	330175	.	-	0	Parent=transcript8
+chr4-04	Genscan	mRNA	221598	299038	.	-	.	ID=transcript9;Name=GENSCAN00000046296
+chr4-04	Genscan	exon	298963	299038	.	-	.	Parent=transcript9
+chr4-04	Genscan	CDS	298963	299038	.	-	0	Parent=transcript9
+chr4-04	Genscan	exon	289227	289301	.	-	.	Parent=transcript9
+chr4-04	Genscan	CDS	289227	289301	.	-	1	Parent=transcript9
+chr4-04	Genscan	exon	266273	266395	.	-	.	Parent=transcript9
+chr4-04	Genscan	CDS	266273	266395	.	-	1	Parent=transcript9
+chr4-04	Genscan	exon	228521	228666	.	-	.	Parent=transcript9
+chr4-04	Genscan	CDS	228521	228666	.	-	0	Parent=transcript9
+chr4-04	Genscan	exon	221598	221681	.	-	.	Parent=transcript9
+chr4-04	Genscan	CDS	221598	221681	.	-	0	Parent=transcript9
+chr4-04	Halfwise	mRNA	262776	262844	.	-	.	ID=transcript10;Name=zf-C2H2.40836
+chr4-04	Halfwise	exon	262776	262844	.	-	.	Parent=transcript10
+chr4-04	Halfwise	CDS	262776	262844	.	-	0	Parent=transcript10
+chr4-04	Halfwise	mRNA	263873	263941	.	-	.	ID=transcript11;Name=zf-C2H2.40835
+chr4-04	Halfwise	exon	263873	263941	.	-	.	Parent=transcript11
+chr4-04	Halfwise	CDS	263873	263941	.	-	0	Parent=transcript11
+chr4-04	Halfwise	mRNA	211321	251478	.	-	.	ID=transcript12;Name=zf-C2H2.40837
+chr4-04	Halfwise	exon	251454	251478	.	-	.	Parent=transcript12
+chr4-04	Halfwise	CDS	251454	251478	.	-	0	Parent=transcript12
+chr4-04	Halfwise	exon	228409	228425	.	-	.	Parent=transcript12
+chr4-04	Halfwise	CDS	228409	228425	.	-	0	Parent=transcript12
+chr4-04	Halfwise	exon	211321	211350	.	-	.	Parent=transcript12
+chr4-04	Halfwise	CDS	211321	211350	.	-	0	Parent=transcript12
+chr4-04	Halfwise	mRNA	289816	289938	.	-	.	ID=transcript13;Name=KRAB.40832
+chr4-04	Halfwise	exon	289816	289938	.	-	.	Parent=transcript13
+chr4-04	Halfwise	CDS	289816	289938	.	-	0	Parent=transcript13
+chr4-04	Halfwise	mRNA	337577	337699	.	+	.	ID=transcript14;Name=KRAB.40834
+chr4-04	Halfwise	exon	337577	337699	.	+	.	Parent=transcript14
+chr4-04	Halfwise	CDS	337577	337699	.	+	0	Parent=transcript14
+chr4-04	known_cds_trunc	mRNA	331624	338219	.	+	.	ID=transcript15;Name=RP11-2H3.1-001
+chr4-04	known_cds_trunc	exon	331624	331775	.	+	.	Parent=transcript15
+chr4-04	known_cds_trunc	exon	337571	337697	.	+	.	Parent=transcript15
+chr4-04	known_cds_trunc	exon	338124	338219	.	+	.	Parent=transcript15
+chr4-04	Augustus	mRNA	330156	330563	.	-	.	ID=transcript16;Name=AUGUSTUS00000051712
+chr4-04	Augustus	exon	330156	330563	.	-	.	Parent=transcript16
+chr4-04	Augustus	CDS	330156	330563	.	-	0	Parent=transcript16
+chr4-04	Halfwise	mRNA	262776	262844	.	-	.	ID=transcript17;Name=zf-C2H2.40836
+chr4-04	Halfwise	exon	262776	262844	.	-	.	Parent=transcript17
+chr4-04	Halfwise	CDS	262776	262844	.	-	0	Parent=transcript17
+chr4-04	Halfwise	mRNA	263873	263941	.	-	.	ID=transcript18;Name=zf-C2H2.40835
+chr4-04	Halfwise	exon	263873	263941	.	-	.	Parent=transcript18
+chr4-04	Halfwise	CDS	263873	263941	.	-	0	Parent=transcript18
+chr4-04	Halfwise	mRNA	211321	251478	.	-	.	ID=transcript19;Name=zf-C2H2.40837
+chr4-04	Halfwise	exon	251454	251478	.	-	.	Parent=transcript19
+chr4-04	Halfwise	CDS	251454	251478	.	-	0	Parent=transcript19
+chr4-04	Halfwise	exon	228409	228425	.	-	.	Parent=transcript19
+chr4-04	Halfwise	CDS	228409	228425	.	-	0	Parent=transcript19
+chr4-04	Halfwise	exon	211321	211350	.	-	.	Parent=transcript19
+chr4-04	Halfwise	CDS	211321	211350	.	-	0	Parent=transcript19
+chr4-04	Halfwise	mRNA	289816	289938	.	-	.	ID=transcript20;Name=KRAB.40832
+chr4-04	Halfwise	exon	289816	289938	.	-	.	Parent=transcript20
+chr4-04	Halfwise	CDS	289816	289938	.	-	0	Parent=transcript20
+chr4-04	Halfwise	mRNA	337577	337699	.	+	.	ID=transcript21;Name=KRAB.40834
+chr4-04	Halfwise	exon	337577	337699	.	+	.	Parent=transcript21
+chr4-04	Halfwise	CDS	337577	337699	.	+	0	Parent=transcript21
+chr4-04	putative_cds_trunc	mRNA	331623	338219	.	+	.	ID=transcript22;Name=RP11-2H3.1-005
+chr4-04	putative_cds_trunc	exon	331623	331775	.	+	.	Parent=transcript22
+chr4-04	putative_cds_trunc	exon	337571	337697	.	+	.	Parent=transcript22
+chr4-04	putative_cds_trunc	exon	338124	338219	.	+	.	Parent=transcript22
+chr4-04	putative_cds_trunc	mRNA	331609	338219	.	+	.	ID=transcript23;Name=RP11-2H3.1-002
+chr4-04	putative_cds_trunc	exon	331609	331775	.	+	.	Parent=transcript23
+chr4-04	putative_cds_trunc	exon	337571	337697	.	+	.	Parent=transcript23
+chr4-04	putative_cds_trunc	exon	338124	338219	.	+	.	Parent=transcript23
+chr4-04	ensembl_ncRNA	mRNA	343946	344041	.	+	.	ID=transcript24;Name=MIR571.388281
+chr4-04	ensembl_ncRNA	exon	343946	344041	.	+	.	Parent=transcript24
+chr4-04	Genscan	mRNA	330013	333007	.	-	.	ID=transcript25;Name=GENSCAN00000046298
+chr4-04	Genscan	exon	332861	333007	.	-	.	Parent=transcript25
+chr4-04	Genscan	CDS	332861	333007	.	-	0	Parent=transcript25
+chr4-04	Genscan	exon	330841	331098	.	-	.	Parent=transcript25
+chr4-04	Genscan	CDS	330841	331098	.	-	0	Parent=transcript25
+chr4-04	Genscan	exon	330289	330722	.	-	.	Parent=transcript25
+chr4-04	Genscan	CDS	330289	330722	.	-	2	Parent=transcript25
+chr4-04	Genscan	exon	330013	330175	.	-	.	Parent=transcript25
+chr4-04	Genscan	CDS	330013	330175	.	-	0	Parent=transcript25
+chr4-04	Genscan	mRNA	221598	299038	.	-	.	ID=transcript26;Name=GENSCAN00000046296
+chr4-04	Genscan	exon	298963	299038	.	-	.	Parent=transcript26
+chr4-04	Genscan	CDS	298963	299038	.	-	0	Parent=transcript26
+chr4-04	Genscan	exon	289227	289301	.	-	.	Parent=transcript26
+chr4-04	Genscan	CDS	289227	289301	.	-	1	Parent=transcript26
+chr4-04	Genscan	exon	266273	266395	.	-	.	Parent=transcript26
+chr4-04	Genscan	CDS	266273	266395	.	-	1	Parent=transcript26
+chr4-04	Genscan	exon	228521	228666	.	-	.	Parent=transcript26
+chr4-04	Genscan	CDS	228521	228666	.	-	0	Parent=transcript26
+chr4-04	Genscan	exon	221598	221681	.	-	.	Parent=transcript26
+chr4-04	Genscan	CDS	221598	221681	.	-	0	Parent=transcript26
+chr4-04	ensembl_havana_transcripts	mRNA	264464	299110	.	-	.	ID=transcript27;Name=ZNF732.317436
+chr4-04	ensembl_havana_transcripts	exon	299097	299110	.	-	.	Parent=transcript27
+chr4-04	ensembl_havana_transcripts	CDS	299097	299099	.	-	0	Parent=transcript27
+chr4-04	ensembl_havana_transcripts	exon	289818	289944	.	-	.	Parent=transcript27
+chr4-04	ensembl_havana_transcripts	CDS	289818	289944	.	-	1	Parent=transcript27
+chr4-04	ensembl_havana_transcripts	exon	289227	289322	.	-	.	Parent=transcript27
+chr4-04	ensembl_havana_transcripts	CDS	289227	289322	.	-	1	Parent=transcript27
+chr4-04	ensembl_havana_transcripts	exon	264464	266419	.	-	.	Parent=transcript27
+chr4-04	ensembl_havana_transcripts	CDS	264888	266419	.	-	0	Parent=transcript27
+chr4-04	ensembl_havana_transcripts	mRNA	331624	338219	.	+	.	ID=transcript28;Name=ZNF141.317475
+chr4-04	ensembl_havana_transcripts	exon	331624	331775	.	+	.	Parent=transcript28
+chr4-04	ensembl_havana_transcripts	exon	337571	337697	.	+	.	Parent=transcript28
+chr4-04	ensembl_havana_transcripts	exon	338124	338219	.	+	.	Parent=transcript28
+chr4-04	ensembl_EST_genes	mRNA	247349	247934	.	+	.	ID=transcript29;Name=ENSESTT00000087222
+chr4-04	ensembl_EST_genes	exon	247349	247934	.	+	.	Parent=transcript29
+chr4-04	ensembl_EST_genes	mRNA	331603	331775	.	+	.	ID=transcript30;Name=ENSESTT00000087249
+chr4-04	ensembl_EST_genes	exon	331603	331775	.	+	.	Parent=transcript30
+chr4-04	ensembl_EST_genes	mRNA	247725	247760	.	+	.	ID=transcript31;Name=ENSESTT00000087201
+chr4-04	ensembl_EST_genes	exon	247725	247760	.	+	.	Parent=transcript31
+chr4-04	ensembl_EST_genes	mRNA	330936	337660	.	+	.	ID=transcript32;Name=ENSESTT00000087238
+chr4-04	ensembl_EST_genes	exon	330936	331116	.	+	.	Parent=transcript32
+chr4-04	ensembl_EST_genes	CDS	330938	331116	.	+	0	Parent=transcript32
+chr4-04	ensembl_EST_genes	exon	337571	337660	.	+	.	Parent=transcript32
+chr4-04	ensembl_EST_genes	CDS	337571	337580	.	+	1	Parent=transcript32
+chr4-04	ensembl_EST_genes	mRNA	213083	247631	.	+	.	ID=transcript33;Name=ENSESTT00000087219
+chr4-04	ensembl_EST_genes	exon	213083	213178	.	+	.	Parent=transcript33
+chr4-04	ensembl_EST_genes	exon	247349	247631	.	+	.	Parent=transcript33
+chr4-04	ensembl_EST_genes	mRNA	331596	338219	.	+	.	ID=transcript34;Name=ENSESTT00000087246
+chr4-04	ensembl_EST_genes	exon	331596	331775	.	+	.	Parent=transcript34
+chr4-04	ensembl_EST_genes	exon	337571	337697	.	+	.	Parent=transcript34
+chr4-04	ensembl_EST_genes	exon	338124	338219	.	+	.	Parent=transcript34
+chr4-04	polya_signal	polyA_signal_sequence	249422	249427	.	+	.
+chr4-04	polya_signal	polyA_signal_sequence	249755	249760	.	+	.
+chr4-04	polya_site	polyA_site	249773	249774	.	+	.
+chr4-04	polya_site	polyA_site	249444	249445	.	+	.
diff --git a/examples/chr4_protein_align.gff b/examples/chr4_protein_align.gff
new file mode 100644
index 0000000..d501723
--- /dev/null
+++ b/examples/chr4_protein_align.gff
@@ -0,0 +1,4904 @@
+##gff-version 3
+##sequence-region chr4-04 246635 359336
+chr4-04	SwissProt	protein_match	266088	266159	65.000000	-	.	Target=O14709.1 420 445 +;percentID=50;Gap=M8 I2 M16 ;sequence=MTRENVAHNALRQEGLVKGKDDTWKWGTSFQGSSSSVWETSHLHFRQLRYHETSGPQEALSRLRELCRRWLRPEARTKAQILELLVLEQFLSILPGEIRTWVQLHHPGSGEEAVALVEELQKDLDGPAIQVPVLVKDQDTLQKVVSAPGTTLPPVLPGSHIAAEICPHPPTDLVAFNLQDPQHDSPAPEASALSQEENPRNQLMALMLLTAQPQELVMFEEVSVCFTSEEWACLGPIQRALYWDVMLENYGNVTSLEWETMTENEEVTSKPSSSQRADSHKGTSKRLQGSVPQVLDFEEECEWQVLASQWGNETDERADTVKKVSLCERDKKKRTPPEKQGQKWKELGDSLTFGSAISESLIGTEGKKF [...]
+chr4-04	SwissProt	protein_match	266088	266171	65.000000	-	.	Target=P51508.3 461 489 +;percentID=50;Gap=M3 D1 M8 I2 M16 ;sequence=MPANEDAPQPGEHGSACEVSVSFEDVTVDFSREEWQQLDSTQRRLYQDVMLENYSHLLSVGFEVPKPEVIFKLEQGEGPWTLEGEAPHQSCSDGKFGIKPSQRRISGKSTFHSEMEGEDTRDDSLYSILEELWQDAEQIKRCQEKHNKLLSRTTFLNKKILNTEWDYEYKDFGKFVHPSPNLILSQKRPHKRDSFGKSFKHNLDLHIHNKSNAAKNLDKTIGHGQVFTQNSSYSHHENTHTGVKFCERNQCGKVLSLKHSLSQNVKFPIGEKANTCTEFGKIFTQRSHFFAPQKIHTVEKPHELSKCVNVFTQKPLLSIYLRVHRDEKLYICTKCGKAFIQNSELIMHEKTHTREKPYKCNEC [...]
+chr4-04	SwissProt	protein_match	266088	266159	65.000000	-	.	Target=Q6P560.1 313 338 +;percentID=50;Gap=M8 I2 M16 ;sequence=MAKPQEPVTFEDVAVDFTQEEWQYLNSPQRTLYRDVMLETYSNLVSVCEVASIGSEDQGGISHLSSLEQQVTKPDLIIKLEVEEPDPEDGEIPVWSFPEVCQINEQFERQHQDKQDKYLLMQVRLPNDNIITKSGQNYTDFRNAFHLSTGLLVPMQRSHKFESFGNTMVDNLNLLTGSSTENKHDTGCAKFFFHTEYENPNFIVKPCGYKEYEKTLSQKKGLSLHQRIKNGERPFECTACQKTFSKKSHLIVHWRTHTGEKPFECSECGKAFSQKSQLIIHLRTHTGERPFACPECGKAFREKSTVIIHYRTHTGEKPYECNQCGKAFTQKSNLIVHQKTHTGEKTYECTKCGESFIQKLDLIIHHSTH [...]
+chr4-04	SwissProt	protein_match	266088	266192	68.000000	-	.	Target=Q8N988-2.2 244 283 +;percentID=45;Gap=M9 I2 M2 I1 M8 I2 M16 ;sequence=MAAVVLPPTAALSSLFPASQREGHTEGGELVNELLKSWLKGLVTFEDVAVEFTQEEWALLDPAQRTLYRDVMLENCRNLASLGNQVDKPRLISQLEQEDKVMTEERGILSGTCPDVENPFKAKGLTPKLHVFRKEQSRNMKMERNHLGATLNECNQCFKVFSTKSSLTRHRKIHTGERPYGCSECGKSYSSRSYLAVHKRIHNGEKPYECNDCGKTFSSRSYLTVHKRIHNGEKPYECSDCGKTFSNSSYLRPHLRIHTGEKPYKCNQCFREFRTQSIFTRHKRVHTGEGHYVCNQCGKAFGTRSSLSSHYSIHTGEYPYECHDCGRTFRRRSNLTQHIRTHTGEKPYTCNECGK [...]
+chr4-04	SwissProt	protein_match	266088	266192	68.000000	-	.	Target=Q8N988.2 237 276 +;percentID=45;Gap=M9 I2 M2 I1 M8 I2 M16 ;sequence=MAAVVLPPTAASQREGHTEGGELVNELLKSWLKGLVTFEDVAVEFTQEEWALLDPAQRTLYRDVMLENCRNLASLGNQVDKPRLISQLEQEDKVMTEERGILSGTCPDVENPFKAKGLTPKLHVFRKEQSRNMKMERNHLGATLNECNQCFKVFSTKSSLTRHRKIHTGERPYGCSECGKSYSSRSYLAVHKRIHNGEKPYECNDCGKTFSSRSYLTVHKRIHNGEKPYECSDCGKTFSNSSYLRPHLRIHTGEKPYKCNQCFREFRTQSIFTRHKRVHTGEGHYVCNQCGKAFGTRSSLSSHYSIHTGEYPYECHDCGRTFRRRSNLTQHIRTHTGEKPYTCNECGKSFTNSFSLT [...]
+chr4-04	SwissProt	protein_match	266088	266159	69.000000	-	.	Target=Q86T29.1 443 468 +;percentID=53;Gap=M8 I2 M16 ;sequence=MIQSQISFEDVAVDFTLEEWQLLNPTQKNLYRDVMLENYSNLVFLEVWLDNPKMWLRDNQDNLKSMERGHKYDVFGKIFNSSINIVHVGLRSHKCGTGEKSLKCPFDLLIPKNNCERKKIDELNKKLLFCIKPGRTHGGIKYCDCSTCRKSSNEEPWLTANHITHTGVYLCMECGRFFNKKSQLVIHQRTHTGEKPYQCSECGKAFSQKSLLTVHQRTHSGEKPHGCSECQKAFSRKSLLILHQRIHTGEKPYGCSECGKAFSRKSQLKRHQITHTIEKPYSCSECGKAFSQKLKLITHQRAHTGEKPYPCSHCGKAFFWKSQLITHQRTHTGKKPYGCGECQKAFSRNSLLIRHQRIHTGEKPYECNE [...]
+chr4-04	SwissProt	protein_match	266088	266171	69.000000	-	.	Target=Q5RB30.1 373 401 +;percentID=53;Gap=M3 D1 M7 I2 M17 ;sequence=MPASWTSPQKSSALAPDDHGSSYEGSVSFRDVVINFSREEWQHLDLSQRNLYRDVMLETYSHLLSVGYQVPKPEVVMLEQGKEPWALQGERPRHSCPGEKLWDHNQHRKIIGYKPASSQDQKIYSGEKSYECAEFGKSFTWKSQFKVHLKVPTGEKLYVCIECGRAFVQKPEFITHQKAHMREKPYKCNECGKSVFQVSSLFRHQRIHTGEKLYQCSECGKGFPYNSDLSIHEKIHTGERHHECTDCGKAFTQRSTLKMHQKIHTGERSYICIECGQAFIQKTQLIAHRRIHSGEKPYECNNCGKSFISKSQLEVHQRIHTRLKPYICTEYGKVFSNNSNLITHEKVQSREKSSICTECGKAF [...]
+chr4-04	SwissProt	protein_match	266088	266171	71.000000	-	.	Target=Q6P1L6.1 400 428 +;percentID=50;Gap=M3 D1 M7 I2 M17 ;sequence=MMLPYPSALGDQYWEEILLPKNGENVETMKKLTQNHKAKGLPSNDTDCPQKKEGKAQIVVPVTFRDVTVIFTEAEWKRLSPEQRNLYKEVMLENYRNLLSLAEPKPEIYTCSSCLLAFSCQQFLSQHVLQIFLGLCAENHFHPGNSSPGHWKQQGQQYSHVSCWFENAEGQERGGGSKPWSARTEERETSRAFPSPLQRQSASPRKGNMVVETEPSSAQRPNPVQLDKGLKELETLRFGAINCREYEPDHNLESNFITNPRTLLGKKPYICSDCGRSFKDRSTLIRHHRIHSMEKPYVCSECGRGFSQKSNLSRHQRTHSEEKPYLCRECGQSFRSKSILNRHQWTHSEEKPYVCSECGRGFS [...]
+chr4-04	SwissProt	protein_match	266088	266231	72.000000	-	.	Target=Q8N2I2.1 189 235 +;percentID=40;Gap=M15 D1 M6 D2 M7 I2 M17 ;sequence=MGQPAPYAEGPIQGGDAGELCKCDFLVSISIPQTRSDIPAGARRSSMGPRSLDTCWGRGPERHVHRLECNGVIFTHRNLCLPGGKTKTENEEKTAQLNISKESESHRLIVEGLLMDVPQHPDFKDRLEKSQLHDTGNKTKIGDCTDLTVQDHESSTTEREEIARKLEESSVSTHLITKQGFAKEQVFYKCGECGSYYNPHSDFHLHQRVHTNEKPYTCKECGKTFRYNSKLSRHQKIHTGEKPYSCEECGQAFSQNSHLLQHQKLHGGQRPYECTDCGKTFSYNSKLIRHQRIHTGEKPFKCKECGKAFSCSYDCIIHERIHNGEKPYECKECGKSLSSNSVLIQHQRIHTGEKPY [...]
+chr4-04	SwissProt	protein_match	266088	266174	73.000000	-	.	Target=Q9NSJ1.2 61 91 +;percentID=51;Gap=M13 I2 M16 ;sequence=MRDEVAEKEKADINVTLVFQGYENTPIMVCVDGIVFSKPDLVTCLEQRKKPWSMKHPGLTQHNIVHTGDKPYKCKDCGKIFKWSSNLTIHQRIHSGEKPYKCEECGKAFKQSSKLNEHMRAHTGEKFYKCEECGKAFKHPSGLTLHKRIHTGENPYKFEECDKAFYWVLSFTKHMIIHRGEKPYKYQECGKAFKWSSNLTIHKRIHTGEKPCKCEECGKACKQSLGLTIQKRIHTEEKPYKCEECGSSNLTIYKKIHAGEKPYNCEKCGKAFYCSSNLIQNNIVHAEEKHYKCQECGKAFKKSLDLNVHKIIHSGEKPYRYEECGKITHSGEESYKCEECGKGFYCSSSLTKHMIVHTEEKLYKCEECGK [...]
+chr4-04	SwissProt	protein_match	266088	266192	74.000000	-	.	Target=Q969W8.1 179 218 +;percentID=50;Gap=M7 I3 M11 I2 M17 ;sequence=MAQESVMFSDVSVDFSQEEWECLNDDQRDLYRDVMLENYSNLVSMGHSISKPNVISYLEQGKEPWLADRELTRGQWPVLESRCETKKLFLKKEIYEIESTQWEIMEKLTRRDFQCSSFRDDWECNRQFKKELGSQGGHFNQLVFTHEDLPTLSHHPSFTLQQIINSKKKFCASKEYRKTFRHGSQFATHEIIHTIEKPYECKECGKSFRHPSRLTHHQKIHTGKKPFECKECGKTFICGSDLTRHHRIHTGEKPYECKECGKAFSSGSNFTRHQRIHTGEKPYECKECGKAFSSGSNFTQHQRIHTGEKPYECKECGNAFSQSSQLIKHQRIHTGEKPYECKECEKAFRSGSDLTRHQRIHT [...]
+chr4-04	SwissProt	protein_match	266088	266219	74.000000	-	.	Target=Q8IVC4.1 216 261 +;percentID=41;Gap=M28 I2 M16 ;sequence=MAGEAEAQLDPSLQGLVMFEDVTVYFSREEWGLLNVTQKGLYRDVMLENFALVSSLGLAPSRSPVFTQLEDDEQSWVPSWVDVTPVSRAEARRGFGLDGLCRVEDERAHPEHLKSYRVIQHQDTHSEGKPRRHTEHGAAFPPGSSCGQQQEVHVAEKLFKCSDCGKVFLKAFALLDHLITHSEERPFRCPTGRSAFKKSAHINPRKIHTGETAHVCNECGKAFSYPSKLRKHQKVHTGIKPFKCSDCGKTFNRKDALVLHQRIHTGERPYECSKCGKTFSVLSTLIRHRKVHIGERPYECTECGKFFKYNNSFILHQRVHTGERPFECKQCGKGYVTRSGLYQHWKVHTGERPYECSLCGKTFTTRSY [...]
+chr4-04	SwissProt	protein_match	266088	266231	74.000000	-	.	Target=Q6P1L6-2.1 205 254 +;percentID=36;Gap=M31 I2 M17 ;sequence=MLENYRNLLSLAEPKPEIYTCSSCLLAFSCQQFLSQHVLQIFLGLCAENHFHPGNSSPGHWKQQGQQYSHVSCWFENAEGQERGGGSKPWSARTEERETSRAFPSPLQRQSASPRKGNMVVETEPSSAQRPNPVQLDKGLKELETLRFGAINCREYEPDHNLESNFITNPRTLLGKKPYICSDCGRSFKDRSTLIRHHRIHSMEKPYVCSECGRGFSQKSNLSRHQRTHSEEKPYLCRECGQSFRSKSILNRHQWTHSEEKPYVCSECGRGFSEKSSFIRHQRTHSGEKPYVCLECGRSFCDKSTLRKHQRIHSGEKPYVCRECGRGFSQNSDLIKHQRTHLDEKPYVCRECGRGFCDKSTLIIHE [...]
+chr4-04	SwissProt	protein_match	266088	266171	76.000000	-	.	Target=Q49A33-2.2 54 82 +;percentID=53;Gap=M3 D1 M7 I2 M17 ;sequence=MHTGEKPYTCEECVKLLTNPQALLYTGAFILNKNFTNVKNAAKPLLNPHPLINKRIHTGEKPYTCEECGKAFYRSSHLTEHKNIHTGEKSYKCEECGNAFYRSSHLTKHKRIHSGQKPYKCEECGKAFRQSSALNEHKKIHTAEKPYKCKECGKAFRWSRSLNEHTNIHIGEKPYTCEECGKDFTWSSTLTVHQRIQTGEKHS
+chr4-04	SwissProt	protein_match	266088	266192	76.000000	-	.	Target=Q6J6I6.1 179 218 +;percentID=50;Gap=M7 I3 M11 I2 M17 ;sequence=MAQESVMFSDVSVDFSQEEWECLNDDQRDLYRDVMLENYSNLVSMGHSISKPNVISYLEQGKEPWLVDRELTRGQWPVLESRCETKKLFLKKEIYEIESTQWEIMEKLTRHDFQCSSFRDDWECNRQFKKELGSQGGHFNQLVFTHEDLPTLSHHPSFTLQQIINSKKKFCASKEYRKTFRHGSQFATHEIIHTTEKPYECKECGKSFRHPSRLTHHQKIHTGKKPFECKECGKTFICGSDLTRHHRIHTGEKPYECKECGKAFSSGSNFTRHQRIHTGEKPYECKECGKAFSSGSNFTQHQRIHTGEKPYECKECGNAFSQSSQLIKHQRIHTGEKPYECKECEKAFRSGSDLTRHQRIHT [...]
+chr4-04	SwissProt	protein_match	266088	266240	76.000000	-	.	Target=Q5VIY5-2.1 185 237 +;percentID=39;Gap=M35 I2 M16 ;sequence=MLKTLSSTGQGNTEVIHTGTLHRQASHHIGEFCFHEIEKDIHGFEFQWKEDETNGHAAPMTEIKELAGSTGQHDQRHAGNKRIKDQLGSSFHLHLPEPHIFQSEGKIGNQVEKSINNASSVSTSQRICCRPKTHISNKYGNNSLHSSLLTQKWEVHMREKSFECIQSFKSFNCSSLLKKHQIIHLEEKQCKCDVCGKVFNQKRYLACHRRCHTGEKPYKCNECGKTFGHNSSLFIHKALHTGEKPYECEECDKVFSRKSHLERHKRIHTGEKPYKCKVCDEAFAYNSYLAKHTILHTGEKPYTCNECGKVFNRLSTLARHHRLHTGEKPYKCEECDKVFSRKSHLERHRRIHSGEKPYKCEECCKV [...]
+chr4-04	SwissProt	protein_match	266088	266171	76.000000	-	.	Target=Q49A33.3 54 82 +;percentID=53;Gap=M3 D1 M7 I2 M17 ;sequence=MHTGEKPYTCEECVKLLTNPQALLYTGAFILNKNFTNVKNAAKPLLNPHPLINKRIHTGEKPYTCEECGKAFYRSSHLTEHKNIHTGEKSYKCEECGNAFYRSSHLTKHKRIHSGQKPYKCEECGKAFRQSSALNEHKKIHTAEKPYKCKECGKAFRWSRSLNEHTNIHIGEKPYTCEECGKDFTWSSTLTVHQRIQTGEKHS
+chr4-04	SwissProt	protein_match	266088	266159	77.000000	-	.	Target=Q6ZMY9.1 390 415 +;percentID=61;Gap=M8 I2 M16 ;sequence=MAMALPMPGPQEAVVFEDVAVYFTRIEWSCLAPDQQALYRDVMLENYGNLASLGFLVAKPALISLLEQGEEPGALILQVAEQSVAKASLCTDSRMEAGIMESPLQRKLSRQAGLPGTVWGCLPWGHPVGGHPAPPHPHGGPEDGSDKPTHPRAREHSASPRVLQEDLGRPVGSSAPRYRCVCGKAFRYNSLLLRHQIVHTGAKPFQCTECGKAFKQSSILLRHQLIHTEEKPFQCGECGKAFRQSTQLAAHHRVHTRERPYACGECGKAFSRSSRLLQHQKFHTGEKPFACTECGKAFCRRFTLNEHGRIHSGERPYRCLRCGQRFIRGSSLLKHHRLHAQEGAQDGGAGQGALLGAAQRPQAGDPPHE [...]
+chr4-04	SwissProt	protein_match	266088	266231	77.000000	-	.	Target=Q5RBQ3.1 330 380 +;percentID=45;Gap=M12 I3 M5 D1 M5 D1 M8 I2 M16 ;sequence=MAAAALVNTPQIPMVTEEFVKPSQGHVTFEDIAVYFSQEEWGLLDEAQRCLYHDVMLENFLLMASVGCLHGIEAEEAPSEQTISAQGVSQARTPKLGPSIPNAHSCEMCILVMKDILYLTEHQGTLPWQKPYTSVASGKWFSFGSNLQQHQNQDSGEKHIRKEESSALLLNSCKIPLSDNLFPCKDVEKDFPTILGLLQHQTTHSREEYAHRSRETFQQRRYKCEQVFNEKVHVTEHQRVHTGEKAYKRREYGKSLNSKYSFVEHQRTHNTEKPYVCNVCGKSFLHKQTLVGHQQRIHTRERSYVCIECGKSLSSKYSLVEHQRTHNGEKPYVCNVCGKSFRHKQTFVGH [...]
+chr4-04	SwissProt	protein_match	266088	266225	77.000000	-	.	Target=P18725.2 295 342 +;percentID=48;Gap=M11 D2 M7 I1 M2 I1 M7 I2 M17 ;sequence=MLQIKTEKEELDCGDDQNPKESSAVPLTDGASPEPQPQILQIKIKEEEPDYEYYLPTIKREMDPVPGAASPLAESEILQIKIKEEEPDSEDDGNSAATSAVTFRDWDNCWSDEENWDDSRPQLNQYNSDFPGSADTANTPAINTVLSRGNGLFVVNQEKRVATNSSCQSDTGHVDCSVGSEPSGFICCKCGDSFAHHSDLHTHLYACAGHNITSSFTNASEEGQHSHKNGGVLPREKPFKCTVCGKCFTLKNSLQLHHRIHTGEKPFTCTECGKSFAQSCSLQLHSRTHTGYNPYVCTECGKRFSSNSGLRRHMRTHTGVKPYACKECGKFFSDLSTLHRHQNSHKGEKP [...]
+chr4-04	SwissProt	protein_match	266088	266225	77.000000	-	.	Target=P18725-2.2 270 317 +;percentID=48;Gap=M11 D2 M7 I1 M2 I1 M7 I2 M17 ;sequence=MLQIKTEKEELDCGDDQNPKESSAVPLTDGASPEPQPQILQIKIKEEEPDYEYYLPTIKREMDPVPGAASPLAESEILQIKIKEEEPDSEDDGNSAATSAVTFRDWGSADTANTPAINTVLSRGNGLFVVNQEKRVATNSSCQSDTGHVDCSVGSEPSGFICCKCGDSFAHHSDLHTHLYACAGHNITSSFTNASEEGQHSHKNGGVLPREKPFKCTVCGKCFTLKNSLQLHHRIHTGEKPFTCTECGKSFAQSCSLQLHSRTHTGYNPYVCTECGKRFSSNSGLRRHMRTHTGVKPYACKECGKFFSDLSTLHRHQNSHKGEKPFICTECGKGFTLKDSLHRHQRTH [...]
+chr4-04	SwissProt	protein_match	266088	266159	77.000000	-	.	Target=Q92670.2 286 311 +;percentID=61;Gap=M8 I2 M16 ;sequence=MIMRELKADACLNSHMGAMWETNRSVKENSSQSKKYSTQIECLSPGSACRHFRSFHYHEATEPLEAINQLQKLCHQWLRPEIHSKKHILEMLVLEHFLTILPKGTQNWVQKHHPQLAKQALVLVERLQREPGGTKNEVTAHELGEEAVLLRGTTVAPGFKWKPAELEPMERILEHIQILALSEHKSTKDWKMAPKLIWPESQSLLTFEDMAVYFSEEEWQLLGPLEKTLYNDVMQDIYETAISLGKQRTGKIMGIEMASSFSKEEKKLTTCKQELPKLMDLHGKGHTGEKPFKCQDCGKIFRVSSDLIKHQRIHTEEKLYKCQQCDRRFRWSSGLNKHFMTHQGINPYRCSWYGKSISYDTNLQTHQRI [...]
+chr4-04	SwissProt	protein_match	266088	266249	77.000000	-	.	Target=Q8N8C0.1 25 80 +;percentID=35;Gap=M37 I2 M17 ;sequence=MQRNAMYLKNVAETACNFQLTQYQISHANQKPYECQICGKPFRKRAHLTQHNRIHTGGKPYECKECGKVFICCSTLIQHKRTHTSEKPYECLECRKTFRRSAHLIRHQRIHTGEKPYKCKQCWKAFASVSDLIDIGKFTLMRDFTNVQNVGRHLTIAQLLFSIREFTLVRSPLNVRNVAKHSIIAQHLLNTRELILMRNLMNVRNVKRLLGKVHILLNIKEFILVRNHMSVSNVGRLSLVFLILIDIREFTLVKNPMNVKNVVELLTIVQLLFNTREFTLVRRLMNISSVGRFLSPVQHLFNIREHILMKNLMNVSNARRPSSIMHILFDIKEFILVRNLINVSNVGRPLLLFLI
+chr4-04	SwissProt	protein_match	266088	266231	77.000000	-	.	Target=Q96SK3-2.3 178 227 +;percentID=38;Gap=M32 I2 M16 ;sequence=MHQRIYSGEKHYECKENGEAFSSGHQLTAPHTFESVEKPYKCEECGKAFSVHGRLTRHQGIHSGKKPYECNKCGKSFRLNSSLKIHQNIHTGEKPYKCKECGKAFSQRAHLAHHNRIHTGYKPFECKECGKSFRCASYLVIHERIHTGEKPYVCQECGKGFSYSHKLTIHRRVHTGEKPYECKECGKAFSVSGQLTQHLSIHSGKKPFECNKCGKSFRFISVLKAHQNIHSAEKPYECKECGKAFRHATSLIYHDRTHAGEKSYECKECGETFSHASHLIIHERIHTSDKPYECKRCGKAFHCASYLVRHESVHADGNPYMCEECGKAFNSSHELSIHHRVHTGEKPFKCNKCRRSFRLRSILEVHQRIHI
+chr4-04	SwissProt	protein_match	266088	266231	78.000000	-	.	Target=Q8N9F8.1 382 431 +;percentID=41;Gap=M32 D1 M2 I3 M13 ;sequence=MAVSHLPTMVQESVTFKDVAILFTQEEWGQLSPAQRALYRDVMLENYSNLVSLGLLGPKPDTFSQLEKREVWMPEDTPGGFCLDWMTMPASKKSTVKAEIPEEELDQWTIKERFSSSSHWKCASLLEWQCGGQEISLQRVVLTHPNTPSQEYDESGSTMSSSLHSDQSQGFQPSKNAFECSECGKVFSKSSTLNKHQKIHNEKNANQKIHIKEKRYECRECGKAFHQSTHLIHHQRIHTGEKPYECKECGKAFSVSSSLTYHQKIHTGEKPFECNLCGKAFIRNIHLAHHHRIHTGEKPFKCNICEKAFVCRAHLTKHQNIHSGEKPYKCNECGKAFNQSTSFLQHQRIHTGEKPFECNECG [...]
+chr4-04	SwissProt	protein_match	266088	266231	78.000000	-	.	Target=Q2M218.1 457 506 +;percentID=42;Gap=M32 I2 M16 ;sequence=MIESQEPVTFEDVAVDFTQEEWQQLNPAQKTLHRDVMLETYNHLVSVGCSGIKPDVIFKLEHGKDPWIIESELSRWIYPDRVKGLESSQQIISGELLFQREILERAPKDNSLYSVLKIWHIDNQMDRYQGNQDRVLRQVTVISRETLTDEMGSKYSAFGKMFNRCTDLAPLSQKFHKFDSCENSLKSNSDLLNYNRSYARKNPTKRFRCGRPPKYNASCSVPEKEGFIHTGMEPYGDSQCEKVLSHKQAHVQYKKFQAREKPNVCSMCGKAFIKKSQLIIHQRIHTGEKPYVCGDCRKAFSEKSHLIVHQRIHTGEKPYECTKYGRAFSRKSPFTVHQRVHTGEKPYECFECPKAFSQKSHLIIHQRV [...]
+chr4-04	SwissProt	protein_match	266088	266231	78.000000	-	.	Target=Q0VAW7.1 550 599 +;percentID=40;Gap=M32 I2 M16 ;sequence=MTKLQEMVTFRDVAVVFSEEELGLLDAAQWKLYREVMLENFRMLLSVAHQPFKPGLIAQLENGEQLWMVEAEAHAGGLSGRRNGHAVENAEDVEVNSLCPEDLSFCQTWPWGACTLPSGQEFIKRCQGSNGESQSQEASPRLVWAGMPMQISEDRNYGLPPAHEDSASMKNQEFPPPRSQQSQGEPYLGRPCVTCQWKGQQTSIRNHFCRYGSVCWSPYHSDNEELYSKGKSYGFHDDRGKTVKVLLLNQDFIELGPEPCPRTKNREAWGHDDNDHSSHTHQQCHSRGKPCTRSLSGEGCGDRSALHGHPGLEAGDEGADGSPPLQSSPRVCMEQVPRECSGNVHYGSPLNTCGCAHPGNTSQTCSIP [...]
+chr4-04	SwissProt	protein_match	266088	266231	78.000000	-	.	Target=Q0VAW7-2.1 544 593 +;percentID=40;Gap=M32 I2 M16 ;sequence=MVTFRDVAVVFSEEELGLLDAAQWKLYREVMLENFRMLLSVAHQPFKPGLIAQLENGEQLWMVEAEAHAGGLSGRRNGHAVENAEDVEVNSLCPEDLSFCQTWPWGACTLPSGQEFIKRCQGSNGESQSQEASPRLVWAGMPMQISEDRNYGLPPAHEDSASMKNQEFPPPRSQQSQGEPYLGRPCVTCQWKGQQTSIRNHFCRYGSVCWSPYHSDNEELYSKGKSYGFHDDRGKTVKVLLLNQDFIELGPEPCPRTKNREAWGHDDNDHSSHTHQQCHSRGKPCTRSLSGEGCGDRSALHGHPGLEAGDEGADGSPPLQSSPRVCMEQVPRECSGNVHYGSPLNTCGCAHPGNTSQTCSIPKQAV [...]
+chr4-04	SwissProt	protein_match	266088	266231	78.000000	-	.	Target=Q9UK10.2 482 531 +;percentID=42;Gap=M32 I2 M16 ;sequence=MTTLKEAVTFKDVAVVFTEEELRLLDLAQRKLYREVMLENFRNLLSVGHQSLHRDTFHFLKEEKFWMMETATQREGNLGGKIQMEMETVSESGTHEGLFSHQTWEQISSDLTRFQDSMVNSFQFSKQDDMPCQVDAGLSIIHVRQKPSEGRTCKKSFSDVSVLDLHQQLQSREKSHTCDECGKSFCYSSALRIHQRVHMGEKLYNCDVCGKEFNQSSHLQIHQRIHTGEKPFKCEQCGKGFSRRSGLYVHRKLHTGVKPHICEKCGKAFIHDSQLQEHQRIHTGEKPFKCDICCKSFRSRANLNRHSMVHMREKPFRCDTCGKSFGLKSALNSHRMVHTGEKRYKCEECGKRFIYRQDLYKHQIDHTG [...]
+chr4-04	SwissProt	protein_match	266088	266231	78.000000	-	.	Target=Q6P9A3-2.1 317 367 +;percentID=45;Gap=M12 I3 M5 D1 M5 D1 M7 I2 M17 ;sequence=MAEAALVNTPQGHVTFEDIAVYFSQEEWGLLDEAQRCLYHDVMLENFSLMASVGCLHGIEAEEAPSEQTLSAQGVSQARTPKLGPSIPNAHSCEMCILVMKDILYLSEHQGTLPWQKPYTSVASGKWFSFGSNLQQHQNQDSGEKHIRKEESSALLLNSCKIPLSDNLFPCKDVEKDFPTILGLLQHQTTHSRQEYAHRSRETFQQRRYKCEQVFNEKVHVTEHQRVHTGEKAYKRREYGKSLNSKYLFVEHQRTHNAEKPYVCNICGKSFLHKQTLVGHQQRIHTRERSYVCIECGKSLSSKYSLVEHQRTHNGEKPYVCNVCGKSFRHKQTFVGHQQRIHTGERPY [...]
+chr4-04	SwissProt	protein_match	266088	266231	78.000000	-	.	Target=Q6P9A3.1 330 380 +;percentID=45;Gap=M12 I3 M5 D1 M5 D1 M7 I2 M17 ;sequence=MAEAALVNTPQIPMVTEEFVKPSQGHVTFEDIAVYFSQEEWGLLDEAQRCLYHDVMLENFSLMASVGCLHGIEAEEAPSEQTLSAQGVSQARTPKLGPSIPNAHSCEMCILVMKDILYLSEHQGTLPWQKPYTSVASGKWFSFGSNLQQHQNQDSGEKHIRKEESSALLLNSCKIPLSDNLFPCKDVEKDFPTILGLLQHQTTHSRQEYAHRSRETFQQRRYKCEQVFNEKVHVTEHQRVHTGEKAYKRREYGKSLNSKYLFVEHQRTHNAEKPYVCNICGKSFLHKQTLVGHQQRIHTRERSYVCIECGKSLSSKYSLVEHQRTHNGEKPYVCNVCGKSFRHKQTFVGH [...]
+chr4-04	SwissProt	protein_match	266088	266231	79.000000	-	.	Target=Q08ER8.2 309 358 +;percentID=42;Gap=M32 I2 M16 ;sequence=MAASAQVSVTFEDVAVTFTQEEWGQLDAAQRTLYQEVMLETCGLLMSLGCPLFKPELIYQLDHRQELWMATKDLSQSSYPGDNTKPKTTEPTFSHLALPEEVLLQERLTQGASKNSQLGQSKDQDGPSEMQEVHLKIGIGPQRGKLLEKMSSERDGLGSDDGVCTKITQKQVSTEGDLYECDSHGPVTDALIREEKNSYKCEECGKVFKKNALLVQHERIHTQVKPYECTECGKTFSKSTHLLQHHIIHTGEKPYKCMECGKAFNRRSHLTRHQRIHSGEKPYKCSECGKAFTHRSTFVLHHRSHTGEKPFVCKECGKAFRDRPGFIRHYIIHTGEKPYECIECGKAFNRRSYLTWHQQIHTGVKPFE [...]
+chr4-04	SwissProt	protein_match	266088	266231	79.000000	-	.	Target=Q02525.2 407 456 +;percentID=40;Gap=M31 I2 M17 ;sequence=MRNLQPDSVENSLSQLPSRCLETRKRKRSYKKRPVTYSYWRRTQRNRARKHKAPVKGLVSFEDVSVDFTWDEWQDLDDSQRKLYRDVMLETYSSLESLGHCITKPEVIFKLEQGAEPWRAEDVPKQSRADVQKITELNETSQDNEERHLWHHAITYSNKSTEEKVKLGNIVNVSSNCVSNLTVKNGNSSGMRPVALTVWQSVLPPNKPDDTRIGEELDASLTSEPPIHAEHPGLYSRAPGTGQQFQCCMQEVTCNTKALWTKRFHIAHGSSKFGESEKVPDEVALHAQDVSWVRAETFECSICKKTFCTKCELMKHKKIHKGQQYYTCRDCEKTFIKESYHTDQRVHAGVGSHRCKQCEKCFHQKNQQ [...]
+chr4-04	SwissProt	protein_match	266088	266159	79.000000	-	.	Target=P10755.2 190 215 +;percentID=57;Gap=M7 I2 M17 ;sequence=MALAQGLVTFGDVAVDFSQEEWEFLDPAQKNLYRDVMWETYSNFISLDLESRFKTDTSSSDKGICEVYSLQWELIEKIKNLSPQGSGLSDDQECKHKTGLQKEPQEGYFGQLKITSEKVTYEKHSFLSEYQRVQNGEKFYECKECRKTFIRRSTLSQHLRIHTGEKPYKCKECGQPFRQRAHLIRHHKLHTGEKPYECKDCGKAFTVLQELTQHQRLHTGEKPYECKECGKAFRVHQQLARHQRIHTGEKPYECKECGKTFRQCTHLTRHQRLHTSEKLYECKECGKAFVCGPDLRVHQKIHFGEKPYACKDCGKSFRICQQLTVHQSIHTGEKPYECKECGKTFRLRQQLVRHQRIHTHERPYECLEC [...]
+chr4-04	SwissProt	protein_match	266088	266231	79.000000	-	.	Target=Q14587.2 890 939 +;percentID=44;Gap=M32 I2 M16 ;sequence=MATRVRTASIWVPPLQERNSSWDRIRKLQGQESILGQGTPGLQPLPGTPRQKQKSRRIEKVLEWLFISQEQPKITKSWGPLSFMDVFVDFTWEEWQLLDPAQKCLYRSVMLENYSNLVSLGYQHTKPDIIFKLEQGEELCMVQAQVPNQTCPNTVWKIDDLMDWHQENKDKLGSTAKSFECTTFGKLCLLSTKYLSRQKPHKCGTHGKSLKYIDFTSDYARNNPNGFQVHGKSFFHSKHEQTVIGIKYCESIESGKTVNKKSQLMCQQMYMGEKPFGCSCCEKAFSSKSYLLVHQQTHAEEKPYGCNECGKDFSSKSYLIVHQRIHTGEKLHECSECRKTFSFHSQLVIHQRIHTGENPYECCECGKV [...]
+chr4-04	SwissProt	protein_match	266088	266225	79.000000	-	.	Target=Q569E7.1 377 424 +;percentID=48;Gap=M15 I1 M6 D1 M5 I1 M1 I1 M18 ;sequence=MEQEDNQGVCEYQTSEDRGMDSDLENSEDREGDPEERGMGSNPWDTEDRGHLEQEVDSNPQDDDLRGDSRERDRASTVCSEGRLSEEERAILREEEDDQPGVADMALFPGLSESDSISRSPRGEEDEEEEDEEEESAGENRLIEEEDPLPTPVLPWRRHLSLGGRHRGDKPAHRRFHRLHHPMAMDLGELDSLMASIMDAPTICPDCGESFSPGAAFLQHQRIHRLAEAAAVASLEPFGLAGECGGVVGMMGMGMGVGMGVAGGFGAGPTLARPPREKPFRCGECGKGFSRNTYLTNHLRLHTGERPNLCADCGKSFSWRADLLKHRRLHTGEKPYPCPECGEAFSLSSH [...]
+chr4-04	SwissProt	protein_match	266088	266225	79.000000	-	.	Target=Q5TEC3.2 353 400 +;percentID=48;Gap=M15 I1 M6 D1 M5 I1 M1 I1 M18 ;sequence=MKQEDNQGVCAHQDSEDKGMGSDFEDSEDREGDPEEREMGSNPHDTNKREGHPEPEMGSNPQDSRHREAVPDICTEGQLSEEEGVSVRGEEDDQSGVADMAMFPGLSESDSISRSLREDDDESAGENRLEEEEEQPAPPVLPWRRHLSLGSRHRGDKPAHRRFHRLHHPMAVDLGELDSLVASIMDAPTICPDCGESFSPGAAFLQHQRIHRLAEAAAAASLEPFGLAGECDAMVGMMGVGVAGGFGAGPPLARPPREKPFRCGECGKGFSRNTYLTNHLRLHTGERPNLCADCGKSFSWRADLLKHRRLHTGEKPYPCPECGEAFSLSSHLLSHRRAHAAASGAGAAAL [...]
+chr4-04	SwissProt	protein_match	266088	266222	79.000000	-	.	Target=A0JPL0.1 495 538 +;percentID=44;Gap=M3 D3 M23 I2 M16 ;sequence=MNCHSVPLQGPVSFKDVTVDFTQEEWQRLDPAQKALYRDVMLENYCHFISVGFHITKPDMIRKLEQGEELWTERMFPSQSYLEDEEVLVKFRDYQDKPPTSIVIINHKKLIKERNNVYEKTLGNNHIISKTLFEYKSDGKVLKNISDFISRDINPVMGTLGDSSEWEESVLTSEQEKTHPVPTLYKQIGRNLSSSLELAQHQKTQIPEQRFECDECDSSFLMTEVAFPHDRAHRGVRDFNCSKDEIAFFEKSDLGIHPHNLMEKKCSTYNKYGKLLCRKSVFVMHPRSQVDERPFQCPYCGNSFRRKSYLIEHQRIHTGEKPYICSQCGKAFRQKTALTLHEKTHTDGKPYLCVDCGKSFRQ [...]
+chr4-04	SwissProt	protein_match	266088	266231	79.000000	-	.	Target=P24399.2 32 81 +;percentID=42;Gap=M31 I2 M17 ;sequence=MAEKPYKCDKCGKGFTRSSSLLVHHSVHTGEKPFKCDRCGKGFSQSSKLHIHKRVHTGEKPYACEECGMSFSQRSNLHIHQRVHTGERPYKCGECGKGFSQSSNLHIHRCTHTGEKPYQCYECGKGFSQSSDLRIHLRVHTGEKPYHCGKCGQGFSQSSKLLIHQRVHTGEKPYECSKCGKGFSQSSNLHIHQRVHRKELH
+chr4-04	SwissProt	protein_match	266088	266225	80.000000	-	.	Target=P17098.2 285 332 +;percentID=41;Gap=M30 I2 M16 ;sequence=MDPEDEGVAGVMSVGPPAARLQEPVTFRDVAVDFTQEEWGQLDPTQRILYRDVMLETFGHLLSIGPELPKPEVISQLEQGTELWVAERGTTQGCHPAWEPRSESQASRKEEGLPEEEPSHVTGREGFPTDAPYPTTLGKDRECQSQSLALKEQNNLKQLEFGLKEAPVQDQGYKTLRLRENCVLSSSPNPFPEISRGEYLYTYDSQITDSEHNSSLVSQQTGSPGKQPGENSDCHRDSSQAIPITELTKSQVQDKPYKCTDCGKSFNHNAHLTVHKRIHTGERPYMCKECGKAFSQNSSLVQHERIHTGDKPYKCAECGKSFCHSTHLTVHRRIHTGEKPYECQDCGRAFNQNSSLGRHKRTHTGEKP [...]
+chr4-04	SwissProt	protein_match	266088	266231	80.000000	-	.	Target=Q8N972.1 474 523 +;percentID=41;Gap=M13 D1 M10 I1 M7 I2 M17 ;sequence=MDSVVFEDVAVNFTQEEWALLGPSQKKLYRDVMQETFVNLASIGENWEEKNIEDHKNQGRKLRSHMVERLCERKEGSQFGETISQTPNPKPNKKTFTRVKPYECSVCGKDYMCHSSLNRHMRSHTEHRSYEYHKYGEKSYECKECGKRFSFRSSFRIHERTHTGEKPYKCKQCGKAFSWPSSFQIHERTHTGEKPYECKECGKAFIYHTTFRGHMRMHTGEKPYKCKECGKTFSHPSSFRNHERTHSGEKPYECKQCGKAFRYYQTFQIHERTHTGEKPYQCKQCGKALSCPTSFRSHERIHTGEKPYKCKKCGKAFSFPSSFRKHERIHTGEKPYDCKECGKAFISLPSYRRHM [...]
+chr4-04	SwissProt	protein_match	266088	266231	81.000000	-	.	Target=Q8N7K0.1 280 329 +;percentID=43;Gap=M14 D1 M9 I1 M7 I2 M17 ;sequence=MMFQDSVAFEDVAVTFTQEEWALLDPSQKNLCRDVMQETFRNLASIGKKWKPQNIYVEYENLRRNLRIVGERLFESKEGHQHGEILTQVPDDMLKKTTTGVKSCESSVYGEVGSAHSSLNRHIRDDTGHKAYEYQEYGQKPYKCKYCKKPFNCLSSVQTHERAHSGRKLYVCEECGKTFISHSNLQRHRIMHRGDGPYKCKFCGKALMFLSLYLIHKRTHTGEKPYQCKQCGKAFSHSSSLRIHERTHTGEKPYKCNECGKAFHSSTCLHAHKRTHTGEKPYECKQCGKAFSSSHSFQIHERTHTGEKPYECKECGKAFKCPSSVRRHERTHSRKKPYECKHCGKVLSYLTSFQNH [...]
+chr4-04	SwissProt	protein_match	266088	266231	81.000000	-	.	Target=Q8N7K0-2.1 245 294 +;percentID=43;Gap=M14 D1 M9 I1 M7 I2 M17 ;sequence=MQETFRNLASIGKKWKPQNIYVEYENLRRNLRIVGERLFESKEGHQHGEILTQVPDDMLKKTTTGVKSCESSVYGEVGSAHSSLNRHIRDDTGHKAYEYQEYGQKPYKCKYCKKPFNCLSSVQTHERAHSGRKLYVCEECGKTFISHSNLQRHRIMHRGDGPYKCKFCGKALMFLSLYLIHKRTHTGEKPYQCKQCGKAFSHSSSLRIHERTHTGEKPYKCNECGKAFHSSTCLHAHKRTHTGEKPYECKQCGKAFSSSHSFQIHERTHTGEKPYECKECGKAFKCPSSVRRHERTHSRKKPYECKHCGKVLSYLTSFQNHLGMHTGEISHKCKICGKAFYSPSSLQTHEKTHT [...]
+chr4-04	SwissProt	protein_match	266088	266231	81.000000	-	.	Target=Q14590-2.3 509 558 +;percentID=46;Gap=M32 I1 M1 I1 M15 ;sequence=MTKFQEAVTFKDVAVAFTEEELGLLDSAQRKLYRDVMLENFRNLVSVGHQSFKPDMISQLEREEKLWMKELQTQRGDRNQNEMATLHKAGLRCFSLGELSCWQIKRHIASKLARSQDSMINIEGKSSQFPKHHDSPCQVGAGESIQASVDDNCLVNHIGDHSSIIENQEFPTGKVPNSWSKIYLNETQNYQRSCKQTQMKNKLCIFAPYVDIFSCISHHHDDNIVHKRDKVHSNSDCGKDTLKVSPLTQRSIHTGQKTYQGNECEEAFNDSSSLELHKQVHLGKKSPACSTHEKDTSYSSGIPVQQSVRTGKKRYWCHECGKGFSQSSNLQTHQRVHTGEKPYTCHECGKSFNQSSHLYA [...]
+chr4-04	SwissProt	protein_match	266088	266231	81.000000	-	.	Target=Q14590.3 513 562 +;percentID=46;Gap=M32 I1 M1 I1 M15 ;sequence=MTKFQEAVTFKDVAVAFTEEELGLLDSAQRKLYRDVMLENFRNLVSVGHQSFKPDMISQLEREEKLWMKELQTQRGKHSGDRNQNEMATLHKAGLRCFSLGELSCWQIKRHIASKLARSQDSMINIEGKSSQFPKHHDSPCQVGAGESIQASVDDNCLVNHIGDHSSIIENQEFPTGKVPNSWSKIYLNETQNYQRSCKQTQMKNKLCIFAPYVDIFSCISHHHDDNIVHKRDKVHSNSDCGKDTLKVSPLTQRSIHTGQKTYQGNECEEAFNDSSSLELHKQVHLGKKSPACSTHEKDTSYSSGIPVQQSVRTGKKRYWCHECGKGFSQSSNLQTHQRVHTGEKPYTCHECGKSFNQSSHL [...]
+chr4-04	SwissProt	protein_match	266088	266225	81.000000	-	.	Target=Q96GC6.1 563 610 +;percentID=37;Gap=M30 I2 M16 ;sequence=MASRLPTAWSCEPVTFEDVTLGFTPEEWGLLDLKQKSLYREVMLENYRNLVSVEHQLSKPDVVSQLEEAEDFWPVERGIPQDTIPEYPELQLDPKLDPLPAESPLMNIEVVEVLTLNQEVAGPRNAQIQALYAEDGSLSADAPSEQIQQQGKHPGDPEAARQRFRQFRYKDMTGPREALDQLRELCHQWLQPKARSKEQILELLVLEQFLGALPVKLRTWVESQHPENCQEVVALVEGVTWMSEEEVLPAGQPAEGTTCCLEVTAQQEEKQEDAAICPVTVLPEEPVTFQDVAVDFSREEWGLLGPTQRTEYRDVMLETFGHLVSVGWETTLENKELAPNSDIPEEEPAPSLKVQESSRDCALSSTLE [...]
+chr4-04	SwissProt	protein_match	266088	266225	81.000000	-	.	Target=Q96GC6-2.1 531 578 +;percentID=37;Gap=M30 I2 M16 ;sequence=MASRLPTAWSCEPVTFEDVTLGFTPEEWGLLDLKQKSLYREVMLENYRNLVSVEYPELQLDPKLDPLPAESPLMNIEVVEVLTLNQEVAGPRNAQIQALYAEDGSLSADAPSEQIQQQGKHPGDPEAARQRFRQFRYKDMTGPREALDQLRELCHQWLQPKARSKEQILELLVLEQFLGALPVKLRTWVESQHPENCQEVVALVEGVTWMSEEEVLPAGQPAEGTTCCLEVTAQQEEKQEDAAICPVTVLPEEPVTFQDVAVDFSREEWGLLGPTQRTEYRDVMLETFGHLVSVGWETTLENKELAPNSDIPEEEPAPSLKVQESSRDCALSSTLEDTLQGGVQEVQDTVLKQMESAQEKDLPQKK [...]
+chr4-04	SwissProt	protein_match	266088	266225	81.000000	-	.	Target=Q96GC6-4.1 282 329 +;percentID=37;Gap=M30 I2 M16 ;sequence=MLQEPVTFQDVAVDFSREEWGLLGPTQRTEYRDVMLETFGHLVSVGWETTLENKELAPNSDIPEEEPAPSLKVQESSRDCALSSTLEDTLQGGVQEVQDTVLKQMESAQEKDLPQKKHFDNRESQANSGALDTNQVSLQKIDNPESQANSGALDTNQVLLHKIPPRKRLRKRDSQVKSMKHNSRVKIHQKSCERQKAKEGNGCRKTFSRSTKQITFIRIHKGSQVCRCSECGKIFRNPRYFSVHKKIHTGERPYVCQDCGKGFVQSSSLTQHQRVHSGERPFECQECGRTFNDRSAISQHLRTHTGAKPYKCQDCGKAFRQSSHLIRHQRTHTGERPYACNKCGKAFTQSSHLIGHQRTHNRTKRKKKQPTS
+chr4-04	SwissProt	protein_match	266088	266231	82.000000	-	.	Target=Q2M3X9.1 439 488 +;percentID=40;Gap=M32 I2 M16 ;sequence=MAMSQESLTFKDVFVDFTLEEWQQLDSAQKNLYRDVMLENYSHLVSVGHLVGKPDVIFRLGPGDESWMADGGTPVRTCAGEDRPEVWEVDEQIDHYKESQDKFLWQAAFIGKETLKDESGQECKICRKIIYLNTDFVSVKQRLPKYYSWERCSKHHLNFLGQNRSYVRKKDDGCKAYWKVCLHYNLHKAQPAERFFDPNQRGKALHQKQALRKSQRSQTGEKLYKCTECGKVFIQKANLVVHQRTHTGEKPYECCECAKAFSQKSTLIAHQRTHTGEKPYECSECGKTFIQKSTLIKHQRTHTGEKPFVCDKCPKAFKSSYHLIRHEKTHIRQAFYKGIKCTTSSLIYQRIHTSEKPQCSEHGKASDE [...]
+chr4-04	SwissProt	protein_match	266088	266231	82.000000	-	.	Target=Q6ZN19-2.1 227 276 +;percentID=45;Gap=M17 I1 M6 D1 M8 I2 M16 ;sequence=MLEGHESYDTENFYFREIRKNLQEVDFQWKDGEINYKEGPMTHKNNLTGQRVRHSQGDVENKHMENQLILRFQSGLGELQKFQTAEKIYGCNQIERTVNNCFLASPLQRIFPGVQTNISRKYGNDFLQLSLPTQDEKTHIREKPYIGNECGKAFRVSSSLINHQMIHTTEKPYRCNESGKAFHRGSLLTVHQIVHTRGKPYQCDVCGRIFRQNSDLVNHRRSHTGDKPYICNECGKSFSKSSHLAVHQRIHTGEKPYKCNRCGKCFSQSSSLATHQTVHTGDKPYKCNECGKTFKRNSSLTAHHIIHAGKKPYTCDVCGKVFYQNSQLVRHQIIHTGETPYKCNECGKVFRYRS [...]
+chr4-04	SwissProt	protein_match	266088	266231	82.000000	-	.	Target=B2KFW1-2.2 294 343 +;percentID=45;Gap=M17 I1 M6 D1 M8 I2 M16 ;sequence=MDDQDEGSWEPEETVEDCSGSGLAAEESLQGPRIAGGPALLQSRIAGVHWGFEETKVFLAILSESPFAEKLRTCHQNSQIYRAIAERLRALGFLRTLEQCRYRFKNLLRSYRKAKSSCPPGTCPFYEEMDSLMRARTVIRAVEMVGEATGLPGSGQSSTEADDQEAWGEMEDEDAVRLLTPDSQPADAGFELKREEEDQISEQDVLGDLPGALSRYTTKAVCQPCDWGEDHVNGNEGEWRNTWEECSSEEDLEKLIDHQGLYLTEKPYGCDTRAKSFSRKVHFFAPQRTHSSEKPYKCLGSGKSFSDRANLSTHQRIHIGEKPYRCLECGKSFNDPSNLITHQRTHTGEKPYKC [...]
+chr4-04	SwissProt	protein_match	266088	266231	82.000000	-	.	Target=B2KFW1.2 723 772 +;percentID=45;Gap=M17 I1 M6 D1 M8 I2 M16 ;sequence=MMAVASPPPEPEDLLIVKLEEDSWGSDSRPEKESHSPVPGPEVSRRCFRQFRYRDAAGPHEAFSQLWALCCRWLRPELRLKEQILELLVLEQFLSILPREVQTWVQARHPESGEEAVALVEDWHREAWAAGQQGLELCSEDSRSFEAVQEFQRFQLQPVTHGSEGQPRKQWVENARPDLSKMPPESLKESAVLTPQAPTVPKMASIGDWEVAGKSQETPSPSRQAKKEPCQDPAGGDRGDSACLGVPASKPSATSQQEQGPEIWGLSLINSGNGSAADDSLDSAQDKPVQAVAQADSRAWGEPCQWGAEDMKVSGVHWGYEETKTFLAILSESPFSEKLQTCHQNRQVYRAIAERL [...]
+chr4-04	SwissProt	protein_match	266088	266231	83.000000	-	.	Target=Q96JF6.3 458 507 +;percentID=40;Gap=M32 I2 M16 ;sequence=MKEWKSKMEISEEKKSARAASEKLQRQITQECELVETSNSEDRLLKHWVSPLKDAMRHLPSQESGIREMHIIPQKAIVGEIGHGCNEGEKILSAGESSHRYEVSGQNFKQKSGLTEHQKIHNINKTYECKECEKTFNRSSNLIIHQRIHTGNKPYVCNECGKDSNQSSNLIIHQRIHTGKKPYICHECGKDFNQSSNLVRHKQIHSGGNPYECKECGKAFKGSSNLVLHQRIHSRGKPYLCNKCGKAFSQSTDLIIHHRIHTGEKPYECYDCGQMFSQSSHLVPHQRIHTGEKPLKCNECEKAFRQHSHLTEHQRLHSGEKPYECHRCGKTFSGRTAFLKHQRLHAGEKIEECEKTFSKDEELREEQR [...]
+chr4-04	SwissProt	protein_match	266088	266231	83.000000	-	.	Target=Q5T5D7.1 297 346 +;percentID=45;Gap=M18 I1 M5 D1 M8 I2 M16 ;sequence=MISFQESVTFQDVAVDFTAEEWQLLDCAERTLYWDVMLENYRNLISVGCPITKTKVILKVEQGQEPWMVEGANPHESSPESDYPLVDEPGKHRESKDNFLKSVLLTFNKILTMERIHHYNMSTSLNPMRKKSYKSFEKCLPPNLDLLKYNRSYTVENAYECSECGKAFKKKFHFIRHEKNHTRKKPFECNDCGKAYSRKAHLATHQKIHNGERPFVCNDCGKAFMHKAQLVVHQRLHTGEKPYECSQCGKTFTWNSSFNQHVKSHTLEKSFECKECGKTFRYSSSLYKHSRFHTGEKPYQCIICGKAFGNTSVLVTHQRIHTGEKPYSCIECGKAFIKKSHLLRHQITHTGEKPYE [...]
+chr4-04	SwissProt	protein_match	266088	266231	83.000000	-	.	Target=Q96RE9.1 519 568 +;percentID=45;Gap=M17 I1 M6 D1 M7 I2 M17 ;sequence=MMKSQGLVSFKDVAVDFTQEEWQQLDPSQRTLYRDVMLENYSHLVSMGYPVSKPDVISKLEQGEEPWIIKGDISNWIYPDEYQADGRQDRKSNLHNSQSCILGTVSFHHKILKGVTRDGSLCSILKVCQGDGQLQRFLENQDKLFRQVTFVNSKTVTEASGHKYNPLGKIFQECIETDISIQRFHKYDAFKKNLKPNIDLPSCYKSNSRKKPDQSFGGGKSSSQSEPNSNLEKIHNGVIPFDDNQCGNVFRNTQSLIQYQNVETKEKSCVCVTCGKAFAKKSQLIVHQRIHTGKKPYDCGACGKAFSEKFHLVVHQRTHTGEKPYDCSECGKAFSQKSSLIIHQRVHTGEKPYECS [...]
+chr4-04	SwissProt	protein_match	266088	266231	83.000000	-	.	Target=A6NK53.2 450 499 +;percentID=42;Gap=M32 I2 M16 ;sequence=MTKFQEMVTFKDVAVVFTREELGLLDLAQRKLYQDVMLENFRNLLSVGYQPFKLDVILQLGKEDKLRMMETEIQGDGCSGHKNQNEIDTLQEVRLRFLSYEDLICWQIWEQFTSKLTSNQDLIINLQGKRSKLLKQGDSPCQVWTGESSQVSEDENYVIKLQGESSNSIKNQELPLRTTWDFWRKMYLREPQNYQSRCQQIDVKNKLCKCDHCVRQRIAHQHDDHGVHKREKAFSHNNCGKDCVKESSQHSIIQSGEQTSDENGKGLSVGSNLELHQQLHLRDKPHVNVEYGKGIGYSSGLPRHQCFHIGEKCYRNGDSGEGFSQGSHLQPHQRVSTGENLYRCQVYARSSNQNSCLPSHELTHPGEK [...]
+chr4-04	SwissProt	protein_match	266088	266231	83.000000	-	.	Target=Q6ZMS4.2 135 184 +;percentID=40;Gap=M32 I2 M16 ;sequence=MMESSELTPKQEIFKGSESSNSTSGGLFGVVPGGTETGDVCEDTFKELEGQPSNEEGSRLESDFLEIIDEDKKKSTKDRYEEYKEVEEHPPLSSSPVEHEGVLKGQKSYRCDECGKAFYWSSHLIGHRRIHTGEKPYECNECGKTFRQTSQLIVHLRTHTGEKPYECSECGKAYRHSSHLIQHQRLHNGEKPYKCNECAKAFNQSSKLFDHQRTHTGEKPYECKECGAAFSRSKNLVRHQFLHTGKKPYKCNECGRAFCSNRNLIDHQRTHTGEKPYKCNECGKAFSRSKCLIRHQSLHTGEKPYKCSECGKAFNQISQLVEHERIHTGEKPFKCSECGKAFGLSKCLIRHQRLHTSEKPYKCNECGK [...]
+chr4-04	SwissProt	protein_match	266088	266231	83.000000	-	.	Target=Q96RE9-3.1 535 584 +;percentID=45;Gap=M17 I1 M6 D1 M7 I2 M17 ;sequence=MMVPAETSSSGLLEEQKMKSQGLVSFKDVAVDFTQEEWQQLDPSQRTLYRDVMLENYSHLVSMGYPVSKPDVISKLEQGEEPWIIKGDISNWIYPDEYQADGRQDRKSNLHNSQSCILGTVSFHHKILKGVTRDGSLCSILKVCQGDGQLQRFLENQDKLFRQVTFVNSKTVTEASGHKYNPLGKIFQECIETDISIQRFHKYDAFKKNLKPNIDLPSCYKSNSRKKPDQSFGGGKSSSQSEPNSNLEKIHNGVIPFDDNQCGNVFRNTQSLIQYQNVETKEKSCVCVTCGKAFAKKSQLIVHQRIHTGKKPYDCGACGKAFSEKFHLVVHQRTHTGEKPYDCSECGKAFSQKS [...]
+chr4-04	SwissProt	protein_match	266088	266231	83.000000	-	.	Target=Q96RE9-2.1 534 583 +;percentID=45;Gap=M17 I1 M6 D1 M7 I2 M17 ;sequence=MVPAETSSSGLLEEQKMKSQGLVSFKDVAVDFTQEEWQQLDPSQRTLYRDVMLENYSHLVSMGYPVSKPDVISKLEQGEEPWIIKGDISNWIYPDEYQADGRQDRKSNLHNSQSCILGTVSFHHKILKGVTRDGSLCSILKVCQGDGQLQRFLENQDKLFRQVTFVNSKTVTEASGHKYNPLGKIFQECIETDISIQRFHKYDAFKKNLKPNIDLPSCYKSNSRKKPDQSFGGGKSSSQSEPNSNLEKIHNGVIPFDDNQCGNVFRNTQSLIQYQNVETKEKSCVCVTCGKAFAKKSQLIVHQRIHTGKKPYDCGACGKAFSEKFHLVVHQRTHTGEKPYDCSECGKAFSQKSS [...]
+chr4-04	SwissProt	protein_match	266088	266186	84.000000	-	.	Target=Q5JVG2.1 369 403 +;percentID=51;Gap=M17 I2 M16 ;sequence=MTKSLESVSFKDVTVDFSRDEWQQLDLAQKSLYREVMLENYFNLISVGCQVPKPEVIFSLEQEEPCMLDGEIPSQSRPDGDIGFGPLQQRMSEEVSFQSEININLFTRDDPYSILEELWKDDEHTRKCGENQNKPLSRVVFINKKTLANDSIFEYKDIGEIVHVNTHLVSSRKRPHNCNSCGKNLEPIITLYNRNNATENSDKTIGDGDIFTHLNSHTEVTACECNQCGKPLHHKQALIQQQKIHTRESLYLFSDYVNVFSPKSHAFAHESICAEEKQHECHECEAVFTQKSQLDGSQRVYAGICTEYEKDFSLKSNRQKTPYEGNYYKCSDYGRAFIQKSDLFRCQRIHSGEKPYEYSECEKNLPQN [...]
+chr4-04	SwissProt	protein_match	266088	266231	84.000000	-	.	Target=P10078.3 460 509 +;percentID=46;Gap=M31 I2 M17 ;sequence=MQGMASVVSCEPWALLGRGALCTKARPGGGPAAGTVVAPGSPDRGRPRSRNSLASQDQQGAVTSGTAHKALFSRDTNFLQEINRKQEAAPTGTRHKAKSQGLVTFGDVAVVFSQEEWEWLNSEQRSLYWKVMLDNYRNLASLGLCASQPDMITSLEQGRDPWMMKRKMRKGQHLDLKAMQETKEFPPKDLSEETLFLAVLRKQLLPHRPKCSMVRAAWEGGAVFTTHRGLKTNSGLARDSPAQLVSAQRSFCKSVTWENCGDRGSVGQQSVQEAQDLLPRQDSHAERVTGRTWSTKLECSTFRDQDSECTFERNEQETVTPNRAFSEGRDGMCIESGRWFHLNSSDERSHNCDSGKSFSSNPVVVKET [...]
+chr4-04	SwissProt	protein_match	266088	266231	84.000000	-	.	Target=Q6N045.2 289 338 +;percentID=41;Gap=M12 D1 M11 I1 M8 I2 M16 ;sequence=MGIVEKASSSSDSVTFEDVAVNFTQEEWTLLDPSQKKLYRDVMWETFRNLATIGTKQKEWNIEEQYKNQGRNLRNHMVERLCESKEGSHGGEGFSQIANLSLNKKTPSGGKLWESSVCGKVLSHHSSLNRHIRSYTRHKLYKCQEYGEKPYKCKKCGKPFSYLQSFKKHKRTHSAGIVYKCKACGKAFSCQRSFQIHGRTHTGDKPFKCKECGKAFRYHQSAQKHEKAHTGEKPYKCKECGKPFIYRHSARAHERNHTVQKRYECKQCGKTYISSVGFQAHERTHTGEKPYECKKCGKVFVYHNSAQRHEKTHTGEKPYKCKECGKAFSYHCTAQKHERNHTAQKHYECKLCGKT [...]
+chr4-04	SwissProt	protein_match	266088	266231	85.000000	-	.	Target=Q9BS34.1 195 244 +;percentID=40;Gap=M31 I2 M17 ;sequence=MDSVSFEDVAVAFTQEEWALLDPSQKNLYRDVMQEIFRNLASVGNKSEDQNIQDDFKNPGRNLSSHVVERLFEIKEGSQYGETFSQDSNLNLNKKVSTGVKPCECSVCGKVFICHSALHRHILSHIGNKLFECEECPEKLYHCKQCGKAFISLTSVDRHMVTHTSNGPYKGPVYEKPFDFPSVFQMPQSTYTGEKTYKCKHCDKAFNYSSYLREHERTHTGEKPYACKKCGKSFTFSSSLRQHERSHTGEKPYECKECGKAFSRSTYLGIHERTHTGEKPYECIKCGKAFRCSRVLRVHERTHSGEKPYECKQCGKAFKYSSNLCEHERTHTGVKPYGCKECGKSFTSSSALRSHERTHTGEKPYECK [...]
+chr4-04	SwissProt	protein_match	266088	266231	85.000000	-	.	Target=P10754.2 264 313 +;percentID=42;Gap=M32 I2 M16 ;sequence=MSADSQSIAATENEEKSHEVPGNVQHCGDMLSGQEETVPLGTSQESTHIKAEPEEPHSEGASREDRTPGTQRWMSPCPGPKDKGPFLPGGVVPSPWTPVLSRGGRTRERKMAAALLTAWSQMPVTFEDVALYLSQEEWGRLDHTQQNFYRDVLQGKNGLALGAVEMGKVVPALAVATLEDTKSIRTRARWAPGEDPKCGQHVASGPGTKLTRDTGKAGQLKPAPSESRPLKTPEDSGPEKPSEGEEALKSGEEGLVPDGDTGKKTYKCEQCGKGFSWHSHLVTHRRTHTGEKPYTCTDCGKRFGRSSHLIQHQIIHTGEKPYTCPSCWKSFSHHSTLIQHQRIHTGEKPYVCDRCAKRFTRRSDLVTH [...]
+chr4-04	SwissProt	protein_match	266088	266231	85.000000	-	.	Target=P10754-2.2 257 306 +;percentID=42;Gap=M32 I2 M16 ;sequence=MSADSQSIAATENEEKSHEVPGNVQHCGDMLSGQEETVPLGTSQESTHIKAEPEEPHSEGASREDRTPGTQRWMSPCPGPKDKVVPSPWTPVLSRGGRTRERKMAAALLTAWSQMPVTFEDVALYLSQEEWGRLDHTQQNFYRDVLQGKNGLALGAVEMGKVVPALAVATLEDTKSIRTRARWAPGEDPKCGQHVASGPGTKLTRDTGKAGQLKPAPSESRPLKTPEDSGPEKPSEGEEALKSGEEGLVPDGDTGKKTYKCEQCGKGFSWHSHLVTHRRTHTGEKPYTCTDCGKRFGRSSHLIQHQIIHTGEKPYTCPSCWKSFSHHSTLIQHQRIHTGEKPYVCDRCAKRFTRRSDLVTHQGTHT [...]
+chr4-04	SwissProt	protein_match	266088	266231	85.000000	-	.	Target=Q32KN0.1 157 206 +;percentID=42;Gap=M32 I2 M16 ;sequence=MEQEQKLLVSDSNGLTKKESLKNTITGDESKNNLKTVQFSNSKADKERASKWSRSDGPENYKDEDTKEILLTGSQGGKTERDDSYENDSNLGSQRNCTEKEEEQPNHWGWSPGDHTGPAGQQNPSFGDKPYKCSECWKSFSNSSHLRIHQRTHSGEKPYRCSECGKCFSNSSHLIQHLRTHTGEKPYQCGECGKSFSNTSHLIIHERTHTGEKPYKCPECAKSLSSSSHLIQHHRSHTGEKPYECPLCGKCFSHSYVLVEHQRTHTGEKPYKCPDCGKSFSQSSSLIRHQRTHTGEKPYKCPECGKGFGCNSTLIKHQRIHTGEKPYQCIECGKNFSRSSNLVTHQKMHTDDKTYQSSEYEESLSQNY [...]
+chr4-04	SwissProt	protein_match	266088	266231	85.000000	-	.	Target=Q7L2R6.2 241 290 +;percentID=40;Gap=M32 I2 M16 ;sequence=MALPQGLLTFRDVAIEFSQEEWKCLDPAQRTLYRDVMLENYRNLVSLDISSKCMMKEFSSTAQGNREVFHAGTSQRHESHHNGDFCFQDIDKDIHDIEFQWQEDERNGHEALMTKIKKLTGSTERYDQNYAGNKPVKYQLGFSFHSHLPELHIFHTEEKIDNQVVKSIHDASLVSTAQRISCRPETHISNDYGNNFLNSSLFTQKQEVHMREKSFQCNDSGKAYNCSSLLRKHQLIHLGEKQYKCDICGKVFNSKRYVARHRRCHTGEKPYKCNECGKTFSQTYYLTCHRRLHTGEKPYKCEECDKAFHFKSKLQIHRRIHTGEKPYKCNECGKTFSQKSYLTCHRRLHTGEKPYKCNECGKTFSRKS [...]
+chr4-04	SwissProt	protein_match	266088	266180	85.000000	-	.	Target=P51522-2.2 5 36 +;percentID=57;Gap=M6 D1 M8 I2 M16 ;sequence=MSHLAQHRRIHTGEKPYKCNECGKVFNQISHLAQHQRIHTGEKPYKCNECGKVFHQISHLAQHRTIHTGEKPYECNKCGKVFSRNSYLVQHLIIHTGEKPYRCNVCGKVFHHISHLAQHQRIHTGEKPYKCNECGKVFSHKSSLVNHWRIHTGEKPYKCNECGKVFSHKSSLVNHWRIHTGEKPYKCNECGKVFSRNSYLAQHLIIHAGEKPYKCDECDKAFSQNSHLVQHHRIHTGEKPYKCDECGKVFSQNSYLAYHWRIHTGEKAYKCNECGKVFGLNSSLAHHRKIHTGEKPFKCNECGKAFSMRSSLTNHHAIHTGEKHFKCNECGKLFRDNSYLVRHQRFHAGKKSNTCN
+chr4-04	SwissProt	protein_match	266088	266231	86.000000	-	.	Target=A2RRD8.1 327 376 +;percentID=42;Gap=M32 I2 M16 ;sequence=MALSQGLLTFRDVAIEFSQEEWKCLDPAQRTLYRDVMLENYRNLVSLDISSKCMMNTLSSTGQGNTEVIHTGTLQRQASYHIGAFCSQEIEKDIHDFVFQWQEDETNDHEAPMTEIKKLTSSTDRYDQRHAGNKPIKGQLESRFHLHLRRHRRIHTGEKPYKCEECEKVFSCKSHLEIHRIIHTGEKPYKCKVCDKAFKHDSHLAKHTRIHRGDKHYTCNECGKVFDQKATLACHHRSHTGEKPYKCNECGKTFSQTSHLVYHHRLHTGEKPYKCNECGKTFARNSVLVIHKAVHTAEKPYKCNECGKVFKQRATLAGHRRVHTGEKPYRCEECDKVFSRKSHLERHRRIHTGEKPYKCKVCDKAFRS [...]
+chr4-04	SwissProt	protein_match	266088	266225	86.000000	-	.	Target=Q96SQ5.1 380 427 +;percentID=41;Gap=M29 I2 M17 ;sequence=MAAAVPRRPTQQGTVTFEDVAVNFSQEEWCLLSEAQRCLYRDVMLENLALISSLGCWCGSKDEEAPCKQRISVQRESQSRTPRAGVSPKKAHPCEMCGLILEDVFHFADHQETHHKQKLNRSGACGKNLDDTAYLHQHQKQHIGEKFYRKSVREASFVKKRKLRVSQEPFVFREFGKDVLPSSGLCQEEAAVEKTDSETMHGPPFQEGKTNYSCGKRTKAFSTKHSVIPHQKLFTRDGCYVCSDCGKSFSRYVSFSNHQRDHTAKGPYDCGECGKSYSRKSSLIQHQRVHTGQTAYPCEECGKSFSQKGSLISHQLVHTGEGPYECRECGKSFGQKGNLIQHQQGHTGERAYHCGECGKSFRQKFCFI [...]
+chr4-04	SwissProt	protein_match	266088	266231	86.000000	-	.	Target=A0JNB1.1 478 527 +;percentID=44;Gap=M32 I2 M16 ;sequence=MPSQDSDFPQKEHEKMTEFQEAVTFKDVAVVFTEEELGLLDSAQRKLYQDVMVENFRNLVSVGHVPFKADMVSQLETEEKLWTMERETQRNGHSSEIHSAVTSGSKIPNEMETLGKVMFKYLSCEELSCWQIWKHTTNDLTLQRKSSWFLHGDSLQVSEDENHIMNHKGDHFGCLENQEFLIPTAQASCGSRCLSESENPSRGKQMSVKNHLHVCEGFTKNSPLSDPGKTDAKQTPCKGERPHPCRVCGEGFSHGAVLPVHQVDPGEKCSHLQTHQRIHPGGTVNKCPKSGDGFHQNSFHPHHSNPTGEKSYRCDSCGKAFGSSTGLIIHYRTHTGEKPYRCEACGKCFSQSSNFQCHQRVHTEEKPY [...]
+chr4-04	SwissProt	protein_match	266088	266231	86.000000	-	.	Target=A8MT65.2 486 535 +;percentID=41;Gap=M14 D1 M9 I1 M8 I2 M16 ;sequence=MAVMDLSSPWALTKQDSACFHLRNAEEERMIAVFLTTWLQEPMTFKDVAVEFTQEEWMMLDSAQRSLYRDVMLENYRNLTSVEYQLYRLTVISPLDQEEIRNMKKRIPQAICPDQKIQPKTKESTVQKILWEEPSNAVKMIKLTMHNWSSTLREDWECHKIRKQHKIPGGHWRQMIYAPKKTVPQELFRDYHELEENSKLGSKLIFSQSIFTSKHCQKCYSEIGCLKHNSIINNYVKNSISEKLYESHECDTTLWHFQRNQTVQKEYTYSKHGMHFTHNMFPVPNNLHMAQNACECNKDETLCHQSSLKKQGQTHTEKKHECNQCGKAFKRISNLTLYKKSHMGEKQYECKECGKV [...]
+chr4-04	SwissProt	protein_match	266088	266231	87.000000	-	.	Target=Q5R5S6.1 297 346 +;percentID=43;Gap=M13 I1 M10 D1 M7 I2 M17 ;sequence=MAHALVTFRDVTIDFSQKEWECLDTTQRKLYRDVMLENYNNLVSLGYSGSKPDVITLLEQGKEPCVAARDVTGRQYPGLLSRHKTKKLSSEKDIHDISLSKGSKIEKSKTLHLKGSIFRNEWQSKSEFEGQQGLKERSISQKKIIFKKMSTDRKHPSFTLNQRIHNSEKSCDSNLVQHGKIDSDVKHDCKECGSTFNNVYQLTLHQKIHTGEKSCKCEKCGKVFSHSYQLTLHQRFHTGEKPYECQECGKTFILYPQLNRHQKIHTGKKPYMCKKCDKSFFSRLELTQHKRIHTGKKSYECKECGKVFQLVFYFKEHERIHTGKKPYECKECGKAFSVCGQLTRHQKIHTGVKPY [...]
+chr4-04	SwissProt	protein_match	266088	266246	87.000000	-	.	Target=O95201.2 301 355 +;percentID=40;Gap=M37 I2 M16 ;sequence=MSADGGGIQDTQDKETPPEVPDRGHPHQEMPSKLGEAVPSGDTQESLHIKMEPEEPHSEGASQEDGAQGAWGWAPLSHGSKEKALFLPGGALPSPRIPVLSREGRTRDRQMAAALLTAWSQMPVTFEDVALYLSREEWGRLDHTQQNFYRDVLQKKNGLSLGFPFSRPFWAPQAHGKGEASGSSRQAGDEKEWRGACTGAVEVGQRVQTSSVAALGNVKPFRTRAGRVQWGVPQCAQEAACGRSSGPAKDSGQPAEPDRTPDAAPPDPSPTEPQEYRVPEKPNEEEKGAPESGEEGLAPDSEVGRKSYRCEQCGKGFSWHSHLVTHRRTHTGEKPYACTDCGKRFGRSSHLIQHQIIHTGEKPYTCPA [...]
+chr4-04	SwissProt	protein_match	266088	266225	87.000000	-	.	Target=Q7Z340.3 475 522 +;percentID=42;Gap=M12 I1 M9 D1 M8 I2 M16 ;sequence=MPAPVGRRSPPSPRSSMAAVALRDSAQGMTFEDVAIYFSQEEWELLDESQRFLYCDVMLENFAHVTSLGYCHGMENEAIASEQSVSIQVRTSKGNTPTQKTHLSEIKMCVPVLKDILPAAEHQTTSPVQKSYLGSTSMRGFCFSADLHQHQKHYNEEEPWKRKVDEATFVTGCRFHVLNYFTCGEAFPAPTDLLQHEATPSGEEPHSSSSKHIQAFFNAKSYYKWGEYRKASSHKHTLVQHQSVCSEGGLYECSKCEKAFTCKNTLVQHQQIHTGQKMFECSECEESFSKKCHLILHKIIHTGERPYECSDREKAFIHKSEFIHHQRRHTGGVRHECGECRKTFSYKSNLIEHQRV [...]
+chr4-04	SwissProt	protein_match	266088	266231	87.000000	-	.	Target=P10078-2.3 600 649 +;percentID=47;Gap=M12 I1 M11 D1 M8 I2 M16 ;sequence=MQGMASVVSCEPWALLGRGALCTKARPGGGPAAGTVVAPGSPDRGRPRSRNSLASQDQQGAVTSGTAHKALFSRDTNFLQEINRKQEAAPTGTRHKAKSQGLVTFGDVAVVFSQEEWEWLNSEQRSLYWKVMLDNYRNLASLGLCASQPDMITSLEQGRDPWMMKRKMRKGQHLDLKAMQETKEFPPKDLSEETLFLAVLRKQLLPHRPKCSMVRAAWEGGAVFTTHRGLKTNSGLARDSPAQLVSAQRSFCKSVTWENCGDRGSVGQQSVQEAQDLLPRQDSHAERVTGRTWSTKLECSTFRDQDSECTFERNEQETVTPNRAFSEGRDGMCIESGRWFHLNSSDERSHNCD [...]
+chr4-04	SwissProt	protein_match	266088	266225	87.000000	-	.	Target=Q7Z340-2.3 402 449 +;percentID=42;Gap=M12 I1 M9 D1 M8 I2 M16 ;sequence=MENEAIASEQSVSIQVRTSKGNTPTQKTHLSEIKMCVPVLKDILPAAEHQTTSPVQKSYLGSTSMRGFCFSADLHQHQKHYNEEEPWKRKVDEATFVTGCRFHVLNYFTCGEAFPAPTDLLQHEATPSGEEPHSSSSKHIQAFFNAKSYYKWGEYRKASSHKHTLVQHQSVCSEGGLYECSKCEKAFTCKNTLVQHQQIHTGQKMFECSECEESFSKKCHLILHKIIHTGERPYECSDREKAFIHKSEFIHHQRRHTGGVRHECGECRKTFSYKSNLIEHQRVHTGERPYECGECGKSFRQSSSLFRHQRVHSGERPYQCCECGKSFRQIFNLIRHRRVHTGEMPYQCSDCGKS [...]
+chr4-04	SwissProt	protein_match	266088	266225	87.000000	-	.	Target=Q9NYW8.1 373 420 +;percentID=43;Gap=M30 I2 M16 ;sequence=MNTLQGPVSFKDVAVDFTQEEWQQLDPDEKITYRDVMLENYSHLVSVGYDTTKPNVIIKLEQGEEPWIMGGEFPCQHSPEAWRVDDLIERIQENEDKHSRQAACINSKTLTEEKENTFSQIYMETSLVPSSIIAHNCVSCGKNLESISQLISSDGSYARTKPDECNECGKTYHGEKMCEFNQNGDTYSHNEENILQKISILEKPFEYNECMEALDNEAVFIAHKRAYIGEKPYEWNDSGPDFIQMSNFNAYQRSQMEMKPFECSECGKSFCKKSKFIIHQRAHTGEKPYECNVCGKSFSQKGTLTVHRRSHLEEKPYKCNECGKTFCQKLHLTQHLRTHSGEKPYECSECGKTFCQKTHLTLHQRNHS [...]
+chr4-04	SwissProt	protein_match	266088	266222	87.000000	-	.	Target=Q8TC21.2 196 242 +;percentID=44;Gap=M26 I1 M4 I1 M15 ;sequence=MPSPDSMTFEDIIVDFTQEEWALLDTSQRKLFQDVMLENISHLVSIGKQLCKSVVLSQLEQVEKLSTQRISLLQGREVGIKHQEIPFIQHIYQKGTSTISTMRSHTQEDPFLCNDLGEDFTQHIALTQNVITYMRTKHFVSKKFGKIFSDWLSFNQHKEIHTKCKSYGSHLFDYAFIQNSALRPHSVTHTREITLECRVCGKTFSKNSNLRRHEMIHTGEKPHGCHLCGKAFTHCSDLRKHERTHTGEKPYGCHLCGKAFSKSSNLRRHEMIHTREKAQICHLCGKAFTHCSDLRKHERTHLGDKPYGCLLCGKAFSKCSYLRQHERTHNGEKPYECHLCGKAFSHCSHLRQHERSHNGEKP [...]
+chr4-04	SwissProt	protein_match	266088	266222	87.000000	-	.	Target=Q8TC21-2.2 126 172 +;percentID=44;Gap=M26 I1 M4 I1 M15 ;sequence=MPSPDSMTFEDIIVDFTQEEWALLDTSQRKLFQDVMLENISHLVSIGEDFTQHIALTQNVITYMRTKHFVSKKFGKIFSDWLSFNQHKEIHTKCKSYGSHLFDYAFIQNSALRPHSVTHTREITLECRVCGKTFSKNSNLRRHEMIHTGEKPHGCHLCGKAFTHCSDLRKHERTHTGEKPYGCHLCGKAFSKSSNLRRHEMIHTREKAQICHLCGKAFTHCSDLRKHERTHLGDKPYGCLLCGKAFSKCSYLRQHERTHNGEKPYECHLCGKAFSHCSHLRQHERSHNGEKPHGCHLCGKAFTESSVLKRHERIHTGEKPYECHVCGKAFTESSDLRRHERTHTGEKPYECHLCGKAFNH [...]
+chr4-04	SwissProt	protein_match	266088	266231	88.000000	-	.	Target=Q9NQZ8.1 184 233 +;percentID=42;Gap=M31 I2 M17 ;sequence=MKELDPKNDISEDKLSVVGEATGGPTRNGARGPGSEGVWEPGSWPERPRGDAGAEWEPLGIPQGNKLLGGSVPACHELKAFANQGCVLVPPRLDDPTEKGACPPVRRGKNFSSTSDLSKPPMPCEEKKTYDCSECGKAFSRSSSLIKHQRIHTGEKPFECDTCGKHFIERSSLTIHQRVHTGEKPYACGDCGKAFSQRMNLTVHQRTHTGEKPYVCDVCGKAFRKTSSLTQHERIHTGEKPYACGDCGKAFSQNMHLIVHQRTHTGEKPYVCPECGRAFSQNMHLTEHQRTHTGEKPYACKECGKAFNKSSSLTLHQRNHTGEKPYVCGECGKAFSQSSYLIQHQRFHIGVKPFECSECGKAFSKNSS [...]
+chr4-04	SwissProt	protein_match	266088	266231	88.000000	-	.	Target=Q86WZ6.1 490 539 +;percentID=44;Gap=M32 I2 M16 ;sequence=MPSQNYDLPQKKQEKMTKFQEAVTFKDVAVVFSREELRLLDLTQRKLYRDVMVENFKNLVAVGHLPFQPDMVSQLEAEEKLWMMETETQRSSKHQNKMETLQKFALKYLSNQELSCWQIWKQVASELTRCLQGKSSQLLQGDSIQVSENENNIMNPKGDSSIYIENQEFPFWRTQHSCGNTYLSESQIQSRGKQIDVKNNLQIHEDFMKKSPFHEHIKTDTEPKPCKGNEYGKIISDGSNQKLPLGEKPHPCGECGRGFSYSPRLPLHPNVHTGEKCFSQSSHLRTHQRIHPGEKLNRCHESGDCFNKSSFHSYQSNHTGEKSYRCDSCGKGFSSSTGLIIHYRTHTGEKPYKCEECGKCFSQSSNFQ [...]
+chr4-04	SwissProt	protein_match	266088	266231	88.000000	-	.	Target=Q9XSR1.1 370 419 +;percentID=45;Gap=M18 I1 M5 D1 M7 I2 M17 ;sequence=MAVKQLLPAGSQVLVSFEDVAVLLSREEWGRLGPAQRGLYSDVMLETYRNLISLGLQGSKPDVISRLEKGEEPWAPYSAKIEESWIRSHESESFQSLMEKKGLTPKQEISKAMGFRRAKSEYVRNVSKESEFEEMNKTKGKLKNYRKKSAEEELKKSFSQKNSSRPVTLTHVKSPVSGKGQKSSSLEVDYTVDASPVRFHRASTGGSLHQNVPCVNDFQQSQDLINLQCLHLGERACQTDLFMKAPRQSSVLSENQRVNNPEKSFECTECRRLFSPSKALSQHQRSHTGEIPCESGGCGRTSHHCSVLSQHQEVHHGGESHTCAECGKAFKAHSYFIQQHNTHTGERPYECSECAH [...]
+chr4-04	SwissProt	protein_match	266088	266225	88.000000	-	.	Target=B2RUI1.2 505 552 +;percentID=44;Gap=M12 I1 M9 D1 M8 I2 M16 ;sequence=MPRARPREETSATWSLLPLQNPMAVAMHRNIAQVPLTSEPVMELGLDVSFEDVAIHFSQEEWVLLDKAQRLLYCSVMLENLALVASLGSCTGMGDEDVTCEPAEEVVCNTSPSPQETHLLEIPVPALEEAWHQNEFLSTQPVQTLDLSRTGSGLKEDSNRHWKSYSGEKSCERDSHRATAMSSCRSHGLTEPFIRGKDGEEALSSIAGVQQQGACHSEQPSTGCLQQQATCIREQPYSSAKCGQALLNGEKHCKDGECQKGSSCKHTLVQCPSASSEKRPSECSKYEKAFSCSYKHAQHQDSHSGKRTHEHSQHEKPFSKKCRLNTQDRICPQERPYKCTECGKAFIYKSELVYHQ [...]
+chr4-04	SwissProt	protein_match	266088	266231	89.000000	-	.	Target=Q95K52.1 405 454 +;percentID=42;Gap=M31 I2 M17 ;sequence=MGSLRHAWFNTSFSFPSSGFSGFCASPIEESHGALISSCNSRTMTDGLVTFRDVAIDFSQEEWECLDPAQRDLYVDVMLENYSNLVSLDLESTTYETKKIFSEKDIFEINFSQWEMKEKSKTLGLEASIFRNNWKCKSIFKGLKGCQEGYFSQMIISYEEIPSYRKSKSLTPHQSIHNTEKPYVYKERVNACSHGSKLVQHKRTHTAEKHFECKECGKNYLSAYQLNVHQRFHTGEKPYECKECGKTFSWGSSLVKHERIHTGEKPYECKECGKAFSRGYHLTQHQKIHIGVKSYKCKECGKAFFWGSSLAKHEIIHTGEKPYQCKECGKAFSRGYQLTQHQKIHTGKKPYECKICGKAFCWGYQLTR [...]
+chr4-04	SwissProt	protein_match	266088	266231	89.000000	-	.	Target=Q6ECI4-2.2 192 241 +;percentID=40;Gap=M32 I2 M16 ;sequence=MKSQEEVEVAGIKLCKAMSLGSVTFTDVAIDFSQDEWEWLNLAQRSLYKKVMLENYRNLVSVGKSIFLLLPPHDSVVFYAIIRISHSFPQHRQFLYVFLHAGLCISKPDVISLLEQEKDPWVIKGGMNRGLCPGEKPYECIECGKAFSQSAHLAQHQRIHTGEKPFECTECGKAFSQNAHLVQHQRVHTGEKPYQCKQCNKAFSQLAHLAQHQRVHTGEKPYECIECGKAFSDCSSLAHHRRIHTGKRPYECIDCGKAFRQNASLIRHRRYYHTGEKPFDCIDCGKAFTDHIGLIQHKRIHTGERPYKCNVCGKAFSHGSSLTVHQRIHTGEKPYECNICEKAFSHRGSLTLHQRVHTGEKPYECK [...]
+chr4-04	SwissProt	protein_match	266088	266237	89.000000	-	.	Target=Q16587.2 271 322 +;percentID=40;Gap=M33 I2 M17 ;sequence=MEIPAPEPEKTALSSQDPALSLKENLEDISGWGLPEARSKESVSFKDVAVDFTQEEWGQLDSPQRALYRDVMLENYQNLLALGPPLHKPDVISHLERGEEPWSMQREVPRGPCPEWELKAVPSQQQGICKEEPAQEPIMERPLGGAQAWGRQAGALQRSQAAPGRRTCHGLGRPVEEFPLRCPLFAQQRVPEGGPLLDTRKNVQATEGRTKAPARLCAGENASTPSEPEKFPQVRRQRGAGAGEGEFVCGECGKAFRQSSSLTLHRRWHSREKAYKCDECGKAFTWSTNLLEHRRIHTGEKPFFCGECGKAFSCHSSLNVHQRIHTGERPYKCSACEKAFSCSSLLSMHLRVHTGEKPYRCGECGKAF [...]
+chr4-04	SwissProt	protein_match	266088	266237	89.000000	-	.	Target=Q16587-3.2 239 290 +;percentID=40;Gap=M33 I2 M17 ;sequence=MEIPAPEPEKTALSSQDPALSLKENLEDISGWGLPEARSKESVSFKDVAVDFTQEEWGQLDSPQRALYRDVMLENYQNLLALEWELKAVPSQQQGICKEEPAQEPIMERPLGGAQAWGRQAGALQRSQAAPGRRTCHGLGRPVEEFPLRCPLFAQQRVPEGGPLLDTRKNVQATEGRTKAPARLCAGENASTPSEPEKFPQVRRQRGAGAGEGEFVCGECGKAFRQSSSLTLHRRWHSREKAYKCDECGKAFTWSTNLLEHRRIHTGEKPFFCGECGKAFSCHSSLNVHQRIHTGERPYKCSACEKAFSCSSLLSMHLRVHTGEKPYRCGECGKAFNQRTHLTRHHRIHTGEKPYQCGSCGKAFTC [...]
+chr4-04	SwissProt	protein_match	266088	266231	89.000000	-	.	Target=Q8N7M2.3 429 478 +;percentID=42;Gap=M31 I2 M17 ;sequence=MESRSVAQAGVQWCDLGSLQAPPPGFTLFSCLSLLSSWDYSSGFSGFCASPIEESHGALISSCNSRTMTDGLVTFRDVAIDFSQEEWECLDPAQRDLYVDVMLENYSNLVSLDLESKTYETKKIFSENDIFEINFSQWEMKDKSKTLGLEASIFRNNWKCKSIFEGLKGHQEGYFSQMIISYEKIPSYRKSKSLTPHQRIHNTEKSYVCKECGKACSHGSKLVQHERTHTAEKHFECKECGKNYLSAYQLNVHQRFHTGEKPYECKECGKTFSWGSSLVKHERIHTGEKPYECKECGKAFSRGYHLTQHQKIHIGVKSYKCKECGKAFFWGSSLAKHEIIHTGEKPYKCKECGKAFSRGYQLTQHQKI [...]
+chr4-04	SwissProt	protein_match	266088	266225	89.000000	-	.	Target=Q13398-4.2 345 392 +;percentID=48;Gap=M30 I2 M6 I1 M4 D1 M5 ;sequence=MISAYCNLHLLGSSDSPASASQVAGTTGMRHHAQGSVTFEDVAVYFSWEEWDLLDEAQKHLYFDVMLENFALTSSLGCWCGVEHEETPSEQRISGERVPQFRTSKEGSSSQNADSCEICCLVLRDILHLAEHQGTNCGQKLHTCGKQFYISANLQQHQRQHITEAPFRSYVDTASFTQSCIVHVSEKPFTCREIRKDFLANMRFLHQDATQTGEKPNNSNKCAVAFYSGKSHHNWGKCSKAFSHIDTLVQDQRILTREGLFECSKCGKACTRRCNLIQHQKVHSEERPYECNECGKFFTYYSSFIIHQRVHTGERPYACPECGKSFSQIYSLNSHRKVHTGERPYECGECGKSFS [...]
+chr4-04	SwissProt	protein_match	266088	266225	89.000000	-	.	Target=Q13398.2 341 388 +;percentID=48;Gap=M30 I2 M6 I1 M4 D1 M5 ;sequence=MLGFPPGRPQLPVQLRPQTRMATALRDPASGSVTFEDVAVYFSWEEWDLLDEAQKHLYFDVMLENFALTSSLGCWCGVEHEETPSEQRISGERVPQFRTSKEGSSSQNADSCEICCLVLRDILHLAEHQGTNCGQKLHTCGKQFYISANLQQHQRQHITEAPFRSYVDTASFTQSCIVHVSEKPFTCREIRKDFLANMRFLHQDATQTGEKPNNSNKCAVAFYSGKSHHNWGKCSKAFSHIDTLVQDQRILTREGLFECSKCGKACTRRCNLIQHQKVHSEERPYECNECGKFFTYYSSFIIHQRVHTGERPYACPECGKSFSQIYSLNSHRKVHTGERPYECGECGKSFSQRSNLM [...]
+chr4-04	SwissProt	protein_match	266088	266225	89.000000	-	.	Target=Q13398-3.2 353 400 +;percentID=48;Gap=M30 I2 M6 I1 M4 D1 M5 ;sequence=MRTLRQREVEYFSKATQLVRGSTKDRGAQVPIATEVLFKLTQGSVTFEDVAVYFSWEEWDLLDEAQKHLYFDVMLENFALTSSLGCWCGVEHEETPSEQRISGERVPQFRTSKEGSSSQNADSCEICCLVLRDILHLAEHQGTNCGQKLHTCGKQFYISANLQQHQRQHITEAPFRSYVDTASFTQSCIVHVSEKPFTCREIRKDFLANMRFLHQDATQTGEKPNNSNKCAVAFYSGKSHHNWGKCSKAFSHIDTLVQDQRILTREGLFECSKCGKACTRRCNLIQHQKVHSEERPYECNECGKFFTYYSSFIIHQRVHTGERPYACPECGKSFSQIYSLNSHRKVHTGERPYEC [...]
+chr4-04	SwissProt	protein_match	266088	266225	89.000000	-	.	Target=Q13398-6.2 321 368 +;percentID=48;Gap=M30 I2 M6 I1 M4 D1 M5 ;sequence=MATALRDPASGSVTFEDVAVYFSWEEWDLLDEAQKHLYFDVMLENFALTSSLGCWCGVEHEETPSEQRISGERVPQFRTSKEGSSSQNADSCEICCLVLRDILHLAEHQGTNCGQKLHTCGKQFYISANLQQHQRQHITEAPFRSYVDTASFTQSCIVHVSEKPFTCREIRKDFLANMRFLHQDATQTGEKPNNSNKCAVAFYSGKSHHNWGKCSKAFSHIDTLVQDQRILTREGLFECSKCGKACTRRCNLIQHQKVHSEERPYECNECGKFFTYYSSFIIHQRVHTGERPYACPECGKSFSQIYSLNSHRKVHTGERPYECGECGKSFSQRSNLMQHRRVHTGERPYECSECG [...]
+chr4-04	SwissProt	protein_match	266088	266225	89.000000	-	.	Target=Q13398-5.2 280 327 +;percentID=48;Gap=M30 I2 M6 I1 M4 D1 M5 ;sequence=MLENFALTSSLGCWCGVEHEETPSEQRISGERVPQFRTSKEGSSSQNADSCEICCLVLRDILHLAEHQGTNCGQKLHTCGKQFYISANLQQHQRQHITEAPFRSYVDTASFTQSCIVHVSEKPFTCREIRKDFLANMRFLHQDATQTGEKPNNSNKCAVAFYSGKSHHNWGKCSKAFSHIDTLVQDQRILTREGLFECSKCGKACTRRCNLIQHQKVHSEERPYECNECGKFFTYYSSFIIHQRVHTGERPYACPECGKSFSQIYSLNSHRKVHTGERPYECGECGKSFSQRSNLMQHRRVHTGERPYECSECGKSFSQNFSLIYHQRVHTGERPHECNECGKSFSRSSSLIHHR [...]
+chr4-04	SwissProt	protein_match	266088	266225	89.000000	-	.	Target=Q13398-2.2 332 379 +;percentID=48;Gap=M30 I2 M6 I1 M4 D1 M5 ;sequence=MLENFALTSSLGLISSWSHVVAQLGLGEVPSVLHRMFMTPASARWDQRGPGLHEWHLGKGMSSGCWCGVEHEETPSEQRISGERVPQFRTSKEGSSSQNADSCEICCLVLRDILHLAEHQGTNCGQKLHTCGKQFYISANLQQHQRQHITEAPFRSYVDTASFTQSCIVHVSEKPFTCREIRKDFLANMRFLHQDATQTGEKPNNSNKCAVAFYSGKSHHNWGKCSKAFSHIDTLVQDQRILTREGLFECSKCGKACTRRCNLIQHQKVHSEERPYECNECGKFFTYYSSFIIHQRVHTGERPYACPECGKSFSQIYSLNSHRKVHTGERPYECGECGKSFSQRSNLMQHRRVHT [...]
+chr4-04	SwissProt	protein_match	266088	266237	89.000000	-	.	Target=Q16587-4.2 199 250 +;percentID=40;Gap=M33 I2 M17 ;sequence=MPSPPFSPRAGPPLHKPDVISHLERGEEPWSMQREVPRGPCPEWELKAVPSQQQGICKEEPAQEPIMERPLGGAQAWGRQAGALQRSQAAPGRRTCHGLGRPVEEFPLRCPLFAQQRVPEGGPLLDTRKNVQATEGRTKAPARLCAGENASTPSEPEKFPQVRRQRGAGAGEGEFVCGECGKAFRQSSSLTLHRRWHSREKAYKCDECGKAFTWSTNLLEHRRIHTGEKPFFCGECGKAFSCHSSLNVHQRIHTGERPYKCSACEKAFSCSSLLSMHLRVHTGEKPYRCGECGKAFNQRTHLTRHHRIHTGEKPYQCGSCGKAFTCHSSLTVHEKIHSGDKPFKCSDCEKAFNSRSRLTLHQRTHT [...]
+chr4-04	SwissProt	protein_match	266088	266237	89.000000	-	.	Target=Q16587-2.2 200 251 +;percentID=40;Gap=M33 I2 M17 ;sequence=MLENYQNLLALGPPLHKPDVISHLERGEEPWSMQREVPRGPCPEWELKAVPSQQQGICKEEPAQEPIMERPLGGAQAWGRQAGALQRSQAAPGRRTCHGLGRPVEEFPLRCPLFAQQRVPEGGPLLDTRKNVQATEGRTKAPARLCAGENASTPSEPEKFPQVRRQRGAGAGEGEFVCGECGKAFRQSSSLTLHRRWHSREKAYKCDECGKAFTWSTNLLEHRRIHTGEKPFFCGECGKAFSCHSSLNVHQRIHTGERPYKCSACEKAFSCSSLLSMHLRVHTGEKPYRCGECGKAFNQRTHLTRHHRIHTGEKPYQCGSCGKAFTCHSSLTVHEKIHSGDKPFKCSDCEKAFNSRSRLTLHQRTH [...]
+chr4-04	SwissProt	protein_match	266088	266231	89.000000	-	.	Target=Q8BPP0.1 149 195 +;percentID=44;Gap=M6 D3 M22 I2 M17 ;sequence=MAMYLTREEWRPLDPTQRDLYRDVMQENYGNVVSLDFEIRSENEANPKQEFSDDVEFATMSEEPLENAEKNPGSEEAFESGDQAERPWGDLTAEEWVSYPLQQVTDLLVHKEAHAGIRYHICSQCGKAFSQISDLNRHQKTHTGDRPYKCYECGKGFSRSSHLIQHQRTHTGERPYDCNECGKSFGRSSHLIQHQTIHTGEKPHKCTECGKSFCRLSHLIQHQRTHSGEKPYECEECGKSFSRSSHLAQHQRTHTGEKPYECHECGRGFSERSDLIKHYRVHTGERPYKCDECGKNFSQNSDLVRHRRAHTGEKPYHCNECGENFSRISHLVQHQRTHTGEKPYECTACGKSFSRSSHLITH [...]
+chr4-04	SwissProt	protein_match	266088	266240	90.000000	-	.	Target=Q9HBT8.1 461 513 +;percentID=43;Gap=M35 I2 M16 ;sequence=METDLAEMPEKGALSSQDSPHFQEKSTEEGEVAALRLTARSQETVTFKDVAMDFTPEEWGKLDPAQRDVMLENYRNLVSLWLPVSKPESYNLENGKEPLKLERKAPKSSYSDMETRPQSKDSTSVQDFSKAESCKVAIIDRLTRNSVYDSNLEAALECENWLENQQGNQERHLREMFTHMNSLSEETDHKHDVYWKSFNQKSVLITEDRVPKGSYAFHTLEKSLKQKSNLMKKQRTYKEKKPHKCNDCGELFTYHSVLIRHQRVHTGEKPYTCNECGKSFSHRANLTKHQRTHTRILFECSECKKTFTESSSLATHQRIHVGERPYECNECGKGFNRSTHLVQHQLIHTGVKPYECNECDKAFIHSSA [...]
+chr4-04	SwissProt	protein_match	266088	266231	90.000000	-	.	Target=Q7Z3V5.3 221 270 +;percentID=42;Gap=M31 I2 M17 ;sequence=MPHLLVTFRDVAIDFSQEEWECLDPAQRDLYRDVMLENYSNLISLDLESSCVTKKLSPEKEIYEMESLQWENMGKRINHHLQYNGLGDNMECKGNLEGQEASQEGLYMCVKITCEEKATESHSTSSTFHRIIPTKEKLYKCKECRQGFSYLSCLIQHEENHNIEKCSEVKKHRNTFSKKPSYIQHQRIQTGEKPYECMECGKAFGRTSDLIQHQKIHTNEKPYQCNACGKAFIRGSQLTEHQRVHTGEKPYECKKCGKAFSYCSQYTLHQRIHSGEKPYECKDCGKAFILGSQLTYHQRIHSGEKPYECKECGKAFILGSHLTYHQRVHTGEKPYICKECGKAFLCASQLNEHQRIHTGEKPYECKEC [...]
+chr4-04	SwissProt	protein_match	266088	266231	90.000000	-	.	Target=Q8N184-2.3 363 412 +;percentID=47;Gap=M17 I1 M6 D1 M7 I2 M17 ;sequence=MAQGSVSFNDVTVDFTQEEWQHLDHAQKTLYMDVMLENYCHLISVGCHMTKPDVILKLERGEEPWTSFAGHTCLEENWKAEDFLVKFKEHQEKYSRSVVSINHKKLVKEKSKIYEKTFTLGKNPVNSKNLPPEYDTHGRILKNVSELIISNLNPARKRLSEYNGYGKSLLSTKQETTHPEVKSHNQSARAFSHNEVLMQYQKTETPAQSFGYNDCEKSFLQRGGLITHSRPYKGENPSVYNKKRRATNIEKKHTCNECGKSFCRKSVLILHQGIHSEEKPYQCHQCGNAFRRKSYLIDHQRTHTGEKPFVCNECGKSFRLKTALTDHQRTHTGEKSYECLQCRNAFRLKSHLIR [...]
+chr4-04	SwissProt	protein_match	266088	266231	90.000000	-	.	Target=Q6NX49.1 518 567 +;percentID=47;Gap=M18 I1 M5 D1 M8 I2 M16 ;sequence=MEARSMLVPPQASVCFEDVAMAFTQEEWEQLDLAQRTLYREVTLETWEHIVSLGLFLSKSDVISQLEQEEDLCRAEQEAPRDWKATLEENRLNSEKDRAREELSHHVEVYRSGPEEPPSLVLGKVQDQSNQLREHQENSLRFMVLTSERLFAQREHCELELGGGYSLPSTLSLLPTTLPTSTGFPKPNSQVKELKQNSAFINHEKNGADGKHCESHQCARAFCQSIYLSKLGNVETGKKNPYEYIVSGDSLNYGSSLCFHGRTFSVKKSDDCKDYGNLFSHSVSLNEQKPVHFGKSQYECDECRETCSESLCLVQTERSGPGETPFRCEERCAAFPMASSFSDCNIIQTTEKPSVC [...]
+chr4-04	SwissProt	protein_match	266088	266231	90.000000	-	.	Target=Q06732.2 691 740 +;percentID=44;Gap=M32 I2 M16 ;sequence=MNKVDQKFQGSVSFKDVTVGFTQEEWQHLDPSQRALYRDVMLENYSNLVSVGYCAHKPEVIFRLEQGEEPWRLEEEFPSQSFPEVWTADHLKERSQENQSKHLWEVVFINNEMLTKEQGNVIGIPFNMDVSSFPSRKMFCQYDSRGMSFNTVSELVISKINYLGKKSDEFNACGKLLLNIKHDETHTREKNEVLKNRNTLSHRENTLQHEKIQTLDHNFEYSICQETLLEKAVFNTRKRENAEENNCDYNEFGRTFCDSSSLLFHQIPPSKDSHYEFSDCEKFLCVKSTLSKHDGVPVKHYDCGESGNNFRRKLCLSQLQKGDKGEKHFECNECGKAFWEKSHLTRHQRVHTGEKHFQCNQCGKTFWE [...]
+chr4-04	SwissProt	protein_match	266088	266231	90.000000	-	.	Target=Q8N184.3 363 412 +;percentID=47;Gap=M17 I1 M6 D1 M7 I2 M17 ;sequence=MAQGSVSFNDVTVDFTQEEWQHLDHAQKTLYMDVMLENYCHLISVGCHMTKPDVILKLERGEEPWTSFAGHTCLEENWKAEDFLVKFKEHQEKYSRSVVSINHKKLVKEKSKIYEKTFTLGKNPVNSKNLPPEYDTHGRILKNVSELIISNLNPARKRLSEYNGYGKSLLSTKQETTHPEVKSHNQSARAFSHNEVLMQYQKTETPAQSFGYNDCEKSFLQRGGLITHSRPYKGENPSVYNKKRRATNIEKKHTCNECGKSFCRKSVLILHQGIHSEEKPYQCHQCGNAFRRKSYLIDHQRTHTGEKPFVCNECGKSFRLKTALTDHQRTHTGEKSYECLQCRNAFRLKSHLIRHQ [...]
+chr4-04	SwissProt	protein_match	266088	266231	90.000000	-	.	Target=Q6JLC9.1 270 319 +;percentID=42;Gap=M32 I2 M16 ;sequence=MAHGLVTFSDVAIDFSQEEWACLDSRQRDLYWDVMLENYSNLVSLDLESPYGTKSLPTEKGIYEINLSKWNSNGKSKSLGLDWMCEGEFEGPQGPRESCFNQMIINYEKTPTCRENTSVRPHQRLHTRENSYECKECGKAFSRGYQLTQHQKIHTGEKPYECKECKKAFRWGNQLTQHQKIHTGEKPYECKDCGKAFRWGSSLVIHKRIHTGEKPYECKDCEKAFRRGDELTQHQRFHTGEKDYECKDCGKTFSRVYKLIQHKRIHSGEKPYECKDCGKAFICGSSLVQHKRIHTGEKPYECQECGKAFTRVNYLTQHQKIHTGEKPHECKECGKAFRWGSSLVKHERIHTGEKPYKCTECGKAFNCG [...]
+chr4-04	SwissProt	protein_match	266088	266231	90.000000	-	.	Target=Q8N184-1.3 332 381 +;percentID=47;Gap=M17 I1 M6 D1 M7 I2 M17 ;sequence=MDVMLENYCHLISVGCHMTKPDVILKLERGEEPWTSFAGHTCLEENWKAEDFLVKFKEHQEKYSRSVVSINHKKLVKEKSKIYEKTFTLGKNPVNSKNLPPEYDTHGRILKNVSELIISNLNPARKRLSEYNGYGKSLLSTKQETTHPEVKSHNQSARAFSHNEVLMQYQKTETPAQSFGYNDCEKSFLQRGGLITHSRPYKGENPSVYNKKRRATNIEKKHTCNECGKSFCRKSVLILHQGIHSEEKPYQCHQCGNAFRRKSYLIDHQRTHTGEKPFVCNECGKSFRLKTALTDHQRTHTGEKSYECLQCRNAFRLKSHLIRHQRTHTGEKPYECNDCGKSFRQKTTLSLHQR [...]
+chr4-04	SwissProt	protein_match	266088	266231	91.000000	-	.	Target=Q96SE7.1 595 644 +;percentID=49;Gap=M17 I1 M6 D1 M8 I2 M16 ;sequence=MALTQGQVTFRDVAIEFSQEEWTCLDPAQRTLYRDVMLENYRNLASLGISCFDLSIISMLEQGKEPFTLESQVQIAGNPDGWEWIKAVITALSSEFVMKDLLHKGKSNTGEVFQTVMLERQESQDIEGCSFREVQKNTHGLEYQCRDAEGNYKGVLLTQEGNLTHGRDEHDKRDARNKLIKNQLGLSLQSHLPELQLFQYEGKIYECNQVEKSFNNNSSVSPPQQMPYNVKTHISKKYLKDFISSLLLTQGQKANNWGSPYKSDGCGMVFPQNSHLASHQRSHTKEKPYKCYECGKAFRTRSNLTTHQVIHTGEKRYKCNECGKVFSRNSQLSQHQKIHTGEKPYKCNECGKVFTQ [...]
+chr4-04	SwissProt	protein_match	266088	266231	91.000000	-	.	Target=A2T812.1 527 576 +;percentID=48;Gap=M13 I2 M9 D2 M8 I2 M16 ;sequence=MNSSSRSQILLRWKSDKAQSGPYNVEKEILTSRFLRDTETCRQNFRNFPYPDLAGPRKALSQLRELCLKWLRPEIHSKEQILELLVLEQFLTILPGEVRTWVKSQYPESSEEAVTLVEDLTQILEEEAPQNSTLSQDTPEEDPRGKHAFQTGWLNDLVTKESMTFKDVAVDITQEDWELMRPVQKELYKTVTLQNYWNMVSLGLTVYRPTVIPILEEPWMVIKEILEGPSPEWETKAQACTPVEDMSKLTKEETQTIKLEDSYDYDDRLERRATGGFWKIHTNERGFSLKSALSQEYDPTEECLSKYDIYRNNFEKHSNLIVQFDTQLDNKTSVYNEGRATFNHVSYGIVHRKILP [...]
+chr4-04	SwissProt	protein_match	266088	266231	91.000000	-	.	Target=Q9HBT7.1 527 576 +;percentID=48;Gap=M13 I2 M9 D2 M8 I2 M16 ;sequence=MNSSSRSQILLRWKSDKAQSGPYNVEKEILTSRFLRDTETCRQNFRNFPYPDLAGPRKALSQLRELCLKWLRPEIHSKEQILELLVLEQFLTILPGEVRTWVKSQYPESSEEAVTLVEDLTQILEEEAPQNSTLSQDTPEEDPRGKHAFQTGWLNDLVTKESMTFKDVAVDITQEDWELMRPVQKELYKTVTLQNYWNMVSLGLTVYRPTVIPILEEPWMVIKEILEGPSPEWETKAQACTPVEDMSKLTKEETHTIKLEDSYDYDDRLERRGKGGFWKIHTDERGFSLKSVLSQEYDPTEECLSKYDIYRNNFEKHSNLIVQFDTQLDNKTSVYNEGRATFNHVSYGIVHRKILP [...]
+chr4-04	SwissProt	protein_match	266088	266225	91.000000	-	.	Target=Q8TAU3.1 380 427 +;percentID=43;Gap=M29 I2 M17 ;sequence=MAAAAPRRPTQQGTVTFEDVAVNFSQEEWCLLSEAQRCLYRDVMLENLALISSLGCWCGSKDEEAPCKQRISVQRESQSRTPRAGVSPKKAHPCEMCGLILEDVFHFADHQETHHKQKLNRSGACGKNLDDTAYLHQHQKQHIGEKFYRKSVREASFVKKRKLRVSQEPFVFHEFGKDVLPSSGLCQEAAAVEKTDSETMHGPPFQEGKTNYSCGKRTKAFSTKHSVIPHQKLFTRDGCYVCSDCGKSFSRYVSFSNHQRDHTAKGPYDCGECGKSYSRKSSLIQHQRVHTGKTAYPCEECGKSFSQKGSLISHQLVHTGERPYECREYGKSFGQKGNLIQHQQGHTGERAYHCGECGKSFRQKFCFI [...]
+chr4-04	SwissProt	protein_match	266088	266231	91.000000	-	.	Target=Q3KNS6.1 266 315 +;percentID=47;Gap=M12 D1 M11 I1 M7 I2 M17 ;sequence=MPHSPLISIPHVWCHPEEEERMHDELLQAVSKGPVMFRDVSIDFSQEEWECLDADQMNLYKEVMLENFSNLVSVGLSNSKPAVISLLEQGKEPWMVDRELTRGLCSDLESMCETKILSLKKRHFSQVIITREDMSTFIQPTFLIPPQKTMSEEKPWECKICGKTFNQNSQFIQHQRIHFGEKHYESKEYGKSFSRGSLVTRHQRIHTGKKPYECKECGKAFSCSSYFSQHQRIHTGEKPYECKECGKAFKYCSNLNDHQRIHTGEKPYECKVCGKAFTKSSQLFLHLRIHTGEKPYECKECGKAFTQHSRLIQHQRMHTGEKPYECKQCGKAFNSASTLTNHHRIHAGEKLYECE [...]
+chr4-04	SwissProt	protein_match	266088	266231	91.000000	-	.	Target=Q08AN1.2 519 568 +;percentID=49;Gap=M17 I1 M6 D1 M8 I2 M16 ;sequence=MATQGHLTFKDVAIEFSQEEWKCLEPVQKALYKDVMLENYRNLVFLGISPKCVIKELPPTENSNTGERFQTVALERHQSYDIENLYFREIQKHLHDLEFQWKDGETNDKEVPVPHENNLTGKRDQHSQGDVENNHIENQLTSNFESRLAELQKVQTEGRLYECNETEKTGNNGCLVSPHIREKTYVCNECGKAFKASSSLINHQRIHTTEKPYKCNECGKAFHRASLLTVHKVVHTRGKSYQCDVCGKIFRKNSYFVRHQRSHTGQKPYICNECGKSFSKSSHLAVHQRIHTGEKPYKCNLCGKSFSQRVHLRLHQTVHTGERPFKCNECGKTFKRSSNLTVHQVIHAGKKPYKCD [...]
+chr4-04	SwissProt	protein_match	266088	266225	92.000000	-	.	Target=Q8BQC8.1 370 417 +;percentID=45;Gap=M30 I2 M16 ;sequence=MSRSKGPLSFKDVAVAFSQEEWQQLDPEERTTYRDVMLETYSNLVSVGYDVTKPNMIIKLEQGEEPWTVEGDRHAQRHLEISKVYDPREGIEEIGEKHLQCDDDPYCWRAEKGAAFDEAYTLETALISPSSGAHSCVSCGETLESVSELISSDGSYALEKPSMCFECGKAYGESLEDFNQDEGNSSQHDENILQKVTILEKPFAYECMEALDSESVFMARERAYMGEKPYDWGDSGPDFIQMSDFSTYPRSQMELKPFECTQCGKSFCKKSKFIIHQRAHTGEKPYACSVCGKSFSQKGTLTVHRRSHLEEKPYKCNECGKTFCQKLHLTQHQRTHSGEKPYECSECGKSFCQKTHLTLHQRNHSGER [...]
+chr4-04	SwissProt	protein_match	266088	266225	92.000000	-	.	Target=Q8BQC8-2.1 369 416 +;percentID=45;Gap=M30 I2 M16 ;sequence=MSLQGPLSFKDVAVAFSQEEWQQLDPEERTTYRDVMLETYSNLVSVGYDVTKPNMIIKLEQGEEPWTVEGDRHAQRHLEISKVYDPREGIEEIGEKHLQCDDDPYCWRAEKGAAFDEAYTLETALISPSSGAHSCVSCGETLESVSELISSDGSYALEKPSMCFECGKAYGESLEDFNQDEGNSSQHDENILQKVTILEKPFAYECMEALDSESVFMARERAYMGEKPYDWGDSGPDFIQMSDFSTYPRSQMELKPFECTQCGKSFCKKSKFIIHQRAHTGEKPYACSVCGKSFSQKGTLTVHRRSHLEEKPYKCNECGKTFCQKLHLTQHQRTHSGEKPYECSECGKSFCQKTHLTLHQRNHSGE [...]
+chr4-04	SwissProt	protein_match	266088	266231	92.000000	-	.	Target=A6NF35.2 492 541 +;percentID=40;Gap=M32 I2 M16 ;sequence=MAAAATLRLSAQGTVTFEDVAVNFTWEEWNLLSEAQRCLYRDVTLENLALISSLGCWCGVEDEAAPSKQSIYIQRETQVRTPMAGVSPKKAHPCEMCGPILGDILHVADHQGTHHKQKLHRCEAWGNKLYDSGNFHQHQNEHIGEKPYRGSVEEALFAKRCKLHVSGESSVFSESGKDFLPRSGLLQQEASHTGEKSNSKTECVSPIQCGGAHYSCGESMKHFSTKHILSQHQRLLTREECYVCCECGKSFSKYASFSNHQRVHTDKKHYECGECGKSFSQKSSLIQHQRFHTGEKPYGCEECGKSFSHKRSLVHHQRVHSGERPYQCGECGKSFSQKGNLVLHQRVHTGARPYECGECGKSFSHKRS [...]
+chr4-04	SwissProt	protein_match	266088	266240	92.000000	-	.	Target=P17040-2.3 639 691 +;percentID=39;Gap=M35 I2 M16 ;sequence=MAMALELQAQASPQPEPEELLIVKLELLVLEQFLTILPREVQTWVQARHPESGEEAVALVEDWHRETRTAGQSGLELHTEETRPLKTGEEAQSFQLQPVDPWPEGQSQKKGVKNTCPDLPNHLNAEVAPQPLKESAVLTPRVPTLPKMGSVGDWEVTAESQEALGPGKHAEKELCKDPPGDDCGNSVCLGVPVSKPSNTSEKEQGPEFWGLSLINSGKRSTADYSLDNEPAQALTWRDSRAWEEQYQWDVEDMKVSGVHWGYEETKTFLAILSESPFSEKLRTCHQNRQVYRAIAEQLRARGFLRTLEQCRYRVKNLLRNYRKAKSSHPPGTCPFYEELEALVRARTAIRATDGPGEAVALPRLGY [...]
+chr4-04	SwissProt	protein_match	266088	266231	92.000000	-	.	Target=Q86UE3.2 383 432 +;percentID=44;Gap=M31 I2 M17 ;sequence=MQVDPPLHGPPNDFLIFQIIPLHSLSIMPRFLWILCFSMEETQGELTSSCGSKTMANVSLAFRDVSIDLSQEEWECLDAVQRDLYKDVMLENYSNLVSLGYTIPKPDVITLLEQEKEPWIVMREGTRNWFTDLEYKYITKNLLSEKNVCKIYLSQLQTGEKSKNTIHEDTIFRNGLQCKHEFERQERHQMGCVSQMLIQKQISHPLHPKIHAREKSYECKECRKAFRQQSYLIQHLRIHTGERPYKCMECGKAFCRVGDLRVHHTIHAGERPYECKECGKAFRLHYHLTEHQRIHSGVKPYECKECGKAFSRVRDLRVHQTIHAGERPYECKECGKAFRLHYQLTEHQRIHTGERPYECKVCGKTFRV [...]
+chr4-04	SwissProt	protein_match	266088	266231	93.000000	-	.	Target=P51814-6.2 381 430 +;percentID=42;Gap=M32 I2 M16 ;sequence=MAANGDSPPWSPALAAEGRGSSCEASVSFEDVTVDFSKEEWQHLDPAQRRLYWDVTLENYSHLLSVGYQIPKSEAAFKLEQGEGPWMLEGEAPHQSCSGEAIGKMQQQGIPGGIFFHCERFDQPIGEDSLCSILEELWQDNDQLEQRQENQNNLLSHVKVLIKERGYEHKNIEKIIHVTTKLVPSIKRLHNCDTILKHTLNSHNHNRNSATKNLGKIFGNGNNFPHSPSSTKNENAKTGANSCEHDHYEKHLSHKQAPTHHQKIHPEEKLYVCTECVMGFTQKSHLFEHQRIHAGEKSRECDKSNKVFPQKPQVDVHPSVYTGEKPYLCTQCGKVFTLKSNLITHQKIHTGQKPYKCSECGKAFFQ [...]
+chr4-04	SwissProt	protein_match	266088	266231	93.000000	-	.	Target=P51814.2 423 472 +;percentID=42;Gap=M32 I2 M16 ;sequence=MAANGDSPPWSPALAAEGRGSSCEVRRERTPEARIHSVKRYPDLSPGPKGRSSADHAALNSIVSLQASVSFEDVTVDFSKEEWQHLDPAQRRLYWDVTLENYSHLLSVGYQIPKSEAAFKLEQGEGPWMLEGEAPHQSCSGEAIGKMQQQGIPGGIFFHCERFDQPIGEDSLCSILEELWQDNDQLEQRQENQNNLLSHVKVLIKERGYEHKNIEKIIHVTTKLVPSIKRLHNCDTILKHTLNSHNHNRNSATKNLGKIFGNGNNFPHSPSSTKNENAKTGANSCEHDHYEKHLSHKQAPTHHQKIHPEEKLYVCTECVMGFTQKSHLFEHQRIHAGEKSRECDKSNKVFPQKPQVDVHPSVYTGEKP [...]
+chr4-04	SwissProt	protein_match	266088	266231	93.000000	-	.	Target=P51814-5.2 415 464 +;percentID=42;Gap=M32 I2 M16 ;sequence=MAANGDSPPWSPALAAEGRGSSCEVRRERTPEARIHSVKRYPDLSPGPKGRSSIVSLQASVSFEDVTVDFSKEEWQHLDPAQRRLYWDVTLENYSHLLSVGYQIPKSEAAFKLEQGEGPWMLEGEAPHQSCSGEAIGKMQQQGIPGGIFFHCERFDQPIGEDSLCSILEELWQDNDQLEQRQENQNNLLSHVKVLIKERGYEHKNIEKIIHVTTKLVPSIKRLHNCDTILKHTLNSHNHNRNSATKNLGKIFGNGNNFPHSPSSTKNENAKTGANSCEHDHYEKHLSHKQAPTHHQKIHPEEKLYVCTECVMGFTQKSHLFEHQRIHAGEKSRECDKSNKVFPQKPQVDVHPSVYTGEKPYLCTQC [...]
+chr4-04	SwissProt	protein_match	266088	266231	93.000000	-	.	Target=P51814-2.2 383 432 +;percentID=42;Gap=M32 I2 M16 ;sequence=MGTLPHGPRPWLQRDVAAHVSIVSLQASVSFEDVTVDFSKEEWQHLDPAQRRLYWDVTLENYSHLLSVGYQIPKSEAAFKLEQGEGPWMLEGEAPHQSCSGEAIGKMQQQGIPGGIFFHCERFDQPIGEDSLCSILEELWQDNDQLEQRQENQNNLLSHVKVLIKERGYEHKNIEKIIHVTTKLVPSIKRLHNCDTILKHTLNSHNHNRNSATKNLGKIFGNGNNFPHSPSSTKNENAKTGANSCEHDHYEKHLSHKQAPTHHQKIHPEEKLYVCTECVMGFTQKSHLFEHQRIHAGEKSRECDKSNKVFPQKPQVDVHPSVYTGEKPYLCTQCGKVFTLKSNLITHQKIHTGQKPYKCSECGKAF [...]
+chr4-04	SwissProt	protein_match	266088	266231	93.000000	-	.	Target=P51814-4.2 295 344 +;percentID=42;Gap=M32 I2 M16 ;sequence=MLEGEAPHQSCSGEAIGKMQQQGIPGGIFFHCERFDQPIGEDSLCSILEELWQDNDQLEQRQENQNNLLSHVKVLIKERGYEHKNIEKIIHVTTKLVPSIKRLHNCDTILKHTLNSHNHNRNSATKNLGKIFGNGNNFPHSPSSTKNENAKTGANSCEHDHYEKHLSHKQAPTHHQKIHPEEKLYVCTECVMGFTQKSHLFEHQRIHAGEKSRECDKSNKVFPQKPQVDVHPSVYTGEKPYLCTQCGKVFTLKSNLITHQKIHTGQKPYKCSECGKAFFQRSDLFRHLRIHTGEKPYECSECGKGFSQNSDLSIHQKTHTGEKHYECNECGKAFTRKSALRMHQRIHTGEKPYVCADCGKAFIQKS [...]
+chr4-04	SwissProt	protein_match	266088	266231	93.000000	-	.	Target=P51814-3.2 391 440 +;percentID=42;Gap=M32 I2 M16 ;sequence=MGTLPHGPRPWLQRDVAAHVSADHAALNSIVSLQASVSFEDVTVDFSKEEWQHLDPAQRRLYWDVTLENYSHLLSVGYQIPKSEAAFKLEQGEGPWMLEGEAPHQSCSGEAIGKMQQQGIPGGIFFHCERFDQPIGEDSLCSILEELWQDNDQLEQRQENQNNLLSHVKVLIKERGYEHKNIEKIIHVTTKLVPSIKRLHNCDTILKHTLNSHNHNRNSATKNLGKIFGNGNNFPHSPSSTKNENAKTGANSCEHDHYEKHLSHKQAPTHHQKIHPEEKLYVCTECVMGFTQKSHLFEHQRIHAGEKSRECDKSNKVFPQKPQVDVHPSVYTGEKPYLCTQCGKVFTLKSNLITHQKIHTGQKPYK [...]
+chr4-04	SwissProt	protein_match	266088	266231	93.000000	-	.	Target=P51814-7.2 347 396 +;percentID=42;Gap=M32 I2 M16 ;sequence=MGTLPHGPRPWLQRDVAAHVSIVSLQASVSFEDVTVDFSKEEWQHLDPAQRRLYWDVTLENYSHLLSVGYQIPKSEAAFKLEQGEGPWMLEGEAPHQSCSEELWQDNDQLEQRQENQNNLLSHVKVLIKERGYEHKNIEKIIHVTTKLVPSIKRLHNCDTILKHTLNSHNHNRNSATKNLGKIFGNGNNFPHSPSSTKNENAKTGANSCEHDHYEKHLSHKQAPTHHQKIHPEEKLYVCTECVMGFTQKSHLFEHQRIHAGEKSRECDKSNKVFPQKPQVDVHPSVYTGEKPYLCTQCGKVFTLKSNLITHQKIHTGQKPYKCSECGKAFFQRSDLFRHLRIHTGEKPYECSECGKGFSQNSDLSI [...]
+chr4-04	SwissProt	protein_match	266088	266231	93.000000	-	.	Target=P51814-8.2 345 394 +;percentID=42;Gap=M32 I2 M16 ;sequence=MAANGDSPPWSPALAAEGRGSSCEASVSFEDVTVDFSKEEWQHLDPAQRRLYWDVTLENYSHLLSVGYQIPKSEAAFKLEQGEGPWMLEGEAPHQSCSEELWQDNDQLEQRQENQNNLLSHVKVLIKERGYEHKNIEKIIHVTTKLVPSIKRLHNCDTILKHTLNSHNHNRNSATKNLGKIFGNGNNFPHSPSSTKNENAKTGANSCEHDHYEKHLSHKQAPTHHQKIHPEEKLYVCTECVMGFTQKSHLFEHQRIHAGEKSRECDKSNKVFPQKPQVDVHPSVYTGEKPYLCTQCGKVFTLKSNLITHQKIHTGQKPYKCSECGKAFFQRSDLFRHLRIHTGEKPYECSECGKGFSQNSDLSIHQ [...]
+chr4-04	SwissProt	protein_match	266088	266231	93.000000	-	.	Target=Q5R5Q6.1 527 576 +;percentID=42;Gap=M31 I2 M17 ;sequence=MPHLLVTFRDVAIDFTQEEWECLDPAQRDLYRDVMLENYSNLISLDLESSCATKKLSPEKEIYEMESLQWENIGNLINHHLQYGLGDNMECKGNLEGQEASQEGLYMCVKITCEEKATESHSTSSTFHRMIPTKEKLYKCKECRQGFSYLSCLIQHEKNHNIEKCSEVKKHRNTFSKKPSYIQHQRIQTGEKPYECMECGKAFGRSSDLIQHQKIHTNEKPYQCNACGKAFIRGSQLTEHQRVHTGEKPYECKKCGKAFSYCSQYTLHQRIHSGEKPYECKDCGKAFILGSQLTYHQRIHSGEKPYECKECGKAFILGSHLTYHQRVHTGEKPYICKECGKAFLCASQLNEHQRIHTGEKPYECKECG [...]
+chr4-04	SwissProt	protein_match	266088	266231	93.000000	-	.	Target=Q06732-2.2 467 516 +;percentID=42;Gap=M32 I2 M16 ;sequence=MLTKEQGNVIGIPFNMDVSSFPSRKMFCQYDSRGMSFNTVSELVISKINYLGKKSDEFNACGKLLLNIKHDETHTREKNEVLKNRNTLSHRENTLQHEKIQTLDHNFEYSICQETLLEKAVFNTRKRENAEENNCDYNEFGRTFCDSSSLLFHQIPPSKDSHYEFSDCEKFLCVKSTLSKHDGVPVKHYDCGESGNNFRRKLCLSQLQKGDKGEKHFECNECGKAFWEKSHLTRHQRVHTGEKHFQCNQCGKTFWEKSNLTKHQRSHTGEKPFECNECGKAFSHKSALTLHQRTHTGEKPYQCNACGKTFYQKSDLTKHQRTHTGQKPYECYECGKSFCMNSHLTVHQRTHTGEKPFECLECGKSF [...]
+chr4-04	SwissProt	protein_match	266088	266231	93.000000	-	.	Target=P08042-2.3 195 244 +;percentID=44;Gap=M32 I2 M16 ;sequence=MMGSQEEWEQLDPSQRILYMDVMLENYSNLLSVEVWKADGQVERDPRDLQRQVGSLTTIKNQPPTEERGSRFGKTLTLNTDFVSLRQVPYKYDLYEKTLKYNSDLLSSRNCVRKKGDGCGGFGEPLLYLKQEKPHAGLEYSEYNGNGRALSHKDAIFKHRKIKSLVQPFVCNYCDKTFSFKSLLVSHKRIHTGEKPYECDVCQKTFSHKANLIKHQRIHTGEKPFECPECGKAFTHQSNLIVHQRAHMEKKPYGCSECGKTFAQKFELTTHQRIHTGERPYECNECAKTFFKKSNLIIHQKIHTGEKRYECSECGKSFIQNSQLIIHRRTHTGEKPYECTECGKTFSQRSTLRLHLRIRTGEKPYE [...]
+chr4-04	SwissProt	protein_match	266088	266231	93.000000	-	.	Target=P08042.3 208 257 +;percentID=44;Gap=M32 I2 M16 ;sequence=MGSQGSVSFTDVTVDFTQEEWEQLDPSQRILYMDVMLENYSNLLSVEVWKADGQVERDPRDLQRQVGSLTTIKNQPPTEERGSRFGKTLTLNTDFVSLRQVPYKYDLYEKTLKYNSDLLSSRNCVRKKGDGCGGFGEPLLYLKQEKPHAGLEYSEYNGNGRALSHKDAIFKHRKIKSLVQPFVCNYCDKTFSFKSLLVSHKRIHTGEKPYECDVCQKTFSHKANLIKHQRIHTGEKPFECPECGKAFTHQSNLIVHQRAHMEKKPYGCSECGKTFAQKFELTTHQRIHTGERPYECNECAKTFFKKSNLIIHQKIHTGEKRYECSECGKSFIQNSQLIIHRRTHTGEKPYECTECGKTFSQRSTLRLH [...]
+chr4-04	SwissProt	protein_match	266088	266231	94.000000	-	.	Target=Q6PG37.1 252 301 +;percentID=49;Gap=M17 I1 M6 D1 M7 I2 M17 ;sequence=MAHLMMFRDVAVDFSQEEWECLDLEQRDLYRDVMLENYSNMVSLGFCIYQPEAFSLLEKGKEPWKILRDETRGPCPDMQSRCQTKKLLPKNGIFEREIAQLEIMRICKNHSLDCLCFRGDWEGNTQFQTLQDNQEECFKQVIRTCEKRPTFNQHTVFNLHQRLNTGDKLNEFKELGKAFISGSDHTQHQLIHTSEKFCGDKECGNTFLPDSEVIQYQTVHTVKKTYECKECGKSFSLRSSLTGHKRIHTGEKPFKCKDCGKAFRFHSQLSVHKRIHTGEKSYECKECGKAFSCGSDLTRHRRIHTGEKPYECNECRKAFSQRSHLIKHQRIHTGEKPYECKECGKAFTRGSHLTQH [...]
+chr4-04	SwissProt	protein_match	266088	266231	94.000000	-	.	Target=O75123.1 177 226 +;percentID=42;Gap=M32 I2 M16 ;sequence=MILLSFVSDSNVGTGEKKVTEAWISEDENSHRTTSDRLTVMELPSPESEEVHEPRLGELLGNPEGQSLGSSPSQDRGCKQVTVTHWKIQTGETAQVCTKSGRNHILNSDLLLLQRELIEGEANPCDICGKTFTFNSDLVRHRISHAGEKPYTCDQCGKGFGQSSHLMEHQRIHTGERLYVCNVCGKDFIHYSGLIEHQRVHSGEKPFKCAQCGKAFCHSSDLIRHQRVHTRERPFECKECGKGFSQSSLLIRHQRIHTGERPYECNECGKSFIRSSSLIRHYQIHTEVKQYECKECGKAFRHRSDLIEHQRIHTGERPFECNECGKAFIRSSKLIQHQRIHTGERPYVCNECGKRFSQTSNFTQHQRI [...]
+chr4-04	SwissProt	protein_match	266088	266231	94.000000	-	.	Target=P17027.3 334 383 +;percentID=44;Gap=M31 I2 M17 ;sequence=MLENYGNVASLGFPLLKPAVISQLEGGSELGGSSPLAAGTGLQGLQTDIQTDNDLTKEMYEGKENVSFELQRDFSQETDFSEASLLEKQQEVHSAGNIKKEKSNTIDGTVKDETSPVEECFFSQSSNSYQCHTITGEQPSGCTGLGKSISFDTKLVKHEIINSEERPFKCEELVEPFRCDSQLIQHQENNTEEKPYQCSECGKAFSINEKLIWHQRLHSGEKPFKCVECGKSFSYSSHYITHQTIHSGEKPYQCKMCGKAFSVNGSLSRHQRIHTGEKPYQCKECGNGFSCSSAYITHQRVHTGEKPYECNDCGKAFNVNAKLIQHQRIHTGEKPYECNECGKGFRCSSQLRQHQSIHTGEKPYQCKE [...]
+chr4-04	SwissProt	protein_match	266088	266231	94.000000	-	.	Target=Q8TAQ5.1 557 606 +;percentID=46;Gap=M31 I2 M17 ;sequence=MARKLVMFRDVAIDFSQEEWECLDSAQRDLYRDVMLENYSNLVSLDLPSRCASKDLSPEKNTYETELSQWEMSDRLENCDLEESNSRDYLEAKGKMEKQQENQKEYFRQGMIIYDKMSIFNQHTYLSQHSRCHSTEKPYKCKECGKAFRRASHLTQHQSIHTGEKPYECKQCGKAFSRDSQLSLHQRLHTGEKPYACKECGKAFTQSSQLILHHRIHTGEKPYKCEECGKAFIRSSQLTRHQKVHTGEKPYECKECGKAFTQNSQLTLHQRLHTGEKLYECKECRKVFTQLSQLILHKRIHTGEKPYECKECGKAFICGSQLSQHQKIHNGEKPYECKECGRAFIRGSLLMQHQRIHTGEKPYKCEEC [...]
+chr4-04	SwissProt	protein_match	266088	266231	94.000000	-	.	Target=Q02386.2 414 463 +;percentID=46;Gap=M32 I2 M16 ;sequence=MTKSKEAVTFKDVAVVFSEEELQLLDLAQRKLYRDVMLENFRNVVSVGHQSTPDGLPQLEREEKLWMMKMATQRDNSSGAKNLKEMETLQEVGLRYLPHEELFCSQIWQQITRELIKYQDSVVNIQRTGCQLEKRDDLHYKDEGFSNQSSHLQVHRVHTGEKPYKGEHCVKSFSWSSHLQINQRAHAGEKPYKCEKCDNAFRRFSSLQAHQRVHSRAKSYTNDASYRSFSQRSHLPHHQRVPTGENPYKYEECGRNVGKSSHCQAPLIVHTGEKPYKCEECGVGFSQRSYLQVHLKVHTGKKPYKCEECGKSFSWRSRLQAHERIHTGEKPYKCNACGKSFSYSSHLNIHCRIHTGEKPYKCEECGKG [...]
+chr4-04	SwissProt	protein_match	266088	266231	94.000000	-	.	Target=P0C7V5.1 303 352 +;percentID=40;Gap=M31 I2 M17 ;sequence=MAVTDLSHGFFPREPICPFEEKTKIGTMVEDYLANSYQDSVTFDDVAVEFTPEEWALLDTTEKCLYRDVMLENYVNLASVEATVDGNSENCGEVFSEWFCLKTHMRAQNGGNIFEGNCYGKDILSVHKEASIGQELSKFNPCGKVFTLTPDLAAHLGILNARQPYKCKECRKGFKYFASLDNHMGIHIGEKFCEFQECRRAITHSSHLKQCVTVHTGKKSKKTKKHGKSFTNFSQLSAHVKIHKGEKSFECKECGRSFRNSSSFNVHIQIHTGIKPHKYTECGKAFTRSTHLTQHVRTHTGIKPYECKECGQAFTQYTGLAIHIRNHTGEKHYQCKECGKAFNGSSTLTQHKIIHTGEKPYGCVECGK [...]
+chr4-04	SwissProt	protein_match	266088	266231	94.000000	-	.	Target=A2VDQ7.1 556 605 +;percentID=46;Gap=M31 I2 M17 ;sequence=MAQRSVMFRDVAIDFSQEEWDCLDSAQRDLYRDVMLENYSNLVSLDLPSRGANKLLSPKKDIYETGLSQWEMSARLENCDLENSSSRDYLEVKGTLEKQQENQAYFSQGMIIYDNMSIFNQHAYLSQHPRCHSTEKPYKCKECGKAFRRASHLTQHQSIHTGEKPYECKQCGKAFSRDSQLSLHQRLHTGEKPYACKECGKAFTQSSQLILHHRIHTGEKPYKCEECGKAFIRSSQLTRHQKVHTGEKPYECKECGKAFTQNSQLTLHQRLHTGEKLYECKECRKVFTQLSQLILHKRIHTGEKPYECKECGKAFICGSQLSQHQKIHNGEKPYECQECGKAFIRGSLLMQHQRIHTGEKPYKCEECG [...]
+chr4-04	SwissProt	protein_match	266088	266231	95.000000	-	.	Target=Q86Y25.1 270 319 +;percentID=45;Gap=M14 D1 M9 I1 M8 I2 M16 ;sequence=MAVDLLSAQEPVTFRDVAVFFSQDEWLHLDSAQRALYREVMLENYSSLVSLGIPFSMPKLIHQLQQGEDPCMVEREVPSDTRLGFKTWLETEALPHRQDIFIEETSQGMVKKESIKDGHWDINFEEAVEFESEIEEEQEKKPLRQMIDSHEKTISEDGNHTSLELGKSLFTNTALVTQQSVPIERIPNMYYTFGKDFKQNFDLMKCFQIYPGGKPHICNECGKSFKQNLHLIEHQRIHTGEKPYKCNECEKTFSHRSSLLSHQRIHTGEKPYKCNECEKAFSNSSTLIKHLRVHTGEKPYRCRECGKAFSQCSTLTVHQRIHTGEKLYKCGECEKAFNCRAKLHRHQRIHTGEKPY [...]
+chr4-04	SwissProt	protein_match	266088	266231	95.000000	-	.	Target=Q8BZW4-2.1 301 350 +;percentID=45;Gap=M16 D1 M7 I1 M7 I2 M17 ;sequence=MFLLDVFCVPLLGAGTSGKPRSSDMDIVTYDDVHVNFTWEEWALLDPSQKDLYRDVMLETYRNLAAIGMKEVILKRNFLNLLNMIKTLHIRAILKGMKEFILERNPMKVSNILKDFAHHSSLQIQRRTHVVEKPYECNQCGKAFAYHSYLQRHERSHTGEKPYECNQCGKAFGRHSHLQRHERIHTGEKSYDCNQCGKTFVHHSHLQIHKRTHIGEKPFECNQCGKAFARNSHLLIHKRIHTGEKPYECKQCGKAFAYQSGLLYHKRRYTVEKLYECNQCGKAFACHNSLQVHKRTHTGEKPYKCNQCGKAFGRYSSLQRHERIHTGEKPYECKQCGKAFGRHSSLQRHERIHT [...]
+chr4-04	SwissProt	protein_match	266088	266231	95.000000	-	.	Target=Q8BZW4.1 322 371 +;percentID=45;Gap=M16 D1 M7 I1 M7 I2 M17 ;sequence=MFLLDVFCVPLLGAGTSGKPRSSDMDIVTYDDVHVNFTWEEWALLDPSQKDLYRDVMLETYRNLAAIGYYWKGHNISEGHFQNSRRNGRHERSDTEEKLSEFTQYDKDFAYQSHPQRHERIYSGEKPYEGVQYFEDFAHHSSLQIQRRTHVVEKPYECNQCGKAFAYHSYLQRHERSHTGEKPYECNQCGKAFGRHSHLQRHERIHTGEKSYDCNQCGKTFVHHSHLQIHKRTHIGEKPFECNQCGKAFARNSHLLIHKRIHTGEKPYECKQCGKAFAYQSGLLYHKRRYTVEKLYECNQCGKAFACHNSLQVHKRTHTGEKPYKCNQCGKAFGRYSSLQRHERIHTGEKPYECKQ [...]
+chr4-04	SwissProt	protein_match	266088	266222	96.000000	-	.	Target=Q9Z1D8.1 342 388 +;percentID=51;Gap=M29 I2 M16 ;sequence=MIMTESRAVIHLEPPAETSQEQADLLIVKVEEEDCSWMQGYNRPVLETFYQRFKHFQYHEAAGPRDALSQLRVLCCEWLRPELHTKEQILELLVLEQFLTILPEEFQAWVREHHPESGEEAVAVIESIQRELEERRQQIATSPEVLPQKMVPPGATQESFSHQCLPVEAQPERESQNLLEENALPALQVSSVPLKDSQELTDSLLSDGPQKLVKTEDVADVAVSFILEEWAHLDQSQKSLGRDSRKEDCESTTPVDYEPKEGNLEFTVQQVSDAADPHWVAAERTEKNGVQRPESGEVSDLKDMVPRWQVNPTSGNPRQKRPLRSGPDVNRKQKSNGERGHRCGDCGKFFLQASNFIQHRRIHTGEKP [...]
+chr4-04	SwissProt	protein_match	266088	266231	96.000000	-	.	Target=Q8NB42.1 492 541 +;percentID=44;Gap=M32 I2 M16 ;sequence=MAVGLCKAMSQGLVTFRDVALDFSQEEWEWLKPSQKDLYRDVMLENYRNLVWLDWESWCEIEELSPKWFIDEDEISQEMVMERLASHGLECSSFREAWKYKGEFELHQGNAERHFMQVTAVKEISTGKRDNEFSNSGRSIPLKSVFLTQQKVPTIQQVHKFDIYDKLFPQNSVIIEYKRLHAEKESLIGNECEEFNQSTYLSKDIGIPPGEKPYESHDFSKLLSFHSLFTQHQTTHFGKLPHGYDECGDAFSCYSFFTQPQRIHSGEKPYACNDCGKAFSHDFFLSEHQRTHIGEKPYECKECNKAFRQSAHLAQHQRIHTGEKPFACNECGKAFSRYAFLVEHQRIHTGEKPYECKECNKAFRQSAH [...]
+chr4-04	SwissProt	protein_match	266088	266231	97.000000	-	.	Target=Q15937.2 219 268 +;percentID=42;Gap=M32 I2 M16 ;sequence=MLEEGVLPSPGPALPQEENTGEEGMAAGLLTAGPRGSTFFSSVTVAFAQERWRCLVSTPRDRFKEGIPGKSRSLVLLGLPVSQPGMNSQLEQREGAWMLEGEDLRSPSPGWKIISGSPPEQALSEASFQDPCVEMPPGDSDHGTSDLEKSFNLRPVLSPQQRVPVEARPRKCETHTESFKNSEILKPHRAKPYACNECGKAFSYCSSLSQHQKSHTGEKPYECSECGKAFSQSSSLIQHQRIHTGEKPYKCSECGRAFSQNANLTKHQRTHTGEKPYRCSECEKAFSDCSALVQHQRIHTGEKPYECSDCGKAFRHSANLTNHQRTHTGEKPYKCSECGKAFSYCAAFIQHQRIHTGEKPYRCAACGK [...]
+chr4-04	SwissProt	protein_match	266088	266231	97.000000	-	.	Target=Q7TSH9.1 227 276 +;percentID=47;Gap=M18 I1 M5 D1 M8 I2 M16 ;sequence=MAGLSFADSASLHEGRPLLLPSSFRESVTFKDVVVNFTQEEWKHLDPIQRDLFRDVTLENYTHLVSIGLQVSKPDMISQLEQGTEPWTEDSCIPVGPLEDWKKRAGNSVSSLELDISEEHLFSETVVTNSKRDDGSLEKLQANQQMLPREVQITEKTAPTCESNLSVSSSFITQTEVALDQPSTKTRAKQNSHPVKKEKLCKCNECGKAFTYCSALIRHQRTHTGEKPYKCNECNKAFSRSENLINHQRIHTGDKPYKCDQCGKGFIEGPSLTQHQRIHTGEKPYKCDECGKAFSQRTHLVQHQRIHTGEKPYTCTECGKSFSQRGHFMEHQKIHTGEKPFKCEECEKTFTRSTHL [...]
+chr4-04	SwissProt	protein_match	266088	266231	98.000000	-	.	Target=Q14586.2 574 623 +;percentID=44;Gap=M31 I2 M17 ;sequence=MGLLTFRDVAVEFSLEEWEHLEPAQKNLYQDVMLENYRNLVSLGLVVSKPDLITFLEQRKEPWNVKSEETVAIQPDVFSHYNKDLLTEHCTEASFQKVISRRHGSCDLENLHLRKRWKREECEGHNGCYDEKTFKYDQFDESSVESLFHQQILSSCAKSYNFDQYRKVFTHSSLLNQQEEIDIWGKHHIYDKTSVLFRQVSTLNSYRNVFIGEKNYHCNNSEKTLNQSSSPKNHQENYFLEKQYKCKEFEEVFLQSMHGQEKQEQSYKCNKCVEVCTQSLKHIQHQTIHIRENSYSYNKYDKDLSQSSNLRKQIIHNEEKPYKCEKCGDSLNHSLHLTQHQIIPTEEKPYKWKECGKVFNLNCSLYLT [...]
+chr4-04	SwissProt	protein_match	266088	266231	98.000000	-	.	Target=Q3MIS6.1 491 540 +;percentID=48;Gap=M32 I2 M16 ;sequence=MALTQGPLKFMDVAIEFSQEEWKCLDPAQRTLYRDVMLENYRNLVSLGICLPDLSVTSMLEQKRDPWTLQSEEKIANDPDGRECIKGVNTERSSKLGSNAGNKPCKNQLGFTFQLHLSDLQLFQAERKISGCKHFEKPVSDNSSVSPLEKISSSVKSHLLNKYRNNFDHAPLLPQEQKAHIREKAYKCNEHGQVFRASASLTNQVIHNADNPYKCSECGKVFSCSSKLVIHRRMHTGEKPYKCHECGKLFSSNSNLSQHQRIHTGEKPYKCHECDKVFRSSSKLAQHQRIHTGEKPYKCHECDKVFNQIAHLVRHQKIHTGEKPYSCNKCGKVFSRHSYLAEHQTVHTGEKPYKCEECGKAFSVRSSL [...]
+chr4-04	SwissProt	protein_match	266088	266246	98.000000	-	.	Target=Q9Y2L8.1 339 393 +;percentID=47;Gap=M37 I2 M16 ;sequence=MIMTESREVIDLDPPAETSQEQEDLFIVKVEEEDCTWMQEYNPPTFETFYQRFRHFQYHEASGPREALSQLRVLCCEWLRPELHTKEQILELLVLEQFLTILPEEFQPWVREHHPESGEEAVAVIENIQRELEERRQQIVACPDVLPRKMATPGAVQESCSPHPLTVDTQPEQAPQKPRLLEENALPVLQVPSLPLKDSQELTASLLSTGSQKLVKIEEVADVAVSFILEEWGHLDQSQKSLYRDDRKENYGSITSMGYESRDNMELIVKQISDDSESHWVAPEHTERSVPQDPDFAEVSDLKGMVQRWQVNPTVGKSRQNPSQKRDLDAITDISPKQSTHGERGHRCSDCGKFFLQASNFIQHRRIH [...]
+chr4-04	SwissProt	protein_match	266088	266246	98.000000	-	.	Target=A2T7D2.1 339 393 +;percentID=47;Gap=M37 I2 M16 ;sequence=MIMTESREVIDLDPPAETSQEQEDLFIVKVEEEDCTWMQEYNPPTFETFYQRFRHFQYHEASGPREALSQLRVLCCEWLRPELHTKEQILELLVLEQFLTILPEEFQPWVREHHPESGEEAVAVIENIQRELEERRQQIVACPDVLPRKMAPPGAVQESCSPQPLTVDTQPEQAPQKPRLLEENALPVLQVPSLPLKDSQELTASLLSTGSQKLVKIEEVADVAVSFILEEWGHLDQSQKSLYRDDRKENYGSITSMGYESRDNMELIVKQISDDSESRWVAPEHTERSVPQDPDFAEVSDLKGMVQRWQVNPTVGKSRQNPSQKRDLDAITDISPKQSTHGERGHRCSDCGKFFLQASNFIQHRRIH [...]
+chr4-04	SwissProt	protein_match	266088	266231	98.000000	-	.	Target=Q06730.3 438 487 +;percentID=46;Gap=M32 I2 M16 ;sequence=MNKVEQKSQESVSFKDVTVGFTQEEWQHLDPSQRALYRDVMLENYSNLVSVGYCVHKPEVIFRLQQGEEPWKQEEEFPSQSFPVWTADHLKERSQENQSKHLWEVVFINNEMLTKEQGDVIGIPFNVDVSSFPSRKMFCQCDSCGMSFNTVSELVISKINYLGKKSDEFNACGKLLLNIKHDETHTQEKNEVLKNRNTLSHHEETLQHEKIQTLEHNFEYSICQETLLEKAVFNTQKRENAEENNCDYNEFGRTLCDSSSLLFHQISPSRDNHYEFSDCEKFLCVKSTLSKPHGVSMKHYDCGESGNNFRRKLCLSHLQKGDKGEKHFECNECGKAFWEKSHLTRHQRVHTGQKPFQCNECEKAFWDK [...]
+chr4-04	SwissProt	protein_match	266088	266231	98.000000	-	.	Target=Q8IZ26.2 424 473 +;percentID=46;Gap=M32 I2 M16 ;sequence=MAALFLSAPPQAEVTFEDVAVYLSREEWGRLGPAQRGLYRDVMLETYGNLVSLGVGPAGPKPGVISQLERGDEPWVLDVQGTSGKEHLRVNSPALGTRTEYKELTSQETFGEEDPQGSEPVEACDHISKSEGSLEKLVEQRGPRAVTLTNGESSRESGGNLRLLSRPVPDQRPHKCDICEQSFEQRSYLNNHKRVHRSKKTNTVRNSGEIFSANLVVKEDQKIPTGKKLHYCSYCGKTFRYSANLVKHQRLHTEEKPYKCDECGKAFSQSCEFINHRRMHSGEIPYRCDECGKTFTRRPNLMKHQRIHTGEKPYKCGECGKHFSAYSSLIYHQRIHTGEKPYKCNDCGKAFSDGSILIRHRRTHTGEK [...]
+chr4-04	SwissProt	protein_match	266088	266225	98.000000	-	.	Target=Q3KQV3.2 422 469 +;percentID=45;Gap=M27 I1 M1 I1 M18 ;sequence=MAAAALRDPAQGCVTFEDVTIYFSQEEWVLLDEAQRLLYCDVMLENFALIASLGLISFRSHIVSQLEMGKEPWVPDSVDMTSAMARGAYGRPGSDFCHGTEGKDLPSEHNVSVEGVAQDRSPEATLCPQKTCPCDICGLRLKDILHLAEHQTTHPRQKPFVCEAYVKGSEFSANLPRKQVQQNVHNPIRTEEGQASPVKTCRDHTSDQLSTCREGGKDFVATAGFLQCEVTPSDGEPHEATEGVVDFHIALRHNKCCESGDAFNNKSTLVQHQRIHSRERPYECSKCGIFFTYAADLTQHQKVHNRGKPYECCECGKFFSQHSSLVKHRRVHTGESPHVCGDCGKFFSRSSNLIQHKRVHTG [...]
+chr4-04	SwissProt	protein_match	266088	266225	98.000000	-	.	Target=Q3KQV3-2.2 355 402 +;percentID=45;Gap=M27 I1 M1 I1 M18 ;sequence=MGKEPWVPDSVDMTSAMARGAYGRPGSDFCHGTEGKDLPSEHNVSVEGVAQDRSPEATLCPQKTCPCDICGLRLKDILHLAEHQTTHPRQKPFVCEAYVKGSEFSANLPRKQVQQNVHNPIRTEEGQASPVKTCRDHTSDQLSTCREGGKDFVATAGFLQCEVTPSDGEPHEATEGVVDFHIALRHNKCCESGDAFNNKSTLVQHQRIHSRERPYECSKCGIFFTYAADLTQHQKVHNRGKPYECCECGKFFSQHSSLVKHRRVHTGESPHVCGDCGKFFSRSSNLIQHKRVHTGEKPYECSDCGKFFSQRSNLIHHKRVHTGRSAHECSECGKSFNCNSSLIKHWRVHTGERPYKCNEC [...]
+chr4-04	SwissProt	protein_match	266088	266231	99.000000	-	.	Target=Q5REN4.1 349 398 +;percentID=48;Gap=M32 I2 M16 ;sequence=MNKSQEQVSFKDVCVDFTQEEWYLLDPAQKILYRDVILENYSNLVSVGYCITKPEVIFKIEQGEEPWILEKGFPSQDPERKWKVDDMLESSQENEDDHFWELLFHNNKTVSVENGDRGSKTFNLGTDPVSLRNYPYKICDSCEMSLKNISGLIISKKSCSRKKPDEFNVCEKLLLDIRHEKIPIGEKSYKYDQKRNAINYHQDLSQPSFGQSFEYSKNGQGFHDEAAFFTNKRSQIGETVCKYNECGRTFIESLKLNISQRPHLEMEPYGCSICGKSFCMNLRFGHQRALTKDNPYEYNEYGEIFCDNSAFIIHQGAYTRKILREYKVSDKTWEKSTVLKHQIVHMGGKSYDYNENGSNFSKKSHLTQ [...]
+chr4-04	SwissProt	protein_match	266088	266231	99.000000	-	.	Target=Q8NDW4.1 350 399 +;percentID=48;Gap=M32 I2 M16 ;sequence=MNKSQEQVSFKDVCVDFTQEEWYLLDPAQKILYRDVILENYSNLVSVGYCITKPEVIFKIEQGEEPWILEKGFPSQCHPERKWKVDDVLESSQENEDDHFWELLFHNNKTVSVENGDRGSKTFNLGTDPVSLRNYPYKICDSCEMNLKNISGLIISKKNCSRKKPDEFNVCEKLLLDIRHEKIPIGEKSYKYDQKRNAINYHQDLSQPSFGQSFEYSKNGQGFHDEAAFFTNKRSQIGETVCKYNECGRTFIESLKLNISQRPHLEMEPYGCSICGKSFCMNLRFGHQRALTKDNPYEYNEYGEIFCDNSAFIIHQGAYTRKILREYKVSDKTWEKSALLKHQIVHMGGKSYDYNENGSNFSKKSHLT [...]
+chr4-04	SwissProt	protein_match	266088	266237	99.000000	-	.	Target=Q9UJW8.2 349 400 +;percentID=44;Gap=M34 I2 M16 ;sequence=MRACAGSTREAGSGAQDLSTLLCLEESMEEQDEKPPEPPKACAQDSFLPQEIIIKVEGEDTGSLTIPSQEGVNFKIVTVDFTREEQGTWNPAQRTLDRDVILENHRDLVSWDLATAVGKKDSTSKQRIFDEEPANGVKIERFTRDDPWLSSCEEVDDCKDQLEKQQEKQEILLQEVAFTQRKAVIHERVCKSDETGEKSGLNSSLFSSPVIPIRNHFHKHVSHAKKWHLNAAVNSHQKINENETLYENNECGKPPQSIHLIQFTRTQTKDKCYGFSDRIQSFCHGTPLHIHEKIHGGGKTFDFKECGQVLNPKISHNEQQRIPFEESQYKCSETSHSSSLTQNMRNNSEEKPFECNQCGKSFSWSSHL [...]
+chr4-04	SwissProt	protein_match	266088	266231	99.000000	-	.	Target=P17097.1 439 488 +;percentID=46;Gap=M32 I2 M16 ;sequence=MEVVTFGDVAVHFSREEWQCLDPGQRALYREVMLENHSSVAGLAGFLVFKPELISRLEQGEEPWVLDLQGAEGTEAPRTSKTDSTIRTENEQACEDMDILKSESYGTVVRISPQDFPQNPGFGDVSDSEVWLDSHLGSPGLKVTGFTFQNNCLNEETVVPKTFTKDAPQGCKELGSSGLDCQPLESQGESAEGMSQRCEECGKGIRATSDIALHWEINTQKISRCQECQKKLSDCLQGKHTNNCHGEKPYECAECGKVFRLCSQLNQHQRIHTGEKPFKCTECGKAFRLSSKLIQHQRIHTGEKPYRCEECGKAFGQSSSLIHHQRIHTGERPYGCRECGKAFSQQSQLVRHQRTHTGERPYPCKECG [...]
+chr4-04	SwissProt	protein_match	266088	266231	99.000000	-	.	Target=Q5RBX0.1 439 488 +;percentID=46;Gap=M32 I2 M16 ;sequence=MEVVTFGDVAVHFSREEWQCLDPGQRALYREVMLENHSSVAGLAGFLVFKPELISRLEQGEEPWVLDLQGAEGTEAPRTSKTDSTIRTENEQACEDMDILKSESYGTVVRISPQDFPQNPGFGDVSDSEVWLDSHLGSPGLKVTGFTFQNNCLNEETVVPKTFTKDAPQGCKELGSSGLDCQPLESQGESAEGMSQRCEECGKGIRATSDIALHWEINTQKISRCQECQKKLSDCLQGKHTNNCHGEKPYECAECGKVFRLCSQLNQHQRIHTGEKPFKCTECGKAFRLSSKLIQHQRIHTGEKPYRCEECGKAFGQSSSLIHHQRIHTGERPYGCRECGKAFSQQSQLVRHQRTHTGERPYPCKECG [...]
+chr4-04	SwissProt	protein_match	266088	266231	99.000000	-	.	Target=P16374.2 482 531 +;percentID=42;Gap=M31 I2 M17 ;sequence=MANSSSQHMVCGSVTFRDVAVDFSQEEWACLDATQKVLYRNIMLETYSNLVAVVGRCIPKPDLIVLLEPEKEPWMAVKKETGRPSQGLETGFEAENRSPKNHVYNKKLPKQTIQQLSKTSDVQGVSVSNGPGYSVIKEPQNYQEGDANRNITNKKEMSTYTSKTLAHNKEKPYKCKDCGKCFGCKSNLHQHESIHTGEKPYECKDCGKTFRLPQMLSRHQKSHSDERPFECNICGKSFHLPTLLQYHKNIHTGLKPFECEECGKSFKSFNRISTLFQHRTIHAGMKPYKCNVCGKAFNRRSNLLQHQKIHSEDRPFHCKVCGKAFTVLAQLTRHENIHTEDKSFECKQCGKIFSNGSYLLRHYDTHTN [...]
+chr4-04	SwissProt	protein_match	266088	266231	100.000000	-	.	Target=Q6ZNG0.1 306 355 +;percentID=44;Gap=M31 I2 M17 ;sequence=MFQTAWRQEPVTFEDVAVYFTQNEWASLDSVQRALYREVMLENYANVASLAFPFTTPVLVSQLEQGELPWGLDPWEPMGREALRGICPGDEARTEKEGLTPKDHVSKETESFRLMVGGLPGNVSQHLDFGSSLEQPQGHWIIKTKSKRRHFTDTSARHHEAYEVKNGEKFEKLGKNISVSTQLTTNQTNPSGQISYECGQCGRYFIQMADFHRHEKCHTGEKSFECKECGKYFRYNSLLIRHQIIHTGKKPFKCKECGKGLSSDTALIQHQRIHTGEKPYECKECGKAFSSSSVFLQHQRFHTGEKLYECNECWKTFSCSSSFTVHQRMHTGEKPYECKECGKRLSSNTALTQHQRIHTGEKPFECK [...]
+chr4-04	SwissProt	protein_match	266088	266231	100.000000	-	.	Target=Q5RB33.1 306 355 +;percentID=44;Gap=M31 I2 M17 ;sequence=MFQTAWRQEPVTFEDVAVYFTQNEWASLDSVQRALYREVMLENYANVASLAFPFTTPVLVSQLEQGELPWGLDPWEPMGREALRGICPGDEARTEKEGLTPKDHVFKETESFRLMVGELPGNVSQHLDFGSSLEQPQGHWIIKTKSKRRHFTDTSARHHEAYAVKNGEKFEKLGKNISVSTQLTTNQTNPSGQISYECGQRGRYFIRMADFHRHQKCHTGEKSFECKECGKDFRYNSLLIRHQIIHTGKKPFKCKECGKGLSSDTALIQHQRIHTGEKPYECKECGKAFSSSSVFLQHQRFHTGEKLYECNECWKTFSCSSSFTVHQRMHTGEKPYECKECGKRLSSNTALTQHQRIHTGEKPFECK [...]
+chr4-04	SwissProt	protein_match	266088	266231	100.000000	-	.	Target=A2VDP4.1 503 552 +;percentID=46;Gap=M31 I2 M17 ;sequence=MAQGSVSFKDVTVDFSQEEWQHLDPAQKTLYMDVMLENYCHLISVGCHMTKPDVILKLERGEEPWTSFKGHTCLEENWKAEDFLLKFKEQQDKYSRSVILINHKKLVNENGSTCEKTLTLSKNPINSKKLPPEYDTREKILKNVSELIISNLSPTRRRLSECNGYGKSLLNTKPETAHSGVKSHNQCGRTISHNEKITQYHKMETPAQSFEYNDCEKAFLKRGGPVTHSRTYRRGNTSDYNKRRRTTNIEKKHTCTECGKSFCRKSVLILHQGIHTEEKPYQCHQCGNSFRRKSYLIDHQRTHTGEKPFVCNECGKSFRLKTALTDHQRTHTGEKSYECPQCRNAFRLKSHLIRHQRTHTGEKPYEC [...]
+chr4-04	SwissProt	protein_match	266088	266231	101.000000	-	.	Target=Q4R6C2.1 336 385 +;percentID=49;Gap=M17 I1 M6 D1 M7 I2 M17 ;sequence=MAEGSVMFSDVSIDFSQEEWDCLDPVQRDLYRDVMLENYSNLVSMGLYTPKPQVISLLEQGKEPWMVGRELTRGLCSDLESMCETKLLSLKKEVYEIELCQREIMGLTKHGLEYSSFGDVLEYRSRLAKQLGYPNGHFSQEIFTPEYMPTFIQQTFLTLQQIMNNEDRPFECKKCGKAFSQNSQFIQHQRIHIGEKSYECKECGKFFSCGSHVTRHLKIHTGEKPFECKECGKAFSCSSYLSQHQRIHTGKKPYECKECGKAFSYCSNLIDHQRIHTGEKPYACKVCGKAFTKSSQLFQHVRIHTGEKPYECKECGKAFTQSSKLVQHQRIHTGEKPYECKECGKAFSSGSALTN [...]
+chr4-04	SwissProt	protein_match	266088	266231	101.000000	-	.	Target=Q8NA42.1 336 385 +;percentID=49;Gap=M17 I1 M6 D1 M7 I2 M17 ;sequence=MAEGSVMFSDVSIDFSQEEWDCLDPVQRDLYRDVMLENYGNLVSMGLYTPKPQVISLLEQGKEPWMVGRELTRGLCSDLESMCETKLLSLKKEVYEIELCQREIMGLTKHGLEYSSFGDVLEYRSHLAKQLGYPNGHFSQEIFTPEYMPTFIQQTFLTLHQIINNEDRPYECKKCGKAFSQNSQFIQHQRIHIGEKSYECKECGKFFSCGSHVTRHLKIHTGEKPFECKECGKAFSCSSYLSQHQRIHTGKKPYECKECGKAFSYCSNLIDHQRIHTGEKPYECKVCGKAFTKSSQLFQHARIHTGEKPYECKECGKAFTQSSKLVQHQRIHTGEKPYECKECGKAFSSGSALTN [...]
+chr4-04	SwissProt	protein_match	266088	266231	101.000000	-	.	Target=Q61116.1 535 584 +;percentID=48;Gap=M32 I2 M16 ;sequence=MTKLQEMVTFRDVAVVFSEEELGLLDAAQRKLYHDVMLENFRNLLAVGCQSPNKMAPLDTTGIRCLPLGQLPCWQMTSHDVNKLARAPEDGINTPGKGPHLLEQCHSSCHWGAEQPSQAPEDDGCLENLPSNHSSSSDNQEFLSGRAQSSWSKAHFSERWNHEKHCPQTLVKTKSQLLAPGVNILGCISHHDHNILHKRDKVPSSGDCDQVIFPMTLLTQHCVYREQKAYQCSRGQEVFSDSPSLELHQQTLLGKKSPVHSTHKDTRHSPSVPIQPSVHPGRKRYWCHECGKGFRQSSALQTHQRVHTGEKPYRCDSCGKGFSRSSDLNIHRRVHTGEKPYKCEVCGKGFTQWAHLQAHERIHTGEK [...]
+chr4-04	SwissProt	protein_match	266088	266237	101.000000	-	.	Target=P18751.1 506 557 +;percentID=44;Gap=M33 I2 M17 ;sequence=MGMWEEASDTGMKGKKKDKNEEEEERGKKERMVNLTLEMIYLLTGEHYIPRKKSDDGGALHAPGSVIQKENNKNDKKILELMSNIIQLLTGEVAIRTHHVSIYFSLDEWDYIKGNKELYEEGIKEEPQQLRPQACEYKDESNVTAHMEATLCCNSDGNFINPENPEISPGEQPPPANGIKEEATSSEEGNQSDCSINPLTEEIQGTDTPTPIMGCSLNYSLSDNYISDEIKEEETSCQGRNQSDCSITPLTEQIQGTDTPTPIMGCSLKDNKYDGNPHWSPKNTLRRKYSCNECHEYLIHKRDFGKHQMTHKREKSFSCSECGKCFLNQLCPDRHQTGKKPFSCSKCGKCFAFLSDLTVHRRIHTGE [...]
+chr4-04	SwissProt	protein_match	266088	266231	101.000000	-	.	Target=Q08DG8.1 435 484 +;percentID=44;Gap=M31 I2 M17 ;sequence=MTAGLLTAGDPDQVTFEDVVVDFTQEEWGHLEPAQRTLYRDVMLETFGLLVSVGHWLPKPDVISLLEQEAELWAADKGGPRGVCPDLETRPQSKLSTENQGVTEEIPNSALVERFLQESLWHSKDEGAAGHREQGPEKSDSCVVQAACTLVKTLTEEQQQGDGCGENLSLRPDLPTQPMTPERQGAPTWGTHGQRENPDSNAQQKTCAKEKPYGCQECGKAFSHSLALIEHHRTHTGERPYECPECGKGFRNSSALTKHQRIHTGEKPYKCAQCGRTFNQIAPLIQHQRTHTGEKPYECSECGKSFSFRSSFSQHERTHTGEKPYTCSQCGKAFRQSIHLTQHLRIHTGEKPYQCGECGKAFSHSSS [...]
+chr4-04	SwissProt	protein_match	266088	266231	101.000000	-	.	Target=Q3MIS6-2.1 6 55 +;percentID=46;Gap=M32 I2 M16 ;sequence=MHTGEKPYKCHECGKLFSSNSNLSQHQRIHTGEKPYKCHECDKVFRSSSKLAQHQRIHTGEKPYKCHECDKVFNQIAHLVRHQKIHTGEKPYSCNKCGKVFSRHSYLAEHQTVHTGEKPYKCEECGKAFSVRSSLITHQLIHTGRKPYKCKECDKVFGRKCFLTSHQRIHTRERPYGCSQCGKIFSQKSDLIRHRKTHTDEKPYKCNKCGTAFREFSDLTAHFLIHSGEKPYECKECGKVFRYKSSLTSHHRIHTGEKPYKCNRCGKVFSRSSNLVCHQKIHTGEKPYKCNQCGKVFNQASYLTRHQIIHTGERPYRCSKCGKAFRGCSGLTAHLAIHTEKKSHECKECGKIFTQKSSLTNHHRIHIG [...]
+chr4-04	SwissProt	protein_match	266088	266231	102.000000	-	.	Target=Q9UC06.2 166 215 +;percentID=46;Gap=M31 I2 M17 ;sequence=MEVPPATKFGETFAFENRLESQQGLFPGEDLGDPFLQERGLEQMAVIYKEIPLGEQDEENDDYEGNFSLCSSPVQHQSIPPGTRPQDDELFGQTFLQKSDLSMCQIIHSEEPSPCDCAETDRGDSGPNAPHRTPQPAKPYACRECGKAFSQSSHLLRHLVIHTGEKPYECCECGKAFSQSSHLLRHQIIHTGEKPYECRECGKAFRQSSALTQHQKIHTGKRPYECRECGKDFSRSSSLRKHERIHTGERPYQCKECGKSFNQSSGLSQHRKIHTLKKPHECDLCGKAFCHRSHLIRHQRIHTGKKPYKCDECGKAFSQSSNLIEHRKTHTGEKPYKCQKCGKAFSQSSSLIEHQRIHTGEKPYECC [...]
+chr4-04	SwissProt	protein_match	266088	266231	102.000000	-	.	Target=Q8TAF7.2 271 320 +;percentID=46;Gap=M31 I2 M17 ;sequence=MAHELVMFRDVAIDVSQEEWECLNPAQRNLYKEVMLENYSNLVSLGLSVSKPAVISSLEQGKEPWMVVREETGRWCPGTWKTWGFHNNFLDNNEATDINADLASRDEPQKLSPKRDIYETELSQWVNMEEFKSHSPERSIFSAIWEGNCHFEQHQGQEEGYFRQLMINHENMPIFSQHTLLTQEFYDREKISECKKCRKIFSYHLFFSHHKRTHSKELSECKECTEIVNTPCLFKQQTIQNGDKCNECKECWKAFVHCSQLKHLRIHNGEKRYECNECGKAFNYGSELTLHQRIHTGEKPYECKECGKAFRQRSQLTQHQRLHTGEKPYECKQCGKAFIRGFQLTEHLRLHTGEKPYECKECGKTFR [...]
+chr4-04	SwissProt	protein_match	266088	266231	102.000000	-	.	Target=Q8TAF7-2.2 144 193 +;percentID=46;Gap=M31 I2 M17 ;sequence=MEEFKSHSPERSIFSAIWEGNCHFEQHQGQEEGYFRQLMINHENMPIFSQHTLLTQEFYDREKISECKKCRKIFSYHLFFSHHKRTHSKELSECKECTEIVNTPCLFKQQTIQNGDKCNECKECWKAFVHCSQLKHLRIHNGEKRYECNECGKAFNYGSELTLHQRIHTGEKPYECKECGKAFRQRSQLTQHQRLHTGEKPYECKQCGKAFIRGFQLTEHLRLHTGEKPYECKECGKTFRHRSHLTIHQRIHTGEKPYECRECGKAFSYHSSFSHHQKIHSGKKPYECHECGKAFCDGLQLTLHQRIHTGEKPYECKECGKTFRQCSHLKRHQRIHTGEKPHECMICGKAFRLHSHLIQHQRIHT [...]
+chr4-04	SwissProt	protein_match	266088	266231	102.000000	-	.	Target=Q5CZA5.2 227 276 +;percentID=46;Gap=M32 I2 M16 ;sequence=MALTDPAQVSVTFDDVAVTFTQEEWGQLDLAQRTLYQEVMLENCGLLVSLGCPVPRPELIYHLEHGQEPWTRKEDLSQGTCPGDKGKPKSTEPTTCELALSEGISFWGQLTQGASGDSQLGQPKDQDGFSEMQGERLRPGLDSQKEKLPGKMSPKHDGLGTADSVCSRIIQDRVSLGDDVHDCDSHGSGKNPVIQEEENIFKCNECEKVFNKKRLLARHERIHSGVKPYECTECGKTFSKSTYLLQHHMVHTGEKPYKCMECGKAFNRKSHLTQHQRIHSGEKPYKCSECGKAFTHRSTFVLHNRSHTGEKPFVCKECGKAFRDRPGFIRHYIIHSGENPYECFECGKVFKHRSYLMWHQQTHTGEK [...]
+chr4-04	SwissProt	protein_match	266088	266231	102.000000	-	.	Target=Q2KI58.1 486 535 +;percentID=48;Gap=M32 I2 M16 ;sequence=MFQVTFSDVAIDFSHEEWRWLNSTQRNLYKDVMVQNYENLVSLGLSIPKPYVIALLEDGKEPCMVEEKLSKDTFPDCKTRWENKELSMKEDIYDEDLPQMVLKEKTIQQNHEFSNFNKDLYYIKKFKGKYENQVEHFRPVTLTFRESPIGESVYKCNAFKSIFHLKSVFSEPQRISAEGKSHKCDILKKSLPTNSVIKNENINDGKKLLNSNESVAAFSQSKSLTLHQTLNKEKIYTCNECGKAFGKQSILNRHWRIHTGEKPYECHECGKTFSHGSSLTRHQISHSGEKPYKCIECGKAFSHVSSLTNHQSTHTGEKPYECMNCGKAFSRVSHLIEHLRIHTQEKLYECRICGKAFIHRSSLIHHQ [...]
+chr4-04	SwissProt	protein_match	266088	266231	102.000000	-	.	Target=Q5REF1.1 531 580 +;percentID=48;Gap=M32 I2 M16 ;sequence=MPQLQYPECYLAPNRCLVSNCGVNKMSNEELVGQNHGMEGEACTGEDVTFSDVAIDFSHEEWGWLNSAQRDLYKDVMVQNYENLVSVAGLSVTKPHVITLLEDGKEPWMMEKKLSKGLIPDWESRWENKELSTKKDIYDEDSPQTVIIEKVVKQSYEFSNSKMNLEYTEKLEGKHGSQVDHFRPAILTSRESPIADSVYKYNIFRSTFHSKSTLSEPQKISAEGNSYKYDILKKNLPKKSVIKNEKVNGGKKLLNSNKSGAAFSQGKSLALPQTCNREKIYTCSECGKAFGKQSILNRHWRIHTGEKPYECRECGKTFSHGSSLTRHLISHSGEKPYKCIECGKAFSHVSSLTNHQSTHTGEKPYEC [...]
+chr4-04	SwissProt	protein_match	266088	266231	102.000000	-	.	Target=P52742.2 436 485 +;percentID=44;Gap=M32 I2 M16 ;sequence=MTPGVRVSTDPEQVTFEDVVVDFSQEEWGQLKPAQRTLYRDVMLDTFRLLVSVGHWLPKPNVISLLEQEAELWAVESRLPQGVYPDLETRPKVKLSVLKQGISEEISNSVILVERFLWDGLWYCRGEDTEGHWEWSCESLESLAVPVAFTPVKTPVLEQWQRNGFGENISLNPDLPHQPMTPERQSPHTWGTRGKREKPDLNVLQKTCVKEKPYKCQECGKAFSHSSALIEHHRTHTGERPYECHECLKGFRNSSALTKHQRIHTGEKPYKCTQCGRTFNQIAPLIQHQRTHTGEKPYECSECGKSFSFRSSFSQHERTHTGEKPYECSECGKAFRQSIHLTQHLRIHTGEKPYQCGECGKAFSHSS [...]
+chr4-04	SwissProt	protein_match	266088	266231	102.000000	-	.	Target=Q2M3W8.1 487 536 +;percentID=48;Gap=M32 I2 M16 ;sequence=MPQVTFNDVAIDFTHEEWGWLSSAQRDLYKDVMVQNYENLVSVAGLSVTKPYVITLLEDGKEPWMMEKKLSKGMIPDWESRWENKELSTKKDNYDEDSPQTVIIEKVVKQSYEFSNSKKNLEYIEKLEGKHGSQVDHFRPAILTSRESPTADSVYKYNIFRSTFHSKSTLSEPQKISAEGNSHKYDILKKNLPKKSVIKNEKVNGGKKLLNSNKSGAAFSQGKSLTLPQTCNREKIYTCSECGKAFGKQSILNRHWRIHTGEKPYECRECGKTFSHGSSLTRHLISHSGEKPYKCIECGKAFSHVSSLTNHQSTHTGEKPYECMNCGKSFSRVSHLIEHLRIHTQEKLYECRICGKAFIHRSSLIHH [...]
+chr4-04	SwissProt	protein_match	266088	266336	102.000000	-	.	Target=Q2M3W8-2.1 165 248 +;percentID=31;Gap=M34 D1 M32 I2 M16 ;sequence=MMEKKLSKGMIPDWESRWENKELSTKKDNYDEDSPQTVIIEKVVKQSYEFSNSKKNLEYIEKLEGKHGSQVDHFRPAILTSRESPTADSVYKYNIFRSTFHSKSTLSEPQKISAEGNSHKYDILKKNLPKKSVIKNEKVNGGKKLLNSNKSGAAFSQGKSLTLPQTCNREKIYTCSECGKAFGKQSILNRHWRIHTGEKPYECRECGKTFSHGSSLTRHLISHSGEKPYKCIECGKAFSHVSSLTNHQSTHTGEKPYECMNCGKSFSRVSHLIEHLRIHTQEKLYECRICGKAFIHRSSLIHHQKIHTGEKPYECRECGKAFCCSSHLTRHQRIHTMEKQYECNKCLKVFSSLSFLVQ [...]
+chr4-04	SwissProt	protein_match	266088	266237	102.000000	-	.	Target=Q6ECI4.2 224 275 +;percentID=40;Gap=M34 I2 M16 ;sequence=MKSQEEVEVAGIKLCKAMSLGSVTFTDVAIDFSQDEWEWLNLAQRSLYKKVMLENYRNLVSVGLCISKPDVISLLEQEKDPWVIKGGMNRGLCPDLECVWVTKSLSLNQDIYEEKLPPAIIMERLKSYDLECSTLGKNWKCEDLFERELVNQKTHFRQETITHIDTLIEKRDHSNKSGTVFHLNTLSYIKQIFPMEERIFNFHTDKKSLKTHSVVKKHKQDRGEKKLLKCNDCEKIFSKISTLTLHQRIHTGEKPYECIECGKAFSQSAHLAQHQRIHTGEKPFECTECGKAFSQNAHLVQHQRVHTGEKPYQCKQCNKAFSQLAHLAQHQRVHTGEKPYECIECGKAFSDCSSLAHHRRIHTGKRP [...]
+chr4-04	SwissProt	protein_match	266088	266231	103.000000	-	.	Target=Q5VIY5.1 409 458 +;percentID=48;Gap=M32 I2 M16 ;sequence=MALPQGLLTFRDVAIEFSQEEWKCLDPAQRTLYRDVMLENYRNLVSLDISSKCMLKTLSSTGQGNTEVIHTGTLHRQASHHIGEFCFHEIEKDIHGFEFQWKEDETNGHAAPMTEIKELAGSTGQHDQRHAGNKRIKDQLGSSFHLHLPEPHIFQSEGKIGNQVEKSINNASSVSTSQRICCRPKTHISNKYGNNSLHSSLLTQKWEVHMREKSFECIQSFKSFNCSSLLKKHQIIHLEEKQCKCDVCGKVFNQKRYLACHRRCHTGEKPYKCNECGKTFGHNSSLFIHKALHTGEKPYECEECDKVFSRKSHLERHKRIHTGEKPYKCKVCDEAFAYNSYLAKHTILHTGEKPYTCNECGKVFNRL [...]
+chr4-04	SwissProt	protein_match	266088	266237	103.000000	-	.	Target=P21506.3 261 312 +;percentID=44;Gap=M33 I2 M17 ;sequence=MDAKSLTAWSRTLVTFKDVFVDFTREEWKLLDTAQQIVYRNVMLENYKNLVSLGYQLTKPDVILRLEKGEEPWLVEREIHQETHPDSETAFEIKSSVSSRSIFKDKQSCDIKMEGMARNDLWYLSLEEVWKCRDQLDKYQENPERHLRQVAFTQKKVLTQERVSESGKYGGNCLLPAQLVLREYFHKRDSHTKSLKHDLVLNGHQDSCASNSNECGQTFCQNIHLIQFARTHTGDKSYKCPDNDNSLTHGSSLGISKGIHREKPYECKECGKFFSWRSNLTRHQLIHTGEKPYECKECGKSFSRSSHLIGHQKTHTGEEPYECKECGKSFSWFSHLVTHQRTHTGDKLYTCNQCGKSFVHSSRLIRH [...]
+chr4-04	SwissProt	protein_match	266088	266231	103.000000	-	.	Target=Q6ZN57.1 156 205 +;percentID=46;Gap=M31 I2 M17 ;sequence=MEREGIWHSTLGETWEPNNWLEGQQDSHLSQVGVTHKETFTEMRVCGGNEFERCSSQDSILDTQQSIPMVKRPHNCNSHGEDATQNSELIKTQRMFVGKKIYECNQCSKTFSQSSSLLKHQRIHTGEKPYKCNVCGKHFIERSSLTVHQRIHTGEKPYKCNECGKAFSQSMNLTVHQRTHTGEKPYQCKECGKAFHKNSSLIQHERIHTGEKPYKCNECGKAFTQSMNLTVHQRTHTGEKPYECNECGKAFSQSMHLIVHQRSHTGEKPYECSQCGKAFSKSSTLTLHQRNHTGEKPYKCNKCGKSFSQSTYLIEHQRLHSGVKPFECNECGKAFSKNSSLTQHRRIHTGEKPYECMVCGKHFTGRS [...]
+chr4-04	SwissProt	protein_match	266088	266231	103.000000	-	.	Target=A6NDX5.5 471 520 +;percentID=44;Gap=M31 I2 M17 ;sequence=MSLMGHGKVEMLLYAVPLLKAPNCLSSSMQLPHGGGRHQELVRFRDVAVVFSPEEWDHLTPEQRNLYKDVMLDNCKYLASLGNWTYKAHVMSSLKQGKEPWMMEREVTGDPCPACQPALATFRALNESGNAFRQSFHHGEYRTHRTFVQHYECDDCGMAFGHVSQLTGHQKIHKVGETHEYGENTRGFRHRSSFTMLQRICTLYKHFECNQCGETFNRPSKVIQHQSMHSGLKPYKCDVCQKAFRFLSSLSIHQRFHVGNRVNLTRHQKTHTQRKPFSCNFCGKTFHRFSEKTQHLLIHTRKKYYTCNYCKKEFNPYSKFILHQRTHTGEKPHKCDVCEKSFKSISNLNKHQKTHTGEKPFSCNECK [...]
+chr4-04	SwissProt	protein_match	266088	266231	103.000000	-	.	Target=Q96LW9.2 265 314 +;percentID=44;Gap=M31 I2 M17 ;sequence=MASTEEQYDLKIVKVEEDPIWDQETHLRGNNFSGQEASRQLFRQFCYQETPGPREALSRLRELCHQWLRPEIHTKEQILELLVLEQFLTILPEELQAWVREHHPESGEEAVAVVEDLEQELSEPGNQAPDHEHGHSEVLLEDVEHLKVKQEPTDIQLQPMVTQLRYESFCLHQFQEQDGESIPENQELASKQEILKEMEHLGDSKLQRDVSLDSKYRETCKRDSKAEKQQAHSTGERRHRCNECGKSFTKSSVLIEHQRIHTGEKPYECEECGKAFSRRSSLNEHRRSHTGEKPYQCKECGKAFSASNGLTRHRRIHTGEKPYECKVCGKAFLLSSCLVQHQRIHTGEKRYQCRECGKAFIQNAGLF [...]
+chr4-04	SwissProt	protein_match	266088	266231	104.000000	-	.	Target=Q9HCL3.2 450 499 +;percentID=46;Gap=M31 I2 M17 ;sequence=MAHGSVTFRDVAIDFSQEEWEFLDPAQRDLYRDVMWENYSNFISLGPSISKPDVITLLDEERKEPGMVVREGTRRYCPDLESRYRTNTLSPEKDIYEIYSFQWDIMERIKSYSLQGSIFRNDWECKSKIEGEKEQQEGYFGQVKITSEKMTTYKRHNFLTEYQIVHNGEKVYECKECRKTFIRRSTLSQHLRIHTGEKPYKCKECGQAFRQRAHLIRHHKLHTGEKPYECKECGKAFTVLQELTQHQRLHTGEKPYECKECGKAFRVHQQLARHQRIHTGEKPYECKDCGKTFRQCTHLTRHQRLHTAEKLYECKECGKAFVCGPDLRVHQKIHFGEKPYECKECGKAFRICQQLTVHQSIHTGEKP [...]
+chr4-04	SwissProt	protein_match	266088	266237	104.000000	-	.	Target=Q9P2J8-2.3 230 281 +;percentID=46;Gap=M34 I2 M16 ;sequence=MEPKPATKKATRTKAISEDLSQEAILEKLTENGLWDSRMEGLWKWNDRILRLQNNQENHLSQRIIPLKKTPTSQRGFRFESILIPEPGIATEELHSRCQTQEENFTENLNLITDTHLGKIICKEMKGSKAIRQTSELTLGKKSNNKEKPYKCSTCEKAFHYRSLLIQHQRTHTKEKPYECNECGKTFSQPSYLSQHKKIHTGEKPYKCNECGKAFIASSSLMVHQRIHTKEKPYQCNVCGKSFSQCARLNQHQRIQTGEKPYKCSECGKAFSDKSKLARHQETHNGEKPYKCDDCGKAFRNKSYLSVHQKTHTEEKPYQCNECGKSFKNTTIFNVHQRIHTGEKPFRCNECGKAYRSNSSLIVHI [...]
+chr4-04	SwissProt	protein_match	266088	266237	104.000000	-	.	Target=Q9P2J8.3 356 407 +;percentID=46;Gap=M34 I2 M16 ;sequence=MSLQDSTLSREGKPEGEIMAAVFFSVGRLSPEVTQPDEDLHLQAEETQLVKESVTFKDVAIDFTLEEWRLMDPTQRNLHKDVMLENYRNLVSLGLAVSKPDMISHLENGKGPWVTVREISRIPYPDMEPKPATKKATRTKAISEDLSQEAILEKLTENGLWDSRMEGLWKWNDRILRLQNNQENHLSQRIIPLKKTPTSQRGFRFESILIPEPGIATEELHSRCQTQEENFTENLNLITDTHLGKIICKEMKGSKAIRQTSELTLGKKSNNKEKPYKCSTCEKAFHYRSLLIQHQRTHTKEKPYECNECGKTFSQPSYLSQHKKIHTGEKPYKCNECGKAFIASSSLMVHQRIHTKEKPYQCNVCGK [...]
+chr4-04	SwissProt	protein_match	266088	266231	105.000000	-	.	Target=Q8N4W9.2 845 894 +;percentID=48;Gap=M32 I2 M16 ;sequence=MLREEAAQKRKGKESGMALPQGRLTFRDVAIEFSLAEWKFLNPAQRALYREVMLENYRNLEAVDISSKHMMKEVLSTGQGNREVIHTGTLQRHQSYHIGDFCFQEIEKEIHNIEFQCQEDERNGHEAPTTKIKKLTGSTDQHDHRHAGNKPIKDQLGSSFYSHLPELHIFQIKGEIANQLEKSTSDASSVSTSQRISCRPQIHISNNYGNNPLNSSLLPQKQEVHMREKSFPCNESGKAFNCSSLLRKHQIPHLGDKQYKCDVCGKLFNHKQYLACHRRCHTGEKPYKCKECGKSFSYKSSLTCHHRLHTGVKPYKCNECGKVFRQNSALVIHKAIHTGEKPYKCNECGKAFNQQSHLSRHQRLHTG [...]
+chr4-04	SwissProt	protein_match	266088	266231	106.000000	-	.	Target=Q494X3.1 185 234 +;percentID=44;Gap=M31 I2 M17 ;sequence=MARVPLTFSDVAIDFSQEEWEYLNSDQRDLYRDVMLENYTNLVSLDFNFTTESNKLSSEKRNYEVNAYHQETWKRNKTFNLMRFIFRTDPQYTIEFGRQQRPKVGCFSQMIFKKHKSLPLHKRNNTREKSYECKEYKKGFRKYLHLTEHLRDHTGVIPYECNECGKAFVVFQHFIRHRKIHTDLKPYECNGCEKAFRFYSQLIQHQIIHTGMKPYECKQCGKAFRRHSHLTEHQKIHVGLKPFECKECGETFRLYRHMCLHQKIHHGVKPYKCKECGKAFGHRSSLYQHKKIHSGEKPYKCEQCEKAFVRSYLLVEHQRSHTGEKPHECMECGKAFSKGSSLLKHKRIHSSEKLYDCKDCGKAFCRG [...]
+chr4-04	SwissProt	protein_match	266088	266258	106.000000	-	.	Target=Q571J5.2 404 461 +;percentID=44;Gap=M8 D1 M31 I2 M17 ;sequence=MAVDLLAARGTEPVTFRDVAVSFSQDEWLHLDPAQRSLYREVMLENYSNLASLGFQASIPPVIGKLQKGQDPCMEREAPEDTCLDFEIWPEIEALPPKQDVLTKETSHGLIKNGSTKCVYWKISFGELVKTECRDIAQEQEKKVHGPGAESPKETTSEDGTPTGFEPEKPLFISKALVSQEGDPTESVPATYHTSEKDLPQDFDLMRSFQMYPGQKPHVCSECGKGFTQSLHLLEHKRLHTGEKPYKCSECGKSFSHRSSLLAHQRTHTGEKPYKCSECEKAFGSSSTLIKHLRVHTGEKPYRCRQCGKAFSQCSTLTVHQRIHTGEKLYKCAECDKAFNCRAKLHRHQRIHTGEKPYKCA [...]
+chr4-04	SwissProt	protein_match	266088	266231	108.000000	-	.	Target=Q09FC8-5.2 410 459 +;percentID=50;Gap=M17 I1 M6 D1 M8 I2 M16 ;sequence=MAFTQLTFRDVAIEFSQDEWKCLNSTQRTLYRDVMLENYRNLVSLDLSRNCVIKELAPQQEGNPGEVFHTVTLEQHEKHDIEEFCFREIKKKIHDFDCQWRDDERNCNKVTTAPKENLTCRRDQRDRRGIGNKSIKHQLGLSFLPHPHELQQFQAEGKIYECNHVEKSVNHGSSVSPPQIISSTIKTHVSNKYGTDFICSSLLTQEQKSCIREKPYRYIECDKALNHGSHMTVRQVSHSGEKGYKCDLCGKVFSQKSNLARHWRVHTGEKPYKCNECDRSFSRNSCLALHRRVHTGEKPYKCYECDKVFSRNSCLALHQKTHIGEKPYTCKECGKAFSVRSTLTNHQVIHSGK [...]
+chr4-04	SwissProt	protein_match	266088	266231	108.000000	-	.	Target=Q9BX82.1 541 590 +;percentID=48;Gap=M32 I2 M16 ;sequence=MNVEVVKVMPQDLVTFKDVAIDFSQEEWQWMNPAQKRLYRSMMLENYQSLVSLGLCISKPYVISLLEQGREPWEMTSEMTRSPFSDWESIYVTQELPLKQFMYDDACMEGITSYGLECSTFEENWKWEDLFEKQMGSHEMFSKKEIITHKETITKETEFKYTKFGKCIHLENIEESIYNHTSDKKSFSKNSMVIKHKKVYVGKKLFKCNECDKTFTHSSSLTVHFRIHTGEKPYACEECGKAFKQRQHLAQHHRTHTGEKLFECKECRKAFKQSEHLIQHQRIHTGEKPYKCKECRKAFRQPAHLAQHQRIHTGEKPYECKECGKAFSDGSSFARHQRCHTGKRPYECIECGKAFRYNTSFIRHWRS [...]
+chr4-04	SwissProt	protein_match	266088	266231	108.000000	-	.	Target=Q09FC8-2.2 422 471 +;percentID=50;Gap=M17 I1 M6 D1 M8 I2 M16 ;sequence=MPELYTEDFIQGCDVGELQEPGLPGLECNGAISAHCNLRLPDSNDSPASASRVAGITDLSRNCVIKELAPQQEGNPGEVFHTVTLEQHEKHDIEEFCFREIKKKIHDFDCQWRDDERNCNKVTTAPKENLTCRRDQRDRRGIGNKSIKHQLGLSFLPHPHELQQFQAEGKIYECNHVEKSVNHGSSVSPPQIISSTIKTHVSNKYGTDFICSSLLTQEQKSCIREKPYRYIECDKALNHGSHMTVRQVSHSGEKGYKCDLCGKVFSQKSNLARHWRVHTGEKPYKCNECDRSFSRNSCLALHRRVHTGEKPYKCYECDKVFSRNSCLALHQKTHIGEKPYTCKECGKAFSVRS [...]
+chr4-04	SwissProt	protein_match	266088	266231	108.000000	-	.	Target=Q09FC8.2 458 507 +;percentID=50;Gap=M17 I1 M6 D1 M8 I2 M16 ;sequence=MPELYTEDFIQGCDVGELQEPGLPGVLSYVGAQERALDHRKPSTSSKKTKRVEIDQRCENRLECNGAISAHCNLRLPDSNDSPASASRVAGITDLSRNCVIKELAPQQEGNPGEVFHTVTLEQHEKHDIEEFCFREIKKKIHDFDCQWRDDERNCNKVTTAPKENLTCRRDQRDRRGIGNKSIKHQLGLSFLPHPHELQQFQAEGKIYECNHVEKSVNHGSSVSPPQIISSTIKTHVSNKYGTDFICSSLLTQEQKSCIREKPYRYIECDKALNHGSHMTVRQVSHSGEKGYKCDLCGKVFSQKSNLARHWRVHTGEKPYKCNECDRSFSRNSCLALHRRVHTGEKPYKCYECDK [...]
+chr4-04	SwissProt	protein_match	266088	266240	108.000000	-	.	Target=Q96N38-3.1 13 65 +;percentID=45;Gap=M35 I2 M16 ;sequence=MLLHLHQHKRIHIRENSYQCEECDKVFKRFSTLTRHKRVHTGEKPFKCEECGKAFKHSSTLTTHKMIHTGEKPYRCEECGKAFYHSSHLTTHKVIHTGEKPFKCEECGKAFNHPSALTTHKFIHVKEKPYKCEECDKAFNRFSYLTKHKIIHSGEKSYKCEQCGKGFNWSSTLTKHRRIHTGEKPYKCEECGKAFNVSSHLTTHKMIHTGEKPYKCEECGKAFNHSSKLTIHKIIHTGEKPYKCEECGKAFNQSSNLTKHKIIHTGEKLYKCEECGKAFNRSSNLTTHKRIHTGEKPYKCEECGKAFNRSSNLTKHNIIHTGEKSYKCEECGKAFNQSSTLTKHRKIQQGMVAHACNPNTLRGLGEQ [...]
+chr4-04	SwissProt	protein_match	266088	266231	109.000000	-	.	Target=Q96NG5.1 150 199 +;percentID=50;Gap=M31 I2 M17 ;sequence=MAAVILPSTAAPSSLFPASQQKGHTQGGELVNELLTSWLRGLVTFEDVAVEFTQEEWALLDPAQRTLYRDVMLENCRNLASLGCRVNKPSLISQLEQDKKVVTEERGILPSTCPDLETLLKAKWLTPKKNVFRKEQSKGVKTERSHRGVKLNECNQCFKVFSTKSNLTQHKRIHTGEKPYDCSQCGKSFSSRSYLTIHKRIHNGEKPYECNHCGKAFSDPSSLRLHLRIHTGEKPYECNQCFHVFRTSCNLKSHKRIHTGENHHECNQCGKAFSTRSSLTGHNSIHTGEKPYECHDCGKTFRKSSYLTQHVRTHTGEKPYECNECGKSFSSSFSLTVHKRIHTGEKPYECSDCGKAFNNLSAVKKHL [...]
+chr4-04	SwissProt	protein_match	266088	266231	109.000000	-	.	Target=Q6ZNA1.2 608 657 +;percentID=50;Gap=M17 I1 M6 D1 M8 I2 M16 ;sequence=MALTQGPLTFRDVAIEFSQEEWKSLDPVQKALYWDVMLENYRNLVFLGILPKCMTKELPPIGNSNTGEKCQTVTLERHECYDVENFYLREIQKNLQDLEFQWKDGEINYKEVPMTYKNNLNGKRGQHSQEDVENKCIENQLTLSFQSRLTELQKFQTEGKIYECNQSEKTVNNSSLVSPLQRILPSVQTNISKKYENEFLQLSLPTQLEKTHIREKPYMCKGCGKAFRVSSSLINHQMVHTTEKPYKCNECGKAFHRGSLLTIHQIVHTRGKPYQCGVCGKIFRQNSDLVNHRRSHTGEKPYKCNECGKSFSQSYNLAIHQRIHTGEKPYKCNECGKTFKQGSCLTTHQIIHTGE [...]
+chr4-04	SwissProt	protein_match	266088	266240	109.000000	-	.	Target=P52738.2 268 320 +;percentID=45;Gap=M35 I2 M16 ;sequence=MSQGSVTFRDVAIDFSQEEWKWLQPAQRDLYRCVMLENYGHLVSLGLSISKPDVVSLLEQGKEPWLGKREVKRDLFSVSESSGEIKDFSPKNVIYDDSSQYLIMERILSQGPVYSSFKGGWKCKDHTEMLQENQGCIRKVTVSHQEALAQHMNISTVERPYGCHECGKTFGRRFSLVLHQRTHTGEKPYACKECGKTFSQISNLVKHQMIHTGKKPHECKDCNKTFSYLSFLIEHQRTHTGEKPYECTECGKAFSRASNLTRHQRIHIGKKQYICRKCGKAFSSGSELIRHQITHTGEKPYECIECGKAFRRFSHLTRHQSIHTTKTPYECNECRKAFRCHSFLIKHQRIHAGEKLYECDECGKVFT [...]
+chr4-04	SwissProt	protein_match	266088	266237	110.000000	-	.	Target=Q96NI8.1 214 265 +;percentID=46;Gap=M34 I2 M16 ;sequence=MAVGLLKAMYQELVTFRDVAVDFSQEEWDCLDSSQRHLYSNVMLENYRILVSLGLCFSKPSVILLLEQGKAPWMVKRELTKGLCSGWEPICETEELTPKQDFYEEHQSQKIIETLTSYNLEYSSLREEWKCEGYFERQPGNQKACFKEEIITHEEPLFDEREQEYKSWGSFHQNPLLCTQKIIPKEEKVHKHDTQKRSFKKNLMAIKPKSVCAEKKLLKCNDCEKVFSQSSSLTLHQRIHTGEKPYKCIECGKAFSQRSNLVQHQRIHTGEKPYECKECRKAFSQNAHLVQHLRVHTGEKPYECKVCRKAFSQFAYLAQHQRVHTGEKPYECIECGKAFSNRSSIAQHQRVHTGEKPYECNVCGKAF [...]
+chr4-04	SwissProt	protein_match	266088	266264	110.000000	-	.	Target=Q14591.3 105 165 +;percentID=40;Gap=M43 I2 M16 ;sequence=MEIQFNYESQEHHLLSDGENKTKIGKPASEEGITAKIEPLTEESSSLRMFSRILKAKNSVNLGINEKDQNVFKRRPHNCDEYGQSFVWSTSLFRHRKTHCEKPYEWDKCGKATGEKPYSCNWCIKSFSWSSDLIKHQRVHTGEKPYKCDECGKAFSQSSDLIIHQRIHIGEKPYQCRHCSKSFSQRSDLVKHQRIHTGEKPYTCNQCNKHFSQSSDVIKHQRIHTGEKPYKCDVCGKAFSQSSDLILHQRIHTGEKPYPCNQCSKSFSQNSDLIKHRRIHTGEKPYKCNECGKAFNQSSVLILHQRIHTGEKPYPCDQCSKTFSRLSDLINHQRIHTGEKPYPCNQCNKMFSRRSDLVKHHRIHTGE [...]
+chr4-04	SwissProt	protein_match	266088	266231	111.000000	-	.	Target=P51522.2 147 196 +;percentID=50;Gap=M32 I2 M16 ;sequence=MHGRKDDAQKQPVKNQLGLNPQSHLPELQLFQAEGKIYKYDHMEKSVNSSSLVSPPQRISSTVKTHISHTYECNFVDSLFTQKEKANIGTEHYKCNERGKAFHQGLHFTIHQIIHTKETQFKCDICGKIFNKKSNLASHQRIHTGEKPYKCNECGKVFHNMSHLAQHRRIHTGEKPYKCNECGKVFNQISHLAQHQRIHTGEKPYKCNECGKVFHQISHLAQHRTIHTGEKPYECNKCGKVFSRNSYLVQHLIIHTGEKPYRCNVCGKVFHHISHLAQHQRIHTGEKPYKCNECGKVFSHKSSLVNHWRIHTGEKPYKCNECGKVFSHKSSLVNHWRIHTGEKPYKCNECGKVFSRNSYLAQHLIIH [...]
+chr4-04	SwissProt	protein_match	266088	266240	112.000000	-	.	Target=Q86XU0.1 258 310 +;percentID=46;Gap=M20 I1 M6 D1 M8 I2 M16 ;sequence=MALSQGLFTFKDVAIEFSQEEWECLDPAQRALYRDVMLENYRNLLSLDEDNIPPEDDISVGFTSKGLSPKENNKEELYHLVILERKESHGINNFDLKEVWENMPKFDSLWDYDVKNYKGMPLTCNKNLTHRKDQQHNKSSIHFSLKQSVSIRDSAHQYFIHDKPFIRNLLKLKNNIRYAGNKYVKCFENKIGLSLQAQLAELQRFQTGEKMYECNPVEKSINSSSVSPLPPCVKNICNKYRKILKYPLLHTQYGRTHIREKSYKCNDCGKAFSKSSNLTNHQRIHSGQRPYKCNECGKAFNQCSNLTRHQRVHTGEKPYQCNICGKVCSQNSNLASHQRMHTGEKPYKCNECGKA [...]
+chr4-04	SwissProt	protein_match	266088	266234	113.000000	-	.	Target=Q9HCG1.2 478 528 +;percentID=53;Gap=M18 I1 M6 D1 M8 I2 M16 ;sequence=MALTQVRLTFRDVAIEFSQEEWKCLDPAQRILYRDVMLENYWNLVSLGLCHFDMNIISMLEEGKEPWTVKSCVKIARKPRTRECVKGVVTDIPPKCTIKDLLPKEKSSTEAVFHTVVLERHESPDIEDFSFKEPQKNVHDFECQWRDDTGNYKGVLMAQKEGKRDQRDRRDIENKLMNNQLGVSFHSHLPELQLFQGEGKMYECNQVEKSTNNGSSVSPLQQIPSSVQTHRSKKYHELNHFSLLTQRRKANSCGKPYKCNECGKAFTQNSNLTSHRRIHSGEKPYKCSECGKTFTVRSNLTIHQVIHTGEKPYKCHECGKVFRHNSYLATHRRIHTGEKPYKCNECGKAFRGHSN [...]
+chr4-04	SwissProt	protein_match	266088	266231	115.000000	-	.	Target=Q9Y6R6.1 359 408 +;percentID=50;Gap=M31 I2 M17 ;sequence=MVHGSVTFRDVAIDFSQEEWECLQPDQRTLYRDVMLENYSHLISLGSSISKPDVITLLEQEKEPWIVVSKETSRWYPDLESKYGPEKISPENDIFEINLPKHVIKQISKTLGLEAFYFRNDSEYRSRFEGRQGHQEGYINQKIISYEEMPAYTHASPIHNTHKPYECKECGKYFSCGSNLIQHQSIHTGEKPYKCKECGKAFQLHIQLTRHQKFHTGEKTFECKECGKAFNLPTQLNRHKNIHTVKKLFECKECGKSFNRSSNLTQHQSIHAGVKPYQCKECGKAFNRGSNLIQHQKIHSNEKPFVCRECEMAFRYHYQLIEHCRIHTGEKPFECKECRKAFTLLTKLVRHQKIHMGEKPFECRECG [...]
+chr4-04	SwissProt	protein_match	266088	266231	117.000000	-	.	Target=Q5SXM1.1 207 256 +;percentID=50;Gap=M32 I2 M16 ;sequence=MGTISLCIGVCAFEGANTSTSFYKLVYTAILSYSIQDLLPEQDMKDLCQKVTLTRHRSWGLDNLHLVKDWRTVNEGKGQKEYCNRLTQCSSTKSKIFQCIECGRNFSWRSILTEHKRIHTGEKPYKCEECGKVFNRCSNLTKHKRIHTGEKPYKCDECGKVFNWWSQLTNHKKIHTGEKPYKCDECDKVFNWWSQLTSHKKIHSGEKPYPCEECGKAFTQFSNLTQHKRIHTGEKPYKCKECCKAFNKFSNLTQHKRIHTGEKPYKCEECGNVFNECSHLTRHRRIHTGEKPYKCEECGKAFTQFASLTRHKRIHTGEKPYQCEECGKTFNRCSHLSSHKRIHTGEKPYKCEECGRTFTQFSNLTQH [...]
+chr4-04	SwissProt	protein_match	266088	266231	118.000000	-	.	Target=O75290.3 219 268 +;percentID=52;Gap=M31 I2 M17 ;sequence=MVHGSVTFRDVAIDFSQEEWECLQPDQRTLYRDVMLENYSHLISLGSSISKPDVITLLEQEKEPWMVVRKETSRRYPDLELKYGPEKVSPENDTSEVNLPKQVIKQISTTLGIEAFYFRNDSEYRQFEGLQGYQEGNINQKMISYEKLPTHTPHASLICNTHKPYECKECGKYFSRSANLIQHQSIHTGEKPFECKECGKAFRLHIQFTRHQKFHTGEKPFECNECGKAFSLLTLLNRHKNIHTGEKLFECKECGKSFNRSSNLVQHQSIHSGVKPYECKECGKGFNRGAHLIQHQKIHSNEKPFVCKECGMAFRYHYQLIEHCQIHTGEKPFECKECGKAFTLLTKLVRHQKIHTGEKPFECRECG [...]
+chr4-04	SwissProt	protein_match	266088	266231	122.000000	-	.	Target=Q9H7R5.1 335 384 +;percentID=54;Gap=M17 I1 M6 D1 M8 I2 M16 ;sequence=MGEAFYTVKLERLESCDTAGLSFQEVQKNTYDFECQWKDDEGNYKTVLMLQKENLPGRRAQRDRRAAGNRHIENQLGVSFQSHLPELQQFQREGKIYEYNQVEKSPNNRGKHYKCDECGKVFSQNSRLTSHKRIHTGEKPYQCNKCGKAFTVRSNLTIHQVIHTGEKPYKCNECGKVFSQPSNLAGHQRIHTGEKPYKCNECGKAFRAHSKLTTHQVIHTGEKPYKCKECGKCFTQNSHLASHRRIHTGEKPYKCNECGKAFSVRSSLTTHQTIHTGEKPYKCNECGKVFRHNSYLAKHRRIHTGEKPYKCNECGKAFSMHSNLTKHQIIHTGEKPFKCNECVKVFTQYSHLANH [...]
+chr4-04	SwissProt	protein_match	266088	266231	122.000000	-	.	Target=Q5R8X1.1 335 384 +;percentID=54;Gap=M17 I1 M6 D1 M8 I2 M16 ;sequence=MGEAFYTVKLERLESHDTEGLSFQEVQKNTYDFECPWKDDEGNSKRVLTLQKENLPGRRDQRDRRAAGNRLIENQLGVSFQSHLPELQQFQGEGKIYEYNQVEKSLSNRGKHYKCDECGKVFNQNSRLTSHKRIHTGEKPYRCNECGKAFTVRSNLTIHQVIHTGEKPYKCNECGKVFSQPSNLAGHQRIHTGEKPYKCNECGKAFRAHSKLTTHQVIHTGEKPYKCNECGKCFTQNSHLASHRRIHTGEKPYKCNECGKAFSVRSSLTTHQTIHTGEKPYKCNECGKVFRHNSYLTKHRRVHTGEKPYKCNECGKAFSMHSNLTKHQIIHTGEKPFKCNECVKVFTQYSHLANH [...]
+chr4-04	SwissProt	protein_match	266088	266303	128.000000	-	.	Target=Q8TB69.1 379 451 +;percentID=40;Gap=M23 D1 M32 I2 M16 ;sequence=MELLTFRDVAIEFSPEEWKCLDPAQQNLYRDVMLENYRNLVSLAVYSYYNQGILPEQGIQDSFKKATLGRYGSCGLENICLWKNWESIGEGEGQKECYNLCSQYLTTSHNKHLTVKGDKEYRIFQKKPQFLSAAPTEPCIPMNKYQHKFLKSVFCNKNQINFNHDSDISKHHSTHFLENYYNCNECEKVFYQSSKLIFPENIHIQEKPYNSNECGETSDPFSKLTQHQRIYIGESSQRCNKKCIIVFSQSHLKGHKIINTGEKSVKYKERGKAFTRGLHLGHQKIHTGEKPYKCKKCDKAFNKSSHLAQHQRIHTGEKPFKCKECGKAFNRGSYLTQHQRIHTGERAFKCEECGKAFNRG [...]
+chr4-04	SwissProt	protein_match	266088	266285	185.000000	-	.	Target=Q6ZR52.3 6 73 +;percentID=55;Gap=M50 I2 M16 ;sequence=MNECNVHKEGYNELNQYLTTTQSKIFQCDKYVKVFHKLLNSNRHNTKHTGKKPFKCKKCGKSFCMLLHLCQHKRIHIRENSYRCEECGKAFIWFSTLTRHRRVHTGEKSYKYECGKSFNQDSNLTTHKRIHTGQKPYKCEECGTSFYQFSYLTRHKLIHTREKPYKCEQYGKTFNQSSTLTGHKIIHNGEKPYKCEECGKAFSIFSTPTKHKIIHTEEKSHRCEEYCKAYKESSHLTTHKRIHTGEKPYKCEECGKAFSIFSTLTKHKIIHTEEKSHRCEECGKAYKESSHLTTHKRIHTGEKPYKCEECGKTFSVFSILTKHKIIHTEEKPYKCEECGKAFKRSSTLTKHRIIHTEEKPYKCEECGKAF [...]
+chr4-04	SwissProt	protein_match	266088	266411	278.000000	-	.	Target=O95780-2.1 3 116 +;percentID=54;Gap=M41 I4 M51 I2 M16 ;sequence=MSSHYTEDLLPEQCMQDSFQKVILRRYGSCGLEDLHLRKDGENVGECKDQKEIYNGLNQCLSTLPSKIFPYNKCVKVFSKSSNLNRENIRHTTEKLFKCMQCGKVFKSHSGLSYHKIIHTEEKLCICEECGKTFKWFSYLTKHKRIHTGEKPYKCEECGKAFNWCSSLTKHKRIHTGEKPYKCEECGKAFHWCSPFVRHKKIHTGEKPYTCEDCGRAFNRHSHLTKHKTIHTGKKPYKCKECGKAFNHCSLLTIHERTHTGEKPYKCEECGKAFNSSSILTEHKVIHSGEKPYKCEKCDKVFKRFSYLTKHKRIHTGEKPYKCEECGKAFNWSSILTEHKRIHTGEKPYNCEECGKAFNR [...]
+chr4-04	SwissProt	protein_match	266088	266420	282.000000	-	.	Target=O95780.1 76 192 +;percentID=53;Gap=M44 I4 M51 I2 M16 ;sequence=MELLTFRDVTIEFSLEEWEFLNPAQQSLYRKVMLENYRNLVSLGLTVSKPELISRLEQRQEPWNVKRHETIAKPPAMSSHYTEDLLPEQCMQDSFQKVILRRYGSCGLEDLHLRKDGENVGECKDQKEIYNGLNQCLSTLPSKIFPYNKCVKVFSKSSNLNRENIRHTTEKLFKCMQCGKVFKSHSGLSYHKIIHTEEKLCICEECGKTFKWFSYLTKHKRIHTGEKPYKCEECGKAFNWCSSLTKHKRIHTGEKPYKCEECGKAFHWCSPFVRHKKIHTGEKPYTCEDCGRAFNRHSHLTKHKTIHTGKKPYKCKECGKAFNHCSLLTIHERTHTGEKPYKCEECGKAFNSSSILTEHKV [...]
+chr4-04	SwissProt	protein_match	266088	266420	293.000000	-	.	Target=P17019.3 76 187 +;percentID=50;Gap=M34 D5 M4 I4 M52 I2 M16 ;sequence=MGPLTFMDVAIEFSLEEWQCLDTAQQNLYRNVMLENYRNLVFLGIAVSNLDLITCLEQGKEPWNMKRHEMVAKPPAMCSHFAKDLRPEQYIKNSFQQVILRRYGKCGYQKGCKSVDEHKLHKGGHKGLNRCVTTTQSKIVQCDKYVKVFHKYSNAKRHKIRHTGKNPFKCKECGKSFCMLSQLTQHEIIHTGEKPYKCEECGKAFKKSSNLTNHKIIHTGEKPYKCEECGKAFNQSSTLTRHKIIHTGEKLYKCEECGKAFNRSSNLTKHKIVHTGEKPYKCEECGKAFKQSSNLTNHKKIHTGEKPYKCGECGKAFTLSSHLTTHKRIHTGEKPYKCEECGKAFSVFSTLTKHK [...]
+chr4-04	SwissProt	protein_match	266088	266411	296.000000	-	.	Target=Q5JVG8.1 79 192 +;percentID=53;Gap=M41 I4 M51 I2 M16 ;sequence=MGPLQFRDVAIEFSLEEWHCLDAAQRNLYRDVMLENYRNLIFLGIVVSKPNLITCLEQGKKPLTMKRHEMIAKPPVMYSHFAQDLWSEQSIKDSFQKVILRRYEKCRHDNLQLKKGCKSVDECPVHKRGYNGLKQCLATTQRKIFQCDEYVKFLHKFSNSNKHKIRDTGKKSFKCIEYGKTFNQSSTRTTYKKIDAGEKRYKCEECGKAYKQSSHLTTHKKIHTGEKPYKCEECGKAYKQSCNLTTHKIIHTGEKPYRCRECGKAFNHPATLFSHKKIHTGEKPYKCDKCGKAFISSSTLTKHEIIHTGEKPYKCEECGKAFNRSSNLTKHKRIHTGDVPYKCDECGKTFTWYSSLSKHKR [...]
+chr4-04	SwissProt	protein_match	266088	266417	298.000000	-	.	Target=Q8IYN0.1 109 224 +;percentID=53;Gap=M43 I4 M51 I2 M16 ;sequence=MDDPRYGMCPLKGASGCPGAERSLLVQSYFEKGPLTFRDVAIEFSLEEWQCLDSAQQGLYRKVMLENYRNLVFLAGIALTKPDLITCLEQGKEPWNIKRHEMVAKPPVICSHFPQDLWAEQDIKDSFQEAILKKYGKYGHDNLQLQKGCKSVDECKVHKEHDNKLNQCLITTQSNIFQCDPSAKVFHTFSNSNRHKIRHTRKKPFKCKKCEKSFCMLLHLTQHKRFHITENSYQCKDCGKAFNWFSTLTTHRRIHTGEKPYKCEECGKAFNRSSHLTTHKIIHTGEKPYRCEECGKAFNRSSHLTTHKRIHTGVKPYKCTECGKAFNRSSHLTTHRIIHTGEKPYKCEECGKAFNQSSTL [...]
+chr4-04	SwissProt	protein_match	266088	266411	298.000000	-	.	Target=A6NN14.3 88 199 +;percentID=52;Gap=M41 I4 M38 D2 M11 I2 M16 ;sequence=MPGAPGSLEMGPLTFRDVTIEFSLEEWQCLDTVQQNLYRDVMLENYRNLVFLGMAVFKPDLITCLKQGKEPWNMKRHEMVTKPPVMRSHFTQDLWPDQSTKDSFQEVILRTYARCGHKNLRLRKDCKSANEGKMHKEGYNKLNQCRTATQRKIFQCNKHMKVFHKYSNRNKVRHTKKKTFKCIKCSKSFFMLSCLIRHKRIHIRQNIYKCEERGKAFKSFSTLTKHKIIHTEDKPYKYKKCGNAFKFSSTFTKHKRIHTGETPFRCEECGKAFNQSSNLTDHKRIHTGEKTYKCEECGKAFKGSSNFNAHKVIHTAEKPYKCEDCGKTFNHFSALRKHKIIHTGKKPYKREECG [...]
+chr4-04	SwissProt	protein_match	266088	266411	298.000000	-	.	Target=O75346.2 79 191 +;percentID=53;Gap=M9 D1 M30 I4 M52 I2 M16 ;sequence=MGPLQFRDVAIEFSLEEWHCLDTAQRNLYRDVMLENYRNLVFLGIVVSKPDLVTCLEQGKKPLTMERHEMIAKPPVMSSHFAQDLWPENIQNSFQIGMLRRYEECRHDNLQLKKGCKSVGEHKVHKGGYNGLNQCLTTTQKEIFQCDKYGKVFHKFSNSNTYKTRHTGINLFKCIICGKAFKRSSTLTTHKKIHTGEKPYRCEECGKAFNQSANLTTHKRIHTGEKPYRCEECGKAFKQSSNLTTHKKIHTGEKPYKCEECGKAFNRSTDLTTHKIVHTGEKPYKCEECGKAFKHPSHVTTHKKIHTRGKPYNCEECGKSFKHCSNLTIHKRIHTGEKPYKCEECGKAFHLSSHL [...]
+chr4-04	SwissProt	protein_match	266088	266411	298.000000	-	.	Target=O75346-2.2 3 115 +;percentID=53;Gap=M9 D1 M30 I4 M52 I2 M16 ;sequence=MSSHFAQDLWPENIQNSFQIGMLRRYEECRHDNLQLKKGCKSVGEHKVHKGGYNGLNQCLTTTQKEIFQCDKYGKVFHKFSNSNTYKTRHTGINLFKCIICGKAFKRSSTLTTHKKIHTGEKPYRCEECGKAFNQSANLTTHKRIHTGEKPYRCEECGKAFKQSSNLTTHKKIHTGEKPYKCEECGKAFNRSTDLTTHKIVHTGEKPYKCEECGKAFKHPSHVTTHKKIHTRGKPYNCEECGKSFKHCSNLTIHKRIHTGEKPYKCEECGKAFHLSSHLTTHKILHTGEKPYRCRECGKAFNHSTTLFSHEKIHTGEKPYKCDECGKTFTWPSILSKHKRTHTGEKPYKCEECG [...]
+chr4-04	SwissProt	protein_match	266088	266417	301.000000	-	.	Target=P17038-2.4 72 187 +;percentID=54;Gap=M43 I4 M51 I2 M16 ;sequence=MDVAIEFCLEEWQCLDIAQQNLYRNVMLENYRNLVFLGIAVSKPDLITCLEQEKEPWEPMRRHEMVAKPPVMCSHFTQDFWPEQHIKDPFQKATLRRYKNCEHKNVHLKKDHKSVDECKVHRGGYNGFNQCLPATQSKIFLFDKCVKAFHKFSNSNRHKISHTEKKLFKCKECGKSFCMLPHLAQHKIIHTRVNFCKCEKCGKAFNCPSIITKHKRINTGEKPYTCEECGKVFNWSSRLTTHKKNYTRYKLYKCEECGKAFNKSSILTTHKIIRTGEKFYKCKECAKAFNQSSNLTEHKKIHPGEKPYKCEECGKAFNWPSTLTKHKRIHTGEKPYTCEECGKAFNQFSNLTTHKRIHT [...]
+chr4-04	SwissProt	protein_match	266088	266417	301.000000	-	.	Target=P17038.4 78 193 +;percentID=54;Gap=M43 I4 M51 I2 M16 ;sequence=MGPLTFMDVAIEFCLEEWQCLDIAQQNLYRNVMLENYRNLVFLGIAVSKPDLITCLEQEKEPWEPMRRHEMVAKPPVMCSHFTQDFWPEQHIKDPFQKATLRRYKNCEHKNVHLKKDHKSVDECKVHRGGYNGFNQCLPATQSKIFLFDKCVKAFHKFSNSNRHKISHTEKKLFKCKECGKSFCMLPHLAQHKIIHTRVNFCKCEKCGKAFNCPSIITKHKRINTGEKPYTCEECGKVFNWSSRLTTHKKNYTRYKLYKCEECGKAFNKSSILTTHKIIRTGEKFYKCKECAKAFNQSSNLTEHKKIHPGEKPYKCEECGKAFNWPSTLTKHKRIHTGEKPYTCEECGKAFNQFSNLTTHK [...]
+chr4-04	SwissProt	protein_match	266088	266417	303.000000	-	.	Target=Q96H40.3 77 192 +;percentID=52;Gap=M43 I4 M51 I2 M16 ;sequence=MESLQFRDVAVEFSLEEWHCLDTAQQNLYRDVMLENYRHLVFLGIIVSKPDLITCLEQGIKPLTMKRHEMIAKPPVVCSHFAQDLWPEQSIKDSYQKVILRKFEKCGHGNLHFKKGCESVDECKLHKRGYNGLNQCLTTTQSKIFQCGKYVKVFHQFSNSKRHKRRHTEKKPLKYIEGDKAFNQSSTHTTHKKIDTGEKPYKCEECGKAFNRSSCL
+chr4-04	SwissProt	protein_match	266088	266411	303.000000	-	.	Target=Q9H8G1.2 111 224 +;percentID=54;Gap=M41 I4 M51 I2 M16 ;sequence=MENLKSGVYPLKEASGCPGADRNLLVYSFYEKGPLTFRDVAIEFSLEEWQCLDTAQQDLYRKVMLENYRNLVFLAGIAVSKPDLITCLEQGKEPWNMKRHAMVDQPPVTYSHFAQDLWPEQGIKDSFQEVILRRYGKCGHEDLQLRTGCRSVDECNLHKECYDELNQCLTTTQSEIFQYDKYVNVFYKFSNPNIQKIRHTGKKPFKCKKCDKSFCMLLHLTQHKRIHIRENSYQCEECGKVFNWFSTLTRHRRIHTGEKPYKCEQCGKAFKQSSTLTTHKIIHTGEKPYRCEECGKTFNRSSHLTTHKRIHTGEKPYRCEECGRAFNRSSHLTTHKIIHTGEKPYKCEECGKAFNQSSTL [...]
+chr4-04	SwissProt	protein_match	266088	266417	305.000000	-	.	Target=A6NK75.3 45 160 +;percentID=56;Gap=M43 I4 M51 I2 M16 ;sequence=MLENYRNLVFVGIAASKPDLITCLEQGKEPWNVKRHEMVTEPPVVYSYFAQDLWPKQGKKNYFQKVILRTYKKCGRENLQLRKYCKSMDECKVHKECYNGLNQCLTTTQNKIFQYDKYVKVFHKFSNSNRHKIGHTGKKSFKCKECEKSFCMLSHLAQHKRIHSGEKPYKCKECGKAYNEASNLSTHKRIHTGKKPYKCEECGKAFNRLSHLTTHKIIHTGKKPYKCEECGKAFNQSANLTTHKRIHTGEKPYKCEECGRAFSQSSTLTAHKIIHAGEKPYKCEECGKAFSQSSTLTTHKIIHTGEKFYKCEECGKAFSRLSHLTTHKRIHSGEKPYKCEECGKAFKQSSTLTTHKRIHAG [...]
+chr4-04	SwissProt	protein_match	266088	266417	306.000000	-	.	Target=A8MTY0.2 77 189 +;percentID=56;Gap=M43 I4 M38 D4 M7 I1 M2 I2 M16 ;sequence=MGPLTFMDVAIEFSVEEWQCLDTAQQNLYRNVMLENYRNLVFLGIAVSKPDLITCLEQGKEPWNMERHEMVAKPPGMCCYFAQDLRPEQSIKASLQRIILRKYEKCGHHNLQLKKGYKSVDEYKVHKGSYNGFNQCLTTTQSKIFQCDKYVKDFHKFSNSNRHKTEKNPFKCKECGKSFCVLSHLTQHKRIHTTVNSYKLEECGKAFNVSSTLSQHKRIHTGDKPYKCEECGKAFNVSSTLTQHKRIHTGEKPYKCEECGKAFNVSSTLTQHKRIHTGEKPYKCEECGKAFNTSSHLTTHKRIHTGEKPYKCEECGKAFNQFSQLTTHKIIHTGEKPYKCKECGKAFKR [...]
+chr4-04	SwissProt	protein_match	266088	266420	307.000000	-	.	Target=Q96N38-2.1 48 164 +;percentID=53;Gap=M44 I4 M51 I2 M16 ;sequence=MNVMLENYKNLVFLAGIAVSKQDPITSLEQEKEPWNMKICEMVDESPAMCSSFTRDLWPEQDIKDSFQQVILRRHGKCEHENLQLRKGSANVVECKVYKKGYNELNQCLTTTQSKIFPCDKYIKVFHKIFNSNRHKTRHTGEKPFKCKKCDESFCMLLHLHQHKRIHIRENSYQCEECDKVFKRFSTLTRHKRVHTGEKPFKCEECGKAFKHSSTLTTHKMIHTGEKPYRCEECGKAFYHSSHLTTHKVIHTGEKPFKCEECGKAFNHPSALTTHKFIHVKEKPYKCEECDKAFNRFSYLTKHKIIHSGEKSYKCEQCGKGFNWSSTLTKHRRIHTGEKPYKCEECGKAFNVSSHLTTH [...]
+chr4-04	SwissProt	protein_match	266088	266420	307.000000	-	.	Target=Q96N38.1 48 164 +;percentID=53;Gap=M44 I4 M51 I2 M16 ;sequence=MNVMLENYKNLVFLAGIAVSKQDPITSLEQEKEPWNMKICEMVDESPAMCSSFTRDLWPEQDIKDSFQQVILRRHGKCEHENLQLRKGSANVVECKVYKKGYNELNQCLTTTQSKIFPCDKYIKVFHKIFNSNRHKTRHTGEKPFKCKKCDESFCMLLHLHQHKRIHIRENSYQCEECDKVFKRFSTLTRHKRVHTGEKPFKCEECGKAFKHSSTLTTHKMIHTGEKPYRCEECGKAFYHSSHLTTHKVIHTGEKPFKCEECGKAFNHPSALTTHKFIHVKEKPYKCEECDKAFNRFSYLTKHKIIHSGEKSYKCEQCGKGFNWSSTLTKHRRIHTGEKPYKCEECGKAFNVSSHLTTHKM [...]
+chr4-04	SwissProt	protein_match	266088	266417	308.000000	-	.	Target=Q03938.2 77 192 +;percentID=52;Gap=M43 I4 M51 I2 M16 ;sequence=MGPLEFRDVAIEFSLEEWHCLDTAQQNLYRDVMLENYRHLVFLGIVVTKPDLITCLEQGKKPFTVKRHEMIAKSPVMCFHFAQDLCPEQSLKDSFQKVIVTRYEKREYGNLELKKGCESVDEGKVHKRGYNGLNQCLTATQSKVFQCDTYVKVSHIFSNSNRHKIRDTGKKPFKCIECGKAFNQSSTLATHKKIHTGEITCKCEECGKAFNRSSHLT
+chr4-04	SwissProt	protein_match	266088	266420	310.000000	-	.	Target=O14628-4.2 76 191 +;percentID=58;Gap=M44 I4 M5 D1 M45 I2 M16 ;sequence=MTLLTFRDVAIEFSLEEWKCLDLAQQNLYRDVMLENYRNLFSVGLTVCKPGLITCLEQRKEPWNVKRQEAADGHPAMSSHFTQDLLPEQGIQDAFPKRILRGYGNCGLDNLYLRKDWESLDECKLQKDYNGLNQCSSTTHSKIFQYNKYVKIFDNFSNLHRRNISNTGEKPFKCQECGKSFQMLSFLTEHQKIHTGKKFQKCGECGKTFIQCSHFTEPENIDTGEKPYKCQECNNVIKTCSVLTKNRIYAGGEHYRCEEFGKVFNQCSHLTEHEHGTEEKPCKYEECSSVFISCSSLSNQQMILAGEKLSKCETWYKGFNHSPNPSKHQRNEIGGKPFKCEECDSIFKWFSDL [...]
+chr4-04	SwissProt	protein_match	266088	266420	310.000000	-	.	Target=O14628-7.2 80 195 +;percentID=58;Gap=M44 I4 M5 D1 M45 I2 M16 ;sequence=MAGAQTLLTFRDVAIEFSLEEWKCLDLAQQNLYRDVMLENYRNLFSVGLTVCKPGLITCLEQRKEPWNVKRQEAADGHPAMSSHFTQDLLPEQGIQDAFPKRILRGYGNCGLDNLYLRKDWESLDECKLQKDYNGLNQCSSTTHSKIFQYNKYVKIFDNFSNLHRRNISNTGEKPFKCQECGKSFQMLSFLTEHQKIHTGKKFQKCGECGKTFIQCSHFTEPENIDTGEKPYKCQECNNVIKTCSVLTKNRIYAGGEHYRCEEFGKVFNQCSHLTEHEHGTEEKPCKYEECSSVFISCSSLSNQQMILAGEKLSKCETWYKGFNHSPNPSKHQRNEIGGKPFKCEECDSIFKW [...]
+chr4-04	SwissProt	protein_match	266088	266423	311.000000	-	.	Target=O14628-5.2 124 240 +;percentID=57;Gap=M45 I4 M5 D1 M45 I2 M16 ;sequence=MTLLTFRDVAIEFSLEEWKCLDLAQQNLYRDVMLENYRNLFSVGLTVCKPGLITCLEQRKEPWNVKRQEAADGHPEMGFHHATQACLELLGSSDLPASASQSAGITGVNHRAQPGLNVSVDKFTAMSSHFTQDLLPEQGIQDAFPKRILRGYGNCGLDNLYLRKDWESLDECKLQKDYNGLNQCSSTTHSKIFQYNKYVKIFDNFSNLHRRNISNTGEKPFKCQECGKSFQMLSFLTEHQKIHTGKKFQKCGECGKTFIQCSHFTEPENIDTGEKPYKCQECNNVIKTCSVLTKNRIYAGGEHYRCEEFGKVFNQCSHLTEHEHGTEEKPCKYEECSSVFISCSSLSNQQMI [...]
+chr4-04	SwissProt	protein_match	266088	266423	311.000000	-	.	Target=O14628-6.2 128 244 +;percentID=57;Gap=M45 I4 M5 D1 M45 I2 M16 ;sequence=MAGAQTLLTFRDVAIEFSLEEWKCLDLAQQNLYRDVMLENYRNLFSVGLTVCKPGLITCLEQRKEPWNVKRQEAADGHPEMGFHHATQACLELLGSSDLPASASQSAGITGVNHRAQPGLNVSVDKFTAMSSHFTQDLLPEQGIQDAFPKRILRGYGNCGLDNLYLRKDWESLDECKLQKDYNGLNQCSSTTHSKIFQYNKYVKIFDNFSNLHRRNISNTGEKPFKCQECGKSFQMLSFLTEHQKIHTGKKFQKCGECGKTFIQCSHFTEPENIDTGEKPYKCQECNNVIKTCSVLTKNRIYAGGEHYRCEEFGKVFNQCSHLTEHEHGTEEKPCKYEECSSVFISCSSLSN [...]
+chr4-04	SwissProt	protein_match	266088	266417	312.000000	-	.	Target=A6NK21.3 77 192 +;percentID=57;Gap=M37 I3 M6 I1 M51 I2 M16 ;sequence=MGVLTFRDVAIEFSLEEWHCLDTAQQNLYRNVMLENYRNLVFLGIAASKPDLITCLEQGKEPWNVKRHEMVAEPPVVCSYFAQDLWPNQGIKNCFQKVILRRYKKCGHENLQLGKYRKSMDECKVHEECCNGFNQCSRTTQSKILQCDKYVKVFHKFSNSNRYKIRHTGKKPFKCKECEKSFFMLSHSAQHKRIHSGEKPYKCKECGKAYNEASNLSTHKRIHTGKKPYKCEDCGKAFNWLSHLTTQKIIHTGKKPYKCEDCGKAFNQSANLTTHKRIHTGEKPYKCEECGKAFSQSSTLTTHKIIHAGEKPYKCEECGKSFNQSSVLHLTTRKRIHSGEKPYKCEECGKAFKQS [...]
+chr4-04	SwissProt	protein_match	266088	266408	314.000000	-	.	Target=Q03924-2.3 16 128 +;percentID=55;Gap=M43 I4 M48 I2 M16 ;sequence=MKRHEMVAKHLVMFYYFAQHLWPEQNIRDSFQKVTLRRYRKCGYENLQLRKGCKSVVECKQHKGDYSGLNQCLKTTLSKIFQCNKYVEVFHKISNSNRHKMRHTENKHFKCKECRKTFCMLSHLTQHKRIHTRVNFYKCEAYGRAFNWSSTLNKHKRIHTGEKPYKCKECGKAFNQTSHLIRHKRIHTEEKPYKCEECGKAFNQSSTLTTHNIIHTGEIPYKCEKCVRAFNQASKLTEHKLIHTGEKRYECEECGKAFNRSSKLTEHKYIHTGEKLYKCEECDKAFNLSSTLTKHKVIHTGEKLYKCKECGKAFKQFSHLAIHNIIHTGEKLYKCEECGKAFNSSSNLTAHKKNRTGEK [...]
+chr4-04	SwissProt	protein_match	266088	266432	314.000000	-	.	Target=O14628.2 144 263 +;percentID=57;Gap=M48 I4 M5 D1 M45 I2 M16 ;sequence=MTLLTFRDVAIEFSLEEWKCLDLAQQNLYRDVMLENYRNLFSVGLTVCKPGLITCLEQRKEPWNVKRQEAADGHPEMGFHHATQACLELLGSSDLPASASQSAGITGVNHRAQPGLNVSVDKFTALCSPGVLQTVKWFLEFRCIFSLAMSSHFTQDLLPEQGIQDAFPKRILRGYGNCGLDNLYLRKDWESLDECKLQKDYNGLNQCSSTTHSKIFQYNKYVKIFDNFSNLHRRNISNTGEKPFKCQECGKSFQMLSFLTEHQKIHTGKKFQKCGECGKTFIQCSHFTEPENIDTGEKPYKCQECNNVIKTCSVLTKNRIYAGGEHYRCEEFGKVFNQCSHLTEHEHGTEEKPC [...]
+chr4-04	SwissProt	protein_match	266088	266408	314.000000	-	.	Target=Q03924.3 16 128 +;percentID=55;Gap=M43 I4 M48 I2 M16 ;sequence=MKRHEMVAKHLVMFYYFAQHLWPEQNIRDSFQKVTLRRYRKCGYENLQLRKGCKSVVECKQHKGDYSGLNQCLKTTLSKIFQCNKYVEVFHKISNSNRHKMRHTENKHFKCKECRKTFCMLSHLTQHKRIHTRVNFYKCEAYGRAFNWSSTLNKHKRIHTGEKPYKCKECGKAFNQTSHLIRHKRIHTEEKPYKCEECGKAFNQSSTLTTHNIIHTGEIPYKCEKCVRAFNQASKLTEHKLIHTGEKRYECEECGKAFNRSSKLTEHKYIHTGEKLYKCEECDKAFNLSSTLTKHKVIHTGEKLYKCKECGKAFKQFSHLAIHNIIHTGEKLYKCEECGKAFNSSSNLTAHKKNRTGEKPY [...]
+chr4-04	SwissProt	protein_match	266088	266417	315.000000	-	.	Target=O43345.1 77 192 +;percentID=56;Gap=M43 I4 M50 I2 M17 ;sequence=MGSLTFRDVAIEFSLEEWQCLDTAQQNLYRNVMLENYRNLVFLGIAAFKPDLIIFLEEGKESWNMKRHEMVEESPVICSHFAQDLWPEQGIEDSFQKVILRRYEKCGHENLHLKIGYTNVDECKVHKEGYNKLNQSLTTTQSKVFQRGKYANVFHKCSNSNRHKIRHTGKKHLQCKEYVRSFCMLSHLSQHKRIYTRENSYKCEEGGKAFNWSSTLTYYKSAHTGEKPYRCKECGKAFSKFSILTKHKVIHTGEKSYKCEECGKAFNQSAILTKHKIIHTGEKPNKCEECGKAFSKVSTLTTHKAIHAGEKPYKCKECGKAFSKVSTLITHKAIHAGEKPYKCKECGKAFSKFSILTKHKV [...]
+chr4-04	SwissProt	protein_match	266088	266411	315.000000	-	.	Target=A6NF79.3 91 203 +;percentID=57;Gap=M41 I4 M5 D1 M45 I2 M16 ;sequence=MAKRPGPPGSREMGLLTFRDIAIEFSLEEWQCLDCAQRNLYRDVMLENYRNLVSLGIAVSKPDLITCLEQNKESQNIKRNEMVAKRPVTRSHFTQDLQPEQGIKDSLQKVIPRTYGKCGHEKLQFKKCCKSVGECEVPKGYSEVNQCLSTTQNKIFQTHKYVKVFGKFSNSNRDKTRYTGKKHFKCNKYGKSFCMLSHLNQHQVIHTREKSYKCKECGKSFNCSSNHTTHKIIHTGEKPYRCEECGKAFSWSANLTRHKRTHTGEKPYTCEECGQAFRRSSALTNHKRIHTGGRPYKCEECGKAFSVSSTLTDHKRIHTGEKPCRCEECGKAFSWSSNLSRHKRIHTREKPYACE [...]
+chr4-04	SwissProt	protein_match	266088	266411	315.000000	-	.	Target=A6NKZ1.3 91 203 +;percentID=57;Gap=M41 I4 M5 D1 M45 I2 M16 ;sequence=MAKRPGPPGSREMGLLTFRDIAIEFSLEEWQCLDCAQRNLYRHVMLENYRNLVSLGIAVSKPDLITCLEQNKESQNIKRNEMVAKRPVTHSHFTQDLQPEQGIKDSLQKVIPRTYGKCGHEKLQFKKCCKSVGECEVPKGYSEVNQCLSTTQNKIFQTHKYVKVFGKFSNSNRDKTRYTGKKHFKCNKYGKSFCMLSHLNQHQVIHTREKSYKCKECGKSFNCSSNHTTHKIIHTGEKPYRCEECGKAFSWSANLTRHKRIHTGEKPYTCEECGQAFRRSSALTNHKRIHTGGRPYKCEECGKAFSVSSTLTDHKRIHTGEKPCRCEECGKAFSWSSNLTRHKRIHTRKPYACEE [...]
+chr4-04	SwissProt	protein_match	266088	266423	316.000000	-	.	Target=P52744.2 12 129 +;percentID=55;Gap=M45 I4 M50 I2 M17 ;sequence=MKRHEMVVAKHSALCSRFAQDLWLEQNIKDSFQKVTLSRYGKYGHKNLQLRKGCKSVDECKGHQGGFNGLNQCLKITTSKIFQCNKYVKVMHKFSNSNRHKIRHTENKHFRCKECDKSLCMLSRLTQHKKIHTRENFYKCEECGKTFNWSTNLSKPKKIHTGEKPYKCEVCGKAFHQSSILTKHKIIRTGEKPYKCAHCGKAFKQSSHLTRHKIIHTEEKPYKCEQCGKVFKQSPTLTKHQIIYTGEEPYKCEECGKAFNLS
+chr4-04	SwissProt	protein_match	266088	266417	318.000000	-	.	Target=O75437.3 86 201 +;percentID=56;Gap=M43 I4 M51 D1 M8 I3 M7 ;sequence=MPGPPRSLEMGLLTFRDVAIEFSLEEWQHLDIAQQNLYRNVMLENYRNLAFLGIAVSKPDLITCLEQGKEPWNMKRHEMVDEPPGMCPHFAQDLWPEQGMEDSFQKAILRRYGKYGHENLQLRKGCKSVDEYKVNKEGYNGLNQCFTTAQSKVFQCDKYLKVFYKFLNSNRPKIRHTEKKSFKCKKRVKLFCMLSHKTQHKSIYHREKSYKCKECGKTFNWSSTLTNHRKIYTEEKPYKCEEYNKSPKQLSTLTTHEIIHAGEKLYKCEECGEAFNRSSNLTTHKIIHTGEKPYKCEECGKAFIWSSTLTEHKKIHTRKKPYKCEECGKAFIWSSTLTRHKRMHTGEKPYKCEECG [...]
+chr4-04	SwissProt	protein_match	266088	266417	318.000000	-	.	Target=O75437-2.3 86 201 +;percentID=56;Gap=M43 I4 M51 D1 M8 I3 M7 ;sequence=MPGPPRSLEMGLLTFRDVAIEFSLEEWQHLDIAQQNLYRNVMLENYRNLAFLGIAVSKPDLITCLEQGKEPWNMKRHEMVDEPPGMCPHFAQDLWPEQGMEDSFQKAILRRYGKYGHENLQLRKGCKSVDEYKVNKEGYNGLNQCFTTAQSKVFQCDKYLKVFYKFLNSNRPKIRHTEKKSFKCKKRVKLFCMLSHKTQHKSIYHREKSYKCKECGKTFNWSSTLTNHRKIYTEEKPYKCEEYNKSPKQLSTLTTHEIIHAGEKLYKCEECGEAFNRSSTFTKHKVIHTGVKPYKCEECGKAFFWSSTLTKHKRIHTGEQPYKWEKFGKAFNRSSHLTTDKITHWREILQV
+chr4-04	SwissProt	protein_match	266088	266417	324.000000	-	.	Target=Q9Y2Q1.1 77 192 +;percentID=55;Gap=M43 I4 M48 I2 M19 ;sequence=MGPLTIRDVTVEFSLEEWHCLDTAQQNLYRDVMLENYRNLVFLGIAVSKPDLITCLEQGKEPCNMKRHEMVAKPPVMCSHIAEDLCPERDIKYFFQKVILRRYDKCEHENLQLRKGCKSVDECKVCKGGYNGLNQCLITTQSKMYQCDKYVKVFYKFSNSDRHKIRHTEKKTCKCKECGKAFNQSSALTRHKMTHTGEKPYKCEECGKAFNRSSHLTQHKVIHTREKPYKCEECGKAFNRSSHITQHKRIHNREKPFKYDECCKAFKWSSALTTLTQHKRIHTGEKPYKCEECGKAFNQSSALTRHKMIHTGEKPFQCEECGKAFNRSSHLTQHKIIHTKEKPYKCEECGKAFNRSSHLTK [...]
+chr4-04	SwissProt	protein_match	266088	266417	326.000000	-	.	Target=Q8IYX0.1 89 203 +;percentID=59;Gap=M37 D1 M5 I4 M51 I2 M16 ;sequence=MAKRPGSPGSREMGLLTFRDVVIEFSLEEWQCLDHAQQNLYRDVMLENYRNLVSLGIAVSKPDLITCLEQNKEPWNIKRNEMVTKHPVMCSHFTQDLPPELGIKDSLQKVIPRRYGKSGHDNLQVKTCKSMGECEVQKGGCNEVNQCLSTTQNKIFQTHKCVKVFGKFSNSNRHKTRHTGKKHFKCKKYGKSFCMVSQLHQHQIIHTRENSYQCEECGKPFNCSSTLSKHKRIHTGEKPYRCEECGKAFTWSSTLTKHRRIHTGEKPYTCEECGQAFSRSSTLANHKRIHTGEKPYTCEECGKAFSLSSSLTYHKRIHTGEKPYTCEKCGKAFNCSSTLKKHKIIHTGEKPYKCK [...]
+chr4-04	SwissProt	protein_match	266088	266417	327.000000	-	.	Target=Q03936.2 77 192 +;percentID=58;Gap=M43 I4 M51 D1 M1 I3 M14 ;sequence=MGPLTFRDVKIEFSLEEWQCLDTAQRNLYRDVMLENYRNLVFLGIAVSKPDLITWLEQGKEPWNLKRHEMVDKTPVMCSHFAQDVWPEHSIKDSFQKVILRTYGKYGHENLQLRKDHKSVDACKVYKGGYNGLNQCLTTTDSKIFQCDKYVKVFHKFPNVNRNKIRHTGKKPFKCKNRGKSFCMLSQLTQHKKIHTREYSYKCEECGKAFNWSSTLTKHKIIHTGEKPYKCEECGKAFNRSSNLTKHKIIHTGEKPYKCEECGKAFNRSSTLTKHKRIHTEEKPYKCEECGKAFNQFSILNKHKRIHMEDKPYKCEECGKAFRVFSILKKHKIIHTGEKPYKCEECGKAFNQFSN [...]
+chr4-04	SwissProt	protein_match	266088	266417	327.000000	-	.	Target=Q03936-2.2 8 123 +;percentID=58;Gap=M43 I4 M51 D1 M1 I3 M14 ;sequence=MVDKTPVMCSHFAQDVWPEHSIKDSFQKVILRTYGKYGHENLQLRKDHKSVDACKVYKGGYNGLNQCLTTTDSKIFQCDKYVKVFHKFPNVNRNKIRHTGKKPFKCKNRGKSFCMLSQLTQHKKIHTREYSYKCEECGKAFNWSSTLTKHKIIHTGEKPYKCEECGKAFNRSSNLTKHKIIHTGEKPYKCEECGKAFNRSSTLTKHKRIHTEEKPYKCEECGKAFNQFSILNKHKRIHMEDKPYKCEECGKAFRVFSILKKHKIIHTGEKPYKCEECGKAFNQFSNLTKHKIIHTGEKPYKCDECGKAFNQSSTLTKHKRIHTGEKPYKCEECGKAFKQSSTLTEHKIIHTGEK [...]
+chr4-04	SwissProt	protein_match	266088	266459	329.000000	-	.	Target=A6NP11.3 63 192 +;percentID=52;Gap=M57 I4 M51 D1 M1 I3 M14 ;sequence=MGLLTFRDIAIEFSLAEWQCLDHAQQNLYRDVMLENYRNLVSLGIAVSKPDLITCLEQNKEPQNIKRNEMVAKHPVTCSHFTQDLQSEQGIKDSLQKVILRRYGKCGQEDLQVKKCCKSVGECEVHKGGYNYVNQCLSATQNKTFQTHKCVKVFGKFSNSNRHKTRHTGKKHFKCKNDGKSFCMLSRLNQHQIIHTREKSYKCEECGKSFNCSSTLTRHKRIHTGEKPYRCEECGKAFSWSASLTKHKRIHTGEKPYTCEERGKVFSRSTLTNYKRIHTGEKPYTCEECGKAFSRSSTLTNHKRIHTGERPYKCEECGKAFSLSSTLKKHKIVHTGEKLYTCEECGKAFTFSSTL [...]
+chr4-04	SwissProt	protein_match	266088	266417	330.000000	-	.	Target=Q9P255.2 45 160 +;percentID=58;Gap=M43 I4 M51 I2 M16 ;sequence=MLENYRNLVFVGIAASKPDLITCLEQGKEPWNVKRHEMVAEPPVVCSYFARDLWPKQGKKNYFQKVILRRYKKCGCENLQLRKYCKSMDECKVHKECYNGLNQCLTTTQNKIFQCDKYVKVFHKFSNSNRHTIRHTGKKSFKCKECEKSFCMLSHLAQHKRIHSGEKPYKCKECGKAYNETSNLSTHKRIHTGKKPYKCEECGKAFNRLSHLTTHKIIHTGKKPYKCEECGKAFNQSANLTTHKRIHTGEKPYKCEECGRAFSQSSTLTAHKIIHAGEKPYKCEECGKAFSQSSTLTTHKIIHTGEKFYKCEECGKAFSQLSHLTTHKRIHSGEKPYKCEECGKAFKQSSTLTTHKRIHAG [...]
+chr4-04	SwissProt	protein_match	266088	266441	330.000000	-	.	Target=Q03936-3.2 39 160 +;percentID=58;Gap=M2 D1 M3 D1 M44 I4 M51 D1 M1 I3 M14 ;sequence=MGPLTFRDVKIEFSLEEWQCLDTAQRNLYRDVMLENYRNLVFLVMCSHFAQDVWPEHSIKDSFQKVILRTYGKYGHENLQLRKDHKSVDACKVYKGGYNGLNQCLTTTDSKIFQCDKYVKVFHKFPNVNRNKIRHTGKKPFKCKNRGKSFCMLSQLTQHKKIHTREYSYKCEECGKAFNWSSTLTKHKIIHTGEKPYKCEECGKAFNRSSNLTKHKIIHTGEKPYKCEECGKAFNRSSTLTKHKRIHTEEKPYKCEECGKAFNQFSILNKHKRIHMEDKPYKCEECGKAFRVFSILKKHKIIHTGEKPYKCEECGKAFNQFSNLTKHKIIHTGEKPYKCDE [...]
+chr4-04	SwissProt	protein_match	266088	266411	330.000000	-	.	Target=Q96JC4.1 91 204 +;percentID=58;Gap=M41 I4 M51 I2 M16 ;sequence=MAKRPGPPGSREMGLLTFRDIAIEFSLEEWQCLDCAQRNLYRDVMLENYRNLVSLGIAVSKPDLITCLEQNKESQNIKRNEMVAKHPVTRSHFTQDLQPEQGIKDSLQKVIPRTYGKCGHEKLQFKKCCKSVGEYEVHKGGYSEVNQCLSTTQNKIFQTHKYVKVFGKFSNSNRDKTRYTGNKHFKCNKYGKSFCMLSHLNQHQVIHTREKSYKCKECGKSFNCSSNHTTHKIIHTGEKPYRCEECGKAFSWSANLTRHKRTHTGEKPYTCEECGQAFRRSSALTNHKRIHTGERPYKCEECGKAFSVSSTLTDHKRIHTGEKPCRCEECGKAFSWSSNLTRHKRIHTREKPYACEECGQA [...]
+chr4-04	SwissProt	protein_match	266088	266420	330.000000	-	.	Target=Q8TF32.2 107 223 +;percentID=56;Gap=M42 I4 M53 I2 M16 ;sequence=MDDLKYGVYPLKEASGCPGAERNLLVYSYFEKETLTFRDVAIEFSLEEWECLNPAQQNLYMNVMLENYKNLVFLGVAVSKQDPVTCLEQEKEPWNMKRHEMVDEPPAMCSYFTKDLWPEQDIKDSFQQVILRRYGKCEHENLQLRKGSASVDEYKVHKEGYNELNQCLTTTQSKIFPCDKYVKVFHKFLNANRHKTRHTGKKPFKCKKCGKSFCMLLHLSQHKRIHIRENSYQCEECGKAFKWFSTLTRHKRIHTGEKPFKCEECGKAFKQSSTLTTHKIIHTGEKPYRCEECGKAFNRSSHLTTHKIIHTGEKPYKCEECGKAFNQSSTLSTHKFIHAGEKPYKCEECDKAFNRFSYLT [...]
+chr4-04	SwissProt	protein_match	266088	266417	333.000000	-	.	Target=A8MXY4.2 98 213 +;percentID=54;Gap=M43 I4 M51 I2 M16 ;sequence=MSFWSEKCTRLILYDLKIALKNGSLTFWDVTIEFALEEWQCLDMAQQNLYRNVMLENYRNLVFLGIAVSKLDLITCLKQGKEPWNMKRHEMVTKPPVISSHFTQDFWPDQSIKDSFQEIILRTYARCGHKNLRLRKDCESVNEGKMHEEAYNKLNQCWTTTQGKIFQCNKYVKVFHKYSNSNRYKIIHTGKKPYKCEECGKAFKQSSHLTRHKAIHTGEKPYKCEECGKAFNHFSALRKHQIIHTGKKPYKCEECGKAFSQSSTLRKHEIIHTEEKPYKYEECGKAFSNLSALRKHEIIHTGQKPYKCEECGKAFKWSSKLTVHKVIHTAEKPCKCEECGKAFKRFSALRKHKIIHTGKQP [...]
+chr4-04	SwissProt	protein_match	266088	266417	333.000000	-	.	Target=Q68DY1-2.2 1 116 +;percentID=55;Gap=M41 I4 M53 I2 M16 ;sequence=MCSHFAQDLWPEQSMKDSFQKVVLRRYEKCEHDNLQLKKGCISVDECKVHKEGYNELNQCLTTTPRKICQCDKYVKVLHQFPNSNGQKRGHTGKKPFKYIECGKAFKQFSTLTTHKKIHTGGKPYKCEECGKAFNHSCSLTRHKKIHTGEKPYKCEECGKAFKHSSTLTTHKRNHTGEKPYKCDKCGKAFMSSSTLSKHEIIHTEKKPYKCEECGKAFNRSSTLTTHKIIHTGEKPYKCEECDKAFKYSYTLTTHKRIHTEDKPYKCEECGKAFKYSSTLTTHKRIHTGEKPYKCEECGKAFKRSSDLTTHKIIHTGEKPYKCEECGKAFKYSSNLTTHKKIHTGERPYKCEECGKAFNQ [...]
+chr4-04	SwissProt	protein_match	266088	266417	333.000000	-	.	Target=Q8N7Q3.2 45 160 +;percentID=56;Gap=M43 I4 M51 I2 M16 ;sequence=MLENYRNLVFLGIAAFKPDLIIFLEQGKEPWNMKRHEMVEEPPVICSHFSQEFWPEQGIEDSFQKMILRRYDKCGHENLHLKISCTNVDECNVHKEGYNKLNQSLTTTQSKVFQCGKYANVFHKCSNSNRHKIRHTGEKGLKCKEYVRSFCMLSHLSQHERIYTRENSYKCEENGKAFNWSSTLTYYKSIHTGEKPYKCEECGKAFSKFSILTKHKVIHTGEKPYKCEECGKAFNRSSILTKHKIIHTGEKPYKCEECGKGFSSVSTLNTHKAIHAEEKPYKCEECGKASNSSSKLMEHKRIHTGEKPYKCEECGKAFSWSSSLTEHKRIHAGEKPYKCEECGKAFNRSSILTKHKIIHTG [...]
+chr4-04	SwissProt	protein_match	266088	266408	334.000000	-	.	Target=Q9UII5.1 11 123 +;percentID=59;Gap=M43 I4 M48 I2 M16 ;sequence=MVAKPPVMSFHFAQDLWPEQNIKDSFQKVTLRRYGKCEYENLQLRKGCKHVDECTGHKGGHNTVNQCLTATPSKIFQCNKYVKVFDKFSNSNRYKRRHTGNKHFKCKECSKSFCVLSQLTQHRRIHTRVNSYKCEECGKAFNWFSTLTKHKRIHTGEKPYKCEECGKAFNQSSQLTRHKIIHTEEKPNKCEECGKAFKQASHLTIHKIIHTGEKPYKYEECGKVFSQSSHLTTQKILHTGENLYKCKECGKAFNLFSNLTNHKRIHAGEKPYKCKECGRAFNISSNLNKQEKIHTGGKLNKCEECDKAFNRSLKLTAHKKILMEEKPYKCEECGKVFNQFSTLTRHKIIHTGEKPYKCKEC [...]
+chr4-04	SwissProt	protein_match	266088	266423	334.000000	-	.	Target=O75373.2 75 192 +;percentID=55;Gap=M45 I4 M51 I2 M16 ;sequence=MGPLQFRDVAIEFSLEEWHCLDTAQRNLYRNVMLENYRNLVFLGIVVSKPDLITCLEQGKKPLTMKKHEMVANPSVTCSHFARDLWPEQSIKDSFQKVTLRRYENYGHDNLQFKKGCESVDECKVHKRGYNGLNQYLTTTQSKIFQCDKYVKVIHKFSNSNRHKIRHTGKKPFKCIECGKAFNQSSTLTTHKKIHTGEKPFKCEECGKAFNWSSHLTTHKRIHTGEKRYKCEDCGKAFSRFSYLTAHKIIHSGEKPYKCEECGKAFKRSSNLTTHKIIHTGEKPYKCEECGKAFKRSSILTAHKIIHSGEKPYKCEECGKAFKHPSVLTTHKRIHTGEKPYKCEECGRAFKYFSSLTTHKI [...]
+chr4-04	SwissProt	protein_match	266088	266417	335.000000	-	.	Target=Q8TD23.2 77 191 +;percentID=56;Gap=M37 D1 M5 I4 M51 I2 M16 ;sequence=MGLLTFRDVAIEFSLEEWQCLDTAQRNLYKNVILENYRNLVFLGIAVSKQDLITCLEQEKEPLTVKRHEMVNEPPVMCSHFAQEFWPEQNIKDSFEKVTLRRYEKCGNDNFQLKGCKSVDECKVHKGGYNGLNQCLPTMQSKMFQCDKYVKVFNKFSHSDRHKIKHMENKPFKCKECGRSFCMLSHLTRHERNYTKVNFCKCEECEKAVNQSSKLTKHKRIYTCEKLYKCQECDRTFNQFSNLTEYKKDYAREKPYKCEECGKAFNQSSHLTTHKIIHTGEKPYKCEECGKAFNQFSNLTTHKKIHTGEQPYICEECGKAFTQSSTLTTHKRIHTGEKPYKCEECGKAFNRSSKL [...]
+chr4-04	SwissProt	protein_match	266088	266450	335.000000	-	.	Target=A6NNF4.3 66 192 +;percentID=53;Gap=M54 I4 M51 I2 M16 ;sequence=MGLLTFRDVAIEFSLEEWQCLDTAQKNLYRNVMLENYRNLAFLGIAVSKPDLIICLEKEKEPWNMKRDEMVDEPPGICPHFAQDIWPEQGVEDSFQKVILRRFEKCGHENLQLRKGCKSVDECKVHKEGYNGLNQCFTTTQGKASQCGKYLKVFYKFINLNRYKIRHTRKKPFKCKNCVKSFCMFSHKTQHKSIYTTEKSYKCKECGKTFNWSSTLTNHKKTHTEEKPYKCEEYGKAFNQSSNYTTHKVTHTGEKPYKCEECGKAFSQSSTLTIHKRIHTGEKPCKCEECGKAFSQPSALTIHKRMHIGEKPYKCEECGKAFVWSSTLTRHKRLHSGEKPYKCEECAKAFSQFGHLTTHRI [...]
+chr4-04	SwissProt	protein_match	266088	266417	338.000000	-	.	Target=Q6ZMV8.1 77 192 +;percentID=57;Gap=M43 I4 M51 I2 M16 ;sequence=MGALTFRDVAIEFSLEEWQCLDTEQQNLYRNVMLDNYRNLVFLGIAVSKPDLITCLEQEKEPWNLKTHDMVAKPPVICSHIAQDLWPEQGIKDYFQEVILRQYKKCRHENLLLRKGCKNVDEFKMHKKGYNRHNQCLTTSHSKIFQCDKYVKVFHKFSNSNRHKIRHTSKKPFKCKECGKLFCILSHLAQHKKIHTGEKSYKCEEYGKAFNESSNCTTHKRITEKKPYKCKECGKAFNWFSHFTTHKRIHTGEKPYQCEKCGKFFNQSTNLTTHKRIHTGEKPYKCEECGKAFNQSSNLTEHKKIHTKEQPYKCEKCGKAFKWSSTLTKHKRIHNGEKPYKCEECGKAFNRSSTLNRHKIT [...]
+chr4-04	SwissProt	protein_match	266088	266450	339.000000	-	.	Target=Q68DY1.2 66 192 +;percentID=51;Gap=M52 I4 M53 I2 M16 ;sequence=MGPLQFRDVAIEFSLEEWHCLDTAQRNLYRNVMLENYSNLVFLGITVSKPDLITCLEQGRKPLTMKRNEMIAKPSVMCSHFAQDLWPEQSMKDSFQKVVLRRYEKCEHDNLQLKKGCISVDECKVHKEGYNELNQCLTTTPRKICQCDKYVKVLHQFPNSNGQKRGHTGKKPFKYIECGKAFKQFSTLTTHKKIHTGGKPYKCEECGKAFNHSCSLTRHKKIHTGEKPYKCEECGKAFKHSSTLTTHKRNHTGEKPYKCDKCGKAFMSSSTLSKHEIIHTEKKPYKCEECGKAFNRSSTLTTHKIIHTGEKPYKCEECDKAFKYSYTLTTHKRIHTEDKPYKCEECGKAFKYSSTLTTHKR [...]
+chr4-04	SwissProt	protein_match	266088	266417	340.000000	-	.	Target=Q96N22.1 8 120 +;percentID=60;Gap=M43 I1 M51 I2 M16 ;sequence=MVAEPPVICSHFAQHFSPEQNIKDSFQKVTPRRYGKCEHENLQLSKSVDECKVQKGGYNGLNQCLPTTQSKIFQCDKYMKIFHKFSNLNGHKVRHTRKKPFKYKEFGKSFCIFSNLTQHKIICTRVNFYKCEDCGKAFNGSSIFTKHKRIHIGEKSYICEECGKACNQFTNLTTHKIIYTRDKLYKREECSKAFNLSSHITTHTIIHTGENPYKREECDKAFNQSSTLTTHKIIHTREKLNEYKECGKAFNQSSHLTRHKIIHTGEKPYKCEECGKAFNQSSHLTRHKIIHTGEKPYKCEECGKAFRQSSHLTTHKIIHTGEKPYKCEECGKAFNKSSHLTRHKSIHTGEKPYQCEKCGKAS [...]
+chr4-04	SwissProt	protein_match	266088	266423	341.000000	-	.	Target=P35789-2.4 75 192 +;percentID=57;Gap=M45 I4 M51 I2 M16 ;sequence=MGPLQFRDVAIEFSLEEWHCLDTAQRNLYRNVMLENYSNLVFLGIVVSKPDLIAHLEQGKKPLTMKRHEMVANPSVICSHFAQDLWPEQNIKDSFQKVILRRYEKRGHGNLQLIKRCESVDECKVHTGGYNGLNQCSTTTQSKVFQCDKYGKVFHKFSNSNRHNIRHTEKKPFKCIECGKAFNQFSTLITHKKIHTGEKPYICEECGKAFKYSSALNTHKRIHTGEKPYKCDKCDKAFIASSTLSKHEIIHTGKKPYKCEECGKAFNQSSTLTKHKKIHTGEKPYKCEECGKAFNQSSTLTKHKKIHTGEKPYVCEECGKAFKYSRILTTHKRIHTGEKPYKCNKCGKAFIASSTLSRH [...]
+chr4-04	SwissProt	protein_match	266088	266423	341.000000	-	.	Target=P35789.4 75 192 +;percentID=57;Gap=M45 I4 M51 I2 M16 ;sequence=MGPLQFRDVAIEFSLEEWHCLDTAQRNLYRNVMLENYSNLVFLGIVVSKPDLIAHLEQGKKPLTMKRHEMVANPSVICSHFAQDLWPEQNIKDSFQKVILRRYEKRGHGNLQLIKRCESVDECKVHTGGYNGLNQCSTTTQSKVFQCDKYGKVFHKFSNSNRHNIRHTEKKPFKCIECGKAFNQFSTLITHKKIHTGEKPYICEECGKAFKYSSALNTHKRIHTGEKPYKCDKCDKAFIASSTLSKHEIIHTGKKPYKCEECGKAFNQSSTLTKHKKIHTGEKPYKCEECGKAFNQSSTLTKHKKIHTGEKPYVCEECGKAFKYSRILTTHKRIHTGEKPYKCNKCGKAFIASSTLSRHEF [...]
+chr4-04	SwissProt	protein_match	266088	266423	341.000000	-	.	Target=P35789-3.4 75 192 +;percentID=57;Gap=M45 I4 M51 I2 M16 ;sequence=MGPLQFRDVAIEFSLEEWHCLDTAQRNLYRNVMLENYSNLVFLGIVVSKPDLIAHLEQGKKPLTMKRHEMVANPSVICSHFAQDLWPEQNIKDSFQKVILRRYEKRGHGNLQLIKRCESVDECKVHTGGYNGLNQCSTTTQSKVFQCDKYGKVFHKFSNSNRHNIRHTEKKPFKCIECGKAFNQFSTLITHKKIHTGEKPYICEECGKAFKYSSALNTHKRIHTGEKPYKCDKCDKAFIASSTLSKHEIIHTGKKPYKCEECGKAFNQSSTLTKHKKIHTGEKPYKCEECGKAFNQSSTLTKHKKIHTGEKPYVCEECGKAFKYSRILTTHKRIHTGEKPYKCNKCGKAFIASSTLSRH [...]
+chr4-04	SwissProt	protein_match	266088	266417	341.000000	-	.	Target=Q86V71.2 77 192 +;percentID=56;Gap=M43 I4 M50 I2 M17 ;sequence=MGPLTFTDVAIEFSLEEWQCLDTAQQNLYRNVMLENYRNLVFLGIAVSKPDLITCLEKEKEPCKMKRHEMVDEPPVVCSHFAEDFWPEQDIKDSFQKVTLRRYDKRGHENLQLRKGYKTVGDCKLYKGGYNGLNQCLTLTQSKMYHCDIYVKVFYAFSNADRYKTRHTGKKPFQCKKCGKSFCMLSQLTQHKKIHIRENTYRCKEFGNAFNQSSALTNHKRIYVGEKHYRCEECGKAFNHYSTLTNHKRIHTGEKPYKCKECGKAFSRYSTLTTHKRIHSGEKPYKCDECGKTFSISSTFTKHKIIHTEEKPYKCKECGKAFNRSSTLTSHKRIHTGEKPYKCEECGKAFNWSSTLTKHKV [...]
+chr4-04	SwissProt	protein_match	266088	266414	342.000000	-	.	Target=P0CB33.1 90 204 +;percentID=60;Gap=M42 I4 M51 I2 M16 ;sequence=MAKRPGPPGSREMGLLTFRDIAIEFSLAEWQCLDHAQQNLYRDVMLENYRNLFSLGMTVSKPDLIACLEQNKEPQNIKRNEMAAKHPVTCSHFNQDLQPEQSIKDSLQKVIPRTYGKCGHENLQLKKCCKRVDECEVHKGGYNDLNQCLSNTQNKIFQTHKCVKVFSKFSNSNRHNARYTGKKHLKCKKYGKSFCMFSHLNQHQIIHTKEKSYKCEECGKSFNHSSSGTTHKRILTGEKPYRCEECGKAFRWPSNLTRHKRIHTGEKPYACEECGQAFRRSSTLTNHKRIHTGERPYKCEECGKAFSVSSALIYHKRIHTGEKPYTCEECGKAFNCSSTLKTHKIIHTGEKPYTCEECGRT [...]
+chr4-04	SwissProt	protein_match	266088	266423	348.000000	-	.	Target=A6NK31.3 137 254 +;percentID=59;Gap=M45 I4 M51 I2 M16 ;sequence=MLSFLRDRECNREYFFVGNYFIGQFWSYQSESVLFTHFILSQFKNSAHGHLKWVCVCFQGLLTFRDVAIEFCLEECQYLDAAQQNLCMDVMLQNYRNPVFLDKTGIVFSKPDLVTCLEQRKKPWNRSIVCPMLSSDSTLCSHFTEDLWLDQNTKNSFQKVMLRRYGKCRHENLQIRKGCKSLNASKVQEGGYNGLNQCLSITQSKILQCNTCVKVLRKFSNSNRLRRRHSGEKPFKCKECGQFFHRFSHLRQHQRIHTKERPYKCEECDKAFKQSSSLTQHNIVHTGDKPYKCKDCGKIFKWSSKLTIHQRIHSGEKPYKCEECGKAFKQSSKLNEHMKAHTGEKFYKCEECGKAFKQPS [...]
+chr4-04	SwissProt	protein_match	266088	266423	349.000000	-	.	Target=Q05481.1 84 201 +;percentID=57;Gap=M45 I4 M51 I2 M16 ;sequence=MPGTPGSLEMGLLTFRDVAIEFSPEEWQCLDTAQQNLYRNVMLENYRNLAFLGIALSKPDLITYLEQGKEPWNMKQHEMVDEPTGICPHFPQDFWPEQSMEDSFQKVLLRKYEKCGHENLQLRKGCKSVDECKVHKEGYNKLNQCLTTAQSKVFQCGKYLKVFYKFLNSNRHTIRHTGKKCFKCKKCVKSFCIRLHKTQHKCVYITEKSCKCKECEKTFHWSSTLTNHKEIHTEDKPYKCEECGKAFKQLSTLTTHKIICAKEKIYKCEECGKAFLWSSTLTRHKRIHTGEKPYKCEECGKAFSHSSTLAKHKRIHTGEKPYKCEECGKAFSHSSALAKHKRIHTGEKPYKCKECGKAFSN [...]
+chr4-04	SwissProt	protein_match	266088	266417	349.000000	-	.	Target=Q14593-2.3 45 160 +;percentID=62;Gap=M42 I4 M52 I2 M16 ;sequence=MLDNYRNLVFLGIAVSKPDLITCLEQGKEPCNMKRHAMVAKPPVVCSHFAQDLWPKQGLKDSFQKVILRRYGKYGHENLQLRKGCKSADEHKVHKRGYNGLNQCLTTTQSKIFQCDKYVKVLHKFSNSNIHKKRQTGKKPFKCKECGKSCCILSQLTQHKKTATRVNFYKCKTCGKAFNQFSNLTKHKIIHPEVNPYKCEECGKAFNQSLTLTKHKKIHTEEKPYKCEDCGKVFSVFSVLTKHKIIHTGTKPYNCEECGKGFSIFSTLTKHKIIHTGEKPYKCNECGKAFNWSSTLTKHKRIHTGEKPYKCEECGKAFNQSSTLTRHKIVHTGEKPYKCEECGKAFKRSTTLTKHKRIY [...]
+chr4-04	SwissProt	protein_match	266088	266417	349.000000	-	.	Target=Q14593.3 110 225 +;percentID=62;Gap=M42 I4 M52 I2 M16 ;sequence=MSSAPRGPPSVAPLPAGIGRSTAKTPGLPGSLEMGPLTFRDVAIEFSLEEWQCLDTSQQNLYRNVMLDNYRNLVFLGIAVSKPDLITCLEQGKEPCNMKRHAMVAKPPVVCSHFAQDLWPKQGLKDSFQKVILRRYGKYGHENLQLRKGCKSADEHKVHKRGYNGLNQCLTTTQSKIFQCDKYVKVLHKFSNSNIHKKRQTGKKPFKCKECGKSCCILSQLTQHKKTATRVNFYKCKTCGKAFNQFSNLTKHKIIHPEVNPYKCEECGKAFNQSLTLTKHKKIHTEEKPYKCEDCGKVFSVFSVLTKHKIIHTGTKPYNCEECGKGFSIFSTLTKHKIIHTGEKPYKCNECGKAFNWSST [...]
+chr4-04	SwissProt	protein_match	266088	266417	353.000000	-	.	Target=A6NGH9.3 45 160 +;percentID=61;Gap=M43 I4 M51 I2 M16 ;sequence=MDVMLQNYRNPVFLGIVFSKPDLVTCLEQRKKPWSMKHPGHVANLCSHFTQDLWLDQNTKNSFQKVMLRRYGKCRHENLQIRKGCKSLNASKVQEGGYNGLNQCLSITQSKILQCNTFVKVLRKFSNSNRLRRRHTGEKPFKCKECGQFFHRFSHLRQHQIIHTEEKPYQCEEYGKDFKQSSGLTIHERIHTKERPYKCEECDKAFKQSSSLTQHNIVHTGDKPYKCKDCGKIFKWSSNLTIHQRIYSGEKPYKCEECGKAFKQFSKLNEHMRAHTGEKFYKCEECGKAFKQPSGLTLHKRIHTGENPYKFKECGKAFYWFLSFTKHMIIHRGEKPYKCQECGKAFKWSSNLTIHKRIHMG [...]
+chr4-04	SwissProt	protein_match	266088	266420	355.000000	-	.	Target=Q3SXZ3-2.1 44 158 +;percentID=64;Gap=M36 D2 M6 I4 M51 I2 M16 ;sequence=MLENYRNLVSLGVTISNPDLVTSLEQRKEPYNLKIHETAARPPAVCSHFTQNLWTVQGIEDSFHKLIPKGHEKRGHENLRKTCKSINECKVQKGGYNRINQCLLTTQKKTIQSNICVKVFHKFSNSNKDKIRYTGDKTFKCKECGKSFHVLSRLTQHKRIHTGENPYTCEECGKAFNWSSILTKHKRIHAREKFYKCEECGKGFTRSSHLTKHKRIHTGEKPYICEKCGKAFNQSSTLNLHKRIHSAQKYYKCEECGKAFKWSSSLNEHKRIHAGEKPFSCEECGNVFTTSSDFAKHKRIHTGEKPYKCEECGKSFNRSTTLTTHKRIHTGEKPYTCEECGKAFNWSSTLNVH [...]
+chr4-04	SwissProt	protein_match	266088	266420	355.000000	-	.	Target=Q3SXZ3.1 76 190 +;percentID=64;Gap=M36 D2 M6 I4 M51 I2 M16 ;sequence=MELLTFKDVAIEFSPEEWKCLDISQQNLYRDVMLENYRNLVSLGVTISNPDLVTSLEQRKEPYNLKIHETAARPPAVCSHFTQNLWTVQGIEDSFHKLIPKGHEKRGHENLRKTCKSINECKVQKGGYNRINQCLLTTQKKTIQSNICVKVFHKFSNSNKDKIRYTGDKTFKCKECGKSFHVLSRLTQHKRIHTGENPYTCEECGKAFNWSSILTKHKRIHAREKFYKCEECGKGFTRSSHLTKHKRIHTGEKPYICEKCGKAFNQSSTLNLHKRIHSAQKYYKCEECGKAFKWSSSLNEHKRIHAGEKPFSCEECGNVFTTSSDFAKHKRIHTGEKPYKCEECGKSFNRSTTLT [...]
+chr4-04	SwissProt	protein_match	266088	266423	357.000000	-	.	Target=Q6ZN08.2 121 238 +;percentID=57;Gap=M43 I4 M50 I2 M19 ;sequence=MLAGKHVALTPLKAYSQDAGVICPENLHLRRNSREGGDQKEKKKGLQGPLQFRDVAIEFSLEEWHCLDMAQRNLYRDVMLENYRNLVFLGIVVSKPDLITHLEQGKKPSTMQRHEMVANPSVLCSHFNQDLWPEQSIKDSFQKLILRRHKKCGHDNLQLKKGCESVDKCKVHKRGYNGLNQCLTTTQSKMFQCDKHGKVFHQFSNTNRHKIRHTGKNPCKFTECGKAFNRSSTFTTHKKIHTGEKPYKCIECGKAFNRSSHLTTHKIIHTGEKRYKCEDCGKAFNRSSNLTTHKKIHTGEKPYKCEECGKAFKRSSILTTHKRIHTGEKPYKCEECGKVFKYLSSLSTHKIIHTGEKPYK [...]
+chr4-04	SwissProt	protein_match	266088	266417	357.000000	-	.	Target=A8MUP4.2 38 153 +;percentID=62;Gap=M43 I4 M51 I2 M16 ;sequence=MLENHRNPVFLVIVFSKPDLVTCLEQRKKPWSMKHPGLCSHFTQDLWLDQNIKNSFQKVILRRYEKSRHENLQIRKGCKSLNASKLQEGGYNGLNQCLSVTQSKILQCNTCVKVFRKFSNSNRLRRRHTGEKPFKCKECGQFFHRFSHLRQHEIIHTEEKPYQHEECGKDFKQSSGLTIHERIHTKERPYKCEECDKAFKQSSKLNKHKKIYTGDTTYKCEECGKAFSYSSTVTQHNIVHTEDKPYKCEDCGKALKWSSNLTIHKRIHTGEKPCKCEECGKACKQSLGLTIQKRIHNEEKPYKCEECDKAFYWSLSFTKHKRIHTGEKPYNCEKCGKAFYCSSHLIQHNIVHTEEKHYKCQ [...]
+chr4-04	SwissProt	protein_match	266088	266420	483.000000	-	.	Target=Q15928.1 76 190 +;percentID=78;Gap=M44 I4 M67 ;sequence=MELLTFRDVAIEFSPEEWKCLDPDQQNLYRDVMLENYRNLVSLGVAISNPDLVTCLEQRKEPYNVKIHKIVARPPAMCSHFTQDHWPVQGIEDSFHKLILRRYEKCGHDNLQLRKGCKSLNECKLQKGGYNEFNECLSTTQSKILQCKASVKVVSKFSNSNKRKTRHTGEKHFKECGKSFQKFSHLTQHKVIHAGEKPYTCEECGKAFKWSLIFNEHKRIHTGEKPFTCEECGSIFTTSSHFAKHKIIHTGEKPYKCEECGKAFNRFTTLTKHKRIHAGEKPITCEECRKIFTSSSNFAKHKRIHTGEKPYKCEECGKAFNRSTTLTKHKRIHTGEKPYTCEECGKAFRQSSKLNEHKKVHTGERPYK [...]
+chr4-04	SwissProt	protein_match	266091	266138	43.000000	-	.	Target=Q96MR9.2 351 366 +;percentID=50;sequence=MAYCLTNCYQYSVTFEDTAVDFTQEEWILLDPVQRNLYRDVMLENYENVAKVGFQLFKPSVISWLEEEELRTLQQGVLQDWAIKHQTSVSALQQEFWKIQTSNGIQMDLVTFDSVAVEFTQEEWTLLDPAQRNLYSDVMLENYKNLSSVGYQLFKPSLISWLEEEEELSTLPRVLQEWKMCLKTKGPALWQDNFCLKTLNGIQLARNQNGEELYDCKQCEDVFCKHPCLKTNMSTQNRGNTSECIQYAKDLLSLYNKTSTIRKVSVFSKHGKSFRLILNVQVQRKCTQDKSFEGTDYGKAFIYQSYLEAHRKTQSGEKLNEWKQCGEAFTHSTSHAVNVETHIIKNPYECKECGKDFRYPTHLNNHMQTHIGIKPYKCKHCGKT [...]
+chr4-04	SwissProt	protein_match	266091	266150	49.000000	-	.	Target=Q8BI67.1 206 227 +;percentID=50;Gap=M5 I2 M15 ;sequence=MERKEDDLKGGCWNQPAVAEEFETLKDLAMDFTVEDWKDLESEWDQRDLFWDVTLNHYQDMFSFTDTSQPSLTSQPDVREELEATSTEVPETKSSPLQSGFVEEDFSQIMEIFSNGQLNFEACIGEDWLNSFLGDPESLPRPDISDKESPADHQSPESKSGLSPGPPLCTREDAVMSASPEKTLTPVILKESRSDLSQEDSVQGHEKPYKCSECGESFSQSHHLIQHWVLHTSGEPPIWREQQRGLSQGAHFPMCPGTPASYESYTCQECGKRFSQNVYLQWHQKIHTGEKLCKTQSDSNLEGLSRSPSVEPGKQRLSKDTDSAKPSTIHGQDQEKPPTGESRDQENLHESQPGDRPSVLHPKPLRHQK [...]
+chr4-04	SwissProt	protein_match	266091	266132	51.000000	-	.	Target=Q3KP31.1 105 118 +;percentID=57;sequence=MDSVAFEDVSVSFSQEEWALLAPSQKKLYRDVMQETFKNLASIGEKWEDPNVEDQHKNQGRNLRSHTGERLCEGKEGSQCAENFSPNLSVTKKTAGVKPYECTICGKAFMRLSSLTRHMRSHTGYELFEKPYKCKECEKAFSYLKSFQRHERSHTGEKPYKCKQCGKTFIYHQPFQRHERTHIGEKPYECKQCGKALSCSSSLRVHERIHTGEKPYECKQCGKAFSCSSSIRVHERTHTGEKPYACKECGKAFISHTSVLTHMITHNGDRPYKCKECGKAFIFPSFLRVHERIHTGEKPYKCKQCGKAFRCSTSIQIHERIHTGEKPYKCKECGKSFSARPAFRVHVRVHTGEKPYKCKECGKAFSRISYFRIHERTHTGEKPY [...]
+chr4-04	SwissProt	protein_match	266091	266159	54.000000	-	.	Target=Q8NDP4.1 180 204 +;percentID=44;Gap=M7 I2 M16 ;sequence=MLSLSPILLYTCEMFQDPVAFKDVAVNFTQEEWALLDISQKNLYREVMLETFWNLTSIGKKWKDQNIEYEYQNPRRNFRSVTEEKVNEIKEDSHCGETFTPVPDDRLNFQKKKASPEVKSCDSFVCEVGLGNSSSNMNIRGDTGHKACECQEYGPKPWKSQQPKKAFRYHPSLRTQERDHTGKKPYACKECGKNIIYHSSIQRHMVVHSGDGPYKCKFCGKAFHCLSLYLIHERTHTGEKPYECKQCGKSFSYSATHRIHERTHIGEKPYECQECGKAFHSPRSCHRHERSHMGEKAYQCKECGKAFMCPRYVRRHERTHSRKKLYECKQCGKALSSLTSFQTHIRMHSGERPYECKTCGKGFYSAKSF [...]
+chr4-04	SwissProt	protein_match	266091	266156	55.000000	-	.	Target=Q96NJ3.2 311 334 +;percentID=45;Gap=M7 I2 M15 ;sequence=MIKFQERVTFKDVAVVFTKEELALLDKAQINLYQDVMLENFRNLMLVRDGIKNNILNLQAKGLSYLSQEVLHCWQIWKQRIRDLTVSQDYIVNLQEECSPHLEDVSLSEEWAGISLQISENENYVVNAIIKNQDITAWQSLTQVLTPESWRKANIMTEPQNSQGRYKGIYMEEKLYRRAQHDDSLSWTSCDHHESQECKGEDPGRHPNCGKNLGMKSTVEKRNAAHVLPQPFPCNNCGVAFADDTDPHVHHSTHLGEKSYKCDQYGKNFSQSQDLIVHCKTHSGKTPYEFHEWPMGCKQSSDLPRYQKVSSGDKPYKCKECGKGFRRSSSLHNHHRVHTGEMPYKCDECGKGFGFRSLLCIHQGVHTGK [...]
+chr4-04	SwissProt	protein_match	266091	266156	55.000000	-	.	Target=Q96NJ3-2.2 156 179 +;percentID=45;Gap=M7 I2 M15 ;sequence=MTEPQNSQGRYKGIYMEEKLYRRAQHDDSLSWTSCDHHESQECKGEDPGRHPNCGKNLGMKSTVEKRNAAHVLPQPFPCNNCGVAFADDTDPHVHHSTHLGEKSYKCDQYGKNFSQSQDLIVHCKTHSGKTPYEFHEWPMGCKQSSDLPRYQKVSSGDKPYKCKECGKGFRRSSSLHNHHRVHTGEMPYKCDECGKGFGFRSLLCIHQGVHTGKKPYKCEECGKGFDQSSNLLVHQRVHTGEKPYKCSECGKCFSSSSVLQVHWRFHTGEKPYRCGECGKGFSQCTHLHIHQRVHTGEKPYKCNVCGKDFAYSSVLHTHQRVHTGEKPYKCEVCGKCFSYSSYFHLHQRDHIREKPYKCDECGKGFS [...]
+chr4-04	SwissProt	protein_match	266091	266159	58.000000	-	.	Target=Q96MU6-2.2 205 229 +;percentID=52;Gap=M5 I2 M18 ;sequence=MAAPDLAHGGHVSRDSVCLHEEQTQAAGMVAGWLINCYQDAVTFDDVAVDFTQEEWTLLDPSQRDLYRDVMLENYENLASVEWRLKTKGPALRQDRSWFRASNETQTARSHNGGQLCDRTQCGEAFSEHSGLSTHVRTQNTGDSCVSNHYERDFFIPCQKTLFKIGEQFSVLGQCGKAFSSTPNVVSQQACTRDRSLDYSSCGEVFLNQSYLQARAGSHNGEETWKWKPCGKALTHSMGCATPVEMHAVRNPHVCRECGKAFRYTAYLTGRVQVHPGEKPCELEECGKASPVSSSLTQHVRIHAAEKPCECKECGKAFTGLSGLSKHVQTDPGQKPYECKDCGKACGGFYLLNEHGKTHTREKPFAC [...]
+chr4-04	SwissProt	protein_match	266091	266159	58.000000	-	.	Target=Q96MU6.2 233 257 +;percentID=52;Gap=M5 I2 M18 ;sequence=MLENYENLASVGHHLFQPSVIYWLEQEEELRAGRRAVLQEWRLKTKGPALRQDRSWFRASNETQTARSHNGGQLCDRTQCGEAFSEHSGLSTHVRTQNTGDSCVSNHYERDFFIPCQKTLFKIGEQFSVLGQCGKAFSSTPNVVSQQACTRDRSLDYSSCGEVFLNQSYLQARAGSHNGEETWKWKPCGKALTHSMGCATPVEMHAVRNPHVCRECGKAFRYTAYLTGRVQVHPGEKPCELEECGKASPVSSSLTQHVRIHAAEKPCECKECGKAFTGLSGLSKHVQTDPGQKPYECKDCGKACGGFYLLNEHGKTHTREKPFACVVCGKYFRNSSCLNNHVRIHTGIKPYTCSYCGKAFTVRCGLTRH [...]
+chr4-04	SwissProt	protein_match	266091	266186	65.000000	-	.	Target=Q96NJ6.1 128 159 +;percentID=52;Gap=M7 D2 M5 I1 M2 I1 M16 ;sequence=MGTENKEVIPKEEISEESEPHGSLLEKFPKVVYQGHEFGAGCEEDMLEGHSRESMEEVIEQMSPQERDFPSGLMIFKKSPSSEKDRENNESERGCSPSPNLVTHQGDTTEGVSAFATSGQNFLEILESNKTQRSSVGEKPHTCKECGKAFNQNSHLIQHMRVHSGEKPFECKECGKTFGTNSSLRRHLRIHAGEKPFACNECGKAFIQSSHLIHHHRIHTGERPYKCEECGKAFSQNSALILHQRIHTGEKPYECNECGKTFRVSSQLIQHQRIHTEERYHECNECGKAFKHSSGLIRHQKIHTGEKPYLCNECGKGFGQSSELIRHQRIHTGDKPYECNECGKTFGQNSEIIRHIR [...]
+chr4-04	SwissProt	protein_match	266091	266204	71.000000	-	.	Target=P52737.1 147 186 +;percentID=40;Gap=M22 I2 M16 ;sequence=MDSVAFEDVDVNFTQEEWALLDPSQKNLYRDVMWETMRNLASIGKKWKDQNIKDHYKHRGRNLRSHMLERLYQTKDGSQRGGIFSQFANQNLSKKIPGVKLCESIVYGEVSMGQSSLNRHIKDHSGHEPKEYQEYGEKPDTRNQCWKPFSSHHSFRTHEIIHTGEKLYDCKECGKTFFSLKRIRRHIITHSGYTPYKCKVCGKAFDYPSRFRTHERSHTGEKPYECQECGKAFTCITSVRRHMIKHTGDGPYKCKVCGKPFHSLSSFQVHERIHTGEKPFKCKQCGKAFSCSPTLRIHERTHTGEKPYECKQCGKAFSYLPSLRLHERIHTGEKPFVCKQCGKAFRSASTFQIHERTHTGEKPYECKE [...]
+chr4-04	SwissProt	protein_match	266091	266204	71.000000	-	.	Target=Q5REK1.1 147 186 +;percentID=40;Gap=M22 I2 M16 ;sequence=MDSVAFEDVDVNFTQEEWALLDPSQKNLYRDVMWETMRNLASVGKKWKDQNIKDHYKHRGRNLRSHMLERLYQTKDSSQRGGIFSQFANQNLSKKIPGVKLCESIVYGEVSMGQSSLNRHIKDHSGHEPKKYQEYGEKPDTRNQCWKPFSSHHSFRTHEIIHTGEKLYDCKECGKTFFSLKRIRRHIITHSGYTPYKCKVCGKAFDYPSRFRTHERSHTGEKPYECKECGKAFTCITSVRRHMIKHTGDGPYKCKVCGKPFHSLSSFQVHERIHTGEKPFKCKQCGKAFSCSPTLRIHERTHTGEKPYECKQCGKAFSYLPSLRLHERIHTGEKPFVCKQCGKAFRSASTFQIHERTHTGEKPYECKE [...]
+chr4-04	SwissProt	protein_match	266091	266156	73.000000	-	.	Target=P51815.2 360 383 +;percentID=66;Gap=M7 I2 M15 ;sequence=MAMRELNADSCSSPQMGAMWETSGSVKENSSQSKKYSTKIENLGPESACRHFWSFRYHEATGPLETISQLQKLCHQWLRPEIHSKEQILEMLVLEQFLSILPKETQNWVQKHHPQNVKQALVLVEFLQREPDGTKNEVTAHELGKEAVLLGGTAVAPGFKWKPAEPQPMGVFQKEYWNTYRVLQEQLGWNTHKETQPVYERAVHDQQMLALSEQKRIKHWKMASKLILPESLSLLTFEDVAVYFSEEEWQLLNPLEKTLYNDVMQDIYETVISLGLKLKNDTGNDHPISVSTSEIQTSGCEVSKKTRMKIAQKTMGRENPGDTHSVQKWHRAFPRKKRKKPATCKQELPKLMDLHGKGPTGEKPFKCQE [...]
+chr4-04	SwissProt	protein_match	266091	266237	76.000000	-	.	Target=Q68EA5.3 444 494 +;percentID=40;Gap=M14 D1 M11 I1 M7 I2 M16 ;sequence=MDSVVFEDVAVDFTLEEWALLDSAQRDLYRDVMLETFRNLASVDDGTQFKANGSVSLQDMYGQEKSKEQTIPNFTGNNSCAYTLEKNCEGYGTEDHHKNLRNHMVDRFCTHNEGNQYGEAIHQMPDLTLHKKVSAGEKPYECTKCRTVFTHLSSLKRHVKSHCGRKAPPGEECKQACICPSHLHSHGRTDTEEKPYKCQACGQTFQHPRYLSHHVKTHTAEKTYKCEQCRMAFNGFASFTRHVRTHTKDRPYKCQECGRAFIYPSTFQRHMTTHTGEKPYKCQHCGKAFTYPQAFQRHEKTHTGEKPYECKQCGKTFSWSETLRVHMRIHTGDKLYKCEHCGKAFTSSRSFQGHL [...]
+chr4-04	SwissProt	protein_match	266091	266231	78.000000	-	.	Target=Q9BUY5.1 362 410 +;percentID=42;Gap=M32 I2 M15 ;sequence=MAAADLSHGHYLSGDPVCLHEEKTPAGRIVADCLTDCYQDSVTFDDVAVDFTQEEWTLLDSTQRSLYSDVMLENYKNLATVGGQIIKPSLISWLEQEESRTVQGGVLQGWEMRLETQWSILQQDFLRGQTSIGIQLEGKHNGRELCDCEQCGEVFSEHSCLKTHVRTQSTGNTHDCNQYGKDFLTLCEKTSTGEKLSEFNQSEKIFSLTPNIVYQRTSTQEKSFECSHCGKSFINESYLQAHMRTHNGEKLYEWRNYGPGFIDSTSLSVLIETLNAKKPYKCKECGKGYRYPAYLSIHMRTHTGEKPYECKECGKAFNYSNSFQIHGRTHTGEKPYVCKECGKAFTQYSGLSMHVRSHSGDKPYECKE [...]
+chr4-04	SwissProt	protein_match	266091	266219	78.000000	-	.	Target=Q8N8J6-2.2 329 373 +;percentID=45;Gap=M10 I1 M9 D1 M7 I2 M16 ;sequence=MMQAQESLTLEDVAVDFTWEEWQFLSPAQKDLYRDVMLENYSNLVAVGYQASKPDALSKLERGEETCTTEDEIYSRICSDSGGASGGAYAEIRKIDDPLQHHLQNQSIQKSVKQCHEQNMFGNIVNQNKGHFLLKQDCDTFDLHEKPLKSNLSFENQKRSSGLKNSAEFNRDGKSLFHANHKQFYTEMKFPAIAKPINKSQFIKQQRTHNIENAHVCSECGKAFLKLSQFIDHQRVHTGEKPHVCSMCGKAFSRKSRLMDHQRTHTELKHYECTECDKTFLKKSQLNIHQKTHMGGKPYTCSQCGKAFIKKCRLIYHQRTHTGEKPHGCSVCGKAFSTKFSLTTHQKTHTGEKP [...]
+chr4-04	SwissProt	protein_match	266091	266219	78.000000	-	.	Target=Q8N8J6.2 318 362 +;percentID=45;Gap=M10 I1 M9 D1 M7 I2 M16 ;sequence=MMQAQESLTLEDVAVDFTWEEWQFLSPAQKDLYRDVMLENYSNLVAVGYQASKPDALSKLERGEETCTTEDEIYSRICSEIRKIDDPLQHHLQNQSIQKSVKQCHEQNMFGNIVNQNKGHFLLKQDCDTFDLHEKPLKSNLSFENQKRSSGLKNSAEFNRDGKSLFHANHKQFYTEMKFPAIAKPINKSQFIKQQRTHNIENAHVCSECGKAFLKLSQFIDHQRVHTGEKPHVCSMCGKAFSRKSRLMDHQRTHTELKHYECTECDKTFLKKSQLNIHQKTHMGGKPYTCSQCGKAFIKKCRLIYHQRTHTGEKPHGCSVCGKAFSTKFSLTTHQKTHTGEKPYICSECGKGFIEK [...]
+chr4-04	SwissProt	protein_match	266091	266219	78.000000	-	.	Target=Q8N8J6-3.2 329 373 +;percentID=45;Gap=M10 I1 M9 D1 M7 I2 M16 ;sequence=MESLTLEDVAVDFTWEEWQFLSPAQKDLYRDVMLENYSNLVAVGYQASKPDALSKLERGEETCTTEDEIYSRICSDSGGASGGAYAEIRKIDDPLQHHLQNQSIQKSVKQCHEQNMFGNIVNQNKGHFLLKQDCDTFDLHEKPLKSNLSFENQKRSSGLKNSAEFNRDGKSLFHANHKQFYTEMKFPAIAKPINKSQFIKQQRTHNIENAHVCSECGKAFLKLSQFIDHQRVHTGEKPHVCSMCGKAFSRKSRLMDHQRTHTELKHYECTECDKTFLKKSQLNIHQKTHMGGKPYTCSQCGKAFIKKCRLIYHQRTHTGEKPHGCSVCGKAFSTKFSLTTHQKTHTGEKPYICS [...]
+chr4-04	SwissProt	protein_match	266091	266225	79.000000	-	.	Target=Q8N823.1 510 556 +;percentID=40;Gap=M30 I2 M15 ;sequence=MLREEAAQKRKGKEPGMALPQGRLTFRDVAIEFSLAEWKCLNPSQRALYREVMLENYRNLEAVDISSKCMMKEVLSTGQGNTEVIHTGTLQRHESHHIGDFCFQEIEKEIHDIEFQCQEDERDGLEAPMTKIKKLTGSTDQHDHRHAGNKPIKDQLGSSFYSHLPELHIFQIKGEIGNQLEKSTNDAPSVSTFQRISCRPQTQISNNYGNNPLNSSLLPQKQEVHMREKSFQCNKSGKAFNCSSLLRKHQIIHLGDKQYKCDVCGKLFNHEQYLACHDRCHTVEKPYKCKECGKTFSQESSLTCHRRLHTGVKRYNCNECGKIFGQNSALLIDKAIDTGENPYKCNECDKAFNQQSQLSHHRIHTGEK [...]
+chr4-04	SwissProt	protein_match	266091	266231	80.000000	-	.	Target=P10076.2 356 404 +;percentID=48;Gap=M12 D1 M11 I1 M7 I2 M16 ;sequence=METQQVDAVTFEDVAVDFTQEEWTSLDPVQRNLYRDVMLENYQNLATVGGQMFKPSLISWLEKKVELTVIEQGILQEWEMHLKTKRTALQQDRFWSDMSNGMQLGREHSGGEPGDPVQVGAVFSEDSCPQTHSSTSNTGNTFACNLDGKDFQPLLKETSTEENIVQLNQCVKPLIFTPDVSQKKCTPEKSVECSDCGETFVNQLELQTHSSSHREKNIHKSEECGQASTHPISHGGHVIPTEKKYYECKKCEKFFTHPVYLNIHMQSHTVEKPYDCKECGKAFTERSSLIVHLRQHTREKSYECKECGKTFIQPSRLTEHMRSHTGEKPYQCDQCGNAFASSSYLTTHLRTHTGE [...]
+chr4-04	SwissProt	protein_match	266091	266168	83.000000	-	.	Target=O88553.1 334 361 +;percentID=60;Gap=M11 I2 M15 ;sequence=MATPEPAESDAEWEQLEPGQRNLYKDTKLETCSNPASMGNQDPKQGLVSKLDGEEERWSSVRANKNSSSSLHRLKKTGTSAKVQQDGAQTEGKQKFQRKLTSEVTFRKKSSNSKKSSECTLLEKKNVHSKHDPSEKRLHKSNLYGKNLNQNLDLPSQIKISAKKKPDTANEYRKSLSHSASDVNRDEISTRKKCDKSPNNKLFGKGDKNQTGKKCEKVCRHTASHTKEDKIHTGEKRKSPCRSPSKSDKAPGSGKPYECNQCGKVLSHKQGLLDHQRTHAGEEPYECYECGIAFSQKSHLVVHQKTPTGEKAPYECVQCGKAHGHKHALTDHLRISHTGEKPYKCNECGKTFRHSSNLMQHIRSHTGE [...]
+chr4-04	SwissProt	protein_match	266091	266231	83.000000	-	.	Target=Q9UK12.2 171 219 +;percentID=42;Gap=M32 I2 M15 ;sequence=MAKLYEAVTFKDVAVIFTEEELGLLDPAQRKLYRDVMLENFRNLLSVGGKIQTEMETVPEAGTHEEFSCKQIWEQIASDLTRSQDTTISNSQLFEQDDNPSQIKARLSTVHTREKPFQGENCKQFFSDVSFFDLPQQLYSGEKSHTCDECGKSFCYISALHIHQRVHMGVKCYKCDVCGKEFSQSSRLQTHQRVHTGEKPFKCEQCGKGFRCRSALKVHCKLHMREKPYNCEKCGKAFMHNFQLQKHHRIHTGEKPFKCEICGKSFCLRSSLNRHCMVHTAEKLYKSEKYGRGFIDRLDLHKHQMIHMGQKPYNCKECGKSFKWSSYLLVHQRVHTGEKPYKCEECGKGYISKSGLDFHHRTHTGERS [...]
+chr4-04	SwissProt	protein_match	266091	266231	84.000000	-	.	Target=Q8N4W9-2.2 188 236 +;percentID=44;Gap=M32 I2 M15 ;sequence=MMKEVLSTGQGNREVIHTGTLQRHQSYHIGDFCFQEIEKEIHNIEFQCQEDERNGHEAPTTKIKKLTGSTDQHDHRHAGNKPIKDQLGSSFYSHLPELHIFQIKGEIANQLEKSTSDASSVSTSQRISCRPQIHISNNYGNNPLNSSLLPQKQEVHMREKSFPCNESGKAFNCSSLLRKHQIPHLGDKQYKCDVCGKLFNHKQYLACHRRCHTGEKPYKCKECGKSFSYKSSLTCHHRLHTGVKPYKCNECGKVFRQNSALVIHKAIHTGEKPYKCNECGKAFNQQSHLSRHQRLHTGVKPYKCKICEKAFACHSYLANHTRIHSGEKTYKCNECGKAFNHQSSLARHHILHTGEKPYKCEECDKV [...]
+chr4-04	SwissProt	protein_match	266091	266231	84.000000	-	.	Target=Q3ZCT1.3 25 73 +;percentID=40;Gap=M32 I2 M15 ;sequence=MIGMLESLQHESDLLQHDQIHTGEKPYECNECRKTFSLKQNLVEHKKMHTGEKSHECTECGKVCSRVSSLTLHLRSHTGKKAYKCNKCGKAFSQKENFLSHQKHHTGEKPYECEKVSIQMPTIIRHQKNHTGTKPYACKECGKAFNGKAYLTEHEKIHTGEKPFECNQCGRAFSQKQYLIKHQNIHTGKKPFKCSECGKAFSQKENLIIHQRIHTGEKPYECKGCGKAFIQKSSLIRHQRSHTGEKPYTCKECGKAFSGKSNLTEHEKIHIGEKPYKCNECGTIFRQKQYLIKHHNIHTGEKPYECNKCGKAFSRITSLIVHVRIHTGDKPYECKVCGKAFCQSSSLTVHMRSHTGEKPYGCNECGKAFS [...]
+chr4-04	SwissProt	protein_match	266091	266231	87.000000	-	.	Target=Q9UK11.1 202 250 +;percentID=42;Gap=M32 I2 M15 ;sequence=MTMSKEAVTFKDVAVVFTEEELGLMDLAQRKLYRDVMLENFRNLLSVGHQPFHRDTFHFLREEKFWMMDIATQREGNSGGKIQPEMKTFPEAGPHEGWSCQQIWEEIASDLTRPQDSTIKSSQFFEQGDAHSQVEEGISIMHTGQKPSNCGKSKQSFSDMSIFDLPQQIRSAEKSHSCDECGKSFCYISALHIHQRVHLGEKLFKCDVCGKEFSQSLHLQTHQRVHTGEKPFKCEQCGRGFRCRSALTVHCKLHMGEKHYNCEACGRAFIHDFQLQKHQRIHTGEKPFKCEICGKSFCLRSSLNRHCMVHTAEKLYKSEKYGRGFIDRLDLHKHQMIHMGQKPYNCKECGKSFKWSSYLLVHQRVHTG [...]
+chr4-04	SwissProt	protein_match	266091	266225	88.000000	-	.	Target=Q86XN6-2.2 466 512 +;percentID=44;Gap=M30 I2 M15 ;sequence=MAFSQGLLTFRDVAIEFSQEEWKCLDPAQRTLYRDVMLENYRNLVSLDISSKCTMKEFLSTAQGNREVFHAGTLQIHESHHNGDFCYQDVDKDIHDYEFQWQEDERNGHEAPMTKIKKLTGSTERYDQSHARNKPIKDQLGSSFHSHLPEMHIFQTEEKIDNQVVKSIHDASLVSTAQRISCRPKTHISNNHGNNFWNSSLLTQKQEVHMREKSFQCNESGKAFNYSSLLRKHQIIHLADKYKCDVCGKLFNQKRNLACHRRCHTGENPYKCNECGKTFSQTSSLTCHRRLHTGEKPYKCEECDKAFHFKSILERHRIIHTEEKPYKCNECGKTFRQKSILTRHHRLHTGEKPYKCNECGKTFSHK [...]
+chr4-04	SwissProt	protein_match	266091	266231	88.000000	-	.	Target=Q96PQ6.2 528 576 +;percentID=42;Gap=M32 I2 M15 ;sequence=MAALSPTFATSTQDSTCLQDSEFPVSSKDHSCPQNLDLFVCSGLEPHTPSVGSQESVTFQDVAVDFTEKEWPLLDSSQRKLYKDVMLENYSNLTSLGYQVGKPSLISHLEQEEEPRTEERGAHQGACADWETPSKTKWSLLMEDIFGKETPSGVTMERAGLGEKSTEYAHLFEVFGMDPHLTQPMGRHAGKRPYHRRDYGVAFKGRPHLTQHMSMYDGRKMHECHQCQKAFTTSASLTRHRRIHTGEKPYECSDCGKAFNDPSALRSHARTHLKEKPFDCSQCGNAFRTLSALKIHMRVHTGERPYKCDQCGKAYGRSCHLIAHKRTHTGERPYECHDCGKAFQHPSHLKEHVRNHTGEKPYACTQCG [...]
+chr4-04	SwissProt	protein_match	266091	266231	88.000000	-	.	Target=Q96PQ6-2.2 496 544 +;percentID=42;Gap=M32 I2 M15 ;sequence=MAALSPTFATSTQDSTCLQDSEFPVSSKDHSCPQNLDLFVCSGLEPHTPSVGSQESVTFQDVAVDFTEKEWPLLDSSQRKLYKDVMLENYSNLTSLDWETPSKTKWSLLMEDIFGKETPSGVTMERAGLGEKSTEYAHLFEVFGMDPHLTQPMGRHAGKRPYHRRDYGVAFKGRPHLTQHMSMYDGRKMHECHQCQKAFTTSASLTRHRRIHTGEKPYECSDCGKAFNDPSALRSHARTHLKEKPFDCSQCGNAFRTLSALKIHMRVHTGERPYKCDQCGKAYGRSCHLIAHKRTHTGERPYECHDCGKAFQHPSHLKEHVRNHTGEKPYACTQCGKAFRWKSNFNLHKKNHMVEKTYECKECGKS [...]
+chr4-04	SwissProt	protein_match	266091	266225	88.000000	-	.	Target=Q86XN6-3.2 412 458 +;percentID=44;Gap=M30 I2 M15 ;sequence=MKEFLSTAQGNREVFHAGTLQIHESHHNGDFCYQDVDKDIHDYEFQWQEDERNGHEAPMTKIKKLTGSTERYDQSHARNKPIKDQLGSSFHSHLPEMHIFQTEEKIDNQVVKSIHDASLVSTAQRISCRPKTHISNNHGNNFWNSSLLTQKQEVHMREKSFQCNESGKAFNYSSLLRKHQIIHLADKYKCDVCGKLFNQKRNLACHRRCHTGENPYKCNECGKTFSQTSSLTCHRRLHTGEKPYKCEECDKAFHFKSILERHRIIHTEEKPYKCNECGKTFRQKSILTRHHRLHTGEKPYKCNECGKTFSHKSSLTCHHRLHTGEKPYKCNECGKTFSHKSSLTCHRRLHTGEKPYKCEECDKAYS [...]
+chr4-04	SwissProt	protein_match	266091	266231	89.000000	-	.	Target=Q14588.3 202 250 +;percentID=44;Gap=M32 I2 M15 ;sequence=MTTFKEGLTFKDVAVVFTEEELGLLDPVQRNLYQDVMLENFRNLLSVGHHPFKHDVFLLEKEKKLDIMKTATQRKGKSADKIQSEVETVPEAGRHEELYWGQIWKQIASDLIKYEDSMISISRFPRQGDLSCQVRAGLYTTHTGQKFYQCDEYKKSFTDVFNFDLHQQLHSGEKSHTCDECGKSFCYISALHIHQRVHMGEKCYKCDVCGKEFSQSSHLQTHQRVHTVEKPFKCVECGKGFSRRSTLTVHCKLHSGEKPYNCEECGRAFIHASHLQEHQRIHTGEKPFKCDTCGKNFRRRSALNNHCMVHTGEKPYKCEDCGKCFTCSSNLRIHQRVHTGEKPYKCEECGKCFIQPSQFQAHRRIHTG [...]
+chr4-04	SwissProt	protein_match	266091	266231	89.000000	-	.	Target=Q86TJ5.1 322 370 +;percentID=46;Gap=M14 I1 M9 D1 M8 I2 M15 ;sequence=MVTCAHLGRRARLPAAQPSACPGTCFSQEERMAAGYLPRWSQELVTFEDVSMDFSQEEWELLEPAQKNLYREVMLENYRNVVSLEALKNQCTDVGIKEGPLSPAQTSQVTSLSSWTGYLLFQPVASSHLEQREALWIEEKGTPQASCSDWMTVLRNQDSTYKKVALQEEPASGINMIKLIREDGGWKQLEDSHEDPQGLLSQKASLHVVAVPQEKATAWHGFGENGNLSPALVLSQGSSKGNHLCGSELDITSLASDSVLNHHQLGYADRRPCESNECGNAIRQNSHFIQHGGKMFVYLENGQSLNHGMALTIHNKINTAEKPFECHQCGKVFNRRHSLSEHQRIHTGEKPYECQE [...]
+chr4-04	SwissProt	protein_match	266091	266231	89.000000	-	.	Target=Q2VY69.1 201 249 +;percentID=42;Gap=M32 I2 M15 ;sequence=MTMFKEAVTFKDVAVVFTEEELGLLDVSQRKLYRDVMLENFRNLLSVGHQLSHRDTFHFQREEKFWIMETATQREGNSGGKIQTELESVPETGPHEEWSCQQIWEQTASELTRPQDSISSSQFSTQGDVPSQVDAGLSIIHIGETPSEHGKCKKFFSDVSILDLHQQLHSGKISHTCNEYRKRFCYSSALCLHQKVHMGEKRYKCDVCSKAFSQNSQLQTHQRIHTGEKPFKCEQCGKSFSRRSGMYVHCKLHTGEKPHICEECGKAFIHNSQLREHQRIHTGEKPFKCYICGKSFHSRSNLNRHSMVHMQEKSFRCDTCSNSFGQRSALNSHCMDHTKEKLYKCEECGRSFTCRQDLCKHQMDHTGD [...]
+chr4-04	SwissProt	protein_match	266091	266231	90.000000	-	.	Target=Q80W31.1 597 645 +;percentID=48;Gap=M14 D1 M9 I1 M7 I2 M16 ;sequence=MTESEGLVTFKDVAIDFTQEEWKQLDPTQRNLYRNVMLENYNNLITVGPPLTKPEVIFKLEQEEEPCVVEREVLWRPCPGEILGIDEHQKIQDGQVFEGIVVTSEASECPEEFASTFFPNADSIPSMHSLFECDGVGECLEPNFGDDDVQYPLPEEQFEYDDAMQPFHTSSPHFVLTPFKCNHCGKGFSQTLDLIRHLRVHTGGKLYECHQCGKGFSHKEKLINHHKLHSREQCYECSECGKTFIKMSNLIRHQRIHTGEKPYVCQECGKSFGQKSNLIDHEKIHTGEKPYKCNECGKSFSQKQSLVAHQKVHTGEKPYACNECGKAFPRVASLALHMRGHTREKPYKCDKCGKAF [...]
+chr4-04	SwissProt	protein_match	266091	266231	91.000000	-	.	Target=Q9NV72.1 408 456 +;percentID=44;Gap=M32 I2 M15 ;sequence=MALPQGLLTFRDVAIEFSQEEWKCLDPAQRTLYRDVMLENYRNLVSLDTSSKCMMKMFSSTGQGNTEVVHTGTLQIHASHHIGDTCFQEIEKDIHDFVFQWQENETNGHEALMTKIKKLMSSTERHDQRHAGNKPIKNELGSSFHSHLPEVHIFHPEGKIGNQVEKAINDAFSVSASQRISCRPKTRISNKYRNNFLQSSLLTQKREVHTREKSFQRNESGKAFNGSSLLKKHQIIHLGDKQYKCDVCGKDFHQKRYLACHRCHTGENPYKCNECGKTFSHNSALLVHKAIHTGEKPYKCNECGKVFNQQSNLARHHRVHTGEKPYKCEECDKVFSRKSHLERHRRIHTGEKPYKCKVCDKAFRRDSH [...]
+chr4-04	SwissProt	protein_match	266091	266231	91.000000	-	.	Target=Q5MCW4.1 604 652 +;percentID=48;Gap=M14 D1 M9 I1 M7 I2 M16 ;sequence=MTESQGTVTFKDVAIDFTQEEWKRLDPAQRKLYRNVMLENYNNLITVGYPFTKPDVIFKLEQEEEPWVMEEEVLRRHWQGEIWGVDEHQKNQDRLLRQVEVKFQKTLTEEKGNECQKKFANVFPLNSDFFPSRHNLYEYDLFGKCLEHNFDCHNNVKCLMRKEHCEYNEPVKSYGNSSSHFVITPFKCNHCGKGFNQTLDLIRHLRIHTGEKPYECSNCRKAFSHKEKLIKHYKIHSREQSYKCNECGKAFIKMSNLIRHQRIHTGEKPYACKECEKSFSQKSNLIDHEKIHTGEKPYECNECGKAFSQKQSLIAHQKVHTGEKPYACNECGKAFPRIASLALHMRSHTGEKPYKC [...]
+chr4-04	SwissProt	protein_match	266091	266231	92.000000	-	.	Target=Q9NZL3.2 202 250 +;percentID=44;Gap=M32 I2 M15 ;sequence=MTTFKEAMTFKDVAVVFTEEELGLLDLAQRKLYRDVMLENFRNLLSVGHQAFHRDTFHFLREEKIWMMKTAIQREGNSGDKIQTEMETVSEAGTHQEWSFQQIWEKIASDLTRSQDLVINSSQFSKEGDFPCQTEAGLSVIHTRQKSSQGNGYKPSFSDVSHFDFHQQLHSGEKSHTCDECGKNFCYISALRIHQRVHMGEKCYKCDVCGKEFSQSSHLQTHQRVHTGEKPFKCVECGKGFSRRSALNVHHKLHTGEKPYNCEECGKAFIHDSQLQEHQRIHTGEKPFKCDICGKSFCGRSRLNRHSMVHTAEKPFRCDTCDKSFRQRSALNSHRMIHTGEKPYKCEECGKGFICRRDLYTHHMVHTG [...]
+chr4-04	SwissProt	protein_match	266091	266231	93.000000	-	.	Target=Q5RER9.1 325 373 +;percentID=46;Gap=M32 I2 M15 ;sequence=MALSQGLLTFRDVAIEFSQEEWKCLDPAQRTLYRDVMLENYRNLVSLDISSKCMMKEFLSTAQGNREVFHTGTLERHESHHIGDFCFQETDKDIHNLEFQWQEDERNGHEVLMTEIKKLTGSTDQYNQSHARNKPIKDQLGSSFYSHLPELHIFQTQGKIDNQVEKSINNASSISTAQRISCRPKTHISNNYGNNFLNSLLLTQKQEVRMREKSFQYNESGKAFNYSSLLRKHQIIHLGEKQYKCDVCGKVFNRKRNLACHRRCHTGEKPYRCNECGKTFSQTYSLTCHRRLHTGEKPYKCEECDKAFSFKSNLKRHRRIHAGEKPYKCNECGKTFSQTSSLTCHRRLHTGEKPYKCNECGKTFSWKS [...]
+chr4-04	SwissProt	protein_match	266091	266231	93.000000	-	.	Target=Q9Y6Q3.3 375 423 +;percentID=46;Gap=M31 I2 M16 ;sequence=MSVSSGVQILTKPETVDRRRSAETTKEAGRPLEMAVSEPEASAAEWKQLDPAQSNLYNDVMLENYCNQASMGCQAPKPDMISKLEKGEAPWLGKGKRPSQGCPSKIARPKQKETDGKVQKDDDQLENIQKSQNKLLREVAVKKKTQAKKNGSDCGSLGKKNNLHKKHVPSKKRLLKFESCGKILKQNLDLPDHSRNCVKRKSDAAKEHKKSFNHSLSDTRKGKKQTGKKHEKLSSHSSSDKCNKTGKKHDKLCCHSSSHIKQDKIQTGEKHEKSPSLSSSTKHEKPQACVKPYECNQCGKVLSHKQGLIDHQRVHTGEKPYECNECGIAFSQKSHLVVHQRTHTGEKPYECIQCGKAHGHKHALTDHL [...]
+chr4-04	SwissProt	protein_match	266091	266231	93.000000	-	.	Target=Q9Y6Q3-2.3 390 438 +;percentID=46;Gap=M31 I2 M16 ;sequence=MSVSSGVQILTKPETVDRRRSAETTKEAGRPLEMAVSEPEASAAVSVTFKHVTMAFTQKEWKQLDPAQSNLYNDVMLENYCNQASMGCQAPKPDMISKLEKGEAPWLGKGKRPSQGCPSKIARPKQKETDGKVQKDDDQLENIQKSQNKLLREVAVKKKTQAKKNGSDCGSLGKKNNLHKKHVPSKKRLLKFESCGKILKQNLDLPDHSRNCVKRKSDAAKEHKKSFNHSLSDTRKGKKQTGKKHEKLSSHSSSDKCNKTGKKHDKLCCHSSSHIKQDKIQTGEKHEKSPSLSSSTKHEKPQACVKPYECNQCGKVLSHKQGLIDHQRVHTGEKPYECNECGIAFSQKSHLVVHQRTHTGEKPYEC [...]
+chr4-04	SwissProt	protein_match	266091	266231	94.000000	-	.	Target=Q8N9Z0.2 258 306 +;percentID=48;Gap=M17 I1 M6 D1 M8 I2 M15 ;sequence=MLCDEEAQKRKAKESGMALPQGRLTFMDVAIEFSQEEWKSLDPGQRALYRDVMLENYRNLVFLGICLPDLSIISMLKQRREPLILQSQVKIVKNTDGRECVRSVNTGRSCVLGSNAENKPIKNQLGLTLEAHLSELQLFQAGRKIYRSNQVEKFTNHRSSVSPLQKISSSFTTHIFNKYRNDLIDFPLLPQEEKAYIRGKSYEYECSEDGEVFRVRASLTNHQVIHTAEKPYKCTECGKVFSRNSHLVEHWRIHTGQKPYKCSECDKVFNRNSNLARHQRIHTGEKPHKCNECGKAFRECSGLTTHLVIHTGEKPYKCNECGKNFRHKFSLTNHQRSHTAEKPYKCNECGKVFSLL [...]
+chr4-04	SwissProt	protein_match	266091	266231	94.000000	-	.	Target=Q8N9Z0-2.2 215 263 +;percentID=48;Gap=M17 I1 M6 D1 M8 I2 M15 ;sequence=MLCDEEAQKRKAKESGMALPQGRLTFMDVAIEFSQEEWKSLDPGQRALYRDVMLENYRNLVFLGRSCVLGSNAENKPIKNQLGLTLEAHLSELQLFQAGRKIYRSNQVEKFTNHRSSVSPLQKISSSFTTHIFNKYRNDLIDFPLLPQEEKAYIRGKSYEYECSEDGEVFRVRASLTNHQVIHTAEKPYKCTECGKVFSRNSHLVEHWRIHTGQKPYKCSECDKVFNRNSNLARHQRIHTGEKPHKCNECGKAFRECSGLTTHLVIHTGEKPYKCNECGKNFRHKFSLTNHQRSHTAEKPYKCNECGKVFSLLSYLARHQIIHSTEKPYKCNECGRAFHKRPGLMAHLLIHTGE [...]
+chr4-04	SwissProt	protein_match	266091	266240	95.000000	-	.	Target=Q12901.3 199 250 +;percentID=42;Gap=M35 I2 M15 ;sequence=MTTFKEAVTFKDVAVVFTEEELGLLDPAQRKLYRDVMLENFRNLLSVGHQPFHQDTCHFLREEKFWMMGTATQREGNSGGKIQTELESVPEAGAHEEWSCQQIWEQIAKDLTRSQDSIINNSQFFENGDVPSQVEAGLPTIHTGQKPSQGGKCKQSFSDVPIFDLPQQLYSEEKSYTCDECGKSICYISALHVHQRVHVGEKLFMCDVCGKEFSQSSHLQTHQRVHTGEKPFKCEQCGKGFSRRSALNVHHKLHTGEKPYICEACGKAFIHDSQLKEHKRIHTGEKPFKCDICGKTFYFRSRLKSHSMVHTGEKPFRCDTCDKSFHQRSALNRHCMVHTGEKPYRCEQCGKGFIGRLDFYKHQVVHTG [...]
+chr4-04	SwissProt	protein_match	266091	266231	95.000000	-	.	Target=Q9BR84.1 323 371 +;percentID=44;Gap=M31 I2 M16 ;sequence=MVAGWLTNYSQDSVTFEDVAVDFTQEEWTLLDQTQRNLYRDVMLENYKNLVAVDWESHINTKWSAPQQNFLQGKTSSVVEMERNHFGEELFDFNQCEKALSEHSCLKTHRRTYFRKKTCECNQCEKAFRKPSIFTLHKKTDIGEELPNCNQCETAFSQHLHLVCKKTSQNLHLVCKKTHTQEKPYKCSDCEKGLPSSSHLRECVRIYGGERPYTHKEYVETFSHSTALFVHMQTQDGEKFYECKACGKPFTESSYLTQHLRTHSRVLPIEHKKFGKAFAFSPDLAKHIRLRTRGKHYVCNECGKEFTCFSKLNIHIRVHTGEKPYECNKCGKAFTDSSGLIKHRRTHTGEKPYECKECGKAFANSSHL [...]
+chr4-04	SwissProt	protein_match	266091	266231	95.000000	-	.	Target=Q6ZMW2.1 476 524 +;percentID=44;Gap=M32 I2 M15 ;sequence=MNTFQASVSFQDVTVEFSQEEWQHMGPVERTLYRDVMLENYSHLVSVGYCFTKPELIFTLEQGEDPWLLEKEKGFLSRNSPEDSQPDEISEKSPENQGKHLLQVLFTNKLLTTEQEISGKPHNRDINIFRARMMPCKCDIAGSACQGLSLMAPHCQYSKEKAHERNVCDKWLISIKDGRTNTQEKSFAYSKIVKTLHHKEEVIQHQTIQTLGQDFEYNESRKAFLEKAALVTSNSTHPKGKSYNFNKFGENKYDKSTFIIPQNMNPEKSHYEFNDTGNCFCRITHKTLTGGKSFSQKSHIREHHRVHIGVKPFEYGKSFNRNSTLPVHQRTHATDKYSDYHPCTETFSYQSTFSVHQKVHIRAKPYEY [...]
+chr4-04	SwissProt	protein_match	266091	266303	95.000000	-	.	Target=Q3KNS6-2.1 31 102 +;percentID=35;Gap=M23 D1 M31 I2 M16 ;sequence=MNKEYGKSFSRGSLVTRHQRIHTGKKPYECKECGKAFSCSSYFSQHQRIHTGEKPYECKECGKAFKYCSNLNDHQRIHTGEKPYECKVCGKAFTKSSQLFLHLRIHTGEKPYECKECGKAFTQHSRLIQHQRMHTGEKPYECKQCGKAFNSASTLTNHHRIHAGEKLYECEECRKAFIQSSELIQHQRIHTDEKPYECNECGKAFNKGSNLTRHQRIHTGEKPYDCKECGKAFGSRSDLIRHEGIHTG
+chr4-04	SwissProt	protein_match	266091	266231	96.000000	-	.	Target=Q9QXT9.1 232 280 +;percentID=42;Gap=M31 I2 M16 ;sequence=MAPEQREGKSQVSVTFEDVAVLFTRDEWKKLVPSQRSLYREVMLENYSNLASLGFPFTKPKMISVLQQGEEPWKSEKESHGCSPLGCHGSLQTTKSTQTKESLFQELKRKQLKRDEAWDFTSGKSCRPDNSFRTQDTNESLEIISINHTKILTIDKSRKNFKFGPSVGLKSIGKQKIAGEKTQRNSLEENSTLLSQPKLKTVEKRYKCSTCEKAFIHNSSLRKHLKNHTGERLFQCKDCLKAFSQSSALIQHQRTHTGEKPYICKECGKAFSHSASLCKHLRTHTLEKSYTCKECGKSFSRRSGLFLHQKIHARENPHKYNPGRKASTSLSGCQRIHSRKKTYLCNECGNTFKSSSSLRYHQRIHTGE [...]
+chr4-04	SwissProt	protein_match	266091	266231	97.000000	-	.	Target=O60765.2 240 288 +;percentID=44;Gap=M31 I2 M16 ;sequence=MAAGQREARPQVSLTFEDVAVLFTRDEWRKLAPSQRNLYRDVMLENYRNLVSLGLPFTKPKVISLLQQGEDPWEVEKDGSGVSSLGSKSSHKTTKSTQTQDSSFQGLILKRSNRNVPWDLKLEKPYIYEGRLEKKQDKKGSFQIVSATHKKIPTIERSHKNTELSQNFSPKSVLIRQQILPREKTPPKCEIQGNSLKQNSQLLNQPKITADKRYKCSLCEKTFINTSSLRKHEKNHSGEKLFKCKECSKAFSQSSALIQHQITHTGEKPYICKECGKAFTLSTSLYKHLRTHTVEKSYRCKECGKSFSRRSGLFIHQKIHAEENPCKYNPGRKASSCSTSLSGCQRIHSRKKSYLCNECGNTFKSSSS [...]
+chr4-04	SwissProt	protein_match	266091	266231	97.000000	-	.	Target=Q61751.1 210 258 +;percentID=44;Gap=M31 I2 M16 ;sequence=MAPEQWEATSQVSLTFEDVAVLFTRDEWKKLVPSQRSLYREVMLENYSNLASLGFPFTKPKVISLLQQGEDPWKVEEEGPGDFSLGLKCSQRTTKSTQTQDSSFRELIMRKSKRKEPWNMKSENLSIHEGKLEEKWDVNASTIERSYKSNELSPKSHREKRSSECEKQISYLSNPLGITPDKRYKCSMCEKTFINTSSLRKHEKNHSGEKLFKCKECSKAFSQSSALIQHQITHTGEKPYVCKECGKAFTLSTSLYKHLRTHTVEKSYRCKECGKSFGRRSGLFIHQKVHAGENPYKYNPGRKASTSLSGCQRIHSRKKTYLCNECGNTFKSSSSLRYHQRIHTGEKPFKCSECGRAFSQSASLIQHE [...]
+chr4-04	SwissProt	protein_match	266091	266231	97.000000	-	.	Target=Q02975.1 214 262 +;percentID=44;Gap=M31 I2 M16 ;sequence=MAPEQREGASQVSVTFEDVAVLFTRDEWKKLDLSQRSLYREVMLENYSNLASMAGFLFTKPKVISLLQQGEDPWQVEKEGPRYFSLGLKCSHRTTKSTQTQDSSFQELIVRKSKRTFAFEPLNMKSENLFIHEGKLEEKWDKNTLTVERSHKNNEFSPKSHREKRSSECKKQISYLSNPPGITPDKRYKCSMCEKTFINTSSLRKHEKNHSGEKLFKCKECSKAFSQSSALIQHQITHTGEKPYVCKECGKAFTLSTSLYKHLRTHTVEKSYRCKECGKSFGQRSGLFIHQKIHARENPHRYNPGRKASASLSGCQRAHSRKKTYLCNECGNTFKSSSSLRYHQRIHTGEKPFRCSECGRAFSQSASL [...]
+chr4-04	SwissProt	protein_match	266091	266231	98.000000	-	.	Target=Q09FC8-4.2 341 389 +;percentID=50;Gap=M13 I1 M10 D1 M8 I2 M15 ;sequence=MWEHRKEPWTIESQVRVARKPKGWEWIKGVKTDLSRNCVIKELAPQQEGNPGEVFHTVTLEQHEKHDIEEFCFREIKKKIHDFDCQWRDDERNCNKVTTAPKENLTCRRDQRDRRGIGNKSIKHQLGLSFLPHPHELQQFQAEGKIYECNHVEKSVNHGSSVSPPQIISSTIKTHVSNKYGTDFICSSLLTQEQKSCIREKPYRYIECDKALNHGSHMTVRQVSHSGEKGYKCDLCGKVFSQKSNLARHWRVHTGEKPYKCNECDRSFSRNSCLALHRRVHTGEKPYKCYECDKVFSRNSCLALHQKTHIGEKPYTCKECGKAFSVRSTLTNHQVIHSGKKPYKCNECGKVFS [...]
+chr4-04	SwissProt	protein_match	266091	266231	98.000000	-	.	Target=Q09FC8-3.2 124 172 +;percentID=50;Gap=M13 I1 M10 D1 M8 I2 M15 ;sequence=MTVRQVSHSGEKGYKCDLCGKVFSQKSNLARHWRVHTGEKPYKCNECDRSFSRNSCLALHRRVHTGEKPYKCYECDKVFSRNSCLALHQKTHIGEKPYTCKECGKAFSVRSTLTNHQVIHSGKKPYKCNECGKVFSQTSSLATHQRIHTGEKPYKCNECGKVFSQTSSLARHWRIHTGEKPYKCNECGKVFSYNSHLASHRRVHTGEKPYKCNECGKAFSVHSNLTTHQVIHTGEKPYKCNQCGKGFSVHSSLTTHQVIHTGEKPYKCNECGKSFSVRPNLTRHQIIHTGKKPYKCSDCGKSFSVRPNLFRHQIIHTKEKPYKRN
+chr4-04	SwissProt	protein_match	266091	266231	100.000000	-	.	Target=P15622.3 225 273 +;percentID=52;Gap=M17 I1 M6 D1 M8 I2 M15 ;sequence=MAAARLLPVPAGPQPLSFQAKLTFEDVAVLLSQDEWDRLCPAQRGLYRNVMMETYGNVVSLGLPGSKPDIISQLERGEDPWVLDRKGAKKSQGLWSDYSDNLKYDHTTACTQQDSLSCPWECETKGESQNTDLSPKPLISEQTVILGKTPLGRIDQENNETKQSFCLSPNSVDHREVQVLSQSMPLTPHQAVPSGERPYMCVECGKCFGRSSHLLQHQRIHTGEKPYVCSVCGKAFSQSSVLSKHRRIHTGEKPYECNECGKAFRVSSDLAQHHKIHTGEKPHECLECRKAFTQLSHLIQHQRIHTGERPYVCPLCGKAFNHSTVLRSHQRVHTGEKPHRCNECGKTFSVKRTLL [...]
+chr4-04	SwissProt	protein_match	266091	266231	100.000000	-	.	Target=P15622-2.3 220 268 +;percentID=52;Gap=M17 I1 M6 D1 M8 I2 M15 ;sequence=MAAARLLPVPAGPQAKLTFEDVAVLLSQDEWDRLCPAQRGLYRNVMMETYGNVVSLGLPGSKPDIISQLERGEDPWVLDRKGAKKSQGLWSDYSDNLKYDHTTACTQQDSLSCPWECETKGESQNTDLSPKPLISEQTVILGKTPLGRIDQENNETKQSFCLSPNSVDHREVQVLSQSMPLTPHQAVPSGERPYMCVECGKCFGRSSHLLQHQRIHTGEKPYVCSVCGKAFSQSSVLSKHRRIHTGEKPYECNECGKAFRVSSDLAQHHKIHTGEKPHECLECRKAFTQLSHLIQHQRIHTGERPYVCPLCGKAFNHSTVLRSHQRVHTGEKPHRCNECGKTFSVKRTLLQHQ [...]
+chr4-04	SwissProt	protein_match	266091	266231	101.000000	-	.	Target=Q6ZN06.2 325 373 +;percentID=48;Gap=M32 I2 M15 ;sequence=MALPQGLLTFRDVAIEFSQEEWKCLDPAQRTLYRDVMLENYRNLVSLDISSKCMMKEFSSTAQGNREVIHTGTLQRHESHHTGDFRFQEIDKDIHNLEFQWQEDERNSHEAPMTEIKKLTGSADRYDQRHAGNKPIKDQLGSSFHSHLPELHMFQTQGKIGNQVEKSINDASSISTSQRISCRPKTHISNNYGNNFRNSSLLTQKQEVHMREKSFQCNESGKAFNYSSLLRKHQIIHLGEKQYKCDVCGKVFNRKRNLVCHRRCHTGEKPYRCNECGKTFSQTYSLTCHRRLHTGEKPYKCEECDKAFSFKSNLKRHRRIHAGEKPYKCNECGKTFSQTSSLTCHRRLHTGEKPFKCNECGKTFSRK [...]
+chr4-04	SwissProt	protein_match	266091	266231	102.000000	-	.	Target=P17141.3 337 385 +;percentID=48;Gap=M31 I2 M16 ;sequence=MATSEPAESDAVRAKEWEQLEPVQRDVYKDTKLENCSNPASMGNQDPKQDIVSVLEEEEPSSGKGKKASPSSLKKIARPKTAGTSAKLQQDDEHREEKQKSQSKLTKEVTLRKKSSNSKKSSEYGLLENKSLHSKHTPSEKKLLKSSSRGKNSNQNSDSLKKKPDTANEHRKSLSHSASDVNKDEIPTRKKCDKLPNNKLSDKGDKNQTSKKCEKVCRHSASHTKEDKIQTGEKRKSHCRTPSKPEKAPGSGKPYECNHCGKVLSHKQGLLDHQRTHTGEKPYECNECGIAFSQKSHLVLHQRTHTGEKPYECEQCGKAHGHKHALTDHLRIHTGEKPYKCNECGKTFRHSSNLMQHLRSHTGEKPY [...]
+chr4-04	SwissProt	protein_match	266091	266231	104.000000	-	.	Target=Q96IR2.2 493 541 +;percentID=46;Gap=M32 I2 M15 ;sequence=MALSQGLLTFRDVAIEFSQEEWKCLDPAQRTLYRDVMLENYRNLVSLDISSKCMMKEFSSTAQGNTEVIHTGTLQRHERHHIGDFCFQEMEKDIHDFEFQWKEDERNSHEAPMTEIKQLTGSTNRHDQRHAGNKPIKDQLGSSFHSHLPELHMFQTQGKIGNQVEKSINSASLVSTSQRISCRPKTHISKNYGNNFLNSSLLTQKQEVHMREKSFQCNESGKAFNYSSVLRKHQIIHLGAKQYKCDVCGKVFNQKRYLACHRRCHTGKKPYKCNDCGKTFSQELTLTCHHRLHTGEKHYKCSECGKTFSRNSALVIHKAIHTGEKSYKCNECGKTFSQTSYLVYHRRLHTGEKPYKCEECDKAFSFK [...]
+chr4-04	SwissProt	protein_match	266091	266231	106.000000	-	.	Target=Q6ZN19.1 507 555 +;percentID=48;Gap=M32 I2 M15 ;sequence=MLEGHESYDTENFYFREIRKNLQEVDFQWKDGEINYKEGPMTHKNNLTGQRVRHSQGDVENKHMENQLILRFQSGLGELQKFQTAEKIYGCNQIERTVNNCFLASPLQRIFPGVQTNISRKYGNDFLQLSLPTQDEKTHIREKPYIGNECGKAFRVSSSLINHQMIHTTEKPYRCNESGKAFHRGSLLTVHQIVHTRGKPYQCDVCGRIFRQNSDLVNHRRSHTGDKPYICNECGKSFSKSSHLAVHQRIHTGEKPYKCNRCGKCFSQSSSLATHQTVHTGDKPYKCNECGKTFKRNSSLTAHHIIHAGKKPYTCDVCGKVFYQNSQLVRHQIIHTGETPYKCNECGKVFFQRSRLAGHRRIHTGEK [...]
+chr4-04	SwissProt	protein_match	266091	266231	110.000000	-	.	Target=Q8WV37.1 378 426 +;percentID=50;Gap=M17 I1 M6 D1 M8 I2 M15 ;sequence=MALPQGHLTFRDVAIEFSQAEWKCLDPAQRALYKDVMLENYRNLVSLGISLPDLNINSMLEQRREPWSGESEVKIAKNSDGRECIKGVNTGSSYALGSNAEDKPIKKQLGVSFHLHLSELELFPDERVINGCNQVENFINHSSSVSCLQEMSSSVKTPIFNRNDFDDSSFLPQEQKVHLREKPYECNEHSKVFRVSSSLTKHQVIHTVEKPYKCNSCGKVFSRNSHLAEHCRIHTGEKPYKCNVCGKVFSYNSNFARHQRIHTREKPYECNECGKVFSNNSYLARHQRIHAEEKPYKCNECGKGFSHKSSLANHWRIYTGEKPYKCDECGKAFYRIALLVRHQKIHTGEKPYKCN [...]
+chr4-04	SwissProt	protein_match	266091	266231	110.000000	-	.	Target=Q99676.3 416 464 +;percentID=48;Gap=M32 I2 M15 ;sequence=MEDLSSPDSTLLQGGHNLLSSASFQESVTFKDVIVDFTQEEWKQLDPGQRDLFRDVTLENYTHLVSIGLQVSKPDVISQLEQGTEPWIMEPSIPVGTCADWETRLENSVSAPEPDISEEELSPEVIVEKHKRDDSWSSNLLESWEYEGSLERQQANQQTLPKEIKVTEKTIPSWEKGPVNNEFGKSVNVSSNLVTQEPSPEETSTKRSIKQNSNPVKKEKSCKCNECGKAFSYCSALIRHQRTHTGEKPYKCNECEKAFSRSENLINHQRIHTGDKPYKCDQCGKGFIEGPSLTQHQRIHTGEKPYKCDECGKAFSQRTHLVQHQRIHTGEKPYTCNECGKAFSQRGHFMEHQKIHTGEKPFKCDEC [...]
+chr4-04	SwissProt	protein_match	266091	266231	110.000000	-	.	Target=A6QLU5.1 417 465 +;percentID=48;Gap=M32 I2 M15 ;sequence=MEDLSAPESALFQGGHTLLPSASFQESVTFKDVIVDFTQEEWKQLDPVQRGLFRDVTLENYTHLVSIGLQVSKPDVISQLEQGTEPWIVEPSIPVGTPGDWVTRPENSITASELDISGEEPSPGAVAEKHKRDDPWSTNFLETCESKGSPERQQANKQTLPREIKITEKTIPTLEQAHVNNDFEKSISVSLDLLTHKQISPKQTSTKTNVKQNLNPVKKEKSCKCNECGKAFTYCSALIRHQRTHTGEKPYKCNECEKAFSRSENLINHQRIHTGDKPYKCDQCGKGFIEGPSLTQHQRIHTGEKPYKCDECGKAFSQRTHLVQHQRIHTGEKPYTCNECGKAFSQRGHFMEHQKIHTGEKPFKCDE [...]
+chr4-04	SwissProt	protein_match	266091	266231	110.000000	-	.	Target=Q8WV37-3.1 228 276 +;percentID=50;Gap=M17 I1 M6 D1 M8 I2 M15 ;sequence=MSSSVKTPIFNRNDFDDSSFLPQEQKVHLREKPYECNEHSKVFRVSSSLTKHQVIHTVEKPYKCNSCGKVFSRNSHLAEHCRIHTGEKPYKCNVCGKVFSYNSNFARHQRIHTREKPYECNECGKVFSNNSYLARHQRIHAEEKPYKCNECGKGFSHKSSLANHWRIYTGEKPYKCDECGKAFYRIALLVRHQKIHTGEKPYKCNECGKVFIQNSHLAQHWRIHTGEKPYKCNECGKVFNQLSNLARHRRIHTGEKPYKCNECGKAFSEYSGLSAHLVIHTGEKPYKCSECGKAFRHKLSLTNHQRIHTGERPYKCNECGKVFNRIAHLARHRKIHTGEKPYKCNECGKAFSR [...]
+chr4-04	SwissProt	protein_match	266091	266423	328.000000	-	.	Target=Q03923.3 76 192 +;percentID=56;Gap=M45 I4 M51 I2 M15 ;sequence=MGPLTFRDVAIEFSLKEWQCLDTAQRNLYRNVMLENYRNLVFLGITVSKPDLITCLEQGKEAWSMKRHEIMVAKPTVMCSHFAQDLWPEQNIKDSFQKVTLKRYGKCRHENLPLRKGCESMDECKMHKGGCNGLNQCLTATQSKIFQCDKYVKVAHKFSNSNRHEIRHTKKKPFKCTKCGKSFGMISCLTEHSRIHTRVNFYKCEECGKAFNWSSTLTKHKRIHTGEKPYKCEECGKAFNQSSNLIKHKKIHTGEKPYKCEECGKTFNRFSTLTTHKIIHTGEKPYKCKECGKAFNRSSTLTTHRKIHTGEKPYKCEECGKAFKQSSNLTTHKIIHTGEKPYKCKKCGKAFNQSAHLTTHE [...]
+chr4-04	SwissProt	protein_match	266091	266441	330.000000	-	.	Target=Q03923-2.3 39 159 +;percentID=56;Gap=M2 D1 M3 D1 M44 I4 M51 I2 M15 ;sequence=MGPLTFRDVAIEFSLKEWQCLDTAQRNLYRNVMLENYRNLVFLVMCSHFAQDLWPEQNIKDSFQKVTLKRYGKCRHENLPLRKGCESMDECKMHKGGCNGLNQCLTATQSKIFQCDKYVKVAHKFSNSNRHEIRHTKKKPFKCTKCGKSFGMISCLTEHSRIHTRVNFYKCEECGKAFNWSSTLTKHKRIHTGEKPYKCEECGKAFNQSSNLIKHKKIHTGEKPYKCEECGKTFNRFSTLTTHKIIHTGEKPYKCKECGKAFNRSSTLTTHRKIHTGEKPYKCEECGKAFKQSSNLTTHKIIHTGEKPYKCKKCGKAFNQSAHLTTHEVIHTGEKPYKCEKCGKAFN [...]
+chr4-04	SwissProt	protein_match	266091	266417	348.000000	-	.	Target=Q8NEM1.2 86 200 +;percentID=62;Gap=M43 I4 M51 I2 M15 ;sequence=MPGPPGSLEMGPLTFRDVAIEFSLEEWQCLDTAQRNLYRKVMFENYRNLVFLGIAVSKPHLITCLEQGKEPWNRKRQEMVAKPPVIYSHFTEDLWPEHSIKDSFQKVILRGYGKCGHENLQLRISCKSVDESKVFKEGYNELNQCLRTTQSKIFQCDKYVKVFHKFSNSNSHKKRNTGKKVFKCKECGKSFCMLSHLTQHIRIHTRENSYKCEECGKVLNWFSELIKHKGIHMGEKPYKCEECGKAFNQSSTLIKHKKIHIEEKPFKCEECGKAFSLFSILSKHKIIHTGDKPYKCDECHKAFNWFATLTNHKRIHTGEKPFKCEECGKDFNQFSNLTKHKKIHTGEKPYKCEECGKAFNQ [...]
+chr4-04	SwissProt	protein_match	266100	266159	60.000000	-	.	Target=Q8N587.2 247 268 +;percentID=59;Gap=M6 I2 M14 ;sequence=MAAIYLSRGFFSREPICPFEEKTKVERMVEDYLASGYQDSVTFDDVAVDFTPEEWALLDTTEKYLYRDVMLENYMNLASVEWEIQPRTKRSSLQQGFLKNQIFSGIQMTRGYSGWKLCDCKNCGEVFREQFCLKTHMRVQNGGNTSEGNCYGKDTLSVHKEASTGQELSKFNPCGKVFTLTPGLAVHLEVLNARQPYKCKECGKGFKYFASLDNHMGIHTDEKLCEFQEYGRAVTASSHLKQCVAVHTGKKSKKTKKCGKSFTNFSQLYAPVKTHKGEKSFECKECGRSFRNSSCLNDHIQIHTGIKPHKCTYCGKAFTRSTQLTEHVRTHTGIKPYECKECGQAFAQYSGLSIHIRSHSGKKPYQCKE [...]
+chr4-04	SwissProt	protein_match	266112	266156	53.000000	-	.	Target=Q9Y2H8.1 304 320 +;percentID=58;Gap=M6 I2 M9 ;sequence=MSPHPEAITDCVTLNTVGQLAEGGYPLRFSTLFQEQQKMNISQASVSFKDVTIEFTQEEWQQMAPVQKNLYRDVMLENYSNLVSVGYCCFKPEVIFKLEQGEEPWFSEEEFSNQSHPKDYRGDDLIKQNKKIKDKHLEQAICINNKTLTTEEEKVLGKPFTLHVAAVASTKMSCKCNSWEVNLQSISEFIINNRNYSTKKIGCGNVCENSPFKINFEKTQTGEKFYEHNKNMKALNYNENLPKHPKFQTLEQAFECNKIGKAFNDKANCVKHNSSHTGETSSKDDEFRKNCDKKTLFDHRRTGTGKKHLHLNQCGKSFEKSTVEEYNKLNMGIKHYELNPSGNNFNRKAHLTDPQTAVIEENPLVSNDRT [...]
+chr4-04	SwissProt	protein_match	266118	266204	53.000000	-	.	Target=Q8IYI8.1 263 293 +;percentID=50;Gap=M3 I1 M11 D1 M7 I2 M7 ;sequence=MDPVAFKDVAVNFTQEEWALLDISQRKLYREVMLETFRNLTSLGKRWKDQNIEYEHQNPRRNFRSLIEEKVNEIKDDSHCGETFTPVPDDRLNFQEKKASPEVKSCESFVCGEVGLGNSSFNMNIRGDIGHKAYEYQEYGPKPCKCQQPKKAFRYRPSFRTQERDHTGEKPNACKVCGKTFISHSSVRRHMVMHSGDGPYKCKFCGKAFHCLRLYLIHERIHTGEKPCECKQCGKSFSYSATHRIHKRTHTGEKPYEYQECGKAFHSPRSYRRHERIHMGEKAYQCKECGKAFTCPRYVRIHERTHSRKNLYECKQCGKALSSLTSFQTHVRLHSGERPYECKICGKDFCSVNSFQR [...]
+chr4-04	SwissProt	protein_match	266118	266231	62.000000	-	.	Target=Q9UC07.2 274 313 +;percentID=43;Gap=M12 I1 M11 D1 M7 I2 M7 ;sequence=MPCCSHRRCREDPGTSESQEMDPVAFDDVAVNFTQEEWALLDISQRKLYKEVMLETFRNLTSVGKSWKDQNIEYEYQNPRRNFRSLIEKKVNEIKDDSHCGETFTQVPDDRLNFQEKKASPEIKSCDSFVCGEVGLGNSSFNMNIRGDIGHKAYEYQEYGPKPCKCQQPKKAFRYHPSFRTPQRDHTGEKPYACKECGKTFISHSSIQRHVVMHSGDGPYKCKFCGKAFHCLSLYLIHERIHTGEKPYECKQCGKSFSYSATLRIHERTHTGEKPYECQQCGKAFHSPRCYRRHERIHTGEKAYQCKECGKAFTCPQYVRIHERTHSRKKPYECTQCGKALSSLTSFQTHIRMHSG [...]
+chr4-04	SwissProt	protein_match	266118	266231	64.000000	-	.	Target=Q5REI6.1 298 337 +;percentID=48;Gap=M14 D1 M9 I1 M8 I2 M6 ;sequence=MDSVAFKDVSVSFSQEEWALLAPSQKKLYRDVMQETFKNLASIGEKWEDPNVEDQHRNQGRNLRSHMGERLCEGKEGSQCAETFSPNLSVTKKTAGVKPYECTICGKVFMRLSSLTRHMRSHTGYELFEKPYKCKECGKAFSYLKSFQRHERSHTGEKPYKCKQCGKTFIYHQPFQRHEQTHIGEKPYECKQCGKALSCSSSLRVHERIHTGEKPYECKQCGKAFSCSSSIRVHERTHTGEKPYACKECGKAFISHTSVLTHMITHNGDRPYKCKECGKAFIFPSFLRVHERIHTGEKPYTCKQCGKAFRCSTSIQIHERIHTGEKPYKCKECGKSFSARPAFRVHVRVHTGEKPYK [...]
+chr4-04	SwissProt	protein_match	266118	266225	74.000000	-	.	Target=Q96BR6.2 250 287 +;percentID=46;Gap=M11 D1 M10 I1 M8 I2 M6 ;sequence=MVSGLRLASRSGEEGWLKPAVARLGPPRHRLRNLRTESPWRSRGSVLFCSGPGRAGRAAEPLHPVCTCGRHFRRPEPCREPLASPIQDSVAFEDVAVNFTQEEWALLDSSQKNLYREVMQETCRNLASVGSQWKDQNIEDHFEKPGKDIRNHIVQRLCESKEDGQYGEVVSQIPNLDLNENISTGLKPCECSICGKVFVRHSLLNRHILAHSGYKPYGEKQYKCEQCGKFFVSVPGVRRHMIMHSGNPAYKCTICGKAFYFLNSVERHQRTHTGEKPYKCKQCGKAFTVSGSCLIHERTHTGEKPYECKECGKTFRFSCSFKTHERTHTGERPYKCTKCDKAFSCSTSLRYHGSIH [...]
+chr4-04	SwissProt	protein_match	266121	266177	49.000000	-	.	Target=Q15935.2 153 170 +;percentID=47;Gap=M4 D1 M14 ;sequence=MDCVIFEEVAVNFTPEEWALLDHAQRSLYRDVMLETCRNLASLDCYIYVRTSGSSSQRDVFGNGISNDEEIVKFTGSDSWSIFGENWRFDNTGDQHQIPQRHLRSQLGRLCESNEGHQCGETLSQTANLLVHKSYPTEAKPSECTKCGKAFENRQRSHTGQRPCKECGQACSCLSCQSPPMKTQTVEKPCNCQDSRTASVTYVKSLSSKKSYECQKCGKAFICPSSFRGHVNSHHGQKTHACKVCGKTFMYYSYLTRHVRTHTGEKPYECKECGKAFSCPSYFREHVRTHTGEKPYECKHCGKSFSCYSSFRDHVRTHTGEKPCQCKHCGKAFTCYSSLREHGRTHSGEKPYECKECGKAFRYPSSLRA [...]
+chr4-04	SwissProt	protein_match	266136	266162	40.000000	-	.	Target=Q13106.3 60 68 +;percentID=66;sequence=MAAATLRTPTQGTVTFEDVAVHFSWEEWGLLDEAQRCLYRDVMLENLALLTSLDVHHQKQHLGEKHFRSNVGRALFVKTCTFHVSGEPSTCREVGKDFLAKLGFLHQQAAHTGEQSNSKSDGGAISHRGKTHYNCGEHTKAFSGKHTLVQQQRTLTTERCYICSECGKSFSKSYSLNDHWRLHTGEKPYECRECGKSFRQSSSLIQHRRVHTAVRPHECDECGKLFSNKSNLIKHRRVHTGERPYECSECGKSFSQRSALLQHRGVHTGERPYECSECGKFFTYHSSLIKHQKVHSGSRPYECSECGKSFSQNSSLIEHHRVHTGERPYKCSECGKSFSQRSALLQHRGVHTGERPYECSECGKFFPYSSSLRKHQRVHTGSRPYE [...]
+chr4-04	SwissProt	protein_match	266145	266231	58.000000	-	.	Target=Q86XN6.2 716 744 +;percentID=48;sequence=MAFSQGLLTFRDVAIEFSQEEWKCLDPAQRTLYRDVMLENYRNLVSLDISSKCTMKEFLSTAQGNREVFHAGTLQIHESHHNGDFCYQDVDKDIHDYEFQWQEDERNGHEAPMTKIKKLTGSTERYDQSHARNKPIKDQLGSSFHSHLPEMHIFQTEEKIDNQVVKSIHDASLVSTAQRISCRPKTHISNNHGNNFWNSSLLTQKQEVHMREKSFQCNESGKAFNYSSLLRKHQIIHLADKYKCDVCGKLFNQKRNLACHRRCHTGENPYKCNECGKTFSQTSSLTCHRRLHTGEKPYKCEECDKAFHFKSILERHRIIHTEEKPYKCNECGKTFRQKSILTRHHRLHTGEKPYKCNECGKTFSHKSSLTCHHRLHTGEKPYKC [...]
+chr4-04	SwissProt	protein_match	266304	266423	110.000000	-	.	Target=Q8IW36.3 86 125 +;percentID=52;sequence=MGLLAFRDVALEFSPEEWECLDPAQRSLYRDVMLENYRNLISLGEDSFNMQFLFHSLAMSKPELIICLEARKEPWNVNTEKTARHSVLSSYLTEDILPEQGLQVSFQKVMLRRYERCCLEKLRLRNDWEIPCEDVLASPLPSAMILSFLRPPQKQKHVKPTEPVQSSTIELL
+chr4-04	SwissProt	protein_match	266304	266423	110.000000	-	.	Target=Q8IW36-2.3 86 125 +;percentID=52;sequence=MGLLAFRDVALEFSPEEWECLDPAQRSLYRDVMLENYRNLISLGEDSFNMQFLFHSLAMSKPELIICLEARKEPWNVNTEKTARHSVLSSYLTEDILPEQGLQVSFQKVMLRRYERCCLEKLRLRNDWEIVAM
+chr4-04	SwissProt	protein_match	269834	269881	40.000000	-	.	Target=Q8WTR7.1 252 267 +;percentID=43;sequence=MAEEFVTLKDVGMDFTLGDWEQLGLEQGDTFWDTALDNCQDLFLLDPPRPNLTSHPDGSEDLEPLAGGSPEATSPDVTETKNSPLMEDFFEEGFSQEIIEMLSKDGFWNSNFGEACIEDTWLDSLLGDPESLLRSDIATNGESPTECKSHELKRGLSPVSTVSTGEDSMVHNVSEKTLTPAKSKEYRGEFFSYSDHSQQDSVQEGEKPYQCSECGKSFSGSYRLTQHWITHTREKPTVHQECEQGFDRNASLSVYPKTHTGYKFYVCNEYGTTFSQSTYLWHQKTHTGEKPCKSQDSDHPPSHDTQPGEHQKTHTDSKSYNCNECGKAFTRIFHLTRHQKIHTRKRYECSKCQATFNLRKHLIQHQKTHAAKTTSECQECGKIF [...]
+chr4-04	SwissProt	protein_match	269888	269941	42.000000	+	.	Target=O75437.3 173 190 +;percentID=55
+chr4-04	SwissProt	protein_match	269888	269941	42.000000	+	.	Target=O75437-2.3 173 190 +;percentID=55
+chr4-04	SwissProt	protein_match	270080	270118	42.000000	-	.	Target=P10751.2 61 73 +;percentID=61;sequence=MSPENLSDCNNSVKDFDQHPELTIRQCVHREKPYKQEECDDSACDQHLRVHKGGMPYECKDCGKAFKYRSVLYQHRIIHTAARPYKCKECGKAFKRSRNLAQHQVTHKREKPHKCEECGRAFSALSVLTQHRITHTGEKPFKCKECGRAFKYNSTLTQHEVIHTEAKPYRCQECGKAFKRSHTLSQHQVIHKGEKPHKCDECGRAFSKHSSLTQHQVIHTGEKPYQCRECGKAFRYQSTLTRHHIVHTGAKPYKCPECDKAFNNSSTLSRHQIIHTGEKPYKCQECGRAFYCSSFLIQHMKIHFEEMPYRCRECGKPFRLSSQLIRHQRIHTGEEPYICRECGKTFKYQSNLTRHQILHTGAKPYKCPECGKAFNNSSTLTRHQII [...]
+chr4-04	SwissProt	protein_match	273594	273620	42.000000	-	.	Target=A2VDP4.1 126 134 +;percentID=88
+chr4-04	SwissProt	protein_match	273707	273730	40.000000	-	.	Target=P52736.2 408 415 +;percentID=75;sequence=MAFRDVAVDFTQDEWRLLSPAQRTLYREVMLENYSNLVSLGISFSKPELITQLEQGKETWREEKKCSPATCPADPEPELYLDPFCPPGFSSQKFPMQHVLCNHPPWIFTCLCAEGNIQPGDPGPGDQEKQQQASEGRPWSDQAEGPEGEGAMPLFGRTKKRTLGAFSRPPQRQPVSSRNGLRGVELEASPAQSGNPEETDKLLKRIEVLGFGTVNCGECGLSFSKMTNLLSHQRIHSGEKPYVCGVCEKGFSLKKSLARHQKAHSGEKPIVCRECGRGFNRKSTLIIHERTHSGEKPYMCSECGRGFSQKSNLIIHQRTHSGEKPYVCRECGKGFSQKSAVVRHQRTHLEEKTIVCSDCGLGFSDRSNLISHQRTHSGEKPYAC [...]
+chr4-04	SwissProt	protein_match	273774	273815	40.000000	+	.	Target=Q8R2V3.2 299 312 +;percentID=57;sequence=MPPGRWHAARSAQVSREQGCLRMVKEEEEDGYISMQTARPQTLNRPGQELFRQLFRQLRYHESSGPLETLSRLQELCRWWMRPDVLSKAQMLELLVLEQFLSILPGELRTWVQLHCPESGAEVVALLEELQRDLDGTPLKDPCLTQNPDVHWIGTSALQPAQIWSPASHLKNSSALEDHLETSHGIGICDVLAEQTDSPAVSVPDYFQLEEGIEYQEALTFQDVEVTFSQEEWGCLNSAQRNLYRDVILENYGNVVSVVGSSPKPALISWLEARKPWGVNICTVQLKRDADAAPEGGKLQIKPNKFILKQKPSEYIEACVKTSVSPETSVSEETGLKESFKQKSRLQTSCGDSIQMKEMKEGADISQRTGRESEVLRNNDILEL [...]
+chr4-04	SwissProt	protein_match	273795	273863	44.000000	+	.	Target=Q2VY69.1 408 431 +;percentID=41;Gap=M12 I1 M11 
+chr4-04	SwissProt	protein_match	273869	273943	55.000000	+	.	Target=Q8N8J6-2.2 135 159 +;percentID=48
+chr4-04	SwissProt	protein_match	273869	273943	55.000000	+	.	Target=Q8N8J6.2 124 148 +;percentID=48
+chr4-04	SwissProt	protein_match	273869	273943	55.000000	+	.	Target=Q8N8J6-3.2 135 159 +;percentID=48
+chr4-04	SwissProt	protein_match	273890	273943	51.000000	+	.	Target=Q5R4K8.2 130 147 +;percentID=55;sequence=MQAQESLTLEDVAVDFTWEEWQFLSPAQKDLYRDVMLENYSNLVAVGFQASKQDALSKLERGEETCTTEDEIYSRICFEIRKIDDPLQHHLQNRSIQKSVKQCHEQNMFGNIVNQNKGHFLLKQDRDTFDLHEKPLKSILSFENQKRSSGLKNSAEFNGDGKSLFHANHKQFYTEMKFPATAKPINKSQFIKQQRTHNIENAHVCSECGKAFLKLSQFIDHQRVHNGEKPHVCSMCGKAFSRKSRLMDHQRTHTELKHYECTECDKTFLKKSQLNIHQKTHMGEKPYTCSECGKAFIKKCRLIYHQRTHTGEKPHGCSVCGKAFSTKFSLTTHQKTHTGEKPYICSECGKGFIEKRRLIAHHRTHTGEKPFICNKCGKGFTLKN [...]
+chr4-04	SwissProt	protein_match	278885	278926	40.000000	-	.	Target=Q5HYK9.2 253 266 +;percentID=57;sequence=MPSARGKSKSKAPITFGDLAIYFSQEEWEWLSPIQKDLYEDVMLENYRNLVSLGLSFRRPNVITLLEKGKAPWMVEPVRRRRAPDSGSKCETKKLPPNQCNKSGQSICQKLVSAQQKAPTRKSGCNKNSVLVKPKKGHSGKKPLKCNDCGKTFSRSFSLKLHQNIHTGEKPFECSNCRKAFRQISSILLHQRIHSGKKSHECNKCGESFNQRTTLILHMRIHDGKEILDCGKALSQCQSFNIHQKIHVVGNVCQCRKCGKAFNQMSSLLLHKKIHNGKKTHKYNKCGRGFKKKSVFVVHKRIHAGEKIPENAKALSQSLQQRSHHLENPFKCRKCGKLFNRISPLMLHQRIHTSEKPYKCDKCDKFFRRLSTLILHLRIHNGEK [...]
+chr4-04	SwissProt	protein_match	278952	278990	41.000000	+	.	Target=Q3KP31.1 67 79 +;percentID=46
+chr4-04	SwissProt	protein_match	279079	279111	48.000000	-	.	Target=P17024.2 176 186 +;percentID=72;sequence=MMFQDSVAFEDVAVSFTQEEWALLDPSQKNLYRDVMQETFKNLTSVGKTWKVQNIEDEYKNPRRNLSLMREKLCESKESHHCGESFNQIADDMLNRKTLPGITPCESSVCGEVGTGHSSLNTHIRADTGHKSSEYQEYGENPYRNKECKKAFSYLDSFQSHDKACTKEKPYDGKECTETFISHSCIQRHRVMHSGDGPYKCKFCGKAFYFLNLCLIHERIHTGVKPYKCKQCGKAFTRSTTLPVHERTHTGVNADECKECGNAFSFPSEIRRHKRSHTGEKPYECKQCGKVFISFSSIQYHKMTHTGEKPYECKQCGKAFRCGSHLQKHGRTHTGEKPYECRQCGKAFRCTSDLQRHEKTHTEDKPYGCKQCGKGFRCASQLQI [...]
+chr4-04	SwissProt	protein_match	279127	279159	42.000000	+	.	Target=Q9Y2L8.1 173 183 +;percentID=81
+chr4-04	SwissProt	protein_match	279127	279159	42.000000	+	.	Target=A2T7D2.1 173 183 +;percentID=81
+chr4-04	SwissProt	protein_match	279213	279242	42.000000	-	.	Target=Q8NC26.1 299 308 +;percentID=60;sequence=MSQDSVTFADVAVNFTKEEWTLLDPAQRNLYRDVMLENSRNLAFIDWATPCKTKDATPQPDILPKRTFPEANRVCLTSISSQHSTLREDWRCPKTEEPHRQGVNNVKPPAVAPEKDESPVSICEDHEMRNHSKPTCRLVPSQGDSIRQCILTRDSSIFKYNPVLNDSQKTHENNEDDGVLGWNIQWVPCGRKTELKSSTWTGSQNTVHHIRDEIDTGANRHQRNPFGKAFREDGSLRAHNTHGREKMYDFTQCENTSRNNSIHAMQMQLYTAETNKKDCQTGATSANAPNSGSHKSHCTGEKTHKCPECGRAFFYQSFLMRHMKIHTGEKPYECGKCGKAFRYSLHLNKHLRKHVVQKKPYECEECGKVIRESSKYTHIRSHTG [...]
+chr4-04	SwissProt	protein_match	279251	279316	40.000000	-	.	Target=Q9NZV7.1 396 415 +;percentID=40;Gap=M18 D2 M2 ;sequence=MYQPEDDNNSDVTSDDDMTRNRRESSPPHSVHSFSGDRDWDRRGRSRDMEPRDRWSHTRNPRSRMPPRDLSLPVVAKTSFEMDREDDRDSRAYESRSQDAESYQNVVDLAEDRKPHNTIQDNMENYRKLLSLGFLAQDSVPAEKRNTEMLDNLPSAGSQFPDFKHLGTFLVFEELVTFEDVLVDFSPEELSSLSAAQRNLYREVMLENYRNLVSLGHQFSKPDIISRLEEEESYAMETDSRHTVICQGESHDDPLEPHQGNQEKLLTPITMNDPKTLTPERSYGSDEFERSSNLSKQSKDPLGKDPQEGTAPGICTSPQSASQENKHNRCEFCKRTFSTQVALRRHERIHTGKKPYECKQCAEAFYLMP [...]
+chr4-04	SwissProt	protein_match	279303	279395	40.000000	+	.	Target=Q9HCX3.1 247 278 +;percentID=40;Gap=M18 I1 M13 ;sequence=MAAAVLMDRVQSCVTFEDVFVYFSREEWELLEEAQRFLYRDVMLENFALVATLGFWCEAEHEAPSEQSVSVEGVSQVRTAESGLFQKAHPCEMCDPLLKDILHLAEHQGSHLTQKLCTRGLCRRRFSFSANFYQHQKQHNGENCFRGDDGGASFVKSCTVHMLGRSFTCREEGMDLPDSSGLFQHQTTYNRVSPCRRTECMESFPHSSSLRQHQGDYDGQMLFSCGDEGKAFLDTFTLLDSQMTHAEVRPFRCLPCGNVFKEKSALINHRKIHSGEISHVCKECGKAFIHLHHLKMHQKFHTGKRHYTCSECGKAFSRKDTLAQHQRVHTGERPYDCSECGKAYSRSSHLVQHQRIHTGERPYKCNEC [...]
+chr4-04	SwissProt	protein_match	279413	279499	40.000000	-	.	Target=P17040-2.3 149 180 +;percentID=36;Gap=M15 I4 M7 D1 M6 
+chr4-04	SwissProt	protein_match	279433	279516	40.000000	-	.	Target=Q16587-4.2 76 103 +;percentID=28
+chr4-04	SwissProt	protein_match	279433	279516	40.000000	-	.	Target=Q16587-2.2 77 104 +;percentID=28
+chr4-04	SwissProt	protein_match	279476	279508	40.000000	-	.	Target=P10078-2.3 261 271 +;percentID=72
+chr4-04	SwissProt	protein_match	279476	279508	40.000000	-	.	Target=P10078.3 261 271 +;percentID=72
+chr4-04	SwissProt	protein_match	279769	279831	40.000000	-	.	Target=Q8N972.1 309 329 +;percentID=42
+chr4-04	SwissProt	protein_match	279801	279875	43.000000	-	.	Target=P18751.1 235 261 +;percentID=42;Gap=M20 I3 M2 D1 M2 
+chr4-04	SwissProt	protein_match	282971	283033	42.000000	-	.	Target=Q8IZ26.2 101 121 +;percentID=42
+chr4-04	SwissProt	protein_match	283014	283082	43.000000	+	.	Target=Q8NDP4.1 126 150 +;percentID=48;Gap=M11 I2 M12 
+chr4-04	SwissProt	protein_match	283060	283107	40.000000	+	.	Target=Q9Y2H8.1 159 174 +;percentID=50
+chr4-04	SwissProt	protein_match	283117	283167	46.000000	+	.	Target=Q5REN4.1 173 189 +;percentID=58
+chr4-04	SwissProt	protein_match	283117	283167	46.000000	+	.	Target=Q8NDW4.1 174 190 +;percentID=58
+chr4-04	SwissProt	protein_match	288271	288321	40.000000	-	.	Target=Q8TB69.1 166 182 +;percentID=47
+chr4-04	SwissProt	protein_match	288792	288824	41.000000	-	.	Target=P17097.1 73 83 +;percentID=72
+chr4-04	SwissProt	protein_match	288792	288824	41.000000	-	.	Target=Q5RBX0.1 73 83 +;percentID=72
+chr4-04	SwissProt	protein_match	288817	288849	40.000000	+	.	Target=Q96RE9.1 225 235 +;percentID=63
+chr4-04	SwissProt	protein_match	288817	288849	40.000000	+	.	Target=Q96RE9-3.1 241 251 +;percentID=63
+chr4-04	SwissProt	protein_match	288817	288849	40.000000	+	.	Target=Q96RE9-2.1 240 250 +;percentID=63
+chr4-04	SwissProt	protein_match	288844	288876	41.000000	+	.	Target=Q60585.2 134 144 +;percentID=63;sequence=MAHSTVMFRDVAVGFSQEEWECLSAYERDLYRDVMLENYSHLVSLAGCSISKPDVITLLEQGKEPWMIVRAEKRRWSRDLESRYSSNGLLPEKNTYEINLSPWEIMGRIQRRGPEDSLLGKDFEYKIYEEQENSHRVYFRHVIKTTSGKRPRYRKRTPVSLYQKTPNGEKPYECGECGKAFKVRQQLTFHQRIHTGEKPYECKECGKAFRQCAHLSRHQRIHASDKLYECKKCAKIFTCSSDLRGHQRSHVGEKPYDCKECGKAFRVRGQLMLHQRIHTGEKPYACTECGKSFRQVAHLTRHQRLNSGSSRHECKECGRAFLCSTGLRLHHKLHTGEKPYDCKECGKAFRVRQQLTLHERIHTGEKPFDCKECGKTFSRGYHLT [...]
+chr4-04	SwissProt	protein_match	289105	289323	108.000000	-	.	Target=A6NP11.3 44 116 +;percentID=40;Gap=M44 I1 M4 I1 M9 D1 M3 D1 M11 
+chr4-04	SwissProt	protein_match	289105	289323	109.000000	-	.	Target=Q8IYB9.1 44 117 +;percentID=46;Gap=M38 I1 M10 I1 M9 D1 M3 D1 M5 I1 M6 ;sequence=MELVTFRDVAIEFSPEEWKCLDPAQQNLYRDVMLENYRNLVSLGFVISNPDLVTCLEQIKEPCNLKIHETAAKPPAICSPFSQDLSPVQGIEDSFHKLILKRYEKCGHENLQLRKGCKRVNECKVQKGVNNGVYQCLSTTQSKIFQCNTCVKVFSKFSNSNKHKIRHTGEKPFKCTECGRSFYMSHLTQHTGIHAGEKPYKCEKCGKAFNRSTSLSKHKRIHTGEKPYTCEECGKAFRRSTVLNEHKKIHTGEKPYKCEECGKAFTRSTTLNEHKKIHTGEKPYKCKECGKAFRWSTSMNEHKNIHTGEKPYKCKECGKAFRQSRSLNEHKNIHTGEKPYTCEK [...]
+chr4-04	SwissProt	protein_match	289195	289251	41.000000	+	.	Target=Q0VAW7.1 98 116 +;percentID=42
+chr4-04	SwissProt	protein_match	289195	289251	41.000000	+	.	Target=Q0VAW7-2.1 92 110 +;percentID=42
+chr4-04	SwissProt	protein_match	289222	289287	42.000000	-	.	Target=Q8WV37-2.1 2 24 +;percentID=43;Gap=M20 I1 M2 ;sequence=MLEQRREPWSGESEVKIAKNSDGRECIKGVNTGSSYALGSNAEDKPIKKQLGVSFHLHLSELELFPDERVINGCNQVENFINHSSSVSCLQEMSSSVKTPIFNRNDFDDSSFLPQEQKVHLREKPYECNEHSKVFRVSSSLTKHQVIHTVEKPYKCNSCGKVFSRNSHLAEHCRIHTGEKPYKCNVCGKVFSYNSNFARHQRIHTREKPYECNECGKVFSNNSYLARHQRIHAEEKPYKCNECGKGFSHKSSLANHWRIYTGEKPYKCDECGKAFYRIALLVRHQKIHTGEKPYKCNECGKVFIQNSHLAQHWRIHTGEKPYKCNECGKVFNQLSNLARHRRIHTGEKPYKCNECGKAFSEYSGLSAHLV [...]
+chr4-04	SwissProt	protein_match	289222	289323	96.000000	-	.	Target=A6NNF4-2.3 44 77 +;percentID=52;sequence=MGLLTFRDVAIEFSLEEWQCLDTAQKNLYRNVMLENYRNLAFLGIAVSKPDLIICLEKEKEPWNMKRDEMVDEPPGR
+chr4-04	SwissProt	protein_match	289225	289323	91.000000	-	.	Target=A6NNF4.3 44 76 +;percentID=51
+chr4-04	SwissProt	protein_match	289225	289323	97.000000	-	.	Target=Q05481.1 53 85 +;percentID=54
+chr4-04	SwissProt	protein_match	289225	289323	97.000000	-	.	Target=O75437.3 53 85 +;percentID=54
+chr4-04	SwissProt	protein_match	289225	289323	97.000000	-	.	Target=O75437-2.3 53 85 +;percentID=54
+chr4-04	SwissProt	protein_match	289225	289323	103.000000	-	.	Target=A8MTY0.2 44 76 +;percentID=57
+chr4-04	SwissProt	protein_match	289228	289284	43.000000	-	.	Target=Q09FC8-4.2 3 21 +;percentID=42
+chr4-04	SwissProt	protein_match	289228	289323	63.000000	-	.	Target=Q6J6I6.1 46 77 +;percentID=43
+chr4-04	SwissProt	protein_match	289228	289323	77.000000	-	.	Target=Q03923.3 44 75 +;percentID=43
+chr4-04	SwissProt	protein_match	289228	289323	79.000000	-	.	Target=O14628.2 44 75 +;percentID=46
+chr4-04	SwissProt	protein_match	289228	289323	79.000000	-	.	Target=O14628-5.2 44 75 +;percentID=46
+chr4-04	SwissProt	protein_match	289228	289323	79.000000	-	.	Target=O14628-6.2 48 79 +;percentID=46
+chr4-04	SwissProt	protein_match	289228	289323	79.000000	-	.	Target=O14628-4.2 44 75 +;percentID=46
+chr4-04	SwissProt	protein_match	289228	289323	79.000000	-	.	Target=O14628-7.2 48 79 +;percentID=46
+chr4-04	SwissProt	protein_match	289228	289347	82.000000	-	.	Target=Q96H40.3 39 75 +;percentID=45;Gap=M5 D3 M32 
+chr4-04	SwissProt	protein_match	289228	289323	82.000000	-	.	Target=O43345.1 44 75 +;percentID=46
+chr4-04	SwissProt	protein_match	289228	289323	85.000000	-	.	Target=Q9H8G1.2 76 107 +;percentID=50
+chr4-04	SwissProt	protein_match	289228	289323	85.000000	-	.	Target=A6NN14.3 53 84 +;percentID=50
+chr4-04	SwissProt	protein_match	289228	289323	85.000000	-	.	Target=O75346.2 44 75 +;percentID=50
+chr4-04	SwissProt	protein_match	289228	289323	89.000000	-	.	Target=A6NF79.3 56 87 +;percentID=53
+chr4-04	SwissProt	protein_match	289228	289323	89.000000	-	.	Target=A6NKZ1.3 56 87 +;percentID=53
+chr4-04	SwissProt	protein_match	289228	289323	90.000000	-	.	Target=Q86V71.2 44 75 +;percentID=53
+chr4-04	SwissProt	protein_match	289228	289323	91.000000	-	.	Target=Q14593-2.3 12 43 +;percentID=56
+chr4-04	SwissProt	protein_match	289228	289323	91.000000	-	.	Target=Q14593.3 77 108 +;percentID=56
+chr4-04	SwissProt	protein_match	289228	289323	92.000000	-	.	Target=A6NK75.3 12 43 +;percentID=56
+chr4-04	SwissProt	protein_match	289228	289323	92.000000	-	.	Target=Q8N7Q3.2 12 43 +;percentID=53
+chr4-04	SwissProt	protein_match	289228	289323	92.000000	-	.	Target=P17038-2.4 38 70 +;percentID=54;Gap=M21 I1 M11 
+chr4-04	SwissProt	protein_match	289228	289323	92.000000	-	.	Target=P17038.4 44 76 +;percentID=54;Gap=M21 I1 M11 
+chr4-04	SwissProt	protein_match	289228	289323	95.000000	-	.	Target=P0CB33.1 56 87 +;percentID=53
+chr4-04	SwissProt	protein_match	289228	289323	96.000000	-	.	Target=Q9P255.2 12 43 +;percentID=59
+chr4-04	SwissProt	protein_match	289228	289347	96.000000	-	.	Target=Q03938.2 39 75 +;percentID=47;Gap=M5 D3 M32 
+chr4-04	SwissProt	protein_match	289228	289323	96.000000	-	.	Target=A6NK21.3 44 75 +;percentID=59
+chr4-04	SwissProt	protein_match	289228	289323	97.000000	-	.	Target=Q9Y2Q1.1 44 75 +;percentID=59
+chr4-04	SwissProt	protein_match	289228	289323	99.000000	-	.	Target=Q03936.2 44 75 +;percentID=56
+chr4-04	SwissProt	protein_match	289228	289323	99.000000	-	.	Target=Q8IYN0.1 76 107 +;percentID=56
+chr4-04	SwissProt	protein_match	289228	289323	101.000000	-	.	Target=O95780.1 44 75 +;percentID=56
+chr4-04	SwissProt	protein_match	289228	289323	102.000000	-	.	Target=Q6ZMV8.1 44 75 +;percentID=56
+chr4-04	SwissProt	protein_match	289228	289323	103.000000	-	.	Target=Q14586.2 44 75 +;percentID=59
+chr4-04	SwissProt	protein_match	289228	289323	104.000000	-	.	Target=Q8IYX0.1 56 87 +;percentID=56
+chr4-04	SwissProt	protein_match	289228	289323	105.000000	-	.	Target=Q7Z2F6.1 44 75 +;percentID=62;sequence=MGLLTFRDVAIEFSREEWEHLDSDQKLLYGDVMLENYGNLVSLGLAVSKPDLITFLEQRKEPWNVKSAETVAIQPDIFSHDTQGLLRKKLIEASFQKVILDGYGSCGPQNLNLRKEWESEGKIILW
+chr4-04	SwissProt	protein_match	289228	289323	110.000000	-	.	Target=A8MUV8.3 44 75 +;percentID=62;sequence=MRVLTFRDVAVEFSPEEWECLDSAQQRLYRDVMLENYGNLFSLGLAIFKPDLITYLEQRKEPWNARRQKTVAKHPAGSLHFTAEILLEHDINDSFQKVILRKSGSCDLNTLRLKKDYQRVGNCKGQKSSYNGIHQCLSATRSKTCQYNKCGKAFGLCSIFTEHKKIFSREKCYKCEECGKDCRLSDFTIQKRIHTADRSYKCEECGKACKKFSNLTEHNRVHTGKKPYKCEECGKTFTCSSALTKHKRNHTGDRPYKCEECHKAFRCCSDLTKHKRIHTGEKPYKCKECHKAFRCCSDLTKHKRIHTGEKPYKCNECGKAFMWISALSQHNRIHTGEKPYICEECGKAFTYSSTLISHKRIHMELRPYKCEECGKTFKWFSDLTN [...]
+chr4-04	SwissProt	protein_match	289228	289323	124.000000	-	.	Target=Q3SXZ3-2.1 12 43 +;percentID=75
+chr4-04	SwissProt	protein_match	289228	289323	124.000000	-	.	Target=Q3SXZ3.1 44 75 +;percentID=75
+chr4-04	SwissProt	protein_match	289228	289323	125.000000	-	.	Target=Q15928.1 44 75 +;percentID=78
+chr4-04	SwissProt	protein_match	289231	289320	70.000000	-	.	Target=A8MUP4.2 13 41 +;percentID=46;Gap=M22 D1 M7 
+chr4-04	SwissProt	protein_match	289231	289320	74.000000	-	.	Target=Q8IW36-3.3 57 85 +;percentID=50;Gap=M26 D1 M3 ;sequence=MGLLAFRDVALEFSPEEWECLDPAQRSLYRDVMLENYRNLISLGEDSFNMQFLFHSLAMSKPELIICLEARKEPWNVNTEKTARHSVM
+chr4-04	SwissProt	protein_match	289231	289320	74.000000	-	.	Target=Q8IW36.3 57 85 +;percentID=50;Gap=M26 D1 M3 
+chr4-04	SwissProt	protein_match	289231	289320	74.000000	-	.	Target=Q8IW36-2.3 57 85 +;percentID=50;Gap=M26 D1 M3 
+chr4-04	SwissProt	protein_match	289231	289323	77.000000	-	.	Target=Q9NSJ1.2 33 62 +;percentID=48;Gap=M23 D1 M7 
+chr4-04	SwissProt	protein_match	289234	289323	73.000000	-	.	Target=Q68DY1.2 44 73 +;percentID=43
+chr4-04	SwissProt	protein_match	289237	289323	78.000000	-	.	Target=Q6ZN08.2 90 118 +;percentID=48
+chr4-04	SwissProt	protein_match	289237	289323	79.000000	-	.	Target=O75373.2 44 72 +;percentID=51
+chr4-04	SwissProt	protein_match	289237	289323	83.000000	-	.	Target=P35789-2.4 44 72 +;percentID=51
+chr4-04	SwissProt	protein_match	289237	289323	83.000000	-	.	Target=P35789.4 44 72 +;percentID=51
+chr4-04	SwissProt	protein_match	289237	289323	83.000000	-	.	Target=P35789-3.4 44 72 +;percentID=51
+chr4-04	SwissProt	protein_match	289243	289341	70.000000	-	.	Target=Q96SK3.3 41 73 +;percentID=42;sequence=MSYGSITFGDVAIDFSHQEWEYLSLVQKTLYQEVMMENYDNLVSLAGHSVSKPDLITLLEQGKEPWMIVREETRGECTDLDSRCEIISDGKMQLYRKHSCVTLHQRIHNGQKPYECKQCQKSFSHLTELMVHQTIHTSEEPDQCEKFRKAFSHLTDLRKHQKINAREKPYECEECGKVFSYPANLAQHGKVHVEKPYECKECGEAFRTSRQLTVHHRFHYGEKPYECKECGKAFSVYGRLSRHQSIHTGEKPFECNKCGKSFRLKAGLKVHQSIHTGEKPHECKECGKAFRQFSHLVGHKRIHTGEKPYECKECGKGFTCRYQLTMHQRIYSGEKHYECKENGEAFSSGHQLTAPHTFESVEKPYKCEECGKAFSVHGRLTRHQGI [...]
+chr4-04	SwissProt	protein_match	289264	289311	43.000000	-	.	Target=P17031.3 58 73 +;percentID=43;sequence=MATSFRTASCWGLLSFKDISMEFTWDEWQLLDSTQKYLYRDVILENYHNLISVGYHGTKPDLIFKLEQGEDPWIINAKISRQSCPDGWEEWYQNNQDELESIERSYACSVLGRLNLSKTHDSSRQRLYNTRGKSLTQNSAPSRSYLRKNPDKFHGYEEPYFLKHQRAHSIEKNCVCSECGKAFRCKSQLIVHLRIHTGERPYECSKCERAFSAKSNLNAHQRVHTGEKPYSCSECEKVFSFRSQLIVHQEIHTGGKPYGCSECGKAYSWKSQLLLHQRSHTGVKPYECSECGKAFSLKSPFVVHQRTHTGVKPHKCSECGKAFRSKSYLLVHIRMHTGEKPYQCSDCGKAFNMKTQLIVHQGVHTGNNPYQCGECGKAFGRKEQLT [...]
+chr4-04	SwissProt	protein_match	289264	289323	52.000000	-	.	Target=A6NFI3.1 198 217 +;percentID=50;sequence=MAALHTTPDSPAAQLERAEDGSECDPDQEEEEEEEEKGEEVQEVEEEEEEIVVEEEEEGVAEVVQDAQVEAVAEVEVEADVEEEDVKEVLAEEECPALGTQERLSRGGDAKSPVLQEKGLQASRAPATPRDEDLEEEEEEEEDEDEDDLLTAGCQELVTFEDVAVYFSLEEWERLEADQRGLYQEVMQENYGILVSLGYPIPKPDLIFRLEQGEEPWVPDSPRPEEGDIVTGVYTGAWFWTDDIEDHEEEDDEDFLAEVAEEENEPPGLWSAAYGVGDVPGTWGPDDSDSAQTPEGWGPDPGGLGVLADGSEAKPFLPGREPGANLLSPWAFPAAVAPPAGRPETTCDVCGKVFPHRSRLAKHQRYHAAVKPFGCEECGKGFVY [...]
+chr4-04	SwissProt	protein_match	289264	289323	60.000000	-	.	Target=Q969W8.1 46 65 +;percentID=55
+chr4-04	SwissProt	protein_match	289480	289509	40.000000	-	.	Target=Q5RES8.1 361 370 +;percentID=80;sequence=MKKFQRPVSFQDLTVNFTQEEWQQLDPTQRLLYRDVMLENYSNLVSVGYHVSKPDVIFKLEQGEAPWIVEEFSNQNYPEVDDALEKNKEIQDKHLTQTVFFSNKTLITERENVFGKTLNLDMNSVPSRKMPYKCNPGGNSLKTNSEVIVAKKSKENRKIPDEYSGFGKHEKSHSGMNKYRCNPMRKASNQNENLILHQNIQILKQPFDYNKCRKTFFKRAILVTQKGRQTERKPNEPCECRKTFSKRSTLVVHQRIHTGEKPYVCNDCRKTFRVKTSLTRHQRIHTGERPYECSECGKTFIDKSALIVHQKIHGGEKSYECNECGKTFFRKSALAEHFRSHTGEKPYECKECGNAFSKKSYLVVHQRTHRGEKPNECKECGKTF [...]
+chr4-04	SwissProt	protein_match	289676	289735	42.000000	+	.	Target=A8MYF4.2 385 404 +;percentID=45;sequence=MPDLLKSAPSSPTTASASERTTHTALEEHVTFEDMVVDFSQEEWRQLEPAQRALYYDVMLDAFRLLVSVGHWLPKPNITSLLEQEAEPWAVDSGVPQGMYPGEVAEISQPTDRQFPIGIRWEEWPVTRVQEEWPMWERVTLGSLHINKTYVKEKPYKCQECRKAFSHSSALTKHQRIHTGEKPYKCTQCEGTFNQIAPLIQHQRTHTGEKPYECSVCGKSFSFMSSFSQHKHQQIHTGEKPYECHECGKAFTQITPLIQHQRTHTGEKPCECSESGKAFSQSTFLTEHQRIYTGEKPYGCNECGKTFSHGSSLSQQERMHTGQKPYKCNDCSKAFSHSLSLTKHQRNHTEEKPYKCNQCGRAFSQLAPLIQHQRIHTGEKPYEC [...]
+chr4-04	SwissProt	protein_match	289681	289938	152.000000	-	.	Target=Q6P1L6.1 62 136 +;percentID=41;Gap=M42 D10 M9 D1 M24 
+chr4-04	SwissProt	protein_match	289691	289735	44.000000	+	.	Target=Q5TYW1.2 452 466 +;percentID=60;sequence=MNMSQASVSFQDVTVEFTREEWQHLGPVERTLYRDVMLENYSHLISVGYCITKPKVISKLEKGEEPWSLEDEFLNQRYPGYFKVDHIKGIREKQEKPLWQEIFISDADKTLSKEGQKVLEKPFNLEIAPELSEKISCKCDSHRMNLPVASQLIISERKYSRKKTEYMNVCEKLQLDIKHEKAHAEEKSYEHGENAKAFSYKKDQHWKFQTLEESFECDGSGQGLYDKTICITPQSFLTGEKSCKDDEFRKNFDKITLFNHMRTDTRGKCSDLNEYGTSCDKTTAVEYNKVHMAMTHYECNERGINFSRKSPLTQSQRTITGWSAFESNKCEENFSQSSAHIVHQKTQAGDKFGEHNECTDALYQKLDFTAHQRIHTEDKFYLSD [...]
+chr4-04	SwissProt	protein_match	289480	289509	40.000000	-	.	Target=Q9HCZ1.2 363 372 +;percentID=80;sequence=MKMKKFQIPVSFQDLTVNFTQEEWQQLDPAQRLLYRDVMLENYSNLVSVGYHVSKPDVIFKLEQGEEPWIVEEFSNQNYPDIDDALEKNKEIQDKHLTQTVFFSNKTLITERENVFGKTLNLGMNSVPSRKMPYKCNPGGNSLKTNSEVIVAKKSKENRKIPDGYSGFGKHEKSHLGMKKYRYNPMRKASNQNENLILHQNIQILKQPFDYNKCGKTFFKRAILITQKGRQTERKPNECNECRKTFSKRSTLIVHQRIHTGEKPYVCSDCRKTFRVKTSLTRHRRIHTGERPYECSECRKTFIDKSALIVHQKIHGGEKSYECNECGKTFFRKSALAEHFRSHTGEKPYECKECGNAFSKKSYLVVHQRTHRGEKPNECKECGK [...]
+chr4-04	SwissProt	protein_match	289691	289735	44.000000	+	.	Target=Q4V348.1 212 226 +;percentID=60;sequence=MMNLEKNFDKTTLFNHMRTDKRGKCSDLNEYGTSCDKTTAVEYNKVHMAMTHYECNERGINFSRKSPLTQSQRTITGWSAFESNKCEENFSQSSAHIVHQKTQAGDKFGEHNECTDALYQKLDFTAHQRIHTDFTAHQKFYLSDEHGKCRKSFYWKAHLIQHERPHSGEKTYQYEECAKSFCSSSHPIQHPGTYVGFKLYECNECGKAFCQNSNLSKHLRIHTKEKPCDNNGCGRSYKSPLIGHQKTDAEMELCGGSEYGKTSHLKGHQRILMGEKPYECIECGKTFSKTSHLRAHQRIHTGEKPYECVECEKTFSHKTHLSVHQRVHTGEKPYECNDCGKSFTYNSALRAHQRIHTGEKPYECSDCEKTFAHNSALRAHHRIH [...]
+chr4-04	SwissProt	protein_match	289691	289735	44.000000	+	.	Target=Q5TYW1-2.2 452 466 +;percentID=60;sequence=MNMSQASVSFQDVTVEFTREEWQHLGPVERTLYRDVMLENYSHLISVGYCITKPKVISKLEKGEEPWSLEDEFLNQRYPGYFKVDHIKGIREKQEKPLWQEIFISDADKTLSKEGQKVLEKPFNLEIAPELSEKISCKCDSHRMNLPVASQLIISERKYSRKKTEYMNVCEKLQLDIKHEKAHAEEKSYEHGENAKAFSYKKDQHWKFQTLEESFECDGSGQGLYDKTICITPQSFLTGEKSCKDDEFRKNFDKITLFNHMRTDTRGKCSDLNEYGTSCDKTTAVEYNKVHMAMTHYECNERGINFSRKSPLTQSQRTITGWSAFESNKCEENFSQSSAHIVHQKTQAGDKFGEHNECTDALYQKLDFTAHQRIHTEDKFYL [...]
+chr4-04	SwissProt	protein_match	289691	289735	40.000000	+	.	Target=Q8TF32.2 524 538 +;percentID=53
+chr4-04	SwissProt	protein_match	289681	289851	61.000000	-	.	Target=Q6P1L6-2.1 1 46 +;percentID=35;Gap=M13 D10 M9 D1 M24 
+chr4-04	SwissProt	protein_match	289264	289323	56.000000	-	.	Target=Q6PGE4.1 194 213 +;percentID=50;sequence=MAALQSAPDSPATQLEPAEDGSECDADPEEEEEEEQQEEEDEEEEEEVVVEEVATPVQEVAEVEVEANSADNGGGDDDDDGGGGDDDVEEVLAEEQTLSLGTQERHSNGGHAKAPVLQGKALQTSRVSPTTQDEDVEEEEEEEDEEHFLTQGLVTFEDVAVYFSLEEWERLGVDQRDLYREVMQENYGILVSLGYPIPKPDLIFHLEQGEEPWVEDGPHPEEGDVVTGVYTGAWFWNDDIEDHEEEDDEDFLAEVAEEENEPPGLWSAAYGVGDVPGTWGPDDSDSVQTPEGWGPNPGSLGILAEEVEAKHFLSGREPGENFLVPWAFPAVAVPIGCPETTCDVCGKVFPHRSRLAKHQRYHAAVKPFGCDECGKGFVYRSHLA [...]
+chr4-04	SwissProt	protein_match	289682	289735	44.000000	+	.	Target=P17019.3 543 558 +;percentID=55;Gap=M4 D2 M12 
+chr4-04	SwissProt	protein_match	289726	289947	162.000000	-	.	Target=Q8N823.1 21 103 +;percentID=49;Gap=M40 I2 M28 I7 M6 
+chr4-04	SwissProt	protein_match	289742	289798	46.000000	+	.	Target=P51815.2 34 52 +;percentID=47
+chr4-04	SwissProt	protein_match	289726	289947	157.000000	-	.	Target=Q8N4W9.2 21 103 +;percentID=49;Gap=M40 I2 M28 I7 M6 
+chr4-04	SwissProt	protein_match	289732	289944	230.000000	-	.	Target=Q8TB69.1 2 71 +;percentID=66;Gap=M61 D1 M9 
+chr4-04	SwissProt	protein_match	289774	289851	58.000000	-	.	Target=Q8N7Q3.2 1 27 +;percentID=55;Gap=M22 I1 M4 
+chr4-04	SwissProt	protein_match	289774	289938	135.000000	-	.	Target=Q96SK3.3 6 62 +;percentID=52;Gap=M51 I2 M4 
+chr4-04	SwissProt	protein_match	289759	289938	140.000000	-	.	Target=Q8WV14.2 29 85 +;percentID=53;Gap=M49 D3 M8 ;sequence=MGPPLAPRPAHVPGEAGPRRTRESRPGAVSFADVAVYFSPEEWECLRPAQRALYRDVMRETFGHLGALGEAGPSGRDPQSVGFSVPKPAFISWVEGEVEAWSPEAQDPDGESSAAFSRGQGQEAGSRDGNEEKERLKKCPKQKEVAHEVAVKEWWPSVACPEFCNPRQSPMNPWLKDTLTRRLPHSCPDCGRNFSYPSLLASHQRVHSGERPFSCGQCQARFSQRRYLLQHQFIHTGEKPYPCPDCGRRFRQRGSLAIHRRAHTGEKPYACSDCKSRFTYPYLLAIHQRKHTGEKPYSCPDCSLRFAYTSLLAIHRRIHTGEKPYPCPDCGRRFTYSSLLLSHRRIHSDSRPFPCVECGKGFKRKTALEA [...]
+chr4-04	SwissProt	protein_match	289774	289932	145.000000	-	.	Target=Q60585.2 8 62 +;percentID=56;Gap=M49 I2 M4 
+chr4-04	SwissProt	protein_match	289774	289938	146.000000	-	.	Target=Q8BQC8-2.1 7 62 +;percentID=53;Gap=M51 I1 M4 
+chr4-04	SwissProt	protein_match	289768	289938	138.000000	-	.	Target=Q8TC21-2.2 7 61 +;percentID=45;Gap=M43 D1 M3 D1 M9 
+chr4-04	SwissProt	protein_match	289774	289902	115.000000	-	.	Target=Q5RDX1.1 7 49 +;percentID=53;sequence=MAAPTREEWRHLDPSQRNLYRDVMLETYSHLLSVGYQVPEAEVVMLEQGKEPWALQGERPRQSCPGKKLWDHNQCRKILSYKQVSSQPQKMYPGEKPYECAEFEKIFTQKSQLKVHLKVLAGEKLYVCIECGKAFVQKPEFIIHQKTHMREKPFKCNECGKSFFQVSSLFRHQRIHTGEKLYECSQCGKGFSYNSDLSIHEKIHTGERHHECTDCGKAFTQKSTLKMHQKIHTGERSYICIECGQAFIQKTHLIAHRRIHTGEKPYECSNCGKSFISKSQLQVHQRVHTRVKPYICTEYGKVFSNNSNLITHKKVQSREKSSICTECGKAFTYRSELIIHQRIHTGEKPYACSDCGKAFTQKSALTVHQRIHTGEKSYICMKCGLA [...]
+chr4-04	SwissProt	protein_match	289774	289938	146.000000	-	.	Target=Q8BQC8.1 8 63 +;percentID=53;Gap=M51 I1 M4 
+chr4-04	SwissProt	protein_match	289774	289950	140.000000	-	.	Target=Q5RB30.1 23 81 +;percentID=49
+chr4-04	SwissProt	protein_match	289774	289947	135.000000	-	.	Target=Q02975.1 11 70 +;percentID=51;Gap=M54 I2 M4 
+chr4-04	SwissProt	protein_match	289774	289947	140.000000	-	.	Target=Q9QXT9.1 11 69 +;percentID=55;Gap=M46 D1 M7 I2 M4 
+chr4-04	SwissProt	protein_match	289774	289938	142.000000	-	.	Target=Q9NYW8.1 8 63 +;percentID=50;Gap=M51 I1 M4 
+chr4-04	SwissProt	protein_match	289774	289947	157.000000	-	.	Target=Q969W8.1 3 61 +;percentID=55;Gap=M45 D1 M8 I2 M4 
+chr4-04	SwissProt	protein_match	289774	289950	147.000000	-	.	Target=Q6ZMW2.1 4 63 +;percentID=52;Gap=M47 D1 M7 I2 M4 
+chr4-04	SwissProt	protein_match	289774	289950	150.000000	-	.	Target=A6NK53.2 4 61 +;percentID=55;Gap=M49 D1 M9 
+chr4-04	SwissProt	protein_match	289774	289965	180.000000	-	.	Target=Q9H8G1.2 25 91 +;percentID=61;Gap=M8 I1 M52 I2 M4 
+chr4-04	SwissProt	protein_match	289774	289947	157.000000	-	.	Target=Q6J6I6.1 3 61 +;percentID=55;Gap=M45 D1 M8 I2 M4 
+chr4-04	SwissProt	protein_match	289774	289938	186.000000	-	.	Target=O43345.1 4 59 +;percentID=69;Gap=M51 I1 M4 
+chr4-04	SwissProt	protein_match	289774	289965	181.000000	-	.	Target=Q96NI8.1 5 69 +;percentID=59;Gap=M52 D1 M4 I2 M7 
+chr4-04	SwissProt	protein_match	289774	289932	156.000000	-	.	Target=Q3KNS6.1 37 90 +;percentID=60;Gap=M42 D1 M6 I2 M4 
+chr4-04	SwissProt	protein_match	289774	289950	157.000000	-	.	Target=Q6P3V2.2 23 81 +;percentID=52;sequence=MPANWTSPQKSSALAPEDHGSSYEGSVSFRDVAIDFSREEWRHLDPSQRNLYRDVMLETYSHLLSVGYQVPEAEVVMLEQGKEPWALQGERPRQSCPGEKLWDHNQCRKILSYKQVSSQPQKMYPGEKAYECAKFEKIFTQKSQLKVHLKVLAGEKLYVCIECGKAFVQKPEFIIHQKTHMREKPFKCNECGKSFFQVSSLFRHQRIHTGEKLYECSQCGKGFSYNSDLSIHEKIHTGERHHECTDCGKAFTQKSTLKMHQKIHTGERSYICIECGQAFIQKTHLIAHRRIHTGEKPYECSNCGKSFISKSQLQVHQRVHTRVKPYICTEYGKVFSNNSNLVTHKKVQSREKSSICTECGKAFTYRSELIIHQRIHTGEKPYECS [...]
+chr4-04	SwissProt	protein_match	289774	289950	147.000000	-	.	Target=Q52M93.1 23 81 +;percentID=50;sequence=MPASWTSPQKSSALAPEDHGSSYEGSVSFRDVAIDFSREEWRHLDLSQRNLYRDVMLETYSHLLSVGYQVPKPEVVMLEQGKEPWALQGERPRHSCPGEKLWDHNQHRKIIGYKPASSQDQKIYSGEKSYECAEFGKSFTWKSQFKVHLKVPTGEKLYVCIECGRAFVQKPEFITHQKTHMREKPYKCNECGKSFFQVSSLFRHHRIHTGEKLYECSECGKGFPYNSDLSIHEKIHTGERHHECTDCGKAFTQKSTLKIHQKIHTGERSYICIECGQAFIQKTQLIAHRRIHSGEKPYECNNCGKSFISKSQLQVHQRVHTRVKPYICTEYGKVFSNNSNLITHEKIQSREKSSICTECGKAFTYRSELIIHQRIHTGEKPYECS [...]
+chr4-04	SwissProt	protein_match	289774	289947	189.000000	-	.	Target=Q96SE7.1 5 63 +;percentID=67;Gap=M53 I1 M5 
+chr4-04	SwissProt	protein_match	289774	289965	182.000000	-	.	Target=Q8IYN0.1 25 91 +;percentID=62;Gap=M8 I1 M52 I2 M4 
+chr4-04	SwissProt	protein_match	289774	289938	161.000000	-	.	Target=P52736.2 1 56 +;percentID=59;Gap=M42 D1 M8 I2 M4 
+chr4-04	SwissProt	protein_match	289774	289965	163.000000	-	.	Target=Q9BX82.1 5 69 +;percentID=51;Gap=M52 D1 M7 I2 M4 
+chr4-04	SwissProt	protein_match	289774	289947	203.000000	-	.	Target=Q5RER9.1 5 64 +;percentID=71;Gap=M47 I2 M11 
+chr4-04	SwissProt	protein_match	289774	289965	182.000000	-	.	Target=Q8NE65.1 25 90 +;percentID=64;Gap=M8 I1 M44 D1 M7 I2 M4 ;sequence=MDDLRYGVYPVKGASGYPGAERNLLEYSYFEKGPLTFRDVVIEFSQEEWQCLDTAQQDLYRKVMLENFRNLVFLGIDVSKPDLITCLEQGKDPWNMKRHSMVATPPESGVLKFPTIIILLSRCFFQSVNICFIYLEP
+chr4-04	SwissProt	protein_match	289774	289953	202.000000	-	.	Target=Q86XN6.2 3 64 +;percentID=69;Gap=M49 I2 M11 
+chr4-04	SwissProt	protein_match	289783	289944	143.000000	-	.	Target=Q2TAN0.1 5 57 +;percentID=53;Gap=M45 D1 M8 ;sequence=MHSLEKVTFEDVAIDFTQEEWDMMDTSKRKLYRDVMLENISHLVSLGYQISKSYIILQLEQGKELWREGRVFLQDQNPDRESALKKKHMISMHPIIRKDASTSMTMENSLILEDPFEYNDSGEDCTHSSTITQCLLTHSGKKPYVSKQCGKSLRNLLSPKPRKQIHTKGKSYQCNLCEKAYTNCFYLRRHKMTHTGERPYACHLCGKAFTQCSHLRRHEKTHTGERPYKCHQCGKAFIQSFNLRRHERTHLGQKCYECDKSGKAFSQSSGFRGNKIIHIGEKPHACLLCGKAFSLSSDLR
+chr4-04	SwissProt	protein_match	289783	289944	143.000000	-	.	Target=A8K971.2 5 57 +;percentID=53;Gap=M45 D1 M8 ;sequence=MHSLEKVTFEDVAIDFTQEEWDMMDTSKRKLYRDVMLENISHLVSLGYQISKSYIILQLEQGKELWWEGRVFLQDQNPDRESALKKKHMISMHPIIRKDTSTSMTMENSLILEDPFEYNDSGEDCTHSSTITQCLLTHSGKKPCVSKQCGKSLRNLLSPKPRKQIHTKGKSYQCNLCEKAYTNCFYLRRHKMTHTGERPYACHLCGKAFTQCSHLRRHEKTHTGERPYKCHQCGKAFIQSFNLRRHERTHLGQKCYECDKSGKAFSQSSGFRGNKIIHIGEKPPACLLCGKAFSLSSDLR
+chr4-04	SwissProt	protein_match	289783	289944	143.000000	-	.	Target=A8MVS1.1 5 57 +;percentID=53;Gap=M45 D1 M8 ;sequence=MHSLEKVTFEDVAIDFTQEEWDMMDTSKRKLYRDVMLENISHLVSLGYQISKSYIILQLEQGKELWREGRVFLQDQNPDRESALKKKHMISMHPIIRKDASTSMTMSKTLILEDPFEYNDSGEDCTHSSTITQCLLTHSRKKPYVSKQCGKSLRNLLSPKPRKQIHTKGKSYQCNLCEKAYTNCFYLRRHKMTHTGERPYACHLCGKAFTQCSHLRRHEKTHTGERPYKCHQCGKAFIQSFNLRRHERTHLGQKCYECDKSGKAFSQSSGFRGNKIIHIGEKPHACLLCGKAFSLSSDLR
+chr4-04	SwissProt	protein_match	289786	289938	134.000000	-	.	Target=Q2M3W8.1 4 54 +;percentID=49
+chr4-04	SwissProt	protein_match	289789	289941	226.000000	-	.	Target=Q8IW36.3 3 53 +;percentID=82
+chr4-04	SwissProt	protein_match	289783	289938	143.000000	-	.	Target=A8MUZ8.2 7 57 +;percentID=55;Gap=M43 D1 M8 ;sequence=MHSLKKLTFEDVAIDFTQEEWAMMDTSKRKLYRDVMLENISHLVSLGYQISKSYIILQLEQGKELWREGRVFLQDQNPNRESALKKTHMISMHPITRKDASTSMTMENSLILEDPFECNDSGEDCTRSSTITQCLLTHSGKKPYVSKQCGKSLRNLLSTEPHKQIHTKGKSYQCNLCEKAYTNCFHLRRHKMTHTGERPYACHLCRKAFTQCSHLRRHEKTHTGQRPYKCHQYGKVFIQSFNLQRHERTHLGKKCYECDKSGKAFSQSSGFRGNKIIHTGEKPHACLLCGKAFSLSSNLR
+chr4-04	SwissProt	protein_match	289789	289941	226.000000	-	.	Target=Q8IW36-2.3 3 53 +;percentID=82
+chr4-04	SwissProt	protein_match	289789	289941	226.000000	-	.	Target=Q8IW36-3.3 3 53 +;percentID=82
+chr4-04	SwissProt	protein_match	289777	289926	101.000000	-	.	Target=A2T7D2.1 222 271 +;percentID=44
+chr4-04	SwissProt	protein_match	289783	289938	131.000000	-	.	Target=A8MWA4.1 7 59 +;percentID=50;Gap=M43 I1 M9 ;sequence=MHSLKKVTFEDVAIDFTQEEWAMMDTSKRKLYRDVMLENISHLVSLVTGYQISKSYIILQLEQGKELWQEGREFLQDQNPDRESALKKTHMISMHPIIRKDAPTSMTMENSLILEDPFECNDSGEDCTHSSTIIQCLLTHSGKKPYVSKQCGKSLSNLLSPKPHKQIHTKGKSYQCNLCEKAYTNCFHLRRPKMTHTGERPYTCHLCRKAFTQCSHLRRHEKTHTGERPYKCHQCGKAFIQSFNLRRHERTHLGEKWYECDNSGKAFSQSSGFRGNKIIHTGEKPHACLLCGKAFSLSSDLR
+chr4-04	SwissProt	protein_match	289774	289953	202.000000	-	.	Target=Q86XN6-2.2 3 64 +;percentID=69;Gap=M49 I2 M11 
+chr4-04	SwissProt	protein_match	289798	289851	46.000000	-	.	Target=Q96PQ6-3.2 1 18 +;percentID=61;sequence=MLENYSNLTSLDWETPSKTKWSLLMEDIFGKETPSGVTMERAGLGEKSTEYAHLFEVFGMDPHLTQPMGRHAGKRPYHRRDYGVAFKGRPHLTQHMSMYDGRKMHECHQCQKAFTTSASLTRHRRIHTGEKPYECSDCGKAFNDPSALRSHARTHLKEKPFDCSQCGNAFRTLSALKIHMRVHTGERPYKCDQCGKAYGRSCHLIAHKRTHTGERPYECHDCGKAFQHPSHLKEHVRNHTGEKPYACTQCGKAFRWKSNFNLHKKNHMVEKTYECKECGKSFGDLVSRRKHMRIHIVKKPVECRQCGKTFRNQSILKTHMNSHTGEKPYGCDLCGKAFSASSNLTAHRKIHTQERRYECAACGKVFGDYLSRRRHMSVHLVKKRV [...]
+chr4-04	SwissProt	protein_match	289783	289938	140.000000	-	.	Target=Q6ZN79.1 7 57 +;percentID=53;Gap=M43 D1 M8 ;sequence=MHSLKKVTFEDVAIDFTQEEWAMMDTSKRKLYRDVMLENISHLVSLGYQISKSYIILQLEQGKELWREGREFLQDQNPDRESALKKKHMISMHPITRKDASTSMTMENSLILEDPFECNDSGEDCTHSSTITQRLLTHSGKKPYVSKQCGKSLRNLFSPKPHKQIHTKGKSYQCNLCEKAYTNCFRLRRHKMTHTGERPYACHLCGKAFTQCSHLRRHEKTHTGERPYKCHQCGKAFIQSFNLRRHERTHLGKKCYECDKSGKAFSQSSGFRGNKIIHTGEKPHACLLCGKAFSLSSDLR
+chr4-04	SwissProt	protein_match	289798	289947	129.000000	-	.	Target=Q92670.2 202 251 +;percentID=50
+chr4-04	SwissProt	protein_match	289798	289857	50.000000	-	.	Target=Q96N38-2.1 2 21 +;percentID=55
+chr4-04	SwissProt	protein_match	289798	289965	100.000000	-	.	Target=P10754.2 115 168 +;percentID=42;Gap=M39 D2 M15 
+chr4-04	SwissProt	protein_match	289798	289968	147.000000	-	.	Target=Q96PQ6-2.2 47 103 +;percentID=50
+chr4-04	SwissProt	protein_match	289798	289950	151.000000	-	.	Target=Q9NZL3.2 4 54 +;percentID=56
+chr4-04	SwissProt	protein_match	289798	289968	147.000000	-	.	Target=A6NK31.3 50 110 +;percentID=59;Gap=M2 I2 M52 I2 M3 
+chr4-04	SwissProt	protein_match	289798	289857	50.000000	-	.	Target=Q96N38.1 2 21 +;percentID=55
+chr4-04	SwissProt	protein_match	289798	289965	100.000000	-	.	Target=P10754-2.2 108 161 +;percentID=42;Gap=M39 D2 M15 
+chr4-04	SwissProt	protein_match	289798	289950	150.000000	-	.	Target=Q9NYT6.2 4 54 +;percentID=54;sequence=MNMFKEAVTFKDVAVAFTEEELGLLGPAQRKLYRDVMVENFRNLLSVGHPPFKQDVSPIERNEQLWIMTTATRRQGNLGEKNQSKLITVQDRESEEELSCWQIWQQIANDLTRCQDSMINNSQCHKQGDFPYQVGTELSIQISEDENYIVNKADGPNNTGNPEFPILRTQDSWRKTFLTESQRLNRDQQISIKNKLCQCKKGVDPIGWISHHDGHRVHKSEKSYRPNDYEKDNMKILTFDHNSMIHTGQKSYQCNECKKPFSDLSSFDLHQQLQSGEKSLTCVERGKGFCYSPVLPVHQKVHVGEKLKCDECGKEFSQGAHLQTHQKVHVIEKPYKCKQCGKGFSRRSALNVHCKVHTAEKPYNCEECGRAFSQASHLQDHQRLHT [...]
+chr4-04	SwissProt	protein_match	289798	289944	145.000000	-	.	Target=Q96GC6.1 12 59 +;percentID=59;Gap=M42 D1 M6 
+chr4-04	SwissProt	protein_match	289798	289947	141.000000	-	.	Target=Q9UK10.2 5 54 +;percentID=52
+chr4-04	SwissProt	protein_match	289792	289965	104.000000	-	.	Target=O95201.2 115 169 +;percentID=46;Gap=M41 D2 M9 D1 M5 
+chr4-04	SwissProt	protein_match	289798	289968	175.000000	-	.	Target=Q9NZV7.1 165 221 +;percentID=62;Gap=M2 I1 M51 D1 M3 
+chr4-04	SwissProt	protein_match	289798	289947	202.000000	-	.	Target=Q9NV72.1 5 52 +;percentID=82;Gap=M43 D2 M5 
+chr4-04	SwissProt	protein_match	289798	289947	142.000000	-	.	Target=Q9UK11.1 5 54 +;percentID=54
+chr4-04	SwissProt	protein_match	289804	289947	122.000000	-	.	Target=Q3KQV3.2 11 58 +;percentID=56
+chr4-04	SwissProt	protein_match	289804	289947	132.000000	-	.	Target=Q9UJU3.1 5 52 +;percentID=52;sequence=MTVSKEMVTFKDVAVVFTEEELGLLDSVQRKLYRDVMLENFRNLLLVAHQPFKPDLISQLEREEKLLMVETETPRDGCSGRKNQQKMESIQEVTVSYFSPKELSSRQTWQQSTGGLIRCQDFLKVFQGKNSQLQEQGNSLGQAWAGIPVQISEDKNYIFTHIGNGSNYIKSQGYPSWRAHHSWRKMYLKESHNYQCRCQQISMKNHFCKCDSVSWLSHHNDELEVHRKENYSCHDCGEDIMKVSLLNQESIQTEEKPYPCSGYRKAFSNDSSSEVHQQFHLEGKPYTYSSCGKGCNYSSLLHIHQNIEREDDIENSHLKSYQRVHTEEKPCKCGEYGENFNHCSPLNTYELIHTGEMSYRHNIYEKAFSHSLDLNSIFRVHTRDEP [...]
+chr4-04	SwissProt	protein_match	289804	289950	146.000000	-	.	Target=A0JNB1.1 19 67 +;percentID=57
+chr4-04	SwissProt	protein_match	289804	289941	127.000000	-	.	Target=Q0VAW7-2.1 1 46 +;percentID=56
+chr4-04	SwissProt	protein_match	289804	289950	156.000000	-	.	Target=Q14588.3 4 52 +;percentID=61
+chr4-04	SwissProt	protein_match	289804	289944	159.000000	-	.	Target=P10076.2 7 53 +;percentID=59
+chr4-04	SwissProt	protein_match	289804	289947	157.000000	-	.	Target=P10755.2 5 53 +;percentID=65;Gap=M44 I1 M4 
+chr4-04	SwissProt	protein_match	289780	289938	148.000000	-	.	Target=Q6ECI4-2.2 23 71 +;percentID=56;Gap=M45 D4 M4 
+chr4-04	SwissProt	protein_match	289798	289950	196.000000	-	.	Target=Q86YE8.3 4 54 +;percentID=72;sequence=MTCFQELVTFRDVAIDFSRQEWEYLDPNQRDLYRDVMLENYRNLVSLGGHSISKPVVVDLLERGKEPWMILREETQFTDLDLQCEIISYIEVPTYETDISSTQLQSIYKREKLYECKKCQKKFSSGYQLILHHRFHVIERPYECKECGKNFRSGYQLTLHQRFHTGEKPYECTECGKNFRSGYQLTVHQRFHTGEKTYECRQCGKAFIYASHIVQHERIHTGGKPYECQECGRAFSQGGHLRIHQRVHTGEKPYKCKECGKTFSRRSNLVEHGQFHTDEKPYICEKCGKAFRRGHQLTVHQRVHTGKKPYECKECGKGYTTASYFLLHQRIHKGGKPYECKECKKTFTLYRNLTRHQNIHTGEKLFECKQCGKTYTTGSKLFQHQK [...]
+chr4-04	SwissProt	protein_match	289801	289938	148.000000	-	.	Target=Q494X3.1 6 50 +;percentID=65;Gap=M40 D1 M5 
+chr4-04	SwissProt	protein_match	289804	289950	159.000000	-	.	Target=Q12901.3 4 52 +;percentID=61
+chr4-04	SwissProt	protein_match	289804	289944	159.000000	-	.	Target=Q96MR9.2 108 154 +;percentID=63
+chr4-04	SwissProt	protein_match	289804	289950	160.000000	-	.	Target=Q14590-2.3 4 52 +;percentID=61
+chr4-04	SwissProt	protein_match	289804	289947	190.000000	-	.	Target=Q9HCG1.2 5 52 +;percentID=79
+chr4-04	SwissProt	protein_match	289804	289947	137.000000	-	.	Target=Q0VAW7.1 5 52 +;percentID=58
+chr4-04	SwissProt	protein_match	289810	289851	55.000000	-	.	Target=Q86YE8-4.3 1 14 +;percentID=78;sequence=MLENYRNLVSLDLDLQCEIISYIEVPTYETDISSTQLQSIYKREKLYECKKCQKKFSSGYQLILHHRFHVIERPYECKECGKNFRSGYQLTLHQRFHTGEKPYECTECGKNFRSGYQLTVHQRFHTGEKTYECRQCGKAFIYASHIVQHERIHTGGKPYECQECGRAFSQGGHLRIHQRVHTGEKPYKCKECGKTFSRRSNLVEHGQFHTDEKPYICEKCGKAFRRGHQLTVHQRVHTGKKPYECKECGKGYTTASYFLLHQRIHKGGKPYECKECKKTFTLYRNLTRHQNIHTGEKLFECKQCGKTYTTGSKLFQHQKTHTGEKPYECKECGKAFSLYGYLKQHQKIHTGMKHFECKECKKTFTLYRNLTRHQNIHTGKKLFEC [...]
+chr4-04	SwissProt	protein_match	289807	289947	202.000000	-	.	Target=Q86XU0.1 5 51 +;percentID=80
+chr4-04	SwissProt	protein_match	289810	289938	127.000000	-	.	Target=Q8N972.1 4 46 +;percentID=53
+chr4-04	SwissProt	protein_match	289813	289926	122.000000	-	.	Target=Q0D2J5.2 8 45 +;percentID=57;sequence=MDPVACEDVAVNFTQEEWALLDISQRKLYREVMLETFRNLTSIGKKWKDQNIEYEYQNPRRNFRSLIEGNVNEIKEDSHCGETFTQVPDDRLNFQEKKASPEAKSCDNFVCGEVGIGNSSFNMNIRGDIGHKAYEYQDYAPKPYKCQQPKKAFRYHPSFRTQERNHTGEKPYACKECGKTFISHSGIRRRMVMHSGDGPYKCKFCGKAVHCLRLYLIHERTHTGEKPYECKQCVKSFSYSATHRIHERTHTGEKPYECQQCGKAFHSSSSFQAHKRTHTGGKPYECKQCGKSFSWCHSFQIHERTHTGEKPCECSKCNKAFRSYRSYLRHKRSHTGEKPYQCKECRKAFTYPSSLRRHERTHSAKKPYECKQCGKALSYKFSNTPK [...]
+chr4-04	SwissProt	protein_match	289813	289926	117.000000	-	.	Target=P10077-2.2 2 39 +;percentID=60;sequence=MDVTIDFSREEWQHLDPAQRSLYRDVVQETYSHLRSVEELQQIGDQKKTYQQIGHKSASDMVFITKTLGAESCHDYSGVRKVIHVNSYIVLPPKRPRHWDPPEDEPKHSSDLQTHDESNGLKRTKRITEYGKISSCINTEHILTGEKLPDHNQCGKVLGYKQIPCQYQKIHTGEKSYECAEFGKIFTQKSQLRVHVTSPTGEKLYVCVECGKACSQTSEFLTHQKTHTREKPYKCGDCGKSFFQVSSLFRHRRIHTGEKLYDCSHCGKGFSYNSDLRIHQKIHTGEKRHGCVDCGKAFTQKSTLRMHQKIHTGERAYVCIECGQAFIQKTHLVAHRRIHSRVRPCVSLDRAKPFSSAPNLLPRKKVQMREKSSICAECGKAFTY [...]
+chr4-04	SwissProt	protein_match	289798	289938	168.000000	-	.	Target=Q9Y6R6.1 6 51 +;percentID=70;Gap=M42 D1 M4 
+chr4-04	SwissProt	protein_match	289804	289950	159.000000	-	.	Target=Q9UK13.2 26 74 +;percentID=61;sequence=MISPSLELLHSGLCKFPEVEGKMTTFKEAVTFKDVAVVFTEEELGLLDPAQRKLYRDVMLENFRNLLSVGNQPFHQDTFHFLGKEKFWKMKTTSQREGNSGGKIQIEMETVPEAGPHEEWSCQQIWEQIASDLTRSQNSIRNSSQFFKEGDVPCQIEARLSISHVQQKPYRCNECKQSISDVSVFDLHQQSHSGEKSHTCGECGKSFCYSPALHIHQRVHMGEKCYKCDVCGKEFNQSSHLQTHQRVHTGEKPFKRGQCGKGFHSRSALNVHCKLHTGEKPYNCEECGKAFIHDSQLQEHQRIHTGEKPFKCDICGKSFRVRSRLNRHSMVHTGEKPFRCDTCGKNFRQRSALNSHSMVHIEEKPYKCEQCGKGFICRRDFCKHQ [...]
+chr4-04	SwissProt	protein_match	289813	289926	117.000000	-	.	Target=P10077.2 2 39 +;percentID=60;sequence=MDVTIDFSREEWQHLDPAQRSLYRDVVQETYSHLRSVEELQQIGDQKKTYQQIGHKSASDMVFITKTLGAESCHDYSGVRKVIHVNSYIVLPPKRPRHWDPPEDEPKHSSDLQTHDESNGLKRTKRITEYGKISSCINTEHILTGEKLPDHNQCGKVLGYKQIPCQYQKIHTGEKSYECAEFGKIFTQKSQLRVHVTSPTGEKLYVCVECGKACSQTSEFLTHQKTHTREKPYKCGDCGKSFFQVSSLFRHRRIHTGEKLYDCSHCGKGFSYNSDLRIHQKIHTGEKRHGCVDCGKAFTQKSTLRMHQKIHTGERAYVCIECGQAFIQKTHLVAHRRIHTGEKPYACDGCGKAFLSKSQLLVHQRIHSRVRPCVSLDRAKPFSSAP [...]
+chr4-04	SwissProt	protein_match	289798	289938	168.000000	-	.	Target=O75290-2.3 22 67 +;percentID=70;Gap=M42 D1 M4 ;sequence=MGRSPRKIDQFCNSSNMVHGSVTFRDVAIDFSQEEWECLQPDQRTLYRDVMLENYSHLISLGSSISKPDVITLLEQEKEPWMVVRKETSRRYPDLELKYGPEKVSPENDTSEVNLPKQISSLASKPSFTAIHIQRRIHCRICIAFGYLSLVYCSLEI
+chr4-04	SwissProt	protein_match	289810	289938	153.000000	-	.	Target=Q6P1L6-3.1 62 104 +;percentID=62;sequence=MMLPYPSALGDQYWEEILLPKNGENVETMKKLTQNHKAKGLPSNDTDCPQKKEGKAQIVVPVTFRDVTVIFTEAEWKRLSPEQRNLYKEVMLENYRNLLSLGQEIETILANIVKSHLY
+chr4-04	SwissProt	protein_match	289777	289926	101.000000	-	.	Target=Q9Y2L8.1 222 271 +;percentID=44
+chr4-04	SwissProt	protein_match	289807	289938	113.000000	-	.	Target=Q8BV42.1 9 50 +;percentID=56;Gap=M40 D2 M2 ;sequence=MAGPARFPLTFEDVAIYFSEQEWQHLEAWQKELYKQVMRTNYETLISLDNGLPKPELISWIELGRELFGSWGEKKKPDKETHCSIDDVHVHLAIEEQLLESSQRAVKSEVTCHSQLNPLESRHSFGLAVGERVDASLRHDQGISLVNAQTRCGEAVVSVVHSSSEAAQRKVLSSHRTLALPGLQRVSSWQSTQNSCPVCRENSWEKNHLVKQQKGHSKSRSYRVWKKFSRQADAKQPWSISCLGCGKSFRLKQYLVRHLDIHTRKRPPQCPKCKMCFHHERTLFSHHLKNSSSQHPTCDTSFRTDSSVDLCQQIQERPAFWREDTNVPSRQKPGPSLDCEDCCHMGSKLKGLQCGCILGEDRPHSHTEYGN [...]
+chr4-04	SwissProt	protein_match	289813	289938	130.000000	-	.	Target=Q3KP31.1 4 45 +;percentID=54
+chr4-04	SwissProt	protein_match	289813	289938	132.000000	-	.	Target=Q5REK1.1 4 45 +;percentID=57
+chr4-04	SwissProt	protein_match	289813	289938	133.000000	-	.	Target=P52737.1 4 45 +;percentID=57
+chr4-04	SwissProt	protein_match	289813	289938	133.000000	-	.	Target=Q8IYI8.1 4 45 +;percentID=57
+chr4-04	SwissProt	protein_match	289813	289950	139.000000	-	.	Target=Q8NDP4.1 15 60 +;percentID=54
+chr4-04	SwissProt	protein_match	289813	289947	154.000000	-	.	Target=Q96JL9.3 200 244 +;percentID=64;sequence=MESVTFEDVAVEFIQEWALLDSARRSLCKYRMLDQCRTLASRGTPPCKPSCVSQLGQRAEPKATERGILRATGVAWESQLKPEELPSMQDLLEEASSRDMQMGPGLFLRMQLVPSIEERETPLTREDRPALQEPPWSLGCTGLKAAMQIQRVVIPVPTLGHRNPWVARDSAVPARDPAWLQEDKVEEEAMAPGLPTACSQEPVTFADVAVVFTPEEWVFLDSTQRSLYRDVMLENYRNLASVADQLCKPNALSYLEERGEQWTTDRGVLSDTCAEPQCQPQEAIPSQDTFTEILSIDVKGEQPQPGEKLYKYNELEKPFNSIEPLFQYQRIHAGEASCECQEIRNSFFQSAHLIVPEKIRSGDKSYACNKCEKSFRYSSDLIR [...]
+chr4-04	SwissProt	protein_match	289816	289851	49.000000	-	.	Target=Q96PQ6-4.2 1 12 +;percentID=83;sequence=MLENYSNLTSLGYQVGKPSLISHLEQEEEPRTEERGAHQGACADWETPSKTKWSLLMEDIFGKETPSGVTMERAGLGEKSTEYAHLFEVFGMDPHLTQPMGRHAGKRPYHRRDYGVAFKGRPHLTQHMSMYDGRKMHECHQCQKAFTTSASLTRHRRIHTGEKPYECSDCGKAFNDPSALRSHARTHLKEKPFDCSQCGNAFRTLSALKIHMRVHTGERPYKCDQCGKAYGRSCHLIAHKRTHTGERPYECHDCGKAFQHPSHLKEHVRNHTGEKPYACTQCGKAFRWKSNFNLHKKNHMVEKTYECKECGKSFGDLVSRRKHMRIHIVKKPVECRQCGKTFRNQSILKTHMNSHTGEKPYGCDLCGKAFSASSNLTAHRKIHTQ [...]
+chr4-04	SwissProt	protein_match	289813	289950	150.000000	-	.	Target=P17024.2 3 48 +;percentID=56
+chr4-04	SwissProt	protein_match	289813	289947	139.000000	-	.	Target=Q6P560.1 5 49 +;percentID=57
+chr4-04	SwissProt	protein_match	289816	289851	51.000000	-	.	Target=Q16587-2.2 1 12 +;percentID=75
+chr4-04	SwissProt	protein_match	289816	289851	45.000000	-	.	Target=P17027.3 1 12 +;percentID=75
+chr4-04	SwissProt	protein_match	289816	289857	53.000000	-	.	Target=A6NGH9.3 2 15 +;percentID=71
+chr4-04	SwissProt	protein_match	289816	289851	50.000000	-	.	Target=Q14593-2.3 1 12 +;percentID=75
+chr4-04	SwissProt	protein_match	289813	289938	124.000000	-	.	Target=Q8TC21.2 7 48 +;percentID=47
+chr4-04	SwissProt	protein_match	289813	289950	144.000000	-	.	Target=Q8N7K0.1 3 48 +;percentID=56
+chr4-04	SwissProt	protein_match	289804	289851	49.000000	-	.	Target=Q96MU6.2 1 16 +;percentID=62
+chr4-04	SwissProt	protein_match	289816	289857	54.000000	-	.	Target=Q8N184-1.3 2 15 +;percentID=78
+chr4-04	SwissProt	protein_match	289807	289947	144.000000	-	.	Target=Q02386.2 5 51 +;percentID=57
+chr4-04	SwissProt	protein_match	289816	289947	107.000000	-	.	Target=Q80YP6.1 11 54 +;percentID=52;sequence=MTAEMDMALMQGCVTFQDVAICFSHEEWRLLDETQRLLYLSVMLQNFALINSQGCGHKTEDEERRVSTRASKGLRSETTPKTNLCEKCVPILQDILCLPGLPGQKHSTEASSKVDQHQDHNSTGKPLEKNADRSSYLFYLSAKSFPSWDVEKDLPDILSLLKSQVCPKTKKYRKSTEGRKETSHESDKSEECQSLSSQKQTLAHHPKTSNGKKLYECSKCGKTFRGKYSLDQHQRVHTGERPWECRDCGKFFSQTSHLNDHRRIHTGERPYECSECGKLFRQNSSLVDHQKTHTGARPYECSQCGKSFSQKATLVKHKRVHTGERPYKCSECGNSFSQSAILNQHRRIHTGVKPYECRECGKSFSQKATLIKHQRVHTGERPYKC [...]
+chr4-04	SwissProt	protein_match	289816	289851	59.000000	-	.	Target=Q3SXZ3-2.1 1 12 +;percentID=91
+chr4-04	SwissProt	protein_match	289816	289938	110.000000	-	.	Target=B2RUI1.2 48 88 +;percentID=58
+chr4-04	SwissProt	protein_match	289816	289947	117.000000	-	.	Target=Q8IVC4.1 14 57 +;percentID=54
+chr4-04	SwissProt	protein_match	289807	289956	141.000000	-	.	Target=Q9UJW7.2 28 77 +;percentID=56;sequence=METLTSRHEKRALHSQASAISQDREEKIMSQEPLSFKDVAVVFTEEELELLDSTQRQLYQDVMQENFRNLLSVGERNPLGDKNGKDTEYIQDEELRFFSHKELSSCKIWEEVAGELPGSQDCRVNLQGKDFQFSEDAAPHQGWEGASTPCFPIENSLDSLQGDGLIGLENQQFPAWRAIRPIPIQGSWAKAFVNQLGDVQERCKNLDTEDTVYKCNWDDDSFCWISCHVDHRFPEIDKPCGCNKCRKDCIKNSVLHRINPGENGLKSNEYRNGFRDDADLPPHPRVPLKEKLCQYDEFSEGLRHSAHLNRHQRVPTGEKSVKSLERGRGVRQNTHIRNHPRAPVGDMPYRCDVCGKGFRYKSVLLIHQGVHTGRRPYKCEECGKA [...]
+chr4-04	SwissProt	protein_match	289816	289947	116.000000	-	.	Target=Q6NX49.1 11 54 +;percentID=50
+chr4-04	SwissProt	protein_match	289816	289947	118.000000	-	.	Target=Q5CZA5.2 8 51 +;percentID=56
+chr4-04	SwissProt	protein_match	289798	289938	168.000000	-	.	Target=O75290.3 6 51 +;percentID=70;Gap=M42 D1 M4 
+chr4-04	SwissProt	protein_match	289816	289938	120.000000	-	.	Target=Q13398.2 33 73 +;percentID=60
+chr4-04	SwissProt	protein_match	289813	289947	124.000000	-	.	Target=Q9UC07.2 19 65 +;percentID=51;Gap=M3 I2 M42 
+chr4-04	SwissProt	protein_match	289816	289947	113.000000	-	.	Target=A6NF35.2 12 55 +;percentID=54
+chr4-04	SwissProt	protein_match	289816	289947	118.000000	-	.	Target=O43296.1 11 54 +;percentID=56;sequence=MAAAVLTDRAQVSVTFDDVAVTFTKEEWGQLDLAQRTLYQEVMLENCGLLVSLGCPVPKAELICHLEHGQEPWTRKEDLSQDTCPGDKGKPKTTEPTTCEPALSEGISLQGQVTQGNSVDSQLGQAEDQDGLSEMQEGHFRPGIDPQEKSPGKMSPECDGLGTADGVCSRIGQEQVSPGDRVRSHNSCESGKDPMIQEEENNFKCSECGKVFNKKHLLAGHEKIHSGVKPYECTECGKTFIKSTHLLQHHMIHTGERPYECMECGKAFNRKSYLTQHQRIHSGEKPYKCNECGKAFTHRSNFVLHNRRHTGEKSFVCTECGQVFRHRPGFLRHYVVHSGENPYECLECGKVFKHRSYLMWHQQTHTGEKPYECSECGKVFLESAA [...]
+chr4-04	SwissProt	protein_match	289816	289914	115.000000	-	.	Target=Q9Y6Q3.3 40 72 +;percentID=69
+chr4-04	SwissProt	protein_match	289816	289947	112.000000	-	.	Target=Q8TF45.2 2 45 +;percentID=52;sequence=MQGTVAFEDVAVNFSQEEWSLLSEVQRCLYHDVMLENWVLISSLGCWCGSEDEEAPSKKSISIQRVSQVSTPGAGVSPKKAHSCEMCGAILGDILHLADHQGTHHKQKLHRCEAWGNKLYDSSNRPHQNQYLGEKPYRSSVEEALFVKRCKFHVSEESSIFIQSGKDFLPSSGLLLQEATHTGEKSNSKPECESPFQWGDTHYSCGECMKHSSTKHVFVQQQRLPSREECYCWECGKSFSKYDSVSNHQRVHTGKRPYECGECGKSFSHKGSLVQHQRVHTGKRPYECGECGKSFSHKGSLVQHQRVHTGERPYECGECGKSFSQNGTLIKHQRVHTGERPYECEECGKCFTQKGNLIQHQRGHTSERPYECEECGKCFSQKGTLT [...]
+chr4-04	SwissProt	protein_match	289813	289938	132.000000	-	.	Target=Q5REI6.1 4 45 +;percentID=54
+chr4-04	SwissProt	protein_match	289816	289938	121.000000	-	.	Target=Q6P9A3-2.1 14 54 +;percentID=56
+chr4-04	SwissProt	protein_match	289804	289950	160.000000	-	.	Target=Q14590.3 4 52 +;percentID=61
+chr4-04	SwissProt	protein_match	289816	289947	121.000000	-	.	Target=Q13398-3.2 42 85 +;percentID=59
+chr4-04	SwissProt	protein_match	289816	289938	118.000000	-	.	Target=Q8TAW3.2 49 89 +;percentID=58;sequence=MLSPVSRDASDALQGRKCLRPRSRRLPLPAAVRAHGPMAELTDSARGCVVFEDVFVYFSREEWELLDDAQRLLYHDVMLENFALLASLGIAFSRSRAVMKLERGEEPWVYDQVDMTSATEREAQRGLRPGCWHGVEDEEVSSEQSIFVAGVSEVRTLMAELESHPCDICGPILKDTLHLAKYHGGKARQKPYLCGACGKQFWFSTDFDQHQNQPNGGKLFPRKEGRDSVKSCRVHVPEKTLTCGKGRRDFSATSGLLQHQASLSSMKPHKSTKLVSGFLMGQRYHRCGECGKAFTRKDTLARHQRIHTGERPYECNECGKFFSQSYDLFKHQTVHTGERPYECSECGKFFRQISGLIEHRRVHTGERLYQCGKCGKFFSSKSNLI [...]
+chr4-04	SwissProt	protein_match	289816	289947	122.000000	-	.	Target=Q96SQ5.1 12 55 +;percentID=59
+chr4-04	SwissProt	protein_match	289816	289947	128.000000	-	.	Target=Q7TNU6.1 14 57 +;percentID=56;sequence=MAAAGLLPLPAAPQAKVTFEDVAVLLSQEEWARLGPAQRGLYRHVMMETYGNVVSLGLPGSKPVVISQLERGEDPWVLDGQGTELSQSLGSDHSECKAKEENQNTDLNVPPLISDEASATLTETPLRKVAEERYKTEPKVCPSPKPIGPQNAHGLNPSVPVARPQTAPSVERPYICIECGKCFGRSSHLLQHQRIHTGEKPYVCHVCGKAFSQSSVLSKHRRIHTGEKPYECNECGKAFRVSSDLAQHHKIHTGEKPHECLECGKAFTQLSHLIQHQRIHTGERPYVCPLCGKAFNHSTVLRSHQRVHTGEKPHGCSECGKTFSVKRTLLQHQRVHTGEKPYTCSECGKAFSDRSVLIQHHNVHTGEKPYECSECGKTFSHRSTL [...]
+chr4-04	SwissProt	protein_match	289816	289938	128.000000	-	.	Target=Q08DG8.1 14 54 +;percentID=56
+chr4-04	SwissProt	protein_match	289816	289947	127.000000	-	.	Target=Q6P9A1.2 11 54 +;percentID=59;sequence=MAAALRAPTQQVFVAFEDVAIYFSQEEWELLDEMQRLLYRDVMLENFAVMASLGCWCGAVDEGTPSAESVSVEELSQGRTPKADTSTDKSHPCEICTPVLRDILQMIELHASPCGQKLYLGGASRDFWMSSNLHQLQKLDNGEKLFKVDGDQASFMMNCRFHVSGKPFTFGEVGRDFSATSGLLQHQVTPTIERPHSRIRHLRVPTGRKPLKYTESRKSFREKSVFIQHQRADSGERPYKCSECGKSFSQSSGFLRHRKAHGRTRTHECSECGKSFSRKTHLTQHQRVHTGERPYDCSECGKSFRQVSVLIQHQRVHTGERPYECSECGKSFSHSTNLYRHRSAHTSTRPYECSECGKSFSHSTNLFRHWRVHTGVRPYECSECG [...]
+chr4-04	SwissProt	protein_match	289816	289947	122.000000	-	.	Target=Q8TAU3.1 12 55 +;percentID=59
+chr4-04	SwissProt	protein_match	289816	289947	121.000000	-	.	Target=Q13398-4.2 34 77 +;percentID=59
+chr4-04	SwissProt	protein_match	289816	289851	50.000000	-	.	Target=Q9P255.2 1 12 +;percentID=75
+chr4-04	SwissProt	protein_match	289816	289938	127.000000	-	.	Target=Q7Z340.3 29 69 +;percentID=60
+chr4-04	SwissProt	protein_match	289816	289938	120.000000	-	.	Target=Q13398-6.2 13 53 +;percentID=60
+chr4-04	SwissProt	protein_match	289816	289941	115.000000	-	.	Target=Q96NL3.1 8 49 +;percentID=54;sequence=MAAPALALVSFEDVVVTFTGEEWGHLDLAQRTLYQEVMLETCRLLVSLGHPVPKPELIYLLEHGQELWTVKRGLSQSTCAGEKAKPKITEPTASQLAFSEESSFQELLAQRSSRDSRLGQARDEEKLIKIQEGNLRPGTNPHKEICPEKLSYKHDDLEPDDSLGLRVLQERVTPQDALHECDSQGPGKDPMTDARNNPYTCTECGKGFSKKWALVRHQQIHAGVKPYECNECGKACRYMADVIRHMRLHTGEKPYKCIECGKAFKRRFHLTEHQRIHTGDKPYECKECGKAFTHRSSFIQHNMTHTREKPFLCKECGKAFYYSSSFAQHMRIHTGKKLYECGECGKAFTHRSTFIQHNVTHTGEKPFLCKECGKTFCLNSSFTQHM [...]
+chr4-04	SwissProt	protein_match	289804	289950	148.000000	-	.	Target=Q9UIE0.3 4 52 +;percentID=57;sequence=MTTFKEAVTFKDVAVFFTEEELGLLDPAQRKLYQDVMLENFTNLLSVGHQPFHPFHFLREEKFWMMETATQREGNSGGKTIAEAGPHEDCPCQQIWEQTASDLTQSQDSIINNSHFFEQGDVPSQVEAGLSIIHTGQKPSQNGKCKQSFSDVAIFDPPQQFHSGEKSHTCNECGKSFCYISALRIHQRVHLREKLSKCDMRGKEFSQSSCLQTRERVHTGEKPFKCEQCGKGFRCRAILQVHCKLHTGEKPYICEKCGRAFIHDFQLQKHQIIHTGEKPFKCEICGKSFCLRSSLNRHCMVHTAEKLYKSEECGKGFTDSLDLHKHQIIHTGQKPYNCKECGKSFRWSSYLLIHQRIHSGEKPYRCEECGKGYISKSGLNLHQRVH [...]
+chr4-04	SwissProt	protein_match	289816	289941	127.000000	-	.	Target=P51815.2 234 275 +;percentID=57
+chr4-04	SwissProt	protein_match	289816	289938	122.000000	-	.	Target=B1APH4.3 37 77 +;percentID=56;sequence=MASRPRPRTPSRGPSDLRFRGEAGLRRVFLKKAGGSVSFSDVAVGFTQEEWQHLDSAQRTPYRDMMLENYSLLLSVGYCITKPEVVCKLEHGQVLWILEEESPSQSHLDCCIDDDLMEKRQENQDQHLQKVDFVNNKTLTMDRNGVLGKTFSLDTNPILSRKIRGNCDSSGMNLNNISELIISNRSSFVRNPAECNVRGKFLLCMKRENPYARGKPLEYDGNGKAVSQNEDLFRHQYIQTLKQCFEYNHRGYTEERNPMNALNVGKLLDIGHALQYIKEHTRDKTYECNECGKNFCEKSNLHVHQRTHTGEKPYGCNECQKAFGDRSALKVHQRIHTGEKPYELHQRTHTGEKPYACSECGKTFYQKSSLTTHQRTHTREQPYEY [...]
+chr4-04	SwissProt	protein_match	289816	289947	131.000000	-	.	Target=Q8N184-2.3 3 46 +;percentID=56
+chr4-04	SwissProt	protein_match	289816	289947	114.000000	-	.	Target=Q08ER8.2 6 49 +;percentID=54
+chr4-04	SwissProt	protein_match	289816	289938	131.000000	-	.	Target=P51508.3 21 61 +;percentID=56
+chr4-04	SwissProt	protein_match	289816	289947	129.000000	-	.	Target=Q96BR6.2 87 130 +;percentID=54
+chr4-04	SwissProt	protein_match	289816	289947	131.000000	-	.	Target=Q96GC6-3.1 179 222 +;percentID=54;sequence=MNIEVVEVLTLNQEVAGPRNAQIQALYAEDGSLSADAPSEQIQQQGKHPGDPEAARQRFRQFRYKDMTGPREALDQLRELCHQWLQPKARSKEQILELLVLEQFLGALPVKLRTWVESQHPENCQEVVALVEGVTWMSEEEVLPAGQPAEGTTCCLEVTAQQEEKQEDAAICPVTVLPEEPVTFQDVAVDFSREEWGLLGPTQRTEYRDVMLETFGHLVSVGWETTLENKELAPNSDIPEEEPAPSLKVQESSRDCALSSTLEDTLQGGVQEVQDTVLKQMESAQEKDLPQKKHFDNRESQANSGALDTNQVSLQKIDNPESQANSGALDTNQVLLHKIPPRKRLRKRDSQVKSMKHNSRVKIHQKSCERQKAKEGNGCRK [...]
+chr4-04	SwissProt	protein_match	289816	289938	134.000000	-	.	Target=Q96CS4.1 29 69 +;percentID=65;sequence=MAPPSAPLPAQGPGKARPSRKRGRRPRALKFVDVAVYFSPEEWGCLRPAQRALYRDVMRETYGHLGALGCAGPKPALISWLERNTDDWEPAALDPQEYPRGLTVQRKSRTRKKNGEKEVFPPKEAPRKGKRGRRPSKPRLIPRQTSGGPICPDCGCTFPDHQALESHKCAQNLKKPYPCPDCGRRFSYPSLLVSHRRAHSGECPYVCDQCGKRFSQRKNLSQHQVIHTGEKPYHCPDCGRCFRRSRSLANHRTTHTGEKPHQCPSCGRRFAYPSLLAIHQRTHTGEKPYTCLECNRRFRQRTALVIHQRIHTGEKPYPCPDCERRFSSSSRLVSHRRVHSGERPYACEHCEARFSQRSTLLQHQLLHTGEKPYPCPDCGRAFRRS [...]
+chr4-04	SwissProt	protein_match	289816	289959	134.000000	-	.	Target=A8MYF4.2 23 70 +;percentID=50
+chr4-04	SwissProt	protein_match	289816	289947	134.000000	-	.	Target=Q9Y3M9.2 9 52 +;percentID=54;sequence=MGPQGARRQAFLAFGDVTVDFTQKEWRLLSPAQRALYREVTLENYSHLVSLGILHSKPELIRRLEQGEVPWGEERRRRPGPCAGIYAEHVLRPKNLGLAHQRQQQLQFSDQSFQSDTAEGQEKEKSTKPMAFSSPPLRHAVSSRRRNSVVEIESSQGQRENPTEIDKVLKGIENSRWGAFKCAERGQDFSRKMMVIIHKKAHSRQKLFTCRECHQGFRDESALLLHQNTHTGEKSYVCSVCGRGFSLKANLLRHQRTHSGEKPFLCKVCGRGYTSKSYLTVHERTHTGEKPYECQECGRRFNDKSSYNKHLKAHSGEKPFVCKECGRGYTNKSYFVVHKRIHSGEKPYRCQECGRGFSNKSHLITHQRTHSGEKPFACRQCKQSFS [...]
+chr4-04	SwissProt	protein_match	289816	289947	134.000000	-	.	Target=Q96GC6-4.1 3 46 +;percentID=56
+chr4-04	SwissProt	protein_match	289816	289947	131.000000	-	.	Target=A6NFI3.1 155 198 +;percentID=59
+chr4-04	SwissProt	protein_match	289816	289938	134.000000	-	.	Target=Q9Y6Q3-2.3 47 87 +;percentID=60
+chr4-04	SwissProt	protein_match	289816	289947	131.000000	-	.	Target=Q8N184.3 3 46 +;percentID=56
+chr4-04	SwissProt	protein_match	289810	289947	146.000000	-	.	Target=P17098.2 22 67 +;percentID=58
+chr4-04	SwissProt	protein_match	289816	289950	133.000000	-	.	Target=P51786.2 23 67 +;percentID=51;sequence=MPANGTSPQRFPALIPGEPGRSFEGSVSFEDVAVDFTRQEWHRLDPAQRTMHKDVMLETYSNLASVGLCVAKPEMIFKLERGEELWILEEESSGHGYSGSLSLLCGNGSVGDNALRHDNDLLHHQKIQTLDQNVEYNGCRKAFHEKTGFVRRKRTPRGDKNFECHECGKAYCRKSNLVEHLRIHTGERPYECGECAKTFSARSYLIAHQKTHTGERPFECNECGKSFGRKSQLILHTRTHTGERPYECTECGKTFSEKATLTIHQRTHTGEKPYECSECGKTFRVKISLTQHHRTHTGEKPYECGECGKNFRAKKSLNQHQRIHTGEKPYECGECGKFFRMKMTLNNHQRTHTGEKPYQCNECGKSFRVHSSLGIHQRIHTGEKP [...]
+chr4-04	SwissProt	protein_match	289816	289938	134.000000	-	.	Target=P51814-8.2 27 67 +;percentID=58
+chr4-04	SwissProt	protein_match	289816	289947	134.000000	-	.	Target=P10078.3 100 143 +;percentID=61
+chr4-04	SwissProt	protein_match	289816	289938	121.000000	-	.	Target=Q6P9A3.1 27 67 +;percentID=56
+chr4-04	SwissProt	protein_match	289816	289956	137.000000	-	.	Target=P51814.2 63 109 +;percentID=53
+chr4-04	SwissProt	protein_match	289816	289956	137.000000	-	.	Target=P51814-3.2 31 77 +;percentID=53
+chr4-04	SwissProt	protein_match	289816	289941	125.000000	-	.	Target=Q02525.2 58 99 +;percentID=54
+chr4-04	SwissProt	protein_match	289816	289938	138.000000	-	.	Target=Q9BS34.1 4 44 +;percentID=60
+chr4-04	SwissProt	protein_match	289816	289947	138.000000	-	.	Target=Q5TYW1-2.2 5 48 +;percentID=56
+chr4-04	SwissProt	protein_match	289816	289959	130.000000	-	.	Target=Q6PGE4.1 147 194 +;percentID=56
+chr4-04	SwissProt	protein_match	289816	289944	141.000000	-	.	Target=Q5JVG2.1 6 48 +;percentID=60
+chr4-04	SwissProt	protein_match	289816	289938	136.000000	-	.	Target=Q6P9Y7.1 6 46 +;percentID=60;sequence=MARVSVVFSDVSIAFSQEEWESLDLEQRNLYKDVMMENYHNVASLGCFISKPDVISLLEQGKEPWKVVRQRKPCPDSETKDETNQVFSENGIYEMNLSQWKIMERIGNSGLKSLLLKNGWESRRKQERQEDPQEGYLSQVRHTSERVSSYEKRALTTRQRIHFVEKPYECNECGKAFRVRQQLTFHHRIHTGEKPYECKECGMAFRQTAHLTRHQRLHSGEKLYECKECGQAFIYGPELRAHQKLHTGEKPYTCRECGKAFRVRGQLTLHQRIHTGEKPYVCQECGKAFRQLAHLTRHQKLNVVDRLYECKECGKDFLCGSGLRVHHKLHTGEKPYECKDCGKAFRVRQQLTLHQRSHTGEKPYECTECGKTFSRGYHLILHHRIH [...]
+chr4-04	SwissProt	protein_match	289816	289938	120.000000	-	.	Target=Q5RBQ3.1 27 67 +;percentID=56
+chr4-04	SwissProt	protein_match	289816	289944	139.000000	-	.	Target=Q8BZW4-2.1 26 68 +;percentID=55
+chr4-04	SwissProt	protein_match	289816	289968	141.000000	-	.	Target=P51814-2.2 19 69 +;percentID=50
+chr4-04	SwissProt	protein_match	289816	289956	137.000000	-	.	Target=P51814-5.2 55 101 +;percentID=53
+chr4-04	SwissProt	protein_match	289816	289938	115.000000	-	.	Target=Q3SY52.1 27 67 +;percentID=56;sequence=MAAAALRAPTQVTVSPETHMDLTKGCVTFEDIAIYFSQDEWGLLDEAQRLLYLEVMLENFALVASLGCGHGTEDEETPSDQNVSVGVSQSKAGSSTQKTQSCEMCVPVLKDILHLADLPGQKPYLVGECTNHHQHQKHHSAKKSLKRDMDRASYVKCCLFCMSLKPFRKWEVGKDLPAMLRLLRSLVFPGGKKPGTITECGEDIRSQKSHYKSGECGKASRHKHTPVYHPRVYTGKKLYECSKCGKAFRGKYSLVQHQRVHTGERPWECNECGKFFSQTSHLNDHRRIHTGERPYECSECGKLFRQNSSLVDHQKIHTGARPYECSQCGKSFSQKATLVKHQRVHTGERPYKCGECGNSFSQSAILNQHRRIHTGAKPYECGQCG [...]
+chr4-04	SwissProt	protein_match	289816	289944	135.000000	-	.	Target=P52742.2 12 54 +;percentID=58
+chr4-04	SwissProt	protein_match	289816	289851	50.000000	-	.	Target=A6NK75.3 1 12 +;percentID=75
+chr4-04	SwissProt	protein_match	289816	289941	141.000000	-	.	Target=P17031.3 13 54 +;percentID=59
+chr4-04	SwissProt	protein_match	289816	289947	138.000000	-	.	Target=Q5TYW1.2 5 48 +;percentID=56
+chr4-04	SwissProt	protein_match	289816	289947	138.000000	-	.	Target=Q8IZ26.2 11 54 +;percentID=63
+chr4-04	SwissProt	protein_match	289816	289938	130.000000	-	.	Target=Q9Y473.1 27 67 +;percentID=58;sequence=MPADVNLSQKPQVLGPEKQDGSCEASVSFEDVTVDFSREEWQQLDPAQRCLYRDVMLELYSHLFAVGYHIPNPEVIFRMLKEKEPRVEEAEVSHQRCQEREFGLEIPQKEISKKASFQKDMVGEFTRDGSWCSILEELRLDADRTKKDEQNQIQPMSHSAFFNKKTLNTESNCEYKDPGKMIRTRPHLASSQKQPQKCCLFTESLKLNLEVNGQNESNDTEQLDDVVGSGQLFSHSSSDACSKNIHTGETFCKGNQCRKVCGHKQSLKQHQIHTQKKPDGCSECGGSFTQKSHLFAQQRIHSVGNLHECGKCGKAFMPQLKLSVYLTDHTGDIPCICKECGKVFIQRSELLTHQKTHTRKKPYKCHDCGKAFFQMLSLFRHQRTH [...]
+chr4-04	SwissProt	protein_match	289816	289947	144.000000	-	.	Target=Q16587.2 40 83 +;percentID=59
+chr4-04	SwissProt	protein_match	289816	289950	146.000000	-	.	Target=A1L1L7.1 36 80 +;percentID=55;sequence=MAAPDSLSHGPSGDSVCLQEEKVSAEMMLVDCLTNYQELVSFDDVIVDFTQEEWTSLNPDQRTLYREVMLENYKNLATVGYQLIKPSVISWLEQEEFSTGQKIVFPEWKIQLETQCSASQQELLRGNISNGMQTQTGSDTGRGLCDGTQYGDFFSELSPLRTVMKTRPAQDNYDSSQCRKDFLMLQRKKCAGEKLSEFNQSEETGAIPGKAYQKMATQEKCFECSDCGKSFMNQSHLQTHQRTHSGDKLYELNECGRSFINSRLAVLIETLNAKKPHRCKECGKGYRYPAYLNIHMRTHTGEKPYECKECGKAFNYSNSFQIHGRTHTGEKPYVCNQCGKAFTQHSGLSIHVRSHNGDKPYACKECGKAFLTSSRLIQHIRTHTG [...]
+chr4-04	SwissProt	protein_match	289816	289947	146.000000	-	.	Target=Q2M218.1 5 48 +;percentID=59
+chr4-04	SwissProt	protein_match	289816	289947	147.000000	-	.	Target=Q86Y25.1 9 52 +;percentID=65
+chr4-04	SwissProt	protein_match	289816	289938	147.000000	-	.	Target=Q2KI58.1 4 44 +;percentID=63
+chr4-04	SwissProt	protein_match	289816	289947	146.000000	-	.	Target=Q61116.1 5 48 +;percentID=63
+chr4-04	SwissProt	protein_match	289816	289947	147.000000	-	.	Target=Q6ZMY9.1 11 54 +;percentID=65
+chr4-04	SwissProt	protein_match	289816	289944	147.000000	-	.	Target=Q9UK12.2 6 48 +;percentID=65
+chr4-04	SwissProt	protein_match	289816	289956	145.000000	-	.	Target=Q9BY31.2 9 55 +;percentID=57;sequence=MLETYNSLVSLQELVSFEEVAVHFTWEEWQDLDDAQRTLYRDVMLETYSSLVSLGHCITKPEMIFKLEQGAEPWIVEETPNLRLSAVQIIDDLIERSHESHDRFFWQIVITNSNTSTQERVELGKTFNLNSNHVLNLIINNGNSSGMKPGQFNDCQNMLFPIKPGETQSGEKPHVCDITRRSHRHHEHLTQHHKIQTLLQTFQCNEQGKTFNTEAMFFIHKRVHIVQTFGKYNEYEKACNNSAVIVQVITQVGQPTCCRKSDFTKHQQTHTGEKPYECVECEKPSISKSDLMLQCKMPTEEKPYACNWCEKLFSYKSSLIIHQRIHTGEKPYGCNECGKTFRRKSFLTLHERTHTGDKPYKCIECGKTFHCKSLLTLHHRTHSGEK [...]
+chr4-04	SwissProt	protein_match	289816	289968	141.000000	-	.	Target=P51814-7.2 19 69 +;percentID=50
+chr4-04	SwissProt	protein_match	289816	289938	141.000000	-	.	Target=Q2TL60.1 14 54 +;percentID=63;sequence=MPAVRGKSKSKAPVTFGDLAIYFSQEEWEWLSPMQKDLYEDVMLENYHNLVSVGLACRRPNIIALLEKGKAPWVIEPSRRRWGPESGSKYETKKLPPNSCHKSGPSICEKPTSSQQKVPTEKAKHNKSSVPSKSKKEHSGKKSLKCNLCGKTFFRSLSLKLHQDFHTGERSYECSTCRHVFRQILSLILHQRVHNWNKSYECDKCGDIFNKKLTLMIHRRIHNGKESFHHEKASDSCPSLSLHRNNHTTDSVHQCRKCGKVFSRMSSLLLHKRSHNRKKIQKYNKYKRGFKKQPVLVHKRVCIGKKTHESKKALIQSARQKTCQSENPFMCGKCGKSFSRISALMLHQRIHTSGNPYKCDKCQKDFGRLSTLILHLRIHSGEKQF [...]
+chr4-04	SwissProt	protein_match	289816	289938	142.000000	-	.	Target=Q6ECI4.2 23 63 +;percentID=63
+chr4-04	SwissProt	protein_match	289816	289950	148.000000	-	.	Target=Q5RES8.1 4 48 +;percentID=57
+chr4-04	SwissProt	protein_match	289816	289938	144.000000	-	.	Target=Q14587.2 81 121 +;percentID=65
+chr4-04	SwissProt	protein_match	289816	289947	145.000000	-	.	Target=A2VDP4.1 3 46 +;percentID=61
+chr4-04	SwissProt	protein_match	289816	289950	143.000000	-	.	Target=Q86WZ6.1 19 63 +;percentID=57
+chr4-04	SwissProt	protein_match	289813	289938	132.000000	-	.	Target=Q68EA5.3 4 45 +;percentID=57
+chr4-04	SwissProt	protein_match	289816	289938	150.000000	-	.	Target=Q5HYK9.2 14 54 +;percentID=68
+chr4-04	SwissProt	protein_match	289816	289947	134.000000	-	.	Target=P10078-2.3 100 143 +;percentID=61
+chr4-04	SwissProt	protein_match	289816	289971	148.000000	-	.	Target=A0JPL0.1 3 52 +;percentID=53;Gap=M6 D2 M44 
+chr4-04	SwissProt	protein_match	289816	289950	151.000000	-	.	Target=Q7TSH9.1 24 68 +;percentID=57
+chr4-04	SwissProt	protein_match	289816	289947	153.000000	-	.	Target=Q8NDW4.1 5 48 +;percentID=61
+chr4-04	SwissProt	protein_match	289816	289947	154.000000	-	.	Target=Q8N8J6.2 5 48 +;percentID=63
+chr4-04	SwissProt	protein_match	289816	289968	150.000000	-	.	Target=Q96PQ6.2 47 97 +;percentID=54
+chr4-04	SwissProt	protein_match	289816	289950	149.000000	-	.	Target=Q9HCZ1.2 6 50 +;percentID=60
+chr4-04	SwissProt	protein_match	289816	289947	150.000000	-	.	Target=A6NDX5.5 39 82 +;percentID=65
+chr4-04	SwissProt	protein_match	289816	289947	151.000000	-	.	Target=Q9Y2H8.1 43 86 +;percentID=61
+chr4-04	SwissProt	protein_match	289816	289950	156.000000	-	.	Target=A6QLU5.1 24 68 +;percentID=60
+chr4-04	SwissProt	protein_match	289816	289947	157.000000	-	.	Target=Q5JUW0.1 5 48 +;percentID=65;sequence=MAMSQESLTFKDVFVDFTLEEWQQLDSAQKNLYRDVMLENYSHLVSVGYLVAKPDVIFRLGPGEESWMADGGTPVRTCAGEDRPEVWQVDEQIDHYKESQDKLPWQAAFIGKETLKDESGQESRTCRKSIYLSTEFDSVRQRLPKYYSWEKAFKTSFKLSWSKWKLCKKER
+chr4-04	SwissProt	protein_match	289816	289950	144.000000	-	.	Target=Q9BUY5.1 38 82 +;percentID=55
+chr4-04	SwissProt	protein_match	289816	289947	157.000000	-	.	Target=Q8N9F8.1 11 54 +;percentID=70
+chr4-04	SwissProt	protein_match	289816	289947	141.000000	-	.	Target=Q9XSR1.1 12 55 +;percentID=65
+chr4-04	SwissProt	protein_match	289816	289947	157.000000	-	.	Target=Q96RE9-3.1 21 64 +;percentID=61
+chr4-04	SwissProt	protein_match	289816	289947	157.000000	-	.	Target=Q96RE9-2.1 20 63 +;percentID=61
+chr4-04	SwissProt	protein_match	289816	289947	159.000000	-	.	Target=O60765.2 11 54 +;percentID=68
+chr4-04	SwissProt	protein_match	289816	289944	157.000000	-	.	Target=Q571J5.2 12 54 +;percentID=69
+chr4-04	SwissProt	protein_match	289816	289947	157.000000	-	.	Target=Q9BS31.1 5 48 +;percentID=65;sequence=MTKAQESLTLEDVAVDFTWEEWQFLSPAQKDLYRDVMLENYSNLVSVGYQAGKPDALTKLEQGEPLWTLEDEIHSPAHPEIEKADDHLQQPLQNQKILKRTGQRYEHGRTLKSYLGLTNQSRRYNRKEPAEFNGDGAFLHDNHEQMPTEIEFPESRKPISTKSQFLKHQQTHNIEKAHECTDCGKAFLKKSQLTEHKRIHTGKKPHVCSLCGKAFYKKYRLTEHERAHRGEKPHGCSLCGKAFYKRYRLTEHERAHKGEKPYGCSECGKAFPRKSELTEHQRIHTGIKPHQCSECGRAFSRKSLLVVHQRTHTGEKPHTCSECGKGFIQKGNLNIHQRTHTGEKPYGCIDCGKAFSQKSCLVAHQRYHTGKTPFVCPECGQPCSQK [...]
+chr4-04	SwissProt	protein_match	289816	289947	157.000000	-	.	Target=Q5JUW0-2.1 5 48 +;percentID=65;sequence=MAMSQESLTFKDVFVDFTLEEWQQLDSAQKNLYRDVMLENYSHLVSVGYLVAKPDVIFRLGPGEESWMADGGTPVRTCAEVWQVDEQIDHYKESQDKLPWQAAFIGKETLKDESGQESRTCRKSIYLSTEFDSVRQRLPKYYSWEKAFKTSFKLSWSKWKLCKKER
+chr4-04	SwissProt	protein_match	289816	289950	157.000000	-	.	Target=Q99676.3 24 68 +;percentID=60
+chr4-04	SwissProt	protein_match	289816	289926	157.000000	-	.	Target=P17038-2.4 2 38 +;percentID=81
+chr4-04	SwissProt	protein_match	289816	289941	155.000000	-	.	Target=Q7Z2F6.1 3 44 +;percentID=76
+chr4-04	SwissProt	protein_match	289816	289938	158.000000	-	.	Target=Q86UE3.2 60 100 +;percentID=68
+chr4-04	SwissProt	protein_match	289816	289938	123.000000	-	.	Target=Q96H86.2 26 66 +;percentID=58;sequence=MAPPLAPLPPRDPNGAGPEWREPGAVSFADVAVYFCREEWGCLRPAQRALYRDVMRETYGHLSALGIGGNKPALISWVEEEAELWGPAAQDPEVAKCQTQTDPADSRNKKKERQREGTGALEKPDPVAAGSPGLKSPQAPSAGPPYGWEQLSKAPHRGRPSLCAHPPVPRADQRHGCYVCGKSFAWRSTLVEHVYSHTGEKPFHCTDCGKGFGHASSLSKHRAIHRGERPHRCLECGRAFTQRSALTSHLRVHTGEKPYGCADCGRRFSQSSALYQHRRVHSGETPFPCPDCGRAFAYPSDLRRHVRTHTGEKPYPCPDCGRCFRQSSEMAAHRRTHSGEKPYPCPQCGRRFGQKSAVAKHQWVHRPGAGGHRGRVAGRLSVTLT [...]
+chr4-04	SwissProt	protein_match	289816	289944	139.000000	-	.	Target=Q8BZW4.1 26 68 +;percentID=55
+chr4-04	SwissProt	protein_match	289816	289941	165.000000	-	.	Target=Q6PG37.1 4 45 +;percentID=69
+chr4-04	SwissProt	protein_match	289816	289947	157.000000	-	.	Target=P52738.2 3 46 +;percentID=70
+chr4-04	SwissProt	protein_match	289816	289938	164.000000	-	.	Target=Q9HCL3.2 6 46 +;percentID=75
+chr4-04	SwissProt	protein_match	289816	289965	166.000000	-	.	Target=Q8N988.2 27 76 +;percentID=64
+chr4-04	SwissProt	protein_match	289816	289947	157.000000	-	.	Target=Q96RE9.1 5 48 +;percentID=61
+chr4-04	SwissProt	protein_match	289816	289941	166.000000	-	.	Target=Q80W31.1 7 48 +;percentID=71
+chr4-04	SwissProt	protein_match	289816	289938	138.000000	-	.	Target=Q6N045.2 14 54 +;percentID=58
+chr4-04	SwissProt	protein_match	289816	289947	157.000000	-	.	Target=Q5JUW0-3.1 5 48 +;percentID=65;sequence=MAMSQESLTFKDVFVDFTLEEWQQLDSAQKNLYRDVMLENYSHLVSVGYLVAKPDVIFRLGPGEESWMADGGTPVRTCAGEDRPDVSIFASCILKCCY
+chr4-04	SwissProt	protein_match	289816	289938	166.000000	-	.	Target=P35789-2.4 4 44 +;percentID=78
+chr4-04	SwissProt	protein_match	289816	289947	162.000000	-	.	Target=Q5MCW4.1 5 48 +;percentID=68
+chr4-04	SwissProt	protein_match	289816	289956	164.000000	-	.	Target=Q5T5D7.1 2 48 +;percentID=65
+chr4-04	SwissProt	protein_match	289816	289938	169.000000	-	.	Target=Q6ZNA1.2 8 48 +;percentID=80
+chr4-04	SwissProt	protein_match	289816	289938	166.000000	-	.	Target=P35789-3.4 4 44 +;percentID=78
+chr4-04	SwissProt	protein_match	289816	290055	169.000000	-	.	Target=Q96NG5.1 4 83 +;percentID=47
+chr4-04	SwissProt	protein_match	289816	289950	151.000000	-	.	Target=Q06732.2 8 52 +;percentID=60
+chr4-04	SwissProt	protein_match	289816	289938	166.000000	-	.	Target=P35789.4 4 44 +;percentID=78
+chr4-04	SwissProt	protein_match	289816	289932	161.000000	-	.	Target=Q4R6C2.1 8 46 +;percentID=71
+chr4-04	SwissProt	protein_match	289816	289938	166.000000	-	.	Target=Q68DY1.2 4 44 +;percentID=78
+chr4-04	SwissProt	protein_match	289816	289947	157.000000	-	.	Target=Q2M3X9.1 5 48 +;percentID=65
+chr4-04	SwissProt	protein_match	289816	289947	155.000000	-	.	Target=Q8R1D1.1 36 79 +;percentID=61;sequence=MAAPASSHGPSEDSGCLQERKIAAEMMLVDCLTDDQELVSFEDVIVDFTQEEWSSLNPDQRNLYRDVMLENYQNLATVGYQLIKPSLISWLEQEEFSKGQKIVFPEWKLQLETKCSAFQQEFLRGNISSRMQMQTGINRGRELCDGTQYGDFFSELSPLRTDMKTQPAQDNYGCSQYRKDFLMLQRKNCAGEKLSEFSQSEETGMTPVKEKIDTQEKGFECSDCGKSFMSQSHLQTHQRTHSGDKLYEWNECGRSFINSRLAVLIETLNAKKPHRCKECGKGYRYPAYLNIHMRTHTGEKPYECKECGKAFNYSNSFQIHGRTHTGEKPYVCSQCGKAFTQHSGLSIHVRSHTGDKPYGCKECGKAFLTSSRLIQHIRTHTGEKP [...]
+chr4-04	SwissProt	protein_match	289816	289947	153.000000	-	.	Target=Q5REN4.1 5 48 +;percentID=61
+chr4-04	SwissProt	protein_match	289816	289947	171.000000	-	.	Target=Q8N859.1 16 59 +;percentID=72;sequence=MEEEEMNDGSQMVRSQESLTFQDVAVDFTREEWDQLYPAQKNLYRDVMLENYRNLVALGYQLCKPEVIAQLELEEEWVIERDSLLDTHPDGENRPEIKKSTTSQNISDENQTHEMIMERLAGDSFWYSILGGLWDFDYHPEFNQENHKRYLGQVTLTHKKITQERSLECNKFAENCNLNSNLMQQRIPSIKIPLNSDTQGNSIKHNSDLIYYQGNYVRETPYEYSECGKIFNQHILLTDHIHTAEKPSECGKAFSHTSSLSQPQMLLTGEKPYKCDECGKRFSQRIHLIQHQRIHTGEKPFICNGCGKAFRQHSSFTQHLRIHTGEKPYKCNQCGKAFSRITSLTEHHRLHTGEKPYECGFCGKAFSQRTHLNQHERTHTGEKPY [...]
+chr4-04	SwissProt	protein_match	289816	289941	172.000000	-	.	Target=Q8NDQ6.1 5 46 +;percentID=73;sequence=MAHALVTFRDVAIDFSQKEWECLDTTQRKLYRDVMLENYNNLVSLGYSGSKPDVITLLEQGKEPCVVARDVTGRQCPGLLSRHKTKKLSSEKDIHEISLSKESIIEKSKTLRLKGSIFRNEWQNKSEFEGQQGLKERSISQKKIVSKKMSTDRKRPSFTLNQRIHNSEKSCDSHLVQHGKIDSDVKHDCKECGSTFNNVYQLTLHQKIHTGEKSCKCEKCGKVFSHSYQLTLHQRFHTGEKPYECQECGKTFTLYPQLNRHQKIHTGKKPYMCKKCDKGFFSRLELTQHKRIHTGKKSYECKECGKVFQLIFYFKEHERIHTGKKPYECKECGKAFSVCGQLTRHQKIHTGVKPYECKECGKTFRLSFYLTEHRRTHAGKKPYECK [...]
+chr4-04	SwissProt	protein_match	289816	289941	172.000000	-	.	Target=Q8NDQ6-2.1 5 46 +;percentID=73;sequence=MAHALVTFRDVAIDFSQKEWECLDTTQRKLYRDVMLENYNNLVSLGLLSRHKTKKLSSEKDIHEISLSKESIIEKSKTLRLKGSIFRNEWQNKSEFEGQQGLKERSISQKKIVSKKMSTDRKRPSFTLNQRIHNSEKSCDSHLVQHGKIDSDVKHDCKECGSTFNNVYQLTLHQKIHTGEKSCKCEKCGKVFSHSYQLTLHQRFHTGEKPYECQECGKTFTLYPQLNRHQKIHTGKKPYMCKKCDKGFFSRLELTQHKRIHTGKKSYECKECGKVFQLIFYFKEHERIHTGKKPYECKECGKAFSVCGQLTRHQKIHTGVKPYECKECGKTFRLSFYLTEHRRTHAGKKPYECKECGKSFNVRGQLNRHKTIHTGIKPFACKVC [...]
+chr4-04	SwissProt	protein_match	289816	289947	172.000000	-	.	Target=Q8N9Z0-2.2 21 64 +;percentID=77
+chr4-04	SwissProt	protein_match	289816	289941	170.000000	-	.	Target=O75437.3 12 53 +;percentID=83
+chr4-04	SwissProt	protein_match	289816	289944	173.000000	-	.	Target=Q8TAF7.2 4 46 +;percentID=72
+chr4-04	SwissProt	protein_match	289816	289938	176.000000	-	.	Target=Q6ZMV8.1 4 44 +;percentID=80
+chr4-04	SwissProt	protein_match	289816	289938	176.000000	-	.	Target=Q03923.3 4 44 +;percentID=80
+chr4-04	SwissProt	protein_match	289816	289938	171.000000	-	.	Target=P17038.4 4 44 +;percentID=80
+chr4-04	SwissProt	protein_match	289816	289941	155.000000	-	.	Target=P21506.3 13 54 +;percentID=66
+chr4-04	SwissProt	protein_match	289816	289941	170.000000	-	.	Target=O75437-2.3 12 53 +;percentID=83
+chr4-04	SwissProt	protein_match	289816	289938	176.000000	-	.	Target=Q6ZN08.2 50 90 +;percentID=82
+chr4-04	SwissProt	protein_match	289816	289947	152.000000	-	.	Target=Q06730.3 9 52 +;percentID=61
+chr4-04	SwissProt	protein_match	289816	289941	168.000000	-	.	Target=Q5R5S6.1 5 46 +;percentID=71
+chr4-04	SwissProt	protein_match	289816	289938	177.000000	-	.	Target=O75346.2 4 44 +;percentID=82
+chr4-04	SwissProt	protein_match	289816	289947	154.000000	-	.	Target=Q5R4K8.2 4 47 +;percentID=63
+chr4-04	SwissProt	protein_match	289816	289947	122.000000	-	.	Target=Q9HCX3.1 11 54 +;percentID=54
+chr4-04	SwissProt	protein_match	289816	289938	178.000000	-	.	Target=P17019.3 4 44 +;percentID=82
+chr4-04	SwissProt	protein_match	289816	289938	176.000000	-	.	Target=Q9Y2Q1.1 4 44 +;percentID=80
+chr4-04	SwissProt	protein_match	289816	289938	180.000000	-	.	Target=Q03936.2 4 44 +;percentID=82
+chr4-04	SwissProt	protein_match	289816	289941	180.000000	-	.	Target=A6NNF4-2.3 3 44 +;percentID=83
+chr4-04	SwissProt	protein_match	289816	289947	142.000000	-	.	Target=Q61751.1 11 54 +;percentID=63
+chr4-04	SwissProt	protein_match	289816	289950	143.000000	-	.	Target=Q2VY69.1 4 48 +;percentID=60
+chr4-04	SwissProt	protein_match	289816	289938	187.000000	-	.	Target=Q3MIS6.1 8 48 +;percentID=85
+chr4-04	SwissProt	protein_match	289816	289941	188.000000	-	.	Target=P0CB33.1 15 56 +;percentID=85
+chr4-04	SwissProt	protein_match	289816	289938	136.000000	-	.	Target=Q6P9Y7-2.1 6 46 +;percentID=60;sequence=MARVSVVFSDVSIAFSQEEWESLDLEQRNLYKDVMMENYHNVASLGCFISKPDVISLLEQGKEPWKVTMGDPGRTNSETKDETNQVFSENGIYEMNLSQWKIMERIGNSGLKSLLLKNGWESRRKQERQEDPQEGYLSQVRHTSERVSSYEKRALTTRQRIHFVEKPYECNECGKAFRVRQQLTFHHRIHTGEKPYECKECGMAFRQTAHLTRHQRLHSGEKLYECKECGQAFIYGPELRAHQKLHTGEKPYTCRECGKAFRVRGQLTLHQRIHTGEKPYVCQECGKAFRQLAHLTRHQKLNVVDRLYECKECGKDFLCGSGLRVHHKLHTGEKPYECKDCGKAFRVRQQLTLHQRSHTGEKPYECTECGKTFSRGYHLILHHR [...]
+chr4-04	SwissProt	protein_match	289816	289938	188.000000	-	.	Target=Q8WV37.1 8 48 +;percentID=85
+chr4-04	SwissProt	protein_match	289816	289941	185.000000	-	.	Target=A6NKZ1.3 15 56 +;percentID=83
+chr4-04	SwissProt	protein_match	289816	289938	181.000000	-	.	Target=A6NN14.3 13 53 +;percentID=82
+chr4-04	SwissProt	protein_match	289816	289941	183.000000	-	.	Target=A6NK21.3 3 44 +;percentID=83
+chr4-04	SwissProt	protein_match	289816	289947	154.000000	-	.	Target=Q8N8J6-2.2 5 48 +;percentID=63
+chr4-04	SwissProt	protein_match	289816	289947	154.000000	-	.	Target=Q8N8J6-3.2 5 48 +;percentID=63
+chr4-04	SwissProt	protein_match	289816	289938	179.000000	-	.	Target=A8MTY0.2 4 44 +;percentID=82
+chr4-04	SwissProt	protein_match	289816	289944	180.000000	-	.	Target=O95780.1 2 44 +;percentID=81
+chr4-04	SwissProt	protein_match	289816	289938	172.000000	-	.	Target=O75373.2 4 44 +;percentID=80
+chr4-04	SwissProt	protein_match	289816	289941	182.000000	-	.	Target=Q14586.2 3 44 +;percentID=80
+chr4-04	SwissProt	protein_match	289816	289938	174.000000	-	.	Target=Q8NEM1.2 13 53 +;percentID=80
+chr4-04	SwissProt	protein_match	289816	289941	195.000000	-	.	Target=O14628-5.2 3 44 +;percentID=90
+chr4-04	SwissProt	protein_match	289816	289941	194.000000	-	.	Target=Q8IYX0.1 15 56 +;percentID=88
+chr4-04	SwissProt	protein_match	289816	289941	177.000000	-	.	Target=Q8TD23.2 3 44 +;percentID=78
+chr4-04	SwissProt	protein_match	289816	289947	199.000000	-	.	Target=O14628-7.2 5 48 +;percentID=88
+chr4-04	SwissProt	protein_match	289817	289891	75.000000	-	.	Target=Q09FC8.2 1 25 +;percentID=60
+chr4-04	SwissProt	protein_match	289819	289851	41.000000	-	.	Target=Q96MU6-2.2 1 11 +;percentID=72
+chr4-04	SwissProt	protein_match	289819	289908	106.000000	-	.	Target=P08042-2.3 4 33 +;percentID=66
+chr4-04	SwissProt	protein_match	289819	289923	110.000000	-	.	Target=Q8BPP0.1 1 35 +;percentID=57
+chr4-04	SwissProt	protein_match	289819	289935	82.000000	-	.	Target=O14978.2 218 256 +;percentID=43;sequence=MASGPGSQEREGLLIVKLEEDCAWSQELPPPDPGPSPEASHLRFRRFRFQEAAGPREALSRLQELCHGWLRPEMRTKEQILELLVLEQFLTILPQEIQSRVQELHPESGEEAVTLVEDMQRELGRLRQQVTNHGRGTEVLLEEPLPLETARESPSFKLEPMETERSPGPRLQELLGPSPQRDPQAVKERALSAPWLSLFPPEGNMEDKEMTGPQLPESLEDVAMYISQEEWGHQDPSKRALSRDTVQESYENVDSLESHIPSQEVPGTQVGQGGKLWDPSVQSCKEGLSPRGPAPGEEKFENLEGVPSVCSENIHPQVLLPDQARGEVPWSPELGRPHDRSQGDWAPPPEGGMEQALAGASSGRELGRPKELQPKKLHLCPLCG [...]
+chr4-04	SwissProt	protein_match	289819	289911	106.000000	-	.	Target=Q96N20.1 3 33 +;percentID=64;sequence=MYFSQEEWELLDPTQKALYNDVMQENYETVISLALFVLPKPKVISCLEQGEEPWVQVSPEFKDSAGKSPTGLKLKNDTENHQPVSLSDLEIQASAGVISKKAKVKVPQKTAGKENHFDMHRVGKWHQDFPVKKRKKLSTWKQELLKLMDRHKKDCAREKPFKCQECGKTFRVSSDLIKHQRIHTEEKPYKCQQCDKRFRWSSDLNKHLTTHQGIKPYKCSWCGKSFSQNTNLHTHQRTHTGEKPFTCHECGKKFSQNSHLIKHRRTHTGEQPYTCSICRRNFSRRSSLLRHQKLHL
+chr4-04	SwissProt	protein_match	289819	289947	123.000000	-	.	Target=Q13106.3 11 53 +;percentID=62
+chr4-04	SwissProt	protein_match	289816	289941	195.000000	-	.	Target=O14628-4.2 3 44 +;percentID=90
+chr4-04	SwissProt	protein_match	289819	289944	134.000000	-	.	Target=Q5REF1.1 46 87 +;percentID=59
+chr4-04	SwissProt	protein_match	289816	289944	220.000000	-	.	Target=Q15928.1 2 44 +;percentID=95
+chr4-04	SwissProt	protein_match	289817	289891	75.000000	-	.	Target=Q09FC8-2.2 1 25 +;percentID=60
+chr4-04	SwissProt	protein_match	289816	289932	160.000000	-	.	Target=Q8NA42.1 8 46 +;percentID=71
+chr4-04	SwissProt	protein_match	289816	289944	210.000000	-	.	Target=Q3SXZ3.1 2 44 +;percentID=90
+chr4-04	SwissProt	protein_match	289816	289947	172.000000	-	.	Target=Q8N9Z0.2 21 64 +;percentID=77
+chr4-04	SwissProt	protein_match	289819	289947	125.000000	-	.	Target=Q9C0F3.2 11 53 +;percentID=55;sequence=MAATLLMAGSQAPVTFEDMAMYLTREEWRPLDAAQRDLYRDVMQENYGNVVSLDFEIRSENEVNPKQEISEDVQFGTTSERPAENAEENPESEEGFESGDRSERQWGDLTAEEWVSYPLQPVTDLLVHKEVHTGIRYHICSHCGKAFSQISDLNRHQKTHTGDRPYKCYECGKGFSRSSHLIQHQRTHTGERPYDCNECGKSFGRSSHLIQHQTIHTGEKPHKCNECGKSFCRLSHLIQHQRTHSGEKPYECEECGKSFSRSSHLAQHQRTHTGEKPYECNECGRGFSERSDLIKHYRVHTGERPYKCDECGKNFSQNSDLVRHRRAHTGEKPYHCNECGENFSRISHLVQHQRTHTGEKPYECNACGKSFSRSSHLITHQKIHT [...]
+chr4-04	SwissProt	protein_match	289816	289947	199.000000	-	.	Target=O14628-6.2 5 48 +;percentID=88
+chr4-04	SwissProt	protein_match	289816	289938	168.000000	-	.	Target=A8MXY4.2 25 65 +;percentID=78
+chr4-04	SwissProt	protein_match	289816	289941	194.000000	-	.	Target=Q05481.1 12 53 +;percentID=88
+chr4-04	SwissProt	protein_match	289816	289938	134.000000	-	.	Target=P51814-6.2 27 67 +;percentID=58
+chr4-04	SwissProt	protein_match	289819	289956	140.000000	-	.	Target=Q9NU63.2 10 55 +;percentID=52;sequence=MAAGEPRSLLFFQKPVTFEDVAVNFTQEEWDCLDASQRVLYQDVMSETFKNLTSVARIFLHKPELITKLEQEEEQWRETRVLQASQAGPPFFCYTCGKCFSRRSYLYSHQFVHNPKLTNSCSQCGKLFRSPKSLSYHRRMHLGERPFCCTLCDKTYCDASGLSRHRRVHLGYRPHSCSVCGKSFRDQSELKRHQKIHQNQEPVDGNQECTLRIPGTQAEFQTPIARSQRSIQGLLDVNHAPVARSQEPIFRTEGPMAQNQASVLKNQAPVTRTQAPITGTLCQDARSNSHPVKPSRLNVFCCPHCSLTFSKKSYLSRHQKAHLTEPPNYCFHCSKSFSSFSRLVRHQQTHWKQKSYLCPICDLSFGEKEGLMDHWRGYKGKDLCQ [...]
+chr4-04	SwissProt	protein_match	289816	289938	178.000000	-	.	Target=Q5JVG8.1 4 44 +;percentID=85
+chr4-04	SwissProt	protein_match	289816	289938	178.000000	-	.	Target=Q86V71.2 4 44 +;percentID=82
+chr4-04	SwissProt	protein_match	289816	289938	178.000000	-	.	Target=Q14593.3 37 77 +;percentID=80
+chr4-04	SwissProt	protein_match	289819	289947	129.000000	-	.	Target=Q6ZNG0.1 8 50 +;percentID=58
+chr4-04	SwissProt	protein_match	289816	290055	167.000000	-	.	Target=Q8N988-2.2 4 83 +;percentID=46
+chr4-04	SwissProt	protein_match	289819	289947	132.000000	-	.	Target=P08042.3 4 46 +;percentID=55
+chr4-04	SwissProt	protein_match	289819	289944	141.000000	-	.	Target=Q5RBX0.1 2 43 +;percentID=59
+chr4-04	SwissProt	protein_match	289819	289944	141.000000	-	.	Target=Q96GC6-2.1 12 53 +;percentID=61
+chr4-04	SwissProt	protein_match	289819	289950	146.000000	-	.	Target=Q8N587.2 37 80 +;percentID=59
+chr4-04	SwissProt	protein_match	289819	289938	141.000000	-	.	Target=P16374.2 14 53 +;percentID=60
+chr4-04	SwissProt	protein_match	289819	289947	146.000000	-	.	Target=Q9UL58.1 161 203 +;percentID=67;sequence=MQPLSKLMAISKPRNLSLREQREVLRADMSWQQETNPVVETHDSEASRQKFRHFQYLKVSGPHEALSQLWELCLQWLRPEIHTKKQIIELLVLEQFLAILPEEVRTWVNLQHPNNSKDMVTLIEDVIEMLEDEDMPCKDSALQMGSIKEKMKAGSRTGKPQEPVTFKDVVVEFSKEEWGQLDSAVKNLYRNVMLENFRNLNSLRKAHLLSKPFESLKLESKKKRWIMEKEIPRKTIFDMKSISGEESSHGVIMTRLTESGHPSSDAWKGENWLYRNQKKWDINLPQEAFIPETIYTEEEDFECSENKKSFDINSVSSICAIQLGIPSRKGSPKCDKFKTYFKFNLDSVGKQHSEYEYGNDLSLSTDIRHQKSHTTMNSYECYQ [...]
+chr4-04	SwissProt	protein_match	289819	289941	153.000000	-	.	Target=Q6JLC9.1 5 45 +;percentID=70
+chr4-04	SwissProt	protein_match	289816	289944	223.000000	-	.	Target=Q8IYB9.1 2 44 +;percentID=95
+chr4-04	SwissProt	protein_match	289819	289953	157.000000	-	.	Target=Q9BR84.1 9 53 +;percentID=60
+chr4-04	SwissProt	protein_match	289819	289947	156.000000	-	.	Target=P59923.1 231 273 +;percentID=67;sequence=MPPGRWHAAYPAQAQSSRERGRLQTVKKEEEDESYTPVQAARPQTLNRPGQELFRQLFRQLRYHESSGPLETLSRLRELCRWWLRPDVLSKAQILELLVLEQFLSILPGELRVWVQLHNPESGEEAVALLEELQRDLDGTSWRDPGPAQSPDVHWMGTGALRSAQIWSLASPLRSSSALGDHLEPPYEIEARDFLAGQSDTPAAQMPALFPREGCPGDQVTPTRSLTAQLQETMTFKDVEVTFSQDEWGWLDSAQRNLYRDVMLENYRNMASLVGPFTKPALISWLEAREPWGLNMQAAQPKGNPVAAPTGDDLQSKTNKFILNQEPLEEAETLAVSSGCPATSVSEGIGLRESFQQKSRQKDQCENPIQVRVKKEETNFSHR [...]
+chr4-04	SwissProt	protein_match	289816	289947	168.000000	-	.	Target=Q9P2J8.3 51 94 +;percentID=65
+chr4-04	SwissProt	protein_match	289819	289956	160.000000	-	.	Target=Q8R2V3.2 213 258 +;percentID=63
+chr4-04	SwissProt	protein_match	289819	289947	156.000000	-	.	Target=Q5REA0.1 3 45 +;percentID=69;sequence=MAQGLVTFADVAIDFSQEEWACLNSAQRDLYWDVMLENYSNLVSLDLESAYENKSLPTEKNIHEIRASKRNSDRRSKSLGRNWICEGMLERPQRSRGRYVNQMIINYVKRPATREGTPPRTHQRHHKENSFECKDCGKAFSRGYQLSQHQKIHTGEKPYECKECKKAFRWGNQLTQHQKIHTGEKPYECKDCGKAFRWGSSLVIHKRIHTGEKPYECKDCGKAFRRGDELTQHQRFHTGEKDYECKDCGKTFSRVYKLIQHKRIHSGEKPYECKDCGKAFICGSSLIQHKRIHTGEKPYECQECGKAFTRVNYLTQHQKIHTGEKPHECKECGKAFRWGSSLVKHERIHTGEKPYKCTECGKAFNCGYHLTQHERIHTGETPYKCK [...]
+chr4-04	SwissProt	protein_match	289816	289941	192.000000	-	.	Target=Q96JC4.1 15 56 +;percentID=85
+chr4-04	SwissProt	protein_match	289819	289947	156.000000	-	.	Target=Q9NQX6.1 3 45 +;percentID=69;sequence=MAQGLVTFADVAIDFSQEEWACLNSAQRDLYWDVMLENYSNLVSLDLESAYENKSLPTEKNIHEIRASKRNSDRRSKSLGRNWICEGTLERPQRSRGRYVNQMIINYVKRPATREGTPPRTHQRHHKENSFECKDCGKAFSRGYQLSQHQKIHTGEKPYECKECKKAFRWGNQLTQHQKIHTGEKPYECKDCGKAFRWGSSLVIHKRIHTGEKPYECKDCGKAFRRGDELTQHQRFHTGEKDYECKDCGKTFSRVYKLIQHKRIHSGEKPYECKDCGKAFICGSSLIQHKRIHTGEKPYECQECGKAFTRVNYLTQHQKIHTGEKPHECKECGKAFRWGSSLVKHERIHTGEKPYKCTECGKAFNCGYHLTQHERIHTGETPYKCK [...]
+chr4-04	SwissProt	protein_match	289816	289938	176.000000	-	.	Target=Q03938.2 4 44 +;percentID=82
+chr4-04	SwissProt	protein_match	289819	289947	138.000000	-	.	Target=Q16587-3.2 40 82 +;percentID=58
+chr4-04	SwissProt	protein_match	289819	289947	161.000000	-	.	Target=Q8NB42.1 11 53 +;percentID=69
+chr4-04	SwissProt	protein_match	289819	289947	170.000000	-	.	Target=Q8TAQ5.1 3 45 +;percentID=72
+chr4-04	SwissProt	protein_match	289819	289938	170.000000	-	.	Target=Q03923-2.3 4 43 +;percentID=80
+chr4-04	SwissProt	protein_match	289819	289998	164.000000	-	.	Target=A8MT65.2 20 82 +;percentID=56;Gap=M3 D1 M13 I4 M43 
+chr4-04	SwissProt	protein_match	289819	289941	174.000000	-	.	Target=Q8N7M2.3 72 112 +;percentID=78
+chr4-04	SwissProt	protein_match	289819	289941	180.000000	-	.	Target=Q5R5Q6.1 5 45 +;percentID=80
+chr4-04	SwissProt	protein_match	289819	289938	174.000000	-	.	Target=Q03936-3.2 4 43 +;percentID=82
+chr4-04	SwissProt	protein_match	289819	289947	171.000000	-	.	Target=Q86TJ5.1 42 84 +;percentID=69
+chr4-04	SwissProt	protein_match	289819	289947	200.000000	-	.	Target=Q96IR2.2 5 47 +;percentID=88
+chr4-04	SwissProt	protein_match	289819	289947	200.000000	-	.	Target=Q5VIY5.1 5 47 +;percentID=88
+chr4-04	SwissProt	protein_match	289819	289938	173.000000	-	.	Target=Q09FC8-5.2 6 45 +;percentID=80
+chr4-04	SwissProt	protein_match	289819	289947	165.000000	-	.	Target=A2VDQ7.1 3 45 +;percentID=72
+chr4-04	SwissProt	protein_match	289819	289947	200.000000	-	.	Target=Q7L2R6.2 5 47 +;percentID=88
+chr4-04	SwissProt	protein_match	289819	289947	200.000000	-	.	Target=A2RRD8.1 5 47 +;percentID=88
+chr4-04	SwissProt	protein_match	289819	289941	174.000000	-	.	Target=Q95K52.1 48 88 +;percentID=78
+chr4-04	SwissProt	protein_match	289819	289953	125.000000	-	.	Target=Q9BWM5.1 23 67 +;percentID=57;sequence=MAAAVLRDSTSVPVTAEAKLMGFTQGCVTFEDVAIYFSQEEWGLLDEAQRLLYRDVMLENFALITALVCWHGMEDEETPEQSVSVEGVPQVRTPEASPSTQKIQSCDMCVPFLTDILHLTDLPGQELYLTGACAVFHQDQKHHSAEKPLESDMDKASFVQCCLFHESGMPFTSSEVGKDFLAPLGILQPQAIANYEKPNKISKCEEAFHVGISHYKWSQCRRESSHKHTFFHPRVCTGKRLYESSKCGKACCCECSLVQLQRVHPGERPYECSECGKSFSQTSHLNDHRRIHTGERPYVCGQCGKSFSQRATLIKHHRVHTGERPYECGECGKSFSQSSNLIEHCRIHTGERPYECDECGKAFGSKSTLVRHQRTHTGEKPYECG [...]
+chr4-04	SwissProt	protein_match	289819	289944	141.000000	-	.	Target=P17097.1 2 43 +;percentID=59
+chr4-04	SwissProt	protein_match	289819	289947	200.000000	-	.	Target=Q6ZN06.2 5 47 +;percentID=88
+chr4-04	SwissProt	protein_match	289816	289941	191.000000	-	.	Target=A6NP11.3 3 44 +;percentID=85
+chr4-04	SwissProt	protein_match	289819	289941	183.000000	-	.	Target=Q7Z3V5.3 5 45 +;percentID=82
+chr4-04	SwissProt	protein_match	289855	289947	76.000000	-	.	Target=Q5R741.1 152 182 +;percentID=41;sequence=MNSSLTVQRRGSDAELGPWVMAARSKDAALSQRDGVLPVKVEEDSPGSWEPSYPAAWPDPETSRLHFRQLRYQEVAGPEEALSRLRELCRRWLRPELLSKEQILELLVLEQFLTILPEELQAWVREHCPESGEEAVAVVRALQRALDGTSPQGMVTFEDMAVSLTWEEWERLDPARRDFCRESAQKDSGSTVPPSLESRVENKELIPMQQILEEVEPQGQLQEAFQGKHPLFSKCGSTHEDRVEKQSGNPLPLKLENSAEAEGLNSISDVNKNGSIEGEDSKNNELQNSARCSNLVLCQHIPKAERPTDGEEHGNKCKQSFHMVAWHVLKPHKSDSGDSFHHSSFFETQRQLHEERPYKCGNCGKSFKQRSDLFRHQRIHTGEK [...]
+chr4-04	SwissProt	protein_match	289870	289947	52.000000	-	.	Target=Q9Z1D9.2 132 157 +;percentID=42;sequence=MAAGSGVVPPPLGAGLCTVKVEEDSPGNQESSGSGDWQNPETSRKQFRQLRYQEVAGPEEALSRLWELCRRWLRPELLSKEQIMELLVLEQFLTILPQELQAYVRDHSPESGEEAAALARTLQRALDRASPQGFMTFKDVAESLTWEEWEQLAAARKGFCEESTKDAGSTVVPGLETRTVNTDVILKQEILKEAEPQAWLQEVSQGMVPALTKCGDPSEDWEEKLPKAAVLLQLQGSEEQGRTAIPLLIGVSREERDSKNNESENSGSSVLGQHIQTAEGLGTNSQCGDDHKQGFHVKCHSVKPHSSVDSAVGLLETQRQFQEDKPYKCDSCEKGFRQRSDLFKHQRIHTGEKPYQCQECGKRFSQSAALVKHQRTHTGEKPYA [...]
+chr4-04	SwissProt	protein_match	289819	289947	125.000000	-	.	Target=Q5R5Y7.1 11 53 +;percentID=55;sequence=MAATLLMAGSQAPVTFEDMAMYLTREEWRPLDAAQRDLYRDVMQENYGNVVSLDFEIRSENEVNPKQEISEDVQFGTTSERPAENAEENPESEEGFESGDRSERQWGDLTAEEWVSYPLQQVTDLLVHKEVHTGIRYHICSHCGKAFSQISDLNRHQKTHTGDRPYKCYECGKGFSRSSHLIQHQRTYTGERPYDCNECGKSFGRSSHLIQHQTIHTGEKPHKCNECGKSFCRLSHLIQHQRTHSGEKPYECEECGKSFSRSSHLAQHQRTHTGEKPYECNECGRGFSERSDLIKHYRVHTGERPYKCDECGKNFSQNSDLVRHRRAHTGEKPYHCNECGENFSRISHLVQHQRTHTGEKPYECNACGKSFSRSSHLITHQKIHT [...]
+chr4-04	SwissProt	protein_match	290099	290131	40.000000	+	.	Target=B2RUI1.2 128 138 +;percentID=54
+chr4-04	SwissProt	protein_match	290085	290165	55.000000	+	.	Target=Q571J5.2 174 200 +;percentID=51
+chr4-04	SwissProt	protein_match	290168	290233	45.000000	+	.	Target=O88553.1 111 132 +;percentID=45
+chr4-04	SwissProt	protein_match	289816	289941	189.000000	-	.	Target=A8MUV8.3 3 44 +;percentID=83
+chr4-04	SwissProt	protein_match	289816	289938	177.000000	-	.	Target=Q08AN1.2 7 47 +;percentID=78
+chr4-04	SwissProt	protein_match	289816	289944	178.000000	-	.	Target=Q96H40.3 2 44 +;percentID=79
+chr4-04	SwissProt	protein_match	290717	290743	41.000000	+	.	Target=Q4R882.1 112 120 +;percentID=55;sequence=MATIDLSHGFFSREPVCPFEEKTKAERMVEDYLANSYQDSVTFDDVAVDFTPEEWALLDTTEKYLYRDVMLENYMNLASVEWEIQPRIKRSSFQQGFLKNQIFSGIQMTRGYSGWKLCDCKNCGEVFSEQFCLKTHMRAHNGGNTSEGNCYGKDVLSVHKEASIGQELSKFNPCGKVFTLTPGLAVHLEVLNARQPYKCKECGKGFKYFASLDNHMGIHTDEKLCEFQECERAITPSSHLKQCVAVHTGKKSKKTKKYGKSFTNFSQLYAHVKTHKGEKSFECKECGRSFRNSSCLNDHIQIHTGIKPHKCTYCGKAFTRSTQLTEHVRTHTGIKPYECKECGQAFAQYSGLSIHIRSHSGKKPYQCKECGKAFTTSTSLIQHI [...]
+chr4-04	SwissProt	protein_match	290184	290228	44.000000	+	.	Target=Q7TSH9.1 95 109 +;percentID=46
+chr4-04	SwissProt	protein_match	297596	297622	40.000000	-	.	Target=P51814-3.2 337 345 +;percentID=66
+chr4-04	SwissProt	protein_match	291510	291557	40.000000	-	.	Target=Q8TAQ5.1 320 335 +;percentID=56
+chr4-04	SwissProt	protein_match	291712	291753	41.000000	+	.	Target=Q2KI58.1 406 419 +;percentID=64
+chr4-04	SwissProt	protein_match	297596	297622	40.000000	-	.	Target=P51814-8.2 291 299 +;percentID=66
+chr4-04	SwissProt	protein_match	297709	297756	44.000000	+	.	Target=Q8TAF7.2 190 205 +;percentID=56
+chr4-04	SwissProt	protein_match	297596	297622	40.000000	-	.	Target=P51814-7.2 293 301 +;percentID=66
+chr4-04	SwissProt	protein_match	297596	297622	41.000000	-	.	Target=O43296.1 315 323 +;percentID=66
+chr4-04	SwissProt	protein_match	291507	291563	52.000000	-	.	Target=O95780-2.1 192 210 +;percentID=52
+chr4-04	SwissProt	protein_match	291712	291768	40.000000	+	.	Target=Q96NG5.1 182 200 +;percentID=47
+chr4-04	SwissProt	protein_match	298121	298144	41.000000	-	.	Target=B2KFW1-2.2 118 125 +;percentID=75
+chr4-04	SwissProt	protein_match	298646	298714	44.000000	+	.	Target=Q0VDQ9.1 42 65 +;percentID=45;Gap=M20 I1 M3 ;sequence=MDSSCLNATTKMLATAPARGNVMSTSKPLAFSIERIMARTPEPKALPVPHFLQGAVPKGDPKHSLHLNSSIPCMIPFVPVAYDTNSKAGVNGSEPRKASLEVPAPPAVAPSAPAFSCSDLLNCALSLKGDLARDALPLQQYKLVRPRVVNHSSFHAMGALCYLNRGDGPCHPAASVNIHPVASYFLSSPLHPQPKTYLAERNKLVVPAVEKLPSGVAFKDLSQAQLQHYMKESAQLLSEKIAFKTSDFSRGSPNAKPKVFTCEVCGKVFNAHYNLTRHMPVHTGARPFVCKVCGKGFRQASTLCRHKIIHTQEKPHKCNQCGKAFNRSSTLNTHTRIHAGYKPFVCEFCGKGFHQKGNYKNHKLTHSGEKQ [...]
+chr4-04	SwissProt	protein_match	298121	298144	41.000000	-	.	Target=B2KFW1.2 547 554 +;percentID=75
+chr4-04	SwissProt	protein_match	298766	298810	40.000000	-	.	Target=Q2M3W8-2.1 11 25 +;percentID=33
+chr4-04	SwissProt	protein_match	297721	297774	40.000000	+	.	Target=Q9NU63-3.2 180 197 +;percentID=44;sequence=MFEQLKPIEPVQKTLPWVGEVAATLQEAMKRDCWREARVKKKPVTFEDVAVNFTQEEWDCLDASQRVLYQDVMSETFKNLTSVARIFLHKPELITKLEQEEEQWREFVHLPNTEGLSEGKKKELREQHPSLRDEGTSDDKVFLACRGAGQCPLSAPAGTMDRTRVLQASQAGPPFFCYTCGKCFSRRSYLYSHQFVHNPKLTNSCSQCGKLFRSPKSLSYHRRMHLGERPFCCTLCDKTYCDASGLSRHRRVHLGYRPHSCSVCGKSFRDQSELKRHQKIHQNQEPVDGNQECTLRIPGTQAEFQTPIARSQRSIQGLLDVNHAPVARSQEPIFRTEGPMAQNQASVLKNQAPVTRTQAPITGTLCQDARSNSHPVKPSRLN [...]
+chr4-04	SwissProt	protein_match	291712	291753	41.000000	+	.	Target=Q5REF1.1 451 464 +;percentID=64
+chr4-04	SwissProt	protein_match	291722	291781	40.000000	-	.	Target=Q8WTR7.1 108 127 +;percentID=45
+chr4-04	SwissProt	protein_match	302526	302555	41.000000	+	.	Target=Q9NZV7.1 125 134 +;percentID=80
+chr4-04	SwissProt	protein_match	298766	298816	46.000000	+	.	Target=O14709.1 146 162 +;percentID=52
+chr4-04	SwissProt	protein_match	297596	297622	40.000000	-	.	Target=P51814-5.2 361 369 +;percentID=66
+chr4-04	SwissProt	protein_match	302547	302576	40.000000	-	.	Target=P52742.2 52 61 +;percentID=70
+chr4-04	SwissProt	protein_match	303086	303127	41.000000	+	.	Target=Q2TL60.1 105 118 +;percentID=50
+chr4-04	SwissProt	protein_match	292226	292291	44.000000	-	.	Target=A2T812.1 207 227 +;percentID=45;Gap=M17 D1 M4 
+chr4-04	SwissProt	protein_match	246579	246674	45.000000	-	.	Target=P16374.2 302 332 +;percentID=40;Gap=M15 D1 M16 
+chr4-04	SwissProt	protein_match	246717	246743	40.000000	+	.	Target=Q8N4W9.2 166 174 +;percentID=66
+chr4-04	SwissProt	protein_match	305561	305620	42.000000	-	.	Target=Q9UJW7.2 374 393 +;percentID=40
+chr4-04	SwissProt	protein_match	246857	246943	42.000000	+	.	Target=Q8WTR7.1 266 295 +;percentID=48;Gap=M5 I1 M7 D1 M7 I1 M9 
+chr4-04	SwissProt	protein_match	247333	247605	306.000000	+	.	Target=Q03923-2.3 40 129 +;percentID=62;Gap=M5 D1 M85 
+chr4-04	SwissProt	protein_match	247333	247605	309.000000	+	.	Target=Q03936-3.2 40 129 +;percentID=64;Gap=M5 D1 M85 
+chr4-04	SwissProt	protein_match	247336	247599	247.000000	+	.	Target=O14628.2 144 230 +;percentID=59;Gap=M57 D1 M30 
+chr4-04	SwissProt	protein_match	247342	247614	324.000000	+	.	Target=A6NGH9.3 42 132 +;percentID=65
+chr4-04	SwissProt	protein_match	247345	247464	101.000000	+	.	Target=Q8IW36.3 86 125 +;percentID=47
+chr4-04	SwissProt	protein_match	247345	247464	101.000000	+	.	Target=Q8IW36-2.3 86 125 +;percentID=47
+chr4-04	SwissProt	protein_match	247345	247599	242.000000	+	.	Target=O14628-5.2 124 207 +;percentID=58;Gap=M54 D1 M30 
+chr4-04	SwissProt	protein_match	247345	247599	242.000000	+	.	Target=O14628-6.2 128 211 +;percentID=58;Gap=M54 D1 M30 
+chr4-04	SwissProt	protein_match	247345	247605	296.000000	+	.	Target=P52744.2 12 98 +;percentID=65
+chr4-04	SwissProt	protein_match	302744	302794	43.000000	+	.	Target=Q6NX49.1 357 373 +;percentID=41
+chr4-04	SwissProt	protein_match	247345	247605	297.000000	+	.	Target=Q68DY1.2 75 161 +;percentID=63
+chr4-04	SwissProt	protein_match	247345	247605	301.000000	+	.	Target=O75373.2 75 161 +;percentID=65
+chr4-04	SwissProt	protein_match	247345	247614	316.000000	+	.	Target=P35789-2.4 75 166 +;percentID=67;Gap=M87 I2 M3 
+chr4-04	SwissProt	protein_match	247345	247614	316.000000	+	.	Target=P35789.4 75 166 +;percentID=67;Gap=M87 I2 M3 
+chr4-04	SwissProt	protein_match	247345	247614	316.000000	+	.	Target=P35789-3.4 75 166 +;percentID=67;Gap=M87 I2 M3 
+chr4-04	SwissProt	protein_match	247345	247605	321.000000	+	.	Target=Q05481.1 84 170 +;percentID=64
+chr4-04	SwissProt	protein_match	247345	247614	322.000000	+	.	Target=A6NK31.3 137 226 +;percentID=66
+chr4-04	SwissProt	protein_match	247345	247605	330.000000	+	.	Target=Q6ZN08.2 121 207 +;percentID=68
+chr4-04	SwissProt	protein_match	247348	247605	292.000000	+	.	Target=A8MTY0.2 76 161 +;percentID=63
+chr4-04	SwissProt	protein_match	247348	247605	308.000000	+	.	Target=O75437.3 85 170 +;percentID=66
+chr4-04	SwissProt	protein_match	247348	247605	308.000000	+	.	Target=O75437-2.3 85 170 +;percentID=66
+chr4-04	SwissProt	protein_match	247348	247614	326.000000	+	.	Target=A6NNF4.3 76 164 +;percentID=64
+chr4-04	SwissProt	protein_match	247348	247614	338.000000	+	.	Target=A8MUP4.2 37 125 +;percentID=70
+chr4-04	SwissProt	protein_match	247351	247602	243.000000	+	.	Target=P17019.3 77 155 +;percentID=55;Gap=M33 D5 M46 
+chr4-04	SwissProt	protein_match	247351	247605	254.000000	+	.	Target=Q8IYX0.1 89 172 +;percentID=62;Gap=M37 D1 M47 
+chr4-04	SwissProt	protein_match	247351	247605	264.000000	+	.	Target=Q03938.2 77 161 +;percentID=60
+chr4-04	SwissProt	protein_match	247351	247605	274.000000	+	.	Target=Q8IYN0.1 109 193 +;percentID=62
+chr4-04	SwissProt	protein_match	247351	247605	283.000000	+	.	Target=Q96N22.1 8 89 +;percentID=64;Gap=M37 D3 M45 
+chr4-04	SwissProt	protein_match	247351	247605	284.000000	+	.	Target=Q6ZMV8.1 77 161 +;percentID=61
+chr4-04	SwissProt	protein_match	247351	247614	284.000000	+	.	Target=A8MXY4.2 98 185 +;percentID=59
+chr4-04	SwissProt	protein_match	247351	247605	285.000000	+	.	Target=P17038-2.4 72 156 +;percentID=61
+chr4-04	SwissProt	protein_match	247351	247605	285.000000	+	.	Target=P17038.4 78 162 +;percentID=61
+chr4-04	SwissProt	protein_match	247351	247605	286.000000	+	.	Target=A6NK75.3 45 129 +;percentID=64
+chr4-04	SwissProt	protein_match	247351	247605	286.000000	+	.	Target=Q8N7Q3.2 45 129 +;percentID=60
+chr4-04	SwissProt	protein_match	247351	247605	287.000000	+	.	Target=Q96N38-2.1 49 133 +;percentID=63
+chr4-04	SwissProt	protein_match	247351	247605	287.000000	+	.	Target=Q96N38.1 49 133 +;percentID=63
+chr4-04	SwissProt	protein_match	247351	247605	290.000000	+	.	Target=Q9Y2Q1.1 77 161 +;percentID=64
+chr4-04	SwissProt	protein_match	247351	247605	293.000000	+	.	Target=O43345.1 77 161 +;percentID=64
+chr4-04	SwissProt	protein_match	247351	247608	294.000000	+	.	Target=Q8NEM1.2 86 171 +;percentID=66
+chr4-04	SwissProt	protein_match	247351	247614	294.000000	+	.	Target=A6NK21.3 77 164 +;percentID=62
+chr4-04	SwissProt	protein_match	247351	247614	294.000000	+	.	Target=Q86V71.2 77 164 +;percentID=60
+chr4-04	SwissProt	protein_match	247351	247605	296.000000	+	.	Target=Q8TF32.2 108 192 +;percentID=65
+chr4-04	SwissProt	protein_match	247351	247605	296.000000	+	.	Target=Q68DY1-2.2 1 85 +;percentID=63
+chr4-04	SwissProt	protein_match	297721	297774	40.000000	+	.	Target=Q9NU63.2 96 113 +;percentID=44
+chr4-04	SwissProt	protein_match	247351	247605	303.000000	+	.	Target=Q8TD23.2 77 160 +;percentID=65;Gap=M37 D1 M47 
+chr4-04	SwissProt	protein_match	247351	247605	303.000000	+	.	Target=Q03923.3 78 162 +;percentID=64
+chr4-04	SwissProt	protein_match	247351	247605	306.000000	+	.	Target=Q9P255.2 45 129 +;percentID=67
+chr4-04	SwissProt	protein_match	247351	247605	306.000000	+	.	Target=Q03936.2 77 161 +;percentID=67
+chr4-04	SwissProt	protein_match	247351	247605	306.000000	+	.	Target=Q03936-2.2 8 92 +;percentID=67
+chr4-04	SwissProt	protein_match	303442	303477	40.000000	+	.	Target=Q9P255.2 30 41 +;percentID=50
+chr4-04	SwissProt	protein_match	247351	247605	311.000000	+	.	Target=Q3SXZ3-2.1 45 127 +;percentID=71;Gap=M35 D2 M48 
+chr4-04	SwissProt	protein_match	247351	247605	311.000000	+	.	Target=Q3SXZ3.1 77 159 +;percentID=71;Gap=M35 D2 M48 
+chr4-04	SwissProt	protein_match	247351	247602	316.000000	+	.	Target=Q96H40.3 77 160 +;percentID=66
+chr4-04	SwissProt	protein_match	247351	247605	323.000000	+	.	Target=Q14593-2.3 45 129 +;percentID=71
+chr4-04	SwissProt	protein_match	247351	247605	323.000000	+	.	Target=Q14593.3 110 194 +;percentID=71
+chr4-04	SwissProt	protein_match	247351	247605	359.000000	+	.	Target=Q8TF20.2 1 85 +;percentID=78;sequence=MCSHFTQDFLPVQGIEDSFHKLILRRYEKCGHDNLQLRKGCKSMNVCKVQKGVYNGINKCLSNTQSKIFQCNARVKVFSKFANSNKDKTRHTGEKHFKCNECGKSFQKFSDLTQHKGIHAGEKPYTCEERGKDFGWYTDLNQHKKIHTGEKPYKCEECGKAFNRSTNLTAHKRIHNREKAYTGEDRDRAFGWSTNLNEYKKIHTGDKPYKCKECGKAFMHSSHLNKHEKIHTGEKPYKCKECGKVISSSSSFAKHKRIHTGEKPFKCLECGKAFNISTTLTKHRRIHTGEKPYTCEVCGKAFRQSANLYVHRRIHTGEKPYTCGECGKTFRQSANLYVHRRIHTGEKPYKCEDCGKAFGRYTALNQHKKIHTGEKPYKCEECGKAF [...]
+chr4-04	SwissProt	protein_match	300956	301000	42.000000	-	.	Target=Q06732.2 450 464 +;percentID=46
+chr4-04	SwissProt	protein_match	247351	247605	366.000000	+	.	Target=Q8IYB9.1 77 161 +;percentID=81
+chr4-04	SwissProt	protein_match	247351	247605	371.000000	+	.	Target=Q15928.1 77 161 +;percentID=80
+chr4-04	SwissProt	protein_match	247354	247605	273.000000	+	.	Target=P0CB33.1 90 173 +;percentID=63
+chr4-04	SwissProt	protein_match	305582	305647	45.000000	+	.	Target=Q7Z3V5.3 503 524 +;percentID=45
+chr4-04	SwissProt	protein_match	305582	305647	45.000000	+	.	Target=Q5R5Q6.1 502 523 +;percentID=45
+chr4-04	SwissProt	protein_match	247357	247614	238.000000	+	.	Target=O95780.1 79 166 +;percentID=57;Gap=M83 I2 M3 
+chr4-04	SwissProt	protein_match	247354	247605	279.000000	+	.	Target=A6NP11.3 78 161 +;percentID=64
+chr4-04	SwissProt	protein_match	247357	247599	241.000000	+	.	Target=O14628-4.2 79 158 +;percentID=61;Gap=M50 D1 M30 
+chr4-04	SwissProt	protein_match	247357	247614	238.000000	+	.	Target=O95780-2.1 3 90 +;percentID=57;Gap=M83 I2 M3 
+chr4-04	SwissProt	protein_match	247357	247605	247.000000	+	.	Target=A6NF79.3 91 172 +;percentID=61;Gap=M50 D1 M32 
+chr4-04	SwissProt	protein_match	247357	247599	241.000000	+	.	Target=O14628-7.2 83 162 +;percentID=61;Gap=M50 D1 M30 
+chr4-04	SwissProt	protein_match	247357	247605	252.000000	+	.	Target=Q96JC4.1 91 173 +;percentID=61
+chr4-04	SwissProt	protein_match	247357	247605	247.000000	+	.	Target=A6NKZ1.3 91 172 +;percentID=61;Gap=M50 D1 M32 
+chr4-04	SwissProt	protein_match	247357	247614	280.000000	+	.	Target=O75346.2 79 163 +;percentID=62;Gap=M9 D1 M76 
+chr4-04	SwissProt	protein_match	247357	247605	266.000000	+	.	Target=Q9H8G1.2 111 193 +;percentID=60
+chr4-04	SwissProt	protein_match	247357	247614	284.000000	+	.	Target=A6NN14.3 88 173 +;percentID=60
+chr4-04	SwissProt	protein_match	247357	247614	280.000000	+	.	Target=O75346-2.2 3 87 +;percentID=62;Gap=M9 D1 M76 
+chr4-04	SwissProt	protein_match	247357	247605	303.000000	+	.	Target=Q5JVG8.1 79 161 +;percentID=68
+chr4-04	SwissProt	protein_match	247360	247584	168.000000	+	.	Target=A8MUV8.3 80 154 +;percentID=45
+chr4-04	SwissProt	protein_match	247360	247614	281.000000	+	.	Target=Q9UII5.1 11 95 +;percentID=62
+chr4-04	SwissProt	protein_match	247360	247605	290.000000	+	.	Target=Q03924-2.3 16 97 +;percentID=67
+chr4-04	SwissProt	protein_match	305582	305650	42.000000	+	.	Target=Q6JLC9.1 385 407 +;percentID=43
+chr4-04	SwissProt	protein_match	247360	247605	290.000000	+	.	Target=Q03924.3 16 97 +;percentID=67
+chr4-04	SwissProt	protein_match	289819	289947	129.000000	-	.	Target=Q5RB33.1 8 50 +;percentID=58
+chr4-04	SwissProt	protein_match	247480	247605	137.000000	+	.	Target=Q6ZR52.3 1 42 +;percentID=64
+chr4-04	SwissProt	protein_match	247540	247605	43.000000	+	.	Target=Q5RB30.1 517 538 +;percentID=45
+chr4-04	SwissProt	protein_match	247540	247605	43.000000	+	.	Target=Q52M93.1 517 538 +;percentID=45
+chr4-04	SwissProt	protein_match	247540	247599	44.000000	+	.	Target=P51522.2 200 219 +;percentID=45
+chr4-04	SwissProt	protein_match	297721	297774	40.000000	+	.	Target=Q9NU63-2.2 160 177 +;percentID=44;sequence=MFEQLKPIEPRDCWREARVKKKPVTFEDVAVNFTQEEWDCLDASQRVLYQDVMSETFKNLTSVARIFLHKPELITKLEQEEEQWREFVHLPNTEGLSEGKKKELREQHPSLRDEGTSDDKVFLACRGAGQCPLSAPAGTMDRTRVLQASQAGPPFFCYTCGKCFSRRSYLYSHQFVHNPKLTNSCSQCGKLFRSPKSLSYHRRMHLGERPFCCTLCDKTYCDASGLSRHRRVHLGYRPHSCSVCGKSFRDQSELKRHQKIHQNQEPVDGNQECTLRIPGTQAEFQTPIARSQRSIQGLLDVNHAPVARSQEPIFRTEGPMAQNQASVLKNQAPVTRTQAPITGTLCQDARSNSHPVKPSRLNVFCCPHCSLTFSKKSYLSRH [...]
+chr4-04	SwissProt	protein_match	247540	247599	44.000000	+	.	Target=P51522-2.2 40 59 +;percentID=45
+chr4-04	SwissProt	protein_match	305582	305650	47.000000	+	.	Target=Q86YE8-3.3 161 183 +;percentID=47;sequence=MESCSVAQAGVQWPDLSSLQPPPPRFKQFSCHSLQVAGITDLDLQCEIISYIEVPTYETDISSTQLQSIYKREKLYECKKCQKKFSSGYQLILHHRFHVIERPYECKECGKNFRSGYQLTLHQRFHTGEKPYECTECGKNFRSGYQLTVHQRFHTGEKTYECRQCGKAFIYASHIVQHERIHTGGKPYECQECGRAFSQGGHLRIHQRVHTGEKPYKCKECGKTFSRRSNLVEHGQFHTDEKPYICEKCGKAFRRGHQLTVHQRVHTGKKPYECKECGKGYTTASYFLLHQRIHKGGKPYECKECKKTFTLYRNLTRHQNIHTGEKLFECKQCGKTYTTGSKLFQHQKTHTGEKPYECKECGKAFSLYGYLKQHQKIHTGMK [...]
+chr4-04	SwissProt	protein_match	249352	249384	45.000000	+	.	Target=Q92670.2 48 58 +;percentID=45
+chr4-04	SwissProt	protein_match	249793	249828	40.000000	-	.	Target=Q96SE7.1 298 309 +;percentID=58
+chr4-04	SwissProt	protein_match	249942	250007	45.000000	-	.	Target=Q5HY98.1 154 175 +;percentID=40;sequence=MAQLRRGHLTFRDVAIEFSQEEWKCLDPVQKALYRDVMLENYRNLVSLGICLPDLSIISMMKQRTEPWTVENEMKVAKNPDRWEGIKDINTGRSCAVRSKAGNKPITNQLGLTFQLPLPELEIFQGEGKIYECNQVQKFISHSSSVSPLQRIYSGVKTHIFNKHRNDFVDFPLLSQEQKAHIRRKPYECNEQGKVFRVSSSLPNHQVIHTADKPNRCHECGKTVRDKSGLAEHWRIRTGEKPYKCKECGKLFNRIAYLARHEKVHTGESPYKCNECGKVFSRITYLVRHQKIHTREKPHKCNKCGKVYSSSSYLAQHWRIHTGEKLYKCNKCGKEFSGHSSLTTHLLIHTGEKPYKCKECDKAFRHKFSLTVHQRNHNGEKPYK [...]
+chr4-04	SwissProt	protein_match	305585	305659	45.000000	+	.	Target=Q6P9A3-2.1 434 459 +;percentID=46;Gap=M22 I1 M3 
+chr4-04	SwissProt	protein_match	249960	250001	43.000000	-	.	Target=Q08AN1.2 85 98 +;percentID=50
+chr4-04	SwissProt	protein_match	250061	250135	43.000000	+	.	Target=P17031.3 227 250 +;percentID=48;Gap=M7 D1 M17 
+chr4-04	SwissProt	protein_match	251286	251354	40.000000	-	.	Target=A8MUP4.2 471 494 +;percentID=45;Gap=M5 I1 M18 
+chr4-04	SwissProt	protein_match	251286	251354	44.000000	-	.	Target=A8MUV8.3 229 252 +;percentID=41;Gap=M5 I1 M18 
+chr4-04	SwissProt	protein_match	251286	251354	45.000000	-	.	Target=Q9NSJ1.2 392 415 +;percentID=45;Gap=M5 I1 M18 
+chr4-04	SwissProt	protein_match	305680	305709	40.000000	-	.	Target=Q9P2J8-2.3 277 286 +;percentID=70
+chr4-04	SwissProt	protein_match	251286	251354	45.000000	-	.	Target=A6NK31.3 519 542 +;percentID=45;Gap=M5 I1 M18 
+chr4-04	SwissProt	protein_match	251286	251354	45.000000	-	.	Target=A6NGH9.3 562 585 +;percentID=45;Gap=M5 I1 M18 
+chr4-04	SwissProt	protein_match	251718	251750	40.000000	-	.	Target=Q6ZN19.1 455 465 +;percentID=63
+chr4-04	SwissProt	protein_match	251316	251360	42.000000	+	.	Target=P18716.1 14 28 +;percentID=46;sequence=TGEKPFTCNECGKFFSCTSWLNVHLRSHTGEKPFTCSECGKFFSCMSRLKVHFRGHTGEKPSACTECEKCFSSISQRNIHIRSHTGDKSYTCTVCGKIFTRISQFNVHVRSHTGEKPFKCTECGKSFICNSQLNLHLRFHTGEKLTTCSECGKCFTHTSHLNVHFRVHTGEKPFTCTECGKCLTRQYQLTEHSYLHKGEKPYTCTECGKCFTRRYHLTEHSYLHTGEKPFTCTECGKGFTRRSHLKAHSHTH
+chr4-04	SwissProt	protein_match	252209	252244	40.000000	-	.	Target=Q5RES8.1 486 497 +;percentID=66
+chr4-04	SwissProt	protein_match	254104	254154	40.000000	+	.	Target=Q6GQR8.2 153 169 +;percentID=52;sequence=MEGFTREAPCFPILGDNWDCENQERNLRQSPLIDEKTEAQEANCGHVNLGEHLSTNPALLPSQRVPGTNGFHVFNSDIKTFDCDQTLHSCPPSYAVKGTADGDACEKATQPSMEATQLVRNQMREKSYKYTESVKSLNHFTTALCDKKIKKRSKRFYKGKDFGDILALSSSLNEKRSHSAEKPYKCAECGKCFKRNSSLVLHHRTHTGEKPYTCNDCGKSFSKNYNLIVHRRIHTGEKPYKCSKCGKAFSDGSALTQHQRIHTGEKPYACLDCGKTFNRNSSLILHQRTHTGEKPYRCNECGKPFTDISHLTVHLRIHTGEKPYECSRCGKAFRDGSYLTQHERTHTGEKPFECVECGKSFSRNSHLIVHQKIHSGEKPYECKE [...]
+chr4-04	SwissProt	protein_match	299029	299091	41.000000	+	.	Target=Q0VAW7-2.1 169 188 +;percentID=47;Gap=M8 D1 M12 
+chr4-04	SwissProt	protein_match	254594	254659	44.000000	+	.	Target=P61555.1 275 296 +;percentID=45;sequence=MGLLLLVLILTPLLAAYRHPDFPLLEKAQQLLQSTGSPYSTNCWLCTSSSTETPGTAYPASPREWTSIEAELHISYQWDPNLKGLMRPANSLLSTVKQDFPDIRQKPPIFGPIFTNINLMGIAPICVTAKRKNGTNVGTLPSTVCNVTFTVDPNQQTYQTYTHNQFRHQPRFPKPPNITFPQGTLLDKSTRFCQGRPSSCSTRNFWFRPADYNQCLQISNLSSTAEWVLLDQTRNSLFWENKTKGANQSQTPCVQVLAGMTIATSYLGISAVSEFFGNSLTPLFHFHISTCLKTQGAFYICGQSIHQCLPSNWTGTCTIGYVTPDIFIAPGNLSLPIPIYGKSQLPRVRRAIHFIPLLAGLGILAGTGTGIAGITKASLTYSQL [...]
+chr4-04	SwissProt	protein_match	289840	289926	65.000000	-	.	Target=Q9Z1D8.1 220 248 +;percentID=48
+chr4-04	SwissProt	protein_match	254646	254681	40.000000	-	.	Target=Q8TAF7.2 479 490 +;percentID=58
+chr4-04	SwissProt	protein_match	254646	254681	40.000000	-	.	Target=Q8TAF7-2.2 352 363 +;percentID=58
+chr4-04	SwissProt	protein_match	291507	291563	52.000000	-	.	Target=O95780.1 268 286 +;percentID=52
+chr4-04	SwissProt	protein_match	254646	254708	40.000000	-	.	Target=Q5EBM4.1 216 234 +;percentID=52;Gap=M8 D2 M11 ;sequence=MTHLTQHQTTHTREKFHECSECGKAFSRVSALIDHQRIHSGEKPYECKECGRAFTQSAQLIRHQKTHSGEKPYECSKCKKSFVHLSSLIEHWRIHTGEKPYQCKDCKKTFCRVMQFTLHRRIHTGEKPYECKECGKSFSAHSSLVTHKRTHSGEKPYKCKECGKAFSAHSSLVTHKRTHSGEKPYTCHACGKAFNTSSTLCQHNRIHTGEKPFQCSQCGKSFSCSSHLTRHCRMCNGKFSK
+chr4-04	SwissProt	protein_match	289819	289947	131.000000	-	.	Target=O14709.1 214 256 +;percentID=58
+chr4-04	SwissProt	protein_match	255656	255694	43.000000	+	.	Target=Q8N184-2.3 67 79 +;percentID=61
+chr4-04	SwissProt	protein_match	255656	255694	43.000000	+	.	Target=Q8N184.3 67 79 +;percentID=61
+chr4-04	SwissProt	protein_match	255661	255711	42.000000	+	.	Target=Q0D2J5.2 294 310 +;percentID=52
+chr4-04	SwissProt	protein_match	255735	255761	42.000000	+	.	Target=A2VDP4.1 225 233 +;percentID=77
+chr4-04	SwissProt	protein_match	255914	255940	40.000000	+	.	Target=Q9BWM5.1 229 237 +;percentID=55
+chr4-04	SwissProt	protein_match	255931	255954	42.000000	+	.	Target=Q6P9A1.2 394 401 +;percentID=75
+chr4-04	SwissProt	protein_match	306740	306805	47.000000	+	.	Target=Q5T5D7.1 119 140 +;percentID=40
+chr4-04	SwissProt	protein_match	256785	256874	48.000000	+	.	Target=Q8IW36.3 140 169 +;percentID=41;Gap=M18 D1 M4 I1 M7 
+chr4-04	SwissProt	protein_match	306815	306916	58.000000	-	.	Target=A6NDX5.5 193 219 +;percentID=44;Gap=M17 D7 M10 
+chr4-04	SwissProt	protein_match	256937	256987	41.000000	+	.	Target=Q8NB42.1 441 457 +;percentID=47
+chr4-04	SwissProt	protein_match	309913	309948	45.000000	-	.	Target=Q96MU6-2.2 156 167 +;percentID=50
+chr4-04	SwissProt	protein_match	257376	257423	40.000000	+	.	Target=Q8TAF7.2 185 200 +;percentID=43
+chr4-04	SwissProt	protein_match	257157	257213	42.000000	-	.	Target=P17035.4 306 323 +;percentID=57;Gap=M7 D1 M11 ;sequence=MALPQGLLTFRDVAIEFSQEEWKCLDPAQRTLYRDVMLENYRNLVSLDISSKCMMKTFFSTGQGNTEAFHTGTLQRQASHHIGDFCFQKIEKDIHGFQFQWKEDETNDHAAPMTEIKELTGSTGQHDQRHAGNKHIKDQLGLSFHSHLPELHIFQPEGKIGNQVEKSINNASSVSTSQRICCRPKTHISNKYGNNSLHSSLLTQKRNVHMREKSFQCIESGKSFNCSSLLKKHQITHLEEKQCKCDVYGKVFNQKRYLACHRRSHIDEKPYKCNECGKIFGHNTSLFLHKALHTADKPYECEECDKVFSRKSHLETHKIIYTGGKPYKCKVCDKAFTCNSYLAKHTIIHTGEKPYKCNECGKVFNRLST [...]
+chr4-04	SwissProt	protein_match	256842	256907	43.000000	+	.	Target=Q9IAJ2.1 102 123 +;percentID=45;sequence=MDSSLQHSTTKILSTQESREALSNRLTMISGAKPLAFSIERIMSRTPEPKCLPVASLLQSSAPKGDQKPGLHINSSSIPRMIPFVPVAYEHCAKIGISGAELRKSHVDSSPPFSCSDLLNCALTLKGDFPREALPLQQYKLVRPRVVNHSSFHAMGAAFCYFNRGDSEWHPPASINIHPMASYFLGSPLHQAPKCYVAAERNKLLAPSVEKFPSGVTFKDLSQAQFQHYMKEGPRSLSDKITFKTSAKFSSASPSSKPKVFTCEVCGKVFNAHYNLTRHMPVHTGARPFVCKICGKGFRQASTLCRHKIIHTQEKPHKCNQCGKAFNRSSTLNTHTRIHAGYKPFVCEFCGKGFHQKGNYKNHKLTHSGEKQFKCNICNKAFHQ [...]
+chr4-04	SwissProt	protein_match	257376	257423	40.000000	+	.	Target=Q8TAF7-2.2 58 73 +;percentID=43
+chr4-04	SwissProt	protein_match	257434	257463	40.000000	+	.	Target=A6NDX5.5 646 657 +;percentID=58;Gap=M7 I2 M3 
+chr4-04	SwissProt	protein_match	257461	257994	289.000000	+	.	Target=P61557.1 320 504 +;percentID=41;Gap=M24 I2 M18 I1 M50 I1 M5 I3 M81 ;sequence=MGLLLLVLILTPSLAAYRHPDFPLLEKAQQLLQSTGSPYSTNCWLCTSSSTETPGTAYPASPREWTSIEAELHISYRWDPNLKGLMRPANSLLSMVKQDFPDIRQKPPIFGPIFTNINLMGIAPICVMAKRKNGTNVGTLPSTVCNVTFTVDSNQQTYQTYTHNQFRHQPRFPKPPNITFPQGTLLDKSSRFCQGRPSSCSTRNFWFRPADYNQCLQISNLSSTAEWVLLDQTRNSLFWENKTKGANQSQTPCVQVLAGMTIATSYLGISAVSEFFGTSLTPLFHFHISTCLKTQGAFYICGQSIHQCLPSNWTGTCTIGYVTPDIFIAPGNLSLPIPIYGNSQLPR [...]
+chr4-04	SwissProt	protein_match	257461	257994	293.000000	+	.	Target=P61558.1 320 504 +;percentID=42;Gap=M24 I2 M18 I1 M50 I1 M5 I3 M81 ;sequence=MGLLLLVLILTPLLAAHRHPDFPLLEKAQQLLQSTGSPYSTNCWLCTSSSTETPGTAYPASPREWTSIEAELHISYHWDPNLKGLMRPANSLLSTVKQDFPDIRQKPPIFGPIFTNINLMGIAPICVTAKRKNGTNVGTLPSTVCNVTFTVDPNQQTYQTYTHKQFLHQPRFPKPPNITFPQGTLLDKSTRFCQGRPSSCSTRNFWFRPADYNQCLQISNLSSTAEWVLLDQTRNSLFWENKTKGANQSQTPCVQVLAGMTIATSYLGISAVSEFFGTSLTPLFHFHISTCLKTQGAFYICGQSIHQCLPSNWTGTCTIGYVTPDIFIAPGNISLPIPIYGNSQLPR [...]
+chr4-04	SwissProt	protein_match	257461	257994	289.000000	+	.	Target=P61554.1 320 504 +;percentID=41;Gap=M24 I2 M18 I1 M50 I1 M5 I3 M81 ;sequence=MGLLLLVLILTPSLAAYRHPDFPLLEKAQQLLQSTGSPYSTNCWLCTSSSTETPGTAYPASPREWTSIEAELHISYRWDPNLKGLMRPANSLLSTVKQDFPDIRQKPPIFGPIFTNINLMGIAPICVTAKRKNGTNVGTLPSTVCNVTFTVDSNQQTYQTYTHNQFRHQPRFPKPPNITFPQGTLLDKSSRFCQGRPSSCSTRNFWFRPADYNQCLQISNLSSTAEWVLLDQTRNSLFWENKTKGANQSQTPCVQVLAGMTIATSYLGISAVSEFFGTSLTPLFHFHISTCLKTQGAFYICGQLIHQCLPSNWTGTCTIGYVTPDIFIAPGNLSLPIPIYGNSQLPR [...]
+chr4-04	SwissProt	protein_match	257461	257994	294.000000	+	.	Target=P61553.1 320 504 +;percentID=42;Gap=M21 I2 M23 I1 M48 I1 M5 I3 M81 ;sequence=MGLLLLLLILTPLLAAYCHPDFRLLEKAQQLLQSTGSPYSTNCWLCTSSSSKTPGRAYPASSREWTTIEAELHISYQWDPNLKGLIRLANSLLSKVKQDFPDIRKEPPIFGPIFTNVNLIGIAPICVTAKRKDGTNVGTLPSTVCNVTLTVDPNQQTYQKYAHNQFHHQPRFPKPPNITFPQGTLLDKSTRFCQGRPSSCSTRNFWFQPADYNQCLQIPNLSSTAEWVLLDQTRNSLFWENKTKGANQSQTPCVQVLAGMTIATSYLSTSAVSEFSGTSVTSLFSFHISTCLKTQGAFYICGQSIHQCLPTNWTGTCTIGYVSPDIFIAPGNLSLPIPIYGNFHFPR [...]
+chr4-04	SwissProt	protein_match	305582	305653	42.000000	+	.	Target=P16374.2 401 424 +;percentID=41
+chr4-04	SwissProt	protein_match	257461	257994	294.000000	+	.	Target=P60508.1 320 504 +;percentID=42;Gap=M25 I1 M4 I1 M13 I1 M50 I1 M5 I3 M81 ;sequence=MGLLLLVLILTPSLAAYRHPDFPLLEKAQQLLQSTGSPYSTNCWLCTSSSTETPGTAYPASPREWTSIEAELHISYRWDPNLKGLMRPANSLLSTVKQDFPDIRQKPPIFGPIFTNINLMGIAPICVMAKRKNGTNVGTLPSTVCNVTFTVDSNQQTYQTYTHNQFRHQPRFPKPPNITFPQGTLLDKSSRFCQGRPSSCSTRNFWFRPADYNQCLQISNLSSTAEWVLLDQTRNSLFWENKTKGANQSQTPCVQVLAGMTIATSYLGISAVSEFFGTSLTPLFHFHISTCLKTQGAFYICGQSIHQCLPSNWTGTCTIGYVTPDIFIAPGNLSLPIPIYG [...]
+chr4-04	SwissProt	protein_match	299447	299506	48.000000	-	.	Target=P08042.3 72 93 +;percentID=54;Gap=M9 I2 M11 
+chr4-04	SwissProt	protein_match	257461	257994	296.000000	+	.	Target=P61555.1 320 504 +;percentID=42;Gap=M24 I2 M18 I1 M50 I1 M5 I3 M81 
+chr4-04	SwissProt	protein_match	257461	257994	299.000000	+	.	Target=P61556.1 320 504 +;percentID=42;Gap=M24 I2 M18 I1 M50 I1 M5 I3 M81 ;sequence=MGLLLLVLILTPLLAAYRHPDFPLLEKAQQLLQSTGSPYSTNCWLCTSSSTETPGTAYPASPREWTSIEAELHISYQWDPNLKGLMTPANSLLSTVKQDFPDIRQKPPIFGPIFTNINLMGKAPICVTAKRKNGTNVGTLPSTVCNVTFTVDPNQQTYQTYTHNQFRHQPRFPKPPNITFPQGTLLDKSTQFCQGRPSSCRTRNFWFRPADYNQCLQIPNLSSPAEWVLLDQTRNSLFWENKTKGANQSQTPCIQVLAGMTIATSYLGISPVSEFFGTSLTPLFHFHISTCLKTQGAFYICGQSIHQCLPTNWTGTCTIGYVTPDIFIAPGNLSLPIPIYGNSQLPR [...]
+chr4-04	SwissProt	protein_match	298029	298103	42.000000	+	.	Target=Q494X3.1 97 119 +;percentID=44;Gap=M20 D2 M3 
+chr4-04	SwissProt	protein_match	257546	257593	40.000000	-	.	Target=Q96MR9.2 422 437 +;percentID=43
+chr4-04	SwissProt	protein_match	257546	257593	41.000000	-	.	Target=Q8R2V3.2 951 966 +;percentID=50
+chr4-04	SwissProt	protein_match	257785	257886	49.000000	+	.	Target=P17035.4 519 548 +;percentID=41;Gap=M4 D1 M13 D3 M13 
+chr4-04	SwissProt	protein_match	257785	257886	58.000000	+	.	Target=Q9NV72.1 406 435 +;percentID=44;Gap=M4 D1 M13 D3 M13 
+chr4-04	SwissProt	protein_match	257818	257883	40.000000	+	.	Target=P51786.2 108 129 +;percentID=40
+chr4-04	SwissProt	protein_match	257839	257886	44.000000	+	.	Target=Q6ZN06.2 502 520 +;percentID=47;Gap=M3 I3 M13 
+chr4-04	SwissProt	protein_match	259105	259167	45.000000	+	.	Target=Q8R2V3.2 791 811 +;percentID=42
+chr4-04	SwissProt	protein_match	259111	259167	41.000000	+	.	Target=Q5CZA5.2 198 216 +;percentID=42
+chr4-04	SwissProt	protein_match	259126	259164	43.000000	+	.	Target=Q9BS34.1 85 97 +;percentID=69
+chr4-04	SwissProt	protein_match	259233	259283	40.000000	+	.	Target=P17035-2.4 197 213 +;percentID=35;sequence=MMKTFFSTGQGNTEAFHTGTLQRQASHHIGDFCFQKIEKDIHGFQFQWKEDETNDHAAPMTEIKELTGSTGQHDQRHAGNKHIKDQLGLSFHSHLPELHIFQPEGKIGNQVEKSINNASSVSTSQRICCRPKTHISNKYGNNSLHSSLLTQKRNVHMREKSFQCIESGKSFNCSSLLKKHQITHLEEKQCKCDVYGKVFNQKRYLACHRRSHIDEKPYKCNECGKIFGHNTSLFLHKALHTADKPYECEECDKVFSRKSHLETHKIIYTGGKPYKCKVCDKAFTCNSYLAKHTIIHTGEKPYKCNECGKVFNRLSTLARHRRLHTGEKPYECEECEKVFSRKSHLERHKRIHTGEKPYKCKVCDKAFAYNSYLAKHSIIHTG [...]
+chr4-04	SwissProt	protein_match	259233	259280	43.000000	+	.	Target=Q8N4W9.2 742 757 +;percentID=50
+chr4-04	SwissProt	protein_match	311311	311382	44.000000	+	.	Target=Q14590.3 229 252 +;percentID=41
+chr4-04	SwissProt	protein_match	260130	260180	47.000000	+	.	Target=A6NDX5.5 300 315 +;percentID=52;Gap=M8 D1 M8 
+chr4-04	SwissProt	protein_match	311382	311414	43.000000	-	.	Target=Q8NDW4.1 138 148 +;percentID=54
+chr4-04	SwissProt	protein_match	311388	311468	50.000000	-	.	Target=Q9BUY5.1 127 152 +;percentID=44;Gap=M11 D1 M15 
+chr4-04	SwissProt	protein_match	311388	311468	59.000000	-	.	Target=Q8R1D1.1 124 150 +;percentID=48
+chr4-04	SwissProt	protein_match	311388	311468	62.000000	-	.	Target=A1L1L7.1 125 151 +;percentID=48
+chr4-04	SwissProt	protein_match	311395	311442	40.000000	+	.	Target=Q96JL9.3 165 180 +;percentID=43
+chr4-04	SwissProt	protein_match	311397	311453	45.000000	-	.	Target=Q6V9R5-2.2 40 58 +;percentID=47;sequence=MSAFDMSHDFFFCLTSEWEIQPRTKRSSLQQGFLKNQIFTGIQMQTRSYSGWKLCENCGEVFSEQFCLKTHMRAQNGGNTFEGNCYGKDSISVHKEASIGQELSKFNPCGKVFTLTPGLAVHLEILNGRQPYKCKECGKGFKYFASLDNHMGIHIGEKLCEFQECERAITTSSHLKQCVAVHTGKKSEKTKNCGKSFTNFSQLSAHAKTHKGEKSFECKECGRSFRNSSSFNVHIQIHTGIKPHKCTECGKAFTRSTHLTQHVRTHTGIKPYECKECGQAFTQYTGLAIHIRNHTGEKPYQCKECGKAFNRSSTLTQHRRIHTGEKPYECVECGKTFITSSHRSKHLKTHSGER
+chr4-04	SwissProt	protein_match	311627	311659	41.000000	-	.	Target=Q86TJ5.1 255 265 +;percentID=63
+chr4-04	SwissProt	protein_match	312017	312049	41.000000	-	.	Target=Q9BS34.1 114 124 +;percentID=63
+chr4-04	SwissProt	protein_match	262289	262351	50.000000	+	.	Target=Q9BX82.1 187 207 +;percentID=47
+chr4-04	SwissProt	protein_match	260537	260587	41.000000	+	.	Target=Q96NI8.1 202 218 +;percentID=47
+chr4-04	SwissProt	protein_match	260565	260621	41.000000	-	.	Target=Q7Z2F6.1 95 111 +;percentID=42;Gap=M3 D2 M14 
+chr4-04	SwissProt	protein_match	262139	262177	41.000000	-	.	Target=Q2M218.1 588 600 +;percentID=61
+chr4-04	SwissProt	protein_match	262764	262838	52.000000	-	.	Target=Q8NDP4.1 468 492 +;percentID=40
+chr4-04	SwissProt	protein_match	262684	262746	48.000000	-	.	Target=Q8IYN0.1 200 220 +;percentID=47
+chr4-04	SwissProt	protein_match	262699	262758	40.000000	-	.	Target=A8MTY0.2 161 180 +;percentID=40
+chr4-04	SwissProt	protein_match	262746	262838	61.000000	-	.	Target=Q3KQV3-2.2 497 527 +;percentID=35
+chr4-04	SwissProt	protein_match	262764	262838	53.000000	-	.	Target=Q5JVG2.1 442 466 +;percentID=44
+chr4-04	SwissProt	protein_match	262755	262841	65.000000	-	.	Target=P51522.2 486 514 +;percentID=41
+chr4-04	SwissProt	protein_match	262755	262841	65.000000	-	.	Target=P51522-2.2 326 354 +;percentID=41
+chr4-04	SwissProt	protein_match	262764	262853	62.000000	-	.	Target=Q03923-2.3 138 167 +;percentID=40
+chr4-04	SwissProt	protein_match	262764	262853	62.000000	-	.	Target=Q03923.3 171 200 +;percentID=40
+chr4-04	SwissProt	protein_match	262764	262841	59.000000	-	.	Target=Q14586.2 268 293 +;percentID=42
+chr4-04	SwissProt	protein_match	262764	262838	60.000000	-	.	Target=Q08ER8.2 537 561 +;percentID=44
+chr4-04	SwissProt	protein_match	262764	262853	64.000000	-	.	Target=Q9H8G1.2 202 231 +;percentID=40
+chr4-04	SwissProt	protein_match	262764	262841	65.000000	-	.	Target=O43296.1 540 565 +;percentID=42
+chr4-04	SwissProt	protein_match	262764	262841	63.000000	-	.	Target=Q16670-2.2 298 322 +;percentID=46;Gap=M20 D1 M5 ;sequence=MAPLKGVQEQQVRHECEVTKPEKEKGEETRIENGKLIVVTDSCGRVESSGKISEPMEAHNEGSNLERHQAKPKEKIEYKCSEREQRFIQHLDLIEHASTHTGKKLCESDVCQSSSLTGHKKVLSREKGHQCHECGKAFQRSSHLVRHQKIHLGEKPYQCNECGKVFSQNAGLLEHLRIHTGEKPYLCIHCGKNFRRSSHLNRHQRIHSQEEPCECKECGKTFSQALLLTHHQRIHSHSKSHQCNECGKAFSLTSDLIRHHRIHTGEKPFKCNICQKAFRLNSHLAQHVRIHNEEKPYQCSECGEAFRQRSGLFQHQRYHHKDKLA
+chr4-04	SwissProt	protein_match	262767	262832	56.000000	-	.	Target=Q8IYN0.1 517 538 +;percentID=45
+chr4-04	SwissProt	protein_match	262767	262853	56.000000	-	.	Target=P51814-4.2 630 658 +;percentID=41
+chr4-04	SwissProt	protein_match	262767	262841	60.000000	-	.	Target=Q9UJW7.2 657 681 +;percentID=48
+chr4-04	SwissProt	protein_match	313873	313911	41.000000	+	.	Target=Q95K52.1 129 140 +;percentID=69;Gap=M2 D1 M10 
+chr4-04	SwissProt	protein_match	262767	262841	58.000000	-	.	Target=Q68DY1-2.2 182 206 +;percentID=40
+chr4-04	SwissProt	protein_match	262767	262841	65.000000	-	.	Target=Q53GI3.2 526 550 +;percentID=48;sequence=MNSSLTAQRRGSDAELGPWVMAARSKDAAPSQRDGLLPVKVEEDSPGSWEPNYPAASPDPETSRLHFRQLRYQEVAGPEEALSRLRELCRRWLRPELLSKEQILELLVLEQFLTILPEELQAWVREHCPESGEEAVAVVRALQRALDGTSSQGMVTFEDTAVSLTWEEWERLDPARRDFCRESAQKDSGSTVPPSLESRVENKELIPMQQILEEAEPQGQLQEAFQGKRPLFSKCGSTHEDRVEKQSGDPLPLKLENSPEAEGLNSISDVNKNGSIEGEDSKNNELQNSARCSNLVLCQHIPKAERPTDSEEHGNKCKQSFHMVTWHVLKPHKSDSGDSFHHSSLFETQRQLHEERPYKCGNCGKSFKQRSDLFRHQRIHTGEK [...]
+chr4-04	SwissProt	protein_match	262767	262841	65.000000	-	.	Target=Q9NV72.1 439 463 +;percentID=40
+chr4-04	SwissProt	protein_match	262767	262841	58.000000	-	.	Target=Q68DY1.2 258 282 +;percentID=40
+chr4-04	SwissProt	protein_match	262764	262853	71.000000	-	.	Target=Q8TF32.2 201 230 +;percentID=43
+chr4-04	SwissProt	protein_match	262767	262841	65.000000	-	.	Target=A1YG48.1 526 550 +;percentID=48;sequence=MNSSLTAQRRGSDAELGPWVMAARSKDAAPSQRDGLLPVKVEEDSLGSWEPSYPAASPDPETSRLHFRQLRYQEVAGPEEALSRLRELCRRWLRPELLSKEQILELLVLEQFLTILPEELQAWVREHCPESGEEAVAVVRALQRALDGTSSQGMVTFEDMAVSLTWEEWERLDPARSDFCRESAQKDSGSTVPPSLESRVENKELIPVQQILEEAEPQGRLQEAFQGKRPLFSKCVSTHEDRVEKQSGDPLPLKLENSPEAEGFNSISDVNKNGSIEGEDSKNNELQNSARCSNLVLCQHIPKAERPTDSEEHGNKCKQSFHMVTWHVLKPHKSDSGDSFHHSSLFETQRQLHEERPYKCGNCGKSFKQRSDLFRHQRIHTGEK [...]
+chr4-04	SwissProt	protein_match	314170	314202	40.000000	+	.	Target=Q95K52.1 290 300 +;percentID=54
+chr4-04	SwissProt	protein_match	314170	314202	40.000000	+	.	Target=Q494X3.1 238 248 +;percentID=54
+chr4-04	SwissProt	protein_match	314170	314202	40.000000	+	.	Target=Q8N7M2.3 314 324 +;percentID=54
+chr4-04	SwissProt	protein_match	262767	262844	70.000000	-	.	Target=A6NF79.3 324 349 +;percentID=42
+chr4-04	SwissProt	protein_match	262767	262844	74.000000	-	.	Target=A6NKZ1.3 324 349 +;percentID=46
+chr4-04	SwissProt	protein_match	262767	262841	67.000000	-	.	Target=Q9HCG1.2 706 730 +;percentID=48
+chr4-04	SwissProt	protein_match	262767	262841	65.000000	-	.	Target=Q5R741.1 526 550 +;percentID=48
+chr4-04	SwissProt	protein_match	262770	262838	56.000000	-	.	Target=Q96GC6-3.1 516 538 +;percentID=47
+chr4-04	SwissProt	protein_match	262770	262838	56.000000	-	.	Target=Q96GC6.1 621 643 +;percentID=47
+chr4-04	SwissProt	protein_match	262767	262841	74.000000	-	.	Target=A6NF35.2 551 575 +;percentID=48
+chr4-04	SwissProt	protein_match	262770	262838	55.000000	-	.	Target=P10077.2 347 369 +;percentID=47
+chr4-04	SwissProt	protein_match	262767	262844	70.000000	-	.	Target=Q96JC4.1 325 350 +;percentID=42
+chr4-04	SwissProt	protein_match	262770	262838	62.000000	-	.	Target=Q13106.3 415 437 +;percentID=52
+chr4-04	SwissProt	protein_match	262770	262838	56.000000	-	.	Target=Q96GC6-2.1 589 611 +;percentID=47
+chr4-04	SwissProt	protein_match	262770	262838	56.000000	-	.	Target=Q96GC6-4.1 340 362 +;percentID=47
+chr4-04	SwissProt	protein_match	262770	262838	58.000000	-	.	Target=Q5RB30.1 300 322 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262841	48.000000	-	.	Target=Q7Z7L9.1 558 579 +;percentID=45;sequence=MMAADIPRVTTPLSSLVQVPQEEDRQEEEVTTMILEDDSWVQEAVLQEDGPESEPFPQSAGKGGPQEEVTRGPQGALGRLRELCRRWLRPEVHTKEQMLTMLPKEIQAWLQEHRPESSEEAAALVEDLTQTLQDNFEIQSENGENCNQDMFENESRKIFSEMPEGESAQHSDGESDFERDAGIQRLQGHSPGEDHGEVVSQDREVGQLIGLQGTYLGEKPYECPQCGKTFSRKSHLITHERTHTGEKYYKCDECGKSFSDGSNFSRHQTTHTGEKPYKCRDCGKSFSRSANLITHQRIHTGEKPFQCAECGKSFSRSPNLIAHQRTHTGEKPYSCPECGKSFGNRSSLNTHQGIHTGEKPYECKECGESFSYNSNLIRHQRIHT [...]
+chr4-04	SwissProt	protein_match	262773	262838	64.000000	-	.	Target=Q9BS34.1 367 389 +;percentID=52;Gap=M21 I1 M1 
+chr4-04	SwissProt	protein_match	262776	262835	47.000000	-	.	Target=Q8TB69.1 212 231 +;percentID=50
+chr4-04	SwissProt	protein_match	262776	262838	47.000000	-	.	Target=Q96NG5.1 210 230 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	48.000000	-	.	Target=Q9UK13.2 284 304 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262838	48.000000	-	.	Target=P52736.2 300 320 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262841	48.000000	-	.	Target=Q7Z7L9-2.1 539 560 +;percentID=45;sequence=MMAADIPRVTTPLSSLVQVPQEEDRQEEEVTTMILEDDSWVQEAVLQEEVTRGPQGALGRLRELCRRWLRPEVHTKEQMLTMLPKEIQAWLQEHRPESSEEAAALVEDLTQTLQDNFEIQSENGENCNQDMFENESRKIFSEMPEGESAQHSDGESDFERDAGIQRLQGHSPGEDHGEVVSQDREVGQLIGLQGTYLGEKPYECPQCGKTFSRKSHLITHERTHTGEKYYKCDECGKSFSDGSNFSRHQTTHTGEKPYKCRDCGKSFSRSANLITHQRIHTGEKPFQCAECGKSFSRSPNLIAHQRTHTGEKPYSCPECGKSFGNRSSLNTHQGIHTGEKPYECKECGESFSYNSNLIRHQRIHTGEKPYKCTDCGQRFSQS [...]
+chr4-04	SwissProt	protein_match	262776	262838	48.000000	-	.	Target=P10078.3 492 512 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	48.000000	-	.	Target=Q96CS4.1 291 311 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262838	49.000000	-	.	Target=A1YF12.1 463 483 +;percentID=47;sequence=MPSLRTRREEAEMELSAPGPSPWTPAAQAHVSDAPAVTHPGSAACGTPCCSDTELEAICPHYQQPDCDTRTEDKEFLHKEDIHEDLESQAEISENYAGDVLQVPELGDLCDDVSERDWGVPEGRRLPQSLSQEGDFTPAAMGLLRGPLGEKDLDCNGFDSRFSLSPNLMACQEIPTEERPHPYDMGGQSFQHSVDLTGHEGVPTAESPLICNECGKTFQGNPDLIQCQIVHTGEASFMCDDCGKTFSQNSVLKNHHRSHMSEKAYQCSECGKAFRGHSDFSRHQSHHSSERPYMCNECGKAFSQNSSLKKHQKSHMSEKPYECNECGKAFRRSSNLIQHQRIHSGEKPYVCSECGKAFRRSSNLIKHHRTHTGEKPFECGECGK [...]
+chr4-04	SwissProt	protein_match	314179	314202	40.000000	+	.	Target=P35789.4 367 374 +;percentID=62
+chr4-04	SwissProt	protein_match	314179	314202	40.000000	+	.	Target=P35789-3.4 367 374 +;percentID=62
+chr4-04	SwissProt	protein_match	314179	314202	40.000000	+	.	Target=Q7Z3V5.3 472 479 +;percentID=62
+chr4-04	SwissProt	protein_match	314179	314202	40.000000	+	.	Target=Q5R5Q6.1 471 478 +;percentID=62
+chr4-04	SwissProt	protein_match	314179	314202	40.000000	+	.	Target=Q9NSJ1.2 289 296 +;percentID=62
+chr4-04	SwissProt	protein_match	314179	314202	42.000000	+	.	Target=Q8TF20.2 95 102 +;percentID=75
+chr4-04	SwissProt	protein_match	314179	314202	47.000000	+	.	Target=Q9UII5.1 102 109 +;percentID=87
+chr4-04	SwissProt	protein_match	314179	314202	47.000000	+	.	Target=Q8TB69.1 430 437 +;percentID=87
+chr4-04	SwissProt	protein_match	314179	314268	50.000000	+	.	Target=Q96NJ6.1 260 286 +;percentID=40;Gap=M7 D1 M7 D2 M13 
+chr4-04	SwissProt	protein_match	314185	314253	43.000000	+	.	Target=Q8NDP4.1 214 236 +;percentID=43
+chr4-04	SwissProt	protein_match	262776	262838	50.000000	-	.	Target=P35789-2.4 567 587 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262838	48.000000	-	.	Target=P10078-2.3 492 512 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	50.000000	-	.	Target=P35789-3.4 511 531 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262838	50.000000	-	.	Target=P17020.3 463 483 +;percentID=47;sequence=MPSLRTRREEAEMELSVPGPSPWTPAAQARVRDAPAVTHPGSAACGTPCCSDTELEAICPHYQQPDCDTRTEDKEFLHKEDIHEDLESQAEISENYAGDVSQVPELGDLCDDVSERDWGVPEGRRLPQSLSQEGDFTPAAMGLLRGPLGEKDLDCNGFDSRFSLSPNLMACQEIPTEERPHPYDMGGQSFQHSVDLTGHEGVPTAESPLICNECGKTFQGNPDLIQRQIVHTGEASFMCDDCGKTFSQNSVLKNRHRSHMSEKAYQCSECGKAFRGHSDFSRHQSHHSSERPYMCNECGKAFSQNSSLKKHQKSHMSEKPYECNECGKAFRRSSNLIQHQRIHSGEKPYVCSECGKAFRRSSNLIKHHRTHTGEKPFECGECGK [...]
+chr4-04	SwissProt	protein_match	262776	262838	50.000000	-	.	Target=Q4V348.1 700 720 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	50.000000	-	.	Target=A2T759.1 463 483 +;percentID=47;sequence=MPSLRTRREEAEMELSAPGPSPWTPAAQARVSDAPAVTHPGSAACGTPCCSDTELEAICPHYQQPDCDTRTEDKEFLHKEDIHEDLESQAEISENYAGDVFQVPKLGDLCDDVSERDWGVPEGRRLPQSLSQEGDFTPAAMGLLRGPLGEKDLDCNGFDSRFSLSPNLMACQEIPXXERPHPYDMGGQSFQHSVDLTGHEGVPTAESPLICNECGKTFRGNPDLIQRQIVHTGEASFMCDDCGKTFSQNSVLKNRHRSHMSEKAYQCSECGKAFRGHSDFSRHQSHHSSERPYTCTECGKAFSQNSSLKKHQKSHMSEKPYECNECGKAFRRSSNLIQHQRIHSGEKPYVCSECGKAFRRSSNLIKHHRTHTGEKPFECGECGK [...]
+chr4-04	SwissProt	protein_match	262776	262838	51.000000	-	.	Target=Q3SXZ3-2.1 225 245 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262838	50.000000	-	.	Target=P35789.4 595 615 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262838	50.000000	-	.	Target=P51508.3 556 576 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	51.000000	-	.	Target=Q7Z3V5.3 281 301 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	51.000000	-	.	Target=Q5R5Q6.1 280 300 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	51.000000	-	.	Target=Q8WTR7.1 816 836 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262838	51.000000	-	.	Target=Q3SXZ3.1 257 277 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262832	50.000000	-	.	Target=A6NN14.3 240 258 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262838	52.000000	-	.	Target=P51814.2 511 531 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262841	51.000000	-	.	Target=Q96NJ3.2 457 478 +;percentID=40
+chr4-04	SwissProt	protein_match	262776	262838	52.000000	-	.	Target=Q96NI8.1 472 492 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	51.000000	-	.	Target=Q9UK11.1 262 282 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	51.000000	-	.	Target=Q6P1L6-2.1 489 509 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262838	51.000000	-	.	Target=Q8IYX0.1 326 346 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262838	52.000000	-	.	Target=P51814-2.2 471 491 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	52.000000	-	.	Target=P51814-3.2 479 499 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	52.000000	-	.	Target=P51814-6.2 469 489 +;percentID=47
+chr4-04	SwissProt	protein_match	314233	314268	40.000000	+	.	Target=Q8TB69.1 175 186 +;percentID=50
+chr4-04	SwissProt	protein_match	314233	314268	40.000000	+	.	Target=Q2TAN0.1 166 177 +;percentID=41
+chr4-04	SwissProt	protein_match	262776	262838	52.000000	-	.	Target=Q8TAW3.2 509 529 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262841	52.000000	-	.	Target=P10076.2 471 492 +;percentID=40
+chr4-04	SwissProt	protein_match	262776	262838	52.000000	-	.	Target=P51814-7.2 435 455 +;percentID=47
+chr4-04	SwissProt	protein_match	314304	314339	46.000000	+	.	Target=P13682.3 208 219 +;percentID=66;sequence=MALAPWGPVKVKKEEEEEENFPGQASSQQVHSENIKVWAPVQGLQTGLDGSEEEEKGQNISWDMAVVLKATQEAPAASTLGSYSLPGTLAKSEILETHGTMNFLGAETKNLQLLVPKTEICEEAEKPLIISERIQKADPQGPELGEACEKGNMLKRQRIKREKKDFRQVIVNDCHLPESFKEEENQKCKKSGGKYSLNSGAVKNPKTQLGQKPFTCSVCGKGFSQSANLVVHQRIHTGEKPFECHECGKAFIQSANLVVHQRIHTGQKPYVCSKCGKAFTQSSNLTVHQKIHSLEKTFKCNECEKAFSYSSQLARHQKVHITEKCYECNECGKTFTRSSNLIVHQRIHTGEKPFACNDCGKAFTQSANLIVHQRSHTGEKPYEC [...]
+chr4-04	SwissProt	protein_match	314310	314339	40.000000	+	.	Target=Q2TAN0.1 196 205 +;percentID=60
+chr4-04	SwissProt	protein_match	314310	314339	40.000000	+	.	Target=A8MUZ8.2 196 205 +;percentID=60
+chr4-04	SwissProt	protein_match	262776	262838	53.000000	-	.	Target=Q5R5Y7.1 336 356 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262841	52.000000	-	.	Target=P51815.2 422 443 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262838	52.000000	-	.	Target=Q9UK10.2 262 282 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	52.000000	-	.	Target=P51814-8.2 433 453 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	52.000000	-	.	Target=Q07230.1 476 496 +;percentID=47;sequence=MAAEVPAVSTPLSPLVQVPQEEDEQAEVTTMILEDDAWVQEAVLQEDGPESEPFPQSAGKGSPQEEDAAEGPQGALVRFRELCRRWLRPEVHTKEQMLTVLPREIQAWLQEHRPESSEEAVALVEDLTQTFRHSDFEIQSENGENSNEDMFEGVESHGMFLNISGGEGGQQSDGDSDFERDCGSGGAQGHAPGEDPRVVPSEGREVGQLIGLQGTYLGEKPYECPQCGKTFSRKSHLITHERTHTGEKYYKCDECGKSFSDGSNFSRHQTTHTGEKPYKCRDCGKSFSRSANLITHQRIHTGEKPFQCAECGKSFSRSPNLIAHQRTHTGEKPYSCPECGKSFGNRSSLNTHQGIHTGEKPYACKECGESFSYNSNLIRHQRIH [...]
+chr4-04	SwissProt	protein_match	262776	262838	53.000000	-	.	Target=Q8BPP0.1 318 338 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	52.000000	-	.	Target=P51814-5.2 503 523 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	53.000000	-	.	Target=P10077-2.2 515 535 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262841	53.000000	-	.	Target=Q9UJU3.1 862 883 +;percentID=40
+chr4-04	SwissProt	protein_match	262776	262838	53.000000	-	.	Target=O75290.3 223 243 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262838	53.000000	-	.	Target=Q9C0F3.2 336 356 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	53.000000	-	.	Target=Q9UIE0.3 338 358 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	53.000000	-	.	Target=Q6P1L6.1 383 403 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262841	54.000000	-	.	Target=Q5VIY5.1 468 489 +;percentID=40
+chr4-04	SwissProt	protein_match	262776	262841	54.000000	-	.	Target=Q86Y25.1 469 490 +;percentID=40
+chr4-04	SwissProt	protein_match	262776	262838	54.000000	-	.	Target=Q4R6C2.1 312 332 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262838	54.000000	-	.	Target=Q8NA42.1 312 332 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262841	54.000000	-	.	Target=Q571J5.2 471 492 +;percentID=40
+chr4-04	SwissProt	protein_match	262776	262841	54.000000	-	.	Target=Q5JVG8.1 342 363 +;percentID=40
+chr4-04	SwissProt	protein_match	262776	262838	54.000000	-	.	Target=Q2KI58.1 490 510 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262841	54.000000	-	.	Target=A0JNB1.1 677 698 +;percentID=40
+chr4-04	SwissProt	protein_match	262776	262841	54.000000	-	.	Target=Q86WZ6.1 689 710 +;percentID=40
+chr4-04	SwissProt	protein_match	262776	262838	54.000000	-	.	Target=Q5REF1.1 535 555 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	54.000000	-	.	Target=Q2M3W8.1 491 511 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	54.000000	-	.	Target=Q96RE9.1 551 571 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	54.000000	-	.	Target=Q96RE9-3.1 567 587 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	54.000000	-	.	Target=Q6N045.2 377 397 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262841	54.000000	-	.	Target=O75373.2 398 419 +;percentID=40
+chr4-04	SwissProt	protein_match	262776	262838	54.000000	-	.	Target=Q2M3W8-2.1 427 447 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	55.000000	-	.	Target=Q7TNU6.1 484 504 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262853	54.000000	-	.	Target=Q3SY52-2.1 405 430 +;percentID=42;sequence=MLENFALVASLGCGHGTEDEETPSDQNVSVGVSQSKAGSSTQKTQSCEMCVPVLKDILHLADLPGQKPYLVGECTNHHQHQKHHSAKKSLKRDMDRASYVKCCLFCMSLKPFRKWEVGKDLPAMLRLLRSLVFPGGKKPGTITECGEDIRSQKSHYKSGECGKASRHKHTPVYHPRVYTGKKLYECSKCGKAFRGKYSLVQHQRVHTGERPWECNECGKFFSQTSHLNDHRRIHTGERPYECSECGKLFRQNSSLVDHQKIHTGARPYECSQCGKSFSQKATLVKHQRVHTGERPYKCGECGNSFSQSAILNQHRRIHTGAKPYECGQCGKSFSQKATLIKHQRVHTGERPYKCGDCGKSFSQSSILIQHRRIHTGARPYEC [...]
+chr4-04	SwissProt	protein_match	262776	262838	54.000000	-	.	Target=Q96RE9-2.1 566 586 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262841	54.000000	-	.	Target=Q3ZCT1.3 389 410 +;percentID=40
+chr4-04	SwissProt	protein_match	262776	262838	55.000000	-	.	Target=Q8N859.1 303 323 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262841	55.000000	-	.	Target=A8MUP4.2 443 464 +;percentID=40
+chr4-04	SwissProt	protein_match	262776	262838	55.000000	-	.	Target=P15622.3 509 529 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	55.000000	-	.	Target=Q5TYW1-2.2 576 596 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	55.000000	-	.	Target=P15622-2.3 392 412 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	55.000000	-	.	Target=Q9HCX3.1 449 469 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	56.000000	-	.	Target=Q86YE8-3.3 582 602 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262841	55.000000	-	.	Target=Q7L2R6.2 467 488 +;percentID=40
+chr4-04	SwissProt	protein_match	262776	262838	55.000000	-	.	Target=Q86UE3.2 695 715 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262841	55.000000	-	.	Target=A8MUV8.3 313 334 +;percentID=40
+chr4-04	SwissProt	protein_match	262776	262838	56.000000	-	.	Target=Q86YE8.3 620 640 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	56.000000	-	.	Target=Q5RDX1.1 352 372 +;percentID=47
+chr4-04	SwissProt	protein_match	315863	315901	43.000000	-	.	Target=Q9HBT8.1 284 296 +;percentID=61
+chr4-04	SwissProt	protein_match	315869	315907	41.000000	-	.	Target=Q06732-2.2 256 268 +;percentID=61
+chr4-04	SwissProt	protein_match	315869	315907	41.000000	-	.	Target=Q06732.2 368 380 +;percentID=61
+chr4-04	SwissProt	protein_match	315869	315907	44.000000	-	.	Target=Q15937.2 260 272 +;percentID=61
+chr4-04	SwissProt	protein_match	315995	316036	42.000000	-	.	Target=Q4R882.1 69 82 +;percentID=42
+chr4-04	SwissProt	protein_match	317323	317361	41.000000	+	.	Target=Q86UE3.2 561 573 +;percentID=46
+chr4-04	SwissProt	protein_match	317771	317803	43.000000	-	.	Target=Q6ZR52.3 62 72 +;percentID=54
+chr4-04	SwissProt	protein_match	327910	327948	41.000000	-	.	Target=Q8N7K0.1 145 157 +;percentID=46
+chr4-04	SwissProt	protein_match	327910	327948	41.000000	-	.	Target=Q8N7K0-2.1 110 122 +;percentID=46
+chr4-04	SwissProt	protein_match	328410	328436	40.000000	+	.	Target=Q5T5D7.1 138 146 +;percentID=66
+chr4-04	SwissProt	protein_match	328440	328514	50.000000	+	.	Target=Q8TAU3.1 115 138 +;percentID=48;Gap=M12 D1 M12 
+chr4-04	SwissProt	protein_match	328440	328514	50.000000	+	.	Target=Q96SQ5.1 115 138 +;percentID=48;Gap=M12 D1 M12 
+chr4-04	SwissProt	protein_match	328459	328500	40.000000	+	.	Target=P13682.3 2 16 +;percentID=53;Gap=M7 I1 M7 
+chr4-04	SwissProt	protein_match	328469	328522	41.000000	+	.	Target=Q08ER8.2 80 97 +;percentID=44
+chr4-04	SwissProt	protein_match	262776	262838	56.000000	-	.	Target=Q12901.3 374 394 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262841	56.000000	-	.	Target=Q8N7K0.1 647 668 +;percentID=40
+chr4-04	SwissProt	protein_match	262776	262838	56.000000	-	.	Target=Q8N988-2.2 350 370 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	56.000000	-	.	Target=Q86YE8-4.3 553 573 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262841	56.000000	-	.	Target=Q8TAU3.1 521 542 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262838	56.000000	-	.	Target=Q96JL9.3 508 528 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262841	56.000000	-	.	Target=Q96SQ5.1 521 542 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262841	56.000000	-	.	Target=Q02386.2 585 606 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262838	56.000000	-	.	Target=Q61116.1 399 419 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	56.000000	-	.	Target=Q8BI67.1 867 887 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	56.000000	-	.	Target=Q86YE8-2.3 552 572 +;percentID=47;sequence=MILREETQFTDLDLQCEIISYIEVPTYETDISSTQLQSIYKREKLYECKKCQKKFSSGYQLILHHRFHVIERPYECKECGKNFRSGYQLTLHQRFHTGEKPYECTECGKNFRSGYQLTVHQRFHTGEKTYECRQCGKAFIYASHIVQHERIHTGGKPYECQECGRAFSQGGHLRIHQRVHTGEKPYKCKECGKTFSRRSNLVEHGQFHTDEKPYICEKCGKAFRRGHQLTVHQRVHTGKKPYECKECGKGYTTASYFLLHQRIHKGGKPYECKECKKTFTLYRNLTRHQNIHTGEKLFECKQCGKTYTTGSKLFQHQKTHTGEKPYECKECGKAFSLYGYLKQHQKIHTGMKHFECKECKKTFTLYRNLTRHQNIHTGKKLF [...]
+chr4-04	SwissProt	protein_match	262776	262838	56.000000	-	.	Target=Q8N988.2 343 363 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262841	56.000000	-	.	Target=Q8N7K0-2.1 612 633 +;percentID=40
+chr4-04	SwissProt	protein_match	262776	262841	56.000000	-	.	Target=Q6P9A3-2.1 377 398 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262841	56.000000	-	.	Target=O75437.3 547 568 +;percentID=40
+chr4-04	SwissProt	protein_match	262776	262838	56.000000	-	.	Target=A0JPL0.1 437 457 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262841	57.000000	-	.	Target=Q9NQZ8.1 439 460 +;percentID=50
+chr4-04	SwissProt	protein_match	262776	262838	57.000000	-	.	Target=Q969W8.1 313 333 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	57.000000	-	.	Target=P21506.3 491 511 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262838	56.000000	-	.	Target=Q9UK12.2 231 251 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	57.000000	-	.	Target=Q9Y473.1 533 553 +;percentID=47
+chr4-04	SwissProt	protein_match	329179	329214	44.000000	+	.	Target=A6NK53.2 365 376 +;percentID=66
+chr4-04	SwissProt	protein_match	329199	329279	47.000000	+	.	Target=Q6V9R5.2 100 130 +;percentID=41;Gap=M13 I4 M14 ;sequence=MSAFDMSHGFFPREPICPFEEKTKIGTMVEDHRSNSYQDSVTFDDVAVEFTPEEWALLDTTQKYLYRDVMLENYMNLASVDFFFCLTSEWEIQPRTKRSSLQQGFLKNQIFTGIQMQTRSYSGWKLCENCGEVFSEQFCLKTHMRAQNGGNTFEGNCYGKDSISVHKEASIGQELSKFNPCGKVFTLTPGLAVHLEILNGRQPYKCKECGKGFKYFASLDNHMGIHIGEKLCEFQECERAITTSSHLKQCVAVHTGKKSEKTKNCGKSFTNFSQLSAHAKTHKGEKSFECKECGRSFRNSSSFNVHIQIHTGIKPHKCTECGKAFTRSTHLTQHVRTHTGIKPYECKECGQAFTQYTGLAIHIRNHTG [...]
+chr4-04	SwissProt	protein_match	329208	329282	46.000000	+	.	Target=Q9BUY5.1 127 150 +;percentID=44;Gap=M11 D1 M13 
+chr4-04	SwissProt	protein_match	329208	329282	54.000000	+	.	Target=Q8R1D1.1 124 148 +;percentID=48
+chr4-04	SwissProt	protein_match	329208	329282	61.000000	+	.	Target=A1L1L7.1 125 149 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262838	57.000000	-	.	Target=Q95K52.1 241 261 +;percentID=47
+chr4-04	SwissProt	protein_match	329247	329288	42.000000	+	.	Target=Q86T29.1 136 149 +;percentID=50
+chr4-04	SwissProt	protein_match	262776	262838	57.000000	-	.	Target=Q6PG37.1 312 332 +;percentID=47
+chr4-04	SwissProt	protein_match	329262	329294	43.000000	+	.	Target=Q8NDW4.1 138 148 +;percentID=54
+chr4-04	SwissProt	protein_match	329268	329327	49.000000	+	.	Target=Q8BV42.1 478 497 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262838	57.000000	-	.	Target=Q8N7M2.3 265 285 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	57.000000	-	.	Target=Q3KQV3.2 452 472 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262841	57.000000	-	.	Target=Q86V71.2 454 475 +;percentID=40
+chr4-04	SwissProt	protein_match	262776	262841	57.000000	-	.	Target=B2KFW1-2.2 546 567 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262838	58.000000	-	.	Target=Q8TAF7-2.2 344 364 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262841	57.000000	-	.	Target=P17040-2.3 922 943 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262841	58.000000	-	.	Target=Q9HBT7.1 670 691 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262841	56.000000	-	.	Target=Q6P9A3.1 390 411 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262838	56.000000	-	.	Target=Q14587-2.2 733 753 +;percentID=47;sequence=MDWHQENKDKLGSTAKSFECTTFGKLCLLSTKYLSRQKPHKCGTHGKSLKYIDFTSDYARNNPNGFQVHGKSFFHSKHEQTVIGIKYCESIESGKTVNKKSQLMCQQMYMGEKPFGCSCCEKAFSSKSYLLVHQQTHAEEKPYGCNECGKDFSSKSYLIVHQRIHTGEKLHECSECRKTFSFHSQLVIHQRIHTGENPYECCECGKVFSRKDQLVSHQKTHSGQKPYVCNECGKAFGLKSQLIIHERIHTGEKPYECNECQKAFNTKSNLMVHQRTHTGEKPYVCSDCGKAFTFKSQLIVHQGIHTGVKPYGCIQCGKGFSLKSQLIVHQRSHTGMKPYVCNECGKAFRSKSYLIIHTRTHTGEKLHECNNCGKAFSFKSQL [...]
+chr4-04	SwissProt	protein_match	262776	262841	58.000000	-	.	Target=O14978.2 604 625 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262838	58.000000	-	.	Target=Q8TAF7.2 471 491 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262838	58.000000	-	.	Target=Q9UJW8.2 635 655 +;percentID=47
+chr4-04	SwissProt	protein_match	330177	330383	79.000000	+	.	Target=Q6ZN55-2.2 758 826 +;percentID=41;Gap=M24 D1 M1 D2 M17 I1 M7 I3 M11 D1 M5 ;sequence=MPRATWANSKERSWAESERGPRDTGNGGSKAERHIQEIETGRGGDRAKAHRRQRMRLRGTERASLGPGRRLGDSRGTDMPGARAQGLAAATEESEETVLYIEHRYVCSECNQLYGSLEEVLMHQNSHVPQQHFELVGVADPGVTVATDTASGTGLYQTLVQESQYQCLECGQLLMSPSQLLEHQELHLKMMAPQEAVPAEPSPKAPPLSSSTIHYECVDCKALFASQELWLNHRQTHLRATPTKAPAPVVLGSPVVLGPPVGQARVAVEHSYRKAEEGGEGATVPSAAATTTEVVTEVELLLYKCSECSQLFQLPADFLEHQATHFPAPVPESQEPALQQE [...]
+chr4-04	SwissProt	protein_match	262776	262838	58.000000	-	.	Target=Q9NYW8.1 375 395 +;percentID=47
+chr4-04	SwissProt	protein_match	330177	330383	79.000000	+	.	Target=Q6ZN55.2 669 737 +;percentID=41;Gap=M24 D1 M1 D2 M17 I1 M7 I3 M11 D1 M5 ;sequence=MTEESEETVLYIEHRYVCSECNQLYGSLEEVLMHQNSHVPQQHFELVGVADPGVTVATDTASGTGLYQTLVQESQYQCLECGQLLMSPSQLLEHQELHLKMMAPQEAVPAEPSPKAPPLSSSTIHYECVDCKALFASQELWLNHRQTHLRATPTKAPAPVVLGSPVVLGPPVGQARVAVEHSYRKAEEGGEGATVPSAAATTTEVVTEVELLLYKCSECSQLFQLPADFLEHQATHFPAPVPESQEPALQQEVQASSPAEVPVSQPDPLPASDHSYELRNGEAIGRDRRGRRARRNNSGEAGGAATQELFCSACDQLFLSPHQLQQHLRSHREGVFKCPLCSR [...]
+chr4-04	SwissProt	protein_match	262776	262838	57.000000	-	.	Target=Q6J6I6.1 313 333 +;percentID=47
+chr4-04	SwissProt	protein_match	330356	330688	137.000000	+	.	Target=P86289.1 1 112 +;percentID=41;Gap=M7 I1 M7 I1 M20 D2 M5 D2 M16 I1 M11 D1 M13 I3 M27 ;sequence=GATGAPGIAGAPGFPGARGPSGPQGPSGAPGPKGVQGPPGPQGPRGLTGPIGPPGPAGAPGDKGEAGPSGPPGPTGARGSAGPPGATGFPGAAGRGETGPAGPAGPPGPAGAR
+chr4-04	SwissProt	protein_match	262776	262841	58.000000	-	.	Target=Q8N823.1 623 644 +;percentID=45
+chr4-04	SwissProt	protein_match	330362	330394	40.000000	-	.	Target=P51814-2.2 3 14 +;percentID=66;Gap=M3 I1 M8 
+chr4-04	SwissProt	protein_match	330362	330394	40.000000	-	.	Target=P51814-3.2 3 14 +;percentID=66;Gap=M3 I1 M8 
+chr4-04	SwissProt	protein_match	330362	330394	40.000000	-	.	Target=P51814-7.2 3 14 +;percentID=66;Gap=M3 I1 M8 
+chr4-04	SwissProt	protein_match	330362	330454	47.000000	-	.	Target=Q96CS4.1 2 30 +;percentID=45;Gap=M16 D1 M3 D1 M10 
+chr4-04	SwissProt	protein_match	262776	262841	58.000000	-	.	Target=Q14591.3 287 308 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262841	58.000000	-	.	Target=Q92670.2 377 398 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262841	58.000000	-	.	Target=Q6ZN19-2.1 426 447 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262838	57.000000	-	.	Target=Q96NJ6.1 311 331 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262841	57.000000	-	.	Target=Q9Y2H8.1 573 594 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262841	59.000000	-	.	Target=Q03936-3.2 338 359 +;percentID=40
+chr4-04	SwissProt	protein_match	262776	262841	59.000000	-	.	Target=Q03936.2 370 391 +;percentID=40
+chr4-04	SwissProt	protein_match	262776	262841	58.000000	-	.	Target=A2T812.1 670 691 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262838	58.000000	-	.	Target=Q7TSH9.1 511 531 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	59.000000	-	.	Target=Q2VY69.1 373 393 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	59.000000	-	.	Target=Q6P3V2.2 496 516 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262841	59.000000	-	.	Target=Q5CZA5.2 258 279 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262841	58.000000	-	.	Target=Q6P560.1 404 425 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262841	59.000000	-	.	Target=Q7Z340.3 420 441 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262838	59.000000	-	.	Target=Q9BS31.1 264 284 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262841	59.000000	-	.	Target=Q03936-2.2 301 322 +;percentID=40
+chr4-04	SwissProt	protein_match	262776	262841	58.000000	-	.	Target=A6NK31.3 292 313 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262838	59.000000	-	.	Target=Q52M93.1 496 516 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	59.000000	-	.	Target=Q6ECI4.2 483 503 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262841	59.000000	-	.	Target=Q8BZW4-2.1 304 325 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262838	59.000000	-	.	Target=Q8NB42.1 496 516 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262841	60.000000	-	.	Target=Q5RER9.1 356 377 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262841	60.000000	-	.	Target=Q86XU0.1 264 285 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262838	59.000000	-	.	Target=Q6ECI4-2.2 365 385 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262853	59.000000	-	.	Target=B2RUI1.2 530 555 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262838	59.000000	-	.	Target=Q80W31.1 433 453 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	60.000000	-	.	Target=Q07231.1 528 548 +;percentID=47;sequence=MTKVVGMATVLGPRPPQESMGPSPIKVEEDEEKDKCCPTLELSHKHFRQSGNQDTLEPMGPSTIKAEEDESKDKCRPNLEISRKSFKQFGYQDTLEQLGPSTIKAEEDDEKDKGHPSPEISRQRFRQFGYHDTPGPREALSQLRVLCCEWLQPEIHTKEQILELLVLEQFLTILPRELQTWVQQHCPESAEETVTLLEDLEQELDEPGLQVSSPPNEQKQSWEKMSTSGTAMESLSSTETQHVDASPKYEFWGPLYIQETGEEEVFTQDPRKRQGFKSNPQKEDSADEHRSSEEESHADGLKRTVIPMIPANKYGSRSERQWANNLERERGTKASLQDTGSRKGAEPASTRPAPGEKRYICAECGKAFSNSSNLTKHRRTHTGE [...]
+chr4-04	SwissProt	protein_match	262776	262838	60.000000	-	.	Target=A2T7L7.1 446 466 +;percentID=47;sequence=MMTKVLGMAPVLGPRPPQEQVGPLMVKVEEKEEKGKYLPSLEMFRQRFRQFGYHDTPGPREALSQLRVLCCEWLRPEIHTKEQILELLVLEQFLTILPQELQAWVQEHCPESAEEAVTLLEDLERELDEPGHQVSTPPNEQKPVWEKISSSGTAKESPSSVQPQPLETSHKYESWGPLYIQESGEEQAFAQDPRKVRDCRLSTQHEESADEQKASEAEGLKGDIISVIIANKPEARLERQCVNLXXEKGTKPPLQESGSKKGRESVPTKPTPGERRYICAECGKAFSNSSNLTKHRRTHTGEKPYVCTKCGKAFSHSSNLTLHYRTHLVDRPYDCKCGKAFGQSSDLLKHQRMHTEEAPYQCKDCGKAFSGKGSLIRHYRIHTG [...]
+chr4-04	SwissProt	protein_match	262776	262841	59.000000	-	.	Target=Q8BZW4.1 325 346 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262838	60.000000	-	.	Target=Q6ZN57.1 328 348 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262841	60.000000	-	.	Target=Q6AZW8.1 247 268 +;percentID=40;sequence=MRRKTRNFKHKTVKDNKVLTEGSDQESEKDNSQCCDPATNERVQAEKRQYVCTECGKAFSQSANLTVHERIHTGEKPYKCKECGKAFSHSSNLVVHRRIHTGLKPYTCSECGKSFSGKSHLIRHQGIHSGEKTYECKECGKAFSRSSGLISHHRVHTGEKPYSCIECGKAFSRSSNLTQHQRMHRGKKVYKCKECGKTCGSNTKIMDHQRIHTGEKPYECDECGKTFILRKTLNEHQRLHRREKPYKCNECGKAFTSNRNLVDHQRVHTGEKPYKCNECGKTFRQTSQVILHLRTHTKEKPYKCSECGKAYRYSSQLIQHQRKHNEEKETS
+chr4-04	SwissProt	protein_match	330368	330736	167.000000	+	.	Target=B8HG54.1 195 306 +;percentID=42;Gap=M12 D2 M16 D4 M18 D1 M10 D1 M13 D1 M4 D5 M11 I2 M8 I1 M17 ;sequence=MAKVRVHELAKELGITSKDAVTKLQELGEFVRSASSTIEAPVVRKLRNAFPDAANKAAAPAAPKAPAPAAESRPAAPAPGPAAPKAPAPKVEAPAPAAPAASAPAAPQASSAAPAAPSTGAKPGARPGPKAETPAPAPRQGGSSQGSSAPRPGGPRPGNNPFATSQGMPRGRGGDGDRAPRPGNNPFATSQGMPRPGRSDGERPGGPRPAAGAGGPRPGGPRPAPGAGGPRPAAGAGGPRPGAPRPGGPRPTPGMMPNRTERPAPAGAGRPGGGGRGPGRPGAPGTGGPGGGGGAPAGGGFGKGGRGRGGTQGAFGKGGA [...]
+chr4-04	SwissProt	protein_match	262776	262838	60.000000	-	.	Target=A2T712.1 446 466 +;percentID=47;sequence=MMTKVLGMAPVLGPRPPQEQVGPLMVKVEEKEEKGKYLPSLEMFRQRFRQFGYHDTPGPREALSQLRVLCCEWLRPEIHTKEQILELLVLEQFLTILPQELQAWVQEHCPESAEEAVTLLEDLERELDEPGHQVSTPPNEQKPVWEKISSSGTAKESPSSMQPQPLETCHKYESWGPLYIQESGEEQEFAQDPRKVRDCRLSTQHEESADEQKGSEAEGLKGDIISVIIANKPEASLERQCVNLENEKGTKPPLQEAGSKKGRESVPTKPTPGERRYICAECGKAFSNSSNLTKHRRTHTGEKPYVCTKCGKAFSHSSNLTLHYRTHLVDRPYDCKCGKAFGQSSDLLKHQRMHTEEAPYQCKDCGKAFSGKGSLIRHYRIHTG [...]
+chr4-04	SwissProt	protein_match	330369	330479	52.000000	+	.	Target=O60304.2 281 319 +;percentID=41;Gap=M17 I2 M20 ;sequence=MATVPGLQPLPTLEQDLEQEEILIVKVEEDFCLEEEPSVETEDPSPETFRQLFRLFCYQEVAGPREALSRLWELCCRWLRPELRTKEQILELLVLEQFLTVLPGEIQARVREQQPESGEEAVVLVEGLQRKPRKHRQRGSELLSDDEVPLGIGGQFLKHQAEAQPEDLSLEEEARFSSQQPPAQLSHRPQRGPLLWPERGPPAPRHQEMASASPFLSAWSQVPVNLEDVAVYLSGEEPRCMDPAQRDAPLENEGPGIQLEDGGDGREDAPLRMEWYRVLSARCQGPGHPLPGQRPAPVRGLVRPDQPRGGPPPGRRASHGADKPYTCPECGKGFSKTSHLTKHQRTHTGERPYKCLVCGKGFSDRSNF [...]
+chr4-04	SwissProt	protein_match	330374	330418	41.000000	-	.	Target=Q8R0T2.1 272 288 +;percentID=52;Gap=M10 I2 M5 ;sequence=MEREASSWGLESRDVHSPNAVGSPEGSLKDPAGNTSENEEGEISQREGNGDYEVEEIPFGLEPQSPEFEPQSPEFESQSPRFEPESPGFESRSPGFVPPSPEFAPRSPESDPQSPEFESQSPKYEPRSPGCHPRSPGCEPGSPRYEPKSPGYGSKSPEFESQSPGYESQSPGYEPQNSGDGVQNSEFKTHSPEFETQSSKFQEGAEMPLSPEEKNPLSISLGVHPLDSFTQGFGEQPTGALPPFDMPSGALLAAPQFEMLQNPLNLTGTLRGPGRRGGRARGGQGPRPNICGICGKSFGRGSTLIQHQRIHTGEKPYKCEVCSKAFSQSSDLIKHQRTHTGERPYKCPRCGKAFADSSYLLRHQRTHSG [...]
+chr4-04	SwissProt	protein_match	330374	330436	42.000000	-	.	Target=Q9H5H4.2 238 260 +;percentID=47;Gap=M16 I2 M5 ;sequence=MEREALPWGLEPQDVQSSDEMRSPEGYLRGNMSENEEEEISQQEGSGDYEVEEIPFGLEPQSPGFEPQSPEFEPQSPRFEPESPGFESRSPGLVPPSPEFAPRSPESDSQSPEFESQSPRYEPQSPGYEPRSPGYEPRSPGYESESSRYESQNTELKTQSPEFEAQSSKFQEGAEMLLNPEEKSPLNISVGVHPLDSFTQGFGEQPTGDLPIGPPFEMPTGALLSTPQFEMLQNPLGLTGALRGPGRRGGRARGGQGPRPNICGICGKSFGRGSTLIQHQRIHTGEKPYKCEVCSKAFSQSSDLIKHQRTHTGERPYKCPRCGKAFADSSYLLRHQRTHSGQKPYKCPHCGKAFGDSSYLLRHQRTHSH [...]
+chr4-04	SwissProt	protein_match	330579	330650	46.000000	-	.	Target=Q7Z340.3 2 25 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262838	60.000000	-	.	Target=Q1LZ87.1 511 531 +;percentID=42;sequence=MAVESRAVSTPVPQNSQEQELILVKVEESRSWGQKLKQSGSARSCQELFRQQFRKFCYQETPGPREALGRLQELCYQWLRPELHTKEQILELLVLEQFLSILPEELQIWVQQHSPKNGEEAVTLLEDLEREFDDPGQQVPATPQGPPMPWKDLTCLGAAQEFTHIQRQPLKKQLKPWEPCLPPKSGCENNESAIKKDISGEKSQRLSQEPSFGGFSEHKSSLEWQQGSAPGETLRRSPSQRASFSPVIFTHKLLANRDHPEPQRNLILSTNSVTYQKVPTEERPYRCDICGHSFKQHSSLTQHQRIHTGEKPYKCNQCGKAFSLRSYLIIHQRIHSGEKAYECSECGKAFNQSSALIRHRKIHTGEKACKCNECGKAFSQSSYL [...]
+chr4-04	SwissProt	protein_match	262776	262841	60.000000	-	.	Target=Q86XN6-3.2 329 350 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262841	60.000000	-	.	Target=Q9Y2L8.1 774 795 +;percentID=50
+chr4-04	SwissProt	protein_match	262776	262841	60.000000	-	.	Target=Q6ZN06.2 356 377 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262841	60.000000	-	.	Target=A2T7D2.1 774 795 +;percentID=50
+chr4-04	SwissProt	protein_match	262776	262838	60.000000	-	.	Target=Q6P9Y7.1 254 274 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	60.000000	-	.	Target=Q6ZMW2.1 648 668 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262841	60.000000	-	.	Target=Q8N972.1 309 330 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262838	61.000000	-	.	Target=Q96MU6.2 605 625 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262838	60.000000	-	.	Target=Q08DG8.1 495 515 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262838	60.000000	-	.	Target=P08042-2.3 255 275 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	60.000000	-	.	Target=Q5TYW1.2 800 820 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262838	60.000000	-	.	Target=Q6P9Y7-2.1 254 274 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	61.000000	-	.	Target=Q96MU6-2.2 577 597 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262838	60.000000	-	.	Target=P08042.3 268 288 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	61.000000	-	.	Target=Q6ZMS4.2 391 411 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	61.000000	-	.	Target=Q5EBM4.1 187 207 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262838	61.000000	-	.	Target=O75123.1 293 313 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	60.000000	-	.	Target=P52738.2 331 351 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262838	60.000000	-	.	Target=Q9NZL3.2 374 394 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262904	60.000000	-	.	Target=Q5VIY5-2.1 417 464 +;percentID=32;Gap=M8 D1 M11 I6 M23 
+chr4-04	SwissProt	protein_match	262776	262838	62.000000	-	.	Target=Q8R2V3.2 636 656 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262838	61.000000	-	.	Target=Q3KNS6-2.1 198 218 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262841	62.000000	-	.	Target=Q02975.1 522 543 +;percentID=50
+chr4-04	SwissProt	protein_match	262776	262838	61.000000	-	.	Target=Q3KNS6.1 382 402 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262841	61.000000	-	.	Target=P17035.4 608 629 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262841	61.000000	-	.	Target=P17035-2.4 555 576 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262838	61.000000	-	.	Target=Q5T5D7.1 357 377 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262841	62.000000	-	.	Target=Q61751.1 518 539 +;percentID=50
+chr4-04	SwissProt	protein_match	262776	262838	62.000000	-	.	Target=A2VDQ7.1 532 552 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262841	62.000000	-	.	Target=Q9Z1D9.2 495 516 +;percentID=50
+chr4-04	SwissProt	protein_match	262776	262838	62.000000	-	.	Target=P17027.3 450 470 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	62.000000	-	.	Target=Q8TAQ5.1 533 553 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262838	62.000000	-	.	Target=Q9HCL3.2 482 502 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262853	62.000000	-	.	Target=Q13398-3.2 546 571 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262838	61.000000	-	.	Target=Q8N184-1.3 476 496 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262841	62.000000	-	.	Target=Q14590-2.3 456 477 +;percentID=40
+chr4-04	SwissProt	protein_match	262776	262841	62.000000	-	.	Target=Q14590.3 460 481 +;percentID=40
+chr4-04	SwissProt	protein_match	262776	262853	62.000000	-	.	Target=Q13398-4.2 538 563 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262838	62.000000	-	.	Target=Q9BY31.2 502 522 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262841	62.000000	-	.	Target=Q8TF39.3 580 601 +;percentID=45;sequence=MQAVVPLNKMTAISPEPQTLASTEQNEVPRVVTSGEQEAILRGNAADAESFRQRFRWFCYSEVAGPRKALSQLWELCNQWLRPDIHTKEQILELLVFEQFLTILPGEIRIWVKSQHPESSEEVVTLIEDLTQMLEEKDPVSQDSTVSQEENSKEDKMVTVCPNTESCESITLKDVAVNFSRGEWKKLEPFQKELYKEVLLENLRNLEFLDFPVSKLELISQLKWVELPWLLEEVSKSSRLDESALDKIIERCLRDDDHGLMEESQQYCGSSEEDHGNQGNSKGRVAQNKTLGSGSRGKKFDPDKSPFGHNFKETSDLIKHLRVYLRKKSRRYNESKKPFSFHSDLVLNRKEKTAGEKSRKSNDGGKVLSHSSALTEHQKRQKIH [...]
+chr4-04	SwissProt	protein_match	331877	331918	48.000000	+	.	Target=P15622.3 185 198 +;percentID=64
+chr4-04	SwissProt	protein_match	331877	331918	48.000000	+	.	Target=P15622-2.3 180 193 +;percentID=64
+chr4-04	SwissProt	protein_match	331981	332115	53.000000	+	.	Target=Q0VAW7.1 291 332 +;percentID=43;Gap=M6 D1 M12 D1 M2 D1 M2 D1 M16 I1 M3 
+chr4-04	SwissProt	protein_match	262776	262853	62.000000	-	.	Target=Q13398-2.2 525 550 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262838	63.000000	-	.	Target=A6NDX5.5 635 655 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262853	62.000000	-	.	Target=Q13398.2 534 559 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262841	63.000000	-	.	Target=P59923.1 791 812 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262853	62.000000	-	.	Target=Q13398-6.2 514 539 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262853	62.000000	-	.	Target=Q13398-5.2 473 498 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262838	63.000000	-	.	Target=Q9UJN7.2 279 299 +;percentID=47;sequence=MESLRGNTAQGPTNEEDYKNEGQLSRQTKCPAQKKSSFENTVVRKVSVTLKEIFTGEEGPESSEFSLSPNLDAQQKIPKGHGSPISRKNSKDNSDLIKHQRLFSQRKPCKCNECEKAFSYQSDLLVHSRIHGGEKPFECNKCGKSFSRSTHLIEHQRTHTGEKPYECNECGKAFSRSTHLSLHQRIHTGEKPYECSECGKAFSRSTNLSQHQRTHTQERPYKCNECGKAFGDRSTIIQHQRIHTGENPYECSKCGKAFSWISSLTEHQRTHTGENPYECSECGKVFSRSSSLTEHQRIHSGEKPHECRVCGKGFSRSSSLIIHQRTHTGEKPYKCNDCGKAFCQSSTLIRHQHLHTKE
+chr4-04	SwissProt	protein_match	262776	262838	63.000000	-	.	Target=Q9NQX6.1 329 349 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262838	63.000000	-	.	Target=Q80YP6.1 357 377 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262841	62.000000	-	.	Target=Q96SK3-2.3 349 370 +;percentID=54
+chr4-04	SwissProt	protein_match	262776	262838	63.000000	-	.	Target=P16374.2 374 394 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262838	63.000000	-	.	Target=Q8N2I2.1 414 434 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262841	63.000000	-	.	Target=Q5MCW4.1 243 264 +;percentID=52;Gap=M9 D1 M4 I1 M8 
+chr4-04	SwissProt	protein_match	262776	262838	64.000000	-	.	Target=Q5RB33.1 366 386 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262838	63.000000	-	.	Target=Q5REA0.1 329 349 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262853	63.000000	-	.	Target=A2T6E3.1 522 547 +;percentID=46;sequence=MASTWAIQAHMDQDERLEVKIEEKKYTTRQDWDLHKNNTHSREVFRQYFRQFCYQETSGPREALSRLRELCHQWLRPETHTKEQILELLVLEQFLTILPEELQAWVQEQHPESGEEVVTVLEDLERELDEPGEQVSAHTGEHEMFLQKMVPLGKEGEPSMPLQSMKAQLKYESPELESQQEQVLDVETGNEYGNLKQEVSEEMKPHGNTSSKFENDMSQSARCGETHEPEEITEEPSACSREDKQPTCDENGVSLTENSDHTEHQRICPGEKSYGCDDCGKTFSQHSHLTEHQRIHTGDRPYKCEECGKAFRGRTVLIRHKIIHTGEKPYKCNECGKAFGRWSALNQHQRLHTGEKHYHCNDCGKAFSQKAGLFHHIKIHTRDK [...]
+chr4-04	SwissProt	protein_match	262776	262853	64.000000	-	.	Target=Q3MIS6.1 574 599 +;percentID=46
+chr4-04	SwissProt	protein_match	262776	262838	63.000000	-	.	Target=Q6JLC9.1 330 350 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262838	63.000000	-	.	Target=Q14587.2 390 410 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262841	64.000000	-	.	Target=Q09FC8-4.2 372 393 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262841	64.000000	-	.	Target=Q9UC06.2 337 358 +;percentID=50
+chr4-04	SwissProt	protein_match	262776	262841	64.000000	-	.	Target=Q8NDW4.1 521 542 +;percentID=50
+chr4-04	SwissProt	protein_match	262776	262838	64.000000	-	.	Target=Q06730.3 610 630 +;percentID=52
+chr4-04	SwissProt	protein_match	331981	332115	53.000000	+	.	Target=Q0VAW7-2.1 285 326 +;percentID=43;Gap=M6 D1 M12 D1 M2 D1 M2 D1 M16 I1 M3 
+chr4-04	SwissProt	protein_match	332046	332189	41.000000	+	.	Target=P17040-2.3 170 209 +;percentID=32;Gap=M8 I2 M13 D9 M12 D1 M5 
+chr4-04	SwissProt	protein_match	332098	332157	42.000000	+	.	Target=Q8TF45.2 115 130 +;percentID=40;Gap=M4 D4 M12 
+chr4-04	SwissProt	protein_match	332171	332236	41.000000	+	.	Target=A8MYF4.2 77 99 +;percentID=43;Gap=M9 I1 M13 
+chr4-04	SwissProt	protein_match	332880	332909	45.000000	-	.	Target=Q14591.3 106 115 +;percentID=60
+chr4-04	SwissProt	protein_match	333184	333246	44.000000	-	.	Target=Q62981.1 53 70 +;percentID=52;Gap=M3 D3 M15 ;sequence=MLESLQPESELLHDEPDPGEKVYECDECRKTFSLEQHFVEHKKTHGGEKSPECTGCGEEFSKASSLTRHLRSRSRRESYKCGNCGRTFSQRGNFLSHQKQHAEERPSESKKTPVPMTTIVRNQRNAGNKPYACKECGKAFNGKSYLKEHEKIHTGEKPFECNQCGRAFSQKQYLIKHQNVHSGKKPFKCNECGKAFSQKENLIIHQRIHTGEKPYECKGCGKAFIQKSSLIRHQRSHTGEKPYTCKECGKAFSGKSNLTEHEKIHIGEKPYKCNECGTIFRQKQYLIKHHNIHTGEKPYECNKCGKAFSRITSLIVHVRIHTGDKPYECKVCGKAFCQSSSLTVHMRSHTGEKPYGCNECGKAFSQFSTLA [...]
+chr4-04	SwissProt	protein_match	333238	333300	40.000000	+	.	Target=B2RUI1.2 263 282 +;percentID=42;Gap=M9 D1 M11 
+chr4-04	SwissProt	protein_match	335372	335422	40.000000	+	.	Target=Q02975.1 48 65 +;percentID=61;Gap=M3 I1 M14 
+chr4-04	SwissProt	protein_match	335442	335471	40.000000	-	.	Target=Q96NL3.1 205 214 +;percentID=60
+chr4-04	SwissProt	protein_match	335738	335800	41.000000	+	.	Target=Q8N7K0.1 131 153 +;percentID=43;Gap=M6 I2 M15 
+chr4-04	SwissProt	protein_match	335738	335800	41.000000	+	.	Target=Q8N7K0-2.1 96 118 +;percentID=43;Gap=M6 I2 M15 
+chr4-04	SwissProt	protein_match	336078	336137	41.000000	-	.	Target=Q14586.2 348 367 +;percentID=50
+chr4-04	SwissProt	protein_match	336437	336484	44.000000	+	.	Target=A6QLU5.1 90 105 +;percentID=43
+chr4-04	SwissProt	protein_match	336440	336511	41.000000	-	.	Target=Q03936-3.2 51 75 +;percentID=44;Gap=M13 I1 M11 
+chr4-04	SwissProt	protein_match	262776	262841	64.000000	-	.	Target=Q16587.2 556 577 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262838	64.000000	-	.	Target=Q6ZNG0.1 366 386 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262838	64.000000	-	.	Target=Q3SY52.1 325 345 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	64.000000	-	.	Target=Q8N8J6-2.2 385 405 +;percentID=57
+chr4-04	SwissProt	protein_match	262776	262841	64.000000	-	.	Target=Q5REN4.1 520 541 +;percentID=50
+chr4-04	SwissProt	protein_match	262776	262838	63.000000	-	.	Target=Q3SY52-3.1 278 298 +;percentID=47;sequence=MCVPVLKDILHLADLPGQKPYLVGECTNHHQHQKHHSAKKSLKRDMDRASYVKCCLFCMSLKPFRKWEVGKDLPAMLRLLRSLVFPGGKKPGTITECGEDIRSQKSHYKSGECGKASRHKHTPVYHPRVYTGKKLYECSKCGKAFRGKYSLVQHQRVHTGERPWECNECGKFFSQTSHLNDHRRIHTGERPYECSECGKLFRQNSSLVDHQKIHTGARPYECSQCGKSFSQKATLVKHQRVHTGERPYKCGECGNSFSQSAILNQHRRIHTGAKPYECGQCGKSFSQKATLIKHQRVHTGERPYKCGDCGKSFSQSSILIQHRRIHTGARPYECGQCGKSFSQKSGLIQHQVVHTGERPYECNKCGNSFSQCSSLIHHQKCHNT
+chr4-04	SwissProt	protein_match	262776	262838	64.000000	-	.	Target=Q5R4K8.2 373 393 +;percentID=57
+chr4-04	SwissProt	protein_match	262776	262853	64.000000	-	.	Target=Q5RBQ3.1 386 411 +;percentID=46
+chr4-04	SwissProt	protein_match	262776	262841	64.000000	-	.	Target=A6NGH9.3 226 247 +;percentID=50
+chr4-04	SwissProt	protein_match	262776	262841	64.000000	-	.	Target=Q16587-3.2 524 545 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262841	64.000000	-	.	Target=Q96IR2.2 888 909 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262841	64.000000	-	.	Target=Q8N4W9-2.2 443 464 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262838	64.000000	-	.	Target=Q8N8J6.2 374 394 +;percentID=57
+chr4-04	SwissProt	protein_match	262776	262838	64.000000	-	.	Target=Q8N8J6-3.2 385 405 +;percentID=57
+chr4-04	SwissProt	protein_match	262776	262841	64.000000	-	.	Target=Q16587-2.2 485 506 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262841	64.000000	-	.	Target=Q6ZMV8.1 313 334 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262841	64.000000	-	.	Target=Q09FC8-3.2 155 176 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262841	64.000000	-	.	Target=Q8N4W9.2 512 533 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262853	64.000000	-	.	Target=Q3MIS6-2.1 341 366 +;percentID=46
+chr4-04	SwissProt	protein_match	262776	262841	64.000000	-	.	Target=Q14593-2.3 422 443 +;percentID=45
+chr4-04	SwissProt	protein_match	336440	336511	41.000000	-	.	Target=Q03936.2 83 107 +;percentID=44;Gap=M13 I1 M11 
+chr4-04	SwissProt	protein_match	336440	336511	41.000000	-	.	Target=Q03936-2.2 14 38 +;percentID=44;Gap=M13 I1 M11 
+chr4-04	SwissProt	protein_match	336440	336511	41.000000	-	.	Target=Q8NEM1.2 92 116 +;percentID=44;Gap=M13 I1 M11 
+chr4-04	SwissProt	protein_match	336608	336754	223.000000	-	.	Target=P63276.2 87 135 +;percentID=91;sequence=MGRVRTKTVKKAARVIIEKYYTRLGNDFHTNKRVCEEIAIIPSKKLRNKIAGYVTHLMKRIQRGPVRGISIKLQEEERERRDNYVPEVSALDQEIIEVDPDTKEMLKLLDFGSLSNLQVTQPTVGMNFKTPRGAV
+chr4-04	SwissProt	protein_match	262776	262841	65.000000	-	.	Target=Q8BQC8.1 315 336 +;percentID=50
+chr4-04	SwissProt	protein_match	336608	336754	223.000000	-	.	Target=P63275.2 87 135 +;percentID=91;sequence=MGRVRTKTVKKAARVIIEKYYTRLGNDFHTNKRVCEEIAIIPSKKLRNKIAGYVTHLMKRIQRGPVRGISIKLQEEERERRDNYVPEVSALDQEIIEVDPDTKEMLKLLDFGSLSNLQVTQPTVGMNFKTPRGAV
+chr4-04	SwissProt	protein_match	262776	262838	65.000000	-	.	Target=Q8NDQ6.1 609 629 +;percentID=52
+chr4-04	SwissProt	protein_match	336608	336754	223.000000	-	.	Target=P63273.2 87 135 +;percentID=91;sequence=MGRVRTKTVKKAARVIIEKYYTRLGNDFHTNKRVCEEIAIIPSKKLRNKIAGYVTHLMKRIQRGPVRGISIKLQEEERERRDNYVPEVSALDQEIIEVDPDTKEMLKLLDFGSLSNLQVTQPTVGMNFKTPRGAV
+chr4-04	SwissProt	protein_match	262776	262841	64.000000	-	.	Target=Q14593.3 487 508 +;percentID=45
+chr4-04	SwissProt	protein_match	336608	336754	223.000000	-	.	Target=P04644.3 87 135 +;percentID=91;sequence=MGRVRTKTVKKAARVIIEKYYTRLGNDFHTNKRVCEEIAIIPSKNLRNKIAGYVTHLMKRIQRGPVRGISIKLQEEERERRDNYVPEVSALDQEIIEVDPDTKEMLKLLDFGSLSNLQVTQPTVGMNFKTPRGAV
+chr4-04	SwissProt	protein_match	262776	262841	65.000000	-	.	Target=Q86XN6.2 327 348 +;percentID=45
+chr4-04	SwissProt	protein_match	336608	336754	223.000000	-	.	Target=P63274.2 87 135 +;percentID=91;sequence=MGRVRTKTVKKAARVIIEKYYTRLGNDFHTNKRVCEEIAIIPSKKLRNKIAGYVTHLMKRIQRGPVRGISIKLQEEERERRDNYVPEVSALDQEIIEVDPDTKEMLKLLDFGSLSNLQVTQPTVGMNFKTPRGAV
+chr4-04	SwissProt	protein_match	262776	262841	65.000000	-	.	Target=Q8BQC8-2.1 314 335 +;percentID=50
+chr4-04	SwissProt	protein_match	262776	262838	65.000000	-	.	Target=Q8NDQ6-4.1 586 606 +;percentID=52;sequence=MLPNFKLYNFIEIFFKPLTPSKNRFHFVSYFENVNFMLCWLQENNFCLLLCFLSGLLSRHKTKKLSSEKDIHEISLSKESIIEKSKTLRLKGSIFRNEWQNKSEFEGQQGLKERSISQKKIVSKKMSTDRKRPSFTLNQRIHNSEKSCDSHLVQHGKIDSDVKHDCKECGSTFNNVYQLTLHQKIHTGEKSCKCEKCGKVFSHSYQLTLHQRFHTGEKPYECQECGKTFTLYPQLNRHQKIHTGKKPYMCKKCDKGFFSRLELTQHKRIHTGKKSYECKECGKVFQLIFYFKEHERIHTGKKPYECKECGKAFSVCGQLTRHQKIHTGVKPYECKECGKTFRLSFYLTEHRRTHAGKKPYECKECGKSFNVRGQLNRHKTIH [...]
+chr4-04	SwissProt	protein_match	262776	262841	65.000000	-	.	Target=Q5R8X1.1 478 499 +;percentID=50
+chr4-04	SwissProt	protein_match	262776	262838	65.000000	-	.	Target=Q8NDQ6-2.1 577 597 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262838	65.000000	-	.	Target=Q86TJ5.1 326 346 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	65.000000	-	.	Target=Q5R5S6.1 609 629 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262841	65.000000	-	.	Target=Q86XN6-2.2 327 348 +;percentID=45
+chr4-04	SwissProt	protein_match	336614	336754	220.000000	-	.	Target=Q90YQ6.3 87 133 +;percentID=93;sequence=MGRVRTKTVKKAARVIIEKYYTRLGNDFHTNKRVCEEIAIIPSKKLRNKIAGYVTHLMKRIQRGPVRGISIKLQEEERERRDNYVPEVSALDQEIIEVDPDTKEMLKLLDFGSLSNLQVTQPTVGMNFKTPRGV
+chr4-04	SwissProt	protein_match	262776	262838	65.000000	-	.	Target=Q15937.2 447 467 +;percentID=52
+chr4-04	SwissProt	protein_match	336614	336754	220.000000	-	.	Target=P08636.3 87 133 +;percentID=93;sequence=MGRVRTKTVKKAARVIIEKYYTRLGNDFHTNKRVCEEIAIIPSKKLRNKIAGYVTHLMKRIQRGPVRGISIKLQEEERERRDNYVPEVSALDQEIIEVDPDTKEMLKLLDFGSLSNLQVTQPTVGMNFKTPRGAL
+chr4-04	SwissProt	protein_match	262776	262841	67.000000	-	.	Target=Q9QXT9.1 540 561 +;percentID=54
+chr4-04	SwissProt	protein_match	336929	337108	41.000000	-	.	Target=Q8N4W9-2.2 34 96 +;percentID=31;Gap=M16 I1 M10 D1 M5 I1 M11 I2 M17 
+chr4-04	SwissProt	protein_match	337094	337150	43.000000	+	.	Target=A6NK31.3 4 22 +;percentID=52
+chr4-04	SwissProt	protein_match	337116	337175	40.000000	+	.	Target=B1APH4.3 89 108 +;percentID=40
+chr4-04	SwissProt	protein_match	337541	337702	140.000000	+	.	Target=Q8NDP4.1 4 60 +;percentID=50;Gap=M5 D1 M2 I4 M46 
+chr4-04	SwissProt	protein_match	262776	262838	65.000000	-	.	Target=P52742.2 496 516 +;percentID=57
+chr4-04	SwissProt	protein_match	262776	262838	66.000000	-	.	Target=P51786.2 304 324 +;percentID=57
+chr4-04	SwissProt	protein_match	262776	262841	67.000000	-	.	Target=Q9Z1D8.1 765 786 +;percentID=54
+chr4-04	SwissProt	protein_match	262776	262841	64.000000	-	.	Target=Q16587-4.2 484 505 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262838	67.000000	-	.	Target=Q99676.3 728 748 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262841	66.000000	-	.	Target=Q8IYB9.1 201 222 +;percentID=50
+chr4-04	SwissProt	protein_match	262776	262838	66.000000	-	.	Target=Q96JF6.3 626 646 +;percentID=57
+chr4-04	SwissProt	protein_match	262776	262841	68.000000	-	.	Target=O14709.1 511 532 +;percentID=59
+chr4-04	SwissProt	protein_match	262776	262838	66.000000	-	.	Target=Q9BWM5.1 384 404 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262841	66.000000	-	.	Target=Q8IZ26.2 287 308 +;percentID=50
+chr4-04	SwissProt	protein_match	262776	262838	68.000000	-	.	Target=A6QLU5.1 729 749 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262838	69.000000	-	.	Target=Q494X3.1 245 265 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262838	69.000000	-	.	Target=P10755.2 338 358 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262841	65.000000	-	.	Target=P17031.3 483 504 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262838	67.000000	-	.	Target=Q9Y6Q3.3 435 455 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262838	67.000000	-	.	Target=Q9Y6Q3-2.3 450 470 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262853	70.000000	-	.	Target=Q09FC8-5.2 353 378 +;percentID=46
+chr4-04	SwissProt	protein_match	262776	262841	68.000000	-	.	Target=P17097.1 279 300 +;percentID=50
+chr4-04	SwissProt	protein_match	337550	337699	97.000000	+	.	Target=P10754.2 115 162 +;percentID=46;Gap=M39 D2 M9 
+chr4-04	SwissProt	protein_match	337550	337699	97.000000	+	.	Target=P10754-2.2 108 155 +;percentID=46;Gap=M39 D2 M9 
+chr4-04	SwissProt	protein_match	337550	337699	101.000000	+	.	Target=O95201.2 115 162 +;percentID=48;Gap=M41 D2 M7 
+chr4-04	SwissProt	protein_match	337550	337699	116.000000	+	.	Target=Q13398-3.2 36 85 +;percentID=50
+chr4-04	SwissProt	protein_match	337550	337702	125.000000	+	.	Target=Q92670.2 196 246 +;percentID=49
+chr4-04	SwissProt	protein_match	337550	337699	160.000000	+	.	Target=Q96NG5.1 34 83 +;percentID=62
+chr4-04	SwissProt	protein_match	337550	337699	160.000000	+	.	Target=Q8N988-2.2 34 83 +;percentID=62
+chr4-04	SwissProt	protein_match	337550	337699	160.000000	+	.	Target=Q8N988.2 27 76 +;percentID=62
+chr4-04	SwissProt	protein_match	337550	337696	173.000000	+	.	Target=Q8IYN0.1 25 74 +;percentID=72;Gap=M8 I1 M41 
+chr4-04	SwissProt	protein_match	337550	337696	175.000000	+	.	Target=Q9H8G1.2 25 74 +;percentID=70;Gap=M8 I1 M41 
+chr4-04	SwissProt	protein_match	337550	337699	175.000000	+	.	Target=Q96NI8.1 5 54 +;percentID=66
+chr4-04	SwissProt	protein_match	337550	337705	179.000000	+	.	Target=Q8NE65.1 25 77 +;percentID=69;Gap=M8 I1 M44 
+chr4-04	SwissProt	protein_match	337550	337699	195.000000	+	.	Target=Q8TF32.2 25 75 +;percentID=74;Gap=M7 I1 M43 
+chr4-04	SwissProt	protein_match	262776	262838	71.000000	-	.	Target=Q8N184-2.3 311 331 +;percentID=57
+chr4-04	SwissProt	protein_match	262776	262838	69.000000	-	.	Target=Q60585.2 482 502 +;percentID=57
+chr4-04	SwissProt	protein_match	262776	262841	70.000000	-	.	Target=P10751.2 310 331 +;percentID=54
+chr4-04	SwissProt	protein_match	262776	262841	72.000000	-	.	Target=Q9HBT8.1 495 516 +;percentID=50
+chr4-04	SwissProt	protein_match	262776	262838	72.000000	-	.	Target=Q9XSR1.1 514 534 +;percentID=57
+chr4-04	SwissProt	protein_match	262776	262838	70.000000	-	.	Target=Q2TL60.1 202 222 +;percentID=57
+chr4-04	SwissProt	protein_match	262776	262841	70.000000	-	.	Target=Q9H7R5.1 282 303 +;percentID=50
+chr4-04	SwissProt	protein_match	262776	262853	70.000000	-	.	Target=Q09FC8-2.2 365 390 +;percentID=46
+chr4-04	SwissProt	protein_match	262776	262841	68.000000	-	.	Target=Q5RBX0.1 279 300 +;percentID=50
+chr4-04	SwissProt	protein_match	262776	262838	70.000000	-	.	Target=Q96SK3.3 255 275 +;percentID=61
+chr4-04	SwissProt	protein_match	262776	262841	76.000000	-	.	Target=Q8WV37.1 437 458 +;percentID=59
+chr4-04	SwissProt	protein_match	262776	262838	71.000000	-	.	Target=A2VDP4.1 311 331 +;percentID=57
+chr4-04	SwissProt	protein_match	262776	262838	71.000000	-	.	Target=Q8N184.3 311 331 +;percentID=57
+chr4-04	SwissProt	protein_match	262779	262850	67.000000	-	.	Target=Q8N587.2 116 139 +;percentID=41
+chr4-04	SwissProt	protein_match	262776	262844	79.000000	-	.	Target=Q08AN1.2 409 431 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262838	73.000000	-	.	Target=Q8N9F8.1 358 378 +;percentID=57
+chr4-04	SwissProt	protein_match	262776	262853	73.000000	-	.	Target=O60765.2 491 516 +;percentID=50
+chr4-04	SwissProt	protein_match	337556	337699	168.000000	+	.	Target=Q9NZV7.1 169 216 +;percentID=66
+chr4-04	SwissProt	protein_match	337559	337699	124.000000	+	.	Target=A2T812.1 157 203 +;percentID=46
+chr4-04	SwissProt	protein_match	337559	337699	124.000000	+	.	Target=Q9HBT7.1 157 203 +;percentID=46
+chr4-04	SwissProt	protein_match	337559	337699	131.000000	+	.	Target=P15622.3 16 62 +;percentID=57
+chr4-04	SwissProt	protein_match	337559	337702	145.000000	+	.	Target=Q8N7K0.1 1 48 +;percentID=54
+chr4-04	SwissProt	protein_match	337559	337702	151.000000	+	.	Target=P17024.2 1 48 +;percentID=54
+chr4-04	SwissProt	protein_match	337562	337696	120.000000	+	.	Target=Q9BWM5.1 23 67 +;percentID=55
+chr4-04	SwissProt	protein_match	337562	337696	158.000000	+	.	Target=A8MT65.2 38 82 +;percentID=64
+chr4-04	SwissProt	protein_match	337562	337717	164.000000	+	.	Target=Q9BR84.1 9 61 +;percentID=58;Gap=M46 I1 M6 
+chr4-04	SwissProt	protein_match	337562	337696	196.000000	+	.	Target=Q86XN6-2.2 3 47 +;percentID=84
+chr4-04	SwissProt	protein_match	337562	337696	196.000000	+	.	Target=Q86XN6.2 3 47 +;percentID=84
+chr4-04	SwissProt	protein_match	337565	337699	128.000000	+	.	Target=P51786.2 23 67 +;percentID=48
+chr4-04	SwissProt	protein_match	262779	262841	54.000000	-	.	Target=Q5HY98.1 216 236 +;percentID=47
+chr4-04	SwissProt	protein_match	337565	337696	137.000000	+	.	Target=A6NK31.3 58 101 +;percentID=70
+chr4-04	SwissProt	protein_match	337565	337768	137.000000	+	.	Target=Q96NJ3.2 4 71 +;percentID=45
+chr4-04	SwissProt	protein_match	337565	337699	141.000000	+	.	Target=Q2VY69.1 4 48 +;percentID=60
+chr4-04	SwissProt	protein_match	337565	337711	141.000000	+	.	Target=A0JNB1.1 19 67 +;percentID=57
+chr4-04	SwissProt	protein_match	337565	337711	142.000000	+	.	Target=Q9NYT6.2 4 52 +;percentID=55
+chr4-04	SwissProt	protein_match	262782	262838	49.000000	-	.	Target=Q5REI6.1 386 404 +;percentID=47
+chr4-04	SwissProt	protein_match	262779	262838	48.000000	-	.	Target=Q49A33-2.2 177 196 +;percentID=45
+chr4-04	SwissProt	protein_match	262782	262838	51.000000	-	.	Target=Q9HCZ1.2 658 676 +;percentID=47
+chr4-04	SwissProt	protein_match	262779	262838	48.000000	-	.	Target=Q49A33.3 177 196 +;percentID=45
+chr4-04	SwissProt	protein_match	262782	262838	53.000000	-	.	Target=Q5HYK9.2 557 575 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	74.000000	-	.	Target=Q9P2J8-2.3 460 480 +;percentID=61
+chr4-04	SwissProt	protein_match	262779	262844	64.000000	-	.	Target=P17038-2.4 196 217 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262838	74.000000	-	.	Target=Q9P2J8.3 586 606 +;percentID=61
+chr4-04	SwissProt	protein_match	262782	262841	56.000000	-	.	Target=Q6ZN19.1 594 613 +;percentID=50
+chr4-04	SwissProt	protein_match	262776	262853	70.000000	-	.	Target=Q09FC8.2 401 426 +;percentID=46
+chr4-04	SwissProt	protein_match	262776	262841	76.000000	-	.	Target=Q8WV37-3.1 287 308 +;percentID=59
+chr4-04	SwissProt	protein_match	262782	262853	64.000000	-	.	Target=Q9BX82.1 596 619 +;percentID=54
+chr4-04	SwissProt	protein_match	262782	262838	50.000000	-	.	Target=Q96MR9.2 602 620 +;percentID=47
+chr4-04	SwissProt	protein_match	262782	262841	69.000000	-	.	Target=Q8N9Z0-2.2 274 293 +;percentID=60
+chr4-04	SwissProt	protein_match	262782	262838	51.000000	-	.	Target=Q5RES8.1 656 674 +;percentID=47
+chr4-04	SwissProt	protein_match	262815	262853	40.000000	-	.	Target=O95780.1 478 490 +;percentID=46
+chr4-04	SwissProt	protein_match	262782	262838	54.000000	-	.	Target=Q2M3X9.1 555 573 +;percentID=52
+chr4-04	SwissProt	protein_match	337565	337711	142.000000	+	.	Target=A6NK53.2 4 52 +;percentID=57
+chr4-04	SwissProt	protein_match	337565	337714	142.000000	+	.	Target=Q9UIE0.3 4 53 +;percentID=54
+chr4-04	SwissProt	protein_match	337565	337699	143.000000	+	.	Target=Q6ZMW2.1 4 48 +;percentID=57
+chr4-04	SwissProt	protein_match	337565	337699	143.000000	+	.	Target=Q86WZ6.1 19 63 +;percentID=60
+chr4-04	SwissProt	protein_match	337565	337699	144.000000	+	.	Target=Q9HCZ1.2 6 50 +;percentID=60
+chr4-04	SwissProt	protein_match	337565	337699	144.000000	+	.	Target=Q9BUY5.1 38 82 +;percentID=55
+chr4-04	SwissProt	protein_match	337565	337699	144.000000	+	.	Target=Q52M93.1 23 67 +;percentID=60
+chr4-04	SwissProt	protein_match	337565	337696	146.000000	+	.	Target=Q8N587.2 37 80 +;percentID=59
+chr4-04	SwissProt	protein_match	337565	337696	146.000000	+	.	Target=Q4R882.1 37 80 +;percentID=59
+chr4-04	SwissProt	protein_match	337565	337696	146.000000	+	.	Target=P0C7V5.1 37 80 +;percentID=61
+chr4-04	SwissProt	protein_match	337565	337699	148.000000	+	.	Target=Q5RES8.1 4 48 +;percentID=60
+chr4-04	SwissProt	protein_match	262785	262838	50.000000	-	.	Target=Q9Y3M9.2 602 619 +;percentID=50
+chr4-04	SwissProt	protein_match	337565	337699	150.000000	+	.	Target=Q7TSH9.1 24 68 +;percentID=60
+chr4-04	SwissProt	protein_match	262782	262841	56.000000	-	.	Target=Q02525.2 578 597 +;percentID=50
+chr4-04	SwissProt	protein_match	337565	337711	152.000000	+	.	Target=Q14588.3 4 52 +;percentID=61
+chr4-04	SwissProt	protein_match	337565	337696	152.000000	+	.	Target=Q6V9R5.2 37 80 +;percentID=63
+chr4-04	SwissProt	protein_match	337565	337714	153.000000	+	.	Target=Q9UK13.2 26 75 +;percentID=58
+chr4-04	SwissProt	protein_match	337565	337696	153.000000	+	.	Target=Q8R2V3.2 215 258 +;percentID=63
+chr4-04	SwissProt	protein_match	262782	262838	49.000000	-	.	Target=Q3KP31.1 386 404 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262841	76.000000	-	.	Target=Q8WV37-2.1 379 400 +;percentID=59
+chr4-04	SwissProt	protein_match	262782	262853	79.000000	-	.	Target=Q06732-2.2 606 629 +;percentID=54
+chr4-04	SwissProt	protein_match	262815	262844	42.000000	-	.	Target=Q03938.2 201 210 +;percentID=50
+chr4-04	SwissProt	protein_match	262782	262853	79.000000	-	.	Target=Q06732.2 718 741 +;percentID=54
+chr4-04	SwissProt	protein_match	262856	263002	93.000000	-	.	Target=Q8N9F8.1 473 519 +;percentID=42;Gap=M9 D2 M38 
+chr4-04	SwissProt	protein_match	262785	262841	54.000000	-	.	Target=Q6ZNA1.2 891 909 +;percentID=47
+chr4-04	SwissProt	protein_match	262782	262838	56.000000	-	.	Target=A2RRD8.1 219 237 +;percentID=47
+chr4-04	SwissProt	protein_match	262785	262841	61.000000	-	.	Target=Q96SE7.1 374 392 +;percentID=52
+chr4-04	SwissProt	protein_match	262788	262838	40.000000	-	.	Target=P52737.1 366 382 +;percentID=41
+chr4-04	SwissProt	protein_match	262782	262853	60.000000	-	.	Target=P17098.2 394 417 +;percentID=50
+chr4-04	SwissProt	protein_match	262779	262844	64.000000	-	.	Target=P17038.4 202 223 +;percentID=45
+chr4-04	SwissProt	protein_match	262812	262841	43.000000	-	.	Target=Q9NYT6.2 504 513 +;percentID=60
+chr4-04	SwissProt	protein_match	262782	262838	42.000000	-	.	Target=A1L1L7.1 335 353 +;percentID=42
+chr4-04	SwissProt	protein_match	262815	262853	40.000000	-	.	Target=O95780-2.1 402 414 +;percentID=46
+chr4-04	SwissProt	protein_match	262856	262972	89.000000	-	.	Target=Q86T29.1 602 640 +;percentID=46
+chr4-04	SwissProt	protein_match	262843	262977	86.000000	-	.	Target=Q8N8C0-2.1 268 312 +;percentID=46;sequence=MQRNAMYLKNVAETACNFQLTQYQISHANQKPYECQICGKPFRKRAHLTQHNRIHTGGKPYECKECGKVFICCSTLIQHKRTHTSEKPYECLECRKTFRRSAHLIRHQRIHTGEKPYKCKQCWKAFASVSDLIDIGKFTLMRDFTNVQNVGRHLTIAQLLFSIREFTLVRSPLNVRNVAKHSIIAQHLLNTRELILMRNLMNVRNVKRLLGKVHILLNIKEFILVRNHMSVSNVGRLSLVFLILIDIREFTLVKNPMNVKNVVELLTIVQLLFNTREFTLVRRLMNISSVGRFLSPVQHLFNIREHILMKNLMNVSNARRPSSIMHI
+chr4-04	SwissProt	protein_match	262859	262984	54.000000	-	.	Target=Q6P1L6-2.1 438 481 +;percentID=29;Gap=M4 I2 M38 
+chr4-04	SwissProt	protein_match	337565	337699	154.000000	+	.	Target=Q6P3V2.2 23 67 +;percentID=62
+chr4-04	SwissProt	protein_match	337565	337699	154.000000	+	.	Target=A6QLU5.1 24 68 +;percentID=62
+chr4-04	SwissProt	protein_match	337565	337699	155.000000	+	.	Target=A1L1L7.1 36 80 +;percentID=57
+chr4-04	SwissProt	protein_match	262859	262957	68.000000	-	.	Target=A2VDP4.1 383 415 +;percentID=42
+chr4-04	SwissProt	protein_match	337565	337711	155.000000	+	.	Target=Q14590-2.3 4 52 +;percentID=61
+chr4-04	SwissProt	protein_match	337565	337711	155.000000	+	.	Target=Q14590.3 4 52 +;percentID=61
+chr4-04	SwissProt	protein_match	337565	337738	157.000000	+	.	Target=Q12901.3 4 61 +;percentID=55
+chr4-04	SwissProt	protein_match	337565	337699	157.000000	+	.	Target=Q99676.3 24 68 +;percentID=62
+chr4-04	SwissProt	protein_match	337565	337699	193.000000	+	.	Target=Q86YE8.3 4 48 +;percentID=80
+chr4-04	SwissProt	protein_match	337568	337699	106.000000	+	.	Target=Q80YP6.1 11 54 +;percentID=52
+chr4-04	SwissProt	protein_match	337568	337699	107.000000	+	.	Target=A6NF35.2 12 55 +;percentID=52
+chr4-04	SwissProt	protein_match	337568	337699	108.000000	+	.	Target=Q08ER8.2 6 49 +;percentID=52
+chr4-04	SwissProt	protein_match	337568	337699	109.000000	+	.	Target=Q8TF45.2 2 45 +;percentID=52
+chr4-04	SwissProt	protein_match	337568	337699	111.000000	+	.	Target=Q6NX49.1 11 54 +;percentID=50
+chr4-04	SwissProt	protein_match	337568	337699	113.000000	+	.	Target=Q5CZA5.2 8 51 +;percentID=56
+chr4-04	SwissProt	protein_match	337568	337699	113.000000	+	.	Target=O43296.1 11 54 +;percentID=56
+chr4-04	SwissProt	protein_match	337568	337699	115.000000	+	.	Target=Q13398-4.2 34 77 +;percentID=56
+chr4-04	SwissProt	protein_match	262847	262993	101.000000	-	.	Target=Q6AZW8.1 252 300 +;percentID=42
+chr4-04	SwissProt	protein_match	262853	262924	53.000000	-	.	Target=Q14586.2 268 291 +;percentID=41
+chr4-04	SwissProt	protein_match	262788	262838	40.000000	-	.	Target=Q5REK1.1 366 382 +;percentID=41
+chr4-04	SwissProt	protein_match	262788	262841	53.000000	-	.	Target=Q14588.3 401 418 +;percentID=44
+chr4-04	SwissProt	protein_match	262853	262972	90.000000	-	.	Target=Q52M93.1 283 322 +;percentID=40
+chr4-04	SwissProt	protein_match	262782	262841	61.000000	-	.	Target=A8MYF4.2 327 346 +;percentID=55
+chr4-04	SwissProt	protein_match	262859	262957	73.000000	-	.	Target=Q7TNU6.1 304 336 +;percentID=42
+chr4-04	SwissProt	protein_match	262782	262841	69.000000	-	.	Target=Q8N9Z0.2 317 336 +;percentID=60
+chr4-04	SwissProt	protein_match	262859	262939	58.000000	-	.	Target=Q9HCG1.2 254 279 +;percentID=40;Gap=M4 D1 M22 
+chr4-04	SwissProt	protein_match	262859	262993	66.000000	-	.	Target=Q96SK3-2.3 186 230 +;percentID=36;Gap=M30 D1 M7 I1 M7 
+chr4-04	SwissProt	protein_match	262843	263190	115.000000	-	.	Target=Q8N8C0.1 101 200 +;percentID=34;Gap=M29 D6 M26 D10 M45 
+chr4-04	SwissProt	protein_match	262844	262981	67.000000	-	.	Target=P59923.1 960 1006 +;percentID=40;Gap=M43 I1 M3 
+chr4-04	SwissProt	protein_match	262847	262981	79.000000	-	.	Target=P24399.2 156 199 +;percentID=40;Gap=M41 D1 M3 
+chr4-04	SwissProt	protein_match	262859	262957	68.000000	-	.	Target=Q8N184-1.3 352 384 +;percentID=42
+chr4-04	SwissProt	protein_match	262785	262838	59.000000	-	.	Target=Q86T29.1 367 384 +;percentID=61
+chr4-04	SwissProt	protein_match	262859	263014	72.000000	-	.	Target=Q2M3W8-2.1 284 335 +;percentID=28
+chr4-04	SwissProt	protein_match	337568	337699	116.000000	+	.	Target=Q8TAU3.1 12 55 +;percentID=56
+chr4-04	SwissProt	protein_match	337568	337699	116.000000	+	.	Target=Q96SQ5.1 12 55 +;percentID=56
+chr4-04	SwissProt	protein_match	337568	337699	116.000000	+	.	Target=Q8IVC4.1 14 57 +;percentID=54
+chr4-04	SwissProt	protein_match	337568	337699	117.000000	+	.	Target=Q9HCX3.1 11 54 +;percentID=52
+chr4-04	SwissProt	protein_match	337568	337696	118.000000	+	.	Target=Q13106.3 11 53 +;percentID=60
+chr4-04	SwissProt	protein_match	337568	337717	118.000000	+	.	Target=Q3KQV3.2 11 60 +;percentID=52
+chr4-04	SwissProt	protein_match	337568	337696	120.000000	+	.	Target=Q9C0F3.2 11 53 +;percentID=55
+chr4-04	SwissProt	protein_match	337568	337696	120.000000	+	.	Target=Q5R5Y7.1 11 53 +;percentID=55
+chr4-04	SwissProt	protein_match	337568	337699	123.000000	+	.	Target=Q7TNU6.1 14 57 +;percentID=56
+chr4-04	SwissProt	protein_match	337568	337699	123.000000	+	.	Target=P15622-2.3 14 57 +;percentID=56
+chr4-04	SwissProt	protein_match	337568	337699	124.000000	+	.	Target=Q9EQB9.1 163 206 +;percentID=47;sequence=MANSSLSQVLLMWKPGKIQKGPCSAEQRTLTSRLLRDTETCRRNFRNFPYPDVAGPRKALCQLRELCLKWLRPEVHSKEQILELLVLEQFLSILPGEVRTWVNSQYPESSEEVVALVEDLTQILEEEEAPQSSALPQDTPEDDPNHDPNPASQAGWLSDVVTKDLVTFNDVAVDITQEDWELMPPVQKELYKTVTLQNYWNMVSLGLTVYRPTVIPVLEEPWMVIKEIVEGPNPGWEPKAQAQCPAKHLPELKQDGTQTVKLEDSYDDDNDDSVESPPVCAFGMIHIDEEGFSVKSELSQEDPTEEYLSKCDIYRVTFEKHTNLGVQFDTQSDDKTALHNESKPPFSNASSGGAVRGKILPGDKPYSCNVCGKQFRKYPSLLA [...]
+chr4-04	SwissProt	protein_match	337568	337699	124.000000	+	.	Target=Q8N184-2.3 3 46 +;percentID=52
+chr4-04	SwissProt	protein_match	337568	337702	124.000000	+	.	Target=Q9UC07.2 19 65 +;percentID=51;Gap=M3 I2 M42 
+chr4-04	SwissProt	protein_match	337568	337699	124.000000	+	.	Target=Q8N184.3 3 46 +;percentID=52
+chr4-04	SwissProt	protein_match	337568	337699	124.000000	+	.	Target=A8MYF4.2 27 70 +;percentID=52
+chr4-04	SwissProt	protein_match	337568	337699	126.000000	+	.	Target=Q6P9A1.2 11 54 +;percentID=59
+chr4-04	SwissProt	protein_match	337568	337696	127.000000	+	.	Target=Q6ZNG0.1 8 50 +;percentID=58
+chr4-04	SwissProt	protein_match	337568	337696	127.000000	+	.	Target=Q5RB33.1 8 50 +;percentID=58
+chr4-04	SwissProt	protein_match	262859	262972	74.000000	-	.	Target=Q12901.3 413 450 +;percentID=42
+chr4-04	SwissProt	protein_match	262859	262960	74.000000	-	.	Target=P51786.2 319 352 +;percentID=41
+chr4-04	SwissProt	protein_match	262859	262957	76.000000	-	.	Target=Q9NZL3.2 194 226 +;percentID=42
+chr4-04	SwissProt	protein_match	262859	262972	77.000000	-	.	Target=Q86Y25.1 257 294 +;percentID=42
+chr4-04	SwissProt	protein_match	262859	262972	77.000000	-	.	Target=Q8NB42.1 423 460 +;percentID=42
+chr4-04	SwissProt	protein_match	262859	262957	68.000000	-	.	Target=Q8N184-2.3 383 415 +;percentID=42
+chr4-04	SwissProt	protein_match	262859	262972	78.000000	-	.	Target=Q6ZN19-2.1 410 447 +;percentID=42
+chr4-04	SwissProt	protein_match	262859	262957	68.000000	-	.	Target=Q8N184.3 383 415 +;percentID=42
+chr4-04	SwissProt	protein_match	262859	262975	78.000000	-	.	Target=Q8BZW4-2.1 370 409 +;percentID=40;Gap=M6 I1 M33 
+chr4-04	SwissProt	protein_match	262859	262993	72.000000	-	.	Target=Q96GC6.1 569 613 +;percentID=37
+chr4-04	SwissProt	protein_match	262859	262981	79.000000	-	.	Target=Q96NG5.1 162 202 +;percentID=40;Gap=M17 I1 M2 D1 M21 
+chr4-04	SwissProt	protein_match	262859	262993	72.000000	-	.	Target=Q96GC6-2.1 537 581 +;percentID=37
+chr4-04	SwissProt	protein_match	262859	263011	72.000000	-	.	Target=Q8N988.2 341 391 +;percentID=33
+chr4-04	SwissProt	protein_match	262853	262993	72.000000	-	.	Target=Q96NJ3-2.2 335 381 +;percentID=38
+chr4-04	SwissProt	protein_match	262859	262978	81.000000	-	.	Target=Q16587-2.2 438 478 +;percentID=39;Gap=M2 I1 M38 
+chr4-04	SwissProt	protein_match	337568	337711	128.000000	+	.	Target=Q9UJU3.1 5 52 +;percentID=52
+chr4-04	SwissProt	protein_match	337568	337699	129.000000	+	.	Target=P51814.2 66 109 +;percentID=54
+chr4-04	SwissProt	protein_match	337568	337699	129.000000	+	.	Target=P51814-5.2 58 101 +;percentID=54
+chr4-04	SwissProt	protein_match	337568	337699	129.000000	+	.	Target=P51814-2.2 26 69 +;percentID=54
+chr4-04	SwissProt	protein_match	337568	337699	129.000000	+	.	Target=P51814-3.2 34 77 +;percentID=54
+chr4-04	SwissProt	protein_match	337568	337699	129.000000	+	.	Target=P51814-7.2 26 69 +;percentID=54
+chr4-04	SwissProt	protein_match	337568	337699	129.000000	+	.	Target=Q96BR6.2 87 130 +;percentID=54
+chr4-04	SwissProt	protein_match	337568	337699	129.000000	+	.	Target=Q9Y3M9.2 9 52 +;percentID=54
+chr4-04	SwissProt	protein_match	337568	337696	130.000000	+	.	Target=O14709.1 214 256 +;percentID=58
+chr4-04	SwissProt	protein_match	337568	337696	130.000000	+	.	Target=Q02975.1 11 53 +;percentID=58
+chr4-04	SwissProt	protein_match	337568	337696	130.000000	+	.	Target=P08042.3 4 46 +;percentID=55
+chr4-04	SwissProt	protein_match	337568	337711	130.000000	+	.	Target=Q0VAW7.1 5 52 +;percentID=56
+chr4-04	SwissProt	protein_match	337568	337699	133.000000	+	.	Target=Q8IZ26.2 11 54 +;percentID=63
+chr4-04	SwissProt	protein_match	337568	337699	134.000000	+	.	Target=Q5TYW1.2 5 48 +;percentID=54
+chr4-04	SwissProt	protein_match	337568	337699	134.000000	+	.	Target=Q5TYW1-2.2 5 48 +;percentID=54
+chr4-04	SwissProt	protein_match	337568	337699	134.000000	+	.	Target=Q9XSR1.1 12 55 +;percentID=61
+chr4-04	SwissProt	protein_match	337568	337699	134.000000	+	.	Target=Q6PGE4.1 151 194 +;percentID=63
+chr4-04	SwissProt	protein_match	262859	262957	82.000000	-	.	Target=Q5TYW1.2 732 764 +;percentID=42
+chr4-04	SwissProt	protein_match	262859	262972	82.000000	-	.	Target=Q02975.1 506 543 +;percentID=44
+chr4-04	SwissProt	protein_match	262859	263011	82.000000	-	.	Target=P17040-2.3 893 943 +;percentID=35
+chr4-04	SwissProt	protein_match	262859	262972	83.000000	-	.	Target=Q8N859.1 314 351 +;percentID=42
+chr4-04	SwissProt	protein_match	262859	262957	77.000000	-	.	Target=P17031.3 472 504 +;percentID=42
+chr4-04	SwissProt	protein_match	262859	262972	86.000000	-	.	Target=Q86XN6-2.2 479 516 +;percentID=44
+chr4-04	SwissProt	protein_match	262859	262957	78.000000	-	.	Target=Q9UK12.2 163 195 +;percentID=42
+chr4-04	SwissProt	protein_match	262859	262978	86.000000	-	.	Target=A2T6E3.1 452 491 +;percentID=40
+chr4-04	SwissProt	protein_match	262859	262975	78.000000	-	.	Target=Q8BZW4.1 391 430 +;percentID=40;Gap=M6 I1 M33 
+chr4-04	SwissProt	protein_match	262859	262981	88.000000	-	.	Target=Q61116.1 547 587 +;percentID=41
+chr4-04	SwissProt	protein_match	262859	262963	80.000000	-	.	Target=Q9QXT9.1 527 561 +;percentID=42
+chr4-04	SwissProt	protein_match	262859	262957	81.000000	-	.	Target=P15622.3 329 361 +;percentID=42
+chr4-04	SwissProt	protein_match	262859	262978	81.000000	-	.	Target=Q16587-4.2 437 477 +;percentID=39;Gap=M2 I1 M38 
+chr4-04	SwissProt	protein_match	262859	262993	89.000000	-	.	Target=Q969W8.1 261 305 +;percentID=40
+chr4-04	SwissProt	protein_match	262859	262993	72.000000	-	.	Target=Q96GC6-4.1 288 332 +;percentID=37
+chr4-04	SwissProt	protein_match	262859	262972	82.000000	-	.	Target=Q61751.1 502 539 +;percentID=44
+chr4-04	SwissProt	protein_match	337568	337699	134.000000	+	.	Target=Q96GC6-4.1 3 46 +;percentID=59
+chr4-04	SwissProt	protein_match	337568	337738	136.000000	+	.	Target=Q9UK10.2 5 61 +;percentID=47
+chr4-04	SwissProt	protein_match	337568	337696	137.000000	+	.	Target=Q16587-3.2 40 82 +;percentID=58
+chr4-04	SwissProt	protein_match	337568	337708	138.000000	+	.	Target=Q9UJW7.2 31 77 +;percentID=57
+chr4-04	SwissProt	protein_match	337568	337699	138.000000	+	.	Target=A2VDP4.1 3 46 +;percentID=56
+chr4-04	SwissProt	protein_match	337568	337699	138.000000	+	.	Target=P10078-2.3 100 143 +;percentID=61
+chr4-04	SwissProt	protein_match	337568	337699	138.000000	+	.	Target=P10078.3 100 143 +;percentID=61
+chr4-04	SwissProt	protein_match	337568	337708	139.000000	+	.	Target=Q02386.2 5 51 +;percentID=57
+chr4-04	SwissProt	protein_match	337568	337699	139.000000	+	.	Target=Q9QXT9.1 11 54 +;percentID=61
+chr4-04	SwissProt	protein_match	337568	337699	139.000000	+	.	Target=Q61116.1 5 48 +;percentID=61
+chr4-04	SwissProt	protein_match	337568	337699	139.000000	+	.	Target=Q9BY31.2 12 55 +;percentID=61
+chr4-04	SwissProt	protein_match	337568	337696	140.000000	+	.	Target=Q9UL58.1 161 203 +;percentID=65
+chr4-04	SwissProt	protein_match	337568	337738	140.000000	+	.	Target=Q9UK11.1 5 61 +;percentID=50
+chr4-04	SwissProt	protein_match	337568	337699	140.000000	+	.	Target=A6NFI3.1 155 198 +;percentID=63
+chr4-04	SwissProt	protein_match	337568	337702	140.000000	+	.	Target=Q6P560.1 5 49 +;percentID=60
+chr4-04	SwissProt	protein_match	337568	337699	141.000000	+	.	Target=Q2M218.1 5 48 +;percentID=59
+chr4-04	SwissProt	protein_match	337568	337699	142.000000	+	.	Target=Q86Y25.1 9 52 +;percentID=65
+chr4-04	SwissProt	protein_match	337568	337699	142.000000	+	.	Target=Q61751.1 11 54 +;percentID=63
+chr4-04	SwissProt	protein_match	262859	262993	91.000000	-	.	Target=A2T712.1 422 466 +;percentID=42
+chr4-04	SwissProt	protein_match	262859	262993	91.000000	-	.	Target=Q07231.1 504 548 +;percentID=42
+chr4-04	SwissProt	protein_match	262859	262993	91.000000	-	.	Target=A2T7L7.1 422 466 +;percentID=42
+chr4-04	SwissProt	protein_match	262859	262957	84.000000	-	.	Target=Q9UK11.1 194 226 +;percentID=45
+chr4-04	SwissProt	protein_match	262865	262969	73.000000	-	.	Target=Q8BQC8.1 328 362 +;percentID=40
+chr4-04	SwissProt	protein_match	262859	262972	86.000000	-	.	Target=Q86XN6.2 479 516 +;percentID=44
+chr4-04	SwissProt	protein_match	262859	262993	93.000000	-	.	Target=Q86XU0.1 269 313 +;percentID=42
+chr4-04	SwissProt	protein_match	262859	262972	86.000000	-	.	Target=Q86XN6-3.2 425 462 +;percentID=44
+chr4-04	SwissProt	protein_match	262859	263011	96.000000	-	.	Target=Q7Z7L9.1 473 523 +;percentID=41
+chr4-04	SwissProt	protein_match	262859	263002	88.000000	-	.	Target=Q3SY52.1 356 401 +;percentID=41;Gap=M12 D2 M34 
+chr4-04	SwissProt	protein_match	262859	263002	88.000000	-	.	Target=Q3SY52-2.1 301 346 +;percentID=41;Gap=M12 D2 M34 
+chr4-04	SwissProt	protein_match	262859	263002	88.000000	-	.	Target=Q3SY52-3.1 253 298 +;percentID=41;Gap=M12 D2 M34 
+chr4-04	SwissProt	protein_match	262859	262984	98.000000	-	.	Target=Q5REN4.1 498 541 +;percentID=45;Gap=M4 I2 M38 
+chr4-04	SwissProt	protein_match	262859	262993	89.000000	-	.	Target=Q14590-2.3 489 533 +;percentID=42
+chr4-04	SwissProt	protein_match	262859	262993	89.000000	-	.	Target=Q14590.3 493 537 +;percentID=42
+chr4-04	SwissProt	protein_match	262859	262972	82.000000	-	.	Target=Q6NX49.1 561 598 +;percentID=48;Gap=M14 I1 M2 D1 M21 
+chr4-04	SwissProt	protein_match	262859	262993	90.000000	-	.	Target=P17035-2.4 616 660 +;percentID=37
+chr4-04	SwissProt	protein_match	262862	262957	66.000000	-	.	Target=Q60585.2 274 305 +;percentID=40
+chr4-04	SwissProt	protein_match	337568	337699	143.000000	+	.	Target=Q16587.2 40 83 +;percentID=59
+chr4-04	SwissProt	protein_match	337568	337696	143.000000	+	.	Target=Q96PQ6-2.2 54 96 +;percentID=60
+chr4-04	SwissProt	protein_match	337568	337696	144.000000	+	.	Target=Q9HBT8.1 42 80 +;percentID=69;Gap=M25 D4 M14 
+chr4-04	SwissProt	protein_match	337568	337705	144.000000	+	.	Target=P17098.2 22 67 +;percentID=58
+chr4-04	SwissProt	protein_match	337568	337687	144.000000	+	.	Target=Q8NC26.1 3 42 +;percentID=67
+chr4-04	SwissProt	protein_match	337568	337696	147.000000	+	.	Target=Q86T29.1 3 45 +;percentID=62
+chr4-04	SwissProt	protein_match	337568	337687	147.000000	+	.	Target=Q8N4W9.2 21 60 +;percentID=75
+chr4-04	SwissProt	protein_match	337568	337699	148.000000	+	.	Target=Q5REN4.1 5 48 +;percentID=61
+chr4-04	SwissProt	protein_match	337568	337699	148.000000	+	.	Target=Q8NDW4.1 5 48 +;percentID=61
+chr4-04	SwissProt	protein_match	337568	337699	149.000000	+	.	Target=Q9Y2H8.1 43 86 +;percentID=63
+chr4-04	SwissProt	protein_match	337568	337699	149.000000	+	.	Target=Q8N8J6-2.2 5 48 +;percentID=63
+chr4-04	SwissProt	protein_match	337568	337699	149.000000	+	.	Target=Q8N8J6.2 5 48 +;percentID=63
+chr4-04	SwissProt	protein_match	337568	337699	149.000000	+	.	Target=Q8N8J6-3.2 5 48 +;percentID=63
+chr4-04	SwissProt	protein_match	337568	337699	149.000000	+	.	Target=Q5R4K8.2 4 47 +;percentID=63
+chr4-04	SwissProt	protein_match	337568	337699	149.000000	+	.	Target=Q96PQ6.2 54 97 +;percentID=61
+chr4-04	SwissProt	protein_match	337568	337696	151.000000	+	.	Target=P59923.1 231 273 +;percentID=65
+chr4-04	SwissProt	protein_match	337568	337696	151.000000	+	.	Target=Q9NQX6.1 3 45 +;percentID=69
+chr4-04	SwissProt	protein_match	262862	263347	95.000000	-	.	Target=Q96N38-3.1 198 347 +;percentID=27;Gap=M7 I1 M8 I1 M33 I1 M21 D5 M2 D2 M26 D8 M50 
+chr4-04	SwissProt	protein_match	262871	262972	76.000000	-	.	Target=Q9UII5.1 145 178 +;percentID=41
+chr4-04	SwissProt	protein_match	262871	263002	77.000000	-	.	Target=Q9C0F3.2 171 212 +;percentID=40;Gap=M9 D2 M13 I1 M2 D1 M17 
+chr4-04	SwissProt	protein_match	262859	262993	91.000000	-	.	Target=Q6ZNG0-2.1 228 272 +;percentID=42;sequence=MVGGLPGNVSQHLDFGSSLEQPQGHWIIKTKSKRRHFTDTSARHHEAYEVKNGEKFEKLGKNISVSTQLTTNQTNPSGQISYECGQCGRYFIQMADFHRHEKCHTGEKSFECKECGKYFRYNSLLIRHQIIHTGKKPFKCKECGKGLSSDTALIQHQRIHTGEKPYECKECGKAFSSSSVFLQHQRFHTGEKLYECNECWKTFSCSSSFTVHQRMHTGEKPYECKECGKRLSSNTALTQHQRIHTGEKPFECKECGKAFNQKITLIQHQRVHTGEKPYECKVCGKTFSWCGRFILHQKLHTQKTPVQA
+chr4-04	SwissProt	protein_match	262865	262993	76.000000	-	.	Target=Q3KP31.1 362 404 +;percentID=41
+chr4-04	SwissProt	protein_match	262859	262993	92.000000	-	.	Target=Q8TF39.3 529 573 +;percentID=40
+chr4-04	SwissProt	protein_match	262865	262981	80.000000	-	.	Target=Q9XSR1.1 606 644 +;percentID=43
+chr4-04	SwissProt	protein_match	262859	263002	94.000000	-	.	Target=Q9HCX3.1 337 385 +;percentID=40;Gap=M3 I1 M45 
+chr4-04	SwissProt	protein_match	262871	262960	59.000000	-	.	Target=Q96PQ6-4.2 322 351 +;percentID=40
+chr4-04	SwissProt	protein_match	262859	263011	96.000000	-	.	Target=Q7Z7L9-2.1 454 504 +;percentID=41
+chr4-04	SwissProt	protein_match	262859	263002	97.000000	-	.	Target=Q96LW9.2 328 373 +;percentID=43;Gap=M10 D2 M36 
+chr4-04	SwissProt	protein_match	262871	262960	59.000000	-	.	Target=Q96PQ6-2.2 375 404 +;percentID=40
+chr4-04	SwissProt	protein_match	262871	262993	61.000000	-	.	Target=Q8TAF7.2 503 540 +;percentID=40;Gap=M21 I1 M1 D4 M15 
+chr4-04	SwissProt	protein_match	262859	262984	98.000000	-	.	Target=Q8NDW4.1 499 542 +;percentID=45;Gap=M4 I2 M38 
+chr4-04	SwissProt	protein_match	262859	262993	99.000000	-	.	Target=Q9HBT8.1 444 488 +;percentID=42
+chr4-04	SwissProt	protein_match	262859	262978	99.000000	-	.	Target=Q8N2I2.1 394 434 +;percentID=48;Gap=M4 I1 M36 
+chr4-04	SwissProt	protein_match	337568	337696	151.000000	+	.	Target=Q5REA0.1 3 45 +;percentID=69
+chr4-04	SwissProt	protein_match	337568	337699	152.000000	+	.	Target=Q8N9F8.1 11 54 +;percentID=70
+chr4-04	SwissProt	protein_match	337568	337699	152.000000	+	.	Target=Q5JUW0.1 5 48 +;percentID=65
+chr4-04	SwissProt	protein_match	337568	337699	152.000000	+	.	Target=Q9BS31.1 5 48 +;percentID=65
+chr4-04	SwissProt	protein_match	337568	337699	152.000000	+	.	Target=Q2M3X9.1 5 48 +;percentID=65
+chr4-04	SwissProt	protein_match	337568	337699	152.000000	+	.	Target=Q5JUW0-2.1 5 48 +;percentID=65
+chr4-04	SwissProt	protein_match	337568	337699	152.000000	+	.	Target=Q06730.3 9 52 +;percentID=63
+chr4-04	SwissProt	protein_match	337568	337699	152.000000	+	.	Target=P52738.2 3 46 +;percentID=70
+chr4-04	SwissProt	protein_match	337568	337699	152.000000	+	.	Target=Q5JUW0-3.1 5 48 +;percentID=65
+chr4-04	SwissProt	protein_match	337568	337702	154.000000	+	.	Target=Q96JL9.3 200 244 +;percentID=64
+chr4-04	SwissProt	protein_match	337568	337699	154.000000	+	.	Target=A6NDX5.5 39 82 +;percentID=65
+chr4-04	SwissProt	protein_match	337568	337699	155.000000	+	.	Target=Q5MCW4.1 5 48 +;percentID=63
+chr4-04	SwissProt	protein_match	337568	337717	155.000000	+	.	Target=P10755.2 5 55 +;percentID=60;Gap=M44 I1 M6 
+chr4-04	SwissProt	protein_match	337568	337699	156.000000	+	.	Target=Q6ZMY9.1 11 54 +;percentID=68
+chr4-04	SwissProt	protein_match	337568	337699	156.000000	+	.	Target=Q9BX82.1 11 54 +;percentID=63
+chr4-04	SwissProt	protein_match	337568	337699	157.000000	+	.	Target=Q96RE9.1 5 48 +;percentID=63
+chr4-04	SwissProt	protein_match	337568	337699	157.000000	+	.	Target=Q96RE9-3.1 21 64 +;percentID=63
+chr4-04	SwissProt	protein_match	262871	262960	65.000000	-	.	Target=Q9HCZ1.2 645 674 +;percentID=43
+chr4-04	SwissProt	protein_match	262871	262960	65.000000	-	.	Target=Q5RES8.1 643 672 +;percentID=43
+chr4-04	SwissProt	protein_match	262859	263002	99.000000	-	.	Target=Q9Y2H8.1 434 482 +;percentID=42;Gap=M3 I1 M45 
+chr4-04	SwissProt	protein_match	262892	262993	83.000000	-	.	Target=O14628.2 250 283 +;percentID=41
+chr4-04	SwissProt	protein_match	262859	262972	90.000000	-	.	Target=Q80W31.1 276 313 +;percentID=42
+chr4-04	SwissProt	protein_match	262871	263002	77.000000	-	.	Target=Q8BPP0.1 153 194 +;percentID=40;Gap=M9 D2 M13 I1 M2 D1 M17 
+chr4-04	SwissProt	protein_match	262871	262972	81.000000	-	.	Target=Q9Y6Q3.3 586 619 +;percentID=47
+chr4-04	SwissProt	protein_match	262865	262969	73.000000	-	.	Target=Q8BQC8-2.1 327 361 +;percentID=40
+chr4-04	SwissProt	protein_match	262871	263002	82.000000	-	.	Target=Q5R5Y7.1 171 212 +;percentID=42;Gap=M9 D2 M13 I1 M2 D1 M17 
+chr4-04	SwissProt	protein_match	262865	262978	77.000000	-	.	Target=P17027.3 542 580 +;percentID=41;Gap=M3 I1 M35 
+chr4-04	SwissProt	protein_match	262871	262984	86.000000	-	.	Target=Q06732.2 476 515 +;percentID=45;Gap=M4 I2 M34 
+chr4-04	SwissProt	protein_match	262871	262957	59.000000	-	.	Target=Q8N8J6-3.2 541 569 +;percentID=41
+chr4-04	SwissProt	protein_match	262871	262993	90.000000	-	.	Target=Q3MIS6.1 499 539 +;percentID=43
+chr4-04	SwissProt	protein_match	262871	262960	59.000000	-	.	Target=Q96PQ6-3.2 290 319 +;percentID=40
+chr4-04	SwissProt	protein_match	262871	262960	59.000000	-	.	Target=Q96PQ6.2 407 436 +;percentID=40
+chr4-04	SwissProt	protein_match	262871	262993	99.000000	-	.	Target=Q06730.3 474 514 +;percentID=48
+chr4-04	SwissProt	protein_match	262880	262969	63.000000	-	.	Target=Q86UE3.2 287 318 +;percentID=40;Gap=M22 I2 M8 
+chr4-04	SwissProt	protein_match	262871	262993	61.000000	-	.	Target=Q8TAF7-2.2 376 413 +;percentID=40;Gap=M21 I1 M1 D4 M15 
+chr4-04	SwissProt	protein_match	262871	262957	62.000000	-	.	Target=P51508.3 600 628 +;percentID=41
+chr4-04	SwissProt	protein_match	337568	337699	157.000000	+	.	Target=Q96RE9-2.1 20 63 +;percentID=63
+chr4-04	SwissProt	protein_match	337568	337699	159.000000	+	.	Target=O60765.2 11 54 +;percentID=70
+chr4-04	SwissProt	protein_match	337568	337687	160.000000	+	.	Target=Q8N823.1 21 60 +;percentID=77
+chr4-04	SwissProt	protein_match	337568	337696	160.000000	+	.	Target=A2VDQ7.1 3 45 +;percentID=72
+chr4-04	SwissProt	protein_match	337568	337696	161.000000	+	.	Target=Q8NB42.1 11 53 +;percentID=72
+chr4-04	SwissProt	protein_match	337568	337699	164.000000	+	.	Target=Q969W8.1 3 46 +;percentID=65
+chr4-04	SwissProt	protein_match	337568	337699	164.000000	+	.	Target=Q8R1D1.1 36 79 +;percentID=63
+chr4-04	SwissProt	protein_match	337568	337699	164.000000	+	.	Target=Q6J6I6.1 3 46 +;percentID=65
+chr4-04	SwissProt	protein_match	337568	337696	165.000000	+	.	Target=Q8TAQ5.1 3 45 +;percentID=72
+chr4-04	SwissProt	protein_match	337568	337699	166.000000	+	.	Target=Q8N859.1 16 59 +;percentID=72
+chr4-04	SwissProt	protein_match	337568	337696	166.000000	+	.	Target=Q86TJ5.1 42 84 +;percentID=69
+chr4-04	SwissProt	protein_match	337568	337699	168.000000	+	.	Target=Q9P2J8.3 51 94 +;percentID=68
+chr4-04	SwissProt	protein_match	337568	337699	172.000000	+	.	Target=Q8N9Z0.2 21 64 +;percentID=79
+chr4-04	SwissProt	protein_match	337568	337699	172.000000	+	.	Target=Q8N9Z0-2.2 21 64 +;percentID=79
+chr4-04	SwissProt	protein_match	337568	337714	183.000000	+	.	Target=Q96SE7.1 5 53 +;percentID=73
+chr4-04	SwissProt	protein_match	337568	337714	186.000000	+	.	Target=Q9HCG1.2 5 53 +;percentID=77
+chr4-04	SwissProt	protein_match	337568	337699	192.000000	+	.	Target=O14628-6.2 5 48 +;percentID=86
+chr4-04	SwissProt	protein_match	337568	337699	192.000000	+	.	Target=O14628-7.2 5 48 +;percentID=86
+chr4-04	SwissProt	protein_match	262889	262972	70.000000	-	.	Target=Q9BY31.2 457 484 +;percentID=50
+chr4-04	SwissProt	protein_match	262892	262972	67.000000	-	.	Target=Q9BWM5.1 535 561 +;percentID=40
+chr4-04	SwissProt	protein_match	262892	262993	81.000000	-	.	Target=Q6ZNA1.2 308 341 +;percentID=50
+chr4-04	SwissProt	protein_match	262901	263011	68.000000	-	.	Target=Q5RBQ3.1 304 340 +;percentID=40
+chr4-04	SwissProt	protein_match	262871	262972	71.000000	-	.	Target=A0JPL0.1 308 341 +;percentID=41
+chr4-04	SwissProt	protein_match	262892	262993	83.000000	-	.	Target=O14628-6.2 231 264 +;percentID=41
+chr4-04	SwissProt	protein_match	262892	262993	83.000000	-	.	Target=O14628-4.2 178 211 +;percentID=41
+chr4-04	SwissProt	protein_match	262892	262993	83.000000	-	.	Target=O14628-7.2 182 215 +;percentID=41
+chr4-04	SwissProt	protein_match	262901	262951	50.000000	-	.	Target=Q9NV72.1 262 278 +;percentID=52
+chr4-04	SwissProt	protein_match	262871	262972	81.000000	-	.	Target=Q9Y6Q3-2.3 601 634 +;percentID=47
+chr4-04	SwissProt	protein_match	262901	262960	51.000000	-	.	Target=Q9UIE0.3 325 344 +;percentID=45
+chr4-04	SwissProt	protein_match	262871	262984	86.000000	-	.	Target=Q06732-2.2 364 403 +;percentID=45;Gap=M4 I2 M34 
+chr4-04	SwissProt	protein_match	262901	262978	56.000000	-	.	Target=Q15935.2 278 304 +;percentID=44;Gap=M2 I1 M24 
+chr4-04	SwissProt	protein_match	262871	262978	88.000000	-	.	Target=Q9Y6R6.1 175 211 +;percentID=45;Gap=M2 I1 M34 
+chr4-04	SwissProt	protein_match	262901	262984	57.000000	-	.	Target=Q96JC4.1 192 221 +;percentID=43;Gap=M4 I2 M24 
+chr4-04	SwissProt	protein_match	262871	263002	90.000000	-	.	Target=P52738.2 247 291 +;percentID=42;Gap=M3 I1 M41 
+chr4-04	SwissProt	protein_match	337568	337696	195.000000	+	.	Target=Q5RER9.1 5 47 +;percentID=88
+chr4-04	SwissProt	protein_match	337568	337696	195.000000	+	.	Target=Q9NV72.1 5 47 +;percentID=88
+chr4-04	SwissProt	protein_match	337568	337708	195.000000	+	.	Target=Q86XU0.1 5 51 +;percentID=78
+chr4-04	SwissProt	protein_match	337568	337696	195.000000	+	.	Target=A2RRD8.1 5 47 +;percentID=88
+chr4-04	SwissProt	protein_match	337568	337696	195.000000	+	.	Target=Q5VIY5.1 5 47 +;percentID=88
+chr4-04	SwissProt	protein_match	337568	337696	195.000000	+	.	Target=Q6ZN06.2 5 47 +;percentID=88
+chr4-04	SwissProt	protein_match	337568	337696	195.000000	+	.	Target=Q7L2R6.2 5 47 +;percentID=88
+chr4-04	SwissProt	protein_match	337568	337696	195.000000	+	.	Target=Q96IR2.2 5 47 +;percentID=88
+chr4-04	SwissProt	protein_match	337568	337696	195.000000	+	.	Target=P17035.4 5 47 +;percentID=88
+chr4-04	SwissProt	protein_match	337568	337696	195.000000	+	.	Target=Q7L2R6-2.2 5 47 +;percentID=88;sequence=MALPQGLLTFRDVAIEFSQEEWKCLDPAQRTLYRDVMLENYRNLVSLELSGECPLAAPAS
+chr4-04	SwissProt	protein_match	337571	337696	127.000000	+	.	Target=Q15935.2 2 43 +;percentID=57
+chr4-04	SwissProt	protein_match	337571	337696	129.000000	+	.	Target=Q5REF1.1 46 87 +;percentID=59
+chr4-04	SwissProt	protein_match	337571	337699	130.000000	+	.	Target=P52742.2 12 54 +;percentID=58
+chr4-04	SwissProt	protein_match	337571	337699	134.000000	+	.	Target=Q5JVG2.1 6 48 +;percentID=55
+chr4-04	SwissProt	protein_match	337571	337699	136.000000	+	.	Target=Q2TAN0.1 5 47 +;percentID=60
+chr4-04	SwissProt	protein_match	337571	337699	136.000000	+	.	Target=A8MVS1.1 5 47 +;percentID=60
+chr4-04	SwissProt	protein_match	337571	337699	136.000000	+	.	Target=A8K971.2 5 47 +;percentID=60
+chr4-04	SwissProt	protein_match	337571	337699	139.000000	+	.	Target=Q8BZW4.1 26 68 +;percentID=55
+chr4-04	SwissProt	protein_match	262904	262972	49.000000	-	.	Target=Q9NYW8.1 524 546 +;percentID=47
+chr4-04	SwissProt	protein_match	262901	262984	57.000000	-	.	Target=A6NF79.3 191 220 +;percentID=43;Gap=M4 I2 M24 
+chr4-04	SwissProt	protein_match	262901	262984	57.000000	-	.	Target=A6NKZ1.3 191 220 +;percentID=43;Gap=M4 I2 M24 
+chr4-04	SwissProt	protein_match	262871	262993	90.000000	-	.	Target=Q3MIS6-2.1 266 306 +;percentID=43
+chr4-04	SwissProt	protein_match	262901	262972	58.000000	-	.	Target=Q6ZMW2.1 351 374 +;percentID=45
+chr4-04	SwissProt	protein_match	262901	262957	61.000000	-	.	Target=Q8N823.1 612 630 +;percentID=52
+chr4-04	SwissProt	protein_match	262880	262972	74.000000	-	.	Target=Q96NJ3.2 385 417 +;percentID=48;Gap=M23 I2 M8 
+chr4-04	SwissProt	protein_match	262901	262963	67.000000	-	.	Target=Q6ZNG0.1 380 400 +;percentID=52
+chr4-04	SwissProt	protein_match	262904	262996	54.000000	-	.	Target=A8MVS1.1 261 291 +;percentID=41
+chr4-04	SwissProt	protein_match	262901	262993	68.000000	-	.	Target=Q9UK10.2 602 632 +;percentID=41
+chr4-04	SwissProt	protein_match	262901	263011	68.000000	-	.	Target=Q6P9A3-2.1 291 327 +;percentID=40
+chr4-04	SwissProt	protein_match	262892	262993	83.000000	-	.	Target=O14628-5.2 227 260 +;percentID=41
+chr4-04	SwissProt	protein_match	262901	262993	70.000000	-	.	Target=Q96IR2.2 669 699 +;percentID=45
+chr4-04	SwissProt	protein_match	262901	263014	76.000000	-	.	Target=Q494X3.1 354 391 +;percentID=42
+chr4-04	SwissProt	protein_match	262901	262993	81.000000	-	.	Target=A2RRD8.1 251 281 +;percentID=48
+chr4-04	SwissProt	protein_match	262901	263002	83.000000	-	.	Target=Q8TAU3.1 522 556 +;percentID=40;Gap=M3 I1 M31 
+chr4-04	SwissProt	protein_match	262901	262957	50.000000	-	.	Target=P16374.2 247 265 +;percentID=42
+chr4-04	SwissProt	protein_match	337571	337699	140.000000	+	.	Target=Q9UK12.2 6 48 +;percentID=62
+chr4-04	SwissProt	protein_match	337571	337762	142.000000	+	.	Target=P17097.1 2 59 +;percentID=46;Gap=M44 D6 M14 
+chr4-04	SwissProt	protein_match	337571	337762	142.000000	+	.	Target=Q5RBX0.1 2 59 +;percentID=46;Gap=M44 D6 M14 
+chr4-04	SwissProt	protein_match	337571	337696	142.000000	+	.	Target=Q96GC6.1 12 53 +;percentID=64
+chr4-04	SwissProt	protein_match	337571	337696	142.000000	+	.	Target=Q96GC6-2.1 12 53 +;percentID=64
+chr4-04	SwissProt	protein_match	337571	337771	143.000000	+	.	Target=Q8BZW4-2.1 26 102 +;percentID=41;Gap=M43 I6 M4 I4 M20 
+chr4-04	SwissProt	protein_match	337571	337699	152.000000	+	.	Target=Q571J5.2 12 54 +;percentID=67
+chr4-04	SwissProt	protein_match	337571	337711	153.000000	+	.	Target=Q96MR9.2 108 154 +;percentID=61
+chr4-04	SwissProt	protein_match	337571	337711	157.000000	+	.	Target=P10076.2 7 53 +;percentID=59
+chr4-04	SwissProt	protein_match	337571	337699	168.000000	+	.	Target=Q8TAF7.2 4 46 +;percentID=72
+chr4-04	SwissProt	protein_match	337571	337699	173.000000	+	.	Target=Q96H40.3 2 44 +;percentID=79
+chr4-04	SwissProt	protein_match	337571	337699	175.000000	+	.	Target=O95780.1 2 44 +;percentID=81
+chr4-04	SwissProt	protein_match	337571	337699	210.000000	+	.	Target=Q3SXZ3.1 2 44 +;percentID=93
+chr4-04	SwissProt	protein_match	337571	337699	218.000000	+	.	Target=Q8IYB9.1 2 44 +;percentID=95
+chr4-04	SwissProt	protein_match	337571	337780	220.000000	+	.	Target=Q8TB69.1 2 71 +;percentID=64
+chr4-04	SwissProt	protein_match	337571	337699	229.000000	+	.	Target=Q15928.1 2 44 +;percentID=100
+chr4-04	SwissProt	protein_match	337574	337699	110.000000	+	.	Target=Q96NL3.1 8 49 +;percentID=54
+chr4-04	SwissProt	protein_match	262904	262993	57.000000	-	.	Target=Q5REI6.1 334 363 +;percentID=40
+chr4-04	SwissProt	protein_match	262904	262993	58.000000	-	.	Target=O43296.1 405 434 +;percentID=40
+chr4-04	SwissProt	protein_match	262904	262972	59.000000	-	.	Target=Q9NQX6.1 172 194 +;percentID=43
+chr4-04	SwissProt	protein_match	262901	263002	83.000000	-	.	Target=A8MYF4.2 272 306 +;percentID=48;Gap=M2 I1 M32 
+chr4-04	SwissProt	protein_match	262901	263002	86.000000	-	.	Target=Q96SQ5.1 522 556 +;percentID=42;Gap=M3 I1 M31 
+chr4-04	SwissProt	protein_match	262904	262957	48.000000	-	.	Target=A1L1L7.1 295 312 +;percentID=44
+chr4-04	SwissProt	protein_match	262901	262963	56.000000	-	.	Target=Q5RB33.1 380 400 +;percentID=50;Gap=M11 I1 M3 D1 M6 
+chr4-04	SwissProt	protein_match	262904	262957	62.000000	-	.	Target=Q2VY69.1 501 518 +;percentID=61
+chr4-04	SwissProt	protein_match	262901	262957	56.000000	-	.	Target=Q96MR9.2 366 384 +;percentID=52
+chr4-04	SwissProt	protein_match	262904	262957	50.000000	-	.	Target=A6NF35.2 400 417 +;percentID=44
+chr4-04	SwissProt	protein_match	262904	262972	52.000000	-	.	Target=Q96H40.3 186 208 +;percentID=43
+chr4-04	SwissProt	protein_match	262904	262993	53.000000	-	.	Target=P17020.3 467 496 +;percentID=40
+chr4-04	SwissProt	protein_match	262901	262984	57.000000	-	.	Target=P0CB33.1 192 221 +;percentID=43;Gap=M4 I2 M24 
+chr4-04	SwissProt	protein_match	262904	262993	53.000000	-	.	Target=A2T759.1 467 496 +;percentID=40
+chr4-04	SwissProt	protein_match	262904	262996	54.000000	-	.	Target=Q2TAN0.1 261 291 +;percentID=41
+chr4-04	SwissProt	protein_match	262901	262984	64.000000	-	.	Target=P52744.2 117 146 +;percentID=40;Gap=M4 I2 M24 
+chr4-04	SwissProt	protein_match	262904	262996	54.000000	-	.	Target=A8K971.2 261 291 +;percentID=41
+chr4-04	SwissProt	protein_match	262904	262960	55.000000	-	.	Target=Q8IYB9.1 497 515 +;percentID=47
+chr4-04	SwissProt	protein_match	337574	337711	120.000000	+	.	Target=Q0VAW7-2.1 1 46 +;percentID=54
+chr4-04	SwissProt	protein_match	337574	337699	123.000000	+	.	Target=P51815.2 234 275 +;percentID=54
+chr4-04	SwissProt	protein_match	337574	337699	125.000000	+	.	Target=Q02525.2 58 99 +;percentID=54
+chr4-04	SwissProt	protein_match	337574	337699	139.000000	+	.	Target=P17031.3 13 54 +;percentID=57
+chr4-04	SwissProt	protein_match	337574	337699	150.000000	+	.	Target=P21506.3 13 54 +;percentID=66
+chr4-04	SwissProt	protein_match	337574	337717	154.000000	+	.	Target=Q6JLC9.1 5 53 +;percentID=65;Gap=M42 I1 M6 
+chr4-04	SwissProt	protein_match	337574	337699	164.000000	+	.	Target=Q80W31.1 7 48 +;percentID=69
+chr4-04	SwissProt	protein_match	337574	337699	164.000000	+	.	Target=Q7Z2F6.1 3 44 +;percentID=80
+chr4-04	SwissProt	protein_match	337574	337699	165.000000	+	.	Target=O75437.3 12 53 +;percentID=80
+chr4-04	SwissProt	protein_match	337574	337699	165.000000	+	.	Target=O75437-2.3 12 53 +;percentID=80
+chr4-04	SwissProt	protein_match	337574	337699	168.000000	+	.	Target=Q5R5S6.1 5 46 +;percentID=73
+chr4-04	SwissProt	protein_match	337574	337696	169.000000	+	.	Target=Q95K52.1 48 88 +;percentID=78
+chr4-04	SwissProt	protein_match	337574	337699	169.000000	+	.	Target=Q6PG37.1 4 45 +;percentID=71
+chr4-04	SwissProt	protein_match	337574	337696	169.000000	+	.	Target=Q8N7M2.3 72 112 +;percentID=78
+chr4-04	SwissProt	protein_match	337574	337699	172.000000	+	.	Target=Q8TD23.2 3 44 +;percentID=78
+chr4-04	SwissProt	protein_match	337574	337699	172.000000	+	.	Target=Q8NDQ6.1 5 46 +;percentID=76
+chr4-04	SwissProt	protein_match	337574	337699	172.000000	+	.	Target=Q8NDQ6-2.1 5 46 +;percentID=76
+chr4-04	SwissProt	protein_match	292426	292476	47.000000	+	.	Target=Q9QXT9.1 317 334 +;percentID=55;Gap=M3 I1 M14 
+chr4-04	SwissProt	protein_match	297619	297732	43.000000	+	.	Target=Q80YP6.1 56 88 +;percentID=42;Gap=M4 D1 M13 D3 M8 D1 M8 
+chr4-04	SwissProt	protein_match	297682	297747	43.000000	-	.	Target=Q5CZA5.2 34 55 +;percentID=40
+chr4-04	SwissProt	protein_match	297695	297769	44.000000	-	.	Target=Q96BR6.2 240 265 +;percentID=46;Gap=M14 I1 M11 
+chr4-04	SwissProt	protein_match	289828	289947	150.000000	-	.	Target=Q8NC26.1 3 42 +;percentID=70
+chr4-04	SwissProt	protein_match	262904	262993	55.000000	-	.	Target=Q2TL60.1 335 364 +;percentID=40
+chr4-04	SwissProt	protein_match	262904	262972	55.000000	-	.	Target=Q9NSJ1.2 248 270 +;percentID=43
+chr4-04	SwissProt	protein_match	262904	262957	56.000000	-	.	Target=P17035.4 261 278 +;percentID=55
+chr4-04	SwissProt	protein_match	262901	263011	68.000000	-	.	Target=Q6P9A3.1 304 340 +;percentID=40
+chr4-04	SwissProt	protein_match	309913	309948	45.000000	-	.	Target=Q96MU6.2 184 195 +;percentID=50
+chr4-04	SwissProt	protein_match	309931	309963	42.000000	-	.	Target=Q9NQZ8.1 50 60 +;percentID=63
+chr4-04	SwissProt	protein_match	262904	262972	59.000000	-	.	Target=Q5REA0.1 172 194 +;percentID=43
+chr4-04	SwissProt	protein_match	262904	262972	60.000000	-	.	Target=Q8N4W9.2 860 882 +;percentID=47
+chr4-04	SwissProt	protein_match	262904	262972	60.000000	-	.	Target=Q8N4W9-2.2 791 813 +;percentID=47
+chr4-04	SwissProt	protein_match	262904	262993	61.000000	-	.	Target=Q8N972.1 146 175 +;percentID=43
+chr4-04	SwissProt	protein_match	290717	290743	41.000000	+	.	Target=Q8N587.2 112 120 +;percentID=55
+chr4-04	SwissProt	protein_match	262904	262957	48.000000	-	.	Target=P0C7V5.1 323 340 +;percentID=44
+chr4-04	SwissProt	protein_match	337574	337696	173.000000	+	.	Target=Q5R5Q6.1 5 45 +;percentID=75
+chr4-04	SwissProt	protein_match	337574	337699	175.000000	+	.	Target=A6NNF4.3 3 44 +;percentID=80
+chr4-04	SwissProt	protein_match	337574	337699	175.000000	+	.	Target=A6NNF4-2.3 3 44 +;percentID=80
+chr4-04	SwissProt	protein_match	337574	337696	176.000000	+	.	Target=Q7Z3V5.3 5 45 +;percentID=78
+chr4-04	SwissProt	protein_match	337574	337699	177.000000	+	.	Target=Q14586.2 3 44 +;percentID=80
+chr4-04	SwissProt	protein_match	262904	262993	53.000000	-	.	Target=A1YF12.1 467 496 +;percentID=40
+chr4-04	SwissProt	protein_match	289816	289941	192.000000	-	.	Target=A6NF79.3 15 56 +;percentID=85
+chr4-04	SwissProt	protein_match	289816	289938	193.000000	-	.	Target=Q5HY98.1 9 49 +;percentID=87
+chr4-04	SwissProt	protein_match	304298	304339	41.000000	-	.	Target=Q9BR84.1 157 170 +;percentID=42
+chr4-04	SwissProt	protein_match	305582	305650	42.000000	+	.	Target=Q9NQX6.1 384 406 +;percentID=43
+chr4-04	SwissProt	protein_match	289816	289965	195.000000	-	.	Target=Q8TF32.2 25 75 +;percentID=72;Gap=M7 I1 M43 
+chr4-04	SwissProt	protein_match	299392	299412	41.000000	+	.	Target=Q7L2R6.2 371 377 +;percentID=85
+chr4-04	SwissProt	protein_match	299447	299506	48.000000	-	.	Target=P08042-2.3 59 80 +;percentID=54;Gap=M9 I2 M11 
+chr4-04	SwissProt	protein_match	314164	314202	43.000000	+	.	Target=Q96N20.1 154 166 +;percentID=53
+chr4-04	SwissProt	protein_match	299526	299576	42.000000	+	.	Target=Q9BY31.2 451 467 +;percentID=47
+chr4-04	SwissProt	protein_match	300802	300843	43.000000	+	.	Target=Q9UNY5.1 21 34 +;percentID=57;sequence=MAVSLTAAETLALQGTQGQEKMMMMGPKEEEQSCEYETRLPGNHSTSQEIFRQRFRHLRYQETPGPREALSQLRVLCCEWLRPEKHTKEQILEFLVLEQFLTILPEELQSWVRGHHPKSGEEAVTVLEDLEKGLEPEPQVPGPAHGPAQEEPWEKKESLGAAQEALSIQLQPKETQPFPKSEQVYLHFLSVVTEDGPEPKDKGSLPQPPITEVESQVFSEKLATDTSTFEATSEGTLELQQRNPKAERLRWSPAQEESFRQMVVIHKEIPTGKKDHECSECGKTFIYNSHLVVHQRVHSGEKPYKCSDCGKTFKQSSNLGQHQRIHTGEKPFECNECGKAFRWGAHLVQHQRIHSGEKPYECNECGKAFSQSSYLSQHRRIHSGEK [...]
+chr4-04	SwissProt	protein_match	305582	305650	46.000000	+	.	Target=Q2KI58.1 349 371 +;percentID=47
+chr4-04	SwissProt	protein_match	305582	305650	46.000000	+	.	Target=Q5REF1.1 394 416 +;percentID=47
+chr4-04	SwissProt	protein_match	305582	305650	46.000000	+	.	Target=Q2M3W8.1 350 372 +;percentID=47
+chr4-04	SwissProt	protein_match	305582	305650	47.000000	+	.	Target=Q86YE8.3 199 221 +;percentID=47
+chr4-04	SwissProt	protein_match	291510	291557	40.000000	-	.	Target=A2VDQ7.1 319 334 +;percentID=56
+chr4-04	SwissProt	protein_match	291510	291566	45.000000	-	.	Target=Q7Z3V5.3 261 279 +;percentID=47
+chr4-04	SwissProt	protein_match	262904	263011	62.000000	-	.	Target=Q9UJW7.2 684 719 +;percentID=41
+chr4-04	SwissProt	protein_match	262904	262993	62.000000	-	.	Target=Q9BUY5.1 482 511 +;percentID=40
+chr4-04	SwissProt	protein_match	262904	262972	62.000000	-	.	Target=Q96N38-2.1 186 208 +;percentID=43
+chr4-04	SwissProt	protein_match	262904	262957	49.000000	-	.	Target=Q96SK3.3 215 232 +;percentID=44
+chr4-04	SwissProt	protein_match	262904	262993	62.000000	-	.	Target=Q6N045.2 465 494 +;percentID=43
+chr4-04	SwissProt	protein_match	298892	298930	40.000000	-	.	Target=Q6AZW8.1 97 109 +;percentID=53
+chr4-04	SwissProt	protein_match	299000	299074	40.000000	-	.	Target=Q96BR6.2 19 39 +;percentID=44;Gap=M13 D4 M8 
+chr4-04	SwissProt	protein_match	299029	299091	41.000000	+	.	Target=Q0VAW7.1 175 194 +;percentID=47;Gap=M8 D1 M12 
+chr4-04	SwissProt	protein_match	292226	292291	44.000000	-	.	Target=Q9HBT7.1 207 227 +;percentID=45;Gap=M17 D1 M4 
+chr4-04	SwissProt	protein_match	292408	292476	42.000000	+	.	Target=Q61751.1 289 312 +;percentID=45;Gap=M9 I1 M14 
+chr4-04	SwissProt	protein_match	306830	306880	48.000000	-	.	Target=Q6ZMV8.1 132 149 +;percentID=50;Gap=M13 I1 M4 
+chr4-04	SwissProt	protein_match	289819	289944	132.000000	-	.	Target=Q15935.2 2 43 +;percentID=59
+chr4-04	SwissProt	protein_match	289819	289947	200.000000	-	.	Target=P17035.4 5 47 +;percentID=88
+chr4-04	SwissProt	protein_match	305158	305232	40.000000	+	.	Target=B2RUI1.2 229 253 +;percentID=40
+chr4-04	SwissProt	protein_match	297709	297756	44.000000	+	.	Target=Q8TAF7-2.2 63 78 +;percentID=56
+chr4-04	SwissProt	protein_match	310059	310121	57.000000	+	.	Target=Q80YP6.1 79 98 +;percentID=52;Gap=M10 D1 M10 
+chr4-04	SwissProt	protein_match	311006	311071	43.000000	-	.	Target=B2RUI1.2 295 315 +;percentID=45;Gap=M2 D1 M19 
+chr4-04	SwissProt	protein_match	311242	311352	45.000000	+	.	Target=Q9BS31.1 153 184 +;percentID=40;Gap=M7 D2 M8 D3 M17 
+chr4-04	SwissProt	protein_match	297778	297837	41.000000	+	.	Target=Q6PGE4.1 280 299 +;percentID=45
+chr4-04	SwissProt	protein_match	297946	297993	44.000000	+	.	Target=Q03936-3.2 473 488 +;percentID=50
+chr4-04	SwissProt	protein_match	297946	297993	44.000000	+	.	Target=Q03936.2 505 520 +;percentID=50
+chr4-04	SwissProt	protein_match	305585	305650	40.000000	+	.	Target=Q96MU6.2 325 346 +;percentID=40
+chr4-04	SwissProt	protein_match	297957	297986	41.000000	+	.	Target=Q6GQR8.2 12 21 +;percentID=60
+chr4-04	SwissProt	protein_match	303265	303324	40.000000	-	.	Target=Q8BQC8.1 249 268 +;percentID=40
+chr4-04	SwissProt	protein_match	303265	303324	40.000000	-	.	Target=Q8BQC8-2.1 248 267 +;percentID=40
+chr4-04	SwissProt	protein_match	290641	290703	40.000000	+	.	Target=Q80W31.1 214 232 +;percentID=47;Gap=M14 D2 M5 
+chr4-04	SwissProt	protein_match	303442	303477	40.000000	+	.	Target=A6NK21.3 62 73 +;percentID=50
+chr4-04	SwissProt	protein_match	262904	262972	62.000000	-	.	Target=Q96N38.1 186 208 +;percentID=43
+chr4-04	SwissProt	protein_match	303772	303813	40.000000	-	.	Target=P15622.3 81 95 +;percentID=53;Gap=M1 I1 M13 
+chr4-04	SwissProt	protein_match	303772	303813	40.000000	-	.	Target=P15622-2.3 76 90 +;percentID=53;Gap=M1 I1 M13 
+chr4-04	SwissProt	protein_match	292789	292818	40.000000	-	.	Target=Q7Z340-2.3 245 254 +;percentID=50
+chr4-04	SwissProt	protein_match	304283	304366	40.000000	-	.	Target=Q5VIY5-2.1 81 112 +;percentID=37;Gap=M15 I4 M13 
+chr4-04	SwissProt	protein_match	297596	297622	40.000000	-	.	Target=P51814-6.2 327 335 +;percentID=66
+chr4-04	SwissProt	protein_match	304914	304952	40.000000	-	.	Target=Q9UL58.1 67 80 +;percentID=57;Gap=M10 I1 M3 
+chr4-04	SwissProt	protein_match	299383	299412	40.000000	+	.	Target=Q6ZN06.2 368 377 +;percentID=60
+chr4-04	SwissProt	protein_match	297596	297622	40.000000	-	.	Target=P51814-2.2 329 337 +;percentID=66
+chr4-04	SwissProt	protein_match	297596	297622	40.000000	-	.	Target=P51814-4.2 241 249 +;percentID=66
+chr4-04	SwissProt	protein_match	305561	305611	45.000000	-	.	Target=P10755.2 168 184 +;percentID=41
+chr4-04	SwissProt	protein_match	305561	305611	50.000000	-	.	Target=Q9HCL3.2 200 216 +;percentID=47
+chr4-04	SwissProt	protein_match	314176	314205	50.000000	+	.	Target=Q86YE8-3.3 381 390 +;percentID=70
+chr4-04	SwissProt	protein_match	330025	330195	40.000000	-	.	Target=Q16587-4.2 149 205 +;percentID=28;Gap=M24 I1 M9 D2 M13 I1 M9 
+chr4-04	SwissProt	protein_match	297596	297643	43.000000	-	.	Target=Q8N9F8.1 171 186 +;percentID=43
+chr4-04	SwissProt	protein_match	300802	300843	43.000000	+	.	Target=Q9UNY5-2.1 21 34 +;percentID=57;sequence=MAVSLTAAETLALQGTQGQEKMMMMGPKEEEQSCEYETRLPGNHSTSQEIFRQRFRHLRYQETPGPREALSQLRVLCCEWLRPEKHTKEQILEFLVLEQFLTILPEELQSWVRGHHPKSGEEAVTVLEDLEKGLEPEPQVPGPAHGPAQEEPWEKKESLGAAQEALSIQLQPKETQPFPKSVVTEDGPEPKDKGSLPQPPITEVESQVFSEKLATDTSTFEATSEGTLELQQRNPKAERLRWSPAQEESFRQMVVIHKEIPTGKKDHECSECGKTFIYNSHLVVHQRVHSGEKPYKCSDCGKTFKQSSNLGQHQRIHTGEKPFECNECGKAFRWGAHLVQHQRIHSGEKPYECNECGKAFSQSSYLSQHRRIHSGEKPFICKEC [...]
+chr4-04	SwissProt	protein_match	298104	298148	40.000000	+	.	Target=Q9UK13.2 250 264 +;percentID=46
+chr4-04	SwissProt	protein_match	300956	301000	42.000000	-	.	Target=Q06732-2.2 338 352 +;percentID=46
+chr4-04	SwissProt	protein_match	305570	305611	41.000000	-	.	Target=Q9H7R5.1 281 294 +;percentID=42
+chr4-04	SwissProt	protein_match	298178	298237	42.000000	+	.	Target=Q61116.1 265 284 +;percentID=45
+chr4-04	SwissProt	protein_match	305570	305611	42.000000	-	.	Target=Q9QXT9.1 206 219 +;percentID=50
+chr4-04	SwissProt	protein_match	305570	305611	42.000000	-	.	Target=Q68DY1.2 229 242 +;percentID=42
+chr4-04	SwissProt	protein_match	305570	305611	42.000000	-	.	Target=Q68DY1-2.2 153 166 +;percentID=42
+chr4-04	SwissProt	protein_match	291510	291566	45.000000	-	.	Target=Q5R5Q6.1 260 278 +;percentID=47
+chr4-04	SwissProt	protein_match	305570	305611	44.000000	-	.	Target=Q03923-2.3 365 378 +;percentID=42
+chr4-04	SwissProt	protein_match	291712	291771	41.000000	+	.	Target=Q6ZN57.1 272 291 +;percentID=50
+chr4-04	SwissProt	protein_match	305570	305611	45.000000	-	.	Target=P10751.2 225 238 +;percentID=50
+chr4-04	SwissProt	protein_match	289819	289950	146.000000	-	.	Target=Q4R882.1 37 80 +;percentID=59
+chr4-04	SwissProt	protein_match	291712	291753	41.000000	+	.	Target=Q2M3W8.1 407 420 +;percentID=64
+chr4-04	SwissProt	protein_match	289819	289947	147.000000	-	.	Target=Q86T29.1 3 45 +;percentID=60
+chr4-04	SwissProt	protein_match	289819	289947	149.000000	-	.	Target=Q9HBT8.1 42 80 +;percentID=69;Gap=M25 D4 M14 
+chr4-04	SwissProt	protein_match	305049	305096	40.000000	-	.	Target=Q8N972.1 318 333 +;percentID=50
+chr4-04	SwissProt	protein_match	331865	331930	49.000000	+	.	Target=Q96H86.2 6 27 +;percentID=40
+chr4-04	SwissProt	protein_match	305477	305536	45.000000	+	.	Target=Q06730.3 88 106 +;percentID=40;Gap=M9 D1 M10 
+chr4-04	SwissProt	protein_match	292426	292476	48.000000	+	.	Target=Q02975.1 299 316 +;percentID=55;Gap=M3 I1 M14 
+chr4-04	SwissProt	protein_match	289816	289941	180.000000	-	.	Target=A6NNF4.3 3 44 +;percentID=83
+chr4-04	SwissProt	protein_match	305558	305611	44.000000	-	.	Target=Q68EA5.3 196 212 +;percentID=50;Gap=M13 D1 M4 
+chr4-04	SwissProt	protein_match	305558	305611	48.000000	-	.	Target=Q5JVG8.1 257 274 +;percentID=44
+chr4-04	SwissProt	protein_match	289825	289956	139.000000	-	.	Target=Q96NJ3.2 2 45 +;percentID=63
+chr4-04	SwissProt	protein_match	329233	329271	44.000000	-	.	Target=O60765.2 332 344 +;percentID=69
+chr4-04	SwissProt	protein_match	315445	315471	40.000000	+	.	Target=Q6GQR8.2 3 11 +;percentID=66
+chr4-04	SwissProt	protein_match	289855	289947	75.000000	-	.	Target=A1YG48.1 152 182 +;percentID=41
+chr4-04	SwissProt	protein_match	289855	289947	75.000000	-	.	Target=Q53GI3.2 152 182 +;percentID=41
+chr4-04	SwissProt	protein_match	313873	313911	41.000000	+	.	Target=Q8N7M2.3 153 164 +;percentID=69;Gap=M2 D1 M10 
+chr4-04	SwissProt	protein_match	305677	305715	40.000000	-	.	Target=P18725-2.2 255 267 +;percentID=46
+chr4-04	SwissProt	protein_match	314111	314146	42.000000	+	.	Target=Q7Z340-3.3 168 179 +;percentID=41;sequence=MPAPVGRRSPPSPRSSMAAVALRDSAQGMTFEDVAIYFSQEEWELLDESQRFLYCDVMLENFAHVTSLGYCHGMENEAIASEQSVSIQVRTSKGNTPTQKTHLSEIKMCVPVLKDILPAAEHQTTSPVQKSYLGSTSMRGFCFSADLHQHQKHYNEEEPWKRKVDEATFVTGCRFHVLNYFTCGEAFPAPTDLLQHEATPSGEEPHSSSSKHIQAFFNAKSYYKWGEYRKASSHKHTLVQHQSVCSEGGLYECSKCEKAFTCKNTLVQHQQIHTGQKMFECSECEESFSKKCHLILHKIIHTGERPYECSDREKAFIHKSEFIHHQRRHTGGVRHECGECRKTFSYKSNLIEHQRVHTGERP
+chr4-04	SwissProt	protein_match	298029	298118	47.000000	+	.	Target=A6NFI3.1 296 323 +;percentID=40;Gap=M2 D2 M26 
+chr4-04	SwissProt	protein_match	303442	303477	45.000000	+	.	Target=A6NK75.3 30 41 +;percentID=58
+chr4-04	SwissProt	protein_match	299049	299129	41.000000	-	.	Target=Q3SY52-2.1 21 43 +;percentID=40;Gap=M3 D4 M20 
+chr4-04	SwissProt	protein_match	299097	299171	49.000000	-	.	Target=Q14593.3 10 34 +;percentID=60
+chr4-04	SwissProt	protein_match	303817	303894	49.000000	-	.	Target=P52738.2 75 100 +;percentID=46
+chr4-04	SwissProt	protein_match	299378	299410	42.000000	-	.	Target=O75123.1 210 220 +;percentID=63
+chr4-04	SwissProt	protein_match	292789	292818	40.000000	-	.	Target=Q7Z340.3 318 327 +;percentID=50
+chr4-04	SwissProt	protein_match	299383	299412	40.000000	+	.	Target=Q86XN6-2.2 367 376 +;percentID=60
+chr4-04	SwissProt	protein_match	297580	297780	56.000000	+	.	Target=Q6ZN19-2.1 211 281 +;percentID=32;Gap=M12 I1 M4 I2 M4 I1 M47 
+chr4-04	SwissProt	protein_match	314176	314205	50.000000	+	.	Target=Q86YE8-4.3 352 361 +;percentID=70
+chr4-04	SwissProt	protein_match	297596	297622	40.000000	-	.	Target=P51814.2 369 377 +;percentID=66
+chr4-04	SwissProt	protein_match	314179	314202	40.000000	+	.	Target=P35789-2.4 367 374 +;percentID=62
+chr4-04	SwissProt	protein_match	305564	305611	42.000000	-	.	Target=Q9BX82.1 290 305 +;percentID=43
+chr4-04	SwissProt	protein_match	305564	305662	42.000000	-	.	Target=Q96SK3-2.3 80 111 +;percentID=27;Gap=M13 D1 M19 
+chr4-04	SwissProt	protein_match	305564	305611	44.000000	-	.	Target=Q15937.2 305 320 +;percentID=43
+chr4-04	SwissProt	protein_match	305582	305650	47.000000	+	.	Target=Q86YE8-4.3 132 154 +;percentID=47
+chr4-04	SwissProt	protein_match	305570	305611	40.000000	-	.	Target=O43296.1 287 300 +;percentID=42
+chr4-04	SwissProt	protein_match	305570	305611	41.000000	-	.	Target=Q9HCG1.2 313 326 +;percentID=42
+chr4-04	SwissProt	protein_match	312139	312174	41.000000	+	.	Target=Q5SXM1.1 159 170 +;percentID=50
+chr4-04	SwissProt	protein_match	305570	305611	41.000000	-	.	Target=Q5R8X1.1 281 294 +;percentID=42
+chr4-04	SwissProt	protein_match	313296	313346	42.000000	+	.	Target=Q0P4W9.1 147 163 +;percentID=47;sequence=MDSSLQHKTTKIFPSQASRDSLSNRVTMISGAKPLAFSIERIMSRTPEPKCLPVPSLLQGSVPKGDQKQALHINSSSIPCMIPFVPVAYDHCPKIGISGAELRKSHLDSSPPFSCNDLLNCALTLKGDFPREALPLQQYKLVRPRVVNHSSFHAMGAAFCYFNRGDSQCHPPASINIHPVASYFLGSPLHQAPKSYLAERNKLVLPSVEKFSSGVTFKDLSQAQFQHYMKEGAHSLSDKITFKTSAKFSSASPSNKPKVFTCEVCGKVFNAHYNLTRHMPVHTGARPFVCKICGKGFRQASTLCRHKIIHTQEKPHKCNQCGKAFNRSSTLNTHTRIHAGYKPFVCEFCGKGFHQKGNYKNHKLTHSGEKQFKCNICNKAFHQI [...]
+chr4-04	SwissProt	protein_match	313336	313389	45.000000	-	.	Target=A8MTY0.2 114 131 +;percentID=55
+chr4-04	SwissProt	protein_match	314233	314268	40.000000	+	.	Target=A8MUZ8.2 166 177 +;percentID=41
+chr4-04	SwissProt	protein_match	289816	289941	195.000000	-	.	Target=O14628.2 3 44 +;percentID=90
+chr4-04	SwissProt	protein_match	314233	314268	40.000000	+	.	Target=A8K971.2 166 177 +;percentID=41
+chr4-04	SwissProt	protein_match	305570	305611	44.000000	-	.	Target=Q03923.3 398 411 +;percentID=42
+chr4-04	SwissProt	protein_match	304914	304952	43.000000	-	.	Target=P17040-3.3 70 83 +;percentID=57;Gap=M10 I1 M3 ;sequence=MAMALELQAQASPQPEPEELLIVKLEEDSWGSESKLWEKDRGSVSGPEASRQRFRQFQYRDAAGPHEAFSQLWALCCRWLRPEIRLKEQILELLVLEQFLTILPREVQTWVQARHPESGEEAVALVEDWHRETRTAGQSGLELHTEETRPLKTGEEAQSFQLQPVDPWPEGQSQKKGVKNTCPDLPNHLNAEVAPQPLKESAVLTPRVPTLPKMGSVGDWEVTAESQEALGPGKHAEKELCKDPPGDDCGNSVCLGVPVSKPSNTSEKEQGPEFWGLSLINSGKRSTADYSLDNEPAQALTWRDSRAWEEQYQWDVEDMKVSGVHWGYEETKTFLAILSESPFSEKLRTCHQNRQVYRAIAEQLRARGF [...]
+chr4-04	SwissProt	protein_match	304914	304952	43.000000	-	.	Target=P17040.3 70 83 +;percentID=57;Gap=M10 I1 M3 ;sequence=MAMALELQAQASPQPEPEELLIVKLEEDSWGSESKLWEKDRGSVSGPEASRQRFRQFQYRDAAGPHEAFSQLWALCCRWLRPEIRLKEQILELLVLEQFLTILPREVQTWVQARHPESGEEAVALVEDWHRETRTAGQSGLELHTEETRPLKTGEEAQSFQLQPVDPWPEGQSQKKGVKNTCPDLPNHLNAEVAPQPLKESAVLTPRVPTLPKMGSVGDWEVTAESQEALGPGKHAEKELCKDPPGDDCGNSVCLGVPVSKPSNTSEKEQGPEFWGLSLINSGKRSTADYSLDNEPAQALTWRDSRAWEEQYQWDVEDMKVSGVHWGYEETKTFLAILSESPFSEKLRTCHQNRQVYRAIAEQLRARGFLR [...]
+chr4-04	SwissProt	protein_match	298816	298857	40.000000	-	.	Target=B2KFW1-2.2 227 240 +;percentID=42
+chr4-04	SwissProt	protein_match	304963	304995	41.000000	-	.	Target=Q9UC07.2 8 18 +;percentID=72
+chr4-04	SwissProt	protein_match	305033	305071	43.000000	+	.	Target=Q9C0F3.2 130 142 +;percentID=61
+chr4-04	SwissProt	protein_match	305033	305071	43.000000	+	.	Target=Q5R5Y7.1 130 142 +;percentID=61
+chr4-04	SwissProt	protein_match	311264	311308	40.000000	+	.	Target=Q86WZ6.1 271 285 +;percentID=46
+chr4-04	SwissProt	protein_match	311305	311382	43.000000	+	.	Target=Q6P9Y7-2.1 411 436 +;percentID=42
+chr4-04	SwissProt	protein_match	311305	311382	43.000000	+	.	Target=Q6P9Y7.1 411 436 +;percentID=42
+chr4-04	SwissProt	protein_match	289819	289950	146.000000	-	.	Target=P0C7V5.1 37 80 +;percentID=61
+chr4-04	SwissProt	protein_match	305558	305611	43.000000	-	.	Target=Q8IYB9.1 312 328 +;percentID=50;Gap=M11 D1 M6 
+chr4-04	SwissProt	protein_match	315625	315663	40.000000	+	.	Target=Q7TNU6.1 424 436 +;percentID=53
+chr4-04	SwissProt	protein_match	289819	289950	152.000000	-	.	Target=Q6V9R5.2 37 80 +;percentID=63
+chr4-04	SwissProt	protein_match	314185	314253	44.000000	+	.	Target=P52737.1 392 414 +;percentID=43
+chr4-04	SwissProt	protein_match	305585	305659	45.000000	+	.	Target=Q6P9A3.1 447 472 +;percentID=46;Gap=M22 I1 M3 
+chr4-04	SwissProt	protein_match	305585	305650	49.000000	+	.	Target=Q14588.3 374 395 +;percentID=40
+chr4-04	SwissProt	protein_match	305677	305715	40.000000	-	.	Target=P18725.2 280 292 +;percentID=46
+chr4-04	SwissProt	protein_match	289819	289947	200.000000	-	.	Target=Q7L2R6-2.2 5 47 +;percentID=88
+chr4-04	SwissProt	protein_match	305680	305781	40.000000	-	.	Target=Q32KN0.1 124 155 +;percentID=41;Gap=M21 D2 M11 
+chr4-04	SwissProt	protein_match	314164	314268	51.000000	+	.	Target=Q5VIY5-2.1 163 195 +;percentID=30;Gap=M3 I1 M10 D1 M6 D2 M13 
+chr4-04	SwissProt	protein_match	305680	305709	40.000000	-	.	Target=Q9P2J8.3 403 412 +;percentID=70
+chr4-04	SwissProt	protein_match	297946	297993	44.000000	+	.	Target=Q03936-2.2 436 451 +;percentID=50
+chr4-04	SwissProt	protein_match	328939	328974	40.000000	+	.	Target=Q6DD87.1 36 47 +;percentID=50;sequence=MELREEAWSPGPLDSEDQQMASHENPVDILIMDDDDVPSWPPTKLSPPQSAPPAGPPPRPRPPAPYICNECGKSFSHWSKLTRHQRTHTGERPNACADCGKTFSQSSHLVQHRRIHTGEKPYACLECGKRFSWSSNLMQHQRIHTGEKPYTCPDCGRSFTQSKSLAKHRRSHSGLKPFVCPRCGRGFSQPKSLARHLRLHPELSGPGVAAKVLAASVRRAKGPEEAVAADGEIAIPVGDGEGIIVVGAPGEGAAAAAAMAGAGAKAAGPRSRRAPAPKPYVCLECGKGFGHGAGLLAHQRAQHGDGLGAAGGEEPAHICVECGEGFVQGAALRRHKKIHAVGAPSVCSSCGQSYYRAGGEEEDDDDEAAGGRCPECRAGEGR
+chr4-04	SwissProt	protein_match	314173	314202	40.000000	+	.	Target=Q6N045.2 343 352 +;percentID=60
+chr4-04	SwissProt	protein_match	299049	299129	41.000000	-	.	Target=Q3SY52.1 76 98 +;percentID=40;Gap=M3 D4 M20 
+chr4-04	SwissProt	protein_match	331425	331475	41.000000	-	.	Target=Q569E7.1 200 216 +;percentID=52
+chr4-04	SwissProt	protein_match	305582	305650	43.000000	+	.	Target=O75346.2 173 195 +;percentID=43
+chr4-04	SwissProt	protein_match	299266	299307	41.000000	+	.	Target=O95201.2 256 269 +;percentID=50
+chr4-04	SwissProt	protein_match	292435	292533	55.000000	+	.	Target=Q99676.3 46 78 +;percentID=45;Gap=M7 D2 M14 I2 M10 
+chr4-04	SwissProt	protein_match	292463	292498	40.000000	+	.	Target=A6NNF4.3 52 63 +;percentID=50
+chr4-04	SwissProt	protein_match	292463	292498	40.000000	+	.	Target=A6NNF4-2.3 52 63 +;percentID=50
+chr4-04	SwissProt	protein_match	299383	299412	40.000000	+	.	Target=Q86XN6.2 367 376 +;percentID=60
+chr4-04	SwissProt	protein_match	290720	290752	43.000000	+	.	Target=Q2VY69.1 378 388 +;percentID=54
+chr4-04	SwissProt	protein_match	291425	291460	40.000000	-	.	Target=O43296.1 92 103 +;percentID=50
+chr4-04	SwissProt	protein_match	330731	330799	41.000000	+	.	Target=P59923.1 907 929 +;percentID=43
+chr4-04	SwissProt	protein_match	330822	330908	47.000000	+	.	Target=P10754.2 80 107 +;percentID=45;Gap=M3 I1 M15 D3 M6 I1 M2 
+chr4-04	SwissProt	protein_match	305564	305611	45.000000	-	.	Target=O75346-2.2 208 223 +;percentID=43
+chr4-04	SwissProt	protein_match	313296	313346	42.000000	+	.	Target=Q9IAJ2.1 147 163 +;percentID=47
+chr4-04	SwissProt	protein_match	305708	305746	42.000000	+	.	Target=P10077.2 253 265 +;percentID=53
+chr4-04	SwissProt	protein_match	314233	314268	40.000000	+	.	Target=A8MVS1.1 166 177 +;percentID=41
+chr4-04	SwissProt	protein_match	313418	313495	41.000000	-	.	Target=Q5RBQ3.1 248 273 +;percentID=42
+chr4-04	SwissProt	protein_match	313477	313524	41.000000	-	.	Target=Q14587.2 114 129 +;percentID=50
+chr4-04	SwissProt	protein_match	298101	298151	43.000000	+	.	Target=Q9EQB9.1 234 249 +;percentID=47;Gap=M13 D1 M3 
+chr4-04	SwissProt	protein_match	337574	337699	187.000000	+	.	Target=A6NF79.3 15 56 +;percentID=85
+chr4-04	SwissProt	protein_match	305570	305617	43.000000	-	.	Target=Q96IR2.2 605 620 +;percentID=43
+chr4-04	SwissProt	protein_match	314310	314339	40.000000	+	.	Target=A8K971.2 196 205 +;percentID=60
+chr4-04	SwissProt	protein_match	315625	315663	40.000000	+	.	Target=P15622.3 449 461 +;percentID=53
+chr4-04	SwissProt	protein_match	310052	310087	41.000000	-	.	Target=Q5REI6.1 66 77 +;percentID=50
+chr4-04	SwissProt	protein_match	314310	314339	40.000000	+	.	Target=Q8TC21-2.2 149 158 +;percentID=60
+chr4-04	SwissProt	protein_match	314310	314339	45.000000	+	.	Target=A8MWA4.1 198 207 +;percentID=70
+chr4-04	SwissProt	protein_match	304923	304952	41.000000	-	.	Target=Q8TF39.3 71 80 +;percentID=70
+chr4-04	SwissProt	protein_match	329319	329369	42.000000	+	.	Target=A1L1L7.1 111 127 +;percentID=41
+chr4-04	SwissProt	protein_match	305582	305650	47.000000	+	.	Target=Q86YE8-2.3 131 153 +;percentID=47
+chr4-04	SwissProt	protein_match	305582	305650	48.000000	+	.	Target=Q9Y2Q1.1 460 482 +;percentID=47
+chr4-04	SwissProt	protein_match	305582	305653	51.000000	+	.	Target=Q4R6C2.1 395 418 +;percentID=50
+chr4-04	SwissProt	protein_match	305582	305653	51.000000	+	.	Target=Q8NA42.1 395 418 +;percentID=50
+chr4-04	SwissProt	protein_match	329627	329665	41.000000	+	.	Target=Q5JUW0-2.1 99 111 +;percentID=53
+chr4-04	SwissProt	protein_match	314185	314253	44.000000	+	.	Target=Q9UC07.2 220 242 +;percentID=43
+chr4-04	SwissProt	protein_match	305585	305659	45.000000	+	.	Target=Q5RBQ3.1 447 472 +;percentID=46;Gap=M22 I1 M3 
+chr4-04	SwissProt	protein_match	314111	314146	42.000000	+	.	Target=Q7Z340.3 168 179 +;percentID=41
+chr4-04	SwissProt	protein_match	314212	314268	42.000000	+	.	Target=Q6ECI4-2.2 296 312 +;percentID=47;Gap=M4 D2 M13 
+chr4-04	SwissProt	protein_match	314126	314185	47.000000	-	.	Target=Q6ZMW2.1 12 31 +;percentID=45
+chr4-04	SwissProt	protein_match	314230	314268	40.000000	+	.	Target=Q9UIE0.3 161 173 +;percentID=46
+chr4-04	SwissProt	protein_match	337574	337699	188.000000	+	.	Target=O14628-5.2 3 44 +;percentID=88
+chr4-04	SwissProt	protein_match	331425	331475	41.000000	-	.	Target=Q5TEC3.2 187 203 +;percentID=52
+chr4-04	SwissProt	protein_match	305576	305611	41.000000	-	.	Target=O75373.2 313 324 +;percentID=50
+chr4-04	SwissProt	protein_match	305582	305650	41.000000	+	.	Target=Q8TAF7.2 470 492 +;percentID=43
+chr4-04	SwissProt	protein_match	305680	305712	42.000000	-	.	Target=Q96SE7.1 387 397 +;percentID=72
+chr4-04	SwissProt	protein_match	314176	314205	50.000000	+	.	Target=Q86YE8.3 419 428 +;percentID=70
+chr4-04	SwissProt	protein_match	331790	331831	44.000000	-	.	Target=Q1LZ87.1 140 153 +;percentID=50
+chr4-04	SwissProt	protein_match	311311	311382	44.000000	+	.	Target=Q14590-2.3 225 248 +;percentID=41
+chr4-04	SwissProt	protein_match	314176	314205	50.000000	+	.	Target=Q86YE8-2.3 351 360 +;percentID=70
+chr4-04	SwissProt	protein_match	311382	311414	43.000000	-	.	Target=Q5REN4.1 137 147 +;percentID=54
+chr4-04	SwissProt	protein_match	337565	337699	137.000000	+	.	Target=Q5RB30.1 23 67 +;percentID=57
+chr4-04	SwissProt	protein_match	305582	305647	43.000000	+	.	Target=A2T6E3.1 415 436 +;percentID=45
+chr4-04	SwissProt	protein_match	330855	330917	42.000000	+	.	Target=Q5RB30.1 1 17 +;percentID=42;Gap=M8 D4 M9 
+chr4-04	SwissProt	protein_match	330862	330906	44.000000	+	.	Target=Q6ZMW2.1 549 561 +;percentID=53;Gap=M6 D2 M7 
+chr4-04	SwissProt	protein_match	330904	330957	42.000000	+	.	Target=Q16587.2 4 21 +;percentID=44
+chr4-04	SwissProt	protein_match	330904	330957	42.000000	+	.	Target=Q16587-3.2 4 21 +;percentID=44
+chr4-04	SwissProt	protein_match	299383	299412	40.000000	+	.	Target=Q5RER9.1 368 377 +;percentID=60
+chr4-04	SwissProt	protein_match	331137	331178	40.000000	+	.	Target=Q8IW36-3.3 62 75 +;percentID=57
+chr4-04	SwissProt	protein_match	337574	337699	188.000000	+	.	Target=O14628.2 3 44 +;percentID=88
+chr4-04	SwissProt	protein_match	337577	337702	124.000000	+	.	Target=Q8TC21.2 7 48 +;percentID=50
+chr4-04	SwissProt	protein_match	299383	299412	40.000000	+	.	Target=Q8N4W9.2 300 309 +;percentID=60
+chr4-04	SwissProt	protein_match	337574	337699	189.000000	+	.	Target=Q8IYX0.1 15 56 +;percentID=88
+chr4-04	SwissProt	protein_match	305708	305746	42.000000	+	.	Target=P10077-2.2 253 265 +;percentID=53
+chr4-04	SwissProt	protein_match	337574	337744	225.000000	+	.	Target=Q8IW36-3.3 3 59 +;percentID=73
+chr4-04	SwissProt	protein_match	314310	314339	40.000000	+	.	Target=A8MVS1.1 196 205 +;percentID=60
+chr4-04	SwissProt	protein_match	337577	337699	113.000000	+	.	Target=Q8TAW3.2 49 89 +;percentID=56
+chr4-04	SwissProt	protein_match	329262	329294	42.000000	+	.	Target=Q5REN4.1 137 147 +;percentID=54
+chr4-04	SwissProt	protein_match	314310	314339	40.000000	+	.	Target=Q8TC21.2 219 228 +;percentID=60
+chr4-04	SwissProt	protein_match	337577	337699	115.000000	+	.	Target=Q5RBQ3.1 27 67 +;percentID=53
+chr4-04	SwissProt	protein_match	298059	298193	56.000000	+	.	Target=Q6PG37.1 54 94 +;percentID=40;Gap=M14 D3 M24 D1 M3 
+chr4-04	SwissProt	protein_match	314417	314455	41.000000	+	.	Target=Q86YE8-3.3 23 35 +;percentID=53
+chr4-04	SwissProt	protein_match	329617	329685	49.000000	+	.	Target=O75290.3 41 62 +;percentID=56;Gap=M12 D1 M10 
+chr4-04	SwissProt	protein_match	304914	304952	40.000000	-	.	Target=Q9Z1D9.2 63 76 +;percentID=50;Gap=M10 I1 M3 
+chr4-04	SwissProt	protein_match	304914	304952	43.000000	-	.	Target=B2KFW1.2 64 77 +;percentID=57;Gap=M10 I1 M3 
+chr4-04	SwissProt	protein_match	337574	337735	183.000000	+	.	Target=A8MUV8.3 3 56 +;percentID=66
+chr4-04	SwissProt	protein_match	298645	298695	43.000000	+	.	Target=Q0RDS4.1 164 181 +;percentID=50;Gap=M13 I1 M4 ;sequence=MAGKARVHELAKELGVDSKTVLAKLKDLGEFVKSASSTVEAPVVRKLKEAFPAEGGSASGGRPGGRPGPGNGARPAPPRPGLAPRPGPRPVPGRPGPAARPGGPAAPSAPAAPSAPAPGAPAASPPASQPRPIAASAAAPPPAATSIPPVSSPAAASGPRPGPRPAGGPAAPGRARPGAPVPPPGGSAPSAPSAGGPRPGPRPGPRPSAPGNNPYTTPSAGPRQSAGQSGSGPASPPRPGAPRPGPRPGGPRPGAPGAGGPRPSPGSMPPRPGSRPGGSGGMPPRPGGSGGPRPNANMFQPRPAGGAPGRPGGGGAPGRPGGGGGGGGARPGGFAGRGGAPGRPGGGGGGGGGAGAPGRPGGGGGGRPA [...]
+chr4-04	SwissProt	protein_match	331137	331178	40.000000	+	.	Target=Q8IW36-2.3 62 75 +;percentID=57
+chr4-04	SwissProt	protein_match	330025	330195	40.000000	-	.	Target=Q16587-2.2 150 206 +;percentID=28;Gap=M24 I1 M9 D2 M13 I1 M9 
+chr4-04	SwissProt	protein_match	330173	330238	40.000000	+	.	Target=Q6ZMY9.1 113 134 +;percentID=40
+chr4-04	SwissProt	protein_match	330177	330359	75.000000	+	.	Target=Q29RK0.1 669 725 +;percentID=41;Gap=M24 D1 M1 D2 M17 I1 M7 D2 M7 ;sequence=MTEESEETVLYIEHRYVCSECNQLYGSLEEVLMHQNSHVPQQHFELVGVADPGVTVAAEAASGTGLYQTLVQESQYQCLECGQLLMSPSQLLEHQELHLKMMAPQEAVPAEPPPKAPALSSSTIHYECVDCKALFASQELWLNHRQTHLRATPTKPPTPVVLGSPVVVGSPVGQTRVAVEHSYRKAEEGGEGAAVPSAAATTTEVVTEVELLLYKCSECSQLFQLPADFLEHQATHFPAPAPESEEPVLQQETLTPAPVEVPVSQPEPVPSSDHSYELRNGEALGRDRRGRRARRNNSGEPGGAATQELFCSACDQLFLSPHQLQQHLRSHREGVFKCPLCSRVFPSPSS [...]
+chr4-04	SwissProt	protein_match	314185	314253	44.000000	+	.	Target=Q0D2J5.2 200 222 +;percentID=43
+chr4-04	SwissProt	protein_match	331467	331490	40.000000	+	.	Target=P17098.2 318 325 +;percentID=75
+chr4-04	SwissProt	protein_match	314212	314268	42.000000	+	.	Target=Q6ECI4.2 414 430 +;percentID=47;Gap=M4 D2 M13 
+chr4-04	SwissProt	protein_match	305477	305536	45.000000	+	.	Target=Q06732.2 89 107 +;percentID=40;Gap=M9 D1 M10 
+chr4-04	SwissProt	protein_match	331769	331837	50.000000	+	.	Target=Q9UJU3.1 163 186 +;percentID=48;Gap=M4 I2 M10 D1 M8 
+chr4-04	SwissProt	protein_match	337577	337699	114.000000	+	.	Target=Q13398-6.2 13 53 +;percentID=58
+chr4-04	SwissProt	protein_match	331810	331863	41.000000	+	.	Target=Q6PGE4.1 64 81 +;percentID=44
+chr4-04	SwissProt	protein_match	330637	330699	42.000000	-	.	Target=Q14593.3 7 27 +;percentID=42
+chr4-04	SwissProt	protein_match	330666	330716	40.000000	-	.	Target=Q9UJW8.2 2 18 +;percentID=47
+chr4-04	SwissProt	protein_match	330681	330737	41.000000	+	.	Target=Q642B9.1 322 341 +;percentID=40;Gap=M15 I1 M4 ;sequence=MPVNLGQALGLLPFLAKAEDATFSGSDVIQQRELANPETARQLFRQFRYQVMSGPQETLRQLRKLCFQWLRPEVHTKEQILEILMLEQFLTILPGEIQMWVRKQCPGSGEEAVTLVESLKGDPQKLWQWISIQVLGQEIPFEKENSARCRGDKVEPALEAEPTVEVVPQDLPLQNTSSAPGELLSHGVKEESDLEPELALAASQLPARPEERPTRDQEVGTALLPSLQEEQWRHLDSTQKEQYWDLMLETYGKMVSGVAGISNSKPDLTNMAEYGEELVGLHLHSAEKMARAPCKEDRQENDKENLNLENHRDQGCLDVFDQAPGEAPPQTALSDFFGESEPHHFGGESVPEALENLQGEGTGAHLFPH [...]
+chr4-04	SwissProt	protein_match	337577	337699	117.000000	+	.	Target=Q96H86.2 26 66 +;percentID=56
+chr4-04	SwissProt	protein_match	337577	337699	123.000000	+	.	Target=Q9Y473.1 27 67 +;percentID=56
+chr4-04	SwissProt	protein_match	305582	305650	41.000000	+	.	Target=Q5JVG2.1 609 631 +;percentID=43
+chr4-04	SwissProt	protein_match	305582	305650	42.000000	+	.	Target=Q05481.1 1135 1157 +;percentID=43
+chr4-04	SwissProt	protein_match	337574	337699	181.000000	+	.	Target=P0CB33.1 15 56 +;percentID=83
+chr4-04	SwissProt	protein_match	337577	337696	125.000000	+	.	Target=Q2M3W8.1 4 43 +;percentID=57
+chr4-04	SwissProt	protein_match	305582	305650	42.000000	+	.	Target=Q5REA0.1 384 406 +;percentID=43
+chr4-04	SwissProt	protein_match	337574	337699	187.000000	+	.	Target=Q96JC4.1 15 56 +;percentID=85
+chr4-04	SwissProt	protein_match	337574	337744	225.000000	+	.	Target=Q8IW36-2.3 3 59 +;percentID=73
+chr4-04	SwissProt	protein_match	337577	337699	105.000000	+	.	Target=B2RUI1.2 48 88 +;percentID=56
+chr4-04	SwissProt	protein_match	337577	337699	110.000000	+	.	Target=Q3SY52.1 27 67 +;percentID=53
+chr4-04	SwissProt	protein_match	337574	337699	188.000000	+	.	Target=O14628-4.2 3 44 +;percentID=88
+chr4-04	SwissProt	protein_match	337577	337705	127.000000	+	.	Target=Q8N972.1 4 46 +;percentID=53
+chr4-04	SwissProt	protein_match	337574	337699	189.000000	+	.	Target=Q05481.1 12 53 +;percentID=85
+chr4-04	SwissProt	protein_match	337577	337696	127.000000	+	.	Target=A8MWA4.1 7 46 +;percentID=60
+chr4-04	SwissProt	protein_match	337577	337699	129.000000	+	.	Target=Q96CS4.1 29 69 +;percentID=63
+chr4-04	SwissProt	protein_match	337577	337699	115.000000	+	.	Target=B1APH4.3 37 77 +;percentID=53
+chr4-04	SwissProt	protein_match	337577	337699	116.000000	+	.	Target=Q6P9A3-2.1 14 54 +;percentID=53
+chr4-04	SwissProt	protein_match	337577	337699	116.000000	+	.	Target=Q6P9A3.1 27 67 +;percentID=53
+chr4-04	SwissProt	protein_match	337577	337702	130.000000	+	.	Target=Q3KP31.1 4 45 +;percentID=54
+chr4-04	SwissProt	protein_match	314310	314339	40.000000	+	.	Target=Q6ZN79.1 196 205 +;percentID=60
+chr4-04	SwissProt	protein_match	306797	306826	41.000000	+	.	Target=Q6V9R5.2 84 93 +;percentID=70
+chr4-04	SwissProt	protein_match	329617	329685	49.000000	+	.	Target=Q9Y6R6.1 41 62 +;percentID=56;Gap=M12 D1 M10 
+chr4-04	SwissProt	protein_match	337577	337702	133.000000	+	.	Target=Q8IYI8.1 4 45 +;percentID=57
+chr4-04	SwissProt	protein_match	329617	329685	49.000000	+	.	Target=O75290-2.3 57 78 +;percentID=56;Gap=M12 D1 M10 
+chr4-04	SwissProt	protein_match	329627	329665	41.000000	+	.	Target=Q5JUW0.1 104 116 +;percentID=53
+chr4-04	SwissProt	protein_match	315604	315663	44.000000	+	.	Target=A6NDX5.5 296 315 +;percentID=40
+chr4-04	SwissProt	protein_match	329633	329671	41.000000	+	.	Target=A6NK31.3 543 555 +;percentID=46
+chr4-04	SwissProt	protein_match	331369	331407	40.000000	+	.	Target=Q6P3V2.2 83 95 +;percentID=46
+chr4-04	SwissProt	protein_match	337565	337738	149.000000	+	.	Target=Q9NZL3.2 4 61 +;percentID=53
+chr4-04	SwissProt	protein_match	337577	337699	127.000000	+	.	Target=Q7Z340.3 29 69 +;percentID=60
+chr4-04	SwissProt	protein_match	337565	337699	151.000000	+	.	Target=Q06732.2 8 52 +;percentID=62
+chr4-04	SwissProt	protein_match	331664	331810	47.000000	-	.	Target=Q96GC6.1 25 81 +;percentID=28;Gap=M4 I3 M14 I1 M11 I2 M1 I1 M9 I1 M10 
+chr4-04	SwissProt	protein_match	328939	328974	40.000000	+	.	Target=Q8BIF9.2 36 47 +;percentID=50;sequence=MELREEAWSPGPLDSEDQQMASHENPVDILIMDDDDVPSWPPTKLSPPQSAPPPGPPPRPRPPAPYICTECGKSFSHWSKLTRHQRTHTGERPNACTDCGKTFSQSSHLVQHRRIHTGEKPYACSECGKRFSWSSNLMQHQRIHTGEKPYTCPDCGRSFTQSKSLAKHRRSHSGLKPFVCPRCGRGFSQPKSMARHLRLHPELSGPGVAAKVLAASVRRAKAPEEATAADGEIAIPVGDGEGIIVVGPPGDGAAAAAALAGVGTRATGTRSRRAPAPKPYVCMECGKGFGHGAGLLAHQRAQHGDGLGVAVGEEPAHICVECGEGFVQGAALRRHKKIHAVGAPSVCSSCGQSFYRAGGEDDGEDQSAGARCAECRGGEAR
+chr4-04	SwissProt	protein_match	314185	314253	44.000000	+	.	Target=Q8IYI8.1 200 222 +;percentID=43
+chr4-04	SwissProt	protein_match	337577	337699	129.000000	+	.	Target=P51508.3 21 61 +;percentID=56
+chr4-04	SwissProt	protein_match	336608	336754	231.000000	-	.	Target=P08708.2 87 135 +;percentID=93;sequence=MGRVRTKTVKKAARVIIEKYYTRLGNDFHTNKRVCEEIAIIPSKKLRNKIAGYVTHLMKRIQRGPVRGISIKLQEEERERRDNYVPEVSALDQEIIEVDPDTKEMLKLLDFGSLSNLQVTQPTVGMNFKTPRGPV
+chr4-04	SwissProt	protein_match	337577	337699	130.000000	+	.	Target=Q8WV14.2 532 572 +;percentID=60
+chr4-04	SwissProt	protein_match	305585	305650	40.000000	+	.	Target=Q96MU6-2.2 297 318 +;percentID=40
+chr4-04	SwissProt	protein_match	337577	337702	132.000000	+	.	Target=Q5REK1.1 4 45 +;percentID=57
+chr4-04	SwissProt	protein_match	337577	337702	132.000000	+	.	Target=Q5REI6.1 4 45 +;percentID=54
+chr4-04	SwissProt	protein_match	337577	337699	123.000000	+	.	Target=Q08DG8.1 14 54 +;percentID=56
+chr4-04	SwissProt	protein_match	337577	337696	123.000000	+	.	Target=Q96SK3.3 6 45 +;percentID=60
+chr4-04	SwissProt	protein_match	337577	337699	133.000000	+	.	Target=Q6ZN79.1 7 47 +;percentID=60
+chr4-04	SwissProt	protein_match	337577	337699	134.000000	+	.	Target=A0JPL0.1 12 52 +;percentID=56
+chr4-04	SwissProt	protein_match	337577	337696	126.000000	+	.	Target=Q9NU63-2.2 24 63 +;percentID=55
+chr4-04	SwissProt	protein_match	337577	337696	126.000000	+	.	Target=Q9NU63-3.2 44 83 +;percentID=55
+chr4-04	SwissProt	protein_match	330924	330980	40.000000	-	.	Target=Q6P9A1.2 54 72 +;percentID=42
+chr4-04	SwissProt	protein_match	337574	337699	180.000000	+	.	Target=A6NKZ1.3 15 56 +;percentID=83
+chr4-04	SwissProt	protein_match	337577	337702	127.000000	+	.	Target=Q68EA5.3 4 45 +;percentID=54
+chr4-04	SwissProt	protein_match	337577	337699	139.000000	+	.	Target=Q14587.2 81 121 +;percentID=65
+chr4-04	SwissProt	protein_match	337574	337699	186.000000	+	.	Target=A6NP11.3 3 44 +;percentID=85
+chr4-04	SwissProt	protein_match	337577	337708	111.000000	+	.	Target=Q8BV42.1 9 50 +;percentID=54;Gap=M40 D2 M2 
+chr4-04	SwissProt	protein_match	337577	337699	140.000000	+	.	Target=Q2TL60.1 14 54 +;percentID=65
+chr4-04	SwissProt	protein_match	337577	337699	114.000000	+	.	Target=Q13398.2 33 73 +;percentID=58
+chr4-04	SwissProt	protein_match	337577	337696	141.000000	+	.	Target=P16374.2 14 53 +;percentID=62
+chr4-04	SwissProt	protein_match	337577	337699	129.000000	+	.	Target=Q9Y6Q3-2.3 47 87 +;percentID=58
+chr4-04	SwissProt	protein_match	337565	337699	155.000000	+	.	Target=Q5T5D7.1 4 48 +;percentID=62
+chr4-04	SwissProt	protein_match	337577	337705	148.000000	+	.	Target=Q9NYW8.1 8 50 +;percentID=60
+chr4-04	SwissProt	protein_match	337577	337705	149.000000	+	.	Target=Q8BQC8.1 8 50 +;percentID=62
+chr4-04	SwissProt	protein_match	337577	337705	149.000000	+	.	Target=Q8BQC8-2.1 7 49 +;percentID=62
+chr4-04	SwissProt	protein_match	337577	337702	133.000000	+	.	Target=P52737.1 4 45 +;percentID=57
+chr4-04	SwissProt	protein_match	337541	337699	140.000000	+	.	Target=Q96GC6-3.1 171 222 +;percentID=52;Gap=M8 D1 M44 
+chr4-04	SwissProt	protein_match	337547	337696	144.000000	+	.	Target=Q9NU63.2 6 55 +;percentID=52
+chr4-04	SwissProt	protein_match	337577	337699	156.000000	+	.	Target=Q86UE3.2 60 100 +;percentID=70
+chr4-04	SwissProt	protein_match	337577	337705	134.000000	+	.	Target=Q8TC21-2.2 7 49 +;percentID=53
+chr4-04	SwissProt	protein_match	331137	331178	40.000000	+	.	Target=Q8IW36.3 62 75 +;percentID=57
+chr4-04	SwissProt	protein_match	337577	337699	137.000000	+	.	Target=Q6ECI4.2 23 63 +;percentID=63
+chr4-04	SwissProt	protein_match	331361	331435	50.000000	-	.	Target=Q6ZNG0-2.1 3 27 +;percentID=40
+chr4-04	SwissProt	protein_match	337577	337699	127.000000	+	.	Target=P51814-8.2 27 67 +;percentID=56
+chr4-04	SwissProt	protein_match	337574	337744	225.000000	+	.	Target=Q8IW36.3 3 59 +;percentID=73
+chr4-04	SwissProt	protein_match	336608	336754	223.000000	-	.	Target=Q6QAP7.3 87 135 +;percentID=91;sequence=MGRVRTKTVKKAARVIIEKYYTRLGNDFHTNKRVCEEIAIIPSKKLRNKIAGYVTHLMKRIQRGPVRGISIKLQEEERERRDNYVPEVSALDQEIIEVDPDTKEMLKLLDFGSLSNLQVTQPTVGMNFKTPRGAV
+chr4-04	SwissProt	protein_match	337577	337699	140.000000	+	.	Target=Q6P9Y7.1 6 46 +;percentID=60
+chr4-04	SwissProt	protein_match	336608	336754	223.000000	-	.	Target=A5PK63.1 87 135 +;percentID=91;sequence=MGRVRTKTVKKAARVIIEKYYTRLDNDFHTNKRVCEEIAIIPSKKLRNKIAGYVTHLMKRIQRGPVRGISIKLQEEERERRDNYVPEVSALDQEIIEVDPDTKEMLKLLDFGSLSNLQVTQPTVGMNFKTPRGAV
+chr4-04	SwissProt	protein_match	331701	331775	48.000000	+	.	Target=Q14593.3 10 34 +;percentID=60
+chr4-04	SwissProt	protein_match	337577	337699	167.000000	+	.	Target=O75373.2 4 44 +;percentID=80
+chr4-04	SwissProt	protein_match	337577	337699	147.000000	+	.	Target=Q2KI58.1 4 44 +;percentID=65
+chr4-04	SwissProt	protein_match	337577	337699	148.000000	+	.	Target=P52736.2 1 41 +;percentID=63
+chr4-04	SwissProt	protein_match	337577	337699	171.000000	+	.	Target=Q6ZN08.2 50 90 +;percentID=82
+chr4-04	SwissProt	protein_match	337577	337699	171.000000	+	.	Target=Q9Y2Q1.1 4 44 +;percentID=80
+chr4-04	SwissProt	protein_match	337577	337699	171.000000	+	.	Target=Q5JVG8.1 4 44 +;percentID=80
+chr4-04	SwissProt	protein_match	337577	337699	149.000000	+	.	Target=Q5HYK9.2 14 54 +;percentID=70
+chr4-04	SwissProt	protein_match	337577	337702	150.000000	+	.	Target=Q6P1L6.1 62 103 +;percentID=64
+chr4-04	SwissProt	protein_match	337577	337705	155.000000	+	.	Target=Q6P1L6-3.1 62 104 +;percentID=62
+chr4-04	SwissProt	protein_match	337577	337696	173.000000	+	.	Target=Q09FC8-5.2 6 45 +;percentID=82
+chr4-04	SwissProt	protein_match	337577	337699	157.000000	+	.	Target=Q9HCL3.2 6 46 +;percentID=70
+chr4-04	SwissProt	protein_match	337577	337699	161.000000	+	.	Target=P35789-2.4 4 44 +;percentID=78
+chr4-04	SwissProt	protein_match	337577	337699	136.000000	+	.	Target=A8MUZ8.2 7 47 +;percentID=63
+chr4-04	SwissProt	protein_match	337577	337699	161.000000	+	.	Target=P35789-3.4 4 44 +;percentID=78
+chr4-04	SwissProt	protein_match	337577	337699	138.000000	+	.	Target=Q9BS34.1 4 44 +;percentID=60
+chr4-04	SwissProt	protein_match	337577	337699	127.000000	+	.	Target=P51814-6.2 27 67 +;percentID=56
+chr4-04	SwissProt	protein_match	337577	337699	163.000000	+	.	Target=A8MXY4.2 25 65 +;percentID=78
+chr4-04	SwissProt	protein_match	337577	337699	140.000000	+	.	Target=Q6P9Y7-2.1 6 46 +;percentID=60
+chr4-04	SwissProt	protein_match	337577	337699	166.000000	+	.	Target=P17038.4 4 44 +;percentID=80
+chr4-04	SwissProt	protein_match	337577	337699	167.000000	+	.	Target=Q6ZNA1.2 8 48 +;percentID=82
+chr4-04	SwissProt	protein_match	337577	337699	127.000000	+	.	Target=Q7Z340-3.3 29 69 +;percentID=60
+chr4-04	SwissProt	protein_match	337574	337699	178.000000	+	.	Target=A6NK21.3 3 44 +;percentID=83
+chr4-04	SwissProt	protein_match	337577	337699	169.000000	+	.	Target=Q8NEM1.2 13 53 +;percentID=80
+chr4-04	SwissProt	protein_match	337577	337735	189.000000	+	.	Target=O43345.1 4 56 +;percentID=73
+chr4-04	SwissProt	protein_match	337577	337699	191.000000	+	.	Target=Q5HY98.1 9 49 +;percentID=90
+chr4-04	SwissProt	protein_match	337580	337696	81.000000	+	.	Target=O14978.2 218 256 +;percentID=43
+chr4-04	SwissProt	protein_match	337577	337699	171.000000	+	.	Target=Q03938.2 4 44 +;percentID=82
+chr4-04	SwissProt	protein_match	337577	337699	171.000000	+	.	Target=Q03923.3 4 44 +;percentID=80
+chr4-04	SwissProt	protein_match	337577	337699	172.000000	+	.	Target=O75346.2 4 44 +;percentID=82
+chr4-04	SwissProt	protein_match	337583	337708	163.000000	+	.	Target=Q3KNS6.1 37 78 +;percentID=69
+chr4-04	SwissProt	protein_match	337577	337699	173.000000	+	.	Target=Q86V71.2 4 44 +;percentID=82
+chr4-04	SwissProt	protein_match	337577	337699	173.000000	+	.	Target=P17019.3 4 44 +;percentID=82
+chr4-04	SwissProt	protein_match	337577	337699	174.000000	+	.	Target=Q9Y6R6.1 6 46 +;percentID=75
+chr4-04	SwissProt	protein_match	337577	337699	161.000000	+	.	Target=P35789.4 4 44 +;percentID=78
+chr4-04	SwissProt	protein_match	337577	337699	174.000000	+	.	Target=O75290.3 6 46 +;percentID=75
+chr4-04	SwissProt	protein_match	337577	337717	161.000000	+	.	Target=Q494X3.1 6 51 +;percentID=70;Gap=M40 D1 M6 
+chr4-04	SwissProt	protein_match	337577	337699	161.000000	+	.	Target=Q68DY1.2 4 44 +;percentID=78
+chr4-04	SwissProt	protein_match	337577	337699	138.000000	+	.	Target=Q6N045.2 14 54 +;percentID=58
+chr4-04	SwissProt	protein_match	337577	337696	165.000000	+	.	Target=Q03923-2.3 4 43 +;percentID=80
+chr4-04	SwissProt	protein_match	337577	337699	179.000000	+	.	Target=A6NN14.3 13 53 +;percentID=85
+chr4-04	SwissProt	protein_match	337577	337699	180.000000	+	.	Target=Q6ZMV8.1 4 44 +;percentID=82
+chr4-04	SwissProt	protein_match	337577	337699	182.000000	+	.	Target=Q3MIS6.1 8 48 +;percentID=85
+chr4-04	SwissProt	protein_match	337577	337711	141.000000	+	.	Target=Q6ECI4-2.2 23 67 +;percentID=60
+chr4-04	SwissProt	protein_match	337658	337696	50.000000	+	.	Target=Q96N38-2.1 2 14 +;percentID=76
+chr4-04	SwissProt	protein_match	337658	337696	50.000000	+	.	Target=Q96N38.1 2 14 +;percentID=76
+chr4-04	SwissProt	protein_match	337658	337699	54.000000	+	.	Target=A6NGH9.3 2 15 +;percentID=78
+chr4-04	SwissProt	protein_match	337583	337696	139.000000	+	.	Target=Q60585.2 8 45 +;percentID=68
+chr4-04	SwissProt	protein_match	337583	337699	158.000000	+	.	Target=Q8NA42.1 8 46 +;percentID=74
+chr4-04	SwissProt	protein_match	337583	337699	159.000000	+	.	Target=Q4R6C2.1 8 46 +;percentID=74
+chr4-04	SwissProt	protein_match	337664	337711	50.000000	+	.	Target=Q96MU6.2 1 16 +;percentID=62
+chr4-04	SwissProt	protein_match	337589	337675	64.000000	+	.	Target=Q9Z1D8.1 220 248 +;percentID=48
+chr4-04	SwissProt	protein_match	337589	337708	98.000000	+	.	Target=Q9Y2L8.1 222 261 +;percentID=47
+chr4-04	SwissProt	protein_match	337589	337708	98.000000	+	.	Target=A2T7D2.1 222 261 +;percentID=47
+chr4-04	SwissProt	protein_match	337589	337702	111.000000	+	.	Target=P10077.2 2 39 +;percentID=57
+chr4-04	SwissProt	protein_match	337577	337699	174.000000	+	.	Target=A8MTY0.2 4 44 +;percentID=82
+chr4-04	SwissProt	protein_match	337589	337702	122.000000	+	.	Target=Q0D2J5.2 8 45 +;percentID=57
+chr4-04	SwissProt	protein_match	337577	337699	174.000000	+	.	Target=O75290-2.3 22 62 +;percentID=75
+chr4-04	SwissProt	protein_match	337577	337699	175.000000	+	.	Target=Q03936.2 4 44 +;percentID=82
+chr4-04	SwissProt	protein_match	337577	337699	175.000000	+	.	Target=Q08AN1.2 7 47 +;percentID=80
+chr4-04	SwissProt	protein_match	337577	337699	178.000000	+	.	Target=Q14593.3 37 77 +;percentID=82
+chr4-04	SwissProt	protein_match	337607	337696	104.000000	+	.	Target=P08042-2.3 4 33 +;percentID=66
+chr4-04	SwissProt	protein_match	337613	337693	69.000000	+	.	Target=Q642B9.1 230 256 +;percentID=48
+chr4-04	SwissProt	protein_match	337613	337699	112.000000	+	.	Target=Q5RDX1.1 7 35 +;percentID=68
+chr4-04	SwissProt	protein_match	337577	337699	183.000000	+	.	Target=Q8WV37.1 8 48 +;percentID=85
+chr4-04	SwissProt	protein_match	337577	337696	169.000000	+	.	Target=Q03936-3.2 4 43 +;percentID=82
+chr4-04	SwissProt	protein_match	338108	338194	102.000000	+	.	Target=A6NK31.3 100 128 +;percentID=65
+chr4-04	SwissProt	protein_match	337664	337696	42.000000	+	.	Target=Q96MU6-2.2 1 11 +;percentID=72
+chr4-04	SwissProt	protein_match	337664	337696	44.000000	+	.	Target=Q96PQ6-3.2 1 11 +;percentID=81
+chr4-04	SwissProt	protein_match	337664	337699	46.000000	+	.	Target=P17027.3 1 12 +;percentID=75
+chr4-04	SwissProt	protein_match	338123	338188	67.000000	+	.	Target=Q96SK3.3 47 68 +;percentID=54
+chr4-04	SwissProt	protein_match	337664	337699	50.000000	+	.	Target=Q16587-2.2 1 12 +;percentID=75
+chr4-04	SwissProt	protein_match	337664	337699	50.000000	+	.	Target=Q96PQ6-4.2 1 12 +;percentID=83
+chr4-04	SwissProt	protein_match	337664	337699	51.000000	+	.	Target=Q9P255.2 1 12 +;percentID=83
+chr4-04	SwissProt	protein_match	337664	337699	51.000000	+	.	Target=A6NK75.3 1 12 +;percentID=83
+chr4-04	SwissProt	protein_match	337664	337699	51.000000	+	.	Target=Q14593-2.3 1 12 +;percentID=83
+chr4-04	SwissProt	protein_match	337589	337702	111.000000	+	.	Target=P10077-2.2 2 39 +;percentID=57
+chr4-04	SwissProt	protein_match	337664	337699	60.000000	+	.	Target=Q3SXZ3-2.1 1 12 +;percentID=100
+chr4-04	SwissProt	protein_match	337589	337699	152.000000	+	.	Target=P17038-2.4 2 38 +;percentID=81
+chr4-04	SwissProt	protein_match	337592	337696	110.000000	+	.	Target=Q8BPP0.1 1 35 +;percentID=60
+chr4-04	SwissProt	protein_match	337601	337699	110.000000	+	.	Target=Q9Y6Q3.3 40 72 +;percentID=66
+chr4-04	SwissProt	protein_match	337604	337696	104.000000	+	.	Target=Q96N20.1 3 33 +;percentID=61
+chr4-04	SwissProt	protein_match	337860	337889	41.000000	-	.	Target=Q13398-6.2 120 129 +;percentID=60
+chr4-04	SwissProt	protein_match	337860	337889	41.000000	-	.	Target=Q13398-5.2 79 88 +;percentID=60
+chr4-04	SwissProt	protein_match	337860	337889	41.000000	-	.	Target=Q13398-2.2 131 140 +;percentID=60
+chr4-04	SwissProt	protein_match	337861	337905	42.000000	+	.	Target=Q8BI67.1 413 427 +;percentID=53
+chr4-04	SwissProt	protein_match	338123	338218	94.000000	+	.	Target=Q8N7Q3.2 12 43 +;percentID=53
+chr4-04	SwissProt	protein_match	338114	338224	53.000000	+	.	Target=Q8WV37.1 43 82 +;percentID=40;Gap=M13 I2 M15 I1 M9 
+chr4-04	SwissProt	protein_match	338123	338182	49.000000	+	.	Target=A6NFI3.1 198 217 +;percentID=50
+chr4-04	SwissProt	protein_match	338123	338182	49.000000	+	.	Target=Q6PGE4.1 194 213 +;percentID=50
+chr4-04	SwissProt	protein_match	338123	338218	99.000000	+	.	Target=Q14586.2 44 75 +;percentID=59
+chr4-04	SwissProt	protein_match	338123	338218	75.000000	+	.	Target=O43345.1 44 75 +;percentID=43
+chr4-04	SwissProt	protein_match	338123	338215	85.000000	+	.	Target=P35789-2.4 44 74 +;percentID=48
+chr4-04	SwissProt	protein_match	338123	338215	85.000000	+	.	Target=P35789.4 44 74 +;percentID=48
+chr4-04	SwissProt	protein_match	338123	338215	85.000000	+	.	Target=P35789-3.4 44 74 +;percentID=48
+chr4-04	SwissProt	protein_match	338123	338215	85.000000	+	.	Target=Q6ZN08.2 90 120 +;percentID=48
+chr4-04	SwissProt	protein_match	338123	338218	85.000000	+	.	Target=Q96N38-2.1 16 47 +;percentID=50
+chr4-04	SwissProt	protein_match	337664	337705	56.000000	+	.	Target=Q86YE8-4.3 1 14 +;percentID=85
+chr4-04	SwissProt	protein_match	338123	338191	89.000000	+	.	Target=Q9NSJ1.2 33 55 +;percentID=65
+chr4-04	SwissProt	protein_match	337664	337735	64.000000	+	.	Target=Q8N7Q3.2 1 24 +;percentID=62
+chr4-04	SwissProt	protein_match	337860	337889	41.000000	-	.	Target=Q13398-4.2 144 153 +;percentID=60
+chr4-04	SwissProt	protein_match	337860	337889	41.000000	-	.	Target=Q13398.2 140 149 +;percentID=60
+chr4-04	SwissProt	protein_match	337860	337889	41.000000	-	.	Target=Q13398-3.2 152 161 +;percentID=60
+chr4-04	SwissProt	protein_match	338123	338191	89.000000	+	.	Target=O14628-4.2 44 66 +;percentID=65
+chr4-04	SwissProt	protein_match	338123	338191	89.000000	+	.	Target=O14628-7.2 48 70 +;percentID=65
+chr4-04	SwissProt	protein_match	338123	338215	93.000000	+	.	Target=Q68DY1.2 44 74 +;percentID=45
+chr4-04	SwissProt	protein_match	338123	338221	109.000000	+	.	Target=A6NNF4.3 44 76 +;percentID=54
+chr4-04	SwissProt	protein_match	338123	338215	98.000000	+	.	Target=Q03923.3 44 75 +;percentID=56;Gap=M27 I1 M4 
+chr4-04	SwissProt	protein_match	338123	338218	98.000000	+	.	Target=P0CB33.1 56 87 +;percentID=50
+chr4-04	SwissProt	protein_match	338123	338218	98.000000	+	.	Target=A8MUV8.3 44 75 +;percentID=59
+chr4-04	SwissProt	protein_match	338123	338218	112.000000	+	.	Target=P17038-2.4 38 70 +;percentID=57;Gap=M21 I1 M11 
+chr4-04	SwissProt	protein_match	338123	338218	101.000000	+	.	Target=Q96H40.3 44 75 +;percentID=50
+chr4-04	SwissProt	protein_match	338123	338218	101.000000	+	.	Target=Q7Z2F6.1 44 75 +;percentID=62
+chr4-04	SwissProt	protein_match	338123	338215	102.000000	+	.	Target=O75373.2 44 74 +;percentID=54
+chr4-04	SwissProt	protein_match	338123	338218	103.000000	+	.	Target=Q03936.2 44 75 +;percentID=56
+chr4-04	SwissProt	protein_match	338123	338218	105.000000	+	.	Target=Q5JVG8.1 44 75 +;percentID=50
+chr4-04	SwissProt	protein_match	338123	338218	105.000000	+	.	Target=Q96JC4.1 56 87 +;percentID=56
+chr4-04	SwissProt	protein_match	338123	338218	105.000000	+	.	Target=A6NF79.3 56 87 +;percentID=56
+chr4-04	SwissProt	protein_match	338123	338218	85.000000	+	.	Target=Q96N38.1 16 47 +;percentID=50
+chr4-04	SwissProt	protein_match	338123	338221	106.000000	+	.	Target=Q05481.1 53 85 +;percentID=57
+chr4-04	SwissProt	protein_match	338123	338191	89.000000	+	.	Target=A6NGH9.3 15 37 +;percentID=65
+chr4-04	SwissProt	protein_match	338123	338191	89.000000	+	.	Target=O14628.2 44 66 +;percentID=65
+chr4-04	SwissProt	protein_match	338123	338191	89.000000	+	.	Target=O14628-5.2 44 66 +;percentID=65
+chr4-04	SwissProt	protein_match	338123	338191	89.000000	+	.	Target=O14628-6.2 48 70 +;percentID=65
+chr4-04	SwissProt	protein_match	338123	338218	109.000000	+	.	Target=Q8NEM1.2 53 84 +;percentID=59
+chr4-04	SwissProt	protein_match	338123	338218	109.000000	+	.	Target=Q8TF32.2 75 106 +;percentID=62
+chr4-04	SwissProt	protein_match	338123	338221	126.000000	+	.	Target=O75437-2.3 53 85 +;percentID=63
+chr4-04	SwissProt	protein_match	338123	338218	110.000000	+	.	Target=A8MXY4.2 65 96 +;percentID=56
+chr4-04	SwissProt	protein_match	338123	338218	112.000000	+	.	Target=Q8IYX0.1 56 87 +;percentID=56
+chr4-04	SwissProt	protein_match	338123	338218	112.000000	+	.	Target=A6NN14.3 53 84 +;percentID=56
+chr4-04	SwissProt	protein_match	338123	338218	139.000000	+	.	Target=Q3SXZ3.1 44 75 +;percentID=81
+chr4-04	SwissProt	protein_match	338123	338218	112.000000	+	.	Target=P17038.4 44 76 +;percentID=57;Gap=M21 I1 M11 
+chr4-04	SwissProt	protein_match	338123	338218	113.000000	+	.	Target=A6NP11.3 44 75 +;percentID=59
+chr4-04	SwissProt	protein_match	338123	338224	114.000000	+	.	Target=A6NNF4-2.3 44 77 +;percentID=55
+chr4-04	SwissProt	protein_match	338123	338218	115.000000	+	.	Target=Q8NE65.1 75 106 +;percentID=59
+chr4-04	SwissProt	protein_match	338123	338218	119.000000	+	.	Target=Q9H8G1.2 76 107 +;percentID=62
+chr4-04	SwissProt	protein_match	338123	338218	121.000000	+	.	Target=A6NK75.3 12 43 +;percentID=65
+chr4-04	SwissProt	protein_match	338123	338218	122.000000	+	.	Target=Q14593-2.3 12 43 +;percentID=65
+chr4-04	SwissProt	protein_match	338123	338218	122.000000	+	.	Target=Q14593.3 77 108 +;percentID=65
+chr4-04	SwissProt	protein_match	338123	338218	105.000000	+	.	Target=A6NKZ1.3 56 87 +;percentID=56
+chr4-04	SwissProt	protein_match	338123	338218	124.000000	+	.	Target=Q9Y2Q1.1 44 75 +;percentID=65
+chr4-04	SwissProt	protein_match	338123	338218	106.000000	+	.	Target=Q03938.2 44 75 +;percentID=50
+chr4-04	SwissProt	protein_match	338123	338218	107.000000	+	.	Target=O75346.2 44 75 +;percentID=53
+chr4-04	SwissProt	protein_match	338123	338218	108.000000	+	.	Target=Q8TD23.2 44 75 +;percentID=59
+chr4-04	SwissProt	protein_match	338123	338218	108.000000	+	.	Target=Q86V71.2 44 75 +;percentID=56
+chr4-04	SwissProt	protein_match	338123	338221	126.000000	+	.	Target=O75437.3 53 85 +;percentID=63
+chr4-04	SwissProt	protein_match	339811	339843	40.000000	+	.	Target=Q96RE9.1 118 128 +;percentID=63
+chr4-04	SwissProt	protein_match	338123	338218	130.000000	+	.	Target=Q6ZMV8.1 44 75 +;percentID=65
+chr4-04	SwissProt	protein_match	338123	338221	130.000000	+	.	Target=A8MTY0.2 44 76 +;percentID=63
+chr4-04	SwissProt	protein_match	338123	338218	139.000000	+	.	Target=Q3SXZ3-2.1 12 43 +;percentID=81
+chr4-04	SwissProt	protein_match	345597	345665	41.000000	-	.	Target=A2T7D2.1 159 180 +;percentID=47;Gap=M5 D1 M17 
+chr4-04	SwissProt	protein_match	338123	338218	169.000000	+	.	Target=Q15928.1 44 75 +;percentID=100
+chr4-04	SwissProt	protein_match	338126	338200	80.000000	+	.	Target=Q8IW36-3.3 57 81 +;percentID=56
+chr4-04	SwissProt	protein_match	338126	338200	80.000000	+	.	Target=Q8IW36.3 57 81 +;percentID=56
+chr4-04	SwissProt	protein_match	338126	338200	80.000000	+	.	Target=Q8IW36-2.3 57 81 +;percentID=56
+chr4-04	SwissProt	protein_match	338126	338191	83.000000	+	.	Target=A8MUP4.2 13 34 +;percentID=63
+chr4-04	SwissProt	protein_match	338132	338182	48.000000	+	.	Target=Q96N20.1 38 54 +;percentID=41
+chr4-04	SwissProt	protein_match	338135	338200	45.000000	+	.	Target=P17031.3 58 81 +;percentID=41;Gap=M16 I2 M6 
+chr4-04	SwissProt	protein_match	338144	338191	40.000000	+	.	Target=Q61751.1 106 121 +;percentID=43
+chr4-04	SwissProt	protein_match	338159	338224	40.000000	+	.	Target=Q8WV37-2.1 2 24 +;percentID=43;Gap=M13 I1 M9 
+chr4-04	SwissProt	protein_match	338123	338218	124.000000	+	.	Target=Q8IYB9.1 44 75 +;percentID=71
+chr4-04	SwissProt	protein_match	338175	338261	47.000000	+	.	Target=Q9Z1D8.1 316 345 +;percentID=43;Gap=M14 I1 M15 
+chr4-04	SwissProt	protein_match	338123	338218	124.000000	+	.	Target=P17019.3 44 75 +;percentID=65
+chr4-04	SwissProt	protein_match	338123	338218	125.000000	+	.	Target=Q9P255.2 12 43 +;percentID=68
+chr4-04	SwissProt	protein_match	338123	338218	125.000000	+	.	Target=A6NK21.3 44 75 +;percentID=68
+chr4-04	SwissProt	protein_match	338123	338218	126.000000	+	.	Target=Q8IYN0.1 76 107 +;percentID=62
+chr4-04	SwissProt	protein_match	347808	347873	40.000000	+	.	Target=A6NK31.3 488 509 +;percentID=40
+chr4-04	SwissProt	protein_match	339811	339843	40.000000	+	.	Target=Q96RE9-3.1 134 144 +;percentID=63
+chr4-04	SwissProt	protein_match	339811	339843	40.000000	+	.	Target=Q96RE9-2.1 133 143 +;percentID=63
+chr4-04	SwissProt	protein_match	345597	345647	40.000000	-	.	Target=Q9Y2L8.1 164 180 +;percentID=52
+chr4-04	SwissProt	protein_match	347814	347870	46.000000	+	.	Target=Q5MCW4.1 550 568 +;percentID=42
+chr4-04	SwissProt	protein_match	347177	347215	40.000000	+	.	Target=Q9UJU3.1 105 117 +;percentID=46
+chr4-04	SwissProt	protein_match	347648	347734	44.000000	-	.	Target=Q8N4W9-2.2 272 300 +;percentID=31
+chr4-04	SwissProt	protein_match	347666	347734	54.000000	-	.	Target=Q8WV37-3.1 200 222 +;percentID=43
+chr4-04	SwissProt	protein_match	347666	347734	59.000000	-	.	Target=Q6P560.1 233 255 +;percentID=43
+chr4-04	SwissProt	protein_match	347675	347734	46.000000	-	.	Target=Q9HCG1.2 535 554 +;percentID=45
+chr4-04	SwissProt	protein_match	347684	347734	40.000000	-	.	Target=Q96SE7.1 343 359 +;percentID=47
+chr4-04	SwissProt	protein_match	347684	347734	40.000000	-	.	Target=Q96JF6.3 265 281 +;percentID=41
+chr4-04	SwissProt	protein_match	347684	347734	40.000000	-	.	Target=Q6ZNA1.2 468 484 +;percentID=47
+chr4-04	SwissProt	protein_match	347684	347737	41.000000	-	.	Target=Q9UC06.2 137 154 +;percentID=44
+chr4-04	SwissProt	protein_match	347684	347734	43.000000	-	.	Target=P17035.4 297 313 +;percentID=47
+chr4-04	SwissProt	protein_match	338162	338218	45.000000	+	.	Target=Q09FC8-4.2 3 21 +;percentID=47
+chr4-04	SwissProt	protein_match	347684	347734	45.000000	-	.	Target=P17141.3 281 297 +;percentID=47
+chr4-04	SwissProt	protein_match	338630	338683	40.000000	-	.	Target=Q05481.1 205 222 +;percentID=44
+chr4-04	SwissProt	protein_match	338711	338773	40.000000	-	.	Target=Q3KNS6.1 107 127 +;percentID=42
+chr4-04	SwissProt	protein_match	338803	338859	45.000000	+	.	Target=A0JNB1.1 314 333 +;percentID=45;Gap=M10 I1 M9 
+chr4-04	SwissProt	protein_match	338825	338875	41.000000	-	.	Target=Q5SXM1.1 84 101 +;percentID=50;Gap=M9 I1 M8 
+chr4-04	SwissProt	protein_match	347808	347873	41.000000	+	.	Target=P51508.3 412 433 +;percentID=40
+chr4-04	SwissProt	protein_match	347814	347873	41.000000	+	.	Target=P10751.2 113 132 +;percentID=40
+chr4-04	SwissProt	protein_match	347814	347870	46.000000	+	.	Target=Q80W31.1 543 561 +;percentID=42
+chr4-04	SwissProt	protein_match	354526	354570	46.000000	-	.	Target=Q5RB33.1 202 218 +;percentID=52;Gap=M6 I2 M9 
+chr4-04	SwissProt	protein_match	347838	347873	44.000000	+	.	Target=Q5HYK9.2 233 244 +;percentID=66
+chr4-04	SwissProt	protein_match	347852	347896	41.000000	-	.	Target=Q8TAF7.2 67 83 +;percentID=41;Gap=M10 I2 M5 
+chr4-04	SwissProt	protein_match	347924	347959	40.000000	-	.	Target=Q14590-2.3 245 256 +;percentID=50
+chr4-04	SwissProt	protein_match	347924	347959	40.000000	-	.	Target=Q14590.3 249 260 +;percentID=50
+chr4-04	SwissProt	protein_match	348081	348137	41.000000	+	.	Target=Q15935.2 314 332 +;percentID=42
+chr4-04	SwissProt	protein_match	348120	348173	40.000000	+	.	Target=P51814-5.2 44 63 +;percentID=50;Gap=M9 I2 M9 
+chr4-04	SwissProt	protein_match	353436	353483	40.000000	-	.	Target=Q7TSH9.1 86 101 +;percentID=43
+chr4-04	SwissProt	protein_match	353438	353500	40.000000	+	.	Target=Q0VAW7.1 483 505 +;percentID=47;Gap=M16 I2 M5 
+chr4-04	SwissProt	protein_match	353438	353500	40.000000	+	.	Target=Q0VAW7-2.1 477 499 +;percentID=47;Gap=M16 I2 M5 
+chr4-04	SwissProt	protein_match	353439	353486	41.000000	+	.	Target=Q2VY69.1 310 326 +;percentID=47;Gap=M7 I1 M9 
+chr4-04	SwissProt	protein_match	353703	353741	42.000000	+	.	Target=Q13106.3 56 68 +;percentID=61
+chr4-04	SwissProt	protein_match	347684	347734	43.000000	-	.	Target=P17035-2.4 244 260 +;percentID=47
+chr4-04	SwissProt	protein_match	354377	354415	41.000000	-	.	Target=Q68DY1.2 188 200 +;percentID=53
+chr4-04	SwissProt	protein_match	347684	347734	45.000000	-	.	Target=Q9Y6Q3.3 319 335 +;percentID=47
+chr4-04	SwissProt	protein_match	347684	347734	45.000000	-	.	Target=Q9Y6Q3-2.3 334 350 +;percentID=47
+chr4-04	SwissProt	protein_match	347687	347740	48.000000	-	.	Target=Q9HCX3.1 247 264 +;percentID=50
+chr4-04	SwissProt	protein_match	354450	354497	46.000000	-	.	Target=Q6ZMS4.2 114 129 +;percentID=43
+chr4-04	SwissProt	protein_match	354526	354570	45.000000	-	.	Target=Q6ZNG0.1 202 218 +;percentID=47;Gap=M6 I2 M9 
+chr4-04	SwissProt	protein_match	354526	354570	45.000000	-	.	Target=Q6ZNG0-2.1 88 104 +;percentID=47;Gap=M6 I2 M9 
+chr4-04	SwissProt	protein_match	354528	354569	41.000000	+	.	Target=P59923.1 970 983 +;percentID=50
+chr4-04	SwissProt	protein_match	354546	354569	40.000000	+	.	Target=A2T812.1 583 590 +;percentID=75
+chr4-04	SwissProt	protein_match	354546	354569	40.000000	+	.	Target=Q9HBT7.1 583 590 +;percentID=75
+chr4-04	SwissProt	protein_match	354546	354584	40.000000	+	.	Target=P52736.2 240 257 +;percentID=50;Gap=M8 I5 M5 
+chr4-04	SwissProt	protein_match	354546	354605	41.000000	+	.	Target=Q9Y3M9.2 234 254 +;percentID=42;Gap=M11 I1 M9 
+chr4-04	SwissProt	protein_match	354546	354611	44.000000	+	.	Target=Q8TAW3.2 190 212 +;percentID=41;Gap=M8 D1 M5 I2 M8 
+chr4-04	SwissProt	protein_match	354341	354397	46.000000	+	.	Target=Q9BX82.1 375 393 +;percentID=47
+chr4-04	SwissProt	protein_match	354377	354415	41.000000	-	.	Target=Q68DY1-2.2 112 124 +;percentID=53
+chr4-04	SwissProt	protein_match	354377	354415	41.000000	-	.	Target=P17038-2.4 603 615 +;percentID=53
+chr4-04	SwissProt	protein_match	354377	354415	41.000000	-	.	Target=P17038.4 609 621 +;percentID=53
+chr4-04	SwissProt	protein_match	262904	262972	63.000000	-	.	Target=Q9BR84.1 450 472 +;percentID=47
+chr4-04	SwissProt	protein_match	262904	262993	63.000000	-	.	Target=Q8NDP4.1 444 473 +;percentID=43
+chr4-04	SwissProt	protein_match	262904	262993	63.000000	-	.	Target=Q0VAW7.1 810 839 +;percentID=43
+chr4-04	SwissProt	protein_match	262904	262993	63.000000	-	.	Target=Q0VAW7-2.1 804 833 +;percentID=43
+chr4-04	SwissProt	protein_match	262904	262993	64.000000	-	.	Target=Q6ZN57.1 332 361 +;percentID=43
+chr4-04	SwissProt	protein_match	262904	262981	64.000000	-	.	Target=Q9UK13.2 406 429 +;percentID=46;Gap=M3 D2 M21 
+chr4-04	SwissProt	protein_match	262904	262993	65.000000	-	.	Target=A0JNB1.1 626 655 +;percentID=43
+chr4-04	SwissProt	protein_match	262904	262993	65.000000	-	.	Target=Q86WZ6.1 638 667 +;percentID=43
+chr4-04	SwissProt	protein_match	262904	262957	65.000000	-	.	Target=Q6ZN19.1 415 432 +;percentID=66
+chr4-04	SwissProt	protein_match	262904	262993	65.000000	-	.	Target=Q8N7Q3.2 455 484 +;percentID=40
+chr4-04	SwissProt	protein_match	262904	262978	67.000000	-	.	Target=Q3KQV3.2 404 429 +;percentID=42;Gap=M2 I1 M23 
+chr4-04	SwissProt	protein_match	262904	262993	67.000000	-	.	Target=Q9P2J8-2.3 324 353 +;percentID=43
+chr4-04	SwissProt	protein_match	262904	262993	67.000000	-	.	Target=Q9P2J8.3 450 479 +;percentID=43
+chr4-04	SwissProt	protein_match	262904	262978	68.000000	-	.	Target=Q02386.2 622 647 +;percentID=50;Gap=M7 I1 M18 
+chr4-04	SwissProt	protein_match	262904	262993	69.000000	-	.	Target=Q14591.3 544 573 +;percentID=43
+chr4-04	SwissProt	protein_match	262904	262993	69.000000	-	.	Target=Q9UJU3.1 839 868 +;percentID=46
+chr4-04	SwissProt	protein_match	262904	262993	70.000000	-	.	Target=P52737.1 258 287 +;percentID=46
+chr4-04	SwissProt	protein_match	262904	262993	70.000000	-	.	Target=Q5REK1.1 258 287 +;percentID=46
+chr4-04	SwissProt	protein_match	262904	262969	70.000000	-	.	Target=Q8IZ26.2 300 321 +;percentID=54
+chr4-04	SwissProt	protein_match	262904	262993	72.000000	-	.	Target=Q09FC8-5.2 446 475 +;percentID=50
+chr4-04	SwissProt	protein_match	262904	262993	72.000000	-	.	Target=Q09FC8-4.2 433 462 +;percentID=50
+chr4-04	SwissProt	protein_match	262904	263002	72.000000	-	.	Target=Q9UJN7.2 279 312 +;percentID=41;Gap=M3 I1 M30 
+chr4-04	SwissProt	protein_match	262904	262993	72.000000	-	.	Target=Q09FC8-2.2 458 487 +;percentID=50
+chr4-04	SwissProt	protein_match	262904	262993	72.000000	-	.	Target=Q09FC8.2 494 523 +;percentID=50
+chr4-04	SwissProt	protein_match	262904	262993	72.000000	-	.	Target=Q09FC8-3.2 216 245 +;percentID=50
+chr4-04	SwissProt	protein_match	262904	262993	72.000000	-	.	Target=Q08AN1.2 191 220 +;percentID=43
+chr4-04	SwissProt	protein_match	262904	262993	73.000000	-	.	Target=A6NN14.3 270 299 +;percentID=43
+chr4-04	SwissProt	protein_match	262904	262972	73.000000	-	.	Target=Q99676.3 375 397 +;percentID=52
+chr4-04	SwissProt	protein_match	262904	262972	73.000000	-	.	Target=A6QLU5.1 376 398 +;percentID=52
+chr4-04	SwissProt	protein_match	262904	262993	75.000000	-	.	Target=Q4R6C2.1 428 457 +;percentID=43
+chr4-04	SwissProt	protein_match	262904	262993	75.000000	-	.	Target=Q8NA42.1 428 457 +;percentID=43
+chr4-04	SwissProt	protein_match	262904	262972	81.000000	-	.	Target=Q8N9Z0.2 273 295 +;percentID=60
+chr4-04	SwissProt	protein_match	262904	262972	81.000000	-	.	Target=Q8N9Z0-2.2 230 252 +;percentID=60
+chr4-04	SwissProt	protein_match	262913	263002	44.000000	-	.	Target=P17098.2 402 429 +;percentID=40;Gap=M4 D1 M4 D1 M20 
+chr4-04	SwissProt	protein_match	262913	262993	54.000000	-	.	Target=Q96SE7.1 771 797 +;percentID=40
+chr4-04	SwissProt	protein_match	262913	262993	68.000000	-	.	Target=Q8TB69.1 215 241 +;percentID=48
+chr4-04	SwissProt	protein_match	262928	262993	58.000000	-	.	Target=A2T812.1 731 752 +;percentID=40
+chr4-04	SwissProt	protein_match	262928	262993	58.000000	-	.	Target=Q9HBT7.1 731 752 +;percentID=40
+chr4-04	SwissProt	protein_match	262931	262972	46.000000	-	.	Target=Q13398-4.2 554 567 +;percentID=57
+chr4-04	SwissProt	protein_match	262931	262972	46.000000	-	.	Target=Q13398.2 550 563 +;percentID=57
+chr4-04	SwissProt	protein_match	262931	262972	46.000000	-	.	Target=Q13398-3.2 562 575 +;percentID=57
+chr4-04	SwissProt	protein_match	262931	262972	46.000000	-	.	Target=Q13398-6.2 530 543 +;percentID=57
+chr4-04	SwissProt	protein_match	262931	262972	46.000000	-	.	Target=Q13398-5.2 489 502 +;percentID=57
+chr4-04	SwissProt	protein_match	262937	262975	43.000000	-	.	Target=Q15937.2 484 497 +;percentID=57;Gap=M3 I1 M10 
+chr4-04	SwissProt	protein_match	262943	262993	41.000000	-	.	Target=Q6ZMY9.1 458 474 +;percentID=41
+chr4-04	SwissProt	protein_match	263002	263076	42.000000	+	.	Target=Q5RDX1.1 105 133 +;percentID=41;Gap=M11 I2 M3 I2 M11 
+chr4-04	SwissProt	protein_match	263002	263076	42.000000	+	.	Target=Q6P3V2.2 137 165 +;percentID=41;Gap=M11 I2 M3 I2 M11 
+chr4-04	SwissProt	protein_match	263068	263166	48.000000	-	.	Target=P0CB33.1 373 404 +;percentID=42;Gap=M18 D1 M14 
+chr4-04	SwissProt	protein_match	263077	263151	45.000000	-	.	Target=Q5HYK9.2 141 165 +;percentID=40
+chr4-04	SwissProt	protein_match	263089	263166	53.000000	-	.	Target=Q5TYW1.2 874 899 +;percentID=46
+chr4-04	SwissProt	protein_match	263089	263166	53.000000	-	.	Target=Q4V348.1 634 659 +;percentID=46
+chr4-04	SwissProt	protein_match	263092	263148	42.000000	-	.	Target=P59923.1 539 557 +;percentID=42
+chr4-04	SwissProt	protein_match	263104	263151	46.000000	-	.	Target=O14709.1 367 382 +;percentID=56
+chr4-04	SwissProt	protein_match	263104	263166	47.000000	-	.	Target=P52742.2 262 282 +;percentID=47
+chr4-04	SwissProt	protein_match	263104	263169	54.000000	-	.	Target=Q8N859.1 320 341 +;percentID=50
+chr4-04	SwissProt	protein_match	263107	263166	42.000000	-	.	Target=Q8TB69.1 284 303 +;percentID=45
+chr4-04	SwissProt	protein_match	263107	263151	42.000000	-	.	Target=Q08AN1.2 266 280 +;percentID=60
+chr4-04	SwissProt	protein_match	263107	263166	43.000000	-	.	Target=A6NF35.2 542 561 +;percentID=45
+chr4-04	SwissProt	protein_match	263107	263148	49.000000	-	.	Target=Q5R4K8.2 257 270 +;percentID=64
+chr4-04	SwissProt	protein_match	263107	263151	51.000000	-	.	Target=Q8N8J6-2.2 632 646 +;percentID=66
+chr4-04	SwissProt	protein_match	263107	263151	51.000000	-	.	Target=Q8N8J6.2 621 635 +;percentID=66
+chr4-04	SwissProt	protein_match	263107	263151	51.000000	-	.	Target=Q8N8J6-3.2 576 590 +;percentID=66
+chr4-04	SwissProt	protein_match	263107	263190	52.000000	-	.	Target=Q2KI58.1 500 527 +;percentID=42
+chr4-04	SwissProt	protein_match	263113	263166	40.000000	-	.	Target=Q8IYX0.1 372 389 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263166	40.000000	-	.	Target=Q03924-2.3 409 426 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263160	40.000000	-	.	Target=Q96JC4.1 179 194 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263151	40.000000	-	.	Target=Q80W31.1 344 356 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263151	40.000000	-	.	Target=Q16587.2 272 284 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263151	40.000000	-	.	Target=Q16587-3.2 240 252 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263151	40.000000	-	.	Target=Q9NSJ1.2 416 428 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263151	40.000000	-	.	Target=A6NGH9.3 586 598 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263151	40.000000	-	.	Target=A6NK31.3 344 356 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263142	40.000000	-	.	Target=Q6ZN19.1 341 350 +;percentID=70
+chr4-04	SwissProt	protein_match	263113	263151	40.000000	-	.	Target=O14628.2 575 587 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263151	40.000000	-	.	Target=O14628-5.2 552 564 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263151	40.000000	-	.	Target=O14628-6.2 556 568 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263151	40.000000	-	.	Target=O14628-4.2 503 515 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263151	40.000000	-	.	Target=O14628-7.2 507 519 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263148	40.000000	-	.	Target=P51815.2 419 430 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263151	40.000000	-	.	Target=Q9UK10.2 341 353 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263148	41.000000	-	.	Target=Q9NV72.1 241 252 +;percentID=58
+chr4-04	SwissProt	protein_match	263113	263166	41.000000	-	.	Target=Q3MIS6.1 233 250 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263151	41.000000	-	.	Target=Q68EA5.3 277 289 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263148	41.000000	-	.	Target=P16374.2 538 549 +;percentID=58
+chr4-04	SwissProt	protein_match	263113	263160	41.000000	-	.	Target=A6NF79.3 178 193 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263160	41.000000	-	.	Target=A6NKZ1.3 178 193 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263166	41.000000	-	.	Target=Q7L2R6.2 486 503 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263151	41.000000	-	.	Target=Q99676.3 415 427 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263151	41.000000	-	.	Target=A6QLU5.1 416 428 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263151	41.000000	-	.	Target=Q8N7Q3.2 502 514 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263151	41.000000	-	.	Target=A6NDX5.5 358 370 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263166	41.000000	-	.	Target=P51786.2 378 395 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263169	41.000000	-	.	Target=Q96NJ3-2.2 376 394 +;percentID=36
+chr4-04	SwissProt	protein_match	263113	263151	42.000000	-	.	Target=Q9UC06.2 416 428 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263160	42.000000	-	.	Target=Q9BS34.1 191 206 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263151	42.000000	-	.	Target=Q06732-2.2 578 590 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263166	42.000000	-	.	Target=Q2VY69.1 503 520 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263151	42.000000	-	.	Target=Q9UJW8.2 462 474 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263151	42.000000	-	.	Target=Q9HCZ1.2 597 609 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263166	42.000000	-	.	Target=Q86T29.1 581 598 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263151	42.000000	-	.	Target=Q9UK11.1 257 269 +;percentID=46
+chr4-04	SwissProt	protein_match	263113	263166	42.000000	-	.	Target=Q16587-4.2 447 464 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263166	42.000000	-	.	Target=Q16587-2.2 448 465 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263166	42.000000	-	.	Target=P52744.2 130 147 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263190	42.000000	-	.	Target=Q6P560.1 304 328 +;percentID=42;Gap=M5 D1 M20 
+chr4-04	SwissProt	protein_match	263113	263148	43.000000	-	.	Target=Q9HCG1.2 255 266 +;percentID=66
+chr4-04	SwissProt	protein_match	263113	263151	43.000000	-	.	Target=P51814-6.2 716 728 +;percentID=46
+chr4-04	SwissProt	protein_match	263113	263151	43.000000	-	.	Target=P51814.2 758 770 +;percentID=46
+chr4-04	SwissProt	protein_match	263113	263151	43.000000	-	.	Target=P51814-5.2 750 762 +;percentID=46
+chr4-04	SwissProt	protein_match	263113	263151	43.000000	-	.	Target=P51814-2.2 718 730 +;percentID=46
+chr4-04	SwissProt	protein_match	263113	263151	43.000000	-	.	Target=P51814-3.2 726 738 +;percentID=46
+chr4-04	SwissProt	protein_match	263113	263151	43.000000	-	.	Target=P51814-7.2 682 694 +;percentID=46
+chr4-04	SwissProt	protein_match	263113	263151	43.000000	-	.	Target=P51814-8.2 680 692 +;percentID=46
+chr4-04	SwissProt	protein_match	263113	263169	43.000000	-	.	Target=Q96NL3.1 554 572 +;percentID=42
+chr4-04	SwissProt	protein_match	263113	263151	43.000000	-	.	Target=Q5JVG2.1 549 561 +;percentID=46
+chr4-04	SwissProt	protein_match	263113	263166	43.000000	-	.	Target=Q9UK13.2 218 235 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263151	43.000000	-	.	Target=Q9QXT9.1 203 215 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263166	43.000000	-	.	Target=Q5RBQ3.1 267 284 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263142	43.000000	-	.	Target=Q8NDP4.1 214 223 +;percentID=70
+chr4-04	SwissProt	protein_match	263113	263151	43.000000	-	.	Target=Q9BY31.2 829 841 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263166	43.000000	-	.	Target=Q0VAW7.1 796 813 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263166	43.000000	-	.	Target=Q0VAW7-2.1 790 807 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263166	43.000000	-	.	Target=Q9NZL3.2 196 213 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263166	44.000000	-	.	Target=Q15928.1 303 320 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263166	44.000000	-	.	Target=O95780.1 221 238 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263166	44.000000	-	.	Target=Q9H8G1.2 253 270 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263166	44.000000	-	.	Target=O95780-2.1 145 162 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263151	44.000000	-	.	Target=Q9NYT6.2 249 261 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263151	44.000000	-	.	Target=Q5RER9.1 240 252 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263151	44.000000	-	.	Target=Q6ZN06.2 240 252 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263166	44.000000	-	.	Target=Q7Z3V5.3 215 232 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263166	44.000000	-	.	Target=O75123.1 255 272 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263166	44.000000	-	.	Target=Q8NDQ6-4.1 492 509 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263166	44.000000	-	.	Target=Q8NDQ6.1 515 532 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263166	44.000000	-	.	Target=Q8NDQ6-2.1 483 500 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263166	44.000000	-	.	Target=Q5R5S6.1 515 532 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263166	44.000000	-	.	Target=Q8N972.1 300 317 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263166	44.000000	-	.	Target=Q9BS31.1 394 411 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263151	44.000000	-	.	Target=Q3KP31.1 157 169 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263151	44.000000	-	.	Target=Q5REI6.1 157 169 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263166	44.000000	-	.	Target=Q6ZTB9.1 114 131 +;percentID=50;sequence=MVMHSEDEPYKCKFCGKAFDNLHLYLTHERTHTGEKPYECNKCGKAFSCSSSIRKHARIHTGEKPYICKQCGKAFRYSSSIRNHENTHTGEKPCECKQCGKAFSYSSYFRIHERIHTGEQVYKCKECGKTFTYPSAFHKHKSTHTSQKLYECKECGKAFDCFSSFHSHEGVHTGEKPYECRTWKSLQ
+chr4-04	SwissProt	protein_match	263113	263166	44.000000	-	.	Target=Q14590-2.3 531 548 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263166	44.000000	-	.	Target=Q14590.3 535 552 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263166	44.000000	-	.	Target=Q3KQV3.2 414 431 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263166	44.000000	-	.	Target=Q6P9A3-2.1 254 271 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263166	44.000000	-	.	Target=Q6P9A3.1 267 284 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263151	44.000000	-	.	Target=Q8TC21.2 444 456 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263151	44.000000	-	.	Target=Q8TC21-2.2 374 386 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263166	45.000000	-	.	Target=Q3SXZ3-2.1 299 316 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263166	45.000000	-	.	Target=Q3SXZ3.1 331 348 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263142	45.000000	-	.	Target=Q86XN6-2.2 438 447 +;percentID=80
+chr4-04	SwissProt	protein_match	263113	263142	45.000000	-	.	Target=Q86XN6.2 438 447 +;percentID=80
+chr4-04	SwissProt	protein_match	263113	263151	45.000000	-	.	Target=A2RRD8.1 298 310 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263151	45.000000	-	.	Target=Q8N7K0.1 643 655 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263166	45.000000	-	.	Target=Q86TJ5.1 400 417 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263151	45.000000	-	.	Target=Q6NX49.1 517 529 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263151	45.000000	-	.	Target=Q6ZMW2.1 531 543 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263166	45.000000	-	.	Target=Q9Y2H8.1 592 609 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263166	45.000000	-	.	Target=Q61116.1 557 574 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263169	45.000000	-	.	Target=Q2TL60.1 433 451 +;percentID=42
+chr4-04	SwissProt	protein_match	263113	263166	45.000000	-	.	Target=A6NP11.3 444 461 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263190	45.000000	-	.	Target=Q08DG8.1 421 446 +;percentID=42
+chr4-04	SwissProt	protein_match	263113	263151	45.000000	-	.	Target=Q96IR2.2 716 728 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263151	45.000000	-	.	Target=Q8N7K0-2.1 608 620 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263166	45.000000	-	.	Target=Q9XSR1.1 784 801 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263151	45.000000	-	.	Target=Q9P2J8-2.3 567 579 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263151	45.000000	-	.	Target=Q8BZW4-2.1 300 312 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263151	45.000000	-	.	Target=Q8BZW4.1 321 333 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263142	45.000000	-	.	Target=Q86XN6-3.2 384 393 +;percentID=80
+chr4-04	SwissProt	protein_match	263113	263151	46.000000	-	.	Target=Q14588.3 397 409 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263151	46.000000	-	.	Target=Q6ZN57.1 295 307 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263148	46.000000	-	.	Target=Q9NZV7.1 326 337 +;percentID=58
+chr4-04	SwissProt	protein_match	263113	263166	46.000000	-	.	Target=P17027.3 412 429 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263151	46.000000	-	.	Target=Q09FC8-5.2 493 505 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263151	46.000000	-	.	Target=Q09FC8-4.2 480 492 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263169	46.000000	-	.	Target=Q15935.2 455 473 +;percentID=42
+chr4-04	SwissProt	protein_match	263113	263166	46.000000	-	.	Target=Q8NB42.1 262 279 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263163	46.000000	-	.	Target=Q8R2V3.2 817 833 +;percentID=41
+chr4-04	SwissProt	protein_match	263113	263166	46.000000	-	.	Target=Q571J5.2 462 479 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263166	46.000000	-	.	Target=Q86WZ6.1 764 781 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263151	46.000000	-	.	Target=Q9NYW8.1 508 520 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263151	46.000000	-	.	Target=Q7TSH9.1 618 630 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263151	46.000000	-	.	Target=Q09FC8-2.2 505 517 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263151	46.000000	-	.	Target=Q09FC8.2 541 553 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263151	46.000000	-	.	Target=Q9P2J8.3 301 313 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263151	46.000000	-	.	Target=Q09FC8-3.2 263 275 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263151	46.000000	-	.	Target=Q9Y6Q3.3 598 610 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263151	46.000000	-	.	Target=Q9Y6Q3-2.3 613 625 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263166	47.000000	-	.	Target=Q96NI8.1 350 367 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263190	47.000000	-	.	Target=Q6ZNG0.1 292 317 +;percentID=42
+chr4-04	SwissProt	protein_match	263113	263190	47.000000	-	.	Target=Q5RB33.1 292 317 +;percentID=42
+chr4-04	SwissProt	protein_match	263113	263190	47.000000	-	.	Target=Q6ZNG0-2.1 178 203 +;percentID=42
+chr4-04	SwissProt	protein_match	263113	263190	47.000000	-	.	Target=Q8N2I2.1 368 393 +;percentID=42
+chr4-04	SwissProt	protein_match	263113	263169	47.000000	-	.	Target=Q96MR9.2 731 749 +;percentID=47
+chr4-04	SwissProt	protein_match	263113	263166	47.000000	-	.	Target=Q9UJW7.2 509 526 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263166	47.000000	-	.	Target=Q2M3X9.1 461 478 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263151	47.000000	-	.	Target=Q06732.2 326 338 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263166	47.000000	-	.	Target=A6NK53.2 472 489 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263169	47.000000	-	.	Target=Q9UC07.2 469 487 +;percentID=42
+chr4-04	SwissProt	protein_match	263113	263169	47.000000	-	.	Target=P0C7V5.1 324 342 +;percentID=47
+chr4-04	SwissProt	protein_match	263113	263151	48.000000	-	.	Target=Q02525.2 546 558 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263148	48.000000	-	.	Target=O60765.2 212 223 +;percentID=66
+chr4-04	SwissProt	protein_match	263113	263148	48.000000	-	.	Target=Q61751.1 182 193 +;percentID=66
+chr4-04	SwissProt	protein_match	263113	263166	48.000000	-	.	Target=Q5RES8.1 255 272 +;percentID=55
+chr4-04	SwissProt	protein_match	263113	263148	48.000000	-	.	Target=Q02975.1 186 197 +;percentID=66
+chr4-04	SwissProt	protein_match	263113	263229	48.000000	-	.	Target=Q8N184-1.3 477 511 +;percentID=35;Gap=M17 D4 M18 
+chr4-04	SwissProt	protein_match	263113	263184	49.000000	-	.	Target=Q86YE8.3 240 263 +;percentID=41
+chr4-04	SwissProt	protein_match	263113	263166	49.000000	-	.	Target=Q06730.3 488 505 +;percentID=55
+chr4-04	SwissProt	protein_match	263113	263166	49.000000	-	.	Target=Q6ECI4-2.2 299 316 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263166	49.000000	-	.	Target=Q6ECI4.2 417 434 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263190	49.000000	-	.	Target=Q3MIS6-2.1 272 297 +;percentID=38
+chr4-04	SwissProt	protein_match	263113	263166	50.000000	-	.	Target=Q96NG5.1 200 217 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263190	50.000000	-	.	Target=Q96JF6.3 608 633 +;percentID=42
+chr4-04	SwissProt	protein_match	263113	263166	50.000000	-	.	Target=Q8N9F8.1 376 393 +;percentID=55
+chr4-04	SwissProt	protein_match	263113	263169	50.000000	-	.	Target=Q8IYI8.1 449 467 +;percentID=47
+chr4-04	SwissProt	protein_match	263113	263190	50.000000	-	.	Target=Q96MU6-2.2 587 612 +;percentID=42
+chr4-04	SwissProt	protein_match	263113	263190	50.000000	-	.	Target=Q96MU6.2 615 640 +;percentID=42
+chr4-04	SwissProt	protein_match	263113	263166	50.000000	-	.	Target=Q8IZ26.2 334 351 +;percentID=55
+chr4-04	SwissProt	protein_match	263113	263151	50.000000	-	.	Target=Q8BQC8.1 311 323 +;percentID=69
+chr4-04	SwissProt	protein_match	263113	263151	50.000000	-	.	Target=Q8BQC8-2.1 310 322 +;percentID=69
+chr4-04	SwissProt	protein_match	263113	263166	50.000000	-	.	Target=A8MYF4.2 318 335 +;percentID=55
+chr4-04	SwissProt	protein_match	263113	263163	50.000000	-	.	Target=O75437.3 203 219 +;percentID=58
+chr4-04	SwissProt	protein_match	263113	263163	50.000000	-	.	Target=O75437-2.3 203 219 +;percentID=58
+chr4-04	SwissProt	protein_match	263113	263166	50.000000	-	.	Target=Q6ZN19-2.1 445 462 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263166	50.000000	-	.	Target=A8MUV8.3 304 321 +;percentID=55
+chr4-04	SwissProt	protein_match	263113	263166	51.000000	-	.	Target=Q9BX82.1 395 412 +;percentID=55
+chr4-04	SwissProt	protein_match	263113	263166	51.000000	-	.	Target=P10076.2 462 479 +;percentID=55
+chr4-04	SwissProt	protein_match	263113	263166	51.000000	-	.	Target=A0JNB1.1 752 769 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263166	52.000000	-	.	Target=Q02386.2 324 341 +;percentID=55
+chr4-04	SwissProt	protein_match	263113	263190	53.000000	-	.	Target=Q86XU0.1 275 300 +;percentID=42
+chr4-04	SwissProt	protein_match	263113	263166	53.000000	-	.	Target=Q5VIY5.1 487 504 +;percentID=55
+chr4-04	SwissProt	protein_match	263113	263166	53.000000	-	.	Target=Q8N988-2.2 200 217 +;percentID=55
+chr4-04	SwissProt	protein_match	263113	263166	53.000000	-	.	Target=Q5VIY5-2.1 434 451 +;percentID=55
+chr4-04	SwissProt	protein_match	263113	263166	53.000000	-	.	Target=Q9UJU3.1 517 534 +;percentID=55
+chr4-04	SwissProt	protein_match	263113	263166	53.000000	-	.	Target=Q8N988.2 193 210 +;percentID=55
+chr4-04	SwissProt	protein_match	263113	263151	53.000000	-	.	Target=Q6N045.2 344 356 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263166	54.000000	-	.	Target=Q8N823.1 418 435 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263166	55.000000	-	.	Target=Q6ZNA1.2 322 339 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263166	55.000000	-	.	Target=Q8N4W9.2 643 660 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263166	55.000000	-	.	Target=Q8N4W9-2.2 574 591 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263187	55.000000	-	.	Target=Q96NJ3.2 441 465 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263187	56.000000	-	.	Target=P17097.1 647 671 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263187	56.000000	-	.	Target=Q5RBX0.1 647 671 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263190	56.000000	-	.	Target=Q8N9Z0.2 244 269 +;percentID=42
+chr4-04	SwissProt	protein_match	263113	263190	56.000000	-	.	Target=Q8N9Z0-2.2 201 226 +;percentID=42
+chr4-04	SwissProt	protein_match	263113	263229	59.000000	-	.	Target=P17035-2.4 613 647 +;percentID=35;Gap=M10 D4 M25 
+chr4-04	SwissProt	protein_match	263113	263223	61.000000	-	.	Target=Q52M93.1 163 195 +;percentID=40;Gap=M20 D4 M13 
+chr4-04	SwissProt	protein_match	263113	263184	62.000000	-	.	Target=Q86Y25.1 230 253 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263190	66.000000	-	.	Target=Q9HBT8.1 422 447 +;percentID=50
+chr4-04	SwissProt	protein_match	263156	263326	90.000000	-	.	Target=Q03936-3.2 469 527 +;percentID=45;Gap=M7 D1 M3 I2 M30 I1 M16 
+chr4-04	SwissProt	protein_match	263156	263326	90.000000	-	.	Target=Q03936.2 501 559 +;percentID=45;Gap=M7 D1 M3 I2 M30 I1 M16 
+chr4-04	SwissProt	protein_match	263156	263326	90.000000	-	.	Target=Q03936-2.2 432 490 +;percentID=45;Gap=M7 D1 M3 I2 M30 I1 M16 
+chr4-04	SwissProt	protein_match	263159	263314	67.000000	-	.	Target=Q96SK3-2.3 261 313 +;percentID=30;Gap=M37 I1 M15 
+chr4-04	SwissProt	protein_match	263165	263320	65.000000	-	.	Target=P17040-2.3 916 968 +;percentID=38;Gap=M31 D2 M6 I3 M13 
+chr4-04	SwissProt	protein_match	263165	263326	71.000000	-	.	Target=Q8IYN0.1 449 504 +;percentID=42;Gap=M7 D1 M3 I2 M30 I1 M13 
+chr4-04	SwissProt	protein_match	263165	263326	74.000000	-	.	Target=A6NK75.3 441 496 +;percentID=42;Gap=M8 I1 M33 I1 M13 
+chr4-04	SwissProt	protein_match	263165	263326	86.000000	-	.	Target=Q9P255.2 413 468 +;percentID=44;Gap=M8 I1 M33 I1 M13 
+chr4-04	SwissProt	protein_match	263174	263302	59.000000	-	.	Target=O75437.3 603 646 +;percentID=43;Gap=M30 I1 M13 
+chr4-04	SwissProt	protein_match	263174	263302	59.000000	-	.	Target=O75437-2.3 295 338 +;percentID=43;Gap=M30 I1 M13 
+chr4-04	SwissProt	protein_match	263174	263353	68.000000	-	.	Target=Q03938.2 160 217 +;percentID=40;Gap=M7 D3 M40 I1 M10 
+chr4-04	SwissProt	protein_match	263192	263347	64.000000	-	.	Target=P52744.2 206 260 +;percentID=40;Gap=M7 I1 M8 I1 M33 I1 M4 
+chr4-04	SwissProt	protein_match	263195	263320	73.000000	-	.	Target=P17038-2.4 751 792 +;percentID=42
+chr4-04	SwissProt	protein_match	263195	263320	73.000000	-	.	Target=P17038.4 757 798 +;percentID=42
+chr4-04	SwissProt	protein_match	263210	263326	54.000000	-	.	Target=P17019.3 524 563 +;percentID=42;Gap=M8 I1 M31 
+chr4-04	SwissProt	protein_match	263210	263320	54.000000	-	.	Target=Q14593-2.3 444 480 +;percentID=40
+chr4-04	SwissProt	protein_match	263210	263320	54.000000	-	.	Target=Q14593.3 509 545 +;percentID=40
+chr4-04	SwissProt	protein_match	263210	263320	59.000000	-	.	Target=Q8N859.1 380 416 +;percentID=40
+chr4-04	SwissProt	protein_match	263210	263326	83.000000	-	.	Target=A6NN14.3 1124 1163 +;percentID=52;Gap=M8 I1 M31 
+chr4-04	SwissProt	protein_match	263216	263314	60.000000	-	.	Target=Q8NEM1.2 487 519 +;percentID=42
+chr4-04	SwissProt	protein_match	263228	263326	40.000000	-	.	Target=Q09FC8-5.2 516 549 +;percentID=40;Gap=M7 D1 M3 I2 M22 
+chr4-04	SwissProt	protein_match	263228	263326	40.000000	-	.	Target=Q09FC8-4.2 503 536 +;percentID=40;Gap=M7 D1 M3 I2 M22 
+chr4-04	SwissProt	protein_match	263228	263326	40.000000	-	.	Target=Q09FC8-2.2 528 561 +;percentID=40;Gap=M7 D1 M3 I2 M22 
+chr4-04	SwissProt	protein_match	263228	263326	40.000000	-	.	Target=Q09FC8.2 564 597 +;percentID=40;Gap=M7 D1 M3 I2 M22 
+chr4-04	SwissProt	protein_match	263228	263326	40.000000	-	.	Target=Q09FC8-3.2 286 319 +;percentID=40;Gap=M7 D1 M3 I2 M22 
+chr4-04	SwissProt	protein_match	263228	263290	41.000000	-	.	Target=P17020.3 662 682 +;percentID=47
+chr4-04	SwissProt	protein_match	263228	263290	41.000000	-	.	Target=A1YF12.1 662 682 +;percentID=47
+chr4-04	SwissProt	protein_match	263228	263290	41.000000	-	.	Target=A2T759.1 662 682 +;percentID=47
+chr4-04	SwissProt	protein_match	263228	263323	41.000000	-	.	Target=A2VDP4.1 386 418 +;percentID=41;Gap=M6 D1 M2 I2 M23 
+chr4-04	SwissProt	protein_match	263228	263293	42.000000	-	.	Target=Q8N184.3 565 586 +;percentID=40
+chr4-04	SwissProt	protein_match	263228	263320	42.000000	-	.	Target=Q02975.1 460 490 +;percentID=41
+chr4-04	SwissProt	protein_match	263228	263347	43.000000	-	.	Target=Q5JVG2.1 425 465 +;percentID=40;Gap=M14 D1 M3 I2 M22 
+chr4-04	SwissProt	protein_match	263228	263293	44.000000	-	.	Target=Q86TJ5.1 384 405 +;percentID=45
+chr4-04	SwissProt	protein_match	263228	263293	44.000000	-	.	Target=Q6ZMY9.1 209 230 +;percentID=45
+chr4-04	SwissProt	protein_match	263228	263290	44.000000	-	.	Target=Q8R0T2.1 490 510 +;percentID=47
+chr4-04	SwissProt	protein_match	263228	263290	44.000000	-	.	Target=Q9H5H4.2 462 482 +;percentID=47
+chr4-04	SwissProt	protein_match	263228	263293	45.000000	-	.	Target=Q14588.3 600 621 +;percentID=45
+chr4-04	SwissProt	protein_match	263228	263356	45.000000	-	.	Target=P51814-6.2 337 380 +;percentID=42;Gap=M17 D1 M3 I2 M22 
+chr4-04	SwissProt	protein_match	263228	263356	45.000000	-	.	Target=P51814.2 379 422 +;percentID=42;Gap=M17 D1 M3 I2 M22 
+chr4-04	SwissProt	protein_match	263228	263356	45.000000	-	.	Target=P51814-5.2 371 414 +;percentID=42;Gap=M17 D1 M3 I2 M22 
+chr4-04	SwissProt	protein_match	263228	263356	45.000000	-	.	Target=P51814-2.2 339 382 +;percentID=42;Gap=M17 D1 M3 I2 M22 
+chr4-04	SwissProt	protein_match	263228	263356	45.000000	-	.	Target=P51814-3.2 347 390 +;percentID=42;Gap=M17 D1 M3 I2 M22 
+chr4-04	SwissProt	protein_match	263228	263356	45.000000	-	.	Target=P51814-7.2 303 346 +;percentID=42;Gap=M17 D1 M3 I2 M22 
+chr4-04	SwissProt	protein_match	263228	263356	45.000000	-	.	Target=P51814-8.2 301 344 +;percentID=42;Gap=M17 D1 M3 I2 M22 
+chr4-04	SwissProt	protein_match	263228	263293	45.000000	-	.	Target=Q8NB42.1 498 519 +;percentID=50
+chr4-04	SwissProt	protein_match	263228	263302	45.000000	-	.	Target=A8MXY4.2 1010 1034 +;percentID=44
+chr4-04	SwissProt	protein_match	263228	263293	45.000000	-	.	Target=Q9XSR1.1 628 649 +;percentID=45
+chr4-04	SwissProt	protein_match	263228	263326	46.000000	-	.	Target=Q61116.1 558 590 +;percentID=42
+chr4-04	SwissProt	protein_match	263228	263323	46.000000	-	.	Target=Q8BI67.1 802 834 +;percentID=47;Gap=M6 D1 M2 I2 M23 
+chr4-04	SwissProt	protein_match	263228	263293	47.000000	-	.	Target=Q5RDX1.1 634 655 +;percentID=50
+chr4-04	SwissProt	protein_match	263228	263293	47.000000	-	.	Target=Q6P3V2.2 666 687 +;percentID=50
+chr4-04	SwissProt	protein_match	263228	263293	47.000000	-	.	Target=Q14587.2 896 917 +;percentID=50
+chr4-04	SwissProt	protein_match	263228	263293	47.000000	-	.	Target=Q5RB30.1 666 687 +;percentID=50
+chr4-04	SwissProt	protein_match	263228	263293	47.000000	-	.	Target=Q52M93.1 666 687 +;percentID=50
+chr4-04	SwissProt	protein_match	263228	263326	49.000000	-	.	Target=Q8R2V3.2 626 659 +;percentID=44;Gap=M8 I1 M25 
+chr4-04	SwissProt	protein_match	263228	263320	50.000000	-	.	Target=Q6V9R5.2 367 397 +;percentID=41
+chr4-04	SwissProt	protein_match	263228	263326	51.000000	-	.	Target=Q9NYT6.2 692 724 +;percentID=42
+chr4-04	SwissProt	protein_match	263228	263356	51.000000	-	.	Target=Q5HY98.1 393 436 +;percentID=42;Gap=M17 D1 M3 I2 M22 
+chr4-04	SwissProt	protein_match	263228	263353	52.000000	-	.	Target=P21506.3 443 486 +;percentID=40;Gap=M12 I1 M4 D1 M3 I2 M22 
+chr4-04	SwissProt	protein_match	263228	263296	52.000000	-	.	Target=Q9UK11.1 347 369 +;percentID=43
+chr4-04	SwissProt	protein_match	263228	263296	52.000000	-	.	Target=Q9UK12.2 316 338 +;percentID=43
+chr4-04	SwissProt	protein_match	263228	263302	55.000000	-	.	Target=Q14586.2 717 741 +;percentID=48
+chr4-04	SwissProt	protein_match	263228	263320	57.000000	-	.	Target=Q96JF6.3 399 429 +;percentID=45
+chr4-04	SwissProt	protein_match	263228	263356	58.000000	-	.	Target=Q6ZN57.1 364 407 +;percentID=40;Gap=M17 D1 M3 I2 M22 
+chr4-04	SwissProt	protein_match	263228	263320	65.000000	-	.	Target=Q5TYW1.2 765 795 +;percentID=48
+chr4-04	SwissProt	protein_match	263234	263290	40.000000	-	.	Target=O95201.2 509 527 +;percentID=42
+chr4-04	SwissProt	protein_match	263234	263290	40.000000	-	.	Target=Q9BS31.1 351 369 +;percentID=47
+chr4-04	SwissProt	protein_match	263234	263317	41.000000	-	.	Target=Q6P560.1 594 622 +;percentID=43;Gap=M4 D1 M3 I2 M20 
+chr4-04	SwissProt	protein_match	263234	263326	42.000000	-	.	Target=O43345.1 1117 1148 +;percentID=40;Gap=M8 I1 M23 
+chr4-04	SwissProt	protein_match	263234	263320	44.000000	-	.	Target=Q3KNS6-2.1 219 247 +;percentID=37
+chr4-04	SwissProt	protein_match	263234	263326	45.000000	-	.	Target=Q08ER8.2 527 558 +;percentID=42;Gap=M7 D1 M3 I2 M20 
+chr4-04	SwissProt	protein_match	263234	263293	45.000000	-	.	Target=Q2TL60.1 333 352 +;percentID=45
+chr4-04	SwissProt	protein_match	263234	263323	49.000000	-	.	Target=Q96SE7.1 786 813 +;percentID=46;Gap=M6 D1 M3 D1 M19 
+chr4-04	SwissProt	protein_match	263234	263326	50.000000	-	.	Target=Q6ZMV8.1 472 503 +;percentID=40;Gap=M8 I1 M23 
+chr4-04	SwissProt	protein_match	263234	263290	52.000000	-	.	Target=Q8TF20.2 886 904 +;percentID=52
+chr4-04	SwissProt	protein_match	263234	263320	55.000000	-	.	Target=Q8N823.1 282 310 +;percentID=44
+chr4-04	SwissProt	protein_match	263234	263326	55.000000	-	.	Target=A6NK31.3 570 600 +;percentID=45
+chr4-04	SwissProt	protein_match	263234	263341	57.000000	-	.	Target=Q5T5D7.1 341 378 +;percentID=43;Gap=M8 I1 M4 D1 M3 I2 M20 
+chr4-04	SwissProt	protein_match	263234	263356	67.000000	-	.	Target=O14628.2 588 629 +;percentID=45;Gap=M18 I1 M23 
+chr4-04	SwissProt	protein_match	263234	263356	67.000000	-	.	Target=O14628-5.2 565 606 +;percentID=45;Gap=M18 I1 M23 
+chr4-04	SwissProt	protein_match	263234	263356	67.000000	-	.	Target=O14628-6.2 569 610 +;percentID=45;Gap=M18 I1 M23 
+chr4-04	SwissProt	protein_match	263234	263356	67.000000	-	.	Target=O14628-4.2 516 557 +;percentID=45;Gap=M18 I1 M23 
+chr4-04	SwissProt	protein_match	263234	263356	67.000000	-	.	Target=O14628-7.2 520 561 +;percentID=45;Gap=M18 I1 M23 
+chr4-04	SwissProt	protein_match	263237	263296	40.000000	-	.	Target=Q8TF32.2 543 562 +;percentID=40
+chr4-04	SwissProt	protein_match	263249	263299	52.000000	-	.	Target=Q9BR84.1 521 537 +;percentID=52
+chr4-04	SwissProt	protein_match	263249	263320	55.000000	-	.	Target=Q86XN6.2 657 679 +;percentID=50;Gap=M20 D1 M3 
+chr4-04	SwissProt	protein_match	263249	263320	55.000000	-	.	Target=Q86XN6-3.2 603 625 +;percentID=50;Gap=M20 D1 M3 
+chr4-04	SwissProt	protein_match	263255	263296	42.000000	-	.	Target=Q8N7K0.1 509 521 +;percentID=57;Gap=M8 D1 M5 
+chr4-04	SwissProt	protein_match	263255	263296	42.000000	-	.	Target=Q8N7K0-2.1 474 486 +;percentID=57;Gap=M8 D1 M5 
+chr4-04	SwissProt	protein_match	263258	263320	40.000000	-	.	Target=Q86T29.1 192 212 +;percentID=42
+chr4-04	SwissProt	protein_match	263258	263293	40.000000	-	.	Target=P17031.3 402 413 +;percentID=58
+chr4-04	SwissProt	protein_match	263258	263320	40.000000	-	.	Target=Q8BZW4-2.1 382 402 +;percentID=42
+chr4-04	SwissProt	protein_match	263258	263320	40.000000	-	.	Target=Q8BZW4.1 403 423 +;percentID=42
+chr4-04	SwissProt	protein_match	263258	263356	41.000000	-	.	Target=Q9Y473.1 401 434 +;percentID=40;Gap=M17 D1 M2 I2 M13 
+chr4-04	SwissProt	protein_match	263258	263320	41.000000	-	.	Target=Q06732-2.2 492 512 +;percentID=47
+chr4-04	SwissProt	protein_match	263258	263320	41.000000	-	.	Target=Q06732.2 604 624 +;percentID=47
+chr4-04	SwissProt	protein_match	263258	263326	41.000000	-	.	Target=Q9BWM5.1 542 565 +;percentID=48;Gap=M7 D1 M3 I2 M12 
+chr4-04	SwissProt	protein_match	263258	263290	41.000000	-	.	Target=Q9BY31.2 642 652 +;percentID=63
+chr4-04	SwissProt	protein_match	263258	263320	42.000000	-	.	Target=Q14591.3 561 581 +;percentID=42
+chr4-04	SwissProt	protein_match	263258	263326	42.000000	-	.	Target=Q7Z340.3 580 602 +;percentID=43
+chr4-04	SwissProt	protein_match	263258	263326	42.000000	-	.	Target=Q8TF45.2 503 526 +;percentID=45;Gap=M19 I1 M4 
+chr4-04	SwissProt	protein_match	263258	263326	42.000000	-	.	Target=Q7Z340-2.3 507 529 +;percentID=43
+chr4-04	SwissProt	protein_match	263258	263320	42.000000	-	.	Target=Q8N4W9.2 646 666 +;percentID=47
+chr4-04	SwissProt	protein_match	263258	263320	42.000000	-	.	Target=Q8N4W9-2.2 577 597 +;percentID=47
+chr4-04	SwissProt	protein_match	263258	263326	42.000000	-	.	Target=Q8TC21.2 271 294 +;percentID=45;Gap=M10 I1 M13 
+chr4-04	SwissProt	protein_match	263258	263326	42.000000	-	.	Target=Q8TC21-2.2 201 224 +;percentID=45;Gap=M10 I1 M13 
+chr4-04	SwissProt	protein_match	263258	263320	43.000000	-	.	Target=P08042-2.3 332 352 +;percentID=47
+chr4-04	SwissProt	protein_match	263258	263320	43.000000	-	.	Target=P08042.3 345 365 +;percentID=47
+chr4-04	SwissProt	protein_match	263258	263290	44.000000	-	.	Target=Q8N988-2.2 213 223 +;percentID=72
+chr4-04	SwissProt	protein_match	263258	263326	44.000000	-	.	Target=Q80YP6.1 432 454 +;percentID=43
+chr4-04	SwissProt	protein_match	263258	263290	44.000000	-	.	Target=Q8N988.2 206 216 +;percentID=72
+chr4-04	SwissProt	protein_match	263258	263326	45.000000	-	.	Target=Q5JVG8.1 389 412 +;percentID=50;Gap=M8 I1 M15 
+chr4-04	SwissProt	protein_match	263258	263320	45.000000	-	.	Target=Q9UC07.2 529 549 +;percentID=47
+chr4-04	SwissProt	protein_match	263258	263320	45.000000	-	.	Target=Q5REI6.1 463 483 +;percentID=42
+chr4-04	SwissProt	protein_match	263258	263293	45.000000	-	.	Target=Q8BQC8.1 652 663 +;percentID=66
+chr4-04	SwissProt	protein_match	263258	263293	45.000000	-	.	Target=Q9NYW8.1 655 666 +;percentID=66
+chr4-04	SwissProt	protein_match	263258	263293	45.000000	-	.	Target=Q8BQC8-2.1 651 662 +;percentID=66
+chr4-04	SwissProt	protein_match	263258	263314	45.000000	-	.	Target=A8MT65.2 345 363 +;percentID=47
+chr4-04	SwissProt	protein_match	263258	263302	46.000000	-	.	Target=Q494X3.1 524 538 +;percentID=53
+chr4-04	SwissProt	protein_match	263258	263320	46.000000	-	.	Target=P59923.1 1001 1021 +;percentID=52
+chr4-04	SwissProt	protein_match	263258	263350	46.000000	-	.	Target=Q3KQV3.2 494 521 +;percentID=45;Gap=M7 D3 M21 
+chr4-04	SwissProt	protein_match	263258	263350	46.000000	-	.	Target=Q3KQV3-2.2 427 454 +;percentID=45;Gap=M7 D3 M21 
+chr4-04	SwissProt	protein_match	263258	263320	47.000000	-	.	Target=Q96NG5.1 287 307 +;percentID=47
+chr4-04	SwissProt	protein_match	263258	263320	47.000000	-	.	Target=Q96JL9.3 445 465 +;percentID=52
+chr4-04	SwissProt	protein_match	263258	263320	47.000000	-	.	Target=P10076.2 297 317 +;percentID=52
+chr4-04	SwissProt	protein_match	263258	263320	47.000000	-	.	Target=Q9Y2H8.1 623 643 +;percentID=52
+chr4-04	SwissProt	protein_match	263258	263347	47.000000	-	.	Target=Q96GC6.1 603 634 +;percentID=37;Gap=M17 I2 M13 
+chr4-04	SwissProt	protein_match	263258	263347	47.000000	-	.	Target=Q96GC6-2.1 571 602 +;percentID=37;Gap=M17 I2 M13 
+chr4-04	SwissProt	protein_match	263258	263347	47.000000	-	.	Target=Q96GC6-4.1 322 353 +;percentID=37;Gap=M17 I2 M13 
+chr4-04	SwissProt	protein_match	263258	263353	48.000000	-	.	Target=P17141.3 433 466 +;percentID=40;Gap=M12 I1 M4 D1 M3 I2 M12 
+chr4-04	SwissProt	protein_match	263258	263320	48.000000	-	.	Target=Q6ZMW2.1 669 689 +;percentID=52
+chr4-04	SwissProt	protein_match	263258	263317	49.000000	-	.	Target=Q8IZ26.2 253 274 +;percentID=52;Gap=M4 D1 M3 I2 M8 I1 M4 
+chr4-04	SwissProt	protein_match	263258	263320	50.000000	-	.	Target=Q5VIY5.1 490 510 +;percentID=52
+chr4-04	SwissProt	protein_match	263258	263320	51.000000	-	.	Target=Q8N9F8.1 491 511 +;percentID=52
+chr4-04	SwissProt	protein_match	263258	263347	51.000000	-	.	Target=P17097.1 647 677 +;percentID=50;Gap=M14 D1 M3 I2 M12 
+chr4-04	SwissProt	protein_match	263258	263347	51.000000	-	.	Target=Q5RBX0.1 647 677 +;percentID=50;Gap=M14 D1 M3 I2 M12 
+chr4-04	SwissProt	protein_match	263258	263326	51.000000	-	.	Target=Q3SY52.1 456 478 +;percentID=47
+chr4-04	SwissProt	protein_match	263258	263326	51.000000	-	.	Target=Q3SY52-2.1 401 423 +;percentID=47
+chr4-04	SwissProt	protein_match	263258	263326	51.000000	-	.	Target=P17035.4 684 706 +;percentID=52
+chr4-04	SwissProt	protein_match	263258	263326	51.000000	-	.	Target=P17035-2.4 631 653 +;percentID=52
+chr4-04	SwissProt	protein_match	263258	263326	51.000000	-	.	Target=Q3SY52-3.1 353 375 +;percentID=47
+chr4-04	SwissProt	protein_match	263258	263353	52.000000	-	.	Target=O88553.1 437 470 +;percentID=41;Gap=M12 I1 M5 I1 M15 
+chr4-04	SwissProt	protein_match	263258	263356	54.000000	-	.	Target=Q15928.1 237 270 +;percentID=41;Gap=M18 I1 M15 
+chr4-04	SwissProt	protein_match	263258	263320	55.000000	-	.	Target=Q5MCW4.1 545 565 +;percentID=52
+chr4-04	SwissProt	protein_match	263258	263320	57.000000	-	.	Target=Q80W31.1 538 558 +;percentID=52
+chr4-04	SwissProt	protein_match	263258	263314	67.000000	-	.	Target=O95780.1 478 496 +;percentID=63
+chr4-04	SwissProt	protein_match	263258	263314	67.000000	-	.	Target=O95780-2.1 402 420 +;percentID=63
+chr4-04	SwissProt	protein_match	263261	263326	40.000000	-	.	Target=P0C7V5.1 353 375 +;percentID=50;Gap=M7 D1 M3 I2 M11 
+chr4-04	SwissProt	protein_match	263261	263302	42.000000	-	.	Target=Q95K52.1 630 643 +;percentID=50
+chr4-04	SwissProt	protein_match	263264	263326	40.000000	-	.	Target=Q12901.3 449 469 +;percentID=42
+chr4-04	SwissProt	protein_match	263264	263320	40.000000	-	.	Target=Q8N972.1 527 544 +;percentID=47;Gap=M16 D1 M2 
+chr4-04	SwissProt	protein_match	263264	263320	40.000000	-	.	Target=Q9QXT9.1 478 495 +;percentID=47;Gap=M15 D1 M3 
+chr4-04	SwissProt	protein_match	263264	263320	40.000000	-	.	Target=Q61751.1 456 473 +;percentID=47;Gap=M15 D1 M3 
+chr4-04	SwissProt	protein_match	263264	263293	40.000000	-	.	Target=O43296.1 431 440 +;percentID=60
+chr4-04	SwissProt	protein_match	263264	263326	41.000000	-	.	Target=Q9UIE0.3 385 405 +;percentID=42
+chr4-04	SwissProt	protein_match	263264	263347	43.000000	-	.	Target=Q9BUY5.1 460 489 +;percentID=40;Gap=M8 I1 M7 I1 M13 
+chr4-04	SwissProt	protein_match	263264	263320	44.000000	-	.	Target=Q9BS34.1 360 377 +;percentID=52;Gap=M16 D1 M2 
+chr4-04	SwissProt	protein_match	263264	263320	44.000000	-	.	Target=A8MUV8.3 447 464 +;percentID=52;Gap=M16 D1 M2 
+chr4-04	SwissProt	protein_match	263264	263356	48.000000	-	.	Target=Q9UK10.2 606 637 +;percentID=43;Gap=M5 I1 M26 
+chr4-04	SwissProt	protein_match	263267	263296	41.000000	-	.	Target=Q0D2J5.2 287 296 +;percentID=60
+chr4-04	SwissProt	protein_match	263270	263323	40.000000	-	.	Target=Q5RBQ3.1 606 624 +;percentID=55;Gap=M6 D1 M3 I2 M8 
+chr4-04	SwissProt	protein_match	263270	263323	40.000000	-	.	Target=Q6P9A3-2.1 593 611 +;percentID=55;Gap=M6 D1 M3 I2 M8 
+chr4-04	SwissProt	protein_match	263270	263323	40.000000	-	.	Target=Q6P9A3.1 606 624 +;percentID=55;Gap=M6 D1 M3 I2 M8 
+chr4-04	SwissProt	protein_match	263270	263320	40.000000	-	.	Target=Q9Y6Q3.3 596 612 +;percentID=47
+chr4-04	SwissProt	protein_match	263270	263320	40.000000	-	.	Target=Q9Y6Q3-2.3 611 627 +;percentID=47
+chr4-04	SwissProt	protein_match	263270	263353	41.000000	-	.	Target=Q6NX49.1 474 503 +;percentID=40;Gap=M12 I1 M5 I1 M11 
+chr4-04	SwissProt	protein_match	263273	263320	40.000000	-	.	Target=Q03924-2.3 412 427 +;percentID=50
+chr4-04	SwissProt	protein_match	263273	263347	40.000000	-	.	Target=Q8R1D1.1 454 480 +;percentID=40;Gap=M8 I1 M7 I1 M10 
+chr4-04	SwissProt	protein_match	263273	263320	41.000000	-	.	Target=A1L1L7.1 300 315 +;percentID=50
+chr4-04	SwissProt	protein_match	263273	263353	42.000000	-	.	Target=Q3KP31.1 312 338 +;percentID=40
+chr4-04	SwissProt	protein_match	263276	263302	41.000000	-	.	Target=Q5REN4.1 242 250 +;percentID=66
+chr4-04	SwissProt	protein_match	263276	263302	41.000000	-	.	Target=Q8NDW4.1 243 251 +;percentID=66
+chr4-04	SwissProt	protein_match	263276	263353	41.000000	-	.	Target=P16374.2 186 210 +;percentID=44;Gap=M4 I1 M5 D2 M15 
+chr4-04	SwissProt	protein_match	263276	263320	41.000000	-	.	Target=Q6N045.2 426 440 +;percentID=46
+chr4-04	SwissProt	protein_match	263276	263299	43.000000	-	.	Target=Q9HCZ1.2 211 218 +;percentID=87
+chr4-04	SwissProt	protein_match	263285	263353	40.000000	-	.	Target=Q5SXM1.1 501 523 +;percentID=43
+chr4-04	SwissProt	protein_match	263659	263700	41.000000	-	.	Target=Q5T5D7.1 156 169 +;percentID=57
+chr4-04	SwissProt	protein_match	263659	263748	58.000000	-	.	Target=A2VDQ7.1 119 148 +;percentID=40
+chr4-04	SwissProt	protein_match	263659	263754	73.000000	-	.	Target=Q6ZMY9.1 184 215 +;percentID=43
+chr4-04	SwissProt	protein_match	263659	263793	73.000000	-	.	Target=Q5HYK9.2 324 368 +;percentID=40
+chr4-04	SwissProt	protein_match	263659	263790	80.000000	-	.	Target=Q60585.2 167 210 +;percentID=40
+chr4-04	SwissProt	protein_match	263659	263796	86.000000	-	.	Target=Q86YE8.3 107 152 +;percentID=40;Gap=M20 I1 M11 D1 M14 
+chr4-04	SwissProt	protein_match	263659	263787	90.000000	-	.	Target=Q8NC26.1 300 342 +;percentID=44
+chr4-04	SwissProt	protein_match	263659	263796	90.000000	-	.	Target=Q6ZMW2.1 555 600 +;percentID=41
+chr4-04	SwissProt	protein_match	263659	263832	92.000000	-	.	Target=Q8N184-1.3 287 344 +;percentID=32
+chr4-04	SwissProt	protein_match	263659	263796	93.000000	-	.	Target=Q9UK13.2 275 320 +;percentID=41
+chr4-04	SwissProt	protein_match	263659	263793	93.000000	-	.	Target=Q96JL9.3 444 488 +;percentID=42
+chr4-04	SwissProt	protein_match	263659	263793	94.000000	-	.	Target=Q7Z3V5.3 552 596 +;percentID=40
+chr4-04	SwissProt	protein_match	263659	263796	94.000000	-	.	Target=Q6ZNA1.2 323 368 +;percentID=43
+chr4-04	SwissProt	protein_match	263659	263805	94.000000	-	.	Target=A6NK31.3 449 500 +;percentID=46;Gap=M44 I3 M5 
+chr4-04	SwissProt	protein_match	263659	263793	95.000000	-	.	Target=Q8NDP4.1 432 476 +;percentID=44
+chr4-04	SwissProt	protein_match	263659	263796	95.000000	-	.	Target=Q9BWM5.1 347 392 +;percentID=41
+chr4-04	SwissProt	protein_match	263659	263796	95.000000	-	.	Target=Q6JLC9.1 153 198 +;percentID=41
+chr4-04	SwissProt	protein_match	263659	263793	97.000000	-	.	Target=Q5R5Q6.1 551 595 +;percentID=42
+chr4-04	SwissProt	protein_match	263659	263796	99.000000	-	.	Target=Q9BX82.1 480 525 +;percentID=43
+chr4-04	SwissProt	protein_match	263659	263808	99.000000	-	.	Target=Q9UK11.1 304 354 +;percentID=41;Gap=M3 I1 M47 
+chr4-04	SwissProt	protein_match	263659	263796	100.000000	-	.	Target=A2RRD8.1 154 199 +;percentID=47
+chr4-04	SwissProt	protein_match	263659	263823	100.000000	-	.	Target=Q9HCG1.2 270 323 +;percentID=40;Gap=M9 D1 M45 
+chr4-04	SwissProt	protein_match	263659	263832	100.000000	-	.	Target=Q8IVC4.1 242 308 +;percentID=40;Gap=M8 I2 M4 I7 M46 
+chr4-04	SwissProt	protein_match	263659	263811	101.000000	-	.	Target=Q9Y6R6.1 741 791 +;percentID=46;Gap=M26 I1 M9 D1 M15 
+chr4-04	SwissProt	protein_match	263659	263796	101.000000	-	.	Target=Q96IR2.2 796 841 +;percentID=45
+chr4-04	SwissProt	protein_match	263659	263793	102.000000	-	.	Target=Q96BR6.2 272 316 +;percentID=44
+chr4-04	SwissProt	protein_match	263659	263832	102.000000	-	.	Target=P17040-2.3 846 903 +;percentID=39
+chr4-04	SwissProt	protein_match	263659	263802	103.000000	-	.	Target=Q9NSJ1.2 326 373 +;percentID=45
+chr4-04	SwissProt	protein_match	263659	263829	104.000000	-	.	Target=Q9UK10.2 579 634 +;percentID=42;Gap=M6 D1 M50 
+chr4-04	SwissProt	protein_match	263659	263802	108.000000	-	.	Target=O88553.1 334 381 +;percentID=43
+chr4-04	SwissProt	protein_match	263659	263826	109.000000	-	.	Target=Q9UC07.2 370 426 +;percentID=42;Gap=M3 I1 M53 
+chr4-04	SwissProt	protein_match	263659	263832	112.000000	-	.	Target=A6NGH9.3 486 543 +;percentID=43
+chr4-04	SwissProt	protein_match	263659	263832	115.000000	-	.	Target=Q8N2I2.1 393 450 +;percentID=41
+chr4-04	SwissProt	protein_match	263659	263832	124.000000	-	.	Target=P10751.2 178 235 +;percentID=42;Gap=M30 I1 M4 D1 M23 
+chr4-04	SwissProt	protein_match	263659	263832	126.000000	-	.	Target=Q8NB42.1 251 308 +;percentID=43
+chr4-04	SwissProt	protein_match	263659	263832	129.000000	-	.	Target=P52744.2 175 232 +;percentID=48
+chr4-04	SwissProt	protein_match	263659	263832	134.000000	-	.	Target=A8MTY0.2 291 348 +;percentID=50
+chr4-04	SwissProt	protein_match	263659	263832	134.000000	-	.	Target=O75346.2 237 294 +;percentID=50
+chr4-04	SwissProt	protein_match	263659	263832	134.000000	-	.	Target=O75346-2.2 161 218 +;percentID=50
+chr4-04	SwissProt	protein_match	263659	263832	139.000000	-	.	Target=Q6ZR52.3 342 399 +;percentID=51
+chr4-04	SwissProt	protein_match	263659	263832	140.000000	-	.	Target=A8MXY4.2 869 926 +;percentID=51
+chr4-04	SwissProt	protein_match	263659	263832	141.000000	-	.	Target=Q03924.3 258 315 +;percentID=50
+chr4-04	SwissProt	protein_match	263659	263832	141.000000	-	.	Target=Q14593-2.3 290 347 +;percentID=50
+chr4-04	SwissProt	protein_match	263659	263832	141.000000	-	.	Target=Q14593.3 355 412 +;percentID=50
+chr4-04	SwissProt	protein_match	263659	263832	155.000000	-	.	Target=O75437.3 499 556 +;percentID=55
+chr4-04	SwissProt	protein_match	263659	263832	155.000000	-	.	Target=P17019.3 233 290 +;percentID=55
+chr4-04	SwissProt	protein_match	263662	263733	45.000000	-	.	Target=Q06730.3 313 337 +;percentID=44;Gap=M5 I1 M19 
+chr4-04	SwissProt	protein_match	263662	263712	47.000000	-	.	Target=P17098.2 250 266 +;percentID=41
+chr4-04	SwissProt	protein_match	263662	263772	61.000000	-	.	Target=Q5MCW4.1 187 223 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263796	75.000000	-	.	Target=Q96GC6.1 500 544 +;percentID=35
+chr4-04	SwissProt	protein_match	263662	263796	75.000000	-	.	Target=Q96GC6-2.1 468 512 +;percentID=35
+chr4-04	SwissProt	protein_match	263662	263796	75.000000	-	.	Target=Q96GC6-4.1 219 263 +;percentID=35
+chr4-04	SwissProt	protein_match	263662	263796	79.000000	-	.	Target=Q8IZ26.2 307 351 +;percentID=43;Gap=M18 I1 M12 D1 M14 
+chr4-04	SwissProt	protein_match	263662	263796	80.000000	-	.	Target=O75123.1 424 468 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263784	83.000000	-	.	Target=Q0VAW7.1 521 561 +;percentID=41
+chr4-04	SwissProt	protein_match	263662	263784	83.000000	-	.	Target=Q0VAW7-2.1 515 555 +;percentID=41
+chr4-04	SwissProt	protein_match	263662	263796	83.000000	-	.	Target=O75290.3 578 622 +;percentID=41;Gap=M18 I1 M12 D1 M14 
+chr4-04	SwissProt	protein_match	263662	263802	84.000000	-	.	Target=P21506.3 257 302 +;percentID=40;Gap=M5 D1 M41 
+chr4-04	SwissProt	protein_match	263662	263820	84.000000	-	.	Target=P51814-6.2 592 644 +;percentID=42;Gap=M29 I1 M9 D1 M14 
+chr4-04	SwissProt	protein_match	263662	263820	84.000000	-	.	Target=P51814.2 634 686 +;percentID=42;Gap=M29 I1 M9 D1 M14 
+chr4-04	SwissProt	protein_match	263662	263820	84.000000	-	.	Target=P51814-5.2 626 678 +;percentID=42;Gap=M29 I1 M9 D1 M14 
+chr4-04	SwissProt	protein_match	263662	263820	84.000000	-	.	Target=P51814-2.2 594 646 +;percentID=42;Gap=M29 I1 M9 D1 M14 
+chr4-04	SwissProt	protein_match	263662	263820	84.000000	-	.	Target=P51814-4.2 506 558 +;percentID=42;Gap=M29 I1 M9 D1 M14 
+chr4-04	SwissProt	protein_match	263662	263820	84.000000	-	.	Target=P51814-3.2 602 654 +;percentID=42;Gap=M29 I1 M9 D1 M14 
+chr4-04	SwissProt	protein_match	263662	263820	84.000000	-	.	Target=P51814-7.2 558 610 +;percentID=42;Gap=M29 I1 M9 D1 M14 
+chr4-04	SwissProt	protein_match	263662	263820	84.000000	-	.	Target=P51814-8.2 556 608 +;percentID=42;Gap=M29 I1 M9 D1 M14 
+chr4-04	SwissProt	protein_match	263662	263802	85.000000	-	.	Target=Q5JVG2.1 375 421 +;percentID=42
+chr4-04	SwissProt	protein_match	263662	263796	85.000000	-	.	Target=Q9Z1D8.1 390 434 +;percentID=41;Gap=M21 I1 M9 D1 M14 
+chr4-04	SwissProt	protein_match	263662	263811	85.000000	-	.	Target=Q8N9F8.1 205 253 +;percentID=40;Gap=M5 D1 M44 
+chr4-04	SwissProt	protein_match	263662	263793	86.000000	-	.	Target=Q15935.2 430 473 +;percentID=46;Gap=M17 I1 M4 D1 M22 
+chr4-04	SwissProt	protein_match	263662	263796	86.000000	-	.	Target=Q9Y2L8.1 395 439 +;percentID=41;Gap=M21 I1 M9 D1 M14 
+chr4-04	SwissProt	protein_match	263662	263796	86.000000	-	.	Target=A2T7D2.1 395 439 +;percentID=41;Gap=M21 I1 M9 D1 M14 
+chr4-04	SwissProt	protein_match	263662	263784	86.000000	-	.	Target=A8MYF4.2 153 193 +;percentID=41
+chr4-04	SwissProt	protein_match	263662	263820	88.000000	-	.	Target=P10755.2 153 205 +;percentID=40;Gap=M29 I1 M9 D1 M14 
+chr4-04	SwissProt	protein_match	263662	263799	88.000000	-	.	Target=P52737.1 188 233 +;percentID=41
+chr4-04	SwissProt	protein_match	263662	263799	88.000000	-	.	Target=Q5REK1.1 188 233 +;percentID=41
+chr4-04	SwissProt	protein_match	263662	263796	88.000000	-	.	Target=Q9NZL3.2 477 521 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263793	89.000000	-	.	Target=Q8N7M2.3 257 300 +;percentID=43
+chr4-04	SwissProt	protein_match	263662	263793	89.000000	-	.	Target=A6NDX5.5 327 370 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263793	89.000000	-	.	Target=Q96H86.2 197 240 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263796	90.000000	-	.	Target=Q9Y2H8.1 593 637 +;percentID=42
+chr4-04	SwissProt	protein_match	263662	263793	90.000000	-	.	Target=Q96PQ6-4.2 271 314 +;percentID=45
+chr4-04	SwissProt	protein_match	263662	263793	90.000000	-	.	Target=Q96PQ6-3.2 239 282 +;percentID=45
+chr4-04	SwissProt	protein_match	263662	263793	90.000000	-	.	Target=Q96PQ6.2 356 399 +;percentID=45
+chr4-04	SwissProt	protein_match	263662	263793	90.000000	-	.	Target=Q96PQ6-2.2 324 367 +;percentID=45
+chr4-04	SwissProt	protein_match	263662	263820	91.000000	-	.	Target=Q5RBX0.1 619 671 +;percentID=41
+chr4-04	SwissProt	protein_match	263662	263796	91.000000	-	.	Target=A0JNB1.1 417 461 +;percentID=42
+chr4-04	SwissProt	protein_match	263662	263793	92.000000	-	.	Target=Q8N7K0.1 556 599 +;percentID=43
+chr4-04	SwissProt	protein_match	263662	263793	92.000000	-	.	Target=Q6N045.2 453 496 +;percentID=43
+chr4-04	SwissProt	protein_match	263662	263793	92.000000	-	.	Target=Q8N7K0-2.1 521 564 +;percentID=43
+chr4-04	SwissProt	protein_match	263662	263796	93.000000	-	.	Target=Q6P1L6.1 402 446 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263796	93.000000	-	.	Target=A6NK53.2 613 657 +;percentID=44
+chr4-04	SwissProt	protein_match	263662	263793	93.000000	-	.	Target=Q86WZ6.1 346 389 +;percentID=43
+chr4-04	SwissProt	protein_match	263662	263796	93.000000	-	.	Target=Q14587.2 409 453 +;percentID=44
+chr4-04	SwissProt	protein_match	263662	263796	93.000000	-	.	Target=Q6P1L6-2.1 312 356 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263796	93.000000	-	.	Target=Q14587-2.2 248 292 +;percentID=44
+chr4-04	SwissProt	protein_match	263662	263832	94.000000	-	.	Target=Q9UK12.2 182 238 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263796	95.000000	-	.	Target=Q06732-2.2 518 562 +;percentID=44
+chr4-04	SwissProt	protein_match	263662	263820	95.000000	-	.	Target=Q9HCL3.2 185 237 +;percentID=42;Gap=M29 I1 M9 D1 M14 
+chr4-04	SwissProt	protein_match	263662	263832	95.000000	-	.	Target=P10076.2 787 843 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263796	95.000000	-	.	Target=Q06732.2 630 674 +;percentID=44
+chr4-04	SwissProt	protein_match	263662	263835	96.000000	-	.	Target=Q96NI8.1 226 283 +;percentID=41
+chr4-04	SwissProt	protein_match	263662	263832	96.000000	-	.	Target=Q96JF6.3 605 661 +;percentID=43;Gap=M33 I1 M9 D1 M14 
+chr4-04	SwissProt	protein_match	263662	263832	97.000000	-	.	Target=Q9Y6Q3.3 442 498 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263832	97.000000	-	.	Target=Q9Y6Q3-2.3 457 513 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263832	98.000000	-	.	Target=P17020.3 330 386 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263832	98.000000	-	.	Target=A1YF12.1 330 386 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263832	98.000000	-	.	Target=A2T759.1 330 386 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263796	98.000000	-	.	Target=A2T812.1 662 706 +;percentID=42
+chr4-04	SwissProt	protein_match	263662	263796	98.000000	-	.	Target=Q9HBT7.1 662 706 +;percentID=42
+chr4-04	SwissProt	protein_match	263662	263793	98.000000	-	.	Target=Q8BPP0.1 226 269 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263832	99.000000	-	.	Target=Q9C0F3.2 203 259 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263832	99.000000	-	.	Target=Q5R5Y7.1 203 259 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263796	99.000000	-	.	Target=Q02525.2 514 558 +;percentID=42
+chr4-04	SwissProt	protein_match	263662	263832	99.000000	-	.	Target=P10078-2.3 386 442 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263832	99.000000	-	.	Target=P10078.3 386 442 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263823	99.000000	-	.	Target=A1YG48.1 454 506 +;percentID=40;Gap=M9 D1 M44 
+chr4-04	SwissProt	protein_match	263662	263823	99.000000	-	.	Target=Q53GI3.2 454 506 +;percentID=40;Gap=M9 D1 M44 
+chr4-04	SwissProt	protein_match	263662	263832	99.000000	-	.	Target=A8MT65.2 413 469 +;percentID=43
+chr4-04	SwissProt	protein_match	263662	263829	100.000000	-	.	Target=Q8N988-2.2 184 245 +;percentID=40;Gap=M9 I6 M47 
+chr4-04	SwissProt	protein_match	263662	263829	100.000000	-	.	Target=O14709.1 381 435 +;percentID=41;Gap=M11 D1 M44 
+chr4-04	SwissProt	protein_match	263662	263829	100.000000	-	.	Target=Q8N988.2 177 238 +;percentID=40;Gap=M9 I6 M47 
+chr4-04	SwissProt	protein_match	263662	263832	101.000000	-	.	Target=Q96MU6-2.2 388 444 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263832	101.000000	-	.	Target=Q96MU6.2 416 472 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263832	101.000000	-	.	Target=Q14590-2.3 520 576 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263832	101.000000	-	.	Target=Q14590.3 524 580 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263832	102.000000	-	.	Target=Q68EA5.3 373 429 +;percentID=42
+chr4-04	SwissProt	protein_match	263662	263796	102.000000	-	.	Target=Q02386.2 493 537 +;percentID=46
+chr4-04	SwissProt	protein_match	263662	263823	102.000000	-	.	Target=Q9XSR1.1 385 437 +;percentID=40;Gap=M9 D1 M44 
+chr4-04	SwissProt	protein_match	263662	263796	103.000000	-	.	Target=Q8R1D1.1 463 507 +;percentID=44
+chr4-04	SwissProt	protein_match	263662	263796	103.000000	-	.	Target=A1L1L7.1 466 510 +;percentID=44
+chr4-04	SwissProt	protein_match	263662	263832	103.000000	-	.	Target=P08042-2.3 291 346 +;percentID=40;Gap=M12 D1 M44 
+chr4-04	SwissProt	protein_match	263662	263832	103.000000	-	.	Target=P08042.3 304 359 +;percentID=40;Gap=M12 D1 M44 
+chr4-04	SwissProt	protein_match	263662	263832	103.000000	-	.	Target=Q96SK3-2.3 133 189 +;percentID=36
+chr4-04	SwissProt	protein_match	263662	263832	105.000000	-	.	Target=P10075.2 248 304 +;percentID=42;sequence=MAALGDIQESPSVPSPVSLSSPGTPGTQHHEPQLHLHGHQHGSPGSSPKVLSQPSDLDLQDVEEVEIGRDTFWPDSEPKPEQAPRSPGSQAPDEGAGGALRSLLRSLPRRARCSAGFGPESSAERPAGQPPGAVPCAQPRGAWRVTLVQQAAAGPEGAPERAAELGVNFGRSRQGSARGAKPHRCEACGKSFKYNSLLLKHQRIHTGEKPYACHECGKRFRGWSGFIQHHRIHTGEKPYECGQCGRAFSHSSHFTQHLRIHNGEKPYKCGECGQAFSQSSNLVRHQRLHTGEKPYACSQCGKAFIWSSVLIEHQRIHTGEKPYECSDCGKAFRGRSHFFRHLRTHTGEKPFACGACGKAFGQSSQLIQHQRVHYRE
+chr4-04	SwissProt	protein_match	263662	263832	106.000000	-	.	Target=Q969W8.1 236 292 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263832	106.000000	-	.	Target=Q9Y473.1 568 624 +;percentID=42
+chr4-04	SwissProt	protein_match	263662	263832	106.000000	-	.	Target=Q8N859.1 310 366 +;percentID=44;Gap=M31 I1 M11 D1 M14 
+chr4-04	SwissProt	protein_match	263662	263796	106.000000	-	.	Target=Q9BUY5.1 469 513 +;percentID=46
+chr4-04	SwissProt	protein_match	263662	263832	106.000000	-	.	Target=Q6J6I6.1 236 292 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263832	107.000000	-	.	Target=Q4R6C2.1 207 263 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263832	107.000000	-	.	Target=Q9UIE0.3 233 289 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263796	108.000000	-	.	Target=Q8TB69.1 285 329 +;percentID=46
+chr4-04	SwissProt	protein_match	263662	263829	108.000000	-	.	Target=Q09FC8-5.2 447 505 +;percentID=41;Gap=M8 I3 M21 I1 M6 D1 M20 
+chr4-04	SwissProt	protein_match	263662	263829	108.000000	-	.	Target=Q09FC8-4.2 434 492 +;percentID=41;Gap=M8 I3 M21 I1 M6 D1 M20 
+chr4-04	SwissProt	protein_match	263662	263805	108.000000	-	.	Target=A8MUP4.2 292 339 +;percentID=50
+chr4-04	SwissProt	protein_match	263662	263796	108.000000	-	.	Target=Q08DG8.1 346 390 +;percentID=48
+chr4-04	SwissProt	protein_match	263662	263829	108.000000	-	.	Target=Q09FC8-2.2 459 517 +;percentID=41;Gap=M8 I3 M21 I1 M6 D1 M20 
+chr4-04	SwissProt	protein_match	263662	263829	108.000000	-	.	Target=Q09FC8.2 495 553 +;percentID=41;Gap=M8 I3 M21 I1 M6 D1 M20 
+chr4-04	SwissProt	protein_match	263662	263829	108.000000	-	.	Target=Q09FC8-3.2 217 275 +;percentID=41;Gap=M8 I3 M21 I1 M6 D1 M20 
+chr4-04	SwissProt	protein_match	263662	263832	108.000000	-	.	Target=Q8TC21.2 400 456 +;percentID=42
+chr4-04	SwissProt	protein_match	263662	263832	108.000000	-	.	Target=Q8TC21-2.2 330 386 +;percentID=42
+chr4-04	SwissProt	protein_match	263662	263811	109.000000	-	.	Target=A2T712.1 404 453 +;percentID=46
+chr4-04	SwissProt	protein_match	263662	263811	109.000000	-	.	Target=A2T7L7.1 404 453 +;percentID=46
+chr4-04	SwissProt	protein_match	263662	263832	109.000000	-	.	Target=P17097.1 422 478 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263796	109.000000	-	.	Target=P52742.2 347 391 +;percentID=48
+chr4-04	SwissProt	protein_match	263662	263832	109.000000	-	.	Target=Q6ZTB9.1 103 159 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263811	110.000000	-	.	Target=Q07231.1 486 535 +;percentID=46
+chr4-04	SwissProt	protein_match	263662	263823	110.000000	-	.	Target=O60765.2 227 279 +;percentID=44;Gap=M9 D1 M44 
+chr4-04	SwissProt	protein_match	263662	263832	110.000000	-	.	Target=Q49A33-2.2 128 184 +;percentID=42
+chr4-04	SwissProt	protein_match	263662	263796	110.000000	-	.	Target=Q96SK3.3 135 179 +;percentID=52;Gap=M26 I1 M3 D1 M15 
+chr4-04	SwissProt	protein_match	263662	263832	110.000000	-	.	Target=Q49A33.3 128 184 +;percentID=42
+chr4-04	SwissProt	protein_match	263662	263832	111.000000	-	.	Target=Q12901.3 381 437 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263823	111.000000	-	.	Target=Q61751.1 197 249 +;percentID=44;Gap=M9 D1 M44 
+chr4-04	SwissProt	protein_match	263662	263823	111.000000	-	.	Target=Q02975.1 201 253 +;percentID=44;Gap=M9 D1 M44 
+chr4-04	SwissProt	protein_match	263662	263832	112.000000	-	.	Target=Q9UC06.2 177 233 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263832	112.000000	-	.	Target=Q8NA42.1 235 291 +;percentID=42
+chr4-04	SwissProt	protein_match	263662	263832	112.000000	-	.	Target=Q96NL3.1 376 432 +;percentID=42
+chr4-04	SwissProt	protein_match	263662	263835	112.000000	-	.	Target=Q2TL60.1 450 507 +;percentID=41
+chr4-04	SwissProt	protein_match	263662	263832	112.000000	-	.	Target=Q96NJ3-2.2 310 366 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263829	113.000000	-	.	Target=Q8NDQ6.1 191 252 +;percentID=41;Gap=M8 I6 M48 
+chr4-04	SwissProt	protein_match	263662	263829	113.000000	-	.	Target=Q8NDQ6-2.1 159 220 +;percentID=41;Gap=M8 I6 M48 
+chr4-04	SwissProt	protein_match	263662	263829	113.000000	-	.	Target=Q5R5S6.1 191 252 +;percentID=41;Gap=M8 I6 M48 
+chr4-04	SwissProt	protein_match	263662	263805	114.000000	-	.	Target=Q14586.2 312 359 +;percentID=45
+chr4-04	SwissProt	protein_match	263662	263823	115.000000	-	.	Target=Q86Y25.1 257 309 +;percentID=46;Gap=M9 D1 M44 
+chr4-04	SwissProt	protein_match	263662	263826	115.000000	-	.	Target=Q8N823.1 634 687 +;percentID=45;Gap=M10 D1 M44 
+chr4-04	SwissProt	protein_match	263662	263832	115.000000	-	.	Target=Q16587.2 340 396 +;percentID=44;Gap=M31 I1 M11 D1 M14 
+chr4-04	SwissProt	protein_match	263662	263832	115.000000	-	.	Target=Q16587-3.2 308 364 +;percentID=44;Gap=M31 I1 M11 D1 M14 
+chr4-04	SwissProt	protein_match	263662	263832	115.000000	-	.	Target=Q16587-4.2 268 324 +;percentID=44;Gap=M31 I1 M11 D1 M14 
+chr4-04	SwissProt	protein_match	263662	263832	115.000000	-	.	Target=Q16587-2.2 269 325 +;percentID=44;Gap=M31 I1 M11 D1 M14 
+chr4-04	SwissProt	protein_match	263662	263832	116.000000	-	.	Target=Q6PG37.1 291 347 +;percentID=42
+chr4-04	SwissProt	protein_match	263662	263832	116.000000	-	.	Target=Q7TNU6.1 211 267 +;percentID=46;Gap=M33 I1 M9 D1 M14 
+chr4-04	SwissProt	protein_match	263662	263832	117.000000	-	.	Target=Q9BS34.1 178 234 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263802	118.000000	-	.	Target=Q8NEM1.2 229 275 +;percentID=53
+chr4-04	SwissProt	protein_match	263662	263832	119.000000	-	.	Target=Q5REF1.1 318 374 +;percentID=42
+chr4-04	SwissProt	protein_match	263662	263832	119.000000	-	.	Target=Q2M3W8.1 274 330 +;percentID=42
+chr4-04	SwissProt	protein_match	263662	263832	119.000000	-	.	Target=Q2M3W8-2.1 210 266 +;percentID=42
+chr4-04	SwissProt	protein_match	263662	263832	120.000000	-	.	Target=Q2KI58.1 273 329 +;percentID=42
+chr4-04	SwissProt	protein_match	263662	263832	124.000000	-	.	Target=Q3KNS6.1 221 277 +;percentID=45
+chr4-04	SwissProt	protein_match	263662	263832	124.000000	-	.	Target=Q3KNS6-2.1 37 93 +;percentID=45
+chr4-04	SwissProt	protein_match	263662	263811	125.000000	-	.	Target=Q9Y2Q1.1 391 440 +;percentID=50
+chr4-04	SwissProt	protein_match	263662	263823	125.000000	-	.	Target=Q5JVG8.1 270 322 +;percentID=48;Gap=M9 D1 M44 
+chr4-04	SwissProt	protein_match	263662	263832	126.000000	-	.	Target=P35789-2.4 462 518 +;percentID=49
+chr4-04	SwissProt	protein_match	263662	263832	126.000000	-	.	Target=P35789-3.4 406 462 +;percentID=49
+chr4-04	SwissProt	protein_match	263662	263832	126.000000	-	.	Target=Q86V71.2 210 266 +;percentID=47
+chr4-04	SwissProt	protein_match	263662	263832	129.000000	-	.	Target=A6NF79.3 473 530 +;percentID=49;Gap=M30 I1 M4 D1 M17 I1 M5 
+chr4-04	SwissProt	protein_match	263662	263832	132.000000	-	.	Target=Q8IYX0.1 305 361 +;percentID=50
+chr4-04	SwissProt	protein_match	263662	263832	133.000000	-	.	Target=P35789.4 434 490 +;percentID=49
+chr4-04	SwissProt	protein_match	263662	263832	137.000000	-	.	Target=Q9H8G1.2 326 382 +;percentID=50
+chr4-04	SwissProt	protein_match	263662	263832	140.000000	-	.	Target=O95780.1 350 406 +;percentID=49
+chr4-04	SwissProt	protein_match	263662	263832	140.000000	-	.	Target=O95780-2.1 274 330 +;percentID=49
+chr4-04	SwissProt	protein_match	263662	263832	141.000000	-	.	Target=Q96N38-2.1 350 406 +;percentID=50
+chr4-04	SwissProt	protein_match	263662	263832	141.000000	-	.	Target=Q96N38.1 350 406 +;percentID=50
+chr4-04	SwissProt	protein_match	263662	263832	141.000000	-	.	Target=Q96N38-3.1 195 251 +;percentID=50
+chr4-04	SwissProt	protein_match	263662	263832	142.000000	-	.	Target=A6NNF4.3 546 602 +;percentID=54
+chr4-04	SwissProt	protein_match	263662	263832	147.000000	-	.	Target=Q8N7Q3.2 206 262 +;percentID=50
+chr4-04	SwissProt	protein_match	263662	263832	150.000000	-	.	Target=Q03936-3.2 374 430 +;percentID=52
+chr4-04	SwissProt	protein_match	263662	263832	150.000000	-	.	Target=Q03936.2 406 462 +;percentID=52
+chr4-04	SwissProt	protein_match	263662	263832	150.000000	-	.	Target=Q03936-2.2 337 393 +;percentID=52
+chr4-04	SwissProt	protein_match	263668	263796	87.000000	-	.	Target=Q9P2J8-2.3 619 661 +;percentID=44
+chr4-04	SwissProt	protein_match	263668	263796	87.000000	-	.	Target=Q9P2J8.3 745 787 +;percentID=44
+chr4-04	SwissProt	protein_match	263668	263832	105.000000	-	.	Target=Q9HCZ1.2 386 440 +;percentID=40
+chr4-04	SwissProt	protein_match	263668	263832	105.000000	-	.	Target=Q5RES8.1 384 438 +;percentID=40
+chr4-04	SwissProt	protein_match	263686	263832	121.000000	-	.	Target=P0CB33.1 362 410 +;percentID=54;Gap=M30 I1 M4 D1 M14 
+chr4-04	SwissProt	protein_match	263689	263811	79.000000	-	.	Target=Q8TF20.2 141 181 +;percentID=43
+chr4-04	SwissProt	protein_match	263698	263832	80.000000	-	.	Target=Q9UL58.1 471 516 +;percentID=41;Gap=M38 I1 M7 
+chr4-04	SwissProt	protein_match	263713	263832	75.000000	-	.	Target=O75437-2.3 303 342 +;percentID=45
+chr4-04	SwissProt	protein_match	263715	263792	74.000000	-	.	Target=Q68DY1.2 503 528 +;percentID=57
+chr4-04	SwissProt	protein_match	263715	263792	74.000000	-	.	Target=Q68DY1-2.2 427 452 +;percentID=57
+chr4-04	SwissProt	protein_match	263716	263832	95.000000	-	.	Target=Q8IYB9.1 601 639 +;percentID=51
+chr4-04	SwissProt	protein_match	263716	263832	107.000000	-	.	Target=Q05481.1 1115 1153 +;percentID=56
+chr4-04	SwissProt	protein_match	263734	263832	63.000000	-	.	Target=A8MWA4.1 267 299 +;percentID=48
+chr4-04	SwissProt	protein_match	263734	263832	69.000000	-	.	Target=Q96H40.3 182 214 +;percentID=48
+chr4-04	SwissProt	protein_match	263734	263832	71.000000	-	.	Target=Q03938.2 182 214 +;percentID=48
+chr4-04	SwissProt	protein_match	263735	263770	40.000000	+	.	Target=Q9P255.2 368 379 +;percentID=75
+chr4-04	SwissProt	protein_match	263735	263770	40.000000	+	.	Target=A6NK75.3 368 379 +;percentID=75
+chr4-04	SwissProt	protein_match	263735	263770	40.000000	+	.	Target=A6NN14.3 1051 1062 +;percentID=75
+chr4-04	SwissProt	protein_match	263735	263770	40.000000	+	.	Target=A6NK21.3 374 385 +;percentID=75
+chr4-04	SwissProt	protein_match	263743	263835	84.000000	-	.	Target=Q03924-2.3 397 427 +;percentID=61
+chr4-04	SwissProt	protein_match	263747	263773	42.000000	+	.	Target=Q6ZMV8.1 235 243 +;percentID=77
+chr4-04	SwissProt	protein_match	263764	263832	63.000000	-	.	Target=Q96JC4.1 502 524 +;percentID=56
+chr4-04	SwissProt	protein_match	263764	263832	63.000000	-	.	Target=A6NKZ1.3 500 522 +;percentID=56
+chr4-04	SwissProt	protein_match	263773	263832	67.000000	-	.	Target=Q03923-2.3 542 561 +;percentID=65
+chr4-04	SwissProt	protein_match	263773	263832	67.000000	-	.	Target=Q03923.3 575 594 +;percentID=65
+chr4-04	SwissProt	protein_match	263776	263832	63.000000	-	.	Target=O75373.2 518 536 +;percentID=57
+chr4-04	SwissProt	protein_match	263829	263879	64.000000	-	.	Target=Q8TF32.2 560 576 +;percentID=64
+chr4-04	SwissProt	protein_match	263831	263947	93.000000	-	.	Target=Q5VIY5-2.1 272 310 +;percentID=46
+chr4-04	SwissProt	protein_match	263831	263947	104.000000	-	.	Target=A2RRD8.1 187 225 +;percentID=51
+chr4-04	SwissProt	protein_match	263831	263947	106.000000	-	.	Target=P17035-2.4 440 478 +;percentID=48
+chr4-04	SwissProt	protein_match	263831	263947	106.000000	-	.	Target=P51522.2 175 213 +;percentID=46
+chr4-04	SwissProt	protein_match	263831	263947	106.000000	-	.	Target=P51522-2.2 15 53 +;percentID=46
+chr4-04	SwissProt	protein_match	263831	263947	106.000000	-	.	Target=Q08AN1.2 211 249 +;percentID=51
+chr4-04	SwissProt	protein_match	263831	263947	107.000000	-	.	Target=Q8N8C0.1 31 69 +;percentID=43
+chr4-04	SwissProt	protein_match	263831	263947	108.000000	-	.	Target=Q09FC8-5.2 354 392 +;percentID=48
+chr4-04	SwissProt	protein_match	263831	263947	108.000000	-	.	Target=Q09FC8-4.2 341 379 +;percentID=48
+chr4-04	SwissProt	protein_match	263831	263947	108.000000	-	.	Target=Q09FC8-2.2 366 404 +;percentID=48
+chr4-04	SwissProt	protein_match	263831	263947	108.000000	-	.	Target=Q09FC8.2 402 440 +;percentID=48
+chr4-04	SwissProt	protein_match	263831	263947	108.000000	-	.	Target=Q09FC8-3.2 124 162 +;percentID=48
+chr4-04	SwissProt	protein_match	263831	263947	110.000000	-	.	Target=Q8N4W9-2.2 216 254 +;percentID=51
+chr4-04	SwissProt	protein_match	263831	263944	112.000000	-	.	Target=Q9UJN7.2 248 285 +;percentID=50
+chr4-04	SwissProt	protein_match	263831	263947	112.000000	-	.	Target=Q9BWM5.1 352 390 +;percentID=48
+chr4-04	SwissProt	protein_match	263831	263947	118.000000	-	.	Target=Q6ZN08.2 385 423 +;percentID=56
+chr4-04	SwissProt	protein_match	263834	263947	90.000000	-	.	Target=Q68EA5.3 502 536 +;percentID=50;Gap=M31 D3 M4 
+chr4-04	SwissProt	protein_match	263834	263947	111.000000	-	.	Target=Q49A33-2.2 61 98 +;percentID=52
+chr4-04	SwissProt	protein_match	263834	263947	111.000000	-	.	Target=Q49A33.3 61 98 +;percentID=52
+chr4-04	SwissProt	protein_match	263834	263947	118.000000	-	.	Target=P17027.3 250 287 +;percentID=52
+chr4-04	SwissProt	protein_match	263837	263944	87.000000	-	.	Target=Q96H86.2 286 321 +;percentID=41
+chr4-04	SwissProt	protein_match	263837	263947	88.000000	-	.	Target=A0JNB1.1 534 570 +;percentID=52;Gap=M13 D1 M6 I1 M17 
+chr4-04	SwissProt	protein_match	263837	263947	89.000000	-	.	Target=P17040-3.3 791 827 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	89.000000	-	.	Target=P17040.3 792 828 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	89.000000	-	.	Target=P17040-2.3 726 762 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	89.000000	-	.	Target=Q4V348.1 360 396 +;percentID=43
+chr4-04	SwissProt	protein_match	263837	263947	90.000000	-	.	Target=Q96CS4.1 231 267 +;percentID=40
+chr4-04	SwissProt	protein_match	263837	263947	91.000000	-	.	Target=B2KFW1-2.2 350 386 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	91.000000	-	.	Target=B2KFW1.2 779 815 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	93.000000	-	.	Target=O95201.2 418 454 +;percentID=45
+chr4-04	SwissProt	protein_match	263837	263944	93.000000	-	.	Target=P18725.2 294 329 +;percentID=47
+chr4-04	SwissProt	protein_match	263837	263944	93.000000	-	.	Target=P18725-2.2 269 304 +;percentID=47
+chr4-04	SwissProt	protein_match	263837	263953	93.000000	-	.	Target=A6NFI3.1 827 865 +;percentID=41
+chr4-04	SwissProt	protein_match	263837	263953	93.000000	-	.	Target=Q6PGE4.1 843 881 +;percentID=41
+chr4-04	SwissProt	protein_match	263837	263947	94.000000	-	.	Target=Q2M3W8-2.1 283 319 +;percentID=45
+chr4-04	SwissProt	protein_match	263837	263947	95.000000	-	.	Target=Q9Y3M9.2 262 298 +;percentID=43
+chr4-04	SwissProt	protein_match	263837	263947	96.000000	-	.	Target=Q86WZ6.1 546 582 +;percentID=55;Gap=M13 D1 M6 I1 M17 
+chr4-04	SwissProt	protein_match	263837	263947	96.000000	-	.	Target=Q16587-4.2 285 321 +;percentID=45
+chr4-04	SwissProt	protein_match	263837	263947	96.000000	-	.	Target=Q16587-2.2 286 322 +;percentID=45
+chr4-04	SwissProt	protein_match	263837	263947	96.000000	-	.	Target=P24399.2 88 124 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	97.000000	-	.	Target=Q5T5D7.1 325 361 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	97.000000	-	.	Target=Q8BI67.1 458 494 +;percentID=52;Gap=M13 D1 M6 I1 M17 
+chr4-04	SwissProt	protein_match	263837	263947	98.000000	-	.	Target=Q8TAF7.2 495 528 +;percentID=51;Gap=M32 D3 M2 
+chr4-04	SwissProt	protein_match	263837	263953	98.000000	-	.	Target=Q6P1L6.1 349 387 +;percentID=46
+chr4-04	SwissProt	protein_match	263837	263947	98.000000	-	.	Target=Q8N587.2 419 455 +;percentID=57;Gap=M12 D1 M7 I1 M17 
+chr4-04	SwissProt	protein_match	263837	263947	98.000000	-	.	Target=Q4R882.1 419 455 +;percentID=57;Gap=M12 D1 M7 I1 M17 
+chr4-04	SwissProt	protein_match	263837	263953	98.000000	-	.	Target=Q6P1L6-2.1 259 297 +;percentID=46
+chr4-04	SwissProt	protein_match	263837	263947	99.000000	-	.	Target=Q569E7.1 431 467 +;percentID=45
+chr4-04	SwissProt	protein_match	263837	263947	99.000000	-	.	Target=Q5TEC3.2 407 443 +;percentID=45
+chr4-04	SwissProt	protein_match	263837	263947	100.000000	-	.	Target=Q8R0T2.1 371 407 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	100.000000	-	.	Target=Q9HCZ1.2 570 606 +;percentID=45
+chr4-04	SwissProt	protein_match	263837	263947	100.000000	-	.	Target=Q5RES8.1 568 604 +;percentID=45
+chr4-04	SwissProt	protein_match	263837	263947	100.000000	-	.	Target=Q7L2R6.2 297 333 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	100.000000	-	.	Target=Q9H5H4.2 343 379 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	100.000000	-	.	Target=Q8TC21.2 417 453 +;percentID=52;Gap=M13 D1 M6 I1 M17 
+chr4-04	SwissProt	protein_match	263837	263947	100.000000	-	.	Target=Q8TC21-2.2 347 383 +;percentID=52;Gap=M13 D1 M6 I1 M17 
+chr4-04	SwissProt	protein_match	263837	263947	101.000000	-	.	Target=Q9Y473.1 557 593 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	101.000000	-	.	Target=Q9Z1D8.1 395 431 +;percentID=45
+chr4-04	SwissProt	protein_match	263837	263947	101.000000	-	.	Target=Q9Y2L8.1 400 436 +;percentID=45
+chr4-04	SwissProt	protein_match	263837	263947	101.000000	-	.	Target=A2T7D2.1 400 436 +;percentID=45
+chr4-04	SwissProt	protein_match	263837	263947	101.000000	-	.	Target=Q9Y2H8.1 458 494 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	101.000000	-	.	Target=Q16587.2 497 533 +;percentID=45
+chr4-04	SwissProt	protein_match	263837	263947	101.000000	-	.	Target=Q16587-3.2 465 501 +;percentID=45
+chr4-04	SwissProt	protein_match	263837	263947	101.000000	-	.	Target=Q8TF45.2 564 597 +;percentID=48;Gap=M12 D3 M22 
+chr4-04	SwissProt	protein_match	263837	263947	101.000000	-	.	Target=Q3SY52-2.1 322 358 +;percentID=43
+chr4-04	SwissProt	protein_match	263837	263947	101.000000	-	.	Target=Q9BY31.2 358 394 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	101.000000	-	.	Target=A0JPL0.1 405 441 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	101.000000	-	.	Target=Q8TAW3.2 339 375 +;percentID=43
+chr4-04	SwissProt	protein_match	263837	263947	101.000000	-	.	Target=Q3SY52-3.1 274 310 +;percentID=43
+chr4-04	SwissProt	protein_match	263837	263947	102.000000	-	.	Target=Q86XN6-2.2 352 388 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	102.000000	-	.	Target=Q96NI8.1 328 364 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	102.000000	-	.	Target=P10754.2 264 300 +;percentID=45
+chr4-04	SwissProt	protein_match	263837	263947	102.000000	-	.	Target=P10754-2.2 257 293 +;percentID=45
+chr4-04	SwissProt	protein_match	263837	263947	102.000000	-	.	Target=Q5RDX1.1 600 636 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	102.000000	-	.	Target=Q6P3V2.2 632 668 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	102.000000	-	.	Target=Q8NB42.1 492 528 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	102.000000	-	.	Target=Q3SY52.1 405 441 +;percentID=43
+chr4-04	SwissProt	protein_match	263837	263947	102.000000	-	.	Target=Q86XN6-3.2 298 334 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	103.000000	-	.	Target=P51814-4.2 463 499 +;percentID=50;Gap=M12 D1 M7 I1 M17 
+chr4-04	SwissProt	protein_match	263837	263947	103.000000	-	.	Target=O14978.2 488 524 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	103.000000	-	.	Target=Q5TYW1.2 880 916 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	103.000000	-	.	Target=Q2KI58.1 290 326 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	103.000000	-	.	Target=Q5REF1.1 335 371 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	103.000000	-	.	Target=Q2M3W8.1 291 327 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	103.000000	-	.	Target=Q3KQV3.2 476 512 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	103.000000	-	.	Target=Q96PQ6-4.2 219 255 +;percentID=45
+chr4-04	SwissProt	protein_match	263837	263947	103.000000	-	.	Target=Q96PQ6-3.2 187 223 +;percentID=45
+chr4-04	SwissProt	protein_match	263837	263947	103.000000	-	.	Target=Q3KQV3-2.2 409 445 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	104.000000	-	.	Target=Q86XN6.2 688 724 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	104.000000	-	.	Target=Q86XU0.1 373 409 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	104.000000	-	.	Target=Q62981.1 325 361 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	104.000000	-	.	Target=P15622.3 225 261 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	104.000000	-	.	Target=P10077-2.2 651 687 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	104.000000	-	.	Target=P15622-2.3 220 256 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	104.000000	-	.	Target=Q9UK10.2 566 602 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263950	104.000000	-	.	Target=Q96N20.1 214 251 +;percentID=47
+chr4-04	SwissProt	protein_match	263837	263953	105.000000	-	.	Target=Q8WV37-2.1 234 272 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	105.000000	-	.	Target=Q9NQZ8.1 296 332 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	105.000000	-	.	Target=Q8N988-2.2 374 410 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	105.000000	-	.	Target=Q02386.2 330 366 +;percentID=57;Gap=M13 D1 M6 I1 M17 
+chr4-04	SwissProt	protein_match	263837	263947	105.000000	-	.	Target=Q9HCX3.1 417 453 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	105.000000	-	.	Target=Q8N988.2 367 403 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	105.000000	-	.	Target=P52738.2 215 251 +;percentID=45
+chr4-04	SwissProt	protein_match	263837	263953	105.000000	-	.	Target=Q8WV37-3.1 142 180 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	105.000000	-	.	Target=Q3KNS6-2.1 82 118 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	106.000000	-	.	Target=Q5RER9.1 325 361 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	106.000000	-	.	Target=P51814-6.2 353 389 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	106.000000	-	.	Target=P51814.2 395 431 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	106.000000	-	.	Target=P51814-5.2 387 423 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	106.000000	-	.	Target=P51814-2.2 355 391 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	106.000000	-	.	Target=P51814-3.2 363 399 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	106.000000	-	.	Target=P51814-7.2 319 355 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	106.000000	-	.	Target=P51814-8.2 317 353 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	106.000000	-	.	Target=Q8N184-2.3 475 511 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	106.000000	-	.	Target=Q9UJW7.2 403 439 +;percentID=55;Gap=M13 D1 M6 I1 M17 
+chr4-04	SwissProt	protein_match	263837	263953	106.000000	-	.	Target=Q9UJW8.2 349 387 +;percentID=46
+chr4-04	SwissProt	protein_match	263837	263947	106.000000	-	.	Target=Q5RB30.1 184 220 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	106.000000	-	.	Target=Q6ZMS4.2 247 283 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	106.000000	-	.	Target=Q8TF39.3 549 585 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263953	106.000000	-	.	Target=Q13398-4.2 285 323 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263953	106.000000	-	.	Target=Q13398.2 281 319 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263953	106.000000	-	.	Target=Q13398-3.2 293 331 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263953	106.000000	-	.	Target=Q13398-6.2 261 299 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263953	106.000000	-	.	Target=Q13398-5.2 220 258 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263953	106.000000	-	.	Target=Q13398-2.2 272 310 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	106.000000	-	.	Target=A2T6E3.1 328 364 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	106.000000	-	.	Target=Q8N184-1.3 444 480 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	107.000000	-	.	Target=Q9NYT6.2 417 453 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	107.000000	-	.	Target=Q8N859.1 299 335 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	107.000000	-	.	Target=Q8NDW4.1 518 554 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	107.000000	-	.	Target=Q7Z340.3 389 425 +;percentID=43
+chr4-04	SwissProt	protein_match	263837	263947	107.000000	-	.	Target=Q9QXT9.1 260 296 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	107.000000	-	.	Target=A2VDP4.1 587 623 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	107.000000	-	.	Target=Q06730.3 410 446 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	107.000000	-	.	Target=Q7Z340-2.3 316 352 +;percentID=43
+chr4-04	SwissProt	protein_match	263837	263947	107.000000	-	.	Target=Q6ZTB9.1 36 72 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	107.000000	-	.	Target=B2RUI1.2 587 623 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	107.000000	-	.	Target=Q9P2J8-2.3 400 436 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	107.000000	-	.	Target=P51786.2 272 308 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	108.000000	-	.	Target=Q9HCG1.2 675 711 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	108.000000	-	.	Target=P10751.2 447 483 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	108.000000	-	.	Target=Q80W31.1 345 381 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	108.000000	-	.	Target=Q9BX82.1 569 605 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	108.000000	-	.	Target=Q96RE9.1 323 359 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	108.000000	-	.	Target=Q6ECI4-2.2 417 453 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	108.000000	-	.	Target=Q8N184.3 587 623 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	108.000000	-	.	Target=Q3KNS6.1 210 246 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	108.000000	-	.	Target=Q96RE9-3.1 339 375 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	108.000000	-	.	Target=Q96RE9-2.1 338 374 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	108.000000	-	.	Target=Q52M93.1 184 220 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	108.000000	-	.	Target=Q9UIE0.3 334 370 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	108.000000	-	.	Target=Q6ECI4.2 535 571 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	109.000000	-	.	Target=Q14588.3 314 350 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	109.000000	-	.	Target=Q86Y25.1 466 502 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	109.000000	-	.	Target=Q5MCW4.1 352 388 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	109.000000	-	.	Target=Q96JL9.3 448 484 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	109.000000	-	.	Target=P10078-2.3 403 439 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	109.000000	-	.	Target=P10078.3 403 439 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	109.000000	-	.	Target=O14709.1 424 460 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	109.000000	-	.	Target=Q61116.1 563 599 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	109.000000	-	.	Target=Q9H7R5.1 279 315 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	109.000000	-	.	Target=Q96NJ6.1 223 259 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	110.000000	-	.	Target=Q6ZR52.3 471 507 +;percentID=60;Gap=M14 D1 M5 I1 M17 
+chr4-04	SwissProt	protein_match	263837	263947	110.000000	-	.	Target=Q8TB69.1 318 354 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	110.000000	-	.	Target=Q9UC06.2 222 258 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	110.000000	-	.	Target=P21506.3 291 327 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	110.000000	-	.	Target=Q7Z3V5.3 528 564 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263953	110.000000	-	.	Target=A2T712.1 356 394 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263953	110.000000	-	.	Target=Q07231.1 438 476 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263953	110.000000	-	.	Target=A2T7L7.1 356 394 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263950	110.000000	-	.	Target=Q95K52.1 292 329 +;percentID=55
+chr4-04	SwissProt	protein_match	263837	263947	110.000000	-	.	Target=Q5R5Q6.1 527 563 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	110.000000	-	.	Target=Q07230.1 388 424 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	110.000000	-	.	Target=Q06732-2.2 299 335 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	110.000000	-	.	Target=Q8TAQ5.1 193 229 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	110.000000	-	.	Target=Q8N9F8.1 326 362 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	110.000000	-	.	Target=Q6AZW8.1 76 112 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	110.000000	-	.	Target=P59923.1 760 796 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	110.000000	-	.	Target=Q06732.2 411 447 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263944	110.000000	-	.	Target=Q8NDP4.1 213 248 +;percentID=55
+chr4-04	SwissProt	protein_match	263837	263947	110.000000	-	.	Target=Q8IYI8.1 226 262 +;percentID=55;Gap=M13 D1 M6 I1 M17 
+chr4-04	SwissProt	protein_match	263837	263947	110.000000	-	.	Target=Q6ZN19.1 675 711 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	110.000000	-	.	Target=A2VDQ7.1 192 228 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263953	110.000000	-	.	Target=Q14590-2.3 451 489 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263953	110.000000	-	.	Target=Q14590.3 455 493 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263950	110.000000	-	.	Target=P17031.3 283 320 +;percentID=50
+chr4-04	SwissProt	protein_match	263837	263947	110.000000	-	.	Target=Q6ZN19-2.1 367 403 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	110.000000	-	.	Target=Q5R8X1.1 279 315 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	110.000000	-	.	Target=P51508.3 356 392 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	111.000000	-	.	Target=Q969W8.1 253 289 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	111.000000	-	.	Target=P17020.3 347 383 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	111.000000	-	.	Target=A1YF12.1 347 383 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	111.000000	-	.	Target=A2T759.1 347 383 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	111.000000	-	.	Target=P17098.2 283 319 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263953	111.000000	-	.	Target=O75123.1 287 325 +;percentID=46
+chr4-04	SwissProt	protein_match	263837	263947	111.000000	-	.	Target=Q8R1D1.1 468 504 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	111.000000	-	.	Target=A1L1L7.1 471 507 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	111.000000	-	.	Target=Q6P9Y7-2.1 334 370 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	111.000000	-	.	Target=Q6P9Y7.1 334 370 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	111.000000	-	.	Target=Q99676.3 528 564 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	111.000000	-	.	Target=A6QLU5.1 529 565 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	111.000000	-	.	Target=Q7TSH9.1 507 543 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	111.000000	-	.	Target=P17035.4 605 641 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	111.000000	-	.	Target=Q6J6I6.1 253 289 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263944	111.000000	-	.	Target=Q9NQX6.1 382 417 +;percentID=58
+chr4-04	SwissProt	protein_match	263837	263944	111.000000	-	.	Target=Q5REA0.1 382 417 +;percentID=58
+chr4-04	SwissProt	protein_match	263837	263947	112.000000	-	.	Target=Q96NL3.1 393 429 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	112.000000	-	.	Target=Q15937.2 219 255 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263944	112.000000	-	.	Target=Q8N7K0.1 197 232 +;percentID=58
+chr4-04	SwissProt	protein_match	263837	263947	112.000000	-	.	Target=Q8TAU3.1 518 554 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	112.000000	-	.	Target=P10075.2 181 217 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	112.000000	-	.	Target=P52737.1 474 510 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	112.000000	-	.	Target=Q5REK1.1 474 510 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263959	112.000000	-	.	Target=Q5R741.1 352 392 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263959	112.000000	-	.	Target=A1YG48.1 352 392 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263959	112.000000	-	.	Target=Q53GI3.2 352 392 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	112.000000	-	.	Target=Q0VAW7.1 634 670 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	112.000000	-	.	Target=Q0VAW7-2.1 628 664 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	112.000000	-	.	Target=A6NF35.2 492 528 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263944	112.000000	-	.	Target=Q8N7K0-2.1 162 197 +;percentID=58
+chr4-04	SwissProt	protein_match	263837	263947	112.000000	-	.	Target=Q5HYK9.2 525 561 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	113.000000	-	.	Target=Q8TAF7-2.2 340 376 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	113.000000	-	.	Target=Q4R6C2.1 308 344 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	113.000000	-	.	Target=Q8NA42.1 308 344 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	113.000000	-	.	Target=Q7Z7L9.1 387 423 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	113.000000	-	.	Target=Q7Z7L9-2.1 368 404 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	113.000000	-	.	Target=Q96SQ5.1 518 554 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263950	113.000000	-	.	Target=Q80YP6.1 352 389 +;percentID=44
+chr4-04	SwissProt	protein_match	263837	263950	113.000000	-	.	Target=Q6V9R5.2 341 378 +;percentID=52
+chr4-04	SwissProt	protein_match	263837	263947	113.000000	-	.	Target=Q9UC07.2 414 450 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	113.000000	-	.	Target=A6NK31.3 345 381 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263950	113.000000	-	.	Target=P0C7V5.1 302 339 +;percentID=52
+chr4-04	SwissProt	protein_match	263837	263950	113.000000	-	.	Target=Q6V9R5-2.2 269 306 +;percentID=52
+chr4-04	SwissProt	protein_match	263837	263947	114.000000	-	.	Target=Q12901.3 370 406 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	114.000000	-	.	Target=Q8NDQ6-4.1 414 450 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	114.000000	-	.	Target=Q15935.2 322 358 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	114.000000	-	.	Target=Q8NDQ6.1 437 473 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	114.000000	-	.	Target=Q8NDQ6-2.1 405 441 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	114.000000	-	.	Target=Q5R5S6.1 437 473 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	114.000000	-	.	Target=P10076.2 804 840 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	114.000000	-	.	Target=Q9BUY5.1 474 510 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	114.000000	-	.	Target=Q96MU6-2.2 405 441 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	114.000000	-	.	Target=Q96MU6.2 433 469 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	114.000000	-	.	Target=Q6ZNA1.2 216 252 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	114.000000	-	.	Target=A8MUP4.2 188 224 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	114.000000	-	.	Target=Q9XSR1.1 398 434 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263950	114.000000	-	.	Target=O75437-2.3 291 328 +;percentID=52
+chr4-04	SwissProt	protein_match	263837	263947	114.000000	-	.	Target=Q9NZL3.2 370 406 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	115.000000	-	.	Target=Q9Y2Q1.1 286 322 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	115.000000	-	.	Target=Q8NEM1.2 404 440 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	115.000000	-	.	Target=Q1LZ87.1 451 487 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	115.000000	-	.	Target=Q96N38-3.1 240 276 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	116.000000	-	.	Target=Q6ZN57.1 184 220 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	116.000000	-	.	Target=O60765.2 268 304 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	116.000000	-	.	Target=Q7TNU6.1 480 516 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	116.000000	-	.	Target=Q96GC6-3.1 484 520 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	116.000000	-	.	Target=Q96N38-2.1 451 487 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	116.000000	-	.	Target=Q96N38.1 451 487 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	116.000000	-	.	Target=Q9NSJ1.2 98 134 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	116.000000	-	.	Target=Q96GC6.1 589 625 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	116.000000	-	.	Target=Q96GC6-2.1 557 593 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	116.000000	-	.	Target=Q96GC6-4.1 308 344 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	117.000000	-	.	Target=O95780.1 395 431 +;percentID=63;Gap=M13 D1 M5 I1 M18 
+chr4-04	SwissProt	protein_match	263837	263947	117.000000	-	.	Target=O95780-2.1 319 355 +;percentID=63;Gap=M13 D1 M5 I1 M18 
+chr4-04	SwissProt	protein_match	263837	263947	117.000000	-	.	Target=Q8N972.1 530 566 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	117.000000	-	.	Target=Q61751.1 238 274 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	117.000000	-	.	Target=Q9UK11.1 342 378 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	117.000000	-	.	Target=Q9UJU3.1 663 699 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	117.000000	-	.	Target=Q02975.1 242 278 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	117.000000	-	.	Target=A6NK75.3 167 203 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	117.000000	-	.	Target=Q9UK12.2 311 347 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	118.000000	-	.	Target=Q96SE7.1 651 687 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	118.000000	-	.	Target=O88553.1 369 405 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	118.000000	-	.	Target=Q2VY69.1 453 489 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	118.000000	-	.	Target=Q9BR84.1 323 359 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	118.000000	-	.	Target=Q3KP31.1 214 250 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	118.000000	-	.	Target=O75373.2 311 347 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	118.000000	-	.	Target=Q96LW9.2 321 357 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263944	118.000000	-	.	Target=Q6JLC9.1 383 418 +;percentID=58
+chr4-04	SwissProt	protein_match	263837	263947	118.000000	-	.	Target=Q96SK3.3 559 595 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	118.000000	-	.	Target=Q96SK3-2.3 234 270 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	119.000000	-	.	Target=Q96JC4.1 435 471 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	119.000000	-	.	Target=Q9HBT8.1 380 416 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	119.000000	-	.	Target=Q32KN0.1 269 305 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263950	119.000000	-	.	Target=Q96MR9.2 373 410 +;percentID=57
+chr4-04	SwissProt	protein_match	263837	263947	119.000000	-	.	Target=A6NF79.3 434 470 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	119.000000	-	.	Target=Q8N7M2.3 401 437 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	119.000000	-	.	Target=Q8BZW4-2.1 301 337 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	119.000000	-	.	Target=Q8BZW4.1 322 358 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	120.000000	-	.	Target=Q96N22.1 407 443 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	120.000000	-	.	Target=A2T812.1 359 395 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	120.000000	-	.	Target=Q9HBT7.1 359 395 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	120.000000	-	.	Target=P17141.3 365 401 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	120.000000	-	.	Target=Q6ZMW2.1 504 540 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	120.000000	-	.	Target=P17097.1 276 312 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	120.000000	-	.	Target=Q5RBX0.1 276 312 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	120.000000	-	.	Target=A6NP11.3 366 402 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	120.000000	-	.	Target=Q96NJ3.2 314 350 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	120.000000	-	.	Target=Q96NJ3-2.2 159 195 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	120.000000	-	.	Target=Q9Y6Q3.3 403 439 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	120.000000	-	.	Target=Q9Y6Q3-2.3 418 454 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	121.000000	-	.	Target=Q5EBM4.1 155 191 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	121.000000	-	.	Target=Q0D2J5.2 254 290 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	121.000000	-	.	Target=O75290.3 499 535 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	121.000000	-	.	Target=Q86UE3.2 775 811 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	122.000000	-	.	Target=Q03936-3.2 335 371 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	122.000000	-	.	Target=Q03936.2 367 403 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	122.000000	-	.	Target=Q03936-2.2 298 334 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	122.000000	-	.	Target=Q8IYN0.1 371 407 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	122.000000	-	.	Target=Q96BR6.2 276 312 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	122.000000	-	.	Target=A8MXY4.2 979 1015 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	122.000000	-	.	Target=O14628.2 548 584 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	122.000000	-	.	Target=O14628-5.2 525 561 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	122.000000	-	.	Target=O14628-6.2 529 565 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	122.000000	-	.	Target=O14628-4.2 476 512 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	122.000000	-	.	Target=O14628-7.2 480 516 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	123.000000	-	.	Target=Q05481.1 292 328 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	123.000000	-	.	Target=A8MTY0.2 224 260 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263953	123.000000	-	.	Target=O75437.3 542 580 +;percentID=58
+chr4-04	SwissProt	protein_match	263837	263947	123.000000	-	.	Target=P17019.3 502 538 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	123.000000	-	.	Target=Q14593-2.3 279 315 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	123.000000	-	.	Target=Q14593.3 344 380 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	124.000000	-	.	Target=P35789-2.4 423 459 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	124.000000	-	.	Target=Q9P255.2 419 455 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263944	124.000000	-	.	Target=Q5JVG8.1 340 375 +;percentID=61
+chr4-04	SwissProt	protein_match	263837	263947	124.000000	-	.	Target=O43345.1 227 263 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	124.000000	-	.	Target=Q14586.2 406 442 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	124.000000	-	.	Target=A6NN14.3 1102 1138 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	124.000000	-	.	Target=A6NKZ1.3 349 385 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	124.000000	-	.	Target=Q8N7Q3.2 531 567 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	124.000000	-	.	Target=Q3ZCT1.3 218 254 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	125.000000	-	.	Target=Q8IYB9.1 562 598 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263953	125.000000	-	.	Target=Q86V71.2 309 347 +;percentID=58
+chr4-04	SwissProt	protein_match	263837	263947	125.000000	-	.	Target=P17038-2.4 530 566 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	125.000000	-	.	Target=P17038.4 536 572 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	126.000000	-	.	Target=P35789.4 395 431 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	126.000000	-	.	Target=P35789-3.4 395 431 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	126.000000	-	.	Target=Q6PG37.1 252 288 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	126.000000	-	.	Target=A6NNF4.3 507 543 +;percentID=62
+chr4-04	SwissProt	protein_match	263837	263953	126.000000	-	.	Target=Q68DY1.2 337 375 +;percentID=58
+chr4-04	SwissProt	protein_match	263837	263953	126.000000	-	.	Target=Q68DY1-2.2 261 299 +;percentID=58
+chr4-04	SwissProt	protein_match	263837	263953	128.000000	-	.	Target=Q8TD23.2 392 430 +;percentID=61
+chr4-04	SwissProt	protein_match	263837	263947	129.000000	-	.	Target=Q9UII5.1 466 502 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	129.000000	-	.	Target=Q5SXM1.1 291 327 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	129.000000	-	.	Target=Q86YE8-3.3 522 558 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	129.000000	-	.	Target=Q86YE8-4.3 493 529 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	129.000000	-	.	Target=Q86YE8-2.3 492 528 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	130.000000	-	.	Target=Q6ZMV8.1 338 374 +;percentID=59
+chr4-04	SwissProt	protein_match	263840	263947	88.000000	-	.	Target=Q92670.2 374 409 +;percentID=44
+chr4-04	SwissProt	protein_match	263840	263947	93.000000	-	.	Target=P51815.2 447 482 +;percentID=47
+chr4-04	SwissProt	protein_match	263840	263947	95.000000	-	.	Target=Q8N9Z0.2 230 265 +;percentID=47
+chr4-04	SwissProt	protein_match	263840	263947	95.000000	-	.	Target=Q8N9Z0-2.2 187 222 +;percentID=47
+chr4-04	SwissProt	protein_match	263840	263947	97.000000	-	.	Target=Q8WTR7.1 429 464 +;percentID=44
+chr4-04	SwissProt	protein_match	263840	263947	98.000000	-	.	Target=Q14591.3 284 319 +;percentID=47
+chr4-04	SwissProt	protein_match	263840	263947	101.000000	-	.	Target=Q5VIY5.1 269 304 +;percentID=52
+chr4-04	SwissProt	protein_match	263840	263947	102.000000	-	.	Target=Q9BS31.1 400 435 +;percentID=50
+chr4-04	SwissProt	protein_match	263840	263947	103.000000	-	.	Target=Q8N2I2.1 354 389 +;percentID=52
+chr4-04	SwissProt	protein_match	263840	263947	104.000000	-	.	Target=Q6ZNG0.1 278 313 +;percentID=52
+chr4-04	SwissProt	protein_match	263840	263947	104.000000	-	.	Target=Q5RB33.1 278 313 +;percentID=52
+chr4-04	SwissProt	protein_match	263840	263947	104.000000	-	.	Target=Q6ZNG0-2.1 164 199 +;percentID=52
+chr4-04	SwissProt	protein_match	263840	263947	104.000000	-	.	Target=Q8N8C0-2.1 59 94 +;percentID=50
+chr4-04	SwissProt	protein_match	263840	263947	105.000000	-	.	Target=Q96IR2.2 717 752 +;percentID=55
+chr4-04	SwissProt	protein_match	263840	263947	105.000000	-	.	Target=Q14587-2.2 421 456 +;percentID=50
+chr4-04	SwissProt	protein_match	263840	263947	106.000000	-	.	Target=Q9NV72.1 296 331 +;percentID=50
+chr4-04	SwissProt	protein_match	263840	263947	106.000000	-	.	Target=Q3MIS6.1 351 386 +;percentID=50
+chr4-04	SwissProt	protein_match	263840	263947	106.000000	-	.	Target=Q3MIS6-2.1 118 153 +;percentID=50
+chr4-04	SwissProt	protein_match	263840	263947	108.000000	-	.	Target=Q02525.2 575 610 +;percentID=52
+chr4-04	SwissProt	protein_match	263840	263947	109.000000	-	.	Target=Q8N8J6-2.2 437 472 +;percentID=52
+chr4-04	SwissProt	protein_match	263840	263947	109.000000	-	.	Target=Q8N8J6.2 426 461 +;percentID=52
+chr4-04	SwissProt	protein_match	263840	263947	109.000000	-	.	Target=Q8N8J6-3.2 437 472 +;percentID=52
+chr4-04	SwissProt	protein_match	263840	263950	111.000000	-	.	Target=Q494X3.1 268 304 +;percentID=51
+chr4-04	SwissProt	protein_match	263840	263947	111.000000	-	.	Target=Q86T29.1 447 482 +;percentID=52
+chr4-04	SwissProt	protein_match	263840	263947	112.000000	-	.	Target=Q571J5.2 244 279 +;percentID=55
+chr4-04	SwissProt	protein_match	263840	263947	114.000000	-	.	Target=Q8IYX0.1 350 385 +;percentID=58
+chr4-04	SwissProt	protein_match	263840	263947	116.000000	-	.	Target=Q60585.2 478 513 +;percentID=52
+chr4-04	SwissProt	protein_match	263840	263947	120.000000	-	.	Target=Q9HCL3.2 478 513 +;percentID=55
+chr4-04	SwissProt	protein_match	263840	263947	120.000000	-	.	Target=P10755.2 446 481 +;percentID=55
+chr4-04	SwissProt	protein_match	263840	263947	122.000000	-	.	Target=Q9H8G1.2 483 518 +;percentID=58
+chr4-04	SwissProt	protein_match	263843	263947	93.000000	-	.	Target=B1APH4.3 353 387 +;percentID=48
+chr4-04	SwissProt	protein_match	263852	263947	98.000000	-	.	Target=P0CB33.1 379 410 +;percentID=56
+chr4-04	SwissProt	protein_match	263864	263947	121.000000	-	.	Target=Q3SXZ3-2.1 417 444 +;percentID=75
+chr4-04	SwissProt	protein_match	263864	263947	121.000000	-	.	Target=Q3SXZ3.1 449 476 +;percentID=75
+chr4-04	SwissProt	protein_match	263867	263947	75.000000	-	.	Target=Q9NZV7.1 354 380 +;percentID=44
+chr4-04	SwissProt	protein_match	263867	263950	77.000000	-	.	Target=A6NDX5.5 232 259 +;percentID=50
+chr4-04	SwissProt	protein_match	263867	263947	78.000000	-	.	Target=A8MYF4.2 460 486 +;percentID=51
+chr4-04	SwissProt	protein_match	263867	263947	78.000000	-	.	Target=Q96PQ6.2 556 582 +;percentID=51
+chr4-04	SwissProt	protein_match	263867	263947	78.000000	-	.	Target=Q96PQ6-2.2 524 550 +;percentID=51
+chr4-04	SwissProt	protein_match	263867	263947	79.000000	-	.	Target=Q96JF6.3 514 540 +;percentID=51
+chr4-04	SwissProt	protein_match	263867	263947	79.000000	-	.	Target=Q5TYW1-2.2 572 598 +;percentID=48
+chr4-04	SwissProt	protein_match	263867	263947	83.000000	-	.	Target=Q9UK13.2 560 586 +;percentID=51
+chr4-04	SwissProt	protein_match	263867	263947	84.000000	-	.	Target=Q08ER8.2 533 559 +;percentID=55
+chr4-04	SwissProt	protein_match	263867	263947	84.000000	-	.	Target=Q03923-2.3 531 557 +;percentID=59
+chr4-04	SwissProt	protein_match	263867	263947	84.000000	-	.	Target=Q03923.3 564 590 +;percentID=59
+chr4-04	SwissProt	protein_match	263867	263947	85.000000	-	.	Target=Q8N823.1 676 702 +;percentID=55
+chr4-04	SwissProt	protein_match	263867	263947	87.000000	-	.	Target=Q5CZA5.2 535 561 +;percentID=55
+chr4-04	SwissProt	protein_match	263867	263947	90.000000	-	.	Target=Q6NX49.1 686 712 +;percentID=51
+chr4-04	SwissProt	protein_match	263867	263947	91.000000	-	.	Target=O43296.1 537 563 +;percentID=59
+chr4-04	SwissProt	protein_match	263867	263947	94.000000	-	.	Target=Q2M3X9.1 551 577 +;percentID=55
+chr4-04	SwissProt	protein_match	263867	263947	96.000000	-	.	Target=P52742.2 632 658 +;percentID=62
+chr4-04	SwissProt	protein_match	263867	263947	99.000000	-	.	Target=Q08DG8.1 631 657 +;percentID=62
+chr4-04	SwissProt	protein_match	263867	263947	101.000000	-	.	Target=A8MUV8.3 450 476 +;percentID=62
+chr4-04	SwissProt	protein_match	263870	263947	78.000000	-	.	Target=Q9C0F3.2 444 469 +;percentID=50
+chr4-04	SwissProt	protein_match	263870	263947	78.000000	-	.	Target=Q5R5Y7.1 444 469 +;percentID=50
+chr4-04	SwissProt	protein_match	263870	263947	79.000000	-	.	Target=Q8BPP0.1 426 451 +;percentID=50
+chr4-04	SwissProt	protein_match	263870	263947	80.000000	-	.	Target=Q9UL58.1 488 513 +;percentID=50
+chr4-04	SwissProt	protein_match	263870	263947	81.000000	-	.	Target=A8MT65.2 514 539 +;percentID=57
+chr4-04	SwissProt	protein_match	263870	263965	83.000000	-	.	Target=Q8IVC4.1 374 405 +;percentID=46
+chr4-04	SwissProt	protein_match	263870	263947	84.000000	-	.	Target=Q6P560.1 597 622 +;percentID=57
+chr4-04	SwissProt	protein_match	263870	263947	85.000000	-	.	Target=P17024.2 504 529 +;percentID=61
+chr4-04	SwissProt	protein_match	263870	263947	92.000000	-	.	Target=Q15928.1 449 474 +;percentID=61
+chr4-04	SwissProt	protein_match	263873	263947	74.000000	-	.	Target=Q8R2V3.2 660 685 +;percentID=53;Gap=M21 I1 M4 
+chr4-04	SwissProt	protein_match	263876	263947	70.000000	-	.	Target=Q5HY98.1 437 460 +;percentID=50
+chr4-04	SwissProt	protein_match	263876	263947	70.000000	-	.	Target=Q14587.2 918 941 +;percentID=54
+chr4-04	SwissProt	protein_match	263876	263947	76.000000	-	.	Target=P52736.2 604 627 +;percentID=50
+chr4-04	SwissProt	protein_match	263876	263947	77.000000	-	.	Target=Q8NC26.1 386 409 +;percentID=58
+chr4-04	SwissProt	protein_match	263879	263947	67.000000	-	.	Target=Q96NG5.1 374 396 +;percentID=52
+chr4-04	SwissProt	protein_match	263879	263947	67.000000	-	.	Target=Q6ZMY9.1 315 337 +;percentID=52
+chr4-04	SwissProt	protein_match	263879	263947	67.000000	-	.	Target=P08042-2.3 363 385 +;percentID=52
+chr4-04	SwissProt	protein_match	263879	263947	67.000000	-	.	Target=P08042.3 376 398 +;percentID=52
+chr4-04	SwissProt	protein_match	263879	263947	69.000000	-	.	Target=Q5RBQ3.1 611 633 +;percentID=47
+chr4-04	SwissProt	protein_match	263879	263947	69.000000	-	.	Target=Q6P9A3-2.1 598 620 +;percentID=47
+chr4-04	SwissProt	protein_match	263879	263947	69.000000	-	.	Target=Q6P9A3.1 611 633 +;percentID=47
+chr4-04	SwissProt	protein_match	263879	263947	72.000000	-	.	Target=Q86YE8.3 616 638 +;percentID=62;Gap=M13 D1 M6 I1 M3 
+chr4-04	SwissProt	protein_match	263879	263947	73.000000	-	.	Target=Q5REN4.1 545 567 +;percentID=52
+chr4-04	SwissProt	protein_match	263879	263947	74.000000	-	.	Target=Q6P9A1.2 573 595 +;percentID=47
+chr4-04	SwissProt	protein_match	263879	263947	75.000000	-	.	Target=Q5R4K8.2 705 727 +;percentID=56
+chr4-04	SwissProt	protein_match	263879	263947	77.000000	-	.	Target=Q9Y6R6.1 779 801 +;percentID=52
+chr4-04	SwissProt	protein_match	263879	263947	78.000000	-	.	Target=P10077.2 343 365 +;percentID=60
+chr4-04	SwissProt	protein_match	263879	263947	78.000000	-	.	Target=Q5REI6.1 550 572 +;percentID=60
+chr4-04	SwissProt	protein_match	263879	263947	78.000000	-	.	Target=Q8IZ26.2 508 530 +;percentID=56
+chr4-04	SwissProt	protein_match	263879	263947	79.000000	-	.	Target=Q13106.3 411 433 +;percentID=56
+chr4-04	SwissProt	protein_match	263879	263947	80.000000	-	.	Target=Q9P2J8.3 834 856 +;percentID=60
+chr4-04	SwissProt	protein_match	263879	263947	81.000000	-	.	Target=O75346.2 450 472 +;percentID=60
+chr4-04	SwissProt	protein_match	263879	263947	81.000000	-	.	Target=O75346-2.2 374 396 +;percentID=60
+chr4-04	SwissProt	protein_match	263879	263947	86.000000	-	.	Target=Q9BS34.1 363 385 +;percentID=65
+chr4-04	SwissProt	protein_match	263882	263947	67.000000	-	.	Target=Q03924.3 359 379 +;percentID=59;Gap=M11 D1 M10 
+chr4-04	SwissProt	protein_match	263882	263947	72.000000	-	.	Target=Q8N4W9.2 873 894 +;percentID=54
+chr4-04	SwissProt	protein_match	263882	263947	73.000000	-	.	Target=Q2TL60.1 580 601 +;percentID=50
+chr4-04	SwissProt	protein_match	263885	263947	66.000000	-	.	Target=Q6N045.2 513 533 +;percentID=57
+chr4-04	SwissProt	protein_match	263885	263947	70.000000	-	.	Target=Q8WV37.1 490 510 +;percentID=57
+chr4-04	SwissProt	protein_match	263888	263944	48.000000	-	.	Target=P16374.2 679 696 +;percentID=52;Gap=M12 D1 M6 
+chr4-04	SwissProt	protein_match	263894	263938	44.000000	-	.	Target=Q03938.2 202 216 +;percentID=53
+chr4-04	SwissProt	protein_match	263894	263947	49.000000	-	.	Target=A8K971.2 282 299 +;percentID=55
+chr4-04	SwissProt	protein_match	263894	263947	54.000000	-	.	Target=Q2TAN0.1 282 299 +;percentID=55
+chr4-04	SwissProt	protein_match	263894	263947	54.000000	-	.	Target=A8MVS1.1 282 299 +;percentID=55
+chr4-04	SwissProt	protein_match	263894	263947	54.000000	-	.	Target=Q6ZN79.1 282 299 +;percentID=55
+chr4-04	SwissProt	protein_match	263894	263947	54.000000	-	.	Target=A8MWA4.1 284 301 +;percentID=55
+chr4-04	SwissProt	protein_match	263894	263947	55.000000	-	.	Target=A8MUZ8.2 282 299 +;percentID=55
+chr4-04	SwissProt	protein_match	263894	263947	63.000000	-	.	Target=Q96H40.3 199 216 +;percentID=61
+chr4-04	SwissProt	protein_match	263906	263947	62.000000	-	.	Target=P52744.2 248 261 +;percentID=71
+chr4-04	SwissProt	protein_match	263912	263947	40.000000	-	.	Target=Q9NYW8.1 161 172 +;percentID=50
+chr4-04	SwissProt	protein_match	263912	263947	41.000000	-	.	Target=Q86TJ5.1 518 529 +;percentID=66
+chr4-04	SwissProt	protein_match	263912	263968	48.000000	-	.	Target=Q8BQC8.1 154 171 +;percentID=52;Gap=M6 D1 M12 
+chr4-04	SwissProt	protein_match	263912	263968	48.000000	-	.	Target=Q8BQC8-2.1 153 170 +;percentID=52;Gap=M6 D1 M12 
+chr4-04	SwissProt	protein_match	263912	263947	50.000000	-	.	Target=Q6ZN06.2 605 616 +;percentID=75
+chr4-04	SwissProt	protein_match	263912	263947	50.000000	-	.	Target=Q2M218.1 625 636 +;percentID=66
+chr4-04	SwissProt	protein_match	263912	263947	52.000000	-	.	Target=Q03924-2.3 415 426 +;percentID=75
+chr4-04	SwissProt	protein_match	263912	263947	53.000000	-	.	Target=A6NK53.2 646 657 +;percentID=75
+chr4-04	SwissProt	protein_match	263912	263947	56.000000	-	.	Target=A6NGH9.3 587 598 +;percentID=75
+chr4-04	SwissProt	protein_match	263918	263947	40.000000	-	.	Target=Q5JVG2.1 174 183 +;percentID=50
+chr4-04	SwissProt	protein_match	263918	263941	40.000000	-	.	Target=A6NK21.3 539 546 +;percentID=75
+chr4-04	SwissProt	protein_match	263934	263966	43.000000	-	.	Target=Q8TF20.2 901 911 +;percentID=81
+chr4-04	SwissProt	protein_match	266085	266132	42.000000	-	.	Target=Q9UJW7.2 354 369 +;percentID=56
+chr4-04	SwissProt	protein_match	266085	266138	59.000000	-	.	Target=Q6V9R5.2 207 224 +;percentID=55
+chr4-04	SwissProt	protein_match	266085	266138	59.000000	-	.	Target=Q4R882.1 200 217 +;percentID=55
+chr4-04	SwissProt	protein_match	266085	266156	63.000000	-	.	Target=P59923.1 835 860 +;percentID=50;Gap=M6 I2 M18 
+chr4-04	SwissProt	protein_match	266085	266159	66.000000	-	.	Target=P17031.3 336 362 +;percentID=48;Gap=M8 I2 M17 
+chr4-04	SwissProt	protein_match	266085	266159	73.000000	-	.	Target=Q9BY31.2 742 768 +;percentID=55;Gap=M8 I2 M17 
+chr4-04	SwissProt	protein_match	266085	266231	87.000000	-	.	Target=Q6AZW8.1 76 126 +;percentID=45;Gap=M31 I2 M18 
+chr4-04	SwissProt	protein_match	266085	266231	91.000000	-	.	Target=Q60585.2 366 416 +;percentID=44;Gap=M14 I1 M9 D1 M7 I2 M18 
+chr4-04	SwissProt	protein_match	266085	266231	93.000000	-	.	Target=Q7Z7L9.1 303 353 +;percentID=47;Gap=M32 I2 M17 
+chr4-04	SwissProt	protein_match	266085	266231	93.000000	-	.	Target=Q7Z7L9-2.1 284 334 +;percentID=47;Gap=M32 I2 M17 
+chr4-04	SwissProt	protein_match	266085	266231	93.000000	-	.	Target=Q07230.1 304 354 +;percentID=47;Gap=M32 I2 M17 
+chr4-04	SwissProt	protein_match	266085	266231	95.000000	-	.	Target=Q14587-2.2 253 303 +;percentID=43;Gap=M31 I2 M18 
+chr4-04	SwissProt	protein_match	266085	266219	97.000000	-	.	Target=A1YF12.1 463 509 +;percentID=46;Gap=M28 I2 M17 
+chr4-04	SwissProt	protein_match	266085	266219	98.000000	-	.	Target=P17020.3 463 509 +;percentID=48;Gap=M28 I2 M17 
+chr4-04	SwissProt	protein_match	266085	266219	98.000000	-	.	Target=A2T759.1 463 509 +;percentID=48;Gap=M28 I2 M17 
+chr4-04	SwissProt	protein_match	266085	266420	415.000000	-	.	Target=Q8IYB9.1 76 192 +;percentID=72;Gap=M44 I4 M51 I2 M7 D1 M9 
+chr4-04	SwissProt	protein_match	266085	266417	479.000000	-	.	Target=Q8TF20.2 1 117 +;percentID=77;Gap=M43 I4 M51 I2 M17 
+chr4-04	SwissProt	protein_match	266087	266137	41.000000	-	.	Target=A8MUV8.3 483 499 +;percentID=58
+chr4-04	SwissProt	protein_match	266088	266144	43.000000	-	.	Target=Q8R2V3.2 554 572 +;percentID=42
+chr4-04	SwissProt	protein_match	266088	266132	43.000000	-	.	Target=Q8TAW3.2 197 211 +;percentID=53
+chr4-04	SwissProt	protein_match	266088	266150	44.000000	-	.	Target=O43296.1 200 222 +;percentID=47;Gap=M5 I2 M16 
+chr4-04	SwissProt	protein_match	266088	266135	46.000000	-	.	Target=Q96NL3.1 203 218 +;percentID=56
+chr4-04	SwissProt	protein_match	266088	266132	46.000000	-	.	Target=O14978.2 383 397 +;percentID=53
+chr4-04	SwissProt	protein_match	266088	266153	46.000000	-	.	Target=Q80YP6.1 211 234 +;percentID=48;Gap=M6 I2 M7 I1 M3 D1 M5 
+chr4-04	SwissProt	protein_match	266088	266138	47.000000	-	.	Target=P10751.2 60 76 +;percentID=52
+chr4-04	SwissProt	protein_match	266088	266147	51.000000	-	.	Target=Q8NDQ6-4.1 163 183 +;percentID=52;Gap=M2 I1 M18 
+chr4-04	SwissProt	protein_match	266088	266147	51.000000	-	.	Target=Q8NDQ6.1 186 206 +;percentID=52;Gap=M2 I1 M18 
+chr4-04	SwissProt	protein_match	266088	266147	51.000000	-	.	Target=Q8NDQ6-2.1 154 174 +;percentID=52;Gap=M2 I1 M18 
+chr4-04	SwissProt	protein_match	266088	266135	52.000000	-	.	Target=Q7TNU6.1 178 193 +;percentID=62
+chr4-04	SwissProt	protein_match	266088	266159	53.000000	-	.	Target=Q9Y473.1 329 354 +;percentID=50;Gap=M7 I2 M17 
+chr4-04	SwissProt	protein_match	266088	266156	53.000000	-	.	Target=A1L1L7.1 217 241 +;percentID=52;Gap=M7 I2 M16 
+chr4-04	SwissProt	protein_match	266088	266174	53.000000	-	.	Target=P17035.4 204 234 +;percentID=48;Gap=M13 I2 M16 
+chr4-04	SwissProt	protein_match	266088	266174	53.000000	-	.	Target=P17035-2.4 151 181 +;percentID=48;Gap=M13 I2 M16 
+chr4-04	SwissProt	protein_match	266088	266156	54.000000	-	.	Target=Q8R1D1.1 214 238 +;percentID=52;Gap=M7 I2 M16 
+chr4-04	SwissProt	protein_match	266088	266159	54.000000	-	.	Target=Q3SY52.1 233 258 +;percentID=48;Gap=M8 I2 M7 I1 M3 D1 M5 
+chr4-04	SwissProt	protein_match	266088	266159	54.000000	-	.	Target=Q3SY52-2.1 178 203 +;percentID=48;Gap=M8 I2 M7 I1 M3 D1 M5 
+chr4-04	SwissProt	protein_match	266088	266159	54.000000	-	.	Target=Q3SY52-3.1 130 155 +;percentID=48;Gap=M8 I2 M7 I1 M3 D1 M5 
+chr4-04	SwissProt	protein_match	266088	266159	55.000000	-	.	Target=Q9NYT6.2 302 326 +;percentID=48;Gap=M5 I1 M19 
+chr4-04	SwissProt	protein_match	266088	266159	55.000000	-	.	Target=Q86YE8.3 304 329 +;percentID=46;Gap=M7 I2 M17 
+chr4-04	SwissProt	protein_match	266088	266159	56.000000	-	.	Target=P17024.2 221 246 +;percentID=42;Gap=M8 I2 M16 
+chr4-04	SwissProt	protein_match	266088	266153	58.000000	-	.	Target=A2T712.1 273 296 +;percentID=45;Gap=M5 I2 M17 
+chr4-04	SwissProt	protein_match	266088	266153	58.000000	-	.	Target=A2T7L7.1 273 296 +;percentID=45;Gap=M5 I2 M17 
+chr4-04	SwissProt	protein_match	266088	266159	58.000000	-	.	Target=Q8N859.1 242 264 +;percentID=54;Gap=M6 D1 M17 
+chr4-04	SwissProt	protein_match	266088	266159	58.000000	-	.	Target=Q9UK13.2 220 245 +;percentID=50;Gap=M8 I2 M16 
+chr4-04	SwissProt	protein_match	266088	266159	58.000000	-	.	Target=P10077-2.2 591 616 +;percentID=50;Gap=M5 I1 M2 I1 M17 
+chr4-04	SwissProt	protein_match	266088	266159	58.000000	-	.	Target=Q9UIE0.3 162 187 +;percentID=57;Gap=M5 I1 M2 I1 M17 
+chr4-04	SwissProt	protein_match	266088	266159	59.000000	-	.	Target=P52736.2 292 317 +;percentID=46;Gap=M7 I2 M17 
+chr4-04	SwissProt	protein_match	266088	266159	59.000000	-	.	Target=Q5R4K8.2 365 390 +;percentID=50;Gap=M7 I2 M17 
+chr4-04	SwissProt	protein_match	266088	266168	59.000000	-	.	Target=Q52M93.1 429 457 +;percentID=48;Gap=M11 I2 M16 
+chr4-04	SwissProt	protein_match	266088	266153	60.000000	-	.	Target=Q5TYW1.2 514 537 +;percentID=54;Gap=M6 I2 M16 
+chr4-04	SwissProt	protein_match	266088	266195	60.000000	-	.	Target=Q5R741.1 343 377 +;percentID=42;Gap=M6 D1 M6 D2 M5 I2 M16 
+chr4-04	SwissProt	protein_match	266088	266153	61.000000	-	.	Target=Q07231.1 355 378 +;percentID=50;Gap=M5 I2 M17 
+chr4-04	SwissProt	protein_match	266088	266159	61.000000	-	.	Target=Q8WTR7.1 314 339 +;percentID=46;Gap=M8 I2 M16 
+chr4-04	SwissProt	protein_match	266088	266171	61.000000	-	.	Target=P10077.2 336 364 +;percentID=53;Gap=M3 D1 M8 I2 M16 
+chr4-04	SwissProt	protein_match	266088	266159	61.000000	-	.	Target=Q9BWM5.1 264 289 +;percentID=46;Gap=M8 I2 M16 
+chr4-04	SwissProt	protein_match	266088	266159	61.000000	-	.	Target=Q6PGE4.1 446 471 +;percentID=46;Gap=M8 I2 M16 
+chr4-04	SwissProt	protein_match	266088	266159	62.000000	-	.	Target=A6NFI3.1 451 476 +;percentID=46;Gap=M7 I2 M17 
+chr4-04	SwissProt	protein_match	266088	266162	62.000000	-	.	Target=Q9NQX6.1 124 150 +;percentID=48;Gap=M8 I2 M17 
+chr4-04	SwissProt	protein_match	266088	266162	62.000000	-	.	Target=Q5REA0.1 124 150 +;percentID=48;Gap=M8 I2 M17 
+chr4-04	SwissProt	protein_match	266088	266153	62.000000	-	.	Target=A2T6E3.1 270 293 +;percentID=50;Gap=M5 I2 M17 
+chr4-04	SwissProt	protein_match	266088	266159	64.000000	-	.	Target=Q9C0F3.2 132 157 +;percentID=46;Gap=M7 I2 M17 
+chr4-04	SwissProt	protein_match	266088	266159	64.000000	-	.	Target=Q5R5Y7.1 132 157 +;percentID=46;Gap=M7 I2 M17 
+chr4-04	SwissProt	protein_match	266088	266174	64.000000	-	.	Target=Q5EBM4.1 6 36 +;percentID=45;Gap=M13 I2 M16 
+chr4-04	SwissProt	protein_match	266088	266231	64.000000	-	.	Target=Q5TYW1-2.2 438 485 +;percentID=41;Gap=M17 I1 M6 D1 M9 I2 M6 D2 M7 
+chr4-04	SwissProt	protein_match	266088	266150	64.000000	-	.	Target=Q96N20.1 158 180 +;percentID=60;Gap=M5 I2 M16 
+chr4-04	SwissProt	protein_match	266088	266168	65.000000	-	.	Target=Q5HY98.1 235 262 +;percentID=51;Gap=M3 D1 M7 I2 M16 
+chr4-04	SwissProt	protein_match	266088	266159	65.000000	-	.	Target=Q5RDX1.1 148 173 +;percentID=57;Gap=M8 I2 M16 
+chr4-04	SwissProt	protein_match	266088	266159	65.000000	-	.	Target=Q6P3V2.2 180 205 +;percentID=57;Gap=M8 I2 M16 
+chr4-04	SwissProt	protein_match	266088	266231	65.000000	-	.	Target=Q9BS31.1 288 337 +;percentID=40;Gap=M29 I1 M2 I1 M17 
+chr4-04	known_cds	mRNA	264464	299110	.	-	.	ID=transcript1;Name=Z95704.2-001
+chr4-04	known_cds	exon	264464	266419	.	-	.	Parent=transcript1
+chr4-04	known_cds	CDS	264888	266419	.	-	2	Parent=transcript1
+chr4-04	known_cds	exon	289227	289322	.	-	.	Parent=transcript1
+chr4-04	known_cds	CDS	289227	289322	.	-	2	Parent=transcript1
+chr4-04	known_cds	exon	289818	289944	.	-	.	Parent=transcript1
+chr4-04	known_cds	CDS	289818	289944	.	-	0	Parent=transcript1
+chr4-04	known_cds	exon	299097	299110	.	-	.	Parent=transcript1
+chr4-04	known_cds	CDS	299097	299099	.	-	0	Parent=transcript1
+chr4-04	ensembl_variation	SNP	358038	358038	.	+	.	Name=rs112781035;variant_sequence=T/C;
+chr4-04	ensembl_variation	insertion	263638	263639	.	+	.	Name=rs111682324;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	358053	358053	.	+	.	Name=rs111267637;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	263649	263649	.	+	.	Name=rs115291458;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	358455	358455	.	+	.	Name=rs6831791;variant_sequence=G/A;
+chr4-04	ensembl_variation	deletion	263651	263652	.	+	.	Name=rs71654578;variant_sequence=AG/-;
+chr4-04	ensembl_variation	SNP	358456	358456	.	+	.	Name=rs79147894;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	263652	263652	.	+	.	Name=rs78782155;variant_sequence=G/A;
+chr4-04	ensembl_variation	insertion	358665	358666	.	+	.	Name=rs72598754;variant_sequence=-/G;
+chr4-04	ensembl_variation	SNP	263804	263804	.	+	.	Name=rs114544910;variant_sequence=C/T;
+chr4-04	ensembl_variation	insertion	358666	358667	.	+	.	Name=rs35953653;variant_sequence=-/G;
+chr4-04	ensembl_variation	SNP	263916	263916	.	+	.	Name=rs116247731;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	358879	358879	.	+	.	Name=rs60333530;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	263969	263969	.	+	.	Name=rs115321593;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	358932	358932	.	+	.	Name=rs56733551;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	263970	263970	.	+	.	Name=rs116766523;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	358988	358988	.	+	.	Name=rs59182798;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	264216	264216	.	+	.	Name=rs13110246;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	359013	359013	.	+	.	Name=rs114311518;variant_sequence=G/C;
+chr4-04	ensembl_variation	insertion	264240	264241	.	+	.	Name=rs71654579;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	359201	359201	.	+	.	Name=rs58835461;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	264241	264241	.	+	.	Name=rs118069740;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	359301	359301	.	+	.	Name=rs79360490;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	264558	264558	.	+	.	Name=rs17775145;variant_sequence=G/A;
+chr4-04	ensembl_variation	deletion	359304	359306	.	+	.	Name=rs77588968;variant_sequence=GTT/-;
+chr4-04	ensembl_variation	SNP	264681	264681	.	+	.	Name=rs77776147;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	264832	264832	.	+	.	Name=rs115469042;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	264941	264941	.	+	.	Name=rs11731285;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	265298	265299	.	+	.	Name=rs34590377;variant_sequence=-/C;
+chr4-04	ensembl_variation	insertion	265300	265301	.	+	.	Name=rs34359434;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	265324	265324	.	+	.	Name=rs61792061;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	265339	265339	.	+	.	Name=rs61792062;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	265341	265341	.	+	.	Name=rs61792063;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	265349	265349	.	+	.	Name=rs61792064;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	265355	265355	.	+	.	Name=rs61792065;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	265359	265359	.	+	.	Name=rs61792066;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	265369	265369	.	+	.	Name=rs61792067;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	265380	265380	.	+	.	Name=rs61792068;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	265387	265387	.	+	.	Name=rs61792069;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	265391	265391	.	+	.	Name=rs61792070;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	265397	265397	.	+	.	Name=rs61792071;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	265399	265399	.	+	.	Name=rs61792072;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	265411	265411	.	+	.	Name=rs61792073;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	265414	265414	.	+	.	Name=rs61792074;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	265427	265427	.	+	.	Name=rs61792075;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	265433	265433	.	+	.	Name=rs61792076;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	265435	265435	.	+	.	Name=rs61792077;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	265437	265437	.	+	.	Name=rs61792078;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	265439	265439	.	+	.	Name=rs61792079;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	265441	265441	.	+	.	Name=rs61792080;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	265444	265444	.	+	.	Name=rs61792081;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	265465	265465	.	+	.	Name=rs61792082;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	265469	265469	.	+	.	Name=rs61792083;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	265479	265479	.	+	.	Name=rs61792084;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	265485	265485	.	+	.	Name=rs61792085;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	265495	265495	.	+	.	Name=rs61792086;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	265500	265500	.	+	.	Name=rs61792087;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	265504	265504	.	+	.	Name=rs61792088;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	265514	265514	.	+	.	Name=rs61792089;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	265519	265519	.	+	.	Name=rs61792090;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	265522	265522	.	+	.	Name=rs61792091;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	265527	265527	.	+	.	Name=rs61792092;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	265536	265536	.	+	.	Name=rs79816310;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	265550	265550	.	+	.	Name=rs61792093;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	265558	265558	.	+	.	Name=rs61792094;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	265563	265563	.	+	.	Name=rs114747783;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	265566	265566	.	+	.	Name=rs61792095;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	265637	265637	.	+	.	Name=rs61597111;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	265743	265743	.	+	.	Name=rs114872625;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	265970	265970	.	+	.	Name=rs61730555;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	266047	266047	.	+	.	Name=rs61730554;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	266124	266124	.	+	.	Name=rs114394748;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	266171	266171	.	+	.	Name=rs115069723;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	266491	266491	.	+	.	Name=rs77771572;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	266659	266659	.	+	.	Name=rs79366248;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	266863	266863	.	+	.	Name=rs4629385;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	267075	267075	.	+	.	Name=rs79767202;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	267076	267076	.	+	.	Name=rs2883231;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	267173	267173	.	+	.	Name=rs76052254;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	267230	267230	.	+	.	Name=rs79263269;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	267232	267232	.	+	.	Name=rs117235891;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	267437	267437	.	+	.	Name=rs78343340;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	267442	267442	.	+	.	Name=rs114536727;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	267511	267511	.	+	.	Name=rs75569198;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	267528	267528	.	+	.	Name=rs73795403;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	267621	267621	.	+	.	Name=rs6811431;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	267634	267634	.	+	.	Name=rs79242577;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	267878	267878	.	+	.	Name=rs115102557;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	267963	267963	.	+	.	Name=rs75849171;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	267968	267968	.	+	.	Name=rs75105190;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	268300	268300	.	+	.	Name=rs78676359;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	268371	268371	.	+	.	Name=rs58641957;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	268580	268580	.	+	.	Name=rs13435268;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	268590	268590	.	+	.	Name=rs73791808;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	268623	268624	.	+	.	Name=rs34079698;variant_sequence=-/G;
+chr4-04	ensembl_variation	SNP	268659	268659	.	+	.	Name=rs73791809;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	268771	268771	.	+	.	Name=rs76605095;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	269041	269041	.	+	.	Name=rs73791811;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	269042	269042	.	+	.	Name=rs7694325;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	269457	269457	.	+	.	Name=rs73213596;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	269477	269477	.	+	.	Name=rs75591813;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	269546	269546	.	+	.	Name=rs116839202;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	269629	269629	.	+	.	Name=rs115946034;variant_sequence=G/A;
+chr4-04	ensembl_variation	deletion	269693	269694	.	+	.	Name=rs113923591;variant_sequence=AG/-;
+chr4-04	ensembl_variation	SNP	270046	270046	.	+	.	Name=rs61192761;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	270058	270058	.	+	.	Name=rs13136187;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	270510	270510	.	+	.	Name=rs116611457;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	270574	270574	.	+	.	Name=rs6824022;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	270656	270656	.	+	.	Name=rs6814846;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	270698	270698	.	+	.	Name=rs6824248;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	270742	270743	.	+	.	Name=rs113777886;variant_sequence=-/AAAAAC;
+chr4-04	ensembl_variation	SNP	270880	270880	.	+	.	Name=rs75684666;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	271072	271072	.	+	.	Name=rs56218479;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	271076	271076	.	+	.	Name=rs73213597;variant_sequence=C/T;
+chr4-04	ensembl_variation	insertion	271391	271392	.	+	.	Name=rs111756381;variant_sequence=-/A;
+chr4-04	ensembl_variation	insertion	271400	271401	.	+	.	Name=rs57017607;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	271580	271580	.	+	.	Name=rs113114939;variant_sequence=A/C;
+chr4-04	ensembl_variation	insertion	271717	271718	.	+	.	Name=rs36014294;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	271755	271755	.	+	.	Name=rs115916539;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	271980	271980	.	+	.	Name=rs79879654;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	272177	272177	.	+	.	Name=rs112899466;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	272456	272456	.	+	.	Name=rs74547440;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	272471	272471	.	+	.	Name=rs80057113;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	272494	272494	.	+	.	Name=rs79897974;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	272520	272520	.	+	.	Name=rs76533221;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	272521	272521	.	+	.	Name=rs76333467;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	272522	272522	.	+	.	Name=rs6837796;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	272523	272523	.	+	.	Name=rs79651239;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	272524	272524	.	+	.	Name=rs11729365;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	272526	272526	.	+	.	Name=rs77511484;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	272528	272528	.	+	.	Name=rs74521993;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	272533	272533	.	+	.	Name=rs74358611;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	272535	272535	.	+	.	Name=rs78139614;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	272548	272548	.	+	.	Name=rs77869118;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	272554	272554	.	+	.	Name=rs75349959;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	272563	272563	.	+	.	Name=rs78652590;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	272565	272565	.	+	.	Name=rs75105672;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	272571	272571	.	+	.	Name=rs75824078;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	272579	272579	.	+	.	Name=rs78345290;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	272600	272600	.	+	.	Name=rs78397384;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	272605	272605	.	+	.	Name=rs76198714;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	272606	272606	.	+	.	Name=rs75041583;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	272621	272621	.	+	.	Name=rs76152366;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	272671	272671	.	+	.	Name=rs115038596;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	272743	272743	.	+	.	Name=rs78746414;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	272777	272777	.	+	.	Name=rs79262119;variant_sequence=T/A;
+chr4-04	ensembl_variation	insertion	272925	272926	.	+	.	Name=rs111326176;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	273157	273157	.	+	.	Name=rs11733683;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	273217	273217	.	+	.	Name=rs111551744;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	273246	273247	.	+	.	Name=rs71166804;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	273314	273314	.	+	.	Name=rs113970876;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	273476	273476	.	+	.	Name=rs6815868;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	273576	273576	.	+	.	Name=rs116671481;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	273872	273872	.	+	.	Name=rs114250682;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	273875	273875	.	+	.	Name=rs76980245;variant_sequence=A/T;
+chr4-04	ensembl_variation	insertion	273881	273882	.	+	.	Name=rs35971123;variant_sequence=-/ATAA;
+chr4-04	ensembl_variation	SNP	273882	273882	.	+	.	Name=rs117802913;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	273969	273969	.	+	.	Name=rs79516104;variant_sequence=A/G;
+chr4-04	ensembl_variation	deletion	274008	274009	.	+	.	Name=rs112737400;variant_sequence=AC/-;
+chr4-04	ensembl_variation	insertion	274083	274084	.	+	.	Name=rs112052577;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	274084	274084	.	+	.	Name=rs76583286;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	274097	274098	.	+	.	Name=rs59901961;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	274120	274120	.	+	.	Name=rs56217474;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	274287	274287	.	+	.	Name=rs113652207;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	274394	274394	.	+	.	Name=rs56023157;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	274492	274492	.	+	.	Name=rs114234114;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	274493	274493	.	+	.	Name=rs111711081;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	274728	274728	.	+	.	Name=rs116524627;variant_sequence=G/A;
+chr4-04	ensembl_variation	deletion	274752	274753	.	+	.	Name=rs72495105;variant_sequence=CA/-;
+chr4-04	ensembl_variation	SNP	274910	274910	.	+	.	Name=rs116067225;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	274943	274943	.	+	.	Name=rs77762064;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	275116	275116	.	+	.	Name=rs2353602;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	275207	275207	.	+	.	Name=rs56327123;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	275229	275229	.	+	.	Name=rs79295381;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	275234	275234	.	+	.	Name=rs76166839;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	275238	275238	.	+	.	Name=rs78490597;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	275251	275251	.	+	.	Name=rs79208974;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	275418	275418	.	+	.	Name=rs115129711;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	275599	275599	.	+	.	Name=rs28616744;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	275744	275744	.	+	.	Name=rs115932953;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	275870	275870	.	+	.	Name=rs78697570;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	275902	275902	.	+	.	Name=rs6810785;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	276449	276449	.	+	.	Name=rs74570414;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	276696	276696	.	+	.	Name=rs73791813;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	276765	276765	.	+	.	Name=rs11722521;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	276983	276983	.	+	.	Name=rs11723615;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	277057	277057	.	+	.	Name=rs7665727;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	277173	277173	.	+	.	Name=rs73217569;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	277356	277356	.	+	.	Name=rs79991484;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	277481	277481	.	+	.	Name=rs75314292;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	277739	277739	.	+	.	Name=rs113847214;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	277748	277748	.	+	.	Name=rs6843821;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	277924	277924	.	+	.	Name=rs74675982;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	277955	277955	.	+	.	Name=rs6814967;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	278063	278063	.	+	.	Name=rs73064337;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	278095	278095	.	+	.	Name=rs77279928;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	278196	278196	.	+	.	Name=rs9328738;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	278326	278326	.	+	.	Name=rs13327936;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	278380	278380	.	+	.	Name=rs78833908;variant_sequence=T/C;
+chr4-04	ensembl_variation	insertion	278627	278628	.	+	.	Name=rs71654580;variant_sequence=-/T;
+chr4-04	ensembl_variation	SNP	278680	278680	.	+	.	Name=rs12719767;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	278849	278849	.	+	.	Name=rs76862729;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	278915	278915	.	+	.	Name=rs73791814;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	279086	279086	.	+	.	Name=rs114676750;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	279226	279226	.	+	.	Name=rs118183222;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	279396	279396	.	+	.	Name=rs10002733;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	280006	280006	.	+	.	Name=rs111484673;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	280353	280353	.	+	.	Name=rs7697560;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	280426	280426	.	+	.	Name=rs2353599;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	280496	280496	.	+	.	Name=rs4438712;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	281028	281028	.	+	.	Name=rs116669208;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	281038	281038	.	+	.	Name=rs10023604;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	281408	281408	.	+	.	Name=rs116529450;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	281440	281440	.	+	.	Name=rs73217572;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	281442	281442	.	+	.	Name=rs13112393;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	281649	281649	.	+	.	Name=rs61792096;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	281707	281707	.	+	.	Name=rs11722197;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	281746	281747	.	+	.	Name=rs35663095;variant_sequence=-/T;
+chr4-04	ensembl_variation	SNP	281994	281994	.	+	.	Name=rs114334217;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	282006	282006	.	+	.	Name=rs6820547;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	282046	282046	.	+	.	Name=rs6826459;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	282160	282160	.	+	.	Name=rs66712247;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	282499	282499	.	+	.	Name=rs11723261;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	282528	282528	.	+	.	Name=rs113987817;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	282608	282608	.	+	.	Name=rs10027325;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	282633	282633	.	+	.	Name=rs61792097;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	282668	282668	.	+	.	Name=rs116753444;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	282909	282909	.	+	.	Name=rs114784277;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	283037	283037	.	+	.	Name=rs78207271;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	283041	283041	.	+	.	Name=rs78342895;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	283076	283076	.	+	.	Name=rs113509731;variant_sequence=T/C;
+chr4-04	ensembl_variation	deletion	283084	283085	.	+	.	Name=rs3047214;variant_sequence=CT/-;
+chr4-04	ensembl_variation	SNP	283118	283118	.	+	.	Name=rs1986557;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	283353	283353	.	+	.	Name=rs13120331;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	283355	283355	.	+	.	Name=rs13120332;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	283395	283395	.	+	.	Name=rs13126833;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	283404	283404	.	+	.	Name=rs13120513;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	283538	283538	.	+	.	Name=rs13110510;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	283652	283652	.	+	.	Name=rs58644592;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	283694	283694	.	+	.	Name=rs74325388;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	283767	283767	.	+	.	Name=rs114055282;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	283883	283883	.	+	.	Name=rs13111233;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	284122	284122	.	+	.	Name=rs73791815;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	284201	284201	.	+	.	Name=rs73791816;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	284604	284604	.	+	.	Name=rs75349991;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	284653	284653	.	+	.	Name=rs73791817;variant_sequence=G/A;
+chr4-04	ensembl_variation	insertion	284857	284858	.	+	.	Name=rs34876350;variant_sequence=-/T;
+chr4-04	ensembl_variation	SNP	284884	284884	.	+	.	Name=rs6841950;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	284956	284956	.	+	.	Name=rs6855867;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	285053	285053	.	+	.	Name=rs77807218;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	285548	285548	.	+	.	Name=rs6832556;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	285893	285893	.	+	.	Name=rs73791818;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	285984	285984	.	+	.	Name=rs73791819;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	286344	286344	.	+	.	Name=rs57092574;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	286395	286395	.	+	.	Name=rs59106553;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	286600	286600	.	+	.	Name=rs56229296;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	286676	286676	.	+	.	Name=rs10428380;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	286677	286677	.	+	.	Name=rs61792098;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	286678	286678	.	+	.	Name=rs10428381;variant_sequence=A/C;
+chr4-04	ensembl_variation	deletion	286707	286707	.	+	.	Name=rs34118991;variant_sequence=A/-;
+chr4-04	ensembl_variation	SNP	286709	286709	.	+	.	Name=rs78205493;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	286712	286712	.	+	.	Name=rs61792099;variant_sequence=C/A;
+chr4-04	ensembl_variation	deletion	286768	286768	.	+	.	Name=rs111452322;variant_sequence=A/-;
+chr4-04	ensembl_variation	SNP	286823	286823	.	+	.	Name=rs13133253;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	286824	286824	.	+	.	Name=rs13149604;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	286970	286970	.	+	.	Name=rs28411935;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	287046	287046	.	+	.	Name=rs28784663;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	287141	287141	.	+	.	Name=rs59163505;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	287649	287649	.	+	.	Name=rs12506277;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	287664	287664	.	+	.	Name=rs12505343;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	287846	287846	.	+	.	Name=rs74996354;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	288012	288012	.	+	.	Name=rs79405074;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	288074	288074	.	+	.	Name=rs12501727;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	288284	288284	.	+	.	Name=rs28498753;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	288309	288309	.	+	.	Name=rs116752037;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	288697	288697	.	+	.	Name=rs55711923;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	288786	288786	.	+	.	Name=rs116635147;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	288787	288787	.	+	.	Name=rs118058299;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	288793	288793	.	+	.	Name=rs75532834;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	288799	288799	.	+	.	Name=rs75833793;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	288803	288803	.	+	.	Name=rs79718948;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	288809	288809	.	+	.	Name=rs78732596;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	288816	288816	.	+	.	Name=rs76212162;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	288829	288829	.	+	.	Name=rs76100058;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	288845	288845	.	+	.	Name=rs76162446;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	288853	288853	.	+	.	Name=rs76652139;variant_sequence=G/A;
+chr4-04	ensembl_variation	insertion	288868	288869	.	+	.	Name=rs59264418;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	288870	288870	.	+	.	Name=rs79212688;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	288875	288875	.	+	.	Name=rs79318474;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	288877	288877	.	+	.	Name=rs77194027;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	288893	288893	.	+	.	Name=rs76758124;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	288895	288895	.	+	.	Name=rs80331174;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	288899	288899	.	+	.	Name=rs74338602;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	288922	288922	.	+	.	Name=rs77462754;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	288925	288925	.	+	.	Name=rs78318185;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	288930	288930	.	+	.	Name=rs74906145;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	288932	288932	.	+	.	Name=rs74708111;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	288936	288936	.	+	.	Name=rs77287525;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	288968	288968	.	+	.	Name=rs77927389;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	288974	288974	.	+	.	Name=rs78043905;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	288976	288976	.	+	.	Name=rs79280619;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	288977	288977	.	+	.	Name=rs75233992;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	288981	288981	.	+	.	Name=rs74658891;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	288982	288982	.	+	.	Name=rs79723991;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	288996	288996	.	+	.	Name=rs77103782;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	289001	289001	.	+	.	Name=rs75039624;variant_sequence=T/A;
+chr4-04	ensembl_variation	insertion	289006	289007	.	+	.	Name=rs34182736;variant_sequence=-/C;
+chr4-04	ensembl_variation	insertion	289018	289019	.	+	.	Name=rs35350742;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	289034	289034	.	+	.	Name=rs79931657;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	289040	289040	.	+	.	Name=rs76221862;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	289046	289046	.	+	.	Name=rs111551553;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	289058	289058	.	+	.	Name=rs77014946;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	289068	289068	.	+	.	Name=rs112921104;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	289139	289139	.	+	.	Name=rs61792114;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	289213	289213	.	+	.	Name=rs13118678;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	289244	289244	.	+	.	Name=rs112253195;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	289272	289272	.	+	.	Name=rs112132883;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	289488	289488	.	+	.	Name=rs74686788;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	289490	289490	.	+	.	Name=rs76324531;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	289560	289560	.	+	.	Name=rs78205047;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	289649	289649	.	+	.	Name=rs115426268;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	289835	289835	.	+	.	Name=rs114239297;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	289877	289877	.	+	.	Name=rs62619793;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	290284	290284	.	+	.	Name=rs61792115;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	290322	290322	.	+	.	Name=rs77503766;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	290381	290381	.	+	.	Name=rs7654568;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	290641	290641	.	+	.	Name=rs78355952;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	290914	290914	.	+	.	Name=rs2352936;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	290925	290925	.	+	.	Name=rs113238980;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	291039	291039	.	+	.	Name=rs73217573;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	291053	291053	.	+	.	Name=rs77223069;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	291086	291086	.	+	.	Name=rs77380000;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	291328	291328	.	+	.	Name=rs35130395;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	291397	291397	.	+	.	Name=rs6846655;variant_sequence=A/T;
+chr4-04	ensembl_variation	deletion	291420	291421	.	+	.	Name=rs60725655;variant_sequence=AA/-;
+chr4-04	ensembl_variation	SNP	291421	291421	.	+	.	Name=rs76782413;variant_sequence=A/C;
+chr4-04	ensembl_variation	deletion	291421	291421	.	+	.	Name=rs57681246;variant_sequence=A/-;
+chr4-04	ensembl_variation	SNP	291662	291662	.	+	.	Name=rs2352935;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	291759	291759	.	+	.	Name=rs10003142;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	291950	291950	.	+	.	Name=rs9994510;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	291959	291959	.	+	.	Name=rs116809879;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	291969	291969	.	+	.	Name=rs75991748;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	292000	292000	.	+	.	Name=rs114428980;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	292001	292001	.	+	.	Name=rs10005733;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	292007	292007	.	+	.	Name=rs76099983;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	292067	292067	.	+	.	Name=rs76572209;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	292085	292085	.	+	.	Name=rs75658930;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	292104	292104	.	+	.	Name=rs75819259;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	292127	292127	.	+	.	Name=rs77790028;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	292189	292189	.	+	.	Name=rs113056980;variant_sequence=C/T;
+chr4-04	ensembl_variation	deletion	292203	292203	.	+	.	Name=rs113693845;variant_sequence=C/-;
+chr4-04	ensembl_variation	SNP	292235	292235	.	+	.	Name=rs78686789;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	292242	292242	.	+	.	Name=rs75639235;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	292310	292310	.	+	.	Name=rs74491581;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	292331	292331	.	+	.	Name=rs115789757;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	292369	292369	.	+	.	Name=rs11723803;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	292388	292388	.	+	.	Name=rs73791820;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	292486	292486	.	+	.	Name=rs73791821;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	292668	292668	.	+	.	Name=rs12503543;variant_sequence=C/T;
+chr4-04	ensembl_variation	insertion	292851	292852	.	+	.	Name=rs35105663;variant_sequence=-/G;
+chr4-04	ensembl_variation	SNP	292938	292938	.	+	.	Name=rs76541352;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	293171	293171	.	+	.	Name=rs114109973;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	293226	293226	.	+	.	Name=rs7655058;variant_sequence=A/G;
+chr4-04	ensembl_variation	deletion	293230	293231	.	+	.	Name=rs34906622;variant_sequence=AT/-;
+chr4-04	ensembl_variation	insertion	293251	293252	.	+	.	Name=rs35866088;variant_sequence=-/TA;
+chr4-04	ensembl_variation	insertion	293262	293263	.	+	.	Name=rs61392588;variant_sequence=-/TA;
+chr4-04	ensembl_variation	SNP	293271	293271	.	+	.	Name=rs112663915;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	293417	293417	.	+	.	Name=rs113125124;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	293735	293735	.	+	.	Name=rs113135022;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	293796	293796	.	+	.	Name=rs75049882;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	293865	293865	.	+	.	Name=rs117321689;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	293926	293926	.	+	.	Name=rs74282718;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	294017	294017	.	+	.	Name=rs6856961;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	294018	294018	.	+	.	Name=rs28787332;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	294113	294113	.	+	.	Name=rs4401407;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	294196	294196	.	+	.	Name=rs112043870;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	294263	294263	.	+	.	Name=rs13110091;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	294264	294264	.	+	.	Name=rs77249364;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	294286	294286	.	+	.	Name=rs114659363;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	294335	294335	.	+	.	Name=rs76028337;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	294349	294349	.	+	.	Name=rs77928010;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	294394	294394	.	+	.	Name=rs114696014;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	294397	294397	.	+	.	Name=rs116057011;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	294398	294398	.	+	.	Name=rs115476119;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	294410	294410	.	+	.	Name=rs116128125;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	294422	294422	.	+	.	Name=rs114643969;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	294424	294424	.	+	.	Name=rs115678115;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	294442	294442	.	+	.	Name=rs116157903;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	294444	294444	.	+	.	Name=rs114873384;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	294508	294508	.	+	.	Name=rs112870397;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	294529	294529	.	+	.	Name=rs114001772;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	295525	295526	.	+	.	Name=rs35984540;variant_sequence=-/G;
+chr4-04	ensembl_variation	SNP	295912	295912	.	+	.	Name=rs116435429;variant_sequence=T/C;
+chr4-04	ensembl_variation	insertion	296040	296041	.	+	.	Name=rs113397472;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	296170	296170	.	+	.	Name=rs115869462;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	296274	296274	.	+	.	Name=rs114674955;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	296447	296447	.	+	.	Name=rs112095322;variant_sequence=T/C;
+chr4-04	ensembl_variation	insertion	296943	296944	.	+	.	Name=rs35602170;variant_sequence=-/A;
+chr4-04	ensembl_variation	insertion	296956	296957	.	+	.	Name=rs35409469;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	297077	297077	.	+	.	Name=rs111677123;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	297525	297525	.	+	.	Name=rs12505835;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	297529	297529	.	+	.	Name=rs79627729;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	297547	297547	.	+	.	Name=rs12511388;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	297557	297557	.	+	.	Name=rs112408556;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	297686	297686	.	+	.	Name=rs78153223;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	297812	297813	.	+	.	Name=rs35894346;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	297893	297893	.	+	.	Name=rs74635655;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	297915	297915	.	+	.	Name=rs77149905;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	297932	297932	.	+	.	Name=rs2352927;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	297989	297989	.	+	.	Name=rs2352928;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	298080	298080	.	+	.	Name=rs4373108;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	298094	298094	.	+	.	Name=rs4417915;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	298338	298338	.	+	.	Name=rs11730801;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	298364	298364	.	+	.	Name=rs75390499;variant_sequence=C/T;
+chr4-04	ensembl_variation	insertion	298364	298365	.	+	.	Name=rs71166805;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	298373	298373	.	+	.	Name=rs7660634;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	298772	298772	.	+	.	Name=rs7661412;variant_sequence=G/A;
+chr4-04	ensembl_variation	deletion	298931	298931	.	+	.	Name=rs34512845;variant_sequence=T/-;
+chr4-04	ensembl_variation	SNP	299178	299178	.	+	.	Name=rs10019188;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	299259	299259	.	+	.	Name=rs6852858;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	299261	299261	.	+	.	Name=rs79657896;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	299271	299271	.	+	.	Name=rs116560731;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	299364	299364	.	+	.	Name=rs115951453;variant_sequence=T/C;
+chr4-04	ensembl_variation	deletion	299601	299603	.	+	.	Name=rs35887445;variant_sequence=AAT/-;
+chr4-04	ensembl_variation	SNP	299746	299746	.	+	.	Name=rs76135225;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	299778	299778	.	+	.	Name=rs73791822;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	299964	299964	.	+	.	Name=rs12512676;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	300235	300235	.	+	.	Name=rs114556916;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	300407	300407	.	+	.	Name=rs78640123;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	300442	300442	.	+	.	Name=rs79902242;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	300501	300501	.	+	.	Name=rs115429563;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	300647	300647	.	+	.	Name=rs10014959;variant_sequence=C/A;
+chr4-04	ensembl_variation	deletion	300773	300773	.	+	.	Name=rs34548090;variant_sequence=G/-;
+chr4-04	ensembl_variation	SNP	300795	300795	.	+	.	Name=rs10019453;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	300831	300831	.	+	.	Name=rs115080519;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	301077	301077	.	+	.	Name=rs61792116;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	301272	301272	.	+	.	Name=rs111874231;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	301574	301574	.	+	.	Name=rs115723820;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	301595	301595	.	+	.	Name=rs116821973;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	301720	301720	.	+	.	Name=rs111833408;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	301773	301773	.	+	.	Name=rs61792117;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	301774	301774	.	+	.	Name=rs1986866;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	302008	302008	.	+	.	Name=rs4129956;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	302136	302136	.	+	.	Name=rs28863627;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	302226	302226	.	+	.	Name=rs11729208;variant_sequence=G/A;
+chr4-04	ensembl_variation	deletion	302421	302421	.	+	.	Name=rs112492846;variant_sequence=T/-;
+chr4-04	ensembl_variation	insertion	302434	302435	.	+	.	Name=rs59966100;variant_sequence=-/T;
+chr4-04	ensembl_variation	SNP	302574	302574	.	+	.	Name=rs117549951;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	302664	302664	.	+	.	Name=rs113743932;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	302726	302726	.	+	.	Name=rs10012510;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	302791	302791	.	+	.	Name=rs116734627;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	302820	302820	.	+	.	Name=rs11732707;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	302849	302849	.	+	.	Name=rs114157292;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	302857	302857	.	+	.	Name=rs115119741;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	302934	302934	.	+	.	Name=rs6828802;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	303059	303059	.	+	.	Name=rs79005758;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	303303	303303	.	+	.	Name=rs116439516;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	303443	303443	.	+	.	Name=rs77848190;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	303493	303493	.	+	.	Name=rs114568657;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	303609	303609	.	+	.	Name=rs113641721;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	304003	304003	.	+	.	Name=rs118148467;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	304008	304008	.	+	.	Name=rs116850815;variant_sequence=G/C;
+chr4-04	ensembl_variation	deletion	304262	304264	.	+	.	Name=rs75640186;variant_sequence=CCA/-;
+chr4-04	ensembl_variation	SNP	304388	304388	.	+	.	Name=rs77782115;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	304649	304649	.	+	.	Name=rs7439780;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	305287	305287	.	+	.	Name=rs115791032;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	305291	305291	.	+	.	Name=rs10034550;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	305514	305515	.	+	.	Name=rs35820483;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	305932	305932	.	+	.	Name=rs113109546;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	306092	306092	.	+	.	Name=rs75589822;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	306196	306196	.	+	.	Name=rs112823067;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	306541	306541	.	+	.	Name=rs113283879;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	306661	306661	.	+	.	Name=rs113261074;variant_sequence=G/A;
+chr4-04	ensembl_variation	insertion	306732	306733	.	+	.	Name=rs55700348;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	306855	306855	.	+	.	Name=rs80171987;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	307094	307094	.	+	.	Name=rs6822366;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	307307	307307	.	+	.	Name=rs6828943;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	307369	307369	.	+	.	Name=rs116835805;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	307433	307433	.	+	.	Name=rs13434593;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	307622	307623	.	+	.	Name=rs34524149;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	307707	307707	.	+	.	Name=rs75026280;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	307710	307710	.	+	.	Name=rs79151868;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	307710	307711	.	+	.	Name=rs77347601;variant_sequence=-/AAG;
+chr4-04	ensembl_variation	insertion	307718	307719	.	+	.	Name=rs72598751;variant_sequence=-/AAG;
+chr4-04	ensembl_variation	insertion	307719	307720	.	+	.	Name=rs34024398;variant_sequence=-/AAG;
+chr4-04	ensembl_variation	SNP	307720	307720	.	+	.	Name=rs111794249;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	307721	307721	.	+	.	Name=rs111372533;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	307722	307722	.	+	.	Name=rs114503066;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	307723	307723	.	+	.	Name=rs61792118;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	307725	307725	.	+	.	Name=rs115416518;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	307805	307805	.	+	.	Name=rs80124885;variant_sequence=T/A;
+chr4-04	ensembl_variation	insertion	307854	307855	.	+	.	Name=rs34349366;variant_sequence=-/A;
+chr4-04	ensembl_variation	insertion	307985	307986	.	+	.	Name=rs58082865;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	308010	308010	.	+	.	Name=rs6848983;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	308068	308068	.	+	.	Name=rs76841021;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	308152	308152	.	+	.	Name=rs113058803;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	308154	308154	.	+	.	Name=rs78352775;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	308499	308499	.	+	.	Name=rs13434802;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	308549	308549	.	+	.	Name=rs78627900;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	308596	308596	.	-	.	Name=rs80261151;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	308962	308962	.	+	.	Name=rs78296438;variant_sequence=C/T;
+chr4-04	ensembl_variation	sequence_alteration	309253	309253	.	+	.	Name=rs7669892;variant_sequence=C/A/G;
+chr4-04	ensembl_variation	SNP	309258	309258	.	+	.	Name=rs111456805;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	309558	309558	.	+	.	Name=rs10005699;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	309686	309686	.	+	.	Name=rs7685662;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	309727	309727	.	+	.	Name=rs115057862;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	309800	309800	.	+	.	Name=rs61587838;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	309903	309903	.	+	.	Name=rs11248012;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	310033	310033	.	+	.	Name=rs79743945;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	310044	310044	.	+	.	Name=rs111938627;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	310283	310283	.	+	.	Name=rs4690251;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	310297	310297	.	+	.	Name=rs115915074;variant_sequence=G/A;
+chr4-04	ensembl_variation	insertion	310378	310379	.	+	.	Name=rs35995816;variant_sequence=-/C;
+chr4-04	ensembl_variation	deletion	310384	310384	.	+	.	Name=rs34668634;variant_sequence=G/-;
+chr4-04	ensembl_variation	SNP	310384	310384	.	+	.	Name=rs74921165;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	310488	310488	.	+	.	Name=rs73791826;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	310670	310670	.	+	.	Name=rs115756802;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	310691	310691	.	+	.	Name=rs10021364;variant_sequence=T/C;
+chr4-04	ensembl_variation	insertion	311030	311031	.	+	.	Name=rs34750316;variant_sequence=-/G;
+chr4-04	ensembl_variation	insertion	311038	311039	.	+	.	Name=rs35476693;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	311039	311039	.	+	.	Name=rs56011643;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	311425	311425	.	+	.	Name=rs11248013;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	311487	311487	.	+	.	Name=rs56275185;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	311801	311801	.	+	.	Name=rs113103124;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	311857	311857	.	+	.	Name=rs28372409;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	312061	312061	.	+	.	Name=rs114212536;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	312137	312137	.	+	.	Name=rs116298770;variant_sequence=T/G;
+chr4-04	ensembl_variation	insertion	312178	312179	.	+	.	Name=rs33943278;variant_sequence=-/T;
+chr4-04	ensembl_variation	insertion	312189	312190	.	+	.	Name=rs34195785;variant_sequence=-/T;
+chr4-04	ensembl_variation	insertion	312198	312199	.	+	.	Name=rs58342775;variant_sequence=-/T;
+chr4-04	ensembl_variation	SNP	312665	312665	.	+	.	Name=rs4374577;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	312920	312920	.	+	.	Name=rs76219687;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	312950	312950	.	+	.	Name=rs71602458;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	312953	312953	.	+	.	Name=rs115547082;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	313003	313003	.	+	.	Name=rs111938647;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	313947	313947	.	+	.	Name=rs17718976;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	314108	314108	.	+	.	Name=rs80303103;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	314208	314208	.	+	.	Name=rs77792255;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	314210	314210	.	+	.	Name=rs113601353;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	314362	314362	.	+	.	Name=rs114942228;variant_sequence=C/T;
+chr4-04	ensembl_variation	insertion	314439	314440	.	+	.	Name=rs35701209;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	314539	314539	.	+	.	Name=rs11731415;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	314541	314541	.	+	.	Name=rs111321884;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	314849	314849	.	+	.	Name=rs28441553;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	315279	315279	.	+	.	Name=rs73791827;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	315673	315673	.	+	.	Name=rs6847267;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	315805	315805	.	+	.	Name=rs113858749;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	315890	315890	.	+	.	Name=rs116611682;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	315911	315911	.	+	.	Name=rs79784952;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	316162	316162	.	+	.	Name=rs2001947;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	316377	316377	.	+	.	Name=rs113252687;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	316378	316378	.	+	.	Name=rs112644506;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	316379	316379	.	+	.	Name=rs111893160;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	316729	316729	.	+	.	Name=rs80298182;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	316923	316923	.	+	.	Name=rs78692002;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	316927	316927	.	+	.	Name=rs79600249;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	317690	317690	.	+	.	Name=rs113988940;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	317691	317691	.	+	.	Name=rs28752043;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	317726	317727	.	+	.	Name=rs35042441;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	317756	317756	.	+	.	Name=rs76913492;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	318058	318058	.	+	.	Name=rs79291724;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	318196	318196	.	+	.	Name=rs73217578;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	318269	318269	.	+	.	Name=rs115720072;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	318273	318273	.	+	.	Name=rs7661700;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	318274	318274	.	+	.	Name=rs6847881;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	318275	318275	.	+	.	Name=rs6818538;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	318359	318359	.	+	.	Name=rs61792119;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	318364	318364	.	+	.	Name=rs13110321;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	318532	318532	.	+	.	Name=rs113880905;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	318536	318536	.	+	.	Name=rs77098660;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	318549	318549	.	+	.	Name=rs13120968;variant_sequence=A/C;
+chr4-04	ensembl_variation	deletion	318549	318549	.	+	.	Name=rs59164415;variant_sequence=A/-;
+chr4-04	ensembl_variation	SNP	318550	318550	.	+	.	Name=rs13110777;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	318556	318556	.	+	.	Name=rs113670149;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	318760	318760	.	+	.	Name=rs57380154;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	319105	319105	.	+	.	Name=rs113386709;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	319121	319121	.	+	.	Name=rs113921175;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	319123	319123	.	+	.	Name=rs79056760;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	319125	319125	.	+	.	Name=rs77386963;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	319208	319208	.	+	.	Name=rs10033213;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	319553	319553	.	+	.	Name=rs73217579;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	319689	319689	.	+	.	Name=rs59071324;variant_sequence=A/G;
+chr4-04	ensembl_variation	deletion	319773	319773	.	+	.	Name=rs111444295;variant_sequence=T/-;
+chr4-04	ensembl_variation	SNP	319787	319787	.	+	.	Name=rs77253907;variant_sequence=T/G;
+chr4-04	ensembl_variation	deletion	319788	319788	.	+	.	Name=rs71166806;variant_sequence=T/-;
+chr4-04	ensembl_variation	SNP	320059	320059	.	+	.	Name=rs58102171;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	320411	320411	.	+	.	Name=rs115396080;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	320461	320461	.	+	.	Name=rs73217581;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	320464	320464	.	+	.	Name=rs73217582;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	320481	320481	.	+	.	Name=rs116547041;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	320595	320595	.	+	.	Name=rs115894987;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	320667	320667	.	+	.	Name=rs76112048;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	320696	320696	.	+	.	Name=rs79929361;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	320771	320771	.	+	.	Name=rs60533229;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	320897	320897	.	+	.	Name=rs60869410;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	320934	320934	.	+	.	Name=rs28849156;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	320997	320997	.	+	.	Name=rs113388729;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	321077	321077	.	+	.	Name=rs117139226;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	321415	321415	.	+	.	Name=rs73217583;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	321731	321731	.	+	.	Name=rs113847733;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	321825	321825	.	+	.	Name=rs118076268;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	321902	321902	.	+	.	Name=rs11946825;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	321929	321929	.	+	.	Name=rs73791830;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	321960	321960	.	+	.	Name=rs114639949;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	322026	322026	.	+	.	Name=rs11947752;variant_sequence=C/T;
+chr4-04	ensembl_variation	deletion	322051	322053	.	+	.	Name=rs79443965;variant_sequence=AGC/-;
+chr4-04	ensembl_variation	SNP	322080	322080	.	+	.	Name=rs61792120;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	322223	322223	.	+	.	Name=rs77034783;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	322352	322352	.	+	.	Name=rs114122353;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	322359	322359	.	+	.	Name=rs75081609;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	322515	322515	.	+	.	Name=rs75039103;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	322521	322521	.	+	.	Name=rs76235782;variant_sequence=A/T;
+chr4-04	ensembl_variation	sequence_alteration	322726	322726	.	+	.	Name=rs56182615;variant_sequence=C/T/G;
+chr4-04	ensembl_variation	SNP	322759	322759	.	+	.	Name=rs73217585;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	322787	322787	.	+	.	Name=rs57257197;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	322810	322810	.	+	.	Name=rs73064352;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	322814	322814	.	+	.	Name=rs115106197;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	322931	322931	.	+	.	Name=rs59194971;variant_sequence=C/T;
+chr4-04	ensembl_variation	insertion	322943	322944	.	+	.	Name=rs77039116;variant_sequence=-/TTGAGTCA;
+chr4-04	ensembl_variation	SNP	322946	322946	.	+	.	Name=rs114685629;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	322956	322956	.	+	.	Name=rs11929868;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	322990	322990	.	+	.	Name=rs73064354;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	323003	323003	.	+	.	Name=rs76467771;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	323327	323327	.	+	.	Name=rs59419008;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	323331	323331	.	+	.	Name=rs112256327;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	323335	323335	.	+	.	Name=rs59883453;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	323339	323339	.	+	.	Name=rs61520487;variant_sequence=C/T;
+chr4-04	ensembl_variation	deletion	323339	323340	.	+	.	Name=rs35906781;variant_sequence=CA/-;
+chr4-04	ensembl_variation	deletion	323339	323342	.	+	.	Name=rs60219376;variant_sequence=CATA/-;
+chr4-04	ensembl_variation	deletion	323357	323358	.	+	.	Name=rs35228659;variant_sequence=TA/-;
+chr4-04	ensembl_variation	insertion	323358	323359	.	+	.	Name=rs57380674;variant_sequence=-/TA;
+chr4-04	ensembl_variation	SNP	323404	323404	.	+	.	Name=rs73064356;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	323406	323406	.	+	.	Name=rs79704925;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	323463	323463	.	+	.	Name=rs112448993;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	323474	323474	.	+	.	Name=rs56678228;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	323586	323586	.	+	.	Name=rs114449464;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	323689	323689	.	+	.	Name=rs116533437;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	323746	323746	.	+	.	Name=rs61792122;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	323886	323886	.	+	.	Name=rs12640520;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	323953	323953	.	+	.	Name=rs114158562;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	323954	323954	.	+	.	Name=rs112695261;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	324069	324069	.	+	.	Name=rs75268814;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	324071	324071	.	+	.	Name=rs76585603;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	324242	324243	.	+	.	Name=rs58570103;variant_sequence=-/AAT;
+chr4-04	ensembl_variation	SNP	324335	324335	.	+	.	Name=rs116460974;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	324337	324337	.	+	.	Name=rs6839107;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	324435	324435	.	+	.	Name=rs6853199;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	324719	324719	.	+	.	Name=rs115372345;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	324747	324747	.	+	.	Name=rs116073575;variant_sequence=C/T;
+chr4-04	ensembl_variation	insertion	324766	324767	.	+	.	Name=rs35252169;variant_sequence=-/TTT;
+chr4-04	ensembl_variation	SNP	325036	325036	.	+	.	Name=rs73217587;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	325079	325079	.	+	.	Name=rs7654234;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	325097	325097	.	+	.	Name=rs114779353;variant_sequence=C/T;
+chr4-04	ensembl_variation	deletion	325097	325097	.	+	.	Name=rs34822758;variant_sequence=C/-;
+chr4-04	ensembl_variation	SNP	325127	325127	.	+	.	Name=rs75843656;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	325317	325317	.	+	.	Name=rs115520686;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	325406	325406	.	+	.	Name=rs112979686;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	325470	325470	.	+	.	Name=rs112880788;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	325883	325883	.	+	.	Name=rs61792123;variant_sequence=A/C;
+chr4-04	ensembl_variation	insertion	325944	325945	.	+	.	Name=rs34701336;variant_sequence=-/T;
+chr4-04	ensembl_variation	SNP	325980	325980	.	+	.	Name=rs7655981;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	325992	325992	.	+	.	Name=rs7689416;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	326146	326146	.	+	.	Name=rs13129786;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	326256	326256	.	+	.	Name=rs6846653;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	326475	326475	.	+	.	Name=rs6853198;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	326493	326493	.	+	.	Name=rs6837456;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	326508	326508	.	+	.	Name=rs6847222;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	326803	326803	.	+	.	Name=rs73217589;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	326806	326806	.	+	.	Name=rs13110772;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	326881	326881	.	+	.	Name=rs112983012;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	326904	326904	.	+	.	Name=rs112300904;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	326936	326936	.	+	.	Name=rs112465689;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	326944	326944	.	+	.	Name=rs111641016;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	327198	327198	.	+	.	Name=rs61792124;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	327227	327227	.	+	.	Name=rs115915710;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	327353	327353	.	+	.	Name=rs13137548;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	327380	327380	.	+	.	Name=rs61792125;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	327504	327504	.	+	.	Name=rs7655080;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	327659	327659	.	+	.	Name=rs11936209;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	327804	327804	.	+	.	Name=rs76457459;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	328019	328019	.	+	.	Name=rs76445368;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	328044	328044	.	+	.	Name=rs78730328;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	328421	328421	.	+	.	Name=rs58094550;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	328480	328480	.	+	.	Name=rs61431967;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	328492	328492	.	+	.	Name=rs58361877;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	328509	328509	.	+	.	Name=rs112625818;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	328511	328511	.	+	.	Name=rs58145935;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	328556	328556	.	+	.	Name=rs112101530;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	328697	328697	.	+	.	Name=rs58020250;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	328767	328767	.	+	.	Name=rs59806409;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	328812	328812	.	+	.	Name=rs114353359;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	328821	328821	.	+	.	Name=rs73792140;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	328906	328906	.	+	.	Name=rs61792130;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	329042	329042	.	+	.	Name=rs73217597;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	329062	329062	.	+	.	Name=rs116230769;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	329136	329136	.	+	.	Name=rs115432903;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	329432	329432	.	+	.	Name=rs73792142;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	329501	329501	.	+	.	Name=rs3762866;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	329686	329686	.	+	.	Name=rs3762867;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	329821	329821	.	+	.	Name=rs116873815;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	330114	330114	.	+	.	Name=rs73064371;variant_sequence=C/T;
+chr4-04	ensembl_variation	deletion	330181	330181	.	+	.	Name=rs111227600;variant_sequence=G/-;
+chr4-04	ensembl_variation	SNP	330505	330505	.	+	.	Name=rs13121052;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	330589	330589	.	+	.	Name=rs13131469;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	330684	330684	.	+	.	Name=rs73064374;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	330741	330741	.	+	.	Name=rs13121530;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	330797	330797	.	+	.	Name=rs73064378;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	330849	330849	.	+	.	Name=rs6599327;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	330895	330895	.	+	.	Name=rs116410854;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	330901	330901	.	+	.	Name=rs115618128;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	330950	330950	.	+	.	Name=rs77640350;variant_sequence=T/A;
+chr4-04	ensembl_variation	deletion	331091	331091	.	+	.	Name=rs35724339;variant_sequence=A/-;
+chr4-04	ensembl_variation	SNP	331136	331136	.	+	.	Name=rs77220685;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	331146	331146	.	+	.	Name=rs115073815;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	331229	331229	.	+	.	Name=rs115913393;variant_sequence=G/C;
+chr4-04	ensembl_variation	deletion	331229	331230	.	+	.	Name=rs3834806;variant_sequence=GT/-;
+chr4-04	ensembl_variation	SNP	331349	331349	.	+	.	Name=rs114334322;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	331372	331372	.	+	.	Name=rs7677824;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	331658	331658	.	+	.	Name=rs3749520;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	331666	331666	.	+	.	Name=rs3749521;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	331675	331675	.	+	.	Name=rs3749522;variant_sequence=C/A;
+chr4-04	ensembl_variation	insertion	331693	331694	.	+	.	Name=rs5855672;variant_sequence=-/C;
+chr4-04	ensembl_variation	insertion	331694	331695	.	+	.	Name=rs33917951;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	331696	331696	.	+	.	Name=rs115407293;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	331740	331740	.	+	.	Name=rs3749523;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	331764	331764	.	+	.	Name=rs73064385;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	331866	331866	.	+	.	Name=rs4261927;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	331896	331896	.	+	.	Name=rs4261928;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	331897	331897	.	+	.	Name=rs75145605;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	331907	331907	.	+	.	Name=rs115677187;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	332063	332063	.	+	.	Name=rs116780403;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	332087	332087	.	+	.	Name=rs114871510;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	332128	332128	.	+	.	Name=rs116640416;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	332138	332138	.	+	.	Name=rs114002176;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	332449	332449	.	+	.	Name=rs115050279;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	332542	332542	.	+	.	Name=rs78894128;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	332627	332627	.	+	.	Name=rs115709135;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	332671	332671	.	+	.	Name=rs73064387;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	332781	332781	.	+	.	Name=rs116470367;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	333030	333030	.	+	.	Name=rs115795345;variant_sequence=G/A;
+chr4-04	ensembl_variation	insertion	333288	333289	.	+	.	Name=rs72598752;variant_sequence=-/G;
+chr4-04	ensembl_variation	insertion	333289	333290	.	+	.	Name=rs35185356;variant_sequence=-/G;
+chr4-04	ensembl_variation	SNP	333310	333310	.	+	.	Name=rs11729526;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	333322	333322	.	+	.	Name=rs58500057;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	333384	333384	.	+	.	Name=rs11729532;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	333526	333526	.	+	.	Name=rs73064394;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	333531	333531	.	+	.	Name=rs79051926;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	333596	333596	.	+	.	Name=rs11727981;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	333610	333610	.	+	.	Name=rs77176200;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	333976	333976	.	+	.	Name=rs114724588;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	334213	334213	.	+	.	Name=rs61580954;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	334254	334254	.	+	.	Name=rs73064400;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	334293	334293	.	+	.	Name=rs79034091;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	334304	334304	.	+	.	Name=rs77849020;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	334418	334418	.	+	.	Name=rs115464827;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	334428	334428	.	+	.	Name=rs116126290;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	334497	334497	.	+	.	Name=rs114656131;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	334591	334591	.	+	.	Name=rs78640996;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	334600	334600	.	+	.	Name=rs75091307;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	334613	334613	.	+	.	Name=rs75234965;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	334617	334617	.	+	.	Name=rs79083622;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	334621	334621	.	+	.	Name=rs78396383;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	334647	334647	.	+	.	Name=rs78538668;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	334664	334664	.	+	.	Name=rs79582683;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	334671	334671	.	+	.	Name=rs75793340;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	334696	334696	.	+	.	Name=rs76910478;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	334710	334710	.	+	.	Name=rs79841389;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	334754	334754	.	+	.	Name=rs79300438;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	334764	334764	.	+	.	Name=rs77132186;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	334771	334771	.	+	.	Name=rs80049316;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	334777	334777	.	+	.	Name=rs76813187;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	334797	334797	.	+	.	Name=rs77321155;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	334808	334808	.	+	.	Name=rs77442745;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	334824	334824	.	+	.	Name=rs77506680;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	334835	334835	.	+	.	Name=rs74897519;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	334856	334856	.	+	.	Name=rs74597574;variant_sequence=T/A;
+chr4-04	ensembl_variation	deletion	334862	334862	.	+	.	Name=rs111597104;variant_sequence=T/-;
+chr4-04	ensembl_variation	deletion	334871	334871	.	+	.	Name=rs34755542;variant_sequence=T/-;
+chr4-04	ensembl_variation	deletion	334875	334875	.	+	.	Name=rs56926897;variant_sequence=T/-;
+chr4-04	ensembl_variation	SNP	334876	334876	.	+	.	Name=rs78157142;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	335283	335283	.	+	.	Name=rs115605875;variant_sequence=A/T;
+chr4-04	ensembl_variation	insertion	335301	335302	.	+	.	Name=rs36060329;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	335394	335394	.	+	.	Name=rs116161766;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	335434	335434	.	+	.	Name=rs78313348;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	335438	335438	.	+	.	Name=rs114851193;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	335452	335452	.	+	.	Name=rs116644845;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	335613	335613	.	+	.	Name=rs79021988;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	335932	335932	.	+	.	Name=rs77188978;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	336301	336301	.	+	.	Name=rs116439268;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	336463	336463	.	+	.	Name=rs112100920;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	336494	336494	.	+	.	Name=rs55901060;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	336615	336615	.	-	.	Name=rs14938;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	336658	336658	.	-	.	Name=rs11552842;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	336671	336671	.	-	.	Name=rs11552833;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	336689	336689	.	-	.	Name=rs11552836;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	336704	336704	.	-	.	Name=rs11543161;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	336827	336827	.	+	.	Name=rs77959891;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	337019	337019	.	+	.	Name=rs114171904;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	337084	337084	.	+	.	Name=rs114752580;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	337185	337185	.	+	.	Name=rs117558645;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	337271	337271	.	+	.	Name=rs3762868;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	337376	337376	.	-	.	Name=rs75291536;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	337376	337376	.	+	.	Name=rs61792144;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	337474	337474	.	+	.	Name=rs2352932;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	337501	337501	.	+	.	Name=rs59095927;variant_sequence=G/A;
+chr4-04	ensembl_variation	insertion	337513	337514	.	+	.	Name=rs35268031;variant_sequence=-/A;
+chr4-04	ensembl_variation	insertion	337537	337538	.	+	.	Name=rs71166807;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	337538	337538	.	+	.	Name=rs115220023;variant_sequence=G/A;
+chr4-04	ensembl_variation	deletion	337567	337567	.	+	.	Name=rs60315529;variant_sequence=T/-;
+chr4-04	ensembl_variation	SNP	337613	337613	.	+	.	Name=rs4571280;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	337709	337709	.	+	.	Name=rs75808368;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	337769	337769	.	+	.	Name=rs79176412;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	337794	337794	.	+	.	Name=rs113901747;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	337845	337845	.	+	.	Name=rs116240104;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	337921	337921	.	+	.	Name=rs115461380;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	337926	337926	.	+	.	Name=rs116746268;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	338031	338031	.	+	.	Name=rs76818296;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	338036	338036	.	+	.	Name=rs74606788;variant_sequence=A/T;
+chr4-04	ensembl_variation	deletion	338114	338115	.	+	.	Name=rs3833613;variant_sequence=AA/-;
+chr4-04	ensembl_variation	SNP	338115	338115	.	+	.	Name=rs76078467;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	338129	338129	.	+	.	Name=rs75245145;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	338156	338156	.	+	.	Name=rs79227679;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	338171	338171	.	+	.	Name=rs111369004;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	338186	338186	.	+	.	Name=rs78725891;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	338198	338198	.	+	.	Name=rs78575109;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	338200	338200	.	+	.	Name=rs79869819;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	338202	338202	.	+	.	Name=rs76167181;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	338203	338203	.	+	.	Name=rs75942616;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	338205	338205	.	+	.	Name=rs80052234;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	338213	338213	.	+	.	Name=rs61733103;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	338246	338246	.	+	.	Name=rs79348421;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	338252	338252	.	+	.	Name=rs76962477;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	338258	338258	.	+	.	Name=rs80241916;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	338260	338260	.	+	.	Name=rs76915575;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	338266	338266	.	+	.	Name=rs74323716;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	338289	338289	.	+	.	Name=rs77578216;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	338296	338296	.	+	.	Name=rs77544910;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	338306	338306	.	+	.	Name=rs74908199;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	338308	338308	.	+	.	Name=rs74691923;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	338310	338310	.	+	.	Name=rs75092352;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	338311	338311	.	+	.	Name=rs75382858;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	338313	338313	.	+	.	Name=rs78000808;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	338322	338322	.	+	.	Name=rs78396627;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	338334	338334	.	+	.	Name=rs75796306;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	338337	338337	.	+	.	Name=rs75299168;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	338355	338355	.	+	.	Name=rs79742766;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	338359	338359	.	+	.	Name=rs76521508;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	338364	338364	.	+	.	Name=rs113399189;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	338851	338851	.	+	.	Name=rs34483255;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	338884	338884	.	+	.	Name=rs61792145;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	339385	339385	.	+	.	Name=rs77018968;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	339386	339386	.	+	.	Name=rs80197975;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	339388	339388	.	+	.	Name=rs74471344;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	339557	339557	.	+	.	Name=rs73792145;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	339582	339582	.	+	.	Name=rs73066313;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	339652	339652	.	+	.	Name=rs115731956;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	340019	340019	.	+	.	Name=rs12646983;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	340020	340020	.	+	.	Name=rs12646984;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	340190	340190	.	+	.	Name=rs12647018;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	340684	340684	.	+	.	Name=rs115802431;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	340685	340685	.	+	.	Name=rs116208259;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	340889	340889	.	+	.	Name=rs68126535;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	341215	341215	.	+	.	Name=rs112275142;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	341270	341270	.	+	.	Name=rs61792146;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	341319	341319	.	+	.	Name=rs61792147;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	341361	341361	.	+	.	Name=rs112609182;variant_sequence=C/G;
+chr4-04	ensembl_variation	insertion	341530	341531	.	+	.	Name=rs113198024;variant_sequence=-/A;
+chr4-04	ensembl_variation	insertion	341542	341543	.	+	.	Name=rs57927172;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	341654	341654	.	+	.	Name=rs114945348;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	341656	341656	.	+	.	Name=rs115561965;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	341673	341673	.	+	.	Name=rs117325980;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	341802	341802	.	+	.	Name=rs113620767;variant_sequence=T/G;
+chr4-04	ensembl_variation	deletion	341814	341814	.	+	.	Name=rs35997079;variant_sequence=T/-;
+chr4-04	ensembl_variation	SNP	341959	341959	.	+	.	Name=rs114424096;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	342039	342039	.	+	.	Name=rs76566288;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	342113	342113	.	+	.	Name=rs73217600;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	342377	342377	.	+	.	Name=rs117405395;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	342426	342426	.	+	.	Name=rs79662803;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	342994	342994	.	+	.	Name=rs73066317;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	343020	343021	.	+	.	Name=rs34322430;variant_sequence=-/T;
+chr4-04	ensembl_variation	SNP	343192	343192	.	+	.	Name=rs116803324;variant_sequence=C/A;
+chr4-04	ensembl_variation	insertion	343293	343294	.	+	.	Name=rs34073128;variant_sequence=-/T;
+chr4-04	ensembl_variation	SNP	246640	246640	.	+	.	Name=rs116068146;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	343527	343527	.	+	.	Name=rs76849836;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	246656	246656	.	+	.	Name=rs73793586;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	343528	343528	.	+	.	Name=rs75337215;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	246664	246664	.	+	.	Name=rs116435106;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	343533	343533	.	+	.	Name=rs74666941;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	246700	246700	.	+	.	Name=rs61795003;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	343543	343543	.	+	.	Name=rs60750098;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	247207	247207	.	+	.	Name=rs74848272;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	343652	343652	.	+	.	Name=rs115888797;variant_sequence=G/C;
+chr4-04	ensembl_variation	deletion	247255	247256	.	+	.	Name=rs34738994;variant_sequence=AT/-;
+chr4-04	ensembl_variation	SNP	343734	343734	.	+	.	Name=rs116269826;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	247818	247818	.	+	.	Name=rs74643185;variant_sequence=C/T;
+chr4-04	ensembl_variation	insertion	343795	343796	.	+	.	Name=rs3037605;variant_sequence=-/TGCT;
+chr4-04	ensembl_variation	SNP	247825	247825	.	+	.	Name=rs10028482;variant_sequence=G/A;
+chr4-04	ensembl_variation	insertion	343796	343797	.	+	.	Name=rs59301713;variant_sequence=-/GCTT;
+chr4-04	ensembl_variation	insertion	247876	247877	.	+	.	Name=rs35065588;variant_sequence=-/G;
+chr4-04	ensembl_variation	SNP	344138	344138	.	+	.	Name=rs73217601;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	248055	248055	.	+	.	Name=rs9994989;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	344144	344144	.	+	.	Name=rs115196964;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	248174	248174	.	+	.	Name=rs34951088;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	344236	344236	.	+	.	Name=rs61450142;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	248244	248244	.	+	.	Name=rs35862389;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	344405	344405	.	+	.	Name=rs61481977;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	248328	248328	.	+	.	Name=rs34505342;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	344519	344519	.	+	.	Name=rs7663963;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	248417	248417	.	+	.	Name=rs116639095;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	344606	344606	.	+	.	Name=rs113552584;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	248709	248709	.	+	.	Name=rs6599322;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	344685	344685	.	+	.	Name=rs7697421;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	248744	248744	.	+	.	Name=rs76252400;variant_sequence=A/G;
+chr4-04	ensembl_variation	deletion	344719	344719	.	+	.	Name=rs35754231;variant_sequence=T/-;
+chr4-04	ensembl_variation	SNP	248848	248848	.	+	.	Name=rs10002898;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	344861	344861	.	+	.	Name=rs116839538;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	248893	248893	.	+	.	Name=rs79724879;variant_sequence=G/A;
+chr4-04	ensembl_variation	insertion	344874	344875	.	+	.	Name=rs34984368;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	249303	249303	.	+	.	Name=rs61795004;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	344995	344995	.	+	.	Name=rs73066320;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	249430	249430	.	+	.	Name=rs6857106;variant_sequence=G/T;
+chr4-04	ensembl_variation	deletion	345039	345040	.	+	.	Name=rs78231244;variant_sequence=TT/-;
+chr4-04	ensembl_variation	SNP	249537	249537	.	+	.	Name=rs73793588;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	345252	345252	.	+	.	Name=rs56905415;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	249567	249567	.	+	.	Name=rs73793589;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	345475	345475	.	+	.	Name=rs57731643;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	249661	249661	.	+	.	Name=rs77805970;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	345914	345914	.	+	.	Name=rs4371565;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	250036	250036	.	+	.	Name=rs56985696;variant_sequence=T/C;
+chr4-04	ensembl_variation	insertion	346032	346033	.	+	.	Name=rs34797742;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	250405	250405	.	+	.	Name=rs77219899;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	346689	346689	.	+	.	Name=rs114511550;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	250432	250432	.	+	.	Name=rs116924127;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	346699	346699	.	+	.	Name=rs77114946;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	250434	250434	.	+	.	Name=rs111351468;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	346726	346726	.	+	.	Name=rs115410125;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	250450	250450	.	+	.	Name=rs73793590;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	346758	346758	.	+	.	Name=rs6821220;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	250454	250454	.	-	.	Name=rs76503349;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	346898	346898	.	+	.	Name=rs2352945;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	250522	250522	.	+	.	Name=rs74984113;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	347038	347038	.	+	.	Name=rs73066321;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	250544	250544	.	+	.	Name=rs73793591;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	347120	347120	.	+	.	Name=rs7669794;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	250595	250595	.	+	.	Name=rs113846040;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	347125	347125	.	+	.	Name=rs7682942;variant_sequence=G/C;
+chr4-04	ensembl_variation	insertion	250597	250598	.	+	.	Name=rs34607998;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	347185	347185	.	+	.	Name=rs116749675;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	250641	250641	.	+	.	Name=rs79167157;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	347194	347194	.	+	.	Name=rs17329078;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	250645	250645	.	+	.	Name=rs75984075;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	347203	347203	.	+	.	Name=rs11248014;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	250669	250669	.	+	.	Name=rs112544218;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	347219	347219	.	+	.	Name=rs9715622;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	251416	251416	.	+	.	Name=rs73793592;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	347255	347255	.	+	.	Name=rs6820996;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	251624	251624	.	+	.	Name=rs78148790;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	347262	347262	.	+	.	Name=rs35032247;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	251893	251893	.	+	.	Name=rs73213590;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	347411	347411	.	+	.	Name=rs61792150;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	251896	251896	.	+	.	Name=rs73793593;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	347470	347470	.	+	.	Name=rs7439657;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	252048	252048	.	+	.	Name=rs77078697;variant_sequence=T/C;
+chr4-04	ensembl_variation	insertion	347547	347548	.	+	.	Name=rs71654581;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	252137	252137	.	+	.	Name=rs73213592;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	347714	347714	.	+	.	Name=rs115249188;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	252480	252480	.	+	.	Name=rs28712710;variant_sequence=G/C;
+chr4-04	ensembl_variation	insertion	347747	347748	.	+	.	Name=rs34239724;variant_sequence=-/T;
+chr4-04	ensembl_variation	SNP	252501	252501	.	+	.	Name=rs56147344;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	347918	347918	.	+	.	Name=rs116584319;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	252804	252804	.	+	.	Name=rs12510827;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	348062	348062	.	+	.	Name=rs115321965;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	252836	252836	.	+	.	Name=rs79780296;variant_sequence=A/G;
+chr4-04	ensembl_variation	deletion	348062	348062	.	+	.	Name=rs112852083;variant_sequence=C/-;
+chr4-04	ensembl_variation	SNP	252871	252871	.	+	.	Name=rs12498545;variant_sequence=C/T;
+chr4-04	ensembl_variation	deletion	348066	348066	.	+	.	Name=rs72598753;variant_sequence=C/-;
+chr4-04	ensembl_variation	SNP	252966	252966	.	+	.	Name=rs112158821;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	348096	348096	.	+	.	Name=rs114067128;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	252998	252998	.	+	.	Name=rs77983317;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	348167	348167	.	+	.	Name=rs77495498;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	253008	253008	.	+	.	Name=rs114218307;variant_sequence=G/A;
+chr4-04	ensembl_variation	insertion	348235	348236	.	+	.	Name=rs34379509;variant_sequence=-/G;
+chr4-04	ensembl_variation	SNP	253328	253328	.	+	.	Name=rs111786358;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	348524	348524	.	+	.	Name=rs7690318;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	253491	253491	.	-	.	Name=rs78084122;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	348580	348580	.	+	.	Name=rs73066324;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	253525	253525	.	+	.	Name=rs76336650;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	348946	348946	.	+	.	Name=rs7672205;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	253601	253601	.	+	.	Name=rs61795006;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	349596	349596	.	+	.	Name=rs61792151;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	253766	253766	.	+	.	Name=rs115681450;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	349716	349716	.	+	.	Name=rs73066326;variant_sequence=C/T;
+chr4-04	ensembl_variation	deletion	253821	253824	.	+	.	Name=rs113305604;variant_sequence=TCTT/-;
+chr4-04	ensembl_variation	SNP	349728	349728	.	+	.	Name=rs73066328;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	253847	253847	.	+	.	Name=rs112505624;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	349784	349784	.	+	.	Name=rs7697144;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	253881	253881	.	+	.	Name=rs4518181;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	349847	349847	.	+	.	Name=rs73219204;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	254213	254213	.	+	.	Name=rs117855818;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	349862	349862	.	+	.	Name=rs61140156;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	254419	254419	.	+	.	Name=rs114233186;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	349867	349867	.	+	.	Name=rs59346249;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	254569	254569	.	+	.	Name=rs73064335;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	349874	349874	.	+	.	Name=rs60690562;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	254583	254583	.	+	.	Name=rs73793595;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	349882	349882	.	+	.	Name=rs61237401;variant_sequence=C/T;
+chr4-04	ensembl_variation	insertion	254685	254686	.	+	.	Name=rs112652832;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	349889	349889	.	+	.	Name=rs60202579;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	254746	254746	.	+	.	Name=rs114645989;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	349900	349900	.	+	.	Name=rs58672922;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	254807	254807	.	+	.	Name=rs74482758;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	349904	349904	.	+	.	Name=rs58161640;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	254816	254816	.	+	.	Name=rs74852956;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	349912	349912	.	+	.	Name=rs60368971;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	255073	255073	.	+	.	Name=rs78456397;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	349913	349913	.	+	.	Name=rs58597776;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	255102	255102	.	+	.	Name=rs57435500;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	349914	349914	.	+	.	Name=rs13149871;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	255263	255263	.	+	.	Name=rs60229242;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	349923	349923	.	+	.	Name=rs13149881;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	255264	255264	.	+	.	Name=rs61795007;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	349935	349935	.	+	.	Name=rs59747454;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	255429	255429	.	+	.	Name=rs77982137;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	349942	349942	.	+	.	Name=rs60944334;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	255594	255594	.	+	.	Name=rs73793596;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	349968	349968	.	+	.	Name=rs60057712;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	255758	255758	.	+	.	Name=rs114400649;variant_sequence=C/A;
+chr4-04	ensembl_variation	insertion	349977	349978	.	+	.	Name=rs59361684;variant_sequence=-/TACT;
+chr4-04	ensembl_variation	SNP	255905	255905	.	+	.	Name=rs73793597;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	349982	349982	.	+	.	Name=rs57550020;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	255966	255966	.	+	.	Name=rs111626473;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	349984	349984	.	+	.	Name=rs61671519;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	255994	255994	.	+	.	Name=rs112631443;variant_sequence=G/A;
+chr4-04	ensembl_variation	deletion	350020	350020	.	+	.	Name=rs111839333;variant_sequence=A/-;
+chr4-04	ensembl_variation	SNP	256429	256429	.	+	.	Name=rs114007248;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	350044	350044	.	+	.	Name=rs116268551;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	256450	256450	.	+	.	Name=rs61792060;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	350083	350083	.	+	.	Name=rs115799425;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	256598	256598	.	+	.	Name=rs117573143;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	350525	350525	.	+	.	Name=rs78870565;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	256698	256698	.	+	.	Name=rs111929404;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	350579	350579	.	+	.	Name=rs6825544;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	256851	256851	.	+	.	Name=rs73213593;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	350795	350795	.	+	.	Name=rs12647659;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	256975	256975	.	+	.	Name=rs73793599;variant_sequence=C/T;
+chr4-04	ensembl_variation	deletion	350928	350928	.	+	.	Name=rs36000451;variant_sequence=T/-;
+chr4-04	ensembl_variation	SNP	256979	256979	.	+	.	Name=rs11728100;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	351044	351044	.	+	.	Name=rs10212688;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	257048	257048	.	+	.	Name=rs115632218;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	351209	351209	.	+	.	Name=rs74463326;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	257154	257154	.	+	.	Name=rs115337428;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	351489	351489	.	+	.	Name=rs77592170;variant_sequence=C/T;
+chr4-04	ensembl_variation	deletion	257246	257246	.	+	.	Name=rs112220317;variant_sequence=A/-;
+chr4-04	ensembl_variation	SNP	351651	351651	.	+	.	Name=rs112845648;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	257249	257249	.	+	.	Name=rs28517538;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	351661	351661	.	+	.	Name=rs11721823;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	257258	257258	.	+	.	Name=rs74653446;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	351729	351729	.	+	.	Name=rs113082510;variant_sequence=C/T;
+chr4-04	ensembl_variation	insertion	257258	257259	.	+	.	Name=rs35178489;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	351741	351741	.	+	.	Name=rs6819237;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	257259	257259	.	+	.	Name=rs75047593;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	351783	351783	.	+	.	Name=rs78734670;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	257318	257318	.	+	.	Name=rs73793600;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	351853	351853	.	+	.	Name=rs115361560;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	257365	257365	.	+	.	Name=rs112776858;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	351970	351970	.	+	.	Name=rs12499633;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	257384	257384	.	+	.	Name=rs113402102;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	351972	351972	.	+	.	Name=rs115597071;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	257406	257406	.	+	.	Name=rs75759167;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	352394	352394	.	+	.	Name=rs113243205;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	257500	257500	.	+	.	Name=rs77113404;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	352661	352661	.	+	.	Name=rs55718920;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	257553	257553	.	+	.	Name=rs117100792;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	352768	352768	.	+	.	Name=rs74559842;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	257555	257555	.	+	.	Name=rs118023272;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	352890	352890	.	+	.	Name=rs56171831;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	257729	257729	.	+	.	Name=rs75581629;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	352937	352937	.	+	.	Name=rs74437406;variant_sequence=G/A;
+chr4-04	ensembl_variation	deletion	257941	257941	.	+	.	Name=rs35957357;variant_sequence=T/-;
+chr4-04	ensembl_variation	SNP	352955	352955	.	+	.	Name=rs7682616;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	258032	258032	.	+	.	Name=rs79914894;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	352968	352968	.	+	.	Name=rs56048545;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	258294	258294	.	+	.	Name=rs77234191;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	353088	353088	.	+	.	Name=rs78449876;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	258471	258471	.	+	.	Name=rs28565113;variant_sequence=T/A;
+chr4-04	ensembl_variation	insertion	353097	353098	.	+	.	Name=rs59855402;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	258512	258512	.	+	.	Name=rs7657860;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	353183	353183	.	+	.	Name=rs75612802;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	258609	258609	.	+	.	Name=rs115761664;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	353271	353271	.	+	.	Name=rs77936062;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	258627	258627	.	+	.	Name=rs7658064;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	353898	353898	.	+	.	Name=rs116976302;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	258692	258692	.	+	.	Name=rs113702774;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	353902	353902	.	+	.	Name=rs60054816;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	258788	258788	.	+	.	Name=rs73213594;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	354013	354013	.	+	.	Name=rs75739380;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	258920	258920	.	+	.	Name=rs78301707;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	354044	354044	.	+	.	Name=rs114751295;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	259525	259525	.	+	.	Name=rs79043901;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	354051	354051	.	+	.	Name=rs17719492;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	259638	259638	.	+	.	Name=rs73793601;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	354238	354238	.	+	.	Name=rs7675459;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	259679	259679	.	+	.	Name=rs76635023;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	354256	354256	.	+	.	Name=rs76886738;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	260121	260121	.	+	.	Name=rs10006781;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	354270	354270	.	+	.	Name=rs115249012;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	260165	260165	.	+	.	Name=rs28703806;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	354274	354274	.	+	.	Name=rs116671819;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	260166	260166	.	+	.	Name=rs28415975;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	354589	354589	.	+	.	Name=rs73219209;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	260173	260173	.	+	.	Name=rs28429717;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	354613	354613	.	+	.	Name=rs113178711;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	260176	260176	.	+	.	Name=rs111766204;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	354756	354756	.	+	.	Name=rs76524747;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	260415	260415	.	+	.	Name=rs114500782;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	354878	354878	.	+	.	Name=rs61792154;variant_sequence=A/G;
+chr4-04	ensembl_variation	deletion	260415	260417	.	+	.	Name=rs74271677;variant_sequence=TTT/-;
+chr4-04	ensembl_variation	SNP	354955	354955	.	+	.	Name=rs79402412;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	260417	260417	.	+	.	Name=rs77926823;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	354969	354969	.	+	.	Name=rs115388974;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	260441	260441	.	+	.	Name=rs73793602;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	355103	355103	.	+	.	Name=rs79922358;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	260587	260587	.	+	.	Name=rs17164747;variant_sequence=G/T;
+chr4-04	ensembl_variation	insertion	355103	355104	.	+	.	Name=rs111431602;variant_sequence=-/TCTT;
+chr4-04	ensembl_variation	SNP	260810	260810	.	+	.	Name=rs115074177;variant_sequence=G/C;
+chr4-04	ensembl_variation	insertion	355108	355109	.	+	.	Name=rs72490219;variant_sequence=-/CTTT;
+chr4-04	ensembl_variation	SNP	260950	260950	.	+	.	Name=rs60056532;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	355109	355109	.	+	.	Name=rs77399824;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	261095	261095	.	+	.	Name=rs79716987;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	355176	355176	.	+	.	Name=rs75801112;variant_sequence=G/T;
+chr4-04	ensembl_variation	deletion	261104	261106	.	+	.	Name=rs61296103;variant_sequence=GGG/-;
+chr4-04	ensembl_variation	SNP	355177	355177	.	+	.	Name=rs76633695;variant_sequence=T/G;
+chr4-04	ensembl_variation	insertion	261106	261107	.	+	.	Name=rs71164502;variant_sequence=-/GG;
+chr4-04	ensembl_variation	SNP	356081	356081	.	+	.	Name=rs80248324;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	261156	261156	.	+	.	Name=rs7688540;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	357570	357571	.	+	.	Name=rs59300063;variant_sequence=-/G;
+chr4-04	ensembl_variation	SNP	261274	261274	.	+	.	Name=rs76539830;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	357657	357657	.	+	.	Name=rs61792156;variant_sequence=A/T;
+chr4-04	ensembl_variation	insertion	261381	261382	.	+	.	Name=rs34809141;variant_sequence=-/CA;
+chr4-04	ensembl_variation	SNP	357669	357669	.	+	.	Name=rs11937955;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	261601	261601	.	+	.	Name=rs75442577;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	357785	357785	.	+	.	Name=rs2624729;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	262062	262062	.	+	.	Name=rs10010286;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	357793	357793	.	+	.	Name=rs76047999;variant_sequence=T/C;
+chr4-04	ensembl_variation	insertion	262144	262145	.	+	.	Name=rs112945850;variant_sequence=-/TC;
+chr4-04	ensembl_variation	SNP	357793	357793	.	-	.	Name=rs113200034;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	262145	262146	.	+	.	Name=rs59995882;variant_sequence=-/CT;
+chr4-04	ensembl_variation	SNP	357806	357806	.	+	.	Name=rs62171238;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	262152	262152	.	+	.	Name=rs75470053;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	357817	357817	.	+	.	Name=rs74475438;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	262153	262153	.	+	.	Name=rs77148043;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	357818	357818	.	+	.	Name=rs2784390;variant_sequence=C/T;
+chr4-04	ensembl_variation	insertion	262400	262401	.	+	.	Name=rs35751601;variant_sequence=-/T;
+chr4-04	ensembl_variation	SNP	357821	357821	.	+	.	Name=rs55769528;variant_sequence=G/A;
+chr4-04	ensembl_variation	insertion	262448	262449	.	+	.	Name=rs34190666;variant_sequence=-/G;
+chr4-04	ensembl_variation	SNP	357823	357823	.	+	.	Name=rs74482379;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	262572	262572	.	+	.	Name=rs34293116;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	357841	357841	.	+	.	Name=rs28867109;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	262589	262589	.	+	.	Name=rs34181697;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	357856	357856	.	+	.	Name=rs111353602;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	262598	262598	.	+	.	Name=rs34529823;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	357857	357857	.	-	.	Name=rs79712056;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	262617	262617	.	+	.	Name=rs35773246;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	357870	357870	.	-	.	Name=rs75801552;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	262624	262624	.	+	.	Name=rs36116654;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	357884	357884	.	+	.	Name=rs11723986;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	262874	262874	.	+	.	Name=rs115899071;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	357892	357892	.	-	.	Name=rs113296940;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	262934	262934	.	+	.	Name=rs17775090;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	357914	357914	.	+	.	Name=rs112521424;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	263205	263205	.	+	.	Name=rs80276391;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	357918	357918	.	-	.	Name=rs80163004;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	263319	263319	.	+	.	Name=rs7674560;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	357918	357918	.	-	.	Name=rs77278650;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	263400	263400	.	+	.	Name=rs112824916;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	357926	357926	.	-	.	Name=rs112532717;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	263427	263427	.	+	.	Name=rs111314890;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	357931	357931	.	+	.	Name=rs77220357;variant_sequence=C/A;
+chr4-04	ensembl_variation	deletion	263482	263482	.	+	.	Name=rs112413297;variant_sequence=A/-;
+chr4-04	ensembl_variation	SNP	357956	357956	.	+	.	Name=rs111411991;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	263562	263562	.	+	.	Name=rs112975726;variant_sequence=C/T;
+chr4-04	ensembl_variation	insertion	357956	357957	.	-	.	Name=rs35441996;variant_sequence=-/G;
+chr4-04	ensembl_variation	SNP	263638	263638	.	+	.	Name=rs115344128;variant_sequence=C/A;
+chr4-04	polya_signal	polyA_signal_sequence	249422	249427	.	+	.
+chr4-04	polya_signal	polyA_signal_sequence	249755	249760	.	+	.
+chr4-04	polya_site	polyA_site	249773	249774	.	+	.
+chr4-04	polya_site	polyA_site	249444	249445	.	+	.
+chr4-04	transcript_trunc	mRNA	247349	249774	.	+	.	ID=transcript2;Name=RP11-2H3.4-001
+chr4-04	transcript_trunc	exon	247349	249774	.	+	.	Parent=transcript2
+chr4-04	transcript_trunc	mRNA	331622	352339	.	+	.	ID=transcript3;Name=RP11-2H3.1-003
+chr4-04	transcript_trunc	exon	331622	331775	.	+	.	Parent=transcript3
+chr4-04	transcript_trunc	exon	337571	337697	.	+	.	Parent=transcript3
+chr4-04	transcript_trunc	exon	338124	338219	.	+	.	Parent=transcript3
+chr4-04	transcript_trunc	exon	351997	352339	.	+	.	Parent=transcript3
+chr4-04	transcript_trunc	mRNA	331603	331775	.	+	.	ID=transcript4;Name=RP11-2H3.1-006
+chr4-04	transcript_trunc	exon	331603	331775	.	+	.	Parent=transcript4
+chr4-04	CCDS_Gene	mRNA	264888	299099	.	-	.	ID=transcript5;Name=CCDS46990.1
+chr4-04	CCDS_Gene	exon	299097	299099	.	-	.	Parent=transcript5
+chr4-04	CCDS_Gene	CDS	299097	299099	.	-	0	Parent=transcript5
+chr4-04	CCDS_Gene	exon	289818	289944	.	-	.	Parent=transcript5
+chr4-04	CCDS_Gene	CDS	289818	289944	.	-	1	Parent=transcript5
+chr4-04	CCDS_Gene	exon	289227	289322	.	-	.	Parent=transcript5
+chr4-04	CCDS_Gene	CDS	289227	289322	.	-	1	Parent=transcript5
+chr4-04	CCDS_Gene	exon	264888	266419	.	-	.	Parent=transcript5
+chr4-04	CCDS_Gene	CDS	264888	266419	.	-	0	Parent=transcript5
+chr4-04	CCDS_Gene	mRNA	331773	338219	.	+	.	ID=transcript6;Name=CCDS33931.1
+chr4-04	CCDS_Gene	exon	331773	331775	.	+	.	Parent=transcript6
+chr4-04	CCDS_Gene	exon	337571	337697	.	+	.	Parent=transcript6
+chr4-04	CCDS_Gene	exon	338124	338219	.	+	.	Parent=transcript6
+chr4-04	Augustus	mRNA	330156	330563	.	-	.	ID=transcript7;Name=AUGUSTUS00000051712
+chr4-04	Augustus	exon	330156	330563	.	-	.	Parent=transcript7
+chr4-04	Augustus	CDS	330156	330563	.	-	0	Parent=transcript7
+chr4-04	Genscan	mRNA	330013	333007	.	-	.	ID=transcript8;Name=GENSCAN00000046298
+chr4-04	Genscan	exon	332861	333007	.	-	.	Parent=transcript8
+chr4-04	Genscan	CDS	332861	333007	.	-	0	Parent=transcript8
+chr4-04	Genscan	exon	330841	331098	.	-	.	Parent=transcript8
+chr4-04	Genscan	CDS	330841	331098	.	-	0	Parent=transcript8
+chr4-04	Genscan	exon	330289	330722	.	-	.	Parent=transcript8
+chr4-04	Genscan	CDS	330289	330722	.	-	2	Parent=transcript8
+chr4-04	Genscan	exon	330013	330175	.	-	.	Parent=transcript8
+chr4-04	Genscan	CDS	330013	330175	.	-	0	Parent=transcript8
+chr4-04	Genscan	mRNA	221598	299038	.	-	.	ID=transcript9;Name=GENSCAN00000046296
+chr4-04	Genscan	exon	298963	299038	.	-	.	Parent=transcript9
+chr4-04	Genscan	CDS	298963	299038	.	-	0	Parent=transcript9
+chr4-04	Genscan	exon	289227	289301	.	-	.	Parent=transcript9
+chr4-04	Genscan	CDS	289227	289301	.	-	1	Parent=transcript9
+chr4-04	Genscan	exon	266273	266395	.	-	.	Parent=transcript9
+chr4-04	Genscan	CDS	266273	266395	.	-	1	Parent=transcript9
+chr4-04	Genscan	exon	228521	228666	.	-	.	Parent=transcript9
+chr4-04	Genscan	CDS	228521	228666	.	-	0	Parent=transcript9
+chr4-04	Genscan	exon	221598	221681	.	-	.	Parent=transcript9
+chr4-04	Genscan	CDS	221598	221681	.	-	0	Parent=transcript9
+chr4-04	Halfwise	mRNA	262776	262844	.	-	.	ID=transcript10;Name=zf-C2H2.40836
+chr4-04	Halfwise	exon	262776	262844	.	-	.	Parent=transcript10
+chr4-04	Halfwise	CDS	262776	262844	.	-	0	Parent=transcript10
+chr4-04	Halfwise	mRNA	263873	263941	.	-	.	ID=transcript11;Name=zf-C2H2.40835
+chr4-04	Halfwise	exon	263873	263941	.	-	.	Parent=transcript11
+chr4-04	Halfwise	CDS	263873	263941	.	-	0	Parent=transcript11
+chr4-04	Halfwise	mRNA	211321	251478	.	-	.	ID=transcript12;Name=zf-C2H2.40837
+chr4-04	Halfwise	exon	251454	251478	.	-	.	Parent=transcript12
+chr4-04	Halfwise	CDS	251454	251478	.	-	0	Parent=transcript12
+chr4-04	Halfwise	exon	228409	228425	.	-	.	Parent=transcript12
+chr4-04	Halfwise	CDS	228409	228425	.	-	0	Parent=transcript12
+chr4-04	Halfwise	exon	211321	211350	.	-	.	Parent=transcript12
+chr4-04	Halfwise	CDS	211321	211350	.	-	0	Parent=transcript12
+chr4-04	Halfwise	mRNA	289816	289938	.	-	.	ID=transcript13;Name=KRAB.40832
+chr4-04	Halfwise	exon	289816	289938	.	-	.	Parent=transcript13
+chr4-04	Halfwise	CDS	289816	289938	.	-	0	Parent=transcript13
+chr4-04	Halfwise	mRNA	337577	337699	.	+	.	ID=transcript14;Name=KRAB.40834
+chr4-04	Halfwise	exon	337577	337699	.	+	.	Parent=transcript14
+chr4-04	Halfwise	CDS	337577	337699	.	+	0	Parent=transcript14
+chr4-04	known_cds_trunc	mRNA	331624	338219	.	+	.	ID=transcript15;Name=RP11-2H3.1-001
+chr4-04	known_cds_trunc	exon	331624	331775	.	+	.	Parent=transcript15
+chr4-04	known_cds_trunc	exon	337571	337697	.	+	.	Parent=transcript15
+chr4-04	known_cds_trunc	exon	338124	338219	.	+	.	Parent=transcript15
+chr4-04	Augustus	mRNA	330156	330563	.	-	.	ID=transcript16;Name=AUGUSTUS00000051712
+chr4-04	Augustus	exon	330156	330563	.	-	.	Parent=transcript16
+chr4-04	Augustus	CDS	330156	330563	.	-	0	Parent=transcript16
+chr4-04	Halfwise	mRNA	262776	262844	.	-	.	ID=transcript17;Name=zf-C2H2.40836
+chr4-04	Halfwise	exon	262776	262844	.	-	.	Parent=transcript17
+chr4-04	Halfwise	CDS	262776	262844	.	-	0	Parent=transcript17
+chr4-04	Halfwise	mRNA	263873	263941	.	-	.	ID=transcript18;Name=zf-C2H2.40835
+chr4-04	Halfwise	exon	263873	263941	.	-	.	Parent=transcript18
+chr4-04	Halfwise	CDS	263873	263941	.	-	0	Parent=transcript18
+chr4-04	Halfwise	mRNA	211321	251478	.	-	.	ID=transcript19;Name=zf-C2H2.40837
+chr4-04	Halfwise	exon	251454	251478	.	-	.	Parent=transcript19
+chr4-04	Halfwise	CDS	251454	251478	.	-	0	Parent=transcript19
+chr4-04	Halfwise	exon	228409	228425	.	-	.	Parent=transcript19
+chr4-04	Halfwise	CDS	228409	228425	.	-	0	Parent=transcript19
+chr4-04	Halfwise	exon	211321	211350	.	-	.	Parent=transcript19
+chr4-04	Halfwise	CDS	211321	211350	.	-	0	Parent=transcript19
+chr4-04	Halfwise	mRNA	289816	289938	.	-	.	ID=transcript20;Name=KRAB.40832
+chr4-04	Halfwise	exon	289816	289938	.	-	.	Parent=transcript20
+chr4-04	Halfwise	CDS	289816	289938	.	-	0	Parent=transcript20
+chr4-04	Halfwise	mRNA	337577	337699	.	+	.	ID=transcript21;Name=KRAB.40834
+chr4-04	Halfwise	exon	337577	337699	.	+	.	Parent=transcript21
+chr4-04	Halfwise	CDS	337577	337699	.	+	0	Parent=transcript21
+chr4-04	putative_cds_trunc	mRNA	331623	338219	.	+	.	ID=transcript22;Name=RP11-2H3.1-005
+chr4-04	putative_cds_trunc	exon	331623	331775	.	+	.	Parent=transcript22
+chr4-04	putative_cds_trunc	exon	337571	337697	.	+	.	Parent=transcript22
+chr4-04	putative_cds_trunc	exon	338124	338219	.	+	.	Parent=transcript22
+chr4-04	putative_cds_trunc	mRNA	331609	338219	.	+	.	ID=transcript23;Name=RP11-2H3.1-002
+chr4-04	putative_cds_trunc	exon	331609	331775	.	+	.	Parent=transcript23
+chr4-04	putative_cds_trunc	exon	337571	337697	.	+	.	Parent=transcript23
+chr4-04	putative_cds_trunc	exon	338124	338219	.	+	.	Parent=transcript23
+chr4-04	ensembl_ncRNA	mRNA	343946	344041	.	+	.	ID=transcript24;Name=MIR571.388281
+chr4-04	ensembl_ncRNA	exon	343946	344041	.	+	.	Parent=transcript24
+chr4-04	Genscan	mRNA	330013	333007	.	-	.	ID=transcript25;Name=GENSCAN00000046298
+chr4-04	Genscan	exon	332861	333007	.	-	.	Parent=transcript25
+chr4-04	Genscan	CDS	332861	333007	.	-	0	Parent=transcript25
+chr4-04	Genscan	exon	330841	331098	.	-	.	Parent=transcript25
+chr4-04	Genscan	CDS	330841	331098	.	-	0	Parent=transcript25
+chr4-04	Genscan	exon	330289	330722	.	-	.	Parent=transcript25
+chr4-04	Genscan	CDS	330289	330722	.	-	2	Parent=transcript25
+chr4-04	Genscan	exon	330013	330175	.	-	.	Parent=transcript25
+chr4-04	Genscan	CDS	330013	330175	.	-	0	Parent=transcript25
+chr4-04	Genscan	mRNA	221598	299038	.	-	.	ID=transcript26;Name=GENSCAN00000046296
+chr4-04	Genscan	exon	298963	299038	.	-	.	Parent=transcript26
+chr4-04	Genscan	CDS	298963	299038	.	-	0	Parent=transcript26
+chr4-04	Genscan	exon	289227	289301	.	-	.	Parent=transcript26
+chr4-04	Genscan	CDS	289227	289301	.	-	1	Parent=transcript26
+chr4-04	Genscan	exon	266273	266395	.	-	.	Parent=transcript26
+chr4-04	Genscan	CDS	266273	266395	.	-	1	Parent=transcript26
+chr4-04	Genscan	exon	228521	228666	.	-	.	Parent=transcript26
+chr4-04	Genscan	CDS	228521	228666	.	-	0	Parent=transcript26
+chr4-04	Genscan	exon	221598	221681	.	-	.	Parent=transcript26
+chr4-04	Genscan	CDS	221598	221681	.	-	0	Parent=transcript26
+chr4-04	ensembl_havana_transcripts	mRNA	264464	299110	.	-	.	ID=transcript27;Name=ZNF732.317436
+chr4-04	ensembl_havana_transcripts	exon	299097	299110	.	-	.	Parent=transcript27
+chr4-04	ensembl_havana_transcripts	CDS	299097	299099	.	-	0	Parent=transcript27
+chr4-04	ensembl_havana_transcripts	exon	289818	289944	.	-	.	Parent=transcript27
+chr4-04	ensembl_havana_transcripts	CDS	289818	289944	.	-	1	Parent=transcript27
+chr4-04	ensembl_havana_transcripts	exon	289227	289322	.	-	.	Parent=transcript27
+chr4-04	ensembl_havana_transcripts	CDS	289227	289322	.	-	1	Parent=transcript27
+chr4-04	ensembl_havana_transcripts	exon	264464	266419	.	-	.	Parent=transcript27
+chr4-04	ensembl_havana_transcripts	CDS	264888	266419	.	-	0	Parent=transcript27
+chr4-04	ensembl_havana_transcripts	mRNA	331624	338219	.	+	.	ID=transcript28;Name=ZNF141.317475
+chr4-04	ensembl_havana_transcripts	exon	331624	331775	.	+	.	Parent=transcript28
+chr4-04	ensembl_havana_transcripts	exon	337571	337697	.	+	.	Parent=transcript28
+chr4-04	ensembl_havana_transcripts	exon	338124	338219	.	+	.	Parent=transcript28
+chr4-04	ensembl_EST_genes	mRNA	247349	247934	.	+	.	ID=transcript29;Name=ENSESTT00000087222
+chr4-04	ensembl_EST_genes	exon	247349	247934	.	+	.	Parent=transcript29
+chr4-04	ensembl_EST_genes	mRNA	331603	331775	.	+	.	ID=transcript30;Name=ENSESTT00000087249
+chr4-04	ensembl_EST_genes	exon	331603	331775	.	+	.	Parent=transcript30
+chr4-04	ensembl_EST_genes	mRNA	247725	247760	.	+	.	ID=transcript31;Name=ENSESTT00000087201
+chr4-04	ensembl_EST_genes	exon	247725	247760	.	+	.	Parent=transcript31
+chr4-04	ensembl_EST_genes	mRNA	330936	337660	.	+	.	ID=transcript32;Name=ENSESTT00000087238
+chr4-04	ensembl_EST_genes	exon	330936	331116	.	+	.	Parent=transcript32
+chr4-04	ensembl_EST_genes	CDS	330938	331116	.	+	0	Parent=transcript32
+chr4-04	ensembl_EST_genes	exon	337571	337660	.	+	.	Parent=transcript32
+chr4-04	ensembl_EST_genes	CDS	337571	337580	.	+	1	Parent=transcript32
+chr4-04	ensembl_EST_genes	mRNA	213083	247631	.	+	.	ID=transcript33;Name=ENSESTT00000087219
+chr4-04	ensembl_EST_genes	exon	213083	213178	.	+	.	Parent=transcript33
+chr4-04	ensembl_EST_genes	exon	247349	247631	.	+	.	Parent=transcript33
+chr4-04	ensembl_EST_genes	mRNA	331596	338219	.	+	.	ID=transcript34;Name=ENSESTT00000087246
+chr4-04	ensembl_EST_genes	exon	331596	331775	.	+	.	Parent=transcript34
+chr4-04	ensembl_EST_genes	exon	337571	337697	.	+	.	Parent=transcript34
+chr4-04	ensembl_EST_genes	exon	338124	338219	.	+	.	Parent=transcript34
+chr4-04	polya_signal	polyA_signal_sequence	249422	249427	.	+	.
+chr4-04	polya_signal	polyA_signal_sequence	249755	249760	.	+	.
+chr4-04	polya_site	polyA_site	249773	249774	.	+	.
+chr4-04	polya_site	polyA_site	249444	249445	.	+	.
diff --git a/examples/chr4_ref_seq.fasta b/examples/chr4_ref_seq.fasta
new file mode 100644
index 0000000..2b487e4
--- /dev/null
+++ b/examples/chr4_ref_seq.fasta
@@ -0,0 +1,2256 @@
+>chr4-04 246635 359336
+tcctgacatagtctgaaaccaattgtctttgatagagattatgggagcct
+cccatacatgttttaaggatgtgtcttgtctggaatttcatgtttttcag
+ttaaaagggtttgttcatgtttcttcttaacagtctctaatcacttgccc
+tacctactttctgtatttaacactgcagtctgctcctgaaacatttacat
+tttgtctcagcaatcccaagctgtcctttcaaaatataccactgtttctt
+tcagcactctgtattattggagacagaaaccagtttttgtaaagactacc
+aaaagccagaagtaatgatgtgtgcgttagtatttttcttatttttaaag
+aaagaagccaggaattggcagtttactcctaaagacacaatgctatactg
+gggaggaggaagggctgtgtaaatgtaacaaattttcctttgcattctat
+gtggctcttggcattgttcttacctgaggcattacatacaattaactcat
+ttcgagattttgcacaaaagcattttgatgagtatatgtttgttacatgt
+atatgtctgtgaaggagttatggcctgtggtattttgttgtgccatctta
+ctaatgtactttgtataagtatatatatattagatttgtaaagtaagtat
+attcatatgtaaagtgtattcatatgaatctagtaagtgggataatttgt
+tatttttctttcaggtgtgtgttctcattttacccaagatctttggccag
+tgcagggcatagaagattcattccacaaacttatactgagaagatatgag
+aaatgtggacagaagaatttacaattaaggaaaggctctaaaagtgtgaa
+taagtgtaaggtgcagaaaggaggttataatggactttaccaatgcttat
+caactacccagagcaaaataattcagtgtaatacatctgtcaaagttttt
+cataaattttcaaattcaaacaacataagacatactggagagaaatcatt
+taaatgtaaaaaatgtggcagatcatttcgcaagttcctccaactaactt
+aacataagggaatacatgctggagagataccctacaaataaatgtgaaga
+atgtggcaaagcctttaataggtccacaagcattactaaatataagaaaa
+ttcatgctggagagaaacccctcatgtgaagaacgtgtcagaatctttac
+ctcatcctcaagctttgacaaacataagagaattcatactggagagaaac
+cctacacgtgaagaatgtggcaaagccttgagacaatccacagttctgaa
+tgaacataagaaaattcatactggaaagaaaccctacaaatgtgaagaat
+gtggcaaagcttttagacagtccagaagcctgaatgaacataagaatatg
+catactggagagaaaccctacacgtgtgaagaatgtgtcaagcttttaac
+caatcctcaagccttattatacacaggagcattcattctgaacaaaaact
+ttacaaatgtgaagaatgcagcaaagcctttactcaatcctcatccctta
+ataaacaagagaattcatactggtgagaaaccctacacatgtgaagaatg
+tggcaaagccttttataggtcctcacaccttactgaacataagaatattc
+atactggagagaaatcctacaaatgtgaagaatgtggcaacgccttttat
+agatcttcacaccttactaaacataagagaattcattctgggcaaaaacc
+ctacaaatgtgaagaatgtggcaaagcctttagacagtcctctgcactga
+atgaacataagaaaattcatactgcagagaaaccctacaaatgtaaagaa
+tgtggcaaagcctttagatggtccagaagcctgaatgaacatacgaatat
+tcatattggagagaaaccctacacatgtgaagaatgtggcaaagatttta
+cttggtcctcaacccttactgtacaccagagaattcagacaggtgagaaa
+catagttgataacatagttgaatgacatttctagtaatatgtttcctttg
+gctttaaacagcaaataaagtgaagaatattgttccatgttcttttcttt
+atttcttaaaatttttgtaggcacatagtatatgtacatatttctggcat
+atattagttatttgaatacaggcatacaccatgtaataatccatcagagt
+aggccaggcgcagtggctcatgcctataatcccagcactttgggaggcca
+aggcaggcggatcacaagttcaggaggtcaagaccatcctggctaacatg
+gtgaaaccccatctctactaaaaatacaaaaaaataactgggcatggtgg
+tgagtgcctgtagtcccagctactcaggaggctgaggcaggagaatggtg
+tgaacccaggaggcagagcttgcagtgagcctagatagcgccactgcact
+gcacgccagcctaggcgacagagtgagactccgtctccaaaaaaagaaaa
+aatccatcagagtaaatgagatattcatcaccttaagtatttattctttg
+tattacacaagtccagttatacactttatttttcaatgtacaattatttt
+ttactacagatcgttttgtgattgtaatatatcaaagtataattcatatg
+tttctgagtcctgaatgaatacttaaaaaaaatgtttcatatttgtcttt
+gaacatgtagtgtcttgtcctgcaaacacatacggacttttcatttttat
+ttacatgaagttaaatatataaatgtattgctctaaaaataaaccgttag
+gtgtaagaaaattacagagcaagcaatagtgtttgtgtgagagtttgtac
+ctattttccaaagaaaagatcaatattggaacaaagaagattcttttata
+aggtggataatttactagaaatctagaaacctaaaacattgtgaaatcaa
+atctatatttctttggatttaattactgtaaaatctaattgttgagactc
+tccccatgtaaattgttttcatttgttactcatattacagctataattta
+cttgtttcttcttttgtttttactttattatttacgatgtgagctggtga
+gaaattataagaatgatttttataaaatttagtacacaaatttttagatg
+caagttcacaatttgtgtattgttatatttgatctagttagaaaatttca
+ttttgtggctttaactggagaactctatatgaaccgttttctttagttgt
+tcctttcactttttacttgacataaatgagtttatgtattgtgtgccaat
+ttgttcaggtaagtactgggaaatcttttaagtcatggagatgttttgat
+ataaaattgtagtgaacataagaaagtgctgtgtgtgtaatagatgctcc
+ataattagccataaatattctttctggagtcagtttgtagctgcaagtaa
+gagacagaaaatgtctatagtgaagaaatggcattaattgtgcatgtgga
+gaggacatctgttcccaggctgcaaaactgactcattctgaatttaaaga
+gggttttttttttaatttaaaagtaaactttaatgtcaaaaatgcaaact
+tagggaggacataaagatcacatacaaggctgccacttcacacttggagg
+gttgcacagcatctgggcaaaggctctcctcacttcccagatggtgcagc
+agctggacagagatgctcctcacttcccagatggtggggcagccaggaag
+aggcgctccttactcccagatggtagggccgccgagcagaggcactcctc
+atttcttagtgcggccgccaggcagaggcacacctcgtgtccaagaaggt
+gtggcagccaggcagaggcgctcctcacgtcccaggcggtgcagtggccg
+ggcaaaggcgcttctcattcccagacagggctgggggccagggagaggcg
+ctgctcacttcccagacagtggggcagctgggcagaggtgcttctcactt
+cccagaaagttgggcagctgggcagaggcgctccttaaagaggatttgtt
+ttatgtttatcctcagctatgtatgcctcacagctcttctccttgtgtta
+tggctacggttttctcactgttctcttcatgccatgtaatttcacatgga
+ctttccaggttctgataggttcgactttttttaatatggtaaattgttcc
+taattgggactgtttgaggttatttatagcttctcaatgcagcatttaga
+ttgcttgagaagtcttttagtgttcacaggtaagagaagtcagcattgtt
+tttctgcttatgaaagaaaatttttgagattctaaaactgtcttaagcat
+aacactaagactaggtaaagcattaatatgagtgggttgcatattgtcag
+caccatatgaagaaaatatcagaattttgaaatttcttcagagaaaatgt
+atcttagaggtaaattttttaggagacttaatggtagagaagaattttac
+atttaatattctatgacatacttatagcaaaacttttttcatgcagaatt
+ttctatttttgaatgtgaatcttaagtgttggaaaataatagaatggtct
+ctgtagattcaaaatttggaatgatcttttttgtccagattgatactgca
+atcctgaggaatttctcttatgattttttattttagtggatgcagttcat
+ggtctacagttttcattcttagtcatctaactaactttaaccaagtcctt
+ggtaaccttctctggaaaaattttggagagtatcattttctcagtgattt
+ttaatgcaaatttacttactttggtcacagaatggacaattatgggacct
+ttagcaagttacccttttaatgtcttccctataattaccatcagcattag
+aaactccaggtgcttcaaacttaaagcaaaagccctagagtacatcatct
+tgtcttatatagtgttctgggtctcagagtacatcatcttgtcttatata
+gtgttctgggtctcaaacatgctggcaaatattagagtttctgtggttat
+tatattacaaaaacagcacaaaaactatttttgataatactcaaagacag
+accagcatttgaaacattattcttctgtgatggcttttaaaatgcatttt
+taattgacagataaagtatgtatttatcttgtagaacatggtgttttgaa
+gtatatatatgctgtcaaaggcttacttctaggtaattcacatagtaatt
+atttttgtgatgagagcacataacattgactgtcttagcatttttcaaaa
+atacaattcattattatagtcaccatgctgtaaaatcgatttcttgaact
+tattccacctggacatctgtaattatgtattattttacagacatccctcc
+aaatgcttttttttctaaataaccaagtatctggtaagcagcattctgtt
+gtctggtttattttcatttagcatactgtcctccaaatttgttcatattg
+ttttaagtgacaagatttccttacttttaatcctgaattgtatttccttg
+tgtataccatattttgaaaaaatgaattgaaatatgcatcaatttattga
+acaaatcatgtaatgaaaagatacttcggtgttaaagcatgtattaatga
+aatccagcttttacacattttatttttttgagatggaatctcgctgtcac
+ccagtctggagtgcaatggtgcaatcttggctcactacaacctctgcctc
+ccgggttcaagcaattctcctgcctcagcctcctgagtagctgggactac
+aggcatgagctaccatacccggctaatttttgtatttttagaagagacag
+ggtttcaccatattggctaggctggtctcgaactcctgacctcatgatct
+gcccaccttagtctcccaaactgttaggactacaggcatgagccaccaca
+cccggcctacacattttattaatagttaatttgtactaaacactacccat
+aacactgtgttaataaatttaattttcacagtaattccatagcataggca
+ttattattatccttattttaaagagaaagaaatagagccacagagaaaaa
+ttacttgctcacaacagtggagccagttttaaaacacagggaactttgac
+tccagagaaaacactctttgttaaacaccctcttcaaacagaaaataagt
+gattatcttcaacacccattcttagtaaatatttaacaaaattaaatcaa
+ctgatacattttttgttatatgtgtgtgcaaatgtgtgggcggcaagcca
+cccaggtgcagaggcaagagaccgaggacacgagctgttccagtataaca
+aaatgtaaaacaacaatagttacgccagacatagatcttagatatgatta
+tatatgaatataattaatcagcagtacttattctttattccaatattata
+ataatcctcgctctataatcataacctaggaaaaaccaggccatacagag
+ataggagctgaggggacatagtgaggagtgaccagaagacaagagtgcaa
+gccttctgttatgcccagaaaaggccaccagagggctccttggtctagcg
+gtaacgccagcgtctgggaagacgcccgtttccaggcggactgtggtcca
+gcggtagcgtgtcaaggaaaaacacccactacttagcagaccgggaaggg
+gaatctccctttccccaggggagtttagagaagactctactcctccacct
+cttgtggagggcctgacattagtcaggctcgcctgcagttatccagaggc
+ctaaccgtttccctgtgatgctgtgcttcagtggtcatgctcctagtccg
+ccttcatgttccatcctgtacacctggctctgccttctagatagcagtag
+caaaattagtgaaagtactaaaagtctctgatatgcagaaataatggcat
+aagctgactctctctccctctctctctgcctcggctgccaggcagggaag
+ggccccctgtccagtggacacgtgacccacgtgaccttacctatcattag
+agatgactcacactctttaccctgccccttttgctttgtatccaaaaaac
+agcagcacagccagacattcggggccactacgggtctccatgacttggtg
+gtaggggtcccccaggcccagctgccttcttttatctctttgtcttgtgt
+ctttgtttctacactctctcatctccacacatggggagagacccaccgac
+cctgtggggctggtccctacacaaatgtataaattatgatacataaagga
+gaaatacttcctctaacgaaactatataaactctagaaattgctctttgc
+tactgacatgtacttgggaacaacctttctttcaactgtccttgccaccc
+ctccagcacttcagaatatttatagcatgatttttacgtaaacctgtagt
+cagcaaatgctgtaattaatcaaatatttactacaaaggcaagcagtaca
+ctatgattttattactttcttgatacaaattttgagttaattatttcact
+ctatattagtatcctttgtgcctttttctcagttttgcctaatactagca
+attatcttacttttaaactatttgtttataaaactttatctctgggaacc
+tcagctcagcagagtgcatagccctgaccagagccctagaactagaaaag
+aaccaaggagttaggtactttttatacagattccaaatatgccattttag
+tattccacaattatgccaccatttggaaagaaaggattgttgacagcaaa
+agatacccctactaaatatgggtcacagatattttaccctaccctaggct
+atccacctaccacagaaagctgcagttcattgctggggctaccagaaatg
+ccaagatgagattacctagagaaacaggagggtcggccaagcagcaacgg
+ccaccaccctttccggggaactccttatggcccttatcccaactttgcct
+aacaacctgcccaccctgcaatggggtatcaaatgtgaatatactctagg
+actgaaagattgtataaattgggagaggttctttatttcccccaggttct
+ccagcagaaagcaataagggcactccataattcttgtttctgtaggagag
+gccatctccatcagctataaccaaaaaaaaaacaaaaaactcctcttttt
+gacaagtttgtaaagcctgtccatctgggtctataataatcctccaggcc
+ctatgccactcctctttattcagccagttcagcaacaagaaacctaccca
+gtgggaagaatggtaggtagactttaattaattgccagcctatcgaggct
+agaaatatctcctgatccttgggaatgcctttactgcctgggttgaagcc
+tctcatactagaatagaaaagattcaggtagttgtcaagatcattctgaa
+agaaattatctctttgagcctccacagtcttcacaaagtaacaatggcct
+atattttatttcacaaactacccaaacagtggcaaaagccctagggatat
+aatacttttcacactcctcctgaaagccacaatcttccaggaaggtagaa
+aggactaatcaagctattaaaaggacctcgagcaaatgatgccaggaagc
+ctctttaccatggctaaaacttctacccatggcacttcttcagatcagaa
+cagcccttaaattacgtctatggcttagtttctttgaagtcctatactgg
+agaccctttctacatgcaaacctaatattatacccagaggttacgaaatt
+aacccagtacataaaatccctgacttaatttcaagaggtcgtccaggagt
+ttggacagaattctgagtctaacccccctaacaacccatataaccaggca
+ggaaaacaagtcatcattaaagtctggagagatggatctctcagatctca
+actaaccccgtcacaaaagaacaatgttactatcataatttccaccccaa
+tagctatcaagtttcctggcatccctagctggacacattacttctgaata
+caactggaaacacattaaggaaccaaagattgaaccaacacttacctact
+cctgtgacccacaggaggacttacaaatttctctccaaatgagaagataa
+gtaatgctctccctccttttacctcaaagtagtgtgatcccaataatggc
+aagtaatgctctccctccttttacctcaaagtagagtgatcccaataatg
+gcaatcttatttgcagtggtgctgttgattcttactttcaccctaacttg
+tgcaccaccaggagttccattaagagttttttttttttttttttttgaga
+cggagtctcgctctgtcgcccagcttggagtacagtggcgctatctcagc
+tcactgcaagctccgcctcccgggttcacatcactctcctgcctcagcct
+cctgagtagctgggactacaggcacctgccaccacacccagctaattttt
+tatatctttagtagagacaggtttcactgtgttagcaaggacggtctcga
+tctcctgacctcatgatctgcccacctcagactcccaaactgctggaatt
+acaggcatgagccaccgtgcccagccatctaatactaattttttaaccta
+atttagttattttacttttgactgctttagtccatcagcaatgttagtaa
+tactttggtgtttatattgcaagtcctaatactctttgcaaacttactaa
+taaacctttgttactgtaaaccaacaccctctccagggaagtttcctatg
+tccctcctacatttacacatcaaagccataatctgagtagtgatctctct
+aataatcattgcattaacagttgctcttaacaagcatctcaatttggccc
+tattctgaaccatgcagcctaatgttctctggtcattactcatactcttt
+tgttgttgttgttgcactctgcaggcaactccacaactactaaactctac
+caattcttcctatgcctcaaacctgttagctagtcatgaattcctcttca
+ttcagggtgggaatggcctacttggccacaatacaagaatgggcaacttc
+tcaagcccaacttagcttcacctatcatcaggacctctctatacaaaaac
+cttccctctgctaacataatatttttaatacaacctaaagcagcttttaa
+agattttcttaaacccacccccattgattcaagccccttgttctcccctg
+ctaccctcattggccaggcactcctatacatctgtgctactgtaaattcc
+agatccattgtgggtgctttagacccagcacaatgcaacacaacaagcac
+cattattgatatttctcaaaattttgtttcactaaatattctcaacatca
+aatgagattttctattctccctccaaatgttttaacacctggaccattca
+tccaaaatgatgcctctgagttctgcgtcagtcacccttcttggagtcaa
+cccaacccatggtgttgaccaagccagtataaattatgcaaaaggtttca
+agtctttaatttctttcagaaaatccttttctttgacactactagaaaca
+tgcctatgtttaaaaaaaaaaaaataggacccatgtctggctcccctggc
+agcagcaactttagtggcaggatctcacatgtcgggtagccaacaaggac
+cctggtcaatgtttggaactgacctcaccttctgcatccatttttatcga
+ctacagaactttacttcctgtgtgaaatgcaggcttatctctgtctctct
+ggaaacttgacgagcacaagcactctggcttccttcacccctaacatttc
+cattgtcccggttgatgcttccttgctgttaccctttactacctcacacc
+agatcgactaagcagtttatcttttttttttttttttcctgagtttggca
+tctcaggtgccactataggaatagctggcataattattgcctcctcaact
+taccaaaacctgtctctggaactgactcacaaaataaaaactactgctca
+gactcttacagagtgacaccaacaagttgattatctcgtggctgtagttt
+gaaattgtagaggtcttgctgcagctcaggaaagaatctgccttatgcta
+ggagaaaaatgctgtttctgggttaacagattagggaaagtccaggacca
+tgttagaggttttacaaaccaggcctgtcaccatcagaaacatgccactg
+aaagctagttctcttggggtgccacttggttccaattctcatgacatccc
+actttttggggatccctagcctttgtcttcctttctctcttttgtgagcc
+ttgctcactaaatctagtaaccaggttcgtttcctctcacctagaaactc
+tcagacttcaaatggtcctgcaacaggaatatcgacctattttcccccaa
+tctgcacagccatgtccctacacatttcctctggacaatgcaagttcaac
+cttctgggagaacatggatggaatctttttctgacaaaaagcaagagaat
+gagatactgatgaattctttatctcatattaccaggaagtagttacagaa
+gacccacagtgcccctagactcaaagatttttggagtctcaatctattga
+ggagggaacgttagaggaggcagttagacatgagcaggaaaaagcccctg
+ggggagaaaaatctcatgctccaaagacaacccaagatatgtacgctaaa
+tttgagcagagtggacaggaaatacccatgaagaaagaatacccagaaac
+accccttaagacacccaataattgctcatactgtgattaaactgtcagaa
+tgtagctagctatatgctgacaaaaagagggaaagggcaaaaggaaactt
+cctaagagatatgcaggcgtagtaagtacagatttgactgctatatgact
+ttcctagggtagtggtaataagctattctgccatcaaaactcattgatca
+ctggaactcacacatgtacatcagccgacagtaaggaagcatctcataga
+cctgggaagaaactcagtgaggataaaagaagagatttaccaggaagcag
+gaaactccacaaagacaaaggcagacacttaagacagaggtgggaatttt
+ttttaagtctataataataaaaactgcaacatgtaaatctcagggctgtt
+tccagctgagccaatccactcctcctttggtgtgttctttattttccttt
+aatgaactctctgcttgcttcactaattgtctctgggctgaattgtttct
+ctcaagaaaacaatagctgaggaccttatatatgctgaattacattaatg
+gaattaatgaatgtttgaattcaatagctgccataatcgcctaatttttt
+ctagagaaggtgaccaagaacttggataaagttagatgactaaaaataaa
+aactgtaccccatgaactgcatccaccaaaacaaatttcaaactcaagat
+tgcaatacgaatctcaacaaaaaaagatcattgcagattttgaatctaca
+cagatcattctattatttttgcaacacttaacatttagtcaaaaatagaa
+gattctgcataaaaaataagttttgctatgtcatagaaaattatatgtaa
+aattcttcatctaccattaagtcttaaaaattttatttcaaagatatatt
+ttaagagatttcaaacttctgatgtgtttcttcatatggtgcttacaatc
+tgcaaccaacttatatttatgctttaatatatattaaggtatgttacatt
+taacacactttgtgttagattctcatacaatttttcttttacaaagagaa
+aaacggtgctcacttaatcctcttacatgtggacagtgaattagtcttac
+ctcaattacatgatctgaatgttgcattgataagctataatctcaaacac
+gccagttaaaaacaatatacattaaaaattccaaacttctcatcagagcc
+tagaaagtccaagtgaaattacatggcatgaagagaacagtgaggaaact
+gtagccataacacaaagaagagcagtgaagcatacatagctggggataaa
+cacatgaagacatcagaaaactaaagacaattagaaaataaaaacagagg
+ccaggtgcagtggcggatgcctgtaatcccagcacttttggaggccgagg
+taggtggatcaccaggtcaagagatcaagaccatcctggcaacacggtga
+aaccctgtctctactaaaactacaaaaattagctaggtatggtggtgtgc
+acctgtagtcccacctacttgggaggctggggcaggagaatcgcttcaac
+ccaagaggcggaggttgcgctgagccaagatcatgccattgcacttcagc
+ctggtgacagagtgagactgtctcaaaaaacaaaaaaagaaatataagga
+aaattaaatgttccaataaaatataactatacacattgtaaaattacatc
+taaaaagtattttctgtgcactaactttttaaaaaaattttataatttct
+gaccagcccacatactttatggagttaaaaaaaaagaatgagaaacaaga
+aaattatacctctagcatgagcaccacattaaaacagagactttttacag
+ggagattctcaaaaatgatccattagattttacagtaattacataaaaat
+aagaaaacatagattttaattcaaaatgttttaggtttctagatttccag
+taaattatccacagtattaatagaaacttctttgttccaatattgctatt
+ttcttcggaaaataggtacaaactctcatgcaaacacaattgcttgcttc
+ataattttcttacacccaaggtttatctttagagcacaacatttatatat
+ttaactccatgtaaattaaaactaagtctgtatgtttacaggagaacatg
+atgcatgtccaaagataaatatgaaacatttttgaaaatcattcaggact
+caggaatgtatgaattataattatactctgatatacttattacaatcata
+aaatgacctgtagtagaaaaaattgtacatttaaaaataattgaagtgta
+taattagattgtgggtaatataaaagataaatgctggagaaaccccaact
+ctactaaaaatacaaaattagccaggttgccaggcgcagtggctcacacc
+tgtaatcccagcactttgggaggctgaggcaggcagatcacgaggtcagg
+agatcgagaccatcctggctaacacggtgaaaccccgtctctactaaaaa
+tacaaaaaattagccaggcgaggtggcaggcgcctgtagtcccagctact
+tgggaggctgaggcaggagaatggtgtgaaccctggggggcggagtctgc
+agtgagccaagatcacgccactgcactccagcctgggtgacagcgagact
+ccgtctggggggggggggggggaattagccaggcatggtggcacatgcct
+gtgatcccagctactcaggagactgatttaggagaattgcttgaacctgg
+gaggtggaggttgcagtgagccaagatcgcaccattgcactctggcctgg
+gcaacaagaacgaaactctgtcccaagaaaaagaaaaagaaaaaaaaaag
+ataaatgcttaagataatgaataactcatttactctgtcatttatatatt
+gtatgcctgtatcaaaataacccatatataccataaatatatacatagtt
+atgtacccacaaaaactttttaaaaatttaaataagaataaaaatgcaac
+atgggaacaatattcagtttacttgctgtttaaagccattggaaaaatag
+actagaaatgtcattcagctatgttatcagatagtacattgttagcatct
+cttacctacacccttgagtaaggtggaataggtgaaagttggtggcataa
+cacatcattcaaggcacaataatttctacacattaataattttatttaaa
+aaattaaggccaggcgcgatggctcacgcgtggaatcccagcactttgag
+aaactgaggcgggtagatcaccaggtcaggagctcaagaccagcctggtc
+aatatgctgaaaccctgtctctactaaaaatacaaaatgtggccaggcct
+ggtggtgtgtgtctgtaatcccagctactcaggaggctgaggcaagagaa
+tcacttgaacctgggaggcggaggttgcagtgagccaagattgtgccact
+gcactccaggctgggcaatagattgagactccgtctcaaaaaaaaaaaat
+taagttcacacatgatcttaaaagacaattttaaaatttacagcatttta
+ttattaaataaatgtacaattggtaaaacaatttactactaaaattcaga
+ttgtttctcacaataatgcaaaatgttactctgaacacctacttcatgca
+tcactctaagtcaaccacaaaaatcctctctgcttagattttcctcaggc
+atctttcatttgttttttctctttcatgtaaaagttcatgaatactgccc
+acctaatggaatttctcatatctctggtgcagcaataattcatcacatgc
+tttcacataaatgagaaaactgaaatactataattttggatttgaattat
+ttgcttttcaaaaaatctatactttttttcaagtaaaaaaatatactttg
+aacgaaatctcttcaaaaatctacttcttttcaacttatatacgcagaac
+ctttttttttttttttgaggtggagtcttgctctgttgcccaggctggag
+tgcagtggcacgatctcggctcactgcaagctccgcctcccaggttcaag
+ccattctcctgcctcagcctcctgagtacctgggactacaggcgcccgcc
+accacgcccagctaattttttgtatttttagtagagatggggtttcacca
+tgttggccaggatagtctcgatctcctgacctcgtgatccgcccgcctcg
+gcctcccaaagtgctgggattacaggcgtgagccaccgtgcccggccaac
+aaagaaagtttctaacaggttgaactttggatttttttacacttaatact
+ccgatttcttgtaaggtgttagttccttagttctttctccagtaaatcct
+ctgatgtttacataggcttaattttagcctaaatatttctccacatttat
+tgcatctacaaattctcttctaatataaactctctagtgtttcttaacct
+gcagtttttgaacagatgtttttccacatttattacatttgtcgtatttc
+gctccaatgtaaattctctgatgttgaacaaagtttgagcaactgcttct
+gagtcttccgctagtacaaaatgtgtacagtaagatccaggatacaagta
+caggtactacaccctctttatatttgtattgtctgtcttaagaatactct
+tcttcgctttaatggcctatattttctaaaaggtctttcaacagaaatta
+catttataatgcttttgttaaccataaattctgatatctggtaagatgtg
+agtagaaattaatggcttttgtatttttatatttgtgcaattattctcat
+gtataaatgctatcacatgcaaaaagatatgagcattgattaaaagtttt
+gccacattttttgtatttctacttttcttcagtagtaattacatacagta
+agatgtgatgagaatttgaagtctgccgggcgtggtggctcacgcctgta
+atcccagcacttggggaggctgagatgggcggatcacgaggtcaggagat
+cacgaccatcctggctaacatggtggtaccccgtctctactgaaaataca
+aaaaattagcctagcatggtggcgagcacctgtagtcccagctactcggg
+aggctgaggcaggagaatgaagtgaaccgaggaggcagagcttgcagtga
+gccaagatcgtgccactgcactccagactgggggagagagcaagactctg
+tctcaaaaaaaaaaaaagagagaatttgaagtctttgccacattttaatt
+tttcatatggcttctcatcaatatcatttatcttatgtttagaacacagt
+gaggtgtggttaaaagctttctcatatttttcacatttctggagtttctc
+tccattatgaattatcttacgattagaaaagattgaggaacatttaaaga
+ctgccacattcttcatattggtaagacattcctccagtacgagttctctt
+atgtttaagaatgctggagtacagcttaaaggcttttccacatcctttac
+acttgtatggttttatctccagtaagaattctccctttgggaggccgagg
+cgggcggatcacgaggtcaggagatcgagaccatcccggctaaaacggtg
+aaaccccgtctctactaaaaatacaaaaaaattagccgggcgtggtggcg
+ggcgcctgtagtcccagctactcgggaggctgaggcaggagaatggcgtg
+aacccgggaggcggagcttgcagtgagccgagatcccgccactgcactcc
+agcctgggcgacagagcgagactccgtctcaaaaaaaaaaaaaaaaaaaa
+aaaaaagaattctcctatgtacataaaggtttccggactgtctaaaggct
+ttgccacattcttcacatgtgtagggtttctctccagtatgaatcctatg
+ttcaattagggttttggagctattaaaggttttatgacattctaaacatt
+tatagggtttctcaccagtatggattctcttacgtttagcagaatttgag
+gatgaggtaatgactttgccagattccttacatttgtaggtgttctctcc
+attatgaattttctcatgtttatttatgggtgaggaccgtttataggctt
+tcccacattctttacatttgtaggattcatctcccatatgaattttctta
+tgttcactcagggttgtggaccatctaaaagctttgccacattcttcaca
+tttgtagggttgctctccagcatcaattttcttatgttgattcaggtatg
+cggactgtttgaaggctttcccacattctttacatttgtagggtttttct
+ccagtatgaattcttactttcattcagggttgtggaccatccaaaagctt
+tgccacattcttcacatttgtatagtttatttccagtataaattttctta
+tgttcattcaggtttgtggatcatccaaaggctttgccacattcttcata
+tttctagagtttctctccagtataaattttattatgttgattaaggtatg
+aggaccacttaaaggctttgccacatcctttacatttgggggttttatct
+ccagtatgaattgtcttatatttattcaggactctggaacgtctaaatgc
+tttgccacactcttcacatctataaggtttctctccagtatgaattttct
+tatgtttactcaggtatgtggaccatccaaaggctttgccacactcttca
+cattcgtaaggtttctctccagtatgaattgtcttatgtttattcagggc
+tctggaacataaaaaggctttgccacactcttcacatctataaggtttct
+ctccagtatgaattttcttatgtttactcaggtatgcagaccatccaaag
+gctttgccacactcttcacatttgtaaggtttctctccagtatgaattat
+cttatgtttattcaggtctgtggaccatccaaaggctttgccacactctt
+cacatttgtggggcctctctccagtatgaattctcttatgttcattaagg
+gttgtgaaccgactaaaggcttttccacattcttcacatgtgtagggttt
+ctctccagtatgaatactcttatgtttattaagggttgcggattgtctaa
+aggctttgccacattgttcacatttgtagggcttctctccagtatgaatt
+ctcttatgttcattcagaactgaggacctactaaaggctttgccacattc
+ttcacatgtgtagggtttctctccagtatgaattctgttatgtttagtaa
+gggttgtggacctattaaagactttgccacattcctgacatttgtagagt
+ttctctccggtatgaattttcttatgtttggcaacatttgaggatgaggt
+aatgattttgccacattcttcacatgtgaagggtttctcttcagcatgaa
+ttctcttatgcttagtaagggttgaggacctattaaaggctttgccacat
+tcttcatatttgtaagatttctctccagtatgaactttatgtttagcaaa
+gtttgaggatgtggtaaagatgttgccacattcttcacatgtgaagggtt
+tctctccagtatgaattatctcatattcattaaagattaaataccattta
+aagtctttgccacattcttcacatgtgtagggtttctctccagcatgaat
+tccttgatgttgagttaggtctgagaacttctgaaatgacttgccacatt
+ctttaaagtgtttctctccagtatgtcttatcctacgttggtttgaattt
+gaaaatgtactaaatactttgacatgtacattacactgaaatattttgct
+ctggatagttgacaagcattgattaaattcattataacctcctttctgca
+ccttccttttacagctttttcttaattctaaattctcatgtccacatttc
+tcatatcttcttaatataagtttgtggaacgaatcttctatcccctgcac
+tggcaaaaagtcttgggtgaaatgagaacacacagctgaaagaaataaaa
+ataaattatcctgcttactagattcatacgaatatactttaaaaatctaa
+tatataaacttatacaaagtacattagtaagatggcataacaaaatacca
+caggccataatttcttcacagacatatatatgtaacaaacatatactgat
+caaaatgccttttagtgaaatttataaatgagttacatgcaatgcctcag
+gtaagcacaatgccaagagccacatagaacaggatacaaagtttgttaca
+tttaccaaccacagttcttcctcctccccaatatagcactgtgccattag
+aagtaaactgtcaactcctgtcttcttacttaaaagaaaagaaaaatact
+gacacgtatccttacttctggcttttggggatctttacaaaaactggttt
+ctgcctccaataacaaagagtgctgaaagaaatggtgatatacttaggaa
+ggacaggttgggtctgctaagaccaaatgtacatgtttcaagagcagact
+gaagtgctaaatacagacaacagaccaagtgattaaagactcttaagagg
+aaacatgaacaaacccttttaactaaaaaataaacacaaaattctagaca
+agacacatccttccaacatgtatgagaggttactataatccgtatcaaag
+acaactggcttcagactatgtcaggagaaaacaacattgtaaaggttgtg
+ataaatagcttttggttaatgttcaaataacaagcaaatattataatgta
+tacaaaatattagaacatggtctaattaaacaatttaaaatttttcagaa
+aacaaccataaaaacaaagatgtacaaatttttaaaatgtaacctgaata
+atgctgaatcagctaaatggaaacacgtacaactaaatgtaatcagaaaa
+atgagaacatcaatgaaaacattaaaaacaaaaaacaaatcatgaaggtg
+aaaaatgcaaaataaagacagaaattttcaagttaaaaaaggatataaaa
+acggaagaagctcaacaaacttcaacaaggttacacacacagatttacag
+caaagcacatatataagcaaagtttcaaaaatcaaactcaaaaacgacat
+cttaggagctgcaaaataaaagtgatgtgtcatttataactgtggtctta
+aaagattaccagtgaatctgtcaacaaaactatttcgcaacagaaagaat
+tgggatattgttaaggtgctaggaaaaaaaaaaaaaacttctatgtggga
+atcatataaccagcaaaactgtcctaaaaatgaagaaagaataaagacct
+ttcaagataaccaaatgctgaaaaagtatattagcacaacacgtcttacc
+aaaaaaatgctcaagaaagtatcttccagtgaaaataacataatgtaaga
+aagccaaacataatcatatgaaaatatatagctttctgaaaaagatatgc
+acatccacaaagttctgtaccactatcatattacagaaaatattgtaatt
+attctctaaaattttaaagaggaaagcataaaaatgatcataaactgttc
+atcataatctggtaataatacacaacaacaatatgattactgacatcaat
+aatgaagttgagggcagatgtaatgaggaggaattttcaaattcaatgga
+agttaagtttttaccagtttaaaatatattattttaacttaaagaaattt
+tatgtaattctcaagataccagaaaaaaagtatctgtatagatacaccaa
+aaaataagaattaaaggtgtatcaatacaaaaataaaaaagactaaggaa
+gacagaaaaagaaaataagggacaaagataaaataatccagtaaaacaat
+aagatgagtaagtctatttcagcaaattattcaaatatttatgaagtaaa
+gtttccattcaaaatacatgcaccaaataaggggattgactgcaaaaatt
+aaaaaacaagatccaacttgcttttctacaggagtcacttgagatgtaat
+gatttaaaaagactgaaaaaggcaaaatgaaagaagagatttcatgcaaa
+taaccaaataagaggtccaaattatgtaatacaaagtacatcttaagtca
+aaactgtcctatttcataaaatatactttaaaaagtcataagaaagaagg
+acattaaacaataataataataaaggttcatttactgggaactaatgaca
+aacatgtctatacatacgttaatatgtgtgtgtgtctcccccacattgag
+ttccaaatatacaaagccaatactcacagaattaagacaaagacagcaat
+ataactatagtaggatatttaaataccccagtttctgtaaggaataatga
+aacaagataaaatattcataaggaaacaggagacttgaaaccagtattaa
+actattacgcctaacagaactgtagagaacactgctcagcaacaactaaa
+tacacacccttctcaatacctcatacaatattctccttgatagactacat
+gtcagggcacaaaaaaagtcttaaagttttaaaattgaaattttacagat
+tacttttaatgaccaaactggaatgagagtagaaataaagaaaactaaaa
+aatttacatatttatagaaattaaacaacacacacttaagcatgctcttg
+ttcaaagtttgaaataatgagaatatctagactgctcaatataatctaca
+gattaaatgcaatccctgtcaaatttaattaaattattgtagtaatagaa
+acaacaattcccatattatatggaattaagaaacagtgaagtacccaaca
+atcttcaaaaacagaagcaatctcagaggcttcacagctcctgatttcaa
+aacacatacaaatctaaagaattaaagcaatctgggataggtataaagct
+gaacagctagatcaactaaataaaatctggcaaaaatataaactctcaca
+catggtcacatgaagagtaatttagacactcataattattgcagcactgt
+tcctgaaagcaaataacagcaacgcatatttctctcactaaataaattga
+gaaatataatttcaattattaaaataatgaaatattactcagtttgtaaa
+aagcaaaaaataaacaagtacaataaagataaatcttgatgacattatac
+aacaaaaagtcacgaagagacaaactatatgaatcaacttacacgagata
+tctaaagcagtttgactttaaaataaaaaacagaattgtttgtgtagagt
+gagaaaacagaaaaagtaggtagttatattgagtgttagctttgcaagat
+aaacatattctaaaaatatagtgcataaaattattaataaaatgactaag
+ctgaatatttaaaaatatataagattttaaatgttatgcatttttgaaaa
+caatatataaaagagatggaggtatgagttttggaaattatcttcaaatc
+acaaaagtgttacacacacacaaatatagatttacaaataaatagagggt
+aaaattaggagaatttcaatgactactcacctaggcagggtaaaaccacc
+attgttacacacaaacaaaataagtatacaacttaaaaacaatagggaaa
+caatatgcagagagataaacacagagactcttatattggaaatagatata
+tcactgatccatatttgacttatgctccacagtcttacagtgtacatagc
+tgaatgctgtcatagacaataataatactaaataaaagcatccttgttgt
+gttccagatctcagataaaaagttttctgctccttcctattcagtatgat
+ttcagccattaatctgtcatatacaatctttattgcactgaagtacataa
+tatctatacctaatttgttgagtttcttaaatcacaaagacatgttcaat
+gttgccaaatgctgcttctgcatcaacaataaaaaataaagatttctagt
+agcaaacataattaaaaaggtgaacactctttacactgaaaattgtaaat
+aattaaaaagtgaaaaagacatgaaaatttgaaagatatatattgctcat
+aaaattaaaaaatatgaaagtggctatactactcaaggtgatctatagat
+tcaacgcaatctcttatcaaaataccaatgatttttttcacagaaatgga
+aaaaacaaacttaaacttcacagggaaccaccaaagacccccaaatagca
+aaagtaatcctaagggggggacaaaaaaaaacagctggaagcatcacact
+acctgactccaaaatatactataaagctataataagcaaaacagcatgat
+aatgacatagacagatcaaactatccagtgagcccagtaataaattcctg
+aacctagaaccaagtgattttcaacaaaaatgtcaagaactcacatttgg
+aaaaagacagtcttttcaataaatggtgctatgaaaattatttacatgat
+aatcaaaaaaataaaactaggctcctacctcttacaatataaaaaactca
+atcacaaatacagatttaaatgggaaactcaaacctataaagttatttga
+aataaacatacaggaatgcattaccacatagtacagagaaaagaatctta
+agacctcaaaatcacaggcaaaagaagcaaaaatatgcaaacgggattac
+aagaaactaaaaatgctttgcacagtaaagaaaacaattaacaaagtgaa
+gacgtaatctacacaatgaaataaaatatttgcaaaatgtacatgacaaa
+agataaatttacagtataacaaacttaacaaaaataacacacaatttaaa
+cataggcaagaggccttaagagacatttttcaaaagaaatacagatggcc
+aaaaagtacatgcaaagatgctcaacatcactaattgtcagagaaatgca
+aatcaaaaccacaatataagacttgactccagttagaatgactgtaatta
+gaaagacaaaaaaaaatgttagtgagaatgaatagaaaaggaaacacggt
+aaaactgtaagttagtagagccattatagaaaaaaaacaagtatcacagg
+ataacatatatttaaacaatcaacaaatggtattttaacactgtttcttt
+gactccccacctagacaataaaccatgaactaccacacacacacaaaaaa
+aattcaaattgctggatcacaggttctatttttaattttttaattaaatg
+ggattgctggaacatacgttagtcctattttgtttgtagctaaagaaaac
+aaaatcagtatgtcaaagagaaatctacactccaatgtttattaaaacac
+tatttatagccaaggtattcgatcaatccaagtgtccaaaacttggatga
+ataaagaaaatgtggtatatatacacaacaaaatactattcagctacaaa
+agagaatataattttgatatttgccacaacaggaatgaacctggaggcca
+ttacgttaagtgaaataaaagatacactgagacaaatacaaaagatctta
+cccatatgtgaaatctaatataaacatttatgaggaaggctttatgcaac
+tagtctcaacaataactttttgaatacaacatcaaaggcttaagaaaaaa
+aatatggacacacacatggtaccacatcactgtatccaaaatataccaaa
+aatatccgaggcaggactttacatatttacacatgcatgttaattattat
+ttgcaaaagacaattcctggaaacaacacaaatgtccctttagagatcaa
+tatcagattttttaaatgtgacatacatacaatattttattttaaaacag
+atattctgacacatctttgtggaggaaaagttaaatattaaatttgaact
+caactgaacatgacaaacaatggtcaccaaatcccagaatgggttgtgtg
+agcccccagcactgtttcaaagaaatttctatttcaatctattcctatat
+gttagttattgaaaaacaatagacaatcgcaaacacaatttgaccttttt
+gtgttccttgagtccagtcacaaagggcccttgtgactgggcctcatgcc
+aaacaactcattacaaaaagagctagggtcccagaccatgccgaagctac
+atgagacctctcttcgtctgtgcacggaagggtggcggactctggagccc
+aggctgttgcttcccagtctagtggtgaatcctccacaggctggtgagtg
+tagtgtctgactctggagcccaggctattgcttcctagtctggtggtgaa
+tcctccatagtctggtaaatgtaaatatatatatctccttttccttctcc
+ccttcccattgcaatttgcttattgtatcatttgcttatatatctgcatt
+gccatttacatgggataaaggttgtttacccttaaagatattgtgtgtgt
+gtcttttcttctcccctcacgcgtttcccgcacaggacaatcttacaaaa
+acaaagcctgagaacattatgttaagtaaactgagatagtgaaaaaaaaa
+acagacatgggggccgggtgcagtggctcatgcctataattccagcactt
+tgggaggccgaggcgggcagatcacgaggtcagaagatcaagaccatcct
+ggctaacacggtgaaaccttgtctctactaaaaatacaaaaacaaaaaaa
+attagctgggcgtggtggtgggcgcttgtagtcccagctactctggaggc
+tgaggcaggagaatggcgtgaacccgggaggcagagcttgcagtgagcca
+atatcacgccactgcactccagcgtgggtgacagagcgagactccgtctc
+aaaaaaaaaaaacaacaaccagacattatattatataattacaccaataa
+gaatataaaaatcagtcaaaattatagaaatagtaagtaaaatggtgttc
+ttcaggacctgaagagaaaaaaatggcagtttattgtttatgaggtatga
+actttactttgataaaattaatctagagatccatttcaaaataatgtaaa
+tgtacttaactccactaggctgtacacttgaaaacctttaagcaatgtta
+ggtttttcatcacaactaaatatttacatctacctaaaaaggttacattt
+ttcaaaaatcaccttcaaataaaaagtgtttctctcacagaataacatat
+actcaaacaataaataggtggtaattttttactgtttctttgactactca
+cctataaaagaaaacagtgatgaccaccagaaagaaaaatttataaacca
+ggtaggggcattatttacacaggcaaacaccacatagataacttttatag
+gctatagaaatgtctgaattacacatatattttaaattgctccaagtgaa
+acccaatgatttttatttgaattaaacaccacatggtcataaaaggtaca
+gagttgaaaattaccatacaaatatgaagattaaaaacaaaaaataattg
+aggagaacctacatgaaaaaagactccccagtaaaatagagtttgaaaac
+aataaaaaattctgacctataaaatatagaatatagatgtagatgtatca
+taaaaacaatccttcaaacaactacagttttcaactgtgactatgtactt
+atgaagatccagcattttgaatctttgacatgcaatgtacagcagtaaga
+aaaaaaaaaaaaacggccagctgcagtggctcacacctgtaatcccagca
+ctttggaaggctgaggcaggtggatctcaaggtcaggagttcgagaccag
+cctgaccatctctactaaaaatacaaaacaaaaaaattagccgggtgtgg
+tggctggcgcatgcctgtaatcccacctactcgggaggctgaggcaggag
+aattgcttgaatccgagaggcagaggttgcagtgagctgagatggtacca
+ttgcactccagcctgggcaacaagagcaaaaaattctgccaaaaaaaagc
+agcagttatgtcctgaaaaaggaaatttatgggagctttggaatccatgt
+caagggttgtgaacccaagactgaggagggctgtattgaaaaggcatgcc
+cttgcttgagtggcatgcttgcccatcacagtcccagctacagaataaaa
+tgtgtccaattttcattgtagacttagctgcagaccatttggttttgttc
+ctgctactagcaccatctgcaaagacacctaggagaatttctaatgttct
+atgcctcaggtgaaaggcctttagaagttggttctatctgtgatctctga
+attagccccaaatccactctttacacatgtcagtcatggtgtggaaggaa
+tcctgcccagacacccacagagagaaacatccatctgtgcccgaatgtag
+gcttgccaataattatttgacagtggatcttgacgtggcactataagctg
+gctccaagtccatgcaaccaagtccagaagaagtttttcctaacctggga
+cctgccaaaaagcacacctgtatgtgcccctgtaggcatgctggctgact
+ttattcccactgtgaattgtaaagcagtcctataaccaagctctggtctc
+tgtcatctagagtctggaagaagtcctacccacctagaaatccacaggga
+gaaataccgttaacccagaaaaagacctgaacactttggtctcagctgtg
+tatcctgaagcagccgcatgaatcagtttcataccctctcagctgtgatc
+aagggtcattactgctcatctaggaacctgtccaatgactaggttagagc
+atttccaaacacctcgcaagagcgacacagcaggagccacacctgctcac
+attgattgtatcagcaccttaatctgcatatataactggaggcttttttc
+ctcagtgccagtcatattgatcaacatcttgaagaaagttcagtcttctc
+agaaaatagaatccacaactgtctgatgccctgatgacaggtctgccaag
+caggaatttcactgcaaacccagtagtagctacgtgacccggattccaaa
+gcactttattgcaacctcagtggaaatctcatcagcccagaaatccaatg
+ggagaagatatttacctcctcaaactagtctataatgactgaaagaggta
+tttactccttcagatgcaaggacatcaaaacaaagcctcatgaattatga
+aggatcaggcaaacataacagcatgaaaggaaactaaaaatgctccagga
+agcactaacaataaaacacagatctaaaaaatggctaacagagaatttaa
+aataattatctttaaaaatctcgataagatgcaaaagtacacatattact
+aaattttttgcaacaatgcatgaagaaaaccaatgataataaagaaagat
+aagccattaacaaagaaccaaggcgatatgctggagctgaagtacacaat
+agtagaactaaaatatttaacagaaagctttaacaggagactcagttata
+cagaaggggaaaaatcaacaaacttaaaagtcatttgaaagttcgtaaat
+agactttttttaaaaaagtgaataaagcatatagcttcaataatttgtta
+atggtatataatataaaaagatgtaaagtgtgacataaatagtgtgttga
+aaggagtaaaactgtttaatatttttatacatagaagttcacttttgctt
+gaggccaggagttcaaaaccagcctggtcaatatagcaggaccctgtctc
+taaaataaatacataaataaaataaaataaagatttcagaaagctattta
+ttctttttttaaaaagaagcagttgggcctgataatgcatgcctataaac
+ctagcactctgggaggccaaggcaggtagatttcttgagcccagaagttc
+atgaccagcctgagcaacatggcaaaaccctgtctctacaaaaaatacca
+aaaaaattagctggacatggtggcatgtgcttgtaatcccagctacttgg
+gaggctgatatgggaaaagtgtttgatattggagagttcaaggctgcact
+gagctgtgaacccaccactgcactacatcctgggaaacaaagtaagatcc
+tatgtgggtaaaaaagaagttagattgttaccttaagctagactttttaa
+actatgagatattttatggtcccttggaaattacaaaaaaaaaaatgttg
+aagatacatacacacaaaagaaattaaagcatataacaagaaaaatgaaa
+caaactcaacaccatacaagggaaggcagcatgaaagaaaaaacagaaat
+tactaaatggttagaaaacaatgaacaaaatgatagtaataagttcttat
+caatcagtaattcctttaaatataaaaaaaatttagttagccaataaaat
+cacattgctatggtttgagtgccccctccaaaattcatgttaaaatgtaa
+ctgccattgtgagaaaattaataagtgaggcctttaagaagttataaggt
+catgagaggatcagtatcattattccacgagtgggttagtcatcatgagt
+gggtctatcataaaagtgagctcgtgttgtgatgtggaaatatgattgtc
+atcagatgggaatgacatgctcttggacttcttggcatcccagattgtga
+gctaaggaaacttctattctttataaattaccaactgtaggatattgtta
+ttgatgcaaaaaataaactaaaacactcgcgaaatgtctgaatagattta
+aaaaatcaacaacatgctgcacacaagcgacttactttagatttaaggaa
+atacataggttagtggttcaaggatgaaaaaaaaattccatgccagtaat
+aactaaaagagtatagaagtggctatatttacatcagacaaaatagactt
+ctaaaaaaaatctgccacaaaaaaaaaaacttcatgatatagtgataaga
+ggctaatctgtcaaaagaatataacaattaaaaatatatatatacccaat
+attggagcacataaatatataaacatatattaaaagaaatggagaaacag
+aaaaacataatactgggggactatattgccctacttaatacatcattcag
+actgaaagttagtaagaaaacaattgcttgcatagcactataaaacaact
+gcaccaaaagacatatatatagaacatttcatccaaaagaataatttata
+ttcttctcaaacacacatggaatattctctagcatacatcataaatctgg
+cccacaacaaagacaaacaagtcttttcattttttaaaagactgaaatca
+tatcaacttgtttgtgttttttttagtttttttgagaaggagtcttgctc
+tgtcgcccaggctgtagtgcagtggtgcgatctcggctcactgcaagttc
+cgcctccagggttcacgccattctcctgcctcagcctcctgagtagctgg
+gactacaggcacccgccaccacgcccggctaatttttttgtatttttagt
+agagacaaggtttcaccttgttaactaggatggcctcgatctcctgacct
+cgtgatccacccacctcagcctcccaaagtgctgggattataggcatgag
+ccaccgagcccagcctgaaatcatatcaagtttttaaattacaattttat
+aaatgagaaatcaatagcagagtgaacattgaaaatcttacaaatatgtg
+tatattagacaacatgcttctgaacaactgatgagtcaaagaagaaaaag
+aaaagaaaaatcagaaagtatcttgagacaaatgaaaatagaaataggac
+atatcaaaagtagaatgtaacaaaagcagttccaagacagaatgttatag
+taatataattttatatttaaaaaatctcaaacactgtaactttaattctt
+aaataacttgaaaaacaataatctcaatgttaggataataaagaaaataa
+taaaaaacagaacagaaacaaattagagacttagaagacaacaaatactg
+ggtgcagtggctcatgcctgtaatcccagctctttgggaggctgaggcgg
+gtggatcacgagatcaggcaatcaagaccagcctggccaacatggtgaaa
+ccaagtctctactaaaaatacaaaaattcgccgggcgtggtggcgggcac
+ttgtaaacccagctactcgggaggctgaggcagaagaatcgcttgaaccc
+aggaggcggaggttgtggtgagccaagatcacaccactgcactccagccc
+gggccacagagtgagactctgtctcaaaaaaaaaaaaaaaaaaaaaaaga
+agaagaaaaagaaacaaacaaaaaacaaaaaagataaaaggcagagaaag
+aatttacatataaaagttttctaagtcaaatattttaagaaaaggaagga
+gtaaatacttttccttttttccagctggaggattaagtctgtttctattt
+tacatttatatttacaataaccacatccaacaattttgcctagaactcac
+ggacatctgatttccagcagggcctggattcaggcacctgcagggtgacc
+tgaggcatactatgttcacaggaaagagtgtttgtgagggaaaaaaaaat
+gcagaataagaaaagatgttatcaagaacccaagagtgagggtcagtgca
+caggtggagaaaggactggttactgctatagatactggcccaggcaggca
+gctctgacttatgaatgtgtgtgtgcagggagataagatggtcaggtgat
+ccagaagcctaggctactggaggaaacaggttactggtgcagattgaaga
+tctgagtggtagaaagaacccatgagtcttctgggcacttatgtgtccta
+ttattggaaaactctagaagcagaggtgctctcagtacaattcctgagaa
+tgaagctttgtcatgggagaagtgtggccacaccattgcctagcgtgcat
+gtgtgtgaatgtgcagaaatcactttatagcaaaaggagtcagaactcct
+tccctttgagtactcagtcccctctcacccccggaggatacctagaatca
+caagacgattcacagtgtgacagcttctgtgcaaaattttaaactctcca
+ttctccaacagacccacggtctccctccaactagggctgctgtgatacct
+ttatgtgtttttgagacaatgtctcactttgtcacccaggctacagtaca
+gtgacacaatctcagctcatgccagactcaacctcccagggttcaagcga
+tccttctgcctcagcccccaagtagctggaactacaggtgcatgccacca
+tgcccggctaatgtttatctattttttggtagagatgggatttcaccaca
+ttgcctaggcatggtgcaaccaggaggaactcccaactctatgcttcttc
+ctcagcagagaaagaaagtgggatatgtgtccacatttctggtttttggg
+gaactgtgcgaagatgagttttgtctcccctgacaaaaagtgctgaagga
+aatggtggtatactttaaattgcagcagctatgcatattttgcattaata
+taacaagcaatcctgaaattttatcagaattaaagagaccagaagtgctc
+aagaattgtcaaaaagagaaacatcagaagcatcatacatcattacttta
+aaaactaattatgaagctatagttattgaaacagtttataactagatttt
+aaaaagacaatgacagtgaacagaagaacatgtaaataatcccttgcatg
+tattatcaaatgaagagtaatttacacatccatattcattgtggcatcat
+ctacaaaactgaaaaaaacttttcttaataaagacaattttgaatataca
+aataaatattattcagcttcttaaaagcagaaaagtttttctatatccac
+aatgaggatacatttttaagactttatttaggtggaggaagccaggcaca
+agaagacaagtgctatgtaattccacttatgtaagatatctaaagtagtt
+aaatgcttagaaacagactaaactgtgacaggggttaactgcagaagaaa
+atgagtagctgttgtttaatggacaacctgttagaatgcaaaacaactct
+ttttttaactttattttaggatggggtatatgtgcaagtttgttatacag
+gtaaacttgtgtcataaaggtttgttgtacagattatttctcatcaaggt
+attcagcctggtatgcattaaagattgaattatacaatacctcctttcag
+accacatggaataaaactagaaatcggccaggctctgtggttcacgcctg
+taatcccagcagtttgggaggccaaggtgggcggatcacggggtcaggag
+atcaagaccattctggctaacatggtgaaaccccgtctctactaaaaata
+tgaaaattatctgggcgtggtggtgcacgcctgtagtcccagctactcag
+gaggctgaggcaggagaatggcgtgaacccgggaggcgaagcttgcagtg
+agccaagatggcgccactgcactccagcctgggcgacagagcaagactcc
+gtcgcaaaacaaaactagaaatcaaaagcagaagcaaaattgccaaatcc
+aagaatatgtgaaacttaacatacttttttttttttttaaagacggagtt
+ttggtgttgcccagactgtagtgcaatggcgtgatctcggctcactgcag
+cctccgcccctcgggttgaggtgattctcctgcctcagcctcccgagtgg
+ctgggattagaggtgtgtgccatcacgtccagctaatttttgtattttta
+gtagagacggggtttcgccatgttggccagggtagtctcgaactcctgac
+ctctggtgatccacccgcctcggcctcccaaagtgctaggattacaggcg
+tgagtcatcgcacgtggccaacacactcttgaacatactcttctttatgt
+caggagatttaatattgtcaaatgacaatactacccagtgatattcaaat
+tcaatgtaatcctgatgaaaacacaaatgatactgtttgaaaaatatata
+tatatatttttttttgagatggagtctcgctctgtcaccccaggctggag
+tgcagtgacaaaatcttggctcactgcaagctccgcctcccggtttcaca
+ccattctcctgcctcagcctcctgccttcagatatactttggatattttg
+aataggtgctcagaagtagaattactggctcatataataactgcattttt
+agtttttggaggaacctccatacatttttttcaggtggttgcatcacttt
+ttccccaccaacagtgcacaagagtttcaatttctctacattctttacaa
+cattttttttttgctttatattggccatcctaattaatgcacaacaataa
+ccttattgtggttttgccttacattactctaaaaattagaaattttctca
+ataattgttatatgtatttcatctctggagaaacattttcatctcttgtc
+tatttgttaatcatgttattctttgttgattttttggaattgtttattct
+gaatgttaacttttgtcaaacacataatttttaattttttttgcttttgt
+gcttcttaggtgggactcttaatgtttgttaatgtgcagagataaattta
+atgtagtctcatttttctgtggttttaagtttgttgctcatgtgtttgat
+gttatatgtaagaaaacattgctgagaccaacgtcatagtctctattcct
+atattttcttctaaaaattgtaaagttataattcttacatttcaatattt
+aactcactcaagatagtttttgtacatggttcaggggaaggatccaacct
+caatttttcccatgtggatacagagtattccaacaccatttattaaagag
+actgtctttttcttattgtatggttatagcaaccttgttgaagatcattt
+gagcatatacatgatggttagtttttgagttctctgttctgttctatcat
+ctatttgttttcctgcaaatacctcactgtttttatttatgtagctttgt
+attctgttctaaaaacaagaagtgttgtgcctctagctttgttcttattt
+tctaagattgggccatgatggtccttgaaattctatgtaaatgtaagaat
+ttttaaaaatatttttccaaaaagtaggctgggcgcagtggctcatgtct
+gtaatcccagcactttgggaggcggaagtgggctgatcatgaggtcagga
+gattgagaccatcctggctaacacagtgatgtaacagggttttgaaaccc
+aaaacatccatgttattgcaacaatattcactgtattagtttatcctcgt
+attgctataaatacctgacactggatatcttatttttaaatagagattta
+attcgctcatggatctgcaggctgtacagaaggcatagcagcttctgttt
+ctcaggaggccccaaaaagcttccaatcatggcaggaagccaagcaagag
+tgagtcatctcacatggtagaagcaggagcaagtgtgtggaagaagctgc
+ttttagaaaatgagatctctttagttattaaaagaaaactgcagaactcc
+tcattggttttcctttacctaatgatttctgtgaagtgagacttgggtag
+taggaagaaggaattagacactctacctgccaccctgcatgtgtgtgcgc
+tcgcgcacatgctgtctacatgtaatccactccttttactttcctttgaa
+actggtaaggttaaaataggggagaaatcctacatgttgcaatgatagct
+ttttggaaaatttaagaaatcaaactctccaggctctccatcttgattta
+tgcttgaattgttatgtgccatatttgctttgaactctgattaccagaag
+ttttactaaaatgttgaagaaataattcactttcacctgctttctagatt
+ttgtacatctcagttcataaagcaagcttattgttagcatagttttctaa
+atgctgcagatttgcagccattaccactacaaagaattttgaatgaggga
+ttttttttctttgttaaaatagttcgtgtttctgtagaaatttcactttt
+agattgaactgcaatggataagctatcaaaaataaaaagaaagaaaatga
+gatctcaggagaagtcactcactatggcaaagacagtaccaaaggggatg
+gtactaaacgattcatgagaagccaaccctacgatcccatcacctcccac
+caggcccacctccatgagggcttgtaatttgatgtgagatttgactgcag
+acacagatccaagccatattatttacaaaagccaaaacatgaaaaaactc
+aaacatccttcaacagttgaataatttaaaaggatgtggcttacacatac
+aatgaaaaattatttagactcaaaatgaaaatatcttgtcagatgctaca
+atatggataaatcttaaagccattattttaagtgaaataaaacactaacg
+aagtgacagtgtaagattccacttatataaggtattttacttagtaaact
+cctacaaaacataagtagaaaattgcttgcctatagttagggttgtgaaa
+cctcagtggagtcaaagatcaaggggggttacttggaaaaagcaggccct
+caccaggtggccaactcaagagcccatagacatagctacagacaaggaaa
+ttatgcacagagtttggtcttactgaggattccaaaaatagttctgtaac
+ctctctcaaattcaatctcagctatagtccagaagtggtccttcccatca
+agagacctgcaggaagacacagccagcaatggccctggaggcaggcctgc
+agatcctggcctcagctgtggtccctgaagcagccctgcagatcctggcc
+tcagctgtggtccctgaagcagccctgtgactcagttctagccatatgta
+gtcacagtctgtggccattcgtacacattcagaggctcacagagagacct
+gtaaaaactgttcccaggtagtcagcagaagccaaacccattcatacacc
+tgttatttgggccatcatatacagacaaacttcaaaaccctagcctacaa
+cctgccatatagattaatgtcctcaaggaaatctaatcttttcagggccc
+agaagaatccataactgtccaaatctctggcaacacaaccatcaaagaca
+caatgcacagcagacccagcagcacccttgtgacccagctacaacccttc
+tctgcaaacccagaggtagtctcatcagcctggggacccaacaaaaggag
+atgtttacctgccaaaaaatagattatacaaactgtaaatcattgttaaa
+tccttaaaatatacagacacagggctgcttcagggaccacagctgaggcc
+cagatctacaagcatgcttccaggaccacagcttctatcttaacatatta
+ccaaatgtaccagaacaattaggcaaggaaaaggagaacaaagctctcct
+gcttgcaaaagtagtaaaaatgttactgtttgtagataatatgatcatgc
+atatatatgaaaccctagagtggaataacaaaaactgaactaataaaggc
+actcattaaggtatcaggatacgtaatcaacatacaaatatctgtaggta
+gtttcttggtttgtgtttataaggcaaggtctcactacaaggcccaggcc
+catctcgaactcctgtgctcaagtgatccacatgccttggcctctgaaag
+tgctgaattacaaaaaggaaccaatatacctagcccaacatacaaatatg
+tttcatttccataaagtaacaaaatttccaaaaaaagaaaaaaattcaat
+ttgcaatactataaaaataagaaattaattcaaaataaatttaaccaatg
+aaataaaaaatttacacactaaatacaagatacaaaatctagtgtataac
+aataaatttagacactaaatgatgacagaaactgaagcagacacaaatag
+ataaaaccagattccatcaggataacagatattgtcaaagtatattttcg
+aaagtgatttgtagattcaaatgtgatccctatcaaaattttagtggcgt
+ttttcacagtaatagtaaacacaattgtaaaatttaagtgtaaccttaaa
+caattttaaataacgtaagccatcttgagaaagaacaaagcgaggggcat
+cataccttctaattttaaactttatttaaaggttatagtaagcaaaagag
+tatggtatgtgcataaatacagatataaaaaaaccaatggaacagaatag
+cccagaaacaaatccatgcatacaaggtcaactaattttggcaagggaac
+caagaacacacaatgcagaaattacactcttgtcaatacgtggtgccaga
+aaaactggatatccacaagctaaagaataaaagtagatcattttcttaca
+ccataccccaaaattaactcaaaatgaaacacttcaatataagataaaaa
+accttagaactcccgaagaacatatatggaaaagccctgttgatactggc
+tttggcaataacttttttgatatgccatcaaaagcacagcaacaaaagaa
+aacacaagtgggattgtatcaaagtaaactgcttctgcacagcaaaggaa
+aagaaaacaaaatttctaaaaaccctacaggatataaatatttgcaagca
+atttatctgataaaaaatttgggaggccgaggcgggcagatcacctgagg
+tcaggagtttgagaccagcctgaccaacatgaagaaaccccgtctctatt
+aaaaatacaaaattagctgggcatggtggggcatgcctgtaatctcagct
+atttgggaggctgaggcagaagaatcacttgatcccgggaggcagaggtt
+gcagtgagctgagatcatgccactgcactccagcctgagcaacaagagca
+aaactctgtctcaaaaaaaaaaaaaaaaagttaatatccctatccgaaat
+gtataagaaacttatacaattcaaagcaaaacaataatgatgataagcca
+ttcaaaaataggcaaaaggttagattttttccccccaaagaagacataca
+tacaaggtaagtgctatatgctgttggtgagatgtaaattgataaagtca
+tcataaaaaacaataaaaaggccgggcgcagtggctcacgcctgtaatcc
+caacactttgggaggctcaggtgggcggatcacgagctcaggagatcgag
+accatcctggctaacatggtgaaactctgtctctactaaaaacacaaaaa
+aaaaaaaaaaaaaaaaaaaaaaattagccaggcgtggtgttaggtacctg
+tagtcccagctactcaggaggctgaggcaggagaatggcgtgaacccagg
+tggcggaggttgcagtgagccgagatcgcgccactgcactccagcctggg
+caacagagcaagactccatctcaaaaaaaaaaaaaaaaaaaaaaaaccag
+taagaaataaaaatggaaatattatataatccagcaataccacttctggg
+tacactaccaaaggaaattaagttagcaccttgaagaaatatcttcagcc
+catgtttgctgtagtatatttacaatagccaaaatatggtgtgtgtgtgt
+atatatatatacacatatatatgtatatatgtatgtgtatatatatatat
+atatgtgtgtgtgtgtatatatatatacacacacacacagtagactacta
+ttcagccataaaagaaaaggaaatctagccatttacaacctggatagacc
+tggaggaaatgatgctaaatgaaattagccaaacacagagagacaaagaa
+actgcttcttctcacttagacagggaatctaaaaatgtcaactcataaaa
+gcagaaagtagaatggtggttgttggtgcctaagggtgggaccatgagga
+gatgttttcaaagagtacaaatttttagttataaattgagtaagtctgag
+aaatctaatgtacaatagcattagattagcaaaatagcattgtttatagt
+taatactataatgtatgcttacaatttgctacaacagtaggccttaagtg
+ttcttattaccaaaaaaaatggttagctatttgagtaatagatgtgttga
+tcaacttgactatattttacaataaaatatgtgcatatcaattataaaat
+atgtgcatatcattacattgtaaatattaaatatagttatactattttta
+tttatcagaaaaattcatatcacgcaaacacagatatatagtaagtactc
+aatgtaaaaaacagattcttgaaaactgcaactataaatgaagcaatgtt
+actatataccaaacataactcttgtttacgtcaattaaagtctggtaaaa
+ttagtttggttttggtttttttggagacagagttttgctcatgtcgtcta
+gactggaatgcaatggcatgatctcagctcagtgcaacctctgcctccca
+ggttcaagtgattctccggcctcagcctcccaagtagctggattacaggc
+gccccccaccatgcccagctaactttttgtatttttagtacagatgggat
+tttgccgtgttggccaggctggtctcgaattcttaacctcgtgatccacc
+cacctcagcctcccaaagtgctgggattacaggcgtgaggcaaggcaccc
+agccctaaaatacgctttctaaaatgatacgttgcttcacttcgtttcca
+agaatctatcaacaatgtaagagtttattatacacatatataacttattt
+aggtgtgtgtgagagacacacatttttatatagatacagatacacgtcaa
+tgacagaatctcaggcttcctactaaataagacaaaattataatagttat
+taagaaataaggtaatgattgagcgcttaatattagcaatgttctaagct
+ggttaatgacatagaacatttaagaaatctagaaggtgagtaaacacttt
+aatccagtgggggccaaaactttgaatgagagggcttttttgcttatcta
+aggtggtggatatcacaaaacttattcacgaacctttttctttaagctca
+tcagctatcattagtattaatgtatttcacgtgtggctcaagacaattct
+tccaatgtggcccaaggaagccaaaaggttggaaacctgtgctttaaact
+atattataatttgaaaattttcacatacagagtttaaatcacaaatctca
+gtttatactaaaacgataacattctgaagtaacattacattttttcatat
+ttaggaaaatgcctattgttctgataaaattgctgagtaataatttttgt
+agaattatatttgcaacctctataggattaaaaatcactaagcagaaaag
+acgcaacatctgtccctgatgttcttgggatttctgaaccaaattccaat
+atgtccactactcaccgtgcacattttagacatgtacaaaaagaatattt
+gaaaaaaatacactgacatagagctcctcaatatacacatattcctatgt
+ctccaaatgcaatggaacagcagtcagatcatgcagcccctaataaacga
+taaagtggacattggctctccctgtaaacttgaagggagatcactaaaga
+aaaaagagaattcttagatttaacagcatgggacagaagatgcccctatt
+catgaatatgagaaaaaaatgcagccttttcagaaattattttcactgga
+gcagagcttcccaaactacattttaaggcctagcttccttctggaccttg
+gtcccctggcctgtgtcctctccttcattcactgtcacctacctgggtgt
+ttggctactgtctcatgtatcttcactttgtagggctcctttctttgctc
+cagatagatgaccaggtctgggttagagatagcaacacctgtttatttta
+aaaaattaacatgctactgttagggattctccaattacctacctaatact
+atactaagtagaaaagagaaattatggaagatcctacataattaatccaa
+aaattgtttcctggcagaatctttaaaatatttaagtattttaaatctgt
+gggttctaagttccactaccaagtactactgaatcaaaataagcggtgca
+aattgtattttaagatgtgggaaacaataatttatgtcattgaatttcga
+gaattaccactaacctaaaatggaggacacaaattagctcaagaaaagag
+aaggtttacgtaaagataaaacatcttaatattcttttttacaccagcaa
+actcccaacagtttcttgaagaaagaaactgaaattcacacaaagcagaa
+ggttcccaagagacattctacaaaaatagaaaataaaactccctgaggga
+gtattaggaattatttactgaagttatcctcacccagggagatcaggttc
+ctgtagttctccaacatcacatctctatacaaattctgctgggcagggtc
+caggcatttccactcttctggagagaattctatggccacatccctgaatg
+ttaagagttcctgaaaatatatatgtatcaagtgacagagttcttaattt
+gactacaggtgaaatgagttaagagaactagttctgacatgtgactgact
+gagattatctgataaaataactttcaacacagtaatgttctctaaagtat
+tctatagctctgcagaaaaaggatggcattccaacagtttctgttcctgc
+aataaaaataacgggctacactgacctgcccctaccaaaaccaagcagag
+taggccctgtgacctcctggaaaaaaagatttaactcagctctcatgaaa
+gtatctggaatgcctcacgcttgaccttggcctcgctgtaatatgcgagg
+aacttaatttaaaaatcagaaatgtttccacccagaacaacagacaggat
+ctgtggggagggcacaggtgatgatttctcttcaaattgtccgtgtgatc
+ctactgcaacactgggctgagagtcacttagctaagcgctgcctctcaag
+cttcaatgcgcataaaaattattttatattctcggcctcactgtaacaaa
+attttgcaggtttgaaaagagttcatgaattagcttcttatagcaagtct
+tctgttaatgctgatgttcctccacctagacacattatattaccactcgg
+ctagagaaagcaggcacagcatagagtcccttaccccaacacccttatca
+caacacaaatacttttcatcccaagacaagaccacaaatcatcatcctga
+agcacagcattctctggaggccgtttaaagtttacagaggctggagatgg
+tgtcaatgtctgagtaagtctgcatttgaaaaacaacatgtggtccaggg
+gtggtggctcatgcctgtaatcccagcactttggaaggccgtggtggggg
+gatcacaaggtcaggagtttgagaccaccctggccaatatggtgaaaccc
+tgtctctactaaaaatacaaaaattaaccaggcatagtggcgtgcgcctg
+taatcccagctactcaggaggctgaggcagaaaagtcacttgaatccggg
+agctggaggttgcagtgagccaagaccatgccactgcactccgcctgggc
+gacagcgagactccatctcaaaaaaaaaaaaaacaacaaaaaacaacatg
+tgcgcctgcattaatgcggtatttatggagcatgtactatgtgctcagga
+gtatgtcacagagcactgtgctaagacactcacattatgtgtaaattctt
+aggacatcctgggaggtgggcactaagtgtccaatacttcccaggattta
+aatacagggcccagaattaccatttcctttctattttcctacaattgatt
+tgttttttaaaggtatagaataaccggtcaatataaatagatcacaaaga
+aacaaaggatgtattaaatgcaattcagagaaatttatttttgtgttgta
+tttaagatttgtaaaaaaaaaaaaaaaaaaaaaaaaactgcagggatgga
+gaacaggttgctggatgagatgtctctagaaacactggttttaattttat
+aaaaaagaatttaaggcacaaaagtatattgcttttccccatttatctgc
+ttttgtgtttcaggaaattgggagcaccagctttggagaggcagtaggag
+tagtcactccaaactctgatctcctctaagcagttccgagagatttcagt
+gtggggtcagacctggacaaggttcagtagagggtggatctgggcagggt
+taggacagagagtgggccctagacttctgttctctatgccgctaagtttt
+ttcagttttgtcttttctaagcctccccaagagaaatttgattcccagat
+tttatgaaattttaatctattttagccacttctctgtgtctttaataaca
+tacaacaaggaatttaaccaaatcccttatgtttctctagcacaattata
+ttagaagctaaatatttattcttagcaaggtaaagacaatacaacttctc
+ttctgtcaattaatagtcattcaggtggtggcatcaaaactcacaaaaca
+ataaaagggaagtaacccaaatgaagcttaagtgtcctgtacaatttcca
+tctttgtactgaacatatgatgctgaattcaaccatttattcatgtgctc
+cagactgcaagttccttgagggtagggaccatgactgcatcacctctttt
+tctaatggaccatatgaaatagaagtaattagcttatggattagtttgag
+tctccggatctcacttttcaccaaaaaaaaaaactagaaacctggagcaa
+ctcttatttgggtacaaaccaaggagattctttgaggggagaaacaaacc
+ctgaataagtcatttatcttcctctaaaatgggagcagaattagaccttg
+ctgtcagactgaccccagtctgcacaggacatccgcagatgtctcaaata
+caggtgctggttgagtgtccccagtgaccttgggctgatatccccatagt
+gatccaggcaggagagattcaggctcaattagtgggatgcaaacagaaaa
+tgaaacagccctggtgaagctgcagatcctggatccagacgtgatagccc
+ctgtccctgatcagctaactctgaggcaaggggaaggacaaaactactct
+actccagtaagagtttacggggaggcattgttgtgactttggctctgaat
+attttgtggccctgaactcccactgctaaggtgcttttttacacttaaca
+gattctgccacaggattcttctgttcccaccagaagcctcccacacaact
+atatcaggtcactggacaagatctggaaaactcaaagagctccacctatg
+ttgacctctcatgatgtagaaaatgtcttctatgagttttctgttatgtc
+ttcagcccaaagtctggtcctgtcttgtgaatcctaggcagaagtcagtt
+tttatgtgcatattctaggtgggatcaatgtgcctcagcattcttagggg
+ttacagtaagcagagtaaaaccagaggtaagattctctcatggaggctcc
+ttcaacacattctaaagaatattttgacctaaaaggaaaaacctggggta
+aacacaagtagaaagtttatttgggccaaaacttgaagatgcaacactgg
+aatataaaggtgccctgaatatacgctccaattagaagcagttatgagta
+tatatacacatatatacacatatgtgtatatatatatacacatatgtaca
+catatgtgtatatatatatacacatatatacacatatgtgtatatatata
+tatatacacatatgtgtatatatatatacacatatatacacatatgtgtg
+tatatatacacacatatacgtatatatgtgtatatatacatatatacaca
+tatatatgtatatatatagttttatatatataatttatatataaatatat
+atttataaattatttatatataaataatatatttgtatatatttatatat
+tacatatgtaaattatatatataatttttatatacataaatatatatact
+tttttttttttttttaaagagatggagtttccctcttgttgcccaggctg
+gagtgcaatggcacgatatcagctgaccgcaacctctggctcctggattc
+caatgattctccagcctcagcctcccaagtagctgggattacaggcatgc
+gccaccatgccggctaattttttttttttttttttttaagtagagacggg
+gtttcaccatgttggccagtctggtctcgaactccggacctcaggtgatc
+cgcctgcctcggcctcccaaagtgctaggattacaggcgtgagccaccat
+gcccagctgacgagtatatttttaaaggcaaaaagggaggcagagaggga
+actgatagaaagttgtcagaaattcttattggcttatagaagtaagtggt
+tagtgactggctatatacattaacatataaggtgtgggttatagtgtcaa
+gtatgaaattattaggttaatttatagccatttgtggccaggcatggtgg
+ctcacgccggtaatcccagcactttgggaggccgaggcagagggatcaag
+aggtcaggagattgagaccatcctggctaacacggtgaaaccccgtctca
+gctaaaaaatacaaaaaattagccaggcatggtggtgggtgcctgtagtc
+ccagctactcaggaggctgagacaggagaatcacttgaactcagggggca
+gaggttgtagtgagcaaccactgcactccagcctgggagacagaatgaga
+ctctgtctcaaaaaaaaaaaaaaaaaaaagaaaagaaaagaaaaaattat
+agccatttgtggcaatagcacacaattacaaaagacaaatagttcaaaga
+ggggaacagtacatgactgtggtctcattttaacacatcactgggtctga
+tcattaaaataacttgtatttctcagataaaagttctgtgcttctctcaa
+atcccaggacataaattcagaatttggaactacatatttaagacttggag
+ggctggtgagctatgcacatttgtgggcatttgggcaaagggagaaggga
+gttgaagttctcaggtttaccctagaagaaaacctaagcaatatcattca
+ggacataggcatgggcaaggacttcacgtctaaaacaccaaaagcaatgg
+caacaaaagccaaaattgacaaatgggatctaattaaactaaagagcttc
+tgcacagcaaaagaaactaccatcagagtgaacaggcaacctacagaatg
+ggagaaaatttttgcaatctactcatctgacaaagagctaatatccagaa
+tctacaaagaattcaaacaaatttacaagaaaaaaacaaccccatcaaca
+agtgggcgaaggatatgaatagacacttctcaaaagaagacatttaggta
+gccaagagacacgtgaaaaaatgctcatcatcactggccatcagagaaaa
+tgcaaatcaaaaccacaatgagataccatctcacaccagttagaatggcg
+atcattaaaaagtcaggaaacgacaggtgctggagaggatgtggagaaat
+aggaacacttttacactgttggtgggactgtaaactagttcaaccattgt
+ggaagacagtgtggcgattcctcagggatctagaactagaaataccattt
+gacccagccatctcattactgggtatatatccaaaggattatatatcatg
+ctgctataaagacacatgcacatgtatgtttattgtggcactattcacaa
+tagcaaagacttggaaccaaccaaaatgtccaacaatgatagactagatt
+aagaaaacgtggcacatatacaccatggaatactatgcagccataaaaaa
+tgatgagttcgtgtcctttgtagggacatggatgaagctggaaaccatca
+ttctcagcaaactatcacaaggacaaaaaaccaaacaccgcatgttctca
+ttcataggtgggagttgaacaatgagaacacgtggacacaggatggggaa
+catcacacaccagagcctgttgtggggtgggaggagtggggagggacagc
+attaggagatatacctaatataaatgacgagttaatgggtgcagtacacc
+aacatggcacatgtatacatatgtaacaaacctgcacgttgtgcacatgt
+accctagaacttaatgtataataaaaaatatatagacagatagatataaa
+aaagaagttctcaggtttaatcaatgcacatgtgtgatcctgattgggat
+tatgggccccatgatcacggaatcagtgtcagatttgaagatgccaggca
+cactgacgaaggaggaataactgattgcagtactaaaaagttatttttgt
+agaaatccagtataactgttatagaagcgactgtagatagaaggagagac
+cattctgtttccagatttggggagcactttgctgcactttgtgcaccttg
+ccaccaaattatgggttgtgagtggaatcctgagaaaggtttttctctaa
+agtgaagcctagagggcacttgtgtataatgtctggtgattctggacagt
+gtgaggaaaaatataactaaaagcaaaatcatctccaatcctaaaaaact
+ccacaataatagagaagtaagaaaatgttttgttacataattaaaccaaa
+atgtgatgtgcatcataggcaatctactaagagactacaaacacagaaac
+tcaccataattctcaagtagaagacatgacagcaccatttgtcatatacg
+gcttattgtaatttcacctagtaatctgagaactcatctgggttttctaa
+ttggtaatatttatagaaaaaataaacttccaacatcttcatgacaggag
+gcagatttgcaacgtgaggctaggtacctgctgaaggcagcctattagtc
+gcctacagaaactgtgggataggatgcatgttcttgctattcacttttca
+aagcaatagttttcaggtcctagataaagacaagtttgactcaaaaaaga
+caaatgacttatttaactgacaaaaatgacatataaattttaaagaagca
+gagaaaatacttaaatataaaagttttcgagacaggagcagtggctcacg
+cctgtaatcccagcactttgggaggccgaggtggacaaattgtaacgccc
+aaccttgtttctactaaccctgtttttagactctccctcttcttttaatc
+acctagccttgtttccacctgagttgactctcccttagctaagagccaga
+cagactccatcttggctctttcactggcagccccttcctcaaggacttaa
+cttgtgcaagctgactcccagcacatccaagaatgcaattaactgataaa
+atactgtggcgagcaatatccacagttcccaggaattcgtctgattgata
+acgcccaaaagccccgcgtctatcaccttgtaataatcttaaagcccctg
+cacctggaactgtttactttcctgtaaccatttatccttttaactttttg
+cctactttatttctgtaaaattgttttaactagaccccccctcccctttc
+taaaccaaagtataaaagaaaatctagccccttcttcgggccgagagaac
+tttgagcgttagccgtctcttggccgctggctaaataaacggactcttaa
+ttcatctcaaagtgtggcgttttctctaacttgctcaggtacaacattaa
+cacctgaggtaaggagttcgagaccagcctggccaacatggtgaaactcc
+ctctctactaaaattagaaaaattagctgggcgtggtggcacaggcctgt
+aatccagctactcaggaggctgaggcaggagaattgtttgaactcgggag
+gtggaggttgcagtgagccgatatcacggcactgccctccagcctgggca
+acagagtgagactccggctcaagaaaacaaaacaaaaaatgttttcaaac
+taaatgctttaagaaaagggagaagagcaaaaattattccctcattctaa
+agagagaccattaagccgcgtctaatttgggtttgctcctgcaacagcca
+ggtttaaaggcatggtcttgaagtcactaacgtctgaattctcgcaggca
+agtgagggatggacttgggcacactgtgtgcacaggaaataagatttgtg
+aggaagaaaaaagcagaagagagaaaggagctatcaagagtcatggtggg
+gacagggcaggactgactaaataaaagactagtttgtgctacaagtgcag
+gtctaggcagggttaccatctgactgattcatgtgtccataaaggcagag
+gagattaggatcaggtggtccagaagcctgggtgggggaaggaaacaggt
+tcctgctatagatccagtgtctggggttgaaatgagccaggagtcttcct
+ggcactgtgtgtgttattggcagaataccctaggagcaaagctgtcacgg
+gcacaattcctgagggtagaaccctgtcctgggaggagtgtggcaatgcg
+aatggccagtgagcgtcctcgggagtgggttagcattaagtgggggctgg
+cagcagggtgcagggaagggatgtttctcagaactcctttcctctaagtt
+cccagtcccttctctccccggaaggagacctggaggaaaaggacagtgcc
+cagcgggacagcacatgtgcagaacccggccgcgcctcccgcagacacca
+ggcatctttctccagcccaggctcagccatgtctttcttctgacagaaaa
+cgtgcggagtttgctcaacatcagtcaatgctccaaccccaacgcggtgt
+ccagcaactcactaacgacaccacccagagtcagcgaagaccccacaagc
+tcagcgctcttcccgcagctgccccccccctgcagacggcagtccctgcc
+tctggacacccgtcttcatttctgaacgcctgcctacaaaccaggggcgc
+ccacaccctcctcaagttcaataatgtggcagaactactcacagaactca
+gcgaagcgctgtgcgcgcccacaccagcgtattctaaaagatgccactca
+ggaacagccacgcggaggaggcgcacagggcaaggggactggtgggcaag
+ttggagcgggcgggtgatttgcttcgcttcctcacacacctcacaaaagc
+ttttccttcaagacccgctggcagcccccaaaccacaagccatgcccggg
+gctgtcccattaattagtccccatttgctcacatgaactctatgttttga
+tagggcctcgatcttattccgaacagggtaaagtagggactcgacgaccg
+gaccacagctcctcccaggcgggcacctcgcacgccacgcaggcgttttc
+ccgatgagctcctcctcaccccacagcccagggaaggtgcggggctgcgg
+gcgcagagctgcacaagtagggctgcaggctgggccaaagccgccttgcg
+gggaccgacatgaacccgggtccctcaccggaagggaccaaggactgagg
+gctgagcggcggcagcggagactccgttcgcagactccgtcccgccgccg
+ccatttcccgccggttcggatgaggcctccccagccttgggacgccctgc
+ccccacactcaccatttccccacttcaggggtgtagcggagtctcagcta
+cgaatcatccaatacccgcaggtcacagagcgacggaggctgaggctgtg
+accgaatcaccgacgcctccctgaggggtgaaagcacggccgtggagacc
+ctaaccgagctcacgctggcgcaaaaggcaaaagccgcgccagatcccgg
+atgccgccccctcctctccggctgcgcgcctgattgggcagttctcaatc
+cagcgctctgattggataagataccaagctccccacgctcagaatttgag
+tgacagaacttgccaccacacagtgcacttaatgaggcaagagagacaga
+ctcgtgcctccaggtattttcagtcagggctttctgtgctaggcttggct
+ctgttgggggttcatttttaaccttctggtgtgtaaggttacgcccattt
+ataaattgtgtacgtacgcgcgcgcacacacacagacacacacttgttca
+caaatggaaacaatataatgacaattattttaatattttagatttcataa
+cctctctgtcctctggtcttttgagtaggattttaagggggaagcaatcc
+tttaaaaaataaaatgttagctatttgtgaattttcaattttttattagc
+cacatcaaaaataataaaaagaaacaagtgaaattgtttatattttaacc
+tattgtatccaaaatattgtttcaatatgtgatcaatatataattagaaa
+taaagtatatttctgatttaattcgtctaaactcactgtgtattttatgt
+ttgcagcacattttacctcaaaccagccacattccaggtactcagtagct
+acatatgtctggtggctgccacatcgagtacagccatgagggctctgacc
+tcaagaaagtgagggcctgaacacgtcttttctactggaagtaagggacc
+agcctctctaccaacttttctcctcaggatgaaggatgggtaggacagtg
+cccctagagagagcaggggctgcaagctgagagtgtccacgtgaagatca
+ctgtctcccccttgctgtttggtaccagtgtggtggtctcctcagttcaa
+ccacgtctgggctctcttcccatgaccaggaagaataagacatacagaca
+ccagagagtgagtaaagcagaataggatttattaagcatagggaaagctc
+tcagcagtaagaggggacatgaaagcagggtgccagaaatggggctgagt
+ttatatggcaagaacaaggaagtcttctgtgggctctgcccaaatgggag
+gggtaaagttcccctataacagtgttgcatctgagcatgcctgggattga
+ccacagtgactccgtcttggttattacccatgagtgcccaagcgaaaccc
+acagcaggtggaaagggtgaagctaaaaccaaaatacttatgtcatgtta
+ggtaacattataaggagctgggtcaagttaatgacatttaggttgattta
+ttacacctgggcctaagtggggacagtcccttctgatcaacatcctggca
+taagaggaagttcttaaccacatttcttcccactagctacaagggtggtg
+catgtgcggtcccatgggtgtttttcctctccagagaccctccctcccta
+tcttcctaactagcttctgactgcctcctctctcaggggttcctcttcct
+tttaaatatcagacagtaaacaaggaatgatgggtccacaggaagagaga
+gcaccatgtattcagatctcttcacagccttgccctccagagtttagatg
+tggagggaatagattaaaggcaaatttcttgttttgctatttatctttgg
+acctgtcaggctgtaactgtgtgtttttctcctgtggtgtggggcactgt
+gtgagtttaagcaccaatcacatgcatccacttctacctgcacttctgtt
+cccagaaggaaggccgtgagtgtgagttgtccaggtccttgatattttga
+acaaagaattgaacaaaatgcaaaatggaacgaaacacatgaaggaaaca
+gcaaaagcaggggtttattaaagcaagaaagcactccacgggatgggtgt
+gagccccagcaagcagctcaaggacccggttacaaagttatctgggtttt
+aagtactccttttgaggtccctatcagctaccccttatctggatgaaaga
+tttggtccgtggctaatcaaaggctgaggtgaattggtaccccatgcaga
+tgaaggcatggcctgtgcttggcccacggccactccaagtcactctcctt
+ttctatcagagaactggtgcaaaggagagggttgtagcaacagtcacctt
+tgatcctttgctactcaggtgtagatgaggttttccttttggtttagatg
+taggaagttcacgttaattggccttaggttccctgctcccagaccttggt
+gtttcttctttaggaattcagcacgaattggccttaagttccctgcctcc
+agaccctattctcttgcctcacttctatataagtcaataccatcttacaa
+caaatttaactttaaataaaggaaacacaatatcaatacttacagggtgc
+caagcatttgcaggttatttgtaatcaatctgtcctggaatcctggaatc
+ctgtctttaatgggtgtatatattactaagctataactgcataacaatcc
+tgaaacatactagctcagggttgagctggttagaaatttaggctgggctt
+agctgggccattcttctgggctcagtttggctccttcaggtgtgagtggt
+cagatgctggtgaattaggtggctctgcttctgggagtgagctgtctgta
+aactggcgcactttggctttcctcagcatgctattttatcctccagaaag
+ttaaaatgggcttgttctcatagagatggaagaattctgaaaaagataac
+agaagcatttaagaccttttgaacctgggccccaaactggcacactgtca
+tatgcacagcttcggcctgtgcaaataagtcaagagagattcaagtttgg
+gaaacagaatctgtttcttgataggaacaactataaaagccatttccaag
+aacatgaatacaataagaatttttttaattgctgtttttgcgatcaattt
+tatcatgacttttcttgcagatgtggcttatataactatcccacagctac
+caagcagctggcttggactcaggattgatgcttccctaactctgaagccc
+ctgcacctccatagaccacactactcagccagcttttcgtgtccttcacg
+gggctgaagagtgacacttctgaaatagaagcaagatttttttttttttt
+agaatctcatcccatccaccccttactcttcaccattggaaataattcac
+tccagggaatggttctgaagtctcttggaaaaactggcaacaatttgagg
+aaattgctgagcattgggtttaggaaattaatgcccaacgttacattttt
+aatttatcataggagaaatttgaaaacacctataatgcactcaacatagc
+tgcaaactctttattttttgtatttgtagactatttatgatttttaatat
+agactaaatcaaattactgttcctgaaacaacttttgctctgcaggcaag
+tgacatagcaatagggctgctgatattttttcctgctgcaatttagccaa
+ccagcagagtatgctttgaagggccaagatgttttctaagaccccacatt
+taggagcagctatagggcaaatacctagagcacacatagaaatcacacat
+aaccaattcattccttgccctgaatcaatgcttctcacccttggatgcac
+attagcctgttgtgcatgtaggtggtggtatttaaagttcccaaacccaa
+attgcaagggaataattaagccagaatccctagcttaagacccaggcaaa
+agccagtgtgatttaaagctctccaggtgattacaatatgcaaccatact
+cccaaatgtctgctgtaaaccaacatctttcagagaaccagttgaaaata
+tttctcaaattaatgtaaaaagtgtttgctgttgagttgtggcctttcag
+tcttactcatattacccacattctttcctttgcaaaactgacctctgcta
+cttgttttgttcctgattcaaaccagttccacacacactgagtgcacact
+gtgtgcagcccactgtgctaggtgaatattgttgtggaggaaggactttg
+ctgtaagaaatttacattccccaaaactaaaaccatgctacttactcaat
+tgaaataaaaaatgaaagactgagggggactcccaagggtcaagacatgt
+atgcataccttggaatattagtatccatctcatgatgactgaatgtaaat
+gctccactatttttttttttttgatatgcagtctcactctgttgcccagg
+ttggagtgcagtggaccgcgcctggccaatgccccactttcaaacaaaac
+aatacgaaacattgctattattctgaaatattaagttagtattaaatatg
+taatatttacatttttattgatgtataacatacatacagaaatgcatcca
+caatgaaatattaatgtaatgctcaataatttataacaaagctaatacat
+tcgtgtaactatagaatggaactacccttgtttttccccacaaaccactt
+cttcttttccttccccccaaatctaaccacaatcttgagctaatgttata
+gatggttgtctttttagaaaagtcttttattagagaatattttaaactta
+tacacagtaaccaatatagtataataggctgatgctcagcctcaacatct
+actaattttgtctcatttatgtttaatttcttcttcacttttttttcttt
+ttttttttttcagacagagtcttgctcttgtcgccctggctggagtgctg
+tggcgcgatctgggctcactgcaagctccacctcccgggttcactccatt
+ctcctgcctcagcctcccaggtagctgggactacaggtgcccaccaccac
+acctggctaattttttgtatttttagtagagatggggtttcaccatgtta
+gccaggatggtctcgatctcctgacctcatgatccacctgccttggcctc
+ccaaagtgctaggattacaggtgtgagccaccacacccagcctcccatct
+ccactttattattgtttttagttattttctgtaagataagatgtatatgc
+attgaaacatacagtctttactgtacctttttgacaaatcaatacatcca
+tataaccttttctctttcaatcatagaattactgccacttaacaattatt
+aatatgcatgtgaattacctggaaatatttgaaatccagattttgataca
+atatatctgggttttgcctgaaaatgtgtatttctaacaaagtacagatt
+catagagcacatgataactacaaggtctattttgtctaaagtgtataaaa
+cttgatgaataaaattaagaaaaattgacctcagaggaacaaatcaaaat
+gcatgtgcaatatgctatctgtaggagcatttcatcaacaatgactcaca
+gtcatgtgtgacctttactgaattgcccaaaattcagtcatttataccaa
+gtgcacttaaatttcataatttcctattaaaattatatttaatgccttta
+caaaatctaacagttttcttataaaattaagtaacaatatttgatatgac
+attataagttccatttatattaaacttaaacttacataattttattagac
+tgtgtctatgcatctaccactggatatccttttggcttccagcatttgca
+caggcaccacagctgagaagcacaggacagattcactagacacaggatgt
+tccctgcatctttatctctaaagttcatcagttagccaagtcaggtgaga
+attgaggtcatgtattcgctaccatatagtgtctcatggaccctctcttt
+agagggaaaagagactagaagattcttttagggagcagttcctgggacaa
+gggctaagctgcctaaggagtgagcattctgtccagcaggtacagacttc
+tcagaagagaaagacgaggcagccattctgaacctggagctccattgccc
+cttgtcccatctcattaagacaattctgaggggttgttctggaacatgtc
+tggatgatggcagttaaaagacagtatgagctttgatgggacttgggtaa
+ggtctgtcattggaaggtaggaggccaatgctcagcctctcagtttgtgt
+tcttgaggacaaagggttgccattttaggccctagtccattttcactaaa
+gagtaggctagagagtctgcatggctcccagattccatttatgattattt
+cagggggtggggtcaggaagggtctaagtctcaacatctttgggaaattc
+tggaaagcctgttttggaaacccggaaagaactcttgcctggtgcctgaa
+tgcttgatttgctgttctgcatttatatattcttcgcagccagatagcca
+ggtttgcattcacaccgacagagctgtgagtcacaggttgaagtggccag
+aatgagtgtcttggtggcaggctagggtacattatgatagcaaacttcaa
+gactgtttacatgcagcttggcaatcagggttgagtcctagcccaggtgc
+ttagatgcagcatggggccaatcaataaatcacgtccaatccttcagctg
+tctatgaggtaaaagggagcccagttcatgtcttgactggggggctctac
+caggtgtttagatgacaccctggatttcttgacttctgacttacttataa
+gaacagattcaggacagttgtattcttggatgtgtgaactgtcattaccc
+tgctaggataatgtgagacagattgcattaaaatagaaggtgttagaaac
+ccctgacaatagggagaaaaatcacaaactcaattaaaaaatacacagaa
+cttatttaaaaaattacacattaaaataagttggccgggcgcagtggctc
+acacctgtaatcccagcacttgggaggcgaggtgggtggatcacaaggtc
+aggagattgagaccatcctggctaacatggtgaaaccccatccctactaa
+aaatacaaaaagaaaattagcctggagtggtggcaggtgcctgtagtccc
+agctgctctggaggctgaggtgggaaaatgatgtgaacccgggaggcgga
+gcttgcagtgagccgagatggcaccactgcactccagcctgggcgacgga
+gcaagactccatctcaaaaaaaaaaaaagaagtaaaaatggccattttgc
+tgggcgtggtggctcacgcctgtaatcccagcactttgggaggctgaggt
+gggtggatcacctgaggtcaggagttcgagaccagcctgaccaacatgga
+gaaaccccgtctctattaaaaatacaaaattaaccaggctttgtggcaca
+tgcctgtagtcccagctactcgggaggctgaggcaggagaatcacttgaa
+ccctggaggtggaggttgcagtgagcggagatcgtgccattacactccag
+cctgggcaacaagagggaaactccatctcagaaaaaaaaaaaaaaaaagg
+ccatttttcacaaggcgcccaacttcaatgtggttagaaaaaaaagctcc
+aaaatatatgaattttgtctggcatcactttgggaaattaaatgttttct
+aacattgtctctttttatgagcagtagaaacacactgttcatgcttgtaa
+agtgtataaacggtcaataaccttttgaaagataatttgaaaatatgtat
+caagagttgaaagaagccaagcacgatagctcacacctgtaatttcagca
+ctttgagaggggaaggtgggtgacttgcctgaatccaggagttcaagatc
+aggctgagctacatggcaaaaacccctatttttgcatataaaaaatgcaa
+aaaatggccaagtgtggtggctcacacctgtaatcctagcactttgggag
+gctgaggtgggaagattacaaggtcaggagttcgagaccagtctggccaa
+catggtgaaaccccgtctctactgaagatacaaaaattagtggggcctgg
+tggcacacacctgtagtcccagctactcggaaggctaaggcaggagaatc
+acttgaacccgggaggtggagattgcagtgagcagagattgcaccactgc
+actccagcctgggtgacagagtgagactctgtttcaaaaaaaaaaaatgc
+aaaaactaccgtggtgttgtggtctgagcctgcagttccagctacttgag
+aggctgaggtgagaagatcagttgagtttgggaggtataggtcctaggag
+ctgagattgtgtcattgcacttcagcctgggcaacagagtgaaaccacat
+ttaaaaataaaaaagaagttgagagttacatgttcttgcataaaggattc
+tacctgttgaaggacatttcataagaaacttgagcatctgcacagagatg
+ctcacactagcatgttgttggtgggcatatacataatcaataaataagaa
+gaaacaagtggaagtaaaaaaagaaaaagaagaaggaaaagaaggaggaa
+gaggaggaggagaagaagaaggaggaggaggaggaagaagaagaagaagg
+ggtgcacacatatacgtgaattttttttggtcatgaacacctagaaaata
+tctttcttgacattaggaaagaattgggaaagaatttttggccaagttcc
+caaaagcaattgaaagaaaaacaaacattgacaaacaggacctaattaaa
+ctaaaaagcttctgcacagcaaaagaagctatccacagagtaaacagaaa
+atttatagaatgaaagaaaatctttgaaaactatgcatctgacaaagacc
+taatttccagaatctgtaagaaatgtaaacaaccaaaaaagcaaaccaaa
+acaaaataagcctattttaaaatgagcaaaaacatgaacagatacttatc
+aaaggagaatttacaggcacccaacaaacatgaaaatatgctccacatca
+ctaatcatcagagcaatgcaaatcaaaaccacagtgagataacatctcac
+accagccaaaatggctattattaaaaagtcaaaaaaaggaagatgttggt
+gaggctgtggaaaaaatggaacacttatacactcctggtaagaatgtaaa
+tcagttcagccactgtagaaagcagtatggagatttctcaaagaacttag
+aactaccatttaatctggcaatcccagtactgggtatttattccaaagaa
+acccaattattctaccaaaaagctgtcagtggatctacaattctggggtc
+tggaggatagtggctctcttctcacagctccactaggtggtgctccagtg
+gggactctttgtaggggcttctaaccccacatttgccttccatactgccc
+tagcagaggttctccatgagggccctgcccctgcagcaaacttctgccta
+ggcatccaggaatttccatacatcatctgaaatctaaacggaggttccca
+aaccacaattcccaacttctgtgcacctgcagtctcaacaccaggtagaa
+gatgccaaggcttggggcctccaccctctgaagcaatagcccaagctgtc
+ccttggctcctttaagtcacagctggagtggctaaaacacagggcaccaa
+gtccctaaactgcacacagcagagggacgctgggcctggcccacaaacca
+ttttttattcctaaacctccgggcctgtgatgggacaggctgccacaaaa
+gtctctgacatgcccttgagacattttccccattgtcttggtgattaact
+tttggctcctcattacttatgcaaatttttgcagctggcttcaatttctc
+ctcggaaaatgggattttcttttctatcacattgtcaggctgcatatttt
+ccaaacttctatgctctgtttcccttgtaaaaccgaaagtctttaacagc
+acccaagtcacttcttaaatgctttgctgtttagaaatttcttccaccag
+atactctaaatcatctctctcaagttcaaagtttcacaaatctctaggac
+aggggcagaatgctgccactctcttcgctaaaacataacaagagtcatct
+ttgctccagttgccaacaagttccttatctccatctgagaccaccacagc
+ctggattttattgtccatatcattatcagcattttggtcaaacccattca
+acaagtctctagggagttccaaaactttcccacatttttctgtcttcttc
+tgagccctccaaactattccatcctctgcctgttactcagaacttcattt
+ctggttaccttttgagcagtgtctcactctactggtaccaatttactgta
+ttagaccgttttcattttcacgctgctgataaagacatatccaagactgg
+gcaatttacaaaagaaagaggtttaatggacttacagctccacaatgcta
+gggaggcctcacaatcacggcgcaagctgaaaggcacatctcacatggca
+gtggacaagagaagagagcttgtgcagggaaactctcctttataagcaag
+ccatcagatctcatgagacttactcactatcacgagaacagcatggaaaa
+gacctgcccccatgaatcaatacctcccactgggtccctcccacaacaca
+tgggaattcaaaatgagggttgggtgggacacagccaaaccaagtcaggc
+tcctcctgggcttctgttgttttctgggtgaatgggtgatcccttcccct
+agaggactccaccttaacccagcccctcccagtcagtaatctcccctact
+agtcccccagatgctaattattgctcacttgagtctttctcaccctaatt
+gaaaattaatgtctgattcctctctctcccctgcataacctctgtgaaaa
+atgtcagatgccttagacccaggaggtttcctgcctgtatttcctttccc
+agctctctctcccaggtatgtagactccataaattccttcacacatatgt
+gtccagagcgtaccctgttccagcccctggggatatagcagtgaacaaaa
+aaaaatgcccccatcctgcgggagcttgagttctagttggggagacagat
+aagagtcaagacgaataaataatatgtaagtgtgatcgatagcgataagg
+actgtggagaaaaagagattgagaaaggaagacagtaaatccccgggggg
+aggcagttctgcaactttagaggcagatcagggaagacctcactgtgagg
+gtaacatttaggcaaaggcttgaaggaggtaagggagggagctgtgcagc
+tatctaaaggaagagcagtccaggcaaaaggaacagcaggtgcagggggc
+ctgggaagcccatatgttccaggaacagcacagggccagggtggctgcag
+ggcagcaaatgagaggaggtgcagtgggaggtgagctcaggggggtgacg
+tgcaggcaacatgggccaattctccagggtcctccgggtcatcttaaagc
+ctctggtttttactctgatgagacaggaagccagtccatggttctgtgca
+gagcactgatatgatctcacccagtgttgggttgcaaaggcacttcaggg
+gtcaacaatggaagtggagaccagttagggggagagggatgaaggcaatg
+agtagtcatgggggatgagaagcaattgaaggtggggcccacaggaggtg
+ggtgtgagagaggaggtgaggacagtggcctggatcactaactggaagga
+tggggttttgggaggagcaggtctggggaggaggatgcaatgtgggcagc
+ctgcacacagcacttacagccttctctccagctgtgtgtcagtgggtact
+tgccgctgtgcttttgcacatgctggcctctgtgcctgccagtcattcct
+tgccctgggagaagaactttaactgccctctcaagggtaccttctgtgaa
+tcagtcctgttggcctccacctcctctatccctctctttgcttcatgcac
+atgctggaactcatgcacattgcacaacctcgaccatattgtgccctgga
+aggtgccccagaaataaggacagcgtgccatccatccctgaagcctgtgt
+ttctcagagtgcccacacctcagagtgtccaccacacagtaaaggctcaa
+ccacagactgactgcggacctgactggggtcttgctctccctttaacttt
+aagccccaattggcagcaatcgcagagctttgtccctccctgtgagcctg
+tctggctgtttatgctggatgacatgcaccccctctgccaggagtgcata
+gtctatggcctggccaggcagccattgcagatgagaagagcttcaacctc
+aactttattgtgctgctgggttttttctgctggctcttagcacgtttctc
+atgagccatgattagcctcaggtctatggaaccttctgcagctatgtcat
+ggtgactgaggacatcatctgaagcatgtgccactgctaccccaaggcag
+gtgttggtgaggctgtgtggggataggagggttggagaccatgcctctat
+ctcataaatgaattcttcatccttcaatcatctcctcattctcattttga
+ctctctgtttatttcttactgctctcatgagcattcatccatccatccat
+gtttccatccatactttcatccacccatccattcatctattcatccatca
+cttagcagaggggttgatcagaagcccccaggatctgaaaccatgaaaca
+aataccatggaagggaagaaatgaagcacaacacattactcacgtgctta
+aactaaaagacaatgagtgctttaaagctgaggctgagaaagtgaggttc
+tatagctgagtggcagggtttggattggagctcagatgtgcaaatgtagg
+catcattcttgtttttgatttctccatttcagggtcccagagctttctgg
+ggtgggtcaggtctaatcttggtggaatgcattaagcaattccttttttt
+ttttttttttttttgagatggagtctcactctgtcgccaggctaaagtgc
+agtggcacaatcttggctcacggcaacctctgcctcctgcttacaagcaa
+ttctcctgcctcagcctcccaagtagctgggactacaggtgcacaccacc
+acacctggctaattcttgtatctttagtagagagggagtttcaccacgtt
+ggccaggatggtcttgatctcttgacctcgtgatccgcctgccttggcct
+cccaaagtgctgggattacaggcgtgagccaccgcatgtggcctgagcaa
+ttctttatcttttggagtcttaatgtattcctagccctaggagtgattta
+ggatgggaaaagcactggtatgagagtcttgtgttctattcccagttctg
+tcgcaaactttgtgtgtgatttttgtctttctgagcctcagctttttatc
+tgaaaaatgggactcaagcctctgttttgcacagcctcacagggtataaa
+gatcagagaagagattatagagaagacaattttgtaaactctacagtgtt
+gtaggtaggtgaaaggctgccaggtactgataaccctgagagaaggacat
+gtcagctccaaaatcaaatctgttactttttcatttttatttttaacttt
+agacacaaaaatgtttcctttttcttgaagtacatgcttaagaagctctg
+ataacaacatgaatgtttttctctctctttttttttctgagatggagtct
+cactccattgcccaggccggagtgcaatggcgcaaccttggctcactgta
+acctctgcctcctggattcaagcaattctcctgcctcagcctcccgagta
+gctgggactacaggcgcacaccgccatgcccagctaattttttgtatttt
+agtagagacagggtttcaccatgttgcccaggctggtctcgaactcctcc
+acctgccttggtctcccacagtgctgggattacaggcatgagccactgtg
+cccggccctgtttttcttttgaaaatattttaatttactttttttgttga
+aggtattgcaggtaagtattcatttctagctttaaagataatttatctca
+gattcatttatgtttctttttctggttttcattctatgcagctgtggaaa
+tgttacttccatctttgtacatttttttttctctcactgatttatactgt
+ttttttctactgtggtctcatgcagcttggctatttttcagtatttaatc
+tatttatgttgttgacacactgcatttctgaattcaaagacttatgtctg
+gttttcgattttagaaactataagtcaccaagtctgaatattgactttaa
+ttttgaaaatatattctgtaggccaggcacagtggctcacgctcacgcag
+tgctgtaatcccggcactttgggaggtcgaggcaggtggattacctgaga
+tcaggagttcaggaccagcctggccaatatggggaaaccccatctctact
+gaaaatacaaaaaattagctgggcgtggtgatgagcacctgtaatcccag
+ctacttgggaggctgaggcaggagattcacttgaacctgggaggcggagg
+ttgcagtgagccgagatcatgccattgcactccaacctggacaacaagaa
+cgaaactccaccaaaaaaacacacaaacaaatgaaaatatattctgtaga
+aacaattgggtttgttttagttcctttcatcctacttttcatacatgtat
+atttgaggttatataacttctccttttctgtttttacactgattctgctc
+agtattatagttgactaatctcatcagctaagacaaatgtttcagtgata
+tgttgtaaattaagtagattatttacatttttaattgtttgcttcatatt
+tggctgtttttcaaatatgacttgtcaccctcatatcttcttgttctttc
+cacattattaatatgttgtctattttcctgattgtattgccttgaaacat
+tttaaatgtaaatcctgtaaatgtaggcaacataagttgtaattgtttca
+cattaatgggagataccacaattgcaatgtctgcagttagtttatggttc
+tttccccatttgcctatgtcaacttggtcaacccccaggaacttgtcatc
+tctgtctttacctatatccaagaagagctcttgtttcttagattgatcac
+attctggatagtttatttggtcttcttcactacctagaaagttctcatat
+ttttcttgctactctactcagaattttaaaagttcttgttgctgggcgtg
+gtggctcatgcctgtaatcccaagcactttgggaggccaaggtgggtgga
+tcatgagatcaggagattgagaccatcctggctaacacggtgaaaccccg
+tctctactaaatatacaaaaaattagctgggcatggtggcgggcgcctgt
+aatcccagctactcaggaggctgaggcaggagaatcgcttgaacccagga
+ggcggaggttgcagtgagcccagatggcaccactgcactccagcctgggt
+gacagagagagactctgtctcaaaaaaaaaaaaaaaaaaaaaaaaaaaag
+gccgggcgcggtggctcacgcctgtaatcccaacacttcgggaggctgag
+gtgagtggatcacctgaggtcaggagttcgagaccagcctgaccaacatg
+gagaaccctcatctctactaaaaatacaaaattagtcgggcatggtggtg
+catgcctgtaatcccagcaacttgggaggctaaggcagaagaatcgcttg
+aacccggaaggcggaggttgcggtgagccgagattgcgccattgcactcc
+agcctgggcaacaagagtgaaactctgtctcaaaaaaaaaaaaaaaaaaa
+aggttattgtaacttcctaagaattttagctttctatatttaaagtttct
+agaatatgtattttcccaaacagcaaacatatcaacaaagcatccctgag
+aaaaatatttcacaatttttttggcagagaacagcatctcatgaaaaatt
+tcaagttatttagaatatatctttccctcaattatactacaaagtaacaa
+taattcatagagtgtatttttactacagaaaaactgattttatgtcttca
+caaaattttgaaaactaccccaactggaaggaataatatctaaatatggg
+cagaatgccactttcctctatgattaagataacactcgcaggattattta
+ctgaaattcagggttttggcgtcaatcaccatgcttcatcatgaacactt
+ttctgaatccaaattctatttgaattttctatttaatccagaaattaatt
+ttttaaatcttatagaagttttatgtagatagatattacttgtgaactca
+ctttagtagatgccttcgactgttatttacaatgcctagaaaatactacc
+tgctgggtttttgctctcatgcattcaacgacatatttcggtcctaaaac
+ctttccatttaatgggtattttttgtttactggttaaaaattattcccat
+tggagcgcctctgcccggcgaccccattgtctgggaagtgtggagcgcct
+ctccctgtctgtcgcaccatctgggaagtgagcaacgcctctacccggca
+gctgtgcaaccctccaagtgtgaagcgacagccttgtgtgtgatctttct
+gccttccccaggtttgcattttcgacgttaaagtttacttttaaattaaa
+agttaaaaaaaattcttcccatttatttctatggctatttagtcaaactt
+tcttatacagccatttaacattatttatgttcatgtagttgttgtatacc
+aaaatagttaattgatgcaatggccttaatataacttaataggccgggcg
+cggtggctcatgcctataatcctggcactttgggaggtcaaggcgggagg
+atcacgaggtcaggagttcgagatcagtctgaccaacatggtgaaacccc
+gtttccattaaaaatacaaaaattagctggaagtgctggtgcgtacctgt
+aatcccagctactcagaaggctgaggcaggagaatcgcttgaaccaggga
+ggcggaggttgcagtgagccaagattgtgccattgtactccagcctgggt
+gacagagcaagactctgtctccaaaaaaaaaaaaaaaaaaaatatatata
+tataaaaatcagagtgaaaatgtgagtggctaggagagggagtggatgta
+gaaagcgaaattgtaacaagtttcacttagatgagagaataagtattagt
+gattgattgcacagaatggtgactataataaataataatgtattgtatat
+ttcaaaattgctatgaagtagatttcaaaagttttcaccacaaaaaaatc
+atatgtgagctaaagaatttgtcacttagctcaatgtaatcattttacag
+cataaaaatatcaaaatatgacatcatactcaacaaatatatacaataat
+aatatttcaattaaaagtataatttttaaaggtaccggtttttcttattc
+aataaatgtttaatatattcactttaaactcttaggtgttaagcctataa
+atgtttaatggcttagaataatgtctcacacattgtatgcacaaaatact
+aatgacaataatggtcagattaccttatgctcatagttttctttaaagac
+aatattattttgtatttgttcttattaaaatgtattttctttcttttttt
+ttttttttagacgaagtcttgctctcgtcccccaggctggtgtgcaatgc
+tgtgacctcagctcactgcaacctctgcctcccgggttcacatgattctc
+ctgcctcagcctcccaagcagctgggattacaggtgcgtaccactgcgcc
+tggataattttttgtattttaagtagagatggggtttcaccacgttggcc
+aggctggtcttgaactcctgacctcaagtgatccacccacctcagcctcc
+caaagtgctgggattaccggcatgagccaccgcacccagcccgtattttc
+tgtcttacttaaatattgataaatatagaagggaggctttgttctcctgc
+tttatacattccaaagtcaaattgcaattttattaacttccttcttattc
+agtaattcatttgtctcccacagtaaacgtaagtattaactaacacaatt
+atagtcatattctccatcttaataatgcagtaaaatttgtgttattcatt
+gactgggttatagcctcatatttttatctcatgttatttcatgtgaagta
+cctaagatataaatttttataaaatactatgaactaaaaataaatgtctt
+ttgcttgagctcaggagttcaagaccagtctgggctacatggaaagaccc
+catctctactaaaattacaacagacagccaggaatgatggtgtatgcctg
+tgatcccagctacctgggaggctgaggcaggagggtcccttgaaccaagg
+aggcagaggttgcagtgagccaagatcatgccactgcactccaacctggg
+tgacacagcgaagctttgtctcaaaaaaaaaaatacatacatacataaat
+gtcttaataggcaaaaattatgatagtaatgttatagttacaatgtcata
+gtaatcaaataatgtagtaccaccataggaatagaattatgtaaattaaa
+agaataaaattgaaggtatattaataaacacattaattttaggtaaacat
+aattttgtcagtcatgctaggaaattccaataggagaaattgttcaaaac
+ataatgctgagaaatcagttttcaacatgcaaatataatggatatacata
+catatatgttaaatagaatagagtaaatgaatagccatataacaagtaaa
+aagaaagtattaattaaattattttcacatagaaaagctcagtgtcaaat
+tgcataaattctaaatttcaccaatatttaataatacatagtataatttt
+ttcacaaaaactttcagcaatagcagagataacatttttctattaatcta
+ttagccaggggtactgtggtaccaaaaccgtggctgggcgcggtggctca
+cgcctgtaatccctgcactttgggagggccaaggtgggcagatcacaagg
+tcagaagatcaagaccatcctggctaacacggtgaaacccgtctttacca
+aaaatataaaaaattaaccgggcattttggcgcgtgcctgtcatccccac
+tacttgggaggagaattgcttgaactaggaagtcagaggttgcagtgacc
+caagattgtgtcactgcactccagcctgggcgacagagtgagactctgtc
+aaaaaaaaaaaaaaacaaaaaaacagacaaaataatcacacataaagaac
+actatgaaccaaaattccatataaatatagaattcctgatgaaattatta
+gaaatgttagcaaactaaatccagcaacatgtaaaactgattgcatacca
+tgaccacgtaatagtttgtcataaatgcagtgttggcttaatattttaaa
+aatcaaccaacatattacaaaatgttacctgaagaatagaaaaaggtgat
+aatttaaatagacacaaaaagtatgacagatccagcacccattcattata
+aaacactcagaaatctactagaaaggaacttgttaagacctgctaaaaag
+catctataagaaatcaatacctggccgggcatggtggctcatgcctgtaa
+tcccagcactttgggaggccaaagtgggcggatcaccaggtcaggagatc
+aagaccatcctggctaacacggtgaaaccccatctctactaaaaatacaa
+aaaattagccaggcatggtggcgggcgcctgtagtcccagctattcagga
+ggctgaggcaggagaatggcgcgaacccgggaggcggaggttgcggtgag
+ccaagattgcaccactgcactccagcttgggcgacagagcaagactctgt
+gtcacaaaaaaaaaagaaagaaagaaatcagtagctaatagtatacttaa
+tggtagatgattgcaggctgtatctgtaagtttaaaaatggaacaagaat
+gtacactttttccactctgtttaacattgtactggaagtattagccagaa
+aactatactggataaataaataaaaccctcagattagaaaagaattagaa
+tactattttcttgccacaatgttatataaaaaactataataaatttacca
+aaaatgtacttgagttaataaacaattttattaatgtcacaaaatacaag
+attaataaacaaggttaaataatacttttatataacataatcaacagact
+gaaaatcaaattatgaaaaaaataatgtcataaaaaccatttaggaatat
+attaaaagcaagtacacatgctttacattgaaaattatttaaaatgctga
+aagaaaattttaaaactctataagtaaagatacatctaatattcaaggtt
+atcaatgagaaatattaagatcaaaatacccagcaaatctatctacagat
+tcaatgcaaatttcaaagtaaattattttctttctttctttttttttttt
+ttttgagatgcagtttcgctcctgttgcccaggctgtagtgcaatggtgc
+aatctcggctcaccgcaacctctgcctcccgggttcaagcaattctcctg
+cctcagcctcccaagtagctgggattacatgcatgcctgtaattaaccat
+gcctggctaattttgtatttttagtagagatggggtttctccatgttggt
+caggctggtctcgaactcccgacctcaggtgatccacccgcctcggcctc
+ccaaagtgttgggattactggtgtgagccactgcacctggctattttcat
+agaaattgacaagctgctctttctaaattctatacagacatgcaaaaaaa
+tcaaacacatgagaattttgaaaacaaaaatgaaatttatttctgatatt
+cttactaaaatgttatactaaccaaacaatatggcattaccataagaatt
+gattttgaggtcccacccaggattgatacagagccaaaggaacccccacc
+ccagccaagaaaaatggtgagtgaatgtgcaaccccaggaaaccacactt
+ctctcaaagatctttgcaacccttgcatcaggcgattcagttgtgaaccc
+actccaccagggtcttgggtctgacacacagagctgtgtggagtcttggt
+agaacagctgctcagacacaaacagagtcccaggagctttacatacctca
+gccctgggacatccaacaaagatgactgcaactcaggcaaggtgggagat
+tggtgcatacccctaggaagggggctgaatccaggaggctgagcagcatc
+agtttgtggatcccacttccatggcacttcacaagataagacccacagat
+ttggaattccagctagttactggtaacagtgtagcacctgcctgagatgg
+gtcagagcttctgggtgagggatgggctgccatatttgctgttcggatga
+caaagtcattgcagcctgtgggctttggagagtccaaatgatctgaatga
+ggcagggaccccacagcacagcacagctgctttaccaaaatgttgccaga
+cttcttctttaaatgggaccccaatccatttccctcactgtgtgagttct
+cccagcaggggcctccagctgccccacccatattctatgaacagagttct
+gatttctctctgggatggaatgcccatggtggaggggcgccctgccacct
+tggctgtttgggggactaagccatttaagcctgagggtttggagagtcca
+agcagatttgggcagaggtggttccccagcatgccatggctgttttgttg
+aagcatagtcctactgcttctttaagtgggaccccaattcattccccctt
+gctgggcgggtcctcccagccagggcctccatctacttctgcccaagttc
+taaggccaatagagttctaatttctccgtgggatggagtgcccagggggt
+gcggtgggccaccatttttgctgtttgggcaggtaagttagtgcagactg
+tgggctttggatagcccaaaccatttgagagctgaaggaatccacaacac
+agcacagatgctctaccaaaacacagccagactgcttctttaagtaggct
+gctgaccccattcctcctggttgggtgagacctccaatccaaagccttca
+gccaccttctacaggtgtgttcaggcaggcaacaggtcagtatgcattct
+gacctgacaaaggggcaggctgccatctttgctgtttcacagccttaact
+ggtgatacttccagatactgaaaaagccaagggcaccagggtctggagca
+gacctccagaaaaccacagcagccctacacacagtggtcagactgttaaa
+agaaaaacaataaataacaaaaaataaccacaataaccctatccaaaggt
+cagcaatctcacacattgaaatagataagcccacaaagatgagaagtggc
+acaaaaatgatgaaaactcaaaagtcagagtgtgcccttttctccaactg
+acagcaacacctgtccagcaaaggatcagaaccaggctgaggctgagatg
+gctgaaatgagagaagtaggcttcagaatatgaatacagatgaacttggc
+tgagctaaaagggcacactgtaactcaatgcaacgaagctaagaatcacg
+ataaaacaatgcaggagctggcagccaaaatagccagtaagaagagaaac
+acaaacgacttgatagagctgaaaaacacactacaaggcctccacgatgt
+aatcacaagtattaatagcagaatagaccaagcggaggaaaaaacatccc
+agagcttgaagactgtcttcctgaaatcaaacaggcagacacaaataaag
+aaaaaaaaaaaggaatgaatgaaaccttagaatatgggattgtgtagaga
+gtgaatatacaactgatgggggtagctgaaagaaatggggagaactgaac
+caaattggagaacatatttcaggatatcatccaggagaacttcctcaacc
+tagctagacaggccaacattcaaatgcaggaaatgcagagagccccacta
+agatattccatgagaagattactcccaagacaggtaatcatcagattctc
+caaggtcaaaatgaaataaaaatatcttaagggcagatagagagtaaggc
+aaggccacctacaaagaaaagctcatcagactaacagcagaccttgtggg
+ggttcagacagactggtgaaaaaagttttagttataatagccataaaccc
+tcttggaaggcctgagggttttgcaaaacttcggtaatagatctggctga
+aggcggcctggtcactttaccttaagttattaacttagggcacaaataca
+aacggatgtagagtagtttatctaactaccttgtttactcatgtggtcct
+cagactaacctttgatcttgggtgcttaattgctttctactcgcgaagtc
+ggcaatgtcaattaccttctagtggtgtttactcaaagttttgttactta
+atctttaccaaataaatgcaagtttcgctggctggttggtgtggcggctg
+ctactccctacagcacctctgttagtctgtgaggcagcctggaccctcag
+ttgcactggcaaagcagaatatctgcatcagtatacattgttcatccgtc
+attgagtcagggtcagcgggtcggacccccgcaagacttctcactggaaa
+ccctacaagccagaagagacagaaataacaggctgggcacagtggctcat
+gcctgtaatcccagcactttgggaggctgaggcaggcagatcacttgagg
+tcaggagtttgagaccagcctggccaacatggtgaaaccccgtctataat
+aaaaatacaaaaaattagccaggcatggtggtgcatgcctgtaatcccag
+ctacttgagaggctgacgcaggagaatcgcttgaacctgggaggtggagg
+ttgcagtgagccaagatcatgaatcgcactccagcctgggcaacaagagt
+gaaactctgtctcgaatacatacatacatacatacatacatacatacata
+catacatatatatatatatatatacctatgtagggaccagccccacagag
+tctgtgggtttttctctccgtgtgcggagatgagagatcgtagaaataaa
+gatacgagacaaagagatgaaagaaaagacagctgggcccgggggaccac
+taccaccaagacgcagagaccggtagtggccccgaatgcctggctgccct
+gttatttattggatacaaagcaaaaggggcaaggtaaagagtgcgagtca
+tctccggtgattggtaaggtcacgtgggtcacgtgtccactggacagggg
+gcccttccctgttaggtagccgaagcggagagagagaggacagcttacgt
+cattatttcttttacgctcttttcagaaagatcaaagactttaatacttt
+cactaattttgctactgctgtctagagggcagagccaggtgtacagagtg
+gaacatgaaagtgaaacaggagcgtgaccgctgaagcacagcatcacagg
+gagacggttaggcctccagataactgcgagcaggcctaactgatgtcagg
+ccctccacaagaggtggtggaacagagtcttctctaaactcccctgggaa
+aagggagagtccctttcccggtctgctaagtagcgggtgcttttccttgg
+cactgatgctacagctagaccatggtctgcttggtaatgggcatcttccc
+agacgctggcgttaccgctagaccaagaagccctctagtggccctgtctg
+ggcatgacagaaggctcgcactcttgttttctggtcacttctcaccgtgc
+ccccttcagctcctatctctgtatggcctggtttttcctaggttataatt
+atagagcaaggattattataatgttggaataaagagtaattgctacaaac
+taatgattgatattcatatataatcatatctatgatctatatctagtata
+actcttgttgttttatatattttattacactggaacagctcgtgccctca
+gtttcttgcctcggcacctgggtggcttgctgcccacatacctaaatggt
+ttttatgatattattattacattttgttcttaattttcagtatgttgatt
+gctgttatataaaagatttaaccttgtctattaatcttgtattttgtgac
+attaataaaattttttattaactgaagtatgtttttggtaaatttatcat
+agtttttaacccaatattatggcaagataatagtatcctacttcttttct
+aatctgaagattttatttatttttctagtatacttttctggctaatactt
+ccaggacagtgtaaaaacagagtggaaaaagtgtacattcttgttccatt
+tttaaacttacagatacagcctgcaatcatctaccgttaagtatactatt
+agctattgatttctttttttttttttttttttgagacagagtcttactct
+gttgcctaggctggagtgcagtggctcaatctcggctcactgcaacctct
+gcctcccgggttcaagcgattctcctgcctcagcctcctgagtagctggg
+attacaggcacacaccaccacgcctggctaatttttgtatttttagtaga
+gatggggtttcaccatgttggtcaggctggtctcaaactcctgacctcct
+gatctgcccacctctgcctcccaaagtgctgggattacagatgtgagcca
+ccgtgcccagccagctattgatttcttatagatgctttttagcaggtctt
+acaagttcctttctactagatttctgagtgttttatcatgaacgggtgct
+ggattttttatactttttttgcttatttacattgacacttttttctattg
+ttcaagtaacattttgtaatattttggttgattttaaaaatattaagcca
+acactccatttgtgacaaactattgcttggttatggtatgtaatcagttt
+tacatgttgctggatttagtgtgccaacatttcttttttttttttttttg
+agatggagtcttgctctgtcacccagactggagtgcagtggcacaatctc
+ggctcactgcaacttctgcctcctgggttcatgcgattctcctgcctcag
+ccttccaagtagctgggactacaggtgcgcgccaccacgcccagctaatt
+tttgtatttttagtagagacaaggttccaccatgttggccaggatggcct
+tgatctcttgacctcatgatccgcctgcctcagcctcccaaagtgctgga
+ttacagtcatgagccaccatgcccagccgtgtgctaacatttctaataac
+ttcatcaggaattctatatttatatggaattttagtccatagtcttcttt
+acttgtgattcttttgtctggctttggtatcacagtacccctagctagta
+aattaatagaaaaatgttacctctgccattgatgaaagtttatgtgaaaa
+aattatattacatttttattaaatgtcagtgaaattcagaattaatgcaa
+tttgacactgagcttttatatgtaaaaataatttaattaatactttctat
+tgttatatgggtattcacttactctcatttaatatatatggatgtatatt
+cttcatttttgcacaatgaaaactgatttctcagcattatttgttgaaca
+aacttcctccattggaatttcttggcatctttgacagaattatttttacc
+tcaaattaataccttcaactttattcttttaatctacacaaatcaattcc
+tatggtagtactatattctttgattaccataacattataactatagcatt
+actatcataatctttgcctatcaagagttttttttgttttttttttagac
+agtgtcttgctcttatcgcccagactggagtgcattggcgcgatttcggc
+tcactgcaacctctgcctcataggttcaagtgattctcctgcctcagcct
+cccaagtagctgggattacaagtgcccaccaccacacccagctaattttt
+gtatttttagtagagacggggtatcgccatgttggccaggctggtctcaa
+gctcctgacctcaggtgatgtgcccgctttggcctcccaaagtgctggga
+ttacaggcgtgaaccaccatgcccatctggacatttatttttttattttt
+tgagacaccgtcttgctctgtcaaccagtctgcagtgcagtgtgatgatc
+ttggctcactccaacctctgcctcatgggttcaagggatcctcctgcctc
+agcctcctgagtagcagggaccacaggcatgcaccaccacatatgactga
+cttttgtagttttggtagagatggggtcttgccatgtagcccaggcgggt
+cttgaactcctgagctcaagcaaaagacattttttaattttatactagtt
+tacaaaagtttatatcctagatacttgacatgaaataatatgaaataaaa
+atataaaataggctgggcgcagtggctcacgcctataatcctagcacttt
+gggaggctgaggctggaggatcaccatatcaggagatcagtaccatcctg
+gccaatatggtgaaaccccgtctctactaaaaatacaaaagttagttggg
+cgtggtggcgggtgcctgtaatcccagctactcaggaggctgaggcagga
+gaattgcttgaaccagggaggaggaggttgcagtgagccaagatcatgcc
+actgcactccagcctgggctgtaacttaatcaataaataacacaaatttt
+actccattattaagatggagaatatgactataattgtgttagttaatact
+tatgtttactgtgggagacaaattagttactgagtagttaactgagtagt
+tagaagttaataacattgcaatttgactttcgaatgtataaagctggcaa
+acgaagcctcccttctatatttatcaacatttaagtaagacaaaatgaat
+tttaataagaacaaataaaaaataattatattgtatttaaagaaagctat
+gaacaaaagataatctgaccatcacagtcattagtatttcattcatacaa
+tatgtaagacaatattttaagccattaaacatttttagacttaacaccta
+agagtttaaagtgaatatgttaaatatttattgaattaaaaactggtacc
+tttaaaaattagattttaattgaaatataattattaggccgggcacagtg
+gctcacacctgtaattccagcacttcggaaggccaaggcaggcagatcac
+ctgaggtcatgagttcgaaaccaatctgaccaaaatggtgaaacccaatc
+tccactaaacatacaaaaattaggcgggcgtggtggtgtgtgcctgtaat
+cccagctacttgagaggctgaggcaggagaatcacttgaacctgggaggc
+agaagctgcagtgagccaagatcacaccattgcactccagtctgggcaac
+agagcaagactccctctcaaacaaacaaacaaacaaacaaaagattattc
+acaaaaatggaagtaaaatttccacaaatgtatagagctaaaaccagaga
+aataaatataaatggaactgagagaaattgtccttaaagctggaaatgga
+ttcttacaataccttcaacaaaaaagggtaaattattttcaaaagaaaaa
+cattaatttggttatcaataggagcttcttaagtgtgtagttcaagaaaa
+aagaaacatttttgtgtctaaagttaaaaataaaaatgaaagagtaagag
+acttgacttgggagctgacatgttcttttctcaaggttatcagtacccgg
+cagcctttcaactacaaacaacattctagagttgacaaaatatttgtata
+tcccatctcttctctgatctttatatgctgtttggctgtgcaaaatagag
+gctaaagtcccattttgcagatgaaaaagctgaggctcggaaagacaaac
+atcacacacaaagtttgggtcacaactggcattagaacacaggactctca
+aaccagtgctttcccatcactaaaccactcctagggctaagaatacatta
+agactccaaaagatagagaattgctcaatgcattccaccaagattagacc
+tgacccaccccagaaagctaagccgctctggggccctggggtggaaaact
+caagaaaaagaatgatgcctacattcacacatctgagctccaatccaaac
+tcggccagtcagttatagaacctcatttgctgagcctcagctttttctga
+tataaaatggaactacagaaggctccaaaaagatcaggataagggcagaa
+ctgcactctaaatgcaggagtgcctggcaggtggaaaccactcactgact
+tttagtttaagcacataagtaatatgttgtgtttcactgtgtctcctcca
+tggtgtctgtttcatggctccagatcctgggggcttctgatcaatccttc
+tgctaagtgatggacgaatagatgaatggatgggtggttgaaagggtgga
+tgaaatgatgcatagatggatgaatgctcaggagggcagaaagaagtaaa
+cacagagtcaaaataagaatgaggagatgattgaaggatgaagagttgat
+gcatgagatagagacatggtctccaaccctcctatccccacacagcctca
+ccaacacctgccttggggtagcagtggcacatgcttcagatgatgtcccc
+agtcaccatgacatagctgcggaaggtgccatagacctgaggctaatcat
+ggctcatgagaaacgtgctaagagccagcagaaaaaacccagcagcacaa
+taaagtcgacgttgaaactcttctcatctgcaatggctgcctggccaggc
+catagactatgcactcctggcagagggggtgcatgtcatccagcataaac
+acccagacaggctcacagggagggacgaagctctgcgattgctgccaatt
+gaggcttaaagttaaagggagaacaagaccccctcaggtccagacccagt
+gcctgggcccacaagttcagatggcaagaggcagcacacttcagtgaaca
+attgcacccacccacccactcaccttctctcctcaccatcctgccttctc
+tgcaggctaagcagtcctgcagggcatgtatgaatctgaatgagagagta
+tgcaggaaagagagaagggaagattaccaggactgggccccagccaagga
+tttgacatcaccttatttgcctactatagggatgaactaggtggtcaagt
+ggccgtattatttcactgtattaatacaaatacaccttccagccctggga
+agcagcatacaattgccaagagacgttagaatgctgctggaggattccag
+ggtctcacagtctggattttagagtcctgaattttagacttttcaaggac
+atgtgctcctctggggttcaggcataatagactatatttaccgatggtga
+ctgtgtgcatgacgccataacatgttacactattaactcacttaagggac
+tccatgaggcaggtactgctatcttcactttacagaggacactgagcaca
+ggcaagtaacttccccatggtcacacagctggaaatagcagagcagctgg
+gatgtgcacccagagtctgtgtacttagccacagtgcaatcctgcataac
+tacaaaacaaacttatgtgtgtgagcatctatccgcccaagcagacaagt
+gtcaaactacgcgaatgctgtccaagcactgcgtgagcatacacttctct
+gaaagcgttctgctcatcaacagggccagccagtgacttttctgatcgct
+taatgcacctatccagtctcttcacaggcggctcctggggtctgccgggg
+gtgctggcgtcgggttggccctggcgctgtccccagcccccactccccag
+gccctgcagcgccatgaggtcggactcctgggcgtgtcctgggttctgac
+ccacccgcgacgccagctgcccgcgcccggagcggatgggcctggcccgg
+ctccaccccgcggggctccgcggctcaacgggtcgcccaggggcgcgggc
+ccggcttcgtcctcgacggtgtccgccccggccctggctaggccgacggc
+agccgggtccgggtggggctcgggctcggggcgcgcccctcccatctctc
+cagggtccgcgtcctcgctgccgccaggtcccgccgagatccccggtggc
+cccggctccagcggctgcagcgtcgccatcgccgggcagaccccggccga
+cctcaaagcgaccgcgcggtggggccggcggggactggggctgcgcagcg
+cggcctggggtgggggcggcggggcccccaggagctcctgggaaccgagg
+gtcctggggcggtcccgccccgcacagctccgggtgagcttggggaggga
+gacacactctcagcccacctcgccccgcccgacagcgctccgagtcctga
+gtcccctcacccccattctacagacacgaaggtgaagccaaagacgggac
+gctcacttcctgagaatttgctgcctgctgcgtggacaccaccgacctat
+tgtttacagcggtcagggacccgccccccagacccccaggaccgcgcttc
+cgggggaggagggtgtcctcagcaacggtgacccgcaccaaagccctcct
+caccggggtcaccgccacagccggtgcgaggcccgcagggcgctggggat
+gcgcgaccgactcccgtgaacctgctcctcgcgcgtcagggagagctgtg
+cacccaactaggctctgtgaggacggactgaggtcggcctgcaggctgcg
+gccccgaaggcaggatttgtggagagatgattcgcgagccttggaggaag
+gatgggctgtgcgtgcgtgggtgcgtgcgtgtgtgtgtgtgtgtgtctgt
+gacttttgtatgtttatgtgagactgcgtacgtgcgcgcgtctgtgtgtg
+cgcgcgcgcgtatatgtctgtgtgtgtgcgtgcgtgtataatttctaaat
+ggacgtcaccttacacatcacaaggttaaaaaatgacccctgggctgtgc
+caggccaagcacgaagagaaagccccgcctgaaactgcctggaggccccc
+cggctgtcactctcgccacattccgtggagtatgtggttgcaacttctgt
+cactcaaggtctgatggcggggagattggagccgtatccaatcagcgcac
+tggagtgaaaactgcccaatcaggcacgcagccagagaggaggcggtggc
+ttccgggatgtggcgcgggtctttgcgtctggctactaccagaccgcggg
+ttaggggcttcatctctctgcgttctcagttgtgggaggccttggtgatt
+cggccacagctcagcctccgtcgctctgtgacctgcgggtattggatgat
+tggtagctaagactcccgaatacttcagaagtggggaaatggtgagtgtg
+cggggcagggcgtcccaaggctgaggaggtctcatcggagctggcgggaa
+atggcggcgggaccgagtctgcgaacggagtccccgctgccgccgctcag
+ccctggggcctcagtaccctccggtgagggacctgggctcctgtcggtcc
+ccgcacagcggctctggcccagcctgcagccctccttgtgcagctctgcg
+cccgcagccccgcaccttccccaggctgtggggtgaggagtagcttatct
+ggaagccgcccgcgcggcgtgcgcgatgccggcgtgggaggagctgtggg
+agaagctgtggtctggggatcccgtccctgctttaccctgttcggaatga
+gatcgaggccccatcaaaacagagttcatgtgagcaaatggggactcatt
+aatgggacagcgccggccgtggctcgtggtttgggggctgccagcgggtc
+ttgaaggaaaagcttttgtgaggtgtgtgaggaagcgaagcaaatcaccc
+gcccgctccaacttgcccaccagtctccttgccctgtgcgcctcctccgc
+gtggctgttcctgagtggcatcttttagaatacgctagtgtgggcgcgca
+cagcgcttcgctgagttctgtgagtagttctgtcatattattgaacttga
+ggagggtgtgggcccctggtttgtagacaggtgttcagaaatgaagacgg
+gtgtccagaggcagggactggcgtctgcaggggggcagctgcgggaagag
+cgctgagcttgtggggtctgtgctgactccgggtggtgtcgttagtgagt
+tgttggacagcccgttggggtcggagcattgactggtgttgagcaaactc
+ctcacgtttcctgtcagaagaaagacatggctgagcctgggctggaggga
+gtcgcaggtgtccgcgggagaccagccgggttctgcacatgcactgtcct
+gctgcgcactgttctgttcctccaggtctcctcccggggagagagggcgc
+tgagaacttggaggaaaggagttctgagaaacatcccttccctgcaccct
+gctgccagcccccacccaatgctaacccactcctgagcccgcccattggg
+cattcgcacggccacacttgtcccaggacagggttctaccctcaggaatt
+gtgcccatggcagctttgctcctaggtttttctcccaagaacacacacag
+tgcccagaagactcctggttcattttaaccccagatctgtagcaggaatc
+tgttttcttcacccacccaggcttttggaccacctgatcctaatctcctc
+tgcctttatgggctcaggaatcagttagagcttagccctgcctgggcctg
+aacttgtagcacaaaccagtcctttcgtcaatcctgccttgcccccactc
+aaggctcttgatagcacctttcttctgctcttttcttccccacaaatcct
+ctttcctgtgcacacagtttgctcaagtgcatccctcatgtgctacaaga
+attcaacgttagtgagttcaagaccatgcctttagacctgcctgttgtag
+gaccaaatacaaatcagaagaggcttaatgctttctctttagaatgagga
+aagaatttttactcttctcccttaaagcatttagtttgaaaacttttata
+tttaaatattttctctgcttctttgaaatatatataactcattttaatct
+gttaactaggtgatttgtcttttttgactcaaaattgtctttaggacatg
+gaaactattgctttgaaatgtgcatagcaagaatatataacctattccgc
+aatttctgtagcagagtaggaggctgccttcagcaggtacctgccttcac
+atatcaaatctacctcctgtcctgaagctgtgggaagtttattttccctt
+tgaatattaccaattaggaaacccggatgacctcccaaattactaggtga
+aagtgtaataaactatgtatgatacatggtactgtcaagtcttctacttg
+agagctaattatggtgactttctttgttttggcagtctcttagtagactg
+cctgtaatgcacaccacattttgtttaattctctaacaacacattttctt
+gctgttctattattttggacagtattttaggattgtagatgattttgctg
+ttatattttccacacgctgtcaagaattactagatgttatacacaaagtg
+cccaccaggcttcgttttagagaagaaccttctttctcaggattccagtc
+acaacccacagttgtgcagcaaagtgcacgaagtgcagcaaagtgctccc
+caaagctgcaaacaaaatgatctctctatttgggatctacaatcccttct
+atagcagtttgactagatttctacaaaaatgactttttaggatagcgatc
+agtttttccacctctttcagtgtgccaatgatcttcagatctgacactga
+ttcagaaatcatggggcccataaatccagcgaggttcacacatgtgcatt
+gattaaacctgagaacttccattctctcccttctccccttgcccaaatgc
+ccacaaatgtgcttaccagccctccaagtcttaaatgtgcagttccaaat
+tctgagtttatgtcctgggatttgagagaagaacagaacttttgtttgag
+aaatacaagttcttttaattacgagaccaagtgatgtgttaaaatgagac
+cacagtcctaccgttcccctctttgaactgtttgtcttttgaagttgttt
+gctattgccacaagtggatataaattaacctaataatgccatactggaca
+ctataacccacaccttatagcttaacaacgtacatagccaatcactaacc
+aatgttacttctataaaccaataagaatttctgacagctttctatcagtt
+ccgtctgcctttctttttgcctttaaaaatatacttgtaactgcttctaa
+ttggagtgtatattcagggcagctttatagtccagggttgcaatcttcaa
+gctttggcccaaataaactctcttcttatattatgtttaccccacctttt
+tccttttaggtcaaaaaaacatttttcttttttttttttttgagacagaa
+tctcgctctgtcgccaggctggggtgcagtggtgcgatctcggctcactg
+caacctccgcctcccaggttcaagcaattctcctgcctccgagtagctgg
+gattacaggcgcacgccaccatgcccggcggattttttatattttgtagt
+agagatggggtttcaccatattggccaggctggtcttgaactcctgacct
+tgtgatccacccgcctcagcctcccaaagtgctgagattacaggcgtgag
+ccaccgtgcccagcctgttttgtgagttttgatgccattatgtgaatggc
+tattcattgacagaagagaagttgttattatttgtattgtgtttaccttg
+ctaagaataaatatttagcttctaatataattgttctagagaaacataag
+ggttttggttaaattccttgttactgtatgttatacaaaagacagagaag
+tggctaaaatagattaaaatttcacaaattctgggaatcaaatttctctt
+gggcaggcttagaaaagacaaaaccgaaagtacttagtgacatagagagc
+agaagcctagggcccactttctgtcccatccctgcccagatctaccctct
+tctgatccttgtccaggtctgagccaacactgaaatctctcacagaactg
+attaatagaggagatcagagtttagggtggctactccagtctcctctcca
+gagctggtgcccacaattttctgaaacccaaaagccaataaatagggaaa
+agctatatactttggggccttaaatcttttctataaaattaaaactaatg
+tttctagagacatcccacccagcaacctgttctctatccctgcagtttca
+gtggctttttcttacaagtctcaaagtaaatacaaacacaaaaataaaaa
+aattcctctgaattgtacttaacactttctttggctctctcccatctatt
+tatatttagctattattctatacatttttttaaaaagtcaggggaaacag
+aaaggaaatggaaattctgggccctgcctttaaatctgggaagtatggga
+cacctagtgtctacctcccaggatgttatgagaattaacacacataatat
+gagcttcccatcacagtgctctgtgacatacatctgagcacatattacat
+gccccataaagatggcattaatgcagatgcacatgttgtttttcagatac
+agacttactcagacattgccaccgtctccaacttctgtaaccttataggg
+tctgcagagaatgccatgtttgaagatgatgattggtggtcttgggatga
+aaagtatttgtgttgtgataacggtgttggggtaagggactctgtgtgct
+gtgtctgctttctctaactgagtggtactataatgggtctagagggagga
+gcgtcagcattaacaggagacttgctgtaaaaagctaattcatggaccct
+tttcaaacctgcagaattttgttacttacagtgaggcctacaatatcaaa
+taatgtatatgtacaatgaagcttgagaggcagtgcttagctaagtgact
+ctcagcccagtcttccagtaggatcacatggacagtttgaagagaaacca
+tcagctgtgttctgcccacagatcctgtccattgttctgggtgaaaagtc
+cttatttattttatttttgattgttgttgtcccagatttattgaaaataa
+tacagcactacagaaaaaattcaaacaggtccccgaggcattttgaaatt
+catcccaactgtaggctgagtgacctgaaggttgaacagactgccgaagt
+ccaaaagcttcagcatttccttagtgtcaggatctacttcaattatctcc
+tgatccaaggctgagaccttattttttaaaatcagttccttgcgtggtta
+aaaaagtattaaaaaagttccttgcatgattaaaaaagtattaaaaaagt
+tccttgcatgattaaaaaagtatttaaaaagttccttgcatgattaaaaa
+agtccttatgttttaaaatcagttccttgcatgattctacagcaaggcca
+gggtgaagcatgagggcttccagatactttagtgaaaggtgagttcaccc
+tttgttccaggaggtcacagggcctactctgcttgattttggtaggggaa
+ggtcagtgtagcccattatttttattgcagcaacagaaactcttggaatg
+ccatcctttttctgcagagctatagaatactttagagaatattactgcgt
+tgaaagttattttatcagataatcccagtcagtcacatgtcagaactagc
+gctctcaactcatttcacctgtagtcaaattaagaactatgtcccttcgg
+ctgggcgcagtggctcacgcctgtaatcccagcactgtgggaggccgagg
+agggcggatcacaaggtcaggagatcaagaccatcctggctaatatggtg
+aaaccccgtctctactaaaaatacaaaaaatcagctgggcgtggtggcgg
+gcacatgtagtcccagctacttgggaggctgaggcaggagaatggtgtga
+acctgggaggcggagcttgcagtgagccgagactgcgccgctgcactcca
+gcctgggtgacagagcgagactccgtctcaaaaaaaaaaaaaaaaaaaaa
+aaagaactatgtcccttgatatatttgtattttcaggaactcttaacatt
+cagggatgtggccatagaattctctccagaagagtggaaatgcctggacc
+ctgaccagcagaatttgtatagagatgtgatgttggagaactacaggaac
+ctggtctccctgggtgaggataacttcaatacataattcctaatttttct
+cagagctttattttattcctttgaagaatttctcctgggaacttttatgt
+tttatctttacataaaccttctcttttcttgagctaatttgagtccttca
+ctctaggttagtggtaattctagaaattcaatgacataaaatattgtttc
+ccacatcttaaaatccaatttgcaccacttattttttattcggtagtact
+tggtagtggaacttagaacccgcagatttaaaatacttaaatattctaaa
+gattctgtcaggaaacaatttttggattaattttctagaatcttccataa
+tatctctattctgcttagcgtagtactaggttggtaattggagaatcccc
+atcaatagtcatgttattattttttttaaaataaaacaggtgttgctatc
+tctaacccagacctggtcacctgtctggagcaaagaaaagagccctacaa
+tgtgaagatacataagatcgtagccagacccccaggtaggtgagagtgaa
+tggaggagagggcacaggcaaggggaccaaaggtcaagaaggaagccagg
+ccttaaaatgtggtttggggccgggtgcagtggctcatgcctgtaatcca
+aggactttgggaggccgaggcaggcggatcacgaggtcaagagatcgaga
+tcatcctggccaacatggtgaaaccccgtctctactaaaaatacaaaaat
+tagctgggcatggtggtgcgcacctggagtcccagctactcgggaggctg
+aagcaggagaatcacttgaacccaggaggcggaggttgcagtgagccaag
+atcacaccactgcactccagcctggtgacagagttagactccgtctcaaa
+aaataaaataaaataaaaaataaaccaggtagtttgggaagctctgctcc
+agtgaaaataatttctgaaaaagctgcattttttctcatgttcacaaata
+ggggcatcttctgttccatgctgttaaatccaagaattctcttttttctt
+tagtgatctccctttaagtttacagggagagctaatgtccactttatcgc
+ttataaggggctgcatgatgtgactgctgttccattgcttttggagacac
+tggaatatttgtgttactgaggagctgtatgtcaaagtatttttttcaag
+tattcttttcgtattatgtctaaaatgtgtaacgtgagtagtggacatag
+tgggatttggttcagaaatcccaggaacaccaaggacagatgttgcctct
+tttctacttagtgttttttaatcctatggaggctgcaaatgtaattctac
+aaaaattcttacttagcaattttatcagaacaataagcatttcctaaata
+tgaaaaaaagtaatgttattttacttcaaaattactgttttagtataaac
+tcgtttgtaatgtaaactctatatgtgcaaattttgaaattataatatag
+tttaaagcatggatttccaacattttggcttccctgggccacattggaag
+aagaattgtcttgggccacacataaaatacactaacactaatgatagctg
+atgagctcggatcatctgagatcgggagtacaagactagcctgactaaca
+tggagaaaccctgtctctactaaaaatacaaaattagctgggcgtggtgg
+tgcattcctgtaatcccatctacttgggaggctgaggcaggagaattgct
+tgaacccaggagacggaggttgcggtttgccgagattttgccattgcact
+ccagcctgggcaacaagagtgaaactctgtctccaaaaaaaaaaaaaaaa
+aaaaagtttttgaaaaatttttgtgatatcctccaccacagaagataagc
+aaaaaaagtccttgcattcaaagggttggaaaccactggattaaagtatc
+tactcaccttctatatttcttaaatgcactgtatcattaacaagcataaa
+tgtgctatgtcattaaccagcatagaacattactaagtgtatattaagct
+ctcaattgttctcttatttgttaatagctattataattttgtcttagtag
+gaagtctgttgagattctgtcattgagatgtatctctctgtagctatata
+aaaatgtgtgtctcacacacacacctatataacttatttaagtgtgtagt
+aaattctcacttaacattgttgataggttcttggaaactgagggaagcaa
+catattaagaaaactaattttaccagagtttaattgataaccagagttta
+aaagataacgagttatgtttgaatggcatatagcaacattatttcattta
+acaatgcagtttttaagaacctaatttgaacattaagtgaggacttactg
+tacatctgtgtttgtgtgacatggatttttctgataaataaaaattatgt
+aactttatatttaatgtgtacaatgtaatgatttgatatgcatctacatt
+gtgaaacaatatagtcaagttcatgaagaaatctattacttcacctagat
+aaccattttgtttggtagtaagaacacttaaggcctactgttgtagcaaa
+tttaaagcatacattatagtattaactatgaatacaatgctattttggta
+atctaatgctaatatacattaggtttctcagatttactcaacttataact
+aaaaatttgtgctcttgaacaacatctcatattcccaccctaggcactaa
+caactaccattctgctctctgcttctatgagtttacgcttttagatttcc
+tatctaactgagaaaatttagtttctttgtctttccgtgtttggcttatt
+tcatttagcataatgccctccaggtctatccatgttgtaaatggctagat
+ttccttctcttttatggttgaatagtgtcctgtgtatgtgtgtgtatata
+tatatgtatatacatgtatgtatatatatgtatacacacacacacacacc
+gccccccccatatattggctactgtaaacggtactacaataaacatggag
+gggaagatagttctttgaggtactaattttatttcctttggtagtatgcc
+cagaagtggtattgctggattatatgatacttctagttttattctttttt
+tttttttttgagatggagtttcactcttgttgcccaggctggagtgcagt
+ggcacgctgttggctcaccacagcctctgggtcctgggttcaagcaattc
+tcctgcctcagcctccgaagtagctggaattacaggcatgtaccaccatg
+cctggctaattttgtatttttaatagagacggagtttctccacgttggtc
+aggctagtctcgaactcccgacctcaggtgatccacccgtctcagcctcc
+caaagtgctgggattacaggagtgagacaccacgcccggccaagtttttt
+ttttttttttttgagactgagtctctctctgtcgcccaggctggagtaca
+gtggcaggatctcggctcactgcaagctccgcctcctgggttcacgccat
+tctcctgcctcagcctcccgagtagctgggactacaggcgccttccacca
+cacccagctaattttttgtatttttagtagagacagggtttcgctgtgtt
+agccaggatggtcttggtctcctgatctcatgatccgcctgcctcggcct
+cccaaagtgctgggattacaggcgtgagccaaggagcccggccgcgccca
+gcctagttttattctttactgtatttttgtaagtttatcaatttgcatct
+caccaccagcatacaagatttcccttgtatgtatttcttctttgggaaaa
+aaaaaaaatctaaccttttgcctattttcgaatgggttattcattattat
+tgttttgcttttttgctttgaattgcagaagtttgttacacattttggat
+attaacttttttttttttttggagacagaatttctgtcgcccgagctgaa
+gtgcagtggcacgatctttgctcactgcaacctctgtctctcgggttcaa
+gcgattctcctgcctcagcctcccgagtagctgggattacaggcacgtgc
+caccatgcccagctaattttttgtatttttagtagagacgaggtttcact
+gtgttagccaagatggtctcgatctcctgatctcatgatctgcctgcctc
+ggcctcccaaagtgctgagattacaggcctgagccaccacacccagctgg
+atattaacttatcagatatggcttgcaaatgcttttctattttgtagggt
+ttttaaaaattttgtttttattttttcctttgatgtgcagaggctgttta
+ctttgatgcagtctcacttgtttatattttattttgttgctgtgctgttg
+atgtcatttcaaaaaaagttattgccgagaccaatatcaacaaggttttt
+ccatatgttttcttcatgagttttaagatttcatgtcttaatttcagtct
+ttgttttgaagtctgaaattagaaagcatgatgcctgccagacaaggtgg
+ctcacacctgtaatcccagcaccttgggaggccgaggtgggcggatcact
+tgagatcaggagttcaagactagcctggccaatatggtgaaaccctgtct
+ctactaaaaatatacaaaaactagctaggggtggtagtgggcgcttgtaa
+tcccagctactcgggaagctgaggcaggagaatcacttgaacccaagagg
+cagaggtttcagtgagcctagatcactgaacctagattgtgccactgcac
+tccagcctgggtgacagagctggactccatctcaaaaaaaaaaaaaaaac
+aagtatgatgcccccagctttgttctttctcaagattgattgctcaggtt
+attaaaagtcgtttaaggttacacctaaattttacaattgtgttttctat
+tagtgtgaaaaatgccaataaaattttgatagggatcacattgaatctat
+agatcactttggataatattctttgacaatattagttatcctaatggaat
+atgtttccatttatttgtttctacttcactttctgtcattgatatcttat
+tgtatttagtgtataatactatatgttttttatgtcatttggttaaattt
+attttgattaactttcttatttttatactattgcaaatggaaatggtttc
+tatttttggaaagtttgtttttactctatggaaatgcaagaaatatttgt
+atgtggtgccaggtgcagtggctcatttctgtgatcccagcactttcaga
+gcccaaggcagttgtatcatgtgagtacaggagtttgagataagcctggg
+caatagagtgaggccctgtctcaaaaaaaaaaaaatcccaacaagcatct
+atatgttgattatgtatcctgatactttaatgaatgcatttattagttca
+atcaatttttcttattttactctagggttttatgtatatgcatgatgata
+ttatccacaaacagtaacttttttatttcttttccactctggagagcttt
+attctccttttccttgtctaattgttttgatacaaacttccagtcacatg
+ttaagatagaagctgtggccctggaggcaggcctgcaagtcttgtccccg
+gctgtggtctctgaagcagccctgtgtctgcatttgacaaatttcacagt
+ttgtataaactatttttggcaggtaaagatctccttttgttgagtcccag
+gctgatgagattacctctggggttgcagagaagaagggttgtagctgggt
+cacaagggtgctgctgggtctgctgtggggtctgcctttgatgattgtat
+taccagagatttggacagtcatggattatttctgggccctggagagatta
+gatttccttgaggatattaatctatatggcaggcagtagactagggtttt
+gaagtttgtctgcatatgatgggccaaataccaggtgtatgaatgggttt
+ggcttctactgacaacctgggaacagtttccacacttttctctttgggtc
+cctgattgtgtacaactggccatggactgtgactgtgagggctagaactg
+agtcacagggctcaggagcacagctgaggccaggatatacaggcctgcct
+ccagggccatggctgggtgtgtatctccctgcaggtctcttgatgggaag
+gaccacgtctggactgtagctgagattgaatttgagagaggttacagaac
+tgcttcagaatcctcagtaagaccaagctcagtgtgccatttccttgtct
+gtagccatgtctatgggctcttgagttggccatctgagtgagggcctgct
+tattctaaataaccctcgatctctggctccactgaggtttcacaacccta
+accataggcaagcacctttctacttctgctttctatgtgcttactactta
+aaatattgtataaaaatggaatcatgcattgtcactttgttagcgtctta
+tttcactaaaataatggcctcaggatttatccttattgtagcatctgaca
+agacattttcatttgaagctaaagaatatttcattgcgtgtataagccac
+atcttttaaaatctttcattcattgaaggatgtttgaattttttcacttt
+ttcacttttgtaaattatacggtttggatctatgtccccattcaaatctc
+atgtcaaatgtaatccctattgttggaggtggggccttgagggagatgat
+tggatcgtagggttggcttttcatgaatagtttagtaccagcccctttgg
+tactgtctttgccatagtgagtgagttctcccgagatcttattttttatt
+tatttattttttgagatggagtctcgctctgtggctcaggctggagtgca
+gtggcatgatctcggctcaccgcaagctccacctcacgggttcatgccat
+tctcctgcctcaacctccagagtagctgggattacaggtgcttgccacca
+tgcccggctaattttttgtacttttttttttttttagtagagacggggtt
+tcaccatgttagccaggatggtttggatctcctgacctcatgatccgtcc
+acctcagcctcccaaagtgctgggattacaggcgtgagccaccgcgcccg
+gcctgagatcttattttttaaaagcatgtggcacctcccctctcactctt
+gtcttgctcctgttcccactgtgtgagatgactcactctccctttgcttt
+gtgccgtgactggaagctttctgaggcctccccaaaagtagaagctgctg
+tgcttcctgtacagccttcagaactatgagccagttaaaccttttttttt
+ttttttgagacagagtctcgctctgccactcaggctggagtacagtggcg
+cgatctcggctcactgcaatgtccgcctcccaggttcaacttattctcct
+gcctcagcctcccgagtagctgggactacaggtgcctgccaccaagcctg
+gctaatttttttaatttttagtaggggcggggttttaccatgttagccag
+gtggtctcctgacctcatgatccgcccctcggcctccaaaagtgctgaga
+ttacaggcgtgagcaaccatgcctggccggagaaacatttatacttccat
+atacttgttgaagtataaaatgtaagtgccttacaattttctttcctcct
+aaaacataagcactgagtttgaggcattttcctggatttttcaaccactg
+agttctttttatataaaactaagtgaataaccttgactgggaatccgaga
+cctaagcctgttgactgcagggtaaggtcaatcttgattctgccaaagca
+ggtcatcaatagccccgtaatgtgttgctggtgaacctttctttcaggtg
+tctcagcctgctcaaattagacagggaaggagccctggaaagctgggtat
+ccacaggcagaggcagtgagggtttggatgagaggaggttgtgatatcct
+ctgagagggtgtaattgttattgtcatggggctgtttctacatattgtca
+agtaaaataaattttgatgtaggtaagaagtgagtttattctaaggagta
+ttgcagtggggaaagcatcaagcataagacctgaagtcatctccaaaatg
+aggcagaaaaaggctatttttcatacagaggagcaaacaagattagaaac
+aaggtaggagggccaggcatggtggctcacgcctgtaatcccagcacttt
+gggaggccgagacgggcatatcaggaggtcaagagatggagacaatcctg
+gccaacatggtgaaaccccatctctactaaaaatacaaaaaattagccgg
+gcgtggtggtgggcacctgtagtcccagctactcagaaggctgaggcagg
+agaatcacttgaacccgggaggcggaggctgcagtgagccaagactatac
+cactgcgctccagcctggtgacagagcgagactccgtctcaaaaaaaaag
+aggaaggtgggagagggagaaggcagaatggagaatggcaaaatcagatt
+caggattggagaatgtttcaccctgaagtcagcctgttcttgggaggggc
+atcaagaggggttgtatgctagctcagactgaaggtggagcagagtccag
+gggcctgggggaatgtagagtttgtgaatttgtgatatctaagagggagc
+atcttcaaaatcatagtgaaaagggtatttctttgcaataagcgtttctt
+gcggatcacaaaggattggagagaccttagtcatagctatttaccaagat
+tcactacccacctcatcttttcccccactttcctttgtcctatacatttt
+ttccctttggcttttactgagctgtattcaatataataacctggaaaaca
+tataaatcgtttttgctaagttctgtgagtagttttatcaaattattaaa
+tttgagggagggagttagggaagcccatgatttatagtcagttgctcaga
+agtgtaggtgggcccctggagtttgtgactggcatgtgcagcggaagcag
+tgttgtggaactgggtctgaacttgtggggtctgtgctgaccctgggtgt
+tgtcagaattgagttgttgggcacccagtttgtgttggaggattggttgg
+tgttcagcaaactccatatatttggtgttggaataaagataatcaggctg
+gatgtggtggctcacgcctgtaatcctagcactttggaaggacgaggagt
+gcagatggcttgaggtcaggaattcagcaccagcctgggcaacctggtga
+aatcccacctctaccaaaaatacagaaagttagccaggcatggtggcacg
+aacttgtattcccagctacttgggggactgagtctggaggattgcttgaa
+ccctcagaggtcaaggctgctgtgacctgagatcatgccagtgcactcca
+gcctgagtgacaaagtgagaccctgtctaaaaaaaaaaaaaatcacagca
+gacttggtcagaaggagatggtgggtctgttgaagaatggagagtttatt
+aatttattattattattattatttttttttttttggagacagagtctcac
+tctcgtccaggctggagtgcagtggcgagatctcggctcactgcaacctc
+cacctcctgaattcaagtgattttcctgcctcagcctctcaagtagctgg
+gactacaggtgtgtgccaccatgcctggctaattttttgtatttttagta
+gagacgaggtttcaccatgttggccaggctagtctggaactcctgacctc
+aggtgatccctccaccttggcctcccaaaatgctaggattacaagcatga
+gccaccactccccgctgagagttttacttcttttgcacacaagttgtcac
+agttaggtgtaatgtgattctacgtctcctccataggggactgaggactt
+aaagggaaggacttctgagggcagactcttctctccacctgctgctacaa
+tgtgatttctgctcattcacacacatgcacgctaagcaatggtatggccg
+tgcttctctcatgacaaagcttcactcaggaattgtgctgagagcacctc
+tgcttctagggttttccactaataggctacataagtgcccagaagactca
+tgggctctttctacctgccagatcttgaatctgcaccagtaacctgtttt
+ctccagtagaataggcttctggatcacctgaccatctcatctccctgtat
+gcacacatttataagtcagaggtgccctgcctgggtgaatatctagagca
+ctaaccagtccttttaccaactgtgcactgatcctcacccatggttcttg
+atagcaccttttcttattctgcattttccccccacagaccctctctcatg
+tgaacacagcatgcccaaggtcaccctgcaggtgcctaagtccagggcct
+gctggaaatcaggtttctatgagttcaaggcaaagtttttgggtgtggtt
+attgtaaatgtaaatgcaaaatagaaataagaggcttaatcctcacattg
+gaaaataaagagtatttactctcctcccttttcttaaaacctttgattta
+gaaaacttttatatgtaaattctttctgtgccttttatcttttttgttgt
+cttttaattctctaatttgtttctggtctgatttttgttattttgtttat
+tatgctaacattgggattatttagttatttttcaagtttttgaggattaa
+agttggtttatttgagatttttaaaatataaaatatattactataaaatt
+cccagaactgcttttgttacattcatttttatatattatgattctatttt
+catttttctcaaatactttatgatttccttttaccttctttgacccattg
+gttgttcagaagcatgttgtttaatatccatttatttgtaagttttaaaa
+tttccttccggtgttgatttctagttttataaaattgtgatttaaaaact
+tgatatgatttcagtctgtttaaaaatgaaaagacttgtttatttttgtt
+gtgggccagatttatgacaggtcttggagagtgttccatgtgtgtttgag
+aagaatataaattatactgttactatcatatttgtttttttctccagttt
+agttaacatatgtttatatatttgtgtgctccaatattggatacataaat
+atttttaatcgttatattcttttgacaaattagcctcatcactatataat
+gaagtttttttaatgacgaatttttttctttattttattttatttattta
+tttatttattttttgagacagtctcactccgtcacccaggctggagtgca
+gtggtgcaatcttggttcaccacaacctcggttcaccacaacctctgcct
+cccaggttcaagcaattcacctgcctcagcctccctagtagctgggatta
+caggtgcccaccatcacgtctggctaatttttgtatttttagtagagaca
+gggtttcaccatgttggccaggctggtctcgaactcctgattgcaggtga
+ttctgctgcctgggcctcccaaagtgttgggattacaggtatgagccatc
+gtgcccagctatgacagatttttttctagatgtctatttagtctcatata
+aatataggcattcctacactttttaagttattattggcatggaatattct
+tttcatttttgaatcgttaacctatgtatttccttaaatctacagtaagt
+ctctagtttgcagcatattgttgatttttaaaatcgattcagacattctg
+tgaatgttttagattgttttttgcttaataacaatattctagggttggta
+atttataaagaatagaagtttacttagctcacaatcctggatgctgagat
+gtccgagagcatgtcattcccacctcatgagaatcacatttccacatcac
+aacatgaccaaagtcttgaggatgatggaaggtgtacaccagagctcact
+tttgtaatagacccactctcatgatgactaacgcactcttagaattataa
+tactaggctgggcacagtggcttacacctgtaatcccggcactttgggag
+gctgaggcgggtggatcacaggtcacgagtttgagaccagcctggccaag
+atagtgaaacccccatctctactaaaatgacaaaaactagccgggtgcgg
+tggcggctgcctgtaatcccagctactcaggaggctgaggcaggagaatc
+tcttgaacctgggaggcagaggttgcagtgagccgagatcatgccaccgc
+actccagcctgggtgacacagcaaggctccgtctcaaaaaaaaaaaaaaa
+agaataatactattaatcctttcataaaagtagagccctcatgacctaat
+aacttcttaaaggcctcacttcttatttgtttgtttgttttttgagacag
+agtcttgttctgtcacccaggctggagtacagtggagtacagtgatctca
+gctcactgcaaccttcacctcccagattcaagcgattctcctgcctcagc
+ctccccagtagcttggactacaggcgcgtgccaccacacccggttaattg
+tctgtattttttgtagagttggggtttcactgtgtttcaatctcttgacc
+tcgtgatcctcccgcctcagcctcccaaagtgctggaattagaggtgtga
+gccaccgcacccgaccaaggcctcacttaattttatcacaatggcagtta
+aattttaacacgaattttgaggggacactaaaaccatagcagtgtgtttt
+tattgcatagctaaatctttctatatttaaatgaattaccgattgataag
+aacttattactgccattttattcattgtttactgaccatttagtggtttc
+tgttttttaattccttcatgctgtcatcttttgtgttttcttgaattttt
+gttttgtttttgttgccttctttttcttgtatgtgcatctactagttttt
+tttttgtaatttccaagagacttacatgaaacctctcattttaaaatttt
+gccttcaatttaaccttttgttttgtacagatagggtcttactttgttac
+tcaggctatagttcagtggtgcattcacagttgagtgcagcctcaacctt
+tgtgggctcaagcaatcctcccatctcagcctcttgagtagctggaacta
+caagcacatgccaccatattcagctaattttgtcagtgctttttgtagag
+acggggttttgccatgttgctcaggctggtcttgaactcctgacctcaag
+cacttgatttgacctcccaatgtactaggattacaggcatgagccatcag
+gcccagtcatttctttttttaaaagattgaatagctttctgagatcttta
+ttttatttatgtatttattttagagacagcgtcctgctatattgacccag
+gaggtggaggttgcagtgagccgagatgtcaccactgcactccagcctga
+gtgatagagtgagactctgtctcaaaaaaaaaaaaaaaagaatctctctt
+tgtctttgaattctggcagtttaattataatgtgtcctgagcaattttta
+tgaggttcttgctatagagattttaagcttcataaaactgaatgtctatt
+ttccttccaagattgggaaaatttaagacattatacctttacacaattaa
+aaaaatttttttttctctgtctcctgaacctcttaagagatgtacattcc
+tacagataattatgcagtgtgggacccaaatgcttcagtcactctttctt
+ttttcttttttctttttttttttttttttgagacagagtctcactctgtt
+gcccaggctggagtgcagtggcacgatcttggctcactgcagcttgcgcc
+tcccggattcaagcaattctctaccttagtctcctgagtagctgggacta
+taggcgcgcgccaccacgcccgactaattttttctttttttctttttgta
+tttgtagtagagacaggatttcgccatgttggccaggatggtctcgattt
+cctgacttcgtgattcgcccgcctcagcctcccgaagtgctgggattaca
+ggcatgagccaccatgcctggcctcattctttaagttttaattaggaact
+ttcaaatgacttacttttaagtttgcttatttttttttcctgtagaactg
+agtcttctgttaaagcttgttgttaaattttttagttctattgtgtactc
+cagcatatgtatttggttcttttttaagtttctcgttctttttttttttt
+ttttttttaaagatggagtttcgctcttgtcacccagactggagtgcaat
+ggcacgatcttggctgactgcaacctctacctcccgagttcaagtgattc
+tcctgcctccgcctcccaagtagctgggattagtcatgagccaccacacc
+tggctaatttttatatttttagtagagatggggtttcaccatgttggcca
+ggctggtctcgaactcctgacctcaagtgatccgcctgcctcagcctcct
+gaagtgctgggattacaggtgtgagccattgtgcccagctctccttcttt
+tttataactcattttgttcatgcattgttgcaaaaaaaaattagtaatct
+gtgtacttttgcattttatttttcttttgttgtttttttgtttgattgtt
+tgagatggagtcttgttctgttgccaagctggagttcagtggttcagtct
+cggctcactgcaacctccgcctcccgggttcaagcaattctcctgtctca
+gcctcccaagtagctaagattacaggaatgtgccaccacacctggctaat
+ttttgtatttttagtagagacggtttcaccatgttggccaggatggtcac
+gatctcctgaccttgtgatccatccgcctcggcctcccaaagtgctggga
+ttacaggtgtgagcctcctcgcctggactcttattgagattttttaagat
+aattactttgaattctctgttagacattttctagatctgtgttttattgt
+tagttgttcctggagcatttttagtttctttttgtgctgttaggtttgcc
+tgatccttcataatctgtgaagccttgttttgatgttcttgcatctgaag
+gagtaaatacttctttcagtcattacagactagtttagggaggtaaatat
+cttctattggttttctgggctgatgagattttcactaggatcacagtcaa
+ctgcattggatcctggtcacgtaactactactgggtctacagtgaagtta
+atgcttggcagacctgttatttaagcatcagacagttgaggattccattt
+tctgaggagactgaactttctttaagatcttgatcaataagactggtgct
+gagaaaaaaaaaacccagttaatatctgcaaatggagatgctgatacaat
+aaatatgagtaggtgtggctcctgctgtttggctcttgcgagatgtttgg
+aaatgctctaacctagtcattggacaggtttctagatgaccgttactgag
+cgttgatcacagctgagagggtgtgaaactaattcatagggctgcttcag
+gatacacagctgagaccaaagtcttcaggtttgttctgggttcatgacat
+ttctccctccagatttctaggtgggcaggacttctccctgcctctagctg
+ccagggactggagcttggttataggactgcttcacaattcacggtgggaa
+taaagtcagccagcatgcctacagggacacatgtagctgtgcttttgggc
+aggtcacaggtcaggaaaaactcctcctggattttggttgcatggacttg
+gagccaagttgtagtgccacgtcaagatccaccatcaaataaatattggc
+aagcctacatccaggggcagagatggatatttctgtctgtgggtccctgt
+gtgagtaggatttcttccacatcatgactgacatgtgcaaggggtgcagt
+ttggggtaattcagagatcacagacagaagcaacatctaaaggcctttca
+cctgagacacaggacattatgaatcctcctaagtgtcttggcagatggtg
+ctagtggcataaacaaaaccaaatgatagctatgtttacaatgagaatta
+attacatttcattctgtattgtgggcaagcatgccactcaagcaagggca
+caccctctcaatacagccctcctcagtcttcggttcgcagtcttacacat
+ggattccaaagttgccgtaaaggttgttttgtcagggcttaactgctgca
+tttttgttactgtagaaagtgtgggtagggagcctcctattctgccatct
+tgctatgccatatgttccgatatgttctatgtcaaatttatctgattaca
+gattcagaatttctgaaataaagtactcagatttacacattgtgtaataa
+gtaaatgtattgcaatgcttcattctcattagagcattttattaattatt
+gaaatgcatttgcttttattgcggcgcatggcatgtcaaagattcaaaat
+gccagctcttcataagtcacagttgaaaactagttatttaaaggattgtt
+tttatgatacgtctgtattatattcaatattttataggtcagaattttct
+cttgttttcaactgtattttactggggagtctcttttcatgtaggttctc
+cttgatcatttacttttttgtgtgtttttaatcttcatatttgtatggta
+attttcaactttgtaccttttatgaccatgtattgtttaattccaataaa
+aatcattggagcaagttaaaaaaatatacataaatatatatgtgacattt
+ctgttgcctataaaagttatctatgtggtatttgcctgcaaaaatcactt
+tgggcaaattttaaaaaatatataaatgcgaattttctattgcctataaa
+agttttctatatggtatttgcctgtataaatattgacctactttgtttat
+aaattactcattttcttgggtagtcatcagtatttccttgtgtagatgag
+cagtcaaagaaactgtaaatttaccatctatttattgtttgattatatat
+tattctgtgagagaagcacttgttatttgaaggtgatttttgaaaaatgt
+aaccgttttaggtagatgtaaatatttaattgtgatgaaaaacataaaat
+tgccatcttaaacattttcaagtacagtctagtggagctaagtacattta
+cattattttgcaatggatctttagattaattttatcttacgaaagtaaaa
+tgtaataataaataaactgcccttttcctctcttcagctcttggaaaaca
+ccattttacttactgtttctatacttttggctgatttttatatttgtatc
+actataattatataatgtctctttttgactattttttttaacggaatgat
+ctcaggctttgtttttgtaagatgtgtcagaatatctttctgtttttttt
+tttttttaagttctagggtacatgtgcataacgtgcaggtttgttacata
+tgtatacatgtgccatgttggtgtgctgcacccattaacttgtcatttac
+attaggtatatctcctaatgttatccctctccccgcccaaccccacgaca
+ggccccggtgtgtgacgttccccaccctgtgtttgagtgttctcattgtt
+caattcccacctgtgagtgagaacatgcggtgtttggttttctgtctttg
+tgatagtttgctcagaatgatggtttccatcttcatccatgtccctacaa
+aggacaagaactcatccttttttatggctgcatagtattccatggtgtat
+atgtgccacgttttcttaatccagtctatcattgatggacatttgcgttg
+gttccaagtctttgctattgtgaatagtgccgcagtaaacatacatgtgc
+atgtgtctttatagcagcatgatttatagtcctttgggtatatacccatt
+aataggatggctgggtcaaatggtatttctagttctaaatccttgaggaa
+ttgccacactgtcttccacaatggttgaactagtttacagtcccatcaac
+agtgtaaaagtgttcctatttctccacatcctctccagcacctgttgttt
+cctgactttttaatgattgccattctaactggtgtgagatggtatctcat
+tgtagttttgatttgcatttctctgatggccagtgatgatgagcattttt
+tcatgtgtcttttggttgcctaaatgtcttcttttgagaagtgtctgttc
+atatcctttgcccactttttgatagggttgtttgatttcttcttgtaaat
+ttgtttgaattctttgtagattctggttattagccctttgttggatgggt
+agattgtaaaaattttctcccattctgtaggttgcctgttcactctgatg
+gtagtttcttttgctgtgcagaagctcttttgtttaattagattccattt
+gtcaattttggcttttcttgccattgcttttggtgttttagtcatgaagt
+acttgcccatgcctgtgtcctaaatggtattgcctaggttttcttctagg
+gtttttatggttataggtctaacatttaagtctttaatccatcttgaatt
+aatttttgtataaggcgtaaggaagggatccaatttcagcttttacatat
+ggctagccagttttcccagcaccatttattaaatagggagtccttccccc
+atttcttgtttttgtcacatttgtcaaagatcagatggttgtagatgtgt
+ggtattatttctgagggctctgttctgttccattggtctatatctctgtt
+ttggtaccagtaccatgctgttttggttactgtagccttgtagcatgatt
+tgaagtcaggtagcgtgatgcctccagctttgttcttttggcttaggatt
+gtcttggcaatgcaggctcttttttggttccatatgaactttaaagtagt
+tttttccagttctgtgaagaaagtcattggtagcttgatgaggatggcat
+tgaatctataaattaccttgggcagtatggccattttcatgatattgatt
+cttcctatccatgagcatggaatgttgttccatttgtttgcgtcctcttt
+tatttcattgagcagtggtttgtagttctccttgaagaggtccttcacat
+cccttgtaagttggattcctatgtattttattgtctttgaagcaattgtg
+aataggagttcactcatgatttggctctctgtctgttactggtgttatag
+gaatgctcgtgatttttgcacattgattttgtgtcctgagactttgctga
+agttgcttatcagcttgagattttgggctgagacgatggggttttctaaa
+tacacaatcatgtcatctgcaaacagggacaatttgacttcctcttttcc
+taattgaataccctttatttcttttctcctgcatgattgccctggccaga
+acttccaacactatgttgaataggagtggtgagagaaggcatccctgtct
+tgtgccagttttcaaagggaatgcttcctgcccgggcgcagtgggttacg
+cctgtaatcctagcactttgggaggccaaggcgggcagatcatgaggtca
+ggagatggagaccatcctggctaacaccgtgaaacctcgtctgtactaaa
+aaaatggaaacaactagccgggtgtggtggcaggcacctggagtcccagc
+tacgcgggaggctgaggcaggagaatggcatgaacccgggaggcggagct
+tgcagtgagccaagatcgtgccactgtactccagcctgcacgacacagtg
+agactctgtctccaaaaaaaaaaaaaggcgggggggaatgcttctagttt
+ttgcccatttagtatgatattggctgtgggtttgtcataaatagctctta
+ttattttgagatacgttccatcaatacctagtttattgagagtttttagc
+ttgaagggctgttgaattttgccgaaggccttttctgcatctattgagac
+aatcatgtggtttttgttgatggttctgtttatgtgatggattacgttta
+ttgatttgtgtatgttgaaccagccttgcatccctgggatgaagccgagt
+tgatcatggtagatgagctttttgaagtgctgctggatttggtttgccag
+tattttattgaggattttcacatcgatgttcctcagggatattggtctaa
+aattctctttttttgttgtgtctctgtgaggctttggtatcagaatgatg
+ctggcctcataaaatgagttagggaggagtccctctttttctattgattg
+aaatagtttcagaaggaatgataccagctcttctttgtacctctggtaga
+attcggctgtgaattcatctggtcctggactttttttggttggtaggcta
+ttaattattgcctcaatttcagagcctgttattggtctattcagagattc
+tgtttcttcctgctttagtcttgggagggtgtatgtgtccaggaatttat
+ccatttcttctagattttctactttatttgcatagaggtatttataatat
+tctctgatggtagtttctatttctgtgggatcggtggttatatccccttt
+atcatttcttgttgcatctatttgattcttctctcttttcttctttatta
+gtctttattactcttgctagagtccactccagactctctttgcctgggta
+tcaccagcagagactgcagagcggcaaatattgctgcctgatccttcctc
+tggaagctttgtcccagagggtcacctgcctgtatgaggtgtcagtcgac
+tcctactgggagatgtctcccagttaggctacataggggtcagggaccca
+cttgaggaggcagtctgcccattctcagatctcaaacaccatgctgggag
+aaccacgattctcttcagagccatcatacaggacgattaaatctgcagaa
+gtttctgctgccttttgttcagctatgccctccccccagaggtggaatct
+acagaggcaactggccttgttgagatgcagtgggcttcgcccagttcaag
+cttccctggctgctttgtttacttactcaagcctcagcaatggtggacgc
+tcctccccctgccaggctgctgcctggcaggtcaatctcagactgctgtg
+ctagcagtgagcaaggctctgtgggtgtgggacctggcaagccaggcgtg
+ggatataatctcctggtgtgccgtttgctaagaccattggaaaaacacag
+tatttgggcaggagatcccgattttccagatacagtctgtcacagcttcc
+cttggctaggagagggaaatcccccaaccccttgtgcttcccaggtgagg
+tgatgccccaccctgtttcagcttgccctcagtgggctgcactgcaccca
+ctgtccaaccagtcccaatgagatgaaccaggtacctcagttggaagtgc
+agaaatcacccgtcttttacgtcagtcacgctgtgagctgcaaaccagag
+ccgttcctattcagccatcttggaacgggaggtctctgctctatttttaa
+attgtgtgttatttttgttgttaagtttgttaaatattctataagtttat
+ct
diff --git a/examples/chr4_ref_seq_short.fasta b/examples/chr4_ref_seq_short.fasta
new file mode 100644
index 0000000..97347f9
--- /dev/null
+++ b/examples/chr4_ref_seq_short.fasta
@@ -0,0 +1,95 @@
+>chr4-04 246635 359336
+tcctgacatagtctgaaaccaattgtctttgatagagattatgggagcct
+cccatacatgttttaaggatgtgtcttgtctggaatttcatgtttttcag
+ttaaaagggtttgttcatgtttcttcttaacagtctctaatcacttgccc
+tacctactttctgtatttaacactgcagtctgctcctgaaacatttacat
+tttgtctcagcaatcccaagctgtcctttcaaaatataccactgtttctt
+tcagcactctgtattattggagacagaaaccagtttttgtaaagactacc
+aaaagccagaagtaatgatgtgtgcgttagtatttttcttatttttaaag
+aaagaagccaggaattggcagtttactcctaaagacacaatgctatactg
+gggaggaggaagggctgtgtaaatgtaacaaattttcctttgcattctat
+gtggctcttggcattgttcttacctgaggcattacatacaattaactcat
+ttcgagattttgcacaaaagcattttgatgagtatatgtttgttacatgt
+atatgtctgtgaaggagttatggcctgtggtattttgttgtgccatctta
+ctaatgtactttgtataagtatatatatattagatttgtaaagtaagtat
+attcatatgtaaagtgtattcatatgaatctagtaagtgggataatttgt
+tatttttctttcaggtgtgtgttctcattttacccaagatctttggccag
+tgcagggcatagaagattcattccacaaacttatactgagaagatatgag
+aaatgtggacagaagaatttacaattaaggaaaggctctaaaagtgtgaa
+taagtgtaaggtgcagaaaggaggttataatggactttaccaatgcttat
+caactacccagagcaaaataattcagtgtaatacatctgtcaaagttttt
+cataaattttcaaattcaaacaacataagacatactggagagaaatcatt
+taaatgtaaaaaatgtggcagatcatttcgcaagttcctccaactaactt
+aacataagggaatacatgctggagagataccctacaaataaatgtgaaga
+atgtggcaaagcctttaataggtccacaagcattactaaatataagaaaa
+ttcatgctggagagaaacccctcatgtgaagaacgtgtcagaatctttac
+ctcatcctcaagctttgacaaacataagagaattcatactggagagaaac
+cctacacgtgaagaatgtggcaaagccttgagacaatccacagttctgaa
+tgaacataagaaaattcatactggaaagaaaccctacaaatgtgaagaat
+gtggcaaagcttttagacagtccagaagcctgaatgaacataagaatatg
+catactggagagaaaccctacacgtgtgaagaatgtgtcaagcttttaac
+caatcctcaagccttattatacacaggagcattcattctgaacaaaaact
+ttacaaatgtgaagaatgcagcaaagcctttactcaatcctcatccctta
+ataaacaagagaattcatactggtgagaaaccctacacatgtgaagaatg
+tggcaaagccttttataggtcctcacaccttactgaacataagaatattc
+atactggagagaaatcctacaaatgtgaagaatgtggcaacgccttttat
+agatcttcacaccttactaaacataagagaattcattctgggcaaaaacc
+ctacaaatgtgaagaatgtggcaaagcctttagacagtcctctgcactga
+atgaacataagaaaattcatactgcagagaaaccctacaaatgtaaagaa
+tgtggcaaagcctttagatggtccagaagcctgaatgaacatacgaatat
+tcatattggagagaaaccctacacatgtgaagaatgtggcaaagatttta
+cttggtcctcaacccttactgtacaccagagaattcagacaggtgagaaa
+catagttgataacatagttgaatgacatttctagtaatatgtttcctttg
+gctttaaacagcaaataaagtgaagaatattgttccatgttcttttcttt
+atttcttaaaatttttgtaggcacatagtatatgtacatatttctggcat
+atattagttatttgaatacaggcatacaccatgtaataatccatcagagt
+aggccaggcgcagtggctcatgcctataatcccagcactttgggaggcca
+aggcaggcggatcacaagttcaggaggtcaagaccatcctggctaacatg
+gtgaaaccccatctctactaaaaatacaaaaaaataactgggcatggtgg
+tgagtgcctgtagtcccagctactcaggaggctgaggcaggagaatggtg
+tgaacccaggaggcagagcttgcagtgagcctagatagcgccactgcact
+gcacgccagcctaggcgacagagtgagactccgtctccaaaaaaagaaaa
+aatccatcagagtaaatgagatattcatcaccttaagtatttattctttg
+tattacacaagtccagttatacactttatttttcaatgtacaattatttt
+ttactacagatcgttttgtgattgtaatatatcaaagtataattcatatg
+tttctgagtcctgaatgaatacttaaaaaaaatgtttcatatttgtcttt
+gaacatgtagtgtcttgtcctgcaaacacatacggacttttcatttttat
+ttacatgaagttaaatatataaatgtattgctctaaaaataaaccgttag
+gtgtaagaaaattacagagcaagcaatagtgtttgtgtgagagtttgtac
+ctattttccaaagaaaagatcaatattggaacaaagaagattcttttata
+aggtggataatttactagaaatctagaaacctaaaacattgtgaaatcaa
+atctatatttctttggatttaattactgtaaaatctaattgttgagactc
+tccccatgtaaattgttttcatttgttactcatattacagctataattta
+cttgtttcttcttttgtttttactttattatttacgatgtgagctggtga
+gaaattataagaatgatttttataaaatttagtacacaaatttttagatg
+caagttcacaatttgtgtattgttatatttgatctagttagaaaatttca
+ttttgtggctttaactggagaactctatatgaaccgttttctttagttgt
+tcctttcactttttacttgacataaatgagtttatgtattgtgtgccaat
+ttgttcaggtaagtactgggaaatcttttaagtcatggagatgttttgat
+ataaaattgtagtgaacataagaaagtgctgtgtgtgtaatagatgctcc
+ataattagccataaatattctttctggagtcagtttgtagctgcaagtaa
+gagacagaaaatgtctatagtgaagaaatggcattaattgtgcatgtgga
+gaggacatctgttcccaggctgcaaaactgactcattctgaatttaaaga
+gggttttttttttaatttaaaagtaaactttaatgtcaaaaatgcaaact
+tagggaggacataaagatcacatacaaggctgccacttcacacttggagg
+gttgcacagcatctgggcaaaggctctcctcacttcccagatggtgcagc
+agctggacagagatgctcctcacttcccagatggtggggcagccaggaag
+aggcgctccttactcccagatggtagggccgccgagcagaggcactcctc
+atttcttagtgcggccgccaggcagaggcacacctcgtgtccaagaaggt
+gtggcagccaggcagaggcgctcctcacgtcccaggcggtgcagtggccg
+ggcaaaggcgcttctcattcccagacagggctgggggccagggagaggcg
+ctgctcacttcccagacagtggggcagctgggcagaggtgcttctcactt
+cccagaaagttgggcagctgggcagaggcgctccttaaagaggatttgtt
+ttatgtttatcctcagctatgtatgcctcacagctcttctccttgtgtta
+tggctacggttttctcactgttctcttcatgccatgtaatttcacatgga
+ctttccaggttctgataggttcgactttttttaatatggtaaattgttcc
+taattgggactgtttgaggttatttatagcttctcaatgcagcatttaga
+ttgcttgagaagtcttttagtgttcacaggtaagagaagtcagcattgtt
+tttctgcttatgaaagaaaatttttgagattctaaaactgtcttaagcat
+aacactaagactaggtaaagcattaatatgagtgggttgcatattgtcag
+caccatatgaagaaaatatcagaattttgaaatttcttcagagaaaatgt
+atcttagaggtaaattttttaggagacttaatggtagagaagaattttac
+atttaatattctatgacatacttatagcaaaacttttttcatgcagaatt
+ttctatttttgaatgtgaatcttaagtgttggaaaataatagaatggtct
+ctgtagattcaaaatttggaatgatcttttttgtccagattgatactgca
+atcctgaggaatttctcttatgattttttattttagtggatgcagttcat
diff --git a/examples/chr4_translation_frame1.fasta b/examples/chr4_translation_frame1.fasta
new file mode 100644
index 0000000..2dcb120
--- /dev/null
+++ b/examples/chr4_translation_frame1.fasta
@@ -0,0 +1,5 @@
+>chr4-04
+LYWGGGRAV*M*QIFLCILCGSWHCSYLRHYIQLTHFEILHKSILMSI
+CLLHVYVCEGVMACGILLCHLTNVLCISIYILDL*SKYIHM*SVFI*I**VG*FVIFLSGVCSHFTQDLWPVQGIEDSFHKLILRRYEKCGQKNLQLRKGSKSVNKCKVQKGGYNGLYQCLSTTQSK
+IIQCNTSVKVFHKFSNSNNIRHTGEKSFKCKKCGRSFRKFLQLT*HKGIHAGEIPYK*M*RMWQSL**VHKHY*I*ENSCWRETPHVKNVSESLPHPQALTNIREFILERNPTREECGKALRQSTVL
+NEHKKIHTGKKPYKCEECGKAFRQSRSLNEHKNMHTGEKPYTCEECVKLLTNPQALLYTGAFI
diff --git a/gbtools/Makefile.am b/gbtools/Makefile.am
new file mode 100644
index 0000000..d8db58b
--- /dev/null
+++ b/gbtools/Makefile.am
@@ -0,0 +1,64 @@
+
+SUBDIRS = src
+
+ACLOCAL_AMFLAGS = -I m4
+
+
+lib_LTLIBRARIES = libgbtools.la
+
+libgbtools_la_SOURCES = 
+
+libgbtools_la_LIBADD = src/gbtoolsGUI/libgbtoolsGUI.la src/gbtoolsUtils/libgbtoolsUtils.la
+
+if USE_BLATSRC
+libgbtools_la_LIBADD += src/blatSrc/libblatSrc.la
+endif
+
+libgbtools_la_LIBADD += src/jsoncpp/libjsoncpp.la
+
+if USE_LIBCURL
+libgbtools_la_LIBADD += src/gbtoolsCurl/libgbtoolsCurl.la src/gbtoolsPfetch/libgbtoolsPfetch.la
+libgbtools_la_LIBADD += src/gbtoolsTrackhub/libgbtoolsTrackhub.la
+endif
+
+libgbtools_CXXFLAGS = -std=c++0x -g -Wall
+
+
+# keep libtool up to date automatically.
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+libtool: $(LIBTOOL_DEPS)
+	$(SHELL) ./config.status libtool
+
+
+# I picked this up from the internet...doesn't seem to work for the very
+# last invocation of libtool which produces the .la file, not sure if
+# this actually matters or not...
+#
+# This forces automake to use the C++ linker
+# (see the automake manual, section "Libtool Convenience Libraries")
+#nodist_EXTRA_libexample_la_SOURCES = dummy.cpp
+#sourcescheck_DUMMY = dummy.cpp
+
+
+
+
+# Extra files to remove for the maintainer-clean target.
+# Note you cannot use this target to remove directories,
+# hence the extra "local" target.
+#
+MAINTAINERCLEANFILES = \
+$(top_srcdir)/Makefile.in \
+$(top_srcdir)/aclocal.m4 \
+$(top_srcdir)/config.h.in \
+$(top_srcdir)/config.h.in~ \
+$(top_srcdir)/configure \
+$(top_srcdir)/gbtools_version.m4
+
+GENERATED_DIRS = $(top_srcdir)/config $(top_srcdir)/m4 $(top_srcdir)/.deps $(top_srcdir)/build/src
+
+maintainer-clean-local:
+	rm -rf $(GENERATED_DIRS)
+	mkdir $(top_srcdir)/m4 $(top_srcdir)/config
+
+
+
diff --git a/gbtools/Makefile.in b/gbtools/Makefile.in
new file mode 100644
index 0000000..d7c72f2
--- /dev/null
+++ b/gbtools/Makefile.in
@@ -0,0 +1,967 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 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@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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@
+ at USE_BLATSRC_TRUE@am__append_1 = src/blatSrc/libblatSrc.la
+ at USE_LIBCURL_TRUE@am__append_2 = src/gbtoolsCurl/libgbtoolsCurl.la \
+ at USE_LIBCURL_TRUE@	src/gbtoolsPfetch/libgbtoolsPfetch.la \
+ at USE_LIBCURL_TRUE@	src/gbtoolsTrackhub/libgbtoolsTrackhub.la
+subdir = .
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+	$(top_srcdir)/configure $(am__configure_deps) \
+	$(srcdir)/config.h.in README config/compile \
+	config/config.guess config/config.sub config/depcomp \
+	config/install-sh config/missing config/ltmain.sh \
+	$(top_srcdir)/config/compile $(top_srcdir)/config/config.guess \
+	$(top_srcdir)/config/config.sub \
+	$(top_srcdir)/config/install-sh $(top_srcdir)/config/ltmain.sh \
+	$(top_srcdir)/config/missing
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/./gbtools_version.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 = $(install_sh) -d
+CONFIG_HEADER = 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__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__installdirs = "$(DESTDIR)$(libdir)"
+LTLIBRARIES = $(lib_LTLIBRARIES)
+libgbtools_la_DEPENDENCIES = src/gbtoolsGUI/libgbtoolsGUI.la \
+	src/gbtoolsUtils/libgbtoolsUtils.la $(am__append_1) \
+	src/jsoncpp/libjsoncpp.la $(am__append_2)
+am_libgbtools_la_OBJECTS =
+libgbtools_la_OBJECTS = $(am_libgbtools_la_OBJECTS)
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. at am__isrc@
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = $(libgbtools_la_SOURCES)
+DIST_SOURCES = $(libgbtools_la_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-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 \
+	tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	cscope distdir dist dist-all distcheck
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \
+	$(LISP)config.h.in
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+CSCOPE = cscope
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+  if test -d "$(distdir)"; then \
+    find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+      && rm -rf "$(distdir)" \
+      || { sleep 5 && rm -rf "$(distdir)"; }; \
+  else :; fi
+am__post_remove_distdir = $(am__remove_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
+GZIP_ENV = --best
+DIST_TARGETS = dist-gzip
+distuninstallcheck_listfiles = find . -type f -print
+am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
+  | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+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@
+DEPS_CFLAGS = @DEPS_CFLAGS@
+DEPS_LIBS = @DEPS_LIBS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+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@
+
+# keep libtool up to date automatically.
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_BLATSRC = @USE_BLATSRC@
+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 = src
+ACLOCAL_AMFLAGS = -I m4
+lib_LTLIBRARIES = libgbtools.la
+libgbtools_la_SOURCES = 
+libgbtools_la_LIBADD = src/gbtoolsGUI/libgbtoolsGUI.la \
+	src/gbtoolsUtils/libgbtoolsUtils.la $(am__append_1) \
+	src/jsoncpp/libjsoncpp.la $(am__append_2)
+libgbtools_CXXFLAGS = -std=c++0x -g -Wall
+
+# I picked this up from the internet...doesn't seem to work for the very
+# last invocation of libtool which produces the .la file, not sure if
+# this actually matters or not...
+#
+# This forces automake to use the C++ linker
+# (see the automake manual, section "Libtool Convenience Libraries")
+#nodist_EXTRA_libexample_la_SOURCES = dummy.cpp
+#sourcescheck_DUMMY = dummy.cpp
+
+# Extra files to remove for the maintainer-clean target.
+# Note you cannot use this target to remove directories,
+# hence the extra "local" target.
+#
+MAINTAINERCLEANFILES = \
+$(top_srcdir)/Makefile.in \
+$(top_srcdir)/aclocal.m4 \
+$(top_srcdir)/config.h.in \
+$(top_srcdir)/config.h.in~ \
+$(top_srcdir)/configure \
+$(top_srcdir)/gbtools_version.m4
+
+GENERATED_DIRS = $(top_srcdir)/config $(top_srcdir)/m4 $(top_srcdir)/.deps $(top_srcdir)/build/src
+all: config.h
+	$(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+am--refresh: Makefile
+	@:
+$(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
+	@test -f $@ || rm -f stamp-h1
+	@test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1
+
+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
+
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
+	}
+
+uninstall-libLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
+	done
+
+clean-libLTLIBRARIES:
+	-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+	@list='$(lib_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+
+libgbtools.la: $(libgbtools_la_OBJECTS) $(libgbtools_la_DEPENDENCIES) $(EXTRA_libgbtools_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(LINK) -rpath $(libdir) $(libgbtools_la_OBJECTS) $(libgbtools_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+distclean-libtool:
+	-rm -f libtool config.lt
+
+# 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.
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	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"
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	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; \
+	$(am__define_uniq_tagged_files); \
+	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-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	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"
+cscope: cscope.files
+	test ! -s cscope.files \
+	  || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)
+clean-cscope:
+	-rm -f cscope.files
+cscope.files: clean-cscope cscopelist
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+	-rm -f cscope.out cscope.in.out cscope.po.out cscope.files
+
+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 \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    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
+	-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)"
+dist-gzip: distdir
+	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+	$(am__post_remove_distdir)
+
+dist-bzip2: distdir
+	tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
+	$(am__post_remove_distdir)
+
+dist-lzip: distdir
+	tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
+	$(am__post_remove_distdir)
+
+dist-xz: distdir
+	tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
+	$(am__post_remove_distdir)
+
+dist-tarZ: distdir
+	@echo WARNING: "Support for shar distribution archives is" \
+	               "deprecated." >&2
+	@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
+	tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+	$(am__post_remove_distdir)
+
+dist-shar: distdir
+	@echo WARNING: "Support for distribution archives compressed with" \
+		       "legacy program 'compress' is deprecated." >&2
+	@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
+	shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+	$(am__post_remove_distdir)
+
+dist-zip: distdir
+	-rm -f $(distdir).zip
+	zip -rq $(distdir).zip $(distdir)
+	$(am__post_remove_distdir)
+
+dist dist-all:
+	$(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'
+	$(am__post_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.lz*) \
+	  lzip -dc $(distdir).tar.lz | $(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 u+w $(distdir)
+	mkdir $(distdir)/_build $(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 \
+	    $(AM_DISTCHECK_CONFIGURE_FLAGS) \
+	    $(DISTCHECK_CONFIGURE_FLAGS) \
+	    --srcdir=.. --prefix="$$dc_install_base" \
+	  && $(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__post_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:
+	@test -n '$(distuninstallcheck_dir)' || { \
+	  echo 'ERROR: trying to run $@ with an empty' \
+	       '$$(distuninstallcheck_dir)' >&2; \
+	  exit 1; \
+	}; \
+	$(am__cd) '$(distuninstallcheck_dir)' || { \
+	  echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
+	  exit 1; \
+	}; \
+	test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
+	   || { 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 $(LTLIBRARIES) config.h
+installdirs: installdirs-recursive
+installdirs-am:
+	for dir in "$(DESTDIR)$(libdir)"; 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:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+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."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-recursive
+
+clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
+	mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile 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-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am: install-libLTLIBRARIES
+
+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 \
+	maintainer-clean-local
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-libLTLIBRARIES
+
+.MAKE: $(am__recursive_targets) all install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \
+	am--refresh check check-am clean clean-cscope clean-generic \
+	clean-libLTLIBRARIES clean-libtool cscope cscopelist-am ctags \
+	ctags-am dist dist-all dist-bzip2 dist-gzip dist-lzip \
+	dist-shar dist-tarZ dist-xz dist-zip distcheck distclean \
+	distclean-compile 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-libLTLIBRARIES 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 maintainer-clean-local mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \
+	uninstall-libLTLIBRARIES
+
+libtool: $(LIBTOOL_DEPS)
+	$(SHELL) ./config.status libtool
+
+maintainer-clean-local:
+	rm -rf $(GENERATED_DIRS)
+	mkdir $(top_srcdir)/m4 $(top_srcdir)/config
+
+# 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/gbtools/README b/gbtools/README
new file mode 100644
index 0000000..2d99b43
--- /dev/null
+++ b/gbtools/README
@@ -0,0 +1,31 @@
+--------------------------------------------------------------------------------
+                              The gbtools Package
+
+gbtools (Genome Browser tools) is a library of common routines used by both
+seqtools and zmap. It includes routines for graphics, curl and utilities.
+
+Note that the library is not intended to be distributed on its own but as part
+of seqtools or zmap and hence may not include all the necessary
+licensing/copyright notices required by Sanger. If this package is to be
+distributed separately then these notices should be added following whatever
+Sanger software guidelines are prevalent at that time.
+
+Authors:  Gemma Guest    <gb10 at sanger.ac.uk> 
+          Ed Griffiths   <edgrif at sanger.ac.uk>
+          Steve Miller   <sm23 at sanger.ac.uk>
+
+
+Notes:
+
+The package is not compiled into a dynamic library but into an archive of .o
+files. As such there is no need to linking flags and other such macros as
+the code is compiled into .o files and then archived into a .a file.
+
+The Makefile.am and configure.ac setup follows an example from the web:
+
+https://www.gnu.org/software/automake/manual/html_node/Libtool-Convenience-Libraries.html
+
+it is hopefully about as simple as it can be.
+
+--------------------------------------------------------------------------------
+
diff --git a/gbtools/aclocal.m4 b/gbtools/aclocal.m4
new file mode 100644
index 0000000..5ed8cde
--- /dev/null
+++ b/gbtools/aclocal.m4
@@ -0,0 +1,1351 @@
+# generated automatically by aclocal 1.14.1 -*- Autoconf -*-
+
+# Copyright (C) 1996-2013 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_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
+m4_ifndef([AC_AUTOCONF_VERSION],
+  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],,
+[m4_warning([this file was generated for autoconf 2.69.
+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'.])])
+
+# pkg.m4 - Macros to locate and utilise pkg-config.            -*- Autoconf -*-
+# serial 1 (pkg-config-0.24)
+# 
+# Copyright © 2004 Scott James Remnant <scott at netsplit.com>.
+#
+# 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 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., 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.
+
+# PKG_PROG_PKG_CONFIG([MIN-VERSION])
+# ----------------------------------
+AC_DEFUN([PKG_PROG_PKG_CONFIG],
+[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
+m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$])
+m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$])
+AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])
+AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path])
+AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path])
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+	AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
+fi
+if test -n "$PKG_CONFIG"; then
+	_pkg_min_version=m4_default([$1], [0.9.0])
+	AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
+	if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+		AC_MSG_RESULT([yes])
+	else
+		AC_MSG_RESULT([no])
+		PKG_CONFIG=""
+	fi
+fi[]dnl
+])# PKG_PROG_PKG_CONFIG
+
+# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+#
+# Check to see whether a particular set of modules exists.  Similar
+# to PKG_CHECK_MODULES(), but does not set variables or print errors.
+#
+# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+# only at the first occurence in configure.ac, so if the first place
+# it's called might be skipped (such as if it is within an "if", you
+# have to call PKG_CHECK_EXISTS manually
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_EXISTS],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+if test -n "$PKG_CONFIG" && \
+    AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
+  m4_default([$2], [:])
+m4_ifvaln([$3], [else
+  $3])dnl
+fi])
+
+# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
+# ---------------------------------------------
+m4_define([_PKG_CONFIG],
+[if test -n "$$1"; then
+    pkg_cv_[]$1="$$1"
+ elif test -n "$PKG_CONFIG"; then
+    PKG_CHECK_EXISTS([$3],
+                     [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`
+		      test "x$?" != "x0" && pkg_failed=yes ],
+		     [pkg_failed=yes])
+ else
+    pkg_failed=untried
+fi[]dnl
+])# _PKG_CONFIG
+
+# _PKG_SHORT_ERRORS_SUPPORTED
+# -----------------------------
+AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi[]dnl
+])# _PKG_SHORT_ERRORS_SUPPORTED
+
+
+# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+# [ACTION-IF-NOT-FOUND])
+#
+#
+# Note that if there is a possibility the first call to
+# PKG_CHECK_MODULES might not happen, you should be sure to include an
+# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
+#
+#
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_MODULES],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
+AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
+
+pkg_failed=no
+AC_MSG_CHECKING([for $1])
+
+_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
+_PKG_CONFIG([$1][_LIBS], [libs], [$2])
+
+m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
+and $1[]_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.])
+
+if test $pkg_failed = yes; then
+   	AC_MSG_RESULT([no])
+        _PKG_SHORT_ERRORS_SUPPORTED
+        if test $_pkg_short_errors_supported = yes; then
+	        $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1`
+        else 
+	        $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
+
+	m4_default([$4], [AC_MSG_ERROR(
+[Package requirements ($2) were not met:
+
+$$1_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+_PKG_TEXT])[]dnl
+        ])
+elif test $pkg_failed = untried; then
+     	AC_MSG_RESULT([no])
+	m4_default([$4], [AC_MSG_FAILURE(
+[The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+_PKG_TEXT
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.])[]dnl
+        ])
+else
+	$1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
+	$1[]_LIBS=$pkg_cv_[]$1[]_LIBS
+        AC_MSG_RESULT([yes])
+	$3
+fi[]dnl
+])# PKG_CHECK_MODULES
+
+# Copyright (C) 2002-2013 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.14'
+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.14.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.14.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-2013 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_COND_IF                                            -*- Autoconf -*-
+
+# Copyright (C) 2008-2013 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_COND_IF
+# _AM_COND_ELSE
+# _AM_COND_ENDIF
+# --------------
+# These macros are only used for tracing.
+m4_define([_AM_COND_IF])
+m4_define([_AM_COND_ELSE])
+m4_define([_AM_COND_ENDIF])
+
+# AM_COND_IF(COND, [IF-TRUE], [IF-FALSE])
+# ---------------------------------------
+# If the shell condition COND is true, execute IF-TRUE, otherwise execute
+# IF-FALSE.  Allow automake to learn about conditional instantiating macros
+# (the AC_CONFIG_FOOS).
+AC_DEFUN([AM_COND_IF],
+[m4_ifndef([_AM_COND_VALUE_$1],
+	   [m4_fatal([$0: no such condition "$1"])])dnl
+_AM_COND_IF([$1])dnl
+if test -z "$$1_TRUE"; then :
+  m4_n([$2])[]dnl
+m4_ifval([$3],
+[_AM_COND_ELSE([$1])dnl
+else
+  $3
+])dnl
+_AM_COND_ENDIF([$1])dnl
+fi[]dnl
+])
+
+# AM_CONDITIONAL                                            -*- Autoconf -*-
+
+# Copyright (C) 1997-2013 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_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ([2.52])dnl
+ m4_if([$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-2013 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.
+
+
+# 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", "OBJC", "OBJCXX", "UPC", or "GJC".
+# 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
+
+m4_if([$1], [CC],   [depcc="$CC"   am_compiler_list=],
+      [$1], [CXX],  [depcc="$CXX"  am_compiler_list=],
+      [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+      [$1], [OBJCXX], [depcc="$OBJCXX" 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".
+  rm -rf conftest.dir
+  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 10 /bin/sh.
+      echo '/* dummy */' > 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
+      ;;
+    msvc7 | msvc7msys | 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], [dnl
+AS_HELP_STRING(
+  [--enable-dependency-tracking],
+  [do not reject slow dependency extractors])
+AS_HELP_STRING(
+  [--disable-dependency-tracking],
+  [speeds up one-time build])])
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+  am__nodep='_no'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+AC_SUBST([am__nodep])dnl
+_AM_SUBST_NOTMAKE([am__nodep])dnl
+])
+
+# Generate code to set up dependency tracking.              -*- Autoconf -*-
+
+# Copyright (C) 1999-2013 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_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[{
+  # Older Autoconf 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"`
+    # 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'`; 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-2013 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 macro actually does too much.  Some checks are only needed if
+# your package does certain things.  But this isn't really a big deal.
+
+dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O.
+m4_define([AC_PROG_CC],
+m4_defn([AC_PROG_CC])
+[_AM_PROG_CC_C_O
+])
+
+# 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.65])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],
+[AC_DIAGNOSE([obsolete],
+             [$0: two- and three-arguments forms are deprecated.])
+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], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]),
+  [ok:ok],,
+  [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([AC_PROG_MKDIR_P])dnl
+# For better backward compatibility.  To be removed once Automake 1.9.x
+# dies out for good.  For more background, see:
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
+# 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])],
+		  [m4_define([AC_PROG_CC],
+			     m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+		  [_AM_DEPENDENCIES([CXX])],
+		  [m4_define([AC_PROG_CXX],
+			     m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+		  [_AM_DEPENDENCIES([OBJC])],
+		  [m4_define([AC_PROG_OBJC],
+			     m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
+		  [_AM_DEPENDENCIES([OBJCXX])],
+		  [m4_define([AC_PROG_OBJCXX],
+			     m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl
+])
+AC_REQUIRE([AM_SILENT_RULES])dnl
+dnl The testsuite driver may need to know about EXEEXT, so add the
+dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This
+dnl macro 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
+
+# POSIX will say in a future version that running "rm -f" with no argument
+# is OK; and we want to be able to make that assumption in our Makefile
+# recipes.  So use an aggressive probe to check that the usage we want is
+# actually supported "in the wild" to an acceptable degree.
+# See automake bug#10828.
+# To make any issue more visible, cause the running configure to be aborted
+# by default if the 'rm' program in use doesn't match our expectations; the
+# user can still override this though.
+if rm -f && rm -fr && rm -rf; then : OK; else
+  cat >&2 <<'END'
+Oops!
+
+Your 'rm' program seems unable to run without file operands specified
+on the command line, even when the '-f' option is present.  This is contrary
+to the behaviour of most rm programs out there, and not conforming with
+the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
+
+Please tell bug-automake at gnu.org about your system, including the value
+of your $PATH and any error possibly output before this message.  This
+can help us improve future automake versions.
+
+END
+  if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
+    echo 'Configuration will proceed anyway, since you have set the' >&2
+    echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
+    echo >&2
+  else
+    cat >&2 <<'END'
+Aborting the configuration process, to ensure you take notice of the issue.
+
+You can download and install GNU coreutils to get an 'rm' implementation
+that behaves properly: <http://www.gnu.org/software/coreutils/>.
+
+If you want to complete the configuration process using your problematic
+'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+to "yes", and re-run configure.
+
+END
+    AC_MSG_ERROR([Your 'rm' program is bad, sorry.])
+  fi
+fi])
+
+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-2013 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-2013 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.
+
+# 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-2013 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_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-2013 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_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 is modern enough.
+# If it is, 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 --is-lightweight"; then
+  am_missing_run="$MISSING "
+else
+  am_missing_run=
+  AC_MSG_WARN(['missing' script is too old or missing])
+fi
+])
+
+# Helper functions for option handling.                     -*- Autoconf -*-
+
+# Copyright (C) 2001-2013 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_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) 1999-2013 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_CC_C_O
+# ---------------
+# Like AC_PROG_CC_C_O, but changed for automake.  We rewrite AC_PROG_CC
+# to automatically call this.
+AC_DEFUN([_AM_PROG_CC_C_O],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([compile])dnl
+AC_LANG_PUSH([C])dnl
+AC_CACHE_CHECK(
+  [whether $CC understands -c and -o together],
+  [am_cv_prog_cc_c_o],
+  [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])])
+  # Make sure it works both with $CC and with simple cc.
+  # Following AC_PROG_CC_C_O, we do the test twice because some
+  # compilers refuse to overwrite an existing .o file with -o,
+  # though they will create one.
+  am_cv_prog_cc_c_o=yes
+  for am_i in 1 2; do
+    if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \
+         && test -f conftest2.$ac_objext; then
+      : OK
+    else
+      am_cv_prog_cc_c_o=no
+      break
+    fi
+  done
+  rm -f core conftest*
+  unset am_i])
+if test "$am_cv_prog_cc_c_o" != yes; then
+   # Losing compiler, so override with the script.
+   # FIXME: It is wrong to rewrite CC.
+   # But if we don't then we get into trouble of one sort or another.
+   # A longer-term fix would be to have automake use am__CC in this case,
+   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+   CC="$am_aux_dir/compile $CC"
+fi
+AC_LANG_POP([C])])
+
+# For backward compatibility.
+AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
+
+# Copyright (C) 2001-2013 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-2013 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_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# 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 (
+   am_has_slept=no
+   for am_try in 1 2; do
+     echo "timestamp, slept: $am_has_slept" > conftest.file
+     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
+     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
+     if test "$[2]" = conftest.file || test $am_try -eq 2; then
+       break
+     fi
+     # Just in case.
+     sleep 1
+     am_has_slept=yes
+   done
+   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])
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+  ( sleep 1 ) &
+  am_sleep_pid=$!
+fi
+AC_CONFIG_COMMANDS_PRE(
+  [AC_MSG_CHECKING([that generated files are newer than configure])
+   if test -n "$am_sleep_pid"; then
+     # Hide warnings about reused PIDs.
+     wait $am_sleep_pid 2>/dev/null
+   fi
+   AC_MSG_RESULT([done])])
+rm -f conftest.file
+])
+
+# Copyright (C) 2009-2013 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_SILENT_RULES([DEFAULT])
+# --------------------------
+# Enable less verbose build rules; with the default set to DEFAULT
+# ("yes" being less verbose, "no" or empty being verbose).
+AC_DEFUN([AM_SILENT_RULES],
+[AC_ARG_ENABLE([silent-rules], [dnl
+AS_HELP_STRING(
+  [--enable-silent-rules],
+  [less verbose build output (undo: "make V=1")])
+AS_HELP_STRING(
+  [--disable-silent-rules],
+  [verbose build output (undo: "make V=0")])dnl
+])
+case $enable_silent_rules in @%:@ (((
+  yes) AM_DEFAULT_VERBOSITY=0;;
+   no) AM_DEFAULT_VERBOSITY=1;;
+    *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);;
+esac
+dnl
+dnl A few 'make' implementations (e.g., NonStop OS and NextStep)
+dnl do not support nested variable expansions.
+dnl See automake bug#9928 and bug#10237.
+am_make=${MAKE-make}
+AC_CACHE_CHECK([whether $am_make supports nested variables],
+   [am_cv_make_support_nested_variables],
+   [if AS_ECHO([['TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+	@$(TRUE)
+.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then
+  am_cv_make_support_nested_variables=yes
+else
+  am_cv_make_support_nested_variables=no
+fi])
+if test $am_cv_make_support_nested_variables = yes; then
+  dnl Using '$V' instead of '$(V)' breaks IRIX make.
+  AM_V='$(V)'
+  AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+  AM_V=$AM_DEFAULT_VERBOSITY
+  AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AC_SUBST([AM_V])dnl
+AM_SUBST_NOTMAKE([AM_V])dnl
+AC_SUBST([AM_DEFAULT_V])dnl
+AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl
+AC_SUBST([AM_DEFAULT_VERBOSITY])dnl
+AM_BACKSLASH='\'
+AC_SUBST([AM_BACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
+])
+
+# Copyright (C) 2001-2013 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-2013 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_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-2013 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_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.  Yes, it's still used
+# in the wild :-(  We should find a proper way to deprecate it ...
+AC_SUBST([AMTAR], ['$${TAR-tar}'])
+
+# We'll loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+
+m4_if([$1], [v7],
+  [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
+
+  [m4_case([$1],
+    [ustar],
+     [# The POSIX 1988 'ustar' format is defined with fixed-size fields.
+      # There is notably a 21 bits limit for the UID and the GID.  In fact,
+      # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343
+      # and bug#13588).
+      am_max_uid=2097151 # 2^21 - 1
+      am_max_gid=$am_max_uid
+      # The $UID and $GID variables are not portable, so we need to resort
+      # to the POSIX-mandated id(1) utility.  Errors in the 'id' calls
+      # below are definitely unexpected, so allow the users to see them
+      # (that is, avoid stderr redirection).
+      am_uid=`id -u || echo unknown`
+      am_gid=`id -g || echo unknown`
+      AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format])
+      if test $am_uid -le $am_max_uid; then
+         AC_MSG_RESULT([yes])
+      else
+         AC_MSG_RESULT([no])
+         _am_tools=none
+      fi
+      AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format])
+      if test $am_gid -le $am_max_gid; then
+         AC_MSG_RESULT([yes])
+      else
+        AC_MSG_RESULT([no])
+        _am_tools=none
+      fi],
+
+  [pax],
+    [],
+
+  [m4_fatal([Unknown tar format])])
+
+  AC_MSG_CHECKING([how to create a $1 tar archive])
+
+  # Go ahead even if we have the value already cached.  We do so because we
+  # need to set the values for the 'am__tar' and 'am__untar' variables.
+  _am_tools=${am_cv_prog_tar_$1-$_am_tools}
+
+  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])
+      AM_RUN_LOG([cat conftest.dir/file])
+      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([m4/libtool.m4])
+m4_include([m4/ltoptions.m4])
+m4_include([m4/ltsugar.m4])
+m4_include([m4/ltversion.m4])
+m4_include([m4/lt~obsolete.m4])
diff --git a/gbtools/config.h.in b/gbtools/config.h.in
new file mode 100644
index 0000000..dbdb6f6
--- /dev/null
+++ b/gbtools/config.h.in
@@ -0,0 +1,273 @@
+/* config.h.in.  Generated from configure.ac by autoheader.  */
+
+/* Operating System is CYGWIN. */
+#undef CYGWIN
+
+/* Operating System is DARWIN. */
+#undef DARWIN
+
+/* "gbtools package version" */
+#undef GBTOOLS_VERSION
+
+/* Define to 1 if you have the <arpa/inet.h> header file. */
+#undef HAVE_ARPA_INET_H
+
+/* Define to 1 if you have the <assert.h> header file. */
+#undef HAVE_ASSERT_H
+
+/* Define to 1 if you have the <ctype.h> header file. */
+#undef HAVE_CTYPE_H
+
+/* Define to 1 if you have the <curl/curl.h> header file. */
+#undef HAVE_CURL_CURL_H
+
+/* Define to 1 if you have the <direct.h> header file. */
+#undef HAVE_DIRECT_H
+
+/* Define to 1 if you have the <dirent.h> header file. */
+#undef HAVE_DIRENT_H
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
+
+/* Define to 1 if you have the `dup2' function. */
+#undef HAVE_DUP2
+
+/* Define to 1 if you have the <errno.h> header file. */
+#undef HAVE_ERRNO_H
+
+/* Define to 1 if you have the <execinfo.h> header file. */
+#undef HAVE_EXECINFO_H
+
+/* Define to 1 if you have the <fcntl.h> header file. */
+#undef HAVE_FCNTL_H
+
+/* Define to 1 if you have the `floor' function. */
+#undef HAVE_FLOOR
+
+/* Define to 1 if you have the `fork' function. */
+#undef HAVE_FORK
+
+/* Define to 1 if you have the `gethostbyname' function. */
+#undef HAVE_GETHOSTBYNAME
+
+/* Define to 1 if you have the <gtk.h> header file. */
+#undef HAVE_GTK_H
+
+/* Define to 1 if you have the <ieeefp.h> header file. */
+#undef HAVE_IEEEFP_H
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the <io.h> header file. */
+#undef HAVE_IO_H
+
+/* Define to 1 if you have the <libgen.h> header file. */
+#undef HAVE_LIBGEN_H
+
+/* Define to 1 if you have the <limits.h> header file. */
+#undef HAVE_LIMITS_H
+
+/* Define to 1 if your system has a GNU libc compatible `malloc' function, and
+   to 0 otherwise. */
+#undef HAVE_MALLOC
+
+/* Define to 1 if you have the <math.h> header file. */
+#undef HAVE_MATH_H
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the `memset' function. */
+#undef HAVE_MEMSET
+
+/* Define to 1 if you have the <mingw/math.h> header file. */
+#undef HAVE_MINGW_MATH_H
+
+/* Define to 1 if you have the <netdb.h> header file. */
+#undef HAVE_NETDB_H
+
+/* Define to 1 if you have the <netinet/in.h> header file. */
+#undef HAVE_NETINET_IN_H
+
+/* Define to 1 if you have the <openssl.h> header file. */
+#undef HAVE_OPENSSL_H
+
+/* Define to 1 if you have the <pthread.h> header file. */
+#undef HAVE_PTHREAD_H
+
+/* Define to 1 if you have the <pwd.h> header file. */
+#undef HAVE_PWD_H
+
+/* Define to 1 if you have the <regex.h> header file. */
+#undef HAVE_REGEX_H
+
+/* Define to 1 if you have the <setjmp.h> header file. */
+#undef HAVE_SETJMP_H
+
+/* Define to 1 if you have the <signal.h> header file. */
+#undef HAVE_SIGNAL_H
+
+/* Define to 1 if you have the `socket' function. */
+#undef HAVE_SOCKET
+
+/* Define to 1 if you have the `sqrt' function. */
+#undef HAVE_SQRT
+
+/* Define to 1 if you have the <stdarg.h> header file. */
+#undef HAVE_STDARG_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdio.h> header file. */
+#undef HAVE_STDIO_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the `strcasecmp' function. */
+#undef HAVE_STRCASECMP
+
+/* Define to 1 if you have the `strchr' function. */
+#undef HAVE_STRCHR
+
+/* Define to 1 if you have the `strcspn' function. */
+#undef HAVE_STRCSPN
+
+/* Define to 1 if you have the `strerror' function. */
+#undef HAVE_STRERROR
+
+/* 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 `strncasecmp' function. */
+#undef HAVE_STRNCASECMP
+
+/* Define to 1 if you have the `strrchr' function. */
+#undef HAVE_STRRCHR
+
+/* Define to 1 if you have the `strstr' function. */
+#undef HAVE_STRSTR
+
+/* Define to 1 if you have the `strtol' function. */
+#undef HAVE_STRTOL
+
+/* Define to 1 if you have the <syslog.h> header file. */
+#undef HAVE_SYSLOG_H
+
+/* Define to 1 if you have the <sys/file.h> header file. */
+#undef HAVE_SYS_FILE_H
+
+/* Define to 1 if you have the <sys/mman.h> header file. */
+#undef HAVE_SYS_MMAN_H
+
+/* Define to 1 if you have the <sys/socket.h> header file. */
+#undef HAVE_SYS_SOCKET_H
+
+/* Define to 1 if you have the <sys/statvfs.h> header file. */
+#undef HAVE_SYS_STATVFS_H
+
+/* 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 <sys/utsname.h> header file. */
+#undef HAVE_SYS_UTSNAME_H
+
+/* Define to 1 if you have the <sys/wait.h> header file. */
+#undef HAVE_SYS_WAIT_H
+
+/* Define to 1 if you have the <termios.h> header file. */
+#undef HAVE_TERMIOS_H
+
+/* Define to 1 if you have the <time.h> header file. */
+#undef HAVE_TIME_H
+
+/* Define to 1 if you have the `uname' function. */
+#undef HAVE_UNAME
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to 1 if you have the <utime.h> header file. */
+#undef HAVE_UTIME_H
+
+/* Define to 1 if you have the `vfork' function. */
+#undef HAVE_VFORK
+
+/* Define to 1 if you have the <vfork.h> header file. */
+#undef HAVE_VFORK_H
+
+/* Define to 1 if `fork' works. */
+#undef HAVE_WORKING_FORK
+
+/* Define to 1 if `vfork' works. */
+#undef HAVE_WORKING_VFORK
+
+/* Define to 1 if you have the <zlib.h> header file. */
+#undef HAVE_ZLIB_H
+
+/* Operating System is LINUX. */
+#undef LINUX
+
+/* 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 blatSrc deps are available */
+#undef USE_BLATSRC
+
+/* Define to 1 if openssl is available */
+#undef USE_SSL
+
+/* Version number of package */
+#undef VERSION
+
+/* Operating System is WINDOWS. */
+#undef WINDOWS
+
+/* Define to rpl_malloc if the replacement function should be used. */
+#undef malloc
+
+/* Define to `int' if <sys/types.h> does not define. */
+#undef pid_t
+
+/* Define to `unsigned int' if <sys/types.h> does not define. */
+#undef size_t
+
+/* Define as `fork' if `vfork' does not work. */
+#undef vfork
diff --git a/gbtools/config/compile b/gbtools/config/compile
new file mode 100755
index 0000000..531136b
--- /dev/null
+++ b/gbtools/config/compile
@@ -0,0 +1,347 @@
+#! /bin/sh
+# Wrapper for compilers which do not understand '-c -o'.
+
+scriptversion=2012-10-14.11; # UTC
+
+# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+# Written by Tom Tromey <tromey at cygnus.com>.
+#
+# 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, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake at gnu.org> or send patches to
+# <automake-patches at gnu.org>.
+
+nl='
+'
+
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent tools from complaining about whitespace usage.
+IFS=" ""	$nl"
+
+file_conv=
+
+# func_file_conv build_file lazy
+# Convert a $build file to $host form and store it in $file
+# Currently only supports Windows hosts. If the determined conversion
+# type is listed in (the comma separated) LAZY, no conversion will
+# take place.
+func_file_conv ()
+{
+  file=$1
+  case $file in
+    / | /[!/]*) # absolute file, and not a UNC file
+      if test -z "$file_conv"; then
+	# lazily determine how to convert abs files
+	case `uname -s` in
+	  MINGW*)
+	    file_conv=mingw
+	    ;;
+	  CYGWIN*)
+	    file_conv=cygwin
+	    ;;
+	  *)
+	    file_conv=wine
+	    ;;
+	esac
+      fi
+      case $file_conv/,$2, in
+	*,$file_conv,*)
+	  ;;
+	mingw/*)
+	  file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
+	  ;;
+	cygwin/*)
+	  file=`cygpath -m "$file" || echo "$file"`
+	  ;;
+	wine/*)
+	  file=`winepath -w "$file" || echo "$file"`
+	  ;;
+      esac
+      ;;
+  esac
+}
+
+# func_cl_dashL linkdir
+# Make cl look for libraries in LINKDIR
+func_cl_dashL ()
+{
+  func_file_conv "$1"
+  if test -z "$lib_path"; then
+    lib_path=$file
+  else
+    lib_path="$lib_path;$file"
+  fi
+  linker_opts="$linker_opts -LIBPATH:$file"
+}
+
+# func_cl_dashl library
+# Do a library search-path lookup for cl
+func_cl_dashl ()
+{
+  lib=$1
+  found=no
+  save_IFS=$IFS
+  IFS=';'
+  for dir in $lib_path $LIB
+  do
+    IFS=$save_IFS
+    if $shared && test -f "$dir/$lib.dll.lib"; then
+      found=yes
+      lib=$dir/$lib.dll.lib
+      break
+    fi
+    if test -f "$dir/$lib.lib"; then
+      found=yes
+      lib=$dir/$lib.lib
+      break
+    fi
+    if test -f "$dir/lib$lib.a"; then
+      found=yes
+      lib=$dir/lib$lib.a
+      break
+    fi
+  done
+  IFS=$save_IFS
+
+  if test "$found" != yes; then
+    lib=$lib.lib
+  fi
+}
+
+# func_cl_wrapper cl arg...
+# Adjust compile command to suit cl
+func_cl_wrapper ()
+{
+  # Assume a capable shell
+  lib_path=
+  shared=:
+  linker_opts=
+  for arg
+  do
+    if test -n "$eat"; then
+      eat=
+    else
+      case $1 in
+	-o)
+	  # configure might choose to run compile as 'compile cc -o foo foo.c'.
+	  eat=1
+	  case $2 in
+	    *.o | *.[oO][bB][jJ])
+	      func_file_conv "$2"
+	      set x "$@" -Fo"$file"
+	      shift
+	      ;;
+	    *)
+	      func_file_conv "$2"
+	      set x "$@" -Fe"$file"
+	      shift
+	      ;;
+	  esac
+	  ;;
+	-I)
+	  eat=1
+	  func_file_conv "$2" mingw
+	  set x "$@" -I"$file"
+	  shift
+	  ;;
+	-I*)
+	  func_file_conv "${1#-I}" mingw
+	  set x "$@" -I"$file"
+	  shift
+	  ;;
+	-l)
+	  eat=1
+	  func_cl_dashl "$2"
+	  set x "$@" "$lib"
+	  shift
+	  ;;
+	-l*)
+	  func_cl_dashl "${1#-l}"
+	  set x "$@" "$lib"
+	  shift
+	  ;;
+	-L)
+	  eat=1
+	  func_cl_dashL "$2"
+	  ;;
+	-L*)
+	  func_cl_dashL "${1#-L}"
+	  ;;
+	-static)
+	  shared=false
+	  ;;
+	-Wl,*)
+	  arg=${1#-Wl,}
+	  save_ifs="$IFS"; IFS=','
+	  for flag in $arg; do
+	    IFS="$save_ifs"
+	    linker_opts="$linker_opts $flag"
+	  done
+	  IFS="$save_ifs"
+	  ;;
+	-Xlinker)
+	  eat=1
+	  linker_opts="$linker_opts $2"
+	  ;;
+	-*)
+	  set x "$@" "$1"
+	  shift
+	  ;;
+	*.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
+	  func_file_conv "$1"
+	  set x "$@" -Tp"$file"
+	  shift
+	  ;;
+	*.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
+	  func_file_conv "$1" mingw
+	  set x "$@" "$file"
+	  shift
+	  ;;
+	*)
+	  set x "$@" "$1"
+	  shift
+	  ;;
+      esac
+    fi
+    shift
+  done
+  if test -n "$linker_opts"; then
+    linker_opts="-link$linker_opts"
+  fi
+  exec "$@" $linker_opts
+  exit 1
+}
+
+eat=
+
+case $1 in
+  '')
+     echo "$0: No command.  Try '$0 --help' for more information." 1>&2
+     exit 1;
+     ;;
+  -h | --h*)
+    cat <<\EOF
+Usage: compile [--help] [--version] PROGRAM [ARGS]
+
+Wrapper for compilers which do not understand '-c -o'.
+Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
+arguments, and rename the output as expected.
+
+If you are trying to build a whole package this is not the
+right script to run: please start by reading the file 'INSTALL'.
+
+Report bugs to <bug-automake at gnu.org>.
+EOF
+    exit $?
+    ;;
+  -v | --v*)
+    echo "compile $scriptversion"
+    exit $?
+    ;;
+  cl | *[/\\]cl | cl.exe | *[/\\]cl.exe )
+    func_cl_wrapper "$@"      # Doesn't return...
+    ;;
+esac
+
+ofile=
+cfile=
+
+for arg
+do
+  if test -n "$eat"; then
+    eat=
+  else
+    case $1 in
+      -o)
+	# configure might choose to run compile as 'compile cc -o foo foo.c'.
+	# So we strip '-o arg' only if arg is an object.
+	eat=1
+	case $2 in
+	  *.o | *.obj)
+	    ofile=$2
+	    ;;
+	  *)
+	    set x "$@" -o "$2"
+	    shift
+	    ;;
+	esac
+	;;
+      *.c)
+	cfile=$1
+	set x "$@" "$1"
+	shift
+	;;
+      *)
+	set x "$@" "$1"
+	shift
+	;;
+    esac
+  fi
+  shift
+done
+
+if test -z "$ofile" || test -z "$cfile"; then
+  # If no '-o' option was seen then we might have been invoked from a
+  # pattern rule where we don't need one.  That is ok -- this is a
+  # normal compilation that the losing compiler can handle.  If no
+  # '.c' file was seen then we are probably linking.  That is also
+  # ok.
+  exec "$@"
+fi
+
+# Name of file we expect compiler to create.
+cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
+
+# Create the lock directory.
+# Note: use '[/\\:.-]' here to ensure that we don't use the same name
+# that we are using for the .o file.  Also, base the name on the expected
+# object file name, since that is what matters with a parallel build.
+lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
+while true; do
+  if mkdir "$lockdir" >/dev/null 2>&1; then
+    break
+  fi
+  sleep 1
+done
+# FIXME: race condition here if user kills between mkdir and trap.
+trap "rmdir '$lockdir'; exit 1" 1 2 15
+
+# Run the compile.
+"$@"
+ret=$?
+
+if test -f "$cofile"; then
+  test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
+elif test -f "${cofile}bj"; then
+  test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
+fi
+
+rmdir "$lockdir"
+exit $ret
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/gbtools/config/config.guess b/gbtools/config/config.guess
new file mode 100755
index 0000000..b79252d
--- /dev/null
+++ b/gbtools/config/config.guess
@@ -0,0 +1,1558 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+#   Copyright 1992-2013 Free Software Foundation, Inc.
+
+timestamp='2013-06-10'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (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, see <http://www.gnu.org/licenses/>.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that
+# program.  This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
+#
+# Originally written by Per Bothner.
+#
+# 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
+#
+# Please send patches with a ChangeLog entry to config-patches at gnu.org.
+
+
+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 1992-2013 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
+
+case "${UNAME_SYSTEM}" in
+Linux|GNU|GNU/*)
+	# If the system lacks a compiler, then just pick glibc.
+	# We could probably try harder.
+	LIBC=gnu
+
+	eval $set_cc_for_build
+	cat <<-EOF > $dummy.c
+	#include <features.h>
+	#if defined(__UCLIBC__)
+	LIBC=uclibc
+	#elif defined(__dietlibc__)
+	LIBC=dietlibc
+	#else
+	LIBC=gnu
+	#endif
+	EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
+	;;
+esac
+
+# 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 tuples: *-*-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 ;;
+    *:Bitrig:*:*)
+	UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
+	echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE}
+	exit ;;
+    *:OpenBSD:*:*)
+	UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+	echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
+	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'`
+	# Reset EXIT trap before exiting to avoid spurious non-zero exit code.
+	exitcode=$?
+	trap '' 0
+	exit $exitcode ;;
+    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:*:[4567])
+	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:*:*)
+	UNAME_PROCESSOR=`/usr/bin/uname -p`
+	case ${UNAME_PROCESSOR} in
+	    amd64)
+		echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+	    *)
+		echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+	esac
+	exit ;;
+    i*:CYGWIN*:*)
+	echo ${UNAME_MACHINE}-pc-cygwin
+	exit ;;
+    *:MINGW64*:*)
+	echo ${UNAME_MACHINE}-pc-mingw64
+	exit ;;
+    *:MINGW*:*)
+	echo ${UNAME_MACHINE}-pc-mingw32
+	exit ;;
+    i*:MSYS*:*)
+	echo ${UNAME_MACHINE}-pc-msys
+	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-${LIBC}`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/[-(].*//'`-${LIBC}
+	exit ;;
+    i*86:Minix:*:*)
+	echo ${UNAME_MACHINE}-pc-minix
+	exit ;;
+    aarch64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
+    aarch64_be:Linux:*:*)
+	UNAME_MACHINE=aarch64_be
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
+    alpha:Linux:*:*)
+	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+	  EV5)   UNAME_MACHINE=alphaev5 ;;
+	  EV56)  UNAME_MACHINE=alphaev56 ;;
+	  PCA56) UNAME_MACHINE=alphapca56 ;;
+	  PCA57) UNAME_MACHINE=alphapca56 ;;
+	  EV6)   UNAME_MACHINE=alphaev6 ;;
+	  EV67)  UNAME_MACHINE=alphaev67 ;;
+	  EV68*) UNAME_MACHINE=alphaev68 ;;
+	esac
+	objdump --private-headers /bin/sh | grep -q ld.so.1
+	if test "$?" = 0 ; then LIBC="gnulibc1" ; fi
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
+    arc:Linux:*:* | arceb:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
+    arm*:Linux:*:*)
+	eval $set_cc_for_build
+	if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
+	    | grep -q __ARM_EABI__
+	then
+	    echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	else
+	    if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
+		| grep -q __ARM_PCS_VFP
+	    then
+		echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi
+	    else
+		echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf
+	    fi
+	fi
+	exit ;;
+    avr32*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
+    cris:Linux:*:*)
+	echo ${UNAME_MACHINE}-axis-linux-${LIBC}
+	exit ;;
+    crisv32:Linux:*:*)
+	echo ${UNAME_MACHINE}-axis-linux-${LIBC}
+	exit ;;
+    frv:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
+    hexagon:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
+    i*86:Linux:*:*)
+	echo ${UNAME_MACHINE}-pc-linux-${LIBC}
+	exit ;;
+    ia64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
+    m32r*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
+    m68*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	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-${LIBC}"; exit; }
+	;;
+    or1k:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
+    or32:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
+    padre:Linux:*:*)
+	echo sparc-unknown-linux-${LIBC}
+	exit ;;
+    parisc64:Linux:*:* | hppa64:Linux:*:*)
+	echo hppa64-unknown-linux-${LIBC}
+	exit ;;
+    parisc:Linux:*:* | hppa:Linux:*:*)
+	# Look for CPU level
+	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+	  PA7*) echo hppa1.1-unknown-linux-${LIBC} ;;
+	  PA8*) echo hppa2.0-unknown-linux-${LIBC} ;;
+	  *)    echo hppa-unknown-linux-${LIBC} ;;
+	esac
+	exit ;;
+    ppc64:Linux:*:*)
+	echo powerpc64-unknown-linux-${LIBC}
+	exit ;;
+    ppc:Linux:*:*)
+	echo powerpc-unknown-linux-${LIBC}
+	exit ;;
+    ppc64le:Linux:*:*)
+	echo powerpc64le-unknown-linux-${LIBC}
+	exit ;;
+    ppcle:Linux:*:*)
+	echo powerpcle-unknown-linux-${LIBC}
+	exit ;;
+    s390:Linux:*:* | s390x:Linux:*:*)
+	echo ${UNAME_MACHINE}-ibm-linux-${LIBC}
+	exit ;;
+    sh64*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
+    sh*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
+    sparc:Linux:*:* | sparc64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
+    tile*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
+    vax:Linux:*:*)
+	echo ${UNAME_MACHINE}-dec-linux-${LIBC}
+	exit ;;
+    x86_64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
+    xtensa*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	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 ;;
+    x86_64:Haiku:*:*)
+	echo x86_64-unknown-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
+	eval $set_cc_for_build
+	if test "$UNAME_PROCESSOR" = unknown ; then
+	    UNAME_PROCESSOR=powerpc
+	fi
+	if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+	    if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+		(CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+		grep IS_64BIT_ARCH >/dev/null
+	    then
+		case $UNAME_PROCESSOR in
+		    i386) UNAME_PROCESSOR=x86_64 ;;
+		    powerpc) UNAME_PROCESSOR=powerpc64 ;;
+		esac
+	    fi
+	fi
+	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 ;;
+    NEO-?:NONSTOP_KERNEL:*:*)
+	echo neo-tandem-nsk${UNAME_RELEASE}
+	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 ;;
+    x86_64:VMkernel:*:*)
+	echo ${UNAME_MACHINE}-unknown-esx
+	exit ;;
+esac
+
+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/gbtools/config/config.sub b/gbtools/config/config.sub
new file mode 100755
index 0000000..9633db7
--- /dev/null
+++ b/gbtools/config/config.sub
@@ -0,0 +1,1791 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+#   Copyright 1992-2013 Free Software Foundation, Inc.
+
+timestamp='2013-08-10'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (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, see <http://www.gnu.org/licenses/>.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that
+# program.  This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
+
+
+# Please send patches with a ChangeLog entry to config-patches at gnu.org.
+#
+# 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.
+
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# 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 1992-2013 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-android* | linux-dietlibc | linux-newlib* | \
+  linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
+  knetbsd*-gnu* | netbsd*-gnu* | \
+  kopensolaris*-gnu* | \
+  storm-chaos* | os2-emx* | rtmk-nova*)
+    os=-$maybe_os
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+    ;;
+  android-linux)
+    os=-linux-android
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
+    ;;
+  *)
+    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 | -microblaze*)
+		os=
+		basic_machine=$1
+		;;
+	-bluegene*)
+		os=-cnk
+		;;
+	-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*178)
+		os=-lynxos178
+		;;
+	-lynx*5)
+		os=-lynxos5
+		;;
+	-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 \
+	| aarch64 | aarch64_be \
+	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+	| am33_2.0 \
+	| arc | arceb \
+	| arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
+	| avr | avr32 \
+	| be32 | be64 \
+	| bfin \
+	| c4x | c8051 | clipper \
+	| d10v | d30v | dlx | dsp16xx \
+	| epiphany \
+	| fido | fr30 | frv \
+	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+	| hexagon \
+	| i370 | i860 | i960 | ia64 \
+	| ip2k | iq2000 \
+	| le32 | le64 \
+	| lm32 \
+	| m32c | m32r | m32rle | m68000 | m68k | m88k \
+	| maxq | mb | microblaze | microblazeel | mcore | mep | metag \
+	| mips | mipsbe | mipseb | mipsel | mipsle \
+	| mips16 \
+	| mips64 | mips64el \
+	| mips64octeon | mips64octeonel \
+	| mips64orion | mips64orionel \
+	| mips64r5900 | mips64r5900el \
+	| mips64vr | mips64vrel \
+	| mips64vr4100 | mips64vr4100el \
+	| mips64vr4300 | mips64vr4300el \
+	| mips64vr5000 | mips64vr5000el \
+	| mips64vr5900 | mips64vr5900el \
+	| mipsisa32 | mipsisa32el \
+	| mipsisa32r2 | mipsisa32r2el \
+	| mipsisa64 | mipsisa64el \
+	| mipsisa64r2 | mipsisa64r2el \
+	| mipsisa64sb1 | mipsisa64sb1el \
+	| mipsisa64sr71k | mipsisa64sr71kel \
+	| mipsr5900 | mipsr5900el \
+	| mipstx39 | mipstx39el \
+	| mn10200 | mn10300 \
+	| moxie \
+	| mt \
+	| msp430 \
+	| nds32 | nds32le | nds32be \
+	| nios | nios2 | nios2eb | nios2el \
+	| ns16k | ns32k \
+	| open8 \
+	| or1k | or32 \
+	| pdp10 | pdp11 | pj | pjl \
+	| powerpc | powerpc64 | powerpc64le | powerpcle \
+	| pyramid \
+	| rl78 | rx \
+	| score \
+	| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+	| sh64 | sh64le \
+	| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
+	| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
+	| spu \
+	| tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
+	| ubicom32 \
+	| v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
+	| we32k \
+	| x86 | xc16x | xstormy16 | xtensa \
+	| z8k | z80)
+		basic_machine=$basic_machine-unknown
+		;;
+	c54x)
+		basic_machine=tic54x-unknown
+		;;
+	c55x)
+		basic_machine=tic55x-unknown
+		;;
+	c6x)
+		basic_machine=tic6x-unknown
+		;;
+	m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip)
+		basic_machine=$basic_machine-unknown
+		os=-none
+		;;
+	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+		;;
+	ms1)
+		basic_machine=mt-unknown
+		;;
+
+	strongarm | thumb | xscale)
+		basic_machine=arm-unknown
+		;;
+	xgate)
+		basic_machine=$basic_machine-unknown
+		os=-none
+		;;
+	xscaleeb)
+		basic_machine=armeb-unknown
+		;;
+
+	xscaleel)
+		basic_machine=armel-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-* \
+	| aarch64-* | aarch64_be-* \
+	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
+	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
+	| avr-* | avr32-* \
+	| be32-* | be64-* \
+	| bfin-* | bs2000-* \
+	| c[123]* | c30-* | [cjt]90-* | c4x-* \
+	| c8051-* | 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-* \
+	| hexagon-* \
+	| i*86-* | i860-* | i960-* | ia64-* \
+	| ip2k-* | iq2000-* \
+	| le32-* | le64-* \
+	| lm32-* \
+	| m32c-* | m32r-* | m32rle-* \
+	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+	| m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
+	| microblaze-* | microblazeel-* \
+	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+	| mips16-* \
+	| mips64-* | mips64el-* \
+	| mips64octeon-* | mips64octeonel-* \
+	| mips64orion-* | mips64orionel-* \
+	| mips64r5900-* | mips64r5900el-* \
+	| mips64vr-* | mips64vrel-* \
+	| mips64vr4100-* | mips64vr4100el-* \
+	| mips64vr4300-* | mips64vr4300el-* \
+	| mips64vr5000-* | mips64vr5000el-* \
+	| mips64vr5900-* | mips64vr5900el-* \
+	| mipsisa32-* | mipsisa32el-* \
+	| mipsisa32r2-* | mipsisa32r2el-* \
+	| mipsisa64-* | mipsisa64el-* \
+	| mipsisa64r2-* | mipsisa64r2el-* \
+	| mipsisa64sb1-* | mipsisa64sb1el-* \
+	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
+	| mipsr5900-* | mipsr5900el-* \
+	| mipstx39-* | mipstx39el-* \
+	| mmix-* \
+	| mt-* \
+	| msp430-* \
+	| nds32-* | nds32le-* | nds32be-* \
+	| nios-* | nios2-* | nios2eb-* | nios2el-* \
+	| none-* | np1-* | ns16k-* | ns32k-* \
+	| open8-* \
+	| orion-* \
+	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
+	| pyramid-* \
+	| rl78-* | romp-* | rs6000-* | rx-* \
+	| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
+	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+	| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
+	| sparclite-* \
+	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
+	| tahoe-* \
+	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+	| tile*-* \
+	| tron-* \
+	| ubicom32-* \
+	| v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
+	| vax-* \
+	| we32k-* \
+	| x86-* | x86_64-* | xc16x-* | xps100-* \
+	| xstormy16-* | xtensa*-* \
+	| ymp-* \
+	| z8k-* | z80-*)
+		;;
+	# 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
+		;;
+	aros)
+		basic_machine=i386-pc
+		os=-aros
+		;;
+	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
+		;;
+	bluegene*)
+		basic_machine=powerpc-ibm
+		os=-cnk
+		;;
+	c54x-*)
+		basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	c55x-*)
+		basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	c6x-*)
+		basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	c90)
+		basic_machine=c90-cray
+		os=-unicos
+		;;
+	cegcc)
+		basic_machine=arm-unknown
+		os=-cegcc
+		;;
+	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 | 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
+		;;
+	dicos)
+		basic_machine=i686-pc
+		os=-dicos
+		;;
+	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*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
+		;;
+	microblaze*)
+		basic_machine=microblaze-xilinx
+		;;
+	mingw64)
+		basic_machine=x86_64-pc
+		os=-mingw64
+		;;
+	mingw32)
+		basic_machine=i686-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
+		;;
+	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-/'`
+		;;
+	msys)
+		basic_machine=i686-pc
+		os=-msys
+		;;
+	mvs)
+		basic_machine=i370-ibm
+		os=-mvs
+		;;
+	nacl)
+		basic_machine=le32-unknown
+		os=-nacl
+		;;
+	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
+		;;
+	neo-tandem)
+		basic_machine=neo-tandem
+		;;
+	nse-tandem)
+		basic_machine=nse-tandem
+		;;
+	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 | ppcbe)	basic_machine=powerpc-unknown
+		;;
+	ppc-* | ppcbe-*)
+		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 | rdos64)
+		basic_machine=x86_64-pc
+		os=-rdos
+		;;
+	rdos32)
+		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
+		;;
+	strongarm-* | thumb-*)
+		basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	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
+		;;
+	tile*)
+		basic_machine=$basic_machine-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
+		;;
+	xscale-* | xscalee[bl]-*)
+		basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
+		;;
+	ymp)
+		basic_machine=ymp-cray
+		os=-unicos
+		;;
+	z8k-*-coff)
+		basic_machine=z8k-unknown
+		os=-sim
+		;;
+	z80-*-coff)
+		basic_machine=z80-unknown
+		os=-sim
+		;;
+	none)
+		basic_machine=none-none
+		os=-none
+		;;
+
+# 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[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
+		basic_machine=sh-unknown
+		;;
+	sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
+		basic_machine=sparc-sun
+		;;
+	cydra)
+		basic_machine=cydra-cydrome
+		;;
+	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.
+	-auroraux)
+		os=-auroraux
+		;;
+	-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* | -cnk* | -sunos | -sunos[34]*\
+	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
+	      | -sym* | -kopensolaris* | -plan9* \
+	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+	      | -aos* | -aros* \
+	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+	      | -bitrig* | -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* | -cegcc* \
+	      | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+	      | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
+	      | -linux-newlib* | -linux-musl* | -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* | -es*)
+	# 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
+		;;
+	-zvmoe)
+		os=-zvmoe
+		;;
+	-dicos*)
+		os=-dicos
+		;;
+	-nacl*)
+		;;
+	-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
+		;;
+	c8051-*)
+		os=-elf
+		;;
+	hexagon-*)
+		os=-elf
+		;;
+	tic54x-*)
+		os=-coff
+		;;
+	tic55x-*)
+		os=-coff
+		;;
+	tic6x-*)
+		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
+		;;
+	m68*-cisco)
+		os=-aout
+		;;
+	mep-*)
+		os=-elf
+		;;
+	mips*-cisco)
+		os=-elf
+		;;
+	mips*-*)
+		os=-elf
+		;;
+	or1k-*)
+		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
+				;;
+			-cnk*|-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/gbtools/config/depcomp b/gbtools/config/depcomp
new file mode 100755
index 0000000..4ebd5b3
--- /dev/null
+++ b/gbtools/config/depcomp
@@ -0,0 +1,791 @@
+#! /bin/sh
+# depcomp - compile a program generating dependencies as side-effects
+
+scriptversion=2013-05-30.07; # UTC
+
+# Copyright (C) 1999-2013 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, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Originally written by Alexandre Oliva <oliva at dcc.unicamp.br>.
+
+case $1 in
+  '')
+    echo "$0: No command.  Try '$0 --help' for more information." 1>&2
+    exit 1;
+    ;;
+  -h | --h*)
+    cat <<\EOF
+Usage: depcomp [--help] [--version] PROGRAM [ARGS]
+
+Run PROGRAMS ARGS to compile a file, generating dependencies
+as side-effects.
+
+Environment variables:
+  depmode     Dependency tracking mode.
+  source      Source file read by 'PROGRAMS ARGS'.
+  object      Object file output by 'PROGRAMS ARGS'.
+  DEPDIR      directory where to store dependencies.
+  depfile     Dependency file to output.
+  tmpdepfile  Temporary file to use when outputting dependencies.
+  libtool     Whether libtool is used (yes/no).
+
+Report bugs to <bug-automake at gnu.org>.
+EOF
+    exit $?
+    ;;
+  -v | --v*)
+    echo "depcomp $scriptversion"
+    exit $?
+    ;;
+esac
+
+# Get the directory component of the given path, and save it in the
+# global variables '$dir'.  Note that this directory component will
+# be either empty or ending with a '/' character.  This is deliberate.
+set_dir_from ()
+{
+  case $1 in
+    */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
+      *) dir=;;
+  esac
+}
+
+# Get the suffix-stripped basename of the given path, and save it the
+# global variable '$base'.
+set_base_from ()
+{
+  base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
+}
+
+# If no dependency file was actually created by the compiler invocation,
+# we still have to create a dummy depfile, to avoid errors with the
+# Makefile "include basename.Plo" scheme.
+make_dummy_depfile ()
+{
+  echo "#dummy" > "$depfile"
+}
+
+# Factor out some common post-processing of the generated depfile.
+# Requires the auxiliary global variable '$tmpdepfile' to be set.
+aix_post_process_depfile ()
+{
+  # If the compiler actually managed to produce a dependency file,
+  # post-process it.
+  if test -f "$tmpdepfile"; then
+    # Each line is of the form 'foo.o: dependency.h'.
+    # Do two passes, one to just change these to
+    #   $object: dependency.h
+    # and one to simply output
+    #   dependency.h:
+    # which is needed to avoid the deleted-header problem.
+    { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
+      sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
+    } > "$depfile"
+    rm -f "$tmpdepfile"
+  else
+    make_dummy_depfile
+  fi
+}
+
+# A tabulation character.
+tab='	'
+# A newline character.
+nl='
+'
+# Character ranges might be problematic outside the C locale.
+# These definitions help.
+upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
+lower=abcdefghijklmnopqrstuvwxyz
+digits=0123456789
+alpha=${upper}${lower}
+
+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
+
+# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
+depfile=${depfile-`echo "$object" |
+  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
+tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
+
+rm -f "$tmpdepfile"
+
+# Avoid interferences from the environment.
+gccflag= dashmflag=
+
+# 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
+
+cygpath_u="cygpath -u -f -"
+if test "$depmode" = msvcmsys; then
+  # This is just like msvisualcpp but w/o cygpath translation.
+  # Just convert the backslash-escaped backslashes to single forward
+  # slashes to satisfy depend.m4
+  cygpath_u='sed s,\\\\,/,g'
+  depmode=msvisualcpp
+fi
+
+if test "$depmode" = msvc7msys; then
+  # This is just like msvc7 but w/o cygpath translation.
+  # Just convert the backslash-escaped backslashes to single forward
+  # slashes to satisfy depend.m4
+  cygpath_u='sed s,\\\\,/,g'
+  depmode=msvc7
+fi
+
+if test "$depmode" = xlc; then
+  # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
+  gccflag=-qmakedep=gcc,-MF
+  depmode=gcc
+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.
+## Unfortunately, FreeBSD c89 acceptance of flags depends upon
+## the command line argument order; so add the flags where they
+## appear in depend2.am.  Note that the slowdown incurred here
+## affects only configure: in makefiles, %FASTDEP% shortcuts this.
+  for arg
+  do
+    case $arg in
+    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
+    *)  set fnord "$@" "$arg" ;;
+    esac
+    shift # fnord
+    shift # $arg
+  done
+  "$@"
+  stat=$?
+  if test $stat -ne 0; then
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  mv "$tmpdepfile" "$depfile"
+  ;;
+
+gcc)
+## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
+## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
+## (see the conditional assignment to $gccflag above).
+## 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).  Also, it might not be
+##   supported by the other compilers which use the 'gcc' depmode.
+## - 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 -ne 0; then
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  # 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.
+## 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.  hp depmode also adds that space, but also prefixes the VPATH
+## to the object.  Take care to not repeat it in the output.
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+  tr ' ' "$nl" < "$tmpdepfile" \
+    | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -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 -ne 0; then
+    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 ' ' "$nl" < "$tmpdepfile" \
+      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
+      | tr "$nl" ' ' >> "$depfile"
+    echo >> "$depfile"
+    # The second pass generates a dummy entry for each header file.
+    tr ' ' "$nl" < "$tmpdepfile" \
+      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+      >> "$depfile"
+  else
+    make_dummy_depfile
+  fi
+  rm -f "$tmpdepfile"
+  ;;
+
+xlc)
+  # 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
+  ;;
+
+aix)
+  # The C for AIX Compiler uses -M and outputs the dependencies
+  # in a .u file.  In older versions, 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.
+  # Version 6 uses the directory in both cases.
+  set_dir_from "$object"
+  set_base_from "$object"
+  if test "$libtool" = yes; then
+    tmpdepfile1=$dir$base.u
+    tmpdepfile2=$base.u
+    tmpdepfile3=$dir.libs/$base.u
+    "$@" -Wc,-M
+  else
+    tmpdepfile1=$dir$base.u
+    tmpdepfile2=$dir$base.u
+    tmpdepfile3=$dir$base.u
+    "$@" -M
+  fi
+  stat=$?
+  if test $stat -ne 0; then
+    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+    exit $stat
+  fi
+
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+  do
+    test -f "$tmpdepfile" && break
+  done
+  aix_post_process_depfile
+  ;;
+
+tcc)
+  # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
+  # FIXME: That version still under development at the moment of writing.
+  #        Make that this statement remains true also for stable, released
+  #        versions.
+  # It will wrap lines (doesn't matter whether long or short) with a
+  # trailing '\', as in:
+  #
+  #   foo.o : \
+  #    foo.c \
+  #    foo.h \
+  #
+  # It will put a trailing '\' even on the last line, and will use leading
+  # spaces rather than leading tabs (at least since its commit 0394caf7
+  # "Emit spaces for -MD").
+  "$@" -MD -MF "$tmpdepfile"
+  stat=$?
+  if test $stat -ne 0; then
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
+  # We have to change lines of the first kind to '$object: \'.
+  sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
+  # And for each line of the second kind, we have to emit a 'dep.h:'
+  # dummy dependency, to avoid the deleted-header problem.
+  sed -n -e 's|^  *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+## The order of this option in the case statement is important, since the
+## shell code in configure will try each of these formats in the order
+## listed in this file.  A plain '-MD' option would be understood by many
+## compilers, so we must ensure this comes after the gcc and icc options.
+pgcc)
+  # Portland's C compiler understands '-MD'.
+  # Will always output deps to 'file.d' where file is the root name of the
+  # source file under compilation, even if file resides in a subdirectory.
+  # The object file name does not affect the name of the '.d' file.
+  # pgcc 10.2 will output
+  #    foo.o: sub/foo.c sub/foo.h
+  # and will wrap long lines using '\' :
+  #    foo.o: sub/foo.c ... \
+  #     sub/foo.h ... \
+  #     ...
+  set_dir_from "$object"
+  # Use the source, not the object, to determine the base name, since
+  # that's sadly what pgcc will do too.
+  set_base_from "$source"
+  tmpdepfile=$base.d
+
+  # For projects that build the same source file twice into different object
+  # files, the pgcc approach of using the *source* file root name can cause
+  # problems in parallel builds.  Use a locking strategy to avoid stomping on
+  # the same $tmpdepfile.
+  lockdir=$base.d-lock
+  trap "
+    echo '$0: caught signal, cleaning up...' >&2
+    rmdir '$lockdir'
+    exit 1
+  " 1 2 13 15
+  numtries=100
+  i=$numtries
+  while test $i -gt 0; do
+    # mkdir is a portable test-and-set.
+    if mkdir "$lockdir" 2>/dev/null; then
+      # This process acquired the lock.
+      "$@" -MD
+      stat=$?
+      # Release the lock.
+      rmdir "$lockdir"
+      break
+    else
+      # If the lock is being held by a different process, wait
+      # until the winning process is done or we timeout.
+      while test -d "$lockdir" && test $i -gt 0; do
+        sleep 1
+        i=`expr $i - 1`
+      done
+    fi
+    i=`expr $i - 1`
+  done
+  trap - 1 2 13 15
+  if test $i -le 0; then
+    echo "$0: failed to acquire lock after $numtries attempts" >&2
+    echo "$0: check lockdir '$lockdir'" >&2
+    exit 1
+  fi
+
+  if test $stat -ne 0; then
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  # Each line is of the form `foo.o: dependent.h',
+  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
+  # Do two passes, one to just change these to
+  # `$object: dependent.h' and one to simply `dependent.h:'.
+  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
+  # Some versions of the HPUX 10.20 sed can't process this invocation
+  # correctly.  Breaking it into two sed invocations is a workaround.
+  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
+    | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+hp2)
+  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
+  # compilers, which have integrated preprocessors.  The correct option
+  # to use with these is +Maked; it writes dependencies to a file named
+  # 'foo.d', which lands next to the object file, wherever that
+  # happens to be.
+  # Much of this is similar to the tru64 case; see comments there.
+  set_dir_from  "$object"
+  set_base_from "$object"
+  if test "$libtool" = yes; then
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir.libs/$base.d
+    "$@" -Wc,+Maked
+  else
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir$base.d
+    "$@" +Maked
+  fi
+  stat=$?
+  if test $stat -ne 0; then
+     rm -f "$tmpdepfile1" "$tmpdepfile2"
+     exit $stat
+  fi
+
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
+  do
+    test -f "$tmpdepfile" && break
+  done
+  if test -f "$tmpdepfile"; then
+    sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
+    # Add 'dependent.h:' lines.
+    sed -ne '2,${
+               s/^ *//
+               s/ \\*$//
+               s/$/:/
+               p
+             }' "$tmpdepfile" >> "$depfile"
+  else
+    make_dummy_depfile
+  fi
+  rm -f "$tmpdepfile" "$tmpdepfile2"
+  ;;
+
+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.
+  set_dir_from  "$object"
+  set_base_from "$object"
+
+  if test "$libtool" = yes; then
+    # Libtool generates 2 separate objects for the 2 libraries.  These
+    # two compilations output dependencies in $dir.libs/$base.o.d and
+    # in $dir$base.o.d.  We have to check for both files, because
+    # one of the two compilations can be disabled.  We should prefer
+    # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
+    # automatically cleaned when .libs/ is deleted, while ignoring
+    # the former would cause a distcleancheck panic.
+    tmpdepfile1=$dir$base.o.d          # libtool 1.5
+    tmpdepfile2=$dir.libs/$base.o.d    # Likewise.
+    tmpdepfile3=$dir.libs/$base.d      # Compaq CCC V6.2-504
+    "$@" -Wc,-MD
+  else
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir$base.d
+    tmpdepfile3=$dir$base.d
+    "$@" -MD
+  fi
+
+  stat=$?
+  if test $stat -ne 0; then
+    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+    exit $stat
+  fi
+
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+  do
+    test -f "$tmpdepfile" && break
+  done
+  # Same post-processing that is required for AIX mode.
+  aix_post_process_depfile
+  ;;
+
+msvc7)
+  if test "$libtool" = yes; then
+    showIncludes=-Wc,-showIncludes
+  else
+    showIncludes=-showIncludes
+  fi
+  "$@" $showIncludes > "$tmpdepfile"
+  stat=$?
+  grep -v '^Note: including file: ' "$tmpdepfile"
+  if test $stat -ne 0; then
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  # The first sed program below extracts the file names and escapes
+  # backslashes for cygpath.  The second sed program outputs the file
+  # name when reading, but also accumulates all include files in the
+  # hold buffer in order to output them again at the end.  This only
+  # works with sed implementations that can handle large buffers.
+  sed < "$tmpdepfile" -n '
+/^Note: including file:  *\(.*\)/ {
+  s//\1/
+  s/\\/\\\\/g
+  p
+}' | $cygpath_u | sort -u | sed -n '
+s/ /\\ /g
+s/\(.*\)/'"$tab"'\1 \\/p
+s/.\(.*\) \\/\1:/
+H
+$ {
+  s/.*/'"$tab"'/
+  G
+  p
+}' >> "$depfile"
+  echo >> "$depfile" # make sure the fragment doesn't end with a backslash
+  rm -f "$tmpdepfile"
+  ;;
+
+msvc7msys)
+  # 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
+  ;;
+
+#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 preprocessed file to stdout, regardless of -o.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test "X$1" != 'X--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
+
+  test -z "$dashmflag" && dashmflag=-M
+  # Require at least two characters before searching for ':'
+  # in the target name.  This is to cope with DOS-style filenames:
+  # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
+  "$@" $dashmflag |
+    sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
+  rm -f "$depfile"
+  cat < "$tmpdepfile" > "$depfile"
+  # Some versions of the HPUX 10.20 sed can't process this sed invocation
+  # correctly.  Breaking it into two sed invocations is a workaround.
+  tr ' ' "$nl" < "$tmpdepfile" \
+    | 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 $?
+  # Remove any Libtool call
+  if test "$libtool" = yes; then
+    while test "X$1" != 'X--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+  # X makedepend
+  shift
+  cleared=no eat=no
+  for arg
+  do
+    case $cleared in
+    no)
+      set ""; shift
+      cleared=yes ;;
+    esac
+    if test $eat = yes; then
+      eat=no
+      continue
+    fi
+    case "$arg" in
+    -D*|-I*)
+      set fnord "$@" "$arg"; shift ;;
+    # Strip any option that makedepend may not understand.  Remove
+    # the object too, otherwise makedepend will parse it as a source file.
+    -arch)
+      eat=yes ;;
+    -*|$object)
+      ;;
+    *)
+      set fnord "$@" "$arg"; shift ;;
+    esac
+  done
+  obj_suffix=`echo "$object" | sed 's/^.*\././'`
+  touch "$tmpdepfile"
+  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
+  rm -f "$depfile"
+  # makedepend may prepend the VPATH from the source file name to the object.
+  # No need to regex-escape $object, excess matching of '.' is harmless.
+  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
+  # Some versions of the HPUX 10.20 sed can't process the last invocation
+  # correctly.  Breaking it into two sed invocations is a workaround.
+  sed '1,2d' "$tmpdepfile" \
+    | tr ' ' "$nl" \
+    | 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 preprocessed file to stdout.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test "X$1" != 'X--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 -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+             -e '/^#line [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 preprocessed file to stdout.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test "X$1" != 'X--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  IFS=" "
+  for arg
+  do
+    case "$arg" in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
+        set fnord "$@"
+        shift
+        shift
+        ;;
+    *)
+        set fnord "$@" "$arg"
+        shift
+        shift
+        ;;
+    esac
+  done
+  "$@" -E 2>/dev/null |
+  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
+  echo "$tab" >> "$depfile"
+  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+msvcmsys)
+  # 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
+  ;;
+
+none)
+  exec "$@"
+  ;;
+
+*)
+  echo "Unknown depmode $depmode" 1>&2
+  exit 1
+  ;;
+esac
+
+exit 0
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/gbtools/config/install-sh b/gbtools/config/install-sh
new file mode 100755
index 0000000..377bb86
--- /dev/null
+++ b/gbtools/config/install-sh
@@ -0,0 +1,527 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2011-11-20.07; # UTC
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# 'make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.
+
+nl='
+'
+IFS=" ""	$nl"
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit=${DOITPROG-}
+if test -z "$doit"; then
+  doit_exec=exec
+else
+  doit_exec=$doit
+fi
+
+# Put in absolute file names if you don't have them in your path;
+# or use environment vars.
+
+chgrpprog=${CHGRPPROG-chgrp}
+chmodprog=${CHMODPROG-chmod}
+chownprog=${CHOWNPROG-chown}
+cmpprog=${CMPPROG-cmp}
+cpprog=${CPPROG-cp}
+mkdirprog=${MKDIRPROG-mkdir}
+mvprog=${MVPROG-mv}
+rmprog=${RMPROG-rm}
+stripprog=${STRIPPROG-strip}
+
+posix_glob='?'
+initialize_posix_glob='
+  test "$posix_glob" != "?" || {
+    if (set -f) 2>/dev/null; then
+      posix_glob=
+    else
+      posix_glob=:
+    fi
+  }
+'
+
+posix_mkdir=
+
+# Desired mode of installed file.
+mode=0755
+
+chgrpcmd=
+chmodcmd=$chmodprog
+chowncmd=
+mvcmd=$mvprog
+rmcmd="$rmprog -f"
+stripcmd=
+
+src=
+dst=
+dir_arg=
+dst_arg=
+
+copy_on_change=false
+no_target_directory=
+
+usage="\
+Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+   or: $0 [OPTION]... SRCFILES... DIRECTORY
+   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+   or: $0 [OPTION]... -d DIRECTORIES...
+
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
+
+Options:
+     --help     display this help and exit.
+     --version  display version info and exit.
+
+  -c            (ignored)
+  -C            install only if different (preserve the last data modification time)
+  -d            create directories instead of installing files.
+  -g GROUP      $chgrpprog installed files to GROUP.
+  -m MODE       $chmodprog installed files to MODE.
+  -o USER       $chownprog installed files to USER.
+  -s            $stripprog installed files.
+  -t DIRECTORY  install into DIRECTORY.
+  -T            report an error if DSTFILE is a directory.
+
+Environment variables override the default commands:
+  CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
+  RMPROG STRIPPROG
+"
+
+while test $# -ne 0; do
+  case $1 in
+    -c) ;;
+
+    -C) copy_on_change=true;;
+
+    -d) dir_arg=true;;
+
+    -g) chgrpcmd="$chgrpprog $2"
+	shift;;
+
+    --help) echo "$usage"; exit $?;;
+
+    -m) mode=$2
+	case $mode in
+	  *' '* | *'	'* | *'
+'*	  | *'*'* | *'?'* | *'['*)
+	    echo "$0: invalid mode: $mode" >&2
+	    exit 1;;
+	esac
+	shift;;
+
+    -o) chowncmd="$chownprog $2"
+	shift;;
+
+    -s) stripcmd=$stripprog;;
+
+    -t) dst_arg=$2
+	# Protect names problematic for 'test' and other utilities.
+	case $dst_arg in
+	  -* | [=\(\)!]) dst_arg=./$dst_arg;;
+	esac
+	shift;;
+
+    -T) no_target_directory=true;;
+
+    --version) echo "$0 $scriptversion"; exit $?;;
+
+    --)	shift
+	break;;
+
+    -*)	echo "$0: invalid option: $1" >&2
+	exit 1;;
+
+    *)  break;;
+  esac
+  shift
+done
+
+if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
+  # When -d is used, all remaining arguments are directories to create.
+  # When -t is used, the destination is already specified.
+  # Otherwise, the last argument is the destination.  Remove it from $@.
+  for arg
+  do
+    if test -n "$dst_arg"; then
+      # $@ is not empty: it contains at least $arg.
+      set fnord "$@" "$dst_arg"
+      shift # fnord
+    fi
+    shift # arg
+    dst_arg=$arg
+    # Protect names problematic for 'test' and other utilities.
+    case $dst_arg in
+      -* | [=\(\)!]) dst_arg=./$dst_arg;;
+    esac
+  done
+fi
+
+if test $# -eq 0; then
+  if test -z "$dir_arg"; then
+    echo "$0: no input file specified." >&2
+    exit 1
+  fi
+  # It's OK to call 'install-sh -d' without argument.
+  # This can happen when creating conditional directories.
+  exit 0
+fi
+
+if test -z "$dir_arg"; then
+  do_exit='(exit $ret); exit $ret'
+  trap "ret=129; $do_exit" 1
+  trap "ret=130; $do_exit" 2
+  trap "ret=141; $do_exit" 13
+  trap "ret=143; $do_exit" 15
+
+  # Set umask so as not to create temps with too-generous modes.
+  # However, 'strip' requires both read and write access to temps.
+  case $mode in
+    # Optimize common cases.
+    *644) cp_umask=133;;
+    *755) cp_umask=22;;
+
+    *[0-7])
+      if test -z "$stripcmd"; then
+	u_plus_rw=
+      else
+	u_plus_rw='% 200'
+      fi
+      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
+    *)
+      if test -z "$stripcmd"; then
+	u_plus_rw=
+      else
+	u_plus_rw=,u+rw
+      fi
+      cp_umask=$mode$u_plus_rw;;
+  esac
+fi
+
+for src
+do
+  # Protect names problematic for 'test' and other utilities.
+  case $src in
+    -* | [=\(\)!]) src=./$src;;
+  esac
+
+  if test -n "$dir_arg"; then
+    dst=$src
+    dstdir=$dst
+    test -d "$dstdir"
+    dstdir_status=$?
+  else
+
+    # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+    # might cause directories to be created, which would be especially bad
+    # if $src (and thus $dsttmp) contains '*'.
+    if test ! -f "$src" && test ! -d "$src"; then
+      echo "$0: $src does not exist." >&2
+      exit 1
+    fi
+
+    if test -z "$dst_arg"; then
+      echo "$0: no destination specified." >&2
+      exit 1
+    fi
+    dst=$dst_arg
+
+    # If destination is a directory, append the input filename; won't work
+    # if double slashes aren't ignored.
+    if test -d "$dst"; then
+      if test -n "$no_target_directory"; then
+	echo "$0: $dst_arg: Is a directory" >&2
+	exit 1
+      fi
+      dstdir=$dst
+      dst=$dstdir/`basename "$src"`
+      dstdir_status=0
+    else
+      # Prefer dirname, but fall back on a substitute if dirname fails.
+      dstdir=`
+	(dirname "$dst") 2>/dev/null ||
+	expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	     X"$dst" : 'X\(//\)[^/]' \| \
+	     X"$dst" : 'X\(//\)$' \| \
+	     X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
+	echo X"$dst" |
+	    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\/\)[^/].*/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\/\)$/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\).*/{
+		   s//\1/
+		   q
+		 }
+		 s/.*/./; q'
+      `
+
+      test -d "$dstdir"
+      dstdir_status=$?
+    fi
+  fi
+
+  obsolete_mkdir_used=false
+
+  if test $dstdir_status != 0; then
+    case $posix_mkdir in
+      '')
+	# Create intermediate dirs using mode 755 as modified by the umask.
+	# This is like FreeBSD 'install' as of 1997-10-28.
+	umask=`umask`
+	case $stripcmd.$umask in
+	  # Optimize common cases.
+	  *[2367][2367]) mkdir_umask=$umask;;
+	  .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+
+	  *[0-7])
+	    mkdir_umask=`expr $umask + 22 \
+	      - $umask % 100 % 40 + $umask % 20 \
+	      - $umask % 10 % 4 + $umask % 2
+	    `;;
+	  *) mkdir_umask=$umask,go-w;;
+	esac
+
+	# With -d, create the new directory with the user-specified mode.
+	# Otherwise, rely on $mkdir_umask.
+	if test -n "$dir_arg"; then
+	  mkdir_mode=-m$mode
+	else
+	  mkdir_mode=
+	fi
+
+	posix_mkdir=false
+	case $umask in
+	  *[123567][0-7][0-7])
+	    # POSIX mkdir -p sets u+wx bits regardless of umask, which
+	    # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+	    ;;
+	  *)
+	    tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+	    trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+	    if (umask $mkdir_umask &&
+		exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+	    then
+	      if test -z "$dir_arg" || {
+		   # Check for POSIX incompatibilities with -m.
+		   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+		   # other-writable bit of parent directory when it shouldn't.
+		   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+		   ls_ld_tmpdir=`ls -ld "$tmpdir"`
+		   case $ls_ld_tmpdir in
+		     d????-?r-*) different_mode=700;;
+		     d????-?--*) different_mode=755;;
+		     *) false;;
+		   esac &&
+		   $mkdirprog -m$different_mode -p -- "$tmpdir" && {
+		     ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+		     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+		   }
+		 }
+	      then posix_mkdir=:
+	      fi
+	      rmdir "$tmpdir/d" "$tmpdir"
+	    else
+	      # Remove any dirs left behind by ancient mkdir implementations.
+	      rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+	    fi
+	    trap '' 0;;
+	esac;;
+    esac
+
+    if
+      $posix_mkdir && (
+	umask $mkdir_umask &&
+	$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+      )
+    then :
+    else
+
+      # The umask is ridiculous, or mkdir does not conform to POSIX,
+      # or it failed possibly due to a race condition.  Create the
+      # directory the slow way, step by step, checking for races as we go.
+
+      case $dstdir in
+	/*) prefix='/';;
+	[-=\(\)!]*) prefix='./';;
+	*)  prefix='';;
+      esac
+
+      eval "$initialize_posix_glob"
+
+      oIFS=$IFS
+      IFS=/
+      $posix_glob set -f
+      set fnord $dstdir
+      shift
+      $posix_glob set +f
+      IFS=$oIFS
+
+      prefixes=
+
+      for d
+      do
+	test X"$d" = X && continue
+
+	prefix=$prefix$d
+	if test -d "$prefix"; then
+	  prefixes=
+	else
+	  if $posix_mkdir; then
+	    (umask=$mkdir_umask &&
+	     $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+	    # Don't fail if two instances are running concurrently.
+	    test -d "$prefix" || exit 1
+	  else
+	    case $prefix in
+	      *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+	      *) qprefix=$prefix;;
+	    esac
+	    prefixes="$prefixes '$qprefix'"
+	  fi
+	fi
+	prefix=$prefix/
+      done
+
+      if test -n "$prefixes"; then
+	# Don't fail if two instances are running concurrently.
+	(umask $mkdir_umask &&
+	 eval "\$doit_exec \$mkdirprog $prefixes") ||
+	  test -d "$dstdir" || exit 1
+	obsolete_mkdir_used=true
+      fi
+    fi
+  fi
+
+  if test -n "$dir_arg"; then
+    { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
+    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
+    { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
+      test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
+  else
+
+    # Make a couple of temp file names in the proper directory.
+    dsttmp=$dstdir/_inst.$$_
+    rmtmp=$dstdir/_rm.$$_
+
+    # Trap to clean up those temp files at exit.
+    trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+
+    # Copy the file name to the temp name.
+    (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
+
+    # 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 $cpprog $src $dsttmp" command.
+    #
+    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
+    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
+    { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
+    { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+
+    # If -C, don't bother to copy if it wouldn't change the file.
+    if $copy_on_change &&
+       old=`LC_ALL=C ls -dlL "$dst"	2>/dev/null` &&
+       new=`LC_ALL=C ls -dlL "$dsttmp"	2>/dev/null` &&
+
+       eval "$initialize_posix_glob" &&
+       $posix_glob set -f &&
+       set X $old && old=:$2:$4:$5:$6 &&
+       set X $new && new=:$2:$4:$5:$6 &&
+       $posix_glob set +f &&
+
+       test "$old" = "$new" &&
+       $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
+    then
+      rm -f "$dsttmp"
+    else
+      # Rename the file to the real destination.
+      $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
+
+      # The rename failed, perhaps because mv can't rename something else
+      # to itself, or perhaps because mv is so ancient that it does not
+      # support -f.
+      {
+	# Now remove or move aside any old file at destination location.
+	# We try this two ways since rm can't unlink itself on some
+	# systems and the destination file might be busy for other
+	# reasons.  In this case, the final cleanup might fail but the new
+	# file should still install successfully.
+	{
+	  test ! -f "$dst" ||
+	  $doit $rmcmd -f "$dst" 2>/dev/null ||
+	  { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+	    { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+	  } ||
+	  { echo "$0: cannot unlink or rename $dst" >&2
+	    (exit 1); exit 1
+	  }
+	} &&
+
+	# Now rename the file to the real destination.
+	$doit $mvcmd "$dsttmp" "$dst"
+      }
+    fi || exit 1
+
+    trap '' 0
+  fi
+done
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/gbtools/config/ltmain.sh b/gbtools/config/ltmain.sh
new file mode 100644
index 0000000..a356aca
--- /dev/null
+++ b/gbtools/config/ltmain.sh
@@ -0,0 +1,9661 @@
+
+# libtool (GNU libtool) 2.4.2
+# 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, 2011 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)
+#       --no-warn            don't display warning messages
+#       --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.2 Debian-2.4.2-1.7ubuntu1
+#         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.2 Debian-2.4.2-1.7ubuntu1"
+TIMESTAMP=""
+package_revision=1.3337
+
+# 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'}
+: ${MAKE="make"}
+: ${MKDIR="mkdir"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+: ${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=${PATH_SEPARATOR-:}
+     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-automake} --version) 2>/dev/null |$SED 1q`"'/
+	s/\$autoconf_version/'"`(${AUTOCONF-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_warning=:
+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-warning|--no-warn)
+			opt_warning=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 | *.go | *.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_to_tool_file "$oldlib" func_convert_file_msys_to_w32
+      tool_oldlib=$func_to_tool_file_result
+
+      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
+
+      if test -n "$stripme" && test -n "$old_striplib"; then
+	func_show_eval "$old_striplib $tool_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 ()
+{
+  case \" \$* \" in
+  *\\ --lt-*)
+    for lt_wr_arg
+    do
+      case \$lt_wr_arg in
+      --lt-*) ;;
+      *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
+      esac
+      shift
+    done ;;
+  esac
+  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 -n -e '
+s/^\(.\{79\}\)\(..*\)/\1\
+\2/
+h
+s/\([\\"]\)/\\\1/g
+s/$/\\n/
+s/\([^\n]*\).*/  fputs ("\1", f);/p
+g
+D'
+            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|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
+	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%"
+	  test "X$link_all_deplibs" != Xno && libs="$libs $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|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
+	  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"
+	    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
+	  elif test "$linkmode" != prog && test "$linkmode" != lib; then
+	    func_fatal_error "\`$lib' is not a convenience library"
+	  fi
+	  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$absdir"
+		# 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
+	  # correct linux to gnu/linux during the next big refactor
+	  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
+	    ;;
+	  *)
+	    func_fatal_configuration "$modename: unknown library version type \`$version_type'"
+	    ;;
+	  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) # correct to gnu/linux during the next big refactor
+	  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
+	# Remove ${wl} instances when linking with ld.
+	# FIXME: should test the right _cmds variable.
+	case $archive_cmds in
+	  *\$LD\ *) wl= ;;
+        esac
+	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_append 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 "dep_rpath=\"$hardcode_libdir_flag_spec\""
+	  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
+	func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
+	tool_oldlib=$func_to_tool_file_result
+	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"
+		func_resolve_sysroot "$deplib"
+		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
+		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/gbtools/config/missing b/gbtools/config/missing
new file mode 100755
index 0000000..db98974
--- /dev/null
+++ b/gbtools/config/missing
@@ -0,0 +1,215 @@
+#! /bin/sh
+# Common wrapper for a few potentially missing GNU programs.
+
+scriptversion=2013-10-28.13; # UTC
+
+# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+# Originally written 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, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+if test $# -eq 0; then
+  echo 1>&2 "Try '$0 --help' for more information"
+  exit 1
+fi
+
+case $1 in
+
+  --is-lightweight)
+    # Used by our autoconf macros to check whether the available missing
+    # script is modern enough.
+    exit 0
+    ;;
+
+  --run)
+    # Back-compat with the calling convention used by older automake.
+    shift
+    ;;
+
+  -h|--h|--he|--hel|--help)
+    echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due
+to PROGRAM being missing or too old.
+
+Options:
+  -h, --help      display this help and exit
+  -v, --version   output version information and exit
+
+Supported PROGRAM values:
+  aclocal   autoconf  autoheader   autom4te  automake  makeinfo
+  bison     yacc      flex         lex       help2man
+
+Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
+'g' are ignored when checking the name.
+
+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
+
+# Run the given program, remember its exit status.
+"$@"; st=$?
+
+# If it succeeded, we are done.
+test $st -eq 0 && exit 0
+
+# Also exit now if we it failed (or wasn't found), and '--version' was
+# passed; such an option is passed most likely to detect whether the
+# program is present and works.
+case $2 in --version|--help) exit $st;; esac
+
+# Exit code 63 means version mismatch.  This often happens when the user
+# tries to use an ancient version of a tool on a file that requires a
+# minimum version.
+if test $st -eq 63; then
+  msg="probably too old"
+elif test $st -eq 127; then
+  # Program was missing.
+  msg="missing on your system"
+else
+  # Program was found and executed, but failed.  Give up.
+  exit $st
+fi
+
+perl_URL=http://www.perl.org/
+flex_URL=http://flex.sourceforge.net/
+gnu_software_URL=http://www.gnu.org/software
+
+program_details ()
+{
+  case $1 in
+    aclocal|automake)
+      echo "The '$1' program is part of the GNU Automake package:"
+      echo "<$gnu_software_URL/automake>"
+      echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:"
+      echo "<$gnu_software_URL/autoconf>"
+      echo "<$gnu_software_URL/m4/>"
+      echo "<$perl_URL>"
+      ;;
+    autoconf|autom4te|autoheader)
+      echo "The '$1' program is part of the GNU Autoconf package:"
+      echo "<$gnu_software_URL/autoconf/>"
+      echo "It also requires GNU m4 and Perl in order to run:"
+      echo "<$gnu_software_URL/m4/>"
+      echo "<$perl_URL>"
+      ;;
+  esac
+}
+
+give_advice ()
+{
+  # Normalize program name to check for.
+  normalized_program=`echo "$1" | sed '
+    s/^gnu-//; t
+    s/^gnu//; t
+    s/^g//; t'`
+
+  printf '%s\n' "'$1' is $msg."
+
+  configure_deps="'configure.ac' or m4 files included by 'configure.ac'"
+  case $normalized_program in
+    autoconf*)
+      echo "You should only need it if you modified 'configure.ac',"
+      echo "or m4 files included by it."
+      program_details 'autoconf'
+      ;;
+    autoheader*)
+      echo "You should only need it if you modified 'acconfig.h' or"
+      echo "$configure_deps."
+      program_details 'autoheader'
+      ;;
+    automake*)
+      echo "You should only need it if you modified 'Makefile.am' or"
+      echo "$configure_deps."
+      program_details 'automake'
+      ;;
+    aclocal*)
+      echo "You should only need it if you modified 'acinclude.m4' or"
+      echo "$configure_deps."
+      program_details 'aclocal'
+      ;;
+   autom4te*)
+      echo "You might have modified some maintainer files that require"
+      echo "the 'autom4te' program to be rebuilt."
+      program_details 'autom4te'
+      ;;
+    bison*|yacc*)
+      echo "You should only need it if you modified a '.y' file."
+      echo "You may want to install the GNU Bison package:"
+      echo "<$gnu_software_URL/bison/>"
+      ;;
+    lex*|flex*)
+      echo "You should only need it if you modified a '.l' file."
+      echo "You may want to install the Fast Lexical Analyzer package:"
+      echo "<$flex_URL>"
+      ;;
+    help2man*)
+      echo "You should only need it if you modified a dependency" \
+           "of a man page."
+      echo "You may want to install the GNU Help2man package:"
+      echo "<$gnu_software_URL/help2man/>"
+    ;;
+    makeinfo*)
+      echo "You should only need it if you modified a '.texi' file, or"
+      echo "any other file indirectly affecting the aspect of the manual."
+      echo "You might want to install the Texinfo package:"
+      echo "<$gnu_software_URL/texinfo/>"
+      echo "The spurious makeinfo call might also be the consequence of"
+      echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might"
+      echo "want to install GNU make:"
+      echo "<$gnu_software_URL/make/>"
+      ;;
+    *)
+      echo "You might have modified some files without having the proper"
+      echo "tools for further handling them.  Check the 'README' file, it"
+      echo "often tells you about the needed prerequisites for installing"
+      echo "this package.  You may also peek at any GNU archive site, in"
+      echo "case some other package contains this missing '$1' program."
+      ;;
+  esac
+}
+
+give_advice "$1" | sed -e '1s/^/WARNING: /' \
+                       -e '2,$s/^/         /' >&2
+
+# Propagate the correct exit status (expected to be 127 for a program
+# not found, 63 for a program that failed due to version mismatch).
+exit $st
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/gbtools/configure b/gbtools/configure
new file mode 100755
index 0000000..1a920e5
--- /dev/null
+++ b/gbtools/configure
@@ -0,0 +1,19350 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.69 for gbtools 0.6.4.
+#
+# Report bugs to <annosoft at sanger.ac.uk>.
+#
+#
+# Copyright (C) 1992-1996, 1998-2012 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
+
+# Use a proper internal environment variable to ensure we don't fall
+  # into an infinite loop, continuously re-executing ourselves.
+  if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
+    _as_can_reexec=no; export _as_can_reexec;
+    # 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
+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+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+as_fn_exit 255
+  fi
+  # We don't want this to propagate to other subprocesses.
+          { _as_can_reexec=; unset _as_can_reexec;}
+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
+test -x / || 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 :
+  export CONFIG_SHELL
+             # 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
+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+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
+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
+$0: annosoft at sanger.ac.uk about your system, including any
+$0: error possibly output before this message. Then install
+$0: a modern shell, or manually run the script under such a
+$0: shell if you do 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_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+  test -f "$1" && test -x "$1"
+} # as_fn_executable_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; }
+
+  # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
+  # already done that, so ensure we don't try to do so again and fall
+  # in an infinite loop.  This has already happened in practice.
+  _as_can_reexec=no; export _as_can_reexec
+  # 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 -pR'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -pR'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
+    as_ln_s='cp -pR'
+  fi
+else
+  as_ln_s='cp -pR'
+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
+
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# 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='gbtools'
+PACKAGE_TARNAME='gbtools'
+PACKAGE_VERSION='0.6.4'
+PACKAGE_STRING='gbtools 0.6.4'
+PACKAGE_BUGREPORT='annosoft at sanger.ac.uk'
+PACKAGE_URL=''
+
+ac_unique_file="src/gbtoolsGUI/gbtoolsGUI.cpp"
+# 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_subst_vars='am__EXEEXT_FALSE
+am__EXEEXT_TRUE
+LTLIBOBJS
+WINDOWS_FALSE
+WINDOWS_TRUE
+CYGWIN_FALSE
+CYGWIN_TRUE
+DARWIN_FALSE
+DARWIN_TRUE
+LINUX_FALSE
+LINUX_TRUE
+USE_BLATSRC
+USE_BLATSRC_FALSE
+USE_BLATSRC_TRUE
+USE_LIBCURL_FALSE
+USE_LIBCURL_TRUE
+GLIB_GENMARSHAL
+USE_SSL_FALSE
+USE_SSL_TRUE
+DEPS_LIBS
+DEPS_CFLAGS
+PKG_CONFIG_LIBDIR
+PKG_CONFIG_PATH
+PKG_CONFIG
+LIBOBJS
+LIBTOOL_DEPS
+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
+LN_S
+NM
+ac_ct_DUMPBIN
+DUMPBIN
+LD
+FGREP
+EGREP
+GREP
+SED
+am__fastdepCC_FALSE
+am__fastdepCC_TRUE
+CCDEPMODE
+am__nodep
+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
+AM_BACKSLASH
+AM_DEFAULT_VERBOSITY
+AM_DEFAULT_V
+AM_V
+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_silent_rules
+enable_shared
+enable_static
+with_pic
+enable_fast_install
+enable_dependency_tracking
+with_gnu_ld
+with_sysroot
+enable_libtool_lock
+'
+      ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CPP
+CXX
+CXXFLAGS
+CCC
+CXXCPP
+PKG_CONFIG
+PKG_CONFIG_PATH
+PKG_CONFIG_LIBDIR
+DEPS_CFLAGS
+DEPS_LIBS
+GLIB_GENMARSHAL'
+
+
+# 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
+  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 gbtools 0.6.4 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/gbtools]
+  --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 gbtools 0.6.4:";;
+   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-silent-rules   less verbose build output (undo: "make V=1")
+  --disable-silent-rules  verbose build output (undo: "make V=0")
+  --enable-shared[=PKGS]  build shared libraries [default=no]
+  --enable-static[=PKGS]  build static libraries [default=yes]
+  --enable-fast-install[=PKGS]
+                          optimize for fast installation [default=yes]
+  --enable-dependency-tracking
+                          do not reject slow dependency extractors
+  --disable-dependency-tracking
+                          speeds up one-time build
+  --disable-libtool-lock  avoid locking (might break parallel builds)
+
+Optional Packages:
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --with-pic[=PKGS]       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).
+
+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
+  PKG_CONFIG  path to pkg-config utility
+  PKG_CONFIG_PATH
+              directories to add to pkg-config's search path
+  PKG_CONFIG_LIBDIR
+              path overriding pkg-config's built-in search path
+  DEPS_CFLAGS C compiler flags for DEPS, overriding pkg-config
+  DEPS_LIBS   linker flags for DEPS, overriding pkg-config
+  GLIB_GENMARSHAL
+              The glib-genmarshal executable.
+
+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 <annosoft at sanger.ac.uk>.
+_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
+gbtools configure 0.6.4
+generated by GNU Autoconf 2.69
+
+Copyright (C) 2012 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 ||
+	 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 ||
+	 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 annosoft at sanger.ac.uk ##
+## ------------------------------------ ##"
+     ) | 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 gbtools $as_me 0.6.4, which was
+generated by GNU Autoconf 2.69.  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
+
+# 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_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.
+
+
+
+am__api_version='1.14'
+
+# 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 as_fn_executable_p "$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; }
+# 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 (
+   am_has_slept=no
+   for am_try in 1 2; do
+     echo "timestamp, slept: $am_has_slept" > conftest.file
+     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
+     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
+     if test "$2" = conftest.file || test $am_try -eq 2; then
+       break
+     fi
+     # Just in case.
+     sleep 1
+     am_has_slept=yes
+   done
+   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; }
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+  ( sleep 1 ) &
+  am_sleep_pid=$!
+fi
+
+rm -f conftest.file
+
+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 --is-lightweight"; then
+  am_missing_run="$MISSING "
+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 as_fn_executable_p "$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 as_fn_executable_p "$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
+	   as_fn_executable_p "$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; }
+
+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 as_fn_executable_p "$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
+
+# Check whether --enable-silent-rules was given.
+if test "${enable_silent_rules+set}" = set; then :
+  enableval=$enable_silent_rules;
+fi
+
+case $enable_silent_rules in # (((
+  yes) AM_DEFAULT_VERBOSITY=0;;
+   no) AM_DEFAULT_VERBOSITY=1;;
+    *) AM_DEFAULT_VERBOSITY=1;;
+esac
+am_make=${MAKE-make}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
+$as_echo_n "checking whether $am_make supports nested variables... " >&6; }
+if ${am_cv_make_support_nested_variables+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if $as_echo 'TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+	@$(TRUE)
+.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then
+  am_cv_make_support_nested_variables=yes
+else
+  am_cv_make_support_nested_variables=no
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
+$as_echo "$am_cv_make_support_nested_variables" >&6; }
+if test $am_cv_make_support_nested_variables = yes; then
+    AM_V='$(V)'
+  AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+  AM_V=$AM_DEFAULT_VERBOSITY
+  AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AM_BACKSLASH='\'
+
+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='gbtools'
+ VERSION='0.6.4'
+
+
+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"}
+
+# For better backward compatibility.  To be removed once Automake 1.9.x
+# dies out for good.  For more background, see:
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+mkdir_p='$(MKDIR_P)'
+
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+# Always define AMTAR for backward compatibility.  Yes, it's still used
+# in the wild :-(  We should find a proper way to deprecate it ...
+AMTAR='$${TAR-tar}'
+
+
+# We'll loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar  pax cpio none'
+
+am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
+
+
+
+
+
+
+# POSIX will say in a future version that running "rm -f" with no argument
+# is OK; and we want to be able to make that assumption in our Makefile
+# recipes.  So use an aggressive probe to check that the usage we want is
+# actually supported "in the wild" to an acceptable degree.
+# See automake bug#10828.
+# To make any issue more visible, cause the running configure to be aborted
+# by default if the 'rm' program in use doesn't match our expectations; the
+# user can still override this though.
+if rm -f && rm -fr && rm -rf; then : OK; else
+  cat >&2 <<'END'
+Oops!
+
+Your 'rm' program seems unable to run without file operands specified
+on the command line, even when the '-f' option is present.  This is contrary
+to the behaviour of most rm programs out there, and not conforming with
+the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
+
+Please tell bug-automake at gnu.org about your system, including the value
+of your $PATH and any error possibly output before this message.  This
+can help us improve future automake versions.
+
+END
+  if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
+    echo 'Configuration will proceed anyway, since you have set the' >&2
+    echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
+    echo >&2
+  else
+    cat >&2 <<'END'
+Aborting the configuration process, to ensure you take notice of the issue.
+
+You can download and install GNU coreutils to get an 'rm' implementation
+that behaves properly: <http://www.gnu.org/software/coreutils/>.
+
+If you want to complete the configuration process using your problematic
+'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+to "yes", and re-run configure.
+
+END
+    as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5
+  fi
+fi
+ac_config_headers="$ac_config_headers config.h"
+
+
+
+ac_config_files="$ac_config_files Makefile src/Makefile src/include/Makefile src/gbtoolsUtils/Makefile src/gbtoolsGUI/Makefile src/gbtoolsCurl/Makefile src/gbtoolsTrackhub/Makefile src/gbtoolsPfetch/Makefile src/jsoncpp/Makefile src/blatSrc/Makefile"
+
+
+
+
+# Check if this is a Git repository and, if so, include info about the current
+# status in the version info. Otherwise use PACKAGE_VERSION (which will get
+# set from VERSION_NUMBER in version.m4).
+if test -d "$srcdir/../.git"
+then
+cat >>confdefs.h <<_ACEOF
+#define GBTOOLS_VERSION "`git describe --abbrev=1`"
+_ACEOF
+
+else
+$as_echo "#define GBTOOLS_VERSION PACKAGE_VERSION" >>confdefs.h
+
+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.2'
+macro_revision='1.3337'
+
+
+
+
+
+
+
+
+
+
+
+
+
+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='\'
+  am__nodep='_no'
+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 as_fn_executable_p "$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 as_fn_executable_p "$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 as_fn_executable_p "$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 as_fn_executable_p "$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 as_fn_executable_p "$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 as_fn_executable_p "$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>
+struct stat;
+/* 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
+
+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 whether $CC understands -c and -o together" >&5
+$as_echo_n "checking whether $CC understands -c and -o together... " >&6; }
+if ${am_cv_prog_cc_c_o+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+  # Make sure it works both with $CC and with simple cc.
+  # Following AC_PROG_CC_C_O, we do the test twice because some
+  # compilers refuse to overwrite an existing .o file with -o,
+  # though they will create one.
+  am_cv_prog_cc_c_o=yes
+  for am_i in 1 2; do
+    if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5
+   ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } \
+         && test -f conftest2.$ac_objext; then
+      : OK
+    else
+      am_cv_prog_cc_c_o=no
+      break
+    fi
+  done
+  rm -f core conftest*
+  unset am_i
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
+$as_echo "$am_cv_prog_cc_c_o" >&6; }
+if test "$am_cv_prog_cc_c_o" != yes; then
+   # Losing compiler, so override with the script.
+   # FIXME: It is wrong to rewrite CC.
+   # But if we don't then we get into trouble of one sort or another.
+   # A longer-term fix would be to have automake use am__CC in this case,
+   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+   CC="$am_aux_dir/compile $CC"
+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".
+  rm -rf conftest.dir
+  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 10 /bin/sh.
+      echo '/* dummy */' > 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
+      ;;
+    msvc7 | msvc7msys | 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"
+      as_fn_executable_p "$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"
+      as_fn_executable_p "$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"
+      as_fn_executable_p "$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"
+      as_fn_executable_p "$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 as_fn_executable_p "$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 as_fn_executable_p "$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; }
+
+{ $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
+
+# 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
+    ;;
+
+  os2*)
+    # The test takes a long time on OS/2.
+    lt_cv_sys_max_cmd_len=8192
+    ;;
+
+  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" && \
+	test undefined != "$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"`env 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 as_fn_executable_p "$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 as_fn_executable_p "$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
+  ;;
+
+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 glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+netbsd* | netbsdelf*-gnu)
+  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 as_fn_executable_p "$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 as_fn_executable_p "$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 as_fn_executable_p "$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 as_fn_executable_p "$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 as_fn_executable_p "$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 as_fn_executable_p "$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 as_fn_executable_p "$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 as_fn_executable_p "$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 \$tool_oldlib"
+    ;;
+  *)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_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};"\
+"     /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
+"     /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*|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*)
+	    case `/usr/bin/file conftest.o` in
+	      *x86-64*)
+		LD="${LD-ld} -m elf32_x86_64"
+		;;
+	      *)
+		LD="${LD-ld} -m elf_i386"
+		;;
+	    esac
+	    ;;
+	  powerpc64le-*)
+	    LD="${LD-ld} -m elf32lppclinux"
+	    ;;
+	  powerpc64-*)
+	    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"
+	    ;;
+	  powerpcle-*)
+	    LD="${LD-ld} -m elf64lppc"
+	    ;;
+	  powerpc-*)
+	    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
+  ;;
+*-*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*)
+        case $host in
+        i?86-*-solaris*)
+          LD="${LD-ld} -m elf_x86_64"
+          ;;
+        sparc*-*-solaris*)
+          LD="${LD-ld} -m elf64_sparc"
+          ;;
+        esac
+        # GNU ld 2.21 introduced _sol2 emulations.  Use them if available.
+        if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
+          LD="${LD-ld}_sol2"
+        fi
+        ;;
+      *)
+	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 as_fn_executable_p "$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 as_fn_executable_p "$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 as_fn_executable_p "$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 as_fn_executable_p "$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 as_fn_executable_p "$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 as_fn_executable_p "$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 as_fn_executable_p "$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 as_fn_executable_p "$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 as_fn_executable_p "$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 as_fn_executable_p "$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 as_fn_executable_p "$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 as_fn_executable_p "$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 there is a non-empty error log, and "single_module"
+	# appears in it, assume the flag caused a linker warning
+        if test -s conftest.err && $GREP single_module conftest.err; then
+	  cat conftest.err >&5
+	# Otherwise, if the output was created with a 0 exit code from
+	# the compiler, it worked.
+	elif test -f libconftest.dylib && test $_lt_result -eq 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 -s conftest.err && $GREP force_load conftest.err; then
+	cat conftest.err >&5
+      elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; 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
+# 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=no
+fi
+
+
+
+
+
+
+
+
+
+
+        enable_dlopen=no
+
+
+  enable_win32_dll=no
+
+
+
+  # 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; lt_p=${PACKAGE-default}
+    case $withval in
+    yes|no) pic_mode=$withval ;;
+    *)
+      pic_mode=default
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for lt_pkg in $withval; do
+	IFS="$lt_save_ifs"
+	if test "X$lt_pkg" = "X$lt_p"; then
+	  pic_mode=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+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 '
+      if test -n "$lt_prog_compiler_pic"; then
+        lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic"
+      fi
+      ;;
+    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 | 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\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*)
+	  # 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\ F* | *Sun*Fortran*)
+	  lt_prog_compiler_pic='-KPIC'
+	  lt_prog_compiler_static='-Bstatic'
+	  lt_prog_compiler_wl='-Qoption ld '
+	  ;;
+	*Sun\ C*)
+	  # Sun C 5.9
+	  lt_prog_compiler_pic='-KPIC'
+	  lt_prog_compiler_static='-Bstatic'
+	  lt_prog_compiler_wl='-Wl,'
+	  ;;
+        *Intel*\ [CF]*Compiler*)
+	  lt_prog_compiler_wl='-Wl,'
+	  lt_prog_compiler_pic='-fPIC'
+	  lt_prog_compiler_static='-static'
+	  ;;
+	*Portland\ Group*)
+	  lt_prog_compiler_wl='-Wl,'
+	  lt_prog_compiler_pic='-fpic'
+	  lt_prog_compiler_static='-Bstatic'
+	  ;;
+	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_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
+    ;;
+  linux* | k*bsd*-gnu | gnu*)
+    link_all_deplibs=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='${wl}-rpath ${wl}$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* | netbsdelf*-gnu)
+      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
+	link_all_deplibs=no
+      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
+	exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+	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
+      ;;
+
+    # 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_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* | netbsdelf*-gnu)
+      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 # correct to gnu/linux during the next big refactor
+  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 # correct to gnu/linux during the next big refactor
+  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 # correct to gnu/linux during the next big refactor
+  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 # correct to gnu/linux during the next big refactor
+  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
+  ;;
+
+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[23].*) 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
+  ;;
+
+haiku*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  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 # correct to gnu/linux during the next big refactor
+  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 # correct to gnu/linux during the next big refactor
+	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 glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  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'
+  ;;
+
+netbsdelf*-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
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='NetBSD ld.elf_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 # correct to gnu/linux during the next big refactor
+  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 # correct to gnu/linux during the next big refactor
+  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 # correct to gnu/linux during the next big refactor
+  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 # correct to gnu/linux during the next big refactor
+    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 # correct to gnu/linux during the next big refactor
+  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 # correct to gnu/linux during the next big refactor
+  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:
+
+
+
+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 as_fn_executable_p "$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 as_fn_executable_p "$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".
+  rm -rf conftest.dir
+  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 10 /bin/sh.
+      echo '/* dummy */' > 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
+      ;;
+    msvc7 | msvc7msys | 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_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
+        ;;
+
+      freebsd2.*)
+        # 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
+        ;;
+
+      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 | 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" ;;
+*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;;
+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 | 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* | netbsdelf*-gnu)
+	;;
+      *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*)
+      exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+      ;;
+    *)
+      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
+    ;;
+  linux* | k*bsd*-gnu | gnu*)
+    link_all_deplibs_CXX=no
+    ;;
+  *)
+    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 # correct to gnu/linux during the next big refactor
+  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 # correct to gnu/linux during the next big refactor
+  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 # correct to gnu/linux during the next big refactor
+  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 # correct to gnu/linux during the next big refactor
+  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
+  ;;
+
+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[23].*) 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
+  ;;
+
+haiku*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  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 # correct to gnu/linux during the next big refactor
+  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 # correct to gnu/linux during the next big refactor
+	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 glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  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'
+  ;;
+
+netbsdelf*-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
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='NetBSD ld.elf_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 # correct to gnu/linux during the next big refactor
+  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 # correct to gnu/linux during the next big refactor
+  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 # correct to gnu/linux during the next big refactor
+  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 # correct to gnu/linux during the next big refactor
+    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 # correct to gnu/linux during the next big refactor
+  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 # correct to gnu/linux during the next big refactor
+  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
+
+
+
+# keep libtool up to date automatically.
+
+
+# Checks for programs.
+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
+
+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 as_fn_executable_p "$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 as_fn_executable_p "$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".
+  rm -rf conftest.dir
+  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 10 /bin/sh.
+      echo '/* dummy */' > 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
+      ;;
+    msvc7 | msvc7msys | 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
+
+
+
+{ $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
+
+{ $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
+
+
+
+# Checks for libraries.
+
+# Checks for header files.
+for ac_header in arpa/inet.h netdb.h netinet/in.h stdlib.h string.h sys/socket.h unistd.h gtk.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.
+ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default"
+if test "x$ac_cv_type_pid_t" = xyes; then :
+
+else
+
+cat >>confdefs.h <<_ACEOF
+#define pid_t int
+_ACEOF
+
+fi
+
+ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
+if test "x$ac_cv_type_size_t" = xyes; then :
+
+else
+
+cat >>confdefs.h <<_ACEOF
+#define size_t unsigned int
+_ACEOF
+
+fi
+
+
+# Checks for library functions.
+for ac_header in vfork.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "vfork.h" "ac_cv_header_vfork_h" "$ac_includes_default"
+if test "x$ac_cv_header_vfork_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_VFORK_H 1
+_ACEOF
+
+fi
+
+done
+
+for ac_func in fork vfork
+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
+
+if test "x$ac_cv_func_fork" = xyes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fork" >&5
+$as_echo_n "checking for working fork... " >&6; }
+if ${ac_cv_func_fork_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  ac_cv_func_fork_works=cross
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+
+	  /* By Ruediger Kuhlmann. */
+	  return fork () < 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_func_fork_works=yes
+else
+  ac_cv_func_fork_works=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_fork_works" >&5
+$as_echo "$ac_cv_func_fork_works" >&6; }
+
+else
+  ac_cv_func_fork_works=$ac_cv_func_fork
+fi
+if test "x$ac_cv_func_fork_works" = xcross; then
+  case $host in
+    *-*-amigaos* | *-*-msdosdjgpp*)
+      # Override, as these systems have only a dummy fork() stub
+      ac_cv_func_fork_works=no
+      ;;
+    *)
+      ac_cv_func_fork_works=yes
+      ;;
+  esac
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5
+$as_echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;}
+fi
+ac_cv_func_vfork_works=$ac_cv_func_vfork
+if test "x$ac_cv_func_vfork" = xyes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working vfork" >&5
+$as_echo_n "checking for working vfork... " >&6; }
+if ${ac_cv_func_vfork_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  ac_cv_func_vfork_works=cross
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+/* Thanks to Paul Eggert for this test.  */
+$ac_includes_default
+#include <sys/wait.h>
+#ifdef HAVE_VFORK_H
+# include <vfork.h>
+#endif
+/* On some sparc systems, changes by the child to local and incoming
+   argument registers are propagated back to the parent.  The compiler
+   is told about this with #include <vfork.h>, but some compilers
+   (e.g. gcc -O) don't grok <vfork.h>.  Test for this by using a
+   static variable whose address is put into a register that is
+   clobbered by the vfork.  */
+static void
+#ifdef __cplusplus
+sparc_address_test (int arg)
+# else
+sparc_address_test (arg) int arg;
+#endif
+{
+  static pid_t child;
+  if (!child) {
+    child = vfork ();
+    if (child < 0) {
+      perror ("vfork");
+      _exit(2);
+    }
+    if (!child) {
+      arg = getpid();
+      write(-1, "", 0);
+      _exit (arg);
+    }
+  }
+}
+
+int
+main ()
+{
+  pid_t parent = getpid ();
+  pid_t child;
+
+  sparc_address_test (0);
+
+  child = vfork ();
+
+  if (child == 0) {
+    /* Here is another test for sparc vfork register problems.  This
+       test uses lots of local variables, at least as many local
+       variables as main has allocated so far including compiler
+       temporaries.  4 locals are enough for gcc 1.40.3 on a Solaris
+       4.1.3 sparc, but we use 8 to be safe.  A buggy compiler should
+       reuse the register of parent for one of the local variables,
+       since it will think that parent can't possibly be used any more
+       in this routine.  Assigning to the local variable will thus
+       munge parent in the parent process.  */
+    pid_t
+      p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(),
+      p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid();
+    /* Convince the compiler that p..p7 are live; otherwise, it might
+       use the same hardware register for all 8 local variables.  */
+    if (p != p1 || p != p2 || p != p3 || p != p4
+	|| p != p5 || p != p6 || p != p7)
+      _exit(1);
+
+    /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent
+       from child file descriptors.  If the child closes a descriptor
+       before it execs or exits, this munges the parent's descriptor
+       as well.  Test for this by closing stdout in the child.  */
+    _exit(close(fileno(stdout)) != 0);
+  } else {
+    int status;
+    struct stat st;
+
+    while (wait(&status) != child)
+      ;
+    return (
+	 /* Was there some problem with vforking?  */
+	 child < 0
+
+	 /* Did the child fail?  (This shouldn't happen.)  */
+	 || status
+
+	 /* Did the vfork/compiler bug occur?  */
+	 || parent != getpid()
+
+	 /* Did the file descriptor bug occur?  */
+	 || fstat(fileno(stdout), &st) != 0
+	 );
+  }
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_func_vfork_works=yes
+else
+  ac_cv_func_vfork_works=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_vfork_works" >&5
+$as_echo "$ac_cv_func_vfork_works" >&6; }
+
+fi;
+if test "x$ac_cv_func_fork_works" = xcross; then
+  ac_cv_func_vfork_works=$ac_cv_func_vfork
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5
+$as_echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;}
+fi
+
+if test "x$ac_cv_func_vfork_works" = xyes; then
+
+$as_echo "#define HAVE_WORKING_VFORK 1" >>confdefs.h
+
+else
+
+$as_echo "#define vfork fork" >>confdefs.h
+
+fi
+if test "x$ac_cv_func_fork_works" = xyes; then
+
+$as_echo "#define HAVE_WORKING_FORK 1" >>confdefs.h
+
+fi
+
+for ac_header in stdlib.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default"
+if test "x$ac_cv_header_stdlib_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_STDLIB_H 1
+_ACEOF
+
+fi
+
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5
+$as_echo_n "checking for GNU libc compatible malloc... " >&6; }
+if ${ac_cv_func_malloc_0_nonnull+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  ac_cv_func_malloc_0_nonnull=no
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#if defined STDC_HEADERS || defined HAVE_STDLIB_H
+# include <stdlib.h>
+#else
+char *malloc ();
+#endif
+
+int
+main ()
+{
+return ! malloc (0);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_func_malloc_0_nonnull=yes
+else
+  ac_cv_func_malloc_0_nonnull=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_malloc_0_nonnull" >&5
+$as_echo "$ac_cv_func_malloc_0_nonnull" >&6; }
+if test $ac_cv_func_malloc_0_nonnull = yes; then :
+
+$as_echo "#define HAVE_MALLOC 1" >>confdefs.h
+
+else
+  $as_echo "#define HAVE_MALLOC 0" >>confdefs.h
+
+   case " $LIBOBJS " in
+  *" malloc.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS malloc.$ac_objext"
+ ;;
+esac
+
+
+$as_echo "#define malloc rpl_malloc" >>confdefs.h
+
+fi
+
+
+for ac_func in dup2 floor gethostbyname memset socket sqrt strcasecmp strchr strcspn strerror strncasecmp strrchr strstr strtol uname
+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
+
+
+# Check for dependencies required by all executables
+
+
+
+
+
+
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+	if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
+set dummy ${ac_tool_prefix}pkg-config; 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_PKG_CONFIG+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_PKG_CONFIG="$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
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+if test -n "$PKG_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
+$as_echo "$PKG_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_path_PKG_CONFIG"; then
+  ac_pt_PKG_CONFIG=$PKG_CONFIG
+  # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; 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_ac_pt_PKG_CONFIG+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $ac_pt_PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_ac_pt_PKG_CONFIG="$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
+ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
+if test -n "$ac_pt_PKG_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
+$as_echo "$ac_pt_PKG_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_pt_PKG_CONFIG" = x; then
+    PKG_CONFIG=""
+  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
+    PKG_CONFIG=$ac_pt_PKG_CONFIG
+  fi
+else
+  PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
+fi
+
+fi
+if test -n "$PKG_CONFIG"; then
+	_pkg_min_version=0.9.0
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5
+$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
+	if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; 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" >&5
+$as_echo "no" >&6; }
+		PKG_CONFIG=""
+	fi
+fi
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for DEPS" >&5
+$as_echo_n "checking for DEPS... " >&6; }
+
+if test -n "$DEPS_CFLAGS"; then
+    pkg_cv_DEPS_CFLAGS="$DEPS_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 gtk+-2.0 >= 2.10\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "glib-2.0 gtk+-2.0 >= 2.10") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_DEPS_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0 gtk+-2.0 >= 2.10" 2>/dev/null`
+		      test "x$?" != "x0" && pkg_failed=yes
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$DEPS_LIBS"; then
+    pkg_cv_DEPS_LIBS="$DEPS_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 gtk+-2.0 >= 2.10\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "glib-2.0 gtk+-2.0 >= 2.10") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_DEPS_LIBS=`$PKG_CONFIG --libs "glib-2.0 gtk+-2.0 >= 2.10" 2>/dev/null`
+		      test "x$?" != "x0" && pkg_failed=yes
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+   	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        DEPS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "glib-2.0 gtk+-2.0 >= 2.10" 2>&1`
+        else
+	        DEPS_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "glib-2.0 gtk+-2.0 >= 2.10" 2>&1`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$DEPS_PKG_ERRORS" >&5
+
+	as_fn_error $? "Package requirements (glib-2.0 gtk+-2.0 >= 2.10) were not met:
+
+$DEPS_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables DEPS_CFLAGS
+and DEPS_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details." "$LINENO" 5
+elif test $pkg_failed = untried; then
+     	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables DEPS_CFLAGS
+and DEPS_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details" "$LINENO" 5; }
+else
+	DEPS_CFLAGS=$pkg_cv_DEPS_CFLAGS
+	DEPS_LIBS=$pkg_cv_DEPS_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+fi
+
+# Check for optional dependencies
+AX_CHECK_OPENSSL()
+
+for ac_header in openssl.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "openssl.h" "ac_cv_header_openssl_h" "$ac_includes_default"
+if test "x$ac_cv_header_openssl_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_OPENSSL_H 1
+_ACEOF
+ HAVE_OPENSSL_HEADER=1
+fi
+
+done
+
+ if  test -n "$HAVE_OPENSSL_HEADER" || test -n "$OPENSSL_INCLUDES" ; then
+  USE_SSL_TRUE=
+  USE_SSL_FALSE='#'
+else
+  USE_SSL_TRUE='#'
+  USE_SSL_FALSE=
+fi
+
+
+if test -z "$USE_SSL_TRUE"; then :
+   echo 'openssl is available!'
+fi
+if test -z "$USE_SSL_TRUE"; then :
+
+$as_echo "#define USE_SSL 1" >>confdefs.h
+
+fi
+
+
+
+# Extract the first word of "glib-genmarshal", so it can be a program name with args.
+set dummy glib-genmarshal; 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_GLIB_GENMARSHAL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$GLIB_GENMARSHAL"; then
+  ac_cv_prog_GLIB_GENMARSHAL="$GLIB_GENMARSHAL" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_GLIB_GENMARSHAL="glib-genmarshal"
+    $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
+GLIB_GENMARSHAL=$ac_cv_prog_GLIB_GENMARSHAL
+if test -n "$GLIB_GENMARSHAL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GLIB_GENMARSHAL" >&5
+$as_echo "$GLIB_GENMARSHAL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+
+# Check for the curl library. This is optional, so don't fail
+# if we can't find it, but set the USE_LIBCURL to false. Note: I think we should
+# probably be using pkg-config to find the curl dependencies, but that doesn't work
+# on my mac (perhaps because it's in /usr instead of /opt/local), so I just check for
+# the header and set the dependencies manually in Makefile.am.
+#PKG_CHECK_MODULES([LIBCURL_DEPS], [curl], [HAVE_LIBCURL=1], [HAVE_LIBCURL=0])
+for ac_header in curl/curl.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "curl/curl.h" "ac_cv_header_curl_curl_h" "$ac_includes_default"
+if test "x$ac_cv_header_curl_curl_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_CURL_CURL_H 1
+_ACEOF
+ HAVE_LIBCURL=1
+else
+  HAVE_LIBCURL=0
+fi
+
+done
+
+ if test "$HAVE_LIBCURL" -eq 1; then
+  USE_LIBCURL_TRUE=
+  USE_LIBCURL_FALSE='#'
+else
+  USE_LIBCURL_TRUE='#'
+  USE_LIBCURL_FALSE=
+fi
+
+
+
+# Check for the blatSrc library deps. Again, optional.
+for ac_header in stdio.h stdlib.h stdarg.h ctype.h sys/types.h sys/stat.h strings.h fcntl.h assert.h setjmp.h time.h math.h errno.h unistd.h libgen.h sys/wait.h mingw/math.h sys/socket.h netinet/in.h arpa/inet.h netdb.h pthread.h regex.h signal.h execinfo.h limits.h sys/mman.h syslog.h sys/time.h dirent.h sys/utsname.h sys/statvfs.h pwd.h termios.h utime.h io.h direct.h ieeefp.h sys/file.h zlib.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
+ HAVE_BLATSRC_DEPS=1
+else
+  HAVE_BLATSRC_DEPS=0
+fi
+
+done
+
+ if test "$HAVE_BLATSRC_DEPS" -eq 1; then
+  USE_BLATSRC_TRUE=
+  USE_BLATSRC_FALSE='#'
+else
+  USE_BLATSRC_TRUE='#'
+  USE_BLATSRC_FALSE=
+fi
+
+if test -z "$USE_BLATSRC_TRUE"; then :
+   echo 'blatSrc is available!'
+fi
+if test -z "$USE_BLATSRC_TRUE"; then :
+
+$as_echo "#define USE_BLATSRC 1" >>confdefs.h
+
+fi
+if test -z "$USE_BLATSRC_TRUE"; then :
+  USE_BLATSRC=use_blatsrc
+
+fi
+
+
+
+# Check for execinfo.h. This is used to provide backtraces but is not available
+# on all systems.
+for ac_header in execinfo.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "execinfo.h" "ac_cv_header_execinfo_h" "$ac_includes_default"
+if test "x$ac_cv_header_execinfo_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_EXECINFO_H 1
+_ACEOF
+
+fi
+
+done
+
+
+
+# what are we building on?
+
+case $build in
+     *-*-linux*)
+     os_type="Linux";;
+     *-*-darwin*)
+     os_type="darwin" ;;
+     *-*-cygwin*)
+     os_type="cygwin" ;;
+     *-*-mingw*)
+     os_type="windows" ;;
+     *-*-msys*)
+     os_type="windows" ;;
+     *)
+     os_type="Unknown";;
+esac
+
+ if  test "$os_type" = "Linux" ; then
+  LINUX_TRUE=
+  LINUX_FALSE='#'
+else
+  LINUX_TRUE='#'
+  LINUX_FALSE=
+fi
+
+ if  test "$os_type" = "darwin" ; then
+  DARWIN_TRUE=
+  DARWIN_FALSE='#'
+else
+  DARWIN_TRUE='#'
+  DARWIN_FALSE=
+fi
+
+ if  test "$os_type" = "cygwin" ; then
+  CYGWIN_TRUE=
+  CYGWIN_FALSE='#'
+else
+  CYGWIN_TRUE='#'
+  CYGWIN_FALSE=
+fi
+
+ if  test "$os_type" = "windows" ; then
+  WINDOWS_TRUE=
+  WINDOWS_FALSE='#'
+else
+  WINDOWS_TRUE='#'
+  WINDOWS_FALSE=
+fi
+
+
+# replaces -DLINUX
+if test "$os_type" = "Linux" ; then
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: Got OS type of LINUX" >&5
+$as_echo "Got OS type of LINUX" >&6; }
+
+$as_echo "#define LINUX /**/" >>confdefs.h
+
+
+elif test "$os_type" = "darwin" ; then
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: Got OS type of Darwin" >&5
+$as_echo "Got OS type of Darwin" >&6; }
+
+$as_echo "#define DARWIN /**/" >>confdefs.h
+
+
+elif test "$os_type" = "cygwin" ; then
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: Got OS type of Cygwin" >&5
+$as_echo "Got OS type of Cygwin" >&6; }
+
+$as_echo "#define CYGWIN /**/" >>confdefs.h
+
+
+elif test "$os_type" = "windows" ; then
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: Got OS type of Windows" >&5
+$as_echo "Got OS type of Windows" >&6; }
+
+$as_echo "#define WINDOWS /**/" >>confdefs.h
+
+
+fi
+
+
+
+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
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5
+$as_echo_n "checking that generated files are newer than configure... " >&6; }
+   if test -n "$am_sleep_pid"; then
+     # Hide warnings about reused PIDs.
+     wait $am_sleep_pid 2>/dev/null
+   fi
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5
+$as_echo "done" >&6; }
+ 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
+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
+if test -z "${USE_SSL_TRUE}" && test -z "${USE_SSL_FALSE}"; then
+  as_fn_error $? "conditional \"USE_SSL\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_LIBCURL_TRUE}" && test -z "${USE_LIBCURL_FALSE}"; then
+  as_fn_error $? "conditional \"USE_LIBCURL\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USE_BLATSRC_TRUE}" && test -z "${USE_BLATSRC_FALSE}"; then
+  as_fn_error $? "conditional \"USE_BLATSRC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${LINUX_TRUE}" && test -z "${LINUX_FALSE}"; then
+  as_fn_error $? "conditional \"LINUX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${DARWIN_TRUE}" && test -z "${DARWIN_FALSE}"; then
+  as_fn_error $? "conditional \"DARWIN\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CYGWIN_TRUE}" && test -z "${CYGWIN_FALSE}"; then
+  as_fn_error $? "conditional \"CYGWIN\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${WINDOWS_TRUE}" && test -z "${WINDOWS_FALSE}"; then
+  as_fn_error $? "conditional \"WINDOWS\" 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 -pR'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -pR'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
+    as_ln_s='cp -pR'
+  fi
+else
+  as_ln_s='cp -pR'
+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
+
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+  test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# 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 gbtools $as_me 0.6.4, which was
+generated by GNU Autoconf 2.69.  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 <annosoft at sanger.ac.uk>."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_version="\\
+gbtools config.status 0.6.4
+configured by $0, generated by GNU Autoconf 2.69,
+  with options \\"\$ac_cs_config\\"
+
+Copyright (C) 2012 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"`'
+PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $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_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_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 \
+PATH_SEPARATOR \
+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_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_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" ;;
+    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+    "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
+    "src/include/Makefile") CONFIG_FILES="$CONFIG_FILES src/include/Makefile" ;;
+    "src/gbtoolsUtils/Makefile") CONFIG_FILES="$CONFIG_FILES src/gbtoolsUtils/Makefile" ;;
+    "src/gbtoolsGUI/Makefile") CONFIG_FILES="$CONFIG_FILES src/gbtoolsGUI/Makefile" ;;
+    "src/gbtoolsCurl/Makefile") CONFIG_FILES="$CONFIG_FILES src/gbtoolsCurl/Makefile" ;;
+    "src/gbtoolsTrackhub/Makefile") CONFIG_FILES="$CONFIG_FILES src/gbtoolsTrackhub/Makefile" ;;
+    "src/gbtoolsPfetch/Makefile") CONFIG_FILES="$CONFIG_FILES src/gbtoolsPfetch/Makefile" ;;
+    "src/jsoncpp/Makefile") CONFIG_FILES="$CONFIG_FILES src/jsoncpp/Makefile" ;;
+    "src/blatSrc/Makefile") CONFIG_FILES="$CONFIG_FILES src/blatSrc/Makefile" ;;
+    "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+    "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
+
+  *) 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"" || {
+  # Older Autoconf 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"`
+    # 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'`; 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, 2011 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 PATH separator for the build system.
+PATH_SEPARATOR=$lt_PATH_SEPARATOR
+
+# 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
+
+# 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
+
+# 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
+
+
+
+echo \
+"-------------------------------------------------
+
+ ${PACKAGE_NAME} Version ${PACKAGE_VERSION}
+
+ Prefix: '${prefix}'
+ Compiler: '${CXX} ${CXXFLAGS} ${CPPFLAGS}'
+
+ Now type 'make [<target>]'
+   where the optional [<target>] is:
+     all       - build all libraries (default)
+     install   - build and install everything
+"
+
+if test "$HAVE_LIBCURL" -eq 0; then
+echo " Warning: libcurl not found; track hub and pfetch functionality will not be available"
+fi
+
+if test "$HAVE_BLATSRC_DEPS" -eq 0; then
+echo " Warning: Dependencies not found for Bed/bigBed/bigWig support"
+fi
+
+echo "-------------------------------------------------
+"
+
diff --git a/gbtools/configure.ac b/gbtools/configure.ac
new file mode 100644
index 0000000..72bce07
--- /dev/null
+++ b/gbtools/configure.ac
@@ -0,0 +1,182 @@
+#                                               -*- Autoconf -*-
+# Process this file with autoconf to produce a configure script.
+
+m4_include([./gbtools_version.m4])
+
+AC_PREREQ([2.50])
+AC_INIT([gbtools], VERSION_NUMBER, [annosoft at sanger.ac.uk])
+AC_CONFIG_AUX_DIR([config])
+AC_CONFIG_SRCDIR([src/gbtoolsGUI/gbtoolsGUI.cpp])
+AM_INIT_AUTOMAKE([1.9 foreign])
+AC_CONFIG_HEADERS([config.h])
+
+
+AC_CONFIG_FILES([Makefile
+src/Makefile
+src/include/Makefile
+src/gbtoolsUtils/Makefile
+src/gbtoolsGUI/Makefile
+src/gbtoolsCurl/Makefile
+src/gbtoolsTrackhub/Makefile
+src/gbtoolsPfetch/Makefile
+src/jsoncpp/Makefile
+src/blatSrc/Makefile
+])
+
+
+
+# Check if this is a Git repository and, if so, include info about the current
+# status in the version info. Otherwise use PACKAGE_VERSION (which will get
+# set from VERSION_NUMBER in version.m4).
+if test -d "$srcdir/../.git" 
+then AC_DEFINE_UNQUOTED([GBTOOLS_VERSION], ["`git describe --abbrev=1`"], ["gbtools package version"])
+else AC_DEFINE([GBTOOLS_VERSION], [PACKAGE_VERSION], ["gbtools package version"])
+fi
+
+
+AC_CONFIG_MACRO_DIR([m4])
+
+LT_INIT([disable-shared])
+
+LT_LANG([C++])
+
+# keep libtool up to date automatically.
+AC_SUBST([LIBTOOL_DEPS])
+
+# Checks for programs.
+AC_PROG_CPP
+AC_PROG_CXX
+AC_PROG_INSTALL
+AC_PROG_LN_S
+AC_PROG_MAKE_SET
+
+
+# Checks for libraries.
+
+# Checks for header files.
+AC_CHECK_HEADERS([arpa/inet.h netdb.h netinet/in.h stdlib.h string.h sys/socket.h unistd.h gtk.h])
+
+# Checks for typedefs, structures, and compiler characteristics.
+AC_TYPE_PID_T
+AC_TYPE_SIZE_T
+
+# Checks for library functions.
+AC_FUNC_FORK
+AC_FUNC_MALLOC
+AC_CHECK_FUNCS([dup2 floor gethostbyname memset socket sqrt strcasecmp strchr strcspn strerror strncasecmp strrchr strstr strtol uname])
+
+# Check for dependencies required by all executables
+PKG_CHECK_MODULES([DEPS], [glib-2.0 gtk+-2.0 >= 2.10])
+
+# Check for optional dependencies
+AX_CHECK_OPENSSL()
+
+AC_CHECK_HEADERS([openssl.h], [HAVE_OPENSSL_HEADER=1])
+AM_CONDITIONAL([USE_SSL], [ test -n "$HAVE_OPENSSL_HEADER" || test -n "$OPENSSL_INCLUDES" ])
+
+AM_COND_IF([USE_SSL], [ echo 'openssl is available!' ])
+AM_COND_IF([USE_SSL], [AC_DEFINE([USE_SSL], [1], [Define to 1 if openssl is available])])
+
+
+AC_ARG_VAR(GLIB_GENMARSHAL, [The glib-genmarshal executable.])
+AC_CHECK_PROG(GLIB_GENMARSHAL, glib-genmarshal, glib-genmarshal)
+
+
+# Check for the curl library. This is optional, so don't fail
+# if we can't find it, but set the USE_LIBCURL to false. Note: I think we should 
+# probably be using pkg-config to find the curl dependencies, but that doesn't work
+# on my mac (perhaps because it's in /usr instead of /opt/local), so I just check for
+# the header and set the dependencies manually in Makefile.am.
+#PKG_CHECK_MODULES([LIBCURL_DEPS], [curl], [HAVE_LIBCURL=1], [HAVE_LIBCURL=0])
+AC_CHECK_HEADERS([curl/curl.h], [HAVE_LIBCURL=1], [HAVE_LIBCURL=0])
+AM_CONDITIONAL([USE_LIBCURL], [test "$HAVE_LIBCURL" -eq 1])
+
+
+# Check for the blatSrc library deps. Again, optional.
+AC_CHECK_HEADERS([stdio.h stdlib.h stdarg.h ctype.h sys/types.h sys/stat.h strings.h fcntl.h assert.h setjmp.h time.h math.h errno.h unistd.h libgen.h sys/wait.h mingw/math.h sys/socket.h netinet/in.h arpa/inet.h netdb.h pthread.h regex.h signal.h execinfo.h limits.h sys/mman.h syslog.h sys/time.h dirent.h sys/utsname.h sys/statvfs.h pwd.h termios.h utime.h io.h direct.h ieeefp.h sys/file.h zlib.h], [HAVE_BLATSRC_DEPS=1], [HAVE_BLATSRC_DEPS=0])
+AM_CONDITIONAL([USE_BLATSRC], [test "$HAVE_BLATSRC_DEPS" -eq 1])
+AM_COND_IF([USE_BLATSRC], [ echo 'blatSrc is available!' ])
+AM_COND_IF([USE_BLATSRC], [AC_DEFINE([USE_BLATSRC], [1], [Define to 1 if blatSrc deps are available])])
+AM_COND_IF([USE_BLATSRC], [AC_SUBST([USE_BLATSRC], [use_blatsrc])])
+
+
+
+# Check for execinfo.h. This is used to provide backtraces but is not available
+# on all systems.
+AC_CHECK_HEADERS([execinfo.h])
+
+
+# what are we building on?
+AC_CANONICAL_BUILD
+case $build in
+     *-*-linux*)
+     os_type="Linux";;
+     *-*-darwin*)
+     os_type="darwin" ;;
+     *-*-cygwin*)
+     os_type="cygwin" ;;
+     *-*-mingw*)
+     os_type="windows" ;;
+     *-*-msys*)
+     os_type="windows" ;;
+     *)
+     os_type="Unknown";;
+esac
+
+AM_CONDITIONAL([LINUX], [ test "$os_type" = "Linux" ])
+AM_CONDITIONAL([DARWIN], [ test "$os_type" = "darwin" ])
+AM_CONDITIONAL([CYGWIN], [ test "$os_type" = "cygwin" ])
+AM_CONDITIONAL([WINDOWS], [ test "$os_type" = "windows" ])
+
+# replaces -DLINUX
+if test "$os_type" = "Linux" ; then
+   AC_MSG_RESULT([Got OS type of LINUX])
+   AC_DEFINE(LINUX, [], [Operating System is LINUX.])
+
+elif test "$os_type" = "darwin" ; then
+
+   AC_MSG_RESULT([Got OS type of Darwin])
+   AC_DEFINE(DARWIN, [], [Operating System is DARWIN.])
+
+elif test "$os_type" = "cygwin" ; then
+
+   AC_MSG_RESULT([Got OS type of Cygwin])
+   AC_DEFINE(CYGWIN, [], [Operating System is CYGWIN.])
+
+elif test "$os_type" = "windows" ; then
+
+   AC_MSG_RESULT([Got OS type of Windows])
+   AC_DEFINE(WINDOWS, [], [Operating System is WINDOWS.])
+
+fi
+
+
+
+AC_OUTPUT
+
+
+echo \
+"-------------------------------------------------
+
+ ${PACKAGE_NAME} Version ${PACKAGE_VERSION}
+
+ Prefix: '${prefix}'
+ Compiler: '${CXX} ${CXXFLAGS} ${CPPFLAGS}'
+
+ Now type 'make @<:@<target>@:>@'
+   where the optional @<:@<target>@:>@ is:
+     all       - build all libraries (default)
+     install   - build and install everything
+"
+
+if test "$HAVE_LIBCURL" -eq 0; then
+echo " Warning: libcurl not found; track hub and pfetch functionality will not be available"
+fi
+
+if test "$HAVE_BLATSRC_DEPS" -eq 0; then
+echo " Warning: Dependencies not found for Bed/bigBed/bigWig support"
+fi
+
+echo "-------------------------------------------------
+"
+
diff --git a/gbtools/gbtools_version.m4 b/gbtools/gbtools_version.m4
new file mode 100644
index 0000000..9fc2349
--- /dev/null
+++ b/gbtools/gbtools_version.m4
@@ -0,0 +1,2 @@
+dnl gbtools_version.m4 generated by autogen.sh script. Do not hand edit.
+m4_define([VERSION_NUMBER], [0.6.4])
diff --git a/gbtools/m4/libtool.m4 b/gbtools/m4/libtool.m4
new file mode 100644
index 0000000..d7c043f
--- /dev/null
+++ b/gbtools/m4/libtool.m4
@@ -0,0 +1,7997 @@
+# 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, 2011 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, 2011 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([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl
+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) 2011 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)],
+  [Go],			[_LT_LANG(GO)],
+  [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
+
+
+m4_ifndef([AC_PROG_GO], [
+############################################################
+# NOTE: This macro has been submitted for inclusion into   #
+#  GNU Autoconf as AC_PROG_GO.  When it is available in    #
+#  a released version of Autoconf we should remove this    #
+#  macro and use it instead.                               #
+############################################################
+m4_defun([AC_PROG_GO],
+[AC_LANG_PUSH(Go)dnl
+AC_ARG_VAR([GOC],     [Go compiler command])dnl
+AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl
+_AC_ARG_VAR_LDFLAGS()dnl
+AC_CHECK_TOOL(GOC, gccgo)
+if test -z "$GOC"; then
+  if test -n "$ac_tool_prefix"; then
+    AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo])
+  fi
+fi
+if test -z "$GOC"; then
+  AC_CHECK_PROG(GOC, gccgo, gccgo, false)
+fi
+])#m4_defun
+])#m4_ifndef
+
+
+# _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([AC_PROG_GO],
+  [LT_LANG(GO)],
+  [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])])
+
+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 there is a non-empty error log, and "single_module"
+	# appears in it, assume the flag caused a linker warning
+        if test -s conftest.err && $GREP single_module conftest.err; then
+	  cat conftest.err >&AS_MESSAGE_LOG_FD
+	# Otherwise, if the output was created with a 0 exit code from
+	# the compiler, it worked.
+	elif test -f libconftest.dylib && test $_lt_result -eq 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 -s conftest.err && $GREP force_load conftest.err; then
+	cat conftest.err >&AS_MESSAGE_LOG_FD
+      elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; 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([TAG])
+# ---------------------------------
+# 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\"`'
+    m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes],
+                  [FC],  [_LT_TAGVAR(compiler_needs_object, $1)=yes])
+  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*|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*)
+	    case `/usr/bin/file conftest.o` in
+	      *x86-64*)
+		LD="${LD-ld} -m elf32_x86_64"
+		;;
+	      *)
+		LD="${LD-ld} -m elf_i386"
+		;;
+	    esac
+	    ;;
+	  powerpc64le-*)
+	    LD="${LD-ld} -m elf32lppclinux"
+	    ;;
+	  powerpc64-*)
+	    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"
+	    ;;
+	  powerpcle-*)
+	    LD="${LD-ld} -m elf64lppc"
+	    ;;
+	  powerpc-*)
+	    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
+  ;;
+*-*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*)
+        case $host in
+        i?86-*-solaris*)
+          LD="${LD-ld} -m elf_x86_64"
+          ;;
+        sparc*-*-solaris*)
+          LD="${LD-ld} -m elf64_sparc"
+          ;;
+        esac
+        # GNU ld 2.21 introduced _sol2 emulations.  Use them if available.
+        if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
+          LD="${LD-ld}_sol2"
+        fi
+        ;;
+      *)
+	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 \$tool_oldlib"
+    ;;
+  *)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_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
+    ;;
+
+  os2*)
+    # The test takes a long time on OS/2.
+    lt_cv_sys_max_cmd_len=8192
+    ;;
+
+  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" && \
+	test undefined != "$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"`env 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 # correct to gnu/linux during the next big refactor
+  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 # correct to gnu/linux during the next big refactor
+  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 # correct to gnu/linux during the next big refactor
+  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 # correct to gnu/linux during the next big refactor
+  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
+  ;;
+
+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[[23]].*) 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
+  ;;
+
+haiku*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  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 # correct to gnu/linux during the next big refactor
+  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 # correct to gnu/linux during the next big refactor
+	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 glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  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'
+  ;;
+
+netbsdelf*-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
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='NetBSD ld.elf_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 # correct to gnu/linux during the next big refactor
+  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 # correct to gnu/linux during the next big refactor
+  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 # correct to gnu/linux during the next big refactor
+  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 # correct to gnu/linux during the next big refactor
+    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 # correct to gnu/linux during the next big refactor
+  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 # correct to gnu/linux during the next big refactor
+  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
+  ;;
+
+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 glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+netbsd* | netbsdelf*-gnu)
+  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};"\
+"     /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
+"     /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 | 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* | netbsdelf*-gnu)
+	;;
+      *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 '
+      if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+        _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)"
+      fi
+      ;;
+    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 | 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\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*)
+	  # 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\ F* | *Sun*Fortran*)
+	  _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 '
+	  ;;
+	*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,'
+	  ;;
+        *Intel*\ [[CF]]*Compiler*)
+	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+	  ;;
+	*Portland\ Group*)
+	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	  ;;
+	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(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+      ;;
+    *)
+      _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
+    ;;
+  linux* | k*bsd*-gnu | gnu*)
+    _LT_TAGVAR(link_all_deplibs, $1)=no
+    ;;
+  *)
+    _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_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
+    ;;
+  linux* | k*bsd*-gnu | gnu*)
+    _LT_TAGVAR(link_all_deplibs, $1)=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)='${wl}-rpath ${wl}$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* | netbsdelf*-gnu)
+      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
+	_LT_TAGVAR(link_all_deplibs, $1)=no
+      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(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+	_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
+      ;;
+
+    # 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_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* | netbsdelf*-gnu)
+      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_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_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
+        ;;
+
+      freebsd2.*)
+        # 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
+        ;;
+
+      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 | 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
+], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF
+package foo
+func foo() {
+}
+_LT_EOF
+])
+
+_lt_libdeps_save_CFLAGS=$CFLAGS
+case "$CC $CFLAGS " in #(
+*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;;
+*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;;
+*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;;
+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_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_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_GO_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for the GNU Go compiler
+# are suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_GO_CONFIG],
+[AC_REQUIRE([LT_PROG_GO])dnl
+AC_LANG_SAVE
+
+# Source file extension for Go test sources.
+ac_ext=go
+
+# Object file extension for compiled Go test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="package main; func main() { }"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='package main; func main() { }'
+
+# 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=${GOC-"gccgo"}
+CFLAGS=$GOFLAGS
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_TAGVAR(LD, $1)="$LD"
+_LT_CC_BASENAME([$compiler])
+
+# Go 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_GO_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_GO
+# ----------
+AC_DEFUN([LT_PROG_GO],
+[AC_CHECK_TOOL(GOC, gccgo,)
+])
+
+
+# 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/gbtools/m4/ltoptions.m4 b/gbtools/m4/ltoptions.m4
new file mode 100644
index 0000000..5d9acd8
--- /dev/null
+++ b/gbtools/m4/ltoptions.m4
@@ -0,0 +1,384 @@
+# 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@<:@=PKGS@:>@],
+	[try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
+    [lt_p=${PACKAGE-default}
+    case $withval in
+    yes|no) pic_mode=$withval ;;
+    *)
+      pic_mode=default
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for lt_pkg in $withval; do
+	IFS="$lt_save_ifs"
+	if test "X$lt_pkg" = "X$lt_p"; then
+	  pic_mode=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [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/gbtools/m4/ltsugar.m4 b/gbtools/m4/ltsugar.m4
new file mode 100644
index 0000000..9000a05
--- /dev/null
+++ b/gbtools/m4/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/gbtools/m4/ltversion.m4 b/gbtools/m4/ltversion.m4
new file mode 100644
index 0000000..07a8602
--- /dev/null
+++ b/gbtools/m4/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 3337 ltversion.m4
+# This file is part of GNU Libtool
+
+m4_define([LT_PACKAGE_VERSION], [2.4.2])
+m4_define([LT_PACKAGE_REVISION], [1.3337])
+
+AC_DEFUN([LTVERSION_VERSION],
+[macro_version='2.4.2'
+macro_revision='1.3337'
+_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
+_LT_DECL(, macro_revision, 0)
+])
diff --git a/gbtools/m4/lt~obsolete.m4 b/gbtools/m4/lt~obsolete.m4
new file mode 100644
index 0000000..c573da9
--- /dev/null
+++ b/gbtools/m4/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/gbtools/src/Makefile.am b/gbtools/src/Makefile.am
new file mode 100644
index 0000000..ad76b68
--- /dev/null
+++ b/gbtools/src/Makefile.am
@@ -0,0 +1,18 @@
+
+SUBDIRS = include gbtoolsUtils gbtoolsGUI
+
+SUBDIRS += jsoncpp
+
+if USE_BLATSRC
+SUBDIRS += blatSrc
+endif
+
+if USE_LIBCURL
+SUBDIRS += gbtoolsCurl gbtoolsPfetch
+SUBDIRS += gbtoolsTrackhub
+endif
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/src/Makefile.in
+
diff --git a/gbtools/src/Makefile.am.common b/gbtools/src/Makefile.am.common
new file mode 100644
index 0000000..4f78d00
--- /dev/null
+++ b/gbtools/src/Makefile.am.common
@@ -0,0 +1,15 @@
+# Common includes for all compiles.....
+#
+
+AM_CPPFLAGS = \
+$(DEPS_CFLAGS) \
+-I$(top_srcdir)/src/include \
+-I$(top_srcdir)/src/include/blatSrc
+
+AM_CXXFLAGS = -std=c++11 -g -Wall
+
+# these don't work....or maybe they do...try again...???
+#libgbtools_la_CPPFLAGS =  $(DEPS_CFLAGS)
+#libgbtools_la_CXXFLAGS = -g  -Wall -std=c++0x
+
+
diff --git a/gbtools/src/Makefile.in b/gbtools/src/Makefile.in
new file mode 100644
index 0000000..788df7d
--- /dev/null
+++ b/gbtools/src/Makefile.in
@@ -0,0 +1,625 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 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@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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@
+ at USE_BLATSRC_TRUE@am__append_1 = blatSrc
+ at USE_LIBCURL_TRUE@am__append_2 = gbtoolsCurl gbtoolsPfetch \
+ at USE_LIBCURL_TRUE@	gbtoolsTrackhub
+subdir = src
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/./gbtools_version.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-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 \
+	tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = include gbtoolsUtils gbtoolsGUI jsoncpp blatSrc \
+	gbtoolsCurl gbtoolsPfetch gbtoolsTrackhub
+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@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+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@
+DEPS_CFLAGS = @DEPS_CFLAGS@
+DEPS_LIBS = @DEPS_LIBS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+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@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_BLATSRC = @USE_BLATSRC@
+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 = include gbtoolsUtils gbtoolsGUI jsoncpp $(am__append_1) \
+	$(am__append_2)
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/src/Makefile.in
+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 src/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/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.
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	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"
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	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; \
+	$(am__define_uniq_tagged_files); \
+	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-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	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"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+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 \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    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:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+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."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+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: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+	check-am clean clean-generic clean-libtool cscopelist-am ctags \
+	ctags-am 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-am 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/gbtools/src/blatSrc/Makefile.am b/gbtools/src/blatSrc/Makefile.am
new file mode 100644
index 0000000..52aeeaa
--- /dev/null
+++ b/gbtools/src/blatSrc/Makefile.am
@@ -0,0 +1,277 @@
+
+include $(top_srcdir)/src/Makefile.am.common
+
+SUBDIRS = .
+
+noinst_LTLIBRARIES = libblatSrc.la
+
+libblatSrc_la_SOURCES = \
+lib/aliType.c \
+lib/annoAssembly.c \
+lib/annoFilter.c \
+lib/annoFormatTab.c \
+lib/annoFormatter.c \
+lib/annoGrateWig.c \
+lib/annoGrator.c \
+lib/annoGratorQuery.c \
+lib/annoOption.c \
+lib/annoRow.c \
+lib/annoStreamBigBed.c \
+lib/annoStreamBigWig.c \
+lib/annoStreamTab.c \
+lib/annoStreamVcf.c \
+lib/annoStreamer.c \
+lib/apacheLog.c \
+lib/asParse.c \
+lib/axt.c \
+lib/axtAffine.c \
+lib/bPlusTree.c \
+lib/bamFile.c \
+lib/base64.c \
+lib/basicBed.c \
+lib/bbiRead.c \
+lib/bbiWrite.c \
+lib/bigBed.c \
+lib/binRange.c \
+lib/bits.c \
+lib/blastOut.c \
+lib/blastParse.c \
+lib/boxClump.c \
+lib/boxLump.c \
+lib/bwgCreate.c \
+lib/bwgQuery.c \
+lib/bwgValsOnChrom.c \
+lib/cda.c \
+lib/chain.c \
+lib/chainBlock.c \
+lib/chainConnect.c \
+lib/chainToAxt.c \
+lib/chainToPsl.c \
+lib/cheapcgi.c \
+lib/cirTree.c \
+lib/codebias.c \
+lib/colHash.c \
+lib/colHash.h \
+lib/common.c \
+lib/common.ps \
+lib/common.pss \
+lib/correlate.c \
+lib/crTree.c \
+lib/dgRange.c \
+lib/diGraph.c \
+lib/diGraph.c.97 \
+lib/diff \
+lib/diffs \
+lib/dlist.c \
+lib/dnaLoad.c \
+lib/dnaMarkov.c \
+lib/dnaMotif.c \
+lib/dnaMotif.pss \
+lib/dnaseq.c \
+lib/dnautil.c \
+lib/dtdParse.c \
+lib/dyOut.c \
+lib/dystring.c \
+lib/elmTree.c \
+lib/emblParse.c \
+lib/errAbort.c \
+lib/errCatch.c \
+lib/fa.c \
+lib/ffAli.c \
+lib/ffScore.c \
+lib/fieldedTable.c \
+lib/filePath.c \
+lib/fixColor.c \
+lib/flydna.c \
+lib/fof.c \
+lib/foo \
+lib/fq.c \
+lib/fuzzyShow.c \
+lib/gapCalc.c \
+lib/gdf.c \
+lib/gemfont.c \
+lib/gemfont.h \
+lib/genomeRangeTree.c \
+lib/gfNet.c \
+lib/gff.c \
+lib/gff3.c \
+lib/gfxPoly.c \
+lib/gifLabel.c \
+lib/gifcodes.h \
+lib/gifcomp.c \
+lib/gifdecomp.c \
+lib/gifread.c \
+lib/gifwrite.c \
+lib/hacTree.c \
+lib/hash.c \
+lib/hex.c \
+lib/histogram.c \
+lib/hmac.c \
+lib/hmmPfamParse.c \
+lib/hmmstats.c \
+lib/htmlPage.c \
+lib/htmshell.c \
+lib/https.c \
+lib/intExp.c \
+lib/intValTree.c \
+lib/internet.c \
+lib/itsa.c \
+lib/iupac.c \
+lib/jointalign.c \
+lib/jpegSize.c \
+lib/jsonParse.c \
+lib/jsonWrite.c \
+lib/keys.c \
+lib/knetUdc.c \
+lib/kxTok.c \
+lib/lineFileOnBigBed.c \
+lib/linefile.c \
+lib/localmem.c \
+lib/log.c \
+lib/longToList.c \
+lib/maf.c \
+lib/maf.doc \
+lib/mafFromAxt.c \
+lib/mafScore.c \
+lib/mailViaPipe.c \
+lib/makefile \
+lib/md5.c \
+lib/memalloc.c \
+lib/memgfx.c \
+lib/meta.c \
+lib/metaWig.c \
+lib/mgCircle.c \
+lib/mgPolygon.c \
+lib/mime.c \
+lib/net.c \
+lib/nib.c \
+lib/nibTwo.c \
+lib/nt4.c \
+lib/numObscure.c \
+lib/obscure.c \
+lib/oldGff.c \
+lib/oligoTm.c \
+lib/options.c \
+lib/pairDistance.c \
+lib/pairHmm.c \
+lib/paraFetch.c \
+lib/peakCluster.c \
+lib/phyloTree.c \
+lib/pipeline.c \
+lib/pngwrite.c \
+lib/portimpl.c \
+lib/portimpl.h \
+lib/psGfx.c \
+lib/psPoly.c \
+lib/pscmGfx.c \
+lib/psl.as \
+lib/psl.c \
+lib/psl.sql \
+lib/pslGenoShow.c \
+lib/pslShow.c \
+lib/pslTbl.c \
+lib/pslTransMap.c \
+lib/pslWScore.as \
+lib/pslWScore.sql \
+lib/pthreadDoList.c \
+lib/pthreadWrap.c \
+lib/qa.c \
+lib/quickHeap.c \
+lib/quotedP.c \
+lib/ra.c \
+lib/raToStruct.c \
+lib/rainbow.c \
+lib/rangeTree.c \
+lib/rbTree.c \
+lib/regexHelper.c \
+lib/repMask.c \
+lib/rle.c \
+lib/rnautil.c \
+lib/rqlEval.c \
+lib/rqlParse.c \
+lib/rudp.c \
+lib/scoreWindow.c \
+lib/seg.c \
+lib/seqOut.c \
+lib/seqStats.c \
+lib/servBrcMcw.c \
+lib/servCrunx.c \
+lib/servcis.c \
+lib/servcl.c \
+lib/servmsII.c \
+lib/servpws.c \
+lib/shaRes.c \
+lib/slog.c \
+lib/snof.c \
+lib/snofmake.c \
+lib/snofsig.c \
+lib/spaceSaver.c \
+lib/spacedColumn.c \
+lib/spacedSeed.c \
+lib/splatAli.as \
+lib/splatAli.c \
+lib/sqlList.c \
+lib/sqlNum.c \
+lib/status \
+lib/subText.c \
+lib/sufa.c \
+lib/sufx.c \
+lib/synQueue.c \
+lib/tabRow.c \
+lib/textOut.c \
+lib/tokenizer.c \
+lib/trix.c \
+lib/twoBit.c \
+lib/udc.c \
+lib/vGfx.c \
+lib/vGfxPrivate.h \
+lib/vGif.c \
+lib/vPng.c \
+lib/valgrind.suppress \
+lib/vcf.c \
+lib/vcfBits.c \
+lib/verbose.c \
+lib/wildcmp.c \
+lib/wormdna.c \
+lib/xAli.as \
+lib/xAli.c \
+lib/xAli.sql \
+lib/xa.c \
+lib/xap.c \
+lib/xenshow.c \
+lib/xmlEscape.c \
+lib/xp.c \
+lib/zlibFace.c \
+$(NULL) 
+
+if LINUX
+libblatSrc_la_SOURCES += lib/osunix.c
+endif
+
+if DARWIN
+libblatSrc_la_SOURCES += lib/osunix.c
+endif
+
+if CYGWIN
+libblatSrc_la_SOURCES += lib/osunix.c
+endif
+
+if WINDOWS
+libblatSrc_la_SOURCES += lib/oswin9x.c
+endif
+
+
+
+libblatSrc_la_LDFLAGS  = \
+$(OPENSSL_LDFLAGS) \
+$(OPENSSL_LIBS) \
+$(NULL)
+
+libblatSrc_la_CFLAGS  = \
+$(OPENSSL_INCLUDES) \
+$(NULL)
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/src/blatSrc/Makefile.in
+
diff --git a/gbtools/src/blatSrc/Makefile.in b/gbtools/src/blatSrc/Makefile.in
new file mode 100644
index 0000000..07703ff
--- /dev/null
+++ b/gbtools/src/blatSrc/Makefile.in
@@ -0,0 +1,2688 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 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@
+
+# Common includes for all compiles.....
+#
+
+VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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@
+DIST_COMMON = $(top_srcdir)/src/Makefile.am.common \
+	$(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+	$(top_srcdir)/config/depcomp
+ at LINUX_TRUE@am__append_1 = lib/osunix.c
+ at DARWIN_TRUE@am__append_2 = lib/osunix.c
+ at CYGWIN_TRUE@am__append_3 = lib/osunix.c
+ at WINDOWS_TRUE@am__append_4 = lib/oswin9x.c
+subdir = src/blatSrc
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/./gbtools_version.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libblatSrc_la_LIBADD =
+am__libblatSrc_la_SOURCES_DIST = lib/aliType.c lib/annoAssembly.c \
+	lib/annoFilter.c lib/annoFormatTab.c lib/annoFormatter.c \
+	lib/annoGrateWig.c lib/annoGrator.c lib/annoGratorQuery.c \
+	lib/annoOption.c lib/annoRow.c lib/annoStreamBigBed.c \
+	lib/annoStreamBigWig.c lib/annoStreamTab.c lib/annoStreamVcf.c \
+	lib/annoStreamer.c lib/apacheLog.c lib/asParse.c lib/axt.c \
+	lib/axtAffine.c lib/bPlusTree.c lib/bamFile.c lib/base64.c \
+	lib/basicBed.c lib/bbiRead.c lib/bbiWrite.c lib/bigBed.c \
+	lib/binRange.c lib/bits.c lib/blastOut.c lib/blastParse.c \
+	lib/boxClump.c lib/boxLump.c lib/bwgCreate.c lib/bwgQuery.c \
+	lib/bwgValsOnChrom.c lib/cda.c lib/chain.c lib/chainBlock.c \
+	lib/chainConnect.c lib/chainToAxt.c lib/chainToPsl.c \
+	lib/cheapcgi.c lib/cirTree.c lib/codebias.c lib/colHash.c \
+	lib/colHash.h lib/common.c lib/common.ps lib/common.pss \
+	lib/correlate.c lib/crTree.c lib/dgRange.c lib/diGraph.c \
+	lib/diGraph.c.97 lib/diff lib/diffs lib/dlist.c lib/dnaLoad.c \
+	lib/dnaMarkov.c lib/dnaMotif.c lib/dnaMotif.pss lib/dnaseq.c \
+	lib/dnautil.c lib/dtdParse.c lib/dyOut.c lib/dystring.c \
+	lib/elmTree.c lib/emblParse.c lib/errAbort.c lib/errCatch.c \
+	lib/fa.c lib/ffAli.c lib/ffScore.c lib/fieldedTable.c \
+	lib/filePath.c lib/fixColor.c lib/flydna.c lib/fof.c lib/foo \
+	lib/fq.c lib/fuzzyShow.c lib/gapCalc.c lib/gdf.c lib/gemfont.c \
+	lib/gemfont.h lib/genomeRangeTree.c lib/gfNet.c lib/gff.c \
+	lib/gff3.c lib/gfxPoly.c lib/gifLabel.c lib/gifcodes.h \
+	lib/gifcomp.c lib/gifdecomp.c lib/gifread.c lib/gifwrite.c \
+	lib/hacTree.c lib/hash.c lib/hex.c lib/histogram.c lib/hmac.c \
+	lib/hmmPfamParse.c lib/hmmstats.c lib/htmlPage.c \
+	lib/htmshell.c lib/https.c lib/intExp.c lib/intValTree.c \
+	lib/internet.c lib/itsa.c lib/iupac.c lib/jointalign.c \
+	lib/jpegSize.c lib/jsonParse.c lib/jsonWrite.c lib/keys.c \
+	lib/knetUdc.c lib/kxTok.c lib/lineFileOnBigBed.c \
+	lib/linefile.c lib/localmem.c lib/log.c lib/longToList.c \
+	lib/maf.c lib/maf.doc lib/mafFromAxt.c lib/mafScore.c \
+	lib/mailViaPipe.c lib/makefile lib/md5.c lib/memalloc.c \
+	lib/memgfx.c lib/meta.c lib/metaWig.c lib/mgCircle.c \
+	lib/mgPolygon.c lib/mime.c lib/net.c lib/nib.c lib/nibTwo.c \
+	lib/nt4.c lib/numObscure.c lib/obscure.c lib/oldGff.c \
+	lib/oligoTm.c lib/options.c lib/pairDistance.c lib/pairHmm.c \
+	lib/paraFetch.c lib/peakCluster.c lib/phyloTree.c \
+	lib/pipeline.c lib/pngwrite.c lib/portimpl.c lib/portimpl.h \
+	lib/psGfx.c lib/psPoly.c lib/pscmGfx.c lib/psl.as lib/psl.c \
+	lib/psl.sql lib/pslGenoShow.c lib/pslShow.c lib/pslTbl.c \
+	lib/pslTransMap.c lib/pslWScore.as lib/pslWScore.sql \
+	lib/pthreadDoList.c lib/pthreadWrap.c lib/qa.c lib/quickHeap.c \
+	lib/quotedP.c lib/ra.c lib/raToStruct.c lib/rainbow.c \
+	lib/rangeTree.c lib/rbTree.c lib/regexHelper.c lib/repMask.c \
+	lib/rle.c lib/rnautil.c lib/rqlEval.c lib/rqlParse.c \
+	lib/rudp.c lib/scoreWindow.c lib/seg.c lib/seqOut.c \
+	lib/seqStats.c lib/servBrcMcw.c lib/servCrunx.c lib/servcis.c \
+	lib/servcl.c lib/servmsII.c lib/servpws.c lib/shaRes.c \
+	lib/slog.c lib/snof.c lib/snofmake.c lib/snofsig.c \
+	lib/spaceSaver.c lib/spacedColumn.c lib/spacedSeed.c \
+	lib/splatAli.as lib/splatAli.c lib/sqlList.c lib/sqlNum.c \
+	lib/status lib/subText.c lib/sufa.c lib/sufx.c lib/synQueue.c \
+	lib/tabRow.c lib/textOut.c lib/tokenizer.c lib/trix.c \
+	lib/twoBit.c lib/udc.c lib/vGfx.c lib/vGfxPrivate.h lib/vGif.c \
+	lib/vPng.c lib/valgrind.suppress lib/vcf.c lib/vcfBits.c \
+	lib/verbose.c lib/wildcmp.c lib/wormdna.c lib/xAli.as \
+	lib/xAli.c lib/xAli.sql lib/xa.c lib/xap.c lib/xenshow.c \
+	lib/xmlEscape.c lib/xp.c lib/zlibFace.c lib/osunix.c \
+	lib/oswin9x.c
+ at LINUX_TRUE@am__objects_1 = libblatSrc_la-osunix.lo
+ at DARWIN_TRUE@am__objects_2 = libblatSrc_la-osunix.lo
+ at CYGWIN_TRUE@am__objects_3 = libblatSrc_la-osunix.lo
+ at WINDOWS_TRUE@am__objects_4 = libblatSrc_la-oswin9x.lo
+am_libblatSrc_la_OBJECTS = libblatSrc_la-aliType.lo \
+	libblatSrc_la-annoAssembly.lo libblatSrc_la-annoFilter.lo \
+	libblatSrc_la-annoFormatTab.lo libblatSrc_la-annoFormatter.lo \
+	libblatSrc_la-annoGrateWig.lo libblatSrc_la-annoGrator.lo \
+	libblatSrc_la-annoGratorQuery.lo libblatSrc_la-annoOption.lo \
+	libblatSrc_la-annoRow.lo libblatSrc_la-annoStreamBigBed.lo \
+	libblatSrc_la-annoStreamBigWig.lo \
+	libblatSrc_la-annoStreamTab.lo libblatSrc_la-annoStreamVcf.lo \
+	libblatSrc_la-annoStreamer.lo libblatSrc_la-apacheLog.lo \
+	libblatSrc_la-asParse.lo libblatSrc_la-axt.lo \
+	libblatSrc_la-axtAffine.lo libblatSrc_la-bPlusTree.lo \
+	libblatSrc_la-bamFile.lo libblatSrc_la-base64.lo \
+	libblatSrc_la-basicBed.lo libblatSrc_la-bbiRead.lo \
+	libblatSrc_la-bbiWrite.lo libblatSrc_la-bigBed.lo \
+	libblatSrc_la-binRange.lo libblatSrc_la-bits.lo \
+	libblatSrc_la-blastOut.lo libblatSrc_la-blastParse.lo \
+	libblatSrc_la-boxClump.lo libblatSrc_la-boxLump.lo \
+	libblatSrc_la-bwgCreate.lo libblatSrc_la-bwgQuery.lo \
+	libblatSrc_la-bwgValsOnChrom.lo libblatSrc_la-cda.lo \
+	libblatSrc_la-chain.lo libblatSrc_la-chainBlock.lo \
+	libblatSrc_la-chainConnect.lo libblatSrc_la-chainToAxt.lo \
+	libblatSrc_la-chainToPsl.lo libblatSrc_la-cheapcgi.lo \
+	libblatSrc_la-cirTree.lo libblatSrc_la-codebias.lo \
+	libblatSrc_la-colHash.lo libblatSrc_la-common.lo \
+	libblatSrc_la-correlate.lo libblatSrc_la-crTree.lo \
+	libblatSrc_la-dgRange.lo libblatSrc_la-diGraph.lo \
+	libblatSrc_la-dlist.lo libblatSrc_la-dnaLoad.lo \
+	libblatSrc_la-dnaMarkov.lo libblatSrc_la-dnaMotif.lo \
+	libblatSrc_la-dnaseq.lo libblatSrc_la-dnautil.lo \
+	libblatSrc_la-dtdParse.lo libblatSrc_la-dyOut.lo \
+	libblatSrc_la-dystring.lo libblatSrc_la-elmTree.lo \
+	libblatSrc_la-emblParse.lo libblatSrc_la-errAbort.lo \
+	libblatSrc_la-errCatch.lo libblatSrc_la-fa.lo \
+	libblatSrc_la-ffAli.lo libblatSrc_la-ffScore.lo \
+	libblatSrc_la-fieldedTable.lo libblatSrc_la-filePath.lo \
+	libblatSrc_la-fixColor.lo libblatSrc_la-flydna.lo \
+	libblatSrc_la-fof.lo libblatSrc_la-fq.lo \
+	libblatSrc_la-fuzzyShow.lo libblatSrc_la-gapCalc.lo \
+	libblatSrc_la-gdf.lo libblatSrc_la-gemfont.lo \
+	libblatSrc_la-genomeRangeTree.lo libblatSrc_la-gfNet.lo \
+	libblatSrc_la-gff.lo libblatSrc_la-gff3.lo \
+	libblatSrc_la-gfxPoly.lo libblatSrc_la-gifLabel.lo \
+	libblatSrc_la-gifcomp.lo libblatSrc_la-gifdecomp.lo \
+	libblatSrc_la-gifread.lo libblatSrc_la-gifwrite.lo \
+	libblatSrc_la-hacTree.lo libblatSrc_la-hash.lo \
+	libblatSrc_la-hex.lo libblatSrc_la-histogram.lo \
+	libblatSrc_la-hmac.lo libblatSrc_la-hmmPfamParse.lo \
+	libblatSrc_la-hmmstats.lo libblatSrc_la-htmlPage.lo \
+	libblatSrc_la-htmshell.lo libblatSrc_la-https.lo \
+	libblatSrc_la-intExp.lo libblatSrc_la-intValTree.lo \
+	libblatSrc_la-internet.lo libblatSrc_la-itsa.lo \
+	libblatSrc_la-iupac.lo libblatSrc_la-jointalign.lo \
+	libblatSrc_la-jpegSize.lo libblatSrc_la-jsonParse.lo \
+	libblatSrc_la-jsonWrite.lo libblatSrc_la-keys.lo \
+	libblatSrc_la-knetUdc.lo libblatSrc_la-kxTok.lo \
+	libblatSrc_la-lineFileOnBigBed.lo libblatSrc_la-linefile.lo \
+	libblatSrc_la-localmem.lo libblatSrc_la-log.lo \
+	libblatSrc_la-longToList.lo libblatSrc_la-maf.lo \
+	libblatSrc_la-mafFromAxt.lo libblatSrc_la-mafScore.lo \
+	libblatSrc_la-mailViaPipe.lo libblatSrc_la-md5.lo \
+	libblatSrc_la-memalloc.lo libblatSrc_la-memgfx.lo \
+	libblatSrc_la-meta.lo libblatSrc_la-metaWig.lo \
+	libblatSrc_la-mgCircle.lo libblatSrc_la-mgPolygon.lo \
+	libblatSrc_la-mime.lo libblatSrc_la-net.lo \
+	libblatSrc_la-nib.lo libblatSrc_la-nibTwo.lo \
+	libblatSrc_la-nt4.lo libblatSrc_la-numObscure.lo \
+	libblatSrc_la-obscure.lo libblatSrc_la-oldGff.lo \
+	libblatSrc_la-oligoTm.lo libblatSrc_la-options.lo \
+	libblatSrc_la-pairDistance.lo libblatSrc_la-pairHmm.lo \
+	libblatSrc_la-paraFetch.lo libblatSrc_la-peakCluster.lo \
+	libblatSrc_la-phyloTree.lo libblatSrc_la-pipeline.lo \
+	libblatSrc_la-pngwrite.lo libblatSrc_la-portimpl.lo \
+	libblatSrc_la-psGfx.lo libblatSrc_la-psPoly.lo \
+	libblatSrc_la-pscmGfx.lo libblatSrc_la-psl.lo \
+	libblatSrc_la-pslGenoShow.lo libblatSrc_la-pslShow.lo \
+	libblatSrc_la-pslTbl.lo libblatSrc_la-pslTransMap.lo \
+	libblatSrc_la-pthreadDoList.lo libblatSrc_la-pthreadWrap.lo \
+	libblatSrc_la-qa.lo libblatSrc_la-quickHeap.lo \
+	libblatSrc_la-quotedP.lo libblatSrc_la-ra.lo \
+	libblatSrc_la-raToStruct.lo libblatSrc_la-rainbow.lo \
+	libblatSrc_la-rangeTree.lo libblatSrc_la-rbTree.lo \
+	libblatSrc_la-regexHelper.lo libblatSrc_la-repMask.lo \
+	libblatSrc_la-rle.lo libblatSrc_la-rnautil.lo \
+	libblatSrc_la-rqlEval.lo libblatSrc_la-rqlParse.lo \
+	libblatSrc_la-rudp.lo libblatSrc_la-scoreWindow.lo \
+	libblatSrc_la-seg.lo libblatSrc_la-seqOut.lo \
+	libblatSrc_la-seqStats.lo libblatSrc_la-servBrcMcw.lo \
+	libblatSrc_la-servCrunx.lo libblatSrc_la-servcis.lo \
+	libblatSrc_la-servcl.lo libblatSrc_la-servmsII.lo \
+	libblatSrc_la-servpws.lo libblatSrc_la-shaRes.lo \
+	libblatSrc_la-slog.lo libblatSrc_la-snof.lo \
+	libblatSrc_la-snofmake.lo libblatSrc_la-snofsig.lo \
+	libblatSrc_la-spaceSaver.lo libblatSrc_la-spacedColumn.lo \
+	libblatSrc_la-spacedSeed.lo libblatSrc_la-splatAli.lo \
+	libblatSrc_la-sqlList.lo libblatSrc_la-sqlNum.lo \
+	libblatSrc_la-subText.lo libblatSrc_la-sufa.lo \
+	libblatSrc_la-sufx.lo libblatSrc_la-synQueue.lo \
+	libblatSrc_la-tabRow.lo libblatSrc_la-textOut.lo \
+	libblatSrc_la-tokenizer.lo libblatSrc_la-trix.lo \
+	libblatSrc_la-twoBit.lo libblatSrc_la-udc.lo \
+	libblatSrc_la-vGfx.lo libblatSrc_la-vGif.lo \
+	libblatSrc_la-vPng.lo libblatSrc_la-vcf.lo \
+	libblatSrc_la-vcfBits.lo libblatSrc_la-verbose.lo \
+	libblatSrc_la-wildcmp.lo libblatSrc_la-wormdna.lo \
+	libblatSrc_la-xAli.lo libblatSrc_la-xa.lo libblatSrc_la-xap.lo \
+	libblatSrc_la-xenshow.lo libblatSrc_la-xmlEscape.lo \
+	libblatSrc_la-xp.lo libblatSrc_la-zlibFace.lo $(am__objects_1) \
+	$(am__objects_2) $(am__objects_3) $(am__objects_4)
+libblatSrc_la_OBJECTS = $(am_libblatSrc_la_OBJECTS)
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+libblatSrc_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(libblatSrc_la_CFLAGS) \
+	$(CFLAGS) $(libblatSrc_la_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = $(libblatSrc_la_SOURCES)
+DIST_SOURCES = $(am__libblatSrc_la_SOURCES_DIST)
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-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 \
+	tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+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@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+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@
+DEPS_CFLAGS = @DEPS_CFLAGS@
+DEPS_LIBS = @DEPS_LIBS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+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@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_BLATSRC = @USE_BLATSRC@
+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@
+AM_CPPFLAGS = \
+$(DEPS_CFLAGS) \
+-I$(top_srcdir)/src/include \
+-I$(top_srcdir)/src/include/blatSrc
+
+AM_CXXFLAGS = -std=c++11 -g -Wall
+SUBDIRS = .
+noinst_LTLIBRARIES = libblatSrc.la
+libblatSrc_la_SOURCES = lib/aliType.c lib/annoAssembly.c \
+	lib/annoFilter.c lib/annoFormatTab.c lib/annoFormatter.c \
+	lib/annoGrateWig.c lib/annoGrator.c lib/annoGratorQuery.c \
+	lib/annoOption.c lib/annoRow.c lib/annoStreamBigBed.c \
+	lib/annoStreamBigWig.c lib/annoStreamTab.c lib/annoStreamVcf.c \
+	lib/annoStreamer.c lib/apacheLog.c lib/asParse.c lib/axt.c \
+	lib/axtAffine.c lib/bPlusTree.c lib/bamFile.c lib/base64.c \
+	lib/basicBed.c lib/bbiRead.c lib/bbiWrite.c lib/bigBed.c \
+	lib/binRange.c lib/bits.c lib/blastOut.c lib/blastParse.c \
+	lib/boxClump.c lib/boxLump.c lib/bwgCreate.c lib/bwgQuery.c \
+	lib/bwgValsOnChrom.c lib/cda.c lib/chain.c lib/chainBlock.c \
+	lib/chainConnect.c lib/chainToAxt.c lib/chainToPsl.c \
+	lib/cheapcgi.c lib/cirTree.c lib/codebias.c lib/colHash.c \
+	lib/colHash.h lib/common.c lib/common.ps lib/common.pss \
+	lib/correlate.c lib/crTree.c lib/dgRange.c lib/diGraph.c \
+	lib/diGraph.c.97 lib/diff lib/diffs lib/dlist.c lib/dnaLoad.c \
+	lib/dnaMarkov.c lib/dnaMotif.c lib/dnaMotif.pss lib/dnaseq.c \
+	lib/dnautil.c lib/dtdParse.c lib/dyOut.c lib/dystring.c \
+	lib/elmTree.c lib/emblParse.c lib/errAbort.c lib/errCatch.c \
+	lib/fa.c lib/ffAli.c lib/ffScore.c lib/fieldedTable.c \
+	lib/filePath.c lib/fixColor.c lib/flydna.c lib/fof.c lib/foo \
+	lib/fq.c lib/fuzzyShow.c lib/gapCalc.c lib/gdf.c lib/gemfont.c \
+	lib/gemfont.h lib/genomeRangeTree.c lib/gfNet.c lib/gff.c \
+	lib/gff3.c lib/gfxPoly.c lib/gifLabel.c lib/gifcodes.h \
+	lib/gifcomp.c lib/gifdecomp.c lib/gifread.c lib/gifwrite.c \
+	lib/hacTree.c lib/hash.c lib/hex.c lib/histogram.c lib/hmac.c \
+	lib/hmmPfamParse.c lib/hmmstats.c lib/htmlPage.c \
+	lib/htmshell.c lib/https.c lib/intExp.c lib/intValTree.c \
+	lib/internet.c lib/itsa.c lib/iupac.c lib/jointalign.c \
+	lib/jpegSize.c lib/jsonParse.c lib/jsonWrite.c lib/keys.c \
+	lib/knetUdc.c lib/kxTok.c lib/lineFileOnBigBed.c \
+	lib/linefile.c lib/localmem.c lib/log.c lib/longToList.c \
+	lib/maf.c lib/maf.doc lib/mafFromAxt.c lib/mafScore.c \
+	lib/mailViaPipe.c lib/makefile lib/md5.c lib/memalloc.c \
+	lib/memgfx.c lib/meta.c lib/metaWig.c lib/mgCircle.c \
+	lib/mgPolygon.c lib/mime.c lib/net.c lib/nib.c lib/nibTwo.c \
+	lib/nt4.c lib/numObscure.c lib/obscure.c lib/oldGff.c \
+	lib/oligoTm.c lib/options.c lib/pairDistance.c lib/pairHmm.c \
+	lib/paraFetch.c lib/peakCluster.c lib/phyloTree.c \
+	lib/pipeline.c lib/pngwrite.c lib/portimpl.c lib/portimpl.h \
+	lib/psGfx.c lib/psPoly.c lib/pscmGfx.c lib/psl.as lib/psl.c \
+	lib/psl.sql lib/pslGenoShow.c lib/pslShow.c lib/pslTbl.c \
+	lib/pslTransMap.c lib/pslWScore.as lib/pslWScore.sql \
+	lib/pthreadDoList.c lib/pthreadWrap.c lib/qa.c lib/quickHeap.c \
+	lib/quotedP.c lib/ra.c lib/raToStruct.c lib/rainbow.c \
+	lib/rangeTree.c lib/rbTree.c lib/regexHelper.c lib/repMask.c \
+	lib/rle.c lib/rnautil.c lib/rqlEval.c lib/rqlParse.c \
+	lib/rudp.c lib/scoreWindow.c lib/seg.c lib/seqOut.c \
+	lib/seqStats.c lib/servBrcMcw.c lib/servCrunx.c lib/servcis.c \
+	lib/servcl.c lib/servmsII.c lib/servpws.c lib/shaRes.c \
+	lib/slog.c lib/snof.c lib/snofmake.c lib/snofsig.c \
+	lib/spaceSaver.c lib/spacedColumn.c lib/spacedSeed.c \
+	lib/splatAli.as lib/splatAli.c lib/sqlList.c lib/sqlNum.c \
+	lib/status lib/subText.c lib/sufa.c lib/sufx.c lib/synQueue.c \
+	lib/tabRow.c lib/textOut.c lib/tokenizer.c lib/trix.c \
+	lib/twoBit.c lib/udc.c lib/vGfx.c lib/vGfxPrivate.h lib/vGif.c \
+	lib/vPng.c lib/valgrind.suppress lib/vcf.c lib/vcfBits.c \
+	lib/verbose.c lib/wildcmp.c lib/wormdna.c lib/xAli.as \
+	lib/xAli.c lib/xAli.sql lib/xa.c lib/xap.c lib/xenshow.c \
+	lib/xmlEscape.c lib/xp.c lib/zlibFace.c $(NULL) \
+	$(am__append_1) $(am__append_2) $(am__append_3) \
+	$(am__append_4)
+libblatSrc_la_LDFLAGS = \
+$(OPENSSL_LDFLAGS) \
+$(OPENSSL_LIBS) \
+$(NULL)
+
+libblatSrc_la_CFLAGS = \
+$(OPENSSL_INCLUDES) \
+$(NULL)
+
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/src/blatSrc/Makefile.in
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(top_srcdir)/src/Makefile.am.common $(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 src/blatSrc/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/blatSrc/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_srcdir)/src/Makefile.am.common:
+
+$(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-noinstLTLIBRARIES:
+	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+	@list='$(noinst_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+
+libblatSrc.la: $(libblatSrc_la_OBJECTS) $(libblatSrc_la_DEPENDENCIES) $(EXTRA_libblatSrc_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libblatSrc_la_LINK)  $(libblatSrc_la_OBJECTS) $(libblatSrc_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-aliType.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-annoAssembly.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-annoFilter.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-annoFormatTab.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-annoFormatter.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-annoGrateWig.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-annoGrator.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-annoGratorQuery.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-annoOption.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-annoRow.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-annoStreamBigBed.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-annoStreamBigWig.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-annoStreamTab.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-annoStreamVcf.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-annoStreamer.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-apacheLog.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-asParse.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-axt.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-axtAffine.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-bPlusTree.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-bamFile.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-base64.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-basicBed.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-bbiRead.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-bbiWrite.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-bigBed.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-binRange.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-bits.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-blastOut.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-blastParse.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-boxClump.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-boxLump.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-bwgCreate.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-bwgQuery.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-bwgValsOnChrom.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-cda.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-chain.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-chainBlock.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-chainConnect.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-chainToAxt.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-chainToPsl.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-cheapcgi.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-cirTree.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-codebias.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-colHash.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-common.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-correlate.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-crTree.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-dgRange.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-diGraph.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-dlist.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-dnaLoad.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-dnaMarkov.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-dnaMotif.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-dnaseq.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-dnautil.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-dtdParse.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-dyOut.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-dystring.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-elmTree.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-emblParse.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-errAbort.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-errCatch.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-fa.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-ffAli.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-ffScore.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-fieldedTable.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-filePath.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-fixColor.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-flydna.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-fof.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-fq.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-fuzzyShow.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-gapCalc.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-gdf.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-gemfont.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-genomeRangeTree.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-gfNet.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-gff.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-gff3.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-gfxPoly.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-gifLabel.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-gifcomp.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-gifdecomp.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-gifread.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-gifwrite.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-hacTree.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-hash.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-hex.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-histogram.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-hmac.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-hmmPfamParse.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-hmmstats.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-htmlPage.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-htmshell.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-https.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-intExp.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-intValTree.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-internet.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-itsa.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-iupac.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-jointalign.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-jpegSize.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-jsonParse.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-jsonWrite.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-keys.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-knetUdc.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-kxTok.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-lineFileOnBigBed.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-linefile.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-localmem.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-log.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-longToList.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-maf.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-mafFromAxt.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-mafScore.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-mailViaPipe.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-md5.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-memalloc.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-memgfx.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-meta.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-metaWig.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-mgCircle.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-mgPolygon.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-mime.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-net.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-nib.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-nibTwo.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-nt4.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-numObscure.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-obscure.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-oldGff.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-oligoTm.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-options.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-osunix.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-oswin9x.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-pairDistance.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-pairHmm.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-paraFetch.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-peakCluster.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-phyloTree.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-pipeline.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-pngwrite.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-portimpl.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-psGfx.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-psPoly.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-pscmGfx.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-psl.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-pslGenoShow.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-pslShow.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-pslTbl.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-pslTransMap.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-pthreadDoList.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-pthreadWrap.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-qa.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-quickHeap.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-quotedP.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-ra.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-raToStruct.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-rainbow.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-rangeTree.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-rbTree.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-regexHelper.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-repMask.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-rle.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-rnautil.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-rqlEval.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-rqlParse.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-rudp.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-scoreWindow.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-seg.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-seqOut.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-seqStats.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-servBrcMcw.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-servCrunx.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-servcis.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-servcl.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-servmsII.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-servpws.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-shaRes.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-slog.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-snof.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-snofmake.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-snofsig.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-spaceSaver.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-spacedColumn.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-spacedSeed.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-splatAli.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-sqlList.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-sqlNum.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-subText.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-sufa.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-sufx.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-synQueue.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-tabRow.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-textOut.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-tokenizer.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-trix.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-twoBit.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-udc.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-vGfx.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-vGif.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-vPng.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-vcf.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-vcfBits.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-verbose.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-wildcmp.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-wormdna.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-xAli.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-xa.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-xap.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-xenshow.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-xmlEscape.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-xp.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libblatSrc_la-zlibFace.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+libblatSrc_la-aliType.lo: lib/aliType.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-aliType.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-aliType.Tpo -c -o libblatSrc_la-aliType.lo `test -f 'lib/aliType.c' || echo '$(srcdir)/'`lib/aliType.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-aliType.Tpo $(DEPDIR)/libblatSrc_la-aliType.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/aliType.c' object='libblatSrc_la-aliType.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-aliType.lo `test -f 'lib/aliType.c' || echo '$(srcdir)/'`lib/aliType.c
+
+libblatSrc_la-annoAssembly.lo: lib/annoAssembly.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-annoAssembly.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-annoAssembly.Tpo -c -o libblatSrc_la-annoAssembly.lo `test -f 'lib/annoAssembly.c' || echo '$(srcdir)/'`lib/annoAssembly.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-annoAssembly.Tpo $(DEPDIR)/libblatSrc_la-annoAssembly.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/annoAssembly.c' object='libblatSrc_la-annoAssembly.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-annoAssembly.lo `test -f 'lib/annoAssembly.c' || echo '$(srcdir)/'`lib/annoAssembly.c
+
+libblatSrc_la-annoFilter.lo: lib/annoFilter.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-annoFilter.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-annoFilter.Tpo -c -o libblatSrc_la-annoFilter.lo `test -f 'lib/annoFilter.c' || echo '$(srcdir)/'`lib/annoFilter.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-annoFilter.Tpo $(DEPDIR)/libblatSrc_la-annoFilter.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/annoFilter.c' object='libblatSrc_la-annoFilter.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-annoFilter.lo `test -f 'lib/annoFilter.c' || echo '$(srcdir)/'`lib/annoFilter.c
+
+libblatSrc_la-annoFormatTab.lo: lib/annoFormatTab.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-annoFormatTab.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-annoFormatTab.Tpo -c -o libblatSrc_la-annoFormatTab.lo `test -f 'lib/annoFormatTab.c' || echo '$(srcdir)/'`lib/annoFormatTab.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-annoFormatTab.Tpo $(DEPDIR)/libblatSrc_la-annoFormatTab.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/annoFormatTab.c' object='libblatSrc_la-annoFormatTab.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-annoFormatTab.lo `test -f 'lib/annoFormatTab.c' || echo '$(srcdir)/'`lib/annoFormatTab.c
+
+libblatSrc_la-annoFormatter.lo: lib/annoFormatter.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-annoFormatter.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-annoFormatter.Tpo -c -o libblatSrc_la-annoFormatter.lo `test -f 'lib/annoFormatter.c' || echo '$(srcdir)/'`lib/annoFormatter.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-annoFormatter.Tpo $(DEPDIR)/libblatSrc_la-annoFormatter.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/annoFormatter.c' object='libblatSrc_la-annoFormatter.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-annoFormatter.lo `test -f 'lib/annoFormatter.c' || echo '$(srcdir)/'`lib/annoFormatter.c
+
+libblatSrc_la-annoGrateWig.lo: lib/annoGrateWig.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-annoGrateWig.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-annoGrateWig.Tpo -c -o libblatSrc_la-annoGrateWig.lo `test -f 'lib/annoGrateWig.c' || echo '$(srcdir)/'`lib/annoGrateWig.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-annoGrateWig.Tpo $(DEPDIR)/libblatSrc_la-annoGrateWig.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/annoGrateWig.c' object='libblatSrc_la-annoGrateWig.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-annoGrateWig.lo `test -f 'lib/annoGrateWig.c' || echo '$(srcdir)/'`lib/annoGrateWig.c
+
+libblatSrc_la-annoGrator.lo: lib/annoGrator.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-annoGrator.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-annoGrator.Tpo -c -o libblatSrc_la-annoGrator.lo `test -f 'lib/annoGrator.c' || echo '$(srcdir)/'`lib/annoGrator.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-annoGrator.Tpo $(DEPDIR)/libblatSrc_la-annoGrator.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/annoGrator.c' object='libblatSrc_la-annoGrator.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-annoGrator.lo `test -f 'lib/annoGrator.c' || echo '$(srcdir)/'`lib/annoGrator.c
+
+libblatSrc_la-annoGratorQuery.lo: lib/annoGratorQuery.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-annoGratorQuery.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-annoGratorQuery.Tpo -c -o libblatSrc_la-annoGratorQuery.lo `test -f 'lib/annoGratorQuery.c' || echo '$(srcdir)/'`lib/annoGratorQuery.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-annoGratorQuery.Tpo $(DEPDIR)/libblatSrc_la-annoGratorQuery.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/annoGratorQuery.c' object='libblatSrc_la-annoGratorQuery.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-annoGratorQuery.lo `test -f 'lib/annoGratorQuery.c' || echo '$(srcdir)/'`lib/annoGratorQuery.c
+
+libblatSrc_la-annoOption.lo: lib/annoOption.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-annoOption.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-annoOption.Tpo -c -o libblatSrc_la-annoOption.lo `test -f 'lib/annoOption.c' || echo '$(srcdir)/'`lib/annoOption.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-annoOption.Tpo $(DEPDIR)/libblatSrc_la-annoOption.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/annoOption.c' object='libblatSrc_la-annoOption.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-annoOption.lo `test -f 'lib/annoOption.c' || echo '$(srcdir)/'`lib/annoOption.c
+
+libblatSrc_la-annoRow.lo: lib/annoRow.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-annoRow.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-annoRow.Tpo -c -o libblatSrc_la-annoRow.lo `test -f 'lib/annoRow.c' || echo '$(srcdir)/'`lib/annoRow.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-annoRow.Tpo $(DEPDIR)/libblatSrc_la-annoRow.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/annoRow.c' object='libblatSrc_la-annoRow.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-annoRow.lo `test -f 'lib/annoRow.c' || echo '$(srcdir)/'`lib/annoRow.c
+
+libblatSrc_la-annoStreamBigBed.lo: lib/annoStreamBigBed.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-annoStreamBigBed.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-annoStreamBigBed.Tpo -c -o libblatSrc_la-annoStreamBigBed.lo `test -f 'lib/annoStreamBigBed.c' || echo '$(srcdir)/'`lib/annoStreamBigBed.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-annoStreamBigBed.Tpo $(DEPDIR)/libblatSrc_la-annoStreamBigBed.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/annoStreamBigBed.c' object='libblatSrc_la-annoStreamBigBed.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-annoStreamBigBed.lo `test -f 'lib/annoStreamBigBed.c' || echo '$(srcdir)/'`lib/annoStreamBigBed.c
+
+libblatSrc_la-annoStreamBigWig.lo: lib/annoStreamBigWig.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-annoStreamBigWig.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-annoStreamBigWig.Tpo -c -o libblatSrc_la-annoStreamBigWig.lo `test -f 'lib/annoStreamBigWig.c' || echo '$(srcdir)/'`lib/annoStreamBigWig.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-annoStreamBigWig.Tpo $(DEPDIR)/libblatSrc_la-annoStreamBigWig.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/annoStreamBigWig.c' object='libblatSrc_la-annoStreamBigWig.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-annoStreamBigWig.lo `test -f 'lib/annoStreamBigWig.c' || echo '$(srcdir)/'`lib/annoStreamBigWig.c
+
+libblatSrc_la-annoStreamTab.lo: lib/annoStreamTab.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-annoStreamTab.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-annoStreamTab.Tpo -c -o libblatSrc_la-annoStreamTab.lo `test -f 'lib/annoStreamTab.c' || echo '$(srcdir)/'`lib/annoStreamTab.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-annoStreamTab.Tpo $(DEPDIR)/libblatSrc_la-annoStreamTab.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/annoStreamTab.c' object='libblatSrc_la-annoStreamTab.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-annoStreamTab.lo `test -f 'lib/annoStreamTab.c' || echo '$(srcdir)/'`lib/annoStreamTab.c
+
+libblatSrc_la-annoStreamVcf.lo: lib/annoStreamVcf.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-annoStreamVcf.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-annoStreamVcf.Tpo -c -o libblatSrc_la-annoStreamVcf.lo `test -f 'lib/annoStreamVcf.c' || echo '$(srcdir)/'`lib/annoStreamVcf.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-annoStreamVcf.Tpo $(DEPDIR)/libblatSrc_la-annoStreamVcf.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/annoStreamVcf.c' object='libblatSrc_la-annoStreamVcf.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-annoStreamVcf.lo `test -f 'lib/annoStreamVcf.c' || echo '$(srcdir)/'`lib/annoStreamVcf.c
+
+libblatSrc_la-annoStreamer.lo: lib/annoStreamer.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-annoStreamer.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-annoStreamer.Tpo -c -o libblatSrc_la-annoStreamer.lo `test -f 'lib/annoStreamer.c' || echo '$(srcdir)/'`lib/annoStreamer.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-annoStreamer.Tpo $(DEPDIR)/libblatSrc_la-annoStreamer.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/annoStreamer.c' object='libblatSrc_la-annoStreamer.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-annoStreamer.lo `test -f 'lib/annoStreamer.c' || echo '$(srcdir)/'`lib/annoStreamer.c
+
+libblatSrc_la-apacheLog.lo: lib/apacheLog.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-apacheLog.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-apacheLog.Tpo -c -o libblatSrc_la-apacheLog.lo `test -f 'lib/apacheLog.c' || echo '$(srcdir)/'`lib/apacheLog.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-apacheLog.Tpo $(DEPDIR)/libblatSrc_la-apacheLog.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/apacheLog.c' object='libblatSrc_la-apacheLog.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-apacheLog.lo `test -f 'lib/apacheLog.c' || echo '$(srcdir)/'`lib/apacheLog.c
+
+libblatSrc_la-asParse.lo: lib/asParse.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-asParse.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-asParse.Tpo -c -o libblatSrc_la-asParse.lo `test -f 'lib/asParse.c' || echo '$(srcdir)/'`lib/asParse.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-asParse.Tpo $(DEPDIR)/libblatSrc_la-asParse.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/asParse.c' object='libblatSrc_la-asParse.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-asParse.lo `test -f 'lib/asParse.c' || echo '$(srcdir)/'`lib/asParse.c
+
+libblatSrc_la-axt.lo: lib/axt.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-axt.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-axt.Tpo -c -o libblatSrc_la-axt.lo `test -f 'lib/axt.c' || echo '$(srcdir)/'`lib/axt.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-axt.Tpo $(DEPDIR)/libblatSrc_la-axt.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/axt.c' object='libblatSrc_la-axt.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-axt.lo `test -f 'lib/axt.c' || echo '$(srcdir)/'`lib/axt.c
+
+libblatSrc_la-axtAffine.lo: lib/axtAffine.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-axtAffine.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-axtAffine.Tpo -c -o libblatSrc_la-axtAffine.lo `test -f 'lib/axtAffine.c' || echo '$(srcdir)/'`lib/axtAffine.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-axtAffine.Tpo $(DEPDIR)/libblatSrc_la-axtAffine.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/axtAffine.c' object='libblatSrc_la-axtAffine.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-axtAffine.lo `test -f 'lib/axtAffine.c' || echo '$(srcdir)/'`lib/axtAffine.c
+
+libblatSrc_la-bPlusTree.lo: lib/bPlusTree.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-bPlusTree.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-bPlusTree.Tpo -c -o libblatSrc_la-bPlusTree.lo `test -f 'lib/bPlusTree.c' || echo '$(srcdir)/'`lib/bPlusTree.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-bPlusTree.Tpo $(DEPDIR)/libblatSrc_la-bPlusTree.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/bPlusTree.c' object='libblatSrc_la-bPlusTree.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-bPlusTree.lo `test -f 'lib/bPlusTree.c' || echo '$(srcdir)/'`lib/bPlusTree.c
+
+libblatSrc_la-bamFile.lo: lib/bamFile.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-bamFile.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-bamFile.Tpo -c -o libblatSrc_la-bamFile.lo `test -f 'lib/bamFile.c' || echo '$(srcdir)/'`lib/bamFile.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-bamFile.Tpo $(DEPDIR)/libblatSrc_la-bamFile.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/bamFile.c' object='libblatSrc_la-bamFile.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-bamFile.lo `test -f 'lib/bamFile.c' || echo '$(srcdir)/'`lib/bamFile.c
+
+libblatSrc_la-base64.lo: lib/base64.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-base64.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-base64.Tpo -c -o libblatSrc_la-base64.lo `test -f 'lib/base64.c' || echo '$(srcdir)/'`lib/base64.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-base64.Tpo $(DEPDIR)/libblatSrc_la-base64.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/base64.c' object='libblatSrc_la-base64.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-base64.lo `test -f 'lib/base64.c' || echo '$(srcdir)/'`lib/base64.c
+
+libblatSrc_la-basicBed.lo: lib/basicBed.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-basicBed.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-basicBed.Tpo -c -o libblatSrc_la-basicBed.lo `test -f 'lib/basicBed.c' || echo '$(srcdir)/'`lib/basicBed.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-basicBed.Tpo $(DEPDIR)/libblatSrc_la-basicBed.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/basicBed.c' object='libblatSrc_la-basicBed.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-basicBed.lo `test -f 'lib/basicBed.c' || echo '$(srcdir)/'`lib/basicBed.c
+
+libblatSrc_la-bbiRead.lo: lib/bbiRead.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-bbiRead.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-bbiRead.Tpo -c -o libblatSrc_la-bbiRead.lo `test -f 'lib/bbiRead.c' || echo '$(srcdir)/'`lib/bbiRead.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-bbiRead.Tpo $(DEPDIR)/libblatSrc_la-bbiRead.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/bbiRead.c' object='libblatSrc_la-bbiRead.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-bbiRead.lo `test -f 'lib/bbiRead.c' || echo '$(srcdir)/'`lib/bbiRead.c
+
+libblatSrc_la-bbiWrite.lo: lib/bbiWrite.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-bbiWrite.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-bbiWrite.Tpo -c -o libblatSrc_la-bbiWrite.lo `test -f 'lib/bbiWrite.c' || echo '$(srcdir)/'`lib/bbiWrite.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-bbiWrite.Tpo $(DEPDIR)/libblatSrc_la-bbiWrite.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/bbiWrite.c' object='libblatSrc_la-bbiWrite.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-bbiWrite.lo `test -f 'lib/bbiWrite.c' || echo '$(srcdir)/'`lib/bbiWrite.c
+
+libblatSrc_la-bigBed.lo: lib/bigBed.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-bigBed.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-bigBed.Tpo -c -o libblatSrc_la-bigBed.lo `test -f 'lib/bigBed.c' || echo '$(srcdir)/'`lib/bigBed.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-bigBed.Tpo $(DEPDIR)/libblatSrc_la-bigBed.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/bigBed.c' object='libblatSrc_la-bigBed.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-bigBed.lo `test -f 'lib/bigBed.c' || echo '$(srcdir)/'`lib/bigBed.c
+
+libblatSrc_la-binRange.lo: lib/binRange.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-binRange.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-binRange.Tpo -c -o libblatSrc_la-binRange.lo `test -f 'lib/binRange.c' || echo '$(srcdir)/'`lib/binRange.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-binRange.Tpo $(DEPDIR)/libblatSrc_la-binRange.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/binRange.c' object='libblatSrc_la-binRange.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-binRange.lo `test -f 'lib/binRange.c' || echo '$(srcdir)/'`lib/binRange.c
+
+libblatSrc_la-bits.lo: lib/bits.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-bits.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-bits.Tpo -c -o libblatSrc_la-bits.lo `test -f 'lib/bits.c' || echo '$(srcdir)/'`lib/bits.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-bits.Tpo $(DEPDIR)/libblatSrc_la-bits.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/bits.c' object='libblatSrc_la-bits.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-bits.lo `test -f 'lib/bits.c' || echo '$(srcdir)/'`lib/bits.c
+
+libblatSrc_la-blastOut.lo: lib/blastOut.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-blastOut.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-blastOut.Tpo -c -o libblatSrc_la-blastOut.lo `test -f 'lib/blastOut.c' || echo '$(srcdir)/'`lib/blastOut.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-blastOut.Tpo $(DEPDIR)/libblatSrc_la-blastOut.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/blastOut.c' object='libblatSrc_la-blastOut.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-blastOut.lo `test -f 'lib/blastOut.c' || echo '$(srcdir)/'`lib/blastOut.c
+
+libblatSrc_la-blastParse.lo: lib/blastParse.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-blastParse.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-blastParse.Tpo -c -o libblatSrc_la-blastParse.lo `test -f 'lib/blastParse.c' || echo '$(srcdir)/'`lib/blastParse.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-blastParse.Tpo $(DEPDIR)/libblatSrc_la-blastParse.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/blastParse.c' object='libblatSrc_la-blastParse.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-blastParse.lo `test -f 'lib/blastParse.c' || echo '$(srcdir)/'`lib/blastParse.c
+
+libblatSrc_la-boxClump.lo: lib/boxClump.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-boxClump.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-boxClump.Tpo -c -o libblatSrc_la-boxClump.lo `test -f 'lib/boxClump.c' || echo '$(srcdir)/'`lib/boxClump.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-boxClump.Tpo $(DEPDIR)/libblatSrc_la-boxClump.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/boxClump.c' object='libblatSrc_la-boxClump.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-boxClump.lo `test -f 'lib/boxClump.c' || echo '$(srcdir)/'`lib/boxClump.c
+
+libblatSrc_la-boxLump.lo: lib/boxLump.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-boxLump.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-boxLump.Tpo -c -o libblatSrc_la-boxLump.lo `test -f 'lib/boxLump.c' || echo '$(srcdir)/'`lib/boxLump.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-boxLump.Tpo $(DEPDIR)/libblatSrc_la-boxLump.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/boxLump.c' object='libblatSrc_la-boxLump.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-boxLump.lo `test -f 'lib/boxLump.c' || echo '$(srcdir)/'`lib/boxLump.c
+
+libblatSrc_la-bwgCreate.lo: lib/bwgCreate.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-bwgCreate.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-bwgCreate.Tpo -c -o libblatSrc_la-bwgCreate.lo `test -f 'lib/bwgCreate.c' || echo '$(srcdir)/'`lib/bwgCreate.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-bwgCreate.Tpo $(DEPDIR)/libblatSrc_la-bwgCreate.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/bwgCreate.c' object='libblatSrc_la-bwgCreate.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-bwgCreate.lo `test -f 'lib/bwgCreate.c' || echo '$(srcdir)/'`lib/bwgCreate.c
+
+libblatSrc_la-bwgQuery.lo: lib/bwgQuery.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-bwgQuery.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-bwgQuery.Tpo -c -o libblatSrc_la-bwgQuery.lo `test -f 'lib/bwgQuery.c' || echo '$(srcdir)/'`lib/bwgQuery.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-bwgQuery.Tpo $(DEPDIR)/libblatSrc_la-bwgQuery.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/bwgQuery.c' object='libblatSrc_la-bwgQuery.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-bwgQuery.lo `test -f 'lib/bwgQuery.c' || echo '$(srcdir)/'`lib/bwgQuery.c
+
+libblatSrc_la-bwgValsOnChrom.lo: lib/bwgValsOnChrom.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-bwgValsOnChrom.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-bwgValsOnChrom.Tpo -c -o libblatSrc_la-bwgValsOnChrom.lo `test -f 'lib/bwgValsOnChrom.c' || echo '$(srcdir)/'`lib/bwgValsOnChrom.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-bwgValsOnChrom.Tpo $(DEPDIR)/libblatSrc_la-bwgValsOnChrom.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/bwgValsOnChrom.c' object='libblatSrc_la-bwgValsOnChrom.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-bwgValsOnChrom.lo `test -f 'lib/bwgValsOnChrom.c' || echo '$(srcdir)/'`lib/bwgValsOnChrom.c
+
+libblatSrc_la-cda.lo: lib/cda.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-cda.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-cda.Tpo -c -o libblatSrc_la-cda.lo `test -f 'lib/cda.c' || echo '$(srcdir)/'`lib/cda.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-cda.Tpo $(DEPDIR)/libblatSrc_la-cda.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/cda.c' object='libblatSrc_la-cda.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-cda.lo `test -f 'lib/cda.c' || echo '$(srcdir)/'`lib/cda.c
+
+libblatSrc_la-chain.lo: lib/chain.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-chain.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-chain.Tpo -c -o libblatSrc_la-chain.lo `test -f 'lib/chain.c' || echo '$(srcdir)/'`lib/chain.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-chain.Tpo $(DEPDIR)/libblatSrc_la-chain.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/chain.c' object='libblatSrc_la-chain.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-chain.lo `test -f 'lib/chain.c' || echo '$(srcdir)/'`lib/chain.c
+
+libblatSrc_la-chainBlock.lo: lib/chainBlock.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-chainBlock.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-chainBlock.Tpo -c -o libblatSrc_la-chainBlock.lo `test -f 'lib/chainBlock.c' || echo '$(srcdir)/'`lib/chainBlock.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-chainBlock.Tpo $(DEPDIR)/libblatSrc_la-chainBlock.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/chainBlock.c' object='libblatSrc_la-chainBlock.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-chainBlock.lo `test -f 'lib/chainBlock.c' || echo '$(srcdir)/'`lib/chainBlock.c
+
+libblatSrc_la-chainConnect.lo: lib/chainConnect.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-chainConnect.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-chainConnect.Tpo -c -o libblatSrc_la-chainConnect.lo `test -f 'lib/chainConnect.c' || echo '$(srcdir)/'`lib/chainConnect.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-chainConnect.Tpo $(DEPDIR)/libblatSrc_la-chainConnect.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/chainConnect.c' object='libblatSrc_la-chainConnect.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-chainConnect.lo `test -f 'lib/chainConnect.c' || echo '$(srcdir)/'`lib/chainConnect.c
+
+libblatSrc_la-chainToAxt.lo: lib/chainToAxt.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-chainToAxt.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-chainToAxt.Tpo -c -o libblatSrc_la-chainToAxt.lo `test -f 'lib/chainToAxt.c' || echo '$(srcdir)/'`lib/chainToAxt.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-chainToAxt.Tpo $(DEPDIR)/libblatSrc_la-chainToAxt.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/chainToAxt.c' object='libblatSrc_la-chainToAxt.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-chainToAxt.lo `test -f 'lib/chainToAxt.c' || echo '$(srcdir)/'`lib/chainToAxt.c
+
+libblatSrc_la-chainToPsl.lo: lib/chainToPsl.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-chainToPsl.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-chainToPsl.Tpo -c -o libblatSrc_la-chainToPsl.lo `test -f 'lib/chainToPsl.c' || echo '$(srcdir)/'`lib/chainToPsl.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-chainToPsl.Tpo $(DEPDIR)/libblatSrc_la-chainToPsl.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/chainToPsl.c' object='libblatSrc_la-chainToPsl.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-chainToPsl.lo `test -f 'lib/chainToPsl.c' || echo '$(srcdir)/'`lib/chainToPsl.c
+
+libblatSrc_la-cheapcgi.lo: lib/cheapcgi.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-cheapcgi.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-cheapcgi.Tpo -c -o libblatSrc_la-cheapcgi.lo `test -f 'lib/cheapcgi.c' || echo '$(srcdir)/'`lib/cheapcgi.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-cheapcgi.Tpo $(DEPDIR)/libblatSrc_la-cheapcgi.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/cheapcgi.c' object='libblatSrc_la-cheapcgi.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-cheapcgi.lo `test -f 'lib/cheapcgi.c' || echo '$(srcdir)/'`lib/cheapcgi.c
+
+libblatSrc_la-cirTree.lo: lib/cirTree.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-cirTree.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-cirTree.Tpo -c -o libblatSrc_la-cirTree.lo `test -f 'lib/cirTree.c' || echo '$(srcdir)/'`lib/cirTree.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-cirTree.Tpo $(DEPDIR)/libblatSrc_la-cirTree.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/cirTree.c' object='libblatSrc_la-cirTree.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-cirTree.lo `test -f 'lib/cirTree.c' || echo '$(srcdir)/'`lib/cirTree.c
+
+libblatSrc_la-codebias.lo: lib/codebias.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-codebias.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-codebias.Tpo -c -o libblatSrc_la-codebias.lo `test -f 'lib/codebias.c' || echo '$(srcdir)/'`lib/codebias.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-codebias.Tpo $(DEPDIR)/libblatSrc_la-codebias.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/codebias.c' object='libblatSrc_la-codebias.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-codebias.lo `test -f 'lib/codebias.c' || echo '$(srcdir)/'`lib/codebias.c
+
+libblatSrc_la-colHash.lo: lib/colHash.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-colHash.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-colHash.Tpo -c -o libblatSrc_la-colHash.lo `test -f 'lib/colHash.c' || echo '$(srcdir)/'`lib/colHash.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-colHash.Tpo $(DEPDIR)/libblatSrc_la-colHash.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/colHash.c' object='libblatSrc_la-colHash.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-colHash.lo `test -f 'lib/colHash.c' || echo '$(srcdir)/'`lib/colHash.c
+
+libblatSrc_la-common.lo: lib/common.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-common.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-common.Tpo -c -o libblatSrc_la-common.lo `test -f 'lib/common.c' || echo '$(srcdir)/'`lib/common.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-common.Tpo $(DEPDIR)/libblatSrc_la-common.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/common.c' object='libblatSrc_la-common.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-common.lo `test -f 'lib/common.c' || echo '$(srcdir)/'`lib/common.c
+
+libblatSrc_la-correlate.lo: lib/correlate.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-correlate.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-correlate.Tpo -c -o libblatSrc_la-correlate.lo `test -f 'lib/correlate.c' || echo '$(srcdir)/'`lib/correlate.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-correlate.Tpo $(DEPDIR)/libblatSrc_la-correlate.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/correlate.c' object='libblatSrc_la-correlate.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-correlate.lo `test -f 'lib/correlate.c' || echo '$(srcdir)/'`lib/correlate.c
+
+libblatSrc_la-crTree.lo: lib/crTree.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-crTree.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-crTree.Tpo -c -o libblatSrc_la-crTree.lo `test -f 'lib/crTree.c' || echo '$(srcdir)/'`lib/crTree.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-crTree.Tpo $(DEPDIR)/libblatSrc_la-crTree.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/crTree.c' object='libblatSrc_la-crTree.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-crTree.lo `test -f 'lib/crTree.c' || echo '$(srcdir)/'`lib/crTree.c
+
+libblatSrc_la-dgRange.lo: lib/dgRange.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-dgRange.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-dgRange.Tpo -c -o libblatSrc_la-dgRange.lo `test -f 'lib/dgRange.c' || echo '$(srcdir)/'`lib/dgRange.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-dgRange.Tpo $(DEPDIR)/libblatSrc_la-dgRange.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/dgRange.c' object='libblatSrc_la-dgRange.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-dgRange.lo `test -f 'lib/dgRange.c' || echo '$(srcdir)/'`lib/dgRange.c
+
+libblatSrc_la-diGraph.lo: lib/diGraph.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-diGraph.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-diGraph.Tpo -c -o libblatSrc_la-diGraph.lo `test -f 'lib/diGraph.c' || echo '$(srcdir)/'`lib/diGraph.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-diGraph.Tpo $(DEPDIR)/libblatSrc_la-diGraph.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/diGraph.c' object='libblatSrc_la-diGraph.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-diGraph.lo `test -f 'lib/diGraph.c' || echo '$(srcdir)/'`lib/diGraph.c
+
+libblatSrc_la-dlist.lo: lib/dlist.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-dlist.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-dlist.Tpo -c -o libblatSrc_la-dlist.lo `test -f 'lib/dlist.c' || echo '$(srcdir)/'`lib/dlist.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-dlist.Tpo $(DEPDIR)/libblatSrc_la-dlist.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/dlist.c' object='libblatSrc_la-dlist.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-dlist.lo `test -f 'lib/dlist.c' || echo '$(srcdir)/'`lib/dlist.c
+
+libblatSrc_la-dnaLoad.lo: lib/dnaLoad.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-dnaLoad.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-dnaLoad.Tpo -c -o libblatSrc_la-dnaLoad.lo `test -f 'lib/dnaLoad.c' || echo '$(srcdir)/'`lib/dnaLoad.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-dnaLoad.Tpo $(DEPDIR)/libblatSrc_la-dnaLoad.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/dnaLoad.c' object='libblatSrc_la-dnaLoad.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-dnaLoad.lo `test -f 'lib/dnaLoad.c' || echo '$(srcdir)/'`lib/dnaLoad.c
+
+libblatSrc_la-dnaMarkov.lo: lib/dnaMarkov.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-dnaMarkov.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-dnaMarkov.Tpo -c -o libblatSrc_la-dnaMarkov.lo `test -f 'lib/dnaMarkov.c' || echo '$(srcdir)/'`lib/dnaMarkov.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-dnaMarkov.Tpo $(DEPDIR)/libblatSrc_la-dnaMarkov.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/dnaMarkov.c' object='libblatSrc_la-dnaMarkov.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-dnaMarkov.lo `test -f 'lib/dnaMarkov.c' || echo '$(srcdir)/'`lib/dnaMarkov.c
+
+libblatSrc_la-dnaMotif.lo: lib/dnaMotif.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-dnaMotif.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-dnaMotif.Tpo -c -o libblatSrc_la-dnaMotif.lo `test -f 'lib/dnaMotif.c' || echo '$(srcdir)/'`lib/dnaMotif.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-dnaMotif.Tpo $(DEPDIR)/libblatSrc_la-dnaMotif.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/dnaMotif.c' object='libblatSrc_la-dnaMotif.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-dnaMotif.lo `test -f 'lib/dnaMotif.c' || echo '$(srcdir)/'`lib/dnaMotif.c
+
+libblatSrc_la-dnaseq.lo: lib/dnaseq.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-dnaseq.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-dnaseq.Tpo -c -o libblatSrc_la-dnaseq.lo `test -f 'lib/dnaseq.c' || echo '$(srcdir)/'`lib/dnaseq.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-dnaseq.Tpo $(DEPDIR)/libblatSrc_la-dnaseq.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/dnaseq.c' object='libblatSrc_la-dnaseq.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-dnaseq.lo `test -f 'lib/dnaseq.c' || echo '$(srcdir)/'`lib/dnaseq.c
+
+libblatSrc_la-dnautil.lo: lib/dnautil.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-dnautil.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-dnautil.Tpo -c -o libblatSrc_la-dnautil.lo `test -f 'lib/dnautil.c' || echo '$(srcdir)/'`lib/dnautil.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-dnautil.Tpo $(DEPDIR)/libblatSrc_la-dnautil.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/dnautil.c' object='libblatSrc_la-dnautil.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-dnautil.lo `test -f 'lib/dnautil.c' || echo '$(srcdir)/'`lib/dnautil.c
+
+libblatSrc_la-dtdParse.lo: lib/dtdParse.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-dtdParse.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-dtdParse.Tpo -c -o libblatSrc_la-dtdParse.lo `test -f 'lib/dtdParse.c' || echo '$(srcdir)/'`lib/dtdParse.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-dtdParse.Tpo $(DEPDIR)/libblatSrc_la-dtdParse.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/dtdParse.c' object='libblatSrc_la-dtdParse.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-dtdParse.lo `test -f 'lib/dtdParse.c' || echo '$(srcdir)/'`lib/dtdParse.c
+
+libblatSrc_la-dyOut.lo: lib/dyOut.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-dyOut.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-dyOut.Tpo -c -o libblatSrc_la-dyOut.lo `test -f 'lib/dyOut.c' || echo '$(srcdir)/'`lib/dyOut.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-dyOut.Tpo $(DEPDIR)/libblatSrc_la-dyOut.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/dyOut.c' object='libblatSrc_la-dyOut.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-dyOut.lo `test -f 'lib/dyOut.c' || echo '$(srcdir)/'`lib/dyOut.c
+
+libblatSrc_la-dystring.lo: lib/dystring.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-dystring.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-dystring.Tpo -c -o libblatSrc_la-dystring.lo `test -f 'lib/dystring.c' || echo '$(srcdir)/'`lib/dystring.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-dystring.Tpo $(DEPDIR)/libblatSrc_la-dystring.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/dystring.c' object='libblatSrc_la-dystring.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-dystring.lo `test -f 'lib/dystring.c' || echo '$(srcdir)/'`lib/dystring.c
+
+libblatSrc_la-elmTree.lo: lib/elmTree.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-elmTree.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-elmTree.Tpo -c -o libblatSrc_la-elmTree.lo `test -f 'lib/elmTree.c' || echo '$(srcdir)/'`lib/elmTree.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-elmTree.Tpo $(DEPDIR)/libblatSrc_la-elmTree.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/elmTree.c' object='libblatSrc_la-elmTree.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-elmTree.lo `test -f 'lib/elmTree.c' || echo '$(srcdir)/'`lib/elmTree.c
+
+libblatSrc_la-emblParse.lo: lib/emblParse.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-emblParse.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-emblParse.Tpo -c -o libblatSrc_la-emblParse.lo `test -f 'lib/emblParse.c' || echo '$(srcdir)/'`lib/emblParse.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-emblParse.Tpo $(DEPDIR)/libblatSrc_la-emblParse.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/emblParse.c' object='libblatSrc_la-emblParse.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-emblParse.lo `test -f 'lib/emblParse.c' || echo '$(srcdir)/'`lib/emblParse.c
+
+libblatSrc_la-errAbort.lo: lib/errAbort.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-errAbort.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-errAbort.Tpo -c -o libblatSrc_la-errAbort.lo `test -f 'lib/errAbort.c' || echo '$(srcdir)/'`lib/errAbort.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-errAbort.Tpo $(DEPDIR)/libblatSrc_la-errAbort.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/errAbort.c' object='libblatSrc_la-errAbort.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-errAbort.lo `test -f 'lib/errAbort.c' || echo '$(srcdir)/'`lib/errAbort.c
+
+libblatSrc_la-errCatch.lo: lib/errCatch.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-errCatch.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-errCatch.Tpo -c -o libblatSrc_la-errCatch.lo `test -f 'lib/errCatch.c' || echo '$(srcdir)/'`lib/errCatch.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-errCatch.Tpo $(DEPDIR)/libblatSrc_la-errCatch.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/errCatch.c' object='libblatSrc_la-errCatch.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-errCatch.lo `test -f 'lib/errCatch.c' || echo '$(srcdir)/'`lib/errCatch.c
+
+libblatSrc_la-fa.lo: lib/fa.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-fa.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-fa.Tpo -c -o libblatSrc_la-fa.lo `test -f 'lib/fa.c' || echo '$(srcdir)/'`lib/fa.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-fa.Tpo $(DEPDIR)/libblatSrc_la-fa.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/fa.c' object='libblatSrc_la-fa.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-fa.lo `test -f 'lib/fa.c' || echo '$(srcdir)/'`lib/fa.c
+
+libblatSrc_la-ffAli.lo: lib/ffAli.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-ffAli.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-ffAli.Tpo -c -o libblatSrc_la-ffAli.lo `test -f 'lib/ffAli.c' || echo '$(srcdir)/'`lib/ffAli.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-ffAli.Tpo $(DEPDIR)/libblatSrc_la-ffAli.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/ffAli.c' object='libblatSrc_la-ffAli.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-ffAli.lo `test -f 'lib/ffAli.c' || echo '$(srcdir)/'`lib/ffAli.c
+
+libblatSrc_la-ffScore.lo: lib/ffScore.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-ffScore.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-ffScore.Tpo -c -o libblatSrc_la-ffScore.lo `test -f 'lib/ffScore.c' || echo '$(srcdir)/'`lib/ffScore.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-ffScore.Tpo $(DEPDIR)/libblatSrc_la-ffScore.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/ffScore.c' object='libblatSrc_la-ffScore.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-ffScore.lo `test -f 'lib/ffScore.c' || echo '$(srcdir)/'`lib/ffScore.c
+
+libblatSrc_la-fieldedTable.lo: lib/fieldedTable.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-fieldedTable.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-fieldedTable.Tpo -c -o libblatSrc_la-fieldedTable.lo `test -f 'lib/fieldedTable.c' || echo '$(srcdir)/'`lib/fieldedTable.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-fieldedTable.Tpo $(DEPDIR)/libblatSrc_la-fieldedTable.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/fieldedTable.c' object='libblatSrc_la-fieldedTable.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-fieldedTable.lo `test -f 'lib/fieldedTable.c' || echo '$(srcdir)/'`lib/fieldedTable.c
+
+libblatSrc_la-filePath.lo: lib/filePath.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-filePath.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-filePath.Tpo -c -o libblatSrc_la-filePath.lo `test -f 'lib/filePath.c' || echo '$(srcdir)/'`lib/filePath.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-filePath.Tpo $(DEPDIR)/libblatSrc_la-filePath.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/filePath.c' object='libblatSrc_la-filePath.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-filePath.lo `test -f 'lib/filePath.c' || echo '$(srcdir)/'`lib/filePath.c
+
+libblatSrc_la-fixColor.lo: lib/fixColor.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-fixColor.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-fixColor.Tpo -c -o libblatSrc_la-fixColor.lo `test -f 'lib/fixColor.c' || echo '$(srcdir)/'`lib/fixColor.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-fixColor.Tpo $(DEPDIR)/libblatSrc_la-fixColor.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/fixColor.c' object='libblatSrc_la-fixColor.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-fixColor.lo `test -f 'lib/fixColor.c' || echo '$(srcdir)/'`lib/fixColor.c
+
+libblatSrc_la-flydna.lo: lib/flydna.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-flydna.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-flydna.Tpo -c -o libblatSrc_la-flydna.lo `test -f 'lib/flydna.c' || echo '$(srcdir)/'`lib/flydna.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-flydna.Tpo $(DEPDIR)/libblatSrc_la-flydna.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/flydna.c' object='libblatSrc_la-flydna.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-flydna.lo `test -f 'lib/flydna.c' || echo '$(srcdir)/'`lib/flydna.c
+
+libblatSrc_la-fof.lo: lib/fof.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-fof.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-fof.Tpo -c -o libblatSrc_la-fof.lo `test -f 'lib/fof.c' || echo '$(srcdir)/'`lib/fof.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-fof.Tpo $(DEPDIR)/libblatSrc_la-fof.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/fof.c' object='libblatSrc_la-fof.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-fof.lo `test -f 'lib/fof.c' || echo '$(srcdir)/'`lib/fof.c
+
+libblatSrc_la-fq.lo: lib/fq.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-fq.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-fq.Tpo -c -o libblatSrc_la-fq.lo `test -f 'lib/fq.c' || echo '$(srcdir)/'`lib/fq.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-fq.Tpo $(DEPDIR)/libblatSrc_la-fq.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/fq.c' object='libblatSrc_la-fq.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-fq.lo `test -f 'lib/fq.c' || echo '$(srcdir)/'`lib/fq.c
+
+libblatSrc_la-fuzzyShow.lo: lib/fuzzyShow.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-fuzzyShow.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-fuzzyShow.Tpo -c -o libblatSrc_la-fuzzyShow.lo `test -f 'lib/fuzzyShow.c' || echo '$(srcdir)/'`lib/fuzzyShow.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-fuzzyShow.Tpo $(DEPDIR)/libblatSrc_la-fuzzyShow.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/fuzzyShow.c' object='libblatSrc_la-fuzzyShow.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-fuzzyShow.lo `test -f 'lib/fuzzyShow.c' || echo '$(srcdir)/'`lib/fuzzyShow.c
+
+libblatSrc_la-gapCalc.lo: lib/gapCalc.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-gapCalc.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-gapCalc.Tpo -c -o libblatSrc_la-gapCalc.lo `test -f 'lib/gapCalc.c' || echo '$(srcdir)/'`lib/gapCalc.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-gapCalc.Tpo $(DEPDIR)/libblatSrc_la-gapCalc.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/gapCalc.c' object='libblatSrc_la-gapCalc.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-gapCalc.lo `test -f 'lib/gapCalc.c' || echo '$(srcdir)/'`lib/gapCalc.c
+
+libblatSrc_la-gdf.lo: lib/gdf.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-gdf.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-gdf.Tpo -c -o libblatSrc_la-gdf.lo `test -f 'lib/gdf.c' || echo '$(srcdir)/'`lib/gdf.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-gdf.Tpo $(DEPDIR)/libblatSrc_la-gdf.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/gdf.c' object='libblatSrc_la-gdf.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-gdf.lo `test -f 'lib/gdf.c' || echo '$(srcdir)/'`lib/gdf.c
+
+libblatSrc_la-gemfont.lo: lib/gemfont.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-gemfont.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-gemfont.Tpo -c -o libblatSrc_la-gemfont.lo `test -f 'lib/gemfont.c' || echo '$(srcdir)/'`lib/gemfont.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-gemfont.Tpo $(DEPDIR)/libblatSrc_la-gemfont.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/gemfont.c' object='libblatSrc_la-gemfont.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-gemfont.lo `test -f 'lib/gemfont.c' || echo '$(srcdir)/'`lib/gemfont.c
+
+libblatSrc_la-genomeRangeTree.lo: lib/genomeRangeTree.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-genomeRangeTree.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-genomeRangeTree.Tpo -c -o libblatSrc_la-genomeRangeTree.lo `test -f 'lib/genomeRangeTree.c' || echo '$(srcdir)/'`lib/genomeRangeTree.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-genomeRangeTree.Tpo $(DEPDIR)/libblatSrc_la-genomeRangeTree.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/genomeRangeTree.c' object='libblatSrc_la-genomeRangeTree.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-genomeRangeTree.lo `test -f 'lib/genomeRangeTree.c' || echo '$(srcdir)/'`lib/genomeRangeTree.c
+
+libblatSrc_la-gfNet.lo: lib/gfNet.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-gfNet.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-gfNet.Tpo -c -o libblatSrc_la-gfNet.lo `test -f 'lib/gfNet.c' || echo '$(srcdir)/'`lib/gfNet.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-gfNet.Tpo $(DEPDIR)/libblatSrc_la-gfNet.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/gfNet.c' object='libblatSrc_la-gfNet.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-gfNet.lo `test -f 'lib/gfNet.c' || echo '$(srcdir)/'`lib/gfNet.c
+
+libblatSrc_la-gff.lo: lib/gff.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-gff.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-gff.Tpo -c -o libblatSrc_la-gff.lo `test -f 'lib/gff.c' || echo '$(srcdir)/'`lib/gff.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-gff.Tpo $(DEPDIR)/libblatSrc_la-gff.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/gff.c' object='libblatSrc_la-gff.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-gff.lo `test -f 'lib/gff.c' || echo '$(srcdir)/'`lib/gff.c
+
+libblatSrc_la-gff3.lo: lib/gff3.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-gff3.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-gff3.Tpo -c -o libblatSrc_la-gff3.lo `test -f 'lib/gff3.c' || echo '$(srcdir)/'`lib/gff3.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-gff3.Tpo $(DEPDIR)/libblatSrc_la-gff3.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/gff3.c' object='libblatSrc_la-gff3.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-gff3.lo `test -f 'lib/gff3.c' || echo '$(srcdir)/'`lib/gff3.c
+
+libblatSrc_la-gfxPoly.lo: lib/gfxPoly.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-gfxPoly.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-gfxPoly.Tpo -c -o libblatSrc_la-gfxPoly.lo `test -f 'lib/gfxPoly.c' || echo '$(srcdir)/'`lib/gfxPoly.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-gfxPoly.Tpo $(DEPDIR)/libblatSrc_la-gfxPoly.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/gfxPoly.c' object='libblatSrc_la-gfxPoly.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-gfxPoly.lo `test -f 'lib/gfxPoly.c' || echo '$(srcdir)/'`lib/gfxPoly.c
+
+libblatSrc_la-gifLabel.lo: lib/gifLabel.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-gifLabel.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-gifLabel.Tpo -c -o libblatSrc_la-gifLabel.lo `test -f 'lib/gifLabel.c' || echo '$(srcdir)/'`lib/gifLabel.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-gifLabel.Tpo $(DEPDIR)/libblatSrc_la-gifLabel.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/gifLabel.c' object='libblatSrc_la-gifLabel.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-gifLabel.lo `test -f 'lib/gifLabel.c' || echo '$(srcdir)/'`lib/gifLabel.c
+
+libblatSrc_la-gifcomp.lo: lib/gifcomp.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-gifcomp.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-gifcomp.Tpo -c -o libblatSrc_la-gifcomp.lo `test -f 'lib/gifcomp.c' || echo '$(srcdir)/'`lib/gifcomp.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-gifcomp.Tpo $(DEPDIR)/libblatSrc_la-gifcomp.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/gifcomp.c' object='libblatSrc_la-gifcomp.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-gifcomp.lo `test -f 'lib/gifcomp.c' || echo '$(srcdir)/'`lib/gifcomp.c
+
+libblatSrc_la-gifdecomp.lo: lib/gifdecomp.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-gifdecomp.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-gifdecomp.Tpo -c -o libblatSrc_la-gifdecomp.lo `test -f 'lib/gifdecomp.c' || echo '$(srcdir)/'`lib/gifdecomp.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-gifdecomp.Tpo $(DEPDIR)/libblatSrc_la-gifdecomp.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/gifdecomp.c' object='libblatSrc_la-gifdecomp.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-gifdecomp.lo `test -f 'lib/gifdecomp.c' || echo '$(srcdir)/'`lib/gifdecomp.c
+
+libblatSrc_la-gifread.lo: lib/gifread.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-gifread.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-gifread.Tpo -c -o libblatSrc_la-gifread.lo `test -f 'lib/gifread.c' || echo '$(srcdir)/'`lib/gifread.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-gifread.Tpo $(DEPDIR)/libblatSrc_la-gifread.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/gifread.c' object='libblatSrc_la-gifread.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-gifread.lo `test -f 'lib/gifread.c' || echo '$(srcdir)/'`lib/gifread.c
+
+libblatSrc_la-gifwrite.lo: lib/gifwrite.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-gifwrite.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-gifwrite.Tpo -c -o libblatSrc_la-gifwrite.lo `test -f 'lib/gifwrite.c' || echo '$(srcdir)/'`lib/gifwrite.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-gifwrite.Tpo $(DEPDIR)/libblatSrc_la-gifwrite.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/gifwrite.c' object='libblatSrc_la-gifwrite.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-gifwrite.lo `test -f 'lib/gifwrite.c' || echo '$(srcdir)/'`lib/gifwrite.c
+
+libblatSrc_la-hacTree.lo: lib/hacTree.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-hacTree.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-hacTree.Tpo -c -o libblatSrc_la-hacTree.lo `test -f 'lib/hacTree.c' || echo '$(srcdir)/'`lib/hacTree.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-hacTree.Tpo $(DEPDIR)/libblatSrc_la-hacTree.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/hacTree.c' object='libblatSrc_la-hacTree.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-hacTree.lo `test -f 'lib/hacTree.c' || echo '$(srcdir)/'`lib/hacTree.c
+
+libblatSrc_la-hash.lo: lib/hash.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-hash.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-hash.Tpo -c -o libblatSrc_la-hash.lo `test -f 'lib/hash.c' || echo '$(srcdir)/'`lib/hash.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-hash.Tpo $(DEPDIR)/libblatSrc_la-hash.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/hash.c' object='libblatSrc_la-hash.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-hash.lo `test -f 'lib/hash.c' || echo '$(srcdir)/'`lib/hash.c
+
+libblatSrc_la-hex.lo: lib/hex.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-hex.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-hex.Tpo -c -o libblatSrc_la-hex.lo `test -f 'lib/hex.c' || echo '$(srcdir)/'`lib/hex.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-hex.Tpo $(DEPDIR)/libblatSrc_la-hex.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/hex.c' object='libblatSrc_la-hex.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-hex.lo `test -f 'lib/hex.c' || echo '$(srcdir)/'`lib/hex.c
+
+libblatSrc_la-histogram.lo: lib/histogram.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-histogram.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-histogram.Tpo -c -o libblatSrc_la-histogram.lo `test -f 'lib/histogram.c' || echo '$(srcdir)/'`lib/histogram.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-histogram.Tpo $(DEPDIR)/libblatSrc_la-histogram.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/histogram.c' object='libblatSrc_la-histogram.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-histogram.lo `test -f 'lib/histogram.c' || echo '$(srcdir)/'`lib/histogram.c
+
+libblatSrc_la-hmac.lo: lib/hmac.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-hmac.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-hmac.Tpo -c -o libblatSrc_la-hmac.lo `test -f 'lib/hmac.c' || echo '$(srcdir)/'`lib/hmac.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-hmac.Tpo $(DEPDIR)/libblatSrc_la-hmac.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/hmac.c' object='libblatSrc_la-hmac.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-hmac.lo `test -f 'lib/hmac.c' || echo '$(srcdir)/'`lib/hmac.c
+
+libblatSrc_la-hmmPfamParse.lo: lib/hmmPfamParse.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-hmmPfamParse.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-hmmPfamParse.Tpo -c -o libblatSrc_la-hmmPfamParse.lo `test -f 'lib/hmmPfamParse.c' || echo '$(srcdir)/'`lib/hmmPfamParse.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-hmmPfamParse.Tpo $(DEPDIR)/libblatSrc_la-hmmPfamParse.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/hmmPfamParse.c' object='libblatSrc_la-hmmPfamParse.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-hmmPfamParse.lo `test -f 'lib/hmmPfamParse.c' || echo '$(srcdir)/'`lib/hmmPfamParse.c
+
+libblatSrc_la-hmmstats.lo: lib/hmmstats.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-hmmstats.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-hmmstats.Tpo -c -o libblatSrc_la-hmmstats.lo `test -f 'lib/hmmstats.c' || echo '$(srcdir)/'`lib/hmmstats.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-hmmstats.Tpo $(DEPDIR)/libblatSrc_la-hmmstats.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/hmmstats.c' object='libblatSrc_la-hmmstats.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-hmmstats.lo `test -f 'lib/hmmstats.c' || echo '$(srcdir)/'`lib/hmmstats.c
+
+libblatSrc_la-htmlPage.lo: lib/htmlPage.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-htmlPage.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-htmlPage.Tpo -c -o libblatSrc_la-htmlPage.lo `test -f 'lib/htmlPage.c' || echo '$(srcdir)/'`lib/htmlPage.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-htmlPage.Tpo $(DEPDIR)/libblatSrc_la-htmlPage.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/htmlPage.c' object='libblatSrc_la-htmlPage.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-htmlPage.lo `test -f 'lib/htmlPage.c' || echo '$(srcdir)/'`lib/htmlPage.c
+
+libblatSrc_la-htmshell.lo: lib/htmshell.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-htmshell.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-htmshell.Tpo -c -o libblatSrc_la-htmshell.lo `test -f 'lib/htmshell.c' || echo '$(srcdir)/'`lib/htmshell.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-htmshell.Tpo $(DEPDIR)/libblatSrc_la-htmshell.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/htmshell.c' object='libblatSrc_la-htmshell.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-htmshell.lo `test -f 'lib/htmshell.c' || echo '$(srcdir)/'`lib/htmshell.c
+
+libblatSrc_la-https.lo: lib/https.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-https.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-https.Tpo -c -o libblatSrc_la-https.lo `test -f 'lib/https.c' || echo '$(srcdir)/'`lib/https.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-https.Tpo $(DEPDIR)/libblatSrc_la-https.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/https.c' object='libblatSrc_la-https.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-https.lo `test -f 'lib/https.c' || echo '$(srcdir)/'`lib/https.c
+
+libblatSrc_la-intExp.lo: lib/intExp.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-intExp.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-intExp.Tpo -c -o libblatSrc_la-intExp.lo `test -f 'lib/intExp.c' || echo '$(srcdir)/'`lib/intExp.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-intExp.Tpo $(DEPDIR)/libblatSrc_la-intExp.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/intExp.c' object='libblatSrc_la-intExp.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-intExp.lo `test -f 'lib/intExp.c' || echo '$(srcdir)/'`lib/intExp.c
+
+libblatSrc_la-intValTree.lo: lib/intValTree.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-intValTree.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-intValTree.Tpo -c -o libblatSrc_la-intValTree.lo `test -f 'lib/intValTree.c' || echo '$(srcdir)/'`lib/intValTree.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-intValTree.Tpo $(DEPDIR)/libblatSrc_la-intValTree.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/intValTree.c' object='libblatSrc_la-intValTree.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-intValTree.lo `test -f 'lib/intValTree.c' || echo '$(srcdir)/'`lib/intValTree.c
+
+libblatSrc_la-internet.lo: lib/internet.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-internet.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-internet.Tpo -c -o libblatSrc_la-internet.lo `test -f 'lib/internet.c' || echo '$(srcdir)/'`lib/internet.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-internet.Tpo $(DEPDIR)/libblatSrc_la-internet.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/internet.c' object='libblatSrc_la-internet.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-internet.lo `test -f 'lib/internet.c' || echo '$(srcdir)/'`lib/internet.c
+
+libblatSrc_la-itsa.lo: lib/itsa.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-itsa.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-itsa.Tpo -c -o libblatSrc_la-itsa.lo `test -f 'lib/itsa.c' || echo '$(srcdir)/'`lib/itsa.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-itsa.Tpo $(DEPDIR)/libblatSrc_la-itsa.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/itsa.c' object='libblatSrc_la-itsa.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-itsa.lo `test -f 'lib/itsa.c' || echo '$(srcdir)/'`lib/itsa.c
+
+libblatSrc_la-iupac.lo: lib/iupac.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-iupac.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-iupac.Tpo -c -o libblatSrc_la-iupac.lo `test -f 'lib/iupac.c' || echo '$(srcdir)/'`lib/iupac.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-iupac.Tpo $(DEPDIR)/libblatSrc_la-iupac.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/iupac.c' object='libblatSrc_la-iupac.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-iupac.lo `test -f 'lib/iupac.c' || echo '$(srcdir)/'`lib/iupac.c
+
+libblatSrc_la-jointalign.lo: lib/jointalign.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-jointalign.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-jointalign.Tpo -c -o libblatSrc_la-jointalign.lo `test -f 'lib/jointalign.c' || echo '$(srcdir)/'`lib/jointalign.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-jointalign.Tpo $(DEPDIR)/libblatSrc_la-jointalign.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/jointalign.c' object='libblatSrc_la-jointalign.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-jointalign.lo `test -f 'lib/jointalign.c' || echo '$(srcdir)/'`lib/jointalign.c
+
+libblatSrc_la-jpegSize.lo: lib/jpegSize.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-jpegSize.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-jpegSize.Tpo -c -o libblatSrc_la-jpegSize.lo `test -f 'lib/jpegSize.c' || echo '$(srcdir)/'`lib/jpegSize.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-jpegSize.Tpo $(DEPDIR)/libblatSrc_la-jpegSize.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/jpegSize.c' object='libblatSrc_la-jpegSize.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-jpegSize.lo `test -f 'lib/jpegSize.c' || echo '$(srcdir)/'`lib/jpegSize.c
+
+libblatSrc_la-jsonParse.lo: lib/jsonParse.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-jsonParse.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-jsonParse.Tpo -c -o libblatSrc_la-jsonParse.lo `test -f 'lib/jsonParse.c' || echo '$(srcdir)/'`lib/jsonParse.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-jsonParse.Tpo $(DEPDIR)/libblatSrc_la-jsonParse.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/jsonParse.c' object='libblatSrc_la-jsonParse.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-jsonParse.lo `test -f 'lib/jsonParse.c' || echo '$(srcdir)/'`lib/jsonParse.c
+
+libblatSrc_la-jsonWrite.lo: lib/jsonWrite.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-jsonWrite.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-jsonWrite.Tpo -c -o libblatSrc_la-jsonWrite.lo `test -f 'lib/jsonWrite.c' || echo '$(srcdir)/'`lib/jsonWrite.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-jsonWrite.Tpo $(DEPDIR)/libblatSrc_la-jsonWrite.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/jsonWrite.c' object='libblatSrc_la-jsonWrite.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-jsonWrite.lo `test -f 'lib/jsonWrite.c' || echo '$(srcdir)/'`lib/jsonWrite.c
+
+libblatSrc_la-keys.lo: lib/keys.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-keys.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-keys.Tpo -c -o libblatSrc_la-keys.lo `test -f 'lib/keys.c' || echo '$(srcdir)/'`lib/keys.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-keys.Tpo $(DEPDIR)/libblatSrc_la-keys.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/keys.c' object='libblatSrc_la-keys.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-keys.lo `test -f 'lib/keys.c' || echo '$(srcdir)/'`lib/keys.c
+
+libblatSrc_la-knetUdc.lo: lib/knetUdc.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-knetUdc.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-knetUdc.Tpo -c -o libblatSrc_la-knetUdc.lo `test -f 'lib/knetUdc.c' || echo '$(srcdir)/'`lib/knetUdc.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-knetUdc.Tpo $(DEPDIR)/libblatSrc_la-knetUdc.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/knetUdc.c' object='libblatSrc_la-knetUdc.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-knetUdc.lo `test -f 'lib/knetUdc.c' || echo '$(srcdir)/'`lib/knetUdc.c
+
+libblatSrc_la-kxTok.lo: lib/kxTok.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-kxTok.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-kxTok.Tpo -c -o libblatSrc_la-kxTok.lo `test -f 'lib/kxTok.c' || echo '$(srcdir)/'`lib/kxTok.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-kxTok.Tpo $(DEPDIR)/libblatSrc_la-kxTok.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/kxTok.c' object='libblatSrc_la-kxTok.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-kxTok.lo `test -f 'lib/kxTok.c' || echo '$(srcdir)/'`lib/kxTok.c
+
+libblatSrc_la-lineFileOnBigBed.lo: lib/lineFileOnBigBed.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-lineFileOnBigBed.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-lineFileOnBigBed.Tpo -c -o libblatSrc_la-lineFileOnBigBed.lo `test -f 'lib/lineFileOnBigBed.c' || echo '$(srcdir)/'`lib/lineFileOnBigBed.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-lineFileOnBigBed.Tpo $(DEPDIR)/libblatSrc_la-lineFileOnBigBed.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/lineFileOnBigBed.c' object='libblatSrc_la-lineFileOnBigBed.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-lineFileOnBigBed.lo `test -f 'lib/lineFileOnBigBed.c' || echo '$(srcdir)/'`lib/lineFileOnBigBed.c
+
+libblatSrc_la-linefile.lo: lib/linefile.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-linefile.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-linefile.Tpo -c -o libblatSrc_la-linefile.lo `test -f 'lib/linefile.c' || echo '$(srcdir)/'`lib/linefile.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-linefile.Tpo $(DEPDIR)/libblatSrc_la-linefile.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/linefile.c' object='libblatSrc_la-linefile.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-linefile.lo `test -f 'lib/linefile.c' || echo '$(srcdir)/'`lib/linefile.c
+
+libblatSrc_la-localmem.lo: lib/localmem.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-localmem.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-localmem.Tpo -c -o libblatSrc_la-localmem.lo `test -f 'lib/localmem.c' || echo '$(srcdir)/'`lib/localmem.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-localmem.Tpo $(DEPDIR)/libblatSrc_la-localmem.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/localmem.c' object='libblatSrc_la-localmem.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-localmem.lo `test -f 'lib/localmem.c' || echo '$(srcdir)/'`lib/localmem.c
+
+libblatSrc_la-log.lo: lib/log.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-log.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-log.Tpo -c -o libblatSrc_la-log.lo `test -f 'lib/log.c' || echo '$(srcdir)/'`lib/log.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-log.Tpo $(DEPDIR)/libblatSrc_la-log.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/log.c' object='libblatSrc_la-log.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-log.lo `test -f 'lib/log.c' || echo '$(srcdir)/'`lib/log.c
+
+libblatSrc_la-longToList.lo: lib/longToList.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-longToList.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-longToList.Tpo -c -o libblatSrc_la-longToList.lo `test -f 'lib/longToList.c' || echo '$(srcdir)/'`lib/longToList.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-longToList.Tpo $(DEPDIR)/libblatSrc_la-longToList.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/longToList.c' object='libblatSrc_la-longToList.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-longToList.lo `test -f 'lib/longToList.c' || echo '$(srcdir)/'`lib/longToList.c
+
+libblatSrc_la-maf.lo: lib/maf.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-maf.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-maf.Tpo -c -o libblatSrc_la-maf.lo `test -f 'lib/maf.c' || echo '$(srcdir)/'`lib/maf.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-maf.Tpo $(DEPDIR)/libblatSrc_la-maf.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/maf.c' object='libblatSrc_la-maf.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-maf.lo `test -f 'lib/maf.c' || echo '$(srcdir)/'`lib/maf.c
+
+libblatSrc_la-mafFromAxt.lo: lib/mafFromAxt.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-mafFromAxt.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-mafFromAxt.Tpo -c -o libblatSrc_la-mafFromAxt.lo `test -f 'lib/mafFromAxt.c' || echo '$(srcdir)/'`lib/mafFromAxt.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-mafFromAxt.Tpo $(DEPDIR)/libblatSrc_la-mafFromAxt.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/mafFromAxt.c' object='libblatSrc_la-mafFromAxt.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-mafFromAxt.lo `test -f 'lib/mafFromAxt.c' || echo '$(srcdir)/'`lib/mafFromAxt.c
+
+libblatSrc_la-mafScore.lo: lib/mafScore.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-mafScore.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-mafScore.Tpo -c -o libblatSrc_la-mafScore.lo `test -f 'lib/mafScore.c' || echo '$(srcdir)/'`lib/mafScore.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-mafScore.Tpo $(DEPDIR)/libblatSrc_la-mafScore.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/mafScore.c' object='libblatSrc_la-mafScore.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-mafScore.lo `test -f 'lib/mafScore.c' || echo '$(srcdir)/'`lib/mafScore.c
+
+libblatSrc_la-mailViaPipe.lo: lib/mailViaPipe.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-mailViaPipe.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-mailViaPipe.Tpo -c -o libblatSrc_la-mailViaPipe.lo `test -f 'lib/mailViaPipe.c' || echo '$(srcdir)/'`lib/mailViaPipe.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-mailViaPipe.Tpo $(DEPDIR)/libblatSrc_la-mailViaPipe.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/mailViaPipe.c' object='libblatSrc_la-mailViaPipe.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-mailViaPipe.lo `test -f 'lib/mailViaPipe.c' || echo '$(srcdir)/'`lib/mailViaPipe.c
+
+libblatSrc_la-md5.lo: lib/md5.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-md5.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-md5.Tpo -c -o libblatSrc_la-md5.lo `test -f 'lib/md5.c' || echo '$(srcdir)/'`lib/md5.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-md5.Tpo $(DEPDIR)/libblatSrc_la-md5.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/md5.c' object='libblatSrc_la-md5.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-md5.lo `test -f 'lib/md5.c' || echo '$(srcdir)/'`lib/md5.c
+
+libblatSrc_la-memalloc.lo: lib/memalloc.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-memalloc.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-memalloc.Tpo -c -o libblatSrc_la-memalloc.lo `test -f 'lib/memalloc.c' || echo '$(srcdir)/'`lib/memalloc.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-memalloc.Tpo $(DEPDIR)/libblatSrc_la-memalloc.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/memalloc.c' object='libblatSrc_la-memalloc.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-memalloc.lo `test -f 'lib/memalloc.c' || echo '$(srcdir)/'`lib/memalloc.c
+
+libblatSrc_la-memgfx.lo: lib/memgfx.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-memgfx.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-memgfx.Tpo -c -o libblatSrc_la-memgfx.lo `test -f 'lib/memgfx.c' || echo '$(srcdir)/'`lib/memgfx.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-memgfx.Tpo $(DEPDIR)/libblatSrc_la-memgfx.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/memgfx.c' object='libblatSrc_la-memgfx.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-memgfx.lo `test -f 'lib/memgfx.c' || echo '$(srcdir)/'`lib/memgfx.c
+
+libblatSrc_la-meta.lo: lib/meta.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-meta.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-meta.Tpo -c -o libblatSrc_la-meta.lo `test -f 'lib/meta.c' || echo '$(srcdir)/'`lib/meta.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-meta.Tpo $(DEPDIR)/libblatSrc_la-meta.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/meta.c' object='libblatSrc_la-meta.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-meta.lo `test -f 'lib/meta.c' || echo '$(srcdir)/'`lib/meta.c
+
+libblatSrc_la-metaWig.lo: lib/metaWig.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-metaWig.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-metaWig.Tpo -c -o libblatSrc_la-metaWig.lo `test -f 'lib/metaWig.c' || echo '$(srcdir)/'`lib/metaWig.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-metaWig.Tpo $(DEPDIR)/libblatSrc_la-metaWig.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/metaWig.c' object='libblatSrc_la-metaWig.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-metaWig.lo `test -f 'lib/metaWig.c' || echo '$(srcdir)/'`lib/metaWig.c
+
+libblatSrc_la-mgCircle.lo: lib/mgCircle.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-mgCircle.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-mgCircle.Tpo -c -o libblatSrc_la-mgCircle.lo `test -f 'lib/mgCircle.c' || echo '$(srcdir)/'`lib/mgCircle.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-mgCircle.Tpo $(DEPDIR)/libblatSrc_la-mgCircle.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/mgCircle.c' object='libblatSrc_la-mgCircle.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-mgCircle.lo `test -f 'lib/mgCircle.c' || echo '$(srcdir)/'`lib/mgCircle.c
+
+libblatSrc_la-mgPolygon.lo: lib/mgPolygon.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-mgPolygon.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-mgPolygon.Tpo -c -o libblatSrc_la-mgPolygon.lo `test -f 'lib/mgPolygon.c' || echo '$(srcdir)/'`lib/mgPolygon.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-mgPolygon.Tpo $(DEPDIR)/libblatSrc_la-mgPolygon.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/mgPolygon.c' object='libblatSrc_la-mgPolygon.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-mgPolygon.lo `test -f 'lib/mgPolygon.c' || echo '$(srcdir)/'`lib/mgPolygon.c
+
+libblatSrc_la-mime.lo: lib/mime.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-mime.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-mime.Tpo -c -o libblatSrc_la-mime.lo `test -f 'lib/mime.c' || echo '$(srcdir)/'`lib/mime.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-mime.Tpo $(DEPDIR)/libblatSrc_la-mime.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/mime.c' object='libblatSrc_la-mime.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-mime.lo `test -f 'lib/mime.c' || echo '$(srcdir)/'`lib/mime.c
+
+libblatSrc_la-net.lo: lib/net.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-net.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-net.Tpo -c -o libblatSrc_la-net.lo `test -f 'lib/net.c' || echo '$(srcdir)/'`lib/net.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-net.Tpo $(DEPDIR)/libblatSrc_la-net.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/net.c' object='libblatSrc_la-net.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-net.lo `test -f 'lib/net.c' || echo '$(srcdir)/'`lib/net.c
+
+libblatSrc_la-nib.lo: lib/nib.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-nib.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-nib.Tpo -c -o libblatSrc_la-nib.lo `test -f 'lib/nib.c' || echo '$(srcdir)/'`lib/nib.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-nib.Tpo $(DEPDIR)/libblatSrc_la-nib.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/nib.c' object='libblatSrc_la-nib.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-nib.lo `test -f 'lib/nib.c' || echo '$(srcdir)/'`lib/nib.c
+
+libblatSrc_la-nibTwo.lo: lib/nibTwo.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-nibTwo.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-nibTwo.Tpo -c -o libblatSrc_la-nibTwo.lo `test -f 'lib/nibTwo.c' || echo '$(srcdir)/'`lib/nibTwo.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-nibTwo.Tpo $(DEPDIR)/libblatSrc_la-nibTwo.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/nibTwo.c' object='libblatSrc_la-nibTwo.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-nibTwo.lo `test -f 'lib/nibTwo.c' || echo '$(srcdir)/'`lib/nibTwo.c
+
+libblatSrc_la-nt4.lo: lib/nt4.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-nt4.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-nt4.Tpo -c -o libblatSrc_la-nt4.lo `test -f 'lib/nt4.c' || echo '$(srcdir)/'`lib/nt4.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-nt4.Tpo $(DEPDIR)/libblatSrc_la-nt4.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/nt4.c' object='libblatSrc_la-nt4.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-nt4.lo `test -f 'lib/nt4.c' || echo '$(srcdir)/'`lib/nt4.c
+
+libblatSrc_la-numObscure.lo: lib/numObscure.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-numObscure.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-numObscure.Tpo -c -o libblatSrc_la-numObscure.lo `test -f 'lib/numObscure.c' || echo '$(srcdir)/'`lib/numObscure.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-numObscure.Tpo $(DEPDIR)/libblatSrc_la-numObscure.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/numObscure.c' object='libblatSrc_la-numObscure.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-numObscure.lo `test -f 'lib/numObscure.c' || echo '$(srcdir)/'`lib/numObscure.c
+
+libblatSrc_la-obscure.lo: lib/obscure.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-obscure.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-obscure.Tpo -c -o libblatSrc_la-obscure.lo `test -f 'lib/obscure.c' || echo '$(srcdir)/'`lib/obscure.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-obscure.Tpo $(DEPDIR)/libblatSrc_la-obscure.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/obscure.c' object='libblatSrc_la-obscure.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-obscure.lo `test -f 'lib/obscure.c' || echo '$(srcdir)/'`lib/obscure.c
+
+libblatSrc_la-oldGff.lo: lib/oldGff.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-oldGff.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-oldGff.Tpo -c -o libblatSrc_la-oldGff.lo `test -f 'lib/oldGff.c' || echo '$(srcdir)/'`lib/oldGff.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-oldGff.Tpo $(DEPDIR)/libblatSrc_la-oldGff.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/oldGff.c' object='libblatSrc_la-oldGff.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-oldGff.lo `test -f 'lib/oldGff.c' || echo '$(srcdir)/'`lib/oldGff.c
+
+libblatSrc_la-oligoTm.lo: lib/oligoTm.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-oligoTm.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-oligoTm.Tpo -c -o libblatSrc_la-oligoTm.lo `test -f 'lib/oligoTm.c' || echo '$(srcdir)/'`lib/oligoTm.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-oligoTm.Tpo $(DEPDIR)/libblatSrc_la-oligoTm.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/oligoTm.c' object='libblatSrc_la-oligoTm.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-oligoTm.lo `test -f 'lib/oligoTm.c' || echo '$(srcdir)/'`lib/oligoTm.c
+
+libblatSrc_la-options.lo: lib/options.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-options.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-options.Tpo -c -o libblatSrc_la-options.lo `test -f 'lib/options.c' || echo '$(srcdir)/'`lib/options.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-options.Tpo $(DEPDIR)/libblatSrc_la-options.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/options.c' object='libblatSrc_la-options.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-options.lo `test -f 'lib/options.c' || echo '$(srcdir)/'`lib/options.c
+
+libblatSrc_la-pairDistance.lo: lib/pairDistance.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-pairDistance.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-pairDistance.Tpo -c -o libblatSrc_la-pairDistance.lo `test -f 'lib/pairDistance.c' || echo '$(srcdir)/'`lib/pairDistance.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-pairDistance.Tpo $(DEPDIR)/libblatSrc_la-pairDistance.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/pairDistance.c' object='libblatSrc_la-pairDistance.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-pairDistance.lo `test -f 'lib/pairDistance.c' || echo '$(srcdir)/'`lib/pairDistance.c
+
+libblatSrc_la-pairHmm.lo: lib/pairHmm.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-pairHmm.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-pairHmm.Tpo -c -o libblatSrc_la-pairHmm.lo `test -f 'lib/pairHmm.c' || echo '$(srcdir)/'`lib/pairHmm.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-pairHmm.Tpo $(DEPDIR)/libblatSrc_la-pairHmm.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/pairHmm.c' object='libblatSrc_la-pairHmm.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-pairHmm.lo `test -f 'lib/pairHmm.c' || echo '$(srcdir)/'`lib/pairHmm.c
+
+libblatSrc_la-paraFetch.lo: lib/paraFetch.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-paraFetch.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-paraFetch.Tpo -c -o libblatSrc_la-paraFetch.lo `test -f 'lib/paraFetch.c' || echo '$(srcdir)/'`lib/paraFetch.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-paraFetch.Tpo $(DEPDIR)/libblatSrc_la-paraFetch.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/paraFetch.c' object='libblatSrc_la-paraFetch.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-paraFetch.lo `test -f 'lib/paraFetch.c' || echo '$(srcdir)/'`lib/paraFetch.c
+
+libblatSrc_la-peakCluster.lo: lib/peakCluster.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-peakCluster.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-peakCluster.Tpo -c -o libblatSrc_la-peakCluster.lo `test -f 'lib/peakCluster.c' || echo '$(srcdir)/'`lib/peakCluster.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-peakCluster.Tpo $(DEPDIR)/libblatSrc_la-peakCluster.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/peakCluster.c' object='libblatSrc_la-peakCluster.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-peakCluster.lo `test -f 'lib/peakCluster.c' || echo '$(srcdir)/'`lib/peakCluster.c
+
+libblatSrc_la-phyloTree.lo: lib/phyloTree.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-phyloTree.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-phyloTree.Tpo -c -o libblatSrc_la-phyloTree.lo `test -f 'lib/phyloTree.c' || echo '$(srcdir)/'`lib/phyloTree.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-phyloTree.Tpo $(DEPDIR)/libblatSrc_la-phyloTree.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/phyloTree.c' object='libblatSrc_la-phyloTree.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-phyloTree.lo `test -f 'lib/phyloTree.c' || echo '$(srcdir)/'`lib/phyloTree.c
+
+libblatSrc_la-pipeline.lo: lib/pipeline.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-pipeline.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-pipeline.Tpo -c -o libblatSrc_la-pipeline.lo `test -f 'lib/pipeline.c' || echo '$(srcdir)/'`lib/pipeline.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-pipeline.Tpo $(DEPDIR)/libblatSrc_la-pipeline.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/pipeline.c' object='libblatSrc_la-pipeline.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-pipeline.lo `test -f 'lib/pipeline.c' || echo '$(srcdir)/'`lib/pipeline.c
+
+libblatSrc_la-pngwrite.lo: lib/pngwrite.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-pngwrite.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-pngwrite.Tpo -c -o libblatSrc_la-pngwrite.lo `test -f 'lib/pngwrite.c' || echo '$(srcdir)/'`lib/pngwrite.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-pngwrite.Tpo $(DEPDIR)/libblatSrc_la-pngwrite.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/pngwrite.c' object='libblatSrc_la-pngwrite.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-pngwrite.lo `test -f 'lib/pngwrite.c' || echo '$(srcdir)/'`lib/pngwrite.c
+
+libblatSrc_la-portimpl.lo: lib/portimpl.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-portimpl.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-portimpl.Tpo -c -o libblatSrc_la-portimpl.lo `test -f 'lib/portimpl.c' || echo '$(srcdir)/'`lib/portimpl.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-portimpl.Tpo $(DEPDIR)/libblatSrc_la-portimpl.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/portimpl.c' object='libblatSrc_la-portimpl.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-portimpl.lo `test -f 'lib/portimpl.c' || echo '$(srcdir)/'`lib/portimpl.c
+
+libblatSrc_la-psGfx.lo: lib/psGfx.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-psGfx.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-psGfx.Tpo -c -o libblatSrc_la-psGfx.lo `test -f 'lib/psGfx.c' || echo '$(srcdir)/'`lib/psGfx.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-psGfx.Tpo $(DEPDIR)/libblatSrc_la-psGfx.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/psGfx.c' object='libblatSrc_la-psGfx.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-psGfx.lo `test -f 'lib/psGfx.c' || echo '$(srcdir)/'`lib/psGfx.c
+
+libblatSrc_la-psPoly.lo: lib/psPoly.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-psPoly.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-psPoly.Tpo -c -o libblatSrc_la-psPoly.lo `test -f 'lib/psPoly.c' || echo '$(srcdir)/'`lib/psPoly.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-psPoly.Tpo $(DEPDIR)/libblatSrc_la-psPoly.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/psPoly.c' object='libblatSrc_la-psPoly.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-psPoly.lo `test -f 'lib/psPoly.c' || echo '$(srcdir)/'`lib/psPoly.c
+
+libblatSrc_la-pscmGfx.lo: lib/pscmGfx.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-pscmGfx.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-pscmGfx.Tpo -c -o libblatSrc_la-pscmGfx.lo `test -f 'lib/pscmGfx.c' || echo '$(srcdir)/'`lib/pscmGfx.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-pscmGfx.Tpo $(DEPDIR)/libblatSrc_la-pscmGfx.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/pscmGfx.c' object='libblatSrc_la-pscmGfx.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-pscmGfx.lo `test -f 'lib/pscmGfx.c' || echo '$(srcdir)/'`lib/pscmGfx.c
+
+libblatSrc_la-psl.lo: lib/psl.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-psl.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-psl.Tpo -c -o libblatSrc_la-psl.lo `test -f 'lib/psl.c' || echo '$(srcdir)/'`lib/psl.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-psl.Tpo $(DEPDIR)/libblatSrc_la-psl.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/psl.c' object='libblatSrc_la-psl.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-psl.lo `test -f 'lib/psl.c' || echo '$(srcdir)/'`lib/psl.c
+
+libblatSrc_la-pslGenoShow.lo: lib/pslGenoShow.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-pslGenoShow.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-pslGenoShow.Tpo -c -o libblatSrc_la-pslGenoShow.lo `test -f 'lib/pslGenoShow.c' || echo '$(srcdir)/'`lib/pslGenoShow.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-pslGenoShow.Tpo $(DEPDIR)/libblatSrc_la-pslGenoShow.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/pslGenoShow.c' object='libblatSrc_la-pslGenoShow.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-pslGenoShow.lo `test -f 'lib/pslGenoShow.c' || echo '$(srcdir)/'`lib/pslGenoShow.c
+
+libblatSrc_la-pslShow.lo: lib/pslShow.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-pslShow.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-pslShow.Tpo -c -o libblatSrc_la-pslShow.lo `test -f 'lib/pslShow.c' || echo '$(srcdir)/'`lib/pslShow.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-pslShow.Tpo $(DEPDIR)/libblatSrc_la-pslShow.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/pslShow.c' object='libblatSrc_la-pslShow.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-pslShow.lo `test -f 'lib/pslShow.c' || echo '$(srcdir)/'`lib/pslShow.c
+
+libblatSrc_la-pslTbl.lo: lib/pslTbl.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-pslTbl.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-pslTbl.Tpo -c -o libblatSrc_la-pslTbl.lo `test -f 'lib/pslTbl.c' || echo '$(srcdir)/'`lib/pslTbl.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-pslTbl.Tpo $(DEPDIR)/libblatSrc_la-pslTbl.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/pslTbl.c' object='libblatSrc_la-pslTbl.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-pslTbl.lo `test -f 'lib/pslTbl.c' || echo '$(srcdir)/'`lib/pslTbl.c
+
+libblatSrc_la-pslTransMap.lo: lib/pslTransMap.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-pslTransMap.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-pslTransMap.Tpo -c -o libblatSrc_la-pslTransMap.lo `test -f 'lib/pslTransMap.c' || echo '$(srcdir)/'`lib/pslTransMap.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-pslTransMap.Tpo $(DEPDIR)/libblatSrc_la-pslTransMap.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/pslTransMap.c' object='libblatSrc_la-pslTransMap.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-pslTransMap.lo `test -f 'lib/pslTransMap.c' || echo '$(srcdir)/'`lib/pslTransMap.c
+
+libblatSrc_la-pthreadDoList.lo: lib/pthreadDoList.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-pthreadDoList.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-pthreadDoList.Tpo -c -o libblatSrc_la-pthreadDoList.lo `test -f 'lib/pthreadDoList.c' || echo '$(srcdir)/'`lib/pthreadDoList.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-pthreadDoList.Tpo $(DEPDIR)/libblatSrc_la-pthreadDoList.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/pthreadDoList.c' object='libblatSrc_la-pthreadDoList.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-pthreadDoList.lo `test -f 'lib/pthreadDoList.c' || echo '$(srcdir)/'`lib/pthreadDoList.c
+
+libblatSrc_la-pthreadWrap.lo: lib/pthreadWrap.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-pthreadWrap.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-pthreadWrap.Tpo -c -o libblatSrc_la-pthreadWrap.lo `test -f 'lib/pthreadWrap.c' || echo '$(srcdir)/'`lib/pthreadWrap.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-pthreadWrap.Tpo $(DEPDIR)/libblatSrc_la-pthreadWrap.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/pthreadWrap.c' object='libblatSrc_la-pthreadWrap.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-pthreadWrap.lo `test -f 'lib/pthreadWrap.c' || echo '$(srcdir)/'`lib/pthreadWrap.c
+
+libblatSrc_la-qa.lo: lib/qa.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-qa.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-qa.Tpo -c -o libblatSrc_la-qa.lo `test -f 'lib/qa.c' || echo '$(srcdir)/'`lib/qa.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-qa.Tpo $(DEPDIR)/libblatSrc_la-qa.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/qa.c' object='libblatSrc_la-qa.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-qa.lo `test -f 'lib/qa.c' || echo '$(srcdir)/'`lib/qa.c
+
+libblatSrc_la-quickHeap.lo: lib/quickHeap.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-quickHeap.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-quickHeap.Tpo -c -o libblatSrc_la-quickHeap.lo `test -f 'lib/quickHeap.c' || echo '$(srcdir)/'`lib/quickHeap.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-quickHeap.Tpo $(DEPDIR)/libblatSrc_la-quickHeap.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/quickHeap.c' object='libblatSrc_la-quickHeap.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-quickHeap.lo `test -f 'lib/quickHeap.c' || echo '$(srcdir)/'`lib/quickHeap.c
+
+libblatSrc_la-quotedP.lo: lib/quotedP.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-quotedP.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-quotedP.Tpo -c -o libblatSrc_la-quotedP.lo `test -f 'lib/quotedP.c' || echo '$(srcdir)/'`lib/quotedP.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-quotedP.Tpo $(DEPDIR)/libblatSrc_la-quotedP.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/quotedP.c' object='libblatSrc_la-quotedP.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-quotedP.lo `test -f 'lib/quotedP.c' || echo '$(srcdir)/'`lib/quotedP.c
+
+libblatSrc_la-ra.lo: lib/ra.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-ra.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-ra.Tpo -c -o libblatSrc_la-ra.lo `test -f 'lib/ra.c' || echo '$(srcdir)/'`lib/ra.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-ra.Tpo $(DEPDIR)/libblatSrc_la-ra.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/ra.c' object='libblatSrc_la-ra.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-ra.lo `test -f 'lib/ra.c' || echo '$(srcdir)/'`lib/ra.c
+
+libblatSrc_la-raToStruct.lo: lib/raToStruct.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-raToStruct.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-raToStruct.Tpo -c -o libblatSrc_la-raToStruct.lo `test -f 'lib/raToStruct.c' || echo '$(srcdir)/'`lib/raToStruct.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-raToStruct.Tpo $(DEPDIR)/libblatSrc_la-raToStruct.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/raToStruct.c' object='libblatSrc_la-raToStruct.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-raToStruct.lo `test -f 'lib/raToStruct.c' || echo '$(srcdir)/'`lib/raToStruct.c
+
+libblatSrc_la-rainbow.lo: lib/rainbow.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-rainbow.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-rainbow.Tpo -c -o libblatSrc_la-rainbow.lo `test -f 'lib/rainbow.c' || echo '$(srcdir)/'`lib/rainbow.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-rainbow.Tpo $(DEPDIR)/libblatSrc_la-rainbow.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/rainbow.c' object='libblatSrc_la-rainbow.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-rainbow.lo `test -f 'lib/rainbow.c' || echo '$(srcdir)/'`lib/rainbow.c
+
+libblatSrc_la-rangeTree.lo: lib/rangeTree.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-rangeTree.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-rangeTree.Tpo -c -o libblatSrc_la-rangeTree.lo `test -f 'lib/rangeTree.c' || echo '$(srcdir)/'`lib/rangeTree.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-rangeTree.Tpo $(DEPDIR)/libblatSrc_la-rangeTree.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/rangeTree.c' object='libblatSrc_la-rangeTree.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-rangeTree.lo `test -f 'lib/rangeTree.c' || echo '$(srcdir)/'`lib/rangeTree.c
+
+libblatSrc_la-rbTree.lo: lib/rbTree.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-rbTree.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-rbTree.Tpo -c -o libblatSrc_la-rbTree.lo `test -f 'lib/rbTree.c' || echo '$(srcdir)/'`lib/rbTree.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-rbTree.Tpo $(DEPDIR)/libblatSrc_la-rbTree.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/rbTree.c' object='libblatSrc_la-rbTree.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-rbTree.lo `test -f 'lib/rbTree.c' || echo '$(srcdir)/'`lib/rbTree.c
+
+libblatSrc_la-regexHelper.lo: lib/regexHelper.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-regexHelper.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-regexHelper.Tpo -c -o libblatSrc_la-regexHelper.lo `test -f 'lib/regexHelper.c' || echo '$(srcdir)/'`lib/regexHelper.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-regexHelper.Tpo $(DEPDIR)/libblatSrc_la-regexHelper.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/regexHelper.c' object='libblatSrc_la-regexHelper.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-regexHelper.lo `test -f 'lib/regexHelper.c' || echo '$(srcdir)/'`lib/regexHelper.c
+
+libblatSrc_la-repMask.lo: lib/repMask.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-repMask.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-repMask.Tpo -c -o libblatSrc_la-repMask.lo `test -f 'lib/repMask.c' || echo '$(srcdir)/'`lib/repMask.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-repMask.Tpo $(DEPDIR)/libblatSrc_la-repMask.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/repMask.c' object='libblatSrc_la-repMask.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-repMask.lo `test -f 'lib/repMask.c' || echo '$(srcdir)/'`lib/repMask.c
+
+libblatSrc_la-rle.lo: lib/rle.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-rle.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-rle.Tpo -c -o libblatSrc_la-rle.lo `test -f 'lib/rle.c' || echo '$(srcdir)/'`lib/rle.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-rle.Tpo $(DEPDIR)/libblatSrc_la-rle.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/rle.c' object='libblatSrc_la-rle.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-rle.lo `test -f 'lib/rle.c' || echo '$(srcdir)/'`lib/rle.c
+
+libblatSrc_la-rnautil.lo: lib/rnautil.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-rnautil.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-rnautil.Tpo -c -o libblatSrc_la-rnautil.lo `test -f 'lib/rnautil.c' || echo '$(srcdir)/'`lib/rnautil.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-rnautil.Tpo $(DEPDIR)/libblatSrc_la-rnautil.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/rnautil.c' object='libblatSrc_la-rnautil.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-rnautil.lo `test -f 'lib/rnautil.c' || echo '$(srcdir)/'`lib/rnautil.c
+
+libblatSrc_la-rqlEval.lo: lib/rqlEval.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-rqlEval.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-rqlEval.Tpo -c -o libblatSrc_la-rqlEval.lo `test -f 'lib/rqlEval.c' || echo '$(srcdir)/'`lib/rqlEval.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-rqlEval.Tpo $(DEPDIR)/libblatSrc_la-rqlEval.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/rqlEval.c' object='libblatSrc_la-rqlEval.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-rqlEval.lo `test -f 'lib/rqlEval.c' || echo '$(srcdir)/'`lib/rqlEval.c
+
+libblatSrc_la-rqlParse.lo: lib/rqlParse.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-rqlParse.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-rqlParse.Tpo -c -o libblatSrc_la-rqlParse.lo `test -f 'lib/rqlParse.c' || echo '$(srcdir)/'`lib/rqlParse.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-rqlParse.Tpo $(DEPDIR)/libblatSrc_la-rqlParse.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/rqlParse.c' object='libblatSrc_la-rqlParse.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-rqlParse.lo `test -f 'lib/rqlParse.c' || echo '$(srcdir)/'`lib/rqlParse.c
+
+libblatSrc_la-rudp.lo: lib/rudp.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-rudp.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-rudp.Tpo -c -o libblatSrc_la-rudp.lo `test -f 'lib/rudp.c' || echo '$(srcdir)/'`lib/rudp.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-rudp.Tpo $(DEPDIR)/libblatSrc_la-rudp.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/rudp.c' object='libblatSrc_la-rudp.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-rudp.lo `test -f 'lib/rudp.c' || echo '$(srcdir)/'`lib/rudp.c
+
+libblatSrc_la-scoreWindow.lo: lib/scoreWindow.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-scoreWindow.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-scoreWindow.Tpo -c -o libblatSrc_la-scoreWindow.lo `test -f 'lib/scoreWindow.c' || echo '$(srcdir)/'`lib/scoreWindow.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-scoreWindow.Tpo $(DEPDIR)/libblatSrc_la-scoreWindow.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/scoreWindow.c' object='libblatSrc_la-scoreWindow.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-scoreWindow.lo `test -f 'lib/scoreWindow.c' || echo '$(srcdir)/'`lib/scoreWindow.c
+
+libblatSrc_la-seg.lo: lib/seg.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-seg.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-seg.Tpo -c -o libblatSrc_la-seg.lo `test -f 'lib/seg.c' || echo '$(srcdir)/'`lib/seg.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-seg.Tpo $(DEPDIR)/libblatSrc_la-seg.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/seg.c' object='libblatSrc_la-seg.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-seg.lo `test -f 'lib/seg.c' || echo '$(srcdir)/'`lib/seg.c
+
+libblatSrc_la-seqOut.lo: lib/seqOut.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-seqOut.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-seqOut.Tpo -c -o libblatSrc_la-seqOut.lo `test -f 'lib/seqOut.c' || echo '$(srcdir)/'`lib/seqOut.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-seqOut.Tpo $(DEPDIR)/libblatSrc_la-seqOut.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/seqOut.c' object='libblatSrc_la-seqOut.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-seqOut.lo `test -f 'lib/seqOut.c' || echo '$(srcdir)/'`lib/seqOut.c
+
+libblatSrc_la-seqStats.lo: lib/seqStats.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-seqStats.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-seqStats.Tpo -c -o libblatSrc_la-seqStats.lo `test -f 'lib/seqStats.c' || echo '$(srcdir)/'`lib/seqStats.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-seqStats.Tpo $(DEPDIR)/libblatSrc_la-seqStats.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/seqStats.c' object='libblatSrc_la-seqStats.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-seqStats.lo `test -f 'lib/seqStats.c' || echo '$(srcdir)/'`lib/seqStats.c
+
+libblatSrc_la-servBrcMcw.lo: lib/servBrcMcw.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-servBrcMcw.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-servBrcMcw.Tpo -c -o libblatSrc_la-servBrcMcw.lo `test -f 'lib/servBrcMcw.c' || echo '$(srcdir)/'`lib/servBrcMcw.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-servBrcMcw.Tpo $(DEPDIR)/libblatSrc_la-servBrcMcw.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/servBrcMcw.c' object='libblatSrc_la-servBrcMcw.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-servBrcMcw.lo `test -f 'lib/servBrcMcw.c' || echo '$(srcdir)/'`lib/servBrcMcw.c
+
+libblatSrc_la-servCrunx.lo: lib/servCrunx.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-servCrunx.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-servCrunx.Tpo -c -o libblatSrc_la-servCrunx.lo `test -f 'lib/servCrunx.c' || echo '$(srcdir)/'`lib/servCrunx.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-servCrunx.Tpo $(DEPDIR)/libblatSrc_la-servCrunx.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/servCrunx.c' object='libblatSrc_la-servCrunx.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-servCrunx.lo `test -f 'lib/servCrunx.c' || echo '$(srcdir)/'`lib/servCrunx.c
+
+libblatSrc_la-servcis.lo: lib/servcis.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-servcis.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-servcis.Tpo -c -o libblatSrc_la-servcis.lo `test -f 'lib/servcis.c' || echo '$(srcdir)/'`lib/servcis.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-servcis.Tpo $(DEPDIR)/libblatSrc_la-servcis.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/servcis.c' object='libblatSrc_la-servcis.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-servcis.lo `test -f 'lib/servcis.c' || echo '$(srcdir)/'`lib/servcis.c
+
+libblatSrc_la-servcl.lo: lib/servcl.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-servcl.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-servcl.Tpo -c -o libblatSrc_la-servcl.lo `test -f 'lib/servcl.c' || echo '$(srcdir)/'`lib/servcl.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-servcl.Tpo $(DEPDIR)/libblatSrc_la-servcl.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/servcl.c' object='libblatSrc_la-servcl.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-servcl.lo `test -f 'lib/servcl.c' || echo '$(srcdir)/'`lib/servcl.c
+
+libblatSrc_la-servmsII.lo: lib/servmsII.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-servmsII.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-servmsII.Tpo -c -o libblatSrc_la-servmsII.lo `test -f 'lib/servmsII.c' || echo '$(srcdir)/'`lib/servmsII.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-servmsII.Tpo $(DEPDIR)/libblatSrc_la-servmsII.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/servmsII.c' object='libblatSrc_la-servmsII.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-servmsII.lo `test -f 'lib/servmsII.c' || echo '$(srcdir)/'`lib/servmsII.c
+
+libblatSrc_la-servpws.lo: lib/servpws.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-servpws.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-servpws.Tpo -c -o libblatSrc_la-servpws.lo `test -f 'lib/servpws.c' || echo '$(srcdir)/'`lib/servpws.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-servpws.Tpo $(DEPDIR)/libblatSrc_la-servpws.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/servpws.c' object='libblatSrc_la-servpws.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-servpws.lo `test -f 'lib/servpws.c' || echo '$(srcdir)/'`lib/servpws.c
+
+libblatSrc_la-shaRes.lo: lib/shaRes.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-shaRes.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-shaRes.Tpo -c -o libblatSrc_la-shaRes.lo `test -f 'lib/shaRes.c' || echo '$(srcdir)/'`lib/shaRes.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-shaRes.Tpo $(DEPDIR)/libblatSrc_la-shaRes.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/shaRes.c' object='libblatSrc_la-shaRes.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-shaRes.lo `test -f 'lib/shaRes.c' || echo '$(srcdir)/'`lib/shaRes.c
+
+libblatSrc_la-slog.lo: lib/slog.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-slog.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-slog.Tpo -c -o libblatSrc_la-slog.lo `test -f 'lib/slog.c' || echo '$(srcdir)/'`lib/slog.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-slog.Tpo $(DEPDIR)/libblatSrc_la-slog.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/slog.c' object='libblatSrc_la-slog.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-slog.lo `test -f 'lib/slog.c' || echo '$(srcdir)/'`lib/slog.c
+
+libblatSrc_la-snof.lo: lib/snof.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-snof.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-snof.Tpo -c -o libblatSrc_la-snof.lo `test -f 'lib/snof.c' || echo '$(srcdir)/'`lib/snof.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-snof.Tpo $(DEPDIR)/libblatSrc_la-snof.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/snof.c' object='libblatSrc_la-snof.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-snof.lo `test -f 'lib/snof.c' || echo '$(srcdir)/'`lib/snof.c
+
+libblatSrc_la-snofmake.lo: lib/snofmake.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-snofmake.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-snofmake.Tpo -c -o libblatSrc_la-snofmake.lo `test -f 'lib/snofmake.c' || echo '$(srcdir)/'`lib/snofmake.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-snofmake.Tpo $(DEPDIR)/libblatSrc_la-snofmake.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/snofmake.c' object='libblatSrc_la-snofmake.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-snofmake.lo `test -f 'lib/snofmake.c' || echo '$(srcdir)/'`lib/snofmake.c
+
+libblatSrc_la-snofsig.lo: lib/snofsig.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-snofsig.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-snofsig.Tpo -c -o libblatSrc_la-snofsig.lo `test -f 'lib/snofsig.c' || echo '$(srcdir)/'`lib/snofsig.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-snofsig.Tpo $(DEPDIR)/libblatSrc_la-snofsig.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/snofsig.c' object='libblatSrc_la-snofsig.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-snofsig.lo `test -f 'lib/snofsig.c' || echo '$(srcdir)/'`lib/snofsig.c
+
+libblatSrc_la-spaceSaver.lo: lib/spaceSaver.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-spaceSaver.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-spaceSaver.Tpo -c -o libblatSrc_la-spaceSaver.lo `test -f 'lib/spaceSaver.c' || echo '$(srcdir)/'`lib/spaceSaver.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-spaceSaver.Tpo $(DEPDIR)/libblatSrc_la-spaceSaver.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/spaceSaver.c' object='libblatSrc_la-spaceSaver.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-spaceSaver.lo `test -f 'lib/spaceSaver.c' || echo '$(srcdir)/'`lib/spaceSaver.c
+
+libblatSrc_la-spacedColumn.lo: lib/spacedColumn.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-spacedColumn.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-spacedColumn.Tpo -c -o libblatSrc_la-spacedColumn.lo `test -f 'lib/spacedColumn.c' || echo '$(srcdir)/'`lib/spacedColumn.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-spacedColumn.Tpo $(DEPDIR)/libblatSrc_la-spacedColumn.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/spacedColumn.c' object='libblatSrc_la-spacedColumn.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-spacedColumn.lo `test -f 'lib/spacedColumn.c' || echo '$(srcdir)/'`lib/spacedColumn.c
+
+libblatSrc_la-spacedSeed.lo: lib/spacedSeed.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-spacedSeed.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-spacedSeed.Tpo -c -o libblatSrc_la-spacedSeed.lo `test -f 'lib/spacedSeed.c' || echo '$(srcdir)/'`lib/spacedSeed.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-spacedSeed.Tpo $(DEPDIR)/libblatSrc_la-spacedSeed.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/spacedSeed.c' object='libblatSrc_la-spacedSeed.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-spacedSeed.lo `test -f 'lib/spacedSeed.c' || echo '$(srcdir)/'`lib/spacedSeed.c
+
+libblatSrc_la-splatAli.lo: lib/splatAli.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-splatAli.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-splatAli.Tpo -c -o libblatSrc_la-splatAli.lo `test -f 'lib/splatAli.c' || echo '$(srcdir)/'`lib/splatAli.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-splatAli.Tpo $(DEPDIR)/libblatSrc_la-splatAli.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/splatAli.c' object='libblatSrc_la-splatAli.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-splatAli.lo `test -f 'lib/splatAli.c' || echo '$(srcdir)/'`lib/splatAli.c
+
+libblatSrc_la-sqlList.lo: lib/sqlList.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-sqlList.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-sqlList.Tpo -c -o libblatSrc_la-sqlList.lo `test -f 'lib/sqlList.c' || echo '$(srcdir)/'`lib/sqlList.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-sqlList.Tpo $(DEPDIR)/libblatSrc_la-sqlList.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/sqlList.c' object='libblatSrc_la-sqlList.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-sqlList.lo `test -f 'lib/sqlList.c' || echo '$(srcdir)/'`lib/sqlList.c
+
+libblatSrc_la-sqlNum.lo: lib/sqlNum.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-sqlNum.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-sqlNum.Tpo -c -o libblatSrc_la-sqlNum.lo `test -f 'lib/sqlNum.c' || echo '$(srcdir)/'`lib/sqlNum.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-sqlNum.Tpo $(DEPDIR)/libblatSrc_la-sqlNum.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/sqlNum.c' object='libblatSrc_la-sqlNum.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-sqlNum.lo `test -f 'lib/sqlNum.c' || echo '$(srcdir)/'`lib/sqlNum.c
+
+libblatSrc_la-subText.lo: lib/subText.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-subText.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-subText.Tpo -c -o libblatSrc_la-subText.lo `test -f 'lib/subText.c' || echo '$(srcdir)/'`lib/subText.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-subText.Tpo $(DEPDIR)/libblatSrc_la-subText.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/subText.c' object='libblatSrc_la-subText.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-subText.lo `test -f 'lib/subText.c' || echo '$(srcdir)/'`lib/subText.c
+
+libblatSrc_la-sufa.lo: lib/sufa.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-sufa.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-sufa.Tpo -c -o libblatSrc_la-sufa.lo `test -f 'lib/sufa.c' || echo '$(srcdir)/'`lib/sufa.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-sufa.Tpo $(DEPDIR)/libblatSrc_la-sufa.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/sufa.c' object='libblatSrc_la-sufa.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-sufa.lo `test -f 'lib/sufa.c' || echo '$(srcdir)/'`lib/sufa.c
+
+libblatSrc_la-sufx.lo: lib/sufx.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-sufx.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-sufx.Tpo -c -o libblatSrc_la-sufx.lo `test -f 'lib/sufx.c' || echo '$(srcdir)/'`lib/sufx.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-sufx.Tpo $(DEPDIR)/libblatSrc_la-sufx.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/sufx.c' object='libblatSrc_la-sufx.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-sufx.lo `test -f 'lib/sufx.c' || echo '$(srcdir)/'`lib/sufx.c
+
+libblatSrc_la-synQueue.lo: lib/synQueue.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-synQueue.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-synQueue.Tpo -c -o libblatSrc_la-synQueue.lo `test -f 'lib/synQueue.c' || echo '$(srcdir)/'`lib/synQueue.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-synQueue.Tpo $(DEPDIR)/libblatSrc_la-synQueue.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/synQueue.c' object='libblatSrc_la-synQueue.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-synQueue.lo `test -f 'lib/synQueue.c' || echo '$(srcdir)/'`lib/synQueue.c
+
+libblatSrc_la-tabRow.lo: lib/tabRow.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-tabRow.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-tabRow.Tpo -c -o libblatSrc_la-tabRow.lo `test -f 'lib/tabRow.c' || echo '$(srcdir)/'`lib/tabRow.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-tabRow.Tpo $(DEPDIR)/libblatSrc_la-tabRow.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/tabRow.c' object='libblatSrc_la-tabRow.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-tabRow.lo `test -f 'lib/tabRow.c' || echo '$(srcdir)/'`lib/tabRow.c
+
+libblatSrc_la-textOut.lo: lib/textOut.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-textOut.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-textOut.Tpo -c -o libblatSrc_la-textOut.lo `test -f 'lib/textOut.c' || echo '$(srcdir)/'`lib/textOut.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-textOut.Tpo $(DEPDIR)/libblatSrc_la-textOut.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/textOut.c' object='libblatSrc_la-textOut.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-textOut.lo `test -f 'lib/textOut.c' || echo '$(srcdir)/'`lib/textOut.c
+
+libblatSrc_la-tokenizer.lo: lib/tokenizer.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-tokenizer.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-tokenizer.Tpo -c -o libblatSrc_la-tokenizer.lo `test -f 'lib/tokenizer.c' || echo '$(srcdir)/'`lib/tokenizer.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-tokenizer.Tpo $(DEPDIR)/libblatSrc_la-tokenizer.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/tokenizer.c' object='libblatSrc_la-tokenizer.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-tokenizer.lo `test -f 'lib/tokenizer.c' || echo '$(srcdir)/'`lib/tokenizer.c
+
+libblatSrc_la-trix.lo: lib/trix.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-trix.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-trix.Tpo -c -o libblatSrc_la-trix.lo `test -f 'lib/trix.c' || echo '$(srcdir)/'`lib/trix.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-trix.Tpo $(DEPDIR)/libblatSrc_la-trix.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/trix.c' object='libblatSrc_la-trix.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-trix.lo `test -f 'lib/trix.c' || echo '$(srcdir)/'`lib/trix.c
+
+libblatSrc_la-twoBit.lo: lib/twoBit.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-twoBit.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-twoBit.Tpo -c -o libblatSrc_la-twoBit.lo `test -f 'lib/twoBit.c' || echo '$(srcdir)/'`lib/twoBit.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-twoBit.Tpo $(DEPDIR)/libblatSrc_la-twoBit.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/twoBit.c' object='libblatSrc_la-twoBit.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-twoBit.lo `test -f 'lib/twoBit.c' || echo '$(srcdir)/'`lib/twoBit.c
+
+libblatSrc_la-udc.lo: lib/udc.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-udc.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-udc.Tpo -c -o libblatSrc_la-udc.lo `test -f 'lib/udc.c' || echo '$(srcdir)/'`lib/udc.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-udc.Tpo $(DEPDIR)/libblatSrc_la-udc.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/udc.c' object='libblatSrc_la-udc.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-udc.lo `test -f 'lib/udc.c' || echo '$(srcdir)/'`lib/udc.c
+
+libblatSrc_la-vGfx.lo: lib/vGfx.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-vGfx.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-vGfx.Tpo -c -o libblatSrc_la-vGfx.lo `test -f 'lib/vGfx.c' || echo '$(srcdir)/'`lib/vGfx.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-vGfx.Tpo $(DEPDIR)/libblatSrc_la-vGfx.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/vGfx.c' object='libblatSrc_la-vGfx.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-vGfx.lo `test -f 'lib/vGfx.c' || echo '$(srcdir)/'`lib/vGfx.c
+
+libblatSrc_la-vGif.lo: lib/vGif.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-vGif.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-vGif.Tpo -c -o libblatSrc_la-vGif.lo `test -f 'lib/vGif.c' || echo '$(srcdir)/'`lib/vGif.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-vGif.Tpo $(DEPDIR)/libblatSrc_la-vGif.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/vGif.c' object='libblatSrc_la-vGif.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-vGif.lo `test -f 'lib/vGif.c' || echo '$(srcdir)/'`lib/vGif.c
+
+libblatSrc_la-vPng.lo: lib/vPng.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-vPng.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-vPng.Tpo -c -o libblatSrc_la-vPng.lo `test -f 'lib/vPng.c' || echo '$(srcdir)/'`lib/vPng.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-vPng.Tpo $(DEPDIR)/libblatSrc_la-vPng.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/vPng.c' object='libblatSrc_la-vPng.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-vPng.lo `test -f 'lib/vPng.c' || echo '$(srcdir)/'`lib/vPng.c
+
+libblatSrc_la-vcf.lo: lib/vcf.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-vcf.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-vcf.Tpo -c -o libblatSrc_la-vcf.lo `test -f 'lib/vcf.c' || echo '$(srcdir)/'`lib/vcf.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-vcf.Tpo $(DEPDIR)/libblatSrc_la-vcf.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/vcf.c' object='libblatSrc_la-vcf.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-vcf.lo `test -f 'lib/vcf.c' || echo '$(srcdir)/'`lib/vcf.c
+
+libblatSrc_la-vcfBits.lo: lib/vcfBits.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-vcfBits.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-vcfBits.Tpo -c -o libblatSrc_la-vcfBits.lo `test -f 'lib/vcfBits.c' || echo '$(srcdir)/'`lib/vcfBits.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-vcfBits.Tpo $(DEPDIR)/libblatSrc_la-vcfBits.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/vcfBits.c' object='libblatSrc_la-vcfBits.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-vcfBits.lo `test -f 'lib/vcfBits.c' || echo '$(srcdir)/'`lib/vcfBits.c
+
+libblatSrc_la-verbose.lo: lib/verbose.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-verbose.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-verbose.Tpo -c -o libblatSrc_la-verbose.lo `test -f 'lib/verbose.c' || echo '$(srcdir)/'`lib/verbose.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-verbose.Tpo $(DEPDIR)/libblatSrc_la-verbose.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/verbose.c' object='libblatSrc_la-verbose.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-verbose.lo `test -f 'lib/verbose.c' || echo '$(srcdir)/'`lib/verbose.c
+
+libblatSrc_la-wildcmp.lo: lib/wildcmp.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-wildcmp.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-wildcmp.Tpo -c -o libblatSrc_la-wildcmp.lo `test -f 'lib/wildcmp.c' || echo '$(srcdir)/'`lib/wildcmp.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-wildcmp.Tpo $(DEPDIR)/libblatSrc_la-wildcmp.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/wildcmp.c' object='libblatSrc_la-wildcmp.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-wildcmp.lo `test -f 'lib/wildcmp.c' || echo '$(srcdir)/'`lib/wildcmp.c
+
+libblatSrc_la-wormdna.lo: lib/wormdna.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-wormdna.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-wormdna.Tpo -c -o libblatSrc_la-wormdna.lo `test -f 'lib/wormdna.c' || echo '$(srcdir)/'`lib/wormdna.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-wormdna.Tpo $(DEPDIR)/libblatSrc_la-wormdna.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/wormdna.c' object='libblatSrc_la-wormdna.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-wormdna.lo `test -f 'lib/wormdna.c' || echo '$(srcdir)/'`lib/wormdna.c
+
+libblatSrc_la-xAli.lo: lib/xAli.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-xAli.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-xAli.Tpo -c -o libblatSrc_la-xAli.lo `test -f 'lib/xAli.c' || echo '$(srcdir)/'`lib/xAli.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-xAli.Tpo $(DEPDIR)/libblatSrc_la-xAli.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/xAli.c' object='libblatSrc_la-xAli.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-xAli.lo `test -f 'lib/xAli.c' || echo '$(srcdir)/'`lib/xAli.c
+
+libblatSrc_la-xa.lo: lib/xa.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-xa.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-xa.Tpo -c -o libblatSrc_la-xa.lo `test -f 'lib/xa.c' || echo '$(srcdir)/'`lib/xa.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-xa.Tpo $(DEPDIR)/libblatSrc_la-xa.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/xa.c' object='libblatSrc_la-xa.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-xa.lo `test -f 'lib/xa.c' || echo '$(srcdir)/'`lib/xa.c
+
+libblatSrc_la-xap.lo: lib/xap.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-xap.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-xap.Tpo -c -o libblatSrc_la-xap.lo `test -f 'lib/xap.c' || echo '$(srcdir)/'`lib/xap.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-xap.Tpo $(DEPDIR)/libblatSrc_la-xap.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/xap.c' object='libblatSrc_la-xap.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-xap.lo `test -f 'lib/xap.c' || echo '$(srcdir)/'`lib/xap.c
+
+libblatSrc_la-xenshow.lo: lib/xenshow.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-xenshow.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-xenshow.Tpo -c -o libblatSrc_la-xenshow.lo `test -f 'lib/xenshow.c' || echo '$(srcdir)/'`lib/xenshow.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-xenshow.Tpo $(DEPDIR)/libblatSrc_la-xenshow.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/xenshow.c' object='libblatSrc_la-xenshow.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-xenshow.lo `test -f 'lib/xenshow.c' || echo '$(srcdir)/'`lib/xenshow.c
+
+libblatSrc_la-xmlEscape.lo: lib/xmlEscape.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-xmlEscape.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-xmlEscape.Tpo -c -o libblatSrc_la-xmlEscape.lo `test -f 'lib/xmlEscape.c' || echo '$(srcdir)/'`lib/xmlEscape.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-xmlEscape.Tpo $(DEPDIR)/libblatSrc_la-xmlEscape.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/xmlEscape.c' object='libblatSrc_la-xmlEscape.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-xmlEscape.lo `test -f 'lib/xmlEscape.c' || echo '$(srcdir)/'`lib/xmlEscape.c
+
+libblatSrc_la-xp.lo: lib/xp.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-xp.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-xp.Tpo -c -o libblatSrc_la-xp.lo `test -f 'lib/xp.c' || echo '$(srcdir)/'`lib/xp.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-xp.Tpo $(DEPDIR)/libblatSrc_la-xp.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/xp.c' object='libblatSrc_la-xp.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-xp.lo `test -f 'lib/xp.c' || echo '$(srcdir)/'`lib/xp.c
+
+libblatSrc_la-zlibFace.lo: lib/zlibFace.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-zlibFace.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-zlibFace.Tpo -c -o libblatSrc_la-zlibFace.lo `test -f 'lib/zlibFace.c' || echo '$(srcdir)/'`lib/zlibFace.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-zlibFace.Tpo $(DEPDIR)/libblatSrc_la-zlibFace.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/zlibFace.c' object='libblatSrc_la-zlibFace.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-zlibFace.lo `test -f 'lib/zlibFace.c' || echo '$(srcdir)/'`lib/zlibFace.c
+
+libblatSrc_la-osunix.lo: lib/osunix.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-osunix.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-osunix.Tpo -c -o libblatSrc_la-osunix.lo `test -f 'lib/osunix.c' || echo '$(srcdir)/'`lib/osunix.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-osunix.Tpo $(DEPDIR)/libblatSrc_la-osunix.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/osunix.c' object='libblatSrc_la-osunix.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-osunix.lo `test -f 'lib/osunix.c' || echo '$(srcdir)/'`lib/osunix.c
+
+libblatSrc_la-oswin9x.lo: lib/oswin9x.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -MT libblatSrc_la-oswin9x.lo -MD -MP -MF $(DEPDIR)/libblatSrc_la-oswin9x.Tpo -c -o libblatSrc_la-oswin9x.lo `test -f 'lib/oswin9x.c' || echo '$(srcdir)/'`lib/oswin9x.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libblatSrc_la-oswin9x.Tpo $(DEPDIR)/libblatSrc_la-oswin9x.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib/oswin9x.c' object='libblatSrc_la-oswin9x.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libblatSrc_la_CFLAGS) $(CFLAGS) -c -o libblatSrc_la-oswin9x.lo `test -f 'lib/oswin9x.c' || echo '$(srcdir)/'`lib/oswin9x.c
+
+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.
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	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"
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	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; \
+	$(am__define_uniq_tagged_files); \
+	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-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	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"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+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 \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    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 $(LTLIBRARIES)
+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:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+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."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile 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 -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+	check-am clean clean-generic clean-libtool \
+	clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am 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 \
+	installdirs-am maintainer-clean maintainer-clean-generic \
+	mostlyclean mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
+	uninstall-am
+
+
+# these don't work....or maybe they do...try again...???
+#libgbtools_la_CPPFLAGS =  $(DEPS_CFLAGS)
+#libgbtools_la_CXXFLAGS = -g  -Wall -std=c++0x
+
+# 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/gbtools/src/blatSrc/lib/aliType.c b/gbtools/src/blatSrc/lib/aliType.c
new file mode 100644
index 0000000..6668bff
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/aliType.c
@@ -0,0 +1,33 @@
+/* aliType - some definitions for type of alignment. */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+#include "common.h"
+#include "aliType.h"
+
+
+char *gfTypeName(enum gfType type)
+/* Return string representing type. */
+{
+if (type == gftDna) return "DNA";
+if (type == gftRna) return "RNA";
+if (type == gftProt) return "protein";
+if (type == gftDnaX) return "DNAX";
+if (type == gftRnaX) return "RNAX";
+internalErr();
+return NULL;
+}
+
+enum gfType gfTypeFromName(char *name)
+/* Return type from string. */
+{
+if (sameWord(name, "DNA")) return gftDna;
+if (sameWord(name, "RNA")) return gftRna;
+if (sameWord(name, "protein")) return gftProt;
+if (sameWord(name, "prot")) return gftProt;
+if (sameWord(name, "DNAX")) return gftDnaX;
+if (sameWord(name, "RNAX")) return gftRnaX;
+errAbort("Unknown sequence type '%s'", name);
+return 0;
+}
+
diff --git a/gbtools/src/blatSrc/lib/annoAssembly.c b/gbtools/src/blatSrc/lib/annoAssembly.c
new file mode 100644
index 0000000..1f74c8e
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/annoAssembly.c
@@ -0,0 +1,77 @@
+/* annoAssembly -- basic metadata about an assembly for the annoGrator framework. */
+
+/* Copyright (C) 2013 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "annoAssembly.h"
+#include "dnaseq.h"
+#include "obscure.h"
+#include "twoBit.h"
+
+struct annoAssembly *annoAssemblyNew(char *name, char *twoBitPath)
+/* Return an annoAssembly with open twoBitFile. */
+{
+struct annoAssembly *aa;
+AllocVar(aa);
+aa->name = cloneString(name);
+aa->twoBitPath = cloneString(twoBitPath);
+aa->tbf = twoBitOpen(aa->twoBitPath);
+aa->curSeq = NULL;
+return aa;
+}
+
+struct slName *annoAssemblySeqNames(struct annoAssembly *aa)
+/* Return a list of sequence names in this assembly. */
+{
+struct slName *seqNames = twoBitSeqNames(aa->twoBitPath);
+slSort(&seqNames, slNameCmp);
+return seqNames;
+}
+
+uint annoAssemblySeqSize(struct annoAssembly *aa, char *seqName)
+/* Return the number of bases in seq which must be in aa's twoBitFile. */
+{
+if (aa->seqSizes == NULL)
+    aa->seqSizes = hashNew(digitsBaseTwo(aa->tbf->seqCount));
+struct hashEl *hel = hashLookup(aa->seqSizes, seqName);
+uint seqSize;
+if (hel != NULL)
+    seqSize = (uint)(hel->val - NULL);
+else
+    {
+    seqSize = (uint)twoBitSeqSize(aa->tbf, seqName);
+    char *pt = NULL;
+    hashAdd(aa->seqSizes, seqName, pt + seqSize);
+    }
+return seqSize;
+}
+
+void annoAssemblyGetSeq(struct annoAssembly *aa, char *seqName, uint start, uint end,
+			char *buf, size_t bufSize)
+/* Copy sequence to buf; bufSize must be at least end-start+1 chars in length. */
+{
+if (aa->curSeq == NULL || differentString(aa->curSeq->name, seqName))
+    {
+    dnaSeqFree(&aa->curSeq);
+    aa->curSeq = twoBitReadSeqFragLower(aa->tbf, seqName, 0, 0);
+    }
+uint chromSize = aa->curSeq->size;
+if (end > chromSize || start > chromSize || start > end)
+    errAbort("annoAssemblyGetSeq: bad coords [%u,%u) (sequence %s size %u)",
+	     start, end, seqName, chromSize);
+safencpy(buf, bufSize, aa->curSeq->dna+start, end-start);
+}
+
+void annoAssemblyClose(struct annoAssembly **pAa)
+/* Close aa's twoBitFile and free mem. */
+{
+if (*pAa == NULL)
+    return;
+struct annoAssembly *aa = *pAa;
+freeMem(aa->name);
+freeMem(aa->twoBitPath);
+twoBitClose(&(aa->tbf));
+hashFree(&(aa->seqSizes));
+freez(pAa);
+}
+
diff --git a/gbtools/src/blatSrc/lib/annoFilter.c b/gbtools/src/blatSrc/lib/annoFilter.c
new file mode 100644
index 0000000..689697e
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/annoFilter.c
@@ -0,0 +1,357 @@
+/* annoFilter -- autoSql-driven data filtering for annoGratorQuery framework */
+
+/* Copyright (C) 2012 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "annoFilter.h"
+#include "sqlNum.h"
+
+static struct annoFilter *afFromAsColumnAndIx(struct asColumn *def, int ix,
+					      enum annoFilterOp op, void *values)
+/* Return a filter for def. */
+{
+struct annoFilter *newF;
+AllocVar(newF);
+newF->columnIx = ix;
+newF->label = cloneString(def->name);
+newF->type = def->lowType->type;
+newF->isList = def->isList;
+newF->op = op;
+newF->values = values;
+return newF;
+}
+
+static void *valuesFromSlName(struct asColumn *def, struct slName *valList)
+/* Parse valList according to def->type. */
+{
+if (valList != NULL)
+    {
+    if (asTypesIsFloating(def->lowType->type))
+	{
+	double *minMax = needMem(2*sizeof(double));
+	minMax[0] = atof(valList->name);
+	if (valList->next)
+	    minMax[1] = atof(valList->next->name);
+	return minMax;
+	}
+    else if (asTypesIsInt(def->lowType->type))
+	{
+	long long *minMax = needMem(2*sizeof(long long));
+	minMax[0] = atoll(valList->name);
+	if (valList->next)
+	    minMax[1] = atoll(valList->next->name);
+	return minMax;
+	}
+    else
+	return slNameCloneList(valList);
+    }
+return NULL;
+}
+
+struct annoFilter *annoFilterFromAsColumn(struct asObject *asObj, char *colName,
+					  enum annoFilterOp op, struct slName *valList)
+/* Look up description of colName in asObj and return an annoFilter
+ * using values parsed from valList if applicable. */
+{
+struct asColumn *def = asColumnFind(asObj, colName);
+if (def == NULL)
+    errAbort("annoFilterFromAsColumn: asObject %s column name '%s' not found",
+	     asObj->name, colName);
+int ix = asColumnFindIx(asObj->columnList, colName);
+void *values = valuesFromSlName(def, valList);
+return afFromAsColumnAndIx(def, ix, op, values);
+}
+
+struct annoFilter *annoFilterFromFunction(AnnoFilterFunction *func, void *values)
+/* Return an annoFilter that calls func on each item, using values. */
+{
+struct annoFilter *newF;
+AllocVar(newF);
+newF->filterFunc = func;
+newF->values = values;
+return newF;
+}
+
+static boolean annoFilterDouble(struct annoFilter *filter, double val)
+/* Compare val to double(s) in filter->values according to filter->op,
+ * return TRUE if comparison fails. */
+{
+double *filterVals = filter->values;
+if (filter->op == afInRange)
+    {
+    double min = filterVals[0], max = filterVals[1];
+    return (val < min || val > max);
+    }
+else
+    {
+    double threshold = filterVals[0];
+    switch (filter->op)
+	{
+	case afLT:
+	    return !(val < threshold);
+	case afLTE:
+	    return !(val <= threshold);
+	case afEqual:
+	    return !(val == threshold);
+	case afNotEqual:
+	    return !(val != threshold);
+	case afGTE:
+	    return !(val >= threshold);
+	case afGT:
+	    return !(val > threshold);
+	default:
+	    errAbort("annoFilterDouble: unexpected filter->op %d for %s",
+		     filter->op, filter->label);
+	}
+    }
+return FALSE;
+}
+
+static boolean annoFilterLongLong(struct annoFilter *filter, long long val)
+/* Compare val to long long(s) in filter->values according to filter->op,
+ * return TRUE if comparison fails. */
+{
+long long *filterVals = filter->values;
+if (filter->op == afInRange)
+    {
+    long long min = filterVals[0], max = filterVals[1];
+    return (val < min || val > max);
+    }
+else
+    {
+    long long threshold = filterVals[0];
+    switch (filter->op)
+	{
+	case afLT:
+	    return !(val < threshold);
+	case afLTE:
+	    return !(val <= threshold);
+	case afEqual:
+	    return !(val == threshold);
+	case afNotEqual:
+	    return !(val != threshold);
+	case afGTE:
+	    return !(val >= threshold);
+	case afGT:
+	    return !(val > threshold);
+	default:
+	    errAbort("annoFilterLongLong: unexpected filter->op %d for %s",
+		     filter->op, filter->label);
+	}
+    }
+return FALSE;
+}
+
+static boolean matchOneVal(struct slName *wildList, char *val)
+/* Return TRUE if val matches at least one wildcard value in wildList. */
+{
+struct slName *wild;
+boolean match = FALSE;
+for (wild = wildList;  wild != NULL;  wild = wild->next)
+    {
+    if (wildMatch(wild->name, val))
+	{
+	match = TRUE;
+	break;
+	}
+    }
+return match;
+}
+
+static boolean matchArray(struct slName *wildList, char **rowVals, int valCount)
+/* Return TRUE if at least one item in rowVals matches at least one wildcard value in wildList. */
+{
+int i;
+for (i = 0;  i < valCount;  i++)
+    if (matchOneVal(wildList, rowVals[i]))
+	return TRUE;
+return FALSE;
+}
+
+static boolean singleFilter(struct annoFilter *filter, char **row, int rowSize)
+/* Apply one filter, using either filterFunc or type-based filter on column value.
+ * Return TRUE if isExclude and filter passes, or if !isExclude and filter fails. */
+{
+boolean fail = FALSE;
+if (filter->filterFunc != NULL)
+    fail = filter->filterFunc(filter, row, rowSize);
+else if (filter->op == afMatch || filter->op == afNotMatch)
+    {
+    struct slName *filterVals = filter->values;
+    boolean match;
+    if (filter->isList)
+	{
+	int len = strlen(row[filter->columnIx]);
+	char copy[len+1];
+	safecpy(copy, len+1, row[filter->columnIx]);
+	int valCount = countChars(copy, ',') + 1;
+	char *rowVals[valCount];
+	valCount = chopCommas(copy, rowVals);
+	match = matchArray(filterVals, rowVals, valCount);
+	}
+    else
+	match = matchOneVal(filterVals, row[filter->columnIx]);
+    if (filter->op == afMatch)
+	fail = !match;
+    else
+	fail = match;
+    }
+else
+    {
+    // column is a number -- integer or floating point?
+    enum asTypes type = filter->type;
+    if (filter->isList)
+	errAbort("annoFilterRowFails: time to implement numeric lists!");
+    if (asTypesIsFloating(type))
+	fail = annoFilterDouble(filter, sqlDouble(row[filter->columnIx]));
+    else if (asTypesIsInt(type))
+	fail = annoFilterLongLong(filter, sqlLongLong(row[filter->columnIx]));
+    else
+	errAbort("annoFilterRowFails: unexpected enum asTypes %d for numeric filter op %d",
+		 type, filter->op);
+    }
+if ((filter->isExclude && !fail) || (!filter->isExclude && fail))
+    return TRUE;
+return FALSE;
+}
+
+boolean annoFilterRowFails(struct annoFilter *filterList, char **row, int rowSize,
+			   boolean *retRightJoin)
+/* Apply filters to row, using autoSql column definitions to interpret
+ * each word of row.  Return TRUE if any filter fails (or passes, if isExclude).
+ * Set retRightJoin to TRUE if a rightJoin filter has failed. */
+{
+if (retRightJoin != NULL)
+    *retRightJoin = FALSE;
+boolean hasRightJoin = FALSE;
+struct annoFilter *filter;
+// First pass: left-join filters (failure means ignore this row);
+for (filter = filterList;  filter != NULL;  filter = filter->next)
+    {
+    if (filter->op == afNoFilter || filter->values == NULL || filter->rightJoin)
+	{
+	hasRightJoin = TRUE;
+	continue;
+	}
+    if (singleFilter(filter, row, rowSize))
+	return TRUE;
+    }
+// Second pass: right-join filters (failure means omit not only this row, but the primary row too)
+if (hasRightJoin)
+    {
+    for (filter = filterList;  filter != NULL;  filter = filter->next)
+	{
+	if (filter->op == afNoFilter || filter->values == NULL || !filter->rightJoin)
+	    continue;
+	if (singleFilter(filter, row, rowSize))
+	    {
+	    if (retRightJoin != NULL)
+		*retRightJoin = TRUE;
+	    return TRUE;
+	    }
+	}
+    }
+return FALSE;
+}
+
+boolean annoFilterWigValueFails(struct annoFilter *filterList, double value,
+				boolean *retRightJoin)
+/* Apply filters to value.  Return TRUE if any filter fails (or passes, if isExclude).
+ * Set retRightJoin to TRUE if a rightJoin filter has failed. */
+{
+if (retRightJoin != NULL)
+    *retRightJoin = FALSE;
+struct annoFilter *filter;
+// First pass: left-join filters (failure means omit this row from output);
+for (filter = filterList; filter != NULL; filter = filter->next)
+    {
+    if (filter->op == afNoFilter || filter->rightJoin)
+	continue;
+    boolean fail = annoFilterDouble(filter, value);
+    if ((filter->isExclude && !fail) || (!filter->isExclude && fail))
+	return TRUE;
+    }
+// Second pass: right-join filters (failure means omit not only this row, but the primary row too)
+for (filter = filterList; filter != NULL; filter = filter->next)
+    {
+    if (filter->op == afNoFilter || !filter->rightJoin)
+	continue;
+    boolean fail = annoFilterDouble(filter, value);
+    if ((filter->isExclude && !fail) || (!filter->isExclude && fail))
+	{
+	if (retRightJoin != NULL)
+	    *retRightJoin = TRUE;
+	return TRUE;
+	}
+    }
+return FALSE;
+}
+
+enum annoFilterOp afOpFromString(char *string)
+/* Translate string (e.g. "afNotEqual") into enum value (e.g. afNotEqual). */
+{
+if (sameString(string, "afNoFilter"))
+    return afNoFilter;
+else if (sameString(string, "afMatch"))
+    return afMatch;
+else if (sameString(string, "afNotMatch"))
+    return afNotMatch;
+else if (sameString(string, "afLT"))
+    return afLT;
+else if (sameString(string, "afLTE"))
+    return afLTE;
+else if (sameString(string, "afEqual"))
+    return afEqual;
+else if (sameString(string, "afNotEqual"))
+    return afNotEqual;
+else if (sameString(string, "afGTE"))
+    return afGTE;
+else if (sameString(string, "afGT"))
+    return afGT;
+else if (sameString(string, "afInRange"))
+    return afInRange;
+else
+    errAbort("afOpFromString: Can't translate \"%s\" into enum annoFilterOp", string);
+// happy compiler, never get here:
+return afNoFilter;
+}
+
+char *stringFromAfOp(enum annoFilterOp op)
+/* Translate op into a string.  Do not free result. */
+{
+char *str = "afNoFilter";
+switch (op)
+    {
+    case afNoFilter:
+	break;
+    case afMatch:
+	str = "afMatch";
+    case afNotMatch:
+	str = "afNotMatch";
+	break;
+    case afLT:
+	str = "afLT";
+	break;
+    case afLTE:
+	str = "afLTE";
+	break;
+    case afEqual:
+	str = "afEqual";
+	break;
+    case afNotEqual:
+	str = "afNotEqual";
+	break;
+    case afGTE:
+	str = "afGTE";
+	break;
+    case afGT:
+	str = "afGT";
+	break;
+    case afInRange:
+	str = "afInRange";
+	break;
+    default:
+	errAbort("stringFromAfOp: unrecognized enum annoFilterOp %d", op);
+    }
+return str;
+}
diff --git a/gbtools/src/blatSrc/lib/annoFormatTab.c b/gbtools/src/blatSrc/lib/annoFormatTab.c
new file mode 100644
index 0000000..a8f1d45
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/annoFormatTab.c
@@ -0,0 +1,230 @@
+/* annoFormatTab -- collect fields from all inputs and print them out, tab-separated. */
+
+/* Copyright (C) 2013 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "annoFormatTab.h"
+#include "annoGratorQuery.h"
+#include "dystring.h"
+
+struct annoFormatTab
+    {
+    struct annoFormatter formatter;
+    char *fileName;
+    FILE *f;
+    boolean needHeader;			// TRUE if we should print out the header
+    };
+
+static void printHeaderColumns(FILE *f, struct annoStreamer *source, boolean isFirst)
+/* Print names of included columns from this source. */
+{
+if (source->rowType == arWig)
+    {
+    // Fudge in the row's chrom, start, end as output columns even though they're not in autoSql
+    if (isFirst)
+	{
+	fputs("#chrom", f);
+	isFirst = FALSE;
+	}
+    fputs("\tstart\tend", f);
+    }
+struct asColumn *col;
+int i;
+for (col = source->asObj->columnList, i = 0;  col != NULL;  col = col->next, i++)
+    {
+    if (isFirst && i == 0)
+	fputc('#', f);
+    else
+	fputc('\t', f);
+    fputs(col->name, f);
+    }
+}
+
+static void aftInitialize(struct annoFormatter *vSelf, struct annoStreamer *primary,
+			  struct annoStreamer *integrators)
+/* Print header, regardless of whether we get any data after this. */
+{
+struct annoFormatTab *self = (struct annoFormatTab *)vSelf;
+if (self->needHeader)
+    {
+    char *primaryHeader = primary->getHeader(primary);
+    if (isNotEmpty(primaryHeader))
+	fprintf(self->f, "# Header from primary input:\n%s", primaryHeader);
+    printHeaderColumns(self->f, primary, TRUE);
+    struct annoStreamer *grator;
+    for (grator = integrators;  grator != NULL;  grator = grator->next)
+	printHeaderColumns(self->f, grator, FALSE);
+    fputc('\n', self->f);
+    self->needHeader = FALSE;
+    }
+}
+
+static double wigRowAvg(struct annoRow *row)
+/* Return the average value of floats in row->data. */
+{
+float *vector = row->data;
+int len = row->end - row->start;
+double sum = 0.0;
+int i;
+for (i = 0;  i < len;  i++)
+    sum += vector[i];
+return sum / (double)len;
+}
+
+static char **wordsFromWigRowAvg(struct annoRow *row)
+/* Return an array of strings with a single string containing the average of values in row. */
+{
+double avg = wigRowAvg(row);
+char **words;
+AllocArray(words, 1);
+char avgStr[32];
+safef(avgStr, sizeof(avgStr), "%lf", avg);
+words[0] = cloneString(avgStr);
+return words;
+}
+
+static char **wordsFromWigRowVals(struct annoRow *row)
+/* Return an array of strings with a single string containing comma-sep per-base wiggle values. */
+{
+float *vector = row->data;
+int len = row->end - row->start;
+struct dyString *dy = dyStringNew(10*len);
+int i;
+for (i = 0;  i < len;  i++)
+    dyStringPrintf(dy, "%g,", vector[i]);
+char **words;
+AllocArray(words, 1);
+words[0] = dyStringCannibalize(&dy);
+return words;
+}
+
+static char **wordsFromRow(struct annoRow *row, struct annoStreamer *source,
+			   boolean *retFreeWhenDone)
+/* If source->rowType is arWords, return its words.  Otherwise translate row->data into words. */
+{
+if (row == NULL)
+    return NULL;
+boolean freeWhenDone = FALSE;
+char **words = NULL;
+if (source->rowType == arWords)
+    words = row->data;
+else if (source->rowType == arWig)
+    {
+    freeWhenDone = TRUE;
+    //#*** config options: avg? more stats? list of values?
+    boolean doAvg = FALSE;
+    if (doAvg)
+	words = wordsFromWigRowAvg(row);
+    else
+	words = wordsFromWigRowVals(row);
+    }
+else
+    errAbort("annoFormatTab: unrecognized row type %d from source %s",
+	     source->rowType, source->name);
+if (retFreeWhenDone != NULL)
+    *retFreeWhenDone = freeWhenDone;
+return words;
+}
+
+static void printColumns(FILE *f, struct annoStreamer *streamer, struct annoRow *row,
+			 boolean isFirst)
+/* Print columns in streamer's row (if NULL, print the right number of empty fields). */
+{
+boolean freeWhenDone = FALSE;
+char **words = wordsFromRow(row, streamer, &freeWhenDone);
+if (streamer->rowType == arWig)
+    {
+    // Fudge in the row's chrom, start, end as output columns even though they're not in autoSql
+    if (isFirst)
+	{
+	if (row != NULL)
+	    fputs(row->chrom, f);
+	isFirst = FALSE;
+	}
+    if (row != NULL)
+	fprintf(f, "\t%u\t%u", row->start, row->end);
+    else
+	fputs("\t\t", f);
+    }
+int colCount = slCount(streamer->asObj->columnList);
+int i;
+for (i = 0;  i < colCount;  i++)
+    {
+    if (!isFirst || i > 0)
+	fputc('\t', f);
+    if (words != NULL)
+	fputs((words[i] ? words[i] : ""), f);
+    }
+if (freeWhenDone)
+    {
+    freeMem(words[0]);
+    freeMem(words);
+    }
+}
+
+static void aftComment(struct annoFormatter *fSelf, char *content)
+/* Print out a comment line. */
+{
+if (strchr(content, '\n'))
+    errAbort("aftComment: no multi-line input");
+struct annoFormatTab *self = (struct annoFormatTab *)fSelf;
+fprintf(self->f, "# %s\n", content);
+}
+
+static void aftFormatOne(struct annoFormatter *vSelf, struct annoStreamRows *primaryData,
+			 struct annoStreamRows *gratorData, int gratorCount)
+/* Print out tab-separated columns that we have gathered in prior calls to aftCollect,
+ * and start over fresh for the next line of output. */
+{
+struct annoFormatTab *self = (struct annoFormatTab *)vSelf;
+// Got one row from primary; what's the largest # of rows from any grator?
+int maxRows = 1;
+int iG;
+for (iG = 0;  iG < gratorCount;  iG++)
+    {
+    int gratorRowCount = slCount(gratorData[iG].rowList);
+    if (gratorRowCount > maxRows)
+	maxRows = gratorRowCount;
+    }
+// Print out enough rows to make sure that all grator rows are included.
+int iR;
+for (iR = 0;  iR < maxRows;  iR++)
+    {
+    printColumns(self->f, primaryData->streamer, primaryData->rowList, TRUE);
+    for (iG = 0;  iG < gratorCount;  iG++)
+	{
+	struct annoRow *gratorRow = slElementFromIx(gratorData[iG].rowList, iR);
+	printColumns(self->f, gratorData[iG].streamer, gratorRow, FALSE);
+	}
+    fputc('\n', self->f);
+    }
+}
+
+static void aftClose(struct annoFormatter **pVSelf)
+/* Close file handle, free self. */
+{
+if (pVSelf == NULL)
+    return;
+struct annoFormatTab *self = *(struct annoFormatTab **)pVSelf;
+freeMem(self->fileName);
+carefulClose(&(self->f));
+annoFormatterFree(pVSelf);
+}
+
+struct annoFormatter *annoFormatTabNew(char *fileName)
+/* Return a formatter that will write its tab-separated output to fileName. */
+{
+struct annoFormatTab *aft;
+AllocVar(aft);
+struct annoFormatter *formatter = &(aft->formatter);
+formatter->getOptions = annoFormatterGetOptions;
+formatter->setOptions = annoFormatterSetOptions;
+formatter->initialize = aftInitialize;
+formatter->comment = aftComment;
+formatter->formatOne = aftFormatOne;
+formatter->close = aftClose;
+aft->fileName = cloneString(fileName);
+aft->f = mustOpen(fileName, "w");
+aft->needHeader = TRUE;
+return (struct annoFormatter *)aft;
+}
diff --git a/gbtools/src/blatSrc/lib/annoFormatter.c b/gbtools/src/blatSrc/lib/annoFormatter.c
new file mode 100644
index 0000000..ce97114
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/annoFormatter.c
@@ -0,0 +1,29 @@
+/* annoFormatter -- aggregates, formats and writes output from multiple sources */
+
+/* Copyright (C) 2013 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "annoFormatter.h"
+
+struct annoOption *annoFormatterGetOptions(struct annoFormatter *self)
+/* Return supported options and current settings.  Callers can modify and free when done. */
+{
+return annoOptionCloneList(self->options);
+}
+
+void annoFormatterSetOptions(struct annoFormatter *self, struct annoOption *newOptions)
+/* Free old options and use clone of newOptions. */
+{
+annoOptionFreeList(&(self->options));
+self->options = annoOptionCloneList(newOptions);
+}
+
+void annoFormatterFree(struct annoFormatter **pSelf)
+/* Free self. This should be called at the end of subclass close methods, after
+ * subclass-specific connections are closed and resources are freed. */
+{
+if (pSelf == NULL)
+    return;
+annoOptionFreeList(&((*pSelf)->options));
+freez(pSelf);
+}
diff --git a/gbtools/src/blatSrc/lib/annoGrateWig.c b/gbtools/src/blatSrc/lib/annoGrateWig.c
new file mode 100644
index 0000000..47cda06
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/annoGrateWig.c
@@ -0,0 +1,112 @@
+/* annoGrateWig -- subclass of annoGrator for bigWig or wiggle data */
+
+/* Copyright (C) 2013 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "annoGrateWig.h"
+#include "annoStreamBigWig.h"
+
+struct annoGrateWig
+{
+    struct annoGrator grator;		// external annoGrator interface
+    struct annoGrator *mySource;	// internal annoGrator of wigDb rows
+    struct lm *lm;			// localmem for rows from mySource
+    int lmRowCount;			// counter for periodic cleanup
+};
+
+static void tidyUp(const struct annoRow *rowIn, struct annoRow **pOutList,
+		   uint primaryStart, uint primaryEnd, struct lm *callerLm)
+/* This takes a wiggle chunk coming from a .wig/database row and makes it into
+ * zero or more tidy little NAN-less annoRows.  Trim rowIn to the bounds of
+ * primary, trim NANs from beginning and break into multiple rows where there
+ * are NANs in the middle.  If the rowIn is contiguous with the row at the
+ * head of outList, expand that row to include rowIn's data. */
+{
+uint start = max(rowIn->start, primaryStart);
+uint end = min(rowIn->end, primaryEnd);
+float *vector = rowIn->data;
+while (end > start)
+    {
+    uint offset = start - rowIn->start;
+    if (vector[offset] == NAN)
+	start++;
+    else
+	{
+	// If there is a NAN before end, that's the end of this row:
+	uint thisEnd = start;
+	while (thisEnd < end && vector[thisEnd - rowIn->start] != NAN)
+	    thisEnd++;
+	struct annoRow *headRow = *pOutList;
+	if (headRow == NULL || rowIn->start > headRow->end)
+	    {
+	    // allocate a new row
+	    struct annoRow *rowOut = annoRowWigNew(rowIn->chrom, start, thisEnd, FALSE,
+						   vector + offset, callerLm);
+	    slAddHead(pOutList, rowOut);
+	    }
+	else
+	    {
+	    // glom new data onto headRow
+	    assert(thisEnd > headRow->end);
+	    uint oldEnd = headRow->end;
+	    uint oldLen = oldEnd - headRow->start;
+	    uint newLen = thisEnd - headRow->start;
+	    headRow->data = lmAllocMoreMem(callerLm, headRow->data, oldLen*sizeof(vector[0]),
+					   newLen*sizeof(vector[0]));
+	    headRow->end = thisEnd;
+	    float *newData = (float *)rowIn->data + (oldEnd - rowIn->start);
+	    float *newSpace = (float *)headRow->data + oldLen;
+	    CopyArray(newData, newSpace, (thisEnd - oldEnd));
+	    }
+	start = thisEnd;
+	}
+    }
+}
+
+static struct annoRow *agwIntegrate(struct annoGrator *gSelf, struct annoStreamRows *primaryData,
+				    boolean *retRJFilterFailed, struct lm *callerLm)
+/* Return wig annoRows that overlap primaryRow position, with NANs weeded out. */
+{
+struct annoGrateWig *self = (struct annoGrateWig *)gSelf;
+// Cleanup internal lm every so often:
+if (self->lmRowCount >= 4096)
+    {
+    lmCleanup(&(self->lm));
+    self->lmRowCount = 0;
+    }
+if (self->lm == NULL)
+    self->lm = lmInit(0);
+struct annoRow *rowsIn = annoGratorIntegrate(self->mySource, primaryData, retRJFilterFailed,
+					     self->lm);
+self->lmRowCount += slCount(rowsIn);
+if (retRJFilterFailed && *retRJFilterFailed)
+    return NULL;
+struct annoRow *primaryRow = primaryData->rowList;
+struct annoRow *rowIn, *rowOutList = NULL;;
+for (rowIn = rowsIn;  rowIn != NULL;  rowIn = rowIn->next)
+    tidyUp(rowIn, &rowOutList, primaryRow->start, primaryRow->end, callerLm);
+slReverse(&rowOutList);
+return rowOutList;
+}
+
+struct annoGrator *annoGrateWigNew(struct annoStreamer *wigSource)
+/* Create an annoGrator subclass for source with rowType == arWig. */
+{
+if (wigSource->rowType != arWig)
+    errAbort("annoGrateWigNew: expected source->rowType arWig (%d), got %d from source %s",
+	     arWig, wigSource->rowType, wigSource->name);
+struct annoGrateWig *self;
+AllocVar(self);
+struct annoGrator *gSelf = (struct annoGrator *)self;
+annoGratorInit(gSelf, wigSource);
+gSelf->integrate = agwIntegrate;
+self->mySource = annoGratorNew(wigSource);
+return gSelf;
+}
+
+struct annoGrator *annoGrateBigWigNew(char *fileOrUrl, struct annoAssembly *aa)
+/* Create an annoGrator subclass for bigWig file or URL. */
+{
+struct annoStreamer *bigWigSource = annoStreamBigWigNew(fileOrUrl, aa);
+return annoGrateWigNew(bigWigSource);
+}
diff --git a/gbtools/src/blatSrc/lib/annoGrator.c b/gbtools/src/blatSrc/lib/annoGrator.c
new file mode 100644
index 0000000..15a2396
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/annoGrator.c
@@ -0,0 +1,291 @@
+/* annoGrator -- join two inputs on position, keeping all original fields intact. */
+
+/* Copyright (C) 2013 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "annoGrator.h"
+
+INLINE void agCheckPrimarySorting(struct annoGrator *self, struct annoRow *primaryRow)
+/* Die if primaryRow seems to have arrived out of order. */
+{
+if (self->prevPChrom == NULL)
+    self->prevPChrom = cloneString(primaryRow->chrom);
+else if (differentString(primaryRow->chrom, self->prevPChrom))
+    {
+    if (strcmp(primaryRow->chrom, self->prevPChrom) < 0)
+	errAbort("annoGrator %s: Unsorted input from primary source (%s < %s)",
+		 self->streamer.name, primaryRow->chrom, self->prevPChrom);
+    self->prevPChrom = cloneString(primaryRow->chrom);
+    }
+else if (primaryRow->start < self->prevPStart)
+    errAbort("annoGrator %s: Unsorted input from primary source (%s, %u < %u)",
+	     self->streamer.name, primaryRow->chrom, primaryRow->start, self->prevPStart);
+self->prevPStart = primaryRow->start;
+}
+
+INLINE void agTrimToStart(struct annoGrator *self, char *chrom, uint start)
+/* If queue contains items whose end is to the left of start, splice them out. */
+{
+struct annoRow *qRow, *prevQRow = NULL, *nextQRow;
+for (qRow = self->qHead;  qRow != NULL;  qRow = nextQRow)
+    {
+    nextQRow = qRow->next;
+    int cDifRowP = strcmp(qRow->chrom, chrom);
+    if (cDifRowP > 0 || (cDifRowP == 0 && qRow->start >= start))
+	break;
+    else if (cDifRowP < 0 || qRow->end < start)
+	{
+	if (prevQRow == NULL)
+	    self->qHead = qRow->next;
+	else
+	    prevQRow->next = qRow->next;
+	if (self->qTail == qRow)
+	    self->qTail = prevQRow;
+	}
+    else
+	prevQRow = qRow;
+    }
+if (self->qHead == NULL)
+    {
+    // Queue is empty - clean up lm
+    lmCleanup(&(self->qLm));
+    self->qLm = lmInit(0);
+    self->qSkippedCount = 0;
+    }
+}
+
+INLINE void agCheckInternalSorting(struct annoGrator *self, struct annoRow *newRow)
+/* Die if newRow precedes qTail. */
+{
+if (self->qTail != NULL)
+    {
+    int cDifNewTail = strcmp(newRow->chrom, self->qTail->chrom);
+    if (cDifNewTail < 0)
+	errAbort("annoGrator %s: Unsorted input from internal source %s (%s < %s)",
+		 self->streamer.name, self->mySource->name, newRow->chrom, self->qTail->chrom);
+    else if (cDifNewTail == 0 && newRow->start < self->qTail->start)
+	errAbort("annoGrator %s: Unsorted input from internal source %s (%s, %u < %u)",
+		 self->streamer.name, self->mySource->name,
+		 newRow->chrom, newRow->start, self->qTail->start);
+    }
+}
+
+INLINE void agFetchToEnd(struct annoGrator *self, char *chrom, uint start, uint end)
+/* Fetch rows until we are sure we have all items that start to the left of end,
+ * i.e. we have an item that starts at/after end or we hit eof. */
+{
+while (!self->eof &&
+       (self->qTail == NULL || strcmp(self->qTail->chrom, chrom) < 0 ||
+	(sameString(self->qTail->chrom, chrom) && self->qTail->start < end)))
+    {
+    struct annoRow *newRow = self->mySource->nextRow(self->mySource, chrom, start, self->qLm);
+    if (newRow == NULL)
+	self->eof = TRUE;
+    else
+	{
+	agCheckInternalSorting(self, newRow);
+	int cDifNewP = strcmp(newRow->chrom, chrom);
+	if (cDifNewP >= 0)
+	    {
+	    // Add newRow to qTail
+	    if (self->qTail == NULL)
+		{
+		if (self->qHead != NULL)
+		    errAbort("annoGrator %s: qTail is NULL but qHead is non-NULL",
+			     self->streamer.name);
+		self->qHead = self->qTail = newRow;
+		}
+	    else
+		{
+		self->qTail->next = newRow;
+		self->qTail = newRow;
+		}
+	    if (cDifNewP > 0)
+		// newRow->chrom comes after chrom; we're done for now
+		break;
+	    }
+	// If we're skipping past large regions, keep qLm size under control:
+	else
+	    {
+	    self->qSkippedCount++;
+	    if (self->qSkippedCount > 1024 && self->qHead == NULL && self->qTail == NULL)
+		{
+		lmCleanup(&(self->qLm));
+		self->qLm = lmInit(0);
+		self->qSkippedCount = 0;
+		}
+	    }
+	}
+    }
+}
+
+struct annoRow *annoGratorIntegrate(struct annoGrator *self, struct annoStreamRows *primaryData,
+				    boolean *retRJFilterFailed, struct lm *callerLm)
+/* Given a single row from the primary source, get all overlapping rows from internal
+ * source, and produce joined output rows.
+ * If retRJFilterFailed is non-NULL:
+ * - any overlapping row has a rightJoin filter failure (see annoFilter.h), or
+ * - overlap rule is agoMustOverlap and no rows overlap, or
+ * - overlap rule is agoMustNotOverlap and any overlapping row is found,
+ * then set retRJFilterFailed and stop. */
+{
+struct annoRow *primaryRow = primaryData->rowList;
+struct annoRow *rowList = NULL;
+agCheckPrimarySorting(self, primaryRow);
+// In order to catch the intersection of two 0-length elements (i.e. two insertions),
+// we have to broaden our search a little:
+int pStart = primaryRow->start, pEnd = primaryRow->end;
+if (pStart == pEnd)
+    {
+    pStart--;
+    pEnd++;
+    }
+char *pChrom = primaryRow->chrom;
+agTrimToStart(self, pChrom, pStart);
+agFetchToEnd(self, pChrom, pStart, pEnd);
+boolean rjFailHard = (retRJFilterFailed != NULL);
+if (rjFailHard)
+    *retRJFilterFailed = FALSE;
+struct annoRow *qRow;
+for (qRow = self->qHead;  qRow != NULL;  qRow = qRow->next)
+    {
+    if (qRow->start < pEnd && qRow->end > pStart && sameString(qRow->chrom, pChrom))
+	{
+	int numCols = self->mySource->numCols;
+	enum annoRowType rowType = self->mySource->rowType;
+	slAddHead(&rowList, annoRowClone(qRow, rowType, numCols, callerLm));
+	if (rjFailHard && qRow->rightJoinFail)
+	    {
+	    *retRJFilterFailed = TRUE;
+	    break;
+	    }
+	}
+    }
+slReverse(&rowList);
+// If no rows overlapped primary, and there is a right-join, !isExclude (i.e. isInclude) filter,
+// then we need to set retRJFilterFailed because the condition was not met to include
+// the primary item.
+if (retRJFilterFailed &&
+    ((rowList == NULL && (self->haveRJIncludeFilter || self->overlapRule == agoMustOverlap)) ||
+     (rowList != NULL && self->overlapRule == agoMustNotOverlap)))
+    *retRJFilterFailed = TRUE;
+return rowList;
+}
+
+void annoGratorClose(struct annoStreamer **pSelf)
+/* Free self (including mySource). */
+{
+if (pSelf == NULL)
+    return;
+struct annoGrator *self = *(struct annoGrator **)pSelf;
+lmCleanup(&(self->qLm));
+self->mySource->close(&(self->mySource));
+freeMem(self->prevPChrom);
+freez(pSelf);
+}
+
+static struct annoRow *noNextRow(struct annoStreamer *self, char *minChrom, uint minEnd,
+				 struct lm *callerLm)
+/* nextRow() is N/A for annoGrator, which needs caller to use integrate() instead. */
+{
+errAbort("annoGrator %s: nextRow() called, but integrate() should be called instead",
+	 self->name);
+return NULL;
+}
+
+static void agReset(struct annoGrator *self)
+/* Reset all state associated with position */
+{
+freez(&(self->prevPChrom));
+self->prevPStart = 0;
+self->eof = FALSE;
+lmCleanup(&(self->qLm));
+self->qLm = lmInit(0);
+self->qHead = self->qTail = NULL;
+self->qSkippedCount = 0;
+}
+
+static boolean filtersHaveRJInclude(struct annoFilter *filters)
+/* Return TRUE if filters have at least one active filter with !isExclude && rightJoin. */
+{
+struct annoFilter *filter;
+for (filter = filters;  filter != NULL;  filter = filter->next)
+    if (filter->op != afNoFilter && !filter->isExclude && filter->rightJoin)
+	return TRUE;
+return FALSE;
+}
+
+static void agSetFilters(struct annoStreamer *vSelf, struct annoFilter *newFilters)
+/* Replace filters and re-evaluate self->haveRJIncludeFilter. Apply filters to
+ * own streamer interface and to internal source. */
+{
+annoStreamerSetFilters(vSelf, newFilters);
+struct annoGrator *self = (struct annoGrator *)vSelf;
+self->haveRJIncludeFilter = filtersHaveRJInclude(vSelf->filters);
+self->mySource->setFilters(self->mySource, newFilters);
+}
+
+static void agAddFilters(struct annoStreamer *vSelf, struct annoFilter *newFilters)
+/* Add filters and re-evaluate self->haveRJIncludeFilter. Apply filters to
+ * own streamer interface and to internal source. */
+{
+annoStreamerAddFilters(vSelf, newFilters);
+struct annoGrator *self = (struct annoGrator *)vSelf;
+annoStreamerSetFilters(self->mySource, vSelf->filters);
+self->haveRJIncludeFilter = filtersHaveRJInclude(vSelf->filters);
+}
+
+void annoGratorSetRegion(struct annoStreamer *vSelf, char *chrom, uint rStart, uint rEnd)
+/* Set genomic region for query, and reset internal state. */
+{
+struct annoGrator *self = (struct annoGrator *)vSelf;
+self->mySource->setRegion((struct annoStreamer *)(self->mySource), chrom, rStart, rEnd);
+agReset(self);
+}
+
+static void agSetAutoSqlObject(struct annoStreamer *sSelf, struct asObject *asObj)
+/* Use new asObj and update internal state derived from asObj. */
+{
+struct annoGrator *gSelf = (struct annoGrator *)sSelf;
+annoStreamerSetAutoSqlObject(sSelf, asObj);
+gSelf->haveRJIncludeFilter = filtersHaveRJInclude(sSelf->filters);
+}
+
+void agSetOverlapRule(struct annoGrator *self, enum annoGratorOverlap rule)
+/* Tell annoGrator how to handle overlap of its rows with primary row. */
+{
+self->overlapRule = rule;
+}
+
+void annoGratorInit(struct annoGrator *self, struct annoStreamer *mySource)
+/* Initialize an integrator of columns from mySource with (positions of)
+ * rows passed to integrate().
+ * mySource becomes property of the annoGrator. */
+{
+struct annoStreamer *streamer = &(self->streamer);
+annoStreamerInit(streamer, mySource->assembly, mySource->getAutoSqlObject(mySource),
+		 mySource->name);
+streamer->rowType = mySource->rowType;
+streamer->setAutoSqlObject = agSetAutoSqlObject;
+streamer->setFilters = agSetFilters;
+streamer->addFilters = agAddFilters;
+streamer->setRegion = annoGratorSetRegion;
+streamer->nextRow = noNextRow;
+streamer->close = annoGratorClose;
+self->qLm = lmInit(0);
+self->integrate = annoGratorIntegrate;
+self->setOverlapRule = agSetOverlapRule;
+self->overlapRule = agoNoConstraint;
+self->mySource = mySource;
+self->haveRJIncludeFilter = filtersHaveRJInclude(streamer->filters);
+}
+
+struct annoGrator *annoGratorNew(struct annoStreamer *mySource)
+/* Make a new integrator of columns from mySource with (positions of) rows passed to integrate().
+ * mySource becomes property of the new annoGrator. */
+{
+struct annoGrator *self;
+AllocVar(self);
+annoGratorInit(self, mySource);
+return self;
+}
diff --git a/gbtools/src/blatSrc/lib/annoGratorQuery.c b/gbtools/src/blatSrc/lib/annoGratorQuery.c
new file mode 100644
index 0000000..97cb506
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/annoGratorQuery.c
@@ -0,0 +1,150 @@
+/* annoGratorQuery -- framework for integrating genomic annotations from many sources */
+
+/* Copyright (C) 2013 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "annoGratorQuery.h"
+#include "dystring.h"
+#include "errAbort.h"
+#include "obscure.h"
+
+struct annoGratorQuery
+/* Representation of a complex query: multiple sources, each with its own filters,
+ * output data and means of integration, aggregated and output by a formatter. */
+    {
+    struct annoAssembly *assembly;	// Genome assembly to which annotations belong
+    struct annoStreamer *primarySource;	// Annotations to be integrated with other annos.
+    struct annoGrator *integrators;	// Annotations & methods for integrating w/primary
+    struct annoFormatter *formatters;	// Writers of output collected from primary & intg's
+    };
+
+struct annoGratorQuery *annoGratorQueryNew(struct annoAssembly *assembly,
+					   struct annoStreamer *primarySource,
+					   struct annoGrator *integrators,
+					   struct annoFormatter *formatters)
+/* Create an annoGratorQuery from all of its components, and introduce components to each other.
+ * integrators may be NULL.  All other inputs must be non-NULL. */
+{
+if (assembly == NULL)
+    errAbort("annoGratorQueryNew: assembly can't be NULL");
+if (primarySource == NULL)
+    errAbort("annoGratorQueryNew: primarySource can't be NULL");
+if (formatters == NULL)
+    errAbort("annoGratorQueryNew: formatters can't be NULL");
+struct annoGratorQuery *query = NULL;
+AllocVar(query);
+query->assembly = assembly;
+query->primarySource = primarySource;
+query->integrators = integrators;
+query->formatters = formatters;
+struct annoFormatter *formatter;
+for (formatter = query->formatters;  formatter != NULL;  formatter = formatter->next)
+    formatter->initialize(formatter, primarySource, (struct annoStreamer *)integrators);
+return query;
+}
+
+void annoGratorQuerySetRegion(struct annoGratorQuery *query, char *chrom, uint rStart, uint rEnd)
+/* Set genomic region for query; if chrom is NULL, position is whole genome. */
+{
+if (chrom != NULL)
+    {
+    uint chromSize = annoAssemblySeqSize(query->assembly, chrom);
+    if (rEnd < rStart)
+	errAbort("annoGratorQuerySetRegion: rStart (%u) can't be greater than rEnd (%u)",
+		 rStart, rEnd);
+    if (rEnd > chromSize)
+	errAbort("annoGratorQuerySetRegion: rEnd (%u) can't be greater than chrom %s size (%u)",
+		 rEnd, chrom, chromSize);
+    if (rEnd == 0)
+	rEnd = chromSize;
+    }
+// Alert all streamers that they should now send data from a possibly different region:
+query->primarySource->setRegion(query->primarySource, chrom, rStart, rEnd);
+struct annoStreamer *grator = (struct annoStreamer *)(query->integrators);
+for (;  grator != NULL;  grator = grator->next)
+    grator->setRegion(grator, chrom, rStart, rEnd);
+}
+
+void annoGratorQueryExecute(struct annoGratorQuery *query)
+/* For each annoRow from query->primarySource, invoke integrators and pass their annoRows
+ * to formatters. */
+{
+struct annoStreamer *primarySrc = query->primarySource;
+struct annoStreamRows *primaryData = annoStreamRowsNew(primarySrc);
+struct annoStreamRows *gratorData = NULL;
+int gratorCount = slCount(query->integrators);
+if (gratorCount > 0)
+    {
+    struct annoStreamer *gratorStreamList = (struct annoStreamer *)query->integrators;
+    gratorData = annoStreamRowsNew(gratorStreamList);
+    }
+char *regionChrom = primarySrc->chrom;
+struct annoRow *primaryRow = NULL;
+struct lm *lm = lmInit(0);
+boolean gotPrimaryData = FALSE;
+while ((primaryRow = primarySrc->nextRow(primarySrc, NULL, 0, lm)) != NULL)
+    {
+    if (regionChrom != NULL && strcmp(primaryRow->chrom, regionChrom) > 0)
+	{
+	// primarySrc's first row is on some chromosome past regionChrom, i.e. it has no
+	// items on regionChrom.
+	break;
+	}
+    if (primaryRow->rightJoinFail)
+	continue;
+    gotPrimaryData = TRUE;
+    primaryData->rowList = primaryRow;
+    boolean rjFilterFailed = FALSE;
+    int i;
+    for (i = 0;  i < gratorCount;  i++)
+	{
+
+	struct annoGrator *grator = (struct annoGrator *)gratorData[i].streamer;
+	gratorData[i].rowList = grator->integrate(grator, primaryData, &rjFilterFailed, lm);
+	if (rjFilterFailed)
+	    break;
+	}
+    struct annoFormatter *formatter = NULL;
+    for (formatter = query->formatters;  formatter != NULL;  formatter = formatter->next)
+	if (!rjFilterFailed)
+	    formatter->formatOne(formatter, primaryData, gratorData, gratorCount);
+    lmCleanup(&lm);
+    lm = lmInit(0);
+    }
+if (!gotPrimaryData)
+    {
+    struct dyString *dy = dyStringCreate("No data from %s", primarySrc->name);
+    if (regionChrom != NULL)
+	dyStringPrintf(dy, " in range %s:%d-%d; try changing 'region to annotate' to 'genome'",
+		       regionChrom, primarySrc->regionStart, primarySrc->regionEnd);
+    struct annoFormatter *formatter = NULL;
+    for (formatter = query->formatters;  formatter != NULL;  formatter = formatter->next)
+	formatter->comment(formatter, dy->string);
+    dyStringFree(&dy);
+    }
+freez(&primaryData);
+freez(&gratorData);
+lmCleanup(&lm);
+}
+
+void annoGratorQueryFree(struct annoGratorQuery **pQuery)
+/* Close and free all inputs and outputs; free self. */
+{
+if (pQuery == NULL)
+    return;
+struct annoGratorQuery *query = *pQuery;
+query->primarySource->close(&(query->primarySource));
+struct annoStreamer *grator = (struct annoStreamer *)(query->integrators), *nextGrator;
+for (;  grator != NULL;  grator = nextGrator)
+    {
+    nextGrator = grator->next;
+    grator->close(&grator);
+    }
+struct annoFormatter *formatter, *nextFormatter;
+for (formatter = query->formatters;  formatter != NULL;  formatter = nextFormatter)
+    {
+    nextFormatter = formatter->next;
+    formatter->close(&formatter);
+    }
+freez(pQuery);
+}
diff --git a/gbtools/src/blatSrc/lib/annoOption.c b/gbtools/src/blatSrc/lib/annoOption.c
new file mode 100644
index 0000000..bb8ac6d
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/annoOption.c
@@ -0,0 +1,100 @@
+/* annoOption -- optionSpec-style param plus its value */
+
+/* Copyright (C) 2013 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "annoOption.h"
+
+struct annoOption *annoOptionCloneList(struct annoOption *list)
+/* Return a newly allocated copy of list. */
+{
+struct annoOption *newList = NULL, *afo;
+for (afo = list;  afo != NULL;  afo = afo->next)
+    {
+    struct annoOption *newAfo = CloneVar(afo);
+    newAfo->spec.name = cloneString(afo->spec.name);
+    newAfo->value = NULL;
+    unsigned opFlags = afo->spec.flags;
+    if (opFlags & OPTION_MULTI)
+	{
+	switch (opFlags & OPTION_TYPE_MASK)
+	    {
+	    case OPTION_STRING:
+		newAfo->value = slNameCloneList((struct slName *)(afo->value));
+		break;
+	    default:
+		errAbort("annoOptionCloneList: OPTION_MULTI implemented only for "
+			 "OPTION_STRING (not 0x%x)", opFlags);
+	    }
+	}
+    else
+	{
+	switch (opFlags & OPTION_TYPE_MASK)
+	    {
+	    // For numeric singleton values, we are overloading value.
+	    case OPTION_DOUBLE:
+	    case OPTION_FLOAT:
+	    case OPTION_LONG_LONG:
+	    case OPTION_INT:
+	    case OPTION_BOOLEAN:
+		newAfo->value = afo->value;
+		break;
+	    case OPTION_STRING:
+		newAfo->value = cloneString((char *)afo->value);
+		break;
+	    default:
+		errAbort("annoOptionCloneList: unrecognized op type 0x%x", opFlags);
+	    }
+	}
+    slAddHead(&newList, newAfo);
+    }
+slReverse(&newList);
+return newList;
+}
+
+void annoOptionFreeList(struct annoOption **pList)
+/* Free the same things that we clone above. */
+{
+if (pList == NULL)
+    return;
+struct annoOption *afo, *nextAfo;
+for (afo = *pList;  afo != NULL;  afo = nextAfo)
+    {
+    nextAfo = afo->next;
+    freeMem(afo->spec.name);
+    unsigned opFlags = afo->spec.flags;
+    if (opFlags & OPTION_MULTI)
+	{
+	switch (opFlags & OPTION_TYPE_MASK)
+	    {
+	    case OPTION_STRING:
+		slNameFreeList(&(afo->value));
+		break;
+	    default:
+		errAbort("annoOptionFreeList: OPTION_MULTI implemented only for "
+			 "OPTION_STRING (not 0x%x)", opFlags);
+	    }
+	}
+    else
+	{
+	switch (opFlags & OPTION_TYPE_MASK)
+	    {
+	    // No need to free overloaded numeric values
+	    case OPTION_DOUBLE:
+	    case OPTION_FLOAT:
+	    case OPTION_LONG_LONG:
+	    case OPTION_INT:
+	    case OPTION_BOOLEAN:
+		break;
+	    case OPTION_STRING:
+		freeMem(afo->value);
+		break;
+	    default:
+		errAbort("annoOptionFreeList: unrecognized op type 0x%x", opFlags);
+	    }
+	}
+    freeMem(afo);
+    }
+*pList = NULL;
+}
+
diff --git a/gbtools/src/blatSrc/lib/annoRow.c b/gbtools/src/blatSrc/lib/annoRow.c
new file mode 100644
index 0000000..d5b0acf
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/annoRow.c
@@ -0,0 +1,73 @@
+/* annoRow -- basic data interchange unit of annoGratorQuery framework. */
+
+/* Copyright (C) 2013 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "annoRow.h"
+
+struct annoRow *annoRowFromStringArray(char *chrom, uint start, uint end, boolean rightJoinFail,
+				       char **wordsIn, int numCols, struct lm *lm)
+/* Allocate & return an annoRow with words cloned from wordsIn. */
+{
+struct annoRow *aRow;
+lmAllocVar(lm, aRow);
+aRow->chrom = lmCloneString(lm, chrom);
+aRow->start = start;
+aRow->end = end;
+aRow->rightJoinFail = rightJoinFail;
+char **words;
+lmAllocArray(lm, words, numCols);
+int i;
+for (i = 0;  i < numCols;  i++)
+    words[i] = lmCloneString(lm, wordsIn[i]);
+aRow->data = words;
+return aRow;
+}
+
+struct annoRow *annoRowWigNew(char *chrom, uint start, uint end, boolean rightJoinFail,
+			      float *values, struct lm *lm)
+/* Allocate & return an annoRowWig, with clone of values; length of values is (end-start). */
+{
+struct annoRow *row;
+lmAllocVar(lm, row);
+row->chrom = lmCloneString(lm, chrom);
+row->start = start;
+row->end = end;
+row->data = lmCloneMem(lm, values, (end - start) * sizeof(values[0]));
+row->rightJoinFail = rightJoinFail;
+return row;
+}
+
+struct annoRow *annoRowClone(struct annoRow *rowIn, enum annoRowType rowType, int numCols,
+			     struct lm *lm)
+/* Allocate & return a single annoRow cloned from rowIn.  If rowIn is NULL, return NULL.
+ * If type is arWig, numCols is ignored. */
+{
+if (rowIn == NULL)
+    return NULL;
+if (rowType == arWords)
+    return annoRowFromStringArray(rowIn->chrom, rowIn->start, rowIn->end, rowIn->rightJoinFail,
+				  rowIn->data, numCols, lm);
+else if (rowType == arWig)
+    return annoRowWigNew(rowIn->chrom, rowIn->start, rowIn->end, rowIn->rightJoinFail,
+			 (float *)rowIn->data, lm);
+else
+    errAbort("annoRowClone: unrecognized type %d", rowType);
+return NULL;
+}
+
+int annoRowCmp(const void *va, const void *vb)
+/* Compare two annoRows' {chrom, start, end}. */
+{
+struct annoRow *rowA = *((struct annoRow **)va);
+struct annoRow *rowB = *((struct annoRow **)vb);
+int dif = strcmp(rowA->chrom, rowB->chrom);
+if (dif == 0)
+    {
+    dif = rowA->start - rowB->start;
+    if (dif == 0)
+	dif = rowA->end - rowB->end;
+    }
+return dif;
+}
+
diff --git a/gbtools/src/blatSrc/lib/annoStreamBigBed.c b/gbtools/src/blatSrc/lib/annoStreamBigBed.c
new file mode 100644
index 0000000..2d262a4
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/annoStreamBigBed.c
@@ -0,0 +1,251 @@
+/* annoStreamBigBed -- subclass of annoStreamer for bigBed file or URL */
+
+/* Copyright (C) 2013 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "annoStreamBigBed.h"
+#include "bigBed.h"
+#include "localmem.h"
+#include "sqlNum.h"
+
+struct annoStreamBigBed
+    {
+    struct annoStreamer streamer;	// Parent class members & methods
+    // Private members
+    struct bbiFile *bbi;		// bbi handle for bigBed file/URL.
+    struct lm *intervalQueryLm;		// localmem object for bigBedIntervalQuery
+    struct bigBedInterval *intervalList;	// results of bigBedIntervalQuery
+    struct bigBedInterval *nextInterval;	// next result to be translated into row
+    struct bbiChromInfo *chromList;	// list of chromosomes for which bbi actually has data
+    struct bbiChromInfo *queryChrom;	// most recently queried chrom for whole-genome (or NULL)
+    boolean useMaxItems;		// TRUE if maxItems passed to annoStreamBigBedNew is > 0
+    int maxItems;			// max remaining annoRows that nextRow can return
+    boolean eof;			// TRUE when we are done (maxItems or no more items)
+    boolean doNextChunk;		// TRUE if intervalList ends before end of chrom/region
+    uint nextChunkStart;		// Start coord for next chunk of intervals to query
+    char **row;				// storage for results of bigBedIntervalToRow
+    char *startBuf;			// storage for stringified start from bigBedIntervalToRow
+    char *endBuf;			// storage for stringified end from bigBedIntervalToRow
+    };
+
+// For performance reasons, even if !useMaxItems (no limit), we need to limit the
+// number of intervals that are slurped into memory for a bigBedIntervalQuery, so
+// we don't sit waiting too long when a chromosome has millions of intervals.
+#define ASBB_CHUNK_SIZE 100000
+
+static void asbbSetRegion(struct annoStreamer *vSelf, char *chrom, uint regionStart, uint regionEnd)
+/* Set region -- and free localmem from previous query if necessary. */
+{
+annoStreamerSetRegion(vSelf, chrom, regionStart, regionEnd);
+struct annoStreamBigBed *self = (struct annoStreamBigBed *)vSelf;
+self->nextInterval = self->intervalList = NULL;
+self->queryChrom = NULL;
+self->eof = FALSE;
+self->doNextChunk = FALSE;
+lmCleanup(&(self->intervalQueryLm));
+}
+
+static void updateNextChunkState(struct annoStreamBigBed *self, int queryMaxItems)
+/* If the just-fetched interval list was limited to ASBB_CHUNK_SIZE, set doNextChunk
+ * and trim the last interval(s) so that when we query the next chunk, we don't get
+ * repeat rows due to querying a start coord that was already returned. */
+{
+if (queryMaxItems == ASBB_CHUNK_SIZE)
+    {
+    int itemCount = slCount(self->intervalList);
+    if (itemCount == ASBB_CHUNK_SIZE)
+	{
+	self->doNextChunk = TRUE;
+	struct bigBedInterval *lastIv = NULL, *iv;
+	for (iv = self->intervalList;  iv->next != NULL;  iv = iv->next)
+	    {
+	    if (iv->start != iv->next->start)
+		{
+		lastIv = iv;
+		self->nextChunkStart = iv->next->start;
+		}
+	    }
+	lastIv->next = NULL;
+	}
+    else
+	self->doNextChunk = FALSE;
+    }
+else
+    self->doNextChunk = FALSE;
+}
+
+static void asbbDoQuery(struct annoStreamBigBed *self, char *minChrom, uint minEnd)
+/* Store results of an interval query. */
+{
+struct annoStreamer *sSelf = &(self->streamer);
+if (sSelf->chrom != NULL && self->intervalList != NULL && !self->doNextChunk)
+    // We're doing a region query, we already got some rows, and don't need another chunk:
+    self->eof = TRUE;
+if (self->useMaxItems)
+    {
+    int lastIntervalCount = slCount(self->intervalList);
+    self->maxItems -= lastIntervalCount;
+    if (self->maxItems <= 0)
+	self->eof = TRUE;
+    }
+self->nextInterval = self->intervalList = NULL;
+lmCleanup(&self->intervalQueryLm);
+if (self->eof)
+    return;
+self->intervalQueryLm = lmInit(0);
+int queryMaxItems = ASBB_CHUNK_SIZE;
+if (self->useMaxItems && self->maxItems < queryMaxItems)
+    queryMaxItems = self->maxItems;
+if (sSelf->chrom != NULL)
+    {
+    uint start = sSelf->regionStart;
+    if (minChrom)
+	{
+	if (differentString(minChrom, sSelf->chrom))
+	    errAbort("annoStreamBigBed %s: nextRow minChrom='%s' but region chrom='%s'",
+		     sSelf->name, minChrom, sSelf->chrom);
+	if (start < minEnd)
+	    start = minEnd;
+	}
+    if (self->doNextChunk && start < self->nextChunkStart)
+	start = self->nextChunkStart;
+    self->intervalList = bigBedIntervalQuery(self->bbi, sSelf->chrom, start, sSelf->regionEnd,
+					     queryMaxItems, self->intervalQueryLm);
+    updateNextChunkState(self, queryMaxItems);
+    }
+else
+    {
+    // Genome-wide query: break it into chrom-by-chrom queries.
+    if (self->queryChrom == NULL)
+	self->queryChrom = self->chromList;
+    else if (!self->doNextChunk)
+	self->queryChrom = self->queryChrom->next;
+    if (minChrom != NULL)
+	{
+	// Skip chroms that precede minChrom
+	while (self->queryChrom != NULL && strcmp(self->queryChrom->name, minChrom) < 0)
+	    {
+	    self->queryChrom = self->queryChrom->next;
+	    self->doNextChunk = FALSE;
+	    }
+	}
+    if (self->queryChrom == NULL)
+	{
+	self->eof = TRUE;
+	}
+    else
+	{
+	char *chrom = self->queryChrom->name;
+	int start = 0;
+	if (minChrom != NULL && sameString(chrom, minChrom))
+	    start = minEnd;
+	if (self->doNextChunk && start < self->nextChunkStart)
+	    {
+	    start = self->nextChunkStart;
+	    }
+	uint end = self->queryChrom->size;
+	self->intervalList = bigBedIntervalQuery(self->bbi, chrom, start, end,
+						 queryMaxItems, self->intervalQueryLm);
+	updateNextChunkState(self, queryMaxItems);
+	}
+    }
+self->nextInterval = self->intervalList;
+}
+
+static char **nextRowUnfiltered(struct annoStreamBigBed *self, char *minChrom, uint minEnd)
+/* Convert the next available interval into a row of words, or return NULL. */
+{
+struct annoStreamer *sSelf = &(self->streamer);
+if (self->nextInterval == NULL ||
+    (minChrom != NULL && self->queryChrom != NULL &&
+     (strcmp(self->queryChrom->name, minChrom) < 0)))
+    asbbDoQuery(self, minChrom, minEnd);
+if (self->nextInterval == NULL)
+    return NULL;
+char *chrom = sSelf->chrom ? sSelf->chrom : self->queryChrom->name;
+// If current set of intervals is for minChrom, skip items to the left of minEnd:
+if (minChrom != NULL && sameString(chrom, minChrom))
+    {
+    while (self->nextInterval && self->nextInterval->end < minEnd)
+	self->nextInterval = self->nextInterval->next;
+    // If no more items are left in intervalList, query again:
+    if (self->nextInterval == NULL)
+	asbbDoQuery(self, minChrom, minEnd);
+    if (self->nextInterval == NULL)
+	return NULL;
+    }
+int fieldCount = bigBedIntervalToRow(self->nextInterval, chrom,
+				     self->startBuf, self->endBuf,
+				     self->row, sSelf->numCols+1);
+if (fieldCount != sSelf->numCols)
+    errAbort("annoStreamBigBed %s: expected %d columns, got %d",
+	     sSelf->name, sSelf->numCols, fieldCount);
+self->nextInterval = self->nextInterval->next;
+return self->row;
+}
+
+static struct annoRow *asbbNextRow(struct annoStreamer *vSelf, char *minChrom, uint minEnd,
+				   struct lm *lm)
+/* Return a single annoRow, or NULL if there are no more items. */
+{
+struct annoStreamBigBed *self = (struct annoStreamBigBed *)vSelf;
+if (self->eof)
+    return NULL;
+char **row = nextRowUnfiltered(self, minChrom, minEnd);
+if (row == NULL)
+    return NULL;
+// Skip past any left-join failures until we get a right-join failure, a passing row, or EOF.
+boolean rightFail = FALSE;
+while (annoFilterRowFails(vSelf->filters, row, vSelf->numCols, &rightFail))
+    {
+    if (rightFail)
+	break;
+    row = nextRowUnfiltered(self, minChrom, minEnd);
+    if (row == NULL)
+	return NULL;
+    }
+char *chrom = row[0];
+uint chromStart = sqlUnsigned(row[1]);
+uint chromEnd = sqlUnsigned(row[2]);
+return annoRowFromStringArray(chrom, chromStart, chromEnd, rightFail, row, vSelf->numCols, lm);
+}
+
+static void asbbClose(struct annoStreamer **pVSelf)
+/* Close bbi handle and free self. */
+{
+if (pVSelf == NULL)
+    return;
+struct annoStreamBigBed *self = *(struct annoStreamBigBed **)pVSelf;
+bigBedFileClose(&(self->bbi));
+self->intervalList = NULL;
+lmCleanup(&(self->intervalQueryLm));
+freeMem(self->row);
+freeMem(self->startBuf);
+freeMem(self->endBuf);
+annoStreamerFree(pVSelf);
+}
+
+struct annoStreamer *annoStreamBigBedNew(char *fileOrUrl, struct annoAssembly *aa, int maxItems)
+/* Create an annoStreamer (subclass) object from a file or URL; if
+ * maxItems is 0, all items from a query will be returned, otherwise
+ * output is limited to maxItems. */
+{
+struct bbiFile *bbi = bigBedFileOpen(fileOrUrl);
+struct asObject *asObj = bigBedAsOrDefault(bbi);
+struct annoStreamBigBed *self = NULL;
+AllocVar(self);
+struct annoStreamer *streamer = &(self->streamer);
+annoStreamerInit(streamer, aa, asObj, fileOrUrl);
+streamer->rowType = arWords;
+streamer->setRegion = asbbSetRegion;
+streamer->nextRow = asbbNextRow;
+streamer->close = asbbClose;
+self->bbi = bbi;
+self->useMaxItems = (maxItems > 0);
+self->maxItems = maxItems;
+AllocArray(self->row, streamer->numCols + 1);
+self->startBuf = needMem(32);
+self->endBuf = needMem(32);
+self->chromList = bbiChromList(bbi);
+return (struct annoStreamer *)self;
+}
diff --git a/gbtools/src/blatSrc/lib/annoStreamBigWig.c b/gbtools/src/blatSrc/lib/annoStreamBigWig.c
new file mode 100644
index 0000000..4ed2862
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/annoStreamBigWig.c
@@ -0,0 +1,185 @@
+/* annoStreamBigWig -- subclass of annoStreamer for bigWig file or URL */
+
+/* Copyright (C) 2013 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "annoStreamBigWig.h"
+#include "bigWig.h"
+
+char *annoRowBigWigAsText =
+"table annoRowBigWig\n"
+"\"autoSql description of a single annoRowBigWig value, for filtering\"\n"
+"    (\n"
+"    float value;  \"data value for this range\"\n"
+"    )\n"
+    ;
+
+struct annoStreamBigWig
+    {
+    struct annoStreamer streamer;	// Parent class members & methods
+    // Private members
+    struct bbiFile *bbi;		// bbi handle for bigBed file/URL.
+    struct lm *intervalQueryLm;		// localmem object for bigWigIntervalQuery
+    struct bbiInterval *intervalList;	// results of bigWigIntervalQuery
+    struct bbiInterval *nextInterval;	// next result to be translated into row
+    struct bbiChromInfo *chromList;	// list of chromosomes for which bbi actually has data
+    struct bbiChromInfo *queryChrom;	// most recently queried chrom for whole-genome (or NULL)
+    boolean eof;			// TRUE when we are done
+    };
+
+
+static void asbwSetRegion(struct annoStreamer *vSelf, char *chrom, uint regionStart, uint regionEnd)
+/* Set region -- and free localmem from previous query if necessary. */
+{
+annoStreamerSetRegion(vSelf, chrom, regionStart, regionEnd);
+struct annoStreamBigWig *self = (struct annoStreamBigWig *)vSelf;
+self->nextInterval = self->intervalList = NULL;
+self->queryChrom = NULL;
+self->eof = FALSE;
+lmCleanup(&(self->intervalQueryLm));
+}
+
+static void asbwDoQuery(struct annoStreamBigWig *self, char *minChrom, uint minEnd)
+/* Store results of an interval query. [Would be nice to make a streaming version of this.] */
+{
+struct annoStreamer *sSelf = &(self->streamer);
+if (self->intervalQueryLm == NULL)
+    self->intervalQueryLm = lmInit(0);
+if (sSelf->chrom != NULL)
+    {
+    uint start = sSelf->regionStart;
+    if (minChrom)
+	{
+	if (differentString(minChrom, sSelf->chrom))
+	    errAbort("annoStreamBigWig %s: nextRow minChrom='%s' but region chrom='%s'",
+		     sSelf->name, minChrom, sSelf->chrom);
+	if (start < minEnd)
+	    start = minEnd;
+	}
+    self->intervalList = bigWigIntervalQuery(self->bbi, sSelf->chrom, start, sSelf->regionEnd,
+					     self->intervalQueryLm);
+    }
+else
+    {
+    // Genome-wide query: break it into chrom-by-chrom queries.
+    if (self->queryChrom == NULL)
+	self->queryChrom = self->chromList;
+    else
+	self->queryChrom = self->queryChrom->next;
+    if (minChrom != NULL)
+	{
+	// Skip chroms that precede minChrom
+	while (self->queryChrom != NULL && strcmp(self->queryChrom->name, minChrom) < 0)
+	    self->queryChrom = self->queryChrom->next;
+	}
+    if (self->queryChrom == NULL)
+	{
+	self->eof = TRUE;
+	self->intervalList = NULL;
+	}
+    else
+	{
+	char *chrom = self->queryChrom->name;
+	int start = 0;
+	if (minChrom != NULL && sameString(chrom, minChrom))
+	    start = minEnd;
+	uint end = self->queryChrom->size;
+	self->intervalList = bigWigIntervalQuery(self->bbi, chrom, start, end,
+						 self->intervalQueryLm);
+	}
+    }
+self->nextInterval = self->intervalList;
+}
+
+static struct annoRow *annoRowFromContigBbiIntervals(char *name, char *chrom,
+				struct bbiInterval *startIv, struct bbiInterval *endIv,
+				boolean rightJoinFail, struct lm *callerLm)
+/* Given a range of non-NULL contiguous bbiIntervals (i.e. no gaps between intervals),
+ * translate into annoRow with annoVector as data. */
+{
+float *vals;
+int baseCount = endIv->end - startIv->start;
+AllocArray(vals, baseCount);
+int vecOff = 0;
+struct bbiInterval *iv;
+for (iv = startIv;  iv != endIv->next;  iv = iv->next)
+    {
+    int i;
+    for (i = 0;  i < (iv->end - iv->start);  i++)
+	vals[vecOff++] = iv->val;
+    if (vecOff > baseCount)
+	errAbort("annoStreamBigWig %s: overflowed baseCount (%s:%d-%d)",
+		 name, chrom, startIv->start, endIv->end);
+    }
+return annoRowWigNew(chrom, startIv->start, endIv->end, rightJoinFail, vals, callerLm);
+}
+
+static struct annoRow *asbwNextRow(struct annoStreamer *sSelf, char *minChrom, uint minEnd,
+				   struct lm *callerLm)
+/* Return a single annoRow, or NULL if there are no more items. */
+{
+struct annoStreamBigWig *self = (struct annoStreamBigWig *)sSelf;
+if (self->intervalList == NULL)
+    asbwDoQuery(self, minChrom, minEnd);
+if (self->nextInterval == NULL)
+    return NULL;
+// Skip past any left-join failures until we get a right-join failure, a passing interval, or EOF.
+boolean rightFail = FALSE;
+struct bbiInterval *startIv = self->nextInterval;
+while (annoFilterWigValueFails(sSelf->filters, self->nextInterval->val, &rightFail))
+    {
+    if (rightFail)
+	break;
+    startIv = self->nextInterval = self->nextInterval->next;
+    if (self->nextInterval == NULL)
+	return NULL;
+    }
+char *chrom = sSelf->chrom ? sSelf->chrom : self->queryChrom->name;
+if (rightFail)
+    return annoRowFromContigBbiIntervals(sSelf->name, chrom, startIv, startIv, rightFail,
+					 callerLm);
+struct bbiInterval *endIv = startIv, *iv;
+int maxCount = 16 * 1024, count;
+for (iv = startIv->next, count = 0;  iv != NULL && count < maxCount;  iv = iv->next, count++)
+    {
+    // collect contiguous intervals; then make annoRow with vector.
+    if (annoFilterWigValueFails(sSelf->filters, iv->val, &rightFail))
+	break;
+    if (iv->start == endIv->end)
+	endIv = iv;
+    else
+	break;
+    }
+self->nextInterval = endIv->next;
+return annoRowFromContigBbiIntervals(sSelf->name, chrom, startIv, endIv, rightFail, callerLm);
+}
+
+static void asbwClose(struct annoStreamer **pVSelf)
+/* Close bbi handle and free self. */
+{
+if (pVSelf == NULL)
+    return;
+struct annoStreamBigWig *self = *(struct annoStreamBigWig **)pVSelf;
+bigWigFileClose(&(self->bbi));
+self->intervalList = NULL;
+lmCleanup(&(self->intervalQueryLm));
+annoStreamerFree(pVSelf);
+}
+
+struct annoStreamer *annoStreamBigWigNew(char *fileOrUrl, struct annoAssembly *aa)
+/* Create an annoStreamer (subclass) object from a file or URL. */
+{
+struct bbiFile *bbi = bigWigFileOpen(fileOrUrl);
+struct asObject *asObj = asParseText(annoRowBigWigAsText);
+struct annoStreamBigWig *self = NULL;
+AllocVar(self);
+struct annoStreamer *streamer = &(self->streamer);
+annoStreamerInit(streamer, aa, asObj, fileOrUrl);
+streamer->rowType = arWig;
+streamer->setRegion = asbwSetRegion;
+streamer->nextRow = asbwNextRow;
+streamer->close = asbwClose;
+self->chromList = bbiChromList(bbi);
+self->bbi = bbi;
+return (struct annoStreamer *)self;
+}
diff --git a/gbtools/src/blatSrc/lib/annoStreamTab.c b/gbtools/src/blatSrc/lib/annoStreamTab.c
new file mode 100644
index 0000000..17de91a
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/annoStreamTab.c
@@ -0,0 +1,236 @@
+/* annoStreamTab -- subclass of annoStreamer for tab-separated text files/URLs */
+
+/* Copyright (C) 2013 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "annoStreamTab.h"
+#include "linefile.h"
+#include "net.h"
+#include "sqlNum.h"
+
+struct annoStreamTab
+    {
+    struct annoStreamer streamer;	// Parent class members & methods
+    // Private members
+    char *fileOrUrl;			// File name or URL
+    struct lineFile *lf;		// file handle
+    char **asWords;			// Most recent row's words
+    int chromIx;			// Index of chrom-ish col in autoSql or bin-less table
+    int startIx;			// Index of chromStart-ish col in autoSql or bin-less table
+    int endIx;				// Index of chromEnd-ish col in autoSql or bin-less table
+    int fileWordCount;			// Number of columns in file including bin
+    boolean eof;			// Set when we have reached end of file.
+    boolean omitBin;			// 1 if file has bin and autoSql doesn't have bin
+    };
+
+static struct lineFile *astLFOpen(char *fileOrUrl)
+/* Figure out if fileOrUrl is file or URL and open an lf accordingly. */
+{
+if (startsWith("http://", fileOrUrl) || startsWith("https://", fileOrUrl) ||
+    startsWith("ftp://", fileOrUrl))
+    return netLineFileOpen(fileOrUrl);
+else
+    return lineFileOpen(fileOrUrl, TRUE);
+}
+
+static void unChop(char **words, int wordCount)
+/* Trust that words were chopped from a contiguous line and add back tabs for '\0's. */
+{
+int i;
+for (i = 0;  i < wordCount-1;  i++)
+    {
+    int len = strlen(words[i]);
+    words[i][len] = '\t';
+    }
+}
+
+static void astSetRegion(struct annoStreamer *vSelf, char *chrom, uint regionStart, uint regionEnd)
+/* Set region and re-open file or URL if necessary. */
+{
+struct annoStreamTab *self = (struct annoStreamTab *)vSelf;
+boolean keepOpen = FALSE;
+if (chrom != NULL && vSelf->chrom != NULL)
+    {
+    // If old region chrom precedes new region chrom, don't rewind to beginning of file.
+    if (strcmp(vSelf->chrom, chrom) < 0)
+	{
+	keepOpen = TRUE;
+	}
+    else
+	verbose(2, "annoStreamTab: inefficient when region chroms overlap or are out of order!"
+		" (current region: %s:%d-%d, new region: %s:%d-%d)",
+		vSelf->chrom, vSelf->regionStart, vSelf->regionEnd,
+		chrom, regionStart, regionEnd);
+    }
+annoStreamerSetRegion(vSelf, chrom, regionStart, regionEnd);
+if (keepOpen)
+    self->eof = FALSE;
+else
+    {
+    lineFileClose(&(self->lf));
+    self->lf = astLFOpen(self->fileOrUrl);
+    self->eof = FALSE;
+    }
+}
+
+INLINE boolean isAllDigits(char *s)
+{
+return (isNotEmpty(s) && countLeadingDigits(s) == strlen(s));
+}
+
+static void checkWordCountAndBin(struct annoStreamTab *self, int wordCount)
+/* Auto-detect initial bin column and set self->omitBin if autoSql doesn't have bin. */
+{
+if (wordCount == self->streamer.numCols + 1 &&
+    isAllDigits(self->asWords[0]))
+    {
+    self->fileWordCount = self->streamer.numCols + 1;
+    char *asFirstColumnName = self->streamer.asObj->columnList->name;
+    if (!sameString(asFirstColumnName, "bin"))
+	self->omitBin = 1;
+    }
+else
+    self->fileWordCount = self->streamer.numCols;
+}
+
+static char **nextRowUnfiltered(struct annoStreamTab *self, char *minChrom, uint minEnd)
+/* Get the next row from file, skipping rows that fall before the search region
+ * (if a search region is defined).  If the row is strictly after the current region,
+ * set self->eof and reuse the line, in case it's the first row of the next region.
+ * Return pointer to self->asWords if we get a row in region, otherwise NULL. */
+{
+if (self->eof)
+    return NULL;
+struct annoStreamer *sSelf = &(self->streamer);
+char *regionChrom = sSelf->chrom;
+uint regionStart = sSelf->regionStart;
+uint regionEnd = sSelf->regionEnd;
+if (minChrom != NULL)
+    {
+    if (regionChrom == NULL)
+	{
+	regionChrom = minChrom;
+	regionStart = minEnd;
+	regionEnd = annoAssemblySeqSize(sSelf->assembly, minChrom);
+	}
+    else
+	{
+	if (differentString(minChrom, regionChrom))
+	    errAbort("annoStreamTab %s: nextRow minChrom='%s' but region chrom='%s'",
+		     sSelf->name, minChrom, sSelf->chrom);
+	regionStart = max(regionStart, minEnd);
+	}
+    }
+boolean done = FALSE;
+while (!done)
+    {
+    int wordCount;
+    if ((wordCount = lineFileChopNext(self->lf, self->asWords, sSelf->numCols)) <= 0)
+	{
+	self->eof = TRUE;
+	return NULL;
+	}
+    if (self->fileWordCount == 0)
+	checkWordCountAndBin(self, wordCount);
+    lineFileExpectWords(self->lf, self->fileWordCount, wordCount);
+    if (regionChrom == NULL)
+	// Whole-genome query and no minChrom hint; no need to check region.
+	done = TRUE;
+    else
+	{
+	// We're searching within a region -- is this row in range?
+	char *thisChrom = self->asWords[self->omitBin + self->chromIx];
+	uint thisStart = atoll(self->asWords[self->omitBin + self->startIx]);
+	uint thisEnd = atoll(self->asWords[self->omitBin + self->endIx]);
+	int chromDif = strcmp(thisChrom, regionChrom);
+	if (chromDif < 0 ||
+	    (chromDif == 0 && thisEnd <= regionStart))
+	    // This row precedes the region -- keep looking.
+	    continue;
+	else if (chromDif == 0 && thisEnd > regionStart && thisStart < regionEnd)
+	    // This row overlaps region; return it.
+	    done = TRUE;
+	else
+	    {
+	    // This row falls after the region. Undo the damage of lineFileChopNext,
+            // tell lf to reuse the line, set EOF and return NULL - we are all done
+	    // until & unless region changes.
+	    unChop(self->asWords, sSelf->numCols);
+	    lineFileReuse(self->lf);
+	    self->eof = TRUE;
+	    return NULL;
+	    }
+	}
+    }
+return self->asWords + self->omitBin;
+}
+
+static struct annoRow *astNextRow(struct annoStreamer *vSelf, char *minChrom, uint minEnd,
+				  struct lm *callerLm)
+/* Return the next annoRow that passes filters, or NULL if there are no more items. */
+{
+struct annoStreamTab *self = (struct annoStreamTab *)vSelf;
+char **words = nextRowUnfiltered(self, minChrom, minEnd);
+if (words == NULL)
+    return NULL;
+// Skip past any left-join failures until we get a right-join failure, a passing row, or EOF.
+boolean rightFail = FALSE;
+while (annoFilterRowFails(vSelf->filters, words, vSelf->numCols, &rightFail))
+    {
+    if (rightFail)
+	break;
+    words = nextRowUnfiltered(self, minChrom, minEnd);
+    if (words == NULL)
+	return NULL;
+    }
+char *chrom = words[self->chromIx];
+uint chromStart = sqlUnsigned(words[self->startIx]);
+uint chromEnd = sqlUnsigned(words[self->endIx]);
+return annoRowFromStringArray(chrom, chromStart, chromEnd, rightFail, words, vSelf->numCols,
+			      callerLm);
+}
+
+static boolean astInitBed3Fields(struct annoStreamTab *self)
+/* Use autoSql to figure out which table fields correspond to {chrom, chromStart, chromEnd}. */
+{
+struct annoStreamer *vSelf = &(self->streamer);
+return annoStreamerFindBed3Columns(vSelf, &(self->chromIx), &(self->startIx), &(self->endIx),
+				   NULL, NULL, NULL);
+}
+
+static void astClose(struct annoStreamer **pVSelf)
+/* Close file and free self. */
+{
+if (pVSelf == NULL)
+    return;
+struct annoStreamTab *self = *(struct annoStreamTab **)pVSelf;
+lineFileClose(&(self->lf));
+freeMem(self->asWords);
+freeMem(self->fileOrUrl);
+annoStreamerFree(pVSelf);
+}
+
+struct annoStreamer *annoStreamTabNew(char *fileOrUrl, struct annoAssembly *aa,
+				      struct asObject *asObj)
+/* Create an annoStreamer (subclass) object from a tab-separated text file/URL
+ * whose columns are described by asObj (possibly excepting bin column at beginning). */
+{
+struct lineFile *lf = astLFOpen(fileOrUrl);
+struct annoStreamTab *self = NULL;
+AllocVar(self);
+struct annoStreamer *streamer = &(self->streamer);
+annoStreamerInit(streamer, aa, asObj, fileOrUrl);
+streamer->rowType = arWords;
+streamer->setRegion = astSetRegion;
+streamer->nextRow = astNextRow;
+streamer->close = astClose;
+AllocArray(self->asWords, streamer->numCols);
+self->lf = lf;
+self->eof = FALSE;
+self->fileOrUrl = cloneString(fileOrUrl);
+if (!astInitBed3Fields(self))
+    errAbort("annoStreamTabNew: can't figure out which fields of %s to use as "
+	     "{chrom, chromStart, chromEnd}.", fileOrUrl);
+return (struct annoStreamer *)self;
+
+}
diff --git a/gbtools/src/blatSrc/lib/annoStreamVcf.c b/gbtools/src/blatSrc/lib/annoStreamVcf.c
new file mode 100644
index 0000000..2c652b5
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/annoStreamVcf.c
@@ -0,0 +1,368 @@
+/* annoStreamVcf -- subclass of annoStreamer for VCF files */
+
+/* Copyright (C) 2014 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "annoStreamVcf.h"
+#include "twoBit.h"
+#include "vcf.h"
+
+struct annoStreamVcf
+    {
+    struct annoStreamer streamer;	// Parent class members & methods
+    // Private members
+    struct vcfFile *vcff;		// VCF parsed header and file object
+    struct vcfRecord *record;		// Current parsed row of VCF (need this for chromEnd)
+    char *asWords[VCF_NUM_COLS];	// Current row of VCF with genotypes squashed for autoSql
+    struct dyString *dyGt;		// Scratch space for squashing genotype columns
+    struct hash *chromNameHash;		// Translate "chr"-less seq names if necessary.
+    struct annoRow *indelQ;		// FIFO for coord-tweaked indels, to maintain sorting
+    struct annoRow *nextPosQ;		// FIFO (max len=1) for stashing row while draining indelQ
+    struct lm *qLm;			// Local mem for saving rows in Q's (callerLm disappears)
+    int numFileCols;			// Number of columns in VCF file.
+    int maxRecords;			// Maximum number of annoRows to return.
+    int recordCount;			// Number of annoRows we have returned so far.
+    boolean isTabix;			// True if we are accessing compressed VCF via tabix index
+    boolean eof;			// True when we have hit end of file or maxRecords
+    };
+
+
+static void asvSetRegion(struct annoStreamer *vSelf, char *chrom, uint regionStart, uint regionEnd)
+/* Set region -- and free current sqlResult if there is one. */
+{
+annoStreamerSetRegion(vSelf, chrom, regionStart, regionEnd);
+struct annoStreamVcf *self = (struct annoStreamVcf *)vSelf;
+self->indelQ = self->nextPosQ = NULL;
+self->eof = FALSE;
+if (self->isTabix && chrom != NULL)
+    {
+    // If this region is not in tabix index, set self->eof so we won't keep grabbing rows
+    // from the old position.
+    boolean gotRegion = lineFileSetTabixRegion(self->vcff->lf, chrom, regionStart, regionEnd);
+    if (! gotRegion)
+	self->eof = TRUE;
+    }
+}
+
+static char *asvGetHeader(struct annoStreamer *vSelf)
+/* Return VCF header (e.g. for use by formatter) */
+{
+struct annoStreamVcf *self = (struct annoStreamVcf *)vSelf;
+return cloneString(self->vcff->headerString);
+}
+
+static char **nextRowRaw(struct annoStreamVcf *self)
+/* Get the next VCF record and put the row text into autoSql words.
+ * Return pointer to self->asWords if we get a row, otherwise NULL. */
+{
+char *words[self->numFileCols];
+int wordCount;
+if ((wordCount = lineFileChop(self->vcff->lf, words)) <= 0)
+    return NULL;
+lineFileExpectWords(self->vcff->lf, self->numFileCols, wordCount);
+int i;
+// First 8 columns are always in the VCF file:
+for (i = 0;  i < 8;  i++)
+    {
+    freeMem(self->asWords[i]);
+    self->asWords[i] = cloneString(words[i]);
+    }
+// Depending on whether VCF contains genotypes, number of file columns may be
+// smaller or larger than number of autoSql columns:
+if (self->vcff->genotypeCount > 0)
+    {
+    self->asWords[8] = words[8];
+    dyStringClear(self->dyGt);
+    for (i = 0;  i < self->vcff->genotypeCount;  i++)
+	{
+	if (i > 0)
+	    dyStringAppendC(self->dyGt, '\t');
+	dyStringAppend(self->dyGt, words[9+i]);
+	}
+    self->asWords[9] = self->dyGt->string;
+    }
+else
+    {
+    self->asWords[8] = "";
+    self->asWords[9] = "";
+    }
+self->record = vcfRecordFromRow(self->vcff, words);
+return self->asWords;
+}
+
+static char *getProperChromName(struct annoStreamVcf *self, char *vcfChrom)
+/* We tolerate chr-less chrom names in VCF and BAM ("1" for "chr1" etc); to avoid
+ * confusing the rest of the system, return the chr-ful version if it exists. */
+{
+char *name = hashFindVal(self->chromNameHash, vcfChrom);
+if (name == NULL)
+    {
+    name = vcfChrom;
+    struct twoBitFile *tbf = self->streamer.assembly->tbf;
+    char buf[256];
+    if (! twoBitIsSequence(tbf, vcfChrom))
+	{
+	safef(buf, sizeof(buf), "chr%s", vcfChrom);
+	if (twoBitIsSequence(tbf, buf))
+	    name = buf;
+	}
+    name = lmCloneString(self->chromNameHash->lm, name);
+    hashAdd(self->chromNameHash, vcfChrom, name);
+    }
+return name;
+}
+
+static char **nextRowUnfiltered(struct annoStreamVcf *self, char *minChrom, uint minEnd)
+/* Get the next VCF record and put the row text into autoSql words.
+ * Return pointer to self->asWords if we get a row, otherwise NULL. */
+{
+struct annoStreamer *sSelf = (struct annoStreamer *)self;
+char *regionChrom = sSelf->chrom;
+uint regionStart = sSelf->regionStart;
+if (minChrom != NULL)
+    {
+    if (regionChrom == NULL)
+	{
+	regionChrom = minChrom;
+	regionStart = minEnd;
+	}
+    else
+	{
+	regionStart = max(regionStart, minEnd);
+	}
+    }
+char **words = nextRowRaw(self);
+if (regionChrom != NULL && words != NULL)
+    {
+    char *rowChrom = getProperChromName(self, words[0]);
+    if (self->isTabix && strcmp(rowChrom, regionChrom) < 0)
+	{
+	uint regionEnd = sSelf->regionEnd;
+	if (minChrom != NULL && sSelf->chrom == NULL)
+	    regionEnd = annoAssemblySeqSize(sSelf->assembly, minChrom);
+	// If lineFileSetTabixRegion fails, just keep the current file position
+	// -- hopefully we'll just be skipping to the next row after region{Chrom,Start,End}.
+	lineFileSetTabixRegion(self->vcff->lf, regionChrom, regionStart, regionEnd);
+	}
+    while (words != NULL &&
+	   (strcmp(rowChrom, regionChrom) < 0 ||
+	    (sameString(rowChrom, regionChrom) && self->record->chromEnd < regionStart)))
+	words = nextRowRaw(self);
+    }
+// Tabix doesn't give us any rows past end of region, but if not using tabix,
+// detect when we're past end of region:
+if (words != NULL && !self->isTabix && sSelf->chrom != NULL
+    && self->record->chromStart > sSelf->regionEnd)
+    {
+    words = NULL;
+    self->record = NULL;
+    }
+if (words != NULL)
+    self->recordCount++;
+if (words == NULL || (self->maxRecords > 0 && self->recordCount >= self->maxRecords))
+    self->eof = TRUE;
+return words;
+}
+
+static struct annoRow *nextRowFiltered(struct annoStreamVcf *self, char *minChrom, uint minEnd,
+				       struct lm *callerLm)
+/* Get the next record that passes our filters. */
+{
+char **words = nextRowUnfiltered(self, minChrom, minEnd);
+if (words == NULL)
+    return NULL;
+// Skip past any left-join failures until we get a right-join failure, a passing row, or EOF.
+struct annoStreamer *sSelf = (struct annoStreamer *)self;
+boolean rightFail = FALSE;
+while (annoFilterRowFails(sSelf->filters, words, sSelf->numCols, &rightFail))
+    {
+    if (rightFail)
+	break;
+    words = nextRowUnfiltered(self, minChrom, minEnd);
+    if (words == NULL)
+	return NULL;
+    }
+struct vcfRecord *rec = self->record;
+vcfRecordTrimIndelLeftBase(rec);
+vcfRecordTrimAllelesRight(rec);
+char *chrom = getProperChromName(self, rec->chrom);
+return annoRowFromStringArray(chrom, rec->chromStart, rec->chromEnd,
+			      rightFail, words, sSelf->numCols, callerLm);
+}
+
+INLINE boolean vcfAnnoRowIsIndel(struct annoRow *row)
+/* If vcf row's start is one base to the left of row->start, it's an indel whose start
+ * coord and alleles required translation into our representation. */
+{
+char **words = (char **)(row->data);
+uint vcfStart = atoll(words[1]);
+return (row->start == vcfStart); // 0-based row->start, 1-based vcfStart
+}
+
+INLINE void nextPosQShouldBeEmpty(struct annoStreamVcf *self)
+/* errAbort if nextPosQ is not empty when expected. */
+{
+if (self->nextPosQ != NULL)
+    errAbort("annoStreamVcf %s: nextPosQ should be empty!", ((struct annoStreamer *)self)->name);
+}
+
+#define MAX_QLM_MEM (1024 * 1024)
+
+INLINE struct annoRow *asvCloneForQ(struct annoStreamVcf *self, struct annoRow *row)
+/* Rows that we store in our queues have to be clone with our own qLm for persistence
+ * across calls to asvNextRow. */
+{
+if (self->indelQ == NULL && self->nextPosQ == NULL && lmSize(self->qLm) > MAX_QLM_MEM)
+    {
+    lmCleanup(&self->qLm);
+    self->qLm = lmInit(0);
+    }
+struct annoStreamer *sSelf = (struct annoStreamer *)self;
+return annoRowClone(row, sSelf->rowType, sSelf->numCols, self->qLm);
+}
+
+INLINE struct annoRow *asvPopQ(struct annoRow **pQ, struct annoStreamer *sSelf, struct lm *callerLm)
+/* Return the row at the head of the indel queue, cloned with caller's localmem. */
+{
+return annoRowClone(slPopHead(pQ), sSelf->rowType, sSelf->numCols, callerLm);
+}
+
+static struct annoRow *asvNextRow(struct annoStreamer *sSelf, char *minChrom, uint minEnd,
+				  struct lm *callerLm)
+/* Return an annoRow encoding the next VCF record, or NULL if there are no more items.
+ * Use queues to save indels aside until we get to the following base, because VCF's
+ * indel encoding starts one base to the left of the actual indel.  Thus, sorted VCF might
+ * not be sorted in our internal coords, but it won't be off by more than one base. */
+{
+struct annoStreamVcf *self = (struct annoStreamVcf *)sSelf;
+if (minChrom != NULL && sSelf->chrom != NULL && differentString(minChrom, sSelf->chrom))
+    errAbort("annoStreamVcf %s: nextRow minChrom='%s' but region chrom='%s'",
+	     sSelf->name, minChrom, sSelf->chrom);
+if (self->nextPosQ != NULL || self->eof)
+    {
+    // We have found EOF or a variant at a position after the indels that we have been
+    // saving aside.  Let the indels drain first, then the stashed variant (if there is
+    // one, and it's not an indel).
+    if (self->indelQ != NULL)
+	return asvPopQ(&self->indelQ, sSelf, callerLm);
+    else if (self->nextPosQ != NULL)
+	{
+	if (vcfAnnoRowIsIndel(self->nextPosQ))
+	    {
+	    // Another indel at the next position -- move it from nextPosQ to indelQ
+	    // and keep searching below.
+	    self->indelQ = slPopHead(&self->nextPosQ);
+	    nextPosQShouldBeEmpty(self);
+	    }
+	else
+	    return asvPopQ(&self->nextPosQ, sSelf, callerLm);
+	}
+    else // eof
+	return NULL;
+    }
+struct annoRow *nextRow = NULL;
+while ((nextRow = nextRowFiltered(self, minChrom, minEnd, callerLm)) != NULL)
+    {
+    // nextRow has been allocated with callerLm; if we save it for later, we need a clone in qLm.
+    // If we're popping a row from qLm, we need to clone back to the (probably new) callerLm.
+    if (vcfAnnoRowIsIndel(nextRow))
+	{
+	if (self->indelQ != NULL)
+	    {
+	    // Coords are apples-to-apples (both indels), look for strict ordering:
+	    if (self->indelQ->start < nextRow->start
+		|| differentString(self->indelQ->chrom, nextRow->chrom))
+		{
+		// Another indel, but at some subsequent base -- store in nextPosQ & pop indelQ
+		nextPosQShouldBeEmpty(self);
+		self->nextPosQ = asvCloneForQ(self, nextRow);
+		return asvPopQ(&self->indelQ, sSelf, callerLm);
+		}
+	    else
+		// Another indel at same position -- queue it up and keep looking.
+		// I expect very few of these, so addTail OK
+		slAddTail(&self->indelQ, asvCloneForQ(self, nextRow));
+	    }
+	else
+	    // nextRow is first indel at this position -- queue it up and keep looking.
+	    self->indelQ = asvCloneForQ(self, nextRow);
+	}
+    else // i.e. nextRow is non-indel
+	{
+	// Coords are not apples-to-apples: having the same annoRow->start means
+	// that the indel VCF starts are one less than the non-indel VCF starts,
+	// so let indels go first:
+	if (self->indelQ != NULL
+	    && (self->indelQ->start <= nextRow->start
+		|| differentString(self->indelQ->chrom, nextRow->chrom)))
+	    {
+	    // nextRow is a non-indel at a subsequent *VCF* base; store in nextPosQ & pop indelQ
+	    nextPosQShouldBeEmpty(self);
+	    self->nextPosQ = asvCloneForQ(self, nextRow);
+	    return asvPopQ(&self->indelQ, sSelf, callerLm);
+	    }
+	else
+	    // No indelQ, or nextRow is a non-indel at the same *VCF* base (but prior UCSC base);
+	    // use it now (BTW I expect this to be the common case):
+	    return nextRow;
+	}
+    }
+nextPosQShouldBeEmpty(self);
+if (nextRow == NULL)
+    {
+    if (self->indelQ != NULL)
+	return asvPopQ(&self->indelQ, sSelf, callerLm);
+    else
+	return NULL;
+    }
+errAbort("annoStreamVcf %s: how did we get here?", sSelf->name);
+return NULL;  // avoid compiler warning
+}
+
+static void asvClose(struct annoStreamer **pVSelf)
+/* Close VCF file and free self. */
+{
+if (pVSelf == NULL)
+    return;
+struct annoStreamVcf *self = *(struct annoStreamVcf **)pVSelf;
+vcfFileFree(&(self->vcff));
+// Don't free self->record -- currently it belongs to vcff's localMem
+dyStringFree(&(self->dyGt));
+lmCleanup(&self->qLm);
+annoStreamerFree(pVSelf);
+}
+
+struct annoStreamer *annoStreamVcfNew(char *fileOrUrl, boolean isTabix, struct annoAssembly *aa,
+				      int maxRecords)
+/* Create an annoStreamer (subclass) object from a VCF file, which may
+ * or may not have been compressed and indexed by tabix. */
+{
+int maxErr = -1; // don't errAbort on VCF format warnings/errs
+struct vcfFile *vcff;
+if (isTabix)
+    vcff = vcfTabixFileMayOpen(fileOrUrl, NULL, 0, 0, maxErr, 0);
+else
+    vcff = vcfFileMayOpen(fileOrUrl, NULL, 0, 0, maxErr, 0, FALSE);
+if (vcff == NULL)
+    errAbort("annoStreamVcfNew: unable to open VCF: '%s'", fileOrUrl);
+struct annoStreamVcf *self;
+AllocVar(self);
+struct annoStreamer *streamer = &(self->streamer);
+struct asObject *asObj = vcfAsObj();
+annoStreamerInit(streamer, aa, asObj, fileOrUrl);
+streamer->rowType = arWords;
+streamer->setRegion = asvSetRegion;
+streamer->getHeader = asvGetHeader;
+streamer->nextRow = asvNextRow;
+streamer->close = asvClose;
+self->vcff = vcff;
+self->dyGt = dyStringNew(1024);
+self->chromNameHash = hashNew(0);
+self->isTabix = isTabix;
+self->numFileCols = 8;
+if (vcff->genotypeCount > 0)
+    self->numFileCols = 9 + vcff->genotypeCount;
+self->maxRecords = maxRecords;
+self->qLm = lmInit(0);
+return (struct annoStreamer *)self;
+}
diff --git a/gbtools/src/blatSrc/lib/annoStreamer.c b/gbtools/src/blatSrc/lib/annoStreamer.c
new file mode 100644
index 0000000..f44c733
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/annoStreamer.c
@@ -0,0 +1,154 @@
+/* annoStreamer -- returns items sorted by genomic position to successive nextRow calls */
+
+/* Copyright (C) 2013 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "annoStreamer.h"
+#include "errAbort.h"
+
+// ----------------------- annoStreamer base methods --------------------------
+
+struct asObject *annoStreamerGetAutoSqlObject(struct annoStreamer *self)
+/* Return parsed autoSql definition of this streamer's data type. */
+{
+return self->asObj;
+}
+
+void annoStreamerSetAutoSqlObject(struct annoStreamer *self, struct asObject *asObj)
+/* Use new asObj and update internal state derived from asObj. */
+{
+self->asObj = asObj;
+self->numCols = slCount(asObj->columnList);
+}
+
+void annoStreamerSetRegion(struct annoStreamer *self, char *chrom, uint rStart, uint rEnd)
+/* Set genomic region for query; if chrom is NULL, position is genome.
+ * Many subclasses should make their own setRegion method that calls this and
+ * configures their data connection to change to the new position. */
+{
+freez(&(self->chrom));
+if (chrom == NULL)
+    {
+    self->positionIsGenome = TRUE;
+    self->regionStart = self->regionEnd = 0;
+    }
+else
+    {
+    self->positionIsGenome = FALSE;
+    self->chrom = cloneString(chrom);
+    self->regionStart = rStart;
+    if (rEnd == 0)
+	rEnd = annoAssemblySeqSize(self->assembly, chrom);
+    self->regionEnd = rEnd;
+    }
+}
+
+static char *annoStreamerGetHeader(struct annoStreamer *self)
+/* Default method: return NULL. */
+{
+return NULL;
+}
+
+void annoStreamerSetFilters(struct annoStreamer *self, struct annoFilter *newFilters)
+/* Replace any existing filters with newFilters.  It is up to calling code to
+ * free old filters and allocate newFilters. */
+{
+self->filters = newFilters;
+}
+
+void annoStreamerAddFilters(struct annoStreamer *self, struct annoFilter *newFilters)
+/* Add newFilter(s).  It is up to calling code to allocate newFilters. */
+{
+self->filters = slCat(newFilters, self->filters);
+}
+
+void annoStreamerInit(struct annoStreamer *self, struct annoAssembly *assembly,
+		      struct asObject *asObj, char *name)
+/* Initialize a newly allocated annoStreamer with default annoStreamer methods and
+ * default filters and columns based on asObj.
+ * In general, subclasses' constructors will call this first; override nextRow, close,
+ * and probably setRegion; and then initialize their private data. */
+{
+self->assembly = assembly;
+self->getAutoSqlObject = annoStreamerGetAutoSqlObject;
+self->setAutoSqlObject = annoStreamerSetAutoSqlObject;
+self->setRegion = annoStreamerSetRegion;
+self->getHeader = annoStreamerGetHeader;
+self->setFilters = annoStreamerSetFilters;
+self->addFilters = annoStreamerAddFilters;
+self->positionIsGenome = TRUE;
+self->setAutoSqlObject(self, asObj);
+if (name == NULL)
+    errAbort("annoStreamerInit: need non-NULL name");
+self->name = cloneString(name);
+}
+
+void annoStreamerFree(struct annoStreamer **pSelf)
+/* Free self. This should be called at the end of subclass close methods, after
+ * subclass-specific connections are closed and resources are freed. */
+{
+if (pSelf == NULL)
+    return;
+struct annoStreamer *self = *pSelf;
+freez(&(self->name));
+freez(&(self->chrom));
+freez(pSelf);
+}
+
+INLINE boolean findColumn(struct asColumn *columns, char *name, int *retIx, char **retName)
+/* Scan columns for name.
+ * If found, set retIx to column index, set retName to clone of name, and return TRUE.
+ * If not found, set retIx to -1, set retName to NULL, and return FALSE; */
+{
+int ix = asColumnFindIx(columns, name);
+if (retIx != NULL)
+    *retIx = ix;
+if (retName != NULL)
+    {
+    if (ix >= 0)
+	*retName = cloneString(name);
+    else
+	*retName = NULL;
+    }
+return (ix >= 0);
+}
+
+boolean annoStreamerFindBed3Columns(struct annoStreamer *self,
+			    int *retChromIx, int *retStartIx, int *retEndIx,
+			    char **retChromField, char **retStartField, char **retEndField)
+/* Scan autoSql for recognized column names corresponding to BED3 columns.
+ * Set ret*Ix to list index of each column if found, or -1 if not found.
+ * Set ret*Field to column name if found, or NULL if not found.
+ * If all three are found, return TRUE; otherwise return FALSE. */
+{
+struct asColumn *columns = self->asObj->columnList;
+if (findColumn(columns, "chrom", retChromIx, retChromField))
+    {
+    if (findColumn(columns, "chromStart", retStartIx, retStartField))
+	return findColumn(columns, "chromEnd", retEndIx, retEndField);
+    else return (findColumn(columns, "txStart", retStartIx, retStartField) &&
+		 findColumn(columns, "txEnd", retEndIx, retEndField));
+    }
+else if (findColumn(columns, "tName", retChromIx, retChromField))
+    return (findColumn(columns, "tStart", retStartIx, retStartField) &&
+	    findColumn(columns, "tEnd", retEndIx, retEndField));
+else if (findColumn(columns, "genoName", retChromIx, retChromField))
+    return (findColumn(columns, "genoStart", retStartIx, retStartField) &&
+	    findColumn(columns, "genoEnd", retEndIx, retEndField));
+return FALSE;
+}
+
+struct annoStreamRows *annoStreamRowsNew(struct annoStreamer *streamerList)
+/* Returns an array of aSR, one for each streamer in streamerList.
+ * Typically array is reused by overwriting elements' rowList pointers.
+ * Free array when done. */
+{
+int streamerCount = slCount(streamerList);
+struct annoStreamRows *data = NULL;
+AllocArray(data, streamerCount);
+struct annoStreamer *streamer = streamerList;
+int i = 0;
+for (;  i < streamerCount;  i++, streamer = streamer->next)
+    data[i].streamer = streamer;
+return data;
+}
diff --git a/gbtools/src/blatSrc/lib/apacheLog.c b/gbtools/src/blatSrc/lib/apacheLog.c
new file mode 100644
index 0000000..d0f2186
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/apacheLog.c
@@ -0,0 +1,211 @@
+/* apacheLog - stuff to parse out apache web server logs, currently
+ * just the access log. */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "obscure.h"
+#include "apacheLog.h"
+
+
+void apacheAccessLogFree(struct apacheAccessLog **pLl)
+/* Free up apacheAccessLog. */
+{
+struct apacheAccessLog *ll = *pLl;
+if (ll != NULL)
+    {
+    freeMem(ll->buf);
+    freez(pLl);
+    }
+}
+
+
+static void badFormat(struct apacheAccessLog **pLl, char *line, char *fileName, 
+	int lineIx, char *message)
+/* Complain about format if verbose flag is on.  Free up
+ * *pLl */
+{
+if (verboseLevel()  > 1)
+    {
+    if (fileName != NULL)
+	warn("%s line %d: %s", fileName, lineIx, message);
+    else
+	warn("%s", message);
+    }
+}
+
+static void unterminatedQuote(struct apacheAccessLog **pLl, char *line, 
+	char *fileName, int lineIx)
+/* Complain about unterminated quote. */
+{
+badFormat(pLl, line, fileName, lineIx, 
+	"missing closing quote");
+}
+
+static void shortLine(struct apacheAccessLog **pLl, char *line, 
+	char *fileName, int lineIx)
+/* Complain about short line. */
+{
+badFormat(pLl, line, fileName, lineIx, 
+	"short line");
+}
+
+static void badTimeStamp(struct apacheAccessLog **pLl, char *line, 
+	char *fileName, int lineIx)
+/* Complain about bad time stamp. */
+{
+badFormat(pLl, line, fileName, lineIx, 
+	"bad time stamp");
+}
+
+time_t apacheAccessLogTimeToTick(char *timeStamp)
+/* Convert something like 27/Aug/2009:09:25:32 to Unix timestamp (seconds since 1970).
+ * On error returns zero. */
+
+{
+struct tm tm;
+ZeroVar(&tm);
+if (strptime(timeStamp, "%d/%b/%Y:%T", &tm) != NULL)
+    return mktime(&tm);
+else
+    return 0;
+}
+
+struct apacheAccessLog *apacheAccessLogParse(char *line, 
+	char *fileName, int lineIx)
+/* Return a apacheAccessLog from line.  Return NULL if there's a parsing 
+ * problem, but don't abort. */
+{
+struct apacheAccessLog *ll;
+char *buf, *s, *e;
+AllocVar(ll);
+ll->buf = buf = cloneString(line);
+ll->ip = nextWord(&buf);
+ll->dash1 = nextWord(&buf);
+ll->dash2 = nextWord(&buf);
+if (buf == NULL)
+    {
+    shortLine(&ll, line, fileName, lineIx);
+    return NULL;
+    }
+
+/* Parse out bracket enclosed timeStamp and time zone. */
+s = strchr(buf, '[');
+if (s == NULL)
+    {
+    badTimeStamp(&ll, line, fileName, lineIx);
+    return NULL;
+    }
+s += 1;
+e = strchr(s, ']');
+if (e == NULL)
+    {
+    badTimeStamp(&ll, line, fileName, lineIx);
+    return NULL;
+    }
+*e = 0;
+ll->timeStamp = nextWord(&s);
+if (!isdigit(ll->timeStamp[0]))
+    {
+    badTimeStamp(&ll, line, fileName, lineIx);
+    return NULL;
+    }
+ll->timeZone = nextWord(&s);
+
+/* Convert time stamp to Unix tick. */
+ll->tick = apacheAccessLogTimeToTick(ll->timeStamp);
+
+
+buf = e+2;
+if (buf[0] != '"')
+    {
+    badFormat(&ll, line, fileName, lineIx, "Missing quote after time stamp");
+    return NULL;
+    }
+if (!parseQuotedString(buf, buf, &e))
+    {
+    unterminatedQuote(&ll, line, fileName, lineIx);
+    return NULL;
+    }
+ll->method = nextWord(&buf);
+ll->url = nextWord(&buf);
+ll->httpVersion = nextWord(&buf);
+if (ll->url == NULL)
+    {
+    badFormat(&ll, line, fileName, lineIx, "Missing URL");
+    return NULL;
+    }
+buf = e;
+s = nextWord(&buf);
+if (!isdigit(s[0]))
+    {
+    badFormat(&ll, line, fileName, lineIx, "Non-numerical status code");
+    return NULL;
+    }
+ll->status = atoi(s);
+ll->num1 = nextWord(&buf);
+if (buf == NULL)
+    {
+    shortLine(&ll, line, fileName, lineIx);
+    return NULL;
+    }
+if (buf[0] != '"')
+    {
+    badFormat(&ll, line, fileName, lineIx, "Missing quote after request");
+    return NULL;
+    }
+if (!parseQuotedString(buf, buf, &e))
+    {
+    unterminatedQuote(&ll, line, fileName, lineIx);
+    return NULL;
+    }
+if (!sameString(buf, "-"))
+    ll->referrer = buf;
+buf = e + 1;
+if (buf[0] != '"')
+    {
+    badFormat(&ll, line, fileName, lineIx, "Missing quote after referrer");
+    return NULL;
+    }
+if (!parseQuotedString(buf, buf, &e))
+    {
+    unterminatedQuote(&ll, line, fileName, lineIx);
+    return NULL;
+    }
+ll->program = buf;
+
+/* Parse out elapsed time if it's there. */
+ll->runTime = -1;		/* Marker for unset. */
+char *runTime = nextWord(&e);
+char *label = nextWord(&e);
+if (label != NULL)
+    {
+    if (!isdigit(runTime[0]))
+        {
+	badFormat(&ll, line, fileName, lineIx, "non-numerical seconds");
+	return NULL;
+	}
+    int x = atoi(runTime);
+    if (sameString(label, "seconds"))
+        ll->runTime = x*1000;
+    else if (sameString(label, "microseconds"))
+        ll->runTime = x/1000;
+    }
+
+return ll;
+}
+
+int apacheAccessLogCmpTick(const void *va, const void *vb)
+/* Compare items to sort by tick (which tracks timestamp) */
+{
+const struct apacheAccessLog *a = *((struct apacheAccessLog **)va);
+const struct apacheAccessLog *b = *((struct apacheAccessLog **)vb);
+if (a->tick < b->tick)
+    return -1;
+else if (a->tick == b->tick)
+    return 0;
+else
+    return 1;
+}
+
diff --git a/gbtools/src/blatSrc/lib/asParse.c b/gbtools/src/blatSrc/lib/asParse.c
new file mode 100644
index 0000000..2e4ae82
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/asParse.c
@@ -0,0 +1,664 @@
+/* asParse - parse out an autoSql .as file. */
+
+/* Copyright (C) 2014 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "linefile.h"
+#include "tokenizer.h"
+#include "dystring.h"
+#include "asParse.h"
+#include "sqlNum.h"
+
+
+/* n.b. switched double/float from %f to %g to partially address losing
+ * precision.  Values like 2e-12 were being rounded to 0.0 with %f.  While %g
+ * doesn't match the precision of the database fields, specifying a larger
+ * precision with %g resulted in numbers like 1.9999999999999999597733e-12,
+ *  which might impact load time.  This issue needs more investigation.*/
+struct asTypeInfo asTypes[] = {
+    {t_double,  "double",  FALSE, FALSE, "double",            "double",        "Double",   "Double",   "%g",   "FloatField"},
+    {t_float,   "float",   FALSE, FALSE, "float",             "float",         "Float",    "Float",    "%g",   "FloatField"},
+    {t_char,    "char",    FALSE, FALSE, "char",              "char",          "Char",     "Char",     "%c",   "CharField"},
+    {t_int,     "int",     FALSE, FALSE, "int",               "int",           "Signed",   "Signed",   "%d",   "IntegerField"},
+    {t_uint,    "uint",    TRUE,  FALSE, "int unsigned",      "unsigned",      "Unsigned", "Unsigned", "%u",   "PositiveIntegerField"},
+    {t_short,   "short",   FALSE, FALSE, "smallint",          "short",         "Short",    "Signed",   "%d",   "SmallIntegerField"},
+    {t_ushort,  "ushort",  TRUE,  FALSE, "smallint unsigned", "unsigned short","Ushort",   "Unsigned", "%u",   "SmallPositiveIntegerField"},
+    {t_byte,    "byte",    FALSE, FALSE, "tinyint",           "signed char",   "Byte",     "Signed",   "%d",   "SmallIntegerField"},
+    {t_ubyte,   "ubyte",   TRUE,  FALSE, "tinyint unsigned",  "unsigned char", "Ubyte",    "Unsigned", "%u",   "SmallPositiveIntegerField"},
+    {t_off,     "bigint",  FALSE, FALSE, "bigint",            "long long",     "LongLong", "LongLong", "%lld", "BigIntegerField"},
+    {t_string,  "string",  FALSE, TRUE,  "varchar(255)",      "char *",        "String",   "String",   "%s",   "CharField"},
+    {t_lstring, "lstring", FALSE, TRUE,  "longblob",          "char *",        "String",   "String",   "%s",   "TextField"},
+    {t_enum,    "enum",    FALSE, FALSE, "enum",              "!error!",       "Enum",     "Enum",     NULL,   "CharField"},
+    {t_set,     "set",     FALSE, FALSE, "set",               "unsigned",      "Set",      "Set",      NULL,   NULL},
+    {t_object,  "object",  FALSE, FALSE, "longblob",          "!error!",       "Object",   "Object",   NULL,   "TextField"},
+    {t_object,  "table",   FALSE, FALSE, "longblob",          "!error!",       "Object",   "Object",   NULL,   "TextField"},
+    {t_simple,  "simple",  FALSE, FALSE, "longblob",          "!error!",       "Simple",   "Simple",   NULL,   "TextField"},
+};
+
+struct asTypeInfo *asTypeFindLow(char *name)
+/* Return asType for a low level type of given name.  (Low level because may be decorated 
+ * with array or pointer  stuff at a higher level).  Returns NULL if not found. */
+{
+int i;
+for (i=0; i<ArraySize(asTypes); ++i)
+    {
+    if (sameWord(asTypes[i].name, name))
+	return &asTypes[i];
+    }
+return NULL;
+}
+
+static struct asTypeInfo *findLowType(struct tokenizer *tkz)
+/* Return low type info.  Squawk and die if s doesn't
+ * correspond to one. */
+{
+struct asTypeInfo *type = asTypeFindLow(tkz->string);
+if (type == NULL)
+    tokenizerErrAbort(tkz, "Unknown type '%s'", tkz->string);
+return type;
+}
+
+static void sqlSymDef(struct asColumn *col, struct dyString *dy)
+/* print symbolic column definition for sql */
+{
+dyStringPrintf(dy, "%s(", col->lowType->sqlName);
+struct slName *val;
+for (val = col->values; val != NULL; val = val->next)
+    {
+    dyStringPrintf(dy, "\"%s\"", val->name);
+    if (val->next != NULL)
+        dyStringAppend(dy, ", ");
+    }
+dyStringPrintf(dy, ")");
+}
+
+struct dyString *asColumnToSqlType(struct asColumn *col)
+/* Convert column to a sql type spec in returned dyString */
+{
+struct asTypeInfo *lt = col->lowType;
+struct dyString *type = dyStringNew(32);
+if ((lt->type == t_enum) || (lt->type == t_set))
+    sqlSymDef(col, type);
+else if (col->isList || col->isArray)
+    dyStringPrintf(type, "longblob");
+else if (lt->type == t_char)
+    dyStringPrintf(type, "char(%d)", col->fixedSize ? col->fixedSize : 1);
+else
+    dyStringPrintf(type, "%s", lt->sqlName);
+return type;
+}
+
+char *asTypeNameFromSqlType(char *sqlType)
+/* Return the autoSql type name (not enum) for the given SQL type, or NULL.
+ * Don't attempt to free result. */
+// Unfortunately, when sqlType is longblob, we don't know whether it's a list
+// of some type or an lstring.  :(
+{
+if (sqlType == NULL)
+    return NULL;
+// For comparison with asTypes[*], we need to strip '(...)' strings from all types
+// except 'varchar' which must be 'varchar(255)'.  For 'char', we need to remember
+// what was in the '(...)' so we can add back the '[...]' after type comparison.
+boolean isArray = FALSE;
+int arraySize = 0;
+static char buf[1024];
+if (startsWith("varchar", sqlType))
+    safecpy(buf, sizeof(buf), "varchar(255)");
+else
+    {
+    safecpy(buf, sizeof(buf), sqlType);
+    char *leftParen = strstr(buf, " (");
+    if (leftParen == NULL)
+	leftParen = strchr(buf, '(');
+    if (leftParen != NULL)
+	{
+	isArray = startsWith("char", sqlType);
+	char *rightParen = strrchr(leftParen, ')');
+	if (rightParen != NULL)
+	    {
+	    *rightParen = '\0';
+	    arraySize = atoi(leftParen+1);
+	    strcpy(leftParen, rightParen+1);
+	    }
+	else
+	    errAbort("asTypeNameFromSqlType: mismatched ( in sql type def'%s'", sqlType);
+	}
+    }
+int i;
+for (i = 0;  i < ArraySize(asTypes);  i++)
+    if (sameString(buf, asTypes[i].sqlName))
+	{
+	if (isArray)
+	    {
+	    int typeLen = strlen(buf);
+	    safef(buf+typeLen, sizeof(buf)-typeLen, "[%d]", arraySize);
+	    return buf;
+	    }
+	else
+	    return asTypes[i].name;
+	}
+return NULL;
+}
+
+static struct asColumn *mustFindColumn(struct asObject *table, char *colName)
+/* Return column or die. */
+{
+struct asColumn *col;
+
+for (col = table->columnList; col != NULL; col = col->next)
+    {
+    if (sameWord(col->name, colName))
+	return col;
+    }
+errAbort("Couldn't find column %s", colName);
+return NULL;
+}
+
+static struct asObject *findObType(struct asObject *objList, char *obName)
+/* Find object with given name. */
+{
+struct asObject *obj;
+for (obj = objList; obj != NULL; obj = obj->next)
+    {
+    if (sameWord(obj->name, obName))
+	return obj;
+    }
+return NULL;
+}
+
+static void asParseColArraySpec(struct tokenizer *tkz, struct asObject *obj,
+                                struct asColumn *col)
+/* parse the array length specification for a column */
+{
+if (col->lowType->type == t_simple)
+    col->isArray = TRUE;
+else
+    col->isList = TRUE;
+tokenizerMustHaveNext(tkz);
+if (isdigit(tkz->string[0]))
+    {
+    col->fixedSize = atoi(tkz->string);
+    tokenizerMustHaveNext(tkz);
+    }
+else if (isalpha(tkz->string[0]))
+    {
+#ifdef OLD
+    if (obj->isSimple)
+        tokenizerErrAbort(tkz, "simple objects can't include variable length arrays\n");
+#endif /* OLD */
+    col->linkedSizeName = cloneString(tkz->string);
+    col->linkedSize = mustFindColumn(obj, col->linkedSizeName);
+    col->linkedSize->isSizeLink = TRUE;
+    tokenizerMustHaveNext(tkz);
+    }
+else
+    tokenizerErrAbort(tkz, "must have column name or integer inside []'s\n");
+tokenizerMustMatch(tkz, "]");
+}
+
+static void asParseColSymSpec(struct tokenizer *tkz, struct asObject *obj,
+                              struct asColumn *col)
+/* parse the enum or set symbolic values for a column */
+{
+tokenizerMustHaveNext(tkz);
+while (tkz->string[0] != ')')
+    {
+    slSafeAddHead(&col->values, slNameNew(tkz->string));
+    /* look for `,' or `)', but allow `,' after last token */
+    tokenizerMustHaveNext(tkz);
+    if (!((tkz->string[0] == ',') || (tkz->string[0] == ')')))
+        tokenizerErrAbort(tkz, "expected `,' or `)' got `%s'", tkz->string);
+    if (tkz->string[0] != ')')
+        tokenizerMustHaveNext(tkz);
+    }
+tokenizerMustMatch(tkz, ")");
+slReverse(&col->values);
+}
+
+int tokenizerUnsignedVal(struct tokenizer *tkz)
+/* Ensure current token is an unsigned integer and return value */
+{
+if (!isdigit(tkz->string[0]))
+    {
+    struct lineFile *lf = tkz->lf;
+    errAbort("expecting number got %s line %d of %s", tkz->string, lf->lineIx, lf->fileName);
+    }
+return sqlUnsigned(tkz->string);
+}
+
+struct asIndex *asParseIndex(struct tokenizer *tkz, struct asColumn *col)
+/* See if there's an index key word and if so parse it and return an asIndex
+ * based on it.  If not an index key word then just return NULL. */
+{
+struct asIndex *index = NULL;
+if (sameString(tkz->string, "primary") || sameString(tkz->string, "unique")
+	|| sameString(tkz->string, "index") )
+    {
+    AllocVar(index);
+    index->type = cloneString(tkz->string);
+    tokenizerMustHaveNext(tkz);
+    if (tkz->string[0] == '[')
+	{
+	tokenizerMustHaveNext(tkz);
+	index->size = tokenizerUnsignedVal(tkz);
+	tokenizerMustHaveNext(tkz);
+	tokenizerMustMatch(tkz, "]");
+	}
+    }
+return index;
+}
+
+static void asParseColDef(struct tokenizer *tkz, struct asObject *obj)
+/* Parse a column definition */
+{
+struct asColumn *col;
+AllocVar(col);
+
+col->lowType = findLowType(tkz);
+tokenizerMustHaveNext(tkz);
+
+if (col->lowType->type == t_object || col->lowType->type == t_simple)
+    {
+    col->obName = cloneString(tkz->string);
+    tokenizerMustHaveNext(tkz);
+    }
+
+if (tkz->string[0] == '[')
+    asParseColArraySpec(tkz, obj, col);
+else if (tkz->string[0] == '(')
+    asParseColSymSpec(tkz, obj, col);
+
+col->name = cloneString(tkz->string);
+tokenizerMustHaveNext(tkz);
+col->index = asParseIndex(tkz, col);
+if (sameString(tkz->string, "auto"))
+    {
+    col->autoIncrement = TRUE;
+    if (!asTypesIsInt(col->lowType->type))
+        errAbort("error - auto with non-integer type for field %s", col->name);
+    tokenizerMustHaveNext(tkz);
+    }
+tokenizerMustMatch(tkz, ";");
+col->comment = cloneString(tkz->string);
+tokenizerMustHaveNext(tkz);
+if (col->lowType->type == t_char && col->fixedSize != 0)
+    col->isList = FALSE;	/* It's not really a list... */
+slAddHead(&obj->columnList, col);
+}
+
+static struct asObject *asParseTableDef(struct tokenizer *tkz)
+/* Parse a table or object definintion */
+{
+struct asObject *obj;
+AllocVar(obj);
+if (sameWord(tkz->string, "table"))
+    obj->isTable = TRUE;
+else if (sameWord(tkz->string, "simple"))
+    obj->isSimple = TRUE;
+else if (sameWord(tkz->string, "object"))
+    ;
+else
+    tokenizerErrAbort(tkz, "Expecting 'table' or 'object' got '%s'", tkz->string);
+tokenizerMustHaveNext(tkz);
+obj->name = cloneString(tkz->string);
+tokenizerMustHaveNext(tkz);
+obj->comment = cloneString(tkz->string);
+
+/* parse columns */
+tokenizerMustHaveNext(tkz);
+tokenizerMustMatch(tkz, "(");
+while (tkz->string[0] != ')')
+    asParseColDef(tkz, obj);
+slReverse(&obj->columnList);
+return obj;
+}
+
+static void asLinkEmbeddedObjects(struct asObject *obj, struct asObject *objList)
+/* Look up any embedded objects. */
+{
+struct asColumn *col;
+for (col = obj->columnList; col != NULL; col = col->next)
+    {
+    if (col->obName != NULL)
+        {
+        if ((col->obType = findObType(objList, col->obName)) == NULL)
+            errAbort("%s used but not defined", col->obName);
+        if (obj->isSimple)
+            {
+            if (!col->obType->isSimple)
+                errAbort("Simple object %s with embedded non-simple object %s",
+                    obj->name, col->name);
+            }
+        }
+    }
+}
+
+static struct asObject *asParseTokens(struct tokenizer *tkz)
+/* Parse file into a list of objects. */
+{
+struct asObject *objList = NULL;
+struct asObject *obj;
+
+while (tokenizerNext(tkz))
+    {
+    obj = asParseTableDef(tkz);
+    if (findObType(objList, obj->name))
+        tokenizerErrAbort(tkz, "Duplicate definition of %s", obj->name);
+    slAddTail(&objList, obj);
+    }
+
+for (obj = objList; obj != NULL; obj = obj->next)
+    asLinkEmbeddedObjects(obj, objList);
+
+return objList;
+}
+
+char *asTypesIntSizeDescription(enum asTypes type)
+/* Return description of integer size.  Do not free. */
+{
+int size = asTypesIntSize(type);
+switch (size)
+    {
+    case 1:
+	return "byte";
+    case 2:
+	return "short integer";
+    case 4:
+	return "integer";
+    case 8:
+	return "long long integer";
+    default:
+        errAbort("Unexpected error in asTypesIntSizeDescription: expecting integer type size of 1, 2, 4, or 8.  Got %d.", size);
+	return NULL; // happy compiler, never gets here
+    
+    }
+}
+
+int asTypesIntSize(enum asTypes type)
+/* Return size in bytes of any integer type - short, long, unsigned, etc. */
+{
+switch (type)
+    {
+    case t_int:
+    case t_uint:
+	return 4;
+    case t_short:
+    case t_ushort:
+	return 2;
+    case t_byte:
+    case t_ubyte:
+	return 1;
+    case t_off:
+	return 8;
+    default:
+        errAbort("Unexpected error in  asTypesIntSize: expecting integer type.  Got %d.", type);
+	return 0; // happy compiler, never gets here
+    }
+}
+
+boolean asTypesIsUnsigned(enum asTypes type)
+/* Return TRUE if it's any integer type - short, long, unsigned, etc. */
+{
+switch (type)
+    {
+    case t_uint:
+    case t_ushort:
+    case t_ubyte:
+       return TRUE;
+    default:
+       return FALSE;
+    }
+}
+
+boolean asTypesIsInt(enum asTypes type)
+/* Return TRUE if it's any integer type - short, long, unsigned, etc. */
+{
+switch (type)
+    {
+    case t_int:
+    case t_uint:
+    case t_short:
+    case t_ushort:
+    case t_byte:
+    case t_ubyte:
+    case t_off:
+       return TRUE;
+    default:
+       return FALSE;
+    }
+}
+
+boolean asTypesIsFloating(enum asTypes type)
+/* Return TRUE if it's any floating point type - float or double. */
+{
+switch (type)
+    {
+    case t_float:
+    case t_double:
+       return TRUE;
+    default:
+       return FALSE;
+    }
+}
+
+static struct asObject *asParseLineFile(struct lineFile *lf)
+/* Parse open line file.  Closes lf as a side effect. */
+{
+struct tokenizer *tkz = tokenizerOnLineFile(lf);
+struct asObject *objList = asParseTokens(tkz);
+tokenizerFree(&tkz);
+return objList;
+}
+
+
+void asColumnFree(struct asColumn **pAs)
+/* free a single asColumn */
+{
+struct asColumn *as = *pAs;
+if (as != NULL)
+    {
+    freeMem(as->name);
+    freeMem(as->comment);
+    freez(pAs);
+    }
+}
+
+
+void asColumnFreeList(struct asColumn **pList)
+/* free a list of asColumn */
+{
+struct asColumn *el, *next;
+
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    asColumnFree(&el);
+    }
+*pList = NULL;
+}
+
+void asObjectFree(struct asObject **pAs)
+/* free a single asObject */
+{
+struct asObject *as = *pAs;
+if (as != NULL)
+    {
+    freeMem(as->name);
+    freeMem(as->comment);
+    asColumnFreeList(&as->columnList);
+    freez(pAs);
+    }
+}
+
+
+void asObjectFreeList(struct asObject **pList)
+/* free a list of asObject */
+{
+struct asObject *el, *next;
+
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    asObjectFree(&el);
+    }
+*pList = NULL;
+}
+
+struct asObject *asParseFile(char *fileName)
+/* Parse autoSql .as file. */
+{
+return asParseLineFile(lineFileOpen(fileName, TRUE));
+}
+
+
+struct asObject *asParseText(char *text)
+/* Parse autoSql from text (as opposed to file). */
+{
+char *dupe = cloneString(text);
+struct lineFile *lf = lineFileOnString("text", TRUE, dupe);
+struct asObject *objList = asParseLineFile(lf);
+freez(&dupe);
+return objList;
+}
+
+struct asColumn *asColumnFind(struct asObject *asObj, char *name)
+// Return named column.
+{
+struct asColumn *asCol = NULL;
+if (asObj!= NULL)
+    {
+    for (asCol = asObj->columnList; asCol != NULL; asCol = asCol->next)
+        if (sameString(asCol->name, name))
+             break;
+    }
+return asCol;
+}
+
+int asColumnFindIx(struct asColumn *list, char *name)
+/* Return index of first element of asColumn list that matches name.
+ * Return -1 if not found. */
+{
+struct asColumn *ac;
+int ix = 0;
+for (ac = list; ac != NULL; ac = ac->next, ix++)
+    if (sameString(name, ac->name))
+        return ix;
+return -1;
+}
+
+boolean asCompareObjs(char *name1, struct asObject *as1, char *name2, struct asObject *as2, int numColumnsToCheck,
+ int *retNumColumnsSame, boolean abortOnDifference)
+/* Compare as-objects as1 and as2 making sure several important fields show they are the same name and type.
+ * If difference found, print it to stderr.  If abortOnDifference, errAbort.
+ * Othewise, return TRUE if the objects columns match through the first numColumnsToCheck fields. 
+ * If retNumColumnsSame is not NULL, then it will be set to the number of contiguous matching columns. */
+{
+boolean differencesFound = FALSE;
+struct asColumn *col1 = as1->columnList, *col2 = as2->columnList;
+int checkCount = 0;
+int verboseLevel = 2;
+if (abortOnDifference)
+    verboseLevel = 1;
+if (as1->isTable != as2->isTable)
+    {
+    verbose(verboseLevel,"isTable does not match: %s=[%d]  %s=[%d]", name1, as1->isTable, name2, as2->isTable);
+    differencesFound = TRUE;
+    }
+else if (as1->isSimple != as2->isSimple)
+    {
+    verbose(verboseLevel,"isSimple does not match: %s=[%d]  %s=[%d]", name1, as1->isSimple, name2, as2->isSimple);
+    differencesFound = TRUE;
+    }
+else
+    {
+    if (!as1->isTable)
+	{
+	errAbort("asCompareObjLists only supports Table .as objects at this time.");
+	}
+    for (col1 = as1->columnList, col2 = as2->columnList; 
+	 col1 != NULL && col2 != NULL && checkCount < numColumnsToCheck; 
+	 col1 = col1->next, col2 = col2->next, ++checkCount)
+	{
+	if (!sameOk(col1->name, col2->name))
+	    {
+	    verbose(verboseLevel,"column #%d names do not match: %s=[%s]  %s=[%s]\n"
+		, checkCount+1, name1, col1->name, name2, col2->name);
+	    differencesFound = TRUE;
+	    break;
+	    }
+	else if (col1->isSizeLink != col2->isSizeLink)
+	    {
+	    verbose(verboseLevel,"column #%d isSizeLink do not match: %s=[%d]  %s=[%d]\n"
+		, checkCount+1, name1, col1->isSizeLink, name2, col2->isSizeLink);
+	    differencesFound = TRUE;
+	    break;
+	    }
+	else if (col1->isList != col2->isList)
+	    {
+	    verbose(verboseLevel,"column #%d isList do not match: %s=[%d]  %s=[%d]\n"
+		, checkCount+1, name1, col1->isList, name2, col2->isList);
+	    differencesFound = TRUE;
+	    break;
+	    }
+	else if (col1->isArray != col2->isArray)
+	    {
+	    verbose(verboseLevel,"column #%d isArray do not match: %s=[%d]  %s=[%d]\n"
+		, checkCount+1, name1, col1->isArray, name2, col2->isArray);
+	    differencesFound = TRUE;
+	    break;
+	    }
+	else if (!sameOk(col1->lowType->name, col2->lowType->name))
+	    {
+	    verbose(verboseLevel,"column #%d type names do not match: %s=[%s]  %s=[%s]\n"
+		, checkCount+1, name1, col1->lowType->name, name2, col2->lowType->name);
+	    differencesFound = TRUE;
+	    break;
+	    }
+	else if (col1->fixedSize != col2->fixedSize)
+	    {
+	    verbose(verboseLevel,"column #%d fixedSize do not match: %s=[%d]  %s=[%d]\n"
+		, checkCount+1, name1, col1->fixedSize, name2, col2->fixedSize);
+	    differencesFound = TRUE;
+	    break;
+	    }
+	else if (!sameOk(col1->linkedSizeName, col2->linkedSizeName))
+	    {
+	    verbose(verboseLevel,"column #%d linkedSizeName do not match: %s=[%s]  %s=[%s]\n"
+		, checkCount+1, name1, col1->linkedSizeName, name2, col2->linkedSizeName);
+	    differencesFound = TRUE;
+	    break;
+	    }
+	}
+    if (!differencesFound && checkCount < numColumnsToCheck)
+	errAbort("Unexpected error in asCompareObjLists: asked to compare %d columns in %s and %s, but only found %d in one or both asObjects."
+	    , numColumnsToCheck, name1, name2, checkCount);
+    }
+if (differencesFound)
+    {
+    if (abortOnDifference)
+    	errAbort("asObjects differ.");
+    else
+    	verbose(verboseLevel,"asObjects differ. Matching field count=%d\n", checkCount);
+    }
+if (retNumColumnsSame)
+    *retNumColumnsSame = checkCount;
+return (!differencesFound);
+}
+
+boolean asColumnNamesMatchFirstN(struct asObject *as1, struct asObject *as2, int n)
+/* Compare only the column names of as1 and as2, not types because if an asObj has been
+ * created from sql type info, longblobs are cast to lstrings but in the proper autoSql
+ * might be lists instead (e.g. longblob in sql, uint exonStarts[exonCount] in autoSql. */
+{
+struct asColumn *col1 = as1->columnList, *col2 = as2->columnList;
+int checkCount = 0;
+for (col1 = as1->columnList, col2 = as2->columnList;
+     col1 != NULL && col2 != NULL && checkCount < n;
+     col1 = col1->next, col2 = col2->next, ++checkCount)
+    {
+    if (!sameOk(col1->name, col2->name))
+	return FALSE;
+    }
+return TRUE;
+}
diff --git a/gbtools/src/blatSrc/lib/axt.c b/gbtools/src/blatSrc/lib/axt.c
new file mode 100644
index 0000000..3dca3a4
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/axt.c
@@ -0,0 +1,1106 @@
+/* AXT - A simple alignment format with four lines per
+ * alignment.  The first specifies the names of the
+ * two sequences that align and the position of the
+ * alignment, as well as the strand.  The next two
+ * lines contain the alignment itself including dashes
+ * for inserts.  The alignment is separated from the
+ * next alignment with a blank line. 
+ *
+ * This file contains routines to read such alignments.
+ * Note that though the coordinates are one based and
+ * closed on disk, they get converted to our usual half
+ * open zero based in memory. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "obscure.h"
+#include "linefile.h"
+#include "dnautil.h"
+#include "axt.h"
+
+
+void axtFree(struct axt **pEl)
+/* Free an axt. */
+{
+struct axt *el = *pEl;
+if (el != NULL)
+    {
+    freeMem(el->qName);
+    freeMem(el->tName);
+    freeMem(el->qSym);
+    freeMem(el->tSym);
+    freez(pEl);
+    }
+}
+
+void axtFreeList(struct axt **pList)
+/* Free a list of dynamically allocated axt's */
+{
+struct axt *el, *next;
+
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    axtFree(&el);
+    }
+*pList = NULL;
+}
+
+
+struct axt *axtReadWithPos(struct lineFile *lf, off_t *retOffset)
+/* Read next axt, and if retOffset is not-NULL, fill it with
+ * offset of start of axt. */
+{
+char *words[10], *line;
+int wordCount, symCount;
+struct axt *axt;
+
+wordCount = lineFileChop(lf, words);
+if (retOffset != NULL)
+    *retOffset = lineFileTell(lf);
+if (wordCount <= 0)
+    return NULL;
+if (wordCount < 8)
+    {
+    errAbort("Expecting at least 8 words line %d of %s got %d\n", lf->lineIx, lf->fileName,
+    	wordCount);
+    }
+AllocVar(axt);
+
+axt->qName = cloneString(words[4]);
+axt->qStart = lineFileNeedNum(lf, words, 5) - 1;
+axt->qEnd = lineFileNeedNum(lf, words, 6);
+axt->qStrand = words[7][0];
+axt->tName = cloneString(words[1]);
+axt->tStart = lineFileNeedNum(lf, words, 2) - 1;
+axt->tEnd = lineFileNeedNum(lf, words, 3);
+axt->tStrand = '+';
+if (wordCount > 8)
+    axt->score = lineFileNeedNum(lf, words, 8);
+lineFileNeedNext(lf, &line, NULL);
+axt->symCount = symCount = strlen(line);
+axt->tSym = cloneMem(line, symCount+1);
+lineFileNeedNext(lf, &line, NULL);
+if (strlen(line) != symCount)
+    errAbort("Symbol count %d != %d inconsistent between sequences line %d and prev line of %s",
+    	symCount, (int)strlen(line), lf->lineIx, lf->fileName);
+axt->qSym = cloneMem(line, symCount+1);
+lineFileNext(lf, &line, NULL);	/* Skip blank line */
+return axt;
+}
+
+struct axt *axtRead(struct lineFile *lf)
+/* Read in next record from .axt file and return it.
+ * Returns NULL at EOF. */
+{
+return axtReadWithPos(lf, NULL);
+}
+
+void axtWrite(struct axt *axt, FILE *f)
+/* Output axt to axt file. */
+{
+static int ix = 0;
+fprintf(f, "%d %s %d %d %s %d %d %c",
+	ix++, axt->tName, axt->tStart+1, axt->tEnd, 
+	axt->qName, axt->qStart+1, axt->qEnd, axt->qStrand);
+fprintf(f, " %d", axt->score);
+fputc('\n', f);
+mustWrite(f, axt->tSym, axt->symCount);
+fputc('\n', f);
+mustWrite(f, axt->qSym, axt->symCount);
+fputc('\n', f);
+fputc('\n', f);
+if ((strlen(axt->tSym) != strlen(axt->qSym)) || (axt->symCount > strlen(axt->tSym)))
+    fprintf(stderr,"Symbol count %d != %d || %d > %d inconsistent in %s in "
+	    "record %d.\n",
+	    (int)strlen(axt->qSym), (int)strlen(axt->tSym), axt->symCount,
+	    (int)strlen(axt->tSym), axt->qName, ix);
+}
+
+int axtCmpQuery(const void *va, const void *vb)
+/* Compare to sort based on query position. */
+{
+const struct axt *a = *((struct axt **)va);
+const struct axt *b = *((struct axt **)vb);
+int dif;
+dif = strcmp(a->qName, b->qName);
+if (dif == 0)
+    dif = a->qStart - b->qStart;
+return dif;
+}
+
+int axtCmpTarget(const void *va, const void *vb)
+/* Compare to sort based on target position. */
+{
+const struct axt *a = *((struct axt **)va);
+const struct axt *b = *((struct axt **)vb);
+int dif;
+dif = strcmp(a->tName, b->tName);
+if (dif == 0)
+    dif = a->tStart - b->tStart;
+return dif;
+}
+
+int axtCmpScore(const void *va, const void *vb)
+/* Compare to sort based on score. */
+{
+const struct axt *a = *((struct axt **)va);
+const struct axt *b = *((struct axt **)vb);
+return b->score - a->score;
+}
+
+int axtCmpTargetScoreDesc(const void *va, const void *vb)
+/* Compare to sort based on target name and score descending. */
+{
+const struct axt *a = *((struct axt **)va);
+const struct axt *b = *((struct axt **)vb);
+int dif;
+dif = strcmp(a->tName, b->tName);
+if (dif == 0)
+    dif = b->score - a->score;
+return dif;
+}
+
+boolean axtCheck(struct axt *axt, struct lineFile *lf)
+/* Return FALSE if there's a problem with axt. */
+{
+int tSize = countNonDash(axt->tSym, axt->symCount);
+int qSize = countNonDash(axt->qSym, axt->symCount);
+if (tSize != axt->tEnd - axt->tStart)
+    {
+    warn("%d non-dashes, but %d bases to cover at line %d of %s", 
+    	tSize, axt->tEnd - axt->tStart, lf->lineIx, lf->fileName);
+    return FALSE;
+    }
+if (qSize != axt->qEnd - axt->qStart)
+    {
+    warn("%d non-dashes, but %d bases to cover at line %d of %s", 
+    	tSize, axt->qEnd - axt->qStart, lf->lineIx, lf->fileName);
+    return FALSE;
+    }
+return TRUE;
+}
+
+int axtScoreUngapped(struct axtScoreScheme *ss, char *q, char *t, int size)
+/* Score ungapped alignment. */
+{
+int score = 0;
+int i;
+for (i=0; i<size; ++i)
+    score += ss->matrix[(int)q[i]][(int)t[i]];
+return score;
+}
+
+int axtScoreSym(struct axtScoreScheme *ss, int symCount, char *qSym, char *tSym)
+/* Return score without setting up an axt structure. */
+{
+int i;
+char q,t;
+int score = 0;
+boolean lastGap = FALSE;
+int gapStart = ss->gapOpen;
+int gapExt = ss->gapExtend;
+
+dnaUtilOpen();
+for (i=0; i<symCount; ++i)
+    {
+    q = qSym[i];
+    t = tSym[i];
+    if (q == '-' || t == '-')
+        {
+	if (lastGap)
+	    score -= gapExt;
+	else
+	    {
+	    /* Use gapStart+gapExt to be consistent with blastz: */
+	    score -= (gapStart + gapExt);
+	    lastGap = TRUE;
+	    }
+	}
+    else
+        {
+	score += ss->matrix[(int)q][(int)t];
+	lastGap = FALSE;
+	}
+    }
+return score;
+}
+
+boolean gapNotMasked(char q, char t)
+/* return true if gap on one side and upper case on other side */
+{
+if (q=='-' && t=='-')
+    return FALSE;
+if (q=='-' && t<'a')
+    return TRUE;
+if (t=='-' && q<'a')
+    return TRUE;
+return FALSE;
+}
+
+
+int axtScoreSymFilterRepeats(struct axtScoreScheme *ss, int symCount, char *qSym, char *tSym)
+/* Return score without setting up an axt structure. Do not penalize gaps if repeat masked (lowercase)*/
+{
+int i;
+char q,t;
+int score = 0;
+boolean lastGap = FALSE;
+int gapStart = ss->gapOpen;
+int gapExt = ss->gapExtend;
+
+dnaUtilOpen();
+for (i=0; i<symCount; ++i)
+    {
+    q = qSym[i];
+    t = tSym[i];
+    if ((q == '-' || t == '-') && gapNotMasked(q,t))
+        {
+	if (lastGap)
+	    score -= gapExt;
+	else
+	    {
+	    /* Use gapStart+gapExt to be consistent with blastz: */
+	    score -= (gapStart + gapExt);
+	    lastGap = TRUE;
+	    }
+	}
+    else
+        {
+	score += ss->matrix[(int)q][(int)t];
+	lastGap = FALSE;
+	}
+    }
+return score;
+}
+
+int axtScoreFilterRepeats(struct axt *axt, struct axtScoreScheme *ss)
+/* Return calculated score of axt. */
+{
+return axtScoreSymFilterRepeats(ss, axt->symCount, axt->qSym, axt->tSym);
+}
+
+int axtScore(struct axt *axt, struct axtScoreScheme *ss)
+/* Return calculated score of axt. */
+{
+return axtScoreSym(ss, axt->symCount, axt->qSym, axt->tSym);
+}
+
+int axtScoreDnaDefault(struct axt *axt)
+/* Score DNA-based axt using default scheme. */
+{
+static struct axtScoreScheme *ss;
+if (ss == NULL)
+    ss = axtScoreSchemeDefault();
+return axtScore(axt, ss);
+}
+
+int axtScoreProteinDefault(struct axt *axt)
+/* Score protein-based axt using default scheme. */
+{
+static struct axtScoreScheme *ss;
+if (ss == NULL)
+    ss = axtScoreSchemeProteinDefault();
+return axtScore(axt, ss);
+}
+
+boolean axtGetSubsetOnT(struct axt *axt, struct axt *axtOut,
+			int newStart, int newEnd, struct axtScoreScheme *ss,
+			boolean includeEdgeGaps)
+/* Return FALSE if axt is not in the new range.  Otherwise, set axtOut to
+ * a subset that goes from newStart to newEnd in target coordinates. 
+ * If includeEdgeGaps, don't trim target gaps before or after the range. */
+{
+if (axt == NULL)
+    return FALSE;
+if (newStart < axt->tStart)
+    newStart = axt->tStart;
+if (newEnd > axt->tEnd)
+    newEnd = axt->tEnd;
+if (includeEdgeGaps ? (newEnd < newStart) : (newEnd <= newStart)) 
+    return FALSE;
+if (newStart == axt->tStart && newEnd == axt->tEnd)
+    {
+    axt->score = axtScore(axt, ss);
+    *axtOut = *axt;
+    return TRUE;
+    }
+else
+    {
+    struct axt a = *axt;
+    char *tSymStart = skipIgnoringDash(a.tSym, newStart - a.tStart, TRUE);
+    char *tSymEnd = skipIgnoringDash(tSymStart, newEnd - newStart, FALSE);
+    if (includeEdgeGaps)
+	{
+	while (tSymStart > a.tSym)
+	    if (*(--tSymStart) != '-')
+		{
+		tSymStart++;
+		break;
+		}
+	while (tSymEnd < a.tSym + a.symCount)
+	    if (*(++tSymEnd) != '-')
+		{
+		tSymEnd--;
+		break;
+		}
+	if (newEnd == newStart && tSymEnd > tSymStart)
+	    {
+	    if (*tSymStart != '-')
+		tSymStart++;
+	    if (*(tSymEnd-1) != '-')
+		tSymEnd--;
+	    }
+	}
+    int symCount = tSymEnd - tSymStart;
+    char *qSymStart = a.qSym + (tSymStart - a.tSym);
+    a.qStart += countNonDash(a.qSym, qSymStart - a.qSym);
+    a.qEnd = a.qStart + countNonDash(qSymStart, symCount);
+    a.tStart = newStart;
+    a.tEnd = newEnd;
+    a.symCount = symCount;
+    a.qSym = qSymStart;
+    a.tSym = tSymStart;
+    a.score = axtScore(&a, ss);
+    if ((a.qStart < a.qEnd && a.tStart < a.tEnd) ||
+	(includeEdgeGaps && (a.qStart < a.qEnd || a.tStart < a.tEnd)))
+	{
+	*axtOut = a;
+	return TRUE;
+	}
+    return FALSE;
+    }
+}
+
+void axtSubsetOnT(struct axt *axt, int newStart, int newEnd, 
+	struct axtScoreScheme *ss, FILE *f)
+/* Write out subset of axt that goes from newStart to newEnd
+ * in target coordinates. */
+{
+struct axt axtSub;
+if (axtGetSubsetOnT(axt, &axtSub, newStart, newEnd, ss, FALSE))
+    axtWrite(&axtSub, f);
+}
+
+int axtTransPosToQ(struct axt *axt, int tPos)
+/* Convert from t to q coordinates */
+{
+char *tSym = skipIgnoringDash(axt->tSym, tPos - axt->tStart, TRUE);
+int symIx = tSym - axt->tSym;
+int qPos = countNonDash(axt->qSym, symIx);
+return qPos + axt->qStart;
+}
+
+static void shortScoreScheme(struct lineFile *lf)
+/* Complain about score file being to short. */
+{
+errAbort("Scoring matrix file %s too short\n", lf->fileName);
+}
+
+static void propagateCase(struct axtScoreScheme *ss)
+/* Propagate score matrix from lower case to mixed case
+ * in matrix. */
+{
+static int twoCase[2][4] = {{'a', 'c', 'g', 't'},{'A','C','G','T'},};
+int i1,i2,j1,j2;
+
+/* Propagate to other case combinations. */
+for (i1=0; i1<=1; ++i1)
+    for (i2=0; i2<=1; ++i2)
+       {
+       if (i1 == 0 && i2 == 0)
+           continue;
+       for (j1=0; j1<4; ++j1)
+	   for (j2=0; j2<4; ++j2)
+	      {
+	      ss->matrix[twoCase[i1][j1]][twoCase[i2][j2]] = ss->matrix[twoCase[0][j1]][twoCase[0][j2]];
+	      }
+       }
+}
+
+struct axtScoreScheme *axtScoreSchemeDefault()
+/* Return default scoring scheme (after blastz).  Do NOT axtScoreSchemeFree
+ * this. */
+{
+static struct axtScoreScheme *ss;
+
+if (ss != NULL)
+    return ss;
+AllocVar(ss);
+
+/* Set up lower case elements of matrix. */
+ss->matrix['a']['a'] = 91;
+ss->matrix['a']['c'] = -114;
+ss->matrix['a']['g'] = -31;
+ss->matrix['a']['t'] = -123;
+
+ss->matrix['c']['a'] = -114;
+ss->matrix['c']['c'] = 100;
+ss->matrix['c']['g'] = -125;
+ss->matrix['c']['t'] = -31;
+
+ss->matrix['g']['a'] = -31;
+ss->matrix['g']['c'] = -125;
+ss->matrix['g']['g'] = 100;
+ss->matrix['g']['t'] = -114;
+
+ss->matrix['t']['a'] = -123;
+ss->matrix['t']['c'] = -31;
+ss->matrix['t']['g'] = -114;
+ss->matrix['t']['t'] = 91;
+
+propagateCase(ss);
+ss->gapOpen = 400;
+ss->gapExtend = 30;
+return ss;
+}
+
+struct axtScoreScheme *axtScoreSchemeSimpleDna(int match, int misMatch, int gapOpen, int gapExtend)
+/* Return a relatively simple scoring scheme for DNA. */
+{
+static struct axtScoreScheme *ss;
+AllocVar(ss);
+
+/* Set up lower case elements of matrix. */
+ss->matrix['a']['a'] = match;
+ss->matrix['a']['c'] = -misMatch;
+ss->matrix['a']['g'] = -misMatch;
+ss->matrix['a']['t'] = -misMatch;
+
+ss->matrix['c']['a'] = -misMatch;
+ss->matrix['c']['c'] = match;
+ss->matrix['c']['g'] = -misMatch;
+ss->matrix['c']['t'] = -misMatch;
+
+ss->matrix['g']['a'] = -misMatch;
+ss->matrix['g']['c'] = -misMatch;
+ss->matrix['g']['g'] = match;
+ss->matrix['g']['t'] = -misMatch;
+
+ss->matrix['t']['a'] = -misMatch;
+ss->matrix['t']['c'] = -misMatch;
+ss->matrix['t']['g'] = -misMatch;
+ss->matrix['t']['t'] = match;
+
+propagateCase(ss);
+ss->gapOpen = gapOpen;
+ss->gapExtend = gapExtend;
+return ss;
+}
+
+struct axtScoreScheme *axtScoreSchemeRnaDefault()
+/* Return default scoring scheme for RNA/DNA alignments
+ * within the same species.  Do NOT axtScoreSchemeFree */
+{
+static struct axtScoreScheme *ss;
+if (ss == NULL)
+    ss = axtScoreSchemeSimpleDna(100, 200, 300, 300);
+return ss;
+}
+
+struct axtScoreScheme *axtScoreSchemeRnaFill()
+/* Return scoreing scheme a little more relaxed than 
+ * RNA/DNA defaults for filling in gaps. */
+{
+static struct axtScoreScheme *ss;
+if (ss == NULL)
+    ss = axtScoreSchemeSimpleDna(100, 100, 200, 200);
+return ss;
+}
+
+struct axtScoreScheme *axtScoreSchemeFromBlastzMatrix(char *text, int gapOpen, int gapExtend)
+/* return scoring schema from a string in the following format */
+/* 91,-90,-25,-100,-90,100,-100,-25,-25,-100,100,-90,-100,-25,-90,91 */
+{
+char *matrixDna[32];
+struct axtScoreScheme *ss = axtScoreSchemeDefault();
+int matrixSize = chopString(text, ",", matrixDna, 32);
+if (matrixSize != 16)
+    return ss;
+if (ss == NULL)
+    return NULL;
+ss->gapOpen = gapOpen;
+ss->gapExtend = gapExtend;
+ss->matrix['a']['a'] = atoi(matrixDna[0]);
+ss->matrix['a']['c'] = atoi(matrixDna[1]);
+ss->matrix['a']['g'] = atoi(matrixDna[2]);
+ss->matrix['a']['t'] = atoi(matrixDna[3]);
+
+ss->matrix['c']['a'] = atoi(matrixDna[4]);
+ss->matrix['c']['c'] = atoi(matrixDna[5]);
+ss->matrix['c']['g'] = atoi(matrixDna[6]);
+ss->matrix['c']['t'] = atoi(matrixDna[7]);
+
+ss->matrix['g']['a'] = atoi(matrixDna[8]);
+ss->matrix['g']['c'] = atoi(matrixDna[9]);
+ss->matrix['g']['g'] = atoi(matrixDna[10]);
+ss->matrix['g']['t'] = atoi(matrixDna[11]);
+
+ss->matrix['t']['a'] = atoi(matrixDna[12]);
+ss->matrix['t']['c'] = atoi(matrixDna[13]);
+ss->matrix['t']['g'] = atoi(matrixDna[14]);
+ss->matrix['t']['t'] = atoi(matrixDna[15]);
+return ss;
+}
+
+char blosumText[] = {
+"#  Matrix made by matblas from blosum62.iij\n"
+"#  * column uses minimum score\n"
+"#  BLOSUM Clustered Scoring Matrix in 1/2 Bit Units\n"
+"#  Blocks Database = /data/blocks_5.0/blocks.dat\n"
+"#  Cluster Percentage: >= 62\n"
+"#  Entropy =   0.6979, Expected =  -0.5209\n"
+"   A  R  N  D  C  Q  E  G  H  I  L  K  M  F  P  S  T  W  Y  V  B  Z  X  *\n"
+"A  4 -1 -2 -2  0 -1 -1  0 -2 -1 -1 -1 -1 -2 -1  1  0 -3 -2  0 -2 -1  0 -4 \n"
+"R -1  5  0 -2 -3  1  0 -2  0 -3 -2  2 -1 -3 -2 -1 -1 -3 -2 -3 -1  0 -1 -4 \n"
+"N -2  0  6  1 -3  0  0  0  1 -3 -3  0 -2 -3 -2  1  0 -4 -2 -3  3  0 -1 -4 \n"
+"D -2 -2  1  6 -3  0  2 -1 -1 -3 -4 -1 -3 -3 -1  0 -1 -4 -3 -3  4  1 -1 -4 \n"
+"C  0 -3 -3 -3  9 -3 -4 -3 -3 -1 -1 -3 -1 -2 -3 -1 -1 -2 -2 -1 -3 -3 -2 -4 \n"
+"Q -1  1  0  0 -3  5  2 -2  0 -3 -2  1  0 -3 -1  0 -1 -2 -1 -2  0  3 -1 -4 \n"
+"E -1  0  0  2 -4  2  5 -2  0 -3 -3  1 -2 -3 -1  0 -1 -3 -2 -2  1  4 -1 -4 \n"
+"G  0 -2  0 -1 -3 -2 -2  6 -2 -4 -4 -2 -3 -3 -2  0 -2 -2 -3 -3 -1 -2 -1 -4 \n"
+"H -2  0  1 -1 -3  0  0 -2  8 -3 -3 -1 -2 -1 -2 -1 -2 -2  2 -3  0  0 -1 -4 \n"
+"I -1 -3 -3 -3 -1 -3 -3 -4 -3  4  2 -3  1  0 -3 -2 -1 -3 -1  3 -3 -3 -1 -4 \n"
+"L -1 -2 -3 -4 -1 -2 -3 -4 -3  2  4 -2  2  0 -3 -2 -1 -2 -1  1 -4 -3 -1 -4 \n"
+"K -1  2  0 -1 -3  1  1 -2 -1 -3 -2  5 -1 -3 -1  0 -1 -3 -2 -2  0  1 -1 -4 \n"
+"M -1 -1 -2 -3 -1  0 -2 -3 -2  1  2 -1  5  0 -2 -1 -1 -1 -1  1 -3 -1 -1 -4 \n"
+"F -2 -3 -3 -3 -2 -3 -3 -3 -1  0  0 -3  0  6 -4 -2 -2  1  3 -1 -3 -3 -1 -4 \n"
+"P -1 -2 -2 -1 -3 -1 -1 -2 -2 -3 -3 -1 -2 -4  7 -1 -1 -4 -3 -2 -2 -1 -2 -4 \n"
+"S  1 -1  1  0 -1  0  0  0 -1 -2 -2  0 -1 -2 -1  4  1 -3 -2 -2  0  0  0 -4 \n"
+"T  0 -1  0 -1 -1 -1 -1 -2 -2 -1 -1 -1 -1 -2 -1  1  5 -2 -2  0 -1 -1  0 -4 \n"
+"W -3 -3 -4 -4 -2 -2 -3 -2 -2 -3 -2 -3 -1  1 -4 -3 -2 11  2 -3 -4 -3 -2 -4 \n"
+"Y -2 -2 -2 -3 -2 -1 -2 -3  2 -1 -1 -2 -1  3 -3 -2 -2  2  7 -1 -3 -2 -1 -4 \n"
+"V  0 -3 -3 -3 -1 -2 -2 -3 -3  3  1 -2  1 -1 -2 -2  0 -3 -1  4 -3 -2 -1 -4 \n"
+"B -2 -1  3  4 -3  0  1 -1  0 -3 -4  0 -3 -3 -2  0 -1 -4 -3 -3  4  1 -1 -4 \n"
+"Z -1  0  0  1 -3  3  4 -2  0 -3 -3  1 -1 -3 -1  0 -1 -3 -2 -2  1  4 -1 -4 \n"
+"X  0 -1 -1 -1 -2 -1 -1 -1 -1 -1 -1 -1 -1 -1 -2  0  0 -2 -1 -1 -1 -1 -1 -4 \n"
+"* -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4  1 \n"
+};
+
+static void badProteinMatrixLine(int lineIx, char *fileName)
+/* Explain line syntax for protein matrix and abort */
+{
+errAbort("Expecting letter and 25 numbers line %d of %s", lineIx, fileName);
+}
+
+struct axtScoreScheme *axtScoreSchemeFromProteinText(char *text, char *fileName)
+/* Parse text into a scoring scheme.  This should be in BLAST protein matrix
+ * format as in blosumText above. */
+{
+char *line, *nextLine;
+int lineIx = 0;
+int realCount = 0;
+char columns[24];
+char *row[25];
+int i;
+struct axtScoreScheme *ss;
+
+AllocVar(ss);
+for (line = text; line != NULL; line = nextLine)
+    {
+    nextLine = strchr(line, '\n');
+    if (nextLine != NULL)
+        *nextLine++ = 0;
+    ++lineIx;
+    line = skipLeadingSpaces(line);
+    if (line[0] == '#' || line[0] == 0)
+        continue;
+    ++realCount;
+    if (realCount == 1)
+        {
+	int wordCount = chopLine(line, row);
+	if (wordCount != 24)
+	    errAbort("Not a good protein matrix - expecting 24 letters line %d of %s", lineIx, fileName);
+	for (i=0; i<wordCount; ++i)
+	    {
+	    char *letter = row[i];
+	    if (strlen(letter) != 1)
+		errAbort("Not a good protein matrix - got word not letter line %d of %s", lineIx, fileName);
+	    columns[i] = letter[0];
+	    }
+	}
+    else
+        {
+	int wordCount = chopLine(line, row);
+	char letter, lcLetter;
+	if (wordCount != 25)
+	    badProteinMatrixLine(lineIx, fileName);
+	letter = row[0][0];
+	if (strlen(row[0]) != 1 || isdigit(letter))
+	    badProteinMatrixLine(lineIx, fileName);
+	lcLetter = tolower(letter);
+	for (i=1; i<wordCount; ++i)
+	    {
+	    char *s = row[i];
+	    int val;
+	    char otherLetter, lcOtherLetter;
+	    if (s[0] == '-') ++s;
+	    if (!isdigit(s[0]))
+		badProteinMatrixLine(lineIx, fileName);
+	    otherLetter = columns[i-1];
+	    lcOtherLetter = tolower(otherLetter);
+	    val = atoi(row[i]);
+	    ss->matrix[(int)letter][(int)otherLetter] = val;
+	    ss->matrix[(int)lcLetter][(int)otherLetter] = val;
+	    ss->matrix[(int)letter][(int)lcOtherLetter] = val;
+	    ss->matrix[(int)lcLetter][(int)lcOtherLetter] = val;
+	    }
+	}
+    }
+if (realCount < 25)
+    errAbort("Unexpected end of %s", fileName);
+return ss;
+}
+
+struct axtScoreScheme *axtScoreSchemeProteinDefault()
+/* Returns default protein scoring scheme.  This is
+ * scaled to be compatible with the blastz one. */
+{
+static struct axtScoreScheme *ss;
+int i,j;
+if (ss != NULL)
+    return ss;
+ss = axtScoreSchemeFromProteinText(blosumText, "blosum62");
+for (i=0; i<128; ++i)
+    for (j=0; j<128; ++j)
+        ss->matrix[i][j] *= 19;
+ss->gapOpen = 11 * 19;
+ss->gapExtend = 1 * 19;
+return ss;
+}
+
+void axtScoreSchemeFree(struct axtScoreScheme **pObj)
+/* Free up score scheme. */
+{
+freez(pObj);
+}
+
+struct axtScoreScheme *axtScoreSchemeProteinRead(char *fileName)
+{
+char *string;
+struct axtScoreScheme *ss;
+
+readInGulp(fileName, &string, NULL);
+ss = axtScoreSchemeFromProteinText(string, fileName);
+freeMem(string);
+
+return ss;
+}
+
+struct axtScoreScheme *axtScoreSchemeReadLf(struct lineFile *lf )
+/* Read in scoring scheme from file. Looks like
+    A    C    G    T
+    91 -114  -31 -123
+  -114  100 -125  -31
+   -31 -125  100 -114
+  -123  -31 -114   91
+  O = 400, E = 30
+
+2013-12-13 - upgrading to allow reading of newer format settings file
+from lastz tuning output.  This file has the matrix at the end of
+the file, and other settings before that.  Will include the other settings
+in the 'ss->extra' field *WITHOUT* the O= and E= which should always
+be O=400 and E=30 despite what the tuning settings file says.
+Example settings file:
+#############################################################################
+# (a LASTZ scoring set, created by "LASTZ --infer")
+
+bad_score          = X:-1736 # used for sub[X][*] and sub[*][X]
+fill_score         = -174    # used when sub[*][*] not otherwise defined
+
+# (score parameters added by expand_scores_file)
+
+T=2
+O=565
+E=43
+X=790
+Y=4865
+K=3000
+L=3000
+
+      A     C     G     T
+A    79   -84   -55  -128
+C   -84   100  -174   -55
+G   -55  -174   100   -84
+T  -128   -55   -84    79
+#############################################################################
+
+*/
+{
+char *line, *row[6], *parts[32];
+int i,j, partCount;
+struct axtScoreScheme *ss;
+boolean gotO = FALSE, gotE = FALSE;
+static int trans[4] = {'a', 'c', 'g', 't'};
+
+AllocVar(ss);
+ss->extra = NULL;
+struct dyString *dyExtra = newDyString(128);
+
+int wordCount = lineFileChopNext(lf, row, ArraySize(row));
+if (!wordCount)
+    shortScoreScheme(lf);   // empty file
+boolean done = FALSE;
+while (! done)
+    {
+    // a setting will have an '=' in either first or second word
+    if (stringIn("=",row[0]) || (wordCount > 1 && stringIn("=", row[1])))
+         {
+         // collapse words to eliminate white space confusion
+         struct dyString *dy = newDyString(128);
+         for (i = 0; i < wordCount; ++i)
+             {
+             dyStringPrintf(dy, "%s", row[i]);
+             }
+         char *line=dyStringCannibalize(&dy);
+         // eliminate trailing comments
+         chopSuffixAt(line, '#');
+         // only tag=value is left, extract those two:
+         chopString(line, "=", parts, ArraySize(parts));
+         if (!(sameString(parts[0],"O") || sameString(parts[0],"E")))
+             dyStringPrintf(dyExtra, "%s=%s,", parts[0], parts[1]);
+         freeMem(line);
+         wordCount = lineFileChopNext(lf, row, ArraySize(row));
+         }
+    // not a setting, expecting a matrix definition
+    else if (row[0][0] != 'A' || row[1][0] != 'C' || row[2][0] != 'G' 
+            || row[3][0] != 'T')
+        errAbort("%s doesn't seem to be a score matrix file", lf->fileName);
+    else  // have reached the matrix definition at end of the file
+        {
+        for (i=0; i<4; ++i)
+            {
+            wordCount = lineFileChopNext(lf, row, ArraySize(row));
+            if (!wordCount)
+               shortScoreScheme(lf);   // did not find four lines
+            int startColumn = 0;
+            if (5 == wordCount)  // skip first column when there are 5
+                startColumn = 1;
+            for (j=startColumn; j<(startColumn+4); ++j)
+                ss->matrix[trans[i]][trans[j-startColumn]] = lineFileNeedNum(lf, row, j);
+            }
+        if (lineFileNext(lf, &line, NULL))
+            {
+            dyStringPrintf(dyExtra, "%s,", line);
+            partCount = chopString(line, " =,\t", parts, ArraySize(parts));
+            for (i=0; i<partCount-1; i += 2)
+                {
+                if (sameString(parts[i], "O"))
+                    {
+                    gotO = TRUE;
+                    ss->gapOpen = atoi(parts[i+1]);
+                    }
+                if (sameString(parts[i], "E"))
+                    {
+                    gotE = TRUE;
+                    ss->gapExtend = atoi(parts[i+1]);
+                    }
+                }
+            if (!gotO || !gotE)
+                errAbort("Expecting O = and E = in last line of %s", lf->fileName);
+            if (ss->gapOpen <= 0 || ss->gapExtend <= 0)
+                errAbort("Must have positive gap scores");
+            }
+        else
+            {
+            ss->gapOpen = 400;
+            ss->gapExtend = 30;
+            }
+        done = TRUE;
+        }
+    }
+ss->extra = dyStringCannibalize(&dyExtra);
+if (',' == lastChar(ss->extra))
+   trimLastChar(ss->extra);
+propagateCase(ss);
+return ss;
+}
+
+struct axtScoreScheme *axtScoreSchemeRead(char *fileName)
+/* Read in scoring scheme from file. Looks like
+    A    C    G    T
+    91 -114  -31 -123
+    -114  100 -125  -31
+    -31 -125  100 -114
+    -123  -31 -114   91
+    O = 400, E = 30
+*/
+{
+struct lineFile *lf = lineFileOpen(fileName, TRUE);
+struct axtScoreScheme *ss = axtScoreSchemeReadLf(lf);
+return ss;
+}
+
+void axtScoreSchemeDnaWrite(struct axtScoreScheme *ss, FILE *f, char *name)
+/* output the score dna based score matrix in meta Data format to File f,
+name should be set to the name of the program that is using the matrix */
+{
+if (ss == NULL)
+    return;
+if (f == NULL)
+    return;
+fprintf(f, "##matrix=%s 16 %d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n",
+        name,
+    ss->matrix['a']['a'],
+    ss->matrix['a']['c'],
+    ss->matrix['a']['g'],
+    ss->matrix['a']['t'],
+
+    ss->matrix['c']['a'],
+    ss->matrix['c']['c'],
+    ss->matrix['c']['g'],
+    ss->matrix['c']['t'],
+
+    ss->matrix['g']['a'],
+    ss->matrix['g']['c'],
+    ss->matrix['g']['g'],
+    ss->matrix['g']['t'],
+
+    ss->matrix['t']['a'],
+    ss->matrix['t']['c'],
+    ss->matrix['t']['g'],
+    ss->matrix['t']['t']);
+fprintf(f, "##gapPenalties=%s O=%d E=%d\n", name, ss->gapOpen, ss->gapExtend);
+if (ss->extra!=NULL)
+    {
+    stripChar(ss->extra,' ');
+    stripChar(ss->extra,'"');
+    fprintf(f, "##blastzParms=%s\n", ss->extra);
+    }
+}
+
+void axtSwap(struct axt *axt, int tSize, int qSize)
+/* Flip target and query on one axt. */
+{
+struct axt old = *axt;
+
+/* Copy non-strand dependent stuff */
+axt->qName = old.tName;
+axt->tName = old.qName;
+axt->qSym = old.tSym;
+axt->tSym = old.qSym;
+axt->qStart = old.tStart;
+axt->qEnd = old.tEnd;
+axt->tStart = old.qStart;
+axt->tEnd = old.qEnd;
+
+/* Copy strand dependent stuff. */
+assert(axt->tStrand != '-');
+
+if (axt->qStrand == '-')
+    {
+    /* axt's are really set up so that the target is on the
+     * + strand and the query is on the minus strand.
+     * Therefore we need to reverse complement both 
+     * strands while swapping to preserve this. */
+    reverseIntRange(&axt->tStart, &axt->tEnd, qSize);
+    reverseIntRange(&axt->qStart, &axt->qEnd, tSize);
+    reverseComplement(axt->qSym, axt->symCount);
+    reverseComplement(axt->tSym, axt->symCount);
+    }
+}
+
+void axtBundleFree(struct axtBundle **pObj)
+/* Free a axtBundle. */
+{
+struct axtBundle *obj = *pObj;
+if (obj != NULL)
+    {
+    axtFreeList(&obj->axtList);
+    freez(pObj);
+    }
+}
+
+void axtBundleFreeList(struct axtBundle **pList)
+/* Free a list of axtBundles. */
+{
+struct axtBundle *el, *next;
+
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    axtBundleFree(&el);
+    }
+*pList = NULL;
+}
+
+void axtAddBlocksToBoxInList(struct cBlock **pList, struct axt *axt)
+/* Add blocks (gapless subalignments) from (non-NULL!) axt to block list. 
+ * Note: list will be in reverse order of axt blocks. */
+{
+boolean thisIn, lastIn = FALSE;
+int qPos = axt->qStart, tPos = axt->tStart;
+int qStart = 0, tStart = 0;
+int i;
+
+for (i=0; i<=axt->symCount; ++i)
+    {
+    int advanceQ = (isalpha(axt->qSym[i]) ? 1 : 0);
+    int advanceT = (isalpha(axt->tSym[i]) ? 1 : 0);
+    thisIn = (advanceQ && advanceT);
+    if (thisIn)
+        {
+	if (!lastIn)
+	    {
+	    qStart = qPos;
+	    tStart = tPos;
+	    }
+	}
+    else
+        {
+	if (lastIn)
+	    {
+	    int size = qPos - qStart;
+	    assert(size == tPos - tStart);
+	    if (size > 0)
+	        {
+		struct cBlock *b;
+		AllocVar(b);
+		b->qStart = qStart;
+		b->qEnd = qPos;
+		b->tStart = tStart;
+		b->tEnd = tPos;
+		slAddHead(pList, b);
+		}
+	    }
+	}
+    lastIn = thisIn;
+    qPos += advanceQ;
+    tPos += advanceT;
+    }
+}
+
+void axtPrintTraditionalExtra(struct axt *axt, int maxLine,
+			      struct axtScoreScheme *ss, FILE *f,
+			      boolean reverseTPos, boolean reverseQPos)
+/* Print out an alignment with line-breaks.  If reverseTPos is true, then
+ * the sequence has been reverse complemented, so show the coords starting
+ * at tEnd and decrementing down to tStart; likewise for reverseQPos. */
+{
+int qPos = axt->qStart;
+int tPos = axt->tStart;
+int symPos;
+int aDigits = digitsBaseTen(axt->qEnd);
+int bDigits = digitsBaseTen(axt->tEnd);
+int digits = max(aDigits, bDigits);
+int qFlipOff = axt->qEnd + axt->qStart;
+int tFlipOff = axt->tEnd + axt->tStart;
+
+for (symPos = 0; symPos < axt->symCount; symPos += maxLine)
+    {
+    /* Figure out which part of axt to use for this line. */
+    int lineSize = axt->symCount - symPos;
+    int lineEnd, i;
+    if (lineSize > maxLine)
+        lineSize = maxLine;
+    lineEnd = symPos + lineSize;
+
+    /* Draw query line including numbers. */
+    fprintf(f, "%0*d ", digits, (reverseQPos ? qFlipOff - qPos: qPos+1));
+    for (i=symPos; i<lineEnd; ++i)
+        {
+	char c = axt->qSym[i];
+	fputc(c, f);
+	if (c != '.' && c != '-')
+	    ++qPos;
+	}
+    fprintf(f, " %0*d\n", digits, (reverseQPos? qFlipOff - qPos + 1 : qPos));
+
+    /* Draw line with match/mismatch symbols. */
+    spaceOut(f, digits+1);
+    for (i=symPos; i<lineEnd; ++i)
+        {
+	char q = axt->qSym[i];
+	char t = axt->tSym[i];
+	char out = ' ';
+	if (q == t)
+	    out = '|';
+	else if (ss != NULL && ss->matrix[(int)q][(int)t] > 0)
+	    out = '+';
+	fputc(out, f);
+	}
+    fputc('\n', f);
+
+    /* Draw target line including numbers. */
+    fprintf(f, "%0*d ", digits, (reverseTPos ? tFlipOff - tPos : tPos+1));
+    for (i=symPos; i<lineEnd; ++i)
+        {
+	char c = axt->tSym[i];
+	fputc(c, f);
+	if (c != '.' && c != '-')
+	    ++tPos;
+	}
+    fprintf(f, " %0*d\n", digits, (reverseTPos ? tFlipOff - tPos + 1: tPos));
+
+    /* Draw extra empty line. */
+    fputc('\n', f);
+    }
+}
+
+double axtIdWithGaps(struct axt *axt)
+/* Return ratio of matching bases to total symbols in alignment. */
+{
+int i;
+int matchCount = 0;
+for (i=0; i<axt->symCount; ++i)
+    {
+    if (toupper(axt->qSym[i]) == toupper(axt->tSym[i]))
+        ++matchCount;
+    }
+return (double)matchCount/axt->symCount;
+}
+
+void axtPrintTraditional(struct axt *axt, int maxLine, struct axtScoreScheme *ss, FILE *f)
+/* Print out an alignment with line-breaks. */
+{
+axtPrintTraditionalExtra(axt, maxLine, ss, f, FALSE, FALSE);
+}
+
+double axtCoverage(struct axt *axt, int qSize, int tSize)
+/* Return % of q and t covered. */
+{
+double cov = axt->tEnd - axt->tStart + axt->qEnd - axt->qStart;
+return cov/(qSize+tSize);
+}
+
+void axtOutPretty(struct axt *axt, int lineSize, FILE *f)
+/* Output axt in pretty format. */
+{
+char *q = axt->qSym;
+char *t = axt->tSym;
+int size = axt->symCount;
+int oneSize, sizeLeft = size;
+int i;
+
+fprintf(f, ">%s:%d%c%d %s:%d-%d %d\n", 
+	axt->qName, axt->qStart, axt->qStrand, axt->qEnd,
+	axt->tName, axt->tStart, axt->tEnd, axt->score);
+while (sizeLeft > 0)
+    {
+    oneSize = sizeLeft;
+    if (oneSize > lineSize)
+        oneSize = lineSize;
+    mustWrite(f, q, oneSize);
+    fputc('\n', f);
+
+    for (i=0; i<oneSize; ++i)
+        {
+	if (toupper(q[i]) == toupper(t[i]) && isalpha(q[i]))
+	    fputc('|', f);
+	else
+	    fputc(' ', f);
+	}
+    fputc('\n', f);
+
+    if (oneSize > lineSize)
+        oneSize = lineSize;
+    mustWrite(f, t, oneSize);
+    fputc('\n', f);
+    fputc('\n', f);
+    sizeLeft -= oneSize;
+    q += oneSize;
+    t += oneSize;
+    }
+}
diff --git a/gbtools/src/blatSrc/lib/axtAffine.c b/gbtools/src/blatSrc/lib/axtAffine.c
new file mode 100644
index 0000000..1c7e383
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/axtAffine.c
@@ -0,0 +1,781 @@
+/* axtAffine - do alignment of two (shortish) sequences with
+ * affine gap scoring, and return the result as an axt. 
+ * This file is copyright 2000-2004 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "pairHmm.h"
+#include "axt.h"
+
+
+
+boolean axtAffineSmallEnough(double querySize, double targetSize)
+/* Return TRUE if it is reasonable to align sequences of given sizes
+ * with axtAffine. */
+{
+return targetSize * querySize <= 1.0E9;
+}
+
+static void affineAlign(char *query, int querySize, 
+	char *target, int targetSize, struct axtScoreScheme *ss,
+	struct phmmMatrix **retMatrix, struct phmmAliPair **retPairList,
+	int *retScore)
+/* Use dynamic programming to do alignment including affine gap
+ * scores. */
+{
+struct phmmMatrix *a;
+struct phmmState *hf, *iq, *it;
+int qIx, tIx, sIx;  /* Query, target, and state indices */
+int rowOffset, newCellOffset;
+int bestScore = -0x4fffffff;
+struct phmmMommy *bestCell = NULL;
+int matchPair;
+int gapStart, gapExt;
+
+/* Check that it's not too big. */
+if (!axtAffineSmallEnough(querySize, targetSize))
+    errAbort("Can't align %d x %d, too big\n", querySize, targetSize);
+
+gapStart = -ss->gapOpen;
+gapExt = -ss->gapExtend;
+
+/* Initialize 3 state matrix (match, query insert, target insert). */
+a = phmmMatrixNew(3, query, querySize, target, targetSize);
+hf = phmmNameState(a, 0, "match", 'M');
+iq = phmmNameState(a, 1, "qSlip", 'Q');
+it = phmmNameState(a, 2, "tSlip", 'T');
+
+for (tIx = 1; tIx < a->tDim; tIx += 1)
+    {
+    UBYTE mommy = 0;
+    int score, tempScore;
+
+/* Macros to make me less mixed up when accessing scores from row arrays.*/
+#define matchScore lastScores[qIx-1]
+#define qSlipScore lastScores[qIx]
+#define tSlipScore scores[qIx-1]
+#define newScore scores[qIx]
+
+/* Start up state block (with all ways to enter state) */
+#define startState(state) \
+   score = 0;
+
+/* Define a transition from state while advancing over both
+ * target and query. */
+#define matchState(state, addScore) \
+   { \
+   if ((tempScore = state->matchScore + addScore) > score) \
+        { \
+        mommy = phmmPackMommy(state->stateIx, -1, -1); \
+        score = tempScore; \
+        } \
+   } 
+
+/* Define a transition from state while slipping query
+ * and advancing target. */
+#define qSlipState(state, addScore) \
+   { \
+   if ((tempScore = state->qSlipScore + addScore) > score) \
+        { \
+        mommy = phmmPackMommy(state->stateIx, 0, -1); \
+        score = tempScore; \
+        } \
+   }
+
+/* Define a transition from state while slipping target
+ * and advancing query. */
+#define tSlipState(state, addScore) \
+   { \
+   if ((tempScore = state->tSlipScore + addScore) > score) \
+        { \
+        mommy = phmmPackMommy(state->stateIx, -1, 0); \
+        score = tempScore; \
+        } \
+   }
+
+/* End a block of transitions into state. */
+#define endState(state) \
+    { \
+    struct phmmMommy *newCell = state->cells + newCellOffset; \
+    if (score <= 0) \
+        { \
+        mommy = phmmNullMommy; \
+        score = 0; \
+        } \
+    newCell->mommy = mommy; \
+    state->newScore = score; \
+    if (score > bestScore) \
+        { \
+        bestScore = score; \
+        bestCell = newCell; \
+        } \
+    } 
+
+/* End a state that you know won't produce an optimal
+ * final score. */
+#define shortEndState(state) \
+    { \
+    struct phmmMommy *newCell = state->cells + newCellOffset; \
+    if (score <= 0) \
+        { \
+        mommy = phmmNullMommy; \
+        score = 0; \
+        } \
+    newCell->mommy = mommy; \
+    state->newScore = score; \
+    }
+
+
+    rowOffset = tIx*a->qDim;
+    for (qIx = 1; qIx < a->qDim; qIx += 1)
+        {
+        newCellOffset = rowOffset + qIx;
+        
+        /* Figure the cost or bonus for pairing target and query residue here. */
+        matchPair = ss->matrix[(int)a->query[qIx-1]][(int)a->target[tIx-1]];
+
+        /* Update hiFi space. */
+            {
+            startState(hf);
+            matchState(hf, matchPair);
+            matchState(iq, matchPair);
+            matchState(it, matchPair);
+            endState(hf);
+            }
+
+        /* Update query slip space. */
+            {
+            startState(iq);
+            qSlipState(iq, gapExt);
+            qSlipState(hf, gapStart);            
+	    qSlipState(it, gapStart);	/* Allow double gaps, T first always. */
+            shortEndState(iq);
+            }
+        
+        /* Update target slip space. */
+            {
+            startState(it);
+            tSlipState(it, gapExt);
+            tSlipState(hf, gapStart);            
+            shortEndState(it);
+            }
+
+        }
+    /* Swap score columns so current becomes last, and last gets
+     * reused. */
+    for (sIx = 0; sIx < a->stateCount; ++sIx)
+        {
+        struct phmmState *as = &a->states[sIx];
+        int *swapTemp = as->lastScores;
+        as->lastScores = as->scores;
+        as->scores = swapTemp;
+        }
+    }
+
+/* Trace back from best scoring cell. */
+*retPairList = phmmTraceBack(a, bestCell);
+*retMatrix = a;
+*retScore = bestScore;
+
+#undef matchScore
+#undef qSlipScore
+#undef tSlipScore
+#undef newScore
+#undef startState
+#undef matchState
+#undef qSlipState
+#undef tSlipState
+#undef shortEndState
+#undef endState
+}
+
+struct axt *axtAffine(bioSeq *query, bioSeq *target, struct axtScoreScheme *ss)
+/* Return alignment if any of query and target using scoring scheme. */
+{
+struct axt *axt;
+int score;
+struct phmmMatrix *matrix;
+struct phmmAliPair *pairList;
+
+affineAlign(query->dna, query->size, target->dna, target->size, ss,
+	&matrix, &pairList, &score);
+axt = phhmTraceToAxt(matrix, pairList, score, query->name, target->name);
+phmmMatrixFree(&matrix);
+slFreeList(&pairList);
+return axt;
+}
+
+
+/* ----- axtAffine2Level begins ----- 
+
+ Written by Galt Barber, December 2004
+ I wrote this on my own time and am donating this
+ to the public domain.  The original concept 
+ was Don Speck's, as described by Kevin Karplus.
+
+ @article{Grice97,
+     author = "J. A. Grice and R. Hughey and D. Speck",
+     title = "Reduced space sequence alignment",
+     journal = cabios,
+     volume=13,
+     number=1,
+     year=1997,
+     month=feb,
+     pages="45-53"
+     }
+								 
+
+*/
+
+#define WORST 0xC0000000 /* WORST Score approx neg. inf. 0x80000000 overflowed, reduced by half */
+
+
+/* m d i notation: match, delete, insert in query */
+
+struct cell2L 
+{
+int  bestm;   /* best score array */
+int  bestd;                         
+int  besti;                          
+char backm;   /* back trace array */
+char backd;                         
+char backi;                          
+};
+
+#ifdef DEBUG
+void dump2L(struct cell2L* c)
+/* print matrix cell for debugging 
+   I redirect output to a file 
+   and look at it with a web browser
+   to see the long lines
+*/
+{
+    printf("%04d%c %04d%c %04d%c   ",
+     c->bestd, c->backd,
+     c->bestm, c->backm,
+     c->besti, c->backi
+     );
+}     
+#endif
+
+void kForwardAffine(
+struct cell2L *cells,  /* dyn prg arr cells */
+int row,      /* starting row base */
+int rowmax,   /* ending row */
+int rdelta,   /* convert between real targ seq row and logical row */                             
+int cmost,    /* track right edge, shrink as traces back */
+int lv,       /* width of array including sentinel col 0 */ 
+char *q,      /* query and target seqs */
+char *t,
+struct axtScoreScheme *ss,  /* score scheme passed in */
+int *bestbestOut,  /* return best overall found, and it's row and col */
+int *bestrOut,
+int *bestcOut,
+char *bestdirOut
+)
+/*
+Calculates filling dynprg mtx forward.
+ Called 3 times from affine2Level.
+
+row is offset into the actual best and back arrays,
+ so rdelta serves as a conversion between
+ the real target seq row and the logical row
+ used in best and back arrays.
+
+cmost is a column limiter that lets us avoid
+ unused areas of the array when doing the
+ backtrace 2nd pass. This can be an average
+ of half of the total array saved.
+
+*/
+{
+int r=0, rr=0;
+int gapOpen  =ss->gapOpen;    
+int gapExtend=ss->gapExtend;  
+int doubleGap=ss->gapExtend;  // this can be gapOpen or gapExtend, or custom ?
+struct cell2L *cellp,*cellc;  /* current and previous row base */
+struct cell2L *u,*d,*l,*s;    /* up,diag,left,self pointers to hopefully speed things up */
+int c=0;
+int bestbest = *bestbestOut; /* make local copy of best best */
+cellc = cells+(row-1)*lv;     /* start it off one row back coming into loop */
+
+#ifdef DEBUG
+for(c=0;c<=cmost;c++) /* show prev row */
+    { dump2L(cellc+c); }
+printf("\n");
+#endif
+
+for(r=row; r<=rowmax; r++)
+    {
+    cellp = cellc;
+    cellc += lv;    /* initialize pointers to curr and prev rows */
+    
+    rr = r+rdelta;
+
+    d = cellp;   /* diag is prev row, prev col */
+    l = cellc;   /* left is curr row, prev col */
+    u = d+1;     /*   up is prev row, curr col */
+    s = l+1;     /* self is curr row, curr col */
+    
+    /* handle col 0 sentinel as a delete */
+    l->bestm=WORST; 
+    l->bestd=d->bestd-gapExtend;
+    l->besti=WORST;                 
+    l->backm='x';
+    l->backd='d';
+    l->backi='x';
+    if (rr==1)    /* special case row 1 col 0 */
+	{
+	l->bestd=-gapOpen;
+	l->backd='m';
+	}
+#ifdef DEBUG
+    dump2L(cellc); 
+#endif
+    
+    for(c=1; c<=cmost; c++)
+	{
+
+	int best=WORST;
+	int try  =WORST;
+	char dir=' ';
+	/* note: is matrix symmetrical? if not we could have dim 1 and 2 backwards */
+	int subst = ss->matrix[(int)q[c-1]][(int)t[rr-1]];  /* score for pairing target and query. */
+
+	/* find best M match query and target */
+	best=WORST;
+	try=d->bestd;    
+	if (try > best)
+	    {
+	    best=try;
+	    dir='d';
+	    }
+	try=d->bestm;   
+	if (try > best)
+	    {
+	    best=try;
+	    dir='m';
+	    }
+	try=d->besti;   
+	if (try > best)
+	    {
+	    best=try;
+	    dir='i';
+	    }
+	try=0;                   /* local ali can start anywhere */
+	if (try > best)
+	    {
+	    best=try;
+	    dir='s';         
+	    }
+	best += subst;
+	s->bestm = best;
+	s->backm = dir;
+	if (best > bestbest)
+	    {
+	    bestbest=best;
+	    *bestbestOut=best;
+	    *bestrOut=rr;
+	    *bestcOut=c;
+	    *bestdirOut=dir;
+	    }
+
+	/* find best D delete in query */
+	best=WORST;
+	try=u->bestd - gapExtend;
+	if (try > best)
+	    {
+	    best=try;
+	    dir='d';
+	    }
+	try=u->bestm - gapOpen;    
+	if (try > best)
+	    {
+	    best=try;
+	    dir='m';
+	    }
+	try=u->besti - doubleGap;    
+	if (try > best)
+	    {
+	    best=try;
+	    dir='i';
+	    }
+	s->bestd = best;
+	s->backd = dir;
+	if (best > bestbest)
+	    {
+	    bestbest=best;
+	    *bestbestOut=best;
+	    *bestrOut=rr;
+	    *bestcOut=c;
+	    *bestdirOut=dir;
+	    }
+
+	/* find best I insert in query */
+	best=WORST;
+	try=l->bestd - doubleGap;
+	if (try > best)
+	    {
+	    best=try;
+	    dir='d';
+	    }
+	try=l->bestm - gapOpen;    
+	if (try > best)
+	    {
+	    best=try;
+	    dir='m';
+	    }
+	try=l->besti - gapExtend;    
+	if (try > best)
+	    {
+	    best=try;
+	    dir='i';
+	    }
+	s->besti = best;
+	s->backi = dir;
+	if (best > bestbest)
+	    {
+	    bestbest=best;
+	    *bestbestOut=best;
+	    *bestrOut=rr;
+	    *bestcOut=c;
+	    *bestdirOut=dir;
+	    }
+
+#ifdef DEBUG
+    dump2L(cellc+c); 
+#endif
+
+	d++;l++;u++;s++;
+
+	}
+#ifdef DEBUG
+printf("\n");
+#endif
+  
+    }
+} 
+
+
+
+struct axt *axtAffine2Level(bioSeq *query, bioSeq *target, struct axtScoreScheme *ss)
+/* 
+
+   (Moving boundary version, allows target T size twice as large in same ram)
+
+   Return alignment if any of query and target using scoring scheme. 
+   
+   2Level uses an economical amount of ram and should work for large target sequences.
+   
+   If Q is query size and T is target size and M is memory size, then
+   Total memory used M = 30*Q*sqrt(T).  When the target is much larger than the query
+   this method saves ram, and average runtime is only 50% greater, or 1.5 QT.  
+   If Q=5000 and T=245,522,847 for hg17 chr1, then M = 2.2 GB ram.  
+   axtAffine would need M=3QT = 3.4 TB.
+   Of course massive alignments will be painfully slow anyway.
+
+   Works for protein as well as DNA given the correct scoreScheme.
+  
+   NOTES:
+   Double-gap cost is equal to gap-extend cost, but gap-open would also work.
+   On very large target, score integer may overflow.
+   Input sequences not checked for invalid chars.
+   Input not checked but query should be shorter than target.
+   
+*/
+{
+struct axt *axt=needMem(sizeof(struct axt));
+
+char *q = query->dna;
+char *t = target->dna;
+
+int Q= query->size;
+int T=target->size;
+int lv=Q+1;                    /* Q+1 is used so often let's call it lv for q-width */
+int lw=T+1;                    /* T+1 is used so often let's call it lw for t-height */
+
+
+int r = 0;                                 /* row matrix index */
+int c = 0;                                 /* col matrix index */
+char dir=' ';                              /* dir for bt */
+int bestbest = WORST;                      /* best score in entire mtx */
+
+int k=0;                                   /* save every kth row (k decreasing) */
+int ksize = 0;                             /* T+1 saved rows as ksize, ksize-1,...,1*/
+int arrsize = 0;                           /* dynprg array size, +1 for 0 sentinel col. */
+struct cell2L *cells = NULL;               /* best score dyn prog array */
+int ki = 0;                                /* base offset into array */
+int cmost = Q;                             /* track right edge shrinkage during backtrace */
+int kmax = 0;                              /* rows range from ki to kmax */
+int rr = 0;                                /* maps ki base to actual target seq */
+int nrows = 0;                             /* num rows to do, usually k or less */
+int bestr = 0;                             /* remember best r,c,dir for local ali */
+int bestc = 0;           
+char bestdir = 0;
+int temp = 0;
+
+
+char *btq=NULL;      /* temp pointers to track ends of string while accumulating */
+char *btt=NULL;
+
+ksize = (int) (-1 + sqrt(8*lw+1))/2;    
+if (((ksize*(ksize+1))/2) < lw) 
+    {ksize++;}
+arrsize = (ksize+1) * lv;                 /* dynprg array size, +1 for lastrow that moves back up. */
+cells = needLargeMem(arrsize * sizeof(struct cell2L));   /* best score dyn prog array */
+
+#ifdef DEBUG
+printf("\n k=%d \n ksize=%d \n arrsize=%d \n Q,lv=%d,%d T=%d \n \n",k,ksize,arrsize,Q,lv,T);
+#endif
+
+axt->next = NULL;
+axt->qName = cloneString(query->name);
+axt->tName = cloneString(target->name);
+axt->qStrand ='+';
+axt->tStrand ='+';
+axt->frame = 0;
+axt->score=0;
+axt->qStart=0;
+axt->tStart=0;
+axt->qEnd=0;
+axt->tEnd=0;
+axt->symCount=0;
+axt->qSym=NULL;
+axt->tSym=NULL;
+
+if ((Q==0) || (T==0))
+    {
+    axt->qSym=cloneString("");
+    axt->tSym=cloneString("");
+    freez(&cells);
+    return axt; 
+    }
+
+
+
+/* initialize origin corner */
+    cells[0].bestm=0;
+    cells[0].bestd=WORST;
+    cells[0].besti=WORST;                 
+    cells[0].backm='x';
+    cells[0].backd='x';
+    cells[0].backi='x';
+#ifdef DEBUG
+    dump2L(cells); 
+#endif
+
+/* initialize row 0 col 1 */
+    cells[1].bestm=WORST;
+    cells[1].bestd=WORST;
+    cells[1].besti=-ss->gapOpen;
+    cells[1].backm='x';
+    cells[1].backd='x';
+    cells[1].backi='m';
+#ifdef DEBUG
+    dump2L(cells+1); 
+#endif
+
+/* initialize first row of sentinels */
+for (c=2;c<lv;c++)
+    {
+    cells[c].bestm=WORST;
+    cells[c].bestd=WORST;
+    cells[c].besti=cells[c-1].besti-ss->gapExtend;
+    cells[c].backm='x';
+    cells[c].backd='x';
+    cells[c].backi='i';
+#ifdef DEBUG
+    dump2L(cells+c); 
+#endif
+    }
+#ifdef DEBUG
+printf("\n");
+printf("\n");
+#endif
+
+k=ksize;
+
+ki++;  /* advance to next row */
+
+r=1;   /* r is really the rows all done */
+while(1)
+    {
+    nrows = k;  /* do k rows at a time, save every kth row on 1st pass */
+    if (nrows > (lw-r)) {nrows=lw-r;}  /* may get less than k on last set */
+    kmax = ki+nrows-1;
+
+    kForwardAffine(cells, ki, kmax, r-ki, cmost, lv, q, t, ss, &bestbest, &bestr, &bestc, &bestdir);
+#ifdef DEBUG
+printf("\n");
+#endif
+
+    r += nrows;
+
+    if (nrows == k)   /* got full set of k rows */
+	{
+	/* compress, save every kth row */     
+	/* optimize as a mem-copy */
+	memcpy(cells+ki*lv,cells+kmax*lv,sizeof(struct cell2L) *lv);    
+	}
+
+    if (r >= lw){break;} /* we are done */
+    
+    ki++;
+    k--;        /* decreasing k is "moving boundary" */
+}
+
+#ifdef DEBUG
+printf("\nFWD PASS DONE. bestbest=%d bestr=%d bestc=%d bestdir=%c \n\n",bestbest,bestr,bestc,bestdir);
+#endif
+
+/* start doing backtrace */
+    
+/* adjust for reverse pass */
+
+/* for local we automatically skip to bestr, bestc to begin tb */
+
+if (bestbest <= 0)  /* null alignment */
+    {
+    bestr=0;
+    bestc=0;
+    /* bestdir won't matter */
+    }
+
+r = bestr;
+c = bestc;
+dir = bestdir;
+cmost = c;
+
+axt->qEnd=bestc;
+axt->tEnd=bestr;
+
+temp = (2*ksize)+1;
+ki = (int)(temp-sqrt((temp*temp)-(8*r)))/2;
+rr = ((2*ksize*ki)+ki-(ki*ki))/2;
+kmax = ki+(r-rr);
+k = ksize - ki;
+
+
+/* now that we jumped back into saved start-points,
+   let's fill the array forward and start backtrace from there.
+*/
+
+#ifdef DEBUG
+printf("bestr=%d, bestc=%d, bestdir=%c k=%d, ki=%d, kmax=%d\n",bestr,bestc,bestdir,k,ki,kmax);
+#endif
+
+kForwardAffine(cells, ki+1, kmax, rr-ki, cmost, lv, q, t, ss, &bestbest, &bestr, &bestc, &bestdir);
+   
+#ifdef DEBUG
+printf("\n(initial)BKWD PASS DONE. cmost=%d r=%d c=%d dir=%c \n\n",cmost,r,c,dir);
+#endif
+
+
+/* backtrace */   
+
+/* handling for resulting ali'd strings when very long */
+
+axt->symCount=0;
+axt->qSym = needLargeMem((Q+T+1)*sizeof(char));
+axt->tSym = needLargeMem((Q+T+1)*sizeof(char));
+btq=axt->qSym;
+btt=axt->tSym;
+while(1)
+    {
+    while(1)
+	{
+#ifdef DEBUG
+	printf("bt: r=%d, c=%d, dir=%c \n",r,c,dir);
+#endif
+
+	
+    	if ((r==0) && (c==0)){break;} /* hit origin, done */
+	if (r<rr){break;} /* ran out of targ seq, backup and reload */
+	if (dir=='x'){errAbort("unexpected error backtracing");} /* x only at origin */
+	if (dir=='s'){break;}   /* hit start, local ali */
+	if (dir=='m') /* match */
+	    {
+	    *btq++=q[c-1];  /* accumulate alignment output strings */
+	    *btt++=t[r-1];  /* accumulate alignment output strings */
+	    axt->symCount++; 
+	    dir = cells[lv*(ki+r-rr)+c].backm;  /* follow backtrace */
+	    r--;            /* adjust coords to move in dir spec'd by back ptr */
+	    c--;
+	    cmost--;        /* decreases as query seq is aligned, so saves on unused areas */
+	    }
+	else
+	    {
+	    if (dir=='d')  /* delete in query (gap) */
+		{
+		*btq++='-';     /* accumulate alignment output strings */
+    		*btt++=t[r-1];  /* accumulate alignment output strings */
+    		axt->symCount++; 
+		dir = cells[lv*(ki+r-rr)+c].backd;  /* follow backtrace */
+    		r--;            /* adjust coords to move in dir spec'd by back ptr */
+		}
+	    else    /* insert in query (gap) */
+		{
+		*btq++=q[c-1];  /* accumulate alignment output strings */
+    		*btt++='-';     /* accumulate alignment output strings */
+    		axt->symCount++; 
+		dir = cells[lv*(ki+r-rr)+c].backi;  /* follow backtrace */
+    		c--;
+    		cmost--;        /* decreases as query seq is aligned, so saves on unused areas */
+		}
+	    }
+	
+	}
+
+    /* back up and do it again */
+    ki--;
+    k++;   /* k grows as we move back up */ 
+    rr-=k;
+    kmax = ki+k-1;
+
+    /* check for various termination conditions to stop main loop */
+    if (ki < 0) {break;}
+    if ((r==0)&&(c==0)) {break;}
+    if (dir=='s') {break;}
+
+    /* re-calculate array from previous saved kth row going back
+       this is how we save memory, but have to regenerate half on average
+       we are re-using the same call 
+     */
+
+#ifdef DEBUG
+printf("bestr=%d, bestc=%d, bestdir=%c k=%d, ki=%d, kmax=%d\n",bestr,bestc,bestdir,k,ki,kmax);
+#endif
+
+
+    kForwardAffine(cells, ki+1, kmax, rr-ki, cmost, lv, q, t, ss, &bestbest, &bestr, &bestc, &bestdir);
+
+#ifdef DEBUG
+    printf("\nBKWD PASS DONE. cmost=%d r=%d c=%d\n\n",cmost,r,c);
+#endif
+
+    }
+
+axt->qStart=c;
+axt->tStart=r;
+
+/* reverse backwards trace and zero-terminate strings */
+
+reverseBytes(axt->qSym,axt->symCount);
+reverseBytes(axt->tSym,axt->symCount);
+axt->qSym[axt->symCount]=0;
+axt->tSym[axt->symCount]=0;
+
+axt->score=bestbest;
+
+
+/* 
+should I test stringsize and if massively smaller, realloc string to save ram? 
+*/
+
+freez(&cells);
+
+return axt;
+}
+
+
+
diff --git a/gbtools/src/blatSrc/lib/bPlusTree.c b/gbtools/src/blatSrc/lib/bPlusTree.c
new file mode 100644
index 0000000..6b09e15
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/bPlusTree.c
@@ -0,0 +1,600 @@
+/* Copyright (C) 2013 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+/* bptFile - B+ Trees.  These are a method of indexing data similar to binary trees, but 
+ * with many children rather than just two at each node. They work well when stored on disk,
+ * since typically only two or three disk accesses are needed to locate any particular
+ * piece of data.  This implementation is *just* for disk based storage.  For memory
+ * use the rbTree instead. Currently the implementation is just useful for data warehouse
+ * type applications.  That is it implements a function to create a b+ tree from bulk data
+ * (bptFileCreate) and a function to lookup a value given a key (bptFileFind) but not functions
+ * to add or delete individual items.
+ *
+ * The layout of the file on disk is:
+ *    header
+ *    root node
+ *    (other nodes)
+ * In general when the tree is first built the higher level nodes are stored before the
+ * lower level nodes.  It is possible if a b+ tree is dynamically updated for this to
+ * no longer be strictly true, but actually currently the b+ tree code here doesn't implement
+ * dynamic updates - it just creates a b+ tree from a sorted list.
+ *
+ * Each node can be one of two types - index or leaf.  The index nodes contain pointers
+ * to child nodes.  The leaf nodes contain the actual data. 
+ *
+ * The layout of the file header is:
+ *       <magic number>  4 bytes - The value bptSig (0x78CA8C91)
+ *       <block size>    4 bytes - Number of children per block (not byte size of block)
+ *       <key size>      4 bytes - Number of significant bytes in key
+ *       <val size>      4 bytes - Number of bytes in value
+ *       <item count>    8 bytes - Number of items in index
+ *       <reserved2>     4 bytes - Always 0 for now
+ *       <reserved3>     4 bytes - Always 0 for now
+ * The magic number may be byte-swapped, in which case all numbers in the file
+ * need to be byte-swapped. 
+ *
+ * The nodes start with a header:
+ *       <is leaf>       1 byte  - 1 for leaf nodes, 0 for index nodes.
+ *       <reserved>      1 byte  - Always 0 for now.
+ *       <count>         2 bytes - The number of children/items in node
+ * This is followed by count items.  For the index nodes the items are
+ *       <key>           key size bytes - always written most significant byte first
+ *       <offset>        8 bytes - Offset of child node in index file.
+ * For leaf nodes the items are
+ *       <key>           key size bytes - always written most significant byte first
+ *       <val>           val sized bytes - the value associated with the key.
+ * Note in general the leaf nodes may not be the same size as the index nodes, though in
+ * the important case where the values are file offsets they will be.
+ */
+
+#include "common.h"
+#include "sig.h"
+#include "udc.h"
+#include "bPlusTree.h"
+
+/* This section of code deals with locating a value in a b+ tree. */
+
+struct bptFile *bptFileAttach(char *fileName, struct udcFile *udc)
+/* Open up index file on previously open file, with header at current file position. */
+{
+/* Open file and allocate structure to hold info from header etc. */
+struct bptFile *bpt = needMem(sizeof(*bpt));
+bpt->fileName = fileName;
+bpt->udc = udc;
+
+/* Read magic number at head of file and use it to see if we are proper file type, and
+ * see if we are byte-swapped. */
+bits32 magic;
+boolean isSwapped = FALSE;
+udcMustReadOne(udc, magic);
+if (magic != bptSig)
+    {
+    magic = byteSwap32(magic);
+    isSwapped = bpt->isSwapped = TRUE;
+    if (magic != bptSig)
+       errAbort("%s is not a bpt b-plus tree index file", fileName);
+    }
+
+/* Read rest of defined bits of header, byte swapping as needed. */
+bpt->blockSize = udcReadBits32(udc, isSwapped);
+bpt->keySize = udcReadBits32(udc, isSwapped);
+bpt->valSize = udcReadBits32(udc, isSwapped);
+bpt->itemCount = udcReadBits64(udc, isSwapped);
+
+/* Skip over reserved bits of header. */
+bits32 reserved32;
+udcMustReadOne(udc, reserved32);
+udcMustReadOne(udc, reserved32);
+
+/* Save position of root block of b+ tree. */
+bpt->rootOffset = udcTell(udc);
+
+return bpt;
+}
+
+void bptFileDetach(struct bptFile **pBpt)
+/* Detach and free up cirTree file opened with cirTreeFileAttach. */
+{
+freez(pBpt);
+}
+
+struct bptFile *bptFileOpen(char *fileName)
+/* Open up index file - reading header and verifying things. */
+{
+return bptFileAttach(cloneString(fileName), udcFileOpen(fileName, udcDefaultDir()));
+}
+
+void bptFileClose(struct bptFile **pBpt)
+/* Close down and deallocate index file. */
+{
+struct bptFile *bpt = *pBpt;
+if (bpt != NULL)
+    {
+    udcFileClose(&bpt->udc);
+    freeMem(bpt->fileName);
+    bptFileDetach(pBpt);
+    }
+}
+
+static boolean rFind(struct bptFile *bpt, bits64 blockStart, void *key, void *val)
+/* Find value corresponding to key.  If found copy value to memory pointed to by val and return 
+ * true. Otherwise return false. */
+{
+/* Seek to start of block. */
+udcSeek(bpt->udc, blockStart);
+
+/* Read block header. */
+UBYTE isLeaf;
+UBYTE reserved;
+bits16 i, childCount;
+udcMustReadOne(bpt->udc, isLeaf);
+udcMustReadOne(bpt->udc, reserved);
+boolean isSwapped = bpt->isSwapped;
+childCount = udcReadBits16(bpt->udc, isSwapped);
+
+UBYTE keyBuf[bpt->keySize];   /* Place to put a key, buffered on stack. */
+
+if (isLeaf)
+    {
+    for (i=0; i<childCount; ++i)
+        {
+	udcMustRead(bpt->udc, keyBuf, bpt->keySize);
+	udcMustRead(bpt->udc, val, bpt->valSize);
+	if (memcmp(key, keyBuf, bpt->keySize) == 0)
+	    return TRUE;
+	}
+    return FALSE;
+    }
+else
+    {
+    /* Read and discard first key. */
+    udcMustRead(bpt->udc, keyBuf, bpt->keySize);
+
+    /* Scan info for first file offset. */
+    bits64 fileOffset = udcReadBits64(bpt->udc, isSwapped);
+
+    /* Loop through remainder. */
+    for (i=1; i<childCount; ++i)
+	{
+	udcMustRead(bpt->udc, keyBuf, bpt->keySize);
+	if (memcmp(key, keyBuf, bpt->keySize) < 0)
+	    break;
+	fileOffset = udcReadBits64(bpt->udc, isSwapped);
+	}
+    return rFind(bpt, fileOffset, key, val);
+    }
+}
+
+static void rFindMulti(struct bptFile *bpt, bits64 blockStart, void *key, struct slRef **pList)
+/* Find values corresponding to key and add them to pList.  You'll need to 
+ * Do a slRefFreeListAndVals() on the list when done. */
+{
+/* Seek to start of block. */
+udcSeek(bpt->udc, blockStart);
+
+/* Read block header. */
+UBYTE isLeaf;
+UBYTE reserved;
+bits16 i, childCount;
+udcMustReadOne(bpt->udc, isLeaf);
+udcMustReadOne(bpt->udc, reserved);
+boolean isSwapped = bpt->isSwapped;
+childCount = udcReadBits16(bpt->udc, isSwapped);
+
+int keySize = bpt->keySize;
+UBYTE keyBuf[keySize];   /* Place to put a key, buffered on stack. */
+UBYTE valBuf[bpt->valSize];   /* Place to put a value, buffered on stack. */
+
+if (isLeaf)
+    {
+    for (i=0; i<childCount; ++i)
+        {
+	udcMustRead(bpt->udc, keyBuf, keySize);
+	udcMustRead(bpt->udc, valBuf, bpt->valSize);
+	if (memcmp(key, keyBuf, keySize) == 0)
+	    {
+	    void *val = cloneMem(valBuf, bpt->valSize);
+	    refAdd(pList, val);
+	    }
+	}
+    }
+else
+    {
+    /* Read first key and first file offset. */
+    udcMustRead(bpt->udc, keyBuf, keySize);
+    bits64 lastFileOffset = udcReadBits64(bpt->udc, isSwapped);
+    bits64 fileOffset = lastFileOffset;
+    int lastCmp = memcmp(key, keyBuf, keySize);
+
+    /* Loop through remainder. */
+    for (i=1; i<childCount; ++i)
+	{
+	udcMustRead(bpt->udc, keyBuf, keySize);
+	fileOffset = udcReadBits64(bpt->udc, isSwapped);
+	int cmp = memcmp(key, keyBuf, keySize);
+	if (lastCmp >= 0 && cmp <= 0)
+	    {
+	    bits64 curPos = udcTell(bpt->udc);
+	    rFindMulti(bpt, lastFileOffset, key, pList);
+	    udcSeek(bpt->udc, curPos);
+	    }
+	if (cmp < 0)
+	    return;
+	lastCmp = cmp;
+	lastFileOffset = fileOffset;
+	}
+    /* If made it all the way to end, do last one too. */
+    rFindMulti(bpt, fileOffset, key, pList);
+    }
+}
+
+
+static void rTraverse(struct bptFile *bpt, bits64 blockStart, void *context, 
+    void (*callback)(void *context, void *key, int keySize, void *val, int valSize) )
+/* Recursively go across tree, calling callback at leaves. */
+{
+/* Seek to start of block. */
+udcSeek(bpt->udc, blockStart);
+
+/* Read block header. */
+UBYTE isLeaf;
+UBYTE reserved;
+bits16 i, childCount;
+udcMustReadOne(bpt->udc, isLeaf);
+udcMustReadOne(bpt->udc, reserved);
+boolean isSwapped = bpt->isSwapped;
+childCount = udcReadBits16(bpt->udc, isSwapped);
+
+char keyBuf[bpt->keySize], valBuf[bpt->valSize];
+if (isLeaf)
+    {
+    for (i=0; i<childCount; ++i)
+        {
+	udcMustRead(bpt->udc, keyBuf, bpt->keySize);
+	udcMustRead(bpt->udc, valBuf, bpt->valSize);
+	callback(context, keyBuf, bpt->keySize, valBuf, bpt->valSize);
+	}
+    }
+else
+    {
+    bits64 fileOffsets[childCount];
+    /* Loop through to get file offsets of children. */
+    for (i=0; i<childCount; ++i)
+	{
+	udcMustRead(bpt->udc, keyBuf, bpt->keySize);
+	fileOffsets[i] = udcReadBits64(bpt->udc, isSwapped);
+	}
+    /* Loop through recursing on child offsets. */
+    for (i=0; i<childCount; ++i)
+	rTraverse(bpt, fileOffsets[i], context, callback);
+    }
+}
+
+static bits64 bptDataStart(struct bptFile *bpt)
+/* Return offset of first bit of data (as opposed to index) in file.  In hind sight I wish
+ * this were stored in the header, but fortunately it's not that hard to compute. */
+{
+bits64 offset = bpt->rootOffset;
+for (;;)
+    {
+    /* Seek to block start */
+    udcSeek(bpt->udc, offset);
+
+    /* Read block header,  break if we are leaf. */
+    UBYTE isLeaf;
+    UBYTE reserved;
+    bits16 childCount;
+    udcMustReadOne(bpt->udc, isLeaf);
+    if (isLeaf)
+         break;
+    udcMustReadOne(bpt->udc, reserved);
+    boolean isSwapped = bpt->isSwapped;
+    childCount = udcReadBits16(bpt->udc, isSwapped);
+
+    /* Read and discard first key. */
+    char keyBuf[bpt->keySize];
+    udcMustRead(bpt->udc, keyBuf, bpt->keySize);
+
+    /* Get file offset of sub-block. */
+    offset = udcReadBits64(bpt->udc, isSwapped);
+    }
+return offset;
+}
+
+static bits64 bptDataOffset(struct bptFile *bpt, bits64 itemPos)
+/* Return position of file of data corresponding to given itemPos.  For first piece of
+ * data pass in 0. */
+{
+if (itemPos >= bpt->itemCount)
+    errAbort("Item index %lld greater than item count %lld in %s", 
+	itemPos, bpt->itemCount, bpt->fileName);
+bits64 blockPos = itemPos/bpt->blockSize;
+bits32 insidePos = itemPos - blockPos*bpt->blockSize;
+int blockHeaderSize = 4;
+bits64 itemByteSize = bpt->valSize + bpt->keySize;
+bits64 blockByteSize = bpt->blockSize * itemByteSize + blockHeaderSize;
+bits64 blockOffset = blockByteSize*blockPos + bptDataStart(bpt);
+bits64 itemOffset = blockOffset + blockHeaderSize + itemByteSize * insidePos;
+return itemOffset;
+}
+
+void bptKeyAtPos(struct bptFile *bpt, bits64 itemPos, void *result)
+/* Fill in result with the key at given itemPos.  For first piece of data itemPos is 0 
+ * Result must be at least bpt->keySize.  If result is a string it won't be zero terminated
+ * by this routine.  Use bptStringKeyAtPos instead. */
+{
+bits64 offset = bptDataOffset(bpt, itemPos);
+udcSeek(bpt->udc, offset);
+udcMustRead(bpt->udc, result, bpt->keySize);
+}
+
+void bptStringKeyAtPos(struct bptFile *bpt, bits64 itemPos, char *result, int maxResultSize)
+/* Fill in result with the key at given itemPos.  The maxResultSize should be 1+bpt->keySize
+ * to accommodate zero termination of string. */
+{
+assert(maxResultSize > bpt->keySize);
+bptKeyAtPos(bpt, itemPos, result);
+result[bpt->keySize] = 0;
+}
+
+static boolean bptFileFindMaybeMulti(struct bptFile *bpt, void *key, int keySize, int valSize,
+    boolean multi, void *singleVal, struct slRef **multiVal)
+/* Do either a single or multiple find depending in multi parameter.  Only one of singleVal
+ * or multiVal should be non-NULL, depending on the same parameter. */
+{
+/* Check key size vs. file key size, and act appropriately.  If need be copy key to a local
+ * buffer and zero-extend it. */
+if (keySize > bpt->keySize)
+    return FALSE;
+char keyBuf[bpt->keySize];
+if (keySize != bpt->keySize)
+    {
+    memcpy(keyBuf, key, keySize);
+    memset(keyBuf+keySize, 0, bpt->keySize - keySize);
+    key = keyBuf;
+    }
+
+/* Make sure the valSize matches what's in file. */
+if (valSize != bpt->valSize)
+    errAbort("Value size mismatch between bptFileFind (valSize=%d) and %s (valSize=%d)",
+    	valSize, bpt->fileName, bpt->valSize);
+
+if (multi)
+    {
+    rFindMulti(bpt, bpt->rootOffset, key, multiVal);
+    return *multiVal != NULL;
+    }
+else
+    return rFind(bpt, bpt->rootOffset, key, singleVal);
+}
+
+boolean bptFileFind(struct bptFile *bpt, void *key, int keySize, void *val, int valSize)
+/* Find value associated with key.  Return TRUE if it's found. 
+*  Parameters:
+*     bpt - file handle returned by bptFileOpen
+*     key - pointer to key string, which needs to be bpt->keySize long
+*     val - pointer to where to put retrieved value
+*/
+{
+return bptFileFindMaybeMulti(bpt, key, keySize, valSize, FALSE, val, NULL);
+}
+
+struct slRef *bptFileFindMultiple(struct bptFile *bpt, void *key, int keySize, int valSize)
+/* Find all values associated with key.  Store this in ->val item of returned list. 
+ * Do a slRefFreeListAndVals() on list when done. */
+{
+struct slRef *list = NULL;
+bptFileFindMaybeMulti(bpt, key, keySize, valSize, TRUE, NULL, &list);
+slReverse(&list);
+return list;
+}
+
+void bptFileTraverse(struct bptFile *bpt, void *context,
+    void (*callback)(void *context, void *key, int keySize, void *val, int valSize) )
+/* Traverse bPlusTree on file, calling supplied callback function at each
+ * leaf item. */
+{
+return rTraverse(bpt, bpt->rootOffset, context, callback);
+}
+
+
+/* This section of code deals with making balanced b+ trees given a sorted array as input.
+ * The difficult part is mostly just calculating the offsets of various things.  As an example
+ * if you had the sorted array:
+ *   01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
+ * and wanted to create a tree of block size 4, the resulting tree would have three levels
+ * as so:
+ *  01 17
+ *  01 05 09 13   17 21 25
+ *  01 02 03 04   05 06 07 08  09 10 11 12   13 14 15 16   17 18 19 20   21 22 23 24  25 26 27
+ */
+
+static long xToY(int x, unsigned y)
+/* Return x to the Y power, with y usually small. */
+{
+long i, val = 1;
+for (i=0; i<y; ++i)
+    val *= x;
+return val;
+}
+
+static int bptCountLevels(int maxBlockSize, int itemCount)
+/* Count up number of levels needed in tree of given maximum block size. */
+{
+int levels = 1;
+while (itemCount > maxBlockSize)
+    {
+    itemCount = (itemCount + maxBlockSize - 1)  / maxBlockSize;
+    levels += 1;
+    }
+return levels;
+}
+
+
+static bits32 writeIndexLevel(bits16 blockSize, 
+	void *itemArray, int itemSize, long itemCount, 
+	bits32 indexOffset, int level, 
+	void (*fetchKey)(const void *va, char *keyBuf), bits32 keySize, bits32 valSize,
+	FILE *f)
+/* Write out a non-leaf level. */
+{
+char *items = itemArray;
+
+/* Calculate number of nodes to write at this level. */
+long slotSizePer = xToY(blockSize, level);   // Number of items per slot in node
+long nodeSizePer = slotSizePer * blockSize;  // Number of items per node
+long nodeCount = (itemCount + nodeSizePer - 1)/nodeSizePer;	
+
+
+/* Calculate sizes and offsets. */
+long bytesInIndexBlock = (bptBlockHeaderSize + blockSize * (keySize+sizeof(bits64)));
+long bytesInLeafBlock = (bptBlockHeaderSize + blockSize * (keySize+valSize));
+bits64 bytesInNextLevelBlock = (level == 1 ? bytesInLeafBlock : bytesInIndexBlock);
+bits64 levelSize = nodeCount * bytesInIndexBlock;
+bits64 endLevel = indexOffset + levelSize;
+bits64 nextChild = endLevel;
+
+
+UBYTE isLeaf = FALSE;
+UBYTE reserved = 0;
+
+long i,j;
+char keyBuf[keySize+1];
+keyBuf[keySize] = 0;
+for (i=0; i<itemCount; i += nodeSizePer)
+    {
+    /* Calculate size of this block */
+    long countOne = (itemCount - i + slotSizePer - 1)/slotSizePer;
+    if (countOne > blockSize)
+        countOne = blockSize;
+    bits16 shortCountOne = countOne;
+
+    /* Write block header. */
+    writeOne(f, isLeaf);
+    writeOne(f, reserved);
+    writeOne(f, shortCountOne);
+
+    /* Write out the slots that are used one by one, and do sanity check. */
+    int slotsUsed = 0;
+    long endIx = i + nodeSizePer;
+    if (endIx > itemCount)
+        endIx = itemCount;
+    for (j=i; j<endIx; j += slotSizePer)
+        {
+	void *item = items + j*itemSize;
+	memset(keyBuf, 0, keySize);
+	(*fetchKey)(item, keyBuf);
+	mustWrite(f, keyBuf, keySize);
+	writeOne(f, nextChild);
+	nextChild += bytesInNextLevelBlock;
+	++slotsUsed;
+	}
+    assert(slotsUsed == shortCountOne);
+
+    /* Write out empty slots as all zero. */
+    int slotSize = keySize + sizeof(bits64);
+    for (j=countOne; j<blockSize; ++j)
+	repeatCharOut(f, 0, slotSize);
+    }
+return endLevel;
+}
+
+static void writeLeafLevel(bits16 blockSize, void *itemArray, int itemSize, int itemCount, 
+	void (*fetchKey)(const void *va, char *keyBuf), bits32 keySize,
+	void* (*fetchVal)(const void *va), bits32 valSize,
+	FILE *f)
+/* Write out leaf level blocks. */
+{
+char *items = itemArray;
+int i,j;
+UBYTE isLeaf = TRUE;
+UBYTE reserved = 0;
+bits16 countOne;
+int countLeft = itemCount;
+char keyBuf[keySize+1];
+keyBuf[keySize] = 0;
+for (i=0; i<itemCount; i += countOne)
+    {
+    /* Write block header */
+    if (countLeft > blockSize)
+        countOne = blockSize;
+    else
+        countOne = countLeft;
+    writeOne(f, isLeaf);
+    writeOne(f, reserved);
+    writeOne(f, countOne);
+
+    /* Write out position in genome and in file for each item. */
+    for (j=0; j<countOne; ++j)
+        {
+	assert(i+j < itemCount);
+	void *item = items + (i+j)*itemSize;
+	memset(keyBuf, 0, keySize);
+	(*fetchKey)(item, keyBuf);
+	mustWrite(f, keyBuf, keySize);
+	mustWrite(f, (*fetchVal)(item), valSize);
+	}
+    
+    /* Pad out any unused bits of last block with zeroes. */
+    int slotSize = keySize + valSize;
+    for (j=countOne; j<blockSize; ++j)
+	repeatCharOut(f, 0, slotSize);
+
+    countLeft -= countOne;
+    }
+}
+
+void bptFileBulkIndexToOpenFile(void *itemArray, int itemSize, bits64 itemCount, bits32 blockSize,
+	void (*fetchKey)(const void *va, char *keyBuf), bits32 keySize,
+	void* (*fetchVal)(const void *va), bits32 valSize, FILE *f)
+/* Create a b+ tree index from a sorted array, writing output starting at current position
+ * of an already open file.  See bptFileCreate for explanation of parameters. */
+{
+bits32 magic = bptSig;
+bits32 reserved = 0;
+writeOne(f, magic);
+writeOne(f, blockSize);
+writeOne(f, keySize);
+writeOne(f, valSize);
+writeOne(f, itemCount);
+writeOne(f, reserved);
+writeOne(f, reserved);
+bits64 indexOffset = ftell(f);
+
+/* Write non-leaf nodes. */
+int levels = bptCountLevels(blockSize, itemCount);
+int i;
+for (i=levels-1; i > 0; --i)
+    {
+    bits32 endLevelOffset = writeIndexLevel(blockSize, itemArray, itemSize, itemCount, indexOffset, 
+    	i, fetchKey, keySize, valSize, f);
+    indexOffset = ftell(f);
+    if (endLevelOffset != indexOffset)
+        internalErr();
+    }
+
+/* Write leaf nodes */
+writeLeafLevel(blockSize, itemArray, itemSize, itemCount, 
+	fetchKey, keySize, fetchVal, valSize, f);
+}
+
+void bptFileCreate(
+	void *itemArray, 	/* Sorted array of things to index. */
+	int itemSize, 		/* Size of each element in array. */
+	bits64 itemCount, 	/* Number of elements in array. */
+	bits32 blockSize,	/* B+ tree block size - # of children for each node. */
+	void (*fetchKey)(const void *va, char *keyBuf),  /* Given item, copy key to keyBuf */ 
+	bits32 keySize,					 /* Size of key */
+	void* (*fetchVal)(const void *va), 		 /* Given item, return pointer to value */
+	bits32 valSize, 				 /* Size of value */
+	char *fileName)                                  /* Name of output file. */
+/* Create a b+ tree index file from a sorted array. */
+
+{
+/* Open file and write header. */
+FILE *f = mustOpen(fileName, "wb");
+bptFileBulkIndexToOpenFile(itemArray, itemSize, itemCount, blockSize, fetchKey, keySize, 
+	fetchVal, valSize, f);
+carefulClose(&f);
+}
+
diff --git a/gbtools/src/blatSrc/lib/bamFile.c b/gbtools/src/blatSrc/lib/bamFile.c
new file mode 100644
index 0000000..1e5f58f
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/bamFile.c
@@ -0,0 +1,797 @@
+/* bamFile -- interface to binary alignment format files using Heng Li's samtools lib. */
+
+/* Copyright (C) 2014 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "portable.h"
+#include "bamFile.h"
+#ifdef USE_BAM
+#include "htmshell.h"
+#include "udc.h"
+
+#ifdef KNETFILE_HOOKS
+// If KNETFILE_HOOKS is used (as recommended!), then we can simply call bam_index_load
+// without worrying about the samtools lib creating local cache files in cgi-bin:
+
+static bam_index_t *bamOpenIdx(char *fileOrUrl)
+/* If fileOrUrl has a valid accompanying .bai file, parse and return the index;
+ * otherwise return NULL. */
+{
+bam_index_t *idx = bam_index_load(fileOrUrl);
+return idx;
+}
+
+#else// no KNETFILE_HOOKS
+// Oh well.  The unmodified samtools lib downloads .bai files into the current
+// working directory, which is cgi-bin -- not good.  So we need to temporarily
+// change to a trash directory, let samtools download there, then pop back to
+// cgi-bin.
+
+static char *getSamDir()
+/* Return the name of a trash dir for samtools to run in (it creates files in current dir)
+ * and make sure the directory exists. */
+{
+static char *samDir = NULL;
+char *dirName = "samtools";
+if (samDir == NULL)
+    {
+    mkdirTrashDirectory(dirName);
+    size_t len = strlen(trashDir()) + 1 + strlen(dirName) + 1;
+    samDir = needMem(len);
+    safef(samDir, len, "%s/%s", trashDir(), dirName);
+    }
+return samDir;
+}
+
+static bam_index_t *bamOpenIdx(char *fileOrUrl)
+/* If fileOrUrl has a valid accompanying .bai file, parse and return the index;
+ * otherwise return NULL. */
+{
+// When file is an URL, this caches the index file in addition to validating:
+// Since samtools's url-handling code saves the .bai file to the current directory,
+// chdir to a trash directory before calling bam_index_load, then chdir back.
+char *runDir = getCurrentDir();
+char *samDir = getSamDir();
+boolean usingUrl = (strstr(fileOrUrl, "tp://") || strstr(fileOrUrl, "https://"));
+if (usingUrl)
+    setCurrentDir(samDir);
+bam_index_t *idx = bam_index_load(fileOrUrl);
+if (usingUrl)
+    setCurrentDir(runDir);
+return idx;
+}
+
+#endif//ndef KNETFILE_HOOKS
+
+static void bamCloseIdx(bam_index_t **pIdx)
+/* Free unless already NULL. */
+{
+if (pIdx != NULL && *pIdx != NULL)
+    {
+    free(*pIdx); // Not freeMem, freez etc -- sam just uses malloc/calloc.
+    *pIdx = NULL;
+    }
+}
+
+boolean bamFileExists(char *fileOrUrl)
+/* Return TRUE if we can successfully open the bam file and its index file.
+ * NOTE: this doesn't give enough diagnostics */
+{
+char *bamFileName = fileOrUrl;
+samfile_t *fh = samopen(bamFileName, "rb", NULL);
+// Check both fh and fh->header; non-NULL fh can have NULL header if header doesn't parse!
+if (fh != NULL && fh->header != NULL)
+    {
+    bam_index_t *idx = bamOpenIdx(bamFileName);
+    samclose(fh);
+    if (idx == NULL)
+	{
+	warn("bamFileExists: failed to read index corresponding to %s", bamFileName);
+	return FALSE;
+	}
+    bamCloseIdx(&idx);
+    bamClose(&fh);
+    return TRUE;
+    }
+return FALSE;
+}
+
+samfile_t *bamOpen(char *fileOrUrl, char **retBamFileName)
+/* Return an open bam file or errAbort (should be named bamMustOpen).
+ * Return parameter if NON-null will return the file name (vestigial; long ago
+ * there was a plan to use udcFuse filenames instead of URLs) */
+{
+char *bamFileName = fileOrUrl;
+if (retBamFileName != NULL)
+    *retBamFileName = bamFileName;
+
+#ifdef BAM_VERSION
+// suppress too verbose messages in samtools >= 0.1.18; see redmine #6491
+// This variable didn't exist in older versions of samtools (where BAM_VERSION wasn't defined).
+bam_verbose = 1;
+#endif
+
+samfile_t *fh = samopen(bamFileName, "rb", NULL);
+// Check both fh and fh->header; non-NULL fh can have NULL header if header doesn't parse!
+if (fh == NULL || fh->header == NULL)
+    {
+    boolean usingUrl = (strstr(fileOrUrl, "tp://") || strstr(fileOrUrl, "https://"));
+    struct dyString *urlWarning = dyStringNew(0);
+    if (usingUrl && fh == NULL)
+	{
+	dyStringAppend(urlWarning,
+		       ". If you are able to access the URL with your web browser, "
+		       "please try reloading this page.");
+	}
+    else if (fh != NULL && fh->header == NULL)
+	dyStringAppend(urlWarning, ": parser error while reading the file header.");
+    errAbort("Failed to open %s%s", fileOrUrl, urlWarning->string);
+    }
+return fh;
+}
+
+samfile_t *bamMustOpenLocal(char *fileName, char *mode, void *extraHeader)
+/* Open up sam or bam file or die trying.  The mode parameter is 
+ *    "r" - open SAM to read
+ *    "rb" - open BAM to read
+ *    "w" - open SAM to write
+ *    "wb" - open BAM to write
+ * The extraHeader is generally NULL in the read case, and the write case
+ * contains a pointer to a bam_header_t with information about the header.
+ * The implementation is just a wrapper around samopen from the samtools library
+ * that aborts with error message if there's a problem with the open. */
+{
+samfile_t *sf = samopen(fileName, mode, extraHeader);
+if (sf == NULL)
+    errnoAbort("Couldn't open %s.\n", fileName);
+return sf;
+}
+
+void bamClose(samfile_t **pSamFile)
+/* Close down a samfile_t */
+{
+if (pSamFile != NULL)
+    {
+    samclose(*pSamFile);
+    *pSamFile = NULL;
+    }
+}
+
+void bamFileAndIndexMustExist(char *fileOrUrl)
+/* Open both a bam file and its accompanying index or errAbort; this is what it
+ * takes for diagnostic info to propagate up through errCatches in calling code. */
+{
+samfile_t *bamF = bamOpen(fileOrUrl, NULL);
+bam_index_t *idx = bamOpenIdx(fileOrUrl);
+if (idx == NULL)
+    errAbort("failed to read index file (.bai) corresponding to %s", fileOrUrl);
+bamCloseIdx(&idx);
+bamClose(&bamF);
+}
+
+void bamFetchAlreadyOpen(samfile_t *samfile, bam_index_t *idx, char *bamFileName, 
+			 char *position, bam_fetch_f callbackFunc, void *callbackData)
+/* With the open bam file, return items the same way with the callbacks as with bamFetch() */
+/* except in this case use an already-open bam file and index (use bam_index_load and free() for */
+/* the index). It seems a little strange to pass the filename in with the open bam, but */
+/* it's just used to report errors. */
+{
+int chromId, start, end;
+int ret = bam_parse_region(samfile->header, position, &chromId, &start, &end);
+if (ret != 0 && startsWith("chr", position))
+    ret = bam_parse_region(samfile->header, position+strlen("chr"), &chromId, &start, &end);
+if (ret != 0)
+    // If the bam file does not cover the current chromosome, OK
+    return;
+ret = bam_fetch(samfile->x.bam, idx, chromId, start, end, callbackData, callbackFunc);
+if (ret != 0)
+    warn("bam_fetch(%s, %s (chromId=%d) failed (%d)", bamFileName, position, chromId, ret);
+}
+
+void bamFetch(char *fileOrUrl, char *position, bam_fetch_f callbackFunc, void *callbackData,
+		 samfile_t **pSamFile)
+/* Open the .bam file, fetch items in the seq:start-end position range,
+ * and call callbackFunc on each bam item retrieved from the file plus callbackData.
+ * This handles BAM files with "chr"-less sequence names, e.g. from Ensembl. 
+ * The pSamFile parameter is optional.  If non-NULL it will be filled in, just for
+ * the benefit of the callback function, with the open samFile.  */
+{
+char *bamFileName = NULL;
+samfile_t *fh = bamOpen(fileOrUrl, &bamFileName);
+if (pSamFile != NULL)
+    *pSamFile = fh;
+bam_index_t *idx = bamOpenIdx(bamFileName);
+if (idx == NULL)
+    warn("bam_index_load(%s) failed.", bamFileName);
+else
+    {
+    bamFetchAlreadyOpen(fh, idx, bamFileName, position, callbackFunc, callbackData);
+    bamCloseIdx(&idx);
+    }
+bamClose(&fh);
+}
+
+boolean bamIsRc(const bam1_t *bam)
+/* Return TRUE if alignment is on - strand. */
+{
+const bam1_core_t *core = &bam->core;
+return (core->flag & BAM_FREVERSE);
+}
+
+void bamGetSoftClipping(const bam1_t *bam, int *retLow, int *retHigh, int *retClippedQLen)
+/* If retLow is non-NULL, set it to the number of "soft-clipped" (skipped) bases at
+ * the beginning of the query sequence and quality; likewise for retHigh at end.
+ * For convenience, retClippedQLen is the original query length minus soft clipping
+ * (and the length of the query sequence that will be returned). */
+{
+unsigned int *cigarPacked = bam1_cigar(bam);
+const bam1_core_t *core = &bam->core;
+char op;
+int n = bamUnpackCigarElement(cigarPacked[0], &op);
+int low = (op == 'S') ? n : 0;
+n = bamUnpackCigarElement(cigarPacked[core->n_cigar-1], &op);
+int high = (op == 'S') ? n : 0;
+if (retLow != NULL)
+    *retLow = low;
+if (retHigh != NULL)
+    *retHigh = high;
+if (retClippedQLen != NULL)
+    *retClippedQLen = (core->l_qseq - low - high);
+}
+
+
+void bamUnpackQuerySequence(const bam1_t *bam, boolean useStrand, char *qSeq)
+/* Fill in qSeq with the nucleotide sequence encoded in bam.  The BAM format 
+ * reverse-complements query sequence when the alignment is on the - strand,
+ * so if useStrand is given we rev-comp it back to restore the original query 
+ * sequence. */
+{
+const bam1_core_t *core = &bam->core;
+int qLen = core->l_qseq;
+uint8_t *packedQSeq = bam1_seq(bam);
+int i;
+for (i = 0; i < qLen; i++)
+    qSeq[i] = bam_nt16_rev_table[bam1_seqi(packedQSeq, i)];
+qSeq[i] = '\0';
+if (useStrand && bamIsRc(bam))
+    reverseComplement(qSeq, qLen);
+}
+
+char *bamGetQuerySequence(const bam1_t *bam, boolean useStrand)
+/* Allocate and return the nucleotide sequence encoded in bam.  The BAM format 
+ * reverse-complements query sequence when the alignment is on the - strand,
+ * so if useStrand is given we rev-comp it back to restore the original query 
+ * sequence. */
+{
+const bam1_core_t *core = &bam->core;
+int qLen = core->l_qseq;
+char *qSeq = needMem(qLen+1);
+bamUnpackQuerySequence(bam, useStrand, qSeq);
+return qSeq;
+}
+
+UBYTE *bamGetQueryQuals(const bam1_t *bam, boolean useStrand)
+/* Return the base quality scores encoded in bam as an array of ubytes. */
+{
+const bam1_core_t *core = &bam->core;
+int qLen = core->l_qseq;
+UBYTE *arr = needMem(qLen);
+boolean isRc = useStrand && bamIsRc(bam);
+UBYTE *qualStr = bam1_qual(bam);
+int i;
+for (i = 0;  i < core->l_qseq;  i++)
+    {
+    int offset = isRc ? (qLen - 1 - i) : i;
+    arr[i] = (qualStr[0] == 255) ? 255 : qualStr[offset];
+    }
+return arr;
+}
+
+void bamUnpackCigar(const bam1_t *bam, struct dyString *dyCigar)
+/* Unpack CIGAR string into dynamic string */
+{
+unsigned int *cigarPacked = bam1_cigar(bam);
+const bam1_core_t *core = &bam->core;
+int i;
+for (i = 0;  i < core->n_cigar;  i++)
+    {
+    char op;
+    int n = bamUnpackCigarElement(cigarPacked[i], &op);
+    dyStringPrintf(dyCigar, "%d", n);
+    dyStringAppendC(dyCigar, op);
+    }
+}
+
+char *bamGetCigar(const bam1_t *bam)
+/* Return a BAM-enhanced CIGAR string, decoded from the packed encoding in bam. */
+{
+const bam1_core_t *core = &bam->core;
+struct dyString *dyCigar = dyStringNew(min(8, core->n_cigar*4));
+bamUnpackCigar(bam, dyCigar);
+return dyStringCannibalize(&dyCigar);
+}
+
+void bamShowCigarEnglish(const bam1_t *bam)
+/* Print out cigar in English e.g. "20 (mis)Match, 1 Deletion, 3 (mis)Match" */
+{
+unsigned int *cigarPacked = bam1_cigar(bam);
+const bam1_core_t *core = &bam->core;
+int i;
+for (i = 0;  i < core->n_cigar;  i++)
+    {
+    char op;
+    int n = bamUnpackCigarElement(cigarPacked[i], &op);
+    if (i > 0)
+	printf(", ");
+    switch (op)
+	{
+	case 'M': // match or mismatch (gapless aligned block)
+	    printf("%d (mis)Match", n);
+	    break;
+	case '=': // match
+	    printf("%d Match", n);
+	    break;
+	case 'X': // mismatch
+	    printf("%d Mismatch", n);
+	    break;
+	case 'I': // inserted in query
+	    printf("%d Insertion", n);
+	    break;
+	case 'S': // skipped query bases at beginning or end ("soft clipping")
+	    printf("%d Skipped", n);
+	    break;
+	case 'D': // deleted from query
+	    printf("%d Deletion", n);
+	    break;
+	case 'N': // long deletion from query (intron as opposed to small del)
+	    printf("%d deletioN", n);
+	    break;
+	case 'H': // skipped query bases not stored in record's query sequence ("hard clipping")
+	    printf("%d Hard clipped query", n);
+	    break;
+	case 'P': // P="silent deletion from padded reference sequence"
+	    printf("%d Padded / silent deletion", n);
+	    break;
+	default:
+	    errAbort("bamShowCigarEnglish: unrecognized CIGAR op %c -- update me", op);
+	}
+    }
+}
+
+static void descFlag(unsigned flag, unsigned bitMask, char *desc, boolean makeRed,
+	      boolean *retFirst)
+/* Describe a flag bit (or multi-bit mask) if it is set in flag. */
+{
+if ((flag & bitMask) == bitMask) // *all* bits in bitMask are set in flag
+    {
+    if (!*retFirst)
+	printf(" | ");
+    printf("<span%s>(<TT>0x%02x</TT>) %s</span>",
+	   (makeRed ? " style='color: red'" : ""), bitMask, desc);
+    *retFirst = FALSE;
+    }
+}
+
+void bamShowFlagsEnglish(const bam1_t *bam)
+/* Print out flags in English, e.g. "Mate is on '-' strand; Properly paired". */
+{
+const bam1_core_t *core = &bam->core;
+unsigned flag = core->flag;
+boolean first = TRUE;
+descFlag(flag, BAM_FDUP, "Optical or PCR duplicate", TRUE, &first);
+descFlag(flag, BAM_FQCFAIL, "QC failure", TRUE, &first);
+descFlag(flag, BAM_FSECONDARY, "Not primary alignment", TRUE, &first);
+descFlag(flag, BAM_FREAD2, "Read 2 of pair", FALSE, &first);
+descFlag(flag, BAM_FREAD1, "Read 1 of pair", FALSE, &first);
+descFlag(flag, BAM_FMREVERSE, "Mate is on '-' strand", FALSE, &first);
+descFlag(flag, BAM_FREVERSE, "Read is on '-' strand", FALSE, &first);
+descFlag(flag, BAM_FMUNMAP, "Mate is unmapped", TRUE, &first);
+if (flag & BAM_FUNMAP)
+    errAbort("Read is unmapped (what is it doing here?!?)");
+descFlag(flag, (BAM_FPROPER_PAIR | BAM_FPAIRED), "Properly paired", FALSE, &first);
+if ((flag & BAM_FPAIRED) && !(flag & BAM_FPROPER_PAIR))
+    descFlag(flag, BAM_FPAIRED, "Not properly paired", TRUE, &first);
+}
+
+int bamGetTargetLength(const bam1_t *bam)
+/* Tally up the alignment's length on the reference sequence from
+ * bam's packed-int CIGAR representation. */
+{
+unsigned int *cigarPacked = bam1_cigar(bam);
+const bam1_core_t *core = &bam->core;
+int tLength=0;
+int i;
+for (i = 0;  i < core->n_cigar;  i++)
+    {
+    char op;
+    int n = bamUnpackCigarElement(cigarPacked[i], &op);
+    switch (op)
+	{
+	case 'M': // match or mismatch (gapless aligned block)
+	case '=': // match
+	case 'X': // mismatch
+	    tLength += n;
+	    break;
+	case 'I': // inserted in query
+	    break;
+	case 'D': // deleted from query
+	case 'N': // long deletion from query (intron as opposed to small del)
+	    tLength += n;
+	    break;
+	case 'S': // skipped query bases at beginning or end ("soft clipping")
+	case 'H': // skipped query bases not stored in record's query sequence ("hard clipping")
+	case 'P': // P="silent deletion from padded reference sequence" -- ignore these.
+	    break;
+	default:
+	    errAbort("bamGetTargetLength: unrecognized CIGAR op %c -- update me", op);
+	}
+    }
+return tLength;
+}
+
+bam1_t *bamClone(const bam1_t *bam)
+/* Return a newly allocated copy of bam. */
+{
+// Using typecasts to get around compiler complaints about bam being const:
+bam1_t *newBam = cloneMem((void *)bam, sizeof(*bam));
+newBam->data = cloneMem((void *)bam->data, bam->data_len*sizeof(bam->data[0]));
+return newBam;
+}
+
+void bamShowTags(const bam1_t *bam)
+/* Print out tags in HTML: bold key, no type indicator for brevity. */
+{
+// adapted from part of bam.c bam_format1:
+uint8_t *s = bam1_aux(bam);
+while (s < bam->data + bam->data_len)
+    {
+    uint8_t type, key[2];
+    key[0] = s[0]; key[1] = s[1];
+    s += 2; type = *s; ++s;
+    printf(" <B>%c%c</B>:", key[0], key[1]);
+    if (type == 'A') { printf("%c", *s); ++s; }
+    else if (type == 'C') { printf("%u", *s); ++s; }
+    else if (type == 'c') { printf("%d", *(int8_t*)s); ++s; }
+    else if (type == 'S') { printf("%u", *(uint16_t*)s); s += 2; }
+    else if (type == 's') { printf("%d", *(int16_t*)s); s += 2; }
+    else if (type == 'I') { printf("%u", *(uint32_t*)s); s += 4; }
+    else if (type == 'i') { printf("%d", *(int32_t*)s); s += 4; }
+    else if (type == 'f') { printf("%g", *(float*)s); s += 4; }
+    else if (type == 'd') { printf("%lg", *(double*)s); s += 8; }
+    else if (type == 'Z' || type == 'H')
+	{
+	htmTextOut(stdout, (char *)s);
+	s += strlen((char *)s) + 1;
+	}
+    }
+putc('\n', stdout);
+}
+
+char *bamGetTagString(const bam1_t *bam, char *tag, char *buf, size_t bufSize)
+/* If bam's tags include the given 2-character tag, place the value into 
+ * buf (zero-terminated, trunc'd if nec) and return a pointer to buf,
+ * or NULL if tag is not present. */
+{
+if (tag == NULL)
+    errAbort("NULL tag passed to bamGetTagString");
+if (! (isalpha(tag[0]) && isalnum(tag[1]) && tag[2] == '\0'))
+    errAbort("bamGetTagString: invalid tag '%s'", htmlEncode(tag));
+char *val = NULL;
+// adapted from part of bam.c bam_format1:
+uint8_t *s = bam1_aux(bam);
+while (s < bam->data + bam->data_len)
+    {
+    uint8_t type, key[2];
+    key[0] = s[0]; key[1] = s[1];
+    s += 2; type = *s; ++s;
+    if (key[0] == tag[0] && key[1] == tag[1])
+	{
+	if (type == 'A') { snprintf(buf, bufSize, "%c", *s);}
+	else if (type == 'C') { snprintf(buf, bufSize, "%u", *s); }
+	else if (type == 'c') { snprintf(buf, bufSize, "%d", *s); }
+	else if (type == 'S') { snprintf(buf, bufSize, "%u", *(uint16_t*)s); }
+	else if (type == 's') { snprintf(buf, bufSize, "%d", *(int16_t*)s); }
+	else if (type == 'I') { snprintf(buf, bufSize, "%u", *(uint32_t*)s); }
+	else if (type == 'i') { snprintf(buf, bufSize, "%d", *(int32_t*)s); }
+	else if (type == 'f') { snprintf(buf, bufSize, "%g", *(float*)s); }
+	else if (type == 'd') { snprintf(buf, bufSize, "%lg", *(double*)s); }
+	else if (type == 'Z' || type == 'H') strncpy(buf, (char *)s, bufSize);
+	else buf[0] = '\0';
+	buf[bufSize-1] = '\0'; // TODO: is this nec?? see man pages
+	val = buf;
+	break;
+	}
+    else
+	{
+	if (type == 'A' || type == 'C' || type == 'c') { ++s; }
+	else if (type == 'S' || type == 's') { s += 2; }
+	else if (type == 'I' || type == 'i' || type == 'f') { s += 4; }
+	else if (type == 'd') { s += 8; }
+	else if (type == 'Z' || type == 'H')
+	    {
+	    while (*s++);
+	    }
+	}
+    }
+return val;
+}
+
+void bamUnpackAux(const bam1_t *bam, struct dyString *dy)
+/* Unpack the tag:type:val part of bam into dy */
+{
+// adapted from part of bam.c bam_format1:
+uint8_t *s = bam1_aux(bam);
+boolean firstTime = TRUE;
+while (s < bam->data + bam->data_len)
+    {
+    if (firstTime)
+        firstTime = FALSE;
+    else
+        dyStringAppendC(dy, '\t');
+    dyStringAppendC(dy, *s++);
+    dyStringAppendC(dy, *s++);
+    dyStringAppendC(dy, ':');
+    dyStringAppendC(dy, s[0]);
+    dyStringAppendC(dy, ':');
+    uint8_t type = *s++;
+    if (type == 'A') { dyStringPrintf(dy, "%c", *s); ++s; }
+    else if (type == 'C') { dyStringPrintf(dy, "%u", *s); ++s; }
+    else if (type == 'c') { dyStringPrintf(dy, "%d", *s); ++s; }
+    else if (type == 'S') { dyStringPrintf(dy, "%u", *(uint16_t*)s); s += 2; }
+    else if (type == 's') { dyStringPrintf(dy, "%d", *(int16_t*)s); s += 2; }
+    else if (type == 'I') { dyStringPrintf(dy, "%u", *(uint32_t*)s); s += 4; }
+    else if (type == 'i') { dyStringPrintf(dy, "%d", *(int32_t*)s); s += 4; }
+    else if (type == 'f') { dyStringPrintf(dy, "%g", *(float*)s); s += 4; }
+    else if (type == 'd') { dyStringPrintf(dy, "%lg", *(double*)s); s += 8; }
+    else if (type == 'Z' || type == 'H')
+	{
+	dyStringAppend(dy, (char *)s);
+	s += strlen((char *)s) + 1;
+	}
+    }
+}
+
+struct bamChromInfo *bamChromList(samfile_t *fh)
+{
+/* Return list of chromosomes from bam header. We make no attempty to normalize chromosome names to UCSC format,
+   so list may contain things like "1" for "chr1", "I" for "chrI", "MT" for "chrM" etc. */
+int i;
+struct bamChromInfo *list = NULL;
+bam_header_t *bamHeader = fh->header;
+if(bamHeader == NULL)
+    return NULL;
+for(i = 0; i < bamHeader->n_targets; i++)
+    {
+    struct bamChromInfo *info = NULL;
+    AllocVar(info);
+    info->name = cloneString(bamHeader->target_name[i]);
+    info->size = bamHeader->target_len[i];
+    slAddHead(&list, info);
+    }
+slReverse(&list);
+return list;
+}
+
+void samToOpenBed(char *samIn, FILE *f)
+/* Like samToOpenBed, but the output is the already open file f. */
+{
+samfile_t *sf = samopen(samIn, "r", NULL);
+bam_header_t *bamHeader = sf->header;
+bam1_t one;
+ZeroVar(&one);
+int err;
+while ((err = samread(sf, &one)) >= 0)
+    {
+    int32_t tid = one.core.tid;
+    if (tid < 0)
+        continue;
+    char *chrom = bamHeader->target_name[tid];
+    // Approximate here... can do better if parse cigar.
+    int start = one.core.pos;
+    int size = one.core.l_qseq;
+    int end = start + size;	
+    boolean isRc = (one.core.flag & BAM_FREVERSE);
+    char strand = '+';
+    if (isRc)
+	{
+	strand = '-';
+	reverseIntRange(&start, &end, bamHeader->target_len[tid]);
+	}
+    fprintf(f, "%s\t%d\t%d\t.\t0\t%c\n", chrom, start, end, strand);
+    }
+if (err < 0 && err != -1)
+    errnoAbort("samread err %d", err);
+samclose(sf);
+}
+
+void samToBed(char *samIn, char *bedOut)
+/* samToBed - Convert SAM file to a pretty simple minded bed file.. */
+{
+FILE *f = mustOpen(bedOut, "w");
+samToOpenBed(samIn, f);
+carefulClose(&f);
+}
+
+#else
+// If we're not compiling with samtools, make stub routines so compile won't fail:
+
+boolean bamFileExists(char *bamFileName)
+/* Return TRUE if we can successfully open the bam file and its index file. */
+{
+warn(COMPILE_WITH_SAMTOOLS, "bamFileExists");
+return FALSE;
+}
+
+void bamFileAndIndexMustExist(char *fileOrUrl)
+/* Open both a bam file and its accompanying index or errAbort; this is what it
+ * takes for diagnostic info to propagate up through errCatches in calling code. */
+{
+errAbort(COMPILE_WITH_SAMTOOLS, "bamFileAndIndexMustExist");
+}
+
+samfile_t *bamOpen(char *fileOrUrl, char **retBamFileName)
+/* Return an open bam file */
+{
+warn(COMPILE_WITH_SAMTOOLS, "bamOpen");
+return FALSE;
+}
+
+samfile_t *bamMustOpenLocal(char *fileName, char *mode, void *extraHeader)
+/* Open up sam or bam file or die trying.  The mode parameter is 
+ *    "r" - open SAM to read
+ *    "rb" - open BAM to read
+ *    "w" - open SAM to write
+ *    "wb" - open BAM to write
+ * The extraHeader is generally NULL in the read case, and the write case
+ * contains a pointer to a bam_header_t with information about the header.
+ * The implementation is just a wrapper around samopen from the samtools library
+ * that aborts with error message if there's a problem with the open. */
+{
+warn(COMPILE_WITH_SAMTOOLS, "bamMustOpenLocal");
+return FALSE;
+}
+
+void bamClose(samfile_t **pSamFile)
+/* Close down a samefile_t */
+{
+errAbort(COMPILE_WITH_SAMTOOLS, "bamClose");
+}
+
+void bamFetch(char *fileOrUrl, char *position, bam_fetch_f callbackFunc, void *callbackData,
+	      samfile_t **pSamFile)
+/* Open the .bam file, fetch items in the seq:start-end position range,
+ * and call callbackFunc on each bam item retrieved from the file plus callbackData.
+ * This handles BAM files with "chr"-less sequence names, e.g. from Ensembl.
+ * The pSamFile parameter is optional.  If non-NULL it will be filled in, just for
+ * the benefit of the callback function, with the open samFile.  */
+{
+errAbort(COMPILE_WITH_SAMTOOLS, "bamFetch");
+}
+
+boolean bamIsRc(const bam1_t *bam)
+/* Return TRUE if alignment is on - strand. */
+{
+errAbort(COMPILE_WITH_SAMTOOLS, "bamIsRc");
+return FALSE;
+}
+
+void bamGetSoftClipping(const bam1_t *bam, int *retLow, int *retHigh, int *retClippedQLen)
+/* If retLow is non-NULL, set it to the number of "soft-clipped" (skipped) bases at
+ * the beginning of the query sequence and quality; likewise for retHigh at end.
+ * For convenience, retClippedQLen is the original query length minus soft clipping
+ * (and the length of the query sequence that will be returned). */
+{
+errAbort(COMPILE_WITH_SAMTOOLS, "bamGetSoftClipping");
+}
+
+char *bamGetQuerySequence(const bam1_t *bam, boolean useStrand)
+/* Return the nucleotide sequence encoded in bam.  The BAM format
+ * reverse-complements query sequence when the alignment is on the - strand,
+ * so if useStrand is given we rev-comp it back to restore the original query
+ * sequence. */
+{
+errAbort(COMPILE_WITH_SAMTOOLS, "bamGetQuerySequence");
+return NULL;
+}
+
+UBYTE *bamGetQueryQuals(const bam1_t *bam, boolean useStrand)
+/* Return the base quality scores encoded in bam as an array of ubytes. */
+{
+errAbort(COMPILE_WITH_SAMTOOLS, "bamGetQueryQuals");
+return NULL;
+}
+
+char *bamGetCigar(const bam1_t *bam)
+/* Return a BAM-enhanced CIGAR string, decoded from the packed encoding in bam. */
+{
+errAbort(COMPILE_WITH_SAMTOOLS, "bamGetCigar");
+return NULL;
+}
+
+void bamShowCigarEnglish(const bam1_t *bam)
+/* Print out cigar in English e.g. "20 (mis)Match, 1 Deletion, 3 (mis)Match" */
+{
+errAbort(COMPILE_WITH_SAMTOOLS, "bamShowCigarEnglish");
+}
+
+void bamShowFlagsEnglish(const bam1_t *bam)
+/* Print out flags in English, e.g. "Mate is on '-' strand; Properly paired". */
+{
+errAbort(COMPILE_WITH_SAMTOOLS, "bamShowFlagsEnglish");
+}
+
+int bamGetTargetLength(const bam1_t *bam)
+/* Tally up the alignment's length on the reference sequence from
+ * bam's packed-int CIGAR representation. */
+{
+errAbort(COMPILE_WITH_SAMTOOLS, "bamGetTargetLength");
+return 0;
+}
+
+bam1_t *bamClone(const bam1_t *bam)
+/* Return a newly allocated copy of bam. */
+{
+errAbort(COMPILE_WITH_SAMTOOLS, "bamClone");
+return NULL;
+}
+
+void bamShowTags(const bam1_t *bam)
+/* Print out tags in HTML: bold key, no type indicator for brevity. */
+{
+errAbort(COMPILE_WITH_SAMTOOLS, "bamShowTags");
+}
+
+char *bamGetTagString(const bam1_t *bam, char *tag, char *buf, size_t bufSize)
+/* If bam's tags include the given 2-character tag, place the value into
+ * buf (zero-terminated, trunc'd if nec) and return a pointer to buf,
+ * or NULL if tag is not present. */
+{
+errAbort(COMPILE_WITH_SAMTOOLS, "bamGetTagString");
+return NULL;
+}
+
+struct bamChromInfo *bamChromList(samfile_t *fh)
+{
+errAbort(COMPILE_WITH_SAMTOOLS, "bamChromList");
+return NULL;
+}
+
+void samToBed(char *samIn, char *bedOut)
+/* samToBed - Convert SAM file to a pretty simple minded bed file.. */
+{
+errAbort(COMPILE_WITH_SAMTOOLS, "samToBed");
+}
+
+void samToOpenBed(char *samIn, FILE *bedOut)
+/* samToBed - Convert SAM file to a pretty simple minded bed file.. */
+{
+errAbort(COMPILE_WITH_SAMTOOLS, "samToOpenBed");
+}
+
+#endif//ndef USE_BAM
+
+static void bamChromInfoFree(struct bamChromInfo **pInfo)
+/* Free up one chromInfo */
+{
+struct bamChromInfo *info = *pInfo;
+if (info != NULL)
+    {
+    freeMem(info->name);
+    freez(pInfo);
+    }
+}
+
+void bamChromInfoFreeList(struct bamChromInfo **pList)
+/* Free a list of dynamically allocated bamChromInfo's */
+{
+struct bamChromInfo *el, *next;
+
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    bamChromInfoFree(&el);
+    }
+*pList = NULL;
+}
+
diff --git a/gbtools/src/blatSrc/lib/base64.c b/gbtools/src/blatSrc/lib/base64.c
new file mode 100644
index 0000000..e5daf53
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/base64.c
@@ -0,0 +1,132 @@
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "base64.h"
+
+
+char *base64Encode(char *input, size_t inplen)
+/* Use base64 to encode a string.  Returns one long encoded
+ * string which need to be freeMem'd. Note: big-endian algorithm.
+ * For some applications you may need to break the base64 output
+ * of this function into lines no longer than 76 chars.
+ */
+{
+char b64[] = B64CHARS;
+int words = (inplen+2)/3;
+int remains = inplen % 3;
+char *result = (char *)needMem(4*words+1);
+size_t i=0, j=0;
+int word = 0;
+unsigned char *p = (unsigned char*) input;  
+/* p must be unsigned char*,  because without "unsigned",
+sign extend messes up last group outputted
+when the value of the chars following last in input
+happens to be char 0x80 or higher */
+for(i=1; i<=words; i++)
+    {
+    word = 0;
+    word |= *p++;
+    word <<= 8;
+    word |= *p++;
+    word <<= 8;
+    word |= *p++;
+    if (i==words && remains>0)
+	{
+	word &= 0x00FFFF00;
+    	if (remains==1)
+    	    word &= 0x00FF0000;
+	}
+    result[j++]=b64[word >> 18 & 0x3F];
+    result[j++]=b64[word >> 12 & 0x3F];
+    result[j++]=b64[word >> 6 & 0x3F];
+    result[j++]=b64[word & 0x3F];
+    }
+result[j] = 0;
+if (remains >0) result[j-1] = '=';    
+if (remains==1) result[j-2] = '=';    
+return result;
+}
+
+
+boolean base64Validate(char *input)
+/* Return true if input is valid base64.
+ * Note that the input string is changed by 
+ * eraseWhiteSpace(). */
+{
+size_t i = 0, l = 0;
+char *p = input;
+boolean validB64 = TRUE;
+
+/* remove whitespace which is unnecessary and  */
+eraseWhiteSpace(input);  
+
+l = strlen(p);
+for(i=0;i<l;i++)
+    {
+    char c = ' ';
+    if (!strchr(B64CHARS,c=*p++))
+        {
+        if (c != '=')
+            {
+            validB64 = FALSE;
+            break;
+            }
+        }
+    }
+if (l%4)
+    validB64 = FALSE;
+return validB64;
+}
+
+char *base64Decode(char *input, size_t *returnSize)
+/* Use base64 to decode a string.  Return decoded
+ * string which will be freeMem'd. Note: big-endian algorithm.
+ * Call eraseWhiteSpace() and check for invalid input 
+ * before passing in input if needed.  
+ * Optionally set return size for use with binary data.
+ */
+{
+static int *map=NULL;
+char b64[] = B64CHARS;
+size_t inplen = strlen(input);
+int words = (inplen+3)/4;
+char *result = (char *)needMem(3*words+1);
+size_t i=0, j=0;
+int word = 0;
+char *p = input;
+
+if (!map)
+    {
+    int i = 0;
+    map = needMem(256*sizeof(int));
+    for (i = 0; i < 256; ++i)
+	{
+	map[i]=0;
+	}
+    for (i = 0; i < 64; ++i)
+	{
+	map[(int)b64[i]]=i;
+	}
+    }
+for(i=0; i<words; i++)
+    {
+    word = 0;
+    word |= map[(int)*p++];
+    word <<= 6;
+    word |= map[(int)*p++];
+    word <<= 6;
+    word |= map[(int)*p++];
+    word <<= 6;
+    word |= map[(int)*p++];
+    result[j++]=word >> 16 & 0xFF;
+    result[j++]=word >> 8 & 0xFF;
+    result[j++]=word & 0xFF;
+    }
+result[j] = 0;
+if (returnSize)
+    *returnSize = j;
+     
+return result;
+}
+
diff --git a/gbtools/src/blatSrc/lib/basicBed.c b/gbtools/src/blatSrc/lib/basicBed.c
new file mode 100644
index 0000000..93d8280
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/basicBed.c
@@ -0,0 +1,1752 @@
+/* basicBed contains the basic code for Browser Extensible Data (bed) files and tables.
+ * The idea behind bed is that the first three fields are defined and required.
+ * A total of 15 fields are defined, and the file can contain any number of these.
+ * In addition after any number of defined fields there can be custom fields that
+ * are not defined in the bed spec.
+ *
+ * There's additional bed-related code in src/hg/inc/bed.h.  This module contains the
+ * stuff that's independent of the database and other genomic structures. */
+
+/* Copyright (C) 2014 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+
+#include "common.h"
+#include "hash.h"
+#include "linefile.h"
+#include "dystring.h"
+#include "sqlNum.h"
+#include "sqlList.h"
+#include "rangeTree.h"
+#include "binRange.h"
+#include "asParse.h"
+#include "basicBed.h"
+
+
+void bedStaticLoad(char **row, struct bed *ret)
+/* Load a row from bed table into ret.  The contents of ret will
+ * be replaced at the next call to this function. */
+{
+ret->chrom = row[0];
+ret->chromStart = sqlUnsigned(row[1]);
+ret->chromEnd = sqlUnsigned(row[2]);
+ret->name = row[3];
+}
+
+struct bed *bedLoad(char **row)
+/* Load a bed from row fetched with select * from bed
+ * from database.  Dispose of this with bedFree(). */
+{
+struct bed *ret;
+AllocVar(ret);
+ret->chrom = cloneString(row[0]);
+ret->chromStart = sqlUnsigned(row[1]);
+ret->chromEnd = sqlUnsigned(row[2]);
+ret->name = cloneString(row[3]);
+return ret;
+}
+
+struct bed *bedCommaIn(char **pS, struct bed *ret)
+/* Create a bed out of a comma separated string. 
+ * This will fill in ret if non-null, otherwise will
+ * return a new bed */
+{
+char *s = *pS;
+
+if (ret == NULL)
+    AllocVar(ret);
+ret->chrom = sqlStringComma(&s);
+ret->chromStart = sqlUnsignedComma(&s);
+ret->chromEnd = sqlUnsignedComma(&s);
+ret->name = sqlStringComma(&s);
+*pS = s;
+return ret;
+}
+
+void bedFree(struct bed **pEl)
+/* Free a single dynamically allocated bed such as created
+ * with bedLoad(). */
+{
+struct bed *el;
+
+if ((el = *pEl) == NULL) return;
+freeMem(el->chrom);
+freeMem(el->name);
+freeMem(el->blockSizes);
+freeMem(el->chromStarts);
+freeMem(el->expIds);
+freeMem(el->expScores);
+freez(pEl);
+}
+
+void bedFreeList(struct bed **pList)
+/* Free a list of dynamically allocated bed's */
+{
+struct bed *el, *next;
+
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    bedFree(&el);
+    }
+*pList = NULL;
+}
+
+void bedOutput(struct bed *el, FILE *f, char sep, char lastSep) 
+/* Print out bed.  Separate fields with sep. Follow last field with lastSep. */
+{
+if (sep == ',') fputc('"',f);
+fprintf(f, "%s", el->chrom);
+if (sep == ',') fputc('"',f);
+fputc(sep,f);
+fprintf(f, "%u", el->chromStart);
+fputc(sep,f);
+fprintf(f, "%u", el->chromEnd);
+fputc(sep,f);
+if (sep == ',') fputc('"',f);
+fprintf(f, "%s", el->name);
+if (sep == ',') fputc('"',f);
+fputc(lastSep,f);
+}
+
+/* --------------- End of AutoSQL generated code. --------------- */
+
+int bedCmp(const void *va, const void *vb)
+/* Compare to sort based on chrom,chromStart. */
+{
+const struct bed *a = *((struct bed **)va);
+const struct bed *b = *((struct bed **)vb);
+int dif;
+dif = strcmp(a->chrom, b->chrom);
+if (dif == 0)
+    dif = a->chromStart - b->chromStart;
+return dif;
+}
+
+int bedCmpEnd(const void *va, const void *vb)
+/* Compare to sort based on chrom,chromEnd. */
+{
+const struct bed *a = *((struct bed **)va);
+const struct bed *b = *((struct bed **)vb);
+int dif;
+dif = strcmp(a->chrom, b->chrom);
+if (dif == 0)
+    dif = a->chromEnd - b->chromEnd;
+return dif;
+}
+
+int bedCmpScore(const void *va, const void *vb)
+/* Compare to sort based on score - lowest first. */
+{
+const struct bed *a = *((struct bed **)va);
+const struct bed *b = *((struct bed **)vb);
+return a->score - b->score;
+}
+
+int bedCmpPlusScore(const void *va, const void *vb)
+/* Compare to sort based on chrom,chromStart. */
+{
+const struct bed *a = *((struct bed **)va);
+const struct bed *b = *((struct bed **)vb);
+int dif;
+dif = strcmp(a->chrom, b->chrom);
+if (dif == 0)
+    {
+    dif = (a->chromStart - b->chromStart) * 1000 +(a->score - b->score);
+    }
+return dif;
+}
+
+int bedCmpSize(const void *va, const void *vb)
+/* Compare to sort based on size of element (end-start == size) */
+{
+const struct bed *a = *((struct bed **)va);
+const struct bed *b = *((struct bed **)vb);
+int a_size = a->chromEnd - a->chromStart;
+int b_size = b->chromEnd - b->chromStart;
+return (a_size - b_size);
+}
+
+int bedCmpChromStrandStart(const void *va, const void *vb)
+/* Compare to sort based on chrom,strand,chromStart. */
+{
+const struct bed *a = *((struct bed **)va);
+const struct bed *b = *((struct bed **)vb);
+int dif;
+dif = strcmp(a->chrom, b->chrom);
+if (dif == 0)
+    dif = strcmp(a->strand, b->strand);
+if (dif == 0)
+    dif = a->chromStart - b->chromStart;
+return dif;
+}
+
+struct bedLine *bedLineNew(char *line)
+/* Create a new bedLine based on tab-separated string s. */
+{
+struct bedLine *bl;
+char *s, c;
+
+AllocVar(bl);
+bl->chrom = cloneString(line);
+s = strchr(bl->chrom, '\t');
+if (s == NULL)
+    errAbort("Expecting tab in bed line %s", line);
+*s++ = 0;
+c = *s;
+if (isdigit(c) || (c == '-' && isdigit(s[1])))
+    {
+    bl->chromStart = atoi(s);
+    bl->line = s;
+    return bl;
+    }
+else
+    {
+    errAbort("Expecting start position in second field of %s", line);
+    return NULL;
+    }
+}
+
+void bedLineFree(struct bedLine **pBl)
+/* Free up memory associated with bedLine. */
+{
+struct bedLine *bl;
+
+if ((bl = *pBl) != NULL)
+    {
+    freeMem(bl->chrom);
+    freez(pBl);
+    }
+}
+
+void bedLineFreeList(struct bedLine **pList)
+/* Free a list of dynamically allocated bedLine's */
+{
+struct bedLine *el, *next;
+
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    bedLineFree(&el);
+    }
+*pList = NULL;
+}
+
+
+int bedLineCmp(const void *va, const void *vb)
+/* Compare to sort based on query. */
+{
+const struct bedLine *a = *((struct bedLine **)va);
+const struct bedLine *b = *((struct bedLine **)vb);
+int dif;
+dif = strcmp(a->chrom, b->chrom);
+if (dif == 0)
+    dif = a->chromStart - b->chromStart;
+return dif;
+}
+
+
+void bedSortFile(char *inFile, char *outFile)
+/* Sort a bed file (in place, overwrites old file. */
+{
+struct lineFile *lf = NULL;
+FILE *f = NULL;
+struct bedLine *blList = NULL, *bl;
+char *line;
+int lineSize;
+
+verbose(2, "Reading %s\n", inFile);
+lf = lineFileOpen(inFile, TRUE);
+while (lineFileNext(lf, &line, &lineSize))
+    {
+    if (line[0] == '#')
+        continue;
+    bl = bedLineNew(line);
+    slAddHead(&blList, bl);
+    }
+lineFileClose(&lf);
+
+verbose(2, "Sorting\n");
+slSort(&blList, bedLineCmp);
+
+verbose(2, "Writing %s\n", outFile);
+f = mustOpen(outFile, "w");
+for (bl = blList; bl != NULL; bl = bl->next)
+    {
+    fprintf(f, "%s\t%s\n", bl->chrom, bl->line);
+    if (ferror(f))
+        {
+	perror("Writing error\n");
+	errAbort("%s is truncated, sorry.", outFile);
+	}
+    }
+fclose(f);
+}
+
+struct bed *bedLoad3(char **row)
+/* Load first three fields of bed. */
+{
+struct bed *ret;
+AllocVar(ret);
+ret->chrom = cloneString(row[0]);
+ret->chromStart = sqlUnsigned(row[1]);
+ret->chromEnd = sqlUnsigned(row[2]);
+return ret;
+}
+
+struct bed *bedLoad5(char **row)
+/* Load first five fields of bed. */
+{
+struct bed *ret;
+AllocVar(ret);
+ret->chrom = cloneString(row[0]);
+ret->chromStart = sqlUnsigned(row[1]);
+ret->chromEnd = sqlUnsigned(row[2]);
+ret->name = cloneString(row[3]);
+ret->score = sqlSigned(row[4]);
+return ret;
+}
+
+struct bed *bedLoad6(char **row)
+/* Load first six fields of bed. */
+{
+struct bed *ret = bedLoad5(row);
+safef(ret->strand, sizeof(ret->strand), "%s", row[5]);
+return ret;
+}
+
+/* it turns out that it isn't just hgLoadBed and custom tracks
+ *	that may encounter the r,g,b specification.  Any program that
+ *	reads bed files may enconter them, so take care of them
+ *	at any time.  The strchr() function is very fast which will
+ *	be a failure in the vast majority of cases parsing integers,
+ *	therefore, this shouldn't be too severe a performance hit.
+ */
+static int itemRgbColumn(char *column9)
+{
+int itemRgb = 0;
+/*  Allow comma separated list of rgb values here   */
+char *comma = strchr(column9, ',');
+if (comma)
+    {
+    if (-1 == (itemRgb = bedParseRgb(column9)))
+	errAbort("ERROR: expecting r,g,b specification, "
+		    "found: '%s'", column9);
+    }
+else
+    itemRgb = sqlUnsigned(column9);
+return itemRgb;
+}
+
+struct bed *bedLoad12(char **row)
+/* Load a bed from row fetched with select * from bed
+ * from database.  Dispose of this with bedFree(). */
+{
+struct bed *ret;
+int sizeOne;
+
+AllocVar(ret);
+ret->blockCount = sqlSigned(row[9]);
+ret->chrom = cloneString(row[0]);
+ret->chromStart = sqlUnsigned(row[1]);
+ret->chromEnd = sqlUnsigned(row[2]);
+ret->name = cloneString(row[3]);
+ret->score = sqlSigned(row[4]);
+strcpy(ret->strand, row[5]);
+ret->thickStart = sqlUnsigned(row[6]);
+ret->thickEnd = sqlUnsigned(row[7]);
+ret->itemRgb = itemRgbColumn(row[8]);
+sqlSignedDynamicArray(row[10], &ret->blockSizes, &sizeOne);
+assert(sizeOne == ret->blockCount);
+sqlSignedDynamicArray(row[11], &ret->chromStarts, &sizeOne);
+assert(sizeOne == ret->blockCount);
+return ret;
+}
+
+struct bed *bedLoadN(char *row[], int wordCount)
+/* Convert a row of strings to a bed. */
+{
+struct bed * bed;
+int count;
+
+AllocVar(bed);
+bed->chrom = cloneString(row[0]);
+bed->chromStart = sqlUnsigned(row[1]);
+bed->chromEnd = sqlUnsigned(row[2]);
+if (wordCount > 3)
+     bed->name = cloneString(row[3]);
+if (wordCount > 4)
+     bed->score = sqlSigned(row[4]);
+if (wordCount > 5)
+     bed->strand[0] = row[5][0];
+if (wordCount > 6)
+     bed->thickStart = sqlUnsigned(row[6]);
+else
+     bed->thickStart = bed->chromStart;
+if (wordCount > 7)
+     bed->thickEnd = sqlUnsigned(row[7]);
+else
+     bed->thickEnd = bed->chromEnd;
+if (wordCount > 8)
+    bed->itemRgb = itemRgbColumn(row[8]);
+if (wordCount > 9)
+    bed->blockCount = sqlUnsigned(row[9]);
+if (wordCount > 10)
+    sqlSignedDynamicArray(row[10], &bed->blockSizes, &count);
+if (wordCount > 11)
+    sqlSignedDynamicArray(row[11], &bed->chromStarts, &count);
+if (wordCount > 12)
+    bed->expCount = sqlUnsigned(row[12]);
+if (wordCount > 13)
+    sqlSignedDynamicArray(row[13], &bed->expIds, &count);
+if (wordCount > 14)
+    sqlFloatDynamicArray(row[14], &bed->expScores, &count);
+return bed;
+}
+
+struct bed *bedLoadNAllChrom(char *fileName, int numFields, char* chrom) 
+/* Load bed entries from a tab-separated file that have the given chrom.
+ * Dispose of this with bedFreeList(). */
+{
+struct bed *list = NULL, *el;
+struct lineFile *lf = lineFileOpen(fileName, TRUE);
+char *row[numFields];
+
+while (lineFileRow(lf, row))
+    {
+    el = bedLoadN(row, numFields);
+    if(chrom == NULL || sameString(el->chrom, chrom))
+        slAddHead(&list, el);
+    else
+        bedFree(&el);
+    }
+lineFileClose(&lf);
+slReverse(&list);
+return list;
+}
+
+struct bed *bedLoadNAll(char *fileName, int numFields) 
+/* Load all bed from a tab-separated file.
+ * Dispose of this with bedFreeList(). */
+{
+return bedLoadNAllChrom(fileName, numFields, NULL);
+}
+
+struct bed *bedLoadAll(char *fileName)
+/* Determines how many fields are in a bedFile and load all beds from
+ * a tab-separated file.  Dispose of this with bedFreeList(). */
+{
+struct bed *list = NULL;
+struct lineFile *lf = lineFileOpen(fileName, TRUE);
+char *line, *row[bedKnownFields];
+
+while (lineFileNextReal(lf, &line))
+    {
+    int numFields = chopByWhite(line, row, ArraySize(row));
+    if (numFields < 4)
+	errAbort("file %s doesn't appear to be in bed format. At least 4 fields required, got %d", fileName, numFields);
+    slAddHead(&list, bedLoadN(row, numFields));
+    }
+lineFileClose(&lf);
+slReverse(&list);
+return list;
+}
+
+void bedLoadAllReturnFieldCountAndRgb(char *fileName, struct bed **retList, int *retFieldCount, 
+    boolean *retRgb)
+/* Load bed of unknown size and return number of fields as well as list of bed items.
+ * Ensures that all lines in bed file have same field count.  Also returns whether 
+ * column 9 is being used as RGB or not. */
+{
+struct bed *list = NULL;
+struct lineFile *lf = lineFileOpen(fileName, TRUE);
+char *line, *row[bedKnownFields];
+int fieldCount = 0;
+boolean isRgb = FALSE;
+
+while (lineFileNextReal(lf, &line))
+    {
+    int numFields = chopByWhite(line, row, ArraySize(row));
+    if (numFields < 4)
+	errAbort("file %s doesn't appear to be in bed format. At least 4 fields required, got %d", 
+		fileName, numFields);
+    if (fieldCount == 0)
+	{
+        fieldCount = numFields;
+	if (fieldCount >= 9)
+	    isRgb =  (strchr(row[8], ',') != NULL);
+	}
+    else
+        if (fieldCount != numFields)
+	    errAbort("Inconsistent number of fields in file. %d on line %d of %s, %d previously.",
+	        numFields, lf->lineIx, lf->fileName, fieldCount);
+    slAddHead(&list, bedLoadN(row, fieldCount));
+    }
+lineFileClose(&lf);
+slReverse(&list);
+*retList = list;
+*retFieldCount = fieldCount;
+if (retRgb != NULL)
+   *retRgb = isRgb;
+}
+
+void bedLoadAllReturnFieldCount(char *fileName, struct bed **retList, int *retFieldCount)
+/* Load bed of unknown size and return number of fields as well as list of bed items.
+ * Ensures that all lines in bed file have same field count. */
+{
+bedLoadAllReturnFieldCountAndRgb(fileName, retList, retFieldCount, NULL);
+}
+
+void bedOutFlexible(struct bed *el, int wordCount, FILE *f,
+	char sep, char lastSep, boolean useItemRgb)
+/* Write a bed of wordCount fields, optionally interpreting field nine as R,G,B values. */
+{
+int i;
+if (sep == ',') fputc('"',f);
+fprintf(f, "%s", el->chrom);
+if (sep == ',') fputc('"',f);
+fputc(sep,f);
+fprintf(f, "%u", el->chromStart);
+fputc(sep,f);
+fprintf(f, "%u", el->chromEnd);
+if (wordCount <= 3)
+    {
+    fputc(lastSep, f);
+    return;
+    }
+fputc(sep,f);
+if (sep == ',') fputc('"',f);
+fprintf(f, "%s", el->name);
+if (sep == ',') fputc('"',f);
+if (wordCount <= 4)
+    {
+    fputc(lastSep, f);
+    return;
+    }
+fputc(sep,f);
+fprintf(f, "%d", el->score);
+if (wordCount <= 5)
+    {
+    fputc(lastSep, f);
+    return;
+    }
+fputc(sep,f);
+if (sep == ',') fputc('"',f);
+fprintf(f, "%s", el->strand);
+if (sep == ',') fputc('"',f);
+if (wordCount <= 6)
+    {
+    fputc(lastSep, f);
+    return;
+    }
+fputc(sep,f);
+fprintf(f, "%u", el->thickStart);
+if (wordCount <= 7)
+    {
+    fputc(lastSep, f);
+    return;
+    }
+fputc(sep,f);
+fprintf(f, "%u", el->thickEnd);
+if (wordCount <= 8)
+    {
+    fputc(lastSep, f);
+    return;
+    }
+fputc(sep,f);
+if (useItemRgb)
+    fprintf(f, "%d,%d,%d", (el->itemRgb & 0xff0000) >> 16,
+        (el->itemRgb & 0xff00) >> 8, (el->itemRgb & 0xff));
+else
+    fprintf(f, "%u", el->itemRgb);
+if (wordCount <= 9)
+    {
+    fputc(lastSep, f);
+    return;
+    }
+fputc(sep,f);
+fprintf(f, "%d", el->blockCount);
+if (wordCount <= 10)
+    {
+    fputc(lastSep, f);
+    return;
+    }
+fputc(sep,f);
+if (sep == ',') fputc('{',f);
+for (i=0; i<el->blockCount; ++i)
+    {
+    fprintf(f, "%d", el->blockSizes[i]);
+    fputc(',', f);
+    }
+if (sep == ',') fputc('}',f);
+if (wordCount <= 11)
+    {
+    fputc(lastSep, f);
+    return;
+    }
+fputc(sep,f);
+if (sep == ',') fputc('{',f);
+for (i=0; i<el->blockCount; ++i)
+    {
+    fprintf(f, "%d", el->chromStarts[i]);
+    fputc(',', f);
+    }
+if (sep == ',') fputc('}',f);
+
+if (wordCount <= 12)
+    {
+    fputc(lastSep, f);
+    return;
+    }
+fputc(sep,f);
+fprintf(f, "%d", el->expCount);
+
+if (wordCount <= 13)
+    {
+    fputc(lastSep, f);
+    return;
+    }
+fputc(sep,f);
+if (sep == ',') fputc('{',f);
+for (i=0; i<el->expCount; ++i)
+    {
+    fprintf(f, "%d", el->expIds[i]);
+    fputc(',', f);
+    }
+if (sep == ',') fputc('}',f);
+
+
+if (wordCount <= 14)
+    {
+    fputc(lastSep, f);
+    return;
+    }
+fputc(sep,f);
+if (sep == ',') fputc('{',f);
+for (i=0; i<el->expCount; ++i)
+    {
+    fprintf(f, "%g", el->expScores[i]);
+    fputc(',', f);
+    }
+if (sep == ',') fputc('}',f);
+
+
+fputc(lastSep,f);
+}
+
+void bedOutputN(struct bed *el, int wordCount, FILE *f, char sep, char lastSep)
+/* Write a bed of wordCount fields. */
+{
+bedOutFlexible(el, wordCount, f, sep, lastSep, FALSE);
+}
+
+void bedOutputNitemRgb(struct bed *el, int wordCount, FILE *f,
+	char sep, char lastSep)
+/* Write a bed of wordCount fields, interpret column 9 as RGB. */
+{
+bedOutFlexible(el, wordCount, f, sep, lastSep, TRUE);
+}
+
+
+int bedTotalBlockSize(struct bed *bed)
+/* Return total size of all blocks. */
+{
+int total = 0;
+int i;
+if (bed->blockCount == 0)
+    return bed->chromEnd - bed->chromStart;
+for (i=0; i<bed->blockCount; ++i)
+    total += bed->blockSizes[i];
+return total;
+}
+
+int bedBlockSizeInRange(struct bed *bed, int rangeStart, int rangeEnd)
+/* Get size of all parts of all exons between rangeStart and rangeEnd. */
+{
+int total = 0;
+int i;
+for (i=0; i<bed->blockCount; ++i)
+    {
+    int start = bed->chromStart + bed->chromStarts[i];
+    int end = start + bed->blockSizes[i];
+    total += positiveRangeIntersection(start, end, rangeStart, rangeEnd);
+    }
+return total;
+}
+
+int bedTotalThickBlockSize(struct bed *bed)
+/* Return total size of all thick blocks. */
+{
+return bedBlockSizeInRange(bed, bed->thickStart, bed->thickEnd);
+}
+
+int bedStartThinSize(struct bed *bed)
+/* Return total size of all blocks before thick part. */
+{
+return bedBlockSizeInRange(bed, bed->chromStart, bed->thickStart);
+}
+
+int bedEndThinSize(struct bed *bed)
+/* Return total size of all blocks after thick part. */
+{
+return bedBlockSizeInRange(bed, bed->thickEnd, bed->chromEnd);
+}
+
+struct bed *bedFromPsl(struct psl *psl)
+/* Convert a single psl to a bed structure */
+{
+struct bed *bed;
+int i, blockCount, *chromStarts, chromStart;
+
+/* A tiny bit of error checking on the psl. */
+if (psl->qStart >= psl->qEnd || psl->qEnd > psl->qSize 
+    || psl->tStart >= psl->tEnd || psl->tEnd > psl->tSize)
+    {
+    errAbort("mangled psl format for %s", psl->qName);
+    }
+
+/* Allocate bed and fill in from psl. */
+AllocVar(bed);
+bed->chrom = cloneString(psl->tName);
+bed->chromStart = bed->thickStart = chromStart = psl->tStart;
+bed->chromEnd = bed->thickEnd = psl->tEnd;
+bed->score = 1000 - 2*pslCalcMilliBad(psl, TRUE);
+if (bed->score < 0) bed->score = 0;
+bed->strand[0] = psl->strand[0];
+bed->blockCount = blockCount = psl->blockCount;
+bed->blockSizes = (int *)cloneMem(psl->blockSizes,(sizeof(int)*psl->blockCount));
+if (pslIsProtein(psl))
+    {
+    /* Convert blockSizes from protein to dna. */
+    for (i=0; i<blockCount; ++i)
+	bed->blockSizes[i] *= 3;
+    }
+bed->chromStarts = chromStarts = (int *)cloneMem(psl->tStarts, (sizeof(int)*psl->blockCount));
+bed->name = cloneString(psl->qName);
+
+/* Switch minus target strand to plus strand. */
+if (psl->strand[1] == '-')
+    {
+    int chromSize = psl->tSize;
+    reverseInts(bed->blockSizes, blockCount);
+    reverseInts(chromStarts, blockCount);
+    for (i=0; i<blockCount; ++i)
+	chromStarts[i] = chromSize - chromStarts[i] - bed->blockSizes[i];
+    if (bed->strand[0] == '-')
+	bed->strand[0] = '+';
+    else
+	bed->strand[0] = '-';
+    }
+
+/* Convert coordinates to relative. */
+for (i=0; i<blockCount; ++i)
+    chromStarts[i] -= chromStart;
+return bed;
+}
+
+void makeItBed12(struct bed *bedList, int numFields)
+/* If it's less than bed 12, make it bed 12. The numFields */
+/* param is for how many fields the bed *currently* has. */
+{
+int i = 1;
+struct bed *cur;
+for (cur = bedList; cur != NULL; cur = cur->next)
+    {
+    /* it better be bigger than bed 3. */
+    if (numFields < 4)
+	{
+	char name[50];
+	safef(name, ArraySize(name), "item.%d", i+1);
+	cur->name = cloneString(name);
+	}
+    if (numFields < 5)
+	cur->score = 1000;
+    if (numFields < 6)
+	{
+	cur->strand[0] = '?';
+	cur->strand[1] = '\0';
+	}
+    if (numFields < 8)
+	{
+	cur->thickStart = cur->chromStart;
+	cur->thickEnd = cur->chromEnd;
+	}
+    if (numFields < 9)
+	cur->itemRgb = 0;
+    if (numFields < 12)
+	{
+	cur->blockSizes = needMem(sizeof(int));
+	cur->chromStarts = needMem(sizeof(int));
+	cur->blockCount = 1;
+	cur->chromStarts[0] = 0;
+	cur->blockSizes[0] = cur->chromEnd - cur->chromStart;
+	}
+    i++;
+    }
+}
+
+struct bed *lmCloneBed(struct bed *bed, struct lm *lm)
+/* Make a copy of bed in local memory. */
+{
+struct bed *newBed;
+if (bed == NULL)
+    return NULL;
+lmAllocVar(lm, newBed);
+newBed->chrom = lmCloneString(lm, bed->chrom);
+newBed->chromStart = bed->chromStart;
+newBed->chromEnd = bed->chromEnd;
+newBed->name = lmCloneString(lm, bed->name);
+newBed->score = bed->score;
+strncpy(newBed->strand, bed->strand, sizeof(bed->strand));
+newBed->thickStart = bed->thickStart;
+newBed->thickEnd = bed->thickEnd;
+newBed->itemRgb = bed->itemRgb;
+newBed->blockCount = bed->blockCount;
+if (bed->blockCount > 0)
+    {
+    newBed->blockSizes = lmCloneMem(lm, bed->blockSizes, 
+    	sizeof(bed->blockSizes[0]) * bed->blockCount);
+    newBed->chromStarts = lmCloneMem(lm, bed->chromStarts, 
+    	sizeof(bed->chromStarts[0]) * bed->blockCount);
+    }
+newBed->expCount = bed->expCount;
+if (bed->expCount > 0)
+    {
+    newBed->expIds = lmCloneMem(lm, bed->expIds, 
+    	sizeof(bed->expIds[0]) * bed->expCount);
+    newBed->expScores = lmCloneMem(lm, bed->expScores, 
+    	sizeof(bed->expScores[0]) * bed->expCount);
+    }
+return(newBed);
+}
+
+
+struct bed *cloneBed(struct bed *bed)
+/* Make an all-newly-allocated copy of a single bed record. */
+{
+struct bed *newBed;
+if (bed == NULL)
+    return NULL;
+AllocVar(newBed);
+newBed->chrom = cloneString(bed->chrom);
+newBed->chromStart = bed->chromStart;
+newBed->chromEnd = bed->chromEnd;
+newBed->name = cloneString(bed->name);
+newBed->score = bed->score;
+strncpy(newBed->strand, bed->strand, sizeof(bed->strand));
+newBed->thickStart = bed->thickStart;
+newBed->thickEnd = bed->thickEnd;
+newBed->itemRgb = bed->itemRgb;
+newBed->blockCount = bed->blockCount;
+if (bed->blockCount > 0)
+    {
+    newBed->blockSizes = needMem(sizeof(int) * bed->blockCount);
+    memcpy(newBed->blockSizes, bed->blockSizes,
+	   sizeof(int) * bed->blockCount);
+    newBed->chromStarts = needMem(sizeof(int) * bed->blockCount);
+    memcpy(newBed->chromStarts, bed->chromStarts,
+	   sizeof(int) * bed->blockCount);
+    }
+newBed->expCount = bed->expCount;
+if (bed->expCount > 0)
+    {
+    newBed->expIds = needMem(sizeof(int) * bed->expCount);
+    memcpy(newBed->expIds, bed->expIds,
+	   sizeof(int) * bed->expCount);
+    newBed->expScores = needMem(sizeof(float) * bed->expCount);
+    memcpy(newBed->expScores, bed->expScores,
+	   sizeof(float) * bed->expCount);
+    }
+return(newBed);
+}
+
+
+struct bed *cloneBedList(struct bed *bedList)
+/* Make an all-newly-allocated list copied from bed. */
+{
+struct bed *bedListOut = NULL, *bed=NULL;
+
+for (bed=bedList;  bed != NULL;  bed=bed->next)
+    {
+    struct bed *newBed = cloneBed(bed);
+    slAddHead(&bedListOut, newBed);
+    }
+
+slReverse(&bedListOut);
+return bedListOut;
+}
+
+struct bed *bedListNextDifferentChrom(struct bed *bedList)
+/* Return next bed in list that is from a different chrom than the start of the list. */
+{
+char *firstChrom = bedList->chrom;
+struct bed *bed;
+for (bed = bedList->next; bed != NULL; bed = bed->next)
+    if (!sameString(firstChrom, bed->chrom))
+        break;
+return bed;
+}
+
+struct bed *bedCommaInN(char **pS, struct bed *ret, int fieldCount)
+/* Create a bed out of a comma separated string looking for fieldCount
+ * fields. This will fill in ret if non-null, otherwise will return a
+ * new bed */
+{
+char *s = *pS;
+int i;
+
+if (ret == NULL)
+    AllocVar(ret);
+ret->chrom = sqlStringComma(&s);
+ret->chromStart = sqlUnsignedComma(&s);
+ret->chromEnd = sqlUnsignedComma(&s);
+if (fieldCount > 3)
+    ret->name = sqlStringComma(&s);
+if (fieldCount > 4)
+    ret->score = sqlUnsignedComma(&s);
+if (fieldCount > 5)
+    sqlFixedStringComma(&s, ret->strand, sizeof(ret->strand));
+if (fieldCount > 6)
+    ret->thickStart = sqlUnsignedComma(&s);
+else
+    ret->thickStart = ret->chromStart;
+if (fieldCount > 7)
+    ret->thickEnd = sqlUnsignedComma(&s);
+else
+     ret->thickEnd = ret->chromEnd;
+if (fieldCount > 8)
+    ret->itemRgb = sqlUnsignedComma(&s);
+if (fieldCount > 9)
+    ret->blockCount = sqlUnsignedComma(&s);
+if (fieldCount > 10)
+    {
+    s = sqlEatChar(s, '{');
+    AllocArray(ret->blockSizes, ret->blockCount);
+    for (i=0; i<ret->blockCount; ++i)
+	{
+	ret->blockSizes[i] = sqlSignedComma(&s);
+	}
+    s = sqlEatChar(s, '}');
+    s = sqlEatChar(s, ',');
+    }
+if(fieldCount > 11)
+    {
+    s = sqlEatChar(s, '{');
+    AllocArray(ret->chromStarts, ret->blockCount);
+    for (i=0; i<ret->blockCount; ++i)
+	{
+	ret->chromStarts[i] = sqlSignedComma(&s);
+	}
+    s = sqlEatChar(s, '}');
+    s = sqlEatChar(s, ',');
+    }
+if (fieldCount > 12)
+    ret->expCount = sqlSignedComma(&s);
+if (fieldCount > 13)
+    {
+    s = sqlEatChar(s, '{');
+    AllocArray(ret->expIds, ret->expCount);
+    for (i=0; i<ret->expCount; ++i)
+	{
+	ret->expIds[i] = sqlSignedComma(&s);
+	}
+    s = sqlEatChar(s, '}');
+    s = sqlEatChar(s, ',');
+    }
+if (fieldCount > 14)
+    {
+    s = sqlEatChar(s, '{');
+    AllocArray(ret->expScores, ret->expCount);
+    for (i=0; i<ret->expCount; ++i)
+	{
+	ret->expScores[i] = sqlFloatComma(&s);
+	}
+    s = sqlEatChar(s, '}');
+    s = sqlEatChar(s, ',');
+    }
+*pS = s;
+return ret;
+}
+
+struct hash *readBedToBinKeeper(char *sizeFileName, char *bedFileName, int wordCount)
+/* Read a list of beds and return results in hash of binKeeper structure for fast query
+ * See also bedsIntoKeeperHash, which takes the beds read into a list already, but
+ * dispenses with the need for the sizeFile. */
+{
+struct binKeeper *bk; 
+struct bed *bed;
+struct lineFile *lf = lineFileOpen(sizeFileName, TRUE);
+struct lineFile *bf = lineFileOpen(bedFileName , TRUE);
+struct hash *hash = newHash(0);
+char *chromRow[2];
+char *row[3] ;
+
+assert (wordCount == 3);
+while (lineFileRow(lf, chromRow))
+    {
+    char *name = chromRow[0];
+    int size = lineFileNeedNum(lf, chromRow, 1);
+
+    if (hashLookup(hash, name) != NULL)
+        warn("Duplicate %s, ignoring all but first\n", name);
+    else
+        {
+        bk = binKeeperNew(0, size);
+        assert(size > 1);
+	hashAdd(hash, name, bk);
+        }
+    }
+while (lineFileNextRow(bf, row, ArraySize(row)))
+    {
+    bed = bedLoadN(row, wordCount);
+    bk = hashMustFindVal(hash, bed->chrom);
+    binKeeperAdd(bk, bed->chromStart, bed->chromEnd, bed);
+    }
+lineFileClose(&bf);
+lineFileClose(&lf);
+return hash;
+}
+
+int bedParseRgb(char *itemRgb)
+/*      parse a string: "r,g,b" into three unsigned char values
+        returned as 24 bit number, or -1 for failure */
+{
+char dupe[64];
+int wordCount;
+char *row[4];
+
+strncpy(dupe, itemRgb, sizeof(dupe));
+wordCount = chopString(dupe, ",", row, ArraySize(row));
+
+if ((wordCount != 3) || (!isdigit(row[0][0]) ||
+    !isdigit(row[1][0]) || !isdigit(row[2][0])))
+        return (-1);
+
+return ( ((atoi(row[0]) & 0xff) << 16) |
+        ((atoi(row[1]) & 0xff) << 8) |
+        (atoi(row[2]) & 0xff) );
+}
+
+long long bedTotalSize(struct bed *bedList)
+/* Add together sizes of all beds in list. */
+{
+long long total=0;
+struct bed *bed;
+for (bed = bedList; bed != NULL; bed = bed->next)
+    total += (bed->chromEnd - bed->chromStart);
+return total;
+}
+
+void bedIntoRangeTree(struct bed *bed, struct rbTree *rangeTree)
+/* Add all blocks in bed to range tree.  For beds without blocks,
+ * add entire bed. */
+{
+int i;
+if (bed->blockCount == 0)
+    rangeTreeAdd(rangeTree, bed->chromStart, bed->chromEnd);
+else
+    {
+    for (i=0; i < bed->blockCount; ++i)
+	{
+	int start = bed->chromStart + bed->chromStarts[i];
+	int end = start + bed->blockSizes[i];
+	rangeTreeAdd(rangeTree, start, end);
+	}
+    }
+}
+
+struct rbTree *bedToRangeTree(struct bed *bed)
+/* Convert bed into a range tree. */
+{
+struct rbTree *rangeTree = rangeTreeNew();
+bedIntoRangeTree(bed, rangeTree);
+return rangeTree;
+}
+
+int bedRangeTreeOverlap(struct bed *bed, struct rbTree *rangeTree)
+/* Return number of bases bed overlaps with rangeTree. */
+{
+int totalOverlap = 0;
+if (bed->blockCount == 0)
+    totalOverlap = rangeTreeOverlapSize(rangeTree, bed->chromStart, bed->chromEnd);
+else
+    {
+    int i;
+    for (i=0; i < bed->blockCount; ++i)
+	{
+	int start = bed->chromStart + bed->chromStarts[i];
+	int end = start + bed->blockSizes[i];
+	totalOverlap += rangeTreeOverlapSize(rangeTree, start, end);
+	}
+    }
+return totalOverlap;
+}
+
+int bedSameStrandOverlap(struct bed *a, struct bed *b)
+/* Return amount of block-level overlap on same strand between a and b */
+{
+/* Make sure on same strand, chromosome, and that overlap
+ * at the non-block level. */
+if (a->strand[0] != b->strand[0])
+    return 0;
+if (!sameString(a->chrom, b->chrom))
+    return 0;
+int outerOverlap = rangeIntersection(a->chromStart, a->chromEnd, 
+	b->chromStart, b->chromEnd);
+if (outerOverlap <= 0)
+    return 0;
+
+/* If both beds are non-blocked then we're pretty much done. */
+if (a->blockCount == 0 && b->blockCount == 0)
+    return outerOverlap;
+
+/* Otherwise make up a range tree containing regions covered by a,
+ * and figure out how much b overlaps it.. */
+struct rbTree *rangeTree = bedToRangeTree(a);
+int overlap = bedRangeTreeOverlap(b, rangeTree);
+
+/* Clean up and return result. */
+rangeTreeFree(&rangeTree);
+return overlap;
+}
+
+boolean bedExactMatch(struct bed *oldBed, struct bed *newBed)
+/* Return TRUE if it's an exact match. */
+{
+boolean oldCoding = (oldBed->thickStart != oldBed->thickEnd);
+boolean newCoding = (newBed->thickStart != newBed->thickEnd);
+
+if (oldCoding != newCoding)
+    return FALSE;
+/* non-coding bed's have different standards for what exactly
+ * goes into these fields.  The standard just says they should
+ * be equal */
+if (oldCoding && ((oldBed->thickStart != newBed->thickStart) ||
+    (oldBed->thickEnd != newBed->thickEnd)))
+    return FALSE;
+if (oldBed->blockCount != newBed->blockCount)
+    return FALSE;
+int oldSize = bedTotalBlockSize(oldBed);
+int newSize = bedTotalBlockSize(newBed);
+int overlap = bedSameStrandOverlap(oldBed, newBed);
+return  (oldSize == newSize && oldSize == overlap);
+}
+
+boolean bedCompatibleExtension(struct bed *oldBed, struct bed *newBed)
+/* Return TRUE if newBed is a compatible extension of oldBed, meaning
+ * all internal exons and all introns of old bed are contained, in the 
+ * same order in the new bed. */
+{
+/* New bed must have at least as many exons as old bed... */
+if (oldBed->blockCount > newBed->blockCount)
+    return FALSE;
+
+/* New bed must also must also encompass old bed. */
+if (newBed->chromStart > oldBed->chromStart)
+    return FALSE;
+if (newBed->chromEnd < oldBed->chromEnd)
+    return FALSE;
+
+/* Look for an exact match */
+int oldSize = bedTotalBlockSize(oldBed);
+int newSize = bedTotalBlockSize(newBed);
+int overlap = bedSameStrandOverlap(oldBed, newBed);
+if (oldSize == newSize && oldSize == overlap)
+    return TRUE;
+
+/* If overlap is smaller than old size then we can't be a superset. */
+if (overlap < oldSize)
+    return FALSE;
+
+/* If we're a single exon bed then we're done. */
+if (oldBed->blockCount <= 1)
+    return TRUE;
+
+/* Otherwise we look for first intron start in old bed, and then
+ * flip through new bed until we find an intron that starts at the
+ * same place. */
+int oldFirstIntronStart = oldBed->chromStart + oldBed->chromStarts[0] + oldBed->blockSizes[0];
+int newLastBlock = newBed->blockCount-1, oldLastBlock = oldBed->blockCount-1;
+int newIx, oldIx;
+for (newIx=0; newIx < newLastBlock; ++newIx)
+    {
+    int iStartNew = newBed->chromStart + newBed->chromStarts[newIx] + newBed->blockSizes[newIx];
+    if (iStartNew == oldFirstIntronStart)
+        break;
+    }
+if (newIx == newLastBlock)
+    return FALSE;
+
+/* Now we go through all introns in old bed, and make sure they match. */
+for (oldIx=0; oldIx < oldLastBlock; ++oldIx, ++newIx)
+    {
+    int iStartOld = oldBed->chromStart + oldBed->chromStarts[oldIx] + oldBed->blockSizes[oldIx];
+    int iEndOld = oldBed->chromStart + oldBed->chromStarts[oldIx+1];
+    int iStartNew = newBed->chromStart + newBed->chromStarts[newIx] + newBed->blockSizes[newIx];
+    int iEndNew = newBed->chromStart + newBed->chromStarts[newIx+1];
+    if (iStartOld != iStartNew || iEndOld != iEndNew)
+        return FALSE;
+    }
+
+/* Finally, make sure that the new bed doesn't contain any introns that overlap with the
+ * last exon of the old bed */
+for(; newIx < newLastBlock; ++newIx)
+    {
+    int iStartNew = newBed->chromStart + newBed->chromStarts[newIx] + newBed->blockSizes[newIx];
+    if (iStartNew < oldBed->chromEnd)
+        return FALSE;
+    else if (iStartNew >= oldBed->chromEnd)
+        break;
+    }
+
+return TRUE;
+}
+
+struct bed3 *bed3New(char *chrom, int start, int end)
+/* Make new bed3. */
+{
+struct bed3 *bed;
+AllocVar(bed);
+bed->chrom = cloneString(chrom);
+bed->chromStart = start;
+bed->chromEnd = end;
+return bed;
+}
+
+struct bed *bedThickOnly(struct bed *in)
+/* Return a bed that only has the thick part. (Which is usually the CDS). */
+{
+if (in->thickStart >= in->thickEnd)
+     return NULL;
+if (in->expCount != 0 || in->expIds != NULL || in->expScores != NULL)
+   errAbort("Sorry, bedThickOnly only works on beds with up to 12 fields.");
+
+/* Allocate output, and fill in simple fields. */
+struct bed *out;
+AllocVar(out);
+out->chrom = cloneString(in->chrom);
+out->chromStart = out->thickStart = in->thickStart;
+out->chromEnd = out->thickEnd = in->thickEnd;
+out->name = cloneString(in->name);
+out->strand[0] = in->strand[0];
+out->score = in->score;
+out->itemRgb = in->itemRgb;
+
+/* If need be fill in blocks. */
+if (in->blockCount > 0)
+   {
+   /* Count up blocks inside CDS. */
+   int i;
+   int outBlockCount = 0;
+   for (i=0; i<in->blockCount; ++i)
+       {
+       int start = in->chromStart + in->chromStarts[i];
+       int end = start + in->blockSizes[i];
+       if (start < in->thickStart) start = in->thickStart;
+       if (end > in->thickEnd) end = in->thickEnd;
+       if (start < end)
+           outBlockCount += 1;
+	}
+
+    /* This trivieal case shouldn't happen, but just in case, we deal with it. */
+    if (outBlockCount == 0)
+        {
+	freeMem(out);
+	return NULL;
+	}
+
+    /* Allocate block arrays for output. */
+    out->blockCount = outBlockCount;
+    AllocArray(out->chromStarts, outBlockCount);
+    AllocArray(out->blockSizes, outBlockCount);
+
+    /* Scan through input one more time, copying to out. */
+    int outBlockIx = 0;
+    for (i=0; i<in->blockCount; ++i)
+	{
+	int start = in->chromStart + in->chromStarts[i];
+	int end = start + in->blockSizes[i];
+	if (start < in->thickStart) start = in->thickStart;
+	if (end > in->thickEnd) end = in->thickEnd;
+	if (start < end)
+	    {
+	    out->chromStarts[outBlockIx] = start - out->chromStart;
+	    out->blockSizes[outBlockIx] = end - start;
+	    outBlockIx += 1;
+	    }
+	}
+    }
+return out;
+}
+
+struct bed *bedThickOnlyList(struct bed *inList)
+/* Return a list of beds that only are the thick part of input. */
+{
+struct bed *outList = NULL, *out, *in;
+for (in = inList; in != NULL; in = in->next)
+    {
+    if ((out = bedThickOnly(in)) != NULL)
+        slAddHead(&outList, out);
+    }
+slReverse(&outList);
+return outList;
+}
+
+char *bedAsDef(int bedFieldCount, int totalFieldCount)
+/* Return an autoSql definition for a bed of given number of fields. 
+ * Normally totalFieldCount is equal to bedFieldCount.  If there are extra
+ * fields they are just given the names field16, field17, etc and type string. */
+{
+if (bedFieldCount < 3 || bedFieldCount > 15)
+    errAbort("bedFieldCount is %d, but must be between %d and %d in bedAsDef", bedFieldCount, 3, 15);
+struct dyString *dy = dyStringNew(0);
+dyStringAppend(dy, 
+    "table bed\n"
+    "\"Browser Extensible Data\"\n"
+    "   (\n"
+    "   string chrom;       \"Reference sequence chromosome or scaffold\"\n"
+    "   uint   chromStart;  \"Start position in chromosome\"\n"
+    "   uint   chromEnd;    \"End position in chromosome\"\n"
+    );
+if (bedFieldCount >= 4)
+    dyStringAppend(dy, "   string name;        \"Name of item.\"\n");
+if (bedFieldCount >= 5)
+    dyStringAppend(dy, "   uint score;          \"Score (0-1000)\"\n");
+if (bedFieldCount >= 6)
+    dyStringAppend(dy, "   char[1] strand;     \"+ or - for strand\"\n");
+if (bedFieldCount >= 7)
+    dyStringAppend(dy, "   uint thickStart;   \"Start of where display should be thick (start codon)\"\n");
+if (bedFieldCount >= 8)
+    dyStringAppend(dy, "   uint thickEnd;     \"End of where display should be thick (stop codon)\"\n");
+if (bedFieldCount >= 9)
+    dyStringAppend(dy, "   uint reserved;     \"Used as itemRgb as of 2004-11-22\"\n");
+if (bedFieldCount >= 10)
+    dyStringAppend(dy, "   int blockCount;    \"Number of blocks\"\n");
+if (bedFieldCount >= 11)
+    dyStringAppend(dy, "   int[blockCount] blockSizes; \"Comma separated list of block sizes\"\n");
+if (bedFieldCount >= 12)
+    dyStringAppend(dy, "   int[blockCount] chromStarts; \"Start positions relative to chromStart\"\n");
+if (bedFieldCount >= 13)
+    dyStringAppend(dy, "   int expCount;	\"Experiment count\"\n");
+if (bedFieldCount >= 14)
+    dyStringAppend(dy, "   int[expCount] expIds;	\"Comma separated list of experiment ids. Always 0,1,2,3....\"\n");
+if (bedFieldCount >= 15)
+    dyStringAppend(dy, "   float[expCount] expScores; \"Comma separated list of experiment scores.\"\n");
+int i;
+for (i=bedFieldCount+1; i<=totalFieldCount; ++i)
+    dyStringPrintf(dy, "lstring field%d;	\"Undocumented field\"\n", i+1);
+dyStringAppend(dy, "   )\n");
+return dyStringCannibalize(&dy);
+}
+
+
+boolean asCompareObjAgainstStandardBed(struct asObject *asYours, int numColumnsToCheck, boolean abortOnDifference)
+/* Compare user's .as object asYours to the standard BED.
+ * abortOnDifference specifies whether to warn or abort if they differ within the first numColumnsToCheck columns.
+ * Returns TRUE if they match. */
+{
+boolean result = FALSE;
+struct asObject *asStandard = NULL;
+if (numColumnsToCheck > 15)
+    errAbort("There are only 15 standard BED columns defined and you have asked for %d.", numColumnsToCheck);
+if (numColumnsToCheck < 3)
+    errAbort("All BED files have at least the first 3 columns the same.");
+char *asStandardText = bedAsDef(15,15);
+asStandard = asParseText(asStandardText);
+result = asCompareObjs("Yours", asYours, "BED Standard", asStandard, numColumnsToCheck, NULL, abortOnDifference);
+freeMem(asStandardText);
+asObjectFreeList(&asStandard);
+return result;
+}
+
+
+void loadAndValidateBed(char *row[], int bedFieldCount, int fieldCount, struct lineFile *lf, struct bed * bed, struct asObject *as, boolean isCt)
+/* Convert a row of strings to a bed and validate the contents.  Abort with message if invalid data. Optionally validate bedPlus via asObject.
+ * If a customTrack, then some errors are tolerated. */
+{
+int count;
+int *blockSizes = NULL;
+int *chromStarts;
+int *expIds;
+float *expScores;
+
+bed->chrom = row[0];  // note this value is not cloned for speed, callers may need to clone it.
+
+// This check is usually redundant since the caller should be checking it against actual chromInfo names
+// however hgLoadBed might not always have that info available.
+if (strlen(bed->chrom) >= BB_MAX_CHROM_STRING)  // must leave room for 0 terminator
+    lineFileAbort(lf, "chrom [%s] is too long (must not exceed %d characters)", bed->chrom, BB_MAX_CHROM_STRING - 1);
+if (strlen(bed->chrom) < 1)
+    lineFileAbort(lf, "chrom cannot be blank or empty");
+
+lineFileAllInts(lf, row, 1, &bed->chromStart, FALSE, 4, "integer", FALSE);
+
+lineFileAllInts(lf, row, 2, &bed->chromEnd, FALSE, 4, "integer", FALSE);
+
+if (bed->chromEnd < bed->chromStart)
+    lineFileAbort(lf, "chromStart after chromEnd (%u > %u)",
+    	bed->chromStart, bed->chromEnd);
+if (bedFieldCount > 3)
+    {
+    bed->name = row[3];
+    if (strlen(bed->name) > 255)
+	lineFileAbort(lf, "name [%s] is too long (must not exceed 255 characters)", bed->name);
+    if (isCt)
+	bed->name = cloneString(bed->name);
+    }
+if (bedFieldCount > 4)
+    {
+    lineFileAllInts(lf, row, 4, &bed->score, TRUE, 4, "integer", FALSE);
+    if (!isCt && (bed->score < 0 || bed->score > 1000))
+	    lineFileAbort(lf, "score (%d) must be between 0 and 1000", bed->score);
+    }
+
+if (bedFieldCount > 5)
+    {
+    if (!isCt && strlen(row[5]) > 1)
+      lineFileAbort(lf, "Expecting + or - or . in strand, found [%s]",row[5]);
+    bed->strand[0] = row[5][0];
+    bed->strand[1] = 0;
+    if (bed->strand[0] != '+' && bed->strand[0] != '-' && bed->strand[0] != '.')
+      lineFileAbort(lf, "Expecting + or - or . in strand, found [%s]",row[5]);
+    }
+if (bedFieldCount > 6)
+    lineFileAllInts(lf, row, 6, &bed->thickStart, FALSE, 4, "integer", FALSE);
+else
+    bed->thickStart = bed->chromStart;
+if (bedFieldCount > 7)
+    {
+    lineFileAllInts(lf, row, 7, &bed->thickEnd, FALSE, 4, "integer", FALSE);
+    if (bed->thickEnd < bed->thickStart)
+     lineFileAbort(lf, "thickStart after thickEnd");
+    if ((bed->thickStart != 0) &&
+     ((bed->thickStart < bed->chromStart) ||
+      (bed->thickStart > bed->chromEnd)))
+     lineFileAbort(lf,
+	 "thickStart out of range (chromStart to chromEnd, or 0 if no CDS)");
+    if ((bed->thickEnd != 0) &&
+     ((bed->thickEnd < bed->chromStart) ||
+      (bed->thickEnd > bed->chromEnd)))
+     lineFileAbort(lf,
+	 "thickEnd out of range for %s:%u-%u, thick:%u-%u (chromStart to chromEnd, or 0 if no CDS)",
+		   bed->name, bed->chromStart, bed->chromEnd,
+		   bed->thickStart, bed->thickEnd);
+    }
+else
+     bed->thickEnd = bed->chromEnd;
+
+if (bedFieldCount > 8)
+    {
+    if (strchr(row[8],','))
+	{
+	unsigned char colors[4];
+	char *saveColorString = cloneString(row[8]);
+	int numColors = lineFileAllIntsArray(lf, row, 8, colors, sizeof colors, FALSE, 1, "integer", FALSE);
+	if (numColors == 3)
+	    {
+	    bed->itemRgb = (((unsigned)colors[0]) << 2*8) | (((unsigned)colors[1]) << 1*8) | (unsigned)colors[2];
+	    }
+	else
+	    lineFileAbort(lf, "Expecting color to consist of r,g,b values from 0 to 255. Got [%s]", saveColorString);
+	freeMem(saveColorString);
+	}
+    else 
+	{
+	lineFileAllInts(lf, row, 8, &bed->itemRgb, FALSE, 4, "integer", FALSE);
+	}
+    }
+
+int tempArraySize = 1;	// How big arrays are below
+if (bedFieldCount > 9)
+    {
+    lineFileAllInts(lf, row, 9, &bed->blockCount, FALSE, 4, "integer", FALSE);
+    if (!(bed->blockCount >= 1))
+	lineFileAbort(lf, "Expecting blockCount (%d) to be 1 or more.", bed->blockCount);
+    tempArraySize = bed->blockCount;
+    }
+int tempBlockSizes[tempArraySize];
+int tempChromStarts[tempArraySize];
+int tempExpIds[tempArraySize];
+float tempExpScores[tempArraySize];
+if (bedFieldCount > 10)
+    {
+    if (isCt)
+	{
+	AllocArray(bed->blockSizes,bed->blockCount+1); // having +1 allows us to detect incorrect size
+        count = lineFileAllIntsArray(lf, row, 10, bed->blockSizes, bed->blockCount+1, TRUE, 4, "integer", TRUE);
+	blockSizes = bed->blockSizes;
+	}
+    else
+	{
+        count = lineFileAllIntsArray(lf, row, 10, tempBlockSizes, tempArraySize, TRUE, 4, "integer", TRUE);
+	blockSizes = tempBlockSizes;
+	}
+    if (count != bed->blockCount)
+	lineFileAbort(lf, "Expecting %d elements in blockSizes list, found at least %d", bed->blockCount, count);
+    int i;
+    for (i=0; i < bed->blockCount;  i++)
+	{
+        if (!(blockSizes[i] > 0))
+		lineFileAbort(lf, "BED blockSizes must be greater than 0, blockSize[%d] = %d", i, blockSizes[i]);
+	}
+    }
+if (bedFieldCount > 11)
+    {
+    int i;
+    if (isCt)
+	{
+	AllocArray(bed->chromStarts,bed->blockCount+1); // having +1 allows us to detect incorrect size
+        count = lineFileAllIntsArray(lf, row, 11, bed->chromStarts, bed->blockCount+1, TRUE, 4, "integer", TRUE);
+	chromStarts = bed->chromStarts;
+	}
+    else
+	{
+        count = lineFileAllIntsArray(lf, row, 11, tempChromStarts, tempArraySize, TRUE, 4, "integer", TRUE);
+	chromStarts = tempChromStarts;
+	}
+    if (count != bed->blockCount)
+	lineFileAbort(lf, "Expecting %d elements in chromStarts list, found at least %d", bed->blockCount, count);
+    // tell the user if they appear to be using absolute starts rather than
+    // relative... easy to forget!  Also check block order, coord ranges...
+    if (chromStarts[0] != 0)
+	lineFileAbort(lf,
+	    "BED blocks must span chromStart to chromEnd.  "
+	    "BED chromStarts[0] = %d, must be 0 so that (chromStart + "
+	    "chromStarts[0]) equals chromStart.", chromStarts[0]);
+
+    for (i=1; i < bed->blockCount;  i++)
+	{
+
+/*
+printf("%d:%d %s %s s:%d c:%u cs:%u ce:%u csI:%d bsI:%d ls:%d le:%d<BR>\n", lineIx, i, bed->chrom, bed->name, bed->score, bed->blockCount, bed->chromStart, bed->chromEnd, bed->chromStarts[i], bed->blockSizes[i], lastStart, lastEnd);
+*/
+	// extra check to give user help for a common problem
+	if (chromStarts[i]+bed->chromStart >= bed->chromEnd)
+	    {
+	    if (chromStarts[i] >= bed->chromStart)
+		lineFileAbort(lf, "BED chromStarts offsets must be relative to chromStart, "
+				  "not absolute.  Try subtracting chromStart from each offset "
+				  "in chromStarts.");
+	    else
+		lineFileAbort(lf, "BED chromStarts[i]+chromStart must be less than chromEnd.");
+	    }
+	// chrom blocks must ascend without overlap
+        if (!(chromStarts[i] >= chromStarts[i-1] + blockSizes[i-1]))
+		lineFileAbort(lf, "BED blocks must be in ascending order without overlap. Blocks %d and %d overlap.", i-1, i);
+	}
+
+    // last block-end must match chromEnd
+    i = bed->blockCount-1;
+    if ((bed->chromStart + chromStarts[i] + blockSizes[i]) != bed->chromEnd)
+	{
+	lineFileAbort(lf, "BED blocks must span chromStart to chromEnd.  (chromStart + "
+			  "chromStarts[last] + blockSizes[last]) must equal chromEnd.");
+	}
+    }
+
+if (bedFieldCount > 12)
+    // get the microarray/colored-exon fields
+    {
+    lineFileAllInts(lf, row, 12, &bed->expCount, TRUE, 4, "integer", TRUE);
+    if (!(bed->expCount >= 1))
+	lineFileAbort(lf, "Expecting expCount (%d) to be 1 or more.", bed->expCount);
+    if (isCt)
+	{
+	AllocArray(bed->expIds,bed->expCount+1); // having +1 allows us to detect incorrect size
+        count = lineFileAllIntsArray(lf, row, 13, bed->expIds, bed->expCount+1, TRUE, 4, "integer", TRUE);
+	expIds = bed->expIds;
+	}
+    else
+	{
+        count = lineFileAllIntsArray(lf, row, 13, tempExpIds, tempArraySize, TRUE, 4, "integer", TRUE);
+	expIds = tempExpIds;
+	}
+    if (count != bed->expCount)
+	lineFileAbort(lf, "expecting %d elements in expIds list (bed field 14)", bed->expCount);
+    if (bedFieldCount == 15)
+	{
+	if (isCt)
+	    {
+	    sqlFloatDynamicArray(row[14], &bed->expScores, &count);
+	    expScores = bed->expScores;
+	    }
+	else
+	    {
+	    count = sqlFloatArray(row[14], tempExpScores, tempArraySize);
+	    expScores = tempExpScores;
+	    }
+	if (count != bed->expCount)
+	    lineFileAbort(lf, "expecting %d elements in expScores list (bed field 15)", bed->expCount);
+	}
+    }
+
+/* Check bedPlus fields are formatted right. */
+/* This could form the basis of an .as-validator independent of BED. I suppose it could go in asParse.c */
+if (as)
+    {
+    struct hash* linkHash = NULL;
+    /* Validate as-fields */
+    struct asColumn *asCol = NULL;
+    asCol = as->columnList;
+    int i;
+    // Pre-scan ALL fields for linked fields
+    for (i=0; i<fieldCount; ++i)
+	{
+	enum asTypes type = asCol->lowType->type;
+	if (! (asCol->isList || asCol->isArray))
+	    {
+	    if (asTypesIsInt(type))
+		{
+		if (asCol->isSizeLink) // save the field value and index for later use in validating a list size.
+		    {
+		    int listSize = 0;  // big enough to hold the list count
+		    lineFileAllInts(lf, row, i, &listSize, TRUE, 4, "integer", TRUE);
+		    if (!linkHash)
+			linkHash = newHash(4);
+		    hashAddInt(linkHash, asCol->name, listSize);
+		    }
+		}
+	    }
+	asCol = asCol->next;
+	}    
+    /* Validate bed-plus fields */
+    asCol = slElementFromIx(as->columnList, bedFieldCount);
+    for (i=bedFieldCount; i<fieldCount; ++i)
+	{
+	enum asTypes type = asCol->lowType->type;
+	if (! (asCol->isList || asCol->isArray))
+	    {
+	    if (asTypesIsInt(type))
+		lineFileAllInts(lf, row, i, NULL, !asTypesIsUnsigned(type), asTypesIntSize(type), asTypesIntSizeDescription(type), FALSE);
+	    else if (asTypesIsFloating(type))
+		lineFileNeedDouble(lf, row, i);
+	    else if (type == t_string)
+		{
+		if (strlen(row[i]) > 255)
+		    lineFileAbort(lf, "expecting length (%llu) of string (%s) not to exceed 255 in field %s", (unsigned long long)strlen(row[i]), row[i], asCol->name);
+		}
+	    }
+	else if (asCol->isList)
+	    {
+	    if (asTypesIsInt(type))
+		{
+		count = lineFileAllIntsArray(lf, row, i, NULL, 1024,
+		    !asTypesIsUnsigned(type), asTypesIntSize(type), asTypesIntSizeDescription(type), FALSE);
+		if (asCol->fixedSize > 0)
+		    {
+		    if (asCol->fixedSize != count)
+			lineFileAbort(lf, "expecting %d elements in %s list, found %d", asCol->fixedSize, asCol->name, count);
+		    }
+		else
+		    {
+		    if (!linkHash)
+			lineFileAbort(lf, "linked field %s was not found; it is required for determining listSize of %s"
+			    , asCol->linkedSizeName, asCol->name);
+		    int listSize = hashIntValDefault(linkHash, asCol->linkedSizeName, -1);
+		    if (listSize == -1)
+			lineFileAbort(lf, "linked field %s was not found; it is required for determining listSize of %s"
+			    , asCol->linkedSizeName, asCol->name);
+		    if (!(listSize >= 1))
+			lineFileAbort(lf, "invalid list size %d for list %s must be 1 or greater, empty lists are not allowed", listSize, asCol->name);
+		    if (!(listSize == count))
+			lineFileAbort(lf, "expecting %d elements in %s list, found %d", listSize, asCol->name, count);
+		    }
+		}
+	    }
+	asCol = asCol->next;
+	}
+    hashFree(&linkHash);
+    }
+
+}
+
+struct bed3 *bed3LoadAll(char *fileName)
+/* Load three columns from file as bed3. */
+{
+struct lineFile *lf = lineFileOpen(fileName, TRUE);
+char *row[3];
+struct bed3 *list = NULL, *el;
+while (lineFileRow(lf, row))
+    {
+    AllocVar(el);
+    el->chrom = cloneString(row[0]);
+    el->chromStart = sqlUnsigned(row[1]);
+    el->chromEnd = sqlUnsigned(row[2]);
+    slAddHead(&list, el);
+    }
+lineFileClose(&lf);
+slReverse(&list);
+return list;
+}
+
+void bed3Free(struct bed3 **pBed)
+/* Free up bed3 */
+{
+struct bed3 *bed = *pBed;
+if (bed != NULL)
+    {
+    freeMem(bed->chrom);
+    freez(pBed);
+    }
+}
+
+void bed3FreeList(struct bed3 **pList)
+/* Free a list of dynamically allocated bed3's */
+{
+struct bed3 *el, *next;
+
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    bed3Free(&el);
+    }
+*pList = NULL;
+}
+
+long long bed3TotalSize(struct bed3 *bedList)
+/* Return sum of chromEnd-chromStart. */
+{
+long long sum = 0;
+struct bed3 *bed;
+for (bed = bedList; bed != NULL; bed = bed->next)
+    sum += bed->chromEnd - bed->chromStart;
+return sum;
+}
+
+struct bed4 *bed4New(char *chrom, int start, int end, char *name)
+/* Make new bed4. */
+{
+struct bed4 *bed;
+AllocVar(bed);
+bed->chrom = cloneString(chrom);
+bed->chromStart = start;
+bed->chromEnd = end;
+bed->name = cloneString(name);
+return bed;
+}
+
+void bed4Free(struct bed4 **pBed)
+/* Free up bed4 */
+{
+struct bed4 *bed = *pBed;
+if (bed != NULL)
+    {
+    freeMem(bed->chrom);
+    freeMem(bed->name);
+    freez(pBed);
+    }
+}
+
+void bed4FreeList(struct bed4 **pList)
+/* Free a list of dynamically allocated bed4's */
+{
+struct bed4 *el, *next;
+
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    bed4Free(&el);
+    }
+*pList = NULL;
+}
+
diff --git a/gbtools/src/blatSrc/lib/bbiRead.c b/gbtools/src/blatSrc/lib/bbiRead.c
new file mode 100644
index 0000000..2e7188a
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/bbiRead.c
@@ -0,0 +1,797 @@
+/* bbiRead - Big Binary Indexed file.  Stuff that's common between bigWig and bigBed on the 
+ * read side. */
+
+/* Copyright (C) 2014 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "linefile.h"
+#include "hash.h"
+#include "obscure.h"
+#include "zlibFace.h"
+#include "bPlusTree.h"
+#include "hmmstats.h"
+#include "cirTree.h"
+#include "udc.h"
+#include "bbiFile.h"
+
+struct bbiZoomLevel *bbiBestZoom(struct bbiZoomLevel *levelList, int desiredReduction)
+/* Return zoom level that is the closest one that is less than or equal to 
+ * desiredReduction. */
+{
+if (desiredReduction < 0)
+   errAbort("bad value %d for desiredReduction in bbiBestZoom", desiredReduction);
+if (desiredReduction <= 1)
+    return NULL;
+int closestDiff = BIGNUM;
+struct bbiZoomLevel *closestLevel = NULL;
+struct bbiZoomLevel *level;
+
+for (level = levelList; level != NULL; level = level->next)
+    {
+    int diff = desiredReduction - level->reductionLevel;
+    if (diff >= 0 && diff < closestDiff)
+        {
+	closestDiff = diff;
+	closestLevel = level;
+	}
+    }
+return closestLevel;
+}
+
+boolean bbiFileCheckSigs(char *fileName, bits32 sig, char *typeName)
+/* check file signatures at beginning and end of file */
+{
+int fd = mustOpenFd(fileName, O_RDONLY);
+bits32 magic;
+boolean isSwapped = FALSE;
+
+// look for signature at the beginning of the file
+mustReadFd(fd, &magic, sizeof(magic));
+
+if (magic != sig)
+    {
+    magic = byteSwap32(magic);
+    isSwapped = TRUE;
+    if (magic != sig)
+        return FALSE;
+    }
+
+// look for signature at the end of the file
+mustLseek(fd, -sizeof(magic), SEEK_END);
+mustReadFd(fd, &magic, sizeof(magic));
+mustCloseFd(&fd);
+
+if (isSwapped)
+    {
+    magic = byteSwap32(magic);
+    if (magic != sig)
+        return FALSE;
+    }
+else
+    {
+    if (magic != sig)
+        return FALSE;
+    }
+
+return TRUE;
+}
+
+struct bbiFile *bbiFileOpen(char *fileName, bits32 sig, char *typeName)
+/* Open up big wig or big bed file. */
+{
+/* This code needs to agree with code in two other places currently - bigBedFileCreate,
+ * and bigWigFileCreate.  I'm thinking of refactoring to share at least between
+ * bigBedFileCreate and bigWigFileCreate.  It'd be great so it could be structured
+ * so that it could send the input in one chromosome at a time, and send in the zoom
+ * stuff only after all the chromosomes are done.  This'd potentially reduce the memory
+ * footprint by a factor of 2 or 4.  Still, for now it works. -JK */
+struct bbiFile *bbi;
+AllocVar(bbi);
+bbi->fileName = cloneString(fileName);
+struct udcFile *udc = bbi->udc = udcFileOpen(fileName, udcDefaultDir());
+
+/* Read magic number at head of file and use it to see if we are proper file type, and
+ * see if we are byte-swapped. */
+bits32 magic;
+boolean isSwapped = FALSE;
+udcMustRead(udc, &magic, sizeof(magic));
+if (magic != sig)
+    {
+    magic = byteSwap32(magic);
+    isSwapped = TRUE;
+    if (magic != sig)
+       errAbort("%s is not a %s file", fileName, typeName);
+    }
+bbi->typeSig = sig;
+bbi->isSwapped = isSwapped;
+
+/* Read rest of defined bits of header, byte swapping as needed. */
+bbi->version = udcReadBits16(udc, isSwapped);
+bbi->zoomLevels = udcReadBits16(udc, isSwapped);
+bbi->chromTreeOffset = udcReadBits64(udc, isSwapped);
+bbi->unzoomedDataOffset = udcReadBits64(udc, isSwapped);
+bbi->unzoomedIndexOffset = udcReadBits64(udc, isSwapped);
+bbi->fieldCount = udcReadBits16(udc, isSwapped);
+bbi->definedFieldCount = udcReadBits16(udc, isSwapped);
+bbi->asOffset = udcReadBits64(udc, isSwapped);
+bbi->totalSummaryOffset = udcReadBits64(udc, isSwapped);
+bbi->uncompressBufSize = udcReadBits32(udc, isSwapped);
+bbi->extensionOffset = udcReadBits64(udc, isSwapped);
+
+/* Read zoom headers. */
+int i;
+struct bbiZoomLevel *level, *levelList = NULL;
+for (i=0; i<bbi->zoomLevels; ++i)
+    {
+    AllocVar(level);
+    level->reductionLevel = udcReadBits32(udc, isSwapped);
+    level->reserved = udcReadBits32(udc, isSwapped);
+    level->dataOffset = udcReadBits64(udc, isSwapped);
+    level->indexOffset = udcReadBits64(udc, isSwapped);
+    slAddHead(&levelList, level);
+    }
+slReverse(&levelList);
+bbi->levelList = levelList;
+
+/* Deal with header extension if any. */
+if (bbi->extensionOffset != 0)
+    {
+    udcSeek(udc, bbi->extensionOffset);
+    bbi->extensionSize = udcReadBits16(udc, isSwapped);
+    bbi->extraIndexCount = udcReadBits16(udc, isSwapped);
+    bbi->extraIndexListOffset = udcReadBits64(udc, isSwapped);
+    }
+
+/* Attach B+ tree of chromosome names and ids. */
+udcSeek(udc, bbi->chromTreeOffset);
+bbi->chromBpt =  bptFileAttach(fileName, udc);
+
+return bbi;
+}
+
+void bbiFileClose(struct bbiFile **pBwf)
+/* Close down a big wig/big bed file. */
+{
+struct bbiFile *bwf = *pBwf;
+if (bwf != NULL)
+    {
+    cirTreeFileDetach(&bwf->unzoomedCir);
+    slFreeList(&bwf->levelList);
+    slFreeList(&bwf->levelList);
+    bptFileDetach(&bwf->chromBpt);
+    udcFileClose(&bwf->udc);
+    freeMem(bwf->fileName);
+    freez(pBwf);
+    }
+}
+
+static void chromIdSizeHandleSwapped(boolean isSwapped, struct bbiChromIdSize *idSize)
+/* Swap bytes in chromosome Id and Size as needed. */
+{
+if (isSwapped)
+    {
+    idSize->chromId = byteSwap32(idSize->chromId);
+    idSize->chromSize = byteSwap32(idSize->chromSize);
+    }
+}
+
+
+struct fileOffsetSize *bbiOverlappingBlocks(struct bbiFile *bbi, struct cirTreeFile *ctf,
+	char *chrom, bits32 start, bits32 end, bits32 *retChromId)
+/* Fetch list of file blocks that contain items overlapping chromosome range. */
+{
+struct bbiChromIdSize idSize;
+if (!bptFileFind(bbi->chromBpt, chrom, strlen(chrom), &idSize, sizeof(idSize)))
+    return NULL;
+chromIdSizeHandleSwapped(bbi->isSwapped, &idSize);
+if (retChromId != NULL)
+    *retChromId = idSize.chromId;
+return cirTreeFindOverlappingBlocks(ctf, idSize.chromId, start, end);
+}
+
+struct chromNameCallbackContext
+/* Some stuff that the bPlusTree traverser needs for context. */
+    {
+    struct bbiChromInfo *list;		/* The list we are building. */
+    boolean isSwapped;			/* Need to byte-swap things? */
+    };
+
+static void chromNameCallback(void *context, void *key, int keySize, void *val, int valSize)
+/* Callback that captures chromInfo from bPlusTree. */
+{
+struct chromNameCallbackContext *c = context;
+struct bbiChromInfo *info;
+struct bbiChromIdSize *idSize = val;
+assert(valSize == sizeof(*idSize));
+chromIdSizeHandleSwapped(c->isSwapped, idSize);
+AllocVar(info);
+info->name = cloneStringZ(key, keySize);
+info->id = idSize->chromId;
+info->size = idSize->chromSize;
+slAddHead(&c->list, info);
+}
+
+struct bbiChromInfo *bbiChromList(struct bbiFile *bbi)
+/* Return list of chromosomes. */
+{
+struct chromNameCallbackContext context;
+context.list = NULL;
+context.isSwapped = bbi->isSwapped;
+bptFileTraverse(bbi->chromBpt, &context, chromNameCallback);
+slReverse(&context.list);
+return context.list;
+}
+
+bits32 bbiChromSize(struct bbiFile *bbi, char *chrom)
+/* Return chromosome size, or 0 if no such chromosome in file. */
+{
+struct bbiChromIdSize idSize;
+if (!bptFileFind(bbi->chromBpt, chrom, strlen(chrom), &idSize, sizeof(idSize)))
+    return 0;
+chromIdSizeHandleSwapped(bbi->isSwapped, &idSize);
+return idSize.chromSize;
+}
+
+void bbiChromInfoFree(struct bbiChromInfo **pInfo)
+/* Free up one chromInfo */
+{
+struct bbiChromInfo *info = *pInfo;
+if (info != NULL)
+    {
+    freeMem(info->name);
+    freez(pInfo);
+    }
+}
+
+void bbiChromInfoFreeList(struct bbiChromInfo **pList)
+/* Free a list of dynamically allocated bbiChromInfo's */
+{
+struct bbiChromInfo *el, *next;
+
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    bbiChromInfoFree(&el);
+    }
+*pList = NULL;
+}
+
+void bbiAttachUnzoomedCir(struct bbiFile *bbi)
+/* Make sure unzoomed cir is attached. */
+{
+if (bbi->unzoomedCir == NULL)
+    {
+    udcSeek(bbi->udc, bbi->unzoomedIndexOffset);
+    bbi->unzoomedCir = cirTreeFileAttach(bbi->fileName, bbi->udc);
+    }
+}
+
+enum bbiSummaryType bbiSummaryTypeFromString(char *string)
+/* Return summary type given a descriptive string. */
+{
+if (sameWord(string, "mean") || sameWord(string, "average"))
+    return bbiSumMean;
+else if (sameWord(string, "max") || sameWord(string, "maximum"))
+    return bbiSumMax;
+else if (sameWord(string, "min") || sameWord(string, "minimum"))
+    return bbiSumMin;
+else if (sameWord(string, "coverage") || sameWord(string, "dataCoverage"))
+    return bbiSumCoverage;
+else if (sameWord(string, "std"))
+    return bbiSumStandardDeviation;
+else
+    {
+    errAbort("Unknown bbiSummaryType %s", string);
+    return bbiSumMean;	/* Keep compiler quiet. */
+    }
+}
+
+char *bbiSummaryTypeToString(enum bbiSummaryType type)
+/* Convert summary type from enum to string representation. */
+{
+switch (type)
+    {
+    case bbiSumMean:
+        return "mean";
+    case bbiSumMax:
+        return "max";
+    case bbiSumMin:
+        return "min";
+    case bbiSumCoverage:
+        return "coverage";
+    case bbiSumStandardDeviation:
+        return "std";
+    default:
+	errAbort("Unknown bbiSummaryType %d", (int)type);
+	return NULL;
+    }
+}
+
+#ifdef UNUSED
+static void bbiSummaryOnDiskRead(struct bbiFile *bbi, struct bbiSummaryOnDisk *sum)
+/* Read in summary from file. */
+{
+struct udcFile *udc = bbi->udc;
+boolean isSwapped = bbi->isSwapped;
+sum->chromId = udcReadBits32(udc, isSwapped);
+sum->start = udcReadBits32(udc, isSwapped);
+sum->end = udcReadBits32(udc, isSwapped);
+sum->validCount = udcReadBits32(udc, isSwapped);
+// looks like a bug to me, these should call udcReadFloat() 
+udcMustReadOne(udc, sum->minVal);
+udcMustReadOne(udc, sum->maxVal);
+udcMustReadOne(udc, sum->sumData);
+udcMustReadOne(udc, sum->sumSquares);
+}
+#endif /* UNUSED */
+
+static void bbiSummaryHandleSwapped(struct bbiFile *bbi, struct bbiSummaryOnDisk *in)
+/* Swap integer fields in summary as needed. */
+{
+if (bbi->isSwapped)
+    {
+    in->chromId = byteSwap32(in->chromId);
+    in->start = byteSwap32(in->start);
+    in->end = byteSwap32(in->end);
+    in->validCount = byteSwap32(in->validCount);
+    in->minVal = byteSwapFloat(in->minVal);
+    in->maxVal = byteSwapFloat(in->maxVal);
+    in->sumData = byteSwapFloat(in->sumData);
+    in->sumSquares = byteSwapFloat(in->sumSquares);
+    }
+}
+
+static struct bbiSummary *bbiSummaryFromOnDisk(struct bbiSummaryOnDisk *in)
+/* Create a bbiSummary unlinked to anything from input in onDisk format. */
+{
+struct bbiSummary *out;
+AllocVar(out);
+out->chromId = in->chromId;
+out->start = in->start;
+out->end = in->end;
+out->validCount = in->validCount;
+out->minVal = in->minVal;
+out->maxVal = in->maxVal;
+out->sumData = in->sumData;
+out->sumSquares = in->sumSquares;
+return out;
+}
+
+struct bbiSummary *bbiSummariesInRegion(struct bbiZoomLevel *zoom, struct bbiFile *bbi, 
+	int chromId, bits32 start, bits32 end)
+/* Return list of all summaries in region at given zoom level of bbiFile. */
+{
+struct bbiSummary *sumList = NULL, *sum;
+struct udcFile *udc = bbi->udc;
+udcSeek(udc, zoom->indexOffset);
+struct cirTreeFile *ctf = cirTreeFileAttach(bbi->fileName, bbi->udc);
+struct fileOffsetSize *blockList = cirTreeFindOverlappingBlocks(ctf, chromId, start, end);
+struct fileOffsetSize *block, *beforeGap, *afterGap;
+
+/* Set up for uncompression optionally. */
+char *uncompressBuf = NULL;
+if (bbi->uncompressBufSize > 0)
+    uncompressBuf = needLargeMem(bbi->uncompressBufSize);
+
+
+/* This loop is a little complicated because we merge the read requests for efficiency, but we 
+ * have to then go back through the data one unmerged block at a time. */
+for (block = blockList; block != NULL; )
+    {
+    /* Find contigious blocks and read them into mergedBuf. */
+    fileOffsetSizeFindGap(block, &beforeGap, &afterGap);
+    bits64 mergedOffset = block->offset;
+    bits64 mergedSize = beforeGap->offset + beforeGap->size - mergedOffset;
+    udcSeek(udc, mergedOffset);
+    char *mergedBuf = needLargeMem(mergedSize);
+    udcMustRead(udc, mergedBuf, mergedSize);
+    char *blockBuf = mergedBuf;
+
+    /* Loop through individual blocks within merged section. */
+    for (;block != afterGap; block = block->next)
+        {
+	/* Uncompress if necessary. */
+	char *blockPt, *blockEnd;
+	if (uncompressBuf)
+	    {
+	    blockPt = uncompressBuf;
+	    int uncSize = zUncompress(blockBuf, block->size, uncompressBuf, bbi->uncompressBufSize);
+	    blockEnd = blockPt + uncSize;
+	    }
+	else
+	    {
+	    blockPt = blockBuf;
+	    blockEnd = blockPt + block->size;
+	    }
+
+	/* Figure out bounds and number of items in block. */
+	int blockSize = blockEnd - blockPt;
+	struct bbiSummaryOnDisk *dSum;
+	int itemSize = sizeof(*dSum);
+	assert(blockSize % itemSize == 0);
+	int itemCount = blockSize / itemSize;
+
+	/* Read in items and convert to memory list format. */
+	int i;
+	for (i=0; i<itemCount; ++i)
+	    {
+	    dSum = (void *)blockPt;
+	    blockPt += sizeof(*dSum);
+	    bbiSummaryHandleSwapped(bbi, dSum);
+	    if (dSum->chromId == chromId)
+		{
+		int s = max(dSum->start, start);
+		int e = min(dSum->end, end);
+		if (s < e)
+		    {
+		    sum = bbiSummaryFromOnDisk(dSum);
+		    slAddHead(&sumList, sum);
+		    }
+		}
+	    }
+	assert(blockPt == blockEnd);
+	blockBuf += block->size;
+        }
+    freeMem(mergedBuf);
+    }
+freeMem(uncompressBuf);
+slFreeList(&blockList);
+cirTreeFileDetach(&ctf);
+slReverse(&sumList);
+return sumList;
+}
+
+static int normalizeCount(struct bbiSummaryElement *el, double countFactor, 
+    double minVal, double maxVal, double sumData, double sumSquares)
+/* normalize statistics to be based on an integer number of valid bases 
+ * Integer value is the smallest integer not less than countFactor */
+{
+bits32 validCount = ceil(countFactor);
+double normFactor = (double)validCount/countFactor;
+
+el->validCount = validCount;
+el->minVal = minVal;
+el->maxVal = maxVal;
+el->sumData = sumData * normFactor;
+el->sumSquares = sumSquares * normFactor;
+
+return validCount;
+}
+
+static bits32 bbiSummarySlice(struct bbiFile *bbi, bits32 baseStart, bits32 baseEnd, 
+	struct bbiSummary *sumList, struct bbiSummaryElement *el)
+/* Update retVal with the average value if there is any data in interval.  Return number
+ * of valid data bases in interval. */
+{
+bits32 validCount = 0;
+
+if (sumList != NULL)
+    {
+    double minVal = sumList->minVal;
+    double maxVal = sumList->maxVal;
+    double sumData = 0, sumSquares = 0;
+    double countFactor = 0.0;
+
+    struct bbiSummary *sum;
+    for (sum = sumList; sum != NULL && sum->start < baseEnd; sum = sum->next)
+	{
+	int overlap = rangeIntersection(baseStart, baseEnd, sum->start, sum->end);
+	if (overlap > 0)
+	    {
+	    double overlapFactor = (double)overlap / (sum->end - sum->start);
+	    countFactor += sum->validCount * overlapFactor;
+	    sumData += sum->sumData * overlapFactor;
+	    sumSquares += sum->sumSquares * overlapFactor;
+	    if (maxVal < sum->maxVal)
+		maxVal = sum->maxVal;
+	    if (minVal > sum->minVal)
+		minVal = sum->minVal;
+	    }
+	}
+
+    if (countFactor > 0)
+	validCount = normalizeCount(el, countFactor, minVal, maxVal, sumData, sumSquares);
+    }
+return validCount;
+}
+
+static int bbiChromId(struct bbiFile *bbi, char *chrom)
+/* Return chromosome Id */
+{
+struct bbiChromIdSize idSize;
+if (!bptFileFind(bbi->chromBpt, chrom, strlen(chrom), &idSize, sizeof(idSize)))
+    return -1;
+chromIdSizeHandleSwapped(bbi->isSwapped, &idSize);
+return idSize.chromId;
+}
+
+static boolean bbiSummaryArrayFromZoom(struct bbiZoomLevel *zoom, struct bbiFile *bbi, 
+	char *chrom, bits32 start, bits32 end,
+	int summarySize, struct bbiSummaryElement *summary)
+/* Look up region in index and get data at given zoom level.  Summarize this data
+ * in the summary array. */
+{
+boolean result = FALSE;
+int chromId = bbiChromId(bbi, chrom);
+if (chromId < 0)
+    return FALSE;
+struct bbiSummary *sum, *sumList = bbiSummariesInRegion(zoom, bbi, chromId, start, end);
+if (sumList != NULL)
+    {
+    int i;
+    bits32 baseStart = start, baseEnd;
+    bits32 baseCount = end - start;
+    sum = sumList;
+    for (i=0; i<summarySize; ++i)
+        {
+	/* Calculate end of this part of summary */
+	baseEnd = start + (bits64)baseCount*(i+1)/summarySize;
+
+        /* Advance sum to skip over parts we are no longer interested in. */
+	while (sum != NULL && sum->end <= baseStart)
+	    sum = sum->next;
+
+	if (bbiSummarySlice(bbi, baseStart, baseEnd, sum, &summary[i]))
+	    result = TRUE;
+
+	/* Next time round start where we left off. */
+	baseStart = baseEnd;
+	}
+    slFreeList(&sumList);
+    }
+return result;
+}
+
+static bits32 bbiIntervalSlice(struct bbiFile *bbi, bits32 baseStart, bits32 baseEnd, 
+	struct bbiInterval *intervalList, struct bbiSummaryElement *el)
+/* Update retVal with the average value if there is any data in interval.  Return number
+ * of valid data bases in interval. */
+{
+bits32 validCount = 0;
+
+if (intervalList != NULL)
+    {
+    double countFactor = 0;
+    struct bbiInterval *interval;
+    double sumData = 0, sumSquares = 0;
+    double minVal = intervalList->val;
+    double maxVal = intervalList->val;
+
+    for (interval = intervalList; interval != NULL && interval->start < baseEnd; 
+	    interval = interval->next)
+	{
+	int overlap = rangeIntersection(baseStart, baseEnd, interval->start, interval->end);
+	if (overlap > 0)
+	    {
+	    int intervalSize = interval->end - interval->start;
+	    double overlapFactor = (double)overlap / intervalSize;
+	    double intervalWeight = intervalSize * overlapFactor;
+	    countFactor += intervalWeight;
+	    sumData += interval->val * intervalWeight;
+	    sumSquares += interval->val * interval->val * intervalWeight;
+	    if (maxVal < interval->val)
+		maxVal = interval->val;
+	    if (minVal > interval->val)
+		minVal = interval->val;
+	    }
+	}
+
+    validCount = normalizeCount(el, countFactor, minVal, maxVal, sumData, sumSquares);
+    }
+return validCount;
+}
+
+
+static boolean bbiSummaryArrayFromFull(struct bbiFile *bbi, 
+	char *chrom, bits32 start, bits32 end, BbiFetchIntervals fetchIntervals,
+	int summarySize, struct bbiSummaryElement *summary)
+/* Summarize data, not using zoom. */
+{
+struct bbiInterval *intervalList = NULL, *interval;
+struct lm *lm = lmInit(0);
+intervalList = (*fetchIntervals)(bbi, chrom, start, end, lm);
+boolean result = FALSE;
+if (intervalList != NULL)
+    {
+    int i;
+    bits32 baseStart = start, baseEnd;
+    bits32 baseCount = end - start;
+    interval = intervalList;
+    for (i=0; i<summarySize; ++i)
+        {
+	/* Calculate end of this part of summary */
+	baseEnd = start + (bits64)baseCount*(i+1)/summarySize;
+	int end1 = baseEnd;
+	if (end1 == baseStart)
+	    end1 = baseStart+1;
+
+        /* Advance interval to skip over parts we are no longer interested in. */
+	while (interval != NULL && interval->end <= baseStart)
+	    interval = interval->next;
+
+	if (bbiIntervalSlice(bbi, baseStart, end1, interval, &summary[i]))
+	    result = TRUE;
+
+	/* Next time round start where we left off. */
+	baseStart = baseEnd;
+	}
+    }
+lmCleanup(&lm);
+return result;
+}
+
+boolean bbiSummaryArrayExtended(struct bbiFile *bbi, char *chrom, bits32 start, bits32 end,
+	BbiFetchIntervals fetchIntervals,
+	int summarySize, struct bbiSummaryElement *summary)
+/* Fill in summary with  data from indicated chromosome range in bigWig file. 
+ * Returns FALSE if no data at that position. */
+{
+boolean result = FALSE;
+
+/* Protect from bad input. */
+if (start >= end)
+    return result;
+bzero(summary, summarySize * sizeof(summary[0]));
+
+/* Figure out what size of data we want.  We actually want to get 2 data points per summary
+ * value if possible to minimize the effect of a data point being split between summary pixels. */
+bits32 baseSize = end - start; 
+int fullReduction = (baseSize/summarySize);
+int zoomLevel = fullReduction/2;
+if (zoomLevel < 0)
+    zoomLevel = 0;
+
+/* Get the closest zoom level less than what we're looking for. */
+struct bbiZoomLevel *zoom = bbiBestZoom(bbi->levelList, zoomLevel);
+if (zoom != NULL)
+    result = bbiSummaryArrayFromZoom(zoom, bbi, chrom, start, end, summarySize, summary);
+else
+    result = bbiSummaryArrayFromFull(bbi, chrom, start, end, fetchIntervals, summarySize, summary);
+return result;
+}
+
+boolean bbiSummaryArray(struct bbiFile *bbi, char *chrom, bits32 start, bits32 end,
+	BbiFetchIntervals fetchIntervals,
+	enum bbiSummaryType summaryType, int summarySize, double *summaryValues)
+/* Fill in summaryValues with  data from indicated chromosome range in bigWig file.
+ * Be sure to initialize summaryValues to a default value, which will not be touched
+ * for regions without data in file.  (Generally you want the default value to either
+ * be 0.0 or nan("") depending on the application.)  Returns FALSE if no data
+ * at that position. */
+{
+struct bbiSummaryElement *elements;
+AllocArray(elements, summarySize);
+boolean ret = bbiSummaryArrayExtended(bbi, chrom, start, end, 
+	fetchIntervals, summarySize, elements);
+if (ret)
+    {
+    int i;
+    double covFactor = (double)summarySize/(end - start);
+    for (i=0; i<summarySize; ++i)
+        {
+	struct bbiSummaryElement *el = &elements[i];
+	if (el->validCount > 0)
+	    {
+	    double val;
+	    switch (summaryType)
+		{
+		case bbiSumMean:
+		    val = el->sumData/el->validCount;
+		    break;
+		case bbiSumMax:
+		    val = el->maxVal;
+		    break;
+		case bbiSumMin:
+		    val = el->minVal;
+		    break;
+		case bbiSumCoverage:
+		    val = covFactor*el->validCount;
+		    break;
+		case bbiSumStandardDeviation:
+		    val = calcStdFromSums(el->sumData, el->sumSquares, el->validCount);
+		    break;
+		default:
+		    internalErr();
+		    val = 0.0;
+		    break;
+		}
+	    summaryValues[i] = val;
+	    }
+	}
+    }
+freeMem(elements);
+return ret;
+}
+
+struct bbiSummaryElement bbiTotalSummary(struct bbiFile *bbi)
+/* Return summary of entire file! */
+{
+struct udcFile *udc = bbi->udc;
+boolean isSwapped = bbi->isSwapped;
+struct bbiSummaryElement res;
+ZeroVar(&res);
+
+if (bbi->totalSummaryOffset != 0)
+    {
+    udcSeek(udc, bbi->totalSummaryOffset);
+    res.validCount = udcReadBits64(udc, isSwapped);
+    res.minVal = udcReadDouble(udc, isSwapped);
+    res.maxVal = udcReadDouble(udc, isSwapped);
+    res.sumData = udcReadDouble(udc, isSwapped);
+    res.sumSquares = udcReadDouble(udc, isSwapped);
+    }
+else if (bbi->version == 1)
+    /* Require version 1 so as not to have to deal with compression.  Should not happen
+     * to have NULL totalSummaryOffset for non-empty version 2+ file anyway. */
+    {
+    /* Find most extreme zoom. */
+    struct bbiZoomLevel *bestZoom = NULL, *zoom;
+    bits32 bestReduction = 0;
+    for (zoom = bbi->levelList; zoom != NULL; zoom = zoom->next)
+	{
+	if (zoom->reductionLevel > bestReduction)
+	    {
+	    bestReduction = zoom->reductionLevel;
+	    bestZoom = zoom;
+	    }
+	}
+
+    if (bestZoom != NULL)
+	{
+	udcSeek(udc, bestZoom->dataOffset);
+	bits32 zoomSectionCount = udcReadBits32(udc, isSwapped);
+	bits32 i;
+	for (i=0; i<zoomSectionCount; ++i)
+	    {
+	    /* Read, but ignore, position. */
+	    bits32 chromId, chromStart, chromEnd;
+	    chromId = udcReadBits32(udc, isSwapped);
+	    chromStart = udcReadBits32(udc, isSwapped);
+	    chromEnd = udcReadBits32(udc, isSwapped);
+
+	    /* First time through set values, rest of time add to them. */
+	    if (i == 0)
+		{
+		res.validCount = udcReadBits32(udc, isSwapped);
+		res.minVal = udcReadFloat(udc, isSwapped);
+		res.maxVal = udcReadFloat(udc, isSwapped);
+		res.sumData = udcReadFloat(udc, isSwapped);
+		res.sumSquares = udcReadFloat(udc, isSwapped);
+		}
+	    else
+		{
+		res.validCount += udcReadBits32(udc, isSwapped);
+		float minVal = udcReadFloat(udc, isSwapped);
+		if (minVal < res.minVal) res.minVal = minVal;
+		float maxVal = udcReadFloat(udc, isSwapped);
+		if (maxVal > res.maxVal) res.maxVal = maxVal;
+		res.sumData += udcReadFloat(udc, isSwapped);
+		res.sumSquares += udcReadFloat(udc, isSwapped);
+		}
+	    }
+	}
+    }
+return res;
+}
+
+time_t bbiUpdateTime(struct bbiFile *bbi)
+/* return bbi->udc->updateTime */
+{
+struct udcFile *udc = bbi->udc;
+return udcUpdateTime(udc);
+}
+
+char *bbiCachedChromLookup(struct bbiFile *bbi, int chromId, int lastChromId,
+    char *chromBuf, int chromBufSize)
+/* Return chromosome name corresponding to chromId.  Because this is a bit expensive,
+ * if you are doing this repeatedly pass in the chromId used in the previous call to
+ * this in lastChromId,  which will save it from doing the lookup again on the same
+ * chromosome.  Pass in -1 to lastChromId if this is the first time or if you can't be
+ * bothered.  The chromBufSize should be at greater or equal to bbi->keySize+1.  */
+{
+if (chromId != lastChromId)
+    bptStringKeyAtPos(bbi->chromBpt, chromId, chromBuf, chromBufSize);
+return chromBuf;
+}
+
diff --git a/gbtools/src/blatSrc/lib/bbiWrite.c b/gbtools/src/blatSrc/lib/bbiWrite.c
new file mode 100644
index 0000000..709f771
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/bbiWrite.c
@@ -0,0 +1,736 @@
+/* bbiWrite.c - Routines to help write bigWig and bigBed files. See also bbiFile.h */
+
+/* Copyright (C) 2014 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "hash.h"
+#include "linefile.h"
+#include "sqlNum.h"
+#include "zlibFace.h"
+#include "cirTree.h"
+#include "bPlusTree.h"
+#include "bbiFile.h"
+#include "obscure.h"
+
+void bbiWriteDummyHeader(FILE *f)
+/* Write out all-zero header, just to reserve space for it. */
+{
+repeatCharOut(f, 0, 64);
+}
+
+void bbiWriteDummyZooms(FILE *f)
+/* Write out zeroes to reserve space for ten zoom levels. */
+{
+repeatCharOut(f, 0, bbiMaxZoomLevels * 24);
+}
+
+void bbiSummaryElementWrite(FILE *f, struct bbiSummaryElement *sum)
+/* Write out summary element to file. */
+{
+writeOne(f, sum->validCount);
+writeOne(f, sum->minVal);
+writeOne(f, sum->maxVal);
+writeOne(f, sum->sumData);
+writeOne(f, sum->sumSquares);
+}
+
+static int bbiChromInfoCmp(const void *va, const void *vb)
+/* Sort bbiChromInfo.  Unlike most of our sorts this is single rather
+ * than double indirect. */
+{
+const struct bbiChromInfo *a = (const struct bbiChromInfo *)va;
+const struct bbiChromInfo *b = (const struct bbiChromInfo *)vb;
+return strcmp(a->name, b->name);
+}
+
+
+void bbiWriteChromInfo(struct bbiChromUsage *usageList, int blockSize, FILE *f)
+/* Write out information on chromosomes to file. */
+{
+int chromCount = slCount(usageList);
+struct bbiChromUsage *usage;
+
+/* Allocate and fill in array from list. */
+struct bbiChromInfo *chromInfoArray = NULL;
+int maxChromNameSize = 0;
+if (chromCount > 0)
+    {
+    AllocArray(chromInfoArray, chromCount);
+    int i;
+    for (i=0, usage = usageList; i<chromCount; ++i, usage = usage->next)
+	{
+	char *chromName = usage->name;
+	int len = strlen(chromName);
+	if (len > maxChromNameSize)
+	    maxChromNameSize = len;
+	chromInfoArray[i].name = chromName;
+	chromInfoArray[i].id = usage->id;
+	chromInfoArray[i].size = usage->size;
+	}
+
+    /* Sort so the b-Tree actually works. */
+    qsort(chromInfoArray, chromCount, sizeof(chromInfoArray[0]), bbiChromInfoCmp);
+    }
+
+/* Write chromosome bPlusTree */
+int chromBlockSize = min(blockSize, chromCount);
+bptFileBulkIndexToOpenFile(chromInfoArray, sizeof(chromInfoArray[0]), chromCount, chromBlockSize,
+    bbiChromInfoKey, maxChromNameSize, bbiChromInfoVal, 
+    sizeof(chromInfoArray[0].id) + sizeof(chromInfoArray[0].size), 
+    f);
+
+freeMem(chromInfoArray);
+}
+
+void bbiWriteFloat(FILE *f, float val)
+/* Write out floating point val to file.  Mostly to convert from double... */
+{
+writeOne(f, val);
+}
+
+struct hash *bbiChromSizesFromFile(char *fileName)
+/* Read two column file into hash keyed by chrom. */
+{
+struct hash *hash = hashNew(0);
+struct lineFile *lf = lineFileOpen(fileName, TRUE);
+char *row[2];
+while (lineFileRow(lf, row))
+    hashAddInt(hash, row[0], sqlUnsigned(row[1]));
+
+lineFileClose(&lf);
+return hash;
+}
+
+void bbiChromInfoKey(const void *va, char *keyBuf)
+/* Get key field out of bbiChromInfo. */
+{
+const struct bbiChromInfo *a = ((struct bbiChromInfo *)va);
+strcpy(keyBuf, a->name);
+}
+
+void *bbiChromInfoVal(const void *va)
+/* Get val field out of bbiChromInfo. */
+{
+const struct bbiChromInfo *a = ((struct bbiChromInfo *)va);
+return (void*)(&a->id);
+}
+
+void bbiChromUsageFree(struct bbiChromUsage **pUsage)
+/* free a single bbiChromUsage structure */
+{
+struct bbiChromUsage *usage = *pUsage;
+if (usage != NULL)
+    {
+    freeMem(usage->name);
+    freez(pUsage);
+    }
+}
+
+void bbiChromUsageFreeList(struct bbiChromUsage **pList)
+/* free a list of bbiChromUsage structures */
+{
+struct bbiChromUsage *el, *next;
+
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    bbiChromUsageFree(&el);
+    }
+*pList = NULL;
+}
+
+int bbExIndexMakerMaxIndexField(struct bbExIndexMaker *eim)
+/* Return the maximum field we have to index. */
+{
+int maxIx = 0;
+int i;
+for (i=0; i<eim->indexCount; ++i)
+    {
+    int ix = eim->indexFields[i];
+    if (ix > maxIx)
+        maxIx = ix;
+    }
+return maxIx;
+}
+
+void bbExIndexMakerUpdateMaxFieldSize(struct bbExIndexMaker *eim, char **row)
+/* Fold in information about row into bbExIndexMaker into eim->maxFieldSize */
+{
+int i;
+for (i=0; i<eim->indexCount; ++i)
+    {
+    int rowIx = eim->indexFields[i];
+    int size = strlen(row[rowIx]);
+    if (size > eim->maxFieldSize[i])
+        eim->maxFieldSize[i] = size;
+    }
+}
+
+struct bbiChromUsage *bbiChromUsageFromBedFile(struct lineFile *lf, struct hash *chromSizesHash, 
+	struct bbExIndexMaker *eim, int *retMinDiff, double *retAveSize, bits64 *retBedCount)
+/* Go through bed file and collect chromosomes and statistics.  If eim parameter is non-NULL
+ * collect max field sizes there too. */
+{
+int maxRowSize = (eim == NULL ? 3 : bbExIndexMakerMaxIndexField(eim) + 1);
+char *row[maxRowSize];
+struct hash *uniqHash = hashNew(0);
+struct bbiChromUsage *usage = NULL, *usageList = NULL;
+int lastStart = -1;
+bits32 id = 0;
+bits64 totalBases = 0, bedCount = 0;
+int minDiff = BIGNUM;
+
+lineFileRemoveInitialCustomTrackLines(lf);
+
+for (;;)
+    {
+    int rowSize = lineFileChopNext(lf, row, maxRowSize);
+    if (rowSize == 0)
+        break;
+    lineFileExpectAtLeast(lf, maxRowSize, rowSize);
+    char *chrom = row[0];
+    int start = lineFileNeedNum(lf, row, 1);
+    int end = lineFileNeedNum(lf, row, 2);
+    if (eim != NULL)
+	bbExIndexMakerUpdateMaxFieldSize(eim, row);
+    if (start > end)
+        {
+	    errAbort("end (%d) before start (%d) line %d of %s",
+	    	end, start, lf->lineIx, lf->fileName);
+	}
+    ++bedCount;
+    totalBases += (end - start);
+    if (usage == NULL || differentString(usage->name, chrom))
+        {
+	if (hashLookup(uniqHash, chrom))
+	    {
+	    errAbort("%s is not sorted at line %d.  Please use \"sort -k1,1 -k2,2n\" or bedSort and try again.",
+	    	lf->fileName, lf->lineIx);
+	    }
+	hashAdd(uniqHash, chrom, NULL);
+	struct hashEl *chromHashEl = hashLookup(chromSizesHash, chrom);
+	if (chromHashEl == NULL)
+	    errAbort("%s is not found in chromosome sizes file", chrom);
+	int chromSize = ptToInt(chromHashEl->val);
+	AllocVar(usage);
+	usage->name = cloneString(chrom);
+	usage->id = id++;
+	usage->size = chromSize;
+	slAddHead(&usageList, usage);
+	lastStart = -1;
+	}
+    if (end > usage->size)
+        errAbort("End coordinate %d bigger than %s size of %d line %d of %s", end, usage->name, usage->size, lf->lineIx, lf->fileName);
+    usage->itemCount += 1;
+    if (lastStart >= 0)
+        {
+	int diff = start - lastStart;
+	if (diff < minDiff)
+	    {
+	    if (diff < 0)
+		errAbort("%s is not sorted at line %d.  Please use \"sort -k1,1 -k2,2n\" or bedSort and try again.",
+		    lf->fileName, lf->lineIx);
+	    minDiff = diff;
+	    }
+	}
+    lastStart = start;
+    }
+slReverse(&usageList);
+double aveSize = 0;
+if (bedCount > 0)
+    aveSize = (double)totalBases/bedCount;
+*retMinDiff = minDiff;
+*retAveSize = aveSize;
+*retBedCount = bedCount;
+freeHash(&uniqHash);
+return usageList;
+}
+
+int bbiCalcResScalesAndSizes(int aveSize, 
+    int resScales[bbiMaxZoomLevels], int resSizes[bbiMaxZoomLevels])
+/* Fill in resScales with amount to zoom at each level, and zero out resSizes based
+ * on average span. Returns the number of zoom levels we actually will use. */
+{
+int resTryCount = bbiMaxZoomLevels, resTry;
+int resIncrement = bbiResIncrement;
+int minZoom = 10;
+int res = aveSize;
+if (res < minZoom)
+    res = minZoom;
+for (resTry = 0; resTry < resTryCount; ++resTry)
+    {
+    resSizes[resTry] = 0;
+    resScales[resTry] = res;
+    // if aveSize is large, then the initial value of res is large, and we
+    // and we cannot do all 10 levels without overflowing res* integers and other related variables.
+    if (res > 1000000000) 
+	{
+	resTryCount = resTry + 1;  
+	verbose(2, "resTryCount reduced from 10 to %d\n", resTryCount);
+	break;
+	}
+    res *= resIncrement;
+    }
+return resTryCount;
+}
+
+int bbiWriteZoomLevels(
+    struct lineFile *lf,    /* Input file. */
+    FILE *f,		    /* Output. */
+    int blockSize,	    /* Size of index block */
+    int itemsPerSlot,	    /* Number of data points bundled at lowest level. */
+    bbiWriteReducedOnceReturnReducedTwice writeReducedOnceReturnReducedTwice,   /* callback */
+    int fieldCount,	    /* Number of fields in bed (4 for bedGraph) */
+    boolean doCompress,	    /* Do we compress.  Answer really should be yes! */
+    bits64 dataSize,	    /* Size of data on disk (after compression if any). */
+    struct bbiChromUsage *usageList, /* Result from bbiChromUsageFromBedFile */
+    int resTryCount, int resScales[], int resSizes[],   /* How much to zoom at each level */
+    bits32 zoomAmounts[bbiMaxZoomLevels],      /* Fills in amount zoomed at each level. */
+    bits64 zoomDataOffsets[bbiMaxZoomLevels],  /* Fills in where data starts for each zoom level. */
+    bits64 zoomIndexOffsets[bbiMaxZoomLevels], /* Fills in where index starts for each level. */
+    struct bbiSummaryElement *totalSum)
+/* Write out all the zoom levels and return the number of levels written.  Writes 
+ * actual zoom amount and the offsets of the zoomed data and index in the last three
+ * parameters.  Sorry for all the parameters - it was this or duplicate a big chunk of
+ * code between bedToBigBed and bedGraphToBigWig. */
+{
+/* Write out first zoomed section while storing in memory next zoom level. */
+assert(resTryCount > 0);
+int maxReducedSize = dataSize/2;
+int initialReduction = 0, initialReducedCount = 0;
+
+/* Figure out initialReduction for zoom - one that is maxReducedSize or less. */
+int resTry;
+for (resTry = 0; resTry < resTryCount; ++resTry)
+    {
+    bits64 reducedSize = resSizes[resTry] * sizeof(struct bbiSummaryOnDisk);
+    if (doCompress)
+	reducedSize /= 2;	// Estimate!
+    if (reducedSize <= maxReducedSize)
+	{
+	initialReduction = resScales[resTry];
+	initialReducedCount = resSizes[resTry];
+	break;
+	}
+    }
+verbose(2, "initialReduction %d, initialReducedCount = %d\n", 
+    initialReduction, initialReducedCount);
+
+/* Force there to always be at least one zoom.  It may waste a little space on small
+ * files, but it makes files more uniform, and avoids special case code for calculating
+ * overall file summary. */
+if (initialReduction == 0)
+    {
+    initialReduction = resScales[0];
+    initialReducedCount = resSizes[0];
+    }
+
+/* Call routine to make the initial zoom level and also a bit of work towards further levels. */
+struct lm *lm = lmInit(0);
+int zoomIncrement = bbiResIncrement;
+lineFileRewind(lf);
+struct bbiSummary *rezoomedList = writeReducedOnceReturnReducedTwice(usageList, fieldCount,
+	lf, initialReduction, initialReducedCount,
+	zoomIncrement, blockSize, itemsPerSlot, doCompress, lm, 
+	f, &zoomDataOffsets[0], &zoomIndexOffsets[0], totalSum);
+verboseTime(2, "writeReducedOnceReturnReducedTwice");
+zoomAmounts[0] = initialReduction;
+int zoomLevels = 1;
+
+/* Loop around to do any additional levels of zoom. */
+int zoomCount = initialReducedCount;
+int reduction = initialReduction * zoomIncrement;
+while (zoomLevels < bbiMaxZoomLevels)
+    {
+    int rezoomCount = slCount(rezoomedList);
+    if (rezoomCount >= zoomCount)
+	break;
+    zoomCount = rezoomCount;
+    zoomDataOffsets[zoomLevels] = ftell(f);
+    zoomIndexOffsets[zoomLevels] = bbiWriteSummaryAndIndex(rezoomedList, 
+	blockSize, itemsPerSlot, doCompress, f);
+    zoomAmounts[zoomLevels] = reduction;
+    ++zoomLevels;
+    reduction *= zoomIncrement;
+    rezoomedList = bbiSummarySimpleReduce(rezoomedList, reduction, lm);
+    }
+lmCleanup(&lm);
+verboseTime(2, "further reductions");
+return zoomLevels;
+}
+
+
+int bbiCountSectionsNeeded(struct bbiChromUsage *usageList, int itemsPerSlot)
+/* Count up number of sections needed for data. */
+{
+struct bbiChromUsage *usage;
+int count = 0;
+for (usage = usageList; usage != NULL; usage = usage->next)
+    {
+    int countOne = (usage->itemCount + itemsPerSlot - 1)/itemsPerSlot;
+    count += countOne;
+    verbose(2, "%s %d, %d blocks of %d\n", usage->name, usage->itemCount, countOne, itemsPerSlot);
+    }
+return count;
+}
+
+
+void bbiAddToSummary(bits32 chromId, bits32 chromSize, bits32 start, bits32 end, 
+	bits32 validCount, double minVal, double maxVal, double sumData, double sumSquares,  
+	int reduction, struct bbiSummary **pOutList)
+/* Add data range to summary - putting it onto top of list if possible, otherwise
+ * expanding list. */
+{
+struct bbiSummary *sum = *pOutList;
+if (end > chromSize)	// Avoid pathological clipping situation on bad input
+    end = chromSize;
+while (start < end)
+    {
+    /* See if need to allocate a new summary. */
+    if (sum == NULL || sum->chromId != chromId || sum->end <= start)
+        {
+	struct bbiSummary *newSum;
+	AllocVar(newSum);
+	newSum->chromId = chromId;
+	if (sum == NULL || sum->chromId != chromId || sum->end + reduction <= start)
+	    newSum->start = start;
+	else
+	    newSum->start = sum->end;
+	newSum->end = newSum->start + reduction;
+	if (newSum->end > chromSize)
+	    newSum->end = chromSize;
+	newSum->minVal = minVal;
+	newSum->maxVal = maxVal;
+	sum = newSum;
+	slAddHead(pOutList, sum);
+	}
+
+    /* Figure out amount of overlap between current summary and item */
+    int overlap = rangeIntersection(start, end, sum->start, sum->end);
+    if (overlap <= 0) 
+	{
+        warn("%u %u doesn't intersect %u %u, chromId %u chromSize %u", start, end, sum->start, sum->end, chromId, chromSize);
+	internalErr();
+	}
+    int itemSize = end - start;
+    double overlapFactor = (double)overlap/itemSize;
+
+    /* Fold overlapping bits into output. */
+    sum->validCount += overlapFactor * validCount;
+    if (sum->minVal > minVal)
+        sum->minVal = minVal;
+    if (sum->maxVal < maxVal)
+        sum->maxVal = maxVal;
+    sum->sumData += overlapFactor * sumData;
+    sum->sumSquares += overlapFactor * sumSquares;
+
+    /* Advance over overlapping bits. */
+    start += overlap;
+    }
+}
+
+void bbiAddRangeToSummary(bits32 chromId, bits32 chromSize, bits32 start, bits32 end, 
+	double val, int reduction, struct bbiSummary **pOutList)
+/* Add chromosome range to summary - putting it onto top of list if possible, otherwise
+ * expanding list. */
+{
+int size = end-start;
+double sum = size*val;
+double sumSquares = sum*val;
+bbiAddToSummary(chromId, chromSize, start, end, size, val, val, sum, sumSquares, reduction, pOutList);
+}
+
+struct bbiSummary *bbiReduceSummaryList(struct bbiSummary *inList, 
+	struct bbiChromInfo *chromInfoArray, int reduction)
+/* Reduce summary list to another summary list. */
+{
+struct bbiSummary *outList = NULL;
+struct bbiSummary *sum;
+for (sum = inList; sum != NULL; sum = sum->next)
+    bbiAddToSummary(sum->chromId, chromInfoArray[sum->chromId].size, sum->start, sum->end, sum->validCount, sum->minVal,
+    	sum->maxVal, sum->sumData, sum->sumSquares, reduction, &outList);
+slReverse(&outList);
+return outList;
+}
+
+bits64 bbiTotalSummarySize(struct bbiSummary *list)
+/* Return size on disk of all summaries. */
+{
+struct bbiSummary *el;
+bits64 total = 0;
+for (el = list; el != NULL; el = el->next)
+    total += sizeof(struct bbiSummaryOnDisk);
+return total;
+}
+
+
+static bits64 bbiSummaryFetchOffset(const void *va, void *context)
+/* Fetch bbiSummary file offset for r-tree */
+{
+const struct bbiSummary *a = *((struct bbiSummary **)va);
+return a->fileOffset;
+}
+
+static struct cirTreeRange bbiSummaryFetchKey(const void *va, void *context)
+/* Fetch bbiSummary key for r-tree */
+{
+struct cirTreeRange res;
+const struct bbiSummary *a = *((struct bbiSummary **)va);
+res.chromIx = a->chromId;
+res.start = a->start;
+res.end = a->end;
+return res;
+}
+
+
+static bits64 bbiWriteSummaryAndIndexComp(struct bbiSummary *summaryList, 
+	int blockSize, int itemsPerSlot, FILE *f)
+/* Write out summary and index to summary uncompressed, returning start position of
+ * summary index. */
+{
+bits32 i, count = slCount(summaryList);
+struct bbiSummary **summaryArray;
+AllocArray(summaryArray, count);
+writeOne(f, count);
+struct bbiSummary *summary = summaryList;
+
+/* Figure out max size of uncompressed and compressed blocks. */
+bits32 itemSize = sizeof(summary->chromId) + sizeof(summary->start) + sizeof(summary->end) + sizeof(summary->validCount) + 4*sizeof(float);
+int uncBufSize = itemSize * itemsPerSlot;
+char uncBuf[uncBufSize];
+int compBufSize = zCompBufSize(uncBufSize);
+char compBuf[compBufSize];
+
+/* Loop through compressing and writing one slot at a time. */
+bits32 itemsLeft = count;
+int sumIx = 0;
+while (itemsLeft > 0)
+    {
+    bits32 itemsInSlot = itemsLeft;
+    if (itemsInSlot > itemsPerSlot)
+         itemsInSlot = itemsPerSlot;
+    char *writePt = uncBuf;
+
+    bits64 filePos = ftell(f);
+    for (i=0; i<itemsInSlot; ++i)
+        {
+	summaryArray[sumIx++] = summary;
+	memWriteOne(&writePt, summary->chromId);
+	memWriteOne(&writePt, summary->start);
+	memWriteOne(&writePt, summary->end);
+	memWriteOne(&writePt, summary->validCount);
+	memWriteFloat(&writePt, summary->minVal);
+	memWriteFloat(&writePt, summary->maxVal);
+	memWriteFloat(&writePt, summary->sumData);
+	memWriteFloat(&writePt, summary->sumSquares);
+	summary->fileOffset = filePos;
+	summary = summary->next;
+	if (summary == NULL)
+	    break;
+	}
+
+    bits32 uncSize = writePt - uncBuf;
+    int compSize = zCompress(uncBuf, uncSize, compBuf, compBufSize);
+    mustWrite(f, compBuf, compSize);
+
+    itemsLeft -= itemsInSlot;
+    }
+bits64 indexOffset = ftell(f);
+cirTreeFileBulkIndexToOpenFile(summaryArray, sizeof(summaryArray[0]), count,
+    blockSize, itemsPerSlot, NULL, bbiSummaryFetchKey, bbiSummaryFetchOffset, 
+    indexOffset, f);
+freez(&summaryArray);
+return indexOffset;
+}
+
+static bits64 bbiWriteSummaryAndIndexUnc(struct bbiSummary *summaryList, 
+	int blockSize, int itemsPerSlot, FILE *f)
+/* Write out summary and index to summary compressed, returning start position of
+ * summary index. */
+{
+bits32 i, count = slCount(summaryList);
+struct bbiSummary **summaryArray;
+AllocArray(summaryArray, count);
+writeOne(f, count);
+struct bbiSummary *summary;
+for (summary = summaryList, i=0; summary != NULL; summary = summary->next, ++i)
+    {
+    summaryArray[i] = summary;
+    summary->fileOffset = ftell(f);
+    writeOne(f, summary->chromId);
+    writeOne(f, summary->start);
+    writeOne(f, summary->end);
+    writeOne(f, summary->validCount);
+    bbiWriteFloat(f, summary->minVal);
+    bbiWriteFloat(f, summary->maxVal);
+    bbiWriteFloat(f, summary->sumData);
+    bbiWriteFloat(f, summary->sumSquares);
+    }
+bits64 indexOffset = ftell(f);
+cirTreeFileBulkIndexToOpenFile(summaryArray, sizeof(summaryArray[0]), count,
+    blockSize, itemsPerSlot, NULL, bbiSummaryFetchKey, bbiSummaryFetchOffset, 
+    indexOffset, f);
+freez(&summaryArray);
+return indexOffset;
+}
+
+bits64 bbiWriteSummaryAndIndex(struct bbiSummary *summaryList, 
+	int blockSize, int itemsPerSlot, boolean doCompress, FILE *f)
+/* Write out summary and index to summary, returning start position of
+ * summary index. */
+{
+if (doCompress)
+    return bbiWriteSummaryAndIndexComp(summaryList, blockSize, itemsPerSlot, f);
+else
+    return bbiWriteSummaryAndIndexUnc(summaryList, blockSize, itemsPerSlot, f);
+}
+
+struct cirTreeRange bbiBoundsArrayFetchKey(const void *va, void *context)
+/* Fetch bbiBoundsArray key for r-tree */
+{
+const struct bbiBoundsArray *a = ((struct bbiBoundsArray *)va);
+return a->range;
+}
+
+bits64 bbiBoundsArrayFetchOffset(const void *va, void *context)
+/* Fetch bbiBoundsArray file offset for r-tree */
+{
+const struct bbiBoundsArray *a = ((struct bbiBoundsArray *)va);
+return a->offset;
+}
+
+struct bbiSumOutStream *bbiSumOutStreamOpen(int allocCount, FILE *f, boolean doCompress)
+/* Allocate new bbiSumOutStream. */
+{
+struct bbiSumOutStream *stream;
+AllocVar(stream);
+AllocArray(stream->array, allocCount);
+stream->allocCount = allocCount;
+stream->f = f;
+stream->doCompress = doCompress;
+return stream;
+}
+
+void bbiSumOutStreamFlush(struct bbiSumOutStream *stream)
+/* Flush out any pending input. */
+{
+if (stream->elCount != 0)
+    {
+    int uncSize = stream->elCount * sizeof(stream->array[0]);
+    if (stream->doCompress)
+        {
+	int compBufSize = zCompBufSize(uncSize);
+	char compBuf[compBufSize];
+	int compSize = zCompress(stream->array, uncSize, compBuf, compBufSize);
+	mustWrite(stream->f, compBuf, compSize);
+	}
+    else
+        {
+	mustWrite(stream->f, stream->array, uncSize);
+	}
+    stream->elCount = 0;
+    }
+}
+
+void bbiSumOutStreamClose(struct bbiSumOutStream **pStream)
+/* Free up bbiSumOutStream */
+{
+struct bbiSumOutStream *stream = *pStream;
+if (stream != NULL)
+    {
+    bbiSumOutStreamFlush(stream);
+    freeMem(stream->array);
+    freez(pStream);
+    }
+}
+
+void bbiSumOutStreamWrite(struct bbiSumOutStream *stream, struct bbiSummary *sum)
+/* Write out next one to stream. */
+{
+int elCount = stream->elCount;
+struct bbiSummaryOnDisk *a = &stream->array[elCount];
+a->chromId = sum->chromId;
+a->start = sum->start;
+a->end = sum->end;
+a->validCount = sum->validCount;
+a->minVal = sum->minVal;
+a->maxVal = sum->maxVal;
+a->sumData = sum->sumData;
+a->sumSquares = sum->sumSquares;
+elCount += 1;
+stream->elCount = elCount;
+if (elCount >= stream->allocCount)
+    bbiSumOutStreamFlush(stream);    
+}
+
+void bbiOutputOneSummaryFurtherReduce(struct bbiSummary *sum, 
+	struct bbiSummary **pTwiceReducedList, 
+	int doubleReductionSize, struct bbiBoundsArray **pBoundsPt, 
+	struct bbiBoundsArray *boundsEnd, struct lm *lm, 
+	struct bbiSumOutStream *stream)
+/* Write out sum to file, keeping track of minimal info on it in *pBoundsPt, and also adding
+ * it to second level summary. */
+{
+/* Get place to store file offset etc and make sure we have not gone off end. */
+struct bbiBoundsArray *bounds = *pBoundsPt;
+assert(bounds < boundsEnd);
+*pBoundsPt += 1;
+
+/* Fill in bounds info. */
+bounds->offset = ftell(stream->f);
+bounds->range.chromIx = sum->chromId;
+bounds->range.start = sum->start;
+bounds->range.end = sum->end;
+
+/* Write out summary info. */
+bbiSumOutStreamWrite(stream, sum);
+
+/* Fold summary info into pTwiceReducedList. */
+struct bbiSummary *twiceReduced = *pTwiceReducedList;
+if (twiceReduced == NULL || twiceReduced->chromId != sum->chromId 
+	|| twiceReduced->start + doubleReductionSize < sum->end)
+    {
+    lmAllocVar(lm, twiceReduced);
+    *twiceReduced = *sum;
+    slAddHead(pTwiceReducedList, twiceReduced);
+    }
+else
+    {
+    twiceReduced->end = sum->end;
+    twiceReduced->validCount += sum->validCount;
+    if (sum->minVal < twiceReduced->minVal) twiceReduced->minVal = sum->minVal;
+    if (sum->maxVal > twiceReduced->maxVal) twiceReduced->maxVal = sum->maxVal;
+    twiceReduced->sumData += sum->sumData;
+    twiceReduced->sumSquares += sum->sumSquares;
+    }
+}
+
+struct bbiSummary *bbiSummarySimpleReduce(struct bbiSummary *list, int reduction, struct lm *lm)
+/* Do a simple reduction - where among other things the reduction level is an integral
+ * multiple of the previous reduction level, and the list is sorted. Allocate result out of lm. */
+{
+struct bbiSummary *newList = NULL, *sum, *newSum = NULL;
+for (sum = list; sum != NULL; sum = sum->next)
+    {
+    if (newSum == NULL || newSum->chromId != sum->chromId || sum->end > newSum->start + reduction)
+        {
+	lmAllocVar(lm, newSum);
+	*newSum = *sum;
+	slAddHead(&newList, newSum);
+	}
+    else
+        {
+	assert(newSum->end < sum->end);	// check sorted input assumption
+	newSum->end = sum->end;
+	newSum->validCount += sum->validCount;
+	if (newSum->minVal > sum->minVal) newSum->minVal = sum->minVal;
+	if (newSum->maxVal < sum->maxVal) newSum->maxVal = sum->maxVal;
+	newSum->sumData += sum->sumData;
+	newSum->sumSquares += sum->sumSquares;
+	}
+    }
+slReverse(&newList);
+return newList;
+}
+
diff --git a/gbtools/src/blatSrc/lib/bigBed.c b/gbtools/src/blatSrc/lib/bigBed.c
new file mode 100644
index 0000000..8548f2d
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/bigBed.c
@@ -0,0 +1,651 @@
+/* bigBed - interface to binary file with bed-style values (that is a bunch of
+ * possibly overlapping regions. */
+
+/* Copyright (C) 2013 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "hash.h"
+#include "linefile.h"
+#include "obscure.h"
+#include "dystring.h"
+#include "rangeTree.h"
+#include "cirTree.h"
+#include "bPlusTree.h"
+#include "basicBed.h"
+#include "asParse.h"
+#include "zlibFace.h"
+#include "sig.h"
+#include "udc.h"
+#include "bbiFile.h"
+#include "bigBed.h"
+
+struct bbiFile *bigBedFileOpen(char *fileName)
+/* Open up big bed file. */
+{
+return bbiFileOpen(fileName, bigBedSig, "big bed");
+}
+
+boolean bigBedFileCheckSigs(char *fileName)
+/* check file signatures at beginning and end of file */
+{
+return bbiFileCheckSigs(fileName, bigBedSig, "big bed");
+}
+
+struct bigBedInterval *bigBedIntervalQuery(struct bbiFile *bbi, char *chrom,
+	bits32 start, bits32 end, int maxItems, struct lm *lm)
+/* Get data for interval.  Return list allocated out of lm.  Set maxItems to maximum
+ * number of items to return, or to 0 for all items. */
+{
+struct bigBedInterval *el, *list = NULL;
+int itemCount = 0;
+bbiAttachUnzoomedCir(bbi);
+bits32 chromId;
+struct fileOffsetSize *blockList = bbiOverlappingBlocks(bbi, bbi->unzoomedCir,
+	chrom, start, end, &chromId);
+struct fileOffsetSize *block, *beforeGap, *afterGap;
+struct udcFile *udc = bbi->udc;
+boolean isSwapped = bbi->isSwapped;
+
+/* Set up for uncompression optionally. */
+char *uncompressBuf = NULL;
+if (bbi->uncompressBufSize > 0)
+    uncompressBuf = needLargeMem(bbi->uncompressBufSize);
+
+char *mergedBuf = NULL;
+for (block = blockList; block != NULL; )
+    {
+    /* Find contigious blocks and read them into mergedBuf. */
+    fileOffsetSizeFindGap(block, &beforeGap, &afterGap);
+    bits64 mergedOffset = block->offset;
+    bits64 mergedSize = beforeGap->offset + beforeGap->size - mergedOffset;
+    udcSeek(udc, mergedOffset);
+    mergedBuf = needLargeMem(mergedSize);
+    udcMustRead(udc, mergedBuf, mergedSize);
+    char *blockBuf = mergedBuf;
+
+    /* Loop through individual blocks within merged section. */
+    for (;block != afterGap; block = block->next)
+        {
+	/* Uncompress if necessary. */
+	char *blockPt, *blockEnd;
+	if (uncompressBuf)
+	    {
+	    blockPt = uncompressBuf;
+	    int uncSize = zUncompress(blockBuf, block->size, uncompressBuf, bbi->uncompressBufSize);
+	    blockEnd = blockPt + uncSize;
+	    }
+	else
+	    {
+	    blockPt = blockBuf;
+	    blockEnd = blockPt + block->size;
+	    }
+
+	while (blockPt < blockEnd)
+	    {
+	    /* Read next record into local variables. */
+	    bits32 chr = memReadBits32(&blockPt, isSwapped);	// Read and discard chromId
+	    bits32 s = memReadBits32(&blockPt, isSwapped);
+	    bits32 e = memReadBits32(&blockPt, isSwapped);
+
+	    /* calculate length of rest of bed fields */
+	    int restLen = strlen(blockPt);
+
+	    /* If we're actually in range then copy it into a new  element and add to list. */
+	    if (chr == chromId && s < end && e > start)
+		{
+		++itemCount;
+		if (maxItems > 0 && itemCount > maxItems)
+		    break;
+
+		lmAllocVar(lm, el);
+		el->start = s;
+		el->end = e;
+		if (restLen > 0)
+		    el->rest = lmCloneStringZ(lm, blockPt, restLen);
+		el->chromId = chromId;
+		slAddHead(&list, el);
+		}
+
+	    // move blockPt pointer to end of previous bed
+	    blockPt += restLen + 1;
+	    }
+	if (maxItems > 0 && itemCount > maxItems)
+	    break;
+	blockBuf += block->size;
+        }
+    if (maxItems > 0 && itemCount > maxItems)
+        break;
+    freez(&mergedBuf);
+    }
+freez(&mergedBuf);
+freeMem(uncompressBuf);
+slFreeList(&blockList);
+slReverse(&list);
+return list;
+}
+
+int bigBedIntervalToRow(struct bigBedInterval *interval, char *chrom, char *startBuf, char *endBuf,
+	char **row, int rowSize)
+/* Convert bigBedInterval into an array of chars equivalent to what you'd get by
+ * parsing the bed file. The startBuf and endBuf are used to hold the ascii representation of
+ * start and end.  Note that the interval->rest string will have zeroes inserted as a side effect.
+ */
+{
+int fieldCount = 3;
+sprintf(startBuf, "%u", interval->start);
+sprintf(endBuf, "%u", interval->end);
+row[0] = chrom;
+row[1] = startBuf;
+row[2] = endBuf;
+if (!isEmpty(interval->rest))
+    {
+    int wordCount = chopByChar(cloneString(interval->rest), '\t', row+3, rowSize-3);
+    fieldCount += wordCount;
+    }
+return fieldCount;
+}
+
+static struct bbiInterval *bigBedCoverageIntervals(struct bbiFile *bbi,
+	char *chrom, bits32 start, bits32 end, struct lm *lm)
+/* Return intervals where the val is the depth of coverage. */
+{
+/* Get list of overlapping intervals */
+struct bigBedInterval *bi, *biList = bigBedIntervalQuery(bbi, chrom, start, end, 0, lm);
+if (biList == NULL)
+    return NULL;
+
+/* Make a range tree that collects coverage. */
+struct rbTree *rangeTree = rangeTreeNew();
+for (bi = biList; bi != NULL; bi = bi->next)
+    rangeTreeAddToCoverageDepth(rangeTree, bi->start, bi->end);
+struct range *range, *rangeList = rangeTreeList(rangeTree);
+
+/* Convert rangeList to bbiInterval list. */
+struct bbiInterval *bwi, *bwiList = NULL;
+for (range = rangeList; range != NULL; range = range->next)
+    {
+    lmAllocVar(lm, bwi);
+    bwi->start = range->start;
+    if (bwi->start < start)
+       bwi->start = start;
+    bwi->end = range->end;
+    if (bwi->end > end)
+       bwi->end = end;
+    bwi->val = ptToInt(range->val);
+    slAddHead(&bwiList, bwi);
+    }
+slReverse(&bwiList);
+
+/* Clean up and go home. */
+rangeTreeFree(&rangeTree);
+return bwiList;
+}
+
+boolean bigBedSummaryArrayExtended(struct bbiFile *bbi, char *chrom, bits32 start, bits32 end,
+	int summarySize, struct bbiSummaryElement *summary)
+/* Get extended summary information for summarySize evenly spaced elements into
+ * the summary array. */
+{
+return bbiSummaryArrayExtended(bbi, chrom, start, end, bigBedCoverageIntervals,
+	summarySize, summary);
+}
+
+boolean bigBedSummaryArray(struct bbiFile *bbi, char *chrom, bits32 start, bits32 end,
+	enum bbiSummaryType summaryType, int summarySize, double *summaryValues)
+/* Fill in summaryValues with  data from indicated chromosome range in bigBed file.
+ * Be sure to initialize summaryValues to a default value, which will not be touched
+ * for regions without data in file.  (Generally you want the default value to either
+ * be 0.0 or nan("") depending on the application.)  Returns FALSE if no data
+ * at that position. */
+{
+return bbiSummaryArray(bbi, chrom, start, end, bigBedCoverageIntervals,
+	summaryType, summarySize, summaryValues);
+}
+
+struct offsetSize 
+/* Simple file offset and file size. */
+    {
+    bits64 offset; 
+    bits64 size;
+    };
+
+static int cmpOffsetSizeRef(const void *va, const void *vb)
+/* Compare to sort slRef pointing to offsetSize.  Sort is kind of hokey,
+ * but guarantees all items that are the same will be next to each other
+ * at least, which is all we care about. */
+{
+const struct slRef *a = *((struct slRef **)va);
+const struct slRef *b = *((struct slRef **)vb);
+return memcmp(a->val, b->val, sizeof(struct offsetSize));
+}
+
+static struct fileOffsetSize *fosFromRedundantBlockList(struct slRef **pBlockList, 
+    boolean isSwapped)
+/* Convert from list of references to offsetSize format to list of fileOffsetSize
+ * format, while removing redundancy.   Sorts *pBlockList as a side effect. */
+{
+/* Sort input so it it easy to uniquify. */
+slSort(pBlockList, cmpOffsetSizeRef);
+struct slRef *blockList = *pBlockList;
+
+/* Make new fileOffsetSize for each unique offsetSize. */
+struct fileOffsetSize *fosList = NULL, *fos;
+struct offsetSize lastOffsetSize = {0,0};
+struct slRef *blockRef;
+for (blockRef = blockList; blockRef != NULL; blockRef = blockRef->next)
+    {
+    if (memcmp(&lastOffsetSize, blockRef->val, sizeof(lastOffsetSize)) != 0)
+        {
+	memcpy(&lastOffsetSize, blockRef->val, sizeof(lastOffsetSize));
+	AllocVar(fos);
+	if (isSwapped)
+	    {
+	    fos->offset = byteSwap64(lastOffsetSize.offset);
+	    fos->size = byteSwap64(lastOffsetSize.size);
+	    }
+	else
+	    {
+	    fos->offset = lastOffsetSize.offset;
+	    fos->size = lastOffsetSize.size;
+	    }
+	slAddHead(&fosList, fos);
+	}
+    }
+slReverse(&fosList);
+return fosList;
+}
+
+
+static struct fileOffsetSize *bigBedChunksMatchingName(struct bbiFile *bbi, 
+    struct bptFile *index, char *name)
+/* Get list of file chunks that match name.  Can slFreeList this when done. */
+{
+struct slRef *blockList = bptFileFindMultiple(index, 
+	name, strlen(name), sizeof(struct offsetSize));
+struct fileOffsetSize *fosList = fosFromRedundantBlockList(&blockList, bbi->isSwapped);
+slRefFreeListAndVals(&blockList);
+return fosList;
+}
+
+static struct fileOffsetSize *bigBedChunksMatchingNames(struct bbiFile *bbi, 
+	struct bptFile *index, char **names, int nameCount)
+/* Get list of file chunks that match any of the names.  Can slFreeList this when done. */
+{
+/* Go through all names and make a blockList that includes all blocks with any hit to any name.  
+ * Many of these blocks will occur multiple times. */
+struct slRef *blockList = NULL;
+int nameIx;
+for (nameIx = 0; nameIx < nameCount; ++nameIx)
+    {
+    char *name = names[nameIx];
+    struct slRef *oneList = bptFileFindMultiple(index, 
+	    name, strlen(name), sizeof(struct offsetSize));
+    blockList = slCat(oneList, blockList);
+    }
+
+/* Create nonredundant list of blocks. */
+struct fileOffsetSize *fosList = fosFromRedundantBlockList(&blockList, bbi->isSwapped);
+
+/* Clean up and resturn result. */
+slRefFreeListAndVals(&blockList);
+return fosList;
+}
+
+typedef boolean (*BbFirstWordMatch)(char *line, int fieldIx, void *target);
+/* A function that returns TRUE if first word in tab-separated line matches target. */
+
+static void extractField(char *line, int fieldIx, char **retField, int *retFieldSize)
+/* Go through tab separated line and figure out start and size of given field. */
+{
+int i;
+fieldIx -= 3;	/* Skip over chrom/start/end, which are not in line. */
+for (i=0; i<fieldIx; ++i)
+    {
+    line = strchr(line, '\t');
+    if (line == NULL)
+        {
+	warn("Not enough fields in extractField of %s", line);
+	internalErr();
+	}
+    line += 1;
+    }
+char *end = strchr(line, '\t');
+if (end == NULL)
+    end = line + strlen(line);
+*retField = line;
+*retFieldSize = end - line;
+}
+
+static boolean bbWordMatchesName(char *line, int fieldIx, void *target)
+/* Return true if first word of line is same as target, which is just a string. */
+{
+char *name = target;
+int fieldSize;
+char *field;
+extractField(line, fieldIx, &field, &fieldSize);
+return strlen(name) == fieldSize && memcmp(name, field, fieldSize) == 0;
+}
+
+static boolean bbWordIsInHash(char *line, int fieldIx, void *target)
+/* Return true if first word of line is same as target, which is just a string. */
+{
+int fieldSize;
+char *field;
+extractField(line, fieldIx, &field, &fieldSize);
+char fieldString[fieldSize+1];
+memcpy(fieldString, field, fieldSize);
+fieldString[fieldSize] = 0;
+
+/* Return boolean value that reflects whether we found it in hash */
+struct hash *hash = target;
+return hashLookup(hash, fieldString) != NULL;
+}
+
+static struct bigBedInterval *bigBedIntervalsMatchingName(struct bbiFile *bbi, 
+    struct fileOffsetSize *fosList, BbFirstWordMatch matcher, int fieldIx, 
+    void *target, struct lm *lm)
+/* Return list of intervals inside of sectors of bbiFile defined by fosList where the name 
+ * matches target somehow. */
+{
+struct bigBedInterval *interval, *intervalList = NULL;
+struct fileOffsetSize *fos;
+boolean isSwapped = bbi->isSwapped;
+for (fos = fosList; fos != NULL; fos = fos->next)
+    {
+    /* Read in raw data */
+    udcSeek(bbi->udc, fos->offset);
+    char *rawData = needLargeMem(fos->size);
+    udcRead(bbi->udc, rawData, fos->size);
+
+    /* Optionally uncompress data, and set data pointer to uncompressed version. */
+    char *uncompressedData = NULL;
+    char *data = NULL;
+    int dataSize = 0;
+    if (bbi->uncompressBufSize > 0)
+	{
+	data = uncompressedData = needLargeMem(bbi->uncompressBufSize);
+	dataSize = zUncompress(rawData, fos->size, uncompressedData, bbi->uncompressBufSize);
+	}
+    else
+	{
+        data = rawData;
+	dataSize = fos->size;
+	}
+
+    /* Set up for "memRead" routines to more or less treat memory block like file */
+    char *blockPt = data, *blockEnd = data + dataSize;
+    struct dyString *dy = dyStringNew(32); // Keep bits outside of chrom/start/end here
+
+
+    /* Read next record into local variables. */
+    while (blockPt < blockEnd)
+	{
+	bits32 chromIx = memReadBits32(&blockPt, isSwapped);
+	bits32 s = memReadBits32(&blockPt, isSwapped);
+	bits32 e = memReadBits32(&blockPt, isSwapped);
+	int c;
+	dyStringClear(dy);
+	// TODO - can simplify this probably just to for (;;) {if ((c = *blockPt++) == 0) ...
+	while ((c = *blockPt++) >= 0)
+	    {
+	    if (c == 0)
+		break;
+	    dyStringAppendC(dy, c);
+	    }
+	if ((*matcher)(dy->string, fieldIx, target))
+	    {
+	    lmAllocVar(lm, interval);
+	    interval->start = s;
+	    interval->end = e;
+	    interval->rest = cloneString(dy->string);
+	    interval->chromId = chromIx;
+	    slAddHead(&intervalList, interval);
+	    }
+	}
+
+    /* Clean up temporary buffers. */
+    dyStringFree(&dy);
+    freez(&uncompressedData);
+    freez(&rawData);
+    }
+slReverse(&intervalList);
+return intervalList;
+}
+
+
+
+struct bigBedInterval *bigBedNameQuery(struct bbiFile *bbi, struct bptFile *index,
+    int fieldIx, char *name, struct lm *lm)
+/* Return list of intervals matching file. These intervals will be allocated out of lm. */
+{
+struct fileOffsetSize *fosList = bigBedChunksMatchingName(bbi, index, name);
+struct bigBedInterval *intervalList = bigBedIntervalsMatchingName(bbi, fosList, 
+    bbWordMatchesName, fieldIx, name, lm);
+slFreeList(&fosList);
+return intervalList;
+}
+
+struct bigBedInterval *bigBedMultiNameQuery(struct bbiFile *bbi, struct bptFile *index,
+    int fieldIx, char **names, int nameCount, struct lm *lm)
+/* Fetch all records matching any of the names. Using given index on given field.
+ * Return list is allocated out of lm. */
+{
+/* Set up name index and get list of chunks that match any of our names. */
+struct fileOffsetSize *fosList = bigBedChunksMatchingNames(bbi, index, names, nameCount);
+
+/* Create hash of all names. */
+struct hash *hash = newHash(0);
+int nameIx;
+for (nameIx=0; nameIx < nameCount; ++nameIx)
+    hashAdd(hash, names[nameIx], NULL);
+
+
+/* Get intervals where name matches hash target. */
+struct bigBedInterval *intervalList = bigBedIntervalsMatchingName(bbi, fosList, 
+    bbWordIsInHash, fieldIx, hash, lm);
+
+/* Clean up and return results. */
+slFreeList(&fosList);
+hashFree(&hash);
+return intervalList;
+}
+
+void bigBedIntervalListToBedFile(struct bbiFile *bbi, struct bigBedInterval *intervalList, FILE *f)
+/* Write out big bed interval list to bed file, looking up chromosome. */
+{
+char chromName[bbi->chromBpt->keySize+1];
+int lastChromId = -1;
+struct bigBedInterval *interval;
+for (interval = intervalList; interval != NULL; interval = interval->next)
+    {
+    bbiCachedChromLookup(bbi, interval->chromId, lastChromId, chromName, sizeof(chromName));
+    lastChromId = interval->chromId;
+    fprintf(f, "%s\t%u\t%u\t%s\n", chromName, interval->start, interval->end, interval->rest);
+    }
+}
+
+int bigBedIntervalToRowLookupChrom(struct bigBedInterval *interval, 
+    struct bigBedInterval *prevInterval, struct bbiFile *bbi,
+    char *chromBuf, int chromBufSize, char *startBuf, char *endBuf, char **row, int rowSize)
+/* Convert bigBedInterval to array of chars equivalend to what you'd get by parsing the
+ * bed file.  If you already know what chromosome the interval is on use the simpler
+ * bigBedIntervalToRow.  This one will look up the chromosome based on the chromId field
+ * of the interval,  which is relatively time consuming.  To avoid doing this unnecessarily
+ * pass in a non-NULL prevInterval,  and if the chromId is the same on prevInterval as this,
+ * it will avoid the lookup.  The chromBufSize should be at greater or equal to 
+ * bbi->chromBpt->keySize+1. The startBuf and endBuf are used to hold the ascii representation of
+ * start and end, and should be 16 bytes.  Note that the interval->rest string will have zeroes 
+ * inserted as a side effect.  Returns number of fields in row.  */
+{
+int lastChromId = (prevInterval == NULL ? -1 : prevInterval->chromId);
+bbiCachedChromLookup(bbi, interval->chromId, lastChromId, chromBuf, chromBufSize);
+return bigBedIntervalToRow(interval, chromBuf, startBuf, endBuf, row, rowSize);
+}
+
+char *bigBedAutoSqlText(struct bbiFile *bbi)
+/* Get autoSql text if any associated with file.  Do a freeMem of this when done. */
+{
+if (bbi->asOffset == 0)
+    return NULL;
+struct udcFile *f = bbi->udc;
+udcSeek(f, bbi->asOffset);
+return udcReadStringAndZero(f);
+}
+
+struct asObject *bigBedAs(struct bbiFile *bbi)
+/* Get autoSql object definition if any associated with file. */
+{
+if (bbi->asOffset == 0)
+    return NULL;
+char *asText = bigBedAutoSqlText(bbi);
+struct asObject *as = asParseText(asText);
+freeMem(asText);
+return as;
+}
+
+struct asObject *bigBedAsOrDefault(struct bbiFile *bbi)
+// Get asObject associated with bigBed - if none exists in file make it up from field counts.
+{
+struct asObject *as = bigBedAs(bbi);
+if (as == NULL)
+    as = asParseText(bedAsDef(bbi->definedFieldCount, bbi->fieldCount));
+return as;
+}
+
+struct asObject *bigBedFileAsObjOrDefault(char *fileName)
+// Get asObject associated with bigBed file, or the default.
+{
+struct bbiFile *bbi = bigBedFileOpen(fileName);
+if (bbi)
+    {
+    struct asObject *as = bigBedAsOrDefault(bbi);
+    bbiFileClose(&bbi);
+    return as;
+    }
+return NULL;
+}
+
+bits64 bigBedItemCount(struct bbiFile *bbi)
+/* Return total items in file. */
+{
+udcSeek(bbi->udc, bbi->unzoomedDataOffset);
+return udcReadBits64(bbi->udc, bbi->isSwapped);
+}
+
+struct slName *bigBedListExtraIndexes(struct bbiFile *bbi)
+/* Return list of names of extra indexes beyond primary chrom:start-end one" */
+{
+struct udcFile *udc = bbi->udc;
+boolean isSwapped = bbi->isSwapped;
+
+/* See if we have any extra indexes, and if so seek to there. */
+bits64 offset = bbi->extraIndexListOffset;
+if (offset == 0)
+   return NULL;
+udcSeek(udc, offset);
+
+/* Construct list of field that are being indexed.  List is list of 
+ * field numbers within asObj. */
+int i;
+struct slInt *intList = NULL, *intEl;
+for (i=0; i<bbi->extraIndexCount; ++i)
+    {
+    bits16 type,fieldCount;
+    type = udcReadBits16(udc, isSwapped);
+    fieldCount = udcReadBits16(udc, isSwapped);
+    udcSeekCur(udc, sizeof(bits64));  // skip over fileOffset
+    udcSeekCur(udc, 4);    // skip over reserved bits
+    if (fieldCount == 1)
+        {
+	bits16 fieldId = udcReadBits16(udc, isSwapped);
+	udcSeekCur(udc, 2);    // skip over reserved bits
+	intEl = slIntNew(fieldId);
+	slAddHead(&intList, intEl);
+	}
+    else
+        {
+	warn("Not yet understanding indexes on multiple fields at once.");
+	internalErr();
+	}
+    }
+
+/* Now have to make an asObject to find out name that corresponds to this field. */
+struct asObject *as = bigBedAsOrDefault(bbi);
+
+/* Make list of field names out of list of field numbers */
+struct slName *nameList = NULL;
+for (intEl = intList; intEl != NULL; intEl = intEl->next)
+    {
+    struct asColumn *col = slElementFromIx(as->columnList, intEl->val);
+    if (col == NULL)
+	{
+        warn("Inconsistent bigBed file %s", bbi->fileName);
+	internalErr();
+	}
+    slNameAddHead(&nameList, col->name);
+    }
+
+asObjectFree(&as);
+return nameList;
+}
+
+struct bptFile *bigBedOpenExtraIndex(struct bbiFile *bbi, char *fieldName, int *retFieldIx)
+/* Return index associated with fieldName.  Aborts if no such index.  Optionally return
+ * index in a row of this field. */
+{
+struct udcFile *udc = bbi->udc;
+boolean isSwapped = bbi->isSwapped;
+struct asObject *as = bigBedAsOrDefault(bbi);
+struct asColumn *col = asColumnFind(as, fieldName);
+if (col == NULL)
+    errAbort("No field %s in %s", fieldName, bbi->fileName);
+int colIx = slIxFromElement(as->columnList, col);
+if (retFieldIx != NULL)
+   *retFieldIx = colIx;
+asObjectFree(&as);
+
+/* See if we have any extra indexes, and if so seek to there. */
+bits64 offset = bbi->extraIndexListOffset;
+if (offset == 0)
+   errAbort("%s has no indexes", bbi->fileName);
+udcSeek(udc, offset);
+
+/* Go through each extra index and see if it's a match */
+int i;
+for (i=0; i<bbi->extraIndexCount; ++i)
+    {
+    bits16 type = udcReadBits16(udc, isSwapped);
+    bits16 fieldCount = udcReadBits16(udc, isSwapped);
+    bits64 fileOffset = udcReadBits64(udc, isSwapped);
+    udcSeekCur(udc, 4);    // skip over reserved bits
+
+    if (type != 0)
+        {
+	warn("Don't understand type %d", type);
+	internalErr();
+	}
+    if (fieldCount == 1)
+        {
+	bits16 fieldId = udcReadBits16(udc, isSwapped);
+	udcSeekCur(udc, 2);    // skip over reserved bits
+	if (fieldId == colIx)
+	    {
+	    udcSeek(udc, fileOffset);
+	    struct bptFile *bpt = bptFileAttach(bbi->fileName, udc);
+	    return bpt;
+	    }
+	}
+    else
+        {
+	warn("Not yet understanding indexes on multiple fields at once.");
+	internalErr();
+	}
+    }
+
+errAbort("%s is not indexed in %s", fieldName, bbi->fileName);
+return NULL;
+}
+
+
+
diff --git a/gbtools/src/blatSrc/lib/binRange.c b/gbtools/src/blatSrc/lib/binRange.c
new file mode 100644
index 0000000..ab7ca60
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/binRange.c
@@ -0,0 +1,392 @@
+/* binRange Stuff to handle binning - which helps us restrict 
+ * our attention to the parts of database that contain info
+ * about a particular window on a chromosome. This scheme
+ * will work without modification for chromosome sizes up
+ * to half a gigaBase.  The finest sized bin is 128k (1<<17).
+ * The next coarsest is 8x as big (1<<13).  There's a hierarchy
+ * of bins with the chromosome itself being the final bin.
+ * Features are put in the finest bin they'll fit in. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "binRange.h"
+
+
+/* add one new level to get coverage past chrom sizes of 512 Mb
+ *	effective limit is now the size of an integer since chrom start
+ *	and end coordinates are always being used in int's == 2Gb-1 */
+static int binOffsetsExtended[] =
+	{4096+512+64+8+1, 512+64+8+1, 64+8+1, 8+1, 1, 0};
+
+static int binOffsets[] = {512+64+8+1, 64+8+1, 8+1, 1, 0};
+#define _binFirstShift 17	/* How much to shift to get to finest bin. */
+#define _binNextShift 3		/* How much to shift to get to next larger bin. */
+
+int binLevelsExtended()
+/* Return number of levels to bins. */
+{
+return ArraySize(binOffsetsExtended);
+}
+
+int binLevels()
+/* Return number of levels to bins. */
+{
+return ArraySize(binOffsets);
+}
+
+int binFirstShift()
+/* Return amount to shift a number to get to finest bin. */
+{
+return _binFirstShift;
+}
+
+int binNextShift()
+/* Return amount to shift a number to get to next coarser bin. */
+{
+return _binNextShift;
+}
+
+int binOffsetExtended(int level)
+/* Return offset for bins of a given level. */
+{
+assert(level >= 0 && level < ArraySize(binOffsetsExtended));
+return binOffsetsExtended[level] + _binOffsetOldToExtended;
+}
+
+int binOffset(int level)
+/* Return offset for bins of a given level. */
+{
+assert(level >= 0 && level < ArraySize(binOffsets));
+return binOffsets[level];
+}
+
+static int binFromRangeStandard(int start, int end)
+/* Given start,end in chromosome coordinates assign it
+ * a bin.   There's a bin for each 128k segment, for each
+ * 1M segment, for each 8M segment, for each 64M segment,
+ * and for each chromosome (which is assumed to be less than
+ * 512M.)  A range goes into the smallest bin it will fit in. */
+{
+int startBin = start, endBin = end-1, i;
+startBin >>= _binFirstShift;
+endBin >>= _binFirstShift;
+for (i=0; i<ArraySize(binOffsets); ++i)
+    {
+    if (startBin == endBin)
+        return binOffsets[i] + startBin;
+    startBin >>= _binNextShift;
+    endBin >>= _binNextShift;
+    }
+errAbort("start %d, end %d out of range in findBin (max is 512M)", start, end);
+return 0;
+}
+
+static int binFromRangeExtended(int start, int end)
+/* Given start,end in chromosome coordinates assign it
+ * a bin.   There's a bin for each 128k segment, for each
+ * 1M segment, for each 8M segment, for each 64M segment,
+ * for each 512M segment, and one top level bin for 4Gb.
+ *	Note, since start and end are int's, the practical limit
+ *	is up to 2Gb-1, and thus, only four result bins on the second
+ *	level.
+ * A range goes into the smallest bin it will fit in. */
+{
+int startBin = start, endBin = end-1, i;
+startBin >>= _binFirstShift;
+endBin >>= _binFirstShift;
+for (i=0; i<ArraySize(binOffsetsExtended); ++i)
+    {
+    if (startBin == endBin)
+	return _binOffsetOldToExtended + binOffsetsExtended[i] + startBin;
+    startBin >>= _binNextShift;
+    endBin >>= _binNextShift;
+    }
+errAbort("start %d, end %d out of range in findBin (max is 2Gb)", start, end);
+return 0;
+}
+
+int binFromRange(int start, int end)
+/* return bin that this start-end segment is in */
+{
+if (end <= BINRANGE_MAXEND_512M)
+    return binFromRangeStandard(start, end);
+else
+    return binFromRangeExtended(start, end);
+}
+
+static int binFromRangeBinKeeperExtended(int start, int end)
+/* This is just like binFromRangeExtended() above, but it doesn't limit
+ * the answers to the range from _binOffsetOldToExtended and up.
+ *	It simply uses the whole new bin scheme as if it was the only
+ *	one.
+ */
+{
+int startBin = start, endBin = end-1, i;
+startBin >>= _binFirstShift;
+endBin >>= _binFirstShift;
+for (i=0; i<ArraySize(binOffsetsExtended); ++i)
+    {
+    if (startBin == endBin)
+	return binOffsetsExtended[i] + startBin;
+    startBin >>= _binNextShift;
+    endBin >>= _binNextShift;
+    }
+errAbort("start %d, end %d out of range in findBin (max is 2Gb)", start, end);
+return 0;
+}
+
+struct binKeeper *binKeeperNew(int minPos, int maxPos)
+/* Create new binKeeper that can cover range. */
+{
+int binCount;
+struct binKeeper *bk;
+if (minPos < 0 || maxPos < 0 || minPos > maxPos)
+    errAbort("bad range %d,%d in binKeeperNew", minPos, maxPos);
+
+binCount = binFromRangeBinKeeperExtended(maxPos-1, maxPos) + 1;
+AllocVar(bk);
+bk->minPos = minPos;
+bk->maxPos = maxPos;
+bk->binCount = binCount;
+AllocArray(bk->binLists, binCount);
+return bk;
+}
+
+void binKeeperFree(struct binKeeper **pBk)
+/* Free up a bin keeper. */
+{
+struct binKeeper *bk = *pBk;
+if (bk != NULL)
+    {
+    int i;
+    for (i=0; i<bk->binCount; ++i)
+	slFreeList(&bk->binLists[i]);
+    freeMem(bk->binLists);
+    freez(pBk);
+    }
+}
+
+void binKeeperAdd(struct binKeeper *bk, int start, int end, void *val)
+/* Add item to binKeeper. */ 
+{
+int bin;
+struct binElement *el;
+if (start < bk->minPos || end > bk->maxPos || start > end)
+    errAbort("(%d %d) out of range (%d %d) in binKeeperAdd", 
+    	start, end, bk->minPos, bk->maxPos);
+bin = binFromRangeBinKeeperExtended(start, end);
+assert(bin < bk->binCount);
+AllocVar(el);
+el->start = start;
+el->end = end;
+el->val = val;
+slAddHead(&bk->binLists[bin], el);
+}
+
+int binElementCmpStart(const void *va, const void *vb)
+/* Compare to sort based on start. */
+{
+const struct binElement *a = *((struct binElement **)va);
+const struct binElement *b = *((struct binElement **)vb);
+return a->start - b->start;
+}
+
+struct binElement *binKeeperFind(struct binKeeper *bk, int start, int end)
+/* Return a list of all items in binKeeper that intersect range.
+ * Free this list with slFreeList. */
+{
+struct binElement *list = NULL, *newEl, *el;
+int startBin, endBin;
+int i,j;
+
+if (start < bk->minPos) start = bk->minPos;
+if (end > bk->maxPos) end = bk->maxPos;
+if (start >= end) return NULL;
+startBin = (start>>_binFirstShift);
+endBin = ((end-1)>>_binFirstShift);
+for (i=0; i<ArraySize(binOffsetsExtended); ++i)
+    {
+    int offset = binOffsetsExtended[i];
+    for (j=startBin+offset; j<=endBin+offset; ++j)
+        {
+	for (el=bk->binLists[j]; el != NULL; el = el->next)
+	    {
+	    if (rangeIntersection(el->start, el->end, start, end) > 0)
+	        {
+		newEl = CloneVar(el);
+		slAddHead(&list, newEl);
+		}
+	    }
+	}
+    startBin >>= _binNextShift;
+    endBin >>= _binNextShift;
+    }
+return list;
+}
+
+boolean binKeeperAnyOverlap(struct binKeeper *bk, int start, int end)
+/* Return TRUE if start/end overlaps with any items in binKeeper. */
+{
+struct binElement *el;
+int startBin, endBin;
+int i,j;
+
+if (start < bk->minPos) start = bk->minPos;
+if (end > bk->maxPos) end = bk->maxPos;
+if (start >= end) return FALSE;
+startBin = (start>>_binFirstShift);
+endBin = ((end-1)>>_binFirstShift);
+for (i=0; i<ArraySize(binOffsetsExtended); ++i)
+    {
+    int offset = binOffsetsExtended[i];
+    for (j=startBin+offset; j<=endBin+offset; ++j)
+        {
+	for (el=bk->binLists[j]; el != NULL; el = el->next)
+	    {
+	    if (rangeIntersection(el->start, el->end, start, end) > 0)
+	        {
+		return TRUE;
+		}
+	    }
+	}
+    startBin >>= _binNextShift;
+    endBin >>= _binNextShift;
+    }
+return FALSE;
+}
+
+void binKeeperReplaceVal(struct binKeeper *bk, int start, int end,
+	void *oldVal, void *newVal)
+/* Replace occurences of old val in range from start->end with newVal */
+{
+struct binElement *el;
+int startBin, endBin;
+int i,j;
+
+if (start < bk->minPos) start = bk->minPos;
+if (end > bk->maxPos) end = bk->maxPos;
+if (start >= end) return;
+startBin = (start>>_binFirstShift);
+endBin = ((end-1)>>_binFirstShift);
+for (i=0; i<ArraySize(binOffsetsExtended); ++i)
+    {
+    int offset = binOffsetsExtended[i];
+    for (j=startBin+offset; j<=endBin+offset; ++j)
+        {
+	for (el=bk->binLists[j]; el != NULL; el = el->next)
+	    {
+	    if (rangeIntersection(el->start, el->end, start, end) > 0)
+	        {
+		if (el->val == oldVal)
+		    {
+		    el->val = newVal;
+		    }
+		}
+	    }
+	}
+    startBin >>= _binNextShift;
+    endBin >>= _binNextShift;
+    }
+}
+
+
+struct binElement *binKeeperFindSorted(struct binKeeper *bk, int start, int end)
+/* Like binKeeperFind, but sort list on start coordinates. */
+{
+struct binElement *list = binKeeperFind(bk, start, end);
+slSort(&list, binElementCmpStart);
+return list;
+}
+
+struct binElement *binKeeperFindAll(struct binKeeper *bk)
+/* Get all elements sorted. */
+{
+return binKeeperFindSorted(bk, bk->minPos, bk->maxPos);
+}
+
+struct binElement *binKeeperFindLowest(struct binKeeper *bk, int start, int end)
+/* Find the lowest overlapping range. Quick even if search range large */
+{
+struct binElement *first = NULL, *el;
+int startBin = (start>>_binFirstShift), endBin = ((end-1)>>_binFirstShift);
+int i,j;
+
+/* Search the possible range of bins at each level, looking for lowest.  Once
+ * an overlaping range is found at a level, continue with next level, however
+ * must search an entire bin as they are not ordered. */
+for (i=0; i<ArraySize(binOffsetsExtended); ++i)
+    {
+    int offset = binOffsetsExtended[i];
+    boolean foundOne = FALSE;
+    for (j=startBin+offset; (j<=endBin+offset) && (!foundOne); ++j)
+        {
+	for (el=bk->binLists[j]; el != NULL; el = el->next)
+	    {
+            if ((rangeIntersection(el->start, el->end, start, end) > 0)
+                && ((first == NULL) || (el->start < first->start)
+                    || ((el->start == first->start)
+                        && (el->end < first->end))))
+                {
+                first = el;
+                foundOne = TRUE;
+		}
+	    }
+	}
+    startBin >>= _binNextShift;
+    endBin >>= _binNextShift;
+    }
+return first;
+}
+
+
+void binKeeperRemove(struct binKeeper *bk, int start, int end, void *val)
+/* Remove item from binKeeper. */ 
+{
+int bin = binFromRangeBinKeeperExtended(start, end);
+struct binElement **pList = &bk->binLists[bin], *newList = NULL, *el, *next;
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    if (el->val == val && el->start == start && el->end == end)
+        {
+	freeMem(el);
+	}
+    else
+        {
+	slAddHead(&newList, el);
+	}
+    }
+slReverse(&newList);
+*pList = newList;
+}
+
+struct binKeeperCookie binKeeperFirst(struct binKeeper *bk)
+/* Return an object to use by binKeeperNext() to traverse the binElements.
+ * The first call to binKeeperNext() will return the first entry in the
+ * table. */
+{
+struct binKeeperCookie cookie;
+cookie.bk = bk;
+cookie.blIdx = 0;
+cookie.nextBel = bk->binLists[0];
+return cookie;
+}
+
+struct binElement* binKeeperNext(struct binKeeperCookie *cookie)
+/* Return the next entry in the binKeeper table.  */
+{
+/* if we don't have a next, move down bin list until we find one */
+while ((cookie->nextBel == NULL)
+       && (++cookie->blIdx < cookie->bk->binCount))
+    cookie->nextBel = cookie->bk->binLists[cookie->blIdx];
+if (cookie->blIdx >= cookie->bk->binCount)
+    return NULL;  /* no more */
+else
+    {
+    struct binElement* bel = cookie->nextBel;
+    cookie->nextBel = cookie->nextBel->next;
+    return bel;
+    }
+}
diff --git a/gbtools/src/blatSrc/lib/bits.c b/gbtools/src/blatSrc/lib/bits.c
new file mode 100644
index 0000000..1cca72c
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/bits.c
@@ -0,0 +1,418 @@
+/* bits - handle operations on arrays of bits. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "bits.h"
+
+
+
+static Bits oneBit[8] = { 0x80, 0x40, 0x20, 0x10, 0x8, 0x4, 0x2, 0x1};
+static Bits leftMask[8] = {0xFF, 0x7F, 0x3F, 0x1F,  0xF,  0x7,  0x3,  0x1,};
+static Bits rightMask[8] = {0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE, 0xFF,};
+int bitsInByte[256];
+
+static boolean inittedBitsInByte = FALSE;
+
+void bitsInByteInit()
+/* Initialize bitsInByte array. */
+{
+int i;
+
+if (!inittedBitsInByte)
+    {
+    inittedBitsInByte = TRUE;
+    for (i=0; i<256; ++i)
+        {
+	int count = 0;
+	if (i&1)
+	    count = 1;
+	if (i&2)
+	    ++count;
+	if (i&4)
+	    ++count;
+	if (i&8)
+	    ++count;
+	if (i&0x10)
+	    ++count;
+	if (i&0x20)
+	    ++count;
+	if (i&0x40)
+	    ++count;
+	if (i&0x80)
+	    ++count;
+	bitsInByte[i] = count;
+	}
+    }
+}
+
+Bits *bitAlloc(int bitCount)
+/* Allocate bits. */
+{
+int byteCount = ((bitCount+7)>>3);
+return needLargeZeroedMem(byteCount);
+}
+
+Bits *bitRealloc(Bits *b, int bitCount, int newBitCount)
+/* Resize a bit array.  If b is null, allocate a new array */
+{
+int byteCount = ((bitCount+7)>>3);
+int newByteCount = ((newBitCount+7)>>3);
+return needLargeZeroedMemResize(b, byteCount, newByteCount);
+}
+
+Bits *bitClone(Bits* orig, int bitCount)
+/* Clone bits. */
+{
+int byteCount = ((bitCount+7)>>3);
+Bits* bits = needLargeZeroedMem(byteCount);
+memcpy(bits, orig, byteCount);
+return bits;
+}
+
+void bitFree(Bits **pB)
+/* Free bits. */
+{
+freez(pB);
+}
+
+Bits *lmBitAlloc(struct lm *lm,int bitCount)
+// Allocate bits.  Must supply local memory.
+{
+assert(lm != NULL);
+int byteCount = ((bitCount+7)>>3);
+return lmAlloc(lm,byteCount);
+}
+
+Bits *lmBitRealloc(struct lm *lm,Bits *b, int bitCount, int newBitCount)
+// Resize a bit array.  If b is null, allocate a new array.  Must supply local memory.
+{
+assert(lm != NULL);
+int byteCount = ((bitCount+7)>>3);
+int newByteCount = ((newBitCount+7)>>3);
+return lmAllocMoreMem(lm, b ,byteCount, newByteCount);
+}
+
+Bits *lmBitClone(struct lm *lm,Bits* orig, int bitCount)
+// Clone bits.  Must supply local memory.
+{
+assert(lm != NULL);
+int byteCount = ((bitCount+7)>>3);
+Bits* bits = lmAlloc(lm,byteCount);
+memcpy(bits, orig, byteCount);
+return bits;
+}
+
+void bitSetOne(Bits *b, int bitIx)
+/* Set a single bit. */
+{
+b[bitIx>>3] |= oneBit[bitIx&7];
+}
+
+void bitClearOne(Bits *b, int bitIx)
+/* Clear a single bit. */
+{
+b[bitIx>>3] &= ~oneBit[bitIx&7];
+}
+
+void bitSetRange(Bits *b, int startIx, int bitCount)
+/* Set a range of bits. */
+{
+if (bitCount <= 0)
+    return;
+int endIx = (startIx + bitCount - 1);
+int startByte = (startIx>>3);
+int endByte = (endIx>>3);
+int startBits = (startIx&7);
+int endBits = (endIx&7);
+int i;
+
+if (startByte == endByte)
+    {
+    b[startByte] |= (leftMask[startBits] & rightMask[endBits]);
+    return;
+    }
+b[startByte] |= leftMask[startBits];
+for (i = startByte+1; i<endByte; ++i)
+    b[i] = 0xff;
+b[endByte] |= rightMask[endBits];
+}
+
+
+boolean bitReadOne(Bits *b, int bitIx)
+/* Read a single bit. */
+{
+return (b[bitIx>>3] & oneBit[bitIx&7]) != 0;
+}
+
+int bitCountRange(Bits *b, int startIx, int bitCount)
+/* Count number of bits set in range. */
+{
+if (bitCount <= 0)
+    return 0;
+int endIx = (startIx + bitCount - 1);
+int startByte = (startIx>>3);
+int endByte = (endIx>>3);
+int startBits = (startIx&7);
+int endBits = (endIx&7);
+int i;
+int count = 0;
+
+if (!inittedBitsInByte)
+    bitsInByteInit();
+if (startByte == endByte)
+    return bitsInByte[b[startByte] & leftMask[startBits] & rightMask[endBits]];
+count = bitsInByte[b[startByte] & leftMask[startBits]];
+for (i = startByte+1; i<endByte; ++i)
+    count += bitsInByte[b[i]];
+count += bitsInByte[b[endByte] & rightMask[endBits]];
+return count;
+}
+
+int bitFind(Bits *b, int startIx, boolean val, int bitCount)
+/* Find the index of the the next set bit. */
+{
+unsigned char notByteVal = val ? 0 : 0xff;
+int iBit = startIx;
+int endByte = ((bitCount-1)>>3);
+int iByte;
+
+/* scan initial byte */
+while (((iBit & 7) != 0) && (iBit < bitCount))
+    {
+    if (bitReadOne(b, iBit) == val)
+        return iBit;
+    iBit++;
+    }
+
+/* scan byte at a time, if not already in last byte */
+iByte = (iBit >> 3);
+if (iByte < endByte)
+    {
+    while ((iByte < endByte) && (b[iByte] == notByteVal))
+        iByte++;
+    iBit = iByte << 3;
+    }
+
+/* scan last byte */
+while (iBit < bitCount)
+    {
+    if (bitReadOne(b, iBit) == val)
+        return iBit;
+    iBit++;
+    }
+ return bitCount;  /* not found */
+}
+
+int bitFindSet(Bits *b, int startIx, int bitCount)
+/* Find the index of the the next set bit. */
+{
+return bitFind(b, startIx, TRUE, bitCount);
+}
+
+int bitFindClear(Bits *b, int startIx, int bitCount)
+/* Find the index of the the next clear bit. */
+{
+return bitFind(b, startIx, FALSE, bitCount);
+}
+
+void bitClear(Bits *b, int bitCount)
+/* Clear many bits (possibly up to 7 beyond bitCount). */
+{
+int byteCount = ((bitCount+7)>>3);
+zeroBytes(b, byteCount);
+}
+
+void bitClearRange(Bits *b, int startIx, int bitCount)
+/* Clear a range of bits. */
+{
+if (bitCount <= 0)
+    return;
+int endIx = (startIx + bitCount - 1);
+int startByte = (startIx>>3);
+int endByte = (endIx>>3);
+int startBits = (startIx&7);
+int endBits = (endIx&7);
+int i;
+
+if (startByte == endByte)
+    {
+    b[startByte] &= ~(leftMask[startBits] & rightMask[endBits]);
+    return;
+    }
+b[startByte] &= ~leftMask[startBits];
+for (i = startByte+1; i<endByte; ++i)
+    b[i] = 0x00;
+b[endByte] &= ~rightMask[endBits];
+}
+
+void bitAnd(Bits *a, Bits *b, int bitCount)
+/* And two bitmaps.  Put result in a. */
+{
+int byteCount = ((bitCount+7)>>3);
+while (--byteCount >= 0)
+    {
+    *a = (*a & *b++);
+    a++;
+    }
+}
+
+int bitAndCount(Bits *a, Bits *b, int bitCount)
+// Without altering 2 bitmaps, count the AND bits.
+{
+int byteCount = ((bitCount+7)>>3);
+int count = 0;
+if (!inittedBitsInByte)
+    bitsInByteInit();
+while (--byteCount >= 0)
+    count += bitsInByte[(*a++ & *b++)];
+
+return count;
+}
+
+void bitOr(Bits *a, Bits *b, int bitCount)
+/* Or two bitmaps.  Put result in a. */
+{
+int byteCount = ((bitCount+7)>>3);
+while (--byteCount >= 0)
+    {
+    *a = (*a | *b++);
+    a++;
+    }
+}
+
+int bitOrCount(Bits *a, Bits *b, int bitCount)
+// Without altering 2 bitmaps, count the OR'd bits.
+{
+int byteCount = ((bitCount+7)>>3);
+int count = 0;
+if (!inittedBitsInByte)
+    bitsInByteInit();
+while (--byteCount >= 0)
+    count += bitsInByte[(*a++ | *b++)];
+
+return count;
+}
+
+void bitXor(Bits *a, Bits *b, int bitCount)
+{
+int byteCount = ((bitCount+7)>>3);
+while (--byteCount >= 0)
+    {
+    *a = (*a ^ *b++);
+    a++;
+    }
+}
+
+int bitXorCount(Bits *a, Bits *b, int bitCount)
+// Without altering 2 bitmaps, count the XOR'd bits.
+{
+int byteCount = ((bitCount+7)>>3);
+int count = 0;
+if (!inittedBitsInByte)
+    bitsInByteInit();
+while (--byteCount >= 0)
+    count += bitsInByte[(*a++ ^ *b++)];
+
+return count;
+}
+
+void bitNot(Bits *a, int bitCount)
+/* Flip all bits in a. */
+{
+int byteCount = ((bitCount+7)>>3);
+while (--byteCount >= 0)
+    {
+    *a = ~*a;
+    a++;
+    }
+}
+
+void bitReverseRange(Bits *bits, int startIx, int bitCount)
+// Reverses bits in range (e.g. 110010 becomes 010011)
+{
+if (bitCount <= 0)
+    return;
+int ixA = startIx;
+int ixB = (startIx + bitCount - 1);
+for ( ;ixA < ixB; ixA++, ixB--)
+    {
+    boolean bitA = bitReadOne(bits, ixA);
+    boolean bitB = bitReadOne(bits, ixB);
+    if (!bitA && bitB)
+        {
+        bitSetOne(  bits, ixA);
+        bitClearOne(bits, ixB);
+        }
+    else if (bitA && !bitB)
+        {
+        bitClearOne(bits, ixA);
+        bitSetOne(  bits, ixB);
+        }
+    }
+}
+
+
+void bitPrint(Bits *a, int startIx, int bitCount, FILE* out)
+/* Print part or all of bit map as a string of 0s and 1s.  Mostly useful for
+ * debugging */
+{
+int i;
+for (i = startIx; i < bitCount; i++)
+    {
+    if (bitReadOne(a, i))
+        fputc('1', out);
+    else
+        fputc('0', out);
+    }
+fputc('\n', out);
+}
+
+void bitsOut(FILE* out, Bits *bits, int startIx, int bitCount, boolean onlyOnes)
+// Print part or all of bit map as a string of 0s and 1s.
+// If onlyOnes, enclose result in [] and use ' ' instead of '0'.
+{
+if (onlyOnes)
+    fputc('[', out);
+
+int ix = startIx;
+for ( ; ix < bitCount; ix++)
+    {
+    if (bitReadOne(bits, ix))
+        fputc('1', out);
+    else
+        {
+        if (onlyOnes)
+            fputc(' ', out);
+        else
+            fputc('0', out);
+        }
+    }
+if (onlyOnes)
+    fputc(']', out);
+}
+
+Bits *bitsIn(struct lm *lm,char *bitString, int len)
+// Returns a bitmap from a string of 1s and 0s.  Any non-zero, non-blank char sets a bit.
+// Returned bitmap is the size of len even if that is longer than the string.
+// Optionally supply local memory.  Note does NOT handle enclosing []s printed with bitsOut().
+{
+if (bitString == NULL || len == 0)
+    return NULL;
+
+Bits *bits = NULL;
+if (lm != NULL)
+    bits = lmBitAlloc(lm,len);
+else
+    bits = bitAlloc(len);
+
+int ix = 0;
+for ( ;ix < len && bitString[ix] != '\0'; ix++)
+    {
+    if (bitString[ix] != '0' && bitString[ix] != ' ')
+        bitSetOne(bits, ix);
+    }
+return bits;
+}
+
diff --git a/gbtools/src/blatSrc/lib/blastOut.c b/gbtools/src/blatSrc/lib/blastOut.c
new file mode 100644
index 0000000..ea36c2c
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/blastOut.c
@@ -0,0 +1,833 @@
+/* blastOut.c - stuff to output an alignment in blast format. */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+#include "common.h"
+#include "linefile.h"
+#include "hash.h"
+#include "axt.h"
+#include "obscure.h"
+#include "genoFind.h"
+
+
+struct axtRef
+/* A reference to an axt. */
+    {
+    struct axtRef *next;
+    struct axt *axt;
+    };
+
+static int axtRefCmpScore(const void *va, const void *vb)
+/* Compare to sort based on score. */
+{
+const struct axtRef *a = *((struct axtRef **)va);
+const struct axtRef *b = *((struct axtRef **)vb);
+return b->axt->score - a->axt->score;
+}
+
+struct targetHits
+/* Collection of hits to a single target. */
+    {
+    struct targetHits *next;
+    char *name;	    	    /* Target name */
+    int size;		    /* Target size */
+    struct axtRef *axtList; /* List of axts, sorted by score. */
+    int score;		    /* Score of best element */
+    };
+
+static void targetHitsFree(struct targetHits **pObj)
+/* Free one target hits structure. */
+{
+struct targetHits *obj = *pObj;
+if (obj != NULL)
+    {
+    freeMem(obj->name);
+    slFreeList(&obj->axtList);
+    freez(pObj);
+    }
+}
+
+static void targetHitsFreeList(struct targetHits **pList)
+/* Free a list of dynamically allocated targetHits's */
+{
+struct targetHits *el, *next;
+
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    targetHitsFree(&el);
+    }
+*pList = NULL;
+}
+
+
+static int targetHitsCmpScore(const void *va, const void *vb)
+/* Compare to sort based on score. */
+{
+const struct targetHits *a = *((struct targetHits **)va);
+const struct targetHits *b = *((struct targetHits **)vb);
+
+return b->score - a->score;
+}
+
+static int blastzToWublastScore(int bzScore)
+/* Convert from 100 points/match blastz score to 5 points/match
+ * wu-blast score. */
+{
+return bzScore/19;
+}
+
+static double blastzScoreToWuBits(int bzScore, boolean isProt)
+/* Convert from blastz score to bit score.  The magic number's
+ * here are taken from comparing wu-blast scores to axtScores on
+ * a couple of sequences.  This doesn't really seem to be a bit
+ * score.  It's not very close to 2 bits per base. */
+{
+int wuScore = blastzToWublastScore(bzScore);
+if (isProt)
+    return wuScore * 0.3545;
+else
+    return wuScore * 0.1553;
+}
+
+static double blastzScoreToWuExpectation(int bzScore, double databaseSize)
+/* I'm puzzled by the wu-blast expectation score.  I would
+ * think it would be  databaseSize / (2^bitScore)  but
+ * it's not.   I think the best I can do is approximate
+ * it with something scaled to be close to this expectation. */
+{
+double logProbOne = -log(2) * bzScore / 32.1948;
+return databaseSize * exp(logProbOne);
+}
+
+static int blastzScoreToNcbiBits(int bzScore)
+/* Convert blastz score to bit score in NCBI sense. */
+{
+return round(bzScore * 0.0205);
+}
+
+static int blastzScoreToNcbiScore(int bzScore)
+/* Conver blastz score to NCBI matrix score. */
+{
+return round(bzScore * 0.0529);
+}
+
+static double blastzScoreToNcbiExpectation(int bzScore)
+/* Convert blastz score to expectation in NCBI sense. */
+{
+double bits = bzScore * 0.0205;
+double logProb = -bits*log(2);
+return 3.0e9 * exp(logProb);
+}
+
+static double expectationToProbability(double e)
+/* Convert expected number of hits to probability of at least
+ * one hit.  This is a crude approximation, but actually pretty precise
+ * for e < 0.1, which is all that really matters.... */
+{
+if (e < 0.999)
+    return e;
+else
+    return 0.999;
+}
+
+static int countMatches(char *a, char *b, int size)
+/* Count number of characters that match between a and b. */
+{
+int count = 0;
+int i;
+for (i=0; i<size; ++i)
+    if (toupper(a[i]) == toupper(b[i]))
+        ++count;
+return count;
+}
+
+static int countGaps(char *a, char *b, int size)
+/* Count number of inserts in either strand. */
+{
+int count = 0;
+int i;
+for (i=0; i<size; ++i)
+   {
+   if (a[i] == '-')
+       ++count;
+   if (b[i] == '-')
+       ++count;
+   }
+return count;
+}
+
+static int countGapOpens(char *a, char *b, int size)
+/* Count number of inserts in either strand. */
+{
+int i, count = 0;
+boolean inGap = FALSE;
+for (i=0; i<size; ++i)
+    {
+    if (a[i] == '-' || b[i] == '-')
+        {
+	if (!inGap)
+	    {
+	    ++count;
+	    inGap = TRUE;
+	    }
+	}
+    else
+        {
+	inGap = FALSE;
+	}
+    }
+return count;
+}
+
+
+static int countPositives(char *a, char *b, int size)
+/* Count positive (not necessarily identical) protein matches. */
+{
+int count = 0;
+int i;
+struct axtScoreScheme *ss = axtScoreSchemeProteinDefault();
+for (i=0; i<size; ++i)
+    {
+    if (ss->matrix[(int)a[i]][(int)b[i]] > 0)
+        ++count;
+    }
+return count;
+}
+
+static int plusStrandPos(int pos, int size, char strand, boolean isEnd)
+/* Return position on plus strand, one based. */
+{
+if (strand == '-')
+    {
+    pos = size - pos;
+    if (isEnd)
+       ++pos;
+    }
+else
+    {
+    if (!isEnd)
+        ++pos;
+    }
+return pos;
+}
+
+static int calcDigitCount(struct axt *axt, int tSize, int qSize)
+/* Figure out how many digits needed for blast position display. */
+{
+int tDig, qDig;
+if (axt->qStrand == '-')
+    qDig = digitsBaseTen(qSize - axt->qStart + 1);
+else
+    qDig = digitsBaseTen(axt->qEnd);
+if (axt->tStrand == '-')
+    tDig = digitsBaseTen(tSize - axt->tStart + 1);
+else
+    tDig = digitsBaseTen(axt->tEnd);
+return max(tDig, qDig);
+}
+
+static void blastiodAxtOutput(FILE *f, struct axt *axt, int tSize, int qSize, 
+	int lineSize, boolean isProt, boolean isTranslated)
+/* Output base-by-base part of alignment in blast-like fashion. */
+{
+int tOff = axt->tStart;
+int dt = (isTranslated ? 3 : 1);
+int qOff = axt->qStart;
+int lineStart, lineEnd, i;
+int digits = calcDigitCount(axt, tSize, qSize);
+struct axtScoreScheme *ss = NULL;
+
+if (isProt)
+    ss = axtScoreSchemeProteinDefault();
+for (lineStart = 0; lineStart < axt->symCount; lineStart = lineEnd)
+    {
+    lineEnd = lineStart + lineSize;
+    if (lineEnd > axt->symCount) lineEnd = axt->symCount;
+    fprintf(f, "Query: %-*d ", digits, plusStrandPos(qOff, qSize, axt->qStrand, FALSE));
+    for (i=lineStart; i<lineEnd; ++i)
+	{
+	char c = axt->qSym[i];
+	fputc(c, f);
+	if (c != '-')
+	    ++qOff;
+	}
+    fprintf(f, " %-d\n", plusStrandPos(qOff, qSize, axt->qStrand, TRUE));
+    fprintf(f, "       %*s ", digits, " ");
+    for (i=lineStart; i<lineEnd; ++i)
+        {
+	char q, t, c;
+	q = axt->qSym[i];
+	t = axt->tSym[i];
+	if (isProt)
+	    {
+	    if (q == t)
+	        c = q;
+	    else if (ss->matrix[(int)q][(int)t] > 0)
+	        c = '+';
+	    else
+	        c = ' ';
+	    }
+	else
+	    c = ((toupper(q) == toupper(t)) ? '|' : ' ');
+
+	fputc(c, f);
+	}
+    fprintf(f, "\n");
+    fprintf(f, "Sbjct: %-*d ", digits, plusStrandPos(tOff, tSize, axt->tStrand, FALSE));
+    for (i=lineStart; i<lineEnd; ++i)
+	{
+	char c = axt->tSym[i];
+	fputc(c, f);
+	if (c != '-')
+	    tOff += dt;
+	}
+    fprintf(f, " %-d\n", plusStrandPos(tOff, tSize, axt->tStrand, TRUE));
+    fprintf(f, "\n");
+    }
+}
+
+static struct targetHits *bundleIntoTargets(struct axtBundle *abList)
+/* BLAST typically outputs everything on the same query and target
+ * in one clump.  This routine rearranges axts in abList to do this. */
+{
+struct targetHits *targetList = NULL, *target;
+struct hash *targetHash = newHash(10);
+struct axtBundle *ab;
+struct axtRef *ref;
+
+/* Build up a list of targets in database hit by query sorted by
+ * score of hits. */
+for (ab = abList; ab != NULL; ab = ab->next)
+    {
+    struct axt *axt;
+    for (axt = ab->axtList; axt != NULL; axt = axt->next)
+	{
+	target = hashFindVal(targetHash, axt->tName);
+	if (target == NULL)
+	    {
+	    AllocVar(target);
+	    slAddHead(&targetList, target);
+	    hashAdd(targetHash, axt->tName, target);
+	    target->name = cloneString(axt->tName);
+	    target->size = ab->tSize;
+	    }
+	if (axt->score > target->score)
+	    target->score = axt->score;
+	AllocVar(ref);
+	ref->axt = axt;
+	slAddHead(&target->axtList, ref);
+	}
+    }
+slSort(&targetList, targetHitsCmpScore);
+for (target = targetList; target != NULL; target = target->next)
+    slSort(&target->axtList, axtRefCmpScore);
+
+hashFree(&targetHash);
+return targetList;
+}
+
+static char *nameForStrand(char strand)
+/* Return Plus/Minus for +/- */
+{
+if (strand == '-')
+    return "Minus";
+else
+    return "Plus";
+}
+
+static char *progType(boolean isProt, struct axtBundle *ab, boolean isUpper)
+/* Return blast 'program' */
+{
+if (!isProt)
+    return isUpper ? "BLASTN" : "blastn";
+else
+    {
+    if (ab->axtList->frame != 0)
+        return isUpper ? "TBLASTN" : "tblastn";
+    else
+        return isUpper ? "BLASTP" : "blastp";
+    }
+}
+
+static void wuBlastOut(struct axtBundle *abList, int queryIx, boolean isProt, 
+	FILE *f, 
+	char *databaseName, int databaseSeqCount, double databaseLetterCount, 
+	char *ourId)
+/* Do wublast-like output at end of processing query. */
+{
+char asciiNum[32];
+struct targetHits *targetList = NULL, *target;
+char *queryName;
+int isRc;
+int querySize = abList->qSize;
+boolean isTranslated = (abList->axtList->frame != 0);
+
+/* Print out stuff that doesn't depend on query or database. */
+if (ourId == NULL)
+    ourId = "axtBlastOut";
+fprintf(f, "%s 2.0MP-WashU [%s]\n", progType(isProt, abList, TRUE), ourId);
+fprintf(f, "\n");
+fprintf(f, "Copyright (C) 2000-2002 Jim Kent\n");
+fprintf(f, "All Rights Reserved\n");
+fprintf(f, "\n");
+fprintf(f, "Reference:  Kent, WJ. (2002) BLAT - The BLAST-like alignment tool\n");
+fprintf(f, "\n");
+if (!isProt)
+    {
+    fprintf(f, "Notice:  this program and its default parameter settings are optimized to find\n");
+    fprintf(f, "nearly identical sequences very rapidly.  For slower but more sensitive\n");
+    fprintf(f, "alignments please use other methods.\n");
+    fprintf(f, "\n");
+    }
+
+/* Print query and database info. */
+queryName = abList->axtList->qName;
+fprintf(f, "Query=  %s\n", queryName);
+fprintf(f, "        (%d letters; record %d)\n", abList->qSize, queryIx);
+fprintf(f, "\n");
+fprintf(f, "Database:  %s\n",  databaseName);
+sprintLongWithCommas(asciiNum, databaseLetterCount);
+fprintf(f, "           %d sequences; %s total letters\n",  databaseSeqCount, asciiNum);
+fprintf(f, "Searching....10....20....30....40....50....60....70....80....90....100%% done\n");
+fprintf(f, "\n");
+
+targetList = bundleIntoTargets(abList);
+
+/* Print out summary of hits. */
+fprintf(f, "                                                                     Smallest\n");
+fprintf(f, "                                                                       Sum\n");
+fprintf(f, "                                                              High  Probability\n");
+fprintf(f, "Sequences producing High-scoring Segment Pairs:              Score  P(N)      N\n");
+fprintf(f, "\n");
+for (target = targetList; target != NULL; target = target->next)
+    {
+    double expectation = blastzScoreToWuExpectation(target->score, databaseLetterCount);
+    double p = expectationToProbability(expectation);
+    fprintf(f, "%-61s %4d  %8.1e %2d\n", target->name, 
+    	blastzToWublastScore(target->score), p, slCount(target->axtList));
+    }
+
+/* Print out details on each target. */
+for (target = targetList; target != NULL; target = target->next)
+    {
+    fprintf(f, "\n\n>%s\n", target->name);
+    fprintf(f, "        Length = %d\n", target->size);
+    fprintf(f, "\n");
+    for (isRc=0; isRc <= 1; ++isRc)
+	{
+	boolean saidStrand = FALSE;
+	char strand = (isRc ? '-' : '+');
+	char *strandName = nameForStrand(strand);
+	struct axtRef *ref;
+	struct axt *axt;
+	for (ref = target->axtList; ref != NULL; ref = ref->next)
+	    {
+	    axt = ref->axt;
+	    if (axt->qStrand == strand)
+		{
+		int matches = countMatches(axt->qSym, axt->tSym, axt->symCount);
+		int positives = countPositives(axt->qSym, axt->tSym, axt->symCount);
+		if (!saidStrand)
+		    {
+		    saidStrand = TRUE;
+		    if (!isProt)
+			fprintf(f, "  %s Strand HSPs:\n\n", strandName);
+		    }
+		fprintf(f, " Score = %d (%2.1f bits), Expect = %5.1e, P = %5.1e\n",
+		     blastzToWublastScore(axt->score), 
+		     blastzScoreToWuBits(axt->score, isProt),
+		     blastzScoreToWuExpectation(axt->score, databaseLetterCount),
+		     blastzScoreToWuExpectation(axt->score, databaseLetterCount));
+		fprintf(f, " Identities = %d/%d (%d%%), Positives = %d/%d (%d%%)",
+		     matches, axt->symCount, round(100.0 * matches / axt->symCount),
+		     positives, axt->symCount, round(100.0 * positives / axt->symCount));
+		if (isProt)
+		    {
+		    if (axt->frame != 0)
+		        fprintf(f, ", Frame = %c%d", axt->tStrand, axt->frame);
+		    fprintf(f, "\n");
+		    }
+		else
+		    fprintf(f, ", Strand = %s / Plus\n", strandName);
+		fprintf(f, "\n");
+		blastiodAxtOutput(f, axt, target->size, querySize, 60, isProt, isTranslated);
+		}
+	    }
+	}
+    }
+
+/* Cleanup time. */
+targetHitsFreeList(&targetList);
+}
+
+static void ncbiPrintE(FILE *f, double e)
+/* Print a small number NCBI style. */
+{
+if (e <= 0.0)
+    fprintf(f, "0.0");
+else if (e <= 1.0e-100)
+    {
+    char buf[256], *s;
+    safef(buf, sizeof(buf), "%e", e);
+    s = strchr(buf, 'e');
+    if (s == NULL)
+	fprintf(f, "0.0");
+    else
+        fprintf(f, "%s", s);
+    }
+else
+    fprintf(f, "%1.0e", e);
+}
+
+/* special global variable needed for Known Genes track building.  Fan 1/21/03 */
+int answer_for_kg;
+static void ncbiBlastOut(struct axtBundle *abList, int queryIx, boolean isProt, 
+	FILE *f, char *databaseName, int databaseSeqCount, 
+	double databaseLetterCount, char *ourId, double minIdentity)
+/* Do ncbiblast-like output at end of processing query. */
+{
+char asciiNum[32];
+struct targetHits *targetList = NULL, *target;
+char *queryName;
+int querySize = abList->qSize;
+boolean isTranslated = (abList->axtList->frame != 0);
+
+/* Print out stuff that doesn't depend on query or database. */
+if (ourId == NULL)
+    ourId = "axtBlastOut";
+fprintf(f, "%s 2.2.11 [%s]\n", progType(isProt, abList, TRUE), ourId);
+fprintf(f, "\n");
+fprintf(f, "Reference:  Kent, WJ. (2002) BLAT - The BLAST-like alignment tool\n");
+fprintf(f, "\n");
+
+/* Print query and database info. */
+queryName = abList->axtList->qName;
+fprintf(f, "Query= %s\n", queryName);
+fprintf(f, "         (%d letters)\n", abList->qSize);
+fprintf(f, "\n");
+fprintf(f, "Database: %s \n",  databaseName);
+sprintLongWithCommas(asciiNum, databaseLetterCount);
+fprintf(f, "           %d sequences; %s total letters\n",  databaseSeqCount, asciiNum);
+fprintf(f, "\n");
+fprintf(f, "Searching.done\n");
+
+targetList = bundleIntoTargets(abList);
+
+/* Print out summary of hits. */
+fprintf(f, "                                                                 Score    E\n");
+fprintf(f, "Sequences producing significant alignments:                      (bits) Value\n");
+fprintf(f, "\n");
+for (target = targetList; target != NULL; target = target->next)
+    {
+    struct axtRef *ref;
+    struct axt *axt;
+    int matches;
+    double identity, expectation;
+    int bit;
+    
+    for (ref = target->axtList; ref != NULL; ref = ref->next)
+	{
+	axt = ref->axt;
+	
+	matches = countMatches(axt->qSym, axt->tSym, axt->symCount);
+	identity = round(100.0 * matches / axt->symCount);
+	/* skip output if minIdentity not reached */
+	if (identity < minIdentity) continue;
+    
+    	bit = blastzScoreToNcbiBits(axt->score);
+        expectation = blastzScoreToNcbiExpectation(axt->score);
+    	fprintf(f, "%-67s  %4d   ", target->name, bit);
+    	ncbiPrintE(f, expectation);
+    	fprintf(f, "\n");
+    	}
+    }
+fprintf(f, "\n");
+
+/* Print out details on each target. */
+for (target = targetList; target != NULL; target = target->next)
+    {
+    struct axtRef *ref;
+    struct axt *axt;
+    int matches, gaps;
+    char *oldName;
+    
+    int ii = 0;
+    double identity;
+    oldName = strdup("");
+
+    for (ref = target->axtList; ref != NULL; ref = ref->next)
+	{
+	ii++;
+	axt = ref->axt;
+	
+	matches = countMatches(axt->qSym, axt->tSym, axt->symCount);
+	identity = round(100.0 * matches / axt->symCount);
+	
+	/* skip output if minIdentity not reached */
+	if (identity < minIdentity) continue;
+        
+	/* print target sequence name and length only once */ 
+	if (!sameWord(oldName, target->name))
+	    {
+	    fprintf(f, "\n\n>%s \n", target->name);
+	    fprintf(f, "          Length = %d\n", target->size);
+	    oldName = strdup(target->name);
+	    }
+
+	fprintf(f, "\n");
+	fprintf(f, " Score = %d bits (%d), Expect = ",
+	     blastzScoreToNcbiBits(axt->score),
+	     blastzScoreToNcbiScore(axt->score));
+	ncbiPrintE(f, blastzScoreToNcbiExpectation(axt->score));
+	fprintf(f, "\n");
+	
+	if (isProt)
+	    {
+	    int positives = countPositives(axt->qSym, axt->tSym, axt->symCount);
+	    gaps = countGaps(axt->qSym, axt->tSym, axt->symCount);
+	    fprintf(f, " Identities = %d/%d (%d%%),",
+		 matches, axt->symCount, round(100.0 * matches / axt->symCount));
+	    fprintf(f, " Positives = %d/%d (%d%%),",
+		 positives, axt->symCount, round(100.0 * positives / axt->symCount));
+	    fprintf(f, " Gaps = %d/%d (%d%%)\n",
+		 gaps, axt->symCount, round(100.0 * gaps / axt->symCount));
+	    if (axt->frame != 0) 
+		fprintf(f, " Frame = %c%d\n", axt->tStrand, axt->frame);
+	    /* set the special global variable, answer_for_kg.  
+   	       This is needed for Known Genes track building.  Fan 1/21/03 */
+            answer_for_kg=axt->symCount - matches;
+	    }
+	else
+	    {
+	    fprintf(f, " Identities = %d/%d (%d%%)\n",
+		 matches, axt->symCount, round(100.0 * matches / axt->symCount));
+	    /* blast displays dna searches as +- instead of blat's default -+ */
+	    if (!isTranslated)
+		if ((axt->qStrand == '-') && (axt->tStrand == '+'))
+		    {
+		    reverseIntRange(&axt->qStart, &axt->qEnd, querySize);
+		    reverseIntRange(&axt->tStart, &axt->tEnd, target->size);
+		    reverseComplement(axt->qSym, axt->symCount);
+		    reverseComplement(axt->tSym, axt->symCount);
+		    axt->qStrand = '+';
+		    axt->tStrand = '-';
+		    }
+	    fprintf(f, " Strand = %s / %s\n", nameForStrand(axt->qStrand),
+		nameForStrand(axt->tStrand));
+	    }
+	fprintf(f, "\n");
+	blastiodAxtOutput(f, axt, target->size, querySize, 60, isProt, isTranslated);
+	}
+    }
+
+fprintf(f, "  Database: %s\n", databaseName);
+
+/* Cleanup time. */
+targetHitsFreeList(&targetList);
+}
+
+static void xmlBlastOut(struct axtBundle *abList, int queryIx, boolean isProt, 
+	FILE *f, char *databaseName, int databaseSeqCount, 
+	double databaseLetterCount, char *ourId)
+/* Do ncbi blast xml-like output at end of processing query. 
+ * WARNING - still not completely baked.  Format at NCBI seems
+ * to be missing some end tags actually when I checked. -jk */
+{
+char *queryName = abList->axtList->qName;
+int querySize = abList->qSize;
+int hitNum = 0;
+struct targetHits *targetList = NULL, *target;
+
+if (ourId == NULL)
+    ourId = "axtBlastOut";
+fprintf(f, "<?xml version=\"1.0\"?>\n");
+fprintf(f, "<!DOCTYPE BlastOutput PUBLIC \"-//NCBI//NCBI BlastOutput/EN\" \"NCBI_BlastOutput.dtd\">\n");
+fprintf(f, "<BlastOutput>\n");
+fprintf(f, "  <BlastOutput_program>%s</BlastOutput_program>\n", 
+	progType(isProt, abList, FALSE));
+fprintf(f, "  <BlastOutput_version>%s 2.2.4 [%s]</BlastOutput_version>\n",
+	progType(isProt, abList, FALSE), ourId);
+fprintf(f, "  <BlastOutput_reference>~Reference: Kent, WJ. (2002) BLAT - The BLAST-like alignment tool</BlastOutput_reference>\n");
+fprintf(f, "  <BlastOutput_db>%s</BlastOutput_db>\n", databaseName);
+fprintf(f, "  <BlastOutput_query-ID>%d</BlastOutput_query-ID>\n", queryIx);
+fprintf(f, "  <BlastOutput_query-def>%s</BlastOutput_query-def>\n", queryName);
+fprintf(f, "  <BlastOutput_query-len>%d</BlastOutput_query-len>\n", querySize);
+
+if (isProt)
+    {
+    fprintf(f, "  <BlastOutput_param>\n");
+    fprintf(f, "    <Parameters_matrix>BLOSUM62</Parameters_matrix>\n");
+    fprintf(f, "    <Parameters_expect>0.001</Parameters_expect>\n");
+    fprintf(f, "    <Parameters_expect>10</Parameters_expect>\n");
+    fprintf(f, "    <Parameters_gap-extend>1</Parameters_gap-extend>\n");
+    fprintf(f, "  </BlastOutput_param>\n");
+    }
+
+fprintf(f, "  <BlastOutput_iterations>\n");
+fprintf(f, "    <Iteration>\n");
+fprintf(f, "      <Iteration_iter-num>1</Iteration_iter-num>\n");
+fprintf(f, "      <Iteration_hits>\n");
+
+/* Print out details on each target. */
+targetList = bundleIntoTargets(abList);
+for (target = targetList; target != NULL; target = target->next)
+    {
+    struct axtRef *ref;
+    fprintf(f, "      <hit>\n");
+    fprintf(f, "        <Hit_num>%d</Hit_num>\n", hitNum);
+    fprintf(f, "        <Hit_id>%s</Hit_id>\n", target->name);
+    fprintf(f, "        <Hit_accession>%s</Hit_accession>\n", target->name);
+    fprintf(f, "        <Hit_len>%d</Hit_len>\n", target->size);
+    fprintf(f, "        <Hit_hsps>\n");
+    for (ref = target->axtList; ref != NULL; ref = ref->next)
+        {
+	struct axt *axt = ref->axt;
+	int hspIx = 0;
+	fprintf(f, "        <Hsp>\n");
+	fprintf(f, "          <Hsp_num>%d</Hsp_num>\n", ++hspIx);
+	fprintf(f, "          <Hsp_bit-score>%d</Hsp_bit-score>\n", 
+		blastzScoreToNcbiBits(axt->score));
+	fprintf(f, "          <Hsp_score>%d</Hsp_score>\n",
+		blastzScoreToNcbiScore(axt->score));
+	fprintf(f, "          <Hsp_evalue>%f</Hsp_evalue>\n",
+	        blastzScoreToNcbiExpectation(axt->score));
+	fprintf(f, "          <Hsp_query-from>%d</Hsp_query-from>\n", 
+		axt->qStart+1);
+	fprintf(f, "          <Hsp_query-to>%d</Hsp_query-to>\n", axt->qEnd);
+	fprintf(f, "          <Hsp_hit-from>%d</Hsp_hit-from>\n", 
+		axt->tStart+1);
+	fprintf(f, "          <Hsp_hit-to>%d</Hsp_hit-to>\n", axt->tEnd);
+	fprintf(f, "        </Hsp>\n");
+	}
+
+    fprintf(f, "        </Hit_hsps>\n");
+    }
+
+fprintf(f, "      </Iteration_hits>\n");
+fprintf(f, "    </Iteration>\n");
+fprintf(f, "  </BlastOutput_iterations>\n");
+fprintf(f, "</BlastOutput>\n");
+}
+
+static void printAxtTargetBlastTab(FILE *f, struct axt *axt, int targetSize)
+/* Print out target in tabular blast-oriented format. */
+{
+int s = axt->tStart, e = axt->tEnd;
+if (axt->tStrand == '-')
+    reverseIntRange(&s, &e, targetSize);
+if (axt->tStrand == axt->qStrand)
+    {
+    fprintf(f, "%d\t", s+1);
+    fprintf(f, "%d\t", e);
+    }
+else
+    {
+    fprintf(f, "%d\t", e);
+    fprintf(f, "%d\t", s+1);
+    }
+}
+
+static void tabBlastOut(struct axtBundle *abList, int queryIx, boolean isProt, 
+	FILE *f, char *databaseName, int databaseSeqCount, 
+	double databaseLetterCount, char *ourId, boolean withComment)
+/* Do NCBI tabular blast output. */
+{
+char *queryName = abList->axtList->qName;
+int querySize = abList->qSize;
+struct targetHits *targetList = NULL, *target;
+
+if (withComment)
+    {
+    // use date from CVS, unless checked out with -kk, then ignore.
+    char * rcsDate = "$Date: 2009/02/26 00:05:49 $";
+    char dateStamp[11];
+    if (strlen(rcsDate) > 17)
+        safencpy(dateStamp, sizeof(dateStamp), rcsDate+7, 10);
+    else
+        safecpy(dateStamp, sizeof(dateStamp), "");
+    dateStamp[10] = 0;
+    fprintf(f, "# BLAT %s [%s]\n", gfVersion, dateStamp);
+    fprintf(f, "# Query: %s\n", queryName);
+    fprintf(f, "# Database: %s\n", databaseName);
+    fprintf(f, "%s\n", 
+    	"# Fields: Query id, Subject id, % identity, alignment length, "
+	"mismatches, gap openings, q. start, q. end, s. start, s. end, "
+	"e-value, bit score");
+    }
+
+/* Print out details on each target. */
+targetList = bundleIntoTargets(abList);
+for (target = targetList; target != NULL; target = target->next)
+    {
+    struct axtRef *ref;
+    for (ref = target->axtList; ref != NULL; ref = ref->next)
+        {
+	struct axt *axt = ref->axt;
+	int matches = countMatches(axt->qSym, axt->tSym, axt->symCount);
+	int gaps = countGaps(axt->qSym, axt->tSym, axt->symCount);
+	int gapOpens = countGapOpens(axt->qSym, axt->tSym, axt->symCount);
+	fprintf(f, "%s\t", axt->qName);
+	fprintf(f, "%s\t", axt->tName);
+	fprintf(f, "%.2f\t", 100.0 * matches/axt->symCount);
+	fprintf(f, "%d\t", axt->symCount);
+	fprintf(f, "%d\t", axt->symCount - matches - gaps);
+	fprintf(f, "%d\t", gapOpens);
+	if (axt->qStrand == '-')
+	    {
+	    int s = axt->qStart, e = axt->qEnd;
+	    reverseIntRange(&s, &e, querySize);
+	    fprintf(f, "%d\t", s+1);
+	    fprintf(f, "%d\t", e);
+	    printAxtTargetBlastTab(f, axt, target->size);
+	    }
+	else
+	    {
+	    fprintf(f, "%d\t", axt->qStart + 1);
+	    fprintf(f, "%d\t", axt->qEnd);
+	    printAxtTargetBlastTab(f, axt, target->size);
+	    }
+	fprintf(f, "%3.1e\t", blastzScoreToNcbiExpectation(axt->score));
+	fprintf(f, "%d.0\n", blastzScoreToNcbiBits(axt->score));
+	}
+    }
+
+/* Cleanup time. */
+targetHitsFreeList(&targetList);
+}
+
+void axtBlastOut(struct axtBundle *abList, 
+	int queryIx, boolean isProt, FILE *f, 
+	char *databaseName, int databaseSeqCount, double databaseLetterCount, 
+	char *blastType, char *ourId, double minIdentity)
+/* Output a bundle of axt's on the same query sequence in blast format.
+ * The parameters in detail are:
+ *   ab - the list of bundles of axt's. 
+ *   f  - output file handle
+ *   databaseSeqCount - number of sequences in database
+ *   databaseLetterCount - number of bases or aa's in database
+ *   blastType - blast/wublast/blast8/blast9/xml
+ *   ourId - optional (may be NULL) thing to put in header
+ */
+{
+if (abList == NULL)
+    return;
+if (sameWord(blastType, "wublast"))
+    wuBlastOut(abList, queryIx, isProt, f, databaseName,
+   	databaseSeqCount, databaseLetterCount, ourId);
+else if (sameWord(blastType, "xml"))
+    xmlBlastOut(abList, queryIx, isProt, f, databaseName,
+        databaseSeqCount, databaseLetterCount, ourId);
+else if (sameWord(blastType, "blast"))
+    ncbiBlastOut(abList, queryIx, isProt, f, databaseName,
+        databaseSeqCount, databaseLetterCount, ourId, minIdentity);
+else if (sameWord(blastType, "blast8"))
+    tabBlastOut(abList, queryIx, isProt, f, databaseName,
+    	databaseSeqCount, databaseLetterCount, ourId, FALSE);
+else if (sameWord(blastType, "blast9"))
+    tabBlastOut(abList, queryIx, isProt, f, databaseName,
+    	databaseSeqCount, databaseLetterCount, ourId, TRUE);
+else
+    errAbort("Unrecognized blastType %s in axtBlastOut", blastType);
+}
+
diff --git a/gbtools/src/blatSrc/lib/blastParse.c b/gbtools/src/blatSrc/lib/blastParse.c
new file mode 100644
index 0000000..49026d6
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/blastParse.c
@@ -0,0 +1,900 @@
+/* blastParse - read in blast output into C data structure. */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "dystring.h"
+#include "linefile.h"
+#include "dnautil.h"
+#include "sqlNum.h"
+#include "blastParse.h"
+#include "verbose.h"
+
+
+#define WARN_LEVEL 1   /* verbose level to enable warnings */
+#define TRACE_LEVEL 3  /* verbose level to enable tracing of files */
+#define DUMP_LEVEL 4   /* verbose level to enable dumping of parsed */
+
+struct blastFile *blastFileReadAll(char *fileName)
+/* Read all blast alignment in file. */
+{
+struct blastFile *bf;
+struct blastQuery *bq;
+
+bf = blastFileOpenVerify(fileName);
+while ((bq = blastFileNextQuery(bf)) != NULL)
+    {
+    slAddHead(&bf->queries, bq);
+    }
+slReverse(&bf->queries);
+lineFileClose(&bf->lf);
+return bf;
+}
+
+static void bfError(struct blastFile *bf, char *message)
+/* Print blast file error message. */
+{
+errAbort("%s:%d: %s", bf->fileName, bf->lf->lineIx, message);
+}
+
+static void bfWarn(struct blastFile *bf, char *message)
+/* Print blast file warning message. */
+{
+verbose(WARN_LEVEL, "Warning: %s:%d: %s\n", bf->fileName, bf->lf->lineIx, message);
+}
+
+static void bfUnexpectedEof(struct blastFile *bf)
+/* generate error on unexpected EOF */
+{
+errAbort("Unexpected end of file in %s\n", bf->fileName);
+}
+
+static void bfSyntax(struct blastFile *bf)
+/* General error message. */
+{
+bfError(bf, "Can't cope with BLAST output syntax");
+}
+
+static boolean isAllDigits(char *s)
+/* test if a string is all digits */
+{
+for (; *s != '\0'; s++)
+    {
+    if (!isdigit(*s))
+        return FALSE;
+    }
+return TRUE;
+}
+
+static boolean isAllDashes(char *s)
+/* test if a string is all dashes */
+{
+for (; *s != '\0'; s++)
+    {
+    if (*s != '-')
+        return FALSE;
+    }
+return TRUE;
+}
+
+static char *bfNextLine(struct blastFile *bf)
+/* Fetch next line of input trying, or NULL if not found */
+{
+char *line = NULL;
+if (lineFileNext(bf->lf, &line, NULL))
+    {
+    verbose(TRACE_LEVEL, "    => %s\n", line);
+    return line;
+    }
+else
+    {
+    verbose(TRACE_LEVEL, "    => EOF\n");
+    return NULL;
+    }
+}
+
+static boolean bfSkipBlankLines(struct blastFile *bf)
+/* skip blank lines, return FALSE on EOF */
+{
+char *line = NULL;
+while ((line = bfNextLine(bf)) != NULL)
+    {
+    if (skipLeadingSpaces(line)[0] != '\0')
+        {
+	lineFileReuse(bf->lf);
+        return TRUE;
+        }
+    }
+return FALSE; /* EOF */
+}
+
+static char *bfNeedNextLine(struct blastFile *bf)
+/* Fetch next line of input or die trying. */
+{
+char *line = bfNextLine(bf);
+if (line == NULL)
+    bfUnexpectedEof(bf);
+return line;
+}
+
+static char *bfSearchForLine(struct blastFile *bf, char *start)
+/* scan for a line starting with the specified string */
+{
+for (;;)
+    {
+    char *line = bfNextLine(bf);
+    if (line == NULL)
+	return NULL;
+    if (startsWith(start, line))
+        return line;
+    }
+}
+
+static void bfBadHeader(struct blastFile *bf)
+/* Report bad header. */
+{
+bfError(bf, "Bad first line\nShould be something like:\n"
+            "BLASTN 2.0.11 [Jan-20-2000]");
+}
+
+struct blastFile *blastFileOpenVerify(char *fileName)
+/* Open file, read and verify header. */
+{
+struct blastFile *bf;
+char *line;
+char *words[16];
+int wordCount;
+struct lineFile *lf;
+
+AllocVar(bf);
+bf->lf = lf = lineFileOpen(fileName, TRUE);
+bf->fileName = cloneString(fileName);
+
+/* Parse first line - something like: */
+line = bfNeedNextLine(bf);
+wordCount = chopLine(line, words);
+if (wordCount < 3)
+    bfBadHeader(bf);
+bf->program = cloneString(words[0]);
+bf->version = cloneString(words[1]);
+bf->buildDate = cloneString(words[2]);
+if (!wildMatch("*BLAST*", bf->program))
+    bfBadHeader(bf);
+if (!isdigit(bf->version[0]))
+    bfBadHeader(bf);
+if (bf->buildDate[0] != '[')
+    bfBadHeader(bf);
+return bf;
+}
+
+void decomma(char *s)
+/* Remove commas from string. */
+{
+char *d = s;
+char c;
+
+for (;;)
+    {
+    c = *s++;
+    if (c != ',')
+	*d++ = c;
+    if (c == 0)
+	break;
+    }
+}
+
+static void parseQueryLines(struct blastFile *bf, char *line, struct blastQuery *bq)
+/* Parse the Query= lines */
+{
+char *s, *e;
+char *words[16];
+int wordCount;
+if (bq->query != NULL)
+    bfError(bf, "already parse Query=");
+
+/* Process something like:
+ *    Query= MM39H11    00630     
+ */
+wordCount = chopLine(line, words);
+if (wordCount < 2)
+    bfError(bf, "No sequence name in query line");
+bq->query = cloneString(words[1]);
+
+for (;;)
+    {
+    line = bfNeedNextLine(bf);
+    s = skipLeadingSpaces(line);
+    if (s[0] == '(')
+        break;
+    }
+if (!isdigit(s[1]))
+    {
+    bfError(bf, "expecting something like:\n"
+                "   (45,693 letters)");
+    }
+s += 1;
+if ((e = strchr(s, ' ')) == NULL)
+    {
+    bfError(bf, "expecting something like:\n"
+                "   (45,693 letters)");
+    }
+*e = 0;
+decomma(s);
+bq->queryBaseCount = atoi(s);
+}
+
+static void parseDatabaseLines(struct blastFile *bf, char *line, struct blastQuery *bq)
+/* Process something like:
+ * Database: chr22.fa 
+ *        977 sequences; 95,550,797 total letters
+ */
+{
+static struct dyString *tmpBuf = NULL;
+char *words[16];
+int wordCount;
+if (bq->database != NULL)
+    bfError(bf, "already parse Database:");
+
+if (tmpBuf == NULL)
+    tmpBuf = dyStringNew(512);
+
+/* parse something like
+ * Database: celegans98
+ * some versions of blastp include the absolute path, but
+ * then split it across lines.
+ */
+wordCount = chopLine(line, words);
+if (wordCount < 2)
+    bfError(bf, "Expecting database name");
+dyStringClear(tmpBuf);
+dyStringAppend(tmpBuf, words[1]);
+while (line = bfNeedNextLine(bf), !isspace(line[0]))
+    {
+    dyStringAppend(tmpBuf, line);
+    }
+bq->database = cloneString(tmpBuf->string);
+
+/* Process something like:
+ *        977 sequences; 95,550,797 total letters
+ */
+wordCount = chopLine(line, words);
+if (wordCount < 3 || !isdigit(words[0][0]) || !isdigit(words[2][0]))
+    bfError(bf, "Expecting database info");
+decomma(words[0]);
+decomma(words[2]);
+bq->dbSeqCount = atoi(words[0]);
+bq->dbBaseCount = atoi(words[2]);
+}
+
+static char *roundLinePrefix = "Results from round "; // start of a round line
+
+static boolean isRoundLine(char *line)
+/* check if a line is a PSI round number line */
+{
+return startsWith(roundLinePrefix, line);
+}
+
+static void parseRoundLine(char *line, struct blastQuery *bq)
+/* round line and save current round in query
+ *   Results from round 1
+ */
+{
+char *p = skipLeadingSpaces(line + strlen(roundLinePrefix));
+bq->psiRounds = atoi(p);
+}
+
+struct blastQuery *blastFileNextQuery(struct blastFile *bf)
+/* Read all alignments associated with next query.  Return NULL at EOF. */
+{
+char *line;
+struct blastQuery *bq;
+struct blastGappedAli *bga;
+AllocVar(bq);
+
+verbose(TRACE_LEVEL, "blastFileNextQuery\n");
+
+/* find and parse Query= */
+line = bfSearchForLine(bf, "Query=");
+if (line == NULL)
+    return NULL;
+parseQueryLines(bf, line, bq);
+
+/* find and parse Database: */
+line = bfSearchForLine(bf, "Database:");
+if (line == NULL)
+    bfUnexpectedEof(bf);
+parseDatabaseLines(bf, line, bq);
+
+/* Seek to beginning of first gapped alignment. */
+for (;;)
+    {
+    line = bfNeedNextLine(bf);
+    if (line[0] == '>')
+	{
+	lineFileReuse(bf->lf);
+	break;
+	}
+    else if (isRoundLine(line))
+        parseRoundLine(line, bq);
+    else if (stringIn("No hits found", line) != NULL)
+        break;
+    }
+
+/* Read in gapped alignments. */
+while ((bga = blastFileNextGapped(bf, bq)) != NULL)
+    {
+    slAddHead(&bq->gapped, bga);
+    }
+slReverse(&bq->gapped);
+if (verboseLevel() >= DUMP_LEVEL)
+    {
+    verbose(DUMP_LEVEL, "blastFileNextQuery result:\n");
+    blastQueryPrint(bq, stderr);
+    }
+return bq;
+}
+
+static char *findNextGapped(struct blastFile *bf, struct blastQuery *bq)
+/* scan for next gapped alignment, return line or NULL if not hit */
+{
+while (TRUE)
+    {
+    if (!bfSkipBlankLines(bf))
+        return NULL;
+    char *line = bfNextLine(bf);
+    /*
+     * the last condition was added to deal with the new blast output format and is meant to find lines such as this one:
+     * TBLASTN 2.2.15 [Oct-15-2006]
+     * I am hoping that by looking for only "BLAST" this will work with things like blastp, blastn, psi-blast, etc
+     */
+    if (startsWith("  Database:", line) || (stringIn("BLAST", line) != NULL))
+        {
+	lineFileReuse(bf->lf);
+        return NULL;
+        }
+    if (line[0] == '>')
+        return line;
+    if (isRoundLine(line))
+        parseRoundLine(line, bq);
+    }
+}
+
+struct blastGappedAli *blastFileNextGapped(struct blastFile *bf, struct blastQuery *bq)
+/* Read in next gapped alignment.   Does *not* put it on bf->gapped list. 
+ * Return NULL at EOF or end of query. */
+{
+char *words[16];
+int wordCount;
+struct blastGappedAli *bga;
+struct blastBlock *bb;
+int lenSearch;
+
+verbose(TRACE_LEVEL, "blastFileNextGapped\n");
+
+char *line = findNextGapped(bf, bq);
+if (line == NULL)
+    return NULL;
+
+AllocVar(bga);
+bga->query = bq;
+bga->targetName = cloneString(line+1); 
+bga->psiRound = bq->psiRounds;
+
+/* Process something like:
+ *      Length = 100000
+ * however this follows a possible multi-line description, so be specified
+ * and limit how far we can scan
+ */
+for (lenSearch=0; lenSearch<25; lenSearch++)
+	{
+	line = bfNeedNextLine(bf);
+        if (isRoundLine(line))
+            parseRoundLine(line, bq);
+	wordCount = chopLine(line, words);
+	if (wordCount == 3 && sameString(words[0], "Length") &&  sameString(words[1], "=")
+            && isdigit(words[2][0]))
+		break;
+	}
+if (lenSearch>=25)
+    bfError(bf, "Expecting Length =");
+decomma(words[2]);
+bga->targetSize = atoi(words[2]);
+
+/* Get all the blocks. */
+while ((bb = blastFileNextBlock(bf, bq, bga)) != NULL)
+    {
+    slAddHead(&bga->blocks, bb);
+    }
+slReverse(&bga->blocks);
+return bga;
+}
+
+static int getStrand(struct blastFile *bf, char *strand)
+/* Translate "Plus" or "Minus" to +1 or -1. */
+{
+if (sameWord("Plus", strand))
+    return 1;
+else if (sameWord("Minus", strand))
+    return -1;
+else
+    {
+    bfError(bf, "Expecting Plus or Minus after Strand");
+    return 0;
+    }
+}
+
+static boolean nextBlockLine(struct blastFile *bf, struct blastQuery *bq, char **retLine)
+/* Get next block line.  Return FALSE and reuse line if it's
+ * an end of block type line. */
+{
+struct lineFile *lf = bf->lf;
+char *line;
+
+*retLine = line = bfNextLine(bf);
+if (line == NULL)
+    return FALSE;
+if (isRoundLine(line))
+    parseRoundLine(line, bq);
+
+/*
+the last condition was added to deal with the new blast output format and is meant to find lines such as this one:
+TBLASTN 2.2.15 [Oct-15-2006]
+I am hoping that by looking for only "BLAST" this will work with things like blastp, blastn, psi-blast, etc
+*/
+if (line[0] == '>' || startsWith("Query=", line) || startsWith("  Database:", line) || (stringIn("BLAST", line) != NULL))
+    {
+    lineFileReuse(lf);
+    return FALSE;
+    }
+return TRUE;
+}
+
+static double evalToDouble(char *s)
+/* Convert string from e-val to floating point rep.
+ * e-val is basically ascii floating point, but
+ * small ones may be 'e-100' instead of 1.0e-100
+ */
+{
+if (isdigit(s[0]))
+    return atof(s);
+else
+    {
+    char buf[64];
+    safef(buf, sizeof(buf), "1.0%s", s);
+    return atof(buf);
+    }
+}
+
+static boolean parseBlockLine(struct blastFile *bf, int *startRet, int *endRet,
+                           struct dyString *seq)
+/* read and parse the next target or query line, like:
+ *   Query: 26429 taccttgacattcctcagtgtgtcatcatcgttctctcctccaaacggcgagagtccgga 26488
+ *
+ * also handle broken NCBI tblastn output like:
+ *   Sbjct: 1181YYGEQRSTNGQTIQLKTQVFRRFPDDDDESEDHDDPDNAHESPEQEGAEGHFDLHYYENQ 1360
+ *
+ * Ignores and returns FALSE on bogus records generated by PSI BLAST, such as
+ *   Query: 0   --------------------------                                  
+ *   Sbjct: 38  PPGPPGVAGGNQTTVVVIYGPPGPPG                                   63
+ *   Query: 0                                                               
+ *   Sbjct: 63                                                               63
+ * If FALSE is returned, the output parameters will be unchanged.
+ */
+{
+char* line = bfNeedNextLine(bf);
+int a, b, s, e;
+char *words[16];
+int wordCount = chopLine(line, words);
+if ((wordCount < 2) || (wordCount > 4) || !(sameString("Query:", words[0]) || sameString("Sbjct:", words[0])))
+    bfSyntax(bf);
+
+/* look for one of the bad formats to ignore, as described above */
+if (((wordCount == 2) && isAllDigits(words[1]))
+    || ((wordCount == 3) && isAllDigits(words[1]) && isAllDigits(words[2]))
+    || ((wordCount == 3) && isAllDigits(words[1]) && isAllDashes(words[2])))
+    {
+    bfWarn(bf, "Ignored invalid alignment format for aligned sequence pair");
+    return FALSE;
+    }
+
+/* special handling for broken output with no space between start and
+ * sequence */
+if (wordCount == 3)
+    {
+    char *p;
+    if (!isdigit(words[1][0]) || !isdigit(words[2][0]))
+        bfSyntax(bf);
+    a = atoi(words[1]);
+    b = atoi(words[2]);
+    p = words[1];
+    while ((*p != '\0') && (isdigit(*p)))
+        p++;
+    dyStringAppend(seq, p);
+    }
+else
+    {
+    if (!isdigit(words[1][0]) || !isdigit(words[3][0]))
+        bfSyntax(bf);
+    a = atoi(words[1]);
+    b = atoi(words[3]);
+    dyStringAppend(seq, words[2]);
+    }
+s = min(a,b);
+e = max(a,b);
+*startRet = min(s, *startRet);
+*endRet = max(e, *endRet);
+return TRUE;
+}
+
+static boolean findBlockSeqPair(struct blastFile *bf, struct blastQuery *bq)
+/* scan forward for the next pair of Query:/Sbjct: sequences */
+{
+char *line;
+for (;;)
+    {
+    if (!nextBlockLine(bf, bq, &line))
+        return FALSE;
+    if (startsWith(" Score", line))
+        {
+        lineFileReuse(bf->lf);
+        return FALSE;
+        }
+    if (startsWith("Query:", line))
+        {
+        lineFileReuse(bf->lf);
+        return TRUE;
+        }
+    }
+}
+
+static void clearBlastBlock(struct blastBlock *bb, struct dyString *qString, struct dyString *tString)
+/* reset the contents of a blast block being accummulated */
+{
+bb->qStart = bb->tStart = 0x3fffffff;
+bb->qEnd = bb->tEnd = -bb->qStart;
+dyStringClear(qString);
+dyStringClear(tString);
+}
+
+static void parseBlockSeqPair(struct blastFile *bf, struct blastBlock *bb,
+                              struct dyString *qString, struct dyString *tString)
+/* parse the current pair Query:/Sbjct: sequences */
+{
+boolean isOk = TRUE;
+
+/* Query line */
+if (!parseBlockLine(bf, &bb->qStart, &bb->qEnd, qString))
+    isOk = FALSE;
+
+/* Skip next line. */
+bfNeedNextLine(bf);
+
+/* Fetch target sequence line. */
+if (!parseBlockLine(bf, &bb->tStart, &bb->tEnd, tString))
+    isOk = FALSE;
+if (!isOk)
+    {
+    // reset accumulated data so we discard everything before bogus pair
+    clearBlastBlock(bb, qString, tString);
+    }
+}
+
+
+static struct blastBlock *nextBlock(struct blastFile *bf, struct blastQuery *bq,
+                                    struct blastGappedAli *bga, boolean *skipRet)
+/* Read in next blast block.  Return NULL at EOF or end of gapped
+ * alignment. If an unparsable block is found, set skipRet to TRUE and return
+ * NULL. */
+{
+struct blastBlock *bb;
+char *line;
+char *words[16];
+int wordCount;
+char *parts[3];
+int partCount;
+static struct dyString *qString = NULL, *tString = NULL;
+
+verbose(TRACE_LEVEL,  "blastFileNextBlock\n");
+*skipRet = FALSE;
+
+/* Seek until get something like:
+ *   Score = 8770 bits (4424), Expect = 0.0
+ * or something that looks like we're done with this gapped
+ * alignment. */
+for (;;)
+    {
+    if (!nextBlockLine(bf, bq, &line))
+	return NULL;
+    if (startsWith(" Score", line))
+	break;
+    }
+AllocVar(bb);
+bb->gappedAli = bga;
+wordCount = chopLine(line, words);
+if (wordCount < 8 || !sameWord("Score", words[0]) 
+    || !isdigit(words[2][0]) || !(isdigit(words[7][0]) || words[7][0] == 'e')
+    || !startsWith("Expect", words[5]))
+    {
+    bfError(bf, "Expecting something like:\n"
+             "Score = 8770 bits (4424), Expect = 0.0");
+    }
+bb->bitScore = atof(words[2]);
+bb->eVal = evalToDouble(words[7]);
+
+/* Process something like:
+ *   Identities = 8320/9618 (86%), Gaps = 3/9618 (0%)
+ *             or
+ *   Identities = 8320/9618 (86%)
+ *             or
+ *   Identities = 10/19 (52%), Positives = 15/19 (78%), Frame = +2
+ *     (wu-tblastn)
+ *             or
+ *   Identities = 256/400 (64%), Positives = 306/400 (76%)
+ *   Frame = +1 / -2
+ *     (tblastn)
+ *
+ *   Identities = 1317/10108 (13%), Positives = 2779/10108 (27%), Gaps = 1040/10108
+ *   (10%)
+ *      - wrap on long lines
+ *
+ * Handle weird cases where the is only a `Score' line, with no `Identities'
+ * lines by skipping the alignment; they seem line small, junky alignments.
+ */
+line = bfNeedNextLine(bf);
+wordCount = chopLine(line, words);
+if (wordCount < 3 || !sameWord("Identities", words[0]))
+    {
+    if (wordCount > 1 || sameWord("Score", words[0]))
+        {
+        /* ugly hack to skip block with no identities */
+        *skipRet = TRUE;
+        blastBlockFree(&bb);
+        return NULL;
+        }
+    bfError(bf, "Expecting identity count");
+    }
+partCount = chopByChar(words[2], '/', parts, ArraySize(parts));
+if (partCount != 2 || !isdigit(parts[0][0]) || !isdigit(parts[1][0]))
+    bfSyntax(bf);
+bb->matchCount = atoi(parts[0]);
+bb->totalCount = atoi(parts[1]);
+if (wordCount >= 7 && sameWord("Gaps", words[4]))
+    {
+    if (!isdigit(words[6][0]))
+	bfSyntax(bf);
+    bb->insertCount = atoi(words[6]);
+    }
+if ((wordCount >= 11) && sameWord("Frame", words[8]))
+    {
+    bb->qStrand = '+';
+    bb->tStrand = words[10][0];
+    bb->tFrame = atoi(words[10]);
+    }
+
+line = bfNeedNextLine(bf);
+boolean wrapped = (startsWith("(", line));
+
+/* Process something like:
+ *     Strand = Plus / Plus (blastn)
+ *     Frame = +1           (tblastn)
+ *     Frame = +1 / -2      (tblastx)
+ *     <blank line>         (blastp)
+ * note that wu-tblastn puts frame on Identities line
+ */
+if (wrapped)
+    line = bfNeedNextLine(bf);
+wordCount = chopLine(line, words);
+if ((wordCount >= 5) && sameWord("Strand", words[0]))
+    {
+    bb->qStrand = getStrand(bf, words[2]);
+    bb->tStrand = getStrand(bf, words[4]);
+    }
+else if ((wordCount >= 5) && sameWord("Frame", words[0]) && (words[3][0] == '/'))
+    {
+    // Frame = +1 / -2      (tblastx)
+    bb->qStrand = (words[2][0] == '-') ? -1 : 1;
+    bb->tStrand = (words[4][0] == '-') ? -1 : 1;
+    bb->qFrame = atoi(words[2]);
+    bb->tFrame = atoi(words[4]);
+    }
+else if ((wordCount >= 3) && sameWord("Frame", words[0]))
+    {
+    // Frame = +1           (tblastn)
+    bb->qStrand = 1;
+    bb->tStrand = (words[2][0] == '-') ? -1 : 1;
+    bb->qFrame = atoi(words[2]);
+    bb->tFrame = 1;
+    }
+else if (wordCount == 0)
+    {
+    /* if we didn't parse frame, default it */
+    if (bb->qStrand == 0)
+        {
+        bb->qStrand = '+';
+        bb->tStrand = '+';
+        }
+    }
+else
+    bfError(bf, "Expecting Strand, Frame or blank line");
+
+
+/* Process alignment lines.  They come in groups of three
+ * separated by a blank line - something like:
+ * Query: 26429 taccttgacattcctcagtgtgtcatcatcgttctctcctccaaacggcgagagtccgga 26488
+ *              |||||| |||||||||| ||| ||||||||||||||||||||||| || || ||||||||
+ * Sbjct: 62966 taccttaacattcctcaatgtttcatcatcgttctctcctccaaatggtgaaagtccgga 63025
+ */
+if (qString == NULL)
+    {
+    qString = newDyString(50000);
+    tString = newDyString(50000);
+    }
+clearBlastBlock(bb, qString, tString);
+for (;;)
+    {
+    if (!findBlockSeqPair(bf, bq))
+        break;
+    parseBlockSeqPair(bf, bb, qString, tString);
+    }
+
+/* convert to [0..n) and move to strand coords if necessary */
+bb->qStart--;
+if (bb->qStrand < 0)
+    reverseIntRange(&bb->qStart, &bb->qEnd, bq->queryBaseCount);
+bb->tStart--;
+if (bb->tStrand < 0)
+    reverseIntRange(&bb->tStart, &bb->tEnd, bga->targetSize);
+bb->qSym = cloneMem(qString->string, qString->stringSize+1);
+bb->tSym = cloneMem(tString->string, tString->stringSize+1);
+return bb;
+}
+
+struct blastBlock *blastFileNextBlock(struct blastFile *bf, 
+	struct blastQuery *bq, struct blastGappedAli *bga)
+/* Read in next blast block.  Return NULL at EOF or end of
+ * gapped alignment. */
+{
+struct blastBlock *bb = NULL;
+boolean skip = FALSE;
+
+while (((bb = nextBlock(bf, bq, bga, &skip)) == NULL) && skip)
+    continue; /* skip to next one */
+
+return bb;
+}
+
+void blastFileFree(struct blastFile **pBf)
+/* Free blast file. */
+{
+struct blastFile *bf = *pBf;
+if (bf != NULL)
+    {
+    lineFileClose(&bf->lf);
+    freeMem(bf->fileName);
+    freeMem(bf->program);
+    freeMem(bf->version);
+    freeMem(bf->buildDate);
+    blastQueryFreeList(&bf->queries);
+    freez(pBf);
+    }
+}
+
+void blastFileFreeList(struct blastFile **pList)
+/* Free list of blast files. */
+{
+struct blastFile *el, *next;
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    blastFileFree(&el);
+    }
+*pList = NULL;
+}
+
+void blastQueryFree(struct blastQuery **pBq)
+/* Free single blastQuery. */
+{
+struct blastQuery *bq;
+if ((bq = *pBq) != NULL)
+    {
+    freeMem(bq->query);
+    freeMem(bq->database);
+    blastGappedAliFreeList(&bq->gapped);
+    freez(pBq);
+    }
+}
+
+void blastQueryFreeList(struct blastQuery **pList)
+/* Free list of blastQuery's. */
+{
+struct blastQuery *el, *next;
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    blastQueryFree(&el);
+    }
+*pList = NULL;
+}
+
+
+void blastGappedAliFree(struct blastGappedAli **pBga)
+/* Free blastGappedAli. */
+{
+struct blastGappedAli *bga = *pBga;
+if (bga != NULL)
+    {
+    freeMem(bga->targetName);
+    blastBlockFreeList(&bga->blocks);
+    freez(pBga);
+    }
+}
+
+void blastGappedAliFreeList(struct blastGappedAli **pList)
+/* Free blastGappedAli list. */
+{
+struct blastGappedAli *el, *next;
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    blastGappedAliFree(&el);
+    }
+*pList = NULL;
+}
+
+
+void blastBlockFree(struct blastBlock **pBb)
+/* Free a single blastBlock. */
+{
+struct blastBlock *bb = *pBb;
+if (bb != NULL)
+    {
+    freeMem(bb->qSym);
+    freeMem(bb->tSym);
+    freez(pBb);
+    }
+}
+
+void blastBlockFreeList(struct blastBlock **pList)
+/* Free a list of blastBlocks. */
+{
+struct blastBlock *el, *next;
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    blastBlockFree(&el);
+    }
+*pList = NULL;
+}
+
+void blastBlockPrint(struct blastBlock* bb, FILE* out)
+/* print a BLAST block for debugging purposes  */
+{
+fprintf(out, "    blk: %d-%d <=> %d-%d tcnt=%d mcnt=%d icnt=%d\n",
+        bb->qStart, bb->qEnd,  bb->tStart, bb->tEnd,
+        bb->totalCount, bb->matchCount, bb->insertCount);
+fprintf(out, "        Q: %s\n", bb->qSym);
+fprintf(out, "        T: %s\n", bb->tSym);
+}
+
+void blastGappedAliPrint(struct blastGappedAli* ba, FILE* out)
+/* print a BLAST gapped alignment for debugging purposes  */
+{
+struct blastBlock *bb;
+fprintf(out, "%s <=> %s", ba->query->query, ba->targetName);
+if (ba->psiRound > 0)
+    fprintf(out, " round: %d", ba->psiRound);
+fputc('\n', out);
+for (bb = ba->blocks; bb != NULL; bb = bb->next)
+    {
+    blastBlockPrint(bb, out);
+    }
+}
+
+void blastQueryPrint(struct blastQuery *bq, FILE* out)
+/* print a BLAST query for debugging purposes  */
+{
+struct blastGappedAli *ba;
+for (ba = bq->gapped; ba != NULL; ba = ba->next)
+    blastGappedAliPrint(ba, out);
+}
diff --git a/gbtools/src/blatSrc/lib/boxClump.c b/gbtools/src/blatSrc/lib/boxClump.c
new file mode 100644
index 0000000..5d8ca2e
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/boxClump.c
@@ -0,0 +1,315 @@
+/* boxClump - put together 2 dimensional boxes that
+ * overlap with each other into clumps. */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "dlist.h"
+#include "localmem.h"
+#include "boxClump.h"
+
+
+/** Some simple utility function on globally declared 
+ ** data structures. **/
+
+
+void boxClumpFree(struct boxClump **pClump)
+/* Free boxClump. */
+{
+struct boxClump *clump = *pClump;
+if (clump != NULL)
+    {
+    slFreeList(&clump->boxList);
+    freez(pClump);
+    }
+}
+
+void boxClumpFreeList(struct boxClump **pList)
+/* Free list of boxClumps. */
+{
+struct boxClump *el, *next;
+
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    boxClumpFree(&el);
+    }
+*pList = NULL;
+}
+
+int boxClumpCmpCount(const void *va, const void *vb)
+/* Compare to sort based on count of boxes. */
+{
+const struct boxClump *a = *((struct boxClump **)va);
+const struct boxClump *b = *((struct boxClump **)vb);
+return b->boxCount - a->boxCount;
+}
+
+/** Local data structures. */
+
+struct cluster
+/* A cluster of boxes. */
+    {
+    struct box *boxList;	/* List of boxes. */
+    struct dlNode *node;	/* Position in doubly-linked list. */
+    };
+
+struct box
+/* A box in an alignment. */
+    {
+    struct box *next;		 /* Next in list (usually on cluster). */
+    struct boxIn *in;		 /* Input box position. */
+    struct cluster *cluster;     /* Cluster this is part of. */
+    };
+
+struct boxRef
+/* Reference to a box. */
+    {
+    struct boxRef *next;
+    struct box *box;
+    };
+
+
+/** Routines that cluster using mostly the local data
+ ** structures. **/
+
+
+static void mergeClusters(struct cluster *a, struct cluster *b)
+/* Merge cluster b into cluster a, and free remnants of b. */
+{
+struct box *box;
+
+/* Merging with yourself is always problematic. */
+if (a == b)
+    return;
+
+/* Point all boxes in b to a. */
+for (box = b->boxList; box != NULL; box = box->next)
+    box->cluster = a;
+
+/* Add b's boxList to end of a's. */
+a->boxList = slCat(a->boxList, b->boxList);
+
+/* Remove b from master cluster list. */
+dlRemove(b->node);
+}
+
+static boolean allStartBy(struct boxRef *refList, int qStart, int tStart)
+/* Return TRUE if qStart/qEnd of all boxes less than or equal to qStart/tStart 
+ * This is an end condition for recursion along with only having two or
+ * less boxes in the refList.  It handles the case where you have many
+ * boxes stacked on top of each other. */
+{
+struct boxRef *ref;
+for (ref = refList; ref != NULL; ref = ref->next)
+    {
+    struct boxIn *box = ref->box->in;
+    if (box->qStart > qStart || box->tStart > tStart)
+        return FALSE;
+    }
+return TRUE;
+}
+
+static boolean allSameCluster(struct boxRef *refList)
+/* Return TRUE if qStart/qEnd of all boxes is the same */
+{
+struct boxRef *ref;
+struct cluster *cluster = refList->box->cluster;
+for (ref = refList->next; ref != NULL; ref = ref->next)
+    {
+    if (ref->box->cluster != cluster)
+        return FALSE;
+    }
+return TRUE;
+}
+
+static struct lm *lm;
+/* Local memory manager used for boxRefs and other stuff. */
+
+static void rBoxJoin(struct boxRef *refList, 
+	int qStart, int qEnd, int tStart, int tEnd)
+/* Recursively cluster boxes. */
+{
+int boxCount = slCount(refList);
+
+if (boxCount <= 1)
+    {
+    /* Easy: no merging required. */
+    }
+else if (boxCount == 2)
+    {
+    /* Decide if pair overlaps and if so merge. */
+    struct box *a = refList->box;
+    struct box *b = refList->next->box;
+    if (rangeIntersection(a->in->qStart, a->in->qEnd, b->in->qStart, b->in->qEnd) > 0 &&
+        rangeIntersection(a->in->tStart, a->in->tEnd, b->in->tStart, b->in->tEnd) > 0 )
+	{
+	mergeClusters(a->cluster, b->cluster);
+	}
+    else
+        {
+	/* Two non-overlapping boxes, we don't have to do anything. */
+	}
+    }
+else if (allStartBy(refList, qStart, tStart))
+    {
+    /* If everybody contains the upper left corner, then they all can 
+     * be merged.   This is the route taken often by clumps with lots
+     * of overlap. */
+    struct cluster *aCluster = refList->box->cluster;
+    struct boxRef *ref;
+    for (ref = refList->next; ref != NULL; ref = ref->next)
+        {
+	struct cluster *bCluster = ref->box->cluster;
+	mergeClusters(aCluster, bCluster);
+	}
+    }
+else if (allSameCluster(refList))
+    {
+    /* Everything is in the same cluster, no action required. */
+    }
+else
+    {
+    /* We can't yet figure out clumping, so break
+     * up our window in two along larger dimension and
+     * recurse on both subwindows. */
+    struct boxRef *list1 = NULL, *list2 = NULL, *ref, *next;
+    if (qEnd - qStart > tEnd - tStart)
+        {
+	int mid = (qStart + qEnd)>>1;
+	for (ref = refList; ref != NULL; ref = next)
+	    {
+	    struct box *box = ref->box;
+	    next = ref->next;
+	    if (box->in->qEnd <= mid)
+	        {
+		slAddHead(&list1, ref);
+		}
+	    else if (box->in->qStart >= mid)
+	        {
+		slAddHead(&list2, ref);
+		}
+	    else
+	        {
+		/* Box crosses boundary, have to put it on both lists. */
+		slAddHead(&list1, ref);
+		lmAllocVar(lm, ref);
+		ref->box = box;
+		slAddHead(&list2, ref);
+		}
+	    }
+	rBoxJoin(list1, qStart, mid, tStart, tEnd);
+	rBoxJoin(list2, mid, qEnd, tStart, tEnd);
+	}
+    else
+        {
+	int mid = (tStart + tEnd)>>1;
+	for (ref = refList; ref != NULL; ref = next)
+	    {
+	    struct box *box = ref->box;
+	    next = ref->next;
+	    if (box->in->tEnd <= mid)
+	        {
+		slAddHead(&list1, ref);
+		}
+	    else if (box->in->tStart >= mid)
+	        {
+		slAddHead(&list2, ref);
+		}
+	    else
+	        {
+		/* Box crosses boundary, have to put it on both lists. */
+		slAddHead(&list1, ref);
+		lmAllocVar(lm, ref);
+		ref->box = box;
+		slAddHead(&list2, ref);
+		}
+	    }
+	rBoxJoin(list1, qStart, qEnd, tStart, mid);
+	rBoxJoin(list2, qStart, qEnd, mid, tEnd);
+	}
+    }
+}
+
+
+struct boxClump *boxFindClumps(struct boxIn **pBoxList)
+/* Convert list of boxes to a list of clumps.  Clumps
+ * are collections of boxes that overlap.  Note that
+ * the original boxList is overwritten as the boxes
+ * are moved from it to the clumps. */
+{
+struct boxIn *in;
+struct boxClump *clumpList = NULL, *clump;
+struct boxRef *refList = NULL, *ref;
+struct box *box;
+struct cluster *cluster;
+struct dlNode *node;
+struct dlList clusterList;
+int qStart = BIGNUM, qEnd = -BIGNUM;
+int tStart = BIGNUM, tEnd = -BIGNUM;
+
+
+dlListInit(&clusterList);
+lm = lmInit(0);
+
+/* Make local box structure, cluster, and reference
+ * for each input box.  Calculate overall bounds. */
+for (in = *pBoxList; in != NULL; in = in->next)
+    {
+    lmAllocVar(lm, box);
+    box->in = in;
+    if (in->qStart < qStart) qStart = in->qStart;
+    if (in->qEnd > qEnd) qEnd = in->qEnd;
+    if (in->tStart < tStart) tStart = in->tStart;
+    if (in->tEnd > tEnd) tEnd = in->tEnd;
+    lmAllocVar(lm,cluster);
+    lmAllocVar(lm, cluster->node);
+    cluster->node->val = cluster;
+    dlAddTail(&clusterList, cluster->node);
+    cluster->boxList = box;
+    box->cluster = cluster;
+    lmAllocVar(lm, ref);
+    ref->box = box;
+    slAddHead(&refList, ref);
+    }
+
+/* Call to recursive joiner. */
+rBoxJoin(refList, qStart, qEnd, tStart, tEnd);
+
+/* Copy from local memory and local data structures
+ * to global memory and global data structures. */
+for (node = clusterList.head; !dlEnd(node); node = node->next)
+    {
+    int boxCount = 0;
+    int qStart = BIGNUM, qEnd = -BIGNUM;
+    int tStart = BIGNUM, tEnd = -BIGNUM;
+    struct boxIn *boxList = NULL;
+    cluster = node->val;
+    for (box = cluster->boxList; box != NULL; box = box->next)
+	{
+	in = box->in;
+	slAddHead(&boxList, in);
+	if (in->qStart < qStart) qStart = in->qStart;
+	if (in->qEnd > qEnd) qEnd = in->qEnd;
+	if (in->tStart < tStart) tStart = in->tStart;
+	if (in->tEnd > tEnd) tEnd = in->tEnd;
+	++boxCount;
+	}
+    if (boxCount > 0)
+        {
+	AllocVar(clump);
+	slAddHead(&clumpList, clump);
+	clump->boxList = boxList;
+	clump->boxCount = boxCount;
+	clump->qStart = qStart;
+	clump->qEnd = qEnd;
+	clump->tStart = tStart;
+	clump->tEnd = tEnd;
+	}
+    }
+*pBoxList = NULL;
+lmCleanup(&lm);
+return clumpList;
+}
+
diff --git a/gbtools/src/blatSrc/lib/boxLump.c b/gbtools/src/blatSrc/lib/boxLump.c
new file mode 100644
index 0000000..0fdc67c
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/boxLump.c
@@ -0,0 +1,162 @@
+/* boxLump - This will lump together boxes that overlap into the smallest
+ * box that encompasses the overlap.  It will put other boxes that 
+ * fit in the encompassing box in there too. 
+ *   It works by projecting the box list along one dimension at a
+ * time looking for gaps between boxes. This is similar in function
+ * to boxFindClumps, but a bit less precise, and quite a bit faster.
+ * in some important cases. */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "hash.h"
+#include "boxClump.h"
+#include "boxLump.h"
+
+
+int boxInCmpQuery(const void *va, const void *vb)
+/* Compare to sort based on query start. */
+{
+const struct boxIn *a = *((struct boxIn **)va);
+const struct boxIn *b = *((struct boxIn **)vb);
+return a->qStart - b->qStart;
+}
+
+int boxInCmpTarget(const void *va, const void *vb)
+/* Compare to sort based on query start. */
+{
+const struct boxIn *a = *((struct boxIn **)va);
+const struct boxIn *b = *((struct boxIn **)vb);
+return a->tStart - b->tStart;
+}
+
+struct boxClump *lumpOneDimension(struct boxIn *boxList, boolean onQuery)
+/* Build box clump list on one dimension. */
+{
+struct boxClump *clump = NULL, *clumpList = NULL;
+struct boxIn *box, *nextBox;
+if (onQuery)
+    slSort(&boxList, boxInCmpQuery);
+else
+    slSort(&boxList, boxInCmpTarget);
+for (box = boxList; box != NULL; box = nextBox)
+    {
+    nextBox = box->next;
+    /* Make new clump containing current box. */
+    if (clump == NULL || 
+        (onQuery && clump->qEnd < box->qStart) ||
+	(!onQuery && clump->tEnd < box->tStart) )
+        {
+	AllocVar(clump);
+	slAddHead(&clumpList, clump);
+	clump->qStart = box->qStart;
+	clump->qEnd = box->qEnd;
+	clump->tStart = box->tStart;
+	clump->tEnd = box->tEnd;
+	clump->boxCount = 1;
+	clump->boxList = box;
+	box->next = NULL;
+	}
+    else
+        {
+	if (clump->tStart > box->tStart)
+	     clump->tStart = box->tStart;
+	if (clump->tEnd < box->tEnd)
+	     clump->tEnd = box->tEnd;
+	if (clump->qEnd < box->qEnd)
+	     clump->qEnd = box->qEnd;
+	if (clump->qStart > box->qStart)
+	     clump->qStart = box->qStart;
+	clump->boxCount += 1;
+	slAddHead(&clump->boxList, box);
+	}
+    }
+return clumpList;
+}
+
+struct boxClump *boxLump(struct boxIn **pBoxList)
+/* Convert list of boxes to a list of lumps.  The lumps
+ * are a smaller number of boxes that between them contain
+ * all of the input boxes.  Note that
+ * the original boxList is overwritten as the boxes
+ * are moved from it to the lumps. */
+{
+struct boxClump *qClumpList = NULL, *tClumpList = NULL, 
+	*tClump;
+
+if (*pBoxList == NULL)
+    return NULL;
+tClumpList = lumpOneDimension(*pBoxList, FALSE);
+
+for (tClump = tClumpList; tClump != NULL; tClump = tClump->next)
+    {
+    struct boxClump *oneList = lumpOneDimension(tClump->boxList, TRUE);
+    if (slCount(oneList) > 1)
+        {
+	struct boxClump *clump;
+	for (clump = oneList; clump != NULL; clump = clump->next)
+	    {
+	    struct boxClump *subList = boxLump(&clump->boxList);
+	    qClumpList = slCat(subList, qClumpList);
+	    }
+	boxClumpFreeList(&oneList);
+	}
+    else
+	{
+	qClumpList = slCat(oneList, qClumpList);
+	}
+    tClump->boxList = NULL;
+    }
+
+boxClumpFreeList(&tClumpList);
+*pBoxList = NULL;
+return qClumpList;
+}
+
+#ifdef DEBUG
+
+int testData[][4] = 
+    {
+	/* qStart, qEnd, tStart, tEnd */
+	{0, 100,     0, 100},
+	{50, 150,    50, 150},
+	{200, 300,   200, 300},
+	{250, 350,   250, 350},
+	{0, 100,     200, 300},
+	{50, 150,    250, 350},
+	{200,300,    0, 100},
+	{250,350,    50, 150},
+	{500,600,    100,300},
+	{500,600,    500, 600},
+	{500,700,    500, 700},
+	{1000,1100,  1000,1100},
+	{1000,1100,  2000,2100},
+    };
+
+
+void testBoxLump()
+/* Test boxLump routine. */
+{
+struct boxIn *boxList = NULL, *box;
+struct boxClump *clumpList, *clump;
+int i;
+
+for (i=0; i<ArraySize(testData); ++i)
+    {
+    AllocVar(box);
+    box->qStart = testData[i][0];
+    box->qEnd = testData[i][1];
+    box->tStart = testData[i][2];
+    box->tEnd = testData[i][3];
+    slAddHead(&boxList, box);
+    }
+clumpList = boxLump(&boxList);
+for (clump = clumpList; clump != NULL; clump = clump->next)
+    {
+    printf("%d,%d,\t%d,%d\n", clump->qStart, clump->qEnd, clump->tStart, clump->tEnd);
+    for (box = clump->boxList; box != NULL; box = box->next)
+	printf("\t%d,%d\t%d,%d\n", box->qStart, box->qEnd, box->tStart, box->tEnd);
+    }
+}
+#endif /* DEBUG */
diff --git a/gbtools/src/blatSrc/lib/bwgCreate.c b/gbtools/src/blatSrc/lib/bwgCreate.c
new file mode 100644
index 0000000..01fe4a7
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/bwgCreate.c
@@ -0,0 +1,1238 @@
+/* bwgCreate - create big wig files.  Implements write side of bwgInternal.h module. 
+ * See the comment in bwgInternal.h for a description of the file format. */
+
+/* Copyright (C) 2014 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "linefile.h"
+#include "hash.h"
+#include "errAbort.h"
+#include "sqlNum.h"
+#include "sig.h"
+#include "zlibFace.h"
+#include "bPlusTree.h"
+#include "cirTree.h"
+#include "bbiFile.h"
+#include "bwgInternal.h"
+#include "bigWig.h"
+
+
+static int bwgBedGraphItemCmp(const void *va, const void *vb)
+/* Compare to sort based on query start. */
+{
+const struct bwgBedGraphItem *a = *((struct bwgBedGraphItem **)va);
+const struct bwgBedGraphItem *b = *((struct bwgBedGraphItem **)vb);
+int dif = (int)a->start - (int)b->start;
+if (dif == 0)
+    dif = (int)a->end - (int)b->end;
+return dif;
+}
+
+static int bwgVariableStepItemCmp(const void *va, const void *vb)
+/* Compare to sort based on query start. */
+{
+const struct bwgVariableStepItem *a = *((struct bwgVariableStepItem **)va);
+const struct bwgVariableStepItem *b = *((struct bwgVariableStepItem **)vb);
+return (int)a->start - (int)b->start;
+}
+
+void bwgDumpSummary(struct bbiSummary *sum, FILE *f)
+/* Write out summary info to file. */
+{
+fprintf(f, "summary %d:%d-%d min=%f, max=%f, sum=%f, sumSquares=%f, validCount=%d, mean=%f\n",
+     sum->chromId, sum->start, sum->end, sum->minVal, sum->maxVal, sum->sumData,
+     sum->sumSquares, sum->validCount, sum->sumData/sum->validCount);
+}
+
+static int bwgSectionWrite(struct bwgSection *section, boolean doCompress, FILE *f)
+/* Write out section to file, filling in section->fileOffset. */
+{
+UBYTE type = section->type;
+UBYTE reserved8 = 0;
+int itemSize;
+switch (section->type)
+    {
+    case bwgTypeBedGraph:
+        itemSize = 12;
+	break;
+    case bwgTypeVariableStep:
+        itemSize = 8;
+	break;
+    case bwgTypeFixedStep:
+        itemSize = 4;
+	break;
+    default:
+        itemSize = 0;  // Suppress compiler warning
+	internalErr();
+	break;
+    }
+int fixedSize = sizeof(section->chromId) + sizeof(section->start) + sizeof(section->end) + 
+     sizeof(section->itemStep) + sizeof(section->itemSpan) + sizeof(type) + sizeof(reserved8) +
+     sizeof(section->itemCount);
+int bufSize = section->itemCount * itemSize + fixedSize;
+char buf[bufSize];
+char *bufPt = buf;
+
+section->fileOffset = ftell(f);
+memWriteOne(&bufPt, section->chromId);
+memWriteOne(&bufPt, section->start);
+memWriteOne(&bufPt, section->end);
+memWriteOne(&bufPt, section->itemStep);
+memWriteOne(&bufPt, section->itemSpan);
+memWriteOne(&bufPt, type);
+memWriteOne(&bufPt, reserved8);
+memWriteOne(&bufPt, section->itemCount);
+
+int i;
+switch (section->type)
+    {
+    case bwgTypeBedGraph:
+	{
+	struct bwgBedGraphItem *item = section->items.bedGraphList;
+	for (item = section->items.bedGraphList; item != NULL; item = item->next)
+	    {
+	    memWriteOne(&bufPt, item->start);
+	    memWriteOne(&bufPt, item->end);
+	    memWriteOne(&bufPt, item->val);
+	    }
+	break;
+	}
+    case bwgTypeVariableStep:
+	{
+	struct bwgVariableStepPacked *items = section->items.variableStepPacked;
+	for (i=0; i<section->itemCount; ++i)
+	    {
+	    memWriteOne(&bufPt, items->start);
+	    memWriteOne(&bufPt, items->val);
+	    items += 1;
+	    }
+	break;
+	}
+    case bwgTypeFixedStep:
+	{
+	struct bwgFixedStepPacked *items = section->items.fixedStepPacked;
+	for (i=0; i<section->itemCount; ++i)
+	    {
+	    memWriteOne(&bufPt, items->val);
+	    items += 1;
+	    }
+	break;
+	}
+    default:
+        internalErr();
+	break;
+    }
+assert(bufSize == (bufPt - buf) );
+
+if (doCompress)
+    {
+    size_t maxCompSize = zCompBufSize(bufSize);
+    char compBuf[maxCompSize];
+    int compSize = zCompress(buf, bufSize, compBuf, maxCompSize);
+    mustWrite(f, compBuf, compSize);
+    }
+else
+    mustWrite(f, buf, bufSize);
+return bufSize;
+}
+
+
+int bwgSectionCmp(const void *va, const void *vb)
+/* Compare to sort based on chrom,start,end.  */
+{
+const struct bwgSection *a = *((struct bwgSection **)va);
+const struct bwgSection *b = *((struct bwgSection **)vb);
+int dif = strcmp(a->chrom, b->chrom);
+if (dif == 0)
+    {
+    dif = (int)a->start - (int)b->start;
+    if (dif == 0)
+	dif = (int)a->end - (int)b->end;
+    }
+return dif;
+}
+
+static struct cirTreeRange bwgSectionFetchKey(const void *va, void *context)
+/* Fetch bwgSection key for r-tree */
+{
+struct cirTreeRange res;
+const struct bwgSection *a = *((struct bwgSection **)va);
+res.chromIx = a->chromId;
+res.start = a->start;
+res.end = a->end;
+return res;
+}
+
+static bits64 bwgSectionFetchOffset(const void *va, void *context)
+/* Fetch bwgSection file offset for r-tree */
+{
+const struct bwgSection *a = *((struct bwgSection **)va);
+return a->fileOffset;
+}
+
+static boolean stepTypeLine(char *line)
+/* Return TRUE if it's a variableStep or fixedStep line. */
+{
+return (startsWithWord("variableStep", line) || startsWithWord("fixedStep", line));
+}
+
+static boolean steppedSectionEnd(char *line, int maxWords)
+/* Return TRUE if line indicates the start of another section. */
+{
+int wordCount = chopByWhite(line, NULL, 5);
+if (wordCount > maxWords)
+    return TRUE;
+return stepTypeLine(line);
+}
+
+static void parseFixedStepSection(struct lineFile *lf, boolean clipDontDie, struct lm *lm,
+	int itemsPerSlot, char *chrom, bits32 chromSize, bits32 span, bits32 sectionStart, 
+	bits32 step, struct bwgSection **pSectionList)
+/* Read the single column data in section until get to end. */
+{
+struct lm *lmLocal = lmInit(0);
+
+/* Stream through section until get to end of file or next section,
+ * adding values from single column to list. */
+char *words[1];
+char *line;
+struct bwgFixedStepItem *item, *itemList = NULL;
+int originalSectionSize = 0;
+bits32 sectionEnd = sectionStart;
+while (lineFileNextReal(lf, &line))
+    {
+    if (steppedSectionEnd(line, 1))
+	{
+        lineFileReuse(lf);
+	break;
+	}
+    chopLine(line, words);
+    lmAllocVar(lmLocal, item);
+    item->val = lineFileNeedDouble(lf, words, 0);
+    if (sectionEnd + span > chromSize)
+	{
+	warn("line %d of %s: chromosome %s has %u bases, but item ends at %u",
+	    lf->lineIx, lf->fileName, chrom, chromSize, sectionEnd + span);
+	if (!clipDontDie)
+	    noWarnAbort();
+	}
+    else
+	{
+	slAddHead(&itemList, item);
+	++originalSectionSize;
+	}
+    sectionEnd += step;
+    }
+slReverse(&itemList);
+
+/* Break up into sections of no more than items-per-slot size, and convert to packed format. */
+int sizeLeft = originalSectionSize;
+for (item = itemList; item != NULL; )
+    {
+    /* Figure out size of this section  */
+    int sectionSize = sizeLeft;
+    if (sectionSize > itemsPerSlot)
+        sectionSize = itemsPerSlot;
+    sizeLeft -= sectionSize;
+
+
+    /* Allocate and fill in section. */
+    struct bwgSection *section;
+    lmAllocVar(lm, section);
+    section->chrom = chrom;
+    section->start = sectionStart;
+    sectionStart += sectionSize * step;
+    section->end = sectionStart - step + span;
+    section->type = bwgTypeFixedStep;
+    section->itemStep = step;
+    section->itemSpan = span;
+    section->itemCount = sectionSize;
+
+    /* Allocate array for data, and copy from list to array representation */
+    struct bwgFixedStepPacked *packed;		/* An array */
+    section->items.fixedStepPacked = lmAllocArray(lm, packed, sectionSize);
+    int i;
+    for (i=0; i<sectionSize; ++i)
+        {
+	packed->val = item->val;
+	item = item->next;
+	++packed;
+	}
+
+    /* Add section to list. */
+    slAddHead(pSectionList, section);
+    }
+lmCleanup(&lmLocal);
+}
+
+static void parseVariableStepSection(struct lineFile *lf, boolean clipDontDie, struct lm *lm,
+	int itemsPerSlot, char *chrom, int chromSize, bits32 span, struct bwgSection **pSectionList)
+/* Read the single column data in section until get to end. */
+{
+struct lm *lmLocal = lmInit(0);
+
+/* Stream through section until get to end of file or next section,
+ * adding values from single column to list. */
+char *words[2];
+char *line;
+struct bwgVariableStepItem *item, *nextItem, *itemList = NULL;
+int originalSectionSize = 0;
+while (lineFileNextReal(lf, &line))
+    {
+    if (steppedSectionEnd(line, 2))
+	{
+        lineFileReuse(lf);
+	break;
+	}
+    chopLine(line, words);
+    lmAllocVar(lmLocal, item);
+    int start = lineFileNeedNum(lf, words, 0);
+    if (start <= 0)
+	{
+	errAbort("line %d of %s: zero or negative chromosome coordinate not allowed",
+	    lf->lineIx, lf->fileName);
+	}
+    item->start = start - 1;
+    item->val = lineFileNeedDouble(lf, words, 1);
+    if (item->start + span > chromSize)
+        {
+	warn("line %d of %s: chromosome %s has %u bases, but item ends at %u",
+	    lf->lineIx, lf->fileName, chrom, chromSize, item->start + span);
+	if (!clipDontDie)
+	    noWarnAbort();
+	}
+    else
+        {
+	slAddHead(&itemList, item);
+	++originalSectionSize;
+	}
+    }
+slSort(&itemList, bwgVariableStepItemCmp);
+
+/* Make sure no overlap between items. */
+if (itemList != NULL)
+    {
+    item = itemList;
+    for (nextItem = item->next; nextItem != NULL; nextItem = nextItem->next)
+        {
+	if (item->start + span > nextItem->start)
+	    errAbort("Overlap on %s between items starting at %d and %d.\n"
+	             "Please remove overlaps and try again",
+		    chrom, item->start, nextItem->start);
+	item = nextItem;
+	}
+    }
+
+/* Break up into sections of no more than items-per-slot size. */
+int sizeLeft = originalSectionSize;
+for (item = itemList; item != NULL; )
+    {
+    /* Figure out size of this section  */
+    int sectionSize = sizeLeft;
+    if (sectionSize > itemsPerSlot)
+        sectionSize = itemsPerSlot;
+    sizeLeft -= sectionSize;
+
+    /* Convert from list to array representation. */
+    struct bwgVariableStepPacked *packed, *p;		
+    p = lmAllocArray(lm, packed, sectionSize);
+    int i;
+    for (i=0; i<sectionSize; ++i)
+        {
+	p->start = item->start;
+	p->val = item->val;
+	item = item->next;
+	++p;
+	}
+
+    /* Fill in section and add it to list. */
+    struct bwgSection *section;
+    lmAllocVar(lm, section);
+    section->chrom = chrom;
+    section->start = packed[0].start;
+    section->end = packed[sectionSize-1].start + span;
+    section->type = bwgTypeVariableStep;
+    section->items.variableStepPacked = packed;
+    section->itemSpan = span;
+    section->itemCount = sectionSize;
+    slAddHead(pSectionList, section);
+    }
+lmCleanup(&lmLocal);
+}
+
+static unsigned parseUnsignedVal(struct lineFile *lf, char *var, char *val)
+/* Return val as an integer, printing error message if it's not. */
+{
+char c = val[0];
+if (!isdigit(c))
+    errAbort("Expecting numerical value for %s, got %s, line %d of %s", 
+    	var, val, lf->lineIx, lf->fileName);
+return sqlUnsigned(val);
+}
+
+static void parseSteppedSection(struct lineFile *lf, boolean clipDontDie, 
+	struct hash *chromSizeHash, char *initialLine, 
+	struct lm *lm, int itemsPerSlot, struct bwgSection **pSectionList)
+/* Parse out a variableStep or fixedStep section and add it to list, breaking it up as need be. */
+{
+/* Parse out first word of initial line and make sure it is something we recognize. */
+char *typeWord = nextWord(&initialLine);
+enum bwgSectionType type = bwgTypeFixedStep;
+if (sameString(typeWord, "variableStep"))
+    type = bwgTypeVariableStep;
+else if (sameString(typeWord, "fixedStep"))
+    type = bwgTypeFixedStep;
+else
+    errAbort("Unknown type %s\n", typeWord);
+
+/* Set up defaults for values we hope to parse out of rest of line. */
+int span = 0;
+bits32 step = 0;
+bits32 start = 0;
+char *chrom = NULL;
+
+/* Parse out var=val pairs. */
+char *varEqVal;
+while ((varEqVal = nextWord(&initialLine)) != NULL)
+    {
+    char *wordPairs[2];
+    int wc = chopByChar(varEqVal, '=', wordPairs, 2);
+    if (wc != 2)
+        errAbort("strange var=val pair line %d of %s", lf->lineIx, lf->fileName);
+    char *var = wordPairs[0];
+    char *val = wordPairs[1];
+    if (sameString(var, "chrom"))
+        chrom = cloneString(val);
+    else if (sameString(var, "span"))
+	span = parseUnsignedVal(lf, var, val);
+    else if (sameString(var, "step"))
+	step = parseUnsignedVal(lf, var, val);
+    else if (sameString(var, "start"))
+	{
+        start = parseUnsignedVal(lf, var, val);
+	}
+    else
+	errAbort("Unknown setting %s=%s line %d of %s", var, val, lf->lineIx, lf->fileName);
+    }
+
+/* Check that we have all that are required and no more, and call type-specific routine to parse
+ * rest of section. */
+if (chrom == NULL)
+    errAbort("Missing chrom= setting line %d of %s\n", lf->lineIx, lf->fileName);
+bits32 chromSize = (chromSizeHash ? hashIntVal(chromSizeHash, chrom) : BIGNUM);
+if (start > chromSize)
+    {
+    warn("line %d of %s: chromosome %s has %u bases, but item starts at %u",
+    	lf->lineIx, lf->fileName, chrom, chromSize, start);
+    if (!clipDontDie)
+        noWarnAbort();
+    }
+if (type == bwgTypeFixedStep)
+    {
+    if (start == 0)
+	errAbort("Missing start= setting line %d of %s\n", lf->lineIx, lf->fileName);
+    if (step == 0)
+	errAbort("Missing step= setting line %d of %s\n", lf->lineIx, lf->fileName);
+    if (span == 0)
+	span = step;
+    parseFixedStepSection(lf, clipDontDie, lm, itemsPerSlot, 
+    	chrom, chromSize, span, start-1, step, pSectionList);
+    }
+else
+    {
+    if (start != 0)
+	errAbort("Extra start= setting line %d of %s\n", lf->lineIx, lf->fileName);
+    if (step != 0)
+	errAbort("Extra step= setting line %d of %s\n", lf->lineIx, lf->fileName);
+    if (span == 0)
+	span = 1;
+    parseVariableStepSection(lf, clipDontDie, lm, itemsPerSlot, 
+    	chrom, chromSize, span, pSectionList);
+    }
+}
+
+struct bedGraphChrom
+/* A chromosome in bed graph format. */
+    {
+    struct bedGraphChrom *next;		/* Next in list. */
+    char *name;			/* Chromosome name - not allocated here. */
+    bits32 size;		/* Chromosome size. */
+    struct bwgBedGraphItem *itemList;	/* List of items. */
+    };
+
+static int bedGraphChromCmpName(const void *va, const void *vb)
+/* Compare to sort based on query start. */
+{
+const struct bedGraphChrom *a = *((struct bedGraphChrom **)va);
+const struct bedGraphChrom *b = *((struct bedGraphChrom **)vb);
+return strcmp(a->name, b->name);
+}
+
+static void parseBedGraphSection(struct lineFile *lf, boolean clipDontDie, 
+	struct hash *chromSizeHash, struct lm *lm, 
+	int itemsPerSlot, struct bwgSection **pSectionList)
+/* Parse out bedGraph section until we get to something that is not in bedGraph format. */
+{
+/* Set up hash and list to store chromosomes. */
+struct hash *chromHash = hashNew(0);
+struct bedGraphChrom *chrom, *chromList = NULL;
+
+/* Collect lines in items on appropriate chromosomes. */
+struct bwgBedGraphItem *item;
+char *line;
+while (lineFileNextReal(lf, &line))
+    {
+    /* Check for end of section. */
+    if (stepTypeLine(line))
+        {
+	lineFileReuse(lf);
+	break;
+	}
+
+    /* Parse out our line and make sure it has exactly 4 columns. */
+    char *words[5];
+    int wordCount = chopLine(line, words);
+    lineFileExpectWords(lf, 4, wordCount);
+
+    /* Get chromosome. */
+    char *chromName = words[0];
+    chrom = hashFindVal(chromHash, chromName);
+    if (chrom == NULL)
+        {
+	lmAllocVar(chromHash->lm, chrom);
+	hashAddSaveName(chromHash, chromName, chrom, &chrom->name);
+	chrom->size = (chromSizeHash ? hashIntVal(chromSizeHash, chromName) : BIGNUM);
+	slAddHead(&chromList, chrom);
+	}
+
+    /* Convert to item and add to chromosome list. */
+    lmAllocVar(lm, item);
+    item->start = lineFileNeedNum(lf, words, 1);
+    item->end = lineFileNeedNum(lf, words, 2);
+    item->val = lineFileNeedDouble(lf, words, 3);
+
+    /* Do sanity checking on coordinates. */
+    if (item->start > item->end)
+        errAbort("bedGraph error: start (%u) after end line (%u) %d of %s.", 
+		item->start, item->end, lf->lineIx, lf->fileName);
+    if (item->end > chrom->size)
+	{
+        warn("bedGraph error line %d of %s: chromosome %s has size %u but item ends at %u",
+	        lf->lineIx, lf->fileName, chrom->name, chrom->size, item->end);
+	if (!clipDontDie)
+	    noWarnAbort();
+	}
+    else
+	{
+	slAddHead(&chrom->itemList, item);
+	}
+    }
+slSort(&chromList, bedGraphChromCmpName);
+
+/* Loop through each chromosome and output the item list, broken into sections
+ * for that chrom. */
+for (chrom = chromList; chrom != NULL; chrom = chrom->next)
+    {
+    slSort(&chrom->itemList, bwgBedGraphItemCmp);
+
+    /* Check to make sure no overlap between items. */
+    struct bwgBedGraphItem *item = chrom->itemList, *nextItem;
+    for (nextItem = item->next; nextItem != NULL; nextItem = nextItem->next)
+        {
+	if (item->end > nextItem->start)
+	    errAbort("Overlap between %s %d %d and %s %d %d.\nPlease remove overlaps and try again",
+	        chrom->name, item->start, item->end, chrom->name, nextItem->start, nextItem->end);
+	item = nextItem;
+	}
+
+    /* Break up into sections of no more than items-per-slot size. */
+    struct bwgBedGraphItem *startItem, *endItem, *nextStartItem = chrom->itemList;
+    for (startItem = chrom->itemList; startItem != NULL; startItem = nextStartItem)
+	{
+	/* Find end item of this section, and start item for next section.
+	 * Terminate list at end item. */
+	int sectionSize = 0;
+	int i;
+	endItem = startItem;
+	for (i=0; i<itemsPerSlot; ++i)
+	    {
+	    if (nextStartItem == NULL)
+		break;
+	    endItem = nextStartItem;
+	    nextStartItem = nextStartItem->next;
+	    ++sectionSize;
+	    }
+	endItem->next = NULL;
+
+	/* Fill in section and add it to section list. */
+	struct bwgSection *section;
+	lmAllocVar(lm, section);
+	section->chrom = cloneString(chrom->name);
+	section->start = startItem->start;
+	section->end = endItem->end;
+	section->type = bwgTypeBedGraph;
+	section->items.bedGraphList = startItem;
+	section->itemCount = sectionSize;
+	slAddHead(pSectionList, section);
+	}
+    }
+
+/* Free up hash, no longer needed. Free's chromList as a side effect since chromList is in 
+ * hash's memory. */
+hashFree(&chromHash);
+chromList = NULL;
+}
+
+void bwgMakeChromInfo(struct bwgSection *sectionList, struct hash *chromSizeHash,
+	int *retChromCount, struct bbiChromInfo **retChromArray,
+	int *retMaxChromNameSize)
+/* Fill in chromId field in sectionList.  Return array of chromosome name/ids. 
+ * The chromSizeHash is keyed by name, and has int values. */
+{
+/* Build up list of unique chromosome names. */
+struct bwgSection *section;
+char *chromName = "";
+int chromCount = 0;
+int maxChromNameSize = 0;
+struct slRef *uniq, *uniqList = NULL;
+for (section = sectionList; section != NULL; section = section->next)
+    {
+    if (!sameString(section->chrom, chromName))
+        {
+	chromName = section->chrom;
+	refAdd(&uniqList, chromName);
+	++chromCount;
+	int len = strlen(chromName);
+	if (len > maxChromNameSize)
+	    maxChromNameSize = len;
+	}
+    section->chromId = chromCount-1;
+    }
+slReverse(&uniqList);
+
+/* Allocate and fill in results array. */
+struct bbiChromInfo *chromArray;
+AllocArray(chromArray, chromCount);
+int i;
+for (i = 0, uniq = uniqList; i < chromCount; ++i, uniq = uniq->next)
+    {
+    chromArray[i].name = uniq->val;
+    chromArray[i].id = i;
+    chromArray[i].size = hashIntVal(chromSizeHash, uniq->val);
+    }
+
+/* Clean up, set return values and go home. */
+slFreeList(&uniqList);
+*retChromCount = chromCount;
+*retChromArray = chromArray;
+*retMaxChromNameSize = maxChromNameSize;
+}
+
+static int bwgStrcmp (const void * A, const void * B) {
+	char * stringA = *((char **) A);
+	char * stringB = *((char **) B);
+	return strcmp(stringA, stringB);
+}
+
+void bwgMakeAllChromInfo(struct bwgSection *sectionList, struct hash *chromSizeHash,
+	int *retChromCount, struct bbiChromInfo **retChromArray,
+	int *retMaxChromNameSize)
+/* Fill in chromId field in sectionList.  Return array of chromosome name/ids. 
+ * The chromSizeHash is keyed by name, and has int values. */
+{
+/* Build up list of unique chromosome names. */
+int maxChromNameSize = 0;
+
+/* Get list of values */
+int chromCount = chromSizeHash->elCount;
+char ** chromName, ** chromNames;
+AllocArray(chromNames, chromCount);
+chromName = chromNames;
+struct hashEl* el;
+struct hashCookie cookie = hashFirst(chromSizeHash);
+for (el = hashNext(&cookie); el; el = hashNext(&cookie)) {
+	*chromName = el->name;
+	if (strlen(el->name) > maxChromNameSize)
+		maxChromNameSize = strlen(el->name);
+	chromName++;
+}
+qsort(chromNames, chromCount, sizeof(char *), bwgStrcmp);
+
+/* Allocate and fill in results array. */
+struct bbiChromInfo *chromArray;
+AllocArray(chromArray, chromCount);
+int i;
+for (i = 0; i < chromCount; ++i)
+    {
+    chromArray[i].name = chromNames[i];
+    chromArray[i].id = i;
+    chromArray[i].size = hashIntVal(chromSizeHash, chromNames[i]);
+    }
+
+// Assign IDs to sections:
+struct bwgSection *section;
+char *name = "";
+bits32 chromId = 0;
+for (section = sectionList; section != NULL; section = section->next)
+    {
+    if (!sameString(section->chrom, name))
+        {
+        for (i = 0; i < chromCount; ++i)
+            {
+	    if (sameString(section->chrom, chromArray[i].name)) 
+	        {
+		    section->chromId = i;
+	    	    break;
+	        }
+	    }
+	if (i == chromCount)
+		errAbort("Could not find %s in list of chromosomes\n", section->chrom);
+	chromId = section->chromId;
+	name = section->chrom;
+	}
+    else 
+	section->chromId = chromId;
+    }
+
+/* Clean up, set return values and go home. */
+*retChromCount = chromCount;
+*retChromArray = chromArray;
+*retMaxChromNameSize = maxChromNameSize;
+}
+
+int bwgAverageResolution(struct bwgSection *sectionList)
+/* Return the average resolution seen in sectionList. */
+{
+if (sectionList == NULL)
+    return 1;
+bits64 totalRes = 0;
+bits32 sectionCount = 0;
+struct bwgSection *section;
+int i;
+for (section = sectionList; section != NULL; section = section->next)
+    {
+    int sectionRes = 0;
+    switch (section->type)
+        {
+	case bwgTypeBedGraph:
+	    {
+	    struct bwgBedGraphItem *item;
+	    sectionRes = BIGNUM;
+	    for (item = section->items.bedGraphList; item != NULL; item = item->next)
+		{
+		int size = item->end - item->start;
+		if (sectionRes > size)
+		    sectionRes = size;
+		}
+	    break;
+	    }
+	case bwgTypeVariableStep:
+	    {
+	    struct bwgVariableStepPacked *items = section->items.variableStepPacked, *prev;
+	    bits32 smallestGap = BIGNUM;
+	    for (i=1; i<section->itemCount; ++i)
+	        {
+		prev = items;
+		items += 1;
+		bits32 gap = items->start - prev->start;
+		if (smallestGap > gap)
+		    smallestGap = gap;
+		}
+	    if (smallestGap != BIGNUM)
+	        sectionRes = smallestGap;
+	    else
+	        sectionRes = section->itemSpan;
+	    break;
+	    }
+	case bwgTypeFixedStep:
+	    {
+	    sectionRes = section->itemStep;
+	    break;
+	    }
+	default:
+	    internalErr();
+	    break;
+	}
+    totalRes += sectionRes;
+    ++sectionCount;
+    }
+return (totalRes + sectionCount/2)/sectionCount;
+}
+
+#define bwgSectionHeaderSize 24	/* Size of section header in file. */
+
+static int bwgItemSize(enum bwgSectionType type)
+/* Return size of an item inside a particular section. */
+{
+switch (type)
+    {
+    case bwgTypeBedGraph:
+	return 2*sizeof(bits32) + sizeof(float);
+	break;
+    case bwgTypeVariableStep:
+	return sizeof(bits32) + sizeof(float);
+	break;
+    case bwgTypeFixedStep:
+	return sizeof(float);
+	break;
+    default:
+        internalErr();
+	return 0;
+    }
+}
+
+static int bwgSectionSize(struct bwgSection *section)
+/* Return size (on disk) of section. */
+{
+return bwgSectionHeaderSize + bwgItemSize(section->type) * section->itemCount;
+}
+
+static bits64 bwgTotalSectionSize(struct bwgSection *sectionList)
+/* Return total size of all sections. */
+{
+bits64 total = 0;
+struct bwgSection *section;
+for (section = sectionList; section != NULL; section = section->next)
+    total += bwgSectionSize(section);
+return total;
+}
+
+static void bwgReduceBedGraph(struct bwgSection *section, bits32 chromSize, int reduction, 
+	struct bbiSummary **pOutList)
+/*Reduce a bedGraph section onto outList. */
+{
+struct bwgBedGraphItem *item = section->items.bedGraphList;
+for (item = section->items.bedGraphList; item != NULL; item = item->next)
+    {
+    bbiAddRangeToSummary(section->chromId, chromSize, item->start, item->end, 
+    	item->val, reduction, pOutList);
+    }
+}
+
+static void bwgReduceVariableStep(struct bwgSection *section, bits32 chromSize, int reduction, 
+	struct bbiSummary **pOutList)
+/*Reduce a variableStep section onto outList. */
+{
+struct bwgVariableStepPacked *items = section->items.variableStepPacked;
+int i;
+for (i=0; i<section->itemCount; ++i)
+    {
+    bbiAddRangeToSummary(section->chromId, chromSize, 
+    	items->start, items->start + section->itemSpan, items->val, reduction, pOutList);
+    items += 1;
+    }
+}
+
+static void bwgReduceFixedStep(struct bwgSection *section, bits32 chromSize, int reduction, 
+	struct bbiSummary **pOutList)
+/*Reduce a fixedStep section onto outList. */
+{
+struct bwgFixedStepPacked *items = section->items.fixedStepPacked;
+int start = section->start;
+int i;
+for (i=0; i<section->itemCount; ++i)
+    {
+    bbiAddRangeToSummary(section->chromId, chromSize, start, start + section->itemSpan, items->val, 
+    	reduction, pOutList);
+    start += section->itemStep;
+    items += 1;
+    }
+}
+
+struct bbiSummary *bwgReduceSectionList(struct bwgSection *sectionList, 
+	struct bbiChromInfo *chromInfoArray, int reduction)
+/* Return summary of section list reduced by given amount. */
+{
+struct bbiSummary *outList = NULL;
+struct bwgSection *section = NULL;
+
+/* Loop through input section list reducing into outList. */
+for (section = sectionList; section != NULL; section = section->next)
+    {
+    bits32 chromSize = chromInfoArray[section->chromId].size;
+    switch (section->type)
+        {
+	case bwgTypeBedGraph:
+	    bwgReduceBedGraph(section, chromSize, reduction, &outList);
+	    break;
+	case bwgTypeVariableStep:
+	    bwgReduceVariableStep(section, chromSize, reduction, &outList);
+	    break;
+	case bwgTypeFixedStep:
+	    bwgReduceFixedStep(section, chromSize, reduction, &outList);
+	    break;
+	default:
+	    internalErr();
+	    return 0;
+	}
+    }
+slReverse(&outList);
+return outList;
+}
+
+static void bwgComputeDynamicSummaries(struct bwgSection *sectionList, struct bbiSummary ** reduceSummaries, bits16 * summaryCount, struct bbiChromInfo *chromInfoArray, int chromCount, bits32 * reductionAmounts, boolean doCompress) {
+/* Figure out initial summary level - starting with a summary 10 times the amount
+ * of the smallest item.  See if summarized data is smaller than half input data, if
+ * not bump up reduction by a factor of 2 until it is, or until further summarying
+ * yeilds no size reduction. */
+int i;
+int  minRes = bwgAverageResolution(sectionList);
+int initialReduction = minRes*10;
+bits64 fullSize = bwgTotalSectionSize(sectionList);
+bits64 lastSummarySize = 0, summarySize;
+bits64 maxReducedSize = fullSize/2;
+struct bbiSummary *summaryList = NULL;
+for (;;)
+    {
+    summaryList = bwgReduceSectionList(sectionList, chromInfoArray, initialReduction);
+    bits64 summarySize = bbiTotalSummarySize(summaryList);
+    if (doCompress)
+	{
+        summarySize *= 2;	// Compensate for summary not compressing as well as primary data
+	}
+    if (summarySize >= maxReducedSize && summarySize != lastSummarySize)
+        {
+	/* Need to do more reduction.  First scale reduction by amount that it missed
+	 * being small enough last time, with an extra 10% for good measure.  Then
+	 * just to keep from spinning through loop two many times, make sure this is
+	 * at least 2x the previous reduction. */
+	int nextReduction = 1.1 * initialReduction * summarySize / maxReducedSize;
+	if (nextReduction < initialReduction*2)
+	    nextReduction = initialReduction*2;
+	initialReduction = nextReduction;
+	bbiSummaryFreeList(&summaryList);
+	lastSummarySize = summarySize;
+	}
+    else
+        break;
+    }
+*summaryCount = 1;
+reduceSummaries[0] = summaryList;
+reductionAmounts[0] = initialReduction;
+
+/* Now calculate up to 10 levels of further summary. */
+bits64 reduction = initialReduction;
+for (i=0; i<9; i++)
+    {
+    reduction *= 4;
+    if (reduction > 1000000000)
+        break;
+    summaryList = bbiReduceSummaryList(reduceSummaries[*summaryCount-1], chromInfoArray, 
+    	reduction);
+    summarySize = bbiTotalSummarySize(summaryList);
+    if (summarySize != lastSummarySize)
+        {
+ 	reduceSummaries[*summaryCount] = summaryList;
+	reductionAmounts[*summaryCount] = reduction;
+	++(*summaryCount);
+	}
+    int summaryItemCount = slCount(summaryList);
+    if (summaryItemCount <= chromCount)
+        break;
+    }
+
+}
+
+static void bwgComputeFixedSummaries(struct bwgSection * sectionList, struct bbiSummary ** reduceSummaries, bits16 * summaryCount, struct bbiChromInfo *chromInfoArray, bits32 * reductionAmounts) {
+// Hack: pre-defining summary levels, set off Ensembl default zoom levels
+// The last two values of this array were extrapolated following Jim's formula
+int i;
+#define REDUCTION_COUNT 10
+bits32 presetReductions[REDUCTION_COUNT] = {30, 65, 130, 260, 450, 648, 950, 1296, 4800, 19200}; 
+
+bits64 reduction = reductionAmounts[0] = presetReductions[0];
+reduceSummaries[0] = bwgReduceSectionList(sectionList, chromInfoArray, presetReductions[0]);
+
+for (i=1; i<REDUCTION_COUNT; i++)
+    {
+    reduction = reductionAmounts[i] = presetReductions[i];
+    reduceSummaries[i] = bbiReduceSummaryList(reduceSummaries[i-1], chromInfoArray, 
+    	reduction);
+    }
+
+*summaryCount = REDUCTION_COUNT;
+}
+
+void bwgCreate(struct bwgSection *sectionList, struct hash *chromSizeHash, 
+	int blockSize, int itemsPerSlot, boolean doCompress, boolean keepAllChromosomes,
+        boolean fixedSummaries, char *fileName)
+/* Create a bigWig file out of a sorted sectionList. */
+{
+bits64 sectionCount = slCount(sectionList);
+FILE *f = mustOpen(fileName, "wb");
+bits32 sig = bigWigSig;
+bits16 version = bbiCurrentVersion;
+bits16 summaryCount = 0;
+bits16 reserved16 = 0;
+bits32 reserved32 = 0;
+bits64 reserved64 = 0;
+bits64 dataOffset = 0, dataOffsetPos;
+bits64 indexOffset = 0, indexOffsetPos;
+bits64 chromTreeOffset = 0, chromTreeOffsetPos;
+bits64 totalSummaryOffset = 0, totalSummaryOffsetPos;
+bits32 uncompressBufSize = 0;
+bits64 uncompressBufSizePos;
+struct bbiSummary *reduceSummaries[10];
+bits32 reductionAmounts[10];
+bits64 reductionDataOffsetPos[10];
+bits64 reductionDataOffsets[10];
+bits64 reductionIndexOffsets[10];
+int i;
+
+/* Figure out chromosome ID's. */
+struct bbiChromInfo *chromInfoArray;
+int chromCount, maxChromNameSize;
+if (keepAllChromosomes)
+    bwgMakeAllChromInfo(sectionList, chromSizeHash, &chromCount, &chromInfoArray, &maxChromNameSize);
+else
+    bwgMakeChromInfo(sectionList, chromSizeHash, &chromCount, &chromInfoArray, &maxChromNameSize);
+
+if (fixedSummaries) 
+    bwgComputeFixedSummaries(sectionList, reduceSummaries, &summaryCount, chromInfoArray, reductionAmounts);
+else 
+    bwgComputeDynamicSummaries(sectionList, reduceSummaries, &summaryCount, chromInfoArray, chromCount, reductionAmounts, doCompress);
+
+/* Write fixed header. */
+writeOne(f, sig);
+writeOne(f, version);
+writeOne(f, summaryCount);
+chromTreeOffsetPos = ftell(f);
+writeOne(f, chromTreeOffset);
+dataOffsetPos = ftell(f);
+writeOne(f, dataOffset);
+indexOffsetPos = ftell(f);
+writeOne(f, indexOffset);
+writeOne(f, reserved16);  /* fieldCount */
+writeOne(f, reserved16);  /* definedFieldCount */
+writeOne(f, reserved64);  /* autoSqlOffset. */
+totalSummaryOffsetPos = ftell(f);
+writeOne(f, totalSummaryOffset);
+uncompressBufSizePos = ftell(f);
+writeOne(f, uncompressBufSize);
+writeOne(f, reserved64);  /* nameIndexOffset */
+assert(ftell(f) == 64);
+
+/* Write summary headers */
+for (i=0; i<summaryCount; ++i)
+    {
+    writeOne(f, reductionAmounts[i]);
+    writeOne(f, reserved32);
+    reductionDataOffsetPos[i] = ftell(f);
+    writeOne(f, reserved64);	// Fill in with data offset later
+    writeOne(f, reserved64);	// Fill in with index offset later
+    }
+
+/* Write dummy summary */
+struct bbiSummaryElement totalSum;
+ZeroVar(&totalSum);
+totalSummaryOffset = ftell(f);
+bbiSummaryElementWrite(f, &totalSum);
+
+/* Write chromosome bPlusTree */
+chromTreeOffset = ftell(f);
+int chromBlockSize = min(blockSize, chromCount);
+bptFileBulkIndexToOpenFile(chromInfoArray, sizeof(chromInfoArray[0]), chromCount, chromBlockSize,
+    bbiChromInfoKey, maxChromNameSize, bbiChromInfoVal, 
+    sizeof(chromInfoArray[0].id) + sizeof(chromInfoArray[0].size), 
+    f);
+
+/* Write out data section count and sections themselves. */
+dataOffset = ftell(f);
+writeOne(f, sectionCount);
+struct bwgSection *section;
+for (section = sectionList; section != NULL; section = section->next)
+    {
+    bits32 uncSizeOne = bwgSectionWrite(section, doCompress, f);
+    if (uncSizeOne > uncompressBufSize)
+         uncompressBufSize = uncSizeOne;
+    }
+
+/* Write out index - creating a temporary array rather than list representation of
+ * sections in the process. */
+indexOffset = ftell(f);
+struct bwgSection **sectionArray;
+AllocArray(sectionArray, sectionCount);
+for (section = sectionList, i=0; section != NULL; section = section->next, ++i)
+    sectionArray[i] = section;
+cirTreeFileBulkIndexToOpenFile(sectionArray, sizeof(sectionArray[0]), sectionCount,
+    blockSize, 1, NULL, bwgSectionFetchKey, bwgSectionFetchOffset, 
+    indexOffset, f);
+freez(&sectionArray);
+
+/* Write out summary sections. */
+verbose(2, "bwgCreate writing %d summaries\n", summaryCount);
+for (i=0; i<summaryCount; ++i)
+    {
+    reductionDataOffsets[i] = ftell(f);
+    reductionIndexOffsets[i] = bbiWriteSummaryAndIndex(reduceSummaries[i], blockSize, itemsPerSlot, doCompress, f);
+    verbose(3, "wrote %d of data, %d of index on level %d\n", (int)(reductionIndexOffsets[i] - reductionDataOffsets[i]), (int)(ftell(f) - reductionIndexOffsets[i]), i);
+    }
+
+/* Calculate summary */
+struct bbiSummary *sum = reduceSummaries[0];
+if (sum != NULL)
+    {
+    totalSum.validCount = sum->validCount;
+    totalSum.minVal = sum->minVal;
+    totalSum.maxVal = sum->maxVal;
+    totalSum.sumData = sum->sumData;
+    totalSum.sumSquares = sum->sumSquares;
+    for (sum = sum->next; sum != NULL; sum = sum->next)
+	{
+	totalSum.validCount += sum->validCount;
+	if (sum->minVal < totalSum.minVal) totalSum.minVal = sum->minVal;
+	if (sum->maxVal > totalSum.maxVal) totalSum.maxVal = sum->maxVal;
+	totalSum.sumData += sum->sumData;
+	totalSum.sumSquares += sum->sumSquares;
+	}
+    /* Write real summary */
+    fseek(f, totalSummaryOffset, SEEK_SET);
+    bbiSummaryElementWrite(f, &totalSum);
+    }
+else
+    totalSummaryOffset = 0;	/* Edge case, no summary. */
+
+/* Go back and fill in offsets properly in header. */
+fseek(f, dataOffsetPos, SEEK_SET);
+writeOne(f, dataOffset);
+fseek(f, indexOffsetPos, SEEK_SET);
+writeOne(f, indexOffset);
+fseek(f, chromTreeOffsetPos, SEEK_SET);
+writeOne(f, chromTreeOffset);
+fseek(f, totalSummaryOffsetPos, SEEK_SET);
+writeOne(f, totalSummaryOffset);
+
+if (doCompress)
+    {
+    int maxZoomUncompSize = itemsPerSlot * sizeof(struct bbiSummaryOnDisk);
+    if (maxZoomUncompSize > uncompressBufSize)
+	uncompressBufSize = maxZoomUncompSize;
+    fseek(f, uncompressBufSizePos, SEEK_SET);
+    writeOne(f, uncompressBufSize);
+    }
+
+/* Also fill in offsets in zoom headers. */
+for (i=0; i<summaryCount; ++i)
+    {
+    fseek(f, reductionDataOffsetPos[i], SEEK_SET);
+    writeOne(f, reductionDataOffsets[i]);
+    writeOne(f, reductionIndexOffsets[i]);
+    }
+
+/* Write end signature. */
+fseek(f, 0L, SEEK_END);
+writeOne(f, sig);
+
+/* Clean up */
+freez(&chromInfoArray);
+carefulClose(&f);
+}
+
+struct bwgSection *bwgParseWig(
+	char *fileName,       /* Name of ascii wig file. */
+	boolean clipDontDie,  /* Skip items outside chromosome rather than aborting. */
+	struct hash *chromSizeHash,  /* If non-NULL items checked to be inside chromosome. */
+	int maxSectionSize,   /* Biggest size of a section.  100 - 100,000 is usual range. */
+	struct lm *lm)	      /* Memory pool to allocate from. */
+/* Parse out ascii wig file - allocating memory in lm. */
+{
+struct lineFile *lf = lineFileOpen(fileName, TRUE);
+char *line;
+struct bwgSection *sectionList = NULL;
+
+/* remove initial browser and track lines */
+lineFileRemoveInitialCustomTrackLines(lf);
+
+while (lineFileNextReal(lf, &line))
+    {
+    verbose(2, "processing %s\n", line);
+    if (stringIn("chrom=", line))
+	parseSteppedSection(lf, clipDontDie, chromSizeHash, line, lm, maxSectionSize, &sectionList);
+    else
+        {
+	/* Check for bed... */
+	char *dupe = cloneString(line);
+	char *words[5];
+	int wordCount = chopLine(dupe, words);
+	if (wordCount != 4)
+	    errAbort("Unrecognized line %d of %s:\n%s\n", lf->lineIx, lf->fileName, line);
+
+	/* Parse out a bed graph line just to check numerical format. */
+	char *chrom = words[0];
+	int start = lineFileNeedNum(lf, words, 1);
+	int end = lineFileNeedNum(lf, words, 2);
+	double val = lineFileNeedDouble(lf, words, 3);
+	verbose(2, "bedGraph %s:%d-%d@%g\n", chrom, start, end, val);
+
+	/* Push back line and call bed parser. */
+	lineFileReuse(lf);
+	parseBedGraphSection(lf, clipDontDie, chromSizeHash, lm, maxSectionSize, &sectionList);
+	}
+    }
+slSort(&sectionList, bwgSectionCmp);
+
+/* Check for overlap at section level. */
+struct bwgSection *section, *nextSection;
+for (section = sectionList; section != NULL; section = nextSection)
+    {
+    nextSection = section->next;
+    if (nextSection != NULL)
+        {
+	if (sameString(section->chrom, nextSection->chrom))
+	    {
+	    if (section->end > nextSection->start)
+	        {
+		errAbort("There's more than one value for %s base %d (in coordinates that start with 1).\n",
+		    section->chrom, nextSection->start+1);
+		}
+	    }
+	}
+    }
+
+return sectionList;
+}
+
+void bigWigFileCreateEx(
+	char *inName, 		/* Input file in ascii wiggle format. */
+	char *chromSizes, 	/* Two column tab-separated file: <chromosome> <size>. */
+	int blockSize,		/* Number of items to bundle in r-tree.  1024 is good. */
+	int itemsPerSlot,	/* Number of items in lowest level of tree.  512 is good. */
+	boolean clipDontDie,	/* If TRUE then clip items off end of chrom rather than dying. */
+	boolean compress,	/* If TRUE then compress data. */
+	boolean keepAllChromosomes,	/* If TRUE then store all chromosomes in chromosomal b-tree. */
+	boolean fixedSummaries,	/* If TRUE then impose fixed summary levels. */
+	char *outName)
+/* Convert ascii format wig file (in fixedStep, variableStep or bedGraph format) 
+ * to binary big wig format. */
+{
+/* This code needs to agree with code in two other places currently - bigBedFileCreate,
+ * and bbiFileOpen.  I'm thinking of refactoring to share at least between
+ * bigBedFileCreate and bigWigFileCreate.  It'd be great so it could be structured
+ * so that it could send the input in one chromosome at a time, and send in the zoom
+ * stuff only after all the chromosomes are done.  This'd potentially reduce the memory
+ * footprint by a factor of 2 or 4.  Still, for now it works. -JK */
+struct hash *chromSizeHash = bbiChromSizesFromFile(chromSizes);
+struct lm *lm = lmInit(0);
+struct bwgSection *sectionList = bwgParseWig(inName, clipDontDie, chromSizeHash, itemsPerSlot, lm);
+if (sectionList == NULL)
+    errAbort("%s is empty of data", inName);
+bwgCreate(sectionList, chromSizeHash, blockSize, itemsPerSlot, compress, keepAllChromosomes, fixedSummaries, outName);
+lmCleanup(&lm);
+}
+
+void bigWigFileCreate(
+	char *inName, 		/* Input file in ascii wiggle format. */
+	char *chromSizes, 	/* Two column tab-separated file: <chromosome> <size>. */
+	int blockSize,		/* Number of items to bundle in r-tree.  1024 is good. */
+	int itemsPerSlot,	/* Number of items in lowest level of tree.  512 is good. */
+	boolean clipDontDie,	/* If TRUE then clip items off end of chrom rather than dying. */
+	boolean compress,	/* If TRUE then compress data. */
+	char *outName)
+/* Convert ascii format wig file (in fixedStep, variableStep or bedGraph format) 
+ * to binary big wig format. */
+{
+bigWigFileCreateEx( inName, chromSizes, blockSize, itemsPerSlot, clipDontDie,
+	compress, FALSE, FALSE, outName);
+}
+
diff --git a/gbtools/src/blatSrc/lib/bwgQuery.c b/gbtools/src/blatSrc/lib/bwgQuery.c
new file mode 100644
index 0000000..838f24e
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/bwgQuery.c
@@ -0,0 +1,402 @@
+/* bwgQuery - implements the query side of bigWig.  See bwgInternal.h for definition of file
+ * format. */
+
+/* Copyright (C) 2012 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "linefile.h"
+#include "hash.h"
+#include "options.h"
+#include "sig.h"
+#include "sqlNum.h"
+#include "obscure.h"
+#include "dystring.h"
+#include "bPlusTree.h"
+#include "cirTree.h"
+#include "rangeTree.h"
+#include "udc.h"
+#include "zlibFace.h"
+#include "bbiFile.h"
+#include "bwgInternal.h"
+#include "bigWig.h"
+#include "bigBed.h"
+
+
+struct bbiFile *bigWigFileOpen(char *fileName)
+/* Open up big wig file. */
+{
+return bbiFileOpen(fileName, bigWigSig, "big wig");
+}
+
+boolean bigWigFileCheckSigs(char *fileName)
+/* check file signatures at beginning and end of file */
+{
+return bbiFileCheckSigs(fileName, bigWigSig, "big wig");
+}
+
+#ifdef OLD
+static void bwgSectionHeadRead(struct bbiFile *bwf, struct bwgSectionHead *head)
+/* Read section header. */
+{
+struct udcFile *udc = bwf->udc;
+boolean isSwapped = bwf->isSwapped;
+head->chromId = udcReadBits32(udc, isSwapped);
+head->start = udcReadBits32(udc, isSwapped);
+head->end = udcReadBits32(udc, isSwapped);
+head->itemStep = udcReadBits32(udc, isSwapped);
+head->itemSpan = udcReadBits32(udc, isSwapped);
+head->type = udcGetChar(udc);
+head->reserved = udcGetChar(udc);
+head->itemCount = udcReadBits16(udc, isSwapped);
+}
+#endif /* OLD */
+
+void bwgSectionHeadFromMem(char **pPt, struct bwgSectionHead *head, boolean isSwapped)
+/* Read section header. */
+{
+char *pt = *pPt;
+head->chromId = memReadBits32(&pt, isSwapped);
+head->start = memReadBits32(&pt, isSwapped);
+head->end = memReadBits32(&pt, isSwapped);
+head->itemStep = memReadBits32(&pt, isSwapped);
+head->itemSpan = memReadBits32(&pt, isSwapped);
+head->type = *pt++;
+head->reserved = *pt++;
+head->itemCount = memReadBits16(&pt, isSwapped);
+*pPt = pt;
+}
+
+static int bigWigBlockDumpIntersectingRange(boolean isSwapped, char *blockPt, char *blockEnd, 
+	char *chrom, bits32 rangeStart, bits32 rangeEnd, int maxCount, FILE *out)
+/* Print out info on parts of block that intersect start-end, block starting at current position. */
+{
+struct bwgSectionHead head;
+bwgSectionHeadFromMem(&blockPt, &head, isSwapped);
+bits16 i;
+float val;
+int outCount = 0;
+
+switch (head.type)
+    {
+    case bwgTypeBedGraph:
+	{
+	fprintf(out, "#bedGraph section %s:%u-%u\n",  chrom, head.start, head.end);
+	for (i=0; i<head.itemCount; ++i)
+	    {
+	    bits32 start = memReadBits32(&blockPt, isSwapped);
+	    bits32 end = memReadBits32(&blockPt, isSwapped);
+	    val = memReadFloat(&blockPt, isSwapped);
+	    if (rangeIntersection(rangeStart, rangeEnd, start, end) > 0)
+		{
+		fprintf(out, "%s\t%u\t%u\t%g\n", chrom, start, end, val);
+		++outCount;
+		if (maxCount != 0 && outCount >= maxCount)
+		    break;
+		}
+	    }
+	break;
+	}
+    case bwgTypeVariableStep:
+	{
+	fprintf(out, "variableStep chrom=%s span=%u\n", chrom, head.itemSpan);
+	for (i=0; i<head.itemCount; ++i)
+	    {
+	    bits32 start = memReadBits32(&blockPt, isSwapped);
+	    val = memReadFloat(&blockPt, isSwapped);
+	    if (rangeIntersection(rangeStart, rangeEnd, start, start+head.itemSpan) > 0)
+		{
+		fprintf(out, "%u\t%g\n", start+1, val);
+		++outCount;
+		if (maxCount != 0 && outCount >= maxCount)
+		    break;
+		}
+	    }
+	break;
+	}
+    case bwgTypeFixedStep:
+	{
+	boolean gotStart = FALSE;
+	bits32 start = head.start;
+	for (i=0; i<head.itemCount; ++i)
+	    {
+	    val = memReadFloat(&blockPt, isSwapped);
+	    if (rangeIntersection(rangeStart, rangeEnd, start, start+head.itemSpan) > 0)
+	        {
+		if (!gotStart)
+		    {
+		    fprintf(out, "fixedStep chrom=%s start=%u step=%u span=%u\n", 
+			    chrom, start+1, head.itemStep, head.itemSpan);
+		    gotStart = TRUE;
+		    }
+		fprintf(out, "%g\n", val);
+		++outCount;
+		if (maxCount != 0 && outCount >= maxCount)
+		    break;
+		}
+	    start += head.itemStep;
+	    }
+	break;
+	}
+    default:
+        internalErr();
+	break;
+    }
+assert( (maxCount != 0 && outCount >= maxCount) || (blockPt == blockEnd));
+return outCount;
+}
+
+struct bbiInterval *bigWigIntervalQuery(struct bbiFile *bwf, char *chrom, bits32 start, bits32 end,
+	struct lm *lm)
+/* Get data for interval.  Return list allocated out of lm. */
+{
+if (bwf->typeSig != bigWigSig)
+   errAbort("Trying to do bigWigIntervalQuery on a non big-wig file.");
+bbiAttachUnzoomedCir(bwf);
+struct bbiInterval *el, *list = NULL;
+struct fileOffsetSize *blockList = bbiOverlappingBlocks(bwf, bwf->unzoomedCir, 
+	chrom, start, end, NULL);
+struct fileOffsetSize *block, *beforeGap, *afterGap;
+struct udcFile *udc = bwf->udc;
+boolean isSwapped = bwf->isSwapped;
+float val;
+int i;
+
+/* Set up for uncompression optionally. */
+char *uncompressBuf = NULL;
+if (bwf->uncompressBufSize > 0)
+    uncompressBuf = needLargeMem(bwf->uncompressBufSize);
+
+/* This loop is a little complicated because we merge the read requests for efficiency, but we 
+ * have to then go back through the data one unmerged block at a time. */
+for (block = blockList; block != NULL; )
+    {
+    /* Find contigious blocks and read them into mergedBuf. */
+    fileOffsetSizeFindGap(block, &beforeGap, &afterGap);
+    bits64 mergedOffset = block->offset;
+    bits64 mergedSize = beforeGap->offset + beforeGap->size - mergedOffset;
+    udcSeek(udc, mergedOffset);
+    char *mergedBuf = needLargeMem(mergedSize);
+    udcMustRead(udc, mergedBuf, mergedSize);
+    char *blockBuf = mergedBuf;
+
+    /* Loop through individual blocks within merged section. */
+    for (;block != afterGap; block = block->next)
+        {
+	/* Uncompress if necessary. */
+	char *blockPt, *blockEnd;
+	if (uncompressBuf)
+	    {
+	    blockPt = uncompressBuf;
+	    int uncSize = zUncompress(blockBuf, block->size, uncompressBuf, bwf->uncompressBufSize);
+	    blockEnd = blockPt + uncSize;
+	    }
+	else
+	    {
+	    blockPt = blockBuf;
+	    blockEnd = blockPt + block->size;
+	    }
+
+	/* Deal with insides of block. */
+	struct bwgSectionHead head;
+	bwgSectionHeadFromMem(&blockPt, &head, isSwapped);
+	switch (head.type)
+	    {
+	    case bwgTypeBedGraph:
+		{
+		for (i=0; i<head.itemCount; ++i)
+		    {
+		    bits32 s = memReadBits32(&blockPt, isSwapped);
+		    bits32 e = memReadBits32(&blockPt, isSwapped);
+		    val = memReadFloat(&blockPt, isSwapped);
+		    if (s < start) s = start;
+		    if (e > end) e = end;
+		    if (s < e)
+			{
+			lmAllocVar(lm, el);
+			el->start = s;
+			el->end = e;
+			el->val = val;
+			slAddHead(&list, el);
+			}
+		    }
+		break;
+		}
+	    case bwgTypeVariableStep:
+		{
+		for (i=0; i<head.itemCount; ++i)
+		    {
+		    bits32 s = memReadBits32(&blockPt, isSwapped);
+		    bits32 e = s + head.itemSpan;
+		    val = memReadFloat(&blockPt, isSwapped);
+		    if (s < start) s = start;
+		    if (e > end) e = end;
+		    if (s < e)
+			{
+			lmAllocVar(lm, el);
+			el->start = s;
+			el->end = e;
+			el->val = val;
+			slAddHead(&list, el);
+			}
+		    }
+		break;
+		}
+	    case bwgTypeFixedStep:
+		{
+		bits32 s = head.start;
+		bits32 e = s + head.itemSpan;
+		for (i=0; i<head.itemCount; ++i)
+		    {
+		    val = memReadFloat(&blockPt, isSwapped);
+		    bits32 clippedS = s, clippedE = e;
+		    if (clippedS < start) clippedS = start;
+		    if (clippedE > end) clippedE = end;
+		    if (clippedS < clippedE)
+			{
+			lmAllocVar(lm, el);
+			el->start = clippedS;
+			el->end = clippedE;
+			el->val = val;
+			slAddHead(&list, el);
+			}
+		    s += head.itemStep;
+		    e += head.itemStep;
+		    }
+		break;
+		}
+	    default:
+		internalErr();
+		break;
+	    }
+	assert(blockPt == blockEnd);
+	blockBuf += block->size;
+	}
+    freeMem(mergedBuf);
+    }
+freeMem(uncompressBuf);
+slFreeList(&blockList);
+slReverse(&list);
+return list;
+}
+
+int bigWigIntervalDump(struct bbiFile *bwf, char *chrom, bits32 start, bits32 end, int maxCount,
+	FILE *out)
+/* Print out info on bigWig parts that intersect chrom:start-end.   Set maxCount to 0 if you 
+ * don't care how many are printed.  Returns number printed. */
+{
+if (bwf->typeSig != bigWigSig)
+   errAbort("Trying to do bigWigIntervalDump on a non big-wig file.");
+bbiAttachUnzoomedCir(bwf);
+struct fileOffsetSize *blockList = bbiOverlappingBlocks(bwf, bwf->unzoomedCir, 
+	chrom, start, end, NULL);
+struct fileOffsetSize *block, *beforeGap, *afterGap;
+struct udcFile *udc = bwf->udc;
+int printCount = 0;
+
+/* Set up for uncompression optionally. */
+char *uncompressBuf = NULL;
+if (bwf->uncompressBufSize > 0)
+    uncompressBuf = needLargeMem(bwf->uncompressBufSize);
+
+/* This loop is a little complicated because we merge the read requests for efficiency, but we 
+ * have to then go back through the data one unmerged block at a time. */
+for (block = blockList; block != NULL; )
+    {
+    /* Find contigious blocks and read them into mergedBuf. */
+    fileOffsetSizeFindGap(block, &beforeGap, &afterGap);
+    bits64 mergedOffset = block->offset;
+    bits64 mergedSize = beforeGap->offset + beforeGap->size - mergedOffset;
+    udcSeek(udc, mergedOffset);
+    char *mergedBuf = needLargeMem(mergedSize);
+    udcMustRead(udc, mergedBuf, mergedSize);
+    char *blockBuf = mergedBuf;
+
+    /* Loop through individual blocks within merged section. */
+    for (;block != afterGap; block = block->next)
+        {
+	/* Uncompress if necessary. */
+	char *blockPt, *blockEnd;
+	if (uncompressBuf)
+	    {
+	    blockPt = uncompressBuf;
+	    int uncSize = zUncompress(blockBuf, block->size, uncompressBuf, bwf->uncompressBufSize);
+	    blockEnd = blockPt + uncSize;
+	    }
+	else
+	    {
+	    blockPt = blockBuf;
+	    blockEnd = blockPt + block->size;
+	    }
+
+	/* Do the actual dump. */
+	int oneCount = bigWigBlockDumpIntersectingRange(bwf->isSwapped, blockPt, blockEnd, 
+		chrom, start, end, maxCount, out);
+
+	/* Keep track of how many dumped, not exceeding maximum. */
+	printCount += oneCount;
+	if (maxCount != 0)
+	    {
+	    if (oneCount >= maxCount)
+		{
+		block = NULL;	 // we want to drop out of the outer loop too
+		break;
+		}
+
+	    maxCount -= oneCount;
+	    }
+	blockBuf += block->size;
+	}
+    freeMem(mergedBuf);
+    }
+freeMem(uncompressBuf);
+
+slFreeList(&blockList);
+return printCount;
+}
+
+boolean bigWigSummaryArray(struct bbiFile *bwf, char *chrom, bits32 start, bits32 end,
+	enum bbiSummaryType summaryType, int summarySize, double *summaryValues)
+/* Fill in summaryValues with  data from indicated chromosome range in bigWig file.
+ * Be sure to initialize summaryValues to a default value, which will not be touched
+ * for regions without data in file.  (Generally you want the default value to either
+ * be 0.0 or nan("") depending on the application.)  Returns FALSE if no data
+ * at that position. */
+{
+boolean ret = bbiSummaryArray(bwf, chrom, start, end, bigWigIntervalQuery,
+	summaryType, summarySize, summaryValues);
+return ret;
+}
+
+boolean bigWigSummaryArrayExtended(struct bbiFile *bwf, char *chrom, bits32 start, bits32 end,
+	int summarySize, struct bbiSummaryElement *summary)
+/* Get extended summary information for summarySize evenely spaced elements into
+ * the summary array. */
+{
+boolean ret = bbiSummaryArrayExtended(bwf, chrom, start, end, bigWigIntervalQuery,
+	summarySize, summary);
+return ret;
+}
+
+double bigWigSingleSummary(struct bbiFile *bwf, char *chrom, int start, int end,
+    enum bbiSummaryType summaryType, double defaultVal)
+/* Return the summarized single value for a range. */
+{
+double arrayOfOne = defaultVal;
+bigWigSummaryArray(bwf, chrom, start, end, summaryType, 1, &arrayOfOne);
+return arrayOfOne;
+}
+
+boolean isBigWig(char *fileName)
+/* Peak at a file to see if it's bigWig */
+{
+FILE *f = mustOpen(fileName, "rb");
+bits32 sig;
+mustReadOne(f, sig);
+fclose(f);
+if (sig == bigWigSig)
+    return TRUE;
+sig = byteSwap32(sig);
+return sig == bigWigSig;
+}
+
diff --git a/gbtools/src/blatSrc/lib/bwgValsOnChrom.c b/gbtools/src/blatSrc/lib/bwgValsOnChrom.c
new file mode 100644
index 0000000..bab80b6
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/bwgValsOnChrom.c
@@ -0,0 +1,216 @@
+/* bwgValsOnChrom - implements the bigWigValsOnChrom access to bigWig. */
+
+/* Copyright (C) 2012 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "linefile.h"
+#include "hash.h"
+#include "bits.h"
+#include "sig.h"
+#include "udc.h"
+#include "zlibFace.h"
+#include "bbiFile.h"
+#include "bwgInternal.h"
+#include "bigWig.h"
+
+struct bigWigValsOnChrom *bigWigValsOnChromNew()
+/* Allocate new empty bigWigValsOnChromStructure. */
+{
+return needMem(sizeof(struct bigWigValsOnChrom));
+}
+
+void bigWigValsOnChromFree(struct bigWigValsOnChrom **pChromVals)
+/* Free up bigWigValsOnChrom */
+{
+struct bigWigValsOnChrom *chromVals = *pChromVals;
+if (chromVals != NULL)
+    {
+    freeMem(chromVals->chrom);
+    freeMem(chromVals->valBuf);
+    freeMem(chromVals->covBuf);
+    freez(pChromVals);
+    }
+}
+
+static void fetchIntoBuf(struct bbiFile *bwf, char *chrom, bits32 start, bits32 end,
+	struct bigWigValsOnChrom *chromVals)
+/* Get data for interval.  Return list allocated out of lm. */
+{
+/* A lot of code duplicated with bigWigIntervalQuery, but here the clipping
+ * is simplified since always working across full chromosome, and the output is
+ * different.  Since both of these are in inner loops and speed critical, it's hard
+ * to factor out without perhaps making it worse than the bit of duplication. */
+if (bwf->typeSig != bigWigSig)
+   errAbort("Trying to do fetchIntoBuf on a non big-wig file.");
+bbiAttachUnzoomedCir(bwf);
+struct fileOffsetSize *blockList = bbiOverlappingBlocks(bwf, bwf->unzoomedCir, 
+	chrom, start, end, NULL);
+struct fileOffsetSize *block, *beforeGap, *afterGap;
+struct udcFile *udc = bwf->udc;
+boolean isSwapped = bwf->isSwapped;
+float val;
+int i;
+Bits *covBuf = chromVals->covBuf;
+double *valBuf = chromVals->valBuf;
+
+/* Set up for uncompression optionally. */
+char *uncompressBuf = NULL;
+if (bwf->uncompressBufSize > 0)
+    uncompressBuf = needLargeMem(bwf->uncompressBufSize);
+
+/* This loop is a little complicated because we merge the read requests for efficiency, but we 
+ * have to then go back through the data one unmerged block at a time. */
+for (block = blockList; block != NULL; )
+    {
+    /* Find contigious blocks and read them into mergedBuf. */
+    fileOffsetSizeFindGap(block, &beforeGap, &afterGap);
+    bits64 mergedOffset = block->offset;
+    bits64 mergedSize = beforeGap->offset + beforeGap->size - mergedOffset;
+    udcSeek(udc, mergedOffset);
+    char *mergedBuf = needLargeMem(mergedSize);
+    udcMustRead(udc, mergedBuf, mergedSize);
+    char *blockBuf = mergedBuf;
+
+    /* Loop through individual blocks within merged section. */
+    for (;block != afterGap; block = block->next)
+        {
+	/* Uncompress if necessary. */
+	char *blockPt, *blockEnd;
+	if (uncompressBuf)
+	    {
+	    blockPt = uncompressBuf;
+	    int uncSize = zUncompress(blockBuf, block->size, uncompressBuf, bwf->uncompressBufSize);
+	    blockEnd = blockPt + uncSize;
+	    }
+	else
+	    {
+	    blockPt = blockBuf;
+	    blockEnd = blockPt + block->size;
+	    }
+
+	/* Deal with insides of block. */
+	struct bwgSectionHead head;
+	bwgSectionHeadFromMem(&blockPt, &head, isSwapped);
+	switch (head.type)
+	    {
+	    case bwgTypeBedGraph:
+		{
+		for (i=0; i<head.itemCount; ++i)
+		    {
+		    bits32 s = memReadBits32(&blockPt, isSwapped);
+		    bits32 e = memReadBits32(&blockPt, isSwapped);
+		    bitSetRange(covBuf, s, e-s);
+		    val = memReadFloat(&blockPt, isSwapped);
+		    bits32 j;
+		    for (j=s; j<e; ++j)
+		        valBuf[j] = val;
+		    }
+		break;
+		}
+	    case bwgTypeVariableStep:
+		{
+		for (i=0; i<head.itemCount; ++i)
+		    {
+		    bits32 s = memReadBits32(&blockPt, isSwapped);
+		    val = memReadFloat(&blockPt, isSwapped);
+		    bitSetRange(covBuf, s, head.itemSpan);
+		    bits32 e = s + head.itemSpan;
+		    bits32 j;
+		    for (j=s; j<e; ++j)
+		        valBuf[j] = val;
+		    }
+		break;
+		}
+	    case bwgTypeFixedStep:
+		{
+		/* Do a little optimization for the most common and worst case - step1/span1 */
+		if (head.itemStep == 1 && head.itemSpan == 1)
+		    {
+		    bits32 s = head.start;
+		    bits32 e = head.end;
+		    bitSetRange(covBuf, s, e-s);
+		    bits32 j;
+		    for (j=s; j<e; ++j)
+		        valBuf[j] = memReadFloat(&blockPt, isSwapped);
+		    }
+		else
+		    {
+		    bits32 s = head.start;
+		    bits32 e = s + head.itemSpan;
+		    for (i=0; i<head.itemCount; ++i)
+			{
+			bitSetRange(covBuf, s, head.itemSpan);
+			val = memReadFloat(&blockPt, isSwapped);
+			bits32 j;
+			for (j=s; j<e; ++j)
+			    valBuf[j] = val;
+			s += head.itemStep;
+			e += head.itemStep;
+			}
+		    }
+		break;
+		}
+	    default:
+		internalErr();
+		break;
+	    }
+	assert(blockPt == blockEnd);
+	blockBuf += block->size;
+	}
+    freeMem(mergedBuf);
+    }
+freeMem(uncompressBuf);
+slFreeList(&blockList);
+}
+
+
+boolean bigWigValsOnChromFetchData(struct bigWigValsOnChrom *chromVals, char *chrom, 
+	struct bbiFile *bigWig)
+/* Fetch data for chromosome from bigWig. Returns FALSE if not data on that chrom. */
+{
+/* Fetch chromosome and size into self. */
+freeMem(chromVals->chrom);
+chromVals->chrom = cloneString(chrom);
+long chromSize = chromVals->chromSize = bbiChromSize(bigWig, chrom);
+
+if (chromSize <= 0)
+    return FALSE;
+
+/* Make sure buffers are big enough. */
+if (chromSize > chromVals->bufSize)
+    {
+    freeMem(chromVals->valBuf);
+    freeMem(chromVals->covBuf);
+    chromVals->valBuf = needHugeMem((sizeof(double))*chromSize);
+    chromVals->covBuf = bitAlloc(chromSize);
+    chromVals->bufSize = chromSize;
+    }
+
+/* Zero out buffers */
+bitClear(chromVals->covBuf, chromSize);
+double *valBuf = chromVals->valBuf;
+int i;
+for (i=0; i<chromSize; ++i)
+    valBuf[i] = 0.0;
+
+fetchIntoBuf(bigWig, chrom, 0, chromSize, chromVals);
+
+#ifdef OLD
+/* Fetch intervals for this chromosome and fold into buffers. */
+struct lm *lm = lmInit(0);
+struct bbiInterval *iv, *ivList = bigWigIntervalQuery(bigWig, chrom, 0, chromSize, lm);
+for (iv = ivList; iv != NULL; iv = iv->next)
+    {
+    double val = iv->val;
+    int end = iv->end;
+    for (i=iv->start; i<end; ++i)
+	valBuf[i] = val;
+    bitSetRange(chromVals->covBuf, iv->start, iv->end - iv->start);
+    }
+lmCleanup(&lm);
+#endif /* OLD */
+return TRUE;
+}
+
+
diff --git a/gbtools/src/blatSrc/lib/cda.c b/gbtools/src/blatSrc/lib/cda.c
new file mode 100644
index 0000000..88a0a82
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/cda.c
@@ -0,0 +1,477 @@
+/* cda.c - cDNA Alignment structure.  This stores all the info except
+ * the bases themselves on an cDNA alignment. 
+ * 
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "dnautil.h"
+#include "memgfx.h"
+#include "sig.h"
+#include "fuzzyFind.h"
+#include "cda.h"
+
+
+char *cdaLoadString(FILE *f)
+/* Load in a string from CDA file. */
+{
+UBYTE size;
+char *s;
+if (!readOne(f, size))
+    return NULL;
+s = needMem(size+1);
+mustRead(f, s, size);
+return s;
+}
+
+static void cdaWriteString(FILE *f, char *s)
+/* Write string out to CDA file. */
+{
+int size;
+UBYTE usize;
+if (s == NULL)
+    s = "";
+size = strlen(s);
+usize = (UBYTE)size;
+assert(size < 256);
+writeOne(f, usize);
+mustWrite(f, s, size);
+}
+
+void cdaReadBlock(FILE *f, struct cdaBlock *block)
+/* Read one block from cda file. */
+{
+mustReadOne(f, block->nStart);
+mustReadOne(f, block->nEnd);
+mustReadOne(f, block->hStart);
+block->hEnd = block->hStart + (block->nEnd - block->nStart);
+mustReadOne(f, block->startGood);
+mustReadOne(f, block->endGood);
+mustReadOne(f, block->midScore);
+}
+
+static void cdaWriteBlock(FILE *f, struct cdaBlock *block)
+/* Write one block to cda file. */
+{
+writeOne(f, block->nStart);
+writeOne(f, block->nEnd);
+writeOne(f, block->hStart);
+writeOne(f, block->startGood);
+writeOne(f, block->endGood);
+writeOne(f, block->midScore);
+}
+
+void cdaFixChromStartEnd(struct cdaAli *cda)
+/* Loop through blocks and figure out and fill in chromStart
+ * and chromEnd. */
+{
+int start = 0x7fffffff;
+int end = -start;
+int count = cda->blockCount;
+struct cdaBlock *block = cda->blocks;
+
+while (--count >= 0)
+    {
+    if (start > block->hStart)
+        start = block->hStart;
+    if (end < block->hEnd)
+        end = block->hEnd;
+    ++block;
+    }
+cda->chromStart = start;
+cda->chromEnd = end;
+}
+
+FILE *cdaOpenVerify(char *fileName)
+/* Call this to open file and verify signature, then call cdaLoadOne
+ * which returns NULL at EOF. */
+{
+FILE *aliFile;
+bits32 sig;
+
+aliFile = mustOpen(fileName, "rb");
+mustReadOne(aliFile, sig);
+if (sig != aliSig)
+    errAbort("Bad signature %x on %s", sig, fileName);
+return aliFile;
+}
+
+static FILE *cdaCreate(char *fileName)
+/* Open file to write and put out signature. */
+{
+bits32 sig = aliSig;
+FILE *f = mustOpen(fileName, "wb");
+writeOne(f, sig);
+return f;
+}
+
+struct cdaAli *cdaLoadOne(FILE *f)
+/* Load one cdaAli from file.  Assumes file pointer is correctly positioned. */
+{
+struct cdaAli *ca;
+struct cdaBlock *blocks;
+int count;
+int i;
+char *name;
+UBYTE chromIx;
+
+if ((name = cdaLoadString(f)) == NULL)
+    return NULL;
+AllocVar(ca);
+ca->name = name;
+mustReadOne(f, ca->isEmbryonic);
+mustReadOne(f, ca->baseCount);
+mustReadOne(f, ca->milliScore);
+mustReadOne(f, chromIx);
+ca->chromIx = chromIx;
+mustReadOne(f, ca->strand);
+mustReadOne(f, ca->direction);
+mustReadOne(f, ca->blockCount);
+count = ca->blockCount;
+ca->blocks = blocks = needMem(count * sizeof(blocks[0]));
+for (i=0; i<count; ++i)
+    cdaReadBlock(f, &blocks[i]);
+cdaFixChromStartEnd(ca);
+return ca;
+}
+
+static void cdaWriteOne(FILE *f, struct cdaAli *ca)
+/* Write one cdaAli to file. */
+{
+int count;
+int i;
+struct cdaBlock *blocks;
+UBYTE chromIx;
+
+cdaWriteString(f, ca->name);
+writeOne(f, ca->isEmbryonic);
+writeOne(f, ca->baseCount);
+writeOne(f, ca->milliScore);
+if (ca->chromIx > 255)
+    errAbort("chromIx too big in cdaWriteOne.");
+chromIx = (UBYTE)ca->chromIx;
+writeOne(f, chromIx);
+writeOne(f, ca->strand);
+writeOne(f, ca->direction);
+writeOne(f, ca->blockCount);
+count = ca->blockCount;
+blocks = ca->blocks;
+for (i=0; i<count; ++i)
+    cdaWriteBlock(f, &blocks[i]);
+}
+
+void cdaWrite(char *fileName, struct cdaAli *cdaList)
+/* Write out a cdaList to a cda file. */
+{
+FILE *f = cdaCreate(fileName);
+struct cdaAli *ca;
+for (ca = cdaList; ca != NULL; ca = ca->next)
+    cdaWriteOne(f, ca);
+fclose(f);
+}
+
+boolean cdaCloneIsReverse(struct cdaAli *cda)
+/* Returns TRUE if clone (.3/.5 pair) aligns on reverse strand. */
+{
+boolean isReverse = (cda->direction == '-');
+if (cda->strand == '-')
+    isReverse = !isReverse;
+return isReverse;
+}
+
+char cdaCloneStrand(struct cdaAli *cda)
+/* Return '+' or '-' depending on the strand that clone (.3/.5 pair) aligns on. */
+{
+return cdaCloneIsReverse(cda) ? '-' : '+';
+}
+
+char cdaDirChar(struct cdaAli *cda, char chromStrand)
+/* Return '>' or '<' or ' ' depending whether cDNA is going same, opposite, or
+ * unknown alignment as the chromosome strand. */
+{
+boolean isReverse = cdaCloneIsReverse(cda);
+if (chromStrand == '-')
+    isReverse = !isReverse;
+return (isReverse ? '<' : '>');    
+}
+
+void cdaRcOne(struct cdaAli *cda, int dnaStart, int baseCount)
+/* Reverse complement one cda. DnaStart is typically display window start. */
+{
+struct cdaBlock *block, *endBlock;
+
+for (block = cda->blocks, endBlock = block+cda->blockCount; block < endBlock; ++block)
+    {
+    int temp;
+    UBYTE uc;
+    temp = reverseOffset(block->hStart-dnaStart, baseCount) + dnaStart + 1;
+    block->hStart = reverseOffset(block->hEnd-dnaStart, baseCount) + dnaStart + 1;
+    block->hEnd = temp;
+    temp = reverseOffset(block->nStart, cda->baseCount);
+    block->nStart = reverseOffset(block->nEnd, cda->baseCount);
+    block->nEnd = temp;
+    uc = block->startGood;
+    block->startGood = block->endGood;
+    block->endGood = uc;
+    }
+block = cda->blocks;
+endBlock -= 1;
+for (;block < endBlock; ++block, --endBlock)
+    {
+    struct cdaBlock temp;
+    temp = *block;
+    *block = *endBlock;
+    *endBlock = temp;
+    }
+}
+
+void cdaRcList(struct cdaAli *cdaList, int dnaStart, int baseCount)
+/* Reverse complement cda list. */
+{
+struct cdaAli *cda;
+for (cda = cdaList; cda != NULL; cda = cda->next)
+    cdaRcOne(cda, dnaStart, baseCount);
+}
+
+
+void cdaFreeAli(struct cdaAli *ca)
+/* Free a single cdaAli. */
+{
+freeMem(ca->blocks);
+freeMem(ca->name);
+freeMem(ca);
+}
+
+void cdaFreeAliList(struct cdaAli **pList)
+/* Free list of cdaAli. */
+{
+struct cdaAli *ca, *next;
+next = *pList;
+while ((ca = next) != NULL)
+    {
+    next = ca->next;
+    cdaFreeAli(ca);
+    }
+*pList = NULL;
+}
+
+
+static void cdaCoalesceOne(struct cdaAli *ca, boolean updateScore)
+/* Coalesce blocks separated by small amounts of noise. */
+{
+struct cdaBlock *left = ca->blocks;
+struct cdaBlock *block = left+1;
+struct cdaBlock *writeBlock = block;
+int readCount = ca->blockCount;
+int i;
+
+/* Implicitly have read and written first one. */
+for (i=1; i<readCount; ++i)
+    {
+    int hGap = intAbs(block->hStart - left->hEnd);
+    int nGap = intAbs(block->nStart - left->nEnd);
+    if (hGap > 2 || nGap > 2)
+        {
+        left = writeBlock;
+        *writeBlock++ = *block;
+        }
+    else
+        {
+        int leftMatch, blockMatch;
+        int totalMatch;
+
+        /* Update score. */
+        if (updateScore)
+            {
+            leftMatch = roundingScale(left->midScore, left->nEnd-left->nStart, 255);
+            blockMatch = roundingScale(block->midScore, block->nEnd-block->nStart, 255);
+            totalMatch = leftMatch + blockMatch - nGap - hGap;
+            left->midScore = roundingScale(totalMatch, 255, block->nEnd-left->nStart);
+            }
+
+        /* Update ends. */
+        left->hEnd = block->hEnd;
+        left->nEnd = block->nEnd;
+        left->endGood = block->endGood;  
+        }
+    ++block;
+    }
+ca->blockCount = writeBlock - ca->blocks;
+}
+
+void cdaCoalesceAll(struct cdaAli *ca, boolean updateScore)
+/* Coalesce blocks separated by small amounts of noise. */
+{
+for (;ca != NULL; ca = ca->next)
+    cdaCoalesceOne(ca, updateScore);
+}
+
+void cdaCoalesceBlocks(struct cdaAli *ca)
+/* Coalesce blocks separated by small amounts of noise. */
+{
+cdaCoalesceAll(ca, TRUE);
+}
+
+void cdaCoalesceFast(struct cdaAli *ca)
+/* Coalesce blocks as above, but don't update the score. */
+{
+cdaCoalesceAll(ca, FALSE);
+}
+
+
+void cdaShowAlignmentTrack(struct memGfx *mg, 
+    int xOff, int yOff, int width, int height,  Color goodColor, Color badColor,
+    int dnaSize, int dnaOffset, struct cdaAli *cda, char repeatChar)
+/* Draw alignment on a horizontal track of picture. */
+{
+struct cdaBlock *block = cda->blocks;
+int count = cda->blockCount;
+int blockIx;
+int scaledHeight = roundingScale(height, dnaSize, width);
+MgFont *font = NULL;
+int repeatCharWidth = 0;
+
+if (repeatChar)
+    {
+    font = mgSmallFont();
+    repeatCharWidth = mgFontCharWidth(font, repeatChar);
+    }
+
+for (blockIx = 0; blockIx < count; ++blockIx)
+    {
+    int x[4];
+    int b[4];
+    Color c[3];
+    int quarterWid;
+    int i;
+    int w;
+
+    b[0] = block->hStart;
+    b[3] = block->hEnd;
+    quarterWid = (b[3]-b[0]+2)>>2;
+    if (quarterWid > scaledHeight)
+        quarterWid = scaledHeight;
+    b[1] = b[0] + quarterWid;
+    b[2] = b[3] - quarterWid;
+
+    c[0] = ((block->startGood >= 4 && (blockIx == 0 || block[-1].nEnd == block[0].nStart)) 
+        ? goodColor : badColor);
+    c[1] = ((block->midScore > 229) ? goodColor : badColor);
+    c[2] = ((block->endGood >= 4 && (blockIx == count-1 || block[0].nEnd == block[1].nStart))
+        ? goodColor : badColor);
+
+    for (i=0; i<4; ++i)
+        x[i] = roundingScale(b[i]-dnaOffset, width, dnaSize) + xOff;
+    for (i=0; i<3; ++i)
+        {
+        if ((w = x[i+1] - x[i]) > 0)
+            mgDrawBox(mg, x[i], yOff, w, height, c[i]);
+        }
+    
+    if (repeatChar)
+        {
+        char buf[256];
+        int charCount;
+        w = x[3] - x[0];
+        charCount = w/repeatCharWidth;
+        if (charCount >= sizeof(buf))
+            charCount = sizeof(buf)-1;
+        memset(buf, repeatChar, charCount);
+        buf[charCount] = 0;
+        mgTextCentered(mg, x[0], yOff, w, height, MG_WHITE, font, buf);
+        }
+    ++block;
+    }
+}
+
+
+static UBYTE leftGood(struct ffAli *ali)
+{
+DNA *n = ali->nStart;
+DNA *h = ali->hStart;
+int size = ali->nEnd - ali->nStart;
+int matchSize = 0;
+
+while (--size >= 0)
+    {
+    if (*n++ != *h++)
+        break;
+    ++matchSize;
+    }
+if (matchSize > 255)
+    matchSize = 255;
+return (UBYTE)matchSize;
+}
+
+static UBYTE rightGood(struct ffAli *ali)
+{
+DNA *n = ali->nEnd;
+DNA *h = ali->hEnd;
+int size = ali->nEnd - ali->nStart;
+int matchSize = 0;
+
+while (--size >= 0)
+    {
+    if (*--n != *--h)
+        break;
+    ++matchSize;
+    }
+if (matchSize > 255)
+    matchSize = 255;
+return (UBYTE)matchSize;
+}
+
+
+static int countAlis(struct ffAli *ali)
+{
+int count = 0;
+while (ali != NULL)
+    {
+    ++count;
+    ali = ali->right;
+    }
+return count;
+}
+
+struct cdaAli *cdaAliFromFfAli(struct ffAli *aliList, 
+    DNA *needle, int needleSize, DNA *hay, int haySize, boolean isRc)
+/* Convert from ffAli to cdaAli format. */
+{
+int count = countAlis(aliList);
+struct cdaAli *cda;
+struct cdaBlock *blocks;
+struct ffAli *fa;
+int score;
+int bases;
+
+if (isRc)
+    reverseComplement(needle, needleSize);
+AllocVar(cda);
+cda->baseCount = needleSize;
+cda->strand = (isRc ? '-' : '+');
+cda->direction = '+';   /* Actually we don't know. */
+cda->orientation = (isRc ? -1 : 1);
+cda->blockCount = count;
+cda->blocks = blocks = needMem(count * sizeof(blocks[0]));
+
+for (fa = aliList; fa != NULL; fa = fa->right)
+    {
+    blocks->nStart = fa->nStart - needle;
+    blocks->nEnd = fa->nEnd - needle;
+    blocks->hStart = fa->hStart - hay;
+    blocks->hEnd  = fa->hEnd - hay;
+    blocks->startGood = leftGood(fa);
+    blocks->endGood = rightGood(fa);
+    bases = fa->nEnd - fa->nStart;
+    score = dnaScoreMatch(fa->nStart, fa->hStart, bases);
+    blocks->midScore = roundingScale(255, score, bases);
+    ++blocks;
+    }
+cdaFixChromStartEnd(cda);
+if (isRc)
+    {
+    reverseComplement(needle, needleSize);
+    }
+return cda;
+}
+
diff --git a/gbtools/src/blatSrc/lib/chain.c b/gbtools/src/blatSrc/lib/chain.c
new file mode 100644
index 0000000..66d5a48
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/chain.c
@@ -0,0 +1,647 @@
+/* chain - pairwise alignments that can include gaps in both
+ * sequences at once.  This is similar in many ways to psl,
+ * but more suitable to cross species genomic comparisons. */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+#include "common.h"
+#include "linefile.h"
+#include "hash.h"
+#include "dnaseq.h"
+#include "dnautil.h"
+#include "chain.h"
+
+
+void chainFree(struct chain **pChain)
+/* Free up a chain. */
+{
+struct chain *chain = *pChain;
+if (chain != NULL)
+    {
+    slFreeList(&chain->blockList);
+    freeMem(chain->qName);
+    freeMem(chain->tName);
+    freez(pChain);
+    }
+}
+
+void chainFreeList(struct chain **pList)
+/* Free a list of dynamically allocated chain's */
+{
+struct chain *el, *next;
+
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    chainFree(&el);
+    }
+*pList = NULL;
+}
+
+int cBlockCmpQuery(const void *va, const void *vb)
+/* Compare to sort based on query start. */
+{
+const struct cBlock *a = *((struct cBlock **)va);
+const struct cBlock *b = *((struct cBlock **)vb);
+return a->qStart - b->qStart;
+}
+
+int cBlockCmpTarget(const void *va, const void *vb)
+/* Compare to sort based on target start. */
+{
+const struct cBlock *a = *((struct cBlock **)va);
+const struct cBlock *b = *((struct cBlock **)vb);
+return a->tStart - b->tStart;
+}
+
+int cBlockCmpBoth(const void *va, const void *vb)
+/* Compare to sort based on query, then target. */
+{
+const struct cBlock *a = *((struct cBlock **)va);
+const struct cBlock *b = *((struct cBlock **)vb);
+int dif;
+dif = a->qStart - b->qStart;
+if (dif == 0)
+    dif = a->tStart - b->tStart;
+return dif;
+}
+
+int cBlockCmpDiagQuery(const void *va, const void *vb)
+/* Compare to sort based on diagonal, then query. */
+{
+const struct cBlock *a = *((struct cBlock **)va);
+const struct cBlock *b = *((struct cBlock **)vb);
+int dif;
+dif = (a->tStart - a->qStart) - (b->tStart - b->qStart);
+if (dif == 0)
+    dif = a->qStart - b->qStart;
+return dif;
+}
+
+void cBlocksAddOffset(struct cBlock *blockList, int qOff, int tOff)
+/* Add offsets to block list. */
+{
+struct cBlock *block;
+for (block = blockList; block != NULL; block = block->next)
+    {
+    block->tStart += tOff;
+    block->tEnd += tOff;
+    block->qStart += qOff;
+    block->qEnd += qOff;
+    }
+}
+
+struct cBlock *cBlocksFromAliSym(int symCount, char *qSym, char *tSym, 
+        int qPos, int tPos)
+/* Convert alignment from alignment symbol (bases and dashes) format 
+ * to a list of chain blocks.  The qPos and tPos correspond to the start
+ * in the query and target sequences of the first letter in  qSym and tSym. */
+{
+struct cBlock *blockList = NULL, *block = NULL;
+int i;
+for (i=0; i<symCount; ++i)
+    {
+    if (qSym[i] == '-')
+        {
+        block = NULL;
+        ++tPos;
+        }
+    else if (tSym[i] == '-')
+        {
+        block = NULL;
+        ++qPos;
+        }
+    else
+        {
+        if (block == NULL)
+            {
+            AllocVar(block);
+            slAddHead(&blockList, block);
+            block->qStart = qPos;
+            block->tStart = tPos;
+            }
+        block->qEnd = ++qPos;
+        block->tEnd = ++tPos;
+        }
+    }
+slReverse(&blockList);
+return blockList;
+}
+        
+
+int chainCmpScore(const void *va, const void *vb)
+/* Compare to sort based on total score. */
+{
+const struct chain *a = *((struct chain **)va);
+const struct chain *b = *((struct chain **)vb);
+double diff = b->score - a->score;
+if (diff < 0.0) return -1;
+else if (diff > 0.0) return 1;
+else return 0;
+}
+
+int chainCmpScoreDesc(const void *va, const void *vb)
+/* Compare to sort based on total score descending. */
+{
+const struct chain *a = *((struct chain **)va);
+const struct chain *b = *((struct chain **)vb);
+double diff = a->score - b->score;
+if (diff < 0.0) return -1;
+else if (diff > 0.0) return 1;
+else return 0;
+}
+
+int chainCmpTarget(const void *va, const void *vb)
+/* Compare to sort based on target position. */
+{
+const struct chain *a = *((struct chain **)va);
+const struct chain *b = *((struct chain **)vb);
+int dif = strcmp(a->tName, b->tName);
+if (dif == 0)
+    dif = a->tStart - b->tStart;
+return dif;
+}
+
+#define FACTOR 300000000
+
+int chainCmpQuery(const void *va, const void *vb)
+/* Compare to sort based on query chrom and target position. */
+{
+const struct chain *a = *((struct chain **)va);
+const struct chain *b = *((struct chain **)vb);
+int dif;                                                                        
+
+dif = strcmp(a->qName, b->qName);                                               
+if (dif == 0)                                                                   
+    dif = a->qStart - b->qStart;                                                
+return dif;                       
+}
+
+static int nextId = 1;
+
+void chainIdSet(int id)
+/* Set next chain id. */
+{
+nextId = id;
+}
+
+void chainIdReset()
+/* Reset chain id. */
+{
+chainIdSet(1);
+}
+
+void chainIdNext(struct chain *chain)
+/* Add an id to a chain if it doesn't have one already */
+{
+chain->id = nextId++;
+}
+
+void chainWriteHead(struct chain *chain, FILE *f)
+/* Write chain before block/insert list. */
+{
+if (chain->id == 0)
+    chainIdNext(chain);
+fprintf(f, "chain %1.0f %s %d + %d %d %s %d %c %d %d %d\n", chain->score,
+    chain->tName, chain->tSize, chain->tStart, chain->tEnd,
+    chain->qName, chain->qSize, chain->qStrand, chain->qStart, chain->qEnd,
+    chain->id);
+}
+
+void chainWrite(struct chain *chain, FILE *f)
+/* Write out chain to file in usual format*/
+{
+struct cBlock *b, *nextB;
+
+chainWriteHead(chain, f);
+for (b = chain->blockList; b != NULL; b = nextB)
+    {
+    nextB = b->next;
+    fprintf(f, "%d", b->qEnd - b->qStart);
+    if (nextB != NULL)
+	fprintf(f, "\t%d\t%d", 
+		nextB->tStart - b->tEnd, nextB->qStart - b->qEnd);
+    fputc('\n', f);
+    }
+fputc('\n', f);
+}
+
+void chainWriteAll(struct chain *chainList, FILE *f)
+/* Write all chains to file. */
+{
+struct chain *chain;
+for (chain = chainList; chain != NULL; chain = chain->next)
+    chainWrite(chain, f);
+}
+
+void chainWriteLong(struct chain *chain, FILE *f)
+/* Write out chain to file in longer format*/
+{
+struct cBlock *b, *nextB;
+
+chainWriteHead(chain, f);
+for (b = chain->blockList; b != NULL; b = nextB)
+    {
+    nextB = b->next;
+    fprintf(f, "%d\t%d\t", b->tStart, b->qStart);
+    fprintf(f, "%d", b->qEnd - b->qStart);
+    if (nextB != NULL)
+	fprintf(f, "\t%d\t%d", 
+		nextB->tStart - b->tEnd, nextB->qStart - b->qEnd);
+    fputc('\n', f);
+    }
+fputc('\n', f);
+}
+
+struct chain *chainReadChainLine(struct lineFile *lf)
+/* Read line that starts with chain.  Allocate memory
+ * and fill in values.  However don't read link lines. */
+{
+char *row[13];
+int wordCount;
+struct chain *chain;
+
+wordCount = lineFileChop(lf, row);
+if (wordCount == 0)
+    return NULL;
+if (wordCount < 12)
+    errAbort("Expecting at least 12 words line %d of %s", 
+    	lf->lineIx, lf->fileName);
+if (!sameString(row[0], "chain"))
+    errAbort("Expecting 'chain' line %d of %s", lf->lineIx, lf->fileName);
+AllocVar(chain);
+chain->score = atof(row[1]);
+chain->tName = cloneString(row[2]);
+chain->tSize = lineFileNeedNum(lf, row, 3);
+if (wordCount >= 13)
+    chain->id = lineFileNeedNum(lf, row, 12);
+else
+    chainIdNext(chain);
+
+/* skip tStrand for now, always implicitly + */
+chain->tStart = lineFileNeedNum(lf, row, 5);
+chain->tEnd = lineFileNeedNum(lf, row, 6);
+chain->qName = cloneString(row[7]);
+chain->qSize = lineFileNeedNum(lf, row, 8);
+chain->qStrand = row[9][0];
+chain->qStart = lineFileNeedNum(lf, row, 10);
+chain->qEnd = lineFileNeedNum(lf, row, 11);
+if (chain->qStart >= chain->qEnd || chain->tStart >= chain->tEnd)
+    errAbort("End before start line %d of %s", lf->lineIx, lf->fileName);
+if (chain->qStart < 0 || chain->tStart < 0)
+    errAbort("Start before zero line %d of %s", lf->lineIx, lf->fileName);
+if (chain->qEnd > chain->qSize || chain->tEnd > chain->tSize)
+    errAbort("Past end of sequence line %d of %s", lf->lineIx, lf->fileName);
+return chain;
+}
+
+void chainReadBlocks(struct lineFile *lf, struct chain *chain)
+/* Read in chain blocks from file. */
+{
+char *row[3];
+int q,t;
+
+/* Now read in block list. */
+q = chain->qStart;
+t = chain->tStart;
+for (;;)
+    {
+    int wordCount = lineFileChop(lf, row);
+    int size = lineFileNeedNum(lf, row, 0);
+    struct cBlock *b;
+    AllocVar(b);
+    slAddHead(&chain->blockList, b);
+    b->qStart = q;
+    b->tStart = t;
+    q += size;
+    t += size;
+    b->qEnd = q;
+    b->tEnd = t;
+    if (wordCount == 1)
+        break;
+    else if (wordCount < 3)
+        errAbort("Expecting 1 or 3 words line %d of %s\n", 
+		lf->lineIx, lf->fileName);
+    t += lineFileNeedNum(lf, row, 1);
+    q += lineFileNeedNum(lf, row, 2);
+    }
+if (q != chain->qEnd)
+    errAbort("q end mismatch %d vs %d line %d of %s\n", 
+    	q, chain->qEnd, lf->lineIx, lf->fileName);
+if (t != chain->tEnd)
+    errAbort("t end mismatch %d vs %d line %d of %s\n", 
+    	t, chain->tEnd, lf->lineIx, lf->fileName);
+slReverse(&chain->blockList);
+}
+
+struct chain *chainRead(struct lineFile *lf)
+/* Read next chain from file.  Return NULL at EOF. 
+ * Note that chain block scores are not filled in by
+ * this. */
+{
+struct chain *chain = chainReadChainLine(lf);
+if (chain != NULL)
+    chainReadBlocks(lf, chain);
+return chain;
+}
+
+void chainSwap(struct chain *chain)
+/* Swap target and query side of chain. */
+{
+struct chain old = *chain;
+struct cBlock *b;
+
+/* Copy basic stuff swapping t and q. */
+chain->qName = old.tName;
+chain->tName = old.qName;
+chain->qStart = old.tStart;
+chain->qEnd = old.tEnd;
+chain->tStart = old.qStart;
+chain->tEnd = old.qEnd;
+chain->qSize = old.tSize;
+chain->tSize = old.qSize;
+
+/* Swap t and q in blocks. */
+for (b = chain->blockList; b != NULL; b = b->next)
+    {
+    struct cBlock old = *b;
+    b->qStart = old.tStart;
+    b->qEnd = old.tEnd;
+    b->tStart = old.qStart;
+    b->tEnd = old.qEnd;
+    }
+
+/* Cope with the minus strand. */
+if (chain->qStrand == '-')
+    {
+    /* chain's are really set up so that the target is on the
+     * + strand and the query is on the minus strand.
+     * Therefore we need to reverse complement both 
+     * strands while swapping to preserve this. */
+    for (b = chain->blockList; b != NULL; b = b->next)
+        {
+	reverseIntRange(&b->tStart, &b->tEnd, chain->tSize);
+	reverseIntRange(&b->qStart, &b->qEnd, chain->qSize);
+	}
+    reverseIntRange(&chain->tStart, &chain->tEnd, chain->tSize);
+    reverseIntRange(&chain->qStart, &chain->qEnd, chain->qSize);
+    slReverse(&chain->blockList);
+    }
+}
+
+struct hash *chainReadUsedSwapLf(char *fileName, boolean swapQ, Bits *bits, struct lineFile *lf)
+/* Read chains that are marked as used in the 
+ * bits array (which may be NULL) into a hash keyed by id. */
+{
+char nameBuf[16];
+struct hash *hash = hashNew(18);
+struct chain *chain;
+int usedCount = 0, count = 0;
+
+while ((chain = chainRead(lf)) != NULL)
+    {
+    ++count;
+    if (bits != NULL && !bitReadOne(bits, chain->id))
+	{
+	chainFree(&chain);
+        continue;
+	}
+    safef(nameBuf, sizeof(nameBuf), "%x", chain->id);
+    if (hashLookup(hash, nameBuf))
+        errAbort("Duplicate chain %d ending line %d of %s", 
+		chain->id, lf->lineIx, lf->fileName);
+    if (swapQ)
+        chainSwap(chain);
+    hashAdd(hash, nameBuf, chain);
+    ++usedCount;
+    }
+return hash;
+}
+
+struct hash *chainReadUsedSwap(char *fileName, boolean swapQ, Bits *bits)
+/* Read chains that are marked as used in the 
+ * bits array (which may be NULL) into a hash keyed by id. */
+{
+struct lineFile *lf = lineFileOpen(fileName, TRUE);
+struct hash *hash = chainReadUsedSwapLf(fileName, swapQ, NULL, lf);
+lineFileClose(&lf);
+return hash;
+}
+
+struct hash *chainReadAllSwap(char *fileName, boolean swapQ)
+/* Read chains into a hash keyed by id. */
+{
+return chainReadUsedSwap(fileName, swapQ, NULL);
+}
+
+struct hash *chainReadAll(char *fileName)
+/* Read chains into a hash keyed by id. */
+{
+return chainReadAllSwap(fileName, FALSE);
+}
+
+struct hash *chainReadAllWithMeta(char *fileName, FILE *f)
+/* Read chains into a hash keyed by id. */
+{
+struct lineFile *lf = lineFileOpen(fileName, TRUE);
+struct hash *hash = NULL;
+lineFileSetMetaDataOutput(lf, f);
+hash = chainReadUsedSwapLf(fileName, FALSE, NULL, lf);
+lineFileClose(&lf);
+return hash;
+}
+
+
+struct chain *chainFind(struct hash *hash, int id)
+/* Find chain in hash, return NULL if not found */
+{
+char nameBuf[16];
+safef(nameBuf, sizeof(nameBuf), "%x", id);
+return hashFindVal(hash, nameBuf);
+}
+
+struct chain *chainLookup(struct hash *hash, int id)
+/* Find chain in hash. */
+{
+char nameBuf[16];
+safef(nameBuf, sizeof(nameBuf), "%x", id);
+return hashMustFindVal(hash, nameBuf);
+}
+
+void chainSubsetOnT(struct chain *chain, int subStart, int subEnd, 
+    struct chain **retSubChain,  struct chain **retChainToFree)
+/* Get subchain of chain bounded by subStart-subEnd on 
+ * target side.  Return result in *retSubChain.  In some
+ * cases this may be the original chain, in which case
+ * *retChainToFree is NULL.  When done call chainFree on
+ * *retChainToFree.  The score and id fields are not really
+ * properly filled in. */
+{
+/* Find first relevant block. */
+struct cBlock *firstBlock;
+for (firstBlock = chain->blockList; firstBlock != NULL; firstBlock = firstBlock->next)
+    {
+    if (firstBlock->tEnd > subStart)
+	break;
+    }
+chainFastSubsetOnT(chain, firstBlock, subStart, subEnd, retSubChain, retChainToFree);
+}
+
+void chainFastSubsetOnT(struct chain *chain, struct cBlock *firstBlock,
+	int subStart, int subEnd, struct chain **retSubChain,  struct chain **retChainToFree)
+/* Get subchain as in chainSubsetOnT. Pass in initial block that may
+ * be known from some index to speed things up. */
+{
+struct chain *sub = NULL;
+struct cBlock *oldB, *b, *bList = NULL;
+int qStart = BIGNUM, qEnd = -BIGNUM;
+int tStart = BIGNUM, tEnd = -BIGNUM;
+
+/* Check for easy case. */
+if (subStart <= chain->tStart && subEnd >= chain->tEnd)
+    {
+    *retSubChain = chain;
+    *retChainToFree = NULL;
+    return;
+    }
+/* Build new block list and calculate bounds. */
+for (oldB = firstBlock; oldB != NULL; oldB = oldB->next)
+    {
+    if (oldB->tStart >= subEnd)
+        break;
+    b = CloneVar(oldB);
+    if (b->tStart < subStart)
+        {
+	b->qStart += subStart - b->tStart;
+	b->tStart = subStart;
+	}
+    if (b->tEnd > subEnd)
+        {
+	b->qEnd -= b->tEnd - subEnd;
+	b->tEnd = subEnd;
+	}
+    slAddHead(&bList, b);
+    if (qStart > b->qStart)
+        qStart = b->qStart;
+    if (qEnd < b->qEnd)
+        qEnd = b->qEnd;
+    if (tStart > b->tStart)
+        tStart = b->tStart;
+    if (tEnd < b->tEnd)
+        tEnd = b->tEnd;
+    }
+slReverse(&bList);
+
+/* Make new chain based on old. */
+if (bList != NULL)
+    {
+    double sizeRatio;
+    AllocVar(sub);
+    sub->blockList = bList;
+    sub->qName = cloneString(chain->qName);
+    sub->qSize = chain->qSize;
+    sub->qStrand = chain->qStrand;
+    sub->qStart = qStart;
+    sub->qEnd = qEnd;
+    sub->tName = cloneString(chain->tName);
+    sub->tSize = chain->tSize;
+    sub->tStart = tStart;
+    sub->tEnd = tEnd;
+    sub->id = chain->id;
+
+    /* Fake new score. */
+    sizeRatio = (sub->tEnd - sub->tStart);
+    sizeRatio /= (chain->tEnd - chain->tStart);
+    sub->score = sizeRatio * chain->score;
+    }
+*retSubChain = *retChainToFree = sub;
+}
+
+void chainSubsetOnQ(struct chain *chain, int subStart, int subEnd, 
+    struct chain **retSubChain,  struct chain **retChainToFree)
+/* Get subchain of chain bounded by subStart-subEnd on 
+ * query side.  Return result in *retSubChain.  In some
+ * cases this may be the original chain, in which case
+ * *retChainToFree is NULL.  When done call chainFree on
+ * *retChainToFree.  The score and id fields are not really
+ * properly filled in. */
+{
+struct chain *sub = NULL;
+struct cBlock *oldB, *b, *bList = NULL;
+int qStart = BIGNUM, qEnd = -BIGNUM;
+int tStart = BIGNUM, tEnd = -BIGNUM;
+
+/* Check for easy case. */
+if (subStart <= chain->qStart && subEnd >= chain->qEnd)
+    {
+    *retSubChain = chain;
+    *retChainToFree = NULL;
+    return;
+    }
+/* Build new block list and calculate bounds. */
+for (oldB = chain->blockList; oldB != NULL; oldB = oldB->next)
+    {
+    if (oldB->qEnd <= subStart)
+        continue;
+    if (oldB->qStart >= subEnd)
+        break;
+    b = CloneVar(oldB);
+    if (b->qStart < subStart)
+        {
+	b->tStart += subStart - b->qStart;
+	b->qStart = subStart;
+	}
+    if (b->qEnd > subEnd)
+        {
+	b->tEnd -= b->qEnd - subEnd;
+	b->qEnd = subEnd;
+	}
+    slAddHead(&bList, b);
+    if (tStart > b->tStart)
+        tStart = b->tStart;
+    if (tEnd < b->tEnd)
+        tEnd = b->tEnd;
+    if (qStart > b->qStart)
+        qStart = b->qStart;
+    if (qEnd < b->qEnd)
+        qEnd = b->qEnd;
+    }
+slReverse(&bList);
+
+/* Make new chain based on old. */
+if (bList != NULL)
+    {
+    AllocVar(sub);
+    sub->blockList = bList;
+    sub->qName = cloneString(chain->qName);
+    sub->qSize = chain->qSize;
+    sub->qStrand = chain->qStrand;
+    sub->qStart = qStart;
+    sub->qEnd = qEnd;
+    sub->tName = cloneString(chain->tName);
+    sub->tSize = chain->tSize;
+    sub->tStart = tStart;
+    sub->tEnd = tEnd;
+    sub->id = chain->id;
+    }
+*retSubChain = *retChainToFree = sub;
+}
+
+void chainRangeQPlusStrand(struct chain *chain, int *retQs, int *retQe)
+/* Return range of bases covered by chain on q side on the plus
+ * strand. */
+{
+if (chain == NULL)
+    errAbort("chain::chainRangeQPlusStrand() - Can't find range in null query chain.");
+if (chain->qStrand == '-')
+    {
+    *retQs = chain->qSize - chain->qEnd;
+    *retQe = chain->qSize - chain->qStart;
+    }
+else
+    {
+    *retQs = chain->qStart;
+    *retQe = chain->qEnd;
+    }
+}
+
diff --git a/gbtools/src/blatSrc/lib/chainBlock.c b/gbtools/src/blatSrc/lib/chainBlock.c
new file mode 100644
index 0000000..5c5ed8b
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/chainBlock.c
@@ -0,0 +1,453 @@
+/* chainBlock - Chain together scored blocks from an alignment
+ * into scored chains.  Internally this uses a kd-tree and a
+ * varient of an algorithm suggested by Webb Miller and further
+ * developed by Jim Kent. */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "localmem.h"
+#include "linefile.h"
+#include "dlist.h"
+#include "chainBlock.h"
+
+
+struct kdBranch
+/* A kd-tree. That is a binary tree which partitions the children
+ * into higher and lower one dimension at a time.  We're just doing
+ * one in two dimensions, so it alternates between q and t dimensions. */
+    {
+    struct kdBranch *lo;      /* Pointer to children with lower coordinates. */
+    struct kdBranch *hi;      /* Pointer to children with higher coordinates. */
+    struct kdLeaf *leaf;      /* Extra info for leaves on tree. */
+    int cutCoord;	      /* Coordinate (in some dimension) to cut on */
+    double maxScore;	      /* Max score of any leaf below us. */
+    int maxQ;		      /* Maximum qEnd of any leaf below us. */
+    int maxT;		      /* Maximum tEnd of any leaf below us. */
+    };
+
+struct kdLeaf
+/* A leaf in our kdTree. */
+    {
+    struct kdLeaf *next;	/* Next in list. */
+    struct cBlock *cb;	        /* Start position and score from user. */
+    struct kdBranch *bestPred;	/* Best predecessor. */
+    double totalScore;		/* Total score of chain up to here. */
+    bool hit;			/* This hit? Used by system internally. */
+    };
+
+struct kdTree
+/* The whole tree.  */
+    {
+    struct kdBranch *root;	/* Pointer to root of kd-tree. */
+    };
+
+
+static int kdLeafCmpQ(const void *va, const void *vb)
+/* Compare to sort based on query start. */
+{
+const struct kdLeaf *a = *((struct kdLeaf **)va);
+const struct kdLeaf *b = *((struct kdLeaf **)vb);
+return a->cb->qStart - b->cb->qStart;
+}
+
+static int kdLeafCmpT(const void *va, const void *vb)
+/* Compare to sort based on target start. */
+{
+const struct kdLeaf *a = *((struct kdLeaf **)va);
+const struct kdLeaf *b = *((struct kdLeaf **)vb);
+return a->cb->tStart - b->cb->tStart;
+}
+
+static int kdLeafCmpTotal(const void *va, const void *vb)
+/* Compare to sort based on total score. */
+{
+const struct kdLeaf *a = *((struct kdLeaf **)va);
+const struct kdLeaf *b = *((struct kdLeaf **)vb);
+double diff = b->totalScore - a->totalScore;
+if (diff < 0) return -1;
+else if (diff > 0) return 1;
+else return 0;
+}
+
+static int medianVal(struct dlList *list, int medianIx, int dim)
+/* Return value of median block in list on given dimension 
+ * Mark blocks up to median as hit. */
+{
+struct dlNode *node = list->head;
+struct kdLeaf *leaf = NULL;
+int i;
+
+for (i=0; i<medianIx; ++i)
+    {
+    leaf = node->val;
+    leaf->hit = TRUE;  
+    node = node->next;
+    }
+return (dim == 0 ? leaf->cb->qStart : leaf->cb->tStart);
+}
+
+static int splitList(struct dlList *oldList, struct dlList *newList)
+/* Peel off members of oldList that are not hit onto new list. */
+{
+struct dlNode *node, *next;
+struct kdLeaf *leaf;
+int newCount = 0;
+dlListInit(newList);
+for (node = oldList->head; !dlEnd(node); node = next)
+    {
+    next = node->next;
+    leaf = node->val;
+    if (!leaf->hit)
+	{
+	dlRemove(node);
+	dlAddTail(newList, node);
+	++newCount;
+	}
+    }
+return newCount;
+}
+
+static void clearHits(struct dlList *list)
+/* Clear hit flags of all blocks on list. */
+{
+struct dlNode *node;
+for (node = list->head; !dlEnd(node); node = node->next)
+    {
+    struct kdLeaf *leaf = node->val;
+    leaf->hit = FALSE;
+    }
+}
+
+
+static struct kdBranch *kdBuild(int nodeCount, struct dlList *lists[2], int dim,
+	struct lm *lm)
+/* Build up kd-tree recursively. */
+{
+struct kdBranch *branch;
+lmAllocVar(lm, branch);
+if (nodeCount == 1)
+    {
+    struct kdLeaf *leaf = lists[0]->head->val;
+    branch->leaf = leaf;
+    branch->maxQ = leaf->cb->qEnd;
+    branch->maxT = leaf->cb->tEnd;
+    }
+else
+    {
+    int newCount;
+    struct dlList *newLists[2];
+    struct dlList newQ, newT;
+    int nextDim = 1-dim;
+
+    /* Subdivide lists along median.  */
+    newLists[0] = &newQ;
+    newLists[1] = &newT;
+    clearHits(lists[0]);
+    branch->cutCoord = medianVal(lists[dim], nodeCount/2, dim);
+    newCount = splitList(lists[0], newLists[0]);
+    splitList(lists[1], newLists[1]);
+
+    /* Recurse on each side. */
+    branch->lo = kdBuild(nodeCount - newCount, lists, nextDim, lm);
+    branch->hi = kdBuild(newCount, newLists, nextDim, lm);
+    branch->maxQ = max(branch->lo->maxQ, branch->hi->maxQ);
+    branch->maxT = max(branch->lo->maxT, branch->hi->maxT);
+    }
+return branch;
+}
+
+static struct kdTree *kdTreeMake(struct kdLeaf *leafList, struct lm *lm)
+/* Make a kd-tree containing leafList. */
+{
+struct kdLeaf *leaf;
+int nodeCount = slCount(leafList);
+struct kdTree *tree;
+struct dlList qList, tList,*lists[2];
+struct dlNode *qNodes, *tNodes;
+int i;
+
+/* Build lists sorted in each dimension. This
+ * will let us quickly find medians while constructing
+ * the kd-tree. */
+dlListInit(&qList);
+dlListInit(&tList);
+AllocArray(qNodes, nodeCount);
+AllocArray(tNodes, nodeCount);
+for (i=0 , leaf=leafList; leaf != NULL; leaf = leaf->next, ++i)
+    {
+    qNodes[i].val = tNodes[i].val = leaf;
+    dlAddTail(&qList, &qNodes[i]);
+    dlAddTail(&tList, &tNodes[i]);
+    }
+/* Just sort qList since tList is sorted because it was
+ * constructed from sorted leafList. */
+dlSort(&qList, kdLeafCmpQ); 
+lists[0] = &qList;
+lists[1] = &tList;
+
+/* Allocate master data structure and call recursive builder. */
+lmAllocVar(lm, tree);
+tree->root = kdBuild(nodeCount, lists, 0, lm);
+
+/* Clean up and go home. */
+freeMem(qNodes);
+freeMem(tNodes);
+return tree;
+}
+
+struct predScore
+/* Predecessor and score we get merging with it. */
+    {
+    struct kdBranch *pred;	/* Predecessor. */
+    double score;		/* Score of us plus predecessor. */
+    };
+
+static struct predScore bestPredecessor(
+	struct kdLeaf *lonely,	    /* We're finding this leaf's predecessor */
+	ConnectCost connectCost,    /* Cost to connect two leafs. */
+	GapCost gapCost,	    /* Lower bound on gap cost. */
+	void *gapData,		    /* Data to pass to Gap/Connect cost */
+	int dim,		    /* Dimension level of tree splits on. */
+	struct kdBranch *branch,    /* Subtree to explore */
+	struct predScore bestSoFar) /* Best predecessor so far. */
+/* Find the highest scoring predecessor to this leaf, and
+ * thus iteratively the highest scoring subchain that ends
+ * in this leaf. */
+{
+struct kdLeaf *leaf;
+double maxScore = branch->maxScore + lonely->cb->score;
+
+/* If best score in this branch of tree wouldn't be enough
+ * don't bother exploring it. First try without calculating
+ * gap score in case gap score is a little expensive to calculate. */
+if (maxScore < bestSoFar.score)
+    return bestSoFar;
+maxScore -= gapCost(lonely->cb->qStart - branch->maxQ, 
+	lonely->cb->tStart - branch->maxT, gapData);
+if (maxScore < bestSoFar.score)
+    return bestSoFar;
+
+
+/* If it's a terminal branch, then calculate score to connect
+ * with it. */
+else if ((leaf = branch->leaf) != NULL)
+    {
+    if (leaf->cb->qStart < lonely->cb->qStart 
+     && leaf->cb->tStart < lonely->cb->tStart)
+	{
+	double score = leaf->totalScore + lonely->cb->score - 
+		connectCost(leaf->cb, lonely->cb, gapData);
+	if (score > bestSoFar.score)
+	   {
+	   bestSoFar.score = score;
+	   bestSoFar.pred = branch;
+	   }
+	}
+    return bestSoFar;
+    }
+
+/* Otherwise explore sub-trees that could harbor predecessors. */
+else
+    {
+    int newDim = 1-dim;
+    int dimCoord = (dim == 0 ? lonely->cb->qStart : lonely->cb->tStart);
+    
+    /* Explore hi branch first as it is more likely to have high
+     * scores.  However only explore it if it can have things starting
+     * before us. */
+    if (dimCoord > branch->cutCoord)
+         bestSoFar = bestPredecessor(lonely, connectCost, gapCost, gapData,
+	 	newDim, branch->hi, bestSoFar);
+    bestSoFar = bestPredecessor(lonely, connectCost, gapCost, gapData,
+    	newDim, branch->lo, bestSoFar);
+    return bestSoFar;
+    }
+}
+
+static void updateScoresOnWay(struct kdBranch *branch, 
+	int dim, struct kdLeaf *leaf)
+/* Traverse kd-tree to find leaf.  Update all maxScores on the way
+ * to reflect leaf->totalScore. */
+{
+int newDim = 1-dim;
+int dimCoord = (dim == 0 ? leaf->cb->qStart : leaf->cb->tStart);
+if (branch->maxScore < leaf->totalScore) branch->maxScore = leaf->totalScore;
+if (branch->leaf == NULL)
+    {
+    if (dimCoord <= branch->cutCoord)
+	updateScoresOnWay(branch->lo, newDim, leaf);
+    if (dimCoord >= branch->cutCoord)
+	updateScoresOnWay(branch->hi, newDim, leaf);
+    }
+}
+
+static void findBestPredecessors(struct kdTree *tree, struct kdLeaf *leafList, 
+	ConnectCost connectCost, GapCost gapCost, void *gapData)
+/* Find best predecessor for each leaf. */
+{
+static struct predScore noBest;
+struct kdLeaf *leaf;
+double bestScore = 0;
+
+for (leaf = leafList; leaf != NULL; leaf = leaf->next)
+    {
+    struct predScore best;
+    best = bestPredecessor(leaf, connectCost, gapCost, gapData, 0, tree->root, noBest);
+    if (best.score > leaf->totalScore)
+        {
+	leaf->totalScore = best.score;
+	leaf->bestPred = best.pred;
+	}
+    updateScoresOnWay(tree->root, 0, leaf);
+    if (bestScore < leaf->totalScore)
+        {
+	bestScore = leaf->totalScore;
+	}
+    }
+}
+
+static double scoreBlocks(struct cBlock *blockList, ConnectCost connectCost,
+	void *gapData)
+/* Score list of blocks including gaps between blocks. */
+{
+struct cBlock *block, *lastBlock = NULL;
+double score = 0;
+for (block = blockList; block != NULL; block = block->next)
+    {
+    score += block->score;
+    if (lastBlock != NULL)
+	score -= connectCost(lastBlock, block, gapData);
+    lastBlock = block;
+    }
+return score;
+}
+
+static struct chain *peelChains(char *qName, int qSize, char qStrand,
+	char *tName, int tSize, struct kdLeaf *leafList, FILE *details)
+/* Peel off all chains from tree implied by
+ * best predecessors. */
+{
+struct kdLeaf *leaf;
+struct chain *chainList = NULL, *chain;
+for (leaf = leafList; leaf != NULL; leaf = leaf->next)
+    leaf->hit = FALSE;
+for (leaf = leafList; leaf != NULL; leaf = leaf->next)
+    {
+    if (!leaf->hit)
+        {
+	struct kdLeaf *lf;
+	AllocVar(chain);
+	chain->qName = cloneString(qName);
+	chain->qSize = qSize;
+	chain->qStrand = qStrand;
+	chain->tName = cloneString(tName);
+	chain->tSize = tSize;
+	chain->qEnd = leaf->cb->qEnd;
+	chain->tEnd = leaf->cb->tEnd;
+	if (details)
+	    {
+	    chain->score = leaf->totalScore;
+	    chain->id = -1;
+	    chainWriteHead(chain, details);
+	    chain->score = 0;
+	    chain->id = 0;
+	    }
+	slAddHead(&chainList, chain);
+	for (lf = leaf; ; )
+	    {
+	    lf->hit = TRUE;
+	    slAddHead(&chain->blockList, lf->cb);
+	    chain->qStart = lf->cb->qStart;
+	    chain->tStart = lf->cb->tStart;
+	    if (details)
+	        {
+		struct cBlock *b = lf->cb;
+		fprintf(details, "%d\t%f\t%d\t%d\t%d\n", b->score, lf->totalScore,
+			b->tStart, b->qStart, b->qEnd - b->qStart);
+		}
+	    if (lf->bestPred == NULL)
+	         break;
+	    else
+	        {
+		if (details)
+		    {
+		    struct cBlock *b = lf->cb;
+		    struct cBlock *a = lf->bestPred->leaf->cb;
+		    fprintf(details, " gap %d\t%d\n", 
+			b->tStart - a->tEnd, b->qStart - a->qEnd);
+		    }
+		}
+	    lf = lf->bestPred->leaf;
+	    if (lf->hit)
+	        break;
+	    }
+	}
+    }
+slReverse(&chainList);
+return chainList;
+}
+
+struct chain *chainBlocks(
+	char *qName, int qSize, char qStrand,	/* Info on query sequence */
+	char *tName, int tSize, 		/* Info on target. */
+	struct cBlock **pBlockList, 		/* Unordered ungapped alignments. */
+	ConnectCost connectCost, 		/* Calculate cost to connect nodes. */
+	GapCost gapCost, 			/* Cost for non-overlapping nodes. */
+	void *gapData, 				/* Passed through to connect/gapCosts */
+	FILE *details)				/* NULL except for debugging */
+/* Create list of chains from list of blocks.  The blockList will get
+ * eaten up as the blocks are moved from the list to the chain. 
+ * The list of chains returned is sorted by score. 
+ *
+ * The details FILE may be NULL, and is where additional information
+ * about the chaining is put.
+ *
+ * Note that the connectCost needs to adjust for possibly partially 
+ * overlapping blocks, and that these need to be taken out of the
+ * resulting chains in general.  This can get fairly complex.  Also
+ * the chains will need some cleanup at the end.  Use the chainConnect
+ * module to help with this.  See hg/mouseStuff/axtChain for example usage. */
+{
+struct kdTree *tree;
+struct kdLeaf *leafList = NULL, *leaf;
+struct cBlock *block;
+struct chain *chainList = NULL, *chain;
+struct lm *lm;
+
+/* Empty lists will be problematic later, so deal with them here. */
+if (*pBlockList == NULL)
+   return NULL;
+
+/* Make a leaf for each block. */
+lm = lmInit(0);  /* Memory for tree, branches and leaves. */
+for (block = *pBlockList; block != NULL; block = block->next)
+    {
+    /* Watch out for 0-length blocks in input: */
+    if (block->tStart == block->tEnd)
+	continue;
+    lmAllocVar(lm, leaf);
+    leaf->cb = block;
+    leaf->totalScore = block->score;
+    slAddHead(&leafList, leaf);
+    }
+
+/* Figure out chains. */
+slSort(&leafList, kdLeafCmpT);
+tree = kdTreeMake(leafList, lm);
+findBestPredecessors(tree, leafList, connectCost, gapCost, gapData);
+slSort(&leafList, kdLeafCmpTotal);
+chainList = peelChains(qName, qSize, qStrand, tName, tSize, leafList, details);
+
+/* Rescore chains (since some truncated) */
+for (chain = chainList; chain != NULL; chain = chain->next)
+    chain->score = scoreBlocks(chain->blockList, connectCost, gapData);
+slSort(&chainList,  chainCmpScore);
+
+/* Clean up and go home. */
+lmCleanup(&lm);
+*pBlockList = NULL;
+return chainList;
+}
+
diff --git a/gbtools/src/blatSrc/lib/chainConnect.c b/gbtools/src/blatSrc/lib/chainConnect.c
new file mode 100644
index 0000000..6d4c0d9
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/chainConnect.c
@@ -0,0 +1,369 @@
+/* chainConnect - Stuff to cope with connect costs and overlaps when 
+ * making chains. This works closely with the chainBlock module. */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "chain.h"
+#include "axt.h"
+#include "gapCalc.h"
+#include "chainConnect.h"
+
+
+double chainScoreBlock(char *q, char *t, int size, int matrix[256][256])
+/* Score block through matrix. */
+{
+double score = 0;
+int i;
+for (i=0; i<size; ++i)
+    score += matrix[(int)q[i]][(int)t[i]];
+return score;
+}
+
+double chainCalcScore(struct chain *chain, struct axtScoreScheme *ss, 
+	struct gapCalc *gapCalc, struct dnaSeq *query, struct dnaSeq *target)
+/* Calculate chain score freshly. */
+{
+struct cBlock *b1, *b2;
+double score = 0;
+for (b1 = chain->blockList; b1 != NULL; b1 = b2)
+    {
+    score += chainScoreBlock(query->dna + b1->qStart, 
+    	target->dna + b1->tStart, b1->tEnd - b1->tStart, ss->matrix);
+    b2 = b1->next;
+    if (b2 != NULL)
+        score -=  gapCalcCost(gapCalc, b2->qStart - b1->qEnd, 
+		              b2->tStart - b1->tEnd);
+    }
+return score;
+}
+
+double chainCalcScoreSubChain(struct chain *chain, struct axtScoreScheme *ss, 
+	struct gapCalc *gapCalc, struct dnaSeq *query, struct dnaSeq *target)
+/* Calculate chain score assuming query and target 
+   span the chained region rather than entire chrom. */
+{
+struct cBlock *b1, *b2;
+double score = 0;
+for (b1 = chain->blockList; b1 != NULL; b1 = b2)
+    {
+    score += chainScoreBlock(query->dna + (b1->qStart) - chain->qStart, 
+    	target->dna + (b1->tStart) - chain->tStart, b1->tEnd - b1->tStart, ss->matrix);
+    b2 = b1->next;
+    if (b2 != NULL)
+        score -=  gapCalcCost(gapCalc, b2->qStart - b1->qEnd, 
+		              b2->tStart - b1->tEnd);
+    }
+return score;
+}
+
+void cBlockFindCrossover(struct cBlock *left, struct cBlock *right,
+	struct dnaSeq *qSeq, struct dnaSeq *tSeq,  
+	int overlap, int matrix[256][256], int *retPos, int *retScoreAdjustment)
+/* Find ideal crossover point of overlapping blocks.  That is
+ * the point where we should start using the right block rather
+ * than the left block.  This point is an offset from the start
+ * of the overlapping region (which is the same as the start of the
+ * right block). */
+{
+int bestPos = 0;
+char *rqStart = qSeq->dna + right->qStart;
+char *lqStart = qSeq->dna + left->qEnd - overlap;
+char *rtStart = tSeq->dna + right->tStart;
+char *ltStart = tSeq->dna + left->tEnd - overlap;
+int i;
+double score, bestScore, rScore, lScore;
+
+/* Make sure overlap is not larger than either block size: */
+if (overlap > (left->tEnd - left->tStart) ||
+    overlap > (right->tEnd - right->tStart))
+    errAbort("overlap is %d -- too large for one of these:\n"
+	     "qSize=%d  tSize=%d\n"
+	     "left: qStart=%d qEnd=%d (%d) tStart=%d tEnd=%d (%d)\n"
+	     "right: qStart=%d qEnd=%d (%d) tStart=%d tEnd=%d (%d)\n",
+	     overlap, qSeq->size, tSeq->size,
+	     left->qStart, left->qEnd, left->qEnd - left->qStart,
+	     left->tStart, left->tEnd, left->tEnd - left->tStart,
+	     right->qStart, right->qEnd, right->qEnd - right->qStart, 
+	     right->tStart, right->tEnd, right->tEnd - right->tStart);
+
+score = bestScore = rScore = chainScoreBlock(rqStart, rtStart, overlap, matrix);
+lScore = chainScoreBlock(lqStart, ltStart, overlap, matrix);
+for (i=0; i<overlap; ++i)
+    {
+    score += matrix[(int)lqStart[i]][(int)ltStart[i]];
+    score -= matrix[(int)rqStart[i]][(int)rtStart[i]];
+    if (score > bestScore)
+	{
+	bestScore = score;
+	bestPos = i+1;
+	}
+    }
+*retPos = bestPos;
+*retScoreAdjustment = rScore + lScore - bestScore;
+}
+
+
+int chainConnectGapCost(int dq, int dt, struct chainConnect *cc)
+/* Calculate cost of non-overlapping gap. */
+{
+return gapCalcCost(cc->gapCalc, dq, dt);
+}
+
+int chainConnectCost(struct cBlock *a, struct cBlock *b, 
+	struct chainConnect *cc)
+/* Calculate connection cost - including gap score
+ * and overlap adjustments if any. */
+{
+int dq = b->qStart - a->qEnd;
+int dt = b->tStart - a->tEnd;
+int overlapAdjustment = 0;
+
+if (a->qStart >= b->qStart || a->tStart >= b->tStart)
+    {
+    errAbort("a (%d %d) not strictly before b (%d %d)",
+    	a->qStart, a->tStart, b->qStart, b->tStart);
+    }
+if (dq < 0 || dt < 0)
+   {
+   int bSize = b->qEnd - b->qStart;
+   int aSize = a->qEnd - a->qStart;
+   int overlap = -min(dq, dt);
+   int crossover;
+   if (overlap >= bSize || overlap >= aSize) 
+       {
+       /* One of the blocks is enclosed completely on one dimension
+        * or other by the other.  Discourage this overlap. */
+       overlapAdjustment = 100000000;
+       }
+   else
+       {
+       cBlockFindCrossover(a, b, cc->query, cc->target, overlap, 
+       		cc->ss->matrix, &crossover, &overlapAdjustment);
+       dq += overlap;
+       dt += overlap;
+       }
+   }
+return overlapAdjustment + gapCalcCost(cc->gapCalc, dq, dt);
+}
+
+static void checkStartBeforeEnd(struct chain *chain, char *message)
+/* Check qStart < qEnd, tStart < tEnd for each block. */
+{
+struct cBlock *b;
+for (b = chain->blockList; b != NULL; b = b->next)
+    {
+    if (b->qStart >= b->qEnd || b->tStart >= b->tEnd)
+	errAbort("Start after end in (%d %d) to (%d %d) %s",
+	    b->qStart, b->tStart, b->qEnd, b->tEnd, message);
+    }
+}
+
+static void checkChainGaps(struct chain *chain, char *message)
+/* Check that gaps between blocks are non-negative. */
+{
+struct cBlock *a, *b;
+a = chain->blockList;
+if (a == NULL)
+    return;
+for (b = a->next; b != NULL; b = b->next)
+    {
+    if (a->qEnd > b->qStart || a->tEnd > b->tStart)
+	{
+	errAbort("Negative gap between (%d %d - %d %d) and (%d %d - %d %d) %s",
+	    a->qStart, a->tStart, a->qEnd, a->tEnd, 
+	    b->qStart, b->tStart, b->qEnd, b->tEnd, message);
+	}
+    a = b;
+    }
+}
+
+static void checkChainIncreases(struct chain *chain, char *message)
+/* Check that qStart and tStart both strictly increase
+ * in chain->blockList. */
+{
+struct cBlock *a, *b;
+a = chain->blockList;
+if (a == NULL)
+    return;
+for (b = a->next; b != NULL; b = b->next)
+    {
+    if (a->qStart >= b->qStart || a->tStart >= b->tStart)
+	{
+	errAbort("a (%d %d) not before b (%d %d) %s",
+	    a->qStart, a->tStart, b->qStart, b->tStart, message);
+	}
+    a = b;
+    }
+}
+
+void chainCalcBounds(struct chain *chain)
+/* Recalculate chain boundaries - setting qStart/qEnd/tStart/tEnd from
+ * a scan of blockList. */
+{
+struct cBlock *b = chain->blockList;
+if (chain->blockList == NULL)
+    return;
+chain->qStart = b->qStart;
+chain->tStart = b->tStart;
+b = slLastEl(chain->blockList);
+chain->qEnd = b->qEnd;
+chain->tEnd = b->tEnd;
+}
+
+static boolean removeNegativeBlocks(struct chain *chain)
+/* Removing the partial overlaps occassional results
+ * in all of a block being removed.  This routine
+ * removes the dried up husks of these blocks 
+ * and returns TRUE if it finds any. */
+{
+struct cBlock *newList = NULL, *b, *next;
+boolean gotNeg = FALSE;
+for (b = chain->blockList; b != NULL; b = next)
+    {
+    next = b->next;
+    if (b->qStart >= b->qEnd || b->tStart >= b->tEnd)
+	{
+        gotNeg = TRUE;
+	freeMem(b);
+	}
+    else
+        {
+	slAddHead(&newList, b);
+	}
+    }
+slReverse(&newList);
+chain->blockList = newList;
+if (gotNeg)
+    chainCalcBounds(chain);
+return gotNeg;
+}
+
+void setChainBounds(struct chain *chain)
+/* Set chain overall bounds to fit blocks. */
+{
+struct cBlock *b = chain->blockList;
+chain->qStart = b->qStart;
+chain->tStart = b->tStart;
+while (b->next != NULL)
+     b = b->next;
+chain->qEnd = b->qEnd;
+chain->tEnd = b->tEnd;
+}
+
+void chainRemovePartialOverlaps(struct chain *chain, 
+	struct dnaSeq *qSeq, struct dnaSeq *tSeq, int matrix[256][256])
+/* If adjacent blocks overlap then find crossover points between them. */
+{
+struct cBlock *a, *b;
+boolean totalTrimA, totalTrimB;
+
+assert(chain->blockList != NULL);
+
+/* Do an internal sanity check to make sure that things
+ * really are sorted by both qStart and tStart. */
+checkChainIncreases(chain, "before removePartialOverlaps");
+
+/* Remove overlapping portion of blocks.  In some
+ * tricky repeating regions this can result in 
+ * complete blocks being removed.  This complicates
+ * the loop below in some cases, forcing us to essentially
+ * start over when the first of the two blocks we
+ * are examining gets trimmed out completely. */
+for (;;)
+    {
+    totalTrimA = totalTrimB = FALSE;
+    a = chain->blockList;
+    b = a->next;
+    for (;;)
+        {
+	int dq, dt;
+	if (b == NULL)
+	    break;
+	dq = b->qStart - a->qEnd;
+	dt = b->tStart - a->tEnd;
+	if (dq < 0 || dt < 0)
+	   {
+	   int overlap = -min(dq, dt);
+	   int aSize = a->qEnd - a->qStart;
+	   int bSize = b->qEnd - b->qStart;
+	   int crossover, invCross, overlapAdjustment;
+	   if (overlap >= aSize || overlap >= bSize)
+	       {
+	       totalTrimB = TRUE;
+	       }
+	   else
+	       {
+	       cBlockFindCrossover(a, b, qSeq, tSeq, overlap, matrix, 
+	                     &crossover, &overlapAdjustment);
+	       b->qStart += crossover;
+	       b->tStart += crossover;
+	       invCross = overlap - crossover;
+	       a->qEnd -= invCross;
+	       a->tEnd -= invCross;
+	       if (b->qEnd <= b->qStart)
+		   {
+		   totalTrimB = TRUE;
+		   }
+	       else if (a->qEnd <= a->qStart)
+		   {
+		   totalTrimA = TRUE;
+		   }
+	       }
+	   }
+	if (totalTrimA == TRUE)
+	    {
+	    removeNegativeBlocks(chain);
+	    break;
+	    }
+	else if (totalTrimB == TRUE)
+	    {
+	    b = b->next;
+	    freez(&a->next);
+	    a->next = b;
+	    totalTrimB = FALSE;
+	    }
+	else
+	    {
+	    a = b;
+	    b = b->next;
+	    }
+	}
+    if (!totalTrimA)
+        break;
+    }
+
+/* Reset chain bounds - may have clipped them in this
+ * process. */
+setChainBounds(chain);
+
+/* Do internal sanity checks. */
+checkChainGaps(chain, "after removePartialOverlaps");
+checkStartBeforeEnd(chain, "after removePartialOverlaps");
+}
+
+void chainMergeAbutting(struct chain *chain)
+/* Merge together blocks in a chain that abut each
+ * other exactly. */
+{
+struct cBlock *newList = NULL, *b, *last = NULL, *next;
+for (b = chain->blockList; b != NULL; b = next)
+    {
+    next = b->next;
+    if (last == NULL || last->qEnd != b->qStart || last->tEnd != b->tStart)
+	{
+	slAddHead(&newList, b);
+	last = b;
+	}
+    else
+        {
+	last->qEnd = b->qEnd;
+	last->tEnd = b->tEnd;
+	freeMem(b);
+	}
+    }
+slReverse(&newList);
+chain->blockList = newList;
+}
+
diff --git a/gbtools/src/blatSrc/lib/chainToAxt.c b/gbtools/src/blatSrc/lib/chainToAxt.c
new file mode 100644
index 0000000..cf1aff2
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/chainToAxt.c
@@ -0,0 +1,124 @@
+/* chainToAxt - convert from chain to axt format. */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "chain.h"
+#include "dnautil.h"
+#include "dnaseq.h"
+#include "axt.h"
+#include "chainToAxt.h"
+
+
+static struct axt *axtFromBlocks(
+	struct chain *chain,
+	struct cBlock *startB, struct cBlock *endB,
+	struct dnaSeq *qSeq, int qOffset,
+	struct dnaSeq *tSeq, int tOffset)
+/* Convert a list of blocks (guaranteed not to have inserts in both
+ * strands between them) to an axt. */
+{
+int symCount = 0;
+int dq, dt, blockSize = 0, symIx = 0;
+struct cBlock *b, *a = NULL;
+struct axt *axt;
+char *qSym, *tSym;
+
+/* Make a pass through figuring out how big output will be. */
+for (b = startB; b != endB; b = b->next)
+    {
+    if (a != NULL)
+        {
+	dq = b->qStart - a->qEnd;
+	dt = b->tStart - a->tEnd;
+	symCount += dq + dt;
+	}
+    blockSize = b->qEnd - b->qStart;
+    symCount += blockSize;
+    a = b;
+    }
+
+/* Allocate axt and fill in most fields. */
+AllocVar(axt);
+axt->qName = cloneString(chain->qName);
+axt->qStart = startB->qStart;
+axt->qEnd = a->qEnd;
+axt->qStrand = chain->qStrand;
+axt->tName = cloneString(chain->tName);
+axt->tStart = startB->tStart;
+axt->tEnd = a->tEnd;
+axt->tStrand = '+';
+axt->symCount = symCount;
+axt->qSym = qSym = needLargeMem(symCount+1);
+qSym[symCount] = 0;
+axt->tSym = tSym = needLargeMem(symCount+1);
+tSym[symCount] = 0;
+
+/* Fill in symbols. */
+a = NULL;
+for (b = startB; b != endB; b = b->next)
+    {
+    if (a != NULL)
+        {
+	dq = b->qStart - a->qEnd;
+	dt = b->tStart - a->tEnd;
+	if (dq == 0)
+	    {
+	    memset(qSym+symIx, '-', dt);
+	    memcpy(tSym+symIx, tSeq->dna + a->tEnd - tOffset, dt);
+	    symIx += dt;
+	    }
+	else
+	    {
+	    assert(dt == 0);
+	    memset(tSym+symIx, '-', dq);
+	    memcpy(qSym+symIx, qSeq->dna + a->qEnd - qOffset, dq);
+	    symIx += dq;
+	    }
+	}
+    blockSize = b->qEnd - b->qStart;
+    memcpy(qSym+symIx, qSeq->dna + b->qStart - qOffset, blockSize);
+    memcpy(tSym+symIx, tSeq->dna + b->tStart - tOffset, blockSize);
+    symIx += blockSize;
+    a = b;
+    }
+assert(symIx == symCount);
+
+/* Fill in score and return. */
+axt->score = axtScoreDnaDefault(axt);
+return axt;
+}
+
+struct axt *chainToAxt(struct chain *chain, 
+	struct dnaSeq *qSeq, int qOffset,
+	struct dnaSeq *tSeq, int tOffset, int maxGap, int maxChain)
+/* Convert a chain to a list of axt's.  This will break
+ * where there is a double-sided gap in chain, or 
+ * where there is a single-sided gap greater than maxGap, or 
+ * where there is a chain longer than maxChain.
+ */
+{
+struct cBlock *startB = chain->blockList, *a = NULL, *b;
+struct axt *axtList = NULL, *axt;
+
+for (b = chain->blockList; b != NULL; b = b->next)
+    {
+    if (a != NULL)
+        {
+	int dq = b->qStart - a->qEnd;
+	int dt = b->tStart - a->tEnd;
+	if ((dq > 0 && dt > 0) || dt > maxGap || dq > maxGap || (b->tEnd - startB->tStart) > maxChain)
+	    {
+	    axt = axtFromBlocks(chain, startB, b, qSeq, qOffset, tSeq, tOffset);
+	    slAddHead(&axtList, axt);
+	    startB = b;
+	    }
+	}
+    a = b;
+    }
+axt = axtFromBlocks(chain, startB, NULL, qSeq, qOffset, tSeq, tOffset);
+slAddHead(&axtList, axt);
+slReverse(&axtList);
+return axtList;
+}
diff --git a/gbtools/src/blatSrc/lib/chainToPsl.c b/gbtools/src/blatSrc/lib/chainToPsl.c
new file mode 100644
index 0000000..f37cf20
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/chainToPsl.c
@@ -0,0 +1,125 @@
+/* chainToPsl - convert between chains and psl.  Both of these
+ * are alignment formats that can handle gaps in both strands
+ * and do not include the sequence itself. */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "linefile.h"
+#include "hash.h"
+#include "psl.h"
+#include "chain.h"
+
+
+
+struct psl *chainToPsl(struct chain *chain)
+/* chainToPsl - convert chain to psl.  This does not fill in
+ * the match, repMatch, mismatch, and N fields since it needs
+ * the sequence for that.  It does fill in the rest though. */
+{
+struct psl *psl;
+int blockCount, i;
+struct cBlock *b, *nextB;
+
+blockCount = slCount(chain->blockList);
+AllocVar(psl);
+AllocArray(psl->blockSizes, blockCount);
+AllocArray(psl->qStarts, blockCount);
+AllocArray(psl->tStarts, blockCount);
+psl->strand[0] = chain->qStrand;
+psl->qName = cloneString(chain->qName);
+psl->qSize = chain->qSize;
+if (chain->qStrand == '-')
+    {
+    psl->qStart = chain->qSize - chain->qEnd;
+    psl->qEnd = chain->qSize - chain->qStart;
+    }
+else
+    {
+    psl->qStart = chain->qStart;
+    psl->qEnd = chain->qEnd;
+    }
+psl->tName = cloneString(chain->tName);
+psl->tSize = chain->tSize;
+psl->tStart = chain->tStart;
+psl->tEnd = chain->tEnd;
+psl->blockCount = blockCount;
+for (i=0, b=chain->blockList; i < blockCount; ++i, b = nextB)
+    {
+    nextB = b->next;
+    psl->tStarts[i] = b->tStart;
+    psl->qStarts[i] = b->qStart;
+    psl->blockSizes[i] = b->qEnd - b->qStart;
+    if (nextB != NULL)
+        {
+	int qGap = nextB->qStart - b->qEnd;
+	int tGap = nextB->tStart - b->tEnd;
+	if (qGap != 0)
+	    {
+	    psl->qBaseInsert += qGap;
+	    psl->qNumInsert += 1;
+	    }
+	if (tGap != 0)
+	    {
+	    psl->tBaseInsert += tGap;
+	    psl->tNumInsert += 1;
+	    }
+	}
+    }
+return psl;
+}
+
+static void fillInMatchEtc(struct chain *chain, 
+	struct dnaSeq *query, struct dnaSeq *target, struct psl *psl)
+/* Fill in psl->match,mismatch,repMatch, and nCount fields.
+ * Assumes that query and target are on correct strands already. */
+{
+struct cBlock *block;
+unsigned match = 0, misMatch=0, repMatch=0, nCount=0;
+for (block = chain->blockList; block != NULL; block = block->next)
+    {
+    DNA *qDna = query->dna + block->qStart;
+    DNA *tDna = target->dna + block->tStart;
+    int i, size = block->qEnd - block->qStart;
+    for (i=0; i<size; ++i)
+        {
+	DNA q,t;
+	int qv, tv;
+	q = qDna[i];
+	t = tDna[i];
+	qv = ntVal[(int)q];
+	tv = ntVal[(int)t];
+	if (qv < 0 || tv < 0)
+	    ++nCount;
+	else if (qv == tv)
+	    {
+	    if (isupper(q) && isupper(t))
+	        ++match;
+	    else
+	        ++repMatch;
+	    }
+	else 
+	    ++misMatch;
+        }
+    }
+psl->match = match;
+psl->misMatch = misMatch;
+psl->repMatch = repMatch;
+psl->nCount = nCount;
+}
+
+struct psl *chainToFullPsl(struct chain *chain, 
+	struct dnaSeq *query,   /* Forward query sequence. */
+	struct dnaSeq *rQuery,	/* Reverse complemented query sequence. */
+	struct dnaSeq *target)
+/* Convert chainList to pslList, filling in matches, N's etc. */
+{
+struct psl *psl = chainToPsl(chain);
+struct dnaSeq *qSeq = (chain->qStrand == '-' ? rQuery : query);
+fillInMatchEtc(chain, qSeq, target, psl);
+return psl;
+}
+
+
+
diff --git a/gbtools/src/blatSrc/lib/cheapcgi.c b/gbtools/src/blatSrc/lib/cheapcgi.c
new file mode 100644
index 0000000..af0730f
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/cheapcgi.c
@@ -0,0 +1,2306 @@
+/* Routines for getting variables passed in from web page
+ * forms via CGI.
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "hash.h"
+#include "cheapcgi.h"
+#include "portable.h"
+#include "linefile.h"
+#include "errAbort.h"
+#ifndef GBROWSE
+#include "mime.h"
+#endif /* GBROWSE */
+#include <signal.h>
+
+
+/* These three variables hold the parsed version of cgi variables. */
+static char *inputString = NULL;
+static unsigned long inputSize;
+static struct hash *inputHash = NULL;
+static struct cgiVar *inputList = NULL;
+
+static boolean haveCookiesHash = FALSE;
+static struct hash *cookieHash = NULL;
+static struct cgiVar *cookieList = NULL;
+
+/* should cheapcgi use temp files to store uploaded files */
+static boolean doUseTempFile = FALSE;
+
+void dumpCookieList()
+/* Print out the cookie list. */
+{
+struct cgiVar *v;
+for (v=cookieList; v != NULL; v = v->next)
+    printf("%s=%s (%d)\n", v->name, v->val, v->saved);
+}
+
+void useTempFile()
+/* tell cheapcgi to use temp files */
+{
+doUseTempFile = TRUE;
+}
+
+boolean cgiIsOnWeb()
+/* Return TRUE if looks like we're being run as a CGI. */
+{
+return getenv("REQUEST_METHOD") != NULL;
+}
+
+char *cgiRequestMethod()
+/* Return CGI REQUEST_METHOD (such as 'GET/POST/PUT/DELETE/HEAD') */
+{
+return getenv("REQUEST_METHOD");
+}
+
+char *cgiRequestUri()
+/* Return CGI REQUEST_URI */
+{
+return getenv("REQUEST_URI");
+}
+
+char *cgiRequestContentLength()
+/* Return HTTP REQUEST CONTENT_LENGTH if available*/
+{
+return getenv("CONTENT_LENGTH");
+}
+
+char *cgiScriptName()
+/* Return name of script so libs can do context-sensitive stuff. */
+{
+char *scriptName = getenv("SCRIPT_NAME");
+if (scriptName == NULL)
+    scriptName = "cgiSpoofedScript";
+return scriptName;
+}
+
+char *cgiServerName()
+/* Return name of server, better to use cgiServerNamePort() for
+   actual URL construction */
+{
+return getenv("SERVER_NAME");
+}
+
+char *cgiServerPort()
+/* Return port number of server, default 80 if not found */
+{
+char *port = getenv("SERVER_PORT");
+if (port)
+    return port;
+else
+    return "80";
+}
+
+boolean cgiServerHttpsIsOn()
+/* Return true if HTTPS is on */
+{
+char *httpsIsOn = getenv("HTTPS");
+if (httpsIsOn)
+    return sameString(httpsIsOn, "on");
+else
+    return FALSE;
+}
+
+char *cgiAppendSForHttps()
+/* if running on https, add the letter s to the url protocol */
+{
+if (cgiServerHttpsIsOn())
+    return "s";
+return "";
+}
+
+
+char *cgiServerNamePort()
+/* Return name of server with port if different than 80 */
+{
+char *port = cgiServerPort();
+char *name = cgiServerName();
+struct dyString *result = newDyString(256);
+char *defaultPort = "80";
+if (cgiServerHttpsIsOn())
+    defaultPort = "443";
+
+if (name)
+    {
+    dyStringPrintf(result,"%s",name);
+    if (differentString(port, defaultPort))
+	dyStringPrintf(result,":%s",port);
+    return dyStringCannibalize(&result);
+    }
+else
+    return NULL;
+}
+
+char *cgiRemoteAddr()
+/* Return IP address of client (or "unknown"). */
+{
+static char *dunno = "unknown";
+char *remoteAddr = getenv("REMOTE_ADDR");
+if (remoteAddr == NULL)
+    remoteAddr = dunno;
+return remoteAddr;
+}
+
+char *cgiUserAgent()
+/* Return remote user agent (HTTP_USER_AGENT) or NULL if remote user agent is not known */
+{
+return getenv("HTTP_USER_AGENT");
+}
+
+enum browserType cgiClientBrowser(char **browserQualifier, enum osType *clientOs,
+                                  char **clientOsQualifier)
+/* Return client browser type determined from (HTTP_USER_AGENT)
+   Optionally requuest the additional info about the client */
+{
+// WARNING: The specifics of the HTTP_USER_AGENT vary widely.
+//          This has only been tested on a few cases.
+static enum browserType clientBrowser = btUnknown;
+static enum browserType clientOsType  = (enum browserType)osUnknown;
+static char *clientBrowserExtra       = NULL;
+static char *clientOsExtra            = NULL;
+
+if (clientBrowser == btUnknown)
+    {
+    char *userAgent = cgiUserAgent();
+    if (userAgent != NULL)
+        {
+        //warn(userAgent);  // Use this to investigate other cases
+        char *ptr=NULL;
+
+        // Determine the browser
+        if ((ptr = stringIn("Opera",userAgent)) != NULL) // Must be before IE
+            {
+            clientBrowser = btOpera;
+            }
+        else if ((ptr = stringIn("MSIE ",userAgent)) != NULL)
+            {
+            clientBrowser = btIE;
+            ptr += strlen("MSIE ");
+            clientBrowserExtra = cloneFirstWordByDelimiter(ptr,';');
+            }
+        else if ((ptr = stringIn("Firefox",userAgent)) != NULL)
+            {
+            clientBrowser = btFF;
+            ptr += strlen("(Firefox/");
+            clientBrowserExtra = cloneFirstWordByDelimiter(ptr,' ');
+            }
+        else if ((ptr = stringIn("Chrome",userAgent)) != NULL)  // Must be before Safari
+            {
+            clientBrowser = btChrome;
+            ptr += strlen("Chrome/");
+            clientBrowserExtra = cloneFirstWordByDelimiter(ptr,' ');
+            }
+        else if ((ptr = stringIn("Safari",userAgent)) != NULL)
+            {
+            clientBrowser = btSafari;
+            ptr += strlen("Safari/");
+            clientBrowserExtra = cloneFirstWordByDelimiter(ptr,' ');
+            }
+        else
+            {
+            clientBrowser = btOther;
+            }
+
+        // Determine the OS
+        if ((ptr = stringIn("Windows",userAgent)) != NULL)
+            {
+            clientOsType = (enum browserType)osWindows;
+            ptr += strlen("Windows ");
+            clientOsExtra = cloneFirstWordByDelimiter(ptr,';');
+            }
+        else if ((ptr = stringIn("Linux",userAgent)) != NULL)
+            {
+            clientOsType = (enum browserType)osLinux;
+            ptr += strlen("Linux ");
+            clientOsExtra = cloneFirstWordByDelimiter(ptr,';');
+            }
+        else if ((ptr = stringIn("Mac ",userAgent)) != NULL)
+            {
+            clientOsType = (enum browserType)osMac;
+            ptr += strlen("Mac ");
+            clientOsExtra = cloneFirstWordByDelimiter(ptr,';');
+            }
+        else
+            {
+            clientOsType = (enum browserType)osOther;
+            }
+        }
+    }
+if (browserQualifier != NULL)
+    {
+    if (clientBrowserExtra != NULL)
+        *browserQualifier = cloneString(clientBrowserExtra);
+    else
+        *browserQualifier = NULL;
+    }
+if (clientOs != NULL)
+    *clientOs = (enum osType)clientOsType;
+if (clientOsQualifier != NULL)
+    {
+    if (clientOsExtra != NULL)
+        *clientOsQualifier = cloneString(clientOsExtra);
+    else
+        *clientOsQualifier = NULL;
+    }
+
+return clientBrowser;
+}
+
+char *_cgiRawInput()
+/* For debugging get the unprocessed input. */
+{
+return inputString;
+}
+
+static void getQueryInputExt(boolean abortOnErr)
+/* Get query string from environment if they've used GET method. */
+{
+inputString = getenv("QUERY_STRING");
+if (inputString == NULL)
+    {
+    if (abortOnErr)
+	errAbort("No QUERY_STRING in environment.");
+    inputString = cloneString("");
+    return;
+    }
+inputString = cloneString(inputString);
+}
+
+static void getQueryInput()
+/* Get query string from environment if they've used GET method. */
+{
+getQueryInputExt(TRUE);
+}
+
+static void getPostInput()
+/* Get input from file if they've used POST method.
+ * Grab any GET QUERY_STRING input first. */
+{
+char *s;
+long i;
+int r;
+
+getQueryInputExt(FALSE);
+int getSize = strlen(inputString);
+
+s = getenv("CONTENT_LENGTH");
+if (s == NULL)
+    errAbort("No CONTENT_LENGTH in environment.");
+if (sscanf(s, "%lu", &inputSize) != 1)
+    errAbort("CONTENT_LENGTH isn't a number.");
+s = getenv("CONTENT_TYPE");
+if (s != NULL && startsWith("multipart/form-data", s))
+    {
+    /* use MIME parse on input stream instead, can handle large uploads */
+    /* inputString must not be NULL so it knows it was set */
+    return;
+    }
+int len = getSize + inputSize;
+if (getSize > 0)
+    ++len;
+char *temp = needMem((size_t)len+1);
+for (i=0; i<inputSize; ++i)
+    {
+    r = getc(stdin);
+    if (r == EOF)
+	errAbort("Short POST input.");
+    temp[i] = r;
+    }
+if (getSize > 0)
+  temp[i++] = '&';
+strncpy(temp+i, inputString, getSize);
+temp[len] = 0;
+freeMem(inputString);
+inputString = temp;
+}
+
+#define memmem(hay, haySize, needle, needleSize) \
+    memMatch(needle, needleSize, hay, haySize)
+
+#ifndef GBROWSE
+static void cgiParseMultipart(struct hash **retHash, struct cgiVar **retList)
+/* process a multipart form */
+{
+char h[1024];  /* hold mime header line */
+char *s = NULL, *ct = NULL;
+struct dyString *dy = newDyString(256);
+struct mimeBuf *mb = NULL;
+struct mimePart *mp = NULL;
+char **env = NULL;
+struct hash *hash = newHash(6);
+struct cgiVar *list = NULL, *el;
+extern char **environ;
+
+
+//debug
+//fprintf(stderr,"GALT: top of cgiParseMultipart()\n");
+//fflush(stderr);
+
+/* find the CONTENT_ environment strings, use to make Alternate Header string for MIME */
+for(env=environ; *env; env++)
+    if (startsWith("CONTENT_",*env))
+	{
+	//debug
+        //fprintf(stderr,"%s\n",*env);  //debug
+	safef(h,sizeof(h),"%s",*env);
+	s = strchr(h,'_');    /* change env syntax to MIME style header, from _= to -: */
+	if (!s)
+	    errAbort("expecting '_' parsing env var %s for MIME alt header", *env);
+	*s = '-';
+	s = strchr(h,'=');
+	if (!s)
+	    errAbort("expecting '=' parsing env var %s for MIME alt header", *env);
+	*s = ':';
+	dyStringPrintf(dy,"%s\r\n",h);
+	}
+dyStringAppend(dy,"\r\n");  /* blank line at end means end of headers */
+
+//debug
+//fprintf(stderr,"Alternate Header Text:\n%s",dy->string);
+//fflush(stderr);
+mb = initMimeBuf(STDIN_FILENO);
+//debug
+//fprintf(stderr,"got past initMimeBuf(STDIN_FILENO)\n");
+//fflush(stderr);
+mp = parseMultiParts(mb, cloneString(dy->string)); /* The Alternate Header will get freed */
+freeDyString(&dy);
+if(!mp->multi) /* expecting multipart child parts */
+    errAbort("Malformatted multipart-form.");
+
+//debug
+//fprintf(stderr,"GALT: Wow got past parse of MIME!\n");
+//fflush(stderr);
+
+ct = hashFindVal(mp->hdr,"content-type");
+//debug
+//fprintf(stderr,"GALT: main content-type: %s\n",ct);
+//fflush(stderr);
+if (!startsWith("multipart/form-data",ct))
+    errAbort("main content-type expected starts with [multipart/form-data], found [%s]",ct);
+
+for(mp=mp->multi;mp;mp=mp->next)
+    {
+    char *cd = NULL, *cdMain = NULL, *cdName = NULL, *cdFileName = NULL, *ct = NULL;
+    cd = hashFindVal(mp->hdr,"content-disposition");
+    ct = hashFindVal(mp->hdr,"content-type");
+    //debug
+    //fprintf(stderr,"GALT: content-disposition: %s\n",cd);
+    //fprintf(stderr,"GALT: content-type: %s\n",ct);
+    //fflush(stderr);
+    cdMain=getMimeHeaderMainVal(cd);
+    cdName=getMimeHeaderFieldVal(cd,"name");
+    cdFileName=getMimeHeaderFieldVal(cd,"filename");
+    //debug
+    //fprintf(stderr,"cgiParseMultipart: main:[%s], name:[%s], filename:[%s]\n",cdMain,cdName,cdFileName);
+    //fflush(stderr);
+    if (!sameString(cdMain,"form-data"))
+	errAbort("main content-type expected [form-data], found [%s]",cdMain);
+
+    //debug
+    //fprintf(stderr,"GALT: mp->size[%llu], mp->binary=[%d], mp->fileName=[%s], mp=>data:[%s]\n",
+        //(unsigned long long) mp->size, mp->binary, mp->fileName,
+        //mp->binary && mp->data ? "<binary data not safe to print>" : mp->data);
+    //fflush(stderr);
+
+    /* filename if there is one */
+    /* Internet Explorer on Windows is sending full path names, strip
+     * directory name from those.  Using \ and / and : as potential
+     * path separator characters, e.g.:
+     *	 C:\Documents and Settings\tmp\file.txt.gz
+     */
+    if (cdFileName)
+	{
+	char *lastPathSep = strrchr(cdFileName, (int) '\\');
+	if (!lastPathSep)
+		lastPathSep = strrchr(cdFileName, (int) '/');
+	if (!lastPathSep)
+		lastPathSep = strrchr(cdFileName, (int) ':');
+	char varNameFilename[256];
+	safef(varNameFilename, sizeof(varNameFilename), "%s__filename", cdName);
+	AllocVar(el);
+	if (lastPathSep)
+	    el->val = cloneString(lastPathSep+1);
+	else
+	    el->val = cloneString(cdFileName);
+        slAddHead(&list, el);
+        hashAddSaveName(hash, varNameFilename, el, &el->name);
+        }
+
+    if (mp->data)
+        {
+        if (mp->binary)
+	    {
+	    char varNameBinary[256];
+	    char addrSizeBuf[40];
+	    safef(varNameBinary,sizeof(varNameBinary),"%s__binary",cdName);
+            safef(addrSizeBuf,sizeof(addrSizeBuf),"%lu %llu",
+		(unsigned long)mp->data,
+		(unsigned long long)mp->size);
+	    AllocVar(el);
+	    el->val = cloneString(addrSizeBuf);
+	    slAddHead(&list, el);
+	    hashAddSaveName(hash, varNameBinary, el, &el->name);
+	    }
+	else  /* normal variable, not too big, does not contain zeros */
+	    {
+	    AllocVar(el);
+	    el->val = mp->data;
+	    slAddHead(&list, el);
+	    hashAddSaveName(hash, cdName, el, &el->name);
+	    }
+        }
+    else if (mp->fileName)
+	{
+	char varNameData[256];
+	safef(varNameData, sizeof(varNameData), "%s__data", cdName);
+	AllocVar(el);
+        el->val = mp->fileName;
+        slAddHead(&list, el);
+        hashAddSaveName(hash, varNameData, el, &el->name);
+        //debug
+        //fprintf(stderr,"GALT special: saved varNameData:[%s], mp=>fileName:[%s]\n",el->name,el->val);
+        //fflush(stderr);
+        }
+    else if (mp->multi)
+	{
+	warn("unexpected nested MIME structures");
+	}
+    else
+	{
+	errAbort("mp-> type not data,fileName, or multi - unexpected MIME structure");
+	}
+
+    freez(&cdMain);
+    freez(&cdName);
+    freez(&cdFileName);
+    }
+
+slReverse(&list);
+*retList = list;
+*retHash = hash;
+}
+#endif /* GBROWSE */
+
+
+
+static void parseCookies(struct hash **retHash, struct cgiVar **retList)
+/* parses any cookies and puts them into the given hash and list */
+{
+char* str;
+char *namePt, *dataPt, *nextNamePt;
+struct hash *hash;
+struct cgiVar *list = NULL, *el;
+
+/* don't build the hash table again */
+if(haveCookiesHash == TRUE)
+	return;
+
+str = cloneString(getenv("HTTP_COOKIE"));
+if(str == NULL) /* don't have a cookie */
+	return;
+
+hash = newHash(6);
+
+namePt = str;
+while (isNotEmpty(namePt))
+    {
+    dataPt = strchr(namePt, '=');
+    if (dataPt == NULL)
+	errAbort("Mangled Cookie input string: no = in '%s' (offset %d in complete cookie string: '%s')",
+		 namePt, (int)(namePt - str), getenv("HTTP_COOKIE"));
+    *dataPt++ = 0;
+    nextNamePt = strchr(dataPt, ';');
+    if (nextNamePt != NULL)
+	{
+         *nextNamePt++ = 0;
+	 if (*nextNamePt == ' ')
+	     nextNamePt++;
+	}
+    cgiDecode(dataPt,dataPt,strlen(dataPt));
+    AllocVar(el);
+    el->val = dataPt;
+    slAddHead(&list, el);
+    hashAddSaveName(hash, namePt, el, &el->name);
+    namePt = nextNamePt;
+    }
+
+haveCookiesHash = TRUE;
+
+slReverse(&list);
+*retList = list;
+*retHash = hash;
+}
+
+char *findCookieData(char *varName)
+/* Get the string associated with varName from the cookie string. */
+{
+struct hashEl *hel;
+char *firstResult;
+
+/* make sure that the cookie hash table has been created */
+parseCookies(&cookieHash, &cookieList);
+if (cookieHash == NULL)
+    return NULL;
+/* Watch out for multiple cookies with the same name (hel is a list) --
+ * warn if we find them. */
+hel = hashLookup(cookieHash, varName);
+if (hel == NULL)
+    return NULL;
+else
+    firstResult = ((struct cgiVar *)hel->val)->val;
+hel = hel->next;
+while (hel != NULL)
+    {
+    char *val = ((struct cgiVar *)(hel->val))->val;
+    if (sameString(varName, hel->name) && !sameString(firstResult, val))
+	{
+	/* This is too early to call warn -- it will mess up html output. */
+	fprintf(stderr,
+		"findCookieData: Duplicate cookie value from IP=%s: "
+		"%s has both %s and %s\n",
+		cgiRemoteAddr(),
+		varName, firstResult, val);
+	}
+    hel = hel->next;
+    }
+return firstResult;
+}
+
+static char *cgiInputSource(char *s)
+/* For NULL sources make a guess as to real source. */
+{
+char *qs;
+if (s != NULL)
+    return s;
+qs = getenv("QUERY_STRING");
+if (qs == NULL)
+    return "POST";
+char *cl = getenv("CONTENT_LENGTH");
+if (cl != NULL && atoi(cl) > 0)
+    return "POST";
+return "QUERY";
+}
+
+static void _cgiFindInput(char *method)
+/* Get raw CGI input into inputString.  Method can be "POST", "QUERY", "GET" or NULL
+ * for unknown. */
+{
+if (inputString == NULL)
+    {
+    method = cgiInputSource(method);
+    if (sameWord(method, "POST"))
+        getPostInput();
+    else if (sameWord(method, "QUERY") || sameWord(method, "GET"))
+        getQueryInput();
+    else
+        errAbort("Unknown form method");
+    }
+}
+
+struct cgiDictionary *cgiDictionaryFromEncodedString(char *encodedString)
+/* Giving a this=that&this=that string,  return cgiDictionary parsed out from it. 
+ * This does *not* destroy input like the lower level cgiParse functions do. */
+{
+struct cgiDictionary *d;
+AllocVar(d);
+d->stringData = cloneString(encodedString);
+cgiParseInputAbort(d->stringData, &d->hash, &d->list);
+return d;
+}
+
+void cgiDictionaryFree(struct cgiDictionary **pD)
+/* Free up resources associated with dictionary. */
+{
+struct cgiDictionary *d = *pD;
+if (d != NULL)
+    {
+    slFreeList(&d->list);
+    hashFree(&d->hash);
+    freez(&d->stringData);
+    freez(pD);
+    }
+}
+
+void cgiDictionaryFreeList(struct cgiDictionary **pList)
+/* Free up a whole list of cgiDictionaries */
+{
+struct cgiDictionary *el, *next;
+
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    cgiDictionaryFree(&el);
+    }
+*pList = NULL;
+}
+
+
+void cgiParseInputAbort(char *input, struct hash **retHash,
+        struct cgiVar **retList)
+/* Parse cgi-style input into a hash table and list.  This will alter
+ * the input data.  The hash table will contain references back
+ * into input, so please don't free input until you're done with
+ * the hash. Prints message aborts if there's an error.
+ * To clean up - slFreeList, hashFree, and only then free input. */
+{
+char *namePt, *dataPt, *nextNamePt;
+struct hash *hash = *retHash;
+struct cgiVar *list = *retList, *el;
+
+if (!hash)
+  hash = newHash(6);
+slReverse(&list);
+
+namePt = input;
+while (namePt != NULL && namePt[0] != 0)
+    {
+    dataPt = strchr(namePt, '=');
+    if (dataPt == NULL)
+	{
+	errAbort("Mangled CGI input string %s", namePt);
+	}
+    *dataPt++ = 0;
+    nextNamePt = strchr(dataPt, '&');
+    if (nextNamePt == NULL)
+	nextNamePt = strchr(dataPt, ';');	/* Accomodate DAS. */
+    if (nextNamePt != NULL)
+         *nextNamePt++ = 0;
+    cgiDecode(namePt,namePt,strlen(namePt));	/* for unusual ct names */
+    cgiDecode(dataPt,dataPt,strlen(dataPt));
+    AllocVar(el);
+    el->val = dataPt;
+    slAddHead(&list, el);
+    hashAddSaveName(hash, namePt, el, &el->name);
+    namePt = nextNamePt;
+    }
+slReverse(&list);
+*retList = list;
+*retHash = hash;
+}
+
+static jmp_buf cgiParseRecover;
+
+static void cgiParseAbort()
+/* Abort cgi parsing. */
+{
+longjmp(cgiParseRecover, -1);
+}
+
+boolean cgiParseInput(char *input, struct hash **retHash,
+        struct cgiVar **retList)
+/* Parse cgi-style input into a hash table and list.  This will alter
+ * the input data.  The hash table will contain references back
+ * into input, so please don't free input until you're done with
+ * the hash. Prints message and returns FALSE if there's an error.
+ * To clean up - slFreeList, hashFree, and only then free input. */
+{
+boolean ok = TRUE;
+int status = setjmp(cgiParseRecover);
+if (status == 0)    /* Always true except after long jump. */
+    {
+    pushAbortHandler(cgiParseAbort);
+    cgiParseInputAbort(input, retHash, retList);
+    }
+else    /* They long jumped here because of an error. */
+    {
+    ok = FALSE;
+    }
+popAbortHandler();
+return ok;
+}
+
+char *cgiStringNewValForVar(char *cgiIn, char *varName, char *newVal)
+/* Return a cgi-encoded string with newVal in place of what was oldVal.
+ * It is an error for var not to exist.   Do a freeMem of this string
+ * when you are through. */
+{
+struct dyString *dy = dyStringNew(strlen(cgiIn) + strlen(newVal));
+struct cgiParsedVars *cpv = cgiParsedVarsNew(cgiIn);
+struct cgiVar *var;
+boolean doneSub = FALSE;
+for (var = cpv->list; var != NULL; var = var->next)
+    {
+    char *val = var->val;
+    if (sameString(var->name, varName))
+	{
+        val = newVal;
+	doneSub = TRUE;
+	}
+    cgiEncodeIntoDy(var->name, val, dy);
+    }
+if (!doneSub)
+    errAbort("Couldn't find %s in %s", varName, cgiIn);
+cgiParsedVarsFree(&cpv);
+return dyStringCannibalize(&dy);
+}
+
+
+static boolean dumpStackOnSignal = FALSE;  // should a stack dump be generated?
+
+static void catchSignal(int sigNum)
+/* handler for various terminal signals for logging purposes */
+{
+char *sig = NULL;
+switch (sigNum)
+    {
+    case SIGTERM:  // after timing out for not producing any stdout or stderr output for too long,
+		   //  apache gives you 3 seconds to clean up and exit or it then sends SIGKILL.
+      sig = "SIGTERM";
+      break;
+    case SIGHUP:   // apache sends this when it is doing a graceful restart or a log rotate.
+      sig = "SIGHUP";
+      break;
+    case SIGABRT:
+      sig = "SIGABRT";
+      break;
+    case SIGSEGV:
+      sig = "SIGSEGV";
+      break;
+    case SIGFPE:
+      sig = "SIGFPE";
+      break;
+    case SIGBUS:
+      sig = "SIGBUS";
+      break;
+    }
+    logCgiToStderr();
+
+    // apache closes STDERR on the CGI before it sends the SIGTERM and SIGKILL signals
+    //  which means that stderr output after that point will not be visible in error_log.
+    fprintf(stderr, "Received signal %s\n", sig);
+    if (dumpStackOnSignal)
+        dumpStack("Stack for signal %s\n", sig);
+
+if (sigNum == SIGTERM || sigNum == SIGHUP) 
+    exit(1);   // so that atexit cleanup get called
+
+raise(SIGKILL);
+}
+
+void initSigHandlers(boolean dumpStack)
+/* set handler for various terminal signals for logging purposes.
+ * if dumpStack is TRUE, attempt to dump the stack. */
+{
+if (cgiIsOnWeb())
+    {
+    // SIGKILL is not trappable or ignorable
+    signal(SIGTERM, catchSignal);
+    signal(SIGHUP, catchSignal);
+    signal(SIGABRT, catchSignal);
+    signal(SIGSEGV, catchSignal);
+    signal(SIGFPE, catchSignal);
+    signal(SIGBUS, catchSignal);
+    dumpStackOnSignal = dumpStack;
+    }
+}
+
+
+static void initCgiInput()
+/* Initialize CGI input stuff.  After this CGI vars are
+ * stored in an internal hash/list regardless of how they
+ * were passed to the program. */
+{
+char* s;
+
+if (inputString != NULL)
+    return;
+
+_cgiFindInput(NULL);
+
+#ifndef GBROWSE
+/* check to see if the input is a multipart form */
+s = getenv("CONTENT_TYPE");
+if (s != NULL && startsWith("multipart/form-data", s))
+    {
+    cgiParseMultipart(&inputHash, &inputList);
+    }
+#endif /* GBROWSE */
+
+cgiParseInputAbort(inputString, &inputHash, &inputList);
+
+/* now parse the cookies */
+parseCookies(&cookieHash, &cookieList);
+
+/* Set enviroment variables CGIs to enable sql tracing and/or profiling */
+s = cgiOptionalString("JKSQL_TRACE");
+if (s != NULL)
+    envUpdate("JKSQL_TRACE", s);
+s = cgiOptionalString("JKSQL_PROF");
+if (s != NULL)
+    envUpdate("JKSQL_PROF", s);
+
+}
+
+struct cgiVar *cgiVarList()
+/* return the list of cgiVar's */
+{
+initCgiInput();
+return inputList;
+}
+
+static char *findVarData(char *varName)
+/* Get the string associated with varName from the query string. */
+{
+struct cgiVar *var;
+
+initCgiInput();
+if ((var = hashFindVal(inputHash, varName)) == NULL)
+    return NULL;
+return var->val;
+}
+
+void cgiBadVar(char *varName)
+/* Complain about a variable that's not there. */
+{
+if (varName == NULL) varName = "";
+errAbort("Sorry, didn't find CGI input variable '%s'", varName);
+}
+
+static char *mustFindVarData(char *varName)
+/* Find variable and associated data or die trying. */
+{
+char *res = findVarData(varName);
+if (res == NULL)
+    cgiBadVar(varName);
+return res;
+}
+
+char *javaScriptLiteralEncode(char *inString)
+/* Use backslash escaping on newline
+ * and quote chars, backslash and others.
+ * Intended that the encoded string will be
+ * put between quotes at a higher level and
+ * then interpreted by Javascript. */
+{
+char c;
+int outSize = 0;
+char *outString, *out, *in;
+
+if (inString == NULL)
+    return(cloneString(""));
+
+/* Count up how long it will be */
+in = inString;
+while ((c = *in++) != 0)
+    {
+    if (c == '\''
+     || c == '\"'
+     || c == '&'
+     || c == '\\'
+     || c == '\n'
+     || c == '\r'
+     || c == '\t'
+     || c == '\b'
+     || c == '\f'
+	)
+        outSize += 2;
+    else
+        outSize += 1;
+    }
+outString = needMem(outSize+1);
+
+/* Encode string */
+in = inString;
+out = outString;
+while ((c = *in++) != 0)
+    {
+    if (c == '\''
+     || c == '\"'
+     || c == '&'
+     || c == '\\'
+     || c == '\n'
+     || c == '\r'
+     || c == '\t'
+     || c == '\b'
+     || c == '\f'
+	)
+        *out++ = '\\';
+    *out++ = c;
+    }
+*out++ = 0;
+return outString;
+
+}
+
+
+/* NOTE: Where in the URL to use which of these functions:
+ *
+ * Parts of a URL:
+ *   protocol://user:password@server.com:port/path/filename?var1=val1&var2=val2
+ *
+ * Note that a space should only be encoded to a plus and decoded from a plus
+ * when dealing with http URLs in the query part of the string,
+ * which is the part after the ? above.
+ * It should not be used in the rest of the URL.  
+ * So in the query string part of a URL, do use cgiEncode/cgiDecode. 
+ * And in the rest of the URL, use cgiEncodeFUll/cgiDecodeFull 
+ * which do not code space as plus.
+ * Since FTP does not use URLs with query parameters, use the Full version.
+ */
+
+void cgiDecode(char *in, char *out, int inLength)
+/* Decode from cgi pluses-for-spaces format to normal.
+ * Out will be a little shorter than in typically, and
+ * can be the same buffer. */
+{
+char c;
+int i;
+for (i=0; i<inLength;++i)
+    {
+    c = *in++;
+    if (c == '+')
+	*out++ = ' ';
+    else if (c == '%')
+	{
+	int code;
+        if (sscanf(in, "%2x", &code) != 1)
+	    code = '?';
+	in += 2;
+	i += 2;
+	*out++ = code;
+	}
+    else
+	*out++ = c;
+    }
+*out++ = 0;
+}
+
+void cgiDecodeFull(char *in, char *out, int inLength)
+/* Out will be a cgi-decoded version of in (no space from plus!).
+ * Out will be a little shorter than in typically, and
+ * can be the same buffer. */
+{
+char c;
+int i;
+for (i=0; i<inLength;++i)
+    {
+    c = *in++;
+    if (c == '%')
+	{
+	int code;
+        if (sscanf(in, "%2x", &code) != 1)
+	    code = '?';
+	in += 2;
+	i += 2;
+	*out++ = code;
+	}
+    else
+	*out++ = c;
+    }
+*out++ = 0;
+}
+
+char *cgiEncode(char *inString)
+/* Return a cgi-encoded version of inString.
+ * Alphanumerics kept as is, space translated to plus,
+ * and all other characters translated to %hexVal. */
+{
+char c;
+int outSize = 0;
+char *outString, *out, *in;
+
+if (inString == NULL)
+    return(cloneString(""));
+
+/* Count up how long it will be */
+in = inString;
+while ((c = *in++) != 0)
+    {
+    if (isalnum(c) || c == ' ' || c == '.' || c == '_')
+        outSize += 1;
+    else
+        outSize += 3;
+    }
+outString = needMem(outSize+1);
+
+/* Encode string */
+in = inString;
+out = outString;
+while ((c = *in++) != 0)
+    {
+    if (isalnum(c) || c == '.' || c == '_')
+        *out++ = c;
+    else if (c == ' ')
+        *out++ = '+';
+    else
+        {
+        unsigned char uc = c;
+        char buf[4];
+        *out++ = '%';
+        safef(buf, sizeof(buf), "%02X", uc);
+        *out++ = buf[0];
+        *out++ = buf[1];
+        }
+    }
+*out++ = 0;
+return outString;
+}
+
+char *cgiEncodeFull(char *inString)
+/* Return a cgi-encoded version of inString (no + for space!).
+ * Alphanumerics/./_ kept as is and all other characters translated to
+ * %hexVal. */
+{
+char c;
+int outSize = 0;
+char *outString, *out, *in;
+
+if (inString == NULL)
+    return(cloneString(""));
+
+/* Count up how long it will be */
+in = inString;
+while ((c = *in++) != 0)
+    {
+    if (isalnum(c) || c == '.' || c == '_')
+        outSize += 1;
+    else
+        outSize += 3;
+    }
+outString = needMem(outSize+1);
+
+/* Encode string */
+in = inString;
+out = outString;
+while ((c = *in++) != 0)
+    {
+    if (isalnum(c) || c == '.' || c == '_')
+        *out++ = c;
+    else
+        {
+        unsigned char uc = c;
+        char buf[4];
+        *out++ = '%';
+        safef(buf, sizeof(buf), "%02X", uc);
+        *out++ = buf[0];
+        *out++ = buf[1];
+        }
+    }
+*out++ = 0;
+return outString;
+}
+
+char *cgiOptionalString(char *varName)
+/* Return value of string if it exists in cgi environment, else NULL */
+{
+return findVarData(varName);
+}
+
+
+char *cgiString(char *varName)
+/* Return string value of cgi variable. */
+{
+return mustFindVarData(varName);
+}
+
+char *cgiUsualString(char *varName, char *usual)
+/* Return value of string if it exists in cgi environment.
+ * Otherwise return 'usual' */
+{
+char *pt;
+pt = findVarData(varName);
+if (pt == NULL)
+    pt = usual;
+return pt;
+}
+
+struct slName *cgiStringList(char *varName)
+/* Find list of cgi variables with given name.  This
+ * may be empty.  Free result with slFreeList(). */
+{
+struct hashEl *hel;
+struct slName *stringList = NULL, *string;
+
+initCgiInput();
+for (hel = hashLookup(inputHash, varName); hel != NULL; hel = hel->next)
+    {
+    if (sameString(hel->name, varName))
+        {
+	struct cgiVar *var = hel->val;
+	string = newSlName(var->val);
+	slAddHead(&stringList, string);
+	}
+    }
+return stringList;
+}
+
+
+int cgiInt(char *varName)
+/* Return int value of cgi variable. */
+{
+char *data;
+char c;
+
+data = mustFindVarData(varName);
+data = skipLeadingSpaces(data);
+c = data[0];
+if (!(isdigit(c) || (c == '-' && isdigit(data[1]))))
+     errAbort("Expecting number in %s, got \"%s\"\n", varName, data);
+return atoi(data);
+}
+
+int cgiIntExp(char *varName)
+/* Evaluate an integer expression in varName and
+ * return value. */
+{
+return intExp(cgiString(varName));
+}
+
+int cgiOptionalInt(char *varName, int defaultVal)
+/* This returns integer value of varName if it exists in cgi environment
+ * and it's not just the empty string otherwise it returns defaultVal. */
+{
+char *s = cgiOptionalString(varName);
+s = skipLeadingSpaces(s);
+if (isEmpty(s))
+    return defaultVal;
+return cgiInt(varName);
+}
+
+double cgiDouble(char *varName)
+/* Returns double value. */
+{
+char *data;
+double x;
+
+data = mustFindVarData(varName);
+if (sscanf(data, "%lf", &x)<1)
+     errAbort("Expecting real number in %s, got \"%s\"\n", varName, data);
+return x;
+}
+
+double cgiOptionalDouble(char *varName, double defaultVal)
+/* Returns double value. */
+{
+if (!cgiVarExists(varName))
+    return defaultVal;
+return cgiDouble(varName);
+}
+
+boolean cgiVarExists(char *varName)
+/* Returns TRUE if the variable was passed in. */
+{
+initCgiInput();
+return hashLookup(inputHash, varName) != NULL;
+}
+
+boolean cgiBoolean(char *varName)
+{
+return cgiVarExists(varName);
+}
+
+int cgiOneChoice(char *varName, struct cgiChoice *choices, int choiceSize)
+/* Returns value associated with string variable in choice table. */
+{
+char *key = cgiString(varName);
+int i;
+int val = -1;
+
+for (i=0; i<choiceSize; ++i)
+    {
+    if (sameWord(choices[i].name, key))
+        {
+        val =  choices[i].value;
+        return val;
+        }
+    }
+errAbort("Unknown key %s for variable %s\n", key, varName);
+return val;
+}
+
+void cgiMakeSubmitButton()
+/* Make 'submit' type button. */
+{
+cgiMakeButton("Submit", "Submit");
+}
+
+void cgiMakeResetButton()
+/* Make 'reset' type button. */
+{
+printf("<INPUT TYPE=RESET NAME=\"Reset\" VALUE=\" Reset \">");
+}
+
+void cgiMakeClearButton(char *form, char *field)
+/* Make button to clear a text field. */
+{
+char javascript[1024];
+
+safef(javascript, sizeof(javascript),
+    "document.%s.%s.value = ''; document.%s.submit();", form, field, form);
+cgiMakeOnClickButton(javascript, " Clear  ");
+}
+
+void cgiMakeButtonWithMsg(char *name, char *value, char *msg)
+/* Make 'submit' type button. Display msg on mouseover, if present*/
+{
+printf("<INPUT TYPE=SUBMIT NAME=\"%s\" VALUE=\"%s\" %s%s%s>",
+        name, value,
+        (msg ? " TITLE=\"" : ""), (msg ? msg : ""), (msg ? "\"" : "" ));
+}
+
+void cgiMakeButtonWithOnClick(char *name, char *value, char *msg, char *onClick)
+/* Make 'submit' type button, with onclick javascript */
+{
+printf("<input type=\"submit\" name=\"%s\" value=\"%s\" onclick=\"%s\" %s%s%s>",
+        name, value, onClick,
+        (msg ? " TITLE=\"" : ""), (msg ? msg : ""), (msg ? "\"" : "" ));
+}
+
+void cgiMakeButton(char *name, char *value)
+/* Make 'submit' type button */
+{
+cgiMakeButtonWithMsg(name, value, NULL);
+}
+
+void cgiMakeOnClickButton(char *command, char *value)
+/* Make 'push' type button with client side onClick (java)script. */
+{
+printf("<INPUT TYPE=\"button\" VALUE=\"%s\" onClick=\"%s\">", value, command);
+}
+
+void cgiMakeOnClickSubmitButton(char *command, char *name, char *value)
+/* Make submit button with both variable name and value with client side
+ * onClick (java)script. */
+{
+printf("<INPUT TYPE=SUBMIT NAME=\"%s\" VALUE=\"%s\" onClick=\"%s\">",
+       name, value, command);
+}
+
+void cgiMakeOptionalButton(char *name, char *value, boolean disabled)
+/* Make 'submit' type button that can be disabled. */
+{
+printf("<INPUT TYPE=SUBMIT NAME=\"%s\" VALUE=\"%s\"", name, value);
+if (disabled)
+    printf(" DISABLED");
+printf(">");
+}
+
+void cgiMakeFileEntry(char *name)
+/* Make file entry box/browser */
+{
+    printf("<INPUT TYPE=FILE NAME=\"%s\">", name);
+}
+
+void cgiSimpleTableStart()
+/* start HTML table  -- no customization. Leaves room
+ * for a fancier implementation */
+{
+printf("<TABLE>\n");
+}
+
+void cgiTableEnd()
+/* end HTML table */
+{
+printf("</TABLE>\n");
+}
+
+void cgiSimpleTableRowStart()
+/* Start table row */
+{
+printf("<TR>\n");
+}
+
+void cgiTableRowEnd()
+/* End table row */
+{
+printf("</TR>\n");
+}
+
+void cgiSimpleTableFieldStart()
+/* Start table field */
+{
+printf("<TD>");
+}
+
+void cgiTableFieldStartAlignRight()
+/* Start table field and align right*/
+{
+printf("<TD ALIGN = RIGHT>");
+}
+
+void cgiTableFieldEnd()
+/* End table field */
+{
+printf("</TD>\n");
+}
+
+void cgiTableField(char *text)
+/* Make table field entry */
+{
+printf("<TD> %s </TD>\n", text);
+}
+
+void cgiTableFieldWithMsg(char *text, char *msg)
+/* Make table field entry with mouseover */
+{
+printf("<TD %s%s%s> %s </TD>\n",
+        (msg ? " TITLE=\"" : ""), (msg ? msg : ""), (msg ? "\"" : "" ),
+        text);
+}
+
+void cgiParagraph(char *text)
+/* Make text paragraph */
+{
+printf("<P> %s\n", text);
+}
+
+void cgiMakeRadioButton(char *name, char *value, boolean checked)
+/* Make radio type button.  A group of radio buttons should have the
+ * same name but different values.   The default selection should be
+ * sent with checked on. */
+{
+printf("<INPUT TYPE=RADIO NAME=\"%s\" VALUE=\"%s\" %s>", name, value,
+   (checked ? "CHECKED" : ""));
+}
+
+void cgiMakeOnClickRadioButton(char *name, char *value, boolean checked,
+                                        char *command)
+/* Make radio type button with onClick command.
+ *  A group of radio buttons should have the
+ * same name but different values.   The default selection should be
+ * sent with checked on. */
+{
+printf("<INPUT TYPE=RADIO NAME=\"%s\" VALUE=\"%s\" %s %s>",
+        name, value, command, (checked ? "CHECKED" : ""));
+}
+
+char *cgiBooleanShadowPrefix()
+/* Prefix for shadow variable set with boolean variables. */
+{
+return "boolshad.";
+}
+#define BOOLSHAD_EXTRA "class='cbShadow'"
+
+boolean cgiBooleanDefined(char *name)
+/* Return TRUE if boolean variable is defined (by
+ * checking for shadow. */
+{
+char buf[256];
+safef(buf, sizeof(buf), "%s%s", cgiBooleanShadowPrefix(), name);
+return cgiVarExists(buf);
+}
+
+static void cgiMakeCheckBox2Bool(char *name, boolean checked, boolean enabled,
+                                 char *id, char *moreHtml)
+/* Make check box - designed to be called by the variously overloaded
+ * cgiMakeCheckBox functions, and should NOT be called directly.
+ * moreHtml: optional additional html like javascript call or mouseover msg (may be NULL)
+ * id: button id (may be NULL)
+ * Also make a shadow hidden variable and support 2 boolean states:
+ *    checked/unchecked and enabled/disabled. */
+{
+char buf[256], idBuf[256];
+
+if(id)
+    safef(idBuf, sizeof(idBuf), " id=\"%s\"", id);
+else
+    idBuf[0] = 0;
+
+printf("<INPUT TYPE=CHECKBOX NAME=\"%s\"%s VALUE=on %s%s%s>", name, idBuf,
+        (moreHtml ? moreHtml : ""),
+        (checked ? " CHECKED" : ""),
+        (enabled ? "" : " DISABLED"));
+safef(buf, sizeof(buf), "%s%s", cgiBooleanShadowPrefix(), name);
+cgiMakeHiddenVarWithExtra(buf, ( enabled ? "0" : (checked ? "-1" : "-2")),BOOLSHAD_EXTRA);
+}
+
+void cgiMakeCheckBoxUtil(char *name, boolean checked, char *msg, char *id)
+/* Make check box - can be called directly, though it was originally meant
+ * as the common code for all lower level checkbox routines.
+ * However, it's util functionality has been taken over by
+ * cgiMakeCheckBoxWithIdAndOptionalHtml() */
+{
+char buf[256];
+
+if (msg)
+    safef(buf, sizeof(buf), "TITLE=\"%s\"", msg);
+else
+    buf[0] = 0;
+
+cgiMakeCheckBox2Bool(name, checked, TRUE, id, buf);
+}
+
+void cgiMakeCheckBoxWithMsg(char *name, boolean checked, char *msg)
+{
+char buf[512];
+safef(buf, sizeof(buf), "title='%s'", msg);
+cgiMakeCheckBox2Bool(name, checked, TRUE, NULL, buf);
+}
+
+void cgiMakeCheckBoxWithId(char *name, boolean checked, char *id)
+/* Make check box, which includes an ID. */
+{
+cgiMakeCheckBox2Bool(name, checked, TRUE, id, NULL);
+}
+
+void cgiMakeCheckBox(char *name, boolean checked)
+/* Make check box. */
+{
+cgiMakeCheckBox2Bool(name, checked, TRUE, NULL, NULL);
+}
+
+void cgiMakeCheckBoxJS(char *name, boolean checked, char *javascript)
+/* Make check box with javascript. */
+{
+cgiMakeCheckBox2Bool(name,checked,TRUE,NULL,javascript);
+}
+
+void cgiMakeCheckBoxIdAndJS(char *name, boolean checked, char *id, char *javascript)
+/* Make check box with ID and javascript. */
+{
+cgiMakeCheckBox2Bool(name,checked,TRUE,id,javascript);
+}
+
+void cgiMakeCheckBoxFourWay(char *name, boolean checked, boolean enabled, char *id,
+                            char *classes, char *moreHtml)
+/* Make check box - with fourWay functionality (checked/unchecked by enabled/disabled)
+ * Also makes a shadow hidden variable that supports the 2 boolean states. */
+{
+char shadName[256];
+
+printf("<INPUT TYPE=CHECKBOX NAME='%s'", name);
+if (id)
+    printf(" id='%s'", id);
+if (checked)
+    printf(" CHECKED");
+if (!enabled)
+    {
+    if (findWordByDelimiter("disabled",' ', classes) == NULL) // fauxDisabled ?
+        printf(" DISABLED");
+    }
+if (classes)
+    printf(" class='%s'",classes);
+if (moreHtml)
+    printf(" %s",moreHtml);
+printf(">");
+
+// The hidden var needs to hold the 4way state
+safef(shadName, sizeof(shadName), "%s%s", cgiBooleanShadowPrefix(), name);
+cgiMakeHiddenVarWithExtra(shadName, ( enabled ? "0" : (checked ? "-1" : "-2")),BOOLSHAD_EXTRA);
+}
+
+
+void cgiMakeHiddenBoolean(char *name, boolean on)
+/* Make hidden boolean variable. Also make a shadow hidden variable so we
+ * can distinguish between variable not present and
+ * variable set to false. */
+{
+char buf[256];
+cgiMakeHiddenVar(name, on ? "on" : "off");
+safef(buf, sizeof(buf), "%s%s", cgiBooleanShadowPrefix(), name);
+cgiMakeHiddenVarWithExtra(buf, "1",BOOLSHAD_EXTRA);
+}
+
+void cgiMakeTextArea(char *varName, char *initialVal, int rowCount, int columnCount)
+/* Make a text area with area rowCount X columnCount and with text: intialVal */
+{
+cgiMakeTextAreaDisableable(varName, initialVal, rowCount, columnCount, FALSE);
+}
+
+void cgiMakeTextAreaDisableable(char *varName, char *initialVal, int rowCount, int columnCount, boolean disabled)
+/* Make a text area that can be disabled. The rea has rowCount X
+ * columnCount and with text: intialVal */
+{
+printf("<TEXTAREA NAME=\"%s\" ROWS=%d COLS=%d %s>%s</TEXTAREA>", varName,
+       rowCount, columnCount, disabled ? "DISABLED" : "",
+       (initialVal != NULL ? initialVal : ""));
+}
+
+void cgiMakeOnKeypressTextVar(char *varName, char *initialVal, int charSize,
+			      char *script)
+/* Make a text control filled with initial value, with a (java)script
+ * to execute every time a key is pressed.  If charSize is zero it's
+ * calculated from initialVal size. */
+{
+if (initialVal == NULL)
+    initialVal = "";
+if (charSize == 0) charSize = strlen(initialVal);
+if (charSize == 0) charSize = 8;
+
+printf("<INPUT TYPE=TEXT NAME=\"%s\" SIZE=%d VALUE=\"%s\"", varName,
+        charSize, initialVal);
+if (isNotEmpty(script))
+    printf(" onkeypress=\"%s\"", script);
+printf(">\n");
+}
+
+void cgiMakeTextVar(char *varName, char *initialVal, int charSize)
+/* Make a text control filled with initial value.  If charSize
+ * is zero it's calculated from initialVal size. */
+{
+cgiMakeOnKeypressTextVar(varName, initialVal, charSize, NULL);
+}
+
+void cgiMakeTextVarWithExtraHtml(char *varName, char *initialVal, int width, char *extra)
+/* Make a text control filled with initial value. */
+{
+if (initialVal == NULL)
+    initialVal = "";
+if (width==0)
+    width=strlen(initialVal)*10;
+if (width==0)
+    width = 100;
+
+printf("<INPUT TYPE=TEXT class='inputBox' NAME=\"%s\" style='width: %dpx' VALUE=\"%s\"",
+       varName,width, initialVal);
+if (isNotEmpty(extra))
+    printf(" %s",extra);
+printf(">\n");
+}
+
+void cgiMakeIntVar(char *varName, int initialVal, int maxDigits)
+/* Make a text control filled with initial value.  */
+{
+if (maxDigits == 0) maxDigits = 4;
+
+printf("<INPUT TYPE=TEXT NAME=\"%s\" SIZE=%d VALUE=%d>", varName,
+        maxDigits, initialVal);
+}
+
+void cgiMakeIntVarInRange(char *varName, int initialVal, char *title, int width,
+                          char *min, char *max)
+/* Make a integer control filled with initial value.
+   If min and/or max are non-NULL will enforce range
+   Requires utils.js jQuery.js and inputBox class */
+{
+if (width==0)
+    {
+    if (max)
+        width=strlen(max)*10;
+    else
+        {
+        int sz=initialVal+1000;
+        if (min)
+            sz=atoi(min) + 1000;
+        width = 10;
+        while (sz/=10)
+            width+=10;
+        }
+    }
+if (width < 65)
+    width = 65;
+
+printf("<INPUT TYPE=TEXT class='inputBox' name=\"%s\" style='width: %dpx' value=%d",
+       varName,width,initialVal);
+printf(" onChange='return validateInt(this,%s,%s);'",
+       (min ? min : "\"null\""),(max ? max : "\"null\""));
+if (title)
+    printf(" title='%s'",title);
+printf(">\n");
+}
+
+void cgiMakeIntVarWithLimits(char *varName, int initialVal, char *title, int width,
+                             int min, int max)
+{
+char minLimit[20];
+char maxLimit[20];
+char *minStr=NULL;
+char *maxStr=NULL;
+if (min != NO_VALUE)
+    {
+    safef(minLimit,sizeof(minLimit),"%d",min);
+    minStr = minLimit;
+    }
+if (max != NO_VALUE)
+    {
+    safef(maxLimit,sizeof(maxLimit),"%d",max);
+    maxStr = maxLimit;
+    }
+cgiMakeIntVarInRange(varName,initialVal,title,width,minStr,maxStr);
+}
+
+void cgiMakeIntVarWithMin(char *varName, int initialVal, char *title, int width, int min)
+{
+char minLimit[20];
+char *minStr=NULL;
+if (min != NO_VALUE)
+    {
+    safef(minLimit,sizeof(minLimit),"%d",min);
+    minStr = minLimit;
+    }
+cgiMakeIntVarInRange(varName,initialVal,title,width,minStr,NULL);
+}
+
+void cgiMakeIntVarWithMax(char *varName, int initialVal, char *title, int width, int max)
+{
+char maxLimit[20];
+char *maxStr=NULL;
+if (max != NO_VALUE)
+    {
+    safef(maxLimit,sizeof(maxLimit),"%d",max);
+    maxStr = maxLimit;
+    }
+cgiMakeIntVarInRange(varName,initialVal,title,width,NULL,maxStr);
+}
+
+void cgiMakeDoubleVar(char *varName, double initialVal, int maxDigits)
+/* Make a text control filled with initial floating-point value.  */
+{
+if (maxDigits == 0) maxDigits = 4;
+
+printf("<INPUT TYPE=TEXT NAME=\"%s\" SIZE=%d VALUE=%g>", varName,
+        maxDigits, initialVal);
+}
+
+void cgiMakeDoubleVarInRange(char *varName, double initialVal, char *title, int width,
+                             char *min, char *max)
+/* Make a floating point control filled with initial value.
+   If min and/or max are non-NULL will enforce range
+   Requires utils.js jQuery.js and inputBox class */
+{
+if (width==0)
+    {
+    if (max)
+        width=strlen(max)*10;
+    }
+if (width < 65)
+    width = 65;
+
+printf("<INPUT TYPE=TEXT class='inputBox' name=\"%s\" style='width: %dpx' value=%g",
+       varName,width,initialVal);
+printf(" onChange='return validateFloat(this,%s,%s);'",
+       (min ? min : "\"null\""),(max ? max : "\"null\""));
+if (title)
+    printf(" title='%s'",title);
+printf(">\n");
+}
+
+void cgiMakeDoubleVarWithLimits(char *varName, double initialVal, char *title, int width,
+                                double min, double max)
+{
+char minLimit[20];
+char maxLimit[20];
+char *minStr=NULL;
+char *maxStr=NULL;
+if ((int)min != NO_VALUE)
+    {
+    safef(minLimit,sizeof(minLimit),"%g",min);
+    minStr = minLimit;
+    }
+if ((int)max != NO_VALUE)
+    {
+    safef(maxLimit,sizeof(maxLimit),"%g",max);
+    maxStr = maxLimit;
+    }
+cgiMakeDoubleVarInRange(varName,initialVal,title,width,minStr,maxStr);
+}
+
+void cgiMakeDoubleVarWithMin(char *varName, double initialVal, char *title, int width, double min)
+{
+char minLimit[20];
+char *minStr=NULL;
+if ((int)min != NO_VALUE)
+    {
+    safef(minLimit,sizeof(minLimit),"%g",min);
+    minStr = minLimit;
+    }
+cgiMakeDoubleVarInRange(varName,initialVal,title,width,minStr,NULL);
+}
+
+void cgiMakeDoubleVarWithMax(char *varName, double initialVal, char *title, int width, double max)
+{
+char maxLimit[20];
+char *maxStr=NULL;
+if ((int)max != NO_VALUE)
+    {
+    safef(maxLimit,sizeof(maxLimit),"%g",max);
+    maxStr = maxLimit;
+    }
+cgiMakeDoubleVarInRange(varName,initialVal,title,width,NULL,maxStr);
+}
+
+void cgiMakeDropListClassWithStyleAndJavascript(char *name, char *menu[],
+        int menuSize, char *checked, char *class, char *style,char *javascript)
+/* Make a drop-down list with names, text class, style and javascript. */
+{
+int i;
+char *selString;
+if (checked == NULL) checked = menu[0];
+printf("<SELECT");
+if (name)
+    printf(" NAME='%s'", name);
+if (class)
+    printf(" class='%s'", class);
+if (style)
+    printf(" style='%s'", style);
+if (javascript)
+    printf(" %s", javascript);
+printf(">\n");
+for (i=0; i<menuSize; ++i)
+    {
+    if (sameWord(menu[i], checked))
+        selString = " SELECTED";
+    else
+        selString = "";
+    printf("<OPTION%s>%s</OPTION>\n", selString, menu[i]);
+    }
+printf("</SELECT>\n");
+}
+
+void cgiMakeDropListClassWithStyle(char *name, char *menu[],
+                                   int menuSize, char *checked, char *class, char *style)
+/* Make a drop-down list with names, text class and style. */
+{
+cgiMakeDropListClassWithStyleAndJavascript(name,menu,menuSize,checked,class,style,"");
+}
+
+void cgiMakeDropListClass(char *name, char *menu[],
+                          int menuSize, char *checked, char *class)
+/* Make a drop-down list with names. */
+{
+cgiMakeDropListClassWithStyle(name, menu, menuSize, checked, class, NULL);
+}
+
+void cgiMakeDropList(char *name, char *menu[], int menuSize, char *checked)
+/* Make a drop-down list with names.
+ * uses style "normalText" */
+{
+    cgiMakeDropListClass(name, menu, menuSize, checked, "normalText");
+}
+
+char *cgiMultListShadowPrefix()
+/* Prefix for shadow variable set with multi-select inputs. */
+{
+return "multishad.";
+}
+
+void cgiMakeMultList(char *name, char *menu[], int menuSize, struct slName *checked, int length)
+/* Make a list of names with window height equalt to length,
+ * which can have multiple selections. Same as drop-down list
+ * except "multiple" is added to select tag. */
+{
+int i;
+char *selString;
+if (checked == NULL) checked = slNameNew(menu[0]);
+printf("<SELECT MULTIPLE SIZE=%d ALIGN=CENTER NAME=\"%s\">\n", length, name);
+for (i=0; i<menuSize; ++i)
+    {
+    if (slNameInList(checked, menu[i]))
+        selString = " SELECTED";
+    else
+        selString = "";
+    printf("<OPTION%s>%s</OPTION>\n", selString, menu[i]);
+    }
+printf("</SELECT>\n");
+char buf[512];
+safef(buf, sizeof(buf), "%s%s", cgiMultListShadowPrefix(), name);
+cgiMakeHiddenVar(buf, "1");
+}
+
+void cgiMakeCheckboxGroupWithVals(char *name, char *menu[], char *values[], int menuSize,
+				  struct slName *checked, int tableColumns)
+/* Make a table of checkboxes that have the same variable name but different
+ * values (same behavior as a multi-select input), with nice labels in menu[]. */
+{
+int i;
+if (values == NULL) values = menu;
+if (menu == NULL) menu = values;
+puts("<TABLE BORDERWIDTH=0><TR>");
+for (i = 0;  i < menuSize;  i++)
+    {
+    if (i > 0 && (i % tableColumns) == 0)
+	printf("</TR><TR>");
+    printf("<TD><INPUT TYPE=CHECKBOX NAME=\"%s\" VALUE=\"%s\" %s></TD>"
+	   "<TD>%s</TD>\n",
+	   name, values[i], (slNameInList(checked, values[i]) ? "CHECKED" : ""),
+	   menu[i]);
+    }
+if ((i % tableColumns) != 0)
+    while ((i++ % tableColumns) != 0)
+	printf("<TD></TD>");
+puts("</TR></TABLE>");
+char buf[512];
+safef(buf, sizeof(buf), "%s%s", cgiMultListShadowPrefix(), name);
+cgiMakeHiddenVar(buf, "0");
+}
+
+void cgiMakeCheckboxGroup(char *name, char *menu[], int menuSize, struct slName *checked,
+			  int tableColumns)
+/* Make a table of checkboxes that have the same variable name but different
+ * values (same behavior as a multi-select input). */
+{
+cgiMakeCheckboxGroupWithVals(name, menu, NULL, menuSize, checked, tableColumns);
+}
+
+void cgiMakeDropListFull(char *name, char *menu[], char *values[],
+                         int menuSize, char *checked, char *extraAttribs)
+/* Make a drop-down list with names and values. */
+{
+int i;
+char *selString;
+if (checked == NULL) checked = menu[0];
+
+if (NULL != extraAttribs)
+    {
+    printf("<SELECT NAME=\"%s\" %s>\n", name, extraAttribs);
+    }
+else
+    {
+    printf("<SELECT NAME=\"%s\">\n", name);
+    }
+
+for (i=0; i<menuSize; ++i)
+    {
+    if (sameWord(values[i], checked))
+        selString = " SELECTED";
+    else
+        selString = "";
+    printf("<OPTION%s VALUE=\"%s\">%s</OPTION>\n", selString, values[i], menu[i]);
+    }
+printf("</SELECT>\n");
+}
+
+char *cgiMakeSelectDropList(boolean multiple, char *name, struct slPair *valsAndLabels,
+                            char *selected, char *anyAll,char *extraClasses, char *extraHtml)
+// Returns allocated string of HTML defining a drop-down select
+// (if multiple, REQUIRES ui-dropdownchecklist.js)
+// valsAndLabels: val (pair->name) must be filled in but label (pair->val) may be NULL.
+// selected: if not NULL is a val found in the valsAndLabels (multiple then comma delimited list).
+//           If null and anyAll not NULL, that will be selected
+// anyAll: if not NULL is the string for an initial option. It can contain val and label,
+//         delimited by a comma
+// extraHtml: if not NULL contains id, javascript calls and style.
+//            It does NOT contain class definitions
+{
+struct dyString *output = dyStringNew(1024);
+boolean checked = FALSE;
+
+dyStringPrintf(output,"<SELECT name='%s'",name);
+if (multiple)
+    dyStringAppend(output," MULTIPLE");
+if (extraClasses != NULL)
+    dyStringPrintf(output," class='%s%s'",extraClasses,(multiple ? " filterBy" : ""));
+else if (multiple)
+    dyStringAppend(output," class='filterBy'");
+
+if (extraHtml != NULL)
+    dyStringPrintf(output," %s",extraHtml);
+dyStringAppend(output,">\n");
+
+// Handle initial option "Any" or "All"
+if (anyAll != NULL)
+    {
+    char *val = anyAll;  // Could contain a label after the value
+    char *label = strchr(val,',');  // Could contain a label after the value
+    if (label != NULL)
+        {
+        val = cloneString(anyAll);
+        label = strchr(val,',');  // again because this is new mem
+        *label = '\0';
+        label = label+1;
+        }
+    else
+        label = val;
+    checked = TRUE; // The default case
+    if (selected != NULL)
+        {
+        if (multiple)
+            checked = (findWordByDelimiter(val,',', selected) != NULL);
+        else
+            checked = sameString(val,selected);
+        }
+    dyStringPrintf(output, "<OPTION%s VALUE='%s'>%s</OPTION>\n",(checked ? " SELECTED" : ""),
+                   val, javaScriptLiteralEncode(label));
+    if (label != val)
+        freeMem(val);
+    }
+
+// All other options
+struct slPair *valPair = valsAndLabels;
+for (; valPair != NULL; valPair = valPair->next)
+    {
+    checked = FALSE;
+    if (selected != NULL)
+        {
+        if (multiple)
+            checked = (findWordByDelimiter(valPair->name,',', selected) != NULL);
+        else
+            checked = sameString(valPair->name,selected);
+        }
+    char *label = valPair->name;
+    if (valPair->val != NULL)
+        label = valPair->val;
+    dyStringPrintf(output, "<OPTION%s VALUE='%s'>%s</OPTION>\n",(checked ? " SELECTED" : ""),
+                   (char *)valPair->name, javaScriptLiteralEncode(label));
+    }
+
+dyStringPrintf(output,"</SELECT>\n");
+
+return dyStringCannibalize(&output);
+}
+
+void cgiMakeDropListWithVals(char *name, char *menu[], char *values[],
+                         int menuSize, char *checked)
+/* Make a drop-down list with names and values. In this case checked
+ * corresponds to a value, not a menu. */
+{
+int i;
+char *selString;
+if (checked == NULL) checked = values[0];
+
+printf("<SELECT NAME=\"%s\">\n", name);
+for (i=0; i<menuSize; ++i)
+    {
+    if (sameWord(values[i], checked))
+        selString = " SELECTED";
+    else
+        selString = "";
+    printf("<OPTION%s VALUE=\"%s\">%s</OPTION>\n", selString, values[i], menu[i]);
+    }
+printf("</SELECT>\n");
+}
+
+void cgiDropDownWithTextValsAndExtra(char *name, char *text[], char *values[],
+                                     int count, char *selected, char *extra)
+/* Make a drop-down list with both text and values. */
+{
+int i;
+char *selString;
+assert(values != NULL && text != NULL);
+if (selected == NULL)
+    selected = values[0];
+printf("<SELECT");
+if (name)
+    printf(" NAME='%s'", name);
+if (extra)
+    printf("%s", extra);
+printf(">\n");
+for (i=0; i<count; ++i)
+    {
+    if (sameWord(values[i], selected))
+        selString = " SELECTED";
+    else
+        selString = "";
+    printf("<OPTION%s value='%s'>%s</OPTION>\n", selString, values[i], text[i]);
+    }
+printf("</SELECT>\n");
+}
+
+void cgiMakeHiddenVarWithExtra(char *varName, char *string,char *extra)
+/* Store string in hidden input for next time around. */
+{
+printf("<INPUT TYPE=HIDDEN NAME='%s' VALUE='%s'", varName, string);
+if (extra)
+    printf(" %s>\n",extra);
+else
+    puts(">");
+}
+
+void cgiContinueHiddenVar(char *varName)
+/* Write CGI var back to hidden input for next time around. */
+{
+if (cgiVarExists(varName))
+    cgiMakeHiddenVar(varName, cgiString(varName));
+}
+
+void cgiVarExclude(char *varName)
+/* If varName exists, remove it. */
+{
+if (cgiVarExists(varName))
+    {
+    struct cgiVar *cv = hashRemove(inputHash, varName);
+    slRemoveEl(&inputList, cv);
+    }
+}
+
+void cgiVarExcludeExcept(char **varNames)
+/* Exclude all variables except for those in NULL
+ * terminated array varNames.  varNames may be NULL
+ * in which case nothing is excluded. */
+{
+struct hashEl *list, *el;
+struct hash *exclude = newHash(8);
+char *s;
+
+/* Build up hash of things to exclude */
+if (varNames != NULL)
+   {
+   while ((s = *varNames++) != NULL)
+       hashAdd(exclude, s, NULL);
+   }
+
+/* Step through variable list and remove them if not
+ * excluded. */
+initCgiInput();
+list = hashElListHash(inputHash);
+for (el = list; el != NULL; el = el->next)
+    {
+    if (!hashLookup(exclude, el->name))
+        cgiVarExclude(el->name);
+    }
+hashElFreeList(&list);
+freeHash(&exclude);
+}
+
+void cgiVarSet(char *varName, char *val)
+/* Set a cgi variable to a particular value. */
+{
+struct cgiVar *var;
+initCgiInput();
+AllocVar(var);
+var->val = cloneString(val);
+hashAddSaveName(inputHash, varName, var, &var->name);
+}
+
+struct dyString *cgiUrlString()
+/* Get URL-formatted that expresses current CGI variable state. */
+{
+struct dyString *dy = newDyString(0);
+struct cgiVar *cv;
+char *e;
+
+
+for (cv = inputList; cv != NULL; cv = cv->next)
+    {
+    if (cv != inputList)
+       dyStringAppend(dy, "&");
+    e = cgiEncode(cv->val);
+    dyStringPrintf(dy, "%s=", cv->name);
+    dyStringAppend(dy, e);
+    freez(&e);
+    }
+return dy;
+}
+
+void cgiEncodeIntoDy(char *var, char *val, struct dyString *dy)
+/* Add a CGI-encoded &var=val string to dy. */
+{
+if (dy->stringSize != 0)
+    dyStringAppendC(dy, '&');
+dyStringAppend(dy, var);
+dyStringAppendC(dy, '=');
+char *s = cgiEncode(val);
+dyStringAppend(dy, s);
+freez(&s);
+}
+
+void cgiContinueAllVars()
+/* Write back all CGI vars as hidden input for next time around. */
+{
+struct cgiVar *cv;
+for (cv = inputList; cv != NULL; cv = cv->next)
+    cgiMakeHiddenVar(cv->name, cv->val);
+}
+
+
+boolean cgiFromCommandLine(int *pArgc, char *argv[], boolean preferWeb)
+/* Use the command line to set up things as if we were a CGI program.
+ * User types in command line (assuming your program called cgiScript)
+ * like:
+ *        cgiScript nonCgiArg1 var1=value1 var2=value2 var3=value3 nonCgiArg2
+ * or like
+ *        cgiScript nonCgiArg1 var1=value1&var2=value2&var3=value3 nonCgiArg2
+ * or even like
+ *        cgiScript nonCgiArg1 -x -y=bogus z=really
+ * (The non-cgi arguments can occur anywhere.  The cgi arguments (all containing
+ * the character '=' or starting with '-') are erased from argc/argv.  Normally
+ * you call this cgiSpoof(&argc, argv);
+ */
+{
+int argc = *pArgc;
+int i;
+int argcLeft = argc;
+char *name;
+static char queryString[65536];
+char *q = queryString;
+boolean needAnd = TRUE;
+boolean gotAny = FALSE;
+boolean startDash;
+boolean gotEq;
+static char hostLine[512];
+
+if (preferWeb && cgiIsOnWeb())
+    return TRUE;	/* No spoofing required! */
+q += safef(q, queryString + sizeof(queryString) - q,
+	   "%s", "QUERY_STRING=cgiSpoof=on");
+for (i=0; i<argcLeft; )
+    {
+    name = argv[i];
+    if ((startDash = (name[0] == '-')))
+       ++name;
+    gotEq = (strchr(name, '=') != NULL);
+    if (gotEq || startDash)
+        {
+        if (needAnd)
+            *q++ = '&';
+        q += safef(q, queryString + sizeof(queryString) - q, "%s", name);
+        if (!gotEq || strchr(name, '&') == NULL)
+            needAnd = TRUE;
+	if (!gotEq)
+	    q += safef(q, queryString + sizeof(queryString) - q, "=on");
+        memcpy(&argv[i], &argv[i+1], sizeof(argv[i]) * (argcLeft-i-1));
+        argcLeft -= 1;
+        gotAny = TRUE;
+        }
+    else
+        i++;
+    }
+if (gotAny)
+    {
+    *pArgc = argcLeft;
+    }
+putenv("REQUEST_METHOD=GET");
+putenv(queryString);
+char *host = getenv("HOST");
+if (host == NULL)
+    host = "unknown";
+safef(hostLine, sizeof(hostLine), "SERVER_NAME=%s", host);
+putenv(hostLine);
+initCgiInput();
+return gotAny;
+}
+
+boolean cgiSpoof(int *pArgc, char *argv[])
+/* If run from web line set up input
+ * variables from web line, otherwise
+ * set up from command line. */
+{
+return cgiFromCommandLine(pArgc, argv, TRUE);
+}
+
+boolean cgiFromFile(char *fileName)
+/* Set up a cgi environment using parameters stored in a file.
+ * Takes file with arguments in the form:
+ *       argument1=someVal
+ *       # This is a comment
+ *       argument2=someOtherVal
+ *       ...
+ * and puts them into the cgi environment so that the usual
+ * cgiGetVar() commands can be used. Useful when a program
+ * has a lot of possible parameters.
+ */
+{
+char **argv = NULL;
+int argc = 0;
+int maxArgc = 10;
+int i;
+struct lineFile *lf = lineFileOpen(fileName, TRUE);
+char *line;
+boolean spoof= FALSE;
+AllocArray(argv, maxArgc);
+/* Remember that first arg is program name.
+   Put filename there instead. */
+argc = 1;
+argv[0] = cloneString(fileName);
+for(;;)
+    {
+    /* If we are at the end we're done. */
+    if(!lineFileNext(lf, &line, NULL))
+	break;
+    /* If it is a comment or blank line skip it. */
+    if (line[0] == '#' || sameString(line, ""))
+        continue;
+    /* If our argv array is full expand it. */
+    if((argc+1) >= maxArgc)
+	{
+	ExpandArray(argv, maxArgc, 2*maxArgc);
+	maxArgc *= 2;
+	}
+    /* Fill in another argument to our psuedo arguments. */
+    argv[argc++] = cloneString(line);
+    }
+spoof = cgiSpoof(&argc, argv);
+/* Cleanup. */
+lineFileClose(&lf);
+for(i=0; i<argc; i++)
+    freez(&argv[i]);
+freez(&argv);
+return spoof;
+}
+
+void logCgiToStderr()
+/* Log useful CGI info to stderr */
+{
+char *ip = getenv("REMOTE_ADDR");
+char *cgiBinary = getenv("SCRIPT_FILENAME");
+char *requestUri = getenv("REQUEST_URI");
+char *hgsid = cgiOptionalString("hgsid");
+char *cgiFileName = NULL;
+time_t nowTime = time(NULL);
+struct tm *tm;
+tm = localtime(&nowTime);
+char *ascTime = asctime(tm);
+size_t len = strlen(ascTime);
+if (cgiBinary)
+    cgiFileName = basename(cgiBinary);
+else
+    cgiFileName = "cgi-bin";
+if (len > 3) ascTime[len-2] = '\0';
+if (!ip)
+    ip = "unknown";
+if (!hgsid)
+    hgsid = "unknown";
+if (!requestUri)
+    requestUri = "unknown";
+fprintf(stderr, "[%s] [%s] [client %s] [hgsid=%.24s] [%.1024s] ", ascTime, cgiFileName, ip,
+	hgsid, requestUri);
+}
+
+void cgiResetState()
+/* This is for reloading CGI settings multiple times in the same program
+ * execution.  No effect if state has not yet been initialized. */
+{
+freez(&inputString);
+inputString = NULL;
+if (inputHash != NULL)
+    hashFree(&inputHash);
+inputHash = NULL;
+inputList = NULL;
+
+haveCookiesHash = FALSE;
+if (cookieHash != NULL)
+    hashFree(&cookieHash);
+cookieHash = NULL;
+cookieList = NULL;
+}
+
+void cgiDown(float lines)
+// Drop down a certain number of lines (may be fractional)
+{
+printf("<div style='height:%fem;'></div>\n",lines);
+}
+
+char *commonCssStyles()
+/* Returns a string of common CSS styles */
+{
+// Contents currently is OBSOLETE as these have been moved to HGStyle.css
+// TODO: remove all traces (from web.c, hgTracks, hgTables) as this funtion does nothing.
+return "";
+}
+
+static void turnCgiVarsToVals(struct hashEl *hel)
+/* To save cgiParseVars clients from doing an extra lookup, replace
+ * hash filled with cgiVars as values with one filled with cgiVar->val
+ * instead.  Since cgiVar->name is same as hashEl->name,  no info is really
+ * lost, and it simplifies the code that uses us. */
+{
+struct cgiVar *var = hel->val;
+hel->val = var->val;
+}
+
+struct cgiParsedVars *cgiParsedVarsNew(char *cgiString)
+/* Build structure containing parsed out cgiString */
+{
+struct cgiParsedVars *tags;
+AllocVar(tags);
+tags->stringBuf = cloneString(cgiString);
+cgiParseInputAbort(tags->stringBuf, &tags->hash, &tags->list);
+hashTraverseEls(tags->hash, turnCgiVarsToVals);
+return tags;
+}
+
+void cgiParsedVarsFree(struct cgiParsedVars **pTags)
+/* Free up memory associated with cgiParsedVars */
+{
+struct cgiParsedVars *tags = *pTags;
+if (tags != NULL)
+    {
+    slFreeList(&tags->list);
+    hashFree(&tags->hash);
+    freeMem(tags->stringBuf);
+    freez(pTags);
+    }
+}
+
diff --git a/gbtools/src/blatSrc/lib/cirTree.c b/gbtools/src/blatSrc/lib/cirTree.c
new file mode 100644
index 0000000..48020ee
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/cirTree.c
@@ -0,0 +1,635 @@
+/* cirTree chromosome id r tree.  Part of a system to index chromosome ranges - things of
+ * form chrN:start-end.  Generally you'll be using the crTree module - which
+ * makes use of this module and the bPlusTree module - rather than this module directly.
+ * This module works with chromosomes mapped to small integers rather than chromosomes
+ * as strings, saving space and speeding things up in the process, but requiring the
+ * separate bPlusTree to map the names to IDs. 
+ *   This module implements a one dimensional R-tree index treating the chromosome ID
+ * as the most significant part of a two-part key, and the base position as the least 
+ * significant part of the key. */
+
+/* Copyright (C) 2014 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "localmem.h"
+#include "sig.h"
+#include "udc.h"
+#include "cirTree.h"
+
+struct rTree
+/* Recursive range structure. */
+    {
+    struct rTree *next;	/* Next on same level. */
+    struct rTree *children;	/* Child list. */
+    struct rTree *parent;	/* Our parent if any. */
+    bits32 startChromIx;	/* Starting chromosome. */
+    bits32 startBase;		/* Starting base position. */
+    bits32 endChromIx;		/* Ending chromosome. */
+    bits32 endBase;		/* Ending base. */
+    bits64 startFileOffset;	/* Start offset in file for leaves. */
+    bits64 endFileOffset;	/* End file offset for leaves. */
+    };
+
+#define fileHeaderSize (48)	/* Size of file header. */
+#define indexSlotSize (24)	/* Size of startChrom,startBase,endChrom,endBase,offset */
+#define leafSlotSize (32)       /* Size of startChrom,startBase,endChrom,endBase,offset,size */
+#define nodeHeaderSize (4)	/* Size of rTree node header. isLeaf,reserved,childCount. */
+
+int indexNodeSize(int blockSize)
+/* Return size of an index node. */
+{
+return nodeHeaderSize + indexSlotSize * blockSize;
+}
+
+int leafNodeSize(int blockSize)
+/* Return size of a leaf node. */
+{
+return nodeHeaderSize + leafSlotSize * blockSize;
+}
+
+
+static bits64 rWriteIndexLevel(bits16 blockSize, int childNodeSize,
+	struct rTree *tree, int curLevel, int destLevel,
+	bits64 offsetOfFirstChild, FILE *f)
+/* Recursively write an index level, skipping levels below destLevel,
+ * writing out destLevel. */
+{
+struct rTree *el;
+bits64 offset = offsetOfFirstChild;
+if (curLevel == destLevel)
+    {
+    /* We've reached the right level, write out a node header */
+    UBYTE reserved = 0;
+    UBYTE isLeaf = FALSE;
+    bits16 countOne = slCount(tree->children);
+    writeOne(f, isLeaf);
+    writeOne(f, reserved);
+    writeOne(f, countOne);
+
+    /* Write out elements of this node. */
+    for (el = tree->children; el != NULL; el = el->next)
+	{
+	writeOne(f, el->startChromIx);
+	writeOne(f, el->startBase);
+	writeOne(f, el->endChromIx);
+	writeOne(f, el->endBase);
+	writeOne(f, offset);
+	offset += childNodeSize;
+	}
+
+    /* Write out zeroes for empty slots in node. */
+    int i;
+    for (i=countOne; i<blockSize; ++i)
+	repeatCharOut(f, 0, indexSlotSize);
+    }
+else 
+    {
+    /* Otherwise recurse on children. */
+    for (el = tree->children; el != NULL; el = el->next)
+	offset = rWriteIndexLevel(blockSize, childNodeSize, el, curLevel+1, destLevel,
+		offset, f);
+    }
+return offset;
+}
+
+static void writeIndexLevel(int blockSize, int childNodeSize, 
+	struct rTree *tree, bits64 offsetOfFirstChild, int level, FILE *f)
+/* Write out a non-leaf level nodes at given level. */
+{
+rWriteIndexLevel(blockSize, childNodeSize, tree, 0, level, offsetOfFirstChild, f);
+}
+
+static void rWriteLeaves(int itemsPerSlot, int lNodeSize, struct rTree *tree, int curLevel,
+	int leafLevel, FILE *f)
+/* Write out leaf-level nodes. */
+{
+if (curLevel == leafLevel)
+    {
+    /* We've reached the right level, write out a node header. */
+    UBYTE reserved = 0;
+    UBYTE isLeaf = TRUE;
+    bits16 countOne = slCount(tree->children);
+    writeOne(f, isLeaf);
+    writeOne(f, reserved);
+    writeOne(f, countOne);
+
+    /* Write out elements of this node. */
+    struct rTree *el;
+    for (el = tree->children; el != NULL; el = el->next)
+	{
+	writeOne(f, el->startChromIx);
+	writeOne(f, el->startBase);
+	writeOne(f, el->endChromIx);
+	writeOne(f, el->endBase);
+	writeOne(f, el->startFileOffset);
+	bits64 size = el->endFileOffset - el->startFileOffset;
+	writeOne(f, size);
+	}
+
+    /* Write out zeroes for empty slots in node. */
+    int i;
+    for (i=countOne; i<itemsPerSlot; ++i)
+	repeatCharOut(f, 0, indexSlotSize);
+    }
+else
+    {
+    /* Otherwise recurse on children. */
+    struct rTree *el;
+    for (el = tree->children; el != NULL; el = el->next)
+	rWriteLeaves(itemsPerSlot, lNodeSize, el, curLevel+1, leafLevel, f);
+    }
+}
+
+static void writeLeaves(int itemsPerSlot, int lNodeSize, struct rTree *tree, int leafLevel, FILE *f)
+/* Write out leaf-level nodes. */
+{
+rWriteLeaves(itemsPerSlot, lNodeSize, tree, 0, leafLevel, f);
+}
+
+void calcLevelSizes(struct rTree *tree, int *levelSizes, int level, int maxLevel)
+/* Recursively count sizes of levels and add to appropriate slots of levelSizes */
+{
+struct rTree *el;
+for (el = tree; el != NULL; el = el->next)
+    {
+    levelSizes[level] += 1;
+    if (level < maxLevel)
+        calcLevelSizes(el->children, levelSizes, level+1, maxLevel);
+    }
+}
+
+static struct rTree *rTreeFromChromRangeArray( struct lm *lm, int blockSize, int itemsPerSlot,
+	void *itemArray, int itemSize, bits64 itemCount,  void *context,
+	struct cirTreeRange (*fetchKey)(const void *va, void *context),
+	bits64 (*fetchOffset)(const void *va, void *context), bits64 endFileOffset,
+	int *retLevelCount)
+{
+if (itemCount == 0)
+    return NULL;
+char *items = itemArray;
+struct rTree *el, *list=NULL, *tree = NULL;
+
+/* Make first level above leaf. */
+bits64 i;
+bits64 nextOffset = (*fetchOffset)(items, context);
+int oneSize = 0;
+for (i=0; i<itemCount; i += oneSize)
+    {
+
+    /* Allocate element and put on list. */
+    lmAllocVar(lm, el);
+    slAddHead(&list, el);
+
+    /* Fill out most of element from first item in element. */
+    char *startItem = items + itemSize * i;
+    struct cirTreeRange key = (*fetchKey)(startItem, context);
+    el->startChromIx = el->endChromIx = key.chromIx;
+    el->startBase = key.start;
+    el->endBase = key.end;
+    el->startFileOffset = nextOffset;
+
+    oneSize = 1;
+
+    char *endItem = startItem;
+    int j;
+    for (j=i+1; j<itemCount; ++j) {
+	endItem += itemSize;
+	nextOffset = (*fetchOffset)(endItem, context);
+	if (nextOffset != el->startFileOffset)
+		break;
+	else 
+		oneSize++;
+    }
+    if (j == itemCount) {
+	nextOffset = endFileOffset;
+    }
+
+    el->endFileOffset = nextOffset;
+
+    /* Expand area spanned to include all items in block. */
+    for (j=1; j<oneSize; ++j)
+        {
+	void *item = items + itemSize*(i+j);
+	key = (*fetchKey)(item, context);
+	if (key.chromIx < el->startChromIx)
+	    {
+	    el->startChromIx = key.chromIx;
+	    el->startBase = key.start;
+	    }
+	else if (key.chromIx == el->startChromIx)
+	    {
+	    if (key.start < el->startBase)
+	        el->startBase = key.start;
+	    }
+	if (key.chromIx > el->endChromIx)
+	    {
+	    el->endChromIx = key.chromIx;
+	    el->endBase = key.end;
+	    }
+	else if (key.chromIx == el->endChromIx)
+	    {
+	    if (key.end > el->endBase)
+	        el->endBase = key.end;
+	    }
+	}
+    }
+slReverse(&list);
+verbose(2, "Made %d primary index nodes out of %llu items\n", slCount(list), itemCount);
+
+/* Now iterate through making more and more condensed versions until have just one. */
+int levelCount = 1;
+tree = list;
+while (tree->next != NULL || levelCount < 2)
+    {
+    list = NULL;
+    int slotsUsed = blockSize;
+    struct rTree *parent = NULL, *next;
+    for (el = tree; el != NULL; el = next)
+        {
+	next = el->next;
+	if (slotsUsed >= blockSize)
+	    {
+	    slotsUsed = 1;
+	    lmAllocVar(lm, parent);
+	    parent = lmCloneMem(lm, el, sizeof(*el));
+	    parent->children = el;
+	    el->parent = parent;
+	    el->next = NULL;
+	    slAddHead(&list, parent);
+	    }
+	else
+	    {
+	    ++slotsUsed;
+	    slAddHead(&parent->children, el);
+	    el->parent = parent;
+	    if (el->startChromIx < parent->startChromIx)
+		{
+	        parent->startChromIx = el->startChromIx;
+		parent->startBase = el->startBase;
+		}
+	    else if (el->startChromIx == parent->startChromIx)
+	        {
+		if (el->startBase < parent->startBase)
+		    parent->startBase = el->startBase;
+		}
+	    if (el->endChromIx > parent->endChromIx)
+		{
+	        parent->endChromIx = el->endChromIx;
+		parent->endBase = el->endBase;
+		}
+	    else if (el->endChromIx == parent->endChromIx)
+	        {
+		if (el->endBase > parent->endBase)
+		    parent->endBase = el->endBase;
+		}
+	    }
+	}
+
+    slReverse(&list);
+    for (el = list; el != NULL; el = el->next)
+        slReverse(&el->children);
+    tree = list;
+    levelCount += 1;
+    }
+*retLevelCount = levelCount;
+return tree;
+}
+
+static void writeTreeToOpenFile(struct rTree *tree, int blockSize, int levelCount, FILE *f)
+/* Write out tree to a file that is open already - writing out index nodes from 
+ * highest to lowest level, and then leaf nodes. */
+{
+/* Calculate sizes of each level. */
+int i;
+int levelSizes[levelCount];
+for (i=0; i<levelCount; ++i)
+    levelSizes[i] = 0;
+calcLevelSizes(tree, levelSizes, 0, levelCount-1);
+
+/* Calc offsets of each level. */
+bits64 levelOffsets[levelCount];
+bits64 offset = ftell(f);
+bits64 iNodeSize = indexNodeSize(blockSize);
+bits64 lNodeSize = leafNodeSize(blockSize);
+for (i=0; i<levelCount; ++i)
+    {
+    levelOffsets[i] = offset;
+    offset += levelSizes[i] * iNodeSize;
+    verbose(2, "level %d: size %d, offset %llu\n", i, levelSizes[i], levelOffsets[i]);
+    }
+
+verbose(2, "%d levels.  Level sizes are", levelCount);
+for (i=0; i<levelCount; ++i) verbose(2, " %d", levelSizes[i]);
+verbose(2, "\n");
+
+/* Write out index levels. */
+int finalLevel = levelCount-3;
+for (i=0; i<=finalLevel; ++i)
+    {
+    bits64 childNodeSize = (i==finalLevel ? lNodeSize : iNodeSize);
+    writeIndexLevel(blockSize, childNodeSize, tree,
+    	levelOffsets[i+1], i, f);
+    if (ftell(f) != levelOffsets[i+1])
+        errAbort("Internal error: offset mismatch (%llu vs %llu) line %d of %s\n", (bits64)ftell(f), levelOffsets[i+1], __LINE__, __FILE__);
+    }
+
+/* Write out leaf level. */
+int leafLevel = levelCount - 2;
+writeLeaves(blockSize, leafNodeSize(blockSize), tree, leafLevel, f);
+}
+
+void cirTreeFileBulkIndexToOpenFile(
+	void *itemArray, int itemSize, bits64 itemCount, 
+	bits32 blockSize, bits32 itemsPerSlot,
+	void *context,
+	struct cirTreeRange (*fetchKey)(const void *va, void *context),
+	bits64 (*fetchOffset)(const void *va, void *context), 
+	bits64 endFileOffset, FILE *f)
+/* Create a r tree index from a sorted array, writing output starting at current position
+ * of an already open file.  See rTreeFileCreate for explanation of parameters. */
+{
+int levelCount = 0;
+struct lm *lm = lmInit(0);
+struct rTree *tree = rTreeFromChromRangeArray(lm, blockSize, itemsPerSlot,
+	itemArray, itemSize, itemCount, context, fetchKey, fetchOffset, endFileOffset,
+	&levelCount);
+struct rTree dummyTree = {.startBase=0};
+if (tree == NULL) 
+    tree = &dummyTree;	// Work for empty files....
+bits32 magic = cirTreeSig;
+bits32 reserved = 0;
+writeOne(f, magic);
+writeOne(f, blockSize);
+writeOne(f, itemCount);
+writeOne(f, tree->startChromIx);
+writeOne(f, tree->startBase);
+writeOne(f, tree->endChromIx);
+writeOne(f, tree->endBase);
+writeOne(f, endFileOffset);
+writeOne(f, itemsPerSlot);
+writeOne(f, reserved);
+if (tree != &dummyTree)
+    writeTreeToOpenFile(tree, blockSize, levelCount, f);
+lmCleanup(&lm);
+}
+
+void cirTreeFileCreate(
+	void *itemArray, 	/* Sorted array of things to index. */
+	int itemSize, 		/* Size of each element in array. */
+	bits64 itemCount, 	/* Number of elements in array. */
+	bits32 blockSize,	/* R tree block size - # of children for each node. */
+	bits32 itemsPerSlot,	/* Number of items to put in each index slot at lowest level. */
+	void *context,		/* Context pointer for use by fetch call-back functions. */
+	struct cirTreeRange (*fetchKey)(const void *va, void *context),/* Given item, return key. */
+	bits64 (*fetchOffset)(const void *va, void *context), /* Given item, return file offset */
+	bits64 endFileOffset,				 /* Last position in file we index. */
+	char *fileName)                                  /* Name of output file. */
+/* Create a r tree index file from a sorted array. */
+{
+FILE *f = mustOpen(fileName, "wb");
+cirTreeFileBulkIndexToOpenFile(itemArray, itemSize, itemCount, blockSize, itemsPerSlot,
+	context, fetchKey, fetchOffset, endFileOffset, f);
+carefulClose(&f);
+}
+
+struct cirTreeFile *cirTreeFileAttach(char *fileName, struct udcFile *udc)
+/* Open up r-tree index file on previously open file, with cirTree
+ * header at current file position. */
+{
+/* Open file and allocate structure to hold info from header etc. */
+struct cirTreeFile *crt = needMem(sizeof(*crt));
+crt->fileName = fileName;
+crt->udc = udc;
+
+/* Read magic number at head of file and use it to see if we are proper file type, and
+ * see if we are byte-swapped. */
+bits32 magic;
+boolean isSwapped = FALSE;
+udcMustReadOne(udc, magic);
+if (magic != cirTreeSig)
+    {
+    magic = byteSwap32(magic);
+    isSwapped = crt->isSwapped = TRUE;
+    if (magic != cirTreeSig)
+       errAbort("%s is not a chromosome id r-tree index file", fileName);
+    }
+
+/* Read rest of defined bits of header, byte swapping as needed. */
+crt->blockSize = udcReadBits32(udc, isSwapped);
+crt->itemCount = udcReadBits64(udc, isSwapped);
+crt->startChromIx = udcReadBits32(udc, isSwapped);
+crt->startBase = udcReadBits32(udc, isSwapped);
+crt->endChromIx = udcReadBits32(udc, isSwapped);
+crt->endBase = udcReadBits32(udc, isSwapped);
+crt->fileSize = udcReadBits64(udc, isSwapped);
+crt->itemsPerSlot = udcReadBits32(udc, isSwapped);
+
+/* Skip over reserved bits of header. */
+bits32 reserved32;
+udcMustReadOne(udc, reserved32);
+
+/* Save position of root block of r tree. */
+crt->rootOffset = udcTell(udc);
+
+return crt;
+}
+
+struct cirTreeFile *cirTreeFileOpen(char *fileName)
+/* Open up r-tree index file - reading header and verifying things. */
+{
+return cirTreeFileAttach(cloneString(fileName), udcFileOpen(fileName, udcDefaultDir()));
+}
+
+void cirTreeFileDetach(struct cirTreeFile **pCrt)
+/* Detatch and free up cirTree file opened with cirTreeFileAttach. */
+{
+freez(pCrt);
+}
+
+void cirTreeFileClose(struct cirTreeFile **pCrt)
+/* Close and free up cirTree file opened with cirTreeFileAttach. */
+{
+struct cirTreeFile *crt = *pCrt;
+if (crt != NULL)
+    {
+    freez(&crt->fileName);
+    udcFileClose(&crt->udc);
+    cirTreeFileDetach(pCrt);
+    }
+}
+
+INLINE int cmpTwoBits32(bits32 aHi, bits32 aLo, bits32 bHi, bits32 bLo)
+/* Return - if b is less than a , 0 if equal, else +*/
+{
+if (aHi < bHi)
+    return 1;
+else if (aHi > bHi)
+    return -1;
+else
+    {
+    if (aLo < bLo)
+       return 1;
+    else if (aLo > bLo)
+       return -1;
+    else
+       return 0;
+    }
+}
+
+INLINE boolean cirTreeOverlaps(int qChrom, int qStart, int qEnd, 
+	int rStartChrom, int rStartBase, int rEndChrom, int rEndBase)
+{
+return cmpTwoBits32(qChrom, qStart, rEndChrom, rEndBase) > 0 &&
+       cmpTwoBits32(qChrom, qEnd, rStartChrom, rStartBase) < 0;
+}
+
+static void rFindOverlappingBlocks(struct cirTreeFile *crt, int level, bits64 indexFileOffset,
+	bits32 chromIx, bits32 start, bits32 end, struct fileOffsetSize **retList)
+/* Recursively find blocks with data. */
+{
+struct udcFile *udc = crt->udc;
+
+/* Seek to start of block. */
+udcSeek(udc, indexFileOffset);
+
+/* Read block header. */
+UBYTE isLeaf;
+UBYTE reserved;
+bits16 i, childCount;
+udcMustReadOne(udc, isLeaf);
+udcMustReadOne(udc, reserved);
+boolean isSwapped = crt->isSwapped;
+childCount = udcReadBits16(udc, isSwapped);
+
+verbose(3, "rFindOverlappingBlocks %llu %u:%u-%u.  childCount %d. isLeaf %d\n", indexFileOffset, chromIx, start, end, (int)childCount, (int)isLeaf);
+
+if (isLeaf)
+    {
+    /* Loop through node adding overlapping leaves to block list. */
+    for (i=0; i<childCount; ++i)
+        {
+	bits32 startChromIx = udcReadBits32(udc, isSwapped);
+	bits32 startBase = udcReadBits32(udc, isSwapped);
+	bits32 endChromIx = udcReadBits32(udc, isSwapped);
+	bits32 endBase = udcReadBits32(udc, isSwapped);
+	bits64 offset = udcReadBits64(udc, isSwapped);
+	bits64 size = udcReadBits64(udc, isSwapped);
+	if (cirTreeOverlaps(chromIx, start, end, startChromIx, startBase, endChromIx, endBase))
+	    {
+	    struct fileOffsetSize *block;
+	    AllocVar(block);
+	    block->offset = offset;
+	    block->size = size;
+	    slAddHead(retList, block);
+	    }
+	}
+    }
+else
+    {
+    /* Read node into arrays. */
+    bits32 startChromIx[childCount], startBase[childCount];
+    bits32 endChromIx[childCount], endBase[childCount];
+    bits64 offset[childCount];
+    for (i=0; i<childCount; ++i)
+        {
+	startChromIx[i] = udcReadBits32(udc, isSwapped);
+	startBase[i] = udcReadBits32(udc, isSwapped);
+	endChromIx[i] = udcReadBits32(udc, isSwapped);
+	endBase[i] = udcReadBits32(udc, isSwapped);
+	offset[i] = udcReadBits64(udc, isSwapped);
+	}
+
+    /* Recurse into child nodes that we overlap. */
+    for (i=0; i<childCount; ++i)
+	{
+	if (cirTreeOverlaps(chromIx, start, end, startChromIx[i], startBase[i], 
+		endChromIx[i], endBase[i]))
+	    {
+	    rFindOverlappingBlocks(crt, level+1, offset[i], chromIx, start, end, retList);
+	    }
+	}
+    }
+}
+
+struct fileOffsetSize *cirTreeFindOverlappingBlocks(struct cirTreeFile *crt, 
+	bits32 chromIx, bits32 start, bits32 end)
+/* Return list of file blocks that between them contain all items that overlap
+ * start/end on chromIx.  Also there will be likely some non-overlapping items
+ * in these blocks too. When done, use slListFree to dispose of the result. */
+{
+struct fileOffsetSize *blockList = NULL;
+rFindOverlappingBlocks(crt, 0, crt->rootOffset, chromIx, start, end, &blockList);
+slReverse(&blockList);
+return blockList;
+}
+
+static void rEnumerateBlocks(struct cirTreeFile *crt, int level, bits64 indexFileOffset,
+	struct fileOffsetSize **retList)
+/* Recursively find blocks with data. */
+{
+struct udcFile *udc = crt->udc;
+
+/* Seek to start of block. */
+udcSeek(udc, indexFileOffset);
+
+/* Read block header. */
+UBYTE isLeaf;
+UBYTE reserved;
+bits16 i, childCount;
+udcMustReadOne(udc, isLeaf);
+udcMustReadOne(udc, reserved);
+boolean isSwapped = crt->isSwapped;
+childCount = udcReadBits16(udc, isSwapped);
+
+verbose(3, "rEnumerateBlocks %llu childCount %d. isLeaf %d\n", indexFileOffset, (int)childCount, (int)isLeaf);
+
+if (isLeaf)
+    {
+    /* Loop through node adding overlapping leaves to block list. */
+    for (i=0; i<childCount; ++i)
+        {
+	udcReadBits32(udc, isSwapped);
+	udcReadBits32(udc, isSwapped);
+	udcReadBits32(udc, isSwapped);
+	udcReadBits32(udc, isSwapped);
+	bits64 offset = udcReadBits64(udc, isSwapped);
+	bits64 size = udcReadBits64(udc, isSwapped);
+        struct fileOffsetSize *block;
+        AllocVar(block);
+        block->offset = offset;
+        block->size = size;
+        slAddHead(retList, block);
+	}
+    }
+else
+    {
+    /* Read node into arrays. */
+    bits64 offset[childCount];
+    for (i=0; i<childCount; ++i)
+        { 
+	udcReadBits32(udc, isSwapped);
+	udcReadBits32(udc, isSwapped);
+	udcReadBits32(udc, isSwapped);
+	udcReadBits32(udc, isSwapped);
+	offset[i] = udcReadBits64(udc, isSwapped);
+	}
+
+    /* Recurse into child nodes that we overlap. */
+    for (i=0; i<childCount; ++i)
+	{
+	rEnumerateBlocks(crt, level+1, offset[i], retList);
+	}
+    }
+}
+
+struct fileOffsetSize *cirTreeEnumerateBlocks(struct cirTreeFile *crt)
+/* Return list of file blocks that between them contain all items that overlap
+ * start/end on chromIx.  Also there will be likely some non-overlapping items
+ * in these blocks too. When done, use slListFree to dispose of the result. */
+{
+struct fileOffsetSize *blockList = NULL;
+rEnumerateBlocks(crt, 0, crt->rootOffset, &blockList);
+slReverse(&blockList);
+return blockList;
+}
diff --git a/gbtools/src/blatSrc/lib/codebias.c b/gbtools/src/blatSrc/lib/codebias.c
new file mode 100644
index 0000000..9de37b4
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/codebias.c
@@ -0,0 +1,147 @@
+/* codebias.c - stuff for managing codons and codon bias. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "dnautil.h"
+#include "hmmstats.h"
+#include "codebias.h"
+
+
+
+struct codonBias *codonLoadBias(char *fileName)
+/* Create scaled log codon bias tables based on .cod file.  
+ * You can freeMem it when you're done. */
+{
+struct codonBias *cb;
+char line[1024];
+int lineCount = 0;
+char *words[128];
+int wordCount;
+int i = 0, j = 0;
+int skip = 0;
+boolean getMark0 = FALSE;
+boolean getMark1 = FALSE;
+FILE *f = mustOpen(fileName, "r");
+int val;
+
+AllocVar(cb);
+while (fgets(line, sizeof(line), f) )
+    {
+    ++lineCount;
+    if (skip)
+        {
+        skip -= 1;
+        continue;
+        }
+    if (getMark1)
+        {
+        wordCount = chopLine(line, words);
+        if (wordCount != 65)
+            errAbort("Bad line %d of %s\n", lineCount, fileName);
+        for (j=0; j<64; ++j)
+            {
+            val = atoi(words[j+1]);
+            if (val == 0)
+                cb->mark1[i][j] = scaledLog(1.0E-20);
+            else
+                cb->mark1[i][j] = scaledLog(0.001*val);
+            }
+        if ((i += 1) == 64)
+            getMark1 = FALSE;
+        }
+    else if (getMark0)
+        {
+        wordCount = chopLine(line, words);
+        if (wordCount != 64)
+            errAbort("Bad line %d of %s\n", lineCount, fileName);
+        for (j=0; j<64; ++j)
+            {
+            val = atoi(words[j]);
+            if (val == 0)
+                cb->mark0[j] = scaledLog(1.0E-20);
+            else
+                cb->mark0[j] = scaledLog(0.001*val);
+            }
+        getMark0 = FALSE;
+        }
+    else if (startsWith("Markov", line))
+        {
+        wordCount = chopLine(line, words);
+        if (wordCount != 2)
+            errAbort("Bad line %d of %s\n", lineCount, fileName);
+        if (sameString(words[1], "0"))
+            getMark0 = TRUE;
+        else if (sameString(words[1], "1"))
+            getMark1 = TRUE;
+        else
+            errAbort("Bad line %d of %s\n", lineCount, fileName);
+        skip = 3;
+        }
+    }
+fclose(f);
+return cb;
+}
+   
+static void unN(DNA *dna, int dnaSize)
+/* Turn N's into T's. */
+{
+int i;
+int val;
+for (i=0; i<dnaSize; ++i)
+    {
+    if ((val = ntVal[(int)dna[i]]) < 0)
+        dna[i] = 't';
+    }
+}
+
+int codonFindFrame(DNA *dna, int dnaSize, struct codonBias *forBias)
+/* Assuming a stretch of DNA is an exon, find most likely frame that it's in. 
+ * Beware this routine will replace N's with T's in the input dna.*/
+{
+double logOneFourth = log(0.25);
+double logProbs[3];
+int frame;
+int dnaIx;
+double logP;
+double bestLogP = -0x6fffffff;
+int bestFrame = -1;
+int lastDnaStart = dnaSize-3;
+DNA *d;
+int codon = 0, lastCodon; 
+
+unN(dna, dnaSize);
+for (frame=0; frame<3; ++frame)
+    {
+    /* Partial first codon just gets even background score. */
+    logP = frame*logOneFourth;
+    /* 1st order model on first full codon. */
+    if (frame <= lastDnaStart)
+        {
+        d = dna+frame;
+        codon = (ntVal[(int)d[0]]<<4) + (ntVal[(int)d[1]]<<2) + ntVal[(int)d[2]];
+        logP += forBias->mark0[codon];
+        }
+    /* 2nd order model on subsequent full codons. */
+    for (dnaIx = frame+3; dnaIx <= lastDnaStart; dnaIx += 3)
+        {
+        lastCodon = codon;
+        d = dna+dnaIx;
+        codon = (ntVal[(int)d[0]]<<4) + (ntVal[(int)d[1]]<<2) + ntVal[(int)d[2]];
+        logP += forBias->mark1[lastCodon][codon];
+        }
+    /* Partial last codon gets even background score. */
+    logP += (dnaSize-dnaIx)*logOneFourth;
+    logProbs[frame] = logP;
+    if (logP > bestLogP)
+        {
+        bestLogP = logP;
+        bestFrame = frame;
+        }
+    }
+return bestFrame;
+}
+
+
+
diff --git a/gbtools/src/blatSrc/lib/colHash.c b/gbtools/src/blatSrc/lib/colHash.c
new file mode 100644
index 0000000..4d085ed
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/colHash.c
@@ -0,0 +1,51 @@
+/* colHash - stuff for fast lookup of index given an
+ * rgb value. */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "memgfx.h"
+#include "colHash.h"
+
+
+struct colHash *colHashNew()
+/* Get a new color hash. */
+{
+struct colHash *cHash;
+AllocVar(cHash);
+cHash->freeEl = cHash->elBuf;
+return cHash;
+}
+
+void colHashFree(struct colHash **pEl)
+/* Free up color hash. */
+{
+freez(pEl);
+}
+
+struct colHashEl *colHashAdd(struct colHash *cHash, 
+	unsigned r, unsigned g, unsigned b, int ix)
+/* Add new element to color hash. */
+{
+struct colHashEl *che = cHash->freeEl++, **pCel;
+che->col.r = r;
+che->col.g = g;
+che->col.b = b;
+che->ix = ix;
+pCel = &cHash->lists[colHashFunc(r,g,b)];
+slAddHead(pCel, che);
+return che;
+}
+
+struct colHashEl *colHashLookup(struct colHash *cHash, 
+	unsigned r, unsigned g, unsigned b)
+/* Lookup value in hash. */
+{
+struct colHashEl *che;
+for (che = cHash->lists[colHashFunc(r,g,b)]; che != NULL; che = che->next)
+    if (che->col.r == r && che->col.g == g && che->col.b == b)
+	return che;
+return NULL;
+}
+
diff --git a/gbtools/src/blatSrc/lib/colHash.h b/gbtools/src/blatSrc/lib/colHash.h
new file mode 100644
index 0000000..85d81e8
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/colHash.h
@@ -0,0 +1,41 @@
+/* colHash - stuff for fast lookup of index given an
+ * rgb value. */
+
+/* Copyright (C) 2002 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+#ifndef COLHASH_H
+#define COLHASH_H
+
+#define colHashFunc(r,g,b) (r+g+g+b)
+
+struct colHashEl
+/* An element in a color hash. */
+    {
+    struct colHashEl *next;	/* Next in list. */
+    struct rgbColor col;	/* Color RGB. */
+    int ix;			/* Color Index. */
+    };
+
+struct colHash
+/* A hash on RGB colors. */
+    {
+    struct colHashEl *lists[4*256];	/* Hash chains. */
+    struct colHashEl elBuf[256];	/* Buffer of elements. */
+    struct colHashEl *freeEl;		/* Pointer to next free element. */
+    };
+
+struct colHash *colHashNew();
+/* Get a new color hash. */
+
+void colHashFree(struct colHash **pEl);
+/* Free up color hash. */
+
+struct colHashEl *colHashAdd(struct colHash *cHash, 
+	unsigned r, unsigned g, unsigned b, int ix);
+/* Add new element to color hash. */
+
+struct colHashEl *colHashLookup(struct colHash *cHash, 
+	unsigned r, unsigned g, unsigned b);
+/* Lookup value in hash. */
+
+#endif /* COLHASH_H */
diff --git a/gbtools/src/blatSrc/lib/common.c b/gbtools/src/blatSrc/lib/common.c
new file mode 100644
index 0000000..95b281d
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/common.c
@@ -0,0 +1,3537 @@
+/* Commonly used routines in a wide range of applications.
+ * Strings, singly-linked lists, and a little file i/o.
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "errAbort.h"
+#include "portable.h"
+#include "linefile.h"
+#include "hash.h"
+
+
+void *cloneMem(void *pt, size_t size)
+/* Allocate a new buffer of given size, and copy pt to it. */
+{
+void *newPt = needLargeMem(size);
+memcpy(newPt, pt, size);
+return newPt;
+}
+
+static char *cloneStringZExt(const char *s, int size, int copySize)
+/* Make a zero terminated copy of string in memory */
+{
+char *d = needMem(copySize+1);
+copySize = min(size,copySize);
+memcpy(d, s, copySize);
+d[copySize] = 0;
+return d;
+}
+
+char *cloneStringZ(const char *s, int size)
+/* Make a zero terminated copy of string in memory */
+{
+return cloneStringZExt(s, strlen(s), size);
+}
+
+char *cloneString(const char *s)
+/* Make copy of string in dynamic memory */
+{
+int size = 0;
+if (s == NULL)
+    return NULL;
+size = strlen(s);
+return cloneStringZExt(s, size, size);
+}
+
+char *cloneLongString(char *s)
+/* Make clone of long string. */
+{
+size_t size = strlen(s);
+return cloneMem(s, size+1);
+}
+
+char *catTwoStrings(char *a, char *b)
+/* Allocate new string that is a concatenation of two strings. */
+{
+int aLen = strlen(a), bLen = strlen(b);
+int len = aLen + bLen;
+char *newBuf = needLargeMem(len+1);
+memcpy(newBuf, a, aLen);
+memcpy(newBuf+aLen, b, bLen);
+newBuf[len] = 0;
+return newBuf;
+}
+
+/* Reverse the order of the bytes. */
+void reverseBytes(char *bytes, long length)
+{
+long halfLen = (length>>1);
+char *end = bytes+length;
+char c;
+while (--halfLen >= 0)
+    {
+    c = *bytes;
+    *bytes++ = *--end;
+    *end = c;
+    }
+}
+
+void reverseInts(int *a, int length)
+/* Reverse the order of the integer array. */
+{
+int halfLen = (length>>1);
+int *end = a+length;
+int c;
+while (--halfLen >= 0)
+    {
+    c = *a;
+    *a++ = *--end;
+    *end = c;
+    }
+}
+
+void reverseUnsigned(unsigned *a, int length)
+/* Reverse the order of the unsigned array. */
+{
+int halfLen = (length>>1);
+unsigned *end = a+length;
+unsigned c;
+while (--halfLen >= 0)
+    {
+    c = *a;
+    *a++ = *--end;
+    *end = c;
+    }
+}
+
+void reverseDoubles(double *a, int length)
+/* Reverse the order of the double array. */
+{
+int halfLen = (length>>1);
+double *end = a+length;
+double c;
+while (--halfLen >= 0)
+    {
+    c = *a;
+    *a++ = *--end;
+    *end = c;
+    }
+}
+
+void reverseStrings(char **a, int length)
+/* Reverse the order of the char* array. */
+{
+int halfLen = (length>>1);
+char **end = a+length;
+char *c;
+while (--halfLen >= 0)
+    {
+    c = *a;
+    *a++ = *--end;
+    *end = c;
+    }
+}
+
+/* Swap buffers a and b. */
+void swapBytes(char *a, char *b, int length)
+{
+char c;
+int i;
+
+for (i=0; i<length; ++i)
+    {
+    c = a[i];
+    a[i] = b[i];
+    b[i] = c;
+    }
+}
+
+
+/** List managing routines. */
+
+/* Count up elements in list. */
+int slCount(const void *list)
+{
+struct slList *pt = (struct slList *)list;
+int len = 0;
+
+while (pt != NULL)
+    {
+    len += 1;
+    pt = pt->next;
+    }
+return len;
+}
+
+void *slElementFromIx(void *list, int ix)
+/* Return the ix'th element in list.  Returns NULL
+ * if no such element. */
+{
+struct slList *pt = (struct slList *)list;
+int i;
+for (i=0;i<ix;i++)
+    {
+    if (pt == NULL) return NULL;
+    pt = pt->next;
+    }
+return pt;
+}
+
+int slIxFromElement(void *list, void *el)
+/* Return index of el in list.  Returns -1 if not on list. */
+{
+struct slList *pt;
+int ix = 0;
+
+for (pt = list, ix=0; pt != NULL; pt = pt->next, ++ix)
+    if (el == (void*)pt)
+	return ix;
+return -1;
+}
+
+void *slLastEl(void *list)
+/* Returns last element in list or NULL if none. */
+{
+struct slList *next, *el;
+if ((el = list) == NULL)
+    return NULL;
+while ((next = el->next) != NULL)
+    el = next;
+return el;
+}
+
+/* Add new node to tail of list.
+ * Usage:
+ *    slAddTail(&list, node);
+ * where list and nodes are both pointers to structure
+ * that begin with a next pointer.
+ */
+void slAddTail(void *listPt, void *node)
+{
+struct slList **ppt = (struct slList **)listPt;
+struct slList *n = (struct slList *)node;
+
+while (*ppt != NULL)
+    {
+    ppt = &((*ppt)->next);
+    }
+n->next = NULL;
+*ppt = n;
+}
+
+void *slPopHead(void *vListPt)
+/* Return head of list and remove it from list. (Fast) */
+{
+struct slList **listPt = (struct slList **)vListPt;
+struct slList *el = *listPt;
+if (el != NULL)
+    {
+    *listPt = el->next;
+    el->next = NULL;
+    }
+return el;
+}
+
+void *slPopTail(void *vListPt)
+/* Return tail of list and remove it from list. (Not so fast) */
+{
+struct slList **listPt = (struct slList **)vListPt;
+struct slList *el = *listPt;
+if (el != NULL)
+    {
+    for (;;)
+        {
+        if (el->next == NULL)
+            {
+            *listPt = NULL;
+            break;
+            }
+        listPt = &el->next;
+        el = el->next;
+        }
+    }
+return el;
+}
+
+
+
+void *slCat(void *va, void *vb)
+/* Return concatenation of lists a and b.
+ * Example Usage:
+ *   struct slName *a = getNames("a");
+ *   struct slName *b = getNames("b");
+ *   struct slName *ab = slCat(a,b)
+ */
+{
+struct slList *a = va;
+struct slList *b = vb;
+struct slList *end;
+if (a == NULL)
+    return b;
+for (end = a; end->next != NULL; end = end->next)
+    ;
+end->next = b;
+return a;
+}
+
+void slReverse(void *listPt)
+/* Reverse order of a list.
+ * Usage:
+ *    slReverse(&list);
+ */
+{
+struct slList **ppt = (struct slList **)listPt;
+struct slList *newList = NULL;
+struct slList *el, *next;
+
+next = *ppt;
+while (next != NULL)
+    {
+    el = next;
+    next = el->next;
+    el->next = newList;
+    newList = el;
+    }
+*ppt = newList;
+}
+
+void slFreeList(void *listPt)
+/* Free list */
+{
+struct slList **ppt = (struct slList**)listPt;
+struct slList *next = *ppt;
+struct slList *el;
+
+while (next != NULL)
+    {
+    el = next;
+    next = el->next;
+    freeMem((char*)el);
+    }
+*ppt = NULL;
+}
+
+void slSort(void *pList, int (*compare )(const void *elem1,  const void *elem2))
+/* Sort a singly linked list with Qsort and a temporary array. */
+{
+struct slList **pL = (struct slList **)pList;
+struct slList *list = *pL;
+int count;
+count = slCount(list);
+if (count > 1)
+    {
+    struct slList *el;
+    struct slList **array;
+    int i;
+    array = needLargeMem(count * sizeof(*array));
+    for (el = list, i=0; el != NULL; el = el->next, i++)
+        array[i] = el;
+    qsort(array, count, sizeof(array[0]), compare);
+    list = NULL;
+    for (i=0; i<count; ++i)
+        {
+        array[i]->next = list;
+        list = array[i];
+        }
+    freeMem(array);
+    slReverse(&list);
+    *pL = list;
+    }
+}
+
+void slUniqify(void *pList, int (*compare )(const void *elem1,  const void *elem2), void (*free)())
+/* Return sorted list with duplicates removed.
+ * Compare should be same type of function as slSort's compare (taking
+ * pointers to pointers to elements.  Free should take a simple
+ * pointer to dispose of duplicate element, and can be NULL. */
+{
+struct slList **pSlList = (struct slList **)pList;
+struct slList *oldList = *pSlList;
+struct slList *newList = NULL, *el;
+
+slSort(&oldList, compare);
+while ((el = slPopHead(&oldList)) != NULL)
+    {
+    if ((newList == NULL) || (compare(&newList, &el) != 0))
+        slAddHead(&newList, el);
+    else if (free != NULL)
+        free(el);
+    }
+slReverse(&newList);
+*pSlList = newList;
+}
+
+void slSortMerge(void *pA, void *b, CmpFunction *compare)
+// Merges and sorts a pair of singly linked lists using slSort.
+{
+struct slList **pList = (struct slList **)pA;
+slCat(*pList, b);
+slSort(pList,compare);
+}
+
+void slSortMergeUniq(void *pA, void *b, CmpFunction *compare, void (*free)())
+// Merges and sorts a pair of singly linked lists leaving only unique
+// items via slUniqufy.  duplicate itens are defined by the compare routine
+// returning 0. If free is provided, items dropped from list can disposed of.
+{
+struct slList **pList = (struct slList **)pA;
+*pList = slCat(*pList, b);
+slUniqify(pList,compare,free);
+}
+
+boolean slRemoveEl(void *vpList, void *vToRemove)
+/* Remove element from singly linked list.  Usage:
+ *    slRemove(&list, el);
+ * Returns TRUE if element in list.  */
+{
+struct slList **pList = vpList;
+struct slList *toRemove = vToRemove;
+struct slList *el, *next, *newList = NULL;
+boolean didRemove = FALSE;
+
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    if (el != toRemove)
+	{
+	slAddHead(&newList, el);
+	}
+    else
+        didRemove = TRUE;
+    }
+slReverse(&newList);
+*pList = newList;
+return didRemove;
+}
+
+struct slInt *slIntNew(int x)
+/* Return a new int. */
+{
+struct slInt *a;
+AllocVar(a);
+a->val = x;
+return a;
+}
+
+int slIntCmp(const void *va, const void *vb)
+/* Compare two slInts. */
+{
+const struct slInt *a = *((struct slInt **)va);
+const struct slInt *b = *((struct slInt **)vb);
+return a->val - b->val;
+}
+
+int slIntCmpRev(const void *va, const void *vb)
+/* Compare two slInts in reverse direction. */
+{
+const struct slInt *a = *((struct slInt **)va);
+const struct slInt *b = *((struct slInt **)vb);
+return b->val - a->val;
+}
+
+struct slInt * slIntFind(struct slInt *list, int target)
+/* Find target in slInt list or return NULL */
+{
+struct slInt *i;
+for (i=list;i;i=i->next)
+    if (i->val == target)
+	return i;
+return NULL;
+}
+
+struct slUnsigned *slUnsignedNew(unsigned x)
+/* Return a new int. */
+{
+struct slUnsigned *a;
+AllocVar(a);
+a->val = x;
+return a;
+}
+
+static int doubleCmp(const void *va, const void *vb)
+/* Compare function to sort array of doubles. */
+{
+const double *a = va;
+const double *b = vb;
+double diff = *a - *b;
+if (diff < 0)
+    return -1;
+else if (diff > 0)
+    return 1;
+else
+    return 0;
+}
+
+void doubleSort(int count, double *array)
+/* Sort an array of doubles. */
+{
+if (count > 1)
+qsort(array, count, sizeof(array[0]), doubleCmp);
+}
+
+double doubleMedian(int count, double *array)
+/* Return median value in array.  This will sort
+ * the array as a side effect. */
+{
+double median;
+doubleSort(count, array);
+if ((count&1) == 1)
+    median = array[count>>1];
+else
+    {
+    count >>= 1;
+    median = (array[count] + array[count-1]) * 0.5;
+    }
+return median;
+}
+
+void doubleBoxWhiskerCalc(int count, double *array, double *retMin,
+                          double *retQ1, double *retMedian, double *retQ3, double *retMax)
+/* Calculate what you need to draw a box and whiskers plot from an array of doubles. */
+{
+if (count <= 0)
+    errAbort("doubleBoxWhiskerCalc needs a positive number, not %d for count", count);
+if (count == 1)
+    {
+    *retMin = *retQ1 = *retMedian = *retQ3 = *retMax = array[0];
+    return;
+    }
+doubleSort(count, array);
+double min = array[0];
+double max = array[count-1];
+double median;
+int halfCount = count>>1;
+if ((count&1) == 1)
+    median = array[halfCount];
+else
+    {
+    median = (array[halfCount] + array[halfCount-1]) * 0.5;
+    }
+double q1, q3;
+if (count <= 3)
+    {
+    q1 = 0.5 * (median + min);
+    q3 = 0.5 * (median + max);
+    }
+else
+    {
+    int q1Ix = count/4;
+    int q3Ix = count - 1 - q1Ix;
+    uglyf("count %d, q1Ix %d, q3Ix %d\n", count, q1Ix, q3Ix);
+    q1 = array[q1Ix];
+    q3 = array[q3Ix];
+    }
+*retMin = min;
+*retQ1 = q1;
+*retMedian = median;
+*retQ3 = q3;
+*retMax = max;
+}
+
+struct slDouble *slDoubleNew(double x)
+/* Return a new double. */
+{
+struct slDouble *a;
+AllocVar(a);
+a->val = x;
+return a;
+}
+
+int slDoubleCmp(const void *va, const void *vb)
+/* Compare two slDoubles. */
+{
+const struct slDouble *a = *((struct slDouble **)va);
+const struct slDouble *b = *((struct slDouble **)vb);
+double diff = a->val - b->val;
+if (diff < 0)
+    return -1;
+else if (diff > 0)
+    return 1;
+else
+    return 0;
+}
+
+double slDoubleMedian(struct slDouble *list)
+/* Return median value on list. */
+{
+int i,count = slCount(list);
+struct slDouble *el;
+double *array, median;
+if (count == 0)
+    errAbort("Can't take median of empty list");
+AllocArray(array,count);
+for (i=0, el=list; i<count; ++i, el=el->next)
+    array[i] = el->val;
+median = doubleMedian(count, array);
+freeMem(array);
+return median;
+}
+
+void slDoubleBoxWhiskerCalc(struct slDouble *list, double *retMin,
+                            double *retQ1, double *retMedian, double *retQ3, double *retMax)
+/* Calculate what you need to draw a box and whiskers plot from a list of slDoubles. */
+{
+int i,count = slCount(list);
+struct slDouble *el;
+double *array;
+if (count == 0)
+    errAbort("Can't take do slDoubleBoxWhiskerCalc of empty list");
+AllocArray(array,count);
+for (i=0, el=list; i<count; ++i, el=el->next)
+    array[i] = el->val;
+doubleBoxWhiskerCalc(count, array, retMin, retQ1, retMedian, retQ3, retMax);
+freeMem(array);
+}
+
+static int intCmp(const void *va, const void *vb)
+/* Compare function to sort array of ints. */
+{
+const int *a = va;
+const int *b = vb;
+int diff = *a - *b;
+if (diff < 0)
+    return -1;
+else if (diff > 0)
+    return 1;
+else
+    return 0;
+}
+
+void intSort(int count, int *array)
+/* Sort an array of ints. */
+{
+if (count > 1)
+qsort(array, count, sizeof(array[0]), intCmp);
+}
+
+int intMedian(int count, int *array)
+/* Return median value in array.  This will sort
+ * the array as a side effect. */
+{
+int median;
+intSort(count, array);
+if ((count&1) == 1)
+    median = array[count>>1];
+else
+    {
+    count >>= 1;
+    median = (array[count] + array[count-1]) * 0.5;
+    }
+return median;
+}
+
+
+struct slName *newSlName(char *name)
+/* Return a new name. */
+{
+struct slName *sn;
+if (name != NULL)
+    {
+    int len = strlen(name);
+    sn = needMem(sizeof(*sn)+len);
+    strcpy(sn->name, name);
+    return sn;
+    }
+else
+    {
+    AllocVar(sn);
+    }
+return sn;
+}
+
+struct slName *slNameNewN(char *name, int size)
+/* Return new slName of given size. */
+{
+struct slName *sn = needMem(sizeof(*sn) + size);
+memcpy(sn->name, name, size);
+return sn;
+}
+
+int slNameCmpCase(const void *va, const void *vb)
+/* Compare two slNames, ignore case. */
+{
+const struct slName *a = *((struct slName **)va);
+const struct slName *b = *((struct slName **)vb);
+return strcasecmp(a->name, b->name);
+}
+
+void slNameSortCase(struct slName **pList)
+/* Sort slName list, ignore case. */
+{
+slSort(pList, slNameCmpCase);
+}
+
+int slNameCmp(const void *va, const void *vb)
+/* Compare two slNames. */
+{
+const struct slName *a = *((struct slName **)va);
+const struct slName *b = *((struct slName **)vb);
+return strcmp(a->name, b->name);
+}
+
+int slNameCmpStringsWithEmbeddedNumbers(const void *va, const void *vb)
+/* Compare strings such as gene names that may have embedded numbers,
+ * so that bmp4a comes before bmp14a */
+{
+const struct slName *a = *((struct slName **)va);
+const struct slName *b = *((struct slName **)vb);
+return cmpStringsWithEmbeddedNumbers(a->name, b->name);
+}
+
+
+
+void slNameSort(struct slName **pList)
+/* Sort slName list. */
+{
+slSort(pList, slNameCmp);
+}
+
+boolean slNameInList(struct slName *list, char *string)
+/* Return true if string is in name list -- case insensitive. */
+{
+struct slName *el;
+for (el = list; el != NULL; el = el->next)
+    if (sameWord(string, el->name))
+        return TRUE;
+return FALSE;
+}
+
+boolean slNameInListUseCase(struct slName *list, char *string)
+/* Return true if string is in name list -- case sensitive. */
+{
+struct slName *el;
+for (el = list; el != NULL; el = el->next)
+    if (string != NULL && !strcmp(string, el->name))
+        return TRUE;
+return FALSE;
+}
+
+void *slNameFind(void *list, char *string)
+/* Return first element of slName list (or any other list starting
+ * with next/name fields) that matches string. */
+{
+struct slName *el;
+for (el = list; el != NULL; el = el->next)
+    if (sameWord(string, el->name))
+        return el;
+return NULL;
+}
+
+int slNameFindIx(struct slName *list, char *string)
+/* Return index of first element of slName list (or any other
+ * list starting with next/name fields) that matches string.
+ * Return -1 if not found. */
+{
+struct slName *el;
+int ix = 0;
+for (el = list; el != NULL; el = el->next, ix++)
+    if (sameString(string, el->name))
+        return ix;
+return -1;
+}
+
+char *slNameStore(struct slName **pList, char *string)
+/* Put string into list if it's not there already.
+ * Return the version of string stored in list. */
+{
+struct slName *el;
+for (el = *pList; el != NULL; el = el->next)
+    {
+    if (sameString(string, el->name))
+	return el->name;
+    }
+el = newSlName(string);
+slAddHead(pList, el);
+return el->name;
+}
+
+struct slName *slNameAddHead(struct slName **pList, char *name)
+/* Add name to start of list and return it. */
+{
+struct slName *el = slNameNew(name);
+slAddHead(pList, el);
+return el;
+}
+
+struct slName *slNameAddTail(struct slName **pList, char *name)
+/* Add name to end of list (not efficient for long lists),
+ * and return it. */
+{
+struct slName *el = slNameNew(name);
+slAddTail(pList, el);
+return el;
+}
+
+struct slName *slNameCloneList(struct slName *list)
+/* Return clone of list. */
+{
+struct slName *el, *newEl, *newList = NULL;
+for (el = list; el != NULL; el = el->next)
+    {
+    newEl = slNameNew(el->name);
+    slAddHead(&newList, newEl);
+    }
+slReverse(&newList);
+return newList;
+}
+
+
+struct slName *slNameListFromString(char *s, char delimiter)
+/* Return list of slNames gotten from parsing delimited string.
+ * The final delimiter is optional. a,b,c  and a,b,c, are equivalent
+ * for comma-delimited lists. */
+{
+char *e;
+struct slName *list = NULL, *el;
+while (s != NULL && s[0] != 0)
+    {
+    e = strchr(s, delimiter);
+    if (e == NULL)
+	el = slNameNew(s);
+    else
+	{
+        el = slNameNewN(s, e-s);
+	e += 1;
+	}
+    slAddHead(&list, el);
+    s = e;
+    }
+slReverse(&list);
+return list;
+}
+
+struct slName *slNameListOfUniqueWords(char *text,boolean respectQuotes)
+// Return list of unique words found by parsing string delimited by whitespace.
+// If respectQuotes then ["Lucy and Ricky" 'Fred and Ethyl'] will yield 2 slNames no quotes
+{
+struct slName *list = NULL;
+char *word = NULL;
+while (text != NULL)
+    {
+    if (respectQuotes)
+        {
+        word = nextWordRespectingQuotes(&text);
+        if (word != NULL)
+            {
+            if (word[0] == '"')
+                stripChar(word, '"');
+            else if (word[0] == '\'')
+                stripChar(word, '\'');
+            }
+        }
+    else
+        word = nextWord(&text);
+    if (word)
+        slNameStore(&list, word);
+    else
+        break;
+    }
+
+slReverse(&list);
+return list;
+}
+
+struct slName *slNameListFromStringArray(char *stringArray[], int arraySize)
+/* Return list of slNames from an array of strings of length arraySize.
+ * If a string in the array is NULL, the array will be treated as
+ * NULL-terminated (shorter than arraySize). */
+{
+char *s;
+struct slName *list = NULL, *el;
+int i;
+if (stringArray == NULL)
+    return NULL;
+for (i = 0;  i < arraySize;  i++)
+    {
+    s = stringArray[i];
+    if (s == NULL)
+	break;
+    el = slNameNew(s);
+    slAddHead(&list, el);
+    }
+slReverse(&list);
+return list;
+}
+
+char *slNameListToString(struct slName *list, char delimiter)
+/* Return string created by joining all names with the delimiter. */
+{
+struct slName *el;
+int elCount = 0;
+int len = 0;
+char del[2];
+char *s;
+
+del[0] = delimiter;
+del[1] = '\0';
+
+for (el = list; el != NULL; el = el->next, elCount++)
+	len += strlen(el->name);
+len += elCount;
+
+AllocArray(s, len);
+
+for (el = list; el != NULL; el = el->next)
+	{
+	strcat(s, el->name);
+	if (el->next != NULL)
+		strcat(s, del);
+	}
+return s;
+}
+
+struct slName *slNameLoadReal(char *fileName)
+/* load file lines that are not blank or start with a '#' into a slName
+ * list */
+{
+struct slName *lines = NULL;
+char *line;
+struct lineFile *lf = lineFileOpen(fileName, TRUE);
+while (lineFileNextReal(lf, &line))
+    slSafeAddHead(&lines, slNameNew(line));
+lineFileClose(&lf);
+slReverse(&lines);
+return lines;
+}
+
+struct slName *slNameIntersection(struct slName *a, struct slName *b)
+/* return intersection of two slName lists.  */
+{
+struct hash *hashA = newHash(0);
+struct slName *el, *retval = NULL;
+
+for (el = a; el != NULL; el = el->next)
+    hashAddInt(hashA, el->name, 1);
+for (el = b; el != NULL; el = el->next)
+    if(hashLookup(hashA, el->name) != NULL)
+        slNameAddHead(&retval, el->name);
+hashFree(&hashA);
+return retval;
+}
+
+struct slRef *refOnList(struct slRef *refList, void *val)
+/* Return ref if val is already on list, otherwise NULL. */
+{
+struct slRef *ref;
+for (ref = refList; ref != NULL; ref = ref->next)
+    if (ref->val == val)
+        return ref;
+return NULL;
+}
+
+struct slRef *slRefNew(void *val)
+/* Create new slRef element. */
+{
+struct slRef *ref;
+AllocVar(ref);
+ref->val = val;
+return ref;
+}
+
+void refAdd(struct slRef **pRefList, void *val)
+/* Add reference to list. */
+{
+struct slRef *ref;
+AllocVar(ref);
+ref->val = val;
+slAddHead(pRefList, ref);
+}
+
+void refAddUnique(struct slRef **pRefList, void *val)
+/* Add reference to list if not already on list. */
+{
+if (refOnList(*pRefList, val) == NULL)
+    {
+    refAdd(pRefList, val);
+    }
+}
+
+void slRefFreeListAndVals(struct slRef **pList)
+/* Free up (with simple freeMem()) each val on list, and the list itself as well. */
+{
+struct slRef *el, *next;
+
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    freeMem(el->val);
+    freeMem(el);
+    }
+*pList = NULL;
+}
+
+struct slRef *refListFromSlList(void *list)
+/* Make a reference list that mirrors a singly-linked list. */
+{
+struct slList *el;
+struct slRef *refList = NULL, *ref;
+for (el= list; el != NULL; el = el->next)
+    {
+    ref = slRefNew(el);
+    slAddHead(&refList, ref);
+    }
+slReverse(&refList);
+return refList;
+}
+
+
+struct slPair *slPairNew(char *name, void *val)
+/* Allocate new name/value pair. */
+{
+struct slPair *el;
+AllocVar(el);
+el->name = cloneString(name);
+el->val = val;
+return el;
+}
+
+void slPairAdd(struct slPair **pList, char *name, void *val)
+/* Add new slPair to head of list. */
+{
+struct slPair *el = slPairNew(name, val);
+slAddHead(pList, el);
+}
+
+void slPairFree(struct slPair **pEl)
+/* Free up struct and name.  (Don't free up values.) */
+{
+struct slPair *el = *pEl;
+if (el != NULL)
+    {
+    freeMem(el->name);
+    freez(pEl);
+    }
+}
+
+void slPairFreeList(struct slPair **pList)
+/* Free up list.  (Don't free up values.) */
+{
+struct slPair *el, *next;
+
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    slPairFree(&el);
+    }
+*pList = NULL;
+}
+
+void slPairFreeVals(struct slPair *list)
+/* Free up all values on list. */
+{
+struct slPair *el;
+for (el = list; el != NULL; el = el->next)
+    freez(&el->val);
+}
+
+void slPairFreeValsAndList(struct slPair **pList)
+/* Free up all values on list and list itself */
+{
+slPairFreeVals(*pList);
+slPairFreeList(pList);
+}
+
+struct slPair *slPairFind(struct slPair *list, char *name)
+/* Return list element of given name, or NULL if not found. */
+{
+struct slPair *el;
+for (el = list; el != NULL; el = el->next)
+    if (sameString(name, el->name))
+        break;
+return el;
+}
+
+void *slPairFindVal(struct slPair *list, char *name)
+/* Return value associated with name in list, or NULL if not found. */
+{
+struct slPair *el = slPairFind(list, name);
+if (el == NULL)
+    return NULL;
+return el->val;
+}
+
+struct slPair *slPairListFromString(char *str,boolean respectQuotes)
+// Return slPair list parsed from list in string like:  [name1=val1 name2=val2 ...]
+// if respectQuotes then string can have double quotes: [name1="val 1" "name 2"=val2 ...]
+//    resulting pair strips quotes: {name1}={val 1},{name 2}={val2}
+// Returns NULL if parse error.  Free this up with slPairFreeValsAndList.
+{
+char *s = skipLeadingSpaces(str);  // Would like to remove this and tighten up the standard someday.
+if (isEmpty(s))
+    return NULL;
+
+struct slPair *list = NULL;
+char name[1024];
+char val[1024];
+char buf[1024];
+bool inQuote = FALSE;
+char *b = buf;
+char sep = '=';
+char c = ' ';
+int mode = 0;
+while(1)
+    {
+    c = *s++;
+    if (mode == 0 || mode == 2) // reading name or val
+	{
+	boolean term = FALSE;
+	if (respectQuotes && b == buf && !inQuote && c == '"')
+	    inQuote = TRUE;
+	else if (inQuote && c == '"')
+	    term = TRUE;
+	else if ((c == sep || c == 0) && !inQuote)
+	    {
+	    term = TRUE;
+	    --s;  // rewind
+	    }
+	else if (c == ' ' && !inQuote)
+	    {
+	    warn("slPairListFromString: Unexpected whitespace in %s", str);
+	    return NULL;
+	    }
+	else if (c == 0 && inQuote)
+	    {
+	    warn("slPairListFromString: Unterminated quote in %s", str);
+	    return NULL;
+	    }
+	else
+	    {
+	    *b++ = c;
+	    if ((b - buf) > sizeof buf)
+		{
+		warn("slPairListFromString: pair name or value too long in %s", str);
+		return NULL;
+		}
+	    }
+	if (term)
+	    {
+	    inQuote = FALSE;
+	    *b = 0;
+	    if (mode == 0)
+		{
+		safecpy(name, sizeof name, buf);
+		if (strlen(name)<1)
+		    {
+		    warn("slPairListFromString: Pair name cannot be empty in %s", str);
+		    return NULL;
+		    }
+		// Shall we check for name being alphanumeric, at least for the respectQuotes=FALSE case?
+		}
+	    else // mode == 2
+                {
+		safecpy(val, sizeof val, buf);
+		if (!respectQuotes && (hasWhiteSpace(name) || hasWhiteSpace(val))) // should never happen
+		    {
+		    warn("slPairListFromString() Unexpected white space in name=value pair: [%s]=[%s] in string=[%s]\n", name, val, str);
+		    break;
+		    }
+		slPairAdd(&list, name, cloneString(val));
+		}
+	    ++mode;
+	    }
+	}
+    else if (mode == 1) // read required "=" sign
+	{
+	if (c != '=')
+	    {
+	    warn("slPairListFromString: Expected character = after name in %s", str);
+	    return NULL;
+            }
+	++mode;
+	sep = ' ';
+	b = buf;
+	}
+    else // (mode == 3) reading optional separating space
+	{
+	if (c == 0)
+	    break;
+	if (c != ' ')
+	    {
+	    mode = 0;
+	    --s;
+	    b = buf;
+	    sep = '=';
+	    }
+	}
+    }
+slReverse(&list);
+return list;
+}
+
+char *slPairListToString(struct slPair *list,boolean quoteIfSpaces)
+// Returns an allocated string of pairs in form of [name1=val1 name2=val2 ...]
+// If requested, will wrap name or val in quotes if contain spaces: [name1="val 1" "name 2"=val2]
+{
+// Don't rely on dyString.  We should do the accounting ourselves and not create extra dependencies.
+int count = 0;
+struct slPair *pair = list;
+for (;pair != NULL; pair = pair->next)
+    {
+    assert(pair->name != NULL && pair->val != NULL); // Better assert and get this over with,
+                                                     // complete with stack
+    count += strlen(pair->name);
+    count += strlen((char *)(pair->val));
+    count += 2; // = and ' ' delimit
+    if (quoteIfSpaces)
+        {
+        if (hasWhiteSpace(pair->name))
+            count += 2; // " and "
+        if (hasWhiteSpace((char *)(pair->val)))
+            count += 2; // " and "
+        }
+    }
+if (count == 0)
+    return NULL;
+
+char *str = needMem(count+5); // A bit of slop
+
+char *strPtr = str;
+for (pair = list; pair != NULL; pair = pair->next, strPtr += strlen(strPtr))
+    {
+    if (pair != list) // Not first cycle
+        *strPtr++ = ' ';
+    if (hasWhiteSpace(pair->name))
+        {
+        if (quoteIfSpaces)
+            sprintf(strPtr,"\"%s\"=",pair->name);
+        else
+            {
+            warn("slPairListToString() Unexpected white space in name: [%s]\n", pair->name);
+            sprintf(strPtr,"%s=",pair->name); // warn but still make string
+            }
+        }
+    else
+        sprintf(strPtr,"%s=",pair->name);
+    strPtr += strlen(strPtr);
+    if (hasWhiteSpace((char *)(pair->val)))
+        {
+        if (quoteIfSpaces)
+            sprintf(strPtr,"\"%s\"",(char *)(pair->val));
+        else
+            {
+            warn("slPairListToString() Unexpected white space in val: [%s]\n", (char *)(pair->val));
+            sprintf(strPtr,"%s",(char *)(pair->val)); // warn but still make string
+            }
+        }
+    else
+        sprintf(strPtr,"%s",(char *)(pair->val));
+    }
+return str;
+}
+
+char *slPairNameToString(struct slPair *list, char delimiter,boolean quoteIfSpaces)
+// Return string created by joining all names (ignoring vals) with the delimiter.
+// If requested, will wrap name in quotes if contain spaces: [name1,"name 2" ...]
+{
+int elCount = 0;
+int count = 0;
+struct slPair *pair = list;
+for (; pair != NULL; pair = pair->next, elCount++)
+    {
+    assert(pair->name != NULL);
+    count += strlen(pair->name);
+    if (quoteIfSpaces && hasWhiteSpace(pair->name))
+        count += 2;
+    }
+count += elCount;
+if (count == 0)
+    return NULL;
+
+char *str = needMem(count+5); // A bit of slop
+
+char *strPtr = str;
+for (pair = list; pair != NULL; pair = pair->next, strPtr += strlen(strPtr))
+    {
+    if (pair != list)
+        *strPtr++ = delimiter;
+    if (hasWhiteSpace(pair->name))
+        {
+        if (quoteIfSpaces)
+            sprintf(strPtr,"\"%s\"",pair->name);
+        else
+            {
+            if (delimiter == ' ')  // if delimied by commas, this is entirely okay!
+                warn("slPairListToString() Unexpected white space in name delimied by space: "
+                     "[%s]\n", pair->name);
+            sprintf(strPtr,"%s",pair->name); // warn but still make string
+            }
+        }
+    else
+        sprintf(strPtr,"%s",pair->name);
+    }
+return str;
+}
+
+int slPairCmpCase(const void *va, const void *vb)
+/* Compare two slPairs, ignore case. */
+{
+const struct slPair *a = *((struct slPair **)va);
+const struct slPair *b = *((struct slPair **)vb);
+return strcasecmp(a->name, b->name);
+}
+
+void slPairSortCase(struct slPair **pList)
+/* Sort slPair list, ignore case. */
+{
+slSort(pList, slPairCmpCase);
+}
+
+int slPairCmp(const void *va, const void *vb)
+/* Compare two slPairs. */
+{
+const struct slPair *a = *((struct slPair **)va);
+const struct slPair *b = *((struct slPair **)vb);
+return strcmp(a->name, b->name);
+}
+
+int slPairValCmpCase(const void *va, const void *vb)
+/* Case insensitive compare two slPairs on their values (must be string). */
+{
+const struct slPair *a = *((struct slPair **)va);
+const struct slPair *b = *((struct slPair **)vb);
+return strcasecmp((char *)(a->val), (char *)(b->val));
+}
+
+int slPairValCmp(const void *va, const void *vb)
+/* Compare two slPairs on their values (must be string). */
+{
+const struct slPair *a = *((struct slPair **)va);
+const struct slPair *b = *((struct slPair **)vb);
+return strcmp((char *)(a->val), (char *)(b->val));
+}
+
+void slPairValSortCase(struct slPair **pList)
+/* Sort slPair list on values (must be string), ignore case. */
+{
+slSort(pList, slPairValCmpCase);
+}
+
+void slPairValSort(struct slPair **pList)
+/* Sort slPair list on values (must be string). */
+{
+slSort(pList, slPairValCmp);
+}
+
+int slPairIntCmp(const void *va, const void *vb)
+// Compare two slPairs on their integer values.
+{
+const struct slPair *a = *((struct slPair **)va);
+const struct slPair *b = *((struct slPair **)vb);
+return ((char *)(a->val) - (char *)(b->val)); // cast works and val is 0 vased integer
+}
+
+void slPairIntSort(struct slPair **pList)
+// Sort slPair list on integer values.
+{
+slSort(pList, slPairIntCmp);
+}
+
+int slPairAtoiCmp(const void *va, const void *vb)
+// Compare two slPairs on their strings interpreted as integer values.
+{
+const struct slPair *a = *((struct slPair **)va);
+const struct slPair *b = *((struct slPair **)vb);
+return (atoi((char *)(a->val)) - atoi((char *)(b->val)));
+}
+
+void slPairValAtoiSort(struct slPair **pList)
+// Sort slPair list on string values interpreted as integers.
+{
+slSort(pList, slPairAtoiCmp);
+}
+
+void gentleFree(void *pt)
+{
+if (pt != NULL) freeMem((char*)pt);
+}
+
+int differentWord(char *s1, char *s2)
+/* strcmp ignoring case - returns zero if strings are
+ * the same (ignoring case) otherwise returns difference
+ * between first non-matching characters. */
+{
+char c1, c2;
+for (;;)
+    {
+    c1 = toupper(*s1++);
+    c2 = toupper(*s2++);
+    if (c1 != c2) /* Takes care of end of string in one but not the other too */
+	return c2-c1;
+    if (c1 == 0)  /* Take care of end of string in both. */
+	return 0;
+    }
+}
+
+int differentStringNullOk(char *a, char *b)
+/* Returns 0 if two strings (either of which may be NULL)
+ * are the same.  Otherwise it returns a positive or negative
+ * number depending on the alphabetical order of the two
+ * strings.
+ * This is basically a strcmp that can handle NULLs in
+ * the input.  If used in a sort the NULLs will end
+ * up before any of the cases with data.   */
+{
+if (a == b)
+    return FALSE;
+else if (a == NULL)
+    return -1;
+else if (b == NULL)
+    return 1;
+else
+    return strcmp(a,b) != 0;
+}
+
+boolean startsWith(const char *start, const char *string)
+/* Returns TRUE if string begins with start. */
+{
+char c;
+int i;
+
+for (i=0; ;i += 1)
+    {
+    if ((c = start[i]) == 0)
+        return TRUE;
+    if (string[i] != c)
+        return FALSE;
+    }
+}
+
+boolean startsWithWord(char *firstWord, char *line)
+/* Return TRUE if first white-space-delimited word in line
+ * is same as firstWord.  Comparison is case sensitive. */
+{
+int len = strlen(firstWord);
+int i;
+for (i=0; i<len; ++i)
+   if (firstWord[i] != line[i])
+       return FALSE;
+char c = line[len];
+return c == 0 || isspace(c);
+}
+
+boolean startsWithWordByDelimiter(char *firstWord,char delimit, char *line)
+/* Return TRUE if first word in line is same as firstWord as delimited by delimit.
+   Comparison is case sensitive. Delimit of ' ' uses isspace() */
+{
+if (delimit == ' ')
+    return startsWithWord(firstWord,line);
+if (!startsWith(firstWord,line))
+    return FALSE;
+char c = line[strlen(firstWord)];
+return (c == '\0' || c == delimit);
+}
+
+char * findWordByDelimiter(char *word,char delimit, char *line)
+/* Return pointer to first occurance of word in line broken by 'delimit' char
+   Comparison is case sensitive. Delimit of ' ' uses isspace() */
+{
+int ix;
+char *p=line;
+while (p!=NULL && *p!='\0')
+    {
+    for (ix = 0;
+         word[ix] != '\0' && word[ix] == *p;
+         ix++,p++) ; // advance as long as they match
+    if (ix == strlen(word))
+        {
+        if (*p=='\0'
+        || *p==delimit
+        || (delimit == ' ' && isspace(*p)))
+            return p - ix; // matched and delimited
+        }
+    for (;   *p!='\0' && *p!=delimit && (delimit != ' ' || !isspace(*p)); p++)
+        ;  // advance to next delimit
+    if (*p!='\0')
+        {
+        p++;
+        continue;  // delimited so start again after delimit
+        }
+    }
+return NULL;
+}
+
+char *rStringIn(char *needle, char *haystack)
+/* Return last position of needle in haystack, or NULL if it's not there. */
+{
+int nSize = strlen(needle);
+char *pos;
+for (pos = haystack + strlen(haystack) - nSize; pos >= haystack; pos -= 1)
+    {
+    if (memcmp(needle, pos, nSize) == 0)
+        return pos;
+    }
+return NULL;
+}
+
+char *stringBetween(char *start, char *end, char *haystack)
+/* Return string between start and end strings, or NULL if
+ * none found.  The first such instance is returned.
+ * String must be freed by caller. */
+{
+char *pos, *p;
+int len;
+if ((p = stringIn(start, haystack)) != NULL)
+    {
+    pos = p + strlen(start);
+    if ((p = stringIn(end, pos)) != NULL)
+        {
+        len = p - pos;
+        pos = cloneMem(pos, len + 1);
+        pos[len] = 0;
+        return pos;
+        }
+    }
+return NULL;
+}
+
+boolean endsWith(char *string, char *end)
+/* Returns TRUE if string ends with end. */
+{
+int sLen, eLen, offset;
+sLen = strlen(string);
+eLen = strlen(end);
+offset = sLen - eLen;
+if (offset < 0)
+    return FALSE;
+return sameString(string+offset, end);
+}
+
+char lastChar(char *s)
+/* Return last character in string. */
+{
+if (s == NULL || s[0] == 0)
+    return 0;
+return s[strlen(s)-1];
+}
+
+void trimLastChar(char *s)
+/* Erase last character in string. */
+{
+int len = strlen(s);
+if (len > 0)
+   s[len-1] = 0;
+}
+
+char *lastNonwhitespaceChar(char *s)
+// Return pointer to last character in string that is not whitespace.
+{
+if (s == NULL || s[0] == 0)
+    return NULL;
+
+char *sPos = s + (strlen(s) - 1);
+for (;sPos >= s;sPos--)
+    {
+    if (!isspace(*sPos))
+        return sPos;
+    }
+return NULL;
+}
+
+char *matchingCharBeforeInLimits(char *limit, char *s, char c)
+/* Look for character c sometime before s, but going no further than limit.
+ * Return NULL if not found. */
+{
+while (--s >= limit)
+    if (*s == c)
+        return s;
+return NULL;
+}
+
+char *memMatch(char *needle, int nLen, char *haystack, int hLen)
+/* Returns first place where needle (of nLen chars) matches
+ * haystack (of hLen chars) */
+{
+char c = *needle++;
+nLen -= 1;
+hLen -= nLen;
+while (--hLen >= 0)
+    {
+    if (*haystack++ == c && memcmp(needle, haystack, nLen) == 0)
+        {
+        return haystack-1;
+        }
+    }
+return NULL;
+}
+
+void toUpperN(char *s, int n)
+/* Convert a section of memory to upper case. */
+{
+int i;
+for (i=0; i<n; ++i)
+    s[i] = toupper(s[i]);
+}
+
+void toLowerN(char *s, int n)
+/* Convert a section of memory to lower case. */
+{
+int i;
+for (i=0; i<n; ++i)
+    s[i] = tolower(s[i]);
+}
+
+void toggleCase(char *s, int size)
+/* toggle upper and lower case chars in string. */
+{
+char c;
+int i;
+for (i=0; i<size; ++i)
+    {
+    c = s[i];
+    if (isupper(c))
+        c = tolower(c);
+    else if (islower(c))
+        c = toupper(c);
+    s[i] = c;
+    }
+}
+
+
+char *strUpper(char *s)
+/* Convert entire string to upper case. */
+{
+char c;
+char *ss=s;
+for (;;)
+    {
+    if ((c = *ss) == 0) break;
+    *ss++ = toupper(c);
+    }
+return s;
+}
+
+char *replaceChars(char *string, char *old, char *new)
+/*
+  Replaces the old with the new. The old and new string need not be of equal size
+ Can take any length string.
+ Return value needs to be freeMem'd.
+*/
+{
+int numTimes = 0;
+int oldLen = strlen(old);
+int newLen = strlen(new);
+int strLen = 0;
+char *result = NULL;
+char *ptr = strstr(string, old);
+char *resultPtr = NULL;
+
+while(NULL != ptr)
+    {
+    numTimes++;
+    ptr += oldLen;
+    ptr = strstr(ptr, old);
+    }
+strLen = max(strlen(string) + (numTimes * (newLen - oldLen)), strlen(string));
+result = needMem(strLen + 1);
+
+ptr = strstr(string, old);
+resultPtr = result;
+while(NULL != ptr)
+    {
+    strLen = ptr - string;
+    strcpy(resultPtr, string);
+    string = ptr + oldLen;
+
+    resultPtr += strLen;
+    strcpy(resultPtr, new);
+    resultPtr += newLen;
+    ptr = strstr(string, old);
+    }
+
+strcpy(resultPtr, string);
+return result;
+}
+
+int strSwapStrs(char *string, int sz,char *oldStr, char *newStr)
+/* Swaps all occurrences of the old with the new in string. Need not be same size
+   Swaps in place but restricted by sz.  Returns count of swaps or -1 for sz failure. */
+{
+// WARNING: called at low level, so no errors allowed.
+int count = 0;
+char *p=NULL;
+for(p=strstr(string,oldStr);p!=NULL;p=strstr(p+strlen(oldStr),oldStr))
+    count++;
+if (count == 0)
+    return 0;
+if((strlen(string)+(count*(strlen(newStr) - strlen(oldStr))))>=sz)
+    return -1;
+for(p=strstr(string,oldStr);p!=NULL;p=strstr(p+strlen(newStr),oldStr))
+    {
+    memmove(p+strlen(newStr),p+strlen(oldStr),strlen(p+strlen(oldStr))+1); // NULL at end is also moved!
+    memcpy(p,newStr,strlen(newStr));
+    }
+return count;
+}
+
+char *strLower(char *s)
+/* Convert entire string to lower case */
+{
+char c;
+char *ss=s;
+for (;;)
+    {
+    if ((c = *ss) == 0) break;
+    *ss++ = tolower(c);
+    }
+return s;
+}
+
+char * memSwapChar(char *s, int len, char oldChar, char newChar)
+/* Substitute newChar for oldChar throughout memory of given length. */
+{
+int ix=0;
+for (;ix<len;ix++)
+    {
+    if (s[ix] == oldChar)
+        s[ix] =  newChar;
+    }
+return s;
+}
+
+void stripChar(char *s, char c)
+/* Remove all occurences of c from s. */
+{
+char *in = s, *out = s;
+char b;
+
+for (;;)
+    {
+    b = *out = *in++;
+    if (b == 0)
+       break;
+    if (b != c)
+       ++out;
+    }
+}
+
+char *stripEnclosingChar(char *inout,char encloser)
+// Removes enclosing char if found at both beg and end, preserving pointer
+// Note: handles brackets '(','{' and '[' by complement at end
+{
+if (inout == NULL || strlen(inout) < 2 || *inout != encloser)
+    return inout;
+
+char *end = inout + (strlen(inout) - 1);
+char closer = encloser;
+switch (closer)
+    {
+    case '(': closer = ')'; break;
+    case '{': closer = '}'; break;
+    case '[': closer = ']'; break;
+    default: break;
+    }
+if (*end  != closer)
+    return inout;
+*end = '\0';
+return memmove(inout,inout+1,strlen(inout));  // use memmove to safely copy in place
+}
+
+void stripString(char *s, char *strip)
+/* Remove all occurences of strip from s. */
+{
+char c, *in = s, *out = s;
+int stripSize = strlen(strip);
+char stripFirst = strip[0];
+
+while ((c = *in) != 0)
+    {
+    c = *in;
+    if (c == stripFirst)
+        {
+	if (startsWith(strip, in))
+	    {
+	    in += stripSize;
+	    continue;
+	    }
+	}
+    *out = c;
+    ++out;
+    ++in;
+    }
+*out = 0;
+}
+
+int countCase(char *s,boolean upper)
+// Count letters with case (upper or lower)
+{
+char a;
+int count = 0;
+while ((a = *s++) != 0)
+    if (( upper && isupper(a))
+    ||  (!upper && islower(a)))
+        ++count;
+return count;
+}
+
+int countChars(char *s, char c)
+/* Return number of characters c in string s. */
+{
+char a;
+int count = 0;
+while ((a = *s++) != 0)
+    if (a == c)
+        ++count;
+return count;
+}
+
+int countCharsN(char *s, char c, int size)
+/* Return number of characters c in string s of given size. */
+{
+int i;
+int count = 0;
+for (i=0; i<size; ++i)
+    if (s[i] == c)
+        ++count;
+return count;
+}
+
+int countLeadingChars(char *s, char c)
+/* Count number of characters c at start of string. */
+{
+int count = 0;
+while (*s++ == c)
+   ++count;
+return count;
+}
+
+int countLeadingDigits(const char *s)
+/* Return number of leading digits in s */
+{
+int count = 0;
+while (isdigit(*s))
+   {
+   ++count;
+   ++s;
+   }
+return count;
+}
+
+int countLeadingNondigits(const char *s)
+/* Count number of leading non-digit characters in s. */
+{
+int count = 0;
+char c;
+while ((c = *s++) != 0)
+   {
+   if (isdigit(c))
+       break;
+   ++count;
+   }
+return count;
+}
+
+int countSeparatedItems(char *string, char separator)
+/* Count number of items in string you would parse out with given
+ * separator,  assuming final separator is optional. */
+{
+int count = 0;
+char c, lastC = 0;
+while ((c = *string++) != 0)
+    {   
+    if (c == separator)
+       ++count;
+    lastC = c;
+    }
+if (lastC != separator && lastC != 0)
+    ++count;
+return count;
+}
+
+int cmpStringsWithEmbeddedNumbers(const char *a, const char *b)
+/* Compare strings such as gene names that may have embedded numbers,
+ * so that bmp4a comes before bmp14a */
+{
+for (;;)
+   {
+   /* Figure out number of digits at start, and do numerical comparison if there
+    * are any.  If numbers agree step over numerical part, otherwise return difference. */
+   int aNum = countLeadingDigits(a);
+   int bNum = countLeadingDigits(b);
+   if (aNum >= 0 && bNum >= 0)
+       {
+       int diff = atoi(a) - atoi(b);
+       if (diff != 0)
+           return diff;
+       a += aNum;
+       b += bNum;
+       }
+
+   /* Count number of non-digits at start. */
+   int aNonNum = countLeadingNondigits(a);
+   int bNonNum = countLeadingNondigits(b);
+
+   // If different sizes of non-numerical part, then don't match, let strcmp sort out how
+   if (aNonNum != bNonNum)
+        return strcmp(a,b);
+   // If no characters left then they are the same!
+   else if (aNonNum == 0)
+       return 0;
+   // Non-numerical part is the same length and non-zero.  See if it is identical.  Return if not.
+   else
+       {
+        int diff = memcmp(a,b,aNonNum);
+       if (diff != 0)
+            return diff;
+       a += aNonNum;
+       b += bNonNum;
+       }
+   }
+}
+
+int cmpWordsWithEmbeddedNumbers(const char *a, const char *b)
+/* Case insensitive version of cmpStringsWithEmbeddedNumbers. */
+{
+char *A = cloneString(a);
+char *B = cloneString(b);
+int diff = cmpStringsWithEmbeddedNumbers(strUpper(A), strUpper(B));
+freeMem(A);
+freeMem(B);
+return diff;
+}
+
+int countSame(char *a, char *b)
+/* Count number of characters that from start in a,b that are same. */
+{
+char c;
+int i;
+int count = 0;
+for (i=0; ; ++i)
+   {
+   c = a[i];
+   if (b[i] != c)
+       break;
+   if (c == 0)
+       break;
+   ++count;
+   }
+return count;
+}
+
+
+/* int chopString(in, sep, outArray, outSize); */
+/* This chops up the input string (cannabilizing it)
+ * into an array of zero terminated strings in
+ * outArray.  It returns the number of strings.
+ * If you pass in NULL for outArray, it will just
+ * return the number of strings that it *would*
+ * chop. 
+ * GOTCHA: since multiple separators are skipped
+ * and treated as one, it is impossible to parse 
+ * a list with an empty string. 
+ * e.g. cat\t\tdog returns only cat and dog but no empty string */
+int chopString(char *in, char *sep, char *outArray[], int outSize)
+{
+int recordCount = 0;
+
+for (;;)
+    {
+    if (outArray != NULL && recordCount >= outSize)
+	break;
+    /* Skip initial separators. */
+    in += strspn(in, sep);
+    if (*in == 0)
+	break;
+    if (outArray != NULL)
+	outArray[recordCount] = in;
+    recordCount += 1;
+    in += strcspn(in, sep);
+    if (*in == 0)
+	break;
+    if (outArray != NULL)
+	*in = 0;
+    in += 1;
+    }
+return recordCount;
+}
+
+int chopByWhite(char *in, char *outArray[], int outSize)
+/* Like chopString, but specialized for white space separators. 
+ * See the GOTCHA in chopString */
+{
+int recordCount = 0;
+char c;
+for (;;)
+    {
+    if (outArray != NULL && recordCount >= outSize)
+	break;
+
+    /* Skip initial separators. */
+    while (isspace(*in)) ++in;
+    if (*in == 0)
+        break;
+
+    /* Store start of word and look for end of word. */
+    if (outArray != NULL)
+        outArray[recordCount] = in;
+    recordCount += 1;
+    for (;;)
+        {
+        if ((c = *in) == 0)
+            break;
+        if (isspace(c))
+            break;
+        ++in;
+        }
+    if (*in == 0)
+	break;
+
+    /* Tag end of word with zero. */
+    if (outArray != NULL)
+	*in = 0;
+    /* And skip over the zero. */
+    in += 1;
+    }
+return recordCount;
+}
+
+int chopByWhiteRespectDoubleQuotes(char *in, char *outArray[], int outSize)
+/* Like chopString, but specialized for white space separators.
+ * Further, any doubleQuotes (") are respected.
+ * If doubleQuote is encloses whole string, then they are removed:
+ *   "Fred and Ethyl" results in word [Fred and Ethyl]
+ * If doubleQuotes exist inside string they are retained:
+ *   Fred" and Ethyl" results in word [Fred" and Ethyl"]
+ * Special note "" is a valid, though empty word. */
+{
+int recordCount = 0;
+char c;
+char *quoteBegins = NULL;
+boolean quoting = FALSE;
+for (;;)
+    {
+    if (outArray != NULL && recordCount >= outSize)
+        break;
+
+    /* Skip initial separators. */
+    while (isspace(*in)) ++in;
+    if (*in == 0)
+        break;
+
+    /* Store start of word and look for end of word. */
+    if (outArray != NULL)
+        {
+        outArray[recordCount] = in;
+        if (*in == '"')
+            quoteBegins = (in+1);
+        else
+            quoteBegins = NULL;
+        }
+    recordCount += 1;
+    quoting = FALSE;
+    for (;;)
+        {
+        if ((c = *in) == 0)
+            break;
+        if (quoting)
+            {
+            if (c == '"')
+                {
+                quoting = FALSE;
+                if (quoteBegins != NULL) // implies out array
+                    {
+                    if ((c = *(in+1) == 0 )|| isspace(c)) // whole word is quoted.
+                        {
+                        outArray[recordCount-1] = quoteBegins; // Fix beginning of word
+                        quoteBegins = NULL;
+                        break;
+                        }
+                    }
+                }
+            }
+        else
+            {
+            quoting = (c == '"');
+            if (isspace(c))
+                break;
+            }
+        ++in;
+        }
+    if (*in == 0)
+        break;
+
+    /* Tag end of word with zero. */
+    if (outArray != NULL)
+        *in = 0;
+    /* And skip over the zero. */
+    in += 1;
+    }
+return recordCount;
+}
+
+int chopByChar(char *in, char chopper, char *outArray[], int outSize)
+/* Chop based on a single character. */
+{
+int i;
+char c;
+if (*in == 0)
+    return 0;
+for (i=0; (i<outSize) || (outArray==NULL); ++i)
+    {
+    if (outArray != NULL)
+        outArray[i] = in;
+    for (;;)
+	{
+	if ((c = *in++) == 0)
+	    return i+1;
+	else if (c == chopper)
+	    {
+            if (outArray != NULL)
+                in[-1] = 0;
+	    break;
+	    }
+	}
+    }
+return i;
+}
+
+char crLfChopper[] = "\n\r";
+char whiteSpaceChopper[] = " \t\n\r";
+
+
+char *skipBeyondDelimit(char *s,char delimit)
+/* Returns NULL or pointer to first char beyond one (or more contiguous) delimit char.
+   If delimit is ' ' then skips beyond first patch of whitespace. */
+{
+if (s != NULL)
+    {
+    char *beyond = NULL;
+    if (delimit == ' ')
+        return skipLeadingSpaces(skipToSpaces(s));
+    else
+        beyond = strchr(s,delimit);
+    if (beyond != NULL)
+        {
+        for (beyond++;*beyond == delimit;beyond++) ;
+        if (*beyond != '\0')
+            return beyond;
+        }
+    }
+return NULL;
+}
+
+char *skipLeadingSpaces(char *s)
+/* Return first non-white space. */
+{
+char c;
+if (s == NULL) return NULL;
+for (;;)
+    {
+    c = *s;
+    if (!isspace(c))
+	return s;
+    ++s;
+    }
+}
+
+char *skipToSpaces(char *s)
+/* Return first white space or NULL if none.. */
+{
+char c;
+if (s == NULL)
+    return NULL;
+for (;;)
+    {
+    c = *s;
+    if (c == 0)
+        return NULL;
+    if (isspace(c))
+	return s;
+    ++s;
+    }
+}
+
+
+
+void eraseTrailingSpaces(char *s)
+/* Replace trailing white space with zeroes. */
+{
+int len = strlen(s);
+int i;
+char c;
+
+for (i=len-1; i>=0; --i)
+    {
+    c = s[i];
+    if (isspace(c))
+	s[i] = 0;
+    else
+	break;
+    }
+}
+
+/* Remove white space from a string */
+void eraseWhiteSpace(char *s)
+{
+char *in, *out;
+char c;
+
+in = out = s;
+for (;;)
+    {
+    c = *in++;
+    if (c == 0)
+	break;
+    if (!isspace(c))
+	*out++ = c;
+    }
+*out++ = 0;
+}
+
+/* Remove non-alphanumeric chars from string */
+void eraseNonAlphaNum(char *s)
+{
+char *in, *out;
+char c;
+
+in = out = s;
+for (;;)
+    {
+    c = *in++;
+    if (c == 0)
+        break;
+    if (isalnum(c))
+        *out++ = c;
+    }
+*out = 0;
+}
+
+char *trimSpaces(char *s)
+/* Remove leading and trailing white space. */
+{
+if (s != NULL)
+    {
+    s = skipLeadingSpaces(s);
+    eraseTrailingSpaces(s);
+    }
+return s;
+}
+
+void repeatCharOut(FILE *f, char c, int count)
+/* Write character to file repeatedly. */
+{
+while (--count >= 0)
+    fputc(c, f);
+}
+
+void spaceOut(FILE *f, int count)
+/* Put out some spaces to file. */
+{
+repeatCharOut(f, ' ', count);
+}
+
+void starOut(FILE *f, int count)
+/* Put out some asterisks to file. */
+{
+repeatCharOut(f, '*', count);
+}
+
+boolean hasWhiteSpace(char *s)
+/* Return TRUE if there is white space in string. */
+{
+char c;
+while ((c = *s++) != 0)
+    if (isspace(c))
+        return TRUE;
+return FALSE;
+}
+
+char *firstWordInLine(char *line)
+/* Returns first word in line if any (white space separated).
+ * Puts 0 in place of white space after word. */
+{
+char *e;
+line = skipLeadingSpaces(line);
+if ((e = skipToSpaces(line)) != NULL)
+    *e = 0;
+return line;
+}
+
+char *cloneFirstWord(char *line)
+/* Clone first word in line */
+{
+char *startFirstWord = skipLeadingSpaces(line);
+if (startFirstWord == NULL)
+    return NULL;
+char *endFirstWord = skipToSpaces(startFirstWord);
+if (endFirstWord == NULL)
+    return cloneString(startFirstWord);
+else
+    return cloneStringZ(startFirstWord, endFirstWord - startFirstWord);
+}
+
+char *lastWordInLine(char *line)
+/* Returns last word in line if any (white space separated).
+ * Returns NULL if string is empty.  Removes any terminating white space
+ * from line. */
+{
+char *s = line;
+char *word = NULL, *wordEnd = NULL;
+for (;;)
+    {
+    s = skipLeadingSpaces(s);
+    if (s == NULL || s[0] == 0)
+	break;
+    word = s;
+    s = wordEnd = skipToSpaces(s);
+    if (s == NULL)
+        break;
+    }
+if (wordEnd != NULL)
+    *wordEnd = 0;
+return word;
+}
+
+char *nextWord(char **pLine)
+/* Return next word in *pLine and advance *pLine to next
+ * word. */
+{
+char *s = *pLine, *e;
+if (s == NULL || s[0] == 0)
+    return NULL;
+s = skipLeadingSpaces(s);
+if (s[0] == 0)
+    return NULL;
+e = skipToSpaces(s);
+if (e != NULL)
+    *e++ = 0;
+*pLine = e;
+return s;
+}
+
+char *nextWordRespectingQuotes(char **pLine)
+// return next word but respects single or double quotes surrounding sets of words.
+{
+char *s = *pLine, *e;
+if (s == NULL || s[0] == 0)
+    return NULL;
+s = skipLeadingSpaces(s);
+if (s[0] == 0)
+    return NULL;
+if (s[0] == '"')
+    {
+    e = skipBeyondDelimit(s+1,'"');
+    if (e != NULL && !isspace(e[0]))
+        e = skipToSpaces(s);
+    }
+else if (s[0] == '\'')
+    {
+    e = skipBeyondDelimit(s+1,'\'');
+    if (e != NULL && !isspace(e[0]))
+        e = skipToSpaces(s);
+    }
+else
+    e = skipToSpaces(s);
+if (e != NULL)
+    *e++ = 0;
+*pLine = e;
+return s;
+}
+
+char *nextTabWord(char **pLine)
+/* Return next tab-separated word. */
+{
+char *s = *pLine;
+char *e;
+if (s == NULL || *s == '\n' || *s == 0)
+    {
+    *pLine = NULL;
+    return NULL;
+    }
+e = strchr(s, '\t');
+if (e == NULL)
+    {
+    e = strchr(s, '\n');
+    if (e != NULL)
+        *e = 0;
+    *pLine = NULL;
+    }
+else
+    {
+    *e++ = 0;
+    *pLine = e;
+    }
+return s;
+}
+
+char *cloneFirstWordByDelimiter(char *line,char delimit)
+/* Returns a cloned first word, not harming the memory passed in */
+{
+if (line == NULL || *line == 0)
+    return NULL;
+line = skipLeadingSpaces(line);
+if (*line == 0)
+    return NULL;
+int size=0;
+char *e;
+for (e=line;*e!=0;e++)
+    {
+    if (*e==delimit)
+        break;
+    else if (delimit == ' ' && isspace(*e))
+        break;
+    size++;
+    }
+if (size == 0)
+    return NULL;
+char *new = needMem(size + 2); // Null terminated by 2
+memcpy(new, line, size);
+return new;
+}
+
+char *cloneNextWordByDelimiter(char **line,char delimit)
+/* Returns a cloned first word, advancing the line pointer but not harming memory passed in */
+{
+char *new = cloneFirstWordByDelimiter(*line,delimit);
+if (new != NULL)
+    {
+    *line = skipLeadingSpaces(*line);
+    *line += strlen(new);
+    if ( **line != 0)
+        (*line)++;
+    }
+return new;
+}
+
+char *nextStringInList(char **pStrings)
+/* returns pointer to the first string and advances pointer to next in
+   list of strings dilimited by 1 null and terminated by 2 nulls. */
+{
+if (pStrings == NULL || *pStrings == NULL || **pStrings == 0)
+    return NULL;
+char *p=*pStrings;
+*pStrings += strlen(p)+1;
+return p;
+}
+
+int cntStringsInList(char *pStrings)
+/* returns count of strings in a
+   list of strings dilimited by 1 null and terminated by 2 nulls. */
+{
+int cnt=0;
+char *p = pStrings;
+while (nextStringInList(&p) != NULL)
+    cnt++;
+return cnt;
+}
+
+int stringArrayIx(char *string, char *array[], int arraySize)
+
+/* Return index of string in array or -1 if not there. */
+{
+int i;
+for (i=0; i<arraySize; ++i)
+    if (!differentWord(array[i], string))
+        return i;
+return -1;
+}
+
+int ptArrayIx(void *pt, void *array, int arraySize)
+/* Return index of pt in array or -1 if not there. */
+{
+int i;
+void **a = array;
+for (i=0; i<arraySize; ++i)
+    {
+    if (pt == a[i])
+        return i;
+    }
+return -1;
+}
+
+
+
+FILE *mustOpen(char *fileName, char *mode)
+/* Open a file - or squawk and die. */
+{
+FILE *f;
+
+if (sameString(fileName, "stdin"))
+    return stdin;
+if (sameString(fileName, "stdout"))
+    return stdout;
+if ((f = fopen(fileName, mode)) == NULL)
+    {
+    char *modeName = "";
+    if (mode)
+        {
+        if (mode[0] == 'r')
+            modeName = " to read";
+        else if (mode[0] == 'w')
+            modeName = " to write";
+        else if (mode[0] == 'a')
+            modeName = " to append";
+        }
+    errAbort("mustOpen: Can't open %s%s: %s", fileName, modeName, strerror(errno));
+    }
+return f;
+}
+
+void mustWrite(FILE *file, void *buf, size_t size)
+/* Write to a file or squawk and die. */
+{
+if (size != 0 && fwrite(buf, size, 1, file) != 1)
+    {
+    errAbort("Error writing %lld bytes: %s\n", (long long)size, strerror(ferror(file)));
+    }
+}
+
+
+void mustRead(FILE *file, void *buf, size_t size)
+/* Read size bytes from a file or squawk and die. */
+{
+if (size != 0 && fread(buf, size, 1, file) != 1)
+    {
+    if (ferror(file))
+	errAbort("Error reading %lld bytes: %s", (long long)size, strerror(ferror(file)));
+    else
+	errAbort("End of file reading %lld bytes", (long long)size);
+    }
+}
+
+void writeString(FILE *f, char *s)
+/* Write a 255 or less character string to a file.
+ * This will write the length of the string in the first
+ * byte then the string itself. */
+{
+UBYTE bLen;
+int len = strlen(s);
+
+if (len > 255)
+    {
+    warn("String too long in writeString (%d chars):\n%s", len, s);
+    len = 255;
+    }
+bLen = len;
+writeOne(f, bLen);
+mustWrite(f, s, len);
+}
+
+char *readString(FILE *f)
+/* Read a string (written with writeString) into
+ * memory.  freeMem the result when done. */
+{
+UBYTE bLen;
+int len;
+char *s;
+
+if (!readOne(f, bLen))
+    return NULL;
+len = bLen;
+s = needMem(len+1);
+if (len > 0)
+    mustRead(f, s, len);
+return s;
+}
+
+char *mustReadString(FILE *f)
+/* Read a string.  Squawk and die at EOF or if any problem. */
+{
+char *s = readString(f);
+if (s == NULL)
+    errAbort("Couldn't read string");
+return s;
+}
+
+
+boolean fastReadString(FILE *f, char buf[256])
+/* Read a string into buffer, which must be long enough
+ * to hold it.  String is in 'writeString' format. */
+{
+UBYTE bLen;
+int len;
+if (!readOne(f, bLen))
+    return FALSE;
+if ((len = bLen)> 0)
+    mustRead(f, buf, len);
+buf[len] = 0;
+return TRUE;
+}
+
+void msbFirstWriteBits64(FILE *f, bits64 x)
+/* Write out 64 bit number in manner that is portable across architectures */
+{
+int i;
+UBYTE buf[8];
+for (i=7; i>=0; --i)
+    {
+    buf[i] = (UBYTE)(x&0xff);
+    x >>= 8;
+    }
+mustWrite(f, buf, 8);
+}
+
+bits64 msbFirstReadBits64(FILE *f)
+/* Write out 64 bit number in manner that is portable across architectures */
+{
+int i;
+UBYTE buf[8];
+bits64 x = 0;
+mustRead(f, buf, 8);
+for (i=0; i<8; ++i)
+    {
+    x <<= 8;
+    x |= buf[i];
+    }
+return x;
+}
+
+void mustGetLine(FILE *file, char *buf, int charCount)
+/* Read at most charCount-1 bytes from file, but stop after newline if one is
+ * encountered.  The string in buf is '\0'-terminated.  (See man 3 fgets.)
+ * Die if there is an error. */
+{
+char *success = fgets(buf, charCount, file);
+if (success == NULL && charCount > 0)
+    buf[0] = '\0';
+if (ferror(file))
+    errAbort("mustGetLine: fgets failed: %s", strerror(ferror(file)));
+}
+
+int mustOpenFd(char *fileName, int flags)
+/* Open a file descriptor (see man 2 open) or squawk and die. */
+{
+if (sameString(fileName, "stdin"))
+    return STDIN_FILENO;
+if (sameString(fileName, "stdout"))
+    return STDOUT_FILENO;
+// mode is necessary when O_CREAT is given, ignored otherwise
+int mode = 00664;
+int fd = open(fileName, flags, mode);
+if (fd < 0)
+    {
+    char *modeName = "";
+    if ((flags & (O_WRONLY | O_CREAT | O_TRUNC)) == (O_WRONLY | O_CREAT | O_TRUNC))
+	modeName = " to create and truncate";
+    else if ((flags & (O_WRONLY | O_CREAT)) == (O_WRONLY | O_CREAT))
+	modeName = " to create";
+    else if ((flags & O_WRONLY) == O_WRONLY)
+	modeName = " to write";
+    else if ((flags & O_RDWR) == O_RDWR)
+	modeName = " to append";
+    else
+	modeName = " to read";
+    errnoAbort("mustOpenFd: Can't open %s%s", fileName, modeName);
+    }
+return fd;
+}
+
+void mustReadFd(int fd, void *buf, size_t size)
+/* Read size bytes from a file or squawk and die. */
+{
+ssize_t actualSize;
+char *cbuf = buf;
+// using a loop because linux was not returning all data in a single request when request size exceeded 2GB.
+while (size > 0)
+    {
+    actualSize = read(fd, cbuf, size);
+    if (actualSize < 0)
+	errnoAbort("Error reading %lld bytes", (long long)size);
+    if (actualSize == 0)
+	errAbort("End of file reading %llu bytes (got %lld)", (unsigned long long)size, (long long)actualSize);
+    cbuf += actualSize;
+    size -= actualSize;
+    }
+}
+
+void mustWriteFd(int fd, void *buf, size_t size)
+/* Write size bytes to file descriptor fd or die.  (See man 2 write.) */
+{
+ssize_t result = write(fd, buf, size);
+if (result < size)
+    {
+    if (result < 0)
+	errnoAbort("mustWriteFd: write failed");
+    else 
+        errAbort("mustWriteFd only wrote %lld of %lld bytes. Likely the disk is full.",
+	    (long long)result, (long long)size);
+    }
+}
+
+off_t mustLseek(int fd, off_t offset, int whence)
+/* Seek to given offset, relative to whence (see man lseek) in file descriptor fd or errAbort.
+ * Return final offset (e.g. if this is just an (fd, 0, SEEK_CUR) query for current position). */
+{
+off_t ret = lseek(fd, offset, whence);
+if (ret < 0)
+    errnoAbort("lseek(%d, %lld, %s (%d)) failed", fd, (long long)offset,
+	       ((whence == SEEK_SET) ? "SEEK_SET" : (whence == SEEK_CUR) ? "SEEK_CUR" :
+		(whence == SEEK_END) ? "SEEK_END" : "invalid 'whence' value"), whence);
+return ret;
+}
+
+void mustCloseFd(int *pFd)
+/* Close file descriptor *pFd if >= 0, abort if there's an error, set *pFd = -1. */
+{
+if (pFd != NULL && *pFd >= 0)
+    {
+    if (close(*pFd) < 0)
+	errnoAbort("close failed");
+    *pFd = -1;
+    }
+}
+
+char *addSuffix(char *head, char *suffix)
+/* Return a needMem'd string containing "headsuffix". Should be free'd
+ when finished. */
+{
+char *ret = NULL;
+int size = strlen(head) + strlen(suffix) +1;
+ret = needMem(sizeof(char)*size);
+snprintf(ret, size, "%s%s", head, suffix);
+return ret;
+}
+
+void chopSuffix(char *s)
+/* Remove suffix (last . in string and beyond) if any. */
+{
+char *e = strrchr(s, '.');
+if (e != NULL)
+    *e = 0;
+}
+
+void chopSuffixAt(char *s, char c)
+/* Remove end of string from first occurrence of char c.
+ * chopSuffixAt(s, '.') is equivalent to regular chopSuffix. */
+{
+char *e = strrchr(s, c);
+if (e != NULL)
+    *e = 0;
+}
+
+char *chopPrefixAt(char *s, char c)
+/* Like chopPrefix, but can chop on any character, not just '.' */
+{
+char *e = strchr(s, c);
+if (e == NULL) return s;
+*e++ = 0;
+return e;
+}
+
+char *chopPrefix(char *s)
+/* This will replace the first '.' in a string with
+ * 0, and return the character after this.  If there
+ * is no '.' in the string this will just return the
+ * unchanged s passed in. */
+{
+return chopPrefixAt(s, '.');
+}
+
+
+
+boolean carefulCloseWarn(FILE **pFile)
+/* Close file if open and null out handle to it.
+ * Return FALSE and print a warning message if there
+ * is a problem.*/
+{
+FILE *f;
+boolean ok = TRUE;
+if ((pFile != NULL) && ((f = *pFile) != NULL))
+    {
+    if (f != stdin && f != stdout)
+        {
+        if (fclose(f) != 0)
+	    {
+            errnoWarn("fclose failed");
+	    ok = FALSE;
+	    }
+        }
+    *pFile = NULL;
+    }
+return ok;
+}
+
+void carefulClose(FILE **pFile)
+/* Close file if open and null out handle to it.
+ * Warn and abort if there's a problem. */
+{
+if (!carefulCloseWarn(pFile))
+    noWarnAbort();
+}
+
+char *firstWordInFile(char *fileName, char *wordBuf, int wordBufSize)
+/* Read the first word in file into wordBuf. */
+{
+FILE *f = mustOpen(fileName, "r");
+mustGetLine(f, wordBuf, wordBufSize);
+fclose(f);
+return trimSpaces(wordBuf);
+}
+
+int fileOffsetSizeCmp(const void *va, const void *vb)
+/* Help sort fileOffsetSize by offset. */
+{
+const struct fileOffsetSize *a = *((struct fileOffsetSize **)va);
+const struct fileOffsetSize *b = *((struct fileOffsetSize **)vb);
+if (a->offset > b->offset)
+    return 1;
+else if (a->offset == b->offset)
+    return 0;
+else
+    return -1;
+}
+
+struct fileOffsetSize *fileOffsetSizeMerge(struct fileOffsetSize *inList)
+/* Returns a new list which is inList transformed to have adjacent blocks
+ * merged.  Best to use this with a sorted list. */
+{
+struct fileOffsetSize *newList = NULL, *newEl = NULL, *oldEl, *nextOld;
+
+for (oldEl = inList; oldEl != NULL; oldEl = nextOld)
+    {
+    nextOld = oldEl->next;
+    if (nextOld != NULL && nextOld->offset < oldEl->offset)
+        errAbort("Unsorted inList in fileOffsetSizeMerge %llu %llu", oldEl->offset, nextOld->offset);
+    if (newEl == NULL || newEl->offset + newEl->size < oldEl->offset)
+        {
+	newEl = CloneVar(oldEl);
+	slAddHead(&newList, newEl);
+	}
+    else
+        {
+	newEl->size = oldEl->offset + oldEl->size - newEl->offset;
+	}
+    }
+slReverse(&newList);
+return newList;
+}
+
+void fileOffsetSizeFindGap(struct fileOffsetSize *list,
+                           struct fileOffsetSize **pBeforeGap, struct fileOffsetSize **pAfterGap)
+/* Starting at list, find all items that don't have a gap between them and the previous item.
+ * Return at gap, or at end of list, returning pointers to the items before and after the gap. */
+{
+struct fileOffsetSize *pt, *next;
+for (pt = list; ; pt = next)
+    {
+    next = pt->next;
+    if (next == NULL || next->offset != pt->offset + pt->size)
+	{
+	*pBeforeGap = pt;
+	*pAfterGap = next;
+	return;
+	}
+    }
+}
+
+
+void mustSystem(char *cmd)
+/* Execute cmd using "sh -c" or die.  (See man 3 system.) fail on errors */
+{
+if (cmd == NULL) // don't allow (system() supports testing for shell this way)
+    errAbort("mustSystem: called with NULL command.");
+int status = system(cmd);
+if (status == -1)
+    errnoAbort("error starting command: %s", cmd);
+else if (WIFSIGNALED(status))
+    errAbort("command terminated by signal %d: %s", WTERMSIG(status), cmd);
+else if (WIFEXITED(status))
+    {
+    if (WEXITSTATUS(status) != 0)
+        errAbort("command exited with %d: %s", WEXITSTATUS(status), cmd);
+    }
+else
+    errAbort("bug: invalid exit status for command: %s", cmd);
+}
+
+int roundingScale(int a, int p, int q)
+/* returns rounded a*p/q */
+{
+if (a > 100000 || p > 100000)
+    {
+    double x = a;
+    x *= p;
+    x /= q;
+    return round(x);
+    }
+else
+    return (a*p + q/2)/q;
+}
+
+int intAbs(int a)
+/* Return integer absolute value */
+{
+return (a >= 0 ? a : -a);
+}
+
+int  rangeIntersection(int start1, int end1, int start2, int end2)
+/* Return amount of bases two ranges intersect over, 0 or negative if no
+ * intersection. */
+{
+int s = max(start1,start2);
+int e = min(end1,end2);
+return e-s;
+}
+
+int positiveRangeIntersection(int start1, int end1, int start2, int end2)
+/* Return number of bases in intersection of two ranges, or
+ * zero if they don't intersect. */
+{
+int ret = rangeIntersection(start1,end1,start2,end2);
+if (ret < 0)
+    ret = 0;
+return ret;
+}
+
+bits64 byteSwap64(bits64 a)
+/* Return byte-swapped version of a */
+{
+union {bits64 whole; UBYTE bytes[8];} u,v;
+u.whole = a;
+v.bytes[0] = u.bytes[7];
+v.bytes[1] = u.bytes[6];
+v.bytes[2] = u.bytes[5];
+v.bytes[3] = u.bytes[4];
+v.bytes[4] = u.bytes[3];
+v.bytes[5] = u.bytes[2];
+v.bytes[6] = u.bytes[1];
+v.bytes[7] = u.bytes[0];
+return v.whole;
+}
+
+bits64 readBits64(FILE *f, boolean isSwapped)
+/* Read and optionally byte-swap 64 bit entity. */
+{
+bits64 val;
+mustReadOne(f, val);
+if (isSwapped)
+    val = byteSwap64(val);
+return val;
+}
+
+bits64 fdReadBits64(int fd, boolean isSwapped)
+/* Read and optionally byte-swap 64 bit entity. */
+{
+bits64 val;
+mustReadOneFd(fd, val);
+if (isSwapped)
+    val = byteSwap64(val);
+return val;
+}
+
+bits64 memReadBits64(char **pPt, boolean isSwapped)
+/* Read and optionally byte-swap 64 bit entity from memory buffer pointed to by
+ * *pPt, and advance *pPt past read area. */
+{
+bits64 val;
+memcpy(&val, *pPt, sizeof(val));
+if (isSwapped)
+    val = byteSwap64(val);
+*pPt += sizeof(val);
+return val;
+}
+
+bits32 byteSwap32(bits32 a)
+/* Return byte-swapped version of a */
+{
+union {bits32 whole; UBYTE bytes[4];} u,v;
+u.whole = a;
+v.bytes[0] = u.bytes[3];
+v.bytes[1] = u.bytes[2];
+v.bytes[2] = u.bytes[1];
+v.bytes[3] = u.bytes[0];
+return v.whole;
+}
+
+bits32 readBits32(FILE *f, boolean isSwapped)
+/* Read and optionally byte-swap 32 bit entity. */
+{
+bits32 val;
+mustReadOne(f, val);
+if (isSwapped)
+    val = byteSwap32(val);
+return val;
+}
+
+bits32 fdReadBits32(int fd, boolean isSwapped)
+/* Read and optionally byte-swap 32 bit entity. */
+{
+bits32 val;
+mustReadOneFd(fd, val);
+if (isSwapped)
+    val = byteSwap32(val);
+return val;
+}
+
+bits32 memReadBits32(char **pPt, boolean isSwapped)
+/* Read and optionally byte-swap 32 bit entity from memory buffer pointed to by
+ * *pPt, and advance *pPt past read area. */
+{
+bits32 val;
+memcpy(&val, *pPt, sizeof(val));
+if (isSwapped)
+    val = byteSwap32(val);
+*pPt += sizeof(val);
+return val;
+}
+
+bits16 byteSwap16(bits16 a)
+/* Return byte-swapped version of a */
+{
+union {bits16 whole; UBYTE bytes[2];} u,v;
+u.whole = a;
+v.bytes[0] = u.bytes[1];
+v.bytes[1] = u.bytes[0];
+return v.whole;
+}
+
+bits16 readBits16(FILE *f, boolean isSwapped)
+/* Read and optionally byte-swap 16 bit entity. */
+{
+bits16 val;
+mustReadOne(f, val);
+if (isSwapped)
+    val = byteSwap16(val);
+return val;
+}
+
+bits16 fdReadBits16(int fd, boolean isSwapped)
+/* Read and optionally byte-swap 16 bit entity. */
+{
+bits16 val;
+mustReadOneFd(fd, val);
+if (isSwapped)
+    val = byteSwap16(val);
+return val;
+}
+
+bits16 memReadBits16(char **pPt, boolean isSwapped)
+/* Read and optionally byte-swap 16 bit entity from memory buffer pointed to by
+ * *pPt, and advance *pPt past read area. */
+{
+bits16 val;
+memcpy(&val, *pPt, sizeof(val));
+if (isSwapped)
+    val = byteSwap16(val);
+*pPt += sizeof(val);
+return val;
+}
+
+double byteSwapDouble(double a)
+/* Return byte-swapped version of a */
+{
+union {double whole; UBYTE bytes[8];} u,v;
+u.whole = a;
+v.bytes[0] = u.bytes[7];
+v.bytes[1] = u.bytes[6];
+v.bytes[2] = u.bytes[5];
+v.bytes[3] = u.bytes[4];
+v.bytes[4] = u.bytes[3];
+v.bytes[5] = u.bytes[2];
+v.bytes[6] = u.bytes[1];
+v.bytes[7] = u.bytes[0];
+return v.whole;
+}
+
+
+double readDouble(FILE *f, boolean isSwapped)
+/* Read and optionally byte-swap double-precision floating point entity. */
+{
+double val;
+mustReadOne(f, val);
+if (isSwapped)
+    val = byteSwapDouble(val);
+return val;
+}
+
+double memReadDouble(char **pPt, boolean isSwapped)
+/* Read and optionally byte-swap double-precision floating point entity
+ * from memory buffer pointed to by *pPt, and advance *pPt past read area. */
+{
+double val;
+memcpy(&val, *pPt, sizeof(val));
+if (isSwapped)
+    val = byteSwapDouble(val);
+*pPt += sizeof(val);
+return val;
+}
+
+float byteSwapFloat(float a)
+/* Return byte-swapped version of a */
+{
+union {float whole; UBYTE bytes[4];} u,v;
+u.whole = a;
+v.bytes[0] = u.bytes[3];
+v.bytes[1] = u.bytes[2];
+v.bytes[2] = u.bytes[1];
+v.bytes[3] = u.bytes[0];
+return v.whole;
+}
+
+
+float readFloat(FILE *f, boolean isSwapped)
+/* Read and optionally byte-swap single-precision floating point entity. */
+{
+float val;
+mustReadOne(f, val);
+if (isSwapped)
+    val = byteSwapFloat(val);
+return val;
+}
+
+float memReadFloat(char **pPt, boolean isSwapped)
+/* Read and optionally byte-swap single-precision floating point entity
+ * from memory buffer pointed to by *pPt, and advance *pPt past read area. */
+{
+float val;
+memcpy(&val, *pPt, sizeof(val));
+if (isSwapped)
+    val = byteSwapFloat(val);
+*pPt += sizeof(val);
+return val;
+}
+
+
+void removeReturns(char *dest, char *src)
+/* Removes the '\r' character from a string.
+ * The source and destination strings can be the same, if there are
+ * no other threads */
+{
+int i = 0;
+int j = 0;
+
+/* until the end of the string */
+for (;;)
+    {
+    /* skip the returns */
+    while(src[j] == '\r')
+	j++;
+
+    /* copy the characters */
+    dest[i] = src[j];
+
+    /* check to see if done */
+    if(src[j] == '\0')
+	break;
+
+    /* advance the counters */
+    i++;
+    j++;
+    }
+}
+
+char* readLine(FILE* fh)
+/* Read a line of any size into dynamic memory, return null on EOF */
+{
+int bufCapacity = 256;
+int bufSize = 0;
+char* buf = needMem(bufCapacity);
+int ch;
+
+/* loop until EOF of EOLN */
+while (((ch = getc(fh)) != EOF) && (ch != '\n'))
+    {
+    /* expand if almost full, always keep one extra char for
+     * zero termination */
+    if (bufSize >= bufCapacity-2)
+        {
+        bufCapacity *= 2;
+        buf = realloc(buf, bufCapacity);
+        if (buf == NULL)
+            {
+            errAbort("Out of memory in readline - request size %d bytes", bufCapacity);
+            }
+        }
+    buf[bufSize++] = ch;
+    }
+
+/* only return EOF if no data was read */
+if ((ch == EOF) && (bufSize == 0))
+    {
+    freeMem(buf);
+    return NULL;
+    }
+buf[bufSize] = '\0';
+return buf;
+}
+
+boolean fileExists(char *fileName)
+/* Return TRUE if file exists (may replace this with non-
+ * portable faster way some day). */
+{
+/* To make piping easier stdin and stdout always exist. */
+if (sameString(fileName, "stdin")) return TRUE;
+if (sameString(fileName, "stdout")) return TRUE;
+
+return fileSize(fileName) != -1;
+}
+
+/*
+ Friendly name for strstrNoCase
+*/
+char *containsStringNoCase(char *haystack, char *needle)
+{
+return strstrNoCase(haystack, needle);
+}
+
+char *strstrNoCase(char *haystack, char *needle)
+/*
+  A case-insensitive strstr function
+Will also robustly handle null strings
+param haystack - The string to be searched
+param needle - The string to look for in the haystack string
+
+return - The position of the first occurence of the desired substring
+or -1 if it is not found
+ */
+{
+char *haystackCopy = NULL;
+char *needleCopy = NULL;
+int index = 0;
+int haystackLen = 0;
+int needleLen = 0;
+char *p, *q;
+
+if (NULL == haystack || NULL == needle)
+    {
+    return NULL;
+    }
+
+haystackLen = strlen(haystack);
+needleLen = strlen(needle);
+
+haystackCopy = (char*) needMem(haystackLen + 1);
+needleCopy = (char*) needMem(needleLen + 1);
+
+for(index = 0; index < haystackLen;  index++)
+    {
+    haystackCopy[index] = tolower(haystack[index]);
+    }
+haystackCopy[haystackLen] = 0; /* Null terminate */
+
+for(index = 0; index < needleLen;  index++)
+    {
+    needleCopy[index] = tolower(needle[index]);
+    }
+needleCopy[needleLen] = 0; /* Null terminate */
+
+p=strstr(haystackCopy, needleCopy);
+q=haystackCopy;
+
+freeMem(haystackCopy);
+freeMem(needleCopy);
+
+if(p==NULL) return NULL;
+
+return p-q+haystack;
+}
+
+int vasafef(char* buffer, int bufSize, char *format, va_list args)
+/* Format string to buffer, vsprintf style, only with buffer overflow
+ * checking.  The resulting string is always terminated with zero byte. */
+{
+int sz = vsnprintf(buffer, bufSize, format, args);
+/* note that some version return -1 if too small */
+if ((sz < 0) || (sz >= bufSize))
+    {
+    buffer[bufSize-1] = (char) 0;
+    errAbort("buffer overflow, size %d, format: %s, buffer: '%s'", bufSize, format, buffer);
+    }
+return sz;
+}
+
+int safef(char* buffer, int bufSize, char *format, ...)
+/* Format string to buffer, vsprintf style, only with buffer overflow
+ * checking.  The resulting string is always terminated with zero byte. */
+{
+int sz;
+va_list args;
+va_start(args, format);
+sz = vasafef(buffer, bufSize, format, args);
+va_end(args);
+return sz;
+}
+
+void safecpy(char *buf, size_t bufSize, const char *src)
+/* copy a string to a buffer, with bounds checking.*/
+{
+size_t slen = strlen(src);
+if (slen > bufSize-1)
+    errAbort("buffer overflow, size %lld, string size: %lld", (long long)bufSize, (long long)slen);
+strcpy(buf, src);
+}
+
+void safencpy(char *buf, size_t bufSize, const char *src, size_t n)
+/* copy n characters from a string to a buffer, with bounds checking.
+ * Unlike strncpy, always null terminates the result */
+{
+if (n > bufSize-1)
+    errAbort("buffer overflow, size %lld, substring size: %lld", (long long)bufSize, (long long)n);
+// strlen(src) can take a long time when src is for example a pointer into a chromosome sequence.
+// Instead of setting slen to max(strlen(src), n), just stop counting length at n.
+size_t slen = 0;
+while (src[slen] != '\0' && slen < n)
+    slen++;
+strncpy(buf, src, n);
+buf[slen] = '\0';
+}
+
+void safecat(char *buf, size_t bufSize, const char *src)
+/* Append  a string to a buffer, with bounds checking.*/
+{
+size_t blen = strlen(buf);
+size_t slen = strlen(src);
+if (blen+slen > bufSize-1)
+    errAbort("buffer overflow, size %lld, new string size: %lld", (long long)bufSize, (long long)(blen+slen));
+strcat(buf, src);
+}
+
+void safencat(char *buf, size_t bufSize, const char *src, size_t n)
+/* append n characters from a string to a buffer, with bounds checking. */
+{
+size_t blen = strlen(buf);
+if (blen+n > bufSize-1)
+    errAbort("buffer overflow, size %lld, new string size: %lld", (long long)bufSize, (long long)(blen+n));
+size_t slen = strlen(src);
+if (slen > n)
+    slen = n;
+strncat(buf, src, n);
+buf[blen+slen] = '\0';
+}
+
+
+static char *naStr = "n/a";
+static char *emptyStr = "";
+
+char *naForNull(char *s)
+/* Return 'n/a' if s is NULL, otherwise s. */
+{
+if (s == NULL)
+   s = naStr;
+return s;
+}
+
+char *naForEmpty(char *s)
+/* Return n/a if s is "" or NULL, otherwise s. */
+{
+if (s == NULL || s[0] == 0)
+    s = naStr;
+return s;
+}
+
+char *emptyForNull(char *s)
+/* Return "" if s is NULL, otherwise s. */
+{
+if (s == NULL)
+   s = emptyStr;
+return s;
+}
+
+char *nullIfAllSpace(char *s)
+/* Return NULL if s is all spaces, otherwise s. */
+{
+s = skipLeadingSpaces(s);
+if (s != NULL)
+    if (s[0] == 0)
+        s = NULL;
+return s;
+}
+
+char *trueFalseString(boolean b)
+/* Return "true" or "false" */
+{
+return (b ? "true" : "false");
+}
+
+void uglyTime(char *label, ...)
+/* Print label and how long it's been since last call.  Call with
+ * a NULL label to initialize. */
+{
+static long lastTime = 0;
+long time = clock1000();
+va_list args;
+va_start(args, label);
+if (label != NULL)
+    {
+    fprintf(stdout, "<span class='timing'>");
+    vfprintf(stdout, label, args);
+    fprintf(stdout, ": %ld millis<BR></span>\n", time - lastTime);
+    }
+lastTime = time;
+va_end(args);
+}
+
+void makeDirs(char* path)
+/* make a directory, including parent directories */
+{
+char pathBuf[PATH_LEN];
+char* next = pathBuf;
+
+strcpy(pathBuf, path);
+if (*next == '/')
+    next++;
+
+while((*next != '\0')
+      && (next = strchr(next, '/')) != NULL)
+    {
+    *next = '\0';
+    makeDir(pathBuf);
+    *next = '/';
+    next++;
+    }
+makeDir(pathBuf);
+}
+
+char *skipNumeric(char *s)
+/* Return first char of s that's not a digit */
+{
+while (isdigit(*s))
+   ++s;
+return s;
+}
+
+char *skipToNumeric(char *s)
+/* skip up to where numeric digits appear */
+{
+while (*s != 0 && !isdigit(*s))
+    ++s;
+return s;
+}
+
+char *splitOffNonNumeric(char *s)
+/* Split off non-numeric part, e.g. mm of mm8. Result should be freed when done */
+{
+return cloneStringZ(s,skipToNumeric(s)-s);
+}
+
+char *splitOffNumber(char *db)
+/* Split off number part, e.g. 8 of mm8. Result should be freed when done */
+{
+return cloneString(skipToNumeric(db));
+}
+
+time_t mktimeFromUtc (struct tm *t)
+/* Return time_t for tm in UTC (GMT)
+ * Useful for stuff like converting to time_t the
+ * last-modified HTTP response header
+ * which is always GMT. Returns -1 on failure of mktime */
+{
+    time_t time;
+    char *tz;
+    char save_tz[100];
+    tz=getenv("TZ");
+    if (tz)
+        safecpy(save_tz, sizeof(save_tz), tz);
+    setenv("TZ", "GMT0", 1);
+    tzset();
+    t->tm_isdst = 0;
+    time=mktime(t);
+    if (tz)
+        setenv("TZ", save_tz, 1);
+    else
+        unsetenv("TZ");
+    tzset();
+    return (time);
+}
+
+
+time_t dateToSeconds(const char *date,const char*format)
+// Convert a string date to time_t
+{
+struct tm storage={0,0,0,0,0,0,0,0,0};
+if (strptime(date,format,&storage)==NULL)
+    return 0;
+else
+    return mktime(&storage);
+}
+
+boolean dateIsOld(const char *date,const char*format)
+// Is this string date older than now?
+{
+time_t test = dateToSeconds(date,format);
+time_t now = clock1();
+return (test < now);
+}
+
+boolean dateIsOlderBy(const char *date,const char*format, time_t seconds)
+// Is this string date older than now by this many seconds?
+{
+time_t test = dateToSeconds(date,format);
+time_t now = clock1();
+return (test + seconds < now);
+}
+
+static int daysOfMonth(struct tm *tp)
+/* Returns the days of the month given the year */
+{
+int days=0;
+switch(tp->tm_mon)
+    {
+    case 3:
+    case 5:
+    case 8:
+    case 10:    days = 30;
+                break;
+    case 1:     days = 28;
+                if ( (tp->tm_year % 4) == 0
+                &&  ((tp->tm_year % 20) != 0 || (tp->tm_year % 100) == 0) )
+                    days = 29;
+                break;
+    default:    days = 31;
+                break;
+    }
+return days;
+}
+
+static void dateAdd(struct tm *tp,int addYears,int addMonths,int addDays)
+/* Add years,months,days to a date */
+{
+tp->tm_mday  += addDays;
+tp->tm_mon   += addMonths;
+tp->tm_year  += addYears;
+int dom=28;
+while ( (tp->tm_mon >11  || tp->tm_mon <0)
+    || (tp->tm_mday>dom || tp->tm_mday<1) )
+    {
+    if (tp->tm_mon>11)   // First month: tm.tm_mon is 0-11 range
+        {
+        tp->tm_year += (tp->tm_mon / 12);
+        tp->tm_mon  = (tp->tm_mon % 12);
+        }
+    else if (tp->tm_mon<0)
+        {
+        tp->tm_year += (tp->tm_mon / 12) - 1;
+        tp->tm_mon  =  (tp->tm_mon % 12) + 12;
+        }
+    else
+        {
+        dom = daysOfMonth(tp);
+        if (tp->tm_mday>dom)
+            {
+            tp->tm_mday -= dom;
+            tp->tm_mon  += 1;
+            dom = daysOfMonth(tp);
+            }
+        else if (tp->tm_mday < 1)
+            {
+            tp->tm_mon  -= 1;
+            dom = daysOfMonth(tp);
+            tp->tm_mday += dom;
+            }
+        }
+    }
+}
+
+char *dateAddTo(char *date,char *format,int addYears,int addMonths,int addDays)
+/* Add years,months,days to a formatted date and returns the new date as a cloned string
+*  format is a strptime/strftime format: %F = yyyy-mm-dd */
+{
+char *newDate = needMem(12);
+struct tm tp;
+if (strptime(date,format, &tp))
+    {
+    dateAdd(&tp,addYears,addMonths,addDays); // tp.tm_year only contains years since 1900
+    strftime(newDate,12,format,&tp);
+    }
+return cloneString(newDate);  // newDate is never freed!
+}
+
+boolean haplotype(const char *name)
+/* Is this name a haplotype name ?  _hap or _alt in the name */
+{
+if (stringIn("_hap", name) || stringIn("_alt", name))
+   return TRUE;
+else
+   return FALSE;
+}
diff --git a/gbtools/src/blatSrc/lib/common.ps b/gbtools/src/blatSrc/lib/common.ps
new file mode 100644
index 0000000..b4a65c6
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/common.ps
@@ -0,0 +1,97 @@
+%% Common postScript header.
+
+/boxHere {
+% Draw a box at current position.
+% Usage width height boxAt
+dup 0 exch   %stack width height 0 height
+rlineto      %stack width height
+exch dup 0   %stack height width width 0
+rlineto      %stack height width
+exch         %stack width height
+0 exch       %stack width 0 height
+neg          %stack width 0 -height
+rlineto      %stack width
+neg 0        %stack -width 0
+rlineto
+} def
+
+/boxAt {
+% Draw a box at a position.  Usage:
+% width height x y boxAt
+moveto
+boxHere
+} def
+
+/fillBox {
+% Draw filled box at a position. Usage:
+% width height x y fillBox
+newpath
+boxAt
+fill
+} def
+
+/strokeBox {
+% Draw stroked box at a position. Usage:
+% width height x y strokeBox
+newpath
+boxAt
+stroke
+} def
+
+/smallFont {
+/Times-Roman findfont
+10 scalefont
+setfont
+} def
+
+/showBefore {
+% Draw text immediately before rather
+% than immediately after current position.
+% Usage (some text) showBefore
+dup
+stringwidth
+neg
+exch
+neg
+exch
+rmoveto
+show
+} def
+
+/showMiddle {
+% Draw text centered at current position.
+% Usage (some text) showMiddle
+dup stringwidth
+2 div neg
+exch
+2 div neg
+exch
+rmoveto
+show
+} def
+
+/ellipse {
+/endangle exch def
+/startangle exch def
+/yrad exch def
+/xrad exch def
+/y exch def
+/x exch def
+/savematrix matrix currentmatrix def
+x y translate
+xrad yrad scale
+0 0 1 startangle endangle arc
+savematrix setmatrix
+} def
+
+/fillTextBox {
+true charpath pathbbox
+/y2 exch def /x2 exch def
+/y1 exch def /x1 exch def
+/w x2 x1 sub def
+/h y2 y1 sub def
+w h x1 y1 fillBox
+} def
+
+smallFont
+
diff --git a/gbtools/src/blatSrc/lib/common.pss b/gbtools/src/blatSrc/lib/common.pss
new file mode 100644
index 0000000..955f63a
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/common.pss
@@ -0,0 +1,96 @@
+"%% Common postScript header.\n"
+"\n"
+"/boxHere {\n"
+"% Draw a box at current position.\n"
+"% Usage width height boxAt\n"
+"dup 0 exch   %stack width height 0 height\n"
+"rlineto      %stack width height\n"
+"exch dup 0   %stack height width width 0\n"
+"rlineto      %stack height width\n"
+"exch         %stack width height\n"
+"0 exch       %stack width 0 height\n"
+"neg          %stack width 0 -height\n"
+"rlineto      %stack width\n"
+"neg 0        %stack -width 0\n"
+"rlineto\n"
+"} def\n"
+"\n"
+"/boxAt {\n"
+"% Draw a box at a position.  Usage:\n"
+"% width height x y boxAt\n"
+"moveto\n"
+"boxHere\n"
+"} def\n"
+"\n"
+"/fillBox {\n"
+"% Draw filled box at a position. Usage:\n"
+"% width height x y fillBox\n"
+"newpath\n"
+"boxAt\n"
+"fill\n"
+"} def\n"
+"\n"
+"/strokeBox {\n"
+"% Draw stroked box at a position. Usage:\n"
+"% width height x y strokeBox\n"
+"newpath\n"
+"boxAt\n"
+"stroke\n"
+"} def\n"
+"\n"
+"/smallFont {\n"
+"/Times-Roman findfont\n"
+"10 scalefont\n"
+"setfont\n"
+"} def\n"
+"\n"
+"/showBefore {\n"
+"% Draw text immediately before rather\n"
+"% than immediately after current position.\n"
+"% Usage (some text) showBefore\n"
+"dup\n"
+"stringwidth\n"
+"neg\n"
+"exch\n"
+"neg\n"
+"exch\n"
+"rmoveto\n"
+"show\n"
+"} def\n"
+"\n"
+"/showMiddle {\n"
+"% Draw text centered at current position.\n"
+"% Usage (some text) showMiddle\n"
+"dup stringwidth\n"
+"2 div neg\n"
+"exch\n"
+"2 div neg\n"
+"exch\n"
+"rmoveto\n"
+"show\n"
+"} def\n"
+"\n"
+"/ellipse {\n"
+"/endangle exch def\n"
+"/startangle exch def\n"
+"/yrad exch def\n"
+"/xrad exch def\n"
+"/y exch def\n"
+"/x exch def\n"
+"/savematrix matrix currentmatrix def\n"
+"x y translate\n"
+"xrad yrad scale\n"
+"0 0 1 startangle endangle arc\n"
+"savematrix setmatrix\n"
+"} def\n"
+"/fillTextBox {\n"
+"true charpath pathbbox\n"
+"/y2 exch def /x2 exch def\n"
+"/y1 exch def /x1 exch def\n"
+"/w x2 x1 sub def\n"
+"/h y2 y1 sub def\n"
+"w h x1 y1 fillBox\n"
+"} def\n"
+"\n"
+"smallFont\n"
+"\n"
diff --git a/gbtools/src/blatSrc/lib/correlate.c b/gbtools/src/blatSrc/lib/correlate.c
new file mode 100644
index 0000000..34fa127
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/correlate.c
@@ -0,0 +1,80 @@
+/* correlate - calculate r, also known as Pearson's correlation
+ * coefficient.  r*r has the nice property that it explains
+ * how much of one variable's variation can be explained as
+ * a linear function of the other variable's variation.  Beware
+ * the weight of extreme outliers though! */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "correlate.h"
+
+
+struct correlate *correlateNew()
+/* Return new correlation handler. */
+{
+struct correlate *c;
+return AllocVar(c);
+}
+
+void correlateFree(struct correlate **pC)
+/* Free up correlator. */
+{
+freez(pC);
+}
+
+void correlateNext(struct correlate *c, double x, double y)
+/* Add next sample to correlation. */
+{
+c->sumX += x;
+c->sumXX += x*x;
+c->sumXY += x*y;
+c->sumY += y;
+c->sumYY += y*y;
+c->n += 1; 
+}
+
+void correlateNextMulti(struct correlate *c, double x, double y, int count)
+/* Do same thing as calling correlateNext with x and y count times. */
+{
+double ct = count;	/* Do type conversion once. */
+double cx = ct*x;
+double cy = ct*y;
+c->sumX += cx;
+c->sumXX += cx*x;
+c->sumXY += cx*y;
+c->sumY += cy;
+c->sumYY += cy*y;
+c->n += count;
+}
+
+double correlateResult(struct correlate *c)
+/* Returns correlation (aka R) */
+{
+double r = 0;
+if (c->n > 0)
+    {
+    double sp = c->sumXY - c->sumX*c->sumY/c->n;
+    double ssx = c->sumXX - c->sumX*c->sumX/c->n;
+    double ssy = c->sumYY - c->sumY*c->sumY/c->n;
+    double q = ssx*ssy;
+    if (q != 0)
+        r = sp/sqrt(q);
+    }
+return r;
+}
+
+double correlateArrays(double *x, double *y, int size)
+/* Return correlation of two arrays of doubles. */
+{
+struct correlate *c = correlateNew();
+double r;
+int i;
+for (i=0; i<size; ++i)
+     correlateNext(c, x[i], y[i]);
+r = correlateResult(c);
+correlateFree(&c);
+return r;
+}
+
diff --git a/gbtools/src/blatSrc/lib/crTree.c b/gbtools/src/blatSrc/lib/crTree.c
new file mode 100644
index 0000000..4936dea
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/crTree.c
@@ -0,0 +1,401 @@
+/* Copyright (C) 2009 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+/* crTree chromosome r tree. This module creates and uses a disk-based index that can find items
+ * that overlap with a chromosome range - something of the form chrN:start-end - with a
+ * minimum of disk access.  It is implemented with a combination of bPlusTrees and r-trees. 
+ * The items being indexed can overlap with each other.  
+ * 
+ * There's two main sides to using this module - creating an index, and using it.
+ *
+ * The first step of index creation is actually to insure that the file being indexed
+ * is ordered by chromosome,start,end.  For a .bed file you can insure this
+ * with the command:
+ *     sort -k1,1 -k2,2n -k3,3n unsorted.bed > sorted.bed
+ * Note that the the chromosome field is sorted alphabetically and the start and end
+ * fields are sorted numerically.
+ *
+ * Once this is done then the index creation program scans the input file, and
+ * makes a list of crTreeItems, one for each item in the file, and passed this
+ * to the function crTreeFileCreate. A crTreeItem just contains the chromosome
+ * range and file offset for an item.
+ *
+ * Using an index is done in two steps.  First you open the index with crTreeFileOpen,
+ * and then you use crTreeFindOverlappingBlocks to find parts of the file the overlap
+ * with your query range.  The result of a crTreeFindOverlappingBlocks call is a list
+ * of regions in the file.  These regions typically include some non-overlapping items
+ * as well.  It is up to the caller to parse through the resulting region list to
+ * convert it from just bytes on disk into the memory data structure.  During this
+ * parsing you should ignore items that don't overlap your range of interest.
+ *
+ * The programs crTreeIndexBed and crTreeSearchBed create and search a crTree index
+ * for a bed file, and are useful examples to view for other programs that want to
+ * use the crTree system. */
+
+
+#include "common.h"
+#include "hash.h"
+#include "udc.h"
+#include "sig.h"
+#include "bPlusTree.h"
+#include "cirTree.h"
+#include "crTree.h"
+
+#define chromOffsetPos 8	// Where in file chromosome b-tree lives
+#define cirOffsetPos 16		// Where in file interval r-tree lives
+#define crHeaderSize 64		// Size of file header 
+
+struct name32
+/* Pair of a name and a 32-bit integer. Used to assign IDs to chromosomes. */
+    {
+    struct name32 *next;
+    char *name;
+    bits32 val;
+    };
+
+static int name32Cmp(const void *va, const void *vb)
+/* Compare to sort on name. */
+{
+const struct name32 *a = ((struct name32 *)va);
+const struct name32 *b = ((struct name32 *)vb);
+return strcmp(a->name, b->name);
+}
+
+static void name32Key(const void *va, char *keyBuf)
+/* Get key field. */
+{
+const struct name32 *a = ((struct name32 *)va);
+strcpy(keyBuf, a->name);
+}
+
+static void *name32Val(const void *va)
+/* Get key field. */
+{
+const struct name32 *a = ((struct name32 *)va);
+return (void*)(&a->val);
+}
+
+struct crTreeRange
+/* A chromosome id and an interval inside it. */
+    {
+    char *chrom;	/* Chromosome id. String memory owned in hash. */
+    bits32 start;	/* Start position in chromosome. */
+    bits32 end;		/* One past last base in interval in chromosome. */
+    };
+
+struct ciContext 
+/* A structure that carries around context for the fetchKey and fetchOffset callbacks. */
+    {
+    struct crTreeRange (*fetchKey)(const void *va);   /* Given item, return key. */
+    bits64 (*fetchOffset)(const void *va); 		 /* Given item, return file offset */
+    };
+
+struct ciItem
+/* Small wrapper around crItem. Contains the key values precomputed, and the chromosome index
+ * for each key. */
+     {
+     void *item;			/* Underlying cr item. */
+     struct crTreeRange key;		/* The key for this item. */
+     bits32 chromIx;			/* Associated chromosome index. */
+     };
+
+static struct cirTreeRange ciItemFetchKey(const void *va, void *context)
+/* Given item, return key. */
+{
+const struct ciItem *a = ((struct ciItem *)va);
+struct cirTreeRange ret;
+ret.chromIx = a->chromIx;
+ret.start = a->key.start;
+ret.end = a->key.end;
+return ret;
+}
+
+static bits64 ciItemFetchOffset(const void *va, void *context)
+/* Given item, return file offset */
+{
+const struct ciItem *a = ((struct ciItem *)va);
+const struct ciContext *c = context;
+return (c->fetchOffset)(a->item);
+}
+
+static bits32 mustFindChromIx(char *chrom, struct name32 *array, bits32 chromCount)
+/* Do a binary search on array to find the index associated with chrom.  Print
+ * error message and abort if not found. */
+{
+struct name32 key;
+key.name = chrom;
+struct name32 *el = bsearch(&key, array, chromCount, sizeof(array[0]), name32Cmp);
+if (el == NULL)
+    errAbort("%s not found in mustFindChromIx\n", chrom);
+return el->val;
+}
+
+static void crTreeFileCreateLow(
+	char **chromNames,	/* All chromosome (or contig) names */
+	int chromCount,		/* Number of chromosomes. */
+	void *itemArray, 	/* Sorted array of things to index. */
+	int itemSize, 		/* Size of each element in array. */
+	bits64 itemCount, 	/* Number of elements in array. */
+	bits32 blockSize,	/* R tree block size - # of children for each node. */
+	bits32 itemsPerSlot,	/* Number of items to put in each index slot at lowest level. */
+	struct crTreeRange (*fetchKey)(const void *va),   /* Given item, return key. */
+	bits64 (*fetchOffset)(const void *va), 		 /* Given item, return file offset */
+	bits64 initialDataOffset,			 /* Offset of 1st piece of data in file. */
+	bits64 totalDataSize,				 /* Total size of data we are indexing. */
+	char *fileName)                                 /* Name of output file. */
+/* Create a r tree index file from an array of chromosomes and an array of items with
+ * basic bed (chromosome,start,end) and file offset information. */
+{
+// uglyf("crTreeFileCreate %s itemCount=%llu, chromCount=%d\n", fileName, itemCount, chromCount);
+/* Open file and write header. */
+FILE *f = mustOpen(fileName, "wb");
+bits32 magic = crTreeSig;
+bits32 reserved32 = 0;
+bits64 chromOffset = crHeaderSize;
+bits64 cirOffset = 0;
+bits64 reserved64 = 0;
+writeOne(f, magic);
+writeOne(f, reserved32);
+writeOne(f, chromOffset);
+writeOne(f, cirOffset);	       /* Will fill this back in later */
+writeOne(f, reserved64);
+writeOne(f, reserved64);
+writeOne(f, reserved64);
+writeOne(f, reserved64);
+writeOne(f, reserved64);
+
+/* Convert array of chromosomes to a sorted array of name32s.  Also
+ * figure out maximum chromosome name size. */
+struct name32 *name32Array;
+AllocArray(name32Array, chromCount);
+bits32 chromIx;
+int maxChromNameSize = 0;
+for (chromIx=0; chromIx<chromCount; ++chromIx)
+    {
+    struct name32 *name32 = &name32Array[chromIx];
+    char *name = chromNames[chromIx];
+    name32->name = name;
+    int nameSize = strlen(name);
+    if (nameSize > maxChromNameSize)
+        maxChromNameSize = nameSize;
+    }
+qsort(name32Array, chromCount, sizeof(name32Array[0]), name32Cmp);
+for (chromIx=0; chromIx<chromCount; ++chromIx)
+    {
+    struct name32 *name32 = &name32Array[chromIx];
+    name32->val = chromIx;
+    }
+
+/* Write out bPlusTree index of chromosome IDs. */
+int chromBlockSize = min(blockSize, chromCount);
+bptFileBulkIndexToOpenFile(name32Array, sizeof(name32Array[0]), chromCount, chromBlockSize,
+    name32Key, maxChromNameSize, name32Val, sizeof(name32Array[0].val), f);
+	
+/* Convert itemArray to ciItemArray.  This is mainly to avoid having to do the chromosome to
+ * chromosome index conversion for each item.  The cost is some memory though.... */
+struct ciItem *ciItemArray;
+AllocArray(ciItemArray, itemCount);
+bits64 itemIx;
+char *itemPos = itemArray;
+char *lastChrom = "";
+bits32 lastChromIx = 0;
+for (itemIx=0; itemIx < itemCount; ++itemIx)
+    {
+    struct ciItem *ciItem = &ciItemArray[itemIx];
+    ciItem->item = itemPos;
+    ciItem->key = (*fetchKey)(itemPos);
+    if (!sameString(lastChrom, ciItem->key.chrom))
+        {
+	lastChrom = ciItem->key.chrom;
+	lastChromIx = mustFindChromIx(lastChrom, name32Array, chromCount);
+	}
+    ciItem->chromIx = lastChromIx;
+    itemPos += itemSize;
+    }
+
+/* Record starting position of r tree and write it out. */
+cirOffset = ftell(f);
+struct ciContext context;
+ZeroVar(&context);
+context.fetchKey = fetchKey;
+context.fetchOffset = fetchOffset;
+cirTreeFileBulkIndexToOpenFile(ciItemArray, sizeof(ciItemArray[0]), itemCount, blockSize, 
+	itemsPerSlot, &context, ciItemFetchKey, ciItemFetchOffset, totalDataSize, f);
+
+/* Seek back and write offset to r tree. */
+fseek(f, cirOffsetPos, SEEK_SET);
+writeOne(f, cirOffset);
+
+
+/* Clean up */
+freez(&name32Array);
+carefulClose(&f);
+}
+
+int crTreeItemCmp(const void *va, const void *vb)
+/* Compare to sort based on chrom,start,end. */
+{
+const struct crTreeItem *a = ((struct crTreeItem *)va);
+const struct crTreeItem *b = ((struct crTreeItem *)vb);
+int dif;
+dif = strcmp(a->chrom, b->chrom);
+if (dif == 0)
+    dif = a->start - b->start;
+if (dif == 0)
+    dif = a->end - b->end;
+return dif;
+}
+
+struct crTreeRange crTreeItemKey(const void *va)
+/* Get key fields. */
+{
+const struct crTreeItem *a = *((struct crTreeItem **)va);
+struct crTreeRange ret;
+ret.chrom = a->chrom;
+ret.start = a->start;
+ret.end = a->end;
+return ret;
+}
+
+bits64 crTreeItemOffset(const void *va)
+/* Get offset of item in file. */
+{
+const struct crTreeItem *a = *((struct crTreeItem **)va);
+return a->fileOffset;
+}
+
+void crTreeFileCreateInputCheck(struct crTreeItem *itemList, struct hash *chromHash, 
+	bits32 blockSize, bits32 itemsPerSlot, bits64 endPosition, char *fileName)
+/* Do sanity checking on itemList and chromHash and endPosition.  Make sure that itemList is
+ * sorted properly mostly. */
+{
+struct crTreeItem *item, *next;
+for (item = itemList; item != NULL; item = next)
+    {
+    next = item->next;
+    if (next != NULL)
+	{
+        if (crTreeItemCmp(item, next) > 0)
+	    errAbort("Out of order itemList in crTreeFileCreateInputCheck");
+	if (item->fileOffset > next->fileOffset)
+	    errAbort("Out of sequence itemList in crTreeFileCreateInputCheck");
+	}
+    }
+}
+
+
+void crTreeFileCreate(
+	struct crTreeItem *itemList,  /* List of all items - sorted here and in underlying file. */
+	struct hash *chromHash,	      /* Hash of all chromosome names. */
+	bits32 blockSize,	/* R tree block size - # of children for each node. 1024 is good. */
+	bits32 itemsPerSlot,	/* Number of items to put in each index slot at lowest level.
+				 * Typically either blockSize/2 or 1. */
+	bits64 endPosition,	/* File offset after have read all items in file. */
+	char *fileName)        /* Name of output file. */
+/* Create a cr tree index of file. The itemList contains the position of each item in the
+ * chromosome and in the file being indexed.  Both the file and the itemList must be sorted
+ * by chromosome (alphabetic), start (numerical), end (numerical). 
+ *    We recommend you run crTreeFileCreateInputCheck on the input parameters right before
+ * calling this if you have problems. */
+{
+/* We can't handle empty input... */
+if (itemList == NULL)
+    errAbort("crTreeFileCreate can't handle empty itemList.");
+
+/* Make array of pointers out of linked list. */
+struct crTreeItem **itemArray;
+bits32 itemCount = slCount(itemList);
+AllocArray(itemArray, itemCount);
+struct crTreeItem *item;
+int itemIx;
+for (itemIx=0, item=itemList; itemIx<itemCount; ++itemIx, item=item->next)
+    itemArray[itemIx] = item;
+
+/* Make up chromosome array. */
+int chromCount = chromHash->elCount;
+char **chromArray;
+AllocArray(chromArray, chromCount);
+struct hashEl *el, *list = hashElListHash(chromHash);
+bits32 chromIx;
+for (el = list, chromIx=0; el != NULL; el = el->next, ++chromIx)
+    chromArray[chromIx] = el->name;
+slFreeList(&list);
+
+/* Call function to make index file. */
+crTreeFileCreateLow(chromArray, chromCount, itemArray, sizeof(itemArray[0]), itemCount,
+	blockSize, itemsPerSlot, crTreeItemKey, crTreeItemOffset, itemList->fileOffset, 
+	endPosition, fileName);
+}
+
+/****** Start of reading and searching (as opposed to file creation) code *******/
+
+struct crTreeFile *crTreeFileOpen(char *fileName)
+/* Open up r-tree index file - reading headers and verifying things. */
+{
+/* Open file and allocate structure to hold info from header etc. */
+struct udcFile *udc = udcFileOpen(fileName, udcDefaultDir());
+struct crTreeFile *crt = needMem(sizeof(*crt));
+fileName = crt->fileName = cloneString(fileName);
+crt->udc = udc;
+
+/* Read magic number at head of file and use it to see if we are proper file type, and
+ * see if we are byte-swapped. */
+bits32 magic;
+boolean isSwapped = FALSE;
+udcMustReadOne(udc, magic);
+if (magic != crTreeSig)
+    {
+    magic = byteSwap32(magic);
+    isSwapped = crt->isSwapped = TRUE;
+    if (magic != crTreeSig)
+       errAbort("%s is not a chromosome r-tree index file", fileName);
+    }
+
+/* Read rest of high level header including notably the offsets to the
+ * chromosome and range indexes. */
+bits32 reserved32;
+udcMustReadOne(udc, reserved32);
+crt->chromOffset = udcReadBits64(udc, isSwapped);
+crt->cirOffset = udcReadBits64(udc, isSwapped);
+
+/* Read in the chromosome index header. */
+udcSeek(udc, crt->chromOffset);
+crt->chromBpt = bptFileAttach(fileName, udc);
+
+/* Read in range index header. */
+udcSeek(udc, crt->cirOffset);
+crt->cir = cirTreeFileAttach(fileName, udc);
+
+return crt;
+}
+
+void crTreeFileClose(struct crTreeFile **pCrt)
+/* Close and free up crTree file opened with crTreeFileAttach. */
+{
+struct crTreeFile *crt = *pCrt;
+if (crt != NULL)
+    {
+    cirTreeFileDetach(&crt->cir);
+    bptFileDetach(&crt->chromBpt);
+    udcFileClose(&crt->udc);
+    freez(&crt->fileName);
+    freez(pCrt);
+    }
+}
+
+
+struct fileOffsetSize *crTreeFindOverlappingBlocks(struct crTreeFile *crt, 
+	char *chrom, bits32 start, bits32 end)
+/* Return list of file blocks that between them contain all items that overlap
+ * start/end on chromIx.  Also there will be likely some non-overlapping items
+ * in these blocks too. When done, use slListFree to dispose of the result. */
+{
+/* Find chromosome index.  Return NULL if no such chromosome*/
+bits32 chromIx;
+if (!bptFileFind(crt->chromBpt, chrom, strlen(chrom), &chromIx, sizeof(chromIx)))
+    return NULL;
+
+return cirTreeFindOverlappingBlocks(crt->cir, chromIx, start, end);
+}
+
+
diff --git a/gbtools/src/blatSrc/lib/dgRange.c b/gbtools/src/blatSrc/lib/dgRange.c
new file mode 100644
index 0000000..ed2e33a
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/dgRange.c
@@ -0,0 +1,222 @@
+/* dgRange - stuff to tell if a graph which has a range
+ * of values associated with each edge is internally consistent.  
+ * See comment under bfGraphFromRangeGraph for details. */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "diGraph.h"
+
+
+struct bfEdge
+/* An edge in a (lightweight) Belman Ford graph. */
+   {
+   struct bfEdge *next;    /* Pointer to next element. */
+   int distance;           /* Distance - may be negative. */
+   struct bfVertex *in;    /* Connecting node. */
+   struct bfVertex *out;   /* Connecting node. */
+   };
+
+struct bfVertex
+/* A node in a (lightweight) Belman Ford graph. */
+   {
+   int position;               /* Currently assigned position. */
+   struct bfEdge *waysOut;     /* Ways out. */
+   };
+
+struct bfGraph
+/* A lightweight, but fixed sized graph for Belman Ford algorithm. */
+    {
+    int vertexCount;	         /* Number of vertices */
+    struct bfVertex *vertices;   /* Array of vertices. */
+    int edgeCount;               /* Number of edges. */
+    struct bfEdge *edges;        /* Array of edges. */
+    };
+
+struct bfRange 
+/* Min and max distances allowed for an edge. */
+   {
+   int minDist, maxDist;
+   };
+
+static void bfGraphFree(struct bfGraph **pGraph)
+/* Free up Belman-Ford graph. */
+{
+struct bfGraph *graph = *pGraph;
+if (graph != NULL)
+    {
+    freeMem(graph->vertices);
+    freeMem(graph->edges);
+    freez(pGraph);
+    }
+}
+
+static struct bfGraph *bfGraphFromRangeGraph(struct diGraph *rangeGraph, 
+   boolean (*findEdgeRange)(struct dgEdge *edge, int *retMin, int *retMax),
+   struct dgNode *a, struct dgNode *b, int abMin, int abMax)
+/* Construct a directed graph with two edges for each
+ * edge of the range graph.  Where the range graph
+ * has the following info:
+ *     sourceNode destNode minDistance maxDistance
+ *    -------------------------------------------
+ *         A         B         2          5
+ * The bfGraph would have:
+ *     sourceNode destNode   edgeVal  meaning
+ *    --------------------------------------------
+ *         A         B         5     D(A) - D(B) <= 5 
+ *         B         A        -2     D(B) - D(A) <= -2
+ * Furthermore the bfGraph introduces a new node,
+ * "zero", which has a zero-valued connection to
+ * all other nodes.
+ *
+ * This graph can then be processed via the Bellman-
+ * Ford algorithm (see p. 532 of Cormen,Leiserson and
+ * Rivest's Introduction to Algorithms, MIT Press 1990)
+ * to see if the bfGraph, and by extension the range
+ * graph, is consistent.
+ */
+{
+struct bfGraph *bfGraph;
+struct bfVertex *vertices, *freeVertex, *newSource, *newDest, *zeroVertex;
+struct bfEdge *edges, *newEdge, *freeEdge;
+struct dgNode *oldSource, *oldDest, *oldNode;
+int oldEdgeCount = dlCount(rangeGraph->edgeList);
+int oldVertexCount = 0;
+
+/* Coopt topoOrder field to store unique ID for each
+ * node, starting at 1.  (We'll reserve 0 for the
+ * node we insert - the Belman Ford "zero" node.)*/
+for (oldNode = rangeGraph->nodeList; oldNode != NULL; oldNode = oldNode->next)
+    oldNode->topoOrder = ++oldVertexCount;
+
+/* Allocate space for new graph. */
+AllocVar(bfGraph);
+bfGraph->vertexCount = oldVertexCount + 1;
+bfGraph->vertices = freeVertex = AllocArray(vertices, bfGraph->vertexCount);
+bfGraph->edgeCount = 2*oldEdgeCount + oldVertexCount;
+if (a != NULL)
+  bfGraph->edgeCount += 2;
+bfGraph->edges = freeEdge = AllocArray(edges, bfGraph->edgeCount);
+
+/* Get zero vertex. */
+zeroVertex = freeVertex++;
+
+/* Scan through old graph and add vertices to new graph. */
+for (oldSource = rangeGraph->nodeList; oldSource != NULL; 
+    oldSource = oldSource->next)
+    {
+    struct dgConnection *dgConn;
+    int rangeMin, rangeMax;
+
+    /* Allocate new source vertex. */
+    newSource = freeVertex++;
+
+    /* Make connection from zero vertex to this one. */
+    newEdge = freeEdge++;
+    newEdge->distance = 0;
+    newEdge->in = zeroVertex;
+    newEdge->out = newSource;
+    slAddHead(&zeroVertex->waysOut, newEdge);
+
+    /* Loop through all ways out of source. */
+    for (dgConn = oldSource->nextList; dgConn != NULL; dgConn = dgConn->next)
+        {
+	/* Find destination vertex and size range of edge. */
+	if ((*findEdgeRange)(dgConn->edgeOnList->val, &rangeMin, &rangeMax))
+	    {
+	    oldDest = dgConn->node;
+	    newDest = &vertices[oldDest->topoOrder];
+
+	    /* Make two new edges corresponding to old edge. */
+	    newEdge = freeEdge++;
+	    newEdge->distance = rangeMax;
+	    newEdge->in = newSource;
+	    newEdge->out = newDest;
+	    slAddHead(&newSource->waysOut, newEdge);
+	    newEdge = freeEdge++;
+	    newEdge->distance = -rangeMin;
+	    newEdge->in = newDest;
+	    newEdge->out = newSource;
+	    slAddHead(&newDest->waysOut, newEdge);
+	    }
+	}
+    }
+/* Add additional pair of edges for extra range if applicable. */
+if (a != NULL)
+    {
+    newSource = &vertices[a->topoOrder];
+    newDest = &vertices[b->topoOrder];
+    newEdge = freeEdge++;
+    newEdge->distance = abMax;
+    newEdge->in = newSource;
+    newEdge->out = newDest;
+    slAddHead(&newSource->waysOut, newEdge);
+    newEdge = freeEdge++;
+    newEdge->distance = -abMin;
+    newEdge->in = newDest;
+    newEdge->out = newSource;
+    slAddHead(&newDest->waysOut, newEdge);
+    }
+bfGraph->edgeCount = freeEdge - bfGraph->edges;
+return bfGraph;
+}
+
+static boolean bfCheckGraph(struct bfGraph *graph)
+/* Run Belman-Ford algorithm to check graph for consistency. */
+{
+struct bfVertex *vertices = graph->vertices, *in, *out;
+int vertexCount = graph->vertexCount;
+int edgeCount = graph->edgeCount;
+struct bfEdge *edges = graph->edges, *edge;
+int i, edgeIx;
+int maxIterations = vertexCount - 1;
+boolean anyChange = FALSE;
+int newPos;
+
+for (i=0; i<vertexCount; ++i)
+    vertices[i].position = 0x3fffffff;    /* Mighty big number. */
+for (i=0; i<maxIterations; ++i)
+    {
+    anyChange = FALSE;
+    for (edgeIx = 0, edge = edges; edgeIx < edgeCount; ++edgeIx, ++edge)
+        {
+	in = edge->in;
+	out = edge->out;
+	newPos = in->position + edge->distance;
+	if (newPos < out->position)
+	    {
+	    out->position = newPos;
+	    anyChange = TRUE;
+	    }
+	}
+    if (!anyChange)
+        break;
+    }
+return !anyChange;
+}
+
+boolean dgAddedRangeConsistent(struct diGraph *rangeGraph,
+   struct dgNode *a, struct dgNode *b, int abMin, int abMax,
+   boolean (*findEdgeRange)(struct dgEdge *edge, int *retMin, int *retMax) )
+/* Return TRUE if graph with a range of allowable distances associated
+ * with each edge would be internally consistent if add edge from a to b
+ * with given min/max values. */
+{
+struct bfGraph *bfGraph;
+boolean ok; 
+
+bfGraph = bfGraphFromRangeGraph(rangeGraph, findEdgeRange, a, b, abMin, abMax);
+ok = bfCheckGraph(bfGraph);
+bfGraphFree(&bfGraph);
+return ok;
+}
+
+boolean dgRangesConsistent(struct diGraph *rangeGraph,
+   boolean (*findEdgeRange)(struct dgEdge *edge, int *retMin, int *retMax) )
+/* Return TRUE if graph with a range of allowable distances associated
+ * with each edge is internally consistent. */
+{
+return dgAddedRangeConsistent(rangeGraph, NULL, NULL, 0, 0, findEdgeRange);
+}
+
diff --git a/gbtools/src/blatSrc/lib/diGraph.c b/gbtools/src/blatSrc/lib/diGraph.c
new file mode 100644
index 0000000..a76204e
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/diGraph.c
@@ -0,0 +1,741 @@
+/* diGraph - Directed graph routines. 
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "hash.h"
+#include "dlist.h"
+#include "diGraph.h"
+
+
+struct diGraph *dgNew()
+/* Return a new directed graph object. */
+{
+struct diGraph *dg;
+AllocVar(dg);
+dg->nodeHash = newHash(0);
+dg->edgeList = newDlList();
+return dg;
+}
+
+static void dgNodeFree(struct dgNode **pNode)
+/* Free a diGraph node. */
+{
+struct dgNode *node = *pNode;
+if (node == NULL)
+    return;
+slFreeList(&node->nextList);
+slFreeList(&node->prevList);
+freez(pNode);
+}
+
+static void dgNodeFreeList(struct dgNode **pList)
+/* Free list of diGraph nodes. */
+{
+struct dgNode *el, *next;
+
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    dgNodeFree(&el);
+    }
+*pList = NULL;
+}
+
+void dgFree(struct diGraph **pGraph)
+/* Free a directed graph. */
+{
+struct diGraph *dg = *pGraph;
+if (dg == NULL)
+    return;
+freeHash(&dg->nodeHash);
+dgNodeFreeList(&dg->nodeList);
+freeDlListAndVals(&dg->edgeList);
+freez(pGraph);
+}
+
+
+struct dgNode *dgAddNode(struct diGraph *dg, char *name, void *val)
+/* Create new node in graph. It's legal (but not efficient) to add
+ * a node with the same name and value twice.  It's not legal to
+ * add a node with the same name and a different value.  
+ * You can pass in NULL for the name in which case the 
+ * hexadecimal representation of val will become the name. */
+{
+struct dgNode *node;
+struct hashEl *hel;
+struct hash *hash = dg->nodeHash;
+char nbuf[17];
+
+if (name == NULL)
+    {
+    sprintf(nbuf, "%p", val);
+    name = nbuf;
+    }
+hel = hashLookup(hash, name);
+if (hel != NULL)
+    {
+    node = hel->val;
+    if (node->val != val)
+	{
+	errAbort("Trying to add node %s with a new value (old 0x%llx new 0x%llx)",
+	    name, ptrToLL(node->val), ptrToLL(val));
+	}
+    return node;
+    }
+AllocVar(node);
+hel = hashAdd(hash, name, node);
+node->name = hel->name;
+node->val = val;
+slAddHead(&dg->nodeList, node);
+return node;
+}
+
+struct dgNode *dgAddNumberedNode(struct diGraph *dg, int id, void *val)
+/* Create new node with a number instead of a name. */
+{
+char buf[16];
+sprintf(buf, "%d", id);
+return dgAddNode(dg, buf, val);
+}
+
+struct dgNode *dgFindNode(struct diGraph *dg, char *name)
+/* Find existing node in graph. Return NULL if not in graph. */
+{
+struct hashEl *hel;
+if ((hel = hashLookup(dg->nodeHash, name)) == NULL)
+    return NULL;
+return hel->val;
+}
+
+struct dgNode *dgFindNumberedNode(struct diGraph *dg, int id)
+/* Find node given number. */
+{
+char buf[16];
+sprintf(buf, "%d", id);
+return dgFindNode(dg, buf);
+}
+
+
+void *dgNodeVal(struct dgNode *node)
+/* Return value associated with node. */
+{
+return node->val;
+}
+
+void *dgNodeName(struct dgNode *node)
+/* Return name associated with node. */
+{
+return node->name;
+}
+
+int dgNodeNumber(struct dgNode *node)
+/* Return number of node.  (Will likely return 0 if node
+ * was added with a name rather than a number). */
+{
+return atoi(node->name);
+}
+
+struct dgNodeRef *dgFindNodeInRefList(struct dgNodeRef *refList, struct dgNode *node)
+/* Return reference to node if in list, or NULL if not. */
+{
+struct dgNodeRef *ref;
+for (ref = refList; ref != NULL; ref = ref->next)
+    if (ref->node == node)
+	return ref;
+return NULL;
+}
+
+struct dgConnection *dgFindNodeInConList(struct dgConnection *conList, struct dgNode *node)
+/* Return connection to node if in list, or NULL if not. */
+{
+struct dgConnection *con;
+for (con = conList; con != NULL; con = con->next)
+    if (con->node == node)
+	return con;
+return NULL;
+}
+
+
+struct dgEdge *dgConnect(struct diGraph *dg, struct dgNode *a, struct dgNode *b)
+/* Connect node a to node b.  Returns connecting edge. 
+ * Not an error to reconnect.  However all connects can 
+ * be broken with a single disconnect. */
+{
+return dgConnectWithVal(dg, a, b, NULL);
+}
+
+struct dgEdge *dgConnectWithVal(struct diGraph *dg, struct dgNode *a, 
+     struct dgNode *b, void *val)
+/* Connect node a to node b and put val on edge.  An error to
+ * reconnect with a different val. */
+{
+struct dgConnection *con;
+struct dgEdge *edge;
+struct dlNode *edgeOnList;
+
+/* Check to see if it's already there. */
+if ((con = dgFindNodeInConList(a->nextList, b)) != NULL)
+    {
+    edge =  con->edgeOnList->val;
+    if (val != edge->val)
+        warn("Trying to add new value to edge between %s and %s, ignoring",
+	   a->name, b->name);
+    return edge;
+    }
+/* Allocate edge and put on list. */
+AllocVar(edge);
+edge->a = a;
+edge->b = b;
+edge->val = val;
+edgeOnList = dlAddValTail(dg->edgeList, edge);
+
+/* Connect nodes to each other. */
+AllocVar(con);
+con->node = b;
+con->edgeOnList = edgeOnList;
+slAddHead(&a->nextList, con);
+AllocVar(con);
+con->node = a;
+con->edgeOnList = edgeOnList;
+slAddHead(&b->prevList, con);
+
+return edge;
+}
+
+static struct dlNode *dgRemoveFromConList(struct dgConnection **pConList, 
+	struct dgNode *node, struct dgConnection **retCon)
+/* Remove reference to node from list. */
+{
+struct dgConnection *newList = NULL;
+struct dgConnection *con, *next;
+struct dlNode *edgeOnList = NULL;
+
+for (con = *pConList; con != NULL; con = next)
+    {
+    next = con->next;
+    if (con->node == node)
+	{
+	edgeOnList = con->edgeOnList;
+	if (retCon != NULL)
+	    *retCon = con;
+	else
+	    freeMem(con);
+	}
+    else
+	{
+	slAddHead(&newList, con);
+	}
+    }
+slReverse(&newList);
+*pConList = newList;
+return edgeOnList;
+}
+
+void dgDisconnect(struct diGraph *dg, struct dgNode *a, struct dgNode *b)
+/* Disconnect nodes a and b. */
+{
+struct dlNode *edgeInList;
+struct dgEdge *edge;
+
+dgRemoveFromConList(&a->nextList, b, NULL);
+edgeInList = dgRemoveFromConList(&b->prevList, a, NULL);
+if (edgeInList != NULL)
+    {
+    edge = edgeInList->val;
+    dlRemove(edgeInList);
+    freeMem(edgeInList);
+    freeMem(edge);
+    }
+}
+
+
+void dgClearVisitFlags(struct diGraph *dg)
+/* Clear out visit flags. */
+{
+struct dgNode *node;
+for (node = dg->nodeList; node != NULL; node = node->next)
+    node->visited = FALSE;
+}
+
+void dgClearConnFlags(struct diGraph *dg)
+/* Clear out connect flags. */
+{
+struct dgNode *node;
+for (node = dg->nodeList; node != NULL; node = node->next)
+    node->conn = FALSE;
+}
+
+static struct dgNode *rTarget;
+
+static boolean rPathExists(struct dgNode *a)
+/* Recursively find if path from a to b exists. */
+{
+struct dgConnection *ref;
+if (a == rTarget)
+    return TRUE;
+a->visited = TRUE;
+
+for (ref = a->nextList; ref != NULL; ref = ref->next)
+    {
+    if (!ref->node->visited && rPathExists(ref->node))
+	return TRUE;
+    }
+return FALSE;
+}
+
+boolean dgPathExists(struct diGraph *dg, struct dgNode *a, struct dgNode *b)
+/* Return TRUE if there's a path from a to b. */
+{
+rTarget = b;
+dgClearVisitFlags(dg);
+return rPathExists(a);
+}
+
+static int topoIx;
+
+static void rTopoSort(struct dgNode *node)
+{
+struct dgConnection *ref;
+node->visited = TRUE;
+for (ref = node->nextList; ref != NULL; ref = ref->next)
+    {
+    if (!ref->node->visited)
+	rTopoSort(ref->node);
+    }
+node->topoOrder = ++topoIx;
+}
+
+void dgTopoSort(struct diGraph *dg)
+/* Fill in topological order of nodes. */
+{
+struct dgNode *node;
+
+topoIx = 0;
+dgClearVisitFlags(dg);
+for (node = dg->nodeList; node != NULL; node = node->next)
+    {
+    if (!node->visited)
+	rTopoSort(node);
+    }
+}
+
+static boolean  rHasCycles(struct dgNode *node)
+/* Recursively see if has cycles by looking for
+ * backwards topoOrder. */
+{
+struct dgConnection *ref;
+struct dgNode *child;
+
+node->visited = TRUE;
+for (ref = node->nextList; ref != NULL; ref = ref->next)
+    {
+    child = ref->node;
+    if (child->topoOrder > node->topoOrder)
+	return TRUE;
+    if (!child->visited)
+	if (rHasCycles(child))
+	    return TRUE;
+    }
+return FALSE;
+}
+
+boolean dgHasCycles(struct diGraph *dg)
+/* Return TRUE if directed graph has cycles. */
+{
+struct dgNode *node;
+
+dgTopoSort(dg);
+dgClearVisitFlags(dg);
+for (node = dg->nodeList; node != NULL; node = node->next)
+    {
+    if (!node->visited)
+	if (rHasCycles(node))
+	    return TRUE;
+    }
+return FALSE;
+}
+
+struct dgNodeRef *rRefList;
+bool rMustHaveVal;			/* Set to TRUE if rFindConnected only to
+                                         * consider nodes with values in connections. */
+
+static void rFindConnected(struct dgNode *a)
+/* Find all things connected to a directly or not that haven't
+ * already been visited and put them on rRefList. */
+{
+if (!a->conn && (!rMustHaveVal || a->val))
+    {
+    struct dgNodeRef *ref;
+    struct dgConnection *con;
+    AllocVar(ref);
+    ref->node = a;
+    slAddHead(&rRefList, ref);
+    a->conn = TRUE;
+    for (con = a->nextList; con != NULL; con = con->next)
+	rFindConnected(con->node);
+    for (con = a->prevList; con != NULL; con = con->next)
+	rFindConnected(con->node);
+    }
+}
+
+struct dgNodeRef *dgFindNextConnected(struct diGraph *dg)
+/* Return list of nodes that make up next connected component,
+ * or NULL if no more components.  slFreeList this when
+ * done.  Call "dgClearConnFlags" before first call to this.
+ * Do not call dgFindConnectedToNode between dgFindFirstConnected 
+ * and this as they use the same flag variables to keep track of
+ * what vertices are used. */
+{
+struct dgNode *a;
+
+for (a=dg->nodeList; a != NULL; a = a->next)
+    {
+    if (!a->conn)
+	break;
+    }
+if (a == NULL)
+    return NULL;
+rRefList = NULL;
+rMustHaveVal = FALSE;
+rFindConnected(a);
+return rRefList;
+}
+
+struct dgNodeRef *dgFindNextConnectedWithVals(struct diGraph *dg)
+/* Like dgFindConnected, but only considers graph nodes that
+ * have a val attached. */
+{
+struct dgNode *a;
+
+for (a=dg->nodeList; a != NULL; a = a->next)
+    {
+    if (!a->conn && a->val != NULL)
+	break;
+    }
+if (a == NULL)
+    return NULL;
+rRefList = NULL;
+rMustHaveVal = TRUE;
+rFindConnected(a);
+return rRefList;
+}
+
+
+static int connectedComponents(struct diGraph *dg)
+/* Count number of connected components and set component field
+ * of each node to reflect which component it is in. */
+{
+struct dgNodeRef *ref;
+int conCount = 0;
+struct dgNode *a = dg->nodeList;
+
+dgClearConnFlags(dg);
+for (;;)
+    {
+    for (; a != NULL; a = a->next)
+	{
+	if (!a->conn && (!rMustHaveVal || a->val))
+	    break;
+	}
+    if (a == NULL)
+	break;
+    rRefList = NULL;
+    rFindConnected(a);
+    ++conCount;
+    for (ref = rRefList; ref != NULL; ref = ref->next)
+	{
+	ref->node->component = conCount;
+	}
+    slFreeList(&rRefList);
+    }
+return conCount;
+}
+
+int dgConnectedComponents(struct diGraph *dg)
+/* Count number of connected components and set component field
+ * of each node to reflect which component it is in. */
+{
+rMustHaveVal = FALSE;
+return connectedComponents(dg);
+}
+
+int dgConnectedComponentsWithVals(struct diGraph *dg)
+/* Count number of connected components and set component field
+ * of each node to reflect which component it is in. Only
+ * consider components with values. */
+{
+rMustHaveVal = TRUE;
+return connectedComponents(dg);
+}
+
+struct dgNodeRef *dgFindNewConnected(struct diGraph *dg, struct dgNode *a)
+/* Find a connected component guaranteed not to be covered before 
+ * including a. */
+{
+rRefList = NULL;
+rMustHaveVal = FALSE;
+rFindConnected(a);
+return rRefList;
+}
+
+struct dgNodeRef *dgFindNewConnectedWithVals(struct diGraph *dg, struct dgNode *a)
+/* Find a connected component guaranteed not to be covered before 
+ * that includes a.  Connected components must have values*/
+{
+rRefList = NULL;
+rMustHaveVal = TRUE;
+rFindConnected(a);
+return rRefList;
+}
+
+
+struct dgNodeRef *dgFindConnectedToNode(struct diGraph *dg, struct dgNode *a)
+/* Return reference list of all nodes connected to a, including a.
+ * slFreeList this list when done. */
+{
+dgClearConnFlags(dg);
+return dgFindNewConnected(dg, a);
+}
+
+struct dgEdge *dgDirectlyFollows(struct diGraph *dg, struct dgNode *a, struct dgNode *b)
+/* Return TRUE if b directly follows a. */
+{
+struct dgConnection *con = dgFindNodeInConList(a->nextList, b);
+if (con == NULL)
+    return NULL;
+return con->edgeOnList->val;
+}
+
+struct dgNodeRef *dgFindPath(struct diGraph *dg, struct dgNode *a, struct dgNode *b)
+/* Find shortest path from a to b.  Return NULL if can't be found. */
+{
+struct dgNodeRef *refList  = NULL, *ref;
+struct dgConnection *con;
+struct dgNode *node, *nNode;
+struct dlList *fifo;
+struct dlNode *ffNode;
+struct dgNode endNode;
+int fifoSize = 1;
+
+/* Do some quick and easy tests first to return if have no way out
+ * of node A, or if B directly follows A. */
+if (a->nextList == NULL)
+    return NULL;
+if (a == b)
+    {
+    AllocVar(ref);
+    ref->node = a;
+    return ref;
+    }
+if ((con = dgFindNodeInConList(a->nextList, b)) != NULL)
+    {
+    AllocVar(refList);
+    refList->node = a;
+    node = con->node;
+    AllocVar(ref);
+    ref->node = node;
+    slAddTail(&refList, ref);
+    return refList;
+    }
+
+/* Set up for breadth first traversal.  Will use a doubly linked
+ * list as a fifo. */
+for (node = dg->nodeList; node != NULL; node = node->next)
+    node->tempEntry = NULL;
+fifo = newDlList();
+dlAddValTail(fifo, a);
+a->tempEntry = &endNode;
+
+while ((ffNode = dlPopHead(fifo)) != NULL)
+    {
+    --fifoSize;
+    node = ffNode->val;
+    freeMem(ffNode);
+    for (con = node->nextList; con != NULL; con = con->next)
+	{
+	nNode = con->node;
+	if (nNode->tempEntry == NULL)
+	    {
+	    nNode->tempEntry = node;
+	    if (nNode == b)
+		{
+		while (nNode != &endNode && nNode != NULL)
+		    {
+		    AllocVar(ref);
+		    ref->node = nNode;
+		    slAddHead(&refList, ref);
+		    nNode = nNode->tempEntry;
+		    }
+		break;
+		}
+	    else
+		{
+		dlAddValTail(fifo, nNode);
+		++fifoSize;
+		if (fifoSize > 100000)
+		    errAbort("Internal error in dgFindPath");
+		}
+	    }
+	}
+    }
+freeDlList(&fifo);
+return refList;
+}
+
+static int cmpPriority(const void *va, const void *vb)
+/* Sort smallest offset into needle first. */
+{
+const struct dgNode *a = *((struct dgNode **)va);
+const struct dgNode *b = *((struct dgNode **)vb);
+return (a->priority - b->priority);
+}
+
+boolean dgParentsAllVisited(struct dgNode *node)
+/* Return TRUE if all parents of node have  been visited. */
+{
+struct dgConnection *con;
+for (con = node->prevList; con != NULL; con = con->next)
+    {
+    if (con->node->visited == FALSE)
+	return FALSE;
+    }
+return TRUE;
+}
+
+struct dgNodeRef *dgConstrainedPriorityOrder(struct diGraph *dg)
+/* Return traversal of graph in priority order subject to
+ * constraint that all parents must be output before
+ * their children regardless of node priority. 
+ * Graph must be cycle free. */
+{
+struct dlList *sortedList = newDlList();
+struct dgNode *graphNode;
+struct dlNode *listNode;
+struct dgNodeRef *refList = NULL, *ref;
+
+if (dgHasCycles(dg))
+    errAbort("Call to dgConstrainedPriorityOrder on graph with cycles.");
+
+/* Make up list sorted by priority. */
+for (graphNode = dg->nodeList; graphNode != NULL; graphNode = graphNode->next)
+    {
+    dlAddValTail(sortedList, graphNode);
+    graphNode->visited = FALSE;
+    }
+dlSort(sortedList, cmpPriority);
+
+/* Loop taking first member of list with no untraversed parents. */
+while (!dlEmpty(sortedList))
+    {
+    for (listNode = sortedList->head; listNode->next != NULL; listNode = listNode->next)
+	{
+	graphNode = listNode->val;
+	if (dgParentsAllVisited(graphNode))
+	    {
+	    dlRemove(listNode);
+	    freeMem(listNode);
+	    AllocVar(ref);
+	    ref->node = graphNode;
+	    slAddHead(&refList, ref);
+	    graphNode->visited = TRUE;
+	    break;
+	    }
+	}
+    }
+freeDlList(&sortedList);
+slReverse(&refList);
+return refList;
+}
+
+struct dgEdgeRef *dgFindSubEdges(struct diGraph *dg, struct dgNodeRef *subGraph)
+/* Return list of edges in graph that connected together nodes in subGraph. */
+{
+struct hash *hash = newHash(0);
+struct dgNodeRef *nr;
+struct dgConnection *con;
+struct dgEdgeRef *erList = NULL, *er;
+struct dgNode *node;
+
+/* Build up hash of nodes in subGraph. */
+for (nr = subGraph; nr != NULL; nr = nr->next)
+    {
+    node = nr->node;
+    hashAdd(hash, node->name, node);
+    }
+
+for (nr = subGraph; nr != NULL; nr = nr->next)
+    {
+    node = nr->node;
+    for (con = node->nextList; con != NULL; con = con->next)
+	{
+	if (hashLookup(hash, con->node->name))
+	    {
+	    AllocVar(er);
+	    er->edge = con->edgeOnList->val;
+	    slAddHead(&erList, er);
+	    }
+	}
+    }
+freeHash(&hash);
+return erList;
+}
+
+void dgSwapEdges(struct diGraph *dg, struct dgEdgeRef *erList)
+/* Swap polarity of all edges in erList.  (Assumes you don't have
+ * edges going both directions in graph.) */
+{
+struct dgEdgeRef *er;
+struct dgEdge *edge;
+struct dgNode *a, *b;
+struct dgConnection *con1, *con2;
+
+/* Remove edges from next and previous list of all
+ * involved nodes and swap nodes in edge itself. */
+for (er = erList; er != NULL; er = er->next)
+    {
+    edge = er->edge;
+    a = edge->a;
+    b = edge->b;
+    dgRemoveFromConList(&a->nextList, b, &con1);
+    dgRemoveFromConList(&b->prevList, a, &con2);
+    edge->a = b;
+    edge->b = a;
+    con1->node = a;
+    slAddHead(&b->nextList, con1);
+    con2->node = b;
+    slAddHead(&a->prevList, con2);
+    }
+}
+
+
+struct dgConnection *dgNextList(struct dgNode *node)
+/* Return list of nodes that follow node. */
+{
+return node->nextList;
+}
+
+struct dgConnection *dgPrevList(struct dgNode *node)
+/* Return list of nodes that precede node. */
+{
+return node->prevList;
+}
+
+void dgDumpGraph(struct diGraph *dg, FILE *out, boolean hideIsolated)
+/* Dump info on graph to output. */
+{
+struct dgNode *node;
+struct dgConnection *con;
+
+for (node = dg->nodeList; node != NULL; node = node->next)
+    {
+    if (hideIsolated  && node->nextList == NULL)
+	continue;
+    fprintf(out, "%s:", node->name);
+    for (con = node->nextList; con != NULL; con = con->next)
+	fprintf(out, " %s", con->node->name);
+    fprintf(out, "\n");
+    }
+}
+
+
diff --git a/gbtools/src/blatSrc/lib/diGraph.c.97 b/gbtools/src/blatSrc/lib/diGraph.c.97
new file mode 100644
index 0000000..d0bd076
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/diGraph.c.97
@@ -0,0 +1,764 @@
+/* diGraph - Directed graph routines. */
+#include "common.h"
+#include "hash.h"
+#include "dlist.h"
+#include "diGraph.h"
+
+struct diGraph *dgNew()
+/* Return a new directed graph object. */
+{
+struct diGraph *dg;
+AllocVar(dg);
+dg->nodeHash = newHash(0);
+dg->edgeList = newDlList();
+return dg;
+}
+
+static void dgNodeFree(struct dgNode **pNode)
+/* Free a diGraph node. */
+{
+struct dgNode *node = *pNode;
+if (node == NULL)
+    return;
+slFreeList(&node->nextList);
+slFreeList(&node->prevList);
+freez(pNode);
+}
+
+static void dgNodeFreeList(struct dgNode **pList)
+/* Free list of diGraph nodes. */
+{
+struct dgNode *el, *next;
+
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    dgNodeFree(&el);
+    }
+*pList = NULL;
+}
+
+void dgFree(struct diGraph **pGraph)
+/* Free a directed graph. */
+{
+struct diGraph *dg = *pGraph;
+if (dg == NULL)
+    return;
+freeHash(&dg->nodeHash);
+dgNodeFreeList(&dg->nodeList);
+freeDlListAndVals(&dg->edgeList);
+freez(pGraph);
+}
+
+
+struct dgNode *dgAddNode(struct diGraph *dg, char *name, void *val)
+/* Create new node in graph. It's legal (but not efficient) to add
+ * a node with the same name and value twice.  It's not legal to
+ * add a node with the same name and a different value.  
+ * You can pass in NULL for the name in which case the 
+ * hexadecimal representation of val will become the name. */
+{
+struct dgNode *node;
+struct hashEl *hel;
+struct hash *hash = dg->nodeHash;
+char nbuf[17];
+static int nameIx = 0;
+
+if (name == NULL)
+    {
+    sprintf(nbuf, "%p", val);
+    name = nbuf;
+    }
+hel = hashLookup(hash, name);
+if (hel != NULL)
+    {
+    node = hel->val;
+    if (node->val != val)
+	{
+	errAbort("Trying to add node %s with a new value (old %x new %x)",
+	    name, node->val, val);
+	}
+    return node;
+    }
+AllocVar(node);
+hel = hashAdd(hash, name, node);
+node->name = hel->name;
+node->val = val;
+slAddHead(&dg->nodeList, node);
+return node;
+}
+
+struct dgNode *dgAddNumberedNode(struct diGraph *dg, int id, void *val)
+/* Create new node with a number instead of a name. */
+{
+char buf[16];
+sprintf(buf, "%d", id);
+return dgAddNode(dg, buf, val);
+}
+
+struct dgNode *dgFindNode(struct diGraph *dg, char *name)
+/* Find existing node in graph. Return NULL if not in graph. */
+{
+struct hashEl *hel;
+if ((hel = hashLookup(dg->nodeHash, name)) == NULL)
+    return NULL;
+return hel->val;
+}
+
+struct dgNode *dgFindNumberedNode(struct diGraph *dg, int id)
+/* Find node given number. */
+{
+char buf[16];
+sprintf(buf, "%d", id);
+return dgFindNode(dg, buf);
+}
+
+
+void *dgNodeVal(struct dgNode *node)
+/* Return value associated with node. */
+{
+return node->val;
+}
+
+void *dgNodeName(struct dgNode *node)
+/* Return name associated with node. */
+{
+return node->name;
+}
+
+int dgNodeNumber(struct dgNode *node)
+/* Return number of node.  (Will likely return 0 if node
+ * was added with a name rather than a number). */
+{
+return atoi(node->name);
+}
+
+struct dgNodeRef *dgFindNodeInRefList(struct dgNodeRef *refList, struct dgNode *node)
+/* Return reference to node if in list, or NULL if not. */
+{
+struct dgNodeRef *ref;
+for (ref = refList; ref != NULL; ref = ref->next)
+    if (ref->node == node)
+	return ref;
+return NULL;
+}
+
+struct dgConnection *dgFindNodeInConList(struct dgConnection *conList, struct dgNode *node)
+/* Return connection to node if in list, or NULL if not. */
+{
+struct dgConnection *con;
+for (con = conList; con != NULL; con = con->next)
+    if (con->node == node)
+	return con;
+return NULL;
+}
+
+struct dgEdge *dgConnect(struct diGraph *dg, struct dgNode *a, struct dgNode *b)
+/* Connect node a to node b.  Returns connecting edge. 
+ * Not an error to reconnect.  However all connects can 
+ * be broken with a single disconnect. */
+{
+dgConnectWithVal(dg, a, b, NULL);
+}
+
+struct dgEdge *dgConnectWithVal(struct diGraph *dg, struct dgNode *a, 
+     struct dgNode *b, void *val)
+/* Connect node a to node b and put val on edge.  An error to
+ * reconnect with a different val. */
+{
+struct dgConnection *con;
+struct dgEdge *edge;
+struct dlNode *edgeOnList;
+
+/* Check to see if it's already there. */
+if ((con = dgFindNodeInConList(a->nextList, b)) != NULL)
+    {
+    edge =  con->edgeOnList->val;
+    if (val != edge->val)
+        warn("Trying to add new value to edge between %s and %s, ignoring",
+	   a->name, b->name);
+    return edge;
+    }
+/* Allocate edge and put on list. */
+AllocVar(edge);
+edge->a = a;
+edge->b = b;
+edge->val = val;
+edgeOnList = dlAddValTail(dg->edgeList, edge);
+
+/* Connect nodes to each other. */
+AllocVar(con);
+con->node = b;
+con->edgeOnList = edgeOnList;
+slAddHead(&a->nextList, con);
+AllocVar(con);
+con->node = a;
+con->edgeOnList = edgeOnList;
+slAddHead(&b->prevList, con);
+
+return edge;
+}
+
+struct dgEdge *dgConnectUnflippable(struct diGraph *dg, struct dgNode *a, struct dgNode *b,
+    void *val)
+/* Connect a to b with an edge than can't be flipped. */
+{
+struct dgEdge *edge = dgConnectWithVal(dg, a, b, val);
+edge->unflippable = TRUE;
+return edge;
+}
+
+static struct dlNode *dgRemoveFromConList(struct dgConnection **pConList, 
+	struct dgNode *node, struct dgConnection **retCon)
+/* Remove reference to node from list. */
+{
+struct dgConnection *newList = NULL;
+struct dgConnection *con, *next;
+struct dlNode *edgeOnList = NULL;
+
+for (con = *pConList; con != NULL; con = next)
+    {
+    next = con->next;
+    if (con->node == node)
+	{
+	edgeOnList = con->edgeOnList;
+	if (retCon != NULL)
+	    *retCon = con;
+	else
+	    freeMem(con);
+	}
+    else
+	{
+	slAddHead(&newList, con);
+	}
+    }
+slReverse(&newList);
+*pConList = newList;
+return edgeOnList;
+}
+
+void dgDisconnect(struct diGraph *dg, struct dgNode *a, struct dgNode *b)
+/* Disconnect nodes a and b. */
+{
+struct dlNode *edgeInList;
+struct dgEdge *edge;
+
+dgRemoveFromConList(&a->nextList, b, NULL);
+edgeInList = dgRemoveFromConList(&b->prevList, a, NULL);
+if (edgeInList != NULL)
+    {
+    edge = edgeInList->val;
+    dlRemove(edgeInList);
+    freeMem(edgeInList);
+    freeMem(edge);
+    }
+}
+
+
+void dgClearVisitFlags(struct diGraph *dg)
+/* Clear out visit flags. */
+{
+struct dgNode *node;
+for (node = dg->nodeList; node != NULL; node = node->next)
+    node->visited = FALSE;
+}
+
+void dgClearConnFlags(struct diGraph *dg)
+/* Clear out connect flags. */
+{
+struct dgNode *node;
+for (node = dg->nodeList; node != NULL; node = node->next)
+    node->conn = FALSE;
+}
+
+static struct dgNode *rTarget;
+
+static boolean rPathExists(struct dgNode *a)
+/* Recursively find if path from a to b exists. */
+{
+struct dgConnection *ref;
+if (a == rTarget)
+    return TRUE;
+a->visited = TRUE;
+
+for (ref = a->nextList; ref != NULL; ref = ref->next)
+    {
+    if (!ref->node->visited && rPathExists(ref->node))
+	return TRUE;
+    }
+return FALSE;
+}
+
+boolean dgPathExists(struct diGraph *dg, struct dgNode *a, struct dgNode *b)
+/* Return TRUE if there's a path from a to b. */
+{
+rTarget = b;
+dgClearVisitFlags(dg);
+return rPathExists(a);
+}
+
+static int topoIx;
+
+static void rTopoSort(struct dgNode *node)
+{
+struct dgConnection *ref;
+node->visited = TRUE;
+for (ref = node->nextList; ref != NULL; ref = ref->next)
+    {
+    if (!ref->node->visited)
+	rTopoSort(ref->node);
+    }
+node->topoOrder = ++topoIx;
+}
+
+void dgTopoSort(struct diGraph *dg)
+/* Fill in topological order of nodes. */
+{
+struct dgNode *node;
+
+topoIx = 0;
+dgClearVisitFlags(dg);
+for (node = dg->nodeList; node != NULL; node = node->next)
+    {
+    if (!node->visited)
+	rTopoSort(node);
+    }
+}
+
+static boolean  rHasCycles(struct dgNode *node)
+/* Recursively see if has cycles by looking for
+ * backwards topoOrder. */
+{
+struct dgConnection *ref;
+struct dgNode *child;
+
+node->visited = TRUE;
+for (ref = node->nextList; ref != NULL; ref = ref->next)
+    {
+    child = ref->node;
+    if (child->topoOrder > node->topoOrder)
+	return TRUE;
+    if (!child->visited)
+	if (rHasCycles(child))
+	    return TRUE;
+    }
+return FALSE;
+}
+
+boolean dgHasCycles(struct diGraph *dg)
+/* Return TRUE if directed graph has cycles. */
+{
+struct dgNode *node;
+
+dgTopoSort(dg);
+dgClearVisitFlags(dg);
+for (node = dg->nodeList; node != NULL; node = node->next)
+    {
+    if (!node->visited)
+	if (rHasCycles(node))
+	    return TRUE;
+    }
+return FALSE;
+}
+
+struct dgNodeRef *rRefList;
+bool rRespectFlipper;			/* Set to TRUE if rFindConnected only to
+                                         * consider nodes with values in connections. */
+
+static void rFindConnected(struct dgNode *a)
+/* Find all things connected to a directly or not that haven't
+ * already been visited and put them on rRefList. */
+{
+if (!a->conn)
+    {
+    struct dgNodeRef *ref;
+    struct dgConnection *con;
+    struct dgEdge *edge;
+
+    AllocVar(ref);
+    ref->node = a;
+    slAddHead(&rRefList, ref);
+    a->conn = TRUE;
+    for (con = a->nextList; con != NULL; con = con->next)
+	{
+	edge = con->edgeOnList->val;
+	if (!rRespectFlipper || !edge->unflippable)
+	    rFindConnected(con->node);
+	}
+    for (con = a->prevList; con != NULL; con = con->next)
+	{
+	edge = con->edgeOnList->val;
+	if (!rRespectFlipper || !edge->unflippable)
+	    rFindConnected(con->node);
+	}
+    }
+}
+
+struct dgNodeRef *dgFindNextConnected(struct diGraph *dg)
+/* Return list of nodes that make up next connected component,
+ * or NULL if no more components.  slFreeList this when
+ * done.  Call "dgClearConnFlags" before first call to this.
+ * Do not call dgFindConnectedToNode between dgFindFirstConnected 
+ * and this as they use the same flag variables to keep track of
+ * what vertices are used. */
+{
+struct dgNode *a;
+
+for (a=dg->nodeList; a != NULL; a = a->next)
+    {
+    if (!a->conn)
+	break;
+    }
+if (a == NULL)
+    return NULL;
+rRefList = NULL;
+rRespectFlipper = FALSE;
+rFindConnected(a);
+return rRefList;
+}
+
+struct dgNodeRef *dgFindNextFlippableConnected(struct diGraph *dg)
+/* Like dgFindConnected, but only considers graph nodes that
+ * are conencted by a flippable edge. */
+{
+struct dgNode *a;
+
+for (a=dg->nodeList; a != NULL; a = a->next)
+    {
+    if (!a->conn)
+	break;
+    }
+if (a == NULL)
+    return NULL;
+rRefList = NULL;
+rRespectFlipper = TRUE;
+rFindConnected(a);
+return rRefList;
+}
+
+
+static int connectedComponents(struct diGraph *dg)
+/* Count number of connected components and set component field
+ * of each node to reflect which component it is in. */
+{
+struct dgNodeRef *ref;
+int conCount = 0;
+struct dgNode *a = dg->nodeList;
+
+dgClearConnFlags(dg);
+for (;;)
+    {
+    for (; a != NULL; a = a->next)
+	{
+	if (!a->conn)
+	    break;
+	}
+    if (a == NULL)
+	break;
+    rRefList = NULL;
+    rFindConnected(a);
+    ++conCount;
+    for (ref = rRefList; ref != NULL; ref = ref->next)
+	{
+	ref->node->component = conCount;
+	}
+    slFreeList(&rRefList);
+    }
+return conCount;
+}
+
+int dgConnectedComponents(struct diGraph *dg)
+/* Count number of connected components and set component field
+ * of each node to reflect which component it is in. */
+{
+rRespectFlipper = FALSE;
+connectedComponents(dg);
+}
+
+int dgConnectedFlippableComponents(struct diGraph *dg)
+/* Count number of connected components and set component field
+ * of each node to reflect which component it is in. Only
+ * consider components connected by flippable edges. */
+{
+rRespectFlipper = TRUE;
+connectedComponents(dg);
+}
+
+struct dgNodeRef *dgFindNewConnected(struct diGraph *dg, struct dgNode *a)
+/* Find a connected component guaranteed not to be covered before 
+ * including a. */
+{
+rRefList = NULL;
+rRespectFlipper = FALSE;
+rFindConnected(a);
+return rRefList;
+}
+
+struct dgNodeRef *dgFindNewFlippableConnected(struct diGraph *dg, struct dgNode *a)
+/* Find a connected component guaranteed not to be covered before 
+ * that includes a.  Connected components must be connected by flippable
+ * edges. */
+{
+rRefList = NULL;
+rRespectFlipper = TRUE;
+rFindConnected(a);
+return rRefList;
+}
+
+
+struct dgNodeRef *dgFindConnectedToNode(struct diGraph *dg, struct dgNode *a)
+/* Return reference list of all nodes connected to a, including a.
+ * slFreeList this list when done. */
+{
+dgClearConnFlags(dg);
+return dgFindNewConnected(dg, a);
+}
+
+struct dgEdge *dgDirectlyFollows(struct diGraph *dg, struct dgNode *a, struct dgNode *b)
+/* Return TRUE if b directly follows a. */
+{
+struct dgConnection *con = dgFindNodeInConList(a->nextList, b);
+if (con == NULL)
+    return NULL;
+return con->edgeOnList->val;
+}
+
+struct dgNodeRef *dgFindPath(struct diGraph *dg, struct dgNode *a, struct dgNode *b)
+/* Find shortest path from a to b.  Return NULL if can't be found. */
+{
+struct dgNodeRef *refList  = NULL, *ref;
+struct dgConnection *con;
+struct dgNode *node, *nNode;
+struct dlList *fifo;
+struct dlNode *ffNode;
+struct dgNode endNode;
+int fifoSize = 1;
+
+/* Do some quick and easy tests first to return if have no way out
+ * of node A, or if B directly follows A. */
+if (a->nextList == NULL)
+    return NULL;
+if (a == b)
+    {
+    AllocVar(ref);
+    ref->node = a;
+    return ref;
+    }
+if ((con = dgFindNodeInConList(a->nextList, b)) != NULL)
+    {
+    AllocVar(refList);
+    refList->node = a;
+    node = con->node;
+    AllocVar(ref);
+    ref->node = node;
+    slAddTail(&refList, ref);
+    return refList;
+    }
+
+/* Set up for breadth first traversal.  Will use a doubly linked
+ * list as a fifo. */
+for (node = dg->nodeList; node != NULL; node = node->next)
+    node->tempEntry = NULL;
+fifo = newDlList();
+dlAddValTail(fifo, a);
+a->tempEntry = &endNode;
+
+while ((ffNode = dlPopHead(fifo)) != NULL)
+    {
+    --fifoSize;
+    node = ffNode->val;
+    freeMem(ffNode);
+    for (con = node->nextList; con != NULL; con = con->next)
+	{
+	nNode = con->node;
+	if (nNode->tempEntry == NULL)
+	    {
+	    nNode->tempEntry = node;
+	    if (nNode == b)
+		{
+		while (nNode != &endNode && nNode != NULL)
+		    {
+		    AllocVar(ref);
+		    ref->node = nNode;
+		    slAddHead(&refList, ref);
+		    nNode = nNode->tempEntry;
+		    }
+		break;
+		}
+	    else
+		{
+		dlAddValTail(fifo, nNode);
+		++fifoSize;
+		if (fifoSize > 100000)
+		    errAbort("Internal error in dgFindPath");
+		}
+	    }
+	}
+    }
+freeDlList(&fifo);
+return refList;
+}
+
+static int cmpPriority(const void *va, const void *vb)
+/* Sort smallest offset into needle first. */
+{
+const struct dgNode *a = *((struct dgNode **)va);
+const struct dgNode *b = *((struct dgNode **)vb);
+return (a->priority - b->priority);
+}
+
+boolean dgParentsAllVisited(struct dgNode *node)
+/* Return TRUE if all parents of node have  been visited. */
+{
+struct dgConnection *con;
+for (con = node->prevList; con != NULL; con = con->next)
+    {
+    if (con->node->visited == FALSE)
+	return FALSE;
+    }
+return TRUE;
+}
+
+struct dgNodeRef *dgConstrainedPriorityOrder(struct diGraph *dg)
+/* Return traversal of graph in priority order subject to
+ * constraint that all parents must be output before
+ * their children regardless of node priority. 
+ * Graph must be cycle free. */
+{
+struct dlList *sortedList = newDlList();
+struct dgNode *graphNode;
+struct dlNode *listNode;
+struct dgNodeRef *refList = NULL, *ref;
+
+if (dgHasCycles(dg))
+    errAbort("Call to dgConstrainedPriorityOrder on graph with cycles.");
+
+/* Make up list sorted by priority. */
+for (graphNode = dg->nodeList; graphNode != NULL; graphNode = graphNode->next)
+    {
+    dlAddValTail(sortedList, graphNode);
+    graphNode->visited = FALSE;
+    }
+dlSort(sortedList, cmpPriority);
+
+/* Loop taking first member of list with no untraversed parents. */
+while (!dlEmpty(sortedList))
+    {
+    for (listNode = sortedList->head; listNode->next != NULL; listNode = listNode->next)
+	{
+	graphNode = listNode->val;
+	if (dgParentsAllVisited(graphNode))
+	    {
+	    dlRemove(listNode);
+	    freeMem(listNode);
+	    AllocVar(ref);
+	    ref->node = graphNode;
+	    slAddHead(&refList, ref);
+	    graphNode->visited = TRUE;
+	    break;
+	    }
+	}
+    }
+freeDlList(&sortedList);
+slReverse(&refList);
+return refList;
+}
+
+struct dgEdgeRef *dgFindSubEdges(struct diGraph *dg, struct dgNodeRef *subGraph,
+	boolean onlyFlippable)
+/* Return list of edges in graph that connected together nodes in subGraph. 
+ * Optionally return only flippable edges. */
+{
+struct hash *hash = newHash(0);
+struct dgNodeRef *nr;
+struct dgConnection *con;
+struct dgEdgeRef *erList = NULL, *er;
+struct dgEdge *edge;
+struct dgNode *node;
+
+/* Build up hash of nodes in subGraph. */
+for (nr = subGraph; nr != NULL; nr = nr->next)
+    {
+    node = nr->node;
+    hashAdd(hash, node->name, node);
+    }
+
+for (nr = subGraph; nr != NULL; nr = nr->next)
+    {
+    node = nr->node;
+    for (con = node->nextList; con != NULL; con = con->next)
+	{
+	if (hashLookup(hash, con->node->name))
+	    {
+	    edge = con->edgeOnList->val;
+	    if (!onlyFlippable || !edge->unflippable)
+		{
+		AllocVar(er);
+		er->edge = con->edgeOnList->val;
+		slAddHead(&erList, er);
+		}
+	    }
+	}
+    }
+freeHash(&hash);
+return erList;
+}
+
+void dgSwapEdges(struct diGraph *dg, struct dgEdgeRef *erList)
+/* Swap polarity of all edges in erList.  (Assumes you don't have
+ * edges going both directions in graph.) */
+{
+struct dgEdgeRef *er;
+struct dgEdge *edge;
+struct dgNode *a, *b;
+struct dgConnection *con1, *con2;
+
+/* Remove edges from next and previous list of all
+ * involved nodes and swap nodes in edge itself. */
+for (er = erList; er != NULL; er = er->next)
+    {
+    edge = er->edge;
+    a = edge->a;
+    b = edge->b;
+    dgRemoveFromConList(&a->nextList, b, &con1);
+    dgRemoveFromConList(&b->prevList, a, &con2);
+    edge->a = b;
+    edge->b = a;
+    con1->node = a;
+    slAddHead(&b->nextList, con1);
+    con2->node = b;
+    slAddHead(&a->prevList, con2);
+    }
+}
+
+
+struct dgConnection *dgNextList(struct dgNode *node)
+/* Return list of nodes that follow node. */
+{
+return node->nextList;
+}
+
+struct dgConnection *dgPrevList(struct dgNode *node)
+/* Return list of nodes that precede node. */
+{
+return node->prevList;
+}
+
+void dgDumpGraph(struct diGraph *dg, FILE *out, boolean hideIsolated)
+/* Dump info on graph to output. */
+{
+struct dgNode *node;
+struct dgConnection *con;
+
+for (node = dg->nodeList; node != NULL; node = node->next)
+    {
+    if (hideIsolated  && node->nextList == NULL)
+	continue;
+    fprintf(out, "%s:", node->name);
+    for (con = node->nextList; con != NULL; con = con->next)
+	fprintf(out, " %s", con->node->name);
+    fprintf(out, "\n");
+    }
+}
+
+
diff --git a/gbtools/src/blatSrc/lib/diff b/gbtools/src/blatSrc/lib/diff
new file mode 100644
index 0000000..e69de29
diff --git a/gbtools/src/blatSrc/lib/diffs b/gbtools/src/blatSrc/lib/diffs
new file mode 100644
index 0000000..5b8bb76
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/diffs
@@ -0,0 +1,599 @@
+diff --git a/src/hg/encode/encodeMergeReplicates/encodeMergeReplicates.c b/src/hg/encode/encodeMergeReplicates/encodeMergeReplicates.c
+index b68a4ef..14333df 100644
+--- a/src/hg/encode/encodeMergeReplicates/encodeMergeReplicates.c
++++ b/src/hg/encode/encodeMergeReplicates/encodeMergeReplicates.c
+@@ -3,6 +3,7 @@
+ #include "linefile.h"
+ #include "hash.h"
+ #include "options.h"
++#include "narrowPeak.h"
+ 
+ static char const rcsid[] = "$Id: newProg.c,v 1.30 2010/03/24 21:18:33 hiram Exp $";
+ 
+@@ -10,9 +11,10 @@ void usage()
+ /* Explain usage and exit. */
+ {
+ errAbort(
+-  "encodeMergeReplicates - Merge together replicates for a pooled output.  Only works on narrowPeak files currently.\n"
++  "encodeMergeReplicates - Merge together replicates for a pooled output.  \n"
++  "Only works on narrowPeak files currently.\n"
+   "usage:\n"
+-  "   encodeMergeReplicates XXX\n"
++  "   encodeMergeReplicates in1 in2 in3 ... output\n"
+   "options:\n"
+   "   -xxx=XXX\n"
+   );
+@@ -22,8 +24,9 @@ static struct optionSpec options[] = {
+    {NULL, 0},
+ };
+ 
+-void encodeMergeReplicates(char *XXX)
+-/* encodeMergeReplicates - Merge together replicates for a pooled output.  Only works on narrowPeak files currently.. */
++void encodeMergeReplicates(int inCount, char *inNames[], char *outName)
++/* encodeMergeReplicates - Merge together replicates for a pooled output.  
++ * Only works on narrowPeak files currently. */
+ {
+ }
+ 
+@@ -31,8 +34,8 @@ int main(int argc, char *argv[])
+ /* Process command line. */
+ {
+ optionInit(&argc, argv, options);
+-if (argc != 2)
++if (argc < 4)
+     usage();
+-encodeMergeReplicates(argv[1]);
++encodeMergeReplicates(argv+1, argc-2, argv[argc-1]);
+ return 0;
+ }
+diff --git a/src/hg/makeDb/trackDb/human/hg18/trackDb.wgEncode.ra b/src/hg/makeDb/trackDb/human/hg18/trackDb.wgEncode.ra
+index cdcd9c0..04342b6 100644
+--- a/src/hg/makeDb/trackDb/human/hg18/trackDb.wgEncode.ra
++++ b/src/hg/makeDb/trackDb/human/hg18/trackDb.wgEncode.ra
+@@ -1683,14 +1683,14 @@ group regulation
+ 	type wig 0.00 4417.02
+ 	color 191,128,255
+ 
+-    track wgEncodeRegMarkEnhancer
++    track wgEncodeRegMarkEnhH3k4me1
+     # compositeTrack on
+     container multiWig
+     noInherit on
+     type wig 0 10000
+     superTrack wgEncodeReg full
+     shortLabel Enhancer H3K4Me1
+-    longLabel Enhancer histone mark (H3K4Me1) on 8 cell lines from ENCODE
++    longLabel H3K4Me1 - an Enhancer and Promoter Histone Mark on 8 Cell Lines from ENCODE
+     release alpha
+     configurable on
+     visibility full
+@@ -1700,74 +1700,74 @@ group regulation
+     showSubtrackColorOnUi on
+     priority 2
+ 
+-	track wgEncodeRegMarkEnhancerGm12878
++	track wgEncodeRegMarkEnhH3k4me1Gm12878
+ 	shortLabel	Gm12878
+-	longLabel Enhancer mark (H3K4Me1) on Gm12878 cells from ENCODE
++	longLabel H3K4Me1 - an Enhancer and Promoter Histone Mark on Gm12878 cells from ENCODE
+         release alpha
+-	parent wgEncodeRegMarkEnhancer
++	parent wgEncodeRegMarkEnhH3k4me1
+ 	type wig 0.00 9323.50
+ 	color 255,128,128
+ 	table wgEncodeBroadChipSeqSignalGm12878H3k4me1
+ 
+-	track wgEncodeRegMarkEnhancerH1hesc
++	track wgEncodeRegMarkEnhH3k4me1H1hesc
+ 	shortLabel	H1 ES
+-	longLabel Enhancer mark (H3K4Me1) on H1 ES cells from ENCODE
++	longLabel H3K4Me1 - an Enhancer and Promoter Histone Mark on H1 ES cells from ENCODE
+         release alpha
+-	parent wgEncodeRegMarkEnhancer
++	parent wgEncodeRegMarkEnhH3k4me1
+ 	color 255,223,128
+ 	table wgEncodeBroadChipSeqSignalH1hescH3k4me1
+ 	type wig 0.00 12286.00
+ 
+-	track wgEncodeRegMarkEnhancerHmec
++	track wgEncodeRegMarkEnhH3k4me1Hmec
+ 	shortLabel	HMEC
+-	longLabel Enhancer mark (H3K4Me1) on HMEC cells from ENCODE 
++	longLabel H3K4Me1 - an Enhancer and Promoter Histone Mark on HMEC cells from ENCODE 
+         release alpha
+-	parent wgEncodeRegMarkEnhancer
++	parent wgEncodeRegMarkEnhH3k4me1
+ 	color 191,255,128
+ 	table wgEncodeBroadChipSeqSignalHmecH3k4me1
+ 	type wig 0.00 13574.00
+ 
+-	track wgEncodeRegMarkEnhancerHsmm
++	track wgEncodeRegMarkEnhH3k4me1Hsmm
+ 	shortLabel	HSMM
+-	longLabel Enhancer mark (H3K4Me1) on HSMM cells from ENCODE 
++	longLabel H3K4Me1 - an Enhancer and Promoter Histone Mark on HSMM cells from ENCODE 
+         release alpha
+-	parent wgEncodeRegMarkEnhancer
++	parent wgEncodeRegMarkEnhH3k4me1
+ 	color 128,255,159
+ 	table wgEncodeBroadChipSeqSignalHsmmH3k4me1
+ 	type wig 0.00 10412.00
+ 
+-	track wgEncodeRegMarkEnhancerHuvec
++	track wgEncodeRegMarkEnhH3k4me1Huvec
+ 	shortLabel	HUVEC
+-	longLabel Enhancer mark (H3K4Me1) on HUVEC cells from ENCODE 
++	longLabel H3K4Me1 - an Enhancer and Promoter Histone Mark on HUVEC cells from ENCODE 
+         release alpha
+-	parent wgEncodeRegMarkEnhancer
++	parent wgEncodeRegMarkEnhH3k4me1
+ 	color 128,255,255
+ 	table wgEncodeBroadChipSeqSignalHuvecH3k4me1
+ 	type wig 0.00 5259.25
+ 
+-	track wgEncodeRegMarkEnhancerK562
++	track wgEncodeRegMarkEnhH3k4me1K562
+ 	shortLabel	K562
+-	longLabel Enhancer mark (H3K4Me1) on K562 cells from ENCODE 
++	longLabel H3K4Me1 - an Enhancer and Promoter Histone Mark on K562 cells from ENCODE 
+         release alpha
+-	parent wgEncodeRegMarkEnhancer
++	parent wgEncodeRegMarkEnhH3k4me1
+ 	color 128,159,255
+ 	table wgEncodeBroadChipSeqSignalK562H3k4me1
+ 	type wig 0.00 8682.25
+ 
+-	track wgEncodeRegMarkEnhancerNhek
++	track wgEncodeRegMarkEnhH3k4me1Nhek
+ 	shortLabel	NHEK
+-	longLabel Enhancer mark (H3K4Me1) on NHEK cells from ENCODE 
++	longLabel H3K4Me1 - an Enhancer and Promoter Histone Mark on NHEK cells from ENCODE 
+         release alpha
+-	parent wgEncodeRegMarkEnhancer
++	parent wgEncodeRegMarkEnhH3k4me1
+ 	color 191,128,255
+ 	table wgEncodeBroadChipSeqSignalNhekH3k4me1
+ 	type wig 0.00 4240.50
+ 
+-	track wgEncodeRegMarkEnhancerNhlf
++	track wgEncodeRegMarkEnhH3k4me1Nhlf
+ 	shortLabel	NHLF
+-	longLabel Enhancer mark (H3K4Me1) on NHLF cells from ENCODE 
++	longLabel H3K4Me1 - an Enhancer and Promoter Histone Mark on NHLF cells from ENCODE 
+         release alpha
+-	parent wgEncodeRegMarkEnhancer
++	parent wgEncodeRegMarkEnhH3k4me1
+ 	color 255,128,223
+ 	table wgEncodeBroadChipSeqSignalNhlfH3k4me1
+ 	type wig 0.00 14639.00
+@@ -1779,7 +1779,7 @@ group regulation
+     type wig 0 10000
+     superTrack wgEncodeReg full
+     shortLabel Enhancer H3K27Ac
+-    longLabel Enhancer histone mark (H3K27Ac) on 8 cell lines from ENCODE
++    longLabel H3K27Ac - An Enhancer and Promoter Histone Mark on 8 Cell Lines from ENCODE
+     release alpha
+     configurable on
+     visibility full
+@@ -1791,7 +1791,7 @@ group regulation
+ 
+ 	track wgEncodeRegMarkEnhH3k27acGm12878
+ 	shortLabel	Gm12878
+-	longLabel Enhancer mark (H3K27Ac) on Gm12878 cells from ENCODE
++	longLabel H3K27Ac - An enhancer and promoter mark on Gm12878 cells from ENCODE
+         release alpha
+ 	parent wgEncodeRegMarkEnhH3k27ac
+ 	type wig 0.00 9323.50
+@@ -1800,7 +1800,7 @@ group regulation
+ 
+ 	track wgEncodeRegMarkEnhH3k27acH1hesc
+ 	shortLabel	H1 ES
+-	longLabel Enhancer mark (H3K27Ac) on H1 ES cells from ENCODE
++	longLabel H3K27Ac - An enhancer and promoter mark on H1 ES cells from ENCODE
+         release alpha
+ 	parent wgEncodeRegMarkEnhH3k27ac
+ 	color 255,223,128
+@@ -1809,7 +1809,7 @@ group regulation
+ 
+ 	track wgEncodeRegMarkEnhH3k27acHmec
+ 	shortLabel	HMEC
+-	longLabel Enhancer mark (H3K27Ac) on HMEC cells from ENCODE 
++	longLabel H3K27Ac - An enhancer and promoter mark on HMEC cells from ENCODE 
+         release alpha
+ 	parent wgEncodeRegMarkEnhH3k27ac
+ 	color 191,255,128
+@@ -1818,7 +1818,7 @@ group regulation
+ 
+ 	track wgEncodeRegMarkEnhH3k27acHsmm
+ 	shortLabel	HSMM
+-	longLabel Enhancer mark (H3K27Ac) on HSMM cells from ENCODE 
++	longLabel H3K27Ac - An enhancer and promoter mark on HSMM cells from ENCODE 
+         release alpha
+ 	parent wgEncodeRegMarkEnhH3k27ac
+ 	color 128,255,159
+@@ -1827,7 +1827,7 @@ group regulation
+ 
+ 	track wgEncodeRegMarkEnhH3k27acHuvec
+ 	shortLabel	HUVEC
+-	longLabel Enhancer mark (H3K27Ac) on HUVEC cells from ENCODE 
++	longLabel H3K27Ac - An enhancer and promoter mark on HUVEC cells from ENCODE 
+         release alpha
+ 	parent wgEncodeRegMarkEnhH3k27ac
+ 	color 128,255,255
+@@ -1836,7 +1836,7 @@ group regulation
+ 
+ 	track wgEncodeRegMarkEnhH3k27acK562
+ 	shortLabel	K562
+-	longLabel Enhancer mark (H3K27Ac) on K562 cells from ENCODE 
++	longLabel H3K27Ac - An enhancer and promoter mark on K562 cells from ENCODE 
+         release alpha
+ 	parent wgEncodeRegMarkEnhH3k27ac
+ 	color 128,159,255
+@@ -1845,7 +1845,7 @@ group regulation
+ 
+ 	track wgEncodeRegMarkEnhH3k27acNhek
+ 	shortLabel	NHEK
+-	longLabel Enhancer mark (H3K27Ac) on NHEK cells from ENCODE 
++	longLabel H3K27Ac - An enhancer and promoter mark on NHEK cells from ENCODE 
+         release alpha
+ 	parent wgEncodeRegMarkEnhH3k27ac
+ 	color 191,128,255
+@@ -1854,7 +1854,7 @@ group regulation
+ 
+ 	track wgEncodeRegMarkEnhH3k27acNhlf
+ 	shortLabel	NHLF
+-	longLabel Enhancer mark (H3K27Ac) on NHLF cells from ENCODE 
++	longLabel H3K27Ac - An enhancer and promoter mark on NHLF cells from ENCODE 
+         release alpha
+ 	parent wgEncodeRegMarkEnhH3k27ac
+ 	color 255,128,223
+@@ -1971,7 +1971,7 @@ group regulation
+     type factorSource
+     superTrack wgEncodeReg dense
+     sourceTable wgEncodeRegTfbsCells
+-    inputTracks wgEncodeYaleChIPseq
++    inputTracks wgEncodeYaleChIPseq wgEncodeHudsonalphaChipSeq
+     inputTracksSubgroupSelect view=Peaks
+     inputTracksSubgroupDisplay cellType factor
+     visibility dense
+diff --git a/src/hg/regulate/regCluster/makefile b/src/hg/regulate/regCluster/makefile
+index b4de7cb..d1c0e73 100644
+--- a/src/hg/regulate/regCluster/makefile
++++ b/src/hg/regulate/regCluster/makefile
+@@ -5,7 +5,7 @@ MYLIBDIR = ../../../lib/${MACHTYPE}
+ MYLIBS =  ${MYLIBDIR}/jkweb.a
+ 
+ A = regCluster
+-O = regCluster.o
++O = regCluster.o 
+ 
+ regCluster: ${O} ${MYLIBS}
+ 	${CC} ${COPT} -o ${DESTDIR}${BINDIR}/${A}${EXE} $O ${MYLIBS} $L
+diff --git a/src/hg/regulate/regCluster/regCluster.c b/src/hg/regulate/regCluster/regCluster.c
+index 7d8245c..0c3691c 100644
+--- a/src/hg/regulate/regCluster/regCluster.c
++++ b/src/hg/regulate/regCluster/regCluster.c
+@@ -3,10 +3,9 @@
+ #include "linefile.h"
+ #include "hash.h"
+ #include "options.h"
+-#include "sqlNum.h"
+-#include "obscure.h"
+ #include "localmem.h"
+ #include "rangeTree.h"
++#include "peakCluster.h"
+ 
+ static char const rcsid[] = "$Id: regCluster.c,v 1.4 2010/05/16 21:41:42 kent Exp $";
+ 
+@@ -51,247 +50,6 @@ static struct optionSpec options[] = {
+    {NULL, 0},
+ };
+ 
+-struct regDim
+-/* A regulatory dimension */
+-    {
+-    int colIx;		/* Column index in table. */
+-    char *label;	/* Label */
+-    };
+-
+-struct regSource 
+-/* A source of regulatory information */
+-    {
+-    struct regSource *next;
+-    char *dataSource;		/* File (or table) */
+-    int chromColIx;		/* Chromosome column index. */
+-    int startColIx;		/* Start coordinate column index. */
+-    int endColIx;		/* End ccoordinate column ix. */
+-    int scoreColIx;		/* Index for score column. */
+-    double normFactor;		/* Multiply this to get browser score. */
+-    char **labels;		/* Label for each dimension */
+-    int minColCount;		/* Minimum number of columns. */
+-    };
+-
+-struct regItem
+-/* An item in a regulatory track */
+-    {
+-    struct regItem *next;
+-    char *chrom;		/* Chromosome. Not allocated here. */
+-    int chromStart,chromEnd;	/* Half open coordinates. */
+-    double score;		/* Ideally something like -log(p). */
+-    struct regSource *source;   /* Source track/file for item. */
+-    };
+-
+-struct regCluster
+-/* A cluster of items. */
+-    {
+-    struct regCluster *next;
+-    char *chrom;		/* Chromosome.  Not allocated here. */
+-    int chromStart, chromEnd;	/* Half open coordinates. */
+-    double score;		/* Sum of component scores. */
+-    double maxSubScore;		/* Max of component scores. */
+-    struct slRef *itemRefList;	/* List of references to component items. */
+-    };
+-
+-struct regSource *regSourceLoadAll(char *fileName, int dimCount)
+-/* Read file, parse it line by line and return list of regSources. */
+-{
+-struct lineFile *lf = lineFileOpen(fileName, TRUE);
+-int rowSize = dimCount + 6;
+-char *row[rowSize];
+-struct regSource *sourceList = NULL, *source;
+-while (lineFileNextRow(lf, row, rowSize))
+-    {
+-    /* Allocate struct and read in fixed fields. */
+-    AllocVar(source);
+-    source->dataSource = cloneString(row[0]);
+-    source->chromColIx = sqlUnsigned(row[1]);
+-    source->startColIx = sqlUnsigned(row[2]);
+-    source->endColIx = sqlUnsigned(row[3]);
+-    source->scoreColIx = sqlUnsigned(row[4]);
+-    source->normFactor = sqlDouble(row[5]);
+-
+-    /* Read in dimension labels. */
+-    AllocArray(source->labels, dimCount);
+-    int i;
+-    for (i=0; i<dimCount; ++i)
+-        source->labels[i] = cloneString(row[i+6]);
+-
+-    /* Calculate required columns. */
+-    int minColCount = max(source->chromColIx, source->startColIx);
+-    minColCount = max(minColCount, source->endColIx);
+-    minColCount = max(minColCount, source->scoreColIx);
+-    source->minColCount = minColCount + 1;
+-    slAddHead(&sourceList, source);
+-    }
+-lineFileClose(&lf);
+-slReverse(&sourceList);
+-return sourceList;
+-}
+-
+-void clusterSource(struct regSource *source, struct hash *chromHash, 
+-	struct rbTreeNode *stack[128])
+-/* Read through data source and add items to it to rangeTrees in hash */
+-{
+-struct lineFile *lf = lineFileOpen(source->dataSource, TRUE);
+-struct lm *lm = chromHash->lm;	/* Local memory pool - share with hash */
+-char *row[source->minColCount];
+-struct regItem *item;
+-while (lineFileNextRow(lf, row, source->minColCount))
+-    {
+-    char *chrom = row[source->chromColIx];
+-    struct hashEl *hel = hashLookup(chromHash, chrom);
+-    if (hel == NULL)
+-        {
+-	struct rbTree *tree = rangeTreeNewDetailed(lm, stack);
+-	hel = hashAdd(chromHash, chrom, tree);
+-	}
+-    struct rbTree *tree = hel->val;
+-    lmAllocVar(lm, item);
+-    item->chrom = hel->name;
+-    item->chromStart = sqlUnsigned(row[source->startColIx]);
+-    item->chromEnd = sqlUnsigned(row[source->endColIx]);
+-    item->score = sqlDouble(row[source->scoreColIx]) * source->normFactor;
+-    if (item->score > 1000) item->score = 1000;
+-    item->source = source;
+-    rangeTreeAddValList(tree, item->chromStart, item->chromEnd, item);
+-    }
+-
+-lineFileClose(&lf);
+-}
+-
+-int cmpChromEls(const void *va, const void *vb)
+-/* Compare to sort based on query start. */
+-{
+-const struct hashEl *a = *((struct hashEl **)va);
+-const struct hashEl *b = *((struct hashEl **)vb);
+-return cmpWordsWithEmbeddedNumbers(a->name, b->name);
+-}
+-
+-void addCluster(struct lm *lm, struct regItem *itemList, int start, int end,
+-	struct regCluster **pList)
+-/* Make cluster of all items that overlap start/end, and put it on list. */
+-{
+-struct regCluster *cluster;
+-lmAllocVar(lm, cluster);
+-double score = 0.0;
+-double maxSubScore = 0.0;
+-struct slRef  *refList = NULL, *ref;
+-struct regItem *item;
+-for (item = itemList; item != NULL; item = item->next)
+-    {
+-    if (rangeIntersection(start, end, item->chromStart, item->chromEnd) > 0)
+-	{
+-	lmAllocVar(lm, ref);
+-	ref->val = item;
+-	slAddHead(&refList, ref);
+-	score += item->score;
+-	if (item->score > maxSubScore) maxSubScore = item->score;
+-	}
+-    }
+-slReverse(&refList);
+-cluster->chrom = itemList->chrom;
+-cluster->chromStart = start;
+-cluster->chromEnd = end;
+-cluster->itemRefList = refList;
+-cluster->score = score;
+-cluster->maxSubScore = maxSubScore;
+-slAddHead(pList, cluster);
+-}
+-
+-struct regCluster *clusterItems(struct lm *lm, struct regItem *itemList, 
+-	double forceJoinScore, double weakLevel)
+-/* Convert a list of items to a list of clusters of items.  This may break up clusters that
+- * have weakly linked parts. 
+-      [                ]
+-      AAAAAAAAAAAAAAAAAA 
+-       BBBBBB   DDDDDD
+-        CCCC     EEEE
+-   gets tranformed into
+-       [    ]   [    ]
+-      AAAAAAAAAAAAAAAAAA 
+-       BBBBBB   DDDDDD
+-        CCCC     EEEE
+-   The strategy is to build a rangeTree of coverage, which might look something like so:
+-      123333211123333211 
+-   then define cluster ends that exceed the minimum limit, which is either 10% of the highest
+-   or forceJoinScore if 10% of the highest is more than forceJoinScore.  This will go to
+-   something like so:
+-        [---]   [----]   
+-   Finally the items that are overlapping a cluster are assigned to it.  Note that this
+-   may mean that an item may be in multiple clusters.
+-        [ABC]   [ ADE]
+- */
+-{
+-int easyMax = round(1.0/weakLevel);
+-int itemCount = slCount(itemList);
+-struct regCluster *clusterList = NULL;
+-if (itemCount < easyMax)
+-    {
+-    struct regItem *item = itemList;
+-    int chromStart = item->chromStart;
+-    int chromEnd = item->chromEnd;
+-    for (item = item->next; item != NULL; item = item->next)
+-        {
+-	if (item->chromStart < chromStart) chromStart = item->chromStart;
+-	if (item->chromEnd > chromEnd) chromEnd = item->chromEnd;
+-	}
+-    addCluster(lm, itemList, chromStart, chromEnd, &clusterList);
+-    }
+-else
+-    {
+-    /* Make up coverage tree. */
+-    struct rbTree *covTree = rangeTreeNew();
+-    struct regItem *item;
+-    for (item = itemList; item != NULL; item = item->next)
+-	rangeTreeAddToCoverageDepth(covTree, item->chromStart, item->chromEnd);
+-    struct range *range, *rangeList = rangeTreeList(covTree);
+-
+-    /* Figure out maximum coverage. */
+-    int maxCov = 0;
+-    for (range = rangeList; range != NULL; range = range->next)
+-        {
+-	int cov = ptToInt(range->val);
+-	if (cov > maxCov) maxCov = cov;
+-	}
+-
+-    /* Figure coverage threshold. */
+-    int threshold = round(maxCov * weakLevel);
+-    if (threshold > forceJoinScore-1) threshold = forceJoinScore-1;
+-
+-    /* Loop through emitting sections over threshold as clusters */
+-    boolean inRange = FALSE;
+-    boolean start = 0, end = 0;
+-    for (range = rangeList; range != NULL; range = range->next)
+-        {
+-	int cov = ptToInt(range->val);
+-	if (cov > threshold)
+-	    {
+-	    if (inRange)
+-	       end = range->end;
+-	    else
+-	       {
+-	       inRange = TRUE;
+-	       start = range->start;
+-	       end = range->end;
+-	       }
+-	    }
+-	else
+-	    {
+-	    if (inRange)
+-		{
+-		addCluster(lm, itemList, start, end, &clusterList);
+-		inRange = FALSE;
+-		}
+-	    }
+-	}
+-    if (inRange)
+-        addCluster(lm, itemList, start, end, &clusterList);
+-    }
+-slReverse(&clusterList);
+-return clusterList;
+-}
+-
+ static int clusterIx = 0;
+ 
+ void outputClustersForChrom(char *chrom, struct rbTree *tree, FILE *fCluster, FILE *fBed)
+@@ -302,13 +60,13 @@ verbose(2, "Got %d ranges on %s\n", slCount(rangeList), chrom);
+ struct lm *lm = lmInit(0);
+ for (range = rangeList; range != NULL; range = range->next)
+     {
+-    struct regCluster *cluster, *clusterList = clusterItems(lm, range->val, 
++    struct peakCluster *cluster, *clusterList = peakClusterItems(lm, range->val, 
+     	clForceJoinScore, clWeakLevel);
+     for (cluster = clusterList; cluster != NULL; cluster = cluster->next)
+         {
+ 	struct slRef *ref, *refList=cluster->itemRefList;
+ 	++clusterIx;
+-	struct regItem *item = refList->val;
++	struct peakItem *item = refList->val;
+ 	struct hash *uniqHash = hashNew(0);
+ 	for (ref = refList; ref != NULL; ref = ref->next)
+ 	    {
+@@ -335,20 +93,17 @@ lmCleanup(&lm);
+ void regCluster(char *tableOfTables, char *outCluster, char *outBed)
+ /* regCluster - Cluster regulator regions. */
+ {
+-struct regSource *source, *sourceList = regSourceLoadAll(tableOfTables, clDims);
++struct peakSource *source, *sourceList = peakSourceLoadAll(tableOfTables, clDims);
+ verbose(1, "Read %d sources from %s\n", slCount(sourceList), tableOfTables);
+-struct hash *chromHash = hashNew(0);
+-struct rbTreeNode *stack[128];
++struct peakClusterMaker *maker = peakClusterMakerNew();
+ for (source = sourceList; source != NULL; source = source->next)
+-    {
+-    clusterSource(source, chromHash, stack);
+-    }
++    peakClusterMakerAddFromSource(maker, source);
+ 
+ /* Get out list of chromosomes and process one at a time. */
+ FILE *fCluster = mustOpen(outCluster, "w");
+ FILE *fBed = mustOpen(outBed, "w");
+-struct hashEl *chrom, *chromList = hashElListHash(chromHash);
+-slSort(&chromList, cmpChromEls);
++struct hashEl *chrom;
++struct hashEl *chromList = peakClusterMakerChromList(maker);
+ int totalClusters = 0;
+ for (chrom = chromList; chrom != NULL; chrom = chrom->next)
+     {
+@@ -357,10 +112,10 @@ for (chrom = chromList; chrom != NULL; chrom = chrom->next)
+     outputClustersForChrom(chrom->name, tree, fCluster, fBed);
+     }
+ verbose(1, "%d singly-linked clusters, %d clusters in %d chromosomes\n", 
+-	totalClusters, clusterIx, chromHash->elCount);
++	totalClusters, clusterIx, maker->chromHash->elCount);
+ carefulClose(&fCluster);
+ carefulClose(&fBed);
+-
++peakClusterMakerFree(&maker);
+ }
+ 
+ int main(int argc, char *argv[])
+diff --git a/src/hg/utils/automation/Encode.pm b/src/hg/utils/automation/Encode.pm
+old mode 100644
+new mode 100755
+diff --git a/src/hg/utils/automation/EnsGeneAutomate.pm b/src/hg/utils/automation/EnsGeneAutomate.pm
+old mode 100644
+new mode 100755
+diff --git a/src/hg/utils/automation/HgDb.pm b/src/hg/utils/automation/HgDb.pm
+old mode 100644
+new mode 100755
diff --git a/gbtools/src/blatSrc/lib/dlist.c b/gbtools/src/blatSrc/lib/dlist.c
new file mode 100644
index 0000000..3d1f22d
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/dlist.c
@@ -0,0 +1,300 @@
+/* dlist.c - Doubly-linked list routines. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+#include "common.h"
+#include "dlist.h"
+
+
+void dlListInit(struct dlList *dl)
+/* Initialize list to be empty */
+{
+dl->head = (struct dlNode *)(&dl->nullMiddle);
+dl->nullMiddle = NULL;
+dl->tail = (struct dlNode *)(&dl->head);
+}
+
+struct dlList *newDlList()
+/* Return a new doubly linked list. */
+{
+struct dlList *dl;
+AllocVar(dl);
+dl->head = (struct dlNode *)(&dl->nullMiddle);
+dl->tail = (struct dlNode *)(&dl->head);
+return dl;
+}
+
+void dlListReset(struct dlList *dl)
+/* Reset a list to the empty state (does not free values)  */
+{
+struct dlNode *node, *next;
+for (node = dl->head; node->next != NULL; node = next)
+    {
+    next = node->next;
+    freeMem(node);
+    }
+dl->head = (struct dlNode *)(&dl->nullMiddle);
+dl->nullMiddle = NULL;
+dl->tail = (struct dlNode *)(&dl->head);
+}
+
+void freeDlList(struct dlList **pList)
+/* Free up a doubly linked list and it's nodes (but not the node values). */
+{
+struct dlList *list = *pList;
+if (list != NULL)
+    {
+    dlListReset(list);
+    freez(pList);
+    }
+}
+
+void freeDlListAndVals(struct dlList **pList)
+/* Free all values in doubly linked list and the list itself.  (Just calls
+ * freeMem on all values. */
+{
+struct dlList *list = *pList;
+if (list != NULL)
+    {
+    struct dlNode *node;
+    for (node = list->head; node->next != NULL; node = node->next)
+        freeMem(node->val);
+    freeDlList(pList);
+    }
+}
+
+
+void dlInsertBetween(struct dlNode *before, struct dlNode *after, struct dlNode *newNode)
+{
+before->next = newNode; 
+newNode->prev = before; 
+newNode->next = after;  
+after->prev = newNode; 
+}
+
+void dlAddBefore(struct dlNode *anchor, struct dlNode *newNode)
+/* Add a node to list before anchor member. */
+{
+dlInsertBetween(anchor->prev, anchor, newNode);
+}
+
+void dlAddAfter(struct dlNode *anchor, struct dlNode *newNode)
+/* Add a node to list after anchor member. */
+{
+dlInsertBetween(anchor, anchor->next, newNode);
+}
+
+void dlAddHead(struct dlList *list, struct dlNode *newNode)
+/* Add a node to head of list. */
+{
+struct dlNode *head = list->head;
+dlInsertBetween(head->prev, head, newNode);
+}
+
+void dlAddTail(struct dlList *list, struct dlNode *newNode)
+/* Add a node to tail of list. */
+{
+struct dlNode *tail = list->tail;
+dlInsertBetween(tail, tail->next, newNode);
+}
+
+struct dlNode *dlAddValBefore(struct dlNode *anchor, void *val)
+/* Create a node containing val and add to list before anchor member. */
+{
+struct dlNode *node = AllocA(struct dlNode);
+node->val = val;
+dlAddBefore(anchor, node);
+return node;
+}
+
+struct dlNode *dlAddValAfter(struct dlNode *anchor, void *val)
+/* Create a node containing val and add to list after anchor member. */
+{
+struct dlNode *node = AllocA(struct dlNode);
+node->val = val;
+dlAddAfter(anchor, node);
+return node;
+}
+
+struct dlNode *dlAddValHead(struct dlList *list, void *val)
+/* Create a node containing val and add to head of list. */
+{
+struct dlNode *node = AllocA(struct dlNode);
+node->val = val;
+dlAddHead(list, node);
+return node;
+}
+
+struct dlNode *dlAddValTail(struct dlList *list, void *val)
+/* Create a node containing val and add to tail of list. */
+{
+struct dlNode *node = AllocA(struct dlNode);
+node->val = val;
+dlAddTail(list, node);
+return node;
+}
+
+void dlRemove(struct dlNode *node)
+/* Removes a node from list. Node is not freed. */
+{
+struct dlNode *before = node->prev;
+struct dlNode *after = node->next;
+before->next = after;
+after->prev = before;
+node->prev = NULL;
+node->next = NULL;
+}
+
+void dlRemoveHead(struct dlList *list)
+/* Removes head from list. Node is not freed. */
+{
+dlRemove(list->head);
+}
+
+void dlRemoveTail(struct dlList *list)
+/* Remove tail from list. Node is not freed. */
+{
+dlRemove(list->tail);
+}
+
+struct dlNode *dlPopHead(struct dlList *list)
+/* Remove first node from list and return it. */
+{
+struct dlNode *node = list->head;
+if (node->next == NULL)
+    return NULL;
+dlRemove(node);
+return node;
+}
+
+struct dlNode *dlPopTail(struct dlList *list)
+/* Remove last node from list and return it. */
+{
+struct dlNode *node = list->tail;
+if (node->prev == NULL)
+    return NULL;
+dlRemove(node);
+return node;
+}
+
+void dlDelete(struct dlNode **nodePtr)
+/* Removes a node from list and frees it. */
+{
+struct dlNode *node = *nodePtr;
+if (node != NULL)
+    {
+    dlRemove(node);
+    freeMem(node);
+    }
+}
+
+int dlCount(struct dlList *list)
+/* Return length of list. */
+{
+return slCount(list->head) - 1;
+}
+
+
+struct dlSorter 
+/* Helper structure for sorting dlNodes preserving order */
+    {
+    struct dlNode *node;
+    };
+
+static int (*compareFunc)(const void *elem1, const void *elem2);
+/* Node comparison pointer, just used by dlSortNodes and helpers. */
+
+static int dlNodeCmp(const void *elem1, const void *elem2)
+/* Compare two dlSorters indirectly, by calling compareFunc. */
+{
+struct dlSorter *a = (struct dlSorter *)elem1;
+struct dlSorter *b = (struct dlSorter *)elem2;
+return compareFunc(&a->node->val, &b->node->val);
+}
+    
+void dlSort(struct dlList *list, 
+	int (*compare )(const void *elem1,  const void *elem2))
+/* Sort a singly linked list with Qsort and a temporary array. 
+ * The arguments to the compare function in real, non-void, life
+ * are pointers to pointers of the type that is in the val field of 
+ * the nodes of the list. */
+{
+int len = dlCount(list);
+
+if (len > 1)
+    {
+    /* Move val's onto an array, sort, and then put back into list. */
+    struct dlSorter *sorter = needLargeMem(len * sizeof(sorter[0])), *s;
+    struct dlNode *node;
+    int i;
+
+    for (i=0, node = list->head; i<len; ++i, node = node->next)
+	{
+	s = &sorter[i];
+	s->node = node;
+	}
+    compareFunc = compare;
+    qsort(sorter, len, sizeof(sorter[0]), dlNodeCmp);
+    dlListInit(list);
+    for (i=0; i<len; ++i)
+	dlAddTail(list, sorter[i].node);
+    freeMem(sorter);
+    }
+}
+
+
+boolean dlEmpty(struct dlList *list)
+/* Return TRUE if list is empty. */
+{
+return dlIsEmpty(list);
+}
+
+struct dlNode *dlGetBeforeHead(struct dlList *list)
+/* Get the node before the head of the list */
+{
+if (dlEmpty(list))
+    return list->head;
+else
+    return list->head->prev;
+}
+
+struct dlNode *dlGetAfterTail(struct dlList *list)
+/* Get the node after the tail of the list */
+{
+if (dlEmpty(list))
+    return list->tail;
+else
+    return list->tail->next;
+}
+
+void *dlListToSlList(struct dlList *dList)
+/* Return slList from dlList. */
+{
+struct slList *list = NULL, *el;
+struct dlNode *node;
+
+for (node = dList->tail; node->prev != NULL; node = node->prev)
+    {
+    el = node->val;
+    slAddHead(&list, el);
+    }
+return list;
+}
+
+void dlCat(struct dlList *a, struct dlList *b)
+/* Move items from b to end of a. */
+{
+struct dlNode *node;
+while ((node = dlPopHead(b)) != NULL)
+    dlAddTail(a, node);
+}
+
+struct dlNode *dlValInList(struct dlList *list, void *val)
+/* Return node on list if any that has associated val. */
+{
+struct dlNode *node;
+for (node = list->head; !dlEnd(node); node = node->next)
+    if (node->val == val)
+        return node;
+return NULL;
+}
diff --git a/gbtools/src/blatSrc/lib/dnaLoad.c b/gbtools/src/blatSrc/lib/dnaLoad.c
new file mode 100644
index 0000000..f498e23
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/dnaLoad.c
@@ -0,0 +1,303 @@
+/* dnaLoad - Load dna from a variaty of file formats. */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "dnaseq.h"
+#include "fa.h"
+#include "twoBit.h"
+#include "nib.h"
+#include "dnaLoad.h"
+
+
+struct dnaLoadStack
+/* Keep track of a single DNA containing file. */
+    {
+    struct dnaLoadStack *next;	/* Next in list. */
+    struct twoBitFile *twoBit; /* Two bit file if any. */
+    struct twoBitIndex *tbi;	 /* Next twoBit sequence. */
+    struct lineFile *textFile;	/* Text file if any. */
+    boolean textIsFa;		/* True if text is in fasta format. */
+    };
+
+struct dnaLoad
+/* A structure to help us load DNA from files - mixed case
+ * from either .fa, .nib, or .2bit files */
+    {
+    struct dnaLoad *next;	/* Next loader in list. */
+    char *topFileName;		/* Highest level file name. */
+    boolean finished;		/* Set to TRUE at end. */
+    struct dnaLoadStack *stack;	/* Stack of files we're working on. */
+    int curStart;		/* Start offset within current parent sequence. */
+    int curEnd;			/* End offset  within current parent sequence. */
+    int curSize;		/* Size of current parent sequence. */
+    };
+
+struct dnaLoadStack *dnaLoadStackNew(char *fileName)
+/* Create new dnaLoadStack on composite file. */
+{
+struct dnaLoadStack *dls;
+AllocVar(dls);
+if (twoBitIsFile(fileName))
+    {
+    dls->twoBit = twoBitOpen(fileName);
+    dls->tbi = dls->twoBit->indexList;
+    }
+else
+    {
+    char *line;
+    dls->textFile = lineFileOpen(fileName, TRUE);
+    if (lineFileNextReal(dls->textFile, &line))
+        {
+	line = trimSpaces(line);
+	if (line[0] == '>')
+	    dls->textIsFa = TRUE;
+	lineFileReuse(dls->textFile);
+	}
+    }
+return dls;
+}
+
+void dnaLoadStackFree(struct dnaLoadStack **pDls)
+/* free up resources associated with dnaLoadStack. */
+{
+struct dnaLoadStack *dls = *pDls;
+if (dls != NULL)
+    {
+    lineFileClose(&dls->textFile);
+    twoBitClose(&dls->twoBit);
+    freez(pDls);
+    }
+}
+
+void dnaLoadStackFreeList(struct dnaLoadStack **pList)
+/* Free a list of dynamically allocated dnaLoadStack's */
+{
+struct dnaLoadStack *el, *next;
+
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    dnaLoadStackFree(&el);
+    }
+*pList = NULL;
+}
+
+void dnaLoadClose(struct dnaLoad **pDl)
+/* Free up resources associated with dnaLoad. */
+{
+struct dnaLoad *dl = *pDl;
+if (dl != NULL)
+    {
+    dnaLoadStackFreeList(&dl->stack);
+    freeMem(dl->topFileName);
+    freez(pDl);
+    }
+}
+
+struct dnaLoad *dnaLoadOpen(char *fileName)
+/* Return new DNA loader.  Call dnaLoadNext() on this until
+ * you get a NULL return, then dnaLoadClose(). */
+{
+struct dnaLoad *dl;
+AllocVar(dl);
+dl->topFileName = cloneString(fileName);
+return dl;
+}
+
+struct dnaSeq *dnaLoadSingle(char *fileName, int *retStart, int *retEnd, int *retParentSize)
+/* Return sequence if it's a nib file or 2bit part, NULL otherwise. */
+{
+struct dnaSeq *seq = NULL;
+unsigned start = 0, end = 0;
+int parentSize = 0;
+if (nibIsFile(fileName))
+    {
+    /* Save offset out of fileName for auto-lifting */
+    char filePath[PATH_LEN];
+    char name[PATH_LEN];
+    nibParseName(0, fileName, filePath, name, &start, &end);
+
+    if (end != 0)	/* It's just a range. */
+        {
+	FILE *f;
+	int size;
+	nibOpenVerify(filePath, &f, &size);
+	parentSize = size;
+	}
+    seq =  nibLoadAllMasked(NIB_MASK_MIXED, fileName);
+    if (end == 0)
+         parentSize = end = seq->size;
+    freez(&seq->name);
+    seq->name = cloneString(name);
+    }
+else if (twoBitIsRange(fileName))
+    {
+    /* Save offset out of fileName for auto-lifting */
+    char *rangeSpec = cloneString(fileName);
+    int start, end;
+    char *file, *seqName;
+    twoBitParseRange(rangeSpec, &file, &seqName, &start, &end);
+
+    /* Load sequence. */
+        {
+	struct twoBitFile *tbf = twoBitOpen(file);
+	parentSize = twoBitSeqSize(tbf, seqName);
+	seq = twoBitReadSeqFrag(tbf, seqName, start, end);
+	twoBitClose(&tbf);
+	}
+    if (end == 0)
+        end = seq->size;
+    freez(&rangeSpec);
+    }
+if (retStart != NULL)
+    *retStart = start;
+if (retEnd != NULL)
+    *retEnd = end;
+if (retParentSize != NULL)
+    *retParentSize = parentSize;
+return seq;
+}
+
+static struct dnaSeq *dnaLoadNextFromStack(struct dnaLoad *dl)
+/* Load next piece of DNA from stack of files.  Return NULL
+ * when stack is empty. */
+{
+struct dnaLoadStack *dls;
+struct dnaSeq *seq = NULL;
+while ((dls = dl->stack) != NULL)
+    {
+    if (dls->twoBit)
+        {
+	if (dls->tbi != NULL)
+	    {
+	    seq = twoBitReadSeqFrag(dls->twoBit, dls->tbi->name, 0, 0);
+	    dls->tbi = dls->tbi->next;
+	    return seq;
+	    }
+	else
+	    {
+	    dl->stack = dls->next;
+	    dnaLoadStackFree(&dls);
+	    }
+	}
+    else if (dls->textIsFa)
+        {
+	DNA *dna;
+	char *name;
+	int size;
+	if (faMixedSpeedReadNext(dls->textFile, &dna, &size, &name))
+	    {
+	    AllocVar(seq);
+	    seq->dna = needLargeMem(size+1);
+	    memcpy((void *)seq->dna, (void *)dna, size);
+	    seq->dna[size] = 0;
+	    seq->size = size;
+	    seq->name = cloneString(name);
+	    dl->curStart = 0;
+	    dl->curEnd = size;
+	    dl->curSize = size;
+	    return seq;
+	    }
+	else
+	    {
+	    dl->stack = dls->next;
+	    dnaLoadStackFree(&dls);
+	    }
+	}
+    else	/* It's a file full of file names. */
+        {
+	char *line;
+	if (lineFileNextReal(dls->textFile, &line))
+	    {
+	    line  = trimSpaces(line);
+	    if ((seq = dnaLoadSingle(line, &dl->curStart, &dl->curEnd, &dl->curSize)) != NULL)
+	         return seq;
+	    else
+	         {
+		 struct dnaLoadStack *newDls;
+		 newDls = dnaLoadStackNew(line);
+		 slAddHead(&dl->stack, newDls);
+		 }
+	    }
+	else
+	    {
+	    dl->stack = dls->next;
+	    dnaLoadStackFree(&dls);
+	    }
+	}
+    }
+dl->finished = TRUE;
+return NULL;
+}
+
+static struct dnaSeq *dnaLoadStackOrSingle(struct dnaLoad *dl)
+/* Return next dna sequence. */
+{
+struct dnaSeq *seq = NULL;
+if (dl->finished)
+    return NULL;
+if (dl->stack == NULL)
+    {
+    if ((seq = dnaLoadSingle(dl->topFileName, &dl->curStart, &dl->curEnd, &dl->curSize)) != NULL)
+	{
+	dl->finished = TRUE;
+	return seq;
+	}
+    dl->stack = dnaLoadStackNew(dl->topFileName);
+    }
+return dnaLoadNextFromStack(dl);
+}
+
+struct dnaSeq *dnaLoadNext(struct dnaLoad *dl)
+/* Return next dna sequence. */
+{
+struct dnaSeq *seq;
+dl->curSize = dl->curStart = dl->curEnd = 0;
+seq = dnaLoadStackOrSingle(dl);
+return seq;
+}
+
+struct dnaSeq *dnaLoadAll(char *fileName)
+/* Return list of all DNA referenced in file.  File
+ * can be either a single fasta file, a single .2bit
+ * file, a .nib file, or a text file containing
+ * a list of the above files. DNA is mixed case. */
+{
+struct dnaLoad *dl = dnaLoadOpen(fileName);
+struct dnaSeq *seqList = NULL, *seq;
+while ((seq = dnaLoadNext(dl)) != NULL)
+    {
+    slAddHead(&seqList, seq);
+    }
+dnaLoadClose(&dl);
+slReverse(&seqList);
+return seqList;
+}
+
+int dnaLoadCurStart(struct dnaLoad *dl)
+/* Returns the start offset of current sequence within a larger
+ * sequence.  Useful for programs that want to auto-lift
+ * nib and 2bit fragments.  Please call only after a
+ * sucessful dnaLoadNext. */
+{
+return dl->curStart;
+}
+
+int dnaLoadCurEnd(struct dnaLoad *dl)
+/* Returns the end offset of current sequence within a larger
+ * sequence.  Useful for programs that want to auto-lift
+ * nib and 2bit fragments.  Please call only after a
+ * sucessful dnaLoadNext. */
+{
+return dl->curEnd;
+}
+
+int dnaLoadCurSize(struct dnaLoad *dl)
+/* Returns the size of the parent sequence.  Useful for
+ * auto-lift programs.  Please call only after dnaLoadNext. */
+{
+return dl->curSize;
+}
+
diff --git a/gbtools/src/blatSrc/lib/dnaMarkov.c b/gbtools/src/blatSrc/lib/dnaMarkov.c
new file mode 100644
index 0000000..91c153d
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/dnaMarkov.c
@@ -0,0 +1,242 @@
+/* dnaMarkov - stuff to build 1st, 2nd, 3rd, and coding
+ * 3rd degree Markov models for DNA. */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "dnautil.h"
+#include "dnaseq.h"
+#include "slog.h"
+#include "dnaMarkov.h"
+
+
+void dnaMark0(struct dnaSeq *seqList, double mark0[5], int slogMark0[5])
+/* Figure out frequency of bases in input.  Results go into
+ * mark0 and optionally in scaled log form into slogMark0.
+ * Order is N, T, C, A, G.  (TCAG is our normal order) */
+{
+struct dnaSeq *seq;
+int histo[4];
+int oneHisto[4];
+double total;
+int i;
+double *freq = mark0+1;
+
+zeroBytes(histo, sizeof(histo));
+for (seq = seqList; seq != NULL; seq = seq->next)
+    {
+    dnaBaseHistogram(seq->dna, seq->size, oneHisto);
+    for (i=0; i<4; ++i)
+        histo[i] += oneHisto[i];
+    }
+total = histo[0] + histo[1] + histo[2] + histo[3];
+freq[-1] = 1.0;
+for (i=0; i<4; ++i)
+    freq[i] = (double)histo[i] / total;
+if (slogMark0 != NULL)
+    {
+    int *slogFreq = slogMark0 + 1;
+    slogFreq[-1] = 0;
+    for (i=0; i<4; ++i)
+	slogFreq[i] = slog(freq[i]);
+    }
+}
+
+
+void dnaMark1(struct dnaSeq *seqList, double mark0[5], int slogMark0[5], 
+	double mark1[5][5], int slogMark1[5][5])
+/* Make up 1st order Markov model - probability that one nucleotide
+ * will follow another. Input is sequence and 0th order Markov models.
+ * Output is first order Markov model. slogMark1 can be NULL. */
+{
+struct dnaSeq *seq;
+DNA *dna, *endDna;
+int i,j;
+int histo[5][5];
+int hist1[5];
+
+zeroBytes(histo, sizeof(histo));
+zeroBytes(hist1, sizeof(hist1));
+for (seq = seqList; seq != NULL; seq = seq->next)
+    {
+    dna = seq->dna;
+    endDna = dna + seq->size-1;
+    for (;dna < endDna; ++dna)
+        {
+        i = ntVal[(int)dna[0]];
+        j = ntVal[(int)dna[1]];
+        hist1[i+1] += 1;
+        histo[i+1][j+1] += 1;
+        }
+    }
+for (i=0; i<5; ++i)
+    {
+    for (j=0; j<5; ++j)
+        {
+        double mark1Val;
+        int matVal = histo[i][j] + 1;
+        mark1Val = ((double)matVal)/(hist1[i]+5);
+        mark1[i][j] = mark1Val;
+	if (slogMark1 != NULL)
+	    slogMark1[i][j] = slog(mark1Val);
+        }
+    }
+for (i=0; i<5; ++i)
+    {
+    mark1[i][0] = 1;
+    mark1[0][i] = mark0[i];
+    if (slogMark1 != NULL)
+	{
+	slogMark1[i][0] = 0;
+	slogMark1[0][i] = slogMark0[i];
+	}
+    }
+}
+
+void dnaMarkTriple(struct dnaSeq *seqList, 
+    double mark0[5], int slogMark0[5],
+    double mark1[5][5], int slogMark1[5][5],
+    double mark2[5][5][5], int slogMark2[5][5][5],
+    int offset, int advance, int earlyEnd)
+/* Make up a table of how the probability of a nucleotide depends on the previous two.
+ * Depending on offset and advance parameters this could either be a straight 2nd order
+ * Markov model, or a model for a particular coding frame. */
+{
+struct dnaSeq *seq;
+DNA *dna, *endDna;
+int i,j,k;
+int histo[5][5][5];
+int hist2[5][5];
+int total = 0;
+zeroBytes(histo, sizeof(histo));
+zeroBytes(hist2, sizeof(hist2));
+for (seq = seqList; seq != NULL; seq = seq->next)
+    {
+    dna = seq->dna;
+    endDna = dna + seq->size - earlyEnd - 2;
+    dna += offset;
+    for (;dna < endDna; dna += advance)
+        {
+        i = ntVal[(int)dna[0]];
+        j = ntVal[(int)dna[1]];
+        k = ntVal[(int)dna[2]];
+        hist2[i+1][j+1] += 1;
+        histo[i+1][j+1][k+1] += 1;
+        total += 1;
+        }
+    }
+for (i=0; i<5; ++i)
+    {
+    for (j=0; j<5; ++j)
+        {
+        for (k=0; k<5; ++k)
+            {
+            double markVal;
+            int matVal = histo[i][j][k]+1;
+            if (i == 0 || j == 0 || k == 0)
+                {
+                if (k == 0)
+                    {
+                    mark2[i][j][k] = 1;
+		    if (slogMark2 != NULL)
+			slogMark2[i][j][k] = 0;
+                    }
+                else if (j == 0)
+                    {
+                    mark2[i][j][k] = mark0[k];
+		    if (slogMark2 != NULL)
+			slogMark2[i][j][k] = slogMark0[k];
+                    }
+                else if (i == 0)
+                    {
+                    mark2[i][j][k] = mark1[j][k];
+		    if (slogMark2 != NULL)
+			slogMark2[i][j][k] = slogMark1[j][k];
+                    }
+                }
+            else
+                {
+                markVal = ((double)matVal)/(hist2[i][j]+5);
+                mark2[i][j][k] = markVal;
+		if (slogMark2 != NULL)
+		    slogMark2[i][j][k] = slog(markVal);
+                }
+            }
+        }
+    }
+}
+
+void dnaMark2(struct dnaSeq *seqList, double mark0[5], int slogMark0[5],
+	double mark1[5][5], int slogMark1[5][5],
+	double mark2[5][5][5], int slogMark2[5][5][5])
+/* Make up 1st order Markov model - probability that one nucleotide
+ * will follow the previous two. */
+{
+dnaMarkTriple(seqList, mark0, slogMark0, mark1, slogMark1, 
+	mark2, slogMark2, 0, 1, 0);
+}
+
+#define SIG 10
+
+char *dnaMark2Serialize(double mark2[5][5][5])
+// serialize a 2nd order markov model
+{
+int i, j, k;
+int offset = 0;
+char *buf = NULL;
+int bufLen = 5*5*5 * (SIG + 3) + 1;
+buf = needMem(bufLen);
+for(i = 0; i < 5; i++)
+    for(j = 0; j < 5; j++)
+        for(k = 0; k < 5; k++)
+            {
+            if(offset)
+                {
+                sprintf(buf + offset, ";%1.*f", SIG, mark2[i][j][k]);
+                offset += (SIG + 3);
+                }
+            else
+                {
+                sprintf(buf + offset, "%1.*f", SIG, mark2[i][j][k]);
+                offset += (SIG + 2);
+                }
+            }
+buf[offset] = 0;
+return buf;
+}
+
+void dnaMark2Deserialize(char *buf, double mark2[5][5][5])
+// deserialize a 2nd order markov model
+{
+int i, j, k;
+int offset = 0;
+for(i = 0; i < 5; i++)
+    for(j = 0; j < 5; j++)
+        for(k = 0; k < 5; k++)
+            {
+            float f;
+            if(offset)
+                {
+                sscanf(buf + offset, ";%f", &f);
+                mark2[i][j][k] = f;
+                offset += (SIG + 3);
+                }
+            else
+                {
+                sscanf(buf + offset, "%f", &f);
+                mark2[i][j][k] = f;
+                offset += (SIG + 2);
+                }
+            }
+}
+
+void dnaMarkMakeLog2(double mark2[5][5][5])
+// convert a 2nd-order markov array to log2
+{
+int i, j, k;
+for(i = 0; i < 5; i++)
+    for(j = 0; j < 5; j++)
+        for(k = 0; k < 5; k++)
+            mark2[i][j][k] = logBase2(mark2[i][j][k]);
+}
diff --git a/gbtools/src/blatSrc/lib/dnaMotif.c b/gbtools/src/blatSrc/lib/dnaMotif.c
new file mode 100644
index 0000000..0e2f3f7
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/dnaMotif.c
@@ -0,0 +1,631 @@
+/* dnaMotif.c was originally generated by the autoSql program, which also 
+ * generated dnaMotif.h and dnaMotif.sql.  This module links the database and
+ * the RAM representation of objects. */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "linefile.h"
+#include "sqlList.h"
+#include "dystring.h"
+#include "dnaMotif.h"
+#include "portable.h"
+
+
+struct dnaMotif *dnaMotifCommaIn(char **pS, struct dnaMotif *ret)
+/* Create a dnaMotif out of a comma separated string. 
+ * This will fill in ret if non-null, otherwise will
+ * return a new dnaMotif */
+{
+char *s = *pS;
+int i;
+
+if (ret == NULL)
+    AllocVar(ret);
+ret->name = sqlStringComma(&s);
+ret->columnCount = sqlSignedComma(&s);
+s = sqlEatChar(s, '{');
+AllocArray(ret->aProb, ret->columnCount);
+for (i=0; i<ret->columnCount; ++i)
+    {
+    ret->aProb[i] = sqlSignedComma(&s);
+    }
+s = sqlEatChar(s, '}');
+s = sqlEatChar(s, ',');
+s = sqlEatChar(s, '{');
+AllocArray(ret->cProb, ret->columnCount);
+for (i=0; i<ret->columnCount; ++i)
+    {
+    ret->cProb[i] = sqlSignedComma(&s);
+    }
+s = sqlEatChar(s, '}');
+s = sqlEatChar(s, ',');
+s = sqlEatChar(s, '{');
+AllocArray(ret->gProb, ret->columnCount);
+for (i=0; i<ret->columnCount; ++i)
+    {
+    ret->gProb[i] = sqlSignedComma(&s);
+    }
+s = sqlEatChar(s, '}');
+s = sqlEatChar(s, ',');
+s = sqlEatChar(s, '{');
+AllocArray(ret->tProb, ret->columnCount);
+for (i=0; i<ret->columnCount; ++i)
+    {
+    ret->tProb[i] = sqlSignedComma(&s);
+    }
+s = sqlEatChar(s, '}');
+s = sqlEatChar(s, ',');
+*pS = s;
+return ret;
+}
+
+void dnaMotifFree(struct dnaMotif **pEl)
+/* Free a single dynamically allocated dnaMotif such as created
+ * with dnaMotifLoad(). */
+{
+struct dnaMotif *el;
+
+if ((el = *pEl) == NULL) return;
+freeMem(el->name);
+freeMem(el->aProb);
+freeMem(el->cProb);
+freeMem(el->gProb);
+freeMem(el->tProb);
+freez(pEl);
+}
+
+void dnaMotifFreeList(struct dnaMotif **pList)
+/* Free a list of dynamically allocated dnaMotif's */
+{
+struct dnaMotif *el, *next;
+
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    dnaMotifFree(&el);
+    }
+*pList = NULL;
+}
+
+void dnaMotifOutput(struct dnaMotif *el, FILE *f, char sep, char lastSep) 
+/* Print out dnaMotif.  Separate fields with sep. Follow last field with lastSep. */
+{
+int i;
+if (sep == ',') fputc('"',f);
+fprintf(f, "%s", el->name);
+if (sep == ',') fputc('"',f);
+fputc(sep,f);
+fprintf(f, "%d", el->columnCount);
+fputc(sep,f);
+if (sep == ',') fputc('{',f);
+for (i=0; i<el->columnCount; ++i)
+    {
+    fprintf(f, "%f", el->aProb[i]);
+    fputc(',', f);
+    }
+if (sep == ',') fputc('}',f);
+fputc(sep,f);
+if (sep == ',') fputc('{',f);
+for (i=0; i<el->columnCount; ++i)
+    {
+    fprintf(f, "%f", el->cProb[i]);
+    fputc(',', f);
+    }
+if (sep == ',') fputc('}',f);
+fputc(sep,f);
+if (sep == ',') fputc('{',f);
+for (i=0; i<el->columnCount; ++i)
+    {
+    fprintf(f, "%f", el->gProb[i]);
+    fputc(',', f);
+    }
+if (sep == ',') fputc('}',f);
+fputc(sep,f);
+if (sep == ',') fputc('{',f);
+for (i=0; i<el->columnCount; ++i)
+    {
+    fprintf(f, "%f", el->tProb[i]);
+    fputc(',', f);
+    }
+if (sep == ',') fputc('}',f);
+fputc(lastSep,f);
+}
+
+float dnaMotifSequenceProb(struct dnaMotif *motif, DNA *dna)
+/* Return probability of dna according to motif.  Make sure
+ * motif is probabalistic (with call to dnaMotifMakeProbabalistic
+ * if you're not sure) before calling this. */
+{
+float p = 1.0;
+int i;
+for (i=0; i<motif->columnCount; ++i)
+    {
+    switch (dna[i])
+        {
+	case 'a':
+	case 'A':
+	    p *= motif->aProb[i];
+	    break;
+	case 'c':
+	case 'C':
+	    p *= motif->cProb[i];
+	    break;
+	case 'g':
+	case 'G':
+	    p *= motif->gProb[i];
+	    break;
+	case 't':
+	case 'T':
+	    p *= motif->tProb[i];
+	    break;
+	case 0:
+	    warn("dna shorter than motif");
+	    internalErr();
+	    break;
+	default:
+	    p *= 0.25;
+	    break;
+	}
+    }
+return p;
+}
+
+static float dnaMotifSequenceProbWithMark0(struct dnaMotif *motif, DNA *dna, double mark0[5])
+{
+float p = 1.0;
+int i;
+for (i=0; i<motif->columnCount; ++i)
+    {
+    int val = ntVal[(int) dna[i]] + 1;
+    p *= (mark0[val]/mark0[0]);
+    }
+return p;
+}
+
+static float dnaMotifSequenceProbLog(struct dnaMotif *motif, DNA *dna)
+{
+float p = 0;
+int i;
+for (i=0; i<motif->columnCount; ++i)
+    {
+    switch (dna[i])
+        {
+	case 'a':
+	case 'A':
+	    p += motif->aProb[i];
+	    break;
+	case 'c':
+	case 'C':
+	    p += motif->cProb[i];
+	    break;
+	case 'g':
+	case 'G':
+	    p += motif->gProb[i];
+	    break;
+	case 't':
+	case 'T':
+	    p += motif->tProb[i];
+	    break;
+	case 0:
+	    warn("dna shorter than motif");
+	    internalErr();
+	    break;
+	default:
+	    p += logBase2(0.25);
+	    break;
+	}
+    }
+return p;
+}
+
+char dnaMotifBestStrand(struct dnaMotif *motif, DNA *dna)
+/* Figure out which strand of DNA is better for probabalistic motif. */
+{
+float fScore, rScore;
+fScore = dnaMotifSequenceProb(motif, dna);
+reverseComplement(dna, motif->columnCount);
+rScore = dnaMotifSequenceProb(motif, dna);
+reverseComplement(dna, motif->columnCount);
+if (fScore >= rScore)
+    return '+';
+else
+    return '-';
+}
+
+double dnaMotifBitScore(struct dnaMotif *motif, DNA *dna)
+/* Return logBase2-odds score of dna given a probabalistic motif. */
+{
+double p = dnaMotifSequenceProb(motif, dna);
+double q = pow(0.25, motif->columnCount);
+double odds = p/q;
+return logBase2(odds);
+}
+
+double dnaMotifBitScoreWithMark0Bg(struct dnaMotif *motif, DNA *dna, double mark0[5])
+/* Return logBase2-odds score of dna given a probabalistic motif and using a 0-order markov model for the background. */
+{
+double p = dnaMotifSequenceProb(motif, dna);
+double q = dnaMotifSequenceProbWithMark0(motif, dna, mark0);
+double odds = p/q;
+return logBase2(odds);
+}
+
+double dnaMotifBitScoreWithMarkovBg(struct dnaMotif *motif, DNA *dna, double mark2[5][5][5])
+/* Return logBase2-odds score of dna given a probabalistic motif using a 2nd-order markov model for the background.
+   motif and markd2 must be in log2 format.
+   Seq must contain an extra two bases at the front (i.e. we start scoring from dna + 2). */
+{
+double p = dnaMotifSequenceProbLog(motif, dna + 2);
+double q = 0;
+int i, index;
+// XXXX assert somehow that length(dna) == motif->columnCount + 2?
+dnaUtilOpen();
+for(i = 0, index = 2; i < motif->columnCount; i++, index++)
+    {
+    double tmp = mark2[ntVal5[(int) dna[index - 2]] + 1][ntVal5[(int) dna[index - 1]] + 1][ntVal5[(int) dna[index]] + 1];
+#if 0
+    char buf[4];
+    safencpy(buf, sizeof(buf), dna + index - 2, 3);
+    fprintf(stderr, "%s: tmp: %.6f\n", buf, tmp);
+#endif
+    q += tmp;
+    }
+return p - q;
+}
+
+
+void dnaMotifMakeLog2(struct dnaMotif *motif)
+{
+int i;
+for (i = 0; i < motif->columnCount; i++)
+    {
+    motif->aProb[i] = logBase2(motif->aProb[i]);
+    motif->cProb[i] = logBase2(motif->cProb[i]);
+    motif->gProb[i] = logBase2(motif->gProb[i]);
+    motif->tProb[i] = logBase2(motif->tProb[i]);
+    }
+}
+
+void dnaMotifNormalize(struct dnaMotif *motif)
+/* Make all columns of motif sum to one. */
+{
+int i;
+for (i=0; i<motif->columnCount; ++i)
+    {
+    float sum = motif->aProb[i] + motif->cProb[i] + motif->gProb[i] + motif->tProb[i];
+    if (sum < 0)
+        errAbort("%s has negative numbers, perhaps it's score not probability based", 
+		motif->name);
+    if (sum == 0)
+         motif->aProb[i] = motif->cProb[i] = motif->gProb[i] = motif->tProb[i] = 0.25;
+    motif->aProb[i] /= sum;
+    motif->cProb[i] /= sum;
+    motif->gProb[i] /= sum;
+    motif->tProb[i] /= sum;
+    }
+}
+
+boolean dnaMotifIsScoreBased(struct dnaMotif *motif)
+/* Return TRUE if dnaMotif is score-based (which we decide by
+ * the presense of negative values. */
+{
+int i;
+for (i=0; i<motif->columnCount; ++i)
+    {
+    if (motif->aProb[i] < 0) return TRUE;
+    if (motif->cProb[i] < 0) return TRUE;
+    if (motif->gProb[i] < 0) return TRUE;
+    if (motif->tProb[i] < 0) return TRUE;
+    }
+return FALSE;
+}
+
+void dnaMotifScoreToProb(struct dnaMotif *motif)
+/* Convert motif that is log-odds score based to motif
+ * that is probability based.  This assumes that the
+ * background distribution is simple: 25% for each base */
+{
+int i;
+for (i=0; i<motif->columnCount; ++i)
+    {
+    motif->aProb[i] = exp(motif->aProb[i]);
+    motif->cProb[i] = exp(motif->cProb[i]);
+    motif->gProb[i] = exp(motif->gProb[i]);
+    motif->tProb[i] = exp(motif->tProb[i]);
+    }
+dnaMotifNormalize(motif);
+}
+
+void dnaMotifMakeProbabalistic(struct dnaMotif *motif)
+/* Change motif, which may be score or count based, to 
+ * probabalistic one, where each column adds to 1.0 */
+{
+if (dnaMotifIsScoreBased(motif))
+    dnaMotifScoreToProb(motif);
+else
+    dnaMotifNormalize(motif);
+}
+
+static void printProbRow(FILE *f, char *label, float *p, int pCount)
+/* Print one row of a probability profile. */
+{
+int i;
+fprintf(f, "%s ", label);
+for (i=0; i < pCount; ++i)
+    fprintf(f, "%5.2f ", p[i]);
+printf("\n");
+}
+
+void dnaMotifPrintProb(struct dnaMotif *motif, FILE *f)
+/* Print DNA motif probabilities. */
+{
+printProbRow(f, "A", motif->aProb, motif->columnCount);
+printProbRow(f, "C", motif->cProb, motif->columnCount);
+printProbRow(f, "G", motif->gProb, motif->columnCount);
+printProbRow(f, "T", motif->tProb, motif->columnCount);
+}
+
+
+static double u1(double prob)
+/* Calculate partial uncertainty for one base. */
+{
+if (prob == 0)
+    return 0;
+return prob * logBase2(prob);
+}
+
+static double uncertainty(struct dnaMotif *motif, int pos)
+/* Return the uncertainty at pos of motif.  This corresponds
+ * to the H function in logo.pm */
+{
+return -( u1(motif->aProb[pos]) + u1(motif->cProb[pos])
+	+ u1(motif->gProb[pos]) +u1(motif->tProb[pos]) );
+}
+
+double dnaMotifBitsOfInfo(struct dnaMotif *motif, int pos)
+/* Return bits of information at position. */
+{
+if (pos > motif->columnCount || pos < 0)
+    internalErr();
+return 2 - uncertainty(motif, pos);
+}
+
+struct letterProb
+/* A letter tied to a probability. */
+    {
+    struct letterProb *next;
+    double prob;	/* Probability for this letter. */
+    char letter;	/* The letter (upper case) */
+    };
+
+static struct letterProb *letterProbNew(char letter, double prob)
+/* Make a new letterProb. */
+{
+struct letterProb *lp;
+AllocVar(lp);
+lp->letter = letter;
+lp->prob = prob;
+return lp;
+}
+
+static int letterProbCmp(const void *va, const void *vb)
+/* Compare to sort highest probability first. */
+{
+const struct letterProb *a = *((struct letterProb **)va);
+const struct letterProb *b = *((struct letterProb **)vb);
+double dif = a->prob - b->prob;
+if (dif < 0)
+   return -1;
+else if (dif > 0)
+   return 1;
+else
+   return 0;
+}
+
+static void addBaseProb(struct letterProb **pList, char letter, double prob)
+/* If prob > 0 add letterProb to list. */
+{
+if (prob > 0)
+    {
+    struct letterProb *lp = letterProbNew(letter, prob);
+    slAddHead(pList, lp);
+    }
+}
+
+static struct letterProb *letterProbFromMotifColumn(struct dnaMotif *motif, int pos)
+/* Return letterProb list corresponding to column of motif. */
+{
+struct letterProb *lpList = NULL;
+addBaseProb(&lpList, 'A', motif->aProb[pos]);
+addBaseProb(&lpList, 'C', motif->cProb[pos]);
+addBaseProb(&lpList, 'G', motif->gProb[pos]);
+addBaseProb(&lpList, 'T', motif->tProb[pos]);
+slSort(&lpList, letterProbCmp);
+return lpList;
+}
+
+static void psOneColumn(struct dnaMotif *motif, int pos,
+    double xStart, double yStart, double width, double totalHeight,
+    FILE *f)
+/* Write one column of logo to postScript. */
+{
+struct letterProb *lp, *lpList = letterProbFromMotifColumn(motif, pos);
+double x = xStart, y = yStart, w = width, h;
+for (lp = lpList; lp != NULL; lp = lp->next)
+    {
+    h = totalHeight * lp->prob;
+    if (h >= 1.0)
+	{
+	fprintf(f, "%cColor ", tolower(lp->letter));
+	fprintf(f, "%3.2f ", x);
+	fprintf(f, "%3.2f ", y);
+	fprintf(f, "%3.2f ", x + w);
+	fprintf(f, "%3.2f ", y + h);
+	fprintf(f, "(%c) textInBox\n", lp->letter);
+	}
+    y += h;
+    }
+fprintf(f, "\n");
+slFreeList(&lpList);
+}
+
+static void dnaMotifDims(struct dnaMotif *motif, double widthPerBase, double height, 
+	int *retWidth, int *retHeight)
+/* Calculate dimensions of motif when rendered. */
+{
+static int widthFudgeFactor = 2, heightFudgeFactor = 2;
+*retWidth = ceil(widthPerBase * motif->columnCount) + widthFudgeFactor;
+*retHeight = ceil(height) + heightFudgeFactor;
+}
+
+void dnaMotifToLogoPs2(struct dnaMotif *motif, double widthPerBase, double height, 
+                       double minHeight, char *fileName)
+/* Write logo corresponding to motif to postScript file, with extended options. minHeight
+ * is the minimum height that is excluded from information content scaling.  This allows
+ * something to show up in columns with very little information content.  Setting this
+ * to be the same as height creates an frequency-based logo.
+ */
+{
+FILE *f = mustOpen(fileName, "w");
+int i;
+int xStart = 0;
+int w, h;
+char *s = 
+#include "dnaMotif.pss"
+;
+
+dnaMotifDims(motif, widthPerBase, height, &w, &h);
+fprintf(f, "%%!PS-Adobe-3.1 EPSF-3.0\n");
+fprintf(f, "%%%%BoundingBox: 0 0 %d %d\n\n", w, h);
+fprintf(f, "%s", s);
+
+fprintf(f, "%s", "% Start of code for this specific logo\n");
+
+for (i=0; i<motif->columnCount; ++i)
+    {
+    double infoScale = dnaMotifBitsOfInfo(motif, i)/2.0;
+    // only scale part beyond minHeight
+    double useHeight = minHeight + (infoScale * (height - minHeight));
+    if (useHeight > height)
+        useHeight = height;
+    psOneColumn(motif, i, xStart, 0, widthPerBase, useHeight, f);
+    xStart += widthPerBase;
+    }
+fprintf(f, "showpage\n");
+carefulClose(&f);
+}
+
+void dnaMotifToLogoPs(struct dnaMotif *motif, double widthPerBase, double height, char *fileName)
+/* Write logo corresponding to motif to postScript file. */
+{
+dnaMotifToLogoPs2(motif, widthPerBase, height, 0.0, fileName);
+}
+
+void dnaMotifToLogoPng(
+	struct dnaMotif *motif,	/* Motif to draw. */
+	double widthPerBase, 	/* Width of each base. */
+	double height, 		/* Max height. */
+	char *gsExe, 		/* ghostscript executable, NULL for default */
+	char *tempDir,          /* temp dir , NULL for default */
+	char *fileName)		/* output png file name. */
+/* Write logo corresponding to motif to png file. */
+{
+char *psName = rTempName(tempDir, "dnaMotif", ".ps");
+struct dyString *dy = dyStringNew(0);
+int w, h;
+int sysRet;
+
+if (gsExe == NULL) gsExe = "gs";
+if (tempDir == NULL) tempDir = "/tmp";
+dnaMotifToLogoPs(motif, widthPerBase, height, psName);
+dnaMotifDims(motif, widthPerBase, height, &w, &h);
+dyStringAppend(dy, gsExe);
+dyStringAppend(dy, " -sDEVICE=png16m -sOutputFile=");
+dyStringAppend(dy, fileName);
+dyStringAppend(dy, " -dBATCH -dNOPAUSE -q ");
+dyStringPrintf(dy, "-g%dx%d ", w, h);
+dyStringAppend(dy, psName);
+sysRet = system(dy->string);
+if (sysRet != 0)
+    errAbort("System call returned %d for:\n  %s", sysRet, dy->string);
+
+/* Clean up. */
+dyStringFree(&dy);
+
+/* change permisssions so the webserver can access the file */
+dy = newDyString(0);
+dyStringPrintf(dy, "chmod 666 %s ", fileName);
+sysRet = system(dy->string);
+
+remove(psName);
+}
+
+void dnaMotifToLogoPsW(struct dnaMotif *motif, double widthPerBase, double width, double height, char *fileName)
+/* Write logo corresponding to motif to postScript file. */
+{
+FILE *f = mustOpen(fileName, "w");
+int i;
+int xStart = 0;
+int w, h;
+char *s = 
+#include "dnaMotif.pss"
+;
+
+dnaMotifDims(motif, widthPerBase, height, &w, &h);
+fprintf(f, "%%!PS-Adobe-3.1 EPSF-3.0\n");
+fprintf(f, "%%%%BoundingBox: 0 0 %d %d\n\n", w, h);
+fprintf(f, "%s", s);
+
+fprintf(f, "%s", "% Start of code for this specific logo\n");
+
+for (i=0; i<motif->columnCount; ++i)
+    {
+    double infoScale = 0.9 ; 
+    xStart = i * width / motif->columnCount;
+    psOneColumn(motif, i, xStart, 0, widthPerBase, infoScale * height, f);
+    }
+fprintf(f, "showpage\n");
+carefulClose(&f);
+}
+
+void dnaMotifToLogoPGM(
+	struct dnaMotif *motif,	/* Motif to draw. */
+	double widthPerBase, 	/* Width of each base. */
+	double width, 		/* Max width. */
+	double height, 		/* Max height. */
+	char *gsExe, 		/* ghostscript executable, NULL for default */
+	char *tempDir,          /* temp dir , NULL for default */
+	char *fileName)		/* output png file name. */
+/* Write logo corresponding to motif to pgm file. */
+{
+char *psName = rTempName(tempDir, "dnaMotif", ".ps");
+struct dyString *dy = dyStringNew(0);
+int w, h;
+int sysRet;
+
+if (gsExe == NULL) gsExe = "gs";
+if (tempDir == NULL) tempDir = "/tmp";
+dnaMotifToLogoPsW(motif, widthPerBase, width, height, psName);
+dnaMotifDims(motif, widthPerBase, height, &w, &h);
+dyStringAppend(dy, gsExe);
+dyStringAppend(dy, " -sDEVICE=pgmraw -sOutputFile=");
+dyStringAppend(dy, fileName);
+dyStringAppend(dy, " -dBATCH -dNOPAUSE -q ");
+dyStringPrintf(dy, "-g%dx%d ", (int) ceil(width), h);
+dyStringAppend(dy, psName);
+sysRet = system(dy->string);
+if (sysRet != 0)
+    errAbort("System call returned %d for:\n  %s", sysRet, dy->string);
+
+/* Clean up. */
+dyStringFree(&dy);
+
+/* change permisssions so the webserver can access the file */
+dy = newDyString(0);
+dyStringPrintf(dy, "chmod 666 %s ", fileName);
+sysRet = system(dy->string);
+
+remove(psName);
+}
diff --git a/gbtools/src/blatSrc/lib/dnaMotif.pss b/gbtools/src/blatSrc/lib/dnaMotif.pss
new file mode 100644
index 0000000..b2b5fb6
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/dnaMotif.pss
@@ -0,0 +1,61 @@
+"/logoFont {\n"
+"/Helvetica findfont\n"
+"10 scalefont\n"
+"setfont\n"
+"} def\n"
+"\n"
+"\n"
+"/textBounds {\n"
+"% Figure out bounding box of string in current font.  Usage:\n"
+"% call: text letterSize \n"
+"% sets: tbX1 tbY1 tbX2 tbY2 tbW tbH\n"
+"% The bounds are relative to the current position\n"
+"gsave\n"
+"newpath\n"
+"0 0 moveto\n"
+"true charpath\n"
+"flattenpath\n"
+"pathbbox\n"
+"grestore\n"
+"/tbY2 exch def\n"
+"/tbX2 exch def\n"
+"/tbY1 exch def\n"
+"/tbX1 exch def\n"
+"/tbW tbX2 tbX1 sub def\n"
+"/tbH tbY2 tbY1 sub def\n"
+"} def\n"
+"\n"
+"/textInBox {\n"
+"% Draw text so that it fits inside of box.  Usage:\n"
+"%   x1 y1 x2 y2 text textInBox\n"
+"\n"
+"% Copy parameters from variables to stack and save context\n"
+"/tibText exch def\n"
+"/tibY2 exch def\n"
+"/tibX2 exch def\n"
+"/tibY1 exch def\n"
+"/tibX1 exch def\n"
+"gsave\n"
+"\n"
+"% move to x1/y1 adjusted for text offset\n"
+"tibText textBounds\n"
+"tibX1 tbX1 sub tibY1 tbY1 sub moveto\n"
+"\n"
+"% Set scaling\n"
+"/tibW tibX2 tibX1 sub def\n"
+"/tibH tibY2 tibY1 sub def\n"
+"tibW tbW div tibH tbH div scale\n"
+"\n"
+"% draw and return\n"
+"tibText show\n"
+"grestore\n"
+"} def\n"
+"\n"
+"/aColor { 0 0.7 0 setrgbcolor } def\n"
+"/cColor { 0 0.5 0.7 setrgbcolor } def\n"
+"/gColor { 0.8 0.5 0 setrgbcolor } def\n"
+"/tColor { 0.9 0 0 setrgbcolor } def\n"
+"\n"
+"logoFont\n"
+"\n"
+"\n"
diff --git a/gbtools/src/blatSrc/lib/dnaseq.c b/gbtools/src/blatSrc/lib/dnaseq.c
new file mode 100644
index 0000000..11a007c
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/dnaseq.c
@@ -0,0 +1,181 @@
+/* dnaSeq.c - stuff to manage DNA sequences. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "dnaseq.h"
+#include "bits.h"
+#include "hash.h"
+#include "obscure.h"
+
+
+
+struct dnaSeq *newDnaSeq(DNA *dna, int size, char *name)
+/* Create a new DNA seq. */
+{
+struct dnaSeq *seq;
+
+seq = needMem(sizeof(*seq));
+if (name != NULL)
+    seq->name = cloneString(name);
+seq->dna = dna;
+seq->size = size;
+seq->mask = NULL;
+return seq;
+}
+
+struct dnaSeq *cloneDnaSeq(struct dnaSeq *orig)
+/* Duplicate dna sequence in RAM. */
+{
+struct dnaSeq *seq = CloneVar(orig);
+seq->name = cloneString(seq->name);
+seq->dna = needHugeMem(seq->size+1);
+memcpy(seq->dna, orig->dna, seq->size+1);
+seq->mask = NULL;
+if (orig->mask != NULL)
+    {
+    seq->mask = bitClone(orig->mask, seq->size);
+    }
+return seq;
+}
+
+void freeDnaSeq(struct dnaSeq **pSeq)
+/* Free up DNA seq. (And unlink underlying resource node.) */
+{
+struct dnaSeq *seq = *pSeq;
+if (seq == NULL)
+    return;
+freeMem(seq->name);
+freeMem(seq->dna);
+bitFree(&seq->mask);
+freez(pSeq);
+}
+
+void freeDnaSeqList(struct dnaSeq **pSeqList)
+/* Free up list of DNA sequences. */
+{
+struct dnaSeq *seq, *next;
+
+for (seq = *pSeqList; seq != NULL; seq = next)
+    {
+    next = seq->next;
+    freeDnaSeq(&seq);
+    }
+*pSeqList = NULL;
+}
+
+boolean seqIsLower(bioSeq *seq)
+/* Return TRUE if sequence is all lower case. */
+{
+int size = seq->size, i;
+char *poly = seq->dna;
+for (i=0; i<size; ++i)
+    if (!islower(poly[i]))
+        return FALSE;
+return TRUE;
+}
+
+boolean seqIsDna(bioSeq *seq)
+/* Make educated guess whether sequence is DNA or protein. */
+{
+return isDna(seq->dna, seq->size);
+}
+
+
+aaSeq *translateSeqN(struct dnaSeq *inSeq, unsigned offset, unsigned inSize, boolean stop)
+/* Return a translated sequence.  Offset is position of first base to
+ * translate. If size is 0 then use length of inSeq. */
+{
+aaSeq *seq;
+DNA *dna = inSeq->dna;
+AA *pep, aa;
+int i, lastCodon;
+int actualSize = 0;
+
+assert(offset <= inSeq->size);
+if ((inSize == 0) || (inSize > (inSeq->size - offset)))
+    inSize = inSeq->size - offset;
+lastCodon = offset + inSize - 3;
+
+AllocVar(seq);
+seq->dna = pep = needLargeMem(inSize/3+1);
+for (i=offset; i <= lastCodon; i += 3)
+    {
+    aa = lookupCodon(dna+i);
+    if (aa == 0)
+	{
+        if (stop)
+	    break;
+	else
+	    aa = 'Z';
+	}
+    *pep++ = aa;
+    ++actualSize;
+    }
+*pep = 0;
+assert(actualSize <= inSize/3+1);
+seq->size = actualSize;
+seq->name = cloneString(inSeq->name);
+return seq;
+}
+
+aaSeq *translateSeq(struct dnaSeq *inSeq, unsigned offset, boolean stop)
+/* Return a translated sequence.  Offset is position of first base to
+ * translate. If stop is TRUE then stop at first stop codon.  (Otherwise 
+ * represent stop codons as 'Z'). */
+{
+return translateSeqN(inSeq, offset, 0, stop);
+}
+
+bioSeq *whichSeqIn(bioSeq **seqs, int seqCount, char *letters)
+/* Figure out which if any sequence letters is in. */
+{
+aaSeq *seq;
+int i;
+
+for (i=0; i<seqCount; ++i)
+    {
+    seq = seqs[i];
+    if (seq->dna <= letters && letters < seq->dna + seq->size)
+        return seq;
+    }
+internalErr();
+return NULL;
+}
+
+Bits *maskFromUpperCaseSeq(bioSeq *seq)
+/* Allocate a mask for sequence and fill it in based on
+ * sequence case. */
+{
+int size = seq->size, i;
+char *poly = seq->dna;
+Bits *b = bitAlloc(size);
+for (i=0; i<size; ++i)
+    {
+    if (isupper(poly[i]))
+        bitSetOne(b, i);
+    }
+return b;
+}
+
+struct hash *dnaSeqHash(struct dnaSeq *seqList)
+/* Return hash of sequences keyed by name. */
+{
+int size = slCount(seqList)+1;
+int sizeLog2 = digitsBaseTwo(size);
+struct hash *hash = hashNew(sizeLog2);
+struct dnaSeq *seq;
+for (seq = seqList; seq != NULL; seq = seq->next)
+    hashAddUnique(hash, seq->name, seq);
+return hash;
+}
+
+int dnaSeqCmpName(const void *va, const void *vb)
+/* Compare to sort based on sequence name. */
+{
+const struct dnaSeq *a = *((struct dnaSeq **)va);
+const struct dnaSeq *b = *((struct dnaSeq **)vb);
+return strcmp(a->name, b->name);
+}
+
diff --git a/gbtools/src/blatSrc/lib/dnautil.c b/gbtools/src/blatSrc/lib/dnautil.c
new file mode 100644
index 0000000..6b08ccd
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/dnautil.c
@@ -0,0 +1,1186 @@
+/* Some stuff that you'll likely need in any program that works with
+ * DNA.  Includes stuff for amino acids as well. 
+ *
+ * Assumes that DNA is stored as a character.
+ * The DNA it generates will include the bases 
+ * as lowercase tcag.  It will generally accept
+ * uppercase as well, and also 'n' or 'N' or '-'
+ * for unknown bases. 
+ *
+ * Amino acids are stored as single character upper case. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "dnautil.h"
+
+
+struct codonTable
+/* The dread codon table. */
+    {
+    DNA *codon;		/* Lower case. */
+    AA protCode;	/* Upper case. The "Standard" code */
+    AA mitoCode;	/* Upper case. Vertebrate Mitochondrial translations */
+    AA uniqCode;	/* unique code for each codon */
+    };
+
+struct codonTable codonTable[] = 
+/* The master codon/protein table. */
+{
+    {"ttt", 'F', 'F', 'a'},
+    {"ttc", 'F', 'F', 'b'},
+    {"tta", 'L', 'L', 'c'},
+    {"ttg", 'L', 'L', 'd'},
+
+    {"tct", 'S', 'S', 'e'},
+    {"tcc", 'S', 'S', 'f'},
+    {"tca", 'S', 'S', 'g'},
+    {"tcg", 'S', 'S', 'h'},
+
+    {"tat", 'Y', 'Y', 'i'},
+    {"tac", 'Y', 'Y', 'j'},
+    {"taa", 0, 0, 'k'},
+    {"tag", 0, 0, 'l'},
+
+    {"tgt", 'C', 'C', 'm'},
+    {"tgc", 'C', 'C', 'n'},
+    {"tga", 0, 'W', 'o'},
+    {"tgg", 'W', 'W', 'p'},
+
+
+    {"ctt", 'L', 'L', 'q'},
+    {"ctc", 'L', 'L', 'r'},
+    {"cta", 'L', 'L', 's'},
+    {"ctg", 'L', 'L', 't'},
+
+    {"cct", 'P', 'P', 'u'},
+    {"ccc", 'P', 'P', 'v'},
+    {"cca", 'P', 'P', 'w'},
+    {"ccg", 'P', 'P', 'x'},
+
+    {"cat", 'H', 'H', 'y'},
+    {"cac", 'H', 'H', 'z'},
+    {"caa", 'Q', 'Q', 'A'},
+    {"cag", 'Q', 'Q', 'B'},
+
+    {"cgt", 'R', 'R', 'C'},
+    {"cgc", 'R', 'R', 'D'},
+    {"cga", 'R', 'R', 'E'},
+    {"cgg", 'R', 'R', 'F'},
+
+
+    {"att", 'I', 'I', 'G'},
+    {"atc", 'I', 'I', 'H'},
+    {"ata", 'I', 'M', 'I'},
+    {"atg", 'M', 'M', 'J'},
+
+    {"act", 'T', 'T', 'K'},
+    {"acc", 'T', 'T', 'L'},
+    {"aca", 'T', 'T', 'M'},
+    {"acg", 'T', 'T', 'N'},
+
+    {"aat", 'N', 'N', 'O'},
+    {"aac", 'N', 'N', 'P'},
+    {"aaa", 'K', 'K', 'Q'},
+    {"aag", 'K', 'K', 'R'},
+
+    {"agt", 'S', 'S', 'S'},
+    {"agc", 'S', 'S', 'T'},
+    {"aga", 'R', 0, 'U'},
+    {"agg", 'R', 0, 'V'},
+
+
+    {"gtt", 'V', 'V', 'W'},
+    {"gtc", 'V', 'V', 'X'},
+    {"gta", 'V', 'V', 'Y'},
+    {"gtg", 'V', 'V', 'Z'},
+
+    {"gct", 'A', 'A', '1'},
+    {"gcc", 'A', 'A', '2'},
+    {"gca", 'A', 'A', '3'},
+    {"gcg", 'A', 'A', '4'},
+
+    {"gat", 'D', 'D', '5'},
+    {"gac", 'D', 'D', '6'},
+    {"gaa", 'E', 'E', '7'},
+    {"gag", 'E', 'E', '8'},
+
+    {"ggt", 'G', 'G', '9'},
+    {"ggc", 'G', 'G', '0'},
+    {"gga", 'G', 'G', '@'},
+    {"ggg", 'G', 'G', '$'},
+};
+
+/* A table that gives values 0 for t
+			     1 for c
+			     2 for a
+			     3 for g
+ * (which is order aa's are in biochemistry codon tables)
+ * and gives -1 for all others. */
+int ntVal[256];
+int ntValLower[256];	/* NT values only for lower case. */
+int ntValUpper[256];	/* NT values only for upper case. */
+int ntVal5[256];
+int ntValNoN[256]; /* Like ntVal, but with T_BASE_VAL in place of -1 for nonexistent ones. */
+DNA valToNt[(N_BASE_VAL|MASKED_BASE_BIT)+1];
+
+/* convert tables for bit-4 indicating masked */
+int ntValMasked[256];
+DNA valToNtMasked[256];
+
+static boolean inittedNtVal = FALSE;
+
+static void initNtVal()
+{
+if (!inittedNtVal)
+    {
+    int i;
+    for (i=0; i<ArraySize(ntVal); i++)
+        {
+	ntValUpper[i] = ntValLower[i] = ntVal[i] = -1;
+        ntValNoN[i] = T_BASE_VAL;
+	if (isspace(i) || isdigit(i))
+	    ntVal5[i] = ntValMasked[i] = -1;
+	else
+            {
+	    ntVal5[i] = N_BASE_VAL;
+	    ntValMasked[i] = (islower(i) ? (N_BASE_VAL|MASKED_BASE_BIT) : N_BASE_VAL);
+            }
+        }
+    ntVal5['t'] = ntVal5['T'] = ntValNoN['t'] = ntValNoN['T'] = ntVal['t'] = ntVal['T'] = 
+    	ntValLower['t'] = ntValUpper['T'] = T_BASE_VAL;
+    ntVal5['u'] = ntVal5['U'] = ntValNoN['u'] = ntValNoN['U'] = ntVal['u'] = ntVal['U'] = 
+    	ntValLower['u'] = ntValUpper['U'] = U_BASE_VAL;
+    ntVal5['c'] = ntVal5['C'] = ntValNoN['c'] = ntValNoN['C'] = ntVal['c'] = ntVal['C'] = 
+    	ntValLower['c'] = ntValUpper['C'] = C_BASE_VAL;
+    ntVal5['a'] = ntVal5['A'] = ntValNoN['a'] = ntValNoN['A'] = ntVal['a'] = ntVal['A'] = 
+    	ntValLower['a'] = ntValUpper['A'] = A_BASE_VAL;
+    ntVal5['g'] = ntVal5['G'] = ntValNoN['g'] = ntValNoN['G'] = ntVal['g'] = ntVal['G'] = 
+    	ntValLower['g'] = ntValUpper['G'] = G_BASE_VAL;
+
+    valToNt[T_BASE_VAL] = valToNt[T_BASE_VAL|MASKED_BASE_BIT] = 't';
+    valToNt[C_BASE_VAL] = valToNt[C_BASE_VAL|MASKED_BASE_BIT] = 'c';
+    valToNt[A_BASE_VAL] = valToNt[A_BASE_VAL|MASKED_BASE_BIT] = 'a';
+    valToNt[G_BASE_VAL] = valToNt[G_BASE_VAL|MASKED_BASE_BIT] = 'g';
+    valToNt[N_BASE_VAL] = valToNt[N_BASE_VAL|MASKED_BASE_BIT] = 'n';
+
+    /* masked values */
+    ntValMasked['T'] = T_BASE_VAL;
+    ntValMasked['U'] = U_BASE_VAL;
+    ntValMasked['C'] = C_BASE_VAL;
+    ntValMasked['A'] = A_BASE_VAL;
+    ntValMasked['G'] = G_BASE_VAL;
+
+    ntValMasked['t'] = T_BASE_VAL|MASKED_BASE_BIT;
+    ntValMasked['u'] = U_BASE_VAL|MASKED_BASE_BIT;
+    ntValMasked['c'] = C_BASE_VAL|MASKED_BASE_BIT;
+    ntValMasked['a'] = A_BASE_VAL|MASKED_BASE_BIT;
+    ntValMasked['g'] = G_BASE_VAL|MASKED_BASE_BIT;
+
+    valToNtMasked[T_BASE_VAL] = 'T';
+    valToNtMasked[C_BASE_VAL] = 'C';
+    valToNtMasked[A_BASE_VAL] = 'A';
+    valToNtMasked[G_BASE_VAL] = 'G';
+    valToNtMasked[N_BASE_VAL] = 'N';
+
+    valToNtMasked[T_BASE_VAL|MASKED_BASE_BIT] = 't';
+    valToNtMasked[C_BASE_VAL|MASKED_BASE_BIT] = 'c';
+    valToNtMasked[A_BASE_VAL|MASKED_BASE_BIT] = 'a';
+    valToNtMasked[G_BASE_VAL|MASKED_BASE_BIT] = 'g';
+    valToNtMasked[N_BASE_VAL|MASKED_BASE_BIT] = 'n';
+
+    inittedNtVal = TRUE;
+    }
+}
+
+/* Returns one letter code for protein, 
+ * 0 for stop codon or X for bad input,
+ * The "Standard" Code */
+AA lookupCodon(DNA *dna)
+{
+int ix;
+int i;
+char c;
+
+if (!inittedNtVal)
+    initNtVal();
+ix = 0;
+for (i=0; i<3; ++i)
+    {
+    int bv = ntVal[(int)dna[i]];
+    if (bv<0)
+	return 'X';
+    ix = (ix<<2) + bv;
+    }
+c = codonTable[ix].protCode;
+return c;
+}
+
+boolean isStopCodon(DNA *dna)
+/* Return TRUE if it's a stop codon. */
+{
+return lookupCodon(dna) == 0;
+}
+
+boolean isKozak(char *dna, int dnaSize, int pos)
+/* Return TRUE if it's a Kozak compatible start. */
+{
+if (lookupCodon(dna+pos) != 'M')
+   {
+   return FALSE;
+   }
+if (pos + 3 < dnaSize)
+    {
+    if (ntVal[(int)dna[pos+3]] == G_BASE_VAL)
+        return TRUE;
+    }
+if (pos >= 3)
+    {
+    int c = ntVal[(int)dna[pos-3]];
+    if (c == A_BASE_VAL || c == G_BASE_VAL)
+        return TRUE;
+    }
+return FALSE;
+}
+
+
+boolean isReallyStopCodon(char *dna, boolean selenocysteine)
+/* Return TRUE if it's really a stop codon, even considering
+ * possibilility of selenocysteine. */
+{
+if (selenocysteine)
+    {
+    /* Luckily the mitochondria *also* replaces TGA with 
+     * something else, even though it isn't selenocysteine */
+    return lookupMitoCodon(dna) == 0;
+    }
+else
+    {
+    return lookupCodon(dna) == 0;
+    }
+}
+
+
+/* Returns one letter code for protein, 
+ * 0 for stop codon or X for bad input,
+ * Vertebrate Mitochondrial Code */
+AA lookupMitoCodon(DNA *dna)
+{
+int ix;
+int i;
+char c;
+
+if (!inittedNtVal)
+    initNtVal();
+ix = 0;
+for (i=0; i<3; ++i)
+    {
+    int bv = ntVal[(int)dna[i]];
+    if (bv<0)
+	return 'X';
+    ix = (ix<<2) + bv;
+    }
+c = codonTable[ix].mitoCode;
+c = toupper(c);
+return c;
+}
+
+AA lookupUniqCodon(DNA *dna)
+{
+int ix;
+int i;
+char c;
+
+if (!inittedNtVal)
+    initNtVal();
+ix = 0;
+for (i=0; i<3; ++i)
+    {
+    int bv = ntVal[(int)dna[i]];
+    if (bv<0)
+	return 'X';
+    ix = (ix<<2) + bv;
+    }
+c = codonTable[ix].uniqCode;
+c = toupper(c);
+return c;
+}
+
+Codon codonVal(DNA *start)
+/* Return value from 0-63 of codon starting at start. 
+ * Returns -1 if not a codon. */
+{
+int v1,v2,v3;
+
+if ((v1 = ntVal[(int)start[0]]) < 0)
+    return -1;
+if ((v2 = ntVal[(int)start[1]]) < 0)
+    return -1;
+if ((v3 = ntVal[(int)start[2]]) < 0)
+    return -1;
+return ((v1<<4) + (v2<<2) + v3);
+}
+
+DNA *valToCodon(int val)
+/* Return  codon corresponding to val (0-63) */
+{
+assert(val >= 0 && val < 64);
+return codonTable[val].codon;
+}
+
+void dnaTranslateSome(DNA *dna, char *out, int outSize)
+/* Translate DNA upto a stop codon or until outSize-1 amino acids, 
+ * whichever comes first. Output will be zero terminated. */
+{
+int i;
+int dnaSize;
+int protSize = 0;
+
+outSize -= 1;  /* Room for terminal zero */
+dnaSize = strlen(dna);
+for (i=0; i<dnaSize-2; i+=3)
+    {
+    if (protSize >= outSize)
+        break;
+    if ((out[protSize++] = lookupCodon(dna+i)) == 0)
+        break;
+    }
+out[protSize] = 0;
+}
+
+/* A little array to help us decide if a character is a 
+ * nucleotide, and if so convert it to lower case. */
+char ntChars[256];
+
+static void initNtChars()
+{
+static boolean initted = FALSE;
+
+if (!initted)
+    {
+    zeroBytes(ntChars, sizeof(ntChars));
+    ntChars['a'] = ntChars['A'] = 'a';
+    ntChars['c'] = ntChars['C'] = 'c';
+    ntChars['g'] = ntChars['G'] = 'g';
+    ntChars['t'] = ntChars['T'] = 't';
+    ntChars['n'] = ntChars['N'] = 'n';
+    ntChars['u'] = ntChars['U'] = 'u';
+    ntChars['-'] = 'n';
+    initted = TRUE;
+    }
+}
+
+char ntMixedCaseChars[256];
+
+static void initNtMixedCaseChars()
+{
+static boolean initted = FALSE;
+
+if (!initted)
+    {
+    zeroBytes(ntMixedCaseChars, sizeof(ntMixedCaseChars));
+    ntMixedCaseChars['a'] = 'a';
+    ntMixedCaseChars['A'] = 'A';
+    ntMixedCaseChars['c'] = 'c';
+    ntMixedCaseChars['C'] = 'C';
+    ntMixedCaseChars['g'] = 'g';
+    ntMixedCaseChars['G'] = 'G';
+    ntMixedCaseChars['t'] = 't';
+    ntMixedCaseChars['T'] = 'T';
+    ntMixedCaseChars['n'] = 'n';
+    ntMixedCaseChars['N'] = 'N';
+    ntMixedCaseChars['u'] = 'u';
+    ntMixedCaseChars['U'] = 'U';
+    ntMixedCaseChars['-'] = 'n';
+    initted = TRUE;
+    }
+}
+
+/* Another array to help us do complement of DNA */
+DNA ntCompTable[256];
+static boolean inittedCompTable = FALSE;
+
+static void initNtCompTable()
+{
+zeroBytes(ntCompTable, sizeof(ntCompTable));
+ntCompTable[' '] = ' ';
+ntCompTable['-'] = '-';
+ntCompTable['='] = '=';
+ntCompTable['a'] = 't';
+ntCompTable['c'] = 'g';
+ntCompTable['g'] = 'c';
+ntCompTable['t'] = 'a';
+ntCompTable['u'] = 'a';
+ntCompTable['n'] = 'n';
+ntCompTable['-'] = '-';
+ntCompTable['.'] = '.';
+ntCompTable['A'] = 'T';
+ntCompTable['C'] = 'G';
+ntCompTable['G'] = 'C';
+ntCompTable['T'] = 'A';
+ntCompTable['U'] = 'A';
+ntCompTable['N'] = 'N';
+ntCompTable['R'] = 'Y';
+ntCompTable['Y'] = 'R';
+ntCompTable['M'] = 'K';
+ntCompTable['K'] = 'M';
+ntCompTable['S'] = 'S';
+ntCompTable['W'] = 'W';
+ntCompTable['V'] = 'B';
+ntCompTable['H'] = 'D';
+ntCompTable['D'] = 'H';
+ntCompTable['B'] = 'V';
+ntCompTable['X'] = 'N';
+ntCompTable['r'] = 'y';
+ntCompTable['y'] = 'r';
+ntCompTable['s'] = 's';
+ntCompTable['w'] = 'w';
+ntCompTable['m'] = 'k';
+ntCompTable['k'] = 'm';
+ntCompTable['v'] = 'b';
+ntCompTable['h'] = 'd';
+ntCompTable['d'] = 'h';
+ntCompTable['b'] = 'v';
+ntCompTable['x'] = 'n';
+ntCompTable['('] = ')';
+ntCompTable[')'] = '(';
+inittedCompTable = TRUE;
+}
+
+/* Complement DNA (not reverse). */
+void complement(DNA *dna, long length)
+{
+int i;
+
+if (!inittedCompTable) initNtCompTable();
+for (i=0; i<length; ++i)
+    {
+    *dna = ntCompTable[(int)*dna];
+    ++dna;
+    }
+}
+
+
+/* Reverse complement DNA. */
+void reverseComplement(DNA *dna, long length)
+{
+reverseBytes(dna, length);
+complement(dna, length);
+}
+
+/* Reverse offset - return what will be offset (0 based) to
+ * same member of array after array is reversed. */
+long reverseOffset(long offset, long arraySize)
+{
+return arraySize-1 - offset;
+}
+
+/* Switch start/end (zero based half open) coordinates
+ * to opposite strand. */
+void reverseIntRange(int *pStart, int *pEnd, int size)
+{
+int temp;
+temp = *pStart;
+*pStart = size - *pEnd;
+*pEnd = size - temp;
+}
+
+/* Switch start/end (zero based half open) coordinates
+ * to opposite strand. */
+void reverseUnsignedRange(unsigned *pStart, unsigned *pEnd, int size)
+{
+unsigned temp;
+temp = *pStart;
+*pStart = size - *pEnd;
+*pEnd = size - temp;
+}
+
+char *reverseComplementSlashSeparated(char *alleleStr)
+/* Given a slash-separated series of sequences (a common representation of variant alleles),
+ * returns a slash-sep series with the reverse complement of each sequence (if it is a
+ * nucleotide sequence).
+ * Special behavior to support dbSNP's variant allele conventions:
+ * 1. Reverse the order of sequences (to maintain alphabetical ordering).
+ * 2. If alleleStr begins with "-/", then after reversing, move "-/" back to the beginning. */
+{
+int len = strlen(alleleStr);
+char choppyCopy[len+1];
+safecpy(choppyCopy, sizeof(choppyCopy), alleleStr);
+char *alleles[len];
+int alCount = chopByChar(choppyCopy, '/', alleles, ArraySize(alleles));
+char *outStr = needMem(len+1);
+int i;
+for (i = alCount-1;  i >= 0;  i--)
+    {
+    char *allele = alleles[i];
+    int alLen = strlen(allele);
+    if (isAllNt(allele, alLen))
+        reverseComplement(allele, alLen);
+    if (i != alCount-1)
+        safecat(outStr, len+1, "/");
+    safecat(outStr, len+1, allele);
+    }
+if (startsWith("-/", alleleStr))
+    {
+    // Keep "-/" at the beginning:
+    memmove(outStr+2, outStr, len-2);
+    outStr[0] = '-';
+    outStr[1] = '/';
+    }
+return outStr;
+}
+
+int cmpDnaStrings(DNA *a, DNA *b)
+/* Compare using screwy non-alphabetical DNA order TCGA */
+{
+for (;;)
+    {
+    DNA aa = *a++;
+    DNA bb = *b++;
+    if (aa != bb)
+        return ntVal[(int)aa] - ntVal[(int)bb];
+    if (aa == 0)
+	break;
+    }
+return 0;
+}
+
+
+/* Convert T's to U's */
+void toRna(DNA *dna)
+{
+DNA c;
+for (;;)
+    {
+    c = *dna;
+    if (c == 't')
+	*dna = 'u';
+    else if (c == 'T')
+	*dna = 'U';
+    else if (c == 0)
+	break;
+    ++dna;
+    }
+}
+
+char *skipIgnoringDash(char *a, int size, bool skipTrailingDash)
+/* Count size number of characters, and any 
+ * dash characters. */
+{
+while (size > 0)
+    {
+    if (*a++ != '-')
+        --size;
+    }
+if (skipTrailingDash)
+    while (*a == '-')
+       ++a;
+return a;
+}
+
+int countNonDash(char *a, int size)
+/* Count number of non-dash characters. */
+{
+int count = 0;
+int i;
+for (i=0; i<size; ++i)
+    if (a[i] != '-') 
+        ++count;
+return count;
+}
+
+int nextPowerOfFour(long x)
+/* Return next power of four that would be greater or equal to x.
+ * For instance if x < 4, return 1, if x < 16 return 2.... 
+ * (From biological point of view how many bases are needed to
+ * code this number.) */
+{
+int count = 1;
+while (x > 4)
+    {
+    count += 1;
+    x >>= 2;
+    }
+return count;
+}
+
+long dnaOrAaFilteredSize(char *raw, char filter[256])
+/* Return how long DNA will be after non-DNA is filtered out. */
+{
+char c;
+long count = 0;
+dnaUtilOpen();
+while ((c = *raw++) != 0)
+    {
+    if (filter[(int)c]) ++count;
+    }
+return count;
+}
+
+void dnaOrAaFilter(char *in, char *out, char filter[256])
+/* Run chars through filter. */
+{
+char c;
+dnaUtilOpen();
+while ((c = *in++) != 0)
+    {
+    if ((c = filter[(int)c]) != 0) *out++ = c;
+    }
+*out++ = 0;
+}
+
+long dnaFilteredSize(char *rawDna)
+/* Return how long DNA will be after non-DNA is filtered out. */
+{
+return dnaOrAaFilteredSize(rawDna, ntChars);
+}
+
+void dnaFilter(char *in, DNA *out)
+/* Filter out non-DNA characters and change to lower case. */
+{
+dnaOrAaFilter(in, out, ntChars);
+}
+
+void dnaFilterToN(char *in, DNA *out)
+/* Change all non-DNA characters to N. */
+{
+DNA c;
+initNtChars();
+while ((c = *in++) != 0)
+    {
+    if ((c = ntChars[(int)c]) != 0) *out++ = c;
+    else *out++ = 'n';
+    }
+*out++ = 0;
+}
+
+void dnaMixedCaseFilter(char *in, DNA *out)
+/* Filter out non-DNA characters but leave case intact. */
+{
+dnaOrAaFilter(in, out, ntMixedCaseChars);
+}
+
+long aaFilteredSize(char *raw)
+/* Return how long aa will be after non-aa chars is filtered out. */
+{
+return dnaOrAaFilteredSize(raw, aaChars);
+}
+
+void aaFilter(char *in, DNA *out)
+/* Filter out non-aa characters and change to upper case. */
+{
+dnaOrAaFilter(in, out, aaChars);
+}
+
+void upperToN(char *s, int size)
+/* Turn upper case letters to N's. */
+{
+char c;
+int i;
+for (i=0; i<size; ++i)
+    {
+    c = s[i];
+    if (isupper(c))
+        s[i] = 'n';
+    }
+}
+
+void lowerToN(char *s, int size)
+/* Turn lower case letters to N's. */
+{
+char c;
+int i;
+for (i=0; i<size; ++i)
+    {
+    c = s[i];
+    if (islower(c))
+        s[i] = 'N';
+    }
+}
+
+
+void dnaBaseHistogram(DNA *dna, int dnaSize, int histogram[4])
+/* Count up frequency of occurance of each base and store 
+ * results in histogram. */
+{
+int val;
+zeroBytes(histogram, 4*sizeof(int));
+while (--dnaSize >= 0)
+    {
+    if ((val = ntVal[(int)*dna++]) >= 0)
+        ++histogram[val];
+    }
+}
+
+bits64 basesToBits64(char *dna, int size)
+/* Convert dna of given size (up to 32) to binary representation */
+{
+if (size > 32)
+    errAbort("basesToBits64 called on %d bases, can only go up to 32", size);
+bits64 result = 0;
+int i;
+for (i=0; i<size; ++i)
+    {
+    result <<= 2;
+    result += ntValNoN[(int)dna[i]];
+    }
+return result;
+}
+
+bits32 packDna16(DNA *in)
+/* pack 16 bases into a word */
+{
+bits32 out = 0;
+int count = 16;
+int bVal;
+while (--count >= 0)
+    {
+    bVal = ntValNoN[(int)*in++];
+    out <<= 2;
+    out += bVal;
+    }
+return out;
+}
+
+bits16 packDna8(DNA *in)
+/* Pack 8 bases into a short word */
+{
+bits16 out = 0;
+int count = 8;
+int bVal;
+while (--count >= 0)
+    {
+    bVal = ntValNoN[(int)*in++];
+    out <<= 2;
+    out += bVal;
+    }
+return out;
+}
+
+UBYTE packDna4(DNA *in)
+/* Pack 4 bases into a UBYTE */
+{
+UBYTE out = 0;
+int count = 4;
+int bVal;
+while (--count >= 0)
+    {
+    bVal = ntValNoN[(int)*in++];
+    out <<= 2;
+    out += bVal;
+    }
+return out;
+}
+
+void unpackDna(bits32 *tiles, int tileCount, DNA *out)
+/* Unpack DNA. Expands to 16x tileCount in output. */
+{
+int i, j;
+bits32 tile;
+
+for (i=0; i<tileCount; ++i)
+    {
+    tile = tiles[i];
+    for (j=15; j>=0; --j)
+        {
+        out[j] = valToNt[tile & 0x3];
+        tile >>= 2;
+        }
+    out += 16;
+    }
+}
+
+void unpackDna4(UBYTE *tiles, int byteCount, DNA *out)
+/* Unpack DNA. Expands to 4x byteCount in output. */
+{
+int i, j;
+UBYTE tile;
+
+for (i=0; i<byteCount; ++i)
+    {
+    tile = tiles[i];
+    for (j=3; j>=0; --j)
+        {
+        out[j] = valToNt[tile & 0x3];
+        tile >>= 2;
+        }
+    out += 4;
+    }
+}
+
+
+
+
+static void checkSizeTypes()
+/* Make sure that some of our predefined types are the right size. */
+{
+assert(sizeof(UBYTE) == 1);
+assert(sizeof(WORD) == 2);
+assert(sizeof(bits32) == 4);
+assert(sizeof(bits16) == 2);
+}
+
+int intronOrientationMinSize(DNA *iStart, DNA *iEnd, int minIntronSize)
+/* Given a gap in genome from iStart to iEnd, return 
+ * Return 1 for GT/AG intron between left and right, -1 for CT/AC, 0 for no
+ * intron.  Assumes DNA is lower cased. */
+{
+if (iEnd - iStart < minIntronSize)
+    return 0;
+if (iStart[0] == 'g' && iStart[1] == 't' && iEnd[-2] == 'a' && iEnd[-1] == 'g')
+    {
+    return 1;
+    }
+else if (iStart[0] == 'c' && iStart[1] == 't' && iEnd[-2] == 'a' && iEnd[-1] == 'c')
+    {
+    return -1;
+    }
+else
+    return 0;
+}
+
+int intronOrientation(DNA *iStart, DNA *iEnd)
+/* Given a gap in genome from iStart to iEnd, return 
+ * Return 1 for GT/AG intron between left and right, -1 for CT/AC, 0 for no
+ * intron.  Assumes DNA is lower cased. */
+{
+return intronOrientationMinSize(iStart, iEnd, 32);
+}
+
+int dnaScore2(DNA a, DNA b)
+/* Score match between two bases (relatively crudely). */
+{
+if (a == 'n' || b == 'n') return 0;
+if (a == b) return 1;
+else return -1;
+}
+
+int  dnaOrAaScoreMatch(char *a, char *b, int size, int matchScore, int mismatchScore, 
+	char ignore)
+/* Compare two sequences (without inserts or deletions) and score. */
+{
+int i;
+int score = 0;
+for (i=0; i<size; ++i)
+    {
+    char aa = a[i];
+    char bb = b[i];
+    if (aa == ignore || bb == ignore)
+        continue;
+    if (aa == bb)
+        score += matchScore;
+    else
+        score += mismatchScore;
+    }
+return score;
+}
+
+int dnaScoreMatch(DNA *a, DNA *b, int size)
+/* Compare two pieces of DNA base by base. Total mismatches are
+ * subtracted from total matches and returned as score. 'N's 
+ * neither hurt nor help score. */
+{
+return dnaOrAaScoreMatch(a, b, size, 1, -1, 'n');
+}
+
+int aaScore2(AA a, AA b)
+/* Score match between two amino acids (relatively crudely). */
+{
+if (a == 'X' || b == 'X') return 0;
+if (a == b) return 2;
+else return -1;
+}
+
+int aaScoreMatch(AA *a, AA *b, int size)
+/* Compare two peptides aa by aa. */
+{
+return dnaOrAaScoreMatch(a, b, size, 2, -1, 'X');
+}
+
+void writeSeqWithBreaks(FILE *f, char *letters, int letterCount, int maxPerLine)
+/* Write out letters with newlines every maxLine. */
+{
+int lettersLeft = letterCount;
+int lineSize;
+while (lettersLeft > 0)
+    {
+    lineSize = lettersLeft;
+    if (lineSize > maxPerLine)
+        lineSize = maxPerLine;
+    mustWrite(f, letters, lineSize);
+    fputc('\n', f);
+    letters += lineSize;
+    lettersLeft -= lineSize;
+    }
+}
+
+static int findTailPolyAMaybeMask(DNA *dna, int size, boolean doMask,
+				  boolean loose)
+/* Identify PolyA at end; mask to 'n' if specified.  This allows a few 
+ * non-A's as noise to be trimmed too.  Returns number of bases trimmed.  
+ * Leaves first two bases of PolyA in case there's a taa stop codon. */
+{
+int i;
+int score = 10;
+int bestScore = 10;
+int bestPos = -1;
+int trimSize = 0;
+
+for (i=size-1; i>=0; --i)
+    {
+    DNA b = dna[i];
+    if (b == 'n' || b == 'N')
+        continue;
+    if (score > 20) score = 20;
+    if (b == 'a' || b == 'A')
+	{
+        score += 1;
+	if (score >= bestScore)
+	    {
+	    bestScore = score;
+	    bestPos = i;
+	    }
+	else if (loose && score >= (bestScore - 8))
+	    {
+	    /* If loose, keep extending even if score isn't back up to best. */
+	    bestPos = i;
+	    }
+	}
+    else
+	{
+        score -= 10;
+	}
+    if (score < 0)
+	{
+        break;
+	}
+    }
+if (bestPos >= 0)
+    {
+    trimSize = size - bestPos - 2;	// Leave two for aa in taa stop codon
+    if (trimSize > 0)
+        {
+	if (doMask)
+	    for (i=size - trimSize; i<size; ++i)
+		dna[i] = 'n';
+	}
+    else
+        trimSize = 0;
+    }
+return trimSize;
+}
+
+int tailPolyASizeLoose(DNA *dna, int size)
+/* Return size of PolyA at end (if present).  This allows a few non-A's as 
+ * noise to be trimmed too, but skips first two aa for taa stop codon.  
+ * It is less conservative in extending the polyA region than maskTailPolyA. */
+{
+return findTailPolyAMaybeMask(dna, size, FALSE, TRUE);
+}
+
+int maskTailPolyA(DNA *dna, int size)
+/* Convert PolyA at end to n.  This allows a few non-A's as noise to be 
+ * trimmed too.  Returns number of bases trimmed.  Leaves very last a. */
+{
+return findTailPolyAMaybeMask(dna, size, TRUE, FALSE);
+}
+
+static int findHeadPolyTMaybeMask(DNA *dna, int size, boolean doMask,
+				  boolean loose)
+/* Return size of PolyT at start (if present); mask to 'n' if specified.  
+ * This allows a few non-T's as noise to be trimmed too, but skips last
+ * two tt for revcomp'd taa stop codon. */
+{
+int i;
+int score = 10;
+int bestScore = 10;
+int bestPos = -1;
+int pastPoly = 0;
+int trimSize = 0;
+
+for (i=0; i<size; ++i)
+    {
+    DNA b = dna[i];
+    if (b == 'n' || b == 'N')
+        continue;
+    if (score > 20) score = 20;
+    if (b == 't' || b == 'T')
+	{
+        score += 1;
+	if (score >= bestScore)
+	    {
+	    bestScore = score;
+	    bestPos = i;
+	    }
+	else if (loose && score >= (bestScore - 8))
+	    {
+	    /* If loose, keep extending even if score isn't back up to best. */
+	    bestPos = i;
+	    }
+	}
+    else
+	{
+        score -= 10;
+	}
+    if (score < 0)
+	{
+	pastPoly = i;
+        break;
+	}
+    }
+if (bestPos >= 0)
+    {
+    trimSize = bestPos+1 - 2;	// Leave two for aa in taa stop codon
+    if (trimSize > 0)
+	{
+	if (doMask)
+	    memset(dna, 'n', trimSize);
+	}
+    else
+        trimSize = 0;
+    }
+return trimSize;
+}
+
+int headPolyTSizeLoose(DNA *dna, int size)
+/* Return size of PolyT at start (if present).  This allows a few non-T's as 
+ * noise to be trimmed too, but skips last two tt for revcomp'd taa stop 
+ * codon.  
+ * It is less conservative in extending the polyA region than maskHeadPolyT. */
+{
+return findHeadPolyTMaybeMask(dna, size, FALSE, TRUE);
+}
+
+int maskHeadPolyT(DNA *dna, int size)
+/* Convert PolyT at start.  This allows a few non-T's as noise to be 
+ * trimmed too.  Returns number of bases trimmed.  */
+{
+return findHeadPolyTMaybeMask(dna, size, TRUE, FALSE);
+}
+
+boolean isDna(char *poly, int size)
+/* Return TRUE if letters in poly are at least 90% ACGTNU- */
+{
+int i;
+int dnaCount = 0;
+
+dnaUtilOpen();
+for (i=0; i<size; ++i)
+    {
+    if (ntChars[(int)poly[i]])
+	dnaCount += 1;
+    }
+return (dnaCount >= round(0.9 * size));
+}
+
+boolean isAllNt(char *seq, int size)
+/* Return TRUE if all letters in seq are ACGTNU-. */
+{
+int i;
+dnaUtilOpen();
+for (i=0; i<size-1; ++i)
+    {
+    if (ntChars[(int)seq[i]] == 0)
+	return FALSE;
+    }
+return TRUE;
+}
+
+boolean isAllDna(char *poly, int size)
+/* Return TRUE if size is great than 1 and letters in poly are 100% ACGTNU- */
+{
+if (size <= 1)
+    return FALSE;
+return isAllNt(poly, size);
+}
+
+
+
+/* Tables to convert from 0-20 to ascii single letter representation
+ * of proteins. */
+int aaVal[256];
+AA valToAa[21];
+
+AA aaChars[256];	/* 0 except for value aa characters.  Converts to upper case rest. */
+
+struct aminoAcidTable
+/* A little info about each amino acid. */
+    {
+    int ix;
+    char letter;
+    char abbreviation[3];
+    char *name;
+    };
+
+struct aminoAcidTable aminoAcidTable[] = 
+{
+    {0, 'A', "ala", "alanine"},
+    {1, 'C', "cys", "cysteine"},
+    {2, 'D', "asp",  "aspartic acid"},
+    {3, 'E', "glu",  "glutamic acid"},
+    {4, 'F', "phe",  "phenylalanine"},
+    {5, 'G', "gly",  "glycine"},
+    {6, 'H', "his",  "histidine"},
+    {7, 'I', "ile",  "isoleucine"},
+    {8, 'K', "lys",  "lysine"},
+    {9, 'L', "leu",  "leucine"},
+    {10, 'M',  "met", "methionine"},
+    {11, 'N',  "asn", "asparagine"},
+    {12, 'P',  "pro", "proline"},
+    {13, 'Q',  "gln", "glutamine"},
+    {14, 'R',  "arg", "arginine"},
+    {15, 'S',  "ser", "serine"},
+    {16, 'T',  "thr", "threonine"},
+    {17, 'V',  "val", "valine"},
+    {18, 'W',  "trp", "tryptophan"},
+    {19, 'Y',  "tyr", "tyrosine"},
+    {20, 'X',  "ter", "termination"},
+};
+
+char *aaAbbr(int i)
+/* return pointer to AA abbrevation */
+{
+return(aminoAcidTable[i].abbreviation);
+}
+
+char aaLetter(int i)
+/* return AA letter */
+{
+return(aminoAcidTable[i].letter);
+}
+
+static void initAaVal()
+/* Initialize aaVal and valToAa tables. */
+{
+int i;
+char c, lowc;
+
+for (i=0; i<ArraySize(aaVal); ++i)
+    aaVal[i] = -1;
+for (i=0; i<ArraySize(aminoAcidTable); ++i)
+    {
+    c = aminoAcidTable[i].letter;
+    lowc = tolower(c);
+    aaVal[(int)c] = aaVal[(int)lowc] = i;
+    aaChars[(int)c] = aaChars[(int)lowc] = c;
+    valToAa[i] = c;
+    }
+aaChars['x'] = aaChars['X'] = 'X';
+}
+
+void dnaUtilOpen()
+/* Initialize stuff herein. */
+{
+static boolean opened = FALSE;
+if (!opened)
+    {
+    checkSizeTypes();
+    initNtVal();
+    initAaVal();
+    initNtChars();
+    initNtMixedCaseChars();
+    initNtCompTable();
+    opened = TRUE;
+    }
+}
diff --git a/gbtools/src/blatSrc/lib/dtdParse.c b/gbtools/src/blatSrc/lib/dtdParse.c
new file mode 100644
index 0000000..f3745ef
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/dtdParse.c
@@ -0,0 +1,469 @@
+/* dtdParse - parse an XML DTD file.  Actually this only
+ * parses a relatively simple subset of DTD's.  It's still
+ * useful for autoXml and xmlToSql. */
+
+/* Copyright (C) 2012 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "hash.h"
+#include "linefile.h"
+#include "dystring.h"
+#include "obscure.h"
+#include "dtdParse.h"
+
+
+static void syntaxError(struct lineFile *lf)
+/* Report syntax error and exit. */
+{
+errAbort("Syntax error line %d of %s", lf->lineIx, lf->fileName);
+}
+
+static char *needNextWord(char **pLine, struct lineFile *lf)
+/* Get next word in line.  Squawk and die if can't find it. */
+{
+char *word = nextWord(pLine);
+if (word == NULL)
+    errAbort("Missing data line %d of %s", lf->lineIx, lf->fileName);
+return word;
+}
+
+void needQuotedString( char *in, char *out, struct lineFile *lf, char **retNext)
+/* Grab quoted string starting at in and put it into out.  Advance retNext
+ * to just past quoted string.  In and out may point to same buffer. */
+{
+if (!parseQuotedString(in, out, retNext))
+    errAbort("Missing closing quote line %d of %s", lf->lineIx, lf->fileName);
+}
+
+static boolean isAllUpper(char *s)
+/* Return true if all alphabetical letters in string
+ * are upper case. */
+{
+char c;
+while ((c = *s++) != 0)
+    {
+    if (isalpha(c) && !isupper(c))
+        return FALSE;
+    }
+return TRUE;
+}
+
+static boolean isAllLower(char *s)
+/* Return true if all alphabetical letters in string
+ * are upper case. */
+{
+char c;
+while ((c = *s++) != 0)
+    {
+    if (isalpha(c) && !islower(c))
+        return FALSE;
+    }
+return TRUE;
+}
+
+
+static char *mixedCaseName(char *prefix, char *orig)
+/* Convert var_like_this or VAR_LIKE_THIS or even
+ * var-like-this or var:likeThis to varLikeThis. */
+{
+char *mixed;
+char *d, *s = orig;
+char c;
+int prefixLen = strlen(prefix), len;
+boolean nextUpper;
+boolean allUpper = isAllUpper(orig); 
+boolean allLower = isAllLower(orig);
+boolean initiallyMixed = (!allUpper && !allLower);
+
+/* Allocate string big enough for prefix and all. */
+len = strlen(orig) + prefixLen;
+mixed = d = needMem(len+1);
+strcpy(d, prefix);
+d += prefixLen;
+nextUpper = (prefixLen > 0);
+
+for (;;)
+   {
+   c = *s++;
+   if (c == '_' || c == '-' || c == ':')
+       nextUpper = TRUE;
+   else
+       {
+       if (nextUpper)
+           c = toupper(c);
+       else if (!initiallyMixed)
+           c = tolower(c);
+       nextUpper = FALSE;
+       *d++ = c;
+       if (c == 0)
+	   break;
+       }
+   }
+return mixed;
+}
+
+static struct hash *initialEntityHash()
+/* Make an initial entity hash - one that is just made up
+ * of our built-ins. */
+{
+struct hash *hash = hashNew(0);
+hashAdd(hash, "INTEGER", cloneString("#INT"));
+hashAdd(hash, "REAL", cloneString("#FLOAT"));
+hashAdd(hash, "INT", cloneString("INT"));
+hashAdd(hash, "FLOAT", cloneString("FLOAT"));
+return hash;
+}
+
+static struct dtdElement *parseElement(
+	char *prefix, char *textField, char *line, 
+	struct hash *elHash, struct lineFile *lf)
+/* Parse out <!ELEMENT line after <!ELEMENT. */
+{
+char *word, *s, *e;
+char *words[256];
+int wordCount, i;
+struct dtdElChild *ec;
+struct dtdElement *el;
+boolean isOr;
+char orCopyCode = '?';
+
+word = needNextWord(&line, lf);
+s = word + strlen(word)-1;
+if (s[0] == '>')
+   *s = 0;
+if ((el = hashFindVal(elHash, word)) != NULL)
+    errAbort("Duplicate element %s line %d and %d of %s", word, el->lineIx, lf->lineIx, lf->fileName);
+AllocVar(el);
+el->lineIx = lf->lineIx;
+hashAddSaveName(elHash, word, el, &el->name);
+el->mixedCaseName = mixedCaseName(prefix, el->name);
+if (line != NULL && (s = strchr(line, '(')) != NULL)
+    {
+    s += 1;
+    if ((e = strchr(line, ')')) == NULL)
+        errAbort("Missing ')' line %d of %s", lf->lineIx, lf->fileName);
+    *e = 0;
+    isOr = (strchr(s, '|') != NULL);
+    if (isOr)
+      {
+	orCopyCode = *(e+1);
+	if ((orCopyCode != '+') && (orCopyCode != '*'))
+	  orCopyCode = '?';
+      }
+    wordCount = chopString(s, "| ,\t", words, ArraySize(words));
+    if (wordCount == ArraySize(words))
+	errAbort("Too many children in list line %d of %s", lf->lineIx, lf->fileName);
+    for (i=0; i<wordCount; ++i)
+	{
+	char *name = words[i];
+	int len = strlen(name);
+	char lastC = name[len-1];
+	if (name[0] == '#')
+	    {
+	    if (isOr)
+	        errAbort("# character in enumeration not allowed line %d of %s",
+		   lf->lineIx, lf->fileName);
+	    if (el->textType != NULL)
+		errAbort("Multiple types for text between tags line %d of %s", 
+			lf->lineIx, lf->fileName);
+	    el->textType = cloneString(name);
+	    }
+	else
+	    {
+	    AllocVar(ec);
+	    slAddHead(&el->children, ec);
+	    ec->isOr = isOr;
+	    if (isOr)
+	       ec->copyCode = orCopyCode;
+	    else
+		{
+		if (lastC == '+' || lastC == '?' || lastC == '*')
+		    {
+		    ec->copyCode = lastC;
+		    name[len-1] = 0;
+		    }
+		else
+		    ec->copyCode = '1';
+		}
+	    if (sameString(name, textField))
+		errAbort("Name conflict with default text field name line %d of %s", lf->lineIx, lf->fileName);
+	    ec->name = cloneString(name);
+	    }
+	}
+    slReverse(&el->children);
+    }
+return el;
+}
+
+static void parseAttribute(char *line, char *textField,
+	struct hash *elHash, struct lineFile *lf)
+/* Parse out <!ATTLIST line after <!ATTLIST. */
+{
+char *word;
+struct dtdAttribute *att;
+struct dtdElement *el;
+char *e;
+
+/* Get rid of trailing '>' */
+e = strrchr(line, '>');
+if (e == NULL)
+    errAbort("Missing '>' line %d of %s", lf->lineIx, lf->fileName);
+*e = 0;
+
+word = needNextWord(&line, lf);
+if ((el = hashFindVal(elHash, word)) == NULL)
+    errAbort("Undefined %s line %d of %s", word, lf->lineIx, lf->fileName);
+word = needNextWord(&line, lf);
+if (sameString(word, textField))
+    errAbort("Name conflict with text field name line %d of %s", lf->lineIx, lf->fileName);
+AllocVar(att);
+att->name = cloneString(word);
+att->mixedCaseName = mixedCaseName("", att->name);
+word = needNextWord(&line, lf);
+att->type = cloneString(word);
+line = skipLeadingSpaces(line);
+if (line[0] == '#')
+    {
+    word = needNextWord(&line, lf);
+    if (sameWord("#REQUIRED", word))
+        att->required = TRUE;
+    else if (sameWord("#IMPLIED", word))
+        att->usual = NULL;
+    else
+        errAbort("Unknown directive %s line %d of %s", word, lf->lineIx, lf->fileName);
+    }
+else if (line[0] == '\'' || line[0] == '"')
+    {
+    word = line;
+    needQuotedString(word, word, lf, &line);
+    att->usual = cloneString(word);
+    }
+else
+    {
+    word = needNextWord(&line, lf);
+    att->usual = cloneString(word);
+    }
+slAddTail(&el->attributes, att);
+}
+
+
+void parseEntity(struct hash *entityHash, struct hash *predefEntityHash,
+	char *line, struct lineFile *lf)
+/* Parse out an entity and add it to hash.  We'll dodge our predefined entities. */
+{
+char *percent = needNextWord(&line, lf);
+char *name = needNextWord(&line, lf);
+char *value = skipLeadingSpaces(line);
+if (value[0] != '"')
+    errAbort("Expecting quoted string at end of ENTITY tag line %d of %s",
+    	lf->lineIx, lf->fileName);
+needQuotedString(value, value, lf, &line);
+if (!sameString(percent, "%"))
+    errAbort("Expecting %% after ENTITY tag line %d of %s", lf->lineIx, lf->fileName);
+if (hashLookup(predefEntityHash, name) == NULL)
+/* We don't want to overwrite the predefined entities.  These are all
+ * defined to be #PCDATA or CDATA for the benefit of non-UCSC XML tools.
+ * Internally we map them to #INT/#FLOAT etc. so we can have numbers
+ * as well as strings in our C structures and relational database tables. */
+    {
+    char *oldVal = hashFindVal(entityHash, name);
+    if (oldVal != NULL)
+        {
+	if (!sameString(oldVal, value))
+	    errAbort("Entity %s redefined line %d of %s", name, lf->lineIx, lf->fileName);
+	}
+    else
+        {
+	hashAdd(entityHash, name, cloneString(value));
+	}
+    }
+}
+
+
+static void fixupChildRefs(struct dtdElement *elList, struct hash *elHash, char *fileName)
+/* Go through all of elements children and make sure that the corresponding
+ * elements are defined. */
+{
+struct dtdElement *el, *child;
+struct dtdElChild *ec;
+for (el = elList; el != NULL; el = el->next)
+    {
+    for (ec = el->children; ec != NULL; ec = ec->next)
+        {
+	if ((child = hashFindVal(elHash, ec->name)) == NULL)
+	    errAbort("%s's child %s undefined line %d of %s", el->name, ec->name, el->lineIx, fileName);
+	ec->el = child;
+	}
+    }
+}
+
+static char *eatComment(struct lineFile *lf, char *line)
+/* Eat possibly multi-line comment.  Return line past end of comment */
+{
+char *s;
+for (;;)
+    {
+    if ((s = stringIn("-->", line)) != NULL)
+        {
+	line = skipLeadingSpaces(s+3);
+	if (line[0] == 0)
+	    line = NULL;
+	return line;
+	}
+    if (!lineFileNext(lf, &line, NULL))
+        return NULL;
+    }
+}
+
+static void expandEntities(char *s, struct hash *entityHash, struct lineFile *lf,
+	struct dyString *dest)
+/* Copy s into dest, expanding any entity (something in format %name;) 
+ * by looking it up in entity hash. */
+{
+char c;
+while ((c = *s++) != 0)
+    {
+    if (c == '%' && !isspace(s[0]))
+        {
+	char *name = s;
+	char *end = strchr(s, ';');
+	char *value;
+	if (end == NULL)
+	    errAbort("Can't find ; after %% to close entity line %d of %s",
+	    	lf->lineIx, lf->fileName);
+	*end++ = 0;
+	s = end;
+	value = hashFindVal(entityHash, name);
+	if (value == NULL)
+	    errAbort("Entity %%%s; is not defined line %d of %s",
+	    	name, lf->lineIx, lf->fileName);
+	dyStringAppend(dest, value);
+	}
+    else
+        dyStringAppendC(dest, c);
+    }
+}
+
+static char *dtdxTag(struct lineFile *lf, struct hash *entityHash,
+	struct dyString *buf)
+/* Return next tag. */
+{
+char *line;
+
+/* Skip until get a line that starts with '<' */
+if (!lineFileNextReal(lf,  &line))
+    return NULL;
+line = trimSpaces(line);
+if (line[0] != '<')
+    errAbort("Text outside of a tag line %d of %s", lf->lineIx, lf->fileName);
+dyStringClear(buf);
+for (;;)
+    {
+    expandEntities(line, entityHash, lf, buf);
+    if (buf->string[buf->stringSize-1] == '>')
+         break;
+    dyStringAppendC(buf, ' ');
+    if (!lineFileNext(lf, &line, NULL))
+        errAbort("End of file %s inside of a tag.", lf->fileName);
+    line = trimSpaces(line);
+    }
+return buf->string;
+}
+
+void dtdParse(char *fileName, char *prefix, char *textField,
+	struct dtdElement **retList, struct hash **retHash)
+/* Parse out a dtd file into elements that are returned in retList,
+ * and for your convenience also in retHash (which is keyed by the
+ * name of the element.  Note that XML element names can include the '-'
+ * character.  For this and other reasons in addition to the element
+ * name as it appears in the XML tag, the element has a mixedCaseName
+ * that strips '-' and '_' chars, and tries to convert the name to
+ * a mixed-case convention style name.  The prefix if any will be
+ * prepended to mixed-case names.  The textField is what to name
+ * the field that contains the letters between tags.  By default
+ * (if NULL) it is "text." */
+{
+struct hash *elHash = newHash(8);
+struct hash *entityHash = initialEntityHash();
+struct hash *predefEntityHash = initialEntityHash();
+struct dtdElement *elList = NULL, *el;
+struct lineFile *lf = lineFileOpen(fileName, TRUE);
+char *line, *word;
+struct dyString *buf = dyStringNew(0);
+
+if (prefix == NULL)
+    prefix = "";
+if (textField == NULL)
+    textField = "text";
+while ((line = dtdxTag(lf, entityHash, buf)) != NULL)
+    {
+    line = trimSpaces(line);
+    if (line == NULL || line[0] == 0 || line[0] == '#')
+        continue;
+    if (startsWith("<!--", line))
+	{
+        line = eatComment(lf, line);
+	if (line == NULL)
+	    continue;
+	}
+    if (!startsWith("<!", line))
+        syntaxError(lf);
+    line += 2;
+    word = needNextWord(&line, lf);
+    if (sameWord("ELEMENT", word))
+        {
+	el = parseElement(prefix, textField, line, elHash, lf);
+	slAddHead(&elList, el);
+	}
+    else if (sameWord("ATTLIST", word))
+        {
+	parseAttribute(line, textField, elHash, lf);
+	}
+    else if (sameWord("ENTITY", word))
+        {
+	parseEntity(entityHash, predefEntityHash, line, lf);
+	}
+    else
+        {
+	errAbort("Don't understand %s line %d of %s", word, lf->lineIx, lf->fileName);
+	}
+    }
+lineFileClose(&lf);
+dyStringFree(&buf);
+slReverse(&elList);
+fixupChildRefs(elList, elHash, fileName);
+freeHashAndVals(&entityHash);
+freeHashAndVals(&predefEntityHash);
+*retHash = elHash;
+*retList = elList;
+}
+
+void dtdElementDump(struct dtdElement *el, FILE *f)
+/* Dump info on element. */
+{
+struct dtdElChild *ec;
+struct dtdAttribute *att;
+fprintf(f, "%s %s (", el->name, el->mixedCaseName);
+for (ec = el->children; ec != NULL; ec = ec->next)
+    {
+    fprintf(f, "%s", ec->name);
+    if (ec->copyCode != '1')
+        fprintf(f, "%c", ec->copyCode);
+    if (ec->isOr)
+        fprintf(f, " (isOr)");
+    if (ec->next != NULL)
+        fprintf(f, ", ");
+    }
+fprintf(f, ")");
+if (el->textType != NULL)
+    fprintf(f, " (%s)", el->textType);
+fprintf(f, "\n");
+for (att = el->attributes; att != NULL; att = att->next)
+    {
+    fprintf(f, "  %s %s %s %s\n",
+        att->name, att->type, (att->usual ? att->usual : "n/a"),  
+	(att->required ? "required" : "optional"));
+    }
+}
+
diff --git a/gbtools/src/blatSrc/lib/dyOut.c b/gbtools/src/blatSrc/lib/dyOut.c
new file mode 100644
index 0000000..e623172
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/dyOut.c
@@ -0,0 +1,379 @@
+// dyOut - DYnamic string stack based OUTput
+//
+// This module relies upon a dyString based stack of buffers which accumulate output
+// for later printing.  As a stack, only the top buffer can be filled and flushed out
+// (duOutFlush).  When flushing, the top buffer's content is appended to the next
+// lower buffer, unless explicitly requested otherwise (dyOutDirectly).
+// If the stack is empty, dyOutPrintf will be equivalent to printf.
+//
+// Output goes to STDOUT unless a single alternative out file is registered.
+
+/* Copyright (C) 2012 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "dyOut.h"
+
+// The stack of dyString buffers is only accessible locally
+static struct dyString *dyOutStack = NULL;
+#define dyOutAssertToken(token) assert(dyOutPointerToToken(dyOutStack) == token)
+
+// This module defaults to STDOUT but an alternative can be registered
+static FILE *dyOutStream = NULL;
+#define dyOutStreamAssertUnregistered() assert(dyOutStream == stdout || dyOutStream == NULL)
+#define dyOutStreamAssertRegistered(out) assert(dyOutStream == out)
+
+
+INLINE void dyOutStreamInitialize(void)
+// Must initialize the static dyOutStream before use.
+{
+if (dyOutStream == NULL) 
+    dyOutStream = stdout;
+}
+
+
+INLINE int dyOutPointerToToken(struct dyString *pointer)
+// It is desirable to return a unique token but NOT give access to the dyString it is based on
+{
+return (int)((size_t)(pointer) & 0xffffffff);
+}
+
+
+static struct dyString *dyOutPointerFromToken(int token)
+// Return the stack member corresponding to the token.
+// This ix can be used to walk up the stack from a given point
+{
+struct dyString *ds = dyOutStack;
+int ix = 0;
+
+for (; ds != NULL; ds = ds->next, ++ix)
+    {
+    if (dyOutPointerToToken(ds) == token)
+        return ds;
+    }
+return NULL;
+}
+
+
+int dyOutOpen(int initialBufSize)
+// Allocate dynamic string and puts at top of stack
+// returns token to be used for later stack accounting asserts
+{
+if (initialBufSize <= 0)
+    initialBufSize = 2048; // presume large
+struct dyString *ds = dyStringNew(initialBufSize);
+slAddHead(&dyOutStack,ds);
+return dyOutPointerToToken(ds);
+}
+
+
+int dyOutPrintf(char *format, ...)
+// Prints into end of the top ds buffer, and return resulting string length
+// If there is no current buffer, this acts like a simple printf and returns -1
+{
+int len = -1; // caller could assert returned length > 0 to ensure dyOut is open!
+va_list args;
+va_start(args, format);
+if (dyOutStack != NULL)
+    {
+    dyStringVaPrintf(dyOutStack, format, args);
+    len = dyStringLen(dyOutStack);
+    }
+else
+    {
+    dyOutStreamInitialize();
+    vfprintf(dyOutStream,format, args);
+    }
+va_end(args);
+return len;
+}
+
+
+int dyOutPrintDirectly(int token,FILE *file)
+// Prints the contents of the top buffer directly to a file.
+// Will leave the filled buffer at top of stack
+// Returns the length printed.
+{
+dyOutAssertToken(token);
+
+int len = dyStringLen(dyOutStack);
+if (len != 0)
+    fprintf(file,"%s",dyStringContents(dyOutStack));
+    fflush(file);
+return len;
+}
+
+
+int dyOutFlush(int token)
+// Flushes the top buffer to the next lower one and empties top buffer.
+// If there is no lower buffer then the content is printed to STDOUT (or registered out).
+// Returns the length flushed.
+{
+dyOutAssertToken(token);
+
+int len = dyStringLen(dyOutStack);
+if (len != 0)
+    {
+    if (dyOutStack->next == NULL)
+        {
+        dyOutStreamInitialize();
+        fprintf(dyOutStream,"%s",dyStringContents(dyOutStack));
+        fflush(dyOutStream);
+        }
+    else
+        dyStringAppend(dyOutStack->next,dyStringContents(dyOutStack));
+    dyStringClear(dyOutStack);
+    }
+return len;
+}
+
+
+int dyOutClose(int token)
+// Abandons the top buffer and its content, freeing memory.
+// Returns the length abandoned.
+{
+dyOutAssertToken(token);
+int len = dyStringLen(dyOutStack);
+struct dyString *ds = slPopHead(&dyOutStack);
+dyStringFree(&ds);
+return len;
+}
+
+int dyOutFlushAndClose(int token)
+// Flushes the top buffer to the next lower one and frees the top buffer.
+// If there is no lower buffer then the content is printed to STDOUT (or registered out).
+// Returns the length flushed.
+{
+int len = dyOutFlush(token);
+dyOutClose(token);
+return len;
+}
+
+
+int dyOutFlushAndCloseAll()
+// CAUTION: Bad practice to not Open/Close levels in turn!
+// flushes, frees and closes all stacked buffers
+// returns length flushed
+{
+int len = 0;
+
+// more efficient method than repeated dyOutFlushAndClose calls
+if (dyOutStack != NULL)
+    {
+    dyOutStreamInitialize();
+    slReverse(&dyOutStack);  // Oldest prints first.
+    while (dyOutStack != NULL)
+        {
+        struct dyString *ds = slPopHead(&dyOutStack);
+        char *content = dyStringCannibalize(&ds);
+        len += strlen(content);
+        fprintf(dyOutStream,"%s",content);
+        freeMem(content);
+        }
+    fflush(dyOutStream);
+    }
+return len;
+}
+
+
+char * dyOutContent(int token)
+// returns the content of the current buffer as a string, but does not flush or free it
+// NOTE: returned pointer is not cloned memory and will be changed by successive dyOut calls
+{
+dyOutAssertToken(token);
+return dyStringContents(dyOutStack);
+}
+
+
+int dyOutEmpty(int token)
+// Empties the top buffer in stack (abandoning content), but leave buffer in place
+// Returns the length abandoned.
+{
+dyOutAssertToken(token);
+int len = dyStringLen(dyOutStack);
+dyStringClear(dyOutStack);
+return len;
+}
+
+
+int dyOutSize(int token)
+// Returns the current length of the buffer starting at the level corresponding to token.
+// Unlike other cases, the token does not have to correspond to the top of the stack!
+{
+struct dyString *dsTarget = dyOutPointerFromToken(token);
+assert(dsTarget != NULL);
+
+int len = dyStringLen(dsTarget);
+struct dyString *ds = dyOutStack;
+for (; ds != dsTarget && ds != NULL; ds = ds->next) // assertable != NULL, but still
+    len += dyStringLen(ds);
+return len;
+}
+
+
+int dyOutSizeAll()
+// returns combined current size of all buffers
+{
+int len = 0;
+if (dyOutStack != NULL)
+    {
+    struct dyString *ds = dyOutStack;
+    for (;ds != NULL; ds = ds->next)
+        len += dyStringLen(ds);
+    }
+return len;
+}
+
+
+int dyOutStackDepth()
+// Returns the current dyOut buffer stack depth
+{
+return slCount(dyOutStack);
+}
+
+
+void dyOutRegisterAltStream(FILE *out)
+// Registers an alternative to STDOUT.  After registering, all dyOut out goes to this file.
+// NOTE: There is no stack. Register/Unregister serially.
+{
+dyOutStreamAssertUnregistered();
+dyOutStream = out;
+}
+
+
+void dyOutUnregisterAltStream(FILE *out)
+// Unregisters the alternative to STDOUT.  After unregistering all dyOut out goes to STDOUT.
+// NOTE: There is no stack. Register/Unregister serially.
+{
+dyOutStreamAssertRegistered(out);
+dyOutStream = stdout;
+}
+
+
+char *dyOutCannibalizeAndClose(int token)
+// Closes the top stack buffer returning content.  Returned string should be freed.
+{
+dyOutAssertToken(token);
+struct dyString *ds = slPopHead(&dyOutStack);
+return dyStringCannibalize(&ds);
+}
+
+
+char *dyOutCannibalizeAndCloseAll()
+// CAUTION: Bad practice to not Open/Close levels in turn!
+// Closes all stack buffers and returns a single string that is the full content.  
+// Returned string should be freed.
+{
+// Using repeated dyOutFlushAndClose calls will build the contents into a single string.
+while (dyOutStack != NULL && dyOutStack->next != NULL) // Leaves only one on the stack
+    {
+    int token = dyOutPointerToToken(dyOutStack);
+    dyOutFlushAndClose(token); // Flushes each to the next lower buffer
+    }
+if (dyOutStack == NULL)
+    return NULL;
+else
+    return dyStringCannibalize(&dyOutStack);
+}
+
+
+void *dyOutStackPop(int token)
+// CAUTION: Not for the faint of heart: print buffer surgery is no substitute for proper coding.
+// Returns a pointer which can be dyOutStackPush'd back into place.
+// Pop/Push is useful for inserting print immediately before a dyOutOpen'd print buffer
+{
+// Note: while this returns a struct dyString *, the caller is kept in the dark.
+//       This is because only this module should manipulate these buffers directly.
+dyOutAssertToken(token);
+return slPopHead(&dyOutStack);
+}
+
+
+void dyOutStackPush(int token,void *dyOutPointer)
+// CAUTION: Not for the faint of heart: print buffer surgery is no substitute for proper coding.
+// Push a previously dyOutStackPop'd print buffer back onto the stack
+// Pop/Push is useful for inserting print immediately before a dyOutOpen'd print buffer
+{
+assert(dyOutPointerToToken(dyOutPointer) == token);
+slAddHead(&dyOutStack,dyOutPointer);
+}
+
+
+#ifdef NOT_NOW
+// Requires regex function added to dystring.c which has been successfully tested.
+boolean dyOutRegexReplace(int token, char *regExpression, char *replaceWith)
+// CAUTION: Not for the faint of heart: print buffer surgery is no substitute for proper coding.
+// Looks for and replaces a single instance of a wildcard match in the current dyOut print buffer
+// regex follows normal EXTENDED (egrep) rules except:
+// ^ - at beginning of the regExpression only and matches beginning of buffer (not of line)
+// $ - at end of regExpression only and matches end of buffer (not end of line)
+// \n - newlines in the body of the regExpression will match newlines in the current print buffer
+// Returns TRUE on success
+// CAUTION: Wildcards match largest sub-string [w.*d] matches all of "wild wild world"
+{
+dyOutAssertToken(token);
+return dyStringRegexReplace(dyOutStack,regExpression,replaceWith);
+}
+
+
+void dyOutTest()
+// Tests of dyOut functions
+{
+printf("Plain printf\n");
+dyOutPrintf("1 dyOutPrintf unopened\n");
+
+int token1 = dyOutOpen(0);
+dyOutPrintf("2 dyOutOpen:1\n");
+dyOutFlush(token1);
+dyOutPrintf("3^10   1:%d after flush\n",dyOutStackDepth());
+int token2 = dyOutOpen(256);
+dyOutPrintf("4 dsOpen:2 len1:%d  len2:%d  lenAll:%d\n",
+         dyOutSize(token1),dyOutSize(token2),dyOutSizeAll());
+dyOutRegisterAltStream(stderr);
+dyOutFlush(token2);
+dyOutUnregisterAltStream(stderr);
+dyOutPrintf("5      2:%d After flush  len1:%d  len2:%d  lenAll:%d\n",
+         dyOutStackDepth(),dyOutSize(token1),dyOutSize(token2),dyOutSizeAll());
+dyOutFlushAndClose(token2);
+dyOutPrintf("6      1:%d After flushAndClose:2  len1:%d\n",dyOutStackDepth(),dyOutSize(token1));
+token2 = dyOutOpen(256);
+dyOutPrintf("7 dyOutOpen:2 reopen:2  WILL ABANDON CONTENT\n");
+char *content = cloneString(dyOutContent(token2));
+dyOutAbandonContent(token2);
+dyOutPrintf("8x7    2:%d len1:%d len2:%d lenAll:%d isEmpty2:%s\n",
+         dyOutStackDepth(),dyOutSize(token1),dyOutSize(token2),dyOutSizeAll(),
+         (dyOutIsEmpty(token2) ? "EMPTY":"NOT_EMPTY"));
+strSwapChar(content,'\n','~');  // Replace newline before printing.
+dyOutPrintf("9      2:%d No flush yet   len1:%d  len2:%d  lenAll:%d  prev7:[%s]\n",
+         dyOutStackDepth(),dyOutSize(token1),dyOutSize(token2),dyOutSizeAll(),content);
+freez(&content);
+int token3 = dyOutOpen(256);
+dyOutPuts("10  Open:3 Line doubled and out of turn due to dyOutPrintDirectly()");
+dyOutPrintDirectly(token3,stdout);
+dyOutPrintf("11     3:%d Just prior to closing all.  len1:%d  len2:%d  len3:%d  lenAll:%d",
+         dyOutStackDepth(),
+         dyOutSize(token1),dyOutSize(token2),dyOutSize(token3),dyOutSizeAll());
+int token4 = dyOutOpen(256);
+dyOutPrintf("12  Open:4 Opened  stack:%d  WILL ABANDON\n",dyOutStackDepth());
+dyOutAbandon(token4);
+dyOutPutc('\n');
+dyOutPuts("13  Puts:  Added last '\\n' with dsPutc(), this with dsPuts().");
+dyOutPrintf("14     3:%d Last line!  Expect 7 & 12 missing, 10 dupped.  lenAll:%d  Bye.\n",
+         dyOutStackDepth(),dyOutSizeAll());
+dyOutFlushAndCloseAll();
+assert(dyOutStack == NULL);
+int ix = 0;
+for (;ix<20;ix++) // tested to 1000
+    {
+    dyOutOpen(32); // Don't even care about tokens!
+    if (ix == 0)
+        dyOutPrintf("CannibalizeAndCloseAll():");
+    dyOutPrintf(" %d",dyOutStackDepth());
+    }
+content = dyOutCannibalizeAndCloseAll();
+printf("\n[%s]\n",content);
+freez(&content);
+}
+#endif///def NOT_NOW
+
+
diff --git a/gbtools/src/blatSrc/lib/dystring.c b/gbtools/src/blatSrc/lib/dystring.c
new file mode 100644
index 0000000..1fa6c22
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/dystring.c
@@ -0,0 +1,250 @@
+/* dystring - dynamically resizing string.
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "dystring.h"
+
+
+struct dyString *newDyString(int initialBufSize)
+/* Allocate dynamic string with initial buffer size.  (Pass zero for default) */
+{
+struct dyString *ds;
+AllocVar(ds);
+if (initialBufSize == 0)
+    initialBufSize = 512;
+ds->string = needMem(initialBufSize+1);
+ds->bufSize = initialBufSize;
+return ds;
+}
+
+void freeDyString(struct dyString **pDs)
+/* Free up dynamic string. */
+{
+struct dyString *ds;
+if ((ds = *pDs) != NULL)
+    {
+    freeMem(ds->string);
+    freez(pDs);
+    }
+}
+
+char *dyStringCannibalize(struct dyString **pDy)
+/* Kill dyString, but return the string it is wrapping
+ * (formerly dy->string).  This should be free'd at your
+ * convenience. */
+{
+char *s;
+struct dyString *ds = *pDy;
+assert(ds != NULL);
+s = ds->string;
+freez(pDy);
+return s;
+}
+
+void freeDyStringList(struct dyString **pDs)
+/* free up a list of dyStrings */
+{
+struct dyString *ds, *next;
+for(ds = *pDs; ds != NULL; ds = next)
+    {
+    next = ds->next;
+    freeDyString(&ds);
+    }
+*pDs = NULL;
+}
+
+static void dyStringExpandBuf(struct dyString *ds, int newSize)
+/* Expand buffer to new size. */
+{
+ds->string = needMoreMem(ds->string, ds->stringSize+1, newSize+1);
+ds->bufSize = newSize;
+}
+
+void dyStringBumpBufSize(struct dyString *ds, int size)
+/* Force dyString buffer to be at least given size. */
+{
+if (ds->bufSize < size)
+    dyStringExpandBuf(ds, size);
+}
+
+void dyStringAppendN(struct dyString *ds, char *string, int stringSize)
+/* Append string of given size to end of string. */
+{
+int oldSize = ds->stringSize;
+int newSize = oldSize + stringSize;
+char *buf;
+if (newSize > ds->bufSize)
+    {
+    int newAllocSize = newSize + oldSize;
+    int oldSizeTimesOneAndAHalf = oldSize * 1.5;
+    if (newAllocSize < oldSizeTimesOneAndAHalf)
+        newAllocSize = oldSizeTimesOneAndAHalf;
+    dyStringExpandBuf(ds,newAllocSize);
+    }
+buf = ds->string;
+memcpy(buf+oldSize, string, stringSize);
+ds->stringSize = newSize;
+buf[newSize] = 0;
+}
+
+char dyStringAppendC(struct dyString *ds, char c)
+/* Append char to end of string. */
+{
+char *s;
+if (ds->stringSize >= ds->bufSize)
+     dyStringExpandBuf(ds, ds->bufSize+256);
+s = ds->string + ds->stringSize++;
+*s++ = c;
+*s = 0;
+return c;
+}
+
+void dyStringAppendMultiC(struct dyString *ds, char c, int n)
+/* Append N copies of char to end of string. */
+{
+int oldSize = ds->stringSize;
+int newSize = oldSize + n;
+int newAllocSize = newSize + oldSize;
+char *buf;
+if (newSize > ds->bufSize)
+    dyStringExpandBuf(ds,newAllocSize);
+buf = ds->string;
+memset(buf+oldSize, c, n);
+ds->stringSize = newSize;
+buf[newSize] = 0;
+}
+
+void dyStringAppend(struct dyString *ds, char *string)
+/* Append zero terminated string to end of dyString. */
+{
+dyStringAppendN(ds, string, strlen(string));
+}
+
+void dyStringAppendEscapeQuotes(struct dyString *dy, char *string,
+	char quot, char esc)
+/* Append escaped-for-quotation version of string to dy. */
+{
+char c;
+char *s = string;
+while ((c = *s++) != 0)
+     {
+     if (c == quot)
+         dyStringAppendC(dy, esc);
+     dyStringAppendC(dy, c);
+     }
+}
+
+void dyStringVaPrintf(struct dyString *ds, char *format, va_list args)
+/* VarArgs Printf to end of dyString. */
+{
+/* attempt to format the string in the current space.  If there
+ * is not enough room, increase the buffer size and try again */
+int avail, sz;
+while (TRUE)
+    {
+    va_list argscp;
+    va_copy(argscp, args);
+    avail = ds->bufSize - ds->stringSize;
+    if (avail <= 0)
+        {
+	/* Don't pass zero sized buffers to vsnprintf, because who knows
+	 * if the library function will handle it. */
+        dyStringExpandBuf(ds, ds->bufSize+ds->bufSize);
+	avail = ds->bufSize - ds->stringSize;
+	}
+    sz = vsnprintf(ds->string + ds->stringSize, avail, format, argscp);
+    va_end(argscp);
+
+    /* note that some version return -1 if too small */
+    if ((sz < 0) || (sz >= avail))
+        dyStringExpandBuf(ds, ds->bufSize+ds->bufSize);
+    else
+        {
+        ds->stringSize += sz;
+        break;
+        }
+    }
+}
+
+void dyStringPrintf(struct dyString *ds, char *format, ...)
+/*  Printf to end of dyString. */
+{
+va_list args;
+va_start(args, format);
+dyStringVaPrintf(ds, format, args);
+va_end(args);
+}
+
+struct dyString *dyStringCreate(char *format, ...)
+/*  Create a dyString with a printf style initial content */
+{
+int len = strlen(format) * 3;
+struct dyString *ds = newDyString(len);
+va_list args;
+va_start(args, format);
+dyStringVaPrintf(ds, format, args);
+va_end(args);
+return ds;
+}
+
+struct dyString * dyStringSub(char *orig, char *in, char *out)
+/* Make up a duplicate of orig with all occurences of in substituted
+ * with out. */
+{
+int inLen = strlen(in), outLen = strlen(out), origLen = strlen(orig);
+struct dyString *dy = newDyString(origLen + 2*outLen);
+char *s, *e;
+
+if (orig == NULL) return NULL;
+for (s = orig; ;)
+    {
+    e = stringIn(in, s);
+    if (e == NULL)
+	{
+        e = orig + origLen;
+	dyStringAppendN(dy, s, e - s);
+	break;
+	}
+    else
+        {
+	dyStringAppendN(dy, s, e - s);
+	dyStringAppendN(dy, out, outLen);
+	s = e + inLen;
+	}
+    }
+return dy;
+}
+
+void dyStringResize(struct dyString *ds, int newSize)
+/* resize a string, if the string expands, blanks are appended */
+{
+int oldSize = ds->stringSize;
+if (newSize > oldSize)
+    {
+    /* grow */
+    if (newSize > ds->bufSize)
+        dyStringExpandBuf(ds, newSize + ds->stringSize);
+    memset(ds->string+newSize, ' ', newSize);
+    }
+ds->string[newSize] = '\0';
+ds->stringSize = newSize;
+}
+
+void dyStringQuoteString(struct dyString *dy, char quotChar, char *text)
+/* Append quotChar-quoted text (with any internal occurrences of quotChar
+ * \-escaped) onto end of dy. */
+{
+char c;
+
+dyStringAppendC(dy, quotChar);
+while ((c = *text++) != 0)
+    {
+    if (c == quotChar)
+        dyStringAppendC(dy, '\\');
+    dyStringAppendC(dy, c);
+    }
+dyStringAppendC(dy, quotChar);
+}
+
diff --git a/gbtools/src/blatSrc/lib/elmTree.c b/gbtools/src/blatSrc/lib/elmTree.c
new file mode 100644
index 0000000..122c25c
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/elmTree.c
@@ -0,0 +1,277 @@
+/* Copyright (C) 2013 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+// elmTree.c/.h - Extensible local memory tree grown from an slList of objects, via
+// NEIGHBOR JOINING and a supplied compare routine.  Unlike hacTree, this is not a binary tree
+// and any node can have original content, a single parent and N children.  Superficially similar
+// to running slSort(), running elmTreeGrow() creates a tree from a single "root".  All branches
+// and leaves are represented as "tree nodes" which contain pointers to a user defined object,
+// a single parent, a first child (if the node is not a leaf) and a next sibling.  All nodes are
+// additionally joined together as an slList with the single "root" as the first member.  Thus
+// the tree can be traversed linerarly through node->next or hierarchically through recursive
+// node->firstChild,child->sibling access.
+// The tree is grown through neighbor joins and involves figuring out whether each successive 
+// content should be attached as a branch node or leaf node to the existing tree.  To facilitate
+// neighbor joining, each node has cumulative content from the single root node (whcih has NULL
+// content).  An example might be a tree of bitmaps where each node contains all the bits of its
+// parent plus additional bits.
+// Since an elmTree is build with local memory, free the tree by lmCleanup().
+
+#include "common.h"
+#include "elmTree.h"
+
+struct elmNode *treeNewNode(struct lm *lm,struct elmNode **tree,struct slList *content)
+// Returns a new node to attach to a tree.
+{
+assert((*tree != NULL && content != NULL) || (*tree == NULL && content == NULL));
+
+struct elmNode *node;
+lmAllocVar(lm,node);
+if (tree != NULL) // Keep all nodes in a simple slList
+    slAddHead(tree,node);
+node->selfAndDescendants = 1;
+node->content = content;
+return node;
+}
+// NOTE the root of the tree always has NULL content.
+#define treePlant(lm,tree) treeNewNode(lm,tree,NULL)
+
+INLINE void treeSprout(struct elmNode *parent,struct elmNode *node)
+// Adds a leaf or branch node to an existing tree node.
+{
+node->parent = parent;
+node->sibling = parent->firstChild;
+parent->firstChild = node;
+parent->selfAndDescendants += node->selfAndDescendants;
+}
+
+struct elmNode *treeClip(struct elmNode *node)
+// Clips leaf or branch node from a tree returning the node's former parent
+{
+assert(node->parent != NULL);
+struct elmNode *parent = node->parent;
+node->parent = NULL;
+
+// node may not be first child, so find node in children 
+struct elmNode *child = parent->firstChild; 
+struct elmNode *prevChild = NULL;
+struct elmNode *nextChild = NULL;
+for (; child != NULL; prevChild = child, child = nextChild)
+    {
+    nextChild = child->sibling;
+    if (child == node)
+        {
+        child->sibling = NULL;
+        if (prevChild != NULL)
+            prevChild->sibling = nextChild;
+        else
+            parent->firstChild = nextChild;
+        break;
+        }
+    }
+parent->selfAndDescendants -= node->selfAndDescendants;
+return parent;
+}
+
+
+INLINE void treeBranchBefore(struct elmNode *branch,struct elmNode *node)
+// Adds a new 'branch' node just before the current 'node'
+{
+struct elmNode *parent = treeClip(node);
+treeSprout(parent,branch);
+treeSprout(branch,node);
+}
+
+enum elmNodeOverlap rTreeBranchFindMaxWeight(struct elmNode *branch, struct slList *element, 
+                                                    elmNodeCompareFunction *neighborCmp, 
+                                                    int *pWeight, void *extra)
+// Using the compare routine, the max weight is found an element and a candidate branch
+{
+int bestWeight = 0;
+int topNodeResult = neighborCmp(branch->content,element,&bestWeight,extra);
+if (topNodeResult != enoEqual && topNodeResult != enoSuperset // could do better
+&&  bestWeight > 0 && bestWeight >= *pWeight)           // reason to look for more
+    {
+    struct elmNode *child = branch->firstChild;
+    for ( ;child != NULL; child = child->sibling)
+        {
+        int weight = bestWeight;  // will not recurse if new weight is less than best
+        int result = rTreeBranchFindMaxWeight(child,element,neighborCmp,&weight,extra);
+        if (bestWeight < weight)
+            bestWeight = weight;
+        if (result == enoEqual
+        ||  result == enoSuperset)
+            break;  // don't return result of compare to child, but do select this best weight
+        }
+    }
+*pWeight = bestWeight;
+return topNodeResult;
+}
+
+static enum elmNodeOverlap treeChooseBranch(struct elmNode **pBranch, struct slList *element,
+                                            elmNodeCompareFunction *neighborCmp, void *extra)
+// Using the compare routine, a branch is chosen that most closely matches the element being tested
+// Simple case: one of two branches has best weight so follow that branch.  More subtle case:
+// both branches have equal weight.  In this case using recursive routine will look deeper into 
+// each branch to find the best weight before choosing a branch.
+{
+struct elmNode *branch = *pBranch;
+assert(branch->content != NULL);
+
+struct elmNode *bestBranch = branch;
+int bestWeight = 0;
+// NOTE: using recursive routine will look deeper into a branch to find the best weight
+//int bestResult = neighborCmp(bestBranch->content,element,&bestWeight,extra);
+int bestResult = rTreeBranchFindMaxWeight(bestBranch,element,neighborCmp,&bestWeight,extra);
+
+// Is there need to compare further?
+if (bestResult != enoEqual && bestResult != enoSuperset)  // Could do better
+    {
+    for (branch = branch->sibling;branch != NULL; branch = branch->sibling)
+        {
+        int weight = bestWeight;  // will not recurse if new weight is less than best
+        //int result = neighborCmp(branch->content,element,&weight,extra);
+        int result = rTreeBranchFindMaxWeight(branch,element,neighborCmp,&weight,extra);
+        if (bestWeight <  weight)                         // better than last branch
+        // NOTE: preferring larger of 2 equal branches does not help.
+        //|| (bestWeight == weight                         // prefer largest branch
+        //   &&  branch->selfAndDescendants > bestBranch->selfAndDescendants))
+            {
+            bestBranch = branch;
+            bestWeight = weight;
+            bestResult = result;
+            if (bestResult == enoEqual
+            ||  bestResult == enoSuperset) // doesn't get any better
+                break;
+            }
+        }
+    }
+*pBranch   = bestBranch;
+return bestResult;
+}
+
+
+struct elmNode *elmTreeGrow(struct lm *lm,struct slList *collection, void *extra,
+                            elmNodeCompareFunction *neighborCmp,
+                            elmNodeJoiningFunction *neighborJoin)
+// Given a collection of content and a function to compare elements of the content,
+// returns a tree based on neighbor joining.  The nodes of the tree will have content
+// which is cumulative out to the leaves: the root node has null content, while any child
+// has content that is the superset of all it's parents.  Fill 'extra' with anything (like lm)
+// that you want passed into your compare and joining functions.
+{
+if (collection == NULL)
+    return NULL;
+
+// Begin tree
+struct elmNode *treeNodeList = NULL;
+struct elmNode *root = treePlant(lm,&treeNodeList);
+
+// Add first element:
+struct slList *element = collection;
+struct elmNode *newNode = treeNewNode(lm,&treeNodeList,element);
+treeSprout(root,newNode);
+element = element->next;
+
+// for each additional element, walks current tree level by level, choosing the best branch and
+// ultimately adding the element as a leaf.  Current leaves can become branches and
+// current branches may get split to add a new leaf sprout in the middle.
+struct elmNode *curNode = NULL;
+struct elmNode *newBranch = NULL;
+for ( ;element != NULL; element = element->next)
+    {
+    for (curNode = root->firstChild;  // For each element, start at just off root
+         curNode != NULL; 
+         curNode = curNode->firstChild) // walks down
+        {
+        int result = treeChooseBranch(&curNode,element,neighborCmp,extra); // chooses across
+        if (result == enoEqual)                       // Replaces current
+            {
+            // Should only get here if a previous node has the same content as this new element
+            struct slList *replacement = neighborJoin(curNode->content,element,extra);
+            curNode->content = replacement;
+            }
+        else if (result == enoExcluding)              // New leaf
+            {
+            newNode = treeNewNode(lm,&treeNodeList,element);
+            treeSprout(curNode->parent,newNode);  // shares nothing
+            }
+        else if (result == enoSubset)                 // on to children or new leaf
+            {
+            if (curNode->firstChild != NULL) 
+                continue;                             // Only case where we continue!
+            newNode = treeNewNode(lm,&treeNodeList,element);
+            treeSprout(curNode,newNode);          // shares all of curNode
+            }
+        else if (result == enoSuperset)               // New branch with old node as child
+            {
+            newBranch = treeNewNode(lm,&treeNodeList,element);
+            treeBranchBefore(newBranch,curNode);
+            }
+        else if (result == enoMixed)                  // New branch with both nodes as children
+            {
+            struct slList *matching = neighborJoin(curNode->content,element,extra);
+            newBranch = treeNewNode(lm,&treeNodeList,matching);
+            treeBranchBefore(newBranch,curNode);
+            newNode   = treeNewNode(lm,&treeNodeList,element);
+            treeSprout(newBranch,newNode);
+            }
+        break; // done, move on to next element
+        }
+    }
+slReverse(&treeNodeList);
+assert(elmNodeIsRoot(treeNodeList) && root == treeNodeList);
+return root;
+}
+
+boolean rElmTreeClimb(const struct elmNode *node, struct slList *parent, void *extra,
+                      elmNodePickFunction *elmPick, struct slList **results)
+// Recursively climbs tree and examines every node using the supplied function.
+// Each call on a node iterates through its siblings, recursively calling itself on any children.
+// This function might be used to build a list of objects from each or a subset of nodes.
+// If all examinations resulted in a structure, then the list will be in REVERSE traversal order.
+// If you immediately slReverse(results) then the list will ascend to the furthest leaf before
+// moving on to sibling leaves, twigs and branches.
+// Note: if results are returned, then "parent" is filled with nearest parent's result.
+// Return FALSE from the elmPick function to stop the traversal.  Thus, a complete traversal
+// returns TRUE, but one that has been stopped (after finding one node?) returns FALSE.
+{
+const struct elmNode *sibling = elmNodeIsRoot(node) ? node->firstChild: node;
+for (;sibling!=NULL;sibling = sibling->sibling)
+    {
+    // Some nodes are subsets rather than alleles
+    struct slList *localParent = NULL;
+    struct slList *result = NULL;
+    boolean ret = elmPick(sibling->content,parent,extra,&result);
+    if (result)
+        {
+        //assert(results != NULL);
+        slAddHead(results,result);
+        localParent = result;
+        result = NULL;
+        }
+    else
+        localParent = parent;
+
+    if (!ret)
+        return FALSE; // Stop traversing
+
+    // a node points to only one child, but that child may have siblings
+    struct elmNode *child = sibling->firstChild; // additional children are siblings
+    if (child)
+        {
+        assert(child->content != NULL);
+        ret = rElmTreeClimb(child, localParent, extra, elmPick, &result);
+        if (result != NULL)
+            {
+            //assert(results != NULL);
+            *results = slCat(result,*results); // newer results go to front!
+            }
+        if (!ret)
+            return FALSE; // Stop traversing
+        }
+    }
+return TRUE; // continue traversing
+}
+
+
diff --git a/gbtools/src/blatSrc/lib/emblParse.c b/gbtools/src/blatSrc/lib/emblParse.c
new file mode 100644
index 0000000..f0b6213
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/emblParse.c
@@ -0,0 +1,159 @@
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+/* Parse EMBL formatted files. EMBL files are basically line
+ * oriented.  Each line begins with a short (usually two letter)
+ * type word.  Adjacent lines with the same type are generally
+ * considered logical extensions of each other.  In many cases
+ * lines can be considered fields in an EMBL database.  Records
+ * are separated by lines starting with '//'  Generally lines
+ * starting with XX are empty and used to make the records more
+ * human readable.   Here is an example record:
+ 
+ C  M00001
+ XX
+ ID  V$MYOD_01
+ XX
+ NA  MyoD
+ XX
+ DT  EWI (created); 19.10.92.
+ DT  ewi (updated); 22.06.95.
+ XX
+ PO     A     C     G     T
+ 01     0     0     0     0
+ 02     0     0     0     0
+ 03     1     2     2     0
+ 04     2     1     2     0
+ 05     3     0     1     1
+ 06     0     5     0     0
+ 07     5     0     0     0
+ 08     0     0     4     1
+ 09     0     1     4     0
+ 10     0     0     0     5
+ 11     0     0     5     0
+ 12     0     1     2     2
+ 13     0     2     0     3
+ 14     1     0     3     1
+ 15     0     0     0     0
+ 16     0     0     0     0
+ 17     0     0     0     0
+ XX
+ BF  T00526; MyoD                         ; mouse
+ XX
+ BA  5 functional elements in 3 genes
+ XX
+ XX
+ //
+ 
+ */
+
+#include "common.h"
+#include "linefile.h"
+#include "hash.h"
+#include "emblParse.h"
+
+
+boolean emblLineGroup(struct lineFile *lf, char type[16], struct dyString *val)
+/* Read next line of embl file.  Read line after that too if it
+ * starts with the same type field. Return FALSE at EOF. */
+{
+char *line, *word;
+int typeLen = 0;
+
+dyStringClear(val);
+while (lineFileNext(lf, &line, NULL))
+    {
+    line = skipLeadingSpaces(line);
+
+    /* Parse out first word into type. */
+    if (isspace(line[0]))
+        errAbort("embl line that doesn't start with type line %d of %s", 
+		lf->lineIx, lf->fileName);
+    if (typeLen == 0)
+        {
+	word = nextWord(&line);
+	typeLen = strlen(word);
+	if (typeLen >= 16)
+	    errAbort("Type word at start of line too long for embl file line %d of %s",
+	    	lf->lineIx, lf->fileName);
+	strcpy(type, word);
+	}
+    else if (!startsWith(type, line) || !isspace(line[typeLen]))
+        {
+	lineFileReuse(lf);
+	break;
+	}
+    else
+        {
+	dyStringAppendC(val, '\n');
+	word = nextWord(&line);
+	}
+
+    if (line != NULL)
+	{
+	/* Usually have two spaces after type. */
+	if (isspace(line[0]))
+	   ++line;
+	if (isspace(line[0]))
+	   ++line;
+
+	/* Append what's rest of line to return value. */
+	dyStringAppend(val, line);
+	}
+    }
+return typeLen > 0;
+}
+
+struct hash *emblRecord(struct lineFile *lf)
+/* Read next record and return it in hash.   (Free this
+ * hash with freeHashAndVals.)   Hash is keyed by type
+ * and has string values. */
+{
+struct hash *hash = NULL;
+char type[16];
+struct dyString *val = newDyString(256);
+boolean gotEnd = FALSE;
+
+while (emblLineGroup(lf, type, val))
+    {
+    if (hash == NULL)
+        hash = newHash(7);
+    if (sameString(type, "//"))
+        {
+	gotEnd = TRUE;
+	break;
+	}
+    hashAdd(hash, type, cloneString(val->string));
+    }
+if (hash != NULL && !gotEnd)
+    warn("Incomplete last record of embl file %s\n", lf->fileName);
+return hash;
+}
+
+static void notEmbl(char *fileName)
+/* Complain it's not really an EMBL file. */
+{
+errAbort("%s is not an emblFile", fileName);
+}
+
+struct lineFile *emblOpen(char *fileName, char type[256])
+/* Open up embl file, verify format and optionally  return 
+ * type (VV line).  Close this with lineFileClose(). */
+{
+struct lineFile *lf = lineFileOpen(fileName, TRUE);
+struct hash *hash = emblRecord(lf);
+char *vv;
+
+if (hash == NULL)
+    notEmbl(fileName);
+if ((vv = hashFindVal(hash, "VV")) == NULL)
+    notEmbl(fileName);
+if (type != NULL)
+    {
+    if (strlen(vv) >= 256)
+	notEmbl(fileName);
+    strcpy(type, vv);
+    }
+freeHashAndVals(&hash);
+return lf;
+}
diff --git a/gbtools/src/blatSrc/lib/errAbort.c b/gbtools/src/blatSrc/lib/errAbort.c
new file mode 100644
index 0000000..961fe56
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/errAbort.c
@@ -0,0 +1,377 @@
+/* errAbort.c - our error handler.
+ *
+ * This maintains two stacks - a warning message printer
+ * stack, and a "abort handler" stack.
+ *
+ * Note that the abort function always calls the warn handler first.
+ * This is so that the message gets sent.
+ *
+ * By default the warnings will go to stderr, and
+ * aborts will exit the program.  You can push a
+ * function on to the appropriate stack to change
+ * this behavior.  The top function on the stack
+ * gets called.
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+// developer: this include is for an occasionally useful means of getting stack info without
+// crashing
+// however, it is not supported on cygwin.  Conditionally compile this in when desired.
+//#define BACKTRACE_EXISTS
+#ifdef BACKTRACE_EXISTS
+#include <execinfo.h>
+#endif///def BACKTRACE_EXISTS
+#include <pthread.h>
+#include "common.h"
+#include "hash.h"
+#include "dystring.h"
+#include "errAbort.h"
+
+
+
+#define maxWarnHandlers 20
+#define maxAbortHandlers 12
+struct perThreadAbortVars
+/* per thread variables for abort and warn */
+    {
+    boolean debugPushPopErr;        // generate stack dump on push/pop error
+    boolean errAbortInProgress;     /* Flag to indicate that an error abort is in progress.
+                                      * Needed so that a warn handler can tell if it's really
+                                      * being called because of a warning or an error. */
+    WarnHandler warnArray[maxWarnHandlers];
+    int warnIx;
+    AbortHandler abortArray[maxAbortHandlers];
+    int abortIx;
+    };
+
+static struct perThreadAbortVars *getThreadVars();  // forward declaration
+
+static void defaultVaWarn(char *format, va_list args)
+/* Default error message handler. */
+{
+if (format != NULL) {
+    fflush(stdout);
+    vfprintf(stderr, format, args);
+    fprintf(stderr, "\n");
+    fflush(stderr);
+    }
+}
+
+static void silentVaWarn(char *format, va_list args)
+/* Warning handler that just hides it.  Useful sometimes when high level code
+ * expects low level code may fail (as in finding a file on the net) but doesn't
+ * want user to be bothered about it. */
+{
+}
+
+
+void vaWarn(char *format, va_list args)
+/* Call top of warning stack to issue warning. */
+{
+struct perThreadAbortVars *ptav = getThreadVars();
+ptav->warnArray[ptav->warnIx](format, args);
+}
+
+void warn(char *format, ...)
+/* Issue a warning message. */
+{
+va_list args;
+va_start(args, format);
+vaWarn(format, args);
+va_end(args);
+}
+
+void warnWithBackTrace(char *format, ...)
+/* Issue a warning message and append backtrace. */
+{
+va_list args;
+va_start(args, format);
+struct dyString *dy = newDyString(255);
+dyStringAppend(dy, format);
+
+#define STACK_LIMIT 20
+char **strings = NULL;
+int count = 0;
+
+// developer: this is an occasionally useful means of getting stack info without crashing
+// however, it is not supported on cygwin.  Conditionally compile this in when desired.
+// The define is at top to include execinfo.h
+#ifdef BACKTRACE_EXISTS
+void *buffer[STACK_LIMIT];
+count = backtrace(buffer, STACK_LIMIT);
+strings = backtrace_symbols(buffer, count);
+#endif///def BACKTRACE_EXISTS
+
+if (strings == NULL)
+    dyStringAppend(dy,"\nno backtrace_symbols available in errabort::warnWithBackTrace().");
+else
+    {
+    int ix = 1;
+    dyStringAppend(dy,"\nBACKTRACE (use on cmdLine):");
+    if (strings[1] != NULL)
+        {
+        strSwapChar(strings[1],' ','\0');
+        dyStringPrintf(dy,"\naddr2line -Cfise %s",strings[1]);
+        strings[1] += strlen(strings[1]) + 1;
+        }
+    for (; ix < count && strings[ix] != NULL; ix++)
+        {
+        strings[ix] = skipBeyondDelimit(strings[ix],'[');
+        strSwapChar(strings[ix],']','\0');
+        dyStringPrintf(dy," %s",strings[ix]);
+        }
+
+    free(strings);
+    }
+vaWarn(dyStringCannibalize(&dy), args);
+va_end(args);
+}
+
+
+void errnoWarn(char *format, ...)
+/* Prints error message from UNIX errno first, then does rest of warning. */
+{
+char fbuf[512];
+va_list args;
+va_start(args, format);
+sprintf(fbuf, "%s\n%s", strerror(errno), format);
+vaWarn(fbuf, args);
+va_end(args);
+}
+
+
+void pushWarnHandler(WarnHandler handler)
+/* Set abort handler */
+{
+struct perThreadAbortVars *ptav = getThreadVars();
+if (ptav->warnIx >= maxWarnHandlers-1)
+    {
+    if (ptav->debugPushPopErr)
+        dumpStack("pushWarnHandler overflow");
+    errAbort("Too many pushWarnHandlers, can only handle %d\n", maxWarnHandlers-1);
+    }
+ptav->warnArray[++ptav->warnIx] = handler;
+}
+
+void popWarnHandler()
+/* Revert to old warn handler. */
+{
+struct perThreadAbortVars *ptav = getThreadVars();
+if (ptav->warnIx <= 0)
+    {
+    if (ptav->debugPushPopErr)
+        dumpStack("popWarnHandler underflow");
+    errAbort("Too few popWarnHandlers");
+    }
+--ptav->warnIx;
+}
+
+static void defaultAbort()
+/* Default error handler exits program. */
+{
+if ((getenv("ERRASSERT") != NULL) || (getenv("ERRABORT") != NULL))
+    abort();
+else
+    exit(-1);
+}
+
+
+void noWarnAbort()
+/* Abort without message. */
+{
+struct perThreadAbortVars *ptav = getThreadVars();
+ptav->abortArray[ptav->abortIx]();
+exit(-1);               /* This is just to make compiler happy.
+                         * We have already exited or longjmped by now. */
+}
+
+void vaErrAbort(char *format, va_list args)
+/* Abort function, with optional (vprintf formatted) error message. */
+{
+/* flag is needed because both errAbort and warn generate message
+ * using the warn handler, however sometimes one needed to know
+ * (like when logging), if it's an error or a warning.  This is far from
+ * perfect, as this isn't cleared if the error handler continues,
+ * as with an exception mechanism. */
+struct perThreadAbortVars *ptav = getThreadVars();
+ptav->errAbortInProgress = TRUE;
+vaWarn(format, args);
+noWarnAbort();
+}
+
+void errAbort(char *format, ...)
+/* Abort function, with optional (printf formatted) error message. */
+{
+#ifdef COREDUMP
+    abort();
+#endif
+va_list args;
+va_start(args, format);
+vaErrAbort(format, args);
+va_end(args);
+}
+
+void errnoAbort(char *format, ...)
+/* Prints error message from UNIX errno first, then does errAbort. */
+{
+char fbuf[512];
+va_list args;
+va_start(args, format);
+sprintf(fbuf, "%s\n%s", strerror(errno), format);
+vaErrAbort(fbuf, args);
+va_end(args);
+}
+
+void pushAbortHandler(AbortHandler handler)
+/* Set abort handler */
+{
+struct perThreadAbortVars *ptav = getThreadVars();
+if (ptav->abortIx >= maxAbortHandlers-1)
+    {
+    if (ptav->debugPushPopErr)
+        dumpStack("pushAbortHandler overflow");
+    errAbort("Too many pushAbortHandlers, can only handle %d", maxAbortHandlers-1);
+    }
+ptav->abortArray[++ptav->abortIx] = handler;
+}
+
+void popAbortHandler()
+/* Revert to old abort handler. */
+{
+struct perThreadAbortVars *ptav = getThreadVars();
+if (ptav->abortIx <= 0)
+    {
+    if (ptav->debugPushPopErr)
+        dumpStack("popAbortHandler underflow");
+    errAbort("Too many popAbortHandlers\n");
+    }
+--ptav->abortIx;
+}
+
+static void debugAbort()
+/* Call the debugger. */
+{
+fflush(stdout);
+assert(FALSE);
+defaultAbort();
+}
+
+void pushDebugAbort()
+/* Push abort handler that will invoke debugger. */
+{
+pushAbortHandler(debugAbort);
+}
+
+static void warnAbortHandler(char *format, va_list args)
+/* warn handler that also aborts. */
+{
+defaultVaWarn(format, args);
+noWarnAbort();
+}
+
+void pushWarnAbort()
+/* Push handler that will abort on warnings. */
+{
+pushWarnHandler(warnAbortHandler);
+}
+
+void pushSilentWarnHandler()
+/* Set warning handler to be quiet.  Do a popWarnHandler to restore. */
+{
+pushWarnHandler(silentVaWarn);
+}
+
+void errAbortDebugnPushPopErr()
+/*  generate stack dump if there is a error in the push/pop functions */
+{
+struct perThreadAbortVars *ptav = getThreadVars();
+ptav->debugPushPopErr = TRUE;
+}
+
+boolean isErrAbortInProgress() 
+/* Flag to indicate that an error abort is in progress.
+ * Needed so that a warn handler can tell if it's really
+ * being called because of a warning or an error. */
+{
+struct perThreadAbortVars *ptav = getThreadVars();
+return ptav->errAbortInProgress;
+}
+
+
+static struct perThreadAbortVars *getThreadVars()
+/* Return a pointer to the perThreadAbortVars for the current pthread. */
+{
+pthread_t pid = pthread_self(); //  pthread_t can be a pointer or a number, implementation-dependent.
+
+// Test for out-of-memory condition causing re-entrancy into this function that would block
+// on its own main mutex ptavMutex.  Do this by looking for its own pid.
+// Some care must be exercised in testing and comparing the threads pid against one in-use.
+// We need yet another mutex and a boolean to tell us when the pidInUse value may be safely compared to pid.
+
+// Use a boolean since there is no known unused value for pthread_t variable. NULL and -1 are not portable.
+static boolean pidInUseValid = FALSE;  // tells when pidInUse contains a valid pid that can be compared.
+static pthread_t pidInUse; // there is no "unused" value to which we can initialize this.
+static pthread_mutex_t pidInUseMutex = PTHREAD_MUTEX_INITIALIZER;
+pthread_mutex_lock( &pidInUseMutex );
+// If this pid equals pidInUse, then this function has been re-entered due to severe out-of-memory error.
+// But we only compare them when pidInUseValid is TRUE.
+if (pidInUseValid && pthread_equal(pid, pidInUse)) 
+    {
+    // Avoid deadlock on self by exiting immediately.
+    // Use pthread_equal because directly comparing two pthread_t vars is not allowed.
+    // This re-entrancy only happens when it has aborted already due to out of memory
+    // which should be a rare occurrence.
+    char *errMsg = "errAbort re-entered due to out-of-memory condition. Exiting.\n";
+    write(STDERR_FILENO, errMsg, strlen(errMsg)); 
+    exit(1);   // out of memory is a serious problem, exit immediately, but allow atexit cleanup.
+    }
+pthread_mutex_unlock( &pidInUseMutex );
+
+// This is the main mutex we really care about.
+// It controls access to the hash where thread-specific data is stored.
+static pthread_mutex_t ptavMutex = PTHREAD_MUTEX_INITIALIZER;
+pthread_mutex_lock( &ptavMutex );
+
+// safely tell threads that pidInUse
+// is valid and correctly set and may be compared to pid
+pthread_mutex_lock( &pidInUseMutex );
+pidInUse = pthread_self();  // setting it directly to pid is not allowed.
+pidInUseValid = TRUE;
+pthread_mutex_unlock( &pidInUseMutex );
+
+// This means that if we crash due to out-of-memory below,
+// it will be able to detect the re-entrancy and handle it above.
+
+static struct hash *perThreadVars = NULL;
+if (perThreadVars == NULL)
+    perThreadVars = hashNew(0);
+// convert the pid into a string for the hash key
+char pidStr[64];
+safef(pidStr, sizeof(pidStr), "%lld",  ptrToLL(pid));
+struct hashEl *hel = hashLookup(perThreadVars, pidStr);
+if (hel == NULL)
+    {
+    // if it is the first time, initialization the perThreadAbortVars
+    struct perThreadAbortVars *ptav;
+    AllocVar(ptav);
+    ptav->debugPushPopErr = FALSE;
+    ptav->errAbortInProgress = FALSE;
+    ptav->warnIx = 0;
+    ptav->warnArray[0] = defaultVaWarn;
+    ptav->abortIx = 0;
+    ptav->abortArray[0] = defaultAbort;
+    hel = hashAdd(perThreadVars, pidStr, ptav);
+    }
+
+// safely tell other threads that pidInUse
+// is no longer valid and may not be compared to pid
+pthread_mutex_lock( &pidInUseMutex );
+pidInUseValid = FALSE;
+pthread_mutex_unlock( &pidInUseMutex );
+
+// unlock our mutex controlling the hash of thread-specific data
+pthread_mutex_unlock( &ptavMutex );
+return (struct perThreadAbortVars *)(hel->val);
+}
+
diff --git a/gbtools/src/blatSrc/lib/errCatch.c b/gbtools/src/blatSrc/lib/errCatch.c
new file mode 100644
index 0000000..30be9b5
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/errCatch.c
@@ -0,0 +1,139 @@
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+/* errCatch - help catch errors so that errAborts aren't
+ * fatal, and warn's don't necessarily get printed immediately. 
+ * Note that error conditions caught this way will tend to
+ * leak resources unless there are additional wrappers. 
+ *
+ * Typical usage is
+ * errCatch = errCatchNew();
+ * if (errCatchStart(errCatch))
+ *     doFlakyStuff();
+ * errCatchEnd(errCatch);
+ * if (errCatch->gotError)
+ *     warn("%s", errCatch->message->string);
+ * errCatchFree(&errCatch); 
+ * cleanupFlakyStuff();
+ */
+
+#include "common.h"
+#include "errAbort.h"
+#include "dystring.h"
+#include "hash.h"
+#include <pthread.h>
+#include "errCatch.h"
+
+
+
+struct errCatch *errCatchNew()
+/* Return new error catching structure. */
+{
+struct errCatch *errCatch;
+AllocVar(errCatch);
+errCatch->message = dyStringNew(0);
+return errCatch;
+}
+
+void errCatchFree(struct errCatch **pErrCatch)
+/* Free up resources associated with errCatch */
+{
+struct errCatch *errCatch = *pErrCatch;
+if (errCatch != NULL)
+    {
+    dyStringFree(&errCatch->message);
+    freez(pErrCatch);
+    }
+}
+
+static struct errCatch **getStack()
+/* Return a pointer to the errCatch object stack for the current pthread. */
+{
+static pthread_mutex_t getStackMutex = PTHREAD_MUTEX_INITIALIZER;
+pthread_mutex_lock( &getStackMutex );
+static struct hash *perThreadStacks = NULL;
+pthread_t pid = pthread_self(); //  can be a pointer or a number
+// A true integer has function would be nicer, but this will do.  
+// Don't safef, theoretically that could abort.
+char key[64];
+snprintf(key, sizeof(key), "%lld",  ptrToLL(pid));
+key[ArraySize(key)-1] = '\0';
+if (perThreadStacks == NULL)
+    perThreadStacks = hashNew(0);
+struct hashEl *hel = hashLookup(perThreadStacks, key);
+if (hel == NULL)
+    hel = hashAdd(perThreadStacks, key, NULL);
+pthread_mutex_unlock( &getStackMutex );
+return (struct errCatch **)(&hel->val);
+}
+
+static void errCatchAbortHandler()
+/* semiAbort */
+{
+struct errCatch **pErrCatchStack = getStack(), *errCatchStack = *pErrCatchStack;
+errCatchStack->gotError = TRUE;
+longjmp(errCatchStack->jmpBuf, -1);
+}
+
+static void errCatchWarnHandler(char *format, va_list args)
+/* Write an error to top of errCatchStack. */
+{
+struct errCatch **pErrCatchStack = getStack(), *errCatchStack = *pErrCatchStack;
+errCatchStack->gotWarning = TRUE;
+dyStringVaPrintf(errCatchStack->message, format, args);
+dyStringAppendC(errCatchStack->message, '\n');
+}
+
+boolean errCatchPushHandlers(struct errCatch *errCatch)
+/* Push error handlers.  Not usually called directly. */
+{
+pushAbortHandler(errCatchAbortHandler);
+pushWarnHandler(errCatchWarnHandler);
+struct errCatch **pErrCatchStack = getStack();
+slAddHead(pErrCatchStack, errCatch);
+return TRUE;
+}
+
+void errCatchEnd(struct errCatch *errCatch)
+/* Restore error handlers and pop self off of catching stack. */
+{
+popWarnHandler();
+popAbortHandler();
+struct errCatch **pErrCatchStack = getStack(), *errCatchStack = *pErrCatchStack;
+if (errCatch != errCatchStack)
+   errAbort("Mismatch between errCatch and errCatchStack");
+*pErrCatchStack = errCatch->next;
+}
+
+void errCatchReWarn(struct errCatch *errCatch)
+/* Re-warn any warnings that happened even though no abort happened 
+ * to make them visible. */
+{
+if (errCatch->gotWarning && !errCatch->gotError)
+    {
+    warn("%s", errCatch->message->string);
+    }
+}
+
+boolean errCatchFinish(struct errCatch **pErrCatch)
+/* Finish up error catching.  Report error if there is a
+ * problem and return FALSE.  If no problem return TRUE.
+ * This handles errCatchEnd and errCatchFree. */
+{
+struct errCatch *errCatch = *pErrCatch;
+boolean ok = TRUE;
+if (errCatch != NULL)
+    {
+    errCatchEnd(errCatch);
+    if (errCatch->gotError)
+	{
+	ok = FALSE;
+	warn("%s", errCatch->message->string);
+	}
+    else
+	errCatchReWarn(errCatch);
+    errCatchFree(pErrCatch);
+    }
+return ok;
+}
+
diff --git a/gbtools/src/blatSrc/lib/fa.c b/gbtools/src/blatSrc/lib/fa.c
new file mode 100644
index 0000000..61f448b
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/fa.c
@@ -0,0 +1,648 @@
+/* Routines for reading and writing fasta format sequence files.
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "errAbort.h"
+#include "hash.h"
+#include "portable.h"
+#include "dnautil.h"
+#include "dnaseq.h"
+#include "fa.h"
+#include "linefile.h"
+
+
+boolean faReadNext(FILE *f, char *defaultName, boolean mustStartWithComment,
+                         char **retCommentLine, struct dnaSeq **retSeq) 
+/* Read next sequence from .fa file. Return sequence in retSeq.  
+ * If retCommentLine is non-null
+ * return the '>' line in retCommentLine.   
+ * The whole thing returns FALSE at end of file.  
+ * DNA chars are mapped to lower case.*/
+{
+    return faReadMixedNext(f, 0, defaultName, mustStartWithComment,
+                                        retCommentLine, retSeq);
+}
+
+boolean faReadMixedNext(FILE *f, boolean preserveCase, char *defaultName, 
+    boolean mustStartWithComment, char **retCommentLine, struct dnaSeq **retSeq)
+/* Read next sequence from .fa file. Return sequence in retSeq.  
+ * If retCommentLine is non-null return the '>' line in retCommentLine.
+ * The whole thing returns FALSE at end of file. 
+ * Contains parameter to preserve mixed case. */
+{
+char lineBuf[1024];
+int lineSize;
+char *words[1];
+int c;
+off_t offset = ftello(f);
+size_t dnaSize = 0;
+DNA *dna, *sequence;
+char *name = defaultName;
+
+if (name == NULL)
+    name = "";
+dnaUtilOpen();
+if (retCommentLine != NULL)
+    *retCommentLine = NULL;
+*retSeq = NULL;
+
+/* Skip first lines until it starts with '>' */
+for (;;)
+    {
+    if(fgets(lineBuf, sizeof(lineBuf), f) == NULL)
+        {
+        if (ferror(f))
+            errnoAbort("read of fasta file failed");
+        return FALSE;
+        }
+    lineSize = strlen(lineBuf);
+    if (lineBuf[0] == '>')
+        {
+	if (retCommentLine != NULL)
+            *retCommentLine = cloneString(lineBuf);
+        offset = ftello(f);
+        chopByWhite(lineBuf, words, ArraySize(words));
+        name = words[0]+1;
+        break;
+        }
+    else if (!mustStartWithComment)
+        {
+        if (fseeko(f, offset, SEEK_SET) < 0)
+            errnoAbort("fseek on fasta file failed");
+        break;
+        }
+    else
+        offset += lineSize;
+    }
+/* Count up DNA. */
+for (;;)
+    {
+    c = fgetc(f);
+    if (c == EOF || c == '>')
+        break;
+    if (isalpha(c))
+        {
+        ++dnaSize;
+        }
+    }
+
+if (dnaSize == 0)
+    {
+    warn("Invalid fasta format: sequence size == 0 for element %s",name);
+    }
+
+/* Allocate DNA and fill it up from file. */
+dna = sequence = needHugeMem(dnaSize+1);
+if (fseeko(f, offset, SEEK_SET) < 0)
+    errnoAbort("fseek on fasta file failed");
+for (;;)
+    {
+    c = fgetc(f);
+    if (c == EOF || c == '>')
+        break;
+    if (isalpha(c))
+        {
+        /* check for non-DNA char */
+        if (ntChars[c] == 0)
+            {
+            *dna++ = preserveCase ? 'N' : 'n';
+            }
+        else
+            {
+            *dna++ = preserveCase ? c : ntChars[c];
+            }
+        }
+    }
+if (c == '>')
+    ungetc(c, f);
+*dna = 0;
+
+*retSeq = newDnaSeq(sequence, dnaSize, name);
+if (ferror(f))
+    errnoAbort("read of fasta file failed");    
+return TRUE;
+}
+
+
+struct dnaSeq *faReadOneDnaSeq(FILE *f, char *defaultName, boolean mustStartWithComment)
+/* Read sequence from FA file. Assumes positioned at or before
+ * the '>' at start of sequence. */  
+{
+struct dnaSeq *seq;
+if (!faReadNext(f, defaultName, mustStartWithComment, NULL, &seq))
+    return NULL;
+else
+    return seq;
+}
+
+static bioSeq *nextSeqFromMem(char **pText, boolean isDna, boolean doFilter)
+/* Convert fa in memory to bioSeq.  Update *pText to point to next
+ * record.  Returns NULL when no more sequences left. */
+{
+char *name = "";
+char *s, *d;
+struct dnaSeq *seq;
+int size = 0;
+char c;
+char *filter = (isDna ? ntChars : aaChars);
+char *text = *pText;
+char *p = skipLeadingSpaces(text);
+if (p == NULL)
+    return NULL;
+dnaUtilOpen();
+if (*p == '>')
+    {
+    char *end;
+    s = strchr(p, '\n');
+    if (s != NULL) ++s;
+    name = skipLeadingSpaces(p+1);
+    end = skipToSpaces(name);
+    if (end >= s || name >= s)
+        errAbort("No name in line starting with '>'");
+    if (end != NULL)
+        *end = 0;
+    }
+else
+    {
+    s = p; 
+    if (s == NULL || s[0] == 0)
+        return NULL;
+    }
+name = cloneString(name);
+    
+d = text;
+if (s != NULL)
+    {
+    for (;;)
+	{
+	c = *s;
+	if (c == 0 || c == '>')
+	    break;
+	++s;
+	if (!isalpha(c))
+	    continue;
+	if (doFilter)
+	    {
+	    if ((c = filter[(int)c]) == 0) 
+		{
+		if (isDna)
+		    c = 'n';
+		else
+		    c = 'X';
+		}
+	    }
+	d[size++] = c;
+	}
+    }
+d[size] = 0;
+
+/* Put sequence into our little sequence structure. */
+AllocVar(seq);
+seq->name = name;
+seq->dna = text;
+seq->size = size;
+*pText = s;
+return seq;
+}
+
+bioSeq *faNextSeqFromMemText(char **pText, boolean isDna)
+/* Convert fa in memory to bioSeq.  Update *pText to point to next
+ * record.  Returns NULL when no more sequences left. */
+{
+return nextSeqFromMem(pText, isDna, TRUE);
+}
+
+bioSeq *faNextSeqFromMemTextRaw(char **pText)
+/* Same as faNextSeqFromMemText, but will leave in 
+ * letters even if they aren't in DNA or protein alphabed. */
+{
+return nextSeqFromMem(pText, TRUE, FALSE);
+}
+
+bioSeq *faSeqListFromMemText(char *text, boolean isDna)
+/* Convert fa's in memory into list of dnaSeqs. */
+{
+bioSeq *seqList = NULL, *seq;
+while ((seq = faNextSeqFromMemText(&text, isDna)) != NULL)
+    {
+    slAddHead(&seqList, seq);
+    }
+slReverse(&seqList);
+return seqList;
+}
+
+bioSeq *faSeqListFromMemTextRaw(char *text)
+/* Convert fa's in memory into list of dnaSeqs without
+ * converting chars to N's. */
+{
+bioSeq *seqList = NULL, *seq;
+while ((seq = faNextSeqFromMemTextRaw(&text)) != NULL)
+    {
+    slAddHead(&seqList, seq);
+    }
+slReverse(&seqList);
+return seqList;
+}
+
+
+bioSeq *faSeqFromMemText(char *text, boolean isDna)
+/* Convert fa in memory to bioSeq. */
+{
+return faNextSeqFromMemText(&text, isDna);
+}
+
+struct dnaSeq *faFromMemText(char *text)
+/* Return a sequence from a .fa file that's been read into
+ * a string in memory. This cannabalizes text, which should
+ * be allocated with needMem.  This buffer becomes part of
+ * the returned dnaSeq, which may be freed normally with
+ * freeDnaSeq. */
+{
+return faNextSeqFromMemText(&text, TRUE);
+}
+
+struct dnaSeq *faReadSeq(char *fileName, boolean isDna)
+/* Open fa file and read a single sequence from it. */
+{
+int maxSize = fileSize(fileName);
+int fd;
+DNA *s;
+
+if (maxSize < 0)
+    errAbort("can't open %s", fileName);
+s = needHugeMem(maxSize+1);
+fd = open(fileName, O_RDONLY);
+if (read(fd, s, maxSize) < 0)
+    errAbort("faReadSeq: read failed: %s", strerror(errno));
+close(fd);
+s[maxSize] = 0;
+return faSeqFromMemText(s, isDna);
+}
+
+struct dnaSeq *faReadDna(char *fileName)
+/* Open fa file and read a single nucleotide sequence from it. */
+{
+return faReadSeq(fileName, TRUE);
+}
+
+struct dnaSeq *faReadAa(char *fileName)
+/* Open fa file and read a peptide single sequence from it. */
+{
+return faReadSeq(fileName, FALSE);
+}
+
+static unsigned faFastBufSize = 0;
+static DNA *faFastBuf;
+
+static void expandFaFastBuf(int bufPos, int minExp)
+/* Make faFastBuf bigger. */
+{
+if (faFastBufSize == 0)
+    {
+    faFastBufSize = 64 * 1024;
+    while (minExp > faFastBufSize)
+        faFastBufSize <<= 1;
+    faFastBuf = needHugeMem(faFastBufSize);
+    }
+else
+    {
+    DNA *newBuf;
+    unsigned newBufSize = faFastBufSize + faFastBufSize;
+    while (newBufSize < minExp)
+	{
+        newBufSize <<= 1;
+	if (newBufSize <= 0)
+	    errAbort("expandFaFastBuf: integer overflow when trying to "
+		     "increase buffer size from %u to a min of %u.",
+		     faFastBufSize, minExp);
+	}
+    newBuf = needHugeMem(newBufSize);
+    memcpy(newBuf, faFastBuf, bufPos);
+    freeMem(faFastBuf);
+    faFastBuf = newBuf;
+    faFastBufSize = newBufSize;
+    }
+}
+
+void faFreeFastBuf()
+/* Free up buffers used in fa fast and speedreading. */
+{
+freez(&faFastBuf);
+faFastBufSize = 0;
+}
+
+boolean faFastReadNext(FILE *f, DNA **retDna, int *retSize, char **retName)
+/* Read in next FA entry as fast as we can. Return FALSE at EOF. 
+ * The returned DNA and name will be overwritten by the next call
+ * to this function. */
+{
+int c;
+int bufIx = 0;
+static char name[256];
+int nameIx = 0;
+boolean gotSpace = FALSE;
+
+/* Seek to next '\n' and save first word as name. */
+dnaUtilOpen();
+name[0] = 0;
+for (;;)
+    {
+    if ((c = fgetc(f)) == EOF)
+        {
+        *retDna = NULL;
+        *retSize = 0;
+        *retName = NULL;
+        return FALSE;
+        }
+    if (!gotSpace && nameIx < ArraySize(name)-1)
+        {
+        if (isspace(c))
+            gotSpace = TRUE;
+        else if (c != '>')
+            {
+            name[nameIx++] = c;
+            }
+        }
+    if (c == '\n')
+        break;
+    }
+name[nameIx] = 0;
+/* Read until next '>' */
+for (;;)
+    {
+    c = fgetc(f);
+    if (c == EOF || c == '>')
+        c = 0;
+    else if (!isalpha(c))
+        continue;
+    else
+	{
+	c = ntChars[c];
+	if (c == 0) c = 'n';
+	}
+    if (bufIx >= faFastBufSize)
+	expandFaFastBuf(bufIx, 0);
+    faFastBuf[bufIx++] = c;
+    if (c == 0)
+        {
+        *retDna = faFastBuf;
+        *retSize = bufIx-1;
+        *retName = name;
+        return TRUE;
+        }
+    }
+}
+
+
+void faWriteNext(FILE *f, char *startLine, DNA *dna, int dnaSize)
+/* Write next sequence to fa file. */
+{
+if (dnaSize == 0)
+    return;
+if (startLine != NULL)
+    fprintf(f, ">%s\n", startLine);
+writeSeqWithBreaks(f, dna, dnaSize, 50);
+}
+
+void faWrite(char *fileName, char *startLine, DNA *dna, int dnaSize)
+/* Write out FA file or die trying. */
+{
+FILE *f = mustOpen(fileName, "w");
+faWriteNext(f, startLine, dna, dnaSize);
+if (fclose(f) != 0)
+    errnoAbort("fclose failed");
+}
+
+void faWriteAll(char *fileName, bioSeq *seqList)
+/* Write out all sequences in list to file. */
+{
+FILE *f = mustOpen(fileName, "w");
+bioSeq *seq;
+
+for (seq=seqList; seq != NULL; seq = seq->next)
+    faWriteNext(f, seq->name, seq->dna, seq->size);
+if (fclose(f) != 0)
+    errnoAbort("fclose failed");
+}
+
+boolean faMixedSpeedReadNext(struct lineFile *lf, DNA **retDna, int *retSize, char **retName)
+/* Read in DNA or Peptide FA record in mixed case.   Allow any upper or lower case
+ * letter, or the dash character in. */
+{
+char c;
+int bufIx = 0;
+static char name[512];
+int lineSize, i;
+char *line;
+
+dnaUtilOpen();
+
+/* Read first line, make sure it starts with '>', and read first word
+ * as name of sequence. */
+name[0] = 0;
+if (!lineFileNext(lf, &line, &lineSize))
+    {
+    *retDna = NULL;
+    *retSize = 0;
+    return FALSE;
+    }
+if (line[0] == '>')
+    {
+    line = firstWordInLine(skipLeadingSpaces(line+1));
+    if (line == NULL)
+        errAbort("Expecting sequence name after '>' line %d of %s", lf->lineIx, lf->fileName);
+    strncpy(name, line, sizeof(name));
+    name[sizeof(name)-1] = '\0'; /* Just to make sure name is NULL terminated. */
+    }
+else
+    {
+    errAbort("Expecting '>' line %d of %s", lf->lineIx, lf->fileName);
+    }
+/* Read until next '>' */
+for (;;)
+    {
+    if (!lineFileNext(lf, &line, &lineSize))
+        break;
+    if (line[0] == '>')
+        {
+	lineFileReuse(lf);
+	break;
+	}
+    if (bufIx + lineSize >= faFastBufSize)
+	expandFaFastBuf(bufIx, lineSize);
+    for (i=0; i<lineSize; ++i)
+        {
+	c = line[i];
+	if (isalpha(c) || c == '-')
+	    faFastBuf[bufIx++] = c;
+	}
+    }
+if (bufIx >= faFastBufSize)
+    expandFaFastBuf(bufIx, 0);
+faFastBuf[bufIx] = 0;
+*retDna = faFastBuf;
+*retSize = bufIx;
+*retName = name;
+if (bufIx == 0)
+    {
+    warn("Invalid fasta format: sequence size == 0 for element %s",name);
+    }
+
+return TRUE;
+}
+
+void faToProtein(char *poly, int size)
+/* Convert possibly mixed-case protein to upper case.  Also
+ * convert any strange characters to 'X'.  Does not change size.
+ * of sequence. */
+{
+int i;
+char c;
+dnaUtilOpen();
+for (i=0; i<size; ++i)
+    {
+    if ((c = aaChars[(int)poly[i]]) == 0)
+	c = 'X';
+    poly[i] = c;
+    }
+}
+
+void faToDna(char *poly, int size)
+/* Convert possibly mixed-case DNA to lower case.  Also turn
+ * any strange characters to 'n'.  Does not change size.
+ * of sequence. */
+{
+int i;
+char c;
+dnaUtilOpen();
+for (i=0; i<size; ++i)
+    {
+    if ((c = ntChars[(int)poly[i]]) == 0)
+	c = 'n';
+    poly[i] = c;
+    }
+}
+
+boolean faSomeSpeedReadNext(struct lineFile *lf, DNA **retDna, int *retSize, char **retName, boolean isDna)
+/* Read in DNA or Peptide FA record. */
+{
+char *poly;
+int size;
+
+if (!faMixedSpeedReadNext(lf, retDna, retSize, retName))
+    return FALSE;
+size = *retSize;
+poly = *retDna;
+if (isDna)
+    faToDna(poly, size);
+else
+    faToProtein(poly, size);
+return TRUE;
+}
+
+boolean faPepSpeedReadNext(struct lineFile *lf, DNA **retDna, int *retSize, char **retName)
+/* Read in next peptide FA entry as fast as we can.  */
+{
+return faSomeSpeedReadNext(lf, retDna, retSize, retName, FALSE);
+}
+
+boolean faSpeedReadNext(struct lineFile *lf, DNA **retDna, int *retSize, char **retName)
+/* Read in next FA entry as fast as we can. Faster than that old,
+ * pokey faFastReadNext. Return FALSE at EOF. 
+ * The returned DNA and name will be overwritten by the next call
+ * to this function. */
+{
+return faSomeSpeedReadNext(lf, retDna, retSize, retName, TRUE);
+}
+
+static struct dnaSeq *faReadAllMixableInLf(struct lineFile *lf, 
+	boolean isDna, boolean mixed)
+/* Return list of all sequences from open fa file. 
+ * Mixed case parameter overrides isDna.  If mixed is false then
+ * will return DNA in lower case and non-DNA in upper case. */
+{
+struct dnaSeq *seqList = NULL, *seq;
+DNA *dna;
+char *name;
+int size;
+boolean ok;
+
+for (;;)
+    {
+    if (mixed)
+        ok = faMixedSpeedReadNext(lf, &dna, &size, &name);
+    else
+        ok = faSomeSpeedReadNext(lf, &dna, &size, &name, isDna);
+    if (!ok)
+        break;
+    AllocVar(seq);
+    seq->name = cloneString(name);
+    seq->size = size;
+    seq->dna = cloneMem(dna, size+1);
+    slAddHead(&seqList, seq);
+    }
+slReverse(&seqList);
+faFreeFastBuf();
+return seqList;
+}
+
+static struct dnaSeq *faReadAllSeqMixable(char *fileName, boolean isDna, boolean mixed)
+/* Return list of all sequences in FA file. 
+ * Mixed case parameter overrides isDna.  If mixed is false then
+ * will return DNA in lower case and non-DNA in upper case. */
+{
+struct lineFile *lf = lineFileOpen(fileName, FALSE);
+struct dnaSeq *seqList = faReadAllMixableInLf(lf, isDna, mixed);
+lineFileClose(&lf);
+return seqList;
+}
+
+struct hash *faReadAllIntoHash(char *fileName, enum dnaCase dnaCase)
+/* Return hash of all sequences in FA file.  */
+{
+boolean isDna = (dnaCase == dnaLower);
+boolean isMixed = (dnaCase == dnaMixed);
+struct dnaSeq *seqList = faReadAllSeqMixable(fileName, isDna, isMixed);
+struct hash *hash = hashNew(18);
+struct dnaSeq *seq;
+for (seq = seqList; seq != NULL; seq = seq->next)
+    {
+    if (hashLookup(hash, seq->name))
+        errAbort("%s duplicated in %s", seq->name, fileName);
+    hashAdd(hash, seq->name, seq);
+    }
+return hash;
+}
+
+
+struct dnaSeq *faReadAllSeq(char *fileName, boolean isDna)
+/* Return list of all sequences in FA file. */
+{
+return faReadAllSeqMixable(fileName, isDna, FALSE);
+}
+
+struct dnaSeq *faReadAllDna(char *fileName)
+/* Return list of all DNA sequences in FA file. */
+{
+return faReadAllSeq(fileName, TRUE);
+}
+
+struct dnaSeq *faReadAllPep(char *fileName)
+/* Return list of all peptide sequences in FA file. */
+{
+return faReadAllSeq(fileName, FALSE);
+}
+
+struct dnaSeq *faReadAllMixed(char *fileName)
+/* Read in mixed case fasta file, preserving case. */
+{
+return faReadAllSeqMixable(fileName, FALSE, TRUE);
+}
+
+struct dnaSeq *faReadAllMixedInLf(struct lineFile *lf)
+/* Read in mixed case sequence from open fasta file. */
+{
+return faReadAllMixableInLf(lf, FALSE, TRUE);
+}
diff --git a/gbtools/src/blatSrc/lib/ffAli.c b/gbtools/src/blatSrc/lib/ffAli.c
new file mode 100644
index 0000000..122e1d6
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/ffAli.c
@@ -0,0 +1,185 @@
+/* Some relatively small utility functions that act on ffAlis.
+ * (Separated from fuzzyFinder.c so people can do light ffAli 
+ * work without including 100k of fuzzyFinder object code.) 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "dnautil.h"
+#include "fuzzyFind.h"
+
+
+void ffFreeAli(struct ffAli **pAli)
+/* Dispose of memory gotten from fuzzyFind(). */
+{
+struct ffAli *ali = *pAli;
+if (ali != NULL)
+    {
+    while (ali->right)
+        ali = ali->right;
+    slFreeList(&ali);
+    }
+*pAli = NULL;
+}
+
+int ffOneIntronOrientation(struct ffAli *left, struct ffAli *right)
+/* Return 1 for GT/AG intron between left and right, -1 for CT/AC, 0 for no
+ * intron. */
+{
+if (left->nEnd != right->nStart)
+    return 0;
+return intronOrientation(left->hEnd, right->hStart);
+}
+
+int ffIntronOrientation(struct ffAli *ali)
+/* Return + for positive orientation overall, - for negative,
+ * 0 if can't tell. */
+{
+struct ffAli *left = ali, *right;
+int orient = 0;
+
+if (left != NULL)
+    {
+    while((right = left->right) != NULL)
+	{
+	orient += intronOrientation(left->hEnd, right->hStart);
+	left = right;
+	}
+    }
+return orient;
+}
+
+struct ffAli *ffRightmost(struct ffAli *ff)
+/* Return rightmost block of alignment. */
+{
+while (ff->right != NULL)
+    ff = ff->right;
+return ff;
+}
+
+struct ffAli *ffMakeRightLinks(struct ffAli *rightMost)
+/* Given a pointer to the rightmost block in an alignment
+ * which has all of the left pointers filled in, fill in
+ * the right pointers and return the leftmost block. */
+{
+struct ffAli *ff, *last = NULL;
+
+for (ff = rightMost; ff != NULL; ff = ff->left)
+    {
+    ff->right = last;
+    last = ff;
+    }
+return last;
+}
+
+
+static int countGoodStart(struct ffAli *ali)
+/* Return number of perfect matchers at start. */
+{
+DNA *n = ali->nStart;
+DNA *h = ali->hStart;
+int count = ali->nEnd - ali->nStart;
+int i;
+for (i=0; i<count; ++i)
+    {
+    if (*n++ != *h++)
+        break;
+    }
+return i;
+}
+
+static int countGoodEnd(struct ffAli *ali)
+/* Return number of perfect matchers at start. */
+{
+DNA *n = ali->nEnd;
+DNA *h = ali->hEnd;
+int count = ali->nEnd - ali->nStart;
+int i;
+for (i=0; i<count; ++i)
+    {
+    if (*--n != *--h)
+        break;
+    }
+return i;
+}
+
+void ffCountGoodEnds(struct ffAli *aliList)
+/* Fill in the goodEnd and badEnd scores. */
+{
+struct ffAli *ali;
+for (ali = aliList; ali != NULL; ali = ali->right)
+    {
+    ali->startGood = countGoodStart(ali);
+    ali->endGood = countGoodEnd(ali);
+    }
+}
+
+int ffAliCount(struct ffAli *d)
+/* How many blocks in alignment? */
+{
+int acc = 0;
+while (d != NULL)
+    {
+    ++acc;
+    d = d->right;
+    }
+return acc;
+}
+
+struct ffAli *ffAliFromSym(int symCount, char *nSym, char *hSym,
+	struct lm *lm, char *nStart, char *hStart)
+/* Convert symbol representation of alignments (letters plus '-')
+ * to ffAli representation.  If lm is nonNULL, ffAli result 
+ * will be lmAlloced, else it will be needMemed. This routine
+ * depends on nSym/hSym being zero terminated. */
+{
+struct ffAli *ffList = NULL, *ff = NULL;
+char n, h;
+int i;
+
+for (i=0; i<=symCount; ++i)
+    {
+    boolean isGap;
+    n = nSym[i];
+    h = hSym[i];
+    isGap = (n == '-' || n == 0 || h == '-' || h == 0);
+    if (isGap)
+	{
+	if (ff != NULL)
+	    {
+	    ff->nEnd = nStart;
+	    ff->hEnd = hStart;
+	    ff->left = ffList;
+	    ffList = ff;
+	    ff = NULL;
+	    }
+	}
+    else
+	{
+	if (ff == NULL)
+	    {
+	    if (lm != NULL)
+		{
+		lmAllocVar(lm, ff);
+		}
+	    else
+		{
+		AllocVar(ff);
+		}
+	    ff->nStart = nStart;
+	    ff->hStart = hStart;
+	    }
+	}
+    if (n != '-')
+	{
+	++nStart;
+	}
+    if (h != '-')
+	{
+	++hStart;
+	}
+    }
+ffList = ffMakeRightLinks(ffList);
+return ffList;
+}
diff --git a/gbtools/src/blatSrc/lib/ffScore.c b/gbtools/src/blatSrc/lib/ffScore.c
new file mode 100644
index 0000000..a4801ee
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/ffScore.c
@@ -0,0 +1,215 @@
+/* ffScore - stuff to score ffAli alignments. */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "dnautil.h"
+#include "obscure.h"
+#include "fuzzyFind.h"
+
+
+int ffIntronMax = ffIntronMaxDefault;
+
+void setFfIntronMax(int value)
+{
+ffIntronMax = value;
+}
+
+int ffScoreMatch(DNA *a, DNA *b, int size)
+/* Compare two pieces of DNA base by base. Total mismatches are
+ * subtracted from total matches and returned as score. 'N's 
+ * neither hurt nor help score. */
+{
+int i;
+int score = 0;
+for (i=0; i<size; ++i)
+    {
+    DNA aa = a[i];
+    DNA bb = b[i];
+    if (aa == 'n' || bb == 'n')
+        continue;
+    if (aa == bb)
+        ++score;
+    else
+        score -= 1;
+    }
+return score;
+}
+
+int ffCalcCdnaGapPenalty(int hGap, int nGap)
+/* Return gap penalty for given h and n gaps. */
+{
+int acc = 2;
+if (hGap > 400000)	/* Discourage really long introns. */
+    {
+    acc += (hGap - 400000)/3000;
+    if (hGap > ffIntronMax)
+        acc += (hGap - ffIntronMax)/2000;
+    }
+if (hGap < 0)   /* Discourage jumping back in haystack. */
+    {
+    hGap = -8*hGap;
+    if (hGap > 48)
+        hGap = (hGap*hGap);
+    }
+if (nGap < 0)   /* Jumping back in needle gets rid of previous alignment. */
+    {
+    acc += -nGap;
+    nGap = 0;
+    }
+acc += digitsBaseTwo(hGap)/2;
+if (nGap != 0)
+    {
+    acc += digitsBaseTwo(nGap);
+    }
+else
+    {
+    if (hGap > 30)
+	acc -= 1;
+    }
+return acc;
+}
+
+static int calcTightGap(int hGap, int nGap)
+/* Figure out gap penalty using tight model (gaps bad!) */
+{
+if (hGap == 0 && nGap == 0)
+    return 0;
+else
+    {
+    int overlap = min(hGap, nGap);
+    int penalty = 8;
+    if (overlap < 0)
+	overlap = 0;
+
+    if (hGap < 0)
+	hGap = -8*hGap;
+    if (nGap < 0)
+	nGap = -2*nGap;
+    penalty += (hGap-overlap + nGap-overlap) + overlap;
+    return penalty;
+    }
+}
+
+static int calcLooseGap(int hGap, int nGap)
+/* Figure out gap penalty using loose model (gaps not so bad) */
+{
+if (hGap == 0 && nGap == 0)
+    return 0;
+else
+    {
+    int overlap = min(hGap, nGap);
+    int penalty = 8;
+    if (overlap < 0)
+	overlap = 0;
+
+    if (hGap < 0)
+	hGap = -8*hGap;
+    if (nGap < 0)
+	nGap = -2*nGap;
+    penalty += log(hGap-overlap+1) + log(nGap-overlap+1);
+    return penalty;
+    }
+}
+
+
+int ffCalcGapPenalty(int hGap, int nGap, enum ffStringency stringency)
+/* Return gap penalty for given h and n gaps. */
+{
+switch (stringency)
+    {
+    case ffCdna:
+	return ffCalcCdnaGapPenalty(hGap, nGap);
+    case ffTight:
+	return calcTightGap(hGap,nGap);
+    case ffLoose:
+	return calcLooseGap(hGap,nGap);
+    default:
+        errAbort("Unknown stringency type %d", stringency);
+	return 0;
+    }
+}
+
+
+int ffCdnaGapPenalty(struct ffAli *left, struct ffAli *right)
+/* What is penalty for gap between two. */
+{
+int hGap = right->hStart - left->hEnd;
+int nGap = right->nStart - left->nEnd;
+return ffCalcCdnaGapPenalty(hGap, nGap);
+}
+
+int ffGapPenalty(struct ffAli *left, struct ffAli *right, enum ffStringency stringency)
+/* What is penalty for gap between two given stringency? */
+{
+int hGap = right->hStart - left->hEnd;
+int nGap = right->nStart - left->nEnd;
+return ffCalcGapPenalty(hGap, nGap, stringency);
+}
+
+int ffScoreSomeAlis(struct ffAli *ali, int count, enum ffStringency stringency)
+/* Figure out score of count alis. */
+{
+int score = 0;
+int oneScore;
+
+while (--count >= 0)
+    {
+    int len = ali->hEnd - ali->hStart;
+    struct ffAli *right = ali->right;
+    oneScore = dnaScoreMatch(ali->hStart, ali->nStart, len);
+    score += oneScore;
+    if (count > 0)  /* Calculate gap penalty */
+        score -= ffGapPenalty(ali, right,stringency);
+    ali = right;
+    }
+return score;
+}
+
+int ffScoreSomething(struct ffAli *ali, enum ffStringency stringency,
+   boolean isProt)
+/* Score alignment. */
+{
+int score = 0;
+int oneScore;
+int (*scoreMatch)(char *a, char *b, int size);
+
+if (ali == NULL)
+    return -0x7FFFFFFF;
+scoreMatch = (isProt ? aaScoreMatch : dnaScoreMatch );
+while (ali->left != NULL) ali = ali->left;
+while (ali != NULL)
+    {
+    int len = ali->hEnd - ali->hStart;
+    struct ffAli *right = ali->right;
+    oneScore = scoreMatch(ali->hStart, ali->nStart, len);
+    score += oneScore;
+    if (right)  /* Calculate gap penalty */
+        {
+        score -= ffGapPenalty(ali, right, stringency);
+        }
+    ali = right;
+    }
+return score;
+}
+
+int ffScore(struct ffAli *ali, enum ffStringency stringency)
+/* Score alignment. */
+{
+return ffScoreSomething(ali, stringency, FALSE);
+}
+
+int ffScoreCdna(struct ffAli *ali)
+/* Figure out overall score of this alignment. 
+ * Perfect match is number of bases in needle. */
+{
+return ffScore(ali, ffCdna);
+}
+
+int ffScoreProtein(struct ffAli *ali, enum ffStringency stringency)
+/* Figure out overall score of protein alignment. */
+{
+return ffScoreSomething(ali, stringency, TRUE);
+}
+
diff --git a/gbtools/src/blatSrc/lib/fieldedTable.c b/gbtools/src/blatSrc/lib/fieldedTable.c
new file mode 100644
index 0000000..2c9fb17
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/fieldedTable.c
@@ -0,0 +1,124 @@
+/* fieldedTable - a table composed of untyped strings in memory.  Includes names for each
+ * field. This is a handy way of storing small-to-medium tab-separated files that begin
+ * with a "#list of fields" line among other things. */
+
+/* Copyright (C) 2013 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "localmem.h"
+#include "linefile.h"
+#include "fieldedTable.h"
+
+struct fieldedTable *fieldedTableNew(char *name, char **fields, int fieldCount)
+/* Create a new empty fieldedTable with given name, often a file name. */
+{
+struct fieldedTable *table;
+AllocVar(table);
+struct lm *lm = table->lm = lmInit(0);
+table->name = lmCloneString(lm, name);
+table->cursor = &table->rowList;
+table->fieldCount = fieldCount;
+int i;
+char **row = lmAllocArray(lm, table->fields, fieldCount);
+for (i=0; i<fieldCount; ++i)
+    {
+    row[i] = lmCloneString(lm, fields[i]);
+    }
+return table;
+}
+
+void fieldedTableFree(struct fieldedTable **pTable)
+/* Free up memory resources associated with table. */
+{
+struct fieldedTable *table = *pTable;
+if (table != NULL)
+    {
+    lmCleanup(&table->lm);
+    freez(pTable);
+    }
+}
+
+struct fieldedRow *fieldedTableAdd(struct fieldedTable *table,  char **row, int rowSize, int id)
+/* Create a new row and add it to table.  Return row. */
+{
+/* Make sure we got right number of fields. */
+if (table->fieldCount != rowSize)
+    errAbort("%s starts with %d fields, but at line %d has %d fields instead",
+	    table->name, table->fieldCount, id, rowSize);
+
+/* Allocate field from local memory and start filling it in. */
+struct lm *lm = table->lm;
+struct fieldedRow *fr;
+lmAllocVar(lm, fr);
+lmAllocArray(lm, fr->row, rowSize);
+fr->id = id;
+int i;
+for (i=0; i<rowSize; ++i)
+    fr->row[i] = lmCloneString(lm, row[i]);
+
+/* Add it to end of list using cursor to avoid slReverse hassles. */
+*(table->cursor) = fr;
+table->cursor = &fr->next;
+
+return fr;
+}
+
+struct fieldedTable *fieldedTableFromTabFile(char *fileName, char *reportFileName, 
+    char *requiredFields[], int requiredCount)
+/* Read table from tab-separated file with a #header line that defines the fields.  Ensures
+ * all requiredFields (if any) are present.  The reportFileName is just used for error reporting and 
+ * should be NULL for most purposes.  This is used by edwSubmit though which
+ * first copies to a local file, and we want to report errors from the remote file. 
+ * We do know the remote file exists at least, because we just copied it. */
+{
+/* Open file with fileName */
+struct lineFile *lf = lineFileOpen(fileName, TRUE);
+
+/* Substitute in reportFileName for error reporting */
+if (reportFileName != NULL)
+    {
+    if (differentString(reportFileName, fileName))
+        {
+	freeMem(lf->fileName);
+	lf->fileName = cloneString(reportFileName);
+	}
+    }
+else
+    {
+    reportFileName = fileName;
+    }
+
+/* Get first line and turn it into field list. */
+char *line;
+if (!lineFileNext(lf, &line, NULL))
+   errAbort("%s is empty", reportFileName);
+if (line[0] != '#')
+   errAbort("%s must start with '#' and field names on first line", reportFileName);
+line = skipLeadingSpaces(line+1);
+int fieldCount = chopByChar(line, '\t', NULL, 0);
+char *fields[fieldCount];
+chopTabs(line, fields);
+
+/* Make sure that all required fields are present. */
+int i;
+for (i = 0; i < requiredCount; ++i)
+    {
+    char *required = requiredFields[i];
+    int ix = stringArrayIx(required, fields, fieldCount);
+    if (ix < 0)
+        errAbort("%s is missing required field '%s'", reportFileName, required);
+    }
+
+/* Create fieldedTable . */
+struct fieldedTable *table = fieldedTableNew(reportFileName, fields, fieldCount);
+while (lineFileRowTab(lf, fields))
+    {
+    fieldedTableAdd(table, fields, fieldCount, lf->lineIx);
+    }
+
+/* Clean up and go home. */
+lineFileClose(&lf);
+return table;
+}
+
diff --git a/gbtools/src/blatSrc/lib/filePath.c b/gbtools/src/blatSrc/lib/filePath.c
new file mode 100644
index 0000000..68bf0f1
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/filePath.c
@@ -0,0 +1,134 @@
+/* filePath - stuff to handle file name parsing. */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "filePath.h"
+
+
+void undosPath(char *path)
+/* Convert '\' to '/' in path. */
+{
+subChar(path, '\\', '/');
+}
+
+void splitPath(char *path, char dir[PATH_LEN], char name[FILENAME_LEN],
+	       char extension[FILEEXT_LEN])
+/* Split a full path into components.  The dir component will include the
+ * trailing / if any.  The extension component will include the starting
+ * . if any.   Pass in NULL for dir, name, or extension if you don't care about
+ * that part. */
+{
+char *dirStart, *nameStart, *extStart, *extEnd;
+int dirSize, nameSize, extSize;
+
+undosPath(path);
+dirStart = path;
+nameStart = strrchr(path,'/');
+if (nameStart == NULL)
+    nameStart = path;
+else
+    nameStart += 1;
+extStart = strrchr(nameStart, '.');
+if (extStart == NULL)
+    extStart = nameStart + strlen(nameStart);
+extEnd = extStart + strlen(extStart);
+if ((dirSize = (nameStart - dirStart)) >= PATH_LEN)
+    errAbort("Directory too long in %s", path);
+if ((nameSize = (extStart - nameStart)) >= FILENAME_LEN)
+    errAbort("Name too long in %s", path);
+if ((extSize = (extEnd - extStart)) >= FILEEXT_LEN)
+    errAbort("Extension too long in %s", path);
+if (dir != NULL)
+    {
+    memcpy(dir, dirStart, dirSize);
+    dir[dirSize] = 0;
+    }
+if (name != NULL)
+    {
+    memcpy(name, nameStart, nameSize);
+    name[nameSize] = 0;
+    }
+if (extension != NULL)
+    {
+    memcpy(extension, extStart, extSize);
+    extension[extSize] = 0;
+    }
+}
+
+static char *findSlashBefore(char *start, char *e)
+/* Return first slash before s (but not before start) */
+{
+while (--e >= start)
+    {
+    if (*e == '/')
+         return e;
+    }
+return start;
+}
+
+char *expandRelativePath(char *baseDir, char *relPath)
+/* Expand relative path to more absolute one. */
+{
+if (relPath[0] == '/')
+   // hey, it's absolute actually... 
+   return cloneString(relPath);
+
+char *e = baseDir + strlen(baseDir);
+int slashCount;
+char *rel = relPath;
+char *result;
+int size, baseSize;
+undosPath(baseDir);
+undosPath(relPath);
+slashCount = countChars(baseDir, '/');
+if (baseDir[0] == 0)
+    slashCount = -1;
+while (startsWith("../", rel))
+    {
+    if (slashCount < 0)
+        {
+	warn("More ..'s in \"%s\" than directories in \"%s\"", relPath, baseDir);
+	return NULL;
+	}
+    else if (slashCount == 0)
+        e = baseDir;
+    else
+        e = findSlashBefore(baseDir, e);
+    slashCount -= 1;
+    rel += 3;
+    }
+baseSize = e - baseDir;
+size = strlen(rel) + 1;
+if (baseSize > 0)
+    size += baseSize + 1;
+if (baseSize > 0)
+    {
+    result = needMem(size);
+    memcpy(result, baseDir, baseSize);
+    result[baseSize] = '/';
+    strcpy(result + baseSize + 1, rel);
+    }
+else
+    result = cloneString(rel);
+return result;
+}
+
+char *pathRelativeToFile(char *baseFile, char *relPath)
+/* Given a base file name and a path relative to that, return
+ * relative path interpreted as if it were seen from the
+ * same directory holding the baseFile.  
+ *   An example of using this would be in processing include
+ * files.  In this case the baseFile would be the current
+ * source file, and the relPath would be from the include
+ * statement.  The returned result could then be used to
+ * open the include file. */
+{
+char dir[PATH_LEN];
+splitPath(baseFile, dir, NULL, NULL);
+int dirLen = strlen(dir);
+if (dirLen > 0 && dir[dirLen-1] == '/')
+     dir[dirLen-1] = 0;
+return expandRelativePath(dir, relPath);
+}
diff --git a/gbtools/src/blatSrc/lib/fixColor.c b/gbtools/src/blatSrc/lib/fixColor.c
new file mode 100644
index 0000000..4d40720
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/fixColor.c
@@ -0,0 +1,23 @@
+/* Fixed colors - always in color map. */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+#include "common.h"
+#include "memgfx.h"
+
+
+struct rgbColor mgFixedColors[9] = {
+/* These correspond to MG_WHITE, MG_BLACK, etc. */
+    { 255, 255, 255},
+    { 0, 0, 0},
+    { 255, 0, 0},
+    { 0, 255, 0},
+    { 0, 0, 255},
+    { 0, 255, 255},
+    { 255, 0, 255},
+    { 255, 255, 0},
+    { 140, 140, 140},
+};
+
+
+
diff --git a/gbtools/src/blatSrc/lib/flydna.c b/gbtools/src/blatSrc/lib/flydna.c
new file mode 100644
index 0000000..f2416d1
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/flydna.c
@@ -0,0 +1,112 @@
+/* flydna.c - routines for accessing fly genome and cDNA sequences. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "snof.h"
+#include "dnautil.h"
+#include "dnaseq.h"
+#include "fa.h"
+#include "nt4.h"
+#include "cda.h"
+#include "wormdna.h"
+#include "flydna.h"
+
+
+static char *chromNames[] = {"adh"};
+static char *ntFileNames[] = {"c:/biodata/fly/chrom/adh.nt"};
+
+void flyLoadNt4Genome(struct nt4Seq ***retNt4Seq, int *retNt4Count)
+/* Load up entire packed fly genome into memory. */
+{
+struct nt4Seq **pSeq;
+int i;
+
+pSeq = needMem(ArraySize(ntFileNames) * sizeof(pSeq[0]) );
+for (i=0; i<ArraySize(ntFileNames); ++i)
+	{
+	pSeq[i] = loadNt4(ntFileNames[i], chromNames[i]);
+	}
+*retNt4Seq = pSeq;
+*retNt4Count = ArraySize(ntFileNames);
+}
+
+void flyFreeNt4Genome(struct nt4Seq ***pNt4Seq)
+/* Free up packed fly genome. */
+{
+struct nt4Seq **pSeq;
+int i;
+
+if ((pSeq = *pNt4Seq) == NULL)
+	return;
+for (i=0; i<ArraySize(ntFileNames); ++i)
+	freeNt4(&pSeq[i]);
+freez(pNt4Seq);
+}
+
+void flyChromNames(char ***retNames, int *retNameCount)
+/* Get list of fly chromosome names. */
+{
+*retNames = chromNames;
+*retNameCount = ArraySize(chromNames);
+}
+
+void flyFaCommentIntoInfo(char *faComment, struct wormCdnaInfo *retInfo)
+/* Process line from .fa file containing information about cDNA into binary
+ * structure. */
+{
+if (retInfo)
+    {
+    char *s;
+    zeroBytes(retInfo, sizeof(*retInfo));
+    /* Separate out first word and use it as name. */
+    s = strchr(faComment, ' ');
+    if (s != NULL)
+	    *s++ = 0;
+    retInfo->name = faComment+1;
+    retInfo->motherString = faComment;
+	s = strrchr(retInfo->name, '.');
+	retInfo->orientation = '+';
+	if (s != NULL)
+		retInfo->orientation = (s[1] == '3' ? '-' : '+');
+    }
+}
+
+
+boolean flyCdnaSeq(char *name, struct dnaSeq **retDna, struct wormCdnaInfo *retInfo)
+/* Get a single fly cDNA sequence. Optionally (if retInfo is non-null) get additional
+ * info about the sequence. */
+{
+long offset;
+char *faComment;
+char **pFaComment = (retInfo == NULL ? NULL : &faComment);
+static struct snof *cdnaSnof = NULL;
+static FILE *cdnaFa;
+
+if (cdnaSnof == NULL)
+	cdnaSnof = snofMustOpen("c:/biodata/fly/cDna/allcdna");
+if (cdnaFa == NULL)
+	cdnaFa = mustOpen("c:/biodata/fly/cDna/allcdna.fa", "rb");
+if (!snofFindOffset(cdnaSnof, name, &offset))
+    return FALSE;
+fseek(cdnaFa, offset, SEEK_SET);
+if (!faReadNext(cdnaFa, name, TRUE, pFaComment, retDna))
+    return FALSE;
+flyFaCommentIntoInfo(faComment, retInfo);
+return TRUE;
+}
+
+
+char *flyFeaturesDir()
+/* Return the features directory. (Includes trailing slash.) */
+{
+return "C:/biodata/fly/features/";
+}
+
+FILE *flyOpenGoodAli()
+/* Opens good alignment file and reads signature. 
+ * (You can then cdaLoadOne() it.) */
+{
+return cdaOpenVerify("C:/biodata/fly/cDNA/good.ali");
+}
diff --git a/gbtools/src/blatSrc/lib/fof.c b/gbtools/src/blatSrc/lib/fof.c
new file mode 100644
index 0000000..b0c8700
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/fof.c
@@ -0,0 +1,581 @@
+/* fofFa - create a fof index for a list of FA files. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "localmem.h"
+#include "sig.h"
+#include "fof.h"
+
+
+struct fofRecord
+/* This holds a record of an index file. */
+    {
+    bits32 offset;  /* Start offset within file. Must be first element.*/
+    bits32 size;    /* Sizer within file. */
+    UBYTE fileIx;   /* Which file it's in. */
+    char name[1];   /* Dynamically allocated to fit actual size. */
+    };
+
+struct fof
+/* Manage a file offset file - an index which includes the file,
+ * the offset, and the size of each item. */
+    {
+    char *name;                  /* Name of fof given to fofOpen. */
+    char *relDir;                /* Directory to apply to index files. */
+    char **fileNames;            /* Names of files being indexed. */
+    FILE **files;                /* Possibly null file handles of files being indexed. */
+    FILE *f;                     /* Index file handle. */
+    int fileCount;               /* The number of files being indexed. */
+    int endIx;                   /* Last index. */
+    int maxNameSize;             /* Size allocated for index field in index. */
+    int itemSize;                /* Size of index record. */
+    long headSize;               /* Offset to first index record. */
+    struct fofRecord *rec;       /* Buffer space for one index record. */
+    struct fofRecord *first;     /* First record. */
+    struct fofRecord *last;      /* Last record. */
+    };
+
+
+static void readStringZ(FILE *f, char *s, int maxLen)
+/* Read in a zero terminated string from file. */
+{
+int c;
+int ix;
+maxLen -= 1;    /* room for zero tag. */
+
+for (ix = 0; ix <maxLen; ++ix)
+    {
+    if ((c = fgetc(f)) == EOF)
+        errAbort("Unexpected EOF in readStringZ");
+    if (c == 0)
+        break;
+    s[ix] = c;
+    }
+if (ix == maxLen)
+    errAbort("String too long in readStringZ");
+s[ix] = 0;
+}
+
+
+struct fof *fofOpen(char *fofName, char *fofDir)
+/* Open up the named fof. fofDir may be NULL.  It should include 
+ * trailing '/' if non-null. */
+{
+bits32 sig, elCount;
+bits16 fileCount, maxNameSize;
+FILE *f;
+char nameBuf[512];
+char pathBuf[512];
+struct fof *fof;
+int i;
+
+/* Handle directory either being something or NULL, and
+ * either ending with a slash or not. */
+if (fofDir == NULL)
+    {
+    fofDir = "";
+    }
+
+/* Open file, verify signature. */
+safef(pathBuf, sizeof(pathBuf), "%s%s", fofDir, fofName);
+f = mustOpen(pathBuf, "rb");
+mustReadOne(f, sig);
+if (sig != fofSig)
+    errAbort("Bad signature on %s", pathBuf);
+mustReadOne(f, elCount);
+
+/* Read size info and allocate basic fof structure. */
+mustReadOne(f, fileCount);
+if (fileCount > 12)
+    warn("%d files indexed in fof %s!?", fileCount, fofName);
+mustReadOne(f, maxNameSize);
+if (maxNameSize > 40)
+    warn("%d maxName size in fof %s!?", maxNameSize, fofName);
+AllocVar(fof);
+fof->name = cloneString(fofName);
+fof->relDir = cloneString(fofDir);
+fof->fileNames = needMem(fileCount * sizeof(fof->fileNames[0]));
+fof->files = needMem(fileCount * sizeof(fof->files[0]));
+fof->f = f;
+fof->fileCount = fileCount;
+fof->endIx = elCount-1;
+fof->maxNameSize = maxNameSize;
+fof->itemSize = sizeof(bits32) +sizeof(bits32) + sizeof(UBYTE) + maxNameSize;
+fof->rec = needMem(sizeof(*fof->rec) + maxNameSize);
+fof->first = needMem(sizeof(*fof->rec) + maxNameSize);
+fof->last = needMem(sizeof(*fof->rec) + maxNameSize);
+
+/* Read in names of files being indexed and figure header size. */
+for (i=0; i<fileCount; ++i)
+    {
+    readStringZ(f, nameBuf, sizeof(nameBuf));
+    safef(pathBuf, sizeof(pathBuf), "%s%s", fofDir, nameBuf);
+    fof->fileNames[i] = cloneString(pathBuf);
+    }
+fof->headSize = ftell(f);
+
+/* Read in first and last records. */
+mustRead(f, fof->first, fof->itemSize);
+fseek(f, fof->headSize + fof->endIx*fof->itemSize, SEEK_SET);
+mustRead(f, fof->last, fof->itemSize);
+
+/* All done (files will be opened as needed, not here). */
+return fof;
+}
+
+
+void fofClose(struct fof **pFof)
+/* Close down the named fof. */
+{
+struct fof *fof = *pFof;
+if (fof != NULL)
+    {
+    int fileCount = fof->fileCount;
+    int i;
+
+    for (i=0; i<fileCount; ++i)
+        {
+        freeMem(fof->fileNames[i]);
+        carefulClose(&fof->files[i]);
+        }
+    freeMem(fof->name);
+    freeMem(fof->fileNames);
+    freeMem(fof->files);
+    freeMem(fof->rec);
+    freeMem(fof->first);
+    freeMem(fof->last);
+    carefulClose(&fof->f);
+    freez(pFof);
+    }
+}
+
+int fofElementCount(struct fof *fof)
+/* How many names are in fof file? */
+{
+return fof->endIx + 1;
+}
+
+static void fofRecToPos(struct fof *fof, int ix, struct fofRecord *rec, struct fofPos *pos)
+/* Convert from record to position, opening file for entry if necessary. */
+{
+int fileIx = rec->fileIx;
+FILE *f;
+
+pos->indexIx = ix;
+pos->offset = rec->offset;
+pos->size = rec->size;
+pos->fileName = fof->fileNames[fileIx];
+if ((f = fof->files[fileIx]) != NULL)
+    {
+    pos->f = f;
+    }
+else
+    {
+    pos->f = fof->files[fileIx] = mustOpen(fof->fileNames[fileIx], "rb");
+    }
+return;
+}
+
+
+static int fofCmp(char *prefix, char *name, int maxSize, boolean isPrefix)
+/* Compare either prefix of whole string to name. */
+{
+if (isPrefix)
+    return memcmp(prefix, name, maxSize);
+else
+    return strcmp(prefix, name);
+}
+
+static boolean fofSearch(struct fof *fof, char *name, int nameSize, 
+    boolean isPrefix, struct fofPos *retPos)
+/* Find index of name by binary search.
+ * Returns FALSE if no such name in the index file. */
+ {
+struct fofRecord *rec = fof->rec;
+int startIx, endIx, midIx;
+int cmp;
+int itemSize = fof->itemSize;
+FILE *f = fof->f;
+int headSize = fof->headSize;
+
+/* Truncate name size if necessary. */
+if (nameSize > fof->maxNameSize)
+    nameSize = fof->maxNameSize;
+
+/* Set up endpoints of binary search */
+startIx = 0;
+endIx = fof->endIx;
+
+/* Check for degenerate initial case */
+if (fofCmp(name, fof->first->name, nameSize, isPrefix) == 0)
+    {
+    fofRecToPos(fof, startIx, fof->first, retPos);
+    return TRUE;
+    }
+if (fofCmp(name, fof->last->name, nameSize, isPrefix) == 0)
+    {
+    fofRecToPos(fof, endIx, fof->last, retPos);
+    return TRUE;
+    }
+
+/* Do binary search. */
+for (;;)
+    {
+    midIx = (startIx + endIx ) / 2;
+    if (midIx == startIx || midIx == endIx)
+        return FALSE;
+    fseek(f, headSize + midIx*itemSize, SEEK_SET);
+    mustRead(f, rec, itemSize);
+    cmp = fofCmp(name, rec->name, nameSize, isPrefix);
+    if (cmp == 0)
+        {
+        fofRecToPos(fof, midIx, rec, retPos);
+        return TRUE;
+        }
+    else if (cmp > 0)
+	{
+	startIx = midIx;
+	}
+    else
+	{
+	endIx = midIx;
+	}
+    }
+}
+
+boolean fofFindFirst(struct fof *fof, char *prefix, 
+    int prefixSize, struct fofPos *retPos)
+/* Find first element with key starting with prefix. */
+{
+int ix;
+struct fofRecord *rec = fof->rec;
+FILE *f = fof->f;
+int itemSize = fof->itemSize;
+int headSize = fof->headSize;
+
+/* Find some record that starts with prefix. */
+if (!fofSearch(fof, prefix, prefixSize, TRUE, retPos))
+    return FALSE;
+
+/* Backtrack until find one that doesn't start with prefix. */
+ix = retPos->indexIx;
+while (--ix >= 0)
+    {
+    fseek(f, headSize + ix*itemSize, SEEK_SET);
+    mustRead(f, rec, itemSize);
+    if (memcmp(prefix, rec->name, prefixSize) != 0)
+        break;
+    }
+
+/* Return the first record that does start with prefix. */
+++ix;
+fseek(f, headSize + ix*itemSize, SEEK_SET);
+mustRead(f, rec, itemSize);
+fofRecToPos(fof, ix, rec, retPos);
+return TRUE;
+}
+
+
+boolean fofFind(struct fof *fof, char *name, struct fofPos *retPos)
+/* Find element corresponding with name.  Returns FALSE if no such name
+ * in the index file. */
+{
+return fofSearch(fof, name, strlen(name), FALSE, retPos);
+}
+
+void *fofFetch(struct fof *fof, char *name, int *retSize)
+/* Lookup element in index, allocate memory for it, and read
+ * it.  Returns buffer with element in it, which should be
+ * freeMem'd when done. Aborts if element isn't there. */
+{
+struct fofPos pos;
+void *s;
+
+if (!fofFind(fof, name, &pos))
+    errAbort("Couldn't find %s in %s", name, fof->name);
+s = needLargeMem(pos.size);
+fseek(pos.f, pos.offset, SEEK_SET);
+mustRead(pos.f, s, pos.size);
+*retSize = pos.size;
+return s;
+}
+
+char *fofFetchString(struct fof *fof, char *name, int *retSize)
+/* Lookup element in index, allocate memory for it, read it.
+ * Returns zero terminated string with element in it, which 
+ * should be freeMem'd when done. Aborts if element isn't there. */
+{
+struct fofPos pos;
+char *s;
+
+if (!fofFind(fof, name, &pos))
+    errAbort("Couldn't find %s in %s", name, fof->name);
+s = needLargeMem(pos.size+1);
+fseek(pos.f, pos.offset, SEEK_SET);
+mustRead(pos.f, s, pos.size);
+s[pos.size] = 0;
+*retSize = pos.size;
+return s;
+}
+
+/* ------------------- Batch read ------------------------*/
+static int cmpOnKey(const void *va, const void *vb)
+/* Comparison function for qsort on an array of offset pointers.
+ * Sorts on key. */
+{
+const struct fofBatch *a = *((struct fofBatch **)va);
+const struct fofBatch *b = *((struct fofBatch **)vb);
+return strcmp(a->key, b->key);
+}
+
+static int cmpOnFilePos(const void *va, const void *vb)
+/* Comparison function for qsort on an array of offset pointers.
+ * Sorts on file then file offset. */
+{
+const struct fofBatch *a = *((struct fofBatch **)va);
+const struct fofBatch *b = *((struct fofBatch **)vb);
+int dif = a->f - b->f;
+if (dif == 0)
+    dif = a->offset - b->offset;
+return dif;
+}
+
+static void elFromRec(struct fof *fof, struct fofRecord *rec, struct fofBatch *el)
+/* Fill in a batch element from record. */
+{
+FILE *ff;
+int fileIx = rec->fileIx;
+if ((ff = fof->files[fileIx]) != NULL)
+    {
+    el->f = ff;
+    }
+else
+    {
+    el->f = fof->files[fileIx] = mustOpen(fof->fileNames[fileIx], "rb");
+    }
+el->offset = rec->offset;
+el->size = rec->size;
+}
+
+struct fofBatch *fofBatchFind(struct fof *fof, struct fofBatch *list)
+/* Look up all of members on list. */
+{
+struct fofBatch *el;
+FILE *f = fof->f;
+struct fofRecord *rec = fof->rec;
+int itemSize = fof->itemSize;
+char *lastKey = "";
+
+slSort(&list, cmpOnKey);
+fseek(f, fof->headSize, SEEK_SET);
+for (el = list; el != NULL; el = el->next)
+    {
+    char *key = el->key;
+    if (sameString(key, lastKey))
+        {
+        elFromRec(fof, rec, el);
+        }
+    else
+        {
+        for (;;)
+            {
+            mustRead(f, rec, itemSize);
+            if (sameString(key, rec->name))
+                {
+                elFromRec(fof, rec, el);
+                lastKey = key;
+                break;
+                }
+            }
+        }
+    }
+slSort(&list, cmpOnFilePos);
+return list;
+}
+
+
+/* ------------------- Write Side ------------------------*/
+
+struct lm *localMem;    /* Local (fast) memory pool. */
+
+struct fofRecList
+/* This holds a list of records for an index file. */
+    {
+    struct fofRecList *next;
+    struct fofRecord rec;
+    };
+
+static int cmpRecList(const void *va, const void *vb)
+/* Comparison function for qsort on an array of offset pointers.
+ * Sorts first on name, then on fileIx, then on offset. */
+{
+const struct fofRecList *a = *((struct fofRecList **)va);
+const struct fofRecList *b = *((struct fofRecList **)vb);
+int dif;
+dif = strcmp(a->rec.name, b->rec.name);
+if (dif == 0)
+    {
+    UBYTE ao = a->rec.fileIx;
+    UBYTE bo = b->rec.fileIx;
+    if (ao < bo)
+        dif =  -1;
+    else if (ao > bo)
+        dif = 1;
+    else
+        {
+        bits32 ao = a->rec.offset;
+        bits32 bo = b->rec.offset;
+        if (ao < bo)
+            dif =  -1;
+        else if (ao == bo)
+            dif = 0;
+        else
+            dif = 1;
+        }
+    }
+return dif;
+}
+
+static bits16 maxNameSize;      /* Maximum size we've seen. */
+
+struct fofRecList *newFofRecEl(int fileIx, long offset, long size, char *name, int nameLen)
+/* Create a new offset list element. */
+{
+struct fofRecList *fr;
+
+if (maxNameSize < nameLen)
+    maxNameSize = nameLen;
+fr = lmAlloc(localMem, sizeof(*fr) + nameLen);
+fr->rec.offset = offset;
+fr->rec.size = size;
+fr->rec.fileIx = fileIx;
+memcpy(fr->rec.name, name, nameLen);
+return fr;
+}
+
+void fofMake(char *inFiles[], int inCount, char *outName, 
+    boolean (*readHeader)(FILE *inFile, void *data),
+    boolean (*nextRecord)(FILE *inFile, void *data, char **rName, int *rNameLen), 
+    void *data, boolean dupeOk)
+/* Make an index file
+ * Inputs:
+ *     inFiles - List of files that you're indexing with header read and verified.
+ *     inCount - Size of file list.
+ *     outName - name of index file to create
+ *     readHeader - function that sets up file to read first record.  May be NULL.
+ *     nextRecord - function that reads next record in file you're indexing
+ *                  and returns the name of that record.  Returns FALSE at
+ *                  end of file.  Can set *rNameLen to zero you want indexer
+ *                  to ignore the record. 
+ *     data - void pointer passed through to nextRecord.
+ *     dupeOk - set to TRUE if you want dupes to not cause squawking
+ */
+{
+FILE *out;
+bits32 sig = fofSig;
+bits32 elCount = 0;
+bits16 fileCount = inCount;
+struct fofRecList *recList = NULL, *rl;
+int i, fileIx, itemSize;
+char *lastName = "";
+int maxMod = 10000;
+
+/* Initialize. */
+localMem = lmInit(0);
+maxNameSize = 0;
+
+/* Read in all records and sort by name. */
+for (fileIx = 0; fileIx<inCount; ++fileIx)
+    {
+    char *inName = inFiles[fileIx];
+    FILE *in = mustOpen(inName, "rb");
+    bits32 start, end;
+    char *name;
+    int nameLen;
+    int mod = maxMod;
+
+    printf("Processing %s\n", inName);
+    if (readHeader)
+        readHeader(in, data);
+    start = ftell(in);
+    while (nextRecord(in, data, &name, &nameLen))
+        {
+	if (--mod == 0)
+	    {
+	    putc('.', stdout);
+	    fflush(stdout);
+	    mod = maxMod;
+	    }
+        end = ftell(in);
+        if (nameLen > 0)
+            {
+            rl = newFofRecEl(fileIx, start, end-start, name, nameLen);
+            slAddHead(&recList, rl);
+            }
+        start = end;
+        }
+    fclose(in);
+    printf("\n");
+    }
+
+printf("sorting\n");
+slSort(&recList, cmpRecList);
+
+/* Count up names. */
+if (dupeOk)
+    elCount = slCount(recList);
+else
+    {
+    lastName = "";
+    for (rl = recList; rl != NULL; rl = rl->next)
+        {
+        char *name = rl->rec.name;
+        if (!sameString(name, lastName))
+            {
+            ++elCount;
+            lastName = name;
+            }
+        }
+    }
+
+/* Write out index file. */
+printf("Writing %s\n", outName);
+out = mustOpen(outName, "wb");
+writeOne(out, sig);
+writeOne(out, elCount);
+writeOne(out, fileCount);
+writeOne(out, maxNameSize);
+itemSize = sizeof(bits32) +sizeof(bits32) + sizeof(UBYTE) + maxNameSize;
+for (i=0; i<inCount; ++i)
+    {
+    char *name = inFiles[i];
+    int len = strlen(name)+1;
+    mustWrite(out, name, len);
+    }
+lastName = "";
+for (rl = recList; rl != NULL; rl = rl->next)
+    {
+    if (!dupeOk)
+        {
+        char *name = rl->rec.name;
+        if (sameString(name, lastName))
+            {
+            warn("Duplicate %s only saving first.", name);
+            continue;
+            }
+        else
+            lastName = name;
+        }
+    writeOne(out, rl->rec.offset);
+    writeOne(out, rl->rec.size);
+    writeOne(out, rl->rec.fileIx);
+    mustWrite(out, rl->rec.name, maxNameSize);
+    }
+if (fclose(out) != 0)
+    errnoAbort("fclose failed");
+/* Clean up. */
+lmCleanup(&localMem);
+}
+
diff --git a/gbtools/src/blatSrc/lib/foo b/gbtools/src/blatSrc/lib/foo
new file mode 100644
index 0000000..09d2ac0
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/foo
@@ -0,0 +1,781 @@
+6819f30a (kent     2004-07-02 06:23:19 +0000   1) /* axtAffine - do alignment of two (shortish) sequences with
+6819f30a (kent     2004-07-02 06:23:19 +0000   2)  * affine gap scoring, and return the result as an axt. 
+6819f30a (kent     2004-07-02 06:23:19 +0000   3)  * This file is copyright 2000-2004 Jim Kent, but license is hereby
+6819f30a (kent     2004-07-02 06:23:19 +0000   4)  * granted for all use - public, private or commercial. */
+6819f30a (kent     2004-07-02 06:23:19 +0000   5) 
+6819f30a (kent     2004-07-02 06:23:19 +0000   6) #include "common.h"
+6819f30a (kent     2004-07-02 06:23:19 +0000   7) #include "pairHmm.h"
+6819f30a (kent     2004-07-02 06:23:19 +0000   8) #include "axt.h"
+6819f30a (kent     2004-07-02 06:23:19 +0000   9) 
+6819f30a (kent     2004-07-02 06:23:19 +0000  10) 
+6819f30a (kent     2004-07-02 06:23:19 +0000  11) 
+6819f30a (kent     2004-07-02 06:23:19 +0000  12) boolean axtAffineSmallEnough(double querySize, double targetSize)
+6819f30a (kent     2004-07-02 06:23:19 +0000  13) /* Return TRUE if it is reasonable to align sequences of given sizes
+6819f30a (kent     2004-07-02 06:23:19 +0000  14)  * with axtAffine. */
+6819f30a (kent     2004-07-02 06:23:19 +0000  15) {
+bdaa14f5 (Jim Kent 2014-07-17 15:16:25 -0700  16) return targetSize * querySize <= 1.0E9;
+6819f30a (kent     2004-07-02 06:23:19 +0000  17) }
+6819f30a (kent     2004-07-02 06:23:19 +0000  18) 
+6819f30a (kent     2004-07-02 06:23:19 +0000  19) static void affineAlign(char *query, int querySize, 
+6819f30a (kent     2004-07-02 06:23:19 +0000  20) 	char *target, int targetSize, struct axtScoreScheme *ss,
+6819f30a (kent     2004-07-02 06:23:19 +0000  21) 	struct phmmMatrix **retMatrix, struct phmmAliPair **retPairList,
+6819f30a (kent     2004-07-02 06:23:19 +0000  22) 	int *retScore)
+6819f30a (kent     2004-07-02 06:23:19 +0000  23) /* Use dynamic programming to do alignment including affine gap
+6819f30a (kent     2004-07-02 06:23:19 +0000  24)  * scores. */
+6819f30a (kent     2004-07-02 06:23:19 +0000  25) {
+6819f30a (kent     2004-07-02 06:23:19 +0000  26) struct phmmMatrix *a;
+6819f30a (kent     2004-07-02 06:23:19 +0000  27) struct phmmState *hf, *iq, *it;
+6819f30a (kent     2004-07-02 06:23:19 +0000  28) int qIx, tIx, sIx;  /* Query, target, and state indices */
+6819f30a (kent     2004-07-02 06:23:19 +0000  29) int rowOffset, newCellOffset;
+6819f30a (kent     2004-07-02 06:23:19 +0000  30) int bestScore = -0x4fffffff;
+6819f30a (kent     2004-07-02 06:23:19 +0000  31) struct phmmMommy *bestCell = NULL;
+6819f30a (kent     2004-07-02 06:23:19 +0000  32) int matchPair;
+6819f30a (kent     2004-07-02 06:23:19 +0000  33) int gapStart, gapExt;
+6819f30a (kent     2004-07-02 06:23:19 +0000  34) 
+6819f30a (kent     2004-07-02 06:23:19 +0000  35) /* Check that it's not too big. */
+6819f30a (kent     2004-07-02 06:23:19 +0000  36) if (!axtAffineSmallEnough(querySize, targetSize))
+6819f30a (kent     2004-07-02 06:23:19 +0000  37)     errAbort("Can't align %d x %d, too big\n", querySize, targetSize);
+6819f30a (kent     2004-07-02 06:23:19 +0000  38) 
+6819f30a (kent     2004-07-02 06:23:19 +0000  39) gapStart = -ss->gapOpen;
+6819f30a (kent     2004-07-02 06:23:19 +0000  40) gapExt = -ss->gapExtend;
+6819f30a (kent     2004-07-02 06:23:19 +0000  41) 
+6819f30a (kent     2004-07-02 06:23:19 +0000  42) /* Initialize 3 state matrix (match, query insert, target insert). */
+6819f30a (kent     2004-07-02 06:23:19 +0000  43) a = phmmMatrixNew(3, query, querySize, target, targetSize);
+6819f30a (kent     2004-07-02 06:23:19 +0000  44) hf = phmmNameState(a, 0, "match", 'M');
+6819f30a (kent     2004-07-02 06:23:19 +0000  45) iq = phmmNameState(a, 1, "qSlip", 'Q');
+6819f30a (kent     2004-07-02 06:23:19 +0000  46) it = phmmNameState(a, 2, "tSlip", 'T');
+6819f30a (kent     2004-07-02 06:23:19 +0000  47) 
+6819f30a (kent     2004-07-02 06:23:19 +0000  48) for (tIx = 1; tIx < a->tDim; tIx += 1)
+6819f30a (kent     2004-07-02 06:23:19 +0000  49)     {
+6819f30a (kent     2004-07-02 06:23:19 +0000  50)     UBYTE mommy = 0;
+6819f30a (kent     2004-07-02 06:23:19 +0000  51)     int score, tempScore;
+6819f30a (kent     2004-07-02 06:23:19 +0000  52) 
+6819f30a (kent     2004-07-02 06:23:19 +0000  53) /* Macros to make me less mixed up when accessing scores from row arrays.*/
+6819f30a (kent     2004-07-02 06:23:19 +0000  54) #define matchScore lastScores[qIx-1]
+6819f30a (kent     2004-07-02 06:23:19 +0000  55) #define qSlipScore lastScores[qIx]
+6819f30a (kent     2004-07-02 06:23:19 +0000  56) #define tSlipScore scores[qIx-1]
+6819f30a (kent     2004-07-02 06:23:19 +0000  57) #define newScore scores[qIx]
+6819f30a (kent     2004-07-02 06:23:19 +0000  58) 
+6819f30a (kent     2004-07-02 06:23:19 +0000  59) /* Start up state block (with all ways to enter state) */
+6819f30a (kent     2004-07-02 06:23:19 +0000  60) #define startState(state) \
+6819f30a (kent     2004-07-02 06:23:19 +0000  61)    score = 0;
+6819f30a (kent     2004-07-02 06:23:19 +0000  62) 
+6819f30a (kent     2004-07-02 06:23:19 +0000  63) /* Define a transition from state while advancing over both
+6819f30a (kent     2004-07-02 06:23:19 +0000  64)  * target and query. */
+6819f30a (kent     2004-07-02 06:23:19 +0000  65) #define matchState(state, addScore) \
+6819f30a (kent     2004-07-02 06:23:19 +0000  66)    { \
+6819f30a (kent     2004-07-02 06:23:19 +0000  67)    if ((tempScore = state->matchScore + addScore) > score) \
+6819f30a (kent     2004-07-02 06:23:19 +0000  68)         { \
+6819f30a (kent     2004-07-02 06:23:19 +0000  69)         mommy = phmmPackMommy(state->stateIx, -1, -1); \
+6819f30a (kent     2004-07-02 06:23:19 +0000  70)         score = tempScore; \
+6819f30a (kent     2004-07-02 06:23:19 +0000  71)         } \
+6819f30a (kent     2004-07-02 06:23:19 +0000  72)    } 
+6819f30a (kent     2004-07-02 06:23:19 +0000  73) 
+6819f30a (kent     2004-07-02 06:23:19 +0000  74) /* Define a transition from state while slipping query
+6819f30a (kent     2004-07-02 06:23:19 +0000  75)  * and advancing target. */
+6819f30a (kent     2004-07-02 06:23:19 +0000  76) #define qSlipState(state, addScore) \
+6819f30a (kent     2004-07-02 06:23:19 +0000  77)    { \
+6819f30a (kent     2004-07-02 06:23:19 +0000  78)    if ((tempScore = state->qSlipScore + addScore) > score) \
+6819f30a (kent     2004-07-02 06:23:19 +0000  79)         { \
+6819f30a (kent     2004-07-02 06:23:19 +0000  80)         mommy = phmmPackMommy(state->stateIx, 0, -1); \
+6819f30a (kent     2004-07-02 06:23:19 +0000  81)         score = tempScore; \
+6819f30a (kent     2004-07-02 06:23:19 +0000  82)         } \
+6819f30a (kent     2004-07-02 06:23:19 +0000  83)    }
+6819f30a (kent     2004-07-02 06:23:19 +0000  84) 
+6819f30a (kent     2004-07-02 06:23:19 +0000  85) /* Define a transition from state while slipping target
+6819f30a (kent     2004-07-02 06:23:19 +0000  86)  * and advancing query. */
+6819f30a (kent     2004-07-02 06:23:19 +0000  87) #define tSlipState(state, addScore) \
+6819f30a (kent     2004-07-02 06:23:19 +0000  88)    { \
+6819f30a (kent     2004-07-02 06:23:19 +0000  89)    if ((tempScore = state->tSlipScore + addScore) > score) \
+6819f30a (kent     2004-07-02 06:23:19 +0000  90)         { \
+6819f30a (kent     2004-07-02 06:23:19 +0000  91)         mommy = phmmPackMommy(state->stateIx, -1, 0); \
+6819f30a (kent     2004-07-02 06:23:19 +0000  92)         score = tempScore; \
+6819f30a (kent     2004-07-02 06:23:19 +0000  93)         } \
+6819f30a (kent     2004-07-02 06:23:19 +0000  94)    }
+6819f30a (kent     2004-07-02 06:23:19 +0000  95) 
+6819f30a (kent     2004-07-02 06:23:19 +0000  96) /* End a block of transitions into state. */
+6819f30a (kent     2004-07-02 06:23:19 +0000  97) #define endState(state) \
+6819f30a (kent     2004-07-02 06:23:19 +0000  98)     { \
+6819f30a (kent     2004-07-02 06:23:19 +0000  99)     struct phmmMommy *newCell = state->cells + newCellOffset; \
+6819f30a (kent     2004-07-02 06:23:19 +0000 100)     if (score <= 0) \
+6819f30a (kent     2004-07-02 06:23:19 +0000 101)         { \
+6819f30a (kent     2004-07-02 06:23:19 +0000 102)         mommy = phmmNullMommy; \
+6819f30a (kent     2004-07-02 06:23:19 +0000 103)         score = 0; \
+6819f30a (kent     2004-07-02 06:23:19 +0000 104)         } \
+6819f30a (kent     2004-07-02 06:23:19 +0000 105)     newCell->mommy = mommy; \
+6819f30a (kent     2004-07-02 06:23:19 +0000 106)     state->newScore = score; \
+6819f30a (kent     2004-07-02 06:23:19 +0000 107)     if (score > bestScore) \
+6819f30a (kent     2004-07-02 06:23:19 +0000 108)         { \
+6819f30a (kent     2004-07-02 06:23:19 +0000 109)         bestScore = score; \
+6819f30a (kent     2004-07-02 06:23:19 +0000 110)         bestCell = newCell; \
+6819f30a (kent     2004-07-02 06:23:19 +0000 111)         } \
+6819f30a (kent     2004-07-02 06:23:19 +0000 112)     } 
+6819f30a (kent     2004-07-02 06:23:19 +0000 113) 
+6819f30a (kent     2004-07-02 06:23:19 +0000 114) /* End a state that you know won't produce an optimal
+6819f30a (kent     2004-07-02 06:23:19 +0000 115)  * final score. */
+6819f30a (kent     2004-07-02 06:23:19 +0000 116) #define shortEndState(state) \
+6819f30a (kent     2004-07-02 06:23:19 +0000 117)     { \
+6819f30a (kent     2004-07-02 06:23:19 +0000 118)     struct phmmMommy *newCell = state->cells + newCellOffset; \
+6819f30a (kent     2004-07-02 06:23:19 +0000 119)     if (score <= 0) \
+6819f30a (kent     2004-07-02 06:23:19 +0000 120)         { \
+6819f30a (kent     2004-07-02 06:23:19 +0000 121)         mommy = phmmNullMommy; \
+6819f30a (kent     2004-07-02 06:23:19 +0000 122)         score = 0; \
+6819f30a (kent     2004-07-02 06:23:19 +0000 123)         } \
+6819f30a (kent     2004-07-02 06:23:19 +0000 124)     newCell->mommy = mommy; \
+6819f30a (kent     2004-07-02 06:23:19 +0000 125)     state->newScore = score; \
+6819f30a (kent     2004-07-02 06:23:19 +0000 126)     }
+6819f30a (kent     2004-07-02 06:23:19 +0000 127) 
+6819f30a (kent     2004-07-02 06:23:19 +0000 128) 
+6819f30a (kent     2004-07-02 06:23:19 +0000 129)     rowOffset = tIx*a->qDim;
+6819f30a (kent     2004-07-02 06:23:19 +0000 130)     for (qIx = 1; qIx < a->qDim; qIx += 1)
+6819f30a (kent     2004-07-02 06:23:19 +0000 131)         {
+6819f30a (kent     2004-07-02 06:23:19 +0000 132)         newCellOffset = rowOffset + qIx;
+6819f30a (kent     2004-07-02 06:23:19 +0000 133)         
+6819f30a (kent     2004-07-02 06:23:19 +0000 134)         /* Figure the cost or bonus for pairing target and query residue here. */
+051436e7 (markd    2005-04-10 14:41:26 +0000 135)         matchPair = ss->matrix[(int)a->query[qIx-1]][(int)a->target[tIx-1]];
+6819f30a (kent     2004-07-02 06:23:19 +0000 136) 
+6819f30a (kent     2004-07-02 06:23:19 +0000 137)         /* Update hiFi space. */
+6819f30a (kent     2004-07-02 06:23:19 +0000 138)             {
+6819f30a (kent     2004-07-02 06:23:19 +0000 139)             startState(hf);
+6819f30a (kent     2004-07-02 06:23:19 +0000 140)             matchState(hf, matchPair);
+6819f30a (kent     2004-07-02 06:23:19 +0000 141)             matchState(iq, matchPair);
+6819f30a (kent     2004-07-02 06:23:19 +0000 142)             matchState(it, matchPair);
+6819f30a (kent     2004-07-02 06:23:19 +0000 143)             endState(hf);
+6819f30a (kent     2004-07-02 06:23:19 +0000 144)             }
+6819f30a (kent     2004-07-02 06:23:19 +0000 145) 
+6819f30a (kent     2004-07-02 06:23:19 +0000 146)         /* Update query slip space. */
+6819f30a (kent     2004-07-02 06:23:19 +0000 147)             {
+6819f30a (kent     2004-07-02 06:23:19 +0000 148)             startState(iq);
+6819f30a (kent     2004-07-02 06:23:19 +0000 149)             qSlipState(iq, gapExt);
+6819f30a (kent     2004-07-02 06:23:19 +0000 150)             qSlipState(hf, gapStart);            
+6819f30a (kent     2004-07-02 06:23:19 +0000 151) 	    qSlipState(it, gapStart);	/* Allow double gaps, T first always. */
+6819f30a (kent     2004-07-02 06:23:19 +0000 152)             shortEndState(iq);
+6819f30a (kent     2004-07-02 06:23:19 +0000 153)             }
+6819f30a (kent     2004-07-02 06:23:19 +0000 154)         
+6819f30a (kent     2004-07-02 06:23:19 +0000 155)         /* Update target slip space. */
+6819f30a (kent     2004-07-02 06:23:19 +0000 156)             {
+6819f30a (kent     2004-07-02 06:23:19 +0000 157)             startState(it);
+6819f30a (kent     2004-07-02 06:23:19 +0000 158)             tSlipState(it, gapExt);
+6819f30a (kent     2004-07-02 06:23:19 +0000 159)             tSlipState(hf, gapStart);            
+6819f30a (kent     2004-07-02 06:23:19 +0000 160)             shortEndState(it);
+6819f30a (kent     2004-07-02 06:23:19 +0000 161)             }
+6819f30a (kent     2004-07-02 06:23:19 +0000 162) 
+6819f30a (kent     2004-07-02 06:23:19 +0000 163)         }
+6819f30a (kent     2004-07-02 06:23:19 +0000 164)     /* Swap score columns so current becomes last, and last gets
+6819f30a (kent     2004-07-02 06:23:19 +0000 165)      * reused. */
+6819f30a (kent     2004-07-02 06:23:19 +0000 166)     for (sIx = 0; sIx < a->stateCount; ++sIx)
+6819f30a (kent     2004-07-02 06:23:19 +0000 167)         {
+6819f30a (kent     2004-07-02 06:23:19 +0000 168)         struct phmmState *as = &a->states[sIx];
+6819f30a (kent     2004-07-02 06:23:19 +0000 169)         int *swapTemp = as->lastScores;
+6819f30a (kent     2004-07-02 06:23:19 +0000 170)         as->lastScores = as->scores;
+6819f30a (kent     2004-07-02 06:23:19 +0000 171)         as->scores = swapTemp;
+6819f30a (kent     2004-07-02 06:23:19 +0000 172)         }
+6819f30a (kent     2004-07-02 06:23:19 +0000 173)     }
+6819f30a (kent     2004-07-02 06:23:19 +0000 174) 
+6819f30a (kent     2004-07-02 06:23:19 +0000 175) /* Trace back from best scoring cell. */
+6819f30a (kent     2004-07-02 06:23:19 +0000 176) *retPairList = phmmTraceBack(a, bestCell);
+6819f30a (kent     2004-07-02 06:23:19 +0000 177) *retMatrix = a;
+6819f30a (kent     2004-07-02 06:23:19 +0000 178) *retScore = bestScore;
+6819f30a (kent     2004-07-02 06:23:19 +0000 179) 
+6819f30a (kent     2004-07-02 06:23:19 +0000 180) #undef matchScore
+6819f30a (kent     2004-07-02 06:23:19 +0000 181) #undef qSlipScore
+6819f30a (kent     2004-07-02 06:23:19 +0000 182) #undef tSlipScore
+6819f30a (kent     2004-07-02 06:23:19 +0000 183) #undef newScore
+6819f30a (kent     2004-07-02 06:23:19 +0000 184) #undef startState
+6819f30a (kent     2004-07-02 06:23:19 +0000 185) #undef matchState
+6819f30a (kent     2004-07-02 06:23:19 +0000 186) #undef qSlipState
+6819f30a (kent     2004-07-02 06:23:19 +0000 187) #undef tSlipState
+6819f30a (kent     2004-07-02 06:23:19 +0000 188) #undef shortEndState
+6819f30a (kent     2004-07-02 06:23:19 +0000 189) #undef endState
+6819f30a (kent     2004-07-02 06:23:19 +0000 190) }
+6819f30a (kent     2004-07-02 06:23:19 +0000 191) 
+6819f30a (kent     2004-07-02 06:23:19 +0000 192) struct axt *axtAffine(bioSeq *query, bioSeq *target, struct axtScoreScheme *ss)
+6819f30a (kent     2004-07-02 06:23:19 +0000 193) /* Return alignment if any of query and target using scoring scheme. */
+6819f30a (kent     2004-07-02 06:23:19 +0000 194) {
+6819f30a (kent     2004-07-02 06:23:19 +0000 195) struct axt *axt;
+6819f30a (kent     2004-07-02 06:23:19 +0000 196) int score;
+6819f30a (kent     2004-07-02 06:23:19 +0000 197) struct phmmMatrix *matrix;
+6819f30a (kent     2004-07-02 06:23:19 +0000 198) struct phmmAliPair *pairList;
+6819f30a (kent     2004-07-02 06:23:19 +0000 199) 
+6819f30a (kent     2004-07-02 06:23:19 +0000 200) affineAlign(query->dna, query->size, target->dna, target->size, ss,
+6819f30a (kent     2004-07-02 06:23:19 +0000 201) 	&matrix, &pairList, &score);
+6819f30a (kent     2004-07-02 06:23:19 +0000 202) axt = phhmTraceToAxt(matrix, pairList, score, query->name, target->name);
+6819f30a (kent     2004-07-02 06:23:19 +0000 203) phmmMatrixFree(&matrix);
+6819f30a (kent     2004-07-02 06:23:19 +0000 204) slFreeList(&pairList);
+6819f30a (kent     2004-07-02 06:23:19 +0000 205) return axt;
+6819f30a (kent     2004-07-02 06:23:19 +0000 206) }
+6819f30a (kent     2004-07-02 06:23:19 +0000 207) 
+810304ec (galt     2004-12-08 20:53:07 +0000 208) 
+b6f18c16 (galt     2005-01-06 20:12:26 +0000 209) /* ----- axtAffine2Level begins ----- 
+b6f18c16 (galt     2005-01-06 20:12:26 +0000 210) 
+b6f18c16 (galt     2005-01-06 20:12:26 +0000 211)  Written by Galt Barber, December 2004
+b6f18c16 (galt     2005-01-06 20:12:26 +0000 212)  I wrote this on my own time and am donating this
+b6f18c16 (galt     2005-01-06 20:12:26 +0000 213)  to the public domain.  The original concept 
+b6f18c16 (galt     2005-01-06 20:12:26 +0000 214)  was Don Speck's, as described by Kevin Karplus.
+b6f18c16 (galt     2005-01-06 20:12:26 +0000 215) 
+b6f18c16 (galt     2005-01-06 20:12:26 +0000 216)  @article{Grice97,
+b6f18c16 (galt     2005-01-06 20:12:26 +0000 217)      author = "J. A. Grice and R. Hughey and D. Speck",
+b6f18c16 (galt     2005-01-06 20:12:26 +0000 218)      title = "Reduced space sequence alignment",
+b6f18c16 (galt     2005-01-06 20:12:26 +0000 219)      journal = cabios,
+b6f18c16 (galt     2005-01-06 20:12:26 +0000 220)      volume=13,
+b6f18c16 (galt     2005-01-06 20:12:26 +0000 221)      number=1,
+b6f18c16 (galt     2005-01-06 20:12:26 +0000 222)      year=1997,
+b6f18c16 (galt     2005-01-06 20:12:26 +0000 223)      month=feb,
+b6f18c16 (galt     2005-01-06 20:12:26 +0000 224)      pages="45-53"
+b6f18c16 (galt     2005-01-06 20:12:26 +0000 225)      }
+b6f18c16 (galt     2005-01-06 20:12:26 +0000 226) 								 
+b6f18c16 (galt     2005-01-06 20:12:26 +0000 227) 
+b6f18c16 (galt     2005-01-06 20:12:26 +0000 228) */
+810304ec (galt     2004-12-08 20:53:07 +0000 229) 
+810304ec (galt     2004-12-08 20:53:07 +0000 230) #define WORST 0xC0000000 /* WORST Score approx neg. inf. 0x80000000 overflowed, reduced by half */
+810304ec (galt     2004-12-08 20:53:07 +0000 231) 
+810304ec (galt     2004-12-08 20:53:07 +0000 232) 
+810304ec (galt     2004-12-08 20:53:07 +0000 233) /* m d i notation: match, delete, insert in query */
+810304ec (galt     2004-12-08 20:53:07 +0000 234) 
+810304ec (galt     2004-12-08 20:53:07 +0000 235) struct cell2L 
+810304ec (galt     2004-12-08 20:53:07 +0000 236) {
+810304ec (galt     2004-12-08 20:53:07 +0000 237) int  bestm;   /* best score array */
+810304ec (galt     2004-12-08 20:53:07 +0000 238) int  bestd;                         
+810304ec (galt     2004-12-08 20:53:07 +0000 239) int  besti;                          
+810304ec (galt     2004-12-08 20:53:07 +0000 240) char backm;   /* back trace array */
+810304ec (galt     2004-12-08 20:53:07 +0000 241) char backd;                         
+810304ec (galt     2004-12-08 20:53:07 +0000 242) char backi;                          
+810304ec (galt     2004-12-08 20:53:07 +0000 243) };
+810304ec (galt     2004-12-08 20:53:07 +0000 244) 
+810304ec (galt     2004-12-08 20:53:07 +0000 245) #ifdef DEBUG
+810304ec (galt     2004-12-08 20:53:07 +0000 246) void dump2L(struct cell2L* c)
+810304ec (galt     2004-12-08 20:53:07 +0000 247) /* print matrix cell for debugging 
+810304ec (galt     2004-12-08 20:53:07 +0000 248)    I redirect output to a file 
+810304ec (galt     2004-12-08 20:53:07 +0000 249)    and look at it with a web browser
+810304ec (galt     2004-12-08 20:53:07 +0000 250)    to see the long lines
+810304ec (galt     2004-12-08 20:53:07 +0000 251) */
+810304ec (galt     2004-12-08 20:53:07 +0000 252) {
+810304ec (galt     2004-12-08 20:53:07 +0000 253)     printf("%04d%c %04d%c %04d%c   ",
+810304ec (galt     2004-12-08 20:53:07 +0000 254)      c->bestd, c->backd,
+810304ec (galt     2004-12-08 20:53:07 +0000 255)      c->bestm, c->backm,
+810304ec (galt     2004-12-08 20:53:07 +0000 256)      c->besti, c->backi
+810304ec (galt     2004-12-08 20:53:07 +0000 257)      );
+810304ec (galt     2004-12-08 20:53:07 +0000 258) }     
+810304ec (galt     2004-12-08 20:53:07 +0000 259) #endif
+810304ec (galt     2004-12-08 20:53:07 +0000 260) 
+810304ec (galt     2004-12-08 20:53:07 +0000 261) void kForwardAffine(
+810304ec (galt     2004-12-08 20:53:07 +0000 262) struct cell2L *cells,  /* dyn prg arr cells */
+810304ec (galt     2004-12-08 20:53:07 +0000 263) int row,      /* starting row base */
+810304ec (galt     2004-12-08 20:53:07 +0000 264) int rowmax,   /* ending row */
+810304ec (galt     2004-12-08 20:53:07 +0000 265) int rdelta,   /* convert between real targ seq row and logical row */                             
+810304ec (galt     2004-12-08 20:53:07 +0000 266) int cmost,    /* track right edge, shrink as traces back */
+810304ec (galt     2004-12-08 20:53:07 +0000 267) int lv,       /* width of array including sentinel col 0 */ 
+810304ec (galt     2004-12-08 20:53:07 +0000 268) char *q,      /* query and target seqs */
+810304ec (galt     2004-12-08 20:53:07 +0000 269) char *t,
+810304ec (galt     2004-12-08 20:53:07 +0000 270) struct axtScoreScheme *ss,  /* score scheme passed in */
+810304ec (galt     2004-12-08 20:53:07 +0000 271) int *bestbestOut,  /* return best overall found, and it's row and col */
+810304ec (galt     2004-12-08 20:53:07 +0000 272) int *bestrOut,
+810304ec (galt     2004-12-08 20:53:07 +0000 273) int *bestcOut,
+810304ec (galt     2004-12-08 20:53:07 +0000 274) char *bestdirOut
+810304ec (galt     2004-12-08 20:53:07 +0000 275) )
+810304ec (galt     2004-12-08 20:53:07 +0000 276) /*
+810304ec (galt     2004-12-08 20:53:07 +0000 277) Calculates filling dynprg mtx forward.
+810304ec (galt     2004-12-08 20:53:07 +0000 278)  Called 3 times from affine2Level.
+810304ec (galt     2004-12-08 20:53:07 +0000 279) 
+810304ec (galt     2004-12-08 20:53:07 +0000 280) row is offset into the actual best and back arrays,
+810304ec (galt     2004-12-08 20:53:07 +0000 281)  so rdelta serves as a conversion between
+810304ec (galt     2004-12-08 20:53:07 +0000 282)  the real target seq row and the logical row
+810304ec (galt     2004-12-08 20:53:07 +0000 283)  used in best and back arrays.
+810304ec (galt     2004-12-08 20:53:07 +0000 284) 
+810304ec (galt     2004-12-08 20:53:07 +0000 285) cmost is a column limiter that lets us avoid
+810304ec (galt     2004-12-08 20:53:07 +0000 286)  unused areas of the array when doing the
+810304ec (galt     2004-12-08 20:53:07 +0000 287)  backtrace 2nd pass. This can be an average
+810304ec (galt     2004-12-08 20:53:07 +0000 288)  of half of the total array saved.
+810304ec (galt     2004-12-08 20:53:07 +0000 289) 
+810304ec (galt     2004-12-08 20:53:07 +0000 290) */
+810304ec (galt     2004-12-08 20:53:07 +0000 291) {
+810304ec (galt     2004-12-08 20:53:07 +0000 292) int r=0, rr=0;
+810304ec (galt     2004-12-08 20:53:07 +0000 293) int gapOpen  =ss->gapOpen;    
+810304ec (galt     2004-12-08 20:53:07 +0000 294) int gapExtend=ss->gapExtend;  
+810304ec (galt     2004-12-08 20:53:07 +0000 295) int doubleGap=ss->gapExtend;  // this can be gapOpen or gapExtend, or custom ?
+810304ec (galt     2004-12-08 20:53:07 +0000 296) struct cell2L *cellp,*cellc;  /* current and previous row base */
+810304ec (galt     2004-12-08 20:53:07 +0000 297) struct cell2L *u,*d,*l,*s;    /* up,diag,left,self pointers to hopefully speed things up */
+810304ec (galt     2004-12-08 20:53:07 +0000 298) int c=0;
+810304ec (galt     2004-12-08 20:53:07 +0000 299) int bestbest = *bestbestOut; /* make local copy of best best */
+810304ec (galt     2004-12-08 20:53:07 +0000 300) cellc = cells+(row-1)*lv;     /* start it off one row back coming into loop */
+810304ec (galt     2004-12-08 20:53:07 +0000 301) 
+810304ec (galt     2004-12-08 20:53:07 +0000 302) #ifdef DEBUG
+810304ec (galt     2004-12-08 20:53:07 +0000 303) for(c=0;c<=cmost;c++) /* show prev row */
+810304ec (galt     2004-12-08 20:53:07 +0000 304)     { dump2L(cellc+c); }
+810304ec (galt     2004-12-08 20:53:07 +0000 305) printf("\n");
+810304ec (galt     2004-12-08 20:53:07 +0000 306) #endif
+810304ec (galt     2004-12-08 20:53:07 +0000 307) 
+810304ec (galt     2004-12-08 20:53:07 +0000 308) for(r=row; r<=rowmax; r++)
+810304ec (galt     2004-12-08 20:53:07 +0000 309)     {
+810304ec (galt     2004-12-08 20:53:07 +0000 310)     cellp = cellc;
+810304ec (galt     2004-12-08 20:53:07 +0000 311)     cellc += lv;    /* initialize pointers to curr and prev rows */
+810304ec (galt     2004-12-08 20:53:07 +0000 312)     
+810304ec (galt     2004-12-08 20:53:07 +0000 313)     rr = r+rdelta;
+810304ec (galt     2004-12-08 20:53:07 +0000 314) 
+810304ec (galt     2004-12-08 20:53:07 +0000 315)     d = cellp;   /* diag is prev row, prev col */
+810304ec (galt     2004-12-08 20:53:07 +0000 316)     l = cellc;   /* left is curr row, prev col */
+810304ec (galt     2004-12-08 20:53:07 +0000 317)     u = d+1;     /*   up is prev row, curr col */
+810304ec (galt     2004-12-08 20:53:07 +0000 318)     s = l+1;     /* self is curr row, curr col */
+810304ec (galt     2004-12-08 20:53:07 +0000 319)     
+810304ec (galt     2004-12-08 20:53:07 +0000 320)     /* handle col 0 sentinel as a delete */
+810304ec (galt     2004-12-08 20:53:07 +0000 321)     l->bestm=WORST; 
+810304ec (galt     2004-12-08 20:53:07 +0000 322)     l->bestd=d->bestd-gapExtend;
+810304ec (galt     2004-12-08 20:53:07 +0000 323)     l->besti=WORST;                 
+810304ec (galt     2004-12-08 20:53:07 +0000 324)     l->backm='x';
+810304ec (galt     2004-12-08 20:53:07 +0000 325)     l->backd='d';
+810304ec (galt     2004-12-08 20:53:07 +0000 326)     l->backi='x';
+810304ec (galt     2004-12-08 20:53:07 +0000 327)     if (rr==1)    /* special case row 1 col 0 */
+810304ec (galt     2004-12-08 20:53:07 +0000 328) 	{
+810304ec (galt     2004-12-08 20:53:07 +0000 329) 	l->bestd=-gapOpen;
+810304ec (galt     2004-12-08 20:53:07 +0000 330) 	l->backd='m';
+810304ec (galt     2004-12-08 20:53:07 +0000 331) 	}
+810304ec (galt     2004-12-08 20:53:07 +0000 332) #ifdef DEBUG
+810304ec (galt     2004-12-08 20:53:07 +0000 333)     dump2L(cellc); 
+810304ec (galt     2004-12-08 20:53:07 +0000 334) #endif
+810304ec (galt     2004-12-08 20:53:07 +0000 335)     
+810304ec (galt     2004-12-08 20:53:07 +0000 336)     for(c=1; c<=cmost; c++)
+810304ec (galt     2004-12-08 20:53:07 +0000 337) 	{
+810304ec (galt     2004-12-08 20:53:07 +0000 338) 
+810304ec (galt     2004-12-08 20:53:07 +0000 339) 	int best=WORST;
+810304ec (galt     2004-12-08 20:53:07 +0000 340) 	int try  =WORST;
+810304ec (galt     2004-12-08 20:53:07 +0000 341) 	char dir=' ';
+810304ec (galt     2004-12-08 20:53:07 +0000 342) 	/* note: is matrix symmetrical? if not we could have dim 1 and 2 backwards */
+810304ec (galt     2004-12-08 20:53:07 +0000 343) 	int subst = ss->matrix[(int)q[c-1]][(int)t[rr-1]];  /* score for pairing target and query. */
+810304ec (galt     2004-12-08 20:53:07 +0000 344) 
+810304ec (galt     2004-12-08 20:53:07 +0000 345) 	/* find best M match query and target */
+810304ec (galt     2004-12-08 20:53:07 +0000 346) 	best=WORST;
+810304ec (galt     2004-12-08 20:53:07 +0000 347) 	try=d->bestd;    
+810304ec (galt     2004-12-08 20:53:07 +0000 348) 	if (try > best)
+810304ec (galt     2004-12-08 20:53:07 +0000 349) 	    {
+810304ec (galt     2004-12-08 20:53:07 +0000 350) 	    best=try;
+810304ec (galt     2004-12-08 20:53:07 +0000 351) 	    dir='d';
+810304ec (galt     2004-12-08 20:53:07 +0000 352) 	    }
+810304ec (galt     2004-12-08 20:53:07 +0000 353) 	try=d->bestm;   
+810304ec (galt     2004-12-08 20:53:07 +0000 354) 	if (try > best)
+810304ec (galt     2004-12-08 20:53:07 +0000 355) 	    {
+810304ec (galt     2004-12-08 20:53:07 +0000 356) 	    best=try;
+810304ec (galt     2004-12-08 20:53:07 +0000 357) 	    dir='m';
+810304ec (galt     2004-12-08 20:53:07 +0000 358) 	    }
+810304ec (galt     2004-12-08 20:53:07 +0000 359) 	try=d->besti;   
+810304ec (galt     2004-12-08 20:53:07 +0000 360) 	if (try > best)
+810304ec (galt     2004-12-08 20:53:07 +0000 361) 	    {
+810304ec (galt     2004-12-08 20:53:07 +0000 362) 	    best=try;
+810304ec (galt     2004-12-08 20:53:07 +0000 363) 	    dir='i';
+810304ec (galt     2004-12-08 20:53:07 +0000 364) 	    }
+810304ec (galt     2004-12-08 20:53:07 +0000 365) 	try=0;                   /* local ali can start anywhere */
+810304ec (galt     2004-12-08 20:53:07 +0000 366) 	if (try > best)
+810304ec (galt     2004-12-08 20:53:07 +0000 367) 	    {
+810304ec (galt     2004-12-08 20:53:07 +0000 368) 	    best=try;
+810304ec (galt     2004-12-08 20:53:07 +0000 369) 	    dir='s';         
+810304ec (galt     2004-12-08 20:53:07 +0000 370) 	    }
+810304ec (galt     2004-12-08 20:53:07 +0000 371) 	best += subst;
+810304ec (galt     2004-12-08 20:53:07 +0000 372) 	s->bestm = best;
+810304ec (galt     2004-12-08 20:53:07 +0000 373) 	s->backm = dir;
+810304ec (galt     2004-12-08 20:53:07 +0000 374) 	if (best > bestbest)
+810304ec (galt     2004-12-08 20:53:07 +0000 375) 	    {
+810304ec (galt     2004-12-08 20:53:07 +0000 376) 	    bestbest=best;
+810304ec (galt     2004-12-08 20:53:07 +0000 377) 	    *bestbestOut=best;
+810304ec (galt     2004-12-08 20:53:07 +0000 378) 	    *bestrOut=rr;
+810304ec (galt     2004-12-08 20:53:07 +0000 379) 	    *bestcOut=c;
+810304ec (galt     2004-12-08 20:53:07 +0000 380) 	    *bestdirOut=dir;
+810304ec (galt     2004-12-08 20:53:07 +0000 381) 	    }
+810304ec (galt     2004-12-08 20:53:07 +0000 382) 
+810304ec (galt     2004-12-08 20:53:07 +0000 383) 	/* find best D delete in query */
+810304ec (galt     2004-12-08 20:53:07 +0000 384) 	best=WORST;
+810304ec (galt     2004-12-08 20:53:07 +0000 385) 	try=u->bestd - gapExtend;
+810304ec (galt     2004-12-08 20:53:07 +0000 386) 	if (try > best)
+810304ec (galt     2004-12-08 20:53:07 +0000 387) 	    {
+810304ec (galt     2004-12-08 20:53:07 +0000 388) 	    best=try;
+810304ec (galt     2004-12-08 20:53:07 +0000 389) 	    dir='d';
+810304ec (galt     2004-12-08 20:53:07 +0000 390) 	    }
+810304ec (galt     2004-12-08 20:53:07 +0000 391) 	try=u->bestm - gapOpen;    
+810304ec (galt     2004-12-08 20:53:07 +0000 392) 	if (try > best)
+810304ec (galt     2004-12-08 20:53:07 +0000 393) 	    {
+810304ec (galt     2004-12-08 20:53:07 +0000 394) 	    best=try;
+810304ec (galt     2004-12-08 20:53:07 +0000 395) 	    dir='m';
+810304ec (galt     2004-12-08 20:53:07 +0000 396) 	    }
+810304ec (galt     2004-12-08 20:53:07 +0000 397) 	try=u->besti - doubleGap;    
+810304ec (galt     2004-12-08 20:53:07 +0000 398) 	if (try > best)
+810304ec (galt     2004-12-08 20:53:07 +0000 399) 	    {
+810304ec (galt     2004-12-08 20:53:07 +0000 400) 	    best=try;
+810304ec (galt     2004-12-08 20:53:07 +0000 401) 	    dir='i';
+810304ec (galt     2004-12-08 20:53:07 +0000 402) 	    }
+810304ec (galt     2004-12-08 20:53:07 +0000 403) 	s->bestd = best;
+810304ec (galt     2004-12-08 20:53:07 +0000 404) 	s->backd = dir;
+810304ec (galt     2004-12-08 20:53:07 +0000 405) 	if (best > bestbest)
+810304ec (galt     2004-12-08 20:53:07 +0000 406) 	    {
+810304ec (galt     2004-12-08 20:53:07 +0000 407) 	    bestbest=best;
+810304ec (galt     2004-12-08 20:53:07 +0000 408) 	    *bestbestOut=best;
+810304ec (galt     2004-12-08 20:53:07 +0000 409) 	    *bestrOut=rr;
+810304ec (galt     2004-12-08 20:53:07 +0000 410) 	    *bestcOut=c;
+810304ec (galt     2004-12-08 20:53:07 +0000 411) 	    *bestdirOut=dir;
+810304ec (galt     2004-12-08 20:53:07 +0000 412) 	    }
+810304ec (galt     2004-12-08 20:53:07 +0000 413) 
+810304ec (galt     2004-12-08 20:53:07 +0000 414) 	/* find best I insert in query */
+810304ec (galt     2004-12-08 20:53:07 +0000 415) 	best=WORST;
+810304ec (galt     2004-12-08 20:53:07 +0000 416) 	try=l->bestd - doubleGap;
+810304ec (galt     2004-12-08 20:53:07 +0000 417) 	if (try > best)
+810304ec (galt     2004-12-08 20:53:07 +0000 418) 	    {
+810304ec (galt     2004-12-08 20:53:07 +0000 419) 	    best=try;
+810304ec (galt     2004-12-08 20:53:07 +0000 420) 	    dir='d';
+810304ec (galt     2004-12-08 20:53:07 +0000 421) 	    }
+810304ec (galt     2004-12-08 20:53:07 +0000 422) 	try=l->bestm - gapOpen;    
+810304ec (galt     2004-12-08 20:53:07 +0000 423) 	if (try > best)
+810304ec (galt     2004-12-08 20:53:07 +0000 424) 	    {
+810304ec (galt     2004-12-08 20:53:07 +0000 425) 	    best=try;
+810304ec (galt     2004-12-08 20:53:07 +0000 426) 	    dir='m';
+810304ec (galt     2004-12-08 20:53:07 +0000 427) 	    }
+810304ec (galt     2004-12-08 20:53:07 +0000 428) 	try=l->besti - gapExtend;    
+810304ec (galt     2004-12-08 20:53:07 +0000 429) 	if (try > best)
+810304ec (galt     2004-12-08 20:53:07 +0000 430) 	    {
+810304ec (galt     2004-12-08 20:53:07 +0000 431) 	    best=try;
+810304ec (galt     2004-12-08 20:53:07 +0000 432) 	    dir='i';
+810304ec (galt     2004-12-08 20:53:07 +0000 433) 	    }
+810304ec (galt     2004-12-08 20:53:07 +0000 434) 	s->besti = best;
+810304ec (galt     2004-12-08 20:53:07 +0000 435) 	s->backi = dir;
+810304ec (galt     2004-12-08 20:53:07 +0000 436) 	if (best > bestbest)
+810304ec (galt     2004-12-08 20:53:07 +0000 437) 	    {
+810304ec (galt     2004-12-08 20:53:07 +0000 438) 	    bestbest=best;
+810304ec (galt     2004-12-08 20:53:07 +0000 439) 	    *bestbestOut=best;
+810304ec (galt     2004-12-08 20:53:07 +0000 440) 	    *bestrOut=rr;
+810304ec (galt     2004-12-08 20:53:07 +0000 441) 	    *bestcOut=c;
+810304ec (galt     2004-12-08 20:53:07 +0000 442) 	    *bestdirOut=dir;
+810304ec (galt     2004-12-08 20:53:07 +0000 443) 	    }
+810304ec (galt     2004-12-08 20:53:07 +0000 444) 
+810304ec (galt     2004-12-08 20:53:07 +0000 445) #ifdef DEBUG
+810304ec (galt     2004-12-08 20:53:07 +0000 446)     dump2L(cellc+c); 
+810304ec (galt     2004-12-08 20:53:07 +0000 447) #endif
+810304ec (galt     2004-12-08 20:53:07 +0000 448) 
+810304ec (galt     2004-12-08 20:53:07 +0000 449) 	d++;l++;u++;s++;
+810304ec (galt     2004-12-08 20:53:07 +0000 450) 
+810304ec (galt     2004-12-08 20:53:07 +0000 451) 	}
+810304ec (galt     2004-12-08 20:53:07 +0000 452) #ifdef DEBUG
+810304ec (galt     2004-12-08 20:53:07 +0000 453) printf("\n");
+810304ec (galt     2004-12-08 20:53:07 +0000 454) #endif
+810304ec (galt     2004-12-08 20:53:07 +0000 455)   
+810304ec (galt     2004-12-08 20:53:07 +0000 456)     }
+810304ec (galt     2004-12-08 20:53:07 +0000 457) } 
+810304ec (galt     2004-12-08 20:53:07 +0000 458) 
+810304ec (galt     2004-12-08 20:53:07 +0000 459) 
+810304ec (galt     2004-12-08 20:53:07 +0000 460) 
+810304ec (galt     2004-12-08 20:53:07 +0000 461) struct axt *axtAffine2Level(bioSeq *query, bioSeq *target, struct axtScoreScheme *ss)
+810304ec (galt     2004-12-08 20:53:07 +0000 462) /* 
+810304ec (galt     2004-12-08 20:53:07 +0000 463) 
+1d57cbc5 (galt     2004-12-13 19:56:31 +0000 464)    (Moving boundary version, allows target T size twice as large in same ram)
+1d57cbc5 (galt     2004-12-13 19:56:31 +0000 465) 
+810304ec (galt     2004-12-08 20:53:07 +0000 466)    Return alignment if any of query and target using scoring scheme. 
+810304ec (galt     2004-12-08 20:53:07 +0000 467)    
+810304ec (galt     2004-12-08 20:53:07 +0000 468)    2Level uses an economical amount of ram and should work for large target sequences.
+810304ec (galt     2004-12-08 20:53:07 +0000 469)    
+810304ec (galt     2004-12-08 20:53:07 +0000 470)    If Q is query size and T is target size and M is memory size, then
+810304ec (galt     2004-12-08 20:53:07 +0000 471)    Total memory used M = 30*Q*sqrt(T).  When the target is much larger than the query
+810304ec (galt     2004-12-08 20:53:07 +0000 472)    this method saves ram, and average runtime is only 50% greater, or 1.5 QT.  
+810304ec (galt     2004-12-08 20:53:07 +0000 473)    If Q=5000 and T=245,522,847 for hg17 chr1, then M = 2.2 GB ram.  
+810304ec (galt     2004-12-08 20:53:07 +0000 474)    axtAffine would need M=3QT = 3.4 TB.
+810304ec (galt     2004-12-08 20:53:07 +0000 475)    Of course massive alignments will be painfully slow anyway.
+810304ec (galt     2004-12-08 20:53:07 +0000 476) 
+810304ec (galt     2004-12-08 20:53:07 +0000 477)    Works for protein as well as DNA given the correct scoreScheme.
+810304ec (galt     2004-12-08 20:53:07 +0000 478)   
+810304ec (galt     2004-12-08 20:53:07 +0000 479)    NOTES:
+810304ec (galt     2004-12-08 20:53:07 +0000 480)    Double-gap cost is equal to gap-extend cost, but gap-open would also work.
+810304ec (galt     2004-12-08 20:53:07 +0000 481)    On very large target, score integer may overflow.
+810304ec (galt     2004-12-08 20:53:07 +0000 482)    Input sequences not checked for invalid chars.
+810304ec (galt     2004-12-08 20:53:07 +0000 483)    Input not checked but query should be shorter than target.
+810304ec (galt     2004-12-08 20:53:07 +0000 484)    
+810304ec (galt     2004-12-08 20:53:07 +0000 485) */
+810304ec (galt     2004-12-08 20:53:07 +0000 486) {
+810304ec (galt     2004-12-08 20:53:07 +0000 487) struct axt *axt=needMem(sizeof(struct axt));
+810304ec (galt     2004-12-08 20:53:07 +0000 488) 
+810304ec (galt     2004-12-08 20:53:07 +0000 489) char *q = query->dna;
+810304ec (galt     2004-12-08 20:53:07 +0000 490) char *t = target->dna;
+810304ec (galt     2004-12-08 20:53:07 +0000 491) 
+810304ec (galt     2004-12-08 20:53:07 +0000 492) int Q= query->size;
+810304ec (galt     2004-12-08 20:53:07 +0000 493) int T=target->size;
+810304ec (galt     2004-12-08 20:53:07 +0000 494) int lv=Q+1;                    /* Q+1 is used so often let's call it lv for q-width */
+810304ec (galt     2004-12-08 20:53:07 +0000 495) int lw=T+1;                    /* T+1 is used so often let's call it lw for t-height */
+810304ec (galt     2004-12-08 20:53:07 +0000 496) 
+810304ec (galt     2004-12-08 20:53:07 +0000 497) 
+810304ec (galt     2004-12-08 20:53:07 +0000 498) int r = 0;                                 /* row matrix index */
+810304ec (galt     2004-12-08 20:53:07 +0000 499) int c = 0;                                 /* col matrix index */
+810304ec (galt     2004-12-08 20:53:07 +0000 500) char dir=' ';                              /* dir for bt */
+810304ec (galt     2004-12-08 20:53:07 +0000 501) int bestbest = WORST;                      /* best score in entire mtx */
+810304ec (galt     2004-12-08 20:53:07 +0000 502) 
+1d57cbc5 (galt     2004-12-13 19:56:31 +0000 503) int k=0;                                   /* save every kth row (k decreasing) */
+1d57cbc5 (galt     2004-12-13 19:56:31 +0000 504) int ksize = 0;                             /* T+1 saved rows as ksize, ksize-1,...,1*/
+1d57cbc5 (galt     2004-12-13 19:56:31 +0000 505) int arrsize = 0;                           /* dynprg array size, +1 for 0 sentinel col. */
+1d57cbc5 (galt     2004-12-13 19:56:31 +0000 506) struct cell2L *cells = NULL;               /* best score dyn prog array */
+810304ec (galt     2004-12-08 20:53:07 +0000 507) int ki = 0;                                /* base offset into array */
+810304ec (galt     2004-12-08 20:53:07 +0000 508) int cmost = Q;                             /* track right edge shrinkage during backtrace */
+810304ec (galt     2004-12-08 20:53:07 +0000 509) int kmax = 0;                              /* rows range from ki to kmax */
+810304ec (galt     2004-12-08 20:53:07 +0000 510) int rr = 0;                                /* maps ki base to actual target seq */
+810304ec (galt     2004-12-08 20:53:07 +0000 511) int nrows = 0;                             /* num rows to do, usually k or less */
+810304ec (galt     2004-12-08 20:53:07 +0000 512) int bestr = 0;                             /* remember best r,c,dir for local ali */
+810304ec (galt     2004-12-08 20:53:07 +0000 513) int bestc = 0;           
+1d57cbc5 (galt     2004-12-13 19:56:31 +0000 514) char bestdir = 0;
+1d57cbc5 (galt     2004-12-13 19:56:31 +0000 515) int temp = 0;
+810304ec (galt     2004-12-08 20:53:07 +0000 516) 
+810304ec (galt     2004-12-08 20:53:07 +0000 517) 
+810304ec (galt     2004-12-08 20:53:07 +0000 518) char *btq=NULL;      /* temp pointers to track ends of string while accumulating */
+810304ec (galt     2004-12-08 20:53:07 +0000 519) char *btt=NULL;
+810304ec (galt     2004-12-08 20:53:07 +0000 520) 
+1d57cbc5 (galt     2004-12-13 19:56:31 +0000 521) ksize = (int) (-1 + sqrt(8*lw+1))/2;    
+1d57cbc5 (galt     2004-12-13 19:56:31 +0000 522) if (((ksize*(ksize+1))/2) < lw) 
+1d57cbc5 (galt     2004-12-13 19:56:31 +0000 523)     {ksize++;}
+1d57cbc5 (galt     2004-12-13 19:56:31 +0000 524) arrsize = (ksize+1) * lv;                 /* dynprg array size, +1 for lastrow that moves back up. */
+1d57cbc5 (galt     2004-12-13 19:56:31 +0000 525) cells = needLargeMem(arrsize * sizeof(struct cell2L));   /* best score dyn prog array */
+810304ec (galt     2004-12-08 20:53:07 +0000 526) 
+810304ec (galt     2004-12-08 20:53:07 +0000 527) #ifdef DEBUG
+810304ec (galt     2004-12-08 20:53:07 +0000 528) printf("\n k=%d \n ksize=%d \n arrsize=%d \n Q,lv=%d,%d T=%d \n \n",k,ksize,arrsize,Q,lv,T);
+810304ec (galt     2004-12-08 20:53:07 +0000 529) #endif
+810304ec (galt     2004-12-08 20:53:07 +0000 530) 
+810304ec (galt     2004-12-08 20:53:07 +0000 531) axt->next = NULL;
+810304ec (galt     2004-12-08 20:53:07 +0000 532) axt->qName = cloneString(query->name);
+810304ec (galt     2004-12-08 20:53:07 +0000 533) axt->tName = cloneString(target->name);
+810304ec (galt     2004-12-08 20:53:07 +0000 534) axt->qStrand ='+';
+810304ec (galt     2004-12-08 20:53:07 +0000 535) axt->tStrand ='+';
+810304ec (galt     2004-12-08 20:53:07 +0000 536) axt->frame = 0;
+810304ec (galt     2004-12-08 20:53:07 +0000 537) axt->score=0;
+810304ec (galt     2004-12-08 20:53:07 +0000 538) axt->qStart=0;
+810304ec (galt     2004-12-08 20:53:07 +0000 539) axt->tStart=0;
+810304ec (galt     2004-12-08 20:53:07 +0000 540) axt->qEnd=0;
+810304ec (galt     2004-12-08 20:53:07 +0000 541) axt->tEnd=0;
+810304ec (galt     2004-12-08 20:53:07 +0000 542) axt->symCount=0;
+810304ec (galt     2004-12-08 20:53:07 +0000 543) axt->qSym=NULL;
+810304ec (galt     2004-12-08 20:53:07 +0000 544) axt->tSym=NULL;
+810304ec (galt     2004-12-08 20:53:07 +0000 545) 
+810304ec (galt     2004-12-08 20:53:07 +0000 546) if ((Q==0) || (T==0))
+810304ec (galt     2004-12-08 20:53:07 +0000 547)     {
+810304ec (galt     2004-12-08 20:53:07 +0000 548)     axt->qSym=cloneString("");
+810304ec (galt     2004-12-08 20:53:07 +0000 549)     axt->tSym=cloneString("");
+810304ec (galt     2004-12-08 20:53:07 +0000 550)     freez(&cells);
+810304ec (galt     2004-12-08 20:53:07 +0000 551)     return axt; 
+810304ec (galt     2004-12-08 20:53:07 +0000 552)     }
+810304ec (galt     2004-12-08 20:53:07 +0000 553) 
+810304ec (galt     2004-12-08 20:53:07 +0000 554) 
+810304ec (galt     2004-12-08 20:53:07 +0000 555) 
+810304ec (galt     2004-12-08 20:53:07 +0000 556) /* initialize origin corner */
+810304ec (galt     2004-12-08 20:53:07 +0000 557)     cells[0].bestm=0;
+810304ec (galt     2004-12-08 20:53:07 +0000 558)     cells[0].bestd=WORST;
+810304ec (galt     2004-12-08 20:53:07 +0000 559)     cells[0].besti=WORST;                 
+810304ec (galt     2004-12-08 20:53:07 +0000 560)     cells[0].backm='x';
+810304ec (galt     2004-12-08 20:53:07 +0000 561)     cells[0].backd='x';
+810304ec (galt     2004-12-08 20:53:07 +0000 562)     cells[0].backi='x';
+810304ec (galt     2004-12-08 20:53:07 +0000 563) #ifdef DEBUG
+810304ec (galt     2004-12-08 20:53:07 +0000 564)     dump2L(cells); 
+810304ec (galt     2004-12-08 20:53:07 +0000 565) #endif
+810304ec (galt     2004-12-08 20:53:07 +0000 566) 
+810304ec (galt     2004-12-08 20:53:07 +0000 567) /* initialize row 0 col 1 */
+810304ec (galt     2004-12-08 20:53:07 +0000 568)     cells[1].bestm=WORST;
+810304ec (galt     2004-12-08 20:53:07 +0000 569)     cells[1].bestd=WORST;
+810304ec (galt     2004-12-08 20:53:07 +0000 570)     cells[1].besti=-ss->gapOpen;
+810304ec (galt     2004-12-08 20:53:07 +0000 571)     cells[1].backm='x';
+810304ec (galt     2004-12-08 20:53:07 +0000 572)     cells[1].backd='x';
+810304ec (galt     2004-12-08 20:53:07 +0000 573)     cells[1].backi='m';
+810304ec (galt     2004-12-08 20:53:07 +0000 574) #ifdef DEBUG
+810304ec (galt     2004-12-08 20:53:07 +0000 575)     dump2L(cells+1); 
+810304ec (galt     2004-12-08 20:53:07 +0000 576) #endif
+810304ec (galt     2004-12-08 20:53:07 +0000 577) 
+810304ec (galt     2004-12-08 20:53:07 +0000 578) /* initialize first row of sentinels */
+810304ec (galt     2004-12-08 20:53:07 +0000 579) for (c=2;c<lv;c++)
+810304ec (galt     2004-12-08 20:53:07 +0000 580)     {
+810304ec (galt     2004-12-08 20:53:07 +0000 581)     cells[c].bestm=WORST;
+810304ec (galt     2004-12-08 20:53:07 +0000 582)     cells[c].bestd=WORST;
+810304ec (galt     2004-12-08 20:53:07 +0000 583)     cells[c].besti=cells[c-1].besti-ss->gapExtend;
+810304ec (galt     2004-12-08 20:53:07 +0000 584)     cells[c].backm='x';
+810304ec (galt     2004-12-08 20:53:07 +0000 585)     cells[c].backd='x';
+810304ec (galt     2004-12-08 20:53:07 +0000 586)     cells[c].backi='i';
+810304ec (galt     2004-12-08 20:53:07 +0000 587) #ifdef DEBUG
+810304ec (galt     2004-12-08 20:53:07 +0000 588)     dump2L(cells+c); 
+810304ec (galt     2004-12-08 20:53:07 +0000 589) #endif
+810304ec (galt     2004-12-08 20:53:07 +0000 590)     }
+810304ec (galt     2004-12-08 20:53:07 +0000 591) #ifdef DEBUG
+810304ec (galt     2004-12-08 20:53:07 +0000 592) printf("\n");
+810304ec (galt     2004-12-08 20:53:07 +0000 593) printf("\n");
+810304ec (galt     2004-12-08 20:53:07 +0000 594) #endif
+1d57cbc5 (galt     2004-12-13 19:56:31 +0000 595) 
+1d57cbc5 (galt     2004-12-13 19:56:31 +0000 596) k=ksize;
+1d57cbc5 (galt     2004-12-13 19:56:31 +0000 597) 
+810304ec (galt     2004-12-08 20:53:07 +0000 598) ki++;  /* advance to next row */
+810304ec (galt     2004-12-08 20:53:07 +0000 599) 
+810304ec (galt     2004-12-08 20:53:07 +0000 600) r=1;   /* r is really the rows all done */
+810304ec (galt     2004-12-08 20:53:07 +0000 601) while(1)
+810304ec (galt     2004-12-08 20:53:07 +0000 602)     {
+810304ec (galt     2004-12-08 20:53:07 +0000 603)     nrows = k;  /* do k rows at a time, save every kth row on 1st pass */
+810304ec (galt     2004-12-08 20:53:07 +0000 604)     if (nrows > (lw-r)) {nrows=lw-r;}  /* may get less than k on last set */
+810304ec (galt     2004-12-08 20:53:07 +0000 605)     kmax = ki+nrows-1;
+810304ec (galt     2004-12-08 20:53:07 +0000 606) 
+810304ec (galt     2004-12-08 20:53:07 +0000 607)     kForwardAffine(cells, ki, kmax, r-ki, cmost, lv, q, t, ss, &bestbest, &bestr, &bestc, &bestdir);
+810304ec (galt     2004-12-08 20:53:07 +0000 608) #ifdef DEBUG
+810304ec (galt     2004-12-08 20:53:07 +0000 609) printf("\n");
+810304ec (galt     2004-12-08 20:53:07 +0000 610) #endif
+810304ec (galt     2004-12-08 20:53:07 +0000 611) 
+810304ec (galt     2004-12-08 20:53:07 +0000 612)     r += nrows;
+810304ec (galt     2004-12-08 20:53:07 +0000 613) 
+810304ec (galt     2004-12-08 20:53:07 +0000 614)     if (nrows == k)   /* got full set of k rows */
+810304ec (galt     2004-12-08 20:53:07 +0000 615) 	{
+810304ec (galt     2004-12-08 20:53:07 +0000 616) 	/* compress, save every kth row */     
+810304ec (galt     2004-12-08 20:53:07 +0000 617) 	/* optimize as a mem-copy */
+810304ec (galt     2004-12-08 20:53:07 +0000 618) 	memcpy(cells+ki*lv,cells+kmax*lv,sizeof(struct cell2L) *lv);    
+810304ec (galt     2004-12-08 20:53:07 +0000 619) 	}
+810304ec (galt     2004-12-08 20:53:07 +0000 620) 
+810304ec (galt     2004-12-08 20:53:07 +0000 621)     if (r >= lw){break;} /* we are done */
+810304ec (galt     2004-12-08 20:53:07 +0000 622)     
+810304ec (galt     2004-12-08 20:53:07 +0000 623)     ki++;
+1d57cbc5 (galt     2004-12-13 19:56:31 +0000 624)     k--;        /* decreasing k is "moving boundary" */
+810304ec (galt     2004-12-08 20:53:07 +0000 625) }
+810304ec (galt     2004-12-08 20:53:07 +0000 626) 
+810304ec (galt     2004-12-08 20:53:07 +0000 627) #ifdef DEBUG
+810304ec (galt     2004-12-08 20:53:07 +0000 628) printf("\nFWD PASS DONE. bestbest=%d bestr=%d bestc=%d bestdir=%c \n\n",bestbest,bestr,bestc,bestdir);
+810304ec (galt     2004-12-08 20:53:07 +0000 629) #endif
+810304ec (galt     2004-12-08 20:53:07 +0000 630) 
+810304ec (galt     2004-12-08 20:53:07 +0000 631) /* start doing backtrace */
+810304ec (galt     2004-12-08 20:53:07 +0000 632)     
+810304ec (galt     2004-12-08 20:53:07 +0000 633) /* adjust for reverse pass */
+810304ec (galt     2004-12-08 20:53:07 +0000 634) 
+810304ec (galt     2004-12-08 20:53:07 +0000 635) /* for local we automatically skip to bestr, bestc to begin tb */
+810304ec (galt     2004-12-08 20:53:07 +0000 636) 
+810304ec (galt     2004-12-08 20:53:07 +0000 637) if (bestbest <= 0)  /* null alignment */
+810304ec (galt     2004-12-08 20:53:07 +0000 638)     {
+810304ec (galt     2004-12-08 20:53:07 +0000 639)     bestr=0;
+810304ec (galt     2004-12-08 20:53:07 +0000 640)     bestc=0;
+810304ec (galt     2004-12-08 20:53:07 +0000 641)     /* bestdir won't matter */
+810304ec (galt     2004-12-08 20:53:07 +0000 642)     }
+810304ec (galt     2004-12-08 20:53:07 +0000 643) 
+810304ec (galt     2004-12-08 20:53:07 +0000 644) r = bestr;
+810304ec (galt     2004-12-08 20:53:07 +0000 645) c = bestc;
+810304ec (galt     2004-12-08 20:53:07 +0000 646) dir = bestdir;
+810304ec (galt     2004-12-08 20:53:07 +0000 647) cmost = c;
+810304ec (galt     2004-12-08 20:53:07 +0000 648) 
+810304ec (galt     2004-12-08 20:53:07 +0000 649) axt->qEnd=bestc;
+810304ec (galt     2004-12-08 20:53:07 +0000 650) axt->tEnd=bestr;
+810304ec (galt     2004-12-08 20:53:07 +0000 651) 
+1d57cbc5 (galt     2004-12-13 19:56:31 +0000 652) temp = (2*ksize)+1;
+1d57cbc5 (galt     2004-12-13 19:56:31 +0000 653) ki = (int)(temp-sqrt((temp*temp)-(8*r)))/2;
+1d57cbc5 (galt     2004-12-13 19:56:31 +0000 654) rr = ((2*ksize*ki)+ki-(ki*ki))/2;
+1d57cbc5 (galt     2004-12-13 19:56:31 +0000 655) kmax = ki+(r-rr);
+1d57cbc5 (galt     2004-12-13 19:56:31 +0000 656) k = ksize - ki;
+1d57cbc5 (galt     2004-12-13 19:56:31 +0000 657) 
+810304ec (galt     2004-12-08 20:53:07 +0000 658) 
+810304ec (galt     2004-12-08 20:53:07 +0000 659) /* now that we jumped back into saved start-points,
+810304ec (galt     2004-12-08 20:53:07 +0000 660)    let's fill the array forward and start backtrace from there.
+810304ec (galt     2004-12-08 20:53:07 +0000 661) */
+810304ec (galt     2004-12-08 20:53:07 +0000 662) 
+810304ec (galt     2004-12-08 20:53:07 +0000 663) #ifdef DEBUG
+810304ec (galt     2004-12-08 20:53:07 +0000 664) printf("bestr=%d, bestc=%d, bestdir=%c k=%d, ki=%d, kmax=%d\n",bestr,bestc,bestdir,k,ki,kmax);
+810304ec (galt     2004-12-08 20:53:07 +0000 665) #endif
+810304ec (galt     2004-12-08 20:53:07 +0000 666) 
+810304ec (galt     2004-12-08 20:53:07 +0000 667) kForwardAffine(cells, ki+1, kmax, rr-ki, cmost, lv, q, t, ss, &bestbest, &bestr, &bestc, &bestdir);
+810304ec (galt     2004-12-08 20:53:07 +0000 668)    
+810304ec (galt     2004-12-08 20:53:07 +0000 669) #ifdef DEBUG
+810304ec (galt     2004-12-08 20:53:07 +0000 670) printf("\n(initial)BKWD PASS DONE. cmost=%d r=%d c=%d dir=%c \n\n",cmost,r,c,dir);
+810304ec (galt     2004-12-08 20:53:07 +0000 671) #endif
+810304ec (galt     2004-12-08 20:53:07 +0000 672) 
+810304ec (galt     2004-12-08 20:53:07 +0000 673) 
+810304ec (galt     2004-12-08 20:53:07 +0000 674) /* backtrace */   
+810304ec (galt     2004-12-08 20:53:07 +0000 675) 
+810304ec (galt     2004-12-08 20:53:07 +0000 676) /* handling for resulting ali'd strings when very long */
+810304ec (galt     2004-12-08 20:53:07 +0000 677) 
+810304ec (galt     2004-12-08 20:53:07 +0000 678) axt->symCount=0;
+810304ec (galt     2004-12-08 20:53:07 +0000 679) axt->qSym = needLargeMem((Q+T+1)*sizeof(char));
+810304ec (galt     2004-12-08 20:53:07 +0000 680) axt->tSym = needLargeMem((Q+T+1)*sizeof(char));
+810304ec (galt     2004-12-08 20:53:07 +0000 681) btq=axt->qSym;
+810304ec (galt     2004-12-08 20:53:07 +0000 682) btt=axt->tSym;
+810304ec (galt     2004-12-08 20:53:07 +0000 683) while(1)
+810304ec (galt     2004-12-08 20:53:07 +0000 684)     {
+810304ec (galt     2004-12-08 20:53:07 +0000 685)     while(1)
+810304ec (galt     2004-12-08 20:53:07 +0000 686) 	{
+810304ec (galt     2004-12-08 20:53:07 +0000 687) #ifdef DEBUG
+810304ec (galt     2004-12-08 20:53:07 +0000 688) 	printf("bt: r=%d, c=%d, dir=%c \n",r,c,dir);
+810304ec (galt     2004-12-08 20:53:07 +0000 689) #endif
+810304ec (galt     2004-12-08 20:53:07 +0000 690) 
+810304ec (galt     2004-12-08 20:53:07 +0000 691) 	
+810304ec (galt     2004-12-08 20:53:07 +0000 692)     	if ((r==0) && (c==0)){break;} /* hit origin, done */
+810304ec (galt     2004-12-08 20:53:07 +0000 693) 	if (r<rr){break;} /* ran out of targ seq, backup and reload */
+810304ec (galt     2004-12-08 20:53:07 +0000 694) 	if (dir=='x'){errAbort("unexpected error backtracing");} /* x only at origin */
+810304ec (galt     2004-12-08 20:53:07 +0000 695) 	if (dir=='s'){break;}   /* hit start, local ali */
+810304ec (galt     2004-12-08 20:53:07 +0000 696) 	if (dir=='m') /* match */
+810304ec (galt     2004-12-08 20:53:07 +0000 697) 	    {
+810304ec (galt     2004-12-08 20:53:07 +0000 698) 	    *btq++=q[c-1];  /* accumulate alignment output strings */
+810304ec (galt     2004-12-08 20:53:07 +0000 699) 	    *btt++=t[r-1];  /* accumulate alignment output strings */
+810304ec (galt     2004-12-08 20:53:07 +0000 700) 	    axt->symCount++; 
+810304ec (galt     2004-12-08 20:53:07 +0000 701) 	    dir = cells[lv*(ki+r-rr)+c].backm;  /* follow backtrace */
+810304ec (galt     2004-12-08 20:53:07 +0000 702) 	    r--;            /* adjust coords to move in dir spec'd by back ptr */
+810304ec (galt     2004-12-08 20:53:07 +0000 703) 	    c--;
+810304ec (galt     2004-12-08 20:53:07 +0000 704) 	    cmost--;        /* decreases as query seq is aligned, so saves on unused areas */
+810304ec (galt     2004-12-08 20:53:07 +0000 705) 	    }
+810304ec (galt     2004-12-08 20:53:07 +0000 706) 	else
+810304ec (galt     2004-12-08 20:53:07 +0000 707) 	    {
+810304ec (galt     2004-12-08 20:53:07 +0000 708) 	    if (dir=='d')  /* delete in query (gap) */
+810304ec (galt     2004-12-08 20:53:07 +0000 709) 		{
+810304ec (galt     2004-12-08 20:53:07 +0000 710) 		*btq++='-';     /* accumulate alignment output strings */
+810304ec (galt     2004-12-08 20:53:07 +0000 711)     		*btt++=t[r-1];  /* accumulate alignment output strings */
+810304ec (galt     2004-12-08 20:53:07 +0000 712)     		axt->symCount++; 
+810304ec (galt     2004-12-08 20:53:07 +0000 713) 		dir = cells[lv*(ki+r-rr)+c].backd;  /* follow backtrace */
+810304ec (galt     2004-12-08 20:53:07 +0000 714)     		r--;            /* adjust coords to move in dir spec'd by back ptr */
+810304ec (galt     2004-12-08 20:53:07 +0000 715) 		}
+810304ec (galt     2004-12-08 20:53:07 +0000 716) 	    else    /* insert in query (gap) */
+810304ec (galt     2004-12-08 20:53:07 +0000 717) 		{
+810304ec (galt     2004-12-08 20:53:07 +0000 718) 		*btq++=q[c-1];  /* accumulate alignment output strings */
+810304ec (galt     2004-12-08 20:53:07 +0000 719)     		*btt++='-';     /* accumulate alignment output strings */
+810304ec (galt     2004-12-08 20:53:07 +0000 720)     		axt->symCount++; 
+810304ec (galt     2004-12-08 20:53:07 +0000 721) 		dir = cells[lv*(ki+r-rr)+c].backi;  /* follow backtrace */
+810304ec (galt     2004-12-08 20:53:07 +0000 722)     		c--;
+810304ec (galt     2004-12-08 20:53:07 +0000 723)     		cmost--;        /* decreases as query seq is aligned, so saves on unused areas */
+810304ec (galt     2004-12-08 20:53:07 +0000 724) 		}
+810304ec (galt     2004-12-08 20:53:07 +0000 725) 	    }
+810304ec (galt     2004-12-08 20:53:07 +0000 726) 	
+810304ec (galt     2004-12-08 20:53:07 +0000 727) 	}
+810304ec (galt     2004-12-08 20:53:07 +0000 728) 
+810304ec (galt     2004-12-08 20:53:07 +0000 729)     /* back up and do it again */
+810304ec (galt     2004-12-08 20:53:07 +0000 730)     ki--;
+1d57cbc5 (galt     2004-12-13 19:56:31 +0000 731)     k++;   /* k grows as we move back up */ 
+810304ec (galt     2004-12-08 20:53:07 +0000 732)     rr-=k;
+810304ec (galt     2004-12-08 20:53:07 +0000 733)     kmax = ki+k-1;
+810304ec (galt     2004-12-08 20:53:07 +0000 734) 
+810304ec (galt     2004-12-08 20:53:07 +0000 735)     /* check for various termination conditions to stop main loop */
+810304ec (galt     2004-12-08 20:53:07 +0000 736)     if (ki < 0) {break;}
+810304ec (galt     2004-12-08 20:53:07 +0000 737)     if ((r==0)&&(c==0)) {break;}
+810304ec (galt     2004-12-08 20:53:07 +0000 738)     if (dir=='s') {break;}
+810304ec (galt     2004-12-08 20:53:07 +0000 739) 
+810304ec (galt     2004-12-08 20:53:07 +0000 740)     /* re-calculate array from previous saved kth row going back
+810304ec (galt     2004-12-08 20:53:07 +0000 741)        this is how we save memory, but have to regenerate half on average
+810304ec (galt     2004-12-08 20:53:07 +0000 742)        we are re-using the same call 
+810304ec (galt     2004-12-08 20:53:07 +0000 743)      */
+810304ec (galt     2004-12-08 20:53:07 +0000 744) 
+1d57cbc5 (galt     2004-12-13 19:56:31 +0000 745) #ifdef DEBUG
+1d57cbc5 (galt     2004-12-13 19:56:31 +0000 746) printf("bestr=%d, bestc=%d, bestdir=%c k=%d, ki=%d, kmax=%d\n",bestr,bestc,bestdir,k,ki,kmax);
+1d57cbc5 (galt     2004-12-13 19:56:31 +0000 747) #endif
+1d57cbc5 (galt     2004-12-13 19:56:31 +0000 748) 
+810304ec (galt     2004-12-08 20:53:07 +0000 749) 
+810304ec (galt     2004-12-08 20:53:07 +0000 750)     kForwardAffine(cells, ki+1, kmax, rr-ki, cmost, lv, q, t, ss, &bestbest, &bestr, &bestc, &bestdir);
+810304ec (galt     2004-12-08 20:53:07 +0000 751) 
+810304ec (galt     2004-12-08 20:53:07 +0000 752) #ifdef DEBUG
+810304ec (galt     2004-12-08 20:53:07 +0000 753)     printf("\nBKWD PASS DONE. cmost=%d r=%d c=%d\n\n",cmost,r,c);
+810304ec (galt     2004-12-08 20:53:07 +0000 754) #endif
+810304ec (galt     2004-12-08 20:53:07 +0000 755) 
+810304ec (galt     2004-12-08 20:53:07 +0000 756)     }
+810304ec (galt     2004-12-08 20:53:07 +0000 757) 
+810304ec (galt     2004-12-08 20:53:07 +0000 758) axt->qStart=c;
+810304ec (galt     2004-12-08 20:53:07 +0000 759) axt->tStart=r;
+810304ec (galt     2004-12-08 20:53:07 +0000 760) 
+810304ec (galt     2004-12-08 20:53:07 +0000 761) /* reverse backwards trace and zero-terminate strings */
+810304ec (galt     2004-12-08 20:53:07 +0000 762) 
+810304ec (galt     2004-12-08 20:53:07 +0000 763) reverseBytes(axt->qSym,axt->symCount);
+810304ec (galt     2004-12-08 20:53:07 +0000 764) reverseBytes(axt->tSym,axt->symCount);
+810304ec (galt     2004-12-08 20:53:07 +0000 765) axt->qSym[axt->symCount]=0;
+810304ec (galt     2004-12-08 20:53:07 +0000 766) axt->tSym[axt->symCount]=0;
+810304ec (galt     2004-12-08 20:53:07 +0000 767) 
+810304ec (galt     2004-12-08 20:53:07 +0000 768) axt->score=bestbest;
+810304ec (galt     2004-12-08 20:53:07 +0000 769) 
+810304ec (galt     2004-12-08 20:53:07 +0000 770) 
+810304ec (galt     2004-12-08 20:53:07 +0000 771) /* 
+810304ec (galt     2004-12-08 20:53:07 +0000 772) should I test stringsize and if massively smaller, realloc string to save ram? 
+810304ec (galt     2004-12-08 20:53:07 +0000 773) */
+810304ec (galt     2004-12-08 20:53:07 +0000 774) 
+810304ec (galt     2004-12-08 20:53:07 +0000 775) freez(&cells);
+810304ec (galt     2004-12-08 20:53:07 +0000 776) 
+810304ec (galt     2004-12-08 20:53:07 +0000 777) return axt;
+810304ec (galt     2004-12-08 20:53:07 +0000 778) }
+810304ec (galt     2004-12-08 20:53:07 +0000 779) 
+810304ec (galt     2004-12-08 20:53:07 +0000 780) 
+810304ec (galt     2004-12-08 20:53:07 +0000 781) 
diff --git a/gbtools/src/blatSrc/lib/fq.c b/gbtools/src/blatSrc/lib/fq.c
new file mode 100644
index 0000000..56ca99e
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/fq.c
@@ -0,0 +1,65 @@
+/* fq - stuff for doing i/o on fastq files. */
+
+/* Copyright (C) 2014 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "linefile.h"
+#include "fq.h"
+
+struct fq *fqReadNext(struct lineFile *lf)
+/* Read next record, return it as fq. */
+{
+struct fq *fq;
+AllocVar(fq);
+char *line;
+
+/* Deal with initial line starting with '@' */
+if (!lineFileNextReal(lf, &line))
+    return FALSE;
+if (line[0] != '@')
+    {
+    errAbort("Expecting line starting with '@' got %s line %d of %s", 
+	line, lf->lineIx, lf->fileName);
+    }
+fq->header = cloneString(line);
+
+/* Deal with line containing sequence. */
+if (!lineFileNext(lf, &line,  NULL))
+    errAbort("%s truncated in middle of record", lf->fileName);
+fq->dna = cloneString(line);
+
+/* Check for + line */
+if (!lineFileNext(lf, &line,  NULL))
+    errAbort("%s truncated in middle of record", lf->fileName);
+if (line[0] != '+')
+    errAbort("Expecting + line %d of %s", lf->lineIx, lf->fileName);
+
+/* Get quality line */
+if (!lineFileNext(lf, &line,  NULL))
+    errAbort("%s truncated in middle of record", lf->fileName);
+fq->quality = (unsigned char *)cloneString(line);
+return fq;
+}
+
+void fqFree(struct fq **pFq)
+/* Free up *pFq and set it to NULL */
+{
+struct fq *fq = *pFq;
+if (fq != NULL)
+    {
+    freeMem(fq->header);
+    freeMem(fq->dna);
+    freeMem(fq->quality);
+    freez(pFq);
+    }
+}
+
+void fqWriteNext(struct fq *input, FILE *f)
+/*  Writes a single fastq structure to the file provided. */
+{
+fprintf(f,"%s\n",input->header);
+fprintf(f,"%s\n",input->dna);
+fprintf(f,"%s\n","+");
+fprintf(f,"%s\n",input->quality);
+}
diff --git a/gbtools/src/blatSrc/lib/fuzzyShow.c b/gbtools/src/blatSrc/lib/fuzzyShow.c
new file mode 100644
index 0000000..59e3851
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/fuzzyShow.c
@@ -0,0 +1,406 @@
+/* fuzzyShow - routines to show ffAli alignments in text
+ * or html. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "dnautil.h"
+#include "memgfx.h"
+#include "fuzzyFind.h"
+#include "htmshell.h"
+#include "cda.h"
+#include "seqOut.h"
+
+
+static void ffShNeedle(FILE *f, DNA *needle, int needleSize,
+		       int needleNumOffset, char *colorFlags,
+		       struct ffAli *aliList, boolean upcMatch,
+		       int cdsS, int cdsE,
+		       boolean accentRange, int accentStart, int accentEnd)
+/* Display the needle sequence with HTML highlighting. */
+{
+struct cfm *cfm = cfmNew(10, 50, TRUE, FALSE, f, needleNumOffset);
+char *n = cloneMem(needle, needleSize);
+char *accentFlags = needMem(needleSize);
+struct ffAli *leftAli = aliList;
+struct ffAli *ali;
+long i;
+
+zeroBytes(colorFlags, needleSize);
+zeroBytes(accentFlags, needleSize);
+fprintf(f, "<PRE><TT>\n");
+if (aliList != NULL)
+    {
+    for (leftAli = aliList; leftAli->left != NULL; leftAli = leftAli->left)
+	;
+    }
+for (ali = leftAli; ali != NULL; ali = ali->right)
+    {
+    boolean utr = FALSE;
+    int off = ali->nStart-needle;
+    int count = ali->nEnd - ali->nStart;
+    if ((cdsE > 0) && ((cdsS-off-1) > 0)) 
+	utr = TRUE;
+    for (i=0; i<count; ++i)
+	{
+	if (!utr && (i > (cdsE-off-1)) && (cdsE > 0))
+	    utr = TRUE;
+	if (utr && (i == (cdsS-off)))
+	    utr = FALSE;
+	if (toupper(ali->hStart[i]) == toupper(ali->nStart[i]))
+	    {
+	    if (utr)
+		colorFlags[off+i] = ((i == 0 || i == count-1) ? socOrange : socRed);
+	    else
+		colorFlags[off+i] = ((i == 0 || i == count-1) ? socBrightBlue : socBlue);
+	    if (upcMatch)
+		n[off+i] = toupper(n[off+i]);
+	    }
+	if (accentRange)
+	    {
+	    if (off+i >= accentStart && off+i < accentEnd)
+		accentFlags[off+i] = TRUE;
+	    }
+	}
+    }
+for (i=0; i<needleSize; ++i)
+    {
+    if (accentRange && i == accentStart)
+	fprintf(f, "<A NAME=cDNAStart></A>");
+    cfmOutExt(cfm, n[i], seqOutColorLookup[(int)colorFlags[i]],
+	      accentFlags[i], accentFlags[i], FALSE);
+    }
+cfmFree(&cfm);
+freeMem(n);
+freeMem(accentFlags);
+fprintf(f, "</TT></PRE>\n");
+htmHorizontalLine(f);
+}
+
+void ffShowSideBySide(FILE *f, struct ffAli *leftAli, DNA *needle, int needleNumOffset,
+		      DNA *haystack, int hayNumOffset, int haySize, int hayOffStart, int hayOffEnd,
+		      int blockMaxGap, boolean rcHaystack, boolean initialNewline)
+/* Print HTML side-by-side alignment of needle and haystack (no title or labels) to f.
+ * {hay,needle}NumOffset are the coords at which the DNA sequence begins.
+ * hayOff{Start,End} are the range of coords *relative to hayNumOffset* to which the 
+ * alignment display will be clipped -- pass in {0,haySize} for no clipping. */
+{
+fprintf(f, "<PRE><TT>%s", initialNewline ? "\n" : "");
+struct ffAli *ali, *lastAli = NULL;
+struct baf baf;
+/* NOTE: if rcHaystack, hayNumOffset changes here into the end, not start! */
+if (rcHaystack) 
+    hayNumOffset += haySize;
+bafInit(&baf, needle, needleNumOffset, FALSE, 
+    	haystack, hayNumOffset, rcHaystack, f, 50, FALSE);
+for (ali=leftAli; ali!=NULL; ali = ali->right)
+    {
+    int i;
+    boolean doBreak = TRUE;
+    if ((ali->hEnd - haystack) <= hayOffStart ||
+	(ali->hStart - haystack) >= hayOffEnd)
+	continue;
+
+    /* Decide whether to put in a line break and/or blank characters */
+    if (lastAli != NULL)
+	{
+	int nSkip = ali->nStart - lastAli->nEnd;
+	int hSkip = ali->hStart - lastAli->hEnd;
+	if (nSkip > 0 && nSkip <= blockMaxGap && hSkip == 0)
+	    {
+	    for (i=0; i<nSkip; ++i)
+		bafOut(&baf, lastAli->nEnd[i],'.');
+	    doBreak = FALSE; 
+	    }
+	else if (hSkip > 0 && hSkip <= blockMaxGap && nSkip == 0)
+	    {
+	    for (i=0; i<hSkip; ++i)
+		bafOut(&baf, '.', lastAli->hEnd[i]);
+	    doBreak = FALSE;
+	    }
+	else if (hSkip == nSkip && hSkip <= blockMaxGap)
+	    {
+	    for (i=0; i<hSkip; ++i)
+		bafOut(&baf, lastAli->nEnd[i], lastAli->hEnd[i]);
+	    doBreak = FALSE;
+	    }
+	}
+    else
+	{
+	doBreak = FALSE;
+	}
+    if (doBreak)
+	bafFlushLine(&baf);
+    int offset = max(0, (hayOffStart - (ali->hStart - haystack)));
+    int nStart = offset + ali->nStart - needle;
+    int hStart = offset + ali->hStart - haystack;
+    bafSetPos(&baf, nStart, hStart);
+    if (doBreak || lastAli == NULL)
+	bafStartLine(&baf);
+    int aliLen = ali->nEnd - ali->nStart;
+    for (i=0; i<aliLen; ++i)
+	{
+	int hayOff = i + (ali->hStart - haystack);
+	if (hayOff < hayOffStart)
+	    continue;
+	if (hayOff >= hayOffEnd)
+	    break;
+	bafOut(&baf, ali->nStart[i], ali->hStart[i]);
+	}
+    lastAli = ali;
+    }
+if (leftAli != NULL)
+    bafFlushLineNoHr(&baf);
+fprintf(f, "</TT></PRE>\n");
+}
+
+
+int ffShAliPart(FILE *f, struct ffAli *aliList, 
+    char *needleName, DNA *needle, int needleSize, int needleNumOffset,
+    char *haystackName, DNA *haystack, int haySize, int hayNumOffset,
+    int blockMaxGap, boolean rcNeedle, boolean rcHaystack,
+    boolean showJumpTable, 
+    boolean showNeedle, boolean showHaystack,
+    boolean showSideBySide, boolean upcMatch,
+    int cdsS, int cdsE, int hayPartS, int hayPartE)
+/* Display parts of alignment on html page.  If hayPartS..hayPartE is a 
+ * smaller subrange of the alignment, highlight that part of the alignment 
+ * in both needle and haystack with underline & bold, and show only that 
+ * part of the haystack (plus padding).  Returns number of blocks (after
+ * merging blocks separated by blockMaxGap or less). */
+{
+long i;
+struct ffAli *ali;
+struct ffAli *lastAli;
+struct ffAli *leftAli = aliList;
+struct ffAli *rightAli = aliList;
+int maxSize = (needleSize > haySize ? needleSize : haySize);
+char *colorFlags = needMem(maxSize);
+int anchorCount = 0;
+boolean restrictToWindow = FALSE;
+int hayOffStart = 0, hayOffEnd = haySize;
+int hayPaddedOffStart = 0, hayPaddedOffEnd = haySize;
+int hayExtremity = rcHaystack ? (hayNumOffset + haySize) : hayNumOffset;
+int nPartS=0, nPartE=0;
+
+if (aliList != NULL)
+    {
+    while (leftAli->left != NULL) leftAli = leftAli->left;
+    while (rightAli->right != NULL) rightAli = rightAli->right;
+    }
+
+/* If we are only showing part of the alignment, translate haystack window
+ * coords to needle window coords and haystack-offset window coords: */
+if (hayPartS > (hayNumOffset + (leftAli->hStart - haystack)) ||
+    (hayPartE > 0 && hayPartE < (hayNumOffset + (rightAli->hEnd - haystack))))
+    {
+    DNA *haystackPartS;
+    DNA *haystackPartE;
+    restrictToWindow = TRUE;
+    if (rcHaystack)
+	{
+	haystackPartS = haystack + (haySize - (hayPartE - hayNumOffset));
+	haystackPartE = haystack + (haySize - (hayPartS - hayNumOffset));
+	}
+    else
+	{
+	haystackPartS = haystack + hayPartS - hayNumOffset;
+	haystackPartE = haystack + hayPartE - hayNumOffset;
+	}
+    boolean foundStart = FALSE;
+    hayOffStart = haystackPartS - haystack;
+    hayOffEnd = haystackPartE - haystack;
+    for (ali = leftAli;  ali != NULL;  ali = ali->right)
+	{
+	if (haystackPartS < ali->hEnd && !foundStart)
+	    {
+	    int offset = haystackPartS - ali->hStart;
+	    if (offset < 0)
+		offset = 0;
+	    nPartS = offset + ali->nStart - needle;
+	    hayOffStart = offset + ali->hStart - haystack;
+	    foundStart = TRUE;
+	    }
+	if (haystackPartE > ali->hStart)
+	    {
+	    if (haystackPartE > ali->hEnd)
+		{
+		nPartE = ali->nEnd - needle;
+		hayOffEnd = ali->hEnd - haystack;
+		}
+	    else
+		{
+		nPartE = haystackPartE - ali->hStart + ali->nStart - needle;
+		hayOffEnd = haystackPartE - haystack;
+		}
+	    }
+	}
+    hayPaddedOffStart = max(0, (hayOffStart - 100));
+    hayPaddedOffEnd = min(haySize, (hayOffEnd + 100));
+    if (rcHaystack)
+	hayExtremity = hayNumOffset + haySize - hayPaddedOffStart;
+    else
+	hayExtremity = hayNumOffset + hayPaddedOffStart;
+    }
+
+if (showJumpTable)
+    {
+    fputs("<CENTER><P><TABLE BORDER=1 WIDTH=\"97%\"><TR>", f);
+    fputs("<TD WIDTH=\"23%\"><P ALIGN=CENTER><A HREF=\"#cDNA\">cDNA Sequence</A></TD>", f);
+    if (restrictToWindow)
+	fputs("<TD WIDTH=\"23%\"><P ALIGN=CENTER><A HREF=\"#cDNAStart\">cDNA Sequence in window</A></TD>", f);
+    fputs("<TD WIDTH=\"27%\"><P ALIGN=\"CENTER\"><A HREF=\"#genomic\">Genomic Sequence</A></TD>", f);
+    fputs("<TD WIDTH=\"29%\"><P ALIGN=\"CENTER\"><A HREF=\"#1\">cDNA in Genomic</A></TD>", f);
+    fputs("<TD WIDTH=\"21%\"><P ALIGN=\"CENTER\"><A HREF=\"#ali\">Side by Side</A></TD>", f);
+    fputs("</TR></TABLE>\n", f);
+    }
+if (cdsE > 0) 
+    {
+    fprintf(f, "Matching bases in coding regions of cDNA and genomic sequences are colored blue%s. ", 
+	    (upcMatch ? " and capitalized" : ""));
+    fprintf(f, "Matching bases in UTR regions of cDNA and genomic sequences are colored red%s. ", 
+	    (upcMatch ? " and capitalized" : ""));
+    fputs("Light blue (coding) or orange (UTR) bases mark the boundaries of gaps in either sequence "
+	  "(often splice sites).\n", f);
+    } 
+else 
+    {
+    fprintf(f, "Matching bases in cDNA and genomic sequences are colored blue%s. ", 
+	    (upcMatch ? " and capitalized" : ""));
+    fputs("Light blue bases mark the boundaries of gaps in either sequence "
+	  "(often splice sites).\n", f);
+    } 
+if (showNeedle && restrictToWindow)
+    fputs("Bases that were in the selected browser region are shown in bold "
+	  "and underlined, "
+	  "and only the alignment for these bases is displayed in the "
+	  "Genomic and Side by Side sections.\n", f);
+
+if (showJumpTable)
+    fputs("</P></CENTER>\n", f);
+htmHorizontalLine(f);
+
+fprintf(f, "<H4><A NAME=cDNA></A>cDNA %s%s</H4>\n", needleName, (rcNeedle ? " (reverse complemented)" : ""));
+
+if (rcNeedle)
+    reverseComplement(needle, needleSize);
+
+if (showNeedle)
+    {
+    ffShNeedle(f, needle, needleSize, needleNumOffset, colorFlags,
+	       aliList, upcMatch, cdsS, cdsE,
+	       restrictToWindow, nPartS, nPartE);
+    }
+
+if (showHaystack)
+    {
+    struct cfm *cfm = cfmNew(10, 50, TRUE, rcHaystack, f, hayExtremity);
+    char *h = cloneMem(haystack, haySize);
+    char *accentFlags = needMem(haySize);
+    zeroBytes(accentFlags, haySize);
+    fprintf(f, "<H4><A NAME=genomic></A>Genomic %s %s:</H4>\n", 
+    	haystackName,
+	(rcHaystack ? "(reverse strand)" : ""));
+    fprintf(f, "<PRE><TT>\n");
+    zeroBytes(colorFlags, haySize);
+    for (ali = leftAli; ali != NULL; ali = ali->right)
+	{
+	boolean utr = FALSE;
+	int i;
+	int off = ali->hStart-haystack;
+	int count = ali->hEnd - ali->hStart;
+	int offn = ali->nStart-needle;
+	if ((cdsE > 0) && ((cdsS-offn-1) > 0)) 
+	    utr = TRUE;
+	for (i=0; i<count; ++i)
+	    {
+	    if (!utr && (i > (cdsE-offn-1)) && (cdsE > 0))
+		utr = TRUE;
+	    if (utr && (i == (cdsS-offn)))
+		utr = FALSE;
+	    if (toupper(ali->hStart[i]) == toupper(ali->nStart[i]))
+		{
+		if (utr)
+		    colorFlags[off+i] = ((i == 0 || i == count-1) ? socOrange : socRed);
+		else
+		    colorFlags[off+i] = ((i == 0 || i == count-1) ? socBrightBlue : socBlue);
+		if (upcMatch)
+		    h[off+i] = toupper(h[off+i]);
+		}
+	    if (restrictToWindow && off+i >= hayOffStart && off+i < hayOffEnd)
+		accentFlags[off+i] = TRUE;
+	    }
+	}
+    ali = leftAli;
+    lastAli = NULL;
+    while (ali && (ali->hEnd - haystack) <= hayPaddedOffStart)
+	ali = ali->right;
+    for (i = hayPaddedOffStart; i < hayPaddedOffEnd; ++i)
+	{
+	/* Put down "anchor" on first match position in haystack
+	 * so user can hop here with a click on the needle. */
+	if (ali != NULL &&  i == ali->hStart - haystack)
+	    {
+	    if (lastAli == NULL || ali->hStart - lastAli->hEnd > blockMaxGap)
+		{
+		fprintf(f, "<A NAME=%d></A>", ++anchorCount);
+		}
+	    lastAli = ali;
+	    ali = ali->right;
+	    }
+	cfmOutExt(cfm, h[i], seqOutColorLookup[(int)colorFlags[i]],
+		  accentFlags[i], accentFlags[i], FALSE);
+	}
+    cfmFree(&cfm);
+    freeMem(h);
+    fprintf(f, "</TT></PRE>\n");
+    htmHorizontalLine(f);
+    }
+
+if (showSideBySide)
+    {
+    fprintf(f, "<H4><A NAME=ali></A>Side by Side Alignment</H4>\n");
+    ffShowSideBySide(f, leftAli, needle, needleNumOffset, haystack, hayNumOffset, haySize,
+		     hayOffStart, hayOffEnd, blockMaxGap, rcHaystack, TRUE);
+    fprintf(f, "<HR ALIGN=\"CENTER\">");
+    fprintf(f, "<EM>*Aligned Blocks with gaps <= %d bases are merged for "
+	    "this display when only one sequence has a gap, or when gaps in "
+	    "both sequences are of the same size.</EM>\n", blockMaxGap);
+    }
+if (rcNeedle)
+    reverseComplement(needle, needleSize);
+return anchorCount;
+}
+
+int ffShAli(FILE *f, struct ffAli *aliList, 
+    char *needleName, DNA *needle, int needleSize, int needleNumOffset,
+    char *haystackName, DNA *haystack, int haySize, int hayNumOffset,
+    int blockMaxGap, boolean rcNeedle)
+/* Display allignment on html page.  Returns number of blocks (after
+ * merging blocks separated by blockMaxGap or less). */
+{
+return ffShAliPart(f, aliList, needleName, needle, needleSize, needleNumOffset,
+    haystackName, haystack, haySize, hayNumOffset, blockMaxGap, rcNeedle, FALSE,
+    TRUE, TRUE, TRUE, TRUE, FALSE, 0, 0, 0, 0);
+}
+
+void ffShowAli(struct ffAli *aliList, char *needleName, DNA *needle, int needleNumOffset,
+    char *haystackName, DNA *haystack, int hayNumOffset, boolean rcNeedle)
+/* Display allignment on html page. */
+{
+ffShAli(stdout, aliList, needleName, needle, strlen(needle), needleNumOffset,
+    haystackName, haystack, strlen(haystack), hayNumOffset, 8, rcNeedle);
+}
+#if 0 /* not used */
+static struct cdaAli *makeBlocks(struct ffAli *aliList, 
+    DNA *needle, int needleSize, DNA *hay, int haySize, boolean isRc)
+/* Merge together blocks separated only by noise, and evaluate
+ * left, right, and middle of block for alignment strength. */
+{
+struct cdaAli *ca = cdaAliFromFfAli(aliList, 
+    needle, needleSize, hay, haySize, isRc);
+cdaCoalesceBlocks(ca);
+return ca;
+}
+#endif
diff --git a/gbtools/src/blatSrc/lib/gapCalc.c b/gbtools/src/blatSrc/lib/gapCalc.c
new file mode 100644
index 0000000..d811c1b
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/gapCalc.c
@@ -0,0 +1,354 @@
+/* gapCalc - Stuff to calculate complex (but linear) gap costs quickly,
+ * and read specifications from a file. */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "linefile.h"
+#include "gapCalc.h"
+
+
+struct gapCalc
+/* A structure that bundles together stuff to help us
+ * calculate gap costs quickly. */
+    {
+    int smallSize; /* Size of tables for doing quick lookup of small gaps. */
+    int *qSmall;   /* Table for small gaps in q; */
+    int *tSmall;   /* Table for small gaps in t. */
+    int *bSmall;   /* Table for small gaps in either. */
+    int *longPos;/* Table of positions to interpolate between for larger gaps. */
+    double *qLong; /* Values to interpolate between for larger gaps in q. */
+    double *tLong; /* Values to interpolate between for larger gaps in t. */
+    double *bLong; /* Values to interpolate between for larger gaps in both. */
+    int longCount;	/* Number of long positions overall in longPos. */
+    int qPosCount;	/* Number of long positions in q. */
+    int tPosCount;	/* Number of long positions in t. */
+    int bPosCount;	/* Number of long positions in b. */
+    int qLastPos;	/* Maximum position we have data on in q. */
+    int tLastPos;	/* Maximum position we have data on in t. */
+    int bLastPos;	/* Maximum position we have data on in b. */
+    double qLastPosVal;	/* Value at max pos. */
+    double tLastPosVal;	/* Value at max pos. */
+    double bLastPosVal;	/* Value at max pos. */
+    double qLastSlope;	/* What to add for each base after last. */
+    double tLastSlope;	/* What to add for each base after last. */
+    double bLastSlope;	/* What to add for each base after last. */
+    };
+
+/* These are the gap costs used in the Evolution's Cauldron paper. */
+static char *originalGapCosts = 
+    "tableSize 11\n"
+    "smallSize 111\n"
+    "position 1 2 3 11 111 2111 12111 32111 72111 152111 252111\n"
+    "qGap 350 425 450 600 900 2900 22900 57900 117900 217900 317900\n"
+    "tGap 350 425 450 600 900 2900 22900 57900 117900 217900 317900\n"
+    "bothGap 750 825 850 1000 1300 3300 23300 58300 118300 218300 318300\n";
+
+/* These gap costs work well at chicken/human distances, and seem
+ * to do ok closer as well, so they are now the default. */
+static char *defaultGapCosts =
+"tablesize       11\n"
+"smallSize       111\n"
+"position        1       2       3       11      111     2111    12111   32111   72111   152111  252111\n"
+"qGap    325     360     400     450     600     1100    3600    7600    15600   31600   56600\n"
+"tGap    325     360     400     450     600     1100    3600    7600    15600   31600   56600\n"
+"bothGap 625     660     700     750     900     1400    4000    8000    16000   32000   57000\n";
+
+/* These gap costs are for query=mRNA, target=DNA. */
+static char *rnaDnaGapCosts = 
+"tablesize       12\n"
+"smallSize       111\n"
+"position        1       2       3       11     31   111   2111    12111   32111   72111   152111  252111\n"
+       "qGap    325     360     400     450     600  800   1100    3600    7600    15600   31600   56600\n"
+       "tGap    200     210     220     250     300  400   500      600     800    1200     2000   4000\n"
+"       bothGap 625     660     700     750     900  1100  1400    4000    8000    16000   32000   57000\n";
+
+static char *cheapGapCosts = 
+    "tableSize 3\n"
+    "smallSize 100\n"
+    "position 1 100 1000\n"
+    "qGap 0 30 300\n"
+    "tGap 0 30 300\n"
+    "bothGap 0 30 300\n";
+
+
+char *gapCalcSampleFileContents()
+/* Return contents of a sample linear gap file. */
+{
+return defaultGapCosts;
+}
+
+static int interpolate(int x, int *s, double *v, int sCount)
+/* Find closest value to x in s, and then lookup corresponding
+ * value in v.  Interpolate where necessary. */
+{
+int i, ds, ss;
+double dv;
+for (i=0; i<sCount; ++i)
+    {
+    ss = s[i];
+    if (x == ss)
+        return v[i];
+    else if (x < ss)
+        {
+	ds = ss - s[i-1];
+	dv = v[i] - v[i-1];
+	return v[i-1] + dv * (x - s[i-1]) / ds;
+	}
+    }
+/* If get to here extrapolate from last two values */
+ds = s[sCount-1] - s[sCount-2];
+dv = v[sCount-1] - v[sCount-2];
+return v[sCount-2] + dv * (x - s[sCount-2]) / ds;
+}
+
+static double calcSlope(double y2, double y1, double x2, double x1)
+/* Calculate slope of line from x1/y1 to x2/y2 */
+{
+return (y2-y1)/(x2-x1);
+}
+
+static void readTaggedNumLine(struct lineFile *lf, char *tag, 
+	int count, int *intOut,  double *floatOut)
+/* Read in a line that starts with tag and then has count numbers.
+ * Complain and die if tag is unexpected or other problem occurs. 
+ * Put output as integers and/or floating point into intOut and 
+ * floatOut. */
+{
+char *line;
+int i = 0;
+char *word;
+if (!lineFileNextReal(lf, &line))
+   lineFileUnexpectedEnd(lf);
+word = nextWord(&line);
+if (!sameWord(tag, word))
+    errAbort("Expecting %s got %s line %d of %s",
+             tag, word, lf->lineIx, lf->fileName);
+for (i = 0; i < count; ++i)
+    {
+    word = nextWord(&line);
+    if (word == NULL)
+        errAbort("Not enough numbers line %d of %s", lf->lineIx, lf->fileName);
+    if (!isdigit(word[0]))
+        errAbort("Expecting number got %s line %d of %s",
+	         word, lf->lineIx, lf->fileName);
+    if (intOut)
+	intOut[i] = atoi(word);
+    if (floatOut)
+        floatOut[i] = atof(word);
+    }
+word = nextWord(&line);
+if (word != NULL)
+        errAbort("Too many numbers line %d of %s", lf->lineIx, lf->fileName);
+}
+
+struct gapCalc *gapCalcRead(struct lineFile *lf)
+/* Create gapCalc from open file. */
+{
+int i, tableSize, startLong = -1;
+struct gapCalc *gapCalc;
+int *gapInitPos;  
+double *gapInitQGap;  
+double *gapInitTGap;  
+double *gapInitBothGap;
+
+AllocVar(gapCalc);
+
+/* Parse file. */
+readTaggedNumLine(lf, "tableSize", 1, &tableSize, NULL);
+readTaggedNumLine(lf, "smallSize", 1, &gapCalc->smallSize, NULL);
+AllocArray(gapInitPos,tableSize);
+AllocArray(gapInitQGap,tableSize);
+AllocArray(gapInitTGap,tableSize);
+AllocArray(gapInitBothGap,tableSize);
+readTaggedNumLine(lf, "position", tableSize, gapInitPos, NULL);
+readTaggedNumLine(lf, "qGap", tableSize, NULL, gapInitQGap);
+readTaggedNumLine(lf, "tGap", tableSize, NULL, gapInitTGap);
+readTaggedNumLine(lf, "bothGap", tableSize, NULL, gapInitBothGap);
+
+/* Set up precomputed interpolations for small gaps. */
+AllocArray(gapCalc->qSmall, gapCalc->smallSize);
+AllocArray(gapCalc->tSmall, gapCalc->smallSize);
+AllocArray(gapCalc->bSmall, gapCalc->smallSize);
+for (i=1; i<gapCalc->smallSize; ++i)
+    {
+    gapCalc->qSmall[i] = 
+	interpolate(i, gapInitPos, gapInitQGap, tableSize);
+    gapCalc->tSmall[i] = 
+	interpolate(i, gapInitPos, gapInitTGap, tableSize);
+    gapCalc->bSmall[i] = interpolate(i, gapInitPos, 
+	gapInitBothGap, tableSize);
+    }
+
+/* Set up to handle intermediate values. */
+for (i=0; i<tableSize; ++i)
+    {
+    if (gapCalc->smallSize == gapInitPos[i])
+	{
+	startLong = i;
+	break;
+	}
+    }
+if (startLong < 0)
+    errAbort("No position %d in gapCalcRead()\n", gapCalc->smallSize);
+gapCalc->longCount = tableSize - startLong;
+gapCalc->qPosCount = tableSize - startLong;
+gapCalc->tPosCount = tableSize - startLong;
+gapCalc->bPosCount = tableSize - startLong;
+gapCalc->longPos = cloneMem(gapInitPos + startLong, gapCalc->longCount * sizeof(int));
+gapCalc->qLong = cloneMem(gapInitQGap + startLong, gapCalc->qPosCount * sizeof(double));
+gapCalc->tLong = cloneMem(gapInitTGap + startLong, gapCalc->tPosCount * sizeof(double));
+gapCalc->bLong = cloneMem(gapInitBothGap + startLong, gapCalc->bPosCount * sizeof(double));
+
+/* Set up to handle huge values. */
+gapCalc->qLastPos = gapCalc->longPos[gapCalc->qPosCount-1];
+gapCalc->tLastPos = gapCalc->longPos[gapCalc->tPosCount-1];
+gapCalc->bLastPos = gapCalc->longPos[gapCalc->bPosCount-1];
+gapCalc->qLastPosVal = gapCalc->qLong[gapCalc->qPosCount-1];
+gapCalc->tLastPosVal = gapCalc->tLong[gapCalc->tPosCount-1];
+gapCalc->bLastPosVal = gapCalc->bLong[gapCalc->bPosCount-1];
+gapCalc->qLastSlope = calcSlope(gapCalc->qLastPosVal, gapCalc->qLong[gapCalc->qPosCount-2],
+			   gapCalc->qLastPos, gapCalc->longPos[gapCalc->qPosCount-2]);
+gapCalc->tLastSlope = calcSlope(gapCalc->tLastPosVal, gapCalc->tLong[gapCalc->tPosCount-2],
+			   gapCalc->tLastPos, gapCalc->longPos[gapCalc->tPosCount-2]);
+gapCalc->bLastSlope = calcSlope(gapCalc->bLastPosVal, gapCalc->bLong[gapCalc->bPosCount-2],
+			   gapCalc->bLastPos, gapCalc->longPos[gapCalc->bPosCount-2]);
+freez(&gapInitPos);
+freez(&gapInitQGap);
+freez(&gapInitTGap);
+freez(&gapInitBothGap);
+return gapCalc;
+}
+
+struct gapCalc *gapCalcFromString(char *s)
+/* Return gapCalc from description string. */
+{
+struct lineFile *lf = lineFileOnString("string", TRUE, cloneString(s));
+struct gapCalc *gapCalc = gapCalcRead(lf);
+lineFileClose(&lf);
+return gapCalc;
+}
+
+struct gapCalc *gapCalcFromFile(char *fileName)
+/* Return gapCalc from file. */
+{
+struct gapCalc *gapCalc = NULL;
+
+if (sameString(fileName, "loose"))
+    {
+    verbose(2, "using loose linear gap costs (chicken/human)\n");
+    gapCalc = gapCalcFromString(defaultGapCosts);
+    }
+else if (sameString(fileName, "medium"))
+    {
+    verbose(2, "using medium (original) linear gap costs (mouse/human)\n");
+    gapCalc = gapCalcFromString(originalGapCosts);
+    }
+else
+    {
+    struct lineFile *lf = lineFileOpen(fileName, TRUE);
+    gapCalc = gapCalcRead(lf);
+    lineFileClose(&lf);
+    }
+return gapCalc;
+}
+
+struct gapCalc *gapCalcDefault()
+/* Return default gapCalc. */
+{
+return gapCalcFromString(defaultGapCosts);
+}
+
+struct gapCalc *gapCalcRnaDna()
+/* Return gaps suitable for RNA queries vs. DNA targets */
+{
+return gapCalcFromString(rnaDnaGapCosts);
+}
+
+struct gapCalc *gapCalcCheap()
+/* Return cheap gap costs. */
+{
+return gapCalcFromString(cheapGapCosts);
+}
+
+struct gapCalc *gapCalcOriginal()
+/* Return gap costs from original paper. */
+{
+return gapCalcFromString(originalGapCosts);
+}
+
+void gapCalcFree(struct gapCalc **pGapCalc)
+/* Free up resources associated with gapCalc. */
+{
+struct gapCalc *gapCalc = *pGapCalc;
+if (gapCalc != NULL)
+    {
+    freeMem(gapCalc->qSmall);
+    freeMem(gapCalc->tSmall);
+    freeMem(gapCalc->bSmall);
+    freeMem(gapCalc->longPos);
+    freeMem(gapCalc->qLong);
+    freeMem(gapCalc->tLong);
+    freeMem(gapCalc->bLong);
+    freez(pGapCalc);
+    }
+}
+
+int gapCalcCost(struct gapCalc *gapCalc, int dq, int dt)
+/* Figure out gap costs. */
+{
+if (dt < 0) dt = 0;
+if (dq < 0) dq = 0;
+if (dt == 0)
+    { 
+    if (dq < gapCalc->smallSize)
+        return gapCalc->qSmall[dq];
+    else if (dq >= gapCalc->qLastPos)
+        return gapCalc->qLastPosVal + gapCalc->qLastSlope * (dq-gapCalc->qLastPos);
+    else
+        return interpolate(dq, gapCalc->longPos, gapCalc->qLong, gapCalc->qPosCount);
+    }
+else if (dq == 0)
+    {
+    if (dt < gapCalc->smallSize)
+        return gapCalc->tSmall[dt];
+    else if (dt >= gapCalc->tLastPos)
+        return gapCalc->tLastPosVal + gapCalc->tLastSlope * (dt-gapCalc->tLastPos);
+    else
+        return interpolate(dt, gapCalc->longPos, gapCalc->tLong, gapCalc->tPosCount);
+    }
+else
+    {
+    int both = dq + dt;
+    if (both < gapCalc->smallSize)
+        return gapCalc->bSmall[both];
+    else if (both >= gapCalc->bLastPos)
+        return gapCalc->bLastPosVal + gapCalc->bLastSlope * (both-gapCalc->bLastPos);
+    else
+        return interpolate(both, gapCalc->longPos, gapCalc->bLong, gapCalc->bPosCount);
+    }
+}
+
+void gapCalcTest(struct gapCalc *gapCalc)
+/* Print out gap cost info. */
+{
+int i;
+for (i=1; i<=10; i++)
+   {
+   verbose(1, "%d: %d %d %d\n", i, gapCalcCost(gapCalc, i, 0), 
+           gapCalcCost(gapCalc, 0, i), gapCalcCost(gapCalc, i/2, i-i/2));
+   }
+for (i=1; ; i *= 10)
+   {
+   verbose(1, "%d: %d %d %d\n", i, gapCalcCost(gapCalc, i, 0), gapCalcCost(gapCalc, 0, i), 
+           gapCalcCost(gapCalc, i/2, i-i/2));
+   if (i == 1000000000)
+       break;
+   }
+verbose(1, "%d %d cost %d\n", 6489540, 84240, gapCalcCost(gapCalc, 84240, 6489540));
+verbose(1, "%d %d cost %d\n", 2746361, 1075188, gapCalcCost(gapCalc, 1075188, 2746361));
+verbose(1, "%d %d cost %d\n", 6489540 + 2746361 + 72, 84240 + 1075188 + 72, gapCalcCost(gapCalc, 84240 + 1075188 + 72, 6489540 + 2746361 + 72));
+}
+
+
diff --git a/gbtools/src/blatSrc/lib/gdf.c b/gbtools/src/blatSrc/lib/gdf.c
new file mode 100644
index 0000000..df8e767
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/gdf.c
@@ -0,0 +1,153 @@
+/* gdf - Intronerator Gene Description File. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "gdf.h"
+
+
+struct gdfGene *newGdfGene(char *name, int nameSize, int exonCount, char strand, UBYTE chromIx)
+/* Return a new gene. */
+{
+struct gdfGene *gene = needMem(sizeof *gene);
+gene->name = cloneStringZ(name, nameSize);
+gene->dataCount = exonCount*2;
+if (exonCount > 0)
+    {
+    gene->dataPoints = 
+	    needMem(gene->dataCount * sizeof(gene->dataPoints[0]));
+    }
+gene->strand = strand;
+gene->chromIx = chromIx;
+return gene;
+}
+
+void gdfFreeGene(struct gdfGene *gene)
+/* Free a gene. */
+{
+if (gene != NULL)
+    {
+    freeMem(gene->name);
+    freeMem(gene->dataPoints);
+    freeMem(gene);
+    }
+}
+
+void gdfFreeGeneList(struct gdfGene **pList)
+/* Free a whole list of genes. */
+{
+struct gdfGene *gene, *next;
+gene = *pList;
+while (gene != NULL)
+    {
+    next = gene->next;
+    gdfFreeGene(gene);
+    gene = next;
+    }
+*pList = NULL;
+}
+
+struct gdfGene *gdfReadOneGene(FILE *f)
+/* Read one entry from a Gdf file.  Assumes that the file pointer
+ * is in the right place. */
+{
+short pointCount;
+char strand;
+UBYTE geneNameSize, chromIx;
+char geneNameBuf[128];
+struct gdfGene *gene;
+
+mustReadOne(f, geneNameSize);
+mustRead(f, geneNameBuf, geneNameSize);
+geneNameBuf[geneNameSize] = 0;
+mustReadOne(f, chromIx);
+mustReadOne(f, strand);
+mustReadOne(f, pointCount);
+gene = newGdfGene(geneNameBuf, geneNameSize, pointCount>>1, strand, chromIx);
+mustRead(f, gene->dataPoints, sizeof(gene->dataPoints[0]) * pointCount);
+return gene;
+}
+
+void gdfGeneExtents(struct gdfGene *gene, long *pMin, long *pMax)
+/* Figure out first and last base in gene. */
+{
+int i;
+long x;
+long min=0x7000000;
+long max = -min;
+
+for (i=0; i<gene->dataCount; i+=1)
+    {
+    x = gene->dataPoints[i].start;
+    if (x < min)
+	min = x;
+    if (x > max)
+	max = x;
+    }
+*pMin = min;
+*pMax = max;
+}
+
+void gdfOffsetGene(struct gdfGene *gene, int offset)
+/* Add offset to each point in gene */
+{
+struct gdfDataPoint *dp = gene->dataPoints;
+int count = gene->dataCount;
+int i;
+for (i=0; i<count; ++i)
+    dp[i].start += offset;
+}
+
+void gdfRcGene(struct gdfGene *gene, int size)
+/* Flip gene to other strand. Assumes dataPoints are already
+ * moved into range from 0-size */
+{
+struct gdfDataPoint *s = gene->dataPoints, *e, temp;
+int count = gene->dataCount;
+int i;
+int halfCount = count/2;
+
+
+for (i=0; i<count; ++i)
+    {
+    s->start = reverseOffset(s->start, size) + 1;
+    ++s;
+    }
+s = gene->dataPoints;
+e = s + gene->dataCount-1;
+for (i=0; i<halfCount; i += 1)
+    {
+    memcpy(&temp, s, sizeof(temp));
+    memcpy(s, e, sizeof(temp));
+    memcpy(e, &temp, sizeof(temp));
+    s += 1;
+    e -= 1;
+    }
+}
+
+
+void gdfUpcExons(struct gdfGene *gene, int geneOffset, DNA *dna, int dnaSize, int dnaOffset)
+/* Uppercase exons in DNA. */
+{
+struct gdfDataPoint *dp = gene->dataPoints;
+int count = gene->dataCount;
+int start, end;
+long gffStart, gffEnd;
+int combinedOffset;
+int i;
+
+gdfGeneExtents(gene, &gffStart, &gffEnd);
+combinedOffset = -gffStart + geneOffset - dnaOffset;
+for (i=0; i<count; i += 2)
+    {
+    start = dp[i].start + combinedOffset;
+    end = dp[i+1].start + combinedOffset;
+    if (end <= 0 || start >= dnaSize)
+        continue;
+    if (start < 0) start = 0;
+    if (end > dnaSize) end = dnaSize;
+    toUpperN(dna+start, end-start);
+    }
+}
+
diff --git a/gbtools/src/blatSrc/lib/gemfont.c b/gbtools/src/blatSrc/lib/gemfont.c
new file mode 100644
index 0000000..941b447
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/gemfont.c
@@ -0,0 +1,200 @@
+/* gemfont.c - Raster Font stuff, draws text based on a blit and a font
+   in a format that some day may approach Ventura Publisher, but currently
+   looks much more like GEM on the ST with some Mac-like mutations. */
+
+#include "common.h"
+#include "memgfx.h"
+#include "gemfont.h"
+
+
+typedef union
+    {
+    int  theInt;
+    char bytes[2];
+    } myInt;
+
+void gfText(struct memGfx *screen, struct font_hdr *f, char *text, 
+       int x, int y, Color color, TextBlit tblit, Color bcolor)
+{
+UBYTE *s = (UBYTE*)text;
+UBYTE *ss;
+int c, lo, hi;
+int sx, imageWid;
+WORD *off, wd, ht;
+UBYTE *data;
+myInt *OWtab, *iPtr;
+int missChar;
+int font_type;
+int extraWidth = f->lft_ofst + f->rgt_ofst;
+
+x += f->xOff;
+y += f->yOff;
+x += f->lft_ofst;
+lo = f->ADE_lo;
+hi = f->ADE_hi;
+off = f->ch_ofst;
+wd = f->frm_wdt;
+ht = f->frm_hgt,
+data = f->fnt_dta;
+OWtab= (myInt *)(f->hz_ofst);
+font_type = f->id;
+
+while ((c = *s++)!=0)
+    {
+    /* If we don't have the character, just turn it into a space. */
+    if (c > hi)
+	{
+	c = ' ';
+	}
+    c -= lo;
+    if (c < 0)
+	{
+	c = ' ' - lo;
+	}
+
+    /* Mac prop font && its a missing char */
+    if (font_type == MPROP && (*(OWtab+c)).theInt == -1) 
+	{            
+	c=hi-lo;                      /* last char is set */
+	missChar=1;
+	sx = off[c+1];
+	imageWid= f->frm_wdt*8 - sx;  /* sort of a kludge */
+	}
+    else 
+	{
+	missChar=0;
+	sx = off[c];
+	imageWid = off[c+1]-sx;
+	}
+    (*tblit)(imageWid, ht, sx, 0, data, wd, screen, x, y, color, bcolor);
+    switch (font_type)
+	{
+	case STPROP:
+	    x += imageWid + extraWidth;
+	    break;
+	case MFIXED:
+	    x += f->wchr_wdt + extraWidth;          
+	    break;
+	case MPROP:
+	    iPtr=OWtab+c;  
+	    if (!missChar)
+		    /* -1 means its a missing character */
+		{
+		x += (int)((*iPtr).bytes[1]);
+		ss=s;
+		if ((c=*(ss++)) != 0)
+			/* look to next char to determine amt to change x */
+		    {
+		    c-= lo;
+		    iPtr=OWtab+c;
+		    /* subtract kern Of Next char */
+		    /* f->rgt_ofst is neg of Mac maxKern value */
+		    if ((*iPtr).theInt!=-1)
+		       x += (int)((*iPtr).bytes[0])+ f->rgt_ofst;  
+		    }           
+		}
+	    else /* display the non print char */
+		x+=imageWid + extraWidth;
+	    break;
+	}
+    }
+}
+
+static int fchar_width(struct font_hdr *f,unsigned char *s)
+/* How wide is this character? */
+{
+int c;
+signed char *offsets;
+int width;
+int t;
+
+c = *s++;
+if (c > f->ADE_hi)
+    c = ' ';
+c -= f->ADE_lo;
+if (c < 0)
+    {
+    c = ' ' - f->ADE_lo;
+    }
+switch (f->id)
+    {
+    case MFIXED:
+	    return(f->wchr_wdt + f->lft_ofst + f->rgt_ofst);
+    case STPROP:
+	    return(f->ch_ofst[c+1] - f->ch_ofst[c] + f->lft_ofst + f->rgt_ofst);
+    case MPROP:
+	    offsets = f->hz_ofst+c*2;
+	    if (offsets[0] == -1 && offsets[1] == -1)	/* missing char */
+		{
+		t = f->ADE_hi - f->ADE_lo;
+		return( f->frm_wdt*8 - f->ch_ofst[t+1]);
+		}
+	    else
+		{
+		width = offsets[1];
+		if ((c = *s++) != 0)
+			{
+			c -= f->ADE_lo;
+			offsets = f->hz_ofst+c*2;
+			width += offsets[0] + f->rgt_ofst;
+			}
+		return(width);
+		}
+    default:
+         internalErr();
+	 return 0;
+    }
+}
+
+long fnstring_width(struct font_hdr *f, unsigned char *s, int n)
+{
+long acc = 0;
+
+while (--n >= 0)
+    {
+    acc += fchar_width(f, s);
+    s++;
+    }
+return(acc);
+}
+
+#if 0 /* unused */
+static long fstring_width(struct font_hdr *f, unsigned char *s)
+{
+return(fnstring_width(f, s, strlen((char *)s)));
+}
+#endif
+
+
+int fwidest_char(struct font_hdr *f)
+{
+unsigned char buf[2];
+int i;
+int c;
+int widest = 1;
+int w;
+
+c = f->ADE_lo;
+i = f->ADE_hi - c;
+buf[1] = 0;
+while (--i >= 0)
+	{
+	buf[0] = c++;
+	w = fchar_width(f, buf);
+	if (w > widest)
+		widest = w;
+	}
+return(widest);
+}
+
+int font_cel_height(struct font_hdr *f)
+/* How tall is font? */
+{
+return f->frm_hgt;
+}
+
+int font_line_height(struct font_hdr *f)
+/* How far to next line. */
+{
+return f->lineHeight;
+}
diff --git a/gbtools/src/blatSrc/lib/gemfont.h b/gbtools/src/blatSrc/lib/gemfont.h
new file mode 100644
index 0000000..ad67a04
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/gemfont.h
@@ -0,0 +1,69 @@
+/*****************************************************************************
+ * Copyright (C) 2000 Jim Kent.  This source code may be freely used         *
+ * for personal, academic, and non-profit purposes.  Commercial use          *
+ * permitted only by explicit agreement with Jim Kent (jim_kent at pacbell.net) *
+ *****************************************************************************/
+#ifndef GEMFONT_H
+#define GEMFONT_H
+
+/* This file supports GEM style fonts.  They live on disk in three parts.
+   1st there's the header structure below, then a list of 'x' offsets into
+   the data - one 16-bit word for each offset, and 1 offset for each letter
+   in the font plus an extra offset at the end.
+
+   This is followed by the data which is a single bitmap.
+   */
+
+struct	font_hdr {
+WORD	id;			/* some random number, doesnt matter */
+WORD	size;		/* Size in points.  Somehow related to pixel height. */
+char	facename[32];	/* Give it a name, don't really matter. */
+WORD	ADE_lo;		/* Lowest ascii character in font */
+WORD	ADE_hi;		/* Highest ascii character in font */
+WORD	top_dist;
+WORD	asc_dist;	/* Ascender to baseline?? */
+WORD	hlf_dist;
+WORD	des_dist;	/* des for descender. */
+WORD	bot_dist;
+WORD	wchr_wdt;	/* Widest character width. */
+WORD	wcel_wdt;	/* Widest 'cell' width (includes distance to next character) */
+WORD	lft_ofst;
+WORD	rgt_ofst;
+WORD	thckning;
+WORD	undrline;
+WORD	lghtng_m;	/* Lightening mask.  Just use 0x55aa. */
+WORD	skewng_m;	/* Skewing mask for italics. If 1 bit rotate this line. 0xaaaa*/
+WORD	flags;		/* Just set to zero.  Half-assed intel swap if otherwise. */
+signed char *hz_ofst;  /* On disk byte offset from beginning of file to hor. offsets */
+WORD	*ch_ofst;	/* On disk byte offset to beginning of ?? kerning ?? data. */
+UBYTE	*fnt_dta;	/* On disk byte offset to beginning of bitmap. */
+WORD	frm_wdt;	/* Byte width of bitmap. */
+WORD	frm_hgt;	/* Pixel height of bitmap. */
+struct font_hdr	*nxt_fnt; /* Set to 0 */
+WORD    xOff;		/* X offset to add. */
+WORD    yOff;		/* Y offset to add. */
+WORD    lineHeight;     /* Distance to next line. */
+WORD	psHeight;	/* Height to set for equivalent postscript. */
+}; 
+
+#define STPROP 0
+#define MFIXED 1
+#define MPROP 2
+
+/* Write a line of graphics text. */
+void gfText(struct memGfx *screen, struct font_hdr *f, char *text, 
+       int x, int y, Color color, TextBlit tblit, Color bcolor);
+
+/* How tall is font? */
+int font_cel_height(struct font_hdr *f);
+
+/* How far to next line. */
+int font_line_height(struct font_hdr *f);
+
+/* How wide would this bunch of characters be? */
+long fnstring_width(struct font_hdr *f, unsigned char *s, int n);
+
+/* How wide is widest char in font? */
+int fwidest_char(struct font_hdr *f);
+
+#endif 
diff --git a/gbtools/src/blatSrc/lib/genomeRangeTree.c b/gbtools/src/blatSrc/lib/genomeRangeTree.c
new file mode 100644
index 0000000..bbcf26b
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/genomeRangeTree.c
@@ -0,0 +1,201 @@
+/* genomeRangeTree - This module is a way of keeping track of
+ * non-overlapping ranges (half-open intervals) across a whole
+ * genome (multiple chromosomes or scaffolds). 
+ * It is a hash table container mapping chrom to rangeTree.
+ * Most of the work is performed by rangeTree, this container
+ * enables local memory and stack to be shared by many rangeTrees
+ * so it should be able to handle genomes with a very large 
+ * number of scaffolds. See rangeTree for more information. */
+
+/* Copyright (C) 2014 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "sig.h"
+#include "localmem.h"
+#include "rbTree.h"
+#include "hash.h"
+#include "rangeTree.h"
+#include "genomeRangeTree.h"
+#include "dystring.h"
+#include <limits.h>
+
+
+struct genomeRangeTree *genomeRangeTreeNewSize(int hashPowerOfTwoSize)
+/* Create a new, empty, genomeRangeTree. 
+ * Free with genomeRangeTreeFree. */
+{
+struct genomeRangeTree *t;
+AllocVar(t); 
+t->hash = newHash(hashPowerOfTwoSize);
+t->lm = lmInit(0);
+return t;
+}
+
+struct genomeRangeTree *genomeRangeTreeNew()
+/* Create a new, empty, genomeRangeTree. Uses the default hash size.
+ * Free with genomeRangeTreeFree. */
+{
+return genomeRangeTreeNewSize(0);
+}
+
+void genomeRangeTreeFree(struct genomeRangeTree **pTree)
+/* Free up genomeRangeTree.  */
+{
+struct genomeRangeTree *grt = *pTree;
+if (grt != NULL)
+    {
+    /* need to manually free object due to thee way rbTreeNewDetailed is done */
+    struct hashCookie hc = hashFirst(grt->hash);
+    struct hashEl *hel;
+    while ((hel = hashNext(&hc)) != NULL)
+	freeMem(hel->val);
+
+    lmCleanup(&(grt->lm));  /* clean up all the memory for all nodes for all trees */
+    freeHash(&(grt->hash)); /* free the hash table including names (trees are freed by lmCleanup) */
+    freez(pTree);                /* free this */
+    }
+}
+
+struct rbTree *genomeRangeTreeFindRangeTree(struct genomeRangeTree *tree, char *chrom)
+/* Find the rangeTree for this chromosome, if any. Returns NULL if chrom not found. */
+{
+return hashFindVal(tree->hash, chrom);
+}
+
+struct rbTree *genomeRangeTreeFindOrAddRangeTree(struct genomeRangeTree *tree, char *chrom)
+/* Find the rangeTree for this chromosome, or add new chrom and empty rangeTree if not found. */
+{
+struct hashEl *hel;
+hel = hashStore(tree->hash, chrom);
+if (hel->val == NULL) /* need to add a new rangeTree */
+    hel->val = rangeTreeNewDetailed(tree->lm, tree->stack);
+return hel->val;
+}
+
+struct range *genomeRangeTreeAdd(struct genomeRangeTree *tree, char *chrom, int start, int end)
+/* Add range to tree, merging with existing ranges if need be. 
+ * Adds new rangeTree if chrom not found. */
+{
+return rangeTreeAdd(genomeRangeTreeFindOrAddRangeTree(tree,chrom), start, end);
+}
+
+struct range *genomeRangeTreeAddVal(struct genomeRangeTree *tree, char *chrom, int start, int end, void *val, void *(*mergeVals)(void *existing, void*new))
+/* Add range to tree, merging with existing ranges if need be. 
+ * Adds new rangeTree if chrom not found. 
+ * If this is a new range, set the value to this val.
+ * If there are existing items for this range, and if mergeVals function is not null, 
+ * apply mergeVals to the existing values and this new val, storing the result as the val
+ * for this range (see rangeTreeAddValCount() and rangeTreeAddValList() below for examples). */
+{
+return rangeTreeAddVal(genomeRangeTreeFindOrAddRangeTree(tree,chrom), start, end, val, mergeVals);
+}
+
+struct range *genomeRangeTreeAddValCount(struct genomeRangeTree *tree, char *chrom, int start, int end)
+/* Add range to tree, merging with existing ranges if need be. 
+ * Adds new rangeTree if chrom not found. 
+ * Set range val to count of elements in the range. Counts are pointers to 
+ * ints allocated in tree localmem */
+{
+return rangeTreeAddValCount(genomeRangeTreeFindOrAddRangeTree(tree,chrom), start, end);
+}
+
+struct range *genomeRangeTreeAddValList(struct genomeRangeTree *tree, char *chrom, int start, int end, void *val)
+/* Add range to tree, merging with existing ranges if need be. 
+ * Adds new rangeTree if chrom not found. 
+ * Add val to the list of values (if any) in each range.
+ * val must be valid argument to slCat (ie, be a struct with a 'next' pointer as its first member) */
+{
+return rangeTreeAddValList(genomeRangeTreeFindOrAddRangeTree(tree,chrom), start, end, val);
+}
+
+boolean genomeRangeTreeOverlaps(struct genomeRangeTree *tree, char *chrom, int start, int end)
+/* Return TRUE if start-end overlaps anything in tree */
+{
+struct rbTree *t;
+return (t=genomeRangeTreeFindRangeTree(tree,chrom)) ? rangeTreeOverlaps(t, start, end) : FALSE;
+}
+
+int genomeRangeTreeOverlapSize(struct genomeRangeTree *tree, char *chrom, int start, int end)
+/* Return the total size of intersection between interval
+ * from start to end, and items in range tree. Sadly not
+ * thread-safe. */
+{
+struct rbTree *t;
+return (t=genomeRangeTreeFindRangeTree(tree,chrom)) ? rangeTreeOverlapSize(t, start, end) : 0;
+}
+
+struct range *genomeRangeTreeFindEnclosing(struct genomeRangeTree *tree, char *chrom, int start, int end)
+/* Find item in range tree that encloses range between start and end 
+ * if there is any such item. */
+{
+struct rbTree *t;
+return (t=genomeRangeTreeFindRangeTree(tree,chrom)) ? rangeTreeFindEnclosing(t, start, end) : NULL;
+}
+
+struct range *genomeRangeTreeAllOverlapping(struct genomeRangeTree *tree, char *chrom, int start, int end)
+/* Return list of all items in range tree that overlap interval start-end.
+ * Do not free this list, it is owned by tree.  However it is only good until
+ * next call to rangeTreeFindInRange or rangeTreeList. Not thread safe. */
+{
+struct rbTree *t;
+return (t=genomeRangeTreeFindRangeTree(tree,chrom)) ? rangeTreeAllOverlapping(t, start, end) : NULL;
+}
+
+struct range *genomeRangeTreeMaxOverlapping(struct genomeRangeTree *tree, char *chrom, int start, int end)
+/* Return item that overlaps most with start-end. Not thread safe.  Trashes list used
+ * by rangeTreeAllOverlapping. */
+{
+struct rbTree *t;
+return (t=genomeRangeTreeFindRangeTree(tree,chrom)) ? rangeTreeMaxOverlapping(t, start, end) : NULL;
+}
+
+struct range *genomeRangeTreeList(struct genomeRangeTree *tree, char *chrom)
+/* Return list of all ranges in single rangeTree in order.  Not thread safe. 
+ * No need to free this when done, memory is local to tree. */
+{
+struct rbTree *t;
+return (t=genomeRangeTreeFindRangeTree(tree,chrom)) ? rangeTreeList(t) : NULL;
+}
+
+/* globals used for genomeRangeTreeToString */
+struct dyString *tmpTreeToString = NULL;
+char *tmpTreeToStringCurChrom = NULL;
+void tmpNodeToString(void *item)
+{
+struct range *r = item;
+dyStringPrintf(tmpTreeToString, " (%d,%d)", r->start, r->end);
+}
+
+struct dyString *genomeRangeTreeToString(struct genomeRangeTree *tree)
+/* Return a string representation of the genomeRangeTree.
+ * Useful for testing.
+ * Not thread-safe; uses globals */
+{
+struct hashEl *chrom, *chromList = hashElListHash(tree->hash);
+slSort(&chromList, hashElCmp); /* alpha sort on chrom */
+dyStringFree(&tmpTreeToString);
+tmpTreeToString = newDyString(0);
+dyStringAppend(tmpTreeToString, "[tree");
+for (chrom = chromList ; chrom ; chrom = chrom->next)
+    {
+    dyStringPrintf(tmpTreeToString, " [%s:", chrom->name);
+    rbTreeTraverse(genomeRangeTreeFindRangeTree(tree, chrom->name), tmpNodeToString);
+    dyStringAppend(tmpTreeToString, "]");
+    }
+dyStringAppend(tmpTreeToString, "]");
+hashElFreeList(&chromList);
+return tmpTreeToString;
+}
+
+long long genomeRangeTreeSumRanges(struct genomeRangeTree *grt)
+/* Sum up all ranges in tree. */
+{
+long long sum = 0;
+struct hashEl *chrom, *chromList = hashElListHash(grt->hash);
+for (chrom = chromList; chrom != NULL; chrom = chrom->next)
+    rbTreeTraverseWithContext(chrom->val, rangeTreeSumRangeCallback, &sum);
+hashElFreeList(&chromList);
+return sum;
+}
+
diff --git a/gbtools/src/blatSrc/lib/gfNet.c b/gbtools/src/blatSrc/lib/gfNet.c
new file mode 100644
index 0000000..609698d
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/gfNet.c
@@ -0,0 +1,24 @@
+/* gfNet.c - Network dependent stuff for blat server. */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "errAbort.h"
+#include "genoFind.h"
+#include "net.h"
+
+
+int gfConnect(char *hostName, char *portName)
+/* Start connection with server. */
+{
+/* Connect to server. */
+int sd = netConnect(hostName, atoi(portName));
+if (sd < 0)
+    {
+    errnoAbort("Sorry, the BLAT/iPCR server seems to be down.  Please try "
+               "again later.");
+    }
+return sd;
+}
+
diff --git a/gbtools/src/blatSrc/lib/gff.c b/gbtools/src/blatSrc/lib/gff.c
new file mode 100644
index 0000000..6058e01
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/gff.c
@@ -0,0 +1,474 @@
+/* gff - routines to read many types of gff and gtf files
+ * and turn them into a relatively easy to deal with form
+ * in memory.
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "hash.h"
+#include "linefile.h"
+#include "gff.h"
+#include "obscure.h"
+#include "dystring.h"
+
+
+void gffGroupFree(struct gffGroup **pGroup)
+/* Free up a gffGroup including lineList. */
+{
+struct gffGroup *group;
+if ((group = *pGroup) != NULL)
+    {
+    slFreeList(&group->lineList);
+    freez(pGroup);
+    }
+}
+
+void gffGroupFreeList(struct gffGroup **pList)
+/* Free up a list of gffGroups. */
+{
+struct gffGroup *el, *next;
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    gffGroupFree(&el);
+    }
+*pList = NULL;
+}
+
+
+void gffFileFree(struct gffFile **pGff)
+/* Free up a gff file. */
+{
+struct gffFile *gff;
+if ((gff = *pGff) != NULL)
+    {
+    freeMem(gff->fileName);
+    freeHash(&gff->seqHash);
+    freeHash(&gff->sourceHash);
+    freeHash(&gff->featureHash);
+    freeHash(&gff->groupHash);
+    freeHash(&gff->geneIdHash);
+    freeHash(&gff->strPool);
+    slFreeList(&gff->lineList);
+    slFreeList(&gff->seqList);
+    slFreeList(&gff->sourceList);
+    slFreeList(&gff->featureList);
+    slFreeList(&gff->geneIdList);
+    gffGroupFreeList(&gff->groupList);
+    freez(pGff);
+    }
+}
+
+static char *gffFileGetStr(struct gffFile *gff, char *str)
+/* get a string from the string pool */
+{
+return hashStore(gff->strPool,  str)->name;
+}
+
+int gffLineCmp(const void *va, const void *vb)
+/* Compare two gffLines. */
+{
+const struct gffLine *a = *((struct gffLine **)va);
+const struct gffLine *b = *((struct gffLine **)vb);
+int diff;
+
+/* for overlaping starts, sort by end, genePredFromGroupedGtf() depends on
+ * this */
+diff = strcmp(a->seq, b->seq);
+if (diff == 0)
+    diff = a->start - b->start;
+if (diff == 0)
+    diff = a->end - b->end;
+return diff;
+}
+
+
+static void gffSyntaxError(char *fileName, int line, char *msg)
+/* Complain about syntax error in GFF file. */
+{
+errAbort("%s Bad line %d of %s:\n", msg, line, fileName);
+}
+
+static char *gffTnName(char *seqName, char *groupName)
+/* Make name that encorperates seq and group names.... */
+{
+static struct dyString *nameBuf = NULL;
+if (nameBuf == NULL)
+    nameBuf = dyStringNew(0);
+dyStringClear(nameBuf);
+if (startsWith("gene-", groupName))
+    groupName += 5;
+if (startsWith("cc_", groupName))
+    groupName += 3;
+dyStringAppend(nameBuf, groupName);
+
+return nameBuf->string;
+}
+
+static boolean isGtfGroup(char *group)
+/* Return TRUE if group field looks like GTF */
+{
+if (strstr(group, "gene_id") == NULL)
+    return FALSE;
+if (countChars(group, '"') >= 2)
+    return TRUE;
+if (strstr(group, "transcript_id") != NULL)
+    return TRUE;
+return FALSE;
+}
+
+boolean gffHasGtfGroup(char *line)
+/* Return TRUE if line has a GTF group field */
+{
+char *words[10];
+char *dupe = cloneString(line);
+int wordCt = chopTabs(dupe, words);
+boolean isGtf = FALSE;
+if (wordCt >= 9) 
+    if (isGtfGroup(words[8]))
+        isGtf = TRUE;
+freeMem(dupe);
+return isGtf;
+}
+
+static void readQuotedString(char *fileName, int lineIx, char *in, char *out, char **retNext)
+/* Parse quoted string and abort on error. */
+{
+if (!parseQuotedString(in, out, retNext))
+    errAbort("Line %d of %s\n", lineIx, fileName);
+}
+
+static void parseGtfEnd(char *s, struct gffFile *gff, struct gffLine *gl, 
+    char *fileName, int lineIx)
+/* Read the semi-colon separated end bits of a GTF line into gl and
+ * hashes. */
+{
+char *type, *val;
+struct hashEl *hel;
+bool gotSemi;
+
+for (;;)
+   {
+   gotSemi = FALSE;
+   if ((type = nextWord(&s)) == NULL)
+       break;
+   s = skipLeadingSpaces(s);
+   if (NULL == s || s[0] == 0)
+       errAbort("Unpaired type(%s)/val on end of gtf line %d of %s", type, lineIx, fileName);
+   if (s[0] == '"' || s[0] == '\'')
+       {
+       val = s;
+       readQuotedString(fileName, lineIx, s, val, &s);
+       }
+   else
+       {
+       int len;
+       val = nextWord(&s);
+       len = strlen(val) - 1;
+       if (val[len] == ';')
+	   {
+	   val[len] = 0;
+	   len -= 1;
+           gotSemi = TRUE;
+	   }
+       if (len < 0)
+           errAbort("Empty value for %s line %d of %s", type, lineIx, fileName);
+       }
+   if (s != NULL && !gotSemi)
+      {
+      s = strchr(s, ';');
+      if (s != NULL)
+         ++s;
+      }
+   /* only use the first occurance of gene_id and transcript_id */
+   if (sameString("gene_id", type) && (gl->geneId == NULL))
+       {
+       struct gffGeneId *gg;
+       if ((hel = hashLookup(gff->geneIdHash, val)) == NULL)
+	   {
+	   AllocVar(gg);
+           hel = hashAdd(gff->geneIdHash, val, gg);
+	   gg->name = hel->name;
+	   slAddHead(&gff->geneIdList, gg);
+	   }
+	else
+	   {
+	   gg = hel->val;
+	   }
+       gl->geneId = gg->name;
+       }
+   else if (sameString("transcript_id", type) && (gl->group == NULL))
+       {
+       struct gffGroup *gg;
+       if ((hel = hashLookup(gff->groupHash, val)) == NULL)
+	   {
+	   AllocVar(gg);
+           hel = hashAdd(gff->groupHash, val, gg);
+	   gg->name = hel->name;
+	   gg->seq = gl->seq;
+	   gg->source = gl->source;
+	   slAddHead(&gff->groupList, gg);
+	   }
+	else
+	   {
+	   gg = hel->val;
+	   }
+       gl->group = gg->name;
+       }
+   else if (sameString("exon_id", type))
+       gl->exonId = gffFileGetStr(gff, val);
+   else if (sameString("exon_number", type))
+       {
+       if (!isdigit(val[0]))
+           errAbort("Expecting number after exon_number, got %s line %d of %s", val, lineIx, fileName);
+       gl->exonNumber = atoi(val);
+       }
+   else if (sameString("intron_id", type))
+       gl->intronId = gffFileGetStr(gff, val);
+   else if (sameString("intron_status", type))
+       gl->intronStatus = gffFileGetStr(gff, val);
+   else if (sameString("protein_id", type))
+       gl->proteinId = gffFileGetStr(gff, val);
+   else if (sameString("gene_name", type))
+       gl->geneName = gffFileGetStr(gff, val);
+   else if (sameString("transcript_name", type))
+       gl->transcriptName = gffFileGetStr(gff, val);
+   }
+}
+
+void gffFileAddRow(struct gffFile *gff, int baseOffset, char *words[], int wordCount, 
+    char *fileName, int lineIx)
+/* Process one row of GFF file (a non-comment line parsed by tabs normally). */
+{
+struct hashEl *hel;
+struct gffLine *gl;
+
+if (wordCount < 8)
+    gffSyntaxError(fileName, lineIx, "Word count less than 8 ");
+AllocVar(gl);
+
+if ((hel = hashLookup(gff->seqHash, words[0])) == NULL)
+    {
+    struct gffSeqName *el;
+    AllocVar(el);
+    hel = hashAdd(gff->seqHash, words[0], el);
+    el->name = hel->name;
+    slAddHead(&gff->seqList, el);
+    }
+gl->seq = hel->name;
+
+if ((hel = hashLookup(gff->sourceHash, words[1])) == NULL)
+    {
+    struct gffSource *el;
+    AllocVar(el);
+    hel = hashAdd(gff->sourceHash, words[1], el);
+    el->name = hel->name;
+    slAddHead(&gff->sourceList, el);
+    }
+gl->source = hel->name;
+
+if ((hel = hashLookup(gff->featureHash, words[2])) == NULL)
+    {
+    struct gffFeature *el;
+    AllocVar(el);
+    hel = hashAdd(gff->featureHash, words[2], el);
+    el->name = hel->name;
+    slAddHead(&gff->featureList, el);
+    }
+struct gffFeature *feature = hel->val;
+feature->count += 1;
+gl->feature = hel->name;
+
+if (!isdigit(words[3][0]) || !isdigit(words[4][0]))
+   gffSyntaxError(fileName, lineIx, "col 3 or 4 not a number ");	
+gl->start = atoi(words[3])-1 + baseOffset;
+gl->end = atoi(words[4]) + baseOffset;
+gl->score = atof(words[5]);
+gl->strand = words[6][0];
+gl->frame = words[7][0];
+
+if (wordCount >= 9)
+    {
+    if (!gff->typeKnown)
+	{
+	gff->typeKnown = TRUE;
+	gff->isGtf = isGtfGroup(words[8]);
+	}
+    if (gff->isGtf)
+	{
+	parseGtfEnd(words[8], gff, gl, fileName, lineIx);
+	}
+    else
+	{
+	char *tnName = gffTnName(gl->seq, trimSpaces(words[8]));
+	if ((hel = hashLookup(gff->groupHash, tnName)) == NULL)
+	    {
+	    struct gffGroup *group;
+	    AllocVar(group);
+	    hel = hashAdd(gff->groupHash, tnName, group);
+	    group->name = hel->name;
+	    group->seq = gl->seq;
+	    group->source = gl->source;
+	    slAddHead(&gff->groupList, group);
+	    }
+	gl->group = hel->name;
+	}
+    }
+slAddHead(&gff->lineList, gl);
+}
+
+
+void gffFileAdd(struct gffFile *gff, char *fileName, int baseOffset)
+/* Create a gffFile structure from a GFF file. */
+{
+/* Open file and do basic allocations. */
+struct lineFile *lf = lineFileOpen(fileName, TRUE);
+char *line, *words[9];
+int lineSize, wordCount;
+
+while (lineFileNext(lf, &line, &lineSize))
+    {
+    if (line[0] != '#')
+	{
+	wordCount = chopTabs(line, words);
+        if (wordCount > 0)
+            gffFileAddRow(gff, baseOffset, words, wordCount, lf->fileName, lf->lineIx);
+	}
+    }
+slReverse(&gff->lineList);
+slReverse(&gff->seqList);
+slReverse(&gff->sourceList);
+slReverse(&gff->featureList);
+slReverse(&gff->groupList);
+slReverse(&gff->geneIdList);
+lineFileClose(&lf);
+}
+
+struct gffFile *gffFileNew(char *fileName)
+/* Create a new gffFile structure. */
+{
+struct gffFile *gff;
+AllocVar(gff);
+gff->fileName = cloneString(fileName);
+gff->seqHash = newHash(18);
+gff->sourceHash = newHash(6);
+gff->featureHash = newHash(6);
+gff->groupHash = newHash(16);
+gff->geneIdHash = newHash(16);
+gff->strPool = newHash(20);
+return gff;
+}
+
+struct gffFile *gffRead(char *fileName)
+/* Create a gffFile structure from a GFF file. */
+{
+struct gffFile *gff = gffFileNew(fileName);
+gffFileAdd(gff, fileName, 0);
+return gff;
+}
+
+static void getGroupBoundaries(struct gffGroup *group)
+/* Fill in start, end, strand of group from lines. */
+{
+struct gffLine *line;
+int start = 0x3fffffff;
+int end = -start;
+line = group->lineList;
+group->strand = line->strand;
+for (; line != NULL; line = line->next)
+    {
+    if (start > line->start)
+	start = line->start;
+    if (end < line->end)
+	end = line->end;
+    }
+group->start = start;
+group->end = end;
+}
+
+void gffGroupLines(struct gffFile *gff)
+/* Group lines of gff file together, in process moving
+ * gff->lineList to gffGroup->lineList. */
+{
+struct gffLine *line, *nextLine;
+struct hash *groupHash = gff->groupHash;
+char *groupName;
+struct gffGroup *group;
+struct gffLine *ungroupedLines = NULL;
+
+for (line = gff->lineList; line != NULL; line = nextLine)
+    {
+    nextLine = line->next;
+    if ((groupName = line->group) != NULL)
+	{
+	struct hashEl *hel = hashLookup(groupHash, groupName);
+	group = hel->val;
+	slAddHead(&group->lineList, line);
+	}
+    else
+	{
+	slAddHead(&ungroupedLines, line);
+	}
+    }
+
+/* Restore ungrouped lines to gff->lineList. */
+slReverse(&ungroupedLines);
+gff->lineList = ungroupedLines;
+
+/* Restore order of grouped lines and fill in start and end. */
+for (group = gff->groupList; group != NULL; group = group->next)
+    {
+    slSort(&group->lineList, gffLineCmp);
+    getGroupBoundaries(group);
+    }
+}
+
+void gffOutput(struct gffLine *el, FILE *f, char sep, char lastSep) 
+/* Print out GTF.  Separate fields with sep. Follow last field with lastSep. */
+{
+if (sep == ',') fputc('"',f);
+fprintf(f, "%s", el->seq);
+if (sep == ',') fputc('"',f);
+fputc(sep,f);
+if (sep == ',') fputc('"',f);
+fprintf(f, "%s", el->source);
+if (sep == ',') fputc('"',f);
+fputc(sep,f);
+if (sep == ',') fputc('"',f);
+fprintf(f, "%s", el->feature);
+if (sep == ',') fputc('"',f);
+fputc(sep,f);
+fprintf(f, "%u", el->start+1);
+fputc(sep,f);
+fprintf(f, "%u", el->end);
+fputc(sep,f);
+fprintf(f, "%f", el->score);
+fputc(sep,f);
+if (sep == ',') fputc('"',f);
+fprintf(f, "%c", el->strand);
+if (sep == ',') fputc('"',f);
+fputc(sep,f);
+if (sep == ',') fputc('"',f);
+fprintf(f, "%c", el->frame);
+if (sep == ',') fputc('"',f);
+fputc(sep,f);
+if (sep == ',') fputc('"',f);
+if (el->geneId != NULL)
+    fprintf(f, "gene_id %s\"%s%s\"; ",
+	    (sep == ',') ? "\\" : "",
+	    el->geneId,
+	    (sep == ',') ? "\\" : "");
+fprintf(f, "transcript_id %s\"%s%s\"; ",
+	(sep == ',') ? "\\" : "",
+	el->group,
+	(sep == ',') ? "\\" : "");
+if (el->exonId != NULL)
+    fprintf(f, "exon_id %s\"%s%s\"; ",
+	    (sep == ',') ? "\\" : "",
+	    el->exonId,
+	    (sep == ',') ? "\\" : "");
+if (sep == ',') fputc('"',f);
+fputc(lastSep,f);
+}
+
diff --git a/gbtools/src/blatSrc/lib/gff3.c b/gbtools/src/blatSrc/lib/gff3.c
new file mode 100644
index 0000000..c2cc424
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/gff3.c
@@ -0,0 +1,1109 @@
+/*
+ * Object for accessing GFF3 files
+ * See GFF3 specification for details of file format:
+ *   http://www.sequenceontology.org/gff3.shtml
+ */
+
+/* Copyright (C) 2014 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+#include "common.h"
+#include "gff3.h"
+#include <limits.h>
+#include "errAbort.h"
+#include "localmem.h"
+#include "hash.h"
+#include "linefile.h"
+#include "dystring.h"
+#include "fa.h"
+
+// FIXME: spec unclear if attributes can be specified multiple times
+// FIXME: spec unclear on attribute of discontinuous features.
+// FIXME: should spaces be striped from attributes?
+
+/*
+ * Notes:
+ *   - a separate feature object that linked discontinuous feature annotations
+ *     was not used because it create more complexity with the linking of parents
+ *     and the fact that the restriction on discontinguous features attributes is
+ *     not clearly defined.
+ */
+
+static const int gffNumCols = 9;
+
+/* standard attribute names */
+char *gff3AttrID = "ID";
+char *gff3AttrName = "Name";
+char *gff3AttrAlias = "Alias";
+char *gff3AttrParent = "Parent";
+char *gff3AttrTarget = "Target";
+char *gff3AttrGap = "Gap";
+char *gff3AttrDerivesFrom = "Derives_from";
+char *gff3AttrNote = "Note";
+char *gff3AttrDbxref = "Dbxref";
+char *gff3AttrOntologyTerm = "Ontology_term";
+char *gff3AttrIsCircular = "Is_circular";
+
+/* commonly used features names */
+char *gff3FeatGene = "gene";
+char *gff3FeatMRna = "mRNA";
+char *gff3FeatExon = "exon";
+char *gff3FeatCDS = "CDS";
+char *gff3FeatThreePrimeUTR = "three_prime_UTR";
+char *gff3FeatFivePrimeUTR = "five_prime_UTR";
+char *gff3FeatStartCodon = "start_codon";
+char *gff3FeatStopCodon = "stop_codon";
+char *gff3FeatTranscript = "transcript";
+
+static bool gff3FileStopDueToErrors(struct gff3File *g3f)
+/* determine if we should stop due to the number of errors */
+{
+return g3f->errCnt > g3f->maxErr;
+}
+
+static void gff3FileErr(struct gff3File *g3f, char *format, ...)
+#if defined(__GNUC__)
+__attribute__((format(printf, 2, 3)))
+#endif
+;
+
+static void gff3AnnErr(struct gff3Ann *g3a, char *format, ...)
+#if defined(__GNUC__)
+__attribute__((format(printf, 2, 3)))
+#endif
+;
+
+static void vaGff3FileErr(struct gff3File *g3f, char *format, va_list args)
+/* Print error message to error file, abort if max errors have been reached */
+{
+if (g3f->lf != NULL)
+    fprintf(g3f->errFh, "%s:%d: ", g3f->lf->fileName, g3f->lf->lineIx);
+vfprintf(g3f->errFh, format, args);
+fprintf(g3f->errFh, "\n");
+g3f->errCnt++;
+if (gff3FileStopDueToErrors(g3f))
+    errAbort("GFF3: %d parser errors", g3f->errCnt);
+}
+
+static void gff3FileErr(struct gff3File *g3f, char *format, ...)
+/* Print error message and abort */
+{
+va_list args;
+va_start(args, format);
+vaGff3FileErr(g3f, format, args);
+va_end(args);
+}
+
+static void gff3AnnErr(struct gff3Ann *g3a, char *format, ...)
+/* Print error message abort */
+{
+va_list args;
+va_start(args, format);
+vaGff3FileErr(g3a->file, format, args);
+va_end(args);
+}
+
+static int gff3FileStrToInt(struct gff3File *g3f, char *str)
+/* convert a string to an integer */
+{
+char *end;
+long val = strtol(str, &end, 0);
+if ((end == str) || (*end != '\0'))
+    gff3FileErr(g3f, "invalid integer: %s", str);
+return (int)val;
+}
+
+static float gff3FileStrToFloat(struct gff3File *g3f, char *str)
+/* convert a string to a float  */
+{
+char *end;
+double val = strtod(str, &end);
+if ((end == str) || (*end != '\0'))
+    gff3FileErr(g3f, "invalid float: %s", str);
+return (float)val;
+}
+
+static void *gff3FileAlloc(struct gff3File *g3f, size_t size)
+/* allocate memory from the memory pool */
+{
+return lmAlloc(g3f->pool->lm, size);
+}
+
+static char *gff3FileCloneStr(struct gff3File *g3f, char *str)
+/* allocate memory for a string and copy if */
+{
+return lmCloneString(g3f->pool->lm, str);
+}
+
+static char *gff3FilePooledStr(struct gff3File *g3f, char *str)
+/* allocate memory for a string from the shared string pool */
+{
+return hashStore(g3f->pool, str)->name;
+}
+
+static struct slName *gff3FileSlNameNew(struct gff3File *g3f, char *name)
+/* allocate slName from the memory pool */
+{
+return lmSlName(g3f->pool->lm, name);
+}
+
+
+static char **dynChopStringWhite(struct gff3File *g3f, char *str, int minWords, int maxWords, int *numWordsRet, char *desc)
+/* dynamic chop string without corrupting it, generate error if expected
+ * number of words not found. Free return when done. Returns NULL on
+ * error. */
+{
+int numWords = chopByWhite(str, NULL, 0);
+if ((numWords < minWords) || (numWords > maxWords))
+    {
+    gff3FileErr(g3f, "expected %s, got \"%s\"", desc, str);
+    return NULL;
+    }
+// allocate buffer for both array and string
+int wordsBytes = ((numWords+1)*sizeof(char**));
+char **words = needMem(wordsBytes+strlen(str)+1);
+char *strcp = ((char*)words)+wordsBytes;
+strcpy(strcp, str);
+chopByWhite(strcp, words, numWords);
+words[numWords] = NULL;
+if (numWordsRet != NULL)
+    *numWordsRet = numWords;
+return words;
+}
+
+struct gff3Attr *gff3AnnFindAttr(struct gff3Ann *g3a, char *tag)
+/* find a user attribute, or NULL */
+{
+struct gff3Attr *attr;
+for (attr = g3a->attrs; attr != NULL; attr = attr->next)
+    {
+    if (sameString(attr->tag, tag))
+        return attr;
+    }
+return NULL;
+}
+
+static struct gff3AnnRef *gff3AnnRefAlloc(struct gff3Ann *g3a)
+/* construct an annotation reference, allocated in the memory pool*/
+{
+struct gff3AnnRef *ref = gff3FileAlloc(g3a->file, sizeof(struct gff3AnnRef));
+ref->ann = g3a;
+return ref;
+}
+
+static void raiseInvalidEscape(struct gff3Ann *g3a, char *str)
+/* raise an error about an invalid escape in a string */
+{
+gff3AnnErr(g3a, "invalid GFF escape sequence in string: %s", str);
+}
+
+static char convertEscape(struct gff3Ann *g3a, char *esc, char *src)
+/* convert character at esc, which should start with a `%' and be a string
+ * in the form `%09' */
+{
+if (!(isxdigit(esc[1]) && isxdigit(esc[2])))
+    raiseInvalidEscape(g3a, src);
+char num[3], *end;
+strncpy(num, esc+1, 2);
+num[2] = '\0';
+long val = strtol(num, &end, 16);
+if ((end == num) || (*end != '\0'))
+    raiseInvalidEscape(g3a, src);
+return (char)val;
+}
+
+static void unescapeStr(struct gff3Ann *g3a, char *dest, char *src)
+/* remove URL-style escapes from a string. dest need only have enough
+ * memory to hold src, as unescaping will not grow the string */
+{
+char *s = src, *d = dest;
+while (*s != '\0')
+    {
+    if (*s == '%')
+        {
+        *d++ = convertEscape(g3a, s, src);
+        s += 3;
+        }
+    else
+        *d++ = *s++;
+    }
+*d = '\0';
+}
+
+static struct slName *unescapeSlName(struct gff3Ann *g3a, char *src)
+/* unescape the string and put in an slName object, storing it in memory
+ * allocated from localmem  */
+{
+struct slName *dest = gff3FileAlloc(g3a->file, sizeof(struct slName)+strlen(src));
+unescapeStr(g3a, dest->name, src);
+return dest;
+}
+
+static char *unescapeStrTmp(struct gff3Ann *g3a, char *src)
+/* unescape the string into a tmp buffer. WARNING: return is a static and
+ * maybe invalidated by calling another unescape function */
+{
+static struct dyString *buf = NULL;  // buffer for tmp copy of unescaped string
+if (buf == NULL)
+    buf = dyStringNew(256);
+dyStringBumpBufSize(buf, strlen(src)+1);
+unescapeStr(g3a, buf->string, src);
+return buf->string;
+}
+
+static char *unescapeStrPooled(struct gff3Ann *g3a, char *src)
+/* unescape the string and obtain it from localmem  */
+{
+return gff3FilePooledStr(g3a->file, unescapeStrTmp(g3a, src));
+}
+
+static char *escapeChar(char c)
+/* escape a character.  Warning: static return */
+{
+static char ec[4];
+safef(ec, sizeof(ec), "%%%02X", c);
+return ec;
+}
+
+static boolean isMetaChar(char c)
+/* determine if a character is a GFF3 meta character */
+{
+return ((c == '\t') || (c == '\n') || (c == '\r') || !isprint(c) || (c == ';') || (c == '=') || (c == '&') || (c == ','));
+}
+
+static void writeEscaped(char *str, FILE *fh)
+/* write a data string to a file, escaping as needed */
+{
+char *c;
+for (c = str; *c != '\0'; c++)
+    {
+    if (isMetaChar(*c))
+        fputs(escapeChar(*c), fh);
+    else
+        fputc(*c, fh);
+    }
+}
+
+static char *parseStrand(struct gff3Ann *g3a, char *strand)
+/* parse strand into static string, validating it */
+{
+if (sameString(strand, "."))
+    return NULL;
+else if (sameString(strand, "+"))
+    return "+";
+else if (sameString(strand, "-"))
+    return "-";
+else if (sameString(strand, "?"))
+    return "?";
+else
+    gff3AnnErr(g3a, "invalid strand: '%s'", strand);
+return NULL;
+}
+
+static int parsePhase(struct gff3Ann *g3a, char *str)
+/* parse phase into a number, validating it */
+{
+if (sameString(str, "."))
+    return -1;
+int phase = gff3FileStrToInt(g3a->file, str);
+if ((phase < 0) || (phase  > 2))
+    gff3AnnErr(g3a, "invalid phase: %d", phase);
+return phase;
+}
+
+static void parseFields(struct gff3Ann *g3a, char **words)
+/* parse the field in an annotation record */
+{
+g3a->seqid = unescapeStrPooled(g3a, words[0]);
+g3a->source = unescapeStrPooled(g3a, words[1]);
+g3a->type = unescapeStrPooled(g3a, words[2]);
+g3a->start = gff3FileStrToInt(g3a->file, words[3])-1;
+g3a->end = gff3FileStrToInt(g3a->file, words[4]);
+if (!sameString(words[5], "."))
+    {
+    g3a->score = gff3FileStrToFloat(g3a->file, words[5]);
+    g3a->haveScore = TRUE;
+    }
+g3a->strand = parseStrand(g3a, words[6]);
+g3a->phase = parsePhase(g3a, words[7]);
+if (sameString(g3a->type, "CDS"))
+    {
+    if (g3a->phase < 0)
+	g3a->phase = 0;  // assume the phase is 0
+    }
+else
+    {
+#if 0 // spec unclear; bug report filed
+    // spec currently doesn't restrict phase, unclear if it's allowed on start/stop codon features
+    if (g3a->phase >= 0)
+        gff3AnnErr(g3a, "phase only allowed on CDS features");
+#endif
+    }
+}
+
+/* check that an attribute tag name is valid. */
+static boolean checkAttrTag(struct gff3Ann *g3a, char *tag)
+{
+// FIXME: spec is not clear on what is a valid tag.
+char *tc = tag;
+boolean isOk = isalpha(*tc);
+for (tc++; isOk && (*tc != '\0'); tc++)
+    {
+    if (!((*tc == '-') || (*tc == '_') || isalnum(*tc)))
+        isOk = FALSE;
+    }
+if (!isOk)
+    gff3AnnErr(g3a, "invalid attribute tag, must start with an alphabetic character and be composed of alphanumeric, dash, or underscore characters: %s", tag);
+return isOk;
+}
+
+static struct slName *parseAttrVals(struct gff3Ann *g3a, char *tag, char *valsStr)
+/* parse an attribute into its values */
+{
+int i, numVals = chopString(valsStr, ",", NULL, 0);
+char **vals = needMem((numVals+1)*sizeof(char**)); // +1 allows for no values
+chopString(valsStr, ",", vals, numVals);
+struct slName *unescVals = NULL;
+for (i = 0; i < numVals; i++)
+    slAddHead(&unescVals, unescapeSlName(g3a, vals[i]));
+if (unescVals == NULL)
+    slAddHead(&unescVals, slNameNew(""));  // empty value
+freeMem(vals);
+slReverse(&unescVals);
+return unescVals;
+}
+
+static void addAttr(struct gff3Ann *g3a, char *tag, char *valStr)
+/* Add an attribute to the list of attributes.  If attribute has already been
+ * specified, values are merged.  Attribute name must already be unescaped,
+ * attribute values will be split and then unescaped. */
+{
+struct gff3Attr *attr = gff3AnnFindAttr(g3a, tag);
+if (attr == NULL)
+    {
+    attr = gff3FileAlloc(g3a->file, sizeof(struct gff3Attr));
+    attr->tag = gff3FileCloneStr(g3a->file, tag);
+    slAddHead(&g3a->attrs, attr);
+    }
+attr->vals = slCat(attr->vals, parseAttrVals(g3a, tag, valStr));
+}
+
+static void parseAttr(struct gff3Ann *g3a, char *attrStr)
+/* parse one attribute from an annotation record */
+{
+char *eq = strchr(attrStr, '=');
+if ((eq == NULL) || (eq == attrStr))
+    gff3AnnErr(g3a, "expected name=value: %s", attrStr);
+else
+    {
+    char *tag = attrStr;
+    char *vals = eq+1;
+    *eq = '\0';
+    unescapeStr(g3a, tag, tag);
+    if (checkAttrTag(g3a, tag))
+        addAttr(g3a, tag, vals);
+    }
+}
+
+static void parseAttrs(struct gff3Ann *g3a, char *attrsCol)
+/* parse the attribute column in an annotation record */
+{
+int i, numAttrs = chopString(attrsCol, ";", NULL, 0);
+char **attrStrs = needMem(numAttrs*sizeof(char**));
+chopString(attrsCol, ";", attrStrs, numAttrs);
+for (i = 0; i < numAttrs; i++)
+    {
+    char *attrStr = trimSpaces(attrStrs[i]);
+    if (strlen(attrStr) > 0)
+        parseAttr(g3a, attrStr);
+    }
+freeMem(attrStrs);
+slReverse(&g3a->attrs);
+}
+
+static void checkSingleValAttr(struct gff3Ann *g3a, struct gff3Attr *attr)
+/* validate that an attribute has only one value */
+{
+if (attr->vals->next != NULL)
+    gff3AnnErr(g3a, "attribute %s must have a single value, found multiple comma-separated values", attr->tag);
+}
+
+static void parseIDAttr(struct gff3Ann *g3a, struct gff3Attr *attr)
+/* parse the ID attribute */
+{
+checkSingleValAttr(g3a, attr);
+g3a->id = attr->vals->name;
+// link into other parts of feature if discontinuous
+struct hashEl *hel = hashStore(g3a->file->byId, g3a->id);
+struct gff3Ann *head = hel->val;
+if (head != NULL)
+    head->prevPart = g3a;
+g3a->nextPart = head;
+hel->val = g3a;
+}
+
+static void parseNameAttr(struct gff3Ann *g3a, struct gff3Attr *attr)
+/* parse the Name attribute */
+{
+checkSingleValAttr(g3a, attr);
+g3a->name = attr->vals->name;
+}
+
+static void parseAliasAttr(struct gff3Ann *g3a, struct gff3Attr *attr)
+/* parse the Alias attribute */
+{
+g3a->aliases = attr->vals;
+}
+
+static void parseParentAttr(struct gff3Ann *g3a, struct gff3Attr *attr)
+/* parse the Parent attribute */
+{
+g3a->parentIds = attr->vals;
+}
+
+static void parseTargetAttr(struct gff3Ann *g3a, struct gff3Attr *attr)
+/* parse the Target attribute */
+{
+checkSingleValAttr(g3a, attr);
+
+// target_id start end [strand]
+int numWords;
+char **words = dynChopStringWhite(g3a->file, attr->vals->name, 3, 4, &numWords,
+                                  "Target attribute in the form \"target_id start end [strand]\"");
+if (words == NULL)
+    return;  // got an error
+g3a->targetId = gff3FileCloneStr(g3a->file, words[0]);
+g3a->targetStart = gff3FileStrToInt(g3a->file, words[1])-1;
+g3a->targetEnd = gff3FileStrToInt(g3a->file, words[2]);
+if (numWords > 3)
+    g3a->targetStrand = parseStrand(g3a, words[3]);
+freeMem(words);
+}
+
+static void parseGapAttr(struct gff3Ann *g3a, struct gff3Attr *attr)
+/* parse the Gap attribute */
+{
+checkSingleValAttr(g3a, attr);
+g3a->gap = attr->vals->name;
+}
+
+static void parseDerivesFromAttr(struct gff3Ann *g3a, struct gff3Attr *attr)
+/* parse the Derives_from attribute */
+{
+checkSingleValAttr(g3a, attr);
+g3a->derivesFromId = attr->vals->name;
+}
+
+static void parseIsCircular(struct gff3Ann *g3a, struct gff3Attr *attr)
+/* parse the Note attribute */
+{
+g3a->isCircular = TRUE;
+}
+
+static void parseNoteAttr(struct gff3Ann *g3a, struct gff3Attr *attr)
+/* parse the Note attribute */
+{
+g3a->notes = attr->vals;
+}
+
+static void parseDbxrefAttr(struct gff3Ann *g3a, struct gff3Attr *attr)
+/* parse the Dbxref attribute */
+{
+g3a->dbxrefs = attr->vals;
+}
+
+static void parseOntologyTermAttr(struct gff3Ann *g3a, struct gff3Attr *attr)
+/* parse the Ontology_term attribute */
+{
+g3a->ontologyTerms = attr->vals;
+}
+
+static void parseStdAttr(struct gff3Ann *g3a, struct gff3Attr *attr)
+/* Parse one of the standard specified attributes (those starting with upper
+ * case) into fields. Multiple specifications of an attribute should have been
+ * merged before calling this function. */
+{
+if (sameString(attr->tag, gff3AttrID))
+    parseIDAttr(g3a, attr);
+else if (sameString(attr->tag, gff3AttrName))
+    parseNameAttr(g3a, attr);
+else if (sameString(attr->tag, gff3AttrAlias))
+    parseAliasAttr(g3a, attr);
+else if (sameString(attr->tag, gff3AttrParent))
+    parseParentAttr(g3a, attr);
+else if (sameString(attr->tag, gff3AttrTarget))
+    parseTargetAttr(g3a, attr);
+else if (sameString(attr->tag, gff3AttrGap))
+    parseGapAttr(g3a, attr);
+else if (sameString(attr->tag, gff3AttrDerivesFrom))
+    parseDerivesFromAttr(g3a, attr);
+else if (sameString(attr->tag, gff3AttrIsCircular))
+    parseIsCircular(g3a, attr);
+else if (sameString(attr->tag, gff3AttrNote))
+    parseNoteAttr(g3a, attr);
+else if (sameString(attr->tag, gff3AttrDbxref))
+    parseDbxrefAttr(g3a, attr);
+else if (sameString(attr->tag, gff3AttrOntologyTerm))
+    parseOntologyTermAttr(g3a, attr);
+else
+    gff3AnnErr(g3a, "unknown standard attribute, user defined attributes must start with a lower-case letter: %s", attr->tag);
+}
+
+static void parseStdAttrs(struct gff3Ann *g3a)
+/* parse standard attributes (starting with upper case) into attributes
+ * have been parsed into attribute list, which would have  merged multiply
+ * specified attributes. */
+{
+struct gff3Attr *attr;
+for (attr = g3a->attrs; attr != NULL; attr = attr->next)
+    {
+    if (isupper(attr->tag[0]))
+        parseStdAttr(g3a, attr);
+    }
+}
+
+static void parseAnn(struct gff3File *g3f, char *line)
+/* parse an annotation line */
+{
+// extra column to check for too many
+char *words[gffNumCols+1];
+int numWords = chopString(line, "\t", words, gffNumCols+1);
+if (numWords != gffNumCols)
+    gff3FileErr(g3f, "expected %d tab-separated columns: %s", gffNumCols, line);
+
+struct gff3Ann *g3a = gff3FileAlloc(g3f, sizeof(struct gff3Ann));
+g3a->file = g3f;
+g3a->lineNum = g3f->lf->lineIx;
+parseFields(g3a, words);
+parseAttrs(g3a, words[8]);
+parseStdAttrs(g3a);
+slAddHead(&g3f->anns, gff3AnnRefNew(g3a));
+}
+
+static void writeAttr(struct gff3Attr *attr, FILE *fh)
+/* write one attribute and it's values */
+{
+writeEscaped(attr->tag, fh);
+fputc('=', fh);
+struct slName *val;
+for (val = attr->vals; val != NULL; val = val->next)
+    {
+    if (val != attr->vals)
+        fputc(',', fh);
+    writeEscaped(val->name, fh);
+    }
+}
+
+static void writeAttrs(struct gff3Ann *g3a, FILE *fh)
+/* write annotation record attributes */
+{
+struct gff3Attr *attr;
+for (attr = g3a->attrs; attr != NULL; attr = attr->next)
+    {
+    if (attr != g3a->attrs)
+        fputc(';', fh);
+    writeAttr(attr, fh);
+    }
+}
+
+static void writeFields(struct gff3Ann *g3a, FILE *fh)
+/* write an annotation record fields */
+{
+writeEscaped(g3a->seqid, fh);
+fputc('\t', fh);
+writeEscaped(g3a->source, fh);
+fputc('\t', fh);
+writeEscaped(g3a->type, fh);
+fprintf(fh, "\t%d\t%d", g3a->start+1, g3a->end);
+fputc('\t', fh);
+if (g3a->haveScore)
+    fprintf(fh, "%g", g3a->score);
+else
+    fputc('.', fh);
+fprintf(fh, "\t%c", (g3a->strand != NULL) ? g3a->strand[0] : '.');
+fputc('\t', fh);
+if (g3a->phase < 0)
+    fputc('.', fh);
+else
+    fprintf(fh, "%d", g3a->phase);
+}
+
+static void writeAnn(struct gff3Ann *g3a, FILE *fh)
+/* write an annotation record to the specified file */
+{
+writeFields(g3a, fh);
+fputc('\t', fh);
+writeAttrs(g3a, fh);
+fputc('\n', fh);
+}
+
+static void addFasta(struct gff3File *g3f, char *dna, int size, char *name)
+/* add one fasta record */
+{
+struct dnaSeq *dnaSeq = gff3FileAlloc(g3f, sizeof(struct dnaSeq));
+slAddHead(&g3f->seqs, dnaSeq);
+struct hashEl *hel = hashAdd(g3f->seqMap, name, dnaSeq);
+dnaSeq->name = hel->name;
+dnaSeq->dna = gff3FileCloneStr(g3f, dna);
+dnaSeq->size = size;
+}
+
+static void parseFasta(struct gff3File *g3f)
+/* parse fasta records in the file, consumes remainder of file */
+{
+char *dna, *name;
+int size;
+g3f->seqMap = hashNew(0);
+while (faMixedSpeedReadNext(g3f->lf, &dna, &size, &name))
+    addFasta(g3f, dna, size, name);
+}
+
+static void writeFastas(struct gff3File *g3f, FILE *fh)
+/* write fasta records fo the file */
+{
+if (g3f->seqs != NULL)
+    {
+    fputs("##FASTA\n", fh);
+    struct dnaSeq *seq;
+    for (seq = g3f->seqs; seq != NULL; seq = seq->next)
+        faWriteNext(fh, seq->name, seq->dna, seq->size);
+    }
+}
+
+static void parseSequenceRegion(struct gff3File *g3f, char *line)
+/* parse ##sequence-region seqid start end */
+{
+char **words = dynChopStringWhite(g3f, line, 4, 4, NULL,
+                                  "\"##sequence-region seqid start end\"");
+if (words == NULL)
+    return;  // got an error
+struct gff3SeqRegion *sr = gff3FileAlloc(g3f, sizeof(struct gff3SeqRegion));
+sr->seqid = gff3FileCloneStr(g3f, words[1]);
+sr->start = gff3FileStrToInt(g3f, words[2])-1;
+sr->end = gff3FileStrToInt(g3f, words[3]);
+if (g3f->seqRegionMap == NULL)
+    g3f->seqRegionMap = hashNew(0);
+struct hashEl *hel = hashStore(g3f->seqRegionMap, sr->seqid);
+if (hel->val != NULL)
+    gff3FileErr(g3f, "duplicate ##sequence-region for %s", sr->seqid);
+else
+    {
+    hel->val = sr;
+    slAddHead(&g3f->seqRegions, sr);
+    }
+freeMem(words);
+}
+
+static void writeSequenceRegions(struct gff3File *g3f, FILE *fh)
+/* parse ##sequence-region metadata */
+{
+struct gff3SeqRegion *sr;
+for (sr = g3f->seqRegions; sr != NULL; sr = sr->next)
+    fprintf(fh, "##sequence-region %s %d %d\n", sr->seqid, sr->start, sr->end);
+}
+
+static void writeSlNameMetas(char *metaName, struct slName *metas, FILE *fh)
+/* write meta records stores as slNames */
+{
+struct slName  *m;
+for (m = metas; m != NULL; m = m->next)
+    fprintf(fh, "%s %s\n", metaName, m->name);
+}
+
+static void parseFeatureOntology(struct gff3File *g3f, char *line)
+/* parse ##feature-ontology URI  */
+{
+char **words = dynChopStringWhite(g3f, line, 2, 2, NULL,
+                                  "\"##feature-ontology URI\"");
+if (words == NULL)
+    return;  // got an error
+slSafeAddHead(&g3f->featureOntologies, gff3FileSlNameNew(g3f, words[1]));
+freeMem(words);
+}
+
+static void writeFeatureOntologies(struct gff3File *g3f, FILE *fh)
+/* parse ##feature-ontology metas */
+{
+writeSlNameMetas("##feature-ontology", g3f->featureOntologies, fh);
+}
+
+static void parseAttributeOntology(struct gff3File *g3f, char *line)
+/* parse ##attribute-ontology URI */
+{
+char **words = dynChopStringWhite(g3f, line, 2, 2, NULL,
+                                  "\"##attribute-ontology URI\"");
+if (words == NULL)
+    return;  // got an error
+slSafeAddHead(&g3f->attributeOntologies, gff3FileSlNameNew(g3f, words[1]));
+freeMem(words);
+}
+
+static void writeAttributeOntologies(struct gff3File *g3f, FILE *fh)
+/* write ##attribute-ontology metas */
+{
+writeSlNameMetas("##attribute-ontology", g3f->attributeOntologies, fh);
+}
+
+static void parseSourceOntology(struct gff3File *g3f, char *line)
+/* parse ##source-ontology URI */
+{
+char **words = dynChopStringWhite(g3f, line, 2, 2, NULL,
+                                  "\"##source-ontology URI\"");
+if (words == NULL)
+    return;  // got an error
+slSafeAddHead(&g3f->sourceOntologies, gff3FileSlNameNew(g3f, words[1]));
+freeMem(words);
+}
+
+static void writeSourceOntologies(struct gff3File *g3f, FILE *fh)
+/* write ##source-ontology metas */
+{
+writeSlNameMetas("##source-ontology", g3f->sourceOntologies, fh);
+}
+
+static void parseSpecies(struct gff3File *g3f, char *line)
+/* parse ##species NCBI_Taxonomy_URI */
+{
+char **words = dynChopStringWhite(g3f, line, 2, 2, NULL,
+                                  "\"##species NCBI_Taxonomy_URI\"");
+if (words == NULL)
+    return;  // got an error
+slSafeAddHead(&g3f->species, gff3FileSlNameNew(g3f, words[1]));
+freeMem(words);
+}
+
+static void writeSpecies(struct gff3File *g3f, FILE *fh)
+/* write ##species NCBI_Taxonomy_URI */
+{
+writeSlNameMetas("##species", g3f->species, fh);
+}
+
+static void parseGenomeBuild(struct gff3File *g3f, char *line)
+/* parse ##genome-build source buildName */
+{
+if (g3f->genomeBuildSource != NULL)
+    gff3FileErr(g3f, "multiple ##genome-build records");
+char **words = dynChopStringWhite(g3f, line, 3, 3, NULL,
+                                  "\"##genome-build source buildName\"");
+if (words == NULL)
+    return;  // got an error
+g3f->genomeBuildSource = gff3FileCloneStr(g3f, words[1]);
+g3f->genomeBuildName = gff3FileCloneStr(g3f, words[2]);
+freeMem(words);
+}
+
+static void writeGenomeBuild(struct gff3File *g3f, FILE *fh)
+/* parse ##genome-build source buildName */
+{
+if (g3f->genomeBuildSource != NULL)
+    fprintf(fh, "##genome-build %s %s\n", g3f->genomeBuildSource, g3f->genomeBuildName);
+}
+
+static void parseMeta(struct gff3File *g3f, char *line)
+/* parse a meta line of a gff3 file */
+{
+eraseTrailingSpaces(line);
+if (sameString("###", line))
+    ; // ignore
+else if (sameString("##FASTA", line))
+    parseFasta(g3f);
+else if (startsWithWord("##sequence-region", line))
+    parseSequenceRegion(g3f, line);
+else if (startsWithWord("##feature-ontology", line))
+    parseFeatureOntology(g3f, line);
+else if (startsWithWord("##attribute-ontology", line))
+    parseAttributeOntology(g3f, line);
+else if (startsWithWord("##source-ontology", line))
+    parseSourceOntology(g3f, line);
+else if (startsWithWord("##species", line))
+    parseSpecies(g3f, line);
+else if (startsWithWord("##genome-build", line))
+    parseGenomeBuild(g3f, line);
+else if (startsWithWord("##gff-spec-version", line) ||
+         startsWithWord("##source-version", line) ||
+         startsWithWord("##source", line) ||
+         startsWithWord("##date", line) ||
+         startsWithWord("##Type", line))
+    ;  /* FIXME: silently ignore these.  Mark says. */
+else
+    gff3FileErr(g3f, "invalid meta line: %s", line);
+}
+
+static void parseLine(struct gff3File *g3f, char *line)
+/* parse one line of a gff3 file */
+{
+if (startsWith("##", line))
+    parseMeta(g3f, line);
+else if (!startsWith("#", line) && (strlen(line) > 0))
+    parseAnn(g3f, line);
+}
+
+static void parseHeader(struct gff3File *g3f)
+/* parse and validate a GFF3 header */
+{
+char *line;
+if (!lineFileNext(g3f->lf, &line, NULL))
+    gff3FileErr(g3f, "empty GFF file, must have header");
+char *ver = skipToSpaces(line);
+if (*ver != '\0')
+    {
+    *ver++ = '\0';
+    ver = trimSpaces(ver);
+    }
+if (!(sameString(line, "##gff-version") && sameString(ver, "3")))
+    gff3FileErr(g3f, "invalid GFF3 header");
+}
+
+static void parseFile(struct gff3File *g3f)
+/* do parsing phase of reading a GFF3 file */
+{
+g3f->lf = lineFileOpen(g3f->fileName, TRUE);
+parseHeader(g3f);
+char *line;
+while (lineFileNext(g3f->lf, &line, NULL))
+    {
+    parseLine(g3f, line);
+    if (gff3FileStopDueToErrors(g3f))
+        break;
+    }
+lineFileClose(&g3f->lf);
+slReverse(&g3f->anns);
+}
+
+static int gff3AnnCount(struct gff3Ann *g3a)
+/* count the number of gff3Ann objects linked together in a feature */
+{
+int cnt = 0;
+for (; g3a != NULL; g3a = g3a->nextPart)
+    cnt++;
+return cnt;
+}
+
+static void discontinFeatureCheck(struct gff3Ann *g3a)
+/* sanity check linked gff3Ann discontinuous features */
+{
+struct gff3Ann *g3a2;
+for (g3a2 = g3a->nextPart; (g3a2 != NULL) && !gff3FileStopDueToErrors(g3a->file); g3a2 = g3a2->nextPart)
+    {
+    if (!sameString(g3a->type, g3a2->type))
+        gff3AnnErr(g3a, "Annotation records for discontinuous features with ID=\"%s\" do not have the same type, found \"%s\" and \"%s\"", g3a->id, g3a->type, g3a2->type);
+    }
+}
+
+static void discontinFeatureFillArray(struct gff3Ann *g3a, int numAnns, struct gff3Ann *featAnns[])
+/* convert list to array for sorting */
+{
+int i = 0;
+for (; g3a != NULL; g3a = g3a->nextPart)
+    featAnns[i++] = g3a;
+}
+
+static struct gff3Ann *discontinFeatureArrayLink(int numAnns, struct gff3Ann *featAnns[])
+/* convert sorted array to a list */
+{
+struct gff3Ann *g3aHead = NULL, *g3aPrev = NULL;
+int i;
+for (i = 0; i < numAnns; i++)
+    {
+    if (g3aHead == NULL)
+        g3aHead = featAnns[i];
+    if (g3aPrev != NULL)
+        g3aPrev->nextPart = featAnns[i];
+    featAnns[i]->prevPart = g3aPrev;
+    }
+return g3aHead;
+}
+
+static int discontigFeatureSortCmp(const void *p1, const void *p2)
+/* compare function for discontigFeatureSort */
+{
+struct gff3Ann *g3a1 = *((struct gff3Ann **)p1);
+struct gff3Ann *g3a2 = *((struct gff3Ann **)p2);
+int diff = g3a1->start - g3a2->start;
+if (diff == 0)
+    diff = g3a1->end - g3a2->end;
+return diff;
+}
+
+static struct gff3Ann *discontigFeatureSort(struct gff3Ann *g3a)
+/* sort a list of gff3Ann object representing discontinuous */
+{
+int numAnns = gff3AnnCount(g3a);
+struct gff3Ann *featAnns[numAnns];
+discontinFeatureFillArray(g3a, numAnns, featAnns);
+qsort(featAnns, numAnns, sizeof(struct gff3Ann*), discontigFeatureSortCmp);
+return discontinFeatureArrayLink(numAnns, featAnns);
+}
+
+static void discontigFeatureFinish(struct gff3File *g3f)
+/* finish up discontinuous features, sorting them into ascending order */
+{
+// only both sorting if more than one annotation
+struct hashCookie cookie = hashFirst(g3f->byId);
+struct hashEl *hel;
+while (((hel = hashNext(&cookie)) != NULL) && !gff3FileStopDueToErrors(g3f))
+    {
+    struct gff3Ann *g3a = hel->val;
+    if (g3a->nextPart != NULL)
+        {
+        discontinFeatureCheck(g3a);
+        hel->val = discontigFeatureSort(g3a);
+        }
+    }
+}
+
+static struct gff3Ann *resolveRef(struct gff3Ann *g3a, char *id, char *attr)
+/* resolve a link for an attribute */
+{
+struct gff3Ann *ann = gff3FileFindAnn(g3a->file, id);
+if (ann == NULL)
+    gff3AnnErr(g3a, "Can't find annotation record \"%s\" referenced by \"%s\" %s attribute", id, g3a->id, attr);
+return ann;
+}
+
+static struct gff3AnnRef *resolveRefs(struct gff3Ann *g3a, struct slName *ids, char *attr)
+/* resolve links for an attribute */
+{
+struct gff3AnnRef *refs = NULL;
+struct slName *id;
+for (id = ids; id != NULL; id = id->next)
+    {
+    struct gff3Ann *ann = resolveRef(g3a, id->name, attr);
+    if (ann != NULL)
+        slSafeAddHead(&refs, gff3AnnRefAlloc(ann));
+    }
+return refs;
+}
+
+static void resolveAnn(struct gff3Ann *g3a)
+/* resolve links for an gff3Ann */
+{
+g3a->parents = resolveRefs(g3a, g3a->parentIds, gff3AttrParent);
+if (g3a->parents == NULL)
+    slSafeAddHead(&g3a->file->roots, gff3AnnRefAlloc(g3a));
+else
+    {
+    struct gff3AnnRef *par;
+    for (par = g3a->parents; par != NULL; par = par->next)
+        slSafeAddHead(&par->ann->children, gff3AnnRefAlloc(g3a));
+    }
+if (g3a->derivesFromId != NULL)
+    g3a->derivesFrom = resolveRef(g3a, g3a->derivesFromId, gff3AttrDerivesFrom);
+}
+
+static void resolveAnns(struct gff3File *g3f)
+/* resolve links */
+{
+struct gff3AnnRef *g3aRef;
+for (g3aRef = g3f->anns; (g3aRef != NULL) && !gff3FileStopDueToErrors(g3f); g3aRef = g3aRef->next)
+    resolveAnn(g3aRef->ann);
+}
+
+static void resolveFile(struct gff3File *g3f)
+/* do resolution phase of reading a GFF3 file */
+{
+// must sort first, as links point to the first feature
+discontigFeatureFinish(g3f);
+resolveAnns(g3f);
+// reorder just for test reproducibility
+slReverse(&g3f->seqRegions);
+slReverse(&g3f->featureOntologies);
+slReverse(&g3f->attributeOntologies);
+slReverse(&g3f->sourceOntologies);
+slReverse(&g3f->species);
+slReverse(&g3f->seqs);
+}
+
+static struct gff3File *gff3FileNew()
+/* construct a new, empty gff3File object */
+{
+struct gff3File *g3f;
+AllocVar(g3f);
+g3f->byId = hashNew(0);
+g3f->pool = hashNew(0);
+return g3f;
+}
+
+struct gff3File *gff3FileOpen(char *fileName, int maxErr, FILE *errFh)
+/* Parse a GFF3 file into a gff3File object.  If maxErr not zero, then
+ * continue to parse until this number of error have been reached.  A maxErr
+ * less than zero does not stop reports all errors. Write errors to errFh,
+ * if NULL, use stderr. */
+{
+struct gff3File *g3f = gff3FileNew();
+g3f->fileName = gff3FileCloneStr(g3f, fileName);
+g3f->errFh = (errFh != NULL) ? errFh : stderr;
+g3f->maxErr = (maxErr < 0) ? INT_MAX : maxErr;
+parseFile(g3f);
+if (!gff3FileStopDueToErrors(g3f))
+    resolveFile(g3f);
+if (g3f->errCnt > 0)
+    errAbort("GFF3: %d parser errors", g3f->errCnt);
+return g3f;
+}
+
+void gff3FileFree(struct gff3File **g3fPtr)
+/* Free a gff3File object */
+{
+struct gff3File *g3f = *g3fPtr;
+if (g3f != NULL)
+    {
+    hashFree(&g3f->byId);
+    hashFree(&g3f->pool);
+    hashFree(&g3f->seqRegionMap);
+    freeMem(g3f);
+    *g3fPtr = NULL;
+    }
+}
+
+struct gff3Ann *gff3FileFindAnn(struct gff3File *g3f, char *id)
+/* find an annotation record by id, or NULL if not found. */
+{
+return hashFindVal(g3f->byId, id);
+}
+
+static void writeMeta(struct gff3File *g3f, FILE *fh)
+/* write meta data */
+{
+fputs("##gff-version 3\n", fh);
+writeSequenceRegions(g3f, fh);
+writeFeatureOntologies(g3f, fh);
+writeAttributeOntologies(g3f, fh);
+writeSourceOntologies(g3f, fh);
+writeSpecies(g3f, fh);
+writeGenomeBuild(g3f, fh);
+}
+
+void gff3FileWrite(struct gff3File *g3f, char *fileName)
+/* write contents of an GFF3File object to a file */
+{
+FILE *fh = mustOpen(fileName, "w");
+writeMeta(g3f, fh);
+struct gff3AnnRef *g3aRef;
+for (g3aRef = g3f->anns; g3aRef != NULL; g3aRef = g3aRef->next)
+    writeAnn(g3aRef->ann, fh);
+writeFastas(g3f, fh);
+carefulClose(&fh);
+}
+
+int gff3AnnRefLocCmp(const void *va, const void *vb)
+/* sort compare function for two gff3AnnRef objects */
+{
+const struct gff3Ann *a = (*((struct gff3AnnRef **)va))->ann;
+const struct gff3Ann *b = (*((struct gff3AnnRef **)vb))->ann;
+int diff = strcmp(a->seqid, b->seqid);
+if ((diff == 0) && (a->strand != b->strand))
+    {
+    // allow for various types of strand fields. above tests handles both null
+    if (a->strand == NULL)
+        diff = 1;
+    else if (b->strand == NULL)
+        diff = -1;
+    else
+        diff = strcmp(a->strand, b->strand);
+    }
+if (diff == 0)
+    diff = a->start - b->start;
+if (diff == 0)
+    diff = a->end - b->end;
+return diff;
+}
diff --git a/gbtools/src/blatSrc/lib/gfxPoly.c b/gbtools/src/blatSrc/lib/gfxPoly.c
new file mode 100644
index 0000000..d28ef09
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/gfxPoly.c
@@ -0,0 +1,50 @@
+/* gfxPoly - two dimensional polygon. */
+
+#include "common.h"
+#include "gfxPoly.h"
+
+
+struct gfxPoly *gfxPolyNew()
+/* Create new (empty) polygon */
+{
+struct gfxPoly *poly;
+AllocVar(poly);
+return poly;
+}
+
+void gfxPolyFree(struct gfxPoly **pPoly)
+/* Free up resources associated with polygon */
+{
+struct gfxPoly *poly = *pPoly;
+if (poly != NULL)
+    {
+    if (poly->lastPoint != NULL)
+	{
+	poly->lastPoint->next = NULL;
+	slFreeList(&poly->ptList);
+	}
+    freez(pPoly);
+    }
+}
+
+void gfxPolyAddPoint(struct gfxPoly *poly, int x, int y)
+/* Add point to polygon. */
+{
+struct gfxPoint *pt;
+poly->ptCount += 1;
+AllocVar(pt);
+pt->x = x;
+pt->y = y;
+if (poly->ptList == NULL)
+    {
+    poly->ptList = poly->lastPoint = pt;
+    pt->next = pt;
+    }
+else
+    {
+    poly->lastPoint->next = pt;
+    pt->next = poly->ptList;
+    poly->lastPoint = pt;
+    }
+}
+
diff --git a/gbtools/src/blatSrc/lib/gifLabel.c b/gbtools/src/blatSrc/lib/gifLabel.c
new file mode 100644
index 0000000..63c8ea3
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/gifLabel.c
@@ -0,0 +1,101 @@
+/* gifLabel - create labels as GIF files. */
+
+#include "common.h"
+#include "memgfx.h"
+#include "portable.h"
+#include "gifLabel.h"
+
+
+int gifLabelMaxWidth(char **labels, int labelCount)
+/* Return maximum pixel width of labels.  It's ok to have
+ * NULLs in labels array. */
+{
+int width = 0, w, i;
+MgFont *font = mgMediumFont();
+for (i=0; i<labelCount; ++i)
+    {
+    char *label = labels[i];
+    if (label != NULL)
+	{
+	w = mgFontStringWidth(font, labels[i]);
+	if (w > width)
+	    width = w;
+	}
+    }
+width += 2;
+return width;
+}
+
+static struct memGfx *altColorLabels(char **labels, int labelCount, int width)
+/* Return a memory image with alternating colors. */
+{
+struct memGfx *mg = NULL;
+Color c1,c2;
+MgFont *font = mgMediumFont();
+int lineHeight = mgFontLineHeight(font)-1;
+int height = lineHeight * labelCount, i;
+int y = 0;
+
+/* Allocate picture and set up colors. */
+mg = mgNew(width, height);
+c1 = mgFindColor(mg, 0xE0, 0xE0, 0xFF);
+c2 = mgFindColor(mg, 0xFF, 0xC8, 0xC8);
+
+/* Draw text. */
+for (i=labelCount-1; i >= 0; --i)
+    {
+    Color c = ((i&1) ? c2 : c1);
+    mgDrawBox(mg, 0, y, width, lineHeight, c);
+    mgTextRight(mg, 0+1, y+1, width-1, lineHeight, MG_BLACK, font, labels[i]);
+    y += lineHeight;
+    }
+
+return mg;
+}
+
+
+boolean sameGifContents(struct memGfx *n1, struct memGfx *n2)
+/* compare two files and return true if their contents are identical using binary compare */
+{
+if (n1 == NULL) {  return FALSE; }
+if (n2 == NULL) { return FALSE; }
+if (n1->width != n2->width) { return FALSE; }
+if (n1->height != n2->height) { return FALSE; }
+if (n1->colorsUsed != n2->colorsUsed) { return FALSE; }
+if (memcmp(n1->colorMap, n2->colorMap, 256 * 3)!=0) { return FALSE; } /* gif colormaps differ */
+long bytes = (long)n1->width * n1->height;
+if (memcmp(n1->pixels, n2->pixels, bytes)!=0) { return FALSE; } /* gif contents differ */
+return TRUE;
+}
+
+void gifLabelVerticalText(char *fileName, char **labels, int labelCount, 
+	int height)
+/* Make a gif file with given labels.  This will check to see if fileName
+ * exists already and has not changed, and if so do nothing. */
+{
+struct memGfx *straight = altColorLabels(labels, labelCount, height);
+struct memGfx *rotated = mgRotate90(straight);
+struct memGfx *existing = NULL;
+struct tempName tn;
+makeTempName(&tn, "gifLabelVertTemp", ".png");
+mgSavePng(rotated, tn.forCgi, FALSE); 
+rename(tn.forCgi, fileName);
+mgFree(&straight);
+mgFree(&rotated);
+if (existing)
+    mgFree(&existing);
+}
+
+
+#ifdef DEBUG
+void gifTest()
+{
+static char *labels[] = {"cerebellum", "thymus", "breast", "heart",
+			 "stomach", "cartilage", "kidney", "liver",
+			 "lung", "testis", "black hole" };
+int size = gifLabelMaxWidth(labels, ArraySize(labels));
+int gifLabelMaxWidth(char **labels, int labelCount)
+gifLabelVerticalText("../trash/foo.gif", labels, ArraySize(labels), size);
+printf("<IMG SRC=\"../trash/foo.gif\">");
+}
+#endif /* DEBUG */
diff --git a/gbtools/src/blatSrc/lib/gifcodes.h b/gbtools/src/blatSrc/lib/gifcodes.h
new file mode 100644
index 0000000..480ab0d
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/gifcodes.h
@@ -0,0 +1,48 @@
+/*****************************************************************************
+ * Copyright (C) 2000 Jim Kent.  This source code may be freely used         *
+ * for personal, academic, and non-profit purposes.  Commercial use          *
+ * permitted only by explicit agreement with Jim Kent (jim_kent at pacbell.net) *
+ *****************************************************************************/
+struct gif_header
+	{
+	char giftype[6];
+	unsigned char wlo,whi;
+	unsigned char hlo,hhi;
+	unsigned char colpix;	/* flags */
+	unsigned char bgcolor;
+	unsigned char reserved;
+	};
+
+#define COLTAB	0x80
+#define COLMASK 0x70
+#define COLSHIFT 4
+#define PIXMASK 7
+#define COLPIXVGA13 (COLTAB | (5<<COLSHIFT) | 7)
+
+struct gif_image
+	{
+	unsigned char xlo,xhi;
+	unsigned char ylo,yhi;
+	unsigned char wlo,whi;
+	unsigned char hlo,hhi;
+	unsigned char flags;
+	};
+#define ITLV_BIT 0x40
+
+/* Various error codes used by decoder
+ * and my own routines...   It's okay
+ * for you to define whatever you want,
+ * as long as it's negative...  It will be
+ * returned intact up the various subroutine
+ * levels...
+ */
+#define OUT_OF_MEMORY -10
+#define BAD_CODE_SIZE -20
+#define READ_ERROR -1
+#define WRITE_ERROR -2
+#define OPEN_ERROR -3
+#define CREATE_ERROR -4
+#define TOO_HIGH	-5
+
+short gif_compress_data(int min_code_size, unsigned char *pt, long size, FILE *out);
+int gif_decoder(int linewidth);
diff --git a/gbtools/src/blatSrc/lib/gifcomp.c b/gbtools/src/blatSrc/lib/gifcomp.c
new file mode 100644
index 0000000..7aa88f3
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/gifcomp.c
@@ -0,0 +1,304 @@
+/* comprs.c - LZW compression code for GIF */
+
+/*
+ * ABSTRACT:
+ *	The compression algorithm builds a string translation table that maps
+ *	substrings from the input string into fixed-length codes.  These codes
+ *	are used by the expansion algorithm to rebuild the compressor's table
+ *	and reconstruct the original data stream.  In it's simplest form, the
+ *	algorithm can be stated as:
+ *
+ *		"if <w>k is in the table, then <w> is in the table"
+ *
+ *	<w> is a code which represents a string in the table.  When a new
+ *	character k is read in, the table is searched for <w>k.  If this
+ *	combination is found, <w> is set to the code for that combination
+ *	and the next character is read in.  Otherwise, this combination is
+ *	added to the table, the code <w> is written to the output stream and
+ *	<w> is set to k.
+ *
+ *	The expansion algorithm builds an identical table by parsing each
+ *	received code into a prefix string and suffix character.  The suffix
+ *	character is pushed onto the stack and the prefix string translated
+ *	again until it is a single character.  This completes the expansion.
+ *	The expanded code is then output by popping the stack and a new entry
+ *	is made in the table.
+ *
+ *	The algorithm used here has one additional feature.  The output codes
+ *	are variable length.  They start at a specified number of bits.  Once
+ *	the number of codes exceeds the current code size, the number of bits
+ *	in the code is incremented.  When the table is completely full, a
+ *	clear code is transmitted for the expander and the table is reset.
+ *	This program uses a maximum code size of 12 bits for a total of 4096
+ *	codes.
+ *
+ *	The expander realizes that the code size is changing when it's table
+ *	size reaches the maximum for the current code size.  At this point,
+ *	the code size in increased.  Remember that the expander's table is
+ *	identical to the compressor's table at any point in the original data
+ *	stream.
+ *
+ *	The compressed data stream is structured as follows:
+ *		first byte denoting the minimum code size
+ *		one or more counted byte strings. The first byte contains the
+ *		length of the string. A null string denotes "end of data"
+ *
+ *	This format permits a compressed data stream to be embedded within a
+ *	non-compressed context.
+ *
+ * AUTHOR: Steve Wilhite
+ *
+ * REVISION HISTORY:
+ *   Speed tweaked a bit by Jim Kent 8/29/88
+ *
+ */
+
+#include "common.h"
+#include <setjmp.h>
+
+
+#define UBYTE unsigned char
+
+
+#define LARGEST_CODE	4095
+#define TABLE_SIZE	(8*1024)
+
+static UBYTE gif_byte_buff[256+3];               /* Current block */
+static FILE *gif_file;
+
+static unsigned char *gif_wpt;
+static long gif_wcount;
+
+static jmp_buf recover;
+
+static short *prior_codes;
+static short *code_ids;
+static unsigned char *added_chars;
+
+static short code_size;
+static short clear_code;
+static short eof_code;
+static short bit_offset;
+static short max_code;
+static short free_code;
+
+
+static void init_table(short min_code_size)
+{
+code_size = min_code_size + 1;
+clear_code = 1 << min_code_size;
+eof_code = clear_code + 1;
+free_code = clear_code + 2;
+max_code = 1 << code_size;
+
+zeroBytes(code_ids, TABLE_SIZE*sizeof(code_ids[0]));
+}
+
+
+static void flush(size_t n)
+{
+if (fputc(n,gif_file) < 0)
+    {
+    longjmp(recover, -3);
+    }
+if (fwrite(gif_byte_buff, 1, n, gif_file) < n)
+    {
+    longjmp(recover, -3);
+    }
+}
+
+
+static void write_code(short code)
+{
+long temp;
+register short byte_offset; 
+register short bits_left;
+
+byte_offset = bit_offset >> 3;
+bits_left = bit_offset & 7;
+
+if (byte_offset >= 254)
+	{
+	flush(byte_offset);
+	gif_byte_buff[0] = gif_byte_buff[byte_offset];
+	bit_offset = bits_left;
+	byte_offset = 0;
+	}
+
+if (bits_left > 0)
+	{
+	temp = ((long) code << bits_left) | gif_byte_buff[byte_offset];
+	gif_byte_buff[byte_offset] = (UBYTE)temp;
+	gif_byte_buff[byte_offset + 1] = (UBYTE)(temp >> 8);
+	gif_byte_buff[byte_offset + 2] = (UBYTE)(temp >> 16);
+	}
+else
+	{
+	gif_byte_buff[byte_offset] = (UBYTE)code;
+	gif_byte_buff[byte_offset + 1] = (UBYTE)(code >> 8);
+	}
+bit_offset += code_size;
+}
+
+
+/*
+ * Function:
+ *	Compress a stream of data bytes using the LZW algorithm.
+ *
+ * Inputs:
+ *	min_code_size
+ *		the field size of an input value.  Should be in the range from
+ *		1 to 9.
+ *
+ * Returns:
+ *	 0	normal completion
+ *	-1	(not used)
+ *	-2	insufficient dynamic memory
+ *	-3	bad "min_code_size"
+ *	< -3	error status from either the get_byte or put_byte routine
+ */
+static short compress_data(int min_code_size)
+{
+short status;
+short prefix_code;
+short d;
+register int hx;
+register short suffix_char;
+
+status = setjmp(recover);
+
+if (status != 0)
+    {
+    return status;
+    }
+
+bit_offset = 0;
+init_table(min_code_size);
+write_code(clear_code);
+suffix_char = *gif_wpt++;
+gif_wcount -= 1;
+
+prefix_code = suffix_char;
+
+while (--gif_wcount >= 0)
+    {
+    suffix_char = *gif_wpt++;
+    hx = prefix_code ^ suffix_char << 5;
+    d = 1;
+
+    for (;;)
+	{
+	if (code_ids[hx] == 0)
+	    {
+	    write_code(prefix_code);
+
+	    d = free_code;
+
+	    if (free_code <= LARGEST_CODE)
+		{
+		prior_codes[hx] = prefix_code;
+		added_chars[hx] = (UBYTE)suffix_char;
+		code_ids[hx] = free_code;
+		free_code++;
+		}
+
+	    if (d == max_code)
+		{
+		if (code_size < 12)
+		    {
+		    code_size++;
+		    max_code <<= 1;
+		    }
+		else
+		    {
+		    write_code(clear_code);
+		    init_table(min_code_size);
+		    }
+	        }
+
+	    prefix_code = suffix_char;
+	    break;
+	    }
+
+	if (prior_codes[hx] == prefix_code &&
+		added_chars[hx] == suffix_char)
+	    {
+	    prefix_code = code_ids[hx];
+	    break;
+	    }
+
+	hx += d;
+	d += 2;
+	if (hx >= TABLE_SIZE)
+	    hx -= TABLE_SIZE;
+	}
+    }
+
+write_code(prefix_code);
+
+write_code(eof_code);
+
+
+/* Make sure the code buffer is flushed */
+
+if (bit_offset > 0)
+    {
+    int byte_offset = (bit_offset >> 3);
+    if (byte_offset == 255)	/* Make sure we don't write a zero by mistake. */
+        {
+	int bits_left = bit_offset & 7;
+	flush(255);
+	if (bits_left)
+	    {
+	    gif_byte_buff[0] = gif_byte_buff[byte_offset];
+	    flush(1);
+	    }
+	}
+    else
+	{
+	flush((bit_offset + 7)/8);
+	}
+    }
+
+flush(0);				/* end-of-data */
+return 0;
+}
+
+short gif_compress_data(int min_code_size, unsigned char *pt, long size, FILE *out)
+{
+int ret;
+
+/* Make sure min_code_size is reasonable. */
+if (min_code_size < 2 || min_code_size > 9)
+    {
+    if (min_code_size == 1)
+	min_code_size = 2;
+    else
+	return -3;
+    }
+
+/* Store input parameters where rest of routines can use. */
+gif_file = out;
+gif_wpt = pt;
+gif_wcount = size;
+
+ret = -2;	/* out of memory default */
+prior_codes = NULL;
+code_ids = NULL;
+added_chars = NULL;
+if ((prior_codes = (short*)needMem(TABLE_SIZE*sizeof(short))) == NULL)
+	goto OUT;
+if ((code_ids = (short*)needMem(TABLE_SIZE*sizeof(short))) == NULL)
+	goto OUT;
+if ((added_chars = (unsigned char*)needMem(TABLE_SIZE)) == NULL)
+	goto OUT;
+
+ret = compress_data(min_code_size);
+
+OUT:
+gentleFree(prior_codes);
+gentleFree(code_ids);
+gentleFree(added_chars);
+return(ret);
+}
+
diff --git a/gbtools/src/blatSrc/lib/gifdecomp.c b/gbtools/src/blatSrc/lib/gifdecomp.c
new file mode 100644
index 0000000..06c50f7
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/gifdecomp.c
@@ -0,0 +1,391 @@
+/* decode.c - An LZW decoder for GIF
+ * Copyright (C) 1987, by Steven A. Bennett
+ *
+ * Permission is given by the author to freely redistribute and include
+ * this code in any program as long as this credit is given where due.
+ *
+ * In accordance with the above, I want to credit Steve Wilhite who wrote
+ * the code which this is heavily inspired by...
+ *
+ * GIF and 'Graphics Interchange Format' are trademarks (tm) of
+ * Compuserve, Incorporated, an H&R Block Company.
+ *
+ * Release Notes: This file contains a decoder routine for GIF images
+ * which is similar, structurally, to the original routine by Steve Wilhite.
+ * It is, however, somewhat noticably faster in most cases.
+ *
+ */
+
+#include "common.h"
+#include "gifcodes.h"
+
+
+
+/* extern int gif_get_byte()
+ *
+ *   - This external (machine specific) function is expected to return
+ * either the next byte from the GIF file, or a negative number, as
+ * defined in gifcodes.h.
+ */
+extern int gif_get_byte();
+
+/* extern int gif_out_line(pixels, linelen)
+ *     UBYTE pixels[];
+ *     int linelen;
+ *
+ *   - This function takes a full line of pixels (one byte per pixel) and
+ * displays them (or does whatever your program wants with them...).  It
+ * should return zero, or negative if an error or some other event occurs
+ * which would require aborting the decode process...  Note that the length
+ * passed will almost always be equal to the line length passed to the
+ * decoder function, with the sole exception occurring when an ending code
+ * occurs in an odd place in the GIF file...  In any case, linelen will be
+ * equal to the number of pixels passed...
+ */
+extern int gif_out_line();
+
+/* extern int bad_code_count;
+ *
+ * This value is the only other global required by the using program, and
+ * is incremented each time an out of range code is read by the decoder.
+ * When this value is non-zero after a decode, your GIF file is probably
+ * corrupt in some way...
+ */
+int bad_code_count;
+
+#define MAX_CODES   4095
+
+/* Static variables */
+static WORD curr_size;                     /* The current code size */
+static WORD clear;                         /* Value for a clear code */
+static WORD ending;                        /* Value for a ending code */
+static WORD newcodes;                      /* First available code */
+static WORD top_slot;                      /* Highest code for current size */
+static WORD slot;                          /* Last read code */
+
+/* The following static variables are used
+ * for seperating out codes
+ */
+static WORD navail_bytes = 0;              /* # bytes left in block */
+static WORD nbits_left = 0;                /* # bits left in current byte */
+static UBYTE b1;                           /* Current byte */
+static UBYTE gif_byte_buff[256+3];               /* Current block */
+static UBYTE *pbytes;                      /* Pointer to next byte in block */
+
+static long code_mask[13] = {
+     0,
+     0x0001, 0x0003,
+     0x0007, 0x000F,
+     0x001F, 0x003F,
+     0x007F, 0x00FF,
+     0x01FF, 0x03FF,
+     0x07FF, 0x0FFF
+     };
+
+
+/* This function initializes the decoder for reading a new image.
+ */
+static WORD init_exp(size)
+   WORD size;
+   {
+   curr_size = size + 1;
+   top_slot = 1 << curr_size;
+   clear = 1 << size;
+   ending = clear + 1;
+   slot = newcodes = ending + 1;
+   navail_bytes = nbits_left = 0;
+   return(0);
+   }
+
+/* get_next_code()
+ * - gets the next code from the GIF file.  Returns the code, or else
+ * a negative number in case of file errors...
+ */
+static WORD get_next_code()
+   {
+   WORD i, x;
+   unsigned long ret;
+
+   if (nbits_left == 0)
+      {
+      if (navail_bytes <= 0)
+         {
+
+         /* Out of bytes in current block, so read next block
+          */
+         pbytes = gif_byte_buff;
+         if ((navail_bytes = gif_get_byte()) < 0)
+            return(navail_bytes);
+         else if (navail_bytes)
+            {
+            for (i = 0; i < navail_bytes; ++i)
+               {
+               if ((x = gif_get_byte()) < 0)
+                  return(x);
+               gif_byte_buff[i] = x;
+               }
+            }
+         }
+      b1 = *pbytes++;
+      nbits_left = 8;
+      --navail_bytes;
+      }
+
+   ret = b1 >> (8 - nbits_left);
+   while (curr_size > nbits_left)
+      {
+      if (navail_bytes <= 0)
+         {
+
+         /* Out of bytes in current block, so read next block
+          */
+         pbytes = gif_byte_buff;
+         if ((navail_bytes = gif_get_byte()) < 0)
+            return(navail_bytes);
+         else if (navail_bytes)
+            {
+            for (i = 0; i < navail_bytes; ++i)
+               {
+               if ((x = gif_get_byte()) < 0)
+                  return(x);
+               gif_byte_buff[i] = x;
+               }
+            }
+         }
+      b1 = *pbytes++;
+      ret |= b1 << nbits_left;
+      nbits_left += 8;
+      --navail_bytes;
+      }
+   nbits_left -= curr_size;
+   ret &= code_mask[curr_size];
+   return((WORD)(ret));
+   }
+
+
+
+/* WORD decoder(linewidth)
+ *    WORD linewidth;               * Pixels per line of image *
+ *
+ * - This function decodes an LZW image, according to the method used
+ * in the GIF spec.  Every *linewidth* 'characters' (ie. pixels) decoded
+ * will generate a call to gif_out_line(), which is a user specific function
+ * to display a line of pixels.  The function gets it's codes from
+ * get_next_code() which is responsible for reading blocks of data and
+ * seperating them into the proper size codes.  Finally, gif_get_byte() is
+ * the global routine to read the next byte from the GIF file.
+ *
+ * It is generally a good idea to have linewidth correspond to the actual
+ * width of a line (as specified in the Image header) to make your own
+ * code a bit simpler, but it isn't absolutely necessary.
+ *
+ * Returns: 0 if successful, else negative.  (See ERRS.H)
+ *
+ */
+
+static WORD decoder(linewidth,buf,stack,suffix,prefix)
+   WORD linewidth;
+   UBYTE *buf;		/* food for gif_line_out, where the pixels go */
+   UBYTE *stack;	/* Stack for storing pixels backwards */
+   UBYTE *suffix;	/* Suffix table */
+   UWORD *prefix;	/* Prefix linked list */
+   {
+   register UBYTE *sp, *bufptr;
+   register WORD code, fc, oc, bufcnt;
+   WORD c, size, ret;
+
+   /* Initialize for decoding a new image...
+    */
+   if ((size = gif_get_byte()) < 0)
+      return(size);
+   if (size < 2 || 9 < size)
+      return(BAD_CODE_SIZE);
+   init_exp(size);
+
+   /* Initialize in case they forgot to put in a clear code.
+    * (This shouldn't happen, but we'll try and decode it anyway...)
+    */
+   oc = fc = 0;
+
+
+   /* Set up the stack pointer and decode buffer pointer
+    */
+   sp = stack;
+   bufptr = buf;
+   bufcnt = linewidth;
+
+   /* This is the main loop.  For each code we get we pass through the
+    * linked list of prefix codes, pushing the corresponding 'character' for
+    * each code onto the stack.  When the list reaches a single 'character'
+    * we push that on the stack too, and then start unstacking each
+    * character for output in the correct order.  Special handling is
+    * included for the clear code, and the whole thing ends when we get
+    * an ending code.
+    */
+   while ((c = get_next_code()) != ending)
+      {
+
+      /* If we had a file error, return without completing the decode
+       */
+      if (c < 0)
+         {
+         return(c);
+         }
+
+      /* If the code is a clear code, reinitialize all necessary items.
+       */
+      if (c == clear)
+         {
+         curr_size = size + 1;
+         slot = newcodes;
+         top_slot = 1 << curr_size;
+
+         /* Continue reading codes until we get a non-clear code
+          * (Another unlikely, but possible case...)
+          */
+         while ((c = get_next_code()) == clear)
+            ;
+
+         /* If we get an ending code immediately after a clear code
+          * (Yet another unlikely case), then break out of the loop.
+          */
+         if (c == ending)
+            break;
+
+         /* Finally, if the code is beyond the range of already set codes,
+          * (This one had better NOT happen...  I have no idea what will
+          * result from this, but I doubt it will look good...) then set it
+          * to color zero.
+          */
+         if (c >= slot)
+            c = 0;
+
+         oc = fc = c;
+
+         /* And let us not forget to put the char into the buffer... And
+          * if, on the off chance, we were exactly one pixel from the end
+          * of the line, we have to send the buffer to the gif_out_line()
+          * routine...
+          */
+         *bufptr++ = c;
+         if (--bufcnt == 0)
+            {
+            if ((ret = gif_out_line(buf, linewidth)) < 0)
+               {
+               return(ret);
+               }
+            bufptr = buf;
+            bufcnt = linewidth;
+            }
+         }
+      else
+         {
+
+         /* In this case, it's not a clear code or an ending code, so
+          * it must be a code code...  So we can now decode the code into
+          * a stack of character codes. (Clear as mud, right?)
+          */
+         code = c;
+
+         /* Here we go again with one of those off chances...  If, on the
+          * off chance, the code we got is beyond the range of those already
+          * set up (Another thing which had better NOT happen...) we trick
+          * the decoder into thinking it actually got the last code read.
+          * (Hmmn... I'm not sure why this works...  But it does...)
+          */
+         if (code >= slot)
+            {
+            if (code > slot)
+               ++bad_code_count;
+            code = oc;
+            *sp++ = fc;
+            }
+
+         /* Here we scan back along the linked list of prefixes, pushing
+          * helpless characters (ie. suffixes) onto the stack as we do so.
+          */
+         while (code >= newcodes)
+            {
+            *sp++ = suffix[code];
+            code = prefix[code];
+            }
+
+         /* Push the last character on the stack, and set up the new
+          * prefix and suffix, and if the required slot number is greater
+          * than that allowed by the current bit size, increase the bit
+          * size.  (NOTE - If we are all full, we *don't* save the new
+          * suffix and prefix...  I'm not certain if this is correct...
+          * it might be more proper to overwrite the last code...
+          */
+         *sp++ = code;
+         if (slot < top_slot)
+            {
+            suffix[slot] = fc = code;
+            prefix[slot++] = oc;
+            oc = c;
+            }
+         if (slot >= top_slot)
+            if (curr_size < 12)
+               {
+               top_slot <<= 1;
+               ++curr_size;
+               } 
+
+         /* Now that we've pushed the decoded string (in reverse order)
+          * onto the stack, lets pop it off and put it into our decode
+          * buffer...  And when the decode buffer is full, write another
+          * line...
+          */
+         while (sp > stack)
+            {
+            *bufptr++ = *(--sp);
+            if (--bufcnt == 0)
+               {
+               if ((ret = gif_out_line(buf, linewidth)) < 0)
+                  {
+                  return(ret);
+                  }
+               bufptr = buf;
+               bufcnt = linewidth;
+               }
+            }
+         }
+      }
+   ret = 0;
+   if (bufcnt != linewidth)
+      ret = gif_out_line(buf, (linewidth - bufcnt));
+   return(ret);
+   }
+
+/* basically just allocate memory for buffers and tables, and then
+   call Steve B.'s decoder */
+int gif_decoder(int linewidth)
+{
+UBYTE *buf, *stack, *suffix;
+UWORD *prefix;
+int ret;
+
+ret = OUT_OF_MEMORY;
+stack = NULL;
+suffix = NULL;
+prefix = NULL;
+/* stack = suffix = (UBYTE *)prefix = NULL; */
+if ((buf = (UBYTE *)needMem(linewidth + 1)) == NULL)
+	goto OUT;
+if ((stack = (UBYTE *)needMem(MAX_CODES+1)) == NULL)
+	goto OUT;
+if ((suffix = (UBYTE *)needMem(MAX_CODES+1)) == NULL)
+	goto OUT;
+if ((prefix = (UWORD *)needMem((MAX_CODES+1)*sizeof(UWORD) )) == NULL)
+	goto OUT;
+ret = decoder(linewidth,buf,stack,suffix,prefix);
+OUT:
+freeMem(buf);
+freeMem(stack);
+freeMem(prefix);
+freeMem(suffix);
+return(ret);
+}
+
+
+
diff --git a/gbtools/src/blatSrc/lib/gifread.c b/gbtools/src/blatSrc/lib/gifread.c
new file mode 100644
index 0000000..bfa0803
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/gifread.c
@@ -0,0 +1,186 @@
+/* gifread.c - The high level GIF reading routines.  See writegif for the
+   write side.  Also gifdecode.c for lower level GIF reading code. */
+
+#include "common.h"
+#include "gifcodes.h"
+#include "memgfx.h"
+
+
+static struct gif_header gif;
+static struct gif_image gim;
+static int gif_line;
+static char iphase;
+static WORD iy;
+static UBYTE gif_cmap[256*3];
+static FILE *gif_file;
+static struct memGfx *gif_mg;
+static int gif_width, gif_height;
+
+int gif_get_byte()
+/* Get next byte from file for decoder.
+ * return -1 at end of file. */
+{
+return(fgetc(gif_file));
+}
+
+
+int gif_out_line(UBYTE *pixels, int linelen)
+/* Output a line of gif. */
+{
+int y;
+
+y = gif_line;
+if (gim.flags&ITLV_BIT)
+    {
+    y = iy;
+    switch (iphase)
+        {
+        case 0:
+        case 1:
+            iy+=8;
+            break;
+        case 2:
+            iy += 4;
+            break;
+        case 3:
+            iy += 2;
+            break;
+        }
+    if (iy >= gif_height)
+        {
+        switch (iphase)
+            {
+            case 0:
+                iy = 4;
+                break;
+            case 1:
+                iy = 2;
+                break;
+            case 2:
+                iy = 1;
+                break;
+            }
+        iphase++;
+        }
+    }
+gif_line++;
+memcpy(gif_mg->pixels + y*gif_mg->width, pixels, linelen);
+return(0);
+}
+
+
+
+struct memGfx *mgLoadGif(char *name)
+/* Create memory image based on gif file. 
+ * Note this is based on a very old gif reader
+ * that only handles the GIF87a version. 
+ * This is the same that mgSaveGif creates at
+ * least.  This version of gif was always
+ * color mapped. */
+{
+int c;
+char type[7];
+int gif_colors = 0;
+
+gif_line = 0;
+iphase = 0;
+iy = 0;
+gif_mg = NULL;
+gif_file = mustOpen(name, "rb");
+if (fread(&gif, 1, sizeof(gif), gif_file) < sizeof(gif))
+    {
+    goto TRUNCOUT;
+    }
+memcpy(type, gif.giftype, 6);
+type[6] = 0;
+if (!startsWith("GIF", type))
+    {
+    errAbort("Not a good GIF file");
+    goto BADOUT;
+    }
+if (!sameString("GIF87a", type))
+    {
+    errAbort("Gif is version %s, sadly load_gif only speaks version GIF87a", type);
+    goto BADOUT;
+    }
+gif_colors = (1<<((gif.colpix&PIXMASK)+1));
+if (gif.colpix&COLTAB)
+    {
+    int size = gif_colors*3;
+    if (fread(gif_cmap, 1, size, gif_file) < size)
+        goto TRUNCOUT;
+    }
+for (;;)    /* skip over extension blocks and other junk til get ',' */
+    {
+    if ((c = fgetc(gif_file)) == READ_ERROR)
+        goto TRUNCOUT;
+    if (c == ',')
+        break;
+    if (c == ';')    /* semi-colon is end of piccie */
+        goto TRUNCOUT;
+    if (c == '!')    /* extension block */
+        {
+        if ((c = fgetc(gif_file)) == READ_ERROR)    /* skip extension type */
+            goto TRUNCOUT;
+        for (;;)
+            {
+            if ((c = fgetc(gif_file)) == READ_ERROR)
+                goto TRUNCOUT;
+            if (c == 0)    /* zero 'count' means end of extension */
+                break;
+            while (--c >= 0)
+                {
+                if (fgetc(gif_file) == READ_ERROR)
+                    goto TRUNCOUT;
+                }
+            }
+        }
+    }
+if (fread(&gim, 1, sizeof(gim), gif_file) < sizeof(gim))
+    goto TRUNCOUT;
+gif_width = (gim.whi<<8) + gim.wlo;
+gif_height = (gim.hhi<<8) + gim.hlo;
+
+gif_mg = mgNew(gif_width, gif_height);
+
+/* Gif files can have color maps in two places.  Let
+ * the gim color map overwrite the one in the gif header
+ * here. */
+if (gim.flags&COLTAB)
+    {
+    int size;
+    gif_colors = (1<<((gim.flags&PIXMASK)+1));
+    size = gif_colors*3;
+    if (fread(gif_cmap, 1, size, gif_file) < size)
+        goto TRUNCOUT;
+    }
+if (gif_colors > 0)
+    {
+    if (gif_colors > 256)
+       errAbort("Too many colors in %s", name);
+    memcpy(gif_mg->colorMap, gif_cmap, 3*gif_colors);
+    }
+
+switch (gif_decoder(gif_width))
+    {
+    case READ_ERROR:
+    case BAD_CODE_SIZE:
+        goto TRUNCOUT;
+    case OUT_OF_MEMORY:
+	errAbort("out of memory");
+        goto BADOUT;
+    default:
+        break;
+    }
+carefulClose(&gif_file);
+return(gif_mg);
+
+TRUNCOUT:
+errAbort("%s is truncated", name);
+BADOUT:
+carefulClose(&gif_file);
+mgFree(&gif_mg);
+return(NULL);
+}
+
+
diff --git a/gbtools/src/blatSrc/lib/gifwrite.c b/gbtools/src/blatSrc/lib/gifwrite.c
new file mode 100644
index 0000000..76149a1
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/gifwrite.c
@@ -0,0 +1,98 @@
+/* writegif.c - stuff to write out a GIF file.  See also comprs.c */
+
+#ifndef USE_PNG
+#include "common.h"
+#include "memgfx.h"
+#include "gifcodes.h"
+
+
+static char gifsig[] = "GIF87a";
+
+// GIF Graphic Control Extension, for making the background color transparent:
+static struct gif_gce
+    {
+    unsigned char extensionIntroducer, graphicControlLabel, blockSize;
+    unsigned char flags;
+    unsigned char delayTimeLo,delayTimeHi;
+    unsigned char transparentColorIndex;
+    unsigned char blockTerminator;
+    } gce = {0x21, 0xF9, 0x04, // fixed bytes from spec
+	     0x01,             // transparency on (no user input or disposal options)
+	     0x00, 0x00,       // no animation delay time
+	     0x00,             // color index 0 (white) is transparent
+	     0x00};
+
+boolean mgSaveToGif(FILE *gif_file, struct memGfx *screen, boolean useTransparency)
+/* Save GIF to an already open file.
+ * If useTransparency, then the first color in memgfx's colormap/palette is
+ * assumed to be the image background color, and pixels of that color
+ * are made transparent. */
+{
+int i;
+struct gif_header gif;
+struct gif_image gim;
+long gif_wcount;
+
+gif_wcount = (long)screen->width * screen->height;
+zeroBytes(&gif, sizeof(gif));
+strncpy(gif.giftype, gifsig, sizeof(gif.giftype));
+gif.wlo = gim.wlo = ((screen->width)&0xff);
+gif.whi = gim.whi = ((screen->width>>8)&0xff);
+gif.hlo = gim.hlo = ((screen->height)&0xff);
+gif.hhi = gim.hhi = ((screen->height>>8)&0xff);
+gim.xlo = gim.xhi = gim.ylo = gim.yhi = gim.flags = 0;
+gif.colpix = COLPIXVGA13;
+if (fwrite(&gif, sizeof(gif), 1, gif_file ) < 1)
+    goto TRUNCOUT;
+/* write global color map */
+if (fwrite(screen->colorMap, 3, 256, gif_file) < 256)
+    goto TRUNCOUT;
+
+if (useTransparency)
+    if (fwrite(&gce, sizeof(gce), 1, gif_file ) < 1)
+	goto TRUNCOUT;
+
+if (fputc(',', gif_file) < 0) /* comma to start image */
+    goto TRUNCOUT;
+if (fwrite(&gim, sizeof(gim), 1, gif_file) < 1)
+    goto TRUNCOUT;
+fputc(8,gif_file);
+fflush(gif_file);
+i = gif_compress_data(8, (unsigned char*)screen->pixels, gif_wcount, gif_file);
+switch (i)
+    {
+    case 0:
+        break;
+    case -2:
+	warn("Out of memory writing GIF");
+	goto BADOUT;
+    case -3:
+	goto TRUNCOUT;
+    default:
+	warn("Error code %d writing gif", i);
+	goto BADOUT;
+    }
+fputc(';', gif_file); /* end of file for gif */
+return(TRUE);
+TRUNCOUT:
+warn("Disk full writing GIF");
+BADOUT:
+return(FALSE);
+}
+
+void mgSaveGif(struct memGfx *screen, char *name, boolean useTransparency)
+/* Save memory bitmap as a gif.
+ * If useTransparency, then the first color in memgfx's colormap/palette is
+ * assumed to be the image background color, and pixels of that color
+ * are made transparent. */
+{
+FILE *gifFile = mustOpen(name, "wb");
+if (!mgSaveToGif(gifFile, screen, useTransparency))
+    {
+    remove(name);
+    errAbort("Couldn't save %s", name);
+    }
+if (fclose(gifFile) != 0)
+    errnoAbort("fclose failed");
+}
+#endif
diff --git a/gbtools/src/blatSrc/lib/hacTree.c b/gbtools/src/blatSrc/lib/hacTree.c
new file mode 100644
index 0000000..c303cca
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/hacTree.c
@@ -0,0 +1,510 @@
+/* hacTree - Hierarchical Agglomerative Clustering a list of inputs into a binary tree */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "dlist.h"
+#include "hash.h"
+#include "hacTree.h"
+#include "synQueue.h"
+#include "pthreadDoList.h"
+
+static struct hacTree *leafNodesFromItems(const struct slList *itemList, int itemCount,
+					  struct lm *localMem)
+/* Allocate & initialize leaf nodes that contain only items. */
+{
+struct hacTree *leafNodes = lmAlloc(localMem, itemCount * sizeof(struct hacTree));
+int i = 0;
+const struct slList *item = itemList;
+while (item != NULL && i < itemCount)
+    {
+    // needMem zeroes the memory, so initialize only non-NULL stuff.
+    struct hacTree *node = &(leafNodes[i]);
+    if (i < itemCount-1)
+	node->next = &(leafNodes[i+1]);
+    node->itemOrCluster = (struct slList *)item;
+    i++;
+    item = item->next;
+    }
+return leafNodes;
+}
+
+struct sortWrapper
+/* We need to compare nodes' itemOrClusters using cmpF and extraData;
+ * qsort's comparison function doesn't have a way to pass in extraData,
+ * so we need to point to it from each qsort element. */
+{
+    struct hacTree *node;  // contains itemOrCluster to be compared
+    hacCmpFunction *cmpF;  // user-provided itemOrCluster comparison function
+    void *extraData;       // user-provided aux data for cmpF
+};
+
+static int sortWrapCmp(const void *v1, const void *v2)
+/* Unpack sortWrappers and run cmpF on nodes' itemOrClusters with extraData. */
+{
+const struct sortWrapper *w1 = v1, *w2 = v2;
+return w1->cmpF(w1->node->itemOrCluster, w2->node->itemOrCluster, w1->extraData);
+}
+
+static struct sortWrapper *makeSortedWraps(struct hacTree *leafNodes, int itemCount,
+					   struct lm *localMem, hacCmpFunction cmpF,
+					   void *extraData)
+/* Use cmpF and extraData to sort wrapped leaves so that identical leaves will be adjacent. */
+{
+struct sortWrapper *leafWraps = lmAlloc(localMem, itemCount * sizeof(struct sortWrapper));
+int i;
+for (i=0;  i < itemCount;  i++)
+    {
+    leafWraps[i].node = &(leafNodes[i]);
+    leafWraps[i].cmpF = cmpF;
+    leafWraps[i].extraData = extraData;
+    }
+qsort(leafWraps, itemCount, sizeof(struct sortWrapper), sortWrapCmp);
+return leafWraps;
+}
+
+INLINE void initNode(struct hacTree *node, const struct hacTree *left, const struct hacTree *right,
+		     hacDistanceFunction *distF, hacMergeFunction *mergeF, void *extraData, bool distOnly)
+/* Initialize node to have left and right as its children.  Leave parent pointers
+ * alone -- they would be unstable during tree construction. */
+{
+node->left = (struct hacTree *)left;
+node->right = (struct hacTree *)right;
+if (left != NULL && right != NULL)
+    {
+    if (distOnly)
+        {
+	struct slList * el;
+	AllocVar(el);
+        node->childDistance = distF(left->itemOrCluster, right->itemOrCluster, extraData);
+        node->itemOrCluster = el;
+        }
+    else {
+        node->childDistance = distF(left->itemOrCluster, right->itemOrCluster, extraData);
+        node->itemOrCluster = mergeF(left->itemOrCluster, right->itemOrCluster, extraData);
+        }
+    }
+}
+
+INLINE struct hacTree preClusterNodes(const struct sortWrapper *leafWraps, int i, int runLength,
+				      hacDistanceFunction *distF, hacMergeFunction *mergeF,
+				      void *extraData, struct lm *localMem)
+/* Caller has allocated a node, and this returns what to store there:
+ * a recursively constructed cluster of nodes extracted from wrapped
+ * leafNodes (leafWraps) starting at i, for runLength items. */
+{
+struct hacTree ret = {NULL, NULL, NULL, NULL, 0, NULL};
+if (runLength > 2)
+    {
+    struct hacTree *newClusters = lmAlloc(localMem, 2 * sizeof(struct hacTree));
+    int halfLength = runLength/2;
+    newClusters[0] = preClusterNodes(leafWraps, i, halfLength,
+				     distF, mergeF, extraData, localMem);
+    newClusters[1] = preClusterNodes(leafWraps, i+halfLength, runLength-halfLength,
+				     distF, mergeF, extraData, localMem);
+    initNode(&ret, &(newClusters[0]), &(newClusters[1]), distF, mergeF, extraData, FALSE);
+    }
+else if (runLength == 2)
+    {
+    initNode(&ret, leafWraps[i].node, leafWraps[i+1].node, distF, mergeF, extraData, FALSE);
+    }
+else
+    ret = *(leafWraps[i].node);
+return ret;
+}
+
+static struct hacTree *sortAndPreCluster(struct hacTree *leafNodes, int *retItemCount,
+					 struct lm *localMem, hacDistanceFunction *distF,
+					 hacMergeFunction *mergeF, hacCmpFunction *cmpF,
+					 void *extraData)
+/* Use cmpF and extraData to sort wrapped leaf nodes so that identical leaves will be adjacent,
+ * then replace leaves with clusters of identical leaves where possible.  Place new
+ * (hopefully smaller) item count in retItemCount. */
+{
+int itemCount = *retItemCount;
+struct sortWrapper *leafWraps = makeSortedWraps(leafNodes, itemCount, localMem, cmpF, extraData);
+struct hacTree *newLeaves = lmAlloc(localMem, itemCount * sizeof(struct hacTree));
+int i=0, newI=0;
+while (i < itemCount)
+    {
+    int nextRunStart;
+    for (nextRunStart = i+1;  nextRunStart < itemCount; nextRunStart++)
+	if (distF(leafWraps[i].node->itemOrCluster, leafWraps[nextRunStart].node->itemOrCluster,
+		  extraData) != 0)
+	    break;
+    int runLength = nextRunStart - i;
+    newLeaves[newI] = preClusterNodes(leafWraps, i, runLength, distF, mergeF, extraData, localMem);
+    i = nextRunStart;
+    newI++;
+    }
+*retItemCount = newI;
+return newLeaves;
+}
+
+static struct hacTree *pairUpItems(const struct slList *itemList, int itemCount,
+				   int *retPairCount, struct lm *localMem,
+				   hacDistanceFunction *distF, hacMergeFunction *mergeF,
+				   hacCmpFunction *cmpF, void *extraData)
+/* Allocate & initialize leaf nodes and all possible pairings of leaf nodes
+ * which will be our seed clusters.  If cmpF is given, pre-sort the leaf nodes
+ * and pre-cluster identical leaves before generating seed clusters. */
+{
+struct hacTree *leafNodes = leafNodesFromItems(itemList, itemCount, localMem);
+if (cmpF != NULL)
+    leafNodes = sortAndPreCluster(leafNodes, &itemCount, localMem,
+				  distF, mergeF, cmpF, extraData);
+int pairCount = (itemCount == 1) ? 1 : (itemCount * (itemCount-1) / 2);
+struct hacTree *pairPool = lmAlloc(localMem, pairCount * sizeof(struct hacTree));
+if (itemCount == 1)
+    initNode(pairPool, leafNodes, NULL, distF, mergeF, extraData, FALSE);
+else
+    {
+    int i, j, pairIx;
+    for (i=0, pairIx=0;  i < itemCount-1;  i++)
+	for (j=i+1;  j < itemCount;  j++, pairIx++)
+	    initNode(&(pairPool[pairIx]), &(leafNodes[i]), &(leafNodes[j]), distF, mergeF,
+		     extraData, TRUE);
+    }
+*retPairCount = pairCount;
+return pairPool;
+}
+
+struct hacTree *hacTreeFromItems(const struct slList *itemList, struct lm *localMem,
+				 hacDistanceFunction *distF, hacMergeFunction *mergeF,
+				 hacCmpFunction *cmpF, void *extraData)
+/* Using distF, mergeF, optionally cmpF and binary tree operations,
+ * perform a hierarchical agglomerative (bottom-up) clustering of
+ * items.  To free the resulting tree, lmCleanup(&localMem). */
+//
+// Implementation:
+//
+// Create a pool containing all pairs of items (N*(N-1)/2), and build
+// a hierarchical binary tree of items from the bottom up.  In each
+// iteration, first we find the closest pair and swap it into the head
+// of the pool; then we advance the head pointer, so the closest pair
+// now has a stable location in memory.  Next, for all pairs still in
+// the pool, we replace references to the elements of the closest pair
+// with the closest pair itself, but delete half of such pairs because
+// they would be duplicates.  Specifically, we keep pairs that had the
+// left element of the closest pair, and delete pairs that had the
+// right element of the closest pair.  We rescore the pairs that have
+// the closest pair swapped in for an element.  The code to do all
+// this is surprisingly simple -- in the second for loop below.  Note
+// that with each iteration, the pool will reduce in size, by N-2 the
+// first iteration, N-3 the second, and so forth.
+//
+// An example may help: say we start with items A, B, C and D.  Initially
+// the pool contains all pairs:
+//    (A, B)   (A, C)   (A, D)   (B, C)   (B, D)   (C, D)
+//
+// If (A, B) is the closest pair, we pop it from the pool and the pool
+// becomes
+//    (A, C)   (A, D)   (B, C)   (B, D)   (C, D)
+//
+// Now we substitute (A, B) for pool pairs containing A, and delete pool
+// pairs contining B because they would be duplicates of those containing
+// A.  [X] shows where a pair was deleted:
+//
+//    ((A, B), C)  ((A, B), D)  [X]   [X]  (C, D)
+//
+// Now say ((A, B), D) is the closest remaining pair, and is popped from
+// the head of the pool.  We substitute into pairs containing (A, B) and
+// delete pairs containing D.  After the replacement step, the pool is
+// down to a single element:
+//
+//    (((A, B), D), C)   [X]
+{
+if (itemList == NULL)
+    return NULL;
+struct hacTree *root = NULL;
+int itemCount = slCount(itemList);
+int pairCount = 0;
+struct hacTree *leafPairs = pairUpItems(itemList, itemCount, &pairCount, localMem,
+					distF, mergeF, cmpF, extraData);
+int *nodesToDelete = needMem(pairCount * sizeof(int));
+struct hacTree *poolHead = leafPairs;
+int poolLength = pairCount;
+while (poolLength > 0)
+    {
+    // Scan pool for node with lowest childDistance; swap that node w/head
+    int bestIx = 0;
+    double minScore = poolHead[0].childDistance;
+    int i;
+    for (i=1;  i < poolLength;  i++)
+	if (poolHead[i].childDistance < minScore)
+	    {
+	    minScore = poolHead[i].childDistance;
+	    bestIx = i;
+	    }
+    if (bestIx != 0)
+	swapBytes((char *)&(poolHead[0]), (char *)&(poolHead[bestIx]), sizeof(struct hacTree));
+    // Pop the best (lowest-distance) node from poolHead, make it root (for now).
+    root = poolHead;
+    if (root->left && root->right)
+        root->itemOrCluster = mergeF(root->left->itemOrCluster, root->right->itemOrCluster,
+                                     extraData);
+    else if (root->left)
+        root->itemOrCluster = root->left->itemOrCluster;
+    else if (root->right)
+        root->itemOrCluster = root->right->itemOrCluster;
+    poolHead = &(poolHead[1]);
+    poolLength--;
+    // Where root->left is found in the pool, replace it with root.
+    // Where root->right is found, drop that node so it doesn't become
+    // a duplicate of the replacement cases.
+    int numNodesToDelete = 0;
+    for (i=0;  i < poolLength;  i++)
+	{
+	struct hacTree *node = &(poolHead[i]);
+	if (node->left == root->left)
+	    // found root->left; replace node->left with root (merge root with node->right):
+	    initNode(node, root, node->right, distF, mergeF, extraData, FALSE);
+	else if (node->right == root->left)
+	    // found root->left; replace node->right with root (merge root with node->left):
+	    initNode(node, node->left, root, distF, mergeF, extraData, FALSE);
+	else if (node->left == root->right || node->right == root->right)
+	    // found root->right; mark this node for deletion:
+	    nodesToDelete[numNodesToDelete++] = i;
+	}
+    if (numNodesToDelete > 0)
+	{
+	int newPoolLen = nodesToDelete[0];
+	// This will be "next node to delete" for the last marked node:
+	nodesToDelete[numNodesToDelete] = poolLength;
+	for (i = 0;  i < numNodesToDelete;  i++)
+	    {
+	    int nodeToDel = nodesToDelete[i];
+	    int nextNodeToDel = nodesToDelete[i+1];
+	    int blkSize = nextNodeToDel - (nodeToDel+1);
+	    if (blkSize == 0)
+		continue;
+	    struct hacTree *fromNode = &(poolHead[nodeToDel+1]);
+	    struct hacTree *toNode = &(poolHead[newPoolLen]);
+	    memmove(toNode, fromNode, blkSize * sizeof(struct hacTree));
+	    newPoolLen += blkSize;
+	    }
+	poolLength = newPoolLen;
+	}
+    // root now has a stable address, unlike nodes still in the pool, so set parents here:
+    if (root->left != NULL)
+	root->left->parent = root;
+    if (root->right != NULL)
+	root->right->parent = root;
+    }
+// This shouldn't be necessary as long as initNode leaves parent pointers alone,
+// but just in case that changes:
+root->parent = NULL;
+return root;
+}
+
+/** The code from here on down is an alternative implementation that calls the merge
+ ** function and for that matter the distance function much less than the function
+ ** above, and also is multithreaded.  It does seem to produce the same output
+ ** but the algorithm is sufficiently different, at least for now, I'm keeping
+ ** both. */
+
+
+#define distKeySize 64  
+
+static void calcDistKey(void *a, void *b, char key[distKeySize])
+/* Put key for distance in key */
+{
+safef(key, distKeySize, "%p %p", a, b);
+}
+
+void hacTreeDistanceHashAdd(struct hash *hash, void *itemA, void *itemB, double distance)
+/* Add an item to distance hash */
+{
+char key[distKeySize];
+calcDistKey(itemA, itemB, key);
+hashAdd(hash, key, CloneVar(&distance));
+}
+
+double *hacTreeDistanceHashLookup(struct hash *hash, void *itemA, void *itemB)
+/* Look up pair in distance hash.  Returns NULL if not found, otherwise pointer to
+ * distance */
+{
+char key[distKeySize];
+calcDistKey(itemA, itemB, key);
+return hashFindVal(hash, key);
+}
+
+struct hctPair
+/* A pair of hacTree nodes and the distance between them */
+    {
+    struct hctPair *next;  /* Next in list */
+    struct hacTree *a, *b;	   /* The pair of nodes */
+    double distance;	   /* Distance between pair */
+    };
+
+struct distanceWorkerContext
+/* Context for a distance worker */
+    {
+    hacDistanceFunction *distF;	/* Function to call to calc distance */
+    void *extraData;		/* Extra data for that function */
+    };
+
+static void distanceWorker(void *item, void *context)
+/* fill in distance for pair */
+{
+struct hctPair *pair = item;
+struct distanceWorkerContext *dc = context;
+struct hacTree *aHt = pair->a, *bHt = pair->b;
+pair->distance = (dc->distF)((struct slList *)(aHt->itemOrCluster), 
+    (struct slList *)(bHt->itemOrCluster), dc->extraData);
+}
+
+static void precacheMissingDistances(struct dlList *list, struct hash *distanceHash,
+    hacDistanceFunction *distF, void *extraData, int threadCount)
+/* Force computation of all distances not already in hash */
+{
+/* Make up list of all missing distances in pairList */
+struct synQueue *sq = synQueueNew();
+struct hctPair *pairList = NULL, *pair;
+struct dlNode *aNode;
+for (aNode = list->head; !dlEnd(aNode); aNode = aNode->next)
+    {
+    struct hacTree *aHt = aNode->val;
+    struct dlNode *bNode;
+    for (bNode = aNode->next; !dlEnd(bNode); bNode = bNode->next)
+        {
+	struct hacTree *bHt = bNode->val;
+	char key[64];
+	calcDistKey(aHt->itemOrCluster, bHt->itemOrCluster, key);
+	double *pd = hashFindVal(distanceHash, key);
+	if (pd == NULL)
+	     {
+	     AllocVar(pair);
+	     pair->a = aHt;
+	     pair->b = bHt;
+	     slAddHead(&pairList, pair);
+	     synQueuePut(sq, pair);
+	     }
+	}
+    }
+
+/* Parallelize distance calculations */
+struct distanceWorkerContext context = {.distF=distF, .extraData=extraData};
+pthreadDoList(threadCount, pairList, distanceWorker, &context);
+
+for (pair = pairList; pair != NULL; pair = pair->next)
+    {
+    hacTreeDistanceHashAdd(distanceHash, 
+	pair->a->itemOrCluster, pair->b->itemOrCluster, pair->distance);
+    }
+slFreeList(&pairList);
+}
+
+static double pairParallel(struct dlList *list, struct hash *distanceHash, 
+    hacDistanceFunction *distF, void *extraData, int threadCount,
+    struct dlNode **retNodeA, struct dlNode **retNodeB)
+/* Loop through list returning closest two nodes */
+{
+precacheMissingDistances(list, distanceHash, distF, extraData, threadCount);
+struct dlNode *aNode;
+double closestDistance = BIGDOUBLE;
+struct dlNode *closestA = NULL, *closestB = NULL;
+for (aNode = list->head; !dlEnd(aNode); aNode = aNode->next)
+    {
+    struct hacTree *aHt = aNode->val;
+    struct dlNode *bNode;
+    for (bNode = aNode->next; !dlEnd(bNode); bNode = bNode->next)
+        {
+	struct hacTree *bHt = bNode->val;
+	char key[64];
+	safef(key, sizeof(key), "%p %p", aHt->itemOrCluster, bHt->itemOrCluster);
+	double *pd = hashMustFindVal(distanceHash, key);
+	double d = *pd;
+	if (d < closestDistance)
+	    {
+	    closestDistance = d;
+	    closestA = aNode;
+	    closestB = bNode;
+	    }
+	}
+    }
+*retNodeA = closestA;
+*retNodeB = closestB;
+return closestDistance;
+}
+
+static void lmDlAddValTail(struct lm *lm, struct dlList *list, void *val)
+/* Allocate new dlNode out of lm, initialize it with val, and add it to end of list */
+{
+struct dlNode *node;
+lmAllocVar(lm, node);
+node->val = val;
+dlAddTail(list, node);
+}
+
+struct hacTree *hacTreeMultiThread(int threadCount, struct slList *itemList, 
+		    struct lm *localMem, hacDistanceFunction *distF, hacMergeFunction *mergeF,
+		    void *extraData, struct hash *precalcDistanceHash)
+/* Construct hacTree minimizing number of merges called, and doing distance calls
+ * in parallel when possible.   Do a lmCleanup(localMem) to free returned tree. 
+ * The inputs are
+ *	threadCount - number of threads - at least one, recommended no more than 15
+ *	itemList - list of items to tree up.  Format can vary, but must start with a
+ *	           pointer to next item in list.
+ *	localMem - memory pool where hacTree and a few other things are allocated from
+ *	distF - function that calculates distance between two items, passed items and extraData
+ *	mergeF - function that creates a new item in same format as itemList from two passed
+ *	         in items and the extraData.  Typically does average of two input items
+ *	extraData - parameter passed through to distF and mergeF, otherwise unused, may be NULL
+ *	precalcDistanceHash - a hash containing at least some of the pairwise distances
+ *	            between items on itemList, set with hacTreeDistanceHashAdd. 
+ *	            As a side effect this hash will be expanded to include all distances 
+ *	            including those between intermediate nodes. */
+{
+/* Make up a doubly-linked list in 'remaining' with all items in it */
+struct dlList remaining;
+dlListInit(&remaining);
+struct slList *item;
+int count = 0;
+struct hash *distanceHash = (precalcDistanceHash ? precalcDistanceHash : hashNew(0));
+for (item = itemList; item != NULL; item = item->next)
+    {
+    struct hacTree *ht;
+    lmAllocVar(localMem, ht);
+    ht->itemOrCluster = item;
+    lmDlAddValTail(localMem, &remaining, ht);
+    count += 1;
+    }
+
+/* Loop through finding closest and merging until only one node left on remaining. */
+int i;
+for (i=1; i<count; ++i)
+    {
+    /* Find closest pair */
+    struct dlNode *aNode, *bNode;
+    double distance = pairParallel(&remaining, distanceHash, distF, extraData, threadCount,
+	&aNode, &bNode);
+
+    /* Allocated new hacTree item for them and fill it in with a merged value. */
+    struct hacTree *ht;
+    lmAllocVar(localMem, ht);
+    struct hacTree *left = ht->left = aNode->val;
+    struct hacTree *right = ht->right = bNode->val;
+    left->parent = right->parent = ht;
+    ht->itemOrCluster = mergeF(left->itemOrCluster, right->itemOrCluster, extraData);
+    ht->childDistance = distance;
+
+    /* Put merged item onto remaining list before first matching node in pair. */
+    struct dlNode *mergedNode;
+    lmAllocVar(localMem, mergedNode);
+    mergedNode->val = ht;
+    dlAddBefore(aNode, mergedNode);
+
+    /* Remove nodes we merged out */
+    dlRemove(aNode);
+    dlRemove(bNode);
+    }
+
+/* Clean up and go home. */
+if (distanceHash != precalcDistanceHash)
+    hashFree(&distanceHash);
+struct dlNode *lastNode = dlPopHead(&remaining);
+return lastNode->val;
+}
+
diff --git a/gbtools/src/blatSrc/lib/hash.c b/gbtools/src/blatSrc/lib/hash.c
new file mode 100644
index 0000000..770647f
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/hash.c
@@ -0,0 +1,749 @@
+/* Hash.c - implements hashing.  See hash.h for usage comments.
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "localmem.h"
+#include "hash.h"
+#include "obscure.h"
+#include "dystring.h"
+
+
+/*
+ * Hash a string key.  This code is taken from Tcl interpreter. I was borrowed
+ * after discovering a lot of collisions and poor utilization of the table
+ * when hashing accessions.
+ *
+ * This function was compared to Bob Jenkins' lookup2 hash function and
+ * (http://burtleburtle.net/bob/hash/) and Paul Hsieh's SuperFast
+ * hash function (http://www.azillionmonkeys.com/qed/hash.html).
+ * Both of those functions provided better utilization of the table,
+ * but were also more expensive, so the Tcl function was used.
+ * If hashing of binary keys is implemented, SuperFast hash should
+ * be considered.
+ *
+ * for an explanation of this function, see HashStringKey() in the
+ * Tcl source file, generic/tclHash.c, available from
+ * http://tcl.sourceforge.net/.
+ *
+ * The Tcl code is:
+ * Copyright (c) 1991-1993 The Regents of the University of California.
+ * Copyright (c) 1994 Sun Microsystems, Inc.
+ *
+ * See the file "license.terms" (in the Tcl distribution) for complete
+ * license (which is a BSD-style license).
+ *
+ * Since hashCrc() is in use elsewhere, 
+ * a new function hashString() was created for use in hash table.
+ * -- markd
+ */
+bits32 hashString(char *string)
+/* Compute a hash value of a string. */
+{
+char *keyStr = string;
+unsigned int result = 0;
+int c;
+
+while ((c = *keyStr++) != '\0')
+    {
+    result += (result<<3) + c;
+    }
+return result;
+}
+
+bits32 hashCrc(char *string)
+/* Returns a CRC value on string. */
+{
+unsigned char *us = (unsigned char *)string;
+unsigned char c;
+bits32 shiftAcc = 0;
+bits32 addAcc = 0;
+
+while ((c = *us++) != 0)
+    {
+    shiftAcc <<= 2;
+    shiftAcc += c;
+    addAcc += c;
+    }
+return shiftAcc + addAcc;
+}
+
+struct hashEl *hashLookup(struct hash *hash, char *name)
+/* Looks for name in hash table. Returns associated element,
+ * if found, or NULL if not.  If there are multiple entries
+ * for name, the last one added is returned (LIFO behavior).
+ */
+{
+struct hashEl *el = hash->table[hashString(name)&hash->mask];
+while (el != NULL)
+    {
+    if (strcmp(el->name, name) == 0)
+        break;
+    el = el->next;
+    }
+return el;
+}
+
+struct hashEl *hashLookupUpperCase(struct hash *hash, char *name)
+/* Lookup upper cased name in hash. (Assumes all elements of hash
+ * are themselves already in upper case.) */
+{
+char s[256];
+safef(s, sizeof(s), "%s", name);
+touppers(s);
+return hashLookup(hash, s);
+}
+
+
+struct hashEl *hashLookupNext(struct hashEl *hashEl)
+/* Find the next occurance of name that may occur in the table multiple times,
+ * or NULL if not found.  Use hashLookup to find the first occurrence.  Elements
+ * are returned in LIFO order.
+ */
+{
+struct hashEl *el = hashEl->next;
+while (el != NULL)
+    {
+    if (strcmp(el->name, hashEl->name) == 0)
+        break;
+    el = el->next;
+    }
+return el;
+}
+
+struct hashEl *hashAddN(struct hash *hash, char *name, int nameSize, void *val)
+/* Add name of given size to hash (no need to be zero terminated) */
+{
+struct hashEl *el;
+if (hash->lm) 
+    el = lmAlloc(hash->lm, sizeof(*el));
+else
+    AllocVar(el);
+el->hashVal = hashString(name);
+int hashVal = el->hashVal & hash->mask;
+if (hash->lm)
+    {
+    el->name = lmAlloc(hash->lm, nameSize+1);
+    memcpy(el->name, name, nameSize);
+    }
+else
+    el->name = cloneStringZ(name, nameSize);
+el->val = val;
+el->next = hash->table[hashVal];
+hash->table[hashVal] = el;
+hash->elCount += 1;
+if (hash->autoExpand && hash->elCount > (int)(hash->size * hash->expansionFactor))
+    {
+    /* double the size */
+    hashResize(hash, digitsBaseTwo(hash->size));
+    }
+return el;
+}
+
+struct hashEl *hashAdd(struct hash *hash, char *name, void *val)
+/* Add new element to hash table.  If an item with name, already exists, a new
+ * item is added in a LIFO manner.  The last item added for a given name is
+ * the one returned by the hashLookup functions.  hashLookupNext must be used
+ * to find the preceding entries for a name.
+ */
+{
+return hashAddN(hash, name, strlen(name), val);
+}
+
+boolean hashMayRemove(struct hash *hash, char *name)
+/* Remove item of the given name from hash table, if present.
+ * Return true if it was present */
+{
+return (hashRemove(hash, name) != NULL);
+}
+
+void hashMustRemove(struct hash *hash, char *name)
+/* Remove item of the given name from hash table, or error
+ * if not present */
+{
+if (hashRemove(hash, name) == NULL)
+    errAbort("attempt to remove non-existant %s from hash", name);
+}
+
+void freeHashEl(struct hashEl *hel)
+/* Free hash element. Use only on non-local memory version. */
+{
+freeMem(hel->name);
+freeMem(hel);
+}
+
+void *hashRemove(struct hash *hash, char *name)
+/* Remove item of the given name from hash table. 
+ * Returns value of removed item, or NULL if not in the table.
+ * If their are multiple entries for name, the last one added
+ * is removed (LIFO behavior).
+ */
+{
+struct hashEl *hel;
+void *ret;
+struct hashEl **pBucket = &hash->table[hashString(name)&hash->mask];
+for (hel = *pBucket; hel != NULL; hel = hel->next)
+    if (sameString(hel->name, name))
+        break;
+if (hel == NULL)
+    return NULL;
+ret = hel->val;
+if (slRemoveEl(pBucket, hel))
+    {
+    hash->elCount -= 1;
+    if (!hash->lm)
+	freeHashEl(hel);
+    }
+return ret;
+}
+
+struct hashEl *hashAddUnique(struct hash *hash, char *name, void *val)
+/* Add new element to hash table. Squawk and die if not unique */
+{
+if (hashLookup(hash, name) != NULL)
+    errAbort("%s duplicated, aborting", name);
+return hashAdd(hash, name, val);
+}
+
+struct hashEl *hashAddSaveName(struct hash *hash, char *name, void *val, char **saveName)
+/* Add new element to hash table.  Save the name of the element, which is now
+ * allocated in the hash table, to *saveName.  A typical usage would be:
+ *    AllocVar(el);
+ *    hashAddSaveName(hash, name, el, &el->name);
+ */
+{
+struct hashEl *hel = hashAdd(hash, name, val);
+*saveName = hel->name;
+return hel;
+}
+
+struct hashEl *hashStore(struct hash *hash, char *name)
+/* If element in hash already return it, otherwise add it
+ * and return it. */
+{
+struct hashEl *hel;
+if ((hel = hashLookup(hash, name)) != NULL)
+    return hel;
+return hashAdd(hash, name, NULL);
+}
+
+char  *hashStoreName(struct hash *hash, char *name)
+/* If element in hash already return it, otherwise add it
+ * and return it. */
+{
+struct hashEl *hel;
+if (name == NULL)
+    return NULL;
+if ((hel = hashLookup(hash, name)) != NULL)
+    return hel->name;
+return hashAdd(hash, name, NULL)->name;
+}
+
+int hashIntVal(struct hash *hash, char *name)
+/* Return integer value associated with name in a simple 
+ * hash of ints. */
+{
+void *val = hashMustFindVal(hash, name);
+return ptToInt(val);
+}
+
+int hashIntValDefault(struct hash *hash, char *name, int defaultInt)
+/* Return integer value associated with name in a simple 
+ * hash of ints or defaultInt if not found. */
+{
+struct hashEl *hel = hashLookup(hash, name);
+if(hel == NULL)
+    return defaultInt;
+return ptToInt(hel->val);
+}
+
+void *hashMustFindVal(struct hash *hash, char *name)
+/* Lookup name in hash and return val.  Abort if not found. */
+{
+struct hashEl *hel = hashLookup(hash, name);
+if (hel == NULL)
+    errAbort("hashMustFindVal: '%s' not found", name);
+return hel->val;
+}
+
+void *hashFindVal(struct hash *hash, char *name)
+/* Look up name in hash and return val or NULL if not found. */
+{
+struct hashEl *hel = hashLookup(hash, name);
+if (hel == NULL)
+    return NULL;
+return hel->val;
+}
+
+void *hashOptionalVal(struct hash *hash, char *name, void *usual)
+/* Look up name in hash and return val, or usual if not found. */
+{
+struct hashEl *hel = hashLookup(hash, name);
+if (hel == NULL)
+    return usual;
+else
+    return hel->val;
+}
+
+void *hashFindValUpperCase(struct hash *hash, char *name)
+/* Lookup upper cased name in hash and return val or return NULL if not found.
+ * (Assumes all elements of hash are themselves already in upper case.) */
+{
+struct hashEl *hel = hashLookupUpperCase(hash, name);
+if (hel == NULL)
+    return NULL;
+return hel->val;
+}
+
+char *hashMustFindName(struct hash *hash, char *name)
+/* Return name as stored in hash table (in hel->name). 
+ * Abort if not found. */
+{
+struct hashEl *hel = hashLookup(hash, name);
+if (hel == NULL)
+    errAbort("hashMustFindName: '%s' not found", name);
+return hel->name;
+}
+
+struct hashEl *hashAddInt(struct hash *hash, char *name, int val)
+/* Store integer value in hash */
+{
+char *pt = NULL;
+return hashAdd(hash, name, pt + val);
+}
+
+
+void hashIncInt(struct hash *hash, char *name)
+/* Increment integer value in hash */
+{
+struct hashEl *hel = hashLookup(hash, name);
+if (hel == NULL)
+  {
+  hashAddInt(hash, name, 1);
+  }
+else
+  {
+  hel->val = ((char *)hel->val)+1;
+  /* The much simpler ++hel->val works for gnu C, but really adding one to a void pointer
+   * I think is not well defined. */
+  }
+}
+
+long long hashIntSum(struct hash *hash)
+/* Return sum of all the ints in a hash of ints. */
+{
+long long sum = 0;
+int i;
+struct hashEl *hel;
+for (i=0; i<hash->size; ++i)
+    {
+    for (hel = hash->table[i]; hel != NULL; hel = hel->next)
+	{
+	int num = ptToInt(hel->val);
+	sum += (long long)num;
+	}
+    }
+return sum;
+}
+
+struct hash *newHashExt(int powerOfTwoSize, boolean useLocalMem)
+/* Returns new hash table. Uses local memory optionally. */
+{
+struct hash *hash = needMem(sizeof(*hash));
+int memBlockPower = 16;
+if (powerOfTwoSize == 0)
+    powerOfTwoSize = 12;
+assert(powerOfTwoSize <= hashMaxSize && powerOfTwoSize > 0);
+hash->powerOfTwoSize = powerOfTwoSize;
+hash->size = (1<<powerOfTwoSize);
+/* Make size of memory block for allocator vary between
+ * 256 bytes and 64k depending on size of table. */
+if (powerOfTwoSize < 8)
+    memBlockPower = 8;
+else if (powerOfTwoSize < 16)
+    memBlockPower = powerOfTwoSize;
+if (useLocalMem) 
+    hash->lm = lmInit(1<<memBlockPower);
+hash->mask = hash->size-1;
+AllocArray(hash->table, hash->size);
+hash->autoExpand = TRUE;
+hash->expansionFactor = defaultExpansionFactor;   /* Expand when elCount > size*expansionFactor */
+return hash;
+}
+
+void hashResize(struct hash *hash, int powerOfTwoSize)
+/* Resize the hash to a new size */
+{
+int oldHashSize = hash->size;
+struct hashEl **oldTable = hash->table;
+
+if (powerOfTwoSize == 0)
+    powerOfTwoSize = 12;
+assert(powerOfTwoSize <= hashMaxSize && powerOfTwoSize > 0);
+hash->powerOfTwoSize = powerOfTwoSize;
+hash->size = (1<<powerOfTwoSize);
+hash->mask = hash->size-1;
+
+AllocArray(hash->table, hash->size);
+
+int i;
+struct hashEl *hel, *next;
+for (i=0; i<oldHashSize; ++i)
+    {
+    for (hel = oldTable[i]; hel != NULL; hel = next)
+	{
+	next = hel->next;
+	int hashVal = hel->hashVal & hash->mask;
+	hel->next = hash->table[hashVal];
+	hash->table[hashVal] = hel;
+	}
+    }
+/* restore original list order */
+for (i=0; i<hash->size; ++i)
+    {
+    struct hashEl *hel = hash->table[i];
+    if (hel != NULL && hel->next != NULL)	    
+	slReverse(&hash->table[i]);
+    }
+freeMem(oldTable);
+hash->numResizes++;
+}
+
+
+struct hash *hashFromSlNameList(void *list)
+/* Create a hash out of a list of slNames. */
+{
+struct hash *hash = NULL;
+struct slName *namedList = list, *item;
+if (!list)
+    return NULL;
+hash = newHash(0);
+for (item = namedList; item != NULL; item = item->next)
+    hashAdd(hash, item->name, item);
+return hash;
+}
+
+struct hash *hashSetFromSlNameList(void *list)
+/* Create a hashSet (hash with only keys) out of a list of slNames. */
+{
+struct hash *hash = NULL;
+struct slName *namedList = list, *item;
+if (!list)
+    return NULL;
+hash = newHash(0);
+for (item = namedList; item != NULL; item = item->next)
+    hashAdd(hash, item->name, NULL);
+return hash;
+}
+
+void hashTraverseEls(struct hash *hash, void (*func)(struct hashEl *hel))
+/* Apply func to every element of hash with hashEl as parameter. */
+{
+int i;
+struct hashEl *hel;
+for (i=0; i<hash->size; ++i)
+    {
+    for (hel = hash->table[i]; hel != NULL; hel = hel->next)
+	func(hel);
+    }
+}
+
+void hashTraverseVals(struct hash *hash, void (*func)(void *val))
+/* Apply func to every element of hash with hashEl->val as parameter. */
+{
+int i;
+struct hashEl *hel;
+for (i=0; i<hash->size; ++i)
+    {
+    for (hel = hash->table[i]; hel != NULL; hel = hel->next)
+	func(hel->val);
+    }
+}
+
+int hashElCmp(const void *va, const void *vb)
+/* Compare two hashEl by name. */
+{
+const struct hashEl *a = *((struct hashEl **)va);
+const struct hashEl *b = *((struct hashEl **)vb);
+return strcmp(a->name, b->name);
+}
+
+int hashElCmpWithEmbeddedNumbers(const void *va, const void *vb)
+/* Compare two hashEl by name sorting including numbers within name,
+ * suitable for chromosomes, genes, etc. */
+{
+const struct hashEl *a = *((struct hashEl **)va);
+const struct hashEl *b = *((struct hashEl **)vb);
+return cmpStringsWithEmbeddedNumbers(a->name, b->name);
+}
+
+void *hashElFindVal(struct hashEl *list, char *name)
+/* Look up name in hashEl list and return val or NULL if not found. */
+{
+struct hashEl *el;
+for (el = list; el != NULL; el = el->next)
+    {
+    if (strcmp(el->name, name) == 0)
+        return el->val;
+    }
+return NULL;
+}
+
+struct hashEl *hashElListHash(struct hash *hash)
+/* Return a list of all elements of hash.   Free return with hashElFreeList. */
+{
+int i;
+struct hashEl *hel, *dupe, *list = NULL;
+for (i=0; i<hash->size; ++i)
+    {
+    for (hel = hash->table[i]; hel != NULL; hel = hel->next)
+	{
+	dupe = CloneVar(hel);
+	slAddHead(&list, dupe);
+	}
+    }
+return list;
+}
+
+
+void hashElFree(struct hashEl **pEl)
+/* Free hash el list returned from hashListAll.  (Don't use
+ * this internally.) */
+{
+freez(pEl);
+}
+
+void hashElFreeList(struct hashEl **pList)
+/* Free hash el list returned from hashListAll.  (Don't use
+ * this internally. */
+{
+slFreeList(pList);
+}
+
+struct hashCookie hashFirst(struct hash *hash)
+/* Return an object to use by hashNext() to traverse the hash table.
+ * The first call to hashNext will return the first entry in the table. */
+{
+struct hashCookie cookie;
+cookie.hash = hash;
+cookie.idx = 0;
+cookie.nextEl = NULL;
+
+/* find first entry */
+for (cookie.idx = 0;
+     (cookie.idx < hash->size) && (hash->table[cookie.idx] == NULL);
+     cookie.idx++)
+    continue;  /* empty body */
+if (cookie.idx < hash->size)
+    cookie.nextEl = hash->table[cookie.idx];
+return cookie;
+}
+
+struct hashEl* hashNext(struct hashCookie *cookie)
+/* Return the next entry in the hash table, or NULL if no more. Do not modify
+ * hash table while this is being used. */
+{
+/* NOTE: if hashRemove were coded to track the previous entry during the
+ * search and then use it to do the remove, it would be possible to
+ * remove the entry returned by this method */
+struct hashEl *retEl = cookie->nextEl;
+if (retEl == NULL)
+    return NULL;  /* no more */
+
+/* find next entry */
+cookie->nextEl = retEl->next;
+if (cookie->nextEl == NULL)
+    {
+    for (cookie->idx++; (cookie->idx < cookie->hash->size)
+             && (cookie->hash->table[cookie->idx] == NULL); cookie->idx++)
+        continue;  /* empty body */
+    if (cookie->idx < cookie->hash->size)
+        cookie->nextEl = cookie->hash->table[cookie->idx];
+    }
+return retEl;
+}
+
+void* hashNextVal(struct hashCookie *cookie)
+/* Return the next value in the hash table, or NULL if no more. Do not modify
+ * hash table while this is being used. */
+{
+struct hashEl *hel = hashNext(cookie);
+if (hel == NULL)
+    return NULL;
+else
+    return hel->val;
+}
+
+char *hashNextName(struct hashCookie *cookie)
+/* Return the next name in the hash table, or NULL if no more. Do not modify
+ * hash table while this is being used. */
+{
+struct hashEl *hel = hashNext(cookie);
+if (hel == NULL)
+    return NULL;
+else
+    return hel->name;
+}
+
+void freeHash(struct hash **pHash)
+/* Free up hash table. */
+{
+struct hash *hash = *pHash;
+if (hash == NULL)
+    return;
+if (hash->lm)
+    lmCleanup(&hash->lm);
+else
+    {
+    int i;
+    struct hashEl *hel, *next;
+    for (i=0; i<hash->size; ++i)
+	{
+	for (hel = hash->table[i]; hel != NULL; hel = next)
+	    {
+	    next = hel->next;
+	    freeHashEl(hel);
+	    }
+	}
+    }
+freeMem(hash->table);
+freez(pHash);
+}
+
+
+void freeHashAndVals(struct hash **pHash)
+/* Free up hash table and all values associated with it.
+ * (Just calls freeMem on each hel->val) */
+{
+struct hash *hash;
+if ((hash = *pHash) != NULL)
+    {
+    hashTraverseVals(hash, freeMem);
+    freeHash(pHash);
+    }
+}
+
+void hashFreeWithVals(struct hash **pHash, void (freeFunc)())
+/* Free up hash table and all values associated with it. freeFunc is a
+ * function to free an entry, should take a pointer to a pointer to an
+ * entry. */
+{
+struct hash *hash = *pHash;
+if (hash != NULL)
+    {
+    struct hashCookie cookie = hashFirst(hash);
+    struct hashEl *hel;
+    while ((hel = hashNext(&cookie)) != NULL)
+        freeFunc(&hel->val);
+    hashFree(pHash);
+    }
+}
+
+void hashFreeList(struct hash **pList)
+/* Free up a list of hashes. */
+{
+struct hash *el, *next;
+
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    hashFree(&el);
+    }
+*pList = NULL;
+}
+
+static int bucketLen(struct hashEl *hel)
+/* determine how many elements are in a hash bucket */
+{
+int nel = 0;
+for (; hel != NULL; hel = hel->next)
+    nel++;
+return nel;
+}
+
+void hashHisto(struct hash *hash, char *fname)
+/* Output bucket usage counts to a file for producing a histogram  */
+{
+FILE* fh = mustOpen(fname, "w");
+int i;
+
+for (i=0; i<hash->size; ++i)
+    fprintf(fh, "%d\n", bucketLen(hash->table[i]));
+carefulClose(&fh);
+}
+
+void hashPrintStats(struct hash *hash, char *label, FILE *fh)
+/* print statistic about a hash table */
+{
+// count up usage
+int i, occupiedCnt = 0, maxBucket = 0;
+for (i=0; i<hash->size; ++i)
+    {
+    if (hash->table[i] != NULL)
+        occupiedCnt++;
+    int sz = bucketLen(hash->table[i]);
+    maxBucket = max(maxBucket, sz);
+    }
+
+fprintf(fh, "hashTable\t%s\n", label);
+fprintf(fh, "tableSize\t%d\t%d\n", hash->size, hash->powerOfTwoSize);
+fprintf(fh, "numElements\t%d\n", hash->elCount);
+fprintf(fh, "occupied\t%d\t%0.4f\n", occupiedCnt, ((hash->size == 0) ? 0.0 : ((float)occupiedCnt)/hash->size));
+fprintf(fh, "maxBucket\t%d\n", maxBucket);
+fprintf(fh, "numResizes\t%d\n", hash->numResizes);
+fprintf(fh, "\n");
+}
+
+struct hashEl *hashReplace(struct hash *hash, char *name, void *val)
+/* Replace an existing element in hash table, or add it if not present. */
+{
+if (hashLookup(hash, name))
+    hashRemove(hash, name);
+return hashAdd(hash, name, val);
+}
+
+char *hashToRaString(struct hash *hash)
+/* Convert hash to string in ra format. */
+{
+struct hashEl *el, *list = hashElListHash(hash);
+struct dyString *dy = dyStringNew(0);
+slSort(&list, hashElCmp);
+for (el = list; el != NULL; el = el->next)
+   {
+   dyStringAppend(dy, el->name);
+   dyStringAppendC(dy, ' ');
+   dyStringAppend(dy, el->val);
+   dyStringAppendC(dy, '\n');
+   }
+hashElFreeList(&list);
+return dyStringCannibalize(&dy);
+}
+
+int hashNumEntries(struct hash *hash)
+/* count the number of entries in a hash */
+{
+int n = 0, i;
+for (i=0; i<hash->size; ++i)
+    n += bucketLen(hash->table[i]);
+return n;
+}
+
+struct hash *hashFromString(char *string)
+/* parse a whitespace-separated string with tuples in the format name=val or
+ * name="val" to a hash name->val */
+{
+if (string==NULL)
+    return NULL;
+
+struct slPair *keyVals = slPairListFromString(string, TRUE);
+if (keyVals==NULL)
+    return NULL;
+
+struct hash *nameToVal = newHash(0);
+struct slPair *kv;
+for (kv = keyVals; kv != NULL; kv = kv->next)
+    hashAdd(nameToVal, kv->name, kv->val);
+return nameToVal;
+}
+
diff --git a/gbtools/src/blatSrc/lib/hex.c b/gbtools/src/blatSrc/lib/hex.c
new file mode 100644
index 0000000..e5f8aa7
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/hex.c
@@ -0,0 +1,69 @@
+/* Handy hexidecimal functions
+ *   If you don't want to use printf
+ */
+
+/* Copyright (C) 2013 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+
+char hexTab[16] = {'0', '1', '2', '3', '4', '5', '6', '7', 
+	'8', '9', 'a', 'b', 'c', 'd', 'e', 'f', };
+/* Convert 0-15 to a hex char */
+
+
+char nibbleToHex(unsigned char n)
+/* convert nibble to hexidecimal character. 0 <= n <= 15. */
+{
+return hexTab[n];
+}
+
+void byteToHex(unsigned char n, char *hex)
+/* convert byte to hexidecimal characters. 0 <= n <= 255. */
+{
+*hex++ = hexTab[n >> 4];
+*hex++ = hexTab[n & 0xf];
+}
+
+char *byteToHexString(unsigned char n)
+/* convert byte to hexidecimal string. 0 <= n <= 255. */
+{
+char hex[3];
+byteToHex(n, hex);
+hex[2] = 0;
+return cloneString(hex);
+}
+
+/* And the reverse functions: */
+
+char hexToNibble(char n)
+/* convert hexidecimal character to nibble. 0-9a-f. */
+{
+return n - ( n <= '9' ? '0' : ('a'-10) );
+}
+
+
+unsigned char hexToByte(char *hex)
+/* convert byte to hexidecimal characters. 0 <= n <= 255. */
+{
+unsigned char n = hexToNibble(*hex++);
+n <<= 4;
+n += hexToNibble(*hex++);
+return n;
+}
+
+
+void hexBinaryString(unsigned char *in, int inSize, char *out, int outSize)
+/* Convert possibly long binary string to hex string.
+ * Out size needs to be at least 2x inSize+1 */
+{
+assert(inSize * 2 +1 <= outSize);
+while (--inSize >= 0)
+    {
+    unsigned char c = *in++;
+    *out++ = hexTab[c>>4];
+    *out++ = hexTab[c&0xf];
+    }
+*out = 0;
+}
+
diff --git a/gbtools/src/blatSrc/lib/histogram.c b/gbtools/src/blatSrc/lib/histogram.c
new file mode 100644
index 0000000..7da7679
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/histogram.c
@@ -0,0 +1,270 @@
+/* histogram function for data array in memory	*/
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "histogram.h"
+
+
+static unsigned autoScale(float *values, size_t N, float *binSize,
+	unsigned *binCount, float *minValue, float *min, float *max)
+/*	determine binSize, binCount, minValue for values[N]
+ *	If any of those are given, use them instead of calculating.
+ *	A given minValue means ignore data below that.
+ *	NAN's for binSize or minValue are the signals to not use them.
+ *	non-zero for binCount to use it.  NOTE: binCount is actually one
+ *	too high to get the minimum and maximum values in the first and
+ *	last (binCount-1) bins correctly.
+ */
+{
+float minFound = INFINITY;
+float maxFound = -1.0 * INFINITY;
+float range = 0.0;
+unsigned count = 0;
+unsigned bins = DEFAULT_BIN_COUNT;
+size_t i;
+boolean findMinMax = FALSE;
+
+if ( (*min == 0.0) && (*max == 0.0) )
+    findMinMax = TRUE;
+else
+    {
+    minFound = *min;
+    maxFound = *max;
+    }
+
+if (isnan(*minValue))
+    {				/*	minValue is not specified	*/
+    for (i = 0; i < N; ++i)
+	{
+	if (!isnan(values[i]))
+	    {
+	    if (findMinMax)
+		{
+		++count;
+		if (values[i] < minFound) minFound = values[i];
+		if (values[i] > maxFound) maxFound = values[i];
+		}
+	    else
+		{
+		if ( (values[i] < *max) && (values[i] > *min) ) ++count;
+		}
+	    }
+	}
+    }
+else
+    {
+    minFound = *minValue;		/*	use given minValue	*/
+    for (i = 0; i < N; ++i)
+	{
+	if ((!isnan(values[i])) && (values[i] >= minFound))
+	    {
+	    if (findMinMax)
+		{
+		++count;
+		if (values[i] > maxFound) maxFound = values[i];
+		}
+	    else
+		{
+		if ( (values[i] < *max) && (values[i] > *min) ) ++count;
+		}
+	    }
+
+	}
+    }
+
+if (count > 0)
+    {
+    /*	if the caller asked us to find min,max, return them	*/
+    if (findMinMax)
+	{
+	*min = minFound;
+	*max = maxFound;
+	}
+
+    /*	If the caller did not specify a minValue, return it	*/
+    if (isnan(*minValue))
+	*minValue = minFound;
+
+    range = maxFound - minFound;
+
+    /*	if they gave us a binCount, use it	*/
+    if (*binCount > 0)
+	bins = *binCount;
+    else
+	*binCount = bins;
+
+    if ( (range > 0.0) && (bins > 1))
+	{
+	/*  binSize is calculated on (bins - 1) to allow the minimum value
+	 *  to be in the middle of the first bin, and the highest value to be
+	 *	in the middle of the last bin
+	 */
+	if (isnan(*binSize))
+	    *binSize = range / (bins - 1);
+
+	if (*binSize > 0.0)
+	    return count;
+	else
+	    return 0;	/*	did not work	*/
+	}
+    }
+return 0;	/*	did not work	*/
+}	/*	static unsigned autoScale()	*/
+
+void freeHistoGram(struct histoResult **histoResults)
+/*      free the histoResults list	*/
+{
+if (histoResults && *histoResults)
+    {
+    struct histoResult *hr, *next;
+
+    for (hr = *histoResults; hr; hr = next)
+        {
+        next = hr->next;
+        freeMem(hr->binCounts);
+        freeMem(hr->pValues);
+        freeMem(hr);
+        }
+    *histoResults = NULL;
+    }
+}
+
+struct histoResult *histoGram(float *values, size_t N, float binSize,
+	unsigned binCount, float minValue, float min, float max,
+	struct histoResult *accumHisto)
+/*	construct histogram of data in values[N] array.  The extra
+ *	options of binSize, binCount, minValue, min, max are optional.
+ *	Run autoScaling when min == max == 0.0
+ *	Defaults for binSize, binCount and minValue can be given even
+ *	when auto-scaling, or NAN's for the floats, or 0 for the
+ *	binCount to determine them too.
+ *	When they are specified they will be used in place of auto
+ *	scaled determined values.  If the min and max of the data is
+ *	known, pass those in on min,max to aid the calculation of auto
+ *	scaled values.  NAN's can be in the values[N] array and will be
+ *	ignored.
+ *	NOTE: when giving a binCount, it is actually one
+ *	higher to get the minimum and maximum values in the first and
+ *	last (binCount-1) bins correctly.  The resulting histogram will
+ *	appear to be (binCount-1) number of bins.
+ *	When given a pointer to accumHisto, use that existing histo gram
+ *	and continue accumulations in it.
+ */
+{
+float autoBinSize = NAN;	/*	pass NAN's to cause auto scaling */
+float autoMinValue = NAN;
+float range = 0.0;
+unsigned autoBinCount = 0;
+unsigned autoValueCount = 0;
+boolean autoScaling = FALSE;
+unsigned valueCount = 0;
+unsigned i;			/*	array index	*/
+struct histoResult *hr;
+unsigned missed = 0;
+
+if (N == 0)
+    return NULL;	/*	we don't work on zero number of values	*/
+
+if (accumHisto)		/*	if accumulating in existing histogram	*/
+    {			/*	use its parameters as the scaling values */
+    autoBinCount = accumHisto->binCount;
+    autoBinSize = accumHisto->binSize;
+    autoMinValue = accumHisto->binZero;
+    autoScaling = FALSE;
+    range = autoBinSize * (autoBinCount - 1);
+    valueCount = accumHisto->count;
+    }
+else
+    {
+/*	Caller may give us a range to work within	*/
+if ( (0.0 == min) && (0.0 == max) )
+    autoScaling = TRUE;
+else
+    {
+    range = max - min;
+    if (range == 0.0)
+	return NULL;	/*	caller gave us equal min, max !	*/
+    }
+
+/*	Caller may give us any of the binCount, binSize, minValue */
+if (binCount > 1)
+    autoBinCount = binCount;
+else if (!autoScaling)
+    autoBinCount = DEFAULT_BIN_COUNT;
+
+if (!isnan(binSize))
+    autoBinSize = binSize;
+else if (!autoScaling)
+    autoBinSize = range / (autoBinCount - 1);
+
+if (!isnan(minValue))
+    autoMinValue = minValue;
+else if (!autoScaling)
+    autoMinValue = min;
+
+if (autoScaling)
+    {
+    autoValueCount = autoScale(values, N, &autoBinSize,
+			&autoBinCount, &autoMinValue, &min, &max);
+    if (autoValueCount == 0)
+	return NULL;	/*	no result !	*/
+    }
+else
+    autoValueCount = N;
+    }
+
+if (accumHisto)		/*	if accumulating in existing histogram	*/
+    hr = accumHisto;
+else
+    {
+    AllocVar(hr);
+    AllocArray(hr->binCounts,autoBinCount);
+    AllocArray(hr->pValues,autoBinCount);
+    }
+
+for (i = 0; i < N; ++i)
+    {
+    if (!isnan(values[i]) && (values[i] >= autoMinValue))
+	{
+	if ( (values[i] <= max) && (values[i] >= min) )
+	    {
+	    float f = values[i] - autoMinValue;
+	    int inx = (int) floor(f / autoBinSize);
+
+	    if ( (inx >= 0) && (inx < autoBinCount))
+		{
+		++valueCount;
+		++hr->binCounts[inx];
+		}
+	    else
+		++missed;
+	    }
+	    else
+		++missed;
+	}
+	else
+	    ++missed;
+    }	/*	for (i = 0; i < N; ++i)	*/
+
+if (accumHisto)		/*	if accumulating in existing histogram	*/
+    hr->count = valueCount;	/*	only this is new	*/
+else
+    {
+    hr->binSize = autoBinSize;
+    hr->binCount = autoBinCount;
+    hr->count = valueCount;
+    hr->binZero = autoMinValue;
+    }
+
+for (i = 0; i < autoBinCount; ++i)
+    {
+    if (hr->binCounts[i] > 0)
+	hr->pValues[i] = (float) hr->binCounts[i] / (float) valueCount;
+    else
+	hr->pValues[i] = 0.0;
+    }
+
+return hr;
+}
diff --git a/gbtools/src/blatSrc/lib/hmac.c b/gbtools/src/blatSrc/lib/hmac.c
new file mode 100644
index 0000000..7eb15a1
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/hmac.c
@@ -0,0 +1,65 @@
+/* Calculate an openssl keyed-hash message authentication code (HMAC) */
+// You may use other openssl hash engines. e.g EVP_md5(), EVP_sha224,
+// EVP_sha512, etc
+// Be careful of the length of string with the choosen hash engine.
+// SHA1 needed 20 characters, MD5 needed 16 characters.
+// Change the length accordingly with your choosen hash engine
+
+/* Copyright (C) 2013 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "config.h"
+
+#ifdef USE_SSL 
+#include "openssl/hmac.h"
+#include "openssl/evp.h"
+#include "common.h"
+
+char *hmacSha1(char *key, char *data)
+/* Calculate a openssl SHA1 keyed-hash message authentication code (HMAC) */
+{
+unsigned char* digest;
+digest=HMAC(EVP_sha1(), key, strlen(key), (unsigned char*)data, strlen(data), NULL, NULL);
+char hmacStr[40];
+int i;
+for(i = 0; i < 20; i++)
+    sprintf(&hmacStr[i*2], "%02x", (unsigned int)digest[i]);
+return cloneStringZ(hmacStr, sizeof(hmacStr));
+}
+
+char *hmacMd5(char *key, char *data)
+/* Calculate a openssl MD5 keyed-hash message authentication code (HMAC) */
+{
+unsigned char* digest;
+digest=HMAC(EVP_md5(), key, strlen(key), (unsigned char*)data, strlen(data), NULL, NULL);
+//printf("Raw mdr digest: %s\n", digest);
+char hmacStr[32];
+int i;
+for(i = 0; i < 16; i++)
+    sprintf(&hmacStr[i*2], "%02x", (unsigned int)digest[i]);
+return cloneStringZ(hmacStr, sizeof(hmacStr));
+}
+
+#else // --------- no USE_SSL ==> errAbort with message that openssl is required --------------
+
+#include "common.h"
+#include "errAbort.h"
+#define NEED_OPENSSL "kent/src must be recompiled with openssl libs and USE_SSL=1 in order for this to work."
+
+char *hmacSha1(char *key, char *data)
+/* This is just a warning that appears in the absence of USE_SSL. Real
+ * implementation is above! */
+{
+errAbort(NEED_OPENSSL);
+return NULL;
+}
+
+char *hmacMd5(char *key, char *data)
+/* This is just a warning that appears in the absence of USE_SSL. Real
+ * implementation is above! */
+{
+errAbort(NEED_OPENSSL);
+return NULL;
+}
+
+#endif
diff --git a/gbtools/src/blatSrc/lib/hmmPfamParse.c b/gbtools/src/blatSrc/lib/hmmPfamParse.c
new file mode 100644
index 0000000..3b38974
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/hmmPfamParse.c
@@ -0,0 +1,194 @@
+/* hmmpfamParse - Parse hmmpfam files.. */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "linefile.h"
+#include "errAbort.h"
+#include "spacedColumn.h"
+#include "hmmPfamParse.h"
+
+
+void hpfModelFree(struct hpfModel **pMod)
+/* Free memory associated with hpfModel */
+{
+struct hpfModel *mod = *pMod;
+if (mod != NULL)
+    {
+    freeMem(mod->name);
+    freeMem(mod->description);
+    slFreeList(&mod->domainList);
+    freez(pMod);
+    }
+}
+
+void hpfModelFreeList(struct hpfModel **pList)
+/* Free a list of dynamically allocated hpfModel's */
+{
+struct hpfModel *el, *next;
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    hpfModelFree(&el);
+    }
+*pList = NULL;
+}
+
+
+void hpfResultFree(struct hpfResult **pHr)
+/* Free memory associated with hpfResult */
+{
+struct hpfResult *hr = *pHr;
+if (hr != NULL)
+    {
+    freeMem(hr->name);
+    hpfModelFreeList(&hr->modelList);
+    freez(pHr);
+    }
+}
+
+void hpfResultFreeList(struct hpfResult **pList)
+/* Free a list of dynamically allocated hpfResult's */
+{
+struct hpfResult *el, *next;
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    hpfResultFree(&el);
+    }
+*pList = NULL;
+}
+
+void parseErr(struct lineFile *lf, char *format, ...)
+/* Print out a parse error message. */
+{
+va_list args;
+va_start(args, format);
+vaWarn(format, args);
+va_end(args);
+errAbort("line %d of %s", lf->lineIx, lf->fileName);
+}
+
+char *needLineStartingWith(struct lineFile *lf, char *start, int maxCount)
+/* Get next line that starts as so */
+{
+char *line = lineFileSkipToLineStartingWith(lf, start, maxCount);
+if (line == NULL)
+     parseErr(lf, "Missing line starting with \"%s\"", start);
+return line;
+}
+
+void spacedColumnFatten(struct spacedColumn *colList)
+/* Make columns extend all the way to the next column. */
+{
+struct spacedColumn *col, *nextCol;
+for (col = colList; col != NULL; col = nextCol)
+    {
+    nextCol = col->next;
+    if (nextCol == NULL)
+        break;
+    col->size = nextCol->start - col->start - 1;
+    }
+}
+
+struct hpfModel *hpfFindResultInModel(struct hpfResult *hr, char *modName)
+/* Look for named result in model. */
+{
+struct hpfModel *mod;
+for (mod = hr->modelList; mod != NULL; mod = mod->next)
+    if (sameString(mod->name, modName))
+	break;
+return mod;
+}
+
+struct hpfResult *hpfNext(struct lineFile *lf)
+/* Parse out next record in hmmpfam result file. */
+{
+/* Seek to first line that starts with "Query sequence:" and parse name out of it. */
+char *queryPat = "Query sequence: ";
+char *line = lineFileSkipToLineStartingWith(lf, queryPat, 100);
+if (line == NULL)
+    return NULL;
+line += strlen(queryPat);
+char *query = cloneString(nextWord(&line));
+if (query == NULL)
+    parseErr(lf, "Missing sequence name");
+
+/* Seek to start of model list, figuring out width of fields we need in the process. */
+needLineStartingWith(lf, "Scores for sequence family", 10);
+needLineStartingWith(lf, "Model ", 2);
+char *template = needLineStartingWith(lf, "----", 1);
+struct spacedColumn *colList = spacedColumnFromSample(template);
+spacedColumnFatten(colList);
+int colCount = slCount(colList);
+if (colCount < 5)
+    parseErr(lf, "Expecting at least 5 columns");
+
+/* Parse out all the models. */
+struct hpfResult *hr;
+AllocVar(hr);
+hr->name = query;
+for (;;)
+    {
+    lineFileNeedNext(lf, &line, NULL);
+    line = skipLeadingSpaces(line);
+    if (line[0] == 0)
+        break;
+    if (startsWith("[no hits above thresholds]", line))
+        break;
+    char *row[colCount];
+    if (!spacedColumnParseLine(colList, line, row))
+        parseErr(lf, "short line");
+    struct hpfModel *mod;
+    AllocVar(mod);
+    mod->name = cloneString(row[0]);
+    mod->description = cloneString(row[1]);
+    mod->score = lineFileNeedDouble(lf, row, 2);
+    mod->eVal = lineFileNeedDouble(lf, row, 3);
+    slAddTail(&hr->modelList, mod);
+    }
+slFreeList(&colList);
+
+/* Skip over to the section on domains, figuriong out column widths while we're at it. */
+needLineStartingWith(lf, "Parsed for domains:", 10);
+needLineStartingWith(lf, "Model ", 2);
+template = needLineStartingWith(lf, "----", 1);
+colList = spacedColumnFromSample(template);
+colCount = slCount(colList);
+if (colCount < 8)
+    parseErr(lf, "Expecting at least 8 columns.");
+struct spacedColumn *col2 = colList->next;
+colList->size = col2->start - 1;
+
+/* Parse out all the domains. */
+for (;;)
+    {
+    lineFileNeedNext(lf, &line, NULL);
+    line = skipLeadingSpaces(line);
+    if (line[0] == 0)
+        break;
+    if (startsWith("[no hits above thresholds]", line))
+        break;
+    char *row[colCount];
+    if (!spacedColumnParseLine(colList, line, row))
+        parseErr(lf, "short line");
+    struct hpfModel *mod = hpfFindResultInModel(hr, row[0]);
+    if (mod == NULL)
+        parseErr(lf, "Model %s in domain section but not model section", row[0]);
+    struct hpfDomain *dom;
+    AllocVar(dom);
+    dom->qStart = lineFileNeedNum(lf, row, 2) - 1;
+    dom->qEnd = lineFileNeedNum(lf, row, 3);
+    dom->hmmStart = lineFileNeedNum(lf, row, 4) - 1;
+    dom->hmmEnd = lineFileNeedNum(lf, row, 5);
+    dom->score = lineFileNeedDouble(lf, row, 6);
+    dom->eVal = lineFileNeedDouble(lf, row, 7);
+    slAddTail(&mod->domainList, dom);
+    }
+slFreeList(&colList);
+if (!lineFileSkipToLineStartingWith(lf, "//", 10000000))
+    parseErr(lf, "Expecting //");
+return hr;
+}
+
diff --git a/gbtools/src/blatSrc/lib/hmmstats.c b/gbtools/src/blatSrc/lib/hmmstats.c
new file mode 100644
index 0000000..412ebc9
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/hmmstats.c
@@ -0,0 +1,48 @@
+/* hmmstats.c - Stuff for doing statistical analysis in general and 
+ * hidden Markov models in particular. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "hmmstats.h"
+
+
+int scaledLog(double val)
+/* Return scaled log of val. */
+{
+return round(logScaleFactor * log(val));
+}
+
+double oneOverSqrtTwoPi = 0.39894228;
+
+double simpleGaussean(double x)
+/* Gaussean distribution with standard deviation 1 and mean 0. */
+{
+return oneOverSqrtTwoPi * exp(-0.5*x*x );
+}
+
+double gaussean(double x, double mean, double sd)
+/* Gaussean distribution with mean and standard deviation at point x  */
+{
+x -= mean;
+x /= sd;
+return oneOverSqrtTwoPi * exp(-0.5*x*x) / sd;
+}
+
+double calcVarianceFromSums(double sum, double sumSquares, bits64 n)
+/* Calculate variance. */
+{
+double var = sumSquares - sum*sum/n;
+if (n > 1)
+    var /= n-1;
+return var;
+}
+
+double calcStdFromSums(double sum, double sumSquares, bits64 n)
+/* Calculate standard deviation. */
+{
+return sqrt(calcVarianceFromSums(sum, sumSquares, n));
+}
+
+
diff --git a/gbtools/src/blatSrc/lib/htmlPage.c b/gbtools/src/blatSrc/lib/htmlPage.c
new file mode 100644
index 0000000..9d13c95
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/htmlPage.c
@@ -0,0 +1,1851 @@
+/* Copyright (C) 2014 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+/* htmlPage - stuff to read, parse, and submit  htmlPages and forms. 
+ *
+ * typical usage is:
+ *   struct htmlPage *page = htmlPageGet(url);
+ *   htmlPageValidateOrAbort(page);
+ *   var = htmlPageGetVar(page, page->forms, "org");
+ *   if (var != NULL)
+ *      printf("Organism = var->org);
+ *   htmlPageSetVar(page, page->forms, "org", "Human");
+ *   newPage = htmlPageFromForm(page, page->forms, "submit", "Go");
+ */
+
+#include "common.h"
+#include "errAbort.h"
+#include "errCatch.h"
+#include "memalloc.h"
+#include "linefile.h"
+#include "hash.h"
+#include "dystring.h"
+#include "cheapcgi.h"
+#include "obscure.h"
+#include "filePath.h"
+#include "net.h"
+#include "htmlPage.h"
+
+
+void htmlStatusFree(struct htmlStatus **pStatus)
+/* Free up resources associated with status */
+{
+struct htmlStatus *status = *pStatus;
+if (status != NULL)
+    {
+    freeMem(status->version);
+    freez(pStatus);
+    }
+}
+
+void htmlStatusFreeList(struct htmlStatus **pList)
+/* Free a list of dynamically allocated htmlStatus's */
+{
+struct htmlStatus *el, *next;
+
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    htmlStatusFree(&el);
+    }
+*pList = NULL;
+}
+
+void htmlCookieFree(struct htmlCookie **pCookie)
+/* Free memory associated with cookie. */
+{
+struct htmlCookie *cookie = *pCookie;
+if (cookie != NULL)
+    {
+    freeMem(cookie->name);
+    freeMem(cookie->value);
+    freeMem(cookie->domain);
+    freeMem(cookie->path);
+    freeMem(cookie->expires);
+    freez(pCookie);
+    }
+}
+
+void htmlCookieFreeList(struct htmlCookie **pList)
+/* Free a list of dynamically allocated htmlCookie's */
+{
+struct htmlCookie *el, *next;
+
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    htmlCookieFree(&el);
+    }
+*pList = NULL;
+}
+
+struct htmlCookie *htmlCookieFileRead(char *fileName)
+/* Read cookies from a line oriented file.  First word in line
+ * is the cookie name, the rest of the line the cookie value. */
+{
+struct lineFile *lf = lineFileOpen(fileName, TRUE);
+struct htmlCookie *list = NULL, *cookie;
+char *line, *word;
+while (lineFileNextReal(lf, &line))
+    {
+    word = nextWord(&line);
+    line = skipLeadingSpaces(line);
+    if (line == NULL)
+        errAbort("Missing cookie value line %d of %s", lf->lineIx, lf->fileName);
+    AllocVar(cookie);
+    cookie->name = cloneString(word);
+    cookie->value = cloneString(line);
+    slAddHead(&list, cookie);
+    }
+lineFileClose(&lf);
+slReverse(&list);
+return list;
+}
+
+static void cookieOutput(struct dyString *dy, struct htmlCookie *cookieList)
+/* Write cookies to dy. */
+{
+struct htmlCookie *cookie;
+if (cookieList != NULL)
+    {
+    dyStringAppend(dy, "Cookie:");
+    for (cookie = cookieList; cookie != NULL; cookie = cookie->next)
+	{
+	if (cookie != cookieList)
+	    dyStringAppendC(dy, ';');
+	dyStringAppendC(dy, ' ');
+	dyStringAppend(dy, cookie->name);
+	dyStringAppendC(dy, '=');
+	dyStringAppend(dy, cookie->value);
+	}
+    dyStringAppend(dy, "\r\n");
+    }
+}
+
+
+void htmlAttributeFree(struct htmlAttribute **pAttribute)
+/* Free up resources associated with attribute. */
+{
+struct htmlAttribute *att = *pAttribute;
+if (att != NULL)
+    {
+    freeMem(att->name);
+    freeMem(att->val);
+    freez(pAttribute);
+    }
+}
+
+void htmlAttributeFreeList(struct htmlAttribute **pList)
+/* Free a list of dynamically allocated htmlAttribute's */
+{
+struct htmlAttribute *el, *next;
+
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    htmlAttributeFree(&el);
+    }
+*pList = NULL;
+}
+
+void htmlTagFree(struct htmlTag **pTag)
+/* Free up resources associated with tag. */
+{
+struct htmlTag *tag = *pTag;
+if (tag != NULL)
+    {
+    htmlAttributeFreeList(&tag->attributes);
+    freeMem(tag->name);
+    freez(pTag);
+    }
+}
+
+void htmlTagFreeList(struct htmlTag **pList)
+/* Free a list of dynamically allocated htmlTag's */
+{
+struct htmlTag *el, *next;
+
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    htmlTagFree(&el);
+    }
+*pList = NULL;
+}
+
+void htmlFormVarFree(struct htmlFormVar **pVar)
+/* Free up resources associated with form variable. */
+{
+struct htmlFormVar *var = *pVar;
+if (var != NULL)
+    {
+    freeMem(var->curVal);
+    slFreeList(&var->values);
+    slFreeList(&var->tags);
+    freez(pVar);
+    }
+}
+
+void htmlFormVarFreeList(struct htmlFormVar **pList)
+/* Free a list of dynamically allocated htmlFormVar's */
+{
+struct htmlFormVar *el, *next;
+
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    htmlFormVarFree(&el);
+    }
+*pList = NULL;
+}
+
+
+void htmlFormFree(struct htmlForm **pForm)
+/* Free up resources associated with form variable. */
+{
+struct htmlForm *form = *pForm;
+if (form != NULL)
+    {
+    htmlFormVarFreeList(&form->vars);
+    freez(pForm);
+    }
+}
+
+void htmlFormFreeList(struct htmlForm **pList)
+/* Free a list of dynamically allocated htmlForm's */
+{
+struct htmlForm *el, *next;
+
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    htmlFormFree(&el);
+    }
+*pList = NULL;
+}
+
+void htmlPageFree(struct htmlPage **pPage)
+/* Free up resources associated with htmlPage. */
+{
+struct htmlPage *page = *pPage;
+if (page != NULL)
+    {
+    freez(&page->url);
+    htmlStatusFree(&page->status);
+    freeHashAndVals(&page->header);
+    htmlCookieFreeList(&page->cookies);
+    freez(&page->fullText);
+    htmlTagFreeList(&page->tags);
+    htmlFormFreeList(&page->forms);
+    freez(pPage);
+    }
+}
+
+void htmlPageFreeList(struct htmlPage **pList)
+/* Free a list of dynamically allocated htmlPage's */
+{
+struct htmlPage *el, *next;
+
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    htmlPageFree(&el);
+    }
+*pList = NULL;
+}
+
+static int findLineNumber(char *start, char *pos)
+/* Figure out line number of given position relative to start. */
+{
+char *s;
+int line = 1;
+for (s = start; s <= pos; ++s)
+    {
+    if (s[0] == '\n')
+       ++line;
+    }
+return line;
+}
+
+struct htmlTag *findNextMatchingTag(struct htmlTag *list, char *name)
+/* Return first tag in list that is of type name or NULL if not found*/
+{
+struct htmlTag *tag;
+for (tag = list; tag != NULL; tag = tag->next)
+    {
+    if (sameWord(name, tag->name))
+	return tag;
+    }
+return NULL;
+}
+
+static void tagVaWarn(struct htmlPage *page, struct htmlTag *tag, char *format, 
+	va_list args)
+/* Print warning message and some context of tag. */
+{
+char context[80];
+strncpy(context, tag->start, sizeof(context));
+context[sizeof(context)-1] = 0;
+warn("Error near line %d of %s:\n %s", findLineNumber(page->htmlText, tag->start), 
+	page->url, context);
+vaWarn(format, args);
+}
+
+static void tagWarn(struct htmlPage *page, struct htmlTag *tag, char *format, ...)
+/* Print warning message and some context of tag. */
+{
+va_list args;
+va_start(args, format);
+tagVaWarn(page, tag, format, args);
+va_end(args);
+}
+
+static void tagAbort(struct htmlPage *page, struct htmlTag *tag, char *format, ...)
+/* Print abort message and some context of tag. */
+{
+va_list args;
+va_start(args, format);
+tagVaWarn(page, tag, format, args);
+va_end(args);
+noWarnAbort();
+}
+
+struct htmlStatus *htmlStatusParse(char **pText)
+/* Read in status from first line.  Update pText to point to next line. 
+ * Note unlike many routines here, this does not insert zeros into text. */
+{
+char *text = *pText;
+char *end = strchr(text, '\n');
+struct htmlStatus *status;
+if (end != NULL)
+   *pText = end+1;
+else
+   *pText = text + strlen(text);
+end = skipToSpaces(text);
+if (end == NULL)
+    {
+    warn("Short status line.");
+    return NULL;
+    }
+AllocVar(status);
+status->version = cloneStringZ(text, end-text);
+end = skipLeadingSpaces(end);
+if (!isdigit(end[0]))
+    {
+    warn("Not a number in status field");
+    return NULL;
+    }
+status->status = atoi(end);
+return status;
+}
+
+char *htmlNextCrLfLine(char **pS)
+/* Return zero-terminated line and advance *pS to start of
+ * next line.  Return NULL at end of file.  Warn if there is
+ * no <CR>. */
+{
+char *s = *pS, *e;
+if (s == NULL || s[0] == 0)
+    return NULL;
+e = strchr(s, '\n');
+if (e == NULL)
+    verbose(1, "End of file in header\n");
+else 
+    {
+    *e = 0;
+    if (e == s || e[-1] != '\r')
+	verbose(1, "Missing <CR> in header line\n");
+    else
+       e[-1] = 0;
+    e += 1;
+    }
+*pS = e;
+return s;
+}
+
+static void cookieParseNameValuePair(char *s, char **retName, char **retVal)
+/* Parse out name/value pair. Warn and return FALSE if there's a problem. */
+{
+char *val = strchr(s, '=');
+if (val == NULL)
+    {
+    val = s + strlen(s);
+    }
+*val++ = 0;
+*retName = s;
+*retVal = val;
+}
+
+static struct htmlCookie *parseCookie(char *s)
+/* Parse out cookie line to the right of Set-Cookie. */
+{
+char *e, *name, *val;
+struct htmlCookie *cookie;
+
+/* Grab up to semicolon, which is the cookie name/value pair. */
+e = strchr(s, ';');
+if (e == NULL)
+    {
+    warn("Missing ';' in cookie");
+    return NULL;
+    }
+*e++ = 0;
+
+/* Allocate cookie and fill out name/value pair. */
+AllocVar(cookie);
+cookieParseNameValuePair(s, &name, &val);
+cookie->name = cloneString(name);
+cookie->value = cloneString(val);
+
+/* Loop through to grab the other info - domain and so forth. */
+s = e;
+for (;;)
+    {
+    /* Find next semicolon and zero-terminate it. */
+    s = skipLeadingSpaces(s);
+    e = strchr(s, ';');
+    if (e == NULL)
+        break;
+    *e++ = 0;
+
+    /* Parse out name/value pairs and save it away if it's one we know about. */
+    cookieParseNameValuePair(s, &name, &val);
+    if (sameString(name, "domain"))
+        cookie->domain = cloneString(val);
+    else if (sameString(name, "path"))
+        cookie->path = cloneString(val);
+    else if (sameString(name, "expires"))
+        cookie->expires = cloneString(val);
+    else if (sameString(name, "secure"))
+        cookie->secure = TRUE;
+
+    s = e;
+    }
+return cookie;
+}
+
+static struct hash *htmlHeaderRead(char **pHtml, struct htmlCookie **pCookies)
+/* Read in from second line through first blank line and
+ * save in hash.  These lines are in the form name: value. */
+{
+struct hash *hash = hashNew(6);
+for (;;)
+    {
+    char *line = htmlNextCrLfLine(pHtml);
+    char *word;
+    if (line == NULL)
+	{
+        warn("End of file in header");
+	break;
+	}
+    word = nextWord(&line);
+    if (word == NULL)
+        break;
+    line = skipLeadingSpaces(line);
+    hashAdd(hash, word, cloneString(line));
+    if (sameString(word, "Set-Cookie:"))
+	{
+	struct htmlCookie *cookie = parseCookie(line);
+	if (cookie != NULL)
+	    slAddTail(pCookies, cookie);
+	}
+    }
+return hash;
+}
+
+static char *htmlAttributeFindVal(struct htmlAttribute *list, char *name)
+/* Find named attribute or return NULL. */
+{
+struct htmlAttribute *att;
+for (att = list; att != NULL; att = att->next)
+    {
+    if (sameWord(att->name, name))
+        return att->val;
+    }
+return NULL;
+}
+
+
+char *htmlTagAttributeVal(struct htmlPage *page, struct htmlTag *tag, 
+	char *name, char *defaultVal)
+/* Return value of named attribute, or defaultVal if attribute doesn't exist. */
+{
+char *val = htmlAttributeFindVal(tag->attributes, name);
+if (val == NULL)
+    val = defaultVal;
+return val;
+}
+
+char *htmlTagAttributeNeeded(struct htmlPage *page, struct htmlTag *tag, char *name)
+/* Return named tag attribute.  Complain and return "n/a" if it
+ * doesn't exist. */
+{
+char *val = htmlTagAttributeVal(page, tag, name, NULL);
+if (val == NULL)
+    {
+    tagWarn(page, tag, "Missing %s attribute", name);
+    val = "n/a";
+    }
+return val;
+}
+
+static struct htmlTag *htmlTagScan(char *html, char *dupe)
+/* Scan HTML for tags and return a list of them. 
+ * Html is the text to scan, and dupe is a copy of it
+ * which this routine will insert 0's in in the course of
+ * parsing.*/
+{
+char *s = dupe, c, *e, *tagName;
+struct htmlTag *tagList = NULL, *tag;
+struct htmlAttribute *att;
+int pos;
+
+for (;;)
+    {
+    c = *s++;
+    if (c == 0)
+        break;
+    if (c == '<')
+        {
+	if (*s == '!')	/* HTML comment. */
+	    {
+	    s += 1;
+	    if (s[0] == '-' && s[1] == '-')
+	        s = stringIn("-->", s);
+	    else
+		s = strchr(s, '>');
+	    if (s == NULL)
+		{
+	        warn("End of file in comment");
+		break;
+		}
+	    }
+	else
+	    {
+	    /* Grab first word into tagName. */
+	    e = s;
+	    for (;;)
+	        {
+		c = *e;
+		if (c == '>' || c == 0 || isspace(c))
+		    break;
+		e += 1;
+		}
+	    if (c != 0)
+	       *e++ = 0;
+	    tagName = s;
+	    s = e;
+	    
+	    /* Allocate tag, fill in name, and stick it on list. */
+	    AllocVar(tag);
+	    tag->name = cloneString(tagName);
+	    slAddHead(&tagList, tag);
+	    pos = tagName - dupe - 1;
+	    tag->start = html+pos;
+
+	    /* If already got end tag (or EOF) stop processing tag. */
+	    if (c == '>' || c == 0)
+		{
+		tag->end = html + (e - dupe);
+	        continue;
+		}
+
+	    /* Process name/value pairs until get end tag. */
+	    for (;;)
+		{
+		char *name, *val;
+		boolean gotEnd = FALSE;
+
+		/* Check for end tag. */
+		s = skipLeadingSpaces(s);
+		if (s[0] == '>' || s[0] == 0)
+		    {
+		    tag->end = html + (s - dupe);
+		    if (s[0] == '>')
+			tag->end += 1;
+		    break;
+		    }
+
+		/* Get name - everything up to equals. */
+		e = s;
+		for (;;)
+		    {
+		    c = *e;
+		    if (c == '=')
+		        break;
+		    else if (c == '>')
+		        break;
+		    else if (c == 0)
+		        break;
+		    else if (isspace(c))
+		        break;
+		    e += 1;
+		    }
+		if (c == 0)
+		    {
+		    warn("End of file in tag");
+		    break;
+		    }
+		name = s;
+		*e++ = 0;
+		eraseTrailingSpaces(name);
+		if (c == '>')
+		    {
+		    val = "";
+		    gotEnd = TRUE;
+		    tag->end = html + (e - dupe);
+		    }
+		else if (isspace(c))
+		    {
+		    val = "";
+		    }
+		else
+		    {
+		    val = e = skipLeadingSpaces(e);
+		    if (e[0] == '"' || e[0] == '\'')
+			{
+			if (!parseQuotedStringNoEscapes(val, val, &e))
+			    break;
+			}
+		    else
+			{
+			for (;;)
+			    {
+			    c = *e;
+			    if (c == '>')
+				{
+				gotEnd = TRUE;
+				*e++ = 0;
+				tag->end = html + (e - dupe);
+				break;
+				}
+			    else if (isspace(c))
+				{
+				*e++ = 0;
+				break;
+				}
+			    else if (c == 0)
+				break;
+			    ++e;
+			    }
+			}
+		    }
+		AllocVar(att);
+		att->name = cloneString(name);
+		att->val = cloneString(val);
+		slAddTail(&tag->attributes, att);
+		s = e;
+		if (gotEnd)
+		    break;
+		}
+	    }
+	}
+    }
+slReverse(&tagList);
+return tagList;
+}
+
+static struct htmlFormVar *findOrMakeVar(struct htmlPage *page, char *name, 
+	struct hash *hash, struct htmlTag *tag, struct htmlFormVar **pVarList)
+/* Find variable of existing name if it exists,  otherwise
+ * make a new one and add to hash and list.  Add reference
+ * to this tag to var. */
+{
+struct htmlFormVar *var = hashFindVal(hash, name);
+if (var == NULL)
+    {
+    AllocVar(var);
+    var->name = name;
+    var->tagName = tag->name;
+    hashAdd(hash, name, var);
+    slAddHead(pVarList, var);
+    }
+else
+    {
+    if (!sameWord(var->tagName, tag->name))
+        {
+	tagWarn(page, tag, "Mixing FORM variable tag types %s and %s", 
+		var->tagName, tag->name);
+	var->tagName = tag->name;
+	}
+    }
+refAdd(&var->tags, tag);
+return var;
+}
+
+static boolean isMixableInputType(char *type)
+/* Return TRUE if it's a type you can mix with others ok, like
+ * button, submit, and image. */
+{
+return sameWord(type, "BUTTON") || sameWord(type, "SUBMIT") 
+	|| sameWord(type, "IMAGE");
+}
+
+static boolean areMixableInputTypes(char *type1, char *type2)
+/* Return TRUE if type1 and type 2 can be safely mixed, i.e.
+ * if type1 and type2 both pass isMixableInputType, OR
+ * if type1 or type2 is HIDDEN. */
+{
+return sameWord(type1, "HIDDEN") || sameWord(type2, "HIDDEN")
+    || (isMixableInputType(type1) && isMixableInputType(type2));
+}
+
+static void htmlFormVarAddValue(struct htmlFormVar *var, char *value)
+/* Add value to list of predefined values for var. */
+{
+struct slName *name = slNameNew(value);
+slAddTail(&var->values, name);
+}
+
+
+static struct htmlFormVar *formParseVars(struct htmlPage *page, struct htmlForm *form)
+/* Return a list of variables parsed out of form.  
+ * A form variable is something that may appear in the name
+ * side of the name=value pairs that serves as input to a CGI
+ * script.  The variables may be constructed from buttons, 
+ * INPUT tags, OPTION lists, or TEXTAREAs. */
+{
+struct htmlTag *tag;
+struct htmlFormVar *varList = NULL, *var;
+struct hash *hash = newHash(0);
+for (tag = form->startTag->next; tag != form->endTag; tag = tag->next)
+    {
+    if (sameWord(tag->name, "INPUT"))
+        {
+	char *type = htmlTagAttributeVal(page, tag, "TYPE", NULL);
+	char *varName = htmlTagAttributeVal(page, tag, "NAME", NULL);
+	char *value = htmlTagAttributeVal(page, tag, "VALUE", NULL);
+
+	if (type == NULL)
+	    type = "TEXT";
+	if (varName == NULL)
+	    {
+	    if (!htmlTagAttributeVal(page, tag, "ONCHANGE", NULL)
+	        && !sameWord(type, "SUBMIT") && !sameWord(type, "CLEAR")
+	    	&& !sameWord(type, "BUTTON") && !sameWord(type, "RESET")
+		&& !sameWord(type, "IMAGE"))
+		tagWarn(page, tag, "Missing NAME attribute");
+	    varName = "n/a";
+	    }
+	var = findOrMakeVar(page, varName, hash, tag, &varList); 
+	if (var->type != NULL && !sameWord(var->type, type))
+	    {
+	    if (!areMixableInputTypes(var->type, type))
+		tagWarn(page, tag, "Mixing input types %s and %s", var->type, type);
+	    }
+	var->type = type;
+	if (sameWord(type, "TEXT") || sameWord(type, "PASSWORD") 
+		|| sameWord(type, "FILE") || sameWord(type, "HIDDEN")
+		|| sameWord(type, "IMAGE"))
+	    {
+	    var->curVal = cloneString(value);
+	    }
+	else if (sameWord(type, "CHECKBOX"))
+	    {
+	    if (htmlTagAttributeVal(page, tag, "CHECKED", NULL) != NULL)
+	        var->curVal = cloneString("on");
+	    }
+	else if (sameWord(type, "RADIO"))
+	    {
+	    if (htmlTagAttributeVal(page, tag, "CHECKED", NULL) != NULL)
+	        var->curVal = cloneString(value);
+	    htmlFormVarAddValue(var, value);
+	    }
+	else if ( sameWord(type, "RESET") || sameWord(type, "BUTTON") ||
+		sameWord(type, "SUBMIT") || sameWord(type, "IMAGE") ||
+		sameWord(type, "n/a"))
+	    {
+	    /* Do nothing. */
+	    }
+	else
+	    {
+	    tagWarn(page, tag, "Unrecognized INPUT TYPE %s", type);
+	    }
+	}
+    else if (sameWord(tag->name, "SELECT"))
+        {
+	char *varName = htmlTagAttributeNeeded(page, tag, "NAME");
+	struct htmlTag *subTag;
+	var = findOrMakeVar(page, varName, hash, tag, &varList); 
+	for (subTag = tag->next; subTag != form->endTag; subTag = subTag->next)
+	    {
+	    if (sameWord(subTag->name, "/SELECT"))
+		{
+		if (var->curVal == NULL && var->values != NULL)
+		    {
+		    var->curVal = cloneString(var->values->name);
+		    }
+		break;
+		}
+	    else if (sameWord(subTag->name, "OPTION"))
+	        {
+		char *val = cloneString(htmlTagAttributeVal(page, subTag, "VALUE", NULL));
+		if (val == NULL)
+		    {
+		    char *e = strchr(subTag->end, '<');
+		    if (e != NULL)
+			val = cloneStringZ(subTag->end, e - subTag->end);
+		    }
+		if (val != NULL)
+		    htmlFormVarAddValue(var, val);
+		if (htmlTagAttributeVal(page, subTag, "SELECTED", NULL) != NULL)
+		    {
+		    if (val != NULL)
+			var->curVal = cloneString(val);
+		    }
+		freez(&val);
+		}
+	    }
+	}
+    else if (sameWord(tag->name, "TEXTAREA"))
+        {
+	char *varName = htmlTagAttributeNeeded(page, tag, "NAME");
+	char *e = strchr(tag->end, '<');
+	var = findOrMakeVar(page, varName, hash, tag, &varList); 
+	if (e != NULL)
+	    var->curVal = cloneStringZ(tag->end, e - tag->end);
+	}
+    }
+freeHash(&hash);    
+slReverse(&varList);
+for (var = varList; var != NULL; var = var->next)
+    {
+    slReverse(&var->tags);
+    }
+return varList;
+}
+
+static struct htmlForm *htmlParseForms(struct htmlPage *page,
+	struct htmlTag *startTag, struct htmlTag *endTag)
+/* Parse out list of forms from tag stream. */
+{
+struct htmlForm *formList = NULL, *form = NULL;
+struct htmlTag *tag;
+for (tag = startTag; tag != endTag; tag = tag->next)
+    {
+    if (sameWord(tag->name, "FORM"))
+        {
+	if (form != NULL)
+	    tagWarn(page, tag, "FORM inside of FORM");
+	AllocVar(form);
+	form->startTag = tag;
+	slAddHead(&formList, form);
+	form->name = htmlTagAttributeVal(page, tag, "name", "n/a");
+	form->action = htmlTagAttributeNeeded(page, tag, "action");
+	form->method = htmlTagAttributeVal(page, tag, "method", "GET");
+	}
+    else if (sameWord(tag->name, "/FORM"))
+        {
+	if (form == NULL)
+	    tagWarn(page, tag, "/FORM outside of FORM");
+	else
+	    {
+	    form->endTag = tag->next;
+	    form = NULL;
+	    }
+	}
+    }
+slReverse(&formList);
+for (form = formList; form != NULL; form = form->next)
+    {
+    form->vars = formParseVars(page, form);
+    }
+return formList;
+}
+
+struct htmlPage *htmlPageParse(char *url, char *fullText)
+/* Parse out page and return. */
+{
+struct htmlPage *page;
+char *dupe = cloneLongString(fullText);
+char *s = dupe;
+struct htmlStatus *status = htmlStatusParse(&s);
+char *contentType;
+
+if (status == NULL)
+    return NULL;
+
+AllocVar(page);
+page->url = cloneString(url);
+page->fullText = fullText;
+page->status = status;
+page->header = htmlHeaderRead(&s, &page->cookies);
+contentType = hashFindVal(page->header, "Content-Type:");
+if (contentType == NULL)	
+    {
+    warn("No contentType, assuming text/html");
+    contentType = cloneString("text/html");
+    hashAdd(page->header, "Content-Type:", contentType);
+    }
+page->htmlText = fullText + (s - dupe);
+if (startsWith("text/html", contentType))
+    {
+    page->tags = htmlTagScan(page->htmlText, s);
+    page->forms = htmlParseForms(page, page->tags, NULL);
+    }
+freez(&dupe);
+return page;
+}
+
+struct htmlPage *htmlPageParseNoHead(char *url, char *htmlText)
+/* Parse out page in memory (past http header if any) and return. */
+{
+char *dupe = cloneString(htmlText);
+struct htmlPage *page;
+AllocVar(page);
+page->url = cloneString(url);
+page->fullText = page->htmlText = htmlText;
+page->tags = htmlTagScan(page->htmlText, dupe);
+page->forms = htmlParseForms(page, page->tags, NULL);
+freez(&dupe);
+return page;
+}
+
+struct htmlPage *htmlPageParseOk(char *url, char *fullText)
+/* Parse out page and return only if status ok. */
+{
+struct htmlPage *page = htmlPageParse(url, fullText);
+if (page == NULL)
+   noWarnAbort();
+if (page->status->status != 200)
+   errAbort("%s returned with status code %d", url, page->status->status);
+return page;
+}
+
+char *htmlSlurpWithCookies(char *url, struct htmlCookie *cookies)
+/* Send get message to url with cookies, and return full response as
+ * a dyString.  This is not parsed or validated, and includes http
+ * header lines.  Typically you'd pass this to htmlPageParse() to
+ * get an actual page. */
+{
+struct dyString *dyHeader = dyStringNew(0);
+struct dyString *dyText;
+int sd;
+
+cookieOutput(dyHeader, cookies);
+sd = netOpenHttpExt(url, "GET", dyHeader->string);
+dyText = netSlurpFile(sd);
+close(sd);
+dyStringFree(&dyHeader);
+return dyStringCannibalize(&dyText);
+}
+
+struct htmlPage *htmlPageGetWithCookies(char *url, struct htmlCookie *cookies)
+/* Get page from URL giving server the given cookies.   Note only the
+ * name and value parts of the cookies need to be filled in. */
+{
+char *buf = htmlSlurpWithCookies(url, cookies);
+return htmlPageParse(url, buf);
+}
+
+struct htmlPage *htmlPageForwarded(char *url, struct htmlCookie *cookies)
+/* Get html page.  If it's just a forwarding link then get do the
+ * forwarding.  Cookies is a possibly empty list of cookies with
+ * name and value parts filled in. */
+{
+struct htmlPage *page = htmlPageGetWithCookies(url, cookies);
+int level, maxLevels = 7;
+for (level = 0; level < maxLevels; ++level)
+    {
+    struct htmlPage *newPage;
+    char *newUrl = hashFindVal(page->header, "Location:");
+    if (newUrl == NULL)
+        break;
+    newPage = htmlPageGetWithCookies(newUrl, cookies);
+    htmlPageFree(&page);
+    page = newPage;
+    }
+return page;
+}
+
+struct htmlPage *htmlPageForwardedNoAbort(char *url, struct htmlCookie *cookies)
+/* Try and get an HTML page.  Print warning and return NULL if there's a problem. */
+{
+struct errCatch *errCatch = errCatchNew();
+struct htmlPage *page = NULL;
+if (errCatchStart(errCatch))
+    page = htmlPageForwarded(url, cookies);
+errCatchEnd(errCatch);
+if (errCatch->gotError)
+    warn("%s", errCatch->message->string);
+errCatchFree(&errCatch);
+return page;
+}
+
+
+struct htmlPage *htmlPageGet(char *url)
+/* Get page from URL (may be a file). */
+{
+if (fileExists(url))
+    {
+    char *buf;
+    readInGulp(url, &buf, NULL);
+    return htmlPageParseNoHead(url, buf);
+    }
+else
+    return htmlPageGetWithCookies(url, NULL);
+}
+
+void htmlFormVarPrint(struct htmlFormVar *var, FILE *f, char *prefix)
+/* Print out variable to file, prepending prefix. */
+{
+struct slName *val;
+fprintf(f, "%s%s\t%s\t%s\t%s\n", prefix, var->name, var->tagName, 
+	naForNull(var->type), 
+	naForNull(var->curVal));
+for (val = var->values; val != NULL; val = val->next)
+     fprintf(f, "%s\t%s\n", prefix, val->name);
+}
+
+void htmlFormPrint(struct htmlForm *form, FILE *f)
+/* Print out form structure. */
+{
+struct htmlFormVar *var;
+fprintf(f, "%s\t%s\t%s\n", form->name, form->method, form->action);
+for (var = form->vars; var != NULL; var = var->next)
+    htmlFormVarPrint(var, f, "\t");
+}
+
+struct htmlForm *htmlFormGet(struct htmlPage *page, char *name)
+/* Get named form. */
+{
+struct htmlForm *form;
+for (form = page->forms; form != NULL; form = form->next)
+    if (sameWord(form->name, name))
+        break;
+return form;
+}
+
+struct htmlFormVar *htmlFormVarGet(struct htmlForm *form, char *name)
+/* Get named variable. */
+{
+struct htmlFormVar *var;
+if (form == NULL)
+    errAbort("Null form passed to htmlFormVarGet");
+for (var = form->vars; var != NULL; var = var->next)
+    if (sameWord(var->name, name))
+	break;
+return var;
+}
+
+void htmlFormVarSet(struct htmlForm *form, char *name, char *val)
+/* Set variable to given value. Create it if it doesn't exist*/
+{
+struct htmlFormVar *var;
+if (form == NULL)
+    errAbort("Null form passed to htmlFormVarSet");
+var = htmlFormVarGet(form, name);
+if (var == NULL)
+    {
+    AllocVar(var);
+    var->type = "TEXT";
+    var->tagName = "INPUT";
+    var->name = name;
+    slAddHead(&form->vars, var);
+    }
+freez(&var->curVal);
+var->curVal = cloneString(val);
+}
+
+
+struct htmlFormVar *htmlPageGetVar(struct htmlPage *page, struct htmlForm *form, char *name)
+/* Get named variable.  If form is NULL, first form in page is used. */
+{
+if (form == NULL)
+    form = page->forms;
+return htmlFormVarGet(form, name);
+}
+
+void htmlPageSetVar(struct htmlPage *page, struct htmlForm *form, char *name, char *val)
+/* Set variable to given value.  If form is NULL, first form in page is used. */
+{
+if (page == NULL)
+    errAbort("Null page passed to htmlPageSetVar");
+if (form == NULL)
+    form = page->forms;
+if (form == NULL)
+    errAbort("Null form in htmlPageSetVar");
+htmlFormVarSet(form, name, val);
+}
+
+static void asciiEntityDecode(char *in, char *out, int inLength)
+/* Decode from SGML Character Entity &# format to normal. 
+ * Out will be a little shorter than in typically, and
+ * can be the same buffer. Only supports ASCII charset. */
+{
+char c;
+int i;
+char *e;
+for (i=0; i<inLength;++i)
+    {
+    c = *in++;
+    if ((c == '&') && (*in == '#'))
+	{
+	in++;
+	if ((e = strchr(in,';')) == NULL  || (e - in) > 5)
+	    { /* probably a badly formatted string, just recover and continue */
+	    *out++ = '&';
+	    *out++ = '#';
+	    }
+	else
+	    {
+	    int code;
+	    if (sscanf(in, "%d", &code) != 1)
+		{
+		code = '?';
+		}
+	    if (code > 255) 
+		{
+		code = '?';
+		}
+	    in = e;
+	    in++;
+	    *out++ = code;
+	    }
+	}
+    else
+	*out++ = c;
+    }
+*out++ = 0;
+}
+
+
+char *expandUrlOnBase(char *base, char *url)
+/* Figure out first character past host name. Load up
+ * return string with protocol (if any) and host name. 
+ * It is assumed that url is relative to base and does not contain a protocol.*/
+{
+struct dyString *dy = NULL;
+char *hostName, *pastHostName;
+dy = dyStringNew(256);
+if (startsWith("http:", base) || startsWith("https:", base) || startsWith("ftp:", base))
+    hostName = (strchr(base, ':') + 3);
+else
+    hostName = base;
+pastHostName = strchr(hostName, '/');
+if (pastHostName == NULL)
+    pastHostName = hostName + strlen(hostName);
+dyStringAppendN(dy, base, pastHostName - base);
+
+/* Add url to return string after host name. */
+if (startsWith("/", url))	/* New URL is absolute, just append to hostName */
+    {
+    dyStringAppend(dy, url);
+    }
+else
+    {
+    char *curDir = pastHostName;
+    char *endDir;
+    if (curDir[0] == '/')
+        curDir += 1;
+    dyStringAppendC(dy, '/');
+    endDir = strrchr(curDir, '/');
+    if (endDir == NULL)
+	endDir = curDir;
+    if (startsWith("../", url))
+	{
+	char *dir = cloneStringZ(curDir, endDir-curDir);
+	char *path = expandRelativePath(dir, url);
+	if (path != NULL)
+	     {
+	     dyStringAppend(dy, path);
+	     }
+	freez(&dir);
+	freez(&path);
+	}
+    else
+	{
+	dyStringAppendN(dy, curDir, endDir-curDir);
+	if (lastChar(dy->string) != '/')
+	    dyStringAppendC(dy, '/');
+	dyStringAppend(dy, url);
+	}
+    }
+return dyStringCannibalize(&dy);
+}
+
+char *htmlExpandUrl(char *base, char *url)
+/* Expand URL that is relative to base to stand on its own. 
+ * Return NULL if it's not http or https. */
+{
+
+/* some mailto: have SGML char encoding, e.g a to hide from spambots */
+url = cloneString(url);	/* Clone because asciiEntityDecode may modify it. */
+asciiEntityDecode(url, url, strlen(url));
+
+/* In easiest case URL is actually absolute and begins with
+ * protocol.  Just return clone of url. */
+if (startsWith("http:", url) || startsWith("https:", url))
+    return url;
+
+/* If it's got a colon, but no http or https, then it's some
+ * protocol we don't understand, like a mailto.  Just return NULL. */
+if (strchr(url, ':') != NULL)
+    {
+    freez(&url);
+    return NULL;
+    }
+char *result = expandUrlOnBase(base, url);
+freez(&url);
+return result;
+}
+
+static void appendCgiVar(struct dyString *dy, char *name, char *value)
+/* Append cgiVar with cgi-encoded value to dy. */
+{
+char *enc = NULL;
+if (value == NULL)
+    value = "";
+enc = cgiEncode(value);
+if (dy->stringSize != 0)
+    dyStringAppendC(dy, '&');
+dyStringAppend(dy, name);
+dyStringAppendC(dy, '=');
+dyStringAppend(dy, enc);
+freez(&enc);
+}
+
+#define MIMEBUFSIZE 4096
+
+static void appendMimeVar(struct dyString *dy, char *name, char *value, char *varType, char *boundary)
+/* Append cgiVar with cgi-encoded value to dy. */
+{
+char *fileName = NULL;
+
+if (value == NULL)
+    value = "";
+dyStringAppend(dy, "\r\n--");
+dyStringAppend(dy, boundary);
+dyStringAppend(dy, "\r\n");
+dyStringAppend(dy, "content-disposition: form-data; name=\"");
+dyStringAppend(dy, name);
+dyStringAppend(dy, "\"");
+
+if (varType && sameWord(varType, "FILE"))
+    {
+    fileName = strrchr(value,'/'); 
+    if (fileName)
+	++fileName;
+    else
+	fileName = value;
+    dyStringAppend(dy, "; filename=\"");
+    dyStringAppend(dy, fileName);
+    dyStringAppend(dy, "\"");
+    }
+dyStringAppend(dy, "\r\n");
+dyStringAppend(dy, "\r\n");
+if (varType && sameWord(varType, "FILE") && !sameWord(value,""))
+    {
+    FILE *f = mustOpen(value, "r");
+    char buf[MIMEBUFSIZE];
+    int bytesRead = 0;
+    do
+	{
+	bytesRead = fread(buf,1,MIMEBUFSIZE,f);
+	if (bytesRead < 0)
+	    errnoAbort("error reading file to upload %s",value);
+    	dyStringAppendN(dy, buf, bytesRead);
+	}
+    while(bytesRead > 0);
+    carefulClose(&f);
+    }
+else    
+    dyStringAppend(dy, value);
+}
+
+static void appendMimeTerminus(struct dyString *dy, char *boundary)
+/* Append MIME boundary terminator to dy. */
+{
+dyStringAppend(dy, "\r\n--");
+dyStringAppend(dy, boundary);
+dyStringAppend(dy, "--\r\n");
+}
+
+
+static int countOccurrences(char *needle, int nLen, char *haystack, int hLen)
+/* count # of occurrences of needle in haystack */
+{
+int count = 0;
+char *match=NULL;
+while((match=memMatch(needle, nLen, haystack, hLen)) != NULL)
+    {
+    ++count;
+    hLen -= (match - haystack) + nLen;
+    if (hLen < 1)
+	break;
+    haystack=match+nLen;
+    }
+return count;
+}
+
+static boolean isMimeEncoded(struct htmlForm *form)
+/* determine if the form is using MIME encoding */
+{
+struct htmlAttribute *a;
+for(a = form->startTag->attributes;a;a = a->next)
+    if (sameWord(a->name,"ENCTYPE") && sameWord(a->val,"multipart/form-data"))
+	return TRUE;
+return FALSE;
+}
+
+char *htmlFormCgiVars(struct htmlPage *page, struct htmlForm *form, 
+	char *buttonName, char *buttonVal, struct dyString *dyHeader)
+/* Return cgi vars in name=val format from use having pressed
+ * submit button of given name and value. */
+{
+struct dyString *dy = newDyString(0);
+struct htmlFormVar *var;
+boolean isMime = isMimeEncoded(form);
+int mimeParts = 0;
+char boundary[256];
+
+while(TRUE)
+    {
+    if (isMime)
+	{
+	/* choose a new string for the boundary */
+	/* Set initial seed */
+	int i = 0;
+    	safef(boundary,sizeof(boundary),"%s", "---------");
+	srand( (unsigned)time( NULL ) );
+	for(i=strlen(boundary);i<41;++i)
+	    {
+    	    int r = (int) 26 * (rand() / (RAND_MAX + 1.0));
+	    boundary[i] = r+'A';
+	    }
+	boundary[i] = 0;
+	}
+
+    if (form == NULL)
+	form = page->forms;
+    if (buttonName != NULL && !isMime)
+	appendCgiVar(dy, buttonName, buttonVal);
+    for (var = form->vars; var != NULL; var = var->next)
+	{
+	if (sameWord(var->tagName, "SELECT") || 
+	    sameWord(var->tagName, "TEXTAREA") || 
+	    (var->type != NULL &&
+	    ((sameWord(var->type, "RADIO") || sameWord(var->type, "TEXTBOX")
+	    || sameWord(var->type, "PASSWORD") || sameWord(var->type, "HIDDEN")
+	    || sameWord(var->type, "TEXT") || sameWord(var->type, "FILE")))))
+	    {
+	    char *val = var->curVal;
+	    if (val == NULL)
+		val = "";
+	    if (isMime)
+		{
+		++mimeParts;
+		appendMimeVar(dy, var->name, val, var->type, boundary);
+		}
+	    else	    
+		appendCgiVar(dy, var->name, val);
+	    }
+	else if (var->type != NULL && sameWord(var->type, "CHECKBOX"))
+	    {
+	    if (var->curVal != NULL)
+		{
+		if (isMime)	    
+		    {
+		    ++mimeParts;
+		    appendMimeVar(dy, var->name, var->curVal, var->type, boundary);
+		    }
+		else	    
+		    appendCgiVar(dy, var->name, var->curVal);
+		}
+	    }
+	else if (isMime && buttonName && sameWord(buttonName,var->name))
+	    {
+	    ++mimeParts;
+	    appendMimeVar(dy, buttonName, buttonVal, NULL, boundary);
+	    }
+	}
+    if (isMime) 
+	{
+	++mimeParts;
+	appendMimeTerminus(dy,boundary);
+	if (countOccurrences(boundary,strlen(boundary),dy->string,dy->stringSize) != mimeParts)
+	    { /* boundary was found in input! # occurrences not as expected */
+	    dyStringClear(dy);
+    	    continue;  /* if at first you don't succeed, try another boundary string */
+	    }
+    	dyStringPrintf(dyHeader, "Content-type: multipart/form-data, boundary=%s\r\n",boundary);
+	if (isMime && verboseLevel() == 2)
+	    {
+    	    mustWrite(stderr, dyHeader->string, dyHeader->stringSize);
+	    mustWrite(stderr, dy->string, dy->stringSize);
+	    }
+	}
+    break;
+    }   
+    
+return dyStringCannibalize(&dy);
+
+}
+
+struct htmlPage *htmlPageFromForm(struct htmlPage *origPage, struct htmlForm *form, 
+	char *buttonName, char *buttonVal)
+/* Return a new htmlPage based on response to pressing indicated button
+ * on indicated form in origPage. */
+{
+struct htmlPage *newPage = NULL;
+struct dyString *dyUrl = dyStringNew(0);
+struct dyString *dyHeader = dyStringNew(0);
+struct dyString *dyText = NULL;
+char *url = htmlExpandUrl(origPage->url, form->action);
+char *cgiVars = NULL;
+int contentLength = 0;
+int sd = -1;
+
+dyStringAppend(dyUrl, url);
+cookieOutput(dyHeader, origPage->cookies);
+if (sameWord(form->method, "GET"))
+    {
+    cgiVars = htmlFormCgiVars(origPage, form, buttonName, buttonVal, dyHeader);
+    dyStringAppend(dyUrl, "?");
+    dyStringAppend(dyUrl, cgiVars);
+    verbose(3, "GET %s\n", dyUrl->string);
+    sd = netOpenHttpExt(dyUrl->string, form->method, dyHeader->string);
+    }
+else if (sameWord(form->method, "POST"))
+    {
+    cgiVars = htmlFormCgiVars(origPage, form, buttonName, buttonVal, dyHeader);
+    contentLength = strlen(cgiVars);
+    verbose(3, "POST %s\n", dyUrl->string);
+    dyStringPrintf(dyHeader, "Content-Length: %d\r\n", contentLength);
+    sd = netOpenHttpExt(dyUrl->string, form->method, dyHeader->string);
+    mustWriteFd(sd, cgiVars, contentLength);
+    }
+dyText = netSlurpFile(sd);
+close(sd);
+newPage = htmlPageParse(url, dyStringCannibalize(&dyText));
+freez(&url);
+dyStringFree(&dyUrl);
+dyStringFree(&dyHeader);
+freez(&cgiVars);
+return newPage;
+}
+
+struct slName *htmlPageScanAttribute(struct htmlPage *page, 
+	char *tagName, char *attribute)
+/* Scan page for values of particular attribute in particular tag.
+ * if tag is NULL then scans in all tags. */
+{
+struct htmlTag *tag;
+struct htmlAttribute *att;
+struct slName *list = NULL, *el;
+
+for (tag = page->tags; tag != NULL; tag = tag->next)
+    {
+    if (tagName == NULL || sameWord(tagName, tag->name))
+        {
+	for (att = tag->attributes; att != NULL; att = att->next)
+	    {
+	    if (sameWord(attribute, att->name))
+	        {
+		el = slNameNew(att->val);
+		slAddHead(&list, el);
+		}
+	    }
+	}
+    }
+slReverse(&list);
+return list;
+}
+
+struct slName *htmlPageLinks(struct htmlPage *page)
+/* Scan through tags list and pull out HREF attributes. */
+{
+return htmlPageScanAttribute(page, NULL, "HREF");
+}
+
+struct htmlTableRow
+/* Data on a row */
+    {
+    struct htmlTableRow *next;
+    int tdCount;
+    int inTd;
+    };
+
+struct htmlTable 
+/* Data on a table. */
+    {
+    struct htmlTable *next;
+    struct htmlTableRow *row;
+    int rowCount;
+    };
+
+static void validateTables(struct htmlPage *page, 
+	struct htmlTag *startTag, struct htmlTag *endTag)
+/* Validate <TABLE><TR><TD> are all properly nested, and that there
+ * are no empty rows. */
+{
+struct htmlTable *tableStack = NULL, *table;
+struct htmlTableRow *row;
+struct htmlTag *tag;
+
+for (tag = startTag; tag != endTag; tag = tag->next)
+    {
+    if (sameWord(tag->name, "TABLE"))
+        {
+	if (tableStack != NULL)
+	    {
+	    if (tableStack->row == NULL || !tableStack->row->inTd)
+	    tagAbort(page, tag, "TABLE inside of another table, but not inside of <TR><TD>\n");
+	    }
+	AllocVar(table);
+	slAddHead(&tableStack, table);
+	}
+    else if (sameWord(tag->name, "/TABLE"))
+        {
+	if ((table = tableStack) == NULL)
+	    tagAbort(page, tag, "Extra </TABLE> tag");
+	if (table->rowCount == 0)
+	    tagAbort(page, tag, "<TABLE> with no <TR>'s");
+	if (table->row != NULL)
+	    tagAbort(page, tag, "</TABLE> inside of a row");
+	tableStack = table->next;
+	freez(&table);
+	}
+    else if (sameWord(tag->name, "TR"))
+        {
+	if ((table = tableStack) == NULL)
+	    tagAbort(page, tag, "<TR> outside of TABLE");
+	if (table->row != NULL)
+	    tagAbort(page, tag, "<TR>...<TR> with no </TR> in between");
+	AllocVar(table->row);
+	table->rowCount += 1;
+	}
+    else if (sameWord(tag->name, "/TR"))
+        {
+	if ((table = tableStack) == NULL)
+	    tagAbort(page, tag, "</TR> outside of TABLE");
+	if (table->row == NULL)
+	    tagAbort(page, tag, "</TR> with no <TR>");
+#ifdef LEGAL_ACTUALLY
+	if (table->row->inTd)
+	    {
+	    tagAbort(page, tag, "</TR> while <TD> is open");
+	    }
+#endif /* LEGAL_ACTUALLY */
+	if (table->row->tdCount == 0)
+	    tagAbort(page, tag, "Empty row in <TABLE>");
+	freez(&table->row);
+	}
+    else if (sameWord(tag->name, "TD") || sameWord(tag->name, "TH"))
+        {
+	if ((table = tableStack) == NULL)
+	    tagAbort(page, tag, "<%s> outside of <TABLE>", tag->name);
+	if ((row = table->row) == NULL)
+	    tagAbort(page, tag, "<%s> outside of <TR>", tag->name);
+#ifdef LEGAL_ACTUALLY
+	if (row->inTd)
+	    {
+	    tagAbort(page, tag, "<%s>...<%s> with no </%s> in between", 
+	    	tag->name, tag->name, tag->name);
+	    }
+#endif /* LEGAL_ACTUALLY */
+	row->inTd = TRUE;
+	row->tdCount += 1;
+	}
+    else if (sameWord(tag->name, "/TD") || sameWord(tag->name, "/TH"))
+        {
+	if ((table = tableStack) == NULL)
+	    tagAbort(page, tag, "<%s> outside of <TABLE>", tag->name);
+	if ((row = table->row) == NULL)
+	    tagAbort(page, tag, "<%s> outside of <TR>", tag->name);
+	if (!row->inTd)
+	    tagAbort(page, tag, "<%s> with no <%s>", tag->name, tag->name+1);
+	row->inTd = FALSE;
+	}
+    }
+if (tableStack != NULL)
+    tagAbort(page, tag, "Missing </TABLE>");
+}
+
+static void checkTagIsInside(struct htmlPage *page, char *outsiders, char *insiders,  
+	struct htmlTag *startTag, struct htmlTag *endTag)
+/* Check that insiders are all bracketed by outsiders. */
+{
+char *outDupe = cloneString(outsiders);
+char *inDupe = cloneString(insiders);
+char *line, *word;
+int depth = 0;
+struct htmlTag *tag;
+struct hash *outOpen = newHash(8);
+struct hash *outClose = newHash(8);
+struct hash *inHash = newHash(8);
+char buf[256];
+
+/* Create hashes of all insiders */
+line = inDupe;
+while ((word = nextWord(&line)) != NULL)
+    {
+    touppers(word);
+    hashAdd(inHash, word, NULL);
+    }
+
+/* Create hash of open and close outsiders. */
+line = outDupe;
+while ((word = nextWord(&line)) != NULL)
+    {
+    touppers(word);
+    hashAdd(outOpen, word, NULL);
+    safef(buf, sizeof(buf), "/%s", word);
+    hashAdd(outClose, buf, NULL);
+    }
+
+/* Stream through tags making sure that insiders are
+ * at least one deep inside of outsiders. */
+for (tag = startTag; tag != NULL; tag = tag->next)
+    {
+    char *type = tag->name;
+    if (hashLookup(outOpen, type ))
+        ++depth;
+    else if (hashLookup(outClose, type))
+        --depth;
+    else if (hashLookup(inHash, type))
+        {
+	if (depth <= 0)
+	    {
+	    if (!startsWith("<INPUT TYPE=HIDDEN NAME=", tag->start))  // one exception hardwired
+		tagAbort(page, tag, "%s outside of any of %s", type, outsiders);
+	    }
+	}
+    }
+freeHash(&inHash);
+freeHash(&outOpen);
+freeHash(&outClose);
+freeMem(outDupe);
+freeMem(inDupe);
+}
+
+static void checkNest(struct htmlPage *page,
+	char *type, struct htmlTag *startTag, struct htmlTag *endTag)
+/* Check that <type> and </type> tags are properly nested. */
+{
+struct htmlTag *tag;
+int depth = 0;
+char endType[256];
+safef(endType, sizeof(endType), "/%s", type);
+for (tag = startTag; tag != endTag; tag = tag->next)
+    {
+    if (sameWord(tag->name, type))
+	++depth;
+    else if (sameWord(tag->name, endType))
+        {
+	--depth;
+	if (depth < 0)
+	   tagAbort(page, tag, "<%s> without preceding <%s>", endType, type);
+	}
+    }
+if (depth != 0)
+    errAbort("Missing <%s> tag", endType);
+}
+
+static void validateNestingTags(struct htmlPage *page,
+	struct htmlTag *startTag, struct htmlTag *endTag,
+	char *nesters[], int nesterCount)
+/* Validate many tags that do need to nest. */
+{
+int i;
+for (i=0; i<nesterCount; ++i)
+    checkNest(page, nesters[i], startTag, endTag);
+}
+
+static char *bodyNesters[] = 
+/* Nesting tags that appear in body. */
+{
+    "ADDRESS", "DIV", "H1", "H2", "H3", "H4", "H5", "H6",
+    "ACRONYM", "BLOCKQUOTE", "CITE", "CODE", "DEL", "DFN"
+    "DIR", "DL", "MENU", "OL", "UL", "CAPTION", "TABLE", 
+    "A", "MAP", "OBJECT", "FORM"
+};
+
+static char *headNesters[] =
+/* Nesting tags that appear in header. */
+{
+    "TITLE",
+};
+
+static struct htmlTag *validateBody(struct htmlPage *page, struct htmlTag *startTag)
+/* Go through tags from current position (just past <BODY>)
+ * up to and including </BODY> and check some things. */
+{
+struct htmlTag *tag, *endTag = NULL;
+
+/* First search for end tag. */
+for (tag = startTag; tag != NULL; tag = tag->next)
+    {
+    if (sameWord(tag->name, "/BODY"))
+        {
+	endTag = tag;
+	break;
+	}
+    }
+if (endTag == NULL)
+    errAbort("Missing </BODY>");
+validateTables(page, startTag, endTag);
+checkTagIsInside(page, "DIR MENU OL UL", "LI", startTag, endTag);
+checkTagIsInside(page, "DL", "DD DT", startTag, endTag);
+checkTagIsInside(page, "COLGROUP TABLE", "COL", startTag, endTag);
+checkTagIsInside(page, "MAP", "AREA", startTag, endTag);
+checkTagIsInside(page, "FORM SCRIPT", 
+	"INPUT BUTTON /BUTTON OPTION SELECT /SELECT TEXTAREA /TEXTAREA"
+	"FIELDSET /FIELDSET"
+	, 
+	startTag, endTag);
+validateNestingTags(page, startTag, endTag, bodyNesters, ArraySize(bodyNesters));
+return endTag->next;
+}
+
+static char *urlOkChars()
+/* Return array character indexed array that has
+ * 1 for characters that are ok in URLs and 0
+ * elsewhere. */
+{
+char *okChars;
+int c;
+AllocArray(okChars, 256);
+for (c=0; c<256; ++c)
+    if (isalnum(c))
+        okChars[c] = 1;
+/* This list is a little more inclusive than W3's. */
+okChars['='] = 1;
+okChars['-'] = 1;
+okChars['/'] = 1;
+okChars['%'] = 1;
+okChars['.'] = 1;
+okChars[';'] = 1;
+okChars[':'] = 1;
+okChars['_'] = 1;
+okChars['&'] = 1;
+okChars['+'] = 1;
+okChars['('] = 1;
+okChars[')'] = 1;
+okChars['$'] = 1;
+okChars['!'] = 1;
+okChars['*'] = 1;
+okChars['@'] = 1;
+okChars['\''] = 1;  // apparently the apostrophe itself is ok
+return okChars;
+}
+
+static void validateCgiUrl(char *url)
+/* Make sure URL follows basic CGI encoding rules. */
+{
+if (startsWith("http:", url) || startsWith("https:", url))
+    {
+    static char *okChars = NULL;
+    UBYTE c, *s;
+    if (okChars == NULL)
+	okChars = urlOkChars();
+    url = strchr(url, '?');
+    if (url != NULL)
+	{
+	s = (UBYTE*)url+1;
+	while ((c = *s++) != 0)
+	    {
+	    if (!okChars[c])
+		{
+		errAbort("Character %c not allowed in URL %s", c, url);
+		}
+	    }
+	}
+    }
+}
+
+static void validateCgiUrls(struct htmlPage *page)
+/* Make sure URLs in page follow basic CGI encoding rules. */
+{
+struct htmlForm *form;
+struct slName *linkList = htmlPageLinks(page), *link;
+
+for (form = page->forms; form != NULL; form = form->next)
+    validateCgiUrl(form->action);
+for (link = linkList; link != NULL; link = link->next)
+    validateCgiUrl(link->name);
+slFreeList(&linkList);
+}
+
+static int countTagsOfType(struct htmlTag *tagList, char *type)
+/* Count number of tags of given type. */
+{
+struct htmlTag *tag;
+int count = 0;
+for (tag = tagList; tag != NULL; tag = tag->next)
+    if (sameString(tag->name, type))
+        ++count;
+return count;
+}
+
+static void checkExactlyOne(struct htmlTag *tagList, char *type)
+/* Check there is exactly one of tag in list. */
+{
+int count = countTagsOfType(tagList, type);
+if (count != 1)
+    errAbort("Expecting exactly 1 <%s>, got %d", type, count);
+}
+
+
+void htmlPageFormOrAbort(struct htmlPage *page)
+/* Aborts if no FORM found */
+{
+if (page == NULL)
+    errAbort("Can't validate NULL page");
+if (page->forms == NULL)
+    errAbort("No form found");
+}
+
+void htmlPageValidateOrAbort(struct htmlPage *page)
+/* Do some basic validations.  Aborts if there is a problem. */
+{
+struct htmlTag *tag;
+boolean gotTitle = FALSE;
+char *contentType = NULL;
+
+if (page == NULL)
+    errAbort("Can't validate NULL page");
+if (page->header != NULL)
+    contentType = hashFindVal(page->header, "Content-Type:");
+if (contentType == NULL || startsWith("text/html", contentType))
+    {
+    /* To simplify things upper case all tag names. */
+    for (tag = page->tags; tag != NULL; tag = tag->next)
+	touppers(tag->name);
+
+    checkExactlyOne(page->tags, "BODY");
+
+    /* Validate header, and make a suggestion or two */
+    if ((tag = page->tags) == NULL)
+	errAbort("No tags");
+    if (!sameWord(tag->name, "HTML"))
+	errAbort("Doesn't start with <HTML> tag");
+    tag = tag->next;
+    if (tag == NULL || !sameWord(tag->name, "HEAD"))
+	warn("<HEAD> tag does not follow <HTML> tag");
+    else
+	{
+	for (;;)
+	    {
+	    tag = tag->next;
+	    if (tag == NULL)
+		errAbort("Missing </HEAD>");
+	    if (sameWord(tag->name, "TITLE"))
+		gotTitle = TRUE;
+	    if (sameWord(tag->name, "/HEAD"))
+		break;
+	    }
+	if (!gotTitle)
+	    warn("No title in <HEAD>");
+	validateNestingTags(page, page->tags, tag, headNesters, ArraySize(headNesters));
+	tag = tag->next;
+	}
+    if (tag == NULL || !sameWord(tag->name, "BODY"))
+	errAbort("<BODY> tag does not follow <HTML> tag");
+    tag = validateBody(page, tag->next);
+    if (tag == NULL || !sameWord(tag->name, "/HTML"))
+	errAbort("Missing </HTML>");
+    validateCgiUrls(page);
+    }
+}
+
diff --git a/gbtools/src/blatSrc/lib/htmshell.c b/gbtools/src/blatSrc/lib/htmshell.c
new file mode 100644
index 0000000..5786bad
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/htmshell.c
@@ -0,0 +1,670 @@
+/* htmshell - a shell to wrap around programs that generate
+ * html files.  Write the html initial stuff (<head>, <body>, etc.)
+ * and the final stuff too.  Also catch errors here so that
+ * the html final stuff is written even if the program has
+ * to abort.
+ *
+ * This also includes a few routines to write commonly used
+ * html constructs such as images, horizontal lines. etc.
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "obscure.h"
+#include "cheapcgi.h"
+#include "htmshell.h"
+#include "errAbort.h"
+#include "dnautil.h"
+
+
+jmp_buf htmlRecover;
+
+boolean htmlWarnBoxSetUpAlready=FALSE;
+
+static bool NoEscape = FALSE;
+
+void htmlNoEscape()
+{
+NoEscape = TRUE;
+}
+
+void htmlDoEscape()
+{
+NoEscape = FALSE;
+}
+
+void htmlVaParagraph(char *line, va_list args)
+/* Print a line in it's own paragraph. */
+{
+fputs("<P>", stdout);
+vfprintf(stdout, line, args);
+fputs("</P>\n", stdout);
+}
+
+void htmlParagraph(char *line, ...)
+{
+va_list args;
+va_start(args, line);
+htmlVaParagraph(line, args);
+va_end(args);
+}
+
+void htmlVaCenterParagraph(char *line, va_list args)
+/* Center a line in it's own paragraph. */
+{
+fputs("<P ALIGN=\"CENTER\">", stdout);
+vfprintf(stdout, line, args);
+fputs("</P>\n", stdout);
+}
+
+void htmlCenterParagraph(char *line, ...)
+{
+va_list args;
+va_start(args, line);
+htmlVaCenterParagraph(line, args);
+va_end(args);
+}
+
+void htmlHorizontalLine()
+/* Print a horizontal line. */
+{
+printf("<HR ALIGN=\"CENTER\">");
+}
+
+void htmHorizontalLine(FILE *f)
+/* Print a horizontal line. */
+{
+fprintf(f, "<HR ALIGN=\"CENTER\">");
+}
+
+void htmlNbSpaces(int count)
+/* Print a number of non-breaking spaces. */
+{
+int i;
+for (i=0; i<count; ++i)
+    printf(" ");
+}
+
+void htmTextOut(FILE *f, char *s)
+/* Print out string to file, if necessary replacing > with > and the like */
+{
+char c;
+if (NoEscape)
+    {
+    fputs(s, f);
+    return;
+    }
+
+while ((c = *s++) != 0)
+    {
+    switch (c)
+        {
+	case '>':
+	    fputs(">", f);
+	    break;
+	case '<':
+	    fputs("<", f);
+	    break;
+	case '&':
+	    fputs("&", f);
+	    break;
+	case '"':
+	    fputs(""", f);
+	    break;
+	default:
+	    fputc(c, f);
+	    break;
+	}
+    }
+}
+
+void htmlTextOut(char *s)
+/* Print out string, if necessary replacing > with > and the like */
+{
+htmTextOut(stdout, s);
+}
+
+char *htmlTextStripTags(char *s)
+/* Returns a cloned string with all html tags stripped out */
+{
+if (s == NULL)
+    return NULL;
+char *scrubbed = needMem(strlen(s));
+char *from=s;
+char *to=scrubbed;
+while (*from!='\0')
+    {
+    if (*from == '<')
+        {
+        from++;
+        while (*from!='\0' && *from != '>')
+            from++;
+        if (*from == '\0')  // The last open tag was never closed!
+            break;
+        from++;
+        }
+    else
+        *to++ = *from++;
+    }
+return scrubbed;
+}
+
+char *htmlTextReplaceTagsWithChar(char *s, char ch)
+/* Returns a cloned string with all html tags replaced with given char (useful for tokenizing) */
+{
+if (s == NULL)
+    return NULL;
+char *scrubbed = needMem(strlen(s) + 1);
+char *from=s;
+char *to=scrubbed;
+while(*from!='\0')
+    {
+    if (*from == '<')
+        {
+        from++;
+        *to++ = ch;
+        while (*from!='\0' && *from != '>')
+            from++;
+        if (*from == '\0')  // The last open tag was never closed!
+            break;
+        from++;
+        }
+    else
+        *to++ = *from++;
+    }
+*to = '\0';
+return scrubbed;
+}
+
+char *htmlEncodeText(char *s,boolean tagsOkay)
+/* Returns a cloned string with quotes replaced by html codes.
+   Changes ',",\n and if not tagsOkay >,<,& to code equivalents.
+   This differs from cgiEncode as it handles text that will
+   be displayed in an html page or tooltip style title.  */
+{
+int size = strlen(s) + 3; // Add some slop
+if (tagsOkay)
+    size += countChars(s,'\n') * 4;
+else
+    {
+    size += countChars(s,'>' ) * 4;
+    size += countChars(s,'<' ) * 4;
+    size += countChars(s,'&' ) * 5;
+    size += countChars(s,'\n') * 6;
+    }
+size += countChars(s,'"' ) * 6;
+size += countChars(s,'\'') * 5;
+char *cleanQuote = needMem(size);
+safecpy(cleanQuote,size,s);
+
+// NOTE: While some internal HTML should work, a single quote (') will will screw it up!
+if (tagsOkay)
+    strSwapStrs(cleanQuote, size,"\n","<BR>" ); // new lines also break the html
+else
+    {
+    strSwapStrs(cleanQuote, size,"&","&" );  // '&' is not the start of a control char
+    strSwapStrs(cleanQuote, size,">",">"  );  // '>' is not the close of a tag
+    strSwapStrs(cleanQuote, size,"<","<"  );  // '<' is not the open of a tag
+    if (cgiClientBrowser(NULL,NULL,NULL) == btFF)
+        strSwapStrs(cleanQuote, size,"\n","|"); // FF does not support!  Use "|" for '|'
+                                                     // instead
+    else
+        strSwapStrs(cleanQuote, size,"\n","&#x0A;"); // '\n' is supported on some browsers
+    }
+strSwapStrs(cleanQuote, size,"\"","""); // Shield double quotes
+strSwapStrs(cleanQuote, size,"'" ,"'" ); // Shield single quotes
+
+return cleanQuote;
+}
+
+char *attributeEncode(char *str)
+{
+return htmlEncodeText(str, FALSE);
+}
+
+char *htmlWarnStartPattern()
+/* Return starting pattern for warning message. */
+{
+return "<!-- HGERROR-START -->\n";
+}
+
+char *htmlWarnEndPattern()
+/* Return ending pattern for warning message. */
+{
+return "<!-- HGERROR-END -->\n";
+}
+
+void htmlWarnBoxSetup(FILE *f)
+/* Creates an invisible, empty warning box than can be filled with errors
+ * and then made visible. */
+{
+// Only set this up once per page
+if (htmlWarnBoxSetUpAlready)
+    return;
+htmlWarnBoxSetUpAlready=TRUE;
+
+// NOTE: Making both IE and FF work is almost impossible.  Currently, in IE, if the message
+// is forced to the top (calling this routine after <BODY> then the box is not resizable
+// (dynamically adjusting to its contents). But if this setup is done later in the page
+// (at first warning), then IE does resize it.  Why?
+// FF3.0 (but not FF2.0) was resizable with the following, but it took some experimentation.
+// Remember what worked nicely on FF3.0:
+//      "var app=navigator.appName.substr(0,9); "
+//      "if(app == 'Microsoft') {warnBox.style.display='';} 
+//       else {warnBox.style.display=''; warnBox.style.width='auto';}"
+fprintf(f, "<script type='text/javascript'>\n");
+fprintf(f, "document.write(\"<center>"
+            "<div id='warnBox' style='display:none;'>"
+            "<CENTER><B id='warnHead'></B></CENTER>"
+            "<UL id='warnList'></UL>"
+            "<CENTER><button id='warnOK' onclick='hideWarnBox();return false;'></button></CENTER>"
+            "</div></center>\");\n");
+fprintf(f,"function showWarnBox() {"
+            "document.getElementById('warnOK').innerHTML=' OK ';"
+            "var warnBox=document.getElementById('warnBox');"
+            "warnBox.style.display=''; warnBox.style.width='65%%';"
+            "document.getElementById('warnHead').innerHTML='Warning/Error(s):';"
+            "window.scrollTo(0, 0);"
+          "}\n");
+fprintf(f,"function hideWarnBox() {"
+            "var warnBox=document.getElementById('warnBox');"
+            "warnBox.style.display='none';warnBox.innerHTML='';"
+            "var endOfPage = document.body.innerHTML.substr(document.body.innerHTML.length-20);"
+            "if(endOfPage.lastIndexOf('-- ERROR --') > 0) { history.back(); }"
+          "}\n"); // Note OK button goes to prev page when this page is interrupted by the error.
+fprintf(f,"window.onunload = function(){}; // Trick to avoid FF back button issue.\n");
+fprintf(f,"</script>\n");
+}
+
+void htmlVaWarn(char *format, va_list args)
+/* Write an error message. */
+{
+va_list argscp;
+va_copy(argscp, args);
+htmlWarnBoxSetup(stdout); // sets up the warnBox if it hasn't already been done.
+char warning[1024];
+vsnprintf(warning,sizeof(warning),format, args);
+char *encodedMessage = htmlEncodeText(warning,TRUE); // NOTE: While some internal HTML should work,
+                                                     // a single quote (') will will screw it up!
+printf("<script type='text/javascript'>{showWarnBox();"
+        "var warnList=document.getElementById('warnList');"
+        "warnList.innerHTML += '<li>%s</li>';}</script><!-- ERROR -->\n",encodedMessage); 
+                                     // NOTE that "--ERROR --" is needed at the end of this print!!
+freeMem(encodedMessage);
+
+/* Log useful CGI info to stderr */
+logCgiToStderr();
+
+/* write warning/error message to stderr so they get logged. */
+vfprintf(stderr, format, argscp);
+va_end(argscp);
+fflush(stderr);
+}
+
+void htmlAbort()
+/* Terminate HTML file. */
+{
+longjmp(htmlRecover, -1);
+}
+
+void htmlMemDeath()
+{
+errAbort("Out of memory.");
+}
+
+static void earlyWarningHandler(char *format, va_list args)
+/* Write an error message so user can see it before page is really started. */
+{
+static boolean initted = FALSE;
+if (!initted)
+    {
+    htmlStart("Very Early Error");
+    initted = TRUE;
+    }
+printf("%s", htmlWarnStartPattern());
+htmlVaParagraph(format,args);
+printf("%s", htmlWarnEndPattern());
+}
+
+static void earlyAbortHandler()
+/* Exit close web page during early abort. */
+{
+printf("</BODY></HTML>");
+exit(0);
+}
+
+void htmlPushEarlyHandlers()
+/* Push stuff to close out web page to make sensible error
+ * message during initialization. */
+{
+pushWarnHandler(earlyWarningHandler);
+pushAbortHandler(earlyAbortHandler);
+}
+
+
+static char *htmlStyle =
+    "<STYLE TYPE=\"text/css\">"
+    ".hiddenText {background-color: silver}"
+    ".normalText {background-color: white}"
+    "</STYLE>\n";
+
+char *htmlStyleUndecoratedLink =
+/* Style that gets rid of underline of links. */
+   "<STYLE TYPE=\"text/css\"> "
+   "<!-- "
+   "A {text-decoration: none} "
+   "-->"
+   "</STYLE>\n";
+
+// optional style set by theme, added after main style and thus
+// can overwrite main style settings
+static char *htmlStyleTheme = NULL;
+
+void htmlSetStyle(char *style)
+/* Set document wide style. A favorite style to
+ * use for many purposes is htmlStyleUndecoratedLink
+ * which will remove underlines from links.
+ * Needs to be called before htmlStart or htmShell. */
+{
+htmlStyle = style;
+}
+
+static char *htmlStyleSheet = NULL;
+void htmlSetStyleSheet(char *styleSheet)
+/* Set document wide style sheet by adding css name to HEAD part.
+ * Needs to be called before htmlStart or htmShell. */
+{
+htmlStyleSheet = styleSheet;
+}
+
+static char *htmlFormClass = NULL;
+void htmlSetFormClass(char *formClass)
+/* Set class in the BODY part. */
+{
+htmlFormClass = formClass;
+}
+
+void htmlSetStyleTheme(char *style)
+/* Set theme style. Needs to be called before htmlStart or htmShell. */
+{
+htmlStyleTheme = style;
+}
+
+static char *htmlBackground = NULL;
+
+void htmlSetBackground(char *imageFile)
+/* Set background - needs to be called before htmlStart
+ * or htmShell. */
+{
+htmlBackground = imageFile;
+}
+
+static int htmlBgColor = 0xFFFFFF;
+boolean gotBgColor = FALSE;
+
+void htmlSetBgColor(int color)
+/* Set background color - needs to be called before htmlStart
+ * or htmShell. */
+{
+htmlBgColor = color;
+gotBgColor = TRUE;
+}
+
+void htmlSetCookie(char* name, char* value, char* expires, char* path, char* domain, boolean isSecure)
+/* create a cookie with the given stats */
+{
+char* encoded_name;
+char* encoded_value;
+char* encoded_path = NULL;
+
+encoded_name = cgiEncode(name);
+encoded_value = cgiEncode(value);
+if(path != NULL)
+	encoded_path = cgiEncode(path);
+
+printf("Set-Cookie: %s=%s; ", encoded_name, encoded_value);
+
+if(expires != NULL)
+    printf("expires=%s; ", expires);
+
+if(path != NULL)
+    printf("path=%s; ", encoded_path);
+
+if(domain != NULL)
+    printf("domain=%s; ", domain);
+
+if(isSecure == TRUE)
+    printf("secure");
+
+printf("\n");
+}
+
+void printBodyTag(FILE *f)
+{
+// print starting BODY tag, including any appropriate attributes (class, background and bgcolor). 
+fprintf(f, "<BODY");
+struct slName *classes = NULL;
+
+slNameAddHead(&classes, "cgi");
+char *scriptName = cgiScriptName();
+if(isNotEmpty(scriptName))
+    {
+    char buf[FILENAME_LEN];
+    splitPath(scriptName, NULL, buf, NULL);
+    slNameAddHead(&classes, cloneString(buf));
+}
+if (htmlFormClass != NULL )
+    slNameAddHead(&classes, htmlFormClass);
+fprintf(f, " CLASS=\"%s\"", slNameListToString(classes, ' '));
+
+if (htmlBackground != NULL )
+    fprintf(f, " BACKGROUND=\"%s\"", htmlBackground);
+if (gotBgColor)
+    fprintf(f, " BGCOLOR=\"#%X\"", htmlBgColor);
+fputs(">\n",f);
+}
+
+void _htmStartWithHead(FILE *f, char *head, char *title, boolean printDocType, int dirDepth)
+/* Write out bits of header that both stand-alone .htmls
+ * and CGI returned .htmls need, including optional head info */
+{
+if (printDocType)
+    {
+//#define TOO_TIMID_FOR_CURRENT_HTML_STANDARDS
+#ifdef TOO_TIMID_FOR_CURRENT_HTML_STANDARDS
+    fputs("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2//EN\">\n", f);
+#else///ifndef TOO_TIMID_FOR_CURRENT_HTML_STANDARDS
+    char *browserVersion;
+    if (btIE == cgiClientBrowser(&browserVersion, NULL, NULL) && *browserVersion < '8')
+        fputs("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2//EN\">\n", f);
+    else
+        fputs("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" "
+              "\"http://www.w3.org/TR/html4/loose.dtd\">\n",f);
+    // Strict would be nice since it fixes atleast one IE problem (use of :hover CSS pseudoclass)
+#endif///ndef TOO_TIMID_FOR_CURRENT_HTML_STANDARDS
+    }
+fputs("<HTML>", f);
+fprintf(f,"<HEAD>\n%s<TITLE>%s</TITLE>\n", head, title);
+if (endsWith(title,"Login - UCSC Genome Browser")) 
+    fprintf(f,"\t<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html;CHARSET=iso-8859-1\">\n");
+fprintf(f, "\t<META http-equiv=\"Content-Script-Type\" content=\"text/javascript\">\n");
+if (htmlStyle != NULL)
+    fputs(htmlStyle, f);
+if (htmlStyleSheet != NULL)
+    fprintf(f,"<link href=\"%s\" rel=\"stylesheet\" type=\"text/css\">\n", htmlStyleSheet);
+if (htmlStyleTheme != NULL)
+    fputs(htmlStyleTheme, f);
+
+fputs("</HEAD>\n\n",f);
+printBodyTag(f);
+htmlWarnBoxSetup(f);
+}
+
+
+void htmlStart(char *title)
+/* Write the start of an html from CGI */
+{
+puts("Content-Type:text/html");
+puts("\n");
+_htmStartWithHead(stdout, "", title, TRUE, 1);
+}
+
+void htmStartWithHead(FILE *f, char *head, char *title)
+/* Write the start of a stand alone .html file, plus head info */
+{
+_htmStartWithHead(f, head, title, TRUE, 1);
+}
+
+void htmStart(FILE *f, char *title)
+/* Write the start of a stand alone .html file. */
+{
+htmStartWithHead(f, "", title);
+}
+
+void htmStartDirDepth(FILE *f, char *title, int dirDepth)
+/* Write the start of a stand alone .html file.  dirDepth is the number of levels
+ * beneath apache root that caller's HTML will appear to the web client.
+ * E.g. if writing HTML from cgi-bin, dirDepth is 1; if trash/body/, 2. */
+{
+_htmStartWithHead(f, "", title, TRUE, dirDepth);
+}
+
+/* Write the end of an html file */
+void htmEnd(FILE *f)
+{
+fputs("\n</BODY>\n</HTML>\n", f);
+}
+
+/* Write the end of a stand-alone html file */
+void htmlEnd()
+{
+htmEnd(stdout);
+}
+
+void htmlBadVar(char *varName)
+{
+cgiBadVar(varName);
+}
+
+/* Display centered image file. */
+void htmlImage(char *fileName, int width, int height)
+{
+printf("<P ALIGN=\"CENTER\"><IMG SRC=\"%s\" WIDTH=\"%d\" HEIGHT=\"%d\" ALIGN=\"BOTTOM\" BORDER=\"0\"></P>", fileName, width, height);
+}
+
+
+void htmErrOnlyShell(void (*doMiddle)())
+/* Wrap error recovery around call to doMiddle. */
+{
+int status;
+
+/* Set up error recovery. */
+status = setjmp(htmlRecover);
+
+/* Do your main thing. */
+if (status == 0)
+    {
+    doMiddle();
+    }
+}
+
+void htmEmptyShell(void (*doMiddle)(), char *method)
+/* Wrap error recovery and and input processing around call to doMiddle. */
+{
+int status;
+
+/* Set up error recovery (for out of memory and the like)
+ * so that we finish web page regardless of problems. */
+pushAbortHandler(htmlAbort);
+pushWarnHandler(htmlVaWarn);
+status = setjmp(htmlRecover);
+
+/* Do your main thing. */
+if (status == 0)
+    {
+    doMiddle();
+    }
+
+popWarnHandler();
+popAbortHandler();
+}
+
+
+/* Wrap an html file around the passed in function.
+ * The passed in function is already in the body. It
+ * should just make paragraphs and return.
+ */
+void htmShell(char *title, void (*doMiddle)(), char *method)
+{
+/* Preamble. */
+dnaUtilOpen();
+htmlStart(title);
+
+/* Call wrapper for error handling. */
+htmEmptyShell(doMiddle, method);
+
+/* Post-script. */
+htmlEnd();
+}
+
+/* Wrap an html file around the passed in function.
+ * The passed in function is already in the body. It
+ * should just make paragraphs and return.
+ * Method should be "query" or "get" or "post".
+param title - The HTML page title
+param head - The head text: can be a refresh directive or javascript
+param method - The function pointer to execute in the middle
+param method - The browser request method to use
+ */
+void htmShellWithHead( char *title, char *head, void (*doMiddle)(), char *method)
+{
+/* Preamble. */
+dnaUtilOpen();
+
+puts("Content-Type:text/html");
+puts("\n");
+
+puts("<HTML>");
+printf("<HEAD>%s<TITLE>%s</TITLE>\n</HEAD>\n\n", head, title);
+printBodyTag(stdout);
+
+htmlWarnBoxSetup(stdout);// Sets up a warning box which can be filled with errors as they occur
+
+/* Call wrapper for error handling. */
+htmEmptyShell(doMiddle, method);
+
+/* Post-script. */
+htmlEnd();
+}
+
+/* Include an HTML file in a CGI */
+void htmlIncludeFile(char *path)
+{
+char *str = NULL;
+size_t len = 0;
+
+if (path == NULL)
+    errAbort("Program error: including null file");
+if (!fileExists(path))
+    errAbort("Missing file %s", path);
+readInGulp(path, &str, &len);
+
+if (len <= 0)
+    errAbort("Error reading included file: %s", path);
+
+puts(str);
+freeMem(str);
+}
+
+/* Include an HTML file in a CGI.
+ *   The file path is relative to the web server document root */
+void htmlIncludeWebFile(char *file)
+{
+char path[256];
+char *docRoot = "/usr/local/apache/htdocs";
+
+safef(path, sizeof path, "%s/%s", docRoot, file);
+htmlIncludeFile(path);
+}
+
diff --git a/gbtools/src/blatSrc/lib/https.c b/gbtools/src/blatSrc/lib/https.c
new file mode 100644
index 0000000..e26f1ee
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/https.c
@@ -0,0 +1,391 @@
+/* Connect via https. */
+
+/* Copyright (C) 2012 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "config.h"
+
+#ifdef USE_SSL
+
+#include "openssl/ssl.h"
+#include "openssl/err.h"
+
+#include <sys/socket.h>
+#include <unistd.h>
+#include <pthread.h>
+
+#include "common.h"
+#include "errAbort.h"
+#include "net.h"
+
+
+static pthread_mutex_t *mutexes = NULL;
+ 
+static unsigned long openssl_id_callback(void)
+{
+return ((unsigned long)pthread_self());
+}
+ 
+static void openssl_locking_callback(int mode, int n, const char * file, int line)
+{
+if (mode & CRYPTO_LOCK)
+    pthread_mutex_lock(&mutexes[n]);
+else
+    pthread_mutex_unlock(&mutexes[n]);
+}
+ 
+void openssl_pthread_setup(void)
+{
+int i;
+int numLocks = CRYPTO_num_locks();
+AllocArray(mutexes, numLocks);
+for (i = 0;  i < numLocks;  i++)
+    pthread_mutex_init(&mutexes[i], NULL);
+CRYPTO_set_id_callback(openssl_id_callback);
+CRYPTO_set_locking_callback(openssl_locking_callback);
+}
+ 
+
+struct netConnectHttpsParams
+/* params to pass to thread */
+{
+pthread_t thread;
+char *hostName;
+int port;
+int sv[2]; /* the pair of socket descriptors */
+};
+
+static void xerrno(char *msg)
+{
+fprintf(stderr, "%s : %s\n", strerror(errno), msg); fflush(stderr);
+}
+
+static void xerr(char *msg)
+{
+fprintf(stderr, "%s\n", msg); fflush(stderr);
+}
+
+void openSslInit()
+/* do only once */
+{
+static boolean done = FALSE;
+static pthread_mutex_t osiMutex = PTHREAD_MUTEX_INITIALIZER;
+pthread_mutex_lock( &osiMutex );
+if (!done)
+    {
+    SSL_library_init();
+    ERR_load_crypto_strings();
+    ERR_load_SSL_strings();
+    OpenSSL_add_all_algorithms();
+    openssl_pthread_setup();
+    done = TRUE;
+    }
+pthread_mutex_unlock( &osiMutex );
+}
+
+
+void *netConnectHttpsThread(void *threadParam)
+/* use a thread to run socket back to user */
+{
+/* child */
+
+struct netConnectHttpsParams *params = threadParam;
+
+pthread_detach(params->thread);  // this thread will never join back with it's progenitor
+
+int fd=0;
+
+char hostnameProto[256];
+
+BIO *sbio;
+SSL_CTX *ctx;
+SSL *ssl;
+
+openSslInit();
+
+ctx = SSL_CTX_new(SSLv23_client_method());
+
+fd_set readfds;
+fd_set writefds;
+int err;
+struct timeval tv;
+
+
+/* TODO checking certificates 
+
+char *certFile = NULL;
+char *certPath = NULL;
+if (certFile || certPath)
+    {
+    SSL_CTX_load_verify_locations(ctx,certFile,certPath);
+#if (OPENSSL_VERSION_NUMBER < 0x0090600fL)
+    SSL_CTX_set_verify_depth(ctx,1);
+#endif
+    }
+
+// verify paths and mode.
+
+*/
+
+
+sbio = BIO_new_ssl_connect(ctx);
+
+BIO_get_ssl(sbio, &ssl);
+if(!ssl) 
+    {
+    xerr("Can't locate SSL pointer");
+    goto cleanup;
+    }
+
+/* Don't want any retries since we are non-blocking bio now */
+//SSL_set_mode(ssl, SSL_MODE_AUTO_RETRY);
+
+
+safef(hostnameProto,sizeof(hostnameProto),"%s:%d",params->hostName,params->port);
+BIO_set_conn_hostname(sbio, hostnameProto);
+
+BIO_set_nbio(sbio, 1);     /* non-blocking mode */
+
+while (1) 
+    {
+    if (BIO_do_connect(sbio) == 1) 
+	{
+	break;  /* Connected */
+	}
+    if (! BIO_should_retry(sbio)) 
+	{
+	xerr("BIO_do_connect() failed");
+	char s[256];	
+	safef(s, sizeof s, "SSL error: %s", ERR_reason_error_string(ERR_get_error()));
+	xerr(s);
+	goto cleanup;
+	}
+
+    fd = BIO_get_fd(sbio, NULL);
+    if (fd == -1) 
+	{
+	xerr("unable to get BIO descriptor");
+	goto cleanup;
+	}
+    FD_ZERO(&readfds);
+    FD_ZERO(&writefds);
+    if (BIO_should_read(sbio)) 
+	{
+	FD_SET(fd, &readfds);
+	}
+    else if (BIO_should_write(sbio)) 
+	{
+	FD_SET(fd, &writefds);
+	}
+    else 
+	{  /* BIO_should_io_special() */
+	FD_SET(fd, &readfds);
+	FD_SET(fd, &writefds);
+	}
+    tv.tv_sec = (long) (DEFAULTCONNECTTIMEOUTMSEC/1000);  // timeout default 10 seconds
+    tv.tv_usec = (long) (((DEFAULTCONNECTTIMEOUTMSEC/1000)-tv.tv_sec)*1000000);
+
+    err = select(fd + 1, &readfds, &writefds, NULL, &tv);
+    if (err < 0) 
+	{
+	xerr("select() error");
+	goto cleanup;
+	}
+
+    if (err == 0) 
+	{
+	char s[256];	
+	safef(s, sizeof s, "connection timeout to %s", params->hostName);
+	xerr(s);
+	goto cleanup;
+	}
+    }
+
+
+/* TODO checking certificates 
+
+if (certFile || certPath)
+    if (!check_cert(ssl, host))
+	return -1;
+
+*/
+
+/* we need to wait on both the user's socket and the BIO SSL socket 
+ * to see if we need to ferry data from one to the other */
+
+
+char sbuf[32768];  // socket buffer sv[1] to user
+char bbuf[32768];  // bio buffer
+int srd = 0;
+int swt = 0;
+int brd = 0;
+int bwt = 0;
+while (1) 
+    {
+
+    // Do NOT move this outside the while loop. 
+    /* Get underlying file descriptor, needed for select call */
+    fd = BIO_get_fd(sbio, NULL);
+    if (fd == -1) 
+	{
+	xerr("BIO doesn't seem to be initialized in https, unable to get descriptor.");
+	goto cleanup;
+	}
+
+
+    FD_ZERO(&readfds);
+    FD_ZERO(&writefds);
+
+    if (brd == 0)
+	FD_SET(fd, &readfds);
+    if (swt < srd)
+	FD_SET(fd, &writefds);
+    if (srd == 0)
+	FD_SET(params->sv[1], &readfds);
+
+    tv.tv_sec = (long) (DEFAULTCONNECTTIMEOUTMSEC/1000);  // timeout default 10 seconds
+    tv.tv_usec = (long) (((DEFAULTCONNECTTIMEOUTMSEC/1000)-tv.tv_sec)*1000000);
+
+    err = select(max(fd,params->sv[1]) + 1, &readfds, &writefds, NULL, &tv);
+
+    /* Evaluate select() return code */
+    if (err < 0) 
+	{
+	xerr("error during select()");
+	goto cleanup;
+	}
+    else if (err == 0) 
+	{
+	/* Timed out - just quit */
+	xerr("https timeout expired");
+	goto cleanup;
+	}
+
+    else 
+	{
+	if (FD_ISSET(params->sv[1], &readfds))
+	    {
+	    swt = 0;
+	    srd = read(params->sv[1], sbuf, 32768);
+	    if (srd == -1)
+		{
+		if (errno != 104) // udcCache often closes causing "Connection reset by peer"
+		    xerrno("error reading https socket");
+		goto cleanup;
+		}
+	    if (srd == 0) 
+		break;  // user closed socket, we are done
+	    }
+
+	if (FD_ISSET(fd, &writefds))
+	    {
+	    int swtx = BIO_write(sbio, sbuf+swt, srd-swt);
+	    if (swtx <= 0)
+		{
+		if (!BIO_should_write(sbio))
+		    {
+		    ERR_print_errors_fp(stderr);
+		    xerr("Error writing SSL connection");
+		    goto cleanup;
+		    }
+		}
+	    else
+		{
+		swt += swtx;
+		if (swt >= srd)
+		    {
+		    swt = 0;
+		    srd = 0;
+		    }
+		}
+	    }
+
+	if (FD_ISSET(fd, &readfds))
+	    {
+	    bwt = 0;
+	    brd = BIO_read(sbio, bbuf, 32768);
+
+	    if (brd <= 0)
+		{
+		if (BIO_should_read(sbio))
+		    {
+		    brd = 0;
+		    continue;
+		    }
+		else
+		    {
+		    if (brd == 0) break;
+		    ERR_print_errors_fp(stderr);
+		    xerr("Error reading SSL connection");
+		    goto cleanup;
+		    }
+		}
+	    // write the https data received immediately back on socket to user, and it's ok if it blocks.
+	    while(bwt < brd)
+		{
+		int bwtx = write(params->sv[1], bbuf+bwt, brd-bwt);
+		if (bwtx == -1)
+		    {
+		    if ((errno != 104)  // udcCache often closes causing "Connection reset by peer"
+		     && (errno !=  32)) // udcCache often closes causing "Broken pipe"
+			xerrno("error writing https data back to user socket");
+		    goto cleanup;
+		    }
+		bwt += bwtx;
+		}
+	    brd = 0;
+	    bwt = 0;
+	    }
+	}
+    }
+
+cleanup:
+
+BIO_free_all(sbio);
+close(params->sv[1]);  /* we are done with it */
+
+return NULL;
+}
+
+int netConnectHttps(char *hostName, int port)
+/* Return socket for https connection with server or -1 if error. */
+{
+
+fflush(stdin);
+fflush(stdout);
+fflush(stderr);
+
+struct netConnectHttpsParams *params;
+AllocVar(params);
+params->hostName = cloneString(hostName);
+params->port = port;
+
+socketpair(AF_UNIX, SOCK_STREAM, 0, params->sv);
+
+int rc;
+rc = pthread_create(&params->thread, NULL, netConnectHttpsThread, (void *)params);
+if (rc)
+    {
+    errAbort("Unexpected error %d from pthread_create(): %s",rc,strerror(rc));
+    }
+
+/* parent */
+
+return params->sv[0];
+
+}
+
+#else
+
+#include <stdarg.h>
+#include "common.h"
+#include "errAbort.h"
+
+int netConnectHttps(char *hostName, int port)
+/* Start https connection with server or die. */
+{
+errAbort("No openssl available in netConnectHttps for %s : %d", hostName, port);
+return -1;   /* will never get to here, make compiler happy */
+}
+
+#endif
diff --git a/gbtools/src/blatSrc/lib/intExp.c b/gbtools/src/blatSrc/lib/intExp.c
new file mode 100644
index 0000000..67c3d2c
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/intExp.c
@@ -0,0 +1,153 @@
+/* Below is the worlds sleaziest little numerical expression
+ * evaluator. Used to do only ints, now does doubles as well. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "kxTok.h"
+
+
+static struct kxTok *tok;
+
+#define nextTok() (tok = tok->next) 
+
+#ifdef DEBUG
+static void nextTok()
+/* Advance to next token. */
+{
+if (tok == NULL)
+    printf("(null)");
+else
+    {
+    printf("'%s' -> ", tok->string);
+    if (tok->next == NULL)
+        printf("(null)\n");
+    else
+        printf("'%s'\n", tok->next->string);
+    }
+tok = tok->next;
+}
+#endif /* DEBUG */
+
+
+static double expression();
+/* Forward declaration of main expression handler. */
+
+static double number()
+/* Return number. */
+{
+double val;
+if (tok == NULL)
+    errAbort("Parse error in numerical expression");
+if (!isdigit(tok->string[0]))
+    errAbort("Expecting number, got %s", tok->string);
+val = atof(tok->string);
+nextTok();
+return val;
+}
+
+static double atom()
+/* Return parenthetical expression or number. */
+{
+double val;
+if (tok->type == kxtOpenParen)
+    {
+    nextTok();
+    val = expression();
+    if (tok->type == kxtCloseParen)
+	{
+        nextTok();
+	return val;
+	}
+    else
+	{
+        errAbort("Unmatched parenthesis");
+	return 0;
+	}
+    }
+else
+    return number();
+}
+
+
+static double uMinus()
+/* Unary minus. */
+{
+double val;
+if (tok->type == kxtSub)
+    {
+    nextTok();
+    val = -atom();
+    return val;
+    }
+else
+    return atom();
+}
+
+static double mulDiv()
+/* Multiplication or division. */
+{
+double val = uMinus();
+for (;;)
+    {
+    if (tok->type == kxtMul)
+	{
+	nextTok();
+	val *= uMinus();
+	}
+    else if (tok->type == kxtDiv)
+	{
+	nextTok();
+	val /= uMinus();
+	}
+    else
+        break;
+    }
+return val;
+}
+
+static double addSub()
+/* Addition or subtraction. */
+{
+double val;
+val = mulDiv();
+for (;;)
+    {
+    if (tok->type == kxtAdd)
+	{
+	nextTok();
+	val += mulDiv();
+	}
+    else if (tok->type == kxtSub)
+	{
+	nextTok();
+	val -= mulDiv();
+	}
+    else
+        break;
+    }
+return val;
+}
+
+static double expression()
+/* Wraps around lowest level of expression. */
+{
+return addSub();
+}
+
+double doubleExp(char *text)
+/* Convert text to double expression and evaluate. */
+{
+double val;
+struct kxTok *tokList = tok = kxTokenize(text, FALSE);
+val = expression();
+slFreeList(&tokList);
+return val;
+}
+
+int intExp(char *text)
+/* Convert text to int expression and evaluate. */
+{
+return round(doubleExp(text));
+}
diff --git a/gbtools/src/blatSrc/lib/intValTree.c b/gbtools/src/blatSrc/lib/intValTree.c
new file mode 100644
index 0000000..bc205c3
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/intValTree.c
@@ -0,0 +1,105 @@
+/* intValTree - a binary tree with integer keys and void values.  This is based on the 
+ * red/black self-balancing binary tree algorithm in the rbTree module. */
+
+/* Copyright (C) 2008 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "localmem.h"
+#include "rbTree.h"
+#include "intValTree.h"
+
+int intValCmp(void *va, void *vb)
+/* Return -1 if a before b,  0 if a and b overlap,
+ * and 1 if a after b. */
+{
+struct intVal *a = va;
+struct intVal *b = vb;
+return a->key - b->key;
+}
+
+struct rbTree *intValTreeNew()
+/* Create a new, empty, tree with integer keys and void values. */
+{
+return rbTreeNew(intValCmp);
+}
+
+struct intVal *intValTreeAdd(struct rbTree *tree, int key, void *val)
+/* Add to binary tree.  Will abort if key is already in tree. */
+{
+struct intVal *iv;
+lmAllocVar(tree->lm, iv);
+iv->key = key;
+iv->val = val;
+if (rbTreeAdd(tree, iv) != NULL)
+    errAbort("Key %d already exists in tree", key);
+return iv;
+}
+
+struct intVal *intValTreeUpdate(struct rbTree *tree, int key, void *val)
+/* Add to binary tree. If key is already in tree just updates it with val. */
+{
+struct intVal *iv = intValTreeLookup(tree, key);
+if (iv != NULL)
+    iv->val = val;
+else
+    iv = intValTreeAdd(tree, key, val);
+return iv;
+}
+
+struct intVal *intValTreeRemove(struct rbTree *tree, int key)
+/* Removes given tree from key. */
+{
+struct intVal fullKey;
+fullKey.key = key;
+return rbTreeRemove(tree, &fullKey);
+}
+
+struct intVal *intValTreeLookup(struct rbTree *tree, int key)
+/* Returns intVal associated with given key, or NULL if none exists. */
+{
+struct intVal fullKey;
+fullKey.key = key;
+return rbTreeFind(tree, &fullKey);
+}
+
+
+void *intValTreeFind(struct rbTree *tree, int key)
+/* Returns value associated with given key, or NULL if none exists. */
+{
+struct intVal fullKey;
+fullKey.key = key;
+struct intVal *iv = rbTreeFind(tree, &fullKey);
+if (iv == NULL)
+    return NULL;
+return iv->val;
+}
+
+void *intValTreeMustFind(struct rbTree *tree, int key)
+/* Return value associated with given key. Aborts if none exists. */
+{
+struct intVal fullKey;
+fullKey.key = key;
+struct intVal *iv = rbTreeFind(tree, &fullKey);
+if (iv == NULL)
+    errAbort("%d is not in tree", key);
+return iv->val;
+}
+
+void doAllKeys(void *item, void *context)
+/* Callback function for tree traversal. */
+{
+int **pPt = context;
+struct intVal *iv = item;
+**pPt = iv->key;
+*pPt += 1;
+}
+
+int *intValTreeKeys(struct rbTree *tree)
+/* Returns array of keys (size is tree->n).  You freeMem this when done. */
+{
+int *results, *pt;
+pt = AllocArray(results, tree->n);
+rbTreeTraverseWithContext(tree, doAllKeys, &pt);
+return results;
+}
diff --git a/gbtools/src/blatSrc/lib/internet.c b/gbtools/src/blatSrc/lib/internet.c
new file mode 100644
index 0000000..6a4c673
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/internet.c
@@ -0,0 +1,162 @@
+/* internet - some stuff to make it easier to use
+ * internet sockets and the like. */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+#include "common.h"
+#include "internet.h"
+
+
+boolean internetIsDottedQuad(char *s)
+/* Returns TRUE if it looks like s is a dotted quad. */
+{
+int i;
+if (!isdigit(s[0]))
+    return FALSE;
+for (i=0; i<3; ++i)
+    {
+    s = strchr(s, '.');
+    if (s == NULL)
+        return FALSE;
+    s += 1;
+    if (!isdigit(s[0]))
+        return FALSE;
+    }
+return TRUE;
+}
+
+bits32 internetHostIp(char *hostName)
+/* Get IP v4 address (in host byte order) for hostName.
+ * Warn and return 0 if there's a problem. */
+{
+bits32 ret;
+if (internetIsDottedQuad(hostName))
+    {
+    internetDottedQuadToIp(hostName, &ret);
+    }
+else
+    {
+    /* getaddrinfo is thread-safe and widely supported */
+    struct addrinfo hints, *res;
+    struct in_addr addr;
+    int err;
+
+    zeroBytes(&hints, sizeof(hints));
+    hints.ai_family = AF_INET;
+
+    if ((err = getaddrinfo(hostName, NULL, &hints, &res)) != 0) 
+	{
+	warn("getaddrinfo() error on hostName=%s: %s\n", hostName, gai_strerror(err));
+	return 0;
+	}
+
+    addr = ((struct sockaddr_in *)(res->ai_addr))->sin_addr;
+
+    ret = ntohl((uint32_t)addr.s_addr);
+
+    freeaddrinfo(res);
+
+    }
+return ret;
+}
+
+boolean internetFillInAddress(char *hostName, int port, struct sockaddr_in *address)
+/* Fill in address. Return FALSE if can't.  */
+{
+ZeroVar(address);
+address->sin_family = AF_INET;
+address->sin_port = htons(port);
+if (hostName == NULL)
+    address->sin_addr.s_addr = INADDR_ANY;
+else
+    {
+    if ((address->sin_addr.s_addr = htonl(internetHostIp(hostName))) == 0)
+	return FALSE;
+    }
+return TRUE;
+}
+
+boolean internetIpToDottedQuad(bits32 ip, char dottedQuad[17])
+/* Convert IP4 address in host byte order to dotted quad 
+ * notation.  Warn and return FALSE if there's a 
+ * problem. */
+{
+#ifndef __CYGWIN32__
+struct in_addr ia;
+zeroBytes(dottedQuad, 17);
+ZeroVar(&ia);
+ia.s_addr = htonl(ip);
+if (inet_ntop(AF_INET, &ia, dottedQuad, 16) == NULL)
+    {
+    warn("conversion problem on 0x%x in internetIpToDottedQuad: %s", 
+    	ip, strerror(errno));
+    return FALSE;
+    }
+return TRUE;
+#else
+warn("Sorry, internetIpToDottedQuad not supported in Windows.");
+return FALSE;
+#endif
+}
+
+boolean internetDottedQuadToIp(char *dottedQuad, bits32 *retIp)
+/* Convert dotted quad format address to IP4 address in
+ * host byte order.  Warn and return FALSE if there's a 
+ * problem. */
+{
+#ifndef __CYGWIN32__
+struct in_addr ia;
+if (inet_pton(AF_INET, dottedQuad, &ia) < 0)
+    {
+    warn("internetDottedQuadToIp problem on %s: %s", dottedQuad, strerror(errno));
+    return FALSE;
+    }
+*retIp = ntohl(ia.s_addr);
+return TRUE;
+#else
+warn("Sorry, internetDottedQuadToIp not supported in Windows.");
+return FALSE;
+#endif
+}
+
+void internetParseDottedQuad(char *dottedQuad, unsigned char quad[4])
+/* Parse dotted quads into quad */
+{
+char *s = dottedQuad;
+int i;
+if (!internetIsDottedQuad(s))
+    errAbort("%s is not a dotted quad", s);
+for (i=0; i<4; ++i)
+    {
+    quad[i] = atoi(s);
+    s = strchr(s, '.') + 1;
+    }
+}
+
+void internetUnpackIp(bits32 packed, unsigned char unpacked[4])
+/* Convert from 32 bit to 4-byte format with most significant
+ * byte first. */
+{
+int i;
+for (i=3; i>=0; --i)
+    {
+    unpacked[i] = (packed&0xff);
+    packed >>= 8;
+    }
+}
+
+boolean internetIpInSubnet(unsigned char unpackedIp[4], unsigned char subnet[4])
+/* Return true if unpacked IP address is in subnet. */
+{
+int i;
+for (i=0; i<4; ++i)
+    {
+    unsigned char c = subnet[i];
+    if (c == 255)
+        return TRUE;
+    if (c != unpackedIp[i])
+        return FALSE;
+    }
+return TRUE;
+}
+
diff --git a/gbtools/src/blatSrc/lib/itsa.c b/gbtools/src/blatSrc/lib/itsa.c
new file mode 100644
index 0000000..083ab5e
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/itsa.c
@@ -0,0 +1,187 @@
+/* itsa - indexed traversable suffix array.  Used for doing quick genomic searches.
+ * Use itsaMake utility to create one of these files , and the routines here to access it.  
+ * See comment by itsaFileHeader for file format. See src/shortReads/itsaMake/itsa.doc as well 
+ * for an explanation of the data structures, particularly the traverse array. */
+/* This file is copyright 2008 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include <sys/mman.h>
+#include "net.h"
+#include "itsa.h"
+
+/* Hex conversions to assist debugging:
+ * 0=AA 1=AC 2=AG 3=AT 4=CA 5=CC 6=CG 7=CT
+ * 8=GA 9=GC A=GG B=GT C=TA D=TC E=TG F=TT
+ */
+
+/* Table to convert letters to one of the above values. */
+int itsaBaseToVal[256];
+
+void itsaBaseToValInit()
+/* Initialize itsaBaseToVal array */
+{
+/* Fill out itsaBaseToVal array - A is already done. */
+itsaBaseToVal[(int)'C'] = itsaBaseToVal[(int)'c'] = ITSA_C;
+itsaBaseToVal[(int)'G'] = itsaBaseToVal[(int)'g'] = ITSA_G;
+itsaBaseToVal[(int)'T'] = itsaBaseToVal[(int)'t'] = ITSA_T;
+}
+
+int itsaDnaToBinary(char *dna, int size)
+/* Convert dna to binary representation. */
+{
+int i;
+int val = 0;
+for (i=0; i<size; ++i)
+    {
+    val <<= 2;
+    val += itsaBaseToVal[(int)dna[i]];
+    }
+return val;
+}
+
+
+static void *pointerOffset(void *pt, bits64 offset)
+/* A little wrapper around pointer arithmetic in terms of bytes. */
+{
+char *s = pt;
+return s + offset;
+}
+
+struct itsa *itsaRead(char *fileName, boolean memoryMap)
+/* Read in a itsa from a file.  Does this via memory mapping if you like,
+ * which will be faster typically for about 100 reads, and slower for more
+ * than that (_much_ slower for thousands of reads and more). */
+{
+/* Open file (low level), read in header, and check it. */
+int fd = open(fileName, O_RDONLY);
+if (fd < 0)
+    errnoAbort("Can't open %s", fileName);
+struct itsaFileHeader h;
+if (netReadAll(fd, &h, sizeof(h)) < sizeof(h))
+    errnoAbort("Couldn't read header of file %s", fileName);
+if (h.magic != ITSA_MAGIC)
+    errAbort("%s does not seem to be a itsa file.", fileName);
+if (h.majorVersion > ITSA_MAJOR_VERSION)
+    errAbort("%s is a newer, incompatible version of itsa format. "
+             "This program works on version %d and below. "
+	     "%s is version %d.",  fileName, ITSA_MAJOR_VERSION, fileName, h.majorVersion);
+
+struct itsa *itsa;
+verbose(2, "itsa file %s size %lld\n", fileName, h.size);
+
+/* Get a pointer to data in memory, via memory map, or allocation and read. */
+struct itsaFileHeader *header ;
+if (memoryMap)
+    {
+#ifdef MACHTYPE_sparc
+    header = (struct itsaFileHeader *)mmap(NULL, h.size, PROT_READ, MAP_SHARED, fd, 0);
+#else
+    header = mmap(NULL, h.size, PROT_READ, MAP_FILE|MAP_SHARED, fd, 0);
+#endif
+    if (header == (void*)(-1))
+	errnoAbort("Couldn't mmap %s, sorry", fileName);
+    }
+else
+    {
+    header = needHugeMem(h.size);
+    if (lseek(fd, 0, SEEK_SET) < 0)
+	errnoAbort("Couldn't seek back to start of itsa file %s.  "
+		   "Splix files must be random access files, not pipes and the like"
+		   , fileName);
+    if (netReadAll(fd, header, h.size) < h.size)
+        errnoAbort("Couldn't read all of itsa file %s.", fileName);
+    }
+
+/* Allocate wrapper structure and fill it in. */
+AllocVar(itsa);
+itsa->header = header;
+itsa->isMapped = memoryMap;
+
+/* Make an array for easy access to chromosome names. */
+int chromCount = header->chromCount;
+char **chromNames = AllocArray(itsa->chromNames, chromCount);
+char *s = pointerOffset(header, sizeof(*header) );
+int i;
+for (i=0; i<chromCount; ++i)
+    {
+    chromNames[i] = s;
+    s += strlen(s)+1;
+    }
+
+/* Keep track of where we are in memmap. */
+bits64 mapOffset = sizeof(*header) + header->chromNamesSize;
+
+/* Point into chromSizes array. */
+bits32 *chromSizes = itsa->chromSizes 
+	= pointerOffset(header, mapOffset);
+mapOffset += sizeof(bits32) * chromCount;
+
+verbose(2, "total dna size %lld in %d chromosomes\n", (long long)header->dnaDiskSize, header->chromCount);
+itsa->allDna = pointerOffset(header, mapOffset);
+mapOffset += header->dnaDiskSize;
+
+/* Calculate chromOffset array. */
+bits32 offset = 0;
+bits32 *chromOffsets = AllocArray(itsa->chromOffsets, chromCount);
+for (i=0; i<chromCount; ++i)
+    {
+    chromOffsets[i] = offset;
+    offset += chromSizes[i] + 1;
+    verbose(2, "itsa contains %s,  %d bases, %d offset\n", 
+    	itsa->chromNames[i], (int)itsa->chromSizes[i], (int)chromOffsets[i]);
+    }
+
+/* Point to the suffix array. */
+itsa->array = pointerOffset(header, mapOffset);
+mapOffset += header->arraySize * sizeof(bits32);
+
+/* Point to the traverse array. */
+itsa->traverse = pointerOffset(header, mapOffset);
+mapOffset += header->arraySize * sizeof(bits32);
+
+/* Point to the 13-mer index. */
+itsa->index13 = pointerOffset(header, mapOffset);
+mapOffset += itsaSlotCount * sizeof(bits32);
+
+/* Make cursors array (faster to calculate than to load, and doesn't depend on data). */
+itsa->cursors13 = pointerOffset(header, mapOffset);
+mapOffset += itsaSlotCount * sizeof(UBYTE);
+
+assert(mapOffset == header->size);	/* Sanity check */
+return itsa;
+}
+
+void itsaFree(struct itsa **pItsa)
+/* Free up resources associated with index. */
+{
+struct itsa *itsa = *pItsa;
+if (itsa != NULL)
+    {
+    freeMem(itsa->chromNames);
+    freeMem(itsa->chromOffsets);
+    if (itsa->isMapped)
+	munmap((void *)itsa->header, itsa->header->size);
+    else
+	freeMem(itsa->header);
+    freez(pItsa);
+    }
+}
+
+int itsaOffsetToChromIx(struct itsa *itsa, bits32 tOffset)
+/* Figure out index of chromosome containing tOffset */
+{
+int i;
+int chromCount = itsa->header->chromCount;
+/* TODO - convert to binary search - at least chrom list is sorted in itsas. */
+for (i=0; i<chromCount; ++i)
+    {
+    int chromStart = itsa->chromOffsets[i];
+    int chromEnd = chromStart + itsa->chromSizes[i];
+    if (tOffset >= chromStart && tOffset < chromEnd)
+        return i;
+    }
+errAbort("tOffset %d out of range\n", tOffset);
+return -1;
+}
+
diff --git a/gbtools/src/blatSrc/lib/iupac.c b/gbtools/src/blatSrc/lib/iupac.c
new file mode 100644
index 0000000..9289d51
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/iupac.c
@@ -0,0 +1,216 @@
+/* iupac - routines to help cope with IUPAC ambiguity codes in DNA sequence. */
+
+/* Copyright (C) 2012 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "dnautil.h"
+#include "iupac.h"
+
+boolean iupacMatchLower(char iupac, char dna)
+/* See if iupac ambiguity code matches dna character where
+ * both are lower case */
+{
+switch (iupac)
+    {
+    case 'a':
+        return dna == 'a';
+    case 'c':
+        return dna == 'c';
+    case 'g':
+        return dna == 'g';
+    case 't':
+    case 'u':
+        return dna == 't';
+    case 'r':
+        return dna == 'a' || dna == 'g';
+    case 'y':
+        return dna == 'c' || dna == 't';
+    case 's':
+        return dna == 'g' || dna == 'c';
+    case 'w':
+        return dna == 'a' || dna == 't';
+    case 'k':
+        return dna == 'g' || dna == 't';
+    case 'm':
+        return dna == 'a' || dna == 'c';
+    case 'b':
+        return dna == 'c' || dna == 'g' || dna == 't';
+    case 'd':
+        return dna == 'a' || dna == 'g' || dna == 't';
+    case 'h':
+        return dna == 'a' || dna == 'c' || dna == 't';
+    case 'v':
+        return dna == 'a' || dna == 'c' || dna == 'g';
+    case 'n':
+        return TRUE;
+    default:
+        errAbort("Unrecognized IUPAC code '%c'", iupac);
+	return FALSE;   // Not actually used but prevent compiler complaints
+    }
+}
+
+boolean iupacMatch(char iupac, char dna)
+/* See if iupac ambiguity code matches dna character */
+{
+return iupacMatchLower(tolower(iupac), tolower(dna));
+}
+
+boolean isIupacLower(char c)
+/* See if iupac c is a legal (lower case) iupac char */
+{
+switch (c)
+    {
+    case 'a':
+    case 'c':
+    case 'g':
+    case 't':
+    case 'u':
+    case 'r':
+    case 'y':
+    case 's':
+    case 'w':
+    case 'k':
+    case 'm':
+    case 'b':
+    case 'd':
+    case 'h':
+    case 'v':
+    case 'n':
+        return TRUE;
+    default:
+	return FALSE;
+    }
+}
+
+boolean isIupac(char c)
+/* See if iupac c is a legal iupac char */
+{
+return isIupacLower(tolower(c));
+}
+
+void iupacFilter(char *in, char *out)
+/* Filter out non-DNA non-UIPAC ambiguity code characters and change to lower case. */
+{
+char c;
+while ((c = *in++) != 0)
+    {
+    c = tolower(c);
+    if (isIupacLower(c))
+       *out++ = c;
+    }
+*out++ = 0;
+}
+
+boolean anyIupac(char *s)
+/* Return TRUE if there are any IUPAC ambiguity codes in s */
+{
+dnaUtilOpen();
+int c;
+while ((c = *s++) != 0)
+    {
+    switch (c)
+	{
+	case 'r':
+	case 'y':
+	case 's':
+	case 'w':
+	case 'k':
+	case 'm':
+	case 'b':
+	case 'd':
+	case 'h':
+	case 'v':
+	case 'n':
+	    return TRUE;
+	}
+    }
+return FALSE;
+}
+
+char iupacComplementBaseLower(char iupac)
+/* Return IUPAC complement for a single base */
+{
+switch (iupac)
+    {
+    case 'a':
+        return 't';
+    case 'c':
+        return 'g';
+    case 'g':
+        return 'c';
+    case 't':
+    case 'u':
+        return 'a';
+    case 'r':
+	return 'y';
+    case 'y':
+	return 'r';
+    case 's':
+	return 's';
+    case 'w':
+	return 'w';
+    case 'k':
+	return 'm';
+    case 'm':
+	return 'k';
+    case 'b':
+	return 'v';
+    case 'd':
+	return 'h';
+    case 'h':
+	return 'd';
+    case 'v':
+	return 'b';
+    case 'n':
+	return 'n';
+    default:
+        errAbort("Unrecognized IUPAC code '%c'", iupac);
+	return 0;   // Just to keep compiler from complaining, control won't reach here.
+    }
+}
+
+void iupacComplementLower(char *iupac, int iuSize)
+/* Return IUPAC complement many bases. Assumes iupac is lower case. */
+{
+int i;
+for (i=0; i<iuSize; ++i)
+    iupac[i] = iupacComplementBaseLower(iupac[i]);
+}
+
+void iupacReverseComplement(char *iu, int iuSize)
+/* Reverse complement a string containing DNA and IUPAC codes. Result will be always
+ * lower case. */
+{
+toLowerN(iu, iuSize);
+reverseBytes(iu, iuSize);
+iupacComplementLower(iu, iuSize);
+}
+
+boolean iupacMatchStart(char *iupacPrefix, char *dnaString)
+/* Return TRUE if start of DNA is compatible with iupac */
+{
+char iupac;
+while ((iupac = *iupacPrefix++) != 0)
+    {
+    if (!iupacMatch(iupac, *dnaString++))
+        return FALSE;
+    }
+return TRUE;
+}
+
+char *iupacIn(char *needle, char *haystack)
+/* Return first place in haystack (DNA) that matches needle that may contain IUPAC codes. */
+{
+int needleSize = strlen(needle);
+int haySize = strlen(haystack);
+char *endOfHay = haystack + haySize - needleSize;
+char *h;
+for (h = haystack; h<=endOfHay; ++h)
+    {
+    if (iupacMatchStart(needle, h))
+        return h;
+    }
+return NULL;
+}
+
diff --git a/gbtools/src/blatSrc/lib/jointalign.c b/gbtools/src/blatSrc/lib/jointalign.c
new file mode 100644
index 0000000..2ddb209
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/jointalign.c
@@ -0,0 +1,74 @@
+/* jointalign.c - routines for printing a joint alignment in html. 
+ *
+ * This file is copyright 2002 Ryan Weber, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "errAbort.h"
+#include "jointalign.h"
+
+
+
+void htmlPrintJointAlignment( char *seq1, char *seq2, int columnNum, 
+        int start, int end, char *strand )
+/* Print sequences 1 and 2 (assumed to be a joint alignment),
+ * formatted for html output. Coordinates are printed based on
+ * the start and end positions and oriented according to the
+ * strand the sequences are on (+ or -). (NO COORDINATES YET)*/
+{
+int i;
+validateSeqs( seq1, seq2 );
+
+/*print the sequences with lines connecting identical residues
+ *in columns of size columnNum*/
+for( i=0; i<strlen(seq1); i += columnNum )
+    htmlPrintJointAlignmentLine(seq1, seq2, i, min(i+columnNum, strlen(seq1)));
+
+/*printf( "<tt><hr><br>%s<br>%s<br></tt>", seq1, seq2 );*/
+
+}
+
+void htmlPrintJointAlignmentLine( char *seq1, char *seq2, int start, int end)
+/* Prints one line of the joint alignment between seq1 and seq2,
+ * from seq[start] to seq[end-1].*/
+{
+
+int i;
+printf("<tt>");
+for( i=start; i<end; i++ )
+    printf("%c",seq1[i]);
+printf("<br>");
+for( i=start; i<end; i++ )
+    {
+    if(ucaseMatch( seq1[i], seq2[i] ))
+        printf("|");
+    else
+        printf(" ");
+    }
+printf("<br>");
+for( i=start; i<end; i++ )
+    printf("%c",seq2[i]);
+printf("</tt>");
+printf("<br><br>");
+   
+
+}
+
+boolean ucaseMatch( char a, char b )
+/* Case insensitive character matching */
+{
+if( toupper( a ) == toupper( b ) )
+    return( TRUE );
+else 
+    return( FALSE );
+}
+
+void validateSeqs( char *seq1, char *seq2 )
+/*Make sure sequences are the same length*/
+{
+if( strlen(seq1) != strlen(seq2) )
+    {
+    printf("%s<br>%s<br>", seq1, seq2 );
+    errAbort("The sequences are not properly aligned (different lengths)<br>\n"); 
+    }
+}
diff --git a/gbtools/src/blatSrc/lib/jpegSize.c b/gbtools/src/blatSrc/lib/jpegSize.c
new file mode 100644
index 0000000..d197000
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/jpegSize.c
@@ -0,0 +1,139 @@
+/* jpegSize - read a jpeg header and figure out dimensions of image.
+ * Adapted by Galt Barber from Matthias Wandel's jhead program */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+#include "common.h"
+#include "jpegSize.h"
+
+
+/* sections containing width and height     */
+#define M_SOF0  0xC0            /* Start Of Frame N                        */
+#define M_SOF1  0xC1            /* N indicates which compression process   */
+#define M_SOF2  0xC2            /* Only SOF0-SOF2 are now in common use    */
+#define M_SOF3  0xC3
+#define M_SOF5  0xC5            /* NB: codes C4 and CC are NOT SOF markers */
+#define M_SOF6  0xC6
+#define M_SOF7  0xC7
+#define M_SOF9  0xC9
+#define M_SOF10 0xCA
+#define M_SOF11 0xCB
+#define M_SOF13 0xCD
+#define M_SOF14 0xCE
+#define M_SOF15 0xCF
+
+#define M_SOI   0xD8            /* Start Of Image (beginning of datastream)*/
+#define M_EOI   0xD9            /* End Of Image (end of datastream)        */
+#define M_SOS   0xDA            /* Start Of Scan (begins compressed data)  */
+#define M_JFIF  0xE0            /* Jfif marker                             */
+#define M_EXIF  0xE1            /* Exif marker                             */
+
+#define MAX_SECTIONS 40
+
+typedef unsigned char uchar;
+
+void jpegSize(char *fileName, int *width, int *height)
+/* Read image width and height.
+ * Parse marker stream until SOS or EOI; */
+{
+FILE * infile = mustOpen(fileName, "r"); 
+int sectionsRead = 0;
+boolean done = FALSE;
+boolean foundJFIF = FALSE;
+/* Scan the JPEG headers. */
+if (fgetc(infile) != 0xff || fgetc(infile) != M_SOI)
+    errAbort("error reading jpg header: %s",fileName);
+while(!done)
+    {
+    int itemlen;
+    int marker = 0;
+    int ll,lh, got;
+    int a=0;
+    uchar * data;
+
+    if (sectionsRead >= MAX_SECTIONS)
+	errAbort("Too many sections in jpg file: %s",fileName);
+
+    for (a=0;a<7;a++)
+	{
+	marker = fgetc(infile);
+	if (marker != 0xff) 
+	    break;
+	if (a >= 6)
+	    errAbort("too many padding bytes: %s",fileName);
+	}
+
+    /* 0xff is legal padding, but if we get that many, something's wrong. */
+    if (marker == 0xff)
+	errAbort("too many padding bytes: %s",fileName);
+
+    /* Read the length of the section. */
+    lh = fgetc(infile);
+    ll = fgetc(infile);
+
+    itemlen = (lh << 8) | ll;
+
+    if (itemlen < 2)
+	errAbort("invalid jpeg marker: %s",fileName);
+
+    data = (uchar *)needMem(itemlen);
+    if (data == NULL)
+	errAbort("Could not allocate %d bytes memory", itemlen);
+
+    /* Store first two pre-read bytes. */
+    data[0] = (uchar)lh;
+    data[1] = (uchar)ll;
+
+    got = fread(data+2, 1, itemlen-2, infile); /* Read the whole section. */
+    if (got != itemlen-2)
+	errAbort("Premature end of file?: %s",fileName);
+    
+    ++sectionsRead;
+
+    switch(marker)
+	{
+	case M_SOS:   /* stop before hitting compressed data */
+	    done = TRUE;
+	    break;
+	case M_EOI:   /* in case it's a tables-only JPEG stream */
+	    errAbort("No image in jpeg!: %s",fileName);
+	case M_JFIF:
+	    /* Regular jpegs always have this tag, 
+	       exif images have the exif marker instead or in addition 
+	       - could add check to make sure this is present
+	    */
+	    foundJFIF = TRUE;
+	    break;
+
+	case M_SOF0:
+	case M_SOF1:
+	case M_SOF2:
+	case M_SOF3:
+	case M_SOF5:
+	case M_SOF6:
+	case M_SOF7:
+	case M_SOF9:
+	case M_SOF10:
+	case M_SOF11:
+	case M_SOF13:
+	case M_SOF14:	    
+	case M_SOF15:
+	    *height = data[3]*256+data[4];
+	    *width  = data[5]*256+data[6];
+	    done = TRUE;
+	    break;
+	default:
+	    /* Skip any other sections. */
+	    break;
+	}
+	
+    freez(&data);
+    
+    }
+fclose(infile);
+if (!foundJFIF)
+    errAbort("JFIF marker not found jpeg: %s",fileName);
+return;
+}
+
+
diff --git a/gbtools/src/blatSrc/lib/jsonParse.c b/gbtools/src/blatSrc/lib/jsonParse.c
new file mode 100644
index 0000000..3b9d034
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/jsonParse.c
@@ -0,0 +1,687 @@
+/* jsonParse - routines to parse JSON strings and traverse and pick things out of the
+ * resulting object tree. */
+
+/* Copyright (C) 2014 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "hash.h"
+#include "dystring.h"
+#include "sqlNum.h"
+#include "jsonParse.h"
+
+static struct jsonElement *newJsonElement(jsonElementType type)
+// generic constructor for a jsonElement; callers fill in the appropriate value
+{
+struct jsonElement *ele;
+AllocVar(ele);
+ele->type = type;
+return ele;
+}
+
+struct jsonElement *newJsonString(char *str)
+{
+struct jsonElement *ele = newJsonElement(jsonString);
+ele->val.jeString = cloneString(str);
+return ele;
+}
+
+struct jsonElement *newJsonBoolean(boolean val)
+{
+struct jsonElement *ele = newJsonElement(jsonBoolean);
+ele->val.jeBoolean = val;
+return ele;
+}
+
+struct jsonElement *newJsonNumber(long val)
+{
+struct jsonElement *ele = newJsonElement(jsonNumber);
+ele->val.jeNumber = val;
+return ele;
+}
+
+struct jsonElement *newJsonDouble(double val)
+{
+struct jsonElement *ele = newJsonElement(jsonDouble);
+ele->val.jeDouble = val;
+return ele;
+}
+
+struct jsonElement *newJsonObject(struct hash *h)
+{
+struct jsonElement *ele = newJsonElement(jsonObject);
+ele->val.jeHash = h;
+return ele;
+}
+
+struct jsonElement *newJsonList(struct slRef *list)
+{
+struct jsonElement *ele = newJsonElement(jsonList);
+ele->val.jeList = list;
+return ele;
+}
+
+void jsonObjectAdd(struct jsonElement *h, char *name, struct jsonElement *ele)
+// Add a new element to a jsonObject; existing values are replaced.
+{
+if(h->type != jsonObject)
+    errAbort("jsonObjectAdd called on element with incorrect type (%d)", h->type);
+hashReplace(h->val.jeHash, name, ele);
+}
+
+void jsonListAdd(struct jsonElement *list, struct jsonElement *ele)
+{
+if(list->type != jsonList)
+    errAbort("jsonListAdd called on element with incorrect type (%d)", list->type);
+slAddHead(&list->val.jeList, ele);
+}
+
+static void skipLeadingSpacesWithPos(char *s, int *posPtr)
+/* skip leading white space. */
+{
+for (;;)
+    {
+    char c = s[*posPtr];
+    if (!isspace(c))
+	return;
+    (*posPtr)++;
+    }
+}
+
+static void getSpecificChar(char c, char *str, int *posPtr)
+{
+// get specified char from string or errAbort
+if(str[*posPtr] != c)
+    errAbort("Unexpected character '%c' (expected '%c') - string position %d\n", str[*posPtr], c, *posPtr);
+(*posPtr)++;
+}
+
+static char *getString(char *str, int *posPtr)
+{
+// read a double-quote delimited string; we handle backslash escaping.
+// returns allocated string.
+boolean escapeMode = FALSE;
+int i;
+struct dyString *ds = dyStringNew(1024);
+getSpecificChar('"', str, posPtr);
+for(i = 0;; i++)
+    {
+    char c = str[*posPtr + i];
+    if(!c)
+        errAbort("Premature end of string (missing trailing double-quote); string position '%d'", *posPtr);
+    else if(escapeMode)
+        {
+        // We support escape sequences listed in http://www.json.org,
+        // except for Unicode which we cannot support in C-strings
+        switch(c)
+            {
+            case 'b':
+                c = '\b';
+                break;
+            case 'f':
+                c = '\f';
+                break;
+            case 'n':
+                c = '\n';
+                break;
+            case 'r':
+                c = '\r';
+                break;
+            case 't':
+                c = '\t';
+                break;
+            case 'u':
+		// Pass through Unicode
+		dyStringAppendC(ds, '\\');
+                break;
+            default:
+                // we don't need to convert \,/ or "
+		dyStringAppendC(ds, c);
+                break;
+            }
+        dyStringAppendC(ds, c);
+        escapeMode = FALSE;
+        }
+    else if(c == '"')
+        break;
+    else if(c == '\\')
+        escapeMode = TRUE;
+    else
+        {
+        dyStringAppendC(ds, c);
+        escapeMode = FALSE;
+        }
+    }
+*posPtr += i;
+getSpecificChar('"', str, posPtr);
+return dyStringCannibalize(&ds);
+}
+
+static struct jsonElement *jsonParseExpression(char *str, int *posPtr);
+
+static struct jsonElement *jsonParseObject(char *str, int *posPtr)
+{
+struct hash *h = newHash(5);
+getSpecificChar('{', str, posPtr);
+while(str[*posPtr] != '}')
+    {
+    // parse out a name : val pair
+    skipLeadingSpacesWithPos(str, posPtr);
+    char *name = getString(str, posPtr);
+    skipLeadingSpacesWithPos(str, posPtr);
+    getSpecificChar(':', str, posPtr);
+    skipLeadingSpacesWithPos(str, posPtr);
+    hashAdd(h, name, jsonParseExpression(str, posPtr));
+    skipLeadingSpacesWithPos(str, posPtr);
+    if(str[*posPtr] == ',')
+        (*posPtr)++;
+    else
+        break;
+    }
+skipLeadingSpacesWithPos(str, posPtr);
+getSpecificChar('}', str, posPtr);
+return newJsonObject(h);
+}
+
+static struct jsonElement *jsonParseList(char *str, int *posPtr)
+{
+struct slRef *list = NULL;
+getSpecificChar('[', str, posPtr);
+while(str[*posPtr] != ']')
+    {
+    struct slRef *e;
+    AllocVar(e);
+    skipLeadingSpacesWithPos(str, posPtr);
+    e->val = jsonParseExpression(str, posPtr);
+    slAddHead(&list, e);
+    skipLeadingSpacesWithPos(str, posPtr);
+    if(str[*posPtr] == ',')
+        (*posPtr)++;
+    else
+        break;
+    }
+skipLeadingSpacesWithPos(str, posPtr);
+getSpecificChar(']', str, posPtr);
+slReverse(&list);
+return newJsonList(list);
+}
+
+static struct jsonElement *jsonParseString(char *str, int *posPtr)
+{
+return newJsonString(getString(str, posPtr));
+}
+
+static struct jsonElement *jsonParseBoolean(char *str, int *posPtr)
+{
+struct jsonElement *ele = NULL;
+int i;
+for(i = 0; str[*posPtr + i] && isalpha(str[*posPtr + i]); i++)
+    ;
+char *val = cloneStringZ(str + *posPtr, i);
+if(sameString(val, "true"))
+    ele = newJsonBoolean(TRUE);
+else if(sameString(val, "false"))
+    ele =  newJsonBoolean(FALSE);
+else
+    errAbort("Invalid boolean value '%s'; pos: %d", val, *posPtr);
+*posPtr += i;
+freez(&val);
+return ele;
+}
+
+static struct jsonElement *jsonParseNumber(char *str, int *posPtr)
+{
+int i;
+boolean integral = TRUE;
+struct jsonElement *retVal = NULL;
+
+for(i = 0;; i++)
+    {
+    char c = str[*posPtr + i];
+    if(c == 'e' || c == 'E' || c == '.')
+        integral = FALSE;
+    else if(!c || (!isdigit(c) && c != '-'))
+        break;
+    }
+char *val = cloneStringZ(str + *posPtr, i);
+*posPtr += i;
+if(integral)
+    retVal = newJsonNumber(sqlLongLong(val));
+else
+    {
+    double d;
+    if(sscanf(val, "%lf", &d))
+        retVal = newJsonDouble(d);
+    else
+        errAbort("Invalid JSON Double: %s", val);
+    }
+freez(&val);
+return retVal;
+}
+
+static struct jsonElement *jsonParseExpression(char *str, int *posPtr)
+{
+skipLeadingSpacesWithPos(str, posPtr);
+char c = str[*posPtr];
+if(c == '{')
+    return jsonParseObject(str, posPtr);
+else if (c == '[')
+    return jsonParseList(str, posPtr);
+else if (c == '"')
+    return jsonParseString(str, posPtr);
+else if (isdigit(c) || c == '-')
+    return jsonParseNumber(str, posPtr);
+else
+    return jsonParseBoolean(str, posPtr);
+// XXXX support null?
+}
+
+struct jsonElement *jsonParse(char *str)
+{
+// parse string into an in-memory json representation
+int pos = 0;
+struct jsonElement *ele = jsonParseExpression(str, &pos);
+skipLeadingSpacesWithPos(str, &pos);
+if(str[pos])
+    errAbort("Invalid JSON: unprocessed trailing string at position: %d: %s", pos, str + pos);
+return ele;
+}
+
+char *jsonStringEscape(char *inString)
+/* backslash escape a string for use in a double quoted json string.
+ * More conservative than javaScriptLiteralEncode because
+ * some json parsers complain if you escape & or ' */
+{
+char c;
+int outSize = 0;
+char *outString, *out, *in;
+
+if (inString == NULL)
+    return(cloneString(""));
+
+/* Count up how long it will be */
+in = inString;
+while ((c = *in++) != 0)
+    {
+    switch(c)
+        {
+        case '\"':
+        case '\\':
+        case '/':
+        case '\b':
+        case '\f':
+        case '\n':
+        case '\r':
+        case '\t':
+            outSize += 2;
+            break;
+        default:
+            outSize += 1;
+        }
+    }
+outString = needMem(outSize+1);
+
+/* Encode string */
+in = inString;
+out = outString;
+while ((c = *in++) != 0)
+    {
+    switch(c)
+        {
+        case '\"':
+        case '\\':
+        case '/':
+        case '\b':
+        case '\f':
+        case '\n':
+        case '\r':
+        case '\t':
+            *out++ = '\\';
+            break;
+        }
+    *out++ = c;
+    }
+*out++ = 0;
+return outString;
+}
+
+void jsonFindNameRecurse(struct jsonElement *ele, char *jName, struct slName **pList)
+// Search the JSON tree recursively to find all the values associated to
+// the name, and add them to head of the list.  
+{
+switch (ele->type)
+    {
+    case jsonObject:
+        {
+        if(hashNumEntries(ele->val.jeHash))
+            {
+            struct hashEl *el, *list = hashElListHash(ele->val.jeHash);
+            slSort(&list, hashElCmp);
+            for (el = list; el != NULL; el = el->next)
+                {
+                struct jsonElement *val = el->val;
+                if sameString(el->name, jName)
+                    slNameAddHead(pList, jsonStringEscape(val->val.jeString));
+                jsonFindNameRecurse(val, jName, pList);
+                }
+            hashElFreeList(&list);
+            }
+        break;
+        }
+    case jsonList:
+        {
+        struct slRef *el;
+        if(ele->val.jeList)
+            {
+            for (el = ele->val.jeList; el != NULL; el = el->next)
+                {
+                struct jsonElement *val = el->val;
+                jsonFindNameRecurse(val, jName, pList);
+                }
+            }
+        break;
+        }
+    case jsonString:
+    case jsonBoolean:
+    case jsonNumber:
+    case jsonDouble:
+        {
+        break;
+        }
+    default:
+        {
+        errAbort("jsonFindNameRecurse; invalid type: %d", ele->type);
+        break;
+        }
+    }
+}
+
+struct slName *jsonFindName(struct jsonElement *json, char *jName)
+// Search the JSON tree to find all the values associated to the name
+// and add them to head of the list.  
+{
+struct slName *list = NULL;
+jsonFindNameRecurse(json, jName, &list);
+slReverse(&list);
+return list;
+}
+
+struct slName *jsonFindNameUniq(struct jsonElement *json, char *jName)
+// Search the JSON tree to find all the unique values associated to the name
+// and add them to head of the list. 
+{
+struct slName *list = NULL;
+jsonFindNameRecurse(json, jName, &list);
+slUniqify(&list, slNameCmp, slNameFree);
+slReverse(&list);
+return list;
+}
+
+void jsonElementRecurse(struct jsonElement *ele, char *name, boolean isLast,
+    void (*startCallback)(struct jsonElement *ele, char *name, boolean isLast, void *context),  
+    // Called at element start
+    void (*endCallback)(struct jsonElement *ele, char *name, boolean isLast, void *context),    
+    // Called at element end
+    void *context)
+/* Recurse through JSON tree calling callback functions with element and context.
+ * Either startCallback or endCallback may be NULL*/
+{
+if (startCallback != NULL)
+    startCallback(ele, name, isLast, context);
+switch (ele->type)
+    {
+    case jsonObject:
+        {
+        if(hashNumEntries(ele->val.jeHash))
+            {
+            struct hashEl *el, *list = hashElListHash(ele->val.jeHash);
+            slSort(&list, hashElCmp);
+            for (el = list; el != NULL; el = el->next)
+                {
+                struct jsonElement *val = el->val;
+                jsonElementRecurse(val, el->name, el->next == NULL, 
+		    startCallback, endCallback, context);
+                }
+            hashElFreeList(&list);
+            }
+        break;
+        }
+    case jsonList:
+        {
+        struct slRef *el;
+        if(ele->val.jeList)
+            {
+            for (el = ele->val.jeList; el != NULL; el = el->next)
+                {
+                struct jsonElement *val = el->val;
+                jsonElementRecurse(val, NULL, el->next == NULL, 
+		    startCallback, endCallback, context);
+                }
+            }
+        break;
+        }
+    case jsonString:
+    case jsonBoolean:
+    case jsonNumber:
+    case jsonDouble:
+        {
+        break;
+        }
+    default:
+        {
+        errAbort("jsonElementRecurse; invalid type: %d", ele->type);
+        break;
+        }
+    }
+if (endCallback != NULL)
+    endCallback(ele, name, isLast, context);
+}
+
+void jsonPrintOneStart(struct jsonElement *ele, char *name, boolean isLast, int indent, FILE *f)
+/* Print the start of one json element - just name and maybe an opening brace or bracket.
+ * Recursion is handled elsewhere. */
+{
+spaceOut(f, indent);
+if (name != NULL)
+    {
+    fprintf(f, "\"%s\": ", name);
+    }
+switch (ele->type)
+    {
+    case jsonObject:
+        {
+	fprintf(f, "{\n");
+        break;
+        }
+    case jsonList:
+        {
+	fprintf(f, "[\n");
+        break;
+        }
+    case jsonString:
+        {
+	char *escaped = jsonStringEscape(ele->val.jeString);
+	fprintf(f, "\"%s\"",  escaped);
+	freez(&escaped);
+	break;
+	}
+    case jsonBoolean:
+        {
+	char *val = (ele->val.jeBoolean ? "frue" : "false");
+	fprintf(f, "%s", val);
+	break;
+	}
+    case jsonNumber:
+        {
+	fprintf(f, "%ld", ele->val.jeNumber);
+	break;
+	}
+    case jsonDouble:
+        {
+	fprintf(f, "%g", ele->val.jeDouble);
+        break;
+        }
+    default:
+        {
+        errAbort("jsonPrintOneStart; invalid type: %d", ele->type);
+        break;
+        }
+    }
+}
+
+void jsonPrintOneEnd(struct jsonElement *ele, char *name, boolean isLast, boolean indent, FILE *f)
+/* Print object end */
+{
+switch (ele->type)
+    {
+    case jsonObject:
+        {
+	spaceOut(f, indent);
+	fprintf(f, "}");
+        break;
+        }
+    case jsonList:
+        {
+	spaceOut(f, indent);
+	fprintf(f, "]");
+        break;
+        }
+    case jsonString:
+    case jsonBoolean:
+    case jsonNumber:
+    case jsonDouble:
+        break;
+    default:
+        {
+        errAbort("jsonPrintOneEnd; invalid type: %d", ele->type);
+        break;
+        }
+    }
+if (!isLast)
+    fputc(',', f);
+fputc('\n', f);
+}
+
+struct jsonPrintContext
+/* Context for printing a JSON object nicely */
+    {
+    FILE *f;	// where to print it
+    int indent;	// How much to indent currently
+    int indentPer;  // How much to indent each level
+    };
+
+
+static void printIndentedNameStartCallback(struct jsonElement *ele, char *name, 
+    boolean isLast, void *context)
+{
+struct jsonPrintContext *jps = context;
+jsonPrintOneStart(ele, name,  isLast, jps->indent, jps->f);
+jps->indent += jps->indentPer;
+}
+
+static void printIndentedNameEndCallback(struct jsonElement *ele, char *name, 
+    boolean isLast, void *context)
+{
+struct jsonPrintContext *jps = context;
+jps->indent -= jps->indentPer;
+jsonPrintOneEnd(ele, name, isLast, jps->indent, jps->f);
+}
+
+void jsonPrintToFile(struct jsonElement *root, char *name, FILE *f, int indentPer)
+/* Print out JSON object and all children nicely indented to f as JSON objects. 
+ * Name may be NULL.  Implemented via jsonPrintOneStart/jsonPrintOneEnd. */
+{
+struct jsonPrintContext jps = {f, 0, indentPer};
+jsonElementRecurse(root, NULL, TRUE, 
+	printIndentedNameStartCallback, printIndentedNameEndCallback, &jps);
+}
+
+/** Routines that check json type and return corresponding value. **/
+
+struct slRef *jsonListVal(struct jsonElement *ele, char *name)
+/* Enforce element is type jsonList.  Return list value */
+{
+if (ele->type != jsonList)
+    errAbort("json element %s is not a list", name);
+return ele->val.jeList;
+}
+
+struct hash *jsonObjectVal(struct jsonElement *ele, char *name)
+/* Enforce object is type jsonObject.  Return object hash */
+{
+if (ele->type != jsonObject)
+    errAbort("json element %s is not an object", name);
+return ele->val.jeHash;
+}
+
+long jsonNumberVal(struct jsonElement *ele, char *name)
+/* Enforce element is type jsonNumber and return value. */
+{
+if (ele->type != jsonNumber)
+    errAbort("json element %s is not a number", name);
+return ele->val.jeNumber;
+}
+
+double jsonDoubleVal(struct jsonElement *ele, char *name)
+/* Enforce element is type jsonDouble and return value. */
+{
+if (ele->type != jsonDouble)
+    errAbort("json element %s is not a number", name);
+return ele->val.jeDouble;
+}
+
+boolean jsonBooleanVal(struct jsonElement *ele, char *name)
+/* Enforce element is type jsonBoolean and return value. */
+{
+if (ele->type != jsonBoolean)
+    errAbort("json element %s is not a boolean", name);
+return ele->val.jeBoolean;
+}
+
+char *jsonStringVal(struct jsonElement *ele, char *eleName)
+/* Enforce element is type jsonString and return value. */
+{
+if (ele->type != jsonString)
+    errAbort("json element %s is not a string", eleName);
+return ele->val.jeString;
+}
+
+/** Routines that help work with json objects (bracket enclosed key/val pairs **/
+
+struct jsonElement *jsonFindNamedField(struct jsonElement *object, 
+    char *objectName, char *field)
+/* Find named field of object or return NULL if not found.  Abort if object
+ * is not actually an object. */
+{
+struct hash *hash = jsonObjectVal(object, objectName);
+return hashFindVal(hash, field);
+}
+
+struct jsonElement *jsonMustFindNamedField(struct jsonElement *object, 
+    char *objectName, char *field)
+/* Find named field of object or die trying. */
+{
+struct jsonElement *ele = jsonFindNamedField(object, objectName, field);
+if (ele == NULL)
+   errAbort("Couldn't find field %s in json object %s", field, objectName);
+return ele;
+}
+
+char *jsonOptionalStringField(struct jsonElement *object, char *field, char *defaultVal)
+/* Return string valued field of object, or defaultVal if it doesn't exist. */
+{
+struct jsonElement *ele = jsonFindNamedField(object, "", field);
+if (ele == NULL)
+     return defaultVal;
+return jsonStringVal(ele, field);
+}
+
+char *jsonStringField(struct jsonElement *object, char *field)
+/* Return string valued field of object or abort if field doesn't exist. */
+{
+char *val = jsonOptionalStringField(object, field, NULL);
+if (val == NULL)
+    errAbort("Field %s doesn't exist in json object", field);
+return val;
+}
+
diff --git a/gbtools/src/blatSrc/lib/jsonWrite.c b/gbtools/src/blatSrc/lib/jsonWrite.c
new file mode 100644
index 0000000..cef09dc
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/jsonWrite.c
@@ -0,0 +1,142 @@
+/* jsonWrite - Helper routines for writing out JSON.  */
+
+/* Copyright (C) 2014 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "hash.h"
+#include "dystring.h"
+#include "sqlNum.h"
+#include "jsonParse.h"
+#include "jsonWrite.h"
+
+struct jsonWrite *jsonWriteNew()
+/* Return new empty jsonWrite struct. */
+{
+struct jsonWrite *jw;
+AllocVar(jw);
+jw->dy = dyStringNew(0);
+return jw;
+}
+
+void jsonWriteFree(struct jsonWrite **pJw)
+/* Free up a jsonWrite object. */
+{
+struct jsonWrite *jw = *pJw;
+if (jw != NULL)
+    {
+    dyStringFree(&jw->dy);
+    freez(pJw);
+    }
+}
+
+static void jsonWritePushObjStack(struct jsonWrite *jw, bool val)
+/* Push val on stack */
+{
+int stackIx = jw->stackIx + 1;
+if (stackIx >= ArraySize(jw->objStack))
+    errAbort("Stack overflow in jsonWritePush");
+jw->objStack[stackIx] = val;
+jw->stackIx = stackIx;
+}
+
+static void jsonWritePopObjStack(struct jsonWrite *jw)
+/* pop object stack and just discard val. */
+{
+int stackIx = jw->stackIx - 1;
+if (stackIx < 0)
+    errAbort("Stack underflow in jsonWritePopObjStack");
+jw->stackIx = stackIx;
+}
+
+void jsonWriteTag(struct jsonWrite *jw, char *var)
+/* Print out quoted tag followed by colon. Print out preceding comma if need be.  */
+{
+struct dyString *dy = jw->dy;
+if (jw->objStack[jw->stackIx] != 0)
+    dyStringAppend(dy, ",\n");
+else
+    jw->objStack[jw->stackIx] = 1;
+if (var != NULL)
+    dyStringPrintf(jw->dy, "\"%s\": ", var);
+}
+
+void jsonWriteString(struct jsonWrite *jw, char *var, char *string)
+/* Print out "var": "val".  If var is NULL then just print out "val" */
+{
+struct dyString *dy = jw->dy;
+jsonWriteTag(jw, var);
+dyStringPrintf(dy, "\"%s\"", string);
+}
+
+void jsonWriteDateFromUnix(struct jsonWrite *jw, char *var, long long unixTimeVal)
+/* Add "var": YYYY-MM-DDT-HH:MM:SSZ given a Unix time stamp. Var may be NULL. */
+{
+struct dyString *dy = jw->dy;
+time_t timeStamp = unixTimeVal;
+struct tm tm;
+gmtime_r(&timeStamp, &tm);
+jsonWriteTag(jw, var);
+dyStringPrintf(dy, "\"%d:%02d:%02dT%02d:%02d:%02dZ\"",
+    1900+tm.tm_year, tm.tm_mon+1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec);
+}
+
+void jsonWriteNumber(struct jsonWrite *jw, char *var, long long val)
+/* print out "var": val as number. Var may be NULL. */
+{
+struct dyString *dy = jw->dy;
+jsonWriteTag(jw, var);
+dyStringPrintf(dy, "%lld", val);
+}
+
+void jsonWriteLink(struct jsonWrite *jw, char *var, char *objRoot, char *name)
+/* Print out the jsony type link to another object.  objRoot will start and end with a '/'
+ * and may have additional slashes in this usage. Var may be NULL. */
+{
+struct dyString *dy = jw->dy;
+jsonWriteTag(jw, var);
+dyStringPrintf(dy, "\"%s%s\"", objRoot, name);
+}
+
+void jsonWriteLinkNum(struct jsonWrite *jw, char *var, char *objRoot, long long id)
+/* Print out the jsony type link to another object with a numerical id.  objRoot will start 
+ * and end with a '/' and may have additional slashes in this usage. Var may be NULL */
+{
+struct dyString *dy = jw->dy;
+jsonWriteTag(jw, var);
+dyStringPrintf(dy, "\"%s%lld\"", objRoot, id);
+}
+
+void jsonWriteListStart(struct jsonWrite *jw, char *var)
+/* Start an array in JSON. Var may be NULL */
+{
+struct dyString *dy = jw->dy;
+jsonWriteTag(jw, var);
+dyStringAppend(dy, "[\n");
+jsonWritePushObjStack(jw, FALSE);
+}
+
+void jsonWriteListEnd(struct jsonWrite *jw)
+/* End an array in JSON */
+{
+struct dyString *dy = jw->dy;
+dyStringAppend(dy, "]\n");
+jsonWritePopObjStack(jw);
+}
+
+void jsonWriteObjectStart(struct jsonWrite *jw)
+/* Print start of object */
+{
+struct dyString *dy = jw->dy;
+dyStringAppend(dy, "{\n");
+jsonWritePushObjStack(jw, FALSE);
+}
+
+void jsonWriteObjectEnd(struct jsonWrite *jw)
+/* End object in JSON */
+{
+struct dyString *dy = jw->dy;
+dyStringAppend(dy, "}\n");
+jsonWritePopObjStack(jw);
+}
+
diff --git a/gbtools/src/blatSrc/lib/keys.c b/gbtools/src/blatSrc/lib/keys.c
new file mode 100644
index 0000000..a9e14a1
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/keys.c
@@ -0,0 +1,558 @@
+/* keys.c - Stuff to manage a little key/value pair table and
+ * evaluate expressions on it. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "keys.h"
+#include "kxTok.h"
+
+
+struct kvt
+/* Key/value table. */
+    {
+    int used;             /* Number of keys used in table. */
+    int alloced;          /* Number allocated in table. */
+    struct keyVal *table; /* The table itself. */
+    };
+
+struct kvt *newKvt(int size)
+/* Get a new key value table. */
+{
+struct kvt *kvt;
+AllocVar(kvt);
+kvt->alloced = size;
+kvt->table = needMem(size * sizeof(kvt->table[0]));
+return kvt;
+}
+
+
+void freeKvt(struct kvt **pKvt)
+/* Free up key value table. */
+{
+struct kvt *kvt;
+if ((kvt = *pKvt) != NULL)
+    {
+    freeMem(kvt->table);
+    freez(pKvt);
+    }
+}
+
+void kvtClear(struct kvt *kvt)
+/* Clear the keys table. */
+{
+kvt->used = 0;
+}
+
+struct keyVal *kvtAdd(struct kvt *kvt, char *key, char *val)
+/* Add in new key. */
+{
+struct keyVal *kv;
+if (kvt->used == kvt->alloced)
+    errAbort("Too many keys in keyVal(%s %s)", key, val);
+kv = &kvt->table[kvt->used++];
+kv->key = key;
+kv->val = val;
+return kv;
+}
+
+void kvtParseAdd(struct kvt *kvt, char *text)
+/* Add in keys from text.  Text is in format:
+ *     key val
+ * for each line of text. Text gets many of it's
+ * space characters and newlines replaced by 0's
+ * and should persist until call to keysClear(). */
+{
+char *lines[256];
+int lineCount;
+int i;
+char *k, *v;
+
+lineCount = chopString(text, "\n\r", lines, ArraySize(lines));
+for (i=0; i<lineCount; ++i)
+    {
+    k = lines[i];
+    if ((v = strchr(k, ' ')) != NULL)
+        {
+        *v++ = 0;
+        kvtAdd(kvt, k, v);
+        }
+    }
+}
+
+struct keyVal* kvtGet(struct kvt *kvt, char *key)
+/* get the keyVal for the specified key, of NULL if not found. */
+{
+int i;
+struct keyVal *keyTable = kvt->table;
+int keysUsed = kvt->used;
+
+for (i=0; i<keysUsed; ++i)
+    {
+    if (sameString(key, keyTable[i].key))
+        return &keyTable[i];
+    }
+return NULL;
+}
+
+char *kvtLookup(struct kvt *kvt, char *key)
+/* Search table for key.  Return key value, or NULL if
+ * key not found. */
+{
+struct keyVal *keyVal = kvtGet(kvt, key);
+if (keyVal == NULL)
+    return NULL;
+else
+    return keyVal->val;
+}
+
+void kvtWriteAll(struct kvt *kvt, FILE *f, struct slName *hideList)
+/* Write all keys to file except the ones in hideList */
+{
+int i;
+static char lf = '\n';
+struct keyVal *kv = kvt->table;
+int keyCount = kvt->used;
+
+for (i=0; i<keyCount; ++i)
+    {
+    char *key = kv->key;
+    if (kv->val != NULL && !slNameInList(hideList, key))
+        fprintf(f, "%s %s\n", key, kv->val);
+    ++kv;
+    }
+mustWrite(f, &lf, 1);   /* Instead of fputc for error checking. */
+}
+
+
+/* Expression evaluator - evaluates a parsed tree. */
+enum keyExpType
+    {
+    kxMatch,
+    kxWildMatch,
+    kxGT,      /* Greater Than */
+    kxGE,      /* Greater Than or Equal */
+    kxLT,      /* Less Than */
+    kxLE,      /* Less Than or Equal */
+    kxAnd,
+    kxOr,
+    kxNot,
+    kxXor,
+    };
+
+struct exp
+    {
+    void *left;
+    void *right;
+    enum keyExpType type;
+    };
+
+static void getIntVals(struct kvt *kvt, struct exp *exp, int *retLeft, int *retRight)
+/* Look up value for key on left hand side of expression and
+ * literal string from right hand side.  Convert both to ints. */
+{
+char *rightString = exp->right;
+char *leftKey = exp->left;
+char *leftString = kvtLookup(kvt, leftKey);
+
+if (leftString == NULL)
+    *retLeft = 0;
+else
+    *retLeft = atoi(leftString);
+if (rightString == NULL)
+    *retRight = 0;
+else
+    *retRight = atoi(rightString);
+}
+
+#if 0 /* unused */
+static void dumpExp(struct kvt *kvt, struct exp *exp)
+/* Print out expression. */
+{
+switch (exp->type)
+    {
+    case kxMatch:
+        {
+        char *key = exp->left;
+        char *matcher = exp->right;
+        char *val = kvtLookup(kvt, key);
+	printf("%s(%s) match %s\n", key, val, matcher);
+	break;
+        }
+    case kxWildMatch:
+        {
+        char *key = exp->left;
+        char *matcher = exp->right;
+        char *val = kvtLookup(kvt, key);
+	printf("%s(%s) wildMatch %s\n", key, val, matcher);
+	break;
+        }
+    case kxGT:
+        {
+        int left, right;
+        getIntVals(kvt, exp, &left, &right);
+	printf("%d > %d\n", left, right);
+	break;
+        }
+    case kxGE:
+        {
+        int left, right;
+        getIntVals(kvt, exp, &left, &right);
+	printf("%d >= %d\n", left, right);
+	break;
+        }
+    case kxLT:
+        {
+        int left, right;
+        getIntVals(kvt, exp, &left, &right);
+	printf("%d < %d\n", left, right);
+	break;
+        }
+    case kxLE:
+        {
+        int left, right;
+        getIntVals(kvt, exp, &left, &right);
+	printf("%d <= %d\n", left, right);
+	break;
+        }
+    
+    case kxNot:
+        {
+	printf("!\n");
+	break;
+        }
+    case kxAnd:
+        {
+	printf("&\n");
+	break;
+        }
+    case kxOr:
+        {
+	printf("|\n");
+	break;
+        }
+    case kxXor:
+        {
+	printf("^\n");
+	break;
+        }
+    }
+}
+#endif
+
+static boolean rkeyEval(struct kvt *kvt, struct exp *exp)
+/* Recursively evaluate expression. */
+{
+if (exp == NULL)
+    return TRUE;
+switch (exp->type)
+    {
+    case kxMatch:
+        {
+        char *key = exp->left;
+        char *matcher = exp->right;
+        char *val = kvtLookup(kvt, key);
+        if (val == NULL)
+            return sameWord(matcher, "null");
+        else
+            return sameWord(matcher, val);
+        }
+    case kxWildMatch:
+        {
+        char *key = exp->left;
+        char *matcher = exp->right;
+        char *val = kvtLookup(kvt, key);
+        if (val == NULL)
+            return sameString(matcher, "*");
+        else
+            return wildMatch(matcher, val);
+        }
+    case kxGT:
+        {
+        int left, right;
+        getIntVals(kvt, exp, &left, &right);
+        return left > right;
+        }
+    case kxGE:
+        {
+        int left, right;
+        getIntVals(kvt, exp, &left, &right);
+        return left >= right;
+        }
+    case kxLT:
+        {
+        int left, right;
+        getIntVals(kvt, exp, &left, &right);
+        return left < right;
+        }
+    case kxLE:
+        {
+        int left, right;
+        getIntVals(kvt, exp, &left, &right);
+        return left <= right;
+        }
+    
+    case kxNot:
+        {
+        return !rkeyEval(kvt, exp->right);
+        }
+    case kxAnd:
+        {
+        return rkeyEval(kvt, exp->left) && rkeyEval(kvt, exp->right);
+        }
+    case kxOr:
+        {
+        return rkeyEval(kvt, exp->left) || rkeyEval(kvt, exp->right);
+        }
+    case kxXor:
+        {
+        return rkeyEval(kvt, exp->left) ^ rkeyEval(kvt, exp->right);
+        }
+    default:
+        {
+	errAbort("unknown expression type %d", exp->type);
+	return 0;
+	}
+    }
+}
+
+boolean keyExpEval(struct keyExp *keyExp, struct kvt *kvt)
+/* Evaluate key expression. */
+{
+return rkeyEval(kvt, keyExp->rootExp);
+}
+
+/***** A little recursive descent parser. *****/
+
+static struct kxTok *token;      /* Next token for parser. */
+
+static void advanceToken()
+/* Move to next token. */
+{
+token = token->next;
+}
+
+static struct exp *nextExp();       /* Get next expression. */
+
+static struct exp *parseRelation()
+/* Parse key=wildcard. */
+{
+struct kxTok *key, *match;
+
+if (token == NULL)
+    return NULL;
+if (token->type != kxtString)
+    errAbort("Expecting key got %s", token->string);
+key = token;
+advanceToken();
+if (token->type == kxtEquals)
+    {
+    advanceToken();
+    if (token->type == kxtString || token->type == kxtWildString)
+        {
+        struct exp *exp;
+        match = token;
+        advanceToken();
+        AllocVar(exp);
+        exp->left = key->string;
+        exp->right = match->string;
+        exp->type = (match->type == kxtString ? kxMatch : kxWildMatch);
+        return exp;
+        }
+    else
+        {
+        errAbort("Expecting string to match in key=match expression,\ngot %s", token->string);
+        }
+    }
+else if (token->type == kxtGT || token->type == kxtGE || token->type == kxtLT || token->type == kxtLE)
+    {
+    enum kxTokType relation = token->type;
+    advanceToken();
+    if (isdigit(token->string[0]))
+        {
+        struct exp *exp;
+        match = token;
+        advanceToken();
+        AllocVar(exp);
+        exp->left = key->string;
+        exp->right = match->string;
+        if (relation == kxtGT) exp->type = kxGT;
+        else if (relation == kxtGE) exp->type = kxGE;
+        else if (relation == kxtLT) exp->type = kxLT;
+        else if (relation == kxtLE) exp->type = kxLE;
+        return exp;
+        }
+    else
+        {
+        errAbort("Expecting number got %s", token->string);
+        }
+    }
+else
+    errAbort("Expecting = got %s", token->string);
+return NULL;
+}
+
+static struct exp *parseParenthesized()
+/* Parse parenthesized expressions. */
+{
+struct exp *exp;
+if (token == NULL)
+    return NULL;
+if (token->type == kxtOpenParen)
+    {
+    advanceToken();
+    exp = nextExp();
+    if (token->type != kxtCloseParen)
+        errAbort("Unmatched parenthesis");
+    advanceToken();
+    return exp;
+    }
+else
+    {
+    return parseRelation();
+    }            
+}
+
+static struct exp *parseNot()
+/* Parse not */
+{
+struct exp *exp;
+struct exp *right;
+
+if (token == NULL)
+    return NULL;
+if (token->type == kxtNot)
+    {
+    advanceToken();
+    right = nextExp();
+    AllocVar(exp);
+    exp->right = right;
+    exp->type = kxNot;
+    return exp;
+    }
+else
+    return parseParenthesized();
+}
+
+static struct exp *parseAndExp()
+/* Parse and level expressions. */
+{
+struct exp *left;
+struct exp *right, *exp;
+struct kxTok *tok;
+enum kxTokType type;
+
+if ((left = parseNot()) == NULL)
+    return NULL;
+if ((tok = token) == NULL)
+    return left;
+type = token->type;
+if (type == kxtAnd)
+    {
+    advanceToken();
+    right = nextExp();
+    if (right == NULL)
+        errAbort("Expecting expression on the other side of %s", tok->string);
+    AllocVar(exp);
+    exp->left = left;
+    exp->right = right;
+    exp->type = kxAnd;
+    return exp;
+    }
+else
+    return left;    
+}
+
+static struct exp *parseOrExp()
+/* Parse lowest level of precedent expressions - or and xor. */
+{
+struct exp *left;
+struct exp *right, *exp;
+struct kxTok *tok;
+enum kxTokType type;
+
+if ((left = parseAndExp()) == NULL)
+    return NULL;
+if ((tok = token) == NULL)
+    return left;
+type = token->type;
+if (type == kxtOr || type == kxtXor)
+    {
+    advanceToken();
+    right = nextExp();
+    if (right == NULL)
+        errAbort("Expecting expression on the other side of %s", tok->string);
+    AllocVar(exp);
+    exp->left = left;
+    exp->right = right;
+    if (type == kxtOr)
+        exp->type = kxOr;
+    else
+        exp->type = kxXor;
+    return exp;
+    }
+else
+    return left;    
+}
+
+static struct exp *nextExp()
+/* Get another expression. */
+{
+return parseOrExp();
+}
+
+static struct exp *parseExp(struct kxTok *tokList)
+/* Convert key expression from token stream to parse tree. */
+{
+struct exp *exp;
+token = tokList;
+exp =  nextExp();
+if (token->type != kxtEnd)
+    {
+    errAbort("Extra tokens past end of expression.  Missing &?");
+    }
+return exp;
+}
+
+struct keyExp *keyExpParse(char *text)
+/* Parse text into key expression.  Squawk and die if it
+ * fails. */
+{
+struct keyExp *ke;
+struct kxTok *tok;
+AllocVar(ke);
+ke->tokenList = tok = kxTokenize(text, TRUE);
+ke->rootExp = parseExp(tok);
+
+return ke;
+}
+
+
+
+boolean keyTextScan(char *text, char *key, char *valBuf, int valBufSize)
+/* Get value of key. Return FALSE if key doesn't exist. */
+{
+int keySize = strlen(key);
+char *s, *nl;
+boolean ok = FALSE;
+
+for (s = text; !isspace(s[0]); s = nl+1)
+    {
+    nl = strchr(s, '\n');
+    assert(nl != NULL);
+    if (s[keySize] == ' ' && memcmp(s, key, keySize) == 0)
+        {
+        char *val = s + keySize + 1;
+        int valSize = nl - val;
+        if (valSize >= valBufSize)
+            valSize = valBufSize-1;
+        memcpy(valBuf, val, valSize);
+        valBuf[valSize] = 0;
+        ok = TRUE;
+        break;
+        }
+    }
+return ok;
+}
+
diff --git a/gbtools/src/blatSrc/lib/knetUdc.c b/gbtools/src/blatSrc/lib/knetUdc.c
new file mode 100644
index 0000000..4bbf9c2
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/knetUdc.c
@@ -0,0 +1,97 @@
+/* knetUdc -- install udc i/o functions in knetfile interface in samtools. */
+/* As of 2/23/10, the KNETFILE_HOOKS extension is a UCSC-local modification of samtools. */
+
+/* Copyright (C) 2014 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#if ((defined USE_BAM || defined USE_TABIX) && defined KNETFILE_HOOKS)
+
+#include "common.h"
+#include "udc.h"
+#include "knetUdc.h"
+#include "knetfile.h"
+
+
+struct knetFile_s {
+    struct udcFile *udcf;
+}; // typedef'd to knetFile in knetfile.h
+
+static char *udcCacheDir = NULL;
+
+static knetFile *kuOpen(const char *filename, const char *mode)
+/* Open the given filename with mode which must be "r". */
+{
+if (!sameOk((char *)mode, "r"))
+    errAbort("mode passed to kuOpen must be 'r' not '%s'", mode);
+struct udcFile *udcf = udcFileMayOpen((char *)filename, udcCacheDir);
+if (udcf == NULL)
+    return NULL;
+knetFile *kf = NULL;
+AllocVar(kf);
+kf->udcf = udcf;
+verbose(2, "kuOpen: returning %lu\n", (unsigned long)(kf->udcf));
+return kf;
+}
+
+static knetFile *kuDopen(int fd, const char *mode)
+/* Open from a file descriptor -- not necessary for our use of samtools. */
+{
+errAbort("kuDopen not implemented");
+return NULL;
+}
+
+static off_t kuRead(knetFile *fp, void *buf, off_t len)
+/* Read len bytes into buf, return amount actually read. */
+{
+verbose(2, "udcRead(%lu, buf, %lld)\n", (unsigned long)(fp->udcf), (long long)len);
+return (off_t)udcRead(fp->udcf, buf, (int)len);
+}
+
+static off_t kuSeek(knetFile *fp, int64_t off, int whence)
+/* Seek to off according to whence (but don't waste time with samtools' SEEK_END to
+ * check empty record at end of file.  Don't be fooled by the off_t return type --
+ * it's 0 for OK, non-0 for fail. */
+{
+bits64 offset;
+if (whence == SEEK_SET)
+    offset = off;
+else if (whence == SEEK_CUR)
+    offset = off+ udcTell(fp->udcf);
+else
+    return -1;
+verbose(2, "udcSeek(%lu, %lld)\n", (unsigned long)(fp->udcf), offset);
+udcSeek(fp->udcf, offset);
+return 0;
+}
+
+static off_t kuTell(knetFile *fp)
+/* Tell current offset in file. */
+{
+verbose(2, "udcTell(%lu)\n", (unsigned long)(fp->udcf));
+return udcTell(fp->udcf);
+}
+
+static int kuClose(knetFile *fp)
+/* Close and free fp->udcf. */
+{
+verbose(2, "udcClose(%lu)\n", (unsigned long)(fp->udcf));
+udcFileClose(&(fp->udcf));
+return 0;
+}
+
+void knetUdcInstall()
+/* install udc i/o functions in knetfile interface in Heng Li's samtools lib. */
+{
+// maybe init udcCacheDir from hg.conf?
+knet_init_alt(kuOpen, kuDopen, kuRead, kuSeek, kuTell, kuClose);
+}
+
+
+#else// no (USE_BAM || USE_TABIX) && KNETFILE_HOOKS
+
+void knetUdcInstall()
+/* Required libs aren't installed; do nothing. */
+{
+}
+
+#endif
diff --git a/gbtools/src/blatSrc/lib/kxTok.c b/gbtools/src/blatSrc/lib/kxTok.c
new file mode 100644
index 0000000..a9801e0
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/kxTok.c
@@ -0,0 +1,239 @@
+/* kxTok - quick little tokenizer for stuff first
+ * loaded into memory.  Originally developed for
+ * "Key eXpression" evaluator. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "kxTok.h"
+
+
+boolean includeQuotes = FALSE;
+
+static struct kxTok *kxTokNew(enum kxTokType type, char *string, int stringSize,
+	boolean spaceBefore)
+/* Allocate and initialize a new token. */
+{
+struct kxTok *tok;
+int totalSize = stringSize + sizeof(*tok);
+tok = needMem(totalSize);
+tok->type = type;
+tok->spaceBefore = spaceBefore;
+memcpy(tok->string, string, stringSize);
+return tok;
+}
+
+struct kxTok *kxTokenizeFancy(char *text, boolean wildAst,
+			      boolean wildPercent, boolean includeHyphen)
+/* Convert text to stream of tokens. If 'wildAst' is
+ * TRUE then '*' character will be treated as wildcard
+ * rather than multiplication sign.  
+ * If wildPercent is TRUE then the '%' character will be treated as a 
+ * wildcard (as in SQL) rather than a modulo (kxtMod) or percent sign.
+ * If includeHyphen is TRUE then a '-' character in the middle of a String 
+ * token will be treated as a hyphen (part of the String token) instead of 
+ * a new kxtSub token. */
+{
+struct kxTok *tokList = NULL, *tok;
+char c, *s, *start = NULL, *end = NULL;
+enum kxTokType type = 0;
+boolean spaceBefore = FALSE;
+
+s = text;
+for (;;)
+    {
+    if ((c = *s) == 0)
+        break;
+    start = s++;
+    if (isspace(c))
+        {
+	spaceBefore = TRUE;
+        continue;
+        }
+    else if (isalnum(c) || c == '?' || (wildAst && c == '*') ||
+	     (wildPercent && c == '%'))
+        {
+        if (c == '?')
+            type = kxtWildString;
+	else if (wildAst && c == '*')
+            type = kxtWildString;
+	else if (wildPercent && c == '%')
+            type = kxtWildString;
+        else
+            type = kxtString;
+        for (;;)
+            {
+            c = *s;
+            if (isalnum(c) || c == ':' || c == '_' || c == '.' ||
+		(includeHyphen && c == '-'))
+                ++s;
+            else if (c == '?' || (wildAst && c == '*') ||
+		     (wildPercent && c == '%'))
+                {
+                type = kxtWildString;
+                ++s;
+                }
+            else
+                break;
+            }
+        end = s;
+        }
+    else if (c == '"')
+        {
+        type = kxtString;
+        if (! includeQuotes)
+	    start = s;
+        for (;;)
+            {
+            c = *s++;
+            if (c == '"')
+                break;
+            if (c == '*' || c == '?' || (wildPercent && c == '%'))
+                type = kxtWildString;
+            }
+	if (! includeQuotes)
+	    end = s-1;
+	else
+	    end = s;
+        }
+    else if (c == '\'')
+        {
+        type = kxtString;
+        if (! includeQuotes)
+	    start = s;
+        for (;;)
+            {
+            c = *s++;
+            if (c == '\'')
+                break;
+            if (c == '*' || c == '?' || (wildPercent && c == '%'))
+                type = kxtWildString;
+            }
+	if (! includeQuotes)
+	    end = s-1;
+	else
+	    end = s;
+        } 
+    else if (c == '=')
+        {
+        type = kxtEquals;
+        end = s;
+        }
+    else if (c == '&')
+        {
+        type = kxtAnd;
+        end = s;
+        }
+    else if (c == '|')
+        {
+        type = kxtOr;
+        end = s;
+        }
+    else if (c == '^')
+        {
+        type = kxtXor;
+        end = s;
+        }
+    else if (c == '+')
+        {
+	type = kxtAdd;
+	end = s;
+	}
+    else if (c == '-')
+        {
+	type = kxtSub;
+	end = s;
+	}
+    else if (c == '*')
+        {
+	type = kxtMul;
+	end = s;
+	}
+    else if (c == '/')
+        {
+	type = kxtDiv;
+	end = s;
+	}
+    else if (c == '(')
+        {
+        type = kxtOpenParen;
+        end = s;
+        }
+    else if (c == ')')
+        {
+        type = kxtCloseParen;
+        end = s;
+        }
+    else if (c == '!')
+        {
+        type = kxtNot;
+        end = s;
+        }
+    else if (c == '>')
+        {
+        if (*s == '=')
+            {
+            ++s;
+            type = kxtGE;
+            }
+        else
+            type = kxtGT;
+        end = s;
+        }
+    else if (c == '<')
+        {
+        if (*s == '=')
+            {
+            ++s;
+            type = kxtLE;
+            }
+        else
+            type = kxtLT;
+        end = s;
+        }
+    else if (c == '.')
+        {
+        type = kxtDot;
+        end = s;
+	}
+    else if (c == '%')
+        {
+        type = kxtMod;
+        end = s;
+	}
+    else if (ispunct(c))
+        {
+        type = kxtPunct;
+        end = s;
+	}
+    else
+        {
+        errAbort("Unrecognized character %c", c);
+        }
+    tok = kxTokNew(type, start, end-start, spaceBefore);
+    slAddHead(&tokList, tok);
+    spaceBefore = FALSE;
+    }
+tok = kxTokNew(kxtEnd, "end", 3, spaceBefore);
+slAddHead(&tokList, tok);
+slReverse(&tokList);
+return tokList;
+}
+
+
+struct kxTok *kxTokenize(char *text, boolean wildAst)
+/* Convert text to stream of tokens. If 'wildAst' is
+ * TRUE then '*' character will be treated as wildcard
+ * rather than multiplication sign. */
+{
+return kxTokenizeFancy(text, wildAst, FALSE, FALSE);
+}
+
+void kxTokIncludeQuotes(boolean val)
+/* Pass in TRUE if kxTok should include quote characters in string tokens. */
+{
+includeQuotes = val;
+}
+
+
diff --git a/gbtools/src/blatSrc/lib/lineFileOnBigBed.c b/gbtools/src/blatSrc/lib/lineFileOnBigBed.c
new file mode 100644
index 0000000..eec1035
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/lineFileOnBigBed.c
@@ -0,0 +1,111 @@
+/* lineFileOnBigBed - set up lineFile support on a BigBed
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "linefile.h"
+#include "localmem.h"
+#include "bigBed.h"
+
+struct lfBigBedData
+/* data used during callbacks */
+    {	
+    struct bbiFile *bbiHandle;                            // BigBed handle
+    struct bbiChromInfo *bbiChrom, *bbiChromList;         // BigBed chrom info
+    struct lm *bbiLm;                                     // BigBed local memory
+    struct bigBedInterval *bbiInterval, *bbiIntervalList; // BigBed intervals
+    };
+
+void checkBigBedSupport(struct lineFile *lf, char *where)
+/* abort if not supported by bigBed */
+{
+if (sameString(where,"lineFileSeek"))
+    lineFileAbort(lf, "%s: not supported for lineFile on BigBed.", where);
+}
+
+boolean lineFileNextBigBed(struct lineFile *lf, char **retStart, int *retSize)
+/* skip to the next line */
+{
+struct lfBigBedData *lfBigBedData = lf->dataForCallBack;
+int lineSize = 0;
+if (!lfBigBedData->bbiChrom)
+    return FALSE;
+if (!lfBigBedData->bbiInterval)
+    return FALSE;
+lineSize = 1024; // some extra room
+lineSize += strlen(lfBigBedData->bbiChrom->name);
+if (lfBigBedData->bbiInterval->rest)
+    lineSize += strlen(lfBigBedData->bbiInterval->rest);
+
+if (lineSize > lf->bufSize)
+    lineFileExpandBuf(lf, lineSize * 2);
+safef(lf->buf, lf->bufSize, "%s\t%u\t%u", lfBigBedData->bbiChrom->name, lfBigBedData->bbiInterval->start, lfBigBedData->bbiInterval->end);
+if (lfBigBedData->bbiInterval->rest)
+    {
+    safecat(lf->buf, lf->bufSize, "\t");
+    safecat(lf->buf, lf->bufSize, lfBigBedData->bbiInterval->rest);
+    }
+lf->bufOffsetInFile = -1;
+lf->bytesInBuf = strlen(lf->buf);
+lf->lineIx++;
+lf->lineStart = 0;
+lf->lineEnd = lineSize;
+*retStart = lf->buf;
+if (retSize != NULL)
+    *retSize = lineSize;
+
+lfBigBedData->bbiInterval = lfBigBedData->bbiInterval->next;
+if (!lfBigBedData->bbiInterval)
+    {
+    lmCleanup(&lfBigBedData->bbiLm);
+    lfBigBedData->bbiLm = lmInit(0);
+    lfBigBedData->bbiChrom = lfBigBedData->bbiChrom->next;
+    if(lfBigBedData->bbiChrom)
+	lfBigBedData->bbiIntervalList = bigBedIntervalQuery(
+	    lfBigBedData->bbiHandle, lfBigBedData->bbiChrom->name, 0, lfBigBedData->bbiChrom->size, 0, lfBigBedData->bbiLm);
+    }
+
+return TRUE;
+}
+
+void lineFileCloseBigBed(struct lineFile *lf)
+/* release bigBed resources */
+{
+struct lfBigBedData *lfBigBedData = lf->dataForCallBack;
+lmCleanup(&lfBigBedData->bbiLm);
+bbiChromInfoFreeList(&lfBigBedData->bbiChromList);
+bbiFileClose(&lfBigBedData->bbiHandle);
+freez(&lf->dataForCallBack);
+}
+
+
+struct lineFile *lineFileOnBigBed(char *bigBedFileName)
+/* Wrap a line file object around a BigBed. */
+{
+struct lineFile *lf;
+AllocVar(lf);
+lf->fileName = cloneString(bigBedFileName);
+struct lfBigBedData *lfBigBedData;
+AllocVar(lfBigBedData);
+lf->dataForCallBack = lfBigBedData;
+lfBigBedData->bbiHandle = bigBedFileOpen(lf->fileName);
+lfBigBedData->bbiChromList = bbiChromList(lfBigBedData->bbiHandle);
+lfBigBedData->bbiChrom = lfBigBedData->bbiChromList;
+lfBigBedData->bbiLm = lmInit(0);
+if (lfBigBedData->bbiChrom)
+    {
+    lfBigBedData->bbiIntervalList = bigBedIntervalQuery(
+	lfBigBedData->bbiHandle, lfBigBedData->bbiChrom->name, 0, lfBigBedData->bbiChrom->size, 0, lfBigBedData->bbiLm);
+    lfBigBedData->bbiInterval = lfBigBedData->bbiIntervalList;
+    }
+lf->checkSupport = checkBigBedSupport;
+lf->nextCallBack = lineFileNextBigBed;
+lf->closeCallBack = lineFileCloseBigBed;
+lf->fd = -1;
+lf->lineIx = 0;
+lf->bufSize = 64 * 1024;
+lf->buf = needMem(lf->bufSize);
+return lf;
+}
+
diff --git a/gbtools/src/blatSrc/lib/linefile.c b/gbtools/src/blatSrc/lib/linefile.c
new file mode 100644
index 0000000..5416c24
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/linefile.c
@@ -0,0 +1,1450 @@
+/* lineFile - stuff to rapidly read text files and parse them into
+ * lines.
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "hash.h"
+#include <fcntl.h>
+#include <signal.h>
+#include "dystring.h"
+#include "errAbort.h"
+#include "linefile.h"
+#include "pipeline.h"
+#include "localmem.h"
+#include "cheapcgi.h"
+#include "udc.h"
+
+char *getFileNameFromHdrSig(char *m)
+/* Check if header has signature of supported compression stream,
+   and return a phoney filename for it, or NULL if no sig found. */
+{
+char buf[20];
+char *ext=NULL;
+if (startsWith("\x1f\x8b",m)) ext = "gz";
+else if (startsWith("\x1f\x9d\x90",m)) ext = "Z";
+else if (startsWith("BZ",m)) ext = "bz2";
+else if (startsWith("PK\x03\x04",m)) ext = "zip";
+if (ext==NULL)
+    return NULL;
+safef(buf, sizeof(buf), LF_BOGUS_FILE_PREFIX "%s", ext);
+return cloneString(buf);
+}
+
+static char **getDecompressor(char *fileName)
+/* if a file is compressed, return the command to decompress the
+ * approriate format, otherwise return NULL */
+{
+static char *GZ_READ[] = {"gzip", "-dc", NULL};
+static char *Z_READ[] = {"gzip", "-dc", NULL};
+static char *BZ2_READ[] = {"bzip2", "-dc", NULL};
+static char *ZIP_READ[] = {"gzip", "-dc", NULL};
+
+char **result = NULL;
+char *fileNameDecoded = cloneString(fileName);
+if (startsWith("http://" , fileName)
+ || startsWith("https://", fileName)
+ || startsWith("ftp://",   fileName))
+    cgiDecode(fileName, fileNameDecoded, strlen(fileName));
+
+if      (endsWith(fileNameDecoded, ".gz"))
+    result = GZ_READ;
+else if (endsWith(fileNameDecoded, ".Z"))
+    result = Z_READ;
+else if (endsWith(fileNameDecoded, ".bz2"))
+    result = BZ2_READ;
+else if (endsWith(fileNameDecoded, ".zip"))
+    result = ZIP_READ;
+
+freeMem(fileNameDecoded);
+return result;
+
+}
+
+static void metaDataAdd(struct lineFile *lf, char *line)
+/* write a line of metaData to output file
+ * internal function called by lineFileNext */
+{
+struct metaOutput *meta = NULL;
+
+if (lf->isMetaUnique)
+    {
+    /* suppress repetition of comments */
+    if (hashLookup(lf->metaLines, line))
+        {
+        return;
+        }
+    hashAdd(lf->metaLines, line, NULL);
+    }
+for (meta = lf->metaOutput ; meta != NULL ; meta = meta->next)
+    if (line != NULL && meta->metaFile != NULL)
+        fprintf(meta->metaFile,"%s\n", line);
+}
+
+static void metaDataFree(struct lineFile *lf)
+/* free saved comments */
+{
+if (lf->isMetaUnique && lf->metaLines)
+    freeHash(&lf->metaLines);
+}
+
+void lineFileSetMetaDataOutput(struct lineFile *lf, FILE *f)
+/* set file to write meta data to,
+ * should be called before reading from input file */
+{
+struct metaOutput *meta = NULL;
+if (lf == NULL)
+    return;
+AllocVar(meta);
+meta->next = NULL;
+meta->metaFile = f;
+slAddHead(&lf->metaOutput, meta);
+}
+
+void lineFileSetUniqueMetaData(struct lineFile *lf)
+/* suppress duplicate lines in metadata */
+{
+lf->isMetaUnique = TRUE;
+lf->metaLines = hashNew(8);
+}
+
+static char * headerBytes(char *fileName, int numbytes)
+/* Return specified number of header bytes from file
+ * if file exists as a string which should be freed. */
+{
+int fd,bytesread=0;
+char *result = NULL;
+if ((fd = open(fileName, O_RDONLY)) >= 0)
+    {
+    result=needMem(numbytes+1);
+    if ((bytesread=read(fd,result,numbytes)) < numbytes)
+	freez(&result);  /* file too short? can read numbytes */
+    else
+	result[numbytes]=0;
+    close(fd);
+    }
+return result;
+}
+
+
+struct lineFile *lineFileDecompress(char *fileName, bool zTerm)
+/* open a linefile with decompression */
+{
+struct pipeline *pl;
+struct lineFile *lf;
+char *testName = NULL;
+char *testbytes = NULL;    /* the header signatures for .gz, .bz2, .Z,
+			    * .zip are all 2-4 bytes only */
+if (fileName==NULL)
+  return NULL;
+testbytes=headerBytes(fileName,4);
+if (!testbytes)
+    return NULL;  /* avoid error from pipeline */
+testName=getFileNameFromHdrSig(testbytes);
+freez(&testbytes);
+if (!testName)
+    return NULL;  /* avoid error from pipeline */
+pl = pipelineOpen1(getDecompressor(fileName), pipelineRead|pipelineSigpipe, fileName, NULL);
+lf = lineFileAttach(fileName, zTerm, pipelineFd(pl));
+lf->pl = pl;
+return lf;
+}
+
+struct lineFile *lineFileDecompressFd(char *name, bool zTerm, int fd)
+/* open a linefile with decompression from a file or socket descriptor */
+{
+struct pipeline *pl;
+struct lineFile *lf;
+pl = pipelineOpenFd1(getDecompressor(name), pipelineRead|pipelineSigpipe, fd, STDERR_FILENO);
+lf = lineFileAttach(name, zTerm, pipelineFd(pl));
+lf->pl = pl;
+return lf;
+}
+
+
+
+struct lineFile *lineFileDecompressMem(bool zTerm, char *mem, long size)
+/* open a linefile with decompression from a memory stream */
+{
+struct pipeline *pl;
+struct lineFile *lf;
+char *fileName = getFileNameFromHdrSig(mem);
+if (fileName==NULL)
+  return NULL;
+pl = pipelineOpenMem1(getDecompressor(fileName), pipelineRead|pipelineSigpipe, mem, size, STDERR_FILENO);
+lf = lineFileAttach(fileName, zTerm, pipelineFd(pl));
+lf->pl = pl;
+return lf;
+}
+
+
+
+struct lineFile *lineFileAttach(char *fileName, bool zTerm, int fd)
+/* Wrap a line file around an open'd file. */
+{
+struct lineFile *lf;
+AllocVar(lf);
+lf->fileName = cloneString(fileName);
+lf->fd = fd;
+lf->bufSize = 64*1024;
+lf->zTerm = zTerm;
+lf->buf = needMem(lf->bufSize+1);
+return lf;
+}
+
+struct lineFile *lineFileOnString(char *name, bool zTerm, char *s)
+/* Wrap a line file object around string in memory. This buffer
+ * have zeroes written into it and be freed when the line file
+ * is closed. */
+{
+struct lineFile *lf;
+AllocVar(lf);
+lf->fileName = cloneString(name);
+lf->fd = -1;
+lf->bufSize = lf->bytesInBuf = strlen(s);
+lf->zTerm = zTerm;
+lf->buf = s;
+return lf;
+}
+
+#if (defined USE_TABIX && defined KNETFILE_HOOKS && !defined USE_SAMTABIX)
+// UCSC aliases for backwards compatibility with independently patched & linked samtools and tabix:
+#define bgzf_tell ti_bgzf_tell
+#define bgzf_read ti_bgzf_read
+#endif
+
+struct lineFile *lineFileTabixMayOpen(char *fileOrUrl, bool zTerm)
+/* Wrap a line file around a data file that has been compressed and indexed
+ * by the tabix command line program.  The index file <fileOrUrl>.tbi must be
+ * readable in addition to fileOrUrl. If there's a problem, warn & return NULL.
+ * This works only if kent/src has been compiled with USE_TABIX=1 and linked
+ * with the tabix C library. */
+{
+#ifdef USE_TABIX
+if (fileOrUrl == NULL)
+    errAbort("lineFileTabixMayOpen: fileOrUrl is NULL");
+int tbiNameSize = strlen(fileOrUrl) + strlen(".tbi") + 1;
+char tbiName[tbiNameSize];
+safef(tbiName, sizeof(tbiName), "%s.tbi", fileOrUrl);
+tabix_t *tabix = ti_open(fileOrUrl, tbiName);
+if (tabix == NULL)
+    {
+    warn("Unable to open \"%s\"", fileOrUrl);
+    return NULL;
+    }
+if ((tabix->idx = ti_index_load(tbiName)) == NULL)
+    {
+    warn("Unable to load tabix index from \"%s\"", tbiName);
+    ti_close(tabix);
+    tabix = NULL;
+    return NULL;
+    }
+struct lineFile *lf = needMem(sizeof(struct lineFile));
+lf->fileName = cloneString(fileOrUrl);
+lf->fd = -1;
+lf->bufSize = 64 * 1024;
+lf->buf = needMem(lf->bufSize);
+lf->zTerm = zTerm;
+lf->tabix = tabix;
+lf->tabixIter = ti_iter_first();
+return lf;
+#else // no USE_TABIX
+warn(COMPILE_WITH_TABIX, "lineFileTabixMayOpen");
+return NULL;
+#endif // no USE_TABIX
+}
+
+boolean lineFileSetTabixRegion(struct lineFile *lf, char *seqName, int start, int end)
+/* Assuming lf was created by lineFileTabixMayOpen, tell tabix to seek to the specified region
+ * and return TRUE (or if there are no items in region, return FALSE). */
+{
+#ifdef USE_TABIX
+if (lf->tabix == NULL)
+    errAbort("lineFileSetTabixRegion: lf->tabix is NULL.  Did you open lf with lineFileTabixMayOpen?");
+if (seqName == NULL)
+    return FALSE;
+int tabixSeqId = ti_get_tid(lf->tabix->idx, seqName);
+if (tabixSeqId < 0 && startsWith("chr", seqName))
+    // We will get some files that have chr-less Ensembl chromosome names:
+    tabixSeqId = ti_get_tid(lf->tabix->idx, seqName+strlen("chr"));
+if (tabixSeqId < 0)
+    return FALSE;
+ti_iter_t iter = ti_queryi(lf->tabix, tabixSeqId, start, end);
+if (iter == NULL)
+    return FALSE;
+if (lf->tabixIter != NULL)
+    ti_iter_destroy(lf->tabixIter);
+lf->tabixIter = iter;
+lf->bufOffsetInFile = bgzf_tell(lf->tabix->fp);
+lf->bytesInBuf = 0;
+lf->lineIx = -1;
+lf->lineStart = 0;
+lf->lineEnd = 0;
+return TRUE;
+#else // no USE_TABIX
+warn(COMPILE_WITH_TABIX, "lineFileSetTabixRegion");
+return FALSE;
+#endif // no USE_TABIX
+}
+
+struct lineFile *lineFileUdcMayOpen(char *fileOrUrl, bool zTerm)
+/* Create a line file object with an underlying UDC cache. NULL if not found. */
+{
+if (fileOrUrl == NULL)
+    errAbort("lineFileUdcMayOpen: fileOrUrl is NULL");
+
+struct udcFile *udcFile = udcFileMayOpen(fileOrUrl, NULL);
+if (udcFile == NULL)
+    return NULL;
+
+struct lineFile *lf;
+AllocVar(lf);
+lf->fileName = cloneString(fileOrUrl);
+lf->fd = -1;
+lf->bufSize = 0;
+lf->buf = NULL;
+lf->zTerm = zTerm;
+lf->udcFile = udcFile;
+return lf;
+}
+
+
+void lineFileExpandBuf(struct lineFile *lf, int newSize)
+/* Expand line file buffer. */
+{
+assert(newSize > lf->bufSize);
+lf->buf = needMoreMem(lf->buf, lf->bytesInBuf, newSize);
+lf->bufSize = newSize;
+}
+
+
+struct lineFile *lineFileStdin(bool zTerm)
+/* Wrap a line file around stdin. */
+{
+return lineFileAttach("stdin", zTerm, fileno(stdin));
+}
+
+struct lineFile *lineFileMayOpen(char *fileName, bool zTerm)
+/* Try and open up a lineFile. */
+{
+if (sameString(fileName, "stdin"))
+    return lineFileStdin(zTerm);
+else if (getDecompressor(fileName) != NULL)
+    return lineFileDecompress(fileName, zTerm);
+else
+    {
+    int fd = open(fileName, O_RDONLY);
+    if (fd == -1)
+        return NULL;
+    return lineFileAttach(fileName, zTerm, fd);
+    }
+}
+
+struct lineFile *lineFileOpen(char *fileName, bool zTerm)
+/* Open up a lineFile or die trying. */
+{
+struct lineFile *lf = lineFileMayOpen(fileName, zTerm);
+if (lf == NULL)
+    errAbort("Couldn't open %s , %s", fileName, strerror(errno));
+return lf;
+}
+
+void lineFileReuse(struct lineFile *lf)
+/* Reuse current line. */
+{
+lf->reuse = TRUE;
+}
+
+
+INLINE void noTabixSupport(struct lineFile *lf, char *where)
+{
+#ifdef USE_TABIX
+if (lf->tabix != NULL)
+    lineFileAbort(lf, "%s: not implemented for lineFile opened with lineFileTabixMayOpen.", where);
+#endif // USE_TABIX
+}
+
+void lineFileSeek(struct lineFile *lf, off_t offset, int whence)
+/* Seek to read next line from given position. */
+{
+noTabixSupport(lf, "lineFileSeek");
+if (lf->checkSupport)
+    lf->checkSupport(lf, "lineFileSeek");
+if (lf->pl != NULL)
+    errnoAbort("Can't lineFileSeek on a compressed file: %s", lf->fileName);
+lf->reuse = FALSE;
+if (lf->udcFile)
+    {
+    udcSeek(lf->udcFile, offset);
+    return;
+    }
+lf->lineStart = lf->lineEnd = lf->bytesInBuf = 0;
+if ((lf->bufOffsetInFile = lseek(lf->fd, offset, whence)) == -1)
+    errnoAbort("Couldn't lineFileSeek %s", lf->fileName);
+}
+
+void lineFileRewind(struct lineFile *lf)
+/* Return lineFile to start. */
+{
+lineFileSeek(lf, 0, SEEK_SET);
+lf->lineIx = 0;
+}
+
+int lineFileLongNetRead(int fd, char *buf, int size)
+/* Keep reading until either get no new characters or
+ * have read size */
+{
+int oneSize, totalRead = 0;
+
+while (size > 0)
+    {
+    oneSize = read(fd, buf, size);
+    if (oneSize <= 0)
+        break;
+    totalRead += oneSize;
+    buf += oneSize;
+    size -= oneSize;
+    }
+return totalRead;
+}
+
+static void determineNlType(struct lineFile *lf, char *buf, int bufSize)
+/* determine type of newline used for the file, assumes buffer not empty */
+{
+char *c = buf;
+if (bufSize==0) return;
+if (lf->nlType != nlt_undet) return;  /* if already determined just exit */
+lf->nlType = nlt_unix;  /* start with default of unix lf type */
+while (c < buf+bufSize)
+    {
+    if (*c=='\r')
+	{
+    	lf->nlType = nlt_mac;
+	if (++c < buf+bufSize)
+    	    if (*c == '\n')
+    		lf->nlType = nlt_dos;
+	return;
+	}
+    if (*(c++) == '\n')
+	{
+	return;
+	}
+    }
+}
+
+boolean lineFileNext(struct lineFile *lf, char **retStart, int *retSize)
+/* Fetch next line from file. */
+{
+char *buf = lf->buf;
+int bytesInBuf = lf->bytesInBuf;
+int endIx = lf->lineEnd;
+boolean gotLf = FALSE;
+int newStart;
+
+if (lf->reuse)
+    {
+    lf->reuse = FALSE;
+    if (retSize != NULL)
+	*retSize = lf->lineEnd - lf->lineStart;
+    *retStart = buf + lf->lineStart;
+    if (lf->metaOutput && *retStart[0] == '#')
+        metaDataAdd(lf, *retStart);
+    return TRUE;
+    }
+
+if (lf->nextCallBack)
+    return lf->nextCallBack(lf, retStart, retSize);
+
+if (lf->udcFile)
+    {
+    lf->bufOffsetInFile = udcTell(lf->udcFile);
+    char *line = udcReadLine(lf->udcFile);
+    if (line==NULL)
+        return FALSE;
+    int lineSize = strlen(line);
+    lf->bytesInBuf = lineSize;
+    lf->lineIx = -1;
+    lf->lineStart = 0;
+    lf->lineEnd = lineSize;
+    *retStart = line;
+    freeMem(lf->buf);
+    lf->buf = line;
+    lf->bufSize = lineSize;
+    return TRUE;
+    }
+
+#ifdef USE_TABIX
+if (lf->tabix != NULL && lf->tabixIter != NULL)
+    {
+    // Just use line-oriented ti_read:
+    int lineSize = 0;
+    const char *line = ti_read(lf->tabix, lf->tabixIter, &lineSize);
+    if (line == NULL)
+	return FALSE;
+    lf->bufOffsetInFile = -1;
+    lf->bytesInBuf = lineSize;
+    lf->lineIx = -1;
+    lf->lineStart = 0;
+    lf->lineEnd = lineSize;
+    if (lineSize > lf->bufSize)
+	// shouldn't be!  but just in case:
+	lineFileExpandBuf(lf, lineSize * 2);
+    safecpy(lf->buf, lf->bufSize, line);
+    *retStart = lf->buf;
+    if (retSize != NULL)
+	*retSize = lineSize;
+    return TRUE;
+    }
+#endif // USE_TABIX
+
+determineNlType(lf, buf+endIx, bytesInBuf);
+
+/* Find next end of line in buffer. */
+switch(lf->nlType)
+    {
+    case nlt_unix:
+    case nlt_dos:
+	for (endIx = lf->lineEnd; endIx < bytesInBuf; ++endIx)
+	    {
+	    if (buf[endIx] == '\n')
+		{
+		gotLf = TRUE;
+		endIx += 1;
+		break;
+		}
+	    }
+	break;
+    case nlt_mac:
+	for (endIx = lf->lineEnd; endIx < bytesInBuf; ++endIx)
+	    {
+	    if (buf[endIx] == '\r')
+		{
+		gotLf = TRUE;
+		endIx += 1;
+		break;
+		}
+	    }
+	break;
+    case nlt_undet:
+	break;
+    }
+
+/* If not in buffer read in a new buffer's worth. */
+while (!gotLf)
+    {
+    int oldEnd = lf->lineEnd;
+    int sizeLeft = bytesInBuf - oldEnd;
+    int bufSize = lf->bufSize;
+    int readSize = bufSize - sizeLeft;
+
+    if (oldEnd > 0 && sizeLeft > 0)
+	{
+	memmove(buf, buf+oldEnd, sizeLeft);
+	}
+    lf->bufOffsetInFile += oldEnd;
+    if (lf->fd >= 0)
+	readSize = lineFileLongNetRead(lf->fd, buf+sizeLeft, readSize);
+#ifdef USE_TABIX
+    else if (lf->tabix != NULL && readSize > 0)
+	{
+	readSize = bgzf_read(lf->tabix->fp, buf+sizeLeft, readSize);
+	if (readSize < 1)
+	    return FALSE;
+	}
+#endif // USE_TABIX
+    else
+        readSize = 0;
+
+    if ((readSize == 0) && (endIx > oldEnd))
+	{
+	endIx = sizeLeft;
+	buf[endIx] = 0;
+	lf->bytesInBuf = newStart = lf->lineStart = 0;
+	lf->lineEnd = endIx;
+	++lf->lineIx;
+	if (retSize != NULL)
+	    *retSize = endIx - newStart;
+	*retStart = buf + newStart;
+        if (*retStart[0] == '#')
+            metaDataAdd(lf, *retStart);
+	return TRUE;
+	}
+    else if (readSize <= 0)
+	{
+	lf->bytesInBuf = lf->lineStart = lf->lineEnd = 0;
+	return FALSE;
+	}
+    bytesInBuf = lf->bytesInBuf = readSize + sizeLeft;
+    lf->lineEnd = 0;
+
+    determineNlType(lf, buf+endIx, bytesInBuf);
+
+    /* Look for next end of line.  */
+    switch(lf->nlType)
+	{
+    	case nlt_unix:
+	case nlt_dos:
+	    for (endIx = sizeLeft; endIx <bytesInBuf; ++endIx)
+		{
+		if (buf[endIx] == '\n')
+		    {
+		    endIx += 1;
+		    gotLf = TRUE;
+		    break;
+		    }
+		}
+	    break;
+	case nlt_mac:
+	    for (endIx = sizeLeft; endIx <bytesInBuf; ++endIx)
+		{
+		if (buf[endIx] == '\r')
+		    {
+		    endIx += 1;
+		    gotLf = TRUE;
+		    break;
+		    }
+		}
+	    break;
+	case nlt_undet:
+	    break;
+	}
+    if (!gotLf && bytesInBuf == lf->bufSize)
+        {
+	if (bufSize >= 512*1024*1024)
+	    {
+	    errAbort("Line too long (more than %d chars) line %d of %s",
+		lf->bufSize, lf->lineIx+1, lf->fileName);
+	    }
+	else
+	    {
+	    lineFileExpandBuf(lf, bufSize*2);
+	    buf = lf->buf;
+	    }
+	}
+    }
+
+if (lf->zTerm)
+    {
+    buf[endIx-1] = 0;
+    if ((lf->nlType == nlt_dos) && (buf[endIx-2]=='\r'))
+	{
+	buf[endIx-2] = 0;
+	}
+    }
+
+lf->lineStart = newStart = lf->lineEnd;
+lf->lineEnd = endIx;
+++lf->lineIx;
+if (retSize != NULL)
+    *retSize = endIx - newStart;
+*retStart = buf + newStart;
+if (*retStart[0] == '#')
+    metaDataAdd(lf, *retStart);
+return TRUE;
+}
+
+void lineFileVaAbort(struct lineFile *lf, char *format, va_list args)
+/* Print file name, line number, and error message, and abort. */
+{
+struct dyString *dy = dyStringNew(0);
+dyStringPrintf(dy,  "Error line %d of %s: ", lf->lineIx, lf->fileName);
+dyStringVaPrintf(dy, format, args);
+errAbort("%s", dy->string);
+dyStringFree(&dy);
+}
+
+void lineFileAbort(struct lineFile *lf, char *format, ...)
+/* Print file name, line number, and error message, and abort. */
+{
+va_list args;
+va_start(args, format);
+lineFileVaAbort(lf, format, args);
+va_end(args);
+}
+
+void lineFileUnexpectedEnd(struct lineFile *lf)
+/* Complain about unexpected end of file. */
+{
+errAbort("Unexpected end of file in %s", lf->fileName);
+}
+
+void lineFileNeedNext(struct lineFile *lf, char **retStart, int *retSize)
+/* Fetch next line from file.  Squawk and die if it's not there. */
+{
+if (!lineFileNext(lf, retStart, retSize))
+    lineFileUnexpectedEnd(lf);
+}
+
+void lineFileClose(struct lineFile **pLf)
+/* Close up a line file. */
+{
+struct lineFile *lf;
+if ((lf = *pLf) != NULL)
+    {
+    struct pipeline *pl = lf->pl;
+    if (pl != NULL)
+        {
+        pipelineClose(&lf->pl);
+        }
+    else if (lf->fd > 0 && lf->fd != fileno(stdin))
+	{
+	close(lf->fd);
+	freeMem(lf->buf);
+	}
+#ifdef USE_TABIX
+    else if (lf->tabix != NULL)
+	{
+	if (lf->tabixIter != NULL)
+	    ti_iter_destroy(lf->tabixIter);
+	ti_close(lf->tabix);
+	}
+#endif // USE_TABIX
+    else if (lf->udcFile != NULL)
+        udcFileClose(&lf->udcFile);
+
+    if (lf->closeCallBack)
+        lf->closeCallBack(lf);
+    freeMem(lf->fileName);
+    metaDataFree(lf);
+    freez(pLf);
+    }
+}
+
+void lineFileCloseList(struct lineFile **pList)
+/* Close up a list of line files. */
+{
+struct lineFile *el, *next;
+
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    lineFileClose(&el);
+    }
+*pList = NULL;
+}
+
+void lineFileExpectWords(struct lineFile *lf, int expecting, int got)
+/* Check line has right number of words. */
+{
+if (expecting != got)
+    errAbort("Expecting %d words line %d of %s got %d",
+	    expecting, lf->lineIx, lf->fileName, got);
+}
+
+void lineFileExpectAtLeast(struct lineFile *lf, int expecting, int got)
+/* Check line has right number of words. */
+{
+if (got < expecting)
+    errAbort("Expecting at least %d words line %d of %s got %d",
+	    expecting, lf->lineIx, lf->fileName, got);
+}
+
+void lineFileShort(struct lineFile *lf)
+/* Complain that line is too short. */
+{
+errAbort("Short line %d of %s", lf->lineIx, lf->fileName);
+}
+
+void lineFileReuseFull(struct lineFile *lf)
+// Reuse last full line read.  Unlike lineFileReuse,
+// lineFileReuseFull only works with previous lineFileNextFull call
+{
+assert(lf->fullLine != NULL);
+lf->fullLineReuse = TRUE;
+}
+
+
+boolean lineFileNextFull(struct lineFile *lf, char **retFull, int *retFullSize,
+                        char **retRaw, int *retRawSize)
+// Fetch next line from file joining up any that are continued by ending '\'
+// If requested, and was joined, the unjoined raw lines are also returned
+// NOTE: comment lines can't be continued!  ("# comment \ \n more comment" is 2 lines.)
+{
+// May have requested reusing the last full line.
+if (lf->fullLineReuse)
+    {
+    lf->fullLineReuse = FALSE;
+    assert(lf->fullLine != NULL);
+    *retFull = dyStringContents(lf->fullLine);
+    if (retFullSize)
+        *retFullSize = dyStringLen(lf->fullLine);
+    if (retRaw != NULL)
+        {
+        assert(lf->rawLines != NULL);
+        *retRaw = dyStringContents(lf->rawLines);
+        if (retRawSize)
+            *retRawSize = dyStringLen(lf->rawLines);
+        }
+    return TRUE;
+    }
+
+// Empty pointers
+*retFull = NULL;
+if (retRaw != NULL)
+    *retRaw = NULL;
+
+// Prepare lf buffers
+if (lf->fullLine == NULL)
+    {
+    lf->fullLine = dyStringNew(1024);
+    lf->rawLines = dyStringNew(1024); // Better to always create it than test every time
+    }
+else
+    {
+    dyStringClear(lf->fullLine);
+    dyStringClear(lf->rawLines);
+    }
+
+char *line;
+while (lineFileNext(lf, &line, NULL))
+    {
+    char *start = skipLeadingSpaces(line);
+
+    // Will the next line continue this one?
+    char *end = start;
+    if (*start == '#')  // Comment lines can't be continued!
+        end = start + strlen(start);
+    else
+        {
+        while (*end != '\0')  // walking forward for efficiency (avoid strlens())
+            {
+            for (;*end != '\0' && *end != '\\'; end++) ; // Tight loop to find '\'
+            if (*end == '\0')
+                break;
+
+            // This could be a continuation
+            char *slash = end;
+            if (*(++end) == '\\')  // escaped
+                continue;
+            end = skipLeadingSpaces(end);
+
+            if (*end == '\0') // Just whitespace after '\', so true continuation mark
+                {
+                if (retRaw != NULL) // Only if actually requested.
+                    {
+                    dyStringAppendN(lf->rawLines,line,(end - line));
+                    dyStringAppendC(lf->rawLines,'\n'); // New lines delimit raw lines.
+                    }
+                end = slash; // Don't need to zero, because of appending by length
+                break;
+                }
+            }
+        }
+
+    // Stitch together full lines
+    if (dyStringLen(lf->fullLine) == 0)
+        dyStringAppendN(lf->fullLine,line,(end - line)); // includes first line's whitespace
+    else if (start < end)             // don't include continued line's leading spaces
+        dyStringAppendN(lf->fullLine,start,(end - start));
+
+    if (*end == '\\')
+        continue;
+
+    // Got a full line now!
+    *retFull = dyStringContents(lf->fullLine);
+    if (retFullSize)
+        *retFullSize = dyStringLen(lf->fullLine);
+
+    if (retRaw != NULL && dyStringLen(lf->rawLines) > 0) // Only if actually requested & continued
+        {
+        // This is the final line which doesn't have a continuation char
+        dyStringAppendN(lf->rawLines,line,(end - line));
+        *retRaw = dyStringContents(lf->rawLines);
+        if (retRawSize)
+            *retRawSize = dyStringLen(lf->rawLines);
+        }
+    return TRUE;
+    }
+return FALSE;
+}
+
+boolean lineFileNextReal(struct lineFile *lf, char **retStart)
+/* Fetch next line from file that is not blank and
+ *  * does not start with a '#'. */
+{
+char *s, c;
+while (lineFileNext(lf, retStart, NULL))
+    {
+    s = skipLeadingSpaces(*retStart);
+    c = s[0];
+    if (c != 0 && c != '#')
+        return TRUE;
+    }
+return FALSE;
+}
+
+boolean lineFileNextFullReal(struct lineFile *lf, char **retStart)
+// Fetch next line from file that is not blank and does not start with a '#'.
+// Continuation lines (ending in '\') are joined into a single line.
+{
+while (lineFileNextFull(lf, retStart, NULL, NULL, NULL))
+    {
+    char *clippedText = skipLeadingSpaces(*retStart);
+    if (clippedText[0] != '\0' && clippedText[0] != '#')
+        return TRUE;
+    }
+return FALSE;
+}
+
+
+int lineFileChopNext(struct lineFile *lf, char *words[], int maxWords)
+/* Return next non-blank line that doesn't start with '#' chopped into words. */
+{
+int lineSize, wordCount;
+char *line;
+
+while (lineFileNext(lf, &line, &lineSize))
+    {
+    if (line[0] == '#')
+        continue;
+    wordCount = chopByWhite(line, words, maxWords);
+    if (wordCount != 0)
+        return wordCount;
+    }
+return 0;
+}
+
+int lineFileChopCharNext(struct lineFile *lf, char sep, char *words[], int maxWords)
+/* Return next non-blank line that doesn't start with '#' chopped into
+   words delimited by sep. */
+{
+int lineSize, wordCount;
+char *line;
+
+while (lineFileNext(lf, &line, &lineSize))
+    {
+    if (line[0] == '#')
+        continue;
+    wordCount = chopByChar(line, sep, words, maxWords);
+    if (wordCount != 0)
+        return wordCount;
+    }
+return 0;
+}
+
+int lineFileChopNextTab(struct lineFile *lf, char *words[], int maxWords)
+/* Return next non-blank line that doesn't start with '#' chopped into words
+ * on tabs */
+{
+int lineSize, wordCount;
+char *line;
+
+while (lineFileNext(lf, &line, &lineSize))
+    {
+    if (line[0] == '#')
+        continue;
+    wordCount = chopByChar(line, '\t', words, maxWords);
+    if (wordCount != 0)
+        return wordCount;
+    }
+return 0;
+}
+
+boolean lineFileNextCharRow(struct lineFile *lf, char sep, char *words[], int wordCount)
+/* Return next non-blank line that doesn't start with '#' chopped into words
+ * delimited by sep. Returns FALSE at EOF.  Aborts on error. */
+{
+int wordsRead;
+wordsRead = lineFileChopCharNext(lf, sep, words, wordCount);
+if (wordsRead == 0)
+    return FALSE;
+if (wordsRead < wordCount)
+    lineFileExpectWords(lf, wordCount, wordsRead);
+return TRUE;
+}
+
+boolean lineFileNextRow(struct lineFile *lf, char *words[], int wordCount)
+/* Return next non-blank line that doesn't start with '#' chopped into words.
+ * Returns FALSE at EOF.  Aborts on error. */
+{
+int wordsRead;
+wordsRead = lineFileChopNext(lf, words, wordCount);
+if (wordsRead == 0)
+    return FALSE;
+if (wordsRead < wordCount)
+    lineFileExpectWords(lf, wordCount, wordsRead);
+return TRUE;
+}
+
+boolean lineFileNextRowTab(struct lineFile *lf, char *words[], int wordCount)
+/* Return next non-blank line that doesn't start with '#' chopped into words
+ * at tabs. Returns FALSE at EOF.  Aborts on error. */
+{
+int wordsRead;
+wordsRead = lineFileChopNextTab(lf, words, wordCount);
+if (wordsRead == 0)
+    return FALSE;
+if (wordsRead < wordCount)
+    lineFileExpectWords(lf, wordCount, wordsRead);
+return TRUE;
+}
+
+int lineFileNeedFullNum(struct lineFile *lf, char *words[], int wordIx)
+/* Make sure that words[wordIx] is an ascii integer, and return
+ * binary representation of it. Require all chars in word to be digits.*/
+{
+char *c;
+for (c = words[wordIx]; *c; c++)
+    {
+    if (*c == '-' || isdigit(*c))
+        /* NOTE: embedded '-' will be caught by lineFileNeedNum */
+        continue;
+    errAbort("Expecting integer field %d line %d of %s, got %s",
+            wordIx+1, lf->lineIx, lf->fileName, words[wordIx]);
+    }
+return lineFileNeedNum(lf, words, wordIx);
+}
+
+int lineFileNeedNum(struct lineFile *lf, char *words[], int wordIx)
+/* Make sure that words[wordIx] is an ascii integer, and return
+ * binary representation of it. Conversion stops at first non-digit char. */
+{
+char *ascii = words[wordIx];
+char c = ascii[0];
+if (c != '-' && !isdigit(c))
+    errAbort("Expecting number field %d line %d of %s, got %s",
+    	wordIx+1, lf->lineIx, lf->fileName, ascii);
+return atoi(ascii);
+}
+
+int lineFileCheckAllIntsNoAbort(char *s, void *val, 
+    boolean isSigned, int byteCount, char *typeString, boolean noNeg, 
+    char *errMsg, int errMsgSize)
+/* Convert string to (signed) integer of the size specified.  
+ * Unlike atol assumes all of string is number, no trailing trash allowed.
+ * Returns 0 if conversion possible, and value is returned in 'val'
+ * Otherwise 1 for empty string or trailing chars, and 2 for numeric overflow,
+ * and 3 for (-) sign in unsigned number.
+ * Error messages if any are written into the provided buffer.
+ * Pass NULL val if you only want validation.
+ * Use noNeg if negative values are not allowed despite the type being signed,
+ * returns 4. */
+{
+unsigned long long res = 0, oldRes = 0;
+boolean isMinus = FALSE;
+
+if ((byteCount != 1) 
+ && (byteCount != 2)
+ && (byteCount != 4)
+ && (byteCount != 8))
+    errAbort("Unexpected error: Invalid byte count for integer size in lineFileCheckAllIntsNoAbort, expected 1 2 4 or 8, got %d.", byteCount);
+
+unsigned long long limit = 0xFFFFFFFFFFFFFFFFULL >> (8*(8-byteCount));
+
+if (isSigned) 
+    limit >>= 1;
+
+char *p, *p0 = s;
+
+if (*p0 == '-')
+    {
+    if (isSigned)
+	{
+	if (noNeg)
+	    {
+	    safef(errMsg, errMsgSize, "Negative value not allowed");
+	    return 4; 
+	    }
+	p0++;
+	++limit;
+	isMinus = TRUE;
+	}
+    else
+	{
+	safef(errMsg, errMsgSize, "Unsigned %s may not begin with minus sign (-)", typeString);
+	return 3; 
+	}
+    }
+p = p0;
+while ((*p >= '0') && (*p <= '9'))
+    {
+    res *= 10;
+    if (res < oldRes)
+	{
+	safef(errMsg, errMsgSize, "%s%s overflowed", isSigned ? "signed ":"", typeString);
+	return 2; 
+	}
+    oldRes = res;
+    res += *p - '0';
+    if (res < oldRes)
+	{
+	safef(errMsg, errMsgSize, "%s%s overflowed", isSigned ? "signed ":"", typeString);
+	return 2; 
+	}
+    if (res > limit)
+	{
+	safef(errMsg, errMsgSize, "%s%s overflowed, limit=%s%llu", isSigned ? "signed ":"", typeString, isMinus ? "-" : "", limit);
+	return 2; 
+	}
+    oldRes = res;
+    p++;
+    }
+/* test for invalid character, empty, or just a minus */
+if (*p != '\0')
+    {
+    safef(errMsg, errMsgSize, "Trailing characters parsing %s%s", isSigned ? "signed ":"", typeString);
+    return 1;
+    }
+if (p == p0)
+    {
+    safef(errMsg, errMsgSize, "Empty string parsing %s%s", isSigned ? "signed ":"", typeString);
+    return 1;
+    }
+
+if (!val)
+    return 0;  // only validation required
+
+switch (byteCount)
+    {
+    case 1:
+	if (isSigned)
+	    {
+	    if (isMinus)
+		*(char *)val = -res;
+	    else
+		*(char *)val = res;
+	    }
+	else
+	    *(unsigned char *)val = res;
+	break;
+    case 2:
+	if (isSigned)
+	    {
+	    if (isMinus)
+		*(short *)val = -res;
+	    else
+		*(short *)val = res;
+	    }
+	else
+	    *(unsigned short *)val = res;
+	break;
+    case 4:
+	if (isSigned)
+	    {
+	    if (isMinus)
+		*(int *)val = -res;
+	    else
+		*(int *)val = res;
+	    }
+	else
+	    *(unsigned *)val = res;
+	break;
+    case 8:
+	if (isSigned)
+	    {
+	    if (isMinus)
+		*(long long *)val = -res;
+	    else
+		*(long long *) val =res;
+	    }
+	else
+	    *(unsigned long long *)val = res;
+	break;
+    }
+
+
+return 0;
+}
+
+void lineFileAllInts(struct lineFile *lf, char *words[], int wordIx, void *val,
+  boolean isSigned,  int byteCount, char *typeString, boolean noNeg)
+/* Returns long long integer from converting the input string. Aborts on error. */
+{
+char *s = words[wordIx];
+char errMsg[256];
+int res = lineFileCheckAllIntsNoAbort(s, val, isSigned, byteCount, typeString, noNeg, errMsg, sizeof errMsg);
+if (res > 0)
+    {
+    errAbort("%s in field %d line %d of %s, got %s",
+	errMsg, wordIx+1, lf->lineIx, lf->fileName, s);
+    }
+}
+
+int lineFileAllIntsArray(struct lineFile *lf, char *words[], int wordIx, void *array, int arraySize,
+  boolean isSigned,  int byteCount, char *typeString, boolean noNeg)
+/* Convert comma separated list of numbers to an array.  Pass in
+ * array and max size of array. Aborts on error. Returns number of elements in parsed array. */
+{
+char *s = words[wordIx];
+char errMsg[256];
+unsigned count = 0;
+char *cArray = array;
+for (;;)
+    {
+    char *e;
+    if (s == NULL || s[0] == 0 || count == arraySize)
+        break;
+    e = strchr(s, ',');
+    if (e)
+        *e = 0;
+    int res = lineFileCheckAllIntsNoAbort(s, cArray, isSigned, byteCount, typeString, noNeg, errMsg, sizeof errMsg);
+    if (res > 0)
+	{
+	errAbort("%s in column %d of array field %d line %d of %s, got %s",
+	    errMsg, count, wordIx+1, lf->lineIx, lf->fileName, s);
+	}
+    if (cArray) // NULL means validation only.
+	cArray += byteCount;  
+    count++;
+    if (e)  // restore input string
+        *e++ = ',';
+    s = e;
+    }
+return count;
+}
+
+
+double lineFileNeedDouble(struct lineFile *lf, char *words[], int wordIx)
+/* Make sure that words[wordIx] is an ascii double value, and return
+ * binary representation of it. */
+{
+char *valEnd;
+char *val = words[wordIx];
+double doubleValue;
+
+doubleValue = strtod(val, &valEnd);
+if ((*val == '\0') || (*valEnd != '\0'))
+    errAbort("Expecting double field %d line %d of %s, got %s",
+    	wordIx+1, lf->lineIx, lf->fileName, val);
+return doubleValue;
+}
+
+void lineFileSkip(struct lineFile *lf, int lineCount)
+/* Skip a number of lines. */
+{
+int i, lineSize;
+char *line;
+
+for (i=0; i<lineCount; ++i)
+    {
+    if (!lineFileNext(lf, &line, &lineSize))
+        errAbort("Premature end of file in %s", lf->fileName);
+    }
+}
+
+char *lineFileSkipToLineStartingWith(struct lineFile *lf, char *start, int maxCount)
+/* Skip to next line that starts with given string.  Return NULL
+ * if no such line found, otherwise return the line. */
+{
+char *line;
+while (lineFileNext(lf, &line, NULL) && --maxCount >= 0)
+    {
+    if (startsWith(start, line))
+        return line;
+    }
+return NULL;
+}
+
+char *lineFileReadAll(struct lineFile *lf)
+/* Read remainder of lineFile and return it as a string. */
+{
+struct dyString *dy = dyStringNew(1024*4);
+lf->zTerm = 0;
+int size;
+char *line;
+while (lineFileNext(lf, &line, &size))
+    dyStringAppendN(dy, line, size);
+return dyStringCannibalize(&dy);
+}
+
+boolean lineFileParseHttpHeader(struct lineFile *lf, char **hdr,
+				boolean *chunked, int *contentLength)
+/* Extract HTTP response header from lf into hdr, tell if it's
+ * "Transfer-Encoding: chunked" or if it has a contentLength. */
+{
+  struct dyString *header = newDyString(1024);
+  char *line;
+  int lineSize;
+
+  if (chunked != NULL)
+    *chunked = FALSE;
+  if (contentLength != NULL)
+    *contentLength = -1;
+  dyStringClear(header);
+  if (lineFileNext(lf, &line, &lineSize))
+    {
+      if (startsWith("HTTP/", line))
+	{
+	char *version, *code;
+	dyStringAppendN(header, line, lineSize-1);
+	dyStringAppendC(header, '\n');
+	version = nextWord(&line);
+	code = nextWord(&line);
+	if (code == NULL)
+	    {
+	    warn("%s: Expecting HTTP/<version> <code> header line, got this: %s\n", lf->fileName, header->string);
+	    *hdr = cloneString(header->string);
+	    dyStringFree(&header);
+	    return FALSE;
+	    }
+	if (!sameString(code, "200"))
+	    {
+	    warn("%s: Errored HTTP response header: %s %s %s\n", lf->fileName, version, code, line);
+	    *hdr = cloneString(header->string);
+	    dyStringFree(&header);
+	    return FALSE;
+	    }
+	while (lineFileNext(lf, &line, &lineSize))
+	    {
+	    /* blank line means end of HTTP header */
+	    if ((line[0] == '\r' && line[1] == 0) || line[0] == 0)
+	        break;
+	    if (strstr(line, "Transfer-Encoding: chunked") && chunked != NULL)
+	        *chunked = TRUE;
+	    dyStringAppendN(header, line, lineSize-1);
+	    dyStringAppendC(header, '\n');
+	    if (strstr(line, "Content-Length:"))
+	      {
+		code = nextWord(&line);
+		code = nextWord(&line);
+		if (contentLength != NULL)
+		    *contentLength = atoi(code);
+	      }
+	    }
+	}
+      else
+	{
+	  /* put the line back, don't put it in header/hdr */
+	  lineFileReuse(lf);
+	  warn("%s: Expecting HTTP/<version> <code> header line, got this: %s\n", lf->fileName, header->string);
+	  *hdr = cloneString(header->string);
+	  dyStringFree(&header);
+	  return FALSE;
+	}
+    }
+  else
+    {
+      *hdr = cloneString(header->string);
+      dyStringFree(&header);
+      return FALSE;
+    }
+
+  *hdr = cloneString(header->string);
+  dyStringFree(&header);
+  return TRUE;
+} /* lineFileParseHttpHeader */
+
+struct dyString *lineFileSlurpHttpBody(struct lineFile *lf,
+				       boolean chunked, int contentLength)
+/* Return a dyString that contains the http response body in lf.  Handle
+ * chunk-encoding and content-length. */
+{
+  struct dyString *body = newDyString(64*1024);
+  char *line;
+  int lineSize;
+
+  dyStringClear(body);
+  if (chunked)
+    {
+      /* Handle "Transfer-Encoding: chunked" body */
+      /* Procedure from RFC2068 section 19.4.6 */
+      char *csword;
+      unsigned chunkSize = 0;
+      unsigned size;
+      do
+	{
+	  /* Read line that has chunk size (in hex) as first word. */
+	  if (lineFileNext(lf, &line, NULL))
+	    csword = nextWord(&line);
+	  else break;
+	  if (sscanf(csword, "%x", &chunkSize) < 1)
+	    {
+	      warn("%s: chunked transfer-encoding chunk size parse error.\n",
+		   lf->fileName);
+	      break;
+	    }
+	  /* If chunk size is 0, read in a blank line & then we're done. */
+	  if (chunkSize == 0)
+	    {
+	      lineFileNext(lf, &line, NULL);
+	      if (line == NULL || (line[0] != '\r' && line[0] != 0))
+		warn("%s: chunked transfer-encoding: expected blank line, got %s\n",
+		     lf->fileName, line);
+
+	      break;
+	    }
+	  /* Read (and save) lines until we have read in chunk. */
+	  for (size = 0;  size < chunkSize;  size += lineSize)
+	    {
+	      if (! lineFileNext(lf, &line, &lineSize))
+		break;
+	      dyStringAppendN(body, line, lineSize-1);
+	      dyStringAppendC(body, '\n');
+	    }
+	  /* Read blank line - or extra CRLF inserted in the middle of the
+	   * current line, in which case we need to trim it. */
+	  if (size > chunkSize)
+	    {
+	      body->stringSize -= (size - chunkSize);
+	      body->string[body->stringSize] = 0;
+	    }
+	  else if (size == chunkSize)
+	    {
+	      lineFileNext(lf, &line, NULL);
+	      if (line == NULL || (line[0] != '\r' && line[0] != 0))
+		warn("%s: chunked transfer-encoding: expected blank line, got %s\n",
+		     lf->fileName, line);
+	    }
+	} while (chunkSize > 0);
+      /* Try to read in next line.  If it's an HTTP header, put it back. */
+      /* If there is a next line but it's not an HTTP header, it's a footer. */
+      if (lineFileNext(lf, &line, NULL))
+	{
+	  if (startsWith("HTTP/", line))
+	    lineFileReuse(lf);
+	  else
+	    {
+	      /* Got a footer -- keep reading until blank line */
+	      warn("%s: chunked transfer-encoding: got footer %s, discarding it.\n",
+		   lf->fileName, line);
+	      while (lineFileNext(lf, &line, NULL))
+		{
+		  if ((line[0] == '\r' && line[1] == 0) || line[0] == 0)
+		    break;
+		  warn("discarding footer line: %s\n", line);
+		}
+	    }
+	}
+    }
+  else if (contentLength >= 0)
+    {
+      /* Read in known length */
+      int size;
+      for (size = 0;  size < contentLength;  size += lineSize)
+	{
+	  if (! lineFileNext(lf, &line, &lineSize))
+	    break;
+	  dyStringAppendN(body, line, lineSize-1);
+	  dyStringAppendC(body, '\n');
+	}
+    }
+  else
+    {
+      /* Read in to end of file (assume it's not a persistent connection) */
+      while (lineFileNext(lf, &line, &lineSize))
+	{
+	  dyStringAppendN(body, line, lineSize-1);
+	  dyStringAppendC(body, '\n');
+	}
+    }
+
+  return(body);
+} /* lineFileSlurpHttpBody */
+
+void lineFileRemoveInitialCustomTrackLines(struct lineFile *lf)
+/* remove initial browser and track lines */
+{
+char *line;
+while (lineFileNextReal(lf, &line))
+    {
+    if (!(startsWith("browser", line) || startsWith("track", line) ))
+        {
+        verbose(2, "found line not browser or track: %s\n", line);
+        lineFileReuse(lf);
+        break;
+        }
+    verbose(2, "skipping %s\n", line);
+    }
+}
+
diff --git a/gbtools/src/blatSrc/lib/localmem.c b/gbtools/src/blatSrc/lib/localmem.c
new file mode 100644
index 0000000..50f62a1
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/localmem.c
@@ -0,0 +1,200 @@
+/* LocalMem.c - local memory routines. 
+ * 
+ * These routines are meant for the sort of scenario where
+ * a lot of little to medium size pieces of memory are
+ * allocated, and then disposed of all at once.
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+
+#include "common.h"
+#include "localmem.h"
+
+
+struct lm
+    {
+    struct lmBlock *blocks;
+    size_t blockSize;
+    size_t allignMask;
+    size_t allignAdd;
+    };
+
+struct lmBlock
+    {
+    struct lmBlock *next;
+    char *free;
+    char *end;
+    char *extra;
+    };
+
+static struct lmBlock *newBlock(struct lm *lm, size_t reqSize)
+/* Allocate a new block of at least reqSize */
+{
+size_t size = (reqSize > lm->blockSize ? reqSize : lm->blockSize);
+size_t fullSize = size + sizeof(struct lmBlock);
+struct lmBlock *mb = needLargeZeroedMem(fullSize);
+if (mb == NULL)
+    errAbort("Couldn't allocate %lld bytes", (long long)fullSize);
+mb->free = (char *)(mb+1);
+mb->end = ((char *)mb) + fullSize;
+mb->next = lm->blocks;
+lm->blocks = mb;
+return mb;
+}
+
+struct lm *lmInit(int blockSize)
+/* Create a local memory pool. */
+{
+struct lm *lm;
+int aliSize = sizeof(long);
+if (aliSize < sizeof(double))
+    aliSize = sizeof(double);
+if (aliSize < sizeof(void *))
+    aliSize = sizeof(void *);
+lm = needMem(sizeof(*lm));
+lm->blocks = NULL;
+if (blockSize <= 0)
+    blockSize = (1<<14);    /* 16k default. */
+lm->blockSize = blockSize;
+lm->allignAdd = (aliSize-1);
+lm->allignMask = ~lm->allignAdd;
+newBlock(lm, blockSize);
+return lm;
+}
+
+void lmCleanup(struct lm **pLm)
+/* Clean up a local memory pool. */
+{
+    struct lm *lm = *pLm;
+    if (lm == NULL)
+        return;
+    slFreeList(&lm->blocks);
+    freeMem(lm);
+    *pLm = NULL;
+}
+
+size_t lmAvailable(struct lm *lm)
+// Returns currently available memory in pool
+{
+struct lmBlock *mb = lm->blocks;
+return (mb->end - mb->free);
+}
+
+size_t lmSize(struct lm *lm)
+// Returns current size of pool, even for memory already allocated
+{
+size_t fullSize = 0;
+
+struct lmBlock *mb = lm->blocks;
+for (;mb != NULL;mb = mb->next)
+    fullSize += (mb->end - (char *)(mb+1));
+
+return fullSize;
+}
+
+void *lmAlloc(struct lm *lm, size_t size)
+/* Allocate memory from local pool. */
+{
+struct lmBlock *mb = lm->blocks;
+void *ret;
+size_t memLeft = mb->end - mb->free;
+if (memLeft < size)
+    mb = newBlock(lm, size);
+ret = mb->free;
+mb->free += ((size+lm->allignAdd)&lm->allignMask);
+if (mb->free > mb->end)
+    mb->free = mb->end;
+return ret;
+}
+
+void *lmAllocMoreMem(struct lm *lm, void *pt, size_t oldSize, size_t newSize)
+/* Adjust memory size on a block, possibly relocating it.  If block is grown,
+ * new memory is zeroed. */
+{
+struct lmBlock *mb = lm->blocks;
+// rare case that pointer is to last lm alloc, but still try.
+// Note this is the one place where the pointer gets reused and it is known to be in this lm
+if ((char *)pt + oldSize == mb->free
+&&  (char *)pt + newSize <= mb->end)
+    {
+    if (newSize > oldSize) // only move the free pointer on more mem
+        mb->free = pt + newSize;
+    return pt;
+    }
+void *new = lmAlloc(lm, newSize);
+memcpy(new, pt, oldSize);
+return new;
+}
+
+void *lmCloneMem(struct lm *lm, void *pt, size_t size)
+/* Return a local mem copy of memory block. */
+{
+void *d = lmAlloc(lm, size);
+memcpy(d, pt, size);
+return d;
+}
+
+char *lmCloneStringZ(struct lm *lm, char *string, int size)
+/* Return local mem copy of string. */
+{
+if (string == NULL)
+    return NULL;
+else
+    {
+    char *s = lmAlloc(lm, size+1);
+    memcpy(s, string, size);
+    return s;
+    }
+}
+
+char *lmCloneString(struct lm *lm, char *string)
+/* Return local mem copy of string. */
+{
+if (string == NULL)
+    return NULL;
+else
+    return lmCloneStringZ(lm, string, strlen(string));
+}
+
+char *lmCloneFirstWord(struct lm *lm, char *line)
+/* Clone first word in line */
+{
+char *startFirstWord = skipLeadingSpaces(line);
+if (startFirstWord == NULL)
+    return NULL;
+char *endFirstWord = skipToSpaces(startFirstWord);
+if (endFirstWord == NULL)
+    return lmCloneString(lm, startFirstWord);
+else
+    return lmCloneStringZ(lm, startFirstWord, endFirstWord - startFirstWord);
+}
+    
+char *lmCloneSomeWord(struct lm *lm, char *line, int wordIx)
+/* Return a clone of the given space-delimited word within line.  Returns NULL if
+ * not that many words in line. */
+{
+if (wordIx < 0)
+    return NULL;
+int i;
+for (i=0; i<wordIx; ++i)
+    {
+    line = skipLeadingSpaces(line);
+    line = skipToSpaces(line);
+    if (line == NULL)
+        return NULL;
+    }
+return lmCloneFirstWord(lm, line);
+}
+
+
+struct slName *lmSlName(struct lm *lm, char *name)
+/* Return slName in memory. */
+{
+struct slName *n;
+int size = sizeof(*n) + strlen(name) + 1;
+n = lmAlloc(lm, size);
+strcpy(n->name, name);
+return n;
+}
+
diff --git a/gbtools/src/blatSrc/lib/log.c b/gbtools/src/blatSrc/lib/log.c
new file mode 100644
index 0000000..953a991
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/log.c
@@ -0,0 +1,354 @@
+/* log.c - logging for servers, can log to a file and/or syslog.  Compile with
+ * -DNO_SYSLOG for systems without syslog. */
+
+/* Copyright (C) 2013 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "log.h"
+#include "errAbort.h"
+#include "dystring.h"
+#include "options.h"
+#include "portable.h"
+
+#ifndef NO_SYSLOG
+#include <syslog.h>
+#endif
+#include <time.h>
+
+
+static char *gProgram = "unknown";  /* name of program */
+static boolean gSysLogOn = FALSE;   /* syslog logging enabled? */
+static FILE *gLogFh = NULL;         /* logging file */
+
+struct nameVal
+/* pair of string name and integer value */
+{
+    char *name;
+    int val;
+};
+
+#ifndef NO_SYSLOG
+
+static struct nameVal facilityNameTbl[] =
+/* not all version of syslog have the facilitynames table, so  define our own */
+{
+    {"auth",         LOG_AUTH},
+#ifdef LOG_AUTHPRIV
+    {"authpriv",     LOG_AUTHPRIV},
+#endif
+    {"cron",         LOG_CRON},
+    {"daemon",       LOG_DAEMON},
+#ifdef LOG_FTP
+    {"ftp",          LOG_FTP},
+#endif
+    {"kern",         LOG_KERN},
+    {"lpr",          LOG_LPR},
+    {"mail",         LOG_MAIL},
+    {"news",         LOG_NEWS},
+    {"syslog",       LOG_SYSLOG},
+    {"user",         LOG_USER},
+#ifdef LOG_UUCP
+    {"uucp",         LOG_UUCP},
+#endif
+    {"local0",       LOG_LOCAL0},
+    {"local1",       LOG_LOCAL1},
+    {"local2",       LOG_LOCAL2},
+    {"local3",       LOG_LOCAL3},
+    {"local4",       LOG_LOCAL4},
+    {"local5",       LOG_LOCAL5},
+    {"local6",       LOG_LOCAL6},
+    {"local7",       LOG_LOCAL7},
+    {NULL,           0}
+};
+#endif
+
+/* Priority numbers and names used for setting minimum priority to log.  This
+ * is kept independent of syslog, so it works on file logging too.  */
+#define	PRI_EMERG	0
+#define	PRI_ALERT	1
+#define	PRI_CRIT	2
+#define	PRI_ERR		3
+#define	PRI_WARNING	4
+#define	PRI_NOTICE	5
+#define	PRI_INFO	6
+#define	PRI_DEBUG	7
+
+static struct nameVal priorityNameTbl[] = {
+    {"panic", PRI_EMERG},
+    {"emerg", PRI_EMERG},
+    {"alert", PRI_ALERT},
+    {"crit", PRI_CRIT},
+    {"err", PRI_ERR},
+    {"error", PRI_ERR},
+    {"warn", PRI_WARNING},
+    {"warning", PRI_WARNING},
+    {"notice", PRI_NOTICE},
+    {"info", PRI_INFO},
+    {"debug", PRI_DEBUG},
+    {NULL, -1}
+    };
+
+static int gMinPriority = PRI_INFO;  // minimum priority to log (reverse numbering)
+
+static int nameValTblFind(struct nameVal *tbl, char *name)
+/* search a nameVal table, return -1 if not found */
+{
+int i;
+for (i = 0; tbl[i].name != NULL; i++)
+    {
+    if (sameString(tbl[i].name, name))
+        return tbl[i].val;
+    }
+return -1;
+}
+
+static char *nameValTblMsg(struct nameVal *tbl)
+/* generate a message for values in table */
+{
+struct dyString *msg = dyStringNew(256);
+int i;
+for (i = 0; tbl[i].name != NULL; i++)
+    {
+    if (i > 0)
+        dyStringAppend(msg, ", ");
+    dyStringAppend(msg, tbl[i].name);
+    }
+return dyStringCannibalize(&msg);
+}
+
+static void logWarnHandler(char *format, va_list args)
+/* Warn handler that logs message. */
+{
+if (isErrAbortInProgress())
+    logErrorVa(format, args);
+else
+    logWarnVa(format, args);
+}
+
+static void logAbortHandler()
+/* abort handler that logs this fact and exits. */
+{
+logError("%s aborted", gProgram);
+fprintf(stderr, "aborted");
+exit(1);
+}
+
+static void setProgram(char* program)
+/* set the program name, removing leading directories from file */
+{
+char name[128], ext[64];
+int len;
+splitPath(program, NULL, name, ext);
+len = strlen(name) + strlen(ext) + 1;
+gProgram = needMem(len);
+strcpy(gProgram, name);
+if (ext[0] != '\0')
+    strcat(gProgram, ext); /* includes dot */
+}
+
+#ifndef NO_SYSLOG
+static int parseFacility(char *facility)
+/* parse a facility name into a number, or use default if NULL. */
+{
+if (facility == NULL)
+    return LOG_LOCAL0;
+int val = nameValTblFind(facilityNameTbl, facility);
+if (val < 0)
+    errAbort("invalid log facility: %s, expected one of: %s", facility, nameValTblMsg(facilityNameTbl));
+return val;
+}
+#endif
+
+static int parsePriority(char *pri)
+/* parse a priority name into a number, or use default if NULL. */
+{
+if (pri == NULL)
+    return PRI_INFO;
+int val = nameValTblFind(priorityNameTbl, pri);
+if (val < 0)
+    errAbort("invalid log priority: %s, expected one of: %s", pri, nameValTblMsg(priorityNameTbl));
+return val;
+}
+
+void logOpenSyslog(char* program, char *facility)
+/* Initialize syslog using the specified facility.  Facility is the syslog
+ * facility as specified in syslog.conf.  If facility is NULL, local0 is used.
+ * This adds a warn and errAbort handlers that do logging.  If custom handlers
+ * are added, they should call logErrorVa().
+ */
+{
+#ifndef NO_SYSLOG
+setProgram(program);
+openlog(program, LOG_PID, parseFacility(facility));
+pushWarnHandler(logWarnHandler);
+pushAbortHandler(logAbortHandler);
+gSysLogOn = TRUE;
+#else
+errAbort("syslog support was not compiled into %s", __FILE__);
+#endif
+}
+
+void logOpenFile(char* program, char *logFile)
+/* Initialize logging to the specified file.  Append to the file if it exists.
+ * This adds a warn and errAbort handlers that do logging.  If custom handlers
+ * are added, they should call logErrorVa().
+ */
+{
+setProgram(program);
+gLogFh = mustOpen(logFile, "a");
+pushWarnHandler(logWarnHandler);
+pushAbortHandler(logAbortHandler);
+}
+
+void logSetMinPriority(char *minPriority)
+/* set minimum priority to log, which is one of the syslog priority names,
+ * even when logging to a file */
+{
+gMinPriority = parsePriority(minPriority);
+}
+
+FILE *logGetFile()
+/* Returns the log FILE object if file logging is enabled, or NULL if it
+ * isn't. This is useful for logging debugging data that doesn't fit the log
+ * message paradigm, For example, logging fasta records. */
+{
+return gLogFh;
+}
+
+static void logFilePrint(char* level, char *format, va_list args)
+/* write a message to the log file */
+{
+static char *timeFmt = "%Y/%m/%d %H:%M:%S";
+char timeBuf[128];
+time_t curTime = time(NULL);
+strftime(timeBuf, sizeof(timeBuf), timeFmt, localtime(&curTime));
+fprintf(gLogFh, "%s: %s: ", timeBuf, level);
+vfprintf(gLogFh, format, args);
+fputc('\n', gLogFh);
+fflush(gLogFh);
+}
+
+void logErrorVa(char *format, va_list args)
+/* Variable args logError. */
+{
+if (gMinPriority >= PRI_ERR)
+    {
+#ifndef NO_SYSLOG
+    if (gSysLogOn)
+        vsyslog(LOG_ERR, format, args);
+#endif
+    if (gLogFh != NULL)
+        logFilePrint("error", format, args);
+    }
+}
+
+void logError(char *format, ...)
+/* Log an error message. */
+{
+va_list args;
+va_start(args, format);
+logErrorVa(format, args);
+va_end(args);
+}
+
+void logWarnVa(char *format, va_list args)
+/* Variable args logWarn. */
+{
+if (gMinPriority >= PRI_WARNING)
+    {
+#ifndef NO_SYSLOG
+    if (gSysLogOn)
+        vsyslog(LOG_WARNING, format, args);
+#endif
+    if (gLogFh != NULL)
+        logFilePrint("warn", format, args);
+    }
+}
+
+void logWarn(char *format, ...)
+/* Log a warn message. */
+{
+va_list args;
+va_start(args, format);
+logWarnVa(format, args);
+va_end(args);
+}
+
+void logInfoVa(char *format, va_list args)
+/* Variable args logInfo. */
+{
+if (gMinPriority >= PRI_INFO)
+    {
+#ifndef NO_SYSLOG
+    if (gSysLogOn)
+        vsyslog(LOG_INFO, format, args);
+#endif
+    if (gLogFh != NULL)
+        logFilePrint("info", format, args);
+    }
+}
+
+void logInfo(char *format, ...)
+/* Log an info message. */
+{
+va_list args;
+va_start(args, format);
+logInfoVa(format, args);
+va_end(args);
+}
+
+void logDebugVa(char *format, va_list args)
+/* Variable args logDebug. */
+{
+if (gMinPriority >= PRI_DEBUG)
+    {
+#ifndef NO_SYSLOG
+    if (gSysLogOn)
+        vsyslog(LOG_DEBUG, format, args);
+#endif
+    if (gLogFh != NULL)
+        logFilePrint("debug", format, args);
+    }
+}
+
+void logDebug(char *format, ...)
+/* Log a debug message. */
+{
+va_list args;
+va_start(args, format);
+logDebugVa(format, args);
+va_end(args);
+}
+
+void logDaemonize(char *progName)
+/* daemonize parasol server process, closing open file descriptors and
+ * starting logging based on the -logFacility and -log command line options .
+ * if -debug is supplied , don't fork. */
+{
+if (!optionExists("debug"))
+    {
+    int i, maxFiles = getdtablesize();
+    if (mustFork() != 0)
+        exit(0);  /* parent goes away */
+
+    /* Put self in our own process group. */
+    setsid();
+
+    /* Close all open files first (before logging) */
+    for (i = 0; i < maxFiles; i++)
+        close(i);
+
+    /* Reopen standard files to /dev/null just in case somebody uses them. */
+    int nullFd = open("/dev/null", O_RDWR);  // Opens stdin
+    dup(nullFd);			     // Stdout goes also to /dev/null
+    dup(nullFd);			     // Stderr goes also to /dev/null
+    }
+
+/* Set up log handler. */
+if (optionExists("log"))
+    logOpenFile(progName, optionVal("log", NULL));
+else    
+    logOpenSyslog(progName, optionVal("logFacility", NULL));
+}
+
diff --git a/gbtools/src/blatSrc/lib/longToList.c b/gbtools/src/blatSrc/lib/longToList.c
new file mode 100644
index 0000000..448fc23
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/longToList.c
@@ -0,0 +1,103 @@
+/* longToList - this is a way of associating a generic list with a long key.
+ * You can retrieve back the list given the key,  and add to lists associated with
+ * any given tree. The list can be any sort of singly-linked object that starts with
+ * a next field. 
+ *
+ * Under the hood this uses a balanced binary tree to handle the key/list
+ * association. */
+
+/* Copyright (C) 2014 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "localmem.h"
+#include "rbTree.h"
+#include "longToList.h"
+
+static int llKeyListCmp(void *va, void *vb)
+/* Compare to sort two llKeyLists on key */
+{
+/* Point typed pointers at a and b */
+struct llKeyList *a = va;
+struct llKeyList *b = vb;
+
+/* We can't just return a->key - b->key because of long/int overflow */
+if (a->key > b->key)
+    return 1;
+else if (a->key < b->key)
+    return -1;
+else
+    return 0;
+}
+
+struct longToList *longToListNew()
+/* Return new empty longToList */
+{
+struct longToList *ll;
+AllocVar(ll);
+ll->tree = rbTreeNew(llKeyListCmp);
+ll->lm = ll->tree->lm;
+return ll;
+}
+
+void longToListFree(struct longToList **pLl)
+/* Free up memory associated with longToList. */
+{
+struct longToList *ll = *pLl;
+if (ll != NULL)
+    {
+    rbTreeFree(&ll->tree);
+    freez(pLl);
+    }
+}
+
+struct llKeyList *longToListAdd(struct longToList *ll, long key, void *item)
+/* Add item to key-associated record in ll.  May make up new record if the
+ * key has never been seen before.  If record already exists item will be prepended
+ * to any existing items. Returns llKeyList associated with key, but most people just
+ * ignore that. */
+{
+struct slRef *ref = lmAlloc(ll->lm, sizeof(struct slRef));
+ref->val = item;
+struct llKeyList find;
+find.key = key;
+struct llKeyList *lkl = rbTreeFind(ll->tree, &find);
+if (lkl == NULL)
+    {
+    lmAllocVar(ll->lm, lkl);
+    lkl->key = key;
+    rbTreeAdd(ll->tree, lkl);
+    }
+slAddHead(&lkl->list, ref);
+return lkl;
+}
+
+struct llKeyList *longToListLookup(struct longToList *ll, long key)
+/* Given a key return llKeyList associated with it if any, may return NULL */
+{
+struct llKeyList find;
+find.key = key;
+return rbTreeFind(ll->tree, &find);
+}
+
+struct slRef *longToListFindVal(struct longToList *ll, long key)
+/* Returns the list associated with this key, or NULL if key not in container. */
+{
+struct llKeyList *lkl = longToListLookup(ll, key);
+if (lkl == NULL)
+    return NULL;
+else
+    return lkl->list;
+}
+
+struct slRef *longToListMustFindVal(struct longToList *ll, long key)
+/* Returns the list associated with this key. Aborts if key not found in container. */
+{
+struct llKeyList *lkl = longToListLookup(ll, key);
+if (lkl == NULL)
+    errAbort("Can't find %ld in longToList, in longToListMustFindVal", key);
+return lkl->list;
+}
+
+
+
diff --git a/gbtools/src/blatSrc/lib/maf.c b/gbtools/src/blatSrc/lib/maf.c
new file mode 100644
index 0000000..11d205d
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/maf.c
@@ -0,0 +1,898 @@
+/* maf.c - Read/write maf format. */
+
+/* Copyright (C) 2014 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "linefile.h"
+#include "errAbort.h"
+#include "obscure.h"
+#include "dnautil.h"
+#include "axt.h"
+#include "maf.h"
+#include "hash.h"
+#include "net.h"
+#include <fcntl.h>
+
+
+char *mafRegDefTxUpstream = "txupstream";  // transcription start size upstream region
+
+struct mafFile *mafMayOpen(char *fileName)
+/* Open up a maf file and verify header. */
+{
+struct mafFile *mf;
+struct lineFile *lf;
+char *line, *word;
+char *sig = "##maf";
+
+if ( hasProtocol(fileName))
+    lf = lineFileUdcMayOpen(fileName, TRUE);
+else
+    lf = lineFileMayOpen(fileName, TRUE);
+
+if (lf == NULL)
+    return NULL;
+AllocVar(mf);
+mf->lf = lf;
+
+lineFileNeedNext(lf, &line, NULL);
+if (!startsWith(sig, line))
+    {
+    errAbort("%s does not start with %s", fileName, sig);
+    }
+line += strlen(sig);
+
+while ((word = nextWord(&line)) != NULL)
+    {
+    /* Parse name=val. */
+    char *name = word;
+    char *val = strchr(word, '=');
+    if (val == NULL)
+       errAbort("Missing = after %s line 1 of %s\n", name, fileName);
+    *val++ = 0;
+
+    if (sameString(name, "version"))
+        mf->version = atoi(val);
+    else if (sameString(name, "scoring"))
+        mf->scoring = cloneString(val);
+    }
+if (mf->version == 0)
+    errAbort("No version line 1 of %s\n", fileName);
+return mf;
+}
+
+struct mafFile *mafOpen(char *fileName)
+/* Open up a maf file.  Squawk and die if there's a problem. */
+{
+struct mafFile *mf = mafMayOpen(fileName);
+if (mf == NULL)
+    errnoAbort("Couldn't open %s\n", fileName);
+return mf;
+}
+
+void mafRewind(struct mafFile *mf)
+/* Seek to beginning of open maf file */
+{
+if (mf == NULL)
+    errAbort("maf file rewind failed -- file not open");
+lineFileSeek(mf->lf, 0, SEEK_SET);
+}
+
+static boolean nextLine(struct lineFile *lf, char **pLine)
+/* Get next line that is not a comment. */
+{
+for (;;)
+    {
+    if (!lineFileNext(lf, pLine, NULL))
+        return FALSE;
+    if (**pLine != '#')
+        return TRUE;
+    }
+}
+
+static void mafRegDefParse(struct mafFile *mf, struct mafAli *ali, char *line)
+/* parse a 'r' line of an 'a' paragraph. */
+{
+if (ali->regDef != NULL)
+    errAbort("multiple 'r' lines in an alignment paragraph: %d of %s", mf->lf->lineIx, mf->lf->fileName);
+char *row[3];
+int wordCount = chopByWhite(line, row, ArraySize(row));
+if (wordCount != 3)
+    lineFileExpectWords(mf->lf, 3+1, wordCount+1); // +1 for 'r'
+ali->regDef = mafRegDefNew(row[0], lineFileNeedFullNum(mf->lf, row, 1),
+                           row[2]);
+}
+
+struct mafAli *mafNextWithPos(struct mafFile *mf, off_t *retOffset)
+/* Return next alignment in FILE or NULL if at end.  If retOffset is
+ * nonNULL, return start offset of record in file. */
+{
+struct lineFile *lf = mf->lf;
+struct mafAli *ali;
+char *line, *word;
+
+/* Loop until get an alignment paragraph or reach end of file. */
+for (;;)
+    {
+    /* Get alignment header line.  If it's not there assume end of file. */
+    if (!nextLine(lf, &line))
+	{
+	lineFileClose(&mf->lf);
+	return NULL;
+	}
+
+    /* Parse alignment header line. */
+    word = nextWord(&line);
+    if (word == NULL)
+	continue;	/* Ignore blank lines. */
+	
+    if (sameString(word, "a"))
+	{
+	if (retOffset != NULL)
+	    *retOffset = lineFileTell(mf->lf);
+	AllocVar(ali);
+	while ((word = nextWord(&line)) != NULL)
+	    {
+	    /* Parse name=val. */
+	    char *name = word;
+	    char *val = strchr(word, '=');
+	    if (val == NULL)
+	       errAbort("Missing = after %s line 1 of %s", name, lf->fileName);
+	    *val++ = 0;
+
+	    if (sameString(name, "score"))
+		ali->score = atof(val);
+	    }
+
+	/* Parse alignment components until blank line. */
+	for (;;)
+	    {
+	    if (!nextLine(lf, &line))
+		break;
+	    word = nextWord(&line);
+	    if (word == NULL)
+		break;
+	    if (sameString(word, "s") || sameString(word, "e"))
+		{
+		struct mafComp *comp;
+		int wordCount;
+		char *row[7];
+		int textSize;
+
+		/* Chop line up by white space.  This involves a few +-1's because
+		 * have already chopped out first word. */
+		row[0] = word;
+		wordCount = chopByWhite(line, row+1, ArraySize(row)-1) + 1; /* +-1 because of "s" */
+		lineFileExpectWords(lf, ArraySize(row), wordCount);
+		AllocVar(comp);
+
+		/* Convert ascii text representation to mafComp structure. */
+		comp->src = cloneString(row[1]);
+		comp->srcSize = lineFileNeedNum(lf, row, 5);
+		comp->strand = row[4][0];
+		comp->start = lineFileNeedNum(lf, row, 2);
+
+		if (sameString(word, "e"))
+		    {
+		    comp->size = 0;
+		    comp->rightLen = comp->leftLen = lineFileNeedNum(lf, row, 3);
+		    comp->rightStatus = comp->leftStatus = *row[6];
+		    }
+		else
+		    {
+		    comp->size = lineFileNeedNum(lf, row, 3);
+		    comp->text = cloneString(row[6]);
+		    textSize = strlen(comp->text);
+
+		    /* Fill in ali->text size. */
+		    if (ali->textSize == 0)
+			ali->textSize = textSize;
+		    else if (ali->textSize != textSize)
+			errAbort("Text size inconsistent (%d vs %d) line %d of %s",
+			    textSize, ali->textSize, lf->lineIx, lf->fileName);
+		    }
+
+		/* Do some sanity checking. */
+		if (comp->srcSize < 0 || comp->size < 0)
+		     errAbort("Got a negative size line %d of %s", lf->lineIx, lf->fileName);
+		if (comp->start < 0 || comp->start + comp->size > comp->srcSize)
+		     errAbort("Coordinates out of range line %d of %s", lf->lineIx, lf->fileName);
+		  
+		/* Add component to head of list. */
+		slAddHead(&ali->components, comp);
+		}
+	    if (sameString(word, "i"))
+		{
+		struct mafComp *comp;
+		int wordCount;
+		char *row[6];
+
+		/* Chop line up by white space.  This involves a few +-1's because
+		 * have already chopped out first word. */
+		row[0] = word;
+		wordCount = chopByWhite(line, row+1, ArraySize(row)-1) + 1; /* +-1 because of "s" */
+		lineFileExpectWords(lf, ArraySize(row), wordCount);
+		if (!sameString(row[1],ali->components->src))
+		    errAbort("i line src mismatch: i is %s :: s is %s\n", row[1], ali->components->src);
+
+		comp = ali->components;
+		comp->leftStatus = *row[2];
+		comp->leftLen = atoi(row[3]);
+		comp->rightStatus = *row[4];
+		comp->rightLen = atoi(row[5]);
+		}
+            if (sameString(word, "q"))
+		{
+		struct mafComp *comp;
+		int wordCount;
+		char *row[3];
+
+		/* Chop line up by white space.  This involves a few +-1's because
+		 * have already chopped out first word. */
+		row[0] = word;
+		wordCount = chopByWhite(line, row+1, ArraySize(row)-1) + 1; /* +-1 because of "s" */
+		lineFileExpectWords(lf, ArraySize(row), wordCount);
+		if (!sameString(row[1],ali->components->src))
+		    errAbort("q line src mismatch: q is %s :: s is %s\n", row[1], ali->components->src);
+
+			comp = ali->components;
+			comp->quality = cloneString(row[2]);
+		}
+	    if (sameString(word, "r"))
+                mafRegDefParse(mf, ali, line);
+	    }
+	slReverse(&ali->components);
+	return ali;
+	}
+    else  /* Skip over paragraph we don't understand. */
+	{
+	for (;;)
+	    {
+	    if (!nextLine(lf, &line))
+		return NULL;
+            if (nextWord(&line) == NULL)
+		break;
+	    }
+	}
+    }
+}
+
+
+struct mafAli *mafNext(struct mafFile *mf)
+/* Return next alignment in FILE or NULL if at end. */
+{
+return mafNextWithPos(mf, NULL);
+}
+
+
+struct mafFile *mafReadAll(char *fileName)
+/* Read all elements in a maf file */
+{
+struct mafFile *mf = mafOpen(fileName);
+struct mafAli *ali;
+while ((ali = mafNext(mf)) != NULL)
+    {
+    slAddHead(&mf->alignments, ali);
+    }
+slReverse(&mf->alignments);
+return mf;
+}
+
+void mafWriteStart(FILE *f, char *scoring)
+/* Write maf header and scoring scheme name (may be null) */
+{
+fprintf(f, "##maf version=1");
+if (scoring != NULL)
+    fprintf(f, " scoring=%s", scoring);
+fprintf(f, "\n");
+}
+
+
+void mafWrite(FILE *f, struct mafAli *ali)
+/* Write next alignment to file. */
+{
+struct mafComp *comp;
+int srcChars = 0, startChars = 0, sizeChars = 0, srcSizeChars = 0;
+
+/* Write out alignment header */
+fprintf(f, "a score=%f\n", ali->score);
+
+/* include region definition */
+if (ali->regDef != NULL)
+    fprintf(f, "r %s %d %s\n", ali->regDef->type, ali->regDef->size, ali->regDef->id);
+
+/* Figure out length of each field. */
+for (comp = ali->components; comp != NULL; comp = comp->next)
+    {
+    int len = 0;
+    /* a name like '.' will break some tools, so replace it
+    * with a generic name */
+    if (sameString(comp->src,"."))
+	comp->src=cloneString("defaultName");
+    len = strlen(comp->src);
+    if (srcChars < len)
+        srcChars = len;
+    len = digitsBaseTen(comp->start);
+    if (startChars < len)
+        startChars = len;
+    len = digitsBaseTen(comp->size);
+    if (sizeChars < len)
+        sizeChars = len;
+    len = digitsBaseTen(comp->srcSize);
+    if (srcSizeChars < len)
+        srcSizeChars = len;
+    }
+
+/* Write out each component. */
+for (comp = ali->components; comp != NULL; comp = comp->next)
+    {
+    if ((comp->size == 0) && (comp->leftStatus))
+	fprintf(f, "e %-*s %*d %*d %c %*d %c\n", 
+	    srcChars, comp->src, startChars, comp->start, 
+	    sizeChars, comp->leftLen, comp->strand, 
+	    srcSizeChars, comp->srcSize, comp->leftStatus);
+    else
+	{
+	fprintf(f, "s %-*s %*d %*d %c %*d %s\n", 
+	    srcChars, comp->src, startChars, comp->start, 
+	    sizeChars, comp->size, comp->strand, 
+	    srcSizeChars, comp->srcSize, comp->text);
+
+	if (comp->quality)
+		fprintf(f, "q %-*s %s\n",
+		srcChars + startChars + sizeChars + srcSizeChars + 5,
+		comp->src, comp->quality);
+
+	if (comp->leftStatus)
+	    fprintf(f,"i %-*s %c %d %c %d\n",srcChars,comp->src,
+		comp->leftStatus,comp->leftLen,comp->rightStatus,comp->rightLen);
+	}
+
+    }
+
+/* Write out blank separator line. */
+fprintf(f, "\n");
+}
+
+void mafWriteEnd(FILE *f)
+/* Write maf footer. In this case nothing */
+{
+}
+
+void mafWriteAll(struct mafFile *mf, char *fileName)
+/* Write out full mafFile. */
+{
+FILE *f = mustOpen(fileName, "w");
+struct mafAli *ali;
+mafWriteStart(f, mf->scoring);
+for (ali = mf->alignments; ali != NULL; ali = ali->next)
+    mafWrite(f, ali);
+mafWriteEnd(f);
+carefulClose(&f);
+}
+
+void mafCompFree(struct mafComp **pObj)
+/* Free up a maf component. */
+{
+struct mafComp *obj = *pObj;
+if (obj == NULL)
+    return;
+freeMem(obj->src);
+freeMem(obj->text);
+freeMem(obj->quality);
+freez(pObj);
+}
+
+void mafCompFreeList(struct mafComp **pList)
+/* Free up a list of maf components. */
+{
+struct mafComp *el, *next;
+
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    mafCompFree(&el);
+    }
+*pList = NULL;
+}
+
+char *mafCompGetSrcDb(struct mafComp *mc, char *buf, int bufSize)
+/* parse the srcDb name from the mafComp src name, return NULL if no srcDb */
+{
+char *e = strchr(mc->src, '.');
+if (e == NULL)
+    return NULL;
+int len = e - mc->src;
+if (len >= bufSize-1)
+    errAbort("srcDb name in \"%s\" overflows buffer length of %d", mc->src, bufSize);
+strncpy(buf, mc->src, len);
+buf[len] = '\0';
+return buf;
+}
+
+char *mafCompGetSrcName(struct mafComp *mc)
+/* parse the src sequence name from the mafComp src name */
+{
+char *e = strchr(mc->src, '.');
+if (e == NULL)
+    return mc->src;
+else
+    return e+1;
+}
+
+int mafPlusStart(struct mafComp *comp)
+/* Return start relative to plus strand of src. */
+{
+if (comp->strand == '-') 
+    return comp->srcSize - (comp->start + comp->size);
+else
+    return comp->start;
+}
+
+void mafAliFree(struct mafAli **pObj)
+/* Free up a maf alignment. */
+{
+struct mafAli *obj = *pObj;
+if (obj == NULL)
+    return;
+mafCompFreeList(&obj->components);
+mafRegDefFree(&obj->regDef);
+freez(pObj);
+}
+
+void mafAliFreeList(struct mafAli **pList)
+/* Free up a list of maf alignmentx. */
+{
+struct mafAli *el, *next;
+
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    mafAliFree(&el);
+    }
+*pList = NULL;
+}
+
+void mafFileFree(struct mafFile **pObj)
+/* Free up a maf file. */
+{
+struct mafFile *obj = *pObj;
+if (obj == NULL)
+    return;
+lineFileClose(&obj->lf);
+freeMem(obj->scoring);
+mafAliFreeList(&obj->alignments);
+freez(pObj);
+}
+
+void mafFileFreeList(struct mafFile **pList)
+/* Free up a list of maf files. */
+{
+struct mafFile *el, *next;
+
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    mafFileFree(&el);
+    }
+*pList = NULL;
+}
+
+struct mafComp *mafMayFindComponent(struct mafAli *maf, char *src)
+/* Find component of given source. Return NULL if not found. */
+{
+struct mafComp *mc;
+for (mc = maf->components; mc != NULL; mc = mc->next)
+    {
+    if (sameString(mc->src, src))
+        return mc;
+    }
+return NULL;
+}
+
+struct mafComp *mafMayFindComponentDb(struct mafAli *maf, char *db)
+/* Find component of given database, allowing component to be 
+ * labeled "db", or "db.chrom" . Return NULL if not found. */
+{
+struct mafComp *mc;
+char *p, *q;
+for (mc = maf->components; mc != NULL; mc = mc->next)
+    {
+    for (p = mc->src, q = db; *p && *q; p++, q++)
+        {
+        if (*p != *q)
+            break;
+        }
+    if (*p == '.' && *q == 0)
+        return mc;
+    if (*p == *q)
+        return mc;
+    }
+return NULL;
+}
+
+struct mafComp *mafFindComponent(struct mafAli *maf, char *src)
+/* Find component of given source or die trying. */
+{
+struct mafComp *mc = mafMayFindComponent(maf, src);
+if (mc == NULL)
+    errAbort("Couldn't find %s in maf", src);
+return mc;
+}
+
+struct mafComp *mafMayFindCompSpecies(struct mafAli *maf, char *species, char sepChar)
+/* Find component of given source that starts with species possibly followed by sepChar or \0 .
+   Return NULL if not found. */
+{
+struct mafComp *mc;
+int speciesLen = strlen(species);
+
+for (mc = maf->components; mc != NULL; mc = mc->next)
+    {
+    if (startsWith(species, mc->src) )
+	{
+	char endChar = mc->src[speciesLen];
+
+	if ((endChar == '\0') || (endChar == sepChar))
+	    return mc;
+	}
+    }
+return NULL;
+}
+
+
+struct mafComp *mafFindCompSpecies(struct mafAli *maf, char *species, char sepChar)
+/* Find component of given source that starts with species followed by sepChar
+   or die trying. */
+{
+struct mafComp *mc = mafMayFindCompSpecies(maf, species, sepChar);
+if (mc == NULL)
+    errAbort("Couldn't find %s%c or just %s... in maf", species,sepChar,species);
+return mc;
+}
+
+struct mafComp *mafMayFindCompPrefix(struct mafAli *maf, char *pre, char *sep)
+/* Find component of given source that starts with pre followed by sep.
+   Return NULL if not found. */
+{
+struct mafComp *mc;
+char prefix[256];
+
+if (sep == NULL)
+    sep = "";
+snprintf(prefix, 256, "%s%s", pre, sep);
+
+for (mc = maf->components; mc != NULL; mc = mc->next)
+    {
+    if (startsWith(prefix, mc->src))
+        return mc;
+    }
+return NULL;
+}
+
+struct mafComp *mafFindCompPrefix(struct mafAli *maf, char *pre, char *sep)
+/* Find component of given source that starts with pre followed by sep
+   or die trying. */
+{
+struct mafComp *mc = mafMayFindCompPrefix(maf, pre, sep);
+if (mc == NULL)
+    errAbort("Couldn't find %s%s... in maf", pre,sep);
+return mc;
+}
+
+struct mafComp *mafMayFindComponentInHash(struct mafAli *maf, struct hash *cHash) 
+/* Find arbitrary component of given source that matches any string in the cHash.
+   Return NULL if not found. */
+{
+struct mafComp *mc;
+
+for (mc = maf->components; mc != NULL; mc = mc->next)
+    {
+    if (hashFindVal(cHash, mc->src))
+        return mc;
+    }
+return NULL;
+}
+
+struct mafComp *mafMayFindSpeciesInHash(struct mafAli *maf, struct hash *cHash, char sepChar) 
+/* Find arbitrary component of given who's source prefix (ended by sep)
+   matches matches any string in the cHash.  Return NULL if not found. */
+{
+struct mafComp *mc;
+
+for (mc = maf->components; mc != NULL; mc = mc->next)
+    {
+    char *sep = strchr(mc->src, sepChar);
+    if (sep != NULL)
+        *sep = '\0';
+    boolean hit = hashFindVal(cHash, mc->src) != NULL;
+    if (sep != NULL)
+        *sep = sepChar;
+    if (hit)
+        return mc;
+    }
+return NULL;
+}
+
+boolean mafMayFindAllComponents(struct mafAli *maf, struct hash *cHash) 
+/* Find component of given source that starts matches any string in the cHash.
+   Return NULL if not found. */
+{
+struct hashCookie cookie = hashFirst(cHash);
+struct hashEl *el;
+
+while ((el = hashNext(&cookie)) != NULL)
+    if (mafMayFindComponent(maf, el->name) == NULL)
+	return FALSE;
+return TRUE;
+}
+
+struct mafAli *mafSubset(struct mafAli *maf, char *componentSource,
+	int newStart, int newEnd)
+{
+return mafSubsetE(maf, componentSource, newStart, newEnd, FALSE);
+}
+
+struct mafAli *mafSubsetE(struct mafAli *maf, char *componentSource,
+	int newStart, int newEnd, bool getInitialDashes)
+/* Extract subset of maf that intersects a given range
+ * in a component sequence.  The newStart and newEnd
+ * are given in the forward strand coordinates of the
+ * component sequence.  The componentSource is typically
+ * something like 'mm3.chr1'.  This will return NULL
+ * if maf does not intersect range.  The score field
+ * in the returned maf will not be filled in (since
+ * we don't know which scoring scheme to use). */
+{
+struct mafComp *mcMaster = mafFindComponent(maf, componentSource);
+struct mafAli *subset;
+struct mafComp *mc, *subMc;
+char *s, *e;
+int textStart, textSize;
+
+/* Reverse complement input range if necessary. */
+if (mcMaster->strand == '-')
+    reverseIntRange(&newStart, &newEnd, mcMaster->srcSize);
+
+/* Check if any real intersection and return NULL if not. */
+if (newStart >= newEnd)
+    return NULL;
+if (newStart >= mcMaster->start + mcMaster->size)
+    return NULL;
+if (newEnd <= mcMaster->start)
+    return NULL;
+
+/* Clip to bounds of actual data. */
+if (newStart < mcMaster->start)
+    newStart = mcMaster->start;
+if (newEnd > mcMaster->start + mcMaster->size)
+    newEnd = mcMaster->start + mcMaster->size;
+
+/* Translate position in master sequence to position in
+ * multiple alignment. */
+s = skipIgnoringDash(mcMaster->text, newStart - mcMaster->start, TRUE);
+e = skipIgnoringDash(s, newEnd - newStart, TRUE);
+textStart = s - mcMaster->text;
+textSize = e - s;
+
+if (getInitialDashes && (newStart == mcMaster->start))
+    {
+    textStart = 0;
+    textSize += s - mcMaster->text;
+    }
+
+/* Allocate subset structure and fill it in */
+AllocVar(subset);
+subset->textSize = textSize;
+for (mc = maf->components; mc != NULL; mc = mc->next)
+    {
+    AllocVar(subMc);
+    subMc->src = cloneString(mc->src);
+    subMc->srcSize = mc->srcSize;
+    subMc->strand = mc->strand;
+    if (mc->size != 0)
+        {
+        subMc->start = mc->start + countNonDash(mc->text, textStart);
+        subMc->size = countNonDash(mc->text+textStart, textSize);
+        subMc->text = cloneStringZ(mc->text + textStart, textSize);
+        if (mc->quality != NULL)
+            subMc->quality = cloneStringZ(mc->quality + textStart, textSize);
+        }
+    else
+	{
+        /* empty row annotation */
+        subMc->size = 0;
+        subMc->start = mc->start;
+	}
+
+    subMc->leftStatus = mc->leftStatus;
+    subMc->leftLen = mc->leftLen;
+    subMc->rightStatus = mc->rightStatus;
+    subMc->rightLen = mc->rightLen;
+
+    slAddHead(&subset->components, subMc);
+    }
+slReverse(&subset->components);
+return subset;
+}
+
+void mafMoveComponentToTop(struct mafAli *maf, char *componentSource)
+/* Move given component to head of component list. */
+{
+struct mafComp *mcMaster = mafFindComponent(maf, componentSource);
+slRemoveEl(&maf->components, mcMaster);
+slAddHead(&maf->components, mcMaster);
+}
+
+boolean mafNeedSubset(struct mafAli *maf, char *componentSource,
+	int newStart, int newEnd)
+/* Return TRUE if maf only partially fits between newStart/newEnd
+ * in given component. */
+{
+struct mafComp *mcMaster = mafFindComponent(maf, componentSource);
+
+/* Reverse complement input range if necessary. */
+if (mcMaster->strand == '-')
+    reverseIntRange(&newStart, &newEnd, mcMaster->srcSize);
+
+return newStart > mcMaster->start || newEnd < mcMaster->start + mcMaster->size;
+}
+
+void mafFlipStrand(struct mafAli *maf)
+/* Reverse complement maf. */
+{
+struct mafComp *mc;
+for (mc = maf->components; mc != NULL; mc = mc->next)
+    {
+    int e = mc->start + mc->size;
+    reverseIntRange(&mc->start, &e, mc->srcSize);
+    if (mc->text != NULL)
+        reverseComplement(mc->text, maf->textSize);
+	if (mc->quality != NULL)
+		reverseBytes(mc->quality, maf->textSize);
+    if (mc->strand == '-')
+        mc->strand = '+';
+    else
+        mc->strand = '-';
+    char holdStatus = mc->leftStatus;
+    mc->leftStatus = mc->rightStatus;
+    mc->rightStatus = holdStatus;
+    int holdLen = mc->leftLen;
+    mc->leftLen = mc->rightLen;
+    mc->rightLen = holdLen;
+    }
+}
+
+void mafSrcDb(char *name, char *retDb, int retDbSize)
+/* Parse out just database part of name (up to but not including
+ * first dot). If dot found, return entire name */
+{
+int len;
+char *e = strchr(name, '.');
+/* Put prefix up to dot into buf. */
+len = (e == NULL ? strlen(name) : e - name);
+if (len >= retDbSize)
+     len = retDbSize-1;
+memcpy(retDb, name, len);
+retDb[len] = 0;
+}
+
+boolean mafColumnEmpty(struct mafAli *maf, int col)
+/* Return TRUE if the column is all '-' or '.' */
+{
+assert(col < maf->textSize);
+struct mafComp *comp;
+for (comp = maf->components; comp != NULL; comp = comp->next)
+    if (comp->text != NULL)
+        {
+        char c = comp->text[col];
+        if (c != '.' && c != '-')
+            return FALSE;
+        }
+return TRUE;
+}
+
+void mafStripEmptyColumns(struct mafAli *maf)
+/* Remove columns that are all '-' or '.' from  maf. */
+{
+/* Selectively copy over non-empty columns. */
+int readIx=0, writeIx = 0;
+struct mafComp *comp;
+for (readIx=0; readIx < maf->textSize; ++readIx)
+    {
+    if (!mafColumnEmpty(maf, readIx))
+        {
+        for (comp = maf->components; comp != NULL; comp = comp->next) 
+            {
+            if(comp->text != NULL)
+                comp->text[writeIx] = comp->text[readIx];
+            if (comp->quality != NULL)
+                comp->quality[writeIx] = comp->quality[readIx];
+            }
+        ++writeIx;
+        }
+    }
+/* Zero terminate text, and update textSize. */
+for (comp = maf->components; comp != NULL; comp = comp->next)
+    {
+    if (comp->text != NULL)
+        comp->text[writeIx] = 0;
+    if (comp->quality != NULL)
+        comp->quality[writeIx] = 0;
+    }
+maf->textSize = writeIx;
+}
+
+struct mafRegDef *mafRegDefNew(char *type, int size, char *id)
+/* construct a new mafRegDef object */
+{
+struct mafRegDef *mrd;
+AllocVar(mrd);
+if (sameString(type, mafRegDefTxUpstream))
+    mrd->type = mafRegDefTxUpstream;
+else
+    errAbort("invalid mafRefDef type: %s", type);
+mrd->size = size;
+mrd->id = cloneString(id);
+return mrd;
+}
+
+void mafRegDefFree(struct mafRegDef **mrdPtr)
+/* Free a mafRegDef object */
+{
+struct mafRegDef *mrd = *mrdPtr;
+if (mrd != NULL)
+    {
+    freeMem(mrd->id);
+    freeMem(mrd);
+    *mrdPtr = NULL;
+    }
+}
+
+boolean isContigOrTandem(char status)
+/* is status MAF_CONTIG_STATUS or MAF_TANDEM_STATUS */
+{
+return ((status == MAF_CONTIG_STATUS) ||
+	(status == MAF_TANDEM_STATUS));
+}
+
+struct mafComp *mafCompClone(struct mafComp *srcComp)
+/* clone a mafComp */
+{
+struct mafComp *comp;
+AllocVar(comp);
+comp->src = cloneString(srcComp->src);
+comp->srcSize = srcComp->srcSize;
+comp->strand = srcComp->strand;
+comp->start = srcComp->start;
+comp->size = srcComp->size;
+comp->text = cloneString(srcComp->text);
+comp->quality = cloneString(srcComp->quality);
+comp->leftStatus = srcComp->leftStatus;
+comp->leftLen = srcComp->leftLen;
+comp->rightStatus = srcComp->rightStatus;
+comp->rightLen = srcComp->rightLen;
+return comp;
+}
+
+static struct mafRegDef *mafRegDefClone(struct mafRegDef *srcRegDef)
+/* clone a srcRegDef */
+{
+return mafRegDefNew(srcRegDef->type, srcRegDef->size, srcRegDef->id);
+}
+
+struct mafAli *mafAliClone(struct mafAli *srcAli)
+/* clone a mafAli */
+{
+struct mafAli *ali;
+AllocVar(ali);
+ali->score = srcAli->score;
+struct mafComp *srcComp;
+for (srcComp = srcAli->components; srcComp != NULL; srcComp = srcComp->next)
+    slAddHead(&ali->components, mafCompClone(srcComp));
+slReverse(&ali->components);
+ali->textSize = srcAli->textSize;
+if (srcAli->regDef != NULL)
+    ali->regDef = mafRegDefClone(srcAli->regDef);
+return ali;
+}
diff --git a/gbtools/src/blatSrc/lib/maf.doc b/gbtools/src/blatSrc/lib/maf.doc
new file mode 100644
index 0000000..4cf7eb1
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/maf.doc
@@ -0,0 +1,222 @@
+Specification of the Multiple Alignment Format (.maf) v1
+
+Introduction
+
+The multiple alignment format stores a series of multiple
+alignments in a format that is easy to parse and relatively
+easy to read.  We apologize for creating yet another
+multiple alignment format.  We realize that there are
+many in existence.  What motivates this format is
+to store multiple alignments at the dna level between
+entire genomes. The existing formats we are aware of
+are geared towards multiple alignments of single proteins,
+and would require considerable extension at the least to
+cope with genomic issues such as forward and reverse
+strand directions,  multiple pieces to the alignment,
+and so forth.
+
+A Simple Example
+
+Here is a simple example of a file with two alignments
+with three sequences each:
+
+##maf version=1 scoring=probability
+#mblastz 8.91 02-Jan-2005
+
+a score=0.128
+s human_hoxa 100  9 + 100257 ACA-TTACTA
+s horse_hoxa 120 10 -  98892 ACAATTGCTA
+s fugu_hoxa   88  8  + 90788 ACA--TGCTA
+
+a score=0.071
+s human_unc 9077 8 + 10998 ACAGTATT
+s horse_unc 4555 6 -  5099 ACA--ATT
+s fugu_unc  4000 4 +  4038 AC----TT
+
+
+General Structure
+
+The .maf format is line oriented. Multiple alignments each
+end with a blank line.  Each sequence in an alignment 
+is on a single line, which can get quite long. Words in
+a line are delimited by any white space. Lines 
+starting with # are considered comments.  Lines starting 
+with ## can be ignored by most programs, but contain 
+meta-data of one form or another.  
+
+The file is broken into paragraphs that terminate in a
+blank line.  Within a paragraph the first word of a line
+indicates it's type.  Each multiple alignment is in 
+a paragraph by itself that begins with an 'a' line and
+which contains an 's' line for each sequence in the
+multiple alignment.  Parsers for now should ignore
+other types of paragraphs, and other types of lines within
+an alignment paragraph. Parsers should also ignore extra
+blank lines before paragraphs.
+
+
+The First Line
+
+The first line of a .maf file begins with ##maf.  This
+word is followed by whitespace separated variable=value pairs.  
+There must *not* be white space surrounding the =.
+The currently defined variables are:
+   version - Required.  Currently set to one.
+   scoring - Optional. A name for the scoring scheme used for the
+             alignments.  The current scoring schemes are:
+	bit - roughly corresponds to blast bit values - roughly
+	      2 points per aligning base minus penalties for mismatches
+	      and inserts.
+	blastz - blastz scoring scheme - roughly 100 points per aligning
+	      base.
+	probability - some score normalized between 0 and 1.
+   program - Optional. Name of program generating alignment.
+Parsers ignore variables they do not understand.
+
+'a' Lines
+
+Each alignment begins with an 'a' line.  The 'a' is followed
+by name=value pairs.   There are no required name=value pairs.
+The currently defined variables are:
+    score - Optional. Floating point score. If this is present
+            it is good practice to also define scoring in the first 
+	    line.
+    pass - Optional.  Positive integer value.  For programs that
+           do multiple pass alignments such as blastz,
+	   this shows which pass this alignment came from.
+	   Typically the pass 1 will find the strongest alignments
+	   genome-wide,  and pass 2 will find weaker alignments
+	   between two first pass alignments.
+
+
+'s' Lines    
+
+The s lines together with the a lines define a multiple alignment.
+The s lines have the following fields which are defined by 
+position rather than name=value pairs. 
+
+  src - The name of one of the source sequences for the alignment.
+        Typically this will be the first word following the '>' in
+	a fasta file that was input to the multiple aligner.
+  start - The start of the aligning region in the source sequence.
+        This is a zero based number. If the strand field below is
+	'-' then this is the start relative to the reverse-complemented
+	source sequence.
+  size - The size of the aligning region in the source sequence.  This
+         number is equal to the number of non-dash characters in the
+	 alignment text field below.
+  strand - Either '+' or '-'.  If '-' then the alignment is to the
+         reverse complemented source.
+  srcSize - The size of the entire source sequence, not just the parts
+         involved in the alignment.
+  text - The bases (or amino acids) in the alignment and any dashes
+         as well.
+
+
+'i' Lines
+
+The i lines are optional.  They are used by the browser to display synteny
+breaks. An i line must immediately follow the s line that it describes
+(unless there is no s line for that species in the current block).
+The i lines have the following fields which are defined by 
+position rather than name=value pairs. 
+    src - The name of one of the source sequences for the alignment.
+	    This should match the s line above the i line.
+    leftStatus - the syntenic status of the alignment before us vis a vis ourselves.  
+	    Possible Values:
+	    MAF_INVERSE_STATUS		'V'
+	    MAF_INSERT_STATUS		'I'
+	    MAF_DUP_STATUS		'D'
+	    MAF_NEW_STATUS		'N'
+	    MAF_NEW_NESTED_STATUS	'n'
+	    MAF_CONTIG_STATUS		'C'
+	    MAF_TANDEM_STATUS		'T'
+            
+    leftLen - length related information for the previous alignment for the species
+    rightStatus - the syntenic status of the alignment after us vis a vis ourselves 
+	     Possible values are same as leftStatus.
+    rightLen - length related information for the following alignment for the species 
+
+'q' Lines
+
+The q lines are optional.  They are used to display quality data for a
+sequence.  Like the i lines, q lines follow the s line that it describes.
+The q lines contain the following fields:
+    src - The name of one of the source sequences for the alignment.
+          This should match the s line above the q line.
+    quality - The quality data for corresponding to the sequence on the s line.
+
+As we are generally interested in bases with low quality, the quality
+data in the maf is a compressed version of the actual quality data.
+The quality data in the maf is:
+
+    min( floor(actualy quality value/5), 9)
+
+This allows us to show more of the low-quality values.  The relationship
+between quality characters in the maf and the actualy quality value are
+summarized in the following table:
+
+    .: In Gap Q == FAKE_GAP_QUAL
+    0: 0 <= Q < 5 || Q == 98
+    1: 5 <= Q < 10
+    2: 10 <= Q < 15
+    3: 15 <= Q < 20
+    4: 20 <= Q < 25
+    5: 25 <= Q < 30
+    6: 30 <= Q < 35
+    7: 35 <= Q < 40
+    8: 40 <= Q < 45
+    9: 45 <= Q < 98
+    F: Q == 99
+
+'e' Lines
+
+The 'e' lines are optional and indicate that there isn't aligning 
+DNA for a species but that the current block is bridged by a chain 
+that connects blocks before and after this block.
+
+  src -- The name of one of the source sequences for the alignment. 
+  start -- The start of the non-aligning region in the source sequence. 
+      This is a zero-based number. If the strand field is '-' then this is 
+      the start relative to the reverse-complemented source sequence. 
+  size -- The size in base pairs of the non-aligning region in the 
+      source sequence. 
+  strand -- Either '+' or '-'. If '-', then the alignment is to the 
+      reverse-complemented source. 
+  srcSize -- The size of the entire source sequence, not just the parts 
+      involved in the alignment. alignment and any insertions (dashes) 
+      as well. 
+  status -- A character that specifies the relationship between the 
+      non-aligning sequence in this block and the sequence that appears 
+      in the previous and subsequent blocks. 
+
+The status character can be one of the following values: 
+
+  C -- the sequence before and after is contiguous implying that this 
+      region was either deleted in the source or inserted in the 
+      reference sequence. The browser draws a single line or a '-' 
+      in base mode in these blocks. 
+  I -- there are non-aligning bases in the source species between 
+      chained alignment blocks before and after this block. The 
+      browser shows a double line or '=' in base mode. 
+  M -- there are non-aligning bases in the source and more than 95% 
+      of them are Ns in the source. The browser shows a pale yellow bar. 
+  n -- there are non-aligning bases in the source and the next aligning 
+      block starts in a new chromosome or scaffold that is bridged by 
+      a chain between still other blocks. The browser shows either a 
+      single line or a double line based on how many bases are in the 
+      gap between the bridging alignments. 
+
+'r' Lines
+
+The r lines are optional.  They specify how this region of the
+MAF was defined.  A paragraph can only have one r line.  The
+first word defines the source type, with the remanded of the
+words specific to the source type.  The following source types
+are defined:
+
+   txupstream - Gene transcription start upstream regions:
+           r txupstream size geneId
+       size - is the number of bases in the region
+       geneId - gene identifier for the gene
+
diff --git a/gbtools/src/blatSrc/lib/mafFromAxt.c b/gbtools/src/blatSrc/lib/mafFromAxt.c
new file mode 100644
index 0000000..c32546a
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/mafFromAxt.c
@@ -0,0 +1,81 @@
+/* mafFromAxt - convert a axt into maf. */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "axt.h"
+#include "maf.h"
+
+
+void mafFromAxtTemp(struct axt *axt, int tSize, int qSize,
+	struct mafAli *temp)
+/* Make a maf out of axt,  parasiting on the memory in axt.
+ * Do *not* mafFree this temp.  The memory it has in pointers
+ * is still owned by the axt.  Furthermore the next call to
+ * this function will invalidate the previous temp value.
+ * It's sort of a kludge, but quick to run and easy to implement. */
+{
+static struct mafComp qComp, tComp;
+ZeroVar(temp);
+ZeroVar(&qComp);
+ZeroVar(&tComp);
+temp->score = axt->score;
+temp->textSize = axt->symCount;
+qComp.src = axt->qName;
+qComp.srcSize = qSize;
+qComp.strand = axt->qStrand;
+qComp.start = axt->qStart;
+qComp.size = axt->qEnd - axt->qStart;
+qComp.text = axt->qSym;
+slAddHead(&temp->components, &qComp);
+tComp.src = axt->tName;
+tComp.srcSize = tSize;
+tComp.strand = axt->tStrand;
+tComp.start = axt->tStart;
+tComp.size = axt->tEnd - axt->tStart;
+tComp.text = axt->tSym;
+slAddHead(&temp->components, &tComp);
+}
+
+struct mafAli *mafFromAxt(struct axt *axt, int tSize, 
+	char *tPrefix, int qSize, char *qPrefix)
+/* Make up a maf file from axt.  Slower than mafFromAxtTemp,
+ * but the axt and maf are independent afterwards. */
+{
+struct mafAli *maf;
+struct mafComp *mc;
+char name[256];
+AllocVar(maf);
+maf->score = axt->score;
+maf->textSize = axt->symCount;
+AllocVar(mc);
+if (qPrefix == NULL)
+    mc->src = cloneString(axt->qName);
+else
+    {
+    safef(name, sizeof(name), "%s.%s", qPrefix, axt->qName);
+    mc->src = cloneString(name);
+    }
+mc->srcSize = qSize;
+mc->strand = axt->qStrand;
+mc->start = axt->qStart;
+mc->size = axt->qEnd - axt->qStart;
+mc->text = cloneStringZ(axt->qSym, axt->symCount);
+slAddHead(&maf->components, mc);
+AllocVar(mc);
+if (tPrefix == NULL)
+    mc->src = cloneString(axt->tName);
+else
+    {
+    safef(name, sizeof(name), "%s.%s", tPrefix, axt->tName);
+    mc->src = cloneString(name);
+    }
+mc->srcSize = tSize;
+mc->strand = axt->tStrand;
+mc->start = axt->tStart;
+mc->size = axt->tEnd - axt->tStart;
+mc->text = cloneStringZ(axt->tSym, axt->symCount);
+slAddHead(&maf->components, mc);
+return maf;
+}
diff --git a/gbtools/src/blatSrc/lib/mafScore.c b/gbtools/src/blatSrc/lib/mafScore.c
new file mode 100644
index 0000000..6cc2675
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/mafScore.c
@@ -0,0 +1,186 @@
+/* Score mafs and subsets of maf. 
+ * This module is from Webb Miller at PSU. 
+ * Some description of maf scoring is included in hgLoadMaf.c comments*/
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "maf.h"
+
+
+
+typedef struct gap_scores {
+	int E;
+	int O;
+} gap_scores_t;
+
+#define CLEN(s) (sizeof((s))-1)
+#define NACHARS 128
+#define SS(c,d) ss[(uchar)c][(uchar)d]
+#define GAP(w,x,y,z) gop[(gtype[w]<<6)+(gtype[x]<<4)+(gtype[y]<<2)+gtype[z]]
+#define DASH '-'
+
+typedef int ss_t[NACHARS][NACHARS];
+typedef unsigned char uchar;
+
+static ss_t ss;
+static gap_scores_t ds;
+static int gop[256], gtype[128];
+
+static const uchar nchars[] = "ACGT";
+static const int simpleScoringMatrix[4][4] = {
+  { 100, -10000, -10000, -10000},
+  { -10000, 100, -10000, -10000},
+  { -10000, -10000, 100, -10000},
+  { -10000, -10000, -10000, 100},
+};
+
+static const int HOXD70_sym[4][4] = {
+  {  91, -114,  -31, -123 },
+  {-114,  100, -125,  -31 },
+  { -31, -125,  100, -114 },
+  {-123,  -31, -114,   91 },
+};
+
+/* DNA_scores --------------------------  substitution scoring matrix for DNA */
+static void DNA_scores(ss_t ss, const int matrix[4][4])
+{
+    int i, j, bad, a, b, A, B;
+
+    for (i = 0; i < NACHARS; ++i)
+	    for (j = 0; j < NACHARS; ++j)
+		    ss[i][j] = -100;
+    for (i = 0; i < (signed)CLEN(nchars); ++i) {
+	    A = nchars[i];
+	    a = tolower(A);
+	    for (j = 0; j < (signed)CLEN(nchars); ++j) {
+		    B = nchars[j];
+		    b = tolower(B);
+		    ss[A][B] = ss[a][B] = ss[A][b] = ss[a][b] =
+			    matrix[i][j];
+	    }
+    }
+    bad = -1000;
+    for (i = 0; i < NACHARS; ++i)
+	    ss['X'][i] = ss[i]['X'] = ss['x'][i] = ss[i]['x'] = bad;
+}
+
+
+static void gap_costs(int *gop, int *gtype, int gap_open)
+{
+	int i, X, D;
+
+	for (i = 0; i < 128; ++i)
+		gtype[i] = 0;
+	D = DASH;
+	gtype[D] = 1;
+
+	for (i = 0; i < 256; ++i)
+		gop[i] = 0;
+	X = (uchar)'A';
+	GAP(X,X,X,D) = gap_open;
+	GAP(X,X,D,X) = gap_open;
+	GAP(X,D,D,X) = gap_open;
+	GAP(D,X,X,D) = gap_open;
+	GAP(D,D,X,D) = gap_open;
+	GAP(D,D,D,X) = gap_open;
+}
+
+static boolean ssInitialized = FALSE;
+
+void mafScoreUseSimple()
+/* use a simple scoring system useful for finding mismatches */
+{
+    int i; 
+    DNA_scores(ss, simpleScoringMatrix);
+    ds.E = 30;
+    ds.O = 400;
+    for (i = 0; i < 128; ++i)
+	    ss[i][DASH] = ss[DASH][i] = 0;
+    ss[DASH][DASH] = 0;
+    gap_costs(gop, gtype, ds.O);   /* quasi-natural gap costs */
+    ssInitialized = TRUE;
+}
+
+void mafScoreUseTraditional()
+/* use the tradition HOX scoring system */
+{
+    int i; 
+    DNA_scores(ss, HOXD70_sym);
+    ds.E = 30;
+    ds.O = 400;
+    for (i = 0; i < 128; ++i)
+	ss[i][DASH] = ss[DASH][i] = -ds.E;
+    ss[DASH][DASH] = 0;
+    gap_costs(gop, gtype, ds.O);   /* quasi-natural gap costs */
+    ssInitialized = TRUE;
+}
+
+double mafScoreRangeMultiz(struct mafAli *maf, int start, int size)
+/* Return score of a subset of an alignment.  Parameters are:
+ *    maf - the alignment
+ *    start - the (zero based) offset to start calculating score
+ *    size - the size of the subset
+ * The following relationship should hold:
+ *   scoreRange(maf,start,size) =
+ *	scoreRange(maf,0,start+size) - scoreRange(maf,0,start)
+ */
+{
+uchar ai, ar, bi, br;
+int i;
+double score;
+struct mafComp *c1, *c2;
+
+if (start < 0 || size <= 0 || 
+    start+size > maf->textSize) {
+	errAbort( "mafScoreRange: start = %d, size = %d, textSize = %d\n",
+		start, size, maf->textSize);
+}
+if (!ssInitialized)
+    mafScoreUseTraditional();
+
+score = 0.0;
+for (i = start; i < start+size; ++i) {
+	for (c1 = maf->components; c1 != NULL; c1 = c1->next) {
+		if (c1->size == 0) continue;
+		br = c1->text[i];
+		for (c2 = c1->next; c2 != NULL; c2 = c2->next) {
+			if (c2->size == 0) continue;
+			bi = c2->text[i];
+			score += SS(br, bi);
+			if (i > 0) {
+				ar = c1->text[i-1];
+				ai = c2->text[i-1];
+				score -= GAP(ar,ai,br,bi);
+			}
+		}
+	}
+}
+return score;
+}
+
+double mafScoreMultiz(struct mafAli *maf)
+/* Return score of a maf (calculated rather than what is
+ * stored in the structure. */
+{
+return mafScoreRangeMultiz(maf, 0, maf->textSize);
+}
+
+double mafScoreMultizMaxCol(int species)
+/* Return maximum possible score for a column. */
+{
+int i, count = 0;
+for (i=1; i<species; ++i)
+    count += i;
+return 100.0*count; 
+}
+
+void mafColMinMaxScore(struct mafAli *maf, 
+	double *retMin, double *retMax)
+/* Get min/max maf scores for a column. */
+{
+*retMax = mafScoreMultizMaxCol(slCount(maf->components));
+*retMin = -*retMax;
+}
+
diff --git a/gbtools/src/blatSrc/lib/mailViaPipe.c b/gbtools/src/blatSrc/lib/mailViaPipe.c
new file mode 100644
index 0000000..272a8fd
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/mailViaPipe.c
@@ -0,0 +1,30 @@
+/* mailViaPipe - a safer and sharable sendmail utility using
+ * more secure pipeline module.
+ * Special note: 
+ * Currently, RR never return exit or error status to the browser 
+ * after sendmail, so the implementation here does not handle any 
+ * error condition at all, and will return 0 regardless. */
+
+/* Copyright (C) 2013 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+ 
+#include "pipeline.h"
+#include "common.h"
+#include "mailViaPipe.h"
+
+int mailViaPipe(char *toAddress, char *theSubject, char *theBody, char *fromAddress)
+/* Send mail via pipeline to sendmail.  Abort if a problem. */
+{
+char *cmd1[] = {"/usr/sbin/sendmail", "-t", "-oi", NULL};
+struct pipeline *dataPipe = pipelineOpen1(cmd1, pipelineWrite | pipelineNoAbort,
+"/dev/null", NULL);
+FILE *out = pipelineFile(dataPipe);
+fprintf(out, "To: %s\n", toAddress);
+fprintf(out, "From: %s\n", fromAddress);
+fprintf(out, "Subject: %s\n", theSubject);
+fprintf(out, "\n");
+fprintf(out, "%s\n", theBody);
+fflush(out);
+return pipelineClose(&dataPipe);
+}
+
diff --git a/gbtools/src/blatSrc/lib/makefile b/gbtools/src/blatSrc/lib/makefile
new file mode 100644
index 0000000..4076551
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/makefile
@@ -0,0 +1,65 @@
+include ../inc/localEnvironment.mk
+include ../inc/common.mk
+
+O = aliType.o annoAssembly.o annoFilter.o annoFormatter.o annoFormatTab.o \
+    annoGrator.o annoGrateWig.o annoGratorQuery.o annoOption.o annoRow.o \
+    annoStreamer.o annoStreamBigBed.o annoStreamBigWig.o annoStreamTab.o annoStreamVcf.o \
+    apacheLog.o asParse.o axt.o axtAffine.o bamFile.o base64.o \
+    basicBed.o bbiRead.o bbiWrite.o bigBed.o binRange.o bits.o \
+    blastOut.o blastParse.o boxClump.o boxLump.o bPlusTree.o \
+    bwgCreate.o bwgQuery.o bwgValsOnChrom.o \
+    cda.o chain.o chainBlock.o chainConnect.o chainToAxt.o chainToPsl.o \
+    cheapcgi.o cirTree.o codebias.o colHash.o common.o correlate.o crTree.o \
+    dgRange.o diGraph.o dlist.o dnaLoad.o dnaMarkov.o dnaMotif.o dnaseq.o \
+    dnautil.o dtdParse.o dyOut.o dystring.o elmTree.o \
+    emblParse.o errCatch.o errAbort.o \
+    fa.o ffAli.o ffScore.o fieldedTable.o filePath.o fixColor.o flydna.o fof.o \
+    font/mgCourier10.o font/mgCourier12.o font/mgCourier14.o font/mgCourier18.o \
+    font/mgCourier24.o font/mgCourier34.o font/mgCourier8.o font/mgHelvetica10.o \
+    font/mgHelvetica12.o font/mgHelvetica14.o font/mgHelvetica18.o font/mgHelvetica24.o \
+    font/mgHelvetica34.o font/mgHelvetica8.o font/mgHelveticaBold10.o font/mgHelveticaBold12.o \
+    font/mgHelveticaBold14.o font/mgHelveticaBold18.o font/mgHelveticaBold24.o \
+    font/mgHelveticaBold34.o font/mgHelveticaBold8.o font/mgSixhi6.o font/mgSail8.o \
+    font/mgTimes10.o font/mgTimes12.o font/mgTimes14.o font/mgTimes18.o \
+    font/mgTimes24.o font/mgTimes34.o font/mgTimes8.o font/mgMenlo12.o \
+    fq.o fuzzyShow.o \
+    gapCalc.o gdf.o gemfont.o genomeRangeTree.o \
+    gfNet.o gff.o gff3.o gfxPoly.o gifLabel.o \
+    hacTree.o hash.o hex.o histogram.o hmmPfamParse.o hmmstats.o htmlPage.o htmshell.o \
+    hmac.o https.o intExp.o intValTree.o internet.o itsa.o iupac.o \
+    jointalign.o jpegSize.o jsonParse.o jsonWrite.o \
+    keys.o knetUdc.o kxTok.o linefile.o lineFileOnBigBed.o localmem.o log.o longToList.o \
+    maf.o mafFromAxt.o mafScore.o mailViaPipe.o md5.o memalloc.o \
+    memgfx.o meta.o metaWig.o mgCircle.o \
+    mgPolygon.o mime.o net.o nib.o nibTwo.o nt4.o numObscure.o \
+    obscure.o oldGff.o oligoTm.o options.o osunix.o pairHmm.o pairDistance.o \
+    paraFetch.o peakCluster.o \
+    phyloTree.o pipeline.o portimpl.o pngwrite.o psGfx.o psPoly.o pscmGfx.o \
+    psl.o pslGenoShow.o pslShow.o pslTbl.o pslTransMap.o pthreadDoList.o pthreadWrap.o \
+    qa.o quickHeap.o quotedP.o \
+    ra.o rainbow.o raToStruct.o rbTree.o rangeTree.o regexHelper.o repMask.o \
+    rle.o rnautil.o rqlEval.o rqlParse.o rudp.o \
+    scoreWindow.o seg.o seqOut.o seqStats.o servBrcMcw.o servCrunx.o \
+    servcis.o servcl.o servmsII.o servpws.o shaRes.o slog.o snof.o \
+    snofmake.o snofsig.o spaceSaver.o spacedColumn.o spacedSeed.o \
+    splatAli.o sqlList.o sqlNum.o subText.o sufa.o sufx.o synQueue.o \
+    tabRow.o textOut.o tokenizer.o trix.o twoBit.o \
+    udc.o vcf.o vcfBits.o vGfx.o vPng.o verbose.o \
+    wildcmp.o wormdna.o \
+    xAli.o xa.o xap.o xenshow.o xmlEscape.o xp.o zlibFace.o
+
+$(MACHTYPE)/jkweb.a: $(O) $(MACHTYPE)
+	ar rcus $(MACHTYPE)/jkweb.a $(O)
+
+$(MACHTYPE):
+	mkdir $(MACHTYPE)
+
+test:
+	cd tests && ${MAKE} test
+
+clean:
+	rm -f ${O} $(MACHTYPE)/jkweb.a
+	cd tests && ${MAKE} clean
+
+tags:
+	etags ../inc/*.h ../lib/*.h ../lib/*.c  ../hg/inc/*.h ../hg/lib/*.h ../hg/lib/*.c ../hg/hgTracks/*.c ../hg/hgc/*.c ../hg/hgTrackUi/*.c
diff --git a/gbtools/src/blatSrc/lib/md5.c b/gbtools/src/blatSrc/lib/md5.c
new file mode 100644
index 0000000..e16fff5
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/md5.c
@@ -0,0 +1,86 @@
+/* md5 calculating functions and the like.  Just wrappers for md5sum program */
+
+#include "common.h"
+#include "hex.h"
+#include "linefile.h"
+#include "hash.h"
+#include "pipeline.h"
+#include "md5.h"
+
+char *md5ToHex(unsigned char md5[16])
+/* Convert binary representation of md5 to hex string. Do a freeMem on result when done. */
+{
+char hex[33];
+char *h;
+int i;
+for (i = 0, h=hex; i < 16; ++i, h += 2)
+    byteToHex( md5[i], h);  
+hex[32] = 0;
+return cloneString(hex);
+}
+
+void md5HexToMd5(char hexIn[32], unsigned char md5Out[16])
+/* Convert hexadecimal representation of md5 back to binary */
+{
+char *pt = hexIn;
+int i;
+for (i=0; i<16; ++i)
+     {
+     md5Out[i] = hexToByte(pt);
+     pt += 2;
+     }
+}
+
+char *md5HexForFile(char *fileName)
+/* Calculate md5 on file and return in hex format.  Use freeMem on result when done. */
+{
+/* Calculate md5 using pipeline to unix utility. */
+char *cmd[] = {"md5sum", NULL};
+struct pipeline *pl = pipelineOpen1(cmd, pipelineRead, fileName, NULL);
+FILE *f = pipelineFile(pl);
+char hex[33];
+mustRead(f, hex, 32);
+hex[32] = 0;
+pipelineClose(&pl);
+return cloneString(hex);
+}
+
+char *md5HexForBuf(char *buf, size_t bufSize)
+/* Return md5 sum of buffer. Use freeMem on result when done. */
+{
+/* Calculate md5 using pipeline to unix utility. */
+char *cmd[] = {"md5sum", NULL};
+struct pipeline *pl = pipelineOpenMem1(cmd, pipelineRead, buf, bufSize, fileno(stderr));
+FILE *f = pipelineFile(pl);
+char hex[33];
+mustRead(f, hex, 32);
+hex[32] = 0;
+pipelineClose(&pl);
+return cloneString(hex);
+}
+
+char *md5HexForString(char *string)
+/* Return md5 sum of zero-terminated string. Use freeMem on result when done. */
+{
+return md5HexForBuf(string, strlen(string));
+}
+
+void md5ForFile(char *fileName, unsigned char md5[16])
+/* Return MD5 sum for file in md5 in binary rather than hex format. */
+{
+char *hex = md5HexForFile(fileName);
+md5HexToMd5(hex, md5);
+freeMem(hex);
+}
+
+struct hash *md5FileHash(char *fileName)
+/* Read md5sum file and return a hash keyed by file names with md5sum values. */
+{
+struct lineFile *lf = lineFileOpen(fileName, TRUE);
+char *row[2];
+struct hash *hash = hashNew(0);
+while (lineFileRow(lf, row))
+    hashAdd(hash, row[1], cloneString(row[0]));
+lineFileClose(&lf);
+return hash;
+}
diff --git a/gbtools/src/blatSrc/lib/memalloc.c b/gbtools/src/blatSrc/lib/memalloc.c
new file mode 100644
index 0000000..2011c27
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/memalloc.c
@@ -0,0 +1,519 @@
+/* memalloc.c - Routines to allocate and deallocate dynamic memory. 
+ * This lets you have a stack of memory handlers.  The default
+ * memory handler is a thin shell around malloc/free.  You can
+ * substitute routines that do more integrety checking with
+ * pushCarefulMem(), or routines of your own devising with
+ * pushMemHandler(). 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include <pthread.h>
+#include "common.h"
+#include "obscure.h"
+#include "memalloc.h"
+#include "dlist.h"
+
+
+static void *defaultAlloc(size_t size)
+/* Default allocator. */
+{
+return malloc(size);
+}
+
+static void defaultFree(void *vpt)
+/* Default deallocator. */
+{
+free(vpt);
+}
+
+static void *defaultRealloc(void *vpt, size_t size)
+/* Default deallocator. */
+{
+return realloc(vpt, size);
+}
+
+static struct memHandler defaultMemHandler = 
+/* Default memory handler. */
+    {
+    NULL,
+    defaultAlloc,
+    defaultFree,
+    defaultRealloc,
+    };
+
+static struct memHandler *mhStack = &defaultMemHandler;
+
+struct memHandler *pushMemHandler(struct memHandler *newHandler)
+/* Use newHandler for memory requests until matching popMemHandler.
+ * Returns previous top of memory handler stack. */
+{
+struct memHandler *oldHandler = mhStack;
+slAddHead(&mhStack, newHandler);
+return oldHandler;
+}
+
+
+struct memHandler *popMemHandler()
+/* Removes top element from memHandler stack and returns it. */
+{
+struct memHandler *oldHandler = mhStack;
+if (mhStack == &defaultMemHandler)
+    errAbort("Too many popMemHandlers()");
+mhStack = mhStack->next;
+return oldHandler;
+}
+
+
+void setDefaultMemHandler()
+/* Sets memHandler to the default. */
+{
+mhStack = &defaultMemHandler;
+}
+
+/* 128*8*1024*1024 == 1073741824 == 2^30 on 32 bit machines,size_t == 4 bytes*/
+/* on 64 bit machines, size_t = 8 bytes, 2^30 * 2 * 2 * 2 * 2 = 2^34 == 16 Gb */
+static size_t maxAlloc = (size_t)128*8*1024*1024*(sizeof(size_t)/4)*(sizeof(size_t)/4)*(sizeof(size_t)/4*(sizeof(size_t)/4));
+
+void setMaxAlloc(size_t s)
+/* Set large allocation limit. */
+{
+maxAlloc = s;
+}
+
+void *needLargeMem(size_t size)
+/* This calls abort if the memory allocation fails. The memory is
+ * not initialized to zero. */
+{
+void *pt;
+if (size == 0 || size >= maxAlloc)
+    errAbort("needLargeMem: trying to allocate %llu bytes (limit: %llu)",
+         (unsigned long long)size, (unsigned long long)maxAlloc);
+if ((pt = mhStack->alloc(size)) == NULL)
+    errAbort("needLargeMem: Out of memory - request size %llu bytes, errno: %d\n",
+             (unsigned long long)size, errno);
+return pt;
+}
+
+void *needLargeZeroedMem(size_t size)
+/* Request a large block of memory and zero it. */
+{
+void *v;
+v = needLargeMem(size);
+memset(v, 0, size);
+return v;
+}
+
+void *needLargeMemResize(void* vp, size_t size)
+/* Adjust memory size on a block, possibly relocating it.  If vp is NULL,
+ * a new memory block is allocated.  Memory not initted. */
+{
+void *pt;
+if (size == 0 || size >= maxAlloc)
+    errAbort("needLargeMemResize: trying to allocate %llu bytes (limit: %llu)",
+         (unsigned long long)size, (unsigned long long)maxAlloc);
+if ((pt = mhStack->realloc(vp, size)) == NULL)
+    errAbort("needLargeMemResize: Out of memory - request size %llu bytes, errno: %d\n",
+             (unsigned long long)size, errno);
+return pt;
+}
+
+void *needLargeZeroedMemResize(void* vp, size_t oldSize, size_t newSize)
+/* Adjust memory size on a block, possibly relocating it.  If vp is NULL, a
+ * new memory block is allocated.  If block is grown, new memory is zeroed. */
+{
+void *v = needLargeMemResize(vp, newSize);
+if (newSize > oldSize)
+    memset(((char*)v)+oldSize, 0, newSize-oldSize);
+return v;
+}
+
+void *needHugeMem(size_t size)
+/* No checking on size.  Memory not initted. */
+{
+void *pt;
+if (size == 0)
+    errAbort("needHugeMem: trying to allocate 0 bytes");
+if ((pt = mhStack->alloc(size)) == NULL)
+    errAbort("needHugeMem: Out of huge memory - request size %llu bytes, errno: %d\n",
+             (unsigned long long)size, errno);
+return pt;
+}
+
+
+void *needHugeZeroedMem(size_t size)
+/* Request a large block of memory and zero it. */
+{
+void *v;
+v = needHugeMem(size);
+memset(v, 0, size);
+return v;
+}
+
+void *needHugeMemResize(void* vp, size_t size)
+/* Adjust memory size on a block, possibly relocating it.  If vp is NULL,
+ * a new memory block is allocated.  No checking on size.  Memory not
+ * initted. */
+{
+void *pt;
+if ((pt = mhStack->realloc(vp, size)) == NULL)
+    errAbort("needHugeMemResize: Out of memory - request resize %llu bytes, errno: %d\n",
+	(unsigned long long)size, errno);
+return pt;
+}
+
+
+void *needHugeZeroedMemResize(void* vp, size_t oldSize, size_t newSize)
+/* Adjust memory size on a block, possibly relocating it.  If vp is NULL, a
+ * new memory block is allocated.  No checking on size.  If block is grown,
+ * new memory is zeroed. */
+{
+void *v;
+v = needHugeMemResize(vp, newSize);
+if (newSize > oldSize)
+    memset(((char*)v)+oldSize, 0, newSize-oldSize);
+return v;
+}
+
+#define NEEDMEM_LIMIT 500000000
+
+void *needMem(size_t size)
+/* Need mem calls abort if the memory allocation fails. The memory
+ * is initialized to zero. */
+{
+void *pt;
+if (size == 0 || size > NEEDMEM_LIMIT)
+    errAbort("needMem: trying to allocate %llu bytes (limit: %llu)",
+         (unsigned long long)size, (unsigned long long)NEEDMEM_LIMIT);
+if ((pt = mhStack->alloc(size)) == NULL)
+    errAbort("needMem: Out of memory - request size %llu bytes, errno: %d\n",
+             (unsigned long long)size, errno);
+memset(pt, 0, size);
+return pt;
+}
+
+void *needMoreMem(void *old, size_t oldSize, size_t newSize)
+/* Adjust memory size on a block, possibly relocating it.  If vp is NULL, a
+ * new memory block is allocated.  No checking on size.  If block is grown,
+ * new memory is zeroed. */
+{
+return needLargeZeroedMemResize(old, oldSize, newSize);
+}
+
+void *wantMem(size_t size)
+/* Want mem just calls malloc - no zeroing of memory, no
+ * aborting if request fails. */
+{
+return mhStack->alloc(size);
+}
+
+void freeMem(void *pt)
+/* Free memory will check for null before freeing. */
+{
+if (pt != NULL)
+    mhStack->free(pt);
+}
+
+void freez(void *vpt)
+/* Pass address of pointer.  Will free pointer and set it 
+ * to NULL. */
+{
+void **ppt = (void **)vpt;
+void *pt = *ppt;
+*ppt = NULL;
+freeMem(pt);
+}
+
+static pthread_mutex_t carefulMutex = PTHREAD_MUTEX_INITIALIZER;
+
+static int carefulAlignSize;    /* Alignment size for machine - 8 bytes for DEC alpha, 4 for Sparc. */
+static int carefulAlignAdd;     /* Do aliSize = *(unaliSize+carefulAlignAdd)&carefulAlignMask); */
+
+#if __WORDSIZE == 64
+static bits64 carefulAlignMask;    /* to make sure requests are aligned. */
+#elif __WORDSIZE == 32
+static bits32 carefulAlignMask;    /* to make sure requests are aligned. */
+#else
+static bits32 carefulAlignMask;    /* to make sure requests are aligned. */
+#endif
+
+static struct memHandler *carefulParent;
+
+static size_t carefulMaxToAlloc;
+static size_t carefulAlloced;
+
+struct carefulMemBlock
+/* Keep one of these for each outstanding memory block.   It's a doubly linked list. */
+    {
+    struct carefulMemBlock *next;
+    struct carefulMemBlock *prev;
+    int size;
+    int startCookie;
+    };
+
+int cmbStartCookie = 0x78753421;
+
+char cmbEndCookie[4] = {0x44, 0x33, 0x7F, 0x42};
+
+struct dlList *cmbAllocedList;
+
+static void carefulMemInit(size_t maxToAlloc)
+/* Initialize careful memory system */
+{
+carefulMaxToAlloc = maxToAlloc;
+cmbAllocedList = newDlList();
+carefulAlignSize = sizeof(double);
+if (sizeof(void *) > carefulAlignSize)
+    carefulAlignSize = sizeof(void *);
+if (sizeof(long) > carefulAlignSize)
+    carefulAlignSize = sizeof(long);
+if (sizeof(off_t) > carefulAlignSize)
+    carefulAlignSize = sizeof(off_t);
+if (sizeof(long long) > carefulAlignSize)
+    carefulAlignSize = sizeof(long long);
+carefulAlignAdd = carefulAlignSize-1;
+carefulAlignMask = ~carefulAlignAdd;
+}
+
+
+static void *carefulAlloc(size_t size)
+/* Allocate extra memory for cookies and list node, and then
+ * return memory block. */
+{
+pthread_mutex_lock( &carefulMutex );
+struct carefulMemBlock *cmb;
+char *pEndCookie;
+size_t newAlloced = size + carefulAlloced;
+size_t aliSize;
+
+if (newAlloced > carefulMaxToAlloc)
+    {
+    char maxAlloc[32];
+    char allocRequest[32];
+    sprintLongWithCommas(maxAlloc, (long long)carefulMaxToAlloc);
+    sprintLongWithCommas(allocRequest, (long long)newAlloced);
+    pthread_mutex_unlock( &carefulMutex );
+    errAbort("carefulAlloc: Allocated too much memory - more than %s bytes (%s)",
+	maxAlloc, allocRequest);
+    }
+carefulAlloced = newAlloced;
+aliSize = ((size + sizeof(*cmb) + 4 + carefulAlignAdd)&carefulAlignMask);
+cmb = carefulParent->alloc(aliSize);
+cmb->size = size;
+cmb->startCookie = cmbStartCookie;
+pEndCookie = (char *)(cmb+1);
+pEndCookie += size;
+memcpy(pEndCookie, cmbEndCookie, sizeof(cmbEndCookie));
+dlAddHead(cmbAllocedList, (struct dlNode *)cmb);
+pthread_mutex_unlock( &carefulMutex );
+return (void *)(cmb+1);
+}
+
+static void carefulFree(void *vpt)
+/* Check cookies and free. */
+{
+pthread_mutex_lock( &carefulMutex );
+struct carefulMemBlock *cmb = ((struct carefulMemBlock *)vpt)-1;
+size_t size = cmb->size;
+char *pEndCookie;
+
+carefulAlloced -= size;
+pEndCookie = (((char *)(cmb+1)) + size);
+if (cmb->startCookie != cmbStartCookie)
+    {
+    pthread_mutex_unlock( &carefulMutex );
+    errAbort("Bad start cookie %x freeing %llx\n", cmb->startCookie,
+             ptrToLL(vpt));
+    }
+if (memcmp(pEndCookie, cmbEndCookie, sizeof(cmbEndCookie)) != 0)
+    {
+    pthread_mutex_unlock( &carefulMutex );
+    errAbort("Bad end cookie %x%x%x%x freeing %llx\n", 
+        pEndCookie[0], pEndCookie[1], pEndCookie[2], pEndCookie[3],
+             ptrToLL(vpt));
+    }
+dlRemove((struct dlNode *)cmb);
+carefulParent->free(cmb);
+pthread_mutex_unlock( &carefulMutex );
+}
+
+
+static void *carefulRealloc(void *vpt, size_t size)
+/* realloc a careful memblock block. */
+{
+unsigned char* newBlk = carefulAlloc(size);
+if (vpt != NULL)
+    {
+    struct carefulMemBlock *cmb = ((struct carefulMemBlock *)vpt)-1;
+    memcpy(newBlk, vpt, cmb->size);
+    carefulFree(vpt);
+    }
+return newBlk;
+}
+
+
+void carefulCheckHeap()
+/* Walk through allocated memory and make sure that all cookies are
+ * in place. */
+{
+int maxPieces = 10000000;    /* Assume no more than this many pieces allocated. */
+struct carefulMemBlock *cmb;
+char *pEndCookie;
+size_t size;
+char errMsg[1024];
+boolean errFound = FALSE;
+
+if (carefulParent == NULL)
+    return;
+
+pthread_mutex_lock( &carefulMutex );
+for (cmb = (struct carefulMemBlock *)(cmbAllocedList->head); cmb->next != NULL; cmb = cmb->next)
+    {
+    size = cmb->size;
+    pEndCookie = (((char *)(cmb+1)) + size);
+    if (cmb->startCookie != cmbStartCookie)
+	{
+        safef(errMsg, sizeof errMsg, "Bad start cookie %x checking %llx\n", cmb->startCookie,
+                 ptrToLL(cmb+1));
+	errFound = TRUE;
+	break;
+	}
+    if (memcmp(pEndCookie, cmbEndCookie, sizeof(cmbEndCookie)) != 0)
+	{
+        safef(errMsg, sizeof errMsg, "Bad end cookie %x%x%x%x checking %llx\n", 
+                 pEndCookie[0], pEndCookie[1], pEndCookie[2], pEndCookie[3],
+                 ptrToLL(cmb+1));
+	errFound = TRUE;
+	break;
+	}
+    if (--maxPieces == 0)
+	{
+        safef(errMsg, sizeof errMsg, "Loop or more than 10000000 pieces in memory list");
+	errFound = TRUE;
+	break;
+	}
+    }
+pthread_mutex_unlock( &carefulMutex );
+if (errFound)
+    errAbort("%s", errMsg);
+}
+
+int carefulCountBlocksAllocated()
+/* How many memory items are allocated? */
+{
+pthread_mutex_lock( &carefulMutex );
+int result = dlCount(cmbAllocedList);
+pthread_mutex_unlock( &carefulMutex );
+return result;
+}
+
+size_t carefulTotalAllocated()
+/* Return total bases allocated */
+{
+pthread_mutex_lock( &carefulMutex );
+size_t result = carefulAlloced;
+pthread_mutex_unlock( &carefulMutex );
+return result;
+}
+
+static struct memHandler carefulMemHandler = 
+/* Default memory handler. */
+    {
+    NULL,
+    carefulAlloc,
+    carefulFree,
+    carefulRealloc,
+    };
+
+void pushCarefulMemHandler(size_t maxAlloc)
+/* Push the careful (paranoid, conservative, checks everything)
+ * memory handler  top of the memHandler stack and use it. */
+{
+carefulMemInit(maxAlloc);
+carefulParent = pushMemHandler(&carefulMemHandler);
+}
+
+struct memTracker
+/* A structure to keep track of memory. */
+    {
+    struct memTracker *next;	 /* Next in list. */
+    struct dlList *list;	 /* List of allocated blocks. */
+    struct memHandler *parent;   /* Underlying memory handler. */
+    struct memHandler *handler;  /* Memory handler. */
+    };
+
+static struct memTracker *memTracker = NULL;	/* Head in memTracker list. */
+
+static void *memTrackerAlloc(size_t size)
+/* Allocate extra memory for cookies and list node, and then
+ * return memory block. */
+{
+struct dlNode *node;
+
+size += sizeof (*node);
+node = memTracker->parent->alloc(size);
+if (node == NULL)
+    return node;
+dlAddTail(memTracker->list, node);
+return (void*)(node+1);
+}
+
+static void memTrackerFree(void *vpt)
+/* Check cookies and free. */
+{
+struct dlNode *node = vpt;
+node -= 1;
+dlRemove(node);
+memTracker->parent->free(node);
+}
+
+static void *memTrackerRealloc(void *vpt, size_t size)
+/* Resize a memory block from memTrackerAlloc. */
+{
+if (vpt == NULL)
+    return memTrackerAlloc(size);
+else
+    {
+    struct dlNode *node = ((struct dlNode *)vpt)-1;
+    size += sizeof(*node);
+    dlRemove(node);
+    node = memTracker->parent->realloc(node, size);
+    if (node == NULL)
+        return node;
+    dlAddTail(memTracker->list, node);
+    return (void*)(node+1);
+    }
+}
+
+void memTrackerStart()
+/* Push memory handler that will track blocks allocated so that
+ * they can be automatically released with memTrackerEnd().  You
+ * can have memTrackerStart one after the other, but memTrackerStart/End
+ * need to nest. */
+{
+struct memTracker *mt;
+
+if (memTracker != NULL)
+     errAbort("multiple memTrackerStart calls");
+AllocVar(mt);
+AllocVar(mt->handler);
+mt->handler->alloc = memTrackerAlloc;
+mt->handler->free = memTrackerFree;
+mt->handler->realloc = memTrackerRealloc;
+mt->list = dlListNew();
+mt->parent = pushMemHandler(mt->handler);
+memTracker = mt;
+}
+
+void memTrackerEnd()
+/* Free any remaining blocks and pop tracker memory handler. */
+{
+struct memTracker *mt = memTracker;
+if (mt == NULL)
+    errAbort("memTrackerEnd without memTrackerStart");
+memTracker = NULL;
+popMemHandler();
+dlListFree(&mt->list);
+freeMem(mt->handler);
+freeMem(mt);
+}
diff --git a/gbtools/src/blatSrc/lib/memgfx.c b/gbtools/src/blatSrc/lib/memgfx.c
new file mode 100644
index 0000000..058abcc
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/memgfx.c
@@ -0,0 +1,1325 @@
+/* memgfx - routines for drawing on bitmaps in memory.
+ * Currently limited to 256 color bitmaps. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "memgfx.h"
+#include "gemfont.h"
+#include "localmem.h"
+#include "vGfx.h"
+#include "vGfxPrivate.h"
+#include "colHash.h"
+
+
+
+Color multiply(Color src, Color new)
+{
+#ifdef COLOR32
+unsigned char rs = (src >> 0) & 0xff;
+unsigned char gs = (src >> 8) & 0xff;
+unsigned char bs = (src >> 16) & 0xff;
+unsigned char rn = (new >> 0) & 0xff;
+unsigned char gn = (new >> 8) & 0xff;
+unsigned char bn = (new >> 16) & 0xff;
+
+unsigned char ro = ((unsigned) rn * rs) / 255;
+unsigned char go = ((unsigned) gn * gs) / 255;
+unsigned char bo = ((unsigned) bn * bs) / 255;
+return MAKECOLOR_32(ro, go, bo);
+#else
+/* no multiply write mode in 8 bit */
+return new;
+#endif /* COLOR32 */
+}
+
+
+#ifndef min3
+#define min3(x,y,z) (min(x,min(y,z)))
+/* Return min of x,y, and z. */
+#endif
+
+#ifndef max3
+#define max3(x,y,z) (max(x,max(y,z)))
+/* Return max of x,y, and z. */
+#endif
+
+void _mgPutDotMultiply(struct memGfx *mg, int x, int y,Color color)
+{
+Color *pt = _mgPixAdr(mg,x,y);
+*pt = multiply(*pt, color);
+}
+
+
+static void mgSetDefaultColorMap(struct memGfx *mg)
+/* Set up default color map for a memGfx. */
+{
+#ifdef COLOR32
+    return;
+#else
+
+/* Note dependency in order here and in MG_WHITE, MG_BLACK, etc. */
+int i;
+for (i=0; i<ArraySize(mgFixedColors); ++i)
+    {
+    struct rgbColor *c = &mgFixedColors[i];
+    mgAddColor(mg, c->r, c->g, c->b);
+    }
+#endif
+}
+
+
+
+void mgSetWriteMode(struct memGfx *mg, unsigned int writeMode)
+/* Set write mode */
+{
+mg->writeMode = writeMode;
+}
+
+void mgSetClip(struct memGfx *mg, int x, int y, int width, int height)
+/* Set clipping rectangle. */
+{
+int x2, y2;
+if (x < 0)
+    x = 0;
+if (y < 0)
+    y = 0;
+x2 = x + width;
+if (x2 > mg->width)
+    x2 = mg->width;
+y2 = y + height;
+if (y2 > mg->height)
+    y2 = mg->height;
+mg->clipMinX = x;
+mg->clipMaxX = x2;
+mg->clipMinY = y;
+mg->clipMaxY = y2;
+}
+
+void mgUnclip(struct memGfx *mg)
+/* Set clipping rect cover full thing. */
+{
+mgSetClip(mg, 0,0,mg->width, mg->height);
+}
+
+struct memGfx *mgNew(int width, int height)
+/* Return new memGfx. Note new pixel memory is uninitialized */
+{
+struct memGfx *mg;
+
+mg = needMem(sizeof(*mg));
+mg->width = width;
+mg->height = height;
+mg->pixels = needLargeMem(width*height*sizeof(Color));
+#ifndef COLOR32
+mg->colorHash = colHashNew();
+#endif
+mgSetDefaultColorMap(mg);
+mgUnclip(mg);
+return mg;
+}
+
+void mgClearPixels(struct memGfx *mg)
+/* Set all pixels to background. */
+{
+#ifdef COLOR32
+memset((unsigned char *)mg->pixels, 0xff, mg->width*mg->height*sizeof(unsigned int));
+#else
+zeroBytes(mg->pixels, mg->width*mg->height);
+#endif
+}
+
+void mgClearPixelsTrans(struct memGfx *mg)
+/* Set all pixels to transparent. */
+{
+#ifdef COLOR32
+unsigned int *ptr = mg->pixels;
+unsigned int *lastPtr = &mg->pixels[mg->width * mg->height];
+for(; ptr < lastPtr; ptr++)
+#ifdef MEMGFX_BIGENDIAN
+    *ptr = 0xffffff00;
+#else
+    *ptr = 0x00ffffff;  // transparent white
+#endif
+
+#else
+zeroBytes(mg->pixels, mg->width*mg->height);
+#endif
+}
+
+Color mgFindColor(struct memGfx *mg, unsigned char r, unsigned char g, unsigned char b)
+/* Returns closest color in color map to rgb values.  If it doesn't
+ * already exist in color map and there's room, it will create
+ * exact color in map. */
+{
+#ifdef COLOR32
+return MAKECOLOR_32(r,g,b);
+#else
+struct colHashEl *che;
+if ((che = colHashLookup(mg->colorHash, r, g, b)) != NULL)
+    return che->ix;
+if (mgColorsFree(mg))
+    return mgAddColor(mg, r, g, b);
+return mgClosestColor(mg, r, g, b);
+#endif
+}
+
+
+struct rgbColor mgColorIxToRgb(struct memGfx *mg, int colorIx)
+/* Return rgb value at color index. */
+{
+#ifdef COLOR32
+static struct rgbColor rgb;
+#ifdef MEMGFX_BIGENDIAN
+rgb.r = (colorIx >> 24) & 0xff;
+rgb.g = (colorIx >> 16) & 0xff;
+rgb.b = (colorIx >> 8) & 0xff;
+#else
+rgb.r = (colorIx >> 0) & 0xff;
+rgb.g = (colorIx >> 8) & 0xff;
+rgb.b = (colorIx >> 16) & 0xff;
+#endif
+
+return rgb;
+#else
+return mg->colorMap[colorIx];
+#endif
+}
+
+Color mgClosestColor(struct memGfx *mg, unsigned char r, unsigned char g, unsigned char b)
+/* Returns closest color in color map to r,g,b */
+{
+#ifdef COLOR32
+return MAKECOLOR_32(r,g,b);
+#else
+struct rgbColor *c = mg->colorMap;
+int closestDist = 0x7fffffff;
+int closestIx = -1;
+int dist, dif;
+int i;
+for (i=0; i<mg->colorsUsed; ++i)
+    {
+    dif = c->r - r;
+    dist = dif*dif;
+    dif = c->g - g;
+    dist += dif*dif;
+    dif = c->b - b;
+    dist += dif*dif;
+    if (dist < closestDist)
+        {
+        closestDist = dist;
+        closestIx = i;
+        }
+    ++c;
+    }
+return closestIx;
+#endif
+}
+
+
+Color mgAddColor(struct memGfx *mg, unsigned char r, unsigned char g, unsigned char b)
+/* Adds color to end of color map if there's room. */
+{
+#ifdef COLOR32
+return MAKECOLOR_32(r,g,b);
+#else
+int colIx = mg->colorsUsed;
+if (colIx < 256)
+    {
+    struct rgbColor *c = mg->colorMap + mg->colorsUsed;
+    c->r = r;
+    c->g = g;
+    c->b = b;
+    mg->colorsUsed += 1;
+    colHashAdd(mg->colorHash, r, g, b, colIx);
+    }
+return (Color)colIx;
+#endif
+}
+
+int mgColorsFree(struct memGfx *mg)
+/* Returns # of unused colors in color map. */
+{
+#ifdef COLOR32
+return 1 << 23;
+#else
+return 256-mg->colorsUsed;
+#endif
+}
+
+void mgFree(struct memGfx **pmg)
+{
+struct memGfx *mg = *pmg;
+if (mg != NULL)
+    {
+    if (mg->pixels != NULL)
+	freeMem(mg->pixels);
+    if (mg->colorHash)
+        colHashFree(&mg->colorHash);
+    zeroBytes(mg, sizeof(*mg));
+    freeMem(mg);
+    }
+*pmg = NULL;
+}
+
+static void nonZeroCopy(Color *d, Color *s, int width)
+/* Copy non-zero colors. */
+{
+Color c;
+int i;
+for (i=0; i<width; ++i)
+    {
+    if ((c = s[i]) != MG_WHITE)
+        d[i] = c;
+    }
+}
+
+static void mgPutSegMaybeZeroClear(struct memGfx *mg, int x, int y, int width, Color *dots, boolean zeroClear)
+/* Put a series of dots starting at x, y and going to right width pixels.
+ * Possibly don't put zero dots though. */
+{
+int x2;
+Color *pt;
+if (y < mg->clipMinY || y > mg->clipMaxY)
+    return;
+x2 = x + width;
+if (x2 > mg->clipMaxX)
+    x2 = mg->clipMaxX;
+if (x < mg->clipMinX)
+    {
+    dots += mg->clipMinX - x;
+    x = mg->clipMinX;
+    }
+width = x2 - x;
+if (width > 0)
+    {
+    pt = _mgPixAdr(mg, x, y);
+    if (zeroClear)
+        nonZeroCopy(pt, dots, width);
+    else
+        {
+        width *= sizeof(Color);
+        memcpy(pt, dots, width * sizeof(Color));
+        }
+    }
+}
+
+void mgVerticalSmear(struct memGfx *mg,
+	int xOff, int yOff, int width, int height, 
+	Color *dots, boolean zeroClear)
+/* Put a series of one 'pixel' width vertical lines. */
+{
+while (--height >= 0)
+    {
+    mgPutSegMaybeZeroClear(mg, xOff, yOff, width, dots, zeroClear);
+    ++yOff;
+    }
+}
+
+
+void mgDrawBoxNormal(struct memGfx *mg, int x, int y, int width, int height, Color color)
+{
+int i;
+Color *pt;
+int x2 = x + width;
+int y2 = y + height;
+int wrapCount;
+
+if (x < mg->clipMinX)
+    x = mg->clipMinX;
+if (y < mg->clipMinY)
+    y = mg->clipMinY;
+if (x2 < mg->clipMinX)
+    x2 = mg->clipMinX;
+if (y2 < mg->clipMinY)
+    y2 = mg->clipMinY;
+
+if (x > mg->clipMaxX)
+    x = mg->clipMaxX;
+if (y > mg->clipMaxY)
+    y = mg->clipMaxY;
+if (x2 > mg->clipMaxX)
+    x2 = mg->clipMaxX;
+if (y2 > mg->clipMaxY)
+    y2 = mg->clipMaxY;
+width = x2-x;
+height = y2-y;
+if (width > 0 && height > 0)
+    {
+    pt = _mgPixAdr(mg,x,y);
+    /*colorBin[x][color]++;  increment color count for this pixel */
+    wrapCount = _mgBpr(mg) - width;
+    while (--height >= 0)
+	{
+        //Color src = *pt;
+	i = width;
+	while (--i >= 0)
+	    *pt++ = color;
+	pt += wrapCount;
+	}
+    }
+}
+
+void mgDrawBoxMultiply(struct memGfx *mg, int x, int y, int width, int height, Color color)
+{
+int i;
+Color *pt;
+int x2 = x + width;
+int y2 = y + height;
+int wrapCount;
+
+if (x < mg->clipMinX)
+    x = mg->clipMinX;
+if (y < mg->clipMinY)
+    y = mg->clipMinY;
+if (x2 > mg->clipMaxX)
+    x2 = mg->clipMaxX;
+if (y2 > mg->clipMaxY)
+    y2 = mg->clipMaxY;
+width = x2-x;
+height = y2-y;
+if (width > 0 && height > 0)
+    {
+    pt = _mgPixAdr(mg,x,y);
+    wrapCount = _mgBpr(mg) - width;
+    while (--height >= 0)
+	{
+        Color src = *pt;
+	i = width;
+	while (--i >= 0)
+	    *pt++ = multiply(src, color);
+	pt += wrapCount;
+	}
+    }
+}
+
+void mgDrawBox(struct memGfx *mg, int x, int y, int width, int height, Color color)
+{
+switch(mg->writeMode)
+    {
+    case MG_WRITE_MODE_NORMAL:
+        {
+        mgDrawBoxNormal(mg,x,y, width, height, color);
+        }
+        break;
+    case MG_WRITE_MODE_MULTIPLY:
+        {
+        mgDrawBoxMultiply(mg,x,y, width, height, color);
+        }
+        break;
+    }
+}
+
+
+INLINE void mixDot(struct memGfx *img, int x, int y,  float frac, Color col)
+/* Puts a single dot on the image, mixing it with what is already there
+ * based on the frac argument. */
+{
+if ((x < img->clipMinX) || (x > img->clipMaxX) || (y < img->clipMinY) || (y > img->clipMaxY))
+    return;
+
+Color *pt = _mgPixAdr(img,x,y);
+float invFrac = 1 - frac;
+
+int r = COLOR_32_RED(*pt) * invFrac + COLOR_32_RED(col) * frac;
+int g = COLOR_32_GREEN(*pt) * invFrac + COLOR_32_GREEN(col) * frac;
+int b = COLOR_32_BLUE(*pt) * invFrac + COLOR_32_BLUE(col) * frac;
+mgPutDot(img,x,y,MAKECOLOR_32(r,g,b));
+}
+ 
+#define fraction(X) (((double)(X))-(double)(int)(X))
+#define invFraction(X) (1.0-fraction(X))
+
+void mgAliasLine( struct memGfx *mg, int x1, int y1,
+  int x2, int y2, Color color)
+/* Draw an antialiased line using the Wu algorithm. */
+{
+double dx = (double)x2 - (double)x1;
+double dy = (double)y2 - (double)y1;
+
+// figure out what quadrant we're in
+if ( fabs(dx) > fabs(dy) ) 
+    {
+    if ( x2 < x1 ) 
+	{
+	// swap start and end points
+	int tmp = x2;
+	x2 = x1;
+	x1 = tmp;
+
+	tmp = y2;
+	y2 = y1;
+	y1 = tmp;
+	}
+
+    double gradient = dy / dx;
+    double xend = round(x1);
+    double yend = y1 + gradient*(xend - x1);
+    double xgap = invFraction(x1 + 0.5);
+    int xpxl1 = xend;
+    int ypxl1 = (int)yend;
+    mixDot(mg, xpxl1, ypxl1, invFraction(yend)*xgap, color);
+    mixDot(mg, xpxl1, ypxl1+1, fraction(yend)*xgap, color);
+
+    double intery = yend + gradient;
+
+    xend = round(x2);
+    yend = y2 + gradient*(xend - x2);
+    xgap = fraction(x2+0.5);
+    int xpxl2 = xend;
+    int ypxl2 = (int)yend;
+    mixDot(mg, xpxl2, ypxl2, invFraction(yend) * xgap, color);
+    mixDot(mg, xpxl2, ypxl2 + 1, fraction(yend) * xgap, color);
+
+    int x;
+    for(x=xpxl1+1; x <= (xpxl2-1); x++) 
+	{
+	mixDot(mg, x, (int)intery, invFraction(intery), color);
+	mixDot(mg, x, (int)intery + 1, fraction(intery), color);
+	intery += gradient;
+	}
+    } 
+else  // ( fabs(dx) <= fabs(dy) ) 
+    {    
+    if ( y2 < y1 ) 
+	{
+	// swap start and end points
+	int tmp = x2;
+	x2 = x1;
+	x1 = tmp;
+
+	tmp = y2;
+	y2 = y1;
+	y1 = tmp;
+	}
+
+    double gradient = dx / dy;
+    double yend = rint(y1);
+    double xend = x1 + gradient*(yend - y1);
+    double ygap = invFraction(y1 + 0.5);
+    int ypxl1 = yend;
+    int xpxl1 = (int)xend;
+    mixDot(mg, xpxl1, ypxl1, invFraction(xend)*ygap, color);
+    mixDot(mg, xpxl1, ypxl1+1, fraction(xend)*ygap, color);
+    double interx = xend + gradient;
+
+    yend = rint(y2);
+    xend = x2 + gradient*(yend - y2);
+    ygap = fraction(y2+0.5);
+    int ypxl2 = yend;
+    int xpxl2 = (int)xend;
+    mixDot(mg, xpxl2, ypxl2, invFraction(xend) * ygap, color);
+    mixDot(mg, xpxl2, ypxl2 + 1, fraction(xend) * ygap, color);
+
+    int y;
+    for(y=ypxl1+1; y <= (ypxl2-1); y++) 
+	{
+	mixDot(mg, (int)interx, y, invFraction(interx), color);
+	mixDot(mg, (int)interx + 1, y, fraction(interx), color);
+	interx += gradient;
+	}
+    }
+}
+#undef fraction
+#undef invFraction
+
+
+void mgBrezy(struct memGfx *mg, int x1, int y1, int x2, int y2, Color color,
+	int yBase, boolean fillFromBase)
+/* Brezenham line algorithm.  Optionally fill in under line. */
+{
+if (x1 == x2)
+    {
+    int y,height;
+    if (y1 > y2)
+	{
+	y = y2;
+	height = y1-y2+1;
+	}
+    else
+        {
+	y = y1;
+	height = y2-y1+1;
+	}
+    if (fillFromBase)
+        {
+	if (y < yBase)
+	    mgDrawBox(mg, x1, y, 1, yBase-y, color);
+	}
+    else
+        mgDrawBox(mg, x1, y, 1, height, color);
+    }
+else if (y1 == y2)
+    {
+    int x,width;
+    if (x1 > x2)
+        {
+	x = x2;
+	width = x1-x2+1;
+	}
+    else
+        {
+	x = x1;
+	width = x2-x1+1;
+	}
+    if (fillFromBase)
+        {
+	if (y1 < yBase)
+	    mgDrawBox(mg, x, y1, width, yBase - y1, color);
+	}
+    else
+        {
+	mgDrawBox(mg, x, y1, width, 1, color);
+	}
+    }
+else
+    {
+    int duty_cycle;
+    int incy;
+    int delta_x, delta_y;
+    int dots;
+    delta_y = y2-y1;
+    delta_x = x2-x1;
+    if (delta_y < 0) 
+	{
+	delta_y = -delta_y;
+	incy = -1;
+	}
+    else
+	{
+	incy = 1;
+	}
+    if (delta_x < 0) 
+	{
+	delta_x = -delta_x;
+	incy = -incy;
+	x1 = x2;
+	y1 = y2;
+	}
+    duty_cycle = (delta_x - delta_y)/2;
+    if (delta_x >= delta_y)
+	{
+	dots = delta_x+1;
+	while (--dots >= 0)
+	    {
+	    if (fillFromBase)
+		{
+		if (y1 < yBase)
+		    mgDrawBox(mg,x1,y1,1,yBase-y1,color);
+		}
+	    else
+		mgPutDot(mg,x1,y1,color);
+	    duty_cycle -= delta_y;
+	    x1 += 1;
+	    if (duty_cycle < 0)
+		{
+		duty_cycle += delta_x;	  /* update duty cycle */
+		y1+=incy;
+		}
+	    }
+	}
+    else
+	{
+	dots = delta_y+1;
+	while (--dots >= 0)
+	    {
+	    if (fillFromBase)
+		{
+		if (y1 < yBase)
+		    mgDrawBox(mg,x1,y1,1,yBase-y1,color);
+		}
+	    else
+		mgPutDot(mg,x1,y1,color);
+	    duty_cycle += delta_x;
+	    y1+=incy;
+	    if (duty_cycle > 0)
+		{
+		duty_cycle -= delta_y;	  /* update duty cycle */
+		x1 += 1;
+		}
+	    }
+	}
+    }
+}
+
+void mgDrawLine(struct memGfx *mg, int x1, int y1, int x2, int y2, Color color)
+/* Draw a line from one point to another. Draws it antialiased if
+ * it's not horizontal or vertical. */
+{
+if ((x1 == x2) || (y1 == y2))
+    mgBrezy(mg, x1, y1, x2, y2, color, 0, FALSE);
+else
+    mgAliasLine(mg, x1, y1, x2, y2, color);
+}
+
+void mgFillUnder(struct memGfx *mg, int x1, int y1, int x2, int y2, 
+	int bottom, Color color)
+/* Draw a 4 sided filled figure that has line x1/y1 to x2/y2 at
+ * it's top, a horizontal line at bottom as it's bottom, and
+ * vertical lines from the bottom to y1 on the left and bottom to
+ * y2 on the right. */
+{
+mgBrezy(mg, x1, y1, x2, y2, color, bottom, TRUE);
+}
+
+void mgPutSeg(struct memGfx *mg, int x, int y, int width, Color *dots)
+/* Put a series of dots starting at x, y and going to right width pixels. */
+{
+mgPutSegMaybeZeroClear(mg, x, y, width, dots, FALSE);
+}
+
+void mgPutSegZeroClear(struct memGfx *mg, int x, int y, int width, Color *dots)
+/* Put a series of dots starting at x, y and going to right width pixels.
+ * Don't put zero dots though. */
+{
+mgPutSegMaybeZeroClear(mg, x, y, width, dots, TRUE);
+}
+
+
+void mgDrawHorizontalLine(struct memGfx *mg, int y1, Color color)
+/*special case of mgDrawLine, for horizontal line across entire window 
+  at y-value y1.*/
+{
+mgDrawLine( mg, mg->clipMinX, y1, mg->clipMaxX, y1, color);
+}
+
+void mgLineH(struct memGfx *mg, int y, int x1, int x2, Color color)
+/* Draw horizizontal line width pixels long starting at x/y in color */
+{
+if (y >= mg->clipMinY && y < mg->clipMaxY)
+    {
+    int w;
+    if (x1 < mg->clipMinX)
+        x1 = mg->clipMinX;
+    if (x2 > mg->clipMaxX)
+        x2 = mg->clipMaxX;
+    w = x2 - x1;
+    if (w > 0)
+        {
+	Color *pt = _mgPixAdr(mg,x1,y);
+	if (mg->writeMode == MG_WRITE_MODE_MULTIPLY)
+	    {
+	    while (--w >= 0)
+		{
+		*pt = multiply(*pt, color);
+		pt += 1;
+		}
+	    }
+	else
+	    {
+	    while (--w >= 0)
+		*pt++ = color;
+	    }
+	}
+    }
+}
+
+
+boolean mgClipForBlit(int *w, int *h, int *sx, int *sy,
+	struct memGfx *dest, int *dx, int *dy)
+{
+/* Make sure we don't overwrite destination. */
+int over;
+
+if ((over = dest->clipMinX - *dx) > 0)
+    {
+    *w -= over;
+    *sx += over;
+    *dx = dest->clipMinX;
+    }
+if ((over = dest->clipMinY - *dy) > 0)
+    {
+    *h -= over;
+    *sy += over;
+    *dy = dest->clipMinY;
+    }
+if ((over = *w + *dx - dest->clipMaxX) > 0)
+    *w -= over; 
+if ((over = *h + *dy - dest->clipMaxY) > 0)
+    *h -= over;
+return (*h > 0 && *w > 0);
+}
+
+void mgTextBlit(int width, int height, int bitX, int bitY,
+	unsigned char *bitData, int bitDataRowBytes, 
+	struct memGfx *dest, int destX, int destY, 
+	Color color, Color backgroundColor)
+{
+UBYTE *inLine;
+Color *outLine;
+UBYTE inLineBit;
+
+if (!mgClipForBlit(&width, &height, &bitX, &bitY, dest, &destX, &destY))
+    return;
+
+inLine = bitData + (bitX>>3) + bitY * bitDataRowBytes;
+inLineBit = (0x80 >> (bitX&7));
+outLine = _mgPixAdr(dest,destX,destY);
+while (--height >= 0)
+    {
+    UBYTE *in = inLine;
+    Color *out = outLine;
+    UBYTE inBit = inLineBit;
+    UBYTE inByte = *in++;
+    int i = width;
+    while (--i >= 0)
+	{
+	if (inBit & inByte)
+	    *out = color;
+	++out;
+	if ((inBit >>= 1) == 0)
+	    {
+	    inByte = *in++;
+	    inBit = 0x80;
+	    }
+	}
+    inLine += bitDataRowBytes;
+    outLine += _mgBpr(dest);
+    }
+}
+
+void mgTextBlitSolid(int width, int height, int bitX, int bitY,
+	unsigned char *bitData, int bitDataRowBytes, 
+	struct memGfx *dest, int destX, int destY, 
+	Color color, Color backgroundColor)
+{
+UBYTE *inLine;
+Color *outLine;
+UBYTE inLineBit;
+
+if (!mgClipForBlit(&width, &height, &bitX, &bitY, dest, &destX, &destY))
+    return;
+inLine = bitData + (bitX>>3) + bitY * bitDataRowBytes;
+inLineBit = (0x80 >> (bitX&7));
+outLine = _mgPixAdr(dest,destX,destY);
+while (--height >= 0)
+    {
+    UBYTE *in = inLine;
+    Color *out = outLine;
+    UBYTE inBit = inLineBit;
+    UBYTE inByte = *in++;
+    int i = width;
+    while (--i >= 0)
+	{
+	*out++ = ((inBit & inByte) ? color : backgroundColor);
+	if ((inBit >>= 1) == 0)
+	    {
+	    inByte = *in++;
+	    inBit = 0x80;
+	    }
+	}
+    inLine += bitDataRowBytes;
+    outLine += _mgBpr(dest);
+    }
+}
+
+
+void mgText(struct memGfx *mg, int x, int y, Color color, 
+	MgFont *font, char *text)
+/* Draw a line of text with upper left corner x,y. */
+{
+gfText(mg, font, text, x, y, color, mgTextBlit, MG_WHITE);
+}
+
+void mgTextCentered(struct memGfx *mg, int x, int y, int width, int height, 
+	Color color, MgFont *font, char *text)
+/* Draw a line of text centered in box defined by x/y/width/height */
+{
+int fWidth, fHeight;
+int xoff, yoff;
+fWidth = mgFontStringWidth(font, text);
+fHeight = mgFontPixelHeight(font);
+xoff = x + (width - fWidth)/2;
+yoff = y + (height - fHeight)/2;
+if (font == mgSmallFont())
+    {
+    xoff += 1;
+    yoff += 1;
+    }
+mgText(mg, xoff, yoff, color, font, text);
+}
+
+void mgTextRight(struct memGfx *mg, int x, int y, int width, int height, 
+	Color color, MgFont *font, char *text)
+/* Draw a line of text right justified in box defined by x/y/width/height */
+{
+int fWidth, fHeight;
+int xoff, yoff;
+fWidth = mgFontStringWidth(font, text);
+fHeight = mgFontPixelHeight(font);
+xoff = x + width - fWidth - 1;
+yoff = y + (height - fHeight)/2;
+if (font == mgSmallFont())
+    {
+    xoff += 1;
+    yoff += 1;
+    }
+mgText(mg, xoff, yoff, color, font, text);
+}
+
+int mgFontPixelHeight(MgFont *font)
+/* How high in pixels is font? */
+{
+return font_cel_height(font);
+}
+
+int mgGetFontPixelHeight(struct memGfx *mg, MgFont *font)
+/* How high in pixels is font? */
+{
+return mgFontPixelHeight(font);
+}
+
+int mgFontLineHeight(MgFont *font)
+/* How many pixels to next line ideally? */
+{
+return font_line_height(font);
+}
+
+int mgFontWidth(MgFont *font, char *chars, int charCount)
+/* How wide are a couple of letters? */
+{
+return fnstring_width(font, (unsigned char *)chars, charCount);
+}
+
+int mgFontStringWidth(MgFont *font, char *string)
+/* How wide is a string? */
+{
+return mgFontWidth(font, string, strlen(string));
+}
+
+int mgGetFontStringWidth(struct memGfx *mg, MgFont *font, char *string)
+/* How wide is a string? */
+{
+return mgFontStringWidth(font, string);
+}
+
+int mgFontCharWidth(MgFont *font, char c)
+/* How wide is a character? */
+{
+return mgFontWidth(font, &c, 1);
+}
+
+char *mgFontSizeBackwardsCompatible(char *size)
+/* Given "size" argument that may be in old tiny/small/medium/big/huge format,
+ * return it in new numerical string format. Do NOT free the return string*/
+{
+if (isdigit(size[0]))
+    return size;
+else if (sameWord(size, "tiny"))
+    return "6";
+else if (sameWord(size, "small"))
+    return "8";
+else if (sameWord(size, "medium"))
+    return "14";
+else if (sameWord(size, "large"))
+    return "18";
+else if (sameWord(size, "huge"))
+    return "34";
+else
+    {
+    errAbort("unknown font size %s", size);
+    return NULL;
+    }
+}
+
+MgFont *mgFontForSizeAndStyle(char *textSize, char *fontType)
+/* Get a font of given size and style.  Abort with error message if not found.
+ * The textSize should be 6,8,10,12,14,18,24 or 34.  For backwards compatibility
+ * textSizes of "tiny" "small", "medium", "large" and "huge" are also ok.
+ * The fontType should be "medium", "bold", or "fixed" */
+{
+textSize = mgFontSizeBackwardsCompatible(textSize);
+MgFont *font = NULL;
+if (sameString(fontType,"bold"))
+    {
+    if (sameString(textSize, "6"))
+	 font = mgTinyBoldFont();
+    else if (sameString(textSize, "8"))
+	 font = mgHelveticaBold8Font();
+    else if (sameString(textSize, "10"))
+	 font = mgHelveticaBold10Font();
+    else if (sameString(textSize, "12"))
+	 font = mgHelveticaBold12Font();
+    else if (sameString(textSize, "14"))
+	 font = mgHelveticaBold14Font();
+    else if (sameString(textSize, "18"))
+	 font = mgHelveticaBold18Font();
+    else if (sameString(textSize, "24"))
+	 font = mgHelveticaBold24Font();
+    else if (sameString(textSize, "34"))
+	 font = mgHelveticaBold34Font();
+    else
+	 errAbort("unknown textSize %s", textSize);
+    }
+else if (sameString(fontType,"fixed"))
+    {
+    if (sameString(textSize, "6"))
+	 font = mgTinyFixedFont();
+    else if (sameString(textSize, "8"))
+	 font = mgCourier8Font();
+    else if (sameString(textSize, "10"))
+	 font = mgCourier10Font();
+    else if (sameString(textSize, "12"))
+	 font = mgCourier12Font();
+    else if (sameString(textSize, "14"))
+	 font = mgCourier14Font();
+    else if (sameString(textSize, "18"))
+	 font = mgCourier18Font();
+    else if (sameString(textSize, "24"))
+	 font = mgCourier24Font();
+    else if (sameString(textSize, "34"))
+	 font = mgCourier34Font();
+    else
+	 errAbort("unknown textSize %s", textSize);
+    }
+else
+    {
+    if (sameString(textSize, "6"))
+	 font = mgTinyFont();
+    else if (sameString(textSize, "8"))
+	 font = mgSmallFont();
+    else if (sameString(textSize, "10"))
+	 font = mgHelvetica10Font();
+    else if (sameString(textSize, "12"))
+	 font = mgHelvetica12Font();
+    else if (sameString(textSize, "14"))
+	 font = mgHelvetica14Font();
+    else if (sameString(textSize, "18"))
+	 font = mgHelvetica18Font();
+    else if (sameString(textSize, "24"))
+	 font = mgHelvetica24Font();
+    else if (sameString(textSize, "34"))
+	 font = mgHelvetica34Font();
+    else
+	 errAbort("unknown textSize %s", textSize);
+    }
+return font;
+}
+
+MgFont *mgFontForSize(char *textSize)
+/* Get a font of given size and style.  Abort with error message if not found.
+ * The textSize should be 6,8,10,12,14,18,24 or 34.  For backwards compatibility
+ * textSizes of "tiny" "small", "medium", "large" and "huge" are also ok. */
+{
+return mgFontForSizeAndStyle(textSize, "medium");
+}
+
+
+void mgSlowDot(struct memGfx *mg, int x, int y, int colorIx)
+/* Draw a dot when a macro won't do. */
+{
+mgPutDot(mg, x, y, colorIx);
+}
+
+int mgSlowGetDot(struct memGfx *mg, int x, int y)
+/* Fetch a dot when a macro won't do. */
+{
+return mgGetDot(mg, x, y);
+}
+
+struct memGfx *mgRotate90(struct memGfx *in)
+/* Create a copy of input that is rotated 90 degrees clockwise. */
+{
+int iWidth = in->width, iHeight = in->height;
+struct memGfx *out = mgNew(iHeight, iWidth);
+Color *inCol, *outRow, *outRowStart;
+int i,j;
+
+memcpy(out->colorMap, in->colorMap, sizeof(out->colorMap));
+outRowStart = out->pixels;
+for (i=0; i<iWidth; ++i)
+    {
+    inCol = in->pixels + i;
+    outRow = outRowStart;
+    outRowStart += _mgBpr(out);
+    j = iHeight;
+    while (--j >= 0)
+        {
+	outRow[j] = *inCol;
+	inCol += _mgBpr(in);
+	}
+    }
+return out;
+}
+
+void mgSetHint(char *hint)
+/* dummy function */
+{
+return;
+}
+
+char *mgGetHint(char *hint)
+/* dummy function */
+{
+return "";
+}
+
+void vgMgMethods(struct vGfx *vg)
+/* Fill in virtual graphics methods for memory based drawing. */
+{
+vg->pixelBased = TRUE;
+vg->close = (vg_close)mgFree;
+vg->dot = (vg_dot)mgSlowDot;
+vg->getDot = (vg_getDot)mgSlowGetDot;
+vg->box = (vg_box)mgDrawBox;
+vg->line = (vg_line)mgDrawLine;
+vg->text = (vg_text)mgText;
+vg->textRight = (vg_textRight)mgTextRight;
+vg->textCentered = (vg_textCentered)mgTextCentered;
+vg->findColorIx = (vg_findColorIx)mgFindColor;
+vg->colorIxToRgb = (vg_colorIxToRgb)mgColorIxToRgb;
+vg->setWriteMode = (vg_setWriteMode)mgSetWriteMode;
+vg->setClip = (vg_setClip)mgSetClip;
+vg->unclip = (vg_unclip)mgUnclip;
+vg->verticalSmear = (vg_verticalSmear)mgVerticalSmear;
+vg->fillUnder = (vg_fillUnder)mgFillUnder;
+vg->drawPoly = (vg_drawPoly)mgDrawPoly;
+vg->setHint = (vg_setHint)mgSetHint;
+vg->getHint = (vg_getHint)mgGetHint;
+vg->getFontPixelHeight = (vg_getFontPixelHeight)mgGetFontPixelHeight;
+vg->getFontStringWidth = (vg_getFontStringWidth)mgGetFontStringWidth;
+}
+
+
+struct hslColor mgRgbToHsl(struct rgbColor rgb)
+/* Convert RGB to HSL colorspace (see http://en.wikipedia.org/wiki/HSL_and_HSV)
+ * In HSL, Hue is the color in the range [0,360) with 0=red 120=green 240=blue,
+ * Saturation goes from a shade of grey (0) to fully saturated color (1000), and
+ * Lightness goes from black (0) through the hue (500) to white (1000). */
+{
+unsigned char rgbMax = max3(rgb.r, rgb.g, rgb.b);
+unsigned char rgbMin = min3(rgb.r, rgb.g, rgb.b);
+unsigned char delta = rgbMax - rgbMin;
+unsigned short minMax = rgbMax + rgbMin;
+int divisor;
+struct hslColor hsl = { 0.0, 0, (1000*minMax+255)/(2*255) }; // round up
+
+// if max=min then no saturation, and this is gray
+if (rgbMax == rgbMin)
+    return hsl;
+else if (hsl.l <= 500)
+    divisor = minMax;
+else
+    divisor = (2*255-minMax);
+hsl.s = (1000*delta + divisor/2)/divisor; // round up
+
+// Saturation so compute hue 0..360 degrees (same as for HSV)
+if (rgbMax == rgb.r) // red is 0 +/- offset in blue or green direction
+    {
+    hsl.h = 0 + 60.0*(rgb.g - rgb.b)/delta;
+    }
+else if (rgbMax == rgb.g) // green is 120 +/- offset in blue or red direction
+    {
+    hsl.h = 120 + 60.0*(rgb.b - rgb.r)/delta;
+    }
+else // rgb_max == rgb.b // blue is 240 +/- offset in red or green direction
+    {
+    hsl.h = 240 + 60.0*(rgb.r - rgb.g)/delta;
+    }
+// normalize to [0,360)
+if (hsl.h < 0.0)
+    hsl.h += 360.0;
+else if (hsl.h >= 360.0)
+    hsl.h -= 360.0;
+return hsl;
+}
+
+
+struct hsvColor mgRgbToHsv(struct rgbColor rgb) 
+/* Convert RGB to HSV colorspace (see http://en.wikipedia.org/wiki/HSL_and_HSV)
+ * In HSV, Hue is the color in the range [0,360) with 0=red 120=green 240=blue,
+ * Saturation goes from white (0) to fully saturated color (1000), and
+ * Value goes from black (0) through to the hue (1000). */
+{
+unsigned char rgbMax = max3(rgb.r, rgb.g, rgb.b);
+unsigned char rgbMin = min3(rgb.r, rgb.g, rgb.b);
+unsigned char delta = rgbMax - rgbMin;
+struct hsvColor hsv = {0.0, 0, 1000*rgbMax/255};
+
+if (hsv.v == 0) 
+    return hsv;
+hsv.s = 1000*delta/rgbMax;
+// if no saturation, then this is gray
+if (hsv.s == 0) 
+    return hsv;
+// Saturation so compute hue 0..360 degrees (same as for HSL)
+if (rgbMax == rgb.r) // red is 0 +/- offset in blue or green direction
+    {
+    hsv.h = 0 + 60.0*(rgb.g - rgb.b)/delta;
+    } 
+else if (rgbMax == rgb.g) // green is 120 +/- offset in blue or red direction
+    {
+    hsv.h = 120 + 60.0*(rgb.b - rgb.r)/delta;
+    } 
+else // rgb_max == rgb.b // blue is 240 +/- offset in red or green direction
+    {
+    hsv.h = 240 + 60.0*(rgb.r - rgb.g)/delta;
+    }
+// normalize to [0,360)
+if (hsv.h < 0.0)
+    hsv.h += 360.0;
+else if (hsv.h >= 360.0)
+    hsv.h -= 360.0;
+return hsv;
+}
+
+
+struct rgbColor mgHslToRgb(struct hslColor hsl)
+/* Convert HSL to RGB colorspace http://en.wikipedia.org/wiki/HSL_and_HSV */
+{
+int p, q;
+double r, g, b;
+//unsigned short p, q, r, g, b;
+double tR, tG, tB;
+
+if( hsl.s == 0 ) // achromatic (grey)
+    return (struct rgbColor) {(255*hsl.l+500)/1000, (255*hsl.l+500)/1000, (255*hsl.l+500)/1000};
+if (hsl.l <= 500)
+    q = hsl.l + (hsl.l*hsl.s+500)/1000;
+else
+    q = hsl.l + hsl.s - (hsl.l*hsl.s+500)/1000;
+p = 2 * hsl.l - q;
+hsl.h /= 360.0; // normalize h to 0..1
+tR = hsl.h + 1/3.0;
+tG = hsl.h;
+tB = hsl.h - 1/3.0;
+if (tR < 0.0)
+    tR += 1.0;
+else if (tR > 1.0)
+    tR -= 1.0;
+if (tG < 0.0)
+    tG += 1.0;
+else if (tG > 1.0)
+    tG -= 1.0;
+if (tB < 0.0)
+    tB += 1.0;
+else if (tB > 1.0)
+    tB -= 1.0;
+// Red
+if (tR < 1/6.0)
+    r = p + (q-p)*6*tR;
+else if (tR < 0.5)
+    r = q;
+else if (tR < 2/3.0)
+    r = p + (q-p)*6*(2/3.0 - tR);
+else
+    r = p;
+// Green
+if (tG < 1/6.0)
+    g = p + (q-p)*6*tG;
+else if (tG < 0.5)
+    g = q;
+else if (tG < 2/3.0)
+    g = p + (q-p)*6*(2/3.0 - tG);
+else
+    g = p;
+// Blue
+if (tB < 1/6.0)
+    b = p + (q-p)*6*tB;
+else if (tB < 0.5)
+    b = q;
+else if (tB < 2/3.0)
+    b = p + (q-p)*6*(2/3.0 - tB);
+else
+    b = p;
+return (struct rgbColor) {(255*r+500)/1000, (255*g+500)/1000, (255*b+500)/1000}; // round up
+}
+
+
+struct rgbColor mgHsvToRgb(struct hsvColor hsv)
+/* Convert HSV to RGB colorspace http://en.wikipedia.org/wiki/HSL_and_HSV */
+{
+int i;
+double f;
+unsigned short low, q, t, r, g, b;
+
+if( hsv.s == 0 ) // achromatic (grey)
+    return (struct rgbColor) {(255*hsv.v+500)/1000, (255*hsv.v+500)/1000, (255*hsv.v+500)/1000};
+hsv.h /= 60.0; 
+i = (int) hsv.h;                     // floor the floating point value, sector 0 to 5
+f = hsv.h - i;                       // fractional part (distance) from hue 
+// hsv.v is highest r,g, or b value
+// low value is related to saturation
+low = hsv.v - (hsv.v * hsv.s / 1000); // lowest r,g, or b value
+t = low + (hsv.v - low) * f;         // scaled value from low..high
+q = low + (hsv.v - low) * (1.0-f);   // scaled value from low..high
+
+switch( i )
+    {
+    case 0:
+	r = hsv.v;
+        g = t;
+        b = low;
+        break;
+    case 1:
+        r = q;
+        g = hsv.v;
+        b = low;
+        break;
+    case 2:
+        r = low;
+        g = hsv.v;
+        b = t;
+        break;
+    case 3:
+        r = low;
+        g = q;
+        b = hsv.v;
+        break;
+    case 4:
+        r = t;
+        g = low;
+        b = hsv.v;
+        break;
+    default:                // case 5:
+        r = hsv.v;
+        g = low;
+        b = q;
+        break;
+    }
+return (struct rgbColor) {(255*r+500)/1000, (255*g+500)/1000, (255*b+500)/1000};
+}
+
+
+struct rgbColor mgRgbTransformHsl(struct rgbColor in, double h, double s, double l)
+/* Transform rgb 'in' value using
+ *   hue shift 'h' (0..360 degrees), 
+ *   saturation scale 's', and 
+ *   lightness scale 'l'
+ * Returns the transformed rgb value 
+ * Use H=0, S=L=1 for identity transformation
+ */
+{
+struct hslColor hsl = mgRgbToHsl(in);
+hsl.h += h;
+while (hsl.h < 0.0)
+    hsl.h += 360.0;
+while (hsl.h > 360.0)
+    hsl.h -= 360.0;
+hsl.s = min(max(hsl.s * s, 0), 1000);
+hsl.l = min(max(hsl.l * l, 0), 1000);
+return mgHslToRgb(hsl);
+}
+
+
+struct rgbColor mgRgbTransformHsv(struct rgbColor in, double h, double s, double v)
+/* Transform rgb 'in' value using
+ *   hue shift 'h' (0..360 degrees), 
+ *   saturation scale 's', and 
+ *   value scale 'v'
+ * Returns the transformed rgb value 
+ * Use H=0, S=V=1 for identity transformation
+ */
+{
+struct hsvColor hsv = mgRgbToHsv(in);
+hsv.h += h;
+while (hsv.h < 0.0)
+    hsv.h += 360.0;
+while (hsv.h > 360.0)
+    hsv.h -= 360.0;
+hsv.s = min(max(hsv.s * s, 0), 1000);
+hsv.v = min(max(hsv.v * v, 0), 1000);
+return mgHsvToRgb(hsv);
+}
+
diff --git a/gbtools/src/blatSrc/lib/meta.c b/gbtools/src/blatSrc/lib/meta.c
new file mode 100644
index 0000000..26da19a
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/meta.c
@@ -0,0 +1,405 @@
+/* Copyright (C) 2013 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+/* metaRa - stuff to parse and interpret a genome-hub meta.txt file, which is in 
+ * a hierarchical ra format.  That is something like:
+ *     meta topLevel
+ *     cellLine HELA
+ *
+ *         meta midLevel
+ *         target H3K4Me3
+ *         antibody abCamAntiH3k4me3
+ *       
+ *            meta lowLevel
+ *            fileName hg19/chipSeq/helaH3k4me3.narrowPeak.bigBed
+ * The file is interpreted so that lower level stanzas inherit tags from higher level ones.
+ */
+
+#include "common.h"
+#include "linefile.h"
+#include "hash.h"
+#include "errAbort.h"
+#include "meta.h"
+#include "net.h"
+#include "ra.h"
+
+struct metaTagVal *metaTagValNew(char *tag, char *val)
+/* Create new meta tag/val */
+{
+struct metaTagVal *mtv;
+AllocVar(mtv);
+mtv->tag = cloneString(tag);
+mtv->val = cloneString(val);
+return mtv;
+}
+
+void metaTagValFree(struct metaTagVal **pMtv)
+/* Free up metaTagVal. */
+{
+struct metaTagVal *mtv = *pMtv;
+if (mtv != NULL)
+    {
+    freeMem(mtv->tag);
+    freeMem(mtv->val);
+    freez(pMtv);
+    }
+}
+
+void metaTagValFreeList(struct metaTagVal **pList)
+/* Free a list of dynamically allocated metaTagVal's */
+{
+struct metaTagVal *el, *next;
+
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    metaTagValFree(&el);
+    }
+*pList = NULL;
+}
+
+int metaTagValCmp(const void *va, const void *vb)
+/* Compare to sort based on tag name . */
+{
+const struct metaTagVal *a = *((struct metaTagVal **)va);
+const struct metaTagVal *b = *((struct metaTagVal **)vb);
+return strcmp(a->tag, b->tag);
+}
+
+void metaFree(struct meta **pMeta)
+/* Free up memory associated with a meta. */
+{
+struct meta *meta = *pMeta;
+if (meta != NULL)
+    {
+    metaTagValFreeList(&meta->tagList);
+    freez(pMeta);
+    }
+}
+
+void metaFreeList(struct meta **pList)
+/* Free a list of dynamically allocated meta's. Use metaFreeForest to free children too. */
+{
+struct meta *el, *next;
+
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    metaFree(&el);
+    }
+*pList = NULL;
+}
+
+void metaFreeForest(struct meta **pForest)
+/* Free up all metas in forest and their children. */ 
+{
+struct meta *meta;
+for (meta = *pForest; meta != NULL; meta = meta->next)
+    {
+    if (meta->children)
+         metaFreeForest(&meta->children);
+    }
+metaFreeList(pForest);
+}
+
+
+void metaSortTags(struct meta *meta)
+/* Do canonical sort so that the first tag stays first but the
+ * rest are alphabetical. */
+{
+slSort(&meta->tagList->next, metaTagValCmp);
+}
+
+int countLeadingSpacesDetabbing(char *s, int tabStop)
+/* Count up leading chars including those implied by tab. Set tabStop to 8
+ * for usual UNIX results. */
+{
+int count = 0;
+char c;
+while ((c = *s++) != 0)
+    {
+    if (c == ' ')
+        ++count;
+    else if (c == '\t')
+        {
+	int tabBefore = (count % tabStop) * tabStop;
+	count = (tabBefore+1)*tabStop;
+	}
+    else
+        break;
+    }
+return count;
+}
+
+struct meta *metaNextStanza(struct lineFile *lf)
+/* Return next stanza in a meta file.  Does not set parent/child/next pointers. 
+ * Returns NULL at end of file.  Does a little error checking,  making sure
+ * that indentation level is consistent across all lines of stanza. Returns
+ * indentation level. */
+{
+/* See if anything left in file, and if not return. */
+if (!raSkipLeadingEmptyLines(lf, NULL))
+    return NULL;
+
+/* Allocate return structure and vars to help parse. */
+struct meta *meta;
+AllocVar(meta);
+struct dyString *dy = dyStringNew(256);
+char *tag,*val;
+
+/* Loop to get all tags in stanza. */
+boolean firstTime = TRUE;
+int initialIndent = 0;
+for (;;)
+    {
+    dyStringClear(dy);
+    if (!raNextTagVal(lf, &tag, &val, dy))
+        break;
+
+    /* Make tag/val and add it to list. */
+    struct metaTagVal *mtv;
+    AllocVar(mtv);
+    mtv->tag = cloneString(tag);
+    mtv->val = cloneString(val);
+    slAddHead(&meta->tagList, mtv);
+
+    /* Check indentation. */
+    int indent =  countLeadingSpacesDetabbing(dy->string, 8);
+    if (firstTime)
+        {
+	initialIndent = indent;
+	firstTime = FALSE;
+	}
+    else
+        {
+	if (indent != initialIndent)
+	    {
+	    warn("Error line %d of %s\n", lf->lineIx, lf->fileName);
+	    warn("Indentation level %d doesn't match level %d at start of stanza.", 
+		indent, initialIndent);
+	    if (strchr(dy->string, '\t'))
+	        warn("There are tabs in the indentation, be sure tab stop is set to 8 spaces."); 
+	    noWarnAbort();
+	    }
+	}
+    }
+slReverse(&meta->tagList);
+
+/* Set up remaining fields and return. */
+assert(meta->tagList != NULL);
+meta->name = meta->tagList->val;
+meta->indent = initialIndent;
+return meta;
+}
+
+static struct meta *rReverseMetaList(struct meta *list)
+/* Return reverse list, and reverse all childen lists too.  Needed because
+ * we addHead instead of addTail while building tree because it's faster,
+ * especially as lists get long. */
+{
+slReverse(&list);
+struct meta *meta;
+for (meta = list; meta != NULL; meta = meta->next)
+    {
+    if (meta->children != NULL)
+        meta->children = rReverseMetaList(meta->children);
+    }
+return list;
+}
+
+struct meta *metaLoadAll(char *fileName, char *keyTag, char *parentTag,
+    boolean ignoreOtherStanzas, boolean ignoreIndent)
+/* Loads in all ra stanzas from file and turns them into a list of meta, some of which
+ * may have children.  The keyTag parameter is optional.  If non-null it should be set to
+ * the tag name that starts a stanza.   If null, the first tag of the first stanza will be used.
+ * The parentTag if non-NULL will be a tag name used to define the parent of a stanza.
+ * The ignoreOtherStanzas flag if set will ignore stanzas that start with other tags.  
+ * If not set the routine will abort on such stanzas.  The ignoreIndent if set will
+ * use the parentTag (which must be set) to define the hierarchy.  Otherwise the program
+ * will look at the indentation, and if there is a parentTag complain about any
+ * disagreements between indentation and parentTag. */
+{
+struct lineFile *lf = netLineFileOpen(fileName);
+struct meta *meta, *forest = NULL, *lastMeta = NULL;
+if (ignoreIndent)
+    {
+    errAbort("Currently metaLoadAll can't ignore indentation, sorry.");
+    }
+while ((meta = metaNextStanza(lf)) != NULL)
+    {
+    struct meta **pList;
+    if (forest == NULL)   /* First time. */
+        {
+	if (meta->indent != 0)
+	    errAbort("Initial stanza of %s should not be indented", fileName);
+	if (keyTag == NULL)
+	    keyTag = meta->tagList->tag;
+	pList = &forest;
+	}
+    else
+        {
+	if (!sameString(keyTag, meta->tagList->tag))
+	    {
+	    if (ignoreOtherStanzas)
+	        {
+		metaFree(&meta);
+		continue;
+		}
+	    else
+	        errAbort("Stanza beginning with %s instead of %s line %d of %s",
+		    meta->tagList->tag, keyTag, lf->lineIx, lf->fileName);
+	    }
+	if (meta->indent > lastMeta->indent)
+	    {
+	    pList = &lastMeta->children;
+	    meta->parent = lastMeta;
+	    }
+	else if (meta->indent == lastMeta->indent)
+	    {
+	    if (meta->indent == 0)
+		pList = &forest;
+	    else
+		{
+	        pList = &lastMeta->parent->children;
+		meta->parent = lastMeta->parent;
+		}
+	    }
+	else /* meta->indent < lastMeta->indent */
+	    {
+	    /* Find sibling at same level as us. */
+	    struct meta *olderSibling;
+	    for (olderSibling = lastMeta->parent; 
+		olderSibling != NULL; olderSibling = olderSibling->parent)
+	        {
+		if (meta->indent == olderSibling->indent)
+		    break;
+		}
+	    if (olderSibling == NULL)
+	        {
+		warn("Indentation inconsistent in stanza ending line %d of %s.", 
+		    lf->lineIx, lf->fileName);
+		warn("If you are using tabs, check your tab stop is set to 8.");
+		warn("Otherwise check that when you are reducing indentation in a stanza");
+		warn("that it is the same as the previous stanza at the same level.");
+		noWarnAbort();
+		}
+	    if (olderSibling->parent == NULL)
+	        pList = &forest;
+	    else
+	        {
+		pList = &olderSibling->parent->children;
+		meta->parent = olderSibling->parent;
+		}
+	    }
+	}
+    slAddHead(pList, meta);
+    lastMeta = meta;
+    }
+lineFileClose(&lf);
+forest = rReverseMetaList(forest);
+return forest;
+}
+
+static void rMetaListWrite(struct meta *metaList, struct meta *parent,
+    boolean level, int indent, boolean withParent, FILE *f)
+/* Write out list of stanzas at same level to file,  their children too. */
+{
+int totalIndent = level * indent;
+struct meta *meta;
+for (meta = metaList; meta != NULL; meta = meta->next)
+    {
+    struct metaTagVal *mtv;
+    boolean gotParent = FALSE;
+    for (mtv = meta->tagList; mtv != NULL; mtv = mtv->next)
+	{
+	if (sameString(mtv->tag, "parent"))
+	    {
+	    if (withParent)
+	        gotParent = TRUE;
+	    else
+	        continue;   
+	    }
+	spaceOut(f, totalIndent);
+	fprintf(f, "%s %s\n", mtv->tag, mtv->val);
+	}
+    if (withParent && !gotParent && parent != NULL)
+        {
+	spaceOut(f, totalIndent);
+	fprintf(f, "%s %s\n", "parent", parent->name);
+	}
+    fprintf(f, "\n");
+    if (meta->children)
+        rMetaListWrite(meta->children, meta, level+1, indent, withParent, f);
+    }
+}
+
+void metaWriteAll(struct meta *metaList, char *fileName, int indent, boolean withParent)
+/* Write out metadata, optionally adding meta tag. */
+{
+FILE *f = mustOpen(fileName, "w");
+rMetaListWrite(metaList, NULL, 0, indent, withParent, f);
+carefulClose(&f);
+}
+
+char *metaLocalTagVal(struct meta *meta, char *name)
+/* Return value of tag found in this node, not going up to parents. */
+{
+struct metaTagVal *mtv;
+for (mtv = meta->tagList; mtv != NULL; mtv = mtv->next)
+    if (sameString(mtv->tag, name))
+        return mtv->val;
+return NULL;
+}
+
+char *metaTagVal(struct meta *meta, char *name)
+/* Return value of tag found in this node or if its not there in parents.
+ * Returns NULL if tag not found. */
+{
+struct meta *m;
+for (m = meta; m != NULL; m = m->parent)
+    {
+    char *val = metaLocalTagVal(m, name);
+    if (val != NULL)
+       return val;
+    }
+return NULL;
+}
+
+void metaAddTag(struct meta *meta, char *tag, char *val)
+/* Add tag to meta, replacing existing tag if any */
+{
+/* First loop through to replace an existing tag. */
+struct metaTagVal *mtv;
+for (mtv = meta->tagList; mtv != NULL; mtv = mtv->next)
+    {
+    if (sameString(mtv->tag, tag))
+       {
+       freeMem(mtv->val);
+       mtv->val = cloneString(val);
+       return;
+       }
+    }
+/* If didn't make it then add new tag (at end) */
+mtv = metaTagValNew(tag, val);
+slAddTail(&meta->tagList, mtv);
+}
+
+static void rHashMetaList(struct hash *hash, struct meta *list)
+/* Add list, and any children of list to hash */
+{
+struct meta *meta;
+for (meta = list; meta != NULL; meta = meta->next)
+    {
+    hashAddUnique(hash, meta->name, meta);
+    if (meta->children)
+        rHashMetaList(hash, meta->children);
+    }
+}
+
+struct hash *metaHash(struct meta *forest)
+/* Return hash of meta at all levels of heirarchy keyed by forest. */
+{
+struct hash *hash = hashNew(0);
+rHashMetaList(hash, forest);
+return hash;
+}
diff --git a/gbtools/src/blatSrc/lib/metaWig.c b/gbtools/src/blatSrc/lib/metaWig.c
new file mode 100644
index 0000000..dd5c45c
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/metaWig.c
@@ -0,0 +1,188 @@
+/* Copyright (C) 2010 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "hash.h"
+#include "linefile.h"
+#include "localmem.h"
+#include "bigWig.h"
+#include "bwgInternal.h"
+#include "metaWig.h"
+
+static struct hash *hashSectionChroms(struct bwgSection *sectionList)
+/* Return hash keyed by chromosome name with values that are the
+ * first section in the chromosome. */
+{
+struct hash *hash = hashNew(0);
+struct bwgSection *section;
+for (section = sectionList; section != NULL; section = section->next)
+    {
+    if (!hashLookup(hash, section->chrom))
+        hashAdd(hash, section->chrom, section);
+    }
+return hash;
+}
+
+struct metaWig *metaWigOpen(char *fileName)
+/* Wrap self around file.  Read all of it if it's wig, just header if bigWig. */
+{
+struct metaWig *mw;
+AllocVar(mw);
+if (isBigWig(fileName))
+    {
+    mw->type = mwtBigWig;
+    mw->bwf = bigWigFileOpen(fileName);
+    }
+else
+    {
+    mw->lm = lmInit(0);
+    mw->sectionList = bwgParseWig(fileName, FALSE, NULL, 512, mw->lm);
+    mw->chromHash = hashSectionChroms(mw->sectionList);
+    mw->type = mwtSections;
+    }
+return mw;
+}
+
+void metaWigClose(struct metaWig **pMw)
+/* Close up metaWig file */
+{
+struct metaWig *mw = *pMw;
+if (mw != NULL)
+    {
+    bigWigFileClose(&mw->bwf);
+    lmCleanup(&mw->lm);
+    freez(pMw);
+    }
+}
+
+struct slName *metaWigChromList(struct metaWig *mw)
+/* Return list of chromosomes covered in wig. */
+{
+struct slName *list = NULL;
+switch (mw->type)
+    {
+    case mwtSections:
+        {
+	struct hashEl *chrom, *chromList = hashElListHash(mw->chromHash);
+	for (chrom = chromList; chrom != NULL; chrom = chrom->next)
+	    slNameAddHead(&list, chrom->name);
+	hashElFreeList(&chromList);
+	break;
+	}
+    case mwtBigWig:
+        {
+	struct bbiChromInfo *chrom, *chromList = bbiChromList(mw->bwf);
+	for (chrom = chromList; chrom != NULL; chrom = chrom->next)
+	    slNameAddHead(&list, chrom->name);
+	bbiChromInfoFreeList(&chromList);
+	break;
+	}
+    }
+slSort(&list, slNameCmpStringsWithEmbeddedNumbers);
+return list;
+}
+
+static void bedGraphSectionToIntervals(struct bwgSection *section, struct lm *lm,
+	struct bbiInterval **pList)
+/* Convert bedGraph section to interval format. */
+{
+struct bwgBedGraphItem *item;
+for (item = section->items.bedGraphList; item != NULL; item = item->next)
+    {
+    struct bbiInterval *el;
+    lmAllocVar(lm, el);
+    el->start = item->start;
+    el->end = item->end;
+    el->val = item->val;
+    slAddHead(pList, el);
+    }
+}
+
+static void varStepSectionToIntervals(struct bwgSection *section, struct lm *lm,
+	struct bbiInterval **pList)
+/* Convert bedGraph section to interval format. */
+{
+struct bwgVariableStepPacked *array = section->items.variableStepPacked;
+int i, count = section->itemCount;
+bits32 span = section->itemSpan;
+for (i=0; i<count; ++i)
+    {
+    struct bwgVariableStepPacked *item = &array[i];
+    struct bbiInterval *el;
+    lmAllocVar(lm, el);
+    el->start = item->start;
+    el->end = item->start + span;
+    el->val = item->val;
+    slAddHead(pList, el);
+    }
+}
+
+static void fixedStepSectionToIntervals(struct bwgSection *section, struct lm *lm,
+	struct bbiInterval **pList)
+/* Convert bedGraph section to interval format. */
+{
+struct bwgFixedStepPacked *array = section->items.fixedStepPacked;
+int i, count = section->itemCount;
+bits32 span = section->itemSpan;
+bits32 step = section->itemStep;
+bits32 start = section->start;
+for (i=0; i<count; ++i)
+    {
+    struct bwgFixedStepPacked *item = &array[i];
+    struct bbiInterval *el;
+    lmAllocVar(lm, el);
+    el->start = start;
+    el->end = start + span;
+    el->val = item->val;
+    start += step;
+    slAddHead(pList, el);
+    }
+}
+
+static void addIntervals(struct bwgSection *section, struct lm *lm, struct bbiInterval **pList)
+/* Convert section to list of allocated in lm */
+{
+switch (section->type)
+    {
+    case bwgTypeBedGraph:
+        bedGraphSectionToIntervals(section, lm, pList);
+        break;
+    case bwgTypeVariableStep:
+	varStepSectionToIntervals(section, lm, pList);
+        break;
+    case bwgTypeFixedStep:
+	fixedStepSectionToIntervals(section, lm, pList);
+	break;
+    default:
+        errAbort("unknown section type %d in addIntervals", section->type);
+	break;
+    }
+}
+
+struct bbiInterval *metaIntervalsForChrom(struct metaWig *mw, char *chrom, struct lm *lm)
+/* Get sorted list of all intervals with data on chromosome. */
+{
+struct bbiInterval *list = NULL;
+switch (mw->type)
+    {
+    case mwtSections:
+        {
+	struct bwgSection *section, *sectionList = hashFindVal(mw->chromHash, chrom);
+	for (section = sectionList; section != NULL; section = section->next)
+	   {
+	   if (!sameString(section->chrom, chrom))
+	       break;
+	   addIntervals(section, lm, &list);
+	   }
+	slReverse(&list);
+	break;
+	}
+    case mwtBigWig:
+        {
+	list = bigWigIntervalQuery(mw->bwf, chrom, 0, bbiChromSize(mw->bwf, chrom), lm);
+	break;
+	}
+    }
+return list;
+}
+
diff --git a/gbtools/src/blatSrc/lib/mgCircle.c b/gbtools/src/blatSrc/lib/mgCircle.c
new file mode 100644
index 0000000..bdef3ea
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/mgCircle.c
@@ -0,0 +1,81 @@
+/* mgCircle.c - Simple stepping draw a circle algorithm.  
+	Don't even correct aspect ratio. 
+ * This file is copyright 1984-2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "memgfx.h"
+
+
+void mgCircle(struct memGfx *mg, int xCen, int yCen, int rad, 
+	Color color, boolean filled)
+/* Draw a circle using a stepping algorithm.  Doesn't correct
+ * for non-square pixels. */
+{
+int err;
+int derr, yerr, xerr;
+int aderr, ayerr, axerr;
+register int x,y;
+int lasty;
+
+if (rad <= 0)
+    {
+    mgPutDot(mg, xCen, yCen, color);
+    return;
+    }
+err = 0;
+x = rad;
+lasty = y = 0;
+for (;;)
+    {
+    if (filled)
+	{
+	if (y == 0)
+	    mgLineH(mg, yCen, xCen-x, xCen+x, color);
+	else
+	    {
+	    if (lasty != y)
+		{
+		mgLineH(mg, yCen-y, xCen-x, xCen+x, color);
+		mgLineH(mg, yCen+y, xCen-x, xCen+x, color);
+		lasty = y;
+		}
+	    }
+	}
+    else
+	{
+	/* draw 4 quadrandts of a circle */
+	mgPutDot(mg, xCen+x, yCen+y, color);
+	mgPutDot(mg, xCen+x, yCen-y, color);
+	mgPutDot(mg, xCen-x, yCen+y, color);
+	mgPutDot(mg, xCen-x, yCen-y, color);
+	}
+    axerr = xerr = err -x-x+1;
+    ayerr = yerr = err +y+y+1;
+    aderr = derr = yerr+xerr-err;
+    if (aderr < 0)
+	aderr = -aderr;
+    if (ayerr < 0)
+	ayerr = -ayerr;
+    if (axerr < 0)
+	axerr = -axerr;
+    if (aderr <= ayerr && aderr <= axerr)
+	{
+	err = derr;
+	x -= 1;
+	y += 1;
+	}
+    else if (ayerr <= axerr)
+	{
+	err = yerr;
+	y += 1;
+	}
+    else
+	{
+	err = xerr;
+	x -= 1;
+	}
+    if (x < 0)
+	break;
+    }
+}
diff --git a/gbtools/src/blatSrc/lib/mgPolygon.c b/gbtools/src/blatSrc/lib/mgPolygon.c
new file mode 100644
index 0000000..61c7ef6
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/mgPolygon.c
@@ -0,0 +1,438 @@
+/* mgPolygon - stuff to draw polygons in memory.  This code dates
+ * back to 1984, was used in the Aegis Animator for the Atari ST. 
+ * It was an exceedingly speed critical routine for that program.
+ * For us it may be overkill, but the major speed tweak - the special
+ * case for convex polygons - is only 1/3 of the module, so I'm leaving
+ * it in.  I've lightly adapted the code to current conventions, but
+ * you can still see some relics in the local and static variable names of 
+ * other coding conventions.  
+ * This file is copyright 1984-2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "bits.h"
+#include "memgfx.h"
+#include "gfxPoly.h"
+
+
+void mgDrawPolyOutline(struct memGfx *mg, struct gfxPoly *poly, Color color)
+/* Draw a singe pixel line around polygon. */
+{
+struct gfxPoint *a, *b, *end;
+
+a = end = poly->ptList;
+b = a->next;
+for (;;)
+    {
+    mgDrawLine(mg, a->x, a->y, b->x, b->y, color);
+    a = b;
+    b = b->next;
+    if (a == end)
+        break;
+    }
+}
+
+/* ----- Stuff for convex polygons that may contain crossing lines ----- 
+ * This code works by allocating a bitmap big enough to hold the polygon
+ * and drawing lines on the bitmap in a special fashion, and then
+ * scanning the bitmap to connect together the dots with horizontal lines. */
+
+#define UPDIR 1
+#define DOWNDIR 0
+
+static UBYTE *on_off_buf;	/* Our bitplane. */
+
+static int pxmin, pxmax, pymin, pymax;	/* Bounds of polygon. */
+
+static void find_pminmax(struct gfxPoly *poly)
+{
+struct gfxPoint *pointpt;
+int i;
+
+pointpt = poly->ptList;
+pxmin = pxmax = pointpt->x;
+pymin = pymax = pointpt->y;
+pointpt = pointpt->next;
+
+i = poly->ptCount;
+while (--i > 0)
+   {
+   if (pxmin > pointpt->x) pxmin = pointpt->x;
+   if (pxmax < pointpt->x) pxmax = pointpt->x;
+   if (pymin > pointpt->y) pymin = pointpt->y;
+   if (pymax < pointpt->y) pymax = pointpt->y;
+   pointpt = pointpt->next;
+   }
+}
+
+static void xor_pt(int bpr, int x, int y)
+/* Xor in a bit at given location. */
+{
+UBYTE rot;
+
+rot = ((unsigned)0x80) >> (x&7);
+on_off_buf[ bpr*y + (x>>3) ] ^= rot;
+}
+
+
+static void y_xor_line(int bpr, int x1, int y1, int x2, int y2)
+/* Xor in a line onto on_off_buf, only plotting when we hit a new y-value. */
+{
+UBYTE *imagept = on_off_buf;
+UBYTE rot;
+int   duty_cycle;
+int   delta_x, delta_y;
+int dots;
+int swap;
+
+if (x1 > x2)
+    {
+    swap = x1;
+    x1 = x2;
+    x2 = swap;
+    swap = y1;
+    y1 = y2;
+    y2 = swap;
+    }
+delta_y = y2-y1;
+delta_x = x2-x1;
+rot = ((unsigned)0x80) >> (x1&7);
+imagept += bpr*y1 + (x1>>3);
+
+
+if (delta_y < 0) 
+    {
+    delta_y = -delta_y;
+    bpr = -bpr;
+    }
+duty_cycle = (delta_x - delta_y)/2;
+*(imagept) ^= rot;
+if (delta_x < delta_y)
+    {
+    dots = delta_y;
+    while (--dots >= 0)
+	{
+	*(imagept) ^= rot;
+	duty_cycle += delta_x;	  /* update duty cycle */
+	imagept += bpr;
+	if (duty_cycle > 0)
+	    {
+	    duty_cycle -= delta_y;
+	    rot >>= 1;
+	    if (rot == 0)
+		{
+		imagept++;
+		rot = 0x80;
+		}
+	    }
+	}
+    }
+else
+    {
+    dots = delta_x;
+    while (--dots >= 0)
+	{
+	duty_cycle -= delta_y;	  /* update duty cycle */
+	if (duty_cycle < 0)
+	    {
+	    *(imagept) ^= rot;
+	    duty_cycle += delta_x;
+	    imagept += bpr;
+	    }
+	rot >>= 1;
+	if (rot == 0)
+	    {
+	    imagept++;
+	    rot = 0x80;
+	    }
+	}
+    }
+}
+
+ 
+static void drawAfterOnOff(struct memGfx *mg, Color color, int bpr, int width, 
+	int height)
+/* Examine bitmap and draw horizontal lines between set bits. */
+{
+UBYTE *linept = on_off_buf;
+int y;
+
+for (y=0; y<height; ++y)
+	{
+	int start = 0;
+	int end;
+	for (;;)
+	    {
+	    start = bitFindSet(linept, start, width);
+	    if (start >= width)
+	        break;
+	    end = bitFindSet(linept, start+1, width);
+	    mgLineH(mg, y+pymin, start+pxmin, end+pxmin, color);
+	    start = end+1;
+	    }
+	linept += bpr;
+	}
+}
+
+static void fillConcave(struct memGfx *mg, struct gfxPoly *poly, Color color)
+/* Draw concave polygon */
+{
+struct gfxPoint *pointpt;
+int x,y;
+int ox,oy;
+int lastdir;
+int i;
+int bpr;	/* Bytes per row */
+int width, height;
+long size;
+
+find_pminmax(poly);
+if (pymin==pymax)  /*Complex code can't cope with trivial case*/
+    {
+    mgLineH(mg, pymin, pxmin, pxmax,color);
+    return;
+    }
+width = pxmax - pxmin + 1;
+height = pymax - pymin + 1;
+bpr = ((width+7)>>3);
+size = (long)bpr*height;
+if ((on_off_buf = needMem(size)) == NULL)	
+    return;
+pointpt = poly->ptList;
+x = pointpt->x;
+y = pointpt->y;
+
+do
+	{
+	pointpt = pointpt->next;
+	ox = pointpt->x;
+	oy = pointpt->y;
+	}
+while (oy == y);
+
+if (oy>y)
+	lastdir = UPDIR;
+else
+	lastdir = DOWNDIR;
+
+i = poly->ptCount;
+while (--i >= 0)
+   {
+   pointpt = pointpt->next;
+   x = pointpt->x;
+   y = pointpt->y;
+   if (y!=oy)
+	  {
+	  y_xor_line(bpr,ox-pxmin,oy-pymin,x-pxmin,y-pymin);
+	  if (y>oy)
+		 if (lastdir == UPDIR)
+			xor_pt(bpr,ox-pxmin,oy-pymin);
+		 else
+			lastdir = UPDIR;
+	  else
+		 if (lastdir == DOWNDIR)
+			xor_pt(bpr,ox-pxmin,oy-pymin);
+		 else
+			lastdir = DOWNDIR;
+	  }
+   ox = x;
+   oy = y;
+   }
+
+drawAfterOnOff(mg, color, bpr, width, height);
+freez(&on_off_buf);
+return;
+}
+
+/*  ---- This section of code is for convex, polygons.  It's faster. ---- */
+
+#ifdef SOME_OFF_BY_ONE_PROBLEMS
+static int *xdda_ebuf(int *ebuf, int x1, int y1, int x2, int y2)
+/* Calculate the x-positions of a line from x1,y1  to x2/y2  */
+{
+int incx, incy;
+int x;
+int duty_cycle;
+int delta_x, delta_y;
+int dots;
+
+delta_y = y2-y1;
+delta_x = x2-x1;
+incx =  incy = 1;
+x = x1;
+if (delta_y < 0) 
+   {
+   delta_y = -delta_y;
+   incy = -1;
+   }
+
+if (delta_x < 0) 
+   {
+   delta_x = -delta_x;
+   incx = -1;
+   }
+
+duty_cycle = (delta_x - delta_y)/2;
+if (delta_x >= delta_y)
+    {
+    int lasty = y1-1;
+    dots = delta_x+1;
+    while (--dots >= 0)
+	{
+	if (lasty != y1)
+	    {
+	    *ebuf++ = x1;
+	    lasty = y1;
+	    }
+	duty_cycle -= delta_y;
+	x1 += incx;
+	if (duty_cycle < 0)
+	    {
+	    duty_cycle += delta_x;	  /* update duty cycle */
+	    y1+=incy;
+	    }
+	}
+    }
+else
+    {
+    dots = delta_y+1;
+    while (--dots >= 0)
+	{
+	*ebuf++ = x1;
+	duty_cycle += delta_x;
+	y1+=incy;
+	if (duty_cycle > 0)
+	    {
+	    duty_cycle -= delta_y;	  /* update duty cycle */
+	    x1 += incx;
+	    }
+	}
+    }
+return(ebuf);
+}
+#endif /* SOME_OFF_BY_ONE_PROBLEMS */
+
+
+#ifdef CONVEX_OPTIMIZATION
+int *fill_ebuf(struct gfxPoint *thread, int count, int *ebuf)
+/* Make list of x coordinates for a couple of lines.  Assumes that
+ * the y coordinates are monotonic.  Ebuf needs to be as big as the
+ * total height of thread.  Returns next free space in ebuf. */
+{
+int x, y, ox, oy;
+int i;
+
+ox = thread->x;
+oy = thread->y;
+
+for (i=0; i<count; ++i)
+   {
+   thread = thread->next;
+   x = thread->x;
+   y = thread->y;
+   if (y!=oy)
+      ebuf = xdda_ebuf(ebuf,ox,oy,x,y) - 1;
+   ox = x;
+   oy = y;
+   }
+return(ebuf+1);
+}
+
+static void blast_hlines(struct memGfx *mg, 
+	int *thread1, 	/* List of start X positions. */
+	int *thread2, 	/* Backwards list of end positions. */
+	int y, 		/* Y position. */
+	int count, 	/* Number of horizontal lines to draw. */
+	Color color)	/* Color. */
+/* Draw a whole bunch of horizontal lines. */
+{
+int x1, x2;
+thread2 += count;
+while (--count >= 0)
+    {
+    x1 = *thread1++;
+    x2 = *(--thread2);
+    if (x1 > x2)
+	mgLineH(mg, y, x2, x1, color);
+    else
+	mgLineH(mg, y, x1, x2, color);
+    y += 1;
+    }
+}
+
+void mgDrawPolyFilled(struct memGfx *mg, struct gfxPoly *poly, Color color)
+/* Draw filled polygon, possibly with outline in a seperate color. */
+{
+struct gfxPoint *p;
+struct gfxPoint *np;
+struct gfxPoint *peak;
+struct gfxPoint *valley;
+int highy;
+int i;
+int pcount;
+int lasty;
+
+peak = p = poly->ptList;
+i = poly->ptCount;
+highy = p->y;
+pcount = 0;
+while (--i > 0)
+    {
+    p = p->next;
+    if (p->y <= highy)
+	{
+	peak = p;
+	highy = p->y;
+	}
+    }
+p = peak;
+np = p->next;
+i = poly->ptCount;
+while (--i >= 0)
+    {
+    if (np->y < p->y)
+	{
+	int totalHeight;
+	int *thread1, *thread2;
+	valley = p;
+	p = np;
+	np = np->next;
+	while (--i >= 0)
+	    {
+	    if (np->y > p->y)
+		{
+		fillConcave(mg, poly, color);
+		return;	/*sorry its concave*/
+		}
+	    p = np;
+	    np = np->next;		
+	    }
+	totalHeight = valley->y - highy + 1;
+	AllocArray(thread1, totalHeight);
+	AllocArray(thread2, totalHeight);
+	fill_ebuf(peak, pcount, thread1);
+	pcount = fill_ebuf(valley, poly->ptCount - pcount, thread2)
+		- thread2;
+	blast_hlines(mg, thread1, thread2, highy, pcount, color);
+	freeMem(thread1);
+	freeMem(thread2);
+	return;
+	}
+    pcount++;
+    p = np;
+    np = np->next;
+    }	
+return;	/*all points of poly have same y value */
+}
+#endif /* CONVEX_OPTIMIZATION */
+
+void mgDrawPoly(struct memGfx *mg, struct gfxPoly *poly, Color color,
+	boolean filled)
+/* Draw polygon, possibly filled in color. */
+{
+if (filled)
+    fillConcave(mg, poly, color);
+    // mgDrawPolyFilled(mg, poly, color);
+mgDrawPolyOutline(mg, poly, color);
+}
+
diff --git a/gbtools/src/blatSrc/lib/mime.c b/gbtools/src/blatSrc/lib/mime.c
new file mode 100644
index 0000000..8a7084d
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/mime.c
@@ -0,0 +1,687 @@
+/* Routines for processing MIME from a descriptor.
+ *   For cgi post, the MIME descriptor is stdin.
+ *   We want to parse it as it comes in so that 
+ *   we can handle very large files if needed.
+ *   Large data are saved to tempfiles.
+ *   Small data stays as ptr+size in memory.
+ *
+ * This file is copyright 2005 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "hash.h"
+#include "linefile.h"
+#include "cheapcgi.h"
+#include "portable.h"
+#include "errAbort.h"
+#include "mime.h"
+
+/* 
+ * Note: MIME is a nested structure that makes a tree that streams in depth-first.
+ */
+
+#define MAXPARTSIZE 64LL*1024*1024*1024  /* max size before gets put in a tempfile to save memory. It currently has been set so large that it will not be triggered. */
+#define MAXPARTLINESIZE 1024 /* header lines should be small, so bad if bigger than this */
+#define MAXDATASIZE 64LL*1024*1024*1024 /* max size allowable for large uploads */
+#define MAXBOUNDARY 72+5     /* max size of buffer for boundary 72+--""0 */
+
+enum nlType nlType = nlt_undet;
+
+static void setEopMB(struct mimeBuf *b)
+/* do a search for boundary, set eop End Of Part if found */
+{
+if (b->blen > 0)
+    b->eop = memMatch(b->boundary, b->blen, b->i, b->eoi - b->i);
+else
+    b->eop = NULL;
+}
+
+static void setEodMB(struct mimeBuf *b)
+/* set end of data - eoi minus (boundary-size -1) */
+{
+if (b->blen > 1 && b->eoi == b->eom) 
+    {
+    b->eod = b->eoi - (b->blen-1);
+    }
+else
+    {
+    b->eod = b->eoi;
+    }
+}
+
+static void setBoundaryMB(struct mimeBuf *b, char *boundary)
+/* set boundary in b */
+{
+b->boundary = boundary;
+b->blen = boundary ? strlen(b->boundary) : 0;
+setEopMB(b);
+setEodMB(b);
+}
+
+#ifdef DEBUG
+static void dumpMB(struct mimeBuf *b)
+/* debug dump */
+{
+int i=0;
+
+fprintf(stderr,"b->i  =%lu "
+      "b->eop=%lu "
+      "b->eod=%lu "
+      "b->eoi=%lu "
+      "b->eom=%lu "
+      "%s "
+      "%d "
+      "\n", 
+    (unsigned long) b->i,
+    (unsigned long) b->eop,
+    (unsigned long) b->eod,
+    (unsigned long) b->eoi,
+    (unsigned long) b->eom,
+    b->boundary,
+    b->blen
+    );
+fprintf(stderr,"*");    
+for(i=0;i<MIMEBUFSIZE;++i)
+    {
+    fprintf(stderr,"%c", (b->buf[i] < 31 || (unsigned) b->buf[i] > 127) ? '.' : b->buf[i] );
+    }
+fprintf(stderr,"\n\n");    
+}
+#endif
+
+static void moreMimeBuf(struct mimeBuf *b)
+{
+int bytesRead = 0, bytesToRead = 0;
+if (b->blen > 1)
+    {
+    int r = b->eoi - b->i;
+    memmove(b->buf, b->i, r);
+    b->eoi = b->buf+r;
+    }
+else
+    {
+    b->eoi = b->buf;
+    }
+b->i = b->buf+0;
+bytesToRead = b->eom - b->eoi;
+while (bytesToRead > 0)
+    {
+    bytesRead = read(b->d, b->eoi, bytesToRead);
+    if (bytesRead < 0)
+        errnoAbort("moreMimeBuf: error reading MIME input descriptor");
+    b->eoi += bytesRead;
+    if (bytesRead == 0)
+        break;
+    bytesToRead = bytesToRead - bytesRead;
+    }
+setEopMB(b);
+setEodMB(b);
+//debug
+//fprintf(stderr,"post-moreMime dumpMB: ");
+//dumpMB(b);  //debug
+}
+
+static char getcMB(struct mimeBuf *b)
+/* read just one char from MIME buffer */
+{
+if (b->i >= b->eoi && b->eoi < b->eom)  /* at end of input */
+    errAbort("getcMB error - requested input beyond end of MIME input.");
+if (b->i >= b->eod && b->eoi == b->eom) /* at end of buffer */
+    moreMimeBuf(b);
+    
+//fprintf(stderr,"b->buf:%lu b->i:%lu %c \n",
+//    (unsigned long) b->buf,
+//    (unsigned long) b->i,
+//    *b->i
+//    );
+//fprintf(stderr,"%c",*b->i);
+//fflush(stderr); 
+return *b->i++;    
+}
+
+static void putBackMB(struct mimeBuf *b)
+/* Rewind just one char back in MIME buffer.
+ * Do not use except for distinguishing line type initially */
+{
+if (b->i == b->buf)  /* at beginning of buffer */
+    errAbort("putBackMB error - requested pushback beyond beginning buffer.");
+b->i--;    
+}
+
+static char *getLineMB(struct mimeBuf *b)
+/* Reads one line up to CRLF, returned string does not include CRLF however. 
+   Use freeMem when done with string. */
+{
+char line[MAXPARTLINESIZE];
+int i = 0;
+char c = 0;
+line[0]=0;
+while(TRUE)
+    {
+    c =getcMB(b);
+    if ((c == 0x0d) || (c == 0x0a))  /* CR or LF is end of line */
+	break;
+    line[i++] = c;
+    if (i >= MAXPARTLINESIZE)
+	errAbort("getLineMB error - MIME input header too long, "
+		    "greater than %d chars",MAXPARTLINESIZE);
+    }
+line[i] = 0; /* terminate string */ 
+if (nlType == nlt_undet)  /* determine newline type */
+    {
+    if (c == 0x0d)
+	{
+	nlType = nlt_mac;
+	c = getcMB(b);
+	if (c == 0x0a)
+	    nlType = nlt_dos;
+	else
+    	    putBackMB(b);
+	}
+    else
+	{
+	nlType = nlt_unix;
+	}
+    }
+else if (nlType == nlt_dos)
+    {
+    if (c == 0x0d)
+    	getcMB(b); /* just waste the LF */
+    else
+	nlType = nlt_unix;
+    }
+return cloneString(line);
+}
+
+
+static void getChunkMB(struct mimeBuf *b, char **address, int *size, boolean *hasZeros)
+/* Pass back address and size of chunk, and whether it contains embedded zeros.
+   The chunk is the largest piece of data left in the buffer up to the eod or eop. */
+{
+char *eoc = b->eop ? b->eop : b->eod; /* end of chunk */
+//debug
+//fprintf(stderr,"pre-getChunkMB dumpMB: ");
+//dumpMB(b);  //debug
+*address=b->i;
+*size=eoc - b->i;
+*hasZeros = (memMatch("", 1,*address, *size) != NULL);
+b->i = eoc;
+}
+
+static void readPartHeaderMB(struct mimeBuf *b, struct mimePart *p, char *altHeader)
+/* Reads the header lines of the mimePart,
+   saves the header settings in a hash.  */
+{
+struct dyString *fullLine = dyStringNew(0);
+char *key=NULL, *val=NULL;
+struct lineFile *lf = NULL;
+char *line = NULL;
+char *lineAhead = NULL;
+int size = 0;
+p->hdr = newHash(3);
+	//debug
+    	//fprintf(stderr,"headers dumpMB: ");
+	//dumpMB(b);  //debug
+if (altHeader)
+    {
+    lf = lineFileOnString("MIME Header", TRUE, altHeader);
+    }
+/* read ahead one line, skipping any leading blanks lines */   
+do
+    {
+    if (altHeader)
+	lineFileNext(lf, &lineAhead, &size);
+    else
+	lineAhead = getLineMB(b);
+    } 
+    while (sameString(lineAhead,""));
+
+do
+    {
+    /* accumulate a full header line - some emailers split into mpl lines */
+    dyStringClear(fullLine);
+    do 
+	{
+	line = lineAhead;
+	if (altHeader)
+	    lineFileNext(lf, &lineAhead, &size);
+	else
+	    lineAhead = getLineMB(b);
+	dyStringAppend(fullLine,line);    
+	if (!altHeader) 
+	    freez(&line);
+	} while (isspace(lineAhead[0]));
+    line = fullLine->string;
+    //fprintf(stderr,"found a line! [%s]\n",line);  //debug
+    key = line;
+    val = strchr(line,':');
+    if (!val)
+	errAbort("readPartHeaderMB error - header-line colon not found, line=[%s]",line);
+    *val = 0;
+    val++;
+    key=trimSpaces(key);
+    // since the hash is case-sensitive, convert to lower case for ease of matching
+    tolowers(key);  
+    val=trimSpaces(val);
+    hashAdd(p->hdr,key,cloneString(val));
+    
+    //debug
+    //fprintf(stderr,"MIME header: key=[%s], val=[%s]\n",key,val);
+    //fflush(stderr); 
+    
+    } while (!sameString(lineAhead,""));
+if (altHeader)
+    {
+    if (nlType == nlt_undet)
+	nlType = lf->nlType;
+    lineFileClose(&lf);
+    }
+else
+    {
+    freez(&lineAhead);
+    }
+dyStringFree(&fullLine);
+    
+}
+
+
+struct mimeBuf * initMimeBuf(int d)
+/* d is a descriptor for a file or socket or some other descriptor 
+   that the MIME input can be read from. 
+   Initializes the mimeBuf structure. */
+{
+struct mimeBuf *b=AllocA(*b);
+b->d = d;
+b->boundary = NULL;
+b->blen = 0;
+b->eom = b->buf+MIMEBUFSIZE;
+b->eoi = b->eom;
+b->eod = b->eom;
+b->i = b->eom;
+moreMimeBuf(b);
+return b;
+}
+
+char *getMimeHeaderMainVal(char *header)
+/* Parse a typical mime header line returning the first
+ * main value up to whitespace, punctuation, or end. 
+ * freeMem the returned string when done */
+{
+char value[1024]; 
+char *h = header;
+int i = 0;
+char *puncChars = ",;: \t\r\n"; /* punctuation chars */
+i=0;
+/* The header should have already been trimmed of leading and trailing spaces */
+while(TRUE)
+    {
+    char c = *h++;
+    if (c==0 || strchr(puncChars,c))
+	break;
+    value[i++] = c;
+    if (i >= sizeof(value))
+	errAbort("error: main value too long (>%lu) in MIME header Content-type:%s",(unsigned long)sizeof(value),header);
+    }
+value[i] = 0;    
+
+return cloneString(value);
+
+}
+
+
+char *getMimeHeaderFieldVal(char *header, char *field)
+/* Parse a typical mime header line looking for field=
+ * and return the value which may be quoted.
+ * freeMem the returned string when done */
+{
+char value[1024]; 
+char *fld = header;
+int i = 0;
+char *puncChars = ",;: \t\r\n"; /* punctuation chars */
+while (TRUE)
+    {
+    fld = strstr(fld,field);
+    if (!fld)
+	return NULL;
+    if (fld > header && strchr(puncChars,fld[-1]))
+	{
+	fld+=strlen(field);
+	if (*fld == '=')
+	    {
+	    ++fld;
+	    break;
+	    }
+	}    
+    else
+	{
+	++fld;
+	}
+    }	
+if (*fld == '"')
+    {
+    puncChars = "\"";  /* quoted */
+    ++fld;
+    }
+i=0;
+while(TRUE)
+    {
+    char c = *fld++;
+    if (c==0 || strchr(puncChars,c))
+	break;
+    value[i++] = c;
+    if (i >= sizeof(value))
+	errAbort("error: %s= value too long (>%lu) in MIME header Content-type:%s",field,(unsigned long)sizeof(value),header);
+    }
+value[i] = 0;    
+
+return cloneString(value);
+
+}
+
+char *getNewLineByType()
+/* just use global nlType setting */
+{
+switch (nlType)
+    {
+    case nlt_dos:
+	//debug
+    	//fprintf(stderr,"nlType=nlt_dos\n");
+	return "\x0d\x0a";
+    case nlt_mac:
+	//debug
+    	//fprintf(stderr,"nlType=nlt_mac\n");
+	return "\x0d";
+    case nlt_unix:
+    default:
+	//debug
+    	//fprintf(stderr,"nlType=nlt_unix\n");
+	return "\x0a";
+    }
+}
+
+struct mimePart *parseMultiParts(struct mimeBuf *b, char *altHeader)
+/* This is a recursive function.  It parses multipart MIME messages.
+   Data that are binary or too large will be saved in mimePart->filename
+   otherwise saved as a c-string in mimePart->data.  If multipart,
+   then first child is mimePart->child, subsequent sibs are in child->next.
+   altHeader is a string of headers that can be fed in if the headers have
+   already been read off the stream by an earlier process, i.e. apache.
+ */
+{ 
+struct mimePart *p=AllocA(*p);
+char *parentboundary = NULL, *boundary = NULL;
+char *ct = NULL;
+boolean autoBoundary = FALSE;
+
+
+//debug
+//fprintf(stderr,"altHeader=[%s]\n",altHeader);
+
+if (sameOk(altHeader, "autoBoundary"))
+    { /* process things with no explicit header.
+       *  look for *MIME* \n\n-- */
+    struct dyString *dy = dyStringNew(0);
+    char *prevPrevLine = NULL;
+    char *prevLine = NULL;
+    char *line = NULL;
+    boolean found = FALSE;
+    autoBoundary = TRUE;
+    while (TRUE)
+	{
+	if (b->i >= b->eoi && b->eoi < b->eom)  /* at end of input */
+	    break;
+	line = getLineMB(b);
+	if (line && startsWith("--",line) // && 
+	    //sameString(prevLine,"") && 
+	    //prevPrevLine &&
+	    //stringIn("MULTI",prevPrevLine) && 
+	    //stringIn("MIME",prevPrevLine) 
+	    )
+	    {
+	    found = TRUE;
+	    break;
+	    }
+	freez(&prevPrevLine);
+	prevPrevLine = prevLine;
+	prevLine = line;
+	if (prevPrevLine)
+	    touppers(prevPrevLine);
+	}
+    if (!found)
+	errAbort("autoBoundary: No initial boundary found.");
+
+    dyStringPrintf(dy, "CONTENT-TYPE:multipart/form-data; boundary=%s%s%s", 
+	line+2, getNewLineByType(), getNewLineByType() );
+    altHeader = dyStringCannibalize(&dy); 
+    
+    //debug
+    //fprintf(stderr,"autoBoundary altHeader = [%s]\n",altHeader);
+    //fflush(stderr); 
+
+    freez(&prevPrevLine);	    
+    freez(&prevLine);	    
+    freez(&line);	    
+    }
+
+//debug
+//fprintf(stderr,"\n");
+readPartHeaderMB(b,p,altHeader);
+
+ct = hashFindVal(p->hdr,"content-type");  /* use lowercase key */
+//debug
+//fprintf(stderr,"ct from hash:%s\n",ct);
+//fflush(stderr); 
+
+if (ct && startsWith("multipart/",ct))
+    {
+    char bound[MAXBOUNDARY]; 
+    char *bnd = NULL;
+    struct mimePart *child = NULL;
+
+    /* these 3 vars just for processing epilog chunk: */
+    char *bp=NULL;
+    int size=0;
+    boolean hasZeros=FALSE;
+
+    /* save */
+    parentboundary = b->boundary;
+
+    boundary = getMimeHeaderFieldVal(ct,"boundary");
+    if (strlen(boundary) >= MAXBOUNDARY)
+	errAbort("error: boundary= value too long in MIME header Content-type:%s",ct);
+    safef(bound, sizeof(bound), "--%s",boundary);  /* do not prepend CRLF to boundary yet */
+    freez(&boundary);
+    boundary = cloneString(bound);
+    //debug
+    //fprintf(stderr,"initial boundary parsed:%s\n",boundary);
+    //fflush(stderr); 
+
+    if (!autoBoundary)
+	{
+	/* skip any extra "prolog" before the initial boundary marker */
+	while (TRUE)
+	    {
+	    bnd = getLineMB(b);
+	    if (sameString(bnd,boundary)) 
+	       break;
+	    freez(&bnd);
+	    }
+	    //debug
+	    //fprintf(stderr,"initial boundary found:%s\n",bnd);
+	    //fflush(stderr); 
+	freez(&bnd);
+	}
+
+    /* include crlf in the boundary so bodies won't have trailing a CRLF
+     * this is done here so that in case there's no extra CRLF
+     * between the header and the boundary, it will still work,
+     * so we only prepend the CRLF to the boundary after initial found */
+    safef(bound,sizeof(bound),"%s%s", getNewLineByType(), boundary);
+    freez(&boundary);
+    boundary=cloneString(bound);
+    
+    setBoundaryMB(b, boundary);
+
+    while(TRUE)
+	{
+	int i = 0;
+	char c1 = ' ', c2 = ' ';
+    	child = parseMultiParts(b,NULL);
+	slAddHead(&p->multi,child);
+	//call getLine, compare to boundary 
+	/* skip extra initial boundary marker - it's moot anyway */
+	freez(&bnd);
+	    //debug
+	    //fprintf(stderr,"post-parse pre-getLineMB dumpMB: ");
+	    //dumpMB(b);  //debug
+	for (i=0;i<strlen(boundary);++i)
+	    bound[i] = getcMB(b);
+	bound[i] = 0;    
+	if (!sameString(bound,boundary))
+	    errAbort("expected boundary %s, but found %s in MIME",boundary,bound);
+	//debug
+    	//fprintf(stderr,"\nfound boundary:%s\n",bound);
+	//fflush(stderr); 
+    	c1 = getcMB(b);
+	if (c1 == '-')
+	    {
+	    c2 = getcMB(b);
+	    if (c2 == '-')
+    		break;  /* last boundary found */
+	    else		    
+	    	errAbort("expected -- after boundary %s, but found %c%c in MIME",boundary,c1,c2);
+	    }
+	if (nlType == nlt_dos)
+	    c2 = getcMB(b);
+	switch (nlType)
+	    {
+	    case nlt_dos:
+		if (c1 == 0x0d && c2 == 0x0a)
+		    break;
+		else		    
+		    errAbort("expected CRLF after boundary %s, but found %c%c in MIME",boundary,c1,c2);
+	    case nlt_unix:
+		if (c1 == 0x0a)
+		    break;
+		else		    
+		    errAbort("expected LF after boundary %s, but found %c in MIME",boundary,c1);
+	    case nlt_mac:
+		if (c1 == 0x0d)
+		    break;
+		else		    
+		    errAbort("expected CR after boundary %s, but found %c in MIME",boundary,c1);
+	    default:
+		    errAbort("unexpected nlType %d after boundary %s",nlType,boundary);
+	    }
+	setEopMB(b);
+	}	
+    freez(&bnd);
+    slReverse(&p->multi);
+    /* restore */
+    freez(&boundary);
+    boundary = parentboundary;
+	//debug
+    	//fprintf(stderr,"restoring parent boundary = %s\n",boundary);
+    setBoundaryMB(b, boundary);
+
+    /* dump any "epilog" that may be between the 
+     * end of the child boundary and the parent boundary */
+    getChunkMB(b, &bp, &size, &hasZeros);
+    //debug
+    //fprintf(stderr,"epilog size=%d\n",size);
+    	   
+    
+    }
+else
+    {
+    char *bp=NULL;
+    int size=0;
+    boolean hasZeros=FALSE;
+    boolean toobig=FALSE;
+    boolean asFile=FALSE;
+    boolean convert=FALSE;
+    FILE *f = NULL;
+    struct dyString *dy=newDyString(1024);
+    //debug
+    //fprintf(stderr,"starting new part (non-multi), dumpMB: \n");
+    //dumpMB(b);  //debug
+    
+    //debug
+    //ct = hashFindVal(p->hdr,"content-transfer-encoding");  /* use lowercase key */
+    //fprintf(stderr,"cte from hash:%s\n",ct);
+	
+    while(TRUE)
+	{
+	// break if eop, eod, eoi
+    	getChunkMB(b, &bp, &size, &hasZeros);
+	//debug
+    	//fprintf(stderr,"bp=%lu size=%d, hasZeros=%d \n", 
+	//    (unsigned long) bp,
+	//    size,
+	//    hasZeros);
+	if (hasZeros)
+	    {
+	    p->binary=TRUE;
+	    }
+	//if (hasZeros && !asFile)
+	//    {
+	//    convert=TRUE;
+	//    }
+	if (!asFile && p->size+size > MAXPARTSIZE)
+	    {
+	    toobig = TRUE;
+	    convert=TRUE;
+	    }
+	if (convert)
+	    {
+	    struct tempName uploadedData;
+	    convert=FALSE;
+	    asFile = TRUE;
+	    makeTempName(&uploadedData, "hgSs", ".cgi");
+	    p->fileName=cloneString(uploadedData.forCgi);
+	    f = mustOpen(p->fileName,"w");
+	    mustWrite(f,dy->string,dy->stringSize);
+	    freeDyString(&dy);
+	    }
+	if (asFile)
+	    {
+	    mustWrite(f,bp,size);
+	    }
+	else
+	    {
+    	    dyStringAppendN(dy,bp,size);
+	    }
+	p->size+=size;
+	if (p->size > MAXDATASIZE)
+	    errAbort("max data size allowable for upload in MIME exceeded %llu",(unsigned long long)MAXDATASIZE);
+	    
+	
+	if (b->eop && b->i == b->eop)  /* end of part */
+	    {
+	    break;
+	    }
+	if (b->i == b->eoi && b->eoi < b->eom) /* end of data */
+	    {
+	    break;
+	    }
+	moreMimeBuf(b);
+	}
+    if (dy)
+	{
+	p->data=needLargeMem(dy->stringSize+1);
+	memcpy(p->data,dy->string,dy->stringSize);
+	p->data[dy->stringSize] = 0;
+    	freeDyString(&dy);
+	}
+    if (f)
+	carefulClose(&f);
+
+    //debug
+    //fprintf(stderr,"p->fileName=%s p->data=[%s]\n",p->fileName,p->data);
+
+    }
+
+return p;
+}
+
+
diff --git a/gbtools/src/blatSrc/lib/net.c b/gbtools/src/blatSrc/lib/net.c
new file mode 100644
index 0000000..c1085ef
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/net.c
@@ -0,0 +1,2076 @@
+/* net.c some stuff to wrap around net communications. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include <signal.h>
+#include <errno.h>
+#include <string.h>
+#include <sys/time.h>
+#include <pthread.h>
+#include "internet.h"
+#include "errAbort.h"
+#include "hash.h"
+#include "net.h"
+#include "linefile.h"
+#include "base64.h"
+#include "cheapcgi.h"
+#include "https.h"
+#include "sqlNum.h"
+#include "obscure.h"
+
+/* Brought errno in to get more useful error messages */
+extern int errno;
+
+static int netStreamSocket()
+/* Create a TCP/IP streaming socket.  Complain and return something
+ * negative if can't */
+{
+int sd = socket(AF_INET, SOCK_STREAM, 0);
+if (sd < 0)
+    warn("Couldn't make AF_INET socket.");
+return sd;
+}
+
+static int setSocketNonBlocking(int sd, boolean set)
+/* Use socket control flags to set O_NONBLOCK if set==TRUE,
+ * or clear it if set==FALSE.
+ * Return -1 if there are any errors, 0 if successful. */
+{
+long fcntlFlags;
+// Set or clear non-blocking
+if ((fcntlFlags = fcntl(sd, F_GETFL, NULL)) < 0) 
+    {
+    warn("Error fcntl(..., F_GETFL) (%s)", strerror(errno));
+    return -1;
+    }
+if (set)
+    fcntlFlags |= O_NONBLOCK;
+else
+    fcntlFlags &= (~O_NONBLOCK);
+if (fcntl(sd, F_SETFL, fcntlFlags) < 0) 
+    {
+    warn("Error fcntl(..., F_SETFL) (%s)", strerror(errno));
+    return -1;
+    }
+return 0;
+}
+
+int setReadWriteTimeouts(int sd, int seconds)
+/* Set read and write timeouts on socket sd 
+ * Return -1 if there are any errors, 0 if successful. */
+{
+struct timeval timeout;      
+timeout.tv_sec = seconds;
+timeout.tv_usec = 0;
+
+if (setsockopt(sd, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout, sizeof(timeout)) < 0)
+    {
+    warn("setsockopt failed setting socket receive timeout\n");
+    return -1;
+    }
+
+if (setsockopt(sd, SOL_SOCKET, SO_SNDTIMEO, (char *)&timeout, sizeof(timeout)) < 0)
+    {
+    warn("setsockopt failed setting socket send timeout\n");
+    return -1;
+    }
+return 0;
+}
+
+
+static struct timeval tvMinus(struct timeval a, struct timeval b)
+/* Return the result of a - b; this handles wrapping of milliseconds. 
+ * result.tv_usec will always be positive. 
+ * result.tv_sec will be negative if b > a. */
+{
+// subtract b from a.
+if (a.tv_usec < b.tv_usec)
+    {
+    a.tv_usec += 1000000;
+    a.tv_sec--;
+    }
+a.tv_usec -= b.tv_usec;
+a.tv_sec -= b.tv_sec;
+return a;
+}
+
+static int netConnectWithTimeout(char *hostName, int port, long msTimeout)
+/* In order to avoid a very long default timeout (several minutes) for hosts that will
+ * not answer the port, we are forced to connect non-blocking.
+ * After the connection has been established, we return to blocking mode.
+ * Also closes sd if error. */
+{
+int sd;
+struct sockaddr_in sai;		/* Some system socket info. */
+int res;
+fd_set mySet;
+
+if (hostName == NULL)
+    {
+    warn("NULL hostName in netConnect");
+    return -1;
+    }
+if (!internetFillInAddress(hostName, port, &sai))
+    return -1;
+if ((sd = netStreamSocket()) < 0)
+    return sd;
+
+// Set socket to nonblocking so we can manage our own timeout time.
+if (setSocketNonBlocking(sd, TRUE) < 0)
+    {
+    close(sd);
+    return -1;
+    }
+
+// Trying to connect with timeout
+res = connect(sd, (struct sockaddr*) &sai, sizeof(sai));
+if (res < 0)
+    {
+    if (errno == EINPROGRESS)
+	{
+	struct timeval startTime;
+	gettimeofday(&startTime, NULL);
+	struct timeval remainingTime;
+	remainingTime.tv_sec = (long) (msTimeout/1000);
+	remainingTime.tv_usec = (long) (((msTimeout/1000)-remainingTime.tv_sec)*1000000);
+	while (1) 
+	    {
+	    FD_ZERO(&mySet);
+	    FD_SET(sd, &mySet);
+	    // use tempTime (instead of using remainingTime directly) because on some platforms select() may modify the time val.
+	    struct timeval tempTime = remainingTime;
+	    res = select(sd+1, NULL, &mySet, &mySet, &tempTime);  
+	    if (res < 0) 
+		{
+		if (errno == EINTR)  // Ignore the interrupt 
+		    {
+                    // Subtract the elapsed time from remaining time since some platforms need this.
+		    struct timeval newTime;
+		    gettimeofday(&newTime, NULL);
+                    struct timeval elapsedTime = tvMinus(newTime, startTime);
+		    remainingTime = tvMinus(remainingTime, elapsedTime);
+		    if (remainingTime.tv_sec < 0)  // means our timeout has more than expired
+			{
+			remainingTime.tv_sec = 0;
+			remainingTime.tv_usec = 0;
+			}
+		    startTime = newTime;
+		    }
+		else
+		    {
+		    warn("Error in select() during TCP non-blocking connect %d - %s", errno, strerror(errno));
+		    close(sd);
+		    return -1;
+		    }
+		}
+	    else if (res > 0)
+		{
+		// Socket selected for write when it is ready
+		int valOpt;
+		socklen_t lon;
+                // But check the socket for any errors
+                lon = sizeof(valOpt);
+                if (getsockopt(sd, SOL_SOCKET, SO_ERROR, (void*) (&valOpt), &lon) < 0)
+                    {
+                    warn("Error in getsockopt() %d - %s", errno, strerror(errno));
+                    close(sd);
+                    return -1;
+                    }
+                // Check the value returned...
+                if (valOpt)
+                    {
+                    warn("Error in TCP non-blocking connect() %d - %s", valOpt, strerror(valOpt));
+                    close(sd);
+                    return -1;
+                    }
+		break;
+		}
+	    else
+		{
+		warn("TCP non-blocking connect() to %s timed-out in select() after %ld milliseconds - Cancelling!", hostName, msTimeout);
+		close(sd);
+		return -1;
+		}
+	    }
+	}
+    else
+	{
+	warn("TCP non-blocking connect() error %d - %s", errno, strerror(errno));
+	close(sd);
+	return -1;
+	}
+    }
+
+// Set to blocking mode again
+if (setSocketNonBlocking(sd, FALSE) < 0)
+    {
+    close(sd);
+    return -1;
+    }
+
+if (setReadWriteTimeouts(sd, DEFAULTREADWRITETTIMEOUTSEC) < 0)
+    {
+    close(sd);
+    return -1;
+    }
+
+return sd;
+
+}
+
+
+int netConnect(char *hostName, int port)
+/* Start connection with a server. */
+{
+return netConnectWithTimeout(hostName, port, DEFAULTCONNECTTIMEOUTMSEC); // 10 seconds connect timeout
+}
+
+int netMustConnect(char *hostName, int port)
+/* Start connection with server or die. */
+{
+int sd = netConnect(hostName, port);
+if (sd < 0)
+   noWarnAbort();
+return sd;
+}
+
+int netMustConnectTo(char *hostName, char *portName)
+/* Start connection with a server and a port that needs to be converted to integer */
+{
+if (!isdigit(portName[0]))
+    errAbort("netConnectTo: ports must be numerical, not %s", portName);
+return netMustConnect(hostName, atoi(portName));
+}
+
+
+int netAcceptingSocketFrom(int port, int queueSize, char *host)
+/* Create a socket that can accept connections from a 
+ * IP address on the current machine if the current machine
+ * has multiple IP addresses. */
+{
+struct sockaddr_in sai;
+int sd;
+int flag = 1;
+
+netBlockBrokenPipes();
+if ((sd = netStreamSocket()) < 0)
+    return sd;
+if (!internetFillInAddress(host, port, &sai))
+    return -1;
+if (setsockopt(sd, SOL_SOCKET, SO_REUSEADDR, &flag, sizeof(int)))
+    return -1;
+if (bind(sd, (struct sockaddr*)&sai, sizeof(sai)) == -1)
+    {
+    warn("Couldn't bind socket to %d: %s", port, strerror(errno));
+    close(sd);
+    return -1;
+    }
+listen(sd, queueSize);
+return sd;
+}
+
+int netAcceptingSocket(int port, int queueSize)
+/* Create a socket that can accept connections from
+ * anywhere. */
+{
+return netAcceptingSocketFrom(port, queueSize, NULL);
+}
+
+int netAccept(int sd)
+/* Accept incoming connection from socket descriptor. */
+{
+socklen_t fromLen;
+return accept(sd, NULL, &fromLen);
+}
+
+int netAcceptFrom(int acceptor, unsigned char subnet[4])
+/* Wait for incoming connection from socket descriptor
+ * from IP address in subnet.  Subnet is something
+ * returned from netParseSubnet or internetParseDottedQuad. 
+ * Subnet may be NULL. */
+{
+struct sockaddr_in sai;		/* Some system socket info. */
+ZeroVar(&sai);
+sai.sin_family = AF_INET;
+for (;;)
+    {
+    socklen_t addrSize = sizeof(sai);
+    int sd = accept(acceptor, (struct sockaddr *)&sai, &addrSize);
+    if (sd >= 0)
+	{
+	if (subnet == NULL)
+	    return sd;
+	else
+	    {
+	    unsigned char unpacked[4]; 
+	    internetUnpackIp(ntohl(sai.sin_addr.s_addr), unpacked);
+	    if (internetIpInSubnet(unpacked, subnet))
+		{
+		return sd;
+		}
+	    else
+		{
+		close(sd);
+		}
+	    }
+	}
+    }
+}
+
+FILE *netFileFromSocket(int socket)
+/* Wrap a FILE around socket.  This should be fclose'd
+ * and separately the socket close'd. */
+{
+FILE *f;
+if ((socket = dup(socket)) < 0)
+   errnoAbort("Couldn't dupe socket in netFileFromSocket");
+f = fdopen(socket, "r+");
+if (f == NULL)
+   errnoAbort("Couldn't fdopen socket in netFileFromSocket");
+return f;
+}
+
+static boolean plumberInstalled = FALSE;
+
+void netBlockBrokenPipes()
+/* Make it so a broken pipe doesn't kill us. */
+{
+if (!plumberInstalled)
+    {
+    signal(SIGPIPE, SIG_IGN);       /* Block broken pipe signals. */
+    plumberInstalled = TRUE;
+    }
+}
+
+ssize_t netReadAll(int sd, void *vBuf, ssize_t size)
+/* Read given number of bytes into buffer.
+ * Don't give up on first read! */
+{
+char *buf = vBuf;
+ssize_t totalRead = 0;
+int oneRead;
+
+if (!plumberInstalled)
+    netBlockBrokenPipes();
+while (totalRead < size)
+    {
+    oneRead = read(sd, buf + totalRead, size - totalRead);
+    if (oneRead < 0)
+	return oneRead;
+    if (oneRead == 0)
+        break;
+    totalRead += oneRead;
+    }
+return totalRead;
+}
+
+ssize_t netMustReadAll(int sd, void *vBuf, ssize_t size)
+/* Read given number of bytes into buffer or die.
+ * Don't give up if first read is short! */
+{
+ssize_t ret = netReadAll(sd, vBuf, size);
+if (ret < 0)
+    errnoAbort("Couldn't finish netReadAll");
+return ret;
+}
+
+static void notGoodSubnet(char *sns)
+/* Complain about subnet format. */
+{
+errAbort("'%s' is not a properly formatted subnet.  Subnets must consist of\n"
+         "one to three dot-separated numbers between 0 and 255", sns);
+}
+
+void netParseSubnet(char *in, unsigned char out[4])
+/* Parse subnet, which is a prefix of a normal dotted quad form.
+ * Out will contain 255's for the don't care bits. */
+{
+out[0] = out[1] = out[2] = out[3] = 255;
+if (in != NULL)
+    {
+    char *snsCopy = strdup(in);
+    char *words[5];
+    int wordCount, i;
+    wordCount = chopString(snsCopy, ".", words, ArraySize(words));
+    if (wordCount > 3 || wordCount < 1)
+        notGoodSubnet(in);
+    for (i=0; i<wordCount; ++i)
+	{
+	char *s = words[i];
+	int x;
+	if (!isdigit(s[0]))
+	    notGoodSubnet(in);
+	x = atoi(s);
+	if (x > 255)
+	    notGoodSubnet(in);
+	out[i] = x;
+	}
+    freez(&snsCopy);
+    }
+}
+
+static void parseByteRange(char *url, ssize_t *rangeStart, ssize_t *rangeEnd, boolean terminateAtByteRange)
+/* parse the byte range information from url */
+{
+char *x;
+/* default to no byte range specified */
+*rangeStart = -1;
+*rangeEnd = -1;
+x = strrchr(url, ';');
+if (x)
+    {
+    if (startsWith(";byterange=", x))
+	{
+	char *y=strchr(x, '=');
+	++y;
+	char *z=strchr(y, '-');
+	if (z)
+	    {
+	    ++z;
+	    if (terminateAtByteRange)
+		*x = 0;
+	    // TODO: use something better than atoll() ?
+	    *rangeStart = atoll(y); 
+	    if (z[0] != '\0')
+		*rangeEnd = atoll(z);
+	    }    
+	}
+    }
+
+}
+
+void netParseUrl(char *url, struct netParsedUrl *parsed)
+/* Parse a URL into components.   A full URL is made up as so:
+ *   http://user:password@hostName:port/file;byterange=0-499
+ * User and password may be cgi-encoded.
+ * This is set up so that the http:// and the port are optional. 
+ */
+{
+char *s, *t, *u, *v, *w;
+char buf[1024];
+
+/* Make local copy of URL. */
+if (strlen(url) >= sizeof(buf))
+    errAbort("Url too long: '%s'", url);
+strcpy(buf, url);
+url = buf;
+
+/* Find out protocol - default to http. */
+s = trimSpaces(url);
+s = stringIn("://", url);
+if (s == NULL)
+    {
+    strcpy(parsed->protocol, "http");
+    s = url;
+    }
+else
+    {
+    *s = 0;
+    tolowers(url);
+    safecpy(parsed->protocol, sizeof(parsed->protocol), url);
+    s += 3;
+    }
+
+/* Split off file part. */
+parsed->byteRangeStart = -1;  /* default to no byte range specified */
+parsed->byteRangeEnd = -1;
+u = strchr(s, '/');
+if (u == NULL)
+    strcpy(parsed->file, "/");
+else
+    {
+
+    parseByteRange(u, &parsed->byteRangeStart, &parsed->byteRangeEnd, TRUE);
+
+    if (sameWord(parsed->protocol,"http") ||
+        sameWord(parsed->protocol,"https"))
+	{
+	// http servers expect the URL request to be URL-encoded already.
+	/* need to encode spaces, but not ! other characters */
+	char *t=replaceChars(u," ","%20");
+	safecpy(parsed->file, sizeof(parsed->file), t);
+	freeMem(t);
+	}
+
+    *u = 0; // terminate the host:port string
+
+    if (sameWord(parsed->protocol,"ftp"))
+	{
+	++u; // that first slash is not considered part of the ftp path 
+	// decode now because the FTP server does NOT expect URL-encoding.
+	cgiDecodeFull(u,parsed->file,strlen(u));  // decodes %FF but not +
+	}
+
+    }
+
+/* Split off user part */
+v = strchr(s, '@');
+if (v == NULL)
+    {
+    if (sameWord(parsed->protocol,"http") ||
+        sameWord(parsed->protocol,"https"))
+	{
+	strcpy(parsed->user, "");
+	strcpy(parsed->password, "");
+	}
+    if (sameWord(parsed->protocol,"ftp"))
+	{
+	strcpy(parsed->user, "anonymous");
+	strcpy(parsed->password, "x at genome.ucsc.edu");
+	}
+    }
+else
+    {
+    *v = 0;
+    /* split off password part */
+    w = strchr(s, ':');
+    if (w == NULL)
+	{
+	safecpy(parsed->user, sizeof(parsed->user), s);
+	strcpy(parsed->password, "");
+	}
+    else
+	{
+	*w = 0;
+	safecpy(parsed->user, sizeof(parsed->user), s);
+	safecpy(parsed->password, sizeof(parsed->password), w+1);
+	}
+    
+    cgiDecode(parsed->user,parsed->user,strlen(parsed->user));
+    cgiDecode(parsed->password,parsed->password,strlen(parsed->password));
+    s = v+1;
+    }
+
+
+/* Save port if it's there.  If not default to 80. */
+t = strchr(s, ':');
+if (t == NULL)
+    {
+    if (sameWord(parsed->protocol,"http"))
+	strcpy(parsed->port, "80");
+    if (sameWord(parsed->protocol,"https"))
+	strcpy(parsed->port, "443");
+    if (sameWord(parsed->protocol,"ftp"))
+	strcpy(parsed->port, "21");
+    }
+else
+    {
+    *t++ = 0;
+    if (!isdigit(t[0]))
+	errAbort("Non-numeric port name %s", t);
+    safecpy(parsed->port, sizeof(parsed->port), t);
+    }
+
+/* What's left is the host. */
+safecpy(parsed->host, sizeof(parsed->host), s);
+}
+
+char *urlFromNetParsedUrl(struct netParsedUrl *npu)
+/* Build URL from netParsedUrl structure */
+{
+struct dyString *dy = newDyString(512);
+
+dyStringAppend(dy, npu->protocol);
+dyStringAppend(dy, "://");
+if (npu->user[0] != 0)
+    {
+    char *encUser = cgiEncode(npu->user);
+    dyStringAppend(dy, encUser);
+    freeMem(encUser);
+    if (npu->password[0] != 0)
+	{
+	dyStringAppend(dy, ":");
+	char *encPassword = cgiEncode(npu->password);
+	dyStringAppend(dy, encPassword);
+	freeMem(encPassword);
+	}
+    dyStringAppend(dy, "@");
+    }
+dyStringAppend(dy, npu->host);
+/* do not include port if it is the default */
+if (!(
+ (sameString(npu->protocol, "ftp"  ) && sameString("21", npu->port)) ||
+ (sameString(npu->protocol, "http" ) && sameString("80", npu->port)) ||
+ (sameString(npu->protocol, "https") && sameString("443",npu->port))
+    ))
+    {
+    dyStringAppend(dy, ":");
+    dyStringAppend(dy, npu->port);
+    }
+dyStringAppend(dy, npu->file);
+if (npu->byteRangeStart != -1)
+    {
+    dyStringPrintf(dy, ";byterange=%lld-", (long long)npu->byteRangeStart);
+    if (npu->byteRangeEnd != -1)
+	dyStringPrintf(dy, "%lld", (long long)npu->byteRangeEnd);
+    }
+
+/* Clean up and return handle. */
+return dyStringCannibalize(&dy);
+}
+
+int netWaitForData(int sd, int microseconds)
+/* Wait for descriptor to have some data to read, up to given number of
+ * microseconds.  Returns amount of data there or zero if timed out. */
+{
+struct timeval tv;
+fd_set set;
+int readyCount;
+
+for (;;)
+    {
+    if (microseconds >= 1000000)
+	{
+	tv.tv_sec = microseconds/1000000;
+	tv.tv_usec = microseconds%1000000;
+	}
+    else
+	{
+	tv.tv_sec = 0;
+	tv.tv_usec = microseconds;
+	}
+    FD_ZERO(&set);
+    FD_SET(sd, &set);
+    readyCount = select(sd+1, &set, NULL, NULL, &tv);
+    if (readyCount < 0) 
+	{
+	if (errno == EINTR)	/* Select interrupted, not timed out. */
+	    continue;
+    	else 
+    	    warn("select failure %s", strerror(errno));
+    	}
+    else
+	{
+    	return readyCount;	/* Zero readyCount indicates time out */
+	}
+    }
+}
+
+static boolean readReadyWait(int sd, int microseconds)
+/* Wait for descriptor to have some data to read, up to given number of
+ * number of microseconds.  Returns true if there is data, false if timed out. */
+{
+int readyCount = netWaitForData(sd, microseconds);
+return readyCount > 0;	/* Zero readyCount indicates time out */
+}
+
+static void sendFtpCommandOnly(int sd, char *cmd)
+/* send command to ftp server */
+{   
+mustWriteFd(sd, cmd, strlen(cmd));
+}
+
+#define NET_FTP_TIMEOUT 1000000
+
+static boolean receiveFtpReply(int sd, char *cmd, struct dyString **retReply, int *retCode)
+/* send command to ftp server and check resulting reply code, 
+ * warn and return FALSE if not desired reply.  If retReply is non-NULL, store reply text there. */
+{
+char *startLastLine = NULL;
+struct dyString *rs = newDyString(4*1024);
+while (1)
+    {
+    int readSize = 0;
+    while (1)
+	{
+	char buf[4*1024];
+	if (!readReadyWait(sd, NET_FTP_TIMEOUT))
+	    {
+	    warn("ftp server response timed out > %d microsec", NET_FTP_TIMEOUT);
+	    return FALSE;
+	    }
+	if ((readSize = read(sd, buf, sizeof(buf))) == 0)
+	    break;
+
+	dyStringAppendN(rs, buf, readSize);
+	if (endsWith(rs->string,"\n"))
+	    break;
+	}
+	
+    /* find the start of the last line in the buffer */
+    startLastLine = rs->string+strlen(rs->string)-1;
+    if (startLastLine >= rs->string)
+	if (*startLastLine == '\n') 
+	    --startLastLine;
+    while ((startLastLine >= rs->string) && (*startLastLine != '\n'))
+	--startLastLine;
+    ++startLastLine;
+	
+    if (strlen(startLastLine)>4)
+      if (
+	isdigit(startLastLine[0]) &&
+	isdigit(startLastLine[1]) &&
+	isdigit(startLastLine[2]) &&
+	startLastLine[3]==' ')
+	break;
+	
+    if (readSize == 0)
+	break;  // EOF
+    /* must be some text info we can't use, ignore it till we get status code */
+    }
+
+int reply = atoi(startLastLine);
+if ((reply < 200) || (reply > 399))
+    {
+    warn("ftp server error on cmd=[%s] response=[%s]",cmd,rs->string);
+    return FALSE;
+    }
+    
+if (retReply)
+    *retReply = rs;
+else
+    dyStringFree(&rs);
+if (retCode)
+    *retCode = reply;
+return TRUE;
+}
+
+static boolean sendFtpCommand(int sd, char *cmd, struct dyString **retReply, int *retCode)
+/* send command to ftp server and check resulting reply code, 
+ * warn and return FALSE if not desired reply.  If retReply is non-NULL, store reply text there. */
+{   
+sendFtpCommandOnly(sd, cmd);
+return receiveFtpReply(sd, cmd, retReply, retCode);
+}
+
+static int parsePasvPort(char *rs)
+/* parse PASV reply to get the port and return it */
+{
+char *words[7];
+int wordCount;
+char *rsStart = strchr(rs,'(');
+char *rsEnd = strchr(rs,')');
+int result = 0;
+rsStart++;
+*rsEnd=0;
+wordCount = chopString(rsStart, ",", words, ArraySize(words));
+if (wordCount != 6)
+    errAbort("PASV reply does not parse correctly");
+result = atoi(words[4])*256+atoi(words[5]);    
+return result;
+}    
+
+
+static long long parseFtpSIZE(char *rs)
+/* parse reply to SIZE and return it */
+{
+char *words[3];
+int wordCount;
+char *rsStart = rs;
+long long result = 0;
+wordCount = chopString(rsStart, " ", words, ArraySize(words));
+if (wordCount != 2)
+    errAbort("SIZE reply does not parse correctly");
+result = atoll(words[1]);    
+return result;
+}    
+
+
+static time_t parseFtpMDTM(char *rs)
+/* parse reply to MDTM and return it
+ * 200 YYYYMMDDhhmmss */
+{
+char *words[3];
+int wordCount = chopString(rs, " ", words, ArraySize(words));
+if (wordCount != 2)
+    errAbort("MDTM reply should have 2 words but has %d", wordCount);
+#define EXPECTED_MDTM_FORMAT "YYYYmmddHHMMSS"
+if (strlen(words[1]) < strlen(EXPECTED_MDTM_FORMAT))
+    errAbort("MDTM reply word [%s] shorter than " EXPECTED_MDTM_FORMAT, words[1]);
+// man strptime ->
+// "There should be whitespace or other alphanumeric characters between any two field descriptors."
+// There are no separators in the MDTM timestamp, so make a spread-out version for strptime:
+char spread[] = "YYYY mm dd HH MM SS";
+char *from = words[1];
+char *to = spread;
+*to++ = *from++;
+*to++ = *from++;
+*to++ = *from++;
+*to++ = *from++;
+*to++ = '-';
+*to++ = *from++;
+*to++ = *from++;
+*to++ = '-';
+*to++ = *from++;
+*to++ = *from++;
+*to++ = ' ';
+*to++ = *from++;
+*to++ = *from++;
+*to++ = ':';
+*to++ = *from++;
+*to++ = *from++;
+*to++ = ':';
+*to++ = *from++;
+*to++ = *from++;
+*to++ = 0;
+struct tm tm;
+if (strptime(spread, "%Y-%m-%d %H:%M:%S", &tm) == NULL)
+    errAbort("unable to parse MDTM string [%s]", spread);
+// Not set by strptime(); tells mktime() to determine whether daylight saving time is in effect:
+tm.tm_isdst = -1;
+time_t t = mktime(&tm);
+if (t == -1)
+    errAbort("mktime failed while parsing strptime'd MDTM string [%s]", words[1]);
+return t;
+}    
+
+
+static int openFtpControlSocket(char *host, int port, char *user, char *password)
+/* Open a socket to host,port; authenticate anonymous ftp; set type to I; 
+ * return socket desc or -1 if there was an error. */
+{
+int sd = netConnect(host, port);
+if (sd < 0)
+    return -1;
+
+/* First read the welcome msg */
+if (readReadyWait(sd, NET_FTP_TIMEOUT))
+    sendFtpCommand(sd, "", NULL, NULL);
+
+char cmd[256];
+int retCode = 0;
+safef(cmd,sizeof(cmd),"USER %s\r\n", user);
+if (!sendFtpCommand(sd, cmd, NULL, &retCode))
+    {
+    close(sd);
+    return -1;
+    }
+
+if (retCode == 331)
+    {
+    safef(cmd,sizeof(cmd),"PASS %s\r\n", password);
+    if (!sendFtpCommand(sd, cmd, NULL, NULL))
+	{
+	close(sd);
+	return -1;
+	}
+    }
+
+if (!sendFtpCommand(sd, "TYPE I\r\n", NULL, NULL))
+    {
+    close(sd);
+    return -1;
+    }
+/* 200 Type set to I */
+/* (send the data as binary, so can support compressed files) */
+return sd;
+}
+
+boolean netGetFtpInfo(char *url, long long *retSize, time_t *retTime)
+/* Return date in UTC and size of ftp url file */
+{
+/* Parse the URL and connect. */
+struct netParsedUrl npu;
+netParseUrl(url, &npu);
+if (!sameString(npu.protocol, "ftp"))
+    errAbort("netGetFtpInfo: url (%s) is not for ftp.", url);
+
+// TODO maybe remove this workaround where udc cache wants info on URL "/" ?
+if (sameString(npu.file,"/"))
+    {
+    *retSize = 0;
+    *retTime = time(NULL);
+    return TRUE;
+    }
+
+int sd = openFtpControlSocket(npu.host, atoi(npu.port), npu.user, npu.password);
+if (sd < 0)
+    return FALSE;
+char cmd[256];
+safef(cmd,sizeof(cmd),"SIZE %s\r\n", npu.file);
+struct dyString *rs = NULL;
+if (!sendFtpCommand(sd, cmd, &rs, NULL))
+    {
+    close(sd);
+    return FALSE;
+    }
+*retSize = parseFtpSIZE(rs->string);
+/* 200 12345 */
+dyStringFree(&rs);
+
+safef(cmd,sizeof(cmd),"MDTM %s\r\n", npu.file);
+if (!sendFtpCommand(sd, cmd, &rs, NULL))
+    {
+    close(sd);
+    return FALSE;
+    }
+*retTime = parseFtpMDTM(rs->string);
+/* 200 YYYYMMDDhhmmss */
+dyStringFree(&rs);
+close(sd);   
+return TRUE;
+}
+
+struct netConnectFtpParams
+/* params to pass to thread */
+{
+pthread_t thread;
+int pipefd[2];
+int sd;
+int sdata; 
+struct netParsedUrl npu;
+};
+
+static void *sendFtpDataToPipeThread(void *threadParams)
+/* This is to be executed by the child process after the fork in netGetOpenFtpSockets.
+ * It keeps the ftp control socket alive while reading from the ftp data socket
+ * and writing to the pipe to the parent process, which closes the ftp sockets
+ * and reads from the pipe. */
+{
+
+struct netConnectFtpParams *params = threadParams;
+
+pthread_detach(params->thread);  // this thread will never join back with it's progenitor
+
+char buf[32768];
+int rd = 0;
+long long dataPos = 0; 
+if (params->npu.byteRangeStart != -1)
+    dataPos = params->npu.byteRangeStart;
+while((rd = read(params->sdata, buf, 32768)) > 0) 
+    {
+    if (params->npu.byteRangeEnd != -1 && (dataPos + rd) > params->npu.byteRangeEnd)
+	rd = params->npu.byteRangeEnd - dataPos + 1;
+    int wt = write(params->pipefd[1], buf, rd);
+    if (wt == -1 && params->npu.byteRangeEnd != -1)
+	{
+	// errAbort in child process is messy; let reader complain if
+	// trouble.  If byterange was open-ended, we will hit this point
+	// when the parent stops reading and closes the pipe.
+	errnoWarn("error writing ftp data to pipe");
+	break;
+	}
+    dataPos += rd;
+    if (params->npu.byteRangeEnd != -1 && dataPos >= params->npu.byteRangeEnd)
+	break;	    
+    }
+if (rd == -1)
+    // Again, avoid abort in child process.
+    errnoWarn("error reading ftp socket");
+close(params->pipefd[1]);  /* we are done with it */
+close(params->sd);
+close(params->sdata);
+return NULL;
+}
+
+static int netGetOpenFtpSockets(char *url, int *retCtrlSd)
+/* Return a socket descriptor for url data (url can end in ";byterange:start-end",
+ * or -1 if error.
+ * If retCtrlSd is non-null, keep the control socket alive and set *retCtrlSd.
+ * Otherwise, create a pipe and fork to keep control socket alive in the child 
+ * process until we are done fetching data. */
+{
+char cmd[256];
+
+/* Parse the URL and connect. */
+struct netParsedUrl npu;
+netParseUrl(url, &npu);
+if (!sameString(npu.protocol, "ftp"))
+    errAbort("netGetOpenFtpSockets: url (%s) is not for ftp.", url);
+int sd = openFtpControlSocket(npu.host, atoi(npu.port), npu.user, npu.password);
+if (sd == -1)
+    return -1;
+
+struct dyString *rs = NULL;
+if (!sendFtpCommand(sd, "PASV\r\n", &rs, NULL))
+    {
+    close(sd);
+    return -1;
+    }
+/* 227 Entering Passive Mode (128,231,210,81,222,250) */
+
+if (npu.byteRangeStart != -1)
+    {
+    safef(cmd,sizeof(cmd),"REST %lld\r\n", (long long) npu.byteRangeStart);
+    if (!sendFtpCommand(sd, cmd, NULL, NULL))
+	{
+	close(sd);
+	return -1;
+	}
+    }
+
+/* RETR for files, LIST for directories ending in / */
+safef(cmd,sizeof(cmd),"%s %s\r\n",((npu.file[strlen(npu.file)-1]) == '/') ? "LIST" : "RETR", npu.file);
+sendFtpCommandOnly(sd, cmd);
+
+int sdata = netConnect(npu.host, parsePasvPort(rs->string));
+dyStringFree(&rs);
+if (sdata < 0)
+    {
+    close(sd);
+    return -1;
+    }
+
+int secondsWaited = 0;
+while (TRUE)
+    {
+    if (secondsWaited >= 10)
+	{
+	warn("ftp server error on cmd=[%s] timed-out waiting for data or error", cmd);
+	close(sd);
+	close(sdata);
+	return -1;
+	}
+    if (readReadyWait(sdata, NET_FTP_TIMEOUT))
+	break;   // we have some data
+    if (readReadyWait(sd, 0)) /* wait in microsec */
+	{
+	// this can see an error like bad filename
+	if (!receiveFtpReply(sd, cmd, NULL, NULL))
+	    {
+	    close(sd);
+	    close(sdata);
+	    return -1;
+	    }
+	}
+    ++secondsWaited;
+    }
+
+if (retCtrlSd != NULL)
+    {
+    *retCtrlSd = sd;
+    return sdata;
+    }
+else
+    {
+    /* Because some FTP servers will kill the data connection
+     * as soon as the control connection closes,
+     * we have to develop a workaround using a partner process. */
+    fflush(stdin);
+    fflush(stdout);
+    fflush(stderr);
+
+    struct netConnectFtpParams *params;
+    AllocVar(params);
+    params->sd = sd;
+    params->sdata = sdata;
+    params->npu = npu;
+    /* make a pipe (fds go in pipefd[0] and pipefd[1])  */
+    if (pipe(params->pipefd) != 0)
+	errAbort("netGetOpenFtpSockets: failed to create pipe: %s", strerror(errno));
+    int rc;
+    rc = pthread_create(&params->thread, NULL, sendFtpDataToPipeThread, (void *)params);
+    if (rc)
+	{
+	errAbort("Unexpected error %d from pthread_create(): %s",rc,strerror(rc));
+	}
+
+    return params->pipefd[0];
+    }
+}
+
+
+int connectNpu(struct netParsedUrl npu, char *url)
+/* Connect using NetParsedUrl. */
+{
+int sd = -1;
+if (sameString(npu.protocol, "http"))
+    {
+    sd = netConnect(npu.host, atoi(npu.port));
+    }
+else if (sameString(npu.protocol, "https"))
+    {
+    sd = netConnectHttps(npu.host, atoi(npu.port));
+    }
+else
+    {
+    errAbort("netHttpConnect: url (%s) is not for http.", url);
+    return -1;  /* never gets here, fixes compiler complaint */
+    }
+return sd;
+}
+
+void setAuthorization(struct netParsedUrl npu, char *authHeader, struct dyString *dy)
+/* Set the specified authorization header with BASIC auth base64-encoded user and password */
+{
+if (!sameString(npu.user,""))
+    {
+    char up[256];
+    char *b64up = NULL;
+    safef(up, sizeof(up), "%s:%s", npu.user, npu.password);
+    b64up = base64Encode(up, strlen(up));
+    dyStringPrintf(dy, "%s: Basic %s\r\n", authHeader, b64up);
+    freez(&b64up);
+    }
+}
+
+int netHttpConnect(char *url, char *method, char *protocol, char *agent, char *optionalHeader)
+/* Parse URL, connect to associated server on port, and send most of
+ * the request to the server.  If specified in the url send user name
+ * and password too.  Typically the "method" will be "GET" or "POST"
+ * and the agent will be the name of your program or
+ * library. optionalHeader may be NULL or contain additional header
+ * lines such as cookie info. 
+ * Proxy support via hg.conf httpProxy or env var http_proxy
+ * Return data socket, or -1 if error.*/
+{
+struct netParsedUrl npu;
+struct netParsedUrl pxy;
+struct dyString *dy = newDyString(512);
+int sd = -1;
+/* Parse the URL and connect. */
+netParseUrl(url, &npu);
+
+char *proxyUrl = getenv("http_proxy");
+
+if (proxyUrl)
+    {
+    netParseUrl(proxyUrl, &pxy);
+    sd = connectNpu(pxy, url);
+    }
+else
+    {
+    sd = connectNpu(npu, url);
+    }
+if (sd < 0)
+    return -1;
+
+/* Ask remote server for a file. */
+char *urlForProxy = NULL;
+if (proxyUrl)
+    {
+    /* trim off the byterange part at the end of url because proxy does not understand it. */
+    urlForProxy = cloneString(url);
+    char *x = strrchr(urlForProxy, ';');
+    if (x && startsWith(";byterange=", x))
+	*x = 0;
+    }
+dyStringPrintf(dy, "%s %s %s\r\n", method, proxyUrl ? urlForProxy : npu.file, protocol);
+freeMem(urlForProxy);
+dyStringPrintf(dy, "User-Agent: %s\r\n", agent);
+/* do not need the 80 since it is the default */
+if ((sameString(npu.protocol, "http" ) && sameString("80", npu.port)) ||
+    (sameString(npu.protocol, "https") && sameString("443",npu.port)))
+    dyStringPrintf(dy, "Host: %s\r\n", npu.host);
+else
+    dyStringPrintf(dy, "Host: %s:%s\r\n", npu.host, npu.port);
+setAuthorization(npu, "Authorization", dy);
+if (proxyUrl)
+    setAuthorization(pxy, "Proxy-Authorization", dy);
+dyStringAppend(dy, "Accept: */*\r\n");
+if (npu.byteRangeStart != -1)
+    {
+    if (npu.byteRangeEnd != -1)
+	dyStringPrintf(dy, "Range: bytes=%lld-%lld\r\n"
+		       , (long long)npu.byteRangeStart
+		       , (long long)npu.byteRangeEnd);
+    else
+	dyStringPrintf(dy, "Range: bytes=%lld-\r\n"
+		       , (long long)npu.byteRangeStart);
+    }
+
+if (optionalHeader)
+    dyStringAppend(dy, optionalHeader);
+
+/* finish off the header with final blank line */
+dyStringAppend(dy, "\r\n");
+
+mustWriteFd(sd, dy->string, dy->stringSize);
+
+/* Clean up and return handle. */
+dyStringFree(&dy);
+return sd;
+}
+
+
+int netOpenHttpExt(char *url, char *method, char *optionalHeader)
+/* Return a file handle that will read the url.  optionalHeader
+ * may by NULL or may contain cookies and other info.  */
+{
+return netHttpConnect(url, method, "HTTP/1.0", "genome.ucsc.edu/net.c", optionalHeader);
+}
+
+static int netGetOpenHttp(char *url)
+/* Return a file handle that will read the url.  */
+{
+return netOpenHttpExt(url, "GET", NULL);
+}
+
+int netUrlHeadExt(char *url, char *method, struct hash *hash)
+/* Go get head and return status.  Return negative number if
+ * can't get head. If hash is non-null, fill it with header
+ * lines with upper cased keywords for case-insensitive lookup, 
+ * including hopefully CONTENT-TYPE: . */
+{
+int sd = netOpenHttpExt(url, method, NULL);
+int status = EIO;
+if (sd >= 0)
+    {
+    char *line, *word;
+    struct lineFile *lf = lineFileAttach(url, TRUE, sd);
+
+    if (lineFileNext(lf, &line, NULL))
+	{
+	if (startsWith("HTTP/", line))
+	    {
+	    word = nextWord(&line);
+	    word = nextWord(&line);
+	    if (word != NULL && isdigit(word[0]))
+	        {
+		status = atoi(word);
+		if (hash != NULL)
+		    {
+		    while (lineFileNext(lf, &line, NULL))
+		        {
+			word = nextWord(&line);
+			if (word == NULL)
+			    break;
+			hashAdd(hash, strUpper(word), cloneString(skipLeadingSpaces(line)));
+			}
+		    }
+		}
+	    }
+	}
+    lineFileClose(&lf);
+    }
+else
+    status = errno;
+return status;
+}
+
+
+int netUrlHead(char *url, struct hash *hash)
+/* Go get head and return status.  Return negative number if
+ * can't get head. If hash is non-null, fill it with header
+ * lines with upper cased keywords for case-insensitive lookup, 
+ * including hopefully CONTENT-TYPE: . */
+{
+return netUrlHeadExt(url, "HEAD", hash);
+}
+
+
+long long netUrlSizeByRangeResponse(char *url)
+/* Use byteRange as a work-around alternate method to get file size (content-length).  
+ * Return negative number if can't get. */
+{
+long long retVal = -1;
+char rangeUrl[2048];
+safef(rangeUrl, sizeof(rangeUrl), "%s;byterange=0-0", url);
+struct hash *hash = newHash(0);
+int status = netUrlHeadExt(rangeUrl, "GET", hash);
+if (status == 206)
+    { 
+    char *rangeString = hashFindValUpperCase(hash, "Content-Range:");
+    if (rangeString)
+	{
+ 	/* input pattern: Content-Range: bytes 0-99/2738262 */
+	char *slash = strchr(rangeString,'/');
+	if (slash)
+	    {
+	    retVal = atoll(slash+1);
+	    }
+	}
+    }
+hashFree(&hash);
+return retVal;
+}
+
+
+int netUrlOpenSockets(char *url, int *retCtrlSocket)
+/* Return socket descriptor (low-level file handle) for read()ing url data,
+ * or -1 if error. 
+ * If retCtrlSocket is non-NULL and url is FTP, set *retCtrlSocket
+ * to the FTP control socket which is left open for a persistent connection.
+ * close(result) (and close(*retCtrlSocket) if applicable) when done. 
+ * If url is missing :// then it's just treated as a file. */
+{
+if (stringIn("://", url) == NULL)
+    return open(url, O_RDONLY);
+else
+    {
+    if (startsWith("http://",url) || startsWith("https://",url))
+	return netGetOpenHttp(url);
+    else if (startsWith("ftp://",url))
+	return netGetOpenFtpSockets(url, retCtrlSocket);
+    else    
+	errAbort("Sorry, can only netUrlOpen http, https and ftp currently, not '%s'", url);
+    }
+return -1;    
+}
+
+int netUrlOpen(char *url)
+/* Return socket descriptor (low-level file handle) for read()ing url data,
+ * or -1 if error.  Just close(result) when done. */
+{
+return netUrlOpenSockets(url, NULL);
+}
+
+struct dyString *netSlurpFile(int sd)
+/* Slurp file into dynamic string and return. */
+{
+char buf[4*1024];
+int readSize;
+struct dyString *dy = newDyString(4*1024);
+
+/* Slurp file into dy and return. */
+while ((readSize = read(sd, buf, sizeof(buf))) > 0)
+    dyStringAppendN(dy, buf, readSize);
+return dy;
+}
+
+struct dyString *netSlurpUrl(char *url)
+/* Go grab all of URL and return it as dynamic string. */
+{
+int sd = netUrlOpen(url);
+if (sd < 0)
+    errAbort("netSlurpUrl: failed to open socket for [%s]", url);
+struct dyString *dy = netSlurpFile(sd);
+close(sd);
+return dy;
+}
+
+static void parseContentRange(char *x, ssize_t *rangeStart, ssize_t *rangeEnd)
+/* parse the content range information from response header value 
+	"bytes 763400000-763400112/763400113"
+ */
+{
+/* default to no byte range specified */
+*rangeStart = -1;
+*rangeEnd = -1;
+if (startsWith("bytes ", x))
+    {
+    char *y=strchr(x, ' ');
+    ++y;
+    char *z=strchr(y, '-');
+    if (z)
+	{
+	++z;
+	// TODO: use something better than atoll() ?
+	*rangeStart = atoll(y); 
+	if (z[0] != '\0')
+	    *rangeEnd = atoll(z);
+	}    
+    }
+
+}
+
+
+boolean netSkipHttpHeaderLinesWithRedirect(int sd, char *url, char **redirectedUrl)
+/* Skip http header lines. Return FALSE if there's a problem.
+ * The input is a standard sd or fd descriptor.
+ * This is meant to be able work even with a re-passable stream handle,
+ * e.g. can pass it to the pipes routines, which means we can't
+ * attach a linefile since filling its buffer reads in more than just the http header.
+ * Handles 300, 301, 302, 303, 307 http redirects by setting *redirectedUrl to
+ * the new location. */
+{
+char buf[2000];
+char *line = buf;
+int maxbuf = sizeof(buf);
+int i=0;
+char c = ' ';
+int nread = 0;
+char *sep = NULL;
+char *headerName = NULL;
+char *headerVal = NULL;
+boolean redirect = FALSE;
+boolean byteRangeUsed = (strstr(url,";byterange=") != NULL);
+ssize_t byteRangeStart = -1;
+ssize_t byteRangeEnd = -1;
+boolean foundContentRange = FALSE;
+ssize_t contentRangeStart = -1;
+ssize_t contentRangeEnd = -1;
+
+boolean mustUseProxy = FALSE;  /* User must use proxy 305 error*/
+char *proxyLocation = NULL;
+boolean mustUseProxyAuth = FALSE;  /* User must use proxy authentication 407 error*/
+
+if (byteRangeUsed)
+    {
+    parseByteRange(url, &byteRangeStart, &byteRangeEnd, FALSE);
+    }
+
+while(TRUE)
+    {
+    i = 0;
+    while (TRUE)
+	{
+	nread = read(sd, &c, 1);  /* one char at a time, but http headers are small */
+	if (nread != 1)
+	    {
+	    if (nread == -1)
+    		warn("Error (%s) reading http header on %s", strerror(errno), url);
+	    else if (nread == 0)
+    		warn("Error unexpected end of input reading http header on %s", url);
+	    else
+    		warn("Error reading http header on %s", url);
+	    return FALSE;  /* err reading descriptor */
+	    }
+	if (c == 10)
+	    break;
+	if (c != 13)
+    	    buf[i++] = c;
+	if (i >= maxbuf)
+	    {
+	    warn("http header line too long > %d chars.",maxbuf);
+	    return FALSE;
+	    }
+	}
+    buf[i] = 0;  /* add string terminator */
+
+    if (sameString(line,""))
+	{
+	break; /* End of Header found */
+	}
+    if (startsWith("HTTP/", line))
+        {
+	char *version, *code;
+	version = nextWord(&line);
+	code = nextWord(&line);
+	if (code == NULL)
+	    {
+	    warn("Strange http header on %s", url);
+	    return FALSE;
+	    }
+	if (startsWith("30", code) && isdigit(code[2])
+	    && ((code[2] >= '0' && code[2] <= '3') || code[2] == '7') && code[3] == 0)
+	    {
+	    redirect = TRUE;
+	    }
+	else if (sameString(code, "305"))
+	    {
+	    mustUseProxy = TRUE;
+	    }
+	else if (sameString(code, "407"))
+	    {
+	    mustUseProxyAuth = TRUE;
+	    }
+	else if (byteRangeUsed 
+	    /* hack for Apache bug 2.2.20 and 2.2.21 2011-10-21 should be OK to remove after one year. */
+		&& !(sameString(code, "200") && byteRangeStart == 0 && byteRangeEnd == -1))  
+	    {
+	    if (!sameString(code, "206"))
+		{
+		if (sameString(code, "200"))
+		    warn("Byte-range request was ignored by server. ");
+		warn("Expected Partial Content 206. %s: %s %s", url, code, line);
+		return FALSE;
+		}
+	    }
+	else if (sameString(code, "404"))
+	    {
+	    warn("404 file not found on %s", url);
+	    return FALSE;
+	    }
+	else if (!sameString(code, "200"))
+	    {
+	    warn("Expected 200 %s: %s %s", url, code, line);
+	    return FALSE;
+	    }
+	line = buf;  /* restore it */
+	}
+    headerName = line;
+    sep = strchr(line,':');
+    if (sep)
+	{
+	*sep = 0;
+	headerVal = skipLeadingSpaces(++sep);
+	}
+    else
+	{
+	headerVal = NULL;
+	}
+    if (sameWord(headerName,"Location"))
+	{
+	if (redirect)
+	    *redirectedUrl = cloneString(headerVal);
+	if (mustUseProxy)
+	    proxyLocation = cloneString(headerVal);
+	}
+    if (sameWord(headerName,"Content-Range"))
+	{
+	if (byteRangeUsed)
+	    {
+	    foundContentRange = TRUE;
+	    parseContentRange(headerVal, &contentRangeStart, &contentRangeEnd);	
+    	    if ((contentRangeStart != byteRangeStart) ||
+		(byteRangeEnd != -1 && (contentRangeEnd != byteRangeEnd)))
+		{
+		char bre[256];
+		safef(bre, sizeof bre, "%lld", (long long)byteRangeEnd);
+		if (byteRangeEnd == -1)
+		    bre[0] = 0;
+		warn("Found Content-Range: %s. Expected bytes %lld-%s. Improper caching of 206 reponse byte-ranges?",
+		    headerVal, (long long) byteRangeStart, bre);
+    		return FALSE;
+		}
+	    }
+	}
+    }
+if (mustUseProxy ||  mustUseProxyAuth)
+    {
+    warn("%s: %s error. Use Proxy%s. Location = %s", url, 
+	mustUseProxy ? "" : " Authentication", 
+	mustUseProxy ? "305" : "407", 
+	proxyLocation ? proxyLocation : "not given");
+    return FALSE;
+    }
+if (byteRangeUsed && !foundContentRange
+	    /* hack for Apache bug 2.2.20 and 2.2.21 2011-10-21 should be OK to remove after one year. */
+		&& !(byteRangeStart == 0 && byteRangeEnd == -1))  
+    {
+    char bre[256];
+    safef(bre, sizeof bre, "%lld", (long long)byteRangeEnd);
+    if (byteRangeEnd == -1)
+	bre[0] = 0;
+    warn("Expected response header Content-Range: %lld-%s", (long long) byteRangeStart, bre);
+    return FALSE;
+    }
+
+return TRUE;
+}
+
+
+boolean netSkipHttpHeaderLinesHandlingRedirect(int sd, char *url, int *redirectedSd, char **redirectedUrl)
+/* Skip http headers lines, returning FALSE if there is a problem.  Generally called as
+ *    netSkipHttpHeaderLine(sd, url, &sd, &url);
+ * where sd is a socket (file) opened with netUrlOpen(url), and url is in dynamic memory.
+ * If the http header indicates that the file has moved, then it will update the *redirectedSd and
+ * *redirectedUrl with the new socket and URL, first closing sd.
+ * If for some reason you want to detect whether the forwarding has occurred you could
+ * call this as:
+ *    char *newUrl = NULL;
+ *    int newSd = 0;
+ *    netSkipHttpHeaderLine(sd, url, &newSd, &newUrl);
+ *    if (newUrl != NULL)
+ *          // Update sd with newSd, free url if appropriate and replace it with newUrl, etc.
+ *          //  free newUrl when finished.
+ * This routine handles up to 5 steps of redirection.
+ * The logic to this routine is also complicated a little to make it work in a pipe, which means we
+ * can't attach a lineFile since filling the lineFile buffer reads in more than just the http header. */
+{
+int redirectCount = 0;
+while (TRUE)
+    {
+    /* url needed for err msgs, and to return redirect location */
+    char *newUrl = NULL;
+    boolean success = netSkipHttpHeaderLinesWithRedirect(sd, url, &newUrl);
+    if (success && !newUrl) /* success after 0 to 5 redirects */
+        {
+	if (redirectCount > 0)
+	    {
+	    *redirectedSd = sd;
+	    *redirectedUrl = url;
+	    }
+	else
+	    {
+	    *redirectedSd = -1;
+	    *redirectedUrl = NULL;
+	    }
+	return TRUE;
+	}
+    close(sd);
+    if (redirectCount > 0)
+	freeMem(url);
+    if (success)
+	{
+	/* we have a new url to try */
+	++redirectCount;
+	if (redirectCount > 5)
+	    {
+	    warn("code 30x redirects: exceeded limit of 5 redirects, %s", newUrl);
+	    success = FALSE;
+	    }
+	else if (!startsWith("http://",newUrl) 
+              && !startsWith("https://",newUrl))
+	    {
+	    warn("redirected to non-http(s): %s", newUrl);
+	    success = FALSE;
+	    }
+	else 
+	    {
+	    struct netParsedUrl npu, newNpu;
+	    /* Parse the old URL to make parts available for graft onto the redirected url. */
+	    /* This makes redirection work with byterange urls and user:password@ */
+	    netParseUrl(url, &npu);
+	    netParseUrl(newUrl, &newNpu);
+	    boolean updated = FALSE;
+	    if (npu.byteRangeStart != -1)
+		{
+		newNpu.byteRangeStart = npu.byteRangeStart;
+		newNpu.byteRangeEnd = npu.byteRangeEnd;
+		updated = TRUE;
+		}
+	    if ((npu.user[0] != 0) && (newNpu.user[0] == 0))
+		{
+		safecpy(newNpu.user,     sizeof newNpu.user,     npu.user);
+		safecpy(newNpu.password, sizeof newNpu.password, npu.password);
+		updated = TRUE;
+		}
+	    if (updated)
+		{
+		freeMem(newUrl);
+		newUrl = urlFromNetParsedUrl(&newNpu);
+		}
+	    sd = netUrlOpen(newUrl);
+	    if (sd < 0)
+		{
+		warn("Couldn't open %s", newUrl);
+		success = FALSE;
+		}
+	    }
+	}
+    if (!success)
+	{  /* failure after 0 to 5 redirects */
+	if (redirectCount > 0)
+	    freeMem(newUrl);
+	return FALSE;
+	}
+    url = newUrl;
+    }
+return FALSE;
+}
+
+struct lineFile *netLineFileMayOpen(char *url)
+/* Return a lineFile attached to url. http skips header.
+ * Supports some compression formats.  Prints warning message, but
+ * does not abort, just returning NULL if there's a problem. */
+{
+int sd = netUrlOpen(url);
+if (sd < 0)
+    {
+    warn("Couldn't open %s", url);
+    return NULL;
+    }
+else
+    {
+    struct lineFile *lf = NULL;
+    char *newUrl = NULL;
+    int newSd = 0;
+    if (startsWith("http://",url) || startsWith("https://",url))
+	{  
+	if (!netSkipHttpHeaderLinesHandlingRedirect(sd, url, &newSd, &newUrl))
+	    {
+	    return NULL;
+	    }
+	if (newUrl != NULL)
+	    {
+    	    /*  Update sd with newSd, replace it with newUrl, etc. */
+	    sd = newSd;
+	    url = newUrl;
+	    }
+	}
+    char *urlDecoded = cloneString(url);
+    cgiDecode(url, urlDecoded, strlen(url));
+    boolean isCompressed =
+	(endsWith(urlDecoded,".gz") ||
+   	 endsWith(urlDecoded,".Z")  ||
+	 endsWith(urlDecoded,".bz2"));
+    freeMem(urlDecoded);
+    if (isCompressed)
+	{
+	lf = lineFileDecompressFd(url, TRUE, sd);
+           /* url needed only for compress type determination */
+	}
+    else
+	{
+	lf = lineFileAttach(url, TRUE, sd);
+	}
+    if (newUrl) 
+	freeMem(newUrl); 
+    return lf;
+    }
+}
+
+int netUrlMustOpenPastHeader(char *url)
+/* Get socket descriptor for URL.  Process header, handling any forwarding and
+ * the like.  Do errAbort if there's a problem, which includes anything but a 200
+ * return from http after forwarding. */
+{
+int sd = netUrlOpen(url);
+if (sd < 0)
+    noWarnAbort();
+int newSd = 0;
+if (startsWith("http://",url) || startsWith("https://",url))
+    {  
+    char *newUrl = NULL;
+    if (!netSkipHttpHeaderLinesHandlingRedirect(sd, url, &newSd, &newUrl))
+	noWarnAbort();
+    if (newUrl != NULL)
+	{
+	sd = newSd;
+	freeMem(newUrl); 
+	}
+    }
+return sd;
+}
+
+struct lineFile *netLineFileSilentOpen(char *url)
+/* Open a lineFile on a URL.  Just return NULL without any user
+ * visible warning message if there's a problem. */
+{
+pushSilentWarnHandler();
+struct lineFile *lf = netLineFileMayOpen(url);
+popWarnHandler();
+return lf;
+}
+
+char *netReadTextFileIfExists(char *url)
+/* Read entire URL and return it as a string.  URL should be text (embedded zeros will be
+ * interpreted as end of string).  If the url doesn't exist or has other problems,
+ * returns NULL. */
+{
+struct lineFile *lf = netLineFileSilentOpen(url);
+if (lf == NULL)
+    return NULL;
+char *text = lineFileReadAll(lf);
+lineFileClose(&lf);
+return text;
+}
+
+struct lineFile *netLineFileOpen(char *url)
+/* Return a lineFile attached to url.  This one
+ * will skip any headers.   Free this with
+ * lineFileClose(). */
+{
+struct lineFile *lf = netLineFileMayOpen(url);
+if (lf == NULL)
+    noWarnAbort();
+return lf;
+}
+
+boolean netSendString(int sd, char *s)
+/* Send a string down a socket - length byte first. */
+{
+int length = strlen(s);
+UBYTE len;
+
+if (length > 255)
+    errAbort("Trying to send a string longer than 255 bytes (%d bytes)", length);
+len = length;
+if (write(sd, &len, 1)<0)
+    {
+    warn("Couldn't send string to socket");
+    return FALSE;
+    }
+if (write(sd, s, length)<0)
+    {
+    warn("Couldn't send string to socket");
+    return FALSE;
+    }
+return TRUE;
+}
+
+boolean netSendLongString(int sd, char *s)
+/* Send a long string down socket: two bytes for length. */
+{
+unsigned length = strlen(s);
+UBYTE b[2];
+
+if (length >= 64*1024)
+    {
+    warn("Trying to send a string longer than 64k bytes (%d bytes)", length);
+    return FALSE;
+    }
+b[0] = (length>>8);
+b[1] = (length&0xff);
+if (write(sd, b, 2) < 0)
+    {
+    warn("Couldn't send long string to socket");
+    return FALSE;
+    }
+if (write(sd, s, length)<0)
+    {
+    warn("Couldn't send long string to socket");
+    return FALSE;
+    }
+return TRUE;
+}
+
+boolean netSendHugeString(int sd, char *s)
+/* Send a long string down socket: four bytes for length. */
+{
+unsigned long length = strlen(s);
+unsigned long l = length;
+UBYTE b[4];
+int i;
+for (i=3; i>=0; --i)
+    {
+    b[i] = l & 0xff;
+    l >>= 8;
+    }
+if (write(sd, b, 4) < 0)
+    {
+    warn("Couldn't send huge string to socket");
+    return FALSE;
+    }
+if (write(sd, s, length) < 0)
+    {
+    warn("Couldn't send huge string to socket");
+    return FALSE;
+    }
+return TRUE;
+}
+
+
+char *netGetString(int sd, char buf[256])
+/* Read string into buf and return it.  If buf is NULL
+ * an internal buffer will be used. Print warning message
+ * and return NULL if any problem. */
+{
+static char sbuf[256];
+UBYTE len = 0;
+int length;
+int sz;
+if (buf == NULL) buf = sbuf;
+sz = netReadAll(sd, &len, 1);
+if (sz == 0)
+    return NULL;
+if (sz < 0)
+    {
+    warn("Couldn't read string length");
+    return NULL;
+    }
+length = len;
+if (length > 0)
+    if (netReadAll(sd, buf, length) < 0)
+	{
+	warn("Couldn't read string body");
+	return NULL;
+	}
+buf[length] = 0;
+return buf;
+}
+
+char *netGetLongString(int sd)
+/* Read string and return it.  freeMem
+ * the result when done. */
+{
+UBYTE b[2];
+char *s = NULL;
+int length = 0;
+int sz;
+b[0] = b[1] = 0;
+sz = netReadAll(sd, b, 2);
+if (sz == 0)
+    return NULL;
+if (sz < 0)
+    {
+    warn("Couldn't read long string length");
+    return NULL;
+    }
+length = (b[0]<<8) + b[1];
+s = needMem(length+1);
+if (length > 0)
+    if (netReadAll(sd, s, length) < 0)
+	{
+	warn("Couldn't read long string body");
+	return NULL;
+	}
+s[length] = 0;
+return s;
+}
+
+char *netGetHugeString(int sd)
+/* Read string and return it.  freeMem
+ * the result when done. */
+{
+UBYTE b[4];
+char *s = NULL;
+unsigned long length = 0;
+int sz, i;
+sz = netReadAll(sd, b, 4);
+if (sz == 0)
+    return NULL;
+if (sz < 4)
+    {
+    warn("Couldn't read huge string length");
+    return NULL;
+    }
+for (i=0; i<4; ++i)
+    {
+    length <<= 8;
+    length += b[i];
+    }
+s = needMem(length+1);
+if (length > 0)
+    {
+    if (netReadAll(sd, s, length) < 0)
+	{
+	warn("Couldn't read huge string body");
+	return NULL;
+	}
+    }
+s[length] = 0;
+return s;
+}
+
+
+char *netRecieveString(int sd, char buf[256])
+/* Read string into buf and return it.  If buf is NULL
+ * an internal buffer will be used. Abort if any problem. */
+{
+char *s = netGetString(sd, buf);
+if (s == NULL)
+     noWarnAbort();   
+return s;
+}
+
+char *netRecieveLongString(int sd)
+/* Read string and return it.  freeMem
+ * the result when done. Abort if any problem*/
+{
+char *s = netGetLongString(sd);
+if (s == NULL)
+     noWarnAbort();   
+return s;
+}
+
+char *netRecieveHugeString(int sd)
+/* Read string and return it.  freeMem
+ * the result when done. Abort if any problem*/
+{
+char *s = netGetHugeString(sd);
+if (s == NULL)
+     noWarnAbort();   
+return s;
+}
+
+
+struct lineFile *netHttpLineFileMayOpen(char *url, struct netParsedUrl **npu)
+/* Parse URL and open an HTTP socket for it but don't send a request yet. */
+{
+int sd;
+struct lineFile *lf;
+
+/* Parse the URL and try to connect. */
+AllocVar(*npu);
+netParseUrl(url, *npu);
+if (!sameString((*npu)->protocol, "http"))
+    errAbort("netHttpLineFileMayOpen: url (%s) is not for http.", url);
+sd = netConnect((*npu)->host, atoi((*npu)->port));
+if (sd < 0)
+    return NULL;
+
+/* Return handle. */
+lf = lineFileAttach(url, TRUE, sd);
+return lf;
+} /* netHttpLineFileMayOpen */
+
+
+void netHttpGet(struct lineFile *lf, struct netParsedUrl *npu,
+		boolean keepAlive)
+/* Send a GET request, possibly with Keep-Alive. */
+{
+struct dyString *dy = newDyString(512);
+
+/* Ask remote server for the file/query. */
+dyStringPrintf(dy, "GET %s HTTP/1.1\r\n", npu->file);
+dyStringPrintf(dy, "User-Agent: genome.ucsc.edu/net.c\r\n");
+dyStringPrintf(dy, "Host: %s:%s\r\n", npu->host, npu->port);
+if (!sameString(npu->user,""))
+    {
+    char up[256];
+    char *b64up = NULL;
+    safef(up,sizeof(up), "%s:%s", npu->user, npu->password);
+    b64up = base64Encode(up, strlen(up));
+    dyStringPrintf(dy, "Authorization: Basic %s\r\n", b64up);
+    freez(&b64up);
+    }
+dyStringAppend(dy, "Accept: */*\r\n");
+if (keepAlive)
+  {
+    dyStringAppend(dy, "Connection: Keep-Alive\r\n");
+    dyStringAppend(dy, "Connection: Persist\r\n");
+  }
+else
+    dyStringAppend(dy, "Connection: close\r\n");
+dyStringAppend(dy, "\r\n");
+mustWriteFd(lf->fd, dy->string, dy->stringSize);
+/* Clean up. */
+dyStringFree(&dy);
+} /* netHttpGet */
+
+int netHttpGetMultiple(char *url, struct slName *queries, void *userData,
+		       void (*responseCB)(void *userData, char *req,
+					  char *hdr, struct dyString *body))
+/* Given an URL which is the base of all requests to be made, and a 
+ * linked list of queries to be appended to that base and sent in as 
+ * requests, send the requests as a batch and read the HTTP response 
+ * headers and bodies.  If not all the requests get responses (i.e. if 
+ * the server is ignoring Keep-Alive or is imposing a limit), try again 
+ * until we can't connect or until all requests have been served. 
+ * For each HTTP response, do a callback. */
+{
+  struct slName *qStart;
+  struct slName *qPtr;
+  struct lineFile *lf;
+  struct netParsedUrl *npu;
+  struct dyString *dyQ    = newDyString(512);
+  struct dyString *body;
+  char *base;
+  char *hdr;
+  int qCount;
+  int qTotal;
+  int numParseFailures;
+  int contentLength;
+  boolean chunked;
+  boolean done;
+  boolean keepAlive;
+
+  /* Find out how many queries we'll need to do so we know how many times 
+   * it's OK to run into end of file in case server ignores Keep-Alive. */
+  qTotal = 0;
+  for (qPtr = queries;  qPtr != NULL;  qPtr = qPtr->next)
+    {
+      qTotal++;
+    }
+
+  done = FALSE;
+  qCount = 0;
+  numParseFailures = 0;
+  qStart = queries;
+  while ((! done) && (qStart != NULL))
+    {
+      lf = netHttpLineFileMayOpen(url, &npu);
+      if (lf == NULL)
+	{
+	  done = TRUE;
+	  break;
+	}
+      base = cloneString(npu->file);
+      /* Send all remaining requests with keep-alive. */
+      for (qPtr = qStart;  qPtr != NULL;  qPtr = qPtr->next)
+	{
+	  dyStringClear(dyQ);
+	  dyStringAppend(dyQ, base);
+	  dyStringAppend(dyQ, qPtr->name);
+	  strcpy(npu->file, dyQ->string);
+	  keepAlive = (qPtr->next == NULL) ? FALSE : TRUE;
+	  netHttpGet(lf, npu, keepAlive);
+	}
+      /* Get as many responses as we can; call responseCB() and 
+       * advance qStart for each. */
+      for (qPtr = qStart;  qPtr != NULL;  qPtr = qPtr->next)
+        {
+	  if (lineFileParseHttpHeader(lf, &hdr, &chunked, &contentLength))
+	    {
+	      body = lineFileSlurpHttpBody(lf, chunked, contentLength);
+	      dyStringClear(dyQ);
+	      dyStringAppend(dyQ, base);
+	      dyStringAppend(dyQ, qPtr->name);
+	      responseCB(userData, dyQ->string, hdr, body);
+	      qStart = qStart->next;
+	      qCount++;
+	    }
+	  else
+	    {
+	      if (numParseFailures++ > qTotal) {
+		done = TRUE;
+	      }
+	      break;
+	    }
+	}
+    }
+
+  return qCount;
+} /* netHttpMultipleQueries */
+
+boolean hasProtocol(char *urlOrPath)
+/* Return TRUE if it looks like it has http://, ftp:// etc. */
+{
+return stringIn("://", urlOrPath) != NULL;
+}
+
diff --git a/gbtools/src/blatSrc/lib/nib.c b/gbtools/src/blatSrc/lib/nib.c
new file mode 100644
index 0000000..d885513
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/nib.c
@@ -0,0 +1,516 @@
+/* Nib - nibble (4 bit) representation of nucleotide sequences. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "hash.h"
+#include "dnautil.h"
+#include "dnaseq.h"
+#include "nib.h"
+#include "sig.h"
+
+
+static char *findNibSubrange(char *fileName)
+/* find the colon starting a nib seq name/subrange in a nib file name, or NULL
+ * if none */
+{
+char *baseName = strrchr(fileName, '/');
+baseName = (baseName == NULL) ? fileName : baseName+1;
+return strchr(baseName, ':');
+}
+
+static void parseSubrange(char *subrange, char *name, 
+	unsigned *start, unsigned *end)
+/* parse the subrange specification */
+{
+char *rangePart = strchr(subrange+1, ':');
+if (rangePart != NULL)
+    {
+    /* :seqId:start-end form */
+    *rangePart = '\0';
+    strcpy(name, subrange+1);
+    *rangePart = ':';
+    rangePart++;
+    }
+else
+    {
+    /* :start-end form */
+    rangePart = subrange+1;
+    strcpy(name, ""); 
+    }
+if ((sscanf(rangePart, "%u-%u", start, end) != 2) || (*start > *end))
+    errAbort("can't parse nib file subsequence specification: %s",
+             subrange);
+}
+
+void nibParseName(unsigned options, char *fileSpec, char *filePath,
+                         char *name, unsigned *start, unsigned *end)
+/* Parse the nib name, getting the file name, seq name to use, and
+ * optionally the start and end positions. Zero is return for start
+ * and end if they are not specified. Return the path to the file
+ * and the name to use for the sequence. */
+{
+char *subrange = findNibSubrange(fileSpec);
+if (subrange != NULL)
+    {
+    *subrange = '\0';
+    parseSubrange(subrange, name, start, end);
+    strcpy(filePath, fileSpec);
+    *subrange = ':';
+    if (strlen(name) == 0)
+        {
+        /* no name in spec, generate one */
+        if (options & NIB_BASE_NAME)
+            splitPath(filePath, NULL, name, NULL);
+        else
+            strcpy(name, filePath);
+        sprintf(name+strlen(name), ":%u-%u", *start, *end);
+        }
+    }
+else
+    {
+    *start = 0;
+    *end = 0;
+    strcpy(filePath, fileSpec);
+    if (options & NIB_BASE_NAME)
+        splitPath(fileSpec, NULL, name, NULL);
+    else
+        strcpy(name, fileSpec);
+    }
+}
+
+void nibOpenVerify(char *fileName, FILE **retFile, int *retSize)
+/* Open file and verify it's in good nibble format. */
+{
+bits32 size;
+bits32 sig;
+FILE *f = fopen(fileName, "rb");
+char buffer[512];
+char buffer2[512];
+char buffer3[512];
+
+if (f == NULL)
+    {
+    /* see if nib is down a few directories ala faSplit -outDirDepth */
+    char *ptr = NULL;
+    char *dir, *file;
+    struct stat statBuf;
+
+    /* divide fileName into file and directory components */
+    safef(buffer, sizeof(buffer), "%s", fileName);
+    if ((ptr = strrchr(buffer, '/')) != NULL)
+	{
+	*ptr++ = 0;
+	dir = buffer;
+	file = ptr;
+	}
+    else
+	{
+	dir = "";
+	file = buffer;
+	}
+    
+    buffer3[0] = 0;
+    /* start at the end of the fileName (minus .nib) */
+    for(ptr = &file[strlen(file) - 5]; ; )
+	{
+	strcpy(buffer2, buffer3);
+	if (isdigit(*ptr))
+	    {
+	    /* if we have a digit in the fileName, see if there is a directory with this name */
+	    safef(buffer3, sizeof(buffer3), "%c/%s",*ptr,buffer2);
+	    ptr--;
+	    }
+	else
+	    /* we've run out of digits in the fileName, just add 0's */
+	    safef(buffer3, sizeof(buffer3), "0/%s",buffer2);
+
+	/* check to see if this directory exists */
+	safef(buffer2, sizeof(buffer2), "%s/%s", dir, buffer3);
+	if (stat(buffer2, &statBuf) < 0)
+	    break;
+
+	/* directory exists, see if our file is down there */
+	safef(buffer2, sizeof(buffer2), "%s/%s/%s", dir, buffer3, file);
+	if  ((f = fopen(buffer2, "rb")) != NULL)
+	    break;
+	}
+    if (f == NULL)
+	errAbort("Can't open %s to read: %s", fileName,  strerror(errno));
+    }
+dnaUtilOpen();
+mustReadOne(f, sig);
+mustReadOne(f, size);
+if (sig != nibSig)
+    {
+    sig = byteSwap32(sig);
+    size = byteSwap32(size);
+    if (sig != nibSig)
+	errAbort("%s is not a good .nib file.",  fileName);
+    }
+*retSize = size;
+*retFile = f;
+}
+
+static struct dnaSeq *nibInput(int options, char *fileName, char *seqName,
+                               FILE *f, int seqSize, int start, int size)
+/* Load part of an open .nib file. */
+{
+int end;
+DNA *d;
+int bVal;
+DNA *valToNtTbl = ((options &  NIB_MASK_MIXED) ? valToNtMasked : valToNt);
+struct dnaSeq *seq;
+Bits* mask = NULL;
+int bytePos, byteSize;
+int maskIdx = 0;
+
+assert(start >= 0);
+assert(size >= 0);
+
+end = start+size;
+if (end > seqSize)
+    errAbort("nib read past end of file (%d %d) in file: %s", 
+	     end, seqSize, (fileName != NULL ? fileName : "(NULL)"));
+
+AllocVar(seq);
+seq->size = size;
+seq->name = cloneString(seqName);
+seq->dna = d = needLargeMem(size+1);
+if (options & NIB_MASK_MIXED)
+    seq->mask = mask = bitAlloc(size);
+
+bytePos = (start>>1);
+fseek(f, bytePos + 2*sizeof(bits32), SEEK_SET);
+if (start & 1)
+    {
+    bVal = getc_unlocked(f);
+    if (bVal < 0)
+	{
+	errAbort("Read error 1 in %s", fileName);
+	}
+    *d++ = valToNtTbl[(bVal&0xf)];
+    size -= 1;
+    if (mask != NULL)
+        {
+        if ((bVal&0xf&MASKED_BASE_BIT) == 0)
+            bitSetOne(mask, maskIdx);
+        maskIdx++;
+        }
+    }
+byteSize = (size>>1);
+while (--byteSize >= 0)
+    {
+    bVal = getc_unlocked(f);
+    if (bVal < 0)
+	errAbort("Read error 2 in %s", fileName);
+    d[0] = valToNtTbl[(bVal>>4)];
+    d[1] = valToNtTbl[(bVal&0xf)];
+    d += 2;
+    if (mask != NULL)
+        {
+        if (((bVal>>4)&0xf) == 0)
+            bitSetOne(mask, maskIdx);
+        if ((bVal&0xf) == 0)
+            bitSetOne(mask, maskIdx+1);
+        maskIdx += 2;
+        }
+    }
+if (size&1)
+    {
+    bVal = getc_unlocked(f);
+    if (bVal < 0)
+	errAbort("Read error 3 in %s", fileName);
+    *d++ = valToNtTbl[(bVal>>4)];
+    if (mask != NULL)
+        {
+        if ((bVal>>4) == 0)
+            bitSetOne(mask, maskIdx);
+        maskIdx++;
+        }
+    }
+*d = 0;
+return seq;
+}
+
+static void nibOutput(int options, struct dnaSeq *seq, char *fileName)
+/* Write out file in format of four bits per nucleotide, with control over
+ * handling of masked positions. */
+{
+UBYTE byte;
+DNA *dna = seq->dna;
+int dVal1, dVal2;
+bits32 size = seq->size;
+int byteCount = (size>>1);
+bits32 sig = nibSig;
+int *ntValTbl = ((options & NIB_MASK_MIXED) ? ntValMasked : ntVal5);
+Bits* mask = ((options & NIB_MASK_MAP) ? seq->mask : NULL);
+int maskIdx = 0;
+FILE *f = mustOpen(fileName, "w");
+
+assert(sizeof(bits32) == 4);
+
+writeOne(f, sig);
+writeOne(f, seq->size);
+
+printf("Writing %d bases in %d bytes\n", seq->size, ((seq->size+1)/2) + 8);
+while (--byteCount >= 0)
+    {
+    dVal1 = ntValTbl[(int)dna[0]];
+    dVal2 = ntValTbl[(int)dna[1]];
+    /* Set from mask, remember bit in character is opposite sense of bit
+     * in mask. */
+    if (mask != NULL)
+        {
+        if (!bitReadOne(mask, maskIdx))
+            dVal1 |= MASKED_BASE_BIT;
+        if (!bitReadOne(mask, maskIdx+1))
+            dVal2 |= MASKED_BASE_BIT;
+        maskIdx += 2;
+        }
+    byte = (dVal1<<4) | dVal2;
+    if (putc(byte, f) < 0)
+	{
+	perror("");
+	errAbort("Couldn't write all of %s", fileName);
+	}
+    dna += 2;
+    }
+if (size & 1)
+    {
+    dVal1 = ntValTbl[(int)dna[0]];
+    if ((mask != NULL) && !bitReadOne(mask, maskIdx))
+        dVal1 |= MASKED_BASE_BIT;
+    byte = (dVal1<<4);
+    putc(byte, f);
+    }
+carefulClose(&f);
+}
+
+struct dnaSeq *nibLdPartMasked(int options, char *fileName, FILE *f, int seqSize, int start, int size)
+/* Load part of an open .nib file, with control over handling of masked
+ * positions. */
+{
+char nameBuf[512];
+safef(nameBuf, sizeof(nameBuf), "%s:%d-%d", fileName, start, start+size);
+return nibInput(options, fileName, nameBuf, f, seqSize, start, size);
+}
+
+struct dnaSeq *nibLdPart(char *fileName, FILE *f, int seqSize, int start, int size)
+/* Load part of an open .nib file. */
+{
+return nibLdPartMasked(0, fileName, f, seqSize, start, size);
+}
+
+struct dnaSeq *nibLoadPartMasked(int options, char *fileName, int start, int size)
+/* Load part of an .nib file, with control over handling of masked positions */
+{
+struct dnaSeq *seq;
+FILE *f;
+int seqSize;
+nibOpenVerify(fileName, &f, &seqSize);
+seq = nibLdPartMasked(options, fileName, f, seqSize, start, size);
+fclose(f);
+return seq;
+}
+
+struct dnaSeq *nibLoadPart(char *fileName, int start, int size)
+/* Load part of an .nib file. */
+{
+return nibLoadPartMasked(0, fileName, start, size);
+}
+
+struct dnaSeq *nibLoadAllMasked(int options, char *fileName)
+/* Load part of a .nib file, with control over handling of masked
+ * positions. Subranges of nib files may specified in the file name
+ * using the syntax:
+ *    /path/file.nib:seqid:start-end
+ * or\n"
+ *    /path/file.nib:start-end
+ * With the first form, seqid becomes the id of the subrange, with the second
+ * form, a sequence id of file:start-end will be used.
+ */
+{
+struct dnaSeq *seq;
+FILE *f;
+int seqSize;
+char filePath[PATH_LEN];
+char name[PATH_LEN];
+unsigned start, end;
+
+nibParseName(options, fileName, filePath, name, &start, &end);
+nibOpenVerify(filePath, &f, &seqSize);
+if (end == 0)
+    end = seqSize;
+seq = nibInput(options, fileName, name, f, seqSize, start, end-start);
+fclose(f);
+return seq;
+}
+
+struct dnaSeq *nibLoadAll(char *fileName)
+/* Load part of an .nib file. */
+{
+return nibLoadAllMasked(0, fileName);
+}
+
+void nibWriteMasked(int options, struct dnaSeq *seq, char *fileName)
+/* Write out file in format of four bits per nucleotide, with control over
+ * handling of masked positions. */
+{
+    nibOutput(options, seq, fileName);
+}
+
+void nibWrite(struct dnaSeq *seq, char *fileName)
+/* Write out file in format of four bits per nucleotide. */
+{
+    nibWriteMasked(0, seq, fileName);
+}
+
+struct nibStream
+/* Struct to help write a nib file one base at a time. 
+ * The routines that do this aren't very fast, but they
+ * aren't used much currently. */
+    {
+    struct nibStream *next;
+    char *fileName;	/* Name of file - allocated here. */
+    FILE *f;		/* File handle. */
+    bits32 size;	/* Current size. */
+    UBYTE byte;		/* Two nibble's worth of data. */
+    };
+
+struct nibStream *nibStreamOpen(char *fileName)
+/* Create a new nib stream.  Open file and stuff. */
+{
+struct nibStream *ns;
+FILE *f;
+
+dnaUtilOpen();
+AllocVar(ns);
+ns->f = f = mustOpen(fileName, "wb");
+ns->fileName = cloneString(fileName);
+
+/* Write header - initially zero.  Will fix it up when we close. */
+writeOne(f, ns->size);
+writeOne(f, ns->size);
+
+return ns;
+}
+
+void nibStreamClose(struct nibStream **pNs)
+/* Close a nib stream.  Flush last nibble if need be.  Fix up header. */
+{
+struct nibStream *ns = *pNs;
+FILE *f;
+bits32 sig = nibSig;
+if (ns == NULL)
+    return;
+f = ns->f;
+if (ns->size&1)
+    writeOne(f, ns->byte);
+fseek(f,  0L, SEEK_SET);
+writeOne(f, sig);
+writeOne(f, ns->size);
+fclose(f);
+freeMem(ns->fileName);
+freez(pNs);
+}
+
+void nibStreamOne(struct nibStream *ns, DNA base)
+/* Write out one base to nibStream. */
+{
+UBYTE ub = ntVal5[(int)base];
+
+if ((++ns->size&1) == 0)
+    {
+    ub += ns->byte;
+    writeOne(ns->f, ub);
+    }
+else
+    {
+    ns->byte = (ub<<4);
+    }
+}
+
+void nibStreamMany(struct nibStream *ns, DNA *dna, int size)
+/* Write many bases to nibStream. */
+{
+int i;
+for (i=0; i<size; ++i)
+    nibStreamOne(ns, *dna++);
+}
+
+boolean nibIsFile(char *fileName)
+/* Return TRUE if file is a nib file. */
+{
+boolean isANib;
+char *subrange = findNibSubrange(fileName);
+if (subrange != NULL)
+    *subrange = '\0';
+isANib = endsWith(fileName, ".nib") || endsWith(fileName, ".NIB");
+if (subrange != NULL)
+    *subrange = ':';
+return isANib;
+}
+
+boolean nibIsRange(char *fileName)
+/* Return TRUE if file specifies a subrange of a nib file. */
+{
+boolean isANib;
+char *subrange = findNibSubrange(fileName);;
+if (subrange == NULL)
+    return FALSE;
+*subrange = '\0';
+isANib = endsWith(fileName, ".nib") || endsWith(fileName, ".NIB");
+*subrange = ':';
+return isANib;
+}
+
+struct nibInfo *nibInfoNew(char *path)
+/* Make a new nibInfo with open nib file. */
+{
+struct nibInfo *nib;
+AllocVar(nib);
+nib->fileName = cloneString(path);
+nibOpenVerify(path, &nib->f, &nib->size);
+return nib;
+}
+
+void nibInfoFree(struct nibInfo **pNib)
+/* Free up nib info and close file if open. */
+{
+struct nibInfo *nib = *pNib;
+if (nib != NULL)
+    {
+    carefulClose(&nib->f);
+    freeMem(nib->fileName);
+    freez(pNib);
+    }
+}
+
+struct nibInfo *nibInfoFromCache(struct hash *hash, char *nibDir, char *nibName)
+/* Get nibInfo on nibDir/nibName.nib from cache, filling cache if need be. */
+{
+struct nibInfo *nib;
+char path[PATH_LEN];
+safef(path, sizeof(path), "%s/%s.nib", nibDir, nibName);
+nib = hashFindVal(hash, path);
+if (nib == NULL)
+    {
+    nib = nibInfoNew(path);
+    hashAdd(hash, path, nib);
+    }
+return nib;
+}
+
+int nibGetSize(char* nibFile)
+/* Get the sequence length of a nib */
+{
+FILE* fh;
+int size;
+
+nibOpenVerify(nibFile, &fh, &size);
+carefulClose(&fh);
+return size;
+}
+
diff --git a/gbtools/src/blatSrc/lib/nibTwo.c b/gbtools/src/blatSrc/lib/nibTwo.c
new file mode 100644
index 0000000..3f50c98
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/nibTwo.c
@@ -0,0 +1,125 @@
+/* nibTwo - Something to let you transparently access either
+ * .2bit or .nib files. */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "hash.h"
+#include "dnaseq.h"
+#include "nib.h"
+#include "twoBit.h"
+#include "nibTwo.h"
+
+
+struct nibTwoCache *nibTwoCacheNew(char *pathName)
+/* Get something that will more or less transparently get sequence from 
+ * nib files or .2bit. */ 
+{
+struct nibTwoCache *ntc;
+AllocVar(ntc);
+ntc->pathName = cloneString(pathName);
+ntc->isTwoBit = twoBitIsFile(pathName);
+if (ntc->isTwoBit)
+    ntc->tbf = twoBitOpen(pathName);
+else
+    ntc->nibHash = newHash(10);
+return ntc;
+}
+
+void nibTwoCacheFree(struct nibTwoCache **pNtc)
+/* Free up resources associated with nibTwoCache. */
+{
+struct nibTwoCache *ntc = *pNtc;
+if (ntc != NULL)
+    {
+    freez(&ntc->pathName);
+    if (ntc->isTwoBit)
+        twoBitClose(&ntc->tbf);
+    else
+        {
+	struct hashEl *el, *list = hashElListHash(ntc->nibHash);
+	struct nibInfo *nib;
+	for (el = list; el != NULL; el = el->next)
+	     {
+	     nib = el->val;
+	     nibInfoFree(&nib);
+	     }
+	hashElFreeList(&list);
+	hashFree(&ntc->nibHash);
+	}
+    freez(pNtc);
+    }
+}
+
+struct dnaSeq *nibTwoCacheSeq(struct nibTwoCache *ntc, char *seqName)
+/* Return all of sequence. This will have repeats in lower case. */
+{
+if (ntc->isTwoBit)
+    return twoBitReadSeqFrag(ntc->tbf, seqName, 0, 0);
+else
+    {
+    struct nibInfo *nib = nibInfoFromCache(ntc->nibHash, ntc->pathName, seqName);
+    return nibLdPart(nib->fileName, nib->f, nib->size, 0, nib->size);
+    }
+}
+
+struct dnaSeq *nibTwoCacheSeqPartExt(struct nibTwoCache *ntc, char *seqName, int start, int size,
+                                     boolean doMask, int *retFullSeqSize)
+/* Return part of sequence. If *retFullSeqSize is non-null then return full
+ * size of sequence (not just loaded part) there.   Sequence will be lower
+ * case if doMask is false, mixed case (repeats in lower)
+ * if doMask is true. */
+{
+if (ntc->isTwoBit)
+    {
+    return twoBitReadSeqFragExt(ntc->tbf, seqName, start, start+size,
+                                doMask, retFullSeqSize);
+    }
+else
+    {
+    struct nibInfo *nib = nibInfoFromCache(ntc->nibHash, ntc->pathName, seqName);
+    int opts = (doMask ? NIB_MASK_MIXED : 0);
+    if (retFullSeqSize != NULL)
+        *retFullSeqSize = nib->size;
+    return nibLdPartMasked(opts, nib->fileName, nib->f, nib->size, start, size);
+    }
+}
+
+struct dnaSeq *nibTwoCacheSeqPart(struct nibTwoCache *ntc, char *seqName, int start, int size,
+	int *retFullSeqSize)
+/* Return part of sequence. If *retFullSeqSize is non-null then return full size of
+ * sequence (not just loaded part) there. This will have repeats in lower case. */
+{
+return nibTwoCacheSeqPartExt(ntc, seqName, start, size, TRUE, retFullSeqSize);
+}
+
+struct dnaSeq *nibTwoLoadOne(char *pathName, char *seqName)
+/* Return sequence from a directory full of nibs or a .2bit file. 
+ * The sequence will have repeats in lower case. */
+{
+struct dnaSeq *seq;
+if (twoBitIsFile(pathName))
+    {
+    struct twoBitFile *tbf = twoBitOpen(pathName);
+    seq = twoBitReadSeqFrag(tbf, seqName, 0, 0);
+    twoBitClose(&tbf);
+    }
+else
+    {
+    char path[512];
+    safef(path, sizeof(path), "%s/%s.nib", pathName, seqName);
+    seq = nibLoadAllMasked(NIB_MASK_MIXED, path);
+    }
+return seq;
+}
+
+int nibTwoGetSize(struct nibTwoCache *ntc, char *seqName)
+/* Return size of sequence. */
+{
+if (ntc->isTwoBit)
+    return twoBitSeqSize(ntc->tbf, seqName);
+else
+    return nibInfoFromCache(ntc->nibHash, ntc->pathName, seqName)->size;
+}
+
diff --git a/gbtools/src/blatSrc/lib/nt4.c b/gbtools/src/blatSrc/lib/nt4.c
new file mode 100644
index 0000000..f291066
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/nt4.c
@@ -0,0 +1,260 @@
+/* nt4 - stuff to handle 2-bit-a-base representation of DNA.
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "dnautil.h"
+#include "shaRes.h"
+#include "dnaseq.h"
+#include "nt4.h"
+#include "sig.h"
+
+
+static size_t bits32PaddedSize(size_t size)
+{
+    return (((size+15)>>4)<<2);
+}
+
+static struct nt4Seq *allocNt4(size_t baseCount, char *name)
+/* Create a new nt4Seq struct with memory for bases. */
+{
+size_t memSize = bits32PaddedSize(baseCount);
+struct nt4Seq *seq = needMem(sizeof(*seq));
+seq->baseCount = baseCount;
+seq->bases = needLargeMem(memSize);
+seq->name = cloneString(name);
+return seq;
+}
+
+
+struct nt4Seq *newNt4(DNA *dna, int size, char *name)
+/* Create a new DNA seq with 2 bits per base pair. */
+{
+bits32 *packed;
+DNA *unpacked;
+char last[16];
+struct nt4Seq *seq = allocNt4(size, name);
+packed = seq->bases;
+unpacked = dna;
+while (size > 16)
+    {
+    *packed++ = packDna16(dna);
+    dna += 16;
+    size -= 16;
+    }
+if (size > 0)
+    {
+    memcpy(last, dna, size);
+    *packed++ = packDna16(dna);
+    }
+return seq;
+}
+
+void freeNt4(struct nt4Seq **pSeq)
+/* Free up DNA seq with 2 bits per base pair */
+{
+struct nt4Seq *seq = *pSeq;
+if (seq == NULL)
+    return;
+freeMem(seq->bases);
+freeMem(seq->name);
+freez(pSeq);
+}
+
+static FILE *nt4OpenVerify(char *fileName)
+/* Open up an nt4 file and verify signature.
+ * Abort if any problem. */
+{
+FILE *f = mustOpen(fileName, "rb");
+bits32 signature;
+mustReadOne(f, signature);
+if (signature != nt4Signature)
+    errAbort("%s is not a good Nt4 file", fileName);
+return f;
+}
+
+struct nt4Seq *loadNt4(char *fileName, char *seqName)
+/* Load up an nt4 sequence from a file. */
+{
+bits32 size;
+struct nt4Seq *seq;
+FILE *f = nt4OpenVerify(fileName);
+
+mustReadOne(f, size);
+if (seqName == NULL)
+    seqName = fileName;
+seq = allocNt4(size, seqName);
+mustRead(f, seq->bases, bits32PaddedSize(size));
+carefulClose(&f);
+return seq;
+}
+
+void  saveNt4(char *fileName, DNA *dna, bits32 dnaSize)
+/* Save dna in an NT4 file. */
+{
+FILE *f = mustOpen(fileName, "wb");
+bits32 signature = nt4Signature;
+bits32 bases;
+char last[16];
+
+writeOne(f, signature);
+writeOne(f, dnaSize);
+while (dnaSize >= 16)
+    {
+    bases = packDna16(dna);
+    writeOne(f, bases);
+    dna += 16;
+    dnaSize -= 16;
+    }
+if (dnaSize > 0)
+    {
+    zeroBytes(last, sizeof(last));
+    memcpy(last, dna, dnaSize);
+    bases = packDna16(last);
+    writeOne(f, bases);
+    }
+fclose(f);
+}
+
+int nt4BaseCount(char *fileName)
+/* Return number of bases in NT4 file. */
+{
+bits32 size;
+FILE *f = nt4OpenVerify(fileName);
+
+mustReadOne(f, size);
+fclose(f);
+return (int)size;
+}
+
+static void unpackRightSide(bits32 tile, int baseCount, DNA *out)
+/* Unpack last part of tile into DNA. */
+{
+int j;
+
+for (j=baseCount; --j>=0; )
+    {
+    out[j] = valToNt[tile & 0x3];
+    tile >>= 2;
+    }
+}
+
+static void unpackLeftSide(bits32 tile, int baseCount, DNA *out)
+/* Unpack first part of tile into DNA. */
+{
+int bitsToDump = ((16-baseCount)<<1);
+tile >>= bitsToDump;
+out += baseCount;
+while (--baseCount >= 0)
+    {
+    *--out = valToNt[tile&0x3];
+    tile >>= 2;
+    }
+}
+
+static void unpackMidWord(bits32 tile, int startBase, int baseCount, DNA *out)
+/* Unpack part of a single word. */
+{
+tile >>= ((16-startBase-baseCount)<<1);
+out += baseCount;
+while (--baseCount >= 0)
+    {
+    *--out = valToNt[tile&0x3];
+    tile >>= 2;
+    }
+}
+
+void unalignedUnpackDna(bits32 *tiles, int start, int size, DNA *unpacked)
+/* Unpack into out, even though not starting/stopping on tile 
+ * boundaries. */
+{
+DNA *pt = unpacked;
+int sizeLeft = size;
+int firstBases, middleBases;
+bits32 *startTile, *endTile;
+
+dnaUtilOpen();
+
+/* See if all data is in a single word. */
+startTile = tiles + (start>>4);
+endTile = tiles + ((start + size - 1)>>4);
+if (startTile == endTile)
+    {
+    unpackMidWord(*startTile, start&0xf, size, unpacked);
+    return;
+    }
+
+/* Skip over initial stuff. */
+tiles = startTile;
+
+/* See if just have one tile to 
+ * Unpack the right hand side of the first tile. */
+firstBases = (16 - (start&0xf));
+unpackRightSide(*tiles, firstBases, pt);
+pt += firstBases;
+sizeLeft -= firstBases;
+tiles += 1;
+
+/* Unpack all of the middle tiles. */
+middleBases = (sizeLeft&0x7ffffff0);
+unpackDna(tiles, middleBases>>4, pt);
+pt += middleBases;
+sizeLeft -= middleBases;
+tiles += (middleBases>>4);
+
+/* Unpack the left side of last tile. */
+if (sizeLeft > 0)
+    unpackLeftSide(*tiles, sizeLeft, pt);
+pt += sizeLeft;
+
+/* Add trailing zero to make it a DNA string. */
+assert(pt == unpacked+size);
+*pt = 0;
+}
+
+DNA *nt4Unpack(struct nt4Seq *n, int start, int size)
+/* Create an unpacked section of nt4 sequence.  */
+{
+DNA *unpacked = needLargeMem(size+1);
+unalignedUnpackDna(n->bases, start, size, unpacked);
+return unpacked;
+}
+
+
+DNA *nt4LoadPart(char *fileName, int start, int size)
+/* Load part of an nt4 file. */
+{
+bits32 basesInFile;
+int tStart, tEnd, tSize;
+int end;
+FILE *f;
+DNA *unpacked;
+bits32 *tiles;
+
+/* Open file, and make sure request is covered by file. */
+f = nt4OpenVerify(fileName);
+mustReadOne(f, basesInFile);
+
+assert(start >= 0);
+end = start + size;
+assert(end <= (int)basesInFile);
+
+/* Figure out tiles to load */
+tStart = (start>>4);
+tEnd = ((end+15)>>4);
+tSize = tEnd - tStart;
+
+/* Allocate tile array and read it from disk. */
+tiles = needLargeMem(tSize * sizeof(*tiles));
+fseek(f, tStart * sizeof(*tiles), SEEK_CUR);
+mustRead(f, tiles, tSize * sizeof(*tiles) );
+
+/* Allocate and unpack array. */
+unpacked = needLargeMem(size+1);
+unalignedUnpackDna(tiles, start - (tStart<<4), size, unpacked);
+
+freeMem(tiles);
+fclose(f);
+return unpacked;
+}
diff --git a/gbtools/src/blatSrc/lib/numObscure.c b/gbtools/src/blatSrc/lib/numObscure.c
new file mode 100644
index 0000000..4d53b2f
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/numObscure.c
@@ -0,0 +1,106 @@
+/* numObscure - obscure but sometimes useful numerical functions. */
+
+/* Copyright (C) 2009 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+#include "common.h"
+#include "obscure.h"
+
+static void rangeIncludingZero(double start, double end, double *retStart, double *retEnd)
+/* If start == end, then make range go from zero to the start/end value. */
+{
+if (start < 0.0)
+    {
+    *retStart = start;
+    *retEnd = 0;
+    }
+else if (start > 0.0)
+    {
+    *retStart = 0;
+    *retEnd = end;
+    }
+else
+    {
+    *retStart = 0;
+    *retEnd = 1;
+    }
+return;
+}
+
+void rangeRoundUp(double start, double end, double *retStart, double *retEnd)
+/* Round start and end so that they cover a slightly bigger range, but with more round
+ * numbers.  For instance 0.23:9.89 becomes 0:10 */
+{
+double size = end - start;
+if (size < 0)
+    errAbort("start (%g) after end (%g) in rangeRoundUp", start, end);
+
+/* Flat ranges get moved to include zero for scale. */
+if (size == 0.0)
+    {
+    rangeIncludingZero(start, end, &start, &end);
+    size = end - start;
+    }
+
+/* Figure out "increment", which will be 1, 2, 5, or 10, or a multiple of 10 of these 
+ * Want to have at least two increments in range. */
+double exponent = 1;
+double scaledSize = size;
+double increment = 0;
+while (scaledSize < 100)
+    {
+    scaledSize *= 10;
+    exponent /= 10;
+    }
+while (scaledSize >= 100)
+    {
+    scaledSize /= 10;
+    exponent *= 10;
+    }
+/* At this point have a number between 10 and 100 */
+if (scaledSize < 12)
+    increment = 1;
+else if (scaledSize < 20)
+    increment = 2;
+else if (scaledSize < 75)
+    increment = 5;
+else
+    increment = 10;
+increment *= exponent;
+
+int startInIncrements = floor(start/increment);
+int endInIncrements = ceil(end/increment);
+*retStart = startInIncrements * increment;
+*retEnd = endInIncrements * increment;
+}
+
+void rangeFromMinMaxMeanStd(double minVal, double maxVal, double mean, double std,
+	double *retStart, double *retEnd)
+/* Given some basic statistical properties, set a range that will be good on a wide
+ * range of biological data. */
+{
+double start,end;
+if (isnan(std))
+    {
+    /* Handle a case that occurred in version 1 bigWigs and bigBeds due to fault in
+     * sumSquares calculation. */
+    start = mean-5;
+    end = mean+5;
+    if (start < minVal) start = minVal;
+    if (end > maxVal) end = maxVal;
+    }
+else if (std == 0)
+    {
+    start = end = mean;
+    rangeIncludingZero(start, end, &start, &end);
+    }
+else
+    {
+    start = mean - 5*std;
+    end = mean + 5*std;
+    if (start < minVal) start = minVal;
+    if (end > maxVal) end = maxVal;
+    }
+*retStart = start;
+*retEnd = end;
+}
+
diff --git a/gbtools/src/blatSrc/lib/obscure.c b/gbtools/src/blatSrc/lib/obscure.c
new file mode 100644
index 0000000..0322d28
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/obscure.c
@@ -0,0 +1,823 @@
+/* Obscure stuff that is handy every now and again. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include <unistd.h>
+#include "portable.h"
+#include "localmem.h"
+#include "hash.h"
+#include "obscure.h"
+#include "linefile.h"
+
+static int _dotForUserMod = 100; /* How often does dotForUser() output a dot. */
+
+long incCounterFile(char *fileName)
+/* Increment a 32 bit value on disk. */
+{
+long val = 0;
+FILE *f = fopen(fileName, "r+b");
+if (f != NULL)
+    {
+    mustReadOne(f, val);
+    rewind(f);
+    }
+else
+    {
+    f = fopen(fileName, "wb");
+    }
+++val;
+if (f != NULL)
+    {
+    fwrite(&val, sizeof(val), 1, f);
+    if (fclose(f) != 0)
+        errnoAbort("fclose failed");
+    }
+return val;
+}
+
+int digitsBaseTwo(unsigned long x)
+/* Return base two # of digits. */
+{
+int digits = 0;
+while (x)
+    {
+    digits += 1;
+    x >>= 1;
+    }
+return digits;
+}
+
+int digitsBaseTen(int x)
+/* Return number of digits base 10. */
+{
+int digCount = 1;
+if (x < 0)
+    {
+    digCount = 2;
+    x = -x;
+    }
+while (x >= 10)
+    {
+    digCount += 1;
+    x /= 10;
+    }
+return digCount;
+}
+
+void writeGulp(char *file, char *buf, int size)
+/* Write out a bunch of memory. */
+{
+FILE *f = mustOpen(file, "w");
+mustWrite(f, buf, size);
+carefulClose(&f);
+}
+
+void readInGulp(char *fileName, char **retBuf, size_t *retSize)
+/* Read whole file in one big gulp. */
+{
+size_t size = (size_t)fileSize(fileName);
+char *buf;
+FILE *f = mustOpen(fileName, "rb");
+*retBuf = buf = needLargeMem(size+1);
+mustRead(f, buf, size);
+buf[size] = 0;      /* Just in case it needs zero termination. */
+fclose(f);
+if (retSize != NULL)
+    *retSize = size;
+}
+
+void readAllWords(char *fileName, char ***retWords, int *retWordCount, char **retBuf)
+/* Read in whole file and break it into words. You need to freeMem both
+ * *retWordCount and *retBuf when done. */
+{
+int wordCount;
+char *buf = NULL;
+char **words = NULL;
+size_t bufSize;
+
+readInGulp(fileName, &buf, &bufSize);
+wordCount = chopByWhite(buf, NULL, 0);
+if (wordCount != 0)
+    {
+    words = needMem(wordCount * sizeof(words[0]));
+    chopByWhite(buf, words, wordCount);
+    }
+*retWords = words;
+*retWordCount = wordCount;
+*retBuf = buf;
+}
+
+int countWordsInFile(char *fileName)
+/* Count number of words in file. */
+{
+struct lineFile *lf = lineFileOpen(fileName, TRUE);
+char *line;
+int wordCount = 0;
+while (lineFileNext(lf, &line, NULL))
+    wordCount += chopByWhite(line, NULL, 0);
+lineFileClose(&lf);
+return wordCount;
+}
+
+struct hash *hashWordsInFile(char *fileName, int hashSize)
+/* Create a hash of space delimited words in file. */
+{
+struct hash *hash = newHash(hashSize);
+struct lineFile *lf = lineFileOpen(fileName, TRUE);
+char *line, *word;
+while (lineFileNext(lf, &line, NULL))
+    {
+    while ((word = nextWord(&line)) != NULL)
+        hashAdd(hash, word, NULL);
+    }
+lineFileClose(&lf);
+return hash;
+}
+
+struct hash *hashNameIntFile(char *fileName)
+/* Given a two column file (name, integer value) return a
+ * hash keyed by name with integer values */
+{
+struct lineFile *lf = lineFileOpen(fileName, TRUE);
+char *row[2];
+struct hash *hash = hashNew(16);
+while (lineFileRow(lf, row))
+    hashAddInt(hash, row[0], lineFileNeedNum(lf, row, 1));
+lineFileClose(&lf);
+return hash;
+}
+
+struct hash *hashTwoColumnFile(char *fileName)
+/* Given a two column file (key, value) return a hash. */
+{
+struct lineFile *lf = lineFileOpen(fileName, TRUE);
+char *row[2];
+struct hash *hash = hashNew(16);
+while (lineFileRow(lf, row))
+    {
+    char *name = row[0];
+    char *value = lmCloneString(hash->lm, row[1]);
+    hashAdd(hash, name, value);
+    }
+lineFileClose(&lf);
+return hash;
+}
+
+struct slName *readAllLines(char *fileName)
+/* Read all lines of file into a list.  (Removes trailing carriage return.) */
+{
+struct lineFile *lf = lineFileOpen(fileName, TRUE);
+struct slName *list = NULL, *el;
+char *line;
+
+while (lineFileNext(lf, &line, NULL))
+     {
+     el = newSlName(line);
+     slAddHead(&list, el);
+     }
+lineFileClose(&lf);
+slReverse(&list);
+return list;
+}
+
+void copyFile(char *source, char *dest)
+/* Copy file from source to dest. */
+{
+int bufSize = 64*1024;
+char *buf = needMem(bufSize);
+int bytesRead;
+int s, d;
+
+s = open(source, O_RDONLY);
+if (s < 0)
+    errAbort("Couldn't open %s. %s\n", source, strerror(errno));
+d = creat(dest, 0777);
+if (d < 0)
+    {
+    close(s);
+    errAbort("Couldn't open %s. %s\n", dest, strerror(errno));
+    }
+while ((bytesRead = read(s, buf, bufSize)) > 0)
+    {
+    if (write(d, buf, bytesRead) < 0)
+        errAbort("Write error on %s. %s\n", dest, strerror(errno));
+    }
+close(s);
+if (close(d) != 0)
+    errnoAbort("close failed");
+freeMem(buf);
+}
+
+void copyOpenFile(FILE *inFh, FILE *outFh)
+/* copy an open stdio file */
+{
+int c;
+while ((c = fgetc(inFh)) != EOF)
+    fputc(c, outFh);
+if (ferror(inFh))
+    errnoAbort("file read failed");
+if (ferror(outFh))
+    errnoAbort("file write failed");
+}
+
+void cpFile(int s, int d)
+/* Copy from source file to dest until reach end of file. */
+{
+int bufSize = 64*1024, readSize;
+char *buf = needMem(bufSize);
+
+for (;;)
+    {
+    readSize = read(s, buf, bufSize);
+    if (readSize > 0)
+        mustWriteFd(d, buf, readSize);
+    if (readSize <= 0)
+        break;
+    }
+freeMem(buf);
+}
+
+void *intToPt(int i)
+/* Convert integer to pointer. Use when really want to store an
+ * int in a pointer field. */
+{
+char *pt = NULL;
+return pt+i;
+}
+
+int ptToInt(void *pt)
+/* Convert pointer to integer.  Use when really want to store a
+ * pointer in an int. */
+{
+char *a = NULL, *b = pt;
+return b - a;
+}
+
+void *sizetToPt(size_t i)
+/* Convert size_t to pointer. Use when really want to store a
+ * size_t in a pointer. */
+{
+char *pt = NULL;
+return pt+i;
+}
+
+size_t ptToSizet(void *pt)
+/* Convert pointer to size_t.  Use when really want to store a
+ * pointer in a size_t. */
+{
+char *a = NULL, *b = pt;
+return b - a;
+}
+
+boolean parseQuotedStringNoEscapes( char *in, char *out, char **retNext)
+/* Read quoted string from in (which should begin with first quote).
+ * Write unquoted string to out, which may be the same as in.
+ * Return pointer to character past end of string in *retNext. 
+ * Return FALSE if can't find end.
+ * Unlike parseQuotedString() do not treat backslash as an escape
+ *	character, merely pass it on through.
+ */
+{
+char c, *s = in;
+int quoteChar = *s++;
+
+for (;;)
+   {
+   c = *s++;
+   if (c == 0)
+       {
+       warn("Unmatched %c", quoteChar);
+       return FALSE;
+       }
+   else if (c == quoteChar)
+       break;
+   else
+       *out++ = c;
+   }
+*out = 0;
+if (retNext != NULL)
+    *retNext = s;
+return TRUE;
+}
+
+boolean parseQuotedString( char *in, char *out, char **retNext)
+/* Read quoted string from in (which should begin with first quote).
+ * Write unquoted string to out, which may be the same as in.
+ * Return pointer to character past end of string in *retNext. 
+ * Return FALSE if can't find end. */
+{
+char c, *s = in;
+int quoteChar = *s++;
+boolean escaped = FALSE;
+
+for (;;)
+   {
+   c = *s++;
+   if (c == 0)
+       {
+       warn("Unmatched %c", quoteChar);
+       return FALSE;
+       }
+   if (escaped)
+       {
+       if (c == '\\' || c == quoteChar)
+          *out++ = c;
+       else
+          {
+	  *out++ = '\\';
+	  *out++ = c;
+	  }
+       escaped = FALSE;
+       }
+   else
+       {
+       if (c == '\\')
+           escaped = TRUE;
+       else if (c == quoteChar)
+           break;
+       else
+           *out++ = c;
+       }
+   }
+*out = 0;
+if (retNext != NULL)
+    *retNext = s;
+return TRUE;
+}
+
+char *nextQuotedWord(char **pLine)
+/* Generalization of nextWord.  Returns next quoted
+ * string or if no quotes next word.  Updates *pLine
+ * to point past word that is returned. Does not return
+ * quotes. */
+{
+char *line, c;
+line = skipLeadingSpaces(*pLine);
+if (line == NULL || line[0] == 0)
+    return NULL;
+c = *line;
+if (c == '"' || c == '\'')
+    {
+    if (!parseQuotedString(line, line, pLine))
+        return NULL;
+    return line;
+    }
+else
+    {
+    return nextWord(pLine);
+    }
+}
+
+void escCopy(char *in, char *out, char toEscape, char escape)
+/* Copy in to out, escaping as needed.  Out better be big enough. 
+ * (Worst case is strlen(in)*2 + 1.) */
+{
+char c;
+for (;;)
+    {
+    c = *in++;
+    if (c == toEscape)
+        *out++ = escape;
+    *out++ = c;
+    if (c == 0)
+        break;
+    }
+}
+
+char *makeEscapedString(char *in, char toEscape)
+/* Return string that is a copy of in, but with all
+ * toEscape characters preceded by '\' 
+ * When done freeMem result. */
+{
+int newSize = strlen(in) + countChars(in, toEscape);
+char *out = needMem(newSize+1);
+escCopy(in, out, toEscape, '\\');
+return out;
+}
+
+char *makeQuotedString(char *in, char quoteChar)
+/* Create a string surrounded by quoteChar, with internal
+ * quoteChars escaped.  freeMem result when done. */
+{
+int newSize = 2 + strlen(in) + countChars(in, quoteChar);
+char *out = needMem(newSize+1);
+out[0] = quoteChar;
+escCopy(in, out+1, quoteChar, '\\');
+out[newSize-1] = quoteChar;
+return out;
+}
+
+struct hash *hashThisEqThatLine(char *line, int lineIx, boolean firstStartsWithLetter)
+/* Return a symbol table from a line of form:
+ *   1-this1=val1 2-this='quoted val2' var3="another val" 
+ * If firstStartsWithLetter is true, then the left side of the equals must start with
+ * a letter. */
+{
+char *dupe = cloneString(line);
+char *s = dupe, c;
+char *var, *val;
+struct hash *hash = newHash(8);
+
+for (;;)
+    {
+    if ((var = skipLeadingSpaces(s)) == NULL)
+        break;
+
+    if ((c = *var) == 0)
+        break;
+    if (firstStartsWithLetter && !isalpha(c))
+	errAbort("line %d of custom input: variable needs to start with letter '%s'", lineIx, var);
+    val = strchr(var, '=');
+    if (val == NULL)
+        {
+        errAbort("line %d of var %s in custom input: %s \n missing = in var/val pair", lineIx, var, line);
+        }
+    *val++ = 0;
+    c = *val;
+    if (c == '\'' || c == '"')
+        {
+	if (!parseQuotedString(val, val, &s))
+	    errAbort("line %d of input: missing closing %c", lineIx, c);
+	}
+    else
+	{
+	s = skipToSpaces(val);
+	if (s != NULL) *s++ = 0;
+	}
+    hashAdd(hash, var, cloneString(val));
+    }
+freez(&dupe);
+return hash;
+}
+
+struct hash *hashVarLine(char *line, int lineIx)
+/* Return a symbol table from a line of form:
+ *   var1=val1 var2='quoted val2' var3="another val" */
+{
+return hashThisEqThatLine(line, lineIx, TRUE);
+}
+
+struct slName *stringToSlNames(char *string)
+/* Convert string to a list of slNames separated by
+ * white space, but allowing multiple words in quotes.
+ * Quotes if any are stripped.  */
+{
+struct slName *list = NULL, *name;
+char *dupe = cloneString(string);
+char c, *s = dupe, *e;
+
+for (;;)
+    {
+    if ((s = skipLeadingSpaces(s)) == NULL)
+        break;
+    if ((c = *s) == 0)
+        break;
+    if (c == '\'' || c == '"')
+        {
+	if (!parseQuotedString(s, s, &e))
+	    errAbort("missing closing %c in %s", c, string);
+	}
+    else
+        {
+	e = skipToSpaces(s);
+	if (e != NULL) *e++ = 0;
+	}
+    name = slNameNew(s);
+    slAddHead(&list, name);
+    s = e;
+    }
+freeMem(dupe);
+slReverse(&list);
+return list;
+}
+
+struct slName *charSepToSlNames(char *string, char c)
+/* Convert character-separated list of items to slName list. 
+ * Note that the last occurence of c is optional.  (That
+ * is for a comma-separated list a,b,c and a,b,c, are
+ * equivalent. */
+{
+struct slName *list = NULL, *el;
+char *s, *e;
+
+s = string;
+while (s != NULL && s[0] != 0)
+    {
+    e = strchr(s, c);
+    if (e == NULL)
+        {
+	el = slNameNew(s);
+	slAddHead(&list, el);
+	break;
+	}
+    else
+        {
+	el = slNameNewN(s, e - s);
+	slAddHead(&list, el);
+	s = e+1;
+	}
+    }
+slReverse(&list);
+return list;
+}
+
+struct slName *commaSepToSlNames(char *commaSep)
+/* Convert comma-separated list of items to slName list.  */
+{
+return charSepToSlNames(commaSep, ',');
+}
+
+
+void sprintLongWithCommas(char *s, long long l)
+/* Print out a long number with commas a thousands, millions, etc. */
+{
+long long trillions, billions, millions, thousands;
+if (l >= 1000000000000LL)
+    {
+    trillions = l/1000000000000LL;
+    l -= trillions * 1000000000000LL;
+    billions = l/1000000000;
+    l -= billions * 1000000000;
+    millions = l/1000000;
+    l -= millions * 1000000;
+    thousands = l/1000;
+    l -= thousands * 1000;
+    sprintf(s, "%lld,%03lld,%03lld,%03lld,%03lld", trillions, billions, millions, thousands, l);
+    }
+else if (l >= 1000000000)
+    {
+    billions = l/1000000000;
+    l -= billions * 1000000000;
+    millions = l/1000000;
+    l -= millions * 1000000;
+    thousands = l/1000;
+    l -= thousands * 1000;
+    sprintf(s, "%lld,%03lld,%03lld,%03lld", billions, millions, thousands, l);
+    }
+else if (l >= 1000000)
+    {
+    millions = l/1000000;
+    l -= millions * (long long)1000000;
+    thousands = l/1000;
+    l -= thousands * 1000;
+    sprintf(s, "%lld,%03lld,%03lld", millions, thousands, l);
+    }
+else if (l >= 1000)
+    {
+    thousands = l/1000;
+    l -= thousands * 1000;
+    sprintf(s, "%lld,%03lld", thousands, l);
+    }
+else
+    sprintf(s, "%lld", l);
+}
+
+void printLongWithCommas(FILE *f, long long l)
+/* Print out a long number with commas at thousands, millions, etc. */
+{
+char ascii[32];
+sprintLongWithCommas(ascii, l);
+fprintf(f, "%s", ascii);
+}
+
+void sprintWithGreekByte(char *s, int slength, long long size)
+/* Numbers formatted with PB, TB, GB, MB, KB, B */
+{
+char *greek[] = {"B", "KB", "MB", "GB", "TB", "PB"};
+int i = 0;
+long long d = 1;
+while ((size/d) >= 1024)
+    {
+    ++i;
+    d *= 1024;
+    }
+double result = ((double)size)/d;
+if (result < 10)
+    safef(s,slength,"%3.1f %s",((double)size)/d, greek[i]);
+else
+    safef(s,slength,"%3.0f %s",((double)size)/d, greek[i]);
+}
+
+void shuffleArrayOfChars(char *array, int arraySize)
+/* Shuffle array of characters of given size given number of times. */
+{
+char c;
+int i, randIx;
+
+/* Randomly permute an array using the method from Cormen, et al */
+for (i=0; i<arraySize; ++i)
+    {
+    randIx = i + (rand() % (arraySize - i));
+    c = array[i];
+    array[i] = array[randIx];
+    array[randIx] = c;
+    }
+}
+
+void shuffleArrayOfInts(int *array, int arraySize)
+/* Shuffle array of ints of given size given number of times. */
+{
+int c;
+int i, randIx;
+
+/* Randomly permute an array using the method from Cormen, et al */
+for (i=0; i<arraySize; ++i)
+    {
+    randIx = i + (rand() % (arraySize - i));
+    c = array[i];
+    array[i] = array[randIx];
+    array[randIx] = c;
+    }
+}
+
+void shuffleArrayOfPointers(void *pointerArray, int arraySize)
+/* Shuffle array of pointers of given size given number of times. */
+{
+void **array = pointerArray, *pt;
+int i, randIx;
+
+/* Randomly permute an array using the method from Cormen, et al */
+for (i=0; i<arraySize; ++i)
+    {
+    randIx = i + (rand() % (arraySize - i));
+    pt = array[i];
+    array[i] = array[randIx];
+    array[randIx] = pt;
+    }
+}
+
+void shuffleList(void *pList)
+/* Randomize order of slList.  Usage:
+ *     randomizeList(&list)
+ * where list is a pointer to a structure that
+ * begins with a next field. */
+{
+struct slList **pL = (struct slList **)pList;
+struct slList *list = *pL;
+int count;
+count = slCount(list);
+if (count > 1)
+    {
+    struct slList *el;
+    struct slList **array;
+    int i;
+    array = needLargeMem(count * sizeof(*array));
+    for (el = list, i=0; el != NULL; el = el->next, i++)
+        array[i] = el;
+    for (i=0; i<4; ++i)
+        shuffleArrayOfPointers(array, count);
+    list = NULL;
+    for (i=0; i<count; ++i)
+        {
+        array[i]->next = list;
+        list = array[i];
+        }
+    freeMem(array);
+    slReverse(&list);
+    *pL = list;       
+    }
+}
+
+void *slListRandomReduce(void *list, double reduceRatio)
+/* Reduce list to approximately reduceRatio times original size. Destroys original list. */
+{
+if (reduceRatio >= 1.0)
+    return list;
+int threshold = RAND_MAX * reduceRatio;
+struct slList *newList = NULL, *next, *el;
+for (el = list; el != NULL; el = next)
+    {
+    next = el->next;
+    if (rand() <= threshold)
+        {
+	slAddHead(&newList, el);
+	}
+    }
+return newList;
+}
+
+void *slListRandomSample(void *list, int maxCount)
+/* Return a sublist of list with at most maxCount. Destroy list in process */
+{
+if (list == NULL)
+    return list;
+int initialCount = slCount(list);
+if (initialCount <= maxCount)
+    return list;
+double reduceRatio = (double)maxCount/initialCount;
+if (reduceRatio < 0.9)
+    {
+    double conservativeReduceRatio = reduceRatio * 1.05;
+    list = slListRandomReduce(list, conservativeReduceRatio);
+    }
+int midCount = slCount(list);
+if (midCount <= maxCount)
+    return list;
+shuffleList(list);
+struct slList *lastEl = slElementFromIx(list, maxCount-1);
+lastEl->next = NULL;
+return list;
+}
+
+
+char *stripCommas(char *position)
+/* make a new string with commas stripped out */
+{
+char *newPos = cloneString(position);
+char *nPtr = newPos;
+
+if (position == NULL)
+    return NULL;
+while((*nPtr = *position++))
+    if (*nPtr != ',')
+	nPtr++;
+
+return newPos;
+}
+
+void dotForUserInit(int dotMod)
+/* Set how often dotForUser() outputs a dot. */
+{
+assert(dotMod > 0);
+_dotForUserMod = dotMod;
+}
+
+void dotForUser()
+/* Write out a dot every _dotForUserMod times this is called. */
+{
+static int dot = -10;
+/* Check to see if dot has been initialized. */
+if(dot == - 10)
+    dot = _dotForUserMod;
+
+if (--dot <= 0)
+    {
+    putc('.', stderr);
+    fflush(stderr);
+    dot = _dotForUserMod;
+    }
+}
+
+void spaceToUnderbar(char *s)
+/* Convert white space to underbar. */
+{
+char c;
+while ((c = *s) != 0)
+    {
+    if (isspace(c))
+        *s = '_';
+    ++s;
+    }
+}
+
+void printVmPeak()
+/* print to stderr peak Vm memory usage (if /proc/ business exists) */
+{
+pid_t pid = getpid();
+char temp[256];
+safef(temp, sizeof(temp), "/proc/%d/status", (int) pid);
+struct lineFile *lf = lineFileMayOpen(temp, TRUE);
+if (lf)
+    {
+    char *line;
+    while (lineFileNextReal(lf, &line))
+	{
+	if (stringIn("VmPeak", line))
+	    {
+	    fprintf(stderr, "# pid=%d: %s\n", pid, line);
+	    break;
+	    }
+	}
+    lineFileClose(&lf);
+    }
+else
+    fprintf(stderr, "# printVmPeak: %s - not available\n", temp);
+fflush(stderr);
+}
+
+boolean nameInCommaList(char *name, char *commaList)
+/* Return TRUE if name is in comma separated list. */
+{
+if (commaList == NULL)
+    return FALSE;
+int nameLen = strlen(name);
+for (;;)
+    {
+    char c = *commaList;
+    if (c == 0)
+        return FALSE;
+    if (memcmp(name, commaList, nameLen) == 0)
+        {
+	c = commaList[nameLen];
+	if (c == 0 || c == ',')
+	    return TRUE;
+	}
+    commaList = strchr(commaList, ',');
+    if (commaList == NULL)
+        return FALSE;
+    commaList += 1;
+    }
+}
+
diff --git a/gbtools/src/blatSrc/lib/oldGff.c b/gbtools/src/blatSrc/lib/oldGff.c
new file mode 100644
index 0000000..602d2b2
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/oldGff.c
@@ -0,0 +1,643 @@
+/* oldGff - module for reading GFFs.  This is largely if not
+ * entirely superceded by the gff module. 
+ *
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "dnautil.h"
+#include "oldGff.h"
+#include "dnaseq.h"
+#include "htmshell.h"
+#include "portable.h"
+#include "localmem.h"
+
+
+#define errfile stdout
+
+static char _gffIdent[] = "##gff-version";
+
+struct gffSegLine
+    {
+    char seqname[64];   /* Name of DNA sequence this refers to. */
+    char source[64];	/* Who put this segment here... */
+    char feature[64];      /* CDS, E, I, exon, intron, ??? */
+    long start, end;   /* Offsets into DNA array, end inclusive */
+    char score[62];	/* A number between 0 and 1 */
+    char strand[4];	/* + or - */
+    char frame[4];     /* 0, 1, 2, or . */
+    char group[128];  /* Name of gene  cosmid.number. */
+    };
+
+static int gffSegLineScan(struct gff* gff, struct gffSegLine *seg)
+{
+    int scanned = sscanf(gff->buf, "%s %s %s %ld %ld %s %1s %s %s",
+	seg->seqname, seg->source, seg->feature,
+	&seg->start, &seg->end,
+	seg->score, seg->strand, seg->frame, seg->group);
+    return scanned;
+}
+
+static boolean _gffGetLine(struct gff *gff)
+/* Get the next line into a gff file.  (private)
+ * return FALSE at EOF or if problem. */
+{
+char *s;
+s = fgets(gff->buf, gff->bufSize, gff->file);
+if (s == NULL)
+    {
+    return FALSE;
+    }
+gff->bytesInBuf = strlen(gff->buf);
+gff->readIx = 0;
+gff->lineNumber += 1;
+return TRUE;
+}
+
+static boolean _gffSeekDoubleSharpLine(struct gff *gff)
+/* Go find next line that begins with ## */
+{
+for (;;)
+    {
+    if (!_gffGetLine(gff)) return FALSE;
+    if (gff->bytesInBuf >= 2)
+	if (gff->buf[0] == '#' && gff->buf[1] == '#') 
+		return TRUE;
+    }
+}
+
+boolean gffOpen(struct gff *gff, char *fileName)
+/* Initialize gff structure and open file for it. */
+{
+    dnaUtilOpen();
+
+    /* Initialize structure and open file. */
+    zeroBytes(gff, sizeof(*gff));
+    gff->memPool = lmInit(16*1024);
+    gff->fileSize = fileSize(fileName);
+    if (gff->fileSize < 0 ||
+       (gff->file = fopen(fileName, "rb")) == NULL)
+	    {
+            warn("Couldn't find the file named %s\n", fileName);
+	    return FALSE;
+	    }
+    strcpy(gff->fileName, fileName);
+    gff->bufSize = ArraySize(gff->buf);
+
+    /* Make sure it's a gff file. */
+    _gffSeekDoubleSharpLine(gff);
+    if (strncmp(gff->buf, _gffIdent, strlen(_gffIdent)) != 0)
+	{
+	warn("%s doesn't appear to be a .gff file\n", fileName);
+	return FALSE;
+	}
+
+    return TRUE;
+}
+
+void gffClose(struct gff *gff)
+/* Close down gff structure. */
+{
+if (gff->file != NULL)
+    fclose(gff->file);
+freeMem(gff->dna);
+lmCleanup(&gff->memPool);
+zeroBytes(gff, sizeof(*gff));
+}
+
+#if 0 /* unused */
+static boolean _gffAtEof(struct gff *gff)
+/* Returns TRUE if at the end of gff file. */
+{
+return gff->file == NULL;
+}
+#endif	
+
+#if 0 /* unused */
+static char _getGffChar(struct gff *gff)
+/* Return next byte (not next base) in gff file. Return zero
+ * if at end of file. */
+{
+if (gff->readIx >= gff->bytesInBuf)
+	{
+	if (!_gffGetLine(gff)) return 0;
+	}
+return gff->buf[gff->readIx++];
+}
+#endif
+
+static boolean _gffSeekDna(struct gff *gff)
+/* Skip through file until you get the DNA */ 
+{
+static char dnaIdent[] = "##DNA";
+
+rewind(gff->file);
+for (;;)
+    {
+    if (!_gffGetLine(gff)) return FALSE;
+    if (strncmp(gff->buf, dnaIdent, strlen(dnaIdent)) == 0)
+	{
+	sscanf(gff->buf, "##DNA %s", gff->dnaName);
+	gff->bytesInBuf = 0; /* We're done with gff line. */
+	return TRUE;
+	}
+    }
+}
+
+static boolean gffNextDnaLine(struct gff *gff)
+/* Fetches next line of DNA. */
+{
+static char endIdent[] = "##end-DNA";
+
+if (!_gffSeekDoubleSharpLine(gff)) 
+    return FALSE;
+/* Check to see if have reached end of DNA sequence */
+if (strncmp(gff->buf, endIdent, strlen(endIdent))==0)
+    {
+    gff->bytesInBuf = 0; /* We're done with gff line. */
+    return FALSE;
+    }
+return TRUE;
+}
+
+boolean gffReadDna(struct gff *gff)
+/* Read all the DNA in a file. */
+{
+long dnaSize = 0;
+DNA *dna;
+DNA *line;
+int lineCount;
+DNA b;
+if (gff->dna != NULL)
+	return TRUE; /* We already read it. */
+if (!_gffSeekDna(gff))
+	return FALSE;
+if ((gff->dna = wantMem(gff->fileSize)) == NULL)
+    {
+    warn("Couldn't allocate %ld bytes for DNA\n",
+    	gff->fileSize);
+    return FALSE;
+    }
+dna = gff->dna;
+for (;;)
+    {
+    if (!gffNextDnaLine(gff))
+        break;
+    line = gff->buf + gff->readIx;
+    lineCount = gff->bytesInBuf-gff->readIx;
+    while (--lineCount >= 0)
+        {
+        b = *line++;
+        if ((b = ntChars[(int)b]) != 0)
+            {
+            *dna++ = b;
+            dnaSize += 1;
+            }
+        }
+    }
+gff->dnaSize = dnaSize;
+return TRUE;
+}
+
+struct gffGene *gffFindGene(struct gff *gff, char *geneName)
+/* Find gene with given name.  Case sensitive. */
+{
+struct gffGene *g;
+
+for (g=gff->genes; g!=NULL; g=g->next)
+    {
+    if (strcmp(geneName, g->name) == 0)
+	return g;
+    }
+return NULL;
+}
+
+struct gffGene *gffFindGeneIgnoreCase(struct gff *gff, char *geneName)
+/* Find gene with given name.  Not case sensitive. */
+{
+struct gffGene *g;
+
+for (g=gff->genes; g!=NULL; g=g->next)
+    {
+    if (differentWord(geneName, g->name) == 0)
+	return g;
+    }
+return NULL;
+}
+
+/* Allocate memory and clear it to zero.  Report error
+ * and kill program if can't allocate it. */
+static void *gffNeedMem(struct gff *gff, int size)
+{
+return lmAlloc(gff->memPool, size);
+}
+
+static void gffSegmentInsertSort(struct gffSegment **plist, 
+	struct gffSegment *seg)
+/* Insert segment on list, keeping list ordered by start field 
+   parameters:
+         gffSegment **plist;	 Pointer to list. 
+         gffSegment *seg;	 Segment to insert 
+ */
+{
+struct gffSegment *next;
+long segStart = seg->start;
+
+for (;;)
+    {
+    next = *plist;
+    if (next == NULL)
+	break;
+    if (next->start > segStart)
+	break;
+    plist = &(next->next);
+    }
+seg->next = next;   
+*plist = seg;
+}
+
+static void offsetsFromExons(struct gffGene *gene)
+/* Figure out start and end offsets of gene from it's exons. */
+{
+GffExon *exon;
+long end = 0;
+long start = 0x7fffffff; /* I should use a .h file constant here... */
+for (exon = gene->exons; exon != NULL; exon = exon->next)
+    {
+    if (exon->start < start)
+	start = exon->start;
+    if (exon->end > end)
+	end = exon->end;
+    }
+gene->start = start;
+gene->end = end;
+}
+
+void gffPrintInfo(struct gff *gff, FILE *out)
+/* Print summary info about file. */
+{
+struct gffGene *gene;
+
+fprintf(out, "\n%s\n", gff->fileName);
+fprintf(out, "DNA %s (%ld bases)\n", 
+	gff->dnaName, gff->dnaSize);
+fprintf(out, "%d genes\n", slCount(gff->genes));
+for (gene = gff->genes; gene != NULL; gene = gene->next)
+    {
+    fprintf(out, "gene %s has %ld bases, %d exons, %d introns\n",
+	gene->name, gene->end - gene->start + 1,
+	slCount(gene->exons), slCount(gene->introns));
+    }
+}
+
+static boolean checkWordCount(struct gff *gff, int wordCount)
+{
+if (wordCount >= 9)
+    return TRUE;
+else
+    {
+    warn("???%s???\n", gff->buf);
+    warn("Can't handle line %d of %s.\n", 
+	    gff->lineNumber, gff->fileName);
+    return FALSE;
+    }
+}
+
+boolean gffReadGenes(struct gff *gff)
+/* Read all the gene (as opposed to base) info in file. */
+{
+int wordCount;
+struct gffSegLine seg;
+char curGroup[128];
+struct gffGene *gene = NULL;
+GffIntron *intron = NULL;
+GffExon *exon = NULL;
+boolean warnedUnknown = FALSE;
+boolean isNewGene;
+
+curGroup[0] = 0; /* Start off with no group */
+
+/* Line scanning loop. */
+for (;;)
+    {
+    /* Get next line and parse it into segLine data structure. */
+    if (!_gffGetLine(gff)) 
+	break;	 /* End of file. */
+    if (gff->buf[0] == '#')
+	continue; /* Ignore sharp containing lines. */
+    wordCount = gffSegLineScan(gff, &seg);
+    if (wordCount < 9)
+	continue; /* Ignore blank lines and short ones. */
+
+    /* Make sure that start is less than or equal end. */
+    if (seg.start > seg.end)
+	{
+	warn("start greater than end line %d of %s.\n",
+		gff->lineNumber, gff->fileName);
+	return FALSE;
+	}
+
+    /* Get the gene we're working on.  First see if
+     * it's the same as last time around. */
+    isNewGene = FALSE;
+    if (strcmp(seg.group, curGroup) != 0)
+	{
+	strcpy(curGroup, seg.group);
+	if ((gene = gffFindGene(gff, seg.group)) == NULL)
+	    {
+	    /* It's a new gene! */
+	    if (!checkWordCount(gff, wordCount)) return FALSE;
+	    isNewGene = TRUE;
+	    gene = gffNeedMem(gff, sizeof(*gene));
+	    strcpy(gene->name, seg.group);
+	    slAddTail(&gff->genes, gene); 
+	    gene->strand = seg.strand[0];
+	    gene->frame = atoi(seg.frame);
+	    if (differentWord(seg.feature, "CDS") == 0)
+		{
+		gene->start = seg.start-1;
+		gene->end = seg.end-1;
+		}
+	    }
+	}
+
+    /* Look at what sort of feature it is, and decide what to do. */
+
+    if (differentWord(seg.feature, "CDS")==0)
+	{
+	/* CDS (coding segments) have been processed already
+	 * for the most part. Here just make sure they aren't
+	 * duplicated. */
+	if (!checkWordCount(gff, wordCount)) return FALSE;
+	if (!isNewGene)
+	    {
+	    if (gene->start != 0 || gene->end != 0)
+		{
+		warn("Warning duplicate CDS for %s\n",
+			seg.group);
+		warn("Line %d of %s\n", 
+			gff->lineNumber, gff->fileName);
+		}
+	    }
+	}
+    else if (differentWord(seg.feature, "SE") == 0 
+	||   differentWord(seg.feature, "IE") == 0
+	||   differentWord(seg.feature, "FE") == 0
+	||   differentWord(seg.feature, "E") == 0
+	||   differentWord(seg.feature, "exon") == 0)
+	{
+	/* It's some sort of exon.  We'll deal with the complications
+	 * of it being possibly on the minus strand later, so can
+	 * tread initial, final, single, and regular exons the same
+	 * here. */
+	if (!checkWordCount(gff, wordCount)) return FALSE;
+	exon = gffNeedMem(gff, sizeof(*exon));
+	exon->start = seg.start-1;
+	exon->end = seg.end-1;
+	exon->frame = atoi(seg.frame);
+	gffSegmentInsertSort(&gene->exons, exon);
+	}
+    else if (differentWord(seg.feature, "I") == 0 
+	||   differentWord(seg.feature, "intron") == 0)
+	{
+	/* It's an intron. */
+	if (!checkWordCount(gff, wordCount)) return FALSE;
+	intron = gffNeedMem(gff, sizeof(*intron));
+	intron->start = seg.start-1;
+	intron->end = seg.end-1;
+	intron->frame = atoi(seg.frame);
+	gffSegmentInsertSort(&gene->introns, intron);
+	}
+    else if (strcmp(seg.feature, "IG")  == 0)
+	{
+	/* I don't know what it is, but we can ignore it. */
+	}
+    else
+	{
+	if (!warnedUnknown)
+	    {
+	    warn("Unknown feature %s line %d of %s, ignoring\n",
+		    seg.feature,  gff->lineNumber, gff->fileName);
+	    warnedUnknown = TRUE;
+	    }
+	}
+    }
+
+/* Fix up gene length from exons if needed. */
+for (gene = gff->genes; gene != NULL; gene = gene->next)
+    {
+    if (gene->start >= gene->end)
+	{
+	offsetsFromExons(gene);
+	}
+    }
+return TRUE;
+}
+
+static boolean geneDna(struct gff *gff, struct gffGene *gene,
+    int leftExtra, int rightExtra, char **retDna, long *retDnaSize,
+    int *retStartOffset)
+/* Allocate an array and fill it with dna from a gene. */
+{
+char *dna;
+char *pt;
+long geneSize;
+long i;
+long seqStart, seqEnd, seqSize;
+
+/* Filter out unreasonable looking genes - input to this
+ * program isn't totally clean. */
+geneSize = gene->end - gene->start + 1;
+if (geneSize <= 0 || geneSize >= 1000000)
+    return FALSE;  
+
+/* Figure out extents of DNA we're going to return.
+ * Return extra they ask for if possible, but clip
+ * it to what is actually in GFF file. */
+seqStart = gene->start - leftExtra;
+seqEnd = gene->end + rightExtra + 1;
+if (seqStart < 0)
+    seqStart = 0;
+if (seqEnd > gff->dnaSize)
+    seqEnd = gff->dnaSize;
+seqSize = seqEnd - seqStart;
+
+/* Allocate memory and fetch the dna. */
+dna = needMem(seqSize+1);
+pt = dna;
+for (i=0; i<seqSize; i++)
+    *pt++ = gff->dna[seqStart+i];
+*pt = 0;
+
+/* Report results back to caller. */
+*retDna = dna;
+*retDnaSize = seqSize;
+*retStartOffset = (gene->start - seqStart);
+return TRUE;
+}
+
+static void fixDirectionAndOffsets(struct gffGene *gene, char *dna, long dnaSize, int newStart)
+/* Reverse complement DNA if gene is on negative strand.
+ * Update offsets of exons and introns in gene to 
+ * make them point into dna, rather than into gff->dna. 
+ */
+{
+long oldStart;
+long offset;
+GffIntron *intron;
+GffExon *exon;
+long temp;
+
+oldStart = gene->start;
+offset = oldStart - newStart;
+gene->start -= offset;
+gene->end -= offset;
+for (intron = gene->introns; intron != NULL; intron = intron->next)
+    {
+    intron->start -= offset;
+    intron->end -= offset;
+    }
+for (exon = gene->exons; exon != NULL; exon = exon->next)
+    {
+    exon->start -= offset;
+    exon->end -= offset;
+    }
+if (gene->strand == '-')
+    {
+    reverseComplement(dna, dnaSize);
+    temp = reverseOffset(gene->start, dnaSize);
+    gene->start = reverseOffset(gene->end, dnaSize);
+    gene->end = temp;
+    for (intron = gene->introns; intron != NULL; intron = intron->next)
+	{
+	temp = reverseOffset(intron->start, dnaSize);
+	intron->start = reverseOffset(intron->end, dnaSize);
+	intron->end = temp;
+	}
+    for (exon = gene->exons; exon != NULL; exon = exon->next)
+	{
+	temp = reverseOffset(exon->start, dnaSize);
+	exon->start = reverseOffset(exon->end, dnaSize);
+	exon->end = temp;
+	}
+    slReverse(&gene->introns);
+    slReverse(&gene->exons);
+    gene->strand = '+';
+    }
+}
+
+static struct gffSegment *dupeSegmentList(struct gffSegment *oldList,
+	struct gffSegment *newList)
+/* Duplicate a segment list into array of fresh memory. */
+{
+struct gffSegment *oldEl, *newEl;
+
+if (oldList == NULL)
+    return NULL;
+for (oldEl = oldList, newEl = newList; oldEl != NULL; oldEl=oldEl->next, newEl += 1)
+    {
+    memcpy(newEl, oldEl, sizeof(*newEl));
+    newEl->next = ((oldEl->next == NULL) ? NULL : newEl+1);
+    }
+return newList;
+}
+
+struct gffGene *gffDupeGeneAndSurrounds(struct gff *gff, struct gffGene *oldGene,
+    int leftExtra, int rightExtra)
+/* Make a duplicate of gene with extra DNA around coding region. 
+ * gffFreeGene it when done. */
+/* In a perhaps hair brained scheme to save some cycles,
+ * the memory allocation of the intron and exon lists
+ * is shared with that of the gffGene itself. */
+{
+struct gffGene *g;
+int intronCount = slCount(oldGene->introns);
+int exonCount = slCount(oldGene->exons);
+int memSize = sizeof(*g) + (intronCount + exonCount) * sizeof(struct gffSegment);
+char *memPt;
+int firstExonOffset;
+
+
+memPt = needMem(memSize);
+g = (struct gffGene *)memPt;
+memPt += sizeof(*g);
+g->exons = (struct gffSegment *)memPt;
+memPt += exonCount*sizeof(struct gffSegment);
+g->introns = (struct gffSegment *)memPt;
+
+g->next = NULL;
+g->start = oldGene->start;
+g->end = oldGene->end;
+g->strand = oldGene->strand;
+memcpy(g->name, oldGene->name, sizeof(g->name));
+g->exons = dupeSegmentList(oldGene->exons, g->exons);
+g->introns = dupeSegmentList(oldGene->introns, g->introns);
+if (!geneDna(gff, oldGene, leftExtra, rightExtra, 
+    &g->dna, &g->dnaSize, &firstExonOffset))
+    {
+    gffFreeGene(&g);
+    return NULL;
+    }
+fixDirectionAndOffsets(g, g->dna, g->dnaSize, firstExonOffset);
+return g;
+}
+
+struct gffGene *gffDupeGene(struct gff *gff, struct gffGene *oldGene)
+/* Make a duplicate of gene (with it's own DNA) */
+{
+return gffDupeGeneAndSurrounds(gff, oldGene, 0, 0);
+}
+
+struct gffGene *gffGeneWithOwnDna(struct gff *gff, char *geneName)
+/* Find gene with given name.  Case sensitive. */
+{
+struct gffGene *oldGene;
+
+oldGene = gffFindGeneIgnoreCase(gff, geneName);
+if (oldGene == NULL)
+    return NULL;
+return gffDupeGene(gff, oldGene);
+}
+
+void gffFreeGene(struct gffGene **pGene)
+/* Free a gene returned with dupeGene or geneWithOwnDna. 
+ * (You don't want to free the ones returned by findGene,
+ * they are still owned by the gff.)
+ */
+{
+struct gffGene *g = *pGene;
+if (g == NULL)
+    return;
+freeMem(g->dna);
+freeMem(g);
+*pGene = NULL;
+}
+
+struct dnaSeq *gffReadDnaSeq(char *fileName)
+/* Open gff file and read DNA sequence from it. */
+{
+struct gff gff;
+struct dnaSeq *seq = NULL;
+
+if (!gffOpen(&gff, fileName))
+    return NULL;
+if (gffReadDna(&gff))
+    {
+    seq = newDnaSeq(gff.dna, gff.dnaSize, gff.dnaName);
+    gff.dna = NULL;
+    }
+gffClose(&gff);
+return seq;
+}
+
+boolean gffOpenAndRead(struct gff *gff, char *fileName)
+/* Open up gff file and read everything in it. */
+{
+if (gffOpen(gff, fileName))
+    if (gffReadDna(gff))
+	if (gffReadGenes(gff))
+	    return TRUE;
+gffClose(gff);
+return FALSE;
+}
diff --git a/gbtools/src/blatSrc/lib/oligoTm.c b/gbtools/src/blatSrc/lib/oligoTm.c
new file mode 100644
index 0000000..5a550f8
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/oligoTm.c
@@ -0,0 +1,333 @@
+/* oligoTm - calculate melting temperature of relatively short DNA sequences.
+ * This is based on the nearest-neighbor thermodynamics of bases from Breslauer,
+ * Frank, Bloecker, and Markey, Proc. Natl. Acad. Sci. USA, vol 83, page 3748,
+ * and uses work from see Rychlik, Spencer, Roads, Nucleic Acids Research, vol 18, 
+ * no 21.  This code was imported from the oligotm module of Whitehead Institute's
+ * primer3 program, and adapted into UCSC conventions by Jim Kent.  Any redistribution
+ * of this code should contain the following copyright notice from Whitehead:
+ *
+ * Copyright (c) 1996,1997,1998,1999,2000,2001,2004
+ *         Whitehead Institute for Biomedical Research. All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1.      Redistributions 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.  Redistributions of
+ * source code must also reproduce this information in the source code itself.
+ * 
+ * 2.      If the program is modified, redistributions must include a notice
+ * (in the same places as above) indicating that the redistributed program is
+ * not identical to the version distributed by Whitehead Institute.
+ * 
+ * 3.      All advertising materials mentioning features or use of this
+ * software  must display the following acknowledgment:
+ *         This product includes software developed by the
+ *         Whitehead Institute for Biomedical Research.
+ * 
+ * 4.      The name of the Whitehead Institute may not be used to endorse or
+ * promote products derived from this software without specific prior written
+ * permission.
+ * 
+ * We also request that use of this software be cited in publications as 
+ * 
+ *   Rozen, S., Skaletsky, H.  \"Primer3 on the WWW for general users
+ *   and for biologist programmers.\"  In S. Krawetz and S. Misener, eds.
+ *   Bioinformatics Methods and Protocols in the series Methods in 
+ *   Molecular Biology.  Humana Press, Totowa, NJ, 2000, pages 365-386.
+ *   Code available at
+ *   http://fokker.wi.mit.edu/primer3/.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE WHITEHEAD INSTITUTE ``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 WHITEHEAD INSTITUTE 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. */
+
+
+
+#include "common.h"
+#include "oligoTm.h"
+
+
+/* 
+ * Tables of nearest-neighbor thermodynamics for DNA bases.  See Breslauer,
+ * Frank, Bloecker, and Markey, Proc. Natl. Acad. Sci. USA, vol 83, page 3748,
+ * table 2.
+ */
+#define S_A_A 240
+#define S_A_C 173
+#define S_A_G 208
+#define S_A_T 239
+#define S_A_N 215
+  
+#define S_C_A 129
+#define S_C_C 266
+#define S_C_G 278
+#define S_C_T 208
+#define S_C_N 220  
+  
+#define S_G_A 135
+#define S_G_C 267
+#define S_G_G 266
+#define S_G_T 173
+#define S_G_N 210
+  
+#define S_T_A 169
+#define S_T_C 135
+#define S_T_G 129
+#define S_T_T 240
+#define S_T_N 168
+  
+#define S_N_A 168
+#define S_N_C 210
+#define S_N_G 220
+#define S_N_T 215
+#define S_N_N 203
+
+
+#define H_A_A  91
+#define H_A_C  65
+#define H_A_G  78
+#define H_A_T  86
+#define H_A_N  80
+
+#define H_C_A  58
+#define H_C_C 110
+#define H_C_G 119
+#define H_C_T  78
+#define H_C_N  91
+
+#define H_G_A  56
+#define H_G_C 111
+#define H_G_G 110
+#define H_G_T  65
+#define H_G_N  85
+
+#define H_T_A  60
+#define H_T_C  56
+#define H_T_G  58
+#define H_T_T  91
+#define H_T_N  66
+
+#define H_N_A  66
+#define H_N_C  85
+#define H_N_G  91
+#define H_N_T  80
+#define H_N_N  80
+
+/* Delta G's of disruption * 1000. */
+#define G_A_A  1900
+#define G_A_C  1300
+#define G_A_G  1600
+#define G_A_T  1500
+#define G_A_N  1575
+
+#define G_C_A  1900 
+#define G_C_C  3100
+#define G_C_G  3600
+#define G_C_T  1600
+#define G_C_N  2550
+
+#define G_G_A  1600
+#define G_G_C  3100
+#define G_G_G  3100
+#define G_G_T  1300
+#define G_G_N  2275
+
+#define G_T_A   900
+#define G_T_C  1600
+#define G_T_G  1900
+#define G_T_T  1900
+#define G_T_N  1575
+
+#define G_N_A  1575
+#define G_N_C  2275
+#define G_N_G  2550
+#define G_N_T  1575
+#define G_N_N  1994
+
+#define A_CHAR 'A'
+#define G_CHAR 'G'
+#define T_CHAR 'T'
+#define C_CHAR 'C'
+#define N_CHAR 'N'
+
+#define CATID5(A,B,C,D,E) A##B##C##D##E
+#define CATID2(A,B) A##B
+#define DO_PAIR(LAST,THIS)          \
+  if (CATID2(THIS,_CHAR) == c) {    \
+     dh += CATID5(H,_,LAST,_,THIS); \
+     ds += CATID5(S,_,LAST,_,THIS); \
+     goto CATID2(THIS,_STATE);      \
+  }
+
+#define STATE(LAST)     \
+   CATID2(LAST,_STATE): \
+   c = *s; s++;         \
+   DO_PAIR(LAST,A)      \
+   else DO_PAIR(LAST,T) \
+   else DO_PAIR(LAST,G) \
+   else DO_PAIR(LAST,C) \
+   else DO_PAIR(LAST,N) \
+   else if ('\0' == c)  \
+             goto DONE; \
+   else goto ERROR \
+
+double oligoTm(char *dna, double DNA_nM, double K_mM)
+/* Calculate melting point of short DNA sequence given DNA concentration in 
+ * nanomoles, and salt concentration in millimoles.  This is calculated using eqn
+ * (ii) in Rychlik, Spencer, Roads, Nucleic Acids Research, vol 18, no 21, page
+ * 6410, with tables of nearest-neighbor thermodynamics for DNA bases as
+ * provided in Breslauer, Frank, Bloecker, and Markey,
+ * Proc. Natl. Acad. Sci. USA, vol 83, page 3748. */
+{
+    register int dh = 0, ds = 108;
+    register char c;
+    char *dupe = cloneString(dna);
+    char *s = dupe;
+    double delta_H, delta_S;
+
+    touppers(s);
+    /* Use a finite-state machine (DFA) to calucluate dh and ds for s. */
+    c = *s; s++;
+    if (c == 'A') goto A_STATE;
+    else if (c == 'G') goto G_STATE;
+    else if (c == 'T') goto T_STATE;
+    else if (c == 'C') goto C_STATE;
+    else if (c == 'N') goto N_STATE;
+    else goto ERROR;
+    STATE(A);
+    STATE(T);
+    STATE(G);
+    STATE(C);
+    STATE(N);
+
+    DONE:  /* dh and ds are now computed for the given sequence. */
+    delta_H = dh * -100.0;  /* 
+			     * Nearest-neighbor thermodynamic values for dh
+			     * are given in 100 cal/mol of interaction.
+			     */
+    delta_S = ds * -0.1;     /*
+			      * Nearest-neighbor thermodynamic values for ds
+			      * are in in .1 cal/K per mol of interaction.
+			      */
+
+    /* 
+     * See Rychlik, Spencer, Roads, Nucleic Acids Research, vol 18, no 21,
+     * page 6410, eqn (ii).
+     */
+    freeMem(dupe);
+    return delta_H / (delta_S + 1.987 * log(DNA_nM/4000000000.0))
+	- 273.15 + 16.6 * log10(K_mM/1000.0);
+
+    ERROR:  /* 
+	  * length of s was less than 2 or there was an illegal character in
+	  * s.
+	  */
+    freeMem(dupe);
+    errAbort("Not a valid oligo in oligoTm.");
+    return 0;
+}
+#undef DO_PAIR
+
+#define DO_PAIR(LAST,THIS)          \
+  if (CATID2(THIS,_CHAR) == c) {    \
+     dg += CATID5(G,_,LAST,_,THIS); \
+     goto CATID2(THIS,_STATE);      \
+  }
+
+double oligoDg(char *dna)
+/* Calculate dg (change in Gibb's free energy) from melting oligo
+ * the nearest neighbor model. Seq should be relatively short, given 
+ * the characteristics of the nearest neighbor model (36 bases or less
+ * is best). */
+{
+    register int dg = 0;
+    register char c;
+    char *dupe = cloneString(dna);
+    char *s = dupe;
+
+    /* Use a finite-state machine (DFA) to calculate dg s. */
+    c = *s; s++;
+    if (c == 'A') goto A_STATE;
+    else if (c == 'G') goto G_STATE;
+    else if (c == 'T') goto T_STATE;
+    else if (c == 'C') goto C_STATE;
+    else if (c == 'N') goto N_STATE;
+    else goto ERROR;
+    STATE(A);
+    STATE(T);
+    STATE(G);
+    STATE(C);
+    STATE(N);
+
+    DONE:  /* dg is now computed for the given sequence. */
+    freeMem(dupe);
+    return dg / 1000.0;
+
+    ERROR:
+    freeMem(dupe);
+    errAbort("Not a valid oligo in oligoDg.");
+    return 0;
+}
+
+
+double longSeqTm(char *s, int start, int len, double salt_conc)
+/* Calculate the melting temperature of substr(seq, start, length) using the
+ * formula from Bolton and McCarthy, PNAS 84:1390 (1962) as presented in
+ * Sambrook, Fritsch and Maniatis, Molecular Cloning, p 11.46 (1989, CSHL
+ * Press).
+ *
+ * Tm = 81.5 + 16.6(log10([Na+])) + .41*(%GC) - 600/length
+ *
+ * Where [Na+] is the molar sodium concentration, (%GC) is the percent of Gs
+ * and Cs in the sequence, and length is the length of the sequence.
+ *
+ * A similar formula is used by the prime primer selection program in GCG
+ * (http://www.gcg.com), which instead uses 675.0 / length in the last term
+ * (after F. Baldino, Jr, M.-F. Chesselet, and M.E.  Lewis, Methods in
+ * Enzymology 168:766 (1989) eqn (1) on page 766 without the mismatch and
+ * formamide terms).  The formulas here and in Baldino et al. assume Na+ rather
+ * than K+.  According to J.G. Wetmur, Critical Reviews in BioChem. and
+ * Mol. Bio. 26:227 (1991) 50 mM K+ should be equivalent in these formulae to .2
+ * M Na+.
+ *
+ * This function takes salt_conc to be the millimolar (mM) concentration,
+ * since mM is the usual units in PCR applications.  */
+{
+  int GC_count = 0;
+  char *p, *end;
+
+  if(start + len > strlen(s) || start < 0 || len <= 0) 
+	errAbort("bad input to longSeqTm");
+  end = &s[start + len];
+  /* Length <= 0 is nonsensical. */
+  for (p = &s[start]; p < end; p++) {
+    if ('G' == *p || 'g' == *p || 'C' == *p || 'c' == *p)
+      GC_count++;
+  }
+
+  return
+    81.5
+    + (16.6 * log10(salt_conc / 1000.0))
+    + (41.0 * (((double) GC_count) / len))
+    - (600.0 / len);
+
+}
+
+double seqTm(char *seq, double dna_conc, double salt_conc)
+/* Figure out melting temperature of sequence of any length given
+ * dna and salt concentration. */
+{
+  int len = strlen(seq);
+  return (len > 36)
+    ? longSeqTm(seq, 0, len, salt_conc) : oligoTm(seq, dna_conc, salt_conc);
+}
diff --git a/gbtools/src/blatSrc/lib/options.c b/gbtools/src/blatSrc/lib/options.c
new file mode 100644
index 0000000..4d07d0a
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/options.c
@@ -0,0 +1,450 @@
+/* Options.c - stuff to handle command line options.
+ * This is smaller and more flexible than the cgiSpoof
+ * routines we used to use - though cgiSpoof is still the
+ * method of choice for actual CGI routines that want to
+ * be tested from the command line. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "hash.h"
+#include "verbose.h"
+#include "options.h"
+#include <limits.h>
+
+
+#ifdef MACHTYPE_alpha
+    #define strtoll strtol
+#endif
+
+static struct optionSpec commonOptions[] = {
+   {"verbose", OPTION_INT},
+   {NULL, 0},
+};
+
+static struct optionSpec *matchingOption(char *name, struct optionSpec *optionSpecs)
+/* Go through spec table and return spec that matches name, or NULL
+ * if none. */
+{
+while (optionSpecs->name != NULL)
+    {
+    if (sameString(optionSpecs->name, name))
+        return optionSpecs;
+    optionSpecs += 1;
+    }
+return NULL;
+}
+
+static void validateOption(char *name, char *val, struct optionSpec *optionSpecs)
+/* validate an option against a list of values */
+{
+char *valEnd;
+struct optionSpec *optionSpec = matchingOption(name, optionSpecs);
+if (optionSpec == NULL)
+    optionSpec = matchingOption(name, commonOptions);
+if (optionSpec == NULL)
+    errAbort("-%s is not a valid option", name);
+
+long long discardMe = 0;
+switch (optionSpec->flags & OPTION_TYPE_MASK) {
+case OPTION_BOOLEAN:
+    if (val != NULL)
+        errAbort("boolean option -%s must not have value", name);
+    break;
+case OPTION_STRING:
+    if (val == NULL)
+        errAbort("string option -%s must have a value", name);
+    break;
+case OPTION_INT:
+    if (val == NULL)
+        errAbort("int option -%s must have a value", name);
+    discardMe = strtol(val, &valEnd, 10);
+    if ((*val == '\0') || (*valEnd != '\0'))
+        errAbort("value of -%s is not a valid integer: \"%s\"",
+                 name, val);
+    break;
+case OPTION_LONG_LONG:
+    if (val == NULL)
+        errAbort("int option -%s must have a value", name);
+    discardMe = strtoll(val, &valEnd, 10);
+    if ((*val == '\0') || (*valEnd != '\0'))
+        errAbort("value of -%s is not a valid long long: \"%s\"",
+                 name, val);
+    break;
+case OPTION_FLOAT:
+    if (val == NULL)
+        errAbort("float option -%s must have a value", name);
+    discardMe = (long long)strtod(val, &valEnd);
+    if ((*val == '\0') || (*valEnd != '\0'))
+        errAbort("value of -%s is not a valid float: \"%s\"",
+                 name, val);
+    break;
+case OPTION_DOUBLE:
+    if (val == NULL)
+        errAbort("double option -%s must have a value", name);
+    discardMe = (long long)strtod(val, &valEnd);
+    if ((*val == '\0') || (*valEnd != '\0'))
+        errAbort("value of -%s is not a valid double: \"%s\"",
+                 name, val);
+    break;
+default:
+    errAbort("bug: invalid type in optionSpec for %s", optionSpec->name);
+}
+}
+
+static void parseMultiOption(struct hash *hash, char *name, char* val, struct optionSpec *spec)
+/* process multiple instances of an option, requres that the optionSpec of the option */
+{
+struct slName *valList;
+switch (spec->flags & OPTION_TYPE_MASK)
+    {
+    case OPTION_STRING:
+        valList = hashFindVal(hash, name);
+        if (valList == NULL)   /* first multi option */
+            {
+            valList = newSlName(val);
+            hashAdd(hash, name, valList);
+            }
+        else
+            {
+            struct slName *el = newSlName(val);
+            slAddTail(valList, el); /* added next multi option */
+            }
+        break;
+    default:
+        errAbort("UNIMPLEMENTED: multiple instances of a non-string option is not currently implemented");
+    }
+}
+
+static boolean parseAnOption(struct hash *hash, char *arg, struct optionSpec *optionSpecs, boolean keepNumbers)
+/* Parse a single option argument and add to the hash, validating if
+ * optionSpecs is not NULL.  Return TRUE if it's arg is an option argument
+ * FALSE if it's not.  If boolean keepNumbers is set, then return FALSE 
+ * when encountering negative ints or floats.
+ */
+{
+char *name, *val;
+char *eqPtr = strchr(arg, '=');
+
+if (!((eqPtr != NULL) || (arg[0] == '-')))
+    return FALSE;  /* not an option */
+
+/* A dash by itself is not an option.   It can mean
+ * negative strand for some of the DNA oriented utilities. */
+if (arg[0] == '-' && (arg[1] == 0 || isspace(arg[1])))
+    return FALSE;
+
+if ((keepNumbers) && (arg[0] == '-'))
+    {
+    int i = 1;
+    int num_dec = 0;
+    int num_dig = 0;
+    int num_other = 0;
+    while (i < strlen(arg))
+	{
+	if (isdigit(arg[i]))
+	    num_dig++;
+	else if (arg[i] == '.')
+	    num_dec++;
+	else
+	    num_other++;
+	i++;
+	}
+	if ((num_dig > 0) && (num_dec < 2) && (num_other == 0))
+	    return FALSE;
+    }
+
+/* We treat this=that as an option only if the '=' happens before any non-alphanumeric
+ * characters.  This lets us have URLs and SQL statements in the command line even though
+ * they can have equals in them. */
+if (eqPtr != NULL)
+    {
+    char *s, c;
+    for (s=arg; s < eqPtr; ++s)
+        {
+	c = *s;
+	if (c != '_' && c != '-' && !isalnum(c))
+	    return FALSE;
+	}
+    }
+
+name = arg;
+if (name[0] == '-')
+    name++;
+if (eqPtr != NULL)
+    {
+    *eqPtr = '\0';
+    val = eqPtr+1;
+    }
+else
+    val = NULL;
+
+if (optionSpecs != NULL)
+    validateOption(name, val, optionSpecs);
+if (val == NULL)
+    val = "on";
+if (optionSpecs == NULL)
+    hashAdd(hash, name, val);
+else
+    {
+    struct optionSpec *spec = matchingOption(name, optionSpecs);
+    if (spec != NULL && (spec->flags & OPTION_MULTI))    /* process multiple instances of option */
+        parseMultiOption(hash, name, val, spec);
+    else
+        hashAdd(hash, name, val);
+    }
+
+if (eqPtr != NULL)
+    *eqPtr = '=';
+return TRUE;
+}
+
+
+static struct hash *parseOptions(int *pArgc, char *argv[], boolean justFirst,
+                                 struct optionSpec *optionSpecs, boolean keepNumbers)
+/* Parse and optionally validate options */
+{
+int i, origArgc, newArgc = 1;
+char **rdPt = argv+1, **wrPt = argv+1;
+struct hash *hash = newHash(6);
+
+origArgc = *pArgc;
+
+/* parse arguments */
+for (i=1; i<origArgc; ++i)
+    {
+    if (sameString(*rdPt, "--"))
+        {
+        rdPt++;
+        i++;
+        break;
+        }
+    if (!parseAnOption(hash, *rdPt, optionSpecs, keepNumbers))
+        {
+        /* not an option */
+        if (justFirst)
+            break;
+        *wrPt++ = *rdPt;
+        newArgc++;
+        }
+    rdPt++;
+    }
+
+/* copy any remaining positional args */
+for (; i<origArgc; ++i)
+    {
+    *wrPt++ = *rdPt++;
+    newArgc++;
+    }
+
+*pArgc = newArgc;
+*wrPt = NULL; 
+return hash;
+}
+
+struct hash *optionParseIntoHash(int *pArgc, char *argv[], boolean justFirst)
+/* Read options in command line (only up to first real argument) into
+ * options hash.   Options come in three forms:
+ *      -option         words starting with dash
+ *      option=val      words with = in the middle
+ *      -option=val     combining the two.
+ * The resulting hash will be keyed by the option name with the val
+ * string for value.  For '-option' types the value is 'on'. */
+{
+return parseOptions(pArgc, argv, justFirst, NULL, FALSE);
+}
+
+struct hash *optionParseIntoHashExceptNumbers(int *pArgc, char *argv[], boolean justFirst)
+/* Read options in argc/argv into a hash (except negative numbers) of your own choosing. */
+{
+return parseOptions(pArgc, argv, justFirst, NULL, TRUE);
+}
+
+static struct hash *options = NULL;
+static struct optionSpec *optionSpecification = NULL;
+
+static void setOptions(struct hash *hash)
+/* Set global options hash to hash, and also do processing
+ * of log file and other common options. */
+{
+options = hash;
+if (optionExists("verbose"))
+    verboseSetLevel(optionInt("verbose", 0));
+}
+
+void optionHashSome(int *pArgc, char *argv[], boolean justFirst)
+/* Set up option hash from command line, optionally only adding
+ * up to first non-optional word. */
+{
+if (options == NULL)
+    {
+    struct hash *hash = parseOptions(pArgc, argv, justFirst, NULL, FALSE);
+    setOptions(hash);
+    }
+}
+
+void optionHash(int *pArgc, char *argv[])
+/* Read options in command line into options hash.   
+ * Options come in three forms:
+ *      -option         words starting with dash
+ *      option=val      words with = in the middle
+ *      -option=val     combining the two.
+ * The resulting hash will be keyed by the option name with the val
+ * string for value.  For '-option' types the value is 'on'. */
+{
+optionHashSome(pArgc, argv, FALSE);
+}
+
+void optionFree()
+/* free the option hash */
+{
+freeHash(&options);
+}
+
+void optionInit(int *pArgc, char *argv[], struct optionSpec *optionSpecs)
+/* Read options in command line into options hash.
+ * Options come in three forms:
+ *      -option         words starting with dash
+ *      option=val      words with = in the middle
+ *      -option=val     combining the two.
+ * The resulting hash will be keyed by the option name with the val
+ * string for value.  For '-option' types the value is 'on'.
+ * The words in argv are parsed in assending order.  If a word of
+ * "--" is encountered, argument parsing stops.
+ * If optionSpecs is not NULL, it is an array of optionSpec that are
+ * used to validate the options.  An option must exist in the array
+ * and the value must be convertable to the type specified in flags.
+ * Boolean options must no value, all other options must have one.
+ * Array is terminated by a optionSpec with a NULL name.
+ * If array NULL, no validation is done.
+ */
+{
+if (options == NULL)
+    {
+    struct hash *hash = parseOptions(pArgc, argv, FALSE, optionSpecs, FALSE);
+    setOptions(hash);
+    optionSpecification = optionSpecs;
+    }
+}
+
+static char *optGet(char *name)
+/* Lookup option name.  Complain if options hash not set. */
+{
+if (options == NULL)
+    errAbort("optGet called before optionHash");
+return hashFindVal(options, name);
+}
+ 
+char *optionVal(char *name, char *defaultVal)
+/* Return named option if in options hash, otherwise default. */
+{
+char *ret;
+/* if a optionSpec was used, make sure this option is not a multi option */
+if(optionSpecification != NULL) 
+    {
+    struct optionSpec *spec = matchingOption(name, optionSpecification);
+    if(spec != NULL && (spec->flags & OPTION_MULTI))    
+        errAbort("ERROR: optionVal cannot be used to get the value of an OPTION_MULTI");
+    }
+
+ret = optGet(name);
+if (ret == NULL)
+     ret = defaultVal;
+return ret;
+}
+
+int optionInt(char *name, int defaultVal)
+/* Return integer value of named option, or default value
+ * if not set. */
+{
+char *s = optGet(name);
+char *valEnd;
+long lval;
+if (s == NULL)
+    return defaultVal;
+if (sameString(s,"on"))
+    return defaultVal;
+lval = strtol(s, &valEnd, 10);  // use strtol since strtoi does not exist
+if ((*s == '\0') || (*valEnd != '\0'))
+    errAbort("value of -%s is not a valid integer: \"%s\"", name, s);
+if (lval > INT_MAX)
+    errAbort("value of -%s is is too large: %ld, integer maximum is %d", name, lval, INT_MAX);
+if (lval < INT_MIN)
+    errAbort("value of -%s is is too small: %ld, integer minimum is %d", name, lval, INT_MIN);
+return lval;
+}
+
+long long optionLongLong(char *name, long long defaultVal)
+/* Return long long value of named option, or default value
+ * if not set. */
+{
+char *s = optGet(name);
+char *valEnd;
+long long val;
+if (s == NULL)
+    return defaultVal;
+if (sameString(s,"on"))
+    return defaultVal;
+val = strtoll(s, &valEnd, 10);
+if ((*s == '\0') || (*valEnd != '\0'))
+    errAbort("value of -%s is not a valid long long: \"%s\"", name, s);
+return val;
+}
+
+float optionFloat(char *name, float defaultVal)
+/* Return floating point value or default value if not set. */
+{
+char *s = optGet(name);
+char *valEnd;
+float val;
+if (s == NULL)
+    return defaultVal;
+
+val = strtod(s, &valEnd);
+if ((*s == '\0') || (*valEnd != '\0'))
+    errAbort("value of -%s is not a valid float: \"%s\"", name, s);
+return val;
+}
+
+struct slName *optionMultiVal(char *name, struct slName *defaultVal)
+/* Return named option if in options hash, otherwise default. */
+{
+struct slName *ret;
+if(optionSpecification == NULL)
+    errAbort("ERROR: optionMultiVal can only be used after optionInit is called "
+             "with a non-NULL optionSpecs");
+
+ret = hashFindVal(options, name);
+if (ret == NULL)
+     ret = defaultVal;
+return ret;
+}
+
+double optionDouble(char *name, double defaultVal)
+/* Return double value or default value if not set */
+{
+char *s = optGet(name);
+char *valEnd;
+double val;
+if (s == NULL)
+    return defaultVal;
+
+val = strtod(s, &valEnd);
+if ((*s == '\0') || (*valEnd != '\0'))
+    errAbort("value of -%s is not a valid double: \"%s\"", name, s);
+return val;
+}
+
+boolean optionExists(char *name)
+/* Return TRUE if option has been set. */
+{
+return optGet(name) != NULL;
+}
+
+void optionMustExist(char *name)
+/* Abort if option has not been set. */
+{
+if (optGet(name) == NULL)
+    errAbort("Missing required command line flag %s", name);
+}
diff --git a/gbtools/src/blatSrc/lib/osunix.c b/gbtools/src/blatSrc/lib/osunix.c
new file mode 100644
index 0000000..2a9a85a
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/osunix.c
@@ -0,0 +1,711 @@
+/* Some wrappers around operating-system specific stuff. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include <dirent.h>
+#include <sys/utsname.h>
+#include <sys/time.h>
+#include <sys/statvfs.h>
+#include <pwd.h>
+#include <termios.h>
+#include "portable.h"
+#include "portimpl.h"
+#include <sys/wait.h>
+#include <regex.h>
+#include <utime.h>
+
+
+
+
+off_t fileSize(char *pathname)
+/* get file size for pathname. return -1 if not found */
+{
+struct stat mystat;
+ZeroVar(&mystat);
+if (stat(pathname,&mystat)==-1)
+    {
+    return -1;
+    }
+return mystat.st_size;
+}
+
+long long freeSpaceOnFileSystem(char *path)
+/* Given a path to a file or directory on a file system,  return free space
+ * in bytes. */
+{
+struct statvfs fi;
+int err = statvfs(path,&fi);
+if (err < 0)
+    errnoAbort("freeSpaceOnFileSystem could not statvfs");
+return (long long)fi.f_bsize * fi.f_bavail;
+}
+
+long clock1000()
+/* A millisecond clock. */
+{
+struct timeval tv;
+static long origSec;
+gettimeofday(&tv, NULL);
+if (origSec == 0)
+    origSec = tv.tv_sec;
+return (tv.tv_sec-origSec)*1000 + tv.tv_usec / 1000;
+}
+
+void sleep1000(int milli)
+/* Sleep for given number of 1000ths of second */
+{
+if (milli > 0)
+    {
+    struct timeval tv;
+    tv.tv_sec = milli/1000;
+    tv.tv_usec = (milli%1000)*1000;
+    select(0, NULL, NULL, NULL, &tv);
+    }
+}
+
+long clock1()
+/* A seconds clock. */
+{
+struct timeval tv;
+gettimeofday(&tv, NULL);
+return tv.tv_sec;
+}
+
+void uglyfBreak()
+/* Go into debugger. */
+{
+static char *nullPt = NULL;
+nullPt[0] = 0;
+}
+
+char *getCurrentDir()
+/* Return current directory.  Abort if it fails. */
+{
+static char dir[PATH_LEN];
+
+if (getcwd( dir, sizeof(dir) ) == NULL )
+    errnoAbort("getCurrentDir: can't get current directory");
+return dir;
+}
+
+void setCurrentDir(char *newDir)
+/* Set current directory.  Abort if it fails. */
+{
+if (chdir(newDir) != 0)
+    errnoAbort("setCurrentDir: can't to set current directory: %s", newDir);
+}
+
+boolean maybeSetCurrentDir(char *newDir)
+/* Change directory, return FALSE (and set errno) if fail. */
+{
+return chdir(newDir) == 0;
+}
+
+struct slName *listDir(char *dir, char *pattern)
+/* Return an alphabetized list of all files that match 
+ * the wildcard pattern in directory. */
+{
+struct slName *list = NULL, *name;
+struct dirent *de;
+DIR *d;
+
+if ((d = opendir(dir)) == NULL)
+    return NULL;
+while ((de = readdir(d)) != NULL)
+    {
+    char *fileName = de->d_name;
+    if (differentString(fileName, ".") && differentString(fileName, ".."))
+	{
+	if (pattern == NULL || wildMatch(pattern, fileName))
+	    {
+	    name = newSlName(fileName);
+	    slAddHead(&list, name);
+	    }
+	}
+    }
+closedir(d);
+slNameSort(&list);
+return list;
+}
+
+struct slName *listDirRegEx(char *dir, char *regEx, int flags)
+/* Return an alphabetized list of all files that match 
+ * the regular expression pattern in directory.
+ * See REGCOMP(3) for flags (e.g. REG_ICASE)  */
+{
+struct slName *list = NULL, *name;
+struct dirent *de;
+DIR *d;
+regex_t re;
+int err = regcomp(&re, regEx, flags | REG_NOSUB);
+if(err)
+    errAbort("regcomp failed; err: %d", err);
+
+if ((d = opendir(dir)) == NULL)
+    return NULL;
+while ((de = readdir(d)) != NULL)
+    {
+    char *fileName = de->d_name;
+    if (differentString(fileName, ".") && differentString(fileName, ".."))
+	{
+	if (!regexec(&re, fileName, 0, NULL, 0))
+	    {
+	    name = newSlName(fileName);
+	    slAddHead(&list, name);
+	    }
+	}
+    }
+closedir(d);
+regfree(&re);
+slNameSort(&list);
+return list;
+}
+
+struct fileInfo *newFileInfo(char *name, off_t size, bool isDir, int statErrno, 
+	time_t lastAccess)
+/* Return a new fileInfo. */
+{
+int len = strlen(name);
+struct fileInfo *fi = needMem(sizeof(*fi) + len);
+fi->size = size;
+fi->isDir = isDir;
+fi->statErrno = statErrno;
+fi->lastAccess = lastAccess;
+strcpy(fi->name, name);
+return fi;
+}
+
+int cmpFileInfo(const void *va, const void *vb)
+/* Compare two fileInfo. */
+{
+const struct fileInfo *a = *((struct fileInfo **)va);
+const struct fileInfo *b = *((struct fileInfo **)vb);
+return strcmp(a->name, b->name);
+}
+
+boolean makeDir(char *dirName)
+/* Make dir.  Returns TRUE on success.  Returns FALSE
+ * if failed because directory exists.  Prints error
+ * message and aborts on other error. */
+{
+int err;
+if ((err = mkdir(dirName, 0777)) < 0)
+    {
+    if (errno != EEXIST)
+	{
+	perror("");
+	errAbort("Couldn't make directory %s", dirName);
+	}
+    return FALSE;
+    }
+return TRUE;
+}
+
+
+struct fileInfo *listDirXExt(char *dir, char *pattern, boolean fullPath, boolean ignoreStatFailures)
+/* Return list of files matching wildcard pattern with
+ * extra info. If full path is true then the path will be
+ * included in the name of each file. */
+{
+struct fileInfo *list = NULL, *el;
+struct dirent *de;
+DIR *d;
+int dirNameSize = strlen(dir);
+int fileNameOffset = dirNameSize+1;
+char pathName[512];
+
+if ((d = opendir(dir)) == NULL)
+    return NULL;
+memcpy(pathName, dir, dirNameSize);
+pathName[dirNameSize] = '/';
+
+while ((de = readdir(d)) != NULL)
+    {
+    char *fileName = de->d_name;
+    if (differentString(fileName, ".") && differentString(fileName, ".."))
+	{
+	if (pattern == NULL || wildMatch(pattern, fileName))
+	    {
+	    struct stat st;
+	    bool isDir = FALSE;
+	    int statErrno = 0;
+	    strcpy(pathName+fileNameOffset, fileName);
+	    if (stat(pathName, &st) < 0)
+		{
+		if (ignoreStatFailures)
+		    statErrno = errno;
+		else
+    		    errAbort("stat failed in listDirX");
+		}
+	    if (S_ISDIR(st.st_mode))
+		isDir = TRUE;
+	    if (fullPath)
+		fileName = pathName;
+	    el = newFileInfo(fileName, st.st_size, isDir, statErrno, st.st_atime);
+	    slAddHead(&list, el);
+	    }
+	}
+    }
+closedir(d);
+slSort(&list, cmpFileInfo);
+return list;
+}
+
+struct fileInfo *listDirX(char *dir, char *pattern, boolean fullPath)
+/* Return list of files matching wildcard pattern with
+ * extra info. If full path is true then the path will be
+ * included in the name of each file. */
+{
+return listDirXExt(dir, pattern, fullPath, FALSE);
+}
+
+time_t fileModTime(char *pathName)
+/* Return file last modification time.  The units of
+ * these may vary from OS to OS, but you can depend on
+ * later files having a larger time. */
+{
+struct stat st;
+if (stat(pathName, &st) < 0)
+    errAbort("stat failed in fileModTime: %s", pathName);
+return st.st_mtime;
+}
+
+
+char *getHost()
+/* Return host name. */
+{
+static char *hostName = NULL;
+static char buf[128];
+if (hostName == NULL)
+    {
+    hostName = getenv("HTTP_HOST");
+    if (hostName == NULL)
+        {
+	hostName = getenv("HOST");
+	if (hostName == NULL)
+	    {
+	    if (hostName == NULL)
+		{
+		static struct utsname unamebuf;
+		if (uname(&unamebuf) >= 0)
+		    hostName = unamebuf.nodename;
+		else
+		    hostName = "unknown";
+		}
+	    }
+        }
+    strncpy(buf, hostName, sizeof(buf));
+    chopSuffix(buf);
+    hostName = buf;
+    }
+return hostName;
+}
+
+char *mysqlHost()
+/* Return host computer on network for mySQL database. */
+{
+boolean gotIt = FALSE;
+static char *host = NULL;
+if (!gotIt)
+    {
+    static char hostBuf[128];
+    gotIt = TRUE;
+    if (fileExists("mysqlHost"))
+	{
+	return (host = firstWordInFile("mysqlHost", hostBuf, sizeof(hostBuf)));
+	}
+    else
+	return (host = getenv("MYSQLHOST"));
+    }
+return host;
+}
+
+char *semiUniqName(char *base)
+/* Figure out a name likely to be unique.
+ * Name will have no periods.  Returns a static
+ * buffer, so best to clone result unless using
+ * immediately. */
+{
+int pid = getpid();
+int num = time(NULL)&0xFFFFF;
+char host[512];
+strcpy(host, getHost());
+char *s = strchr(host, '.');
+if (s != NULL)
+     *s = 0;
+subChar(host, '-', '_');
+subChar(host, ':', '_');
+static char name[PATH_LEN];
+safef(name, sizeof(name), "%s_%s_%x_%x",
+	base, host, pid, num);
+return name;
+}
+
+char *rTempName(char *dir, char *base, char *suffix)
+/* Make a temp name that's almost certainly unique. */
+{
+char *x;
+static char fileName[PATH_LEN];
+int i;
+char *lastSlash = (lastChar(dir) == '/' ? "" : "/");
+for (i=0;;++i)
+    {
+    x = semiUniqName(base);
+    safef(fileName, sizeof(fileName), "%s%s%s%d%s",
+    	dir, lastSlash, x, i, suffix);
+    if (!fileExists(fileName))
+        break;
+    }
+return fileName;
+}
+
+void mustRename(char *oldName, char *newName)
+/* Rename file or die trying. */
+{
+int err = rename(oldName, newName);
+if (err < 0)
+    errnoAbort("Couldn't rename %s to %s", oldName, newName);
+}
+
+void mustRemove(char *path)
+/* Remove file or die trying */
+{
+int err = remove(path);
+if (err < 0)
+    errnoAbort("Couldn't remove %s", path);
+}
+
+static void eatSlashSlashInPath(char *path)
+/* Convert multiple // to single // */
+{
+char *s, *d;
+s = d = path;
+char c, lastC = 0;
+while ((c = *s++) != 0)
+    {
+    if (c == '/' && lastC == c)
+        continue;
+    *d++ = c;
+    lastC = c;
+    }
+*d = 0;
+}
+
+static void eatExcessDotDotInPath(char *path)
+/* If there's a /.. in path take it out.  Turns 
+ *      'this/long/../dir/file' to 'this/dir/file
+ * and
+ *      'this/../file' to 'file'  
+ *
+ * and
+ *      'this/long/..' to 'this'
+ * and
+ *      'this/..' to  ''   
+ * and
+ *       /this/..' to '/' */
+{
+/* Take out each /../ individually */
+for (;;)
+    {
+    /* Find first bit that needs to be taken out. */
+    char *excess= strstr(path, "/../");
+    char *excessEnd = excess+4;
+    if (excess == NULL || excess == path)
+        break;
+
+    /* Look for a '/' before this */
+    char *excessStart = matchingCharBeforeInLimits(path, excess, '/');
+    if (excessStart == NULL) /* Preceding '/' not found */
+         excessStart = path;
+    else 
+         excessStart += 1;
+    strcpy(excessStart, excessEnd);
+    }
+
+/* Take out final /.. if any */
+if (endsWith(path, "/.."))
+    {
+    if (!sameString(path, "/.."))  /* We don't want to turn this to blank. */
+	{
+	int len = strlen(path);
+	char *excessStart = matchingCharBeforeInLimits(path, path+len-3, '/');
+	if (excessStart == NULL) /* Preceding '/' not found */
+	     excessStart = path;
+	else 
+	     excessStart += 1;
+	*excessStart = 0;
+	}
+    }
+}
+
+char *simplifyPathToDir(char *path)
+/* Return path with ~ and .. taken out.  Also any // or trailing /.   
+ * freeMem result when done. */
+{
+/* Expand ~ if any with result in newPath */
+char newPath[PATH_LEN];
+int newLen = 0;
+char *s = path;
+if (*s == '~')
+    {
+    char *homeDir = getenv("HOME");
+    if (homeDir == NULL)
+        errAbort("No HOME environment var defined after ~ in simplifyPathToDir");
+    ++s;
+    if (*s == '/')  /*    ~/something      */
+        {
+	++s;
+	safef(newPath, sizeof(newPath), "%s/", homeDir);
+	}
+    else            /*   ~something        */
+	{
+	safef(newPath, sizeof(newPath), "%s/../", homeDir);
+	}
+    newLen = strlen(newPath);
+    }
+int remainingLen  = strlen(s);
+if (newLen + remainingLen >= sizeof(newPath))
+    errAbort("path too big in simplifyPathToDir");
+strcpy(newPath+newLen, s);
+
+/* Remove //, .. and trailing / */
+eatSlashSlashInPath(newPath);
+eatExcessDotDotInPath(newPath);
+int lastPos = strlen(newPath)-1;
+if (lastPos > 0 && newPath[lastPos] == '/')
+    newPath[lastPos] = 0;
+
+return cloneString(newPath);
+}
+
+#ifdef DEBUG
+void simplifyPathToDirSelfTest()
+{
+/* First test some cases which should remain the same. */
+assert(sameString(simplifyPathToDir(""),""));
+assert(sameString(simplifyPathToDir("a"),"a"));
+assert(sameString(simplifyPathToDir("a/b"),"a/b"));
+assert(sameString(simplifyPathToDir("/"),"/"));
+assert(sameString(simplifyPathToDir("/.."),"/.."));
+assert(sameString(simplifyPathToDir("/../a"),"/../a"));
+
+/* Now test removing trailing slash. */
+assert(sameString(simplifyPathToDir("a/"),"a"));
+assert(sameString(simplifyPathToDir("a/b/"),"a/b"));
+
+/* Test .. removal. */
+assert(sameString(simplifyPathToDir("a/.."),""));
+assert(sameString(simplifyPathToDir("a/../"),""));
+assert(sameString(simplifyPathToDir("a/../b"),"b"));
+assert(sameString(simplifyPathToDir("/a/.."),"/"));
+assert(sameString(simplifyPathToDir("/a/../"),"/"));
+assert(sameString(simplifyPathToDir("/a/../b"),"/b"));
+assert(sameString(simplifyPathToDir("a/b/.."),"a"));
+assert(sameString(simplifyPathToDir("a/b/../"),"a"));
+assert(sameString(simplifyPathToDir("a/b/../c"),"a/c"));
+assert(sameString(simplifyPathToDir("a/../b/../c"),"c"));
+assert(sameString(simplifyPathToDir("a/../b/../c/.."),""));
+assert(sameString(simplifyPathToDir("/a/../b/../c/.."),"/"));
+
+/* Test // removal */
+assert(sameString(simplifyPathToDir("//"),"/"));
+assert(sameString(simplifyPathToDir("//../"),"/.."));
+assert(sameString(simplifyPathToDir("a//b///c"),"a/b/c"));
+assert(sameString(simplifyPathToDir("a/b///"),"a/b"));
+}
+#endif /* DEBUG */
+
+char *getUser()
+/* Get user name */
+{
+uid_t uid = geteuid();
+struct passwd *pw = getpwuid(uid);
+if (pw == NULL)
+    errnoAbort("getUser: can't get user name for uid %d", (int)uid);
+return pw->pw_name;
+}
+
+int mustFork()
+/* Fork or abort. */
+{
+int childId = fork();
+if (childId == -1)
+    errnoAbort("mustFork: Unable to fork");
+return childId;
+}
+
+int rawKeyIn()
+/* Read in an unbuffered, unechoed character from keyboard. */
+{
+struct termios attr;
+tcflag_t old;
+char c;
+
+/* Set terminal to non-echoing non-buffered state. */
+if (tcgetattr(STDIN_FILENO, &attr) != 0)
+    errAbort("Couldn't do tcgetattr");
+old = attr.c_lflag;
+attr.c_lflag &= ~ICANON;
+attr.c_lflag &= ~ECHO;
+if (tcsetattr(STDIN_FILENO, TCSANOW, &attr) == -1)
+    errAbort("Couldn't do tcsetattr");
+
+/* Read one byte */
+if (read(STDIN_FILENO,&c,1) != 1)
+   errnoAbort("rawKeyIn: I/O error");
+
+/* Put back terminal to how it was. */
+attr.c_lflag = old;
+if (tcsetattr(STDIN_FILENO, TCSANOW, &attr) == -1)
+    errAbort("Couldn't do tcsetattr2");
+return c;
+}
+
+boolean isPipe(int fd)
+/* determine in an open file is a pipe  */
+{
+struct stat buf;
+if (fstat(fd, &buf) < 0)
+    errnoAbort("isPipe: fstat failed");
+return S_ISFIFO(buf.st_mode);
+}
+
+void childExecFailedExit(char *msg)
+/* Child exec failed, so quit without atexit cleanup */
+{
+fprintf(stderr, "child exec failed: %s\n", msg);
+fflush(stderr);
+_exit(1);  // Let the parent know that the child failed by returning 1.
+
+/* Explanation:
+_exit() is not the normal exit().  
+_exit() avoids the usual atexit() cleanup.
+The MySQL library that we link to uses atexit() cleanup to close any open MySql connections.
+However, because the child's mysql connections are shared by the parent,
+this causes the parent MySQL connections to become invalid,
+and causes the puzzling "MySQL has gone away" error in the parent
+when it tries to use its now invalid MySQL connections.
+*/
+
+}
+
+static void execPStack(pid_t ppid)
+/* exec pstack on the specified pid */
+{
+char *cmd[3], pidStr[32];
+safef(pidStr, sizeof(pidStr), "%ld", (long)ppid);
+cmd[0] = "pstack";
+cmd[1] = pidStr;
+cmd[2] = NULL;
+
+// redirect stdout to stderr
+if (dup2(2, 1) < 0)
+    errAbort("dup2 failed");
+
+execvp(cmd[0], cmd);
+
+childExecFailedExit(cmd[0]); // cannot use the normal errAbort.
+
+}
+
+void vaDumpStack(char *format, va_list args)
+/* debugging function to run the pstack program on the current process. In
+ * prints a message, following by a new line, and then the stack track.  Just
+ * prints errors to stderr rather than aborts. For debugging purposes
+ * only.  */
+{
+static boolean inDumpStack = FALSE;  // don't allow re-entry if called from error handler
+if (inDumpStack)
+    return;
+inDumpStack = TRUE;
+
+fflush(stdout);  // clear buffer before forking
+vfprintf(stderr, format, args);
+fputc('\n', stderr);
+fflush(stderr);
+pid_t ppid = getpid();
+pid_t pid = fork();
+if (pid < 0)
+    {
+    perror("can't fork pstack");
+    return;
+    }
+if (pid == 0)
+    execPStack(ppid);
+int wstat;
+if (waitpid(pid, &wstat, 0) < 0)
+    perror("waitpid on pstack failed");
+else
+    {
+    if (WIFEXITED(wstat))
+        {
+        if (WEXITSTATUS(wstat) != 0)
+            fprintf(stderr, "pstack failed\n");
+        }
+    else if (WIFSIGNALED(wstat))
+        fprintf(stderr, "pstack signaled %d\n", WTERMSIG(wstat));
+    }
+inDumpStack = FALSE;
+}
+
+void dumpStack(char *format, ...)
+/* debugging function to run the pstack program on the current process. In
+ * prints a message, following by a new line, and then the stack track.  Just
+ * prints errors to stderr rather than aborts. For debugging purposes
+ * only.  */
+{
+va_list args;
+va_start(args, format);
+vaDumpStack(format, args);
+va_end(args);
+}
+
+boolean maybeTouchFile(char *fileName)
+/* If file exists, set its access and mod times to now.  If it doesn't exist, create it.
+ * Return FALSE if we have a problem doing so (e.g. when qateam is gdb'ing and code tries 
+ * to touch some file owned by www). */
+{
+if (fileExists(fileName))
+    {
+    struct utimbuf ut;
+    ut.actime = ut.modtime = clock1();
+    int ret = utime(fileName, &ut);
+    if (ret != 0)
+	{
+	warn("utime(%s) failed (ownership?)", fileName);
+	return FALSE;
+	}
+    }
+else
+    {
+    FILE *f = fopen(fileName, "w");
+    if (f == NULL)
+	return FALSE;
+    else
+	carefulClose(&f);
+    }
+return TRUE;
+}
+
+boolean isRegularFile(char *fileName)
+/* Return TRUE if fileName is a regular file. */
+{
+struct stat st;
+
+if (stat(fileName, &st) < 0)
+    return FALSE;
+if (S_ISREG(st.st_mode))
+    return TRUE;
+return FALSE;
+}
+
+void makeSymLink(char *oldName, char *newName)
+/* Return a symbolic link from newName to oldName or die trying */
+{
+int err = symlink(oldName, newName);
+if (err < 0)
+     errnoAbort("Couldn't make symbolic link from %s to %s\n", oldName, newName);
+}
+
diff --git a/gbtools/src/blatSrc/lib/oswin9x.c b/gbtools/src/blatSrc/lib/oswin9x.c
new file mode 100644
index 0000000..5087f5a
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/oswin9x.c
@@ -0,0 +1,98 @@
+/* Stuff that's specific for Win95 goes here. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+#include "common.h"
+#include <io.h>
+#include <direct.h>
+#include "portable.h"
+
+
+/* Return how long the named file is in bytes. 
+ * Return -1 if no such file. */
+off_t fileSize(char *fileName)
+{
+int fd;
+long size;
+fd = _open(fileName, _O_RDONLY, 0);
+if (fd < 0)
+    return -1;
+size = _lseek(fd, 0L, SEEK_END);
+_close(fd);
+return size;
+}
+
+long clock1000()
+/* A millisecond clock. */
+{
+return clock() /* 1000/CLOCKS_PER_SEC */;   /* CLOCKS_PER_SEC == 1000 for windows */
+}
+
+long clock1()
+/* Second clock. */
+{
+return clock()/CLOCKS_PER_SEC;
+}
+
+void uglyfBreak()
+/* Go into debugger. */
+{
+__asm { int 3 } /* uglyf */
+}
+
+char *getCurrentDir()
+/* Return current directory. */
+{
+static char dir[_MAX_PATH];
+
+if( _getcwd( dir, _MAX_PATH ) == NULL )
+    errnoAbort("can't get current directory");
+return dir;
+}
+
+void setCurrentDir(char *newDir)
+/* Set current directory.  Abort if it fails. */
+{
+if (_chdir(newDir) != 0)
+    errnoAbort("can't to set current directory: %s", newDir);
+}
+
+struct slName *listDir(char *dir, char *pattern)
+/* Return an alphabetized list of all files that match 
+ * the wildcard pattern in directory. */
+{
+long hFile;
+struct _finddata_t fileInfo;
+struct slName *list = NULL, *name;
+boolean otherDir = FALSE;
+char *currentDir;
+
+if (dir == NULL || sameString(".", dir) || sameString("", dir))
+    dir = "";
+else
+    {
+    currentDir = getCurrentDir();
+    setCurrentDir(dir);
+    otherDir = TRUE;
+    }
+
+if (pattern == NULL)
+    pattern = *;
+if( (hFile = _findfirst( pattern, &fileInfo)) == -1L )
+    return NULL;
+
+do
+    {
+    if (!sameString(".", fileInfo.name) && !sameString("..", fileInfo.name))
+        {
+        name = newSlName(fileInfo.name);
+        slAddHead(&list, name);
+        }
+    }
+while( _findnext( hFile, &fileInfo) == 0 );
+_findclose( hFile );
+if (otherDir)
+    setCurrentDir(currentDir);
+slNameSort(&list);
+return list;
+}
diff --git a/gbtools/src/blatSrc/lib/pairDistance.c b/gbtools/src/blatSrc/lib/pairDistance.c
new file mode 100644
index 0000000..2c42232
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/pairDistance.c
@@ -0,0 +1,80 @@
+/* pairDistance - help manage systems where you have a list of distances between pairs of
+ * elements */
+
+#include "common.h"
+#include "linefile.h"
+#include "hash.h"
+#include "pairDistance.h"
+#include "sqlNum.h"
+
+struct pairDistance *pairDistanceReadAll(char *fileName)
+/* Read in file of format <a> <b> <distance> into list of pairs */
+{
+struct lineFile *lf = lineFileOpen(fileName, TRUE);
+struct pairDistance *list = NULL, *pair;
+char *row[3];
+while (lineFileRow(lf, row))
+    {
+    AllocVar(pair);
+    pair->a = cloneString(row[0]);
+    pair->b = cloneString(row[1]);
+    pair->distance = sqlDouble(row[2]);
+    slAddHead(&list, pair);
+    }
+slReverse(&list);
+return list;
+}
+
+struct hash *pairDistanceHashList(struct pairDistance *pairList)
+/* Return hash of all pairs keyed by pairDistanceName function on pair with pair values */
+{
+struct hash *hash = hashNew(0);
+struct pairDistance *pair;
+for (pair = pairList; pair != NULL; pair = pair->next)
+    {
+    char name[2*PATH_LEN];
+    pairDistanceName(pair->a, pair->b, name, sizeof(name));
+    hashAdd(hash, name, pair);
+    pairDistanceName(pair->b, pair->a, name, sizeof(name));
+    hashAdd(hash, name, pair);
+    }
+return hash;
+}
+
+double pairDistanceHashLookup(struct hash *pairHash, char *aName, char *bName)
+/* Return distance between a and b. */
+{
+char name[2*PATH_LEN];
+pairDistanceName(aName, bName, name, sizeof(name));
+struct pairDistance *pair = hashMustFindVal(pairHash, name);
+return pair->distance;
+}
+
+void pairDistanceInvert(struct pairDistance *list)
+/* Go through and reverse distances, and make them positive. */
+{
+if (list == NULL)
+    return;
+double min = list->distance, max = list->distance;
+struct pairDistance *pair;
+for (pair = list; pair != NULL; pair = pair->next)
+    {
+    double distance = pair->distance;
+    if (distance < min) min = distance;
+    if (distance > max) max = distance;
+    }
+double range = max - min;
+for (pair = list; pair != NULL; pair = pair->next)
+    {
+    double old = pair->distance;
+    pair->distance = range - (old - min);
+    }
+}
+
+char *pairDistanceName(char *a, char *b, char *outBuf, int outBufSize)
+/* Return name for pair */
+{
+safef(outBuf, outBufSize, "%s\t%s", a, b);
+return outBuf;
+}
+
diff --git a/gbtools/src/blatSrc/lib/pairHmm.c b/gbtools/src/blatSrc/lib/pairHmm.c
new file mode 100644
index 0000000..67eda43
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/pairHmm.c
@@ -0,0 +1,346 @@
+/* pairHmm - stuff to help implement pairwise hidden markov models,
+ * which are useful ways of aligning two sequences. 
+ *
+ * This file is copyright 2000-2004 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "axt.h"
+#include "pairHmm.h"
+
+
+UBYTE phmmNullMommy = 0; /* mommy value for orphans.... */
+
+void phmmUnpackMommy(UBYTE mommy, int *retStateIx, int *retQoff, 
+	int *retToff)
+/* Unpack state, query, and target offset. */
+{
+*retStateIx = (mommy&31);
+*retQoff = -((mommy&32)>>5);
+*retToff = -((mommy&64)>>6);
+}
+
+struct phmmMatrix *phmmMatrixNew(int stateCount,
+    char *query, int querySize, char *target, int targetSize)
+/* Allocate all memory required for an phmmMatrix. Set up dimensions. */
+{
+int i;
+struct phmmMommy *allCells;
+int allCellSize;
+int rowSize;
+int *allScores;
+struct phmmMatrix *am;
+
+AllocVar(am);
+am->query = query;
+am->target = target;
+am->querySize = querySize;
+am->targetSize = targetSize;
+am->qDim = rowSize = am->querySize + 1;
+am->tDim = am->targetSize + 1;
+am->stateCount = stateCount;
+am->stateSize = rowSize * am->tDim;
+am->stateByteSize = am->stateSize * sizeof(struct phmmMommy);
+am->states = needMem(stateCount * sizeof(struct phmmState));
+
+/* Initialize matrix of cells for each state. */
+allCellSize = stateCount * am->stateByteSize;
+am->allCells = allCells = needLargeMem(allCellSize); 
+memset(allCells, 0, allCellSize);
+for (i=0; i<stateCount; ++i)
+    {
+    am->states[i].cells = allCells;
+    allCells += am->stateSize;
+    am->states[i].stateIx = i;
+    }
+
+/* Initialize two rows of scores for each state. */
+allScores = am->allScores = needMem(rowSize * 2 * stateCount * sizeof(int) );
+for (i=0; i<stateCount; ++i)
+    {
+    am->states[i].scores = allScores;
+    allScores += rowSize;
+    am->states[i].lastScores = allScores;
+    allScores += rowSize;
+    }
+return am;
+}
+
+void phmmMatrixFree(struct phmmMatrix **pAm)
+/* Free up memory required for an phmmMatrix and make sure
+ * nobody reuses it. */
+{
+struct phmmMatrix *am = *pAm;
+if (am != NULL)
+    {
+    freeMem(am->states);
+    freeMem(am->allCells);
+    freeMem(am->allScores);
+    freez(pAm);
+    }
+}
+
+struct phmmState *phmmNameState(struct phmmMatrix *am, int stateIx, 
+	char *name, char emitLetter)
+/* Give a name to a state and return a pointer to it. */
+{
+struct phmmState *state;
+assert(stateIx < am->stateCount);
+state = &am->states[stateIx];
+state->name = name;
+state->emitLetter = emitLetter;
+return state;
+}
+
+static void phmmFindMatrixIx(struct phmmMatrix *am, struct phmmMommy *cell, 
+	int *retStateIx, int *retQix, int *retTix)
+/* Given a cell in matrix return state, query, and target index. */
+{
+int cellIx = cell - am->allCells;
+*retStateIx = cellIx/am->stateSize;
+cellIx %= am->stateSize;
+*retTix = cellIx / am->qDim;
+*retQix = cellIx % am->qDim;
+}
+
+static struct phmmMommy *phmmFindMommy(struct phmmMatrix *am, 
+	struct phmmMommy *baby)
+/* Find baby's mommy and return it. */
+{
+int momStateIx, qOff, tOff;
+int babyStateIx, qIx, tIx;
+UBYTE mommy;
+
+if ((mommy = baby->mommy) == phmmNullMommy)
+    return NULL;
+phmmUnpackMommy(mommy, &momStateIx, &qOff, &tOff);
+phmmFindMatrixIx(am, baby, &babyStateIx, &qIx, &tIx);
+return am->states[momStateIx].cells + (tOff + tIx) * am->qDim + (qOff + qIx);
+}
+
+struct phmmAliPair
+/* Each position in alignment gets one of these. */
+    {
+    struct phmmAliPair *next;
+    int queryIx;
+    int targetIx;
+    UBYTE hiddenIx;  /* If I code one of these with more than 255 states shoot me! */
+    char querySym;
+    char targetSym;
+    char hiddenSym;
+    };
+
+struct phmmAliPair *phmmTraceBack(struct phmmMatrix *am, struct phmmMommy *end)
+/* Create list of alignment pair by tracing back through matrix from end
+ * state back to a start.*/
+{
+struct phmmAliPair *pairList = NULL, *pair;
+struct phmmMommy *cell, *parent = end;
+int parentSix, parentTix, parentQix;
+int sIx, tIx, qIx;
+
+phmmFindMatrixIx(am, parent, &parentSix, &parentQix, &parentTix);
+for (;;)
+    {
+    cell = parent;
+    sIx = parentSix;
+    tIx = parentTix;
+    qIx = parentQix;
+
+    if ((parent = phmmFindMommy(am, cell)) == NULL)
+        break;
+    phmmFindMatrixIx(am, parent, &parentSix, &parentQix, &parentTix);
+    
+    cell->mommy |= phmmMommyTraceBit;
+
+    AllocVar(pair);
+    pair->hiddenIx = (UBYTE)sIx;
+    pair->hiddenSym = am->states[sIx].emitLetter; 
+
+    if (parentQix == qIx - 1 && parentTix == tIx - 1 )
+        {
+        pair->queryIx = qIx-1;
+        pair->querySym = am->query[qIx-1];
+        pair->targetIx = tIx - 1;
+        pair->targetSym = am->target[tIx-1];
+        }
+    else if (parentQix == qIx) /* && parentTix == tIx-1 */
+        {
+        pair->queryIx = -1;
+        pair->querySym = '-';
+        pair->targetIx = tIx-1;
+        pair->targetSym = am->target[tIx-1];
+        }
+    else  /* parentTix == tIx  && parentQix == qIx-1 */
+        {
+        pair->queryIx = qIx-1;
+        pair->querySym = am->query[qIx-1];
+        pair->targetIx = -1;
+        pair->targetSym = '-';
+        }
+    slAddHead(&pairList, pair);
+    }
+return pairList;
+}
+
+void phmmPrintTrace(struct phmmMatrix *am, struct phmmAliPair *pairList, 
+	boolean showStates, FILE *f, boolean extraAtEnds)
+/* Print out trace to file. */
+{
+struct phmmAliPair *pair;
+#define lineLen 50
+char asyms[lineLen+1];
+char qsyms[lineLen+1];
+char tsyms[lineLen+1];
+char hsyms[lineLen+1];
+int lineIx = 0;
+int qs, ts;
+boolean gotQs = FALSE;
+
+if ((pair = pairList) == NULL)
+    {
+    fprintf(f, "Empty pair list\n");
+    return;
+    }
+
+qs = pair->queryIx;
+ts = pair->targetIx;
+
+/* Print out up to 25 bp of initial non-matching parts. */
+if (extraAtEnds)
+    {
+    int qStart = qs;
+    int tStart = ts;
+    int i;
+
+    for (i= -25; i < 0; ++i)
+        {
+        int qIx = qStart + i;
+        int tIx = tStart + i;
+        qsyms[lineIx] = (qIx >= 0 ? am->query[qIx] : ' ');
+        tsyms[lineIx] = (tIx >= 0 ? am->target[tIx] : ' ' );
+        asyms[lineIx] = hsyms[lineIx] = ' ';
+        if (qIx >= 0 || tIx >= 0)
+            {
+            ++lineIx;
+            if (!gotQs)
+                {
+                gotQs = TRUE;
+                qs = qIx;
+                ts = tIx;
+                }
+            }
+        }
+    }
+
+/* Print out matching parts */
+for (pair = pairList; pair != NULL; pair = pair->next)
+    {
+    qsyms[lineIx] = pair->querySym;
+    tsyms[lineIx] = pair->targetSym;
+    asyms[lineIx] = (pair->querySym == pair->targetSym ? '|' : ' ');
+    hsyms[lineIx] = pair->hiddenSym;
+    if (++lineIx == lineLen)
+        {
+        qsyms[lineIx] = asyms[lineIx] = tsyms[lineIx] = hsyms[lineIx] = 0;
+        fprintf(f, "%5d %s\n", qs, qsyms);
+        fprintf(f, "%5s %s\n", "", asyms);
+        fprintf(f, "%5d %s\n", ts, tsyms);
+        if (showStates)
+            fprintf(f, "%5s %s\n", "", hsyms);
+        fputc('\n', f);
+        lineIx = 0;
+        if (pair->next)
+            {
+            qs = pair->next->queryIx;
+            ts = pair->next->targetIx;
+            }
+        }
+    }
+
+/* Print out last bit - first get last pair. */
+if (extraAtEnds)
+    {
+    for (pair = pairList; pair->next != NULL; pair = pair->next)
+        ;
+
+        {
+        int qIx, tIx, i;
+        int residue = lineLen - lineIx;
+        for (i=1; i<=residue; i++)
+            {
+            if ((qIx = pair->queryIx+i) >= am->querySize)
+                qsyms[lineIx] = ' ';
+            else
+                qsyms[lineIx] = am->query[qIx];
+            if ((tIx = pair->targetIx+i) >= am->targetSize)
+                tsyms[lineIx] = ' ';
+            else
+                tsyms[lineIx] = am->target[tIx];
+            asyms[lineIx] = ' ';
+            hsyms[lineIx] = ' ';
+            ++lineIx;
+            assert(lineIx <= lineLen);
+            }
+        }
+    }
+
+/* Print out anything not printed out yet. */
+if (lineIx != 0)
+    {
+    qsyms[lineIx] = asyms[lineIx] = tsyms[lineIx] = hsyms[lineIx] = 0;
+    fprintf(f, "%5d %s\n", qs, qsyms);
+    fprintf(f, "%5s %s\n", "", asyms);
+    fprintf(f, "%5d %s\n", ts, tsyms);
+    if (showStates)
+        fprintf(f, "%5s %s\n", "", hsyms);
+    fputc('\n', f);
+    lineIx = 0;
+    }
+#undef lineLen
+}
+
+struct axt *phhmTraceToAxt(struct phmmMatrix *am, struct phmmAliPair *pairList, 
+	int score, char *qName, char *tName)
+/* Convert alignment from traceback format to axt. */
+{
+struct axt *axt;
+struct phmmAliPair *pair;
+int qEnd, tEnd;
+char *qSym, *tSym;
+int i;
+
+/* Make sure got something real. */
+if ((pair = pairList) == NULL)
+    return NULL;
+
+/* Allocate memory for axt. */
+AllocVar(axt);
+axt->symCount = slCount(pairList);
+axt->qSym = AllocArray(qSym, axt->symCount+1);
+axt->tSym = AllocArray(tSym, axt->symCount+1);
+
+/* Fill in basic fields. */
+axt->qName = cloneString(qName);
+axt->tName = cloneString(tName);
+axt->qStrand = axt->tStrand = '+';
+axt->qStart = qEnd = pair->queryIx;
+axt->tStart = tEnd = pair->targetIx;
+axt->score = score;
+
+/* Store alignment symbols and keep track of last symbol used. */
+for (i=0, pair = pairList; pair != NULL; pair = pair->next, ++i)
+    {
+    qSym[i] = pair->querySym;
+    tSym[i] = pair->targetSym;
+    qEnd = pair->queryIx;
+    tEnd = pair->targetIx;
+    }
+
+/* Store end and return. */
+axt->qEnd = qEnd + 1;
+axt->tEnd = tEnd + 1;
+return axt;
+}
+
+
diff --git a/gbtools/src/blatSrc/lib/paraFetch.c b/gbtools/src/blatSrc/lib/paraFetch.c
new file mode 100644
index 0000000..ee2e07b
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/paraFetch.c
@@ -0,0 +1,703 @@
+/* paraFetch - fetch things from remote URLs in parallel. */
+
+/* Copyright (C) 2014 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include <utime.h>
+#include "common.h"
+#include "internet.h"
+#include "errAbort.h"
+#include "hash.h"
+#include "linefile.h"
+#include "net.h"
+#include "https.h"
+#include "sqlNum.h"
+#include "obscure.h"
+#include "portable.h"
+#include "paraFetch.h"
+
+
+static void paraFetchWriteStatus(char *origPath, struct parallelConn *pcList, 
+    char *url, off_t fileSize, char *dateString, boolean isFinal)
+/* Write a status file.
+ * This has two purposes.
+ * First, we can use it to resume a failed transfer.
+ * Second, we can use it to follow progress */
+{
+char outTempX[1024];
+char outTemp[1024];
+safef(outTempX, sizeof(outTempX), "%s.paraFetchStatusX", origPath);
+safef(outTemp, sizeof(outTemp), "%s.paraFetchStatus", origPath);
+struct parallelConn *pc = NULL;
+
+FILE *f = mustOpen(outTempX, "w");
+int part = 0;
+fprintf(f, "%s\n", url);
+fprintf(f, "%lld\n", (long long)fileSize);
+fprintf(f, "%s\n", dateString);
+for(pc = pcList; pc; pc = pc->next)
+    {
+    fprintf(f, "part%d %lld %lld %lld\n", part
+	, (long long)pc->rangeStart
+	, (long long)pc->partSize
+	, (long long)pc->received);
+    ++part;
+    }
+
+carefulClose(&f);
+
+/* rename the successful status to the original name */
+rename(outTempX, outTemp);
+
+if (isFinal)  /* We are done and just looking to get rid of the file. */
+    unlink(outTemp);
+}
+
+
+time_t paraFetchTempUpdateTime(char *origPath)
+/* Return last mod date of temp file - which is useful to see if process has stalled. */
+{
+char outTemp[1024];
+safef(outTemp, sizeof(outTemp), "%s.paraFetch", origPath);
+if (fileExists(outTemp))
+    return fileModTime(outTemp);
+else if (fileExists(origPath))
+    return fileModTime(origPath);
+else
+    {
+    errAbort("%s doesn't exist", origPath);
+    return 0;
+    }
+}
+
+void parallelFetchRemovePartial(char *destName)
+/* Remove any files associated with partial downloads of file of given name. */
+{
+char paraTmpFile[PATH_LEN];
+safef(paraTmpFile, PATH_LEN, "%s.paraFetch", destName);
+remove(paraTmpFile);
+safef(paraTmpFile, PATH_LEN, "%s.paraFetchStatus", destName);
+remove(paraTmpFile);
+}
+
+boolean paraFetchReadStatus(char *origPath, 
+    struct parallelConn **pPcList, char **pUrl, off_t *pFileSize, 
+    char **pDateString, off_t *pTotalDownloaded)
+/* Read a status file - which is just origPath plus .paraFetchStatus.  This is updated during 
+ * transit by parallelFetch. Returns FALSE if status file not there - possibly because
+ * transfer is finished.  Any of the return parameters (pThis and pThat) may be NULL */
+{
+char outTemp[1024];
+char outStat[1024];
+safef(outStat, sizeof(outStat), "%s.paraFetchStatus", origPath);
+safef(outTemp, sizeof(outTemp), "%s.paraFetch", origPath);
+struct parallelConn *pcList = NULL, *pc = NULL;
+off_t totalDownloaded = 0;
+
+if (!fileExists(outStat))
+    {
+    unlink(outTemp);
+    return FALSE;
+    }
+
+if (!fileExists(outTemp))
+    {
+    unlink(outStat);
+    return FALSE;
+    }
+
+char *line, *word;
+struct lineFile *lf = lineFileOpen(outStat, TRUE);
+if (!lineFileNext(lf, &line, NULL))
+    {
+    unlink(outTemp);
+    unlink(outStat);
+    return FALSE;
+    }
+char *url = cloneString(line);
+if (!lineFileNext(lf, &line, NULL))
+    {
+    unlink(outTemp);
+    unlink(outStat);
+    return FALSE;
+    }
+off_t fileSize = sqlLongLong(line);
+if (!lineFileNext(lf, &line, NULL))
+    {
+    unlink(outTemp);
+    unlink(outStat);
+    return FALSE;
+    }
+char *dateString = cloneString(line);
+while (lineFileNext(lf, &line, NULL))
+    {
+    word = nextWord(&line);
+    AllocVar(pc);
+    pc->next = NULL;
+    pc->sd = -4;  /* no connection tried yet */
+    word = nextWord(&line);
+    pc->rangeStart = sqlLongLong(word);
+    word = nextWord(&line);
+    pc->partSize = sqlLongLong(word);
+    word = nextWord(&line);
+    pc->received = sqlLongLong(word);
+    if (pc->received == pc->partSize)
+	pc->sd = -1;  /* part all done already */
+    totalDownloaded += pc->received;
+    slAddHead(&pcList, pc);
+    }
+slReverse(&pcList);
+
+lineFileClose(&lf);
+
+if (slCount(pcList) < 1)
+    {
+    unlink(outTemp);
+    unlink(outStat);
+    return FALSE;
+    }
+
+if (pPcList != NULL)
+    *pPcList = pcList;
+if (pUrl != NULL)
+    *pUrl = url;
+if (pFileSize != NULL)
+    *pFileSize = fileSize;
+if (pDateString != NULL)
+    *pDateString = dateString;
+if (pTotalDownloaded != NULL)
+    *pTotalDownloaded = totalDownloaded;
+
+return TRUE;
+}
+
+boolean parallelFetchInterruptable(char *url, char *outPath, int numConnections, int numRetries, 
+    boolean newer, boolean progress,
+    boolean (*interrupt)(void *context),  void *context)
+/* Open multiple parallel connections to URL to speed downloading.  If interrupt function 
+ * is non-NULL,  then it gets called passing the context parameter,  and if it returns
+ * TRUE the fetch is interrupted.   Overall the parallelFetchInterruptable returns TRUE
+ * when the function succeeds without interrupt, FALSE otherwise. */
+{
+char *origPath = outPath;
+char outTemp[1024];
+safef(outTemp, sizeof(outTemp), "%s.paraFetch", outPath);
+outPath = outTemp;
+/* get the size of the file to be downloaded */
+off_t fileSize = 0;
+off_t totalDownloaded = 0;
+ssize_t sinceLastStatus = 0;
+char *dateString = "";
+int star = 1;  
+int starMax = 20;  
+off_t starStep = 1;
+// TODO handle case-sensitivity of protocols input
+if (startsWith("http://",url) || startsWith("https://",url))
+    {
+    struct hash *hash = newHash(0);
+    int status = netUrlHead(url, hash);
+    if (status != 200) // && status != 302 && status != 301)
+	{
+	warn("Error code: %d, expected 200 for %s, can't proceed, sorry", status, url);
+	return FALSE;
+	}
+    char *sizeString = hashFindValUpperCase(hash, "Content-Length:");
+    if (sizeString)
+	{
+	fileSize = atoll(sizeString);
+	}
+    else
+	{
+	warn("No Content-Length: returned in header for %s, must limit to a single connection, will not know if data is complete", url);
+	numConnections = 1;
+	fileSize = -1;
+	}
+    char *ds = hashFindValUpperCase(hash, "Last-Modified:");
+    if (ds)
+	dateString = cloneString(ds);
+    hashFree(&hash);
+    }
+else if (startsWith("ftp://",url))
+    {
+    long long size = 0;
+    time_t t;
+    boolean ok = netGetFtpInfo(url, &size, &t);
+    if (!ok)
+	{
+	warn("Unable to get size info from FTP for %s, can't proceed, sorry", url);
+	return FALSE;
+	}
+    fileSize = size;
+
+    struct tm  *ts;
+    char ftpTime[80];
+ 
+    /* Format the time "Tue, 15 Jun 2010 06:45:08 GMT" */
+    ts = localtime(&t);
+    strftime(ftpTime, sizeof(ftpTime), "%a, %d %b %Y %H:%M:%S %Z", ts);
+    dateString = cloneString(ftpTime);
+
+    }
+else
+    {
+    warn("unrecognized protocol: %s", url);
+    return FALSE;
+    }
+
+
+verbose(2,"fileSize=%lld\n", (long long) fileSize);
+
+if (fileSize < 65536)    /* special case small file */
+    numConnections = 1;
+
+if (numConnections > 50)    /* ignore high values for numConnections */
+    {
+    warn("Currently maximum number of connections is 50. You requested %d. Will proceed with 50 on %s", numConnections, url);
+    numConnections = 50;
+    }
+
+verbose(2,"numConnections=%d\n", numConnections); //debug
+
+if (numConnections < 1)
+    {
+    warn("number of connections must be greater than 0 for %s, can't proceed, sorry", url);
+    return FALSE;
+    }
+
+if (numRetries < 0)
+    numRetries = 0;
+
+/* what is the size of each part */
+off_t partSize = (fileSize + numConnections -1) / numConnections;
+if (fileSize == -1) 
+    partSize = -1;
+off_t base = 0;
+int c;
+
+verbose(2,"partSize=%lld\n", (long long) partSize); //debug
+
+
+/* n is the highest-numbered descriptor */
+int n = 0;
+int connOpen = 0;
+int reOpen = 0;
+
+
+struct parallelConn *restartPcList = NULL;
+char *restartUrl = NULL;
+off_t restartFileSize = 0;
+char *restartDateString = "";
+off_t restartTotalDownloaded = 0;
+boolean restartable = paraFetchReadStatus(origPath, &restartPcList, &restartUrl, &restartFileSize, &restartDateString, &restartTotalDownloaded);
+if (fileSize == -1)
+    restartable = FALSE;
+
+struct parallelConn *pcList = NULL, *pc;
+
+if (restartable 
+ && sameString(url, restartUrl)
+ && fileSize == restartFileSize
+ && sameString(dateString, restartDateString))
+    {
+    pcList = restartPcList;
+    totalDownloaded = restartTotalDownloaded;
+    }
+else
+    {
+
+    if (newer) // only download it if it is newer than what we already have
+	{
+	/* datestamp mtime from last-modified header */
+	struct tm tm;
+	// Last-Modified: Wed, 15 Nov 1995 04:58:08 GMT
+	// These strings are always GMT
+	if (strptime(dateString, "%a, %d %b %Y %H:%M:%S %Z", &tm) == NULL)
+	    {
+	    warn("unable to parse last-modified string [%s]", dateString);
+	    }
+	else
+	    {
+	    time_t t;
+	    // convert to UTC (GMT) time
+	    t = mktimeFromUtc(&tm);
+	    if (t == -1)
+		{
+		warn("mktimeFromUtc failed while converting last-modified string to UTC [%s]", dateString);
+		}
+	    else
+		{
+		// get the file mtime
+		struct stat mystat;
+		ZeroVar(&mystat);
+		if (stat(origPath,&mystat)==0)
+		    {
+		    if (t <= mystat.st_mtime)
+			{
+			verbose(2,"Since nothing newer was found, skipping %s\n", origPath);
+			verbose(3,"t from last-modified = %ld; st_mtime = %ld\n", (long) t, (long)mystat.st_mtime);
+			return TRUE;
+			}
+		    }
+		}
+	    }
+	}
+
+    /* make a list of connections */
+    for (c = 0; c < numConnections; ++c)
+	{
+	AllocVar(pc);
+	pc->next = NULL;
+	pc->rangeStart = base;
+	base += partSize;
+	pc->partSize = partSize;
+	if (fileSize != -1 && pc->rangeStart+pc->partSize >= fileSize)
+	    pc->partSize = fileSize - pc->rangeStart;
+	pc->received = 0;
+	pc->sd = -4;  /* no connection tried yet */
+	slAddHead(&pcList, pc);
+	}
+    slReverse(&pcList);
+    }
+
+if (progress)
+    {
+    char nicenumber[1024]="";
+    sprintWithGreekByte(nicenumber, sizeof(nicenumber), fileSize);
+    printf("downloading %s ", nicenumber); fflush(stdout);
+    starStep = fileSize/starMax;
+    if (starStep < 1)
+	starStep = 1;
+    }
+
+int out = open(outPath, O_CREAT|O_WRONLY, 0664);
+if (out < 0)
+    {
+    warn("Unable to open %s for write while downloading %s, can't proceed, sorry", outPath, url);
+    return FALSE;
+    }
+
+
+/* descriptors for select() */
+fd_set rfds;
+struct timeval tv;
+int retval;
+
+ssize_t readCount = 0;
+#define BUFSIZE 65536 * 4
+char buf[BUFSIZE];
+
+/* create paraFetchStatus right away for monitoring programs */
+paraFetchWriteStatus(origPath, pcList, url, fileSize, dateString, FALSE);
+sinceLastStatus = 0;
+
+int retryCount = 0;
+
+time_t startTime = time(NULL);
+
+#define SELTIMEOUT 10
+#define RETRYSLEEPTIME 30
+int scaledRetries = numRetries;
+if (fileSize != -1)
+    scaledRetries = round(numRetries * (1+fileSize/1e10) );
+verbose(2,"scaledRetries=%d\n", scaledRetries);
+while (TRUE)
+    {
+    verbose(2,"Top of big loop\n");
+    if (interrupt != NULL && (*interrupt)(context))
+	{
+	verbose(1, "Interrupted paraFetch.\n");
+	return FALSE;
+	}
+
+    if (progress)
+	{
+	while (totalDownloaded >= star * starStep)
+	    {
+	    printf("*");fflush(stdout);
+	    ++star;
+	    }
+	}
+
+    /* are we done? */
+    if (connOpen == 0)
+	{
+	boolean done = TRUE;
+	for(pc = pcList; pc; pc = pc->next)
+	    if (pc->sd != -1)
+		done = FALSE;
+	if (done) break;
+	}
+
+    /* See if we need to open any connections, either new or retries */
+    for(pc = pcList; pc; pc = pc->next)
+	{
+	if ((pc->sd == -4)  /* never even tried to open yet */
+	 || ((reOpen>0)      /* some connections have been released */
+	    && (pc->sd == -2  /* started but not finished */
+	    ||  pc->sd == -3)))  /* not even started */
+	    {
+	    char urlExt[1024];
+	    safef(urlExt, sizeof(urlExt), "%s;byterange=%llu-%llu"
+	    , url
+	    , (unsigned long long) (pc->rangeStart + pc->received)
+	    , (unsigned long long) (pc->rangeStart + pc->partSize - 1) );
+
+
+	    int oldSd = pc->sd;  /* in case we need to remember where we were */
+	    if (oldSd != -4)      /* decrement whether we succeed or not */
+		--reOpen;
+	    if (oldSd == -4) 
+		oldSd = -3;       /* ok this one just changes */
+	    if (fileSize == -1)
+		{
+		verbose(2,"opening url %s\n", url);
+		pc->sd = netUrlOpen(url);
+		}
+	    else
+		{
+		verbose(2,"opening url %s\n", urlExt);
+		pc->sd = netUrlOpen(urlExt);
+		}
+	    if (pc->sd < 0)
+		{
+		pc->sd = oldSd;  /* failed to open, can retry later */
+		}
+	    else
+		{
+		char *newUrl = NULL;
+		int newSd = 0;
+		if (startsWith("http://",url) || startsWith("https://",url))
+		    {
+		    if (!netSkipHttpHeaderLinesHandlingRedirect(pc->sd, urlExt, &newSd, &newUrl))
+			{
+			warn("Error processing http response for %s", url);
+			return FALSE;
+			}
+		    if (newUrl) 
+			{
+			/*  Update sd with newSd, replace it with newUrl, etc. */
+			pc->sd = newSd;
+			}
+		    }
+		++connOpen;
+		}
+	    }
+	}
+
+
+    if (connOpen == 0)
+	{
+	warn("Unable to open any connections to download %s, can't proceed, sorry", url);
+	return FALSE;
+	}
+
+
+    FD_ZERO(&rfds);
+    n = 0;
+    for(pc = pcList; pc; pc = pc->next)
+	{
+	if (pc->sd >= 0)
+	    {
+	    FD_SET(pc->sd, &rfds);    /* reset descriptor in readfds for select() */
+	    if (pc->sd > n)
+		n = pc->sd;
+	    }
+	}
+
+
+    /* Wait up to SELTIMEOUT seconds. */
+    tv.tv_sec = SELTIMEOUT;
+    tv.tv_usec = 0;
+    retval = select(n+1, &rfds, NULL, NULL, &tv);
+    /* Don't rely on the value of tv now! */
+
+    if (retval < 0)
+	{
+	perror("select retval < 0");
+	return FALSE;
+	}
+    else if (retval)
+	{
+
+	verbose(2,"returned from select, retval=%d\n", retval);
+
+	for(pc = pcList; pc; pc = pc->next)
+	    {
+	    if ((pc->sd >= 0) && FD_ISSET(pc->sd, &rfds))
+		{
+
+		verbose(2,"found a descriptor with data: %d\n", pc->sd);
+
+		readCount = read(pc->sd, buf, BUFSIZE);
+
+		verbose(2,"readCount = %lld\n", (long long) readCount);
+
+		if (readCount == 0)
+		    {
+		    close(pc->sd);
+
+		    verbose(2,"closing descriptor: %d\n", pc->sd);
+		    pc->sd = -1;
+
+		    if (fileSize != -1 && pc->received != pc->partSize)	
+			{
+			pc->sd = -2;  /* conn was closed before all data was sent, can retry later */
+			}
+		    --connOpen;
+		    ++reOpen;
+		    paraFetchWriteStatus(origPath, pcList, url, fileSize, dateString, FALSE);
+		    sinceLastStatus = 0;
+		    continue; 
+		    }
+		if (readCount < 0)
+		    {
+		    warn("error reading from socket for url %s", url);
+		    return FALSE;
+		    }
+
+		verbose(2,"rangeStart %llu  received %llu\n"
+			, (unsigned long long) pc->rangeStart
+			, (unsigned long long) pc->received );
+
+		verbose(2,"seeking to %llu\n", (unsigned long long) (pc->rangeStart + pc->received));
+
+		if (lseek(out, pc->rangeStart + pc->received, SEEK_SET) == -1)
+		    {
+		    perror("error seeking output file");
+		    warn("error seeking output file %s: rangeStart %llu  received %llu for url %s"
+			, outPath
+			, (unsigned long long) pc->rangeStart
+			, (unsigned long long) pc->received
+			, url);
+		    return FALSE;
+		    }
+		int writeCount = write(out, buf, readCount);
+		if (writeCount < 0)
+		    {
+		    warn("error writing output file %s", outPath);
+		    return FALSE;
+		    }
+		pc->received += readCount;
+		totalDownloaded += readCount;
+		sinceLastStatus += readCount;
+		if (sinceLastStatus >= 10*1024*1024)
+		    {
+		    paraFetchWriteStatus(origPath, pcList, url, fileSize, dateString, FALSE);
+		    sinceLastStatus = 0;
+		    }
+		}
+	    }
+	}
+    else
+	{
+	warn("No data within %d seconds for %s", SELTIMEOUT, url);
+	/* Retry ? */
+	if (retryCount >= scaledRetries)
+	    {
+    	    return FALSE;
+	    }
+	else
+	    {
+	    ++retryCount;
+	    /* close any open connections */
+	    for(pc = pcList; pc; pc = pc->next)
+		{
+		if (pc->sd >= 0) 
+		    {
+		    close(pc->sd);
+		    verbose(2,"closing descriptor: %d\n", pc->sd);
+		    }
+		if (pc->sd != -1) 
+		    pc->sd = -4;
+		}
+	    connOpen = 0;
+	    reOpen = 0;
+	    /* sleep for a while, maybe the server will recover */
+	    sleep(RETRYSLEEPTIME);
+	    }
+	}
+
+    }
+
+close(out);
+
+/* delete the status file - by passing TRUE */
+paraFetchWriteStatus(origPath, pcList, url, fileSize, dateString, TRUE); 
+
+/* restore original file datestamp mtime from last-modified header */
+struct tm tm;
+// Last-Modified: Wed, 15 Nov 1995 04:58:08 GMT
+// These strings are always GMT
+if (strptime(dateString, "%a, %d %b %Y %H:%M:%S %Z", &tm) == NULL)
+    {
+    warn("unable to parse last-modified string [%s]", dateString);
+    }
+else
+    {
+    time_t t;
+    // convert to UTC (GMT) time
+    t = mktimeFromUtc(&tm);
+    if (t == -1)
+	{
+	warn("mktimeFromUtc failed while converting last-modified string to UTC [%s]", dateString);
+	}
+    else
+	{
+	// update the file mtime
+	struct utimbuf ut;
+	struct stat mystat;
+	ZeroVar(&mystat);
+	if (stat(outTemp,&mystat)==0)
+	    {
+	    ut.actime = mystat.st_atime;
+	    ut.modtime = t;
+	    if (utime(outTemp, &ut)==-1)
+		{
+		char errMsg[256];
+                safef(errMsg, sizeof(errMsg), "paraFetch: error setting modification time of %s to %s\n", outTemp, dateString);
+		perror(errMsg);
+		}
+	    }
+	}
+    }
+
+/* rename the successful download to the original name */
+rename(outTemp, origPath);
+
+
+
+if (progress)
+    {
+    while (star <= starMax)
+	{
+	printf("*");fflush(stdout);
+	++star;
+	}
+    long timeDiff = (long)(time(NULL) - startTime);
+    if (timeDiff > 0)
+	{
+	printf(" %ld seconds", timeDiff);
+	float mbpersec =  ((totalDownloaded - restartTotalDownloaded)/1000000) / timeDiff;
+	printf(" %0.1f MB/sec", mbpersec);
+	}
+    printf("\n");fflush(stdout);
+    }
+
+if (fileSize != -1 && totalDownloaded != fileSize)
+    {
+    warn("Unexpected result: Total downloaded bytes %lld is not equal to fileSize %lld"
+	, (long long) totalDownloaded
+	, (long long) fileSize);
+    return FALSE;
+    }
+return TRUE;
+}
+
+boolean parallelFetch(char *url, char *outPath, int numConnections, int numRetries, 
+    boolean newer, boolean progress)
+/* Open multiple parallel connections to URL to speed downloading */
+{
+return parallelFetchInterruptable(url, outPath, numConnections, numRetries, 
+    newer, progress, NULL, NULL);
+}
+
diff --git a/gbtools/src/blatSrc/lib/peakCluster.c b/gbtools/src/blatSrc/lib/peakCluster.c
new file mode 100644
index 0000000..f521d52
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/peakCluster.c
@@ -0,0 +1,247 @@
+/* peakCluster - cluster peak calls from different sources. Used by regCluster
+ * and encodeMergeReplicates programs. */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "hash.h"
+#include "linefile.h"
+#include "localmem.h"
+#include "sqlNum.h"
+#include "obscure.h"
+#include "peakCluster.h"
+#include "rangeTree.h"
+
+struct peakSource *peakSourceLoadAll(char *fileName, int dimCount)
+/* Read file, parse it line by line and return list of peakSources. */
+{
+struct lineFile *lf = lineFileOpen(fileName, TRUE);
+int rowSize = dimCount + 6;
+char *row[rowSize];
+struct peakSource *sourceList = NULL, *source;
+while (lineFileNextRow(lf, row, rowSize))
+    {
+    /* Allocate struct and read in fixed fields. */
+    AllocVar(source);
+    source->dataSource = cloneString(row[0]);
+    source->chromColIx = sqlUnsigned(row[1]);
+    source->startColIx = sqlUnsigned(row[2]);
+    source->endColIx = sqlUnsigned(row[3]);
+    source->scoreColIx = sqlUnsigned(row[4]);
+    source->normFactor = sqlDouble(row[5]);
+
+    /* Read in dimension labels. */
+    AllocArray(source->labels, dimCount);
+    int i;
+    for (i=0; i<dimCount; ++i)
+        source->labels[i] = cloneString(row[i+6]);
+
+    /* Calculate required columns. */
+    int minColCount = max(source->chromColIx, source->startColIx);
+    minColCount = max(minColCount, source->endColIx);
+    minColCount = max(minColCount, source->scoreColIx);
+    source->minColCount = minColCount + 1;
+    slAddHead(&sourceList, source);
+    }
+lineFileClose(&lf);
+slReverse(&sourceList);
+return sourceList;
+}
+
+void peakClusterMakerAddFromSource(struct peakClusterMaker *maker, struct peakSource *source)
+/* Read through data source and add items to it to rangeTrees in maker */
+{
+struct hash *chromHash = maker->chromHash;
+struct lineFile *lf = lineFileOpen(source->dataSource, TRUE);
+struct lm *lm = chromHash->lm;	/* Local memory pool - share with hash */
+char *row[source->minColCount];
+struct peakItem *item;
+char *line;
+while (lineFileNextReal(lf, &line))
+    {
+    char *asciiLine = lmCloneString(lm, line);
+    int wordCount = chopByWhite(line, row, source->minColCount);
+    lineFileExpectAtLeast(lf, source->minColCount, wordCount);
+    char *chrom = row[source->chromColIx];
+    struct hashEl *hel = hashLookup(chromHash, chrom);
+    if (hel == NULL)
+        {
+	struct rbTree *tree = rangeTreeNewDetailed(lm, maker->stack);
+	hel = hashAdd(chromHash, chrom, tree);
+	}
+    struct rbTree *tree = hel->val;
+    lmAllocVar(lm, item);
+    item->chrom = hel->name;
+    item->chromStart = sqlUnsigned(row[source->startColIx]);
+    item->chromEnd = sqlUnsigned(row[source->endColIx]);
+    item->score = sqlDouble(row[source->scoreColIx]) * source->normFactor;
+    if (item->score > 1000) item->score = 1000;
+    item->source = source;
+    item->asciiLine = asciiLine;
+    rangeTreeAddValList(tree, item->chromStart, item->chromEnd, item);
+    }
+lineFileClose(&lf);
+}
+
+static void addCluster(struct lm *lm, struct peakItem *itemList, int start, int end,
+	struct peakCluster **pList)
+/* Make cluster of all items that overlap start/end, and put it on list. */
+{
+struct peakCluster *cluster;
+lmAllocVar(lm, cluster);
+double score = 0.0;
+double maxSubScore = 0.0;
+struct slRef  *refList = NULL, *ref;
+struct peakItem *item;
+for (item = itemList; item != NULL; item = item->next)
+    {
+    if (rangeIntersection(start, end, item->chromStart, item->chromEnd) > 0)
+	{
+	lmAllocVar(lm, ref);
+	ref->val = item;
+	slAddHead(&refList, ref);
+	score += item->score;
+	if (item->score > maxSubScore) maxSubScore = item->score;
+	}
+    }
+slReverse(&refList);
+cluster->chrom = itemList->chrom;
+cluster->chromStart = start;
+cluster->chromEnd = end;
+cluster->itemRefList = refList;
+cluster->score = score;
+cluster->maxSubScore = maxSubScore;
+slAddHead(pList, cluster);
+}
+
+struct peakCluster *peakClusterItems(struct lm *lm, struct peakItem *itemList, 
+	double forceJoinScore, double weakLevel)
+/* Convert a list of items to a list of clusters of items.  This may break up clusters that
+ * have weakly linked parts. 
+      [                ]
+      AAAAAAAAAAAAAAAAAA 
+       BBBBBB   DDDDDD
+        CCCC     EEEE
+   gets tranformed into
+       [    ]   [    ]
+      AAAAAAAAAAAAAAAAAA 
+       BBBBBB   DDDDDD
+        CCCC     EEEE
+   The strategy is to build a rangeTree of coverage, which might look something like so:
+      123333211123333211 
+   then define cluster ends that exceed the minimum limit, which is either weakLevel
+   (usually 10%) of the highest or forceJoinScore if weakLevel times the highest is 
+   more than forceJoinScore.  This will go to something like so:
+        [---]   [----]   
+   Finally the items that are overlapping a cluster are assigned to it.  Note that this
+   may mean that an item may be in multiple clusters.
+        [ABC]   [ ADE]
+ */
+{
+int easyMax = round(1.0/weakLevel);
+int itemCount = slCount(itemList);
+struct peakCluster *clusterList = NULL;
+if (itemCount < easyMax)
+    {
+    struct peakItem *item = itemList;
+    int chromStart = item->chromStart;
+    int chromEnd = item->chromEnd;
+    for (item = item->next; item != NULL; item = item->next)
+        {
+	if (item->chromStart < chromStart) chromStart = item->chromStart;
+	if (item->chromEnd > chromEnd) chromEnd = item->chromEnd;
+	}
+    addCluster(lm, itemList, chromStart, chromEnd, &clusterList);
+    }
+else
+    {
+    /* Make up coverage tree. */
+    struct rbTree *covTree = rangeTreeNew();
+    struct peakItem *item;
+    for (item = itemList; item != NULL; item = item->next)
+	rangeTreeAddToCoverageDepth(covTree, item->chromStart, item->chromEnd);
+    struct range *range, *rangeList = rangeTreeList(covTree);
+
+    /* Figure out maximum coverage. */
+    int maxCov = 0;
+    for (range = rangeList; range != NULL; range = range->next)
+        {
+	int cov = ptToInt(range->val);
+	if (cov > maxCov) maxCov = cov;
+	}
+
+    /* Figure coverage threshold. */
+    int threshold = round(maxCov * weakLevel);
+    if (threshold > forceJoinScore-1) threshold = forceJoinScore-1;
+
+    /* Loop through emitting sections over threshold as clusters */
+    boolean inRange = FALSE;
+    boolean start = 0, end = 0;
+    for (range = rangeList; range != NULL; range = range->next)
+        {
+	int cov = ptToInt(range->val);
+	if (cov > threshold)
+	    {
+	    if (inRange)
+	       end = range->end;
+	    else
+	       {
+	       inRange = TRUE;
+	       start = range->start;
+	       end = range->end;
+	       }
+	    }
+	else
+	    {
+	    if (inRange)
+		{
+		addCluster(lm, itemList, start, end, &clusterList);
+		inRange = FALSE;
+		}
+	    }
+	}
+    if (inRange)
+        addCluster(lm, itemList, start, end, &clusterList);
+    }
+slReverse(&clusterList);
+return clusterList;
+}
+
+struct peakClusterMaker *peakClusterMakerNew()
+/* Return a new peakClusterMaker. */
+{
+struct peakClusterMaker *maker;
+AllocVar(maker);
+maker->chromHash = hashNew(0);
+return maker;
+}
+
+void peakClusterMakerFree(struct peakClusterMaker **pMaker)
+/* Free up a peakClusterMaker. */
+{
+struct peakClusterMaker *maker = *pMaker;
+if (maker != NULL)
+    {
+    hashFree(&maker->chromHash);
+    freez(pMaker);
+    }
+}
+
+static int cmpChromEls(const void *va, const void *vb)
+/* Compare to sort based on query start. */
+{
+const struct hashEl *a = *((struct hashEl **)va);
+const struct hashEl *b = *((struct hashEl **)vb);
+return cmpWordsWithEmbeddedNumbers(a->name, b->name);
+}
+
+struct hashEl *peakClusterMakerChromList(struct peakClusterMaker *maker)
+/* Return list of chromosomes.  In hashEl format where the hashEl val is
+ * a rangeTree filled with items. */
+{
+struct hashEl *chromList =  hashElListHash(maker->chromHash);
+slSort(&chromList, cmpChromEls);
+return chromList;
+}
+
diff --git a/gbtools/src/blatSrc/lib/phyloTree.c b/gbtools/src/blatSrc/lib/phyloTree.c
new file mode 100644
index 0000000..11ce572
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/phyloTree.c
@@ -0,0 +1,421 @@
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "linefile.h"
+#include "dystring.h"
+#include "phyloTree.h"
+
+
+struct phyloTree *phyloReadTree(struct lineFile *lf)
+/* reads a phyloTree from lineFile (first line only) */
+{
+struct phyloTree *tree = NULL;
+char *ptr;
+int len;
+
+if (lineFileNext(lf, &ptr, &len) && (len > 0))
+    tree = phyloParseString(ptr);
+
+return tree;
+}
+
+struct phyloTree *phyloOpenTree(char *fileName)
+{
+struct lineFile *lf = lineFileOpen(fileName, TRUE);
+struct phyloTree *tree = phyloReadTree(lf);
+
+lineFileClose(&lf);
+
+return tree;
+}
+
+
+static struct phyloName *parseIdent(char **ptrPtr)
+/* read a node name with possibile branch length */
+{
+struct phyloName *pName;
+char *start = *ptrPtr;
+char *ptr = *ptrPtr;
+
+AllocVar(pName);
+/* legal id's are alphanumeric */
+while(isalpha(*ptr) || isdigit(*ptr) || (*ptr == '/')
+     || (*ptr == '\'')
+     || (*ptr == '>')
+     || (*ptr == '<')
+    || (*ptr == '.') || (*ptr == '_')) 
+    ptr++;
+
+/* did we read something? */
+if(ptr > start)
+    {
+    char val;
+
+    val = *ptr;
+    *ptr = 0;
+    pName->name = cloneString(start);
+    *ptr = val;
+    }
+
+/* is there some branch length info */
+if (*ptr == ':')
+    {
+    ptr++;
+    sscanf(ptr, "%lg", &pName->length);
+    while ((*ptr != '[') && (*ptr != ')') && (*ptr != ',') && (*ptr != ';'))
+	ptr++;
+    }
+
+*ptrPtr = ptr;
+
+return pName;
+}
+
+static struct phyloTree *newEdge(struct phyloTree *parent, struct phyloTree *child)
+{
+parent->numEdges++;
+
+if (parent->numEdges > parent->allocedEdges)
+    {
+    int oldSize = parent->allocedEdges * sizeof (struct phyloTree *);
+    int newSize;
+
+    parent->allocedEdges += 5;
+    newSize = parent->allocedEdges * sizeof (struct phyloTree *);
+    parent->edges = needMoreMem(parent->edges, oldSize, newSize);
+    }
+
+if (!child)
+    errAbort("unexpected error: child is null in phyloTree.c::newEdge()");
+
+child->parent = parent;
+return parent->edges[parent->numEdges -1 ] = child;
+}
+
+struct phyloTree *phyloAddEdge(struct phyloTree *parent, struct phyloTree *child)
+/* add an edge to a phyloTree node */
+{
+return newEdge(parent, child);
+}
+
+static struct phyloTree *parseSubTree(char **ptrPtr)
+/* the recursive workhorse function, parses a tree from ptr */
+{
+struct phyloTree *node = NULL;
+char *ptr = *ptrPtr;
+
+/* trees are terminated by one of these three chars */
+if ((*ptr == ';') || (*ptr == ',') || (*ptr == ')') )
+    return NULL;
+
+AllocVar(node);
+if (*ptr == '(') 
+    {
+    struct phyloTree *edge;
+
+    ptr++;
+
+    do
+	{
+	struct phyloTree *child = parseSubTree(&ptr);
+	if (!child)
+	    errAbort("missing child/subTree at (%s)",ptr-1);
+	edge = newEdge(node,child);
+	edge->parent = node;
+	} while (*ptr++ == ',');
+    --ptr;
+    if (*ptr++ != ')') 
+	errAbort("unbalanced parenthesis at (%s)",ptr-1);
+    node->ident = parseIdent(&ptr);
+    }
+else 
+    if ((*ptr == ':') || (isalpha(*ptr))|| (isdigit(*ptr)) 
+	 || (*ptr == '\'') || (*ptr == '.'))
+	node->ident = parseIdent(&ptr);
+else
+    errAbort("illegal char '%c' in phyloString",*ptr);
+
+if (*ptr == '[')
+    {
+    if (startsWith("[&&NHX:D=Y]",ptr))
+	node->isDup = TRUE;
+
+    while(*ptr != ']')
+	ptr++;
+
+    ptr++;
+
+    }
+
+*ptrPtr = ptr;
+
+
+return node;
+}
+
+struct phyloTree *phyloParseString(char *string)
+/* build a phyloTree from a string */
+{
+struct phyloTree *tree = NULL;
+char *ptr = string;
+
+eraseWhiteSpace(string);
+
+tree = parseSubTree(&ptr);
+
+if (*ptr != ';')
+    errAbort("expecting tree terminator ';', found '%s'", ptr);
+
+return tree;
+}
+
+
+/*  some static stuff for printing out trees */
+static int recurseCount = 0;
+
+static void tabOut(FILE *f)
+{
+int i;
+
+for(i=0; i < recurseCount; i++)
+    fputc(' ',f);
+}
+
+static void pTree( struct phyloTree *tree,FILE *f, boolean noDups)
+/* print out phylogenetic tree in Newick format */
+{
+if (tree)
+    {
+    int ii;
+    if (noDups && (tree->numEdges == 1))
+	pTree(tree->edges[0], f, noDups);
+    else 
+	{
+	if (tree->numEdges)
+	    {
+	    fprintf(f,"(");
+	    for (ii= 0; ii < tree->numEdges; ii++)
+		{
+		pTree(tree->edges[ii], f, noDups);
+		if (ii + 1 < tree->numEdges)
+		    fprintf(f,",");
+		}
+	    fprintf(f,")");
+	    }
+	if (tree->ident->name)
+	    fprintf(f,"%s",tree->ident->name);
+	//if (tree->ident->length != 0.0)
+	    fprintf(f,":%0.04g", tree->ident->length);
+	if (tree->isDup)
+	    fprintf(f,"[&&NHX:D=Y]");
+	}
+    }
+}
+
+void phyloPrintTreeNoDups( struct phyloTree *tree,FILE *f)
+/* print out phylogenetic tree in Newick format (only speciation nodes) */
+{
+pTree(tree, f, TRUE);
+fprintf(f, ";\n");
+}
+
+void phyloPrintTree( struct phyloTree *tree,FILE *f)
+/* print out phylogenetic tree in Newick format */
+{
+pTree(tree, f, FALSE);
+fprintf(f, ";\n");
+}
+
+void phyloDebugTree( struct phyloTree *tree,FILE *f)
+/* print out phylogenetic tree */
+{
+if (tree)
+    {
+    int ii;
+    fprintf(f,"%s:%g numEdges %d\n",tree->ident->name, tree->ident->length, tree->numEdges);
+    recurseCount++;
+    for (ii= 0; ii < tree->numEdges; ii++)
+	{
+	tabOut(f);
+	phyloDebugTree(tree->edges[ii], f);
+	}
+    recurseCount--;
+    }
+}
+
+struct phyloTree *phyloFindName( struct phyloTree *tree,char *name )
+/* find the node with this name */
+{
+struct phyloTree *subTree = NULL;
+int ii;
+
+if (tree->ident->name && sameString(tree->ident->name, name))
+    return tree;
+
+for (ii=0; ii < tree->numEdges; ii++)
+    {
+    if ((subTree = phyloFindName( tree->edges[ii], name)) != NULL)
+	break;
+    }
+
+return subTree;
+}
+
+void phyloClearTreeMarks(struct phyloTree *tree)
+/* clear the favorite child marks */
+{
+int ii;
+
+tree->mark = 0;
+
+for (ii=0; ii < tree->numEdges; ii++)
+    phyloClearTreeMarks(tree->edges[ii]);
+}
+
+struct phyloTree *phyloFindMarkUpTree(struct phyloTree *tree)
+/* find a marked node somewhere above this node */
+{
+do
+    {
+    if (tree->mark)
+	return tree;
+    tree = tree->parent;
+    } while (tree);
+
+return NULL;
+}
+
+void phyloMarkUpTree(struct phyloTree *tree)
+/* mark all the nodes from this one up to the top of the tree */
+{
+    tree->mark = tree;
+    for(;tree->parent; tree = tree->parent)
+	tree->parent->mark = tree;
+}
+
+char *phyloFindPath(struct phyloTree *tree, char *ref, char *cross)
+/* find the shortest path from ref to cross (returns a list
+ * of the node names separated by spaces) */
+{
+struct phyloTree *treeRef, *treeCross, *parent;
+struct dyString *ds = newDyString(0);
+
+if ((treeRef = phyloFindName(tree,ref)) == NULL)
+    return NULL;
+
+if ((treeCross = phyloFindName(tree,cross)) == NULL)
+    return NULL;
+
+phyloClearTreeMarks(tree);
+phyloMarkUpTree(treeCross);
+if ((parent = phyloFindMarkUpTree(treeRef)) == NULL)
+    return NULL;
+
+/* walk up the tree till we hit the common parent */
+while(treeRef != parent)
+    {
+    treeRef = treeRef->parent;
+    if (ds->stringSize)
+	dyStringAppendC(ds, ' ');
+    if (treeRef->ident->name)
+	dyStringAppendN(ds, treeRef->ident->name, strlen(treeRef->ident->name));
+    }
+
+/* now walk down the tree till we come to the target species */
+while (parent != treeCross)
+    {
+    parent = parent->mark;
+    dyStringAppendC(ds, ' ');
+    if (parent->ident->name)
+	dyStringAppendN(ds, parent->ident->name, strlen(parent->ident->name));
+    }
+
+return ds->string;
+}
+
+
+static void nodeNames(struct phyloTree *tree, struct dyString *ds)
+/* recursive workhorse to add all the node names to a string */
+{
+int ii;
+
+if (tree->ident->name)
+    {
+    dyStringAppendN(ds, tree->ident->name, strlen(tree->ident->name));
+    dyStringAppendC(ds, ' ');
+    }
+
+for (ii=0; ii < tree->numEdges; ii++)
+    nodeNames(tree->edges[ii],ds);
+}
+
+char *phyloNodeNames(struct phyloTree *tree)
+/* add all the node names to a dy string */
+{
+struct dyString *ds = newDyString(0);
+
+nodeNames(tree, ds);
+
+ds->string[ds->stringSize-1]=0;
+
+return ds->string;
+}
+
+
+static void reParent(struct phyloTree *tree)
+{
+if (tree->parent)
+    {
+    struct phyloTree *edge, *saveParent = tree->parent;
+
+    reParent(saveParent); /* make the parent into the root */
+    phyloDeleteEdge(saveParent, tree); /* remove this tree from the
+					  parent tree */
+    tree->parent = NULL; /* make this tree the root */
+    edge = newEdge(tree, saveParent); /* add the old parent tree as a
+					child of the new root */
+    edge->parent = tree; /* set the parent in the new child */
+
+    edge->ident->length = tree->ident->length;
+    }
+}
+
+struct phyloTree *phyloReRoot(struct phyloTree *tree)
+/* return a tree whose root is tree and what were parents are now "right" children */
+{
+reParent(tree);
+tree->ident->length = 0;
+
+return tree;
+}
+
+void phyloDeleteEdge(struct phyloTree *tree, struct phyloTree *edge)
+/* delete an edge from a node.  Aborts on error */
+{
+int ii;
+
+for (ii=0; ii < tree->numEdges; ii++)
+    if (tree->edges[ii] == edge)
+	{
+	memcpy(&tree->edges[ii], &tree->edges[ii+1], sizeof(tree) * (tree->numEdges - ii - 1));
+	tree->numEdges--;
+	//phyloFreeTree(edge);
+	return;
+	}
+
+errAbort("tried to delete non-existant edge");
+}
+
+int phyloCountLeaves(struct phyloTree *tree)
+{
+int ii, count = 0;
+
+if (tree->numEdges == 0)
+    return 1;
+
+for (ii=0; ii < tree->numEdges; ii++)
+    count += phyloCountLeaves(tree->edges[ii]);
+
+return count;
+}
diff --git a/gbtools/src/blatSrc/lib/pipeline.c b/gbtools/src/blatSrc/lib/pipeline.c
new file mode 100644
index 0000000..d56ad26
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/pipeline.c
@@ -0,0 +1,735 @@
+/* pipeline.c - create a process pipeline that can be used for reading or
+ * writing  */
+
+/* Copyright (C) 2013 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "pipeline.h"
+#include "common.h"
+#include "sqlNum.h"
+#include "dystring.h"
+#include "errAbort.h"
+#include "portable.h"
+#include "linefile.h"
+#include <sys/types.h>
+#include <unistd.h>
+#include <sys/wait.h>
+#include <signal.h>
+
+enum procState
+/* process state, in order of transition */
+{
+    procStateNew,  // plProc object created
+    procStateRun,  // proccess running
+    procStateDone  // process finished (ok or failed)
+};
+
+struct plProc
+/* A single process in a pipeline */
+{
+    struct plProc *next;   /* order list of processes */
+    struct pipeline *pl;   /* pipeline we are associated with */
+    char **cmd;            /* null-terminated command for this process */
+    pid_t  pid;            /* pid for process, -1 if not running */
+    enum procState state;  /* state of process */
+    int status;            /* status from wait */
+};
+
+struct pipeline
+/* Object for a process pipeline and associated open file.  Pipeline process
+ * consist of a process group leader and then all of the child process.  The
+ * group leader does no work, just wait on processes to complete and report
+ * errors to the top level process.  This object is create in the calling
+ * process, and then passed down, but not shared, via forks.
+ */
+{
+    struct plProc *procs;      /* list of processes */
+    int numRunning;            /* number of processes running */
+    pid_t groupLeader;         /* process group id, or -1 if not set. This is pid of group leader */
+    char *procName;            /* name to use in error messages. */
+    int pipeFd;                /* fd of pipe to/from process, -1 if none */
+    unsigned options;          /* options */
+    FILE* pipeFh;              /* optional stdio around pipe */
+    char* stdioBuf;            /* optional stdio buffer */
+    struct lineFile *pipeLf;   /* optional lineFile around pipe */
+};
+
+/* file buffer size */
+#define FILE_BUF_SIZE 64*1024
+
+static int pipeCreate(int *writeFd)
+/* create a pipe or die, return readFd */
+{
+int pipeFds[2];
+if (pipe(pipeFds) < 0)
+    errnoAbort("can't create pipe");
+*writeFd = pipeFds[1];
+return pipeFds[0];
+}
+
+static void safeClose(int *fdPtr)
+/* Close with error checking.  *fdPtr == -1 indicated already closed */
+{
+int fd = *fdPtr;
+if (fd != -1)
+    {
+    if (close(fd) < 0)
+        errnoAbort("close failed on fd %d", fd);
+    *fdPtr = -1;
+    }
+}
+
+static void closeNonStdDescriptors(void)
+/* close non-standard file descriptors */
+{
+long maxFd = sysconf(_SC_OPEN_MAX);
+if (maxFd < 0)
+    maxFd = 4096;  // shouldn't really happen
+int fd;
+for (fd = STDERR_FILENO+1; fd < maxFd; fd++)
+    close(fd);
+}
+
+static char* joinCmd(char **cmd)
+/* join an cmd vector into a space separated string */
+{
+struct dyString *str = dyStringNew(512);
+int i;
+for (i = 0; cmd[i] != NULL; i++)
+    {
+    if (i > 0)
+        dyStringAppend(str, " ");
+    dyStringAppend(str, cmd[i]);
+    }
+return dyStringCannibalize(&str);
+}
+
+static char* joinCmds(char ***cmds)
+/* join an cmds vetor into a space and pipe separated string */
+{
+struct dyString *str = dyStringNew(512);
+int i, j;
+for (i = 0; cmds[i] != NULL; i++)
+    {
+    if (i > 0)
+        dyStringAppend(str, " | ");
+    for (j = 0; cmds[i][j] != NULL; j++)
+        {
+        if (j > 0)
+            dyStringAppend(str, " ");
+        dyStringAppend(str, cmds[i][j]);
+        }
+    }
+return dyStringCannibalize(&str);
+}
+
+static char** cloneCmdVector(char **cmd)
+/* make a copy of the vector */
+{
+int i, cmdLen = 0;
+for (i = 0; cmd[i] != NULL; i++)
+    cmdLen++;
+char **cmd2 = needMem((cmdLen+1)*sizeof(char*));
+
+for (i = 0; i < cmdLen; i++)
+    cmd2[i] = cloneString(cmd[i]);
+cmd2[cmdLen] = NULL;
+return cmd2;
+}
+
+static struct plProc* plProcNew(char **cmd, struct pipeline *pl)
+/* create a new plProc object for a command. */
+{
+struct plProc* proc;
+AllocVar(proc);
+proc->pl = pl;
+proc->cmd = cloneCmdVector(cmd);
+proc->state = procStateNew;
+return proc;
+}
+
+static void plProcFree(struct plProc *proc)
+/* free a plProc object. */
+{
+int i;
+for (i = 0; proc->cmd[i] != NULL; i++)
+    freeMem(proc->cmd[i]);
+freeMem(proc->cmd);
+freeMem(proc);
+}
+
+static void plProcStateTrans(struct plProc *proc, enum procState newState)
+/* do state transition for process changing it to a new state  */
+{
+// States must transition in order.  New state must immediately follow the
+// current state.
+if (newState != proc->state+1)
+    errAbort("invalid state transition: %d -> %d", proc->state, newState);
+proc->state = newState;
+}
+
+static void plProcSetup(struct plProc* proc, int stdinFd, int stdoutFd, int stderrFd)
+/* setup signal, error handling, and file descriptors after fork */
+{
+/* Optionally treat a closed pipe as an EOF rather than getting SIGPIPE */
+if (signal(SIGPIPE, ((proc->pl->options & pipelineSigpipe) ? SIG_DFL : SIG_IGN)) == SIG_ERR)
+    errnoAbort("error ignoring SIGPIPE");
+
+if (setpgid(getpid(), proc->pl->groupLeader) != 0)
+    errnoAbort("error from setpgid(%d, %d)", getpid(), proc->pl->groupLeader);
+
+/* child, first setup stdio files */
+if (stdinFd != STDIN_FILENO)
+    {
+    if (dup2(stdinFd, STDIN_FILENO) < 0)
+        errnoAbort("can't dup2 to stdin");
+    }
+    
+if (stdoutFd != STDOUT_FILENO)
+    {
+    if (dup2(stdoutFd, STDOUT_FILENO) < 0)
+        errnoAbort("can't dup2 to stdout");
+    }
+    
+if (stderrFd != STDERR_FILENO)
+    {
+    if (dup2(stderrFd, STDERR_FILENO) < 0)
+        errnoAbort("can't dup2 to stderr");
+    }
+closeNonStdDescriptors();
+}
+
+static void plProcExecChild(struct plProc* proc, int stdinFd, int stdoutFd, int stderrFd)
+/* child part of process startup. */
+{
+plProcSetup(proc, stdinFd, stdoutFd, stderrFd);
+execvp(proc->cmd[0], proc->cmd);
+errnoAbort("exec failed: %s", proc->cmd[0]);
+}
+
+static void plProcMemWrite(struct plProc* proc, int stdoutFd, int stderrFd, void *otherEndBuf, size_t otherEndBufSize)
+/* implements child process to write memory buffer to pipeline after
+ * fork */
+{
+plProcSetup(proc, STDIN_FILENO, stdoutFd, stderrFd);
+ssize_t wrCnt = write(STDOUT_FILENO, otherEndBuf, otherEndBufSize);
+if (wrCnt < 0)
+    errnoAbort("pipeline input buffer write failed");
+else if (wrCnt != otherEndBufSize)
+    errAbort("pipeline input buffer short write %lld, expected %lld",
+             (long long)wrCnt, (long long)otherEndBufSize);
+else
+    {
+    close(STDOUT_FILENO);
+    exit(0);
+    }
+}
+
+static void plProcHandleSignaled(struct plProc* proc, int status)
+/* handle one of the processes terminating on a signal */
+{
+assert(WIFSIGNALED(proc->status));
+if (!((WTERMSIG(proc->status) == SIGPIPE) && (proc->pl->options & pipelineSigpipe)))
+    {
+    errAbort("process terminated on signal %d: \"%s\" in pipeline \"%s\"",
+             WTERMSIG(proc->status), joinCmd(proc->cmd), proc->pl->procName);
+    }
+}
+
+static void plProcHandleExited(struct plProc* proc, int status)
+/* handle one of the processes terminating on an exit */
+{
+assert(WIFEXITED(proc->status));
+if (WEXITSTATUS(proc->status) != 0)
+    {
+    // only print an error message if aborting
+    if (!(proc->pl->options & pipelineNoAbort))
+        fprintf(stderr, "process exited with %d: \"%s\" in pipeline \"%s\"\n",
+                WEXITSTATUS(proc->status), joinCmd(proc->cmd), proc->pl->procName);
+    exit(WEXITSTATUS(proc->status));  // pass back exit code
+    }
+}
+
+static void plProcHandleTerminate(struct plProc* proc, int status)
+/* handle one of the processes terminating, save exit status */
+{
+proc->pid = -1;
+proc->status = status;
+plProcStateTrans(proc, procStateDone);
+
+if (WIFSIGNALED(proc->status))
+    plProcHandleSignaled(proc, status);
+else
+    plProcHandleExited(proc, status);
+}
+
+static struct pipeline* pipelineNew(char ***cmds, unsigned options)
+/* create a new pipeline object. Doesn't start processes */
+{
+static char *memPseudoCmd[] = {"[mem]", NULL};
+struct pipeline *pl;
+int iCmd;
+
+AllocVar(pl);
+pl->groupLeader = -1;
+pl->pipeFd = -1;
+pl->options = options;
+pl->procName = joinCmds(cmds);
+
+if (cmds[0] == NULL)
+    errAbort("no commands in pipeline");
+
+if (options & pipelineMemInput)
+    {
+    /* add proc for forked process to write memory to pipeline */
+    slAddTail(&pl->procs, plProcNew(memPseudoCmd, pl));
+    }
+
+for(iCmd = 0; cmds[iCmd] != NULL; iCmd++)
+    slAddTail(&pl->procs, plProcNew(cmds[iCmd], pl));
+
+return pl;
+}
+
+void pipelineFree(struct pipeline **plPtr)
+/* free a pipeline object */
+{
+struct pipeline *pl = *plPtr;
+if (pl != NULL)
+    {
+    struct plProc *proc = pl->procs;
+    while (proc != NULL)
+        {
+        struct plProc *delProc = proc;
+        proc = proc->next;
+        plProcFree(delProc);
+        }
+    freez(&pl->procName);
+    freez(&pl->stdioBuf);
+    freez(plPtr);
+    }
+}
+
+static struct plProc *pipelineFindProc(struct pipeline *pl, pid_t pid)
+/* find a plProc by pid */
+{
+struct plProc *proc;
+for (proc = pl->procs; proc != NULL; proc = proc->next)
+    if (proc->pid == pid)
+        return proc;
+errAbort("pid not found in pipeline: %d", (int)pid);
+return 0; // never reached
+}
+
+static void execProcChild(struct pipeline* pl, struct plProc *proc,
+                          int procStdinFd, int procStdoutFd, int stderrFd,
+                          void *otherEndBuf, size_t otherEndBufSize)
+/* handle child process setup after fork.  This does not return */
+{
+if (otherEndBuf != NULL)
+    plProcMemWrite(proc, procStdoutFd, stderrFd, otherEndBuf, otherEndBufSize);
+else
+    plProcExecChild(proc, procStdinFd, procStdoutFd, stderrFd);
+}
+
+static int pipelineExecProc(struct pipeline* pl, struct plProc *proc,
+                            int prevStdoutFd, int stdinFd, int stdoutFd, int stderrFd,
+                            void *otherEndBuf, size_t otherEndBufSize)
+/* start a process in the pipeline, return the stdout fd of the process */
+{
+/* determine stdin/stdout to use */
+int procStdinFd, procStdoutFd;
+if (proc == pl->procs)
+    procStdinFd = stdinFd; /* first process in pipeline */
+else
+    procStdinFd = prevStdoutFd;
+if (proc->next == NULL)
+    procStdoutFd = stdoutFd; /* last process in pipeline */
+else
+    prevStdoutFd = pipeCreate(&procStdoutFd);
+
+/* start process */
+if ((proc->pid = fork()) < 0)
+    errnoAbort("can't fork");
+if (proc->pid == 0)
+    execProcChild(pl, proc, procStdinFd, procStdoutFd, stderrFd, otherEndBuf, otherEndBufSize);
+
+/* record that we did this */
+plProcStateTrans(proc, procStateRun);
+pl->numRunning++;
+
+/* don't leave intermediate pipes open in parent */
+if (proc != pl->procs)
+    safeClose(&procStdinFd);
+if (proc->next != NULL)
+    safeClose(&procStdoutFd);
+
+return prevStdoutFd;
+}
+
+static void pipelineGroupExec(struct pipeline* pl, int stdinFd, int stdoutFd, int stderrFd,
+                              void *otherEndBuf, size_t otherEndBufSize)
+/* Start all processes in a pipeline, stdinFd and stdoutFd are the ends of
+ * the pipeline, stderrFd is applied to all processed */
+{
+struct plProc *proc;
+int prevStdoutFd = -1;
+for (proc = pl->procs; proc != NULL; proc = proc->next)
+    {
+    prevStdoutFd = pipelineExecProc(pl, proc, prevStdoutFd,
+                                    stdinFd, stdoutFd, stderrFd,
+                                    otherEndBuf, otherEndBufSize);
+    otherEndBuf = NULL;  /* only for first process (read pipes) */
+    otherEndBufSize = 0;
+    }
+}
+
+static void waitOnOne(struct pipeline *pl)
+/* wait on one process to finish */
+{
+int status;
+pid_t pid = waitpid(-pl->groupLeader, &status, 0);
+if (pid < 0)
+    errnoAbort("waitpid failed");
+plProcHandleTerminate(pipelineFindProc(pl, pid), status);
+pl->numRunning--;
+assert(pl->numRunning >= 0);
+}
+
+static void groupWait(struct pipeline *pl)
+/* Wait for pipeline to complete */
+{
+/* wait on all processes to complete */
+while (pl->numRunning > 0)
+    waitOnOne(pl);
+}
+
+static void groupLeaderRun(struct pipeline* pl, int stdinFd, int stdoutFd, int stderrFd,
+                           void *otherEndBuf, size_t otherEndBufSize)
+/* group leader process */
+{
+pl->groupLeader = getpid();
+if (setpgid(pl->groupLeader, pl->groupLeader) != 0)
+    errnoAbort("error from child setpgid(%d, %d)", pl->groupLeader, pl->groupLeader);
+pipelineGroupExec(pl, stdinFd, stdoutFd, stderrFd, otherEndBuf, otherEndBufSize);
+
+// only keep stderr open
+close(STDIN_FILENO);
+close(STDOUT_FILENO);
+closeNonStdDescriptors();
+groupWait(pl);
+exit(0);
+}
+
+static int groupLeaderWait(struct pipeline *pl)
+/* Wait for group leader to complete. If pipelineNoAbort was specified, return
+ * the exit code of the first group process exit non-zero, or zero if none
+ * failed. */
+{
+int status;
+pid_t pid = waitpid(-pl->groupLeader, &status, 0);
+if (pid < 0)
+    errnoAbort("waitpid failed");
+if (WIFSIGNALED(status))
+    errAbort("process pipeline terminated on signal %d", WTERMSIG(status));
+assert(WIFEXITED(status));
+
+if ((WEXITSTATUS(status) != 0) && !(pl->options & pipelineNoAbort))
+    errAbort("pipeline exited with %d", WEXITSTATUS(status));
+return WEXITSTATUS(status);
+}
+
+static void pipelineExec(struct pipeline* pl, int stdinFd, int stdoutFd, int stderrFd,
+                         void *otherEndBuf, size_t otherEndBufSize)
+/* Fork the group leader, which then launches all processes in a pipeline,
+ * stdinFd and stdoutFd are the ends of the pipeline, stderrFd is applied to
+ * all processes, including group leader */
+{
+assert(pl->groupLeader < 0);  // should not be set
+if ((pl->groupLeader = fork()) < 0)
+    errnoAbort("can't fork");
+if (pl->groupLeader == 0)
+    {
+    groupLeaderRun(pl, stdinFd, stdoutFd, stderrFd, otherEndBuf, otherEndBufSize);
+    exit(1); // doesn't return to here
+    }
+else
+    {
+    // parent also must also setpgid to prevent race condition
+    if (setpgid(pl->groupLeader, pl->groupLeader) != 0)
+        errnoAbort("error from parent setpgid(%d, %d)", pl->groupLeader, pl->groupLeader);
+    }
+} 
+
+static int openRead(char *fname)
+/* open a file for reading */
+{
+int fd = open(fname, O_RDONLY);
+if (fd < 0)
+    errnoAbort("can't open for read access: %s", fname);
+return fd;
+}
+
+static int openWrite(char *fname, boolean append)
+/* open a file for write access */
+{
+int flags = O_WRONLY|O_CREAT;
+if (append)
+    flags |= O_APPEND;
+else
+    flags |= O_TRUNC;
+int fd = open(fname, flags, 0666);
+if (fd < 0)
+    errnoAbort("can't open for write access: %s", fname);
+return fd;
+}
+
+static void pipelineStartRead(struct pipeline *pl, int stdinFd, int stderrFd,
+                              void *otherEndBuf, size_t otherEndBufSize)
+/* start a read pipeline */
+{
+int pipeWrFd;
+pl->pipeFd = pipeCreate(&pipeWrFd);
+pipelineExec(pl, stdinFd, pipeWrFd, stderrFd, otherEndBuf, otherEndBufSize);
+safeClose(&pipeWrFd);
+}
+
+static void pipelineStartWrite(struct pipeline *pl, int stdoutFd, int stderrFd)
+/* start a write pipeline */
+{
+int pipeRdFd = pipeCreate(&pl->pipeFd);
+pipelineExec(pl, pipeRdFd, stdoutFd, stderrFd, NULL, 0);
+safeClose(&pipeRdFd);
+}
+
+static void checkOpts(unsigned opts)
+/* check option set for consistency */
+{
+if (((opts & (pipelineRead|pipelineWrite)) == 0)
+    || ((opts & (pipelineRead|pipelineWrite)) == (pipelineRead|pipelineWrite)))
+    errAbort("must specify one of pipelineRead or pipelineWrite to pipelineOpen");
+if ((opts & pipelineAppend) && ((opts & pipelineWrite) == 0))
+    errAbort("pipelineAppend is valid only in conjunction with pipelineWrite");
+}
+
+struct pipeline *pipelineOpenFd(char ***cmds, unsigned opts,
+                                int otherEndFd, int stderrFd)
+/* Create a pipeline from an array of commands.  See pipeline.h for
+ * full documentation. */
+{
+struct pipeline *pl;
+
+checkOpts(opts);
+pl = pipelineNew(cmds, opts);
+if (opts & pipelineRead)
+    pipelineStartRead(pl, otherEndFd, stderrFd, NULL, 0);
+else
+    pipelineStartWrite(pl, otherEndFd, stderrFd);
+return pl;
+}
+
+struct pipeline *pipelineOpen(char ***cmds, unsigned opts,
+                              char *otherEndFile, char *stderrFile)
+/* Create a pipeline from an array of commands.  See pipeline.h for
+ * full documentation */
+{
+int otherEndFd;
+int stderrFd = (stderrFile == NULL) ? STDERR_FILENO : openWrite(stderrFile, FALSE);
+
+checkOpts(opts);
+boolean append = ((opts & pipelineAppend) != 0);
+if (opts & pipelineRead)
+    otherEndFd = (otherEndFile == NULL) ? STDIN_FILENO : openRead(otherEndFile);
+else
+    otherEndFd = (otherEndFile == NULL) ? STDOUT_FILENO : openWrite(otherEndFile, append);
+struct pipeline *pl = pipelineOpenFd(cmds, opts, otherEndFd, stderrFd);
+safeClose(&otherEndFd);
+if (stderrFile != NULL)
+    safeClose(&stderrFd);
+return pl;
+}
+
+struct pipeline *pipelineOpenMem(char ***cmds, unsigned opts,
+                                 void *otherEndBuf, size_t otherEndBufSize,
+                                 int stderrFd)
+/* Create a pipeline from an array of commands, with the pipeline input/output
+ * in a memory buffer.  See pipeline.h for full documentation.  Currently only
+ * input to a read pipeline is supported  */
+{
+struct pipeline *pl;
+checkOpts(opts);
+if (opts & pipelineWrite)
+    errAbort("pipelineOpenMem only supports read pipelines at this time");
+opts |= pipelineMemInput;
+
+pl = pipelineNew(cmds, opts);
+pipelineStartRead(pl, STDIN_FILENO, stderrFd, otherEndBuf, otherEndBufSize);
+return pl;
+}
+
+struct pipeline *pipelineOpenFd1(char **cmd, unsigned opts,
+                                 int otherEndFd, int stderrFd)
+/* like pipelineOpenFd(), only takes a single command */
+{
+char **cmds[2];
+cmds[0] = cmd;
+cmds[1] = NULL;
+return pipelineOpenFd(cmds, opts, otherEndFd, stderrFd);
+}
+
+struct pipeline *pipelineOpen1(char **cmd, unsigned opts,
+                               char *otherEndFile, char *stderrFile)
+/* like pipelineOpen(), only takes a single command */
+{
+char **cmds[2];
+cmds[0] = cmd;
+cmds[1] = NULL;
+return pipelineOpen(cmds, opts, otherEndFile, stderrFile);
+}
+
+struct pipeline *pipelineOpenMem1(char **cmd, unsigned opts,
+                                  void *otherEndBuf, size_t otherEndBufSize,
+                                  int stderrFd)
+/* like pipelineOpenMem(), only takes a single command */
+{
+char **cmds[2];
+cmds[0] = cmd;
+cmds[1] = NULL;
+return pipelineOpenMem(cmds, opts, otherEndBuf, otherEndBufSize, stderrFd);
+}
+
+char *pipelineDesc(struct pipeline *pl)
+/* Get the description of a pipeline for use in error messages */
+{
+return pl->procName;
+}
+
+int pipelineFd(struct pipeline *pl)
+/* Get the file descriptor for a pipeline */
+{
+return pl->pipeFd;
+}
+
+FILE *pipelineFile(struct pipeline *pl)
+/* Get a FILE object wrapped around the pipeline.  Do not close the FILE, is
+ * owned by the pipeline object.  A FILE is created on first call to this
+ * function.  Subsequent calls return the same FILE.*/
+{
+if (pl->pipeFh == NULL)
+    {
+    /* create FILE* on first access */
+    char *mode = (pl->options & pipelineRead) ? "r" : "w";
+    if (pl->pipeLf != NULL)
+        errAbort("can't call pipelineFile after having associated a lineFile with a pipeline");
+    pl->pipeFh = fdopen(pl->pipeFd, mode);
+    if (pl->pipeFh == NULL)
+        errnoAbort("fdopen failed for: %s", pl->procName);
+    pl->stdioBuf = needLargeMem(FILE_BUF_SIZE);
+    setvbuf(pl->pipeFh, pl->stdioBuf,  _IOFBF, FILE_BUF_SIZE);
+    }
+return pl->pipeFh;
+}
+
+struct lineFile *pipelineLineFile(struct pipeline *pl)
+/* Get a lineFile object wrapped around the pipeline.  Do not close the
+ * lineFile, is owned by the pipeline object.  A lineFile is created on first
+ * call to this function.  Subsequent calls return the same object.*/
+{
+if (pl->pipeLf == NULL)
+    {
+    /* create line on first acess */
+    if (pl->pipeFh != NULL)
+        errAbort("can't call pipelineLineFile after having associated a FILE with a pipeline");
+    if (pl->options & pipelineWrite)
+        errAbort("can't associated a lineFile with a write pipeline");
+    pl->pipeLf = lineFileAttach(pipelineDesc(pl), TRUE, pl->pipeFd);
+    }
+return pl->pipeLf;
+}
+
+static void closePipelineFile(struct pipeline *pl)
+/* close a pipeline with a FILE associated with it */
+{
+if (pl->options & pipelineWrite)
+    {
+    fflush(pl->pipeFh);
+    if (ferror(pl->pipeFh))
+        errAbort("write failed to pipeline: %s ", pl->procName);
+    }
+else if (ferror(pl->pipeFh))
+    errAbort("read failed from pipeline: %s ", pl->procName);
+
+if (fclose(pl->pipeFh) == EOF)
+    errAbort("close failed on pipeline: %s ", pl->procName);
+pl->pipeFh = NULL;
+}
+
+static void closePipeline(struct pipeline *pl)
+/* Close the pipe file */
+{
+if (pl->pipeFh != NULL)
+    closePipelineFile(pl);
+else if (pl->pipeLf != NULL)
+    lineFileClose(&pl->pipeLf);
+else
+    {
+    if (close(pl->pipeFd) < 0)
+        errAbort("close failed on pipeline: %s ", pl->procName);
+    }
+pl->pipeFd = -1;
+}
+
+int pipelineWait(struct pipeline *pl)
+/* Wait for processes in a pipeline to complete; normally aborts if any
+ * process exists non-zero.  If pipelineNoAbort was specified, return the exit
+ * code of the first process exit non-zero, or zero if none failed. */
+{
+/* must close before waiting to so processes get pipe EOF */
+closePipeline(pl);
+return groupLeaderWait(pl);
+}
+
+int pipelineClose(struct pipeline **pPl)
+/* Wait for pipeline to finish and free it. Same as pipelineWait then pipelineClose.
+ * Returns pipelineWait result (normally 0). */
+{
+struct pipeline *pl = *pPl;
+int ret = 0;
+if (pl != NULL)
+    {
+    ret = pipelineWait(pl);
+    pipelineFree(pPl);
+    }
+return ret;
+}
+
+void pipelineSetNoAbort(struct pipeline *pl)
+/* Make it so pipeline won't abort on error - can be done after the fact.
+ * (This is needed to close a pipelined lineFile early.) */
+{
+pl->options |= pipelineNoAbort;
+}
+
+void pipelineDumpCmds(char ***cmds)
+/* Dump out pipeline-formatted commands to stdout for debugging. */
+{
+char **cmd;
+boolean first = TRUE;
+while ((cmd = *cmds++) != NULL)
+   {
+   char *word;
+   if (first)
+      first = FALSE;
+   else
+      printf("| ");
+   while ((word = *cmd++) != NULL)
+       printf("%s ", word);
+   }
+printf("<BR>\n");
+}
+
+/*
+ * Local Variables:
+ * c-file-style: "jkent-c"
+ * End:
+ */
diff --git a/gbtools/src/blatSrc/lib/pngwrite.c b/gbtools/src/blatSrc/lib/pngwrite.c
new file mode 100644
index 0000000..debdd4b
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/pngwrite.c
@@ -0,0 +1,115 @@
+/* pngwrite.c - write out a memGfx to a PNG file, using the reference library libpng */
+/* (libpng is available from sourceforge and included in many open source distros,
+ *  has a wide-open license intended to encourage usage of the PNG format, and the lib
+ *  has been under development and testing for 14 years -- http://libpng.org/) */
+
+
+#include "png.h"   // MUST come before common.h, due to setjmp checking  in pngconf.h 
+#include "common.h"
+#include "memgfx.h"
+
+
+static void pngAbort(png_structp png, png_const_charp errorMessage)
+/* type png_error wrapper around errAbort */
+{
+errAbort("%s", (char *)errorMessage);
+}
+
+static void pngWarn(png_structp png, png_const_charp warningMessage)
+/* type png_error wrapper around warn */
+{
+warn("%s", (char *)warningMessage);
+}
+
+boolean mgSaveToPng(FILE *png_file, struct memGfx *mg, boolean useTransparency)
+/* Save PNG to an already open file.
+ * If useTransparency, then the first color in memgfx's colormap/palette is
+ * assumed to be the image background color, and pixels of that color
+ * are made transparent. */
+/* Reference: http://libpng.org/pub/png/libpng-1.2.5-manual.html */
+{
+if (!png_file || !mg)
+    errAbort("mgSaveToPng: called with a NULL");
+png_structp png = png_create_write_struct(PNG_LIBPNG_VER_STRING,
+					  NULL, // don't need pointer to data for err/warn handlers
+					  pngAbort, pngWarn);
+if (!png)
+    {
+    errAbort("png_write_struct failed");
+    return FALSE;
+    }
+png_infop info = png_create_info_struct(png);
+if (!info)
+    {
+    errAbort("png create_info_struct failed");
+    png_destroy_write_struct(&png, NULL);
+    return FALSE;
+    }
+
+// If setjmp returns nonzero, it means png_error is returning control here.
+// But that should not happen because png_error should call pngAbort which calls errAbort.
+if (setjmp(png_jmpbuf(png)))
+    {
+    png_destroy_write_struct(&png, &info);
+    fclose(png_file);
+    errAbort("pngwrite: setjmp nonzero.  "
+	     "why didn't png_error..pngAbort..errAbort stop execution before this errAbort?");
+    return FALSE;
+    }
+
+// Configure PNG output params:
+png_init_io(png, png_file);
+#ifdef COLOR32
+png_set_IHDR(png, info, mg->width, mg->height, 8, // 8=bit_depth
+             PNG_COLOR_TYPE_RGBA, PNG_INTERLACE_NONE,
+             PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
+#else
+png_set_IHDR(png, info, mg->width, mg->height, 8, // 8=bit_depth
+             PNG_COLOR_TYPE_PALETTE, PNG_INTERLACE_NONE,
+             PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
+png_set_PLTE(png, info,
+             (png_color *)(mg->colorMap), // png_color is same as struct rgbColor!
+             mg->colorsUsed);
+#endif
+#ifndef COLOR32
+if (useTransparency)
+    {
+    // First palette color is assumed to be background/transparent, so
+    // that's the only one we need in the parallel array opacities[].
+    png_byte opacities[] = {0};
+    int num_opacities = ArraySize(opacities);
+    png_color_16p nonPalette_opacities_values = NULL; // n/a for us, we're using palette
+    png_set_tRNS(png, info, opacities, num_opacities, nonPalette_opacities_values);
+    }
+#endif
+
+// Write header/params, write pixels, close and clean up.
+// PNG wants a 2D array of pointers to byte offsets into palette/colorMap.
+// mg has a 1D array of byte offsets.  Make row pointers for PNG:
+
+png_byte **row_pointers = needMem(mg->height * sizeof(png_byte *));
+int i;
+for (i = 0;  i < mg->height;  i++)
+    row_pointers[i] = (unsigned char *)&(mg->pixels[i*mg->width]);
+png_set_rows(png, info, row_pointers);
+png_write_png(png, info, PNG_TRANSFORM_IDENTITY, // no transform
+	      NULL); // unused as of PNG 1.2
+png_destroy_write_struct(&png, &info);
+return TRUE;
+}
+
+void mgSavePng(struct memGfx *mg, char *filename, boolean useTransparency)
+/* Save memory bitmap to filename as a PNG.
+ * If useTransparency, then the first color in memgfx's colormap/palette is
+ * assumed to be the image background color, and pixels of that color
+ * are made transparent. */
+{
+FILE *pngFile = mustOpen(filename, "wb");
+if (!mgSaveToPng(pngFile, mg, useTransparency))
+    {
+    remove(filename);
+    errAbort("Couldn't save %s", filename);
+    }
+if (fclose(pngFile) != 0)
+    errnoAbort("fclose failed");
+}
diff --git a/gbtools/src/blatSrc/lib/portimpl.c b/gbtools/src/blatSrc/lib/portimpl.c
new file mode 100644
index 0000000..c0a7d19
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/portimpl.c
@@ -0,0 +1,136 @@
+/* Implementation file for some portability stuff mostly aimed
+ * at making the same code run under different web servers.
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "htmshell.h"
+#include "portable.h"
+#include "obscure.h"
+#include "portimpl.h"
+#include <dirent.h>
+
+
+static struct webServerSpecific *wss = NULL;
+
+static void setupWss()
+{
+if (wss == NULL)
+    {
+    char *s = getenv("SERVER_SOFTWARE");
+    wss = &wssDefault;
+    if (s == NULL)
+        {
+	wss = &wssCommandLine;
+        }
+    else
+        {
+        if (strncmp(wssMicrosoftII.name, s, strlen(wssMicrosoftII.name)) == 0)
+            wss = &wssMicrosoftII;
+        else if (strncmp(wssMicrosoftPWS.name, s, strlen(wssMicrosoftPWS.name)) == 0)
+            wss = &wssMicrosoftPWS;
+	else 
+	    {
+	    char *t = getenv("HTTP_HOST");
+	    if (t != NULL)
+		{
+		if (sameWord(t, "Crunx"))
+		    wss = &wssLinux;
+		else if (endsWith(t, "brc.mcw.edu"))
+		    wss = &wssBrcMcw;
+		}
+	    }
+        }
+    }
+}
+
+void makeTempName(struct tempName *tn, char *base, char *suffix)
+/* Figure out a temp name, and how CGI and HTML will access it. */
+{
+setupWss();
+wss->makeTempName(tn,base,suffix);
+}
+
+char *cgiDir()
+{
+setupWss();
+return wss->cgiDir();
+}
+
+char *trashDir()
+/* Return the relative path to trash directory for CGI binaries */
+{
+setupWss();
+return wss->trashDir();
+}
+
+double machineSpeed()
+/* Return relative speed of machine.  UCSC CSE dept. 1999 web server is 1.0 */
+{
+setupWss();
+return wss->speed();
+}
+
+void envUpdate(char *name, char *value)
+/* Update an environment string */
+{
+int size = strlen(name) + strlen(value) + 2;
+char *s = needMem(size);
+safef(s, size, "%s=%s", name, value);
+putenv(s);
+}
+
+void mkdirTrashDirectory(char *prefix)
+/*	create the specified trash directory if it doesn't exist */
+{
+struct stat buf;
+char trashDirName[128];
+safef(trashDirName, sizeof(trashDirName), "%s/%s", trashDir(), prefix);
+if (stat(trashDirName,&buf))
+    {
+    int result = mkdir (trashDirName, S_IRWXU | S_IRWXG | S_IRWXO);
+    if (0 != result)
+	errnoAbort("failed to create directory %s", trashDirName);
+    }
+}
+
+
+void makeDirsOnPath(char *pathName)
+/* Create directory specified by pathName.  If pathName contains
+ * slashes, create directory at each level of path if it doesn't
+ * already exist.  Abort with error message if there's a problem.
+ * (It's not considered a problem for the directory to already
+ * exist. ) */
+{
+
+/* shortcut for paths that already exist */
+if (fileExists(pathName))
+    return;
+
+/* Make local copy of pathName. */
+int len = strlen(pathName);
+char pathCopy[len+1];
+strcpy(pathCopy, pathName);
+
+/* Tolerate double-slashes in path, everyone else does it. */
+
+/* Start at root if it's an absolute path name. */
+char *s = pathCopy, *e;
+while (*s++ == '/')
+    /* do nothing */;
+
+/* Step through it one slash at a time 
+ * making directory if possible, else dying. */
+for (; !isEmpty(s); s = e)
+    {
+    /* Find end of this section and terminate string there. */
+    e = strchr(s, '/');
+    if (e != NULL)
+	*e = 0;
+    makeDir(pathCopy);
+    if (e != NULL)
+	*e++ = '/';
+    }
+}
+
diff --git a/gbtools/src/blatSrc/lib/portimpl.h b/gbtools/src/blatSrc/lib/portimpl.h
new file mode 100644
index 0000000..9beadb4
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/portimpl.h
@@ -0,0 +1,39 @@
+/*****************************************************************************
+ * Copyright (C) 2000 Jim Kent.  This source code may be freely used         *
+ * for personal, academic, and non-profit purposes.  Commercial use          *
+ * permitted only by explicit agreement with Jim Kent (jim_kent at pacbell.net) *
+ *****************************************************************************/
+/* Implement portable stuff.... */
+
+/* There is one of the following structures for each web server
+ * we support.  During run time looking at the environment variable
+ * SERVER_SOFTWARE we decide which of these to use. */
+struct webServerSpecific
+    {
+    char *name;
+
+    /* Make a good name for a temp file. */
+    void (*makeTempName)(struct tempName *tn, char *base, char *suffix);
+
+    /* Return directory to look for cgi in. */
+    char * (*cgiDir)();
+
+#ifdef NEVER
+    /* Return cgi suffix. */
+    char * (*cgiSuffix)();
+#endif /* NEVER */
+    
+    /* Return relative speed of CPU. (UCSC CSE 1999 FTP machine is 1.0) */
+    double (*speed)();
+
+    /* The relative path to trash directory for CGI binaries */
+    char * (*trashDir)();
+
+    };
+
+
+extern struct webServerSpecific wssMicrosoftII, wssMicrosoftPWS, wssDefault,
+	wssLinux, wssCommandLine, wssBrcMcw;
+
+char *rTempName(char *dir, char *base, char *suffix);
+/* Make a temp name that's almost certainly unique. */
diff --git a/gbtools/src/blatSrc/lib/psGfx.c b/gbtools/src/blatSrc/lib/psGfx.c
new file mode 100644
index 0000000..3e891b5
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/psGfx.c
@@ -0,0 +1,413 @@
+/* PostScript graphics - 
+ * This provides a bit of a shell around writing graphics to
+ * a postScript file.  Perhaps the most important thing it
+ * does is convert 0,0 from being at the bottom left to
+ * being at the top left. */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "psPoly.h"
+#include "psGfx.h"
+#include "linefile.h"
+
+
+static void psFloatOut(FILE *f, double x)
+/* Write out a floating point number, but not in too much
+ * precision. */
+{
+int i = round(x);
+if (i == x)
+   fprintf(f, "%d ", i);
+else
+   fprintf(f, "%0.4f ", x);
+}
+
+void psClipRect(struct psGfx *ps, double x, double y, 
+	double width, double height)
+/* Set clipping rectangle. */
+{
+FILE *f = ps->f;
+fprintf(f, "cliprestore ");
+psXyOut(ps, x, y+height); 
+psWhOut(ps, width, height);       
+fprintf(f, "rectclip\n");
+}
+
+static void psWriteHeader(FILE *f, double width, double height)
+/* Write postScript header.  It's encapsulated PostScript
+ * actually, so you need to supply image width and height
+ * in points. */
+{
+char *s =
+#include "common.pss"
+;
+
+fprintf(f, "%%!PS-Adobe-3.1 EPSF-3.0\n");
+fprintf(f, "%%%%BoundingBox: 0 0 %d %d\n", (int)ceil(width), (int)ceil(height));
+fprintf(f, "%%%%LanguageLevel: 3\n\n");
+fprintf(f, "%s", s);
+}
+
+void psSetLineWidth(struct psGfx *ps, double factor)
+/* Set line width to factor * a single pixel width. */
+{
+fprintf(ps->f, "%f setlinewidth\n", factor * ps->xScale);
+}
+
+struct psGfx *psOpen(char *fileName, 
+	double userWidth, double userHeight, /* Dimension of image in user's units. */
+	double ptWidth, double ptHeight,     /* Dimension of image in points. */
+	double ptMargin)                     /* Image margin in points. */
+/* Open up a new postscript file.  If ptHeight is 0, it will be
+ * calculated to keep pixels square. */
+{
+struct psGfx *ps;
+
+/* Allocate structure and open file. */
+AllocVar(ps);
+ps->f = mustOpen(fileName, "w");
+
+/* Save page dimensions and calculate scaling factors. */
+ps->userWidth = userWidth;
+ps->userHeight = userHeight;
+ps->ptWidth = ptWidth;
+ps->xScale = (ptWidth - 2*ptMargin)/userWidth;
+if (ptHeight != 0.0)
+   {
+   ps->ptHeight = ptHeight;
+   ps->yScale = (ptHeight - 2*ptMargin) / userHeight;
+   }
+else
+   {
+   ps->yScale = ps->xScale;
+   ptHeight = ps->ptHeight = userHeight * ps->yScale + 2*ptMargin;
+   }
+/* 0.5, 0.5 is the center of the pixel in upper-left corner which corresponds to (0,0) */
+ps->xOff = ptMargin;
+ps->yOff = ptMargin;
+ps->fontHeight = 10;
+
+/* Cope with fact y coordinates are bottom to top rather
+ * than top to bottom. */
+ps->yScale = -ps->yScale;
+ps->yOff = ps->ptHeight - ps->yOff;
+
+psWriteHeader(ps->f, ptWidth, ptHeight);
+
+/* adding a gsave here fixes an old ghostview bug with cliprestore */
+fprintf(ps->f, "gsave\n");
+
+/* Set initial clipping rectangle. */
+psClipRect(ps, 0, 0, ps->userWidth, ps->userHeight);
+
+/* Set line width to a single pixel. */
+psSetLineWidth(ps,1);
+
+return ps;
+}
+
+void psTranslate(struct psGfx *ps, double xTrans, double yTrans)
+/* add a constant to translate all coordinates */
+{
+ps->xOff += xTrans*ps->xScale;   
+ps->yOff += yTrans*ps->yScale;
+}
+
+void psClose(struct psGfx **pPs)
+/* Close out postScript file. */
+{
+struct psGfx *ps = *pPs;
+if (ps != NULL)
+    {
+    carefulClose(&ps->f);
+    freez(pPs);
+    }
+}
+
+void psXyOut(struct psGfx *ps, double x, double y)
+/* Output x,y position transformed into PostScript space. */
+{
+FILE *f = ps->f;
+psFloatOut(f, x * ps->xScale + ps->xOff);
+psFloatOut(f, y * ps->yScale + ps->yOff);
+}
+
+void psWhOut(struct psGfx *ps, double width, double height)
+/* Output width/height transformed into PostScript space. */
+{
+FILE *f = ps->f;
+psFloatOut(f, width * ps->xScale);
+psFloatOut(f, height * -ps->yScale);
+}
+
+void psMoveTo(struct psGfx *ps, double x, double y)
+/* Move PostScript position to given point. */
+{
+psXyOut(ps, x, y);
+fprintf(ps->f, "moveto\n");
+}
+
+void psLineTo(struct psGfx *ps, double x, double y)
+/* Draw line from current point to given point,
+ * and make given point new current point. */
+{
+psXyOut(ps, x, y);
+fprintf(ps->f, "lineto\n");
+}
+
+void psDrawBox(struct psGfx *ps, double x, double y, 
+	double width, double height)
+/* Draw a filled box in current color. */
+{
+if (width > 0 && height > 0)
+    {
+    psWhOut(ps, width, height);
+    psXyOut(ps, x, y+height); 
+    fprintf(ps->f, "fillBox\n");
+    }
+}
+
+void psDrawLine(struct psGfx *ps, double x1, double y1, double x2, double y2)
+/* Draw a line from x1/y1 to x2/y2 */
+{
+FILE *f = ps->f;
+fprintf(f, "newpath\n");
+psMoveTo(ps, x1, y1);
+psXyOut(ps, x2, y2);
+fprintf(ps->f, "lineto\n");
+fprintf(f, "stroke\n");
+}
+
+void psFillUnder(struct psGfx *ps, double x1, double y1, 
+	double x2, double y2, double bottom)
+/* Draw a 4 sided filled figure that has line x1/y1 to x2/y2 at
+ * it's top, a horizontal line at bottom at it's bottom,  and
+ * vertical lines from the bottom to y1 on the left and bottom to
+ * y2 on the right. */
+{
+FILE *f = ps->f;
+fprintf(f, "newpath\n");
+psMoveTo(ps, x1, y1);
+psLineTo(ps, x2, y2);
+psLineTo(ps, x2, bottom);
+psLineTo(ps, x1, bottom);
+fprintf(f, "closepath\n");
+fprintf(f, "fill\n");
+}
+
+void psTimesFont(struct psGfx *ps, double size)
+/* Set font to times of a certain size. */
+{
+FILE *f = ps->f;
+fprintf(f, "/Helvetica findfont ");
+
+/* Note the 1.2 and the 1.0 below seem to get it to 
+ * position about where the stuff developed for pixel
+ * based systems expects it.  It is all a kludge though! */
+fprintf(f, "%f scalefont setfont\n", -size*ps->yScale*1.2);
+ps->fontHeight = size*0.8;
+}
+
+void psTextBox(struct psGfx *ps, double x, double y, char *text)
+/* Output text in current font at given position. */
+{
+char c;
+psMoveTo(ps, x, y + ps->fontHeight);
+fprintf(ps->f, "(");
+while ((c = *text++) != 0)
+    {
+    if (c == ')' || c == '(')
+        fprintf(ps->f, "\\");
+    fprintf(ps->f, "%c", c);
+    }
+fprintf(ps->f, ") fillTextBox\n");
+}
+
+void psTextAt(struct psGfx *ps, double x, double y, char *text)
+/* Output text in current font at given position. */
+{
+char c;
+psMoveTo(ps, x, y + ps->fontHeight);
+fprintf(ps->f, "(");
+while ((c = *text++) != 0)
+    {
+    if (c == ')' || c == '(')
+        fprintf(ps->f, "\\");
+    fprintf(ps->f, "%c", c);
+    }
+fprintf(ps->f, ") show\n");
+}
+
+void psTextRight(struct psGfx *ps, double x, double y, 
+	double width, double height, 
+	char *text)
+/* Draw a line of text right justified in box defined by x/y/width/height */
+{
+y += (height - ps->fontHeight)/2;
+psMoveTo(ps, x+width, y + ps->fontHeight);
+fprintf(ps->f, "(%s) showBefore\n", text);
+}
+
+void psTextCentered(struct psGfx *ps, double x, double y, 
+	double width, double height, 
+	char *text)
+/* Draw a line of text centered in box defined by x/y/width/height */
+{
+char c;
+y += (height - ps->fontHeight)/2;
+psMoveTo(ps, x+width/2, y + ps->fontHeight);
+fprintf(ps->f, "(");
+while ((c = *text++) != 0)
+    {
+    if (c == ')' || c == '(')
+        fprintf(ps->f, "\\");
+    fprintf(ps->f, "%c", c);
+    }
+fprintf(ps->f, ") showMiddle\n");
+}
+
+void psTextDown(struct psGfx *ps, double x, double y, char *text)
+/* Output text going downwards rather than across at position. */
+{
+psMoveTo(ps, x, y);
+fprintf(ps->f, "gsave\n");
+fprintf(ps->f, "-90 rotate\n");
+fprintf(ps->f, "(%s) show\n", text);
+fprintf(ps->f, "grestore\n");
+}
+
+void psSetColor(struct psGfx *ps, int r, int g, int b)
+/* Set current color. */
+{
+FILE *f = ps->f;
+double scale = 1.0/255;
+if (r == g && g == b)
+    {
+    psFloatOut(f, scale * r);
+    fprintf(f, "setgray\n");
+    }
+else
+    {
+    psFloatOut(f, scale * r);
+    psFloatOut(f, scale * g);
+    psFloatOut(f, scale * b);
+    fprintf(f, "setrgbcolor\n");
+    }
+}
+
+void psSetGray(struct psGfx *ps, double grayVal)
+/* Set gray value. */
+{
+FILE *f = ps->f;
+if (grayVal < 0) grayVal = 0;
+if (grayVal > 1) grayVal = 1;
+psFloatOut(f, grayVal);
+fprintf(f, "setgray\n");
+}
+
+void psPushG(struct psGfx *ps)
+/* Save graphics state on stack. */
+{
+fprintf(ps->f, "gsave\n");
+}
+
+void psPopG(struct psGfx *ps)
+/* Pop off saved graphics state. */
+{
+fprintf(ps->f, "grestore\n");
+}
+
+void psDrawPoly(struct psGfx *ps, struct psPoly *poly, boolean filled)
+/* Draw a possibly filled polygon */
+{
+FILE *f = ps->f;
+struct psPoint *p = poly->ptList;
+fprintf(f, "newpath\n");
+psMoveTo(ps, p->x, p->y);
+for (;;)
+    {
+    p = p->next;
+    psLineTo(ps, p->x, p->y);
+    if (p == poly->ptList)
+	break;
+    }
+if (filled)
+    {
+    fprintf(f, "fill\n");
+    }
+else
+    {
+    fprintf(f, "closepath\n");
+    fprintf(f, "stroke\n");
+    }
+}
+
+
+void psFillEllipse(struct psGfx *ps, double x, double y, double xrad, double yrad)
+{
+FILE *f = ps->f;
+fprintf(f, "newpath\n");
+psXyOut(ps, x, y);
+psWhOut(ps, xrad, yrad);
+psFloatOut(f, 0.0);
+psFloatOut(f, 360.0);
+fprintf(f, "ellipse\n");
+fprintf(f, "closepath\n");
+fprintf(f, "fill\n");
+}
+
+void psDrawEllipse(struct psGfx *ps, double x, double y, double xrad, double yrad,
+    double startAngle, double endAngle)
+{
+FILE *f = ps->f;
+fprintf(f, "newpath\n");
+psXyOut(ps, x, y);
+psWhOut(ps, xrad, yrad);
+psFloatOut(f, startAngle);
+psFloatOut(f, endAngle);
+fprintf(f, "ellipse\n");
+fprintf(f, "closepath\n");
+fprintf(f, "stroke\n");
+}
+
+char * convertEpsToPdf(char *epsFile) 
+/* Convert EPS to PDF and return filename, or NULL if failure. */
+{
+char *pdfTmpName = NULL, *pdfName=NULL;
+char cmdBuffer[2048];
+int sysVal = 0;
+struct lineFile *lf = NULL;
+char *line;
+int lineSize=0;
+float width=0, height=0;
+pdfTmpName = cloneString(epsFile);
+
+/* Get the dimensions of bounding box. */
+lf = lineFileOpen(epsFile, TRUE);
+while(lineFileNext(lf, &line, &lineSize)) 
+    {
+    if(strstr( line, "BoundingBox:")) 
+	{
+	char *words[5];
+	chopLine(line, words);
+	width = atof(words[3]);
+	height = atof(words[4]);
+	break;
+	}
+    }
+lineFileClose(&lf);
+	
+/* Do conversion. */
+chopSuffix(pdfTmpName);
+pdfName = addSuffix(pdfTmpName, ".pdf");
+safef(cmdBuffer, sizeof(cmdBuffer), "ps2pdf -dDEVICEWIDTHPOINTS=%d -dDEVICEHEIGHTPOINTS=%d %s %s", 
+      round(width), round(height), epsFile, pdfName);
+sysVal = system(cmdBuffer);
+if(sysVal != 0)
+    freez(&pdfName);
+freez(&pdfTmpName);
+return pdfName;
+}
+
diff --git a/gbtools/src/blatSrc/lib/psPoly.c b/gbtools/src/blatSrc/lib/psPoly.c
new file mode 100644
index 0000000..e16f3bb
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/psPoly.c
@@ -0,0 +1,53 @@
+/* psPoly - two dimensional polygon. */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "psPoly.h"
+
+
+struct psPoly *psPolyNew()
+/* Create new (empty) polygon */
+{
+struct psPoly *poly;
+AllocVar(poly);
+return poly;
+}
+
+void psPolyFree(struct psPoly **pPoly)
+/* Free up resources associated with polygon */
+{
+struct psPoly *poly = *pPoly;
+if (poly != NULL)
+    {
+    if (poly->lastPoint != NULL)
+	{
+	poly->lastPoint->next = NULL;
+	slFreeList(&poly->ptList);
+	}
+    freez(pPoly);
+    }
+}
+
+void psPolyAddPoint(struct psPoly *poly, double x, double y)
+/* Add point to polygon. */
+{
+struct psPoint *pt;
+poly->ptCount += 1;
+AllocVar(pt);
+pt->x = x;
+pt->y = y;
+if (poly->ptList == NULL)
+    {
+    poly->ptList = poly->lastPoint = pt;
+    pt->next = pt;
+    }
+else
+    {
+    poly->lastPoint->next = pt;
+    pt->next = poly->ptList;
+    poly->lastPoint = pt;
+    }
+}
+
diff --git a/gbtools/src/blatSrc/lib/pscmGfx.c b/gbtools/src/blatSrc/lib/pscmGfx.c
new file mode 100644
index 0000000..af30b54
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/pscmGfx.c
@@ -0,0 +1,816 @@
+/* pscmGfx - routines for making postScript output seem a
+ * lot like 256 color bitmap output. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include <math.h>
+#ifdef MACHTYPE_sparc
+#include <ieeefp.h>
+int isinf(double x) { return !finite(x) && x==x; }
+#endif
+#include "common.h"
+#include "hash.h"
+#include "memgfx.h"
+#include "gfxPoly.h"
+#include "colHash.h"
+#include "psGfx.h"
+#include "pscmGfx.h"
+#include "gemfont.h"
+#include "vGfx.h"
+#include "vGfxPrivate.h"
+
+
+
+static struct pscmGfx *boxPscm;	 /* Used to keep from drawing the same box again
+                                  * and again with no other calls between.  This
+				  * ends up cutting down the file size by 5x
+				  * in the whole chromosome case of the browser. */
+
+void pscmSetHint(struct pscmGfx *pscm, char *hint, char *value)
+/* set a hint */
+{
+if (!value) return;
+if (sameString(value,""))
+    {
+    hashRemove(pscm->hints, hint);
+    }
+struct hashEl *el = hashLookup(pscm->hints, hint);
+if (el) 
+    {
+    freeMem(el->val);
+    el->val = cloneString(value);
+    }
+else
+    {
+    hashAdd(pscm->hints, hint, cloneString(value));
+    }
+}
+
+char *pscmGetHint(struct pscmGfx *pscm, char *hint)
+/* get a hint */
+{
+return hashOptionalVal(pscm->hints, hint, "");
+}
+
+int pscmGetFontPixelHeight(struct pscmGfx *pscm, MgFont *font)
+/* How high in pixels is font? */
+{
+return font_cel_height(font);
+}
+
+int pscmGetFontStringWidth(struct pscmGfx *pscm, MgFont *font, char *string)
+/* How wide is a string? */
+{
+return fnstring_width(font, (unsigned char *)string, strlen(string));
+}
+
+void pscmSetClip(struct pscmGfx *pscm, int x, int y, int width, int height)
+/* Set clipping rectangle. */
+{
+double x2 = x + width;
+double y2 = y + height;
+pscm->clipMinX = x;
+pscm->clipMinY = y;
+pscm->clipMaxX = x2;     /* one beyond actual last pixel */
+pscm->clipMaxY = y2;
+/* adjust to pixel-centered coordinates */
+x2 -= 1;
+y2 -= 1;
+double x1 = x;
+double y1 = y;
+/* pad a half-pixel all the way around the box */
+x1 -= 0.5;
+y1 -= 0.5;
+x2 += 0.5;
+y2 += 0.5;
+psClipRect(pscm->ps, x1, y1, x2-x1, y2-y1);
+}
+
+void pscmUnclip(struct pscmGfx *pscm)
+/* Set clipping rect to cover full thing. */
+{
+pscmSetClip(pscm, 0, 0, pscm->ps->userWidth, pscm->ps->userHeight);
+}
+
+#ifndef COLOR32
+static Color pscmClosestColor(struct pscmGfx *pscm, 
+	unsigned char r, unsigned char g, unsigned char b)
+/* Returns closest color in color map to r,g,b */
+{
+struct rgbColor *c = pscm->colorMap;
+int closestDist = 0x7fffffff;
+int closestIx = -1;
+int dist, dif;
+int i;
+
+for (i=0; i<pscm->colorsUsed; ++i)
+    {
+    dif = c->r - r;
+    dist = dif*dif;
+    dif = c->g - g;
+    dist += dif*dif;
+    dif = c->b - b;
+    dist += dif*dif;
+    if (dist < closestDist)
+        {
+        closestDist = dist;
+        closestIx = i;
+        }
+    ++c;
+    }
+return closestIx;
+}
+
+static Color pscmAddColor(struct pscmGfx *pscm, 
+	unsigned char r, unsigned char g, unsigned char b)
+/* Adds color to end of color map if there's room. */
+{
+int colIx = pscm->colorsUsed;
+struct rgbColor *c = pscm->colorMap + pscm->colorsUsed;
+c->r = r;
+c->g = g;
+c->b = b;
+pscm->colorsUsed += 1;
+colHashAdd(pscm->colorHash, r, g, b, colIx);;
+return (Color)colIx;
+}
+#endif
+
+int pscmFindColorIx(struct pscmGfx *pscm, int r, int g, int b)
+/* Returns closest color in color map to rgb values.  If it doesn't
+ * already exist in color map and there's room, it will create
+ * exact color in map. */
+{
+#ifdef COLOR32
+return MAKECOLOR_32(r,g,b);
+#else
+struct colHashEl *che;
+if (r>255||g>255||b>255) 
+    errAbort("RGB values out of range (0-255).  r:%d g:%d b:%d", r, g, b);
+if ((che = colHashLookup(pscm->colorHash, r, g, b)) != NULL)
+    return che->ix;
+if (pscm->colorsUsed < 256)
+    return pscmAddColor(pscm, r, g, b);
+return pscmClosestColor(pscm, r, g, b);
+#endif
+}
+
+
+struct rgbColor pscmColorIxToRgb(struct pscmGfx *pscm, int colorIx)
+/* Return rgb value at color index. */
+{
+#ifdef COLOR32
+static struct rgbColor rgb;
+rgb.r = (colorIx >> 0) & 0xff;
+rgb.g = (colorIx >> 8) & 0xff;
+rgb.b = (colorIx >> 16) & 0xff;
+
+return rgb;
+#else
+return pscm->colorMap[colorIx];
+#endif
+}
+
+#ifndef COLOR32
+static void pscmSetDefaultColorMap(struct pscmGfx *pscm)
+/* Set up default color map for a memGfx. */
+{
+/* Note dependency in order here and in MG_WHITE, MG_BLACK, etc. */
+int i;
+for (i=0; i<ArraySize(mgFixedColors); ++i)
+    {
+    struct rgbColor *c = &mgFixedColors[i];
+    pscmFindColorIx(pscm, c->r, c->g, c->b);
+    }
+}
+#endif
+
+void pscmSetWriteMode(struct pscmGfx *pscm, unsigned int writeMode)
+/* Set write mode */
+{
+pscm->writeMode = writeMode;
+}
+
+struct pscmGfx *pscmOpen(int width, int height, char *file)
+/* Return new pscmGfx. */
+{
+struct pscmGfx *pscm;
+
+AllocVar(pscm);
+pscm->ps = psOpen(file, width, height, 72.0 * 7.5, 0, 0);
+psTranslate(pscm->ps,0.5,0.5);  /* translate all coordinates to pixel centers */
+#ifndef COLOR32
+pscm->colorHash = colHashNew();
+pscmSetDefaultColorMap(pscm);
+#endif
+pscm->clipMinX = pscm->clipMinY = 0;
+pscm->clipMaxX = width;     
+pscm->clipMaxY = height;
+pscm->hints = hashNew(6);
+return pscm;
+}
+
+void pscmClose(struct pscmGfx **pPscm)
+/* Finish writing out and free structure. */
+{
+struct pscmGfx *pscm = *pPscm;
+if (pscm != NULL)
+    {
+    psClose(&pscm->ps);
+    colHashFree(&pscm->colorHash);
+    freez(pPscm);
+    }
+}
+
+void pscmSetColor(struct pscmGfx *pscm, Color color)
+/* Set current color to Color. */
+{
+struct rgbColor *col;
+
+#ifdef COLOR32
+struct rgbColor myCol;
+col = &myCol;
+
+col->r = (color >> 0) & 0xff;
+col->g = (color >> 8) & 0xff;
+col->b = (color >> 16) & 0xff;
+#else
+col = pscm->colorMap + color;
+#endif
+
+if (color != pscm->curColor)
+    {
+    psSetColor(pscm->ps, col->r, col->g, col->b);
+    pscm->curColor = color;
+    }
+}
+
+void pscmBoxToPs(struct pscmGfx *pscm, int x, int y, 
+	int width, int height)
+/* adjust coordinates for PS */
+{
+/* Do some clipping here to make the postScript
+ * easier to edit in illustrator. */
+double x2 = x + width;
+double y2 = y + height;
+
+if (x < pscm->clipMinX) x = pscm->clipMinX;
+if (y < pscm->clipMinY) y = pscm->clipMinY;
+if (x2 > pscm->clipMaxX) x2 = pscm->clipMaxX;
+if (y2 > pscm->clipMaxY) y2 = pscm->clipMaxY;
+
+/* adjust to pixel-centered coordinates */
+x2 -= 1;
+y2 -= 1;
+double x1 = x;
+double y1 = y;
+/* pad a half-pixel all the way around the box */
+x1 -= 0.5;
+y1 -= 0.5;
+x2 += 0.5;
+y2 += 0.5;
+psDrawBox(pscm->ps, x1, y1, x2-x1, y2-y1);
+}
+
+void pscmBox(struct pscmGfx *pscm, int x, int y, 
+	int width, int height, int color)
+/* Draw a box. */
+{
+/* When viewing whole chromosomes the browser tends
+ * to draw the same little vertical tick over and
+ * over again.  This tries to remove the worst of
+ * the redundancy anyway. */
+
+static int lx, ly, lw, lh, lc=-1;
+if (x != lx || y != ly || width != lw || height != lh || color != lc || 
+	pscm != boxPscm)
+    {
+    pscmSetColor(pscm, color);
+    pscmBoxToPs(pscm, x, y, width, height);
+    lx = x;
+    ly = y;
+    lw = width;
+    lh = height;
+    lc = color;
+    boxPscm = pscm;
+    }
+}
+
+void pscmDot(struct pscmGfx *pscm, int x, int y, int color)
+/* Set a dot. */
+{
+pscmBox(pscm, x, y, 1, 1, color);
+}
+
+
+
+static void pscmVerticalSmear(struct pscmGfx *pscm,
+	int xOff, int yOff, int width, int height, 
+	Color *dots, boolean zeroClear)
+/* Put a series of one 'pixel' width vertical lines. */
+{
+int x, i;
+struct psGfx *ps = pscm->ps;
+Color c;
+for (i=0; i<width; ++i)
+    {
+    x = xOff + i;
+    c = dots[i];
+    if (c != MG_WHITE || !zeroClear)
+	{
+	pscmSetColor(pscm, c);
+	psDrawBox(ps, x, yOff, 1, height);
+	}
+    }
+}
+
+static void pscmSetFont(struct pscmGfx *pscm, MgFont *font)
+/* Set font. */
+{
+/* For now we basically still get the sizing info from the old
+ * gem fonts.   I'm not sure how to get sizing info out of
+ * PostScript.  We'll try and arrange it so that the PostScript
+ * fonts match the gem fonts more or less. */
+void *v = font;
+if (v != pscm->curFont)
+    {
+    psTimesFont(pscm->ps, font->psHeight);
+    pscm->curFont = v;
+    }
+}
+
+void pscmText(struct pscmGfx *pscm, int x, int y, int color, 
+	MgFont *font, char *text)
+/* Draw a line of text with upper left corner x,y. */
+{
+pscmSetColor(pscm, color);
+pscmSetFont(pscm, font);
+psTextAt(pscm->ps, x, y, text);
+boxPscm = NULL;
+}
+
+void pscmTextRight(struct pscmGfx *pscm, int x, int y, int width, int height,
+	int color, MgFont *font, char *text)
+/* Draw a line of text right justified in box defined by x/y/width/height */
+{
+pscmSetColor(pscm, color);
+pscmSetFont(pscm, font);
+psTextRight(pscm->ps, x, y, width, height, text);
+boxPscm = NULL;
+}
+
+void pscmTextCentered(struct pscmGfx *pscm, int x, int y, 
+	int width, int height, int color, MgFont *font, char *text)
+/* Draw a line of text centered in box defined by x/y/width/height */
+{
+pscmSetColor(pscm, color);
+pscmSetFont(pscm, font);
+psTextCentered(pscm->ps, x, y, width, height, text);
+boxPscm = NULL;
+}
+
+void pscmFillUnder(struct pscmGfx *pscm, int x1, int y1, int x2, int y2, 
+	int bottom, Color color)
+/* Draw a 4 sided filled figure that has line x1/y1 to x2/y2 at
+ * it's top, a horizontal line at bottom at it's bottom,  and
+ * vertical lines from the bottom to y1 on the left and bottom to
+ * y2 on the right. */
+{
+pscmSetColor(pscm, color);
+psFillUnder(pscm->ps, x1, y1, x2, y2, bottom);
+boxPscm = NULL;
+}
+
+void psPolyFindExtremes(struct gfxPoly *poly, 
+  int *pMinX, int *pMaxX,  
+  int *pMinY, int *pMaxY)
+/* find min and max of x and y */
+{
+struct gfxPoint *p = poly->ptList;
+int minX, maxX, minY, maxY;
+minX = maxX =  p->x;
+minY = maxY =  p->y;
+for (;;)
+    {
+    p = p->next;
+    if (p == poly->ptList)
+	break;
+    if (minX > p->x) minX = p->x;
+    if (minY > p->y) minY = p->y;
+    if (maxX < p->x) maxX = p->x;
+    if (maxY < p->y) maxY = p->y;
+    }
+*pMinX = minX;
+*pMaxX = maxX;
+*pMinY = minY;
+*pMaxY = maxY;
+}
+
+double gfxSlope(struct gfxPoint *q, struct gfxPoint *p)
+/* determine slope from two gfxPoints */
+{
+double dx = p->x - q->x;
+double dy = p->y - q->y;
+return dy/dx;
+}
+
+boolean colinearPoly(struct gfxPoly *poly)
+/* determine if points are co-linear */
+{
+if (poly->ptCount < 2) return TRUE;
+struct gfxPoint *q = poly->ptList, *p=q->next;
+double m0 = gfxSlope(q,p);
+for (;;)
+    {
+    p = p->next;
+    if (p == poly->ptList)
+	break;
+    double m1 = gfxSlope(q,p);
+    if (!(isinf(m0) && isinf(m1)) && (m1 != m0))
+	return FALSE;
+    }
+return TRUE;
+}
+
+double fatPixel(double c, double center, double fat)
+/* fatten coordinate by scaling */
+{
+return center+((c-center)*fat);
+}
+
+
+void pscmPolyFatten(struct psPoly *psPoly, 
+  int minX, int maxX, int minY, int maxY)
+/* Fatten polygon by finding the center and then
+ * scaling by 0.5 pixel from the center in all directions.
+ * Caller assures dx and dy will NOT be zero. */
+{
+int dx = maxX - minX;
+int dy = maxY - minY;
+double centerX = (maxX + minX) / 2.0;
+double centerY = (maxY + minY) / 2.0;
+double fatX = (dx + 1.0)/dx;
+double fatY = (dy + 1.0)/dy;
+struct psPoint *p = psPoly->ptList;
+for (;;)
+    {
+    p->x = fatPixel(p->x, centerX, fatX);
+    p->y = fatPixel(p->y, centerY, fatY);
+    p = p->next;
+    if (p == psPoly->ptList)
+	break;
+    }
+}
+
+void findLineParams(double x1, double y1, double x2, double y2, double *m, double *b)
+/* Return parameters slope m and y-intercept b of equation for line from x1,y1 to x2,y2, 
+ * vertical lines return infinite slope with b = x value instead */
+{
+double dx = x2 - x1;
+double dy = y2 - y1;
+*m = dy/dx;
+if (dx == 0)
+    *b = x1;
+else
+    *b = y1 - (*m)*x1;
+}
+
+
+double bDeltaForParallelLine(double d, double m)
+/* find delta-b value for parallel line at distance d for line slope m */
+{
+return d * sqrt(1 + m*m); /* do not call with m == infinity */
+}
+
+void adjustBForParallelLine(boolean cw, double m, 
+double x1, double y1, 
+double x2, double y2, 
+double *b)
+/* adjust the b value for parallel line at distance d for line slope m 
+ *  cw if clockwise */
+{
+if (isinf(m))  /* handle vertical lines */
+    {
+    if ((cw && (y2 < y1)) || (!cw && (y2 > y1)))
+	*b += 1;   /* b holds x-value rather than y-intercept */
+    else
+	*b -= 1;
+    }
+else
+    {
+    /* Y axis is increasing downwards */
+    double bDelta = bDeltaForParallelLine(1.0, m);
+    if ((cw && (x2 > x1)) || (!cw && (x2 < x1)))
+       *b += bDelta; 
+    else
+       *b -= bDelta;
+    }
+}
+
+void findLinesIntersection(boolean cw, double m0, double b0, double m1, double b1, 
+double px, double py, boolean posDeltaX, boolean posDeltaY,
+double *ix, double *iy)
+/* find intersection between two lines */
+{
+
+/* colinear vert */
+if ((isinf(m0) && isinf(m1)) && (b0 == b1)) 
+    {
+    if (cw ^ posDeltaY)
+    	*ix = px+1;
+    else
+    	*ix = px-1;
+    *iy = py; 
+    }
+/* colinear horiz */
+else if (((m0==0)&&(m1==0)) && (b0 == b1)) 
+    {
+    if (cw ^ posDeltaX)
+    	*iy = py+1;
+    else
+    	*iy = py-1;
+    *ix = px; 
+    }
+/* colinear */
+else if ((m0 == m1) && (b0 == b1))  
+    {
+    /* inner point shifted 1 pixel away from the point,
+     *   moving perpendicular to m0 towards the center */
+
+    double dx, dy;
+    double m = -1/m0; 
+    dx = sqrt(1/(1+m*m));
+    dy = m * dx;
+
+    if (!(cw ^ posDeltaX))
+	{
+	*ix = px + dx;
+	*iy = py + dy;
+	}
+    else
+	{
+	*ix = px - dx;
+	*iy = py - dy;
+	}
+
+    }
+/* non-colinear */
+else
+    {
+    if (isinf(m0) && isinf(m1))
+	{  /* should be handled earlier by colinear vert lines above */
+	errAbort("pscmGfx: m0 and m1 both inf, shouldn't get here");
+	}
+    else if (!isinf(m0) && isinf(m1))
+	{
+    	*ix = b1;
+	*iy = m0*(*ix)+b0;
+	}
+    else if (isinf(m0) && !isinf(m1))
+	{
+    	*ix = b0;
+	*iy = m1*(*ix)+b1;
+	}
+    else if (!isinf(m0) && !isinf(m1))
+	{
+    	*ix = -(b1-b0)/(m1-m0);
+	*iy = m0*(*ix)+b0;
+	}
+    }
+}
+
+boolean pscmIsClockwise(struct psPoly *psPoly)
+/* determine if polygon points are in clockwise order or not
+ * using cross-product sum*/
+{
+struct psPoint *p = psPoly->ptList,*q;
+double x0, y0; 
+double x1, y1;
+double x2, y2;
+double crossProd = 0;
+x1 = p->x;
+y1 = p->y;
+p = p->next;
+x2 = p->x;
+y2 = p->y;
+p = p->next;
+q = p;
+for (;;)
+    {
+    x0 = x1;
+    y0 = y1;
+    x1 = x2;
+    y1 = y2;
+    x2 = p->x;
+    y2 = p->y;
+    crossProd += ((x1-x0)*(y2-y1) - (y1-y0)*(x2-x1));
+    p = p->next;
+    if (p == q) 
+	break;
+    }
+return (crossProd > 0);
+}
+
+void pscmPolyTrapStrokeOutline(struct pscmGfx *pscm, struct psPoly *psPoly)
+/* Stroke a fattened polygon using trapezoids. 
+ * Make each stroke-segment of the poly be made of a 4-sided trapezoidal figure
+ * whose inner edge is parallel 1 pixel away and the points are found
+ * by finding the intersections of these parallel lines. */
+{
+
+struct psPoint *p = psPoly->ptList,*q;
+double px0, py0; /* outer points */
+double px1, py1;
+double m0,b0;
+double m1,b1;
+double ix0,iy0;  /* inner points */
+double ix1,iy1;
+
+boolean cw = pscmIsClockwise(psPoly);
+
+px1 = p->x;
+py1 = p->y;
+p = p->next;
+findLineParams(px1, py1, p->x, p->y, &m1, &b1);
+adjustBForParallelLine(cw, m1, px1, py1, p->x, p->y, &b1);
+px0 = px1;
+py0 = py1;
+px1 = p->x;
+py1 = p->y;
+p = p->next;
+m0 = m1;
+b0 = b1;
+findLineParams(px1, py1, p->x, p->y, &m1, &b1);
+adjustBForParallelLine(cw, m1, px1, py1, p->x, p->y, &b1);
+
+findLinesIntersection(cw,m0,b0,m1,b1,px1,py1,
+    (px1<px0) ^ (m0 < 0),
+    (py1>py0),
+    &ix1,&iy1);
+
+px0 = px1;
+py0 = py1;
+px1 = p->x;
+py1 = p->y;
+p = p->next;
+q = p;
+for (;;)
+    {
+
+    m0 = m1;
+    b0 = b1;
+    ix0 = ix1;
+    iy0 = iy1;
+    findLineParams(px1, py1, p->x, p->y, &m1, &b1);
+    adjustBForParallelLine(cw, m1, px1, py1, p->x, p->y, &b1);
+
+    findLinesIntersection(cw,m0,b0,m1,b1,px1,py1,
+	(px1<px0) ^ (m0 < 0),
+	(py1>py0),
+	&ix1,&iy1);
+
+    struct psPoly *inner = psPolyNew();
+    psPolyAddPoint(inner,px0, py0);
+    psPolyAddPoint(inner,px1, py1);
+    psPolyAddPoint(inner,ix1, iy1);
+    psPolyAddPoint(inner,ix0, iy0);
+    psDrawPoly(pscm->ps, inner, TRUE);
+    psPolyFree(&inner);
+
+    px0 = px1;
+    py0 = py1;
+    px1 = p->x;
+    py1 = p->y;
+    p = p->next;
+    if (p == q) 
+	break;
+    }
+
+}
+
+void pscmDrawPoly(struct pscmGfx *pscm, struct gfxPoly *poly, Color color, 
+	boolean filled)
+/* Draw a polygon, possibly filled, in color. */
+{
+struct gfxPoint *p = poly->ptList;
+struct psPoly *psPoly = psPolyNew();
+int minX, maxX, minY, maxY;
+if (poly->ptCount < 1)  /* nothing to do */
+    {
+    return;
+    }
+psPolyFindExtremes(poly, &minX, &maxX, &minY, &maxY);
+/*  check for co-linear polygon, render as line instead */
+if (colinearPoly(poly)) 
+    {
+    pscmLine(pscm, minX, minY, maxX, maxY, color);
+    return;
+    }
+pscmSetColor(pscm, color);
+/* convert pixel coords to real values */
+for (;;)
+    {
+    psPolyAddPoint(psPoly,p->x, p->y);
+    p = p->next;
+    if (p == poly->ptList)
+	break;
+    }
+boolean fat = sameString(pscmGetHint(pscm,"fat"),"on");
+if (fat)
+    pscmPolyFatten(psPoly, minX, maxX, minY, maxY);
+if (fat && !filled)
+    pscmPolyTrapStrokeOutline(pscm,psPoly);
+else
+    psDrawPoly(pscm->ps, psPoly, filled);
+psPolyFree(&psPoly);
+}
+
+
+
+void pscmFatLine(struct pscmGfx *pscm, double x1, double y1, double x2, double y2)
+/* Draw a line from x1/y1 to x2/y2 by making a filled polygon.
+ *  This also avoids some problems with stroke-width variation
+ *  from different postscript implementations. */
+{
+struct psPoly *psPoly = psPolyNew();
+
+double cX = (x1+x2)/2.0;
+double cY = (y1+y2)/2.0;
+double fX;
+double fY;
+
+/* fatten by lengthing line by 0.5 at each end */
+fX = fY = 1.0+0.5*sqrt(0.5);  
+
+/* expand the length of the line by a half-pixel on each end */
+x1 = fatPixel(x1,cX,fX);
+x2 = fatPixel(x2,cX,fX);
+y1 = fatPixel(y1,cY,fY);
+y2 = fatPixel(y2,cY,fY);
+
+
+/* calculate 4 corners {h,i,j,k} of the rectangle covered */
+
+double m = (y2 - y1)/(x2 - x1);
+m = -1/m;  /* rotate slope 90 degrees */
+
+double ddX = sqrt( (0.5*0.5) / (m*m+1) );
+double ddY = m * ddX;
+
+double hX = x1-ddX, hY = y1-ddY;
+double iX = x1+ddX, iY = y1+ddY;
+double jX = x2+ddX, jY = y2+ddY;
+double kX = x2-ddX, kY = y2-ddY;
+
+psPolyAddPoint(psPoly,hX,hY);
+psPolyAddPoint(psPoly,iX,iY);
+psPolyAddPoint(psPoly,jX,jY);
+psPolyAddPoint(psPoly,kX,kY);
+psDrawPoly(pscm->ps, psPoly, TRUE);
+psPolyFree(&psPoly);
+
+}
+
+
+void pscmLine(struct pscmGfx *pscm, 
+	int x1, int y1, int x2, int y2, int color)
+/* Draw a line from one point to another. */
+{
+pscmSetColor(pscm, color);
+boolean fat = sameString(pscmGetHint(pscm,"fat"),"on");
+if (fat)
+    pscmFatLine(pscm, x1, y1, x2, y2);
+else
+    psDrawLine(pscm->ps, x1, y1, x2, y2);
+boxPscm = NULL;
+}
+
+
+struct vGfx *vgOpenPostScript(int width, int height, char *fileName)
+/* Open up something that will someday be a PostScript file. */
+{
+struct vGfx *vg = vgHalfInit(width, height);
+vg->data = pscmOpen(width, height, fileName);
+vg->close = (vg_close)pscmClose;
+vg->dot = (vg_dot)pscmDot;
+vg->box = (vg_box)pscmBox;
+vg->line = (vg_line)pscmLine;
+vg->text = (vg_text)pscmText;
+vg->textRight = (vg_textRight)pscmTextRight;
+vg->textCentered = (vg_textCentered)pscmTextCentered;
+vg->findColorIx = (vg_findColorIx)pscmFindColorIx;
+vg->colorIxToRgb = (vg_colorIxToRgb)pscmColorIxToRgb;
+vg->setClip = (vg_setClip)pscmSetClip;
+vg->unclip = (vg_unclip)pscmUnclip;
+vg->verticalSmear = (vg_verticalSmear)pscmVerticalSmear;
+vg->fillUnder = (vg_fillUnder)pscmFillUnder;
+vg->drawPoly = (vg_drawPoly)pscmDrawPoly;
+vg->setHint = (vg_setHint)pscmSetHint;
+vg->getHint = (vg_getHint)pscmGetHint;
+vg->getFontPixelHeight = (vg_getFontPixelHeight)pscmGetFontPixelHeight;
+vg->getFontStringWidth = (vg_getFontStringWidth)pscmGetFontStringWidth;
+vg->setWriteMode = (vg_setWriteMode)pscmSetWriteMode;
+return vg;
+}
+
diff --git a/gbtools/src/blatSrc/lib/psl.as b/gbtools/src/blatSrc/lib/psl.as
new file mode 100644
index 0000000..7114683
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/psl.as
@@ -0,0 +1,25 @@
+table psl
+"Summary info about a patSpace alignment"
+    (
+    uint matches;  "Number of bases that match that aren't repeats"
+    uint misMatches; "Number of bases that don't match"
+    uint repMatches; "Number of bases that match but are part of repeats"
+    uint nCount;  "Number of 'N' bases"
+    uint qNumInsert; "Number of inserts in query"
+    int qBaseInsert; "Number of bases inserted in query"
+    uint tNumInsert; "Number of inserts in target"
+    int tBaseInsert; "Number of bases inserted in target"
+    char[2] strand; "+ or - for strand. First character query, second target (optional)"
+    string qName; "Query sequence name"
+    uint qSize; "Query sequence size"
+    uint qStart; "Alignment start position in query"
+    uint qEnd; "Alignment end position in query"
+    string tName; "Target sequence name"
+    uint tSize; "Target sequence size"
+    uint tStart; "Alignment start position in target"
+    uint tEnd; "Alignment end position in target"
+    uint blockCount; "Number of blocks in alignment"
+    uint[blockCount] blockSizes; "Size of each block"
+    uint[blockCount] qStarts; "Start of each block in query."
+    uint[blockCount] tStarts; "Start of each block in target."
+    )
diff --git a/gbtools/src/blatSrc/lib/psl.c b/gbtools/src/blatSrc/lib/psl.c
new file mode 100644
index 0000000..8e4611a
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/psl.c
@@ -0,0 +1,1961 @@
+/* psl.c was originally generated by the autoSql program, which also 
+ * generated as_psl.h and as_psl.sql.  This module links the database and the RAM 
+ * representation of objects. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "sqlNum.h"
+#include "sqlList.h"
+#include "localmem.h"
+#include "psl.h"
+#include "hash.h"
+#include "linefile.h"
+#include "dnaseq.h"
+#include "dystring.h"
+#include "fuzzyFind.h"
+#include "aliType.h"
+#include "binRange.h"
+#include "rangeTree.h"
+
+
+struct psl *pslxLoad(char **row)
+/* Load a psl from row fetched with select * from psl
+ * from database.  Dispose of this with pslFree(). */
+{
+struct psl *ret = pslLoad(row);
+int retSize;
+sqlStringDynamicArray(row[21],&ret->qSequence, &retSize);
+sqlStringDynamicArray(row[22],&ret->tSequence, &retSize);
+return ret;
+}
+
+struct psl *pslLoad(char **row)
+/* Load a psl from row fetched with select * from psl
+ * from database.  Dispose of this with pslFree(). */
+{
+struct psl *ret;
+int sizeOne;
+
+AllocVar(ret);
+ret->blockCount = sqlUnsigned(row[17]);
+ret->match = sqlUnsigned(row[0]);
+ret->misMatch = sqlUnsigned(row[1]);
+ret->repMatch = sqlUnsigned(row[2]);
+ret->nCount = sqlUnsigned(row[3]);
+ret->qNumInsert = sqlUnsigned(row[4]);
+ret->qBaseInsert = sqlSigned(row[5]);
+ret->tNumInsert = sqlUnsigned(row[6]);
+ret->tBaseInsert = sqlSigned(row[7]);
+strcpy(ret->strand, row[8]);
+ret->qName = cloneString(row[9]);
+ret->qSize = sqlUnsigned(row[10]);
+ret->qStart = sqlUnsigned(row[11]);
+ret->qEnd = sqlUnsigned(row[12]);
+ret->tName = cloneString(row[13]);
+ret->tSize = sqlUnsigned(row[14]);
+ret->tStart = sqlUnsigned(row[15]);
+ret->tEnd = sqlUnsigned(row[16]);
+sqlUnsignedDynamicArray(row[18], &ret->blockSizes, &sizeOne);
+if (sizeOne != ret->blockCount)
+    {
+    printf("sizeOne bloxksizes %d bs %d block=%s\n",sizeOne, ret->blockCount,row[18]);
+    }
+assert(sizeOne == ret->blockCount);
+sqlUnsignedDynamicArray(row[19], &ret->qStarts, &sizeOne);
+if (sizeOne != ret->blockCount)
+    {
+    printf("sizeOne qStarts %d bs %d\n",sizeOne, ret->blockCount);
+    }
+assert(sizeOne == ret->blockCount);
+sqlUnsignedDynamicArray(row[20], &ret->tStarts, &sizeOne);
+if (sizeOne != ret->blockCount)
+    {
+    printf("sizeOne tStarts %d bs %d\n",sizeOne, ret->blockCount);
+    }
+assert(sizeOne == ret->blockCount);
+return ret;
+}
+
+struct psl *pslCommaIn(char **pS, struct psl *ret)
+/* Create a psl out of a comma separated string. 
+ * This will fill in ret if non-null, otherwise will
+ * return a new psl */
+{
+char *s = *pS;
+int i;
+
+if (ret == NULL)
+    AllocVar(ret);
+ret->match = sqlUnsignedComma(&s);
+ret->misMatch = sqlUnsignedComma(&s);
+ret->repMatch = sqlUnsignedComma(&s);
+ret->nCount = sqlUnsignedComma(&s);
+ret->qNumInsert = sqlUnsignedComma(&s);
+ret->qBaseInsert = sqlSignedComma(&s);
+ret->tNumInsert = sqlUnsignedComma(&s);
+ret->tBaseInsert = sqlSignedComma(&s);
+sqlFixedStringComma(&s, ret->strand, sizeof(ret->strand));
+ret->qName = sqlStringComma(&s);
+ret->qSize = sqlUnsignedComma(&s);
+ret->qStart = sqlUnsignedComma(&s);
+ret->qEnd = sqlUnsignedComma(&s);
+ret->tName = sqlStringComma(&s);
+ret->tSize = sqlUnsignedComma(&s);
+ret->tStart = sqlUnsignedComma(&s);
+ret->tEnd = sqlUnsignedComma(&s);
+ret->blockCount = sqlUnsignedComma(&s);
+s = sqlEatChar(s, '{');
+AllocArray(ret->blockSizes, ret->blockCount);
+for (i=0; i<ret->blockCount; ++i)
+    {
+    ret->blockSizes[i] = sqlUnsignedComma(&s);
+    }
+s = sqlEatChar(s, '}');
+s = sqlEatChar(s, ',');
+s = sqlEatChar(s, '{');
+AllocArray(ret->qStarts, ret->blockCount);
+for (i=0; i<ret->blockCount; ++i)
+    {
+    ret->qStarts[i] = sqlUnsignedComma(&s);
+    }
+s = sqlEatChar(s, '}');
+s = sqlEatChar(s, ',');
+s = sqlEatChar(s, '{');
+AllocArray(ret->tStarts, ret->blockCount);
+for (i=0; i<ret->blockCount; ++i)
+    {
+    ret->tStarts[i] = sqlUnsignedComma(&s);
+    }
+s = sqlEatChar(s, '}');
+s = sqlEatChar(s, ',');
+*pS = s;
+return ret;
+}
+
+void pslFree(struct psl **pEl)
+/* Free a single dynamically allocated psl such as created
+ * with pslLoad(). */
+{
+struct psl *el;
+
+if ((el = *pEl) == NULL) return;
+freeMem(el->qName);
+freeMem(el->tName);
+freeMem(el->blockSizes);
+freeMem(el->qStarts);
+freeMem(el->tStarts);
+if (el->qSequence)
+    {
+    freeMem(el->qSequence[0]);
+    freeMem(el->qSequence);
+    }
+if (el->tSequence)
+    {
+    freeMem(el->tSequence[0]);
+    freeMem(el->tSequence);
+    }
+freez(pEl);
+}
+
+void pslFreeList(struct psl **pList)
+/* Free a list of dynamically allocated psl's */
+{
+struct psl *el, *next;
+
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    pslFree(&el);
+    }
+*pList = NULL;
+}
+
+void pslOutput(struct psl *el, FILE *f, char sep, char lastSep) 
+/* Print out psl.  Separate fields with sep. Follow last field with lastSep. */
+{
+int i;
+fprintf(f, "%u", el->match);
+fputc(sep,f);
+fprintf(f, "%u", el->misMatch);
+fputc(sep,f);
+fprintf(f, "%u", el->repMatch);
+fputc(sep,f);
+fprintf(f, "%u", el->nCount);
+fputc(sep,f);
+fprintf(f, "%u", el->qNumInsert);
+fputc(sep,f);
+fprintf(f, "%d", el->qBaseInsert);
+fputc(sep,f);
+fprintf(f, "%u", el->tNumInsert);
+fputc(sep,f);
+fprintf(f, "%d", el->tBaseInsert);
+fputc(sep,f);
+if (sep == ',') fputc('"',f);
+fprintf(f, "%s", el->strand);
+if (sep == ',') fputc('"',f);
+fputc(sep,f);
+if (sep == ',') fputc('"',f);
+fprintf(f, "%s", el->qName);
+if (sep == ',') fputc('"',f);
+fputc(sep,f);
+fprintf(f, "%u", el->qSize);
+fputc(sep,f);
+fprintf(f, "%u", el->qStart);
+fputc(sep,f);
+fprintf(f, "%u", el->qEnd);
+fputc(sep,f);
+if (sep == ',') fputc('"',f);
+fprintf(f, "%s", el->tName);
+if (sep == ',') fputc('"',f);
+fputc(sep,f);
+fprintf(f, "%u", el->tSize);
+fputc(sep,f);
+fprintf(f, "%u", el->tStart);
+fputc(sep,f);
+fprintf(f, "%u", el->tEnd);
+fputc(sep,f);
+fprintf(f, "%u", el->blockCount);
+fputc(sep,f);
+if (sep == ',') fputc('{',f);
+for (i=0; i<el->blockCount; ++i)
+    {
+    fprintf(f, "%u", el->blockSizes[i]);
+    fputc(',', f);
+    }
+if (sep == ',') fputc('}',f);
+fputc(sep,f);
+if (sep == ',') fputc('{',f);
+for (i=0; i<el->blockCount; ++i)
+    {
+    fprintf(f, "%u", el->qStarts[i]);
+    fputc(',', f);
+    }
+if (sep == ',') fputc('}',f);
+fputc(sep,f);
+if (sep == ',') fputc('{',f);
+for (i=0; i<el->blockCount; ++i)
+    {
+    fprintf(f, "%u", el->tStarts[i]);
+    fputc(',', f);
+    }
+if (sep == ',') fputc('}',f);
+if (el->qSequence)
+    {
+    fputc(sep,f);
+    if (sep == ',') fputc('{',f);
+    for (i=0; i<el->blockCount; ++i)
+	{
+	fprintf(f, "%s", el->qSequence[i]);
+	fputc(',', f);
+	}
+    if (sep == ',') fputc('}',f);
+    fputc(sep,f);
+    if (sep == ',') fputc('{',f);
+    for (i=0; i<el->blockCount; ++i)
+	{
+	fprintf(f, "%s", el->tSequence[i]);
+	fputc(',', f);
+	}
+    if (sep == ',') fputc('}',f);
+    }
+
+fputc(lastSep,f);
+if (ferror(f))
+    {
+    perror("Error writing psl file\n");
+    errAbort("\n");
+    }
+}
+
+/* ----- end autoSql generated part --------------- */
+
+void pslOutputShort(struct psl *el, FILE *f, char sep, char lastSep) 
+/* Print out psl.  Separate fields with sep. Follow last field with lastSep. */
+{
+fprintf(f, "%u", el->match);
+fputc(sep,f);
+fprintf(f, "%u", el->misMatch);
+fputc(sep,f);
+fprintf(f, "%u", el->repMatch);
+fputc(sep,f);
+fprintf(f, "%u", el->qNumInsert);
+fputc(sep,f);
+fprintf(f, "%d", el->qBaseInsert);
+fputc(sep,f);
+fprintf(f, "%u", el->tNumInsert);
+fputc(sep,f);
+fprintf(f, "%d", el->tBaseInsert);
+fputc(sep,f);
+if (sep == ',') fputc('"',f);
+fprintf(f, "%s", el->strand);
+if (sep == ',') fputc('"',f);
+fputc(sep,f);
+if (sep == ',') fputc('"',f);
+fprintf(f, "%s", el->qName);
+if (sep == ',') fputc('"',f);
+fputc(sep,f);
+fprintf(f, "%u", el->qStart);
+fputc(sep,f);
+fprintf(f, "%u", abs(el->qEnd - el->qStart));
+fputc(sep,f);
+if (sep == ',') fputc('"',f);
+fprintf(f, "%s", el->tName);
+if (sep == ',') fputc('"',f);
+fputc(sep,f);
+fprintf(f, "%u", el->tStart);
+fputc(sep,f);
+fprintf(f, "%u", abs(el->tEnd - el->tStart));
+fputc(sep,f);
+fprintf(f, "%u", el->blockCount);
+fputc(sep,f);
+if (sep == ',') fputc('{',f);
+fputc(lastSep,f);
+if (ferror(f))
+    {
+    perror("Error writing psl file\n");
+    errAbort("\n");
+    }
+}
+
+void pslOutFormat(struct psl *el, FILE *f, char sep, char lastSep) 
+/* Print out selected psl values.  Separate fields with sep. Follow last field with lastSep. */
+/* Prints out a better format with bold field headings followed by value */
+/* Requires further upstream work to ensure that only the field headers */
+/* declared here are printed if replacing an existing psl print function*/
+{
+const char *headers[] = {"Matches", "Mismatches", "Matches in repeats", "Number of N bases", "Query name", "Size", "Start", "End", "Chromosome", "Strand", "Start", "End"};
+char *hformat = "<B>%s:</B> "; /* string for formatted print for headers */
+char *uformat = "<B>%s:</B> %u%c"; /* string for formatted print for unsigned variable */
+char *targName;
+
+fprintf(f, uformat, headers[0], el->match, sep);
+fprintf(f, uformat, headers[1], el->misMatch, sep);
+fprintf(f, uformat, headers[2], el->repMatch, sep);
+fprintf(f, uformat, headers[3], el->nCount, sep);
+
+fprintf(f, hformat, headers[4]);
+if (sep == ',') fputc('"',f);
+fprintf(f, "%s", el->qName);
+if (sep == ',') fputc('"',f);
+fputc(sep,f);
+
+fprintf(f, uformat, headers[5], el->qSize, sep);
+fprintf(f, uformat, headers[6], el->qStart, sep);
+fprintf(f, uformat, headers[7], el->qEnd, sep);
+
+fprintf(f, hformat, headers[8]);
+if (sep == ',') fputc('"',f);
+/* skip leading 'chr' in string to get only chromosome part */
+targName = el->tName;
+if (startsWith("chr", el->tName))
+   targName += 3;
+fprintf(f, "%s", targName);
+
+if (sep == ',') fputc('"',f);
+fputc(sep,f);
+
+fprintf(f, hformat, headers[9]);
+if (sep == ',') fputc('"',f);
+fprintf(f, "%s", el->strand);
+if (sep == ',') fputc('"',f);
+fputc(sep,f);
+
+fprintf(f, uformat, headers[10], el->tStart, sep);
+fprintf(f, uformat, headers[11], el->tEnd, sep);
+
+fputc(lastSep,f);
+
+if (ferror(f))
+    {
+    perror("Error writing psl file\n");
+    errAbort("\n");
+    }
+
+}
+
+struct psl *pslLoadAll(char *fileName)
+/* Load all psl's in file. */
+{
+struct lineFile *lf = pslFileOpen(fileName);
+struct psl *pslList = NULL, *psl;
+while ((psl = pslNext(lf)) != NULL)
+    {
+    slAddHead(&pslList, psl);
+    }
+slReverse(&pslList);
+lineFileClose(&lf);
+return pslList;
+}
+
+
+int pslCmpQuery(const void *va, const void *vb)
+/* Compare to sort based on query start. */
+{
+const struct psl *a = *((struct psl **)va);
+const struct psl *b = *((struct psl **)vb);
+int dif;
+dif = strcmp(a->qName, b->qName);
+if (dif == 0)
+    dif = a->qStart - b->qStart;
+return dif;
+}
+
+int pslCmpTarget(const void *va, const void *vb)
+/* Compare to sort based on target start. */
+{
+const struct psl *a = *((struct psl **)va);
+const struct psl *b = *((struct psl **)vb);
+int dif;
+dif = strcmp(a->tName, b->tName);
+if (dif == 0)
+    dif = a->tStart - b->tStart;
+return dif;
+}
+
+int pslCmpTargetAndStrand(const void *va, const void *vb)
+/* Compare to sort based on target, strand,  tStart. */
+{
+const struct psl *a = *((struct psl **)va);
+const struct psl *b = *((struct psl **)vb);
+int dif;
+dif = strcmp(a->tName, b->tName);
+if (dif == 0)
+    dif = strcmp(a->strand, b->strand);
+if (dif == 0)
+    dif = a->tStart - b->tStart;
+return dif;
+}
+
+
+int pslCmpScore(const void *va, const void *vb)
+/* Compare to sort based on score (descending). */
+{
+const struct psl *a = *((struct psl **)va);
+const struct psl *b = *((struct psl **)vb);
+return pslScore(b) - pslScore(a);
+}
+
+int pslCmpQueryScore(const void *va, const void *vb)
+/* Compare to sort based on query then score (descending). */
+{
+const struct psl *a = *((struct psl **)va);
+const struct psl *b = *((struct psl **)vb);
+int diff = strcmp(a->qName, b->qName);
+if (diff == 0)
+    diff = pslScore(b) - pslScore(a);
+return diff;
+}
+
+int pslCmpMatch(const void *va, const void *vb)
+/* Compare to sort based on match */
+{
+const struct psl *a = *((struct psl **)va);
+const struct psl *b = *((struct psl **)vb);
+return b->match - a->match;
+}
+
+static void pslLabelColumns(FILE *f)
+/* Write column info. */
+{
+fputs("\n"
+"match\tmis- \trep. \tN's\tQ gap\tQ gap\tT gap\tT gap\tstrand\tQ        \tQ   \tQ    \tQ  \tT        \tT   \tT    \tT  \tblock\tblockSizes \tqStarts\t tStarts\n"
+"     \tmatch\tmatch\t   \tcount\tbases\tcount\tbases\t      \tname     \tsize\tstart\tend\tname     \tsize\tstart\tend\tcount\n" 
+"---------------------------------------------------------------------------------------------------------------------------------------------------------------\n",
+f);
+}
+
+void pslxWriteHead(FILE *f, enum gfType qType, enum gfType tType)
+/* Write header for extended (possibly protein) psl file. */
+{
+fprintf(f, "psLayout version 4 %s %s\n", gfTypeName(qType), gfTypeName(tType));
+pslLabelColumns(f);
+}
+
+void pslWriteHead(FILE *f)
+/* Write head of psl. */
+{
+fputs("psLayout version 3\n", f);
+pslLabelColumns(f);
+}
+
+void pslWriteAll(struct psl *pslList, char *fileName, boolean writeHeader)
+/* Write a psl file from list. */
+{
+FILE *f;
+struct psl *psl;
+
+f = mustOpen(fileName, "w");
+if (writeHeader)
+    pslWriteHead(f);
+for (psl = pslList; psl != NULL; psl = psl->next)
+    pslTabOut(psl, f);
+fclose(f);
+}
+
+void pslxFileOpen(char *fileName, enum gfType *retQueryType, enum gfType *retTargetType, struct lineFile **retLf)
+/* Read header part of psl and make sure it's right.  Return
+ * sequence types and file handle. */
+{
+char *line;
+int lineSize;
+char *words[30];
+char *version;
+int wordCount;
+int i;
+enum gfType qt = gftRna,  tt = gftDna;
+struct lineFile *lf = lineFileOpen(fileName, TRUE);
+
+if (!lineFileNext(lf, &line, &lineSize))
+    warn("%s is empty", fileName);
+else
+    {
+    if (startsWith("psLayout version", line))
+	{
+	wordCount = chopLine(line, words);
+	if (wordCount < 3)
+	    errAbort("%s is not a psLayout file", fileName);
+	version = words[2];
+	if (sameString(version, "3"))
+	    {
+	    }
+	else if (sameString(version, "4"))
+	    {
+	    qt = gfTypeFromName(words[3]);
+	    tt = gfTypeFromName(words[4]);
+	    }
+	else
+	    {
+	    errAbort("%s is version %s of psLayout, this program can only handle through version 4",
+		fileName,  version);
+	    }
+	for (i=0; i<4; ++i)
+	    {
+	    if (!lineFileNext(lf, &line, &lineSize))
+		errAbort("%s severely truncated", fileName);
+	    }
+	}
+    else
+	lineFileReuse(lf); 
+    }
+*retQueryType = qt;
+*retTargetType = tt;
+*retLf = lf;
+}
+
+static void pslxFileOpenWithMetaConfig(char *fileName, bool isMetaUnique, enum gfType *retQueryType, enum gfType *retTargetType, struct lineFile **retLf, FILE *f)
+/* Read header part of psl and make sure it's right.  Return
+ * sequence types and file handle and send meta data to output file f */
+{
+char *line;
+int lineSize;
+char *words[30];
+char *version;
+int wordCount;
+int i;
+enum gfType qt = gftRna,  tt = gftDna;
+struct lineFile *lf = lineFileOpen(fileName, TRUE);
+
+lineFileSetMetaDataOutput(lf, f);
+if (isMetaUnique)
+    lineFileSetUniqueMetaData(lf);
+if (!lineFileNext(lf, &line, &lineSize))
+    warn("%s is empty", fileName);
+else
+    {
+    if (startsWith("psLayout version", line))
+	{
+	wordCount = chopLine(line, words);
+	if (wordCount < 3)
+	    errAbort("%s is not a psLayout file", fileName);
+	version = words[2];
+	if (sameString(version, "3"))
+	    {
+	    }
+	else if (sameString(version, "4"))
+	    {
+	    qt = gfTypeFromName(words[3]);
+	    tt = gfTypeFromName(words[4]);
+	    }
+	else
+	    {
+	    errAbort("%s is version %s of psLayout, this program can only handle through version 4",
+		fileName,  version);
+	    }
+	for (i=0; i<4; ++i)
+	    {
+	    if (!lineFileNext(lf, &line, &lineSize))
+		errAbort("%s severely truncated", fileName);
+	    }
+	}
+    else
+        {
+	char *s = cloneString(line);
+        boolean eof = FALSE;
+        while ((line[0] == '#') && (!eof))
+            {
+            freeMem(s);
+            if (!lineFileNext(lf, &line, &lineSize))
+                eof = TRUE;
+            s = cloneString(line);
+            }
+	wordCount = chopLine(s, words);
+	if ((wordCount < 21 || wordCount > 23 || (words[8][0] != '+' && words[8][0] != '-')) && (!eof))
+	    errAbort("%s is not a psLayout file", fileName);
+	else
+	    lineFileReuse(lf); 
+	freeMem(s);
+	}
+    }
+*retQueryType = qt;
+*retTargetType = tt;
+*retLf = lf;
+}
+
+void pslxFileOpenWithMeta(char *fileName, enum gfType *retQueryType, enum gfType *retTargetType, struct lineFile **retLf, FILE *f)
+/* Read header part of psl and make sure it's right.  Return
+ * sequence types and file handle and send meta data to output file f */
+{
+pslxFileOpenWithMetaConfig(fileName, FALSE, retQueryType, retTargetType, retLf, f);
+}
+
+void pslxFileOpenWithUniqueMeta(char *fileName, enum gfType *retQueryType, enum gfType *retTargetType, struct lineFile **retLf, FILE *f)
+/* Read header part of psl and make sure it's right.  Return
+ * sequence types and file handle and send only unique meta data to output f */
+{
+pslxFileOpenWithMetaConfig(fileName, TRUE, retQueryType, retTargetType, retLf, f);
+}
+
+struct lineFile *pslFileOpen(char *fileName)
+/* Read header part of psl and make sure it's right. 
+ * Return line file handle to it. */
+{
+enum gfType qt, tt;
+struct lineFile *lf;
+pslxFileOpen(fileName, &qt, &tt, &lf);
+return lf;
+}
+
+struct lineFile *pslFileOpenWithMeta(char *fileName, FILE *f)
+/* Read header part of psl and make sure it's right. 
+ * Return line file handle to it. */
+{
+enum gfType qt, tt;
+struct lineFile *lf;
+pslxFileOpenWithMeta(fileName, &qt, &tt, &lf, f);
+return lf;
+}
+
+struct lineFile *pslFileOpenWithUniqueMeta(char *fileName, FILE *f)
+/* Read header part of psl and make sure it's right. 
+ * Set flag to suppress duplicate header comments.
+ * Return line file handle to it. */
+{
+enum gfType qt, tt;
+struct lineFile *lf;
+pslxFileOpenWithUniqueMeta(fileName, &qt, &tt, &lf, f);
+return lf;
+}
+
+struct psl *pslNext(struct lineFile *lf)
+/* Read next line from file and convert it to psl.  Return
+ * NULL at eof. */
+{
+char *line;
+int lineSize;
+char *words[32];
+int wordCount;
+static int lineAlloc = 0;
+static char *chopBuf = NULL;
+
+if (!lineFileNextReal(lf, &line))
+    {
+    return NULL;
+    }
+lineSize = strlen(line);
+if (lineSize >= lineAlloc)
+    {
+    lineAlloc = lineSize+256;
+    chopBuf = needMoreMem(chopBuf, 0, lineAlloc);
+    }
+memcpy(chopBuf, line, lineSize+1);
+wordCount = chopLine(chopBuf, words);
+if (wordCount == 21)
+    {
+    return pslLoad(words);
+    }
+if (wordCount == 23)
+    {
+    return pslxLoad(words);
+    }
+else
+    {
+    errAbort("Bad line %d of %s wordCount is %d instead of 21 or 23\n", lf->lineIx, lf->fileName, wordCount);
+    return NULL;
+    }
+}
+
+struct psl *pslxLoadLm(char **row, struct lm *lm)
+/* Load row into local memory pslx. */
+{
+struct psl *ret = pslLoadLm(row, lm);
+ret->qSequence = lmAlloc(lm, sizeof(ret->qSequence[0]) * ret->blockCount);
+sqlStringArray(lmCloneString(lm,row[21]),ret->qSequence, ret->blockCount);
+ret->tSequence = lmAlloc(lm, sizeof(ret->tSequence[0]) * ret->blockCount);
+sqlStringArray(lmCloneString(lm,row[22]),ret->tSequence, ret->blockCount);
+return ret;
+}
+
+struct psl *pslLoadLm(char **row, struct lm *lm)
+/* Load row into local memory psl. */
+{
+struct psl *ret;
+
+ret = lmAlloc(lm, sizeof(*ret));
+ret->blockCount = sqlUnsigned(row[17]);
+ret->match = sqlUnsigned(row[0]);
+ret->misMatch = sqlUnsigned(row[1]);
+ret->repMatch = sqlUnsigned(row[2]);
+ret->nCount = sqlUnsigned(row[3]);
+ret->qNumInsert = sqlUnsigned(row[4]);
+ret->qBaseInsert = sqlSigned(row[5]);
+ret->tNumInsert = sqlUnsigned(row[6]);
+ret->tBaseInsert = sqlSigned(row[7]);
+strcpy(ret->strand, row[8]);
+ret->qName = lmCloneString(lm,row[9]);
+ret->qSize = sqlUnsigned(row[10]);
+ret->qStart = sqlUnsigned(row[11]);
+ret->qEnd = sqlUnsigned(row[12]);
+ret->tName = lmCloneString(lm, row[13]);
+ret->tSize = sqlUnsigned(row[14]);
+ret->tStart = sqlUnsigned(row[15]);
+ret->tEnd = sqlUnsigned(row[16]);
+ret->blockSizes = lmAlloc(lm, sizeof(ret->blockSizes[0]) * ret->blockCount);
+sqlUnsignedArray(row[18], ret->blockSizes, ret->blockCount);
+ret->qStarts = lmAlloc(lm, sizeof(ret->qStarts[0]) * ret->blockCount);
+sqlUnsignedArray(row[19], ret->qStarts, ret->blockCount);
+ret->tStarts = lmAlloc(lm, sizeof(ret->tStarts[0]) * ret->blockCount);
+sqlUnsignedArray(row[20], ret->tStarts, ret->blockCount);
+return ret;
+}
+
+boolean pslIsProtein(const struct psl *psl)
+/* is psl a protein psl (are it's blockSizes and scores in protein space) */
+{
+int lastBlock = psl->blockCount - 1;
+
+return  (((psl->strand[1] == '+' ) &&
+    (psl->tEnd == psl->tStarts[lastBlock] + 3*psl->blockSizes[lastBlock])) ||
+   ((psl->strand[1] == '-') && 
+    (psl->tStart == (psl->tSize-(psl->tStarts[lastBlock] + 3*psl->blockSizes[lastBlock])))));
+}
+
+int pslCalcMilliBad(struct psl *psl, boolean isMrna)
+/* Calculate badness in parts per thousand. */
+{
+int sizeMul = pslIsProtein(psl) ? 3 : 1;
+int qAliSize, tAliSize, aliSize;
+int milliBad = 0;
+int sizeDif;
+int insertFactor;
+int total;
+
+qAliSize = sizeMul * (psl->qEnd - psl->qStart);
+tAliSize = psl->tEnd - psl->tStart;
+aliSize = min(qAliSize, tAliSize);
+if (aliSize <= 0)
+    return 0;
+sizeDif = qAliSize - tAliSize;
+if (sizeDif < 0)
+    {
+    if (isMrna)
+	sizeDif = 0;
+    else
+	sizeDif = -sizeDif;
+    }
+insertFactor = psl->qNumInsert;
+if (!isMrna)
+    insertFactor += psl->tNumInsert;
+
+total = (sizeMul * (psl->match + psl->repMatch + psl->misMatch));
+if (total != 0)
+    milliBad = (1000 * (psl->misMatch*sizeMul + insertFactor + round(3*log(1+sizeDif)))) / total;
+return milliBad;
+}
+
+int pslScore(const struct psl *psl)
+/* Return score for psl. */
+{
+int sizeMul = pslIsProtein(psl) ? 3 : 1;
+
+return sizeMul * (psl->match + ( psl->repMatch>>1)) - 
+	sizeMul * psl->misMatch - psl->qNumInsert - psl->tNumInsert;
+}
+
+int pslCmpScoreDesc(const void *va, const void *vb)
+/* Compare to sort based on score. */
+{
+const struct psl *a = *((struct psl **)va);
+const struct psl *b = *((struct psl **)vb);
+return pslScore(b) - pslScore(a);
+}
+
+
+struct ffAli *pslToFakeFfAli(struct psl *psl, DNA *needle, DNA *haystack)
+/* Convert from psl to ffAli format.  In some cases you can pass NULL
+ * for needle and haystack - depending what the post-processing is going
+ * to be. */
+{
+struct ffAli *ffList = NULL, *ff;
+int blockCount = psl->blockCount;
+unsigned *blockSizes = psl->blockSizes;
+unsigned *qStarts = psl->qStarts;
+unsigned *tStarts = psl->tStarts;
+int size;
+int i;
+
+for (i=0; i<blockCount; ++i)
+    {
+    size = blockSizes[i];
+    AllocVar(ff);
+    ff->left = ffList;
+    ffList = ff;
+    ff->nStart = ff->nEnd = needle + qStarts[i];
+    ff->nEnd += size;
+    ff->hStart = ff->hEnd = haystack + tStarts[i];
+    ff->hEnd += size;
+    }
+ffList = ffMakeRightLinks(ffList);
+return ffList;
+}
+
+struct psl *pslFromFakeFfAli(struct ffAli *ff, 
+	DNA *needle, DNA *haystack, char strand,
+	char *qName, int qSize, char *tName, int tSize)
+/* This will create a basic psl structure from a sorted series of ffAli
+ * blocks.  The fields that would need actual sequence to be filled in
+ * are left zero however - fields including match, repMatch, mismatch. */
+{
+struct psl *psl;
+unsigned *blockSizes;
+unsigned *qStarts;
+unsigned *tStarts;
+int blockCount;
+int i;
+int nStart, hStart;
+int nEnd, hEnd;
+
+AllocVar(psl);
+psl->blockCount = blockCount = ffAliCount(ff);
+psl->blockSizes = AllocArray(blockSizes, blockCount);
+psl->qStarts = AllocArray(qStarts, blockCount);
+psl->tStarts = AllocArray(tStarts, blockCount);
+psl->qName = cloneString(qName);
+psl->qSize = qSize;
+psl->tName = cloneString(tName);
+psl->tSize = tSize;
+psl->strand[0] = strand;
+
+for (i=0; i<blockCount; ++i)
+    {
+    nStart = ff->nStart - needle;
+    nEnd = ff->nEnd - needle;
+    hStart = ff->hStart - haystack;
+    hEnd = ff->hEnd - haystack;
+    blockSizes[i] = nEnd - nStart;
+    qStarts[i] = nStart;
+    tStarts[i] = hStart;
+    if (i == 0)
+       {
+       psl->qStart = nStart;
+       psl->tStart = hStart;
+       }
+    if (i == blockCount-1)
+       {
+       psl->qEnd = nEnd;
+       psl->tEnd = hEnd;
+       }
+    ff = ff->right;
+    }
+if (strand == '-')
+    {
+    reverseIntRange(&psl->qStart, &psl->qEnd, psl->qSize);
+    }
+return psl;
+}
+
+struct ffAli *pslToFfAli(struct psl *psl, struct dnaSeq *query, struct dnaSeq *target,
+	int targetOffset)
+/* Convert from psl to ffAli format.  Clip to parts that we actually
+ * have sequence for. */
+{
+struct ffAli *ffList = NULL, *ff;
+DNA *needle = query->dna;
+DNA *haystack = target->dna;
+int blockCount = psl->blockCount;
+unsigned *blockSizes = psl->blockSizes;
+unsigned *qStarts = psl->qStarts;
+unsigned *tStarts = psl->tStarts;
+int size;
+int i;
+int tMin = targetOffset;
+int tMax = targetOffset + target->size;
+int tStart, tEnd;
+int clipStart, clipEnd, clipOffset, clipSize;
+
+for (i=0; i<blockCount; ++i)
+    {
+    clipStart = tStart = tStarts[i];
+    size = blockSizes[i];
+    clipEnd = tEnd = tStart + size;
+    if (tStart < tMax && tEnd > tMin)
+	{
+	if (clipStart < tMin) clipStart = tMin;
+	if (clipEnd > tMax) clipEnd = tMax;
+	clipOffset = clipStart - tStart;
+	clipSize = clipEnd - clipStart;
+	AllocVar(ff);
+	ff->left = ffList;
+	ffList = ff;
+	ff->nStart = ff->nEnd = needle + qStarts[i] + clipOffset;
+	ff->nEnd += clipSize;
+	ff->hStart = ff->hEnd = haystack + clipStart - targetOffset;
+	ff->hEnd += clipSize;
+	}
+    }
+ffList = ffMakeRightLinks(ffList);
+ffCountGoodEnds(ffList);
+return ffList;
+}
+
+int pslOrientation(struct psl *psl)
+/* Translate psl strand + or - to orientation +1 or -1 */
+{
+if (psl->strand[1] != '\0')
+    {
+    /* translated blat */
+    if (psl->strand[0] != psl->strand[1])
+        return -1;
+    else
+        return 1;
+    }
+else
+    {
+    if (psl->strand[0] == '-')
+        return -1;
+    else
+        return 1;
+    }
+}
+
+int pslWeightedIntronOrientation(struct psl *psl, struct dnaSeq *genoSeq, int offset)
+/* Return >0 if introns make it look like alignment is on + strand,
+ *        <0 if introns make it look like alignment is on - strand,
+ *        0 if can't tell.  The absolute value of the return indicates
+ * how many splice sites we've seen supporting the orientation.
+ * Sequence should NOT be reverse complemented.  */
+{
+int intronDir = 0;
+int oneDir;
+int i;
+DNA *dna = genoSeq->dna;
+
+/* code below doesn't support negative target strand (translated blat) */
+if (psl->strand[1] == '-')
+    errAbort("pslWeightedIntronOrientation doesn't support a negative target strand");
+
+for (i=1; i<psl->blockCount; ++i)
+    {
+    int iStart, iEnd, blockSize = psl->blockSizes[i-1];
+    if (psl->qStarts[i-1] + blockSize == psl->qStarts[i])
+	{
+	iStart = psl->tStarts[i-1] + psl->blockSizes[i-1] - offset;
+	iEnd = psl->tStarts[i] - offset;
+	oneDir = intronOrientation(dna+iStart, dna+iEnd);
+	intronDir += oneDir;
+	}
+    }
+return intronDir;
+}
+
+int pslIntronOrientation(struct psl *psl, struct dnaSeq *genoSeq, int offset)
+/* Return 1 if introns make it look like alignment is on + strand,
+ *       -1 if introns make it look like alignment is on - strand,
+ *        0 if can't tell.
+ * Sequence should NOT be reverse complemented.  */
+{
+int intronDir = pslWeightedIntronOrientation(psl, genoSeq, offset);
+if (intronDir < 0)
+    intronDir = -1;
+else if (intronDir > 0)
+    intronDir = 1;
+return intronDir;
+}
+
+boolean pslHasIntron(struct psl *psl, struct dnaSeq *seq, int seqOffset)
+/* Return TRUE if there's a probable intron. Sequence should NOT be
+ * reverse complemented.*/
+{
+int blockCount = psl->blockCount, i;
+unsigned *tStarts = psl->tStarts;
+unsigned *blockSizes = psl->blockSizes;
+unsigned *qStarts = psl->qStarts;
+int blockSize, start, end;
+DNA *dna = seq->dna;
+
+for (i=1; i<blockCount; ++i)
+    {
+    blockSize = blockSizes[i-1];
+    start = qStarts[i-1]+blockSize;
+    end = qStarts[i];
+    if (start == end)
+        {
+        start = tStarts[i-1] + blockSize;
+        end = tStarts[i];
+        if (psl->strand[1] == '-')
+            reverseIntRange(&start, &end, psl->tSize);
+        start -= seqOffset;
+        end -= seqOffset;
+	if (intronOrientation(dna+start, dna+end) != 0)
+	    return TRUE;
+	}
+    }
+return FALSE;
+}
+
+void pslTailSizes(struct psl *psl, int *retStartTail, int *retEndTail)
+/* Find the length of "tails" (rather than extensions) implied by psl. */
+{
+int orientation = pslOrientation(psl);
+int qFloppyStart, qFloppyEnd;
+int tFloppyStart, tFloppyEnd;
+
+if (orientation > 0)
+    {
+    qFloppyStart = psl->qStart;
+    qFloppyEnd = psl->qSize - psl->qEnd;
+    }
+else
+    {
+    qFloppyStart = psl->qSize - psl->qEnd;
+    qFloppyEnd = psl->qStart;
+    }
+tFloppyStart = psl->tStart;
+tFloppyEnd = psl->tSize - psl->tEnd;
+*retStartTail = min(qFloppyStart, tFloppyStart);
+*retEndTail = min(qFloppyEnd, tFloppyEnd);
+}
+
+static void rcSeqs(char **seqs, unsigned blockCount, unsigned *blockSizes)
+/* reverses complement sequences in list, maintain property that all strings
+ * are in one malloc block.   blockSizes should already be reversed. */
+{
+char *buf, *next;
+int i, memSz = 0;
+
+/* get a new memory block for strings */
+for (i = 0; i < blockCount; i++)
+    memSz += blockSizes[i]+1;
+next = buf = needLargeMem(memSz);
+
+/* reverse compliment and copy to new memory block */
+for (i = blockCount-1; i >= 0; i--)
+    {
+    int len = strlen(seqs[i]);
+    reverseComplement(seqs[i], len);
+    memcpy(next, seqs[i], len+1);
+    next += len+1;
+    }
+
+/* swap memory and update pointers */
+freeMem(seqs[0]);
+seqs[0] = buf;
+next = buf;
+
+for (i = 0; i < blockCount; i++)
+    {
+    seqs[i] = next;
+    next += blockSizes[i]+1;
+    }
+}
+
+void pslRc(struct psl *psl)
+/* Reverse-complement a PSL alignment.  This makes the target strand explicit. */
+{
+unsigned tSize = psl->tSize, qSize = psl->qSize;
+unsigned blockCount = psl->blockCount, i;
+unsigned *tStarts = psl->tStarts, *qStarts = psl->qStarts, *blockSizes = psl->blockSizes;
+
+/* swap strand, forcing target to have an explict strand */
+psl->strand[0] = (psl->strand[0] != '-') ? '-' : '+';
+psl->strand[1] = (psl->strand[1] != '-') ? '-' : '+';
+psl->strand[2] = 0;
+
+for (i=0; i<blockCount; ++i)
+    {
+    tStarts[i] = tSize - (tStarts[i] + blockSizes[i]);
+    qStarts[i] = qSize - (qStarts[i] + blockSizes[i]);
+    }
+reverseUnsigned(tStarts, blockCount);
+reverseUnsigned(qStarts, blockCount);
+reverseUnsigned(blockSizes, blockCount);
+if (psl->qSequence != NULL)
+    {
+    rcSeqs(psl->qSequence, blockCount, blockSizes);
+    rcSeqs(psl->tSequence, blockCount, blockSizes);
+    }
+}
+
+
+/* macro to swap to variables */
+#define swapVars(a, b, tmp) ((tmp) = (a), (a) = (b), (b) = (tmp))
+
+static void swapBlocks(struct psl *psl)
+/* Swap the blocks in a psl without reverse complementing them. */
+{
+int i;
+unsigned utmp;
+char *stmp; 
+for (i = 0; i < psl->blockCount; i++)
+    {
+    swapVars(psl->qStarts[i], psl->tStarts[i], utmp);
+    if (psl->qSequence != NULL)
+        swapVars(psl->qSequence[i], psl->tSequence[i], stmp);
+    }
+}
+
+static void swapRCBlocks(struct psl *psl)
+/* Swap and reverse complement blocks in a psl. Other psl fields must
+ * be modified first */
+{
+int i;
+unsigned *uatmp;
+char **satmp;
+reverseUnsigned(psl->tStarts, psl->blockCount);
+reverseUnsigned(psl->qStarts, psl->blockCount);
+reverseUnsigned(psl->blockSizes, psl->blockCount);
+swapVars(psl->tStarts, psl->qStarts, uatmp);
+
+/* qSize and tSize have already been swapped */
+for (i = 0; i < psl->blockCount; i++)
+    {
+    psl->qStarts[i] = psl->qSize - (psl->qStarts[i] + psl->blockSizes[i]);
+    psl->tStarts[i] = psl->tSize - (psl->tStarts[i] + psl->blockSizes[i]);
+    }
+if (psl->qSequence != NULL)
+    {
+    /* note: all block sequences are stored in one malloc block, which is
+     * entry zero */
+    rcSeqs(psl->qSequence, psl->blockCount, psl->blockSizes);
+    rcSeqs(psl->tSequence, psl->blockCount, psl->blockSizes);
+    swapVars(psl->qSequence, psl->tSequence, satmp);
+    }
+}
+
+void pslSwap(struct psl *psl, boolean noRc)
+/* swap query and target in psl.  If noRc is TRUE, don't reverse-complement
+ * PSL if needed, instead make target strand explict. */
+{
+int itmp;
+unsigned utmp;
+char ctmp, *stmp; 
+swapVars(psl->qBaseInsert, psl->tBaseInsert, utmp);
+swapVars(psl->tNumInsert, psl->qNumInsert, utmp);
+swapVars(psl->qName, psl->tName, stmp);
+swapVars(psl->qSize, psl->tSize, utmp);
+swapVars(psl->qStart, psl->tStart, itmp);
+swapVars(psl->qEnd, psl->tEnd, itmp);
+
+/* handle strand and block copy */
+if (psl->strand[1] != '\0')
+    {
+    /* translated */
+    swapVars(psl->strand[0], psl->strand[1], ctmp);
+    swapBlocks(psl);
+    }
+else if (noRc)
+    {
+    /* untranslated with no reverse complement */
+    psl->strand[1] = psl->strand[0];
+    psl->strand[0] = '+';
+    swapBlocks(psl);
+    }
+else
+    {
+    /* untranslated */
+    if (psl->strand[0] == '+')
+        swapBlocks(psl);
+    else
+        swapRCBlocks(psl);
+    }
+}
+
+void pslTargetOffset(struct psl *psl, int offset)
+/* Add offset to target positions in psl. */
+{
+int i, blockCount = psl->blockCount;
+unsigned *tStarts = psl->tStarts;
+psl->tStart += offset;
+psl->tEnd += offset;
+for (i=0; i<blockCount; ++i)
+   tStarts[i] += offset;
+}
+
+void pslDump(struct psl *psl, FILE *f)
+/* Dump most of PSL to file - for debugging. */
+{
+int i;
+fprintf(f, "<PRE>\n");
+fprintf(f, "psl %s:%d-%d %s %s:%d-%d %d\n", 
+	psl->qName, psl->qStart, psl->qEnd, psl->strand,
+	psl->tName, psl->tStart, psl->tEnd, psl->blockCount);
+for (i=0; i<psl->blockCount; ++i)
+    fprintf(f, "  size %d, qStart %d, tStart %d\n", 
+    	psl->blockSizes[i], psl->qStarts[i], psl->tStarts[i]);
+fprintf(f, "</PRE>");
+}
+
+static void pslRecalcBounds(struct psl *psl)
+/* Calculate qStart/qEnd tStart/tEnd at top level to be consistent
+ * with blocks. */
+{
+int qStart, qEnd, tStart, tEnd, size;
+int last = psl->blockCount - 1;
+qStart = psl->qStarts[0];
+tStart = psl->tStarts[0];
+size = psl->blockSizes[last];
+qEnd = psl->qStarts[last] + size;
+tEnd = psl->tStarts[last] + size;
+if (psl->strand[0] == '-')
+    reverseIntRange(&qStart, &qEnd, psl->qSize);
+if (psl->strand[1] == '-')
+    reverseIntRange(&tStart, &tEnd, psl->tSize);
+psl->qStart = qStart;
+psl->qEnd = qEnd;
+psl->tStart = tStart;
+psl->tEnd = tEnd;
+}
+
+struct psl *pslTrimToTargetRange(struct psl *oldPsl, int tMin, int tMax)
+/* Return psl trimmed to fit inside tMin/tMax.  Note this does not
+ * update the match/misMatch and related fields. */
+{
+int newSize;
+int oldBlockCount = oldPsl->blockCount;
+boolean tIsRc = (oldPsl->strand[1] == '-');
+int newBlockCount = 0, completeBlockCount = 0;
+int i;
+struct psl *newPsl = NULL;
+int tMn = tMin, tMx = tMax;   /* tMin/tMax adjusted for strand. */
+
+/* Deal with case where we're completely trimmed out quickly. */
+newSize = rangeIntersection(oldPsl->tStart, oldPsl->tEnd, tMin, tMax);
+if (newSize <= 0)
+    return NULL;
+
+if (tIsRc)
+    reverseIntRange(&tMn, &tMx, oldPsl->tSize);
+
+/* Count how many blocks will survive trimming. */
+oldBlockCount = oldPsl->blockCount;
+for (i=0; i<oldBlockCount; ++i)
+    {
+    int s = oldPsl->tStarts[i];
+    int e = s + oldPsl->blockSizes[i];
+    int sz = e - s;
+    int overlap;
+    if ((overlap = rangeIntersection(s, e, tMn, tMx)) > 0)
+        ++newBlockCount;
+    if (overlap == sz)
+        ++completeBlockCount;
+    }
+
+if (newBlockCount == 0)
+    return NULL;
+
+/* Allocate new psl and fill in what we already know. */
+AllocVar(newPsl);
+strcpy(newPsl->strand, oldPsl->strand);
+newPsl->qName = cloneString(oldPsl->qName);
+newPsl->qSize = oldPsl->qSize;
+newPsl->tName = cloneString(oldPsl->tName);
+newPsl->tSize = oldPsl->tSize;
+newPsl->blockCount = newBlockCount;
+AllocArray(newPsl->blockSizes, newBlockCount);
+AllocArray(newPsl->qStarts, newBlockCount);
+AllocArray(newPsl->tStarts, newBlockCount);
+
+/* Fill in blockSizes, qStarts, tStarts with real data. */
+newBlockCount = completeBlockCount = 0;
+for (i=0; i<oldBlockCount; ++i)
+    {
+    int oldSz = oldPsl->blockSizes[i];
+    int sz = oldSz;
+    int tS = oldPsl->tStarts[i];
+    int tE = tS + sz;
+    int qS = oldPsl->qStarts[i];
+    int qE = qS + sz;
+    if (rangeIntersection(tS, tE, tMn, tMx) > 0)
+        {
+	int diff;
+	if ((diff = (tMn - tS)) > 0)
+	    {
+	    tS += diff;
+	    qS += diff;
+	    sz -= diff;
+	    }
+	if ((diff = (tE - tMx)) > 0)
+	    {
+	    tE -= diff;
+	    qE -= diff;
+	    sz -= diff;
+	    }
+	newPsl->qStarts[newBlockCount] = qS;
+	newPsl->tStarts[newBlockCount] = tS;
+	newPsl->blockSizes[newBlockCount] = sz;
+	++newBlockCount;
+	if (sz == oldSz)
+	    ++completeBlockCount;
+	}
+    }
+pslRecalcBounds(newPsl);
+return newPsl;
+}
+
+struct psl *pslTrimToQueryRange(struct psl *oldPsl, int qMin, int qMax)
+/* Return psl trimmed to fit inside qMin/qMax.  Note this does not
+ * update the match/misMatch and related fields. */
+{
+int newSize;
+int oldBlockCount = oldPsl->blockCount;
+boolean qIsRc = (oldPsl->strand[0] == '-');
+int newBlockCount = 0, completeBlockCount = 0;
+int i;
+struct psl *newPsl = NULL;
+int qMn = qMin, qMx = qMax;   /* qMin/qMax adjusted for strand. */
+
+/* Deal with case where we're completely trimmed out quickly. */
+newSize = rangeIntersection(oldPsl->qStart, oldPsl->qEnd, qMin, qMax);
+if (newSize <= 0)
+    return NULL;
+
+if (qIsRc)
+    reverseIntRange(&qMn, &qMx, oldPsl->qSize);
+
+/* Count how many blocks will survive trimming. */
+oldBlockCount = oldPsl->blockCount;
+for (i=0; i<oldBlockCount; ++i)
+    {
+    int s = oldPsl->qStarts[i];
+    int e = s + oldPsl->blockSizes[i];
+    int sz = e - s;
+    int overlap;
+    if ((overlap = rangeIntersection(s, e, qMn, qMx)) > 0)
+        ++newBlockCount;
+    if (overlap == sz)
+        ++completeBlockCount;
+    }
+
+if (newBlockCount == 0)
+    return NULL;
+
+/* Allocate new psl and fill in what we already know. */
+AllocVar(newPsl);
+strcpy(newPsl->strand, oldPsl->strand);
+newPsl->qName = cloneString(oldPsl->qName);
+newPsl->qSize = oldPsl->qSize;
+newPsl->tName = cloneString(oldPsl->tName);
+newPsl->tSize = oldPsl->tSize;
+newPsl->blockCount = newBlockCount;
+AllocArray(newPsl->blockSizes, newBlockCount);
+AllocArray(newPsl->qStarts, newBlockCount);
+AllocArray(newPsl->tStarts, newBlockCount);
+
+/* Fill in blockSizes, qStarts, tStarts with real data. */
+newBlockCount = completeBlockCount = 0;
+for (i=0; i<oldBlockCount; ++i)
+    {
+    int oldSz = oldPsl->blockSizes[i];
+    int sz = oldSz;
+    int qS = oldPsl->qStarts[i];
+    int qE = qS + sz;
+    int tS = oldPsl->tStarts[i];
+    int tE = tS + sz;
+    if (rangeIntersection(qS, qE, qMn, qMx) > 0)
+        {
+	int diff;
+	if ((diff = (qMn - qS)) > 0)
+	    {
+	    tS += diff;
+	    qS += diff;
+	    sz -= diff;
+	    }
+	if ((diff = (qE - qMx)) > 0)
+	    {
+	    tE -= diff;
+	    qE -= diff;
+	    sz -= diff;
+	    }
+	newPsl->qStarts[newBlockCount] = qS;
+	newPsl->tStarts[newBlockCount] = tS;
+	newPsl->blockSizes[newBlockCount] = sz;
+	++newBlockCount;
+	if (sz == oldSz)
+	    ++completeBlockCount;
+	}
+    }
+pslRecalcBounds(newPsl);
+return newPsl;
+}
+
+static void printPslDesc(char* pslDesc, FILE* out, struct psl* psl)
+/* print description of a PSL on first error */
+{
+fprintf(out, "Error: invalid PSL: %s:%u-%u %s:%u-%u %s %s\n",
+        psl->qName, psl->qStart, psl->qEnd,
+        psl->tName, psl->tStart, psl->tEnd,
+        psl->strand, pslDesc);
+}
+
+
+static void chkError(char* pslDesc, FILE* out, struct psl* psl, int* errCount, char* format, ...)
+/* forward needed to specify printf signature for gcc checking */
+#if defined(__GNUC__)
+__attribute__((format(printf, 5, 6)))
+#endif
+;
+
+static void chkError(char* pslDesc, FILE* out, struct psl* psl, int* errCount, char* format, ...)
+/* error handling on an pslCheck error, counting error and issuing description
+ * of PSL on the first error. */
+{
+if (*errCount == 0)
+    printPslDesc(pslDesc, out, psl);
+va_list args;
+va_start(args, format);
+vfprintf(out, format, args);
+va_end(args);
+(*errCount)++;
+}
+
+static void chkBlkRanges(char* pslDesc, FILE* out, struct psl* psl,
+                         char* pName, char* pLabel, char pCLabel, char pStrand,
+                         unsigned pSize, unsigned pStart, unsigned pEnd,
+                         unsigned iBlk, unsigned* blockSizes,
+                         unsigned* pBlockStarts, int* errCount)
+/* check the target or query ranges in a PSL incrementing errorCnt */
+{
+unsigned blkStart = pBlockStarts[iBlk];
+unsigned blkEnd = blkStart+blockSizes[iBlk];
+/* translate stand to genomic coords */
+unsigned gBlkStart = (pStrand == '+') ? blkStart : (pSize - blkEnd);
+unsigned gBlkEnd = (pStrand == '+') ? blkEnd : (pSize - blkStart);
+
+if ((pSize > 0) && (blkEnd > pSize))
+    chkError(pslDesc, out, psl, errCount,
+             "\t%s %s block %u end %u > %cSize %u\n",
+             pName, pLabel, iBlk, blkEnd, pCLabel, pSize);
+if (gBlkStart < pStart)
+    chkError(pslDesc, out, psl, errCount,
+             "\t%s %s block %u start %u < %cStart %u\n",
+             pName, pLabel, iBlk, gBlkStart, pCLabel, pStart);
+if (gBlkStart >= pEnd)
+    chkError(pslDesc, out, psl, errCount,
+             "\t%s %s block %u start %u >= %cEnd %u\n",
+             pName, pLabel, iBlk, gBlkStart, pCLabel, pEnd);
+if (gBlkEnd < pStart)
+    chkError(pslDesc, out, psl, errCount,
+             "\t%s %s block %u end %u < %cStart %u\n",
+             pName, pLabel, iBlk, gBlkEnd, pCLabel, pStart);
+if (gBlkEnd > pEnd)
+    chkError(pslDesc, out, psl, errCount,
+             "\t%s %s block %u end %u > %cEnd %u\n",
+             pName, pLabel, iBlk, gBlkEnd, pCLabel, pEnd);
+if (iBlk > 0)
+    {
+    unsigned prevBlkEnd = pBlockStarts[iBlk-1]+blockSizes[iBlk-1];
+    if (blkStart < prevBlkEnd)
+        chkError(pslDesc, out, psl, errCount,
+                 "\t%s %s block %u start %u < previous block end %u\n",
+                 pName, pLabel, iBlk, blkStart, prevBlkEnd);
+    }
+}
+
+static void chkRanges(char* pslDesc, FILE* out, struct psl* psl,
+                      char* pName, char* pLabel, char pCLabel, char pStrand,
+                      unsigned pSize, unsigned pStart, unsigned pEnd,
+                      unsigned blockCount, unsigned* blockSizes,
+                      unsigned* pBlockStarts, int blockSizeMult, int* errCount)
+/* check the target or query ranges in a PSL, increment errorCnt */
+{
+unsigned iBlk;
+if (pStart >= pEnd)
+    chkError(pslDesc, out, psl, errCount,
+             "\t%s %cStart %u >= %cEnd %u\n",
+             pName, pCLabel, pStart, pCLabel, pEnd);
+if (pEnd > pSize)
+    chkError(pslDesc, out, psl, errCount,
+             "\t%s %cEnd %u >= %cSize %u\n",
+             pName, pCLabel, pEnd, pCLabel, pSize);
+// check that block start/end matches overall start end
+unsigned pStartStrand = pStart, pEndStrand = pEnd;
+if (pStrand != '+')
+    reverseUnsignedRange(&pStartStrand, &pEndStrand, pSize);
+unsigned lastBlkEnd = pBlockStarts[blockCount-1] + (blockSizeMult * blockSizes[blockCount-1]);
+if ((pStartStrand != pBlockStarts[0]) || (pEndStrand != lastBlkEnd))
+    chkError(pslDesc, out, psl, errCount,
+             "\t%s strand \"%c\" adjusted %cStart-%cEnd range %u-%u != block range %u-%u\n",
+             pName, pStrand, pCLabel, pCLabel, pStartStrand, pEndStrand, pBlockStarts[0], lastBlkEnd);
+
+for (iBlk = 0; iBlk < blockCount; iBlk++)
+    chkBlkRanges(pslDesc, out, psl, pName, pLabel, pCLabel, pStrand,
+                 pSize, pStart, pEnd, iBlk, blockSizes, pBlockStarts, errCount);
+}
+
+int pslCheck(char *pslDesc, FILE* out, struct psl* psl)
+/* Validate a PSL for consistency.  pslDesc is printed the error messages
+ * to file out (open /dev/null to discard). Return count of errors. */
+{
+static char* VALID_STRANDS[] = {
+    "+", "-", "++", "+-", "-+", "--", NULL
+};
+int i, errCount = 0;
+int tBlockSizeMult = pslIsProtein(psl) ? 3 : 1;
+
+/* check strand value */
+for (i = 0; VALID_STRANDS[i] != NULL; i++)
+    {
+    if (strcmp(psl->strand, VALID_STRANDS[i]) == 0)
+        break;
+    }
+if (VALID_STRANDS[i] == NULL)
+    chkError(pslDesc, out, psl, &errCount,
+             "\tinvalid PSL strand: \"%s\"\n", psl->strand);
+
+/* check target */
+chkRanges(pslDesc, out, psl, psl->tName, "target", 't', pslTStrand(psl), psl->tSize, psl->tStart, psl->tEnd,
+          psl->blockCount, psl->blockSizes, psl->tStarts, tBlockSizeMult, &errCount);
+
+/* check query */
+chkRanges(pslDesc, out, psl, psl->qName, "query", 'q', pslQStrand(psl), psl->qSize, psl->qStart, psl->qEnd,
+          psl->blockCount, psl->blockSizes, psl->qStarts, 1, &errCount);
+
+return errCount;
+}
+
+struct hash *readPslToBinKeeper(char *sizeFileName, char *pslFileName)
+/* read a list of psls and return results in hash of binKeeper structure for fast query*/
+{
+struct binKeeper *bk; 
+struct psl *psl;
+struct lineFile *sf = lineFileOpen(sizeFileName, TRUE);
+struct lineFile *pf = lineFileOpen(pslFileName , TRUE);
+struct hash *hash = newHash(0);
+char *chromRow[2];
+char *row[21] ;
+
+while (lineFileRow(sf, chromRow))
+    {
+    char *name = chromRow[0];
+    int size = lineFileNeedNum(sf, chromRow, 1);
+
+    if (hashLookup(hash, name) != NULL)
+        warn("Duplicate %s, ignoring all but first\n", name);
+    else
+        {
+        bk = binKeeperNew(0, size);
+        assert(size > 1);
+	hashAdd(hash, name, bk);
+        }
+    }
+while (lineFileNextRow(pf, row, ArraySize(row)))
+    {
+    psl = pslLoad(row);
+    bk = hashMustFindVal(hash, psl->tName);
+    binKeeperAdd(bk, psl->tStart, psl->tEnd, psl);
+    }
+lineFileClose(&pf);
+lineFileClose(&sf);
+return hash;
+}
+
+static boolean isDelChar(char c)
+/* is this a indel character? */
+{
+return (c == '-') || (c == '.') || (c == '=') || (c == '_');
+}
+
+static void trimAlignment(struct psl* psl, char** qStrPtr, char** tStrPtr,
+                          int* aliSizePtr)
+/* remove leading or trailing indels from alignment */
+{
+char* qStr = *qStrPtr;
+char* tStr = *tStrPtr;
+int aliSize = *aliSizePtr;
+
+// skip lending indels
+while ((aliSize > 0) && (isDelChar(*qStr) || isDelChar(*tStr)))
+    {
+    if (!isDelChar(*qStr))
+        psl->qStart++;
+    else if (!isDelChar(*tStr))
+        psl->tStart++;
+    qStr++;
+    tStr++;
+    aliSize--;
+    }
+
+// skip trailing indels
+while ((aliSize > 0) && (isDelChar(qStr[aliSize-1]) || isDelChar(tStr[aliSize-1])))
+    {
+    if (!isDelChar(qStr[aliSize-1]))
+        psl->qEnd--;
+    else if (!isDelChar(tStr[aliSize-1]))
+        psl->tEnd--;
+    aliSize--;
+    }
+*qStrPtr = qStr;
+*tStrPtr = tStr;
+*aliSizePtr = aliSize;
+}
+
+static void addBlock(struct psl* psl, int qs, int qe, int ts, int te,
+                     int *blockSpace)
+/* add a block to the psl, growing if necessary */
+{
+assert((qe-qs) == (te-ts));  /* same lengths? */
+if (psl->blockCount == *blockSpace)
+    pslGrow(psl, blockSpace);
+psl->blockSizes[psl->blockCount] = qe - qs;
+psl->qStarts[psl->blockCount] = qs;
+psl->tStarts[psl->blockCount] = ts;
+psl->blockCount++;
+}
+
+static void accumCounts(struct psl *psl, char prevQ, char prevT,
+                        char q, char t, unsigned options)
+/* accumulate block and base counts  */
+{
+if (!isDelChar(q) && !isDelChar(t))
+    {
+    /* aligned column. */
+    char qu = toupper(q);
+    char tu = toupper(t);
+    if ((q == 'N') || (t == 'N'))
+        psl->nCount++;
+    else if (qu == tu)
+        {
+        if ((options & PSL_IS_SOFTMASK) && ((qu != q) || (tu != t)))
+            psl->repMatch++;
+        else
+            psl->match++;
+        }
+    else
+        psl->misMatch++;
+    }
+else if (isDelChar(q) && !isDelChar(t))
+    {
+    /* target insert */
+    psl->tBaseInsert++;
+    if (!isDelChar(prevQ))
+        psl->tNumInsert++;
+    }
+else if (isDelChar(t) && !isDelChar(q))
+    {
+    /* query insert */
+    psl->qBaseInsert++;
+    if (!isDelChar(prevT))
+        psl->qNumInsert++;
+    }
+}
+
+struct psl* pslFromAlign(char *qName, int qSize, int qStart, int qEnd, char *qString,
+                         char *tName, int tSize, int tStart, int tEnd, char *tString,
+                         char* strand, unsigned options)
+/* Create a PSL from an alignment.  Options PSL_IS_SOFTMASK if lower case
+ * bases indicate repeat masking.  Returns NULL if alignment is empty after
+ * triming leading and trailing indels.*/
+{
+/* Note, the unit tests for these programs exercise this function:
+ *   hg/embossToPsl
+ *   hg/mouseStuff/axtToPsl
+ *   hg/spideyToPsl
+ *   utils/est2genomeToPsl
+ */
+
+int blockSpace = 16;
+struct psl* psl = NULL;
+int aliSize = strlen(qString);
+boolean eitherInsert = FALSE;	/* True if either in insert state. */
+int i, qs,qe,ts,te;
+char prevQ = '\0',  prevT = '\0';
+AllocVar(psl);
+
+if (strlen(tString) != aliSize)
+    errAbort("query and target alignment strings are different lengths");
+
+psl = pslNew(qName, qSize, qStart, qEnd, tName, tSize, tStart, tEnd,
+             strand, blockSpace, 0);
+trimAlignment(psl, &qString, &tString, &aliSize);
+
+/* Don't create if either query or target is zero length after trim */
+ if ((psl->qStart == psl->qEnd) || (psl->tStart == psl->tEnd))
+     {
+     pslFree(&psl);
+     return NULL;
+     }
+
+/* Get range of alignment in strand-specified coordinates */
+qs = psl->qStart;
+qe = psl->qEnd;
+if (strand[0] == '-')
+    reverseIntRange(&qs, &qe, psl->qSize);
+ts = psl->tStart;
+te = psl->tEnd;
+if (strand[1] == '-')
+    reverseIntRange(&ts, &te, psl->tSize);
+
+eitherInsert = FALSE;
+qe = qs;  /* current block coords */
+te = ts;
+for (i=0; i<aliSize; ++i)
+    {
+    char q = qString[i];
+    char t = tString[i];
+    if (isDelChar(q) && isDelChar(t))
+        {
+        continue; /* nothing in this column, just ignore it */
+        }
+    else if (isDelChar(q) || isDelChar(t))
+        {
+        /* insert in one of the columns */
+	if (!eitherInsert)
+	    {
+            /* end of a block */
+            addBlock(psl, qs, qe, ts, te, &blockSpace);
+	    eitherInsert = TRUE;
+	    }
+	if (!isDelChar(q))
+            qe += 1;
+	if (!isDelChar(t))
+            te += 1;
+	}
+    else
+        {
+        /* columns aligned */
+	if (eitherInsert)
+	    {
+            /* start new block */
+	    qs = qe;
+	    ts = te;
+	    eitherInsert = FALSE;
+	    }
+	qe += 1;
+	te += 1;
+	}
+    accumCounts(psl, prevQ, prevT, q, t, options);
+    prevQ = q; /* will not include skipped empty columns */
+    prevT = t;
+    }
+addBlock(psl, qs, qe, ts, te, &blockSpace);
+return psl;
+}
+
+struct psl* pslNew(char *qName, unsigned qSize, int qStart, int qEnd,
+                   char *tName, unsigned tSize, int tStart, int tEnd,
+                   char *strand, unsigned blockSpace, unsigned opts)
+/* create a new psl with space for the specified number of blocks allocated.
+ * pslGrow maybe used to expand this space if needed.  Valid options are
+ * PSL_XA_FORMAT. */
+{
+struct psl *psl;
+AllocVar(psl);
+assert(blockSpace > 0);
+psl->qName = cloneString(qName);
+psl->qSize = qSize;
+psl->qStart = qStart;
+psl->qEnd = qEnd;
+psl->tName = cloneString(tName);
+psl->tSize = tSize;
+psl->tStart = tStart;
+psl->tEnd = tEnd;
+strncpy(psl->strand, strand, 2);
+AllocArray(psl->blockSizes, blockSpace);
+AllocArray(psl->qStarts, blockSpace);
+AllocArray(psl->tStarts, blockSpace);
+if (opts & PSL_XA_FORMAT)
+    {
+    AllocArray(psl->qSequence, blockSpace);
+    AllocArray(psl->tSequence, blockSpace);
+    }
+return psl;
+}
+
+void pslGrow(struct psl *psl, int *blockSpacePtr)
+/* Increase memory allocated to a psl to hold more blocks.  blockSpacePtr
+ * should point the the current maximum number of blocks and will be
+ * updated to with the new amount of space. */
+{
+int blockSpace = *blockSpacePtr;
+int newSpace = 2 * blockSpace;
+ExpandArray(psl->blockSizes, blockSpace, newSpace);
+ExpandArray(psl->qStarts, blockSpace, newSpace);
+ExpandArray(psl->tStarts, blockSpace, newSpace);
+if (psl->qSequence != NULL)
+    {
+    ExpandArray(psl->qSequence, blockSpace, newSpace);
+    ExpandArray(psl->tSequence, blockSpace, newSpace);
+    }
+*blockSpacePtr = newSpace;
+}
+
+static boolean getNextCigarOp(char *startPtr, boolean reverse, char **ptr, char *op, int *size)
+/* gets one cigar op out of the CIGAR string.  Reverse the order if asked */
+{
+char *str = *ptr;
+
+if (str == NULL)
+    return FALSE;
+
+if ((!reverse && (*str == 0)) || (reverse && (str == startPtr)))
+    return FALSE;
+
+// between each cigar op there could be nothing, or a space, or a plus
+if (reverse)
+    {
+    char *end = str - 1;
+    for(;*end ; end--)
+	{
+	if (isalpha(*end))
+	    break;
+	}
+    str = end;
+    *ptr = end;
+    }
+else
+    {
+    char *end = str + 1;
+    for(;*end ; end++)
+	{
+	if (! (isdigit(*end)  || (*end == ' ') || (*end == '+')))
+	    break;
+	}
+
+    *ptr = end;
+    }
+
+*op = *str++;
+*size = atoi(str);
+
+return TRUE;
+}
+
+struct psl* pslFromGff3Cigar(char *qName, int qSize, int qStart, int qEnd,
+                             char *tName, int tSize, int tStart, int tEnd,
+                             char* strand, char *cigar)
+/* create a PSL from a GFF3-style cigar formatted alignment */
+{
+// this is currently tested by the gff3ToPsl
+int blocksAlloced = 4;
+struct psl *psl = pslNew(qName, qSize, qStart, qEnd, tName, tSize, tStart, tEnd, strand, blocksAlloced, 0);
+
+char op;
+int size;
+int qNext = qStart, qBlkEnd = qEnd;
+int totalSize = 0;
+
+if (strand[0] == '-')
+    reverseIntRange(&qNext, &qBlkEnd, qSize);
+int tNext = tStart, tBlkEnd = tEnd;
+if (strand[1] == '-')
+    reverseIntRange(&tNext, &tBlkEnd, tSize);
+
+if (cigar == NULL)
+    {
+    // no cigar means one block
+    size = qEnd - qStart;
+    totalSize += size;
+    psl->blockSizes[psl->blockCount] = size;
+    psl->qStarts[psl->blockCount] = qNext;
+    psl->tStarts[psl->blockCount] = tNext;
+    psl->blockCount++;
+    tNext += size;
+    qNext += size;
+    }
+else
+    {
+    char cigarSpec[strlen(cigar+1)];  // copy since parsing is destructive
+    strcpy(cigarSpec, cigar);
+    char *cigarNext = cigarSpec;
+    if (strand[0] == '-')
+	for(; *cigarNext; cigarNext++)
+	    ;
+    while(getNextCigarOp(cigarSpec, (strand[0] == '-'), &cigarNext, &op, &size))
+	{
+	switch (op)
+	    {
+	    case 'M': // match or mismatch (gapless aligned block)
+		if (psl->blockCount == blocksAlloced)
+		    pslGrow(psl, &blocksAlloced);
+
+		totalSize += size;
+		psl->blockSizes[psl->blockCount] = size;
+		psl->qStarts[psl->blockCount] = qNext;
+		psl->tStarts[psl->blockCount] = tNext;
+		psl->blockCount++;
+		tNext += size;
+		qNext += size;
+		break;
+	    case 'I': // inserted in target
+		tNext += size;
+		break;
+	    case 'D': // deleted from target
+		qNext += size;
+		break;
+	    
+	    default:
+		errAbort("unrecognized CIGAR op %c in %s", op, cigar);
+	    }
+	}
+    }
+assert(qNext == qBlkEnd);
+assert(tNext == tBlkEnd);
+psl->match = totalSize;
+return psl;
+}
+
+int pslRangeTreeOverlap(struct psl *psl, struct rbTree *rangeTree)
+/* Return amount that psl overlaps (on target side) with rangeTree. */
+{
+int i;
+int overlap = 0;
+boolean isRc = (psl->strand[1] == '-');
+for (i=0; i<psl->blockCount; ++i)
+    {
+    int start = psl->tStarts[i];
+    int end = start + psl->blockSizes[i];
+    if (isRc)
+        reverseIntRange(&start, &end, psl->tSize);
+    overlap += rangeTreeOverlapSize(rangeTree, start, end);
+    }
+return overlap;
+}
+
+float pslIdent(struct psl *psl)
+/* computer fraction identity */
+{
+float aligned = psl->match + psl->misMatch + psl->repMatch;
+if (aligned == 0.0)
+    return 0.0;
+else
+    return ((float)(psl->match + psl->repMatch))/aligned;
+}
+
+float pslQueryAligned(struct psl *psl)
+/* compute fraction of query that was aligned */
+{
+float aligned = psl->match + psl->misMatch + psl->repMatch;
+return aligned/(float)psl->qSize;
+}
+
diff --git a/gbtools/src/blatSrc/lib/psl.sql b/gbtools/src/blatSrc/lib/psl.sql
new file mode 100644
index 0000000..8a1698a
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/psl.sql
@@ -0,0 +1,33 @@
+# as_psl.sql was originally generated by the autoSql program, which also 
+# generated as_psl.c and as_psl.h.  This creates the database representation of
+# an object which can be loaded and saved from RAM in a fairly 
+# automatic way.
+
+#Summary info about a patSpace alignment
+CREATE TABLE psl (
+    matches int unsigned not null,	# Number of bases that match that aren't repeats
+    misMatches int unsigned not null,	# Number of bases that don't match
+    repMatches int unsigned not null,	# Number of bases that match but are part of repeats
+    nCount int unsigned not null,	# Number of 'N' bases
+    qNumInsert int unsigned not null,	# Number of inserts in query
+    qBaseInsert int unsigned not null,	# Number of bases inserted in query
+    tNumInsert int unsigned not null,	# Number of inserts in target
+    tBaseInsert int unsigned not null,	# Number of bases inserted in target
+    strand char(2) not null,	# + or - for strand
+    qName varchar(255) not null,	# Query sequence name
+    qSize int unsigned not null,	# Query sequence size
+    qStart int unsigned not null,	# Alignment start position in query
+    qEnd int unsigned not null,	# Alignment end position in query
+    tName varchar(255) not null,	# Target sequence name
+    tSize int unsigned not null,	# Target sequence size
+    tStart int unsigned not null,	# Alignment start position in target
+    tEnd int unsigned not null,	# Alignment end position in target
+    blockCount int unsigned not null,	# Number of blocks in alignment
+    blockSizes longblob not null,	# Size of each block
+    qStarts longblob not null,	# Start of each block in query.
+    tStarts longblob not null,	# Start of each block in target.
+              #Indices
+    INDEX(tStart),
+    INDEX(qName(12)),
+    INDEX(tEnd)
+);
diff --git a/gbtools/src/blatSrc/lib/pslGenoShow.c b/gbtools/src/blatSrc/lib/pslGenoShow.c
new file mode 100644
index 0000000..2e3e46d
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/pslGenoShow.c
@@ -0,0 +1,349 @@
+/* Show aligned exons between a pre-located gene (a stamper gene) in the genome 
+ *and its homologues (stamp elements) in the genome. 
+ *The aligned exon sequences are shown in blue as regular blat alignment. 
+ * The unaligned exon sequence are shown in red. Intron sequences are shown in black.
+ * It is modified from pslShow.c */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+
+#include "common.h"
+#include "dnaseq.h"
+#include "htmshell.h"
+#include "psl.h"
+#include "cda.h"
+#include "seqOut.h"
+
+
+static void pslShowAlignmentStranded2(struct psl *psl, boolean isProt,
+	char *qName, bioSeq *qSeq, int qStart, int qEnd,
+	char *tName, bioSeq *tSeq, int tStart, int tEnd, int exnStarts[], int exnEnds[], int exnCnt, FILE *f)
+/* Show stamper gene and stamp elements alignment using genomic sequence.
+ * The aligned exons' sequence of stamper gene are shown in colors as usual, but the
+ * the unaligned exon's sequence of stamper gene are shown in red color.
+ */
+{
+boolean tIsRc = (psl->strand[1] == '-');
+boolean qIsRc = (psl->strand[0] == '-');
+int mulFactor = (isProt ? 3 : 1);
+DNA *dna = NULL;	/* Mixed case version of genomic DNA. */
+int qSize = qSeq->size;
+char *qLetters = cloneString(qSeq->dna);
+int qbafStart, qbafEnd, tbafStart, tbafEnd;
+int qcfmStart, qcfmEnd, tcfmStart, tcfmEnd;
+
+int lineWidth = isProt ? 60 : 50;
+
+tbafStart = tStart;
+tbafEnd   = tEnd;
+tcfmStart = tStart;
+tcfmEnd   = tEnd;
+
+qbafStart = qStart;
+qbafEnd   = qEnd;
+qcfmStart = qStart;
+qcfmEnd   = qEnd;
+
+/* Deal with minus strand. */
+if (tIsRc)
+    {
+    int temp;
+    reverseComplement(tSeq->dna, tSeq->size);
+
+    tbafStart = tEnd;
+    tbafEnd   = tStart;
+    tcfmStart = tEnd;
+    tcfmEnd   = tStart;
+    
+    temp = psl->tSize - tEnd;
+    tEnd = psl->tSize - tStart;
+    tStart = temp;
+    }
+if (qIsRc)
+    {
+    int temp, j;
+    reverseComplement(qSeq->dna, qSeq->size);
+    reverseComplement(qLetters, qSeq->size);
+
+    qcfmStart = qEnd;
+    qcfmEnd   = qStart;
+    qbafStart = qEnd;
+    qbafEnd   = qStart;
+    
+    temp = psl->qSize - qEnd;
+    qEnd = psl->qSize - qStart;
+    qStart = temp;
+    for(j = 0; j < exnCnt; j++)
+	{
+	temp = psl->qSize - exnStarts[j];
+	exnStarts[j] = psl->qSize - exnEnds[j];
+	exnEnds[j] = temp;
+	}
+    reverseInts(exnEnds, exnCnt);
+    reverseInts(exnStarts, exnCnt);
+    }
+
+dna = cloneString(tSeq->dna);
+
+if (qName == NULL) 
+    qName = psl->qName;
+if (tName == NULL)
+    tName = psl->tName;
+
+
+fputs("Matching bases are colored blue and capitalized. " 
+      "Light blue bases mark the boundaries of gaps in either aligned sequence. "
+      "Red bases are unaligned exons' bases of the query gene. \n", f);
+
+fprintf(f, "<H4><A NAME=cDNA></A>%s%s</H4>\n", qName, (qIsRc  ? " (reverse complemented)" : ""));
+fprintf(f, "<PRE><TT>");
+tolowers(qLetters);
+
+/* Display query sequence. */
+    {
+    struct cfm *cfm;
+    char *colorFlags = needMem(qSeq->size);
+    int i = 0, j = 0, exnIdx = 0;
+    int preStop = 0;
+    
+    for (i=0; i<psl->blockCount; ++i)
+	{
+	int qs = psl->qStarts[i] - qStart;
+	int ts = psl->tStarts[i] - tStart;
+	int sz = psl->blockSizes[i]-1;
+	int end = 0;
+	bool omitExon = FALSE;
+	while(exnIdx < exnCnt && psl->qStarts[i] > exnEnds[exnIdx])
+	    {
+	    if(omitExon)
+		{
+		for( j = exnStarts[exnIdx] - qStart; j < exnEnds[exnIdx]-qStart; j++)
+		    {
+		    colorFlags[j] = socRed;
+		    }
+		}
+	    exnIdx++;
+	    preStop = exnStarts[exnIdx] - qStart;
+	    omitExon = TRUE;
+	    }
+
+	/*mark the boundary bases */
+	colorFlags[qs] = socBrightBlue;
+	qLetters[qs] = toupper(qLetters[qs]);
+	colorFlags[qs+sz] = socBrightBlue;
+	qLetters[qs+sz] = toupper(qLetters[qs+sz]);
+	
+	/* determine block end */
+	if( i < psl->blockCount -1)
+	    end = psl->qStarts[i+1] < exnEnds[exnIdx] ? psl->qStarts[i+1] - qStart : exnEnds[exnIdx] - qStart;
+	else
+	    end = qs + sz;
+	    
+	for (j=preStop; j < end; j++)
+	    {
+	    if(j == 82)
+		fprintf(stderr, "right here\n");
+	    if (j > qs && j < qs+sz)
+		{
+		if (qSeq->dna[j] == tSeq->dna[ts+j-qs])
+		    {
+		    colorFlags[j] = socBlue;
+		    qLetters[j] = toupper(qLetters[j]);
+		    }		
+		}
+	    else if(colorFlags[j] != socBrightBlue && colorFlags[j] != socBlue)
+		colorFlags[j] = socRed;
+	    }
+	preStop = end;
+	}
+    cfm = cfmNew(10, lineWidth, TRUE, qIsRc, f, qcfmStart);
+    for (i=0; i<qSize; ++i)
+	cfmOut(cfm, qLetters[i], seqOutColorLookup[(int)colorFlags[i]]);
+    cfmFree(&cfm);
+    freez(&colorFlags);
+    htmHorizontalLine(f);
+    }
+fprintf(f, "</TT></PRE>\n");
+fprintf(f, "<H4><A NAME=genomic></A>%s %s:</H4>\n", 
+	tName, (tIsRc ? "(reverse strand)" : ""));
+fprintf(f, "<PRE><TT>");
+
+/* Display DNA sequence. */
+    {
+    struct cfm *cfm;
+    char *colorFlags = needMem(tSeq->size);
+    int i,j;
+    int curBlock = 0;
+
+    for (i=0; i<psl->blockCount; ++i)
+	{
+	int qs = psl->qStarts[i] - qStart;
+	int ts = psl->tStarts[i] - tStart;
+	int sz = psl->blockSizes[i];
+	if (isProt)
+	    {
+	    for (j=0; j<sz; ++j)
+		{
+		AA aa = qSeq->dna[qs+j];
+		int codonStart = ts + 3*j;
+		DNA *codon = &tSeq->dna[codonStart];
+		AA trans = lookupCodon(codon);
+		if (trans != 'X' && trans == aa)
+		    {
+		    colorFlags[codonStart] = socBlue;
+		    colorFlags[codonStart+1] = socBlue;
+		    colorFlags[codonStart+2] = socBlue;
+		    toUpperN(dna+codonStart, 3);
+		    }
+		}
+	    }
+	else
+	    {
+	    for (j=0; j<sz; ++j)
+		{
+		if (qSeq->dna[qs+j] == tSeq->dna[ts+j])
+		    {
+		    colorFlags[ts+j] = socBlue;
+		    dna[ts+j] = toupper(dna[ts+j]);
+		    }
+		}
+	    }
+	colorFlags[ts] = socBrightBlue;
+	colorFlags[ts+sz*mulFactor-1] = socBrightBlue;
+	}
+
+    cfm = cfmNew(10, lineWidth, TRUE, tIsRc, f, tcfmStart);
+	
+    for (i=0; i<tSeq->size; ++i)
+	{
+	/* Put down "anchor" on first match position in haystack
+	 * so user can hop here with a click on the needle. */
+	if (curBlock < psl->blockCount && psl->tStarts[curBlock] == (i + tStart) )
+	    {
+	    fprintf(f, "<A NAME=%d></A>", ++curBlock);
+	    /* Watch out for (rare) out-of-order tStarts! */
+	    while (curBlock < psl->blockCount &&
+		   psl->tStarts[curBlock] <= tStart + i)
+		curBlock++;
+	    }
+	cfmOut(cfm, dna[i], seqOutColorLookup[(int)colorFlags[i]]);
+	}
+    cfmFree(&cfm);
+    freez(&colorFlags);
+    htmHorizontalLine(f);
+    }
+
+/* Display side by side. */
+fprintf(f, "</TT></PRE>\n");
+fprintf(f, "<H4><A NAME=ali></A>Side by Side Alignment*</H4>\n");
+fprintf(f, "<PRE><TT>");
+    {
+    struct baf baf;
+    int i,j;
+
+    bafInit(&baf, qSeq->dna, qbafStart, qIsRc,
+	    tSeq->dna, tbafStart, tIsRc, f, lineWidth, isProt);
+		
+    if (isProt)
+	{
+	for (i=0; i<psl->blockCount; ++i)
+	    {
+	    int qs = psl->qStarts[i] - qStart;
+	    int ts = psl->tStarts[i] - tStart;
+	    int sz = psl->blockSizes[i];
+
+	    bafSetPos(&baf, qs, ts);
+	    bafStartLine(&baf);
+	    for (j=0; j<sz; ++j)
+		{
+		AA aa = qSeq->dna[qs+j];
+		int codonStart = ts + 3*j;
+		DNA *codon = &tSeq->dna[codonStart];
+		bafOut(&baf, ' ', codon[0]);
+		bafOut(&baf, aa, codon[1]);
+		bafOut(&baf, ' ', codon[2]);
+		}
+	    bafFlushLine(&baf);
+	    }
+	fprintf( f, "<I>*when aa is different, BLOSUM positives are in green, BLOSUM negatives in red</I>\n");
+	}
+    else
+	{
+	int lastQe = psl->qStarts[0] - qStart;
+	int lastTe = psl->tStarts[0] - tStart;
+	int maxSkip = 8;
+	bafSetPos(&baf, lastQe, lastTe);
+	bafStartLine(&baf);
+	for (i=0; i<psl->blockCount; ++i)
+	    {
+	    int qs = psl->qStarts[i] - qStart;
+	    int ts = psl->tStarts[i] - tStart;
+	    int sz = psl->blockSizes[i];
+	    boolean doBreak = TRUE;
+	    int qSkip = qs - lastQe;
+	    int tSkip = ts - lastTe;
+
+	    if (qSkip >= 0 && qSkip <= maxSkip && tSkip == 0)
+		{
+		for (j=0; j<qSkip; ++j)
+		    bafOut(&baf, qSeq->dna[lastQe+j], '-');
+		doBreak = FALSE;
+		}
+	    else if (tSkip > 0 && tSkip <= maxSkip && qSkip == 0)
+		{
+		for (j=0; j<tSkip; ++j)
+		    bafOut(&baf, '-', tSeq->dna[lastTe+j]);
+		doBreak = FALSE;
+		}
+	    if (doBreak)
+		{
+		bafFlushLine(&baf);
+		bafSetPos(&baf, qs, ts);
+		bafStartLine(&baf);
+		}
+	    for (j=0; j<sz; ++j)
+		bafOut(&baf, qSeq->dna[qs+j], tSeq->dna[ts+j]);
+	    lastQe = qs + sz;
+	    lastTe = ts + sz;
+	    }
+	bafFlushLine(&baf);
+
+	fprintf( f, "<I>*Aligned Blocks with gaps <= %d bases are merged for this display</I>\n", maxSkip);
+	}
+    }
+fprintf(f, "</TT></PRE>");
+if (qIsRc)
+    reverseComplement(qSeq->dna, qSeq->size);
+if (tIsRc)
+    reverseComplement(tSeq->dna, tSeq->size);
+freeMem(dna);
+freeMem(qLetters);
+}
+
+
+int pslGenoShowAlignment(struct psl *psl, boolean isProt,
+	char *qName, bioSeq *qSeq, int qStart, int qEnd,
+	char *tName, bioSeq *tSeq, int tStart, int tEnd, int exnStarts[], int exnEnds[], int exnCnt, FILE *f)
+/* Show aligned exons between a pre-located gene (a stamper gene)and its homologues (stamp elements)
+ * in the genome. The aligned exon sequences are shown in blue as regular blat alignment. * The unaligned exon sequence are shown in red. Intron sequences are shown in black */
+{
+/* At this step we just do a little shuffling of the strands for
+ * untranslated DNA alignments. */
+char origStrand[2];
+boolean needsSwap = (psl->strand[0] == '-' && psl->strand[1] == 0);
+if (needsSwap)
+    {
+    memcpy(origStrand, psl->strand, 2);
+    pslRc(psl);
+    }
+pslShowAlignmentStranded2(psl, isProt, qName, qSeq, qStart, qEnd,
+    tName, tSeq, tStart, tEnd,exnStarts, exnEnds, exnCnt, f);
+if (needsSwap)
+    {
+    pslRc(psl);
+    memcpy(psl->strand, origStrand, 2);
+    }
+return psl->blockCount;
+}
+
diff --git a/gbtools/src/blatSrc/lib/pslShow.c b/gbtools/src/blatSrc/lib/pslShow.c
new file mode 100644
index 0000000..c827e9a
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/pslShow.c
@@ -0,0 +1,317 @@
+/* pslShow - stuff to help visual psl format alignments. 
+ * This file is copyright 2002-2004 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "dnaseq.h"
+#include "htmshell.h"
+#include "psl.h"
+#include "cda.h"
+#include "seqOut.h"
+
+
+static void pslShowAlignmentStranded(struct psl *psl, boolean isProt,
+	char *qName, bioSeq *qSeq, int qStart, int qEnd,
+	char *tName, bioSeq *tSeq, int tStart, int tEnd, FILE *f)
+/* Show protein/DNA alignment or translated DNA alignment in HTML format. */
+{
+boolean tIsRc = (psl->strand[1] == '-');
+boolean qIsRc = (psl->strand[0] == '-');
+int mulFactor = (isProt ? 3 : 1);
+DNA *dna = NULL;	/* Mixed case version of genomic DNA. */
+int qSize = qSeq->size;
+char *qLetters = cloneString(qSeq->dna);
+int qbafStart, qbafEnd, tbafStart, tbafEnd;
+int qcfmStart, qcfmEnd, tcfmStart, tcfmEnd;
+
+int lineWidth = isProt ? 60 : 50;
+
+tbafStart = tStart;
+tbafEnd   = tEnd;
+tcfmStart = tStart;
+tcfmEnd   = tEnd;
+
+qbafStart = qStart;
+qbafEnd   = qEnd;
+qcfmStart = qStart;
+qcfmEnd   = qEnd;
+
+/* Deal with minus strand. */
+if (tIsRc)
+    {
+    int temp;
+    reverseComplement(tSeq->dna, tSeq->size);
+
+    tbafStart = tEnd;
+    tbafEnd   = tStart;
+    tcfmStart = tEnd;
+    tcfmEnd   = tStart;
+
+    temp = psl->tSize - tEnd;
+    tEnd = psl->tSize - tStart;
+    tStart = temp;
+    }
+if (qIsRc)
+    {
+    int temp;
+    reverseComplement(qSeq->dna, qSeq->size);
+    reverseComplement(qLetters, qSeq->size);
+
+    qcfmStart = qEnd;
+    qcfmEnd   = qStart;
+    qbafStart = qEnd;
+    qbafEnd   = qStart;
+    
+    temp = psl->qSize - qEnd;
+    qEnd = psl->qSize - qStart;
+    qStart = temp;
+    }
+dna = cloneString(tSeq->dna);
+
+if (qName == NULL) 
+    qName = psl->qName;
+if (tName == NULL)
+    tName = psl->tName;
+
+
+fputs("Matching bases are colored blue and capitalized. " 
+      "Light blue bases mark the boundaries of gaps in either sequence.\n", f);
+
+fprintf(f, "<H4><A NAME=cDNA></A>%s%s</H4>\n", qName, (qIsRc  ? " (reverse complemented)" : ""));
+fprintf(f, "<PRE><TT>");
+tolowers(qLetters);
+
+/* Display query sequence. */
+    {
+    struct cfm *cfm;
+    char *colorFlags = needMem(qSeq->size);
+    int i,j;
+
+    for (i=0; i<psl->blockCount; ++i)
+	{
+	int qs = psl->qStarts[i] - qStart;
+	int ts = psl->tStarts[i] - tStart;
+	int sz = psl->blockSizes[i]-1;
+	colorFlags[qs] = socBrightBlue;
+	qLetters[qs] = toupper(qLetters[qs]);
+	colorFlags[qs+sz] = socBrightBlue;
+	qLetters[qs+sz] = toupper(qLetters[qs+sz]);
+	if (isProt)
+	    {
+	    for (j=1; j<sz; ++j)
+		{
+		AA aa = qSeq->dna[qs+j];
+		DNA *codon = &tSeq->dna[ts + 3*j];
+		AA trans = lookupCodon(codon);
+		if (trans != 'X' && trans == aa)
+		    {
+		    colorFlags[qs+j] = socBlue;
+		    qLetters[qs+j] = toupper(qLetters[qs+j]);
+		    }
+		}
+	    }
+	else
+	    {
+	    for (j=1; j<sz; ++j)
+		{
+		if (qSeq->dna[qs+j] == tSeq->dna[ts+j])
+		    {
+		    colorFlags[qs+j] = socBlue;
+		    qLetters[qs+j] = toupper(qLetters[qs+j]);
+		    }
+		}
+	    }
+	}
+    cfm = cfmNew(10, lineWidth, TRUE, qIsRc, f, qcfmStart);
+    for (i=0; i<qSize; ++i)
+	cfmOut(cfm, qLetters[i], seqOutColorLookup[(int)colorFlags[i]]);
+    cfmFree(&cfm);
+    freez(&colorFlags);
+    htmHorizontalLine(f);
+    }
+fprintf(f, "</TT></PRE>\n");
+fprintf(f, "<H4><A NAME=genomic></A>%s %s:</H4>\n", 
+	tName, (tIsRc ? "(reverse strand)" : ""));
+fprintf(f, "<PRE><TT>");
+
+/* Display DNA sequence. */
+    {
+    struct cfm *cfm;
+    char *colorFlags = needMem(tSeq->size);
+    int i,j;
+    int curBlock = 0;
+
+    for (i=0; i<psl->blockCount; ++i)
+	{
+	int qs = psl->qStarts[i] - qStart;
+	int ts = psl->tStarts[i] - tStart;
+	int sz = psl->blockSizes[i];
+	if (isProt)
+	    {
+	    for (j=0; j<sz; ++j)
+		{
+		AA aa = qSeq->dna[qs+j];
+		int codonStart = ts + 3*j;
+		DNA *codon = &tSeq->dna[codonStart];
+		AA trans = lookupCodon(codon);
+		if (trans != 'X' && trans == aa)
+		    {
+		    colorFlags[codonStart] = socBlue;
+		    colorFlags[codonStart+1] = socBlue;
+		    colorFlags[codonStart+2] = socBlue;
+		    toUpperN(dna+codonStart, 3);
+		    }
+		}
+	    }
+	else
+	    {
+	    for (j=0; j<sz; ++j)
+		{
+		if (qSeq->dna[qs+j] == tSeq->dna[ts+j])
+		    {
+		    colorFlags[ts+j] = socBlue;
+		    dna[ts+j] = toupper(dna[ts+j]);
+		    }
+		}
+	    }
+	colorFlags[ts] = socBrightBlue;
+	colorFlags[ts+sz*mulFactor-1] = socBrightBlue;
+	}
+
+    cfm = cfmNew(10, lineWidth, TRUE, tIsRc, f, tcfmStart);
+	
+    for (i=0; i<tSeq->size; ++i)
+	{
+	/* Put down "anchor" on first match position in haystack
+	 * so user can hop here with a click on the needle. */
+	if (curBlock < psl->blockCount && psl->tStarts[curBlock] == (i + tStart) )
+	    {
+	    fprintf(f, "<A NAME=%d></A>", ++curBlock);
+	    /* Watch out for (rare) out-of-order tStarts! */
+	    while (curBlock < psl->blockCount &&
+		   psl->tStarts[curBlock] <= tStart + i)
+		curBlock++;
+	    }
+	cfmOut(cfm, dna[i], seqOutColorLookup[(int)colorFlags[i]]);
+	}
+    cfmFree(&cfm);
+    freez(&colorFlags);
+    htmHorizontalLine(f);
+    }
+
+/* Display side by side. */
+fprintf(f, "</TT></PRE>\n");
+fprintf(f, "<H4><A NAME=ali></A>Side by Side Alignment*</H4>\n");
+fprintf(f, "<PRE><TT>");
+    {
+    struct baf baf;
+    int i,j;
+
+    bafInit(&baf, qSeq->dna, qbafStart, qIsRc,
+	    tSeq->dna, tbafStart, tIsRc, f, lineWidth, isProt);
+		
+    if (isProt)
+	{
+	for (i=0; i<psl->blockCount; ++i)
+	    {
+	    int qs = psl->qStarts[i] - qStart;
+	    int ts = psl->tStarts[i] - tStart;
+	    int sz = psl->blockSizes[i];
+
+	    bafSetPos(&baf, qs, ts);
+	    bafStartLine(&baf);
+	    for (j=0; j<sz; ++j)
+		{
+		AA aa = qSeq->dna[qs+j];
+		int codonStart = ts + 3*j;
+		DNA *codon = &tSeq->dna[codonStart];
+		bafOut(&baf, ' ', codon[0]);
+		bafOut(&baf, aa, codon[1]);
+		bafOut(&baf, ' ', codon[2]);
+		}
+	    bafFlushLine(&baf);
+	    }
+	fprintf( f, 
+"<I>*When the translated amino acid in the genomic sequence differs from the \n"
+"corresponding amino acid in the protein, the coloring indicates the\n"
+"similarity of the two amino acids.  Similar amino acids are green, \n"
+"dissimilar amino acids are red.  The sign of the corresponding entry in\n"
+"the BLOSUM 62 matrix is used as the basis of this coloring.</I>\n");
+	}
+    else
+	{
+	int lastQe = psl->qStarts[0] - qStart;
+	int lastTe = psl->tStarts[0] - tStart;
+	int maxSkip = 8;
+	bafSetPos(&baf, lastQe, lastTe);
+	bafStartLine(&baf);
+	for (i=0; i<psl->blockCount; ++i)
+	    {
+	    int qs = psl->qStarts[i] - qStart;
+	    int ts = psl->tStarts[i] - tStart;
+	    int sz = psl->blockSizes[i];
+	    boolean doBreak = TRUE;
+	    int qSkip = qs - lastQe;
+	    int tSkip = ts - lastTe;
+
+	    if (qSkip >= 0 && qSkip <= maxSkip && tSkip == 0)
+		{
+		for (j=0; j<qSkip; ++j)
+		    bafOut(&baf, qSeq->dna[lastQe+j], '-');
+		doBreak = FALSE;
+		}
+	    else if (tSkip > 0 && tSkip <= maxSkip && qSkip == 0)
+		{
+		for (j=0; j<tSkip; ++j)
+		    bafOut(&baf, '-', tSeq->dna[lastTe+j]);
+		doBreak = FALSE;
+		}
+	    if (doBreak)
+		{
+		bafFlushLine(&baf);
+		bafSetPos(&baf, qs, ts);
+		bafStartLine(&baf);
+		}
+	    for (j=0; j<sz; ++j)
+		bafOut(&baf, qSeq->dna[qs+j], tSeq->dna[ts+j]);
+	    lastQe = qs + sz;
+	    lastTe = ts + sz;
+	    }
+	bafFlushLine(&baf);
+
+	fprintf( f, "<I>*Aligned Blocks with gaps <= %d bases are merged for this display</I>\n", maxSkip);
+	}
+    }
+fprintf(f, "</TT></PRE>");
+if (qIsRc)
+    reverseComplement(qSeq->dna, qSeq->size);
+if (tIsRc)
+    reverseComplement(tSeq->dna, tSeq->size);
+freeMem(dna);
+freeMem(qLetters);
+}
+
+int pslShowAlignment(struct psl *psl, boolean isProt,
+	char *qName, bioSeq *qSeq, int qStart, int qEnd,
+	char *tName, bioSeq *tSeq, int tStart, int tEnd, FILE *f)
+/* Show protein/DNA alignment or translated DNA alignment in HTML format. */
+{
+/* At this step we just do a little shuffling of the strands for
+ * untranslated DNA alignments. */
+char origStrand[2];
+boolean needsSwap = (psl->strand[0] == '-' && psl->strand[1] == 0);
+if (needsSwap)
+    {
+    memcpy(origStrand, psl->strand, 2);
+    pslRc(psl);
+    }
+pslShowAlignmentStranded(psl, isProt, qName, qSeq, qStart, qEnd,
+    tName, tSeq, tStart, tEnd, f);
+if (needsSwap)
+    {
+    pslRc(psl);
+    memcpy(psl->strand, origStrand, 2);
+    }
+return psl->blockCount;
+}
+
diff --git a/gbtools/src/blatSrc/lib/pslTbl.c b/gbtools/src/blatSrc/lib/pslTbl.c
new file mode 100644
index 0000000..54f0739
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/pslTbl.c
@@ -0,0 +1,90 @@
+/* table of psl alignments, grouped by query */
+
+/* Copyright (C) 2005 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "pslTbl.h"
+#include "psl.h"
+#include "hash.h"
+#include "linefile.h"
+#include "localmem.h"
+
+static struct pslQuery *pslQueryGet(struct pslTbl *pslTbl,
+                                    char *qName)
+/* get pslQuery object for qName, creating if it doesn't exist. */
+{
+struct hashEl *qHel = hashStore(pslTbl->queryHash, qName);
+if (qHel->val == NULL)
+    {
+    struct pslQuery *pslQuery;
+    lmAllocVar(pslTbl->queryHash->lm, pslQuery);
+    pslQuery->qName = qHel->name;
+    qHel->val = pslQuery;
+    }
+return qHel->val;
+}
+
+static void loadPsl(struct pslTbl *pslTbl, char **row)
+/* load a psl record into the table */
+{
+struct psl *psl = pslLoadLm(row, pslTbl->queryHash->lm);
+struct pslQuery *pslQuery = pslQueryGet(pslTbl, psl->qName);
+slAddHead(&pslQuery->psls, psl);
+}
+
+static void loadPsls(struct pslTbl *pslTbl, char *pslFile)
+/* load a psl records into the table */
+{
+struct lineFile *lf = lineFileOpen(pslFile, TRUE);
+char *row[PSL_NUM_COLS];
+while (lineFileNextRowTab(lf, row, ArraySize(row)))
+    loadPsl(pslTbl, row);
+lineFileClose(&lf);
+}
+
+struct pslTbl *pslTblNew(char *pslFile, char *setName)
+/* construct a new object, loading the psl file.  If setName is NULL, the file
+* name is saved as the set name. */
+{
+struct pslTbl *pslTbl;
+AllocVar(pslTbl);
+pslTbl->setName = (setName == NULL) ? cloneString(pslFile)
+    : cloneString(setName);
+pslTbl->queryHash = hashNew(22);
+loadPsls(pslTbl, pslFile);
+return pslTbl;
+}
+
+void pslTblFree(struct pslTbl **pslTblPtr)
+/* free object */
+{
+struct pslTbl *pslTbl = *pslTblPtr;
+if (pslTbl != NULL)
+    {
+    /* pslQuery and psl objects are in local mem */
+    freeMem(pslTbl->setName);
+    hashFree(&pslTbl->queryHash);
+    freeMem(pslTbl);
+    }
+}
+
+void pslTblFreeList(struct pslTbl **pslTblList)
+/* free list of pslTbls */
+{
+struct pslTbl *pslTbl = *pslTblList;
+while (pslTbl != NULL)
+    {
+    struct pslTbl *pslTblDel = pslTbl;
+    pslTbl = pslTbl->next;
+    pslTblFree(&pslTblDel);
+    }
+*pslTblList = NULL;
+}
+
+/*
+ * Local Variables:
+ * c-file-style: "jkent-c"
+ * End:
+ */
+
diff --git a/gbtools/src/blatSrc/lib/pslTransMap.c b/gbtools/src/blatSrc/lib/pslTransMap.c
new file mode 100644
index 0000000..f082a5d
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/pslTransMap.c
@@ -0,0 +1,328 @@
+/* pslTransMap - transitive mapping of an alignment another sequence, via a
+ * common alignment */
+
+/* Copyright (C) 2009 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+#include "common.h"
+#include "pslTransMap.h"
+#include "psl.h"
+
+/*
+ * Notes:
+ *  - This code is used with both large and small mapping psls.  Large
+ *    psls used for doing cross-species mappings and small psl are used for
+ *    doing protein to mRNA mappings.  This introduces some speed issues.  For
+ *    chain mapping, a large amount of time is spent in getBlockMapping()
+ *    searching for the starting point of a mapping.  However an optimization
+ *    to find the starting point, such as a binKeeper, could be inefficient
+ *    for a large number of small psls.  Implementing such an optimzation
+ *    would have to be dependent on the type of mapping.  The code was made
+ *    16x faster for genome mappings by remembering the current location in
+ *    the mapping psl between blocks (iMapBlkPtr arg).  This will do for a
+ *    while.
+ */
+
+
+struct block
+/* coordinates of a block */
+{
+    int qStart;          /* Query start position. */
+    int qEnd;            /* Query end position. */
+    int tStart;          /* Target start position. */
+    int tEnd;            /* Target end position. */
+};
+
+static void pslProtToNA(struct psl *psl)
+/* convert a protein/NA alignment to a NA/NA alignment */
+{
+int iBlk;
+
+psl->qStart *= 3;
+psl->qEnd *= 3;
+psl->qSize *= 3;
+for (iBlk = 0; iBlk < psl->blockCount; iBlk++)
+    {
+    psl->blockSizes[iBlk] *= 3;
+    psl->qStarts[iBlk] *= 3;
+    }
+}
+
+static void pslNAToProt(struct psl *psl)
+/* undo pslProtToNA */
+{
+int iBlk;
+
+psl->qStart /= 3;
+psl->qEnd /= 3;
+psl->qSize /= 3;
+for (iBlk = 0; iBlk < psl->blockCount; iBlk++)
+    {
+    psl->blockSizes[iBlk] /= 3;
+    psl->qStarts[iBlk] /= 3;
+    }
+}
+
+static struct psl* createMappedPsl(struct psl* inPsl, struct psl *mapPsl,
+                                   int mappedPslMax)
+/* setup a PSL for the output alignment */
+{
+char strand[3];
+assert(pslTStrand(inPsl) == pslQStrand(mapPsl));
+
+/* strand can be taken from both alignments, since common sequence is in same
+ * orientation. */
+strand[0] = pslQStrand(inPsl);
+strand[1] = pslTStrand(mapPsl);
+strand[2] = '\n';
+
+return pslNew(inPsl->qName, inPsl->qSize, 0, 0,
+              mapPsl->tName, mapPsl->tSize, 0, 0,
+              strand, mappedPslMax, 0);
+}
+
+static struct block blockFromPslBlock(struct psl* psl, int iBlock)
+/* fill in a block object from a psl block */
+{
+struct block block;
+block.qStart = psl->qStarts[iBlock];
+block.qEnd = psl->qStarts[iBlock] + psl->blockSizes[iBlock];
+block.tStart = psl->tStarts[iBlock];
+block.tEnd = psl->tStarts[iBlock] + psl->blockSizes[iBlock];
+return block;
+}
+
+static void addPslBlock(struct psl* psl, struct block* blk, int* pslMax)
+/* add a block to a psl */
+{
+unsigned newIBlk = psl->blockCount;
+
+assert((blk->qEnd - blk->qStart) == (blk->tEnd - blk->tStart));
+if (newIBlk >= *pslMax)
+    pslGrow(psl, pslMax);
+psl->qStarts[newIBlk] = blk->qStart;
+psl->tStarts[newIBlk] = blk->tStart;
+psl->blockSizes[newIBlk] = blk->qEnd - blk->qStart;
+/* lie about match counts. */
+psl->match += psl->blockSizes[newIBlk];
+/* count gaps */
+if (newIBlk > 0)
+    {
+    if (psl->qStarts[newIBlk] > pslQEnd(psl, newIBlk-1))
+        {
+        psl->qNumInsert++;
+        psl->qBaseInsert += psl->qStarts[newIBlk] - pslQEnd(psl, newIBlk-1);
+        }
+    if (psl->tStarts[newIBlk] > pslTEnd(psl, newIBlk-1))
+        {
+        psl->tNumInsert++;
+        psl->tBaseInsert += psl->tStarts[newIBlk] - pslTEnd(psl, newIBlk-1);
+        }
+    }
+psl->blockCount++;
+}
+
+static void setPslBounds(struct psl* mappedPsl)
+/* set sequences bounds on mapped PSL */
+{
+int lastBlk = mappedPsl->blockCount-1;
+
+/* set start/end of sequences */
+mappedPsl->qStart = mappedPsl->qStarts[0];
+mappedPsl->qEnd = mappedPsl->qStarts[lastBlk] + mappedPsl->blockSizes[lastBlk];
+if (pslQStrand(mappedPsl) == '-')
+    reverseIntRange(&mappedPsl->qStart, &mappedPsl->qEnd, mappedPsl->qSize);
+
+mappedPsl->tStart = mappedPsl->tStarts[0];
+mappedPsl->tEnd = mappedPsl->tStarts[lastBlk] + mappedPsl->blockSizes[lastBlk];
+if (pslTStrand(mappedPsl) == '-')
+    reverseIntRange(&mappedPsl->tStart, &mappedPsl->tEnd, mappedPsl->tSize);
+}
+
+static void adjustOrientation(unsigned opts, struct psl *inPsl, char *inPslOrigStrand,
+                              struct psl* mappedPsl)
+/* adjust strand, possibly reverse complementing, based on
+ * pslTransMapKeepTrans option and input psls. */
+{
+if (!(opts&pslTransMapKeepTrans) || ((inPslOrigStrand[1] == '\0') && (mappedPsl->strand[1] == '\0')))
+    {
+    /* make untranslated */
+    if (pslTStrand(mappedPsl) == '-')
+        pslRc(mappedPsl);
+    mappedPsl->strand[1] = '\0';  /* implied target strand */
+    }
+}
+
+static struct block getBeforeBlockMapping(unsigned mqStart, unsigned mqEnd,
+                                          struct block* align1Blk)
+/* map part of an ungapped psl block that occurs before a mapPsl block */
+{
+struct block mappedBlk;
+
+/* mRNA start in genomic gap before this block, this will
+ * be an inPsl insert */
+unsigned size = (align1Blk->tEnd < mqStart)
+    ? (align1Blk->tEnd - align1Blk->tStart)
+    : (mqStart - align1Blk->tStart);
+ZeroVar(&mappedBlk);
+mappedBlk.qStart = align1Blk->qStart;
+mappedBlk.qEnd = align1Blk->qStart + size;
+return mappedBlk;
+}
+
+static struct block getOverBlockMapping(unsigned mqStart, unsigned mqEnd,
+                                        unsigned mtStart, struct block* align1Blk)
+/* map part of an ungapped psl block that overlapps a mapPsl block. */
+{
+struct block mappedBlk;
+
+/* common sequence start contained in this block, this handles aligned
+ * and genomic inserts */
+unsigned off = align1Blk->tStart - mqStart;
+unsigned size = (align1Blk->tEnd > mqEnd)
+    ? (mqEnd - align1Blk->tStart)
+    : (align1Blk->tEnd - align1Blk->tStart);
+ZeroVar(&mappedBlk);
+mappedBlk.qStart = align1Blk->qStart;
+mappedBlk.qEnd = align1Blk->qStart + size;
+mappedBlk.tStart = mtStart + off;
+mappedBlk.tEnd = mtStart + off + size;
+return mappedBlk;
+}
+
+static struct block getBlockMapping(struct psl* inPsl, struct psl *mapPsl,
+                                    int *iMapBlkPtr, struct block* align1Blk)
+/* Map part or all of a ungapped psl block to the genome.  This returns the
+ * coordinates of the sub-block starting at the beginning of the align1Blk.
+ * If this is a gap, either the target or query coords are zero.  This works
+ * in genomic strand space.  The search starts at the specified map block,
+ * which is updated to prevent rescanning large psls.
+ */
+{
+int iBlk;
+struct block mappedBlk;
+
+/* search for block or gap containing start of mrna block */
+for (iBlk = *iMapBlkPtr; iBlk < mapPsl->blockCount; iBlk++)
+    {
+    unsigned mqStart = mapPsl->qStarts[iBlk];
+    unsigned mqEnd = mapPsl->qStarts[iBlk]+mapPsl->blockSizes[iBlk];
+    if (align1Blk->tStart < mqStart)
+        {
+        *iMapBlkPtr = iBlk;
+        return getBeforeBlockMapping(mqStart, mqEnd, align1Blk);
+        }
+    if ((align1Blk->tStart >= mqStart) && (align1Blk->tStart < mqEnd))
+        {
+        *iMapBlkPtr = iBlk;
+        return getOverBlockMapping(mqStart, mqEnd, mapPsl->tStarts[iBlk], align1Blk);
+        }
+    }
+
+/* reached the end of the mRNA->genome alignment, finish off the 
+ * rest of the the protein as an insert */
+ZeroVar(&mappedBlk);
+mappedBlk.qStart = align1Blk->qStart;
+mappedBlk.qEnd = align1Blk->qEnd;
+*iMapBlkPtr = iBlk;
+return mappedBlk;
+}
+
+static boolean mapBlock(struct psl *inPsl, struct psl *mapPsl, int *iMapBlkPtr,
+                        struct block *align1Blk, struct psl* mappedPsl,
+                        int* mappedPslMax)
+/* Add a PSL block from a ungapped portion of an alignment, mapping it to the
+ * genome.  If the started of the inPsl block maps to a part of the mapPsl
+ * that is aligned, it is added as a PSL block, otherwise the gap is skipped.
+ * Block starts are adjusted for next call.  Return FALSE if the end of the
+ * alignment is reached. */
+{
+struct block mappedBlk;
+unsigned size;
+assert(align1Blk->qStart <= align1Blk->qEnd);
+assert(align1Blk->tStart <= align1Blk->tEnd);
+assert((align1Blk->qEnd - align1Blk->qStart) == (align1Blk->tEnd - align1Blk->tStart));
+
+if ((align1Blk->qStart >= align1Blk->qEnd) || (align1Blk->tStart >= align1Blk->tEnd))
+    return FALSE;  /* end of ungapped block. */
+
+/* find block or gap with start coordinates of mrna */
+mappedBlk = getBlockMapping(inPsl, mapPsl, iMapBlkPtr, align1Blk);
+
+if ((mappedBlk.qEnd != 0) && (mappedBlk.tEnd != 0))
+    addPslBlock(mappedPsl, &mappedBlk, mappedPslMax);
+
+/* advance past block or gap */
+size = (mappedBlk.qEnd != 0)
+    ? (mappedBlk.qEnd - mappedBlk.qStart)
+    : (mappedBlk.tEnd - mappedBlk.tStart);
+align1Blk->qStart += size;
+align1Blk->tStart += size;
+
+return TRUE;
+}
+
+struct psl* pslTransMap(unsigned opts, struct psl *inPsl, struct psl *mapPsl)
+/* map a psl via a mapping psl, a single psl is returned, or NULL if it
+ * couldn't be mapped. */
+{
+int mappedPslMax = 8; /* allocated space in output psl */
+int iMapBlk = 0;
+char inPslOrigStrand[3];
+boolean rcInPsl = (pslTStrand(inPsl) != pslQStrand(mapPsl));
+boolean cnv1 = (pslIsProtein(inPsl) && !pslIsProtein(mapPsl));
+boolean cnv2 = (pslIsProtein(mapPsl) && !pslIsProtein(inPsl));
+int iBlock;
+struct psl* mappedPsl;
+
+/* sanity check size, but allow names to vary to allow ids to have
+ * unique-ifying suffixes. */
+if (inPsl->tSize != mapPsl->qSize)
+    errAbort("Error: inPsl %s tSize (%d) != mapPsl %s qSize (%d)",
+            inPsl->tName, inPsl->tSize, mapPsl->qName, mapPsl->qSize);
+
+/* convert protein PSLs */
+if (cnv1)
+    pslProtToNA(inPsl);
+if (cnv2)
+    pslProtToNA(mapPsl);
+
+/* need to ensure common sequence is in same orientation, save strand for later */
+safef(inPslOrigStrand, sizeof(inPslOrigStrand), "%s", inPsl->strand);
+if (rcInPsl)
+    pslRc(inPsl);
+
+mappedPsl = createMappedPsl(inPsl, mapPsl, mappedPslMax);
+
+/* Fill in ungapped blocks.  */
+for (iBlock = 0; iBlock < inPsl->blockCount; iBlock++)
+    {
+    struct block align1Blk = blockFromPslBlock(inPsl, iBlock);
+    while (mapBlock(inPsl, mapPsl, &iMapBlk, &align1Blk, mappedPsl,
+                    &mappedPslMax))
+        continue;
+    }
+
+/* finish up psl, or free if no blocks were added */
+assert(mappedPsl->blockCount <= mappedPslMax);
+if (mappedPsl->blockCount == 0)
+    pslFree(&mappedPsl);  /* nothing made it */
+else
+    {
+    setPslBounds(mappedPsl);
+    adjustOrientation(opts, inPsl, inPslOrigStrand, mappedPsl);
+    }
+
+/* restore input */
+if (rcInPsl)
+    {
+    pslRc(inPsl);
+    strcpy(inPsl->strand, inPslOrigStrand);
+    }
+if (cnv1)
+    pslNAToProt(inPsl);
+if (cnv2)
+    pslNAToProt(mapPsl);
+
+return mappedPsl;
+}
+
diff --git a/gbtools/src/blatSrc/lib/pslWScore.as b/gbtools/src/blatSrc/lib/pslWScore.as
new file mode 100644
index 0000000..59bf474
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/pslWScore.as
@@ -0,0 +1,26 @@
+table pslWScore
+"Summary info about a patSpace alignment with a score addition"
+    (
+    uint    match;      "Number of bases that match that aren't repeats"
+    uint    misMatch;   "Number of bases that don't match"
+    uint    repMatch;   "Number of bases that match but are part of repeats"
+    uint    nCount;       "Number of 'N' bases"
+    uint    qNumInsert;   "Number of inserts in query"
+    int     qBaseInsert;  "Number of bases inserted in query"
+    uint    tNumInsert;   "Number of inserts in target"
+    int     tBaseInsert;  "Number of bases inserted in target"
+    char[2] strand;       "+ or - for query strand. For mouse second +/- for genomic strand"
+    string  qName;        "Query sequence name"
+    uint    qSize;        "Query sequence size"
+    uint    qStart;       "Alignment start position in query"
+    uint    qEnd;         "Alignment end position in query"
+    string  tName;        "Target sequence name"
+    uint    tSize;        "Target sequence size"
+    uint    tStart;       "Alignment start position in target"
+    uint    tEnd;         "Alignment end position in target"
+    uint    blockCount;   "Number of blocks in alignment"
+    uint[blockCount] blockSizes;  "Size of each block"
+    uint[blockCount] qStarts;     "Start of each block in query."
+    uint[blockCount] tStarts;     "Start of each block in target."
+    float     score;         "score field"
+    )
diff --git a/gbtools/src/blatSrc/lib/pslWScore.sql b/gbtools/src/blatSrc/lib/pslWScore.sql
new file mode 100644
index 0000000..80f40ad
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/pslWScore.sql
@@ -0,0 +1,31 @@
+# pslWScore.sql was originally generated by the autoSql program, which also 
+# generated pslWScore.c and pslWScore.h.  This creates the database representation of
+# an object which can be loaded and saved from RAM in a fairly 
+# automatic way.
+
+#Summary info about a patSpace alignment with a score addition
+CREATE TABLE uniGene (
+    matches int unsigned not null,	# Number of bases that match that arent repeats
+    misMatch int unsigned not null,	# Number of bases that dont match
+    repMatch int unsigned not null,	# Number of bases that match but are part of repeats
+    nCount int unsigned not null,	# Number of N bases
+    qNumInsert int unsigned not null,	# Number of inserts in query
+    qBaseInsert int not null,	# Number of bases inserted in query
+    tNumInsert int unsigned not null,	# Number of inserts in target
+    tBaseInsert int not null,	# Number of bases inserted in target
+    strand char(2) not null,	# + or - for query strand. For mouse second +- for genomic strand
+    qName varchar(255) not null,	# Query sequence name
+    qSize int unsigned not null,	# Query sequence size
+    qStart int unsigned not null,	# Alignment start position in query
+    qEnd int unsigned not null,	# Alignment end position in query
+    tName varchar(255) not null,	# Target sequence name
+    tSize int unsigned not null,	# Target sequence size
+    tStart int unsigned not null,	# Alignment start position in target
+    tEnd int unsigned not null,	# Alignment end position in target
+    blockCount int unsigned not null,	# Number of blocks in alignment
+    blockSizes longblob not null,	# Size of each block
+    qStarts longblob not null,	# Start of each block in query.
+    tStarts longblob not null,	# Start of each block in target.
+    score float not null,	# score field
+    index(tName(32),tStart,tEnd)
+);
diff --git a/gbtools/src/blatSrc/lib/pthreadDoList.c b/gbtools/src/blatSrc/lib/pthreadDoList.c
new file mode 100644
index 0000000..99cda8a
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/pthreadDoList.c
@@ -0,0 +1,82 @@
+/* pthreadDoList - do something to all items in list using multiple threads in parallel. 
+ * See pthreadDoList.h for documentation on how to use. */
+
+#include "common.h"
+#include "pthreadWrap.h"
+#include "synQueue.h"
+#include "pthreadDoList.h"
+#include "dlist.h"
+
+struct pthreadWorkList
+/* Manage threads to work on a list of items in parallel. */
+    {
+    struct pthreadWorkList *next;   /* Next in list */
+    void *context;		    /* Constant context data for each item */
+    PthreadListWorker *worker;   /* Routine that does work in a single thread */
+    pthread_t *pthreads;		    /* Array of pthreads */
+    struct synQueue *inQueue;	    /* Put all inputs here */
+    };
+
+static void pthreadWorkListFree(struct pthreadWorkList **pPwl)
+/* Free up memory resources associated with work list */
+{
+struct pthreadWorkList *pwl = *pPwl;
+if (pwl != NULL)
+    {
+    synQueueFree(&pwl->inQueue);
+    freez(&pwl->pthreads);
+    freez(pPwl);
+    }
+}
+
+static void *pthreadWorker(void *vWorkList)
+/* The worker-bee for a workList thread.  This grabs next input, processes it, and
+ * puts result on output queue.  It returns when no more input. */
+{
+struct pthreadWorkList *pwl = vWorkList;
+void *item;
+while ((item = synQueueGrab(pwl->inQueue)) != NULL)
+    {
+    /* Do work on the item. */
+    pwl->worker(item, pwl->context);
+    }
+return NULL;
+}
+
+void pthreadDoList(int threadCount, void *workList,  PthreadListWorker *worker, void *context)
+/* Work through list with threadCount workers each in own thread. 
+ * The worker will be called in parallel with an item from work list and the context
+ *       worker(item, context)
+ * The context is constant across all threads and items. */
+{
+if (workList == NULL)
+    return;
+if (threadCount < 1 || threadCount > 256)
+    errAbort("pthreadDoList - threadCount %d, but must be between 1 and 256", threadCount);
+
+/* Allocate basic structure */
+struct pthreadWorkList *pwl;
+AllocVar(pwl);
+pwl->context = context;
+pwl->worker = worker;
+AllocArray(pwl->pthreads, threadCount);
+struct synQueue *inQueue = pwl->inQueue = synQueueNew();
+
+/* Loop through all items in list and add them to inQueue */
+struct slList *item;
+for (item = workList; item != NULL; item = item->next)
+    synQueuePutUnprotected(inQueue, item);
+
+/* Start up pthreads */
+int i;
+for (i=0; i<threadCount; ++i)
+    pthreadCreate(&pwl->pthreads[i], NULL, pthreadWorker, pwl);
+
+/* Wait for threads to finish*/
+for (i=0; i<threadCount; ++i)
+    pthread_join(pwl->pthreads[i], NULL);
+
+/* Clean up */
+pthreadWorkListFree(&pwl);
+}
+
diff --git a/gbtools/src/blatSrc/lib/pthreadWrap.c b/gbtools/src/blatSrc/lib/pthreadWrap.c
new file mode 100644
index 0000000..f532e2d
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/pthreadWrap.c
@@ -0,0 +1,105 @@
+/* pthreadWrap - error checking wrappers around Posix
+ * thread functions.  Most of the errors here are invariably
+ * fatal, but shouldn't happen unless the kernal or
+ * the program is hosed. */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "errAbort.h"
+#include "pthreadWrap.h"
+
+
+static void pwarn(char *function, int err)
+/* Print a warning message on non-zero error code. */
+{
+if (err != 0)
+    warn("Couldn't %s: %s\n", function, strerror(err));
+}
+
+static void perr(char *function, int err)
+/* Print out error for function and abort on
+ * non-zero error code.. */
+{
+if (err != 0)
+    {
+    pwarn(function, err);
+    noWarnAbort();
+    }
+}
+
+void pthreadCreate(pthread_t *thread, const pthread_attr_t *attr,
+	void *(*start_routine)(void *), void *arg)
+/* Create a thread or squawk and die. */
+{
+int err = pthread_create(thread, attr, start_routine, arg);
+perr("pthread_create", err);
+}
+
+boolean pthreadMayCreate(pthread_t *thread, const pthread_attr_t *attr,
+	void *(*start_routine)(void *), void *arg)
+/* Create a thread.  Warn and return FALSE if there is a problem. */
+{
+int err = pthread_create(thread, attr, start_routine, arg);
+pwarn("pthread_create", err);
+return err == 0;
+}
+
+void pthreadMutexInit(pthread_mutex_t *mutex)
+/* Initialize mutex or die trying */
+{
+int err = pthread_mutex_init(mutex, NULL);
+perr("pthread_mutex_init", err);
+}
+
+void pthreadMutexDestroy(pthread_mutex_t *mutex)
+/* Free up mutex. */
+{
+int err = pthread_mutex_destroy(mutex);
+perr("pthread_mutex_destroy", err);
+}
+
+void pthreadMutexLock(pthread_mutex_t *mutex)
+/* Lock a mutex to gain exclusive access or die trying. */
+{
+int err = pthread_mutex_lock(mutex);
+perr("pthread_mutex_lock", err);
+}
+
+void pthreadMutexUnlock(pthread_mutex_t *mutex)
+/* Unlock a mutex or die trying. */
+{
+int err = pthread_mutex_unlock(mutex);
+perr("pthread_mutex_unlock", err);
+}
+
+void pthreadCondInit(pthread_cond_t *cond)
+/* Initialize pthread conditional. */
+{
+int err = pthread_cond_init(cond, NULL);
+perr("pthread_cond_init", err);
+}
+
+void pthreadCondDestroy(pthread_cond_t *cond)
+/* Free up conditional. */
+{
+int err = pthread_cond_destroy(cond);
+perr("pthread_cond_destroy", err);
+}
+
+void pthreadCondSignal(pthread_cond_t *cond)
+/* Set conditional signal to wake up a sleeping thread, or
+ * die trying. */
+{
+int err = pthread_cond_signal(cond);
+perr("pthread_cond_signal", err);
+}
+
+void pthreadCondWait(pthread_cond_t *cond, pthread_mutex_t *mutex)
+/* Wait for conditional signal. */
+{
+int err = pthread_cond_wait(cond, mutex);
+perr("pthread_cond_wait", err);
+}
+
diff --git a/gbtools/src/blatSrc/lib/qa.c b/gbtools/src/blatSrc/lib/qa.c
new file mode 100644
index 0000000..d5060fc
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/qa.c
@@ -0,0 +1,222 @@
+/* qa - Modules to help do testing, especially on html based apps. */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "hash.h"
+#include "dystring.h"
+#include "portable.h"
+#include "htmlPage.h"
+#include "errAbort.h"
+#include "errCatch.h"
+#include "htmshell.h"
+#include "qa.h"
+
+
+char *qaStringBetween(char *text, char *startPattern, char *endPattern)
+/* Return text that occurs between startPattern and endPattern,
+ * or NULL if no startPattern.  (Will return up to 100 characters
+ * after startPattern if there is no endPattern) */
+{
+char *startMid = stringIn(startPattern, text);
+if (startMid != NULL)
+    {
+    char *endMid;
+    int midSize;
+    startMid += strlen(startPattern);
+    endMid = stringIn(startMid, endPattern);
+    if (endMid == NULL)
+        {
+	midSize = strlen(startMid);
+	if (midSize > 100)
+	    midSize = 100;
+	}
+    else
+        midSize = endMid - startMid;
+    return cloneStringZ(startMid, midSize);
+    }
+return NULL;
+}
+
+char *qaScanForErrorMessage(char *text)
+/* Scan text for error message.  If one exists then
+ * return copy of it.  Else return NULL. */
+{
+return qaStringBetween(text, htmlWarnStartPattern(), htmlWarnEndPattern());
+}
+
+int qaCountBetween(char *s, char *startPattern, char *endPattern, 
+	char *midPattern)
+/* Count the number of midPatterns that occur between start and end pattern. */
+{
+int count = 0;
+char *e;
+s = stringIn(startPattern, s);
+if (s != NULL)
+    {
+    s += strlen(startPattern);
+    e = stringIn(endPattern, s);
+    while (s < e)
+        {
+	if (startsWith(midPattern, s))
+	    ++count;
+	s += 1;
+	}
+    }
+return count;
+}
+
+void qaStatusReportOne(FILE *f, struct qaStatus *qs, char *format, ...)
+/* Report status */
+{
+char *errMessage = qs->errMessage;
+char *severity = "ok";
+va_list args;
+va_start(args, format);
+if (errMessage == NULL)
+    errMessage = "";
+else
+    {
+    if (qs->hardError)
+        severity = "hard";
+    else
+        severity = "soft";
+    }
+  
+vfprintf(f, format, args);
+fprintf(f, " %4.3fs (%s) %s\n", 0.001*qs->milliTime, severity, errMessage);
+va_end(args);
+}
+
+static struct qaStatus *qaStatusOnPage(struct errCatch *errCatch, 
+	struct htmlPage *page, long startTime, struct htmlPage **retPage)
+/* Assuming you have fetched page with the given error catcher,
+ * starting the fetch at the given startTime, then create a
+ * qaStatus that describes how the fetch went.  If *retPage is non-null
+ * then return the page there, otherwise free it. */
+{
+char *errMessage = NULL;
+struct qaStatus *qs;
+AllocVar(qs);
+if (errCatch->gotError || page == NULL)
+    {
+    errMessage = errCatch->message->string;
+    qs->hardError = TRUE;
+    }
+else
+    {
+    if (page->status->status != 200)
+	{
+	dyStringPrintf(errCatch->message, "HTTP status code %d\n", 
+		page->status->status);
+	errMessage = errCatch->message->string;
+	qs->hardError = TRUE;
+	htmlPageFree(&page);
+	}
+    else
+        {
+	errMessage = qaScanForErrorMessage(page->fullText);
+	}
+    }
+qs->errMessage = cloneString(errMessage);
+if (qs->errMessage != NULL)
+    subChar(qs->errMessage, '\n', ' ');
+qs->milliTime = clock1000() - startTime;
+if (retPage != NULL)
+    *retPage = page;
+else
+    htmlPageFree(&page);
+return qs;
+}
+
+struct qaStatus *qaPageGet(char *url, struct htmlPage **retPage)
+/* Get info on given url, (and return page if retPage non-null). */
+{
+struct errCatch *errCatch = errCatchNew();
+struct qaStatus *qs;
+struct htmlPage *page = NULL;
+long startTime = clock1000();
+if (errCatchStart(errCatch))
+    {
+    page = htmlPageGet(url);
+    htmlPageValidateOrAbort(page);
+    }
+else
+    {
+    htmlPageFree(&page);
+    }
+errCatchEnd(errCatch);
+qs = qaStatusOnPage(errCatch, page, startTime, retPage);
+errCatchFree(&errCatch);
+return qs;
+}
+
+struct qaStatus *qaPageFromForm(struct htmlPage *origPage, struct htmlForm *form, 
+	char *buttonName, char *buttonVal, struct htmlPage **retPage)
+/* Get update to form based on pressing a button. */
+{
+struct errCatch *errCatch = errCatchNew();
+struct qaStatus *qs;
+struct htmlPage *page = NULL;
+long startTime = clock1000();
+if (errCatchStart(errCatch))
+    {
+    page = htmlPageFromForm(origPage, form, buttonName, buttonVal);
+    htmlPageValidateOrAbort(page);
+    }
+else
+    {
+    htmlPageFree(&page);
+    }
+errCatchEnd(errCatch);
+qs = qaStatusOnPage(errCatch, page, startTime, retPage);
+errCatchFree(&errCatch);
+return qs;
+}
+
+void qaStatusSoftError(struct qaStatus *qs, char *format, ...)
+/* Add error message for something less than a crash. */
+{
+struct dyString *dy = dyStringNew(0);
+va_list args, args2;
+va_start(args, format);
+/* args can't be reused, so vaWarn needs its own va_list: */
+va_start(args2, format);
+vaWarn(format, args2);
+if (qs->errMessage)
+    {
+    dyStringAppend(dy, qs->errMessage);
+    dyStringAppendC(dy, '\n');
+    }
+dyStringVaPrintf(dy, format, args);
+va_end(args);
+va_end(args2);
+freez(&qs->errMessage);
+qs->errMessage = cloneString(dy->string);
+dyStringFree(&dy);
+}
+
+void qaStatisticsAdd(struct qaStatistics *stats, struct qaStatus *qs)
+/* Add test results to totals */
+{
+stats->testCount += 1;
+stats->milliTotal += qs->milliTime;
+if (qs->errMessage)
+    {
+    if (qs->hardError)
+        stats->hardCount += 1;
+    else
+        stats->softCount += 1;
+    }
+}
+
+void qaStatisticsReport(struct qaStatistics *stats, char *label, FILE *f)
+/* Write a line of stats to file. */
+{
+fprintf(f, "%20s:  %3d tests, %2d soft errors, %2d hard errors, %5.2f seconds\n",
+	label, stats->testCount, stats->softCount, stats->hardCount, 
+	0.001 * stats->milliTotal);
+}
+
+
diff --git a/gbtools/src/blatSrc/lib/quickHeap.c b/gbtools/src/blatSrc/lib/quickHeap.c
new file mode 100644
index 0000000..eec8fe2
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/quickHeap.c
@@ -0,0 +1,196 @@
+/* quickHeap - Heap implemented as an array for speed.
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial.
+ *
+ *    The array can be resized as it grows.
+ *  By preserving the relationship that the children of n are at 2n+1 and 2n+2,
+ *  and therefore the parent of n is at (n-1)/2, we can save alot of pointer
+ *  manipulation and get some speed.  
+ *    This routine could for instance be used at the heart of a multi-way mergesort
+ *  or other situation such as a priority queue.
+ *
+ * Maintaining the heap is quick and easy since
+ * we just use an array with the following relationships:
+ * children(n) == 2n+1,2n+2. parent(n) == (n-1)/2.
+ * The highest score is always at the top of the heap in 
+ * position 0. When the top element is consumed and 
+ * and the next element for the previously top elem is 
+ * set in, we simply balance the heap to maintain the heap property
+ * by swapping with the largest child until both children 
+ * are smaller, or we hit the end of the array (==heapCount).
+ * Also note that scores are not necessarily unique, heap members
+ * may have equal score.  So A parent need not only be greater
+ * than its children, it may also be equal to them.
+ */
+
+#include "common.h"
+#include "quickHeap.h"
+
+
+
+struct quickHeap *newQuickHeap(int initSize, 
+   int (*compare )(const void *elem1,  const void *elem2))
+/* Create a new array quick heap of initial size specified,
+ * The compare function must return > 0 if elem1 > elem2, etc.*/
+{
+struct quickHeap *h;
+if (initSize < 1)
+    errAbort("invalid initial size for newQuickHeap: %d",initSize);
+AllocVar(h);
+h->heapCount=0;
+h->heapMax = initSize;
+h->heap = AllocN(void *,h->heapMax);
+h->compareFunc = compare;
+return h;
+}
+
+
+void freeQuickHeap(struct quickHeap **pH)
+/* Heap needs more space, double the size of the array preserving elements */
+{
+struct quickHeap *h = *pH;
+freez(&h->heap);
+freez(pH);
+}
+
+static void expandQuickHeap(struct quickHeap *h)
+/* Heap needs more space, double the size of the array preserving elements */
+{
+int newSize = h->heapMax * 2;
+ExpandArray(h->heap, h->heapMax, newSize);
+h->heapMax = newSize;
+}
+
+void addToQuickHeap(struct quickHeap *h, void *elem)
+/* add to heap at end (expands array if needed), rebalance */
+{
+int n, p;   /* node, parent */
+if (h->heapCount >= h->heapMax)
+    expandQuickHeap(h);
+/* preserve heap property as it grows */
+n = h->heapCount;
+h->heap[h->heapCount++] = elem;
+p = (n-1)/2;
+while (n > 0 && h->compareFunc(h->heap[p], h->heap[n]) < 0)
+    {
+    void *temp = h->heap[p];
+    h->heap[p] = h->heap[n];
+    h->heap[n] = temp;
+    n = p;
+    p = (n-1)/2;
+    }
+}
+
+
+static void quickHeapBalanceWithChildren(struct quickHeap *h, int n)
+/* only the value of the n-th element has changed, now rebalance */
+{
+int c1, c2, hc;   /* child1, child2, heapCount */
+if (n < 0 || n >= h->heapCount)
+    errAbort("attempt to quickHeapBalanceWithChildren with invalid value "
+		"for n: %d, heapCount=%d", n, h->heapCount);
+/* balance heap - swap node with biggest child until both children are 
+ * either less or equal or hit end of heap (no more children) */
+hc = h->heapCount;
+c1 = 2*n+1;
+c2 = 2*n+2;
+while (TRUE)
+    {
+    void *temp = NULL;
+    int bestc = n;
+    if (c1 < hc && h->compareFunc(h->heap[c1], h->heap[bestc]) > 0)
+	bestc = c1;
+    if (c2 < hc && h->compareFunc(h->heap[c2], h->heap[bestc]) > 0)
+	bestc = c2;
+    if (bestc == n)
+	break;
+    temp = h->heap[bestc];
+    h->heap[bestc] = h->heap[n];
+    h->heap[n] = temp;
+    n = bestc;
+    c1 = 2*n+1;
+    c2 = 2*n+2;
+    }
+}
+
+
+void quickHeapTopChanged(struct quickHeap *h)
+/* only the value of the top element has changed, now rebalance */
+{
+/* balance heap - swap node with biggest child until both children are 
+ * either less or equal or hit end of heap (no more children) */
+quickHeapBalanceWithChildren(h,0);
+}
+
+boolean quickHeapEmpty(struct quickHeap *h)
+/* return TRUE if quick heap is empty, otherwise FALSE */
+{
+return h->heapCount < 1;
+}
+
+static void removeFromQuickHeapN(struct quickHeap *h, int n)
+/* Remove element n from the heap by swapping 
+ * it with the last element in the heap and rebalancing.
+ * If heap is empty it will errAbort, but that should not happen. */
+{
+if (n < 0 || n >= h->heapCount)
+    errAbort("attempt to removeFromQuickHeapN with invalid value "
+		"for n: %d, heapCount=%d", n, h->heapCount);
+h->heap[n] = h->heap[--h->heapCount]; /* wipes out n by moving tail to it */
+h->heap[h->heapCount] = NULL; /* not needed but clean */
+/* balance heap - swap node with biggest child until both children are 
+ * either less or equal or hit end of heap (no more children) */
+if (n < h->heapCount)  /* i.e. true for all but when n was the tail */
+    quickHeapBalanceWithChildren(h,n);
+}
+
+
+static int findElemInQuickHeap(struct quickHeap *h, void *elem)
+/* Do a linear search in heap array for elem,
+ * return position n or -1 if not found */
+{
+int n = -1;
+while (++n < h->heapCount)
+    {
+    if (h->heap[n] == elem)
+	return n;
+    }
+return -1;    
+}
+
+
+boolean removeFromQuickHeapByElem(struct quickHeap *h, void *elem)
+/* Do a linear search in heap array for elem,
+ * then remove it by position n. Return TRUE
+ * if found and removed, otherwise return FALSE. */
+{
+int n = findElemInQuickHeap(h, elem);
+if (n < 0) 
+    return FALSE;
+removeFromQuickHeapN(h,n);
+return TRUE;
+}
+
+void *peekQuickHeapTop(struct quickHeap *h)
+/* return the top element or NULL if empty */
+{
+if (h->heapCount < 1) 
+    return NULL;
+return h->heap[0];    
+}
+
+void *removeQuickHeapTop(struct quickHeap *h)
+/* Return elem (pointer) in heap array[0]
+ * which will be NULL if heap is empty.
+ * Then that top element if found is removed. */
+{
+void *result = h->heap[0]; 
+/* this is ok, but depends on removeFromQuickHeapN NULLing as it empties */   
+if (h->heapCount > 0) 
+    {
+    removeFromQuickHeapN(h,0);
+    }
+return result;
+}
+
diff --git a/gbtools/src/blatSrc/lib/quotedP.c b/gbtools/src/blatSrc/lib/quotedP.c
new file mode 100644
index 0000000..7dbd111
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/quotedP.c
@@ -0,0 +1,117 @@
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "linefile.h"
+#include "dystring.h"
+#include "quotedP.h"
+
+
+char *quotedPrintableEncode(char *input)
+/* Use Quoted-Printable standard to encode a string. */
+{
+struct dyString *dy = dyStringNew(0);
+size_t i=0,l=strlen(input);
+int width = 0;
+for (i=0; i < l; ++i)
+    {
+    char c = input[i];
+    switch (c)
+	{
+	case '=':
+	case '\t':
+	case '\r':
+	case '\n':
+	case ' ':
+	    dyStringAppendC(dy, '=');
+	    dyStringPrintf(dy, "%2x", c);
+	    width += 3;
+	    break;
+	default:
+	    dyStringAppendC(dy, c);
+	    ++width;
+	}
+    if (width > 72)
+	{
+	dyStringAppendC(dy, '=');
+	dyStringAppendC(dy, '\n');
+	width = 0;
+	}
+	
+    }
+/* add terminator to prevent extra newline */
+if (lastChar(dy->string) != '=')  
+    dyStringAppendC(dy, '=');
+    
+return dyStringCannibalize(&dy);
+}
+
+boolean quotedPCollapse(char *line)
+/* Use Quoted-Printable standard to decode a string.
+ * Return true if the line does not end in '='
+ * which indicate continuation. */
+{
+size_t i=0,j=0,l=strlen(line);
+boolean result = lastChar(line) != '=';
+char c1 = ' ', c2 = ' ';
+while(i < l)
+    {
+    if (line[i] == '=')
+	{
+	if (i > (l-3)) 
+	    break;     /* not enough room left for whole char */
+	++i;	    
+	c1 = line[i++];
+	c2 = line[i++];
+	c1 = toupper(c1);
+	c2 = toupper(c2);
+	if (isdigit(c1))
+	    c1 -= 48;
+	else
+	    c1 -= 55;
+	if (isdigit(c2))
+	    c2 -= 48;
+	else
+	    c2 -= 55;
+	line[j++] = (c1 * 16) + c2;
+	}
+    else
+	{
+	line[j++] = line[i++];
+	}
+    }
+line[j] = 0; /* terminate line */
+return result;
+}
+
+char *quotedPrintableDecode(char *input)
+/* Use Quoted-Printable standard to decode a string.  Return decoded
+ * string which will be freeMem'd.  */
+{
+size_t inplen = strlen(input);
+char *result = (char *)needMem(inplen+1);
+size_t j=0;
+char *line = NULL;
+int size = 0;
+int i = 0;
+boolean newLine = FALSE;
+
+struct lineFile *lf = lineFileOnString("", TRUE, cloneString(input));
+
+while (lineFileNext(lf, &line, &size))
+    {
+    newLine = quotedPCollapse(line);
+    size = strlen(line); 
+    for (i = 0; i < size; )
+	result[j++] = line[i++];
+    if (newLine)
+	result[j++] = '\n';
+    }
+
+lineFileClose(&lf);  /* frees cloned string */
+
+result[j] = 0;  /* terminate text string */
+     
+return result;
+}
+
diff --git a/gbtools/src/blatSrc/lib/ra.c b/gbtools/src/blatSrc/lib/ra.c
new file mode 100644
index 0000000..efabdf3
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/ra.c
@@ -0,0 +1,400 @@
+/* Stuff to parse .ra files. Ra files are simple text databases.
+ * The database is broken into records by blank lines.
+ * Each field takes a line.  The name of the field is the first
+ * word in the line.  The value of the field is the rest of the line.
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "linefile.h"
+#include "hash.h"
+#include "localmem.h"
+#include "dystring.h"
+#include "ra.h"
+
+
+boolean raSkipLeadingEmptyLines(struct lineFile *lf, struct dyString *dy)
+/* Skip leading empty lines and comments.  Returns FALSE at end of file.
+ * Together with raNextTagVal you can construct your own raNextRecord....
+ * If dy parameter is non-null, then the text parsed gets placed into dy. */
+{
+char *line;
+/* Skip leading empty lines and comments. */
+if (dy)
+    dyStringClear(dy);
+for (;;)
+    {
+    if (!lineFileNext(lf, &line, NULL))
+       return FALSE;
+    char *tag = skipLeadingSpaces(line);
+    if (tag[0] == 0 || tag[0] == '#')
+       {
+       if (dy)
+	   {
+	   dyStringAppend(dy, line);
+	   dyStringAppendC(dy, '\n');
+	   }
+	}
+    else
+       break;
+    }
+lineFileReuse(lf);
+return TRUE;
+}
+
+boolean raNextTagVal(struct lineFile *lf, char **retTag, char **retVal, struct dyString *dyRecord)
+// Read next line.  Return FALSE at end of file or blank line.  Otherwise fill in
+// *retTag and *retVal and return TRUE.  If dy parameter is non-null, then the text parsed
+// gets appended to dy. Continuation lines in RA file will be joined to produce tag and val,
+// but dy will be filled with the unedited multiple lines containing the continuation chars.
+// NOTE: retTag & retVal, if returned, point to static mem which will be overwritten on next call!
+{
+*retTag = NULL;
+*retVal = NULL;
+
+char *line, *raw = NULL;
+int lineLen,rawLen;
+
+// Don't bother with raw if it isn't used.
+char **pRaw    = NULL;
+int   *pRawLen = NULL;
+if (dyRecord != NULL)
+    {
+    pRaw    = &raw;
+    pRawLen = &rawLen;
+    }
+
+while (lineFileNextFull(lf, &line, &lineLen, pRaw, pRawLen)) // Joins continuation lines
+    {
+    char *clippedText = skipLeadingSpaces(line);
+    if (*clippedText == 0)
+        {
+        if (dyRecord)
+            lineFileReuse(lf);   // Just so don't loose leading space in dy.
+        return FALSE;
+        }
+
+    // Append whatever line was read from file.
+    if (dyRecord)
+        {
+        if (raw != NULL)
+            dyStringAppendN(dyRecord, raw, rawLen);
+        else
+            dyStringAppendN(dyRecord, line, lineLen);
+        dyStringAppendC(dyRecord,'\n');
+        }
+
+    // Skip comments
+    if (*clippedText == '#')
+        {
+        if (startsWith("#EOF", clippedText))
+            return FALSE;
+        else
+            continue;
+        }
+    *retTag = nextWord(&line);
+    *retVal = trimSpaces(line);
+    return TRUE;
+    }
+return FALSE;
+}
+
+struct hash *raNextStanza(struct lineFile *lf)
+// Return a hash containing next record.
+// Will ignore '#' comments and joins continued lines (ending in '\').
+// Returns NULL at end of file.  freeHash this when done.
+// Note this will free the hash keys and values as well,
+// so you'll have to cloneMem them if you want them for later.
+{
+struct hash *hash = NULL;
+char *key, *val;
+
+if (!raSkipLeadingEmptyLines(lf, NULL))
+    return NULL;
+
+while (raNextTagVal(lf, &key, &val, NULL))
+    {
+    if (hash == NULL)
+        hash = newHash(7);
+    hashAdd(hash, key, lmCloneString(hash->lm, val));
+    }
+return hash;
+}
+
+struct slPair *raNextStanzAsPairs(struct lineFile *lf)
+// Return ra stanza as an slPair list instead of a hash.  Handy to preserve the
+// order.  Will ignore '#' comments and joins continued lines (ending in '\').
+{
+struct slPair *list = NULL;
+char *key, *val;
+if (!raSkipLeadingEmptyLines(lf, NULL))
+    return NULL;
+
+while (raNextTagVal(lf, &key, &val, NULL))
+    {
+    slPairAdd(&list, key, cloneString(val)); // key gets cloned by slPairAdd
+    }
+
+slReverse(&list);
+return list;
+}
+
+struct slPair *raNextStanzaLinesAndUntouched(struct lineFile *lf)
+// Return list of lines starting from current position, up through last line of next stanza.
+// May return a few blank/comment lines at end with no real stanza.
+// Will join continuation lines, allocating memory as needed.
+// returns pairs with name=joined line and if joined,
+// val will contain raw lines '\'s and linefeeds, else val will be NULL.
+{
+struct slPair *pairs = NULL;
+boolean stanzaStarted = FALSE;
+char *line, *raw;
+int lineLen,rawLen;
+while (lineFileNextFull(lf, &line, &lineLen, &raw, &rawLen)) // Joins continuation lines
+    {
+    char *clippedText = skipLeadingSpaces(line);
+
+    if (stanzaStarted && clippedText[0] == 0)
+        {
+        lineFileReuse(lf);
+        break;
+        }
+    if (!stanzaStarted && clippedText[0] != 0 && clippedText[0] != '#')
+        stanzaStarted = TRUE; // Comments don't start stanzas and may be followed by blanks
+
+    slPairAdd(&pairs, line,(raw != NULL ? cloneString(raw) : NULL));
+    }
+slReverse(&pairs);
+return pairs;
+}
+
+struct hash *raFromString(char *string)
+/* Return hash of key/value pairs from string.
+ * As above freeHash this when done. */
+{
+char *dupe = cloneString(string);
+char *s = dupe, *lineEnd;
+struct hash *hash = newHash(7);
+char *key, *val;
+
+for (;;)
+    {
+    s = skipLeadingSpaces(s);
+    if (s == NULL || s[0] == 0)
+        break;
+    lineEnd = strchr(s, '\n');
+    if (lineEnd != NULL)
+        *lineEnd++ = 0;
+    key = nextWord(&s);
+    val = skipLeadingSpaces(s);
+    s = lineEnd;
+    val = lmCloneString(hash->lm, val);
+    hashAdd(hash, key, val);
+    }
+freeMem(dupe);
+return hash;
+}
+
+char *raFoldInOneRetName(struct lineFile *lf, struct hash *hashOfHash)
+/* Fold in one record from ra file into hashOfHash.
+ * This will add ra's and ra fields to whatever already
+ * exists in the hashOfHash,  overriding fields of the
+ * same name if they exist already. */
+{
+char *word, *line, *name;
+struct hash *ra;
+struct hashEl *hel;
+
+/* Get first nonempty non-comment line and make sure
+ * it contains name. */
+if (!lineFileNextFullReal(lf, &line))
+    return NULL;
+word = nextWord(&line);
+if (!sameString(word, "name"))
+    errAbort("Expecting 'name' line %d of %s, got %s",
+             lf->lineIx, lf->fileName, word);
+name = nextWord(&line);
+if (name == NULL)
+    errAbort("Short name field line %d of %s", lf->lineIx, lf->fileName);
+
+/* Find ra hash associated with name, making up a new
+ * one if need be. */
+if ((ra = hashFindVal(hashOfHash, name)) == NULL)
+    {
+    ra = newHash(7);
+    hashAdd(hashOfHash, name, ra);
+    hashAdd(ra, "name", lmCloneString(ra->lm, name));
+    }
+
+/* Fill in fields of ra hash with data up to next
+ * blank line or end of file. */
+for (;;)
+    {
+    if (!lineFileNextFull(lf, &line, NULL,NULL,NULL)) // Not using FullReal to detect end of stanza
+        break;
+    line = skipLeadingSpaces(line);
+    if (line[0] == 0)
+        break;                                        // End of stanza detected
+    if (line[0] == '#')
+        continue;
+    word = nextWord(&line);
+    line = skipLeadingSpaces(line);
+    if (line == NULL)
+        line = "";
+    hel = hashLookup(ra, word);
+    if (hel == NULL)
+        hel = hashAdd(ra, word, lmCloneString(ra->lm, line));
+    else
+        hel->val = lmCloneString(ra->lm, line);
+    }
+return hashFindVal(ra, "name");
+}
+
+boolean raFoldInOne(struct lineFile *lf, struct hash *hashOfHash)
+{
+return raFoldInOneRetName(lf, hashOfHash) != NULL;
+}
+
+void raFoldIn(char *fileName, struct hash *hashOfHash)
+/* Read ra's in file name and fold them into hashOfHash.
+ * This will add ra's and ra fields to whatever already
+ * exists in the hashOfHash,  overriding fields of the
+ * same name if they exist already. */
+{
+struct lineFile *lf = lineFileMayOpen(fileName, TRUE);
+if (lf != NULL)
+    {
+    struct hash *uniqHash = hashNew(0);
+    char *name;
+    while ((name = raFoldInOneRetName(lf, hashOfHash)) != NULL)
+	{
+	if (hashLookup(uniqHash, name))
+            errAbort("%s duplicated in record ending line %d of %s", name,
+                     lf->lineIx, lf->fileName);
+	hashAdd(uniqHash, name, NULL);
+	}
+    lineFileClose(&lf);
+    hashFree(&uniqHash);
+    }
+}
+
+struct hash *raReadSingle(char *fileName)
+/* Read in first ra record in file and return as hash. */
+{
+struct lineFile *lf = lineFileOpen(fileName, TRUE);
+struct hash *hash = raNextRecord(lf);
+lineFileClose(&lf);
+return hash;
+}
+
+struct hash *raReadAll(char *fileName, char *keyField)
+/* Return hash that contains all ra records in file keyed
+ * by given field, which must exist.  The values of the
+ * hash are themselves hashes. */
+{
+struct lineFile *lf = lineFileOpen(fileName, TRUE);
+struct hash *bigHash = hashNew(0);
+struct hash *hash;
+while ((hash = raNextRecord(lf)) != NULL)
+    {
+    char *key = hashFindVal(hash, keyField);
+    if (key == NULL)
+        errAbort("Couldn't find key field %s line %d of %s",
+		keyField, lf->lineIx, lf->fileName);
+    hashAdd(bigHash, key, hash);
+    }
+lineFileClose(&lf);
+return bigHash;
+}
+
+struct hash *raReadWithFilter(char *fileName, char *keyField,char *filterKey,char *filterValue)
+/* Return hash that contains all filtered ra records in file keyed by given field, which must exist.
+ * The values of the hash are themselves hashes.  The filter is a key/value pair that must exist.
+ * Example raReadWithFilter(file,"term","type","antibody"): returns hash of hashes of every term with type=antibody */
+{
+struct lineFile *lf = lineFileOpen(fileName, TRUE);
+struct hash *bigHash = hashNew(14);
+struct hash *hash;
+while ((hash = raNextRecord(lf)) != NULL)
+    {
+    char *key = hashFindVal(hash, keyField);
+    if (key == NULL)
+        errAbort("Couldn't find key field %s line %d of %s",
+                 keyField, lf->lineIx, lf->fileName);
+    if (filterKey != NULL)
+        {
+        char *filter = hashFindVal(hash, filterKey);
+        if (filter == NULL)
+            {
+            hashFree(&hash);
+            continue;
+            }
+        if (filterValue != NULL && differentString(filterValue,filter))
+            {
+            hashFree(&hash);
+            continue;
+            }
+        }
+    hashAdd(bigHash, key, hash);
+    }
+lineFileClose(&lf);
+if (hashNumEntries(bigHash) == 0)
+    hashFree(&bigHash);
+return bigHash;
+}
+
+struct hash *raReadThreeLevels(char *fileName, char *lowKeyField, char *middleKeyField)
+/* Return 3 level hash that contains all ra records in file keyed by lowKeyField, which must exist.
+ * and broken into sub hashes based upon middleKeyField that must exist.
+ * Example raReadThreeLevels("cv.ra","term","type"):
+ *         returns hash of 'type' hashes of 'term' hashes of every stanza in cv.ra */
+{
+struct lineFile *lf = lineFileOpen(fileName, TRUE);
+struct hash *topHash = hashNew(0); // Not expecting that many types
+struct hash *bottomHash;
+while ((bottomHash = raNextRecord(lf)) != NULL)
+    {
+    char *lowKey = hashFindVal(bottomHash, lowKeyField);
+    if (lowKey == NULL)
+        errAbort("Couldn't find key field %s line %d of %s",
+                 lowKeyField, lf->lineIx, lf->fileName);
+
+    char *middleKey = hashFindVal(bottomHash, middleKeyField);
+    if (middleKey == NULL)
+        errAbort("Couldn't find middle key field %s line %d of %s",
+                 middleKeyField, lf->lineIx, lf->fileName);
+
+    struct hash *middleHash = hashFindVal(topHash, middleKey);
+    if (middleHash == NULL)
+        {
+        middleHash = hashNew(16); // could be quite a few terms per type.
+        hashAdd(topHash, middleKey, middleHash);
+        }
+    hashAdd(middleHash, lowKey, bottomHash);
+    }
+lineFileClose(&lf);
+if (hashNumEntries(topHash) == 0)
+    hashFree(&topHash);
+return topHash;
+}
+
+struct hash *raTagVals(char *fileName, char *tag)
+/* Return a hash of all values of given tag seen in any stanza of ra file. */
+{
+struct hash *hash = hashNew(0);
+struct lineFile *lf = lineFileOpen(fileName, TRUE);
+char *line;
+while (lineFileNextFullReal(lf, &line))
+    {
+    char *word = nextWord(&line);
+    if (sameString(word, tag))
+        {
+	char *val = trimSpaces(line);
+	if (!hashLookup(hash, val))
+	    hashAdd(hash, val, NULL);
+	}
+    }
+lineFileClose(&lf);
+return hash;
+}
diff --git a/gbtools/src/blatSrc/lib/raToStruct.c b/gbtools/src/blatSrc/lib/raToStruct.c
new file mode 100644
index 0000000..7f108ec
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/raToStruct.c
@@ -0,0 +1,178 @@
+/* raToStruct - stuff to help read ra files into C structures.  Works with raToStructGen
+ * which makes parsers based on .as files. */
+
+/* Copyright (C) 2013 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "hash.h"
+#include "linefile.h"
+#include "raToStruct.h"
+#include "obscure.h"
+
+struct raToStructReader *raToStructReaderNew(char *name,  int fieldCount, char **fields,  
+    int requiredFieldCount, char **requiredFields)
+/* Create a helper object for parsing an ra file into a C structure.  This structure will
+ * contain */
+{
+struct raToStructReader *reader;
+AllocVar(reader);
+reader->name = cloneString(name);
+reader->fieldCount = fieldCount;
+reader->fields = fields;
+reader->requiredFieldCount = requiredFieldCount;
+reader->requiredFields = requiredFields;
+struct hash *fieldIds = reader->fieldIds = hashNew(4);
+int i;
+for (i=0; i<fieldCount; ++i)
+    hashAddInt(fieldIds, fields[i], i);
+if (requiredFieldCount > 0)
+    {
+    AllocArray(reader->requiredFieldIds, requiredFieldCount);
+    for (i=0; i<requiredFieldCount; ++i)
+        {
+	char *required = requiredFields[i];
+	struct hashEl *hel = hashLookup(fieldIds, required);
+	if (hel == NULL)
+	    errAbort("Required field %s is not in field list", required);
+	reader->requiredFieldIds[i] = ptToInt(hel->val);
+	}
+    }
+AllocArray(reader->fieldsObserved, fieldCount);
+return reader;
+}
+
+void raToStructReaderFree(struct raToStructReader **pReader)
+/* Free up memory associated with reader. */
+{
+struct raToStructReader *reader = *pReader;
+if (reader != NULL)
+    {
+    freeMem(reader->name);
+    freeHash(&reader->fieldIds);
+    freeMem(reader->fieldIds);
+    freeMem(reader->fieldsObserved);
+    freez(pReader);
+    }
+}
+
+void raToStructReaderCheckRequiredFields(struct raToStructReader *reader, struct lineFile *lf)
+/* Make sure that all required files have been seen in the stanza we just parsed. */
+{
+int *requiredFieldIds = reader->requiredFieldIds;
+bool *fieldsObserved = reader->fieldsObserved;
+int i;
+for (i=0; i<reader->requiredFieldCount; ++i)
+    {
+    if (!fieldsObserved[requiredFieldIds[i]])
+	{
+	errAbort("Required field %s not found line %d of %s", reader->requiredFields[i],
+	    lf->lineIx, lf->fileName);
+	}
+    }
+}
+
+void raToStructArraySignedSizer(struct lineFile *lf, int curSize, int *pSize, char *fieldName)
+/* If *pSize is zero,  set it to curSize,  othersize check that it is the same as curSize.
+ * The lf and fieldName are for error reporting. */
+{
+int oldSize = *pSize;
+if (oldSize == 0)
+    *pSize = curSize;
+else if (curSize != oldSize)
+    errAbort("Array dimension mismatch between %s and another field in stanza ending line %d of %s",
+	fieldName, lf->lineIx, lf->fileName);
+}
+
+void raToStructArrayUnsignedSizer(struct lineFile *lf, unsigned curSize, 
+    unsigned *pSize, char *fieldName)
+/* If *pSize is zero,  set it to curSize,  othersize check that it is the same as curSize.
+ * The lf and fieldName are for error reporting. */
+{
+unsigned oldSize = *pSize;
+if (oldSize == 0)
+    *pSize = curSize;
+else if (curSize != oldSize)
+    errAbort("Array dimension mismatch between %s and another field in stanza ending line %d of %s",
+	fieldName, lf->lineIx, lf->fileName);
+}
+
+void raToStructArrayShortSizer(struct lineFile *lf, short curSize, 
+    short *pSize, char *fieldName)
+/* If *pSize is zero,  set it to curSize,  othersize check that it is the same as curSize.
+ * The lf and fieldName are for error reporting. */
+{
+short oldSize = *pSize;
+if (oldSize == 0)
+    *pSize = curSize;
+else if (curSize != oldSize)
+    errAbort("Array dimension mismatch between %s and another field in stanza ending line %d of %s",
+	fieldName, lf->lineIx, lf->fileName);
+}
+
+void raToStructArrayUshortSizer(struct lineFile *lf, unsigned short curSize, 
+    unsigned short *pSize, char *fieldName)
+/* If *pSize is zero,  set it to curSize,  othersize check that it is the same as curSize.
+ * The lf and fieldName are for error reporting. */
+{
+unsigned short oldSize = *pSize;
+if (oldSize == 0)
+    *pSize = curSize;
+else if (curSize != oldSize)
+    errAbort("Array dimension mismatch between %s and another field in stanza ending line %d of %s",
+	fieldName, lf->lineIx, lf->fileName);
+}
+
+void raToStructArrayByteSizer(struct lineFile *lf, signed char curSize, 
+    signed char *pSize, char *fieldName)
+/* If *pSize is zero,  set it to curSize,  othersize check that it is the same as curSize.
+ * The lf and fieldName are for error reporting. */
+{
+signed char oldSize = *pSize;
+if (oldSize == 0)
+    *pSize = curSize;
+else if (curSize != oldSize)
+    errAbort("Array dimension mismatch between %s and another field in stanza ending line %d of %s",
+	fieldName, lf->lineIx, lf->fileName);
+}
+
+void raToStructArrayUbyteSizer(struct lineFile *lf, unsigned char curSize, 
+    unsigned char *pSize, char *fieldName)
+/* If *pSize is zero,  set it to curSize,  othersize check that it is the same as curSize.
+ * The lf and fieldName are for error reporting. */
+{
+unsigned char oldSize = *pSize;
+if (oldSize == 0)
+    *pSize = curSize;
+else if (curSize != oldSize)
+    errAbort("Array dimension mismatch between %s and another field in stanza ending line %d of %s",
+	fieldName, lf->lineIx, lf->fileName);
+}
+
+void raToStructArrayLongLongSizer(struct lineFile *lf, long long curSize, 
+    long long *pSize, char *fieldName)
+/* If *pSize is zero,  set it to curSize,  othersize check that it is the same as curSize.
+ * The lf and fieldName are for error reporting. */
+{
+long long oldSize = *pSize;
+if (oldSize == 0)
+    *pSize = curSize;
+else if (curSize != oldSize)
+    errAbort("Array dimension mismatch between %s and another field in stanza ending line %d of %s",
+	fieldName, lf->lineIx, lf->fileName);
+}
+
+#ifdef NEVER
+void raToStructArrayXyzSizer(struct lineFile *lf, xyz curSize, 
+    xyz *pSize, char *fieldName)
+/* If *pSize is zero,  set it to curSize,  othersize check that it is the same as curSize.
+ * The lf and fieldName are for error reporting. */
+{
+xyz oldSize = *pSize;
+if (oldSize == 0)
+    *pSize = curSize;
+else if (curSize != oldSize)
+    errAbort("Array dimension mismatch between %s and another field in stanza ending line %d of %s",
+	fieldName, lf->lineIx, lf->fileName);
+}
+#endif /* NEVER */
diff --git a/gbtools/src/blatSrc/lib/rainbow.c b/gbtools/src/blatSrc/lib/rainbow.c
new file mode 100644
index 0000000..95e8021
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/rainbow.c
@@ -0,0 +1,153 @@
+/* rainbow - stuff to generate rainbow colors. 
+ * This file is copyright 1984-2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "memgfx.h"
+#include "rainbow.h"
+
+struct rgbColor saturatedRainbowTable[28] = {
+/* This table was built by hand for the default Autodesk Animator palette, and then edited
+ * to reduce the amount of green colors that are indistinguishable. */
+    {255, 0, 0},
+    {255, 64, 0},
+    {255, 128, 0},
+    {255, 164, 0},
+    {255, 210, 0},
+    {255, 255, 0},
+    {210, 255, 0},
+    {164, 255, 0},
+    {128, 255, 0},
+    {0, 255, 0},
+    {0, 255, 128},
+    {0, 255, 164},
+    {0, 255, 210},
+    {0, 255, 255},
+    {0, 210, 255},
+    {0, 164, 255},
+    {0, 128, 255},
+    {0, 64, 255},
+    {0, 0, 255},
+    {64, 0, 255},
+    {128, 0, 255},
+    {164, 0, 255},
+    {210, 0, 255},
+    {255, 0, 255},
+    {255, 0, 210},
+    {255, 0, 164},
+    {255, 0, 128},
+    {255, 0, 64},
+    };
+
+static struct rgbColor lightRainbowTable[28] = {
+/* This is a mixture of 1/2 white and 1/2 saturated rainbow.  It's good for rainbow
+ * fringe graphs with a moderate amount of colors (up to about 10) */
+   {255,128,128},
+   {255,160,128},
+   {255,192,128},
+   {255,210,128},
+   {255,233,128},
+   {255,255,128},
+   {233,255,128},
+   {210,255,128},
+   {192,255,128},
+   {128,255,128},
+   {128,255,192},
+   {128,255,210},
+   {128,255,233},
+   {128,255,255},
+   {128,233,255},
+   {128,210,255},
+   {128,192,255},
+   {128,160,255},
+   {128,128,255},
+   {160,128,255},
+   {192,128,255},
+   {210,128,255},
+   {233,128,255},
+   {255,128,255},
+   {255,128,233},
+   {255,128,210},
+   {255,128,192},
+   {255,128,160},
+};
+
+static struct rgbColor veryLightRainbowTable[30] = {
+/* This is a mixture of 2/3 white and 1/3 saturated rainbow.  It's good for rainbow
+ * fringe graphs with a lot of colors (more than 10) */
+   {255,174,174},
+   {255,191,174},
+   {255,207,174},
+   {255,223,174},
+   {255,239,174},
+   {255,255,174},
+   {239,255,174},
+   {223,255,174},
+   {207,255,174},
+   {191,255,174},
+   {174,255,174},
+   {174,255,191},
+   {174,255,207},
+   {174,255,223},
+   {174,255,239},
+   {174,255,255},
+   {174,239,255},
+   {174,223,255},
+   {174,207,255},
+   {174,191,255},
+   {174,174,255},
+   {191,174,255},
+   {207,174,255},
+   {223,174,255},
+   {239,174,255},
+   {255,174,255},
+   {255,174,239},
+   {255,174,223},
+   {255,174,207},
+   {255,174,191},
+};
+
+static struct rgbColor interpolatedHue(struct rgbColor *table, int tableSize, double pos)
+/* Given pos, a number between 0 and 1, return interpolated color, doing interpolation
+ * between first and last color for numbers close to 1. */
+{
+double wrappedPos = pos - floor(pos);	/* Make it so numbers higher than 1 keep circling rainbow */
+double scaledPos = tableSize * wrappedPos;
+double startSlot = floor(scaledPos);	
+double endFactor = scaledPos - startSlot;
+double startFactor = 1.0 - endFactor;
+int startIx = startSlot;
+int endIx = startIx + 1;
+if (endIx == tableSize)
+    endIx = 0;
+
+struct rgbColor *start = table+startIx;
+struct rgbColor *end = table+endIx;
+struct rgbColor col;
+col.r = start->r * startFactor + end->r * endFactor;
+col.g = start->g * startFactor + end->g * endFactor;
+col.b = start->b * startFactor + end->b * endFactor;
+return col;
+}
+
+struct rgbColor veryLightRainbowAtPos(double pos)
+/* Given pos, a number between 0 and 1, return a light rainbow rgbColor
+ * where 0 maps to red,  0.1 is orange, and 0.9 is violet and 1.0 is back to red */
+{
+return interpolatedHue(veryLightRainbowTable, ArraySize(veryLightRainbowTable), pos);
+}
+
+struct rgbColor lightRainbowAtPos(double pos)
+/* Given pos, a number between 0 and 1, return a lightish rainbow rgbColor
+ * where 0 maps to red,  0.1 is orange, and 0.9 is violet and 1.0 is back to red */
+{
+return interpolatedHue(lightRainbowTable, ArraySize(lightRainbowTable), pos);
+}
+
+struct rgbColor saturatedRainbowAtPos(double pos)
+/* Given pos, a number between 0 and 1, return a saturated rainbow rgbColor
+ * where 0 maps to red,  0.1 is orange, and 0.9 is violet and 1.0 is back to red */
+{
+return interpolatedHue(saturatedRainbowTable, ArraySize(saturatedRainbowTable), pos);
+}
+
diff --git a/gbtools/src/blatSrc/lib/rangeTree.c b/gbtools/src/blatSrc/lib/rangeTree.c
new file mode 100644
index 0000000..7e8b708
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/rangeTree.c
@@ -0,0 +1,354 @@
+/* rangeTree - This module is a way of keeping track of
+ * non-overlapping ranges (half-open intervals). It is
+ * based on the self-balancing rbTree code.  Use it in
+ * place of a bitmap when the total number of ranges
+ * is significantly smaller than the number of bits would
+ * be. 
+ * Beware the several static/global variables which can be
+ * changed by various function calls. */
+
+/* Copyright (C) 2013 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "limits.h"
+#include "localmem.h"
+#include "obscure.h"
+#include "rbTree.h"
+#include "rangeTree.h"
+
+
+int rangeCmp(void *va, void *vb)
+/* Return -1 if a before b,  0 if a and b overlap,
+ * and 1 if a after b. */
+{
+struct range *a = va;
+struct range *b = vb;
+if (a->end <= b->start)
+    return -1;
+else if (b->end <= a->start)
+    return 1;
+else
+    return 0;
+}
+
+
+static void *sumInt(void *a, void *b)
+/* Local function used by rangeTreeAddValCount, which sums two ints a and b, 
+ * referenced by void pointers, returning the result in a */
+{
+int *i = a, *j = b;
+*i += *j;
+return a;
+}
+
+
+struct range *rangeTreeAddVal(struct rbTree *tree, int start, int end, void *val, void *(*mergeVals)(void *existingVal, void *newVal) )
+/* Add range to tree, merging with existing ranges if need be. 
+ * If this is a new range, set the value to this val.
+ * If there are existing items for this range, and if mergeVals function is not null, 
+ * apply mergeVals to the existing values and this new val, storing the result as the val
+ * for this range (see rangeTreeAddValCount() and rangeTreeAddValList() below for examples). */
+{
+struct range *r, *existing;
+r = lmAlloc(tree->lm, sizeof(*r)); /* alloc new zeroed range */
+r->start = start;
+r->end = end;
+r->val = val;
+while ((existing = rbTreeRemove(tree, r)) != NULL)
+    {
+    r->start = min(r->start, existing->start);
+    r->end = max(r->end, existing->end);
+    if (mergeVals)
+	r->val = mergeVals(existing->val, r->val);
+    }
+rbTreeAdd(tree, r);
+return r;
+}
+
+
+struct range *rangeTreeAdd(struct rbTree *tree, int start, int end)
+/* Add range to tree, merging with existing ranges if need be. */
+{
+    return rangeTreeAddVal(tree, start, end, NULL, NULL);
+}
+
+
+struct range *rangeTreeAddValCount(struct rbTree *tree, int start, int end)
+/* Add range to tree, merging with existing ranges if need be. 
+ * Set range val to count of elements in the range. Counts are pointers to 
+ * ints allocated in tree localmem */
+{
+    int *a = lmAlloc(tree->lm, sizeof(*a)); /* keep the count in localmem */
+    *a = 1;
+    return rangeTreeAddVal(tree, start, end, (void *)a, sumInt);
+}
+
+
+struct range *rangeTreeAddValList(struct rbTree *tree, int start, int end, void *val)
+/* Add range to tree, merging with existing ranges if need be. 
+ * Add val to the list of values (if any) in each range.
+ * val must be valid argument to slCat (ie, be a struct with a 'next' pointer as its first member) */
+{
+    return rangeTreeAddVal(tree, start, end, val, slCat);
+}
+
+void rangeTreeAddToCoverageDepth(struct rbTree *tree, int start, int end)
+/* Add area from start to end to a tree that is being built up to store the
+ * depth of coverage.  Recover coverage back out by looking at ptToInt(range->val)
+ * on tree elements. */
+{
+struct range q;
+q.start = start;
+q.end = end;
+
+struct range *r, *existing = rbTreeFind(tree, &q);
+if (existing == NULL)
+    {
+    lmAllocVar(tree->lm, r);
+    r->start = start;
+    r->end = end;
+    r->val = intToPt(1);
+    rbTreeAdd(tree, r);
+    }
+else
+    {
+    if (existing->start <= start && existing->end >= end)
+    /* The existing one completely encompasses us */
+        {
+	/* Make a new section for the bit before start. */
+	if (existing->start < start)
+	    {
+	    lmAllocVar(tree->lm, r);
+	    r->start = existing->start;
+	    r->end = start;
+	    r->val = existing->val;
+	    existing->start = start;
+	    rbTreeAdd(tree, r);
+	    }
+	/* Make a new section for the bit after end. */
+	if (existing->end > end)
+	    {
+	    lmAllocVar(tree->lm, r);
+	    r->start = end;
+	    r->end = existing->end;
+	    r->val = existing->val;
+	    existing->end = end;
+	    rbTreeAdd(tree, r);
+	    }
+	/* Increment existing section in overlapping area. */
+        existing->val = (char *)(existing->val) + 1;
+	}
+    else
+    /* In general case fetch list of regions that overlap us. 
+       Remaining cases to handle are: 
+	     r >> e     rrrrrrrrrrrrrrrrrrrr
+			     eeeeeeeeee
+
+	     e < r           rrrrrrrrrrrrrrr
+			eeeeeeeeeeee
+
+	     r < e      rrrrrrrrrrrr
+			     eeeeeeeeeeeee
+     */
+        {
+	struct range *existingList = rangeTreeAllOverlapping(tree, start, end);
+
+#ifdef DEBUG
+	/* Make sure that list is really sorted for debugging... */
+	int lastStart = existingList->start;
+	for (r = existingList; r != NULL; r = r->next)
+	    {
+	    int start = r->start;
+	    if (start < lastStart)
+	        internalErr();
+	    }
+#endif /* DEBUG */
+
+	int s = start, e = end;
+	for (existing = existingList; existing != NULL; existing = existing->next)
+	    {
+	    /* Deal with start of new range that comes before existing */
+	    if (s < existing->start)
+	        {
+		lmAllocVar(tree->lm, r);
+		r->start = s;
+		r->end = existing->start;
+		r->val = intToPt(1);
+		s = existing->start;
+		rbTreeAdd(tree, r);
+		}
+	    else if (s > existing->start)
+	        {
+		lmAllocVar(tree->lm, r);
+		r->start = existing->start;
+		r->end = s;
+		r->val = existing->val;
+		existing->start = s;
+		rbTreeAdd(tree, r);
+		}
+	    existing->val = (char *)(existing->val) + 1;
+	    s = existing->end;
+	    }
+	if (s < e)
+	/* Deal with end of new range that doesn't overlap with anything. */
+	    {
+	    lmAllocVar(tree->lm, r);
+	    r->start = s;
+	    r->end = e;
+	    r->val = intToPt(1);
+	    rbTreeAdd(tree, r);
+	    }
+	}
+    }
+
+}
+
+boolean rangeTreeOverlaps(struct rbTree *tree, int start, int end)
+/* Return TRUE if start-end overlaps anything in tree */
+{
+struct range tempR;
+tempR.start = start;
+tempR.end = end;
+tempR.val = NULL;
+return rbTreeFind(tree, &tempR) != NULL;
+}
+
+static struct range *rangeList;
+
+static void rangeListAdd(void *v)
+/* Callback to add item to range list. */
+{
+struct range *r = v;
+slAddHead(&rangeList, r);
+}
+
+struct range *rangeTreeList(struct rbTree *tree)
+/* Return list of all ranges in tree in order.  Not thread safe. 
+ * No need to free this when done, memory is local to tree. */
+{
+rangeList = NULL;
+rbTreeTraverse(tree, rangeListAdd);
+slReverse(&rangeList);
+return rangeList;
+}
+
+struct range *rangeTreeFindEnclosing(struct rbTree *tree, int start, int end)
+/* Find item in range tree that encloses range between start and end 
+ * if there is any such item. */
+{
+struct range tempR, *r;
+tempR.start = start;
+tempR.end = end;
+r = rbTreeFind(tree, &tempR);
+if (r != NULL && r->start <= start && r->end >= end)
+    {
+    r->next = NULL; /* this can be set by previous calls to the List functions */
+    return r;
+    }
+return NULL;
+}
+
+struct range *rangeTreeAllOverlapping(struct rbTree *tree, int start, int end)
+/* Return list of all items in range tree that overlap interval start-end.
+ * Do not free this list, it is owned by tree.  However it is only good until
+ * next call to rangeTreeFindInRange or rangeTreeList. Not thread safe. */
+{
+struct range tempR;
+tempR.start = start;
+tempR.end = end;
+rangeList = NULL;
+rbTreeTraverseRange(tree, &tempR, &tempR, rangeListAdd);
+slReverse(&rangeList);
+return rangeList;
+}
+
+
+struct range *rangeTreeMaxOverlapping(struct rbTree *tree, int start, int end)
+/* Return item that overlaps most with start-end. Not thread safe.  Trashes list used
+ * by rangeTreeAllOverlapping. */
+{
+struct range *range, *best = NULL;
+int bestOverlap = 0; 
+for (range  = rangeTreeAllOverlapping(tree, start, end); range != NULL; range = range->next)
+    {
+    int overlap = rangeIntersection(range->start, range->end, start, end);
+    if (overlap > bestOverlap)
+        {
+	bestOverlap = overlap;
+	best = range;
+	}
+    }
+if (best)
+    best->next = NULL; /* could be set by calls to List functions */
+return best;
+}
+
+/* A couple of variables used to calculate total overlap. */
+static int totalOverlap;
+static int overlapStart, overlapEnd;
+
+static void addOverlap(void *v)
+/* Callback to add item to range list. */
+{
+struct range *r = v;
+totalOverlap += positiveRangeIntersection(r->start, r->end, 
+	overlapStart, overlapEnd);
+}
+
+int rangeTreeOverlapSize(struct rbTree *tree, int start, int end)
+/* Return the total size of intersection between interval
+ * from start to end, and items in range tree. Sadly not
+ * thread-safe. 
+ * On 32 bit machines be careful not to overflow
+ * range of start, end or total size return value. */
+{
+struct range tempR;
+tempR.start = overlapStart = start;
+tempR.end = overlapEnd = end;
+totalOverlap = 0;
+rbTreeTraverseRange(tree, &tempR, &tempR, addOverlap);
+return totalOverlap;
+}
+
+int rangeTreeOverlapTotalSize(struct rbTree *tree)
+/* Return the total size of all ranges in range tree.
+ * Sadly not thread-safe. 
+ * On 32 bit machines be careful not to overflow
+ * range of start, end or total size return value. */
+{
+return rangeTreeOverlapSize(tree, INT_MIN, INT_MAX);
+}
+
+void rangeTreeSumRangeCallback(void *item, void *context)
+/* This is a callback for rbTreeTraverse with context.  It just adds up
+ * end-start */
+{
+struct range *range = item;
+long long *pSum = context;
+*pSum += range->end - range->start;
+}
+
+long long rangeTreeSumRanges(struct rbTree *tree)
+/* Return sum of end-start of all items. */
+{
+long long sum = 0;
+rbTreeTraverseWithContext(tree, rangeTreeSumRangeCallback, &sum);
+return sum;
+}
+
+
+struct rbTree *rangeTreeNew()
+/* Create a new, empty, rangeTree. */
+{
+return rbTreeNew(rangeCmp);
+}
+
+struct rbTree *rangeTreeNewDetailed(struct lm *lm, struct rbTreeNode *stack[128])
+/* Allocate rangeTree on an existing local memory & stack.  This is for cases
+ * where you want a lot of trees, and don't want the overhead for each one. 
+ * Note, to clean these up, just do freez(&rbTree) rather than rbFreeTree(&rbTree). */
+{
+return rbTreeNewDetailed(rangeCmp, lm, stack);
+}
+
diff --git a/gbtools/src/blatSrc/lib/rbTree.c b/gbtools/src/blatSrc/lib/rbTree.c
new file mode 100644
index 0000000..42952f8
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/rbTree.c
@@ -0,0 +1,740 @@
+/* rbTree - rbTreeRed-rbTreeBlack Tree - a type of binary tree which 
+ * automatically keeps relatively balanced during
+ * inserts and deletions.
+ *   original author: Shane Saunders
+ *   adapted into local conventions: Jim Kent
+ */
+
+#include "common.h"
+#include "localmem.h"
+#include "rbTree.h"
+
+
+
+static struct rbTreeNode *restructure(struct rbTree *t, int tos, 
+	struct rbTreeNode *x, struct rbTreeNode *y, struct rbTreeNode *z)
+/* General restructuring function - checks for all
+ * restructuring cases.  Call when insert has messed up tree.
+ * Sadly delete has to do even more work. */
+{
+struct rbTreeNode *parent, *midNode;
+
+if(y == x->left) 
+    {
+    if(z == y->left) 
+        {  /* in-order:  z, y, x */
+	midNode = y;
+	y->left = z;
+	x->left = y->right;
+	y->right = x;
+	}
+    else 
+        {  /* in-order:  y, z, x */
+	midNode = z;
+	y->right = z->left;
+	z->left = y;
+	x->left = z->right;
+	z->right = x;
+	}
+    }
+else 
+    {
+    if(z == y->left) 
+	{  /* in-order:  x, z, y */
+	midNode = z;
+	x->right = z->left;
+	z->left = x;
+	y->left = z->right;
+	z->right = y;
+	}
+    else 
+	{  /* in-order:  x, y, z */
+	midNode = y;
+	x->right = y->left;
+	y->left = x;
+	y->right = z;
+	}
+    }
+if(tos != 0) 
+    {
+    parent = t->stack[tos-1];
+    if(x == parent->left) 
+	parent->left = midNode;
+    else 
+	parent->right = midNode;
+    }
+else 
+    t->root = midNode;
+
+return midNode;
+}
+
+struct rbTree *rbTreeNewDetailed(int (*compare)(void *, void *), struct lm *lm, 
+	struct rbTreeNode *stack[128])
+/* Allocate rbTree on an existing local memory & stack.  This is for cases
+ * where you want a lot of trees, and don't want the overhead for each one. 
+ * Note, to clean these up, just do freez(&rbTree) rather than rbFreeTree(&rbTree). */
+{
+struct rbTree *t;
+AllocVar(t);
+t->root = NULL;
+t->compare = compare;
+t->lm = lm;
+t->stack = stack;	
+t->n = 0;
+return t;
+}
+
+struct rbTree *rbTreeNew(int (*compare)(void *, void *))
+/* rbTreeNew() - Allocates space for a red-black tree and returns a pointer
+ * to it.  The function compare compares they keys of two items, and returns a
+ * negative, zero, or positive integer depending on whether the first item is
+ * less than, equal to, or greater than the second.  */
+{
+/* The stack keeps us from having to keep explicit
+ * parent, grandparent, greatgrandparent variables.
+ * It needs to be big enough for the maximum depth
+ * of tree.  Since the whole point of rb trees is
+ * that they are self-balancing, this is not all
+ * that deep, just 2*log2(N).  Therefore a stack of
+ * 128 is good for up to 2^64 items in stack, which
+ * should keep us for the next couple of decades... */
+struct lm *lm = lmInit(0);
+struct rbTreeNode **stack = lmAlloc(lm, 128 * sizeof(stack[0]));	
+return rbTreeNewDetailed(compare, lm, stack);
+}
+
+
+void rbTreeFree(struct rbTree **pTree)
+/* rbTreeFree() - Frees space used by the red-black tree pointed to by t. */
+{
+struct rbTree *tree = *pTree;
+if (tree != NULL)
+    {
+    lmCleanup(&tree->lm);
+    freez(pTree);
+    }
+}
+
+void rbTreeFreeList(struct rbTree **pList)
+/* Free up a list of rbTrees. */
+{
+struct rbTree *tree, *next;
+for (tree = *pList; tree != NULL; tree = next)
+    {
+    next = tree->next;
+    rbTreeFree(&tree);
+    }
+}
+
+void *rbTreeAdd(struct rbTree *t, void *item)
+/* rbTreeAdd() - Inserts an item into the red-black tree pointed to by t,
+ * according the the value its key.  The key of an item in the red-black
+ * tree must be unique among items in the tree.  If an item with the same key
+ * already exists in the tree, a pointer to that item is returned.  Otherwise,
+ * NULL is returned, indicating insertion was successful.
+ */
+{
+struct rbTreeNode *x, *p, *q, *m, **attachX;
+int (* compare)(void *, void *);
+int cmpResult;
+rbTreeColor col;
+struct rbTreeNode **stack = NULL;
+int tos;
+
+tos = 0;    
+if((p = t->root) != NULL) 
+    {
+    compare = t->compare;
+    stack = t->stack;
+
+    /* Repeatedly explore either the left branch or the right branch
+     * depending on the value of the key, until an empty branch is chosen.
+     */
+    for(;;) 
+        {
+	stack[tos++] = p;
+	cmpResult = compare(item, p->item);
+	if(cmpResult < 0) 
+	    {
+	    p = p->left;
+	    if(!p) 
+	        {
+		p = stack[--tos];
+		attachX = &p->left;
+		break;
+		}
+	    }
+	else if(cmpResult > 0) 
+	    {
+	    p = p->right;
+	    if(!p) 
+	        {
+		p = stack[--tos];
+		attachX = &p->right;
+		break;
+		}
+	    }
+	else 
+	    {
+	    return p->item;
+	    }
+	}
+    col = rbTreeRed;
+    }
+else 
+    {
+    attachX = &t->root;
+    col = rbTreeBlack;
+    }
+
+/* Allocate new node and place it in tree. */
+if ((x = t->freeList) != NULL)
+    t->freeList = x->right;
+else
+    lmAllocVar(t->lm, x);
+x->left = x->right = NULL;
+x->item = item;
+x->color = col;
+*attachX = x;
+t->n++;
+
+/* Restructuring or recolouring will be needed if node x and its parent, p,
+ * are both red.
+ */
+if(tos > 0) 
+    {
+    while(p->color == rbTreeRed) 
+	{  /* Double red problem. */
+
+	/* Obtain a pointer to p's parent, m, and sibling, q. */
+	m = stack[--tos];
+	q = p == m->left ? m->right : m->left;
+	
+	/* Determine whether restructuring or recolouring is needed. */
+	if(!q || q->color == rbTreeBlack) 
+	    {
+	    /* Sibling is black.  ==>  Perform restructuring. */
+	    
+	    /* Restructure according to the left to right order, of nodes
+	     * m, p, and x.
+	     */
+	    m = restructure(t, tos, m, p, x);
+	    m->color = rbTreeBlack;
+	    m->left->color = m->right->color = rbTreeRed;
+
+	    /* Restructuring eliminates the double red problem. */
+	    break;
+	    }
+	/* else just need to flip color */
+	
+	/* Sibling is also red.  ==>  Perform recolouring. */
+	p->color = rbTreeBlack;
+	q->color = rbTreeBlack;
+
+	if(tos == 0) break;  /* The root node always remains black. */
+	    
+	m->color = rbTreeRed;
+
+	/* Continue, checking colouring higher up. */
+	x = m;
+	p = stack[--tos];
+	}
+    }
+
+return NULL;
+}
+
+
+void *rbTreeFind(struct rbTree *t, void *item)
+/* rbTreeFind() - Find an item in the red-black tree with the same key as the
+ * item pointed to by `item'.  Returns a pointer to the item found, or NULL
+ * if no item was found.
+ */
+{
+struct rbTreeNode *p, *nextP;
+int (*compare)(void *, void *) = t->compare;
+int cmpResult;
+    
+/* Repeatedly explore either the left or right branch, depending on the
+ * value of the key, until the correct item is found.  */
+for (p = t->root; p != NULL; p = nextP)
+    {
+    cmpResult = compare(item, p->item);
+    if(cmpResult < 0) 
+	nextP = p->left;
+    else if(cmpResult > 0) 
+	nextP = p->right;
+    else 
+	return p->item;
+    }
+return NULL;
+}
+
+
+void *rbTreeRemove(struct rbTree *t, void *item)
+/* rbTreeRemove() - Delete an item in the red-black tree with the same key as
+ * the item pointed to by `item'.  Returns a pointer to the deleted item,
+ * and NULL if no item was found.
+ */
+{
+struct rbTreeNode *p, *r, *x, *y, *z, *b, *newY;
+struct rbTreeNode *m;
+rbTreeColor removeCol;
+void *returnItem;
+int (* compare)(void *, void *);
+int cmpResult;
+struct rbTreeNode **stack;
+int i, tos;
+
+
+/* Attempt to locate the item to be deleted. */
+if((p = t->root)) 
+    {
+    compare = t->compare;
+    stack = t->stack;
+    tos = 0;
+    
+    for(;;) 
+	{
+	stack[tos++] = p;
+	cmpResult = compare(item, p->item);
+	if(cmpResult < 0) 
+	    p = p->left;
+	else if(cmpResult > 0) 
+	    p = p->right;
+	else 
+	    /* Item found. */
+	    break;
+	if(!p) return NULL;
+	}
+    }
+else 
+    return NULL;
+
+/* p points to the node to be deleted, and is currently on the top of the
+ * stack.
+ */
+if(!p->left) 
+    {
+    tos--;  /* Adjust tos to remove p. */
+    /* Right child replaces p. */
+    if(tos == 0) 
+	{
+	r = t->root = p->right;
+	x = y = NULL;
+	}
+    else 
+	{
+	x = stack[--tos];
+	if(p == x->left) 
+	    {
+	    r = x->left = p->right;
+	    y = x->right;
+	    }
+	else 
+	    {
+	    r = x->right = p->right;
+	    y = x->left;
+	    }
+	}
+    removeCol = p->color;
+    }
+else if(!p->right) 
+    {
+    tos--;  /* Adjust tos to remove p. */
+    /* Left child replaces p. */
+    if(tos == 0) 
+	{
+	r = t->root = p->left;
+	x = y = NULL;
+	}
+    else 
+	{
+	x = stack[--tos];
+	if(p == x->left) 
+	    {
+	    r = x->left = p->left;
+	    y = x->right;
+	    }
+	else 
+	    {
+	    r = x->right = p->left;
+	    y = x->left;
+	    }
+	}
+    removeCol = p->color;
+    }
+else 
+    {
+    /* Save p's stack position. */
+    i = tos-1;
+    
+    /* Minimum child, m, in the right subtree replaces p. */
+    m = p->right;
+    do 
+	{
+	stack[tos++] = m;
+	m = m->left;
+	} while(m);
+    m = stack[--tos];
+
+    /* Update either the left or right child pointers of p's parent. */
+    if(i == 0) 
+	{
+	t->root = m;
+	}
+    else 
+	{
+	x = stack[i-1];  /* p's parent. */
+	if(p == x->left) 
+	    {
+	    x->left = m;
+	    }
+	else 
+	    {
+	    x->right = m;
+	    }
+	}
+    
+    /* Update the tree part m is removed from, and assign m the child
+     * pointers of p (only if m is not the right child of p).
+     */
+    stack[i] = m;  /* Node m replaces node p on the stack. */
+    x = stack[--tos];
+    r = m->right;
+    if(tos != i) 
+	{  /* x is equal to the parent of m. */
+	y = x->right;
+	x->left = r;
+	m->right = p->right;
+	}
+    else 
+	{ /* m was the right child of p, and x is equal to m. */
+	y = p->left;
+	}
+    m->left = p->left;
+
+    /* We treat node m as the node which has been removed. */
+    removeCol = m->color;
+    m->color = p->color;
+    }
+
+/* Get return value and reuse the space used by node p. */
+returnItem = p->item;
+p->right = t->freeList;
+t->freeList = p;
+
+t->n--;
+
+/* The pointers x, y, and r point to nodes which may be involved in
+ * restructuring and recolouring.
+ *  x - the parent of the removed node.
+ *  y - the sibling of the removed node.
+ *  r - the node which replaced the removed node.
+ * From the above code, the next entry off the stack will be the parent of
+ * node x.
+ */
+
+/* The number of black nodes on paths to all external nodes (NULL child
+ * pointers) must remain the same for all paths.  Restructuring or
+ * recolouring of nodes may be necessary to enforce this.
+ */
+if(removeCol == rbTreeBlack) 
+    {
+    /* Removal of a black node requires some adjustment. */
+    
+    if(!r || r->color == rbTreeBlack) 
+	{
+	/* A black node replaced the deleted black node.  Note that
+	 * external nodes (NULL child pointers) are always black, so
+	 * if r is NULL it is treated as a black node.
+	 */
+
+	/* This causes a double-black problem, since node r would need to
+	 * be coloured double-black in order for the black color on
+	 * paths through r to remain the same as for other paths.
+	 */
+
+	/* If r is the root node, the double-black color is not necessary
+	 * to maintain the color balance.  Otherwise, some adjustment of
+	 * nearby nodes is needed in order to eliminate the double-black
+	 * problem.  NOTE:  x points to the parent of r.
+	 */
+	if(x) for(;;) 
+	    {
+
+	    /* There are three adjustment cases:
+	     *  1.  r's sibling, y, is black and has a red child, z.
+	     *  2.  r's sibling, y, is black and has two black children.
+	     *  3.  r's sibling, y, is red.
+	     */
+	    if(y->color == rbTreeBlack) 
+		{
+
+		/* Note the conditional evaluation for assigning z. */
+		if(((z = y->left) && z->color == rbTreeRed) ||
+		   ((z = y->right) && z->color == rbTreeRed)) 
+		       {		    
+		    /* Case 1:  perform a restructuring of nodes x, y, and
+		     * z.
+		     */
+		    
+		    b = restructure(t, tos, x, y, z);
+		    b->color = x->color;
+		    b->left->color = b->right->color = rbTreeBlack;
+		    
+		    break;
+		    }
+		else 
+		    {
+		    /* Case 2:  recolour node y red. */
+		    
+		    y->color = rbTreeRed;
+		    
+		    if(x->color == rbTreeRed) 
+			{
+			x->color = rbTreeBlack;
+			break;
+			}
+		    /* else */
+
+		    if(tos == 0) break;  /* Root level reached. */
+		    /* else */
+		    
+		    r = x;
+		    x = stack[--tos];  /* x <- parent of x. */
+		    y = x->left == r ? x->right : x->left;
+		    }
+		}
+	    else 
+		{
+		/* Case 3:  Restructure nodes x, y, and z, where:
+		 *  - If node y is the left child of x, then z is the left
+		 *    child of y.  Otherwise z is the right child of y.
+		 */
+		if(x->left == y) 
+		    {
+		    newY = y->right;
+		    z = y->left;
+		    }
+		else 
+		    {
+		    newY = y->left;
+		    z = y->right;
+		    }
+		
+		restructure(t, tos, x, y, z);
+		y->color = rbTreeBlack;
+		x->color = rbTreeRed;
+
+		/* Since x has moved down a place in the tree, and y is the
+		 * new the parent of x, the stack must be adjusted so that
+		 * the parent of x is correctly identified in the next call
+		 * to restructure().
+		 */
+		stack[tos++] = y;
+
+		/* After restructuring, node r has a black sibling, newY,
+		 * so either case 1 or case 2 applies.  If case 2 applies
+		 * the double-black problem does not reappear.
+		 */
+		y = newY;
+		
+		/* Note the conditional evaluation for assigning z. */
+		if(((z = y->left) && z->color == rbTreeRed) ||
+		   ((z = y->right) && z->color == rbTreeRed)) 
+		   {		    
+		    /* Case 1:  perform a restructuring of nodes x, y, and
+		     * z.
+		     */
+		    
+		    b = restructure(t, tos, x, y, z);
+		    b->color = rbTreeRed;  /* Since node x was red. */
+		    b->left->color = b->right->color = rbTreeBlack;
+		    }
+		else 
+		    {
+		    /* Case 2:  recolour node y red. */
+
+		    /* Note that node y is black and node x is red. */
+		    
+		    y->color = rbTreeRed;
+		    x->color = rbTreeBlack;
+		    }
+
+		break;
+		}
+	    }
+	}
+    else 
+	{
+	/* A red node replaced the deleted black node. */
+
+	/* In this case we can simply color the red node black. */
+	r->color = rbTreeBlack;
+	}
+    }
+return returnItem;
+}
+
+/* Some variables to help recursively dump tree. */
+static int dumpLevel;	/* Indentation level. */
+static FILE *dumpFile;  /* Output file */
+static void (*dumpIt)(void *item, FILE *f);  /* Item dumper. */
+
+static void rTreeDump(struct rbTreeNode *n)
+/* Recursively dump. */
+{
+if (n == NULL)
+    return;
+spaceOut(dumpFile, ++dumpLevel * 3);
+fprintf(dumpFile, "%c ", (n->color ==  rbTreeRed ? 'r' : 'b'));
+dumpIt(n->item, dumpFile);
+fprintf(dumpFile, "\n");
+rTreeDump(n->left);
+rTreeDump(n->right);
+--dumpLevel;
+}
+
+void rbTreeDump(struct rbTree *tree, FILE *f, 
+	void (*dumpItem)(void *item, FILE *f))
+/* Dump out rb tree to file, mostly for debugging. */
+{
+dumpFile = f;
+dumpLevel = 0;
+dumpIt = dumpItem;
+fprintf(f, "rbTreeDump\n");
+rTreeDump(tree->root);
+}
+
+
+
+/* Variables to help recursively traverse tree. */
+static void (*doIt)(void *item);
+static void *minIt, *maxIt;
+static int (*compareIt)(void *, void *);
+
+static void rTreeTraverseRange(struct rbTreeNode *n)
+/* Recursively traverse tree in range applying doIt. */
+{
+if (n != NULL)
+   {
+   int minCmp = compareIt(n->item, minIt);
+   int maxCmp = compareIt(n->item, maxIt);
+   if (minCmp >= 0)
+       rTreeTraverseRange(n->left);
+   if (minCmp >= 0 && maxCmp <= 0)
+       doIt(n->item);
+   if (maxCmp <= 0)
+       rTreeTraverseRange(n->right);
+   }
+}
+
+static void rTreeTraverse(struct rbTreeNode *n)
+/* Recursively traverse full tree applying doIt. */
+{
+if (n != NULL)
+    {
+    rTreeTraverse(n->left);
+    doIt(n->item);
+    rTreeTraverse(n->right);
+    }
+}
+
+
+void rbTreeTraverseRange(struct rbTree *tree, void *minItem, void *maxItem,
+	void (*doItem)(void *item))
+/* Apply doItem function to all items in tree such that
+ * minItem <= item <= maxItem */
+{
+doIt = doItem;
+minIt = minItem;
+maxIt = maxItem;
+compareIt = tree->compare;
+rTreeTraverseRange(tree->root);
+}
+
+void rbTreeTraverse(struct rbTree *tree, void (*doItem)(void *item))
+/* Apply doItem function to all items in tree */
+{
+doIt = doItem;
+rTreeTraverse(tree->root);
+}
+
+struct rTreeContext
+/* Context for traversing a tree when you want to be fully thread safe and reentrant. */
+    {
+    void *context;	/* Some context carried from user and passed to doIt. */
+    void (*doItem)(void *item, void *context);
+    };
+
+static void rTreeTraverseWithContext(struct rbTreeNode *n, struct rTreeContext *context)
+/* Traverse tree with a little context so don't need little static variables that
+ * prevent reentrancy of callback functions. */
+{
+if (n != NULL)
+    {
+    rTreeTraverseWithContext(n->left, context);
+    context->doItem(n->item, context->context);
+    rTreeTraverseWithContext(n->right, context);
+    }
+}
+
+void rbTreeTraverseWithContext(struct rbTree *tree, 
+	void (*doItem)(void *item, void *context), void *context)
+/* Traverse tree calling doItem on every item with context pointer passed through to doItem.
+ * This often avoids having to declare global or static variables for the doItem callback to use. */
+{
+struct rTreeContext ctx;
+ctx.context = context;
+ctx.doItem = doItem;
+rTreeTraverseWithContext(tree->root, &ctx);
+}
+
+struct slRef *itList;  /* List of items that rbTreeItemsInRange returns. */
+
+static void addRef(void *item)
+/* Add item it itList. */
+{
+refAdd(&itList, item);
+}
+
+struct slRef *rbTreeItemsInRange(struct rbTree *tree, void *minItem, void *maxItem)
+/* Return a sorted list of references to items in tree between range.
+ * slFreeList this list when done. */
+{
+itList = NULL;
+rbTreeTraverseRange(tree, minItem, maxItem, addRef);
+slReverse(&itList);
+return itList;
+}
+
+static void addRefWithContext(void *item, void *context)
+/* Add item it itList. */
+{
+struct slRef **pList = context;
+refAdd(pList, item);
+}
+
+
+struct slRef *rbTreeItems(struct rbTree *tree)
+/* Return sorted list of items.  slFreeList this when done.*/
+{
+struct slRef *list = NULL;
+rbTreeTraverseWithContext(tree, addRefWithContext, &list);
+slReverse(&list);
+return list;
+}
+
+int rbTreeCmpString(void *a, void *b)
+/* Set up rbTree so as to work on strings. */
+{
+return strcmp(a, b);
+}
+
+int rbTreeCmpWord(void *a, void *b)	
+/* Set up rbTree so as to work on case-insensitive strings. */
+{
+return differentWord(a,b);
+}
diff --git a/gbtools/src/blatSrc/lib/regexHelper.c b/gbtools/src/blatSrc/lib/regexHelper.c
new file mode 100644
index 0000000..04e8ab5
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/regexHelper.c
@@ -0,0 +1,93 @@
+/* regexHelper: easy wrappers on POSIX Extended Regular Expressions (man 7 regex, man 3 regex) */
+
+/* Copyright (C) 2012 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "regexHelper.h"
+#include "hash.h"
+
+const regex_t *regexCompile(const char *exp, const char *description, int compileFlags)
+/* Compile exp (or die with an informative-as-possible error message).
+ * Cache pre-compiled regex's internally (so don't free result after use). */
+{
+static struct hash *reHash = NULL;
+struct hashEl *hel = NULL;
+char key[512];
+safef(key, sizeof(key), "%d.%s", compileFlags, exp);
+
+if (reHash == NULL)
+    reHash = newHash(10);
+hel = hashLookup(reHash, key);
+if (hel != NULL)
+    return((regex_t *)hel->val);
+else
+    {
+    regex_t *compiledExp = NULL;
+    int errNum = 0;
+    AllocVar(compiledExp);
+    errNum = regcomp(compiledExp, exp, compileFlags);
+    if (errNum != 0)
+	{
+	char errBuf[512];
+	regerror(errNum, compiledExp, errBuf, sizeof(errBuf));
+	errAbort("%s \"%s\" got regular expression compilation error %d:\n%s\n",
+		 description, exp, errNum, errBuf);
+	}
+    hashAdd(reHash, key, compiledExp);
+    return(compiledExp);
+    }
+}
+
+static boolean regexMatchSubstrMaybeCase(const char *string, const char *exp,
+					 regmatch_t substrArr[], size_t substrArrSize,
+					 boolean isCaseInsensitive)
+/* Return TRUE if string matches regular expression exp;
+ * regexec fills in substrArr with substring offsets. */
+{
+if (string == NULL)
+    return FALSE;
+int compileFlags = REG_EXTENDED;
+char desc[256];
+safecpy(desc, sizeof(desc), "Regular expression");
+if (isCaseInsensitive)
+    {
+    compileFlags |= REG_ICASE;
+    safecat(desc, sizeof(desc), " (case insensitive)");
+    }
+if (substrArr == NULL)
+    compileFlags |= REG_NOSUB;
+else
+    safecat(desc, sizeof(desc), " with substrings");
+
+const regex_t *compiledExp = regexCompile(exp, desc, compileFlags);
+return(regexec(compiledExp, string, substrArrSize, substrArr, 0) == 0);
+}
+
+boolean regexMatch(const char *string, const char *exp)
+/* Return TRUE if string matches regular expression exp (case sensitive). */
+{
+return regexMatchSubstrMaybeCase(string, exp, NULL, 0, FALSE);
+}
+
+boolean regexMatchNoCase(const char *string, const char *exp)
+/* Return TRUE if string matches regular expression exp (case insensitive). */
+{
+return regexMatchSubstrMaybeCase(string, exp, NULL, 0, TRUE);
+}
+
+boolean regexMatchSubstr(const char *string, const char *exp,
+			 regmatch_t substrArr[], size_t substrArrSize)
+/* Return TRUE if string matches regular expression exp (case sensitive);
+ * regexec fills in substrArr with substring offsets. */
+{
+return regexMatchSubstrMaybeCase(string, exp, substrArr, substrArrSize, FALSE);
+}
+
+boolean regexMatchSubstrNoCase(const char *string, const char *exp,
+			       regmatch_t substrArr[], size_t substrArrSize)
+/* Return TRUE if string matches regular expression exp (case insensitive);
+ * regexec fills in substrArr with substring offsets. */
+{
+return regexMatchSubstrMaybeCase(string, exp, substrArr, substrArrSize, TRUE);
+}
+
diff --git a/gbtools/src/blatSrc/lib/repMask.c b/gbtools/src/blatSrc/lib/repMask.c
new file mode 100644
index 0000000..8fab09b
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/repMask.c
@@ -0,0 +1,173 @@
+/* repMask.c was originally generated by the autoSql program, which also 
+ * generated repMask.h and repMask.sql.  This module links the database and the RAM 
+ * representation of objects. */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "sqlList.h"
+#include "sqlNum.h"
+#include "repMask.h"
+
+
+void repeatMaskOutStaticLoad(char **row, struct repeatMaskOut *ret)
+/* Load a row from repeatMaskOut table into ret.  The contents of ret will
+ * be replaced at the next call to this function. */
+{
+int i;
+
+ret->score = sqlUnsigned(row[0]);
+ret->percDiv = atof(row[1]);
+ret->percDel = atof(row[2]);
+ret->percInc = atof(row[3]);
+ret->qName = row[4];
+ret->qStart = sqlSigned(row[5]);
+ret->qEnd = sqlSigned(row[6]);
+ret->qLeft = row[7];
+strcpy(ret->strand, row[8]);
+ret->rName = row[9];
+ret->rFamily = row[10];
+ret->rStart = row[11];	/* sometimes this number is enclosed in (parens) */
+/* This row[12] is interpreted as an Unsigned - but I can find no good reason
+ * for it to be an error exit when there is a negative number here.
+ * The only programs that use this routine are blat, psLayout and
+ * maskOutFa and none of them even use this number for anything.
+ * For data base loading of the rmsk tracks, these .out files are parsed
+ * by hgLoadOut and none of this business is referenced.
+ */
+i = sqlSigned(row[12]);
+if( i < 0 ) {
+    warn("WARNING: negative rEnd: %d %s:%d-%d %s", i, ret->qName, ret->qStart, ret->qEnd, ret->rName);
+    ret->rEnd = 0;
+} else {
+ret->rEnd = sqlUnsigned(row[12]);
+}
+ret->rLeft = row[13];
+}
+
+struct repeatMaskOut *repeatMaskOutLoad(char **row)
+/* Load a repeatMaskOut from row fetched with select * from repeatMaskOut
+ * from database.  Dispose of this with repeatMaskOutFree(). */
+{
+struct repeatMaskOut *ret;
+
+AllocVar(ret);
+ret->score = sqlUnsigned(row[0]);
+ret->percDiv = atof(row[1]);
+ret->percDel = atof(row[2]);
+ret->percInc = atof(row[3]);
+ret->qName = cloneString(row[4]);
+ret->qStart = sqlSigned(row[5]);
+ret->qEnd = sqlSigned(row[6]);
+ret->qLeft = cloneString(row[7]);
+strcpy(ret->strand, row[8]);
+ret->rName = cloneString(row[9]);
+ret->rFamily = cloneString(row[10]);
+ret->rStart = cloneString(row[11]);
+ret->rEnd = sqlUnsigned(row[12]);
+ret->rLeft = cloneString(row[13]);
+return ret;
+}
+
+struct repeatMaskOut *repeatMaskOutCommaIn(char **pS)
+/* Create a repeatMaskOut out of a comma separated string. */
+{
+struct repeatMaskOut *ret;
+char *s = *pS;
+
+AllocVar(ret);
+ret->score = sqlUnsignedComma(&s);
+ret->percDiv = sqlSignedComma(&s);
+ret->percDel = sqlSignedComma(&s);
+ret->percInc = sqlSignedComma(&s);
+ret->qName = sqlStringComma(&s);
+ret->qStart = sqlSignedComma(&s);
+ret->qEnd = sqlSignedComma(&s);
+ret->qLeft = sqlStringComma(&s);
+sqlFixedStringComma(&s, ret->strand, sizeof(ret->strand));
+ret->rName = sqlStringComma(&s);
+ret->rFamily = sqlStringComma(&s);
+ret->rStart = sqlStringComma(&s);
+ret->rEnd = sqlUnsignedComma(&s);
+ret->rLeft = sqlStringComma(&s);
+*pS = s;
+return ret;
+}
+
+void repeatMaskOutFree(struct repeatMaskOut **pEl)
+/* Free a single dynamically allocated repeatMaskOut such as created
+ * with repeatMaskOutLoad(). */
+{
+struct repeatMaskOut *el;
+
+if ((el = *pEl) == NULL) return;
+freeMem(el->qName);
+freeMem(el->qLeft);
+freeMem(el->rName);
+freeMem(el->rFamily);
+freeMem(el->rStart);
+freeMem(el->rLeft);
+freez(pEl);
+}
+
+void repeatMaskOutFreeList(struct repeatMaskOut **pList)
+/* Free a list of dynamically allocated repeatMaskOut's */
+{
+struct repeatMaskOut *el, *next;
+
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    repeatMaskOutFree(&el);
+    }
+*pList = NULL;
+}
+
+void repeatMaskOutOutput(struct repeatMaskOut *el, FILE *f, char sep, char lastSep) 
+/* Print out repeatMaskOut.  Separate fields with sep. Follow last field with lastSep. */
+{
+fprintf(f, "%u", el->score);
+fputc(sep,f);
+fprintf(f, "%f", el->percDiv);
+fputc(sep,f);
+fprintf(f, "%f", el->percDel);
+fputc(sep,f);
+fprintf(f, "%f", el->percInc);
+fputc(sep,f);
+if (sep == ',') fputc('"',f);
+fprintf(f, "%s", el->qName);
+if (sep == ',') fputc('"',f);
+fputc(sep,f);
+fprintf(f, "%d", el->qStart);
+fputc(sep,f);
+fprintf(f, "%d", el->qEnd);
+fputc(sep,f);
+if (sep == ',') fputc('"',f);
+fprintf(f, "%s", el->qLeft);
+if (sep == ',') fputc('"',f);
+fputc(sep,f);
+if (sep == ',') fputc('"',f);
+fprintf(f, "%s", el->strand);
+if (sep == ',') fputc('"',f);
+fputc(sep,f);
+if (sep == ',') fputc('"',f);
+fprintf(f, "%s", el->rName);
+if (sep == ',') fputc('"',f);
+fputc(sep,f);
+if (sep == ',') fputc('"',f);
+fprintf(f, "%s", el->rFamily);
+if (sep == ',') fputc('"',f);
+fputc(sep,f);
+if (sep == ',') fputc('"',f);
+fprintf(f, "%s", el->rStart);
+if (sep == ',') fputc('"',f);
+fputc(sep,f);
+fprintf(f, "%u", el->rEnd);
+fputc(sep,f);
+if (sep == ',') fputc('"',f);
+fprintf(f, "%s", el->rLeft);
+if (sep == ',') fputc('"',f);
+fputc(lastSep,f);
+}
+
diff --git a/gbtools/src/blatSrc/lib/rle.c b/gbtools/src/blatSrc/lib/rle.c
new file mode 100644
index 0000000..58ff09b
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/rle.c
@@ -0,0 +1,102 @@
+/* rle - byte oriented run length encoding. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "rle.h"
+
+
+static int countSameAsStart(signed char *s, int max)
+/* Count number of signed chars that are the same as first. */
+{
+signed char v = *s;
+int i;
+if (max > 127)
+    max = 127;
+for (i=1; i<max; ++i)
+   if (s[i] != v)
+       break;
+return i;
+}
+
+int rleCompress(void *vIn, int inSize, signed char *out)
+/* Compress in to out.  Out should be at least inSize * 1.5. 
+ * Returns compressed size. */
+{
+signed char *in = vIn;
+signed char *endIn = in + inSize;
+signed char *s = in, *d = out;
+signed char *uncStart = in;
+int uncSize, sameCount;
+int sizeLeft;
+
+while ((sizeLeft = (endIn - s)) != 0)
+    {
+    sameCount = countSameAsStart(s, sizeLeft);
+    uncSize = s - uncStart;
+    if (sameCount >= 3)
+        {
+	int uncSize = s - uncStart;
+	while (uncSize > 0)
+	    {
+	    int size = uncSize;
+	    if (size > 127) size = 127;
+	    *d++ = size;
+	    memcpy(d, uncStart, size);
+	    d += size;
+	    uncSize -= size;
+	    uncStart += size;
+	    }
+	*d++ = -sameCount;
+	*d++ = *s;
+	s += sameCount;
+	uncStart = s;
+	}
+    else
+        s += sameCount;
+    }  
+uncSize = s - uncStart;
+while (uncSize > 0)
+    {
+    int size = uncSize;
+    if (size > 127) size = 127;
+    *d++ = size;
+    memcpy(d, uncStart, size);
+    d += size;
+    uncSize -= size;
+    uncStart += size;
+    }
+return d - out;
+}
+
+void rleUncompress(signed char *in, int inSize, void *vOut, int outSize)
+/* Uncompress in to out. */
+{
+int count;
+signed char *out = vOut;
+signed char *endOut = out + outSize;
+#ifndef NDEBUG
+signed char *endIn = in + inSize;
+#endif
+
+while (out < endOut)
+     {
+     count = *in++;
+     if (count > 0)
+          {
+	  memcpy(out, in, count);
+	  in += count;
+	  out += count;
+	  }
+    else
+          {
+	  count = -count;
+	  memset(out, *in++, count);
+	  out += count;
+	  }
+	  
+    }
+assert(out == endOut && in == endIn);
+}
+
diff --git a/gbtools/src/blatSrc/lib/rnautil.c b/gbtools/src/blatSrc/lib/rnautil.c
new file mode 100644
index 0000000..06795fb
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/rnautil.c
@@ -0,0 +1,223 @@
+/* rnautil.c - functions for dealing with RNA and RNA secondary structure.  */
+
+/* Copyright (C) 2007 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+#include "rnautil.h"
+#include "common.h"
+
+const char *RNA_PAIRS[] = {"AU","UA","GC","CG","GU","UG",0};
+/* Null terminated array of rna pairs */
+
+void dna2rna(char *s)
+/* Replace 't' with 'u' and 'T' with 'U' in s. */
+{
+for (;*s;s++)
+    {
+    if (*s == 't')
+	*s = 'u';
+    if (*s == 'T')
+	*s = 'U';
+    }
+}
+
+bool rnaPair(char a, char b)
+/* Returns TRUE if a and b can pair, and false otherwise */
+{
+char pair[] = {a,b,'\0'};
+int i;
+dna2rna(pair);
+touppers(pair);
+
+for (i=0;RNA_PAIRS[i] != 0; i++)
+    if (pair[0] == RNA_PAIRS[i][0] && pair[1] == RNA_PAIRS[i][1] )
+	return TRUE;
+return FALSE;
+}
+
+void reverseFold(char *s)
+/* Reverse the order of the parenthesis defining an RNA secondary structure annotation. */
+{
+reverseBytes(s, strlen(s));
+for (;*s;s++)
+    {
+    if (*s == '(')
+	*s = ')';
+    else if (*s == ')')
+	*s = '(';
+    }
+}
+
+void fold2pairingList(char *fold, int len, int **p2pairList)
+/* take a parenthesis string, allocate and return an array of pairing
+   positions: pairList[i] = j <=> i pair with j and pairList[i] = -1
+   <=> i does not pair.*/
+{
+int i,j, stackSize = 0;
+int *pairList      = needMem(len * sizeof(int));
+*p2pairList        = pairList;
+
+/* initialize array */
+for (i = 0; i < len; i++)
+    pairList[i] = -1;
+
+/* fill out pairList */
+for (i = 0; i < len; i++) 
+    {
+    if (fold[i] == '(')
+	{
+	stackSize = 1;
+	for (j = i+1; j < len; j++) 
+	    {
+	    if (fold[j] == '(')
+		stackSize += 1;
+	    else if (fold[j] == ')')
+		stackSize -= 1;
+	    if (stackSize == 0)  /* found pair partner */
+		{
+		pairList[i] = j;
+		pairList[j] = i;
+		break;
+		}
+	    }
+	}
+    }
+}
+
+void mkPairPartnerSymbols(int *pairList, char *pairSymbols, int size)
+{
+/* Make a symbol string indicating pairing partner */
+int i;
+char symbols[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*=+{}|[]\\;'"; /* length 80 */
+int  symbolMax = strlen(symbols);
+int index;
+for (i = 0, index = 0; i < size; i++)
+    {
+    pairSymbols[i] = ' ';
+    if (pairList[i] >= 0)
+	{
+	if (pairList[i] < i)
+	    {
+            --index;
+	    if (index<0)
+		index = symbolMax-1;
+	    }
+	pairSymbols[i] = symbols[index];
+	if (pairList[i] > i)
+	    {
+            ++index;
+	    if (index>=symbolMax)
+		index=0;
+	    }
+	}
+    }
+}
+
+char * projectString(char *s, char *ref, char refChar, char insertChar)
+/* Insert 'insertChar' in 's' at every position 'ref' has 'refChar'. */
+{
+int i,j,size = strlen(ref);
+char *copy = (char *) needMem(size + 1);
+
+if (strlen(s) != strlen(ref) - countChars(ref, refChar))
+  errAbort("ERROR from rnautil::projectString: Input string 's' has wrong length.\n"); 
+
+for (i = 0, j = 0; i < size; i++)
+    {
+    if (ref[i] == refChar)
+	copy[i] = insertChar;
+    else
+	{	
+	copy[i] = s[j];
+	j++;
+	}
+    }
+return copy;
+}
+
+char *gapAdjustFold(char *s, char *ref)
+/* Insert space in s when there is a gap ('-') in ref. */
+{
+return projectString(s, ref, '-', ' ');
+}
+
+
+int *projectIntArray(int *in, char *ref, char refChar, int insertInt)
+/* Insert 'insertChar' in 's' at every positin 'ref' has 'refChar'. */
+{
+int i,j,size = strlen(ref);
+int   *copy = (int *) needMem(size *sizeof(int) );
+
+for (i = 0, j = 0; i < size; i++)
+    {
+    if (ref[i] == refChar)
+	copy[i] = insertInt;
+    else
+	{	
+	copy[i] = in[j];
+	j++;
+	}
+    }
+return copy;
+}
+
+int * gapIntArrayAdjust(int *in, char *ref)
+/* Insert space in s when there is a gap ('-') in ref. */
+{
+return projectIntArray(in, ref, '-', 0);
+}
+
+void markCompensatoryMutations(char *s, char *ref, int *pairList, int *markList)
+/* Compares s to ref and pairList and sets values in markList
+ * according to pairing properties. The value of markList[i] specifies
+ * the pairing property of the i'th position. The following values are
+ * used: 
+ * 0: not pairing, no substitution (default) 
+ * 1: not pairing, single substitution
+ * 2: pairing, no substitutions 
+ * 3: pairing, single substitution (one of: CG<->TG, GC<->GT, TA<->TG, AT<->GT)
+ * 4: pairing, double substitution (i.e. a compensatory change)
+ * 5: annotated as pairing but dinucleotide cannot pair, single substitution
+ * 6: annotated as pairing but dinucleotide cannot pair, doubble substitution
+ * 7: annotated as pairing but dinucleotide cannot pair, involves indel ('-' substitution)
+ */
+{
+int i, size = strlen(s);
+for (i = 0; i < size; i++)
+    {
+    if (pairList[i] == -1)
+	if (toupper(s[i]) != toupper(ref[i]) && s[i] != '.' && s[i] != '-' && ref[i] != '-')
+	    markList[i] = 1;
+	else
+	    markList[i] = 0;
+    else
+	{
+	if (s[i] == '.' || s[pairList[i]] == '.') /* treat missing data as possible pair partner */
+	    markList[i] = 2;
+	else if (!rnaPair(s[i], s[pairList[i]]))
+	  if (s[i] == '-' || s[pairList[i]] == '-')
+	    markList[i] = 7;
+	  else if (toupper( s[i] ) != toupper( ref[i] ) && toupper( s[pairList[i]] ) != toupper( ref[pairList[i]] ) )
+	    markList[i] = 6;
+	  else
+	    markList[i] = 5;
+	else if (toupper( s[i] ) != toupper( ref[i] ) && toupper( s[pairList[i]] ) != toupper( ref[pairList[i]] ) )
+	    markList[i] = 4;
+	else if (toupper( s[i] ) != toupper( ref[i] ) || toupper( s[pairList[i]] ) != toupper( ref[pairList[i]] ) )
+	    markList[i] = 3;
+	else
+	    markList[i] = 2;
+	}
+    }
+}
+
+int assignBin(double val, double minVal, double maxVal, int binCount)
+/* Divide range given by minVal and maxVal into binCount intervals
+   (bins), and return index of the bin val falls into. */
+{
+double range = maxVal - minVal;
+int maxBin   = binCount - 1;
+int level    = (int) ( (val-minVal)*maxBin/range);
+if (level <= 0) level = 0;
+if (level > maxBin) level = maxBin;
+return level;
+}
diff --git a/gbtools/src/blatSrc/lib/rqlEval.c b/gbtools/src/blatSrc/lib/rqlEval.c
new file mode 100644
index 0000000..ca81223
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/rqlEval.c
@@ -0,0 +1,335 @@
+/* rqlEval - evaluate tree returned by rqlParse given a record and function to lookup fields
+ * in the record. . */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "linefile.h"
+#include "hash.h"
+#include "dystring.h"
+#include "localmem.h"
+#include "tokenizer.h"
+#include "sqlNum.h"
+#include "rql.h"
+
+
+static struct rqlEval rqlLocalEval(struct rqlParse *p, void *record, RqlEvalLookup lookup, 
+	struct lm *lm);
+/* Evaluate self on parse tree, allocating memory if needed from lm. */
+
+struct rqlEval rqlEvalCoerceToBoolean(struct rqlEval r)
+/* Return TRUE if it's a nonempty string or a non-zero number. */
+{
+switch (r.type)
+    {
+    case rqlTypeBoolean:
+	break;	/* It's already done. */
+    case rqlTypeString:
+        r.val.b = (r.val.s != NULL && r.val.s[0] != 0);
+	break;
+    case rqlTypeInt:
+        r.val.b = (r.val.i != 0);
+	break;
+    case rqlTypeDouble:
+        r.val.b = (r.val.x != 0.0);
+	break;
+    default:
+	internalErr();
+	r.val.b = FALSE;
+	break;
+    }
+r.type = rqlTypeBoolean;
+return r;
+}
+
+static struct rqlEval rqlEvalEq(struct rqlParse *p, 
+	void *record, RqlEvalLookup lookup, struct lm *lm)
+/* Return true if two children are equal regardless of children type
+ * (which are just gauranteed to be the same). */
+{
+struct rqlParse *lp = p->children;
+struct rqlParse *rp = lp->next;
+struct rqlEval lv = rqlLocalEval(lp, record, lookup, lm);
+struct rqlEval rv = rqlLocalEval(rp, record, lookup, lm);
+struct rqlEval res;
+res.type = rqlTypeBoolean;
+assert(lv.type == rv.type);
+switch (lv.type)
+    {
+    case rqlTypeBoolean:
+        res.val.b = (lv.val.b == rv.val.b);
+	break;
+    case rqlTypeString:
+	res.val.b = sameString(lv.val.s, rv.val.s);
+	break;
+    case rqlTypeInt:
+	res.val.b = (lv.val.i == rv.val.i);
+	break;
+    case rqlTypeDouble:
+	res.val.b = (lv.val.x == rv.val.x);
+	break;
+    default:
+	internalErr();
+	res.val.b = FALSE;
+	break;
+    }
+return res;
+}
+
+static struct rqlEval rqlEvalLt(struct rqlParse *p, void *record, RqlEvalLookup lookup,
+	struct lm *lm)
+/* Return true if r < l . */
+{
+struct rqlParse *lp = p->children;
+struct rqlParse *rp = lp->next;
+struct rqlEval lv = rqlLocalEval(lp, record, lookup, lm);
+struct rqlEval rv = rqlLocalEval(rp, record, lookup, lm);
+struct rqlEval res;
+res.type = rqlTypeBoolean;
+switch (lv.type)
+    {
+    case rqlTypeBoolean:
+        res.val.b = (lv.val.b < rv.val.b);
+	break;
+    case rqlTypeString:
+	res.val.b = strcmp(lv.val.s, rv.val.s) < 0;
+	break;
+    case rqlTypeInt:
+	res.val.b = (lv.val.i < rv.val.i);
+	break;
+    case rqlTypeDouble:
+	res.val.b = (lv.val.x < rv.val.x);
+	break;
+    default:
+	internalErr();
+	res.val.b = FALSE;
+	break;
+    }
+return res;
+}
+
+static struct rqlEval rqlEvalGt(struct rqlParse *p, void *record, RqlEvalLookup lookup,
+	struct lm *lm)
+/* Return true if r > l . */
+{
+struct rqlParse *lp = p->children;
+struct rqlParse *rp = lp->next;
+struct rqlEval lv = rqlLocalEval(lp, record, lookup, lm);
+struct rqlEval rv = rqlLocalEval(rp, record, lookup, lm);
+struct rqlEval res;
+res.type = rqlTypeBoolean;
+switch (lv.type)
+    {
+    case rqlTypeBoolean:
+        res.val.b = (lv.val.b > rv.val.b);
+	break;
+    case rqlTypeString:
+	res.val.b = strcmp(lv.val.s, rv.val.s) > 0;
+	break;
+    case rqlTypeInt:
+	res.val.b = (lv.val.i > rv.val.i);
+	break;
+    case rqlTypeDouble:
+	res.val.b = (lv.val.x > rv.val.x);
+	break;
+    default:
+	internalErr();
+	res.val.b = FALSE;
+	break;
+    }
+return res;
+}
+
+static struct rqlEval rqlEvalLike(struct rqlParse *p, void *record, RqlEvalLookup lookup,
+	struct lm *lm)
+/* Return true if r like l . */
+{
+struct rqlParse *lp = p->children;
+struct rqlParse *rp = lp->next;
+struct rqlEval lv = rqlLocalEval(lp, record, lookup, lm);
+struct rqlEval rv = rqlLocalEval(rp, record, lookup, lm);
+struct rqlEval res;
+res.type = rqlTypeBoolean;
+assert(rv.type == rqlTypeString);
+assert(rv.type == lv.type);
+res.val.b = sqlMatchLike(rv.val.s, lv.val.s);
+return res;
+}
+
+static struct rqlEval rqlEvalArrayIx(struct rqlParse *p, void *record, RqlEvalLookup lookup,
+	struct lm *lm)
+/* Handle parse tree generated by an indexed array. */
+{
+struct rqlParse *array = p->children;
+struct rqlParse *index = array->next;
+struct rqlEval arrayVal = rqlLocalEval(array, record, lookup, lm);
+struct rqlEval indexVal = rqlLocalEval(index, record, lookup, lm);
+struct rqlEval res;
+res.type = rqlTypeString;
+res.val.s = emptyForNull(lmCloneSomeWord(lm, arrayVal.val.s, indexVal.val.i));
+return res;
+}
+
+static struct rqlEval rqlLocalEval(struct rqlParse *p, void *record, RqlEvalLookup lookup, 
+	struct lm *lm)
+/* Evaluate self on parse tree, allocating memory if needed from lm. */
+{
+struct rqlEval res;
+switch (p->op)
+    {
+    case rqlOpLiteral:
+	res.val = p->val;
+	res.type = p->type;
+	break;
+    case rqlOpSymbol:
+	res.type = rqlTypeString;
+	char *s = lookup(record, p->val.s);
+	if (s == NULL)
+	    res.val.s = "";
+	else
+	    res.val.s = s;
+	break;
+    case rqlOpEq:
+	res = rqlEvalEq(p, record, lookup, lm);
+	break;
+    case rqlOpNe:
+	res = rqlEvalEq(p, record, lookup, lm);
+	res.val.b = !res.val.b;
+	break;
+
+    /* Inequalities. */
+    case rqlOpLt:
+        res = rqlEvalLt(p, record, lookup, lm);
+	break;
+    case rqlOpGt:
+        res = rqlEvalGt(p, record, lookup, lm);
+	break;
+    case rqlOpLe:
+        res = rqlEvalGt(p, record, lookup, lm);
+	res.val.b = !res.val.b;
+	break;
+    case rqlOpGe:
+        res = rqlEvalLt(p, record, lookup, lm);
+	res.val.b = !res.val.b;
+	break;
+    case rqlOpLike:
+        res = rqlEvalLike(p,record, lookup, lm);
+	break;
+
+    /* Logical ops. */
+    case rqlOpAnd:
+	{
+        res.type = rqlTypeBoolean;
+	res.val.b = TRUE;
+	struct rqlParse *c;
+	for (c = p->children; c != NULL; c= c->next)
+	    {
+	    struct rqlEval e = rqlLocalEval(c, record, lookup, lm);
+	    if (!e.val.b)
+		{
+	        res.val.b = FALSE;
+		break;
+		}
+	    }
+	break;
+	}
+    case rqlOpOr:
+	{
+        res.type = rqlTypeBoolean;
+	res.val.b = FALSE;
+	struct rqlParse *c;
+	for (c = p->children; c != NULL; c= c->next)
+	    {
+	    struct rqlEval e = rqlLocalEval(c, record, lookup, lm);
+	    if (e.val.b)
+		{
+	        res.val.b = TRUE;
+		break;
+		}
+	    }
+	break;
+	}
+
+    case rqlOpNot:
+        res = rqlLocalEval(p->children, record, lookup, lm);
+	res.val.b = !res.val.b;
+	break;
+
+    /* Type casts. */
+    case rqlOpStringToBoolean:
+	res = rqlLocalEval(p->children, record, lookup, lm);
+	res.type = rqlTypeBoolean;
+	res.val.b = (res.val.s[0] != 0);
+	break;
+    case rqlOpIntToBoolean:
+        res = rqlLocalEval(p->children, record, lookup, lm);
+	res.type = rqlTypeBoolean;
+	res.val.b = (res.val.i != 0);
+	break;
+    case rqlOpDoubleToBoolean:
+        res = rqlLocalEval(p->children, record, lookup, lm);
+	res.type = rqlTypeBoolean;
+	res.val.b = (res.val.x != 0.0);
+	break;
+    case rqlOpStringToInt:
+	res = rqlLocalEval(p->children, record, lookup, lm);
+	res.type = rqlTypeInt;
+	res.val.i = atoi(res.val.s);
+	break;
+    case rqlOpDoubleToInt:
+	res = rqlLocalEval(p->children, record, lookup, lm);
+	res.type = rqlTypeInt;
+	res.val.i = res.val.x;
+	break;
+
+    case rqlOpStringToDouble:
+	res = rqlLocalEval(p->children, record, lookup, lm);
+	res.type = rqlTypeDouble;
+	res.val.x = atof(res.val.s);
+	break;
+    case rqlOpBooleanToInt:
+	res = rqlLocalEval(p->children, record, lookup, lm);
+	res.type = rqlTypeInt;
+	res.val.i = res.val.b;
+	break;
+    case rqlOpBooleanToDouble:
+	res = rqlLocalEval(p->children, record, lookup, lm);
+	res.type = rqlTypeDouble;
+	res.val.x = res.val.b;
+	break;
+    case rqlOpIntToDouble:
+	res = rqlLocalEval(p->children, record, lookup, lm);
+	res.type = rqlTypeDouble;
+	res.val.x = res.val.b;
+	break;
+
+    /* Arithmetical negation. */
+    case rqlOpUnaryMinusInt:
+        res = rqlLocalEval(p->children, record, lookup, lm);
+	res.val.i = -res.val.i;
+	break;
+    case rqlOpUnaryMinusDouble:
+        res = rqlLocalEval(p->children, record, lookup, lm);
+	res.val.x = -res.val.x;
+	break;
+
+    case rqlOpArrayIx:
+       res = rqlEvalArrayIx(p, record, lookup, lm);
+       break;
+
+    default:
+        errAbort("Unknown op %s\n", rqlOpToString(p->op));
+	res.type = rqlTypeInt;	// Keep compiler from complaining.
+	res.val.i = 0;	// Keep compiler from complaining.
+	break;
+    }
+return res;
+}
+
+struct rqlEval rqlEvalOnRecord(struct rqlParse *p, void *record, RqlEvalLookup lookup, 
+	struct lm *lm)
+/* Evaluate parse tree on record, using lm for memory for string operations. */
+{
+return rqlLocalEval(p, record, lookup, lm);
+}
diff --git a/gbtools/src/blatSrc/lib/rqlParse.c b/gbtools/src/blatSrc/lib/rqlParse.c
new file mode 100644
index 0000000..d91b30f
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/rqlParse.c
@@ -0,0 +1,767 @@
+/* rqlParse - parse restricted sql-like query language.  Produce rqlParse tree.  See rqlEval.c
+ * for the rqlParse interpreter. */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "linefile.h"
+#include "hash.h"
+#include "dystring.h"
+#include "tokenizer.h"
+#include "sqlNum.h"
+#include "rql.h"
+
+
+char *rqlOpToString(enum rqlOp op)
+/* Return string representation of parse op. */
+{
+switch (op)
+    {
+    case rqlOpLiteral:
+	return "rqlOpLiteral";
+    case rqlOpSymbol:
+	return "rqlOpSymbol";
+    
+    case rqlOpStringToBoolean:
+        return "rqlOpStringToBoolean";
+    case rqlOpIntToBoolean:
+        return "rqlOpIntToBoolean";
+    case rqlOpDoubleToBoolean:
+        return "rqlOpDoubleToBoolean";
+    case rqlOpStringToInt:
+        return "rqlOpStringToInt";
+    case rqlOpDoubleToInt:
+        return "rqlOpDoubleToInt";
+    case rqlOpBooleanToInt:
+        return "rqlOpBooleanToInt";
+    case rqlOpStringToDouble:
+        return "rqlOpStringToDouble";
+    case rqlOpBooleanToDouble:
+        return "rqlOpBooleanToDouble";
+    case rqlOpIntToDouble:
+        return "rqlOpIntToDouble";
+
+    case rqlOpEq:
+	return "rqlOpEq";
+    case rqlOpNe:
+	return "rqlOpNe";
+    case rqlOpGt:
+        return "rqlOpGt";
+    case rqlOpLt:
+        return "rqlOpLt";
+    case rqlOpGe:
+        return "rqlOpGe";
+    case rqlOpLe:
+        return "rqlOpLe";
+    case rqlOpLike:
+	return "rqlOpLike";
+
+    case rqlOpAnd:
+	return "rqlOpAnd";
+    case rqlOpOr:
+	return "rqlOpOr";
+    case rqlOpNot:
+        return "rqlOpNot";
+
+    case rqlOpUnaryMinusInt:
+        return "rqlOpUnaryMinusInt";
+    case rqlOpUnaryMinusDouble:
+        return "rqlOpUnaryMinusDouble";
+
+    case rqlOpArrayIx:
+        return "rqlOpArrayIx";
+
+    default:
+	return "rqlOpUnknown";
+    }
+}
+
+void rqlValDump(union rqlVal val, enum rqlType type, FILE *f)
+/* Dump out value to file. */
+{
+switch (type)
+    {
+    case rqlTypeBoolean:
+        fprintf(f, "%s", (val.b ? "true" : "false") );
+	break;
+    case rqlTypeString:
+        fprintf(f, "%s", val.s);
+	break;
+    case rqlTypeInt:
+        fprintf(f, "%d", val.i);
+	break;
+    case rqlTypeDouble:
+        fprintf(f, "%f", val.x);
+	break;
+    }
+}
+
+void rqlParseDump(struct rqlParse *p, int depth, FILE *f)
+/* Dump out rqlParse tree and children. */
+{
+spaceOut(f, 3*depth);
+fprintf(f, "%s ", rqlOpToString(p->op));
+rqlValDump(p->val, p->type,  f);
+fprintf(f, "\n");
+struct rqlParse *child;
+for (child = p->children; child != NULL; child= child->next)
+    rqlParseDump(child, depth+1, f);
+}
+
+static void expectingGot(struct tokenizer *tkz, char *expecting, char *got)
+/* Print out error message about unexpected input. */
+{
+errAbort("Expecting %s, got %s, line %d of %s", expecting, got, tkz->lf->lineIx,
+	tkz->lf->fileName);
+}
+
+static void skipOverRequired(struct tokenizer *tkz, char *expecting)
+/* Make sure that next token is tok, and skip over it. */
+{
+tokenizerMustHaveNext(tkz);
+if (!sameString(tkz->string, expecting))
+    expectingGot(tkz, expecting, tkz->string);
+}
+
+
+struct rqlParse *rqlParseExpression(struct tokenizer *tkz);
+/* Parse out a clause, usually a where clause. */
+
+static struct rqlParse *rqlParseAtom(struct tokenizer *tkz)
+/* Return low level (symbol or literal) */
+{
+char *tok = tokenizerMustHaveNext(tkz);
+struct rqlParse *p;
+AllocVar(p);
+char c = tok[0];
+if (c == '\'' || c == '"')
+    {
+    p->op = rqlOpLiteral;
+    p->type = rqlTypeString;
+    int len = strlen(tok+1);
+    p->val.s = cloneStringZ(tok+1, len-1);
+    }
+else if (isalpha(c) || c == '_')
+    {
+    p->op = rqlOpSymbol;
+    p->type = rqlTypeString;	/* String until promoted at least. */
+    p->val.s = cloneString(tok);
+    }
+else if (isdigit(c))
+    {
+    p->op = rqlOpLiteral;
+    p->type = rqlTypeInt;
+    p->val.i = sqlUnsigned(tok);
+    if ((tok = tokenizerNext(tkz)) != NULL)
+	{
+	if (tok[0] == '.')
+	    {
+	    char buf[32];
+	    tok = tokenizerMustHaveNext(tkz);
+	    safef(buf, sizeof(buf), "%d.%s", p->val.i, tok);
+	    p->type = rqlTypeDouble;
+	    p->val.x = sqlDouble(buf);
+	    }
+	else
+	    tokenizerReuse(tkz);
+	}
+    }
+else if (c == '(')
+    {
+    p = rqlParseExpression(tkz);
+    skipOverRequired(tkz, ")");
+    }
+else
+    {
+    errAbort("Unexpected %s line %d of %s", tok, tkz->lf->lineIx, tkz->lf->fileName);
+    }
+return p;
+}
+
+static enum rqlType commonTypeForBop(enum rqlType left, enum rqlType right)
+/* Return type that will work for a binary operation. */
+{
+if (left == right)
+    return left;
+else if (left == rqlTypeDouble || right == rqlTypeDouble)
+    return rqlTypeDouble;
+else if (left == rqlTypeInt || right == rqlTypeInt)
+    return rqlTypeInt;
+else if (left == rqlTypeBoolean || right == rqlTypeBoolean)
+    return rqlTypeBoolean;
+else if (left == rqlTypeString || right == rqlTypeString)
+    return rqlTypeString;
+else
+    {
+    errAbort("Can't find commonTypeForBop");
+    return rqlTypeInt;
+    }
+}
+
+static enum rqlOp booleanCastOp(enum rqlType oldType)
+/* Return op to convert oldType to boolean. */
+{
+switch (oldType)
+    {
+    case rqlTypeString:
+        return rqlOpStringToBoolean;
+    case rqlTypeInt:
+        return rqlOpIntToBoolean;
+    case rqlTypeDouble:
+        return rqlOpDoubleToBoolean;
+    default:
+        internalErr();
+	return rqlOpUnknown;
+    }
+}
+
+static enum rqlOp intCastOp(enum rqlType oldType)
+/* Return op to convert oldType to int. */
+{
+switch (oldType)
+    {
+    case rqlTypeString:
+        return rqlOpStringToInt;
+    case rqlTypeBoolean:
+        return rqlOpBooleanToInt;
+    case rqlTypeDouble:
+        return rqlOpDoubleToInt;
+    default:
+        internalErr();
+	return rqlOpUnknown;
+    }
+}
+
+static enum rqlOp doubleCastOp(enum rqlType oldType)
+/* Return op to convert oldType to double. */
+{
+switch (oldType)
+    {
+    case rqlTypeString:
+        return rqlOpStringToDouble;
+    case rqlTypeBoolean:
+        return rqlOpBooleanToDouble;
+    case rqlTypeInt:
+        return rqlOpIntToDouble;
+    default:
+        internalErr();
+	return rqlOpUnknown;
+    }
+}
+
+
+static struct rqlParse *rqlParseCoerce(struct rqlParse *p, enum rqlType type)
+/* If p is not of correct type, wrap type conversion node around it. */
+{
+if (p->type == type)
+    return p;
+else
+    {
+    struct rqlParse *cast;
+    AllocVar(cast);
+    cast->children = p;
+    cast->type = type;
+    switch (type)
+        {
+	case rqlTypeBoolean:
+	    cast->op = booleanCastOp(p->type);
+	    break;
+	case rqlTypeInt:
+	    cast->op = intCastOp(p->type);
+	    break;
+	case rqlTypeDouble:
+	    cast->op = doubleCastOp(p->type);
+	    break;
+	default:
+	    internalErr();
+	    break;
+	}
+    return cast;
+    }
+}
+
+static struct rqlParse *rqlParseIndex(struct tokenizer *tkz)
+/* Handle the [] in this[6].  Convert it into tree:
+*         rqlOpArrayIx
+*            rqlParseAtom
+*            rqlParseAtom */
+{
+struct rqlParse *collection = rqlParseAtom(tkz);
+struct rqlParse *p = collection;
+char *tok = tokenizerNext(tkz);
+if (tok == NULL)
+    tokenizerReuse(tkz);
+else if (tok[0] == '[')
+    {
+    // struct rqlParse *index = rqlParseExpression(tkz);
+    struct rqlParse *index = rqlParseAtom(tkz);
+    index = rqlParseCoerce(index, rqlTypeInt);
+    skipOverRequired(tkz, "]");
+    AllocVar(p);
+    p->op = rqlOpArrayIx;
+    p->type = rqlTypeString;
+    p->children = collection;
+    collection->next = index;
+    }
+else
+    tokenizerReuse(tkz);
+return p;
+}
+
+
+static struct rqlParse *rqlParseUnaryMinus(struct tokenizer *tkz)
+/* Return unary minus sort of parse tree if there's a leading '-' */
+{
+char *tok = tokenizerMustHaveNext(tkz);
+if (tok[0] == '-')
+    {
+    struct rqlParse *c = rqlParseIndex(tkz);
+    struct rqlParse *p;
+    AllocVar(p);
+    if (c->type == rqlTypeInt)
+        {
+	p->op = rqlOpUnaryMinusInt;
+	p->type = rqlTypeInt;
+	}
+    else
+	{
+	c = rqlParseCoerce(c, rqlTypeDouble);
+	p->op = rqlOpUnaryMinusDouble;
+	p->type = rqlTypeDouble;
+	}
+    p->children = c;
+    return p;
+    }
+else
+    {
+    tokenizerReuse(tkz);
+    return rqlParseIndex(tkz);
+    }
+}
+
+static boolean eatMatchingTok(struct tokenizer *tkz, char *s)
+/* If next token matches s then eat it and return TRUE */
+{
+char *tok = tokenizerNext(tkz);
+if (tok != NULL && sameString(tok, s))
+    return TRUE;
+else
+    {
+    tokenizerReuse(tkz);
+    return FALSE;
+    }
+}
+
+static struct rqlParse *rqlParseCmp(struct tokenizer *tkz)
+/* Parse out comparison. */
+{
+struct rqlParse *l = rqlParseUnaryMinus(tkz);
+struct rqlParse *p = l;
+char *tok = tokenizerNext(tkz);
+boolean forceString = FALSE;
+boolean needNot = FALSE;
+if (tok != NULL)
+    {
+    enum rqlOp op = rqlOpUnknown;
+    if (sameString(tok, "="))
+        {
+	op = rqlOpEq;
+	}
+    else if (sameString(tok, "!"))
+        {
+	op = rqlOpNe;
+	skipOverRequired(tkz, "=");
+	}
+    else if (sameString(tok, ">"))
+        {
+	if (eatMatchingTok(tkz, "="))
+	    op = rqlOpGe;
+	else
+	    op = rqlOpGt;
+	}
+    else if (sameString(tok, "<"))
+        {
+	if (eatMatchingTok(tkz, "="))
+	    op = rqlOpGe;
+	else
+	    op = rqlOpLe;
+	}
+    else if (sameString(tok, "not"))
+        {
+	forceString = TRUE;
+	op = rqlOpLike;
+	needNot = TRUE;
+	skipOverRequired(tkz, "like");
+	}
+    else if (sameString(tok, "like"))
+        {
+	forceString = TRUE;
+	op = rqlOpLike;
+	}
+    else
+        {
+	tokenizerReuse(tkz);
+	return p;
+	}
+    struct rqlParse *r = rqlParseUnaryMinus(tkz);
+    AllocVar(p);
+    p->op = op;
+    p->type = rqlTypeBoolean;
+
+    /* Now force children to be the same type, inserting casts if need be. */
+    if (forceString)
+	{
+	if (l->type != rqlTypeString || r->type != rqlTypeString)
+	    {
+	    errAbort("Expecting string type around comparison line %d of %s",
+	    	tkz->lf->lineIx, tkz->lf->fileName);
+	    }
+	}
+    else
+	{
+	enum rqlType childType = commonTypeForBop(l->type, r->type);
+	l = rqlParseCoerce(l, childType);
+	r = rqlParseCoerce(r, childType);
+	}
+
+    /* Now hang children onto node. */
+    p->children = l;
+    l->next = r;
+
+    /* Put in a not around self if need be. */
+    if (needNot)
+        {
+	struct rqlParse *n;
+	AllocVar(n);
+	n->op = rqlOpNot;
+	n->type = rqlTypeBoolean;
+	n->children = p;
+	p = n;
+	}
+    }
+return p;
+}
+
+static struct rqlParse *rqlParseNot(struct tokenizer *tkz)
+/* parse out a logical not. */
+{
+char *tok = tokenizerNext(tkz);
+if (sameString(tok, "not"))
+    {
+    struct rqlParse *p = rqlParseCoerce(rqlParseCmp(tkz), rqlTypeBoolean);
+    struct rqlParse *n;
+    AllocVar(n);
+    n->op = rqlOpNot;
+    n->type = rqlTypeBoolean;
+    n->children = p;
+    return n;
+    }
+else
+    {
+    tokenizerReuse(tkz);
+    return rqlParseCmp(tkz);
+    }
+}
+
+static struct rqlParse *rqlParseAnd(struct tokenizer *tkz)
+/* Parse out and or or. */
+{
+struct rqlParse *p = rqlParseNot(tkz);
+struct rqlParse *parent = NULL;
+for (;;)
+    {
+    char *tok = tokenizerNext(tkz);
+    if (tok == NULL || !sameString(tok, "and"))
+        {
+	tokenizerReuse(tkz);
+	return p;
+	}
+    else
+        {
+	if (parent == NULL)
+	    {
+	    p = rqlParseCoerce(p, rqlTypeBoolean);
+	    AllocVar(parent);
+	    parent->op = rqlOpAnd;
+	    parent->type = rqlTypeBoolean;
+	    parent->children = p;
+	    p = parent;
+	    }
+	struct rqlParse *r = rqlParseCoerce(rqlParseNot(tkz), rqlTypeBoolean);
+	slAddTail(&parent->children, r);
+	}
+    }
+}
+
+static struct rqlParse *rqlParseOr(struct tokenizer *tkz)
+/* Parse out and or or. */
+{
+struct rqlParse *p = rqlParseAnd(tkz);
+struct rqlParse *parent = NULL;
+for (;;)
+    {
+    char *tok = tokenizerNext(tkz);
+    if (tok == NULL || !sameString(tok, "or"))
+        {
+	tokenizerReuse(tkz);
+	return p;
+	}
+    else
+        {
+	if (parent == NULL)
+	    {
+	    p = rqlParseCoerce(p, rqlTypeBoolean);
+	    AllocVar(parent);
+	    parent->op = rqlOpOr;
+	    parent->type = rqlTypeBoolean;
+	    parent->children = p;
+	    p = parent;
+	    }
+	struct rqlParse *r = rqlParseCoerce(rqlParseAnd(tkz), rqlTypeBoolean);
+	slAddTail(&parent->children, r);
+	}
+    }
+}
+
+struct rqlParse *rqlParseExpression(struct tokenizer *tkz)
+/* Parse out a clause, usually a where clause. */
+{
+return rqlParseOr(tkz);
+}
+
+static char *rqlParseFieldSpec(struct tokenizer *tkz, struct dyString *buf)
+/* Return a field spec, which may contain * and ?. Put results in buf, and 
+ * return buf->string. */
+{
+boolean firstTime = TRUE;
+dyStringClear(buf);
+for (;;)
+   {
+   char *tok = tokenizerNext(tkz);
+   if (tok == NULL)
+       break;
+   char c = *tok;
+   if (c == '?' || c == '*' || isalpha(c) || c == '_' || c == '/' || c == '.')
+       {
+       if (firstTime)
+	   dyStringAppend(buf, tok);
+       else
+           {
+	   if (tkz->leadingSpaces == 0)
+	       dyStringAppend(buf, tok);
+	   else
+	       {
+	       tokenizerReuse(tkz);
+	       break;
+	       }
+	   }
+       }
+   else
+       {
+       tokenizerReuse(tkz);
+       break;
+       }
+    firstTime = FALSE;
+    }
+if (buf->stringSize == 0)
+    errAbort("Expecting field name line %d of %s", tkz->lf->lineIx, tkz->lf->fileName);
+return buf->string;
+}
+
+
+void rqlParseVarsUsed(struct rqlParse *p, struct slName **pVarList)
+/* Put variables used by self and children onto varList. */
+{
+if (p->op == rqlOpSymbol)
+    slNameStore(pVarList, p->val.s);
+struct rqlParse *child;
+for (child = p->children; child != NULL; child = child->next)
+    rqlParseVarsUsed(child, pVarList);
+}
+
+struct rqlStatement *rqlStatementParse(struct lineFile *lf)
+/* Parse an RQL statement out of text */
+{
+struct tokenizer *tkz = tokenizerOnLineFile(lf);
+tkz->uncommentShell = TRUE;
+tkz->uncommentC = TRUE;
+tkz->leaveQuotes = TRUE;
+struct rqlStatement *rql;
+AllocVar(rql);
+rql->command = cloneString(tokenizerMustHaveNext(tkz));
+if (sameString(rql->command, "select"))
+    {
+    struct dyString *buf = dyStringNew(0);
+    struct slName *list = NULL;
+    char *tok = rqlParseFieldSpec(tkz, buf);
+    /* Look for count(*) as special case. */
+    boolean countOnly = FALSE;
+    if (sameString(tok, "count"))
+        {
+	char *paren = tokenizerNext(tkz);
+	if (paren[0] == '(')
+	    {
+	    while ((paren = tokenizerMustHaveNext(tkz)) != NULL)
+	        {
+		if (paren[0] == ')')
+		    break;
+		}
+	    countOnly = TRUE;
+	    freez(&rql->command);
+	    rql->command = cloneString("count");
+	    }
+	else
+	    {
+	    tokenizerReuse(tkz);
+	    }
+	}
+    if (!countOnly)
+	{
+	list = slNameNew(tok);
+	for (;;)
+	    {
+	    /* Parse out comma-separated field list. */
+	    char *comma = tokenizerNext(tkz);
+	    if (comma == NULL || comma[0] != ',')
+		{
+		tokenizerReuse(tkz);
+		break;
+		}
+	    slNameAddHead(&list, rqlParseFieldSpec(tkz, buf));
+	    }
+	slReverse(&list);
+	rql->fieldList = list;
+	}
+    dyStringFree(&buf);
+    }
+else if (sameString(rql->command, "count"))
+    {
+    /* No parameters to count. */
+    }
+else
+    errAbort("Unknown RQL command '%s line %d of %s\n", rql->command, lf->lineIx, lf->fileName);
+    
+char *from = tokenizerNext(tkz);
+if (from != NULL)
+    {
+    if (sameString(from, "from"))
+        {
+	for (;;)
+	    {
+	    struct dyString *buf = dyStringNew(0);
+	    char *table = rqlParseFieldSpec(tkz, buf);
+	    slNameAddTail(&rql->tableList, table);
+	    char *comma = tokenizerNext(tkz);
+	    if (comma == NULL)
+	        break;
+	    if (comma[0] != ',')
+	        {
+		tokenizerReuse(tkz);
+		break;
+		}
+	    dyStringFree(&buf);
+	    }
+	}
+    else
+	{
+	errAbort("missing 'from' clause in %s\n", rql->command);
+	}
+    }
+
+/* Parse where clause. */
+char *where = tokenizerNext(tkz);
+if (where != NULL)
+    {
+    if (!sameString(where, "where"))
+	{
+        tokenizerReuse(tkz);
+	}
+    else
+        {
+	rql->whereClause = rqlParseExpression(tkz);
+	rqlParseVarsUsed(rql->whereClause, &rql->whereVarList);
+	}
+    }
+
+/* Parse limit clause. */
+char *limit = tokenizerNext(tkz);
+rql->limit = -1;	
+if (limit != NULL)
+    {
+    if (!sameString(limit, "limit"))
+        errAbort("Unknown clause '%s' line %d of %s", limit, lf->lineIx, lf->fileName);
+    char *count = tokenizerMustHaveNext(tkz);
+    if (!isdigit(count[0]))
+       errAbort("Expecting number after limit, got %s line %d of %s", 
+       	count, lf->lineIx, lf->fileName);
+    rql->limit = atoi(count);
+    }
+
+/* Check that are at end of statement. */
+char *extra = tokenizerNext(tkz);
+if (extra != NULL)
+    errAbort("Extra stuff starting with '%s' past end of statement line %d of %s", 
+    	extra, lf->lineIx, lf->fileName);
+return rql;
+}
+
+void rqlStatementDump(struct rqlStatement *rql, FILE *f)
+/* Print out statement to file. */
+{
+fprintf(f, "%s:", rql->command);
+if (rql->fieldList)
+    {
+    fprintf(f, " ");
+    struct slName *field = rql->fieldList;
+    fprintf(f, "%s", field->name);
+    for (field = field->next; field != NULL; field = field->next)
+        fprintf(f, ",%s", field->name);
+    }
+fprintf(f, "\n");
+if (rql->tableList)
+    {
+    fprintf(f, "from: ");
+    struct slName *table = rql->tableList;
+    fprintf(f, "%s", table->name);
+    for (table = table->next; table != NULL; table = table->next)
+        fprintf(f, ",%s", table->name);
+    fprintf(f, "\n");
+    }
+if (rql->whereClause)
+    {
+    fprintf(f, " where:\n");
+    rqlParseDump(rql->whereClause, 0, f);
+    }
+if (rql->limit >= 0)
+    fprintf(f, "limit: %d\n", rql->limit);
+}
+
+static void rqlParseFreeRecursive(struct rqlParse *p)
+/* Depth-first recursive free. */
+{
+struct rqlParse *child, *next;
+for (child = p->children; child != NULL; child = next)
+    {
+    next = child->next;
+    rqlParseFreeRecursive(child);
+    }
+freeMem(p);
+}
+
+void rqlStatementFree(struct rqlStatement **pRql)
+/* Free up an rql statement. */
+{
+struct rqlStatement *rql = *pRql;
+if (rql != NULL)
+    {
+    freeMem(rql->command);
+    slFreeList(&rql->fieldList);
+    slFreeList(&rql->tableList);
+    if (rql->whereClause !=NULL)
+	rqlParseFreeRecursive(rql->whereClause);
+    slFreeList(&rql->whereVarList);
+    freez(pRql);
+    }
+}
+
diff --git a/gbtools/src/blatSrc/lib/rudp.c b/gbtools/src/blatSrc/lib/rudp.c
new file mode 100644
index 0000000..2ada0cf
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/rudp.c
@@ -0,0 +1,563 @@
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+/* rudp - (semi) reliable UDP communication.  This adds an
+ * acknowledgement and resend layer on top of UDP. 
+ *
+ * UDP is a packet based rather than stream based internet communication 
+ * protocol. Messages sent by UDP are checked for integrety by the UDP layer, 
+ * and discarded if transmission errors are detected.  However packets are
+ * not necessarily received in the same order that they are sent,
+ * and packets may be duplicated or lost.  
+ 
+ * Using rudp packets are only very rarely lost, and the sender is 
+ * notified if they are.  After rudp there are still duplicate
+ * packets that may arrive out of order.  Aside from the duplicates
+ * the packets are in order though.
+ *
+ * For many, perhaps most applications, TCP/IP is a saner choice
+ * than UDP or rudp.  If the communication channel is between just 
+ * two computers you can pretty much just treat TCP/IP as a fairly
+ * reliable pipe.   However if the communication involves many
+ * computers sometimes UDP can be a better choice.  It is possible to
+ * do broadcast and multicast with UDP but not with TCP/IP.  Also
+ * for systems like parasol, where a server may be making and breaking
+ * connections rapidly to thousands of computers, TCP paradoxically
+ * can end up less reliable than UDP.  Though TCP is relatively 
+ * robust when a connection is made,  it can relatively easily fail
+ * to make a connection in the first place, and spend quite a long
+ * time figuring out that the connection can't be made.  Moreover at
+ * the end of each connection TCP goes into a 'TIMED_WAIT' state,  which
+ * prevents another connection from coming onto the same port for a
+ * time that can be as long as 255 seconds.  Since there are only
+ * about 15000 available ports,  this limits TCP/IP to 60 connections
+ * per second in some cases.  Generally the system does not handle
+ * running out of ports gracefully, and this did occur with the 
+ * TCP/IP based version of Parasol.
+ *
+ * This module puts a thin layer around UDP to make it a little bit more
+ * reliable.  Currently the interface is geared towards Parasol rather
+ * than broadcast type applications.  This module will try to send
+ * a message a limited number of times before giving up.  It puts
+ * a small header containing a message ID and timestamp on each message.   
+ * This header is echoed back in acknowledgment by the reciever. This
+ * echo lets the sender know if it needs to resend the message, and
+ * lets it know how long a message takes to get to the destination and
+ * back.  It uses this round trip time information to figure out how
+ * long to wait between resends. 
+ *
+ * Much of this code is based on the 'Adding Reliability to a UDP Application
+ * section in volume I, chapter 20, section 5, of _UNIX Network Programming_
+ * by W. Richard Stevens. */
+
+
+#include "common.h"
+#include <sys/time.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <pthread.h>
+#include "errAbort.h"
+#include "hash.h"
+#include "dlist.h"
+#include "obscure.h"
+#include "rudp.h"
+
+
+#define MAX_TIME_OUT 999999
+
+static int rudpCalcTimeOut(struct rudp *ru)
+/* Return calculation of time out based on current data. */
+{
+int timeOut = ru->rttAve + (ru->rttVary<<2);
+if (timeOut > MAX_TIME_OUT) timeOut = MAX_TIME_OUT; /* No more than a second. */
+if (timeOut < 10000) timeOut = 10000;	/* No less than 1/100th second */
+return timeOut;
+}
+
+static void rudpAddRoundTripTime(struct rudp *ru, int time)
+/* Add info about round trip time and based on this recalculate
+ * time outs. */
+{
+int delta;
+ru->rttLast = time;
+delta = time - ru->rttAve;
+ru->rttAve += (delta>>3);		      /* g = 1/8 */
+if (delta < 0) delta = -delta;
+ru->rttVary += ((delta - ru->rttVary) >> 2);  /* h = 1/4 */
+ru->timeOut = rudpCalcTimeOut(ru);
+}
+
+static void rudpTimedOut(struct rudp *ru)
+/* Tell system about a time-out. */
+{
+ru->timeOut <<=  1;   /* Back off exponentially. */
+if (ru->timeOut >= MAX_TIME_OUT)
+    ru->timeOut = MAX_TIME_OUT;
+}
+
+struct rudp *rudpNew(int socket)
+/* Wrap a rudp around a socket. Call rudpFree when done, or
+ * rudpClose if you also want to close(socket). */
+{
+/* Note scope of variable and mutex are the same */
+static pthread_mutex_t rudpConnMutex = PTHREAD_MUTEX_INITIALIZER;
+static int nextRudpConnId=0;
+struct rudp *ru;
+assert(socket >= 0);
+AllocVar(ru);
+ru->socket = socket;
+ru->rttVary = 250;	/* Initial variance 250 microseconds. */
+ru->timeOut = rudpCalcTimeOut(ru);
+ru->maxRetries = 7;
+ru->pid = getpid();
+pthread_mutex_lock( &rudpConnMutex );
+ru->connId = ++nextRudpConnId;
+pthread_mutex_unlock( &rudpConnMutex );
+return ru;
+}
+
+void freePacketSeen(struct packetSeen **pP)
+/* Free packet seen */
+{
+freez(pP);
+}
+
+void rudpFree(struct rudp **pRu)
+/* Free up rudp.  Note this does *not* close the associated socket. */
+{
+struct rudp *ru = *pRu;
+if (ru->recvHash)
+    {
+    struct dlNode *node;
+    while (!dlEmpty(ru->recvList))
+	{
+	node = dlPopHead(ru->recvList);
+	struct packetSeen *p = node->val;
+	freeMem(node);
+	hashRemove(ru->recvHash, p->recvHashKey);
+    	freePacketSeen(&p);
+	}
+    freeDlList(&ru->recvList);
+    hashFree(&ru->recvHash);
+    }
+freez(pRu);
+}
+
+struct rudp *rudpOpen()
+/* Open up an unbound rudp.   This is suitable for
+ * writing to and for reading responses.  However 
+ * you'll want to rudpBind if you want to listen for
+ * incoming messages.   Call rudpClose() when done 
+ * with this one.  Warns and returns NULL if there is
+ * a problem. */
+{
+int sd = socket(AF_INET,  SOCK_DGRAM, IPPROTO_UDP);
+if (sd < 0)
+    {
+    warn("Couldn't open socket in rudpOpen %s", strerror(errno));
+    return NULL;
+    }
+return rudpNew(sd);
+}
+
+struct rudp *rudpMustOpen()
+/* Open up unbound rudp.  Warn and die if there is a problem. */
+{
+struct rudp *ru = rudpOpen();
+if (ru == NULL)
+    noWarnAbort();
+return ru;
+}
+
+struct rudp *rudpOpenBound(struct sockaddr_in *sai)
+/* Open up a rudp socket bound to a particular port and address.
+ * Use this rather than rudpOpen if you want to wait for
+ * messages at a specific address in a server or the like. */
+{
+struct rudp *ru = rudpOpen();
+if (ru != NULL)
+    {
+    if (bind(ru->socket, (struct sockaddr *)sai, sizeof(*sai)) < 0)
+	{
+	warn("Couldn't bind rudp socket: %s", strerror(errno));
+	rudpClose(&ru);
+	}
+    }
+return ru;
+}
+
+struct rudp *rudpMustOpenBound(struct sockaddr_in *sai)
+/* Open up a rudp socket bound to a particular port and address
+ * or die trying. */
+{
+struct rudp *ru = rudpOpenBound(sai);
+if (ru == NULL)
+    noWarnAbort();
+return ru;
+}
+
+void rudpClose(struct rudp **pRu)
+/* Close socket and free memory. */
+{
+struct rudp *ru = *pRu;
+if (ru != NULL)
+    {
+    close(ru->socket);
+    rudpFree(pRu);
+    }
+}
+
+static int timeDiff(struct timeval *t1, struct timeval *t2)
+/* Return difference in microseconds between t1 and t2.  t2 must be
+ * later than t1 (but less than 50 minutes later). */
+{
+int secDiff = t2->tv_sec - t1->tv_sec;
+int microDiff = 0;
+if (secDiff != 0)
+    microDiff = secDiff * 1000000;
+microDiff += (t2->tv_usec - t1->tv_usec);
+if (microDiff < 0)
+    {
+    /* Note, this case actually happens, currently particularly on
+     * kkr2u62 and kkr8u19.  I think this is just a bug in their clock
+     * hardware/software.  However in general it _could_ happen very
+     * rarely on normal machines when the clock is reset by the
+     * network time protocol thingie. */
+    warn("t1 %u.%u, t2 %u.%u.  t1 > t2 but later?!", (unsigned)t1->tv_sec,
+         (unsigned)t1->tv_usec, (unsigned)t2->tv_sec, (unsigned)t2->tv_usec);
+    microDiff = 0;
+    }
+return microDiff;
+}
+
+static boolean readReadyWait(int sd, int microseconds)
+/* Wait for descriptor to have some data to read, up to
+ * given number of microseconds. */
+{
+struct timeval tv;
+fd_set set;
+int readyCount;
+
+for (;;)
+    {
+    if (microseconds >= 1000000)
+	{
+	tv.tv_sec = microseconds/1000000;
+	tv.tv_usec = microseconds%1000000;
+	}
+    else
+	{
+	tv.tv_sec = 0;
+	tv.tv_usec = microseconds;
+	}
+    FD_ZERO(&set);
+    FD_SET(sd, &set);
+    readyCount = select(sd+1, &set, NULL, NULL, &tv);
+    if (readyCount < 0) 
+	{
+	if (errno == EINTR)	/* Select interrupted, not timed out. */
+	    continue;
+    	else 
+    	    warn("select failure in rudp: %s", strerror(errno));
+    	}
+    else
+	{
+    	return readyCount > 0;	/* Zero readyCount indicates time out */
+	}
+    }
+}
+
+static boolean getOurAck(struct rudp *ru, struct timeval *startTv, struct sockaddr_in *sai)
+/* Wait for acknowledgement to the message we just sent.
+ * The set should be zeroed out. Only wait for up to
+ * ru->timeOut microseconds.   Prints a message and returns FALSE
+ * if there's a problem.   */
+{
+struct rudpHeader head;
+int readSize;
+int timeOut = ru->timeOut;
+struct sockaddr_in retFrom;
+unsigned int retFromSize = sizeof(retFrom);
+
+for (;;)
+    {
+    /* Set up select with our time out. */
+    int dt;
+    struct timeval tv;
+
+    if (readReadyWait(ru->socket, timeOut))
+	{
+	/* Read message and if it's our ack return true.   */
+	readSize = recvfrom(ru->socket, &head, sizeof(head), 0, 
+		    (struct sockaddr*)&retFrom, &retFromSize);
+	if (readSize >= sizeof(head) && head.type == rudpAck && head.id == ru->lastId)
+	    {
+	    if ((sai->sin_addr.s_addr==retFrom.sin_addr.s_addr) &&
+		(sai->sin_port==retFrom.sin_port))
+		{
+		gettimeofday(&tv, NULL);
+		dt = timeDiff(startTv, &tv);
+		rudpAddRoundTripTime(ru, dt);
+		return TRUE;
+		}
+	    else
+		{
+		char retFromDottedQuad[17];
+		char saiDottedQuad[17];
+		internetIpToDottedQuad(ntohl(retFrom.sin_addr.s_addr), retFromDottedQuad);
+		internetIpToDottedQuad(ntohl(sai->sin_addr.s_addr), saiDottedQuad);
+		warn("rudp: discarding mistaken ack from %s:%d by confirming recipient ip:port %s:%d"
+		    , retFromDottedQuad, retFrom.sin_port
+		    , saiDottedQuad, sai->sin_port
+		    );
+		}
+	    }
+	}
+
+    /* If we got to here then we did get a message, but it's not our
+     * ack.  We ignore the message and loop around again,  but update
+     * our timeout so that we won't keep getting other people's messages
+     * forever. */
+    gettimeofday(&tv, NULL);
+    timeOut = ru->timeOut - timeDiff(startTv, &tv);
+    if (timeOut <= 0)
+	return FALSE;
+    }
+}
+
+int rudpSend(struct rudp *ru, struct sockaddr_in *sai, void *message, int size)
+/* Send message of given size to port at host via rudp.  Prints a warning and
+ * sets errno and returns -1 if there's a problem. */
+{
+struct timeval sendTv;	/* Current time. */
+
+char outBuf[udpEthMaxSize];
+struct rudpHeader *head;
+int fullSize = size + sizeof(*head);
+int i, err = 0, maxRetry = ru->maxRetries;
+
+
+/* Make buffer with header in front of message. 
+ * At some point we might replace this with a scatter/gather
+ * iovector. */
+ru->sendCount += 1;
+ru->resend = FALSE;
+assert(size <= rudpMaxSize);
+head = (struct rudpHeader *)outBuf;
+memcpy(head+1, message, size);
+head->pid = ru->pid;
+head->connId = ru->connId;
+head->id = ++ru->lastId;
+head->type = rudpData;
+
+/* Go into send/wait for ack/retry loop. */
+for (i=0; i<maxRetry; ++i)
+    {
+    gettimeofday(&sendTv, NULL);
+    head->sendSec = sendTv.tv_sec;
+    head->sendMicro = sendTv.tv_usec;
+    err =  sendto(ru->socket, outBuf, fullSize, 0, 
+	(struct sockaddr *)sai, sizeof(*sai));
+    if (err < 0) 
+	{
+	/* Warn, wait, and retry. */
+	struct timeval tv;
+	warn("sendto problem %s", strerror(errno));
+	tv.tv_sec = 0;
+	tv.tv_usec = ru->timeOut;
+	select(0, NULL, NULL, NULL, &tv);
+	rudpTimedOut(ru);
+	ru->resendCount += 1;
+	ru->resend = TRUE;
+	continue;
+	}
+    if (getOurAck(ru, &sendTv, sai))
+	{
+	return 0;
+	}
+    rudpTimedOut(ru);
+    ru->resendCount += 1;
+    ru->resend = TRUE;
+    }
+if (err >= 0)
+    {
+    err = ETIMEDOUT;
+    warn("rudpSend timed out");
+    }
+ru->failCount += 1;
+return err;
+}
+
+void sweepOutOldPacketsSeen(struct rudp *ru, long now)
+/* Sweep out old packets seen, we can only remember so many. */
+{
+int period = 8;  /* seconds */
+struct dlNode *node;
+struct packetSeen *p;
+while (TRUE)
+    {
+    if (dlEmpty(ru->recvList))
+        break;
+    p = ru->recvList->head->val;
+    if (now - p->lastChecked < period)
+        break;
+    --ru->recvCount;
+    node = dlPopHead(ru->recvList);
+    freeMem(node);
+    hashRemove(ru->recvHash, p->recvHashKey);
+    freePacketSeen(&p);
+    }
+}
+
+
+int rudpReceiveTimeOut(struct rudp *ru, void *messageBuf, int bufSize, 
+	struct sockaddr_in *retFrom, int timeOut)
+/* Read message into buffer of given size.  Returns actual size read on
+ * success. On failure prints a warning, sets errno, and returns -1. 
+ * Also returns ip address of message source. If timeOut is nonzero,
+ * it represents the timeout in milliseconds.  It will set errno to
+ * ETIMEDOUT in this case.*/
+{
+char inBuf[udpEthMaxSize];
+struct rudpHeader *head = (struct rudpHeader *)inBuf;
+struct rudpHeader ackHead;
+struct sockaddr_in sai;
+socklen_t saiSize = sizeof(sai);
+int readSize, err;
+assert(bufSize <= rudpMaxSize);
+ru->receiveCount += 1;
+for (;;)
+    {
+    if (timeOut != 0)
+	{
+	if (!readReadyWait(ru->socket, timeOut))
+	    {
+	    warn("rudpReceive timed out\n");
+	    errno = ETIMEDOUT;
+	    return -1;
+	    }
+	}
+    readSize = recvfrom(ru->socket, inBuf, sizeof(inBuf), 0, 
+	(struct sockaddr*)&sai, &saiSize);
+    if (retFrom != NULL)
+	*retFrom = sai;
+    if (readSize < 0)
+	{
+	if (errno == EINTR)
+	    continue;
+	warn("recvfrom error: %s", strerror(errno));
+	ru->failCount += 1;
+	return readSize;
+	}
+    if (readSize < sizeof(*head))
+	{
+	warn("rudpRecieve truncated message");
+	continue;
+	}
+    if (head->type != rudpData)
+	{
+	if (head->type != rudpAck)
+	    warn("skipping non-data message %d in rudpReceive", head->type);
+	continue;
+	}
+    ackHead = *head;
+    ackHead.type = rudpAck;
+    err = sendto(ru->socket, &ackHead, sizeof(ackHead), 0, 
+	(struct sockaddr *)&sai, sizeof(sai));
+    if (err < 0)
+	{
+	warn("problem sending ack in rudpRecieve: %s", strerror(errno));
+	}
+    readSize -= sizeof(*head);
+    if (readSize > bufSize)
+	{
+	warn("read more bytes than have room for in rudpReceive");
+	readSize = bufSize;
+	}
+    memcpy(messageBuf, head+1, readSize);
+
+    /* check for duplicate packet */
+    if (!ru->recvHash)
+	{ /* take advantage of new auto-expanding hashes */
+	ru->recvHash = newHashExt(4, FALSE);  /* do not use local mem in hash */
+	ru->recvList = newDlList();
+	ru->recvCount = 0;
+	}
+    char hashKey[64];
+    char saiDottedQuad[17];
+    internetIpToDottedQuad(ntohl(sai.sin_addr.s_addr), saiDottedQuad);
+    safef(hashKey, sizeof(hashKey), "%s-%d-%d-%d" 
+    	, saiDottedQuad 
+        , head->pid              
+        , head->connId
+        , head->id
+      );		    
+    if (hashLookup(ru->recvHash, hashKey))
+	{
+	warn("duplicate packet filtered out: %s", hashKey);
+	continue;
+	}
+    long now = time(NULL);
+    struct packetSeen *p;
+    AllocVar(p);
+    AllocVar(p->node);
+    p->node->val = p;
+    p->recvHashKey = hashStoreName(ru->recvHash, hashKey);
+    p->lastChecked = now;
+    dlAddTail(ru->recvList, p->node);
+    ++ru->recvCount;
+   
+    sweepOutOldPacketsSeen(ru, now);
+
+    ru->lastIdReceived = head->id;
+    break;
+    }
+return readSize;
+}
+
+
+int rudpReceiveFrom(struct rudp *ru, void *messageBuf, int bufSize, 
+	struct sockaddr_in *retFrom)
+/* Read message into buffer of given size.  Returns actual size read on
+ * success. On failure prints a warning, sets errno, and returns -1. 
+ * Also returns ip address of message source. */
+{
+return rudpReceiveTimeOut(ru, messageBuf, bufSize, retFrom, 0);
+}
+
+int rudpReceive(struct rudp *ru, void *messageBuf, int bufSize)
+/* Read message into buffer of given size.  Returns actual size read on
+ * success. On failure prints a warning, sets errno, and returns -1. */
+{
+return rudpReceiveFrom(ru, messageBuf, bufSize, NULL);
+}
+
+void rudpPrintStatus(struct rudp *ru)
+/* Print out rudpStatus */
+{
+printf("rudp status:\n");
+printf("  receiveCount %d\n", ru->receiveCount);
+printf("  sendCount %d\n", ru->sendCount);
+printf("  resendCount %d\n", ru->resendCount);
+printf("  failCount %d\n", ru->failCount);
+printf("  timeOut %d\n", ru->timeOut);
+printf("  rttVary %d\n", ru->rttVary);
+printf("  rttAve %d\n", ru->rttAve);
+printf("  rttLast %d\n", ru->rttLast);
+}
+
+void rudpTest()
+/* Test out rudp stuff. */
+{
+static int times[] = {1000, 200, 200, 100, 200, 200, 200, 400, 200, 200, 200, 200, 1000, 
+	200, 200, 200, 200};
+struct rudp *ru = rudpNew(0);
+int i;
+
+for (i=0; i<ArraySize(times); ++i)
+    {
+    int oldTimeOut = ru->timeOut;
+    rudpAddRoundTripTime(ru, times[i]);
+    printf("%d\t%d\t%d\t%d\n", i, oldTimeOut, times[i], ru->timeOut);
+    }
+}
diff --git a/gbtools/src/blatSrc/lib/scoreWindow.c b/gbtools/src/blatSrc/lib/scoreWindow.c
new file mode 100644
index 0000000..41ee994
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/scoreWindow.c
@@ -0,0 +1,51 @@
+/* scoreWindow - find window with most matches to a given char */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+
+
+int scoreWindow(char c, char *s, int size, int *score, int *start, int *end, int match, int misMatch)
+/* simple program to find max scoring window representing string of char c in a string s of size size */
+/* index of max score is returned , match and misMatch are the scores to assign, suggested defaults are match=1 and misMatch=1*/
+/* when used for scoring polyA tails, set c='A' for positive strand  or c='T' for neg strand */
+/* start, end are returned pointing to the start and end of the highest scoring window in s */
+{
+int i=0, j=0, max=0, count = 0; 
+
+*end = 0;
+
+for (i=0 ; i<size ; i++)
+    {
+    int prevScore = (i > 0) ? score[i-1] : 0;
+
+    if (toupper(s[i]) == toupper(c) )
+        score[i] = prevScore+match;
+    else
+        score[i] = prevScore-misMatch;
+    if (score[i] >= max)
+        {
+        max = score[i];
+        *end = i;
+        /* traceback to find start */
+        for (j=i ; j>=0 ; j--)
+            if (score[j] == 0)
+                {
+                *start = j+1;
+                break;
+                }
+        }
+    if (score[i] < 0) 
+        score[i] = 0;
+    }
+assert (*end < size);
+
+for (i=*start ; i<=*end ; i++)
+    {
+    assert (i < size);
+    if (toupper(s[i]) == toupper(c) )
+        count++;
+    }
+return count;
+}
diff --git a/gbtools/src/blatSrc/lib/seg.c b/gbtools/src/blatSrc/lib/seg.c
new file mode 100644
index 0000000..c4d18e6
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/seg.c
@@ -0,0 +1,476 @@
+/* seg.c - read/write seg format. */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "linefile.h"
+#include "errAbort.h"
+#include "obscure.h"
+#include "seg.h"
+#include "hash.h"
+#include <fcntl.h>
+
+
+
+
+void segCompFree(struct segComp **pObj)
+/* Free up a segment component. */
+{
+struct segComp *obj = *pObj;
+if (obj == NULL)
+	return;
+freeMem(obj->src);
+freez(pObj);
+}
+
+
+void segCompFreeList(struct segComp **pList)
+/* Free up a list of segment components. */
+{
+struct segComp *el, *next;
+
+for (el = *pList; el != NULL; el = next)
+	{
+	next = el->next;
+	segCompFree(&el);
+	}
+*pList = NULL;
+}
+
+
+void segBlockFree(struct segBlock **pObj)
+/* Free up a segment block. */
+{
+struct segBlock *obj = *pObj;
+if (obj == NULL)
+	return;
+freeMem(obj->name);
+segCompFreeList(&obj->components);
+freez(pObj);
+}
+
+
+void segBlockFreeList(struct segBlock **pList)
+/* Free up a list of segment blocks. */
+{
+struct segBlock *el, *next;
+
+for (el = *pList; el != NULL; el = next)
+	{
+	next = el->next;
+	segBlockFree(&el);
+	}
+*pList = NULL;
+}
+
+
+void segFileFree(struct segFile **pObj)
+/* Free up a segment file including closing file handle if necessary. */
+{
+struct segFile *obj = *pObj;
+if (obj == NULL)
+	return;
+segBlockFreeList(&obj->blocks);
+lineFileClose(&obj->lf);
+freez(pObj);
+}
+
+
+void segFileFreeList(struct segFile **pList)
+/* Free up a list of segment files. */
+{
+struct segFile *el, *next;
+
+for (el = *pList; el != NULL; el = next)
+	{
+	next = el->next;
+	segFileFree(&el);
+	}
+*pList = NULL;
+}
+
+
+struct segFile *segMayOpen(char *fileName)
+/* Open up a segment file for reading. Read header and verify. Prepare
+ * for subsequent calls to segNext(). Return NULL if file does not exist. */
+{
+struct segFile *sf;
+struct lineFile *lf;
+char *line, *name, *val, *word;
+char *sig = "##seg";
+
+/* Open fileName. */
+if ((lf = lineFileMayOpen(fileName, TRUE)) == NULL)
+	return NULL;
+AllocVar(sf);
+sf->lf = lf;
+
+/* Check for a valid signature. */
+lineFileNeedNext(lf, &line, NULL);
+if (!startsWith(sig, line))
+	errAbort("%s does not start with %s", fileName, sig);
+line += strlen(sig);
+
+/* parse name=val. */
+while ((word = nextWord(&line)) != NULL)
+	{
+	name = word;
+	val = strchr(word, '=');
+	if (val == NULL)
+		errAbort("Missing = after %s line 1 of %s", name, fileName);
+	*val++ = 0;
+
+	if (sameString(name, "version"))
+		sf->version = atoi(val);
+	}
+
+if (sf->version == 0)
+	errAbort("No version line 1 of %s", fileName);
+
+return sf;
+}
+
+
+struct segFile *segOpen(char *fileName)
+/* Like segMayOpen() above, but prints an error message and aborts if
+ * there is a problem. */
+{
+struct segFile *sf = segMayOpen(fileName);
+if (sf == NULL)
+	errnoAbort("Couldn't open %s", fileName);
+return sf;
+}
+
+
+void segRewind(struct segFile *sf)
+/* Seek to beginning of open segment file */
+{
+if (sf == NULL)
+	errAbort("segment file rewind failed -- file not open");
+lineFileSeek(sf->lf, 0, SEEK_SET);
+}
+
+static boolean nextLine(struct lineFile *lf, char **pLine)
+/* Get next line that is not a comment. */
+{
+for (;;)
+	{
+	if (!lineFileNext(lf, pLine, NULL))
+		return FALSE;
+	if (**pLine != '#')
+		return TRUE;
+	}
+}
+
+
+struct segBlock *segNextWithPos(struct segFile *sf, off_t *retOffset)
+/* Return next segment in segment file or NULL if at end. If retOffset
+ * is not NULL, return start offset of record in file. */
+{
+struct lineFile *lf = sf->lf;
+struct segBlock *block;
+struct segComp *comp, *tail = NULL;
+char *line, *name, *row[6], *val, *word;
+int wordCount;
+
+/* Loop until we get a segment paragraph or reach end of file. */
+for (;;)
+	{
+	/* Get segment header line. If it's not there assume end of file. */
+	if (!nextLine(lf, &line))
+		{
+		lineFileClose(&sf->lf);
+		return NULL;
+		}
+
+	/* Parse segment header line. */
+	word = nextWord(&line);
+	if (word == NULL)
+		continue;	/* Ignore blank lines. */
+
+	if (sameString(word, "b"))
+		{
+		if (retOffset != NULL)
+			*retOffset = lineFileTell(sf->lf);
+		AllocVar(block);
+		/* Parse name=val. */
+		while ((word = nextWord(&line)) != NULL)
+			{
+			name = word;
+			val = strchr(word, '=');
+			if (val == NULL)
+				errAbort("Missing = after %s line %d of %s",
+					name, lf->lineIx, lf->fileName);
+			*val++ = 0;
+
+			if (sameString(name, "name"))
+				block->name = cloneString(val);
+			else if (sameString(name, "val"))
+				block->val = atoi(val);
+			}
+
+		/* Parse segment components until blank line. */
+		for (;;)
+			{
+			if (!nextLine(lf, &line))
+				errAbort("Unexpected end of file %s", lf->fileName);
+			word = nextWord(&line);
+			if (word == NULL)
+				break;
+			if (sameString(word, "s"))
+				{
+				/* Chop line up by white space. This involves a few +=1's
+				 * because we have already chopped out the first word. */
+				row[0] = word;
+				wordCount = chopByWhite(line, row+1, ArraySize(row)-1) +1;
+				lineFileExpectWords(lf, ArraySize(row), wordCount);
+				AllocVar(comp);
+
+				/* Convert ASCII text representation to segComp structure. */
+				comp->src     = cloneString(row[1]);
+				comp->start   = lineFileNeedNum(lf, row, 2);
+				comp->size    = lineFileNeedNum(lf, row, 3);
+				comp->strand  = row[4][0];
+				comp->srcSize = lineFileNeedNum(lf, row, 5);
+
+				/* Do some sanity checking. */
+				if (comp->size <= 0 || comp->srcSize <= 0)
+					errAbort("Got a negative or zero size line %d of %s",
+						lf->lineIx, lf->fileName);
+				if (comp->start < 0 || comp->start + comp->size > comp->srcSize)
+					errAbort("Coordinates out of range line %d of %s",
+						lf->lineIx, lf->fileName);
+				if (comp->strand != '+' && comp->strand != '-')
+					errAbort("Invalid strand line %d of %s",
+						lf->lineIx, lf->fileName);
+
+				/* Add the new component to the current list. */
+				if (block->components == NULL)
+					block->components = comp;
+				else
+					tail->next = comp;
+				tail = comp;
+				}
+			}
+		return block;
+		}
+		else	/* Skip over paragraph we don't understand. */
+		{
+		for (;;)
+			{
+			if (!nextLine(lf, &line))
+				return NULL;
+			if (nextWord(&line) == NULL)
+				break;
+			}
+		}
+	}
+}
+
+
+struct segBlock *segNext(struct segFile *sf)
+/* Return next segment in segment file or NULL if at end.  This will
+ * close the open file handle at the end as well. */
+{
+return segNextWithPos(sf, NULL);
+}
+
+
+struct segFile *segReadAll(char *fileName)
+/* Read in full segment file */
+{
+struct segFile *sf = segOpen(fileName);
+struct segBlock *block, *tail = NULL;
+while ((block = segNext(sf)) != NULL)
+	{
+	if (sf->blocks == NULL)
+		sf->blocks = block;
+	else
+		{
+		tail->next = block;
+		block->prev = tail;
+		}
+	tail = block;
+	}
+return sf;
+}
+
+
+void segWriteStart(FILE *f)
+/* Write segment file header to the file. */
+{
+fprintf(f, "##seg version=1\n");
+}
+
+
+void segWrite(FILE *f, struct segBlock *block)
+/* Write next segment block to the file. */
+{
+struct segComp *comp;
+int srcChars = 0, startChars = 0, sizeChars = 0, srcSizeChars = 0;
+
+/* Write segment block header. */
+fprintf(f, "b");
+if (block->name != NULL)
+	fprintf(f, " name=%s", block->name);
+if (block->val != 0)
+	fprintf(f, " val=%d", block->val);
+fprintf(f, "\n");
+
+/* Figure out length of each field. */
+for (comp = block->components; comp != NULL; comp = comp->next)
+	{
+	int len = 0;
+	/* A name line '.' will break some tools, so replace it with a
+	 * generic name */
+	if (sameString(comp->src, "."))
+		{
+		freeMem(&comp->src);
+		comp->src = cloneString("defaultName");
+		}
+	len = strlen(comp->src);
+	if (srcChars < len)
+		srcChars = len;
+	len = digitsBaseTen(comp->start);
+	if (startChars < len)
+		startChars = len;
+	len = digitsBaseTen(comp->size);
+	if (sizeChars < len)
+		sizeChars = len;
+	len = digitsBaseTen(comp->srcSize);
+	if (srcSizeChars < len)
+		srcSizeChars = len;
+	}
+
+/* Write out each component. */
+for (comp = block->components; comp != NULL; comp = comp->next)
+	{
+	fprintf(f, "s %-*s %*d %*d %c %*d\n",
+		srcChars, comp->src, startChars, comp->start, sizeChars, comp->size,
+		comp->strand, srcSizeChars, comp->srcSize);
+	}
+
+/* Write out blank separator line. */
+fprintf(f, "\n");
+}
+
+
+void segWriteEnd(FILE *f)
+/* Write segment file end tag to the file.  In this case, nothing. */
+{
+}
+
+struct segComp *segMayFindCompSpecies(struct segBlock *sb, char *src,
+	char sepChar)
+/* Find component with a source that matches src up to and possibly
+   including sepChar. Return NULL if not found. */
+{
+struct segComp *sc;
+char *p, *q;
+
+for (sc = sb->components; sc != NULL; sc = sc->next)
+	{
+	for (p = sc->src, q = src;
+		 *p != '\0' && *p != sepChar && *q != '\0' && *q != sepChar;
+		 p++, q++)
+		{
+		if (*p != *q)
+			break;
+		}
+
+	if ((*p == *q)
+		|| (*p == sepChar && *q == '\0')
+		|| (*p == '\0' && *q == sepChar))
+		{
+		return(sc);
+		}
+	}
+
+return(NULL);
+}
+
+
+struct segComp *segFindCompSpecies(struct segBlock *sb, char *src,
+	char sepChar)
+/* Find component with a source that matches src up to and possibly
+   including sepChar or die trying. */
+{
+struct segComp *sc = segMayFindCompSpecies(sb, src, sepChar);
+char *p;
+
+if (sc == NULL)
+	{
+	if ((p = strchr(src, sepChar)) != NULL)
+		*p = '\0';
+
+	errAbort("Couldn't find %s%c or just %s... in block.", src, sepChar, src);
+	}
+
+return(sc);
+}
+
+struct segComp *cloneSegComp(struct segComp *sc)
+/* Return a copy of the argument segment component. */
+{
+struct segComp *newSc;
+
+AllocVar(newSc);
+
+newSc->next    = sc->next;
+newSc->src     = cloneString(sc->src);
+newSc->start   = sc->start;
+newSc->size    = sc->size;
+newSc->strand  = sc->strand;
+newSc->srcSize = sc->srcSize;
+
+return(newSc);
+}
+
+char *segFirstCompSpecies(struct segBlock *sb, char sepChar)
+/* Return the species possibly followed by sepChar of the first component
+   of the argument block. Return NULL if the block has no components. */
+{
+char *p, *species;
+
+if (sb->components == NULL)
+	return(NULL);
+
+/* Temporarily split src into species and chrom. */
+if ((p = strchr(sb->components->src, sepChar)) != NULL)
+	*p = '\0';
+
+species = cloneString(sb->components->src);
+
+/* Restore src. */
+if (p != NULL)
+	*p = sepChar;
+
+return(species);
+}
+
+struct slName *segSecSpeciesList(struct segBlock *sb, struct segComp *refComp,
+    char sepChar)
+/* Return a name list containing the species possibly followed by sepChar
+of all components other than refComp on the block. */
+{
+struct segComp *sc;
+char *p;
+struct slName *speciesList = NULL;
+
+for (sc = sb->components; sc != NULL; sc = sc->next)
+	{
+	if (sc == refComp)
+		continue;
+
+	if ((p = strchr(sc->src, '.')) != NULL)
+		*p = '\0';
+
+	slNameStore(&speciesList, sc->src);
+
+	if (p != NULL)
+		*p = '.';
+	}
+
+return(speciesList);
+}
diff --git a/gbtools/src/blatSrc/lib/seqOut.c b/gbtools/src/blatSrc/lib/seqOut.c
new file mode 100644
index 0000000..1a44eed
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/seqOut.c
@@ -0,0 +1,330 @@
+/* seqOut - stuff to output sequences and alignments in web
+ * or ascii viewable form.
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "obscure.h"
+#include "dnautil.h"
+#include "fuzzyFind.h"
+#include "seqOut.h"
+#include "htmshell.h"
+#include "axt.h"
+
+
+struct cfm *cfmNew(int wordLen, int lineLen,
+	boolean lineNumbers, boolean countDown, FILE *out, int numOff)
+/* Set up colored sequence formatting for html. */
+{
+struct cfm *cfm;
+AllocVar(cfm);
+cfm->inWord = cfm->inLine = cfm->charCount = 0;
+cfm->color = 0;
+cfm->wordLen = wordLen;
+cfm->lineLen = lineLen;
+cfm->lineNumbers = lineNumbers;
+cfm->countDown = countDown;
+cfm->out = out;
+cfm->numOff = numOff;
+cfm->bold = cfm->underline = cfm->italic = FALSE;
+return cfm;
+}
+
+static void cfmPopFormat(struct cfm *cfm)
+/* Restore format to default. */
+{
+if (cfm->color != 0)
+    fprintf(cfm->out, "</span>");
+if (cfm->underline)
+    fprintf(cfm->out, "</span>");
+if (cfm->bold)
+  fprintf(cfm->out, "</B>");
+if (cfm->italic)
+  fprintf(cfm->out, "</I>");
+}
+
+static void cfmPushFormat(struct cfm *cfm)
+/* Set format. */
+{
+if (cfm->italic)
+  fprintf(cfm->out, "<I>");
+if (cfm->bold)
+  fprintf(cfm->out, "<B>");
+if (cfm->underline)
+    fprintf(cfm->out, "<span style='text-decoration:underline;'>");
+if (cfm->color != 0)
+    fprintf(cfm->out, "<span style='color:#%06X;'>", cfm->color);
+}
+
+void cfmOutExt(struct cfm *cfm, char c, int color, boolean underline, boolean bold, boolean italic)
+/* Write out a byte, and formatting extras  */
+{
+if (color != cfm->color || underline != cfm->underline
+   || bold != cfm->bold || italic != cfm->italic)
+   {
+   cfmPopFormat(cfm);
+   cfm->color = color;
+   cfm->underline = underline;
+   cfm->bold = bold;
+   cfm->italic = italic;
+   cfmPushFormat(cfm);
+   }
+
+++cfm->charCount;
+fputc(c, cfm->out);
+if (cfm->wordLen)
+    {
+    if (++cfm->inWord >= cfm->wordLen)
+	{
+	cfmPopFormat(cfm);
+	fputc(' ', cfm->out);
+	cfmPushFormat(cfm);
+	cfm->inWord = 0;
+	}
+    }
+if (cfm->lineLen)
+    {
+    if (++cfm->inLine >= cfm->lineLen)
+	{
+	if (cfm->lineNumbers)
+	    {
+	    int pos = cfm->charCount;
+	    if (cfm->countDown)
+		{
+	        pos = 1-pos;
+		}
+	    pos += cfm->numOff;
+	    cfmPopFormat(cfm);
+	    fprintf(cfm->out, " %d", pos);
+	    cfmPushFormat(cfm);
+	    }
+	fprintf(cfm->out, "\n");
+	cfm->inLine = 0;
+	}
+    }
+}
+
+void cfmOut(struct cfm *cfm, char c, int color)
+/* Write out a byte, and depending on color formatting extras  */
+{
+cfmOutExt(cfm, c, color, FALSE, FALSE, FALSE);
+}
+
+void cfmFree(struct cfm **pCfm)
+/* Finish up cfm formatting job. */
+{
+struct cfm *cfm = *pCfm;
+if (cfm != NULL)
+    {
+    cfmPopFormat(cfm);
+    freez(pCfm);
+    }
+}
+
+int seqOutColorLookup[] =
+    {
+    0x000000,
+    0x3300FF,
+    0x22CCEE,
+    0xFF0033,
+    0xFFcc22,
+    0x00aa00,
+    0xFF0000,
+    };
+
+
+void bafInit(struct baf *baf, DNA *needle, int nNumOff,  boolean nCountDown,
+        DNA *haystack, int hNumOff, boolean hCountDown, FILE *out,
+        int lineSize, boolean isTrans )
+/* Initialize block alignment formatter. */
+{
+baf->cix = 0;
+baf->needle = needle;
+baf->nCountDown = nCountDown;
+baf->haystack = haystack;
+baf->nNumOff = nNumOff;
+baf->hNumOff = hNumOff;
+baf->hCountDown = hCountDown;
+baf->out = out;
+baf->lineSize = lineSize;
+baf->isTrans = isTrans;
+baf->nCurPos = baf->hCurPos = 0;
+baf->nLineStart = baf->hLineStart = 0;
+}
+
+void bafSetAli(struct baf *baf, struct ffAli *ali)
+/* Set up block formatter around an ffAli block. */
+{
+baf->nCurPos = ali->nStart - baf->needle;
+baf->hCurPos = ali->hStart - baf->haystack;
+}
+
+void bafSetPos(struct baf *baf, int nStart, int hStart)
+/* Set up block formatter starting at nStart/hStart. */
+{
+if (baf->isTrans)
+    nStart *= 3;
+baf->nCurPos = nStart;
+baf->hCurPos = hStart;
+}
+
+void bafStartLine(struct baf *baf)
+/* Set up block formatter to start new line at current position. */
+{
+baf->nLineStart = baf->nCurPos;
+baf->hLineStart = baf->hCurPos;
+}
+
+static int maxDigits(int x, int y)
+{
+int xDigits = digitsBaseTen(x);
+int yDigits = digitsBaseTen(y);
+return (xDigits > yDigits ? xDigits : yDigits);
+}
+
+void bafWriteLine(struct baf *baf)
+/* Write out a line of an alignment (which takes up
+ * three lines on the screen. */
+{
+int i;
+int count = baf->cix;
+int nStart = baf->nLineStart + 1 + baf->nNumOff;
+int hStart = baf->hLineStart + 1 + baf->hNumOff;
+int nEnd = baf->nCurPos + baf->nNumOff;
+int hEnd = baf->hCurPos + baf->hNumOff;
+int startDigits = maxDigits(nStart, hStart);
+int endDigits = maxDigits(nEnd, hEnd);
+int hStartNum, hEndNum;
+int nStartNum, nEndNum;
+static struct axtScoreScheme *ss = 0;  /* Scoring scheme. */
+struct cfm cfm;
+extern char blosumText[];
+extern struct axtScoreScheme *axtScoreSchemeFromProteinText(char *text, char *fileName);
+boolean revArrows = (baf->nCountDown ^ baf->hCountDown);
+char arrowChar = (revArrows ? '<' : '>');
+
+ZeroVar(&cfm);
+cfm.out = baf->out;
+if (ss == 0)
+    ss = axtScoreSchemeFromProteinText(blosumText, "fake");
+
+if (baf->nCountDown)
+    {
+    nStartNum = baf->nNumOff - baf->nLineStart;
+    nEndNum = 1+baf->nNumOff - baf->nCurPos;
+    }
+else
+    {
+    nStartNum = 1+baf->nNumOff + baf->nLineStart;
+    nEndNum = baf->nNumOff + baf->nCurPos;
+    }
+fprintf(baf->out, "%0*d ", startDigits, nStartNum);
+for (i=0; i<count; ++i)
+    fputc(baf->nChars[i], baf->out);
+fprintf(baf->out, " %0*d\n", endDigits, nEndNum);
+
+for (i=0; i<startDigits; ++i)
+    fputc(arrowChar, baf->out);
+fputc(' ', baf->out);
+for (i=0; i<count; ++i)
+    {
+    char n,h,c =  ' ';
+
+    n = baf->nChars[i];
+    h = baf->hChars[i];
+    if (baf->isTrans)
+        {
+	if (n != ' ')
+	    {
+	    DNA codon[4];
+	    codon[0] = baf->hChars[i-1];
+	    codon[1] = h;
+	    codon[2] = baf->hChars[i+1];
+	    codon[3] = 0;
+	    tolowers(codon);
+	    c  = lookupCodon(codon);
+	    cfmPushFormat(&cfm);
+	    if (toupper(n) == c)
+		cfmOut(&cfm, '|', seqOutColorLookup[0]);
+            else
+                {
+                int color;
+
+                if (c == 0)
+                    c = 'X';
+                if (ss->matrix[(int)toupper(n)][(int)c] > 0)
+		    color = 5;
+		else
+		    color = 6;
+		cfmOut(&cfm, c, seqOutColorLookup[color]);
+		}
+	    cfmPopFormat(&cfm);
+	    }
+	else
+	    {
+	    fputc(c, baf->out);
+	    }
+	}
+    else
+        {
+	if (toupper(n) == toupper(h))
+	     c = '|';
+	fputc(c, baf->out);
+	}
+    }
+fputc(' ', baf->out);
+for (i=0; i<endDigits; ++i)
+    fputc(arrowChar, baf->out);
+fprintf(baf->out, "\n");
+
+if (baf->hCountDown)
+    {
+    hStartNum = baf->hNumOff - baf->hLineStart;
+    hEndNum = 1+baf->hNumOff - baf->hCurPos;
+    }
+else
+    {
+    hStartNum = 1+baf->hNumOff + baf->hLineStart;
+    hEndNum = baf->hNumOff + baf->hCurPos;
+    }
+fprintf(baf->out, "%0*d ", startDigits, hStartNum);
+for (i=0; i<count; ++i)
+    fputc(baf->hChars[i], baf->out);
+fprintf(baf->out, " %0*d\n\n", endDigits, hEndNum);
+}
+
+void bafOut(struct baf *baf, char n, char h)
+/* Write a pair of character to block alignment. */
+{
+baf->nChars[baf->cix] = n;
+baf->hChars[baf->cix] = h;
+if (n != '.' && n != '-')
+    baf->nCurPos += 1;
+if (h != '.' && h != '-')
+    baf->hCurPos += 1;
+if (++(baf->cix) >= baf->lineSize)
+    {
+    bafWriteLine(baf);
+    baf->cix = 0;
+    baf->nLineStart = baf->nCurPos;
+    baf->hLineStart = baf->hCurPos;
+    }
+}
+
+void bafFlushLineNoHr(struct baf *baf)
+/* Write out alignment line if it has any characters in it (no <HR>). */
+{
+if (baf->cix > 0)
+    bafWriteLine(baf);
+fflush(baf->out);
+baf->cix = 0;
+}
+
+void bafFlushLine(struct baf *baf)
+/* Write out alignment line if it has any characters in it, and an <HR>. */
+{
+bafFlushLineNoHr(baf);
+fprintf(baf->out, "<HR ALIGN=\"CENTER\">");
+}
+
diff --git a/gbtools/src/blatSrc/lib/seqStats.c b/gbtools/src/blatSrc/lib/seqStats.c
new file mode 100644
index 0000000..e1e0df0
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/seqStats.c
@@ -0,0 +1,39 @@
+/* Copyright (C) 2005 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "dnautil.h"
+#include "seqStats.h"
+
+double dnaMatchEntropy(DNA *query, DNA *target, int baseCount)
+/* Return entropy of matching bases - a number between 0 and 1, with
+ * higher numbers the more diverse the matching bases. */
+{
+#define log4 1.386294
+#define invLog4 (1.0/log4)
+double p, q, e = 0, invTotal;
+int c, count[4], total;
+int i, qVal, tVal;
+count[0] = count[1] = count[2] = count[3] = 0;
+for (i=0; i<baseCount; ++i)
+    {
+    qVal = ntVal[(int)query[i]];
+    tVal = ntVal[(int)target[i]];
+    if (qVal == tVal && qVal >= 0)
+	count[qVal] += 1;
+    }
+total = count[0] + count[1] + count[2] + count[3];
+invTotal = 1.0/total;
+for (i=0; i<4; ++i)
+    {
+    if ((c = count[i]) > 0)
+        {
+	p = c * invTotal;
+	q = log(p);
+	e -= p*q;
+	}
+    }
+e *= invLog4;
+return e;
+}
+
diff --git a/gbtools/src/blatSrc/lib/servBrcMcw.c b/gbtools/src/blatSrc/lib/servBrcMcw.c
new file mode 100644
index 0000000..6e945d1
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/servBrcMcw.c
@@ -0,0 +1,47 @@
+/* Stuff that's specific for .brc.mcw.edu server goes here. 
+ *
+ * This file is copyright 2004 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "portable.h"
+#include "portimpl.h"
+#include "obscure.h"
+#include "hash.h"
+
+
+static char *__trashDir = "/trash";
+
+static void _makeTempName(struct tempName *tn, char *base, char *suffix)
+/* Figure out a temp name, and how CGI and HTML will access it. */
+{
+char *tname;
+
+tname = rTempName(__trashDir, base, suffix);
+strcpy(tn->forCgi, tname);
+strcpy(tn->forHtml, tname);
+}
+
+static char *_cgiDir()
+{
+return "/cgi-bin/";
+}
+
+static char *_trashDir()
+{
+return __trashDir;
+}
+
+static double _speed()
+{
+return 3.0;
+}
+    
+struct webServerSpecific wssBrcMcw =
+    {
+    "default",
+    _makeTempName,
+    _cgiDir,
+    _speed,
+    _trashDir,
+    };
diff --git a/gbtools/src/blatSrc/lib/servCrunx.c b/gbtools/src/blatSrc/lib/servCrunx.c
new file mode 100644
index 0000000..a85e1f7
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/servCrunx.c
@@ -0,0 +1,51 @@
+/* Stuff that's specific for local linux server goes here. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "portable.h"
+#include "portimpl.h"
+#include "obscure.h"
+
+
+static char *__trashDir = "/home/httpd/html/trash";
+
+static void _makeTempName(struct tempName *tn, char *base, char *suffix)
+/* Figure out a temp name, and how CGI and HTML will access it. */
+{
+char *tname;
+char *tempDirCgi = __trashDir;
+char *tempDirHtml = "/trash";
+int tlcLen = strlen(tempDirCgi);
+int tlhLen = strlen(tempDirHtml);
+
+tname = rTempName(tempDirCgi, base, suffix);
+strcpy(tn->forCgi, tname);
+memcpy(tn->forHtml, tempDirHtml, tlhLen);
+strcpy(tn->forHtml+tlhLen, tn->forCgi+tlcLen);
+}
+
+static char *_cgiDir()
+{
+return "../cgi-bin/";
+}
+
+static char *_trashDir()
+{
+return __trashDir;
+}
+
+static double _speed()
+{
+return 3.0;
+}
+    
+struct webServerSpecific wssLinux =
+    {
+    "linux",
+    _makeTempName,
+    _cgiDir,
+    _speed,
+    _trashDir,
+    };
diff --git a/gbtools/src/blatSrc/lib/servcis.c b/gbtools/src/blatSrc/lib/servcis.c
new file mode 100644
index 0000000..b79e15c
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/servcis.c
@@ -0,0 +1,48 @@
+/* Stuff that's specific for Comp Science dept. web server goes here. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "portable.h"
+#include "portimpl.h"
+#include "obscure.h"
+#include "hash.h"
+
+
+static char *__trashDir = "../trash";
+
+static void _makeTempName(struct tempName *tn, char *base, char *suffix)
+/* Figure out a temp name, and how CGI and HTML will access it. */
+{
+char *tname;
+
+tname = rTempName(__trashDir, base, suffix);
+strcpy(tn->forCgi, tname);
+strcpy(tn->forHtml, tname);
+}
+
+static char *_cgiDir()
+{
+return "../cgi-bin/";
+}
+
+static char *_trashDir()
+{
+return __trashDir;
+}
+
+static double _speed()
+{
+return 3.0;
+}
+
+    
+struct webServerSpecific wssDefault =
+    {
+    "default",
+    _makeTempName,
+    _cgiDir,
+    _speed,
+    _trashDir,
+    };
diff --git a/gbtools/src/blatSrc/lib/servcl.c b/gbtools/src/blatSrc/lib/servcl.c
new file mode 100644
index 0000000..0825d66
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/servcl.c
@@ -0,0 +1,49 @@
+/* "Web Server" for command line execution. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "portable.h"
+#include "portimpl.h"
+#include "obscure.h"
+
+
+static char *__trashDir = ".";
+
+static void _makeTempName(struct tempName *tn, char *base, char *suffix)
+/* Figure out a temp name, and how CGI and HTML will access it. */
+{
+char *tname = rTempName(__trashDir, base, suffix);
+strcpy(tn->forCgi, tname);
+strcpy(tn->forHtml, tn->forCgi);
+}
+
+static char *_cgiDir()
+{
+char *jkwebDir;
+if ((jkwebDir = getenv("JKWEB")) == NULL)
+    return "";
+else
+    return jkwebDir;
+}
+
+static char *_trashDir()
+{
+return __trashDir;
+}
+
+static double _speed()
+{
+return 1.0;
+}
+    
+    
+struct webServerSpecific wssCommandLine =
+    {
+    "commandLine",
+    _makeTempName,
+    _cgiDir,
+    _speed,
+    _trashDir,
+    };
diff --git a/gbtools/src/blatSrc/lib/servmsII.c b/gbtools/src/blatSrc/lib/servmsII.c
new file mode 100644
index 0000000..c56c6c3
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/servmsII.c
@@ -0,0 +1,45 @@
+/* Stuff that's specific for the MS II Web Server goes here. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "portable.h"
+#include "portimpl.h"
+#include "obscure.h"
+
+
+static char *__trashDir = "..\\trash";
+
+static void _makeTempName(struct tempName *tn, char *base, char *suffix)
+/* Figure out a temp name, and how CGI and HTML will access it. */
+{
+long tempIx = incCounterFile("tcounter");
+sprintf(tn->forCgi, "%s\\%s%ld%s", __trashDir, base, tempIx, suffix);
+sprintf(tn->forHtml, "%s\\%s%ld%s", __trashDir, base, tempIx, suffix);
+}
+
+static char *_cgiDir()
+{
+return "";
+}
+
+static char *_trashDir()
+{
+return __trashDir;
+}
+
+static double _speed()
+{
+return 2.5;
+}
+
+    
+struct webServerSpecific wssMicrosoftII =
+    {
+    "Microsoft-IIS",
+    _makeTempName,
+    _cgiDir,
+    _speed,
+    _trashDir,
+    };
diff --git a/gbtools/src/blatSrc/lib/servpws.c b/gbtools/src/blatSrc/lib/servpws.c
new file mode 100644
index 0000000..6ee091e
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/servpws.c
@@ -0,0 +1,44 @@
+/* Stuff that's specific for the Personal Web Server goes here. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "portable.h"
+#include "portimpl.h"
+#include "obscure.h"
+
+
+static char *__trashDir = "..\\trash";
+
+static void _makeTempName(struct tempName *tn, char *base, char *suffix)
+/* Figure out a temp name, and how CGI and HTML will access it. */
+{
+long tempIx = incCounterFile("tcounter");
+sprintf(tn->forCgi, "%s\\%s%ld%s", __trashDir, base, tempIx, suffix);
+sprintf(tn->forHtml, "%s\\%s%ld%s", __trashDir, base, tempIx, suffix);
+}
+
+static char *_cgiDir()
+{
+return "../cgi-bin/";
+}
+
+static char *_trashDir()
+{
+return __trashDir;
+}
+
+static double _speed()
+{
+return 1.25;
+}
+        
+struct webServerSpecific wssMicrosoftPWS =
+    {
+    "Microsoft-PWS",
+    _makeTempName,
+    _cgiDir,
+    _speed,
+    _trashDir,
+    };
diff --git a/gbtools/src/blatSrc/lib/shaRes.c b/gbtools/src/blatSrc/lib/shaRes.c
new file mode 100644
index 0000000..740d472
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/shaRes.c
@@ -0,0 +1,80 @@
+/* ShaRes.c - implementation of shared resources 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "shaRes.h"
+
+
+static void shaFreeNode(struct shaResNode *node)
+/* Free a node.  (Don't look at link count, just do it.) */
+{
+struct shaResNode *next = node->next;
+struct shaResNode *prev = node->prev;
+struct shaResList *list = node->list;
+
+if (next != NULL)
+    next->prev = prev;
+if (prev != NULL)
+    prev->next = next;
+else
+    list->head = next;
+list->freeData(node->data);
+freeMem(node->name);
+freeMem(node);
+}        
+
+void shaUnlink(struct shaResNode *node)
+/* Decrement link count and free if down to zero. */
+{
+if (--node->links <= 0)
+    shaFreeNode(node);
+}
+
+void shaLink(struct shaResNode *node)
+/* Increment link count. */
+{
+++node->links;
+}
+
+struct shaResNode *shaNewNode(struct shaResList *list, char *name, void *data)
+/* Create a new node with link count of one. */
+{
+struct shaResNode *nn = needMem(sizeof(*nn));
+struct shaResNode *head = list->head;
+
+/* Store the goods and what list we're on, and start with one link. */
+nn->list = list;
+nn->data = data;
+nn->links = 1;
+nn->name = cloneString(name);
+
+/* Put us at the front of the list. */
+nn->next = head;
+nn->prev = NULL;
+if (head != NULL)
+    head->prev = nn;
+list->head = nn;
+return nn;
+}
+
+void shaCleanup(struct shaResList *list)
+/* Free every node on list. */
+{
+struct shaResNode *node, *next;
+
+for (node = list->head;node != NULL;node = next)
+    {
+    next = node->next;
+    shaFreeNode(node);
+    }
+list->head = NULL;
+}
+
+void shaInit(struct shaResList *list, void (*freeData)(void *pData))
+/* Start up resource list. */
+{
+list->head = NULL;
+list->freeData = freeData;
+}
diff --git a/gbtools/src/blatSrc/lib/slog.c b/gbtools/src/blatSrc/lib/slog.c
new file mode 100644
index 0000000..a38bcd5
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/slog.c
@@ -0,0 +1,32 @@
+/* slog - fixed point scaled logarithm stuff. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "slog.h"
+
+
+double fSlogScale = 8192.0;	/* Convert to fixed point by multiplying by this. */
+double invSlogScale = 0.0001220703125; /* Conver back to floating point with this. */
+
+int slog(double val)
+/* Return scaled log. */
+{
+return (round(fSlogScale*log(val)));
+}
+
+int carefulSlog(double val)
+/* Returns scaled log that makes sure there's no int overflow. */
+{
+if (val < 0.0000001)
+    val = 0.0000001;
+return slog(val);
+}
+
+double invSlog(int scaledLog)
+/* Inverse of slog. */
+{
+return exp(scaledLog*invSlogScale);
+}
+
diff --git a/gbtools/src/blatSrc/lib/snof.c b/gbtools/src/blatSrc/lib/snof.c
new file mode 100644
index 0000000..cea5631
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/snof.c
@@ -0,0 +1,293 @@
+/* Snof.c Sorted Name Offset File.
+ * This accesses a file of name/offset pairs that are sorted by
+ * name.  Does a binary search of file to find the offset given name.
+ * Most typically this is used to do a quick lookup given an index file. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "snof.h"
+#include "snofmake.h"
+
+
+void snofClose(struct snof **pSnof)
+/* Close down the index file. */
+{
+struct snof *snof = *pSnof;
+if (snof != NULL)
+    {
+    if (snof->file != NULL)
+        fclose(snof->file);
+    if (snof->first != NULL)
+        freeMem(snof->first);
+    freeMem(snof);
+    *pSnof = NULL;
+    }
+}
+
+static boolean makeSnofName(char *snofName, char *rootName)
+/* Figure out whether it's .xi or .ix by looking at
+ * signature.  Usually just need to open a file to
+ * do this once per program run. */
+{
+static char *suffixes[2] = {".ix", ".xi"};
+static char *suff = NULL;
+int sigBuf[4];
+FILE *f;
+int i;
+
+if (suff == NULL)
+    {
+    for (i=0; i<ArraySize(suffixes); ++i)
+	{
+	sprintf(snofName, "%s%s", rootName, suffixes[i]);
+	if ((f = fopen(snofName, "rb")) != NULL)
+	    {
+	    if ((fread(sigBuf, sizeof(sigBuf), 1, f)) == 1)
+		{
+		if (isSnofSig(&sigBuf))
+		    {
+		    suff = suffixes[i];
+		    }
+		}
+	    fclose(f);
+	    }
+	if (suff != NULL)
+	    break;
+	}
+    }
+if (suff == NULL)
+    return FALSE;
+sprintf(snofName, "%s%s", rootName, suff);
+return TRUE;
+}
+
+struct snof *snofOpen(char *indexName)
+/* Open up the index file.  Returns NULL if there's any problem. */
+{
+struct snof *snof;
+int sigBuf[4];
+FILE *f;
+char fileName[512];
+
+if (!makeSnofName(fileName, indexName))
+    return NULL;
+if ((snof = needMem(sizeof(*snof))) == NULL)
+    return NULL;
+
+if ((snof->file = f = fopen(fileName, "rb")) == NULL)
+    {
+    freeMem(snof);
+    return NULL;
+    }
+if ((fread(sigBuf, sizeof(sigBuf), 1, f)) != 1)
+    {
+    snofClose(&snof);
+    return NULL;
+    }
+if (!isSnofSig(&sigBuf))
+    {
+    snofClose(&snof);
+    return NULL;
+    }
+if ((fread(&snof->maxNameSize, sizeof(snof->maxNameSize), 1, f)) != 1)
+    {
+    snofClose(&snof);
+    return NULL;
+    }
+snof->headSize = ftell(f);
+snof->itemSize = snof->maxNameSize + sizeof(unsigned);
+if ((snof->first = needMem(5*snof->itemSize)) == NULL)
+    {
+    snofClose(&snof);
+    return NULL;
+    }
+snof->last = snof->first + snof->itemSize;
+snof->less = snof->last + snof->itemSize;
+snof->mid = snof->less + snof->itemSize;
+snof->more = snof->mid + snof->itemSize;
+
+if (fread(snof->first, snof->itemSize, 1, f) != 1)
+    {
+    snofClose(&snof);
+    return NULL;
+    }
+fseek(f, -snof->itemSize, SEEK_END);
+snof->endIx = (ftell(f)-snof->headSize)/snof->itemSize;
+if (fread(snof->last, snof->itemSize, 1, f) != 1)
+    {
+    snofClose(&snof);
+    return NULL;
+    }
+return snof;
+}
+
+struct snof *snofMustOpen(char *indexName)
+/* Open up index file or die. */
+{
+struct snof *snof = snofOpen(indexName);
+if (snof == NULL)
+    errAbort("Couldn't open index file %s", indexName);
+return snof;
+}
+
+static long retrieveOffset(char *item, int itemSize)
+{
+unsigned offset;
+memcpy(&offset, item+itemSize-sizeof(offset), sizeof(offset));
+return offset;
+}
+
+static int snofCmp(char *prefix, char *name, int maxSize, boolean isPrefix)
+{
+if (isPrefix)
+    return memcmp(prefix, name, maxSize);
+else
+    return strcmp(prefix, name);
+}
+
+static boolean snofSearch(struct snof *snof, char *name, int nameSize, 
+    boolean isPrefix, int *pIx, char **pNameOffset)
+/* Find index of name by binary search.
+ * Returns FALSE if no such name in the index file. */
+ {
+char *startName, *endName, *midName;
+int startIx, endIx, midIx;
+int cmp;
+int itemSize = snof->itemSize;
+FILE *f = snof->file;
+int headSize = snof->headSize;
+
+/* Truncate name size if necessary. */
+if (nameSize > snof->maxNameSize)
+    nameSize = snof->maxNameSize;
+
+/* Set up endpoints of binary search */
+startName = snof->less;
+memcpy(startName, snof->first, itemSize);
+endName = snof->more;
+memcpy(endName, snof->last, itemSize);
+midName = snof->mid;
+
+startIx = 0;
+endIx = snof->endIx;
+
+/* Check for degenerate initial case */
+if (snofCmp(name, startName, nameSize, isPrefix) == 0)
+    {
+    *pIx = startIx;
+    *pNameOffset = startName;
+    return TRUE;
+    }
+if (snofCmp(name, endName, nameSize, isPrefix) == 0)
+    {
+    *pIx = endIx;
+    *pNameOffset =  endName;
+    return TRUE;
+    }
+
+/* Do binary search. */
+for (;;)
+    {
+    midIx = (startIx + endIx ) / 2;
+    if (midIx == startIx || midIx == endIx)
+	{
+        *pIx = -1;
+        return FALSE;
+        }
+    fseek(f, headSize + midIx*itemSize, SEEK_SET);
+    if (fread(midName, itemSize, 1, f) < 1)
+        {
+        *pIx = 0;
+        return FALSE;
+        }
+    cmp = snofCmp(name, midName, nameSize, isPrefix);
+    if (cmp == 0)
+        {
+        *pIx = midIx;
+        *pNameOffset = midName;
+        return TRUE;
+        }
+    else if (cmp > 0)
+	{
+	memcpy(startName, midName, itemSize);
+	startIx = midIx;
+	}
+    else
+	{
+	memcpy(endName, midName, itemSize);
+	endIx = midIx;
+	}
+    }
+}
+
+boolean snofFindOffset(struct snof *snof, char *name, long *pOffset)
+/* Find offset corresponding with name.  Returns FALSE if no such name
+ * in the index file. */
+{
+char *nameOffset;
+int matchIx;
+if (!snofSearch(snof, name, strlen(name), FALSE,  &matchIx, &nameOffset))
+    {
+    *pOffset = matchIx; /* Pass along error code such as it is. */
+    return FALSE;
+    }
+*pOffset = retrieveOffset(nameOffset, snof->itemSize);
+return TRUE;
+}
+
+boolean snofFindFirstStartingWith(struct snof *snof, char *prefix, int prefixSize,
+    int *pSnofIx)
+/* Find first index in snof file whose name begins with prefix. */
+{
+char *nameOffset;
+int matchIx;
+if (!snofSearch(snof, prefix, prefixSize, TRUE,  &matchIx, &nameOffset))
+    {
+    *pSnofIx = matchIx; /* Pass along error code such as it is. */
+    return FALSE;
+    }
+while (--matchIx >= 0)
+    {
+    nameOffset = snofNameAtIx(snof, matchIx);
+    if (snofCmp(prefix, nameOffset, prefixSize, TRUE) != 0)
+        break;
+    }
+++matchIx;
+*pSnofIx = matchIx;
+return TRUE;
+}
+
+int snofElementCount(struct snof *snof)
+/* How many names are in snof file? */
+{
+return snof->endIx + 1;
+}
+
+long snofOffsetAtIx(struct snof *snof, int ix)
+/* The offset of a particular index in file. */
+{
+char *nameOffset = snofNameAtIx(snof, ix);
+return retrieveOffset(nameOffset, snof->itemSize);
+}
+
+char *snofNameAtIx(struct snof *snof, int ix)
+/* The name at a particular index in file.  (This will be overwritten by
+ * later calls to snof system. Strdup if you want to keep it.)
+ */
+{
+fseek(snof->file, snof->headSize + ix*snof->itemSize, SEEK_SET);
+if (fread(snof->mid, snof->itemSize, 1, snof->file) != 1 && ferror(snof->file))
+    errAbort("snofNameAtIx: fread failed: %s", strerror(ferror(snof->file)));
+return snof->mid;
+}
+
+void snofNameOffsetAtIx(struct snof *snof, int ix, char **pName, long *pOffset)
+/* Get both name and offset for an index. */
+{
+char *nameOffset = snofNameAtIx(snof, ix);
+*pName = nameOffset;
+*pOffset = retrieveOffset(nameOffset, snof->itemSize);
+}
+
diff --git a/gbtools/src/blatSrc/lib/snofmake.c b/gbtools/src/blatSrc/lib/snofmake.c
new file mode 100644
index 0000000..5cf5209
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/snofmake.c
@@ -0,0 +1,228 @@
+/* snofmake - Write out an index file. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "localmem.h"
+#include "snofmake.h"
+#include "errAbort.h"
+
+
+static jmp_buf errRecover;
+
+static void ourErrAbort()
+/* Default error handler. Prints message and exits
+ * program. */
+{
+longjmp(errRecover, -1);
+}
+
+static struct lm *lm;
+
+static void initMem()
+{
+lm = lmInit((1<<16));
+}
+
+static void cleanupMem()
+{
+lmCleanup(&lm);
+}
+
+static void *localNeedMem(int size)
+{
+return lmAlloc(lm, size);
+}
+
+struct offsetList
+    {
+    struct offsetList *next;
+    char *name;
+    unsigned offset;
+    };
+
+static struct offsetList *newOffset(char *name, int nameLen)
+/* Return a fresh name list entry. */
+{
+struct offsetList *nl = localNeedMem(sizeof(*nl));
+nl->name = localNeedMem(nameLen+1);
+memcpy(nl->name, name, nameLen);
+nl->name[nameLen] = 0;
+return nl;
+}
+
+static int cmpOffsetPointers(const void *va, const void *vb)
+/* comparison function for qsort on an array of offset pointers*/
+{
+struct offsetList **pa, **pb;
+struct offsetList *a, *b;
+pa = (struct offsetList **)va;
+pb = (struct offsetList **)vb;
+a = *pa;
+b = *pb;
+return strcmp(a->name, b->name);
+}
+
+static int longestNameSize(struct offsetList *list)
+{
+struct offsetList *el;
+int size, longestSize = 0;
+
+for (el = list; el != NULL; el = el->next)
+    {
+    size = strlen(el->name);
+    if (size > longestSize) 
+        {
+        longestSize = size;
+        }
+    }
+return longestSize;
+}
+
+static struct offsetList *makeOffsetList(FILE *inFile, 
+    boolean (*nextRecord)(FILE *inFile, void *data, char **rName, int *rNameLen), void *data)
+/* Build up a list of records and their offsets into file. */
+{
+struct offsetList *list = NULL;
+struct offsetList *newEl;
+for (;;)
+    {
+    long offset = ftell(inFile);
+    char *name;
+    int nameLen;
+    if (!nextRecord(inFile, data, &name, &nameLen))
+        break;
+    if (nameLen > 0)
+        {
+        newEl = newOffset(name, nameLen);
+        newEl->offset = offset;
+        newEl->next = list;
+        list = newEl;
+        }
+    }
+slReverse(&list);
+return list;
+}
+
+boolean warnAboutDupes(struct offsetList **array, int size)
+/* Since list is sorted it's easy to warn about duplications. */
+{
+char *name, *prevName;
+int i;
+boolean ok = TRUE;
+
+if (size < 2)
+    return FALSE;
+prevName = array[0]->name;
+for (i=1; i<size; ++i)
+    {
+    name = array[i]->name;
+    if (!differentWord(name, prevName))
+	{
+        warn("Duplicate strings: %s %s", prevName, name);
+	ok = FALSE;
+	}
+    prevName = name;
+    }
+return ok;
+}
+
+static void makeIndex(FILE *in, FILE *out, 
+    boolean (*nextRecord)(FILE *in, void *data, char **rName, int *rNameLen), void *data,
+    boolean dupeOk)
+/* Make index.  Throw error if there's a problem. */
+{
+struct offsetList *list;
+int listSize;
+struct offsetList **array;
+int i;
+struct offsetList *el;
+int nameSize;
+char *nameBuf;
+char *indexSig;
+int indexSigSize;
+
+printf("Reading input\n");
+list = makeOffsetList(in, nextRecord, data);
+listSize = slCount(list);
+array = localNeedMem(listSize * sizeof(*array));
+nameSize = longestNameSize(list)+1;
+
+printf("Got %d offsets %d nameSize.  Sorting...\n", listSize, nameSize);
+nameBuf = localNeedMem(nameSize);
+
+/* Make an array of pointers, one for each element in list. */
+for (i=0, el = list; i<listSize; i+=1, el = el->next)
+    array[i] = el;
+
+/* Sort alphabetically based on name. */
+qsort(array, listSize, sizeof(array[0]), cmpOffsetPointers);
+if (!dupeOk)
+    warnAboutDupes(array, listSize);
+
+/* Write out file header */
+printf("Writing index file \n");
+snofSignature(&indexSig, &indexSigSize);
+mustWrite(out, indexSig, indexSigSize);
+mustWrite(out, &nameSize, sizeof(nameSize));
+    
+/* Write out sorted output */
+for (i=0; i<listSize; ++i)
+    {
+    zeroBytes(nameBuf, nameSize);
+    strcpy(nameBuf, array[i]->name);
+    mustWrite(out, nameBuf, nameSize);
+    mustWrite(out, &array[i]->offset, sizeof(array[i]->offset));
+    }
+}
+
+boolean snofDupeOkIndex(FILE *inFile, char *outName, 
+    boolean (*nextRecord)(FILE *inFile, void *data, char **rName, int *rNameLen), 
+    void *data, boolean dupeOk)
+/* Make an index file, as in snofMakeIndex, but optionally allow duplicates
+ * without complaining. */
+{
+FILE *outFile;
+int status;
+
+/* Initialize */
+if ((outFile = fopen(outName, "wb")) == NULL)
+    {
+    fprintf(stderr, "Couldn't create index file %s\n", outName);
+    return FALSE;
+    }
+initMem();
+
+/* Wrap error recovery around main routine. */
+status = setjmp(errRecover);
+if (status == 0)
+    {
+    pushAbortHandler(ourErrAbort);
+    makeIndex(inFile, outFile, nextRecord, data, dupeOk);
+    }
+popAbortHandler();
+
+/* Cleanup. */
+fclose(outFile);
+cleanupMem();
+return status == 0;
+}
+
+boolean snofMakeIndex(FILE *inFile, char *outName, 
+    boolean (*nextRecord)(FILE *inFile, void *data, char **rName, int *rNameLen), 
+    void *data)
+/* Make an index file - name/offset pairs that are sorted by name.
+ * Inputs:
+ *     inFile - open file that you're indexing with header read and verified.
+ *     outName - name of index file to create
+ *     nextRecord - function that reads next record in file you're indexing
+ *                  and returns the name of that record.
+ *     data - void pointer passed through to nextRecord.
+ *
+ * In this implementation this function just is an error recovery wrapper
+ * around the local function makeIndex, which does the real work. */
+{
+return snofDupeOkIndex(inFile, outName, nextRecord, data, FALSE);
+}
+
diff --git a/gbtools/src/blatSrc/lib/snofsig.c b/gbtools/src/blatSrc/lib/snofsig.c
new file mode 100644
index 0000000..9ae6b22
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/snofsig.c
@@ -0,0 +1,24 @@
+/* snofSig - signature (first 16 bytes) of a snof format file. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "snofmake.h"
+
+
+static int ixSig[4] = {0x693F8ED1, 0x7EDA1C32, 0x4BA58983, 0x277CB89C,};
+
+void snofSignature(char **rSig, int *rSigSize)
+/* Return signature. */
+{
+*rSig = (char *)ixSig;
+*rSigSize = sizeof(ixSig);
+}
+
+boolean isSnofSig(void *sig)
+/* Return true if sig is right. */
+{
+return memcmp(sig, ixSig, sizeof(ixSig)) == 0;
+}
+
diff --git a/gbtools/src/blatSrc/lib/spaceSaver.c b/gbtools/src/blatSrc/lib/spaceSaver.c
new file mode 100644
index 0000000..b39bd60
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/spaceSaver.c
@@ -0,0 +1,144 @@
+/* spaceSaver - routines that help layout 1-D objects into a
+ * minimum number of tracks so that no two objects overlap
+ * within a single track. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "spaceSaver.h"
+
+
+
+struct spaceSaver *spaceSaverMaxCellsNew(int winStart, int winEnd, int maxRows, int maxCells)
+/* Create a new space saver around the given window.   */
+{
+struct spaceSaver *ss;
+float winWidth;
+
+AllocVar(ss);
+ss->winStart = winStart;
+ss->winEnd = winEnd;
+ss->maxRows = maxRows;
+winWidth = winEnd - winStart;
+ss->cellsInRow = winWidth;
+while (ss->cellsInRow > maxCells)
+    ss->cellsInRow /= 2;
+ss->scale = ss->cellsInRow/winWidth;
+return ss;
+}
+
+struct spaceSaver *spaceSaverNew(int winStart, int winEnd, int maxRows)
+/* Create a new space saver around the given window.   */
+{
+return spaceSaverMaxCellsNew(winStart, winEnd, maxRows, 800);
+}
+
+void spaceSaverFree(struct spaceSaver **pSs)
+/* Free up a space saver. */
+{
+struct spaceSaver *ss = *pSs;
+if (ss != NULL)
+    {
+    struct spaceRowTracker *srt;
+    for (srt = ss->rowList; srt != NULL; srt = srt->next)
+	freeMem(srt->used);
+    slFreeList(&ss->rowList);
+    slFreeList(&ss->nodeList);
+    freez(pSs);
+    }
+}
+
+static boolean allClear(bool *b, int count)
+/* Return TRUE if count bools starting at b are all 0 */
+{
+int i;
+for (i=0; i<count; ++i)
+    if (b[i])
+	return FALSE;
+return TRUE;
+}
+
+struct spaceNode *spaceSaverAddOverflow(struct spaceSaver *ss, int start, int end, 
+					void *val, boolean allowOverflow)
+/* Add a new node to space saver. Returns NULL if can't fit item in
+ * and allowOverflow == FALSE. If allowOverflow == TRUE then put items
+ * that won't fit in last row. */
+{
+int cellStart, cellEnd, cellWidth;
+struct spaceRowTracker *srt, *freeSrt = NULL;
+int rowIx = 0;
+struct spaceNode *sn;
+
+if (ss->isFull)
+    return NULL;
+
+if ((start -= ss->winStart) < 0)
+    start = 0;
+end -= ss->winStart;	/* We'll clip this in cell coordinates. */
+
+cellStart = round(start * ss->scale);
+cellEnd = round(end * ss->scale)+1;
+if (cellEnd > ss->cellsInRow)
+    cellEnd = ss->cellsInRow;
+cellWidth = cellEnd - cellStart;
+
+/* Find free row. */
+for (srt = ss->rowList; srt != NULL; srt = srt->next)
+    {
+    if (allClear(srt->used + cellStart, cellWidth))
+	{
+	freeSrt = srt;
+	break;
+	}
+    ++rowIx;
+    }
+
+/* If no free row make new row. */
+if (freeSrt == NULL)
+    {
+    if (ss->rowCount >= ss->maxRows)
+	{
+	/* Abort if too many rows and no
+	   overflow allowed. */
+	if(!allowOverflow) 
+	    {
+	    ss->isFull = TRUE;
+	    return NULL;
+	    }
+	}
+    else 
+	{
+	AllocVar(freeSrt);
+	freeSrt->used = needMem(ss->cellsInRow);
+	slAddTail(&ss->rowList, freeSrt);
+	++ss->rowCount;
+	}
+    }
+
+/* Mark that part of row used (except in overflow case). */
+if(freeSrt != NULL)
+    memset(freeSrt->used + cellStart, 1, cellWidth);
+
+/* Make a space node. If allowing overflow it will
+ all end up in the last row. */
+AllocVar(sn);
+sn->row = rowIx;
+sn->val = val;
+slAddHead(&ss->nodeList, sn);
+return sn;
+}
+
+struct spaceNode *spaceSaverAdd(struct spaceSaver *ss, 
+	int start, int end, void *val)
+/* Add a new node to space saver. Returns NULL if can't fit
+ * item in. */
+{
+return spaceSaverAddOverflow(ss, start, end, val, FALSE);
+}
+
+void spaceSaverFinish(struct spaceSaver *ss)
+/* Tell spaceSaver done adding nodes. */
+{
+slReverse(&ss->nodeList);
+}
diff --git a/gbtools/src/blatSrc/lib/spacedColumn.c b/gbtools/src/blatSrc/lib/spacedColumn.c
new file mode 100644
index 0000000..371216b
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/spacedColumn.c
@@ -0,0 +1,137 @@
+/* spacedColumn - stuff to handle parsing text files where fields are
+ * fixed width rather than tab delimited. */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "linefile.h"
+#include "spacedColumn.h"
+#include "obscure.h"
+#include "sqlNum.h"
+
+
+struct spacedColumn *spacedColumnFromSample(char *sample)
+/* Return spaced column list from a sampleline , which is assumed to
+ * have no spaces except between columns */
+{
+struct spacedColumn *col, *colList = NULL;
+char *dupe = cloneString(sample);
+char *word, *line = dupe;
+while ((word = nextWord(&line)) != NULL)
+    {
+    AllocVar(col);
+    col->start = word - dupe;
+    col->size = strlen(word);
+    slAddHead(&colList, col);
+    }
+freeMem(dupe);
+slReverse(&colList);
+return colList;
+}
+
+struct spacedColumn *spacedColumnFromLineFile(struct lineFile *lf)
+/* Scan through lineFile and figure out column spacing. Assumes
+ * file contains nothing but columns. */
+{
+int maxLine = 64*1024;
+int lineSize, widestLine = 0;
+char *projection = needMem(maxLine+1);
+char *line;
+struct spacedColumn *colList;
+int i;
+
+/* Create projection of all lines. */
+for (i=0; i<maxLine; ++i)
+    projection[i] = ' ';
+while (lineFileNext(lf, &line, &lineSize))
+    {
+    if (lineSize > widestLine)
+         widestLine = lineSize;
+    for (i=0; i<lineSize; ++i)
+        {
+	char c = line[i];
+	if (c != 0 && c != ' ')
+	    projection[i] = line[i];
+	}
+    }
+projection[widestLine] = 0;
+colList = spacedColumnFromSample(projection);
+freeMem(projection);
+return colList;
+}
+
+struct spacedColumn *spacedColumnFromFile(char *fileName)
+/* Read file and figure out where columns are. */
+{
+struct lineFile *lf = lineFileOpen(fileName, TRUE);
+struct spacedColumn *colList = spacedColumnFromLineFile(lf);
+lineFileClose(&lf);
+return colList;
+}
+
+int spacedColumnBiggestSize(struct spacedColumn *colList)
+/* Return size of biggest column. */
+{
+int maxSize = 0;
+struct spacedColumn *col;
+for (col = colList; col != NULL; col = col->next)
+    if (maxSize < col->size)
+        maxSize = col->size;
+return maxSize;
+}
+
+boolean spacedColumnParseLine(struct spacedColumn *colList, 
+	char *line, char *row[])
+/* Parse line into row according to colList.  This will
+ * trim leading and trailing spaces. It will write 0's
+ * into line.  Returns FALSE if there's a problem (like
+ * line too short.) */
+{
+struct spacedColumn *col;
+int i, len = strlen(line);
+for (i=0, col = colList; col != NULL; col = col->next, ++i)
+    {
+    if (col->start > len)
+	return FALSE;
+    int end = col->start + col->size;
+    if (end > len) end = len;
+    line[end] = 0;
+    row[i] = trimSpaces(line + col->start);
+    }
+return TRUE;
+}
+
+struct spacedColumn *spacedColumnFromWidthArray(int array[], int size)
+/* Return a list of spaced columns corresponding to widths in array.
+ * The final char in each column should be whitespace. */
+{
+struct spacedColumn *col, *colList = NULL;
+int i;
+int start = 0;
+for (i=0; i<size; ++i)
+    {
+    int width = array[i];
+    AllocVar(col);
+    col->start = start;
+    col->size = width-1;
+    slAddHead(&colList, col);
+    start += width;
+    }
+slReverse(&colList);
+return colList;
+}
+
+struct spacedColumn *spacedColumnFromSizeCommaList(char *commaList)
+/* Given an comma-separated list of widths in ascii, return
+ * a list of spacedColumns. */
+{
+struct slName *ascii, *asciiList = commaSepToSlNames(commaList);
+int colCount = slCount(asciiList);
+int widths[colCount], i;
+for (ascii = asciiList, i=0; ascii != NULL; ascii = ascii->next, ++i)
+    widths[i] = sqlUnsigned(ascii->name);
+slFreeList(&asciiList);
+return spacedColumnFromWidthArray(widths, colCount);
+}
+
diff --git a/gbtools/src/blatSrc/lib/spacedSeed.c b/gbtools/src/blatSrc/lib/spacedSeed.c
new file mode 100644
index 0000000..4554eb4
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/spacedSeed.c
@@ -0,0 +1,68 @@
+/* spacedSeed - stuff to help with spaced seeds for alignments. */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "spacedSeed.h"
+
+
+/* Seeds - the weight 9 and 11 seeds are from PatternHunter paper.
+ * The weights 10,12,13,14,15,16,17 and 18 are from the Choi, Zeng,
+ * and Zhang paper.  The others are just guesses. */
+
+char *spacedSeeds[] = {
+    /*  0 */ "",
+    /*  1 */ "1",
+    /*  2 */ "11",
+    /*  3 */ "1101",
+    /*  4 */ "110101",
+    /*  5 */ "1101011",
+    /*  6 */ "111001011",
+    /*  7 */ "1110010111",
+    /*  8 */ "1110010100111",
+    /*  9 */ "111001010011011",
+    /* 10 */ "1101100011010111",
+    /* 11 */ "111010010100110111",
+    /* 12 */ "111010110100110111",
+    /* 13 */ "11101011001100101111",
+    /* 14 */ "111011100101100101111",
+    /* 15 */ "11110010101011001101111",
+#ifdef EVER_NEEDED_IN_64_BIT_MACHINE
+    /* 16 */ "111100110101011001101111",
+    /* 17 */ "111101010111001101101111",
+    /* 18 */ "1111011001110101011011111",
+#endif /* EVER_NEEDED_IN_64_BIT_MACHINE */
+};
+
+int spacedSeedMaxWeight()
+/* Return max weight of spaced seed. */
+{
+return ArraySize(spacedSeeds)-1;
+}
+
+int *spacedSeedOffsets(int weight)
+/* Return array with offsets for seed of given weight. */
+{
+char *seed;
+int *output, offset, outCount = 0, seedSize;
+
+assert(weight >= 1 && weight < ArraySize(spacedSeeds));
+seed = spacedSeeds[weight];
+seedSize = strlen(seed);
+AllocArray(output, weight);
+for (offset=0; offset<seedSize; ++offset)
+    {
+    if (seed[offset] == '1')
+	output[outCount++] = offset;
+    }
+assert(outCount == weight);
+return output;
+}
+
+int spacedSeedSpan(int weight)
+/* Return span of seed of given weight */
+{
+return strlen(spacedSeeds[weight]);
+}
+
diff --git a/gbtools/src/blatSrc/lib/splatAli.as b/gbtools/src/blatSrc/lib/splatAli.as
new file mode 100644
index 0000000..0e8c7c0
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/splatAli.as
@@ -0,0 +1,12 @@
+table splatAli
+"A parsed out splat format alignment."
+    (
+    string chrom;	"Chromosome mapped to"
+    int chromStart;	"Start position in chromosome (zero based)"
+    int chromEnd;	"End position in genome (one based)"
+    string alignedBases;"Tag bases - in upper case for match, -/^ for insert/delete"
+    int score;		"Mapping score. 1000/placesMapped"
+    char[1] strand;     "+ or - for strand"
+    string readName;	"Name of read"
+    )
+
diff --git a/gbtools/src/blatSrc/lib/splatAli.c b/gbtools/src/blatSrc/lib/splatAli.c
new file mode 100644
index 0000000..dcd9809
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/splatAli.c
@@ -0,0 +1,234 @@
+/* splatAli.c was originally generated by the autoSql program, which also 
+ * generated splatAli.h and splatAli.sql.  This module links the database and
+ * the RAM representation of objects. */
+/* This file is copyright 2008 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "linefile.h"
+#include "dystring.h"
+#include "sqlNum.h"
+#include "sqlList.h"
+#include "splatAli.h"
+
+
+void splatAliStaticLoad(char **row, struct splatAli *ret)
+/* Load a row from splatAli table into ret.  The contents of ret will
+ * be replaced at the next call to this function. */
+{
+
+ret->chrom = row[0];
+ret->chromStart = sqlSigned(row[1]);
+ret->chromEnd = sqlSigned(row[2]);
+ret->alignedBases = row[3];
+ret->score = sqlSigned(row[4]);
+safecpy(ret->strand, sizeof(ret->strand), row[5]);
+ret->readName = row[6];
+}
+
+struct splatAli *splatAliLoad(char **row)
+/* Load a splatAli from row fetched with select * from splatAli
+ * from database.  Dispose of this with splatAliFree(). */
+{
+struct splatAli *ret;
+
+AllocVar(ret);
+ret->chrom = cloneString(row[0]);
+ret->chromStart = sqlSigned(row[1]);
+ret->chromEnd = sqlSigned(row[2]);
+ret->alignedBases = cloneString(row[3]);
+ret->score = sqlSigned(row[4]);
+safecpy(ret->strand, sizeof(ret->strand), row[5]);
+ret->readName = cloneString(row[6]);
+return ret;
+}
+
+struct splatAli *splatAliLoadAll(char *fileName) 
+/* Load all splatAli from a whitespace-separated file.
+ * Dispose of this with splatAliFreeList(). */
+{
+struct splatAli *list = NULL, *el;
+struct lineFile *lf = lineFileOpen(fileName, TRUE);
+char *row[7];
+
+while (lineFileRow(lf, row))
+    {
+    el = splatAliLoad(row);
+    slAddHead(&list, el);
+    }
+lineFileClose(&lf);
+slReverse(&list);
+return list;
+}
+
+struct splatAli *splatAliLoadAllByChar(char *fileName, char chopper) 
+/* Load all splatAli from a chopper separated file.
+ * Dispose of this with splatAliFreeList(). */
+{
+struct splatAli *list = NULL, *el;
+struct lineFile *lf = lineFileOpen(fileName, TRUE);
+char *row[7];
+
+while (lineFileNextCharRow(lf, chopper, row, ArraySize(row)))
+    {
+    el = splatAliLoad(row);
+    slAddHead(&list, el);
+    }
+lineFileClose(&lf);
+slReverse(&list);
+return list;
+}
+
+struct splatAli *splatAliCommaIn(char **pS, struct splatAli *ret)
+/* Create a splatAli out of a comma separated string. 
+ * This will fill in ret if non-null, otherwise will
+ * return a new splatAli */
+{
+char *s = *pS;
+
+if (ret == NULL)
+    AllocVar(ret);
+ret->chrom = sqlStringComma(&s);
+ret->chromStart = sqlSignedComma(&s);
+ret->chromEnd = sqlSignedComma(&s);
+ret->alignedBases = sqlStringComma(&s);
+ret->score = sqlSignedComma(&s);
+sqlFixedStringComma(&s, ret->strand, sizeof(ret->strand));
+ret->readName = sqlStringComma(&s);
+*pS = s;
+return ret;
+}
+
+void splatAliFree(struct splatAli **pEl)
+/* Free a single dynamically allocated splatAli such as created
+ * with splatAliLoad(). */
+{
+struct splatAli *el;
+
+if ((el = *pEl) == NULL) return;
+freeMem(el->chrom);
+freeMem(el->alignedBases);
+freeMem(el->readName);
+freez(pEl);
+}
+
+void splatAliFreeList(struct splatAli **pList)
+/* Free a list of dynamically allocated splatAli's */
+{
+struct splatAli *el, *next;
+
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    splatAliFree(&el);
+    }
+*pList = NULL;
+}
+
+void splatAliOutput(struct splatAli *el, FILE *f, char sep, char lastSep) 
+/* Print out splatAli.  Separate fields with sep. Follow last field with lastSep. */
+{
+if (sep == ',') fputc('"',f);
+fprintf(f, "%s", el->chrom);
+if (sep == ',') fputc('"',f);
+fputc(sep,f);
+fprintf(f, "%d", el->chromStart);
+fputc(sep,f);
+fprintf(f, "%d", el->chromEnd);
+fputc(sep,f);
+if (sep == ',') fputc('"',f);
+fprintf(f, "%s", el->alignedBases);
+if (sep == ',') fputc('"',f);
+fputc(sep,f);
+fprintf(f, "%d", el->score);
+fputc(sep,f);
+if (sep == ',') fputc('"',f);
+fprintf(f, "%s", el->strand);
+if (sep == ',') fputc('"',f);
+fputc(sep,f);
+if (sep == ',') fputc('"',f);
+fprintf(f, "%s", el->readName);
+if (sep == ',') fputc('"',f);
+fputc(lastSep,f);
+}
+
+/* -------------------------------- End autoSql Generated Code -------------------------------- */
+
+int splatAliCmpReadName(const void *va, const void *vb)
+/* Compare two based on readName. Also separate secondarily on chrom position. */
+{
+const struct splatAli *a = *((struct splatAli **)va);
+const struct splatAli *b = *((struct splatAli **)vb);
+int diff = strcmp(a->readName, b->readName);
+if (diff == 0)
+    diff = a->chromStart - b->chromStart;
+if (diff == 0)
+    diff = a->chromEnd - b->chromEnd;
+if (diff == 0)
+    diff = a->strand - b->strand;
+if (diff == 0)
+    diff = strcmp(a->chrom, b->chrom);
+return diff;
+}
+
+int splatAliScore(char *ali)
+/* Score splat-encoded alignment. */
+{
+int score = 0;
+char c;
+while ((c = *ali++))
+    {
+    switch (c)
+        {
+	case 'a':
+	case 'c':
+	case 'g':
+	case 't':
+	    score -= 2;
+	    break;
+	case 'A':
+	case 'C':
+	case 'G':
+	case 'T':
+	    score += 2;
+	    break;
+	case 'n':
+	case 'N':
+	    break;
+	case '^':
+	    score -= 3;
+	    ali += 1;
+	    break;
+	case '-':
+	    score -= 3;
+	    break;
+	}
+    }
+return score;
+}
+
+void splatAliLookForBest(struct splatAli *start, struct splatAli *end, 
+	int *retBestScore, int *retBestCount)
+/* Scan through list from start up to but not including end (which may be NULL)
+ * and figure out best score and number of elements in list with that score. */
+{
+int bestScore = 0, bestCount = 0;
+struct splatAli *el;
+for (el = start; el != end; el = el->next)
+    {
+    int score = splatAliScore(el->alignedBases);
+    if (score >= bestScore)
+        {
+	if (score > bestScore)
+	    {
+	    bestScore = score;
+	    bestCount = 1;
+	    }
+	else
+	    bestCount += 1;
+	}
+    }
+*retBestScore = bestScore;
+*retBestCount = bestCount;
+}
+
diff --git a/gbtools/src/blatSrc/lib/sqlList.c b/gbtools/src/blatSrc/lib/sqlList.c
new file mode 100644
index 0000000..b51e162
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/sqlList.c
@@ -0,0 +1,1273 @@
+/* Stuff for processing comma separated lists - a little long so
+ * in a separate module from jksql.c though interface is still
+ * in jksql.c. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+/* The various static routines sql<Type>StaticArray are NOT thread-safe. */
+
+#include "common.h"
+#include "sqlNum.h"
+#include "sqlList.h"
+#include "dystring.h"
+#include "hash.h"
+
+
+int sqlByteArray(char *s, signed char *array, int arraySize)
+/* Convert comma separated list of numbers to an array.  Pass in 
+ * array an max size of array. */
+{
+unsigned count = 0;
+for (;;)
+    {
+    char *e;
+    if (s == NULL || s[0] == 0 || count == arraySize)
+	break;
+    e = strchr(s, ',');
+    if (e != NULL)
+	*e++ = 0;
+    array[count++] = sqlSigned(s);
+    s = e;
+    }
+return count;
+}
+
+void sqlByteStaticArray(char *s, signed char **retArray, int *retSize)
+/* Convert comma separated list of numbers to an array which will be
+ * overwritten next call to this function, but need not be freed. */
+{
+static signed char *array = NULL;
+static unsigned alloc = 0;
+unsigned count = 0;
+
+for (;;)
+    {
+    char *e;
+    if (s == NULL || s[0] == 0)
+	break;
+    e = strchr(s, ',');
+    if (e != NULL)
+	*e++ = 0;
+    if (count >= alloc)
+	{
+	if (alloc == 0)
+	    alloc = 64;
+	else
+	    alloc <<= 1;
+	ExpandArray(array, count, alloc);
+	}
+    array[count++] = sqlSigned(s);
+    s = e;
+    }
+*retSize = count;
+*retArray = array;
+}
+
+void sqlByteDynamicArray(char *s, signed char **retArray, int *retSize)
+/* Convert comma separated list of numbers to an dynamically allocated
+ * array, which should be freeMem()'d when done. Thread-safe. */
+{
+signed char *array = NULL;
+int count = 0;
+
+if (s)
+    {
+    count = countSeparatedItems(s, ',');
+    if (count > 0)
+	{
+	AllocArray(array, count);
+	count = 0;
+	for (;;)
+	    {
+	    array[count++] = sqlSignedInList(&s);
+	    if (*s++ == 0)
+		break;
+	    if (*s == 0)
+		break;
+	    }
+	}
+    }
+*retArray = array;
+*retSize = count;
+}
+
+/*-------------------------*/
+
+int sqlUbyteArray(char *s, unsigned char *array, int arraySize)
+/* Convert comma separated list of numbers to an array.  Pass in 
+ * array an max size of array. */
+{
+unsigned count = 0;
+for (;;)
+    {
+    char *e;
+    if (s == NULL || s[0] == 0 || count == arraySize)
+	break;
+    e = strchr(s, ',');
+    if (e != NULL)
+	*e++ = 0;
+    array[count++] = sqlUnsigned(s);
+    s = e;
+    }
+return count;
+}
+
+void sqlUbyteStaticArray(char *s, unsigned char **retArray, int *retSize)
+/* Convert comma separated list of numbers to an array which will be
+ * overwritten next call to this function, but need not be freed. */
+{
+static unsigned char *array = NULL;
+static unsigned alloc = 0;
+unsigned count = 0;
+
+for (;;)
+    {
+    char *e;
+    if (s == NULL || s[0] == 0)
+	break;
+    e = strchr(s, ',');
+    if (e != NULL)
+	*e++ = 0;
+    if (count >= alloc)
+	{
+	if (alloc == 0)
+	    alloc = 64;
+	else
+	    alloc <<= 1;
+	ExpandArray(array, count, alloc);
+	}
+    array[count++] = sqlUnsigned(s);
+    s = e;
+    }
+*retSize = count;
+*retArray = array;
+}
+
+void sqlUbyteDynamicArray(char *s, unsigned char **retArray, int *retSize)
+/* Convert comma separated list of numbers to an dynamically allocated
+ * array, which should be freeMem()'d when done. Thread-safe. */
+{
+unsigned char *array = NULL;
+int count = 0;
+
+if (s)
+    {
+    count = countSeparatedItems(s, ',');
+    if (count > 0)
+	{
+	AllocArray(array, count);
+	count = 0;
+	for (;;)
+	    {
+	    array[count++] = sqlUnsignedInList(&s);
+	    if (*s++ == 0)
+		break;
+	    if (*s == 0)
+		break;
+	    }
+	}
+    }
+*retArray = array;
+*retSize = count;
+}
+
+/*-------------------------*/
+
+int sqlCharArray(char *s, char *array, int arraySize)
+/* Convert comma separated list of chars to an array.  Pass in 
+ * array and max size of array. */
+{
+unsigned count = 0;
+for (;;)
+    {
+    char *e;
+    if (s == NULL || s[0] == 0 || count == arraySize)
+	break;
+    e = strchr(s, ',');
+    if (e != NULL)
+	*e++ = 0;
+    array[count++] = s[0];
+    s = e;
+    }
+return count;
+}
+
+void sqlCharStaticArray(char *s, char **retArray, int *retSize)
+/* Convert comma separated list of chars to an array which will be
+ * overwritten next call to this function, but need not be freed. */
+{
+static char *array = NULL;
+static unsigned alloc = 0;
+unsigned count = 0;
+
+for (;;)
+    {
+    char *e;
+    if (s == NULL || s[0] == 0)
+	break;
+    e = strchr(s, ',');
+    if (e != NULL)
+	*e++ = 0;
+    if (count >= alloc)
+	{
+	if (alloc == 0)
+	    alloc = 64;
+	else
+	    alloc <<= 1;
+	ExpandArray(array, count, alloc);
+	}
+    array[count++] = s[0];
+    s = e;
+    }
+*retSize = count;
+*retArray = array;
+}
+
+void sqlCharDynamicArray(char *s, char **retArray, int *retSize)
+/* Convert comma separated list of chars to a dynamically allocated
+ * array, which should be freeMem()'d when done. Thread-safe. */
+{
+char *array = NULL;
+int count = 0;
+
+if (s)
+    {
+    count = countSeparatedItems(s, ',');
+    if (count > 0)
+	{
+	AllocArray(array, count);
+	count = 0;
+	for (;;)
+	    {
+	    if (*s == ',')
+		errAbort("Empty element in list. Each element should contain one character.");
+	    array[count++] = *s++;
+	    if (!(*s == 0 || *s == ','))
+		{
+		--s;
+		char *e = strchr(s, ',');
+		if (e)
+		    *e = 0;
+		errAbort("Invalid character: %s", s);
+		}
+	    if (*s++ == 0)
+		break;
+	    if (*s == 0)
+		break;
+	    }
+	}
+    }
+*retArray = array;
+*retSize = count;
+}
+
+/*-------------------------*/
+
+int sqlShortArray(char *s, short *array, int arraySize)
+/* Convert comma separated list of numbers to an array.  Pass in 
+ * array an max size of array. */
+{
+unsigned count = 0;
+for (;;)
+    {
+    char *e;
+    if (s == NULL || s[0] == 0 || count == arraySize)
+	break;
+    e = strchr(s, ',');
+    if (e != NULL)
+	*e++ = 0;
+    array[count++] = sqlSigned(s);
+    s = e;
+    }
+return count;
+}
+
+void sqlShortStaticArray(char *s, short **retArray, int *retSize)
+/* Convert comma separated list of numbers to an array which will be
+ * overwritten next call to this function, but need not be freed. */
+{
+static short *array = NULL;
+static unsigned alloc = 0;
+unsigned count = 0;
+
+for (;;)
+    {
+    char *e;
+    if (s == NULL || s[0] == 0)
+	break;
+    e = strchr(s, ',');
+    if (e != NULL)
+	*e++ = 0;
+    if (count >= alloc)
+	{
+	if (alloc == 0)
+	    alloc = 64;
+	else
+	    alloc <<= 1;
+	ExpandArray(array, count, alloc);
+	}
+    array[count++] = sqlSigned(s);
+    s = e;
+    }
+*retSize = count;
+*retArray = array;
+}
+
+void sqlShortDynamicArray(char *s, short **retArray, int *retSize)
+/* Convert comma separated list of numbers to an dynamically allocated
+ * array, which should be freeMem()'d when done. Thread-safe. */
+{
+short *array = NULL;
+int count = 0;
+
+if (s)
+    {
+    count = countSeparatedItems(s, ',');
+    if (count > 0)
+	{
+	AllocArray(array, count);
+	count = 0;
+	for (;;)
+	    {
+	    array[count++] = sqlSignedInList(&s);
+	    if (*s++ == 0)
+		break;
+	    if (*s == 0)
+		break;
+	    }
+	}
+    }
+*retArray = array;
+*retSize = count;
+}
+
+/*-------------------------*/
+
+int sqlUshortArray(char *s, unsigned short *array, int arraySize)
+/* Convert comma separated list of numbers to an array.  Pass in 
+ * array an max size of array. */
+{
+unsigned count = 0;
+for (;;)
+    {
+    char *e;
+    if (s == NULL || s[0] == 0 || count == arraySize)
+	break;
+    e = strchr(s, ',');
+    if (e != NULL)
+	*e++ = 0;
+    array[count++] = sqlUnsigned(s);
+    s = e;
+    }
+return count;
+}
+
+void sqlUshortStaticArray(char *s, unsigned short **retArray, int *retSize)
+/* Convert comma separated list of numbers to an array which will be
+ * overwritten next call to this function, but need not be freed. */
+{
+static unsigned short *array = NULL;
+static unsigned alloc = 0;
+unsigned count = 0;
+
+for (;;)
+    {
+    char *e;
+    if (s == NULL || s[0] == 0)
+	break;
+    e = strchr(s, ',');
+    if (e != NULL)
+	*e++ = 0;
+    if (count >= alloc)
+	{
+	if (alloc == 0)
+	    alloc = 64;
+	else
+	    alloc <<= 1;
+	ExpandArray(array, count, alloc);
+	}
+    array[count++] = sqlUnsigned(s);
+    s = e;
+    }
+*retSize = count;
+*retArray = array;
+}
+
+void sqlUshortDynamicArray(char *s, unsigned short **retArray, int *retSize)
+/* Convert comma separated list of numbers to an dynamically allocated
+ * array, which should be freeMem()'d when done. Thread-safe. */
+{
+unsigned short *array = NULL;
+int count = 0;
+
+if (s)
+    {
+    count = countSeparatedItems(s, ',');
+    if (count > 0)
+	{
+	AllocArray(array, count);
+	count = 0;
+	for (;;)
+	    {
+	    array[count++] = sqlUnsignedInList(&s);
+	    if (*s++ == 0)
+		break;
+	    if (*s == 0)
+		break;
+	    }
+	}
+    }
+*retArray = array;
+*retSize = count;
+}
+
+/*-------------------------*/
+int sqlDoubleArray(char *s, double *array, int maxArraySize)
+/* Convert comma separated list of floating point numbers to an array.  
+ * Pass in array and max size of array. */
+{
+unsigned count = 0;
+for (;;)
+    {
+    char *e;
+    if (s == NULL || s[0] == 0 || count == maxArraySize)
+	break;
+    e = strchr(s, ',');
+    if (e != NULL)
+	*e++ = 0;
+    array[count++] = atof(s);
+    s = e;
+    }
+return count;
+}
+
+
+int sqlFloatArray(char *s, float *array, int maxArraySize)
+/* Convert comma separated list of floating point numbers to an array.  
+ * Pass in array and max size of array. */
+{
+unsigned count = 0;
+for (;;)
+    {
+    char *e;
+    if (s == NULL || s[0] == 0 || count == maxArraySize)
+	break;
+    e = strchr(s, ',');
+    if (e != NULL)
+	*e++ = 0;
+    array[count++] = atof(s);
+    s = e;
+    }
+return count;
+}
+
+void sqlDoubleStaticArray(char *s, double **retArray, int *retSize)
+/* Convert comma separated list of numbers to an array which will be
+ * overwritten next call to this function, but need not be freed. */
+{
+static double *array = NULL;
+static unsigned alloc = 0;
+unsigned count = 0;
+
+for (;;)
+    {
+    char *e;
+    if (s == NULL || s[0] == 0)
+	break;
+    e = strchr(s, ',');
+    if (e != NULL)
+	*e++ = 0;
+    if (count >= alloc)
+	{
+	if (alloc == 0)
+	    alloc = 64;
+	else
+	    alloc <<= 1;
+	ExpandArray(array, count, alloc);
+	}
+    array[count++] = atof(s);
+    s = e;
+    }
+*retSize = count;
+*retArray = array;
+}
+
+void sqlFloatStaticArray(char *s, float **retArray, int *retSize)
+/* Convert comma separated list of numbers to an array which will be
+ * overwritten next call to this function, but need not be freed. */
+{
+static float *array = NULL;
+static unsigned alloc = 0;
+unsigned count = 0;
+
+for (;;)
+    {
+    char *e;
+    if (s == NULL || s[0] == 0)
+	break;
+    e = strchr(s, ',');
+    if (e != NULL)
+	*e++ = 0;
+    if (count >= alloc)
+	{
+	if (alloc == 0)
+	    alloc = 128;
+	else
+	    alloc <<= 1;
+	ExpandArray(array, count, alloc);
+	}
+    array[count++] = atof(s);
+    s = e;
+    }
+*retSize = count;
+*retArray = array;
+}
+
+void sqlDoubleDynamicArray(char *s, double **retArray, int *retSize)
+/* Convert comma separated list of numbers to an dynamically allocated
+ * array, which should be freeMem()'d when done. Thread-safe.*/
+{
+double *array = NULL;
+int count = 0;
+
+if (s)
+    {
+    count = countSeparatedItems(s, ',');
+    if (count > 0)
+	{
+	AllocArray(array, count);
+	count = 0;
+	for (;;)
+	    {
+	    array[count++] = sqlDoubleInList(&s);
+	    if (*s++ == 0)
+		break;
+	    if (*s == 0)
+		break;
+	    }
+	}
+    }
+*retArray = array;
+*retSize = count;
+}
+
+void sqlFloatDynamicArray(char *s, float **retArray, int *retSize)
+/* Convert comma separated list of numbers to an dynamically allocated
+ * array, which should be freeMem()'d when done. Thread-safe. */
+{
+float *array = NULL;
+int count = 0;
+
+if (s)
+    {
+    count = countSeparatedItems(s, ',');
+    if (count > 0)
+	{
+	AllocArray(array, count);
+	count = 0;
+	for (;;)
+	    {
+	    array[count++] = sqlFloatInList(&s);
+	    if (*s++ == 0)
+		break;
+	    if (*s == 0)
+		break;
+	    }
+	}
+    }
+*retArray = array;
+*retSize = count;
+}
+
+/*-------------------------*/
+
+int sqlUnsignedArray(char *s, unsigned *array, int arraySize)
+/* Convert comma separated list of numbers to an array.  Pass in 
+ * array and max size of array. */
+{
+unsigned count = 0;
+for (;;)
+    {
+    char *e;
+    if (s == NULL || s[0] == 0 || count == arraySize)
+	break;
+    e = strchr(s, ',');
+    if (e != NULL)
+	*e++ = 0;
+    array[count++] = sqlUnsigned(s);
+    s = e;
+    }
+return count;
+}
+
+void sqlUnsignedStaticArray(char *s, unsigned **retArray, int *retSize)
+/* Convert comma separated list of numbers to an array which will be
+ * overwritten next call to this function, but need not be freed. */
+{
+static unsigned *array = NULL;
+static unsigned alloc = 0;
+unsigned count = 0;
+
+for (;;)
+    {
+    char *e;
+    if (s == NULL || s[0] == 0)
+	break;
+    e = strchr(s, ',');
+    if (e != NULL)
+	*e++ = 0;
+    if (count >= alloc)
+	{
+	if (alloc == 0)
+	    alloc = 64;
+	else
+	    alloc <<= 1;
+	ExpandArray(array, count, alloc);
+	}
+    array[count++] = sqlUnsigned(s);
+    s = e;
+    }
+*retSize = count;
+*retArray = array;
+}
+
+void sqlUnsignedDynamicArray(char *s, unsigned **retArray, int *retSize)
+/* Convert comma separated list of numbers to an dynamically allocated
+ * array, which should be freeMem()'d when done. Thread-safe. */
+{
+unsigned *array = NULL;
+int count = 0;
+
+if (s)
+    {
+    count = countSeparatedItems(s, ',');
+    if (count > 0)
+	{
+	AllocArray(array, count);
+	count = 0;
+	for (;;)
+	    {
+	    array[count++] = sqlUnsignedInList(&s);
+	    if (*s++ == 0)
+		break;
+	    if (*s == 0)
+		break;
+	    }
+	}
+    }
+*retArray = array;
+*retSize = count;
+}
+
+/*-------------------------*/
+
+int sqlSignedArray(char *s, int *array, int arraySize)
+/* Convert comma separated list of numbers to an array.  Pass in 
+ * array an max size of array. */
+{
+int count = 0;
+for (;;)
+    {
+    char *e;
+    if (s == NULL || s[0] == 0 || count == arraySize)
+	break;
+    e = strchr(s, ',');
+    if (e != NULL)
+	*e++ = 0;
+    array[count++] = sqlSigned(s);
+    s = e;
+    }
+return count;
+}
+
+void sqlSignedStaticArray(char *s, int **retArray, int *retSize)
+/* Convert comma separated list of numbers to an array which will be
+ * overwritten next call to this function, but need not be freed. */
+{
+static int *array = NULL;
+static int alloc = 0;
+int count = 0;
+
+for (;;)
+    {
+    char *e;
+    if (s == NULL || s[0] == 0)
+	break;
+    e = strchr(s, ',');
+    if (e != NULL)
+	*e++ = 0;
+    if (count >= alloc)
+	{
+	if (alloc == 0)
+	    alloc = 64;
+	else
+	    alloc <<= 1;
+	ExpandArray(array, count, alloc);
+	}
+    array[count++] = sqlSigned(s);
+    s = e;
+    }
+*retSize = count;
+*retArray = array;
+}
+
+void sqlSignedDynamicArray(char *s, int **retArray, int *retSize)
+/* Convert comma separated list of numbers to an dynamically allocated
+ * array, which should be freeMem()'d when done. Thread-safe. */
+{
+int *array = NULL;
+int count = 0;
+
+if (s)
+    {
+    count = countSeparatedItems(s, ',');
+    if (count > 0)
+	{
+	AllocArray(array, count);
+	count = 0;
+	for (;;)
+	    {
+	    array[count++] = sqlSignedInList(&s);
+	    if (*s++ == 0)
+		break;
+	    if (*s == 0)
+		break;
+	    }
+	}
+    }
+*retArray = array;
+*retSize = count;
+}
+
+
+/*-------------------------*/
+
+int sqlLongLongArray(char *s, long long *array, int arraySize)
+/* Convert comma separated list of numbers to an array.  Pass in 
+ * array and max size of array. */
+{
+unsigned count = 0;
+for (;;)
+    {
+    char *e;
+    if (s == NULL || s[0] == 0 || count == arraySize)
+	break;
+    e = strchr(s, ',');
+    if (e != NULL)
+	*e++ = 0;
+    array[count++] = sqlLongLong(s);
+    s = e;
+    }
+return count;
+}
+
+void sqlLongLongStaticArray(char *s, long long **retArray, int *retSize)
+/* Convert comma separated list of numbers to an array which will be
+ * overwritten next call to this function, but need not be freed. */
+{
+static long long *array = NULL;
+static unsigned alloc = 0;
+unsigned count = 0;
+
+for (;;)
+    {
+    char *e;
+    if (s == NULL || s[0] == 0)
+	break;
+    e = strchr(s, ',');
+    if (e != NULL)
+	*e++ = 0;
+    if (count >= alloc)
+	{
+	if (alloc == 0)
+	    alloc = 64;
+	else
+	    alloc <<= 1;
+	ExpandArray(array, count, alloc);
+	}
+    array[count++] = sqlLongLong(s);
+    s = e;
+    }
+*retSize = count;
+*retArray = array;
+}
+
+void sqlLongLongDynamicArray(char *s, long long **retArray, int *retSize)
+/* Convert comma separated list of numbers to an dynamically allocated
+ * array, which should be freeMem()'d when done. Thread-safe. */
+{
+long long *array = NULL;
+int count = 0;
+
+if (s)
+    {
+    count = countSeparatedItems(s, ',');
+    if (count > 0)
+	{
+	AllocArray(array, count);
+	count = 0;
+	for (;;)
+	    {
+	    array[count++] = sqlLongLongInList(&s);
+	    if (*s++ == 0)
+		break;
+	    if (*s == 0)
+		break;
+	    }
+	}
+    }
+*retArray = array;
+*retSize = count;
+}
+
+/*-------------------------*/
+
+
+int sqlStringArray(char *s, char **array, int maxArraySize)
+/* Convert comma separated list of strings to an array.  Pass in 
+ * array and max size of array.  Returns actual size*/
+{
+int count = 0;
+for (;;)
+    {
+    char *e;
+    if (s == NULL || s[0] == 0 || count == maxArraySize)
+	break;
+    e = strchr(s, ',');
+    if (e != NULL)
+	*e++ = 0;
+    array[count++] = s;
+    s = e;
+    }
+return count;
+}
+
+void sqlStringStaticArray(char *s, char  ***retArray, int *retSize)
+/* Convert comma separated list of strings to an array which will be
+ * overwritten next call to this function,  but need not be freed. */
+{
+static char **array = NULL;
+static int alloc = 0;
+int count = 0;
+
+for (;;)
+    {
+    char *e;
+    if (s == NULL || s[0] == 0)
+	break;
+    e = strchr(s, ',');
+    if (e != NULL)
+	*e++ = 0;
+    if (count >= alloc)
+	{
+	if (alloc == 0)
+	    alloc = 64;
+	else
+	    alloc <<= 1;
+	ExpandArray(array, count, alloc);
+	}
+    array[count++] = s;
+    s = e;
+    }
+*retSize = count;
+*retArray = array;
+}
+
+void sqlStringDynamicArray(char *s, char ***retArray, int *retSize)
+/* Convert comma separated list of strings to an dynamically allocated
+ * array, which should be freeMem()'d when done. As a speed option all
+ * of the elements in the array are needMem()'d at the same time. This 
+ * means that all the entries are free()'d by calling freeMem() on the
+ * first element. For example:
+ * sqlStringDynamicArray(s, &retArray, &retSize);
+ * DoSomeFunction(retArray, retSize);
+ * freeMem(retArray[0]);
+ * freeMem(retArray);
+ * Thread-safe. */
+{
+char **array = NULL;
+int count = 0;
+if (s)
+    {
+    count = countSeparatedItems(s, ',');
+    if (count > 0)
+	{
+	AllocArray(array, count);
+	count = 0;
+	s = cloneString(s);
+	for (;;)
+	    {
+	    char *e;
+	    if (s == NULL || s[0] == 0)
+		break;
+	    e = strchr(s, ',');
+	    if (e != NULL)
+		*e++ = 0;
+	    array[count++] = s;
+	    s = e;
+	    }
+	}
+    }
+*retArray = array;
+*retSize = count;
+}
+
+char *sqlDoubleArrayToString( double *array, int arraySize)
+{
+int i;
+struct dyString *string = newDyString(256);
+for( i = 0 ; i < arraySize; i++ )
+    {
+    dyStringPrintf(string, "%f,", array[i]);
+    }
+return dyStringCannibalize(&string);
+}
+
+char *sqlFloatArrayToString( float *array, int arraySize)
+{
+int i;
+struct dyString *string = newDyString(256);
+for( i = 0 ; i < arraySize; i++ )
+    {
+    dyStringPrintf(string, "%f,", array[i]);
+    }
+return dyStringCannibalize(&string);
+}
+
+char *sqlUnsignedArrayToString( unsigned *array, int arraySize)
+{
+int i;
+struct dyString *string = newDyString(256);
+for( i = 0 ; i < arraySize; i++ )
+    {
+    dyStringPrintf(string, "%u,", array[i]);
+    }
+return dyStringCannibalize(&string);
+}
+
+char *sqlSignedArrayToString( int *array, int arraySize)
+{
+int i;
+struct dyString *string = newDyString(256);
+for( i = 0 ; i < arraySize; i++ )
+    {
+    dyStringPrintf(string, "%d,", array[i]);
+    }
+return dyStringCannibalize(&string);
+}
+
+char *sqlShortArrayToString( short *array, int arraySize)
+{
+int i;
+struct dyString *string = newDyString(256);
+for( i = 0 ; i < arraySize; i++ )
+    {
+    dyStringPrintf(string, "%d,", array[i]);
+    }
+return dyStringCannibalize(&string);
+}
+
+char *sqlUshortArrayToString( unsigned short *array, int arraySize)
+{
+int i;
+struct dyString *string = newDyString(256);
+for( i = 0 ; i < arraySize; i++ )
+    {
+    dyStringPrintf(string, "%u,", array[i]);
+    }
+return dyStringCannibalize(&string);
+}
+
+char *sqlByteArrayToString( signed char *array, int arraySize)
+{
+int i;
+struct dyString *string = newDyString(256);
+for( i = 0 ; i < arraySize; i++ )
+    {
+    dyStringPrintf(string, "%d,", array[i]);
+    }
+return dyStringCannibalize(&string);
+}
+
+char *sqlUbyteArrayToString( unsigned char *array, int arraySize)
+{
+int i;
+struct dyString *string = newDyString(256);
+for( i = 0 ; i < arraySize; i++ )
+    {
+    dyStringPrintf(string, "%u,", array[i]);
+    }
+return dyStringCannibalize(&string);
+}
+
+char *sqlCharArrayToString( char *array, int arraySize)
+{
+int i;
+struct dyString *string = newDyString(256);
+for( i = 0 ; i < arraySize; i++ )
+    {
+    dyStringPrintf(string, "%c,", array[i]);
+    }
+return dyStringCannibalize(&string);
+}
+
+char *sqlLongLongArrayToString( long long *array, int arraySize)
+{
+int i;
+struct dyString *string = newDyString(256);
+for( i = 0 ; i < arraySize; i++ )
+    {
+    dyStringPrintf(string, "%lld,", array[i]);
+    }
+return dyStringCannibalize(&string);
+}
+
+char *sqlStringArrayToString( char **array, int arraySize)
+{
+int i;
+struct dyString *string = newDyString(256);
+for( i = 0 ; i < arraySize; i++ )
+    {
+    dyStringPrintf(string, "%s,", array[i]);
+    }
+return dyStringCannibalize(&string);
+}
+
+
+/* -------------- */
+
+
+
+void sqlStringFreeDynamicArray(char ***pArray)
+/* Free up a dynamic array (ends up freeing array and first string on it.) */
+{
+char **array;
+if ((array = *pArray) != NULL)
+    {
+    freeMem(array[0]);
+    freez(pArray);
+    }
+}
+
+int sqlUnsignedComma(char **pS)
+/* Return signed number at *pS.  Advance *pS past comma at end */
+{
+char *s = *pS;
+char *e = strchr(s, ',');
+unsigned ret;
+
+*e++ = 0;
+*pS = e;
+ret = sqlUnsigned(s);
+return ret;
+}
+
+
+int sqlSignedComma(char **pS)
+/* Return signed number at *pS.  Advance *pS past comma at end */
+{
+char *s = *pS;
+char *e = strchr(s, ',');
+int ret;
+
+*e++ = 0;
+*pS = e;
+ret = sqlSigned(s);
+return ret;
+}
+
+char sqlCharComma(char **pS)
+/* Return char at *pS.  Advance *pS past comma after char */
+{
+char *s = *pS;
+char *e = strchr(s, ',');
+int ret;
+
+*e++ = 0;
+*pS = e;
+ret = s[0];
+return ret;
+}
+
+long long sqlLongLongComma(char **pS)
+/* Return offset (often 64 bits) at *pS.  Advance *pS past comma at 
+ * end */
+{
+char *s = *pS;
+char *e = strchr(s, ',');
+long long ret;
+
+*e++ = 0;
+*pS = e;
+ret = sqlLongLong(s);
+return ret;
+}
+
+float sqlFloatComma(char **pS)
+/* Return signed number at *pS.  Advance *pS past comma at end */
+{
+char *s = *pS;
+char *e = strchr(s, ',');
+float ret;
+
+*e++ = 0;
+*pS = e;
+ret = atof(s);
+return ret;
+}
+
+double sqlDoubleComma(char **pS)
+/* Return signed number at *pS.  Advance *pS past comma at end */
+{
+char *s = *pS;
+char *e = strchr(s, ',');
+double ret;
+
+*e++ = 0;
+*pS = e;
+ret = atof(s);
+return ret;
+}
+
+
+static char *findStringEnd(char *start, char endC)
+/* Return end of string. */
+{
+char c;
+char *s = start;
+
+for (;;)
+    {
+    c = *s;
+    if (c == endC)
+	return s;
+    else if (c == 0)
+	errAbort("Unterminated string");
+    ++s;
+    }
+}
+
+static char *sqlGetOptQuoteString(char **pS)
+/* Return string at *pS.  (Either quoted or not.)  Advance *pS. */
+{
+char *s = *pS;
+char *e;
+char c = *s;
+
+if (c  == '"' || c == '\'')
+    {
+    s += 1;
+    e = findStringEnd(s, c);
+    *e++ = 0;
+    if (*e++ != ',')
+	errAbort("Expecting comma after string");
+    }
+else
+    {
+    e = strchr(s, ',');
+    *e++ = 0;
+    }
+*pS = e;
+return s;
+}
+
+char *sqlStringComma(char **pS)
+/* Return string at *pS.  (Either quoted or not.)  Advance *pS. */
+{
+return cloneString(sqlGetOptQuoteString(pS));
+}
+
+void sqlFixedStringComma(char **pS, char *buf, int bufSize)
+/* Copy string at *pS to buf.  Advance *pS. */
+{
+strncpy(buf, sqlGetOptQuoteString(pS), bufSize);
+}
+
+char *sqlEatChar(char *s, char c)
+/* Make sure next character is 'c'.  Return past next char */
+{
+if (*s++ != c)
+    errAbort("Expecting %c got %c (%d) in database", c, s[-1], s[-1]);
+return s;
+}
+
+static struct hash *buildSymHash(char **values, boolean isEnum)
+/* build a hash of values for either enum or set symbolic column */
+{
+struct hash *valHash = hashNew(0);
+unsigned setVal = 1; /* not used for enum */
+int iVal;
+for (iVal = 0; values[iVal] != NULL; iVal++)
+    {
+    if (isEnum)
+        hashAddInt(valHash, values[iVal], iVal);
+    else
+        {
+        hashAddInt(valHash, values[iVal], setVal);
+        setVal = setVal << 1;
+        }
+    }
+return valHash;
+}
+
+unsigned sqlEnumParse(char *valStr, char **values, struct hash **valHashPtr)
+/* parse an enumerated column value */
+{
+if (*valHashPtr == NULL)
+    *valHashPtr = buildSymHash(values, TRUE);
+return hashIntVal(*valHashPtr, valStr);
+}
+
+unsigned sqlEnumComma(char **pS, char **values, struct hash **valHashPtr)
+/* Return enum at *pS.  (Either quoted or not.)  Advance *pS. */
+{
+return sqlEnumParse(sqlGetOptQuoteString(pS), values, valHashPtr);
+}
+
+void sqlEnumPrint(FILE *f, unsigned value, char **values)
+/* print an enumerated column value */
+{
+fputs(values[value], f);
+}
+
+unsigned sqlSetParse(char *valStr, char **values, struct hash **valHashPtr)
+/* parse a set column value */
+{
+if (*valHashPtr == NULL)
+    *valHashPtr = buildSymHash(values, FALSE);
+/* parse comma separated string */
+unsigned value = 0;
+char *val = strtok(valStr, ",");
+while (val != NULL)
+    {
+    value |= hashIntVal(*valHashPtr, val);
+    val = strtok(NULL, ",");
+    }
+
+return value;
+}
+
+unsigned sqlSetComma(char **pS, char **values, struct hash **valHashPtr)
+/* Return set at *pS.  (Either quoted or not.)  Advance *pS. */
+{
+return sqlSetParse(sqlGetOptQuoteString(pS), values, valHashPtr);
+}
+
+void sqlSetPrint(FILE *f, unsigned value, char **values)
+/* print a set column value */
+{
+int iVal;
+unsigned curVal = 1;
+int cnt = 0;
+for (iVal = 0; values[iVal] != NULL; iVal++, curVal = curVal << 1)
+    {
+    if (curVal & value)
+        {
+        if (cnt > 0)
+            fputc(',', f);
+        fputs(values[iVal], f);
+        cnt++;
+        }
+    }
+}
diff --git a/gbtools/src/blatSrc/lib/sqlNum.c b/gbtools/src/blatSrc/lib/sqlNum.c
new file mode 100644
index 0000000..081f857
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/sqlNum.c
@@ -0,0 +1,301 @@
+/* sqlnum.c - Routines to convert from ascii to integer
+ * representation of numbers. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "sqlNum.h"
+
+/* The sql<Type>InList functions allow for fast thread-safe processing of dynamic arrays in sqlList */
+
+
+unsigned sqlUnsigned(char *s)
+/* Convert series of digits to unsigned integer about
+ * twice as fast as atoi (by not having to skip white 
+ * space or stop except at the null byte.) */
+{
+unsigned res = 0;
+char *p = s;
+char c;
+
+while (((c = *(p++)) >= '0') && (c <= '9'))
+    {
+    res *= 10;
+    res += c - '0';
+    }
+--p;
+/* test for invalid character or empty */
+if ((c != '\0') || (p == s))
+    errAbort("invalid unsigned integer: \"%s\"", s);
+return res;
+}
+
+unsigned sqlUnsignedInList(char **pS)
+/* Convert series of digits to unsigned integer about
+ * twice as fast as atoi (by not having to skip white 
+ * space or stop except at the null byte.) 
+ * All of string is number. Number may be delimited by a comma. 
+ * Returns the position of the delimiter or the terminating 0. */
+{
+char *s = *pS;
+unsigned res = 0;
+char *p = s;
+char c;
+
+while (((c = *(p++)) >= '0') && (c <= '9'))
+    {
+    res *= 10;
+    res += c - '0';
+    }
+--p;
+if (!(c == '\0' || c == ',') || (p == s))
+    {
+    char *e = strchr(s, ',');
+    if (e)
+	*e = 0;
+    errAbort("invalid unsigned integer: \"%s\"", s);
+    }
+*pS = p;
+return res;
+}
+
+unsigned long sqlUnsignedLong(char *s)
+/* Convert series of digits to unsigned long about
+ * twice as fast as atol (by not having to skip white 
+ * space or stop except at the null byte.) */
+{
+unsigned long res = 0;
+char *p = s;
+char c;
+
+while (((c = *(p++)) >= '0') && (c <= '9'))
+    {
+    res *= 10;
+    res += c - '0';
+    }
+--p;
+if ((c != '\0') || (p == s))
+    errAbort("invalid unsigned long: \"%s\"", s);
+return res;
+}
+
+unsigned long sqlUnsignedLongInList(char **pS)
+/* Convert series of digits to unsigned long about
+ * twice as fast as atol (by not having to skip white 
+ * space or stop except at the null byte.) 
+ * All of string is number. Number may be delimited by a comma. 
+ * Returns the position of the delimiter or the terminating 0. */
+{
+char *s = *pS;
+unsigned long res = 0;
+char *p = s;
+char c;
+
+while (((c = *(p++)) >= '0') && (c <= '9'))
+    {
+    res *= 10;
+    res += c - '0';
+    }
+--p;
+if (!(c == '\0' || c == ',') || (p == s))
+    {
+    char *e = strchr(s, ',');
+    if (e)
+	*e = 0;
+    errAbort("invalid unsigned long: \"%s\"", s);
+    }
+*pS = p;
+return res;
+}
+
+int sqlSigned(char *s)
+/* Convert string to signed integer.  Unlike atol assumes 
+ * all of string is number. */
+{
+int res = 0;
+char *p, *p0 = s;
+
+if (*p0 == '-')
+    p0++;
+p = p0;
+while ((*p >= '0') && (*p <= '9'))
+    {
+    res *= 10;
+    res += *p - '0';
+    p++;
+    }
+/* test for invalid character, empty, or just a minus */
+if ((*p != '\0') || (p == p0))
+    errAbort("invalid signed integer: \"%s\"", s);
+if (*s == '-')
+    return -res;
+else
+    return res;
+}
+
+int sqlSignedInList(char **pS)
+/* Convert string to signed integer.  Unlike atol assumes 
+ * all of string is number. Number may be delimited by a comma. 
+ * Returns the position of the delimiter or the terminating 0. */
+{
+char *s = *pS;
+int res = 0;
+char *p, *p0 = s;
+
+if (*p0 == '-')
+    p0++;
+p = p0;
+while ((*p >= '0') && (*p <= '9'))
+    {
+    res *= 10;
+    res += *p - '0';
+    p++;
+    }
+/* test for invalid character, empty, or just a minus */
+if (!(*p == '\0' || *p == ',') || (p == p0))
+    {
+    char *e = strchr(s, ',');
+    if (e)
+	*e = 0;
+    errAbort("invalid signed integer: \"%s\"", s);
+    }
+*pS = p;
+if (*s == '-')
+    return -res;
+else
+    return res;
+}
+
+long long sqlLongLong(char *s)
+/* Convert string to a long long.  Unlike atol assumes all of string is
+ * number. */
+{
+long long res = 0;
+char *p, *p0 = s;
+
+if (*p0 == '-')
+    p0++;
+p = p0;
+while ((*p >= '0') && (*p <= '9'))
+    {
+    res *= 10;
+    res += *p - '0';
+    p++;
+    }
+/* test for invalid character, empty, or just a minus */
+if ((*p != '\0') || (p == p0))
+    errAbort("invalid signed long long: \"%s\"", s);
+if (*s == '-')
+    return -res;
+else
+    return res;
+}
+
+long long sqlLongLongInList(char **pS)
+/* Convert string to a long long.  Unlike atol, assumes 
+ * all of string is number. Number may be delimited by a comma. 
+ * Returns the position of the delimiter or the terminating 0. */
+{
+char *s = *pS;
+long long res = 0;
+char *p, *p0 = s;
+
+if (*p0 == '-')
+    p0++;
+p = p0;
+while ((*p >= '0') && (*p <= '9'))
+    {
+    res *= 10;
+    res += *p - '0';
+    p++;
+    }
+/* test for invalid character, empty, or just a minus */
+if (!(*p == '\0' || *p == ',') || (p == p0))
+    {
+    char *e = strchr(s, ',');
+    if (e)
+	*e = 0;
+    errAbort("invalid signed long long: \"%s\"", s);
+    }
+*pS = p;
+if (*s == '-')
+    return -res;
+else
+    return res;
+}
+
+float sqlFloat(char *s)
+/* Convert string to a float.  Assumes all of string is number
+ * and aborts on an error. */
+{
+char* end;
+/*	used to have an ifdef here to use strtof() but that doesn't
+ *	actually exist on all systems and since strtod() does, may as
+ *	well use it since it will do the job here.
+ */
+float val = (float) strtod(s, &end);
+
+if ((end == s) || (*end != '\0'))
+    errAbort("invalid float: %s", s);
+return val;
+}
+
+float sqlFloatInList(char **pS)
+/* Convert string to a float.  Assumes all of string is number
+ * and aborts on an error. 
+ * Number may be delimited by a comma. 
+ * Returns the position of the delimiter or the terminating 0. */
+{
+char *s = *pS;
+char* end;
+/*	used to have an ifdef here to use strtof() but that doesn't
+ *	actually exist on all systems and since strtod() does, may as
+ *	well use it since it will do the job here.
+ */
+float val = (float) strtod(s, &end);
+
+if ((end == s) || !(*end == '\0' || *end == ','))
+    {
+    char *e = strchr(s, ',');
+    if (e)
+	*e = 0;
+    errAbort("invalid float: %s", s);
+    }
+*pS = end;
+return val;
+}
+
+double sqlDouble(char *s)
+/* Convert string to a double.  Assumes all of string is number
+ * and aborts on an error. */
+{
+char* end;
+double val = strtod(s, &end);
+
+if ((end == s) || (*end != '\0'))
+    errAbort("invalid double: %s", s);
+return val;
+}
+
+double sqlDoubleInList(char **pS)
+/* Convert string to a double.  Assumes all of string is number
+ * and aborts on an error.
+ * Number may be delimited by a comma.
+ * Returns the position of the delimiter or the terminating 0. */
+{
+char *s = *pS;
+char* end;
+double val = strtod(s, &end);
+
+if ((end == s) || !(*end == '\0' || *end == ','))
+    {
+    char *e = strchr(s, ',');
+    if (e)
+        *e = 0;
+    errAbort("invalid double: %s", s);
+    }
+*pS = end;
+return val;
+}
+
diff --git a/gbtools/src/blatSrc/lib/status b/gbtools/src/blatSrc/lib/status
new file mode 100644
index 0000000..c9a46e0
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/status
@@ -0,0 +1,1638 @@
+# On branch master
+# Your branch is ahead of 'origin/master' by 4 commits.
+#
+# Changes not staged for commit:
+#   (use "git add/rm <file>..." to update what will be committed)
+#   (use "git checkout -- <file>..." to discard changes in working directory)
+#
+#	modified:   ../hg/encode3/eap/oneShot/eapToHub/eapToHub.c
+#	deleted:    ../hg/encode3/encodeDataWarehouse/edwMakeValidFile/sorted.bb
+#	modified:   ../hg/oneShot/freen/freen.c
+#
+# Untracked files:
+#   (use "git add <file>..." to include in what will be committed)
+#
+#	../../clean.log
+#	../../compile.log
+#	../../diff
+#	../../edw
+#	../../ew.txt
+#	../../foo2
+#	../../hui.c.kate
+#	../../pull
+#	../../python/.styleCommentsJk.txt.swp
+#	../../python/ENV/
+#	../../python/idioms.txt
+#	../../python/makefile
+#	../../python/users/kent/django/mysite/cvDb/backup/
+#	../../python/users/kent/django/mysite/jkSp/backup/
+#	../../python/users/kent/django/mysite/jkSp/makefile
+#	../../python/users/kent/django/mysite/jkSp/subs.in
+#	../../python/users/kent/django/mysite/nullOk.sql
+#	../../python/users/kent/django/mysite/polls/
+#	../ai/wordChain/996
+#	../ai/wordChain/donQuixote.chain
+#	../ai/wordChain/donQuixote.non
+#	../ai/wordChain/donQuixote.txt
+#	../ai/wordChain/foo.chain
+#	../ai/wordChain/foo.nonsense
+#	../ai/wordChain/jumbled.txt
+#	../ai/wordChain/nonsense
+#	../ai/wordChain/pull
+#	../ai/wordChain/questions
+#	../ai/wordChain/quixote.chain
+#	../ai/wordChain/short.txt
+#	../alpha.out
+#	../blat/foo.psl
+#	../blat/mCrea.geno.rc
+#	../cscope.files
+#	../cscope.out
+#	../dateModified.lst
+#	../dateModified.sh
+#	../diff
+#	../diffs
+#	../foo2
+#	../foo3
+#	../hg/autoSql/foo.django
+#	../hg/autoSql/foo.h
+#	../hg/autoSql/foo.sql
+#	../hg/autoSql/out/
+#	../hg/autoSql/status
+#	../hg/autoSql/tests/input/ebdwTest.as
+#	../hg/checkTableCoords/tests/1
+#	../hg/cirm/quakeLab/djangoModelToAs/makefile
+#	../hg/cirm/quakeLab/djangoModelToAs/test.py
+#	../hg/cirm/quakeLab/djangoModels/models.zip
+#	../hg/diffs
+#	../hg/encode/converters/pairedTagToBed12/pairedTagToBed12.c.blame
+#	../hg/encode/converters/tagToBed12/tagToBed12.c.blame
+#	../hg/encode/docId/docIdReport/docIdReport.c.blame
+#	../hg/encode/docId/docIdSubmitDir/docIdSubmitDir.c.blame
+#	../hg/encode/docId/docIdTidy/docIdTidy.c.blame
+#	../hg/encode/docId/docIdView/docIdView.c.blame
+#	../hg/encode/docId/inc/docId.h.blame
+#	../hg/encode/docId/lib/docIdSub.c.blame
+#	../hg/encode/encodeExp/encodeExp.c.blame
+#	../hg/encode/encodeExp/foo.ra
+#	../hg/encode/encodeMergeReplicates/encodeMergeReplicates.c.blame
+#	../hg/encode/encodeMergeReplicates/foo1
+#	../hg/encode/encodeMergeReplicates/merged.narrowPeak
+#	../hg/encode/encodeMergeReplicates/out
+#	../hg/encode/encodeMergeReplicates/outRep1Rep2Add.narrowPeak
+#	../hg/encode/encodeMergeReplicates/outRep1Rep2AddAddMin.narrowPeak
+#	../hg/encode/encodeMergeReplicates/outRep1Rep2Agree.narrowPeak
+#	../hg/encode/encodeMergeReplicates/outRep1Rep2Default.narrowPeak
+#	../hg/encode/encodeMergeReplicates/outRep1Rep2Threshold10.narrowPeak
+#	../hg/encode/encodeMergeReplicatesBatch/doHud.sh
+#	../hg/encode/encodeMergeReplicatesBatch/encodeMergeReplicatesBatch.c.blame
+#	../hg/encode/encodeMergeReplicatesBatch/hud.ra
+#	../hg/encode/encodeMergeReplicatesBatch/hudOut.ra
+#	../hg/encode/encodeMergeReplicatesBatch/inDir
+#	../hg/encode/encodeMergeReplicatesBatch/out.ra
+#	../hg/encode/encodeMergeReplicatesBatch/out.sh
+#	../hg/encode/encodeMergeReplicatesBatch/snyder.ra
+#	../hg/encode/encodeMergeReplicatesBatch/status
+#	../hg/encode/encodePatchTdb/encodePatchTdb.c.blame
+#	../hg/encode/encodeRenameObj/encodeRenameObj.c.blame
+#	../hg/encode/hgEncodeApi/hgEncodeApi.c.blame
+#	../hg/encode/hgEncodeDataVersions/hgEncodeDataVersions.c.blame
+#	../hg/encode/hgEncodeScheduler/hgEncodeScheduler.c.blame
+#	../hg/encode/hgEncodeVocab/hgEncodeVocab.c.blame
+#	../hg/encode/inc/bedLogR.h.blame
+#	../hg/encode/inc/encodePatchTdb.h.blame
+#	../hg/encode/ldGencodeIntron/ldGencodeIntron.c.blame
+#	../hg/encode/lib/bedLogR.c.blame
+#	../hg/encode/lib/encodePatchTdb.c.blame
+#	../hg/encode/metaCheck/metaCheck.c.blame
+#	../hg/encode/metaCollect/metaCollect.c.blame
+#	../hg/encode/metaRename/metaRename.c.blame
+#	../hg/encode/regionAgp/regionAgp.c.blame
+#	../hg/encode/regionOrtho/regionOrtho.c.blame
+#	../hg/encode/regionOrtho/regionOrtho.h.blame
+#	../hg/encode/validateCv/validateCv.c.blame
+#	../hg/encode/validateFiles/
+#	../hg/encode3/eap/cleanupEapScratch.sh
+#	../hg/encode3/eap/eapAddSoftware/voo
+#	../hg/encode3/eap/eapAddStep/.eapAddStep.c.swp
+#	../hg/encode3/eap/eapDaemon/foo.001
+#	../hg/encode3/eap/eapDaemon/foo.002
+#	../hg/encode3/eap/eapDaemon/foo.log
+#	../hg/encode3/eap/eapDaemon/start
+#	../hg/encode3/eap/eapDaemon/tmpJob.sql
+#	../hg/encode3/eap/eapFreen/dep.sql
+#	../hg/encode3/eap/eapFreen/dep2.sql
+#	../hg/encode3/eap/eapFreen/firstResponse
+#	../hg/encode3/eap/eapFreen/firstResponse.json
+#	../hg/encode3/eap/eapFreen/makefile
+#	../hg/encode3/eap/eapFreen/software.json
+#	../hg/encode3/eap/eapMetaSync/out
+#	../hg/encode3/eap/eapMetaSync/testIt
+#	../hg/encode3/eap/eapSchedule/0.100000
+#	../hg/encode3/eap/eapSchedule/analysis.sql
+#	../hg/encode3/eap/eapSchedule/err
+#	../hg/encode3/eap/hardQueries/README
+#	../hg/encode3/eap/hardQueries/edwRunDaemon.log
+#	../hg/encode3/eap/hardQueries/fastqToBam
+#	../hg/encode3/eap/hardQueries/foo.sql
+#	../hg/encode3/eap/hardQueries/moreOk
+#	../hg/encode3/eap/hardQueries/repDnaExp.sql
+#	../hg/encode3/eap/hardQueries/repDnaExp.tab
+#	../hg/encode3/eap/hardQueries/replicated
+#	../hg/encode3/eap/hardQueries/wgEncodeEH003007
+#	../hg/encode3/eap/lib/addMetaUuid.sql
+#	../hg/encode3/eap/lib/eapDb.h
+#	../hg/encode3/eap/lib/eapStep.sql
+#	../hg/encode3/eap/lib/edwToEap1/
+#	../hg/encode3/eap/lib/foo.sql
+#	../hg/encode3/eap/notes/
+#	../hg/encode3/eap/oneShot/diffRepVsCrossEn/anshulFail.tab
+#	../hg/encode3/eap/oneShot/diffRepVsCrossEn/anshulPass.tab
+#	../hg/encode3/eap/oneShot/diffRepVsCrossEn/chipSeqFileIds.tab
+#	../hg/encode3/eap/oneShot/diffRepVsCrossEn/diffRepVsCrossEn.c
+#	../hg/encode3/eap/oneShot/diffRepVsCrossEn/doIt
+#	../hg/encode3/eap/oneShot/diffRepVsCrossEn/edwQaPairSampleOverlap.tab
+#	../hg/encode3/eap/oneShot/diffRepVsCrossEn/efoo.zip
+#	../hg/encode3/eap/oneShot/diffRepVsCrossEn/fromAnshul.head
+#	../hg/encode3/eap/oneShot/diffRepVsCrossEn/makefile
+#	../hg/encode3/eap/oneShot/diffRepVsCrossEn/old1/
+#	../hg/encode3/eap/oneShot/diffRepVsCrossEn/old2/
+#	../hg/encode3/eap/oneShot/diffRepVsCrossEn/out.tab
+#	../hg/encode3/eap/oneShot/diffRepVsCrossEn/qualSheet.as
+#	../hg/encode3/eap/oneShot/diffRepVsCrossEn/qualSheet.c
+#	../hg/encode3/eap/oneShot/diffRepVsCrossEn/qualSheet.h
+#	../hg/encode3/eap/oneShot/diffRepVsCrossEn/qualSheet.sql
+#	../hg/encode3/eap/oneShot/diffRepVsCrossEn/sharpAnshul.tab
+#	../hg/encode3/eap/oneShot/diffRepVsCrossEn/someAnshul.tab
+#	../hg/encode3/eap/oneShot/dnaseHg38Batch/runDir/
+#	../hg/encode3/eap/oneShot/eapToHub/foo11/
+#	../hg/encode3/eap/oneShot/eapToHub/old
+#	../hg/encode3/eap/oneShot/eapToHub/test1/
+#	../hg/encode3/eap/oneShot/eapToHub/test10/
+#	../hg/encode3/eap/oneShot/eapToHub/test11/
+#	../hg/encode3/eap/oneShot/eapToHub/test12/
+#	../hg/encode3/eap/oneShot/eapToHub/test13/
+#	../hg/encode3/eap/oneShot/eapToHub/test14/
+#	../hg/encode3/eap/oneShot/eapToHub/test2/
+#	../hg/encode3/eap/oneShot/eapToHub/test3/
+#	../hg/encode3/eap/oneShot/eapToHub/test4/
+#	../hg/encode3/eap/oneShot/eapToHub/test5/
+#	../hg/encode3/eap/oneShot/eapToHub/test6/
+#	../hg/encode3/eap/oneShot/eapToHub/test7/
+#	../hg/encode3/eap/oneShot/eapToHub/test8/
+#	../hg/encode3/eap/oneShot/eapToHub/test9/
+#	../hg/encode3/eap/oneShot/eapToHub2/
+#	../hg/encode3/eap/subs.in
+#	../hg/encode3/eap/subs.out
+#	../hg/encode3/encodeDataWarehouse/addAnalysisTables.sql
+#	../hg/encode3/encodeDataWarehouse/edwCorrectFileTags/badTest.tab
+#	../hg/encode3/encodeDataWarehouse/edwCorrectFileTags/test.tab
+#	../hg/encode3/encodeDataWarehouse/edwCorrectFileTags/untest.tab
+#	../hg/encode3/encodeDataWarehouse/edwFakeManifestFromSubmit/test101/
+#	../hg/encode3/encodeDataWarehouse/edwMakeContaminationQa/foo.sql
+#	../hg/encode3/encodeDataWarehouse/edwMakeContaminationQa/makk
+#	../hg/encode3/encodeDataWarehouse/edwMakeEnrichments/makk
+#	../hg/encode3/encodeDataWarehouse/edwMakeRepeatQa/makk
+#	../hg/encode3/encodeDataWarehouse/edwMakeReplicateQa/makk
+#	../hg/encode3/encodeDataWarehouse/edwMakeValidFile/edwMakeValidFile.old
+#	../hg/encode3/encodeDataWarehouse/edwMakeWigSpotQa/
+#	../hg/encode3/encodeDataWarehouse/edwMetaManiToTdb/biggish.meta
+#	../hg/encode3/encodeDataWarehouse/edwMetaManiToTdb/biggish.tdb
+#	../hg/encode3/encodeDataWarehouse/edwMetaManiToTdb/biggish.test
+#	../hg/encode3/encodeDataWarehouse/edwMetaManiToTdb/foo.tdb
+#	../hg/encode3/encodeDataWarehouse/edwMetaManiToTdb/foo2
+#	../hg/encode3/encodeDataWarehouse/edwMetaManiToTdb/foo3
+#	../hg/encode3/encodeDataWarehouse/edwMetaManiToTdb/go
+#	../hg/encode3/encodeDataWarehouse/edwMetaManiToTdb/twoExp.meta
+#	../hg/encode3/encodeDataWarehouse/edwMetaManiToTdb/twoExp.tdb
+#	../hg/encode3/encodeDataWarehouse/edwMetaManiToTdb/twoExp.test
+#	../hg/encode3/encodeDataWarehouse/edwRunDaemon/edwRunDaemon.new
+#	../hg/encode3/encodeDataWarehouse/edwRunDaemon/edwRunDaemon.old
+#	../hg/encode3/encodeDataWarehouse/edwRunDaemon/log
+#	../hg/encode3/encodeDataWarehouse/edwRunOnIds/makk
+#	../hg/encode3/encodeDataWarehouse/edwRunner.log
+#	../hg/encode3/encodeDataWarehouse/edwScriptSubmitStatus/foo2
+#	../hg/encode3/encodeDataWarehouse/edwSubmit/validated.test
+#	../hg/encode3/encodeDataWarehouse/edwSubmit/validated.test.1
+#	../hg/encode3/encodeDataWarehouse/edwSubmit/validated.txt
+#	../hg/encode3/encodeDataWarehouse/edwUndeprecate/makefile
+#	../hg/encode3/encodeDataWarehouse/edwUndeprecate/test.acc
+#	../hg/encode3/encodeDataWarehouse/edwWebBrowse/status
+#	../hg/encode3/encodeDataWarehouse/exit.bash
+#	../hg/encode3/encodeDataWarehouse/fix/edwFixBamUcscDb/
+#	../hg/encode3/encodeDataWarehouse/fix/edwFixBasesInSample/makk
+#	../hg/encode3/encodeDataWarehouse/fix/edwFixDeleteSampleBed/
+#	../hg/encode3/encodeDataWarehouse/fix/edwFixFoo/
+#	../hg/encode3/encodeDataWarehouse/fix/edwFixOldPairedEnds/
+#	../hg/encode3/encodeDataWarehouse/fix/edwFixTechRepsFromTarballs/makefile
+#	../hg/encode3/encodeDataWarehouse/fix/edwFixTstToTstff/makefile
+#	../hg/encode3/encodeDataWarehouse/fix/edwFixTstToTstff/out
+#	../hg/encode3/encodeDataWarehouse/fix/edwFixTstToTstff/out.csh
+#	../hg/encode3/encodeDataWarehouse/fix/edwFixTstToTstff/out.sql
+#	../hg/encode3/encodeDataWarehouse/fix/edwFixTstToTstff/out2
+#	../hg/encode3/encodeDataWarehouse/fix/edwFixTstToTstff/rest.csh
+#	../hg/encode3/encodeDataWarehouse/fix/edwFixUniqueMapRatio/makefile
+#	../hg/encode3/encodeDataWarehouse/fix/edwFixUniqueMapRatio/status
+#	../hg/encode3/encodeDataWarehouse/lib/.nfs0000000009cc2523003f8b1c
+#	../hg/encode3/encodeDataWarehouse/lib/beta.sizes
+#	../hg/encode3/encodeDataWarehouse/lib/beta.snoop
+#	../hg/encode3/encodeDataWarehouse/lib/doFoo
+#	../hg/encode3/encodeDataWarehouse/lib/edwQaAgent.log
+#	../hg/encode3/encodeDataWarehouse/lib/edwQaDnaseSingStats5m.sql
+#	../hg/encode3/encodeDataWarehouse/lib/edwSubmit.log
+#	../hg/encode3/encodeDataWarehouse/lib/new.sql
+#	../hg/encode3/encodeDataWarehouse/lib/populateTest
+#	../hg/encode3/encodeDataWarehouse/lib/prod.snoop
+#	../hg/encode3/encodeDataWarehouse/lib/subFifo
+#	../hg/encode3/encodeDataWarehouse/lib/test.sizes
+#	../hg/encode3/encodeDataWarehouse/lib/test.snoop
+#	../hg/encode3/encodeDataWarehouse/oneShot/edwFakeBiosample/april2.tab
+#	../hg/encode3/encodeDataWarehouse/oneShot/edwFakeBiosample/april7.tab
+#	../hg/encode3/encodeDataWarehouse/oneShot/edwFakeBiosample/cache/
+#	../hg/encode3/encodeDataWarehouse/oneShot/edwFakeBiosample/doFoo
+#	../hg/encode3/encodeDataWarehouse/oneShot/edwFakeBiosample/edwBiosample.sql
+#	../hg/encode3/encodeDataWarehouse/oneShot/edwFakeBiosample/edwBiosample.tab
+#	../hg/encode3/encodeDataWarehouse/oneShot/edwFakeBiosample/feb10.tab
+#	../hg/encode3/encodeDataWarehouse/oneShot/edwFakeBiosample/foo.json
+#	../hg/encode3/encodeDataWarehouse/oneShot/edwFakeBiosample/foo2
+#	../hg/encode3/encodeDataWarehouse/oneShot/edwFakeBiosample/jan3.tab
+#	../hg/encode3/encodeDataWarehouse/oneShot/edwFakeBiosample/jun2.tab
+#	../hg/encode3/encodeDataWarehouse/oneShot/edwFakeBiosample/out.tab
+#	../hg/encode3/encodeDataWarehouse/oneShot/edwFakeBiosample/testIt
+#	../hg/encode3/encodeDataWarehouse/oneShot/edwFreen/
+#	../hg/encode3/encodeDataWarehouse/oneShot/edwToEap1/edwAnalysis.sql
+#	../hg/encode3/encodeDataWarehouse/oneShot/edwToEap1/out/
+#	../hg/encode3/encodeDataWarehouse/oneShot/edwToEap1/out10/
+#	../hg/encode3/encodeDataWarehouse/oneShot/edwToEap1/out11/
+#	../hg/encode3/encodeDataWarehouse/oneShot/edwToEap1/out12/
+#	../hg/encode3/encodeDataWarehouse/oneShot/edwToEap1/out13/
+#	../hg/encode3/encodeDataWarehouse/oneShot/edwToEap1/out14/
+#	../hg/encode3/encodeDataWarehouse/oneShot/edwToEap1/out15/
+#	../hg/encode3/encodeDataWarehouse/oneShot/edwToEap1/out16/
+#	../hg/encode3/encodeDataWarehouse/oneShot/edwToEap1/out17/
+#	../hg/encode3/encodeDataWarehouse/oneShot/edwToEap1/out18/
+#	../hg/encode3/encodeDataWarehouse/oneShot/edwToEap1/out19/
+#	../hg/encode3/encodeDataWarehouse/oneShot/edwToEap1/out2/
+#	../hg/encode3/encodeDataWarehouse/oneShot/edwToEap1/out20/
+#	../hg/encode3/encodeDataWarehouse/oneShot/edwToEap1/out21/
+#	../hg/encode3/encodeDataWarehouse/oneShot/edwToEap1/out22/
+#	../hg/encode3/encodeDataWarehouse/oneShot/edwToEap1/out23/
+#	../hg/encode3/encodeDataWarehouse/oneShot/edwToEap1/out3/
+#	../hg/encode3/encodeDataWarehouse/oneShot/edwToEap1/out4/
+#	../hg/encode3/encodeDataWarehouse/oneShot/edwToEap1/out5/
+#	../hg/encode3/encodeDataWarehouse/oneShot/edwToEap1/out6/
+#	../hg/encode3/encodeDataWarehouse/oneShot/edwToEap1/out7/
+#	../hg/encode3/encodeDataWarehouse/oneShot/edwToEap1/out8/
+#	../hg/encode3/encodeDataWarehouse/oneShot/edwToEap1/out9/
+#	../hg/encode3/encodeDataWarehouse/oneShot/reloadExpTable
+#	../hg/encode3/encodeDataWarehouse/oneShot/rsyncEdwExpDataType/april7.acc
+#	../hg/encode3/encodeDataWarehouse/oneShot/rsyncEdwExpDataType/april7.tab
+#	../hg/encode3/encodeDataWarehouse/oneShot/rsyncEdwExpDataType/cache/
+#	../hg/encode3/encodeDataWarehouse/oneShot/rsyncEdwExpDataType/dec14.tab
+#	../hg/encode3/encodeDataWarehouse/oneShot/rsyncEdwExpDataType/dec17.tab
+#	../hg/encode3/encodeDataWarehouse/oneShot/rsyncEdwExpDataType/dec18.tab
+#	../hg/encode3/encodeDataWarehouse/oneShot/rsyncEdwExpDataType/dec18_sorted.tab
+#	../hg/encode3/encodeDataWarehouse/oneShot/rsyncEdwExpDataType/dec9.tab
+#	../hg/encode3/encodeDataWarehouse/oneShot/rsyncEdwExpDataType/doIt
+#	../hg/encode3/encodeDataWarehouse/oneShot/rsyncEdwExpDataType/edwBiosample.as
+#	../hg/encode3/encodeDataWarehouse/oneShot/rsyncEdwExpDataType/edwExperiment.sql
+#	../hg/encode3/encodeDataWarehouse/oneShot/rsyncEdwExpDataType/feb10.tab
+#	../hg/encode3/encodeDataWarehouse/oneShot/rsyncEdwExpDataType/gone.acc
+#	../hg/encode3/encodeDataWarehouse/oneShot/rsyncEdwExpDataType/jan16.tab
+#	../hg/encode3/encodeDataWarehouse/oneShot/rsyncEdwExpDataType/jan17.tab
+#	../hg/encode3/encodeDataWarehouse/oneShot/rsyncEdwExpDataType/jun2.tab
+#	../hg/encode3/encodeDataWarehouse/oneShot/rsyncEdwExpDataType/myKey
+#	../hg/encode3/encodeDataWarehouse/oneShot/rsyncEdwExpDataType/new.acc
+#	../hg/encode3/encodeDataWarehouse/oneShot/rsyncEdwExpDataType/oldCache/
+#	../hg/encode3/encodeDataWarehouse/oneShot/rsyncEdwExpDataType/oldOut.tab
+#	../hg/encode3/encodeDataWarehouse/oneShot/rsyncEdwExpDataType/out.acc
+#	../hg/encode3/encodeDataWarehouse/oneShot/rsyncEdwExpDataType/out.tab
+#	../hg/encode3/encodeDataWarehouse/oneShot/rsyncEdwExpDataType/testIt
+#	../hg/encode3/encodeDataWarehouse/oneShot/sampleBam/ENCFF000ABR.01.bam
+#	../hg/encode3/encodeDataWarehouse/oneShot/sampleBam/ENCFF000ABR.01.sam
+#	../hg/encode3/encodeDataWarehouse/oneShot/sampleBam/ENCFF000ABR.bam
+#	../hg/encode3/encodeDataWarehouse/oneShot/sampleBam/bamHeader
+#	../hg/encode3/encodeDataWarehouse/oneShot/sampleBam/foo.bed
+#	../hg/encode3/encodeDataWarehouse/oneShot/testSubmitValid/
+#	../hg/encode3/encodeDataWarehouse/pull
+#	../hg/encode3/encodeDataWarehouse/snoop.full
+#	../hg/encode3/encodeDataWarehouse/status
+#	../hg/encode3/encodeDataWarehouse/timingNotes
+#	../hg/encode3/encodeDataWarehouse/upgrade/
+#	../hg/encode3/encodeDataWarehouse/utils/edwBamStats/edwBamStats.good
+#	../hg/encode3/encodeDataWarehouse/utils/edwBamStats/edwBamStats.lowMem
+#	../hg/encode3/encodeDataWarehouse/utils/edwBamStats/foo.bed
+#	../hg/encode3/encodeDataWarehouse/utils/edwBamStats/foo.ra
+#	../hg/encode3/encodeDataWarehouse/utils/edwBamStats/foo2.ra
+#	../hg/encode3/encodeDataWarehouse/utils/edwBamStats/foo3.ra
+#	../hg/encode3/encodeDataWarehouse/utils/edwBamStats/n.bam
+#	../hg/encode3/encodeDataWarehouse/utils/edwBamStats/n.ra
+#	../hg/encode3/encodeDataWarehouse/utils/edwBamStats/pair.bam
+#	../hg/encode3/encodeDataWarehouse/utils/edwBamStats/pair.ra
+#	../hg/encode3/encodeDataWarehouse/utils/edwBamStats/s.bam
+#	../hg/encode3/encodeDataWarehouse/utils/edwBamStats/s.ra
+#	../hg/encode3/encodeDataWarehouse/utils/edwBamStats/s5.bam
+#	../hg/encode3/encodeDataWarehouse/utils/edwBamStats/s5.sam
+#	../hg/encode3/encodeDataWarehouse/utils/edwBamStats/s500.bam
+#	../hg/encode3/encodeDataWarehouse/utils/edwBamStats/s50000.bam
+#	../hg/encode3/encodeDataWarehouse/utils/edwBamStats/s50000.ra
+#	../hg/encode3/encodeDataWarehouse/utils/edwBamToWig/encode_regions_r2.bam
+#	../hg/encode3/encodeDataWarehouse/utils/edwBamToWig/makefile
+#	../hg/encode3/encodeDataWarehouse/utils/edwBamToWig/test.bw
+#	../hg/encode3/encodeDataWarehouse/utils/edwBamToWig/test.out
+#	../hg/encode3/encodeDataWarehouse/utils/edwComparePeaks/a.bigBed
+#	../hg/encode3/encodeDataWarehouse/utils/edwComparePeaks/b.bigBed
+#	../hg/encode3/encodeDataWarehouse/utils/edwComparePeaks/out.ra
+#	../hg/encode3/encodeDataWarehouse/utils/edwReplicatedPeaks/484_1.broadPeak.bigBed
+#	../hg/encode3/encodeDataWarehouse/utils/edwReplicatedPeaks/484_485_rep.broadPeak
+#	../hg/encode3/encodeDataWarehouse/utils/edwReplicatedPeaks/485_1.broadPeak.bigBed
+#	../hg/encode3/encodeDataWarehouse/utils/edwReplicatedPeaks/488.merge
+#	../hg/encode3/encodeDataWarehouse/utils/edwReplicatedPeaks/488_1.broadPeak.bigBed
+#	../hg/encode3/encodeDataWarehouse/utils/edwReplicatedPeaks/488_1.narrowPeak.bigBed
+#	../hg/encode3/encodeDataWarehouse/utils/edwReplicatedPeaks/488_2.broadPeak.bigBed
+#	../hg/encode3/encodeDataWarehouse/utils/edwReplicatedPeaks/488_2.narrowPeak.bigBed
+#	../hg/encode3/encodeDataWarehouse/utils/edwReplicatedPeaks/488_foo.broadPeak.bigBed
+#	../hg/encode3/encodeDataWarehouse/utils/edwReplicatedPeaks/488_foo.narrowPeak.bigBed
+#	../hg/encode3/encodeDataWarehouse/utils/edwReplicatedPeaks/488_r.broadPeak
+#	../hg/encode3/encodeDataWarehouse/utils/edwReplicatedPeaks/488_rep.broadPeak
+#	../hg/encode3/encodeDataWarehouse/utils/edwReplicatedPeaks/488_rep.narrowPeak
+#	../hg/encode3/encodeDataWarehouse/utils/edwReplicatedPeaks/TSTFF003YCG.broadPeak.bigBed
+#	../hg/encode3/encodeDataWarehouse/utils/edwReplicatedPeaks/TSTFF003YCH.narrowPeak.bigBed
+#	../hg/encode3/encodeDataWarehouse/utils/edwReplicatedPeaks/TSTFF003YLI.broadPeak.bigBed
+#	../hg/encode3/encodeDataWarehouse/utils/edwReplicatedPeaks/TSTFF003YLJ.narrowPeak.bigBed
+#	../hg/encode3/encodeDataWarehouse/utils/edwReplicatedPeaks/TSTFF003YVA.broadPeak.bigBed
+#	../hg/encode3/encodeDataWarehouse/utils/edwReplicatedPeaks/TSTFF003YVG.broadPeak.bigBed
+#	../hg/encode3/encodeDataWarehouse/utils/edwReplicatedPeaks/a.broadPeak
+#	../hg/encode3/encodeDataWarehouse/utils/edwReplicatedPeaks/a1.bb
+#	../hg/encode3/encodeDataWarehouse/utils/edwReplicatedPeaks/a1.broadPeak
+#	../hg/encode3/encodeDataWarehouse/utils/edwReplicatedPeaks/a2.bb
+#	../hg/encode3/encodeDataWarehouse/utils/edwReplicatedPeaks/a2.broadPeak
+#	../hg/encode3/encodeDataWarehouse/utils/edwReplicatedPeaks/clustersOver2.bed
+#	../hg/encode3/encodeDataWarehouse/utils/edwReplicatedPeaks/tmp.broadPeak
+#	../hg/encode3/encodeDataWarehouse/utils/edwReplicatedPeaks/tmp.narrowPeak
+#	../hg/encode3/encodeDataWarehouse/utils/edwReplicatedPeaks/tmp.narrowPeak.bb
+#	../hg/encode3/encodeDataWarehouse/utils/edwSamPairedEndStats/foo2
+#	../hg/encode3/encodeDataWarehouse/utils/edwSamPairedEndStats/test.out
+#	../hg/encode3/encodeDataWarehouse/utils/edwSamPairedEndStats/test.ra
+#	../hg/encode3/encodeDataWarehouse/utils/edwSamPairedEndStats/test.sam
+#	../hg/encode3/encodeDataWarehouse/utils/edwSamRepeatAnalysis/makk
+#	../hg/encode3/encodeDataWarehouse/utils/edwSamRepeatAnalysis/out.ra
+#	../hg/encode3/encodeDataWarehouse/utils/edwSolexaToSangerFastq/fixed.fq.gz
+#	../hg/encode3/encodeDataWarehouse/utils/edwSolexaToSangerFastq/foo.fq
+#	../hg/encode3/encodeDataWarehouse/utils/edwSolexaToSangerFastq/subs.in
+#	../hg/encode3/encodeDataWarehouse/utils/edwValidKey/
+#	../hg/encode3/importEncode2/encode2AddSumsAndSizes/
+#	../hg/encode3/importEncode2/encode2AddTgzContentsToManifest/
+#	../hg/encode3/importEncode2/encode2BedDoctor/fixed.bed
+#	../hg/encode3/importEncode2/encode2BedDoctor/weird.bed
+#	../hg/encode3/importEncode2/encode2CmpMd5/match.tab
+#	../hg/encode3/importEncode2/encode2CmpMd5/mismatch.lst
+#	../hg/encode3/importEncode2/encode2CmpMd5/mismatch.tab
+#	../hg/encode3/importEncode2/encode2CmpMd5/recalcHit.tab
+#	../hg/encode3/importEncode2/encode2CmpMd5/recalcMiss.tab
+#	../hg/encode3/importEncode2/encode2CmpMd5/recalcMissesUcsc.md5sum
+#	../hg/encode3/importEncode2/encode2CmpMd5/sdsc.md5sum
+#	../hg/encode3/importEncode2/encode2CmpMd5/sdscOnly.tab
+#	../hg/encode3/importEncode2/encode2CmpMd5/ucsc.md5sum
+#	../hg/encode3/importEncode2/encode2CmpMd5/ucscOnly.tab
+#	../hg/encode3/importEncode2/encode2ExpDumpFlat/expFlat.sql
+#	../hg/encode3/importEncode2/encode2ExpDumpFlat/expFlat.tab
+#	../hg/encode3/importEncode2/encode2ExpDumpFlat/go
+#	../hg/encode3/importEncode2/encode2ExpDumpFlat/noSeries
+#	../hg/encode3/importEncode2/encode2ExpDumpFlat/noSeries.tab
+#	../hg/encode3/importEncode2/encode2ExpDumpFlat/output.tab
+#	../hg/encode3/importEncode2/encode2ExpDumpFlat/view.sql
+#	../hg/encode3/importEncode2/encode2FastqSubdirsInManifest/
+#	../hg/encode3/importEncode2/encode2GffDoctor/fixed.bed
+#	../hg/encode3/importEncode2/encode2GffDoctor/fixed.gff
+#	../hg/encode3/importEncode2/encode2GffDoctor/manifest.tab
+#	../hg/encode3/importEncode2/encode2GffDoctor/test.gff
+#	../hg/encode3/importEncode2/encode2JustBeddy/
+#	../hg/encode3/importEncode2/encode2MakeEncode3/big.make
+#	../hg/encode3/importEncode2/encode2MakeEncode3/big.make.out
+#	../hg/encode3/importEncode2/encode2MakeEncode3/encode2encode3.make
+#	../hg/encode3/importEncode2/encode2MakeEncode3/gfft.make
+#	../hg/encode3/importEncode2/encode2MakeEncode3/gfftManifest.new
+#	../hg/encode3/importEncode2/encode2MakeEncode3/gfftManifest.tab
+#	../hg/encode3/importEncode2/encode2MakeEncode3/gfftRemap.lst
+#	../hg/encode3/importEncode2/encode2MakeEncode3/go
+#	../hg/encode3/importEncode2/encode2MakeEncode3/manifest.new
+#	../hg/encode3/importEncode2/encode2MakeEncode3/manifest.tab
+#	../hg/encode3/importEncode2/encode2MakeEncode3/remap.lst
+#	../hg/encode3/importEncode2/encode2Manifest/foo2
+#	../hg/encode3/importEncode2/encode2Manifest/go
+#	../hg/encode3/importEncode2/encode2Manifest/manifest.firstBig
+#	../hg/encode3/importEncode2/encode2Manifest/manifest.tab
+#	../hg/encode3/importEncode2/encode2Manifest/simpleManifest.tab
+#	../hg/encode3/importEncode2/encode2Manifest/validatedManifest.tab
+#	../hg/encode3/importEncode2/encode2Md5UpdateManifest/both
+#	../hg/encode3/importEncode2/encode2Md5UpdateManifest/fixed.tab
+#	../hg/encode3/importEncode2/encode2Md5UpdateManifest/header.tab
+#	../hg/encode3/importEncode2/encode2Md5UpdateManifest/manifest.tab
+#	../hg/encode3/importEncode2/encode2Md5UpdateManifest/patch.md5
+#	../hg/encode3/importEncode2/encode2Meta/backup/
+#	../hg/encode3/importEncode2/encode2Meta/bigBedInfo
+#	../hg/encode3/importEncode2/encode2Meta/foo.txt
+#	../hg/encode3/importEncode2/encode2Meta/go
+#	../hg/encode3/importEncode2/encode2Meta/hg19MetaFromRr.txt
+#	../hg/encode3/importEncode2/encode2Meta/manifest.tab
+#	../hg/encode3/importEncode2/encode2Meta/meta.ra
+#	../hg/encode3/importEncode2/encode2Meta/mm9MetaFromRr.txt
+#	../hg/encode3/importEncode2/encode2Meta/noParent.ra
+#	../hg/encode3/importEncode2/encode2Meta/parented.ra
+#	../hg/encode3/importEncode2/encode2Meta/sample.ra
+#	../hg/encode3/importEncode2/encode2Meta/sampleHoisted.ra
+#	../hg/encode3/importEncode2/encode2Meta/ugly.tree
+#	../hg/encode3/importEncode2/encode2MetaPatchRenamed/foo2
+#	../hg/encode3/importEncode2/encode2MetaPatchRenamed/go
+#	../hg/encode3/importEncode2/encode2MetaPatchRenamed/manifest.txt
+#	../hg/encode3/importEncode2/encode2MetaPatchRenamed/metaFlat.txt
+#	../hg/encode3/importEncode2/encode2MetaPatchRenamed/metaNoParents.gz
+#	../hg/encode3/importEncode2/encode2MetaPatchRenamed/metaNoParents.txt
+#	../hg/encode3/importEncode2/encode2MetaPatchRenamed/metaWithParents.txt
+#	../hg/encode3/importEncode2/encode2MetaPatchRenamed/patched.ra
+#	../hg/encode3/importEncode2/encode2MetaPatchRenamed/reformat.patch
+#	../hg/encode3/importEncode2/encode2MetaPatchRenamed/reformat.ra
+#	../hg/encode3/importEncode2/encode2MetaPatchRenamed/test.out
+#	../hg/encode3/importEncode2/encode2MetaPatchRenamed/tgz.dir.patch
+#	../hg/encode3/importEncode2/encode2MetaPatchRenamed/untarred.ra
+#	../hg/encode3/importEncode2/encode2ReplacedAndDepricated/
+#	../hg/encode3/importEncode2/encodeCvToDb/ab.sql
+#	../hg/encode3/importEncode2/encodeCvToDb/abTarget.sql
+#	../hg/encode3/importEncode2/encodeCvToDb/backup2/
+#	../hg/encode3/importEncode2/encodeCvToDb/cv.as
+#	../hg/encode3/importEncode2/encodeCvToDb/cv.atree
+#	../hg/encode3/importEncode2/encodeCvToDb/cv.django/
+#	../hg/encode3/importEncode2/encodeCvToDb/cv.ra
+#	../hg/encode3/importEncode2/encodeCvToDb/cv.sql
+#	../hg/encode3/importEncode2/encodeCvToDb/cv.stats
+#	../hg/encode3/importEncode2/encodeCvToDb/cv.tab/
+#	../hg/encode3/importEncode2/encodeCvToDb/dump/
+#	../hg/encode3/importEncode2/encodeCvToDb/go
+#	../hg/encode3/importEncode2/encodeCvToDb/loadTabs
+#	../hg/encode3/importEncode2/encodeCvToDb/makeEncodeMetaDb
+#	../hg/encode3/importEncode2/encodeCvToDb/old.atree
+#	../hg/encode3/importEncode2/encodeCvToDb/out
+#	../hg/encode3/importEncode2/encodeCvToDb/pull
+#	../hg/encode3/importEncode2/encodeCvToDb/raTagNames
+#	../hg/encode3/importEncode2/encodeCvToDb/status
+#	../hg/encode3/importEncode2/encodeCvToDb/tableDescriptions.tab
+#	../hg/encode3/importEncode2/encodeCvToDb/testCvToSql.out
+#	../hg/encode3/importEncode2/encodeExpToCvDb/backup/
+#	../hg/encode3/importEncode2/encodeExpToCvDb/django.py
+#	../hg/encode3/importEncode2/encodeExpToCvDb/django18.py
+#	../hg/encode3/importEncode2/encodeExpToCvDb/exp.django
+#	../hg/encode3/importEncode2/encodeExpToCvDb/exp.tab
+#	../hg/encode3/importEncode2/encodeExpToCvDb/experiment.as
+#	../hg/encode3/importEncode2/encodeExpToCvDb/experiment.tab
+#	../hg/encode3/importEncode2/encodeExpToCvDb/experiment18.tab
+#	../hg/encode3/importEncode2/encodeExpToCvDb/files.tab
+#	../hg/encode3/importEncode2/encodeExpToCvDb/foo.c
+#	../hg/encode3/importEncode2/encodeExpToCvDb/foo.django
+#	../hg/encode3/importEncode2/encodeExpToCvDb/foo.h
+#	../hg/encode3/importEncode2/encodeExpToCvDb/foo.sql
+#	../hg/encode3/importEncode2/encodeExpToCvDb/out
+#	../hg/encode3/importEncode2/encodeExpToCvDb/result.as
+#	../hg/encode3/importEncode2/encodeExpToCvDb/result.tab
+#	../hg/encode3/importEncode2/encodeExpToCvDb/result18.tab
+#	../hg/encode3/importEncode2/encodeExpToCvDb/series.as
+#	../hg/encode3/importEncode2/encodeExpToCvDb/series.tab
+#	../hg/encode3/importEncode2/encodeExpToCvDb/series18.tab
+#	../hg/encode3/importEncode2/encodeMd5sum.zip
+#	../hg/encode3/importEncode2/renamedFiles
+#	../hg/encode3/notesOnBwa.txt
+#	../hg/encode3/stanFace/
+#	../hg/encode3/status
+#	../hg/err
+#	../hg/foo.ra
+#	../hg/genePredToBed/foo.bed
+#	../hg/hgGene/status
+#	../hg/hgHubConnect/status
+#	../hg/hgTables/all.joiner
+#	../hg/hgTables/hgTablesTest.log
+#	../hg/hgTables/status
+#	../hg/hgTablesTest/log
+#	../hg/hgTrackUi/cgapSageUi.c.blame
+#	../hg/hgTrackUi/coo
+#	../hg/hgTrackUi/encodePeakUi.c.blame
+#	../hg/hgTrackUi/hgTrackUi.c.blame
+#	../hg/hgTrackUi/hgTrackUi.h.blame
+#	../hg/hgTrackUi/status
+#	../hg/hgTracks/bam.ra
+#	../hg/hgTracks/blame
+#	../hg/hgTracks/cart.ra
+#	../hg/hgTracks/diff
+#	../hg/hgTracks/foo.ra
+#	../hg/hgTracks/gilt.out
+#	../hg/hgTracks/hgt/
+#	../hg/hgTracks/hgtIdeo/
+#	../hg/hgTracks/output.ps
+#	../hg/hgTracks/track.ra
+#	../hg/hgTracks/track2.ra
+#	../hg/hgTracks/track3.ra
+#	../hg/hgTracks/wigDraws.lst
+#	../hg/hgc/status
+#	../hg/inc/omiciaUi.h
+#	../hg/inc/oregannoOther.h
+#	../hg/lib/HInv.c.blame
+#	../hg/lib/acemblyClass.c.blame
+#	../hg/lib/affy10K.c.blame
+#	../hg/lib/affy10KDetails.c.blame
+#	../hg/lib/affy120KDetails.c.blame
+#	../hg/lib/affyAllExonProbe.c.blame
+#	../hg/lib/affyAtlas.c.blame
+#	../hg/lib/affyGenoDetails.c.blame
+#	../hg/lib/affyOffset.c.blame
+#	../hg/lib/affyPairs.c.blame
+#	../hg/lib/affyTransLifted.c.blame
+#	../hg/lib/affyTranscriptome.c.blame
+#	../hg/lib/agp.c.blame
+#	../hg/lib/agpFrag.c.blame
+#	../hg/lib/agpGap.c.blame
+#	../hg/lib/alignInfo.c.blame
+#	../hg/lib/alignSeqSizes.c.blame
+#	../hg/lib/alleleFreqs.c.blame
+#	../hg/lib/allpredictions.c.blame
+#	../hg/lib/altGraph.c.blame
+#	../hg/lib/altGraphX.c.blame
+#	../hg/lib/ancientRref.c.blame
+#	../hg/lib/annoGrateWig.c.blame
+#	../hg/lib/annoGratorGpVar.c.blame
+#	../hg/lib/annoStreamDb.c.blame
+#	../hg/lib/annoStreamWig.c.blame
+#	../hg/lib/api.c.blame
+#	../hg/lib/arCOGs.c.blame
+#	../hg/lib/arcogdesc.c.blame
+#	../hg/lib/atomDb.c.blame
+#	../hg/lib/axtInfo.c.blame
+#	../hg/lib/axtLib.c.blame
+#	../hg/lib/bacCloneAlias.c.blame
+#	../hg/lib/bacCloneXRef.c.blame
+#	../hg/lib/bacEndAlias.c.blame
+#	../hg/lib/bactigPos.c.blame
+#	../hg/lib/baseMaskCommon.c.blame
+#	../hg/lib/bdgpExprLink.c.blame
+#	../hg/lib/bdgpGeneInfo.c.blame
+#	../hg/lib/bdgpSwissProt.c.blame
+#	../hg/lib/bed.c.blame
+#	../hg/lib/bed12Source.c.blame
+#	../hg/lib/bed12wSeq.c.blame
+#	../hg/lib/bed5FloatScore.c.blame
+#	../hg/lib/bed5Pval.c.blame
+#	../hg/lib/bed6FloatScore.c.blame
+#	../hg/lib/bed8Attrs.c.blame
+#	../hg/lib/bedCart.c.blame
+#	../hg/lib/bedDetail.c.blame
+#	../hg/lib/bgiGeneInfo.c.blame
+#	../hg/lib/bgiGeneSnp.c.blame
+#	../hg/lib/bgiSnp.c.blame
+#	../hg/lib/bioImage.c.blame
+#	../hg/lib/blame
+#	../hg/lib/blastTab.c.blame
+#	../hg/lib/blastzNet.c.blame
+#	../hg/lib/blatServers.c.blame
+#	../hg/lib/borf.c.blame
+#	../hg/lib/borkPseudoHom.c.blame
+#	../hg/lib/botDelay.c.blame
+#	../hg/lib/cart.c.blame
+#	../hg/lib/cart.new
+#	../hg/lib/cartDb.c.blame
+#	../hg/lib/ccdsGeneMap.c.blame
+#	../hg/lib/ccdsInfo.c.blame
+#	../hg/lib/ccdsNotes.c.blame
+#	../hg/lib/cddDesc.c.blame
+#	../hg/lib/cddInfo.c.blame
+#	../hg/lib/cdsEvidence.c.blame
+#	../hg/lib/cdsOrtho.c.blame
+#	../hg/lib/cdsPick.c.blame
+#	../hg/lib/cdsSpec.c.blame
+#	../hg/lib/celeraCoverage.c.blame
+#	../hg/lib/celeraDupPositive.c.blame
+#	../hg/lib/cgh.c.blame
+#	../hg/lib/chainCart.c.blame
+#	../hg/lib/chainDb.c.blame
+#	../hg/lib/chainGap.c.blame
+#	../hg/lib/chainLink.c.blame
+#	../hg/lib/chainNet.c.blame
+#	../hg/lib/chainNetDbLoad.c.blame
+#	../hg/lib/chicken13kInfo.c.blame
+#	../hg/lib/chr18deletions.c.blame
+#	../hg/lib/chromBins.c.blame
+#	../hg/lib/chromGraph.c.blame
+#	../hg/lib/chromGraphFactory.c.blame
+#	../hg/lib/chromInfo.c.blame
+#	../hg/lib/chromInserts.c.blame
+#	../hg/lib/chromKeeper.c.blame
+#	../hg/lib/clonePos.c.blame
+#	../hg/lib/cnpIafrate.c.blame
+#	../hg/lib/cnpIafrate2.c.blame
+#	../hg/lib/cnpLocke.c.blame
+#	../hg/lib/cnpRedon.c.blame
+#	../hg/lib/cnpSebat.c.blame
+#	../hg/lib/cnpSebat2.c.blame
+#	../hg/lib/cnpSharp.c.blame
+#	../hg/lib/cnpSharp2.c.blame
+#	../hg/lib/cnpSharpCutoff.c.blame
+#	../hg/lib/cnpSharpSample.c.blame
+#	../hg/lib/codeBlast.c.blame
+#	../hg/lib/codeBlastScore.c.blame
+#	../hg/lib/cogs.c.blame
+#	../hg/lib/cogsxra.c.blame
+#	../hg/lib/columnInfo.c.blame
+#	../hg/lib/contigAcc.c.blame
+#	../hg/lib/coordConv.c.blame
+#	../hg/lib/cpgIsland.c.blame
+#	../hg/lib/cpgIslandExt.c.blame
+#	../hg/lib/ctgPos.c.blame
+#	../hg/lib/ctgPos2.c.blame
+#	../hg/lib/customFactory.c.blame
+#	../hg/lib/customPp.c.blame
+#	../hg/lib/customTrack.c.blame
+#	../hg/lib/cutter.c.blame
+#	../hg/lib/cv.c.blame
+#	../hg/lib/cytoBand.c.blame
+#	../hg/lib/dbDb.c.blame
+#	../hg/lib/dbRIP.c.blame
+#	../hg/lib/dbSnpRs.c.blame
+#	../hg/lib/defaultDb.c.blame
+#	../hg/lib/delConrad2.c.blame
+#	../hg/lib/delHinds2.c.blame
+#	../hg/lib/dgv.c.blame
+#	../hg/lib/diff
+#	../hg/lib/dless.c.blame
+#	../hg/lib/dnaMarkovSql.c.blame
+#	../hg/lib/dnaMotifSql.c.blame
+#	../hg/lib/dnaProbe.c.blame
+#	../hg/lib/dv.c.blame
+#	../hg/lib/dvBed.c.blame
+#	../hg/lib/dvXref2.c.blame
+#	../hg/lib/easyGene.c.blame
+#	../hg/lib/ec.c.blame
+#	../hg/lib/ecAttribute.c.blame
+#	../hg/lib/ecAttributeCode.c.blame
+#	../hg/lib/ecCode.c.blame
+#	../hg/lib/encode/foo.py
+#	../hg/lib/ensFace.c.blame
+#	../hg/lib/ensInfo.c.blame
+#	../hg/lib/ensPhusionBlast.c.blame
+#	../hg/lib/ensXRefZfish.c.blame
+#	../hg/lib/est3.c.blame
+#	../hg/lib/estOrientInfo.c.blame
+#	../hg/lib/estPair.c.blame
+#	../hg/lib/exoFish.c.blame
+#	../hg/lib/expData.c.blame
+#	../hg/lib/expRecord.c.blame
+#	../hg/lib/exprBed.c.blame
+#	../hg/lib/fbTables.c.blame
+#	../hg/lib/featureBits.c.blame
+#	../hg/lib/fileUi.c.blame
+#	../hg/lib/findKGAlias.c.blame
+#	../hg/lib/findKGProtAlias.c.blame
+#	../hg/lib/fishClones.c.blame
+#	../hg/lib/flyBase2004Xref.c.blame
+#	../hg/lib/flyBaseSwissProt.c.blame
+#	../hg/lib/flyreg.c.blame
+#	../hg/lib/flyreg2.c.blame
+#	../hg/lib/fosEndPairs.c.blame
+#	../hg/lib/gbExtFile.c.blame
+#	../hg/lib/gbMiscDiff.c.blame
+#	../hg/lib/gbProtAnn.c.blame
+#	../hg/lib/gbRNAs.c.blame
+#	../hg/lib/gbSeq.c.blame
+#	../hg/lib/gbWarn.c.blame
+#	../hg/lib/gcPercent.c.blame
+#	../hg/lib/genMapDb.c.blame
+#	../hg/lib/genbank.c.blame
+#	../hg/lib/genbankBlackList.c.blame
+#	../hg/lib/gencodeGeneClass.c.blame
+#	../hg/lib/gencodeIntron.c.blame
+#	../hg/lib/geneBands.c.blame
+#	../hg/lib/geneCheck.c.blame
+#	../hg/lib/geneCheckDetails.c.blame
+#	../hg/lib/geneCheckWidget.c.blame
+#	../hg/lib/geneGraph.c.blame
+#	../hg/lib/genePix.c.blame
+#	../hg/lib/genePred.c.blame
+#	../hg/lib/genePredReader.c.blame
+#	../hg/lib/geneSimilarities.c.blame
+#	../hg/lib/geneTree.c.blame
+#	../hg/lib/genoLay.c.blame
+#	../hg/lib/genomeRangeTreeFile.c.blame
+#	../hg/lib/genomicDups.c.blame
+#	../hg/lib/genomicSuperDups.c.blame
+#	../hg/lib/genotype.c.blame
+#	../hg/lib/genotypeFreqs.c.blame
+#	../hg/lib/geoMirror.c.blame
+#	../hg/lib/ggCluster.c.blame
+#	../hg/lib/ggDbIo.c.blame
+#	../hg/lib/ggDbRep.c.blame
+#	../hg/lib/ggDump.c.blame
+#	../hg/lib/ggGraph.c.blame
+#	../hg/lib/ggMrnaAli.c.blame
+#	../hg/lib/ggTypes.c.blame
+#	../hg/lib/glDbRep.c.blame
+#	../hg/lib/goa.c.blame
+#	../hg/lib/goaPart.c.blame
+#	../hg/lib/googleAnalytics.c.blame
+#	../hg/lib/gpFx.c.blame
+#	../hg/lib/growthCondition.c.blame
+#	../hg/lib/grp.c.blame
+#	../hg/lib/gv.c.blame
+#	../hg/lib/gvUi.c.blame
+#	../hg/lib/gwasCatalog.c.blame
+#	../hg/lib/hCommon.c.blame
+#	../hg/lib/hCytoBand.c.blame
+#	../hg/lib/hPrint.c.blame
+#	../hg/lib/hVarSubst.c.blame
+#	../hg/lib/hapmapAlleleFreq.c.blame
+#	../hg/lib/hapmapAlleles.c.blame
+#	../hg/lib/hapmapAllelesCombined.c.blame
+#	../hg/lib/hapmapAllelesOrtho.c.blame
+#	../hg/lib/hapmapAllelesSummary.c.blame
+#	../hg/lib/hapmapLd.c.blame
+#	../hg/lib/hapmapPhaseIIISummary.c.blame
+#	../hg/lib/hapmapPrimateAlleles.c.blame
+#	../hg/lib/hapmapSnps.c.blame
+#	../hg/lib/hapmapSnpsCombined.c.blame
+#	../hg/lib/hdb.c.blame
+#	../hg/lib/hgBam.c.blame
+#	../hg/lib/hgColors.c.blame
+#	../hg/lib/hgConfig.c.blame
+#	../hg/lib/hgExp.c.blame
+#	../hg/lib/hgFind.c.blame
+#	../hg/lib/hgFindSpec.c.blame
+#	../hg/lib/hgFindSpecCustom.c.blame
+#	../hg/lib/hgGene.c.blame
+#	../hg/lib/hgMaf.c.blame
+#	../hg/lib/hgRelate.c.blame
+#	../hg/lib/hgSeq.c.blame
+#	../hg/lib/hgdpGeo.c.blame
+#	../hg/lib/hgnc.c.blame
+#	../hg/lib/hubConnect.c.blame
+#	../hg/lib/hui.c.blame
+#	../hg/lib/humanParalog.c.blame
+#	../hg/lib/hvGfx.c.blame
+#	../hg/lib/imageClone.c.blame
+#	../hg/lib/isochores.c.blame
+#	../hg/lib/ispyTables.c.blame
+#	../hg/lib/itemAttr.c.blame
+#	../hg/lib/itemConf.c.blame
+#	../hg/lib/itemDetailsHtml.c.blame
+#	../hg/lib/jalview.c.blame
+#	../hg/lib/jaxOrtholog.c.blame
+#	../hg/lib/jaxQTL.c.blame
+#	../hg/lib/jaxQTL2.c.blame
+#	../hg/lib/jaxQTL3.c.blame
+#	../hg/lib/jgiGene.c.blame
+#	../hg/lib/jksql.c.blame
+#	../hg/lib/joiner.c.blame
+#	../hg/lib/jsHelper.c.blame
+#	../hg/lib/kg1ToKg2.c.blame
+#	../hg/lib/kgAlias.c.blame
+#	../hg/lib/kgColor.c.blame
+#	../hg/lib/kgMapName.c.blame
+#	../hg/lib/kgProtAlias.c.blame
+#	../hg/lib/kgXref.c.blame
+#	../hg/lib/knownCanonical.c.blame
+#	../hg/lib/knownInfo.c.blame
+#	../hg/lib/knownMore.c.blame
+#	../hg/lib/knownToSuper.c.blame
+#	../hg/lib/landmark.c.blame
+#	../hg/lib/landmarkUi.c.blame
+#	../hg/lib/ld.c.blame
+#	../hg/lib/ld2.c.blame
+#	../hg/lib/lfs.c.blame
+#	../hg/lib/liftOver.c.blame
+#	../hg/lib/liftOverChain.c.blame
+#	../hg/lib/liftUp.c.blame
+#	../hg/lib/llaInfo.c.blame
+#	../hg/lib/lowelabArkinOperonScore.c.blame
+#	../hg/lib/lowelabPfamHit.c.blame
+#	../hg/lib/lowelabPfamHit.h.blame
+#	../hg/lib/lowelabTIGROperonScore.c.blame
+#	../hg/lib/loweutils.c.blame
+#	../hg/lib/lsSnpPdb.c.blame
+#	../hg/lib/lsSnpPdbChimera.c.blame
+#	../hg/lib/mafFrames.c.blame
+#	../hg/lib/mafGene.c.blame
+#	../hg/lib/mafSummary.c.blame
+#	../hg/lib/makeItemsItem.c.blame
+#	../hg/lib/mammalPsg.c.blame
+#	../hg/lib/mapSts.c.blame
+#	../hg/lib/mcnBreakpoints.c.blame
+#	../hg/lib/mdb.c.blame
+#	../hg/lib/med
+#	../hg/lib/megablastInfo.c.blame
+#	../hg/lib/metaChromGraph.c.blame
+#	../hg/lib/mgiID.c.blame
+#	../hg/lib/microarray.c.blame
+#	../hg/lib/minChromSize.c.blame
+#	../hg/lib/minGeneInfo.c.blame
+#	../hg/lib/mouseOrtho.c.blame
+#	../hg/lib/mouseSyn.c.blame
+#	../hg/lib/mouseSynWhd.c.blame
+#	../hg/lib/mrnaMisMatch.c.blame
+#	../hg/lib/mysqlTableStatus.c.blame
+#	../hg/lib/ncRna.c.blame
+#	../hg/lib/netAlign.c.blame
+#	../hg/lib/netCart.c.blame
+#	../hg/lib/nonCodingUi.c.blame
+#	../hg/lib/omicia.c.blame
+#	../hg/lib/omiciaUi.c
+#	../hg/lib/omiciaUi.c.blame
+#	../hg/lib/omimTitle.c.blame
+#	../hg/lib/ooUtils.c.blame
+#	../hg/lib/oreganno.c.blame
+#	../hg/lib/oregannoOther.as
+#	../hg/lib/oregannoOther.c
+#	../hg/lib/oregannoOther.c.blame
+#	../hg/lib/oregannoOther.sql
+#	../hg/lib/oregannoUi.c.blame
+#	../hg/lib/orthoAlleles.c.blame
+#	../hg/lib/pal.c.blame
+#	../hg/lib/pbStamp.c.blame
+#	../hg/lib/pcrResult.c.blame
+#	../hg/lib/pepPred.c.blame
+#	../hg/lib/pgPhenoAssoc.c.blame
+#	../hg/lib/pgPolyphenPred.c.blame
+#	../hg/lib/pgSiftPred.c.blame
+#	../hg/lib/pgSnp.c.blame
+#	../hg/lib/plasEndPairs.c.blame
+#	../hg/lib/polyGenotype.c.blame
+#	../hg/lib/protFeat.c.blame
+#	../hg/lib/protVar.c.blame
+#	../hg/lib/pscreen.c.blame
+#	../hg/lib/pseudoGeneLink.c.blame
+#	../hg/lib/pslReader.c.blame
+#	../hg/lib/pslWQueryID.c.blame
+#	../hg/lib/pslWScore.c.blame
+#	../hg/lib/pull
+#	../hg/lib/push
+#	../hg/lib/putaInfo.c.blame
+#	../hg/lib/qaSeq.c.blame
+#	../hg/lib/rangeTreeFile.c.blame
+#	../hg/lib/rankProp.c.blame
+#	../hg/lib/recombRate.c.blame
+#	../hg/lib/recombRateMouse.c.blame
+#	../hg/lib/recombRateRat.c.blame
+#	../hg/lib/refLink.c.blame
+#	../hg/lib/refSeqStatus.c.blame
+#	../hg/lib/retroMrnaInfo.c.blame
+#	../hg/lib/rgdQtl.c.blame
+#	../hg/lib/rhMapInfo.c.blame
+#	../hg/lib/rhMapZfishInfo.c.blame
+#	../hg/lib/riken.c.blame
+#	../hg/lib/rikenBest.c.blame
+#	../hg/lib/rikenCluster.c.blame
+#	../hg/lib/rmskOut.c.blame
+#	../hg/lib/rnaFold.c.blame
+#	../hg/lib/rnaGene.c.blame
+#	../hg/lib/rnaGenes.c.blame
+#	../hg/lib/rnaGroup.c.blame
+#	../hg/lib/rnaHybridization.c.blame
+#	../hg/lib/rnaPLFold.c.blame
+#	../hg/lib/rnaSecStr.c.blame
+#	../hg/lib/roughAli.c.blame
+#	../hg/lib/sage.c.blame
+#	../hg/lib/sageCounts.c.blame
+#	../hg/lib/sageExp.c.blame
+#	../hg/lib/samAlignment.c.blame
+#	../hg/lib/sample.c.blame
+#	../hg/lib/sanger22extra.c.blame
+#	../hg/lib/sangerGene.c.blame
+#	../hg/lib/sangerGeneToWBGeneID.c.blame
+#	../hg/lib/sargassoSeaXra.c.blame
+#	../hg/lib/scopDes.c.blame
+#	../hg/lib/scoredRef.c.blame
+#	../hg/lib/search.c.blame
+#	../hg/lib/sgdAbundance.c.blame
+#	../hg/lib/sgdClone.c.blame
+#	../hg/lib/sgdDescription.c.blame
+#	../hg/lib/sgdOther.c.blame
+#	../hg/lib/simpleNucDiff.c.blame
+#	../hg/lib/simpleRepeat.c.blame
+#	../hg/lib/snoRNAs.c.blame
+#	../hg/lib/snoRNAs.h.blame
+#	../hg/lib/snp.c.blame
+#	../hg/lib/snp125.c.blame
+#	../hg/lib/snp125CodingCoordless.c.blame
+#	../hg/lib/snp125Exceptions.c.blame
+#	../hg/lib/snp125Ui.c.blame
+#	../hg/lib/snp132Ext.c.blame
+#	../hg/lib/snpExceptions.c.blame
+#	../hg/lib/snpExtFile.c.blame
+#	../hg/lib/snpFasta.c.blame
+#	../hg/lib/snpMap.c.blame
+#	../hg/lib/snpSeq.c.blame
+#	../hg/lib/snpTmp.c.blame
+#	../hg/lib/snpUi.c.blame
+#	../hg/lib/softPromoter.c.blame
+#	../hg/lib/softberryHom.c.blame
+#	../hg/lib/spDb.c.blame
+#	../hg/lib/splignAlign.c.blame
+#	../hg/lib/sqlProg.c.blame
+#	../hg/lib/stanMad.c.blame
+#	../hg/lib/status
+#	../hg/lib/stsAlias.c.blame
+#	../hg/lib/stsInfo.c.blame
+#	../hg/lib/stsInfo2.c.blame
+#	../hg/lib/stsInfoMouse.c.blame
+#	../hg/lib/stsInfoMouseNew.c.blame
+#	../hg/lib/stsInfoRat.c.blame
+#	../hg/lib/stsMap.c.blame
+#	../hg/lib/stsMapMouse.c.blame
+#	../hg/lib/stsMapMouseNew.c.blame
+#	../hg/lib/stsMapRat.c.blame
+#	../hg/lib/stsMarker.c.blame
+#	../hg/lib/suggest.c.blame
+#	../hg/lib/switchDbTss.c.blame
+#	../hg/lib/synMap.c.blame
+#	../hg/lib/synteny100000.c.blame
+#	../hg/lib/syntenyBerk.c.blame
+#	../hg/lib/syntenySanger.c.blame
+#	../hg/lib/tRNAs.c.blame
+#	../hg/lib/tableDescriptions.c.blame
+#	../hg/lib/tableStatus.c.blame
+#	../hg/lib/targetDb.c.blame
+#	../hg/lib/taxonDivision.c.blame
+#	../hg/lib/taxonGeneticCode.c.blame
+#	../hg/lib/taxonName.c.blame
+#	../hg/lib/taxonNode.c.blame
+#	../hg/lib/taxonXref.c.blame
+#	../hg/lib/tests/foo.sh
+#	../hg/lib/tfbsCons.c.blame
+#	../hg/lib/tfbsConsFactors.c.blame
+#	../hg/lib/tfbsConsMap.c.blame
+#	../hg/lib/tfbsConsSites.c.blame
+#	../hg/lib/tigrCmrGene.c.blame
+#	../hg/lib/tigrOperon.c.blame
+#	../hg/lib/tilingPath.c.blame
+#	../hg/lib/traceInfo.c.blame
+#	../hg/lib/trackDb.c.blame
+#	../hg/lib/trackDbCustom.c.blame
+#	../hg/lib/trackHub.c.blame
+#	../hg/lib/trackLayout.c.blame
+#	../hg/lib/trackTable.c.blame
+#	../hg/lib/trackVersion.c.blame
+#	../hg/lib/transMapGene.c.blame
+#	../hg/lib/transMapInfo.c.blame
+#	../hg/lib/transMapSrc.c.blame
+#	../hg/lib/transMapStuff.c.blame
+#	../hg/lib/transRegCode.c.blame
+#	../hg/lib/transRegCodeCondition.c.blame
+#	../hg/lib/transRegCodeProbe.c.blame
+#	../hg/lib/trashDir.c.blame
+#	../hg/lib/txCluster.c.blame
+#	../hg/lib/txCommon.c.blame
+#	../hg/lib/txEdgeBed.c.blame
+#	../hg/lib/txEdgeOrtho.c.blame
+#	../hg/lib/txGraph.c.blame
+#	../hg/lib/txInfo.c.blame
+#	../hg/lib/txRnaAccs.c.blame
+#	../hg/lib/ucscRetroInfo.c.blame
+#	../hg/lib/ucscRetroOrtho.c.blame
+#	../hg/lib/validateGisaid.c.blame
+#	../hg/lib/variant.c.blame
+#	../hg/lib/variome.c.blame
+#	../hg/lib/vcfUi.c.blame
+#	../hg/lib/vegaInfo.c.blame
+#	../hg/lib/vegaInfoZfish.c.blame
+#	../hg/lib/visiGene.c.blame
+#	../hg/lib/vntr.c.blame
+#	../hg/lib/wabAli.c.blame
+#	../hg/lib/web.c.blame
+#	../hg/lib/wgRna.c.blame
+#	../hg/lib/wigAsciiToBinary.c.blame
+#	../hg/lib/wigDataStream.c.blame
+#	../hg/lib/wiggle.c.blame
+#	../hg/lib/wiggleCart.c.blame
+#	../hg/lib/wiggleUtils.c.blame
+#	../hg/lib/wikiLink.c.blame
+#	../hg/lib/wikiTrack.c.blame
+#	../hg/lib/yaleGencodeAssoc.c.blame
+#	../hg/lib/zdobnovSynt.c.blame
+#	../hg/logCrawl/encodeUserDbCrawl/foo2
+#	../hg/logCrawl/encodeUserDbCrawl/foo3
+#	../hg/logCrawl/encodeUserDbCrawl/foo4
+#	../hg/logCrawl/encodeUserDbCrawl/goo3
+#	../hg/logCrawl/encodeUserDbCrawl/out
+#	../hg/makeDb/doc/foo1
+#	../hg/makeDb/doc/hg18.old
+#	../hg/makeDb/doc/log
+#	../hg/makeDb/doc/status
+#	../hg/makeDb/genbank/bin/
+#	../hg/makeDb/genbank/lib/
+#	../hg/makeDb/outside/uwDnaseTrackHub/foo.as
+#	../hg/makeDb/schema/dbSnoop/biosample.tab
+#	../hg/makeDb/schema/dbSnoop/edw.dev
+#	../hg/makeDb/schema/dbSnoop/edw.pro
+#	../hg/makeDb/schema/dbSnoop/edw.tst
+#	../hg/makeDb/schema/dbSnoop/err
+#	../hg/makeDb/schema/foo.joiner
+#	../hg/makeDb/schema/joinTwoInfo/hgFixed.snoop
+#	../hg/makeDb/schema/joinTwoInfo/snoop
+#	../hg/makeDb/schema/sp090821.snoop
+#	../hg/makeDb/schema/sp100331.snoop
+#	../hg/makeDb/schema/sp101005.snoop
+#	../hg/makeDb/schema/status
+#	../hg/makeDb/schema/uniProt.snoop
+#	../hg/makeDb/trackDb/allRas
+#	../hg/makeDb/trackDb/fileList
+#	../hg/makeDb/trackDb/foo.ra.gz
+#	../hg/makeDb/trackDb/human/hg18/myTrackDb.ra
+#	../hg/makeDb/trackDb/human/hg19/foo2.ra
+#	../hg/makeDb/trackDb/human/hg19/jkExperiments.ra
+#	../hg/makeDb/trackDb/status
+#	../hg/merge
+#	../hg/oneShot/addUcscCopyright/list
+#	../hg/oneShot/addUcscCopyright/makefile
+#	../hg/oneShot/cartSim/cartSim.log
+#	../hg/oneShot/cartSim/jorgesDbs/
+#	../hg/oneShot/cartSim/longInnoDb1/
+#	../hg/oneShot/cartSim/longRun1/
+#	../hg/oneShot/cartSim/longRun2/
+#	../hg/oneShot/cartSim/longRun3/
+#	../hg/oneShot/cartSim/notes
+#	../hg/oneShot/cartSimNoInsert/cartFreen.log
+#	../hg/oneShot/freen/foo.ix
+#	../hg/oneShot/freen/foo10.bigWig
+#	../hg/oneShot/freen/foo2
+#	../hg/oneShot/freen/foo3
+#	../hg/oneShot/freen/freen.in
+#	../hg/oneShot/freen/freen.log
+#	../hg/oneShot/freen/freen.out
+#	../hg/oneShot/freen/ish
+#	../hg/oneShot/freen/now
+#	../hg/oneShot/freen/now2
+#	../hg/oneShot/freen/output
+#	../hg/oneShot/freen/para
+#	../hg/oneShot/freen/pull
+#	../hg/oneShot/freen/soon
+#	../hg/oneShot/freen/test.fastq
+#	../hg/oneShot/freen/test.stats
+#	../hg/oneShot/ga4ghToBed/debug
+#	../hg/oneShot/ga4ghToBed/test.bed
+#	../hg/oneShot/ga4ghToBed/testIt
+#	../hg/oneShot/hgFusion/
+#	../hg/oneShot/testBamStuff/
+#	../hg/oneShot/testSimpleCgi/
+#	../hg/oneShot/transparentTriangleTest/makefile
+#	../hg/oneShot/tryGtexBoxPlot/refresh.sh
+#	../hg/oneShot/tryNewColorOverlay/foo.png
+#	../hg/oneShot/tryNewColorOverlay/oneRna.lst
+#	../hg/oneShot/tryNewColorOverlay/rna.lst
+#	../hg/oneShot/wgEncodeRegGenRa/status
+#	../hg/protein/spToDb/blame
+#	../hg/protein/spToDb/spDbInno.sql
+#	../hg/protein/spToDb/spDbInnoDjango.sql
+#	../hg/protein/spToDb/spToDb.myVersion.c
+#	../hg/protein/spToDb/subs.in
+#	../hg/regulate/companion/hive
+#	../hg/regulate/companion/regCompanion5C/foo.out
+#	../hg/regulate/companion/regCompanion5C/test.bed
+#	../hg/regulate/companion/regCompanion5C/test.download
+#	../hg/regulate/companion/regCompanionChia/50kPromEnhanceViaChia.notes
+#	../hg/regulate/companion/regCompanionChia/50kPromEnhanceViaChia.tab
+#	../hg/regulate/companion/regCompanionChia/chia3enh3pro.tab
+#	../hg/regulate/companion/regCompanionChia/chia3pro3pro.tab
+#	../hg/regulate/companion/regCompanionChia/chiaPetK562SameChrom.tab
+#	../hg/regulate/companion/regCompanionChia/chiaPetK562SameChromSepBlocks.bed
+#	../hg/regulate/companion/regCompanionChia/chiaPromOtherEnd.bed
+#	../hg/regulate/companion/regCompanionChia/chiaPromOtherEnd.tab
+#	../hg/regulate/companion/regCompanionChia/chiaSamChromK562Exons.bed
+#	../hg/regulate/companion/regCompanionChia/chiaSameChromK562.bed
+#	../hg/regulate/companion/regCompanionChia/enhStringentGm12878.bed
+#	../hg/regulate/companion/regCompanionChia/enhStringentK562.bed
+#	../hg/regulate/companion/regCompanionChia/foo2
+#	../hg/regulate/companion/regCompanionChia/foo3
+#	../hg/regulate/companion/regCompanionChia/foo4
+#	../hg/regulate/companion/regCompanionChia/foo5
+#	../hg/regulate/companion/regCompanionChia/foo6
+#	../hg/regulate/companion/regCompanionChia/foo7
+#	../hg/regulate/companion/regCompanionChia/foofoo
+#	../hg/regulate/companion/regCompanionChia/gm12878Ctcf.bed
+#	../hg/regulate/companion/regCompanionChia/oneEnd.lst
+#	../hg/regulate/companion/regCompanionChia/oneEnd.tab
+#	../hg/regulate/companion/regCompanionChia/other.bed
+#	../hg/regulate/companion/regCompanionChia/other.lst
+#	../hg/regulate/companion/regCompanionChia/promoters.bed
+#	../hg/regulate/companion/regCompanionCorrelateEnhancerAndExpression/1.tab
+#	../hg/regulate/companion/regCompanionCorrelateEnhancerAndExpression/1shuf.tab
+#	../hg/regulate/companion/regCompanionCorrelateEnhancerAndExpression/2-7.tab
+#	../hg/regulate/companion/regCompanionCorrelateEnhancerAndExpression/2-8.tab
+#	../hg/regulate/companion/regCompanionCorrelateEnhancerAndExpression/actToAct.tab
+#	../hg/regulate/companion/regCompanionCorrelateEnhancerAndExpression/actToAct90.tab
+#	../hg/regulate/companion/regCompanionCorrelateEnhancerAndExpression/actToPermuted.tab
+#	../hg/regulate/companion/regCompanionCorrelateEnhancerAndExpression/activeEnh.bed
+#	../hg/regulate/companion/regCompanionCorrelateEnhancerAndExpression/activeEnh.lst
+#	../hg/regulate/companion/regCompanionCorrelateEnhancerAndExpression/activeEnh.tab
+#	../hg/regulate/companion/regCompanionCorrelateEnhancerAndExpression/activeEnhToProm.tab
+#	../hg/regulate/companion/regCompanionCorrelateEnhancerAndExpression/activeGene.bed
+#	../hg/regulate/companion/regCompanionCorrelateEnhancerAndExpression/activeGene.lst
+#	../hg/regulate/companion/regCompanionCorrelateEnhancerAndExpression/activeGene.tab
+#	../hg/regulate/companion/regCompanionCorrelateEnhancerAndExpression/bed.tab
+#	../hg/regulate/companion/regCompanionCorrelateEnhancerAndExpression/ctcfInterference.tab
+#	../hg/regulate/companion/regCompanionCorrelateEnhancerAndExpression/enh.bed
+#	../hg/regulate/companion/regCompanionCorrelateEnhancerAndExpression/enhToProm.bed
+#	../hg/regulate/companion/regCompanionCorrelateEnhancerAndExpression/enhToProm.tab
+#	../hg/regulate/companion/regCompanionCorrelateEnhancerAndExpression/enhToProm100k.tab
+#	../hg/regulate/companion/regCompanionCorrelateEnhancerAndExpression/enhToProm10k.tab
+#	../hg/regulate/companion/regCompanionCorrelateEnhancerAndExpression/foo.tab
+#	../hg/regulate/companion/regCompanionCorrelateEnhancerAndExpression/outBad
+#	../hg/regulate/companion/regCompanionCorrelateEnhancerAndExpression/outGood
+#	../hg/regulate/companion/regCompanionCorrelateEnhancerAndExpression/permute707.tab
+#	../hg/regulate/companion/regCompanionCorrelateEnhancerAndExpression/permute90.tab
+#	../hg/regulate/companion/regCompanionCorrelateEnhancerAndExpression/permuted.tab
+#	../hg/regulate/companion/regCompanionCorrelateEnhancerAndExpression/permutedGene.lst
+#	../hg/regulate/companion/regCompanionCorrelateEnhancerAndExpression/permutedGene.tab
+#	../hg/regulate/companion/regCompanionCorrelateEnhancerAndExpression/permutedOut.tab
+#	../hg/regulate/companion/regCompanionCorrelateEnhancerAndExpression/pro.bed
+#	../hg/regulate/companion/regCompanionCorrelateEnhancerAndExpression/r90Lengths.tab
+#	../hg/regulate/companion/regCompanionCorrelateEnhancerAndExpression/rc
+#	../hg/regulate/companion/regCompanionCtcfInterference/
+#	../hg/regulate/companion/regCompanionGraphVsFixedPoints/Gm12878.lst
+#	../hg/regulate/companion/regCompanionGraphVsFixedPoints/GmPhylo.lst
+#	../hg/regulate/companion/regCompanionGraphVsFixedPoints/H1hesc.lst
+#	../hg/regulate/companion/regCompanionGraphVsFixedPoints/K562.lst
+#	../hg/regulate/companion/regCompanionGraphVsFixedPoints/canonical/
+#	../hg/regulate/companion/regCompanionGraphVsFixedPoints/chromHmm/
+#	../hg/regulate/companion/regCompanionGraphVsFixedPoints/corEnhGm12878.tab
+#	../hg/regulate/companion/regCompanionGraphVsFixedPoints/corEnhStrandedGm12878.tab
+#	../hg/regulate/companion/regCompanionGraphVsFixedPoints/ctcf/
+#	../hg/regulate/companion/regCompanionGraphVsFixedPoints/enh/
+#	../hg/regulate/companion/regCompanionGraphVsFixedPoints/enh2/
+#	../hg/regulate/companion/regCompanionGraphVsFixedPoints/ez/
+#	../hg/regulate/companion/regCompanionGraphVsFixedPoints/firstCodingSplice/
+#	../hg/regulate/companion/regCompanionGraphVsFixedPoints/gmEnh/
+#	../hg/regulate/companion/regCompanionGraphVsFixedPoints/oldOne.tab
+#	../hg/regulate/companion/regCompanionGraphVsFixedPoints/one.lst
+#	../hg/regulate/companion/regCompanionGraphVsFixedPoints/one.tab
+#	../hg/regulate/companion/regCompanionGraphVsFixedPoints/p300/
+#	../hg/regulate/companion/regCompanionGraphVsFixedPoints/phyloP.lst
+#	../hg/regulate/companion/regCompanionGraphVsFixedPoints/regPeaks/
+#	../hg/regulate/companion/regCompanionGraphVsFixedPoints/run2/
+#	../hg/regulate/companion/regCompanionGraphVsFixedPoints/secondCodingSplice/
+#	../hg/regulate/companion/regCompanionGraphVsFixedPoints/short.lst
+#	../hg/regulate/companion/regCompanionGraphVsFixedPoints/stringent3/
+#	../hg/regulate/companion/regCompanionGraphVsFixedPoints/stringent4/
+#	../hg/regulate/companion/regCompanionGraphVsFixedPoints/stringent5/
+#	../hg/regulate/companion/regCompanionGraphVsFixedPoints/stringent6/
+#	../hg/regulate/companion/regCompanionGraphVsFixedPoints/take2.err
+#	../hg/regulate/companion/regCompanionGraphVsFixedPoints/tier1.lst
+#	../hg/regulate/companion/regCompanionGraphVsFixedPoints/tier1Txn.lst
+#	../hg/regulate/companion/regCompanionGraphVsFixedPoints/toR.csh
+#	../hg/regulate/companion/regCompanionHistoneBox/bedToTabR.csh
+#	../hg/regulate/companion/regCompanionHistoneBox/gm12878Dnase.bed
+#	../hg/regulate/companion/regCompanionHistoneBox/gm12878Dnase.fat
+#	../hg/regulate/companion/regCompanionHistoneBox/gm12878Dnase.tab
+#	../hg/regulate/companion/regCompanionHistoneBox/gm12878DnaseH3k27acBox.bed
+#	../hg/regulate/companion/regCompanionHistoneBox/gm12878DnaseH3k27acBox.fat
+#	../hg/regulate/companion/regCompanionHistoneBox/gm12878DnaseH3k27acBox.narrowPeak
+#	../hg/regulate/companion/regCompanionHistoneBox/gm12878DnaseH3k27acBox.tab
+#	../hg/regulate/companion/regCompanionHistoneBox/gm12878DnaseH3k4me1Box.bed
+#	../hg/regulate/companion/regCompanionHistoneBox/gm12878DnaseH3k4me1Box.fat
+#	../hg/regulate/companion/regCompanionHistoneBox/gm12878DnaseH3k4me1Box.narrowPeak
+#	../hg/regulate/companion/regCompanionHistoneBox/gm12878DnaseH3k4me1Box.tab
+#	../hg/regulate/companion/regCompanionHistoneBox/gm12878DnaseH3k4me1Box30.bed
+#	../hg/regulate/companion/regCompanionHistoneBox/gm12878DnaseH3k4me1Box30.fat
+#	../hg/regulate/companion/regCompanionHistoneBox/gm12878DnaseH3k4me1Box30.narrowPeak
+#	../hg/regulate/companion/regCompanionHistoneBox/gm12878DnaseH3k4me1Box30.tab
+#	../hg/regulate/companion/regCompanionHistoneBox/gm12878DnaseH3k4me3Box50.bed
+#	../hg/regulate/companion/regCompanionHistoneBox/gm12878DnaseH3k4me3Box50.fat
+#	../hg/regulate/companion/regCompanionHistoneBox/gm12878DnaseH3k4me3Box50.narrowPeak
+#	../hg/regulate/companion/regCompanionHistoneBox/gm12878DnaseH3k4me3Box50.tab
+#	../hg/regulate/companion/regCompanionHistoneBox/gm12878DnaseTop50.bed
+#	../hg/regulate/companion/regCompanionHistoneBox/gm12878DnaseTop50.fat
+#	../hg/regulate/companion/regCompanionHistoneBox/gm12878DnaseTop50.tab
+#	../hg/regulate/companion/regCompanionPickEnhancers/examplesByHand.txt
+#	../hg/regulate/companion/regCompanionPickEnhancers/foo.csh
+#	../hg/regulate/companion/regCompanionPickEnhancers/hsmm.csh
+#	../hg/regulate/companion/regCompanionPickEnhancers/loose.csh
+#	../hg/regulate/companion/regCompanionPickEnhancers/nhek.csh
+#	../hg/regulate/companion/regCompanionPickEnhancers/nhekDnaseChr1.narrowPeak
+#	../hg/regulate/companion/regCompanionPickEnhancers/oldOut.tab
+#	../hg/regulate/companion/regCompanionPickEnhancers/out.tab
+#	../hg/regulate/companion/regCompanionPickEnhancers/pickedBeds/
+#	../hg/regulate/companion/regCompanionPickEnhancers/std20.tab
+#	../hg/regulate/companion/regCompanionPickEnhancers/std25.tab
+#	../hg/regulate/companion/regCompanionPickEnhancers/std30.tab
+#	../hg/regulate/companion/regCompanionPickEnhancers/stringent.csh
+#	../hg/regulate/companion/regCompanionPickEnhancers/stringent.tab
+#	../hg/regulate/companion/regCompanionPickEnhancers/stringent2.csh
+#	../hg/regulate/companion/regCompanionPickEnhancers/stringent2/
+#	../hg/regulate/companion/regCompanionPickEnhancers/stringent3.csh
+#	../hg/regulate/companion/regCompanionPickEnhancers/stringent3/
+#	../hg/regulate/companion/regCompanionPickEnhancers/stringent4.csh
+#	../hg/regulate/companion/regCompanionPickEnhancers/stringent4/
+#	../hg/regulate/companion/regCompanionPickEnhancers/stringent5.csh
+#	../hg/regulate/companion/regCompanionPickEnhancers/stringent5/
+#	../hg/regulate/companion/regCompanionPickEnhancers/stringent6/
+#	../hg/regulate/companion/regCompanionPickEnhancers/subsetH1hesc.narrowPeak
+#	../hg/regulate/companion/regCompanionPickEnhancers/take1/
+#	../hg/regulate/companion/regCompanionPickEnhancers/take2/
+#	../hg/regulate/companion/regCompanionPickEnhancers/take3/
+#	../hg/regulate/companion/regCompanionPickEnhancers/take4/
+#	../hg/regulate/companion/regCompanionPickEnhancers/take5/
+#	../hg/regulate/companion/regCompanionSquishGraph/
+#	../hg/regulate/companion/regCompanionTopPeaks/
+#	../hg/regulate/log
+#	../hg/regulate/regBeadPos/.readBeadPos.doc.swp
+#	../hg/regulate/regBeadPos/bak/
+#	../hg/regulate/regBeadPos/dnaseSize.tab
+#	../hg/regulate/regBeadPos/firstGenomeRun.csh
+#	../hg/regulate/regBeadPos/firstGenomeRun.in
+#	../hg/regulate/regBeadPos/foo.bed
+#	../hg/regulate/regBeadPos/foo2
+#	../hg/regulate/regBeadPos/fullDnase.bw
+#	../hg/regulate/regBeadPos/fullH3k27ac.bw
+#	../hg/regulate/regBeadPos/fullH3k4me1.bw
+#	../hg/regulate/regBeadPos/histSize.tab
+#	../hg/regulate/regBeadPos/peak.bed
+#	../hg/regulate/regBeadPos/regBeads.narrowPeak
+#	../hg/regulate/regBeadPos/run2.bed
+#	../hg/regulate/regBeadPos/run2.csh
+#	../hg/regulate/regBeadPos/run2.in
+#	../hg/regulate/regBeadPos/run2.narrowPeak
+#	../hg/regulate/regBeadPos/stateProbes.cur
+#	../hg/regulate/regBeadPos/stateProbs.txt
+#	../hg/regulate/regBeadPos/test2.in
+#	../hg/regulate/regBeadPos/testAc.bw
+#	../hg/regulate/regBeadPos/testDnase.bw
+#	../hg/regulate/regCluster/diff
+#	../hg/regulate/regCluster/status
+#	../hg/regulate/regCluster/tests/needBreak/out.bed
+#	../hg/regulate/regCluster/tests/needBreak/out.cluster
+#	../hg/regulate/regClusterAttachMetadataToTableOfTables/filtered.bed
+#	../hg/regulate/regClusterBedExpCfg/hud/
+#	../hg/regulate/regClusterBedExpCfg/in.ra
+#	../hg/regulate/regClusterBedExpCfg/in.tab
+#	../hg/regulate/regClusterBedExpCfg/out.bed
+#	../hg/regulate/regClusterBedExpCfg/out.cfg
+#	../hg/regulate/regClusterBedExpCfg/out.exps
+#	../hg/regulate/regClusterBedExpCfg/yale
+#	../hg/regulate/regClusterTreeCells/clusterInput.lst
+#	../hg/regulate/regClusterTreeCells/foo2
+#	../hg/regulate/regClusterTreeCells/matrix
+#	../hg/regulate/regClusterTreeCells/status
+#	../hg/regulate/regClusterTreeCells/test2.lst
+#	../hg/regulate/regClusterTreeCells/tests/in2/
+#	../hg/regulate/regClusterTreeCells/tests/out.tree
+#	../hg/regulate/regClusterTreeCells/uwAffy.lst
+#	../hg/regulate/regStartSampleEmbl/.extra.embl.swp
+#	../hg/regulate/regStartSampleEmbl/extra.embl
+#	../hg/regulate/regStartSampleEmbl/foo2.embl
+#	../hg/regulate/status
+#	../hg/status
+#	../hg/test.ra
+#	../hg/trash/
+#	../hg/txCds/txCdsPredict/out.cds
+#	../hg/txCds/txCdsPredict/outMaf.cds
+#	../hg/txCds/txCdsPredict/outNmd.cds
+#	../hg/txGene/txGeneAccession/txLastId
+#	../hg/utils/bedRandom/5000.bed
+#	../hg/utils/bedRandom/5000masked.bed
+#	../hg/utils/bedRandom/5000maskedGc.tab
+#	../hg/utils/bedRandom/chrom.sizes
+#	../hg/utils/bedRandom/foo.bed
+#	../hg/utils/bedRandom/rmsk.bed
+#	../hg/utils/gffToBed/basic.bed
+#	../hg/utils/gffToBed/basic.gtf
+#	../hg/utils/gffToBed/cufflinks.bed
+#	../hg/utils/gffToBed/cufflinks.gff
+#	../hg/utils/gffToBed/foo.bed
+#	../hg/utils/gffToBed/foo.gp
+#	../hg/utils/gffToBed/go
+#	../hg/utils/gffToBed/test.bed
+#	../hg/utils/gffToBed/testGtf.bed
+#	../hg/utils/gffToBed/weird.bed
+#	../hg/utils/gffToBed/weird.gff
+#	../hg/utils/hubCheck/status
+#	../hg/utils/hubCheck/udc/
+#	../hg/utils/makeTrackIndex/foo2
+#	../hg/utils/mdbQuery/log
+#	../hg/utils/mdbQuery/status
+#	../hgFiles
+#	../includesUcsc
+#	../index/status
+#	../index/trixSearch/foo.ix
+#	../index/trixSearch/foo.ixx
+#	../isPcr/webPcr/webPcr
+#	../kehayden/alphaChain/.noChildLeftBehind.after.swp
+#	../kehayden/alphaChain/backupModel.after
+#	../kehayden/alphaChain/backupModel.chain
+#	../kehayden/alphaChain/backupModel.out
+#	../kehayden/alphaChain/chr3.after
+#	../kehayden/alphaChain/chr3.before
+#	../kehayden/alphaChain/chr3.out
+#	../kehayden/alphaChain/chrY.out
+#	../kehayden/alphaChain/doChr3
+#	../kehayden/alphaChain/doIt2
+#	../kehayden/alphaChain/doIt5
+#	../kehayden/alphaChain/foo.before
+#	../kehayden/alphaChain/foo.chain
+#	../kehayden/alphaChain/horID_21.D3Z1_alphaChain.txt
+#	../kehayden/alphaChain/horID_21.D3Z1_alphaChain_monOrder_count.txt
+#	../kehayden/alphaChain/monNum.txt
+#	../kehayden/alphaChain/monomerCount
+#	../kehayden/alphaChain/noChange
+#	../kehayden/alphaChain/noChildLeftBehind.after
+#	../kehayden/alphaChain/noChildLeftBehind.out
+#	../kehayden/alphaChain/old/
+#	../kehayden/alphaChain/sample.chain
+#	../kehayden/alphaChain/sample.out
+#	../kehayden/alphaChain/status
+#	../kehayden/alphaChain/test.after
+#	../kehayden/alphaChain/test.before
+#	../kehayden/alphaChain/test.txt
+#	../kehayden/alphaChain/test5
+#	../kehayden/alphaChain/test5.afterChain
+#	../kehayden/alphaChain/test5.chain
+#	../kehayden/alphaChain/test5.out
+#	../kehayden/alphaChain/test5.out2
+#	../kehayden/alphaChain/test5.out3
+#	../kehayden/alphaChain/test5.txt
+#	../kehayden/alphaChain/test6
+#	../kehayden/alphaChain/test6.afterChain
+#	../kehayden/alphaChain/test6.chain
+#	../kehayden/alphaChain/test6.out
+#	../kehayden/alphaChain/test6.txt
+#	../kehayden/alphaChain/testSize5.after
+#	../kehayden/alphaChain/testSize5.chain
+#	../kehayden/alphaChain/testSize5.out
+#	../kehayden/alphaChain/threeMers.chain
+#	../kehayden/alphaChain/threeMers.out
+#	../kehayden/alphaChain/threeMers.txt
+#	../kehayden/alphaChain/ugly.chain
+#	../kehayden/calcMonomersInCenReads/
+#	../kehayden/faToCenRead/
+#	../kehayden/linearSat/130130_alphaChain/
+#	../kehayden/linearSat/3Reads.txt
+#	../kehayden/linearSat/3TypeOrder.txt
+#	../kehayden/linearSat/after.chain
+#	../kehayden/linearSat/alphaAsm.weird
+#	../kehayden/linearSat/alphaAsmLoop_121218.pl
+#	../kehayden/linearSat/alphaAsmLoop_130130.pl
+#	../kehayden/linearSat/alphaChain/
+#	../kehayden/linearSat/backupModel.after
+#	../kehayden/linearSat/backupModel.chain
+#	../kehayden/linearSat/backupModel.out
+#	../kehayden/linearSat/before.chain
+#	../kehayden/linearSat/blame
+#	../kehayden/linearSat/cenX/
+#	../kehayden/linearSat/cenY/
+#	../kehayden/linearSat/chrX/
+#	../kehayden/linearSat/chrXwithU/
+#	../kehayden/linearSat/diffIt
+#	../kehayden/linearSat/doIt
+#	../kehayden/linearSat/doIt.out
+#	../kehayden/linearSat/doItLong
+#	../kehayden/linearSat/doItSmallProblem
+#	../kehayden/linearSat/doTwo.txt
+#	../kehayden/linearSat/doX
+#	../kehayden/linearSat/doY
+#	../kehayden/linearSat/foo2
+#	../kehayden/linearSat/genome/
+#	../kehayden/linearSat/group11/
+#	../kehayden/linearSat/group12AsBases/
+#	../kehayden/linearSat/group56/
+#	../kehayden/linearSat/group66/
+#	../kehayden/linearSat/in.words
+#	../kehayden/linearSat/input.counts
+#	../kehayden/linearSat/inputX.counts
+#	../kehayden/linearSat/longReads
+#	../kehayden/linearSat/monNumFull.txt
+#	../kehayden/linearSat/monNumOk.txt
+#	../kehayden/linearSat/monNum_uCorrect_huRefChrCorrect.txt
+#	../kehayden/linearSat/monOrder/
+#	../kehayden/linearSat/notTooDeep.after
+#	../kehayden/linearSat/notTooDeep.chain
+#	../kehayden/linearSat/notTooDeep.out
+#	../kehayden/linearSat/out.words
+#	../kehayden/linearSat/out/
+#	../kehayden/linearSat/pairedOrphans.after
+#	../kehayden/linearSat/pairedOrphans.chain
+#	../kehayden/linearSat/pairedOrphans.out
+#	../kehayden/linearSat/problem.txt
+#	../kehayden/linearSat/pull
+#	../kehayden/linearSat/randomReads
+#	../kehayden/linearSat/recovered
+#	../kehayden/linearSat/sample.chain
+#	../kehayden/linearSat/sample.out
+#	../kehayden/linearSat/sample.txt
+#	../kehayden/linearSat/status
+#	../kehayden/linearSat/test.after
+#	../kehayden/linearSat/test.before
+#	../kehayden/linearSat/test.chain
+#	../kehayden/linearSat/test.monomers
+#	../kehayden/linearSat/test.out
+#	../kehayden/linearSat/test.txt
+#	../kehayden/linearSat/test3.after
+#	../kehayden/linearSat/test3.before
+#	../kehayden/linearSat/test3.out
+#	../kehayden/linearSat/testLong.after
+#	../kehayden/linearSat/testLong.chain
+#	../kehayden/linearSat/testLong.out
+#	../kehayden/linearSat/testY.after
+#	../kehayden/linearSat/testY.before
+#	../kehayden/linearSat/testY.out
+#	../kehayden/linearSat/unsubbed.missing
+#	../kehayden/linearSat/unsubbed.out
+#	../kehayden/linearSat/verbose.out
+#	../kehayden/linearSat/words.in
+#	../kehayden/linearSat/words.missing
+#	../kehayden/linearSat/words.out
+#	../kehayden/linearSat/yMonomers
+#	../kehayden/lookupCenSequence/
+#	../kehayden/removeCenUs/
+#	../kehayden/status
+#	TAGS
+#	c
+#	coo
+#	diff
+#	diffs
+#	fo
+#	foo2
+#	status
+#	x86_64/stXXXX0Bjo48
+#	../log
+#	../merge
+#	../meta/metaHoist/flat.out
+#	../meta/metaHoist/go
+#	../meta/metaHoist/test.out
+#	../meta/metaReformat/status
+#	../oneShot/bigWigCluster/
+#	../oneShot/fakeManifestFromFiles/
+#	../oneShot/fastqEveryN/
+#	../oneShot/hacTreeTest/.out.costlyMerges.swp
+#	../oneShot/hacTreeTest/out.costlyMerges
+#	../oneShot/hacTreeTest/out.fromItems
+#	../oneShot/hacTreeTest/out.multiThread
+#	../oneShot/hacTreeTest/out.multiThreads
+#	../oneShot/hacTreeTest/pull
+#	../oneShot/hacTreeTest/stauts
+#	../oneShot/orderMiddle/invert.out
+#	../oneShot/orderMiddle/test.out
+#	../oneShot/rgbaGfxTest/9
+#	../oneShot/sampleNewProg/
+#	../oneShot/status
+#	../oneShot/testCorrelation/
+#	../oneShot/testGitRename/blame
+#	../oneShot/testGitRename/status
+#	../oneShot/testGitRename/test.out
+#	../oneShot/testGitRename/testGitRename.blame
+#	../oneShot/testGitRename/upperFile.blame
+#	../oneShot/testNothing/
+#	../oneShot/testXmlIssues/
+#	../oneShot/wjkCallsToGraph/
+#	../oneShot/wordsBySize/testWords.txt
+#	../parasol/lib/paraMessage_soon.c
+#	../parasol/paa/
+#	../parasol/paraHub/makk
+#	../parasol/parasol/para.results
+#	../parasol/parasol/parasol.conflict
+#	../parasol/parasol/results
+#	../pull
+#	../sourceFiles
+#	../status
+#	../tdb
+#	../tee
+#	../toCopyright.lst
+#	../utils/bedCommonRegions/status
+#	../utils/bedCommonRegions/tests/inOver/
+#	../utils/bedGeneParts/foo2
+#	../utils/bedGeneParts/ugly.out
+#	../utils/bedGraphToBigWig/10.bedGraph
+#	../utils/bedGraphToBigWig/10.bw
+#	../utils/bedGraphToBigWig/bad1.bedGraph
+#	../utils/bedGraphToBigWig/bad1.bw
+#	../utils/bedGraphToBigWig/bad3.bedGraph
+#	../utils/bedGraphToBigWig/bad3.bw
+#	../utils/bedGraphToBigWig/bad4.bedGraph
+#	../utils/bedGraphToBigWig/bad4.bw
+#	../utils/bedGraphToBigWig/foo.bedGraph
+#	../utils/bedGraphToBigWig/foo.bw
+#	../utils/bedGraphToBigWig/nozoom.bedGraph
+#	../utils/bedGraphToBigWig/nozoom.bw
+#	../utils/bedGraphToBigWig/test.bw
+#	../utils/bedIntersectReplicates/
+#	../utils/bedRemoveOverlap/status
+#	../utils/bedToBigBed/bigGenes.bb
+#	../utils/bedToBigBed/bigGenes.bed
+#	../utils/bedToBigBed/err
+#	../utils/bedToBigBed/foo.bb
+#	../utils/bedToBigBed/foo2
+#	../utils/bedToBigBed/itemRgb.bb
+#	../utils/bedToBigBed/itemRgb.bbFoo
+#	../utils/bedToBigBed/itemRgb.bbNo
+#	../utils/bedToBigBed/longFoo
+#	../utils/bedToBigBed/smallGenes.bb
+#	../utils/bedToBigBed/smallGenes.bbNoName
+#	../utils/bedToBigBed/smallGenes.bed
+#	../utils/bedToBigBed/status
+#	../utils/bedToBigBed/ucscGenes.bb
+#	../utils/bedToBigBed/ucscGenes.bed
+#	../utils/bedToClosestPoint/enhK562.bed
+#	../utils/bedToClosestPoint/makefile
+#	../utils/bedToClosestPoint/promo.bed
+#	../utils/bedToClosestPoint/refSeq.bed
+#	../utils/bedToClosestPoint/testOne.bed
+#	../utils/bigBedNamedItems/test.bb
+#	../utils/bigBedNamedItems/test.bed
+#	../utils/bigBedNamedItems/test.some
+#	../utils/bigWigAverageOverBed/bad.bed
+#	../utils/bigWigAverageOverBed/bad.out
+#	../utils/bigWigAverageOverBed/big.bed
+#	../utils/bigWigAverageOverBed/big.out
+#	../utils/bigWigAverageOverBed/bigBlock.out
+#	../utils/bigWigAverageOverBed/bigChrom.out
+#	../utils/bigWigAverageOverBed/block.out
+#	../utils/bigWigAverageOverBed/chr22.bed
+#	../utils/bigWigAverageOverBed/chrom.out
+#	../utils/bigWigAverageOverBed/dupe.bed
+#	../utils/bigWigAverageOverBed/foo1
+#	../utils/bigWigAverageOverBed/foo2
+#	../utils/bigWigAverageOverBed/out.bed
+#	../utils/bigWigAverageOverBed/out.ra
+#	../utils/bigWigAverageOverBed/out.tab
+#	../utils/bigWigAverageOverBed/phylop.bw
+#	../utils/bigWigAverageOverBed/phylop_1.ave
+#	../utils/bigWigAverageOverBed/phylop_2.ave
+#	../utils/bigWigAverageOverBed/phylop_3.ave
+#	../utils/bigWigAverageOverBed/phylop_4.ave
+#	../utils/bigWigAverageOverBed/rna1.bw
+#	../utils/bigWigAverageOverBed/rna1_1.ave
+#	../utils/bigWigAverageOverBed/rna1_2.ave
+#	../utils/bigWigAverageOverBed/rna1_3.ave
+#	../utils/bigWigAverageOverBed/rna1_4.ave
+#	../utils/bigWigAverageOverBed/rna1_5.ave
+#	../utils/bigWigAverageOverBed/rna1_6.ave
+#	../utils/bigWigAverageOverBed/test.bed
+#	../utils/bigWigAverageOverBed/test.out
+#	../utils/bigWigAverageOverBed/timeNotes
+#	../utils/bigWigAverageOverBed/ucscGenes.out
+#	../utils/bigWigMerge/18m.bw
+#	../utils/bigWigMerge/18p.bw
+#	../utils/bigWigMerge/19m.bw
+#	../utils/bigWigMerge/19p.bw
+#	../utils/bigWigMerge/in.lst
+#	../utils/bigWigMerge/merged.bedGraph
+#	../utils/bigWigMerge/out.bigWig
+#	../utils/colTransform/test.in
+#	../utils/colTransform/test.out
+#	../utils/compareIds/
+#	../utils/distributeRgbRainbow/test.out
+#	../utils/faUniqify/makk
+#	../utils/fastqMaskSpectrum/
+#	../utils/fastqStatsAndSubsample/1000.fastq
+#	../utils/fastqStatsAndSubsample/10000.fastq
+#	../utils/fastqStatsAndSubsample/100000.fastq
+#	../utils/fastqStatsAndSubsample/ENCFF000ABP.sample
+#	../utils/fastqStatsAndSubsample/ENCFF000ABP.stats
+#	../utils/fastqStatsAndSubsample/ENCFF001DVB.fastq
+#	../utils/fastqStatsAndSubsample/ENCFF001DVB.fastq.gz
+#	../utils/fastqStatsAndSubsample/ENCFF001DVB.sample
+#	../utils/fastqStatsAndSubsample/ENCFF001DVB.stats
+#	../utils/fastqStatsAndSubsample/fastqStatsAndSubsample.works
+#	../utils/fastqStatsAndSubsample/fastqSubsample1RcFb1
+#	../utils/fastqStatsAndSubsample/fastqSubsampleKyfZP4
+#	../utils/fastqStatsAndSubsample/fastqSubsampleOsgUFw
+#	../utils/fastqStatsAndSubsample/foo.stats
+#	../utils/fastqStatsAndSubsample/fooDir/
+#	../utils/fastqStatsAndSubsample/makk
+#	../utils/fastqStatsAndSubsample/new.fastq
+#	../utils/fastqStatsAndSubsample/new.stats
+#	../utils/fastqStatsAndSubsample/out.fastq
+#	../utils/fastqStatsAndSubsample/out.stats
+#	../utils/linesInAllFiles/in1.txt
+#	../utils/linesInAllFiles/in2.txt
+#	../utils/linesInAllFiles/in3.txt
+#	../utils/lovd/
+#	../utils/paraFetch/notes
+#	../utils/raToStructGen/edwBamFile.as
+#	../utils/raToStructGen/foo.fastq
+#	../utils/raToStructGen/foo.stats
+#	../utils/raToStructGen/testOut/test.out
+#	../utils/raToStructGen/testOut/testStruct.c
+#	../utils/raToStructGen/testOut/testStruct.h
+#	../utils/raToStructGen/testOut/testStruct.sql
+#	../utils/replaceTextBetween/testOut
+#	../utils/replaceTextBetween/testOutWithEnds
+#	../utils/reverseLineOrder/makefile
+#	../utils/rowsToCols/gnfHumanAtlas2MedianVal.tab
+#	../utils/rowsToCols/gnfHumanAtlas2MedianValTransposed.tab
+#	../utils/rowsToCols/gnfInverse.tab
+#	../utils/status
+#	../utils/textBetween/pull
+#	../utils/textBetween/status
+#	../utils/verticalSplitSqlTable/doIt
+#	../utils/verticalSplitSqlTable/status
+#	../utils/wigToBigWig/dupTest1.wig
+#	../utils/wigToBigWig/dupTest2.wig
+#	../utils/wigToBigWig/dupTest3.wig
+#	../utils/wigToBigWig/foo.bigWig
+#	../utils/wigToBigWig/quickCheckWig.pl
+#	../webBlat/webBlat
+#	../../status
+#	../../tags.log
+#	../../test.log
+#	../../throughputNotest.txt
+no changes added to commit (use "git add" and/or "git commit -a")
diff --git a/gbtools/src/blatSrc/lib/subText.c b/gbtools/src/blatSrc/lib/subText.c
new file mode 100644
index 0000000..c5bf83e
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/subText.c
@@ -0,0 +1,153 @@
+/* subText - Stuff to do text substitutions. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "subText.h"
+
+
+struct subText *subTextNew(char *in, char *out)
+/* Make new substitution structure. */
+{
+struct subText *sub;
+AllocVar(sub);
+sub->in = cloneString(in);
+sub->out = cloneString(out);
+sub->inSize = strlen(in);
+sub->outSize = strlen(out);
+return sub;
+}
+
+void subTextFree(struct subText **pSub)
+/* Free a subText. */
+{
+struct subText *sub = *pSub;
+if (sub != NULL)
+    {
+    freeMem(sub->in);
+    freeMem(sub->out);
+    freez(pSub);
+    }
+}
+
+void subTextFreeList(struct subText **pList)
+/* Free a list of dynamically allocated subText's */
+{
+struct subText *el, *next;
+
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    subTextFree(&el);
+    }
+*pList = NULL;
+}
+
+#if 0 /* unused */
+static boolean firstSame(char *s, char *t, int len)
+/* Return TRUE if  the  first len characters of the strings s and t
+ * are the same. */
+{
+while (--len >= 0)
+    {
+    if (*s++ != *t++)
+	return FALSE;
+    }
+return TRUE;
+}
+#endif
+
+static struct subText *firstInList(struct subText *l, char *name)
+/* Return first element in Sub list who's in string matches the
+ * first part of name. */
+{
+struct subText *text = l;
+char *start;
+char *end;
+char *cmp;
+
+for(; text; text = text->next)
+    {
+    start = text->in;
+    end = &start[text->inSize];
+    cmp = name;
+    for(;(start < end) && (*start == *cmp); start++, cmp++)
+	;
+    if (start == end)
+    	return text;
+    }
+return NULL;
+}
+
+
+int subTextSizeAfter(struct subText *subList, char *in)
+/* Return size string will be after substitutions. */
+{
+struct subText *sub;
+char *s;
+int size = 0;
+
+s = in;
+while (*s)
+    {
+    if ((sub = firstInList(subList, s)) != NULL)
+	{
+	s += sub->inSize;
+	size += sub->outSize;
+	}
+    else
+	{
+	size += 1;
+	s += 1;
+	}
+    }
+return size;
+}
+
+
+static void doSub(char *in, char *buf, struct subText *subList)
+/* Do substitutions in list while copying from in to buf.  This
+ * cheap little routine doesn't check that out is big enough.... */
+{
+struct subText *sub;
+char *s, *d;
+
+s = in;
+d = buf;
+while (*s)
+    {
+    if ((sub = firstInList(subList, s)) != NULL)
+	{
+	s += sub->inSize;
+	memcpy(d, sub->out, sub->outSize);
+	d += strlen(sub->out);
+	}
+    else
+	{
+	*d++ = *s++;
+	}
+    }
+*d++ = 0;
+}
+
+void subTextStatic(struct subText *subList, char *in, char *out, int outMaxSize)
+/* Do substition to output buffer of given size.  Complain
+ * and die if not big enough. */
+{
+int newSize = subTextSizeAfter(subList, in);
+if (newSize >= outMaxSize)
+    errAbort("%s would expand to more than %d bytes", in, outMaxSize);
+doSub(in, out, subList);
+}
+
+char *subTextString(struct subText *subList, char *in)
+/* Return string with substitutions in list performed.  freeMem
+ * this string when done. */
+{
+int size = subTextSizeAfter(subList, in);
+char *out = needMem(size+1);
+doSub(in, out, subList);
+return out;
+}
+
diff --git a/gbtools/src/blatSrc/lib/sufa.c b/gbtools/src/blatSrc/lib/sufa.c
new file mode 100644
index 0000000..81e0c01
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/sufa.c
@@ -0,0 +1,142 @@
+/* sufa - suffix array for genome.  Use sufaMake utility to create one of these, and
+ * the routines here to access it. */
+/* This file is copyright 2008 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include <sys/mman.h>
+#include "sufa.h"
+
+static void *pointerOffset(void *pt, bits64 offset)
+/* A little wrapper around pointer arithmetic in terms of bytes. */
+{
+char *s = pt;
+return s + offset;
+}
+
+struct sufa *sufaRead(char *fileName, boolean memoryMap)
+/* Read in a sufa from a file.  Does this via memory mapping if you like,
+ * which will be faster typically for about 100 reads, and slower for more
+ * than that (_much_ slower for thousands of reads and more). */
+{
+/* Open file (low level), read in header, and check it. */
+int fd = open(fileName, O_RDONLY);
+if (fd < 0)
+    errnoAbort("Can't open %s", fileName);
+struct sufaFileHeader h;
+if (read(fd, &h, sizeof(h)) < sizeof(h))
+    errnoAbort("Couldn't read header of file %s", fileName);
+if (h.magic != SUFA_MAGIC)
+    errAbort("%s does not seem to be a sufa file.", fileName);
+if (h.majorVersion > SUFA_MAJOR_VERSION)
+    errAbort("%s is a newer, incompatible version of sufa format. "
+             "This program works on version %d and below. "
+	     "%s is version %d.",  fileName, SUFA_MAJOR_VERSION, fileName, h.majorVersion);
+
+struct sufa *sufa;
+verbose(2, "sufa file %s size %lld\n", fileName, h.size);
+
+/* Get a pointer to data in memory, via memory map, or allocation and read. */
+struct sufaFileHeader *header ;
+if (memoryMap)
+    {
+#ifdef MACHTYPE_sparc
+    header = (struct sufaFileHeader *)mmap(NULL, h.size, PROT_READ, MAP_SHARED, fd, 0);
+#else
+    header = mmap(NULL, h.size, PROT_READ, MAP_FILE|MAP_SHARED, fd, 0);
+#endif
+    if (header == (void*)(-1))
+	errnoAbort("Couldn't mmap %s, sorry", fileName);
+    }
+else
+    {
+    header = needHugeMem(h.size);
+    if (lseek(fd, 0, SEEK_SET) < 0)
+	errnoAbort("Couldn't seek back to start of sufa file %s.  "
+		   "Splix files must be random access files, not pipes and the like"
+		   , fileName);
+    if (read(fd, header, h.size) < h.size)
+        errnoAbort("Couldn't read all of sufa file %s.", fileName);
+    }
+
+/* Allocate wrapper structure and fill it in. */
+AllocVar(sufa);
+sufa->header = header;
+sufa->isMapped = memoryMap;
+
+/* Make an array for easy access to chromosome names. */
+int chromCount = header->chromCount;
+char **chromNames = AllocArray(sufa->chromNames, chromCount);
+char *s = pointerOffset(header, sizeof(*header) );
+int i;
+for (i=0; i<chromCount; ++i)
+    {
+    chromNames[i] = s;
+    s += strlen(s)+1;
+    }
+
+/* Keep track of where we are in memmap. */
+bits64 mapOffset = sizeof(*header) + header->chromNamesSize;
+
+/* Point into chromSizes array. */
+bits32 *chromSizes = sufa->chromSizes 
+	= pointerOffset(header, mapOffset);
+mapOffset += sizeof(bits32) * chromCount;
+
+verbose(2, "total dna size %lld in %d chromosomes\n", (long long)header->dnaDiskSize, header->chromCount);
+sufa->allDna = pointerOffset(header, mapOffset);
+mapOffset += header->dnaDiskSize;
+
+/* Calculate chromOffset array. */
+bits32 offset = 0;
+bits32 *chromOffsets = AllocArray(sufa->chromOffsets, chromCount);
+for (i=0; i<chromCount; ++i)
+    {
+    chromOffsets[i] = offset;
+    offset += chromSizes[i] + 1;
+    verbose(2, "sufa contains %s,  %d bases, %d offset\n", 
+    	sufa->chromNames[i], (int)sufa->chromSizes[i], (int)chromOffsets[i]);
+    }
+
+/* Finally point to the suffix array!. */
+sufa->array = pointerOffset(header, mapOffset);
+mapOffset += header->arraySize * sizeof(bits32);
+
+
+assert(mapOffset == header->size);	/* Sanity check */
+return sufa;
+}
+
+void sufaFree(struct sufa **pSufa)
+/* Free up resources associated with index. */
+{
+struct sufa *sufa = *pSufa;
+if (sufa != NULL)
+    {
+    freeMem(sufa->chromNames);
+    freeMem(sufa->chromOffsets);
+    if (sufa->isMapped)
+	munmap((void *)sufa->header, sufa->header->size);
+    else
+	freeMem(sufa->header);
+    freez(pSufa);
+    }
+}
+
+int sufaOffsetToChromIx(struct sufa *sufa, bits32 tOffset)
+/* Figure out index of chromosome containing tOffset */
+{
+int i;
+int chromCount = sufa->header->chromCount;
+/* TODO - convert to binary search - will need to sort chromosome list though.... */
+for (i=0; i<chromCount; ++i)
+    {
+    int chromStart = sufa->chromOffsets[i];
+    int chromEnd = chromStart + sufa->chromSizes[i];
+    if (tOffset >= chromStart && tOffset < chromEnd)
+        return i;
+    }
+errAbort("tOffset %d out of range\n", tOffset);
+return -1;
+}
+
diff --git a/gbtools/src/blatSrc/lib/sufx.c b/gbtools/src/blatSrc/lib/sufx.c
new file mode 100644
index 0000000..b706c2b
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/sufx.c
@@ -0,0 +1,146 @@
+/* sufx - suffix array for genome.  Use sufxMake utility to create one of these, and
+ * the routines here to access it. */
+/* This file is copyright 2008 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include <sys/mman.h>
+#include "sufx.h"
+#include "net.h"
+
+static void *pointerOffset(void *pt, bits64 offset)
+/* A little wrapper around pointer arithmetic in terms of bytes. */
+{
+char *s = pt;
+return s + offset;
+}
+
+struct sufx *sufxRead(char *fileName, boolean memoryMap)
+/* Read in a sufx from a file.  Does this via memory mapping if you like,
+ * which will be faster typically for about 100 reads, and slower for more
+ * than that (_much_ slower for thousands of reads and more). */
+{
+/* Open file (low level), read in header, and check it. */
+int fd = open(fileName, O_RDONLY);
+if (fd < 0)
+    errnoAbort("Can't open %s", fileName);
+struct sufxFileHeader h;
+if (read(fd, &h, sizeof(h)) < sizeof(h))
+    errnoAbort("Couldn't read header of file %s", fileName);
+if (h.magic != SUFX_MAGIC)
+    errAbort("%s does not seem to be a sufx file.", fileName);
+if (h.majorVersion > SUFX_MAJOR_VERSION)
+    errAbort("%s is a newer, incompatible version of sufx format. "
+             "This program works on version %d and below. "
+	     "%s is version %d.",  fileName, SUFX_MAJOR_VERSION, fileName, h.majorVersion);
+
+struct sufx *sufx;
+verbose(2, "sufx file %s size %lld\n", fileName, h.size);
+
+/* Get a pointer to data in memory, via memory map, or allocation and read. */
+struct sufxFileHeader *header ;
+if (memoryMap)
+    {
+#ifdef MACHTYPE_sparc
+    header = (struct sufxFileHeader *)mmap(NULL, h.size, PROT_READ, MAP_SHARED, fd, 0);
+#else
+    header = mmap(NULL, h.size, PROT_READ, MAP_FILE|MAP_SHARED, fd, 0);
+#endif
+    if (header == (void*)(-1))
+	errnoAbort("Couldn't mmap %s, sorry", fileName);
+    }
+else
+    {
+    header = needHugeMem(h.size);
+    if (lseek(fd, 0, SEEK_SET) < 0)
+	errnoAbort("Couldn't seek back to start of sufx file %s.  "
+		   "Splix files must be random access files, not pipes and the like"
+		   , fileName);
+    if (netReadAll(fd, header, h.size) < h.size)
+        errnoAbort("Couldn't read all of sufx file %s.", fileName);
+    }
+
+/* Allocate wrapper structure and fill it in. */
+AllocVar(sufx);
+sufx->header = header;
+sufx->isMapped = memoryMap;
+
+/* Make an array for easy access to chromosome names. */
+int chromCount = header->chromCount;
+char **chromNames = AllocArray(sufx->chromNames, chromCount);
+char *s = pointerOffset(header, sizeof(*header) );
+int i;
+for (i=0; i<chromCount; ++i)
+    {
+    chromNames[i] = s;
+    s += strlen(s)+1;
+    }
+
+/* Keep track of where we are in memmap. */
+bits64 mapOffset = sizeof(*header) + header->chromNamesSize;
+
+/* Point into chromSizes array. */
+bits32 *chromSizes = sufx->chromSizes 
+	= pointerOffset(header, mapOffset);
+mapOffset += sizeof(bits32) * chromCount;
+
+verbose(2, "total dna size %lld in %d chromosomes\n", (long long)header->dnaDiskSize, header->chromCount);
+sufx->allDna = pointerOffset(header, mapOffset);
+mapOffset += header->dnaDiskSize;
+
+/* Calculate chromOffset array. */
+bits32 offset = 0;
+bits32 *chromOffsets = AllocArray(sufx->chromOffsets, chromCount);
+for (i=0; i<chromCount; ++i)
+    {
+    chromOffsets[i] = offset;
+    offset += chromSizes[i] + 1;
+    verbose(2, "sufx contains %s,  %d bases, %d offset\n", 
+    	sufx->chromNames[i], (int)sufx->chromSizes[i], (int)chromOffsets[i]);
+    }
+
+/* Point to the suffix array. */
+sufx->array = pointerOffset(header, mapOffset);
+mapOffset += header->arraySize * sizeof(bits32);
+
+/* Finally point to the traverse array!. */
+sufx->traverse = pointerOffset(header, mapOffset);
+mapOffset += header->arraySize * sizeof(bits32);
+
+assert(mapOffset == header->size);	/* Sanity check */
+return sufx;
+}
+
+void sufxFree(struct sufx **pSufx)
+/* Free up resources associated with index. */
+{
+struct sufx *sufx = *pSufx;
+if (sufx != NULL)
+    {
+    freeMem(sufx->chromNames);
+    freeMem(sufx->chromOffsets);
+    if (sufx->isMapped)
+	munmap((void *)sufx->header, sufx->header->size);
+    else
+	freeMem(sufx->header);
+    freez(pSufx);
+    }
+}
+
+int sufxOffsetToChromIx(struct sufx *sufx, bits32 tOffset)
+/* Figure out index of chromosome containing tOffset */
+{
+int i;
+int chromCount = sufx->header->chromCount;
+/* TODO - convert to binary search - will need to sort chromosome list though.... */
+for (i=0; i<chromCount; ++i)
+    {
+    int chromStart = sufx->chromOffsets[i];
+    int chromEnd = chromStart + sufx->chromSizes[i];
+    if (tOffset >= chromStart && tOffset < chromEnd)
+        return i;
+    }
+errAbort("tOffset %d out of range\n", tOffset);
+return -1;
+}
+
diff --git a/gbtools/src/blatSrc/lib/synQueue.c b/gbtools/src/blatSrc/lib/synQueue.c
new file mode 100644
index 0000000..34dd626
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/synQueue.c
@@ -0,0 +1,117 @@
+/* synQueue - a sychronized message queue for messages between
+ * threads. */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "dlist.h"
+#include "pthreadWrap.h"
+#include "synQueue.h"
+
+
+struct synQueue
+/* A synchronized queue for messages between threads. */
+    {
+    struct synQueue *next;	/* Next in list of queues. */
+    struct dlList *queue;	/* The queue itself. */
+    pthread_mutex_t mutex;	/* Mutex to prevent simultanious access. */
+    pthread_cond_t cond;	/* Conditional to allow waiting until non-empty. */
+    };
+
+struct synQueue *synQueueNew()
+/* Make a new, empty, synQueue. */
+{
+struct synQueue *sq;
+AllocVar(sq);
+pthreadMutexInit(&sq->mutex);
+pthreadCondInit(&sq->cond);
+sq->queue = dlListNew();
+return sq;
+}
+
+void synQueueFree(struct synQueue **pSq)
+/* Free up synQueue.  Be sure no other threads are using
+ * it first though! This will not free any dynamic memory
+ * in the messages.  Use synQueueFreeAndVals for that. */
+{
+struct synQueue *sq = *pSq;
+if (sq == NULL)
+    return;
+dlListFree(&sq->queue);
+pthreadCondDestroy(&sq->cond);
+pthreadMutexDestroy(&sq->mutex);
+freez(pSq);
+}
+
+void synQueueFreeAndVals(struct synQueue **pSq)
+/* Free up synQueue.  Be sure no other threads are using
+ * it first though! This will freeMem all the messages */
+{
+struct synQueue *sq = *pSq;
+if (sq == NULL)
+    return;
+dlListFreeAndVals(&sq->queue);
+pthreadCondDestroy(&sq->cond);
+pthreadMutexDestroy(&sq->mutex);
+freez(pSq);
+}
+
+void synQueuePutUnprotected(struct synQueue *sq, void *message)
+/* Add message to end of queue without protecting against multithreading
+ * contention - used before pthreads are launched perhaps. */
+{
+dlAddValTail(sq->queue, message);
+}
+
+void synQueuePut(struct synQueue *sq, void *message)
+/* Add message to end of queue. */
+{
+pthreadMutexLock(&sq->mutex);
+dlAddValTail(sq->queue, message);
+pthreadCondSignal(&sq->cond);
+pthreadMutexUnlock(&sq->mutex);
+}
+
+void *synQueueGet(struct synQueue *sq)
+/* Get message off start of queue.  Wait until there is
+ * a message if queue is empty. */
+{
+void *message;
+struct dlNode *node;
+pthreadMutexLock(&sq->mutex);
+while (dlEmpty(sq->queue))
+    pthreadCondWait(&sq->cond, &sq->mutex);
+node = dlPopHead(sq->queue);
+pthreadMutexUnlock(&sq->mutex);
+message = node->val;
+freeMem(node);
+return message;
+}
+
+void *synQueueGrab(struct synQueue *sq)
+/* Get message off start of queue.  Return NULL immediately 
+ * if queue is empty. */
+{
+void *message = NULL;
+struct dlNode *node;
+pthreadMutexLock(&sq->mutex);
+node = dlPopHead(sq->queue);
+pthreadMutexUnlock(&sq->mutex);
+if (node != NULL)
+    {
+    message = node->val;
+    freeMem(node);
+    }
+return message;
+}
+
+int synQueueSize(struct synQueue *sq)
+/* Return number of messages currently on queue. */
+{
+int size;
+pthreadMutexLock(&sq->mutex);
+size = dlCount(sq->queue);
+pthreadMutexUnlock(&sq->mutex);
+return size;
+}
diff --git a/gbtools/src/blatSrc/lib/tabRow.c b/gbtools/src/blatSrc/lib/tabRow.c
new file mode 100644
index 0000000..5f9fbce
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/tabRow.c
@@ -0,0 +1,232 @@
+/* tabRow - a row from a database or a tab-separated file held in
+ * memory.   Just a light wrapper around an array of strings. 
+ * Also some routines to convert slLines to tabRows. */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "tabRow.h"
+
+
+struct tabRow *tabRowNew(int colCount)
+/* Return new row. */
+{
+struct tabRow *row = needMem(sizeof(*row) + colCount*sizeof(char*));
+row->colCount = colCount;
+return row;
+}
+
+int tabRowMaxColCount(struct tabRow *rowList)
+/* Return largest column count */
+{
+int maxCount = 0;
+struct tabRow *row;
+for (row = rowList; row != NULL; row = row->next)
+    if (row->colCount > maxCount)
+        maxCount = row->colCount;
+return maxCount;
+}
+
+struct tabRow *tabRowByWhite(struct slName *lineList, char *fileName,
+	boolean varCol)
+/* Convert lines to rows based on spaces.  If varCol is TRUE then not
+ * all rows need to have same number of columns. */
+{
+struct slName *line;
+struct tabRow *rowList = NULL, *row;
+
+if (varCol)
+    {
+    for (line = lineList; line != NULL; line = line->next)
+        {
+	char *s = line->name;
+	int rowSize = chopByWhite(s, NULL, 0);
+	row = tabRowNew(rowSize);
+	chopByWhite(s, row->columns, rowSize);
+	slAddHead(&rowList, row);
+	}
+    }
+else
+    {
+    if (lineList)
+        {
+	int rowSize = chopByWhite(lineList->name, NULL, 0);
+	int extraSize = rowSize+1;
+	int ix = 1;
+	for (line = lineList; line != NULL; line = line->next, ++ix)
+	    {
+	    int oneSize;
+	    row = tabRowNew(rowSize);
+	    oneSize = chopByWhite(line->name, row->columns, extraSize);
+	    if (oneSize != rowSize)
+	        {
+		if (oneSize > rowSize)
+		    errAbort("Got more than the expected %d columns line %d of %s",
+			    rowSize, ix, fileName);
+		else
+		    errAbort("Expecting %d columns got %d, line %d of %s",
+		    	rowSize, oneSize, ix, fileName);
+
+		}
+	    slAddHead(&rowList, row);
+	    }
+	}
+    }
+slReverse(&rowList);
+return rowList;
+}
+
+struct tabRow *tabRowByChar(struct slName *lineList, char c, char *fileName,
+	boolean varCol)
+/* Convert lines to rows based on character separation.  If varCol is TRUE then not
+ * all rows need to have same number of columns. */
+{
+struct slName *line;
+struct tabRow *rowList = NULL, *row;
+
+if (varCol)
+    {
+    for (line = lineList; line != NULL; line = line->next)
+        {
+	char *s = line->name;
+	int rowSize = countChars(s, c) + 1;
+	row = tabRowNew(rowSize);
+	chopByChar(s, c, row->columns, rowSize);
+	slAddHead(&rowList, row);
+	}
+    }
+else
+    {
+    if (lineList)
+        {
+	int rowSize = countChars(lineList->name, c) + 1;
+	int extraSize = rowSize+1;
+	int ix = 1;
+	for (line = lineList; line != NULL; line = line->next, ++ix)
+	    {
+	    int oneSize;
+	    row = tabRowNew(rowSize);
+	    oneSize = chopByChar(line->name, c, row->columns, extraSize);
+	    if (oneSize != rowSize)
+	        {
+		if (oneSize > rowSize)
+		    errAbort("Got more than the expected %d columns line %d of %s",
+			    rowSize, ix, fileName);
+		else
+		    errAbort("Expecting %d columns got %d, line %d of %s",
+		    	rowSize, oneSize, ix, fileName);
+
+		}
+	    slAddHead(&rowList, row);
+	    }
+	}
+    }
+return rowList;
+}
+
+struct slInt *tabRowGuessFixedOffsets(struct slName *lineList, char *fileName)
+/* Return our best guess list of starting positions for space-padded fixed
+ * width fields. */
+{
+struct slInt *offList = NULL, *off;
+
+if (lineList)
+    {
+    char *spaceRec = cloneString(lineList->name), *s;
+    int lineSize = strlen(spaceRec);
+    struct slName *line;
+    int lineIx=1;
+
+    /* First 'or' together all lines into spaceRec, which will
+     * have a space wherever all columns of all lines are space and
+     * non-space elsewhere. */
+    for (line = lineList->next; line != NULL; line = line->next, ++lineIx)
+        {
+	int i;
+	s = line->name;
+	if (strlen(s) != lineSize)
+	   errAbort("Line %d of %s has %lu chars, but first line has just %d",
+	       lineIx, fileName, (unsigned long)strlen(s), lineSize);
+	for (i=0; i<lineSize; ++i)
+	    {
+	    if (s[i] != ' ')
+	        spaceRec[i] = 'X';
+	    }
+	}
+
+    /* Now make up slInt list that describes where words begin */
+    s = spaceRec;
+    for (;;)
+        {
+	s = skipLeadingSpaces(s);
+	if (s == NULL || s[0] == 0)
+	    break;
+	AllocVar(off);
+	off->val = s - spaceRec;
+	slAddHead(&offList, off);
+	s = skipToSpaces(s);
+	}
+    slReverse(&offList);
+    }
+return offList;
+}
+
+struct tabRow *tabRowByFixedOffsets(struct slName *lineList, struct slInt *offList,
+	char *fileName)
+/* Return rows parsed into fixed width fields whose starts are defined by
+ * offList. */
+{
+struct slName *line;
+struct slInt *off;
+struct tabRow *rowList = NULL, *row;
+int rowSize = slCount(offList);
+
+if (lineList)
+    {
+    int lineSize = strlen(lineList->name);
+    int lineIx = 1;
+    for (off = offList; off != NULL; off = off->next)
+        {
+	if (off->val >= lineSize)
+	    errAbort("Offset %d is bigger than lineSize of %d", off->val, lineSize);
+	}
+    for (line = lineList; line != NULL; line = line->next, ++lineIx)
+	{
+	char *linePt = line->name;
+	int offIx = 0;
+	if (strlen(linePt) != lineSize)
+	   errAbort("Line %d of %s has %lu chars, but first line has just %d",
+	       lineIx, fileName, (unsigned long)strlen(linePt), lineSize);
+	row = tabRowNew(rowSize);
+	for (off = offList; off != NULL; off = off->next, ++offIx)
+	    {
+	    int start = off->val, end;
+	    if (off->next != NULL)
+		{
+	        end = off->next->val-1;
+		if (linePt[end] != ' ')
+		   errAbort("Line %d of %s expecting space column %d, got %c",
+			   lineIx, fileName, end, linePt[end]);
+		}
+	    else
+	        end = lineSize;
+	    linePt[end] = 0;
+	    row->columns[offIx] = trimSpaces(linePt + start);
+	    }
+	slAddHead(&rowList, row);
+	}
+    slReverse(&rowList);
+    }
+return rowList;
+}
+
+struct tabRow *tabRowByFixedGuess(struct slName *lineList, char *fileName)
+/* Return rows parsed into fixed-width fields. */
+{
+struct slInt *offList = tabRowGuessFixedOffsets(lineList, fileName);
+struct tabRow *rowList = tabRowByFixedOffsets(lineList, offList, fileName);
+slFreeList(&offList);
+return rowList;
+}
+
diff --git a/gbtools/src/blatSrc/lib/textOut.c b/gbtools/src/blatSrc/lib/textOut.c
new file mode 100644
index 0000000..9ab111e
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/textOut.c
@@ -0,0 +1,196 @@
+/* textOut - set up stdout to be HTTP text, file or compressed file. */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "errAbort.h"
+#include "cheapcgi.h"
+#include "pipeline.h"
+#include "textOut.h"
+
+
+static void textOutWarnHandler(char *format, va_list args)
+/* Text mode error message handler. */
+{
+char *hLine =
+"---------------------------------------------------------------------------\n";
+if (format != NULL) {
+    fflush(stdout);
+    fprintf(stdout, "%s", hLine);
+    vfprintf(stdout, format, args);
+    fprintf(stdout, "\n");
+    fprintf(stdout, "%s", hLine);
+    }
+}
+
+static void textOutAbortHandler()
+/* Text mode abort handler. */
+{
+exit(-1);
+}
+
+char *getCompressSuffix(char *compressType)
+/* Return the file dot-suffix (including the dot) for compressType. */
+{
+static char *gzipSuffix = ".gz";
+static char *compressSuffix = ".Z";
+static char *bz2Suffix = ".bz2";
+static char *zipSuffix = ".zip";
+if (sameWord(compressType, textOutCompressGzip))
+    return gzipSuffix;
+else if (sameWord(compressType, textOutCompressCompress))
+    return compressSuffix;
+else if (sameWord(compressType, textOutCompressBzip2))
+    return bz2Suffix;
+else if (sameWord(compressType, textOutCompressZip))
+    return zipSuffix;
+else
+    errAbort("getCompressSuffix: Unsupported textOutCompress type %s",
+	     compressType);
+return NULL;
+}
+
+static char **getCompressor(char *compressType)
+/* Return a compressor specification for pipelineOpen1(). */
+{
+static char *GZ_WRITE[] = {"gzip", "-qc", NULL};
+static char *Z_WRITE[] = {"compress", "-c", NULL};
+static char *BZ2_WRITE[] = {"bzip2", "-qzc", NULL};
+static char *ZIP_WRITE[] = {"zip", "-q", NULL};
+
+if (sameWord(compressType, textOutCompressGzip))
+    return GZ_WRITE;
+else if (sameWord(compressType, textOutCompressCompress))
+    return Z_WRITE;
+else if (sameWord(compressType, textOutCompressBzip2))
+    return BZ2_WRITE;
+else if (sameWord(compressType, textOutCompressZip))
+    return ZIP_WRITE;
+else
+    errAbort("getCompressor: Unsupported textOutCompress type %s",
+	     compressType);
+return NULL;
+}
+
+static void cleanEnvVars(char *compressType)
+/* Ensure vanilla behavior of compressors by removing environment variables 
+ * that they read for option settings. */
+{
+if (sameWord(compressType, textOutCompressGzip))
+    {
+    unsetenv("GZIP");
+    unsetenv("GZIP_OPT");
+    }
+else if (sameWord(compressType, textOutCompressCompress))
+    {
+    /* No environment variables mentioned in man page. */
+    }
+else if (sameWord(compressType, textOutCompressBzip2))
+    {
+    unsetenv("BZIP");
+    unsetenv("BZIP2");
+    }
+else if (sameWord(compressType, textOutCompressZip))
+    {
+    unsetenv("ZIPOPT");
+    }
+else
+    {
+    errAbort("cleanEnvVars: Unsupported textOutCompress type %s",
+	     compressType);
+    }
+}
+
+
+struct pipeline *textOutInit(char *fileName, char *compressType, int *saveStdout)
+/* Set up stdout to be HTTP text, file (if fileName is specified), or 
+ * compressed file (if both fileName and compressType are specified -- 
+ * see textOut.h for supported compression types).  
+ * Return NULL if no compression, otherwise a pipeline handle on which 
+ * textOutClose should be called when we're done writing stdout. */
+{
+struct pipeline *compressPipeline = NULL;
+
+// if path contains a slash, we are outputting to a local file
+boolean outToFile = (strchr(fileName, '/') != NULL);
+if (outToFile)
+    {
+    FILE *f;
+    f = fopen(fileName, "w");
+    /* We want to capture stdout output to a file */
+    fflush(stdout);
+    int tempOut = dup(STDOUT_FILENO);
+    if (saveStdout)
+	*saveStdout = tempOut;
+    dup2(fileno(f),STDOUT_FILENO);   /* closes STDOUT before setting it again */
+    fclose(f);
+    }
+
+trimSpaces(fileName);
+if (isEmpty(fileName))
+    {
+    printf("Content-Type: text/plain\n\n");
+    }
+else if (isEmpty(compressType) || sameWord(compressType, textOutCompressNone))
+    {
+    if (!outToFile)
+	{
+	printf("Content-Type: application/octet-stream\n");
+	printf("Content-Disposition: attachment; filename=%s\n\n", fileName);
+	}
+    }
+else
+    {
+
+    if (!outToFile)
+	{
+	char *suffix = getCompressSuffix(compressType);
+	printf("Content-Type: application/x-%s\n", compressType);
+	if (endsWith(fileName, suffix))
+	    printf("Content-Disposition: attachment; filename=%s\n\n", fileName);
+	else
+	    printf("Content-Disposition: attachment; filename=%s%s\n\n",
+		   fileName, suffix);
+	/* Send the Content header uncompressed! */
+	fflush(stdout);
+	}
+
+    /* Make sure no environment variables interfere with compressor. */
+    cleanEnvVars(compressType);
+
+    /* Redirect stdout to compressor pipeline object. */
+    compressPipeline = pipelineOpen1(getCompressor(compressType),
+				     pipelineWrite, NULL, NULL);
+    if (-1 == dup2(pipelineFd(compressPipeline), STDOUT_FILENO))
+	errnoAbort("dup2(pipelineFd %d, stdout %d) failed in textOpen()",
+		   pipelineFd(compressPipeline), STDOUT_FILENO);
+    }
+pushWarnHandler(textOutWarnHandler);
+pushAbortHandler(textOutAbortHandler);
+return(compressPipeline);
+}
+
+void textOutClose(struct pipeline **pCompressPipeline, int *saveStdout)
+/* Flush and close stdout, wait for the pipeline to finish, and then free 
+ * the pipeline object. */
+{
+if (pCompressPipeline && *pCompressPipeline)
+    {
+    fflush(stdout);
+    close(STDOUT_FILENO); // Do not use fclose
+    pipelineClose(pCompressPipeline);
+    }
+if (saveStdout)
+    {
+    if (*saveStdout != -1)
+	{
+	/* restore stdout */
+	fflush(stdout);
+	dup2(*saveStdout,STDOUT_FILENO);  /* closes STDOUT before setting it back to saved descriptor */
+	close(*saveStdout);
+	*saveStdout = -1;
+	}
+    }
+}
+
diff --git a/gbtools/src/blatSrc/lib/tokenizer.c b/gbtools/src/blatSrc/lib/tokenizer.c
new file mode 100644
index 0000000..9dfdc59
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/tokenizer.c
@@ -0,0 +1,216 @@
+/* tokenizer - A tokenizer structure that will chop up file into
+ * tokens.  It is aware of quoted strings and otherwise tends to return
+ * white-space or punctuated-separated words, with punctuation in
+ * a separate token.  This is used by autoSql. */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "errAbort.h"
+#include "linefile.h"
+#include "tokenizer.h"
+
+
+struct tokenizer *tokenizerOnLineFile(struct lineFile *lf)
+/* Create a new tokenizer on open lineFile. */
+{
+struct tokenizer *tkz;
+AllocVar(tkz);
+tkz->sAlloc = 128;
+tkz->string = needMem(tkz->sAlloc);
+tkz->lf = lf;
+tkz->curLine = tkz->linePt = "";
+return tkz;
+}
+
+struct tokenizer *tokenizerNew(char *fileName)
+/* Return a new tokenizer. */
+{
+return tokenizerOnLineFile(lineFileOpen(fileName, TRUE));
+}
+
+void tokenizerFree(struct tokenizer **pTkz)
+/* Tear down a tokenizer. */
+{
+struct tokenizer *tkz;
+if ((tkz = *pTkz) != NULL)
+    {
+    freeMem(tkz->string);
+    lineFileClose(&tkz->lf);
+    freez(pTkz);
+    }
+}
+
+void tokenizerReuse(struct tokenizer *tkz)
+/* Reuse token. */
+{
+if (!tkz->eof)
+    tkz->reuse = TRUE;
+}
+
+int tokenizerLineCount(struct tokenizer *tkz)
+/* Return line of current token. */
+{
+return tkz->lf->lineIx;
+}
+
+char *tokenizerFileName(struct tokenizer *tkz)
+/* Return name of file. */
+{
+return tkz->lf->fileName;
+}
+
+char *tokenizerNext(struct tokenizer *tkz)
+/* Return token's next string (also available as tkz->string) or
+ * NULL at EOF. */
+{
+char *start, *end;
+char c, *s;
+int size;
+if (tkz->reuse)
+    {
+    tkz->reuse = FALSE;
+    return tkz->string;
+    }
+tkz->leadingSpaces = 0;
+for (;;)	/* Skip over white space and comments. */
+    {
+    int lineSize;
+    s = start = skipLeadingSpaces(tkz->linePt);
+    tkz->leadingSpaces += s - tkz->linePt;
+    if ((c = start[0]) != 0)
+	{
+	if (tkz->uncommentC && c == '/')
+	     {
+	     if (start[1] == '/')
+		 ;  /* Keep going in loop effectively ignoring rest of line. */
+	     else if (start[1] == '*')
+		 {
+		 start += 2;
+		 for (;;)
+		     {
+		     char *end = stringIn("*/", start);
+		     if (end != NULL)
+			  {
+			  tkz->linePt = end+2;
+			  break;
+			  }
+		     if (!lineFileNext(tkz->lf, &tkz->curLine, &lineSize))
+			  errAbort("End of file (%s) in comment", tokenizerFileName(tkz));
+		     start = tkz->curLine;
+		     }
+		 continue;
+		 }
+	     else
+		 break;
+	     }
+	else if (tkz->uncommentShell && c == '#')
+	     ;  /* Keep going in loop effectively ignoring rest of line. */
+	else
+	    break;	/* Got something real. */
+	}
+    if (!lineFileNext(tkz->lf, &tkz->curLine, &lineSize))
+	{
+	tkz->eof = TRUE;
+	return NULL;
+	}
+    tkz->leadingSpaces += 1;
+    tkz->linePt = tkz->curLine;
+    }
+if (isalnum(c) || (c == '_'))
+    {
+    for (;;)
+	{
+        s++;
+	if (!(isalnum(*s) || (*s == '_')))
+	    break;
+	}
+    end = s;
+    }
+else if (c == '"' || c == '\'')
+    {
+    char quot = c;
+    if (tkz->leaveQuotes)
+	start = s++;
+    else
+	start = ++s;
+    for (;;)
+	{
+	c = *s;
+	if (c == quot)
+	    {
+	    if (s[-1] == '\\')
+		{
+		if (s >= start+2 && s[-2] == '\\')
+		    break;
+		}
+	    else
+		break;
+	    }
+	else if (c == 0)
+	    {
+	    break;
+	    }
+	++s;
+	}
+    end = s;
+    if (c != 0)
+	++s;
+    if (tkz->leaveQuotes)
+	end += 1;
+    }
+else
+    {
+    end = ++s;
+    }
+tkz->linePt = s;
+size = end - start;
+if (size >= tkz->sAlloc)
+    {
+    tkz->sAlloc = size+128;
+    tkz->string = needMoreMem(tkz->string, 0, tkz->sAlloc);
+    }
+memcpy(tkz->string, start, size);
+tkz->string[size] = 0;
+return tkz->string;
+}
+
+
+void tokenizerErrAbort(struct tokenizer *tkz, char *format, ...)
+/* Print error message followed by file and line number and
+ * abort. */
+{
+va_list args;
+va_start(args, format);
+vaWarn(format, args);
+errAbort("line %d of %s:\n%s", 
+	tokenizerLineCount(tkz), tokenizerFileName(tkz), tkz->curLine);
+}
+
+void tokenizerNotEnd(struct tokenizer *tkz)
+/* Squawk if at end. */
+{
+if (tkz->eof)
+    errAbort("Unexpected end of file");
+}
+
+char *tokenizerMustHaveNext(struct tokenizer *tkz)
+/* Get next token, which must be there. */
+{
+char *s = tokenizerNext(tkz);
+if (s == NULL)
+    errAbort("Unexpected end of file");
+return s;
+}
+
+void tokenizerMustMatch(struct tokenizer *tkz, char *string)
+/* Require next token to match string.  Return next token
+ * if it does, otherwise abort. */
+{
+if (sameWord(tkz->string, string))
+    tokenizerMustHaveNext(tkz);
+else
+    tokenizerErrAbort(tkz, "Expecting %s got %s", string, tkz->string);
+}
+
diff --git a/gbtools/src/blatSrc/lib/trix.c b/gbtools/src/blatSrc/lib/trix.c
new file mode 100644
index 0000000..2289c58
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/trix.c
@@ -0,0 +1,760 @@
+/* trix - text retrieval index.  Stuff for fast two level index
+ * of text for fast word searches. */
+
+/* Copyright (C) 2013 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "hash.h"
+#include "linefile.h"
+#include "trix.h"
+#include "sqlNum.h"
+#include "udc.h"
+#include "net.h"
+
+
+/* Some local structures for the search. */
+struct trixHitPos 
+/* A hit to the index. */
+    {
+    struct trixHitPos *next;	/* Next in list */
+    char *itemId;		/* Associated itemId */
+    int wordIx;			/* Which word this is part of. */
+    int leftoverLetters;	/* Number of letters at end of word not matched */
+    };
+
+struct trixWordResult
+/* Results of a search on one word. */
+    {
+    struct trixWordResult *next;
+    char *word;			/* Word name. */
+    struct trixHitPos *hitList;	/* Hit list.  May be shared (not allocated here). */
+    struct trixHitPos *hit;	/* Current position while iterating through hit list. */
+    struct trixHitPos *iHit;	/* Current position during an inner iteration. */
+    };
+
+struct trixIxx
+/* A prefix and */
+    {
+    off_t pos;	   /* Position where prefix first occurs in file. */
+    char prefix[trixPrefixSize];/* Space padded first five letters of what we're indexing. */
+    };
+
+/* Some cleanup code. */
+
+static void trixHitPosFree(struct trixHitPos **pPos)
+/* Free up trixHitPos. */
+{
+struct trixHitPos *pos = *pPos;
+if (pos != NULL)
+    {
+    freeMem(pos->itemId);
+    freez(pPos);
+    }
+}
+
+static void trixHitPosFreeList(struct trixHitPos **pList)
+/* Free up a list of trixHitPoss. */
+{
+struct trixHitPos *el, *next;
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    trixHitPosFree(&el);
+    }
+*pList = NULL;
+}
+
+static void trixWordResultFree(struct trixWordResult **pTwr)
+/* Free up a trixWordResult */
+{
+struct trixWordResult *twr = *pTwr;
+if (twr != NULL)
+    {
+    freeMem(twr->word);
+    freez(pTwr);
+    }
+}
+
+static void trixWordResultFreeList(struct trixWordResult **pList)
+/* Free up a list of trixWordResults. */
+{
+struct trixWordResult *el, *next;
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    trixWordResultFree(&el);
+    }
+*pList = NULL;
+}
+
+static void freeHitCallback(void *val)
+/* Val is actually list trixHitPos.  This called to free stuff in hash. */
+{
+struct trixHitPos *posList = val;
+trixHitPosFreeList(&posList);
+}
+
+void trixClose(struct trix **pTrix)
+/* Close up index and free up associated resources. */
+{
+struct trix *trix = *pTrix;
+if (trix != NULL)
+    {
+    freeMem(trix->ixx);
+    hashTraverseVals(trix->wordHitHash, freeHitCallback);
+    hashFree(&trix->wordHitHash);	/* Need to free items? */
+    freez(pTrix);
+    }
+}
+
+void trixSearchResultFree(struct trixSearchResult **pTsr)
+/* Free up data associated with trixSearchResult. */
+{
+struct trixSearchResult *tsr = *pTsr;
+if (tsr != NULL)
+    {
+    freeMem(tsr->itemId);
+    freez(pTsr);
+    }
+}
+
+void trixSearchResultFreeList(struct trixSearchResult **pList)
+/* Free up a list of trixSearchResults. */
+{
+struct trixSearchResult *el, *next;
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    trixSearchResultFree(&el);
+    }
+*pList = NULL;
+}
+
+
+/* Code that makes, rather than cleans up. */
+
+static char unhexTable[128];	/* Lookup table to help with hex conversion. */
+
+static void initUnhexTable()
+/* Initialize a table for fast unhexing of numbers. */
+{
+unhexTable['0'] = 0;
+unhexTable['1'] = 1;
+unhexTable['2'] = 2;
+unhexTable['3'] = 3;
+unhexTable['4'] = 4;
+unhexTable['5'] = 5;
+unhexTable['6'] = 6;
+unhexTable['7'] = 7;
+unhexTable['8'] = 8;
+unhexTable['9'] = 9;
+unhexTable['A'] = 10;
+unhexTable['B'] = 11;
+unhexTable['C'] = 12;
+unhexTable['D'] = 13;
+unhexTable['E'] = 14;
+unhexTable['F'] = 15;
+}
+
+static off_t unhex(char hex[10])
+/* Convert 10 character hex string to off_t */
+{
+off_t  x = 0;
+int i;
+
+for (i=0; i<10; ++i)
+   {
+   x <<= 4;
+   x += unhexTable[(unsigned)hex[i]];
+   }
+return x;
+}
+
+struct trix *trixNew()
+/* Create a new empty trix index. */
+{
+struct trix *trix;
+AllocVar(trix);
+trix->ixxAlloc = 8*1024;
+AllocArray(trix->ixx, trix->ixxAlloc);
+trix->wordHitHash = newHash(8);
+return trix;
+}
+
+void trixAddToIxx(struct trix *trix, off_t pos, char *prefix)
+/* Add to trix->ixx. */
+{
+struct trixIxx *ixx;
+if (trix->ixxSize >= trix->ixxAlloc)
+     {
+     trix->ixxAlloc += trix->ixxAlloc;	/* Double allocation. */
+     ExpandArray(trix->ixx, trix->ixxSize, trix->ixxAlloc);
+     }
+ixx = trix->ixx + trix->ixxSize;
+ixx->pos = pos;
+memcpy(ixx->prefix, prefix, sizeof(ixx->prefix));
+trix->ixxSize += 1;
+}
+
+// wrappers around the udc or lineFile routines
+static void *ourOpen(struct trix *trix, char *fileName)
+{
+if (trix->useUdc)
+    return (void *)udcFileOpen(fileName, NULL);
+return (void *)lineFileOpen(fileName, TRUE);
+}
+
+static boolean ourReadLine(struct trix *trix, void *lf, char **line)
+{
+if (trix->useUdc)
+    {
+    *line = udcReadLine((struct udcFile *)lf);
+    return *line != NULL;
+    }
+return lineFileNext((struct lineFile *)lf, line, NULL);
+}
+
+static void ourClose(struct trix *trix, void **lf)
+{
+if (trix->useUdc)
+    udcFileClose((struct udcFile **)lf);
+else
+    lineFileClose((struct lineFile **)lf);
+}
+
+void ourSeek(struct trix *trix, off_t ixPos)
+{
+if (trix->useUdc)
+    udcSeek((struct udcFile *)trix->lf, ixPos);
+else
+    lineFileSeek((struct lineFile *)trix->lf, ixPos, SEEK_SET);
+}
+
+struct trix *trixOpen(char *ixFile)
+/* Open up index.  Load second level index in memory. */
+{
+struct trix *trix = trixNew();
+trix->useUdc = FALSE;
+if (hasProtocol(ixFile))
+    trix->useUdc = TRUE;
+
+char ixxFile[PATH_LEN];
+void *lf;
+char *line;
+
+initUnhexTable();
+safef(ixxFile, sizeof(ixxFile), "%sx", ixFile);
+lf = ourOpen(trix, ixxFile);
+while (ourReadLine(trix, lf, &line) )
+    {
+    off_t pos = unhex(line+trixPrefixSize);
+    trixAddToIxx(trix, pos, line);
+    }
+ourClose(trix, &lf);
+trix->lf = ourOpen(trix, ixFile);
+return trix;
+}
+
+void trixCopyToPrefix(char *word, char *prefix)
+/* Copy first part of word to prefix.  If need be end pad with spaces. */
+{
+int len = strlen(word);
+if (len >= trixPrefixSize)
+    memcpy(prefix, word, trixPrefixSize);
+else
+    {
+    memset(prefix, ' ', trixPrefixSize);
+    memcpy(prefix, word, len);
+    }
+}
+
+static off_t trixFindIndexStartLine(struct trix *trix, char *word)
+/* Find start position of line we want to start at in the first level
+ * index. */
+{
+char wordPrefix[trixPrefixSize];
+int i;
+off_t pos = 0;
+
+trixCopyToPrefix(word, wordPrefix);
+toLowerN(wordPrefix, trixPrefixSize);
+for (i=0; i<trix->ixxSize; ++i)
+    {
+    struct trixIxx *ixx = trix->ixx + i;
+    if (memcmp(wordPrefix, ixx->prefix, trixPrefixSize) < 0)
+       break;
+    pos = ixx->pos;
+    }
+return pos;
+}
+
+static struct trixHitPos *trixParseHitList(char *hitWord, char *hitString,
+	int leftoverLetters)
+/* Parse out hit string, inserting zeroes in it during process.
+ * Return result as list of trixHitPos. */
+{
+struct trixHitPos *hit, *hitList = NULL;
+char *word;
+while ((word = nextWord(&hitString)) != NULL)
+    {
+    char *parts[3];
+    int partCount;
+    partCount = chopByChar(word, ',', parts, ArraySize(parts));
+    if (partCount != 2)
+        errAbort("Error in index format at word %s", hitWord);
+    AllocVar(hit);
+    hit->itemId = cloneString(parts[0]);
+    hit->wordIx = sqlUnsigned(parts[1]);
+    hit->leftoverLetters = leftoverLetters;
+    slAddHead(&hitList, hit);
+    }
+slReverse(&hitList);
+return hitList;
+}
+
+int trixHitPosCmp(struct trixHitPos *a, struct trixHitPos *b)
+/* Compare function to sort trixHitPos. */
+{
+int diff = strcmp(a->itemId, b->itemId);
+if (diff == 0)
+    {
+    diff = a->wordIx - b->wordIx;
+    if (diff == 0)
+        diff = a->leftoverLetters - b->leftoverLetters;
+    }
+return diff;
+}
+
+
+struct trixHitPos *mergeHits(struct trixHitPos *aList, struct trixHitPos *bList)
+/* Return hit list that merges aList and bList.  The input is sorted,
+ * and so is the output. */
+{
+struct trixHitPos *a, *b, *aNext, *bNext, *newList = NULL;
+
+a = aList;
+b = bList;
+for (;;)
+    {
+    if (a == NULL)
+        {
+	if (b == NULL)
+	    break;
+	bNext = b->next;
+	slAddHead(&newList, b);
+	b = bNext;
+	}
+    else if (b == NULL)
+        {
+	aNext = a->next;
+	slAddHead(&newList, a);
+	a = aNext;
+	}
+    else if (trixHitPosCmp(a, b) < 0)
+        {
+	aNext = a->next;
+	slAddHead(&newList, a);
+	a = aNext;
+	}
+    else
+        {
+	bNext = b->next;
+	slAddHead(&newList, b);
+	b = bNext;
+	}
+    }
+slReverse(&newList);
+return newList;
+}
+
+static int reasonablePrefix(char *prefix, char *word, boolean expand)
+/* Return non-negative if prefix is reasonable for word.
+ * Returns number of letters left in word not matched by
+ * prefix. */
+{
+int prefixLen = strlen(prefix);
+int wordLen = strlen(word);
+int suffixLen = wordLen - prefixLen;
+if (suffixLen == 0)
+   return 0;
+else if (expand && prefixLen >= 3)
+    {
+    int wordEnd;
+    char *suffix = word + prefixLen;
+    boolean prefixEndsInDigit = isdigit(word[prefixLen-1]);
+    /* Find a word marker - either end of string, '-', '.', or '_'
+     * or a number. */
+    for (wordEnd=0; wordEnd < suffixLen; ++wordEnd)
+        {
+	char c = suffix[wordEnd];
+	if (c == '-' || c == '.' || c == '_' || (!prefixEndsInDigit && isdigit(c)))
+	    break;
+	}
+    if (wordEnd <= 2)
+       return wordEnd;
+    if (wordEnd == 3 && startsWith("ing", suffix))
+       return wordEnd;
+    }
+return -1;
+}
+
+
+struct trixWordResult *trixSearchWordResults(struct trix *trix, 
+	char *searchWord, boolean expand)
+/* Get results for single word from index.  Returns NULL if no matches. */
+{
+char *line, *word;
+struct trixWordResult *twr = NULL;
+struct trixHitPos *hitList = hashFindVal(trix->wordHitHash, searchWord);
+
+if (hitList == NULL)
+    {
+    struct trixHitPos *oneHitList;
+    off_t ixPos = trixFindIndexStartLine(trix, searchWord);
+    ourSeek(trix, ixPos);
+    while (ourReadLine(trix, trix->lf, &line))
+	{
+	word = nextWord(&line);
+	if (startsWith(searchWord, word))
+	    {
+	    int leftoverLetters = reasonablePrefix(searchWord, word, expand);
+	    /* uglyf("reasonablePrefix(%s,%s)=%d<BR>\n", searchWord, word, leftoverLetters); */
+	    if (leftoverLetters >= 0)
+		{
+		oneHitList = trixParseHitList(searchWord, line, 
+			leftoverLetters);
+		hitList = mergeHits(hitList, oneHitList);
+		}
+	    }
+	else if (strcmp(searchWord, word) < 0)
+	    break;
+	}
+    hashAdd(trix->wordHitHash, searchWord, hitList);
+    }
+if (hitList != NULL)
+    {
+    AllocVar(twr);
+    twr->word = cloneString(searchWord);
+    twr->hitList = hitList;
+    }
+return twr;
+}
+
+
+#ifdef DEBUG
+void trwDump(struct trixWordResult *twr)
+/* Dump out one trixWordResult to stdout. */
+{
+struct trixHitPos *hit;
+int hitIx, maxHits = 8;
+
+printf("%d matches to %s:", slCount(twr->hitList), twr->word);
+for (hit=twr->hitList, hitIx=0; hit != NULL && hitIx < maxHits; hit=hit->next, hitIx+=1)
+    printf(" %s@%d", hit->itemId, hit->wordIx);
+if (hit != NULL)
+    printf(" ...");
+printf("<BR>\n");
+}
+#endif /* DEBUG */
+
+static char *highestId(struct trixWordResult *twrList)
+/* Return highest itemId at current twr->hit */
+{
+char *itemId = twrList->hit->itemId;
+struct trixWordResult *twr;
+
+for (twr = twrList->next; twr != NULL; twr = twr->next)
+    {
+    if (strcmp(itemId, twr->hit->itemId) < 0)
+        itemId = twr->hit->itemId;
+    }
+return itemId;
+}
+
+static boolean seekOneToId(struct trixWordResult *twr, char *itemId)
+/* Move twr->hit forward until it hits itemId.  Return FALSE if
+ * moved past where itemId would be without hitting it. */
+{
+struct trixHitPos *hit;
+int diff = -1;
+for (hit = twr->hit; hit != NULL; hit = hit->next)
+    {
+    diff = strcmp(itemId, hit->itemId);
+    if (diff <= 0)
+        break;
+    }
+twr->hit = hit;
+return diff == 0;
+}
+
+static boolean seekAllToId(struct trixWordResult *twrList, char *itemId)
+/* Try to seek all twr's in list to the same itemId */
+{
+struct trixWordResult *twr;
+boolean allHit = TRUE;
+for (twr = twrList; twr != NULL; twr = twr->next)
+    {
+    if (!seekOneToId(twr, itemId))
+        allHit = FALSE;
+    }
+return allHit;
+}
+
+static void seekAllPastId(struct trixWordResult *twrList, char *itemId)
+/* Try to seek all twr's in list to past the itemId. */
+{
+struct trixWordResult *twr;
+for (twr = twrList; twr != NULL; twr = twr->next)
+    {
+    struct trixHitPos *hit;
+    for (hit = twr->hit; hit != NULL; hit = hit->next)
+	if (!sameString(hit->itemId, itemId))
+	    break;
+    twr->hit = hit;
+    }
+}
+
+static boolean anyTwrDone(struct trixWordResult *twrList)
+/* Return TRUE if any of the items in list are done */
+{
+struct trixWordResult *twr;
+for (twr = twrList; twr != NULL; twr = twr->next)
+    if (twr->hit == NULL)
+        return TRUE;
+return FALSE;
+}
+
+static void findUnorderedSpan(struct trixWordResult *twrList,
+	char *itemId, int *retSpan, int *retLeftoverLetters)
+/* Find out smallest number of words in doc that will cover
+ * all words in search. */
+{
+int minSpan = BIGNUM;
+int leftoverLetters = 0;
+struct trixWordResult *twr;
+
+/* Set up iHit pointers we use to keep track of our 
+ * search.  Don't want to mess with hit pointers as they
+ * will be used later. */
+for (twr = twrList; twr != NULL; twr = twr->next)
+    twr->iHit = twr->hit;
+
+for (;;)
+    {
+    int minWord = BIGNUM, maxWord=0, span;
+    int curLeftover = 0;
+
+    /* Figure out current span and save as min if it's smallest so far. */
+    for (twr = twrList; twr != NULL; twr = twr->next)
+        {
+	int curWord = twr->iHit->wordIx;
+	if (curWord < minWord)
+	    minWord = curWord;
+	if (curWord > maxWord)
+	    maxWord = curWord;
+	curLeftover += twr->iHit->leftoverLetters;
+	}
+    span = maxWord - minWord;
+    if (span < minSpan)
+	{
+        minSpan = span;
+	leftoverLetters = curLeftover;
+	}
+
+    /* Advance iHit past minWord.  Break if we go outside of our doc or item. */
+    for (twr = twrList; twr != NULL; twr = twr->next)
+        {
+	if (twr->iHit->wordIx == minWord)
+	    {
+	    struct trixHitPos *hit = twr->iHit = twr->iHit->next;
+	    if (hit == NULL || !sameString(hit->itemId, itemId))
+	        {
+		*retSpan = minSpan+1;
+		*retLeftoverLetters = leftoverLetters;
+		return;
+		}
+	    }
+	}
+    }
+} 
+
+static int findWordPos(struct trixWordResult *twrList, char *itemId)
+/* Figure out the first word position.  For multiple words, this
+ * will be the maximimum first word position of all words. 
+ * This assumes that the hits are sorted by word position
+ * within a document. */
+{
+int firstWordPos = 0;
+struct trixWordResult *twr;
+for (twr = twrList; twr != NULL; twr = twr->next)
+    {
+    int pos = twr->hit->wordIx;
+    if (firstWordPos < pos)
+        firstWordPos = pos;
+    }
+return firstWordPos;
+}
+
+static int findOrderedSpan(struct trixWordResult *twrList,
+	char *itemId)
+/* Find out smallest number of words in doc that will cover
+ * all words in search. */
+{
+int minSpan = BIGNUM - 1;  // subtract 1 to accomodate adding 1 below
+struct trixWordResult *twr;
+
+/* Set up iHit pointers we use to keep track of our 
+ * search.  Don't want to mess with hit pointers as they
+ * will be used later. */
+for (twr = twrList; twr != NULL; twr = twr->next)
+    twr->iHit = twr->hit;
+
+for (;;)
+    {
+    int startWord = twrList->iHit->wordIx;
+    int endWord = startWord;
+    int span;
+    struct trixHitPos *hit;
+
+    /* Set up twr->iHit to be closest one past hit of previous twr. */
+    for (twr = twrList->next; twr != NULL; twr = twr->next)
+        {
+	for (hit = twr->iHit; ; hit = hit->next)
+	    {
+	    if (hit == NULL || !sameString(hit->itemId, itemId))
+	        return minSpan + 1;
+	    if (hit->wordIx > endWord)
+	        break;
+	    }
+	twr->iHit = hit;
+	endWord = hit->wordIx;
+	}
+    span = endWord - startWord;
+    if (span < minSpan)
+        minSpan = span;
+
+    /* Advance to next occurence of first word. */
+    hit = twrList->iHit = twrList->iHit->next;
+    if (hit == NULL || !sameString(hit->itemId, itemId))
+	return minSpan+1;
+    }
+}
+
+
+static struct trixSearchResult *findMultipleWordHits(struct trixWordResult *twrList)
+/* Return list of items that are hit by all words. */
+{
+struct trixWordResult *twr;
+struct trixSearchResult *tsList = NULL, *ts;
+
+/* Initially set hit position to start on all words. */
+for (twr = twrList; twr != NULL; twr = twr->next)
+    twr->hit = twr->hitList;
+
+for (;;)
+    {
+    char *itemId = highestId(twrList);
+    if (seekAllToId(twrList, itemId))
+        {
+	AllocVar(ts);
+	ts->itemId = cloneString(itemId);
+	findUnorderedSpan(twrList, itemId, 
+		&ts->unorderedSpan, &ts->leftoverLetters);
+	ts->orderedSpan = findOrderedSpan(twrList, itemId);
+	ts->wordPos = findWordPos(twrList, itemId);
+	slAddHead(&tsList, ts);
+	}
+    seekAllPastId(twrList, itemId);
+    if (anyTwrDone(twrList))
+        break;
+    }
+slReverse(&tsList);
+return tsList;
+}
+
+int trixSearchResultCmp(const void *va, const void *vb)
+/* Compare two trixSearchResult by itemId. */
+{
+const struct trixSearchResult *a = *((struct trixSearchResult **)va);
+const struct trixSearchResult *b = *((struct trixSearchResult **)vb);
+int dif;
+dif = a->unorderedSpan - b->unorderedSpan;
+if (dif == 0)
+   {
+   dif = a->orderedSpan - b->orderedSpan;
+   if (dif == 0)
+       {
+       dif = a->leftoverLetters - b->leftoverLetters;
+       if (dif == 0)
+	   dif = a->wordPos - b->wordPos;
+       }
+   }
+       
+return dif;
+}
+
+struct trixSearchResult *trixSearch(struct trix *trix, int wordCount, char **words,
+	boolean expand)
+/* Return a list of items that match all words.  This will be sorted so that
+ * multiple-word matches where the words are closer to each other and in the
+ * right order will be first.  Do a trixSearchResultFreeList when done. 
+ * If expand is TRUE then this will match not only the input words, but also
+ * additional words that start with the input words. */
+{
+struct trixWordResult *twr, *twrList = NULL;
+struct trixSearchResult *ts, *tsList = NULL;
+int wordIx;
+boolean gotMiss = FALSE;
+
+if (wordCount == 1)
+    {
+    struct trixHitPos *hit;
+    char *lastId = "";
+    twr = twrList = trixSearchWordResults(trix, words[0], expand);
+    if (twr == NULL)
+        return NULL;
+    for (hit = twr->hitList; hit != NULL; hit = hit->next)
+        {
+	if (!sameString(lastId, hit->itemId))
+	    {
+	    lastId = hit->itemId;
+	    AllocVar(ts);
+	    ts->itemId = hit->itemId;	/* Transfer itemId */
+	    hit->itemId = NULL;
+	    ts->orderedSpan = 1;
+	    ts->unorderedSpan = 1;
+	    ts->wordPos = hit->wordIx;
+	    ts->leftoverLetters = hit->leftoverLetters;
+	    slAddHead(&tsList, ts);
+	    }
+	}
+    }
+else
+    {
+    for (wordIx=0; wordIx<wordCount; ++wordIx)
+	{
+	char *searchWord = words[wordIx];
+	twr = trixSearchWordResults(trix, searchWord, expand);
+	if (twr == NULL)
+	    {
+	    gotMiss = TRUE;
+	    break;
+	    }
+	slAddHead(&twrList, twr);
+#ifdef DEBUG
+	trwDump(twr);
+#endif /* DEBUG */
+	}
+    if (!gotMiss)
+	{
+	slReverse(&twrList);
+	tsList = findMultipleWordHits(twrList);
+	}
+    }
+trixWordResultFreeList(&twrList);
+slSort(&tsList, trixSearchResultCmp);
+return tsList;
+}
+
+
diff --git a/gbtools/src/blatSrc/lib/twoBit.c b/gbtools/src/blatSrc/lib/twoBit.c
new file mode 100644
index 0000000..077fb10
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/twoBit.c
@@ -0,0 +1,1235 @@
+/* Copyright (C) 2014 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "hash.h"
+#include "dnaseq.h"
+#include "dnautil.h"
+#include "sig.h"
+#include "localmem.h"
+#include "linefile.h"
+#include "obscure.h"
+#include "bPlusTree.h"
+#include "twoBit.h"
+#include "udc.h"
+#include "net.h"
+#include "portable.h"
+#include <limits.h>
+
+/* following are the wrap functions for the UDC and stdio functoins
+ * that read twoBit files.   All of these are to get around the C compiler
+ * complaining about the automatic cast of a void * to FILE * or 
+ * struct udcFile *.
+ */
+/* first the UDC wrappers */
+static void udcSeekCurWrap(void *file, bits64 offset)
+{
+udcSeekCur((struct udcFile *)file, offset);
+}
+
+static void udcSeekWrap(void *file, bits64 offset)
+{
+udcSeek((struct udcFile *)file, offset);
+}
+
+static void udcMustReadWrap(void *file, void *buf, size_t size)
+{
+udcMustRead((struct udcFile *)file, buf, size);
+}
+
+static void udcFileCloseWrap(void *pFile)
+{
+udcFileClose((struct udcFile **)pFile);
+}
+
+static bits32 udcReadBits32Wrap(void *f, boolean isSwapped)
+{
+return udcReadBits32((struct udcFile *)f, isSwapped);
+}
+
+static boolean udcFastReadStringWrap(void *f, char buf[256])
+{
+return udcFastReadString((struct udcFile *)f, buf);
+}
+
+/* now the stdio wrappers */
+static void seekCurWrap(void *file, bits64 offset)
+{
+fseek((FILE *)file, offset, SEEK_CUR);
+}
+
+static void seekWrap(void *file, bits64 offset)
+{
+fseek((FILE *)file, offset, SEEK_SET);
+}
+
+static void mustReadWrap(void *file, void *buf, size_t size)
+{
+mustRead((FILE *)file, buf, size);
+}
+
+static void fileCloseWrap(void *pFile)
+{
+carefulClose((FILE **)pFile);
+}
+
+static bits32 readBits32Wrap(void *f, boolean isSwapped)
+{
+return readBits32((FILE *)f, isSwapped);
+}
+
+static boolean fastReadStringWrap(void *f, char buf[256])
+{
+return fastReadString((FILE *)f, buf);
+}
+
+static void setFileFuncs( struct twoBitFile *tbf, boolean useUdc)
+/* choose the proper function pointers depending on whether
+ * this open twoBit is using stdio or UDC
+ */
+{
+if (useUdc)
+    {
+    tbf->ourSeekCur = udcSeekCurWrap;
+    tbf->ourSeek = udcSeekWrap;
+    tbf->ourReadBits32 = udcReadBits32Wrap;
+    tbf->ourFastReadString = udcFastReadStringWrap;
+    tbf->ourClose = udcFileCloseWrap;
+    tbf->ourMustRead = udcMustReadWrap;
+    }
+else
+    {
+    tbf->ourSeekCur = seekCurWrap;
+    tbf->ourSeek = seekWrap;
+    tbf->ourReadBits32 = readBits32Wrap;
+    tbf->ourFastReadString = fastReadStringWrap;
+    tbf->ourClose = fileCloseWrap;
+    tbf->ourMustRead = mustReadWrap;
+    }
+}
+
+static int countBlocksOfN(char *s, int size)
+/* Count number of blocks of N's (or n's) in s. */
+{
+int i;
+boolean isN, lastIsN = FALSE;
+char c;
+int blockCount = 0;
+
+for (i=0; i<size; ++i)
+    {
+    c = s[i];
+    isN = (c == 'n' || c == 'N');
+    if (isN && !lastIsN)
+	++blockCount;
+    lastIsN = isN;
+    }
+return blockCount;
+}
+
+static int countBlocksOfLower(char *s, int size)
+/* Count number of blocks of lower case letters. */
+{
+int i;
+boolean isLower, lastIsLower = FALSE;
+int blockCount = 0;
+
+for (i=0; i<size; ++i)
+    {
+    isLower = islower(s[i]);
+    if (isLower && !lastIsLower)
+	++blockCount;
+    lastIsLower = isLower;
+    }
+return blockCount;
+}
+
+static void storeBlocksOfN(char *s, int size, bits32 *starts, bits32 *sizes)
+/* Store starts and sizes of blocks of N's. */
+{
+int i;
+boolean isN, lastIsN = FALSE;
+int startN = 0;
+char c;
+
+for (i=0; i<size; ++i)
+    {
+    c = s[i];
+    isN = (c == 'n' || c == 'N');
+    if (isN)
+        {
+	if (!lastIsN)
+	    startN = i;
+	}
+    else
+        {
+	if (lastIsN)
+	    {
+	    *starts++ = startN;
+	    *sizes++ = i - startN;
+	    }
+	}
+    lastIsN = isN;
+    }
+if (lastIsN)
+    {
+    *starts = startN;
+    *sizes = i - startN;
+    }
+}
+
+static void storeBlocksOfLower(char *s, int size, bits32 *starts, bits32 *sizes)
+/* Store starts and sizes of blocks of lower case letters. */
+{
+int i;
+boolean isLower, lastIsLower = FALSE;
+int startLower = 0;
+
+for (i=0; i<size; ++i)
+    {
+    isLower = islower(s[i]);
+    if (isLower)
+        {
+	if (!lastIsLower)
+	    startLower = i;
+	}
+    else
+        {
+	if (lastIsLower)
+	    {
+	    *starts++ = startLower;
+	    *sizes++ = i - startLower;
+	    }
+	}
+    lastIsLower = isLower;
+    }
+if (lastIsLower)
+    {
+    *starts = startLower;
+    *sizes = i - startLower;
+    }
+}
+
+static int packedSize(int unpackedSize)
+/* Return size when packed, rounding up. */
+{
+return ((unpackedSize + 3) >> 2);
+}
+
+struct twoBit *twoBitFromDnaSeq(struct dnaSeq *seq, boolean doMask)
+/* Convert dnaSeq representation in memory to twoBit representation.
+ * If doMask is true interpret lower-case letters as masked. */
+{
+int ubyteSize = packedSize(seq->size);
+UBYTE *pt;
+struct twoBit *twoBit;
+DNA last4[4];	/* Holds few bases. */
+DNA *dna;
+int i, end;
+
+/* Allocate structure and fill in name. */
+AllocVar(twoBit);
+pt = AllocArray(twoBit->data, ubyteSize);
+twoBit->name = cloneString(seq->name);
+twoBit->size = seq->size;
+
+/* Convert to 4-bases per byte representation. */
+dna = seq->dna;
+end = seq->size - 4;
+for (i=0; i<end; i += 4)
+    {
+    *pt++ = packDna4(dna+i);
+    }
+
+/* Take care of conversion of last few bases. */
+last4[0] = last4[1] = last4[2] = last4[3] = 'T';
+memcpy(last4, dna+i, seq->size-i);
+*pt = packDna4(last4);
+
+/* Deal with blocks of N. */
+twoBit->nBlockCount = countBlocksOfN(dna, seq->size);
+if (twoBit->nBlockCount > 0)
+    {
+    AllocArray(twoBit->nStarts, twoBit->nBlockCount);
+    AllocArray(twoBit->nSizes, twoBit->nBlockCount);
+    storeBlocksOfN(dna, seq->size, twoBit->nStarts, twoBit->nSizes);
+    }
+
+/* Deal with masking */
+if (doMask)
+    {
+    twoBit->maskBlockCount = countBlocksOfLower(dna, seq->size);
+    if (twoBit->maskBlockCount > 0)
+        {
+	AllocArray(twoBit->maskStarts, twoBit->maskBlockCount);
+	AllocArray(twoBit->maskSizes, twoBit->maskBlockCount);
+	storeBlocksOfLower(dna, seq->size, 
+		twoBit->maskStarts, twoBit->maskSizes);
+	}
+    }
+return twoBit;
+}
+
+
+static int twoBitSizeInFile(struct twoBit *twoBit)
+/* Figure out size structure will take in file. */
+{
+return packedSize(twoBit->size) 
+	+ sizeof(twoBit->size)
+	+ sizeof(twoBit->nBlockCount)
+	+ sizeof(twoBit->nStarts[0]) * twoBit->nBlockCount
+	+ sizeof(twoBit->nSizes[0]) * twoBit->nBlockCount
+	+ sizeof(twoBit->maskBlockCount)
+	+ sizeof(twoBit->maskStarts[0]) * twoBit->maskBlockCount
+	+ sizeof(twoBit->maskSizes[0]) * twoBit->maskBlockCount
+	+ sizeof(twoBit->reserved);
+}
+
+void twoBitWriteOne(struct twoBit *twoBit, FILE *f)
+/* Write out one twoBit sequence to binary file. 
+ * Note this does not include the name, which is
+ * stored only in index. */
+{
+writeOne(f, twoBit->size);
+writeOne(f, twoBit->nBlockCount);
+if (twoBit->nBlockCount > 0)
+    {
+    fwrite(twoBit->nStarts, sizeof(twoBit->nStarts[0]), 
+    	twoBit->nBlockCount, f);
+    fwrite(twoBit->nSizes, sizeof(twoBit->nSizes[0]), 
+    	twoBit->nBlockCount, f);
+    }
+writeOne(f, twoBit->maskBlockCount);
+if (twoBit->maskBlockCount > 0)
+    {
+    fwrite(twoBit->maskStarts, sizeof(twoBit->maskStarts[0]), 
+    	twoBit->maskBlockCount, f);
+    fwrite(twoBit->maskSizes, sizeof(twoBit->maskSizes[0]), 
+    	twoBit->maskBlockCount, f);
+    }
+writeOne(f, twoBit->reserved);
+mustWrite(f, twoBit->data, packedSize(twoBit->size));
+}
+
+void twoBitWriteHeader(struct twoBit *twoBitList, FILE *f)
+/* Write out header portion of twoBit file, including initial
+ * index */
+{
+bits32 sig = twoBitSig;
+bits32 version = 0;
+bits32 seqCount = slCount(twoBitList);
+bits32 reserved = 0;
+bits32 offset = 0;
+struct twoBit *twoBit;
+long long counter = 0; /* check for 32 bit overflow */
+
+/* Write out fixed parts of header. */
+writeOne(f, sig);
+writeOne(f, version);
+writeOne(f, seqCount);
+writeOne(f, reserved);
+
+/* Figure out location of first byte past index.
+ * Each index entry contains 4 bytes of offset information
+ * and the name of the sequence, which is variable length. */
+offset = sizeof(sig) + sizeof(version) + sizeof(seqCount) + sizeof(reserved);
+for (twoBit = twoBitList; twoBit != NULL; twoBit = twoBit->next)
+    {
+    int nameLen = strlen(twoBit->name);
+    if (nameLen > 255)
+        errAbort("name %s too long", twoBit->name);
+    offset += nameLen + 1 + sizeof(bits32);
+    }
+
+/* Write out index. */
+for (twoBit = twoBitList; twoBit != NULL; twoBit = twoBit->next)
+    {
+    int size = twoBitSizeInFile(twoBit);
+    writeString(f, twoBit->name);
+    writeOne(f, offset);
+    offset += size;
+    counter += (long long)size;
+    if (counter > UINT_MAX )
+        errAbort("Error in faToTwoBit, index overflow at %s. The 2bit format "
+                "does not support indexes larger than %dGb, \n"
+                "please split up into smaller files.\n", 
+                twoBit->name, UINT_MAX/1000000000);
+    }
+}
+
+void twoBitClose(struct twoBitFile **pTbf)
+/* Free up resources associated with twoBitFile. */
+{
+struct twoBitFile *tbf = *pTbf;
+if (tbf != NULL)
+    {
+    freez(&tbf->fileName);
+    (*tbf->ourClose)(&tbf->f);
+    hashFree(&tbf->hash);
+    /* The indexList is allocated out of the hash's memory pool. */
+    bptFileClose(&tbf->bpt);
+    freez(pTbf);
+    }
+}
+
+boolean twoBitSigRead(struct twoBitFile *tbf, boolean *isSwapped)
+/* read twoBit signature, return FALSE if not good 
+ * set isSwapped to TRUE if twoBit file is byte swapped */
+{
+bits32 sig;
+
+*isSwapped = FALSE;
+(*tbf->ourMustRead)(tbf->f, &sig, sizeof(sig));
+if (sig == twoBitSwapSig)
+    *isSwapped = TRUE;
+else if (sig != twoBitSig)
+    return FALSE;
+
+return TRUE;
+}
+
+static struct twoBitFile *getTbfAndOpen(char *fileName, boolean useUdc)
+{
+struct twoBitFile *tbf;
+
+AllocVar(tbf);
+setFileFuncs(tbf, useUdc);
+
+if (useUdc)
+    tbf->f = udcFileOpen(fileName, NULL);
+else
+    tbf->f = mustOpen(fileName, "rb");
+
+return tbf;
+}
+
+static struct twoBitFile *twoBitOpenReadHeader(char *fileName, boolean useUdc)
+/* Open file, read in header but not index.  
+ * Squawk and die if there is a problem. */
+{
+struct twoBitFile *tbf;
+boolean isSwapped = FALSE;
+
+tbf = getTbfAndOpen(fileName, useUdc);
+
+/* Allocate header verify signature, and read in
+ * the constant-length bits. */
+
+if (!twoBitSigRead(tbf, &isSwapped))
+    errAbort("%s doesn't have a valid twoBitSig", fileName);
+
+tbf->isSwapped = isSwapped;
+tbf->fileName = cloneString(fileName);
+tbf->version = (*tbf->ourReadBits32)(tbf->f, isSwapped);
+if (tbf->version != 0)
+    {
+    errAbort("Can only handle version 0 of this file. This is version %d",
+    	(int)tbf->version);
+    }
+tbf->seqCount = (*tbf->ourReadBits32)(tbf->f, isSwapped);
+tbf->reserved = (*tbf->ourReadBits32)(tbf->f, isSwapped);
+return tbf;
+}
+
+
+struct twoBitFile *twoBitOpen(char *fileName)
+/* Open file, read in header and index.  
+ * Squawk and die if there is a problem. */
+{
+boolean useUdc = FALSE;
+if (hasProtocol(fileName))
+    useUdc = TRUE;
+struct twoBitFile *tbf = twoBitOpenReadHeader(fileName, useUdc);
+struct twoBitIndex *index;
+boolean isSwapped = tbf->isSwapped;
+int i;
+struct hash *hash;
+void *f = tbf->f;
+
+/* Read in index. */
+hash = tbf->hash = hashNew(digitsBaseTwo(tbf->seqCount));
+for (i=0; i<tbf->seqCount; ++i)
+    {
+    char name[256];
+    if (!(*tbf->ourFastReadString)(f, name))
+        errAbort("%s is truncated", fileName);
+    lmAllocVar(hash->lm, index);
+    index->offset = (*tbf->ourReadBits32)(f, isSwapped);
+    hashAddSaveName(hash, name, index, &index->name);
+    slAddHead(&tbf->indexList, index);
+    }
+slReverse(&tbf->indexList);
+return tbf;
+}
+
+struct twoBitFile *twoBitOpenExternalBptIndex(char *twoBitName, char *bptName)
+/* Open file, read in header, but not regular index.  Instead use
+ * bpt index.   Beware if you use this the indexList field will be NULL
+ * as will the hash. */
+{
+struct twoBitFile *tbf = twoBitOpenReadHeader(twoBitName, FALSE);
+tbf->bpt = bptFileOpen(bptName);
+if (tbf->seqCount != tbf->bpt->itemCount)
+    errAbort("%s and %s don't have same number of sequences!", twoBitName, bptName);
+return tbf;
+}
+
+
+static int findGreatestLowerBound(int blockCount, bits32 *pos, 
+	int val)
+/* Find index of greatest element in posArray that is less 
+ * than or equal to val using a binary search. */
+{
+int startIx=0, endIx=blockCount-1, midIx;
+int posVal;
+
+for (;;)
+    {
+    if (startIx == endIx)
+        {
+	posVal = pos[startIx];
+	if (posVal <= val || startIx == 0)
+	    return startIx;
+	else
+	    return startIx-1;
+	}
+    midIx = ((startIx + endIx)>>1);
+    posVal = pos[midIx];
+    if (posVal < val)
+        startIx = midIx+1;
+    else
+        endIx = midIx;
+    }
+}
+
+static void twoBitSeekTo(struct twoBitFile *tbf, char *name)
+/* Seek to start of named record.  Abort if can't find it. */
+{
+if (tbf->bpt)
+    {
+    bits32 offset;
+    if (!bptFileFind(tbf->bpt, name, strlen(name), &offset, sizeof(offset)))
+	 errAbort("%s is not in %s", name, tbf->bpt->fileName);
+    (*tbf->ourSeek)(tbf->f, offset);
+    }
+else
+    {
+    struct twoBitIndex *index = hashFindVal(tbf->hash, name);
+    if (index == NULL)
+	 errAbort("%s is not in %s", name, tbf->fileName);
+    (*tbf->ourSeek)(tbf->f, index->offset);
+    }
+}
+
+static void readBlockCoords(struct twoBitFile *tbf, boolean isSwapped, bits32 *retBlockCount,
+			    bits32 **retBlockStarts, bits32 **retBlockSizes)
+/* Read in blockCount, starts and sizes from file. (Same structure used for
+ * both blocks of N's and masked blocks.) */
+{
+bits32 blkCount = (*tbf->ourReadBits32)(tbf->f, isSwapped);
+*retBlockCount = blkCount;
+if (blkCount == 0)
+    {
+    *retBlockStarts = NULL;
+    *retBlockSizes = NULL;
+    }
+else
+    {
+    bits32 *nStarts, *nSizes;
+    AllocArray(nStarts, blkCount);
+    AllocArray(nSizes, blkCount);
+    (*tbf->ourMustRead)(tbf->f, nStarts, sizeof(nStarts[0]) * blkCount);
+    (*tbf->ourMustRead)(tbf->f, nSizes, sizeof(nSizes[0]) * blkCount);
+    if (isSwapped)
+	{
+	int i;
+	for (i=0; i<blkCount; ++i)
+	    {
+	    nStarts[i] = byteSwap32(nStarts[i]);
+	    nSizes[i] = byteSwap32(nSizes[i]);
+	    }
+	}
+    *retBlockStarts = nStarts;
+    *retBlockSizes = nSizes;
+    }
+}
+
+struct twoBit *twoBitOneFromFile(struct twoBitFile *tbf, char *name)
+/* Get single sequence as two bit. */
+{
+bits32 packByteCount;
+boolean isSwapped = tbf->isSwapped;
+struct twoBit *twoBit;
+AllocVar(twoBit);
+twoBit->name = cloneString(name);
+void *f = tbf->f;
+
+/* Find offset in index and seek to it */
+twoBitSeekTo(tbf, name);
+
+/* Read in seqSize. */
+twoBit->size = (*tbf->ourReadBits32)(f, isSwapped);
+
+/* Read in blocks of N. */
+readBlockCoords(tbf, isSwapped, &(twoBit->nBlockCount),
+		&(twoBit->nStarts), &(twoBit->nSizes));
+
+/* Read in masked blocks. */
+readBlockCoords(tbf, isSwapped, &(twoBit->maskBlockCount),
+		&(twoBit->maskStarts), &(twoBit->maskSizes));
+
+/* Reserved word. */
+twoBit->reserved = (*tbf->ourReadBits32)(f, isSwapped);
+
+/* Read in data. */
+packByteCount = packedSize(twoBit->size);
+twoBit->data = needLargeMem(packByteCount);
+(*tbf->ourMustRead)(f, twoBit->data, packByteCount);
+
+return twoBit;
+}
+
+struct twoBit *twoBitFromFile(char *fileName)
+/* Get twoBit list of all sequences in twoBit file. */
+{
+struct twoBitFile *tbf = twoBitOpen(fileName);
+struct twoBitIndex *index;
+struct twoBit *twoBitList = NULL;
+
+for (index = tbf->indexList; index != NULL; index = index->next)
+    {
+    struct twoBit *twoBit = twoBitOneFromFile(tbf, index->name);
+    slAddHead(&twoBitList, twoBit);
+    }
+
+twoBitClose(&tbf);
+slReverse(&twoBitList);
+return twoBitList;
+}
+
+void twoBitFree(struct twoBit **pTwoBit)
+/* Free up a two bit structure. */
+{
+struct twoBit *twoBit = *pTwoBit;
+if (twoBit != NULL)
+    {
+    freeMem(twoBit->nStarts);
+    freeMem(twoBit->nSizes);
+    freeMem(twoBit->maskStarts);
+    freeMem(twoBit->maskSizes);
+    freeMem(twoBit->data);
+    freez(pTwoBit);
+    }
+}
+
+void twoBitFreeList(struct twoBit **pList)
+/* Free a list of dynamically allocated twoBit's */
+{
+struct twoBit *el, *next;
+
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    twoBitFree(&el);
+    }
+*pList = NULL;
+}
+
+
+struct dnaSeq *twoBitReadSeqFragExt(struct twoBitFile *tbf, char *name,
+	int fragStart, int fragEnd, boolean doMask, int *retFullSize)
+/* Read part of sequence from .2bit file.  To read full
+ * sequence call with start=end=0.  Sequence will be lower
+ * case if doMask is false, mixed case (repeats in lower)
+ * if doMask is true. */
+{
+struct dnaSeq *seq;
+bits32 seqSize;
+bits32 nBlockCount, maskBlockCount;
+bits32 *nStarts = NULL, *nSizes = NULL;
+bits32 *maskStarts = NULL, *maskSizes = NULL;
+boolean isSwapped = tbf->isSwapped;
+void *f = tbf->f;
+int i;
+int packByteCount, packedStart, packedEnd, remainder, midStart, midEnd;
+int outSize;
+UBYTE *packed, *packedAlloc;
+DNA *dna;
+
+/* Find offset in index and seek to it */
+dnaUtilOpen();
+twoBitSeekTo(tbf, name);
+
+/* Read in seqSize. */
+seqSize = (*tbf->ourReadBits32)(f, isSwapped);
+if (fragEnd == 0)
+    fragEnd = seqSize;
+if (fragEnd > seqSize)
+    errAbort("twoBitReadSeqFrag in %s end (%d) >= seqSize (%d)", name, fragEnd, seqSize);
+outSize = fragEnd - fragStart;
+if (outSize < 1)
+    errAbort("twoBitReadSeqFrag in %s start (%d) >= end (%d)", name, fragStart, fragEnd);
+
+/* Read in blocks of N. */
+readBlockCoords(tbf, isSwapped, &nBlockCount, &nStarts, &nSizes);
+
+/* Read in masked blocks. */
+readBlockCoords(tbf, isSwapped, &maskBlockCount, &maskStarts, &maskSizes);
+
+/* Skip over reserved word. */
+(*tbf->ourReadBits32)(f, isSwapped);
+
+/* Allocate dnaSeq, and fill in zero tag at end of sequence. */
+AllocVar(seq);
+if (outSize == seqSize)
+    seq->name = cloneString(name);
+else
+    {
+    char buf[256*2];
+    safef(buf, sizeof(buf), "%s:%d-%d", name, fragStart, fragEnd);
+    seq->name = cloneString(buf);
+    }
+seq->size = outSize;
+dna = seq->dna = needLargeMem(outSize+1);
+seq->dna[outSize] = 0;
+
+
+/* Skip to bits we need and read them in. */
+packedStart = (fragStart>>2);
+packedEnd = ((fragEnd+3)>>2);
+packByteCount = packedEnd - packedStart;
+packed = packedAlloc = needLargeMem(packByteCount);
+(*tbf->ourSeekCur)(f, packedStart);
+(*tbf->ourMustRead)(f, packed, packByteCount);
+
+/* Handle case where everything is in one packed byte */
+if (packByteCount == 1)
+    {
+    int pOff = (packedStart<<2);
+    int pStart = fragStart - pOff;
+    int pEnd = fragEnd - pOff;
+    UBYTE partial = *packed;
+    assert(pEnd <= 4);
+    assert(pStart >= 0);
+    for (i=pStart; i<pEnd; ++i)
+	*dna++ = valToNt[(partial >> (6-i-i)) & 3];
+    }
+else
+    {
+    /* Handle partial first packed byte. */
+    midStart = fragStart;
+    remainder = (fragStart&3);
+    if (remainder > 0)
+	{
+	UBYTE partial = *packed++;
+	int partCount = 4 - remainder;
+	for (i=partCount-1; i>=0; --i)
+	    {
+	    dna[i] = valToNt[partial&3];
+	    partial >>= 2;
+	    }
+	midStart += partCount;
+	dna += partCount;
+	}
+
+    /* Handle middle bytes. */
+    remainder = fragEnd&3;
+    midEnd = fragEnd - remainder;
+    for (i=midStart; i<midEnd; i += 4)
+        {
+	UBYTE b = *packed++;
+	dna[3] = valToNt[b&3];
+	b >>= 2;
+	dna[2] = valToNt[b&3];
+	b >>= 2;
+	dna[1] = valToNt[b&3];
+	b >>= 2;
+	dna[0] = valToNt[b&3];
+	dna += 4;
+	}
+
+    if (remainder >0)
+	{
+	UBYTE part = *packed;
+	part >>= (8-remainder-remainder);
+	for (i=remainder-1; i>=0; --i)
+	    {
+	    dna[i] = valToNt[part&3];
+	    part >>= 2;
+	    }
+	}
+    }
+freez(&packedAlloc);
+
+if (nBlockCount > 0)
+    {
+    int startIx = findGreatestLowerBound(nBlockCount, nStarts, fragStart);
+    for (i=startIx; i<nBlockCount; ++i)
+        {
+	int s = nStarts[i];
+	int e = s + nSizes[i];
+	if (s >= fragEnd)
+	    break;
+	if (s < fragStart)
+	   s = fragStart;
+	if (e > fragEnd)
+	   e = fragEnd;
+	if (s < e)
+	    memset(seq->dna + s - fragStart, 'n', e - s);
+	}
+    }
+
+if (doMask)
+    {
+    toUpperN(seq->dna, seq->size);
+    if (maskBlockCount > 0)
+	{
+	int startIx = findGreatestLowerBound(maskBlockCount, maskStarts, 
+		fragStart);
+	for (i=startIx; i<maskBlockCount; ++i)
+	    {
+	    int s = maskStarts[i];
+	    int e = s + maskSizes[i];
+	    if (s >= fragEnd)
+		break;
+	    if (s < fragStart)
+		s = fragStart;
+	    if (e > fragEnd)
+		e = fragEnd;
+	    if (s < e)
+		toLowerN(seq->dna + s - fragStart, e - s);
+	    }
+	}
+    }
+freez(&nStarts);
+freez(&nSizes);
+freez(&maskStarts);
+freez(&maskSizes);
+if (retFullSize != NULL)
+    *retFullSize = seqSize;
+return seq;
+}
+
+struct dnaSeq *twoBitReadSeqFrag(struct twoBitFile *tbf, char *name,
+	int fragStart, int fragEnd)
+/* Read part of sequence from .2bit file.  To read full
+ * sequence call with start=end=0.  Note that sequence will
+ * be mixed case, with repeats in lower case and rest in
+ * upper case. */
+{
+return twoBitReadSeqFragExt(tbf, name, fragStart, fragEnd, TRUE, NULL);
+}
+
+struct dnaSeq *twoBitReadSeqFragLower(struct twoBitFile *tbf, char *name,
+	int fragStart, int fragEnd)
+/* Same as twoBitReadSeqFrag, but sequence is returned in lower case. */
+{
+return twoBitReadSeqFragExt(tbf, name, fragStart, fragEnd, FALSE, NULL);
+}
+
+int twoBitSeqSize(struct twoBitFile *tbf, char *name)
+/* Return size of sequence in two bit file in bases. */
+{
+twoBitSeekTo(tbf, name);
+return (*tbf->ourReadBits32)(tbf->f, tbf->isSwapped);
+}
+
+long long twoBitTotalSize(struct twoBitFile *tbf)
+/* Return total size of all sequences in two bit file. */
+{
+struct twoBitIndex *index;
+long long totalSize = 0;
+for (index = tbf->indexList; index != NULL; index = index->next)
+    {
+    (*tbf->ourSeek)(tbf->f, index->offset);
+    totalSize += (*tbf->ourReadBits32)(tbf->f, tbf->isSwapped);
+    }
+return totalSize;
+}
+
+struct dnaSeq *twoBitLoadAll(char *spec)
+/* Return list of all sequences matching spec, which is in
+ * the form:
+ *
+ *    file/path/input.2bit[:seqSpec1][,seqSpec2,...]
+ *
+ * where seqSpec is either
+ *     seqName
+ *  or
+ *     seqName:start-end */
+{
+struct twoBitSpec *tbs = twoBitSpecNew(spec);
+struct twoBitFile *tbf = twoBitOpen(tbs->fileName);
+struct dnaSeq *list = NULL;
+if (tbs->seqs != NULL)
+    {
+    struct twoBitSeqSpec *tbss;
+    for (tbss = tbs->seqs; tbss != NULL; tbss = tbss->next)
+        slSafeAddHead(&list, twoBitReadSeqFrag(tbf, tbss->name,
+                                               tbss->start, tbss->end));
+    }
+else
+    {
+    struct twoBitIndex *index;
+    for (index = tbf->indexList; index != NULL; index = index->next)
+	slSafeAddHead(&list, twoBitReadSeqFrag(tbf, index->name, 0, 0));
+    }
+slReverse(&list);
+twoBitClose(&tbf);
+twoBitSpecFree(&tbs);
+return list;
+}
+
+struct slName *twoBitSeqNames(char *fileName)
+/* Get list of all sequences in twoBit file. */
+{
+struct twoBitFile *tbf = twoBitOpen(fileName);
+struct twoBitIndex *index;
+struct slName *name, *list = NULL;
+for (index = tbf->indexList; index != NULL; index = index->next)
+    {
+    name = slNameNew(index->name);
+    slAddHead(&list, name);
+    }
+twoBitClose(&tbf);
+slReverse(&list);
+return list;
+}
+
+boolean twoBitIsFile(char *fileName)
+/* Return TRUE if file is in .2bit format. */
+{
+boolean useUdc = FALSE;
+if (hasProtocol(fileName))
+    useUdc = TRUE;
+else if (!isRegularFile(fileName))
+    return FALSE;
+
+struct twoBitFile *tbf = getTbfAndOpen(fileName, useUdc);
+boolean isSwapped;
+boolean isTwoBit = twoBitSigRead(tbf, &isSwapped);
+
+(*tbf->ourClose)(&tbf->f);
+
+return isTwoBit;
+}
+
+boolean twoBitParseRange(char *rangeSpec, char **retFile, 
+	char **retSeq, int *retStart, int *retEnd)
+/* Parse out something in format
+ *    file/path/name:seqName:start-end
+ * or
+ *    file/path/name:seqName
+ * or
+ *    file/path/name:seqName1,seqName2,seqName3,...
+ * This will destroy the input 'rangeSpec' in the process.  Returns FALSE if
+ * it doesn't fit this format, setting retFile to rangeSpec, and retSet to
+ * null.  If it is the shorter form then start and end will both be returned
+ * as zero, which is ok by twoBitReadSeqFrag.  Any of the return arguments
+ * maybe NULL.
+ */
+{
+char *s, *e;
+int n;
+
+/* default returns */
+if (retFile != NULL)
+    *retFile = rangeSpec;
+if (retSeq != NULL)
+    *retSeq = NULL;
+if (retStart != NULL)
+    *retStart = 0;
+if (retEnd != NULL)
+    *retEnd = 0;
+
+/* start with final name  */
+s = strrchr(rangeSpec, '/');
+if (s == NULL)
+    s = rangeSpec;
+else
+    s++;
+
+/* Grab seqName, zero terminate fileName. */
+s = strchr(s, ':');
+if (s == NULL)
+    return FALSE;
+*s++ = 0;
+if (retSeq != NULL)
+    *retSeq = s;
+
+/* Grab start, zero terminate seqName. */
+s = strchr(s, ':');
+if (s == NULL)
+    return TRUE;  /* no range spec */
+*s++ = 0;
+n = strtol(s, &e, 0);
+if (*e != '-')
+    return FALSE; /* not a valid range */
+if (retStart != NULL)
+    *retStart = n;
+s = e+1;
+
+/* Grab end. */
+n = strtol(s, &e, 0);
+if (*e != '\0')
+    return FALSE; /* not a valid range */
+if (retEnd != NULL)
+    *retEnd = n;
+return TRUE;
+}
+
+boolean twoBitIsRange(char *rangeSpec)
+/* Return TRUE if it looks like a two bit range specifier. */
+{
+char *dupe = cloneString(rangeSpec);
+char *file, *seq;
+int start, end;
+boolean isRange = twoBitParseRange(dupe, &file, &seq, &start, &end);
+if (isRange)
+    isRange = twoBitIsFile(file);
+freeMem(dupe);
+return isRange;
+}
+
+boolean twoBitIsFileOrRange(char *spec)
+/* Return TRUE if it is a two bit file or subrange. */
+{
+return twoBitIsFile(spec) || twoBitIsRange(spec);
+}
+
+static struct twoBitSeqSpec *parseSeqSpec(char *seqSpecStr)
+/* parse one sequence spec */
+{
+boolean isOk = TRUE;
+char *s, *e;
+struct twoBitSeqSpec *seq;
+AllocVar(seq);
+seq->name = cloneString(seqSpecStr);
+
+/* Grab start */
+s = strchr(seq->name, ':');
+if (s == NULL)
+    return seq;  /* no range spec */
+*s++ = 0;
+seq->start = strtol(s, &e, 0);
+if (*e != '-')
+    isOk = FALSE;
+else
+    {
+    /* Grab end */
+    s = e+1;
+    seq->end = strtol(s, &e, 0);
+    if (*e != '\0')
+        isOk = FALSE;
+    }
+if (!isOk || (seq->end < seq->start))
+    errAbort("invalid twoBit sequence specification: \"%s\"", seqSpecStr);
+return seq;
+}
+
+boolean twoBitIsSpec(char *spec)
+/* Return TRUE spec is a valid 2bit spec (see twoBitSpecNew) */
+{
+struct twoBitSpec *tbs = twoBitSpecNew(spec);
+boolean isSpec = (tbs != NULL);
+twoBitSpecFree(&tbs);
+return isSpec;
+}
+
+struct twoBitSpec *twoBitSpecNew(char *specStr)
+/* Parse a .2bit file and sequence spec into an object.
+ * The spec is a string in the form:
+ *
+ *    file/path/input.2bit[:seqSpec1][,seqSpec2,...]
+ *
+ * where seqSpec is either
+ *     seqName
+ *  or
+ *     seqName:start-end
+ *
+ * free result with twoBitSpecFree().
+ */
+{
+char *s, *e;
+int i, numSeqs;
+char **seqSpecs;
+struct twoBitSpec *spec;
+AllocVar(spec);
+spec->fileName = cloneString(specStr);
+
+/* start with final file name  */
+s = strrchr(spec->fileName, '/');
+if (s == NULL)
+    s = spec->fileName;
+else
+    s++;
+
+/* find end of file name and zero-terminate */
+e = strchr(s, ':');
+if (e == NULL)
+    s = NULL; /* just file name */
+else
+    {
+    *e++ = '\0';
+    s = e;
+    }
+
+if (!twoBitIsFile(spec->fileName))
+    {
+    twoBitSpecFree(&spec);
+    return NULL; /* not a 2bit file */
+    }
+
+if (s != NULL)
+    {
+    /* chop seqs at commas and parse */
+    numSeqs = chopString(s, ",", NULL, 0);
+    AllocArray(seqSpecs, numSeqs);
+    chopString(s, ",", seqSpecs, numSeqs);
+    for (i = 0; i< numSeqs; i++)
+        slSafeAddHead(&spec->seqs, parseSeqSpec(seqSpecs[i]));
+    slReverse(&spec->seqs);
+    }
+return spec;
+}
+
+struct twoBitSpec *twoBitSpecNewFile(char *twoBitFile, char *specFile)
+/* parse a file containing a list of specifications for sequences in the
+ * specified twoBit file. Specifications are one per line in forms:
+ *     seqName
+ *  or
+ *     seqName:start-end
+ */
+{
+struct lineFile *lf = lineFileOpen(specFile, TRUE);
+char *line;
+struct twoBitSpec *spec;
+AllocVar(spec);
+spec->fileName = cloneString(twoBitFile);
+while (lineFileNextReal(lf, &line))
+    slSafeAddHead(&spec->seqs, parseSeqSpec(trimSpaces(line)));
+slReverse(&spec->seqs);
+lineFileClose(&lf);
+return spec;
+}
+
+void twoBitSpecFree(struct twoBitSpec **specPtr)
+/* free a twoBitSpec object */
+{
+struct twoBitSpec *spec = *specPtr;
+if (spec != NULL)
+    {
+    struct twoBitSeqSpec *seq;
+    while ((seq = slPopHead(&spec->seqs)) != NULL)
+        {
+        freeMem(seq->name);
+        freeMem(seq);
+        }
+    freeMem(spec->fileName);
+    freeMem(spec);
+    *specPtr = NULL;
+    }
+}
+
+void twoBitOutNBeds(struct twoBitFile *tbf, char *seqName, FILE *outF)
+/* output a series of bed3's that enumerate the number of N's in a sequence*/
+{
+int nBlockCount;
+
+twoBitSeekTo(tbf, seqName);
+
+(*tbf->ourReadBits32)(tbf->f, tbf->isSwapped);
+
+/* Read in blocks of N. */
+nBlockCount = (*tbf->ourReadBits32)(tbf->f, tbf->isSwapped);
+
+if (nBlockCount > 0)
+    {
+    bits32 *nStarts = NULL, *nSizes = NULL;
+    int i;
+
+    AllocArray(nStarts, nBlockCount);
+    AllocArray(nSizes, nBlockCount);
+    (*tbf->ourMustRead)(tbf->f, nStarts, sizeof(nStarts[0]) * nBlockCount);
+    (*tbf->ourMustRead)(tbf->f, nSizes, sizeof(nSizes[0]) * nBlockCount);
+    if (tbf->isSwapped)
+	{
+	for (i=0; i<nBlockCount; ++i)
+	    {
+	    nStarts[i] = byteSwap32(nStarts[i]);
+	    nSizes[i] = byteSwap32(nSizes[i]);
+	    }
+	}
+
+    for (i=0; i<nBlockCount; ++i)
+	{
+	fprintf(outF, "%s\t%d\t%d\n", seqName, nStarts[i], nStarts[i] + nSizes[i]);
+	}
+
+    freez(&nStarts);
+    freez(&nSizes);
+    }
+}
+
+int twoBitSeqSizeNoNs(struct twoBitFile *tbf, char *seqName)
+/* return the size of the sequence, not counting N's*/
+{
+int nBlockCount;
+int size;
+
+twoBitSeekTo(tbf, seqName);
+
+size = (*tbf->ourReadBits32)(tbf->f, tbf->isSwapped);
+
+/* Read in blocks of N. */
+nBlockCount = (*tbf->ourReadBits32)(tbf->f, tbf->isSwapped);
+
+if (nBlockCount > 0)
+    {
+    bits32 *nStarts = NULL, *nSizes = NULL;
+    
+    int i;
+
+    AllocArray(nStarts, nBlockCount);
+    AllocArray(nSizes, nBlockCount);
+    (*tbf->ourMustRead)(tbf->f, nStarts, sizeof(nStarts[0]) * nBlockCount);
+    (*tbf->ourMustRead)(tbf->f, nSizes, sizeof(nSizes[0]) * nBlockCount);
+    if (tbf->isSwapped)
+	{
+	for (i=0; i<nBlockCount; ++i)
+	    {
+	    nStarts[i] = byteSwap32(nStarts[i]);
+	    nSizes[i] = byteSwap32(nSizes[i]);
+	    }
+	}
+
+    for (i=0; i<nBlockCount; ++i)
+	{
+	size -= nSizes[i];
+	}
+
+    freez(&nStarts);
+    freez(&nSizes);
+    }
+
+return(size);
+}
+
+long long twoBitTotalSizeNoN(struct twoBitFile *tbf)
+/* return the size of the all the sequence in file, not counting N's*/
+{
+struct twoBitIndex *index;
+long long totalSize = 0;
+for (index = tbf->indexList; index != NULL; index = index->next)
+    {
+    int size = twoBitSeqSizeNoNs(tbf, index->name);
+    totalSize += size;
+    }
+return totalSize;
+}
+
+boolean twoBitIsSequence(struct twoBitFile *tbf, char *chromName)
+/* Return TRUE if chromName is in 2bit file. */
+{
+return (hashFindVal(tbf->hash, chromName) != NULL);
+}
diff --git a/gbtools/src/blatSrc/lib/udc.c b/gbtools/src/blatSrc/lib/udc.c
new file mode 100644
index 0000000..39fd825
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/udc.c
@@ -0,0 +1,1686 @@
+/* Copyright (C) 2014 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+/* udc - url data cache - a caching system that keeps blocks of data fetched from URLs in
+ * sparse local files for quick use the next time the data is needed. 
+ *
+ * This cache is enormously simplified by there being no local _write_ to the cache,
+ * just reads.  
+ *
+ * The overall strategy of the implementation is to have a root cache directory
+ * with a subdir for each file being cached.  The directory for a single cached file
+ * contains two files - "bitmap" and "sparseData" that contains information on which
+ * parts of the URL are cached and the actual cached data respectively. The subdirectory name
+ * associated with the file is constructed from the URL in a straightforward manner.
+ *     http://genome.ucsc.edu/cgi-bin/hgGateway
+ * gets mapped to:
+ *     rootCacheDir/http/genome.ucsc.edu/cgi-bin/hgGateway/
+ * The URL protocol is the first directory under the root, and the remainder of the
+ * URL, with some necessary escaping, is used to define the rest of the cache directory
+ * structure, with each '/' after the protocol line translating into another directory
+ * level.
+ *    
+ * The bitmap file contains time stamp and size data as well as an array with one bit
+ * for each block of the file that has been fetched.  Currently the block size is 8K. */
+
+#include <sys/file.h>
+#include "common.h"
+#include "hash.h"
+#include "obscure.h"
+#include "bits.h"
+#include "linefile.h"
+#include "portable.h"
+#include "sig.h"
+#include "net.h"
+#include "cheapcgi.h"
+#include "udc.h"
+
+
+#define udcBlockSize (8*1024)
+/* All fetch requests are rounded up to block size. */
+
+#define udcMaxBytesPerRemoteFetch (udcBlockSize * 32)
+/* Very large remote reads are broken down into chunks this size. */
+
+struct connInfo
+/* Socket descriptor and associated info, for keeping net connections open. */
+    {
+    int socket;                 /* Socket descriptor for data connection (or 0). */
+    bits64 offset;		/* Current file offset of socket. */
+    int ctrlSocket;             /* (FTP only) Control socket descriptor or 0. */
+    };
+
+typedef int (*UdcDataCallback)(char *url, bits64 offset, int size, void *buffer,
+			       struct connInfo *ci);
+/* Type for callback function that fetches file data. */
+
+struct udcRemoteFileInfo
+/* Information about a remote file. */
+    {
+    bits64 updateTime;	/* Last update in seconds since 1970 */
+    bits64 size;	/* Remote file size */
+    struct connInfo ci; /* Connection info for open net connection */
+    };
+
+typedef boolean (*UdcInfoCallback)(char *url, struct udcRemoteFileInfo *retInfo);
+/* Type for callback function that fetches file timestamp and size. */
+
+struct udcProtocol
+/* Something to handle a communications protocol like http, https, ftp, local file i/o, etc. */
+    {
+    struct udcProtocol *next;	/* Next in list */
+    UdcDataCallback fetchData;	/* Data fetcher */
+    UdcInfoCallback fetchInfo;	/* Timestamp & size fetcher */
+    };
+
+struct udcFile
+/* A file handle for our caching system. */
+    {
+    struct udcFile *next;	/* Next in list. */
+    char *url;			/* Name of file - includes protocol */
+    char *protocol;		/* The URL up to the first colon.  http: etc. */
+    struct udcProtocol *prot;	/* Protocol specific data and methods. */
+    time_t updateTime;		/* Last modified timestamp. */
+    bits64 size;		/* Size of file. */
+    bits64 offset;		/* Current offset in file. */
+    char *cacheDir;		/* Directory for cached file parts. */
+    char *bitmapFileName;	/* Name of bitmap file. */
+    char *sparseFileName;	/* Name of sparse data file. */
+    int fdSparse;		/* File descriptor for sparse data file. */
+    boolean sparseReadAhead;    /* Read-ahead has something in the buffer */
+    char *sparseReadAheadBuf;   /* Read-ahead buffer, if any */
+    bits64 sparseRAOffset;      /* Read-ahead buffer offset */
+    struct udcBitmap *bits;     /* udcBitMap */
+    bits64 startData;		/* Start of area in file we know to have data. */
+    bits64 endData;		/* End of area in file we know to have data. */
+    bits32 bitmapVersion;	/* Version of associated bitmap we were opened with. */
+    struct connInfo connInfo;   /* Connection info for open net connection. */
+    };
+
+struct udcBitmap
+/* The control structure including the bitmap of blocks that are cached. */
+    {
+    struct udcBitmap *next;	/* Next in list. */
+    bits32 blockSize;		/* Number of bytes per block of file. */
+    bits64 remoteUpdate;	/* Remote last update time. */
+    bits64 fileSize;		/* File size */
+    bits32 version;		/* Version - increments each time cache is stale. */
+    bits64 localUpdate;		/* Time we last fetched new data into cache. */
+    bits64 localAccess;		/* Time we last accessed data. */
+    boolean isSwapped;		/* If true need to swap all bytes on read. */
+    int fd;			/* File descriptor for file with current block. */
+    };
+static char *bitmapName = "bitmap";
+static char *sparseDataName = "sparseData";
+#define udcBitmapHeaderSize (64)
+static int cacheTimeout = 0;
+
+#define MAX_SKIP_TO_SAVE_RECONNECT (udcMaxBytesPerRemoteFetch / 2)
+
+static void readAndIgnore(int sd, bits64 size)
+/* Read size bytes from sd and return. */
+{
+static char *buf = NULL;
+if (buf == NULL)
+    buf = needMem(udcBlockSize);
+bits64 remaining = size, total = 0;
+while (remaining > 0)
+    {
+    bits64 chunkSize = min(remaining, udcBlockSize);
+    ssize_t rd = read(sd, buf, chunkSize);
+    if (rd < 0)
+	errnoAbort("readAndIgnore: error reading socket after %lld bytes", total);
+    remaining -= rd;
+    total += rd;
+    }
+if (total < size)
+    errAbort("readAndIgnore: got EOF at %lld bytes (wanted %lld)", total, size);
+}
+
+static int connInfoGetSocket(struct connInfo *ci, char *url, bits64 offset, int size)
+/* If ci has an open socket and the given offset matches ci's current offset,
+ * reuse ci->socket.  Otherwise close the socket, open a new one, and update ci,
+ * or return -1 if there is an error opening a new one. */
+{
+if (ci != NULL && ci->socket > 0 && ci->offset != offset)
+    {
+    bits64 skipSize = (offset - ci->offset);
+    if (skipSize > 0 && skipSize <= MAX_SKIP_TO_SAVE_RECONNECT)
+	{
+	verbose(2, "!! skipping %lld bytes @%lld to avoid reconnect\n", skipSize, ci->offset);
+	readAndIgnore(ci->socket, skipSize);
+	ci->offset = offset;
+	}
+    else
+	{
+	verbose(2, "Offset mismatch (ci %lld != new %lld), reopening.\n", ci->offset, offset);
+	mustCloseFd(&(ci->socket));
+	if (ci->ctrlSocket > 0)
+	    mustCloseFd(&(ci->ctrlSocket));
+	ZeroVar(ci);
+	}
+    }
+int sd;
+if (ci == NULL || ci->socket <= 0)
+    {
+    char rangeUrl[2048];
+    if (ci == NULL)
+	{
+	safef(rangeUrl, sizeof(rangeUrl), "%s;byterange=%lld-%lld",
+	      url, offset, (offset + size - 1));
+	sd = netUrlOpen(rangeUrl);
+	}
+    else
+	{
+	safef(rangeUrl, sizeof(rangeUrl), "%s;byterange=%lld-", url, offset);
+	sd = ci->socket = netUrlOpenSockets(rangeUrl, &(ci->ctrlSocket));
+	ci->offset = offset;
+	}
+    if (sd < 0)
+	return -1;
+    if (startsWith("http", url))
+	{
+	char *newUrl = NULL;
+	int newSd = 0;
+	if (!netSkipHttpHeaderLinesHandlingRedirect(sd, rangeUrl, &newSd, &newUrl))
+	    return -1;
+	if (newUrl)
+	    {
+	    freeMem(newUrl); 
+	    sd = newSd;
+	    if (ci != NULL)
+		ci->socket = newSd;
+	    }
+	}
+    }
+else
+    sd = ci->socket;
+return sd;
+}
+
+/********* Section for local file protocol **********/
+
+static char *assertLocalUrl(char *url)
+/* Make sure that url is local and return bits past the protocol. */
+{
+if (startsWith("local:", url))
+    url += 6;
+if (url[0] != '/')
+    errAbort("Local urls must start at /");
+if (stringIn("..", url) || stringIn("~", url) || stringIn("//", url) ||
+    stringIn("/./", url) || endsWith("/.", url))
+    {
+    errAbort("relative paths not allowed in local urls (%s)", url);
+    }
+return url;
+}
+
+static int udcDataViaLocal(char *url, bits64 offset, int size, void *buffer, struct connInfo *ci)
+/* Fetch a block of data of given size into buffer using the http: protocol.
+* Returns number of bytes actually read.  Does an errAbort on
+* error.  Typically will be called with size in the 8k - 64k range. */
+{
+/* Need to check time stamp here. */
+verbose(2, "reading remote data - %d bytes at %lld - on %s\n", size, offset, url);
+url = assertLocalUrl(url);
+FILE *f = mustOpen(url, "rb");
+fseek(f, offset, SEEK_SET);
+int sizeRead = fread(buffer, 1, size, f);
+if (ferror(f))
+    {
+    warn("udcDataViaLocal failed to fetch %d bytes at %lld", size, offset);
+    errnoAbort("file %s", url);
+    }
+carefulClose(&f);
+return sizeRead;
+}
+
+static boolean udcInfoViaLocal(char *url, struct udcRemoteFileInfo *retInfo)
+/* Fill in *retTime with last modified time for file specified in url.
+ * Return FALSE if file does not even exist. */
+{
+verbose(2, "checking remote info on %s\n", url);
+url = assertLocalUrl(url);
+struct stat status;
+int ret = stat(url, &status);
+if (ret < 0)
+    return FALSE;
+retInfo->updateTime = status.st_mtime;
+retInfo->size = status.st_size;
+return TRUE;
+}
+
+/********* Section for transparent file protocol **********/
+
+static int udcDataViaTransparent(char *url, bits64 offset, int size, void *buffer,
+				 struct connInfo *ci)
+/* Fetch a block of data of given size into buffer using the http: protocol.
+* Returns number of bytes actually read.  Does an errAbort on
+* error.  Typically will be called with size in the 8k - 64k range. */
+{
+internalErr();	/* Should not get here. */
+return size;
+}
+
+static boolean udcInfoViaTransparent(char *url, struct udcRemoteFileInfo *retInfo)
+/* Fill in *retInfo with last modified time for file specified in url.
+ * Return FALSE if file does not even exist. */
+{
+internalErr();	/* Should not get here. */
+return FALSE;
+}
+
+/********* Section for slow local file protocol - simulates network... **********/
+
+static int udcDataViaSlow(char *url, bits64 offset, int size, void *buffer, struct connInfo *ci)
+/* Fetch a block of data of given size into buffer using the http: protocol.
+* Returns number of bytes actually read.  Does an errAbort on
+* error.  Typically will be called with size in the 8k - 64k range. */
+{
+verbose(2, "slow reading remote data - %d bytes at %lld - on %s\n", size, offset, url);
+sleep1000(500);
+char *fileName = url + 5;  /* skip over 'slow:' */
+FILE *f = mustOpen(fileName, "rb");
+fseek(f, offset, SEEK_SET);
+char *pt = buffer;
+int i, step=1024;
+int sizeRead = 0;
+for (i=0; i<size; i += step)
+    {
+    sleep1000(250);
+    int readChunk = size - i;
+    if (readChunk > step)
+        readChunk = step;
+    int oneReadSize = fread(pt, 1, readChunk, f);
+    verbose(2, "slowly read %d bytes\n", oneReadSize);
+    if (ferror(f))
+	{
+	warn("udcDataViaSlow failed to fetch %d bytes at %lld", size, offset);
+	errnoAbort("file %s", fileName);
+	}
+    pt += step;
+    sizeRead += oneReadSize;
+    }
+carefulClose(&f);
+return sizeRead;
+}
+
+static boolean udcInfoViaSlow(char *url, struct udcRemoteFileInfo *retInfo)
+/* Fill in *retTime with last modified time for file specified in url.
+ * Return FALSE if file does not even exist. */
+{
+char *fileName = url + 5;  /* skip over 'slow:' */
+verbose(2, "slow checking remote info on %s\n", url);
+sleep1000(500);
+struct stat status;
+int ret = stat(fileName, &status);
+if (ret < 0)
+    return FALSE;
+retInfo->updateTime = status.st_mtime;
+retInfo->size = status.st_size;
+return TRUE;
+}
+
+/********* Section for http protocol **********/
+
+int udcDataViaHttpOrFtp(char *url, bits64 offset, int size, void *buffer, struct connInfo *ci)
+/* Fetch a block of data of given size into buffer using url's protocol,
+ * which must be http, https or ftp.  Returns number of bytes actually read.
+ * Does an errAbort on error.
+ * Typically will be called with size in the 8k-64k range. */
+{
+if (startsWith("http://",url) || startsWith("https://",url) || startsWith("ftp://",url))
+    verbose(2, "reading http/https/ftp data - %d bytes at %lld - on %s\n", size, offset, url);
+else
+    errAbort("Invalid protocol in url [%s] in udcDataViaFtp, only http, https, or ftp supported",
+	     url); 
+int sd = connInfoGetSocket(ci, url, offset, size);
+if (sd < 0)
+    errAbort("Can't get data socket for %s", url);
+int rd = 0, total = 0, remaining = size;
+char *buf = (char *)buffer;
+while ((remaining > 0) && ((rd = read(sd, buf, remaining)) > 0))
+    {
+    total += rd;
+    buf += rd;
+    remaining -= rd;
+    }
+if (rd == -1)
+    errnoAbort("udcDataViaHttpOrFtp: error reading socket");
+if (ci == NULL)
+    mustCloseFd(&sd);
+else
+    ci->offset += total;
+return total;
+}
+
+boolean udcInfoViaHttp(char *url, struct udcRemoteFileInfo *retInfo)
+/* Gets size and last modified time of URL
+ * and returns status of HEAD GET. */
+{
+verbose(2, "checking http remote info on %s\n", url);
+struct hash *hash = newHash(0);
+int status = netUrlHead(url, hash);
+if (status != 200) // && status != 302 && status != 301)
+    return FALSE;
+char *sizeString = hashFindValUpperCase(hash, "Content-Length:");
+if (sizeString == NULL)
+    {
+    /* try to get remote file size by an alternate method */
+    long long retSize = netUrlSizeByRangeResponse(url);
+    if (retSize < 0)
+	{
+    	hashFree(&hash);
+	errAbort("No Content-Length: returned in header for %s, can't proceed, sorry", url);
+	}
+    retInfo->size = retSize;
+    }
+else
+    {
+    retInfo->size = atoll(sizeString);
+    }
+
+char *lastModString = hashFindValUpperCase(hash, "Last-Modified:");
+if (lastModString == NULL)
+    {
+    // Date is a poor substitute!  It will always appear that the cache is stale.
+    // But at least we can read files from dropbox.com.
+    lastModString = hashFindValUpperCase(hash, "Date:");
+    if (lastModString == NULL)
+	{
+	hashFree(&hash);
+	errAbort("No Last-Modified: or Date: returned in header for %s, can't proceed, sorry", url);
+	}
+    }
+struct tm tm;
+time_t t;
+// Last-Modified: Wed, 15 Nov 1995 04:58:08 GMT
+// This will always be GMT
+if (strptime(lastModString, "%a, %d %b %Y %H:%M:%S %Z", &tm) == NULL)
+    { /* Handle error */;
+    hashFree(&hash);
+    errAbort("unable to parse last-modified string [%s]", lastModString);
+    }
+t = mktimeFromUtc(&tm);
+if (t == -1)
+    { /* Handle error */;
+    hashFree(&hash);
+    errAbort("mktimeFromUtc failed while converting last-modified string [%s] from UTC time", lastModString);
+    }
+retInfo->updateTime = t;
+
+hashFree(&hash);
+return status;
+}
+
+
+/********* Section for ftp protocol **********/
+
+// fetchData method: See udcDataViaHttpOrFtp above.
+
+boolean udcInfoViaFtp(char *url, struct udcRemoteFileInfo *retInfo)
+/* Gets size and last modified time of FTP URL */
+{
+verbose(2, "checking ftp remote info on %s\n", url);
+long long size = 0;
+time_t t, tUtc;
+struct tm *tm = NULL;
+// TODO: would be nice to add int *retCtrlSocket to netGetFtpInfo so we can stash 
+// in retInfo->connInfo and keep socket open.
+boolean ok = netGetFtpInfo(url, &size, &tUtc);
+if (!ok)
+    return FALSE;
+// Convert UTC to localtime
+tm = localtime(&tUtc);
+t = mktimeFromUtc(tm);
+if (t == -1)
+    { /* Handle error */;
+    errAbort("mktimeFromUtc failed while converting FTP UTC last-modified time %ld to local time", (long) tUtc);
+    }
+retInfo->size = size;
+retInfo->updateTime = t;
+return TRUE;
+}
+
+
+/********* Non-protocol-specific bits **********/
+
+boolean udcFastReadString(struct udcFile *f, char buf[256])
+/* Read a string into buffer, which must be long enough
+ * to hold it.  String is in 'writeString' format. */
+{
+UBYTE bLen;
+int len;
+if (!udcReadOne(f, bLen))
+    return FALSE;
+if ((len = bLen)> 0)
+    udcMustRead(f, buf, len);
+buf[len] = 0;
+return TRUE;
+}
+
+void msbFirstWriteBits64(FILE *f, bits64 x);
+
+static char *fileNameInCacheDir(struct udcFile *file, char *fileName)
+/* Return the name of a file in the cache dir, from the cache root directory on down.
+ * Do a freeMem on this when done. */
+{
+int dirLen = strlen(file->cacheDir);
+int nameLen = strlen(fileName);
+char *path = needMem(dirLen + nameLen + 2);
+memcpy(path, file->cacheDir, dirLen);
+path[dirLen] = '/';
+memcpy(path+dirLen+1, fileName, nameLen);
+return path;
+}
+
+static void udcNewCreateBitmapAndSparse(struct udcFile *file, 
+	bits64 remoteUpdate, bits64 remoteSize, bits32 version)
+/* Create a new bitmap file around the given remoteUpdate time. */
+{
+int fd = mustOpenFd(file->bitmapFileName, O_WRONLY | O_CREAT | O_TRUNC);
+bits32 sig = udcBitmapSig;
+bits32 blockSize = udcBlockSize;
+bits64 reserved64 = 0;
+bits32 reserved32 = 0;
+int blockCount = (remoteSize + udcBlockSize - 1)/udcBlockSize;
+int bitmapSize = bitToByteSize(blockCount);
+
+/* Write out fixed part of header. */
+writeOneFd(fd, sig);
+writeOneFd(fd, blockSize);
+writeOneFd(fd, remoteUpdate);
+writeOneFd(fd, remoteSize);
+writeOneFd(fd, version);
+writeOneFd(fd, reserved32);
+writeOneFd(fd, reserved64);
+writeOneFd(fd, reserved64);
+writeOneFd(fd, reserved64);
+writeOneFd(fd, reserved64);
+long long offset = mustLseek(fd, 0, SEEK_CUR);
+if (offset != udcBitmapHeaderSize)
+    errAbort("offset in fd=%d, f=%s is %lld, not expected udcBitmapHeaderSize %d",
+	     fd, file->bitmapFileName, offset, udcBitmapHeaderSize);
+
+/* Write out initial all-zero bitmap, using sparse-file method: write 0 to final address. */
+unsigned char zero = 0;
+mustLseek(fd, bitmapSize-1, SEEK_CUR);
+mustWriteFd(fd, &zero, 1);
+
+/* Clean up bitmap file and name. */
+mustCloseFd(&fd);
+
+/* Create an empty data file. */
+fd = mustOpenFd(file->sparseFileName, O_WRONLY | O_CREAT | O_TRUNC);
+mustCloseFd(&fd);
+}
+
+static struct udcBitmap *udcBitmapOpen(char *fileName)
+/* Open up a bitmap file and read and verify header.  Return NULL if file doesn't
+ * exist, abort on error. */
+{
+/* Open file, returning NULL if can't. */
+int fd = open(fileName, O_RDWR);
+if (fd < 0)
+    {
+    if (errno == ENOENT)
+	return NULL;
+    else
+	errnoAbort("Can't open(%s, O_RDWR)", fileName);
+    }
+
+/* Get status info from file. */
+struct stat status;
+fstat(fd, &status);
+if (status.st_size < udcBitmapHeaderSize) // check for truncated invalid bitmap files.
+    {
+    close(fd);
+    return NULL;  // returning NULL will cause the fresh creation of bitmap and sparseData files.
+    }  
+
+/* Read signature and decide if byte-swapping is needed. */
+// TODO: maybe buffer the I/O for performance?  Don't read past header - 
+// fd offset needs to point to first data block when we return.
+bits32 magic;
+boolean isSwapped = FALSE;
+mustReadOneFd(fd, magic);
+if (magic != udcBitmapSig)
+    {
+    magic = byteSwap32(magic);
+    isSwapped = TRUE;
+    if (magic != udcBitmapSig)
+       errAbort("%s is not a udcBitmap file", fileName);
+    }
+
+/* Allocate bitmap object, fill it in, and return it. */
+bits32 reserved32;
+bits64 reserved64;
+struct udcBitmap *bits;
+AllocVar(bits);
+bits->blockSize = fdReadBits32(fd, isSwapped);
+bits->remoteUpdate = fdReadBits64(fd, isSwapped);
+bits->fileSize = fdReadBits64(fd, isSwapped);
+bits->version = fdReadBits32(fd, isSwapped);
+reserved32 = fdReadBits32(fd, isSwapped);
+reserved64 = fdReadBits64(fd, isSwapped);
+reserved64 = fdReadBits64(fd, isSwapped);
+reserved64 = fdReadBits64(fd, isSwapped);
+reserved64 = fdReadBits64(fd, isSwapped);
+bits->localUpdate = status.st_mtime;
+bits->localAccess = status.st_atime;
+bits->isSwapped = isSwapped;
+bits->fd = fd;
+
+return bits;
+}
+
+static void udcBitmapClose(struct udcBitmap **pBits)
+/* Free up resources associated with udcBitmap. */
+{
+struct udcBitmap *bits = *pBits;
+if (bits != NULL)
+    {
+    mustCloseFd(&(bits->fd));
+    freez(pBits);
+    }
+}
+
+static struct udcProtocol *udcProtocolNew(char *upToColon)
+/* Build up a new protocol around a string such as "http" or "local" */
+{
+struct udcProtocol *prot;
+AllocVar(prot);
+if (sameString(upToColon, "local"))
+    {
+    prot->fetchData = udcDataViaLocal;
+    prot->fetchInfo = udcInfoViaLocal;
+    }
+else if (sameString(upToColon, "slow"))
+    {
+    prot->fetchData = udcDataViaSlow;
+    prot->fetchInfo = udcInfoViaSlow;
+    }
+else if (sameString(upToColon, "http") || sameString(upToColon, "https"))
+    {
+    prot->fetchData = udcDataViaHttpOrFtp;
+    prot->fetchInfo = udcInfoViaHttp;
+    }
+else if (sameString(upToColon, "ftp"))
+    {
+    prot->fetchData = udcDataViaHttpOrFtp;
+    prot->fetchInfo = udcInfoViaFtp;
+    }
+else if (sameString(upToColon, "transparent"))
+    {
+    prot->fetchData = udcDataViaTransparent;
+    prot->fetchInfo = udcInfoViaTransparent;
+    }
+else
+    {
+    errAbort("Unrecognized protocol %s in udcProtNew", upToColon);
+    }
+return prot;
+}
+
+static void udcProtocolFree(struct udcProtocol **pProt)
+/* Free up protocol resources. */
+{
+freez(pProt);
+}
+
+static void setInitialCachedDataBounds(struct udcFile *file, boolean useCacheInfo)
+/* Open up bitmap file and read a little bit of it to see if cache is stale,
+ * and if not to see if the initial part is cached.  Sets the data members
+ * startData, and endData.  If the case is stale it makes fresh empty
+ * cacheDir/sparseData and cacheDir/bitmap files. */
+{
+bits32 version = 0;
+
+/* Get existing bitmap, and if it's stale clean up. */
+struct udcBitmap *bits = udcBitmapOpen(file->bitmapFileName);
+if (bits != NULL)
+    {
+    if (useCacheInfo)
+	{
+	file->size = bits->fileSize;
+	file->updateTime = bits->remoteUpdate;
+	}
+    version = bits->version;
+    if (bits->remoteUpdate != file->updateTime || bits->fileSize != file->size ||
+	!fileExists(file->sparseFileName))
+	{
+	verbose(2, "removing stale version (%lld! = %lld or %lld! = %lld or %s doesn't exist), "
+		"new version %d\n",
+		bits->remoteUpdate, (long long)file->updateTime, bits->fileSize, file->size,
+		file->sparseFileName, version);
+        udcBitmapClose(&bits);
+	remove(file->bitmapFileName);
+	remove(file->sparseFileName);
+	++version;
+	}
+    }
+else
+    verbose(2, "bitmap file %s does not already exist, creating.\n", file->bitmapFileName);
+
+/* If no bitmap, then create one, and also an empty sparse data file. */
+if (bits == NULL)
+    {
+    udcNewCreateBitmapAndSparse(file, file->updateTime, file->size, version);
+    bits = udcBitmapOpen(file->bitmapFileName);
+    if (bits == NULL)
+        errAbort("Unable to open bitmap file %s", file->bitmapFileName);
+    }
+
+file->bitmapVersion = bits->version;
+
+/* Read in a little bit from bitmap while we have it open to see if we have anything cached. */
+if (file->size > 0)
+    {
+    Bits b;
+    off_t wasAt = lseek(bits->fd, 0, SEEK_CUR);
+    mustReadOneFd(bits->fd, b);
+    int endBlock = (file->size + udcBlockSize - 1)/udcBlockSize;
+    if (endBlock > 8)
+        endBlock = 8;
+    int initialCachedBlocks = bitFindClear(&b, 0, endBlock);
+    file->endData = initialCachedBlocks * udcBlockSize;
+    mustLseek(bits->fd, wasAt, SEEK_SET);
+    } 
+
+file->bits = bits;
+
+}
+
+static boolean qEscaped(char c)
+/* Returns TRUE if character needs to be escaped in q-encoding. */
+{
+if (isalnum(c))
+    return c == 'Q';
+else
+    return c != '_' && c != '-' && c != '/' && c != '.';
+}
+
+static char *qEncode(char *input)
+/* Do a simple encoding to convert input string into "normal" characters.
+ * Abnormal letters, and '!' get converted into Q followed by two hexadecimal digits. */
+{
+/* First go through and figure out encoded size. */
+int size = 0;
+char *s, *d, c;
+s = input;
+while ((c = *s++) != 0)
+    {
+    if (qEscaped(c))
+	size += 3;
+    else
+	size += 1;
+    }
+
+/* Allocate and fill in output. */
+char *output = needMem(size+1);
+s = input;
+d = output;
+while ((c = *s++) != 0)
+    {
+    if (qEscaped(c))
+        {
+	sprintf(d, "Q%02X", (unsigned)c);
+	d += 3;
+	}
+    else
+        *d++ = c;
+    }
+return output;
+}
+
+void udcParseUrlFull(char *url, char **retProtocol, char **retAfterProtocol, char **retColon,
+		     char **retAuth)
+/* Parse the URL into components that udc treats separately.
+ * *retAfterProtocol is Q-encoded to keep special chars out of filenames.  
+ * Free all *ret's except *retColon when done. */
+{
+char *protocol, *afterProtocol;
+char *colon = strchr(url, ':');
+if (!colon)
+    {
+    *retColon = NULL;
+    return;
+    }
+int colonPos = colon - url;
+protocol = cloneStringZ(url, colonPos);
+afterProtocol = url + colonPos + 1;
+while (afterProtocol[0] == '/')
+   afterProtocol += 1;
+char *userPwd = strchr(afterProtocol, '@');
+if (userPwd)
+    {
+    if (retAuth)
+	{
+	char auth[1024];
+	safencpy(auth, sizeof(auth), afterProtocol, userPwd+1-afterProtocol);
+	*retAuth = qEncode(auth);
+	}
+    char *afterHost = strchr(afterProtocol, '/');
+    if (!afterHost)
+	{
+	afterHost = afterProtocol+strlen(afterProtocol);
+	}
+    if (userPwd < afterHost)
+	afterProtocol = userPwd + 1;
+    }
+else if (retAuth)
+    *retAuth = NULL;
+afterProtocol = qEncode(afterProtocol);
+*retProtocol = protocol;
+*retAfterProtocol = afterProtocol;
+*retColon = colon;
+}
+
+void udcParseUrl(char *url, char **retProtocol, char **retAfterProtocol, char **retColon)
+/* Parse the URL into components that udc treats separately.
+ * *retAfterProtocol is Q-encoded to keep special chars out of filenames.  
+ * Free  *retProtocol and *retAfterProtocol but not *retColon when done. */
+{
+udcParseUrlFull(url, retProtocol, retAfterProtocol, retColon, NULL);
+}
+
+void udcPathAndFileNames(struct udcFile *file, char *cacheDir, char *protocol, char *afterProtocol)
+/* Initialize udcFile path and names */
+{
+int len = strlen(cacheDir) + 1 + strlen(protocol) + 1 + strlen(afterProtocol) + 1;
+file->cacheDir = needMem(len);
+safef(file->cacheDir, len, "%s/%s/%s", cacheDir, protocol, afterProtocol);
+
+/* Create file names for bitmap and data portions. */
+file->bitmapFileName = fileNameInCacheDir(file, bitmapName);
+file->sparseFileName = fileNameInCacheDir(file, sparseDataName);
+}
+
+static long long int udcSizeAndModTimeFromBitmap(char *bitmapFileName, time_t *retTime)
+/* Look up the file size from the local cache bitmap file, or -1 if there
+ * is no cache for url. If retTime is non-null, store the remote update time in it. */
+{
+long long int ret = -1;
+struct udcBitmap *bits = udcBitmapOpen(bitmapFileName);
+if (bits != NULL)
+    {
+    ret = bits->fileSize;
+    if (retTime)
+	*retTime = bits->remoteUpdate;
+    }
+udcBitmapClose(&bits);
+return ret;
+}
+
+struct udcFile *udcFileMayOpen(char *url, char *cacheDir)
+/* Open up a cached file. cacheDir may be null in which case udcDefaultDir() will be
+ * used.  Return NULL if file doesn't exist. */
+{
+if (cacheDir == NULL)
+    cacheDir = udcDefaultDir();
+verbose(2, "udcfileOpen(%s, %s)\n", url, cacheDir);
+/* Parse out protocol.  Make it "transparent" if none specified. */
+char *protocol = NULL, *afterProtocol = NULL, *colon;
+boolean isTransparent = FALSE;
+udcParseUrl(url, &protocol, &afterProtocol, &colon);
+if (!colon)
+    {
+    freeMem(protocol);
+    protocol = cloneString("transparent");
+    freeMem(afterProtocol);
+    afterProtocol = cloneString(url);
+    isTransparent = TRUE;
+    }
+struct udcProtocol *prot;
+prot = udcProtocolNew(protocol);
+
+/* Figure out if anything exists. */
+boolean useCacheInfo = FALSE;
+struct udcRemoteFileInfo info;
+ZeroVar(&info);
+if (!isTransparent)
+    {
+    useCacheInfo = (udcCacheAge(url, cacheDir) < udcCacheTimeout());
+    if (!useCacheInfo)
+	{
+	if (!prot->fetchInfo(url, &info))
+	    {
+	    udcProtocolFree(&prot);
+	    freeMem(protocol);
+	    freeMem(afterProtocol);
+	    return NULL;
+	    }
+	}
+    }
+
+/* Allocate file object and start filling it in. */
+struct udcFile *file;
+AllocVar(file);
+file->url = cloneString(url);
+file->protocol = protocol;
+file->prot = prot;
+if (isTransparent)
+    {
+    /* If transparent dummy up things so that the "sparse" file pointer is actually
+     * the file itself, which appears to be completely loaded in cache. */
+    int fd = file->fdSparse = mustOpenFd(url, O_RDONLY);
+    struct stat status;
+    fstat(fd, &status);
+    file->startData = 0;
+    file->endData = file->size = status.st_size;
+    }
+else
+    {
+    udcPathAndFileNames(file, cacheDir, protocol, afterProtocol);
+    if (!useCacheInfo)
+	{
+	file->updateTime = info.updateTime;
+	file->size = info.size;
+	memcpy(&(file->connInfo), &(info.ci), sizeof(struct connInfo));
+	// update cache file mod times, so if we're caching we won't do this again
+	// until the timeout has expired again:
+	if (udcCacheTimeout() > 0 && fileExists(file->bitmapFileName))
+	    (void)maybeTouchFile(file->bitmapFileName);
+	}
+
+    /* Make directory. */
+    makeDirsOnPath(file->cacheDir);
+
+    /* Figure out a little bit about the extent of the good cached data if any. Open bits bitmap. */
+    setInitialCachedDataBounds(file, useCacheInfo);
+
+    file->fdSparse = mustOpenFd(file->sparseFileName, O_RDWR);
+
+    }
+freeMem(afterProtocol);
+return file;
+}
+
+struct udcFile *udcFileOpen(char *url, char *cacheDir)
+/* Open up a cached file.  cacheDir may be null in which case udcDefaultDir() will be
+ * used.  Abort if if file doesn't exist. */
+{
+struct udcFile *udcFile = udcFileMayOpen(url, cacheDir);
+if (udcFile == NULL)
+    errAbort("Couldn't open %s", url);
+return udcFile;
+}
+
+
+struct slName *udcFileCacheFiles(char *url, char *cacheDir)
+/* Return low-level list of files used in cache. */
+{
+char *protocol, *afterProtocol, *colon;
+struct udcFile *file;
+udcParseUrl(url, &protocol, &afterProtocol, &colon);
+if (colon == NULL)
+    return NULL;
+AllocVar(file);
+udcPathAndFileNames(file, cacheDir, protocol, afterProtocol);
+struct slName *list = NULL;
+slAddHead(&list, slNameNew(file->bitmapFileName));
+slAddHead(&list, slNameNew(file->sparseFileName));
+slReverse(&list);
+freeMem(file->cacheDir);
+freeMem(file->bitmapFileName);
+freeMem(file->sparseFileName);
+freeMem(file);
+freeMem(protocol);
+freeMem(afterProtocol);
+return list;
+}
+
+void udcFileClose(struct udcFile **pFile)
+/* Close down cached file. */
+{
+struct udcFile *file = *pFile;
+if (file != NULL)
+    {
+    if (file->connInfo.socket != 0)
+	mustCloseFd(&(file->connInfo.socket));
+    if (file->connInfo.ctrlSocket != 0)
+	mustCloseFd(&(file->connInfo.ctrlSocket));
+    freeMem(file->url);
+    freeMem(file->protocol);
+    udcProtocolFree(&file->prot);
+    freeMem(file->cacheDir);
+    freeMem(file->bitmapFileName);
+    freeMem(file->sparseFileName);
+    freeMem(file->sparseReadAheadBuf);
+    mustCloseFd(&(file->fdSparse));
+    udcBitmapClose(&file->bits);
+    }
+freez(pFile);
+}
+
+static void qDecode(const char *input, char *buf, size_t size)
+/* Reverse the qEncode performed on afterProcotol above into buf or abort. */
+{
+safecpy(buf, size, input);
+char c, *r = buf, *w = buf;
+while ((c = *r++) != '\0')
+    {
+    if (c == 'Q')
+	{
+	int q;
+	if (sscanf(r, "%02X", &q))
+	    {
+	    *w++ = (char)q;
+	    r += 2;
+	    }
+	else
+	    errAbort("qDecode: input \"%s\" does not appear to be properly formatted "
+		     "starting at \"%s\"", input, r);
+	}
+    else
+	*w++ = c;
+    }
+*w = '\0';
+}
+
+char *udcPathToUrl(const char *path, char *buf, size_t size, char *cacheDir)
+/* Translate path into an URL, store in buf, return pointer to buf if successful
+ * and NULL if not. */
+{
+if (cacheDir == NULL)
+    cacheDir = udcDefaultDir();
+int offset = 0;
+if (startsWith(cacheDir, (char *)path))
+    offset = strlen(cacheDir);
+if (path[offset] == '/')
+    offset++;
+char protocol[16];
+strncpy(protocol, path+offset, sizeof(protocol));
+protocol[ArraySize(protocol)-1] = '\0';
+char *p = strchr(protocol, '/');
+if (p == NULL)
+    {
+    errAbort("unable to parse protocol (first non-'%s' directory) out of path '%s'\n",
+	     cacheDir, path);
+    return NULL;
+    }
+*p++ = '\0';
+char afterProtocol[4096];
+qDecode(path+1+strlen(protocol)+1, afterProtocol, sizeof(afterProtocol));
+safef(buf, size, "%s://%s", protocol, afterProtocol);
+return buf;
+}
+
+long long int udcSizeFromCache(char *url, char *cacheDir)
+/* Look up the file size from the local cache bitmap file, or -1 if there
+ * is no cache for url. */
+{
+long long int ret = -1;
+if (cacheDir == NULL)
+    cacheDir = udcDefaultDir();
+struct slName *sl, *slList = udcFileCacheFiles(url, cacheDir);
+for (sl = slList;  sl != NULL;  sl = sl->next)
+    if (endsWith(sl->name, bitmapName))
+	{
+	ret = udcSizeAndModTimeFromBitmap(sl->name, NULL);
+	break;
+	}
+slNameFreeList(&slList);
+return ret;
+}
+
+unsigned long udcCacheAge(char *url, char *cacheDir)
+/* Return the age in seconds of the oldest cache file.  If a cache file is
+ * missing, return the current time (seconds since the epoch). */
+{
+unsigned long now = clock1(), oldestTime = now;
+if (cacheDir == NULL)
+    cacheDir = udcDefaultDir();
+struct slName *sl, *slList = udcFileCacheFiles(url, cacheDir);
+if (slList == NULL)
+    return now;
+for (sl = slList;  sl != NULL;  sl = sl->next)
+    if (endsWith(sl->name, bitmapName))
+	{
+	if (fileExists(sl->name))
+	    oldestTime = min(fileModTime(sl->name), oldestTime);
+	else
+	    return now;
+	}
+return (now - oldestTime);
+}
+
+static void readBitsIntoBuf(int fd, int headerSize, int bitStart, int bitEnd,
+	Bits **retBits, int *retPartOffset)
+/* Do some bit-to-byte offset conversions and read in all the bytes that
+ * have information in the bits we're interested in. */
+{
+int byteStart = bitStart/8;
+int byteEnd = bitToByteSize(bitEnd);
+int byteSize = byteEnd - byteStart;
+Bits *bits = needLargeMem(byteSize);
+mustLseek(fd, headerSize + byteStart, SEEK_SET);
+mustReadFd(fd, bits, byteSize);
+*retBits = bits;
+*retPartOffset = byteStart*8;
+}
+
+static boolean allBitsSetInFile(int bitStart, int bitEnd, int partOffset, Bits *bits)
+/* Return TRUE if all bits in file between start and end are set. */
+{
+int partBitStart = bitStart - partOffset;
+int partBitEnd = bitEnd - partOffset;
+int nextClearBit = bitFindClear(bits, partBitStart, partBitEnd);
+boolean allSet = (nextClearBit >= partBitEnd);
+return allSet;
+}
+
+// For tests/udcTest.c debugging: not declared in udc.h, but not static either:
+boolean udcCheckCacheBits(struct udcFile *file, int startBlock, int endBlock)
+/* Warn and return TRUE if any bit in (startBlock,endBlock] is not set. */
+{
+boolean gotUnset = FALSE;
+struct udcBitmap *bitmap = udcBitmapOpen(file->bitmapFileName);
+int partOffset;
+Bits *bits;
+readBitsIntoBuf(bitmap->fd, udcBitmapHeaderSize, startBlock, endBlock, &bits, &partOffset);
+
+int partBitStart = startBlock - partOffset;
+int partBitEnd = endBlock - partOffset;
+int nextClearBit = bitFindClear(bits, partBitStart, partBitEnd);
+while (nextClearBit < partBitEnd)
+    {
+    int clearBlock = nextClearBit + partOffset;
+    warn("... udcFile 0x%04lx: bit for block %d (%lld..%lld] is not set",
+	 (unsigned long)file, clearBlock,
+	 ((long long)clearBlock * udcBlockSize), (((long long)clearBlock+1) * udcBlockSize));
+    gotUnset = TRUE;
+    int nextSetBit = bitFindSet(bits, nextClearBit, partBitEnd);
+    nextClearBit = bitFindClear(bits, nextSetBit, partBitEnd);
+    }
+return gotUnset;
+}
+
+static void fetchMissingBlocks(struct udcFile *file, struct udcBitmap *bits, 
+	int startBlock, int blockCount, int blockSize)
+/* Fetch missing blocks from remote and put them into file.  errAbort if trouble. */
+{
+bits64 startPos = (bits64)startBlock * blockSize;
+bits64 endPos = startPos + (bits64)blockCount * blockSize;
+if (endPos > file->size)
+    endPos = file->size;
+if (endPos > startPos)
+    {
+    bits64 readSize = endPos - startPos;
+    void *buf = needLargeMem(readSize);
+    
+    int actualSize = file->prot->fetchData(file->url, startPos, readSize, buf, &(file->connInfo));
+    if (actualSize != readSize)
+	errAbort("unable to fetch %lld bytes from %s @%lld (got %d bytes)",
+		 readSize, file->url, startPos, actualSize);
+    mustLseek(file->fdSparse, startPos, SEEK_SET);
+    mustWriteFd(file->fdSparse, buf, readSize);
+    freez(&buf);
+    }
+}
+
+static boolean fetchMissingBits(struct udcFile *file, struct udcBitmap *bits,
+	bits64 start, bits64 end, bits64 *retFetchedStart, bits64 *retFetchedEnd)
+/* Scan through relevant parts of bitmap, fetching blocks we don't already have. */
+{
+/* Fetch relevant part of bitmap into memory */
+int partOffset;
+Bits *b;
+int startBlock = start / bits->blockSize;
+int endBlock = (end + bits->blockSize - 1) / bits->blockSize;
+readBitsIntoBuf(bits->fd, udcBitmapHeaderSize, startBlock, endBlock, &b, &partOffset);
+if (allBitsSetInFile(startBlock, endBlock, partOffset, b))
+    {  // it is already in the cache
+    freeMem(b);
+    return TRUE;
+    }
+
+/* Loop around first skipping set bits, then fetching clear bits. */
+boolean dirty = FALSE;
+int s = startBlock - partOffset;
+int e = endBlock - partOffset;
+for (;;)
+    {
+    int nextClearBit = bitFindClear(b, s, e);
+    if (nextClearBit >= e)
+        break;
+    int nextSetBit = bitFindSet(b, nextClearBit, e);
+    int clearSize =  nextSetBit - nextClearBit;
+
+    fetchMissingBlocks(file, bits, nextClearBit + partOffset, clearSize, bits->blockSize);
+    bitSetRange(b, nextClearBit, clearSize);
+
+    dirty = TRUE;
+    if (nextSetBit >= e)
+        break;
+    s = nextSetBit;
+    }
+
+if (dirty)
+    {
+    /* Update bitmap on disk.... */
+    int byteStart = startBlock/8;
+    int byteEnd = bitToByteSize(endBlock);
+    int byteSize = byteEnd - byteStart;
+    mustLseek(bits->fd, byteStart + udcBitmapHeaderSize, SEEK_SET);
+    mustWriteFd(bits->fd, b, byteSize);
+    }
+
+freeMem(b);
+*retFetchedStart = startBlock * bits->blockSize;
+*retFetchedEnd = endBlock * bits->blockSize;
+return FALSE;
+}
+
+static boolean rangeIntersectOrTouch64(bits64 start1, bits64 end1, bits64 start2, bits64 end2)
+/* Return true if two 64-bit ranges intersect or touch. */
+{  // cannot use the version of this function that is in common.c since it only handles integers.
+bits64 s = max(start1,start2);
+bits64 e = min(end1,end2);
+return e >= s;
+}
+
+
+static void udcFetchMissing(struct udcFile *file, struct udcBitmap *bits, bits64 start, bits64 end)
+/* Fetch missing pieces of data from file */
+{
+/* Call lower level routine fetch remote data that is not already here. */
+bits64 fetchedStart, fetchedEnd;
+if (fetchMissingBits(file, bits, start, end, &fetchedStart, &fetchedEnd))
+    return;
+
+/* Update file startData/endData members to include new data (and old as well if
+ * the new data overlaps the old). */
+if (rangeIntersectOrTouch64(file->startData, file->endData, fetchedStart, fetchedEnd))
+    {
+    if (fetchedStart > file->startData)
+        fetchedStart = file->startData;
+    if (fetchedEnd < file->endData)
+        fetchedEnd = file->endData;
+    }
+file->startData = fetchedStart;
+file->endData = fetchedEnd;
+}
+
+static boolean udcCachePreload(struct udcFile *file, bits64 offset, bits64 size)
+/* Make sure that given data is in cache - fetching it remotely if need be. 
+ * Return TRUE on success. */
+{
+boolean ok = TRUE;
+/* We'll break this operation into blocks of a reasonable size to allow
+ * other processes to get cache access, since we have to lock the cache files. */
+bits64 s,e, endPos=offset+size;
+for (s = offset; s < endPos; s = e)
+    {
+    /* Figure out bounds of this section. */
+    e = s + udcMaxBytesPerRemoteFetch;
+    if (e > endPos)
+	e = endPos;
+
+    struct udcBitmap *bits = file->bits;
+    if (bits->version == file->bitmapVersion)
+	{
+        udcFetchMissing(file, bits, s, e);
+	}
+    else
+	{
+	ok = FALSE;
+	verbose(2, "udcCachePreload version check failed %d vs %d", 
+		bits->version, file->bitmapVersion);
+	}
+    if (!ok)
+        break;
+    }
+return ok;
+}
+
+#define READAHEADBUFSIZE 4096
+bits64 udcRead(struct udcFile *file, void *buf, bits64 size)
+/* Read a block from file.  Return amount actually read. */
+{
+
+/* Figure out region of file we're going to read, and clip it against file size. */
+bits64 start = file->offset;
+if (start > file->size)
+    return 0;
+bits64 end = start + size;
+if (end > file->size)
+    end = file->size;
+size = end - start;
+char *cbuf = buf;
+
+/* use read-ahead buffer if present */
+bits64 bytesRead = 0;
+
+bits64 raStart;
+bits64 raEnd;
+while(TRUE)
+    {
+    if (file->sparseReadAhead)
+	{
+	raStart = file->sparseRAOffset;
+	raEnd = raStart+READAHEADBUFSIZE;
+	if (start >= raStart && start < raEnd)
+	    {
+	    // copy bytes out of rabuf
+	    bits64 endInBuf = min(raEnd, end);
+	    bits64 sizeInBuf = endInBuf - start;
+	    memcpy(cbuf, file->sparseReadAheadBuf + (start-raStart), sizeInBuf);
+	    cbuf += sizeInBuf;
+	    bytesRead += sizeInBuf;
+	    start = raEnd;
+	    size -= sizeInBuf;
+	    file->offset += sizeInBuf;
+	    if (size == 0)
+		break;
+	    }
+	file->sparseReadAhead = FALSE;
+	mustLseek(file->fdSparse, start, SEEK_SET);
+	}
+
+    bits64 saveEnd = end;
+    if (size < READAHEADBUFSIZE)
+	{
+	file->sparseReadAhead = TRUE;
+	if (!file->sparseReadAheadBuf)
+	    file->sparseReadAheadBuf = needMem(READAHEADBUFSIZE);
+	file->sparseRAOffset = start;
+	size = READAHEADBUFSIZE;
+	end = start + size;
+	if (end > file->size)
+	    {
+	    end = file->size;
+	    size = end - start;
+	    }
+	}
+
+
+    /* If we're outside of the window of file we already know is good, then have to
+     * consult cache on disk, and maybe even fetch data remotely! */
+    if (start < file->startData || end > file->endData)
+	{
+
+	if (!udcCachePreload(file, start, size))
+	    {
+	    verbose(2, "udcCachePreload failed");
+	    bytesRead = 0;
+	    break;
+	    }
+
+	/* Currently only need fseek here.  Would be safer, but possibly
+	 * slower to move fseek so it is always executed in front of read, in
+	 * case other code is moving around file pointer. */
+
+	mustLseek(file->fdSparse, start, SEEK_SET);
+	}
+
+    if (file->sparseReadAhead)
+	{
+	mustReadFd(file->fdSparse, file->sparseReadAheadBuf, size);
+	end = saveEnd;
+	size = end - start;
+	}
+    else
+	{
+	mustReadFd(file->fdSparse, cbuf, size);
+	file->offset += size;
+	bytesRead += size;
+	break;
+	}
+    }
+
+return bytesRead;
+}
+
+void udcMustRead(struct udcFile *file, void *buf, bits64 size)
+/* Read a block from file.  Abort if any problem, including EOF before size is read. */
+{
+bits64 sizeRead = udcRead(file, buf, size);
+if (sizeRead < size)
+    errAbort("udc couldn't read %llu bytes from %s, did read %llu", size, file->url, sizeRead);
+}
+
+int udcGetChar(struct udcFile *file)
+/* Get next character from file or die trying. */
+{
+UBYTE b;
+udcMustRead(file, &b, 1);
+return b;
+}
+
+bits64 udcReadBits64(struct udcFile *file, boolean isSwapped)
+/* Read and optionally byte-swap 64 bit entity. */
+{
+bits64 val;
+udcMustRead(file, &val, sizeof(val));
+if (isSwapped)
+    val = byteSwap64(val);
+return val;
+}
+
+bits32 udcReadBits32(struct udcFile *file, boolean isSwapped)
+/* Read and optionally byte-swap 32 bit entity. */
+{
+bits32 val;
+udcMustRead(file, &val, sizeof(val));
+if (isSwapped)
+    val = byteSwap32(val);
+return val;
+}
+
+bits16 udcReadBits16(struct udcFile *file, boolean isSwapped)
+/* Read and optionally byte-swap 16 bit entity. */
+{
+bits16 val;
+udcMustRead(file, &val, sizeof(val));
+if (isSwapped)
+    val = byteSwap16(val);
+return val;
+}
+
+float udcReadFloat(struct udcFile *file, boolean isSwapped)
+/* Read and optionally byte-swap floating point number. */
+{
+float val;
+udcMustRead(file, &val, sizeof(val));
+if (isSwapped)
+    val = byteSwapFloat(val);
+return val;
+}
+
+double udcReadDouble(struct udcFile *file, boolean isSwapped)
+/* Read and optionally byte-swap double-precision floating point number. */
+{
+double val;
+udcMustRead(file, &val, sizeof(val));
+if (isSwapped)
+    val = byteSwapDouble(val);
+return val;
+}
+
+char *udcReadLine(struct udcFile *file)
+/* Fetch next line from udc cache or NULL. */
+{
+char shortBuf[2], *longBuf = NULL, *buf = shortBuf;
+int i, bufSize = sizeof(shortBuf);
+for (i=0; ; ++i)
+    {
+    /* See if need to expand buffer, which is initially on stack, but if it gets big goes into 
+     * heap. */
+    if (i >= bufSize)
+        {
+	int newBufSize = bufSize*2;
+	char *newBuf = needLargeMem(newBufSize);
+	memcpy(newBuf, buf, bufSize);
+	freeMem(longBuf);
+	buf = longBuf = newBuf;
+	bufSize = newBufSize;
+	}
+
+    char c;
+    bits64 sizeRead = udcRead(file, &c, 1);
+    if (sizeRead == 0)
+	return NULL;
+    buf[i] = c;
+    if (c == '\n')
+	{
+	buf[i] = 0;
+	break;
+	}
+    }
+char *retString = cloneString(buf);
+freeMem(longBuf);
+return retString;
+}
+
+char *udcReadStringAndZero(struct udcFile *file)
+/* Read in zero terminated string from file.  Do a freeMem of result when done. */
+{
+char shortBuf[2], *longBuf = NULL, *buf = shortBuf;
+int i, bufSize = sizeof(shortBuf);
+for (i=0; ; ++i)
+    {
+    /* See if need to expand buffer, which is initially on stack, but if it gets big goes into 
+     * heap. */
+    if (i >= bufSize)
+        {
+	int newBufSize = bufSize*2;
+	char *newBuf = needLargeMem(newBufSize);
+	memcpy(newBuf, buf, bufSize);
+	freeMem(longBuf);
+	buf = longBuf = newBuf;
+	bufSize = newBufSize;
+	}
+    char c = udcGetChar(file);
+    buf[i] = c;
+    if (c == 0)
+        break;
+    }
+char *retString = cloneString(buf);
+freeMem(longBuf);
+return retString;
+}
+
+char *udcFileReadAll(char *url, char *cacheDir, size_t maxSize, size_t *retSize)
+/* Read a complete file via UDC. The cacheDir may be null in which case udcDefaultDir()
+ * will be used.  If maxSize is non-zero, check size against maxSize
+ * and abort if it's bigger.  Returns file data (with an extra terminal for the
+ * common case where it's treated as a C string).  If retSize is non-NULL then
+ * returns size of file in *retSize. Do a freeMem or freez of the returned buffer
+ * when done. */
+{
+struct udcFile  *file = udcFileOpen(url, cacheDir);
+size_t size = file->size;
+if (maxSize != 0 && size > maxSize)
+    errAbort("%s is %lld bytes, but maxSize to udcFileReadAll is %lld",
+    	url, (long long)size, (long long)maxSize);
+char *buf = needLargeMem(size+1);
+udcMustRead(file, buf, size);
+buf[size] = 0;	// add trailing zero for string processing
+udcFileClose(&file);
+if (retSize != NULL)
+    *retSize = size;
+return buf;
+}
+
+struct lineFile *udcWrapShortLineFile(char *url, char *cacheDir, size_t maxSize)
+/* Read in entire short (up to maxSize) url into memory and wrap a line file around it.
+ * The cacheDir may be null in which case udcDefaultDir() will be used.  If maxSize
+ * is zero then a default value (currently 64 meg) will be used. */
+{
+if (maxSize == 0) maxSize = 64 * 1024 * 1024;
+char *buf = udcFileReadAll(url, cacheDir, maxSize, NULL);
+return lineFileOnString(url, TRUE, buf);
+}
+
+void udcSeekCur(struct udcFile *file, bits64 offset)
+/* Seek to a particular position in file. */
+{
+file->offset += offset;
+mustLseek(file->fdSparse, offset, SEEK_CUR);
+}
+
+void udcSeek(struct udcFile *file, bits64 offset)
+/* Seek to a particular position in file. */
+{
+file->offset = offset;
+mustLseek(file->fdSparse, offset, SEEK_SET);
+}
+
+bits64 udcTell(struct udcFile *file)
+/* Return current file position. */
+{
+return file->offset;
+}
+
+static long bitRealDataSize(char *fileName)
+/* Return number of real bytes indicated by bitmaps */
+{
+struct udcBitmap *bits = udcBitmapOpen(fileName);
+int blockSize = bits->blockSize;
+long byteSize = 0;
+int blockCount = (bits->fileSize + blockSize - 1)/blockSize;
+if (blockCount > 0)
+    {
+    int bitmapSize = bitToByteSize(blockCount);
+    Bits *b = needLargeMem(bitmapSize);
+    mustReadFd(bits->fd, b, bitmapSize);
+    int bitsSet = bitCountRange(b, 0, blockCount);
+    byteSize = (long)bitsSet*blockSize;
+    freez(&b);
+    }
+udcBitmapClose(&bits);
+return byteSize;
+}
+
+static bits64 rCleanup(time_t deleteTime, boolean testOnly)
+/* Delete any bitmap or sparseData files last accessed before deleteTime */
+{
+struct fileInfo *file, *fileList = listDirX(".", "*", FALSE);
+bits64 results = 0;
+for (file = fileList; file != NULL; file = file->next)
+    {
+    if (file->isDir)
+        {
+	setCurrentDir(file->name);
+	bits64 oneResult = rCleanup(deleteTime, testOnly);
+	setCurrentDir("..");
+	if (oneResult > 0)
+	    {
+	    if (!testOnly)
+		remove(file->name);
+	    results += oneResult;
+	    results += file->size;
+	    }
+	}
+    else if (sameString(file->name, bitmapName))
+        {
+	if (file->size > udcBitmapHeaderSize) /* prevent failure on bitmap files of size 0 or less than header size */
+	    verbose(2, "%ld (%ld) %s/%s\n", bitRealDataSize(file->name), (long)file->size, getCurrentDir(), file->name);
+	if (file->lastAccess < deleteTime)
+	    {
+	    /* Remove all files when get bitmap, so that can ensure they are deleted in 
+	     * right order. */
+	    results += file->size;
+	    if (!testOnly)
+		{
+		remove(bitmapName);
+		remove(sparseDataName);
+		}
+	    }
+	}
+    else if (sameString(file->name, sparseDataName))
+        {
+	if (results > 0)
+	    results += file->size;
+	}
+    }
+return results;
+}
+
+bits64 udcCleanup(char *cacheDir, double maxDays, boolean testOnly)
+/* Remove cached files older than maxDays old. If testOnly is set
+ * no clean up is done, but the size of the files that would be
+ * cleaned up is still. */
+
+{
+time_t maxSeconds = maxDays * 24 * 60 * 60;
+char *curPath = cloneString(getCurrentDir());
+setCurrentDir(cacheDir);
+time_t deleteTime = time(NULL) - maxSeconds;
+bits64 result = rCleanup(deleteTime, testOnly);
+setCurrentDir(curPath);
+return result;
+}
+
+static char *defaultDir = "/tmp/udcCache";
+
+char *udcDefaultDir()
+/* Get default directory for cache */
+{
+return defaultDir;
+}
+
+void udcSetDefaultDir(char *path)
+/* Set default directory for cache */
+{
+defaultDir = cloneString(path);
+}
+
+
+int udcCacheTimeout()
+/* Get cache timeout (if local cache files are newer than this many seconds,
+ * we won't ping the remote server to check the file size and update time). */
+{
+return cacheTimeout;
+}
+
+void udcSetCacheTimeout(int timeout)
+/* Set cache timeout (if local cache files are newer than this many seconds,
+ * we won't ping the remote server to check the file size and update time). */
+{
+cacheTimeout = timeout;
+}
+
+time_t udcUpdateTime(struct udcFile *udc)
+/* return udc->updateTime */
+{
+if (sameString("transparent", udc->protocol))
+    {
+    struct stat status;
+    int ret = stat(udc->url, &status);
+    if (ret < 0)
+	return 0;
+    else
+	return  status.st_mtime;
+    }
+return udc->updateTime;
+}
+
+off_t udcFileSize(char *url)
+/* fetch file size from given URL or local path 
+ * returns -1 if not found. */
+{
+if (udcIsLocal(url))
+    return fileSize(url);
+
+// don't go to the network if we can avoid it
+int cacheSize = udcSizeFromCache(url, NULL);
+if (cacheSize!=-1)
+    return cacheSize;
+
+off_t ret = -1;
+struct udcRemoteFileInfo info;
+
+if (startsWith("http://",url) || startsWith("https://",url))
+    {
+    if (udcInfoViaHttp(url, &info))
+	ret = info.size;
+    }
+else if (startsWith("ftp://",url))
+    {
+    if (udcInfoViaFtp(url, &info))
+	ret = info.size;
+    }
+else
+    errAbort("udc/udcFileSize: invalid protocol for url %s, can only do http/https/ftp", url);
+
+return ret;
+}
+
+boolean udcIsLocal(char *url) 
+/* return true if file is not a http or ftp file, just a local file */
+{
+// copied from above
+char *protocol = NULL, *afterProtocol = NULL, *colon;
+udcParseUrl(url, &protocol, &afterProtocol, &colon);
+freez(&protocol);
+freez(&afterProtocol);
+return colon==NULL;
+}
+
+boolean udcExists(char *url)
+/* return true if a local or remote file exists */
+{
+return udcFileSize(url)!=-1;
+}
diff --git a/gbtools/src/blatSrc/lib/vGfx.c b/gbtools/src/blatSrc/lib/vGfx.c
new file mode 100644
index 0000000..eae0647
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/vGfx.c
@@ -0,0 +1,53 @@
+/* vGfx - interface to polymorphic graphic object
+ * that currently can either be a memory buffer or
+ * a postScript file. */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "vGfx.h"
+
+
+
+/* Most of the implementation of this is in macros in vGfx.h. */
+
+void vgClose(struct vGfx **pVg)
+/* Close down virtual graphics object, and finish writing it to file. */
+{
+struct vGfx *vg = *pVg;
+if (vg != NULL)
+    {
+    vg->close(&vg->data);
+    freez(pVg);
+    }
+}
+
+struct vGfx *vgHalfInit(int width, int height)
+/* Close down virtual graphics object, and finish writing it to file. */
+{
+struct vGfx *vg;
+AllocVar(vg);
+vg->width = width;
+vg->height = height;
+return vg;
+}
+
+int vgFindRgb(struct vGfx *vg, struct rgbColor *rgb)
+/* Find color index corresponding to rgb color. */
+{
+return vgFindColorIx(vg, rgb->r, rgb->g, rgb->b);
+}
+
+Color vgContrastingColor(struct vGfx *vg, int backgroundIx)
+/* Return black or white whichever would be more visible over
+ * background. */
+{
+struct rgbColor c = vgColorIxToRgb(vg, backgroundIx);
+int val = (int)c.r + c.g + c.g + c.b;
+if (val > 512)
+    return MG_BLACK;
+else
+    return MG_WHITE;
+}
+
diff --git a/gbtools/src/blatSrc/lib/vGfxPrivate.h b/gbtools/src/blatSrc/lib/vGfxPrivate.h
new file mode 100644
index 0000000..242e3ea
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/vGfxPrivate.h
@@ -0,0 +1,47 @@
+/* vGfx private - stuff that the implementers of 
+ * a vGfx need to know about, but not the clients. */
+
+/* Copyright (C) 2010 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+
+struct vGfx *vgHalfInit(int width, int height);
+/* Return a partially initialized vGfx structure. 
+ * Generally not called by clients.*/
+
+void vgMgMethods(struct vGfx *vg);
+/* Fill in virtual graphics methods for memory based drawing. */
+
+/* A bunch of things to make the type-casting easier.
+ * This is a price you pay for object oriented
+ * polymorphism in C... */
+
+typedef void (*vg_close)(void **pV);
+typedef void (*vg_dot)(void *v, int x, int y, int colorIx);
+typedef int (*vg_getDot)(void *v, int x, int y);
+typedef void (*vg_box)(void *v, int x, int y, 
+	int width, int height, int colorIx);
+typedef void (*vg_line)(void *v, 
+	int x1, int y1, int x2, int y2, int colorIx);
+typedef void (*vg_text)(void *v, int x, int y, int colorIx, void *font,
+	char *text);
+typedef void (*vg_textRight)(void *v, int x, int y, int width, int height,
+	int colorIx, void *font, char *text);
+typedef void (*vg_textCentered)(void *v, int x, int y, int width, int height,
+	int colorIx, void *font, char *text);
+typedef int (*vg_findColorIx)(void *v, int r, int g, int b);
+typedef struct rgbColor (*vg_colorIxToRgb)(void *v, int colorIx);
+typedef void (*vg_setClip)(void *v, int x, int y, int width, int height);
+typedef void (*vg_setWriteMode)(void *v, unsigned int writeMode);
+typedef void (*vg_unclip)(void *v);
+typedef void (*vg_verticalSmear)(void *v,
+	    int xOff, int yOff, int width, int height, 
+	    Color *dots, boolean zeroClear);
+typedef void (*vg_fillUnder)(void *v, int x1, int y1, 
+	int x2, int y2, int bottom, Color color);
+typedef void (*vg_drawPoly)(void *v, struct gfxPoly *poly, Color color, boolean filled);
+typedef void (*vg_setHint)(void *v, char *hint, char *value);
+typedef char * (*vg_getHint)(void *v, char *hint);
+typedef int (*vg_getFontPixelHeight)(void *v, void *font);
+typedef int (*vg_getFontStringWidth)(void *v, void *font, char *string);
+
diff --git a/gbtools/src/blatSrc/lib/vGif.c b/gbtools/src/blatSrc/lib/vGif.c
new file mode 100644
index 0000000..cc2b3f2
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/vGif.c
@@ -0,0 +1,66 @@
+/* vGif - a virtual graphic object wrapper around
+ * an in-memory buffer destined to become a 
+ * 256-color GIF file. */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "memgfx.h"
+#include "vGfx.h"
+#include "vGfxPrivate.h"
+
+
+#ifndef COLOR32
+
+struct memGif
+/* Something that handles a gif. */
+    {
+    struct memGfx mg;	/* Memory form.  This needs to be first field. */
+    char *fileName;	/* Gif file name. */
+    boolean useTransparency;
+    };
+
+void memGifClose(struct memGif **pG)
+/* Write out and close and free. */
+{
+struct memGif *g = *pG;
+if (g != NULL)
+    {
+    struct memGfx *mg = (struct memGfx *)g;
+    mgSaveGif(mg, g->fileName, g->useTransparency);
+    freez(&g->fileName);
+    mgFree(&mg);
+    *pG = NULL;
+    }
+}
+
+struct vGfx *vgOpenGif(int width, int height, char *fileName, boolean useTransparency)
+/* Open up something that will someday be a PostScript file. */
+{
+struct memGif *gif;
+struct memGfx *mg;
+struct vGfx *vg;
+
+/* Set up virtual graphics with memory methods. */
+vg = vgHalfInit(width, height);
+vgMgMethods(vg);
+vg->close = (vg_close)memGifClose;
+
+/* Get our mg + fileName structure.  We're forcing
+ * inheritence from mg essentially. */
+AllocVar(gif);
+gif->fileName = cloneString(fileName);
+gif->useTransparency = useTransparency;
+
+/* Fill in the mg part of this structure with normal memGfx. */
+mg = mgNew(width, height);
+mgClearPixels(mg);
+gif->mg = *mg;
+freez(&mg);	/* We don't need this copy any more. */
+
+vg->data = gif;
+return vg;
+}
+
+#endif
diff --git a/gbtools/src/blatSrc/lib/vPng.c b/gbtools/src/blatSrc/lib/vPng.c
new file mode 100644
index 0000000..90aaae3
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/vPng.c
@@ -0,0 +1,68 @@
+/* vPng - a virtual graphic object wrapper around an in-memory buffer destined to become a 256-color PNG file. */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+
+#include "common.h"
+#include "memgfx.h"
+#include "vGfx.h"
+#include "vGfxPrivate.h"
+
+
+struct memPng
+/* Something that handles a PNG. */
+    {
+    struct memGfx mg;	/* Memory form.  This needs to be first field. */
+    char *fileName;	/* PNG file name. */
+    boolean useTransparency;   /* Make background color transparent if TRUE. */
+    };
+
+void memPngClose(struct memPng **pG)
+/* Write out and close and free. */
+{
+struct memPng *g = *pG;
+if (g != NULL)
+    {
+    struct memGfx *mg = (struct memGfx *)g;
+    mgSavePng(mg, g->fileName, g->useTransparency);
+    freez(&g->fileName);
+    mgFree(&mg);
+    *pG = NULL;
+    }
+}
+
+struct vGfx *vgOpenPng(int width, int height, char *fileName, boolean useTransparency)
+/* Open up something that will write out a PNG file upon vgClose.  
+ * If useTransparency, then the first color in memgfx's colormap/palette is
+ * assumed to be the image background color, and pixels of that color
+ * are made transparent. */
+{
+struct memPng *png;
+struct memGfx *mg;
+struct vGfx *vg;
+
+/* Set up virtual graphics with memory methods. */
+vg = vgHalfInit(width, height);
+vgMgMethods(vg);
+vg->close = (vg_close)memPngClose;
+
+/* Get our mg + fileName structure.  We're forcing
+ * inheritence from mg essentially. */
+AllocVar(png);
+png->fileName = cloneString(fileName);
+png->useTransparency = useTransparency;
+
+/* Fill in the mg part of this structure with normal memGfx. */
+mg = mgNew(width, height);
+if (png->useTransparency)
+    mgClearPixelsTrans(mg);
+else
+    mgClearPixels(mg);
+png->mg = *mg;
+freez(&mg);	/* We don't need this copy any more. */
+
+vg->data = png;
+return vg;
+}
+
diff --git a/gbtools/src/blatSrc/lib/valgrind.suppress b/gbtools/src/blatSrc/lib/valgrind.suppress
new file mode 100644
index 0000000..44c76fe
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/valgrind.suppress
@@ -0,0 +1,106 @@
+# valgrind uppressions for expected memory leaks from kent/src/lib modules.
+# specify this file to  valgrind with something like:
+#    --suppressions=../lib/valgrind.suppress
+# if you need to create new suppressions, run your program with valgrind using
+# the --gen-suppressions=yes option.  This will interactive prompt you to
+# and output the suppressions that you must edit and add to this file.
+# Name the option and delete lower-level calling context entries so that
+# the last function in the list the the particular library entry point.
+# 
+#  valgrind --tool=memcheck --suppressions=../lib/valgrind.suppress --num-callers=100 --leak-check=full --leak-resolution=high --show-reachable=yes  yourProg yourArgs ...
+#
+{
+   options1
+   Memcheck:Leak
+   fun:malloc
+   fun:defaultAlloc
+   fun:needMem
+   fun:lmInit
+   fun:newHashExt
+   fun:parseOptions
+   fun:optionInit
+}
+{
+   options2
+   Memcheck:Leak
+   fun:malloc
+   fun:defaultAlloc
+   fun:needMem
+   fun:newHashExt
+   fun:parseOptions
+   fun:optionInit
+}
+{
+   options3
+   Memcheck:Leak
+   fun:malloc
+   fun:defaultAlloc
+   fun:needLargeMem
+   fun:needLargeZeroedMem
+   fun:newBlock
+   fun:lmAlloc
+   fun:hashAddN
+   fun:hashAdd
+   fun:parseAnOption
+   fun:parseOptions
+   fun:optionInit
+}
+{
+   options4
+   Memcheck:Leak
+   fun:malloc
+   fun:defaultAlloc
+   fun:needLargeMem
+   fun:needLargeZeroedMem
+   fun:newBlock
+   fun:lmInit
+   fun:newHash
+   fun:parseOptions
+   fun:optionInit
+}
+{
+   options5
+   Memcheck:Leak
+   fun:malloc
+   fun:defaultAlloc
+   fun:needLargeMem
+   fun:needLargeZeroedMem
+   fun:newBlock
+   fun:lmAlloc
+   fun:newHashExt
+   fun:parseOptions
+   fun:optionInit
+}
+{
+   sqlUnsignedArray
+   Memcheck:Leak
+   fun:malloc
+   fun:realloc
+   fun:defaultRealloc
+   fun:needLargeMemResize
+   fun:needLargeZeroedMemResize
+   fun:needMoreMem
+   fun:sqlUnsignedStaticArray
+}
+{
+   sqlSignedArray   
+   Memcheck:Leak
+   fun:malloc
+   fun:realloc
+   fun:defaultRealloc
+   fun:needLargeMemResize
+   fun:needLargeZeroedMemResize
+   fun:needMoreMem
+   fun:sqlSignedStaticArray
+}
+{
+   sqlFloatArray
+   Memcheck:Leak
+   fun:malloc
+   fun:realloc
+   fun:defaultRealloc
+   fun:needLargeMemResize
+   fun:needLargeZeroedMemResize
+   fun:needMoreMem
+   fun:sqlFloatStaticArray
+}
diff --git a/gbtools/src/blatSrc/lib/vcf.c b/gbtools/src/blatSrc/lib/vcf.c
new file mode 100644
index 0000000..cde6810
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/vcf.c
@@ -0,0 +1,1285 @@
+/* VCF: Variant Call Format, version 4.0 / 4.1
+ * http://www.1000genomes.org/wiki/Analysis/Variant%20Call%20Format/vcf-variant-call-format-version-40
+ * http://www.1000genomes.org/wiki/Analysis/Variant%20Call%20Format/vcf-variant-call-format-version-41
+ */
+
+/* Copyright (C) 2014 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "dnautil.h"
+#include "errAbort.h"
+#include <limits.h>
+#include "localmem.h"
+#include "net.h"
+#include "regexHelper.h"
+#include "vcf.h"
+
+/* Reserved but optional INFO keys: */
+const char *vcfInfoAncestralAllele = "AA";
+const char *vcfInfoPerAlleleGtCount = "AC";	// allele count in genotypes, for each ALT allele,
+						// in the same order as listed
+const char *vcfInfoAlleleFrequency = "AF";	// allele frequency for each ALT allele in the same
+						// order as listed: use this when estimated from
+						// primary data, not called genotypes
+const char *vcfInfoNumAlleles = "AN";		// total number of alleles in called genotypes
+const char *vcfInfoBaseQuality = "BQ";		// RMS base quality at this position
+const char *vcfInfoCigar = "CIGAR";		// cigar string describing how to align an
+						// alternate allele to the reference allele
+const char *vcfInfoIsDbSnp = "DB";		// dbSNP membership
+const char *vcfInfoDepth = "DP";		// combined depth across samples, e.g. DP=154
+const char *vcfInfoEnd = "END";			// end position of the variant described in this
+						// record (esp. for CNVs)
+const char *vcfInfoIsHapMap2 = "H2";		// membership in hapmap2
+const char *vcfInfoIsHapMap3 = "H3";		// membership in hapmap3
+const char *vcfInfoIs1000Genomes = "1000G";	// membership in 1000 Genomes
+const char *vcfInfoMappingQuality = "MQ";	// RMS mapping quality, e.g. MQ=52
+const char *vcfInfoMapQual0Count = "MQ0";	// number of MAPQ == 0 reads covering this record
+const char *vcfInfoNumSamples = "NS";		// Number of samples with data
+const char *vcfInfoStrandBias = "SB";		// strand bias at this position
+const char *vcfInfoIsSomatic = "SOMATIC";	// indicates that the record is a somatic mutation,
+						// for cancer genomics
+const char *vcfInfoIsValidated = "VALIDATED";	// validated by follow-up experiment
+
+/* Reserved but optional per-genotype keys: */
+const char *vcfGtGenotype = "GT";	// Integer allele indices separated by "/" (unphased)
+					// or "|" (phased). Allele values are 0 for
+					// reference allele, 1 for the first allele in ALT,
+					// 2 for the second allele in ALT and so on.
+const char *vcfGtDepth = "DP";		// Read depth at this position for this sample
+const char *vcfGtFilter = "FT";		// Analogous to variant's FILTER field
+const char *vcfGtLikelihoods = "GL";	// Three floating point log10-scaled likelihoods for
+					// AA,AB,BB genotypes where A=ref and B=alt;
+					// not applicable if site is not biallelic.
+const char *vcfGtPhred = "PL";		// Phred-scaled genotype likelihoods rounded to closest int
+const char *vcfGtConditionalQual = "GQ";// Conditional genotype quality
+					// i.e. phred quality -10log_10 P(genotype call is wrong,
+					// conditioned on the site's being variant)
+const char *vcfGtHaplotypeQualities = "HQ";	// two phred qualities comma separated
+const char *vcfGtPhaseSet = "PS";	// Set of phased genotypes to which this genotype belongs
+const char *vcfGtPhasingQuality = "PQ";	// Phred-scaled P(alleles ordered wrongly in heterozygote)
+const char *vcfGtExpectedAltAlleleCount = "EC";	// Typically used in association analyses
+
+
+// Make definitions of reserved INFO and genotype keys, in case people take them for
+// granted and don't make ##INFO headers for them:
+static struct vcfInfoDef *vcfSpecInfoDefs = NULL;
+static struct vcfInfoDef *vcfSpecGtFormatDefs = NULL;
+
+static void addInfoDef(struct vcfInfoDef **pList,
+		       const char *key, int fieldCount, enum vcfInfoType type, char *description)
+/* Allocate and initialize an info def and add it to pList. */
+{
+struct vcfInfoDef *def;
+AllocVar(def);
+def->key = (char *)key;
+def->fieldCount = fieldCount;
+def->type = type;
+def->description = description;
+slAddHead(pList, def);
+}
+
+static void initVcfSpecInfoDefs()
+/* Make linked list of INFO defs reserved in the spec. */
+{
+if (vcfSpecInfoDefs != NULL)
+    return;
+addInfoDef(&vcfSpecInfoDefs, vcfInfoAncestralAllele, 1, vcfInfoString, "Ancestral allele");
+addInfoDef(&vcfSpecInfoDefs, vcfInfoPerAlleleGtCount, 1, vcfInfoInteger,
+	   "Allele count in genotypes, for each ALT allele, in the same order as listed");
+addInfoDef(&vcfSpecInfoDefs, vcfInfoAlleleFrequency, -1, vcfInfoFloat,
+	   "Allele frequency for each ALT allele in the same order as listed: "
+	   "use this when estimated from primary data, not called genotypes");
+addInfoDef(&vcfSpecInfoDefs, vcfInfoNumAlleles, 1, vcfInfoInteger,
+	   "Total number of alleles in called genotypes");
+addInfoDef(&vcfSpecInfoDefs, vcfInfoBaseQuality, 1, vcfInfoFloat,
+	   "RMS base quality at this position");
+addInfoDef(&vcfSpecInfoDefs, vcfInfoCigar, 1, vcfInfoString,
+	   "CIGAR string describing how to align an alternate allele to the reference allele");
+addInfoDef(&vcfSpecInfoDefs, vcfInfoIsDbSnp, 0, vcfInfoFlag, "dbSNP membership");
+addInfoDef(&vcfSpecInfoDefs, vcfInfoDepth, 1, vcfInfoString,
+	   "Combined depth across samples, e.g. DP=154");
+addInfoDef(&vcfSpecInfoDefs, vcfInfoEnd, 1, vcfInfoInteger,
+	   "End position of the variant described in this record "
+	   "(especially for structural variants)");
+addInfoDef(&vcfSpecInfoDefs, vcfInfoIsHapMap2, 1, vcfInfoFlag, "Membership in HapMap 2");
+addInfoDef(&vcfSpecInfoDefs, vcfInfoIsHapMap3, 1, vcfInfoFlag, "Membership in HapMap 3");
+addInfoDef(&vcfSpecInfoDefs, vcfInfoIs1000Genomes, 1, vcfInfoFlag, "Membership in 1000 Genomes");
+addInfoDef(&vcfSpecInfoDefs, vcfInfoMappingQuality, 1, vcfInfoFloat,
+	   "RMS mapping quality, e.g. MQ=52");
+addInfoDef(&vcfSpecInfoDefs, vcfInfoMapQual0Count, 1, vcfInfoInteger,
+	   "Number of MAPQ == 0 reads covering this record");
+addInfoDef(&vcfSpecInfoDefs, vcfInfoNumSamples, 1, vcfInfoInteger, "Number of samples with data");
+addInfoDef(&vcfSpecInfoDefs, vcfInfoStrandBias, 1, vcfInfoString, "Strand bias at this position");
+addInfoDef(&vcfSpecInfoDefs, vcfInfoIsSomatic, 1, vcfInfoFlag,
+	   "Indicates that the record is a somatic mutation, for cancer genomics");
+addInfoDef(&vcfSpecInfoDefs, vcfInfoIsValidated, 1, vcfInfoFlag,
+	   "Validated by follow-up experiment");
+}
+
+
+static void initVcfSpecGtFormatDefs()
+/* Make linked list of genotype info defs reserved in spec. */
+{
+if (vcfSpecGtFormatDefs != NULL)
+    return;
+addInfoDef(&vcfSpecGtFormatDefs, vcfGtGenotype, 1, vcfInfoString,
+	   "Integer allele indices separated by \"/\" (unphased) "
+	   "or \"|\" (phased). Allele values are 0 for "
+	   "reference allele, 1 for the first allele in ALT, "
+	   "2 for the second allele in ALT and so on, or \".\" for unknown");
+addInfoDef(&vcfSpecGtFormatDefs, vcfGtDepth, 1, vcfInfoInteger,
+	   "Read depth at this position for this sample");
+addInfoDef(&vcfSpecGtFormatDefs, vcfGtFilter, 1, vcfInfoString,
+	   "PASS to indicate that all filters have been passed, "
+	   "a semi-colon separated list of codes for filters that fail, "
+	   "or \".\" to indicate that filters have not been applied");
+addInfoDef(&vcfSpecGtFormatDefs, vcfGtLikelihoods, -1, vcfInfoFloat,
+	   "Genotype likelihoods comprised of comma separated floating point "
+	   "log10-scaled likelihoods for all possible genotypes given the set "
+	   "of alleles defined in the REF and ALT fields. ");
+addInfoDef(&vcfSpecGtFormatDefs, vcfGtPhred, -1, vcfInfoInteger,
+	   "Phred-scaled genotype likelihoods rounded to the closest integer "
+	   "(and otherwise defined precisely as the genotype likelihoods (GL) field)");
+addInfoDef(&vcfSpecGtFormatDefs, vcfGtConditionalQual, -1, vcfInfoFloat,
+	   "phred-scaled genotype posterior probabilities "
+	   "(and otherwise defined precisely as the genotype likelihoods (GL) field)"
+	   "; intended to store imputed genotype probabilities");
+addInfoDef(&vcfSpecGtFormatDefs, vcfGtHaplotypeQualities, 2, vcfInfoFloat,
+	   "Two comma-separated phred-scaled haplotype qualities");
+addInfoDef(&vcfSpecGtFormatDefs, vcfGtPhaseSet, 1, vcfInfoFloat,
+	   "A set of phased genotypes to which this genotype belongs");
+addInfoDef(&vcfSpecGtFormatDefs, vcfGtPhasingQuality, 1, vcfInfoFloat,
+	   "Phasing quality, the phred-scaled probability that alleles are ordered "
+	   "incorrectly in a heterozygote (against all other members in the phase set)");
+addInfoDef(&vcfSpecGtFormatDefs, vcfGtExpectedAltAlleleCount, 1, vcfInfoFloat,
+	   "Expected alternate allele count (typically used in association analyses)");
+}
+
+static bool vcfFileStopDueToErrors(struct vcfFile *vcff)
+/* determine if we should stop due to the number of errors */
+{
+return vcff->errCnt > vcff->maxErr;
+}
+
+static void vcfFileErr(struct vcfFile *vcff, char *format, ...)
+#if defined(__GNUC__)
+__attribute__((format(printf, 2, 3)))
+#endif
+;
+
+static void vcfFileErr(struct vcfFile *vcff, char *format, ...)
+/* Send error message to errabort stack's warn handler and abort */
+{
+vcff->errCnt++;
+if (vcff->maxErr == VCF_IGNORE_ERRS)
+    return;
+va_list args;
+va_start(args, format);
+char formatPlus[1024];
+if (vcff->lf != NULL)
+    sprintf(formatPlus, "%s:%d: %s", vcff->lf->fileName, vcff->lf->lineIx, format);
+else
+    strcpy(formatPlus, format);
+vaWarn(formatPlus, args);
+va_end(args);
+if (vcfFileStopDueToErrors(vcff))
+    errAbort("VCF: %d parser errors, quitting", vcff->errCnt);
+}
+
+static void *vcfFileAlloc(struct vcfFile *vcff, size_t size)
+/* Use vcff's local mem to allocate memory. */
+{
+return lmAlloc( vcfFileLm(vcff), size);
+}
+
+INLINE char *vcfFileCloneStrZ(struct vcfFile *vcff, char *str, size_t size)
+/* Use vcff's local mem to allocate memory for a string and copy it. */
+{
+return lmCloneStringZ( vcfFileLm(vcff), str, size);
+}
+
+INLINE char *vcfFileCloneStr(struct vcfFile *vcff, char *str)
+/* Use vcff's local mem to allocate memory for a string and copy it. */
+{
+return vcfFileCloneStrZ(vcff, str, strlen(str));
+}
+
+INLINE char *vcfFileCloneSubstr(struct vcfFile *vcff, char *line, regmatch_t substr)
+/* Allocate memory for and copy a substring of line. */
+{
+return vcfFileCloneStrZ(vcff, line+substr.rm_so, (substr.rm_eo - substr.rm_so));
+}
+
+#define vcfFileCloneVar(vcff, var) lmCloneMem( vcfFileLm(vcff), var, sizeof(var))
+
+char *vcfFilePooledStr(struct vcfFile *vcff, char *str)
+/* Allocate memory for a string from vcff's shared string pool. */
+{
+return hashStoreName(vcff->pool, str);  // Always stored in main pool, not reuse pool
+}
+
+static enum vcfInfoType vcfInfoTypeFromSubstr(struct vcfFile *vcff, char *line, regmatch_t substr)
+/* Translate substring of line into vcfInfoType or complain. */
+{
+char typeWord[16];
+int substrLen = substr.rm_eo - substr.rm_so;
+if (substrLen > sizeof(typeWord) - 1)
+    {
+    vcfFileErr(vcff, "substring passed to vcfInfoTypeFromSubstr is too long.");
+    return vcfInfoString;
+    }
+safencpy(typeWord, sizeof(typeWord), line + substr.rm_so, substrLen);
+if (sameString("Integer", typeWord))
+    return vcfInfoInteger;
+if (sameString("Float", typeWord))
+    return vcfInfoFloat;
+if (sameString("Flag", typeWord))
+    return vcfInfoFlag;
+if (sameString("Character", typeWord))
+    return vcfInfoCharacter;
+if (sameString("String", typeWord))
+    return vcfInfoString;
+vcfFileErr(vcff, "Unrecognized type word \"%s\" in metadata line \"%s\"", typeWord, line);
+return vcfInfoString;
+}
+
+// Regular expressions to check format and extract information from header lines:
+static const char *fileformatRegex = "^##(file)?format=VCFv([0-9]+)(\\.([0-9]+))?$";
+static const char *infoOrFormatRegex =
+    "^##(INFO|FORMAT)="
+    "<ID=([A-Za-z0-9_:-]+),"
+    "Number=(\\.|A|G|[0-9-]+),"
+    "Type=([A-Za-z]+),"
+    "Description=\"?(.*)\"?>$";
+static const char *filterOrAltRegex =
+    "^##(FILTER|ALT)="
+    "<ID=([^,]+),"
+    "(Description|Type)=\"?(.*)\"?>$";
+// VCF version 3.3 was different enough to warrant separate regexes:
+static const char *infoOrFormatRegex3_3 =
+    "^##(INFO|FORMAT)="
+    "([A-Za-z0-9_:-]+),"
+    "(\\.|A|G|[0-9-]+),"
+    "([A-Za-z]+),"
+    "\"?(.*)\"?$";
+static const char *filterRegex3_3 =
+    "^##(FILTER)="
+    "([^,]+),"
+    "()\"?(.*)\"?$";
+
+INLINE void nonAsciiWorkaround(char *line)
+// Workaround for annoying 3-byte quote marks included in some 1000 Genomes files:
+{
+(void)strSwapStrs(line, strlen(line)+1, "\342\200\234", "\"");
+(void)strSwapStrs(line, strlen(line)+1, "\342\200\235", "\"");
+}
+
+static void parseMetadataLine(struct vcfFile *vcff, char *line)
+/* Parse a VCF header line beginning with "##" that defines a metadata. */
+{
+char *ptr = line;
+if (ptr == NULL && !startsWith(ptr, "##"))
+    errAbort("Bad line passed to parseMetadataLine");
+ptr += 2;
+char *firstEq = strchr(ptr, '=');
+if (firstEq == NULL)
+    {
+    if (vcff->majorVersion > 4 ||
+	(vcff->majorVersion == 4 && vcff->minorVersion > 0))
+	vcfFileErr(vcff, "Metadata line lacks '=': \"%s\"", line);
+    return;
+    }
+regmatch_t substrs[8];
+// Some of the metadata lines are crucial for parsing the rest of the file:
+if (startsWith("##fileformat=", line) || startsWith("##format", line))
+    {
+    if (regexMatchSubstr(line, fileformatRegex, substrs, ArraySize(substrs)))
+	{
+	// substrs[2] is major version #, substrs[3] is set only if there is a minor version,
+	// and substrs[4] is the minor version #.
+	vcff->majorVersion = atoi(line + substrs[2].rm_so);
+	if (substrs[3].rm_so != -1)
+	    vcff->minorVersion = atoi(line + substrs[4].rm_so);
+	}
+    else
+	vcfFileErr(vcff, "##fileformat line does not match expected pattern /%s/: \"%s\"",
+		   fileformatRegex, line);
+    }
+else if (startsWith("##INFO=", line) || startsWith("##FORMAT=", line))
+    {
+    boolean isInfo = startsWith("##INFO=", line);
+    nonAsciiWorkaround(line);
+    if (regexMatchSubstr(line, infoOrFormatRegex, substrs, ArraySize(substrs)) ||
+	regexMatchSubstr(line, infoOrFormatRegex3_3, substrs, ArraySize(substrs)))
+	// substrs[2] is ID/key, substrs[3] is Number, [4] is Type and [5] is Description.
+	{
+	struct vcfInfoDef *def = vcfFileAlloc(vcff, sizeof(struct vcfInfoDef));
+	def->key = vcfFileCloneSubstr(vcff, line, substrs[2]);
+	char *number = vcfFileCloneSubstr(vcff, line, substrs[3]);
+	if (sameString(number, ".") || sameString(number, "A") || sameString(number, "G"))
+	    // A is #alts which varies line-to-line; "G" is #genotypes which we haven't
+	    // yet seen.  Why is there a G here -- shouldn't such attributes go in the
+	    // genotype columns?
+	    def->fieldCount = -1;
+	else
+	    def->fieldCount = atoi(number);
+	def->type = vcfInfoTypeFromSubstr(vcff, line, substrs[4]);
+	// greedy regex pulls in end quote, trim if found:
+	if (line[substrs[5].rm_eo-1] == '"')
+	    line[substrs[5].rm_eo-1] = '\0';
+	def->description = vcfFileCloneSubstr(vcff, line, substrs[5]);
+	slAddHead((isInfo ? &(vcff->infoDefs) : &(vcff->gtFormatDefs)), def);
+	}
+    else
+	vcfFileErr(vcff, "##%s line does not match expected pattern /%s/ or /%s/: \"%s\"",
+		   (isInfo ? "INFO" : "FORMAT"), infoOrFormatRegex, infoOrFormatRegex3_3, line);
+    }
+else if (startsWith("##FILTER=", line) || startsWith("##ALT=", line))
+    {
+    boolean isFilter = startsWith("##FILTER", line);
+    if (regexMatchSubstr(line, filterOrAltRegex, substrs, ArraySize(substrs)) ||
+	regexMatchSubstr(line, filterRegex3_3, substrs, ArraySize(substrs)))
+	{
+	// substrs[2] is ID/key, substrs[4] is Description.
+	struct vcfInfoDef *def = vcfFileAlloc(vcff, sizeof(struct vcfInfoDef));
+	def->key = vcfFileCloneSubstr(vcff, line, substrs[2]);
+	// greedy regex pulls in end quote, trim if found:
+	if (line[substrs[4].rm_eo-1] == '"')
+	    line[substrs[4].rm_eo-1] = '\0';
+	def->description = vcfFileCloneSubstr(vcff, line, substrs[4]);
+	slAddHead((isFilter ? &(vcff->filterDefs) : &(vcff->altDefs)), def);
+	}
+    else
+	{
+	if (isFilter)
+	    vcfFileErr(vcff, "##FILTER line does not match expected pattern /%s/ or /%s/: \"%s\"",
+		       filterOrAltRegex, filterRegex3_3, line);
+	else
+	    vcfFileErr(vcff, "##ALT line does not match expected pattern /%s/: \"%s\"",
+		       filterOrAltRegex, line);
+	}
+    }
+}
+
+static void expectColumnName2(struct vcfFile *vcff, char *exp1, char *exp2, char *words[], int ix)
+/* Every file must include a header naming the columns, though most column names are
+ * fixed; make sure the names of fixed columns are as expected. */
+{
+if (! sameString(exp1, words[ix]))
+    {
+    if (exp2 == NULL)
+	vcfFileErr(vcff, "Expected column %d's name in header to be \"%s\" but got \"%s\"",
+		   ix+1, exp1, words[ix]);
+    else if (! sameString(exp2, words[ix]))
+	vcfFileErr(vcff, "Expected column %d's name in header to be \"%s\"  or \"%s\" "
+		   "but got \"%s\"", ix+1, exp1, exp2, words[ix]);
+    }
+}
+
+#define expectColumnName(vcff, exp, words, ix) expectColumnName2(vcff, exp, NULL, words, ix)
+
+// There might be a whole lot of genotype columns...
+#define VCF_MAX_COLUMNS 16 * 1024
+
+static void parseColumnHeaderRow(struct vcfFile *vcff, char *line)
+/* Make sure column names are as we expect, and store genotype sample IDs if any are given. */
+{
+if (line[0] != '#')
+    {
+    vcfFileErr(vcff, "Expected to find # followed by column names (\"#CHROM POS ...\"), "
+	       "not \"%s\"", line);
+    lineFileReuse(vcff->lf);
+    return;
+    }
+char *words[VCF_MAX_COLUMNS];
+int wordCount = chopLine(line+1, words);
+if (wordCount >= VCF_MAX_COLUMNS)
+    vcfFileErr(vcff, "header contains at least %d columns; "
+	       "VCF_MAX_COLUMNS may need to be increased in vcf.c!", VCF_MAX_COLUMNS);
+expectColumnName(vcff, "CHROM", words, 0);
+expectColumnName(vcff, "POS", words, 1);
+expectColumnName(vcff, "ID", words, 2);
+expectColumnName(vcff, "REF", words, 3);
+expectColumnName(vcff, "ALT", words, 4);
+expectColumnName2(vcff, "QUAL", "PROB", words, 5);
+expectColumnName(vcff, "FILTER", words, 6);
+expectColumnName(vcff, "INFO", words, 7);
+if (wordCount > 8)
+    {
+    expectColumnName(vcff, "FORMAT", words, 8);
+    if (wordCount < 10)
+	vcfFileErr(vcff, "FORMAT column is given, but no sample IDs for genotype columns...?");
+    vcff->genotypeCount = (wordCount - 9);
+    vcff->genotypeIds = vcfFileAlloc(vcff, vcff->genotypeCount * sizeof(char *));
+    int i;
+    for (i = 9;  i < wordCount;  i++)
+	vcff->genotypeIds[i-9] = vcfFileCloneStr(vcff, words[i]);
+    }
+}
+
+struct vcfFile *vcfFileNew()
+/* Return a new, empty vcfFile object. */
+{
+struct vcfFile *vcff = NULL;
+AllocVar(vcff);
+vcff->pool = hashNew(0);
+vcff->reusePool = NULL;  // Must explicitly request a separate record pool
+return vcff;
+}
+
+void vcfFileMakeReusePool(struct vcfFile *vcff, int initialSize)
+// Creates a separate memory pool for records.  Establishing this pool allows
+// using vcfFileFlushRecords to abandon previously read records and free
+// the associated memory. Very useful when reading an entire file in batches.
+{
+assert(vcff->reusePool == NULL); // don't duplicate this
+vcff->reusePool = lmInit(initialSize);
+}
+
+void vcfFileFlushRecords(struct vcfFile *vcff)
+// Abandons all previously read vcff->records and flushes the reuse pool (if it exists).
+// USE WITH CAUTION.  All previously allocated record pointers are now invalid.
+{
+if (vcff->reusePool != NULL)
+    {
+    size_t poolSize = lmSize(vcff->reusePool);
+    //if (poolSize > (48 * 1024 * 1024))
+    //    printf("\nReuse pool %ld of %ld unused\n",lmAvailable(vcff->reusePool),poolSize);
+    lmCleanup(&vcff->reusePool);
+    vcff->reusePool = lmInit(poolSize);
+    }
+vcff->records = NULL;
+}
+
+static struct vcfFile *vcfFileHeaderFromLineFile(struct lineFile *lf, int maxErr)
+/* Parse a VCF file into a vcfFile object.  If maxErr not zero, then
+ * continue to parse until this number of error have been reached.  A maxErr
+ * less than zero does not stop and reports all errors.
+ * Set maxErr to VCF_IGNORE_ERRS for silence */
+{
+initVcfSpecInfoDefs();
+initVcfSpecGtFormatDefs();
+if (lf == NULL)
+    return NULL;
+struct vcfFile *vcff = vcfFileNew();
+vcff->lf = lf;
+vcff->fileOrUrl = vcfFileCloneStr(vcff, lf->fileName);
+vcff->maxErr = (maxErr < 0) ? INT_MAX : maxErr;
+
+struct dyString *dyHeader = dyStringNew(1024);
+char *line = NULL;
+// First, metadata lines beginning with "##":
+while (lineFileNext(lf, &line, NULL) && startsWith("##", line))
+    {
+    dyStringAppend(dyHeader, line);
+    dyStringAppendC(dyHeader, '\n');
+    parseMetadataLine(vcff, line);
+    }
+slReverse(&(vcff->infoDefs));
+slReverse(&(vcff->filterDefs));
+slReverse(&(vcff->gtFormatDefs));
+// Did we get the bare minimum VCF header with supported version?
+if (vcff->majorVersion == 0)
+    vcfFileErr(vcff, "missing ##fileformat= header line?  Assuming 4.1.");
+if ((vcff->majorVersion != 4 || (vcff->minorVersion != 0 && vcff->minorVersion != 1)) &&
+    (vcff->majorVersion != 3))
+    vcfFileErr(vcff, "VCFv%d.%d not supported -- only v3.*, v4.0 or v4.1",
+	       vcff->majorVersion, vcff->minorVersion);
+// Next, one header line beginning with single "#" that names the columns:
+if (line == NULL)
+    // EOF after metadata
+    return vcff;
+dyStringAppend(dyHeader, line);
+dyStringAppendC(dyHeader, '\n');
+parseColumnHeaderRow(vcff, line);
+vcff->headerString = dyStringCannibalize(&dyHeader);
+return vcff;
+}
+
+
+#define VCF_MAX_INFO 512
+
+static void parseRefAndAlt(struct vcfFile *vcff, struct vcfRecord *record, char *ref, char *alt)
+/* Make an array of alleles, ref first, from the REF and comma-sep'd ALT columns.
+ * Use the length of the reference sequence to set record->chromEnd.
+ * Note: this trashes the alt argument, since this is expected to be its last use. */
+{
+char *altAlleles[VCF_MAX_INFO];
+int altCount = chopCommas(alt, altAlleles);
+record->alleleCount = 1 + altCount;
+record->alleles = vcfFileAlloc(vcff, record->alleleCount * sizeof(record->alleles[0]));
+record->alleles[0] = vcfFilePooledStr(vcff, ref);
+int i;
+for (i = 0;  i < altCount;  i++)
+    record->alleles[1+i] = vcfFilePooledStr(vcff, altAlleles[i]);
+int refLen = strlen(ref);
+if (refLen == dnaFilteredSize(ref))
+    record->chromEnd = record->chromStart + refLen;
+}
+
+static void parseFilterColumn(struct vcfFile *vcff, struct vcfRecord *record, char *filterStr)
+/* Transform ;-separated filter codes into count + string array. */
+{
+// We don't want to modify something allocated with vcfFilePooledStr because that uses
+// hash element names for storage!  So don't make a vcfFilePooledStr copy of filterStr and
+// chop that; instead, chop a temp string and pool the words separately.
+static struct dyString *tmp = NULL;
+if (tmp == NULL)
+    tmp = dyStringNew(0);
+dyStringClear(tmp);
+dyStringAppend(tmp, filterStr);
+record->filterCount = countChars(filterStr, ';') + 1;
+record->filters = vcfFileAlloc(vcff, record->filterCount * sizeof(char **));
+(void)chopByChar(tmp->string, ';', record->filters, record->filterCount);
+int i;
+for (i = 0;  i < record->filterCount;  i++)
+    record->filters[i] = vcfFilePooledStr(vcff, record->filters[i]);
+}
+
+struct vcfInfoDef *vcfInfoDefForKey(struct vcfFile *vcff, const char *key)
+/* Return infoDef for key, or NULL if it wasn't specified in the header or VCF spec. */
+{
+struct vcfInfoDef *def;
+// I expect there to be fairly few definitions (less than a dozen) so
+// I'm just doing a linear search not hash:
+for (def = vcff->infoDefs;  def != NULL;  def = def->next)
+    {
+    if (sameString(key, def->key))
+	return def;
+    }
+for (def = vcfSpecInfoDefs;  def != NULL;  def = def->next)
+    {
+    if (sameString(key, def->key))
+	return def;
+    }
+return NULL;
+}
+
+static enum vcfInfoType typeForInfoKey(struct vcfFile *vcff, const char *key)
+/* Look up the type of INFO component key, in the definitions from the header,
+ * and failing that, from the keys reserved in the spec. */
+{
+struct vcfInfoDef *def = vcfInfoDefForKey(vcff, key);
+return def ? def->type : vcfInfoString;
+}
+
+static int parseInfoValue(struct vcfRecord *record, char *infoKey, enum vcfInfoType type,
+			  char *valStr, union vcfDatum **pData, bool **pMissingData)
+/* Parse a comma-separated list of values into array of union vcfInfoDatum and return count. */
+{
+char *valWords[VCF_MAX_INFO];
+int count = chopCommas(valStr, valWords);
+struct vcfFile *vcff = record->file;
+union vcfDatum *data = vcfFileAlloc(vcff, count * sizeof(union vcfDatum));
+bool *missingData = vcfFileAlloc(vcff, count * sizeof(*missingData));
+int j;
+for (j = 0;  j < count;  j++)
+    {
+    if (type != vcfInfoString && type != vcfInfoCharacter && sameString(valWords[j], "."))
+	missingData[j] = TRUE;
+    switch (type)
+	{
+	case vcfInfoInteger:
+	    data[j].datInt = atoi(valWords[j]);
+	    break;
+	case vcfInfoFloat:
+	    data[j].datFloat = atof(valWords[j]);
+	    break;
+	case vcfInfoFlag:
+	    // Flag key might have a value in older VCFs e.g. 3.2's DB=0, DB=1
+	    data[j].datString = vcfFilePooledStr(vcff, valWords[j]);
+	    break;
+	case vcfInfoCharacter:
+	    data[j].datChar = valWords[j][0];
+	    break;
+	case vcfInfoString:
+	    data[j].datString = vcfFilePooledStr(vcff, valWords[j]);
+	    break;
+	default:
+	    errAbort("invalid vcfInfoType (uninitialized?) %d", type);
+	    break;
+	}
+    }
+// If END is given, use it as chromEnd:
+if (sameString(infoKey, vcfInfoEnd))
+    record->chromEnd = data[0].datInt;
+*pData = data;
+*pMissingData = missingData;
+return count;
+}
+
+static void parseInfoColumn(struct vcfFile *vcff, struct vcfRecord *record, char *string)
+/* Translate string into array of vcfInfoElement. */
+{
+if (sameString(string, "."))
+    {
+    record->infoCount = 0;
+    return;
+    }
+char *elWords[VCF_MAX_INFO];
+record->infoCount = chopByChar(string, ';', elWords, ArraySize(elWords));
+if (record->infoCount >= VCF_MAX_INFO)
+    vcfFileErr(vcff, "INFO column contains at least %d elements; "
+	       "VCF_MAX_INFO may need to be increased in vcf.c!", VCF_MAX_INFO);
+record->infoElements = vcfFileAlloc(vcff, record->infoCount * sizeof(struct vcfInfoElement));
+char *emptyString = vcfFilePooledStr(vcff, "");
+int i;
+for (i = 0;  i < record->infoCount;  i++)
+    {
+    char *elStr = elWords[i];
+    char *eq = strchr(elStr, '=');
+    struct vcfInfoElement *el = &(record->infoElements[i]);
+    if (eq == NULL)
+	{
+	el->key = vcfFilePooledStr(vcff, elStr);
+	enum vcfInfoType type = typeForInfoKey(vcff, el->key);
+	if (type != vcfInfoFlag)
+	    {
+	    struct vcfInfoDef *def = vcfInfoDefForKey(vcff, el->key);
+	    // Complain only if we are expecting a particular number of values for this keyword:
+	    if (def != NULL && def->fieldCount >= 0)
+		vcfFileErr(vcff, "Missing = after key in INFO element: \"%s\" (type=%d)",
+			   elStr, type);
+	    if (type == vcfInfoString)
+		{
+		el->values = vcfFileAlloc(vcff, sizeof(union vcfDatum));
+		el->values[0].datString = emptyString;
+		}
+	    }
+	continue;
+	}
+    *eq = '\0';
+    el->key = vcfFilePooledStr(vcff, elStr);
+    enum vcfInfoType type = typeForInfoKey(vcff, el->key);
+    char *valStr = eq+1;
+    el->count = parseInfoValue(record, el->key, type, valStr, &(el->values), &(el->missingData));
+    if (el->count >= VCF_MAX_INFO)
+	vcfFileErr(vcff, "A single element of the INFO column has at least %d values; "
+	       "VCF_MAX_INFO may need to be increased in vcf.c!", VCF_MAX_INFO);
+    }
+}
+
+struct vcfRecord *vcfRecordFromRow(struct vcfFile *vcff, char **words)
+/* Parse words from a VCF data line into a VCF record structure. */
+{
+struct vcfRecord *record = vcfFileAlloc(vcff, sizeof(struct vcfRecord));
+record->file = vcff;
+record->chrom = vcfFilePooledStr(vcff, words[0]);
+record->chromStart = lineFileNeedNum(vcff->lf, words, 1) - 1;
+// chromEnd may be overwritten by parseRefAndAlt and parseInfoColumn.
+record->chromEnd = record->chromStart+1;
+record->name = vcfFilePooledStr(vcff, words[2]);
+parseRefAndAlt(vcff, record, words[3], words[4]);
+record->qual = vcfFilePooledStr(vcff, words[5]);
+parseFilterColumn(vcff, record, words[6]);
+parseInfoColumn(vcff, record, words[7]);
+if (vcff->genotypeCount > 0)
+    {
+    record->format = vcfFilePooledStr(vcff, words[8]);
+    record->genotypeUnparsedStrings = vcfFileAlloc(vcff,
+						   vcff->genotypeCount * sizeof(char *));
+    int i;
+    // Don't bother actually parsing all these until & unless we need the info:
+    for (i = 0;  i < vcff->genotypeCount;  i++)
+	record->genotypeUnparsedStrings[i] = vcfFileCloneStr(vcff, words[9+i]);
+    }
+return record;
+}
+
+static int checkWordCount(struct vcfFile *vcff, char **words, int wordCount)
+// Compensate for error in 1000 Genomes Phase 1 file
+// ALL.chr21.integrated_phase1_v3.20101123.snps_indels_svs.genotypes.vcf.gz
+// which has some lines that have an extra "\t" at the end of line,
+// causing the wordCount to be too high by 1:
+{
+int expected = 8;
+if (vcff->genotypeCount > 0)
+    expected = 9 + vcff->genotypeCount;
+if (wordCount == expected+1 && words[expected][0] == '\0')
+    wordCount--;
+lineFileExpectWords(vcff->lf, expected, wordCount);
+return wordCount;
+}
+
+struct vcfRecord *vcfNextRecord(struct vcfFile *vcff)
+/* Parse the words in the next line from vcff into a vcfRecord. Return NULL at end of file.
+ * Note: this does not store record in vcff->records! */
+{
+char *words[VCF_MAX_COLUMNS];
+int wordCount;
+if ((wordCount = lineFileChopTab(vcff->lf, words)) <= 0)
+    return NULL;
+wordCount = checkWordCount(vcff, words, wordCount);
+return vcfRecordFromRow(vcff, words);
+}
+
+static boolean allelesHavePaddingBase(char **alleles, int alleleCount)
+/* Examine alleles to see if they either a) all start with the same base or
+ * b) include a symbolic or 0-length allele.  In either of those cases, there
+ * must be an initial padding base that we'll need to trim from non-symbolic
+ * alleles. */
+{
+boolean hasPaddingBase = TRUE;
+char firstBase = '\0';
+if (isAllNt(alleles[0], strlen(alleles[0])))
+    firstBase = alleles[0][0];
+int i;
+for (i = 1;  i < alleleCount;  i++)
+    {
+    if (isAllNt(alleles[i], strlen(alleles[i])))
+	{
+	if (firstBase == '\0')
+	    firstBase = alleles[i][0];
+	if (alleles[i][0] != firstBase)
+	    // Different first base implies unpadded alleles.
+	    hasPaddingBase = FALSE;
+	}
+    else
+	{
+	// Symbolic ALT allele: REF must have the padding base.
+	hasPaddingBase = TRUE;
+	break;
+	}
+    }
+return hasPaddingBase;
+}
+
+unsigned int vcfRecordTrimIndelLeftBase(struct vcfRecord *rec)
+/* For indels, VCF includes the left neighboring base; for example, if the alleles are
+ * AA/- following a G base, then the VCF record will start one base to the left and have
+ * "GAA" and "G" as the alleles.  Also, if any alt allele is symbolic (e.g. <DEL>) then
+ * the ref allele must have a padding base.
+ * That is not nice for display for two reasons:
+ * 1. Indels appear one base wider than their dbSNP entries.
+ * 2. In pgSnp display mode, the two alleles are always the same color.
+ * However, for hgTracks' mapBox we need the correct chromStart for identifying the
+ * record in hgc -- so return the original chromStart. */
+{
+unsigned int chromStartOrig = rec->chromStart;
+struct vcfFile *vcff = rec->file;
+if (rec->alleleCount > 1)
+    {
+    boolean hasPaddingBase = allelesHavePaddingBase(rec->alleles, rec->alleleCount);
+    if (hasPaddingBase)
+	{
+	rec->chromStart++;
+	int i;
+	for (i = 0;  i < rec->alleleCount;  i++)
+	    {
+	    if (rec->alleles[i][1] == '\0')
+		rec->alleles[i] = vcfFilePooledStr(vcff, "-");
+	    else if (isAllNt(rec->alleles[i], strlen(rec->alleles[i])))
+		rec->alleles[i] = vcfFilePooledStr(vcff, rec->alleles[i]+1);
+	    else // don't trim first character of symbolic allele
+		rec->alleles[i] = vcfFilePooledStr(vcff, rec->alleles[i]);
+	    }
+	}
+    }
+return chromStartOrig;
+}
+
+static boolean allEndsGEStartsAndIdentical(char **starts, char **ends, int count)
+/* Given two arrays with <count> elements, return true if all strings in ends[] are
+ * greater than or equal to the corresponding strings in starts[], and all ends[]
+ * have the same char. */
+{
+int i;
+char refEnd = ends[0][0];
+for (i = 0;  i < count;  i++)
+    {
+    if (ends[i] < starts[i] || ends[i][0] != refEnd)
+	return FALSE;
+    }
+return TRUE;
+}
+
+static int countIdenticalBasesRight(char **alleles, int alCount)
+/* Return the number of bases that are identical at the end of each allele (usually 0). */
+{
+char *alleleEnds[alCount];
+int i;
+for (i = 0;  i < alCount;  i++)
+    {
+    int alLen = strlen(alleles[i]);
+    // If any allele is symbolic, don't try to trim.
+    if (!isAllNt(alleles[i], alLen))
+	return 0;
+    alleleEnds[i] = alleles[i] + alLen-1;
+    }
+int trimmedBases = 0;
+while (allEndsGEStartsAndIdentical(alleles, alleleEnds, alCount))
+    {
+    trimmedBases++;
+    // Trim identical last base of alleles and move alleleEnds[] items back.
+    for (i = 0;  i < alCount;  i++)
+	alleleEnds[i]--;
+    }
+return trimmedBases;
+}
+
+unsigned int vcfRecordTrimAllelesRight(struct vcfRecord *rec)
+/* Some tools output indels with extra base to the right, for example ref=ACC, alt=ACCC
+ * which should be ref=A, alt=AC.  When the extra bases make the variant extend from an
+ * intron (or gap) into an exon, it can cause a false appearance of a frameshift.
+ * To avoid this, when all alleles have identical base(s) at the end, trim all of them,
+ * and update rec->chromEnd.
+ * For hgTracks' mapBox we need the correct chromStart for identifying the record in hgc,
+ * so return the original chromEnd. */
+{
+unsigned int chromEndOrig = rec->chromEnd;
+int alCount = rec->alleleCount;
+char **alleles = rec->alleles;
+int trimmedBases = countIdenticalBasesRight(alleles, alCount);
+if (trimmedBases > 0)
+    {
+    struct vcfFile *vcff = rec->file;
+    // Allocate new pooled strings for the trimmed alleles.
+    int i;
+    for (i = 0;  i < alCount;  i++)
+	{
+	int alLen = strlen(alleles[i]); // alLen >= trimmedBases > 0
+	char trimmed[alLen+1];
+	safencpy(trimmed, sizeof(trimmed), alleles[i], alLen - trimmedBases);
+	if (isEmpty(trimmed))
+	    safencpy(trimmed, sizeof(trimmed), "-", 1);
+	alleles[i] = vcfFilePooledStr(vcff, trimmed);
+	}
+    rec->chromEnd -= trimmedBases;
+    }
+return chromEndOrig;
+}
+
+static boolean chromsMatch(char *chromA, char *chromB)
+// Return TRUE if chromA and chromB are non-NULL and identical, possibly ignoring
+// "chr" at the beginning of one but not the other.
+{
+if (chromA == NULL || chromB == NULL)
+    return FALSE;
+char *chromAPlus = startsWith("chr", chromA) ? chromA+3 : chromA;
+char *chromBPlus = startsWith("chr", chromB) ? chromB+3 : chromB;
+return sameString(chromAPlus, chromBPlus);
+}
+
+static struct vcfRecord *vcfParseData(struct vcfFile *vcff, char *chrom, int start, int end,
+				      int maxRecords)
+// Given a vcfFile into which the header has been parsed, and whose
+// lineFile is positioned at the beginning of a data row, parse and
+// return all data rows (in region, if chrom is non-NULL) from lineFile,
+// up to maxRecords.
+{
+if (vcff == NULL)
+    return NULL;
+int recCount = 0;
+struct vcfRecord *records = NULL;
+struct vcfRecord *record;
+while ((record = vcfNextRecord(vcff)) != NULL)
+    {
+    if (maxRecords >= 0 && recCount >= maxRecords)
+        break;
+    if (chrom == NULL)
+	{
+	slAddHead(&records, record);
+	recCount++;
+	}
+    else if (chromsMatch(chrom, record->chrom))
+	{
+	if (end > 0 && record->chromStart >= end)
+	    break;
+	else if (record->chromEnd > start)
+	    {
+	    slAddHead(&records, record);
+	    recCount++;
+	    }
+	}
+    }
+slReverse(&records);
+return records;
+}
+
+struct vcfFile *vcfFileMayOpen(char *fileOrUrl, char *chrom, int start, int end,
+			       int maxErr, int maxRecords, boolean parseAll)
+/* Open fileOrUrl and parse VCF header; return NULL if unable.
+ * If chrom is non-NULL, scan past any variants that precede {chrom, chromStart}.
+ * Note: this is very inefficient -- it's better to use vcfTabix if possible!
+ * If parseAll, then read in all lines in region, parse and store in
+ * vcff->records; if maxErr >= zero, then continue to parse until
+ * there are maxErr+1 errors.  A maxErr less than zero does not stop
+ * and reports all errors. Set maxErr to VCF_IGNORE_ERRS for silence */
+{
+struct lineFile *lf = NULL;
+if (startsWith("http://", fileOrUrl) || startsWith("ftp://", fileOrUrl) ||
+    startsWith("https://", fileOrUrl))
+    lf = netLineFileOpen(fileOrUrl);
+else
+    lf = lineFileMayOpen(fileOrUrl, TRUE);
+struct vcfFile *vcff = vcfFileHeaderFromLineFile(lf, maxErr);
+if (vcff && chrom != NULL)
+    {
+    char *line = NULL;
+    while (lineFileNextReal(vcff->lf, &line))
+	{
+	char lineCopy[strlen(line)+1];
+	safecpy(lineCopy, sizeof(lineCopy), line);
+	char *words[VCF_MAX_COLUMNS];
+	int wordCount = chopTabs(lineCopy, words);
+	wordCount = checkWordCount(vcff, words, wordCount);
+	struct vcfRecord *record = vcfRecordFromRow(vcff, words);
+	if (chromsMatch(chrom, record->chrom))
+	    {
+	    if (record->chromEnd < start)
+		continue;
+	    else
+		{
+		lineFileReuse(vcff->lf);
+		break;
+		}
+	    }
+	}
+    }
+if (vcff && parseAll)
+    {
+    vcff->records = vcfParseData(vcff, chrom, start, end, maxRecords);
+    lineFileClose(&(vcff->lf)); // Not sure why it is closed.  Angie?
+    }
+return vcff;
+}
+
+struct vcfFile *vcfTabixFileMayOpen(char *fileOrUrl, char *chrom, int start, int end,
+				    int maxErr, int maxRecords)
+/* Open a VCF file that has been compressed and indexed by tabix and
+ * parse VCF header, or return NULL if unable.  If chrom is non-NULL,
+ * seek to the position range and parse all lines in range into
+ * vcff->records.  If maxErr >= zero, then continue to parse until
+ * there are maxErr+1 errors.  A maxErr less than zero does not stop
+ * and reports all errors. Set maxErr to VCF_IGNORE_ERRS for silence */
+{
+struct lineFile *lf = lineFileTabixMayOpen(fileOrUrl, TRUE);
+struct vcfFile *vcff = vcfFileHeaderFromLineFile(lf, maxErr);
+if (vcff == NULL)
+    return NULL;
+if (isNotEmpty(chrom) && start != end)
+    {
+    if (lineFileSetTabixRegion(lf, chrom, start, end))
+        {
+        vcff->records = vcfParseData(vcff, NULL, 0, 0, maxRecords);
+        lineFileClose(&(vcff->lf)); // Not sure why it is closed.  Angie?
+        }
+    }
+return vcff;
+}
+
+int vcfRecordCmp(const void *va, const void *vb)
+/* Compare to sort based on position. */
+{
+const struct vcfRecord *a = *((struct vcfRecord **)va);
+const struct vcfRecord *b = *((struct vcfRecord **)vb);
+int dif;
+dif = strcmp(a->chrom, b->chrom);
+if (dif == 0)
+    dif = a->chromStart - b->chromStart;
+if (dif == 0)
+    dif = a->chromEnd - b->chromEnd; // shortest first
+if (dif == 0)
+    dif = strcmp(a->name, b->name);  // finally by name
+return dif;
+}
+
+int vcfTabixBatchRead(struct vcfFile *vcff, char *chrom, int start, int end,
+                      int maxErr, int maxRecords)
+// Reads a batch of records from an opened and indexed VCF file, adding them to
+// vcff->records and returning the count of new records added in this batch.
+// Note: vcff->records will continue to be sorted, even if batches are loaded
+// out of order.  Additionally, resulting vcff->records will contain no duplicates
+// so returned count refects only the new records added, as opposed to all records
+// in range.  If maxErr >= zero, then continue to parse until there are maxErr+1
+// errors.  A maxErr less than zero does not stop and reports all errors.  Set
+// maxErr to VCF_IGNORE_ERRS for silence.
+{
+int oldCount = slCount(vcff->records);
+
+if (lineFileSetTabixRegion(vcff->lf, chrom, start, end))
+    {
+    struct vcfRecord *records = vcfParseData(vcff, NULL, 0, 0, maxRecords);
+    if (records)
+        {
+        struct vcfRecord *lastRec = vcff->records;
+        if (lastRec == NULL)
+            vcff->records = records;
+        else
+            {
+            // Considered just asserting the batches were in order, but a problem may
+            // result when non-overlapping location windows pick up the same long variant.
+            slSortMergeUniq(&(vcff->records), records, vcfRecordCmp, NULL);
+            }
+        }
+    }
+
+return slCount(vcff->records) - oldCount;
+}
+
+void vcfFileFree(struct vcfFile **pVcff)
+/* Free a vcfFile object. */
+{
+if (pVcff == NULL || *pVcff == NULL)
+    return;
+struct vcfFile *vcff = *pVcff;
+if (vcff->maxErr == VCF_IGNORE_ERRS && vcff->errCnt > 0)
+    {
+    vcff->maxErr++; // Never completely silent!  Go ahead and report how many errs were detected
+    vcfFileErr(vcff,"Closing with %d errors.",vcff->errCnt);
+    }
+freez(&(vcff->headerString));
+hashFree(&(vcff->pool));
+if (vcff->reusePool)
+    lmCleanup(&vcff->reusePool);
+hashFree(&(vcff->byName));
+lineFileClose(&(vcff->lf));
+freez(pVcff);
+}
+
+const struct vcfRecord *vcfFileFindVariant(struct vcfFile *vcff, char *variantId)
+/* Return all records with name=variantId, or NULL if not found. */
+{
+struct vcfRecord *varList = NULL;
+if (vcff->byName == NULL)
+    {
+    vcff->byName = hashNew(0);
+    struct vcfRecord *rec;
+    for (rec = vcff->records;  rec != NULL;  rec = rec->next)
+	{
+	if (sameString(rec->name, variantId))
+	    {
+	    // Make shallow copy of rec so we can alter ->next:
+	    struct vcfRecord *newRec = vcfFileCloneVar(vcff,rec);
+	    slAddHead(&varList, newRec);
+	    }
+	hashAdd(vcff->byName, rec->name, rec);
+	}
+    slReverse(&varList);
+    }
+else
+    {
+    struct hashEl *hel = hashLookup(vcff->byName, variantId);
+    while (hel != NULL)
+	{
+	if (sameString(hel->name, variantId))
+	    {
+	    struct vcfRecord *rec = hel->val;
+	    struct vcfRecord *newRec = vcfFileCloneVar(vcff,rec);
+	    slAddHead(&varList, newRec);
+	    }
+	hel = hel->next;
+	}
+    // Don't reverse varList -- hash element list was already reversed
+    }
+return varList;
+}
+
+const struct vcfInfoElement *vcfRecordFindInfo(const struct vcfRecord *record, char *key)
+/* Find an INFO element, or NULL. */
+{
+int i;
+for (i = 0;  i < record->infoCount;  i++)
+    {
+    if (sameString(key, record->infoElements[i].key))
+	return &(record->infoElements[i]);
+    }
+return NULL;
+}
+
+struct vcfInfoDef *vcfInfoDefForGtKey(struct vcfFile *vcff, const char *key)
+/* Look up the type of genotype FORMAT component key, in the definitions from the header,
+ * and failing that, from the keys reserved in the spec. */
+{
+struct vcfInfoDef *def;
+// I expect there to be fairly few definitions (less than a dozen) so
+// I'm just doing a linear search not hash:
+for (def = vcff->gtFormatDefs;  def != NULL;  def = def->next)
+    {
+    if (sameString(key, def->key))
+	return def;
+    }
+for (def = vcfSpecGtFormatDefs;  def != NULL;  def = def->next)
+    {
+    if (sameString(key, def->key))
+	return def;
+    }
+return NULL;
+}
+
+static enum vcfInfoType typeForGtFormat(struct vcfFile *vcff, const char *key)
+/* Look up the type of FORMAT component key, in the definitions from the header,
+ * and failing that, from the keys reserved in the spec. */
+{
+struct vcfInfoDef *def = vcfInfoDefForGtKey(vcff, key);
+return def ? def->type : vcfInfoString;
+}
+
+#define VCF_MAX_FORMAT VCF_MAX_INFO
+#define VCF_MAX_FORMAT_LEN (VCF_MAX_FORMAT * 4)
+
+void vcfParseGenotypes(struct vcfRecord *record)
+/* Translate record->genotypesUnparsedStrings[] into proper struct vcfGenotype[].
+ * This destroys genotypesUnparsedStrings. */
+{
+if (record->genotypeUnparsedStrings == NULL)
+    return;
+struct vcfFile *vcff = record->file;
+record->genotypes = vcfFileAlloc(vcff, vcff->genotypeCount * sizeof(struct vcfGenotype));
+char format[VCF_MAX_FORMAT_LEN];
+safecpy(format, sizeof(format), record->format);
+char *formatWords[VCF_MAX_FORMAT];
+int formatWordCount = chopByChar(format, ':', formatWords, ArraySize(formatWords));
+if (formatWordCount >= VCF_MAX_FORMAT)
+    {
+    vcfFileErr(vcff, "The FORMAT column has at least %d words; "
+	       "VCF_MAX_FORMAT may need to be increased in vcf.c!", VCF_MAX_FORMAT);
+    formatWordCount = VCF_MAX_FORMAT;
+    }
+if (differentString(formatWords[0], vcfGtGenotype))
+    vcfFileErr(vcff, "FORMAT column should begin with \"%s\" but begins with \"%s\"",
+	       vcfGtGenotype, formatWords[0]);
+int i;
+// Store the pooled format word pointers and associated types for use in inner loop below.
+enum vcfInfoType formatTypes[VCF_MAX_FORMAT];
+for (i = 0;  i < formatWordCount;  i++)
+    {
+    formatTypes[i] = typeForGtFormat(vcff, formatWords[i]);
+    formatWords[i] = vcfFilePooledStr(vcff, formatWords[i]);
+    }
+for (i = 0;  i < vcff->genotypeCount;  i++)
+    {
+    char *string = record->genotypeUnparsedStrings[i];
+    struct vcfGenotype *gt = &(record->genotypes[i]);
+    // Each genotype can have multiple :-separated info elements:
+    char *gtWords[VCF_MAX_FORMAT];
+    int gtWordCount = chopByChar(string, ':', gtWords, ArraySize(gtWords));
+    if (gtWordCount != formatWordCount)
+	vcfFileErr(vcff, "The FORMAT column has %d words but the genotype column for %s "
+		   "has %d words", formatWordCount, vcff->genotypeIds[i], gtWordCount);
+    if (gtWordCount > formatWordCount)
+	gtWordCount = formatWordCount;
+    gt->id = vcff->genotypeIds[i];
+    gt->infoCount = gtWordCount;
+    gt->infoElements = vcfFileAlloc(vcff, gtWordCount * sizeof(struct vcfInfoElement));
+    int j;
+    for (j = 0;  j < gtWordCount;  j++)
+	{
+	// Special parsing of genotype:
+	if (sameString(formatWords[j], vcfGtGenotype))
+	    {
+	    char *genotype = gtWords[j];
+	    char *sep = strchr(genotype, '|');
+	    if (sep != NULL)
+		gt->isPhased = TRUE;
+	    else
+		sep = strchr(genotype, '/');
+	    if (genotype[0] == '.')
+		gt->hapIxA = -1;
+	    else
+		gt->hapIxA = atoi(genotype);
+	    if (sep == NULL)
+		gt->isHaploid = TRUE;
+	    else if (sep[1] == '.')
+		gt->hapIxB = -1;
+	    else
+		gt->hapIxB = atoi(sep+1);
+	    }
+	struct vcfInfoElement *el = &(gt->infoElements[j]);
+	el->key = formatWords[j];
+	el->count = parseInfoValue(record, formatWords[j], formatTypes[j], gtWords[j],
+				   &(el->values), &(el->missingData));
+	if (el->count >= VCF_MAX_INFO)
+	    vcfFileErr(vcff, "A single element of the genotype column for \"%s\" "
+		       "has at least %d values; "
+		       "VCF_MAX_INFO may need to be increased in vcf.c!",
+		       gt->id, VCF_MAX_INFO);
+	}
+    }
+record->genotypeUnparsedStrings = NULL;
+}
+
+const struct vcfGenotype *vcfRecordFindGenotype(struct vcfRecord *record, char *sampleId)
+/* Find the genotype and associated info for the individual, or return NULL.
+ * This calls vcfParseGenotypes if it has not already been called. */
+{
+struct vcfFile *vcff = record->file;
+if (sampleId == NULL || vcff->genotypeCount == 0)
+    return NULL;
+vcfParseGenotypes(record);
+int ix = stringArrayIx(sampleId, vcff->genotypeIds, vcff->genotypeCount);
+if (ix >= 0)
+    return &(record->genotypes[ix]);
+return NULL;
+}
+
+static char *vcfDataLineAutoSqlString =
+        "table vcfDataLine"
+        "\"The fields of a Variant Call Format data line\""
+        "    ("
+        "    string chrom;      \"An identifier from the reference genome\""
+        "    uint pos;          \"The reference position, with the 1st base having position 1\""
+        "    string id;         \"Semi-colon separated list of unique identifiers where available\""
+        "    string ref;                \"Reference base(s)\""
+        "    string alt;                \"Comma separated list of alternate non-reference alleles "
+                                         "called on at least one of the samples\""
+        "    string qual;       \"Phred-scaled quality score for the assertion made in ALT. i.e. "
+                                 "give -10log_10 prob(call in ALT is wrong)\""
+        "    string filter;     \"PASS if this position has passed all filters. Otherwise, a "
+                                  "semicolon-separated list of codes for filters that fail\""
+        "    string info;       \"Additional information encoded as a semicolon-separated series "
+                                 "of short keys with optional comma-separated values\""
+        "    string format;     \"If genotype columns are specified in header, a "
+                                 "semicolon-separated list of of short keys starting with GT\""
+        "    string genotypes;  \"If genotype columns are specified in header, a tab-separated "
+                                 "set of genotype column values; each value is a colon-separated "
+                                 "list of values corresponding to keys in the format column\""
+        "    )";
+
+struct asObject *vcfAsObj()
+// Return asObject describing fields of VCF
+{
+return asParseText(vcfDataLineAutoSqlString);
+}
+
+char *vcfGetSlashSepAllelesFromWords(char **words, struct dyString *dy)
+/* Overwrite dy with a /-separated allele string from VCF words,
+ * skipping the extra initial base that VCF requires for indel alleles if necessary,
+ * and trimming identical bases at the ends of all alleles if there are any.
+ * Return dy->string for convenience. */
+{
+// VCF reference allele gets its own column:
+char *refAllele = words[3];
+char *altAlleles = words[4];
+// Make a vcfRecord-like allele array (ref in [0], alts after) so we can check for padding base:
+int alCount = 1 + countChars(altAlleles, ',') + 1;
+char *alleles[alCount];
+alleles[0] = refAllele;
+char altAlCopy[strlen(altAlleles)+1];
+safecpy(altAlCopy, sizeof(altAlCopy), altAlleles);
+chopByChar(altAlCopy, ',', &(alleles[1]), alCount-1);
+int i;
+if (allelesHavePaddingBase(alleles, alCount))
+    {
+    // Skip padding base (unless we have a symbolic allele):
+    for (i = 0;  i < alCount;  i++)
+	if (isAllNt(alleles[i], strlen(alleles[i])))
+	    alleles[i]++;
+    }
+// Having dealt with left padding base, now look for identical bases on the right:
+int trimmedBases = countIdenticalBasesRight(alleles, alCount);
+// Build a /-separated allele string, trimming bases on the right if necessary:
+dyStringClear(dy);
+for (i = 0;  i < alCount;  i++)
+    {
+    if (i > 0)
+	dyStringAppendC(dy, '/');
+    char *allele = alleles[i];
+    if (allele[trimmedBases] == '\0')
+	dyStringAppendC(dy, '-');
+    else
+	dyStringAppendN(dy, allele, strlen(allele)-trimmedBases);
+    }
+return dy->string;
+}
diff --git a/gbtools/src/blatSrc/lib/vcfBits.c b/gbtools/src/blatSrc/lib/vcfBits.c
new file mode 100644
index 0000000..75d3a05
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/vcfBits.c
@@ -0,0 +1,696 @@
+/* vcfBits.c/.h: Variant Call Format, analysis by bit maps.
+ * The routines found here are dependent upon vcf.c/.h for accessing vcf records.
+ * They allow analysis of a set of vcf records by bit maps with one bit map per variant
+ * location and where each haplotype covered by the vcf record is represented by a single
+ * bit (or pair of bits). Additional analysis can be performed by creating haplotype based
+ * bit maps from variant bit maps.  There is one haplotype bit map for each haplotype
+ * (subject chromosome) with one (or two) bits for each variant location in the set of records. */
+
+/* Copyright (C) 2013 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "dnautil.h"
+#include "errAbort.h"
+#include <limits.h>
+#include "localmem.h"
+#include "net.h"
+#include "regexHelper.h"
+#include "vcf.h"
+#include "vcfBits.h"
+
+
+static struct variantBits *vcfOneRecordToVariantBits(struct vcfFile *vcff,struct vcfRecord *record,
+                                                     boolean phasedOnly, boolean homozygousOnly)
+// Returns bit array covering all genotypes/haplotype/alleles per record.  One slot per genotype
+// containing 2 slots for haplotypes and 1 or 2 bits per allele. The normal (simple) case of
+// 1 reference and 1 alternate allele results in 1 allele bit with 0:ref. Two or three alt alleles
+// is represented by two bits per allele (>3 alternate alleles is unsupported).
+// If phasedOnly, unphased haplotype bits will all be set only if all agree (00 is uninterpretable)
+// Haploid genotypes (e.g. chrY) and homozygousOnly bitmaps contain 1 haplotype slot.
+{
+// parse genotypes if needed
+if (record->genotypes == NULL)
+    vcfParseGenotypes(record);
+assert(vcff->genotypeCount > 0);
+int ix = 0;
+
+// allocate vBits struct
+struct variantBits *vBits;
+struct lm *lm = vcfFileLm(vcff);
+lmAllocVar(lm,vBits);
+vBits->genotypeSlots  = vcff->genotypeCount;
+vBits->record         = record;
+vBits->haplotypeSlots = 2;  // assume diploid, but then check for complete haploid
+if (homozygousOnly)
+    vBits->haplotypeSlots = 1;
+else
+    { // spin through all the subjects to see if all are haploid
+    for (ix = 0; ix < vcff->genotypeCount && record->genotypes[ix].isHaploid;ix++)
+        ;
+    if (ix == vcff->genotypeCount)
+        vBits->haplotypeSlots = 1;  // All are haploid: chrY
+    assert(vBits->haplotypeSlots == 2 || record->chrom[strlen(record->chrom) - 1] == 'Y');
+    }
+
+// Type of variant?
+assert(record->alleles != NULL);
+if(record->alleles != NULL)
+    {
+    int nonRefLen = 0;
+    assert(record->alleles[0] != NULL);
+    int refLen = record->alleles[0] ? strlen(record->alleles[0]) : 0;
+    for (ix = 1; ix < record->alleleCount; ix++)
+        {
+        assert(record->alleles[ix] != NULL);
+        int thisLen = record->alleles[ix] && differentWord(record->alleles[ix],"<DEL>") ?
+                                                                  strlen(record->alleles[ix]) : 0;
+        if (nonRefLen < thisLen)
+            nonRefLen = thisLen;
+        }
+    if (refLen == 1 && nonRefLen == 1)
+        vBits->vType = vtSNP;
+    else if (refLen < nonRefLen)
+        vBits->vType = vtInsertion;
+    else if (refLen > nonRefLen)
+        vBits->vType = vtDeletion;
+    // else unknown
+    }
+
+// allocate bits
+assert(record->alleleCount < 4);
+vBits->alleleSlots = (record->alleleCount <= 2 ? 1 : 2);
+int bitCount = vBitsSlotCount(vBits);
+Bits *bits = lmBitAlloc(lm,bitCount);
+vBits->bits = bits;
+
+
+// walk through genotypes and set the bit
+for (ix = 0; ix < vcff->genotypeCount;ix++)
+    {
+    struct vcfGenotype *gt = gt = &(record->genotypes[ix]);
+
+    boolean homozygous = (gt->isHaploid || gt->hapIxA == gt->hapIxB);
+
+    if ((!phasedOnly || gt->isPhased || homozygous))
+        {
+        if ((!homozygousOnly || homozygous) && gt->hapIxA > 0)
+            {
+            switch (gt->hapIxA)
+                {
+                case 1: bitSetOne(bits,  vBitsSlot(vBits,ix,0,0));   vBits->bitsOn++;    break;
+                case 2: bitSetOne(bits,  vBitsSlot(vBits,ix,0,1));   vBits->bitsOn++;    break;
+                case 3: bitSetRange(bits,vBitsSlot(vBits,ix,0,0),2); vBits->bitsOn += 2; break;
+                default:                                             break;
+                }
+            }
+        if (!gt->isHaploid && !homozygousOnly && gt->hapIxB > 0)
+            {
+            switch (gt->hapIxB)
+                {
+                case 1: bitSetOne(bits,  vBitsSlot(vBits,ix,1,0));   vBits->bitsOn++;    break;
+                case 2: bitSetOne(bits,  vBitsSlot(vBits,ix,1,1));   vBits->bitsOn++;    break;
+                case 3: bitSetRange(bits,vBitsSlot(vBits,ix,1,0),2); vBits->bitsOn += 2; break;
+                default:                                             break;
+                }
+            }
+        }
+    }
+
+return vBits;
+}
+
+static Bits *vcfRecordUnphasedBits(struct vcfFile *vcff, struct vcfRecord *record)
+// Returns array (1 bit per genotype) for each unphased genotype.
+{
+// allocate bits
+Bits *bits = lmBitAlloc(vcfFileLm(vcff),vcff->genotypeCount);
+
+// parse genotypes if needed
+if (record->genotypes == NULL)
+    vcfParseGenotypes(record);
+
+// walk through genotypes and set the bit
+int ix = 0;
+for ( ; ix < vcff->genotypeCount;ix++)
+    {
+    if (record->genotypes[ix].isPhased == FALSE
+    && record->genotypes[ix].isHaploid == FALSE)
+        bitSetOne(bits,ix);
+    }
+return bits;
+}
+
+Bits *vcfRecordHaploidBits(struct vcfFile *vcff, struct vcfRecord *record)
+// Returns array (1 bit per genotype) for each haploid genotype.
+// This is useful for interpreting chrX.
+{
+// allocate bits
+Bits *bits = lmBitAlloc(vcfFileLm(vcff),vcff->genotypeCount);
+
+// parse genotypes if needed
+if (record->genotypes == NULL)
+    vcfParseGenotypes(record);
+
+// walk through genotypes and set the bit
+int ix = 0;
+for ( ; ix < vcff->genotypeCount;ix++)
+    {
+    if (record->genotypes[ix].isHaploid)
+        bitSetOne(bits,ix);
+    }
+return bits;
+}
+
+int vBitsHaploidCount(struct variantBits *vBits)
+// Returns the number of subjects in the VCF dataset that are haploid at this location
+{
+int haploid = 0;  // Most are not haploid
+
+char *chrom = vBits->record->chrom;
+if (chrom[strlen(chrom) - 1] == 'Y')
+    haploid = vcfBitsSubjectCount(vBits);
+else if (chrom[strlen(chrom) - 1] == 'X')  // chrX is tricky: males are haploid except in PAR
+    {
+    struct vcfRecord *record = vBits->record;
+    struct vcfFile *vcff = record->file;
+
+    // parse genotypes if needed
+    if (record->genotypes == NULL)
+        vcfParseGenotypes(record);
+
+    // walk through genotypes
+    int ix = 0;
+    for ( ; ix < vcff->genotypeCount;ix++)
+        {
+        if (record->genotypes[ix].isHaploid)
+            haploid++;
+        }
+    }
+return haploid;
+}
+
+int vBitsSubjectChromCount(struct variantBits *vBits)
+// Returns the chromosomes in the VCF dataset that are covered at this location
+{
+int haploid = vBitsHaploidCount(vBits);
+int diploid = vcfBitsSubjectCount(vBits) - haploid;
+return ((diploid * 2) + haploid);
+}
+
+struct variantBits *vcfRecordsToVariantBits(struct vcfFile *vcff, struct vcfRecord *records,
+                                            boolean phasedOnly, boolean homozygousOnly,
+                                            boolean unphasedBits)
+// Returns list of bit arrays covering all genotypes/haplotype/alleles per record for each record
+// provided.  If records is NULL will use vcff->records. Bit map has one slot per genotype
+// containing 2 slots for haplotypes and 1 or 2 bits per allele. The normal (simple) case of
+// 1 reference and 1 alternate allele results in 1 allele bit with 0:ref. Two or three alt alleles
+// is represented by two bits per allele (>3 non-reference alleles unsupported).
+// If phasedOnly, unphased haplotype bits will be set only if both agree (00 is uninterpretable)
+// Haploid genotypes (e.g. chrY) and homozygousOnly bitmaps contain 1 haplotype slot.
+// If unphasedBits, then vBits->unphased will contain a bitmap with 1s for all unphased genotypes.
+// NOTE: allocated from vcff pool, so closing file or flushing reusePool will invalidate this.
+{
+struct variantBits *vBitsList = NULL;
+
+struct vcfRecord *record = records ? records : vcff->records;
+for (;record != NULL; record = record->next)
+    {
+    struct variantBits *vBits = vcfOneRecordToVariantBits(vcff, record, phasedOnly, homozygousOnly);
+    if (unphasedBits)
+        vBits->unphased = vcfRecordUnphasedBits(vcff, record);
+    slAddHead(&vBitsList,vBits);
+    }
+slReverse(&vBitsList);
+
+return vBitsList;
+}
+
+int vcfVariantBitsDropSparse(struct variantBits **vBitsList, int haploGenomeMin,
+                             boolean dropRefMissing)
+// Drops vBits found in less than a minimum number of haplotype genomes.  Supplying 1 will
+// drop variants found in no haplotype genomes.  Declaring dropRefMissing will drop variants
+// in all haplotype genomes (variants where reference is not represented in dataset and
+// *might* be in error). Returns count of vBits structure that were dropped.
+{
+struct variantBits *vBitsKeep = NULL;
+struct variantBits *vBits = NULL;
+int dropped = 0;
+while ((vBits = slPopHead(vBitsList)) != NULL)
+    {
+    if (vBits->bitsOn >= haploGenomeMin)
+        slAddHead(&vBitsKeep,vBits);
+    else
+        dropped++;  // if not demoted, drop memory, since this is on lm
+    }
+*vBitsList = vBitsKeep;
+
+if (dropRefMissing)
+    {
+    vBitsKeep = NULL;
+    while ((vBits = slPopHead(vBitsList)) != NULL)
+        {
+        boolean foundRef = FALSE;
+        int genoIx = 0;
+        for (; !foundRef && genoIx < vBits->genotypeSlots; genoIx++)
+            {
+            int haploIx = 0;
+            for (; !foundRef && haploIx < vBits->haplotypeSlots; haploIx++)
+                {
+                if (bitCountRange(vBits->bits,
+                                  vBitsSlot(vBits,genoIx,haploIx,0), vBits->alleleSlots) == 0)
+                    foundRef = TRUE;
+                }
+            }
+
+        if (foundRef)
+            slAddHead(&vBitsKeep,vBits);
+        else  // drop memory, since this is on lm
+            dropped++;  // if not demoted, drop memory, since this is on lm
+        }
+    *vBitsList = vBitsKeep;
+    }
+else
+    slReverse(vBitsList);
+
+return dropped;
+}
+
+int vcfVariantBitsAlleleOccurs(struct variantBits *vBits, unsigned char alleleIx,
+                               boolean homozygousOrHaploid)
+// Counts the number of times a particular allele occurs in the subjects*chroms covered.
+// If homozygousOrHaploid then the allele must occur in both chroms to be counted
+{
+assert((vBits->alleleSlots == 1 && alleleIx <= 1)
+    || (vBits->alleleSlots == 2 && alleleIx <= 3));
+
+// To count ref, we need to know the number of subjects the bitmap covers
+// chrX is the culprit here since it is haploid/diploid
+int subjTotal = vBits->genotypeSlots * vBits->haplotypeSlots;
+if (alleleIx == 0)
+    subjTotal = vBitsSubjectChromCount(vBits);
+
+// Simple case can be taken care of easily
+if (vBits->alleleSlots == 1
+&&  (!homozygousOrHaploid || vBits->haplotypeSlots == 1))
+    {
+    if (alleleIx == 1)           // non-reference
+        return vBits->bitsOn;
+    else                         // reference
+        return subjTotal - vBits->bitsOn;
+    }
+
+// Otherwise, we have to walk the bitmap
+int occurs           = 0;
+int occursHomozygous = 0;
+int genoIx = 0;
+for (; genoIx < vBits->genotypeSlots; genoIx++)
+    {
+    int haploIx = 0;
+    int occursThisSubject = 0;
+    for (; haploIx < vBits->haplotypeSlots; haploIx++)
+        {
+        int bitSlot = vBitsSlot(vBits,genoIx,haploIx,0);
+        switch (alleleIx)
+            {
+            case 0: if (bitCountRange(vBits->bits,bitSlot, vBits->alleleSlots) != 0)
+                        occursThisSubject++; // Any non-reference bit
+                    break;
+            case 1: if (vBits->alleleSlots == 1)
+                        {
+                        if (bitReadOne(vBits->bits,bitSlot))
+                            occursThisSubject++;
+                        }
+                    else
+                        {
+                        if ( bitReadOne(vBits->bits,bitSlot)
+                        &&  !bitReadOne(vBits->bits,bitSlot + 1) )
+                            occursThisSubject++;
+                        }
+                    break;
+            case 2: if (!bitReadOne(vBits->bits,bitSlot)
+                    &&   bitReadOne(vBits->bits,bitSlot + 1) )
+                        occursThisSubject++;
+                    break;
+            case 3: if (bitCountRange(vBits->bits,bitSlot, 2) == 2)
+                        occursThisSubject++;
+                    break;
+            default:
+                    break;
+            }
+        }
+    occurs += occursThisSubject;
+    if ((alleleIx == 0 && occursThisSubject == 0)
+    ||  (alleleIx >  0 && vBits->haplotypeSlots == occursThisSubject))
+        occursHomozygous++;
+    }
+if (alleleIx == 0)
+    occurs = subjTotal - occurs;
+
+return (homozygousOrHaploid ? occursHomozygous : occurs);
+}
+
+int vcfVariantBitsReferenceOccurs(struct vcfFile *vcff, struct variantBits *vBitsList,
+                                  boolean homozygousOrHaploid)
+// For an entire list of vBits structs, counts the times the reference allele occurs.
+// If homozygousOrHaploid then the reference allele must occur in both chroms to be counted
+{
+assert(vBitsList != NULL);
+struct variantBits *vBits = vBitsList;
+// Allocate temporary vBits struct which can hold the 'OR' version of all bitmaps in list
+struct lm *lm = vcfFileLm(vcff);
+struct variantBits *vBitsTemp;
+lmAllocVar(lm,vBitsTemp);
+vBitsTemp->genotypeSlots  = vBits->genotypeSlots;
+vBitsTemp->haplotypeSlots = vBits->haplotypeSlots;
+vBitsTemp->alleleSlots    = vBits->alleleSlots;
+vBitsTemp->record         = vBits->record;
+
+int bitSlots = vBitsSlotCount(vBits);
+vBitsTemp->bits = lmBitClone(lm,vBits->bits, bitSlots);
+
+
+for (vBits = vBits->next; vBits != NULL; vBits = vBits->next)
+    bitOr(vBitsTemp->bits, vBits->bits, bitSlots);
+
+vBitsTemp->bitsOn = bitCountRange(vBitsTemp->bits,0,bitSlots);
+
+// Note the memory will be leaked but it is lm
+return vcfVariantBitsAlleleOccurs(vBitsTemp, 0, homozygousOrHaploid);
+}
+
+int vcfVariantMostPopularCmp(const void *va, const void *vb)
+// Compare to sort variantBits based upon how many genomes/chrom has the variant
+// This can be used to build haploBits in most populous order for tree building
+{
+const struct variantBits *a = *((struct variantBits **)va);
+const struct variantBits *b = *((struct variantBits **)vb);
+//int ret = memcmp(a->bits, b->bits, bitToByteSize(vBitsSlotCount(a)));
+int ret = (b->bitsOn - a->bitsOn); // higher bits first (descending order)
+if (ret == 0)
+    { // sort deterministically
+    ret = (a->record->chromStart - b->record->chromStart);
+    if (ret == 0)
+        ret = (a->record->chromEnd - b->record->chromEnd);
+    }
+return ret;
+}
+
+struct haploBits *vcfVariantBitsToHaploBits(struct vcfFile *vcff, struct variantBits *vBitsList,
+                                            boolean ignoreReference)
+// Converts a set of variant bits to haplotype bits, resulting in one bit struct
+// per haplotype genome that has non-reference variations.  If ignoreReference, only
+// haplotype genomes with at least one non-reference variant are returned.
+// A haploBit array has one variant slot per vBit struct and one or more bits per allele.
+// NOTE: allocated from vcff pool, so closing file or flushing reusePool will invalidate this.
+{
+// First determine dimensions
+int variantSlots = 0;
+unsigned char alleleSlots  = 1;
+struct variantBits *vBits = vBitsList;
+for ( ; vBits != NULL; vBits = vBits->next)
+    {
+    variantSlots++;
+    if (vBits->alleleSlots == 2)
+        alleleSlots = 2; // Will normalize allele slots across all variants.
+    // This should catch any problems where chrX is haploid/diploid
+    assert(vBitsList->haplotypeSlots == vBits->haplotypeSlots);
+    }
+
+
+// Now create a struct per haplotype
+struct lm *lm = vcfFileLm(vcff);
+struct haploBits *hBitsList = NULL;
+int genoIx = 0;
+for (; genoIx < vBitsList->genotypeSlots; genoIx++)
+    {
+    int haploIx = 0;
+    for (; haploIx < vBitsList->haplotypeSlots; haploIx++)
+        {
+        // allocate struct
+        struct haploBits *hBits;
+        lmAllocVar(lm,hBits);
+        hBits->variantSlots = variantSlots;
+        hBits->alleleSlots  = alleleSlots;
+        hBits->haploGenomes = 1;
+        int bitCount = hBitsSlotCount(hBits);
+
+        // allocate bits
+        Bits *bits = lmBitAlloc(lm,bitCount);
+        hBits->bits = bits;
+
+        int variantIx = 0;
+        for (vBits =  vBitsList; vBits != NULL; vBits = vBits->next, variantIx++)
+            {
+            if (bitReadOne(vBits->bits,vBitsSlot(vBits,genoIx,haploIx,0)))
+                {
+                bitSetOne(        bits,hBitsSlot(hBits,variantIx,     0));
+                hBits->bitsOn++;
+                }
+
+            if (vBits->alleleSlots == 2) // (hBit->alleleSlot will also == 2)
+                {
+                if (bitReadOne(vBits->bits,vBitsSlot(vBits,genoIx,haploIx,1)))
+                    {
+                    bitSetOne(        bits,hBitsSlot(hBits,variantIx,     1));
+                    hBits->bitsOn++;
+                    }
+                }
+            }
+
+        // gonna keep it? so flesh it out (ignoreRef means > 0 && < all)
+        if (!ignoreReference || hBits->bitsOn)
+            {
+            hBits->genomeIx  = genoIx;
+            hBits->haploidIx = haploIx;
+            struct vcfRecord *record = vBitsList->record; // any will do
+            struct vcfGenotype *gt = &(record->genotypes[genoIx]);
+
+            if (hBits->bitsOn                   // if including reference, then chrX could
+            ||  haploIx == 0 || !gt->isHaploid) // have unused diploid positions!
+                {
+                if (gt->isHaploid || vBitsList->haplotypeSlots == 1)
+                    { // chrX will have haplotypeSlots==2 but be haploid for this subject.
+                      // Meanwhile if vBits were for homozygous only,  haplotypeSlots==1
+                    //assert(haploIx == 0);
+                    hBits->ids = lmCloneString(lm,gt->id);
+                    }
+                else
+                    {
+                    int sz = strlen(gt->id) + 3;
+                    hBits->ids = lmAlloc(lm,sz);
+                    safef(hBits->ids,sz,"%s-%c",gt->id,'a' + haploIx);
+                    }
+                slAddHead(&hBitsList,hBits);
+                }
+            }
+        //else
+        //    haploBitsFree(&hBits); // lm so just abandon
+        }
+    }
+slReverse(&hBitsList);
+
+return hBitsList;
+}
+
+/*
+int vcfHaploBitsOnCmp(const void *va, const void *vb)
+// Compare to sort haploBits based upon how many bits are on
+{
+const struct haploBits *a = *((struct haploBits **)va);
+const struct haploBits *b = *((struct haploBits **)vb);
+int ret = (a->bitsOn - b->bitsOn);
+if (ret == 0)
+    { // sort deterministically
+    ret = (a->genomeIx - b->genomeIx);
+    if (ret == 0)
+        ret = (a->haploidIx - b->haploidIx);
+    }
+return ret;
+}
+*/
+
+int vcfHaploBitsMemCmp(const void *va, const void *vb)
+// Compare to sort haploBits based on bit by bit memory compare
+// When hBits has been created from vBits sorted by popularity,
+// a mem sort will then allow elmTreeGrow() to add popular variants first.
+{
+const struct haploBits *a = *((struct haploBits **)va);
+const struct haploBits *b = *((struct haploBits **)vb);
+int ret = memcmp(a->bits, b->bits, bitToByteSize(hBitsSlotCount(a)));
+if (ret == 0)
+    { // sort deterministically
+    ret = (a->genomeIx - b->genomeIx);
+    if (ret == 0)
+        ret = (a->haploidIx - b->haploidIx);
+    }
+return ret;
+}
+
+static struct haploBits *hBitsCollapsePair(struct lm *lm, struct haploBits *hBits,
+                                           struct haploBits *dupMap)
+// Adds Ids of duplicate bitmap to hBits and abandons the duplicate.
+{
+char *ids = lmAlloc(lm,strlen(dupMap->ids) + strlen(hBits->ids) + 2);
+// NOTE: Putting Dup Ids first could leave these in lowest genomeIx/haploidIx order
+sprintf(ids,"%s,%s",dupMap->ids,hBits->ids);
+hBits->ids = ids;
+hBits->haploGenomes++;
+hBits->genomeIx  = dupMap->genomeIx;  // Arbitrary but could leave lowest first
+hBits->haploidIx = dupMap->haploidIx;
+return hBits;
+}
+
+int vcfHaploBitsListCollapseIdentical(struct vcfFile *vcff, struct haploBits **phBitsList,
+                                      int haploGenomeMin)
+// Collapses a list of haploBits based upon identical bit arrays.
+// If haploGenomeMin > 1, will drop all hBits structs covering less than N haploGenomes.
+// Returns count of hBit structs removed.
+{
+struct lm *lm = vcfFileLm(vcff);
+int collapsed = 0;
+struct haploBits *hBitsPassed = NULL;
+struct haploBits *hBitsToTest = *phBitsList;
+if (hBitsToTest->next == NULL)
+    return 0;
+
+// Sort early bits first
+slSort(&hBitsToTest, vcfHaploBitsMemCmp);
+
+// Walk through those of matching size and compare
+int bitCount = hBitsSlotCount(hBitsToTest);
+int memSize = bitToByteSize(bitCount);
+struct haploBits *hBitsQ = NULL;
+while ((hBitsQ = slPopHead(&hBitsToTest)) != NULL)
+    {
+    struct haploBits *hBitsT = hBitsToTest; //hBitsQ->next; is already null.
+    for (;hBitsT != NULL;hBitsT = hBitsT->next)
+        {
+        // If the 2 bitmaps do not have the same number of bits on, they are not identical
+        if (hBitsT->bitsOn != hBitsQ->bitsOn)
+            break;
+
+        // If 2 bitmaps are identical, then collapse into one
+        if (memcmp(hBitsT->bits,hBitsQ->bits,memSize) == 0)
+            {     // collapse
+            hBitsCollapsePair(lm,hBitsT,hBitsQ);
+            hBitsQ = NULL; // abandon lm memory
+            collapsed++;
+            break;  // hBitsQ used up so make hBitsT the new Q.
+            }
+        }
+
+    // If hBitsQ survived the collapsing, then don't loose it.
+    if (hBitsQ != NULL)
+        slAddHead(&hBitsPassed,hBitsQ);
+    }
+
+// Now that we have collapsed hBits, we can drop any that are not found in enough subjects
+if (haploGenomeMin > 1)
+    {
+    hBitsToTest = hBitsPassed;
+    hBitsPassed = NULL;
+    while ((hBitsQ = slPopHead(hBitsToTest)) != NULL)
+        {
+        if (hBitsQ->haploGenomes >= haploGenomeMin)
+            slAddHead(&hBitsPassed,hBitsQ);
+        else  // drop memory, since this is on lm
+            collapsed++;
+        }
+    // double pop passes means no reverse required.
+    }
+else
+    slReverse(&hBitsPassed);
+
+*phBitsList = hBitsPassed;
+
+return collapsed;
+}
+
+unsigned char vcfHaploBitsToVariantAlleleIx(struct haploBits *hBits,int bitIx)
+// Given a hBits struct and bitIx, what is the actual variant allele ix
+// to use when accessing the vcfRecord?  NOTE: here 0 is reference allele
+{
+if (hBits->alleleSlots == 1)
+    return bitReadOne(hBits->bits,bitIx); // 0 or 1
+else
+    {
+    assert(hBits->alleleSlots == 2); // Only supports 1-3 variants encoded as 2 bits
+    unsigned char varIx = 0;
+    int bit = variantSlotFromBitIx(hBits,bitIx);
+    if (bitReadOne(hBits->bits,bit++))
+        varIx = 1;  // Note that bitmaps represent 1,2,3 as 10,01,11
+    if (bitReadOne(hBits->bits,bit))
+        varIx += 2;
+    return varIx;
+    }
+}
+
+enum elmNodeOverlap vcfHaploBitsCmp(const struct slList *elA, const struct slList *elB,
+                                    int *matchWeight, void *extra)
+// HaploBits compare routine for building tree of relations using elmTreeGrow().
+{
+const struct haploBits *a = (struct haploBits *)elA;
+const struct haploBits *b = (struct haploBits *)elB;
+
+int bitCount = hBitsSlotCount(a);
+int and = bitAndCount(a->bits,b->bits,bitCount);
+if (matchWeight)
+    *matchWeight = and;
+if (and == 0)// && a->bitsOn > 0)
+    return enoExcluding; // nothing in common
+if (a->bitsOn == and)
+    {
+    if (b->bitsOn == and)
+        return enoEqual; // perfect match
+    else
+        return enoSubset;
+    }
+// super and mixed?
+if (b->bitsOn == and)
+    return enoSuperset;
+return enoMixed;
+}
+
+struct slList *vcfHaploBitsMatching(const struct slList *elA, const struct slList *elB,
+                                    void *extra)
+// Returns a HaploBits structure representing the common parts of elements A and B.
+// Used with elmTreeGrow() to create nodes that are the common parts between leaves/branches.
+{
+struct haploBits *a = (struct haploBits *)elA;
+struct haploBits *b = (struct haploBits *)elB;
+struct lm *lm = extra;
+
+// If the 2 bitmaps are equal, then collapse into a single struct
+if (enoEqual == vcfHaploBitsCmp(elA,elB,NULL,extra))
+    {
+    if (hBitsIsReal(a)) // bitmap represents variants on at least one subject chromosome
+        {
+        assert(!hBitsIsReal(b));  // Won't always work but hBits have been precollapsed
+        if (hBitsIsReal(b)) // Should not be if these have already been collapsed.
+            {
+            hBitsCollapsePair(lm,a,b);    // a is real, b is real so collapse into one
+            //haploBitsFreeList(&b);   // lm so just abandon
+            return (struct slList *)a;
+            }
+        else
+            return (struct slList *)a; // a is real, b is not so just use a
+        }
+    else if (hBitsIsReal(b))
+        return (struct slList *)b;    // b is real, a is not so just use b
+    }
+
+// Must make non "real" bitmap which is the common bits of a and b
+struct haploBits *match;
+lmAllocVar(lm,match);
+match->alleleSlots  = a->alleleSlots;
+match->variantSlots = a->variantSlots;
+match->haploGenomes = 0;  // Marking this as a subset
+
+int bitCount  = hBitsSlotCount(match);
+match->bits = lmBitClone(lm,a->bits, bitCount);
+bitAnd(match->bits, b->bits, bitCount);
+match->bitsOn = bitCountRange(match->bits, 0, bitCount);
+
+return (struct slList *)match;
+}
diff --git a/gbtools/src/blatSrc/lib/verbose.c b/gbtools/src/blatSrc/lib/verbose.c
new file mode 100644
index 0000000..2a037a0
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/verbose.c
@@ -0,0 +1,131 @@
+/* verbose.c - write out status messages according to the
+ * current verbosity level.  These messages go to stderr. */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "portable.h"
+#include "verbose.h"
+
+
+static int logVerbosity = 1;	/* The level of log verbosity.  0 is silent. */
+static FILE *logFile;	/* File to log to. */
+
+static boolean checkedDotsEnabled = FALSE;  /* have we check for dot output
+                                             * being enabled? */
+static boolean dotsEnabled = FALSE;         /* is dot output enabled? */
+
+void verboseVa(int verbosity, char *format, va_list args)
+/* Log with at given verbosity vprintf formatted args. */
+{
+if (verbosity <= logVerbosity)
+    {
+    if (logFile == NULL)
+        logFile = stderr;
+    vfprintf(logFile, format, args);
+    fflush(logFile);
+    }
+}
+
+void verbose(int verbosity, char *format, ...)
+/* Write printf formatted message to log (which by
+ * default is stderr) if global verbose variable
+ * is set to verbosity or higher. */
+{
+va_list args;
+va_start(args, format);
+verboseVa(verbosity, format, args);
+va_end(args);
+}
+
+static long lastTime = -1;  // previous call time.
+
+void verboseTimeInit(void)
+/* Initialize or reinitialize the previous time for use by verboseTime. */
+{
+lastTime = clock1000();
+}
+
+void verboseTime(int verbosity, char *label, ...)
+/* Print label and how long it's been since last call.  Start time can be
+ * initialized with verboseTimeInit, otherwise the elapsed time will be
+ * zero. */
+{
+assert(label != NULL);  // original version allowed this, but breaks some GCCs
+if (lastTime < 0)
+    verboseTimeInit();
+long time = clock1000();
+va_list args;
+va_start(args, label);
+verboseVa(verbosity, label, args);
+verbose(verbosity, ": %ld millis\n", time - lastTime);
+lastTime = time;
+va_end(args);
+}
+
+
+boolean verboseDotsEnabled()
+/* check if outputting of happy dots are enabled.  They will be enabled if the
+ * verbosity is > 0, stderr is a tty and we don't appear to be running an
+ * emacs shell. */
+{
+if (!checkedDotsEnabled)
+    {
+    if (logFile == NULL)
+        logFile = stderr;
+    dotsEnabled = (logVerbosity > 0) && isatty(fileno(logFile));
+    if (dotsEnabled)
+        {
+        /* check for an possible emacs shell */
+        char *emacs = getenv("emacs");
+        char *term = getenv("TERM");
+        if ((emacs != NULL) && (emacs[0] == 't'))
+            dotsEnabled = FALSE;
+        else if ((term != NULL) && sameString(term, "dumb"))
+            dotsEnabled = FALSE;
+        }
+    checkedDotsEnabled = TRUE;
+    }
+return dotsEnabled;
+}
+
+void verboseDot()
+/* Write I'm alive dot (at verbosity level 1) */
+{
+if (verboseDotsEnabled())
+    verbose(1, ".");
+}
+
+void verboseSetLevel(int verbosity)
+/* Set verbosity level in log.  0 for no logging,
+ * higher number for increasing verbosity. */
+{
+logVerbosity = verbosity;
+checkedDotsEnabled = FALSE; /* force rechecking of dots enabled */
+}
+
+int verboseLevel(void)
+/* Get verbosity level. */
+{
+return logVerbosity;
+}
+
+void verboseSetLogFile(char *name)
+/* Set logFile for verbose messages overrides stderr. */
+{
+if (sameString(name, "stdout"))
+    logFile = stdout;
+else if (sameString(name, "stderr"))
+    logFile = stderr;
+else
+    logFile = mustOpen(name, "w");
+}
+
+FILE *verboseLogFile()
+/* Get the verbose log file. */
+{
+if (logFile == NULL)
+    logFile = stderr;
+return logFile;
+}
diff --git a/gbtools/src/blatSrc/lib/wildcmp.c b/gbtools/src/blatSrc/lib/wildcmp.c
new file mode 100644
index 0000000..1fa1309
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/wildcmp.c
@@ -0,0 +1,116 @@
+/* Wildcard matching. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+
+
+static int subMatch(const char *str, const char *wild, char single, char multi)
+/* Returns number of characters that match between str and wild up
+ * to the next wildcard in wild (or up to end of string.). */
+{
+int len = 0;
+
+for(;;)
+    {
+    if(toupper(*str++) != toupper(*wild++) )
+        return(0);
+    ++len;
+    char c = *wild;
+    if (c == 0 || c == single || c == multi)
+       return len;
+    }
+}
+
+boolean anyWild(const char *string)
+/* Return TRUE if any wild card characters in string. */
+{
+char c;
+while ((c = *string++) != 0)
+    {
+    if (c == '?' || c == '*')
+        return TRUE;
+    }
+return FALSE;
+}
+
+static boolean globMatch(const char *wildCard, const char *string, char single, char multi)
+/* does a case sensitive wild card match with a string.
+ * * matches any string or no character.
+ * ? matches any single character.
+ * anything else etc must match the character exactly. */
+{
+boolean matchStar = 0;
+int starMatchSize;
+char c;
+
+for(;;)
+    {
+NEXT_WILD:
+    c = *wildCard;
+    if (c == 0)
+	{
+	if(matchStar)
+	    {
+	    while(*string++)
+		;
+	    return TRUE;
+	    }
+	else if(*string)
+	    return FALSE;
+	else
+	    return TRUE;
+	}
+    else if (c == multi)
+	{
+	matchStar = TRUE;
+	}
+    else if (c == single)
+	{
+	if(*string == 0)
+	    return FALSE; /* out of string, no match for ? */
+	++string;
+	}
+    else
+	{
+	if(matchStar)
+	    {
+	    for(;;)
+		{
+		if(*string == 0) /* if out of string no match */
+		    return FALSE;
+
+		/* note matchStar is re-used here for substring
+		 * after star match length */
+		if((starMatchSize = subMatch(string,wildCard,single,multi)) != 0)
+		    {
+		    string += starMatchSize;
+		    wildCard += starMatchSize;
+		    matchStar = FALSE;
+		    goto NEXT_WILD;
+		    }
+		++string;
+		}
+	    }
+
+	/* default: they must be equal or no match */
+	if(toupper(*string) != toupper(*wildCard))
+	    return FALSE;
+	++string;
+	}
+    ++wildCard;
+    }
+}
+
+boolean wildMatch(const char *wildCard, const char *string)
+/* Match using * and ? wildcards. */
+{
+return globMatch(wildCard, string, '?', '*');
+}
+
+boolean sqlMatchLike(char *wildCard, char *string)
+/* Match using % and _ wildcards. */
+{
+return globMatch(wildCard, string, '_', '%');
+}
diff --git a/gbtools/src/blatSrc/lib/wormdna.c b/gbtools/src/blatSrc/lib/wormdna.c
new file mode 100644
index 0000000..ad50ca8
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/wormdna.c
@@ -0,0 +1,1212 @@
+/* wormDna - Stuff for finding worm DNA and annotation features.
+ * This is pretty much the heart of the cobbled-together 'database'
+ * behind the intronerator. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "dnautil.h"
+#include "dnaseq.h"
+#include "fa.h"
+#include "gdf.h"
+#include "nt4.h"
+#include "snof.h"
+#include "wormdna.h"
+#include "cda.h"
+#include "sig.h"
+#include "dystring.h"
+
+
+static char *jkwebDir = NULL;
+
+static char *cdnaDir = NULL;
+static char *featDir = NULL;
+static char *nt4Dir = NULL;
+static char *sangerDir = NULL;
+static char *genieDir = NULL;
+static char *xenoDir = NULL;
+
+static void getDirs()
+/* Look up the directories where our data is stored. */
+{
+if (jkwebDir == NULL)
+    {
+    char buf[512];
+    
+    /* Look up directory where directory pointer files are stored
+     * in environment string if it's there. */
+    if ((jkwebDir = getenv("JKWEB")) == NULL)
+        jkwebDir = "";
+
+    sprintf(buf, "%scdna.dir", jkwebDir);
+    firstWordInFile(buf, buf, sizeof(buf));
+    cdnaDir = cloneString(buf);
+
+    sprintf(buf, "%sfeat.dir", jkwebDir);
+    firstWordInFile(buf, buf, sizeof(buf));
+    featDir = cloneString(buf);
+
+    sprintf(buf, "%snt4.dir", jkwebDir);
+    firstWordInFile(buf, buf, sizeof(buf));
+    nt4Dir = cloneString(buf);
+
+    sprintf(buf, "%ssanger/", featDir); 
+    sangerDir = cloneString(buf);
+
+    sprintf(buf, "%sgenie/", featDir);
+    genieDir = cloneString(buf);
+
+    sprintf(buf, "%sxeno.dir", jkwebDir);
+    firstWordInFile(buf, buf, sizeof(buf));
+    xenoDir = cloneString(buf);
+    }
+}
+
+char *wormFeaturesDir()
+/* Return the features directory. (Includes trailing slash.) */
+{
+getDirs();
+return featDir;
+}
+
+char *wormChromDir()
+/* Return the directory with the chromosomes. */
+{
+getDirs();
+return nt4Dir;
+}
+
+char *wormCdnaDir()
+/* Return directory with cDNA data. */
+{
+getDirs();
+return cdnaDir;
+}
+
+char *wormSangerDir()
+/* Return directory with Sanger specific gene predictions. */
+{
+getDirs();
+return sangerDir;
+}
+
+char *wormGenieDir()
+/* Return directory with Genie specific gene predictions. */
+{
+getDirs();
+return genieDir;
+}
+
+char *wormXenoDir()
+/* Return directory with cross-species alignments. */
+{
+getDirs();
+return xenoDir;
+}
+
+static char *chromIds[] = {"i", "ii", "iii", "iv", "v", "x", "m", };
+
+void wormChromNames(char ***retNames, int *retNameCount)
+/* Get list of worm chromosome names. */
+{
+*retNames = chromIds;
+*retNameCount = ArraySize(chromIds);
+}
+
+int wormChromIx(char *name)
+/* Return index of worm chromosome. */
+{
+return stringIx(name, chromIds);
+}
+
+char *wormChromForIx(int ix)
+/* Given ix, return worm chromosome official name. */
+{
+assert(ix >= 0 && ix <= ArraySize(chromIds));
+return chromIds[ix];
+}
+
+char *wormOfficialChromName(char *name)
+/* This returns a pointer to our official string for the chromosome name.
+ * (This allows some routines to do direct pointer comparisons rather
+ * than string comparisons.) */
+{
+int ix = wormChromIx(name);
+if (ix < 0) return NULL;
+return chromIds[ix];
+}
+
+
+static struct snof *cdnaSnof = NULL;
+static FILE *cdnaFa = NULL;
+
+static void wormCdnaCache()
+/* Set up to read cDNAs */
+{
+getDirs();
+if (cdnaSnof == NULL)
+    {
+    char buf[512];
+
+    sprintf(buf, "%s%s", cdnaDir, "allcdna");
+    cdnaSnof = snofMustOpen(buf);
+    sprintf(buf, "%s%s", cdnaDir, "allcdna.fa");
+    cdnaFa = mustOpen(buf, "rb");
+    }
+}
+
+void wormCdnaUncache()
+/* Tear down structure for reading cDNAs. */
+{
+snofClose(&cdnaSnof);
+carefulClose(&cdnaFa);
+freez(&cdnaDir);
+}
+
+void wormFreeCdnaInfo(struct wormCdnaInfo *ci)
+/* Free the mother string in the cdnaInfo.  (The info structure itself normally isn't
+ * dynamically allocated. */
+{
+freeMem(ci->motherString);
+zeroBytes(ci, sizeof(*ci));
+}
+
+static char *realInfoString(char *s)
+/* Returns NULL if s is just "?", the NULL placeholder. */
+{
+if (s[0] == '?' && s[1] == 0) return NULL;
+return s;
+}
+
+static void parseRestOfCdnaInfo(char *textInfo, struct wormCdnaInfo *retInfo)
+/* Parse text info string into a binary structure retInfo. */
+{
+int wordCount;
+char *words[32];
+char *s;
+
+wordCount = chopString(textInfo, "|", words, ArraySize(words));
+if (wordCount < 8)
+    errAbort("Expecting at least 8 fields in cDNA database, got %d", wordCount);
+if ((s = realInfoString(words[0])) != NULL)
+    retInfo->orientation = s[0];
+retInfo->gene = realInfoString(words[1]);
+retInfo->product = realInfoString(words[2]);
+if ((s = realInfoString(words[3])) != NULL)
+    {
+    char *parts[2];
+    int partCount;
+    partCount = chopString(s, ".", parts, ArraySize(parts));
+    if (partCount == 2)
+        {
+        retInfo->knowStart = retInfo->knowEnd = TRUE;
+        if (parts[0][0] == '<')
+            {
+            retInfo->knowStart = FALSE;
+            parts[0] += 1;
+            }
+        if (parts[1][0] == '>')
+            {
+            retInfo->knowEnd = FALSE;
+            parts[1] += 1;
+            }
+        retInfo->cdsStart = atoi(parts[0]);
+        retInfo->cdsEnd = atoi(parts[1]);
+        }
+    }
+if ((s = realInfoString(words[4])) != NULL)
+    {
+    if (sameString("embryo", s))
+        retInfo->isEmbryonic = TRUE;
+    else if (sameString("adult", s))
+        retInfo->isAdult = TRUE;
+    }
+if ((s = realInfoString(words[5])) != NULL)
+    {
+    if (sameString("herm", s))
+        retInfo->isHermaphrodite = TRUE;
+    else if (sameString("male", s))
+        retInfo->isMale = TRUE;
+    }
+
+if ((s = realInfoString(words[6])) != NULL)
+    {
+    /* Reserved. Unused currently */
+    }
+retInfo->description = realInfoString(words[7]);
+}
+
+void wormFaCommentIntoInfo(char *faComment, struct wormCdnaInfo *retInfo)
+/* Process line from .fa file containing information about cDNA into binary
+ * structure. */
+{
+if (retInfo)
+    {
+    char *s;
+    zeroBytes(retInfo, sizeof(*retInfo));
+    /* Separate out first word and use it as name. */
+    s = strchr(faComment, ' ');
+    if (s == NULL)
+        errAbort("Expecting lots of info, just got %s", faComment);
+    *s++ = 0;
+    retInfo->name = faComment+1;
+    retInfo->motherString = faComment;
+
+    parseRestOfCdnaInfo(s, retInfo);
+    }
+}
+
+boolean wormCdnaInfo(char *name, struct wormCdnaInfo *retInfo)
+/* Get info about cDNA sequence. */
+{
+char commentBuf[512];
+char *comment;
+long offset;
+
+wormCdnaCache();
+if (!snofFindOffset(cdnaSnof, name, &offset))
+    return FALSE;
+fseek(cdnaFa, offset, SEEK_SET);
+mustGetLine(cdnaFa, commentBuf, sizeof(commentBuf));
+if (commentBuf[0] != '>')
+    errAbort("Expecting line starting with > in cDNA fa file.\nGot %s", commentBuf);
+comment = cloneString(commentBuf);
+wormFaCommentIntoInfo(comment, retInfo);
+return TRUE;
+}
+
+boolean wormCdnaSeq(char *name, struct dnaSeq **retDna, struct wormCdnaInfo *retInfo)
+/* Get a single worm cDNA sequence. Optionally (if retInfo is non-null) get additional
+ * info about the sequence. */
+{
+long offset;
+char *faComment;
+char **pFaComment = (retInfo == NULL ? NULL : &faComment);
+
+wormCdnaCache();
+if (!snofFindOffset(cdnaSnof, name, &offset))
+    return FALSE;
+fseek(cdnaFa, offset, SEEK_SET);
+if (!faReadNext(cdnaFa, name, TRUE, pFaComment, retDna))
+    return FALSE;
+wormFaCommentIntoInfo(faComment, retInfo);
+return TRUE;
+}
+
+struct wormFeature *newWormFeature(char *name, char *chrom, int start, int end, char typeByte)
+/* Allocate a new feature. */
+{
+int size = sizeof(struct wormFeature) + strlen(name);
+struct wormFeature *feat = needMem(size);
+feat->chrom = chrom;
+feat->start = start;
+feat->end = end;
+feat->typeByte = typeByte;
+strcpy(feat->name, name);
+return feat;
+}
+
+
+static struct wormFeature *scanChromOffsetFile(char *dir, char *suffix, 
+    bits32 signature, int nameOffset, char *chromId, int start, int end,
+    int addEnd)
+/* Scan a chrom.pgo or chrom.cdo file for names of things that are within
+ * range. */
+{
+FILE *f;
+char fileName[512];
+bits32 sig, nameSize, entryCount;
+int entrySize;
+int *entry;
+char *name;
+bits32 i;
+struct wormFeature *list = NULL, *el;
+char *typePt;
+char typeByte;
+
+sprintf(fileName, "%s%s%s", dir, chromId, suffix);
+f = mustOpen(fileName, "rb");
+mustReadOne(f, sig);
+if (sig != signature)
+    errAbort("Bad signature on %s", fileName);
+mustReadOne(f, entryCount);
+mustReadOne(f, nameSize);
+entrySize = nameSize + nameOffset;
+entry = needMem(entrySize + 1);
+name = (char *)entry;
+name += nameOffset;
+typePt = name-1;
+for (i=0; i<entryCount; ++i)
+    {
+    mustRead(f, entry, entrySize);
+    if (entry[0] > end)
+        break;
+    if (entry[1] < start)
+        continue;
+    typeByte = *typePt;
+    el = newWormFeature(name, chromId, entry[0], entry[1]+addEnd, typeByte);
+    slAddHead(&list, el);
+    }
+slReverse(&list);
+fclose(f);
+freeMem(entry);
+return list;
+}
+
+struct wormFeature *wormCdnasInRange(char *chromId, int start, int end)
+/* Get all cDNAs that overlap the range. freeDnaSeqList the returned
+ * list when you are through with it. */
+{
+/* This routine looks through the .CDO files made by cdnaOff
+ */
+getDirs();
+return scanChromOffsetFile(cdnaDir, ".cdo", cdoSig, 2*sizeof(int)+1, 
+    chromId, start, end, 0);
+}
+
+struct wormFeature *wormSomeGenesInRange(char *chromId, int start, int end, char *gdfDir)
+/* Get info on genes that overlap range in a particular set of gene predictions. */
+{
+return scanChromOffsetFile(gdfDir, ".pgo", pgoSig, 2*sizeof(int)+1,
+    chromId, start, end, 0);
+}
+
+struct wormFeature *wormGenesInRange(char *chromId, int start, int end)
+/* Get names of all genes that overlap the range. */
+{
+/* This routine looks through the .PGO files made by makePgo
+ */
+getDirs();
+return wormSomeGenesInRange(chromId, start, end, sangerDir);
+}
+
+struct wormFeature *wormCosmidsInRange(char *chromId, int start, int end)
+/* Get names of all genes that overlap the range. */
+{
+/* This routine looks through the .COO files made by makePgo
+ */
+getDirs();
+return scanChromOffsetFile(featDir, ".coo", pgoSig, 2*sizeof(int)+1,
+    chromId, start, end, 1);
+}
+
+FILE *wormOpenGoodAli()
+/* Opens good alignment file and reads signature. 
+ * (You can then cdaLoadOne() it.) */
+{
+char fileName[512];
+getDirs();
+sprintf(fileName, "%sgood.ali", cdnaDir);
+return cdaOpenVerify(fileName);
+}
+
+struct cdaAli *wormCdaAlisInRange(char *chromId, int start, int end)
+/* Return list of cdna alignments that overlap range. */
+{
+struct cdaAli *list = NULL, *el;
+char fileName[512];
+FILE *ixFile, *aliFile;
+bits32 sig;
+int s, e;
+long fpos;
+
+aliFile = wormOpenGoodAli();
+
+sprintf(fileName, "%s%s.alx", cdnaDir, chromId);
+ixFile = mustOpen(fileName, "rb");
+mustReadOne(ixFile, sig);
+if (sig != alxSig)
+    errAbort("Bad signature on %s", fileName);
+
+for (;;)
+    {
+    if (!readOne(ixFile, s))
+        break;
+    mustReadOne(ixFile, e);
+    mustReadOne(ixFile, fpos);
+    if (e <= start)
+        continue;
+    if (s >= end)
+        break;
+    AllocVar(el);
+    fseek(aliFile, fpos, SEEK_SET);
+    el = cdaLoadOne(aliFile);
+    if (el == NULL)
+        errAbort("Truncated cdnaAli file");
+    slAddHead(&list, el);
+    }
+slReverse(&list);
+fclose(aliFile);
+fclose(ixFile);
+return list;
+}
+
+boolean nextWormCdnaAndInfo(struct wormCdnaIterator *it, struct dnaSeq **retSeq, 
+    struct wormCdnaInfo *retInfo)
+/* Return next sequence and associated info from database. */
+{
+char *faComment;
+
+if (!faReadNext(it->faFile, "unknown", TRUE, &faComment, retSeq))
+    return FALSE;
+wormFaCommentIntoInfo(faComment, retInfo);
+return TRUE;
+}
+
+struct dnaSeq *nextWormCdna(struct wormCdnaIterator *it)
+/* Return next sequence in database */
+{
+return faReadOneDnaSeq(it->faFile, "unknown", TRUE);
+}
+
+boolean wormSearchAllCdna(struct wormCdnaIterator **retSi)
+/* Set up to search entire database or worm cDNA */
+{
+char buf[512];
+struct wormCdnaIterator *it;
+
+it = needMem(sizeof(*it));
+getDirs();
+sprintf(buf, "%s%s", cdnaDir, "allcdna.fa");
+it->faFile = mustOpen(buf, "rb");
+*retSi = it;
+return TRUE;
+}
+
+void freeWormCdnaIterator(struct wormCdnaIterator **pIt)
+/* Free up iterator returned by wormSearchAllCdna() */
+{
+struct wormCdnaIterator *it = *pIt;
+if (it != NULL)
+    {
+    carefulClose(&it->faFile);
+    freez(pIt);
+    }
+}
+
+static boolean isAllAlpha(char *s)
+/* Returns TRUE if every character in string is a letter. */
+{
+char c;
+while ((c = *s++) != 0)
+    {
+    if (!isalpha(c)) return FALSE;
+    }
+return TRUE;
+}
+
+static boolean isAllDigit(char *s)
+/* Returns TRUE if every character in string is a digit. */
+{
+char c;
+while ((c = *s++) != 0)
+    {
+    if (!isdigit(c)) return FALSE;
+    }
+return TRUE;
+}
+
+boolean wormIsOrfName(char *in)
+/* Check to see if the input is formatted correctly to be
+ * an ORF. */
+{
+return strchr(in, '.') != NULL;
+}
+
+boolean wormIsGeneName(char *name)
+/* See if it looks like a worm gene name - that is
+ *   abc-12
+ * letters followed by a dash followed by a number. */
+{
+char buf[128];
+int partCount;
+strncpy(buf, name, sizeof(buf));
+partCount = chopString(buf, "-", NULL, 0);
+if (partCount == 2)
+    {
+    char *parts[2];
+    chopString(buf, "-", parts, 2);
+    return isAllAlpha(parts[0]) && isAllDigit(parts[1]);
+    }
+else
+    {
+    return FALSE;
+    }
+}
+
+struct slName *wormGeneToOrfNames(char *name)
+/* Returns list of cosmid.N type ORF names that are known by abc-12 type name. */
+{
+struct slName *synList = NULL;
+char synFileName[512];
+FILE *synFile;
+char lineBuf[128];
+int nameLen = strlen(name);
+
+/* genes are supposed to be lower case. */
+tolowers(name);
+
+/* Open synonym file and loop through each line of it */
+sprintf(synFileName, "%ssyn", wormFeaturesDir());
+if ((synFile = fopen(synFileName, "r")) == NULL)
+    errAbort("Can't find synonym file '%s'. (errno: %d)\n", synFileName, errno);
+while (fgets(lineBuf, ArraySize(lineBuf), synFile))
+    {
+    /* If first part of line matches chop up line. */
+    if (strncmp(name, lineBuf, nameLen) == 0)
+	{
+	char *syns[32];
+	int count;
+	count = chopString(lineBuf, whiteSpaceChopper, syns, ArraySize(syns));
+
+	/* Looks like we got a synonym.  Add all the aliases. */
+	if (strcmp(name, syns[0]) == 0)
+	    {
+	    int i;
+	    for (i=1; i<count; ++i)
+                slAddTail(&synList, newSlName(syns[i]));
+	    break;
+	    }
+	}
+    }
+fclose(synFile);
+return synList;
+}
+
+char *wormGeneFirstOrfName(char *geneName)
+/* Return first ORF synonym to gene. */
+{
+struct slName *synList = wormGeneToOrfNames(geneName);
+char *name;
+if (synList == NULL)
+    return NULL;
+name = cloneString(synList->name);
+slFreeList(&synList);
+return name;
+}
+
+boolean wormGeneForOrf(char *orfName, char *geneNameBuf, int bufSize)
+/* Look for gene type (unc-12 or something) synonym for cosmid.N name. */
+{
+FILE *f;
+char fileName[512];
+char lineBuf[512];
+int nameLen = strlen(orfName);
+boolean ok = FALSE;
+
+sprintf(fileName, "%sorf2gene", wormFeaturesDir());
+f = mustOpen(fileName, "r");
+while (fgets(lineBuf, sizeof(lineBuf), f))
+    {
+    if (strncmp(lineBuf, orfName, nameLen) == 0 && lineBuf[nameLen] == ' ')
+        {
+        char *words[2];
+        int wordCount;
+        wordCount = chopLine(lineBuf, words);
+        assert((int)strlen(words[1]) < bufSize);
+        strncpy(geneNameBuf, words[1], bufSize);
+        ok = TRUE;
+        break;
+        }
+    }
+fclose(f);
+return ok;
+}
+
+boolean wormInfoForGene(char *orfName, struct wormCdnaInfo *retInfo)
+/* Return info if any on ORF, or NULL if none exists. freeMem() return value. */
+{
+FILE *f;
+char fileName[512];
+char lineBuf[512];
+int nameLen;
+char *info = NULL;
+char *synName = NULL;
+int lineCount = 0;
+
+/* Make this one work for orfs as well as gene names */
+if (wormIsGeneName(orfName))
+    {
+    synName = wormGeneFirstOrfName(orfName);
+    if (synName != NULL)
+        orfName = synName;
+    }
+sprintf(fileName, "%sorfInfo", wormFeaturesDir());
+nameLen = strlen(orfName);
+f = mustOpen(fileName, "r");
+while (fgets(lineBuf, sizeof(lineBuf), f))
+    {
+    ++lineCount;
+    if (strncmp(lineBuf, orfName, nameLen) == 0 && lineBuf[nameLen] == ' ')
+        {
+        info = cloneString(lineBuf);
+        break;
+        }
+    }
+freeMem(synName);
+fclose(f);
+if (info == NULL)
+    return FALSE;
+wormFaCommentIntoInfo(info, retInfo);
+return TRUE;;
+}
+
+boolean getWormGeneDna(char *name, DNA **retDna, boolean upcExons)
+/* Get the DNA associated with a gene.  Optionally upper case exons. */
+{
+struct gdfGene *g;
+struct slName *syn = NULL;
+long lstart, lend;
+int start, end;
+int dnaSize;
+DNA *dna;
+struct wormGdfCache *gdfCache;
+
+/* Translate biologist type name to cosmid.N name */
+if (wormIsGeneName(name))
+    {
+    syn = wormGeneToOrfNames(name);
+    if (syn != NULL)
+        name = syn->name;
+    }
+if (strncmp(name, "g-", 2) == 0)
+    gdfCache = &wormGenieGdfCache;
+else
+    gdfCache = &wormSangerGdfCache;
+if ((g = wormGetSomeGdfGene(name, gdfCache)) == NULL)
+    return FALSE;
+gdfGeneExtents(g, &lstart, &lend);
+start = lstart;
+end = lend;
+/* wormClipRangeToChrom(chromIds[g->chromIx], &start, &end); */
+dnaSize = end-start;
+*retDna = dna = wormChromPart(chromIds[g->chromIx], start, dnaSize);
+
+gdfOffsetGene(g, -start);
+if (g->strand == '-')
+    {
+    reverseComplement(dna, dnaSize);
+    gdfRcGene(g, dnaSize);
+    }
+if (upcExons)
+    {
+    int i;
+    struct gdfDataPoint *pt = g->dataPoints;
+    for (i=0; i<g->dataCount; i += 2)
+        {
+        toUpperN(dna + pt[i].start, pt[i+1].start - pt[i].start);
+        }
+    }
+gdfFreeGene(g);
+return TRUE;
+}
+
+boolean getWormGeneExonDna(char *name, DNA **retDna)
+/* Get the DNA associated with a gene, without introns.  */
+{
+struct gdfGene *g;
+struct slName *syn = NULL;
+long lstart, lend;
+int start, end;
+int dnaSize;
+DNA *dna;
+int i;
+struct gdfDataPoint *pt = NULL;
+struct wormGdfCache *gdfCache;
+struct dyString *dy = newDyString(1000);
+/* Translate biologist type name to cosmid.N name */
+if (wormIsGeneName(name))
+    {
+    syn = wormGeneToOrfNames(name);
+    if (syn != NULL)
+        name = syn->name;
+    }
+if (strncmp(name, "g-", 2) == 0)
+    gdfCache = &wormGenieGdfCache;
+else
+    gdfCache = &wormSangerGdfCache;
+if ((g = wormGetSomeGdfGene(name, gdfCache)) == NULL)
+    return FALSE;
+gdfGeneExtents(g, &lstart, &lend);
+start = lstart;
+end = lend;
+/*wormClipRangeToChrom(chromIds[g->chromIx], &start, &end);*/
+dnaSize = end-start;
+dna = wormChromPart(chromIds[g->chromIx], start, dnaSize);
+
+gdfOffsetGene(g, -start);
+if (g->strand == '-')
+    {
+    reverseComplement(dna, dnaSize);
+    gdfRcGene(g, dnaSize);
+    }
+pt = g->dataPoints;
+for (i=0; i<g->dataCount; i += 2)
+    {
+    dyStringAppendN(dy, (dna+pt[i].start), (pt[i+1].start - pt[i].start));
+    }
+*retDna = cloneString(dy->string);
+dyStringFree(&dy);
+gdfFreeGene(g);
+return TRUE;
+}
+
+static void makeChromFileName(char *chromId, char *buf)
+{
+getDirs();
+sprintf(buf, "%s%s.nt4", nt4Dir, chromId);
+}
+
+void wormLoadNt4Genome(struct nt4Seq ***retNt4Seq, int *retNt4Count)
+/* Load up entire packed worm genome into memory. */
+{
+int count = ArraySize(chromIds);
+struct nt4Seq **nt4s = needMem(count*sizeof(*nt4s));
+int i;
+char fileName[512];
+
+for (i=0; i<count; ++i)
+    {
+    makeChromFileName(chromIds[i], fileName);
+    nt4s[i] = loadNt4(fileName, chromIds[i]);
+    }
+*retNt4Seq = nt4s;
+*retNt4Count = count;
+}
+
+void wormFreeNt4Genome(struct nt4Seq ***pNt4Seq)
+/* Free up packed worm genome. */
+{
+struct nt4Seq **seqs;
+int i;
+if ((seqs = *pNt4Seq) == NULL)
+    return;
+for (i=0; i<ArraySize(chromIds); ++i)
+    freeNt4(&seqs[i]);
+freez(pNt4Seq);
+}
+
+int wormChromSize(char *chrom)
+/* Return size of worm chromosome. */
+{
+static int sizes[ArraySize(chromIds)];
+int ix;
+int size;
+
+if ((ix = wormChromIx(chrom)) < 0)
+    errAbort("%s isn't a chromosome", chrom);
+size = sizes[ix];
+
+/* If we don't know it already have to get it from file. */
+if (size == 0)
+    {
+    char fileName[512];
+    makeChromFileName(chromIds[ix], fileName);
+    size = sizes[ix] = nt4BaseCount(fileName);
+    }
+return size;
+}
+
+
+DNA *wormChromPart(char *chromId, int start, int size)
+/* Return part of a worm chromosome. */
+{
+char fileName[512];
+makeChromFileName(chromId, fileName);
+return nt4LoadPart(fileName, start, size);
+}
+
+DNA *wormChromPartExonsUpper(char *chromId, int start, int size)
+/* Return part of a worm chromosome with exons in upper case. */
+{
+DNA *dna = wormChromPart(chromId, start, size);
+struct wormFeature *geneFeat = wormGenesInRange(chromId, start, start+size);
+struct wormFeature *feat;
+
+for (feat = geneFeat; feat != NULL; feat = feat->next)
+    {
+    char *name = feat->name;
+    if (!wormIsNamelessCluster(name))
+        {
+        struct gdfGene *gene = wormGetGdfGene(name);
+        gdfUpcExons(gene, feat->start, dna, size, start);
+        gdfFreeGene(gene);
+        }
+    }
+slFreeList(&geneFeat);
+return dna;
+}
+
+void wormClipRangeToChrom(char *chrom, int *pStart, int *pEnd)
+/* Make sure that we stay inside chromosome. */
+{
+int chromEnd = wormChromSize(chrom);
+int temp;
+
+/* Swap ends if reversed. */
+if (*pStart > *pEnd)
+    {
+    temp = *pEnd;
+    *pEnd = *pStart;
+    *pStart = temp;
+    }
+/* Generally speaking try to slide the range covered by
+ * start-end inside the chromosome rather than just
+ * truncating an end. */
+if (*pStart < 0)
+    {
+    *pEnd -= *pStart;
+    *pStart = 0;
+    }
+if (*pEnd > chromEnd)
+    {
+    *pStart -= *pEnd - chromEnd;
+    *pEnd = chromEnd;
+    }
+/* This handles case where the range is larger than the chromosome. */
+if (*pStart < 0)
+    *pStart = 0;
+}
+
+boolean wormParseChromRange(char *in, char **retChromId, int *retStart, int *retEnd)
+/* Chop up a string representation of a range within a chromosome and put the
+ * pieces into the return variables. Return FALSE if it isn't formatted right. */
+{
+char *words[5];
+int wordCount;
+char *chromId;
+char buf[128];
+
+strncpy(buf, in, sizeof(buf));
+wordCount = chopString(buf, "- \t\r\n:", words, ArraySize(words));
+if (wordCount != 3)
+    return FALSE;
+chromId = wormOfficialChromName(words[0]);
+if (chromId == NULL)
+    return FALSE;
+if (!isdigit(words[1][0]) || !isdigit(words[2][0]))
+    return FALSE;
+*retChromId = chromId;
+*retStart = atoi(words[1]);
+*retEnd = atoi(words[2]);
+wormClipRangeToChrom(chromId, retStart, retEnd);
+return TRUE;
+}
+
+boolean wormIsChromRange(char *in)
+/* Check to see if the input is formatted correctly to be
+ * a range of a chromosome. */
+{
+char *chromId;
+int start, end;
+boolean ok;
+ok =  wormParseChromRange(in, &chromId, &start, &end);
+return ok;
+}
+
+boolean wormFixupOrfName(char *name)
+/* Turn something into a proper cosmid.# style name. Return FALSE if it can't be done. */
+{
+char *dot = strrchr(name, '.');
+if (dot == NULL)
+    return FALSE;
+toUpperN(name, dot-name);   /* First part always upper case. */
+if (!isdigit(dot[1]))          /* Nameless cluster - just leave following digits be. */
+    return TRUE;
+else
+    tolowers(dot+1);        /* Suffix is lower case. */
+return TRUE;
+}
+
+boolean wormIsAltSplicedName(char *name)
+/* Is name in right form to be an isoform? */
+{
+char *dot = strrchr(name, '.');
+if (dot == NULL)
+    return FALSE;
+if (!isdigit(dot[1]))
+    return FALSE;
+return isalpha(dot[strlen(dot)-1]);
+}
+
+static void makeIsoformBaseName(char *name)
+{
+if (wormIsAltSplicedName(name))
+    name[strlen(name)-1] = 0;
+}
+
+static boolean findAltSpliceRange(char *name, struct snof *snof, FILE *f, 
+    char **retChrom, int *retStart, int *retEnd, char *retStrand)
+/* Return range of chromosome covered by a gene and all of it's isoforms. */
+{
+char baseName[64];
+char bName[64];
+int snIx, maxIx;
+int start = 0x7fffffff;
+int end = -start;
+char lineBuf[128];
+char *words[3];
+int wordCount;
+int baseNameSize;
+
+strcpy(baseName, name);
+makeIsoformBaseName(baseName);
+baseNameSize = strlen(baseName);
+if (!snofFindFirstStartingWith(snof, baseName, baseNameSize, &snIx))
+    return FALSE;
+maxIx = snofElementCount(snof);
+for (;snIx < maxIx; ++snIx)
+    {
+    long offset;
+    char *geneName;
+
+    snofNameOffsetAtIx(snof, snIx, &geneName, &offset);
+    if (strncmp(geneName, baseName, baseNameSize) != 0)
+        break;
+    strcpy(bName, geneName);
+    makeIsoformBaseName(bName);
+    if (sameString(baseName, bName))
+        {
+        int s, e;
+        fseek(f, offset, SEEK_SET);
+        mustGetLine(f, lineBuf, sizeof(lineBuf));
+        wordCount = chopLine(lineBuf, words);
+        assert(wordCount == 3);
+        wormParseChromRange(words[0], retChrom, &s, &e);
+        *retStrand = words[1][0];
+        if (start > s)
+            start = s;
+        if (end < e)
+            end = e;
+        }
+    }
+*retStart = start;
+*retEnd = end;
+return TRUE;
+}
+
+
+boolean wormGeneRange(char *name, char **retChrom, char *retStrand, int *retStart, int *retEnd)
+/* Return chromosome position of a chrom range, gene, ORF, cosmid, or nameless cluster. */
+{
+static struct snof *c2gSnof = NULL, *c2cSnof = NULL;
+static FILE *c2gFile = NULL, *c2cFile = NULL;
+long offset;
+char fileName[512];
+struct slName *syn = NULL;
+boolean ok;
+
+if (wormIsChromRange(name))
+    {
+    *retStrand = '.';
+    return wormParseChromRange(name, retChrom, retStart, retEnd);
+    }
+
+getDirs();
+
+/* Translate biologist type name to cosmid.N name */
+if (wormIsGeneName(name))
+    {
+    syn = wormGeneToOrfNames(name);
+    if (syn != NULL)
+	{
+        name = syn->name;
+	}
+    }
+if (wormFixupOrfName(name)) /* See if ORF, and if so make nice. */
+    {
+    if (c2gSnof == NULL)
+        {
+        sprintf(fileName, "%sc2g", featDir);
+        c2gSnof = snofMustOpen(fileName);
+        sprintf(fileName, "%sc2g", featDir);
+        c2gFile = mustOpen(fileName, "rb");
+        }
+    ok = findAltSpliceRange(name, c2gSnof, c2gFile, retChrom, retStart, retEnd, retStrand);
+    }
+else    /* Lets say it's a cosmid. */
+    {
+    char lineBuf[128];
+    char *words[3];
+    int wordCount;
+    touppers(name);
+    if (c2cSnof == NULL)
+        {
+        sprintf(fileName, "%sc2c", featDir);
+        c2cSnof = snofMustOpen(fileName);
+        sprintf(fileName, "%sc2c", featDir);
+        c2cFile = mustOpen(fileName, "rb");
+        }
+    if (!snofFindOffset(c2cSnof, name, &offset) )
+        return FALSE;
+    fseek(c2cFile, offset, SEEK_SET);
+    mustGetLine(c2cFile, lineBuf, sizeof(lineBuf));
+    wordCount = chopLine(lineBuf, words);
+    assert(wordCount == 3);
+    assert(strcmp(words[2], name) == 0);
+    assert(wormIsChromRange(words[0]));
+    *retStrand = words[1][0];
+    ok = wormParseChromRange(words[0], retChrom, retStart, retEnd);
+    }
+slFreeList(&syn);
+return ok;
+}
+
+boolean wormIsNamelessCluster(char *name)
+/* Returns true if name is of correct format to be a nameless cluster. */
+{
+char *e = strrchr(name, '.');
+if (e == NULL)
+    return FALSE;
+if (e[1] != 'N')
+    return FALSE;
+if (!isdigit(e[2]))
+    return FALSE;
+return TRUE;
+}
+
+DNA *wormGetNamelessClusterDna(char *name)
+/* Get DNA associated with nameless cluster */
+{
+char *chrom;
+int start, end;
+char strand;
+if (!wormGeneRange(name, &chrom, &strand, &start, &end))
+    errAbort("Can't find %s in database", name);
+return wormChromPart(chrom, start, end-start);
+}
+
+struct wormGdfCache wormSangerGdfCache = {&sangerDir,NULL,NULL};
+struct wormGdfCache wormGenieGdfCache = {&genieDir,NULL,NULL};
+struct wormGdfCache *defaultGdfCache = &wormSangerGdfCache;
+
+
+static void wormCacheSomeGdf(struct wormGdfCache *cache)
+/* Cache one gene prediction set. */
+{
+if (cache->snof == NULL)
+    {
+    char fileName[512];
+    char *dir;
+    bits32 sig;
+    getDirs();
+    dir = *(cache->pDir);
+    sprintf(fileName, "%sgenes", dir);
+    cache->snof = snofMustOpen(fileName);
+    sprintf(fileName, "%sgenes.gdf", dir);
+    cache->file = mustOpen(fileName, "rb");
+    mustReadOne(cache->file, sig);
+    if (sig != glSig)
+        errAbort("%s is not a good file", fileName);
+    }
+}
+
+#if 0 /* unused */
+static void wormCacheGdf()
+/* Set up for fast access to GDF file entries. */
+{
+wormCacheSomeGdf(defaultGdfCache);
+}
+#endif
+
+void wormUncacheSomeGdf(struct wormGdfCache *cache)
+/* Uncache some gene prediction set. */
+{
+snofClose(&cache->snof);
+carefulClose(&cache->file);
+}
+
+void wormUncacheGdf()
+/* Free up resources associated with fast GDF access. */
+{
+wormUncacheSomeGdf(defaultGdfCache);
+}
+
+struct gdfGene *wormGetSomeGdfGene(char *name, struct wormGdfCache *cache)
+/* Get a single gdfGene of given name. */
+{
+long offset;
+
+wormCacheSomeGdf(cache);
+if (!snofFindOffset(cache->snof, name, &offset) )
+    return NULL;
+fseek(cache->file, offset, SEEK_SET);
+return gdfReadOneGene(cache->file);
+}
+
+struct gdfGene *wormGetGdfGene(char *name)
+/* Get a single gdfGene of given name. */
+{
+return wormGetSomeGdfGene(name, defaultGdfCache);
+}
+
+struct gdfGene *wormGetSomeGdfGeneList(char *baseName, int baseNameSize, struct wormGdfCache *cache)
+/* Get all gdfGenes that start with a given name. */
+{
+int snIx;
+int maxIx;
+struct snof *snof;
+FILE *f;
+struct gdfGene *list = NULL, *el;
+
+wormCacheSomeGdf(cache);
+snof = cache->snof;
+f = cache->file;
+if (!snofFindFirstStartingWith(snof, baseName, baseNameSize, &snIx))
+    return NULL;
+
+maxIx = snofElementCount(snof);
+for (;snIx < maxIx; ++snIx)
+    {
+    long offset;
+    char *geneName;
+
+    snofNameOffsetAtIx(snof, snIx, &geneName, &offset);
+    if (strncmp(geneName, baseName, baseNameSize) != 0)
+        break;
+    fseek(f, offset, SEEK_SET);
+    el = gdfReadOneGene(f);
+    slAddTail(&list, el);
+    }
+slReverse(&list);
+return list;
+}
+
+struct gdfGene *wormGetGdfGeneList(char *baseName, int baseNameSize)
+/* Get all gdfGenes that start with a given name. */
+{
+return wormGetSomeGdfGeneList(baseName, baseNameSize, defaultGdfCache);
+}
+
+struct gdfGene *wormGdfGenesInRange(char *chrom, int start, int end, 
+    struct wormGdfCache *geneFinder)
+/* Get list of genes in range according to given gene finder. */
+{
+char *dir = NULL;
+struct gdfGene *gdfList = NULL, *gdf;
+struct wormFeature *nameList, *name;
+
+if (geneFinder == &wormSangerGdfCache)
+    dir = wormSangerDir();
+else if (geneFinder == &wormGenieGdfCache)
+    dir = wormGenieDir();
+else
+    errAbort("Unknown geneFinder line %d of %s", __LINE__, __FILE__);
+
+nameList = wormSomeGenesInRange(chrom, start, end, dir);
+for (name = nameList; name != NULL; name = name->next)
+    {
+    char *n = name->name;
+    if (!wormIsNamelessCluster(n))
+        {
+        gdf = wormGetSomeGdfGene(n, geneFinder);
+        slAddHead(&gdfList, gdf);
+        }
+    }
+slFreeList(&nameList);
+slReverse(&gdfList);
+return gdfList;
+}
+
+
diff --git a/gbtools/src/blatSrc/lib/xAli.as b/gbtools/src/blatSrc/lib/xAli.as
new file mode 100644
index 0000000..c737f7b
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/xAli.as
@@ -0,0 +1,27 @@
+table xAli
+"An alignment - like psl but includes the sequence itself"
+    (
+    uint match;  "Number of bases that match that aren't repeats"
+    uint misMatch; "Number of bases that don't match"
+    uint repMatch; "Number of bases that match but are part of repeats"
+    uint nCount;  "Number of 'N' bases"
+    uint qNumInsert; "Number of inserts in query"
+    int qBaseInsert; "Number of bases inserted in query"
+    uint tNumInsert; "Number of inserts in target"
+    int tBaseInsert; "Number of bases inserted in target"
+    char[2] strand; "+ or - for strand. First character query, second target (optional)"
+    string qName; "Query sequence name"
+    uint qSize; "Query sequence size"
+    uint qStart; "Alignment start position in query"
+    uint qEnd; "Alignment end position in query"
+    string tName; "Target sequence name"
+    uint tSize; "Target sequence size"
+    uint tStart; "Alignment start position in target"
+    uint tEnd; "Alignment end position in target"
+    uint blockCount; "Number of blocks in alignment"
+    uint[blockCount] blockSizes; "Size of each block"
+    uint[blockCount] qStarts; "Start of each block in query."
+    uint[blockCount] tStarts; "Start of each block in target."
+    lstring[blockCount] qSeq; "Query sequence for each block."
+    lstring[blockCount] tSeq; "Target sequence for each block."
+    )
diff --git a/gbtools/src/blatSrc/lib/xAli.c b/gbtools/src/blatSrc/lib/xAli.c
new file mode 100644
index 0000000..f65adff
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/xAli.c
@@ -0,0 +1,282 @@
+/* xAli.c was originally generated by the autoSql program, which also 
+ * generated xAli.h and xAli.sql.  This module links the database and
+ * the RAM representation of objects. 
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "linefile.h"
+#include "dystring.h"
+#include "sqlNum.h"
+#include "sqlList.h"
+#include "xAli.h"
+
+
+struct xAli *xAliLoad(char **row)
+/* Load a xAli from row fetched with select * from xAli
+ * from database.  Dispose of this with xAliFree(). */
+{
+struct xAli *ret;
+int sizeOne;
+
+AllocVar(ret);
+ret->blockCount = sqlUnsigned(row[17]);
+ret->match = sqlUnsigned(row[0]);
+ret->misMatch = sqlUnsigned(row[1]);
+ret->repMatch = sqlUnsigned(row[2]);
+ret->nCount = sqlUnsigned(row[3]);
+ret->qNumInsert = sqlUnsigned(row[4]);
+ret->qBaseInsert = sqlSigned(row[5]);
+ret->tNumInsert = sqlUnsigned(row[6]);
+ret->tBaseInsert = sqlSigned(row[7]);
+strcpy(ret->strand, row[8]);
+ret->qName = cloneString(row[9]);
+ret->qSize = sqlUnsigned(row[10]);
+ret->qStart = sqlUnsigned(row[11]);
+ret->qEnd = sqlUnsigned(row[12]);
+ret->tName = cloneString(row[13]);
+ret->tSize = sqlUnsigned(row[14]);
+ret->tStart = sqlUnsigned(row[15]);
+ret->tEnd = sqlUnsigned(row[16]);
+sqlUnsignedDynamicArray(row[18], &ret->blockSizes, &sizeOne);
+assert(sizeOne == ret->blockCount);
+sqlUnsignedDynamicArray(row[19], &ret->qStarts, &sizeOne);
+assert(sizeOne == ret->blockCount);
+sqlUnsignedDynamicArray(row[20], &ret->tStarts, &sizeOne);
+assert(sizeOne == ret->blockCount);
+sqlStringDynamicArray(row[21], &ret->qSeq, &sizeOne);
+assert(sizeOne == ret->blockCount);
+sqlStringDynamicArray(row[22], &ret->tSeq, &sizeOne);
+assert(sizeOne == ret->blockCount);
+return ret;
+}
+
+struct xAli *xAliLoadAll(char *fileName) 
+/* Load all xAli from a tab-separated file.
+ * Dispose of this with xAliFreeList(). */
+{
+struct xAli *list = NULL, *el;
+struct lineFile *lf = lineFileOpen(fileName, TRUE);
+char *row[23];
+
+while (lineFileRow(lf, row))
+    {
+    el = xAliLoad(row);
+    slAddHead(&list, el);
+    }
+lineFileClose(&lf);
+slReverse(&list);
+return list;
+}
+
+struct xAli *xAliCommaIn(char **pS, struct xAli *ret)
+/* Create a xAli out of a comma separated string. 
+ * This will fill in ret if non-null, otherwise will
+ * return a new xAli */
+{
+char *s = *pS;
+int i;
+
+if (ret == NULL)
+    AllocVar(ret);
+ret->match = sqlUnsignedComma(&s);
+ret->misMatch = sqlUnsignedComma(&s);
+ret->repMatch = sqlUnsignedComma(&s);
+ret->nCount = sqlUnsignedComma(&s);
+ret->qNumInsert = sqlUnsignedComma(&s);
+ret->qBaseInsert = sqlSignedComma(&s);
+ret->tNumInsert = sqlUnsignedComma(&s);
+ret->tBaseInsert = sqlSignedComma(&s);
+sqlFixedStringComma(&s, ret->strand, sizeof(ret->strand));
+ret->qName = sqlStringComma(&s);
+ret->qSize = sqlUnsignedComma(&s);
+ret->qStart = sqlUnsignedComma(&s);
+ret->qEnd = sqlUnsignedComma(&s);
+ret->tName = sqlStringComma(&s);
+ret->tSize = sqlUnsignedComma(&s);
+ret->tStart = sqlUnsignedComma(&s);
+ret->tEnd = sqlUnsignedComma(&s);
+ret->blockCount = sqlUnsignedComma(&s);
+s = sqlEatChar(s, '{');
+AllocArray(ret->blockSizes, ret->blockCount);
+for (i=0; i<ret->blockCount; ++i)
+    {
+    ret->blockSizes[i] = sqlUnsignedComma(&s);
+    }
+s = sqlEatChar(s, '}');
+s = sqlEatChar(s, ',');
+s = sqlEatChar(s, '{');
+AllocArray(ret->qStarts, ret->blockCount);
+for (i=0; i<ret->blockCount; ++i)
+    {
+    ret->qStarts[i] = sqlUnsignedComma(&s);
+    }
+s = sqlEatChar(s, '}');
+s = sqlEatChar(s, ',');
+s = sqlEatChar(s, '{');
+AllocArray(ret->tStarts, ret->blockCount);
+for (i=0; i<ret->blockCount; ++i)
+    {
+    ret->tStarts[i] = sqlUnsignedComma(&s);
+    }
+s = sqlEatChar(s, '}');
+s = sqlEatChar(s, ',');
+s = sqlEatChar(s, '{');
+AllocArray(ret->qSeq, ret->blockCount);
+for (i=0; i<ret->blockCount; ++i)
+    {
+    ret->qSeq[i] = sqlStringComma(&s);
+    }
+s = sqlEatChar(s, '}');
+s = sqlEatChar(s, ',');
+s = sqlEatChar(s, '{');
+AllocArray(ret->tSeq, ret->blockCount);
+for (i=0; i<ret->blockCount; ++i)
+    {
+    ret->tSeq[i] = sqlStringComma(&s);
+    }
+s = sqlEatChar(s, '}');
+s = sqlEatChar(s, ',');
+*pS = s;
+return ret;
+}
+
+void xAliFree(struct xAli **pEl)
+/* Free a single dynamically allocated xAli such as created
+ * with xAliLoad(). */
+{
+struct xAli *el;
+
+if ((el = *pEl) == NULL) return;
+freeMem(el->qName);
+freeMem(el->tName);
+freeMem(el->blockSizes);
+freeMem(el->qStarts);
+freeMem(el->tStarts);
+/* All strings in qSeq are allocated at once, so only need to free first. */
+if (el->qSeq != NULL)
+    freeMem(el->qSeq[0]);
+freeMem(el->qSeq);
+/* All strings in tSeq are allocated at once, so only need to free first. */
+if (el->tSeq != NULL)
+    freeMem(el->tSeq[0]);
+freeMem(el->tSeq);
+freez(pEl);
+}
+
+void xAliFreeList(struct xAli **pList)
+/* Free a list of dynamically allocated xAli's */
+{
+struct xAli *el, *next;
+
+for (el = *pList; el != NULL; el = next)
+    {
+    next = el->next;
+    xAliFree(&el);
+    }
+*pList = NULL;
+}
+
+void xAliOutput(struct xAli *el, FILE *f, char sep, char lastSep) 
+/* Print out xAli.  Separate fields with sep. Follow last field with lastSep. */
+{
+int i;
+fprintf(f, "%u", el->match);
+fputc(sep,f);
+fprintf(f, "%u", el->misMatch);
+fputc(sep,f);
+fprintf(f, "%u", el->repMatch);
+fputc(sep,f);
+fprintf(f, "%u", el->nCount);
+fputc(sep,f);
+fprintf(f, "%u", el->qNumInsert);
+fputc(sep,f);
+fprintf(f, "%d", el->qBaseInsert);
+fputc(sep,f);
+fprintf(f, "%u", el->tNumInsert);
+fputc(sep,f);
+fprintf(f, "%d", el->tBaseInsert);
+fputc(sep,f);
+if (sep == ',') fputc('"',f);
+fprintf(f, "%s", el->strand);
+if (sep == ',') fputc('"',f);
+fputc(sep,f);
+if (sep == ',') fputc('"',f);
+fprintf(f, "%s", el->qName);
+if (sep == ',') fputc('"',f);
+fputc(sep,f);
+fprintf(f, "%u", el->qSize);
+fputc(sep,f);
+fprintf(f, "%u", el->qStart);
+fputc(sep,f);
+fprintf(f, "%u", el->qEnd);
+fputc(sep,f);
+if (sep == ',') fputc('"',f);
+fprintf(f, "%s", el->tName);
+if (sep == ',') fputc('"',f);
+fputc(sep,f);
+fprintf(f, "%u", el->tSize);
+fputc(sep,f);
+fprintf(f, "%u", el->tStart);
+fputc(sep,f);
+fprintf(f, "%u", el->tEnd);
+fputc(sep,f);
+fprintf(f, "%u", el->blockCount);
+fputc(sep,f);
+if (sep == ',') fputc('{',f);
+for (i=0; i<el->blockCount; ++i)
+    {
+    fprintf(f, "%u", el->blockSizes[i]);
+    fputc(',', f);
+    }
+if (sep == ',') fputc('}',f);
+fputc(sep,f);
+if (sep == ',') fputc('{',f);
+for (i=0; i<el->blockCount; ++i)
+    {
+    fprintf(f, "%u", el->qStarts[i]);
+    fputc(',', f);
+    }
+if (sep == ',') fputc('}',f);
+fputc(sep,f);
+if (sep == ',') fputc('{',f);
+for (i=0; i<el->blockCount; ++i)
+    {
+    fprintf(f, "%u", el->tStarts[i]);
+    fputc(',', f);
+    }
+if (sep == ',') fputc('}',f);
+fputc(sep,f);
+if (sep == ',') fputc('{',f);
+for (i=0; i<el->blockCount; ++i)
+    {
+    if (sep == ',') fputc('"',f);
+    fprintf(f, "%s", el->qSeq[i]);
+    if (sep == ',') fputc('"',f);
+    fputc(',', f);
+    }
+if (sep == ',') fputc('}',f);
+fputc(sep,f);
+if (sep == ',') fputc('{',f);
+for (i=0; i<el->blockCount; ++i)
+    {
+    if (sep == ',') fputc('"',f);
+    fprintf(f, "%s", el->tSeq[i]);
+    if (sep == ',') fputc('"',f);
+    fputc(',', f);
+    }
+if (sep == ',') fputc('}',f);
+fputc(lastSep,f);
+}
+
+/* --------------------Start of human generated code. -------------------- */
+
+struct xAli *xAliNext(struct lineFile *lf)
+/* Read next line from file and convert it to xAli.  Return
+ * NULL at eof. */
+{
+char *row[23];
+if (!lineFileRow(lf, row))
+    return NULL;
+return xAliLoad(row);
+}
diff --git a/gbtools/src/blatSrc/lib/xAli.sql b/gbtools/src/blatSrc/lib/xAli.sql
new file mode 100644
index 0000000..a0a54f5
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/xAli.sql
@@ -0,0 +1,33 @@
+# xAli.sql was originally generated by the autoSql program, which also 
+# generated xAli.c and xAli.h.  This creates the database representation of
+# an object which can be loaded and saved from RAM in a fairly 
+# automatic way.
+
+#An alignment - like psl but includes the sequence itself
+CREATE TABLE xAli (
+    match int unsigned not null,	# Number of bases that match that aren't repeats
+    misMatch int unsigned not null,	# Number of bases that don't match
+    repMatch int unsigned not null,	# Number of bases that match but are part of repeats
+    nCount int unsigned not null,	# Number of 'N' bases
+    qNumInsert int unsigned not null,	# Number of inserts in query
+    qBaseInsert int not null,	# Number of bases inserted in query
+    tNumInsert int unsigned not null,	# Number of inserts in target
+    tBaseInsert int not null,	# Number of bases inserted in target
+    strand char(2) not null,	# + or - for strand. First character query, second target (optional)
+    qName varchar(255) not null,	# Query sequence name
+    qSize int unsigned not null,	# Query sequence size
+    qStart int unsigned not null,	# Alignment start position in query
+    qEnd int unsigned not null,	# Alignment end position in query
+    tName varchar(255) not null,	# Target sequence name
+    tSize int unsigned not null,	# Target sequence size
+    tStart int unsigned not null,	# Alignment start position in target
+    tEnd int unsigned not null,	# Alignment end position in target
+    blockCount int unsigned not null,	# Number of blocks in alignment
+    blockSizes longblob not null,	# Size of each block
+    qStarts longblob not null,	# Start of each block in query.
+    tStarts longblob not null,	# Start of each block in target.
+    qSeq longblob not null,	# Query sequence for each block.
+    tSeq longblob not null,	# Target sequence for each block.
+              #Indices
+    PRIMARY KEY(match)
+);
diff --git a/gbtools/src/blatSrc/lib/xa.c b/gbtools/src/blatSrc/lib/xa.c
new file mode 100644
index 0000000..79a437c
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/xa.c
@@ -0,0 +1,230 @@
+/* xao.c - Manage cross-species alignments in Intronerator database. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "sig.h"
+#include "xa.h"
+
+
+void xaAliFree(struct xaAli *xa)
+/* Free up a single xaAli. */
+{
+freeMem(xa->name);
+freeMem(xa->query);
+freeMem(xa->target);
+freeMem(xa->qSym);
+freeMem(xa->tSym);
+freeMem(xa->hSym);
+freeMem(xa);
+}
+
+void xaAliFreeList(struct xaAli **pXa)
+/* Free up a list of xaAlis. */
+{
+struct xaAli *xa, *next;
+for (xa = *pXa; xa != NULL; xa = next)
+    {
+    next = xa->next;
+    xaAliFree(xa);
+    }
+*pXa = NULL;
+}
+
+int xaAliCmpTarget(const void *va, const void *vb)
+/* Compare two xaAli's to sort by ascending target positions. */
+{
+const struct xaAli *a = *((struct xaAli **)va);
+const struct xaAli *b = *((struct xaAli **)vb);
+int diff;
+if ((diff = strcmp(a->target, b->target)) == 0)
+    diff = a->tStart - b->tStart;
+return diff;
+}
+
+
+FILE *xaOpenVerify(char *fileName)
+/* Open file, verify it's the right type, and
+ * position file pointer for first xaReadNext(). */
+{
+FILE *f = mustOpen(fileName, "rb");
+return f;
+}
+
+FILE *xaIxOpenVerify(char *fileName)
+/* Open file, verify that it's a good xa index. */
+{
+FILE *f;
+bits32 sig;
+f = mustOpen(fileName, "rb");
+mustReadOne(f, sig);
+if (sig != xaoSig)
+    errAbort("Bad signature on %s", fileName);
+return f;
+}
+
+static void eatLf(FILE *f)
+/* Read next char and make sure it's a lf. */
+{
+int c;
+c = fgetc(f);
+if (c == '\r')
+    c = fgetc(f);
+if (c != '\n')
+    errAbort("Expecting new line in cross-species alignment file.");
+}
+
+static void eatThroughLf(FILE *f)
+/* Read through next lf (discarding results). */
+{
+int c;
+while ((c = fgetc(f)) != EOF)
+    if (c == '\n')
+        break;
+}
+
+/* An example line from .st file. 
+   G11A11.SEQ.c1 align 53.9% of 6096 ACTIN2~1\G11A11.SEQ:0-4999 - v:9730780-9736763 +
+         0         1     2    3   4             5               6        7          8
+ */
+
+struct xaAli *xaReadNext(FILE *f, boolean condensed)
+/* Read next xaAli from file. If condensed
+ * don't fill int query, target, qSym, tSym, or hSym. */
+{
+char line[512];
+char *words[16];
+int wordCount;
+struct xaAli *xa;
+char *parts[5];
+int partCount;
+double percentScore;
+int symCount;
+int newOffset = 0;
+char *s, *e;
+
+/* Get first line and parse out everything but the sym lines. */
+if (fgets(line, sizeof(line), f) == NULL)
+    return NULL;
+wordCount = chopLine(line, words);
+if (wordCount < 9)
+    errAbort("Short line in cross-species alignment file");
+if (wordCount == 10)
+    newOffset = 1;
+if (!sameString(words[1], "align"))
+    errAbort("Bad line in cross-species alignment file");
+AllocVar(xa);
+xa->name = cloneString(words[0]);
+s = words[5+newOffset];
+e = strrchr(s, ':');
+if (e == NULL)
+    errAbort("Bad line (no colon) in cross-species alignment file");
+*e++ = 0;
+partCount = chopString(e, "-", parts, ArraySize(parts));
+if (partCount != 2)
+    errAbort("Bad range format in cross-species alignment file");
+if (!condensed)
+    xa->query = cloneString(s);
+xa->qStart = atoi(parts[0]);
+xa->qEnd = atoi(parts[1]);
+xa->qStrand = words[6+newOffset][0];
+partCount = chopString(words[7+newOffset], ":-", parts, ArraySize(parts));
+if (!condensed)
+    xa->target = cloneString(parts[0]);
+xa->tStart = atoi(parts[1]);
+xa->tEnd = atoi(parts[2]);
+xa->tStrand = words[8+newOffset][0];
+percentScore = atof(words[2]);
+xa->milliScore = round(percentScore*10);    
+xa->symCount = symCount = atoi(words[4]);
+
+/* Get symbol lines. */
+if (condensed)
+    {
+    eatThroughLf(f);
+    eatThroughLf(f);
+    eatThroughLf(f);
+    }
+else
+    {
+    xa->qSym = needMem(symCount+1);
+    mustRead(f, xa->qSym, symCount);
+    eatLf(f);
+
+    xa->tSym = needMem(symCount+1);
+    mustRead(f, xa->tSym, symCount);
+    eatLf(f);
+
+    xa->hSym = needMem(symCount+1);
+    mustRead(f, xa->hSym, symCount);
+    eatLf(f);
+    }
+return xa;
+}
+
+struct xaAli *xaRdRange(FILE *ix, FILE *data, 
+    int start, int end, boolean condensed)
+/* Return list of all xaAlis that range from start to end.  
+ * Assumes that ix and data files are open. If condensed
+ * don't fill int query, target, qSym, tSym, or hSym. */
+{
+int s, e;
+int maxS, minE;
+long offset;
+struct xaAli *list = NULL, *xa;
+
+
+/* Scan through index file looking for things in range.
+ * When find one read it from data file and add it to list. */
+fseek(ix, sizeof(bits32), SEEK_SET);
+for (;;)
+    {
+    if (!readOne(ix, s))
+        break;
+    mustReadOne(ix, e);
+    mustReadOne(ix, offset);
+    if (s >= end)
+        break;
+    maxS = max(s, start);
+    minE = min(e, end);
+    if (minE - maxS > 0)
+        {
+        fseek(data, offset, SEEK_SET);
+        xa = xaReadNext(data, condensed);
+        slAddHead(&list, xa);
+        }
+    }
+
+slReverse(&list);
+return list;
+}
+
+struct xaAli *xaReadRange(char *rangeIndexFileName, char *dataFileName, 
+    int start, int end, boolean condensed)
+/* Return list of all xaAlis that range from start to end.  If condensed
+ * don't fill int query, target, qSym, tSym, or hSym. */
+{
+FILE *ix = xaIxOpenVerify(rangeIndexFileName);
+FILE *data = xaOpenVerify(dataFileName);
+struct xaAli *xa = xaRdRange(ix, data, start, end, condensed);
+fclose(data);
+fclose(ix);
+return xa;
+}
+
+
+char *xaAlignSuffix()
+/* Return suffix of file with actual alignments. */
+{
+return ".st";
+}
+
+char *xaChromIxSuffix()
+/* Return suffix of files that index xa's by chromosome position. */
+{
+return ".xao";
+}
+
+
+
diff --git a/gbtools/src/blatSrc/lib/xap.c b/gbtools/src/blatSrc/lib/xap.c
new file mode 100644
index 0000000..3201aa2
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/xap.c
@@ -0,0 +1,182 @@
+/* xap - XML Automatic Parser - together with autoXml this helps automatically
+ * read in automatically generated data structures.  Calls lower level routine
+ * in xp module, which originally was just a thin shell around expat. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "xap.h"
+#include "errAbort.h"
+#include "xp.h"
+
+
+void xapError(struct xap *xap, char *format, ...)
+/* Issue an error message and abort*/
+{
+va_list args;
+va_start(args, format);
+vaWarn(format, args);
+errAbort("line %d of %s", xpLineIx(xap->xp), xap->fileName);
+va_end(args);
+}
+
+static void xapStartTag(void *userData, char *name, char **atts)
+/* Handle beginning of a tag. */
+{
+struct xap *xap = userData;
+struct xapStack *stack;
+
+stack = --xap->stack;
+if (stack < xap->stackBuf)
+    xapError(xap, "xap stack overflow");
+++xap->stackDepth;
+if (stack->text == NULL)
+    stack->text = newDyString(256);
+stack->elName = (char*)name;
+if (xap->skipDepth == 0)
+    stack->object = xap->startHandler(xap, (char*)name, (char**)atts);
+if (xap->stackDepth == 1)
+    {
+    freeMem(xap->topType);
+    xap->topType = cloneString(stack->elName);
+    xap->topObject = stack->object;
+    }
+}
+
+static void xapEndTag(void *userData, char *name, char *text)
+/* Handle end of tag. */
+{
+struct xap *xap = userData;
+struct xapStack *stack;
+
+dyStringAppend(xap->stack->text, text);
+if (xap->skipDepth == 0 || xap->skipDepth <= xap->stackDepth)
+    {
+    xap->skipDepth = 0;
+    if (xap->endHandler)
+	xap->endHandler(xap, (char*)name);
+    }
+stack = xap->stack++;
+if (xap->stack > xap->endStack)
+    xapError(xap, "xap stack underflow");
+--xap->stackDepth;
+dyStringClear(stack->text);
+}
+
+#ifdef EXPAT
+static void xapText(void *userData, char *s, int len)
+/* Handle some text. */
+{
+struct xap *xap = userData;
+if (xap->skipDepth == 0)
+    dyStringAppendN(xap->stack->text, (char *)s, len);
+}
+#endif /* EXPAT */
+
+static int xapRead(void *userData, char *buf, int bufSize)
+/* Read some text. */
+{
+struct xap *xap = userData;
+return fread(buf, 1, bufSize, xap->f);
+}
+
+struct xap *xapNew(void *(*startHandler)(struct xap *xap, char *name, char **atts),
+	void (*endHandler)(struct xap *xap, char *name) , char *fileName)
+/* Create a new parse stack. */
+{
+struct xap *xap;
+AllocVar(xap);
+xap->endStack = xap->stack = xap->stackBuf + ArraySize(xap->stackBuf) - 1;
+xap->startHandler = startHandler;
+xap->endHandler = endHandler;
+xap->xp = xpNew(xap, xapStartTag, xapEndTag, xapRead, fileName);
+xap->fileName = cloneString(fileName);
+return xap;
+}
+
+void xapFree(struct xap **pXp)
+/* Free up a parse stack. */
+{
+struct xap *xap = *pXp;
+if (xap != NULL)
+    {
+    struct xapStack *stack;
+    for (stack = xap->stackBuf; stack < xap->endStack; ++stack)
+        {
+	if (stack->text != NULL)
+	   freeDyString(&stack->text);
+	}
+    xpFree(&xap->xp);
+    freeMem(xap->fileName);
+    freeMem(xap->topType);
+    freez(pXp);
+    }
+}
+
+void xapParseFile(struct xap *xap, char *fileName)
+/* Open up file and parse it all. */
+{
+xap->f = mustOpen(fileName, "r");
+xpParse(xap->xp);
+carefulClose(&xap->f);
+}
+
+void xapIndent(int count, FILE *f)
+/* Write out some spaces. */
+{
+int i;
+for (i=0; i<count; ++i)
+    {
+    fputc(' ', f);
+    }
+}
+
+void xapSkip(struct xap *xap)
+/* Skip current tag and any children.  Called from startHandler. */
+{
+xap->skipDepth = xap->stackDepth;
+}
+
+void xapParseAny(char *fileName, char *type, 
+	void *(*startHandler)(struct xap *xap, char *name, char **atts),
+	void (*endHandler)(struct xap *xap, char *name),
+	char **retType, void *retObj)
+/* Parse any object out of an XML file. 
+ * If type parameter is non-NULL, force type.
+ * example:
+ *     xapParseAny("file.xml", "das", dasStartHandler, dasEndHandler, &type, &obj); */
+{
+struct xap *xap = xapNew(startHandler, endHandler, fileName);
+void **pObj = retObj;
+xapParseFile(xap, fileName);
+if (type != NULL && !sameString(xap->topType, type))
+    xapError(xap, "Got %s, expected %s\n", xap->topType, type);
+if (retType != NULL)
+    *retType = cloneString(xap->topType);
+*pObj = xap->topObject;
+xapFree(&xap);
+}
+
+struct xap *xapOpen(char *fileName, 
+	void *(*startHandler)(struct xap *xap, char *name, char **atts),
+	void (*endHandler)(struct xap *xap, char *name))
+/* Open up an xml file, but don't start parsing it yet.
+ * Instead call xapNext to get the elements you want out of
+ * the file.  When all done call xapFree. */
+{
+struct xap *xap = xapNew(startHandler, endHandler, fileName);
+xap->f =  mustOpen(fileName, "r");
+return xap;
+}
+
+void *xapNext(struct xap *xap, char *tag)
+/* Return next item matching tag (and all of it's children). */
+{
+if (!xpParseNext(xap->xp, tag))
+    return NULL;
+if (!sameString(xap->topType, tag))
+    errAbort("Expecting %s tag, got %s tag", tag, xap->topType);
+return xap->topObject;
+}
+
diff --git a/gbtools/src/blatSrc/lib/xenshow.c b/gbtools/src/blatSrc/lib/xenshow.c
new file mode 100644
index 0000000..c776c72
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/xenshow.c
@@ -0,0 +1,65 @@
+/* xenshow - show a cross-species alignment. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "nt4.h"
+#include "xenalign.h"
+
+
+static void printMatchers(char *a, char *b, int lineSize, FILE *f)
+/* Print '|' where a[i] and b[i] match, ' ' where they don't */
+{
+int i;
+for (i=0; i<lineSize; ++i)
+   {
+   char c = ((a[i] == b[i]) ? '|' : ' ');
+   fputc(c, f);
+   }
+}
+
+static int nonDashCount(char *s, int size)
+/* Return number of characters in s[0] to s[size-1] that
+ * aren't dashes. */
+{
+int count = 0;
+int i;
+for (i=0; i<size; ++i)
+    if (s[i] != '-')
+        ++count;
+return count;
+}
+
+void xenShowAli(char *qSym, char *tSym, char *hSym, int symCount, FILE *f,
+   int qOffset, int tOffset, char qStrand, char tStrand, int maxLineSize)
+/* Print alignment and HMM symbols maxLineSize bases at a time to file. */
+{
+int i;
+int lineSize;
+int count;
+
+for (i=0; i<symCount; i += lineSize)
+    {
+    lineSize = symCount - i;
+    if (lineSize > maxLineSize) lineSize = maxLineSize;
+    mustWrite(f, qSym+i, lineSize);
+    count = nonDashCount(qSym+i, lineSize);
+    if (qStrand == '-')
+        count = -count;
+    qOffset += count;
+    fprintf(f, " %9d\n", qOffset);
+    printMatchers(qSym+i, tSym+i, lineSize, f);
+    fputc('\n', f);
+    mustWrite(f, tSym+i, lineSize);
+    count = nonDashCount(tSym+i, lineSize);
+    if (tStrand == '-')
+        count = -count;
+    tOffset += count;
+    fprintf(f, " %9d\n", tOffset);
+    mustWrite(f, hSym+i, lineSize);
+    fputc('\n', f);
+    fputc('\n', f);
+    }
+}
+
diff --git a/gbtools/src/blatSrc/lib/xmlEscape.c b/gbtools/src/blatSrc/lib/xmlEscape.c
new file mode 100644
index 0000000..6912d5a
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/xmlEscape.c
@@ -0,0 +1,82 @@
+/* Handle escaping for XML files.  Deal with things like
+ * & and &quot. */
+
+/* Copyright (C) 2011 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include "hash.h"
+#include "xmlEscape.h"
+
+
+struct hash *xmlEscapeSymHash()
+/* Return hash of predefined xml character symbols to lookup. */
+{
+struct hash *symHash = newHash(6);
+hashAdd(symHash, "lt", "<");
+hashAdd(symHash, "gt", ">");
+hashAdd(symHash, "amp", "&");
+hashAdd(symHash, "apos", "'");
+hashAdd(symHash, "quot", "\"");
+return symHash;
+}
+
+void xmlEscapeBytesToFile(unsigned char *buffer, int len, FILE *f)
+/* Write buffer of given length to file, escaping as need be. */
+{
+unsigned char c;
+int i;
+for (i=0; i<len; ++i)
+    {
+    c = buffer[i];
+    if (isalnum(c))
+        fputc(c, f);
+    else
+        {
+	switch (c)
+	    {
+	    case '&':
+	        fputs("&", f);
+		break;
+	    case '\'':
+	        fputs("'", f);
+		break;
+	    case '"':
+	        fputs(""", f);
+		break;
+	    case '<':
+	        fputs("<", f);
+		break;
+	    case '>':
+	        fputs(">", f);
+		break;
+	    case ' ':
+	    case '-':
+	    case '\t':
+	    case '\n':
+	    case ',':
+	    case '.':
+	    case ';':
+	    case ':':
+	    case '(':
+	    case ')':
+	    case '[':
+	    case ']':
+	    case '#':
+	    case '/':
+	        fputc(c, f);
+		break;
+	    default:
+	        fprintf(f, "&#%d;", c);
+		break;
+	    }
+	}
+    }
+}
+
+void xmlEscapeStringToFile(char *s, FILE *f)
+/* Write escaped zero-terminated string to file. */
+{
+int len = strlen(s);
+xmlEscapeBytesToFile((unsigned char *)s, len, f);
+}
diff --git a/gbtools/src/blatSrc/lib/xp.c b/gbtools/src/blatSrc/lib/xp.c
new file mode 100644
index 0000000..87e67fa
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/xp.c
@@ -0,0 +1,553 @@
+/* xp - A minimal non-verifying xml parser.  It's
+ * stream oriented much like expas.  It's a bit faster
+ * and smaller than expas.  I'm not sure it handles unicode
+ * as well.
+ *
+ * This file is copyright 2002-2005 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#include "common.h"
+#include "dystring.h"
+#include "errAbort.h"
+#include "hash.h"
+#include "xp.h"
+#include "xmlEscape.h"
+
+
+
+char xpNextBuf(struct xp *xp)
+/* Fetch a new buffer and return first char.  Return 0 at EOF. */
+{
+int size = xp->read(xp->userData, xp->inBuf, sizeof(xp->inBuf));
+if (size <= 0)
+    return 0;
+xp->inBufEnd = xp->inBuf + size;
+xp->in = xp->inBuf+1;
+return xp->inBuf[0];
+}
+
+#define xpGetChar(xp) \
+    (xp->in < xp->inBufEnd ? *xp->in++ : xpNextBuf(xp))
+/* Macro to quickly fetch next char. */
+
+#define xpUngetChar(xp) \
+    (--xp->in)
+/* Oops, don't fetch that after all. */
+
+struct xp *xpNew(void *userData, 
+   void (*atStartTag)(void *userData, char *name, char **atts),
+   void (*atEndTag)(void *userData, char *name, char *text),
+   int (*read)(void *userData, char *buf, int bufSize),
+   char *fileName)
+/* Form a new xp parser.  File name may be NULL - just used for
+ * error reporting. */
+{
+struct xp *xp;
+AllocVar(xp);
+xp->stack = xp->stackBufEnd = xp->stackBuf + ArraySize(xp->stackBuf);
+xp->userData = userData;
+xp->atStartTag = atStartTag;
+xp->atEndTag = atEndTag;
+xp->read = read;
+xp->lineIx = 1;
+xp->endTag = newDyString(64);
+if (fileName)
+    xp->fileName = cloneString(fileName);
+else
+    xp->fileName = cloneString("XML");
+xp->inBufEnd = xp->in = xp->inBuf;		
+xp->symHash = xmlEscapeSymHash();
+return xp;
+}
+
+int xpReadFromFile(void *userData, char *buf, int bufSize)
+/* Read some text assuming a file was passed in as user data. */
+{
+FILE *f = userData;
+return fread(buf, 1, bufSize, f);
+}
+
+
+
+void xpFree(struct xp **pXp)
+/* Free up an xp parser. */
+{
+int i;
+struct xp *xp = *pXp;
+if (xp != NULL)
+    {
+    struct xpStack *stack;
+    for (stack = xp->stackBufEnd; --stack >= xp->stackBuf; )
+        {
+	if (stack->tag == NULL)
+	    break;
+	freeDyString(&stack->tag);
+	freeDyString(&stack->text);
+	}
+    for (i=0; i<ArraySize(xp->attDyBuf); ++i)
+        {
+	if (xp->attDyBuf[i] == NULL)
+	    break;
+	freeDyString(&xp->attDyBuf[i]);
+	}
+    freeDyString(&xp->endTag);
+    freeMem(xp->fileName);
+    hashFree(&xp->symHash);
+    freez(pXp);
+    }
+}
+
+int xpLineIx(struct xp *xp)
+/* Return current line number. */
+{
+return xp->lineIx;
+}
+
+char *xpFileName(struct xp *xp)
+/* Return current file name. */
+{
+return xp->fileName;
+}
+
+void xpError(struct xp *xp, char *format, ...)
+/* Output an error message with filename and line number included. */
+{
+va_list args;
+va_start(args, format);
+vaWarn(format, args);
+errAbort("line %d of %s", xpLineIx(xp), xpFileName(xp));
+va_end(args);
+}
+
+static void xpUnexpectedEof(struct xp *xp)
+/* Squawk and die about EOF. */
+{
+xpError(xp, "Unexpected end of file.");
+}
+
+static void xpEatComment(struct xp *xp, char commentC)
+/* Skip characters until comment end. */
+{
+int startLine = xp->lineIx;
+char lastC = 0;
+char c;
+for (;;)
+    {
+    if ((c = xpGetChar(xp)) == 0)
+        xpError(xp, "End of file in comment that started line %d", startLine);
+    if (c == '\n')
+        ++xp->lineIx;
+    if (c == '>')
+        {
+	if (lastC == commentC || commentC == '!')
+	break;
+	}
+    lastC = c;
+    }
+}
+
+static void xpLookup(struct xp *xp, struct dyString *temp, struct dyString *text)
+/* Parse after '&' until ';' and look up symbol.  Put result into text. */
+{
+char c;
+char *s;
+dyStringClear(temp);
+for (;;)
+    {
+    if ((c = xpGetChar(xp)) == 0)
+	xpError(xp, "End of file in after & and before ;");
+    if (isspace(c))
+        xpError(xp, "& without ;");
+    if (c == ';')
+        break;
+    dyStringAppendC(temp, c);
+    }
+s = temp->string;
+if (s[0] == '#')
+    {
+    c = atoi(s+1);
+    dyStringAppendC(text, c);
+    }
+else if ((s = hashFindVal(xp->symHash, s)) == NULL)
+    {
+    dyStringAppendC(text, '&');
+    dyStringAppend(text, temp->string);
+    dyStringAppendC(text, ';');
+    }
+else
+    {
+    dyStringAppend(text, s);
+    }
+}
+
+void xpForceMatch(struct xp *xp, char *matchString)
+/* Make sure that the next characters are match, and eat them. */
+{
+char *match = matchString, m;
+while ((m = *match++) != 0)
+    {
+    if (m != xpGetChar(xp))
+        xpError(xp, "Expecting %s", matchString);
+    }
+}
+
+void xpTextUntil(struct xp *xp, char *endPattern)
+/* Stuff xp->text with everything up to endPattern. */
+{
+int endSize = strlen(endPattern);
+int endPos = 0;
+char c;
+struct dyString *dy = xp->stack->text;
+for (;;)
+    {
+    if ((c = xpGetChar(xp)) == 0)
+	xpUnexpectedEof(xp);
+    if (c == endPattern[endPos])
+        {
+	endPos += 1;
+	if (endPos == endSize)
+	    return;
+	}
+    else
+        {
+	if (endPos > 0)
+	    dyStringAppendN(dy, endPattern, endPos);
+	dyStringAppendC(dy, c);
+	endPos = 0;
+	}
+    }
+}
+
+
+void xpParseStartTag(struct xp *xp, 
+	int maxAttCount,		  /* Maximum attribute count. */
+	struct dyString *retName, 	  /* Returns tag name */
+	int *retAttCount, 		  /* Returns attribute count. */
+	struct dyString **retAttributes,  /* Name, value, name, value... */
+	boolean *retClosed)	  /* If true then is self-closing (ends in />) */
+/* Call this after the first '<' in a tag has been read.  It'll
+ * parse out until the '>' tag. */
+{
+char c, quotC;
+int attCount = 0;
+struct dyString *dy;
+int lineStart;
+
+dyStringClear(retName);
+
+/* Skip white space after '<' and before tag name. */
+for (;;)
+    {
+    if ((c = xpGetChar(xp)) == 0)
+	xpUnexpectedEof(xp);
+    if (isspace(c))
+        {
+	if (c == '\n')
+	    ++xp->lineIx;
+        }
+    else
+        break;
+    }
+
+/* Read in tag name. */
+for (;;)
+    {
+    dyStringAppendC(retName, c);
+    if ((c = xpGetChar(xp)) == 0)
+	xpUnexpectedEof(xp);
+    if (c == '>' || c == '/' || isspace(c))
+        break;
+    }
+if (c == '\n')
+    ++xp->lineIx;
+
+/* Parse attributes. */
+if (c != '>' && c != '/')
+    {
+    for (;;)
+	{
+	/* Skip leading white space. */
+	for (;;)
+	    {
+	    if ((c = xpGetChar(xp)) == 0)
+		xpUnexpectedEof(xp);
+	    if (isspace(c))
+		{
+		if (c == '\n')
+		    ++xp->lineIx;
+		}
+	    else
+		break;
+	    }
+	if (c == '>' || c == '/')
+	    break;
+
+	/* Allocate space in attribute table. */
+	if (attCount >= maxAttCount - 2)
+	    xpError(xp, "Attribute stack overflow");
+	dy = retAttributes[attCount];
+	if (dy == NULL)
+	    dy = retAttributes[attCount] = newDyString(64);
+	else
+	    dyStringClear(dy);
+	++attCount;
+
+	/* Read until not a label character. */
+	for (;;)
+	    {
+	    dyStringAppendC(dy, c);
+	    if ((c = xpGetChar(xp)) == 0)
+		xpUnexpectedEof(xp);
+	    if (isspace(c))
+		{
+		if (c == '\n')
+		    ++xp->lineIx;
+		break;
+		}
+	    if (c == '=')
+		break;
+	    if (c == '/' || c == '>')
+		xpError(xp, "Expecting '=' after attribute name");
+	    }
+
+	/* Skip white space until '=' */
+	if (c != '=')
+	    {
+	    for (;;)
+		{
+		if ((c = xpGetChar(xp)) == 0)
+		    xpUnexpectedEof(xp);
+		if (isspace(c))
+		    {
+		    if (c == '\n')
+			++xp->lineIx;
+		    }
+		else
+		    break;
+		}
+	    if (c != '=')
+		xpError(xp, "Expecting '=' after attribute name");
+	    }
+
+	/* Skip space until quote. */
+	for (;;)
+	    {
+	    if ((c = xpGetChar(xp)) == 0)
+		xpUnexpectedEof(xp);
+	    else if (isspace(c))
+		{
+		if (c == '\n')
+		    ++xp->lineIx;
+		}
+	    else
+		break;
+	    }
+	if (c != '\'' && c != '"')
+	    xpError(xp, "Expecting quoted string after =");
+
+	/* Allocate space in attribute table. */
+	if (attCount >= maxAttCount - 2)
+	    xpError(xp, "Attribute stack overflow");
+	dy = retAttributes[attCount];
+	if (dy == NULL)
+	    dy = retAttributes[attCount] = newDyString(64);
+	else
+	    dyStringClear(dy);
+	++attCount;
+
+	/* Read until next quote. */
+	quotC = c;
+	lineStart = xp->lineIx;
+	for (;;)
+	    {
+	    if ((c = xpGetChar(xp)) == 0)
+	       xpError(xp, "End of file inside literal string that started at line %d", lineStart);
+	    if (c == quotC)
+		break;
+	    if (c == '&')
+	       xpLookup(xp, xp->endTag, dy);
+	    else
+		{
+		if (c == '\n')
+		    ++xp->lineIx;
+		dyStringAppendC(dy, c);
+		}
+	    }
+	}
+    }
+if (c == '/')
+    {
+    *retClosed = TRUE;
+    c = xpGetChar(xp);
+    if (c != '>')
+        xpError(xp, "Expecting '>' after '/'");
+    }
+else
+    *retClosed = FALSE;
+*retAttCount = attCount;
+}
+
+void xpParseEndTag(struct xp *xp, char *tagName)
+/* Call this after have seen </.  It will parse through
+ * > and make sure that the tagName matches. */
+{
+struct dyString *dy = xp->endTag;
+char c;
+
+dyStringClear(dy);
+
+/* Skip leading space. */
+for (;;)
+    {
+    if ((c = xpGetChar(xp)) == 0)
+	xpUnexpectedEof(xp);
+    if (isspace(c))
+	{
+	if (c == '\n')
+	    ++xp->lineIx;
+	}
+    else
+	break;
+    }
+
+/* Read end tag. */
+for (;;)
+    {
+    dyStringAppendC(dy, c);
+    if ((c = xpGetChar(xp)) == 0)
+	xpUnexpectedEof(xp);
+    if (isspace(c))
+	{
+	if (c == '\n')
+	    ++xp->lineIx;
+	break;
+	}
+    if (c == '>')
+	break;
+    }
+
+/* Skip until '>' */
+while (c != '>')
+    {
+    dyStringAppendC(dy, c);
+    if ((c = xpGetChar(xp)) == 0)
+	xpUnexpectedEof(xp);
+    if (isspace(c))
+	{
+	if (c == '\n')
+	    ++xp->lineIx;
+	}
+    else if (c != '>')
+	xpError(xp, "Unexpected characters past first word in /%s tag", dy->string);
+    }
+
+if (!sameString(dy->string, tagName))
+    xpError(xp, "Mismatch between start tag %s and end tag %s",  tagName, dy->string);
+}
+
+boolean xpParseNext(struct xp *xp, char *tag)
+/* Skip through file until get given tag.  Then parse out the
+ * tag and all of it's children (calling atStartTag/atEndTag).
+ * You can call this repeatedly to process all of a given tag
+ * in file. */
+
+{
+char c;
+int i, attCount = 0;
+struct dyString *text = NULL;
+boolean isClosed;
+boolean inside = (tag == NULL);
+struct xpStack *initialStack = xp->stack;
+
+for (;;)
+    {
+    /* Load up text until next tag. */
+    for (;;)
+        {
+	if ((c = xpGetChar(xp)) == 0)
+	    return FALSE;
+	if (c == '<')
+	    break;
+	if (c == '&')
+	   xpLookup(xp, xp->endTag, text);
+	else 
+	    {
+	    if (c == '\n')
+		++xp->lineIx;
+	    if (text != NULL)
+		dyStringAppendC(text, c);
+	    }
+	}
+
+    /* Get next character to figure out what type of tag. */
+    c = xpGetChar(xp);
+    if (c == 0)
+       xpError(xp, "End of file inside tag");
+    else if (c == '?' || c == '!')
+        xpEatComment(xp, c);
+    else if (c == '/')  /* Closing tag. */
+        {
+	struct xpStack *stack = xp->stack;
+	if (stack >= xp->stackBufEnd)
+	    xpError(xp, "Extra end tag");
+	xpParseEndTag(xp, stack->tag->string);
+	if (inside)
+	    xp->atEndTag(xp->userData, stack->tag->string, stack->text->string);
+	xp->stack += 1;
+	if (xp->stack == initialStack)
+	    return TRUE;
+	}
+    else	/* Start tag. */
+        {
+	/* Push new frame on stack and check for overflow and unallocated strings. */
+	struct xpStack *stack = --xp->stack;
+	if (stack < xp->stackBuf)
+	    xpError(xp, "Stack overflow");
+	if (stack->tag == NULL)
+	    stack->tag = newDyString(32);
+	else
+	    dyStringClear(stack->tag);
+	if (stack->text == NULL)
+	    stack->text = newDyString(256);
+	else
+	    dyStringClear(stack->text);
+	text = stack->text;
+
+	/* Parse the start tag. */
+	xpUngetChar(xp);
+	xpParseStartTag(xp, ArraySize(xp->attDyBuf), stack->tag, 
+		&attCount, xp->attDyBuf, &isClosed);
+
+	if (!inside && sameString(stack->tag->string, tag))
+	    {
+	    inside = TRUE;
+	    initialStack = xp->stack + 1;
+	    }
+
+	/* Call user start function, and if closed tag, end function too. */
+	if (inside)
+	    {
+	    /* Unpack attributes into simple array of strings. */
+	    for (i=0; i<attCount; ++i)
+		xp->attBuf[i] = xp->attDyBuf[i]->string;
+	    xp->attBuf[attCount] = NULL;
+	    xp->atStartTag(xp->userData, stack->tag->string, xp->attBuf);
+	    }
+	if (isClosed)
+	    {
+	    if (inside)
+		xp->atEndTag(xp->userData, stack->tag->string, stack->text->string);
+	    xp->stack += 1;
+	    if (xp->stack == initialStack)
+		return TRUE;
+	    }
+	}
+    }
+}
+
+void xpParse(struct xp *xp)
+/* Parse from start tag to end tag.  Throw error if a problem. */
+{
+xpParseNext(xp, NULL);
+}
+
diff --git a/gbtools/src/blatSrc/lib/zlibFace.c b/gbtools/src/blatSrc/lib/zlibFace.c
new file mode 100644
index 0000000..0748a21
--- /dev/null
+++ b/gbtools/src/blatSrc/lib/zlibFace.c
@@ -0,0 +1,94 @@
+/* Wrappers around zlib to make interfacing to it a bit easier. */
+
+/* Copyright (C) 2009 The Regents of the University of California 
+ * See README in this or parent directory for licensing information. */
+
+#include "common.h"
+#include <zlib.h>
+
+static char *zlibErrorMessage(int err)
+/* Convert error code to errorMessage */
+{
+switch (err)
+    {
+    case Z_STREAM_END:
+        return "zlib stream end";
+    case Z_NEED_DICT:
+        return "zlib need dictionary";
+    case Z_ERRNO:
+        return "zlib errno";
+    case Z_STREAM_ERROR:
+        return "zlib data error";
+    case Z_DATA_ERROR:
+        return "zlib data error";
+    case Z_MEM_ERROR:
+        return "zlib mem error";
+    case Z_BUF_ERROR:
+        return "zlib buf error";
+    case Z_VERSION_ERROR:
+        return "zlib version error";
+    case Z_OK:
+        return NULL;
+    default:
+	{
+	static char msg[128];
+	safef(msg, sizeof(msg), "zlib error code %d", err);
+        return msg;
+	}
+    }
+}
+
+size_t zCompress(
+	void *uncompressed, 	/* Start of area to compress. */
+	size_t uncompressedSize,  /* Size of area to compress. */
+	void *compBuf,       /* Where to put compressed bits */
+	size_t compBufSize) /* Size of compressed bits - calculate using zCompBufSize */
+/* Compress data from memory to memory.  Returns size after compression. */
+{
+uLongf compSize = compBufSize;
+int err = compress((Bytef*)compBuf, &compSize, (Bytef*)uncompressed, (uLong)uncompressedSize);
+if (err != 0)
+    errAbort("Couldn't zCompress %lld bytes: %s", 
+    	(long long)uncompressedSize, zlibErrorMessage(err));
+return compSize;
+}
+
+size_t zCompBufSize(size_t uncompressedSize)
+/* Return size of buffer needed to compress something of given size uncompressed. */
+{
+return 1.001*uncompressedSize + 13;
+}
+
+size_t zUncompress(
+        void *compressed,	/* Compressed area */
+	size_t compressedSize,	/* Size after compression */
+	void *uncompBuf,	/* Where to put uncompressed bits */
+	size_t uncompBufSize)	/* Max size of uncompressed bits. */
+/* Uncompress data from memory to memory.  Returns size after decompression. */
+{
+uLongf uncSize = uncompBufSize;
+int err = uncompress(uncompBuf,  &uncSize, compressed, compressedSize);
+if (err != 0)
+    errAbort("Couldn't zUncompress %lld bytes: %s", 
+    	(long long)compressedSize, zlibErrorMessage(err));
+return uncSize;
+}
+
+void zSelfTest(int count)
+/* Run an internal diagnostic. */
+{
+bits32 testData[count];
+int uncSize = count*sizeof(bits32);
+int i;
+for (i=0; i<count; ++i)
+    testData[i] = i;
+int compBufSize = zCompBufSize(uncSize);
+char compBuf[compBufSize];
+int compSize = zCompress(testData, uncSize, compBuf, compBufSize);
+char uncBuf[uncSize];
+zUncompress(compBuf, compSize, uncBuf, uncSize);
+if (memcmp(uncBuf, testData, uncSize) != 0)
+    errAbort("zSelfTest %d failed", count);
+else
+    verbose(2, "zSelfTest %d passed, compression ratio %3.1f\n", count, (double)compSize/uncSize);
+}
diff --git a/gbtools/src/gbtoolsCurl/Makefile.am b/gbtools/src/gbtoolsCurl/Makefile.am
new file mode 100644
index 0000000..f235b91
--- /dev/null
+++ b/gbtools/src/gbtoolsCurl/Makefile.am
@@ -0,0 +1,16 @@
+
+include $(top_srcdir)/src/Makefile.am.common
+
+SUBDIRS = .
+
+noinst_LTLIBRARIES = libgbtoolsCurl.la
+
+libgbtoolsCurl_la_SOURCES = \
+gbtoolsCurl.cpp \
+gbtoolsCurl_P.hpp \
+$(NULL) 
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/src/gbtoolsCurl/Makefile.in
+
diff --git a/gbtools/src/gbtoolsCurl/Makefile.in b/gbtools/src/gbtoolsCurl/Makefile.in
new file mode 100644
index 0000000..d579d91
--- /dev/null
+++ b/gbtools/src/gbtoolsCurl/Makefile.in
@@ -0,0 +1,742 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 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@
+
+# Common includes for all compiles.....
+#
+
+VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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@
+DIST_COMMON = $(top_srcdir)/src/Makefile.am.common \
+	$(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+	$(top_srcdir)/config/depcomp
+subdir = src/gbtoolsCurl
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/./gbtools_version.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libgbtoolsCurl_la_LIBADD =
+am_libgbtoolsCurl_la_OBJECTS = gbtoolsCurl.lo
+libgbtoolsCurl_la_OBJECTS = $(am_libgbtoolsCurl_la_OBJECTS)
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+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) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CXXFLAGS) $(CXXFLAGS)
+AM_V_CXX = $(am__v_CXX_ at AM_V@)
+am__v_CXX_ = $(am__v_CXX_ at AM_DEFAULT_V@)
+am__v_CXX_0 = @echo "  CXX     " $@;
+am__v_CXX_1 = 
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+	$(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CXXLD = $(am__v_CXXLD_ at AM_V@)
+am__v_CXXLD_ = $(am__v_CXXLD_ at AM_DEFAULT_V@)
+am__v_CXXLD_0 = @echo "  CXXLD   " $@;
+am__v_CXXLD_1 = 
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = $(libgbtoolsCurl_la_SOURCES)
+DIST_SOURCES = $(libgbtoolsCurl_la_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-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 \
+	tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+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@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+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@
+DEPS_CFLAGS = @DEPS_CFLAGS@
+DEPS_LIBS = @DEPS_LIBS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+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@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_BLATSRC = @USE_BLATSRC@
+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@
+AM_CPPFLAGS = \
+$(DEPS_CFLAGS) \
+-I$(top_srcdir)/src/include \
+-I$(top_srcdir)/src/include/blatSrc
+
+AM_CXXFLAGS = -std=c++11 -g -Wall
+SUBDIRS = .
+noinst_LTLIBRARIES = libgbtoolsCurl.la
+libgbtoolsCurl_la_SOURCES = \
+gbtoolsCurl.cpp \
+gbtoolsCurl_P.hpp \
+$(NULL) 
+
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/src/gbtoolsCurl/Makefile.in
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .cpp .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(top_srcdir)/src/Makefile.am.common $(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 src/gbtoolsCurl/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/gbtoolsCurl/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_srcdir)/src/Makefile.am.common:
+
+$(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-noinstLTLIBRARIES:
+	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+	@list='$(noinst_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+
+libgbtoolsCurl.la: $(libgbtoolsCurl_la_OBJECTS) $(libgbtoolsCurl_la_DEPENDENCIES) $(EXTRA_libgbtoolsCurl_la_DEPENDENCIES) 
+	$(AM_V_CXXLD)$(CXXLINK)  $(libgbtoolsCurl_la_OBJECTS) $(libgbtoolsCurl_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gbtoolsCurl.Plo at am__quote@
+
+.cpp.o:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cpp.lo:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LTCXXCOMPILE) -c -o $@ $<
+
+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.
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	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"
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	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; \
+	$(am__define_uniq_tagged_files); \
+	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-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	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"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+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 \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    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 $(LTLIBRARIES)
+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:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+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."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile 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 -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+	check-am clean clean-generic clean-libtool \
+	clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am 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 \
+	installdirs-am maintainer-clean maintainer-clean-generic \
+	mostlyclean mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
+	uninstall-am
+
+
+# these don't work....or maybe they do...try again...???
+#libgbtools_la_CPPFLAGS =  $(DEPS_CFLAGS)
+#libgbtools_la_CXXFLAGS = -g  -Wall -std=c++0x
+
+# 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/gbtools/src/gbtoolsCurl/gbtoolsCurl.cpp b/gbtools/src/gbtoolsCurl/gbtoolsCurl.cpp
new file mode 100644
index 0000000..a8f4338
--- /dev/null
+++ b/gbtools/src/gbtoolsCurl/gbtoolsCurl.cpp
@@ -0,0 +1,1139 @@
+/*  File: libcurlobject.c
+ *  Author: Roy Storey (rds at sanger.ac.uk)
+ *  Copyright (c) 2006-2015: Genome Research Ltd.
+ *-------------------------------------------------------------------
+ * ZMap 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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ *-------------------------------------------------------------------
+ * This file is part of the ZMap genome database package
+ * originally written by:
+ *
+ * 	Ed Griffiths (Sanger Institute, UK) edgrif at sanger.ac.uk,
+ *      Roy Storey (Sanger Institute, UK) rds at sanger.ac.uk
+ *
+ * Description: Object to access curl send/receive http requests.
+ *
+ *-------------------------------------------------------------------
+ */
+
+#include <unistd.h>
+
+#include <gbtoolsCurl_P.hpp>
+
+
+namespace gbtools
+{
+
+
+#ifdef _WIN32
+#define SHORT_SLEEP Sleep(100)
+#else
+#define SHORT_SLEEP usleep(100000)
+#endif
+
+enum
+  {
+    CURLOBJECT_PROPID = 0,		/* zero is invalid prop id */
+    CURLOBJECT_LAST_CURLOPT = CURLOPT_LASTENTRY,
+    CURLOBJECT_MANAGE_POSTFIELDS,
+    CURLOBJECT_ALLOW_QUEUES,
+    CURLOBJECT_ALLOW_REUSE_UNCHANGED,
+    CURLOBJECT_RESPONSE_CODE,
+    CURLOBJECT_WAIT
+  };
+
+typedef struct
+{
+  CURLoption  option;
+  GValue      value;
+  GParamSpec *pspec;
+}curl_settings_struct, *curl_settings;
+
+typedef struct
+{
+  GList   *settings_list;
+  gboolean use_multi;
+  gboolean perform_called;
+}curl_settings_perform_struct, *curl_settings_perform;
+
+/* object implementation functions */
+static void curl_object_class_init(CURLObjectClass curlobj_class);
+#ifdef NEVER_GETS_CALLED_FOR_STATIC_TYPES
+static void curl_object_class_finalize(CURLObjectClass curlobj_class);
+#endif /* NEVER_GETS_CALLED_FOR_STATIC_TYPES */
+static void curl_object_init(CURLObject curl_object);
+static void curl_object_dispose(GObject *gobject);
+static void curl_object_finalize(GObject *gobject);
+static void curl_object_set_property(GObject *gobject, 
+				  guint param_id, 
+				  const GValue *value, 
+				  GParamSpec *pspec);
+static void curl_object_get_property(GObject *gobject, 
+				  guint param_id, 
+				  GValue *value, 
+				  GParamSpec *pspec);
+
+/* internal functions */
+static gboolean _curl_status_ok(GObject *object);
+static gboolean curl_fd_to_watched_GIOChannel(gint         fd, 
+					      GIOCondition cond, 
+					      GIOFunc      func, 
+					      gpointer     data);
+static gboolean curl_object_watch_func(GIOChannel  *source, 
+				   GIOCondition condition, 
+				   gpointer     user_data);
+static void run_multi_perform(CURLObject curl_object);
+static CURLObjectStatus perform_later(CURLObject curl_object, gboolean use_multi);
+static void save_settings(CURLObject    curl_object, 
+			  guint         param_id,
+			  const GValue *value,
+			  GParamSpec   *pspec);
+static void invoke_set(gpointer list_data, gpointer user_data);
+static void perform_next(CURLObject curl_object);
+
+static void transfer_finished_notify(gpointer user_data);
+static void destroy_list_item(gpointer list_data, gpointer unused_data);
+static gpointer destroy_settings_perform(curl_settings_perform details);
+static void invoke_destroy_settings_perform(gpointer q_data, gpointer unused_data);
+static void free_pre717_strings(gpointer str_data, gpointer unused);
+
+#ifdef NEEDS_PROGRESS
+static int curl_object_progress_func(void  *clientp,
+				 double dltotal,
+				 double dlnow,
+				 double ultotal,
+				 double ulnow);
+#endif /* NEEDS_PROGRESS */
+
+/* Thread safety issue:
+ *
+ * Even I can see that the usual idiom of creating a class isn't thread safe.
+ *
+ * http://osdir.com/ml/gnome.gtk+.general/2003-07/msg00034.html
+ * http://bugzilla.gnome.org/show_bug.cgi?id=69668
+ * http://bugzilla.gnome.org/show_bug.cgi?id=64764
+ *
+ * http://testbit.eu/gitdata?p=glib.git;a=blob;f=gobject/tests/threadtests.c;h=3b955038ca9dc436be9487b33b1efbd92bab6ba8;hb=HEAD
+ *
+ * What people do currently when using GObject in threaded applications
+ * is to call g_type_class_ref (MY_TYPE_WHATEVER) for all their types
+ * before creating the first thread. 
+ */
+
+/* public functions */
+
+/*!
+ * Get GType for the CURLObj object
+ */
+
+GType CURLObjectGetType(void)
+{
+  static GType curl_object_type = 0;
+
+  if(!curl_object_type)
+    {
+      GTypeInfo curl_info = 
+	{
+	  sizeof(curlObjectClass),
+	  (GBaseInitFunc)     NULL,
+	  (GBaseFinalizeFunc) NULL,
+	  (GClassInitFunc) curl_object_class_init,
+	  (GClassFinalizeFunc)NULL,// curl_object_class_finalize,	/* class_finalize */
+	  NULL,			/* class_data */
+	  sizeof(curlObject),
+	  0,			/* n_preallocs */
+	  (GInstanceInitFunc) curl_object_init
+	};
+
+      curl_object_type = g_type_register_static(G_TYPE_OBJECT,
+						"cURL-wrapper-object", 
+						&curl_info, (GTypeFlags)0);
+    }
+
+  return curl_object_type;
+}
+
+/*!
+ * Get a new CURLObject 
+ */
+CURLObject CURLObjectNew()
+{
+  CURLObject curl_obj = NULL ;
+
+  curl_obj = (CURLObject)g_object_new(CURL_TYPE_OBJECT, NULL);
+
+  return curl_obj ;
+}
+
+/*!
+ * Setup the object to do as you'd like.
+ */
+CURLObjectStatus CURLObjectSet(CURLObject curl_object, const gchar *first_arg_name, ...)
+{
+  CURLObjectStatus result = CURL_STATUS_FAILED;
+  va_list args;
+
+  va_start(args, first_arg_name);
+  g_object_set_valist(G_OBJECT(curl_object), first_arg_name, args);
+  va_end(args);
+
+  if (curl_object->last_easy_status == CURLE_OK)
+    result = CURL_STATUS_OK;
+  else
+    result = CURL_STATUS_FAILED;
+
+  return result;
+}
+
+/*!
+ * Do the transfer...
+ */
+CURLObjectStatus CURLObjectPerform(CURLObject curl_object, gboolean use_multi)
+{
+  CURLObjectStatus status = CURL_STATUS_FAILED;
+
+  if(_curl_status_ok(G_OBJECT(curl_object)))
+    {
+      if(use_multi)
+	{
+#ifdef PROGRESS_INTERNAL
+	  curl_easy_setopt(curl_object->easy, CURLOPT_PROGRESSFUNCTION, curl_object_progress_func);
+
+	  curl_easy_setopt(curl_object->easy, CURLOPT_PROGRESSDATA, curl_object);
+#endif /* PROGRESS_INTERNAL */
+
+	  if(curl_object->transfer_in_progress)
+	    {
+	      if(curl_object->allow_queue)
+		status = perform_later(curl_object, use_multi);
+	      else
+		status = (CURLObjectStatus)101; 	/* NO QUEUES and TRANSFER IN PROGRESS. */
+	    }
+	  else if(!g_queue_is_empty(curl_object->perform_queue))
+	    {
+	      status = perform_later(curl_object, use_multi);
+	      perform_next(curl_object);
+	    }
+	  else
+	    {
+	      curl_object->last_multi_status = curl_multi_add_handle(curl_object->multi, 
+								     curl_object->easy);
+	      
+	      run_multi_perform(curl_object);
+	      
+	      if(curl_object->last_easy_status == CURLE_OK)
+		status = CURL_STATUS_OK;
+	    }
+	}
+      else
+	{
+	  if((curl_object->last_easy_status = curl_easy_perform(curl_object->easy)) == CURLE_OK)
+	    status = CURL_STATUS_OK;
+	}
+    }
+
+  return status;
+}
+
+CURLObjectStatus CURLObjectErrorMessage(CURLObject curl_object, char **message)
+{
+  CURLObjectStatus result = CURL_STATUS_FAILED;
+
+  if(message)
+    {
+      *message = NULL;
+      if(curl_object->error_message)
+	*message = g_strdup(curl_object->error_message);
+    }
+
+  if (curl_object->last_easy_status == CURLE_OK)
+    result = CURL_STATUS_OK;
+  else
+    result = CURL_STATUS_FAILED;
+
+  return result;
+}
+
+/*!
+ * Cleanup after you're finished with the object.
+ */
+CURLObject CURLObjectDestroy(CURLObject curl_object)
+{
+  g_object_unref(G_OBJECT(curl_object));
+
+  return NULL;
+}
+
+/* Internal functions. object implementation functions first */
+
+static void curl_object_class_init(CURLObjectClass curl_object_class)
+{
+  GObjectClass *gobject_class;
+  
+  gobject_class = (GObjectClass *)curl_object_class;
+
+  gobject_class->set_property = curl_object_set_property;
+  gobject_class->get_property = curl_object_get_property;
+
+  /* --- Behaviour options --- */
+  g_object_class_install_property(gobject_class, CURLOPT_VERBOSE,
+				  g_param_spec_boolean("verbose", "verbose",
+						       "The verbose information will be sent to stderr, or the stream set with CURLOPT_STDERR",
+						       TRUE, (GParamFlags)CURL_PARAM_STATIC_WO));
+  g_object_class_install_property(gobject_class, CURLOPT_VERBOSE,
+				  g_param_spec_boolean("debug", "debug",
+						       "The verbose information will be sent to stderr, or the stream set with CURLOPT_STDERR",
+						       TRUE, (GParamFlags)CURL_PARAM_STATIC_WO));
+  g_object_class_install_property(gobject_class, CURLOPT_HEADER,
+				  g_param_spec_boolean("header", "header",
+						       "A non-zero parameter tells the library to include the header in the body output.",
+						       TRUE, (GParamFlags)CURL_PARAM_STATIC_WO));
+  /* NOPROGRESS & NOSIGNAL not supported */
+
+  /* --- Callback options --- */
+  g_object_class_install_property(gobject_class, CURLOPT_WRITEFUNCTION,
+				  g_param_spec_pointer("writefunction", "writefunction",
+						       "Function called when data has been received",
+						       (GParamFlags)CURL_PARAM_STATIC_WO));
+  g_object_class_install_property(gobject_class, CURLOPT_WRITEDATA,
+				  g_param_spec_pointer("writedata", "writedata",
+						       "User data passed to writefunction",
+						       (GParamFlags)CURL_PARAM_STATIC_WO));
+  g_object_class_install_property(gobject_class, CURLOPT_READFUNCTION,
+				  g_param_spec_pointer("readfunction", "readfunction",
+						       "Function called when data can be sent",
+						       (GParamFlags)CURL_PARAM_STATIC_WO));
+  g_object_class_install_property(gobject_class, CURLOPT_READDATA,
+				  g_param_spec_pointer("readdata", "readdata",
+						       "User data passed to readfunction",
+						       (GParamFlags)CURL_PARAM_STATIC_WO));
+
+  /* CURLOPT_IOCTLFUNCTION, CURLOPT_IOCTLDATA, 
+   * CURLOPT_SEEKFUNCTION, CURLOPT_SEEKDATA,
+   * CURLOPT_SOCKOPTFUNCTION, CURLOPT_SOCKOPTDATA,
+   * CURLOPT_OPENSOCKETFUNCTION, CURLOPT_OPENSOCKETDATA
+   * not supported
+   */
+  g_object_class_install_property(gobject_class, CURLOPT_PROGRESSFUNCTION,
+				  g_param_spec_pointer("progressfunction", "progressfunction",
+						       "Function called when data has been received",
+						       (GParamFlags)CURL_PARAM_STATIC_WO));
+  g_object_class_install_property(gobject_class, CURLOPT_PROGRESSDATA,
+				  g_param_spec_pointer("progressdata", "progressdata",
+						       "User data passed to progressfunction",
+						       (GParamFlags)CURL_PARAM_STATIC_WO));
+  g_object_class_install_property(gobject_class, CURLOPT_HEADERFUNCTION,
+				  g_param_spec_pointer("headerfunction", "headerfunction",
+						       "Function called when header data has been received",
+						       (GParamFlags)CURL_PARAM_STATIC_WO));
+  g_object_class_install_property(gobject_class, CURLOPT_HEADERDATA,
+				  g_param_spec_pointer("headerdata", "headerdata",
+						       "User data passed to headerfunction",
+						       (GParamFlags)CURL_PARAM_STATIC_WO));
+  g_object_class_install_property(gobject_class, CURLOPT_DEBUGFUNCTION,
+				  g_param_spec_pointer("debugfunction", "debugfunction",
+						       "Function called when debug data has been received",
+						       (GParamFlags)CURL_PARAM_STATIC_WO));
+  g_object_class_install_property(gobject_class, CURLOPT_DEBUGDATA,
+				  g_param_spec_pointer("debugdata", "debugdata",
+						       "User data passed to debugfunction",
+						       (GParamFlags)CURL_PARAM_STATIC_WO));
+
+  /* CURLOPT_SSL_CTX_FUNCTION, CURLOPT_SSL_CTX_DATA,
+   * CURLOPT_CONV_TO_NETWORK_FUNCTION,
+   * CURLOPT_CONV_FROM_NETWORK_FUNCTION,
+   * CURLOPT_CONV_FROM_UTF8_FUNCTION not supported
+   */
+
+  /* --- Error options --- */
+  /* support comes later...
+   * CURLOPT_ERRORBUFFER (not for this one. This object sets it for it's own use)
+   * CURLOPT_STDERR
+   * CURLOPT_FAILONERROR
+   */
+
+  /* --- Network options --- */
+  g_object_class_install_property(gobject_class, CURLOPT_URL,
+				  g_param_spec_string("url", "URL",
+						      "Uniform Resource Location",
+						      "", (GParamFlags)CURL_PARAM_STATIC_WO));
+  g_object_class_install_property(gobject_class, CURLOPT_PORT,
+				  g_param_spec_uint("port", "port",
+						    "port",
+						    80, 65535, 80, (GParamFlags)CURL_PARAM_STATIC_WO));
+
+  /* A whole load of other network options need adding */
+
+  /* --- Names & Passwords options --- */
+
+  g_object_class_install_property(gobject_class, CURLOPT_USERPWD,
+				  g_param_spec_string("userpwd", "userpwd",
+						      "user:password",
+						      "", (GParamFlags)CURL_PARAM_STATIC_WO));
+
+  g_object_class_install_property(gobject_class, CURLOPT_USERNAME,
+				  g_param_spec_string("username", "username",
+						      "username",
+						      "", (GParamFlags)CURL_PARAM_STATIC_WO));
+
+  g_object_class_install_property(gobject_class, CURLOPT_PASSWORD,
+				  g_param_spec_string("password", "password",
+						      "password",
+						      "", (GParamFlags)CURL_PARAM_STATIC_WO));
+
+
+  /* HTTP Options */
+  g_object_class_install_property(gobject_class, CURLOPT_AUTOREFERER,
+				  g_param_spec_boolean("autoreferer", "autoreferer",
+						       "Add Referer: to redirect requests",
+						       FALSE, (GParamFlags)CURL_PARAM_STATIC_WO));
+  g_object_class_install_property(gobject_class, CURLOPT_ENCODING,
+				  g_param_spec_string("encoding", "encoding",
+						      "Add Accept-Encoding: [identity|deflate|gzip]",
+						      "", (GParamFlags)CURL_PARAM_STATIC_WO));
+  g_object_class_install_property(gobject_class, CURLOPT_FOLLOWLOCATION,
+				  g_param_spec_boolean("followlocation", "followlocation",
+						       "Follow any Location: headers",
+						       FALSE, (GParamFlags)CURL_PARAM_STATIC_WO));
+  g_object_class_install_property(gobject_class, CURLOPT_POST,
+				  g_param_spec_boolean("post", "post",
+						       "Regular POST requesting",
+						       FALSE, (GParamFlags)CURL_PARAM_STATIC_WO));
+  g_object_class_install_property(gobject_class, CURLOPT_POSTFIELDS,
+				  g_param_spec_pointer("postfields", "postfields",
+						       "POST data to send",
+						       (GParamFlags)CURL_PARAM_STATIC_WO));
+  g_object_class_install_property(gobject_class, CURLOPT_POSTFIELDSIZE,
+				  g_param_spec_uint("postfieldsize", "postfieldsize",
+						    "Size of the POSTFIELDS", 
+						    0, 65535, 0,
+						    (GParamFlags)CURL_PARAM_STATIC_WO));
+  g_object_class_install_property(gobject_class, CURLOPT_HTTPPOST,
+				  g_param_spec_pointer("httppost", "httppost",
+						       "List of curl_httppost structs",
+						       (GParamFlags)CURL_PARAM_STATIC_WO));
+  g_object_class_install_property(gobject_class, CURLOPT_REFERER,
+				  g_param_spec_string("referer", "referer", 
+						      "Referer: string", 
+						      "", (GParamFlags)CURL_PARAM_STATIC_WO));
+  g_object_class_install_property(gobject_class, CURLOPT_USERAGENT,
+				  g_param_spec_string("useragent", "useragent",
+						      "User-Agent: string",
+						      "libcurlobj-0.1",
+						      (GParamFlags)CURL_PARAM_STATIC_WO));
+  g_object_class_install_property(gobject_class, CURLOPT_HTTPHEADER,
+				  g_param_spec_pointer("httpheader", "httpheader",
+						       "curl_slist list of header strings",
+						       (GParamFlags)CURL_PARAM_STATIC_WO));
+  g_object_class_install_property(gobject_class, CURLOPT_HTTP200ALIASES,
+				  g_param_spec_pointer("http200aliases", "http200aliases",
+						       "curl_slist list of header 200 alias strings",
+						       (GParamFlags)CURL_PARAM_STATIC_WO));
+  g_object_class_install_property(gobject_class, CURLOPT_COOKIE,
+				  g_param_spec_string("cookie", "cookie",
+						      "NAME=CONTENTS cookie string",
+						      "", (GParamFlags)CURL_PARAM_STATIC_WO));
+  g_object_class_install_property(gobject_class, CURLOPT_COOKIEFILE,
+				  g_param_spec_string("cookiefile", "cookiefile",
+						      "Location of a Netscape/Mozilla format cookiefile.",
+						      "", (GParamFlags)CURL_PARAM_STATIC_WO));
+  g_object_class_install_property(gobject_class, CURLOPT_COOKIEJAR,
+				  g_param_spec_string("cookiejar", "cookiejar",
+						      "Location for curl's cookiejar. Written when curl_easy_cleanup called",
+						      "", (GParamFlags)CURL_PARAM_STATIC_WO));
+  g_object_class_install_property(gobject_class, CURLOPT_COOKIESESSION,
+				  g_param_spec_long("cookiesession", "cookiesession",
+						    "Start a new cookie session",
+						    0, 1, 0, (GParamFlags)CURL_PARAM_STATIC_WO));
+  g_object_class_install_property(gobject_class, CURLOPT_PROXY,
+				  g_param_spec_string("proxy", "proxy",
+						      "proxy",
+						      "", (GParamFlags)CURL_PARAM_STATIC_WO));
+#ifdef COOKIELIST
+  g_object_class_install_property(gobject_class, CURLOPT_COOKIELIST,
+				  g_param_spec_string("cookielist", "cookielist",
+						      "cookie control",
+						      "", CURL_PARAM_STATIC_WO));
+#endif	/* COOKIELIST */
+  g_object_class_install_property(gobject_class, CURLOPT_HTTPGET,
+				  g_param_spec_boolean("httpget", "httpget",
+						       "Force easy handle to use GET request",
+						       TRUE, (GParamFlags)CURL_PARAM_STATIC_WO));
+  /* --- FTP options --- */
+  
+  /* --- Protocol options --- */
+  g_object_class_install_property(gobject_class, CURLOPT_IPRESOLVE,
+				  g_param_spec_long("ipresolve", "ipresolve",
+                                                    "Specify whether libcurl should use IPv4, IPv6, or either",
+                                                    0, 2, CURL_IPRESOLVE_WHATEVER,
+                                                    (GParamFlags)CURL_PARAM_STATIC_WO));
+
+  g_object_class_install_property(gobject_class, CURLOPT_CAINFO,
+				  g_param_spec_string("cainfo", "cainfo",
+                                                      "Specify the location of the cainfo file libcurl should use",
+                                                      NULL, (GParamFlags)CURL_PARAM_STATIC_WO));
+
+  /* --- Connection options --- */
+  g_object_class_install_property(gobject_class, CURLOPT_TIMEOUT,
+				  g_param_spec_long("timeout", "timeout",
+						    "Timeout (uses SIGALRM unless nosignal set).",
+						    0, 65535, 0, (GParamFlags)CURL_PARAM_STATIC_WO));
+  /* --- SSL options --- */
+
+  /* --- SSH options --- */
+
+  /* --- Other options --- */
+  g_object_class_install_property(gobject_class, CURLOPT_CUSTOMREQUEST,
+				  g_param_spec_string("customrequest", "customrequest",
+                                                      "Custom request",
+                                                      NULL, (GParamFlags)CURL_PARAM_STATIC_WO));
+
+  /* --- Telnet options --- */
+
+  /* --- This object Options --- */
+
+  g_object_class_install_property(gobject_class, CURLOBJECT_MANAGE_POSTFIELDS,
+				  g_param_spec_boolean("manage-postfields", "Manage Postfields",
+						       "Free the POST data as soon as possible",
+						       FALSE, (GParamFlags)CURL_PARAM_STATIC_RW));
+
+  g_object_class_install_property(gobject_class, CURLOBJECT_ALLOW_QUEUES,
+				  g_param_spec_boolean("allow-queues", "Allow queues",
+						       "Allow reuse of the curl handle, by queuing requests",
+						       FALSE, (GParamFlags)CURL_PARAM_STATIC_RW));
+
+  /* CURLINFO data, only some implemented so far. _all_ Read-only */
+
+  g_object_class_install_property(gobject_class, CURLOBJECT_RESPONSE_CODE,
+				  g_param_spec_long("response-code", "response-code",
+						    "The Response Code of the current request",
+						    0, 599, 200, (GParamFlags)CURL_PARAM_STATIC_RO));
+
+  /* Signals */
+  curl_object_class->signals[CONNECTION_CLOSED_SIGNAL] =
+    g_signal_new("connection_closed", 
+		 G_TYPE_FROM_CLASS(curl_object_class),
+		 G_SIGNAL_RUN_LAST,
+		 G_STRUCT_OFFSET(curlObjectClass, connection_closed), /* class closure */
+		 NULL, 		/* accumulator */
+		 NULL, 		/* accumulator data */
+		 g_cclosure_marshal_VOID__VOID, /* marshal */
+		 G_TYPE_NONE,	/* return type */
+		 0,	/* number of params */
+		 G_TYPE_STRING,
+		 G_TYPE_UINT,
+		 G_TYPE_POINTER); /* param types */
+
+  /* This function is not thread safe! */
+  curl_object_class->global_init = curl_global_init(CURL_GLOBAL_ALL);
+
+  gobject_class->dispose  = curl_object_dispose;
+  gobject_class->finalize = curl_object_finalize;
+
+  return ;
+}
+
+#ifdef NEVER_GETS_CALLED_FOR_STATIC_TYPES
+static void curl_object_class_finalize(CURLObjectClass curl_object_class)
+{
+  /* Check it'll only get run once! */
+  curl_global_cleanup();
+
+  return ;
+}
+#endif
+
+static void curl_object_init(CURLObject curl_object)
+{
+  CURLObjectClass obj_class = CURL_OBJECT_GET_CLASS(curl_object);
+
+  curl_object->last_easy_status = obj_class->global_init;
+
+  if(curl_object->last_easy_status == CURLE_OK)
+    {
+      /* Can carry on here... */
+      if((curl_object->easy  = curl_easy_init()))
+	curl_object->last_easy_status  = CURLE_OK;
+      if((curl_object->multi = curl_multi_init()))
+	curl_object->last_multi_status = CURLM_OK;
+      /* We don't add the easy handle here, 
+       * but do it dynamically later. */
+
+      curl_easy_setopt(curl_object->easy, CURLOPT_NOPROGRESS, TRUE);
+      
+      //curl_easy_setopt(curl_object->easy, CURLOPT_NOSIGNAL, TRUE);
+
+      curl_easy_setopt(curl_object->easy, CURLOPT_ERRORBUFFER, &(curl_object->error_message[0]));
+
+      curl_object->perform_queue = g_queue_new();
+
+      curl_object->allow_queue   = TRUE;
+
+      curl_object->curl_version  = curl_version_info(CURLVERSION_NOW);
+    }
+
+  return ;
+}
+
+static void curl_object_dispose(GObject *gobject)
+{
+  GObjectClass *gobject_class;
+  CURLObjectClass curl_class;
+
+  curl_class = CURL_OBJECT_GET_CLASS(gobject);
+
+  gobject_class = (GObjectClass *)g_type_class_peek_parent(curl_class);
+
+  if(gobject_class->dispose)
+    (* gobject_class->dispose)(gobject);
+
+  return ;
+}
+
+static void curl_object_finalize(GObject *gobject)
+{
+  CURLObject curl_object = CURL_OBJECT(gobject);
+  GObjectClass *gobject_class;
+  CURLObjectClass curl_class;
+
+  if(_curl_status_ok(gobject))
+    {
+      curl_multi_cleanup(curl_object->multi);
+      curl_object->multi = NULL;
+      curl_easy_cleanup(curl_object->easy);
+      curl_object->easy  = NULL;
+    }
+  
+  if((curl_object->curl_version) &&
+     (curl_object->curl_version->version_num < 0x071700))
+    g_list_foreach(curl_object->pre717strings, free_pre717_strings, NULL);
+  
+  if((curl_object->perform_queue) &&
+     (!g_queue_is_empty(curl_object->perform_queue)))
+    {
+      g_queue_foreach(curl_object->perform_queue, 
+		      invoke_destroy_settings_perform, 
+		      NULL);
+    }
+
+  if(curl_object->perform_queue)
+    g_queue_free(curl_object->perform_queue);
+  curl_object->perform_queue = NULL;
+
+  if(curl_object->settings_to_destroy)
+    {
+      curl_object->settings_to_destroy =
+	(GObjectClass*)destroy_settings_perform((curl_settings_perform_struct *)(curl_object->settings_to_destroy));
+    }
+
+  if(curl_object->manage_post_data &&
+     curl_object->post_data_2_free)
+    {
+      g_free(curl_object->post_data_2_free);
+      curl_object->post_data_2_free = NULL ;
+    }
+
+  /* Chain up.... */
+  curl_class = CURL_OBJECT_GET_CLASS(gobject);
+
+  gobject_class = (GObjectClass*)g_type_class_peek_parent(curl_class);
+
+  if(gobject_class->finalize)
+    (* gobject_class->finalize)(gobject);
+
+  return ;
+}
+
+static void curl_object_set_property(GObject      *gobject, 
+				     guint         param_id, 
+				     const GValue *value, 
+				     GParamSpec   *pspec)
+{
+  CURLObject curl_object = NULL;
+
+  g_return_if_fail(_curl_status_ok(gobject));
+
+  curl_object = CURL_OBJECT(gobject);
+
+  if(curl_object->transfer_in_progress)
+    {
+      if(curl_object->allow_queue)
+	save_settings(curl_object, param_id, value, pspec);
+
+      return ;
+    }
+
+  switch(param_id)
+    {
+    case CURLOPT_URL:
+    case CURLOPT_VERBOSE:
+    case CURLOPT_PORT:
+    case CURLOPT_WRITEFUNCTION:
+    case CURLOPT_WRITEDATA:
+    case CURLOPT_READFUNCTION:
+    case CURLOPT_READDATA:
+    case CURLOPT_HEADERFUNCTION:
+    case CURLOPT_HEADERDATA:
+    case CURLOPT_POST:
+    case CURLOPT_POSTFIELDSIZE:
+    case CURLOPT_HTTPGET:
+    case CURLOPT_HTTPHEADER:
+    case CURLOPT_COOKIEFILE:
+    case CURLOPT_PROXY:
+    case CURLOPT_USERAGENT:
+    case CURLOPT_IPRESOLVE:
+    case CURLOPT_CAINFO:
+    case CURLOPT_USERPWD:
+    case CURLOPT_USERNAME:
+    case CURLOPT_PASSWORD:
+    case CURLOPT_CUSTOMREQUEST:
+      if(G_IS_PARAM_SPEC_STRING(pspec))
+	{
+	  char *str;
+	  str = (char *)g_value_get_string(value);
+
+	  /* Need to know whether to copy the string */
+	  if(curl_object->curl_version->version_num < 0x071700)
+	    {
+	      str = g_value_dup_string(value);
+	      curl_object->pre717strings = g_list_append(curl_object->pre717strings, str);
+	    }
+
+	  curl_object->last_easy_status =
+            curl_easy_setopt(curl_object->easy, (CURLoption)param_id, str);
+
+	  if(curl_object->debug == 1)
+	    g_warning("Setting param '%d' to '%s'", param_id, str);
+	}
+      else if(G_IS_PARAM_SPEC_POINTER(pspec))
+	curl_object->last_easy_status =
+	  curl_easy_setopt(curl_object->easy, (CURLoption)param_id, g_value_get_pointer(value));	
+      else if(G_IS_PARAM_SPEC_BOOLEAN(pspec))
+	{
+	  curl_object->last_easy_status =
+	    curl_easy_setopt(curl_object->easy, (CURLoption)param_id, g_value_get_boolean(value));
+	  if(param_id == CURLOPT_VERBOSE)
+	    curl_object->debug = g_value_get_boolean(value);
+	}
+      else if(G_IS_PARAM_SPEC_LONG(pspec))
+	curl_object->last_easy_status =
+	  curl_easy_setopt(curl_object->easy, (CURLoption)param_id, g_value_get_long(value));
+      else if(G_IS_PARAM_SPEC_UINT(pspec))
+	curl_object->last_easy_status =
+	  curl_easy_setopt(curl_object->easy, (CURLoption)param_id, g_value_get_uint(value));	
+      else
+	g_warning("Param id '%d' has unexpected ParamSpec.", param_id);
+      break;
+    case CURLOPT_POSTFIELDS:
+      if(G_IS_PARAM_SPEC_POINTER(pspec))
+	{
+	  curl_object->last_easy_status =
+	    curl_easy_setopt(curl_object->easy, (CURLoption)param_id, g_value_get_pointer(value));
+	  curl_object->post_data_2_free = g_value_get_pointer(value);
+	}
+      else
+	g_warning("Param id '%d' has unexpected ParamSpec.", param_id);
+      break;
+    case CURLOBJECT_MANAGE_POSTFIELDS:
+      curl_object->manage_post_data = g_value_get_boolean(value);
+      break;
+    case CURLOBJECT_ALLOW_QUEUES:
+      curl_object->allow_queue = g_value_get_boolean(value);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, param_id, pspec);
+      break;
+    }
+
+  if(curl_object->last_easy_status != CURLE_OK)
+    g_warning("Setting property '%s' failed. (curl_easy_setopt code %d)", 
+	      pspec->name, curl_object->last_easy_status);
+
+  return ;
+}
+
+static void curl_object_get_property(GObject    *gobject, 
+				     guint       param_id, 
+				     GValue     *value, 
+				     GParamSpec *pspec)
+{
+  CURLObject curl_object = CURL_OBJECT(gobject);
+
+  g_return_if_fail(_curl_status_ok(gobject));
+
+  switch(param_id)
+    {
+    case CURLOBJECT_ALLOW_QUEUES:
+      g_value_set_boolean(value, curl_object->allow_queue);
+      break;
+    case CURLOBJECT_MANAGE_POSTFIELDS:
+      g_value_set_boolean(value, curl_object->manage_post_data);
+      break;
+    case CURLOBJECT_RESPONSE_CODE:
+      {
+	long response_code;
+	if(curl_easy_getinfo(curl_object->easy, 
+			     CURLINFO_RESPONSE_CODE, 
+			     &response_code) == CURLE_OK)
+	  g_value_set_long(value, response_code);
+      }
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, param_id, pspec);
+      break;
+    }
+
+  return ;
+}
+
+
+static gboolean _curl_status_ok(GObject *gobject)
+{
+  CURLObject object;
+
+  g_return_val_if_fail(CURL_IS_OBJECT(gobject), FALSE);
+
+  object = CURL_OBJECT(gobject);
+
+  return ((object->last_multi_status == CURLM_OK) &&
+	  (object->last_easy_status  == CURLE_OK));
+}
+
+static gboolean curl_fd_to_watched_GIOChannel(gint         fd, 
+					      GIOCondition cond, 
+					      GIOFunc      func, 
+					      gpointer     data)
+{
+  gboolean success = FALSE;
+  GIOChannel *io_channel;
+  
+  if((io_channel = g_io_channel_unix_new(fd)))
+    {
+      GError *flags_error = NULL;
+      GIOStatus status;
+      
+      if((status = g_io_channel_set_flags(io_channel, 
+					  (GIOFlags)(G_IO_FLAG_NONBLOCK | g_io_channel_get_flags(io_channel)), 
+					  &flags_error)) == G_IO_STATUS_NORMAL)
+	{
+#ifdef CURL_SET_ENCODING
+	  g_io_channel_set_encoding(io_channel, "ISO8859-1", NULL);
+#endif /* CURL_SET_ENCODING */
+	  g_io_add_watch_full(io_channel, G_PRIORITY_DEFAULT, 
+			      cond, func, data, 
+			      transfer_finished_notify);
+	  
+	  success = TRUE;
+	}
+      else
+	g_warning("%s", flags_error->message);
+      
+      g_io_channel_unref(io_channel); /* We don't need this anymore */
+    }
+  
+  return success;
+}
+
+static gboolean curl_object_watch_func(GIOChannel  *source, 
+				       GIOCondition condition, 
+				       gpointer     user_data)
+{
+  CURLObject curl_object = CURL_OBJECT(user_data);
+  int running_handles = 0 ;
+  gboolean call_again = FALSE;
+    
+  if((condition & G_IO_OUT) ||
+     (condition & G_IO_IN))
+    {
+      while((curl_object->last_multi_status = curl_multi_perform(curl_object->multi, &running_handles))
+            == CURLM_CALL_MULTI_PERFORM)
+        {
+          if(running_handles < 1)
+            {
+              g_warning("%s\n", "curl_multi_perform requested to run again, but has no remaining handles");
+              break ;
+            }
+        }
+
+      if (running_handles > 0)
+        call_again = TRUE ;
+    }
+  else if((condition & G_IO_HUP) ||
+	  (condition & G_IO_ERR) ||
+	  (condition & G_IO_NVAL))
+    {
+      g_warning("%s\n", "HUP, ERR or NVAL");
+      call_again = FALSE;
+    }
+  else
+    {
+      g_warning("%s\n", "something else?");
+      call_again = FALSE;
+    }
+    
+  return call_again;
+}
+
+static void run_multi_perform(CURLObject curl_object)
+{
+  CURLMsg *easy_msg;
+  int still_runnning = 0;
+  gboolean got_handler = FALSE;
+  gboolean try_again = FALSE;
+  int max_tries = 100;
+  int count = 0;
+
+  g_return_if_fail(_curl_status_ok(G_OBJECT(curl_object)));
+
+  do 
+    {
+      try_again = FALSE;
+      ++count;
+
+      do {
+        curl_object->last_multi_status = curl_multi_perform(curl_object->multi, &still_runnning);
+      } while (curl_object->last_multi_status == CURLM_CALL_MULTI_PERFORM);
+
+      easy_msg = curl_multi_info_read(curl_object->multi, &still_runnning);
+
+      if(easy_msg && easy_msg->easy_handle == curl_object->easy)
+        curl_object->last_easy_status = easy_msg->data.result;
+
+      if((curl_object->last_easy_status == CURLE_OK) &&
+         (curl_object->last_multi_status != CURLM_CALL_MULTI_PERFORM))
+        {
+          GIOCondition write_cond = (GIOCondition)(G_IO_OUT | G_IO_HUP | G_IO_ERR | G_IO_NVAL);
+          fd_set read_set, write_set, exc_set;
+          int fd, fd_max;
+
+          FD_ZERO(&read_set);
+          FD_ZERO(&write_set);
+          FD_ZERO(&exc_set);
+
+          /* Stupid curl, why can't I get the fd to the current added job? */
+          curl_object->last_multi_status = curl_multi_fdset(curl_object->multi, 
+                                                            &read_set, &write_set, 
+                                                            &exc_set, &fd_max);
+          if(fd_max == -1) {
+            g_warning("curl_multi_fdset returned fd_max as -1; trying again\n");
+            SHORT_SLEEP;
+            try_again = TRUE;
+          }
+          else 
+            {
+              for(fd = 0; fd <= fd_max; fd++)
+                {
+                  if (FD_ISSET(fd, &write_set))
+                    {
+                      curl_fd_to_watched_GIOChannel(fd, write_cond, 
+                                                    curl_object_watch_func, 
+                                                    curl_object);
+                      curl_object->transfer_in_progress = got_handler = TRUE;
+                    }
+                }
+            }
+        }
+    } while (try_again && count < max_tries);
+
+  if(got_handler == FALSE)
+    {
+      curl_multi_remove_handle(curl_object->multi, curl_object->easy);
+    }
+
+  return ;
+}
+
+static CURLObjectStatus perform_later(CURLObject curl_object, gboolean use_multi)
+{
+  CURLObjectStatus status = CURL_STATUS_OK;
+  curl_settings_perform details = NULL;
+
+  if (!(details = (curl_settings_perform)g_queue_peek_tail(curl_object->perform_queue)))
+    {
+      /* use previous... 
+       * This will retry the previous easy handle completely unchanged... */
+      details = g_new0(curl_settings_perform_struct, 1);
+      g_queue_push_head(curl_object->perform_queue, details);
+    }
+
+  details->use_multi = use_multi;
+  details->perform_called = TRUE;
+
+  return status;
+}
+
+static void save_settings(CURLObject    curl_object, 
+			  guint         param_id,
+			  const GValue *value,
+			  GParamSpec   *pspec)
+{
+  curl_settings_perform details = NULL;
+  curl_settings this_detail = NULL;
+
+  if(g_queue_is_empty(curl_object->perform_queue))
+    {
+      details = g_new0(curl_settings_perform_struct, 1);
+      g_queue_push_head(curl_object->perform_queue, details);
+    }
+  else
+    {
+      details = (curl_settings_perform)g_queue_peek_tail(curl_object->perform_queue);
+    }
+
+  if((this_detail = g_new0(curl_settings_struct, 1)))
+    {
+      this_detail->option = (CURLoption)param_id;
+      this_detail->pspec  = g_param_spec_ref(pspec);
+
+      g_value_init(&(this_detail->value), 
+		   G_PARAM_SPEC_VALUE_TYPE(pspec));
+      g_value_copy(value, &(this_detail->value));
+
+      details->settings_list = g_list_append(details->settings_list, 
+					     this_detail);
+    }
+  
+  return ;
+}
+
+static void invoke_set(gpointer list_data, gpointer user_data)
+{
+  CURLObject curl_object = CURL_OBJECT(user_data);
+  curl_settings setting = (curl_settings)list_data;
+  CURLObjectClass curl_class;
+  GObjectClass *gobject_class;
+
+  curl_class    = CURL_OBJECT_GET_CLASS(curl_object);
+  gobject_class = G_OBJECT_CLASS(curl_class);
+
+  (gobject_class->set_property)(G_OBJECT(curl_object), 
+				setting->option,
+				&(setting->value),
+				setting->pspec);
+
+  return ;
+}
+
+static void perform_next(CURLObject curl_object)
+{
+  curl_settings_perform details = NULL;
+
+  if((curl_object->transfer_in_progress == FALSE) &&
+     (details = (curl_settings_perform)g_queue_pop_head(curl_object->perform_queue)) &&
+     (details->perform_called == TRUE))
+    {
+      g_list_foreach(details->settings_list, invoke_set, curl_object);
+      CURLObjectPerform(curl_object, details->use_multi);
+      curl_object->settings_to_destroy = details;
+    }
+
+  return;
+}
+
+static void transfer_finished_notify(gpointer user_data)
+{
+  CURLObject curl_object = NULL;
+
+  curl_object = CURL_OBJECT(user_data);
+
+  if(curl_object->settings_to_destroy)
+    {
+      curl_object->settings_to_destroy =
+	destroy_settings_perform((curl_settings_perform)(curl_object->settings_to_destroy));
+    }
+
+  curl_object->transfer_in_progress = FALSE;
+
+  curl_object->last_multi_status = 
+    curl_multi_remove_handle(curl_object->multi,
+			     curl_object->easy);
+
+
+  g_signal_emit(G_OBJECT(curl_object),
+		CURL_OBJECT_GET_CLASS(curl_object)->signals[CONNECTION_CLOSED_SIGNAL],
+		0, NULL);
+
+  if(curl_object->perform_queue)
+    perform_next(curl_object);
+
+  return ;
+}
+
+/* Clean up functions for the curl_settings_perform alloactions */
+static void destroy_list_item(gpointer list_data, gpointer unused_data)
+{
+  curl_settings destroy_me = (curl_settings)list_data;
+
+  g_param_spec_unref(destroy_me->pspec);
+
+  /* I have a feeling this is going to miss clearing up pointers... */
+
+  g_value_unset(&(destroy_me->value));
+
+  g_free(destroy_me);
+
+  return ;
+}
+
+static gpointer destroy_settings_perform(curl_settings_perform details)
+{
+  details->perform_called = FALSE;
+
+  g_list_foreach(details->settings_list, destroy_list_item, NULL);
+  
+  g_list_free(details->settings_list);
+
+  g_free(details);
+
+  return NULL;
+}
+
+static void invoke_destroy_settings_perform(gpointer q_data, gpointer unused_data)
+{
+  destroy_settings_perform((curl_settings_perform)q_data);
+
+  return ;
+}
+
+static void free_pre717_strings(gpointer str_data, gpointer unused)
+{
+  g_free(str_data);
+
+  return ;
+}
+
+#ifdef NEEDS_PROGRESS
+static int curl_object_progress_func(void *clientp,
+				     double dltotal,
+				     double dlnow,
+				     double ultotal,
+				     double ulnow)
+{
+  CURLObject curl_object = NULL;
+
+  curl_object = CURL_OBJECT(clientp);
+
+  g_warning("Downloaded %f of %f", dlnow, dltotal);
+
+  return 0;
+}
+#endif /* NEEDS_PROGRESS */
+
+
+
+
+
+} /* gbtools namespace */
+
diff --git a/gbtools/src/gbtoolsCurl/gbtoolsCurl_P.hpp b/gbtools/src/gbtoolsCurl/gbtoolsCurl_P.hpp
new file mode 100644
index 0000000..45df4b6
--- /dev/null
+++ b/gbtools/src/gbtoolsCurl/gbtoolsCurl_P.hpp
@@ -0,0 +1,96 @@
+/*  File: gbtoolsCurl_P.h
+ *  Author: Roy Storey (rds at sanger.ac.uk)
+ *  Copyright (c) 2006-2015: Genome Research Ltd.
+ *-------------------------------------------------------------------
+ * ZMap 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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ *-------------------------------------------------------------------
+ * This file is part of the ZMap genome database package
+ * originally written by:
+ *
+ * 	Ed Griffiths (Sanger Institute, UK) edgrif at sanger.ac.uk,
+ *      Roy Storey (Sanger Institute, UK) rds at sanger.ac.uk
+ *
+ * Description: Internal structs etc for the object interface to
+ *              the curl library.
+ *
+ *-------------------------------------------------------------------
+ */
+#ifndef GBTOOLS_CURL_P_H
+#define GBTOOLS_CURL_P_H
+
+#include <gbtools/gbtoolsCurl.hpp>
+
+
+namespace gbtools
+{
+
+#define CURL_PARAM_STATIC    (G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB)
+#define CURL_PARAM_STATIC_RO (CURL_PARAM_STATIC | G_PARAM_READABLE)
+#define CURL_PARAM_STATIC_RW (CURL_PARAM_STATIC | G_PARAM_READWRITE)
+#define CURL_PARAM_STATIC_WO (CURL_PARAM_STATIC | G_PARAM_WRITABLE)
+
+
+enum
+  {
+    CONNECTION_CLOSED_SIGNAL,
+    LAST_SIGNAL
+  };
+
+typedef struct _curlObjectStruct
+{
+  GObject __parent__;
+
+  CURL  *easy;
+  CURLM *multi;
+  
+  CURLcode  last_easy_status;
+  CURLMcode last_multi_status;
+
+  GQueue *perform_queue;
+
+  gpointer settings_to_destroy;
+  gpointer post_data_2_free;
+
+  char error_message[CURL_ERROR_SIZE];
+
+  curl_version_info_data *curl_version;
+
+  GList *pre717strings;
+
+  unsigned int allow_queue : 1;
+  unsigned int transfer_in_progress : 1;
+  unsigned int manage_post_data : 1;
+  unsigned int debug : 1;
+} curlObjectStruct;
+
+typedef struct _curlObjectClassStruct
+{
+  GObjectClass parent_class;
+
+  CURLcode  global_init;
+
+  void (* connection_closed)(CURLObject object);
+
+  guint signals[LAST_SIGNAL];
+
+} curlObjectClassStruct;
+
+
+
+} /* gbtools namespace */
+
+
+#endif /* GBTOOLS_CURL_P_H */
diff --git a/gbtools/src/gbtoolsGUI/Makefile.am b/gbtools/src/gbtoolsGUI/Makefile.am
new file mode 100644
index 0000000..4e37959
--- /dev/null
+++ b/gbtools/src/gbtoolsGUI/Makefile.am
@@ -0,0 +1,12 @@
+
+include $(top_srcdir)/src/Makefile.am.common
+
+SUBDIRS = .
+
+noinst_LTLIBRARIES = libgbtoolsGUI.la
+
+libgbtoolsGUI_la_SOURCES = gbtoolsGUI.cpp
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_builddir)/src/gbtoolsGUI/Makefile.in
diff --git a/gbtools/src/gbtoolsGUI/Makefile.in b/gbtools/src/gbtoolsGUI/Makefile.in
new file mode 100644
index 0000000..5e96e83
--- /dev/null
+++ b/gbtools/src/gbtoolsGUI/Makefile.in
@@ -0,0 +1,720 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 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@
+
+# Common includes for all compiles.....
+#
+
+VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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@
+DIST_COMMON = $(top_srcdir)/src/Makefile.am.common \
+	$(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+	$(top_srcdir)/config/depcomp
+subdir = src/gbtoolsGUI
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/./gbtools_version.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libgbtoolsGUI_la_LIBADD =
+am_libgbtoolsGUI_la_OBJECTS = gbtoolsGUI.lo
+libgbtoolsGUI_la_OBJECTS = $(am_libgbtoolsGUI_la_OBJECTS)
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+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) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CXXFLAGS) $(CXXFLAGS)
+AM_V_CXX = $(am__v_CXX_ at AM_V@)
+am__v_CXX_ = $(am__v_CXX_ at AM_DEFAULT_V@)
+am__v_CXX_0 = @echo "  CXX     " $@;
+am__v_CXX_1 = 
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+	$(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CXXLD = $(am__v_CXXLD_ at AM_V@)
+am__v_CXXLD_ = $(am__v_CXXLD_ at AM_DEFAULT_V@)
+am__v_CXXLD_0 = @echo "  CXXLD   " $@;
+am__v_CXXLD_1 = 
+SOURCES = $(libgbtoolsGUI_la_SOURCES)
+DIST_SOURCES = $(libgbtoolsGUI_la_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-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 \
+	tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+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@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+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@
+DEPS_CFLAGS = @DEPS_CFLAGS@
+DEPS_LIBS = @DEPS_LIBS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+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@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_BLATSRC = @USE_BLATSRC@
+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@
+AM_CPPFLAGS = \
+$(DEPS_CFLAGS) \
+-I$(top_srcdir)/src/include \
+-I$(top_srcdir)/src/include/blatSrc
+
+AM_CXXFLAGS = -std=c++11 -g -Wall
+SUBDIRS = .
+noinst_LTLIBRARIES = libgbtoolsGUI.la
+libgbtoolsGUI_la_SOURCES = gbtoolsGUI.cpp
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_builddir)/src/gbtoolsGUI/Makefile.in
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .cpp .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(top_srcdir)/src/Makefile.am.common $(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 src/gbtoolsGUI/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/gbtoolsGUI/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_srcdir)/src/Makefile.am.common:
+
+$(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-noinstLTLIBRARIES:
+	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+	@list='$(noinst_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+
+libgbtoolsGUI.la: $(libgbtoolsGUI_la_OBJECTS) $(libgbtoolsGUI_la_DEPENDENCIES) $(EXTRA_libgbtoolsGUI_la_DEPENDENCIES) 
+	$(AM_V_CXXLD)$(CXXLINK)  $(libgbtoolsGUI_la_OBJECTS) $(libgbtoolsGUI_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gbtoolsGUI.Plo at am__quote@
+
+.cpp.o:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cpp.lo:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LTCXXCOMPILE) -c -o $@ $<
+
+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.
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	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"
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	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; \
+	$(am__define_uniq_tagged_files); \
+	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-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	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"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+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 \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    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 $(LTLIBRARIES)
+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:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+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."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile 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 -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+	check-am clean clean-generic clean-libtool \
+	clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am 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 \
+	installdirs-am maintainer-clean maintainer-clean-generic \
+	mostlyclean mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
+	uninstall-am
+
+
+# these don't work....or maybe they do...try again...???
+#libgbtools_la_CPPFLAGS =  $(DEPS_CFLAGS)
+#libgbtools_la_CXXFLAGS = -g  -Wall -std=c++0x
+
+# 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/gbtools/src/gbtoolsGUI/gbtoolsGUI.cpp b/gbtools/src/gbtoolsGUI/gbtoolsGUI.cpp
new file mode 100644
index 0000000..3a9984b
--- /dev/null
+++ b/gbtools/src/gbtoolsGUI/gbtoolsGUI.cpp
@@ -0,0 +1,249 @@
+/*  File: gbtoolsGUI.cpp
+ *  Author: Gemma Barson, 2015-03-02
+ *  Copyright (c) 2015 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * gbtools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the gbtools genome browser tools library, 
+ * written by
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ *      Steve Miller      (Sanger Institute, UK)  <sm23 at sanger.ac.uk>
+ *
+ * Description: See gbtoolsGUI.hpp
+ *----------------------------------------------------------------------------
+ */
+
+#include <gbtools/gbtoolsGUI.hpp>
+#include <gtk/gtk.h>
+#include <string.h>
+
+
+namespace gbtools 
+{
+
+/* When we guess max window size we allow this much space for desktop toolbars on the screen. */
+#define TOOLBAR_ALLOWANCE 0.90
+
+static gboolean getWorkAreaSize(GdkScreen *screen, gint *width_out, gint *height_out) ;
+
+
+/* Utility to get the size of the monitor that the given widget is displayed on. Returns true if 
+ * successful, false if there was a problem (in which case output values are unchanged).
+ *
+ * If X windows is configured using RANDR to have several physical screens as one big
+ * virtual screen then this routine will still find the size of the current physical
+ * screen which is what we want for display rather then spreading zmap across several 
+ * screens */
+gboolean GUIGetTrueMonitorSize(GtkWidget *widget, int *width_out, int *height_out)
+{
+  gboolean result = FALSE ;
+  GdkScreen *screen = NULL ;
+  int monitor_idx = 0 ; /* default to first monitor (idx 0) */
+  gint width = 0 ;
+  gint height = 0 ;
+  GdkRectangle rect ;
+
+  g_return_val_if_fail(widget, result) ;
+
+  /* Note that a screen may consist of multiple monitors, so we actually use the current
+   * monitor dimensions as this makes more sense than spreading our windows across multiple
+   * monitors */
+  screen = gtk_widget_get_screen(widget) ;
+
+  if (widget->window)
+    monitor_idx = gdk_screen_get_monitor_at_window(screen, widget->window) ;
+#if CHECK_GTK_VERSION(2, 20)
+  else
+    monitor_idx = gdk_screen_get_primary_monitor(screen) ;
+#endif
+
+
+#if CHECK_GTK_VERSION(3, 4)
+
+  gdk_screen_get_monitor_workarea(screen, monitor_idx, &rect) ;
+  
+  width = rect.width ;
+  height = rect.height ;
+
+#else
+
+  if (!getWorkAreaSize(screen, &width, &height))
+    {
+      /* OK, here we just get the raw screen size and return that * some appropriate proportion,
+       * note that the window width is kind of irrelevant, we just set it to be a bit less
+       * than it will finally be and the widgets will resize it to the correct width.
+       * We don't use gtk_window_set_default_size() because it doesn't seem to work. */
+      gdk_screen_get_monitor_geometry(screen, monitor_idx, &rect) ;
+
+      width = rect.width ;
+      height = rect.height ;
+
+      /* Reduce the height because it's really annoying to have it the full height of the screen
+       * initially as nearly everyone has tool bars etc. on their screen.... */
+      height = (int)((float)(height) * TOOLBAR_ALLOWANCE) ;
+    }
+
+#endif
+
+  if (width_out)
+    *width_out = width ;
+  
+  if (height_out)
+    *height_out = height ;
+
+  result = TRUE ;
+
+  return result ;
+}
+
+
+/* Utility to get the size of the monitor multiplied by the given width/height fractions. Returns true
+ * if successful, false if there was a problem (in which case output values are unchanged) */
+gboolean GUIGetTrueMonitorSizeFraction(GtkWidget *widget, const double width_fraction, const double height_fraction, int *width_out, int *height_out)
+{
+  gboolean result = gbtools::GUIGetTrueMonitorSize(widget, width_out, height_out) ;
+
+  if (result)
+    {
+      if (width_out)
+        *width_out *= width_fraction ;
+        
+      if (height_out)
+        *height_out *= height_fraction ;
+    }
+
+  return result ;
+}
+
+
+/*
+ *                      Internal functions
+ */
+
+/* Quizzes various Atoms that may be set up in the X server to give hints about
+ * screen size and layout (e.g. screen size accounting for toolbars etc) and
+ * returns the max work area size or FALSE if the atoms aren't on the server. */
+static gboolean getWorkAreaSize(GdkScreen *screen, gint *width_out, gint *height_out)
+{
+  gboolean result = FALSE ;
+
+  /*! \todo This code causes strange crashing or incorrect window sizes. So far I've only
+   * seen the problem in optimised code on ubuntu trusty 64-bit dual monitor machines. */
+#ifdef CRASHES_IN_OPTIMISED_CODE
+  GdkAtom geometry_atom, workarea_atom, max_atom_vert ;
+  int window_width = 0, window_height = 0 ;
+
+
+  /* Get the atoms for _NET_* properties. */
+  geometry_atom = gdk_atom_intern("_NET_DESKTOP_GEOMETRY", FALSE) ;
+  workarea_atom = gdk_atom_intern("_NET_WORKAREA", FALSE) ;
+  max_atom_vert = gdk_atom_intern("_NET_WM_STATE_MAXIMIZED_VERT", FALSE) ;
+
+  if (gdk_x11_screen_supports_net_wm_hint(screen, geometry_atom)
+      && gdk_x11_screen_supports_net_wm_hint(screen, workarea_atom))
+    {
+      /* We want to get these properties....
+       *   _NET_DESKTOP_GEOMETRY(CARDINAL) = 1600, 1200
+       *   _NET_WORKAREA(CARDINAL) = 0, 0, 1600, 1154, 0, 0, 1600, 1154,...repeated for all workspaces.
+       *
+       * In fact we don't use the geometry (i.e. screen size) but its useful
+       * to see it.
+       *
+       * When retrieving 32 bit items, these items will be stored in _longs_, this means
+       * that on a 32 bit machine they come back in 32 bits BUT on 64 bit machines they
+       * come back in 64 bits.
+       *
+       *  */
+      GdkWindow *root_window ;
+      gulong offset, length ;
+      gint pdelete = FALSE ;    /* Never delete the property data. */
+      GdkAtom actual_property_type ;
+      gint actual_format, actual_length, field_size, num_fields ;
+      guchar *data, *curr ;
+      guint width, height, left, top, right, bottom ;
+
+      field_size = sizeof(glong) ;    /* see comment above re. 32 vs. 64 bits. */
+
+      root_window = gdk_screen_get_root_window(screen) ;
+
+
+      /* Only get this property because it's good for debugging... */
+      offset = 0 ;
+      num_fields = 2 ;
+      length = num_fields * 4 ;    /* Get two unsigned ints worth of data. */
+      actual_format = actual_length = 0 ;
+      data = NULL ;
+      result = gdk_property_get(root_window,
+                                geometry_atom,
+                                GDK_NONE,
+                                offset,
+                                length,
+                                pdelete,
+                                &actual_property_type,
+                                &actual_format,
+                                &actual_length,
+                                &data) ;
+
+      if (result && num_fields == actual_length/sizeof(glong))
+        {
+          curr = data ;
+          memcpy(&width, curr, field_size) ;
+          memcpy(&height, (curr += field_size), field_size) ;
+          g_free(data) ;
+        }
+
+      offset = 0 ;
+      num_fields = 4 ;
+      length = num_fields * 4 ;    /* Get four unsigned ints worth of data. */
+      actual_format = actual_length = 0 ;
+      data = NULL ;
+      result = gdk_property_get(root_window,
+                                workarea_atom,
+                                GDK_NONE,
+                                offset,
+                                length,
+                                pdelete,
+                                &actual_property_type,
+                                &actual_format,
+                                &actual_length,
+                                &data) ;
+
+      if (result && num_fields == actual_length/sizeof(glong))
+        {
+          curr = data ;
+          memcpy(&left, curr, field_size) ;
+          memcpy(&top, (curr += field_size), field_size) ;
+          memcpy(&right, (curr += field_size), field_size) ;
+          memcpy(&bottom, (curr += field_size), field_size) ;
+          g_free(data) ;
+
+          /* off by one ? */
+          window_width = right - left ;
+          window_height = bottom - top ;
+
+          *width_out = window_width ;
+          *height_out = window_height ;
+        }
+    }
+
+#endif
+
+  return result ;
+}
+
+
+} /* gbtools namespace */
diff --git a/gbtools/src/gbtoolsPfetch/Makefile.am b/gbtools/src/gbtoolsPfetch/Makefile.am
new file mode 100644
index 0000000..ec07375
--- /dev/null
+++ b/gbtools/src/gbtoolsPfetch/Makefile.am
@@ -0,0 +1,18 @@
+
+include $(top_srcdir)/src/Makefile.am.common
+
+SUBDIRS = .
+
+noinst_LTLIBRARIES = libgbtoolsPfetch.la
+
+libgbtoolsPfetch_la_SOURCES = \
+gbtoolsPfetch.cpp \
+gbtoolsPfetchPipe.cpp \
+gbtoolsPfetchHttp.cpp \
+$(NULL)  
+
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/src/gbtoolsPfetch/Makefile.in
+
diff --git a/gbtools/src/gbtoolsPfetch/Makefile.in b/gbtools/src/gbtoolsPfetch/Makefile.in
new file mode 100644
index 0000000..ffb60ee
--- /dev/null
+++ b/gbtools/src/gbtoolsPfetch/Makefile.in
@@ -0,0 +1,728 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 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@
+
+# Common includes for all compiles.....
+#
+
+VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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@
+DIST_COMMON = $(top_srcdir)/src/Makefile.am.common \
+	$(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+	$(top_srcdir)/config/depcomp README
+subdir = src/gbtoolsPfetch
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/./gbtools_version.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libgbtoolsPfetch_la_LIBADD =
+am_libgbtoolsPfetch_la_OBJECTS = gbtoolsPfetch.lo gbtoolsPfetchPipe.lo \
+	gbtoolsPfetchHttp.lo
+libgbtoolsPfetch_la_OBJECTS = $(am_libgbtoolsPfetch_la_OBJECTS)
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+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) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CXXFLAGS) $(CXXFLAGS)
+AM_V_CXX = $(am__v_CXX_ at AM_V@)
+am__v_CXX_ = $(am__v_CXX_ at AM_DEFAULT_V@)
+am__v_CXX_0 = @echo "  CXX     " $@;
+am__v_CXX_1 = 
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+	$(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CXXLD = $(am__v_CXXLD_ at AM_V@)
+am__v_CXXLD_ = $(am__v_CXXLD_ at AM_DEFAULT_V@)
+am__v_CXXLD_0 = @echo "  CXXLD   " $@;
+am__v_CXXLD_1 = 
+SOURCES = $(libgbtoolsPfetch_la_SOURCES)
+DIST_SOURCES = $(libgbtoolsPfetch_la_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-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 \
+	tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+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@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+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@
+DEPS_CFLAGS = @DEPS_CFLAGS@
+DEPS_LIBS = @DEPS_LIBS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+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@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_BLATSRC = @USE_BLATSRC@
+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@
+AM_CPPFLAGS = \
+$(DEPS_CFLAGS) \
+-I$(top_srcdir)/src/include \
+-I$(top_srcdir)/src/include/blatSrc
+
+AM_CXXFLAGS = -std=c++11 -g -Wall
+SUBDIRS = .
+noinst_LTLIBRARIES = libgbtoolsPfetch.la
+libgbtoolsPfetch_la_SOURCES = \
+gbtoolsPfetch.cpp \
+gbtoolsPfetchPipe.cpp \
+gbtoolsPfetchHttp.cpp \
+$(NULL)  
+
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/src/gbtoolsPfetch/Makefile.in
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .cpp .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(top_srcdir)/src/Makefile.am.common $(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 src/gbtoolsPfetch/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/gbtoolsPfetch/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_srcdir)/src/Makefile.am.common:
+
+$(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-noinstLTLIBRARIES:
+	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+	@list='$(noinst_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+
+libgbtoolsPfetch.la: $(libgbtoolsPfetch_la_OBJECTS) $(libgbtoolsPfetch_la_DEPENDENCIES) $(EXTRA_libgbtoolsPfetch_la_DEPENDENCIES) 
+	$(AM_V_CXXLD)$(CXXLINK)  $(libgbtoolsPfetch_la_OBJECTS) $(libgbtoolsPfetch_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gbtoolsPfetch.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gbtoolsPfetchHttp.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gbtoolsPfetchPipe.Plo at am__quote@
+
+.cpp.o:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cpp.lo:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LTCXXCOMPILE) -c -o $@ $<
+
+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.
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	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"
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	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; \
+	$(am__define_uniq_tagged_files); \
+	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-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	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"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+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 \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    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 $(LTLIBRARIES)
+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:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+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."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile 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 -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+	check-am clean clean-generic clean-libtool \
+	clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am 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 \
+	installdirs-am maintainer-clean maintainer-clean-generic \
+	mostlyclean mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
+	uninstall-am
+
+
+# these don't work....or maybe they do...try again...???
+#libgbtools_la_CPPFLAGS =  $(DEPS_CFLAGS)
+#libgbtools_la_CXXFLAGS = -g  -Wall -std=c++0x
+
+# 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/gbtools/src/gbtoolsPfetch/README b/gbtools/src/gbtoolsPfetch/README
new file mode 100644
index 0000000..e22217b
--- /dev/null
+++ b/gbtools/src/gbtoolsPfetch/README
@@ -0,0 +1,108 @@
+================================================================================
+gbtoolsPfetch
+
+This package provides an object interface to the pfetch server. Two interfaces
+are supported:
+
+        - a pipe interface to the pfetch command line client program that
+          itself accesses the pfetch server.
+
+        - an http interface to the pfetch server itself
+
+See "Pfetch Server" below for a description of what can be retrieved from the
+pfetch server. The Pfetch objects pass through any arguments they are given
+for the pfetch server and simply retrieve the resulting text.
+
+
+Overview
+--------
+
+The Pfetch class implements functions common to both pipe and http interfaces
+as an abstract base class, PfetchPipe and PfetchHttp then inherit from Pfetch
+and augment it with extra functions/data as appropriate.
+
+Class definitions have been kept as simple as possible by hiding details of
+either the pipe or http code completely. This has involved passing around a
+pointer to the pfetch object as in both cases asynchronous code with callback
+routines is used to get the data from the pfetch server.
+
+The application registers callbacks for reading, error and closing of the
+pfetch connection and these are in turn called from the objects callbacks
+which are themselves registered with Glib or curl code for accessing the
+server.
+
+
+
+
+
+Pfetch Server
+-------------
+
+The following "help" description from pfetch shows what can be retrieved:
+
+
+PFETCH SERVER - retrieve entries from sequence databases.
+
+Usage:
+    pfetch [options] <query> [<query2>...]
+    pfetch <query:start-end> [<query2:start-end>...]
+
+eg. To retrieve EMBL clone AP000869 and UNIPROT protein DYNA_CHICK:
+    pfetch AP000869 DYNA_CHICK
+
+eg. To retrieve the length of AP000869 and DYNA_CHICK:
+    pfetch -l AP000869 DYNA_CHICK
+
+Ensembl Usage:
+    pfetch [options] [--repeatmask] --asm <asm_name> <chr_name> -s <start_bp> -e <end_bp>
+    pfetch --listasm
+
+eg. To retrieve human chromosome 10, bp 50001-60000 for assembly NCBI35:
+    pfetch --asm NCBI35 10 -s 50001 -e 60000
+
+Options:
+-a <#>        Search EMBL and UniProtKB archive, including current data
+              (Release # optional; otherwise returns latest sequence version)
+-A            Search EMBL and UniProtKB archive, including current data
+              (returns all sequence versions, if no sequence version is given)
+-d            Search only one database
+-s <#>        Return sequence starting at position <#>
+-e <#>        Return sequence ending at position <#>
+-l            Return the length of the sequence only
+-r            Reverse-complement returned sequence (DNA only)
+-F            Return full database entry
+-i            Start interactive session
+-q            Sequence only output (one line)
+-n <name>     Use <name> for output sequence
+-C            Return DNA in lower case, protein in upper case
+-D            Return description (DE) line only
+-Q            Return base quality values (not all databases supported!)
+-t            Search only trace repository
+-S            Show server status
+-v            Show verbose output
+-V            Show version
+-H|h          Show this help message
+
+--pdb         pdb file retrieval  (old file format, pre 01-Aug-07)
+--dssp        dssp calculations   (based on old file format, pre 01-Aug-07)
+--old_pdb     pdb file retrieval  (old file format, pre 01-Aug-07)
+--old_dssp    dssp calculations   (based on old file format, pre 01-Aug-07)
+--new_pdb     pdb file retrieval
+--new_dssp    dssp calculations
+
+--md5          Return the MD5 hexdigest of sequence (excludes descr. line)
+--ends         Return first and last 500bp of sequence
+--head <#>     Return first <#>bp of sequence
+--tail <#>     Return last <#>bp of sequence
+
+--listasm      Show available Ensembl assemblies
+--repeatmask   Return repeat masked sequence (Ensembl queries only)
+
+use "-t -H" and "-T -H" to see the trace archive and trace internal repository
+specific options, respectively.
+
+by Tony Cox (avc at sanger.ac.uk)
+Version 5.12, 14-Nov-2007
+
+
+================================================================================
diff --git a/gbtools/src/gbtoolsPfetch/gbtoolsPfetch.cpp b/gbtools/src/gbtoolsPfetch/gbtoolsPfetch.cpp
new file mode 100644
index 0000000..9a7c4a2
--- /dev/null
+++ b/gbtools/src/gbtoolsPfetch/gbtoolsPfetch.cpp
@@ -0,0 +1,86 @@
+/*  File: gbtoolsPfetch.cpp
+ *  Author: Ed Griffiths (edgrif at sanger.ac.uk)
+ *  Copyright (c) 2016: Genome Research Ltd.
+ *-------------------------------------------------------------------
+ * ZMap 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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ *-------------------------------------------------------------------
+ * This file is part of the ZMap genome database package
+ * originally written by:
+ *
+ * 	Ed Griffiths (Sanger Institute, UK) edgrif at sanger.ac.uk,
+ *      Steve Miller (Sanger Institute, UK) sm23 at sanger.ac.uk
+ *      Gemma Barson (Sanger Institute, UK) gb10 at sanger.ac.uk
+ *
+ * Description: Abstract base class for pfetch classes.
+ *
+ * Exported functions: See <gbtools/gbtoolsPfetch.hpp>
+ *
+ *-------------------------------------------------------------------
+ */
+
+#include <stdlib.h>
+#include <string.h>
+
+#include <gbtools/gbtoolsPfetch.hpp>
+
+
+
+namespace gbtools
+{
+
+  Pfetch::Pfetch(const char *location,
+                 ReaderFunc reader_func, ErrorFunc error_func, ClosedFunc closed_func,
+                 void *user_data)
+    : location_{strdup(location)},
+    reader_func_{reader_func}, error_func_{error_func}, closed_func_{closed_func}, user_data_{user_data}
+  {
+    opts_.full = false ;
+    opts_.debug = false ;
+
+    return ;
+  }
+
+
+  void Pfetch::setEntryType(bool full_entry)
+  {
+    opts_.full = full_entry ; 
+
+    return ;
+  }
+
+
+  void Pfetch::setDebug(bool debug_on)
+  { 
+    opts_.debug = debug_on ;
+
+    return ;
+  }
+
+  const char* Pfetch::getLocation()
+  {
+    return location_ ;
+  }
+
+  Pfetch::~Pfetch()
+  {
+    free((void *)location_) ;
+
+    return ;
+  }
+
+
+} /* gbtools namespace */
+
diff --git a/gbtools/src/gbtoolsPfetch/gbtoolsPfetchHttp.cpp b/gbtools/src/gbtoolsPfetch/gbtoolsPfetchHttp.cpp
new file mode 100644
index 0000000..edd6a56
--- /dev/null
+++ b/gbtools/src/gbtoolsPfetch/gbtoolsPfetchHttp.cpp
@@ -0,0 +1,320 @@
+/*  File: gbtoolsPfetch.cpp
+ *  Author: Ed Griffiths (edgrif at sanger.ac.uk)
+ *  Copyright (c) 2016: Genome Research Ltd.
+ *-------------------------------------------------------------------
+ * ZMap 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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ *-------------------------------------------------------------------
+ * This file is part of the ZMap genome database package
+ * originally written by:
+ *
+ * 	Ed Griffiths (Sanger Institute, UK) edgrif at sanger.ac.uk,
+ *      Steve Miller (Sanger Institute, UK) sm23 at sanger.ac.uk
+ *      Gemma Barson (Sanger Institute, UK) gb10 at sanger.ac.uk
+ *
+ * Description: http interface to pfetch server, retrieves sequence
+ *              information by direct http requests to pfetch server
+ *              using libcurl to do the requests.
+ *
+ * Exported functions: See <gbtools/gbtoolsPfetch.hpp>
+ *
+ *-------------------------------------------------------------------
+ */
+
+#include <stdlib.h>
+#include <string.h>
+
+#include <gbtools/gbtoolsPfetch.hpp>
+
+
+namespace gbtools
+{
+
+  // control block used from various callbacks.
+  struct PfetchHttpData
+  {
+    // Need access to the pfetch object from the callbacks.
+    PfetchHttp *pfetch ;
+
+    CURLObject curl_object ;
+
+    // user callbacks & data....repeated to here to avoid exposing implementation in class definition.
+    ReaderFunc reader_func ;
+    ErrorFunc error_func ;
+    ClosedFunc closed_func ;
+    void *user_data ;
+
+    unsigned int request_counter;
+  } ;
+
+
+  static char *build_post_data(PfetchHttpData *pfetch_data,
+                               bool full, const char *location, const char *sequence) ;
+  static void pfetch_get_argv(const char *location, bool full, const char *request, char **argv) ;
+
+  static size_t http_curl_write_func (void *ptr, size_t size, size_t nmemb, void *stream) ;
+  static size_t http_curl_header_func(void *ptr, size_t size, size_t nmemb, void *stream) ;
+  static void conn_close_handler(CURLObject curl_object, PfetchHttpData *pfetch_data) ;
+
+
+
+
+
+  //
+  //                    External functions
+  //
+
+
+  PfetchHttp::PfetchHttp(const char *location, unsigned int port,
+                         const char* cookie_jar, long ipresolve, const char *cainfo, char *proxy,
+                         ReaderFunc reader_func, ErrorFunc error_func, ClosedFunc closed_func,
+                         void *user_data)
+    : Pfetch{location, reader_func, error_func, closed_func, user_data},
+    http_port_{port},
+    cookie_jar_location_{strdup(cookie_jar)},
+    ipresolve_{ipresolve}, cainfo_{(cainfo ? strdup(cainfo) : NULL)}, proxy_{(proxy ? strdup(proxy) : NULL)},
+    curl_object_{NULL}, request_counter_{0}
+{
+
+  return ;
+}
+
+
+  /* Returns the error message in the curl object, if there is one. The result is a new string
+   * which should be free'd with g_free. Returns null if no error. */
+  char *PfetchHttp::getError()
+  {
+    char *result = NULL ;
+
+    if (curl_object_)
+      CURLObjectErrorMessage(curl_object_, &result) ;
+
+    return result ;
+  }
+
+
+
+
+  bool PfetchHttp::fetch(const char *sequence, char **error_msg)
+  {
+    bool result = true ;
+    PfetchHttpData *pfetch_data ;
+    char *post_data ;
+
+    // Set up out callback data which includes this object.
+    pfetch_data = new PfetchHttpData ;
+    pfetch_data->pfetch = this ;
+    pfetch_data->reader_func = reader_func_ ;
+    pfetch_data->error_func = error_func_ ;
+    pfetch_data->closed_func = closed_func_ ;
+    pfetch_data->user_data = user_data_ ;
+
+    pfetch_data->curl_object = CURLObjectNew();
+
+    g_signal_connect(G_OBJECT(pfetch_data->curl_object), "connection_closed",
+                     (GCallback)conn_close_handler, pfetch_data) ;
+
+
+    if((post_data = build_post_data(pfetch_data, opts_.full, location_, sequence)))
+      {
+        CURLObjectSet(pfetch_data->curl_object,
+                      /* general settings */
+                      "debug", opts_.debug,
+                      "post",  TRUE,
+                      "url",   location_,
+                      "port",  http_port_,
+                      "ipresolve", ipresolve_,
+                      "cainfo", cainfo_,
+                      /* request */
+                      "postfields", post_data,
+                      "cookiefile",  cookie_jar_location_,
+                      /* functions */
+                      "writefunction",  http_curl_write_func,
+                      "writedata",      pfetch_data,
+                      "headerfunction", http_curl_header_func,
+                      "headerdata",     pfetch_data,
+                      /* end of options */
+                      NULL) ;
+
+        if (proxy_)
+          CURLObjectSet(pfetch_data->curl_object, "proxy",  proxy_, NULL) ;
+      
+        pfetch_data->request_counter++ ;
+
+        if (CURLObjectPerform(pfetch_data->curl_object, TRUE) == CURL_STATUS_FAILED)
+          {
+            char *curl_object_error = NULL;
+            unsigned int error_size = 0;
+            bool result ;
+            char *err_msg = NULL ;
+
+            /* first get message */
+            CURLObjectErrorMessage(pfetch_data->curl_object, &curl_object_error) ;
+
+            error_size = strlen(curl_object_error);
+             
+            result = pfetch_data->error_func(curl_object_error, &error_size, &err_msg, pfetch_data->user_data) ;
+
+            /* set our return status */
+            *error_msg = err_msg ;
+
+            result = false ;
+          }
+      }
+
+    return result ;
+  }
+
+
+
+
+  
+  PfetchHttp::~PfetchHttp()
+  {
+    free((void *)cookie_jar_location_) ;
+
+    if (cainfo_)
+      free((void *)cainfo_) ;
+
+    if (proxy_)
+      free((void *)proxy_) ;
+
+    return ;
+  }
+
+
+
+
+
+  //
+  //                        Internal functions
+  //
+
+  static char *build_post_data(PfetchHttpData *pfetch_data,
+                               bool full, const char *location, const char *sequence)
+  {
+    GString *post_string = NULL;
+    char *post = NULL;
+
+    if(sequence)
+      {
+        char *tmp_str = g_strdup("\0");
+        char *argv[256] = { tmp_str };
+        char **argv_ptr = &argv[1];
+
+        post_string = g_string_sized_new(128);
+      
+
+        //AGH....HACK FOR NOW....BLIXEM SETS UP "request=" IN THE CONFIG FILE, ZMAP DOESN'T....
+        if (!(strstr(sequence, "request=")))
+          g_string_append_printf(post_string, "request=");
+
+        // this all seems unecessary but let's go with it for now.....      
+        pfetch_get_argv(location, full, sequence, &argv[0]) ;
+
+        if(argv_ptr && *argv_ptr)
+          {
+            while(argv_ptr && *argv_ptr)
+              {
+                g_string_append_printf(post_string, "%s ", *argv_ptr);
+                argv_ptr++;
+              }
+          }
+
+        post = g_string_free(post_string, FALSE);
+
+        g_free(tmp_str);
+      }
+
+    return post;
+  }
+
+  static void pfetch_get_argv(const char *location, bool full, const char *request, char **argv)
+  {
+    int current = 0 ;
+
+    argv[current++] = (char *)location ;
+
+    if (full)
+      argv[current++] = (char *)"-F" ;
+
+    if (request != NULL)
+      argv[current++] = (char *)request ;
+
+    argv[current] = NULL ;
+  
+    return ;
+  }
+
+
+  // libcurl callbacks.
+  //
+
+  static size_t http_curl_header_func( void *ptr, size_t size, size_t nmemb, void *stream)
+  {
+    size_t size_handled = 0;
+    
+    size_handled = size * nmemb;
+
+    return size_handled;
+  }
+
+  static size_t http_curl_write_func( void *ptr, size_t size, size_t nmemb, void *stream)
+  {
+    size_t size_handled = 0 ;
+    PfetchHttpData *pfetch_data = (PfetchHttpData *)(stream) ;
+    guint actual_read = 0;
+    guint saved_size  = 0;
+    bool result ;
+    char *err_msg = NULL ;
+
+
+    saved_size = actual_read = size * nmemb;
+
+    if ((result = pfetch_data->reader_func((char *)ptr, &actual_read, &err_msg, pfetch_data->user_data)))
+      {
+        size_handled = actual_read ;
+      }
+  
+    if (saved_size != actual_read)
+      g_warning("'%d' != '%d'. Are you sure?", saved_size, actual_read);
+
+    return size_handled ;
+  }
+
+
+  // Main task is to destroy the curl object, it's created when we do a fetch and
+  // should be destroyed when we have finished.
+  static void conn_close_handler(CURLObject curl_object, PfetchHttpData *pfetch_data)
+  {
+    pfetch_data->closed_func(pfetch_data->user_data) ;
+
+    if (pfetch_data->curl_object)
+      {
+        pfetch_data->curl_object = CURLObjectDestroy(pfetch_data->curl_object) ;
+        pfetch_data->curl_object = NULL ;
+      }
+
+    return ;
+  }
+
+
+
+
+
+
+
+} // gbtools namespace should always be last
+
diff --git a/gbtools/src/gbtoolsPfetch/gbtoolsPfetchPipe.cpp b/gbtools/src/gbtoolsPfetch/gbtoolsPfetchPipe.cpp
new file mode 100644
index 0000000..fdc10da
--- /dev/null
+++ b/gbtools/src/gbtoolsPfetch/gbtoolsPfetchPipe.cpp
@@ -0,0 +1,597 @@
+/*  File: gbtoolsPfetch.cpp
+ *  Author: Ed Griffiths (edgrif at sanger.ac.uk)
+ *  Copyright (c) 2016: Genome Research Ltd.
+ *-------------------------------------------------------------------
+ * ZMap 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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ *-------------------------------------------------------------------
+ * This file is part of the ZMap genome database package
+ * originally written by:
+ *
+ * 	Ed Griffiths (Sanger Institute, UK) edgrif at sanger.ac.uk,
+ *      Steve Miller (Sanger Institute, UK) sm23 at sanger.ac.uk
+ *      Gemma Barson (Sanger Institute, UK) gb10 at sanger.ac.uk
+ *
+ * Description: pipe interface to pfetch server, retrieves sequence
+ *              information by a pipe connected to the pfetch client.
+ *
+ * Exported functions: See <gbtools/gbtoolsPfetch.hpp
+ *
+ *-------------------------------------------------------------------
+ */
+
+#include <string.h>
+#include <sys/wait.h>
+#include <errno.h>
+#include <unistd.h>
+
+#include <gbtools/gbtoolsPfetch.hpp>
+
+
+
+namespace gbtools
+{
+
+#define PFETCH_READ_SIZE 80
+
+
+  // I NEED TO FIX THIS STRUCT UP TO PASS TO OTHER STATIC FUNCTIONS.....
+  // I WONDER IF I CAN MAKE THE STATIC FUNCTIONS "FRIEND" FUNCTIONS
+  // SO THEY CAN ACCESS THE OBJECT DIRECTLY.....
+  // THIS IS TEDIOUS BUT I DON'T WANT ALL THIS IN THE CLASS STRUCT...
+
+  struct PfetchPipeData
+  {
+    // Need access to the pfetch object from the callbacks.
+    PfetchPipe *pfetch ;
+
+    guint    watch_id;
+    GPid     watch_pid;
+
+    // this needs to go.....
+    gpointer watch_data;
+
+
+    /* callbacks */
+    guint stdin_source_id;
+    guint stdout_source_id;
+    guint stderr_source_id;
+    guint timeout_source_id;
+
+
+    // user callbacks & data....repeated to here to avoid exposing implementation in class definition.
+    ReaderFunc reader_func ;
+    ErrorFunc error_func ;
+    ClosedFunc closed_func ;
+    void *user_data ;
+
+
+  } ;
+
+
+
+
+  static void pfetch_get_argv(const char *location, bool full, const char *request, char **argv) ;
+
+  static bool pfetch_spawn_async_with_pipes(PfetchPipeData *pfetch_data,
+                                            char *argv[], 
+                                            GIOFunc stdout_reader, GIOFunc stderr_reader, 
+                                            GDestroyNotify pipe_data_destroy, 
+                                            GError **error,
+                                            GChildWatchFunc child_func) ;
+
+  static gboolean pipe_stdout_func(GIOChannel *source, GIOCondition condition, gpointer user_data) ;
+  static gboolean pipe_stderr_func(GIOChannel *source, GIOCondition condition, gpointer user_data) ;
+  static void pfetch_child_watch_func(GPid pid, gint status, gpointer user_data) ;
+  static gboolean timeout_pfetch_process(gpointer user_data) ;
+  static void source_remove_and_zero(guint *source_id);
+  static void detach_and_kill(PfetchPipeData *pfetch_data) ;
+  static void detach_group_for_later_kill(void *unused) ;
+
+  static gboolean fd_to_GIOChannel_with_watch(gint fd, GIOCondition cond, GIOFunc func, 
+                                              gpointer data, GDestroyNotify destroy,
+                                              guint *source_id_out);
+
+
+  //
+  //              Class interface
+  //
+
+  PfetchPipe::PfetchPipe(const char *location,
+                         ReaderFunc reader_func, ErrorFunc error_func, ClosedFunc closed_func,
+                         void *user_data)
+    : Pfetch{location, reader_func, error_func, closed_func, user_data}
+{
+
+  return ;
+}
+
+
+
+  bool PfetchPipe::fetch(const char *sequence, char **error_msg)
+  {
+    bool result = false ;
+    PfetchPipeData *pfetch_data ;
+    char *argv[256];
+    GError *error = NULL ;
+
+    // WHERE IS THIS FREED ??????? YOU WALLY.....
+    // Set up out callback data which includes this object.
+    pfetch_data = new PfetchPipeData ;
+    pfetch_data->pfetch = this ;
+    pfetch_data->reader_func = reader_func_ ;
+    pfetch_data->error_func = error_func_ ;
+    pfetch_data->closed_func = closed_func_ ;
+    pfetch_data->user_data = user_data_ ;
+
+
+    // Set up the command line for the call to the pfetch script.
+    pfetch_get_argv(location_, opts_.full, sequence, &argv[0]) ;
+
+    if ((result = pfetch_spawn_async_with_pipes(pfetch_data,
+                                                argv, 
+                                                (reader_func_ != 0 ? pipe_stdout_func : NULL),
+                                                (error_func_  != 0 ? pipe_stderr_func : NULL),
+                                                NULL, &error, 
+                                                pfetch_child_watch_func)))
+      {
+        pfetch_data->timeout_source_id = g_timeout_add(30 * 1000, timeout_pfetch_process, pfetch_data) ;
+      }
+    else
+      {
+        *error_msg = strdup(error->message) ;
+
+        g_error_free(error) ;
+
+        // logging ?
+      }
+    
+    return result ;
+  }
+
+
+
+  PfetchPipe::~PfetchPipe()
+  {
+
+    return ;
+  }
+
+
+
+  //
+  // Internal functions.
+  //
+
+
+  static void pfetch_get_argv(const char *location, bool full, const char *request, char **argv)
+  {
+    int current = 0 ;
+
+    argv[current++] = (char *)location ;
+
+    if (full)
+      argv[current++] = (char *)"-F" ;
+
+    if (request != NULL)
+      argv[current++] = (char *)request ;
+
+    argv[current] = NULL ;
+  
+    return ;
+  }
+
+
+
+// Interface to pipe connection via GLib GIO objects.
+
+
+/* Wrapper around g_spawn_async_with_pipes() to aid with the logic
+ * contained in making that call. In the process of making the call
+ * the function converts requested File descriptors to non-blocking
+ * GIOChannels adding the corresponding GIOFunc to the channel with
+ * g_io_add_watch.
+ *
+ * Passing NULL for any of the GIOFunc parameters means the rules
+ * g_spawn_async_with_pipes() uses apply as NULL will be passed in
+ * place there.
+ *
+ * N.B. passing a GChildWatchFunc is untested... I waited for 
+ * G_IO_HUP instead.
+ *
+ * @param **argv        Argument vector
+ * @param stdout_reader GIOFunc to handle reading from the pipe.
+ * @param stderr_reader GIOFunc to handle reading from the pipe.
+ * @param pipe_data     user data to pass to the GIOFunc
+ * @param pipe_data_destroy GDestroyNotify for pipe_data
+ * @param error         GError location to return into 
+ *                       (from g_spawn_async_with_pipes)
+ * @param child_func    A GChildWatchFunc for the spawned PID 
+ * @param child_func_data data for the child_func
+ * @return              gboolean from g_spawn_async_with_pipes()
+ *
+ *  */
+
+static bool pfetch_spawn_async_with_pipes(PfetchPipeData *pfetch_data,
+                                          char *argv[],
+                                          GIOFunc stdout_reader, GIOFunc stderr_reader, 
+                                          GDestroyNotify pipe_data_destroy,
+                                          GError **error,
+                                          GChildWatchFunc child_func)
+{
+  bool result = false ;
+  char *cwd = NULL, **envp = NULL;
+  GSpawnChildSetupFunc child_setup = detach_group_for_later_kill ;
+  gpointer child_data = pfetch_data;
+  GPid child_pid;
+  gint *stdin_ptr = NULL,                                   // stdin is unused.
+    *stdout_ptr = NULL,
+    *stderr_ptr = NULL,
+    stdout_fd, 
+    stderr_fd;
+  GSpawnFlags flags = G_SPAWN_SEARCH_PATH;
+  GError *our_error = NULL ;
+
+  if(stdout_reader)
+    stdout_ptr = &stdout_fd;
+  if(stderr_reader)
+    stderr_ptr = &stderr_fd;
+
+  if(child_func)
+    flags = (GSpawnFlags)(flags | G_SPAWN_DO_NOT_REAP_CHILD) ;
+  else
+    child_setup = NULL ;
+
+  if ((result = g_spawn_async_with_pipes(cwd, argv, envp,
+                                         flags, child_setup, child_data, 
+                                         &child_pid, stdin_ptr,
+                                         stdout_ptr, stderr_ptr, 
+                                         &our_error)))
+    {
+      GIOCondition read_cond  = (GIOCondition)(G_IO_IN  | G_IO_HUP | G_IO_ERR | G_IO_NVAL);
+
+      if(child_func && pfetch_data && (pfetch_data->watch_pid = child_pid))
+	pfetch_data->watch_id = g_child_watch_add(child_pid, child_func, pfetch_data) ;
+
+      /* looks good so far... Set up the readers... */
+      if(stdout_ptr && !fd_to_GIOChannel_with_watch(*stdout_ptr, read_cond, stdout_reader,
+                                                    pfetch_data, pipe_data_destroy, &(pfetch_data->stdout_source_id)))
+	g_warning("%s", "Failed to add watch to stdout");
+      if(stderr_ptr && !fd_to_GIOChannel_with_watch(*stderr_ptr, read_cond, stderr_reader,
+                                                    pfetch_data, pipe_data_destroy, &(pfetch_data->stderr_source_id)))
+	g_warning("%s", "Failed to add watch to stderr");
+    }
+  else
+    {
+      *error = our_error ;
+    }
+
+  return result ;
+}
+
+
+
+/* GIOFunc - return TRUE to get called again */
+static gboolean pipe_stdout_func(GIOChannel *source, GIOCondition condition, gpointer user_data)
+{
+  gboolean call_again = FALSE ;
+  PfetchPipeData *pfetch_data = (PfetchPipeData *)user_data ;
+
+  if(condition & G_IO_IN)
+    {
+      GIOStatus io_status;
+      gchar output[PFETCH_READ_SIZE] = {0};
+      gsize actual_read = 0;
+      GError *error = NULL;
+      
+      if((io_status = g_io_channel_read_chars(source, &output[0], PFETCH_READ_SIZE, 
+					      &actual_read, &error)) == G_IO_STATUS_NORMAL)
+	{
+	  guint actual_read_uint = (guint)actual_read;
+          char *err_msg = NULL ;
+
+          // Just call the users read routine.....and get the response...
+          call_again = pfetch_data->reader_func(&output[0], &actual_read_uint, &err_msg, pfetch_data->user_data) ;
+	}
+      else
+	{
+	  guint actual_read_uint = 0;
+          char *err_msg = NULL ;
+
+	  switch(error->code)
+	    {
+	      /* Derived from errno */
+	    case G_IO_CHANNEL_ERROR_FBIG:
+	    case G_IO_CHANNEL_ERROR_INVAL:
+	    case G_IO_CHANNEL_ERROR_IO:
+	    case G_IO_CHANNEL_ERROR_ISDIR:
+	    case G_IO_CHANNEL_ERROR_NOSPC:
+	    case G_IO_CHANNEL_ERROR_NXIO:
+	    case G_IO_CHANNEL_ERROR_OVERFLOW:
+	    case G_IO_CHANNEL_ERROR_PIPE:
+	      break;
+	      /* Other */
+	    case G_IO_CHANNEL_ERROR_FAILED:
+	    default:
+	      break;
+	    }
+
+	  output[0]   = '\0';
+
+          // just call the users error routine.....
+          call_again = pfetch_data->reader_func(&output[0], &actual_read_uint, &err_msg, pfetch_data->user_data) ;
+
+          // Probably should just set this....
+	  call_again = FALSE;
+	}
+    }
+  else if(condition & G_IO_HUP)
+    {
+      
+    }
+  else if(condition & G_IO_ERR)
+    {
+
+    }
+  else if(condition & G_IO_NVAL)
+    {
+
+    }
+
+
+  return call_again ;
+}
+
+
+
+/* GIOFunc - return TRUE to get called again */
+static gboolean pipe_stderr_func(GIOChannel *source, GIOCondition condition, gpointer user_data)
+{
+  gboolean call_again = FALSE ;
+  PfetchPipeData *pfetch_data = (PfetchPipeData *)(user_data) ;
+
+  if (condition & G_IO_IN)
+    {
+      GIOStatus status;
+      gchar text[PFETCH_READ_SIZE] = {0};
+      gsize actual_read = 0;
+      GError *error = NULL;
+
+      if ((status = g_io_channel_read_chars(source, &text[0], PFETCH_READ_SIZE, 
+                                            &actual_read, &error)) == G_IO_STATUS_NORMAL)
+	{
+	  guint actual_read_uint = (guint)actual_read;
+          char *err_msg = NULL ;
+
+          call_again = pfetch_data->error_func(&text[0], &actual_read_uint, &err_msg, pfetch_data->user_data) ;
+	}
+    }
+
+  return call_again ;
+}
+
+
+
+
+
+static void pfetch_child_watch_func(GPid pid, gint status, gpointer user_data)
+{
+  PfetchPipeData *pfetch_data = (PfetchPipeData *)(user_data) ;
+
+  if (!WIFSIGNALED(status))
+    {
+      if(pfetch_data->watch_pid == 0)
+	{
+	  g_warning("%s", "pfetch pid == 0");
+	}
+      else if(pfetch_data->watch_pid != pid)
+        {
+          g_warning("pfetch process pid '%d' does not match '%d'", pid, pfetch_data->watch_pid);
+        }
+
+      //gosh not sure what to do here.....how do if and then else get called here....
+      // watch_data needs to go...
+      else if (pfetch_data->watch_data)
+	{
+	  pfetch_data->watch_pid = 0;
+          
+          pfetch_data->closed_func(pfetch_data->user_data) ;
+	}
+      else
+	{
+	  /* This is actually the default... */
+	  source_remove_and_zero(&(pfetch_data->watch_id));
+
+	  pfetch_data->watch_pid = 0;
+	}
+    }
+  else
+    {
+      g_warning("pfetch process [pid=%d] terminated (kill -%d).", pid, WTERMSIG(status));
+    }
+
+  /* always do this. */
+  g_spawn_close_pid(pid) ;
+
+  return ;
+}
+
+
+static gboolean timeout_pfetch_process(gpointer user_data)
+{
+  PfetchPipeData *pfetch_data = (PfetchPipeData *)(user_data) ;
+
+  if (pfetch_data->watch_pid)
+    {
+      gchar *text = NULL ;
+      bool call_again ;
+
+      text = g_strdup_printf("Process '%s' [pid=%d] timed out. Will be killed.",
+                             pfetch_data->pfetch->getLocation(), pfetch_data->watch_pid) ;
+
+      call_again = pfetch_data->error_func(text, 0, NULL, pfetch_data->user_data) ;
+
+      g_free(text) ;
+
+      /* we ned to do this before detach and kill I think... */
+      /* returning FALSE ensures it's removed. having a
+       * g_source_remove() go on, might be bad. */
+      pfetch_data->timeout_source_id = 0;
+	  
+      detach_and_kill(pfetch_data) ;
+    }
+
+  /* Always remove it. */
+  return FALSE ;
+}
+
+
+
+static void source_remove_and_zero(guint *source_id)
+{
+  if(source_id && *source_id)
+    {
+      g_source_remove(*source_id);
+      
+      *source_id = 0;
+    }
+
+  return ;
+}
+
+static void detach_and_kill(PfetchPipeData *pfetch_data)
+{
+  GPid pid;
+
+  source_remove_and_zero(&(pfetch_data->stdin_source_id));
+
+  source_remove_and_zero(&(pfetch_data->stdout_source_id));
+
+  source_remove_and_zero(&(pfetch_data->stderr_source_id));
+
+  source_remove_and_zero(&(pfetch_data->timeout_source_id));
+
+  if((pid = pfetch_data->watch_pid))
+    {
+      pid_t gid;
+      pfetch_data->watch_pid = 0;
+
+      errno = 0;
+      gid = getpgid(pid);
+
+      if(errno == ESRCH)
+	{
+	  g_warning("pfetch process [pid=%d] not found!", pid);
+	  errno = 0;
+	}
+      else if(gid > 1 && pid == gid)
+	{
+	  g_warning("pfetch process [pid=%d, gid=%d] being killed", pid, gid);
+	  kill(-gid, SIGKILL);
+	}
+      else
+	{
+	  g_warning("pfetch process [pid=%d, gid=%d] not killed as pid != gid", pid, gid);
+	}
+    }
+
+  return ;
+}
+
+
+// I wonder if this is ever called.....
+
+
+/* WARNING: This is _only_ executed in the child process! In order to
+ * debug this with totalview you _must_ use the following in LDFLAGS
+ * -L/usr/totalview/linux-x86/lib -ldbfork */
+static void detach_group_for_later_kill(void *unused)
+{
+  int setgrp_rv = 0;
+
+  errno = 0;
+
+  if((setgrp_rv = setpgid(0,0)) != 0)
+    {
+      /* You'll almost certainly _not_ see the result of these prints */
+      switch(errno)
+	{
+	case EACCES:
+	  printf("errno = EACCES\n");
+	  break;
+	case EINVAL:
+	  printf("errno = EINVAL\n");
+	  break;
+	case EPERM:
+	  printf("errno = EPERM\n");
+	  break;
+	case ESRCH:
+	  printf("errno = ESRCH\n");
+	  break;
+	case 0:
+	default:
+	  /* should not be reached according to man setpgrp() */
+	  break;
+	}
+      errno = 0;
+    }
+
+  return ;
+}
+
+
+static gboolean fd_to_GIOChannel_with_watch(gint fd, GIOCondition cond, GIOFunc func, 
+					    gpointer data, GDestroyNotify destroy,
+					    guint *source_id_out)
+{
+  gboolean success = FALSE;
+  GIOChannel *io_channel;
+
+  if((io_channel = g_io_channel_unix_new(fd)))
+    {
+      GError *flags_error = NULL;
+      GIOStatus status;
+
+      if((status = g_io_channel_set_flags(io_channel, 
+					  (GIOFlags)(G_IO_FLAG_NONBLOCK | g_io_channel_get_flags(io_channel)), 
+					  &flags_error)) == G_IO_STATUS_NORMAL)
+	{
+	  guint source_id;
+
+	  //g_io_channel_set_encoding(io_channel, "ISO8859-1", NULL);
+
+	  source_id = g_io_add_watch_full(io_channel, G_PRIORITY_DEFAULT, cond, func, data, destroy);
+
+	  if(source_id_out)
+	    *source_id_out = source_id;
+
+	  success = TRUE;
+	}
+      else
+	g_warning("%s", flags_error->message);
+
+      g_io_channel_unref(io_channel); /* We don't need this anymore */
+    }
+
+  return success;
+}
+
+
+
+
+
+
+
+} // End of gbtools namespace...should always be last.
diff --git a/gbtools/src/gbtoolsTrackhub/Makefile.am b/gbtools/src/gbtoolsTrackhub/Makefile.am
new file mode 100644
index 0000000..b51831a
--- /dev/null
+++ b/gbtools/src/gbtoolsTrackhub/Makefile.am
@@ -0,0 +1,15 @@
+
+include $(top_srcdir)/src/Makefile.am.common
+
+SUBDIRS = .
+
+noinst_LTLIBRARIES = libgbtoolsTrackhub.la
+
+libgbtoolsTrackhub_la_SOURCES = \
+gbtoolsTrackhub.cpp \
+$(NULL) 
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/src/gbtoolsTrackhub/Makefile.in
+
diff --git a/gbtools/src/gbtoolsTrackhub/Makefile.in b/gbtools/src/gbtoolsTrackhub/Makefile.in
new file mode 100644
index 0000000..5bfc5f4
--- /dev/null
+++ b/gbtools/src/gbtoolsTrackhub/Makefile.in
@@ -0,0 +1,723 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 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@
+
+# Common includes for all compiles.....
+#
+
+VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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@
+DIST_COMMON = $(top_srcdir)/src/Makefile.am.common \
+	$(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+	$(top_srcdir)/config/depcomp
+subdir = src/gbtoolsTrackhub
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/./gbtools_version.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libgbtoolsTrackhub_la_LIBADD =
+am_libgbtoolsTrackhub_la_OBJECTS = gbtoolsTrackhub.lo
+libgbtoolsTrackhub_la_OBJECTS = $(am_libgbtoolsTrackhub_la_OBJECTS)
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+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) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CXXFLAGS) $(CXXFLAGS)
+AM_V_CXX = $(am__v_CXX_ at AM_V@)
+am__v_CXX_ = $(am__v_CXX_ at AM_DEFAULT_V@)
+am__v_CXX_0 = @echo "  CXX     " $@;
+am__v_CXX_1 = 
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+	$(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CXXLD = $(am__v_CXXLD_ at AM_V@)
+am__v_CXXLD_ = $(am__v_CXXLD_ at AM_DEFAULT_V@)
+am__v_CXXLD_0 = @echo "  CXXLD   " $@;
+am__v_CXXLD_1 = 
+SOURCES = $(libgbtoolsTrackhub_la_SOURCES)
+DIST_SOURCES = $(libgbtoolsTrackhub_la_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-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 \
+	tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+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@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+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@
+DEPS_CFLAGS = @DEPS_CFLAGS@
+DEPS_LIBS = @DEPS_LIBS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+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@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_BLATSRC = @USE_BLATSRC@
+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@
+AM_CPPFLAGS = \
+$(DEPS_CFLAGS) \
+-I$(top_srcdir)/src/include \
+-I$(top_srcdir)/src/include/blatSrc
+
+AM_CXXFLAGS = -std=c++11 -g -Wall
+SUBDIRS = .
+noinst_LTLIBRARIES = libgbtoolsTrackhub.la
+libgbtoolsTrackhub_la_SOURCES = \
+gbtoolsTrackhub.cpp \
+$(NULL) 
+
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/src/gbtoolsTrackhub/Makefile.in
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .cpp .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(top_srcdir)/src/Makefile.am.common $(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 src/gbtoolsTrackhub/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/gbtoolsTrackhub/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_srcdir)/src/Makefile.am.common:
+
+$(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-noinstLTLIBRARIES:
+	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+	@list='$(noinst_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+
+libgbtoolsTrackhub.la: $(libgbtoolsTrackhub_la_OBJECTS) $(libgbtoolsTrackhub_la_DEPENDENCIES) $(EXTRA_libgbtoolsTrackhub_la_DEPENDENCIES) 
+	$(AM_V_CXXLD)$(CXXLINK)  $(libgbtoolsTrackhub_la_OBJECTS) $(libgbtoolsTrackhub_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gbtoolsTrackhub.Plo at am__quote@
+
+.cpp.o:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cpp.lo:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LTCXXCOMPILE) -c -o $@ $<
+
+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.
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	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"
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	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; \
+	$(am__define_uniq_tagged_files); \
+	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-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	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"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+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 \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    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 $(LTLIBRARIES)
+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:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+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."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile 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 -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+	check-am clean clean-generic clean-libtool \
+	clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am 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 \
+	installdirs-am maintainer-clean maintainer-clean-generic \
+	mostlyclean mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
+	uninstall-am
+
+
+# these don't work....or maybe they do...try again...???
+#libgbtools_la_CPPFLAGS =  $(DEPS_CFLAGS)
+#libgbtools_la_CXXFLAGS = -g  -Wall -std=c++0x
+
+# 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/gbtools/src/gbtoolsTrackhub/gbtoolsTrackhub.cpp b/gbtools/src/gbtoolsTrackhub/gbtoolsTrackhub.cpp
new file mode 100644
index 0000000..eb15e7e
--- /dev/null
+++ b/gbtools/src/gbtoolsTrackhub/gbtoolsTrackhub.cpp
@@ -0,0 +1,960 @@
+/*  File: gbtoolsTrackhub.cpp
+ *  Author: Gemma Barson (gb10 at sanger.ac.uk)
+ *  Copyright (c) 2016: Genome Research Ltd.
+ *-------------------------------------------------------------------
+ * ZMap 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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ *-------------------------------------------------------------------
+ * This file is part of the ZMap genome database package
+ * originally written by:
+ *
+ * 	Ed Griffiths (Sanger Institute, UK) edgrif at sanger.ac.uk,
+ *      Roy Storey (Sanger Institute, UK) rds at sanger.ac.uk
+ *
+ * Description: Object to access the Ensembl Track Hub Registry
+ *
+ *-------------------------------------------------------------------
+ */
+
+#include <iostream>
+#include <string>
+
+#include <curl/curl.h>
+
+#include <json/json.h>
+
+#include <gbtools/gbtoolsTrackhub.hpp>
+#include <gbtools/gbtoolsCurl.hpp>
+#include <gbtools/gbtoolsUtils.hpp>
+
+
+using namespace std;
+using namespace gbtools;
+
+
+namespace // unnamed namespace
+{
+
+using namespace gbtools::trackhub;
+
+#define TRACKHUB_REGISTRY_HOST "https://www.trackhubregistry.org"
+
+#define API_SEARCH_ENTRIES_PER_PAGE 100
+
+#define API_INFO_PING "/api/info/ping"
+#define API_INFO_VERSION "/api/info/version"
+#define API_INFO_SPECIES "/api/info/species"
+#define API_INFO_ASSEMBLIES "/api/info/assemblies"
+#define API_INFO_TRACKHUBS "/api/info/trackhubs"
+#define API_SEARCH "/api/search"
+#define API_SEARCH_TRACKDB "/api/search/trackdb"
+#define API_LOGIN "/api/login"
+#define API_LOGOUT "/api/logout"
+#define API_TRACKHUB "/api/trackhub"
+#define API_TRACKDB "/api/trackdb"
+
+
+// This enum lists the expected return codes from the trackhub registry api
+enum class ResponseCode: long
+{   UNSET = 0,
+    OK = 200,
+    CREATED = 201,
+    BAD_REQUEST = 400,
+    INVALID_CREDENTIALS = 401,
+    NOT_FOUND = 404,
+    GONE = 410,
+    SERVER_ERR = 500,
+    UNAVAILABLE = 503
+    } ;
+
+
+class CurlReadData
+{
+public:
+  CurlReadData(): readptr(NULL), sizeleft(0.0) 
+  {
+  };
+
+  CurlReadData(const char *data) 
+  {
+    readptr = data; 
+    sizeleft = strlen(data);
+  };
+
+  const char *readptr;
+  long sizeleft;
+};
+
+
+int curlWriteDataCB(char *data, size_t size, size_t nmemb, string *buffer)
+{
+  int size_written = size * nmemb;
+
+  if (buffer && data)  
+    {
+      buffer->append(data, size * nmemb);
+    }
+
+  return size_written;
+}   
+
+size_t curlReadDataCB(char *data, size_t size, size_t nmemb, CurlReadData *read_data)
+{
+  int size_written = 0;
+
+  if (size * nmemb > 0 && read_data && read_data->sizeleft > 0 && data)
+    {
+      *data = read_data->readptr[0]; /* copy one single byte */
+      read_data->readptr++;          /* advance pointer */
+      read_data->sizeleft--;         /* we return 1 byte at a time! */
+      size_written = 1;
+    }
+
+  return size_written;
+}
+
+
+// Create a Track class for the track in the given json and add it to the given list.
+// Recurse through any child tracks and add them to the new Track class's children.
+// Also add its file type (if it has one) to the list of types.
+// Pass in the visibility of the parent track, which will be used if the visibility of this track
+// is not set (or "none" if no parent has it set).
+void getTracks(Json::ValueIterator &iter, 
+               list<Track> &track_list,
+               list<string> &file_types,
+               string visibility)
+{
+  Json::Value js_track = *iter;
+
+  if (js_track["visibility"].isString())
+    visibility = js_track["visibility"].asString() ;
+
+  Track track(js_track["track"].asString(),
+              js_track["shortLabel"].asString(),
+              js_track["bigDataUrl"].asString(),
+              js_track["type"].asString(),
+              visibility
+              );
+
+  if (js_track["type"].isString())
+    file_types.push_back(js_track["type"].asString());
+
+  // Recurse through any child tracks
+  Json::Value js_children = js_track["members"];
+
+  for (Json::ValueIterator child = js_children.begin(); child != js_children.end(); ++child)
+    getTracks(child, track.children_, file_types, visibility);
+
+  // Add the track to the list. Must do this last because it takes a copy.
+  track_list.push_back(track);
+}
+
+// Process the results of a request. If the response code indicates an error, set the error
+// message. Returns the contents of the buffer in json format.
+Json::Value processRequestResult(const string &buffer,
+                                 const long response_code,
+                                 Json::Reader reader,
+                                 string &err_msg)
+{
+  Json::Value js;
+  reader.parse(buffer, js);
+
+  stringstream err_ss;
+
+  ResponseCode code = (ResponseCode)response_code;
+
+  switch (code)
+    {
+    case ResponseCode::OK:
+      break;
+    case ResponseCode::CREATED:
+      break;
+    case ResponseCode::BAD_REQUEST:
+      err_ss << "Bad request: " << js["error"].asString();
+      break;
+    case ResponseCode::INVALID_CREDENTIALS:
+      err_ss << "Invalid credentials: " << js.asString();
+      break;
+    case ResponseCode::NOT_FOUND:
+      err_ss << "Not found: " << js["error"].asString();
+      break;
+    case ResponseCode::GONE:
+      err_ss << "Response '" <<  response_code << "': server gone";
+      break;
+    case ResponseCode::SERVER_ERR:
+      err_ss << "Response '" <<  response_code << "': internal server error";
+      break;
+    case ResponseCode::UNAVAILABLE:
+      err_ss << "Response '" <<  response_code << "': server unavailable";
+      break;
+    default:
+      err_ss << "Unrecognised response code '" <<  response_code << "'";
+      break;
+    } ;
+
+  err_msg = err_ss.str();
+
+  return js;
+}
+
+
+} // unnamed namespace
+
+
+
+namespace gbtools
+{
+
+namespace trackhub
+{
+
+
+Registry::Registry()
+  : curl_object_get_(NULL),
+    curl_object_post_(NULL),
+    curl_object_delete_(NULL),
+    debug_(false),
+    proxy_(""),
+    useragent_("")
+{
+  host_ = TRACKHUB_REGISTRY_HOST;
+
+  useragent_ = "gbtools/" ;
+  useragent_ += UtilsGetVersionString() ;
+}
+
+Registry::~Registry()
+{
+}
+
+
+void Registry::initCurl()
+{
+  if (curl_object_get_)
+    CURLObjectDestroy(curl_object_get_) ;
+
+  if (curl_object_post_)
+    CURLObjectDestroy(curl_object_post_) ;
+
+  if (curl_object_delete_)
+    CURLObjectDestroy(curl_object_delete_) ;
+
+  // Set up curl objects for GET/POST requests. Set the properties here that will be 
+  // the same for all requests.  */
+  curl_object_get_ = CURLObjectNew();
+  curl_object_post_ = CURLObjectNew();
+  curl_object_delete_ = CURLObjectNew();
+ 
+  CURLObjectSet(curl_object_get_, 
+                "post",           FALSE,
+                "writefunction",  curlWriteDataCB,
+                NULL);
+
+  CURLObjectSet(curl_object_post_, 
+                "post",           TRUE,
+                "writefunction",  curlWriteDataCB,
+                "readfunction",   curlReadDataCB,
+                NULL);
+
+  CURLObjectSet(curl_object_delete_, 
+                "post",           FALSE,
+                "writefunction",  curlWriteDataCB,
+                "customrequest", "DELETE",
+                NULL);
+
+  CURLObjectSet(curl_object_get_,    "debug", debug_, NULL);
+  CURLObjectSet(curl_object_post_,   "debug", debug_, NULL);
+  CURLObjectSet(curl_object_delete_, "debug", debug_, NULL);
+
+  if (!proxy_.empty())
+    {
+      CURLObjectSet(curl_object_get_,    "proxy", proxy_.c_str(), NULL);
+      CURLObjectSet(curl_object_post_,   "proxy", proxy_.c_str(), NULL);
+      CURLObjectSet(curl_object_delete_, "proxy", proxy_.c_str(), NULL);
+    }
+
+  if (!cainfo_.empty())
+    {
+      CURLObjectSet(curl_object_get_,    "cainfo", cainfo_.c_str(), NULL);
+      CURLObjectSet(curl_object_post_,   "cainfo", cainfo_.c_str(), NULL);
+      CURLObjectSet(curl_object_delete_, "cainfo", cainfo_.c_str(), NULL);
+    }
+
+  if (!useragent_.empty())
+    {
+      CURLObjectSet(curl_object_get_,    "useragent", useragent_.c_str(), NULL);
+      CURLObjectSet(curl_object_post_,   "useragent", useragent_.c_str(), NULL);
+      CURLObjectSet(curl_object_delete_, "useragent", useragent_.c_str(), NULL);
+    }
+}
+
+
+void Registry::setDebug(const bool debug)
+{
+  debug_ = debug ;
+}
+
+void Registry::setProxy(const string &proxy)
+{
+  proxy_ = proxy ;
+}
+
+void Registry::setCainfo(const string &cainfo)
+{
+  cainfo_ = cainfo ;
+}
+
+void Registry::setUserAgent(const string &useragent)
+{
+  useragent_ = useragent ;
+}
+
+
+
+// Return the headers for GET requests
+curl_slist* Registry::getHeaders(const bool authorise)
+{
+  curl_slist *headers = NULL;
+
+  headers = curl_slist_append(headers, "Accept: application/json");  
+  headers = curl_slist_append(headers, "Content-Type: application/json");
+  headers = curl_slist_append(headers, "charsets: utf-8");
+
+  if (authorise)
+    {
+      if (user_.empty() || auth_token_.empty())
+        {
+          cout << "Not logged in" << endl;
+        }
+      else
+        {
+          // Set user and auth token in the headers
+          string user_header = "User: " + user_;
+          string auth_header = "Auth-Token: " + auth_token_;
+
+          headers = curl_slist_append(headers, user_header.c_str());
+          headers = curl_slist_append(headers, auth_header.c_str());
+        }
+    }
+
+  return headers;
+}
+
+
+// Return the headers for POST requests
+curl_slist* Registry::postHeaders(const bool authorise)
+{
+  curl_slist *headers = getHeaders(authorise);
+
+#ifdef USE_CHUNKED
+  headers = curl_slist_append(headers, "Transfer-Encoding: chunked:");
+#endif
+
+#ifdef DISABLE_EXPECT
+  headers = curl_slist_append(headers, "Expect:");
+#endif
+
+  return headers;
+}
+
+
+// Does the work to send the given GET request using CURL
+string Registry::doGetRequest(const string &url,
+                              const bool authorise,
+                              long *response_code)
+{   
+  string result("");
+
+  curl_slist *headers = getHeaders(authorise);
+
+  initCurl() ;
+
+  CURLObjectSet(curl_object_get_,
+                "url",            url.c_str(),
+                "httpheader",     headers, 
+                "writedata",      &result,
+                NULL);
+
+  CURLObjectStatus res = CURLObjectPerform(curl_object_get_, FALSE);
+
+  if (response_code)
+    g_object_get(curl_object_get_, "response-code", response_code, NULL) ;
+  
+  if (res == CURL_STATUS_FAILED)
+    cout << "CURL perform failed" << endl;
+
+  // Clean up
+  if (headers)
+    curl_slist_free_all(headers);
+
+  return result;
+}
+
+// Does the work to send the given DELETE request using CURL
+string Registry::doDeleteRequest(const string &url,
+                                 const bool authorise,
+                                 long *response_code)
+{   
+  string result("");
+
+  curl_slist *headers = getHeaders(authorise);
+
+  initCurl() ;
+
+  CURLObjectSet(curl_object_delete_,
+                "url",            url.c_str(),
+                "httpheader",     headers, 
+                "writedata",      &result,
+                NULL);
+
+  CURLObjectStatus res = CURLObjectPerform(curl_object_delete_, FALSE);
+  
+  if (response_code)
+    g_object_get(curl_object_delete_, "response-code", response_code, NULL) ;
+
+  if (res == CURL_STATUS_FAILED)
+    cout << "CURL perform failed" << endl;
+
+  // Clean up
+  if (headers)
+    curl_slist_free_all(headers);
+
+  return result;
+}
+
+
+// Does the work to send the given POST request using CURL
+string Registry::doPostRequest(const string &url, 
+                               const string &postfields,
+                               const bool authorise,
+                               long *response_code)
+{   
+  string result("");
+
+  CurlReadData read_data(postfields.c_str());
+  curl_slist *headers = postHeaders(authorise);
+
+  initCurl() ;
+
+  CURLObjectSet(curl_object_post_,
+                "url",            url.c_str(),
+                "httpheader",     headers, 
+                "writedata",      &result,
+                "readdata",       &read_data,
+                NULL);
+
+#ifndef USE_CHUNKED
+  CURLObjectSet(curl_object_post_,
+                "postfieldsize", read_data.sizeleft,
+                NULL);
+#endif
+
+  CURLObjectStatus res = CURLObjectPerform(curl_object_post_, FALSE);
+
+  if(response_code)
+    g_object_get(curl_object_post_, "response-code", response_code, NULL) ;
+  
+  if (res == CURL_STATUS_FAILED)
+    cout << "CURL perform failed" << endl;
+
+  // Clean up
+  if (headers)
+    curl_slist_free_all(headers);
+
+  return result;
+}
+
+
+Json::Value Registry::getRequest(const string &request,
+                                 const bool authorise,
+                                 string &err_msg)
+{
+  Json::Value js;
+  
+  string url = host_ + request;
+  long response_code = 0 ;
+  
+  string buffer = doGetRequest(url, authorise, &response_code);
+  js = processRequestResult(buffer, response_code, json_reader_, err_msg) ;
+
+  return js;
+}
+
+Json::Value Registry::postRequest(const string &request,
+                                  const string &postfields,
+                                  const bool authorise,
+                                  string &err_msg)
+{
+  Json::Value js;
+  
+  string url = host_ + request;
+  long response_code = 0 ;
+
+  string buffer = doPostRequest(url, postfields, authorise, &response_code);
+  js = processRequestResult(buffer, response_code, json_reader_, err_msg) ;
+
+  return js;
+}
+
+Json::Value Registry::deleteRequest(const string &request,
+                                    const bool authorise,
+                                    string &err_msg)
+{
+  Json::Value js;
+  
+  string url = host_ + request;
+  long response_code = 0 ;
+
+  string buffer = doDeleteRequest(url, authorise, &response_code);
+  js = processRequestResult(buffer, response_code, json_reader_, err_msg) ;
+
+  return js;
+}
+
+
+// Ping the Registry server. Returns true if ok.
+bool Registry::ping(string &err_msg)
+{
+  bool result = false;
+  
+  Json::Value js = getRequest(API_INFO_PING, false, err_msg);
+
+  if (js["ping"].isInt())
+    result = js["ping"].asInt();
+
+  return result;
+}
+
+// Get the Registry version number
+string Registry::version(string &err_msg)
+{
+  string result("");
+
+  Json::Value js = getRequest(API_INFO_VERSION, false, err_msg);
+
+  if (js["release"].isString())
+    result = js["release"].asString();
+
+  return result;
+}
+
+
+// Get the list of species in the Registry
+list<string> Registry::species(string &err_msg)
+{
+  list<string> result;
+
+  Json::Value js = getRequest(API_INFO_SPECIES, false, err_msg);
+
+  if (js.isArray())
+    {
+      for (const Json::Value &iter : js)
+        {
+          if (iter.isString())
+            {
+              result.push_back(iter.asString());
+            }
+          else
+            {
+              result.clear();
+              break;
+            }
+        }
+    }
+
+  return result;
+}
+
+// Get the list of assemblies in the Registry per species name
+map<string, list<string>> Registry::assemblies(string &err_msg)
+{
+  map<string, list<string>> result;
+
+  bool ok = true;
+  Json::Value js = getRequest(API_INFO_ASSEMBLIES, false, err_msg);
+
+  for (Json::ValueIterator species_iter = js.begin(); species_iter != js.end(); ++species_iter)
+    {
+      Json::Value species_key = species_iter.key();
+      Json::Value species_val = *species_iter;
+
+      if (species_key.isString() && species_val.isArray())
+        {
+          list<string> assembly_list;
+
+          for (const Json::Value &assembly_iter : species_val)
+            {
+              if (assembly_iter.isString())
+                {
+                  assembly_list.push_back(assembly_iter.asString());
+                }
+              else
+                {
+                  assembly_list.clear();
+                  ok = false;
+                  break;
+                }
+            }
+
+          result[species_key.asString()] = assembly_list;
+        }
+      else
+        {
+          result.clear();
+          ok = false;
+          break;
+        }
+    }
+
+  return result;
+}
+
+
+list<Trackhub> Registry::trackhubs(string &err_msg)
+{
+  list<Trackhub> trackhubs;
+  Json::Value js = getRequest(API_INFO_TRACKHUBS, false, err_msg);
+
+  // Loop through each trackhub in the results
+  for (Json::ValueIterator iter = js.begin(); iter != js.end(); ++iter)
+    {
+      // Extract the info about this trackhub
+      Json::Value item_js = *iter;
+
+      trackhubs.push_back(Trackhub(item_js["name"].asString(),
+                                   item_js["shortLabel"].asString(),
+                                   item_js["longLabel"].asString(),
+                                   item_js["url"].asString()) );
+    }
+  
+  return trackhubs;
+}
+
+
+// Get the results for a given page of a search and add them to the TrackDb list. Returns true
+// when we have processed the last page
+bool Registry::getSearchPage(stringstream &payload_ss,
+                             const int page_no,
+                             list<TrackDb> &result,
+                             string &err_msg)
+{
+  bool done = true;
+
+  stringstream url_ss;
+  url_ss << API_SEARCH << "?entries_per_page=" << API_SEARCH_ENTRIES_PER_PAGE << "&page=" << page_no;
+
+  Json::Value js = postRequest(url_ss.str(), payload_ss.str(), false, err_msg);
+
+  // Check how many results there are
+  int num_results = 0;
+
+  if (js["total_entries"].isInt())
+    num_results = js["total_entries"].asInt();
+
+  if (num_results > 0)
+    {
+      // Loop through all items in the result and extract the trackDb IDs
+      Json::Value items_js = js["items"];
+
+      for (Json::ValueIterator iter = items_js.begin(); iter != items_js.end(); ++iter)
+        {
+          Json::Value item_js = *iter ;
+
+          if (item_js["id"].isString())
+            {
+              string track_err_msg;
+              TrackDb trackdb = searchTrackDb(item_js["id"].asString(), track_err_msg) ;
+              result.push_back(trackdb) ;
+            }
+        }
+    }
+
+  // Check if there are any results remaining after this page
+  if (num_results > page_no * API_SEARCH_ENTRIES_PER_PAGE)
+    done = false;
+
+  return done;
+}
+
+
+// Search for the given search string and optional filters
+list<TrackDb> Registry::search(const string &search_str,
+                               const string &species,
+                               const string &assembly,
+                               const string &hub,
+                               string &err_msg)
+{
+  list<TrackDb> result ;
+
+  // Create a json-formatted message
+  Json::Value payload_js;
+  payload_js["query"] = search_str;
+  payload_js["species"] = species;
+  payload_js["assembly"] = assembly;
+  payload_js["hub"] = hub;
+  
+  stringstream payload_ss;
+  payload_ss << payload_js;
+
+  // There may be multiple pages so get all results and compile them into a single list
+  int page_no = 1;
+  bool done = false;
+
+  while (!done && err_msg.empty())
+    {
+      done = getSearchPage(payload_ss, page_no, result, err_msg);
+      ++page_no;
+    }
+
+  return result ;
+}
+
+
+TrackDb Registry::searchTrackDb(const string &trackdb_id, string &err_msg)
+{
+  TrackDb trackdb;
+
+  if (!trackdb_id.empty())
+    {
+      stringstream query_ss;
+      query_ss << API_SEARCH_TRACKDB << "/" << trackdb_id;
+
+      Json::Value js = getRequest(query_ss.str(), false, err_msg);
+
+      // Get the lists of track info and file types
+      Json::Value tracks_js = js["configuration"];
+      list<Track> tracks;
+      list<string> file_types;
+
+      for (Json::ValueIterator iter = tracks_js.begin(); iter != tracks_js.end(); ++iter)
+        {
+          getTracks(iter, tracks, file_types, "none");
+        }
+
+      trackdb = TrackDb(trackdb_id, 
+                        js["hub"]["name"].asString(),
+                        js["hub"]["shortLabel"].asString(),
+                        js["hub"]["longLabel"].asString(),
+                        js["hub"]["url"].asString(),
+                        js["species"]["scientific_name"].asString(),
+                        js["assembly"]["name"].asString(),
+                        js["type"].asString(),
+                        js["status"]["tracks"]["total"].asInt(),
+                        js["status"]["tracks"]["with_data"]["total"].asInt(),
+                        file_types,
+                        tracks
+                        );
+    }
+
+  return trackdb;
+}
+
+
+// Log in to the Registry
+bool Registry::login(const string &user, const string &pwd, string &err_msg)
+{
+  bool ok = false;
+
+  initCurl() ;
+
+  CURLObjectSet(curl_object_get_,
+                "username", user.c_str(), 
+                "password", pwd.c_str(), 
+                NULL);
+
+  Json::Value js = getRequest(API_LOGIN, false, err_msg);
+
+  CURLObjectSet(curl_object_get_, 
+                "username", NULL,
+                "password", NULL,
+                NULL);
+
+  if (js["auth_token"].isString())
+    {
+      ok = true;
+      user_ = user;
+      auth_token_ = js["auth_token"].asString();
+    }
+
+  return ok;
+}
+
+// Log out of the Registry
+bool Registry::logout(string &err_msg)
+{
+  bool result = false;
+
+  if (loggedIn())
+    {
+      // Do the request
+      Json::Value js = getRequest(API_LOGOUT, true, err_msg);
+
+      // Check return value (should be a message saying logged out ok)
+      if (js["message"].isString())
+        {
+          result = true;
+          user_.clear();
+          auth_token_.clear();
+        }
+      else
+        {
+          cout << "Error logging out" << endl;
+        }
+    }
+  else
+    {
+      cout << "Cannot log out: not logged in" << endl ;
+    }
+
+  return result;
+}
+
+
+// Register a track hub as the current user
+// assemblies: a map of assembly name in the hub to INSDC accessions
+// type: "genomics", "epigenomics", "transcriptomics" or "proteomics"
+Json::Value Registry::registerHub(const string &url,
+                                  const map<string, string> &assemblies,
+                                  const string &type,
+                                  const bool is_public,
+                                  string &err_msg)
+{
+  Json::Value js;
+
+  if (loggedIn())
+    {
+      // Create a json-formatted message
+      Json::Value payload_js;
+      payload_js["url"] = url;
+
+      for (auto iter = assemblies.begin(); iter != assemblies.end(); ++iter)
+        payload_js["assemblies"][iter->first] = iter->second;
+
+      if (type.length() > 0)
+        payload_js["type"] = type;
+
+      if (is_public)
+        payload_js["public"] = 1;
+      else
+        payload_js["public"] = 0;
+
+      string payload = json_writer_.write(payload_js) ;
+
+      // Do the request
+      js = postRequest(API_TRACKHUB, payload, true, err_msg);
+    }
+  else
+    {
+      cout << "Cannot register hub: not logged in" << endl ;
+    }
+
+  return js;
+}
+
+
+// Retrieve all trackDbs for the current users' registered hubs. Gets the trackhub with the
+// given name, or all registered track hubs if no name is given.
+list<TrackDb> Registry::retrieveHub(const string &trackhub, string &err_msg)
+{
+  list<TrackDb> result;
+
+  stringstream query_ss;
+  query_ss << API_TRACKHUB;
+  
+  if (trackhub.length() > 0)
+    query_ss << "/" << trackhub;
+
+  // Do the request
+  Json::Value js = getRequest(query_ss.str(), true, err_msg);
+  
+  // Loop through all items in the returned array
+  for (Json::ValueIterator hub_iter = js.begin(); hub_iter != js.end(); ++hub_iter)
+    {
+      // Loop through all trackdbs in this hub
+      Json::Value js_trackdbs = (*hub_iter)["trackdbs"];
+      
+      for (Json::ValueIterator trackdb_iter = js_trackdbs.begin(); trackdb_iter != js_trackdbs.end(); ++trackdb_iter)
+        {
+          string uri = (*trackdb_iter)["uri"].asString();
+
+          // Chop off the host etc. to get the trackdb id at the end of the uri
+          stringstream ss;
+          ss << host_ << API_TRACKDB << "/" ;
+          string host = ss.str();
+          
+          if (uri.length() >= host.length() &&
+              strncmp(uri.c_str(), host.c_str(), host.length()) == 0)
+            {
+              const char *trackdb_id = uri.c_str() + host.length();
+
+              string track_err_msg;
+              TrackDb trackdb = searchTrackDb(trackdb_id, track_err_msg);
+
+              result.push_back(trackdb);
+            }
+        }
+    }
+  
+  return result;
+}
+
+
+string Registry::deleteHub(const string &trackhub, string &err_msg)
+{
+  string result;
+
+  string query(API_TRACKHUB);
+  query += trackhub;
+
+  Json::Value js = deleteRequest(query, true, err_msg);
+
+  if (js["message"].isString())
+    result = js["message"].asString();
+
+  return result;
+}
+
+// Retrieve a registered trackdb.
+Json::Value Registry::retrieveTrackDb(const string &trackdb, string &err_msg)
+{
+  stringstream query_ss;
+  query_ss << API_TRACKDB << "/" << trackdb;
+
+  // Do the request
+  Json::Value js = getRequest(query_ss.str(), true, err_msg);
+
+  return js;
+}
+
+
+Json::Value Registry::deleteTrackDb(const string &trackdb, string &err_msg)
+{
+  stringstream query_ss;
+  query_ss << API_TRACKDB << "/" <<  trackdb;
+
+  Json::Value js = deleteRequest(query_ss.str(), true, err_msg);
+
+  return js;
+}
+
+bool Registry::loggedIn()
+{
+  return (!user_.empty() && !auth_token_.empty());
+}
+
+
+} // namespace trackhub
+
+} // namespace gbtools
diff --git a/gbtools/src/gbtoolsUtils/Makefile.am b/gbtools/src/gbtoolsUtils/Makefile.am
new file mode 100644
index 0000000..fc704a5
--- /dev/null
+++ b/gbtools/src/gbtoolsUtils/Makefile.am
@@ -0,0 +1,12 @@
+
+include $(top_srcdir)/src/Makefile.am.common
+
+SUBDIRS = .
+
+noinst_LTLIBRARIES = libgbtoolsUtils.la
+
+libgbtoolsUtils_la_SOURCES = gbtoolsUtils.cpp
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_builddir)/src/gbtoolsUtils/Makefile.in
diff --git a/gbtools/src/gbtoolsUtils/Makefile.in b/gbtools/src/gbtoolsUtils/Makefile.in
new file mode 100644
index 0000000..0b69273
--- /dev/null
+++ b/gbtools/src/gbtoolsUtils/Makefile.in
@@ -0,0 +1,720 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 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@
+
+# Common includes for all compiles.....
+#
+
+VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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@
+DIST_COMMON = $(top_srcdir)/src/Makefile.am.common \
+	$(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+	$(top_srcdir)/config/depcomp
+subdir = src/gbtoolsUtils
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/./gbtools_version.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libgbtoolsUtils_la_LIBADD =
+am_libgbtoolsUtils_la_OBJECTS = gbtoolsUtils.lo
+libgbtoolsUtils_la_OBJECTS = $(am_libgbtoolsUtils_la_OBJECTS)
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+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) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CXXFLAGS) $(CXXFLAGS)
+AM_V_CXX = $(am__v_CXX_ at AM_V@)
+am__v_CXX_ = $(am__v_CXX_ at AM_DEFAULT_V@)
+am__v_CXX_0 = @echo "  CXX     " $@;
+am__v_CXX_1 = 
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+	$(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CXXLD = $(am__v_CXXLD_ at AM_V@)
+am__v_CXXLD_ = $(am__v_CXXLD_ at AM_DEFAULT_V@)
+am__v_CXXLD_0 = @echo "  CXXLD   " $@;
+am__v_CXXLD_1 = 
+SOURCES = $(libgbtoolsUtils_la_SOURCES)
+DIST_SOURCES = $(libgbtoolsUtils_la_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-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 \
+	tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+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@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+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@
+DEPS_CFLAGS = @DEPS_CFLAGS@
+DEPS_LIBS = @DEPS_LIBS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+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@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_BLATSRC = @USE_BLATSRC@
+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@
+AM_CPPFLAGS = \
+$(DEPS_CFLAGS) \
+-I$(top_srcdir)/src/include \
+-I$(top_srcdir)/src/include/blatSrc
+
+AM_CXXFLAGS = -std=c++11 -g -Wall
+SUBDIRS = .
+noinst_LTLIBRARIES = libgbtoolsUtils.la
+libgbtoolsUtils_la_SOURCES = gbtoolsUtils.cpp
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_builddir)/src/gbtoolsUtils/Makefile.in
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .cpp .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(top_srcdir)/src/Makefile.am.common $(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 src/gbtoolsUtils/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/gbtoolsUtils/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_srcdir)/src/Makefile.am.common:
+
+$(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-noinstLTLIBRARIES:
+	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+	@list='$(noinst_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+
+libgbtoolsUtils.la: $(libgbtoolsUtils_la_OBJECTS) $(libgbtoolsUtils_la_DEPENDENCIES) $(EXTRA_libgbtoolsUtils_la_DEPENDENCIES) 
+	$(AM_V_CXXLD)$(CXXLINK)  $(libgbtoolsUtils_la_OBJECTS) $(libgbtoolsUtils_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gbtoolsUtils.Plo at am__quote@
+
+.cpp.o:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cpp.lo:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LTCXXCOMPILE) -c -o $@ $<
+
+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.
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	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"
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	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; \
+	$(am__define_uniq_tagged_files); \
+	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-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	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"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+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 \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    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 $(LTLIBRARIES)
+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:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+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."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile 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 -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+	check-am clean clean-generic clean-libtool \
+	clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am 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 \
+	installdirs-am maintainer-clean maintainer-clean-generic \
+	mostlyclean mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
+	uninstall-am
+
+
+# these don't work....or maybe they do...try again...???
+#libgbtools_la_CPPFLAGS =  $(DEPS_CFLAGS)
+#libgbtools_la_CXXFLAGS = -g  -Wall -std=c++0x
+
+# 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/gbtools/src/gbtoolsUtils/gbtoolsUtils.cpp b/gbtools/src/gbtoolsUtils/gbtoolsUtils.cpp
new file mode 100644
index 0000000..78eab14
--- /dev/null
+++ b/gbtools/src/gbtoolsUtils/gbtoolsUtils.cpp
@@ -0,0 +1,52 @@
+/*  File: gbtoolsUtils.cpp
+ *  Author: Gemma Barson, 2015-03-24
+ *  Copyright (c) 2015 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * gbtools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the gbtools genome browser tools library, 
+ * written by
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ *      Steve Miller      (Sanger Institute, UK)  <sm23 at sanger.ac.uk>
+ *
+ * Description: See gbtoolsUtils.hpp
+ *----------------------------------------------------------------------------
+ */
+
+#include <gbtools/gbtoolsUtils.hpp>
+#include <config.h>
+#include <gtk/gtk.h>
+#include <string.h>
+
+
+namespace gbtools 
+{
+
+/* Returns a string representing the Version.Release.Update of the gbtools code. */
+const char *UtilsGetVersionString()
+{
+  return GBTOOLS_VERSION ;
+}
+
+/* Returns a string containing the library name and version */
+const char *UtilsGetVersionTitle()
+{
+  return "gbtools - " GBTOOLS_VERSION ;
+}
+
+
+} /* gbtools namespace */
diff --git a/gbtools/src/include/Makefile.am b/gbtools/src/include/Makefile.am
new file mode 100644
index 0000000..0ee8229
--- /dev/null
+++ b/gbtools/src/include/Makefile.am
@@ -0,0 +1,219 @@
+
+nobase_include_HEADERS = \
+gbtools/gbtools.hpp \
+gbtools/gbtoolsCurl.hpp \
+gbtools/gbtoolsTrackhub.hpp \
+gbtools/gbtoolsGUI.hpp \
+gbtools/gbtoolsPfetch.hpp \
+gbtools/gbtoolsUtils.hpp \
+json/json.h \
+json/json-forwards.h \
+blatSrc/ace.h \
+blatSrc/aliType.h \
+blatSrc/annoAssembly.h \
+blatSrc/annoFilter.h \
+blatSrc/annoFormatTab.h \
+blatSrc/annoFormatter.h \
+blatSrc/annoGrateWig.h \
+blatSrc/annoGrator.h \
+blatSrc/annoGratorQuery.h \
+blatSrc/annoOption.h \
+blatSrc/annoRow.h \
+blatSrc/annoStreamBigBed.h \
+blatSrc/annoStreamBigWig.h \
+blatSrc/annoStreamTab.h \
+blatSrc/annoStreamVcf.h \
+blatSrc/annoStreamer.h \
+blatSrc/apacheLog.h \
+blatSrc/asParse.h \
+blatSrc/axt.h \
+blatSrc/bPlusTree.h \
+blatSrc/bamFile.h \
+blatSrc/bandExt.h \
+blatSrc/base64.h \
+blatSrc/basicBed.h \
+blatSrc/bbiFile.h \
+blatSrc/bigBed.h \
+blatSrc/bigWig.h \
+blatSrc/binRange.h \
+blatSrc/bits.h \
+blatSrc/blastParse.h \
+blatSrc/boxClump.h \
+blatSrc/boxLump.h \
+blatSrc/bwgInternal.h \
+blatSrc/cda.h \
+blatSrc/cgi_build_rules.mk \
+blatSrc/chain.h \
+blatSrc/chainBlock.h \
+blatSrc/chainConnect.h \
+blatSrc/chainToAxt.h \
+blatSrc/chainToPsl.h \
+blatSrc/cheapcgi.h \
+blatSrc/cirTree.h \
+blatSrc/codebias.h \
+blatSrc/common.h \
+blatSrc/common.mk \
+blatSrc/correlate.h \
+blatSrc/crTree.h \
+blatSrc/crudeali.h \
+blatSrc/diGraph.h \
+blatSrc/diGraph.h.97 \
+blatSrc/dlist.h \
+blatSrc/dnaLoad.h \
+blatSrc/dnaMarkov.h \
+blatSrc/dnaMotif.h \
+blatSrc/dnaseq.h \
+blatSrc/dnautil.h \
+blatSrc/dtdParse.h \
+blatSrc/dyOut.h \
+blatSrc/dystring.h \
+blatSrc/elmTree.h \
+blatSrc/emblParse.h \
+blatSrc/ens.h \
+blatSrc/errAbort.h \
+blatSrc/errCatch.h \
+blatSrc/fa.h \
+blatSrc/fieldedTable.h \
+blatSrc/filePath.h \
+blatSrc/flydna.h \
+blatSrc/fof.h \
+blatSrc/fq.h \
+blatSrc/fuzzyFind.h \
+blatSrc/gapCalc.h \
+blatSrc/gdf.h \
+blatSrc/genoFind.h \
+blatSrc/genomeRangeTree.h \
+blatSrc/gfClientLib.h \
+blatSrc/gfPcrLib.h \
+blatSrc/gfWebLib.h \
+blatSrc/gff.h \
+blatSrc/gff3.h \
+blatSrc/gfxPoly.h \
+blatSrc/gifLabel.h \
+blatSrc/hacTree.h \
+blatSrc/hash.h \
+blatSrc/hex.h \
+blatSrc/hgGene.h \
+blatSrc/hgap.h \
+blatSrc/hgdb.h \
+blatSrc/histogram.h \
+blatSrc/hmac.h \
+blatSrc/hmmPfamParse.h \
+blatSrc/hmmstats.h \
+blatSrc/htmlPage.h \
+blatSrc/htmshell.h \
+blatSrc/https.h \
+blatSrc/intValTree.h \
+blatSrc/internet.h \
+blatSrc/itsa.h \
+blatSrc/iupac.h \
+blatSrc/jointalign.h \
+blatSrc/jpegSize.h \
+blatSrc/jsonParse.h \
+blatSrc/jsonWrite.h \
+blatSrc/keys.h \
+blatSrc/knetUdc.h \
+blatSrc/kxTok.h \
+blatSrc/linefile.h \
+blatSrc/localEnvironment.mk \
+blatSrc/localmem.h \
+blatSrc/log.h \
+blatSrc/longToList.h \
+blatSrc/maDbRep.h \
+blatSrc/maToFf.h \
+blatSrc/maf.h \
+blatSrc/mailViaPipe.h \
+blatSrc/md5.h \
+blatSrc/memalloc.h \
+blatSrc/memgfx.h \
+blatSrc/meta.h \
+blatSrc/metaWig.h \
+blatSrc/mime.h \
+blatSrc/net.h \
+blatSrc/nib.h \
+blatSrc/nibTwo.h \
+blatSrc/nt4.h \
+blatSrc/obscure.h \
+blatSrc/oldGff.h \
+blatSrc/oligoTm.h \
+blatSrc/ooc.h \
+blatSrc/options.h \
+blatSrc/pairDistance.h \
+blatSrc/pairHmm.h \
+blatSrc/paraFetch.h \
+blatSrc/patSpace.h \
+blatSrc/peakCluster.h \
+blatSrc/phyloTree.h \
+blatSrc/pipeline.h \
+blatSrc/portable.h \
+blatSrc/psGfx.h \
+blatSrc/psPoly.h \
+blatSrc/pscmGfx.h \
+blatSrc/psl.h \
+blatSrc/pslTbl.h \
+blatSrc/pslTransMap.h \
+blatSrc/pthreadDoList.h \
+blatSrc/pthreadWrap.h \
+blatSrc/qa.h \
+blatSrc/quickHeap.h \
+blatSrc/quotedP.h \
+blatSrc/ra.h \
+blatSrc/raToStruct.h \
+blatSrc/rainbow.h \
+blatSrc/rangeTree.h \
+blatSrc/rbTree.h \
+blatSrc/regexHelper.h \
+blatSrc/repMask.h \
+blatSrc/rle.h \
+blatSrc/rnautil.h \
+blatSrc/rql.h \
+blatSrc/rudp.h \
+blatSrc/scoreWindow.h \
+blatSrc/seg.h \
+blatSrc/seqOut.h \
+blatSrc/seqStats.h \
+blatSrc/shaRes.h \
+blatSrc/sig.h \
+blatSrc/slog.h \
+blatSrc/snof.h \
+blatSrc/snofmake.h \
+blatSrc/spaceSaver.h \
+blatSrc/spacedColumn.h \
+blatSrc/spacedSeed.h \
+blatSrc/splatAli.h \
+blatSrc/splix.h \
+blatSrc/sqlList.h \
+blatSrc/sqlNum.h \
+blatSrc/subText.h \
+blatSrc/sufa.h \
+blatSrc/sufx.h \
+blatSrc/supStitch.h \
+blatSrc/synQueue.h \
+blatSrc/tabRow.h \
+blatSrc/textOut.h \
+blatSrc/tokenizer.h \
+blatSrc/trans3.h \
+blatSrc/trix.h \
+blatSrc/twoBit.h \
+blatSrc/udc.h \
+blatSrc/unfin.h \
+blatSrc/userApp.mk \
+blatSrc/vGfx.h \
+blatSrc/vcf.h \
+blatSrc/vcfBits.h \
+blatSrc/verbose.h \
+blatSrc/wormdna.h \
+blatSrc/xAli.h \
+blatSrc/xa.h \
+blatSrc/xap.h \
+blatSrc/xenalign.h \
+blatSrc/xmlEscape.h \
+blatSrc/xp.h \
+blatSrc/zlibFace.h \
+$(NULL)
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_builddir)/src/include/Makefile.in
+
+
diff --git a/gbtools/src/include/Makefile.in b/gbtools/src/include/Makefile.in
new file mode 100644
index 0000000..22eb311
--- /dev/null
+++ b/gbtools/src/include/Makefile.in
@@ -0,0 +1,776 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 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@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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 = src/include
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+	$(nobase_include_HEADERS)
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/./gbtools_version.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+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__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__installdirs = "$(DESTDIR)$(includedir)"
+HEADERS = $(nobase_include_HEADERS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+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@
+DEPS_CFLAGS = @DEPS_CFLAGS@
+DEPS_LIBS = @DEPS_LIBS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+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@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_BLATSRC = @USE_BLATSRC@
+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@
+nobase_include_HEADERS = \
+gbtools/gbtools.hpp \
+gbtools/gbtoolsCurl.hpp \
+gbtools/gbtoolsTrackhub.hpp \
+gbtools/gbtoolsGUI.hpp \
+gbtools/gbtoolsPfetch.hpp \
+gbtools/gbtoolsUtils.hpp \
+json/json.h \
+json/json-forwards.h \
+blatSrc/ace.h \
+blatSrc/aliType.h \
+blatSrc/annoAssembly.h \
+blatSrc/annoFilter.h \
+blatSrc/annoFormatTab.h \
+blatSrc/annoFormatter.h \
+blatSrc/annoGrateWig.h \
+blatSrc/annoGrator.h \
+blatSrc/annoGratorQuery.h \
+blatSrc/annoOption.h \
+blatSrc/annoRow.h \
+blatSrc/annoStreamBigBed.h \
+blatSrc/annoStreamBigWig.h \
+blatSrc/annoStreamTab.h \
+blatSrc/annoStreamVcf.h \
+blatSrc/annoStreamer.h \
+blatSrc/apacheLog.h \
+blatSrc/asParse.h \
+blatSrc/axt.h \
+blatSrc/bPlusTree.h \
+blatSrc/bamFile.h \
+blatSrc/bandExt.h \
+blatSrc/base64.h \
+blatSrc/basicBed.h \
+blatSrc/bbiFile.h \
+blatSrc/bigBed.h \
+blatSrc/bigWig.h \
+blatSrc/binRange.h \
+blatSrc/bits.h \
+blatSrc/blastParse.h \
+blatSrc/boxClump.h \
+blatSrc/boxLump.h \
+blatSrc/bwgInternal.h \
+blatSrc/cda.h \
+blatSrc/cgi_build_rules.mk \
+blatSrc/chain.h \
+blatSrc/chainBlock.h \
+blatSrc/chainConnect.h \
+blatSrc/chainToAxt.h \
+blatSrc/chainToPsl.h \
+blatSrc/cheapcgi.h \
+blatSrc/cirTree.h \
+blatSrc/codebias.h \
+blatSrc/common.h \
+blatSrc/common.mk \
+blatSrc/correlate.h \
+blatSrc/crTree.h \
+blatSrc/crudeali.h \
+blatSrc/diGraph.h \
+blatSrc/diGraph.h.97 \
+blatSrc/dlist.h \
+blatSrc/dnaLoad.h \
+blatSrc/dnaMarkov.h \
+blatSrc/dnaMotif.h \
+blatSrc/dnaseq.h \
+blatSrc/dnautil.h \
+blatSrc/dtdParse.h \
+blatSrc/dyOut.h \
+blatSrc/dystring.h \
+blatSrc/elmTree.h \
+blatSrc/emblParse.h \
+blatSrc/ens.h \
+blatSrc/errAbort.h \
+blatSrc/errCatch.h \
+blatSrc/fa.h \
+blatSrc/fieldedTable.h \
+blatSrc/filePath.h \
+blatSrc/flydna.h \
+blatSrc/fof.h \
+blatSrc/fq.h \
+blatSrc/fuzzyFind.h \
+blatSrc/gapCalc.h \
+blatSrc/gdf.h \
+blatSrc/genoFind.h \
+blatSrc/genomeRangeTree.h \
+blatSrc/gfClientLib.h \
+blatSrc/gfPcrLib.h \
+blatSrc/gfWebLib.h \
+blatSrc/gff.h \
+blatSrc/gff3.h \
+blatSrc/gfxPoly.h \
+blatSrc/gifLabel.h \
+blatSrc/hacTree.h \
+blatSrc/hash.h \
+blatSrc/hex.h \
+blatSrc/hgGene.h \
+blatSrc/hgap.h \
+blatSrc/hgdb.h \
+blatSrc/histogram.h \
+blatSrc/hmac.h \
+blatSrc/hmmPfamParse.h \
+blatSrc/hmmstats.h \
+blatSrc/htmlPage.h \
+blatSrc/htmshell.h \
+blatSrc/https.h \
+blatSrc/intValTree.h \
+blatSrc/internet.h \
+blatSrc/itsa.h \
+blatSrc/iupac.h \
+blatSrc/jointalign.h \
+blatSrc/jpegSize.h \
+blatSrc/jsonParse.h \
+blatSrc/jsonWrite.h \
+blatSrc/keys.h \
+blatSrc/knetUdc.h \
+blatSrc/kxTok.h \
+blatSrc/linefile.h \
+blatSrc/localEnvironment.mk \
+blatSrc/localmem.h \
+blatSrc/log.h \
+blatSrc/longToList.h \
+blatSrc/maDbRep.h \
+blatSrc/maToFf.h \
+blatSrc/maf.h \
+blatSrc/mailViaPipe.h \
+blatSrc/md5.h \
+blatSrc/memalloc.h \
+blatSrc/memgfx.h \
+blatSrc/meta.h \
+blatSrc/metaWig.h \
+blatSrc/mime.h \
+blatSrc/net.h \
+blatSrc/nib.h \
+blatSrc/nibTwo.h \
+blatSrc/nt4.h \
+blatSrc/obscure.h \
+blatSrc/oldGff.h \
+blatSrc/oligoTm.h \
+blatSrc/ooc.h \
+blatSrc/options.h \
+blatSrc/pairDistance.h \
+blatSrc/pairHmm.h \
+blatSrc/paraFetch.h \
+blatSrc/patSpace.h \
+blatSrc/peakCluster.h \
+blatSrc/phyloTree.h \
+blatSrc/pipeline.h \
+blatSrc/portable.h \
+blatSrc/psGfx.h \
+blatSrc/psPoly.h \
+blatSrc/pscmGfx.h \
+blatSrc/psl.h \
+blatSrc/pslTbl.h \
+blatSrc/pslTransMap.h \
+blatSrc/pthreadDoList.h \
+blatSrc/pthreadWrap.h \
+blatSrc/qa.h \
+blatSrc/quickHeap.h \
+blatSrc/quotedP.h \
+blatSrc/ra.h \
+blatSrc/raToStruct.h \
+blatSrc/rainbow.h \
+blatSrc/rangeTree.h \
+blatSrc/rbTree.h \
+blatSrc/regexHelper.h \
+blatSrc/repMask.h \
+blatSrc/rle.h \
+blatSrc/rnautil.h \
+blatSrc/rql.h \
+blatSrc/rudp.h \
+blatSrc/scoreWindow.h \
+blatSrc/seg.h \
+blatSrc/seqOut.h \
+blatSrc/seqStats.h \
+blatSrc/shaRes.h \
+blatSrc/sig.h \
+blatSrc/slog.h \
+blatSrc/snof.h \
+blatSrc/snofmake.h \
+blatSrc/spaceSaver.h \
+blatSrc/spacedColumn.h \
+blatSrc/spacedSeed.h \
+blatSrc/splatAli.h \
+blatSrc/splix.h \
+blatSrc/sqlList.h \
+blatSrc/sqlNum.h \
+blatSrc/subText.h \
+blatSrc/sufa.h \
+blatSrc/sufx.h \
+blatSrc/supStitch.h \
+blatSrc/synQueue.h \
+blatSrc/tabRow.h \
+blatSrc/textOut.h \
+blatSrc/tokenizer.h \
+blatSrc/trans3.h \
+blatSrc/trix.h \
+blatSrc/twoBit.h \
+blatSrc/udc.h \
+blatSrc/unfin.h \
+blatSrc/userApp.mk \
+blatSrc/vGfx.h \
+blatSrc/vcf.h \
+blatSrc/vcfBits.h \
+blatSrc/verbose.h \
+blatSrc/wormdna.h \
+blatSrc/xAli.h \
+blatSrc/xa.h \
+blatSrc/xap.h \
+blatSrc/xenalign.h \
+blatSrc/xmlEscape.h \
+blatSrc/xp.h \
+blatSrc/zlibFace.h \
+$(NULL)
+
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_builddir)/src/include/Makefile.in
+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 src/include/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/include/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
+install-nobase_includeHEADERS: $(nobase_include_HEADERS)
+	@$(NORMAL_INSTALL)
+	@list='$(nobase_include_HEADERS)'; test -n "$(includedir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \
+	fi; \
+	$(am__nobase_list) | while read dir files; do \
+	  xfiles=; for file in $$files; do \
+	    if test -f "$$file"; then xfiles="$$xfiles $$file"; \
+	    else xfiles="$$xfiles $(srcdir)/$$file"; fi; done; \
+	  test -z "$$xfiles" || { \
+	    test "x$$dir" = x. || { \
+	      echo " $(MKDIR_P) '$(DESTDIR)$(includedir)/$$dir'"; \
+	      $(MKDIR_P) "$(DESTDIR)$(includedir)/$$dir"; }; \
+	    echo " $(INSTALL_HEADER) $$xfiles '$(DESTDIR)$(includedir)/$$dir'"; \
+	    $(INSTALL_HEADER) $$xfiles "$(DESTDIR)$(includedir)/$$dir" || exit $$?; }; \
+	done
+
+uninstall-nobase_includeHEADERS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(nobase_include_HEADERS)'; test -n "$(includedir)" || list=; \
+	$(am__nobase_strip_setup); files=`$(am__nobase_strip)`; \
+	dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir)
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	$(am__define_uniq_tagged_files); \
+	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-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	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"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+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 $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(includedir)"; 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:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+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."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-nobase_includeHEADERS
+
+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 -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: uninstall-nobase_includeHEADERS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
+	clean-libtool cscopelist-am ctags ctags-am 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-nobase_includeHEADERS install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
+	uninstall-am uninstall-nobase_includeHEADERS
+
+
+# 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/gbtools/src/include/blatSrc/ace.h b/gbtools/src/include/blatSrc/ace.h
new file mode 100644
index 0000000..5b6c0f3
--- /dev/null
+++ b/gbtools/src/include/blatSrc/ace.h
@@ -0,0 +1,79 @@
+/* ace - a format written by phrap, read by consed.
+ *
+ * This file contains routines to read such files.
+ * Note that though the coordinates are one based and
+ * closed on disk, they get converted to our usual half
+ * open zero based in memory.  */
+
+#ifndef ACE_H
+#define ACE_H
+
+#ifndef LINEFILE_H
+#include "linefile.h"
+#endif 
+
+#ifndef DNASEQ_H
+#include "dnaseq.h"
+#endif
+
+struct aceAS
+/* This contains an AS entry. */
+    {
+    int contigs;
+    int reads;
+    };
+
+struct aceCO
+/* This contains a CO entry. */
+    {
+    char *contigName;
+    int bases;
+    int reads;
+    struct dnaSeq *seq;
+    };
+
+struct aceAF
+/* This contains an AF entry. */
+    {
+    struct aceAF *next;
+    char *readName;
+    int startPos;
+    };
+
+struct aceRD
+/* This contains an RD entry. */
+    {
+    struct aceRD *next;
+    char *readName;
+    int bases;
+    struct dnaSeq *seq;
+    };
+
+struct ace
+/* This contains information about one ace element. */
+    {
+    struct ace *next;
+    struct aceAS aceAS;
+    struct aceCO aceCO;
+    struct aceAF *afList;
+    struct aceRD *rdList;
+    };
+
+void aceFree(struct ace **pEl);
+/* Free an ace. */
+
+void aceFreeList(struct ace **pList);
+/* Free a list of dynamically allocated ace's */
+
+struct ace *aceRead(struct lineFile *lf);
+/* Read in from .ace file and return it.
+ * Returns NULL at EOF. */
+
+boolean aceCheck(struct ace *ace, struct lineFile *lf);
+/* Return FALSE if there's a problem with ace. */
+
+void aceWrite(struct ace *ace, FILE *f);
+/* Output ace to ace file. */
+
+#endif /* ACE_H */
+
diff --git a/gbtools/src/include/blatSrc/aliType.h b/gbtools/src/include/blatSrc/aliType.h
new file mode 100644
index 0000000..2a338f2
--- /dev/null
+++ b/gbtools/src/include/blatSrc/aliType.h
@@ -0,0 +1,32 @@
+/* aliType - some definitions for type of alignment. */
+
+#ifndef ALITYPE_H
+#define ALITYPE_H
+
+enum gfType
+/* Types of sequence genoFind deals with. */
+    {
+    gftDna = 0,		/* DNA (genomic) */
+    gftRna = 1,		/* RNA */
+    gftProt = 2,         /* Protein. */
+    gftDnaX = 3,		/* Genomic DNA translated to protein */
+    gftRnaX = 4,         /* RNA translated to protein */
+    };
+
+char *gfTypeName(enum gfType type);
+/* Return string representing type. */
+
+enum gfType gfTypeFromName(char *name);
+/* Return type from string. */
+
+enum ffStringency
+/* How tight of a match is required. */
+    {
+    ffExact = 0,	/* Only an exact match will do. */
+
+    ffCdna = 1,		/* Near exact.  Tolerate long gaps in target (genomic) */
+    ffTight = 2,        /* Near exact.  Not so tolerant of long gaps in target. */
+    ffLoose = 3,        /* Less exact. */
+    };
+
+#endif /* ALITYPE_H */
diff --git a/gbtools/src/include/blatSrc/annoAssembly.h b/gbtools/src/include/blatSrc/annoAssembly.h
new file mode 100644
index 0000000..3d89bff
--- /dev/null
+++ b/gbtools/src/include/blatSrc/annoAssembly.h
@@ -0,0 +1,35 @@
+/* annoAssembly -- basic metadata about an assembly for the annoGrator framework. */
+
+#ifndef ANNOASSEMBLY_H
+#define ANNOASSEMBLY_H
+
+#include "common.h"
+#include "hash.h"
+
+struct annoAssembly
+/* Basic information about a genome assembly. */
+    {
+    char *name;			// UCSC symbolic name for assembly, e.g. "hg19"
+    struct twoBitFile *tbf;	// Opened twoBit sequence file for assembly
+    char *twoBitPath;		// twoBit file name
+    struct hash *seqSizes;	// cache of sequence names to sizes (twoBitSeqSize does a seek&read)
+    struct dnaSeq *curSeq;	// cache of most recently accessed sequence (chrom/scaffold)
+    };
+
+struct annoAssembly *annoAssemblyNew(char *name, char *twoBitPath);
+/* Return an annoAssembly with open twoBitFile. */
+
+struct slName *annoAssemblySeqNames(struct annoAssembly *aa);
+/* Return a list of sequence names in this assembly. */
+
+uint annoAssemblySeqSize(struct annoAssembly *aa, char *seqName);
+/* Return the number of bases in seq which must be in aa's twoBitFile. */
+
+void annoAssemblyGetSeq(struct annoAssembly *aa, char *seqName, uint start, uint end,
+			char *buf, size_t bufSize);
+/* Copy sequence to buf; bufSize must be at least end-start+1 chars in length. */
+
+void annoAssemblyClose(struct annoAssembly **pAa);
+/* Close aa's twoBitFile and free mem. */
+
+#endif//ndef ANNOASSEMBLY_H
diff --git a/gbtools/src/include/blatSrc/annoFilter.h b/gbtools/src/include/blatSrc/annoFilter.h
new file mode 100644
index 0000000..9326865
--- /dev/null
+++ b/gbtools/src/include/blatSrc/annoFilter.h
@@ -0,0 +1,83 @@
+/* annoFilter -- autoSql-driven data filtering for annoGratorQuery framework */
+
+#ifndef ANNOFILTER_H
+#define ANNOFILTER_H
+
+#include "common.h"
+#include "asParse.h"
+
+enum annoFilterOp
+/* Types of filtering actions; most use a value defined elsewhere in annoFilter. */
+// NOTE: would be nice to have set ops, afInSet & afNotInSet
+    {
+    afNoFilter,		// Any column value passes filter
+    afMatch,		// Stringish column value must match given value(s)
+    afNotMatch,		// Stringish column value must not match given value(s)
+    afLT,		// Numeric column value is less than a given value
+    afLTE,		// Numeric column value is less than or equal to a given value
+    afEqual,		// Numeric column value equals a given value
+    afNotEqual,		// Numeric column value does not equal a given value
+    afGTE,		// Numeric column value is greater than or equal to a given value
+    afGT,		// Numeric column value is greater than a given value
+    afInRange,		// Numeric column value falls within fully-closed [given min, given max]
+    };
+
+union aNumber
+    {
+    long long anInt;
+    long double aDouble;
+    };
+
+struct annoFilter;  // circular definition
+
+typedef boolean AnnoFilterFunction(struct annoFilter *self, char **row, int rowSize);
+/* Custom filtering function that operates on plain row from data source.
+ * Return TRUE if any filter fails (or passes, if self->isExclude). */
+
+struct annoFilter
+/* A filter on a row or specific column of data: operand and value(s). This info can tell the
+ * UI what filtering options to offer and what their current values are; and it tells the
+ * annoStreamer what filters to apply. */
+    {
+    struct annoFilter *next;
+    AnnoFilterFunction *filterFunc;  // If non-NULL, pass whole row to this function.
+    char *label;		// Option label for UI
+    int columnIx;		// If filterFunc is NULL, index of column in row
+    enum asTypes type;		// Data type (determines which filter operations are applicable)
+    enum annoFilterOp op;	// Action to be performed
+    void *values;		// Depending on op: name(s) to match, thresholds to compare, etc.
+    boolean isList;		// True if column contains a comma-separated list of values.
+    boolean isExclude;		// True if we are excluding items that pass, false if including.
+    boolean rightJoin;		// A la SQL: if this filter fails, discard primary row.
+    boolean hasMinMax;		// True if we know the allowable range for numeric thresholds
+				// so e.g. UI can enforce limits
+    union aNumber min;		// Lowest valid threshold value
+    union aNumber max;		// Highest valid threshold value
+    };
+
+struct annoFilter *annoFilterFromAsColumn(struct asObject *asObj, char *colName,
+					  enum annoFilterOp op, struct slName *valList);
+/* Look up description of colName in asObj and return an annoFilter
+ * using values parsed from valList if applicable. */
+
+struct annoFilter *annoFilterFromFunction(AnnoFilterFunction *func, void *values);
+/* Return an annoFilter that calls func on each item, using values. */
+
+boolean annoFilterRowFails(struct annoFilter *filterList, char **row, int rowSize,
+			   boolean *retRightJoin);
+/* Apply filters to row, using autoSql column definitions to interpret
+ * each word of row.  Return TRUE if any filter fails (or passes, if isExclude).
+ * Set retRightJoin to TRUE if a rightJoin filter has failed. */
+
+boolean annoFilterWigValueFails(struct annoFilter *filterList, double value,
+				boolean *retRightJoin);
+/* Apply filters to value.  Return TRUE if any filter fails (or passes, if isExclude).
+ * Set retRightJoin to TRUE if a rightJoin filter has failed. */
+
+enum annoFilterOp afOpFromString(char *string);
+/* Translate string (e.g. "afNotEqual") into enum value (e.g. afNotEqual). */
+
+char *stringFromAfOp(enum annoFilterOp op);
+/* Translate op into a string.  Do not free result. */
+
+#endif//ndef ANNOFILTER_H
diff --git a/gbtools/src/include/blatSrc/annoFormatTab.h b/gbtools/src/include/blatSrc/annoFormatTab.h
new file mode 100644
index 0000000..2cab5d4
--- /dev/null
+++ b/gbtools/src/include/blatSrc/annoFormatTab.h
@@ -0,0 +1,11 @@
+/* annoFormatTab -- collect fields from all inputs and print them out, tab-separated. */
+
+#ifndef ANNOFORMATTAB_H
+#define ANNOFORMATTAB_H
+
+#include "annoFormatter.h"
+
+struct annoFormatter *annoFormatTabNew(char *fileName);
+/* Return a formatter that will write its tab-separated output to fileName. */
+
+#endif//ndef ANNOFORMATTAB_H
diff --git a/gbtools/src/include/blatSrc/annoFormatter.h b/gbtools/src/include/blatSrc/annoFormatter.h
new file mode 100644
index 0000000..8f42713
--- /dev/null
+++ b/gbtools/src/include/blatSrc/annoFormatter.h
@@ -0,0 +1,57 @@
+/* annoFormatter -- aggregates, formats and writes output from multiple sources */
+
+#ifndef ANNOFORMATTER_H
+#define ANNOFORMATTER_H
+
+#include "annoOption.h"
+#include "annoStreamer.h"
+
+// The real work of aggregating and formatting data is left to
+// subclass implementations.  The purpose of this module is to provide
+// an interface for communication with other components of the
+// annoGratorQuery framework, and simple methods shared by all
+// subclasses.
+
+struct annoFormatter
+/* Generic interface to aggregate data fields from multiple sources and write
+ * output. */
+    {
+    struct annoFormatter *next;
+
+    // Public methods
+    struct annoOption *(*getOptions)(struct annoFormatter *self);
+    void (*setOptions)(struct annoFormatter *self, struct annoOption *options);
+    /* Get and set output options */
+
+    void (*initialize)(struct annoFormatter *self, struct annoStreamer *primarySource,
+		       struct annoStreamer *integrators);
+    /* Initialize output (print header if applicable, etc). */
+
+    void (*comment)(struct annoFormatter *self, char *content);
+    /* Print a comment in whatever form is appropriate.  Content must not contain '\n'. */
+
+    void (*formatOne)(struct annoFormatter *self, struct annoStreamRows *primaryData,
+		      struct annoStreamRows gratorData[], int gratorCount);
+    /* Aggregate all sources' data for a single primary-source item into output. */
+
+    void (*close)(struct annoFormatter **pSelf);
+    /* End of input; finish output, close connection/handle and free self. */
+
+    // Private members -- callers are on the honor system to access these using only methods above.
+    struct annoOption *options;
+    struct annoGratorQuery *query;
+    };
+
+// ---------------------- annoFormatter default methods -----------------------
+
+struct annoOption *annoFormatterGetOptions(struct annoFormatter *self);
+/* Return supported options and current settings.  Callers can modify and free when done. */
+
+void annoFormatterSetOptions(struct annoFormatter *self, struct annoOption *newOptions);
+/* Free old options and use clone of newOptions. */
+
+void annoFormatterFree(struct annoFormatter **pSelf);
+/* Free self. This should be called at the end of subclass close methods, after
+ * subclass-specific connections are closed and resources are freed. */
+
+#endif//ndef ANNOFORMATTER_H
diff --git a/gbtools/src/include/blatSrc/annoGrateWig.h b/gbtools/src/include/blatSrc/annoGrateWig.h
new file mode 100644
index 0000000..2131681
--- /dev/null
+++ b/gbtools/src/include/blatSrc/annoGrateWig.h
@@ -0,0 +1,14 @@
+/* annoGrateWig -- subclass of annoGrator for bigWig or wiggle data */
+
+#ifndef ANNOGRATEWIG_H
+#define ANNOGRATEWIG_H
+
+#include "annoGrator.h"
+
+struct annoGrator *annoGrateWigNew(struct annoStreamer *wigSource);
+/* Create an annoGrator subclass for source with rowType == arWig. */
+
+struct annoGrator *annoGrateBigWigNew(char *fileOrUrl, struct annoAssembly *aa);
+/* Create an annoGrator subclass for bigWig file or URL. */
+
+#endif//ndef ANNOGRATEWIG_H
diff --git a/gbtools/src/include/blatSrc/annoGrator.h b/gbtools/src/include/blatSrc/annoGrator.h
new file mode 100644
index 0000000..a86b667
--- /dev/null
+++ b/gbtools/src/include/blatSrc/annoGrator.h
@@ -0,0 +1,73 @@
+/* annoGrator -- annoStreamer that integrates genomic annotations from two annoStreamers */
+
+// Subclasses of annoGrator can add new columns of output such as predicted function given
+// a variant and a gene; the base class simply intersects by position, returning
+// all rows from its internal data source that overlap the position of primaryRow.
+// The interface to an annoGrator is almost the same as the interface to an annoStreamer,
+// *except* you call integrate() instead of nextRow().
+
+#ifndef ANNOGRATOR_H
+#define ANNOGRATOR_H
+
+#include "annoStreamer.h"
+
+enum annoGratorOverlap
+/* How integrate() method handles overlap (or non-overlap) of internal rows with primary row */
+    {
+    agoNoConstraint,	// Default: overlap with primary row doesn't matter
+    agoMustOverlap,	// integrate() sets RJFilterFail if no internal rows overlap primary
+    agoMustNotOverlap   // integrate() sets RJFilterFail if any internal rows overlap primary
+    };
+
+struct annoGrator
+/* annoStreamer that can integrate an internal annoStreamer's data
+ * with data from a primary source. */
+    {
+    struct annoStreamer streamer;	// external annoStreamer interface
+
+    // Public method that makes this a 'grator:
+    struct annoRow *(*integrate)(struct annoGrator *self, struct annoStreamRows *primaryData,
+				 boolean *retRJFilterFailed, struct lm *callerLm);
+    /* Integrate internal source's data with single row of primary source's data */
+
+    void (*setOverlapRule)(struct annoGrator *self, enum annoGratorOverlap rule);
+    /* Tell annoGrator how to handle overlap of its rows with primary row. */
+
+    // Private members -- callers are on the honor system to access these using only methods above.
+    struct annoStreamer *mySource;	// internal source
+    struct annoRow *qHead;		// head of FIFO queue of rows from internal source
+    struct annoRow *qTail;		// head of FIFO queue of rows from internal source
+    struct lm *qLm;			// localmem for FIFO queue
+    int qSkippedCount;			// Number of qLm-allocated rows skipped
+    char *prevPChrom;			// for detection of unsorted input from primary
+    uint prevPStart;			// for detection of unsorted input from primary
+    boolean eof;			// stop asking internal source for rows when it's done
+    boolean haveRJIncludeFilter;	// TRUE if some filter has !isExclude && rightJoin
+    enum annoGratorOverlap overlapRule;	// constraint (if any) on overlap of internal & primary
+    };
+
+#endif//ndef ANNOGRATOR_H
+
+// ---------------------- annoGrator default methods -----------------------
+
+struct annoRow *annoGratorIntegrate(struct annoGrator *self, struct annoStreamRows *primaryData,
+				    boolean *retRJFilterFailed, struct lm *callerLm);
+/* Given a single row from the primary source, get all overlapping rows from internal
+ * source, and produce joined output rows.  Use callerLm to allocate the output rows.
+ * If retRJFilterFailed is non-NULL:
+ * - any overlapping row has a rightJoin filter failure (see annoFilter.h), or
+ * - overlap rule is agoMustOverlap and no rows overlap, or
+ * - overlap rule is agoMustNotOverlap and any overlapping row is found,
+ * then set retRJFilterFailed and stop. */
+
+void annoGratorInit(struct annoGrator *self, struct annoStreamer *mySource);
+/* Initialize an integrator of columns from mySource with (positions of)
+ * rows passed to integrate().
+ * mySource becomes property of the annoGrator. */
+
+struct annoGrator *annoGratorNew(struct annoStreamer *mySource);
+/* Make a new integrator of columns from mySource with (positions of) rows passed to integrate().
+ * mySource becomes property of the new annoGrator. */
+
+void annoGratorClose(struct annoStreamer **pSelf);
+/* Free self (including mySource). */
diff --git a/gbtools/src/include/blatSrc/annoGratorQuery.h b/gbtools/src/include/blatSrc/annoGratorQuery.h
new file mode 100644
index 0000000..fcdbb0f
--- /dev/null
+++ b/gbtools/src/include/blatSrc/annoGratorQuery.h
@@ -0,0 +1,30 @@
+/* annoGratorQuery -- framework for integrating genomic annotations from many sources */
+
+#ifndef ANNOGRATORQUERY_H
+#define ANNOGRATORQUERY_H
+
+#include "annoFormatter.h"
+#include "annoGrator.h"
+
+struct annoGratorQuery;
+/* Representation of a complex query: multiple sources, each with its own filters,
+ * output data and means of integration, aggregated and output by a formatter. */
+
+struct annoGratorQuery *annoGratorQueryNew(struct annoAssembly *assembly,
+					   struct annoStreamer *primarySource,
+					   struct annoGrator *integrators,
+					   struct annoFormatter *formatters);
+/* Create an annoGratorQuery from all of its components.
+ * integrators may be NULL.  All other inputs must be non-NULL. */
+
+void annoGratorQuerySetRegion(struct annoGratorQuery *query, char *chrom, uint rStart, uint rEnd);
+/* Set genomic region for query; if chrom is NULL, position is whole genome. */
+
+void annoGratorQueryExecute(struct annoGratorQuery *query);
+/* For each annoRow from query->primarySource, invoke integrators and
+ * pass their annoRows to formatters. */
+
+void annoGratorQueryFree(struct annoGratorQuery **pQuery);
+/* Close and free all inputs and outputs; free self. */
+
+#endif//ndef ANNOGRATORQUERY_H
diff --git a/gbtools/src/include/blatSrc/annoOption.h b/gbtools/src/include/blatSrc/annoOption.h
new file mode 100644
index 0000000..0fc7ca9
--- /dev/null
+++ b/gbtools/src/include/blatSrc/annoOption.h
@@ -0,0 +1,22 @@
+/* annoOption -- optionSpec-style param plus its value */
+
+#ifndef ANNOOPTION_H
+#define ANNOOPTION_H
+
+#include "options.h"
+
+struct annoOption
+/* A named and typed option and its value. */
+    {
+    struct annoOption *next;
+    struct optionSpec spec;
+    void *value;
+    };
+
+struct annoOption *annoOptionCloneList(struct annoOption *list);
+/* Return a newly allocated copy of list. */
+
+void annoOptionFreeList(struct annoOption **pList);
+/* Free the same things that we clone above. */
+
+#endif//ndef ANNOOPTION_H
diff --git a/gbtools/src/include/blatSrc/annoRow.h b/gbtools/src/include/blatSrc/annoRow.h
new file mode 100644
index 0000000..9c94b1f
--- /dev/null
+++ b/gbtools/src/include/blatSrc/annoRow.h
@@ -0,0 +1,43 @@
+/* annoRow -- basic data interchange unit of annoGratorQuery framework. */
+
+#ifndef ANNOROW_H
+#define ANNOROW_H
+
+#include "common.h"
+#include "localmem.h"
+
+enum annoRowType { arUnknown, arWords, arWig };
+
+struct annoRow
+/* Representation of a row from a database table or file.  The chrom, start and end
+ * facilitate intersection by position.  If type is arWords, then data is an array
+ * of strings corresponding to columns in the autoSql definition provided by the
+ * source of the annoRow.  If type is arWig, then data is an array of floats.
+ * rightJoinFail is true if this row failed a filter marked as rightJoin, meaning it
+ * can knock out the primary row (see annoFilter.h). */
+    {
+    struct annoRow *next;
+    char *chrom;
+    uint start;
+    uint end;
+    void *data;
+    boolean rightJoinFail;
+    };
+
+struct annoRow *annoRowFromStringArray(char *chrom, uint start, uint end, boolean rightJoinFail,
+				       char **wordsIn, int numCols, struct lm *lm);
+/* Allocate & return an annoRow with data cloned from wordsIn. */
+
+struct annoRow *annoRowWigNew(char *chrom, uint start, uint end, boolean rightJoinFail,
+			      float *values, struct lm *lm);
+/* Allocate & return an annoRowWig, with clone of values; length of values is (end-start). */
+
+struct annoRow *annoRowClone(struct annoRow *rowIn, enum annoRowType rowType, int numCols,
+			     struct lm *lm);
+/* Allocate & return a single annoRow cloned from rowIn.  If rowIn is NULL, return NULL.
+ * If type is arWig, numCols is ignored. */
+
+int annoRowCmp(const void *va, const void *vb);
+/* Compare two annoRows' {chrom, start, end}. */
+
+#endif//ndef ANNOROW_H
diff --git a/gbtools/src/include/blatSrc/annoStreamBigBed.h b/gbtools/src/include/blatSrc/annoStreamBigBed.h
new file mode 100644
index 0000000..b57284b
--- /dev/null
+++ b/gbtools/src/include/blatSrc/annoStreamBigBed.h
@@ -0,0 +1,13 @@
+/* annoStreamBigBed -- subclass of annoStreamer for bigBed file or URL */
+
+#ifndef ANNOSTREAMBIGBED_H
+#define ANNOSTREAMBIGBED_H
+
+#include "annoStreamer.h"
+
+struct annoStreamer *annoStreamBigBedNew(char *fileOrUrl, struct annoAssembly *aa, int maxItems);
+/* Create an annoStreamer (subclass) object from a file or URL; if
+ * maxItems is 0, all items from a query will be returned, otherwise
+ * output is limited to maxItems. */
+
+#endif//ndef ANNOSTREAMBIGBED_H
diff --git a/gbtools/src/include/blatSrc/annoStreamBigWig.h b/gbtools/src/include/blatSrc/annoStreamBigWig.h
new file mode 100644
index 0000000..fdb7218
--- /dev/null
+++ b/gbtools/src/include/blatSrc/annoStreamBigWig.h
@@ -0,0 +1,11 @@
+/* annoStreamBigWig -- subclass of annoStreamer for bigWig file or URL */
+
+#ifndef ANNOSTREAMBIGWIG_H
+#define ANNOSTREAMBIGWIG_H
+
+#include "annoStreamer.h"
+
+struct annoStreamer *annoStreamBigWigNew(char *fileOrUrl, struct annoAssembly *aa);
+/* Create an annoStreamer (subclass) object from a file or URL. */
+
+#endif//ndef ANNOSTREAMBIGWIG_H
diff --git a/gbtools/src/include/blatSrc/annoStreamTab.h b/gbtools/src/include/blatSrc/annoStreamTab.h
new file mode 100644
index 0000000..e9cb92f
--- /dev/null
+++ b/gbtools/src/include/blatSrc/annoStreamTab.h
@@ -0,0 +1,13 @@
+/* annoStreamTab -- subclass of annoStreamer for tab-separated text files/URLs */
+
+#ifndef ANNOSTREAMTAB_H
+#define ANNOSTREAMTAB_H
+
+#include "annoStreamer.h"
+
+struct annoStreamer *annoStreamTabNew(char *fileOrUrl, struct annoAssembly *aa,
+				      struct asObject *asObj);
+/* Create an annoStreamer (subclass) object from a tab-separated text file/URL
+ * whose columns are described by asObj (possibly excepting bin column at beginning). */
+
+#endif//ndef ANNOSTREAMTAB_H
diff --git a/gbtools/src/include/blatSrc/annoStreamVcf.h b/gbtools/src/include/blatSrc/annoStreamVcf.h
new file mode 100644
index 0000000..f45c550
--- /dev/null
+++ b/gbtools/src/include/blatSrc/annoStreamVcf.h
@@ -0,0 +1,13 @@
+/* annoStreamVcf -- subclass of annoStreamer for VCF files */
+
+#ifndef ANNOSTREAMVCF_H
+#define ANNOSTREAMVCF_H
+
+#include "annoStreamer.h"
+
+struct annoStreamer *annoStreamVcfNew(char *fileOrUrl, boolean isTabix, struct annoAssembly *aa,
+				      int maxRecords);
+/* Create an annoStreamer (subclass) object from a VCF file, which may
+ * or may not have been compressed and indexed by tabix. */
+
+#endif//ndef ANNOSTREAMVCF_H
diff --git a/gbtools/src/include/blatSrc/annoStreamer.h b/gbtools/src/include/blatSrc/annoStreamer.h
new file mode 100644
index 0000000..d6ba052
--- /dev/null
+++ b/gbtools/src/include/blatSrc/annoStreamer.h
@@ -0,0 +1,114 @@
+/* annoStreamer -- returns items sorted by genomic position to successive nextRow calls */
+
+#ifndef ANNOSTREAMER_H
+#define ANNOSTREAMER_H
+
+#include "annoAssembly.h"
+#include "annoFilter.h"
+#include "annoRow.h"
+
+// The real work of fetching and filtering data is left to subclass
+// implementations.  The purpose of this module is to provide an
+// interface for communication with other components of the
+// annoGratorQuery framework, and simple methods shared by all
+// subclasses.
+
+struct annoStreamer
+/* Generic interface to configure a data source's filters and output data, and then
+ * retrieve data, which must be sorted by genomic position.  Subclasses of this
+ * will do all the actual work. */
+    {
+    struct annoStreamer *next;
+
+    // Public methods
+    struct asObject *(*getAutoSqlObject)(struct annoStreamer *self);
+    void (*setAutoSqlObject)(struct annoStreamer *self, struct asObject *asObj);
+    /* Get and set autoSql representation (do not modify or free asObj!) */
+
+    void (*setRegion)(struct annoStreamer *self, char *chrom, uint rStart, uint rEnd);
+    /* Set genomic region for query; if chrom is NULL, region is whole genome.
+     * This must be called on all annoGrator components in query, not a subset. */
+
+    char *(*getHeader)(struct annoStreamer *self);
+    /* Get the file header as a string (possibly NULL, possibly multi-line). */
+
+    void (*setFilters)(struct annoStreamer *self, struct annoFilter *newFilters);
+    void (*addFilters)(struct annoStreamer *self, struct annoFilter *newFilters);
+    /* Set/add filters. Memory management of filters is up to caller. */
+
+    struct annoRow *(*nextRow)(struct annoStreamer *self, char *minChrom, uint minEnd,
+			       struct lm *lm);
+    /* Get the next item from this source.  If minChrom is non-NULL, optionally use
+     * that as a hint to skip items that precede {minChrom, minEnd}.
+     * Use localmem lm to store returned annoRow. */
+
+    void (*close)(struct annoStreamer **pSelf);
+    /* Close connection to source and free self. */
+
+    // Public members -- callers are on the honor system to access these read-only.
+    struct annoAssembly *assembly;	// Genome assembly that provides coords for annotations
+    struct asObject *asObj;		// Annotation data definition
+    char *name;				// Short identifier, e.g. name of file or database table
+    struct annoFilter *filters;		// Filters to constrain output
+    char *chrom;			// Non-NULL if querying a particular region
+    uint regionStart;			// If chrom is non-NULL, region start coord
+    uint regionEnd;			// If chrom is non-NULL, region end coord
+    boolean positionIsGenome;		// True if doing a whole-genome query
+    enum annoRowType rowType;		// Type of annotations (words or wiggle data)
+    int numCols;			// For word-based annotations, number of words/columns
+    };
+
+struct annoStreamRows
+/* An annoStreamer and (possibly NULL) list of rows it generated. */
+    {
+    struct annoStreamer *streamer;	// annoStreamer interface for metadata about row data
+    struct annoRow *rowList;		// row data
+    };
+
+// ---------------------- annoStreamer default methods -----------------------
+
+struct asObject *annoStreamerGetAutoSqlObject(struct annoStreamer *self);
+/* Return parsed autoSql definition of this streamer's data type. */
+
+void annoStreamerSetAutoSqlObject(struct annoStreamer *self, struct asObject *asObj);
+/* Use new asObj and update internal state derived from asObj. */
+
+void annoStreamerSetRegion(struct annoStreamer *self, char *chrom, uint rStart, uint rEnd);
+/* Set genomic region for query; if chrom is NULL, position is genome.
+ * Many subclasses should make their own setRegion method that calls this and
+ * configures their data connection to change to the new position. */
+
+void annoStreamerSetFilters(struct annoStreamer *self, struct annoFilter *newFilters);
+/* Replace any existing filters with newFilters.  It is up to calling code to
+ * free old filters and allocate newFilters. */
+
+void annoStreamerAddFilters(struct annoStreamer *self, struct annoFilter *newFilters);
+/* Add newFilter(s).  It is up to calling code to allocate newFilters. */
+
+void annoStreamerInit(struct annoStreamer *self, struct annoAssembly *assembly,
+		      struct asObject *asObj, char *name);
+/* Initialize a newly allocated annoStreamer with default annoStreamer methods and
+ * default filters and columns based on asObj.
+ * In general, subclasses' constructors will call this first; override nextRow, close,
+ * and probably setRegion; and then initialize their private data. */
+
+void annoStreamerFree(struct annoStreamer **pSelf);
+/* Free self. This should be called at the end of subclass close methods, after
+ * subclass-specific connections are closed and resources are freed. */
+
+boolean annoStreamerFindBed3Columns(struct annoStreamer *self,
+			    int *retChromIx, int *retStartIx, int *retEndIx,
+			    char **retChromField, char **retStartField, char **retEndField);
+/* Scan autoSql for recognized column names corresponding to BED3 columns.
+ * Set ret*Ix to list index of each column if found, or -1 if not found.
+ * Set ret*Field to column name if found, or NULL if not found.
+ * If all three are found, return TRUE; otherwise return FALSE. */
+
+// -----------------------------------------------------------------------------
+
+struct annoStreamRows *annoStreamRowsNew(struct annoStreamer *streamerList);
+/* Returns an array of aSR, one for each streamer in streamerList.
+ * Typically array is reused by overwriting elements' rowList pointers.
+ * Free array when done. */
+
+#endif//ndef ANNOSTREAMER_H
diff --git a/gbtools/src/include/blatSrc/apacheLog.h b/gbtools/src/include/blatSrc/apacheLog.h
new file mode 100644
index 0000000..df53afd
--- /dev/null
+++ b/gbtools/src/include/blatSrc/apacheLog.h
@@ -0,0 +1,43 @@
+/* apacheLog - stuff to parse out apache web server logs, currently
+ * just the access log. */
+
+#ifndef APACHELOG_H
+#define APACHELOG_H
+
+struct apacheAccessLog
+/* Parsed out apache access log line */
+    {
+    struct apacheAccessLog *next;
+    char *buf;		/* All memory for apacheAccessLog fields is allocated at once here. */
+    char *ip;		/* IP Address: dotted quad of numbers, or xxx.com. */
+    char *dash1;	/* Unknown, usually a dash */
+    char *dash2;	/* Unknown, usually a dash */
+    char *timeStamp;	/* Time stamp like 23/Nov/2003:04:21:08 */
+    char *timeZone;	/* Extra number after timeStamp, usually -0800 */
+    char *method;	/* GET/POST etc. */
+    char *url;		/* Requested URL */
+    char *httpVersion;  /* Something like HTTP/1.1 */
+    int status;		/* Status code - 200 is good! */
+    char *num1;		/* Some number, I'm not sure what it is. */
+    char *referrer;	/* Referring URL, may be NULL. */
+    char *program;	/* Requesting program,  often Mozilla 4.0 */
+    time_t tick;	/* Unix tick (seconds since 1970) - derived from timeStamp. */
+    int runTime;	/* Overall time (optional) in milliseconds */
+    };
+
+struct apacheAccessLog *apacheAccessLogParse(char *line, 
+	char *fileName, int lineIx);
+/* Return a apacheAccessLog from line.  Return NULL if there's a parsing 
+ * problem, but don't abort. */
+
+void apacheAccessLogFree(struct apacheAccessLog **pLl);
+/* Free up apacheAccessLog. */
+
+time_t apacheAccessLogTimeToTick(char *timeStamp);
+/* Convert something like 27/Aug/2009:09:25:32 to Unix timestamp (seconds since 1970).
+ * On error returns zero. */
+
+int apacheAccessLogCmpTick(const void *va, const void *vb);
+/* Compare items to sort by tick (which tracks timestamp) */
+
+#endif /* APACHELOG_H */
diff --git a/gbtools/src/include/blatSrc/asParse.h b/gbtools/src/include/blatSrc/asParse.h
new file mode 100644
index 0000000..140de20
--- /dev/null
+++ b/gbtools/src/include/blatSrc/asParse.h
@@ -0,0 +1,151 @@
+/* asParse - parse out an autoSql .as file. */
+
+#ifndef ASPARSE_H
+#define ASPARSE_H
+
+enum asTypes
+/* Different low level types (not including lists and objects) */
+   {
+   t_double,   /* double precision floating point. */
+   t_float,    /* single precision floating point. */
+   t_char,     /* character or fixed size character array. */
+   t_int,      /* signed 32 bit integer */
+   t_uint,     /* unsigned 32 bit integer */
+   t_short,    /* signed 16 bit integer */
+   t_ushort,   /* unsigned 16 bit integer */
+   t_byte,     /* signed 8 bit integer */
+   t_ubyte,    /* unsigned 8 bit integer */
+   t_off,      /* 64 bit integer. */
+   t_string,   /* varchar/char * (variable size string up to 255 chars)  */
+   t_lstring,     /* variable sized large string. */
+   t_object,   /* composite object - object/table - forms lists. */
+   t_simple,   /* simple composite object - forms arrays. */
+   t_enum,     /* enumerated symbolic values */
+   t_set,      /* set of symbolic values */
+   };
+
+char *asTypesIntSizeDescription(enum asTypes type);
+/* Return description of integer size.  Do not free. */
+
+int asTypesIntSize(enum asTypes type);
+/* Return size in bytes of any integer type - short, long, unsigned, etc. */
+
+boolean asTypesIsUnsigned(enum asTypes type);
+/* Return TRUE if it's any integer type - short, long, unsigned, etc. */
+
+boolean asTypesIsInt(enum asTypes type);
+/* Return TRUE if it's any integer type - short, long, unsigned, etc. */
+
+boolean asTypesIsFloating(enum asTypes type);
+/* Return TRUE if it's any floating point type - float or double. */
+
+struct asTypeInfo
+    {
+    enum asTypes type;		   /* Numeric ID of low level type. */
+    char *name;                    /* Text ID of low level type. */
+    bool isUnsigned;               /* True if an unsigned int of some type. */
+    bool stringy;                  /* True if a string or blob. */
+    char *sqlName;                 /* SQL type name. */
+    char *cName;                   /* C type name. */
+    char *listyName;               /* What functions that load a list are called. */
+    char *nummyName;               /* What functions that load a number are called. */
+    char *outFormat;		   /* Output format for printf. %d, %u, etc. */
+    char *djangoName;              /* Django type name */
+    };
+
+struct asTypeInfo *asTypeFindLow(char *name);
+/* Return asType for a low level type of given name.  (Low level because may be decorated 
+ * with array or pointer  stuff at a higher level).  Returns NULL if not found. */
+
+struct asIndex
+/* Information about an index */
+    {
+    struct asIndex *next;   /* In case it needs to be on a list. */
+    char *type;	/* 'primary' 'index' or 'uniq' to pass to SQL */
+    int size;	/* If nonzero only index prefix of this many chars. */
+    };
+
+struct asColumn
+/* Info on one column/field */
+    {
+    struct asColumn *next;           /* Next column. */
+    char *name;                    /* Column name. */
+    char *comment;		   /* Comment string on column. */
+    struct asTypeInfo *lowType;   /* Root type info. */
+    char *obName;                  /* Name of object or table. */
+    struct asObject *obType;       /* Name of composite object. */
+    int fixedSize;		   /* 0 if not fixed size, otherwise size of list. */
+    char *linkedSizeName;          /* Points to variable that holds size of list. */
+    struct asColumn *linkedSize;     /* Column for linked size. */
+    bool isSizeLink;               /* Flag to tell if have read link. */
+    bool isList;                   /* TRUE if a list. */
+    bool isArray;                  /* TRUE if an array. */
+    bool autoIncrement;		   /* TRUE if we want to auto_increment this field. */
+    struct slName *values;         /* values for symbolic types */
+    struct asIndex *index;	   /* Possibly null index description. */
+    };
+
+struct asObject
+/* Info on whole asObject. */
+    {
+    struct asObject *next;
+    char *name;			/* Name of object. */
+    char *comment;		/* Comment describing object. */
+    struct asColumn *columnList;  /* List of columns. */
+    bool isTable;	        /* True if a table. */
+    bool isSimple;	        /* True if a simple object. */
+    };
+
+struct dyString *asColumnToSqlType(struct asColumn *col);
+/* Convert column to a sql type spec in returned dyString */
+
+char *asTypeNameFromSqlType(char *sqlType);
+/* Return the autoSql type name (not enum) for the given SQL type, or NULL.
+ * Don't attempt to free result. */
+
+struct asObject *asParseFile(char *fileName);
+/* Parse autoSql .as file. */
+
+struct asObject *asParseText(char *text);
+/* Parse autoSql from text (as opposed to file). */
+
+void asObjectFree(struct asObject **as);
+/* free a single asObject */
+
+void asObjectFreeList(struct asObject **as);
+/* free a list of asObject */
+
+void asColumnFree(struct asColumn **as);
+/* free a single asColumn */
+
+void asColumnFreeList(struct asColumn **as);
+/* free a list of asColumn */
+
+struct asColumn *asColumnFind(struct asObject *as, char *name);
+/* Return column of given name from object, or NULL if not found. */
+
+int asColumnFindIx(struct asColumn *list, char *name);
+/* Return index of first element of asColumn list that matches name.
+ * Return -1 if not found. */
+
+boolean asCompareObjs(char *name1, struct asObject *as1, char *name2, struct asObject *as2, int numColumnsToCheck,
+ int *retNumColumnsSame, boolean abortOnDifference);
+/* Compare as-objects as1 and as2 making sure several important fields show they are the same name and type.
+ * If difference found, print it to stderr.  If abortOnDifference, errAbort.
+ * Othewise, return TRUE if the objects columns match through the first numColumnsToCheck fields. 
+ * If retNumColumnsSame is not NULL, then it will be set to the number of contiguous matching columns. */
+
+INLINE boolean asObjectsMatch(struct asObject *as1, struct asObject *as2)
+{
+int colCount = slCount(as1->columnList);
+if (slCount(as2->columnList) != colCount)
+    return FALSE;
+return asCompareObjs(as1->name, as1, as2->name, as2, colCount, NULL, FALSE);
+}
+
+boolean asColumnNamesMatchFirstN(struct asObject *as1, struct asObject *as2, int n);
+/* Compare only the column names of as1 and as2, not types because if an asObj has been
+ * created from sql type info, longblobs are cast to lstrings but in the proper autoSql
+ * might be lists instead (e.g. longblob in sql, uint exonStarts[exonCount] in autoSql. */
+
+#endif /* ASPARSE_H */
diff --git a/gbtools/src/include/blatSrc/axt.h b/gbtools/src/include/blatSrc/axt.h
new file mode 100644
index 0000000..5ab86d1
--- /dev/null
+++ b/gbtools/src/include/blatSrc/axt.h
@@ -0,0 +1,272 @@
+/* AXT - A simple alignment format with four lines per
+ * alignment.  The first specifies the names of the
+ * two sequences that align and the position of the
+ * alignment, as well as the strand.  The next two
+ * lines contain the alignment itself including dashes
+ * for inserts.  The alignment is separated from the
+ * next alignment with a blank line. 
+ *
+ * This file contains routines to read such alignments.
+ * Note that though the coordinates are one based and
+ * closed on disk, they get converted to our usual half
+ * open zero based in memory. 
+ *
+ * This also contains code for simple DNA alignment scoring
+ * schemes. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#ifndef AXT_H
+#define AXT_H
+
+#ifndef LINEFILE_H
+#include "linefile.h"
+#endif 
+
+#ifndef DNASEQ_H
+#include "dnaseq.h"
+#endif
+
+#ifndef CHAIN_H
+#include "chain.h"
+#endif
+
+struct axt
+/* This contains information about one xeno alignment. */
+    {
+    struct axt *next;
+    char *qName;		/* Name of query sequence. */
+    int qStart, qEnd;		/* Half open zero=based coordinates. */
+    char qStrand;		/* Is this forward or reverse strand + or - */
+    char *tName;		/* Name of target. */
+    int tStart, tEnd;		/* Target coordinates. */
+    char tStrand;               /* Target strand - currently always +. */
+    int score;	                /* Score.  Zero for unknown.  Units arbitrary. */
+    int symCount;               /* Size of alignments. */
+    char *qSym, *tSym;          /* Alignments. */
+    int frame;			/* If non-zero then translation frame. */
+    };
+
+void axtFree(struct axt **pEl);
+/* Free an axt. */
+
+void axtFreeList(struct axt **pList);
+/* Free a list of dynamically allocated axt's */
+
+struct axt *axtRead(struct lineFile *lf);
+/* Read in next record from .axt file and return it.
+ * Returns NULL at EOF. */
+
+struct axt *axtReadWithPos(struct lineFile *lf, off_t *retOffset);
+/* Read next axt, and if retOffset is not-NULL, fill it with
+ * offset of start of axt. */
+
+boolean axtCheck(struct axt *axt, struct lineFile *lf);
+/* Return FALSE if there's a problem with axt. */
+
+void axtWrite(struct axt *axt, FILE *f);
+/* Output axt to axt file. */
+
+int axtCmpQuery(const void *va, const void *vb);
+/* Compare to sort based on query position. */
+
+int axtCmpTarget(const void *va, const void *vb);
+/* Compare to sort based on target position. */
+
+int axtCmpScore(const void *va, const void *vb);
+/* Compare to sort based on score. */
+
+int axtCmpTargetScoreDesc(const void *va, const void *vb);
+/* Compare to sort based on target name and score descending. */
+
+struct axtScoreScheme
+/* A scoring scheme or DNA alignment. */
+    {
+    struct scoreMatrix *next;
+    int matrix[256][256];   /* Look up with letters. */
+    int gapOpen;	/* Gap open cost. */
+    int gapExtend;	/* Gap extension. */
+    char *extra;        /* extra parameters */
+    };
+
+void axtScoreSchemeFree(struct axtScoreScheme **pObj);
+/* Free up score scheme. */
+
+struct axtScoreScheme *axtScoreSchemeDefault();
+/* Return default scoring scheme (after blastz).  Do NOT axtScoreSchemeFree
+ * this. */
+
+struct axtScoreScheme *axtScoreSchemeSimpleDna(int match, int misMatch, int gapOpen, int gapExtend);
+/* Return a relatively simple scoring scheme for DNA. */
+
+struct axtScoreScheme *axtScoreSchemeRnaDefault();
+/* Return default scoring scheme for RNA/DNA alignments
+ * within the same species.  Do NOT axtScoreSchemeFree
+ * this. */
+
+struct axtScoreScheme *axtScoreSchemeFromBlastzMatrix(char *text, int gapOpen, int gapExtend);
+/* return scoring schema from a string in the following format */
+/* 91,-90,-25,-100,-90,100,-100,-25,-25,-100,100,-90,-100,-25,-90,91 */
+
+struct axtScoreScheme *axtScoreSchemeRnaFill();
+/* Return scoreing scheme a little more relaxed than 
+ * RNA/DNA defaults for filling in gaps. */
+
+struct axtScoreScheme *axtScoreSchemeProteinDefault();
+/* Returns default protein scoring scheme.  This is
+ * scaled to be compatible with the blastz one.  Don't
+ * axtScoreSchemeFree this. */
+
+struct axtScoreScheme *axtScoreSchemeProteinRead(char *fileName);
+/* read in blosum-like matrix */
+
+struct axtScoreScheme *axtScoreSchemeRead(char *fileName);
+/* Read in scoring scheme from file. Looks like
+    A    C    G    T
+    91 -114  -31 -123
+    -114  100 -125  -31
+    -31 -125  100 -114
+    -123  -31 -114   91
+    O = 400, E = 30
+ * axtScoreSchemeFree this when done. */
+
+struct axtScoreScheme *axtScoreSchemeReadLf(struct lineFile *lf );
+/* Read in scoring scheme from file. Looks like
+    A    C    G    T
+    91 -114  -31 -123
+    -114  100 -125  -31
+    -31 -125  100 -114
+    -123  -31 -114   91
+    O = 400, E = 30
+ * axtScoreSchemeFree this when done. */
+
+void axtScoreSchemeDnaWrite(struct axtScoreScheme *ss, FILE *f, char *name);
+/* output the score dna based score matrix in meta Data format to File f,
+name should be set to the name of the program that is using the matrix */
+
+int axtScoreSym(struct axtScoreScheme *ss, int symCount, char *qSym, char *tSym);
+/* Return score without setting up an axt structure. */
+
+int axtScore(struct axt *axt, struct axtScoreScheme *ss);
+/* Return calculated score of axt. */
+
+int axtScoreFilterRepeats(struct axt *axt, struct axtScoreScheme *ss);
+/* Return calculated score of axt. do not score gaps if they are repeat masked*/
+
+int axtScoreUngapped(struct axtScoreScheme *ss, char *q, char *t, int size);
+/* Score ungapped alignment. */
+
+int axtScoreDnaDefault(struct axt *axt);
+/* Score DNA-based axt using default scheme. */
+
+int axtScoreProteinDefault(struct axt *axt);
+/* Score protein-based axt using default scheme. */
+
+boolean axtGetSubsetOnT(struct axt *axt, struct axt *axtOut,
+			int newStart, int newEnd, struct axtScoreScheme *ss,
+			boolean includeEdgeGaps);
+/* Return FALSE if axt is not in the new range.  Otherwise, set axtOut to
+ * a subset that goes from newStart to newEnd in target coordinates. 
+ * If includeEdgeGaps, don't trim target gaps before or after the range. */
+
+void axtSubsetOnT(struct axt *axt, int newStart, int newEnd, 
+	struct axtScoreScheme *ss, FILE *f);
+/* Write out subset of axt that goes from newStart to newEnd
+ * in target coordinates. */
+
+int axtTransPosToQ(struct axt *axt, int tPos);
+/* Convert from t to q coordinates */
+
+void axtSwap(struct axt *axt, int tSize, int qSize);
+/* Flip target and query on one axt. */
+
+struct axtBundle
+/* A bunch of axt's on the same query/target sequence. */
+    {
+    struct axtBundle *next;
+    struct axt *axtList;	/* List of alignments. */
+    int tSize;			/* Size of target. */
+    int qSize;			/* Size of query. */
+    };
+
+void axtBundleFree(struct axtBundle **pObj);
+/* Free a axtBundle. */
+
+void axtBundleFreeList(struct axtBundle **pList);
+/* Free a list of gfAxtBundles. */
+
+void axtBlastOut(struct axtBundle *abList, 
+	int queryIx, boolean isProt, FILE *f, 
+	char *databaseName, int databaseSeqCount, double databaseLetterCount, 
+	char *blastType, char *ourId, double minIdentity);
+/* Output a bundle of axt's on the same query sequence in blast format.
+ * The parameters in detail are:
+ *   ab - the list of bundles of axt's. 
+ *   f  - output file handle
+ *   databaseSeqCount - number of sequences in database
+ *   databaseLetterCount - number of bases or aa's in database
+ *   blastType - blast/wublast/blast8/blast9/xml
+ *   ourId - optional (may be NULL) thing to put in header
+ */
+
+struct axt *axtAffine(bioSeq *query, bioSeq *target, struct axtScoreScheme *ss);
+/* Return alignment if any of query and target using scoring scheme.  This does
+ * dynamic program affine-gap based alignment.  It's not suitable for very large
+ * sequences. */
+
+boolean axtAffineSmallEnough(double querySize, double targetSize);
+/* Return TRUE if it is reasonable to align sequences of given sizes
+ * with axtAffine. */
+
+
+struct axt *axtAffine2Level(bioSeq *query, bioSeq *target, struct axtScoreScheme *ss);
+/* 
+
+   Return alignment if any of query and target using scoring scheme. 
+   
+   2Level uses an economical amount of ram and should work for large target sequences.
+   
+   If Q is query size and T is target size and M is memory size, then
+   Total memory used M = 30*Q*sqrt(T).  When the target is much larger than the query
+   this method saves ram, and average runtime is only 50% greater, or 1.5 QT.  
+   If Q=5000 and T=245,522,847 for hg17 chr1, then M = 2.2 GB ram.  
+   axtAffine would need M=3QT = 3.4 TB.
+   Of course massive alignments will be painfully slow anyway.
+
+   Works for protein as well as DNA given the correct scoreScheme.
+  
+   NOTES:
+   Double-gap cost is equal to gap-extend cost, but gap-open would also work.
+   On very large target, score integer may overflow.
+   Input sequences not checked for invalid chars.
+   Input not checked but query should be shorter than target.
+   
+*/
+
+void axtAddBlocksToBoxInList(struct cBlock **pList, struct axt *axt);
+/* Add blocks (gapless subalignments) from (non-NULL!) axt to block list. 
+ * Note: list will be in reverse order of axt blocks. */
+
+void axtPrintTraditional(struct axt *axt, int maxLine, struct axtScoreScheme *ss, 
+	FILE *f);
+/* Print out an alignment with line-breaks. */
+
+void axtPrintTraditionalExtra(struct axt *axt, int maxLine,
+			      struct axtScoreScheme *ss, FILE *f,
+			      boolean reverseTPos, boolean reverseQPos);
+/* Print out an alignment with line-breaks.  If reverseTPos is true, then
+ * the sequence has been reverse complemented, so show the coords starting
+ * at tEnd and decrementing down to tStart; likewise for reverseQPos. */
+
+double axtIdWithGaps(struct axt *axt);
+/* Return ratio of matching bases to total symbols in alignment. */
+
+double axtCoverage(struct axt *axt, int qSize, int tSize);
+/* Return % of q and t covered. */
+
+void axtOutPretty(struct axt *axt, int lineSize, FILE *f);
+/* Output axt in pretty format. */
+
+#endif /* AXT_H */
+
diff --git a/gbtools/src/include/blatSrc/bPlusTree.h b/gbtools/src/include/blatSrc/bPlusTree.h
new file mode 100644
index 0000000..d24f933
--- /dev/null
+++ b/gbtools/src/include/blatSrc/bPlusTree.h
@@ -0,0 +1,127 @@
+/* bptFile - B+ Trees.  These are a method of indexing data similar to binary trees, but 
+ * with many children rather than just two at each node. They work well when stored on disk,
+ * since typically only two or three disk accesses are needed to locate any particular
+ * piece of data.  This implementation is *just* for disk based storage.  For memory
+ * use the rbTree instead. Currently the implementation is just useful for data warehouse
+ * type applications.  That is it implements a function to create a b+ tree from bulk data
+ * (bptFileCreate) and a function to lookup a value given a key (bptFileFind) but not functions
+ * to add or delete individual items.
+ *
+ *
+ * The layout of the file on disk is:
+ *    header
+ *    root node
+ *    (other nodes)
+ * In general when the tree is first built the higher level nodes are stored before the
+ * lower level nodes.  It is possible if a b+ tree is dynamically updated for this to
+ * no longer be strictly true, but actually currently the b+ tree code here doesn't implement
+ * dynamic updates - it just creates a b+ tree from a sorted list.
+ *
+ * Each node can be one of two types - index or leaf.  The index nodes contain pointers
+ * to child nodes.  The leaf nodes contain the actual data. 
+ *
+ * The layout of the file header is:
+ *       <magic number>  4 bytes - The value bptSig (0x78CA8C91)
+ *       <block size>    4 bytes - Number of children per block (not byte size of block)
+ *       <key size>      4 bytes - Number of significant bytes in key
+ *       <val size>      4 bytes - Number of bytes in value
+ *       <item count>    8 bytes - Number of items in index
+ *       <reserved2>     4 bytes - Always 0 for now
+ *       <reserved3>     4 bytes - Always 0 for now
+ * The magic number may be byte-swapped, in which case all numbers in the file
+ * need to be byte-swapped. 
+ *
+ * The nodes start with a header:
+ *       <is leaf>       1 byte  - 1 for leaf nodes, 0 for index nodes.
+ *       <reserved>      1 byte  - Always 0 for now.
+ *       <count>         2 bytes - The number of children/items in node
+ * This is followed by count items.  For the index nodes the items are
+ *       <key>           key size bytes - always written most significant byte first
+ *       <offset>        8 bytes - Offset of child node in index file.
+ * For leaf nodes the items are
+ *       <key>           key size bytes - always written most significant byte first
+ *       <val>           val sized bytes - the value associated with the key.
+ * Note in general the leaf nodes may not be the same size as the index nodes, though in
+ * the important case where the values are file offsets they will be.
+ */
+
+#ifndef BPLUSTREE_H
+#define BPLUSTREE_H
+
+struct bptFile
+/* B+ tree index file handle. */
+    {
+    struct bptFile *next;	/* Next in list of index files if any. */
+    char *fileName;		/* Name of file - for error reporting. */
+    struct udcFile *udc;			/* Open file pointer. */
+    bits32 blockSize;		/* Size of block. */
+    bits32 keySize;		/* Size of keys. */
+    bits32 valSize;		/* Size of values. */
+    bits64 itemCount;		/* Number of items indexed. */
+    boolean isSwapped;		/* If TRUE need to byte swap everything. */
+    bits64 rootOffset;		/* Offset of root block. */
+    };
+
+struct bptFile *bptFileOpen(char *fileName);
+/* Open up index file - reading header and verifying things. */
+
+void bptFileClose(struct bptFile **pBpt);
+/* Close down and deallocate index file. */
+
+struct bptFile *bptFileAttach(char *fileName, struct udcFile *udc);
+/* Open up index file on previously open file, with header at current file position. */
+
+void bptFileDetach(struct bptFile **pBpt);
+/* Detach and free up bptFile opened with bptFileAttach. */
+
+boolean bptFileFind(struct bptFile *bpt, void *key, int keySize, void *val, int valSize);
+/* Find value associated with key.  Return TRUE if it's found. 
+ *  Parameters:
+ *     bpt - file handle returned by bptFileOpen
+ *     key - pointer to key string
+ *     keySize - size of key.  Normally just strlen(key)
+ *     val - pointer to where to put retrieved value
+ *     valSize - size of memory buffer that will hold val.  Should match bpt->valSize.
+ */
+
+struct slRef *bptFileFindMultiple(struct bptFile *bpt, void *key, int keySize, int valSize);
+/* Find all values associated with key.  Store this in ->val item of returned list. 
+ * Do a slRefFreeListAndVals() on list when done. */
+
+void bptFileTraverse(struct bptFile *bpt, void *context,
+    void (*callback)(void *context, void *key, int keySize, void *val, int valSize) );
+/* Traverse bPlusTree on file, calling supplied callback function at each
+ * leaf item. */
+
+void bptKeyAtPos(struct bptFile *bpt, bits64 itemPos, void *result);
+/* Fill in result with the key at given itemPos.  For first piece of data itemPos is 0 
+ * and for last piece is bpt->itemCount - 1.  Result must be at least bpt->keySize.  
+ * If result is a string it won't be zero terminated
+ * by this routine.  Use bptStringKeyAtPos instead. */
+
+void bptStringKeyAtPos(struct bptFile *bpt, bits64 itemPos, char *result, int maxResultSize);
+/* Fill in result with the key at given itemPos.  The maxResultSize should be 1+bpt->keySize
+ * to accommodate zero termination of string. */
+
+void bptFileCreate(
+	void *itemArray, 	/* Sorted array of things to index. */
+	int itemSize, 		/* Size of each element in array. */
+	bits64 itemCount, 	/* Number of elements in array. */
+	bits32 blockSize,	/* B+ tree block size - # of children for each node. */
+	void (*fetchKey)(const void *va, char *keyBuf),  /* Given item, copy key to keyBuf */ 
+	bits32 keySize,					 /* Size of key */
+	void* (*fetchVal)(const void *va), 		 /* Given item, return pointer to value */
+	bits32 valSize, 				 /* Size of value */
+	char *fileName);                                 /* Name of output file. */
+/* Create a b+ tree index file from a sorted array. */
+
+void bptFileBulkIndexToOpenFile(void *itemArray, int itemSize, bits64 itemCount, bits32 blockSize,
+	void (*fetchKey)(const void *va, char *keyBuf), bits32 keySize,
+	void* (*fetchVal)(const void *va), bits32 valSize, FILE *f);
+/* Create a b+ tree index from a sorted array, writing output starting at current position
+ * of an already open file.  See bptFileCreate for explanation of parameters. */
+
+#define bptFileHeaderSize 32
+#define bptBlockHeaderSize 4
+
+#endif /* BPLUSTREE_H */
diff --git a/gbtools/src/include/blatSrc/bamFile.h b/gbtools/src/include/blatSrc/bamFile.h
new file mode 100644
index 0000000..84b7b45
--- /dev/null
+++ b/gbtools/src/include/blatSrc/bamFile.h
@@ -0,0 +1,169 @@
+/* bamFile -- interface to binary alignment format files using Heng Li's samtools lib. */
+
+#ifndef BAMFILE_H
+#define BAMFILE_H
+
+#include "dnaseq.h"
+#include "dystring.h"
+
+#ifdef USE_BAM
+
+// bam.h is incomplete without _IOLIB set to 1, 2 or 3.  2 is used by Makefile.generic:
+#ifndef _IOLIB
+#define _IOLIB 2
+#endif
+#include "bam.h"
+#include "sam.h"
+
+#else // no USE_BAM
+typedef struct { } bam1_t;
+typedef struct { } bam_index_t;
+typedef struct { } samfile_t;
+typedef int (*bam_fetch_f)(const bam1_t *b, void *data);
+
+#define COMPILE_WITH_SAMTOOLS "%s: in order to use this functionality you must " \
+    "install the samtools library (<A HREF=\"http://samtools.sourceforge.net\" " \
+    "TARGET=_BLANK>http://samtools.sourceforge.net</A>) and recompile kent/src with " \
+    "USE_BAM=1 in your environment " \
+    "(see <A HREF=\"http://genomewiki.ucsc.edu/index.php/Build_Environment_Variables\" " \
+    "TARGET=_BLANK>http://genomewiki.ucsc.edu/index.php/Build_Environment_Variables</A>)."
+
+#endif // USE_BAM
+
+struct bamChromInfo
+    {
+    struct bamChromInfo *next;
+    char *name;		/* Chromosome name */
+    bits32 size;	/* Chromosome size in bases */
+    };
+
+boolean bamFileExists(char *bamFileName);
+/* Return TRUE if we can successfully open the bam file and its index file. */
+
+void bamFileAndIndexMustExist(char *fileOrUrl);
+/* Open both a bam file and its accompanying index or errAbort; this is what it
+ * takes for diagnostic info to propagate up through errCatches in calling code. */
+
+samfile_t *bamOpen(char *fileOrUrl, char **retBamFileName);
+/* Return an open bam file as well as the filename of the bam. */
+
+samfile_t *bamMustOpenLocal(char *fileName, char *mode, void *extraHeader);
+/* Open up sam or bam file or die trying.  The mode parameter is 
+ *    "r" - open SAM to read
+ *    "rb" - open BAM to read
+ *    "w" - open SAM to write
+ *    "wb" - open BAM to write
+ * The extraHeader is generally NULL in the read case, and the write case
+ * contains a pointer to a bam_header_t with information about the header.
+ * The implementation is just a wrapper around samopen from the samtools library
+ * that aborts with error message if there's a problem with the open. */
+
+void bamFetchAlreadyOpen(samfile_t *samfile, bam_index_t *idx, char *bamFileName, 
+			 char *position, bam_fetch_f callbackFunc, void *callbackData);
+/* With the open bam file, return items the same way with the callbacks as with bamFetch() */
+/* except in this case use an already-open bam file and index (use bam_index_load and free() for */
+/* the index). It seems a little strange to pass the filename in with the open bam, but */
+/* it's just used to report errors. */
+
+void bamFetch(char *fileOrUrl, char *position, bam_fetch_f callbackFunc, void *callbackData,
+	samfile_t **pSamFile);
+/* Open the .bam file, fetch items in the seq:start-end position range,
+ * and call callbackFunc on each bam item retrieved from the file plus callbackData.
+ * This handles BAM files with "chr"-less sequence names, e.g. from Ensembl. 
+ * The pSamFile parameter is optional.  If non-NULL it will be filled in, just for
+ * the benefit of the callback function, with the open samFile.  */
+
+void bamClose(samfile_t **pSamFile);
+/* Close down a samefile_t */
+
+boolean bamIsRc(const bam1_t *bam);
+/* Return TRUE if alignment is on - strand. */
+
+INLINE int bamUnpackCigarElement(unsigned int packed, char *retOp)
+/* Given an unsigned int containing a number of bases and an offset into an
+ * array of BAM-enhanced-CIGAR ASCII characters (operations), store operation 
+ * char into *retOp (retOp must not be NULL) and return the number of bases. */
+{
+#ifdef USE_BAM
+// decoding lifted from samtools bam.c bam_format1_core(), long may it remain stable:
+#define BAM_DOT_C_OPCODE_STRING "MIDNSHP=X"
+int n = packed>>BAM_CIGAR_SHIFT;
+int opcode = packed & BAM_CIGAR_MASK;
+if (opcode >= strlen(BAM_DOT_C_OPCODE_STRING))
+    errAbort("bamUnpackCigarElement: unrecognized opcode %d. "
+	     "(I only recognize 0..%lu [" BAM_DOT_C_OPCODE_STRING "])  "
+	     "Perhaps samtools bam.c's bam_format1 encoding changed?  If so, update me.",
+	     opcode, (unsigned long)(strlen(BAM_DOT_C_OPCODE_STRING)-1));
+*retOp = BAM_DOT_C_OPCODE_STRING[opcode];
+return n;
+#else // no USE_BAM
+errAbort(COMPILE_WITH_SAMTOOLS, "bamUnpackCigarElement");
+return 0;
+#endif// USE_BAM
+}
+
+void bamGetSoftClipping(const bam1_t *bam, int *retLow, int *retHigh, int *retClippedQLen);
+/* If retLow is non-NULL, set it to the number of "soft-clipped" (skipped) bases at
+ * the beginning of the query sequence and quality; likewise for retHigh at end.
+ * For convenience, retClippedQLen is the original query length minus soft clipping
+ * (and the length of the query sequence that will be returned). */
+
+void bamUnpackQuerySequence(const bam1_t *bam, boolean useStrand, char *qSeq);
+/* Fill in qSeq with the nucleotide sequence encoded in bam.  The BAM format 
+ * reverse-complements query sequence when the alignment is on the - strand,
+ * so if useStrand is given we rev-comp it back to restore the original query 
+ * sequence. */
+
+char *bamGetQuerySequence(const bam1_t *bam, boolean useStrand);
+/* Return the nucleotide sequence encoded in bam.  The BAM format 
+ * reverse-complements query sequence when the alignment is on the - strand,
+ * so if useStrand is given we rev-comp it back to restore the original query 
+ * sequence. */
+
+UBYTE *bamGetQueryQuals(const bam1_t *bam, boolean useStrand);
+/* Return the base quality scores encoded in bam as an array of ubytes. */
+
+void bamUnpackCigar(const bam1_t *bam, struct dyString *dyCigar);
+/* Unpack CIGAR string into dynamic string */
+
+char *bamGetCigar(const bam1_t *bam);
+/* Return a BAM-enhanced CIGAR string, decoded from the packed encoding in bam. */
+
+void bamShowCigarEnglish(const bam1_t *bam);
+/* Print out cigar in English e.g. "20 (mis)Match, 1 Deletion, 3 (mis)Match" */
+
+void bamShowFlagsEnglish(const bam1_t *bam);
+/* Print out flags in English, e.g. "Mate is on '-' strand; Properly paired". */
+
+int bamGetTargetLength(const bam1_t *bam);
+/* Tally up the alignment's length on the reference sequence from
+ * bam's packed-int CIGAR representation. */
+
+bam1_t *bamClone(const bam1_t *bam);
+/* Return a newly allocated copy of bam. */
+
+void bamShowTags(const bam1_t *bam);
+/* Print out tags in HTML: bold key, no type indicator for brevity. */
+
+char *bamGetTagString(const bam1_t *bam, char *tag, char *buf, size_t bufSize);
+/* If bam's tags include the given 2-character tag, place the value into 
+ * buf (zero-terminated, trunc'd if nec) and return a pointer to buf,
+ * or NULL if tag is not present. */
+
+void bamUnpackAux(const bam1_t *bam, struct dyString *dy);
+/* Unpack the tag:type:val part of bam into dy */
+
+struct bamChromInfo *bamChromList(samfile_t *fh);
+/* Return list of chromosomes from bam header. We make no attempty to normalize chromosome names to UCSC format,
+   so list may contain things like "1" for "chr1", "I" for "chrI", "MT" for "chrM" etc. */
+
+void bamChromInfoFreeList(struct bamChromInfo **pList);
+/* Free a list of dynamically allocated bamChromInfo's */
+
+void samToBed(char *samIn, char *bedOut);
+/* samToBed - Convert SAM file to a pretty simple minded bed file.. */
+
+void samToOpenBed(char *samIn, FILE *f);
+/* Like samToOpenBed, but the output is the already open file f. */
+
+#endif//ndef BAMFILE_H
diff --git a/gbtools/src/include/blatSrc/bandExt.h b/gbtools/src/include/blatSrc/bandExt.h
new file mode 100644
index 0000000..63f2ba9
--- /dev/null
+++ b/gbtools/src/include/blatSrc/bandExt.h
@@ -0,0 +1,42 @@
+/* bandExt - banded Smith-Waterman extension of alignments. 
+ * An aligner might first find perfectly matching hits of
+ * a small size, then extend these hits as far as possible
+ * while the sequences perfectly match, then call on routines
+ * in this module to do further extensions allowing small
+ * gaps and mismatches. */
+
+#ifndef BANDEXT_H
+#define BANDEXT_H
+
+#ifndef LOCALMEM_H
+#include "localmem.h"
+#endif
+
+boolean bandExt(boolean global, struct axtScoreScheme *ss, int maxInsert,
+	char *aStart, int aSize, char *bStart, int bSize, int dir,
+	int symAlloc, int *retSymCount, char *retSymA, char *retSymB, 
+	int *retRevStartA, int *retRevStartB);
+/* Try to extend an alignment from aStart/bStart onwards.
+ * If global is set it will always go to end (aStart+aSize-1,
+ * bStart+bSize-1).  Set maxInsert to the maximum gap size allowed.  
+ * 3 is often a good choice.  aStart/aSize bStart/bSize describe the
+ * sequence to extend through (not including any of the existing
+ * alignment. Set dir = 1 for forward extension, dir = -1 for backwards. 
+ * retSymA and retSymB should point to arrays of characters of
+ * symAlloc size.  symAlloc needs to be aSize*2 or so.  The
+ * alignment is returned in the various ret values.  The function
+ * overall returns TRUE if an extension occurred, FALSE if not. */
+
+struct ffAli *bandExtFf(
+	struct lm *lm,	/* Local memory pool, NULL to use global allocation for ff */
+	struct axtScoreScheme *ss, 	/* Scoring scheme to use. */
+	int maxInsert,			/* Maximum number of inserts to allow. */
+	struct ffAli *origFf,		/* Alignment block to extend. */
+	char *nStart, char *nEnd,	/* Bounds of region to extend through */
+	char *hStart, char *hEnd,	/* Bounds of region to extend through */
+	int dir,			/* +1 to extend end, -1 to extend start */
+	int maxExt);			/* Maximum length of extension. */
+/* Extend a gapless alignment in one direction.  Returns extending
+ * ffAlis, not linked into origFf, or NULL if no extension possible. */
+
+#endif /* BANDEXT_H */
diff --git a/gbtools/src/include/blatSrc/base64.h b/gbtools/src/include/blatSrc/base64.h
new file mode 100644
index 0000000..d2c21c1
--- /dev/null
+++ b/gbtools/src/include/blatSrc/base64.h
@@ -0,0 +1,30 @@
+/* Base64 encoding and decoding.
+ * by Galt Barber */
+
+#ifndef BASE64_H
+#define BASE64_H
+
+#define B64CHARS "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
+
+char *base64Encode(char *input, size_t inplen);
+/* Use base64 to encode a string.  Returns one long encoded
+ * string which need to be freeMem'd. Note: big-endian algorithm.
+ * For some applications you may need to break the base64 output
+ * of this function into lines no longer than 76 chars.
+ */
+
+boolean base64Validate(char *input);
+/* Return true if input is valid base64.
+ * Note that the input string is changed by 
+ * eraseWhiteSpace(). */
+
+char *base64Decode(char *input, size_t *returnSize);
+/* Use base64 to decode a string.  Return decoded
+ * string which will be freeMem'd. Note: big-endian algorithm.
+ * Call eraseWhiteSpace() and check for invalid input 
+ * before passing in input if needed.  
+ * Optionally set retun size for use with binary data.
+ */
+
+#endif /* BASE64_H */
+
diff --git a/gbtools/src/include/blatSrc/basicBed.h b/gbtools/src/include/blatSrc/basicBed.h
new file mode 100644
index 0000000..28fb8ef
--- /dev/null
+++ b/gbtools/src/include/blatSrc/basicBed.h
@@ -0,0 +1,312 @@
+/* basicBed.h contains the basic interface to Browser Extensible Data (bed) files and tables.
+ * The idea behind bed is that the first three fields are defined and required.
+ * A total of 15 fields are defined, and the file can contain any number of these.
+ * In addition after any number of defined fields there can be custom fields that
+ * are not defined in the bed spec.
+ *
+ * There's additional bed-related code in src/hg/inc/bed.h.  This module contains the
+ * stuff that's independent of the database and other genomic structures. */
+
+#ifndef BASICBED_H
+#define BASICBED_H
+
+#include "psl.h"
+#include "asParse.h"
+
+struct bed
+/* Browser extensible data */
+    {
+    struct bed *next;  /* Next in singly linked list. */
+    char *chrom;	/* Human chromosome or FPC contig */
+    unsigned chromStart;	/* Start position in chromosome */
+    unsigned chromEnd;	/* End position in chromosome */
+    char *name;	/* Name of item */
+
+    /* The following items are not loaded by   the bedLoad routines. */
+    int score; /* Score - 0-1000 */  /* Should be uint but there are still some ct users with neg values, .as DOES say uint */
+    char strand[2];  /* + or -.  */
+    unsigned thickStart; /* Start of where display should be thick (start codon for genes) */
+    unsigned thickEnd;   /* End of where display should be thick (stop codon for genes) */
+    unsigned itemRgb;    /* RGB 8 bits each */
+    unsigned blockCount; /* Number of blocks. */
+    int *blockSizes;     /* Comma separated list of block sizes.  */
+    int *chromStarts;    /* Start positions inside chromosome.  Relative to chromStart*/
+
+
+    int expCount;	/* Experiment count */
+    int *expIds;		/* Comma separated list of Experiment ids */
+    float *expScores;	/* Comma separated list of Experiment scores. */
+    };
+
+#define bedKnownFields 15	/* Maximum known fields in bed */
+
+#define BB_MAX_CHROM_STRING 32  /* Maximum string length for chromosome length */
+
+struct bed3
+/* Browser extensible data - first three fields */
+    {
+    struct bed3 *next;  /* Next in singly linked list. */
+    char *chrom;	/* Human chromosome or FPC contig */
+    unsigned chromStart;	/* Start position in chromosome */
+    unsigned chromEnd;	/* End position in chromosome */
+    };
+
+struct bed3 *bed3New(char *chrom, int start, int end);
+/* Make new bed3. */
+
+void bed3Free(struct bed3 **pBed);
+/* Free up bed3 */
+
+void bed3FreeList(struct bed3 **pList);
+/* Free a list of dynamically allocated bed3's */
+
+struct bed3 *bed3LoadAll(char *fileName);
+/* Load three columns from file as bed3. */
+
+long long bed3TotalSize(struct bed3 *bedList);
+/* Return sum of chromEnd-chromStart. */
+
+struct bed4
+/* Browser extensible data - first four fields */
+    {
+    struct bed4 *next;  /* Next in singly linked list. */
+    char *chrom;	/* Human chromosome or FPC contig */
+    unsigned chromStart;	/* Start position in chromosome */
+    unsigned chromEnd;	/* End position in chromosome */
+    char *name;	/* Name of item */
+    };
+
+
+struct bed4 *bed4New(char *chrom, int start, int end, char *name);
+/* Make new bed4. */
+
+void bed4Free(struct bed4 **pBed);
+/* Free up bed4 */
+
+void bed4FreeList(struct bed4 **pList);
+/* Free a list of dynamically allocated bed4's */
+
+void bedStaticLoad(char **row, struct bed *ret);
+/* Load a row from bed table into ret.  The contents of ret will
+ * be replaced at the next call to this function. */
+
+struct bed *bedLoad(char **row);
+/* Load a bed from row fetched with select * from bed
+ * from database.  Dispose of this with bedFree(). 
+ * This loads first four fields. */
+
+struct bed *bedCommaIn(char **pS, struct bed *ret);
+/* Create a bed out of a comma separated string. 
+ * This will fill in ret if non-null, otherwise will
+ * return a new bed */
+
+void bedFree(struct bed **pEl);
+/* Free a single dynamically allocated bed such as created
+ * with bedLoad(). */
+
+void bedFreeList(struct bed **pList);
+/* Free a list of dynamically allocated bed's */
+
+void bedOutput(struct bed *el, FILE *f, char sep, char lastSep);
+/* Print out bed.  Separate fields with sep. Follow last field with lastSep. */
+
+#define bedTabOut(el,f) bedOutput(el,f,'\t','\n');
+/* Print out bed as a line in a tab-separated file. */
+
+#define bedCommaOut(el,f) bedOutput(el,f,',',',');
+/* Print out bed as a comma separated list including final comma. */
+
+/* --------------- End of AutoSQL generated code. --------------- */
+
+int bedCmp(const void *va, const void *vb);
+/* Compare to sort based on chrom,chromStart. */
+
+int bedCmpEnd(const void *va, const void *vb);
+/* Compare to sort based on chrom,chromEnd. */
+
+int bedCmpScore(const void *va, const void *vb);
+/* Compare to sort based on score - lowest first. */
+
+int bedCmpPlusScore(const void *va, const void *vb);
+/* Compare to sort based on chrom, chromStart and score - lowest first. */
+
+int bedCmpSize(const void *va, const void *vb);
+/* Compare to sort based on size of element (end-start == size) */
+
+int bedCmpChromStrandStart(const void *va, const void *vb);
+/* Compare to sort based on chrom,strand,chromStart. */
+
+struct bedLine
+/* A line in a bed file with chromosome, start position parsed out. */
+    {
+    struct bedLine *next;	/* Next in list. */
+    char *chrom;                /* Chromosome parsed out. */
+    int chromStart;             /* Start position (still in rest of line). */
+    char *line;                 /* Rest of line. */
+    };
+
+struct bedLine *bedLineNew(char *line);
+/* Create a new bedLine based on tab-separated string s. */
+
+void bedLineFree(struct bedLine **pBl);
+/* Free up memory associated with bedLine. */
+
+void bedLineFreeList(struct bedLine **pList);
+/* Free a list of dynamically allocated bedLine's */
+
+int bedLineCmp(const void *va, const void *vb);
+/* Compare to sort based on chrom,chromStart. */
+
+void bedSortFile(char *inFile, char *outFile);
+/* Sort a bed file (in place, overwrites old file. */
+
+struct bed *bedLoad3(char **row);
+/* Load first three fields of bed. */
+
+struct bed *bedLoad5(char **row);
+/* Load first five fields of bed. */
+
+struct bed *bedLoad6(char **row);
+/* Load first six fields of bed. */
+
+struct bed *bedLoad12(char **row);
+/* Load all 12 fields of bed. */
+
+struct bed *bedLoadN(char *row[], int wordCount);
+/* Convert a row of strings to a bed. */
+
+struct bed *bedLoadNAllChrom(char *fileName, int numFields, char* chrom);
+/* Load bed entries from a tab-separated file that have the given chrom.
+ * Dispose of this with bedFreeList(). */
+
+struct bed *bedLoadNAll(char *fileName, int numFields);
+/* Load all bed from a tab-separated file.
+ * Dispose of this with bedFreeList(). */
+
+struct bed *bedLoadAll(char *fileName);
+/* Determines how many fields are in a bedFile and load all beds from
+ * a tab-separated file.  Dispose of this with bedFreeList(). */
+
+void bedLoadAllReturnFieldCount(char *fileName, struct bed **retList, int *retFieldCount);
+/* Load bed of unknown size and return number of fields as well as list of bed items.
+ * Ensures that all lines in bed file have same field count. */
+
+void bedLoadAllReturnFieldCountAndRgb(char *fileName, struct bed **retList, int *retFieldCount, 
+    boolean *retRgb);
+/* Load bed of unknown size and return number of fields as well as list of bed items.
+ * Ensures that all lines in bed file have same field count.  Also returns whether 
+ * column 9 is being used as RGB or not. */
+
+void bedOutputN(struct bed *el, int wordCount, FILE *f, char sep, char lastSep);
+/* Write a bed of wordCount fields. */
+
+void bedOutputNitemRgb(struct bed *el, int wordCount, FILE *f,
+	char sep, char lastSep);
+/* Write a bed of wordCount fields, interpret column 9 as RGB. */
+
+void bedOutFlexible(struct bed *el, int wordCount, FILE *f,
+	char sep, char lastSep, boolean useItemRgb);
+/* Write a bed of wordCount fields, optionally interpreting field nine as R,G,B values. */
+
+#define bedTabOutNitemRgb(el,wordCount, f) bedOutputNitemRgb(el,wordCount,f,'\t','\n')
+/* Print out bed as a line in a tab-separated file. Interpret
+   column 9 as RGB */
+
+#define bedTabOutN(el,wordCount, f) bedOutputN(el,wordCount,f,'\t','\n')
+/* Print out bed as a line in a tab-separated file. */
+
+#define bedCommaOutN(el,wordCount, f) bedOutputN(el,wordCount,f,',',',')
+/* Print out bed as a comma separated list including final comma. */
+
+int bedTotalBlockSize(struct bed *bed);
+/* Return total size of all blocks. */
+
+int bedTotalThickBlockSize(struct bed *bed);
+/* Return total size of all thick blocks. */
+
+int bedStartThinSize(struct bed *bed);
+/* Return total size of all blocks before thick part. */
+
+int bedEndThinSize(struct bed *bed);
+/* Return total size of all blocks after thick part. */
+
+int bedBlockSizeInRange(struct bed *bed, int rangeStart, int rangeEnd);
+/* Get size of all parts of all exons between rangeStart and rangeEnd. */
+
+struct bed *bedFromPsl(struct psl *psl);
+/* Convert a single psl to a bed structure */
+
+void makeItBed12(struct bed *bedList, int numFields);
+/* If it's less than bed 12, make it bed 12. The numFields */
+/* param is for how many fields the bed *currently* has. */
+
+struct bed *cloneBed(struct bed *bed);
+/* Make an all-newly-allocated copy of a single bed record. */
+
+struct bed *cloneBedList(struct bed *bed);
+/* Make an all-newly-allocated list copied from bed. */
+
+struct bed *bedListNextDifferentChrom(struct bed *bedList);
+/* Return next bed in list that is from a different chrom than the start of the list. */
+
+struct bed *lmCloneBed(struct bed *bed, struct lm *lm);
+/* Make a copy of bed in local memory. */
+
+struct bed *bedCommaInN(char **pS, struct bed *ret, int fieldCount);
+/* Create a bed out of a comma separated string looking for fieldCount
+ * fields. This will fill in ret if non-null, otherwise will return a
+ * new bed */
+
+struct hash *readBedToBinKeeper(char *sizeFileName, char *bedFileName, int wordCount);
+/* Read a list of beds and return results in hash of binKeeper structure for fast query
+ * See also bedsIntoKeeperHash, which takes the beds read into a list already, but
+ * dispenses with the need for the sizeFile. */
+
+int bedParseRgb(char *itemRgb);
+/*	parse a string: "r,g,b" into three unsigned char values
+	returned as 24 bit number, or -1 for failure */
+
+long long bedTotalSize(struct bed *bedList);
+/* Add together sizes of all beds in list. */
+
+int bedSameStrandOverlap(struct bed *a, struct bed *b);
+/* Return amount of block-level overlap on same strand between a and b */
+
+boolean bedExactMatch(struct bed *oldBed, struct bed *newBed);
+/* Return TRUE if it's an exact match. */
+
+boolean bedCompatibleExtension(struct bed *oldBed, struct bed *newBed);
+/* Return TRUE if newBed is a compatible extension of oldBed, meaning
+ * all internal exons and all introns of old bed are contained, in the 
+ * same order in the new bed. */
+
+struct rbTree *bedToRangeTree(struct bed *bed);
+/* Convert bed into a range tree. */
+
+void bedIntoRangeTree(struct bed *bed, struct rbTree *rangeTree);
+/* Add all blocks in bed to range tree.  For beds without blocks,
+ * add entire bed. */
+
+int bedRangeTreeOverlap(struct bed *bed, struct rbTree *rangeTree);
+/* Return number of bases bed overlaps with rangeTree. */
+
+struct bed *bedThickOnly(struct bed *in);
+/* Return a bed that only has the thick part. (Which is usually the CDS). */
+
+struct bed *bedThickOnlyList(struct bed *inList);
+/* Return a list of beds that only are the thick part of input. */
+
+char *bedAsDef(int bedFieldCount, int totalFieldCount);
+/* Return an autoSql definition for a bed of given number of fields. 
+ * Normally totalFieldCount is equal to bedFieldCount.  If there are extra
+ * fields they are just given the names field16, field17, etc and type string. */
+
+boolean asCompareObjAgainstStandardBed(struct asObject *asYours, int numColumnsToCheck, boolean abortOnDifference);
+/* Compare user's .as object asYours to the standard BED.
+ * abortOnDifference specifies whether to warn or abort if they differ within the first numColumnsToCheck columns.
+ * Returns TRUE if they match. */
+
+void loadAndValidateBed(char *row[], int wordCount, int fieldCount, struct lineFile *lf, struct bed * bed, struct asObject *as, boolean isCt);
+/* Convert a row of strings to a bed and validate the contents.  Abort with message if invalid data. Optionally validate bedPlus via asObject. */
+
+#endif /* BASICBED_H */
diff --git a/gbtools/src/include/blatSrc/bbiFile.h b/gbtools/src/include/blatSrc/bbiFile.h
new file mode 100644
index 0000000..e582038
--- /dev/null
+++ b/gbtools/src/include/blatSrc/bbiFile.h
@@ -0,0 +1,454 @@
+/* bbiFile - Big Binary Indexed file.  Stuff that's common between bigWig and bigBed. */
+
+#ifndef BBIFILE_H
+#define BBIFILE_H
+
+#include "cirTree.h"
+#include "linefile.h"
+#include "localmem.h"
+
+/* bigWig/bigBed file structure:
+ *     fixedWidthHeader
+ *         magic# 		4 bytes
+ *         version              2 bytes
+ *	   zoomLevels		2 bytes
+ *         chromosomeTreeOffset	8 bytes
+ *         fullDataOffset	8 bytes
+ *	   fullIndexOffset	8 bytes
+ *         fieldCount           2 bytes (for bigWig 0)
+ *         definedFieldCount    2 bytes (for bigWig 0)
+ *         autoSqlOffset        8 bytes (for bigWig 0) (0 if no autoSql information)
+ *         totalSummaryOffset   8 bytes (0 in earlier versions of file lacking totalSummary)
+ *         uncompressBufSize    4 bytes (Size of uncompression buffer.  0 if uncompressed.)
+ *         extensionOffset      8 bytes (Offset to header extension 0 if no such extension)
+ *     zoomHeaders		there are zoomLevels number of these
+ *         reductionLevel	4 bytes
+ *	   reserved		4 bytes
+ *	   dataOffset		8 bytes
+ *         indexOffset          8 bytes
+ *     autoSql string (zero terminated - only present if autoSqlOffset non-zero)
+ *     totalSummary - summary of all data in file - only present if totalSummaryOffset non-zero
+ *         basesCovered        8 bytes
+ *         minVal              8 bytes float (for bigBed minimum depth of coverage)
+ *         maxVal              8 bytes float (for bigBed maximum depth of coverage)
+ *         sumData             8 bytes float (for bigBed sum of coverage)
+ *         sumSquared          8 bytes float (for bigBed sum of coverage squared)
+ *     extendedHeader
+ *         extensionSize       2 size of extended header in bytes - currently 64
+ *         extraIndexCount     2 number of extra fields we will be indexing
+ *         extraIndexListOffset 8 Offset to list of non-chrom/start/end indexes
+ *         reserved            48 All zeroes for now
+ *     extraIndexList - one of these for each extraIndex 
+ *         type                2 Type of index.  Always 0 for bPlusTree now
+ *         fieldCount          2 Number of fields used in this index.  Always 1 for now
+ *         indexOffset         8 offset for this index in file
+ *         reserved            4 All zeroes for now
+ *         fieldList - one of these for each field being used in _this_ index
+ *            fieldId          2 index of field within record
+ *            reserved         2 All zeroes for now
+ *     chromosome b+ tree       bPlusTree index
+ *     full data
+ *         sectionCount		8 bytes (item count for bigBeds)
+ *         section data		section count sections, of three types (bed data for bigBeds)
+ *     full index               cirTree index
+ *     zoom info             one of these for each zoom level
+ *         zoom data
+ *             zoomCount	4 bytes
+ *             zoom data	there are zoomCount of these items
+ *                 chromId	4 bytes
+ *	           chromStart	4 bytes
+ *                 chromEnd     4 bytes
+ *                 validCount	4 bytes
+ *                 minVal       4 bytes float 
+ *                 maxVal       4 bytes float
+ *                 sumData      4 bytes float
+ *                 sumSquares   4 bytes float
+ *         zoom index        	cirTree index
+ *     extraIndexes [optional]  bPlusTreeIndex for each extra field that is indexed
+ *     magic# 		4 bytes - same as magic number at start of header
+ */
+
+#ifndef CIRTREE_H
+#include "cirTree.h"
+#endif
+
+#define bbiCurrentVersion 4
+/* Version history (of file format, not utilities - corresponds to version field in header)
+ *    1 - Initial release
+ *    1 - Unfortunately when attempting a transparent change to encoders, made the sectionCount 
+ *        field inconsistent, sometimes not present, sometimes 32 bits.  Since offset positions
+ *        in index were still accurate this did not break most applications, but it did show
+ *        up in the summary section of the Table Browser.
+ *    2 - Made sectionCount consistently 64 bits. Also fixed missing zoomCount in first level of
+ *        zoom in files made by bedToBigBed and bedGraphToBigWig.  (The older wigToBigWig was fine.)
+ *        Added totalSummary section.
+ *    3 - Adding zlib compression.  Only active if uncompressBufSize is non-zero in header.
+ *    4 - Fixed problem in encoder for the max field in zoom levels higher than the first one.
+ *        Added an extra sig at end of file.
+ */
+
+struct bbiZoomLevel
+/* A zoom level in bigWig file. */
+    {
+    struct bbiZoomLevel *next;		/* Next in list. */
+    bits32 reductionLevel;		/* How many bases per item */
+    bits32 reserved;			/* Zero for now. */
+    bits64 dataOffset;			/* Offset of data for this level in file. */
+    bits64 indexOffset;			/* Offset of index for this level in file. */
+    };
+
+struct bbiZoomLevel *bbiBestZoom(struct bbiZoomLevel *levelList, int desiredReduction);
+/* Return zoom level that is the closest one that is less than or equal to 
+ * desiredReduction. */
+
+struct bbiFile 
+/* An open bbiFile */
+    {
+    struct bbiFile *next;	/* Next in list. */
+    char *fileName;		/* Name of file - for better error reporting. */
+    struct udcFile *udc;	/* Open UDC file handle. */
+    bits32 typeSig;		/* bigBedSig or bigWigSig for now. */
+    boolean isSwapped;		/* If TRUE need to byte swap everything. */
+    struct bptFile *chromBpt;	/* Index of chromosomes. */
+    bits16 version;		/* Version number - initially 1. */
+    bits16 zoomLevels;		/* Number of zoom levels. */
+    bits64 chromTreeOffset;	/* Offset to chromosome index. */
+    bits64 unzoomedDataOffset;	/* Start of unzoomed data. */
+    bits64 unzoomedIndexOffset;	/* Start of unzoomed index. */
+    bits16 fieldCount;		/* Number of columns in bed version. */
+    bits16 definedFieldCount;   /* Number of columns using bed standard definitions. */
+    bits64 asOffset;		/* Offset to embedded null-terminated AutoSQL file. */
+    bits64 totalSummaryOffset;	/* Offset to total summary information if any.  
+				   (On older files have to calculate) */
+    bits32 uncompressBufSize;	/* Size of uncompression buffer, 0 if uncompressed */
+    bits64 extensionOffset;	/* Start of header extension block or 0 if none. */
+    struct cirTreeFile *unzoomedCir;	/* Unzoomed data index in memory - may be NULL. */
+    struct bbiZoomLevel *levelList;	/* List of zoom levels. */
+
+    /* Fields based on extension block. */
+    bits16 extensionSize;   /* Size of extension block */
+    bits16 extraIndexCount; /* Number of extra indexes (on fields other than chrom,start,end */ 
+    bits64 extraIndexListOffset;    /* Offset to list of extra indexes */
+    };
+
+
+struct bbiFile *bbiFileOpen(char *fileName, bits32 sig, char *typeName);
+/* Open up big wig or big bed file. */
+
+void bbiFileClose(struct bbiFile **pBwf);
+/* Close down a big wig/big bed file. */
+
+struct fileOffsetSize *bbiOverlappingBlocks(struct bbiFile *bbi, struct cirTreeFile *ctf,
+	char *chrom, bits32 start, bits32 end, bits32 *retChromId);
+/* Fetch list of file blocks that contain items overlapping chromosome range. */
+ 
+struct bbiChromIdSize
+/* We store an id/size pair in chromBpt bPlusTree */
+    {
+    bits32 chromId;	/* Chromosome ID */
+    bits32 chromSize;	/* Chromosome Size */
+    };
+
+struct bbiChromInfo
+/* Pair of a name and a 32-bit integer. Used to assign IDs to chromosomes. */
+    {
+    struct bbiChromInfo *next;
+    char *name;		/* Chromosome name */
+    bits32 id;		/* Chromosome ID - a small number usually */
+    bits32 size;	/* Chromosome size in bases */
+    };
+
+struct bbiChromInfo *bbiChromList(struct bbiFile *bbi);
+/* Return all chromosomes in file.  Dispose of this with bbiChromInfoFreeList. */
+
+void bbiChromInfoFreeList(struct bbiChromInfo **pList);
+/* Free a list of bbiChromInfo's */
+
+bits32 bbiChromSize(struct bbiFile *bbi, char *chrom);
+/* Returns size of given chromosome. */
+
+void bbiChromInfoKey(const void *va, char *keyBuf);
+/* Get key field out of bbiChromInfo. */
+
+void *bbiChromInfoVal(const void *va);
+/* Get val field out of bbiChromInfo. */
+
+char *bbiCachedChromLookup(struct bbiFile *bbi, int chromId, int lastChromId,
+    char *chromBuf, int chromBufSize);
+/* Return chromosome name corresponding to chromId.  Because this is a bit expensive,
+ * if you are doing this repeatedly pass in the chromId used in the previous call to
+ * this in lastChromId,  which will save it from doing the lookup again on the same
+ * chromosome.  Pass in -1 to lastChromId if this is the first time or if you can't be
+ * bothered.  The chromBufSize should be at greater or equal to bbi->keySize+1.  */
+
+struct bbiChromUsage
+/* Information on how many items per chromosome etc.  Used by multipass bbiFile writers. */
+    {
+    struct bbiChromUsage *next;
+    char *name;	/* chromosome name. */
+    bits32 itemCount;	/* Number of items for this chromosome. */
+    bits32 id;	/* Unique ID for chromosome. */
+    bits32 size;	/* Size of chromosome. */
+    };
+
+
+enum bbiSummaryType
+/* Way to summarize data. */
+    {
+    bbiSumMean = 0,	/* Average value */
+    bbiSumMax = 1,	/* Maximum value */
+    bbiSumMin = 2,	/* Minimum value */
+    bbiSumCoverage = 3,  /* Bases in region containing actual data. */
+    bbiSumStandardDeviation = 4, /* Standard deviation in window. */
+    };
+
+enum bbiSummaryType bbiSummaryTypeFromString(char *string);
+/* Return summary type given a descriptive string. */
+
+char *bbiSummaryTypeToString(enum bbiSummaryType type);
+/* Convert summary type from enum to string representation. */
+
+struct bbiSummary
+/* A summary type item. */
+    {
+    struct bbiSummary *next;
+    bits32 chromId;		/* ID of associated chromosome. */
+    bits32 start,end;		/* Range of chromosome covered. */
+    bits32 validCount;		/* Count of (bases) with actual data. */
+    float minVal;		/* Minimum value of items */
+    float maxVal;		/* Maximum value of items */
+    float sumData;		/* sum of values for each base. */
+    float sumSquares;		/* sum of squares for each base. */
+    bits64 fileOffset;		/* Offset of summary in file. */
+    };
+
+#define bbiSummaryFreeList slFreeList
+
+
+struct bbiSummaryOnDisk
+/* The part of the summary that ends up on disk - in the same order written to disk. */
+    {
+    bits32 chromId;		/* ID of associated chromosome. */
+    bits32 start,end;		/* Range of chromosome covered. */
+    bits32 validCount;		/* Count of (bases) with actual data. */
+    float minVal;		/* Minimum value of items */
+    float maxVal;		/* Maximum value of items */
+    float sumData;		/* sum of values for each base. */
+    float sumSquares;		/* sum of squares for each base. */
+    };
+
+struct bbiInterval
+/* Data on a single interval. */
+    {
+    struct bbiInterval *next;	/* Next in list. */
+    bits32 start, end;			/* Position in chromosome, half open. */
+    double val;				/* Value at that position. */
+    };
+
+typedef struct bbiInterval *(*BbiFetchIntervals)(struct bbiFile *bbi, char *chrom, 
+					    bits32 start, bits32 end, struct lm *lm);
+/* A callback function that returns a bbiInterval list. */
+
+void bbiAttachUnzoomedCir(struct bbiFile *bbi);
+/* Make sure unzoomed cir is attached. */
+
+struct bbiSummaryElement
+/* An element of a summary from the user side. */
+    {
+    bits64 validCount;		/* Count of (bases) with actual data. */
+    double minVal;		/* Minimum value of items */
+    double maxVal;		/* Maximum value of items */
+    double sumData;		/* sum of values for each base. */
+    double sumSquares;		/* sum of squares for each base. */
+    };
+
+boolean bbiSummaryArrayExtended(struct bbiFile *bbi, char *chrom, bits32 start, bits32 end,
+	BbiFetchIntervals fetchIntervals,
+	int summarySize, struct bbiSummaryElement *summary);
+/* Fill in summary with  data from indicated chromosome range in bigWig/bigBed file. 
+ * Returns FALSE if no data at that position. */
+
+boolean bbiSummaryArray(struct bbiFile *bbi, char *chrom, bits32 start, bits32 end,
+	BbiFetchIntervals fetchIntervals,
+	enum bbiSummaryType summaryType, int summarySize, double *summaryValues);
+/* Fill in summaryValues with  data from indicated chromosome range in bigWig file.
+ * Be sure to initialize summaryValues to a default value, which will not be touched
+ * for regions without data in file.  (Generally you want the default value to either
+ * be 0.0 or nan("") depending on the application.)  Returns FALSE if no data
+ * at that position. */
+
+struct bbiSummaryElement bbiTotalSummary(struct bbiFile *bbi);
+/* Return summary of entire file! */
+
+/****** Write side of things - implemented in bbiWrite.c.  Few people need this. ********/
+
+struct bbiBoundsArray
+/* Minimum info needed for r-tree indexer - where a section lives on disk and the
+ * range it covers. */
+    {
+    bits64 offset;		/* Offset within file. */
+    struct cirTreeRange range;	/* What is covered. */
+    };
+
+struct cirTreeRange bbiBoundsArrayFetchKey(const void *va, void *context);
+/* Fetch bbiBoundsArray key for r-tree */
+
+bits64 bbiBoundsArrayFetchOffset(const void *va, void *context);
+/* Fetch bbiBoundsArray file offset for r-tree */
+
+struct bbiSumOutStream
+/* Buffer output to file so have a chance to compress. */
+    {
+    struct bbiSummaryOnDisk *array;
+    int elCount;
+    int allocCount;
+    FILE *f;
+    boolean doCompress;
+    };
+
+struct bbiSumOutStream *bbiSumOutStreamOpen(int allocCount, FILE *f, boolean doCompress);
+/* Open new bbiSumOutStream. */
+
+void bbiSumOutStreamClose(struct bbiSumOutStream **pStream);
+/* Free up bbiSumOutStream */
+
+void bbiSumOutStreamWrite(struct bbiSumOutStream *stream, struct bbiSummary *sum);
+/* Write out next one to stream. */
+
+void bbiOutputOneSummaryFurtherReduce(struct bbiSummary *sum, 
+	struct bbiSummary **pTwiceReducedList, 
+	int doubleReductionSize, struct bbiBoundsArray **pBoundsPt, 
+	struct bbiBoundsArray *boundsEnd, struct lm *lm, 
+	struct bbiSumOutStream *stream);
+/* Write out sum to file, keeping track of minimal info on it in *pBoundsPt, and also adding
+ * it to second level summary. */
+
+struct bbiSummary *bbiSummarySimpleReduce(struct bbiSummary *list, int reduction, struct lm *lm);
+/* Do a simple reduction - where among other things the reduction level is an integral
+ * multiple of the previous reduction level, and the list is sorted. Allocate result out of lm. */
+
+void bbiWriteDummyHeader(FILE *f);
+/* Write out all-zero header, just to reserve space for it. */
+
+void bbiWriteDummyZooms(FILE *f);
+/* Write out zeroes to reserve space for ten zoom levels. */
+
+void bbiSummaryElementWrite(FILE *f, struct bbiSummaryElement *sum);
+/* Write out summary element to file. */
+
+void bbiWriteChromInfo(struct bbiChromUsage *usageList, int blockSize, FILE *f);
+/* Write out information on chromosomes to file. */
+
+void bbiWriteFloat(FILE *f, float val);
+/* Write out floating point val to file.  Mostly to convert from double... */
+
+struct hash *bbiChromSizesFromFile(char *fileName);
+/* Read two column file into hash keyed by chrom. */
+
+bits64 bbiTotalSummarySize(struct bbiSummary *list);
+/* Return size on disk of all summaries. */
+
+void bbiChromUsageFree(struct bbiChromUsage **pUsage);
+/* free a single bbiChromUsage structure */
+
+void bbiChromUsageFreeList(struct bbiChromUsage **pList);
+/* free a list of bbiChromUsage structures */
+
+struct bbNamedFileChunk 
+/* A name associated with an offset into a possibly large file.  Used for extra
+ * indexes in bigBed files. */
+    {
+    char *name;	    /* Name of chunk. */
+    bits64 offset;  /* Start in file. */
+    bits64 size;    /* Size in file. */
+    };
+
+struct bbExIndexMaker
+/* A helper structure to make indexes beyond primary one.  Just used for bigBeds */
+    {
+    bits16 indexCount;          /* Number of extra indexes. */
+        /* Kind of wish next four fields,  all of which are arrays indexed
+         * by the same thing,  were a single array of a structure instead. */
+    bits16 *indexFields;        /* array of field ids, one for each extra index. */
+    int *maxFieldSize;          /* array of maximum sizes seen for this field. */
+    struct bbNamedFileChunk **chunkArrayArray; /* where we keep name/start/size triples */
+    bits64 *fileOffsets;        /* array of file offsets where indexes starts. */
+    int recordCount;            /* number of records in file. */
+    };
+
+struct bbiChromUsage *bbiChromUsageFromBedFile(struct lineFile *lf, struct hash *chromSizesHash, 
+	struct bbExIndexMaker *eim, int *retMinDiff, double *retAveSize, bits64 *retBedCount);
+/* Go through bed file and collect chromosomes and statistics.  If eim parameter is non-NULL
+ * collect max field sizes there too. */
+
+#define bbiMaxZoomLevels 10	/* Max number of zoom levels */
+#define bbiResIncrement 4	/* Amount to reduce at each zoom level */
+
+int bbiCalcResScalesAndSizes(int aveSize, 
+    int resScales[bbiMaxZoomLevels], int resSizes[bbiMaxZoomLevels]);
+/* Fill in resScales with amount to zoom at each level, and zero out resSizes based
+ * on average span. Returns the number of zoom levels we actually will use. */
+
+typedef struct bbiSummary *bbiWriteReducedOnceReturnReducedTwice(
+	struct bbiChromUsage *usageList, int fieldCount,
+	struct lineFile *lf, bits32 initialReduction, bits32 initialReductionCount, 
+	int zoomIncrement, int blockSize, int itemsPerSlot, boolean doCompress,
+	struct lm *lm, FILE *f, bits64 *retDataStart, bits64 *retIndexStart,
+	struct bbiSummaryElement *totalSum);
+/* Typedef for a function that writes out data reduced by factor of initial reduction, and
+ * also returns an array of bbiSummaries for the next reduction level. */
+
+int bbiWriteZoomLevels(
+    struct lineFile *lf,    /* Input file. */
+    FILE *f,		    /* Output. */
+    int blockSize,	    /* Size of index block */
+    int itemsPerSlot,	    /* Number of data points bundled at lowest level. */
+    bbiWriteReducedOnceReturnReducedTwice writeReducedOnceReturnReducedTwice,   /* callback */
+    int fieldCount,	    /* Number of fields in bed (4 for bedGraph) */
+    boolean doCompress,	    /* Do we compress.  Answer really should be yes! */
+    bits64 dataSize,	    /* Size of data on disk (after compression if any). */
+    struct bbiChromUsage *usageList, /* Result from bbiChromUsageFromBedFile */
+    int resTryCount, int resScales[], int resSizes[],   /* How much to zoom at each level */
+    bits32 zoomAmounts[bbiMaxZoomLevels],      /* Fills in amount zoomed at each level. */
+    bits64 zoomDataOffsets[bbiMaxZoomLevels],  /* Fills in where data starts for each zoom level. */
+    bits64 zoomIndexOffsets[bbiMaxZoomLevels], /* Fills in where index starts for each level. */
+    struct bbiSummaryElement *totalSum);
+/* Write out all the zoom levels and return the number of levels written.  Writes 
+ * actual zoom amount and the offsets of the zoomed data and index in the last three
+ * parameters.  Sorry for all the parameters - it was this or duplicate a big chunk of
+ * code between bedToBigBed and bedGraphToBigWig. */
+
+int bbiCountSectionsNeeded(struct bbiChromUsage *usageList, int itemsPerSlot);
+/* Count up number of sections needed for data. */
+
+void bbiAddToSummary(bits32 chromId, bits32 chromSize, bits32 start, bits32 end, 
+	bits32 validCount, double minVal, double maxVal, double sumData, double sumSquares,  
+	int reduction, struct bbiSummary **pOutList);
+/* Add data range to summary - putting it onto top of list if possible, otherwise
+ * expanding list. */
+
+void bbiAddRangeToSummary(bits32 chromId, bits32 chromSize, bits32 start, bits32 end, 
+	double val, int reduction, struct bbiSummary **pOutList);
+/* Add chromosome range to summary - putting it onto top of list if possible, otherwise
+ * expanding list. */
+
+struct bbiSummary *bbiReduceSummaryList(struct bbiSummary *inList, 
+	struct bbiChromInfo *chromInfoArray, int reduction);
+/* Reduce summary list to another summary list. */
+
+bits64 bbiWriteSummaryAndIndex(struct bbiSummary *summaryList, 
+	int blockSize, int itemsPerSlot, boolean doCompress, FILE *f);
+/* Write out summary and index to summary, returning start position of
+ * summary index. */
+
+boolean bbiFileCheckSigs(char *fileName, bits32 sig, char *typeName);
+/* check file signatures at beginning and end of file */
+
+time_t bbiUpdateTime(struct bbiFile *bbi);
+/* return bbi->udc->updateTime */
+
+struct bbiSummary *bbiSummariesInRegion(struct bbiZoomLevel *zoom, struct bbiFile *bbi,
+        int chromId, bits32 start, bits32 end);
+/* Return list of all summaries in region at given zoom level of bbiFile. */
+
+#endif /* BBIFILE_H */
diff --git a/gbtools/src/include/blatSrc/bigBed.h b/gbtools/src/include/blatSrc/bigBed.h
new file mode 100644
index 0000000..8031299
--- /dev/null
+++ b/gbtools/src/include/blatSrc/bigBed.h
@@ -0,0 +1,144 @@
+/* bigBed - interface to binary file with bed-style values (that is a bunch of
+ * possibly overlapping regions.
+ *
+ * This shares a lot with the bigWig module. 
+ *
+ * Most of the functions here are concerned with reading bigBed files.  There's
+ * two common things you want to do with a bigBed,  either stream through everything in it,
+ * or just read the parts that overlap a interval within the genome.  The files
+ * are optimized for interval queries, but streaming through them is not difficult either.
+ * 
+ * To query an interval:
+ *    struct bbiFile *bbi = bigBedFileOpen(fileName);
+ *    struct lm *lm = lmInit(0); // Memory pool to hold returned list
+ *    struct bigBedInterval *list = bigBedIntervalQuery(bbi, chrom, start, end, 0, lm);
+ *    struct bigBedInterval *el;
+ *    for (el = list; el != NULL; el = el->next)
+ *        // do something involving chrom, el->start, el->end
+ *    lmCleanup(&lm);         // typically do this after each query
+ *    bigBedFileClose(&bbi);  // typically only do this when finished all queries
+ *
+ * To stream through whole file
+ *    struct bbiFile *bbi = bigBedFileOpen(fileName);
+ *    struct bbiChromInfo *chrom, *chromList = bbiChromList(bbi);
+ *    for (chrom = chromList; chrom != NULL; chrom = chrom->next)
+ *        {
+ *        struct lm *lm = lmInit(0);
+ *        struct bigBedInterval *list = bigBedIntervalQuery(bbi,chrom->name,0,chrom->size,0,lm);
+ *        struct bigBedInterval *el;
+ *        for (el = list; el != NULL; el = el->next)
+ *            // do something involving chrom, el->start, el->end
+ *        lmCleanup(&lm);
+ *        }
+ *    bigBedFileClose(&bbi);
+ *
+ * The processes for streaming through or doing interval queries on a bigWig file are very 
+ * similar. */
+
+#ifndef BIGBED_H
+#define BIGBED_H
+
+#include "asParse.h"
+
+#ifndef BBIFILE
+#include "bbiFile.h"
+#endif
+
+struct bigBedInterval
+/* A partially parsed out bed record plus some extra fields.  Use this directly
+ * or convert it to an array of characters with bigBedIntervalToRow. */
+    {
+    struct bigBedInterval *next;	/* Next in list. */
+    bits32 start, end;		/* Range inside chromosome - half open zero based. */
+    char *rest;			/* Rest of line. May be NULL*/
+    bits32 chromId;             /* ID of chromosome.  */
+    };
+
+/*** Routines to open & close bigBed files, and to do chromosome range queries on them. ***/
+
+struct bbiFile *bigBedFileOpen(char *fileName);
+/* Open up big bed file.   Free this up with bbiFileClose. */
+
+#define bigBedFileClose(a) bbiFileClose(a)
+
+struct bigBedInterval *bigBedIntervalQuery(struct bbiFile *bbi, char *chrom,
+	bits32 start, bits32 end, int maxItems, struct lm *lm);
+/* Get data for interval.  Return list allocated out of lm.  Set maxItems to maximum
+ * number of items to return, or to 0 for all items. */
+
+int bigBedIntervalToRow(struct bigBedInterval *interval, char *chrom, char *startBuf, char *endBuf,
+	char **row, int rowSize);
+/* Convert bigBedInterval into an array of chars equivalent to what you'd get by
+ * parsing the bed file. The startBuf and endBuf are used to hold the ascii representation of
+ * start and end.  Note that the interval->rest string will have zeroes inserted as a side effect.
+ * Returns number of fields in row.  */
+
+boolean bigBedSummaryArray(struct bbiFile *bbi, char *chrom, bits32 start, bits32 end,
+	enum bbiSummaryType summaryType, int summarySize, double *summaryValues);
+/* Fill in summaryValues with  data from indicated chromosome range in bigBed file.
+ * Be sure to initialize summaryValues to a default value, which will not be touched
+ * for regions without data in file.  (Generally you want the default value to either
+ * be 0.0 or nan("") depending on the application.)  Returns FALSE if no data
+ * at that position. */
+
+boolean bigBedSummaryArrayExtended(struct bbiFile *bbi, char *chrom, bits32 start, bits32 end,
+	int summarySize, struct bbiSummaryElement *summary);
+/* Get extended summary information for summarySize evenely spaced elements into
+ * the summary array. */
+
+/*** Some routines for accessing bigBed items via name. ***/
+
+struct bigBedInterval *bigBedNameQuery(struct bbiFile *bbi, struct bptFile *index,
+    int fieldIx, char *name, struct lm *lm);
+/* Return list of intervals matching file. These intervals will be allocated out of lm. */
+
+struct bigBedInterval *bigBedMultiNameQuery(struct bbiFile *bbi, struct bptFile *index,
+    int fieldIx, char **names, int nameCount, struct lm *lm);
+/* Fetch all records matching any of the names. Using given index on given field.
+ * Return list is allocated out of lm. */
+
+int bigBedIntervalToRowLookupChrom(struct bigBedInterval *interval, 
+    struct bigBedInterval *prevInterval, struct bbiFile *bbi,
+    char *chromBuf, int chromBufSize, char *startBuf, char *endBuf, char **row, int rowSize);
+/* Convert bigBedInterval to array of chars equivalend to what you'd get by parsing the
+ * bed file.  If you already know what chromosome the interval is on use the simpler
+ * bigBedIntervalToRow.  This one will look up the chromosome based on the chromId field
+ * of the interval,  which is relatively time consuming.  To avoid doing this unnecessarily
+ * pass in a non-NULL prevInterval,  and if the chromId is the same on prevInterval as this,
+ * it will avoid the lookup.  The chromBufSize should be at greater or equal to 
+ * bbi->chromBpt->keySize+1.  The startBuf and endBuf are used to hold the ascii representation of
+ * start and end, and should be 16 bytes.  Note that the interval->rest string will have zeroes 
+ * inserted as a side effect.  Returns number of fields in row.  */
+
+void bigBedIntervalListToBedFile(struct bbiFile *bbi, struct bigBedInterval *intervalList, FILE *f);
+/* Write out big bed interval list to bed file, looking up chromosome. */
+
+/** Routines to access other data from a bigBed file. */
+
+bits64 bigBedItemCount(struct bbiFile *bbi);
+/* Return total items in file. */
+
+char *bigBedAutoSqlText(struct bbiFile *bbi);
+/* Get autoSql text if any associated with file.  Do a freeMem of this when done. */
+
+struct asObject *bigBedAs(struct bbiFile *bbi);
+/* Get autoSql object definition if any associated with file. */
+
+struct asObject *bigBedAsOrDefault(struct bbiFile *bbi);
+// Get asObject associated with bigBed - if none exists in file make it up from field counts.
+
+struct asObject *bigBedFileAsObjOrDefault(char *fileName);
+// Get asObject associated with bigBed file, or the default.
+
+boolean bigBedFileCheckSigs(char *fileName);
+/* check file signatures at beginning and end of file */
+
+struct bptFile *bigBedOpenExtraIndex(struct bbiFile *bbi, char *fieldName, int *retFieldIx);
+/* Return index associated with fieldName.  Aborts if no such index.  Optionally return
+ * index in a row of this field. */
+
+struct slName *bigBedListExtraIndexes(struct bbiFile *bbi);
+/* Return list of names of extra indexes beyond primary chrom:start-end one" */
+
+#endif /* BIGBED_H */
+
diff --git a/gbtools/src/include/blatSrc/bigWig.h b/gbtools/src/include/blatSrc/bigWig.h
new file mode 100644
index 0000000..211bf30
--- /dev/null
+++ b/gbtools/src/include/blatSrc/bigWig.h
@@ -0,0 +1,124 @@
+/* bigWig - interface to binary file with wiggle-style values (that is a bunch of
+ * small non-overlapping regions each associated with a floating point value. 
+ *
+ * There are several ways to use this module.   To create a new bigWig file use the
+ * bigWigCreate function, which takes as input an ascii file in fixedStep, variableStep
+ * or bedGraph format.
+ *
+ * To get a section of of a bigWig for display on a browser, use the bigWigSummaryArray
+ * function, which will fill in an array of doubles with on value for each pixel that
+ * you want to display.
+ *
+ * To read all the data out of a bigWig get the chromosome info with bbiChromList
+ * and then fetch all of it for each chromosome using bigWigIntervalQuery.
+ *
+ * See also the module bbiFile that has a description of they structure of
+ * a bigWig file, and lower level routines used to implement this interface.
+ */
+
+#ifndef BIGWIG_H
+#define BIGWIG_H
+
+#ifndef BBIFILE
+#include "bbiFile.h"
+#endif
+
+#ifndef BITS_H
+#include "bits.h"
+#endif
+
+void bigWigFileCreateEx(
+	char *inName, 		/* Input file in ascii wiggle format. */
+	char *chromSizes, 	/* Two column tab-separated file: <chromosome> <size>. */
+	int blockSize,		/* Number of items to bundle in r-tree.  1024 is good. */
+	int itemsPerSlot,	/* Number of items in lowest level of tree.  512 is good. */
+	boolean clipDontDie,	/* If TRUE then clip items off end of chrom rather than dying. */
+	boolean compress,	/* If TRUE then compress data. */
+	boolean keepAllChromosomes,	/* If TRUE then store all chromosomes in chromosomal b-tree. */
+	boolean fixedSummaries,	/* If TRUE then impose fixed summary levels. */
+	char *outName);
+/* Convert ascii format wig file (in fixedStep, variableStep or bedGraph format) 
+ * to binary big wig format. */
+void bigWigFileCreate(
+	char *inName, 		/* Input file in ascii wiggle format. */
+	char *chromSizes, 	/* Two column tab-separated file: <chromosome> <size>. */
+	int blockSize,		/* Number of items to bundle in r-tree.  1024 is good. */
+	int itemsPerSlot,	/* Number of items in lowest level of tree.  512 is good. */
+	boolean clipDontDie,	/* If TRUE then clip items off end of chrom rather than dying. */
+	boolean compress,	/* If TRUE then compress data. */
+	char *outName);
+/* Convert ascii format wig file (in fixedStep, variableStep or bedGraph format) 
+ * to binary big wig format. */
+
+struct bbiFile *bigWigFileOpen(char *fileName);
+/* Open up big wig file.   Free this up with bbiFileClose */
+
+#define bigWigFileClose(a) bbiFileClose(a)
+
+struct bbiInterval *bigWigIntervalQuery(struct bbiFile *bwf, char *chrom, bits32 start, bits32 end,
+	struct lm *lm);
+/* Get data for interval.  Return list allocated out of lm. */
+
+int bigWigIntervalDump(struct bbiFile *bwf, char *chrom, bits32 start, bits32 end, int maxCount,
+	FILE *out);
+/* Print out info on bigWig parts that intersect chrom:start-end.   Set maxCount to 0 if you 
+ * don't care how many are printed.  Returns number printed. */
+
+boolean bigWigSummaryArray(struct bbiFile *bwf, char *chrom, bits32 start, bits32 end,
+	enum bbiSummaryType summaryType, int summarySize, double *summaryValues);
+/* Fill in summaryValues with  data from indicated chromosome range in bigWig file.
+ * Be sure to initialize summaryValues to a default value, which will not be touched
+ * for regions without data in file.  (Generally you want the default value to either
+ * be 0.0 or nan(0) depending on the application.)  Returns FALSE if no data
+ * at that position. */
+
+boolean bigWigSummaryArrayExtended(struct bbiFile *bwf, char *chrom, bits32 start, bits32 end,
+	int summarySize, struct bbiSummaryElement *summary);
+/* Get extended summary information for summarySize evenely spaced elements into
+ * the summary array. */
+
+double bigWigSingleSummary(struct bbiFile *bwf, char *chrom, int start, int end,
+    enum bbiSummaryType summaryType, double defaultVal);
+/* Return the summarized single value for a range. */
+
+boolean isBigWig(char *fileName);
+/* Peak at a file to see if it's bigWig */
+
+boolean bigWigFileCheckSigs(char *fileName);
+/* check file signatures at beginning and end of file */
+
+/* bigWigValsOnChrom - a little system for optimizing bigWig use when doing a pass over the
+ * whole chromosome.   How it is used typically is:
+ *      struct bigWigValsOnChrom *chromVals = bigWigValsOnChromNew();
+ *      for (chrom = chromList; chrom != NULL; chrom = chrom->next)
+ *          {
+ *          if (bigWigValsOnChromFetchData(chromVals, chrom->name, bigWig))
+ *              // do stuff using the valBuf, or covBuf fields which have
+ *              // the big wig data unpacked into them. Can use chromSize and chrom too 
+ *          }
+ *       bigWigValsOnChromFree(&chromVals);  */
+
+struct bigWigValsOnChrom
+/* Object for bulk access a chromosome at a time.  This is faster than
+ * doing bigWigInterval queries when you have ~3000 or more queries. */
+     {
+     struct bigWigValsOnChrom *next;
+     char *chrom;	/* Current chromosome. */
+     long chromSize;	/* Size of current chromosome. */
+     long bufSize;	/* Size of allocated buffer */
+     double *valBuf;	/* A value for each base on chrom. Zero where no data. */
+     Bits *covBuf;	/* A bit for each base with data. */
+     };
+
+struct bigWigValsOnChrom *bigWigValsOnChromNew();
+/* Allocate new empty bigWigValsOnChromStructure. */
+
+void bigWigValsOnChromFree(struct bigWigValsOnChrom **pChromVals);
+/* Free up bigWigValsOnChrom */
+
+boolean bigWigValsOnChromFetchData(struct bigWigValsOnChrom *chromVals, char *chrom, 
+	struct bbiFile *bigWig);
+/* Fetch data for chromosome from bigWig. Returns FALSE if not data on that chrom. */
+
+#endif /* BIGWIG_H */
+
diff --git a/gbtools/src/include/blatSrc/binRange.h b/gbtools/src/include/blatSrc/binRange.h
new file mode 100644
index 0000000..4727dc7
--- /dev/null
+++ b/gbtools/src/include/blatSrc/binRange.h
@@ -0,0 +1,120 @@
+#ifndef BINRANGE_H
+#define BINRANGE_H
+
+/* binRange Stuff to handle binning - which helps us restrict 
+ * our attention to the parts of database that contain info
+ * about a particular window on a chromosome. This scheme
+ * will work without modification for chromosome sizes up
+ * to half a gigaBase.  The finest sized bin is 128k (1<<17).
+ * The next coarsest is 8x as big (1<<13).  There's a hierarchy
+ * of bins with the chromosome itself being the final bin.
+ * Features are put in the finest bin they'll fit in. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#define BINRANGE_MAXEND_512M (512*1024*1024)
+#define _binOffsetOldToExtended  4681
+
+int binLevelsExtended();
+/* Return number of levels to bins. */
+
+int binLevels();
+/* Return number of levels to bins. */
+
+int binFirstShift();
+/* Return amount to shift a number to get to finest bin. */
+
+int binNextShift();
+/* Return amount to shift a number to get to next coarser bin. */
+
+int binOffsetExtended(int level);
+/* Return offset for bins of a given level. */
+
+int binOffset(int level);
+/* Return offset for bins of a given level. */
+
+/*****  And now for some higher level stuff - useful for binning
+ *****  things in memory. ******/
+
+int binFromRange(int start, int end);
+/* Given start,end in chromosome coordinates assign it
+ * a bin.   There's a bin for each 128k segment, for each
+ * 1M segment, for each 8M segment, for each 64M segment,
+ * and for each chromosome (which is assumed to be less than
+ * 512M.)  A range goes into the smallest bin it will fit in. */
+
+struct binElement
+/* An element in a bin. */
+    {
+    struct binElement *next;
+    int start, end;		/* 0 based, half open range */
+    void *val;			/* Actual bin item. */
+    };
+
+int binElementCmpStart(const void *va, const void *vb);
+/* Compare to sort based on start. */
+
+struct binKeeper
+/* This keeps things in bins in memory */
+    {
+    struct binKeeper *next;
+    int minPos;		/* Minimum position to bin. */
+    int maxPos;		/* Maximum position to bin. */
+    int binCount;	/* Count of bins. */
+    struct binElement **binLists; /* A list for each bin. */
+    };
+
+struct binKeeperCookie
+/* used by binKeeperFirst/binKeeperNext in tracking location in traversing bins */
+    {
+    struct binKeeper *bk;       /* binKeeper we are associated with */
+    int blIdx;                  /* current bin list index */
+    struct binElement *nextBel; /* next binElement */
+    };
+
+struct binKeeper *binKeeperNew(int minPos, int maxPos);
+/* Create new binKeeper that can cover range. */
+
+void binKeeperFree(struct binKeeper **pBk);
+/* Free up a bin keeper. */
+
+void binKeeperAdd(struct binKeeper *bk, int start, int end, void *val);
+/* Add item to binKeeper. */ 
+
+void binKeeperRemove(struct binKeeper *bk, int start, int end, void *val);
+/* Remove item from binKeeper. */ 
+
+struct binElement *binKeeperFind(struct binKeeper *bk, int start, int end);
+/* Return a list of all items in binKeeper that intersect range.
+ * Free this list with slFreeList. */
+
+struct binElement *binKeeperFindSorted(struct binKeeper *bk, int start, int end);
+/* Like binKeeperFind, but sort list on start coordinates. */
+
+struct binElement *binKeeperFindAll(struct binKeeper *bk);
+/* Get all elements sorted. */
+
+boolean binKeeperAnyOverlap(struct binKeeper *bk, int start, int end);
+/* Return TRUE if start/end overlaps with any items in binKeeper. */
+
+void binKeeperReplaceVal(struct binKeeper *bk, int start, int end,
+	void *oldVal, void *newVal);
+/* Replace occurences of old val in range from start->end with newVal */
+
+struct binElement *binKeeperFindLowest(struct binKeeper *bk, int start, int end);
+/* Find the lowest overlapping range. Quick even if search range large */
+
+void binKeeperRemove(struct binKeeper *bk, int start, int end, void *val);
+/* Remove item from binKeeper. */ 
+
+struct binKeeperCookie binKeeperFirst(struct binKeeper *bk);
+/* Return an object to use by binKeeperNext() to traverse the binElements.
+ * The first call to binKeeperNext() will return the first entry in the
+ * table. */
+
+struct binElement* binKeeperNext(struct binKeeperCookie *cookie);
+/* Return the next entry in the binKeeper table.  */
+
+#endif /* BINRANGE_H */
+
diff --git a/gbtools/src/include/blatSrc/bits.h b/gbtools/src/include/blatSrc/bits.h
new file mode 100644
index 0000000..fea9323
--- /dev/null
+++ b/gbtools/src/include/blatSrc/bits.h
@@ -0,0 +1,108 @@
+/* bits - handle operations on arrays of bits. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#ifndef BITS_H
+#define BITS_H
+
+#include "localmem.h"
+
+typedef unsigned char Bits;
+
+#define bitToByteSize(bitSize) ((bitSize+7)/8)
+/* Convert number of bits to number of bytes needed to store bits. */
+
+Bits *bitAlloc(int bitCount);
+/* Allocate bits. */
+
+Bits *bitRealloc(Bits *b, int bitCount, int newBitCount);
+/* Resize a bit array.  If b is null, allocate a new array */
+
+Bits *bitClone(Bits* orig, int bitCount);
+/* Clone bits. */
+
+void bitFree(Bits **pB);
+/* Free bits. */
+
+Bits *lmBitAlloc(struct lm *lm,int bitCount);
+// Allocate bits.  Must supply local memory.
+
+Bits *lmBitRealloc(struct lm *lm, Bits *b, int bitCount, int newBitCount);
+// Resize a bit array.  If b is null, allocate a new array.  Must supply local memory.
+
+Bits *lmBitClone(struct lm *lm, Bits* orig, int bitCount);
+// Clone bits.  Must supply local memory.
+
+void bitSetOne(Bits *b, int bitIx);
+/* Set a single bit. */
+
+void bitClearOne(Bits *b, int bitIx);
+/* Clear a single bit. */
+
+void bitSetRange(Bits *b, int startIx, int bitCount);
+/* Set a range of bits. */
+
+boolean bitReadOne(Bits *b, int bitIx);
+/* Read a single bit. */
+
+int bitCountRange(Bits *b, int startIx, int bitCount);
+/* Count number of bits set in range. */
+
+int bitFindSet(Bits *b, int startIx, int bitCount);
+/* Find the index of the the next set bit. */
+
+int bitFindClear(Bits *b, int startIx, int bitCount);
+/* Find the index of the the next clear bit. */
+
+void bitClear(Bits *b, int bitCount);
+/* Clear many bits (possibly up to 7 beyond bitCount). */
+
+void bitClearRange(Bits *b, int startIx, int bitCount);
+/* Clear a range of bits. */
+
+void bitAnd(Bits *a, Bits *b, int bitCount);
+/* And two bitmaps.  Put result in a. */
+
+int bitAndCount(Bits *a, Bits *b, int bitCount);
+// Without altering 2 bitmaps, count the AND bits.
+
+void bitOr(Bits *a, Bits *b, int bitCount);
+/* Or two bitmaps.  Put result in a. */
+
+int bitOrCount(Bits *a, Bits *b, int bitCount);
+// Without altering 2 bitmaps, count the OR'd bits.
+
+void bitXor(Bits *a, Bits *b, int bitCount);
+/* Xor two bitmaps.  Put result in a. */
+
+int bitXorCount(Bits *a, Bits *b, int bitCount);
+// Without altering 2 bitmaps, count the XOR'd bits.
+
+void bitNot(Bits *a, int bitCount);
+/* Flip all bits in a. */
+
+void bitReverseRange(Bits *bits, int startIx, int bitCount);
+// Reverses bits in range (e.g. 110010 becomes 010011)
+
+void bitPrint(Bits *a, int startIx, int bitCount, FILE* out);
+/* Print part or all of bit map as a string of 0s and 1s.  Mostly useful for
+ * debugging */
+
+void bitsOut(FILE* out, Bits *bits, int startIx, int bitCount, boolean onlyOnes);
+// Print part or all of bit map as a string of 0s and 1s.
+// If onlyOnes, enclose result in [] and use ' ' instead of '0'.
+
+Bits *bitsIn(struct lm *lm,char *bitString, int len);
+// Returns a bitmap from a string of 1s and 0s.  Any non-zero, non-blank char sets a bit.
+// Returned bitmap is the size of len even if that is longer than the string.
+// Optionally supply local memory.  Note does NOT handle enclosing []s printed with bitsOut().
+
+extern int bitsInByte[256];
+/* Lookup table for how many bits are set in a byte. */
+
+void bitsInByteInit();
+/* Initialize bitsInByte array. */
+
+#endif /* BITS_H */
+
diff --git a/gbtools/src/include/blatSrc/blastParse.h b/gbtools/src/include/blatSrc/blastParse.h
new file mode 100644
index 0000000..c6d87a8
--- /dev/null
+++ b/gbtools/src/include/blatSrc/blastParse.h
@@ -0,0 +1,116 @@
+/* blastParse - read in blast output into C data structure. */
+
+#ifndef BLASTPARSE_H
+#define BLASTPARSE_H
+
+struct blastFile
+/* All the info in a single file. */
+    {
+    struct blastFile *next;
+    char *fileName;			/* Name of file this is in. */
+    char *program;                      /* Blastp, blastx, blastn, etc. */
+    char *version;                      /* Version of program. */
+    char *buildDate;                    /* Build date of program. */
+    struct lineFile *lf;                /* File blast is in. */
+    struct blastQuery *queries;         /* List of queries. */
+    };
+
+struct blastQuery
+/* Info on one query. */
+    {
+    struct blastQuery *next;
+    char *query;                        /* Name of query sequence. */
+    int queryBaseCount;                 /* Number of bases in query. */
+    char *database;                     /* Name of database. */
+    int dbSeqCount;                     /* Number of sequences in database. */
+    int dbBaseCount;                    /* Number of bases in database. */
+    int psiRounds;                      /* PSI BLAST rounds, or 0 if not PSI blast */
+    struct blastGappedAli *gapped;      /* List of gapped alignments. */
+    };
+
+struct blastGappedAli
+/* Info about a gapped alignment. */
+    {
+    struct blastGappedAli *next;
+    struct blastQuery *query;           /* Query associated with this alignment (not owned here). */
+    int psiRound;                       /* PSI BLAST round, or 0 if not PSI blast */
+    char *targetName;                   /* Name of target sequence. */
+    int targetSize;                     /* Size of target sequence. */
+    struct blastBlock *blocks;          /* List of aligning blocks (no big gaps). */
+    };
+
+struct blastBlock
+/* Info about a single block of gapped alignment. */
+    {
+    struct blastBlock *next;
+    struct blastGappedAli *gappedAli;   /* gapped ali associated with block */
+    double bitScore;                    /* About 2 bits per aligning nucleotide. */
+    double eVal;                        /* Expected number of alignments in database. */
+    int matchCount;                     /* Number of matching nucleotides. */
+    int totalCount;                     /* Total number of nucleotides. */
+    int insertCount;                    /* Number of inserts. */
+    BYTE qStrand;                       /* Query strand (+1 or -1) */
+    BYTE tStrand;                       /* Target strand (+1 or -1) */
+    BYTE qFrame;                        /* Frames for tblastn, +/- 1, 2, 3, or */
+    BYTE tFrame;                        /* 0 if none. */
+    int qStart;                         /* Query start position. [0..n) */
+    int tStart;                         /* Target start position. [0..n) */
+    int qEnd;                           /* Query end position. */
+    int tEnd;                           /* Target end position. */
+    char *qSym;                         /* Query letters (including '-') */
+    char *tSym;                         /* Target letters (including '-') */
+    };
+
+struct blastFile *blastFileReadAll(char *fileName);
+/* Read all blast alignment in file. */
+
+struct blastFile *blastFileOpenVerify(char *fileName);
+/* Open file, read and verify header. */
+
+struct blastQuery *blastFileNextQuery(struct blastFile *bf);
+/* Read all alignments associated with next query.  Return NULL at EOF. */
+
+struct blastGappedAli *blastFileNextGapped(struct blastFile *bf, struct blastQuery *bq);
+/* Read in next gapped alignment.   Does *not* put it on bf->gapped list. 
+ * Return NULL at EOF or end of query. */
+
+struct blastBlock *blastFileNextBlock(struct blastFile *bf, 
+	struct blastQuery *bq, struct blastGappedAli *bga);
+/* Read in next blast block.  Return NULL at EOF or end of
+ * gapped alignment. */
+
+void blastFileFree(struct blastFile **pBf);
+/* Free blast file. */
+
+void blastFileFreeList(struct blastFile **pList);
+/* Free list of blast files. */
+
+void blastQueryFree(struct blastQuery **pBq);
+/* Free single blastQuery. */
+
+void blastQueryFreeList(struct blastQuery **pList);
+/* Free list of blastQuery's. */
+
+void blastGappedAliFree(struct blastGappedAli **pBga);
+/* Free blastGappedAli. */
+
+void blastGappedAliFreeList(struct blastGappedAli **pList);
+/* Free blastGappedAli list. */
+
+void blastBlockFree(struct blastBlock **pBb);
+/* Free a single blastBlock. */
+
+void blastBlockFreeList(struct blastBlock **pList);
+/* Free a list of blastBlocks. */
+
+void blastBlockPrint(struct blastBlock* bb, FILE* out);
+/* print a BLAST block for debugging purposes  */
+
+void blastGappedAliPrint(struct blastGappedAli* ba, FILE* out);
+/* print a BLAST gapped alignment for debugging purposes  */
+
+void blastQueryPrint(struct blastQuery *bq, FILE* out);
+/* print a BLAST query for debugging purposes  */
+
+#endif /* BLASTPARSE_H */
+
diff --git a/gbtools/src/include/blatSrc/boxClump.h b/gbtools/src/include/blatSrc/boxClump.h
new file mode 100644
index 0000000..93d0c7e
--- /dev/null
+++ b/gbtools/src/include/blatSrc/boxClump.h
@@ -0,0 +1,41 @@
+/* boxClump - put together 2 dimensional boxes that
+ * overlap with each other into clumps. */
+
+#ifndef BOXCLUMP_H
+#define BOXCLUMP_H
+
+struct boxIn
+/* Input to box clumper. */
+    {
+    struct boxIn *next;		 /* Next in list. */
+    void *data;			 /* Some user-associated data. */
+    int qStart, qEnd;		 /* Range covered in query. */
+    int tStart, tEnd;		 /* Range covered in target. */
+    };
+
+struct boxClump
+/* Output of box clumper. */
+    {
+    struct boxClump *next;	 /* Next in list. */
+    struct boxIn *boxList;	 /* List of boxes in this clump. */
+    int boxCount;		 /* Count of boxes in this clump. */
+    int qStart, qEnd;		 /* Expanse of clump in query. */
+    int tStart, tEnd;		 /* Expanse of clump in target. */
+    };
+
+void boxClumpFree(struct boxClump **pClump);
+/* Free boxClump. */
+
+void boxClumpFreeList(struct boxClump **pList);
+/* Free list of boxClumps. */
+
+int boxClumpCmpCount(const void *va, const void *vb);
+/* Compare to sort based on count of boxes. */
+
+struct boxClump *boxFindClumps(struct boxIn **pBoxList);
+/* Convert list of boxes to a list of clumps.  Clumps
+ * are collections of boxes that overlap.  Note that
+ * the original boxList is overwritten as the boxes
+ * are moved from it to the clumps. */
+
+#endif /* BOXCLUMP_H */
diff --git a/gbtools/src/include/blatSrc/boxLump.h b/gbtools/src/include/blatSrc/boxLump.h
new file mode 100644
index 0000000..55d5ae9
--- /dev/null
+++ b/gbtools/src/include/blatSrc/boxLump.h
@@ -0,0 +1,25 @@
+/* boxLump - This will lump together boxes that overlap into the smallest
+ * box that encompasses the overlap.  It will put other boxes that 
+ * fit in the encompassing box in there too. 
+ *   It works by projecting the box list along one dimension at a
+ * time looking for gaps between boxes. This is similar in function
+ * to boxFindClumps, but a bit less precise, and quite a bit faster.
+ * in some important cases. */
+
+#ifndef BOXLUMP_H
+#define BOXLUMP_H
+
+#ifndef BOXCLUMP_H
+#include "boxClump.h"
+#endif
+
+struct boxClump *boxLump(struct boxIn **pBoxList);
+/* Convert list of boxes to a list of lumps.  The lumps
+ * are a smaller number of boxes that between them contain
+ * all of the input boxes.  Note that
+ * the original boxList is overwritten as the boxes
+ * are moved from it to the lumps. */
+
+#endif /* BOXLUMP_H */
+
+
diff --git a/gbtools/src/include/blatSrc/bwgInternal.h b/gbtools/src/include/blatSrc/bwgInternal.h
new file mode 100644
index 0000000..d32a475
--- /dev/null
+++ b/gbtools/src/include/blatSrc/bwgInternal.h
@@ -0,0 +1,119 @@
+/* bwgInternal - stuff to create and use bigWig files.  Generally you'll want to use the
+ * simpler interfaces in the bigWig module instead.  This file is good reading though
+ * if you want to extend the bigWig interface, or work with bigWig files directly
+ * without going through the Kent library. */
+
+#ifndef BIGWIGFILE_H
+#define BIGWIGFILE_H
+
+enum bwgSectionType 
+/* Code to indicate section type. */
+    {
+    bwgTypeBedGraph=1,
+    bwgTypeVariableStep=2,
+    bwgTypeFixedStep=3,
+    };
+
+struct bwgBedGraphItem
+/* An bedGraph-type item in a bwgSection. */
+    {
+    struct bwgBedGraphItem *next;	/* Next in list. */
+    bits32 start,end;		/* Range of chromosome covered. */
+    float val;			/* Value. */
+    };
+
+struct bwgVariableStepItem
+/* An variableStep type item in a bwgSection. */
+    {
+    struct bwgVariableStepItem *next;	/* Next in list. */
+    bits32 start;		/* Start position in chromosome. */
+    float val;			/* Value. */
+    };
+
+struct bwgVariableStepPacked
+/* An variableStep type item in a bwgSection. */
+    {
+    bits32 start;		/* Start position in chromosome. */
+    float val;			/* Value. */
+    };
+
+struct bwgFixedStepItem
+/* An fixedStep type item in a bwgSection. */
+    {
+    struct bwgFixedStepItem *next;	/* Next in list. */
+    float val;			/* Value. */
+    };
+
+struct bwgFixedStepPacked
+/* An fixedStep type item in a bwgSection. */
+    {
+    float val;			/* Value. */
+    };
+
+union bwgItem
+/* Union of item pointers for all possible section types. */
+    {
+    struct bwgBedGraphItem *bedGraphList;		/* A linked list */
+    struct bwgFixedStepPacked *fixedStepPacked;		/* An array */
+    struct bwgVariableStepPacked *variableStepPacked;	/* An array */
+    /* No packed format for bedGraph... */
+    };
+
+struct bwgSection
+/* A section of a bigWig file - all on same chrom.  This is a somewhat fat data
+ * structure used by the bigWig creation code.  See also bwgSection for the
+ * structure returned by the bigWig reading code. */
+    {
+    struct bwgSection *next;		/* Next in list. */
+    char *chrom;			/* Chromosome name. */
+    bits32 start,end;			/* Range of chromosome covered. */
+    enum bwgSectionType type;
+    union bwgItem items;		/* List/array of items in this section. */
+    bits32 itemStep;			/* Step within item if applicable. */
+    bits32 itemSpan;			/* Item span if applicable. */
+    bits16 itemCount;			/* Number of items in section. */
+    bits32 chromId;			/* Unique small integer value for chromosome. */
+    bits64 fileOffset;			/* Offset of section in file. */
+    };
+
+struct bwgSectionHead
+/* A header from a bigWig file section - similar to above bug what is on disk. */
+    {
+    bits32 chromId;	/* Chromosome short identifier. */
+    bits32 start,end;	/* Range covered. */
+    bits32 itemStep;	/* For some section types, the # of bases between items. */
+    bits32 itemSpan;	/* For some section types, the # of bases in each item. */
+    UBYTE type;		/* Type byte. */
+    UBYTE reserved;	/* Always zero for now. */
+    bits16 itemCount;	/* Number of items in block. */
+    };
+
+void bwgSectionHeadFromMem(char **pPt, struct bwgSectionHead *head, boolean isSwapped);
+/* Read section header. */
+
+
+int bwgSectionCmp(const void *va, const void *vb);
+/* Compare to sort based on chrom,start,end.  */
+
+struct bwgSection *bwgParseWig(
+	char *fileName,       /* Name of ascii wig file. */
+	boolean clipDontDie,  /* Skip items outside chromosome rather than aborting. */
+	struct hash *chromSizeHash,  /* If non-NULL items checked to be inside chromosome. */
+	int maxSectionSize,   /* Biggest size of a section.  100 - 100,000 is usual range. */
+	struct lm *lm);	      /* Memory pool to allocate from. */
+/* Parse out ascii wig file - allocating memory in lm. */
+
+int bwgAverageResolution(struct bwgSection *sectionList);
+/* Return the average resolution seen in sectionList. */
+
+struct bbiSummary *bwgReduceSectionList(struct bwgSection *sectionList, 
+	struct bbiChromInfo *chromInfoArray, int reduction);
+/* Return summary of section list reduced by given amount. */
+
+void bwgCreate(struct bwgSection *sectionList, struct hash *chromSizeHash, 
+	int blockSize, int itemsPerSlot, boolean doCompress, boolean keepAllChromosomes,
+        boolean fixedSummaries, char *fileName);
+/* Create a bigWig file out of a sorted sectionList.  A lower level routine
+ * than the one above. */
+
+#endif /* BIGWIGFILE_H */
diff --git a/gbtools/src/include/blatSrc/cda.h b/gbtools/src/include/blatSrc/cda.h
new file mode 100644
index 0000000..049c1f0
--- /dev/null
+++ b/gbtools/src/include/blatSrc/cda.h
@@ -0,0 +1,104 @@
+/*****************************************************************************
+ * Copyright (C) 2000 Jim Kent.  This source code may be freely used         *
+ * for personal, academic, and non-profit purposes.  Commercial use          *
+ * permitted only by explicit agreement with Jim Kent (jim_kent at pacbell.net) *
+ *****************************************************************************/
+/* cda.h - cDNA Alignment structure.  This stores all the info except
+ * the bases themselves on an cDNA alignment. */
+
+#ifndef CDA_H
+#define CDA_H
+
+#ifndef MEMGFX_H
+#include "memgfx.h"
+#endif 
+
+#ifndef FUZZYFIND_H
+#include "fuzzyFind.h"
+#endif
+
+struct cdaBlock
+    {
+    int nStart, nEnd;           /* Start and end position in cDNA. */
+    int hStart, hEnd;           /* Start and end position on chromosome. */
+    UBYTE startGood, endGood;   /* Number of bases matching perfectly on end */
+    UBYTE midScore;             /* 0-255  255 is perfect. */
+    };
+
+struct cdaAli
+    {
+    struct cdaAli *next;
+    char *name;
+    int baseCount;
+    short milliScore;               /* Score 0-1000 */
+    bits16 chromIx;                 /* On disk as just a UBYTE */
+    char strand;                    /* Strand of chromosome cDNA aligns with + or - */
+    char direction;                 /* Direction of cDNA relative to transcription + or - */
+    UBYTE isEmbryonic;
+    UBYTE hasIntrons;
+    int orientation;                /* +1 or -1 depending on whether *clone* is + or - WRT chrom . */
+                                    /* New and perhaps not always respected. */
+    int chromStart, chromEnd;
+    short blockCount;               /* Number of blocks. */
+    struct cdaBlock *blocks;        /* Dynamically allocated array. */
+    };
+
+boolean cdaCloneIsReverse(struct cdaAli *cda);
+/* Returns TRUE if clone (.3/.5 pair) aligns on reverse strand. */
+
+char cdaCloneStrand(struct cdaAli *cda);
+/* Return '+' or '-' depending on the strand that clone (.3/.5 pair) aligns on. */
+
+char cdaDirChar(struct cdaAli *cda, char chromStrand);
+/* Return '>' or '<' or ' ' depending whether cDNA is going same, opposite, or
+ * unknown alignment as the chromosome strand. */
+
+char *cdaLoadString(FILE *f);
+/* Load in a string from CDA file. */
+
+void cdaReadBlock(FILE *f, struct cdaBlock *block);
+/* Read one block from cda file. */
+
+FILE *cdaOpenVerify(char *fileName);
+/* Call this to open file and verify signature, then call cdaLoadOne
+ * which returns NULL at EOF. This file type is created by binGood.exe. */
+
+struct cdaAli *cdaLoadOne(FILE *f);
+/* Load one cdaAli from file.  Assumes file pointer is correctly positioned.
+ * either by cdaOpenVerify or a previous cdaLoadOne.  Returns NULL at EOF. */
+
+void cdaFixChromStartEnd(struct cdaAli *cda);
+/* Loop through blocks and figure out and fill in chromStart
+ * and chromEnd. */
+
+void cdaCoalesceBlocks(struct cdaAli *ca);
+/* Coalesce blocks separated by small amounts of noise. */
+
+void cdaCoalesceFast(struct cdaAli *ca);
+/* Coalesce blocks as above, but don't update the score. */
+
+void cdaShowAlignmentTrack(struct memGfx *mg, 
+    int xOff, int yOff, int width, int height,  Color goodColor, Color badColor,
+    int dnaSize, int dnaOffset, struct cdaAli *cda, char repeatChar);
+/* Draw alignment on a horizontal track of picture. */
+
+void cdaRcOne(struct cdaAli *cda, int dnaStart, int baseCount);
+/* Reverse complement one cda. DnaStart is typically display window start. */
+
+void cdaRcList(struct cdaAli *cdaList, int dnaStart, int baseCount);
+/* Reverse complement cda list. */
+
+void cdaFreeAli(struct cdaAli *ca);
+/* Free a single cdaAli. */
+
+void cdaFreeAliList(struct cdaAli **pList);
+/* Free list of cdaAli. */
+
+struct cdaAli *cdaAliFromFfAli(struct ffAli *aliList, 
+    DNA *needle, int needleSize, DNA *hay, int haySize, boolean isRc);
+/* Convert from ffAli to cdaAli format. */
+
+void cdaWrite(char *fileName, struct cdaAli *cdaList);
+/* Write out a cdaList to a cda file. */
+
+#endif /* CDA_H */
diff --git a/gbtools/src/include/blatSrc/cgi_build_rules.mk b/gbtools/src/include/blatSrc/cgi_build_rules.mk
new file mode 100644
index 0000000..0bcc251
--- /dev/null
+++ b/gbtools/src/include/blatSrc/cgi_build_rules.mk
@@ -0,0 +1,48 @@
+#	Common set of build rules for CGI binaries
+
+ifeq (${CGI_BIN_USER},)
+    CGI_BIN_USER=${CGI_BIN}-${USER}
+endif
+
+ifeq (${CGI_BIN_BETA},)
+    CGI_BIN_BETA=${CGI_BIN}-beta
+endif
+
+my:: compile
+	chmod a+rx $A${EXE}
+	rm -f ${CGI_BIN_USER}/$A
+	mv $A${EXE} ${CGI_BIN_USER}/$A
+
+alpha:: strip
+	rm -f ${CGI_BIN}/$A
+	mv $A${EXE} ${CGI_BIN}/$A
+
+beta:: strip
+	rm -f ${CGI_BIN_BETA}/$A
+	mv $A${EXE} ${CGI_BIN_BETA}/$A
+
+# don't actually strip so we can get stack traces
+strip::  compile
+	chmod g+w $A${EXE}
+	chmod a+rx $A${EXE}
+
+install::  strip
+	@if [ ! -d "${DESTDIR}${CGI_BIN}" ]; then \
+		${MKDIR} "${DESTDIR}${CGI_BIN}"; \
+	fi
+	rm -f ${DESTDIR}${CGI_BIN}/$A
+	mv $A${EXE} ${DESTDIR}${CGI_BIN}/$A
+
+debug:: $O
+	${CC} ${COPT} ${CFLAGS} $O ${MYLIBS} ${L}
+	rm -f $A${EXE}
+	mv ${AOUT} $A${EXE}
+
+lib::
+	cd ../../lib; make
+
+clean::
+	rm -f $O $A${EXE}
+
+tags::
+	ctags *.h *.c ../lib/*.c ../inc/*.h ../../lib/*.c ../../inc/*.h
diff --git a/gbtools/src/include/blatSrc/chain.h b/gbtools/src/include/blatSrc/chain.h
new file mode 100644
index 0000000..6be0f2a
--- /dev/null
+++ b/gbtools/src/include/blatSrc/chain.h
@@ -0,0 +1,163 @@
+/* chain - pairwise alignments that can include gaps in both
+ * sequences at once.  This is similar in many ways to psl,
+ * but more suitable to cross species genomic comparisons. */
+
+#ifndef CHAIN_H
+#define CHAIN_H
+
+#ifndef LINEFILE_H
+#include "linefile.h"
+#endif
+
+
+#ifndef BITS_H
+#include "bits.h"
+#endif
+
+struct cBlock
+/* A gapless part of a chain. */
+    {
+    struct cBlock *next;	/* Next in list. */
+    int tStart,tEnd;		/* Range covered in target. */
+    int qStart,qEnd;		/* Range covered in query. */
+    int score;	 	 	/* Score of block. */
+    void *data;			/* Some associated data pointer. */
+    };
+
+int cBlockCmpQuery(const void *va, const void *vb);
+/* Compare to sort based on query start. */
+
+int cBlockCmpTarget(const void *va, const void *vb);
+/* Compare to sort based on target start. */
+
+int cBlockCmpBoth(const void *va, const void *vb);
+/* Compare to sort based on query, then target. */
+
+int cBlockCmpDiagQuery(const void *va, const void *vb);
+/* Compare to sort based on diagonal, then query. */
+
+void cBlocksAddOffset(struct cBlock *blockList, int qOff, int tOff);
+/* Add offsets to block list. */
+
+struct cBlock *cBlocksFromAliSym(int symCount, char *qSym, char *tSym, 
+        int qPos, int tPos);
+/* Convert alignment from alignment symbol (bases and dashes) format 
+ * to a list of chain blocks.  The qPos and tPos correspond to the start
+ * in the query and target sequences of the first letter in  qSym and tSym. */
+
+struct chain
+/* A chain of blocks.  Used for output of chainBlocks. */
+    {
+    struct chain *next;	  	  /* Next in list. */
+    struct cBlock *blockList;      /* List of blocks. */
+    double score;	  	  /* Total score for chain. */
+    char *tName;		  /* target name, allocated here. */
+    int tSize;			  /* Overall size of target. */
+    /* tStrand always + */
+    int tStart,tEnd;		  /* Range covered in target. */
+    char *qName;		  /* query name, allocated here. */
+    int qSize;			  /* Overall size of query. */
+    char qStrand;		  /* Query strand. */
+    int qStart,qEnd;		  /* Range covered in query. */
+    int id;			  /* ID of chain in file. */
+    };
+
+void chainFree(struct chain **pChain);
+/* Free up a chain. */
+
+void chainFreeList(struct chain **pList);
+/* Free a list of dynamically allocated chain's */
+
+int chainCmpScore(const void *va, const void *vb);
+/* Compare to sort based on score. */
+
+int chainCmpScoreDesc(const void *va, const void *vb);
+/* Compare to sort based on score descending. */
+
+int chainCmpTarget(const void *va, const void *vb);
+/* Compare to sort based on target position. */
+
+int chainCmpQuery(const void *va, const void *vb);
+/* Compare to sort based on query chrom and start osition. */
+
+void chainWrite(struct chain *chain, FILE *f);
+/* Write out chain to file in dense format. */
+
+void chainWriteAll(struct chain *chainList, FILE *f);
+/* Write all chains to file. */
+
+void chainWriteLong(struct chain *chain, FILE *f);
+/* Write out chain to file in more verbose format. */
+
+void chainWriteHead(struct chain *chain, FILE *f);
+/* Write chain before block/insert list. */
+
+struct chain *chainRead(struct lineFile *lf);
+/* Read next chain from file.  Return NULL at EOF. 
+ * Note that chain block scores are not filled in by
+ * this. */
+
+struct chain *chainReadChainLine(struct lineFile *lf);
+/* Read line that starts with chain.  Allocate memory
+ * and fill in values.  However don't read link lines. */
+
+void chainReadBlocks(struct lineFile *lf, struct chain *chain);
+/* Read in chain blocks from file. */
+
+void chainIdReset();
+/* Reset chain id. */
+
+void chainIdNext(struct chain *chain);
+/* Add id to chain. */
+
+void chainSwap(struct chain *chain);
+/* Swap target and query side of chain. */
+
+struct hash *chainReadUsedSwap(char *fileName, boolean swapQ, Bits *bits);
+/* Read chains that are marked as used in the 
+ * bits array (which may be NULL) into a hash keyed by id. */
+
+struct hash *chainReadAllSwap(char *fileName, boolean swapQ);
+/* Read chains into a hash keyed by id. 
+ * Set swapQ to True to read chain by query. */
+    
+struct hash *chainReadAll(char *fileName);
+/* Read chains into a hash keyed by id. */
+    
+struct hash *chainReadAllWithMeta(char *fileName, FILE *f);
+/* Read chains into a hash keyed by id and outputs meta data */
+
+struct chain *chainFind(struct hash *hash, int id);
+/* Find chain in hash, return NULL if not found */
+
+struct chain *chainLookup(struct hash *hash, int id);
+/* Find chain in hash. */
+
+void chainSubsetOnT(struct chain *chain, int subStart, int subEnd, 
+    struct chain **retSubChain,  struct chain **retChainToFree);
+/* Get subchain of chain bounded by subStart-subEnd on 
+ * target side.  Return result in *retSubChain.  In some
+ * cases this may be the original chain, in which case
+ * *retChainToFree is NULL.  When done call chainFree on
+ * *retChainToFree.  The score and id fields are not really
+ * properly filled in. */
+
+void chainFastSubsetOnT(struct chain *chain, struct cBlock *firstBlock,
+	int subStart, int subEnd, struct chain **retSubChain,  struct chain **retChainToFree);
+/* Get subchain as in chainSubsetOnT. Pass in initial block that may
+ * be known from some index to speed things up. */
+
+void chainSubsetOnQ(struct chain *chain, int subStart, int subEnd, 
+    struct chain **retSubChain,  struct chain **retChainToFree);
+/* Get subchain of chain bounded by subStart-subEnd on 
+ * query side.  Return result in *retSubChain.  In some
+ * cases this may be the original chain, in which case
+ * *retChainToFree is NULL.  When done call chainFree on
+ * *retChainToFree.  The score and id fields are not really
+ * properly filled in. */
+
+void chainRangeQPlusStrand(struct chain *chain, int *retQs, int *retQe);
+/* Return range of bases covered by chain on q side on the plus
+ * strand. */
+
+#endif /* CHAIN_H */
diff --git a/gbtools/src/include/blatSrc/chainBlock.h b/gbtools/src/include/blatSrc/chainBlock.h
new file mode 100644
index 0000000..f9158de
--- /dev/null
+++ b/gbtools/src/include/blatSrc/chainBlock.h
@@ -0,0 +1,42 @@
+/* chainBlock - Chain together scored blocks from an alignment
+ * into scored chains.  Internally this uses a kd-tree and a
+ * varient of an algorithm suggested by Webb Miller and further
+ * developed by Jim Kent. */
+
+#ifndef CHAINBLOCK_H
+#define CHAINBLOCK_H
+
+#ifndef CHAIN_H
+#include "chain.h"
+#endif
+
+typedef int (*GapCost)(int dq, int dt, void *gapData);
+/* A function that returns gap cost (gaps can be in both dimensions
+ * at once!) */
+
+typedef int (*ConnectCost)(struct cBlock *a, struct cBlock *b, void *gapData);
+/* A function that returns gap cost as well as any penalty
+ * from a and b overlapping. */
+
+struct chain *chainBlocks(
+	char *qName, int qSize, char qStrand,	/* Info on query sequence */
+	char *tName, int tSize, 		/* Info on target. */
+	struct cBlock **pBlockList, 		/* Unordered ungapped alignments. */
+	ConnectCost connectCost, 		/* Calculate cost to connect nodes. */
+	GapCost gapCost, 			/* Cost for non-overlapping nodes. */
+	void *gapData, 				/* Passed through to connect/gapCosts */
+	FILE *details);				/* NULL except for debugging */
+/* Create list of chains from list of blocks.  The blockList will get
+ * eaten up as the blocks are moved from the list to the chain. 
+ * The list of chains returned is sorted by score. 
+ *
+ * The details FILE may be NULL, and is where additional information
+ * about the chaining is put.
+ *
+ * Note that the connectCost needs to adjust for possibly partially 
+ * overlapping blocks, and that these need to be taken out of the
+ * resulting chains in general.  This can get fairly complex.  Also
+ * the chains will need some cleanup at the end.  Use the chainConnect
+ * module to help with this.  See hg/mouseStuff/axtChain for example usage. */
+
+#endif /* CHAINBLOCK_H */
diff --git a/gbtools/src/include/blatSrc/chainConnect.h b/gbtools/src/include/blatSrc/chainConnect.h
new file mode 100644
index 0000000..0ee85d7
--- /dev/null
+++ b/gbtools/src/include/blatSrc/chainConnect.h
@@ -0,0 +1,60 @@
+/* chainConnect - Modules to figure out cost of connecting two blocks
+ * in a chain, and to help clean up overlapping blocks in a chain after
+ * main chainBlock call is done. */
+
+#ifndef CHAINCONNECT_H
+#define CHAINCONNECT_H
+
+struct chainConnect
+/* Structure to help figure out chain connection costs. */
+    {
+    struct dnaSeq *query;
+    struct dnaSeq *target;
+    struct axtScoreScheme *ss;
+    struct gapCalc *gapCalc;
+    };
+
+
+int chainConnectCost(struct cBlock *a, struct cBlock *b, 
+	struct chainConnect *cc);
+/* Calculate connection cost - including gap score
+ * and overlap adjustments if any. */
+
+int chainConnectGapCost(int dq, int dt, struct chainConnect *cc);
+/* Calculate cost of non-overlapping gap. */
+
+void chainRemovePartialOverlaps(struct chain *chain, 
+	struct dnaSeq *qSeq, struct dnaSeq *tSeq, int matrix[256][256]);
+/* If adjacent blocks overlap then find crossover points between them. */
+
+void chainMergeAbutting(struct chain *chain);
+/* Merge together blocks in a chain that abut each
+ * other exactly. */
+
+double chainScoreBlock(char *q, char *t, int size, int matrix[256][256]);
+/* Score block through matrix. */
+
+double chainCalcScore(struct chain *chain, struct axtScoreScheme *ss, 
+	struct gapCalc *gapCalc, struct dnaSeq *query, struct dnaSeq *target);
+/* Calculate chain score freshly. */
+
+double chainCalcScoreSubChain(struct chain *chain, struct axtScoreScheme *ss, 
+	struct gapCalc *gapCalc, struct dnaSeq *query, struct dnaSeq *target);
+/* Calculate chain score assuming query and target 
+   span the chained region rather than entire chrom. */
+
+void chainCalcBounds(struct chain *chain);
+/* Recalculate chain boundaries - setting qStart/qEnd/tStart/tEnd from
+ * a scan of blockList. */
+
+void cBlockFindCrossover(struct cBlock *left, struct cBlock *right,
+	struct dnaSeq *qSeq, struct dnaSeq *tSeq,  
+	int overlap, int matrix[256][256], int *retPos, int *retScoreAdjustment);
+/* Find ideal crossover point of overlapping blocks.  That is
+ * the point where we should start using the right block rather
+ * than the left block.  This point is an offset from the start
+ * of the overlapping region (which is the same as the start of the
+ * right block). */
+
+#endif /* CHAINCONNECT_H */
+
diff --git a/gbtools/src/include/blatSrc/chainToAxt.h b/gbtools/src/include/blatSrc/chainToAxt.h
new file mode 100644
index 0000000..3ac938b
--- /dev/null
+++ b/gbtools/src/include/blatSrc/chainToAxt.h
@@ -0,0 +1,15 @@
+/* chainToAxt - convert from chain to axt format. */
+
+#ifndef CHAINTOAXT_H
+#define CHAINTOAXT_H
+
+struct axt *chainToAxt(struct chain *chain, 
+	struct dnaSeq *qSeq, int qOffset,
+	struct dnaSeq *tSeq, int tOffset, int maxGap, int maxChain);
+/* Convert a chain to a list of axt's.  This will break
+ * where there is a double-sided gap in chain, or 
+ * where there is a single-sided gap greater than maxGap, or 
+ * where there is a chain longer than maxChain.
+ */
+
+#endif /* CHAINTOAXT_H */
diff --git a/gbtools/src/include/blatSrc/chainToPsl.h b/gbtools/src/include/blatSrc/chainToPsl.h
new file mode 100644
index 0000000..e5ed5b2
--- /dev/null
+++ b/gbtools/src/include/blatSrc/chainToPsl.h
@@ -0,0 +1,28 @@
+/* chainToPsl - convert between chains and psl.  Both of these
+ * are alignment formats that can handle gaps in both strands
+ * and do not include the sequence itself. */
+
+#ifndef CHAINTOPSL_H
+#define CHAINTOPSL_H
+
+#ifndef PSL_H
+#include "psl.h"
+#endif
+
+#ifndef CHAINBLOCK_H
+#include "chainBlock.h"
+#endif
+
+struct psl *chainToPsl(struct chain *chain);
+/* chainToPsl - convert chain to psl.  This does not fill in
+ * the match, repMatch, mismatch, and N fields since it needs
+ * the sequence for that.  It does fill in the rest though. */
+
+struct psl *chainToFullPsl(struct chain *chain, 
+	struct dnaSeq *query,   /* Forward query sequence. */
+	struct dnaSeq *rQuery,	/* Reverse complemented query sequence. */
+	struct dnaSeq *target);
+/* Convert chainList to pslList, filling in matches, N's etc. */
+
+#endif /* CHAINTOPSL_H */
+
diff --git a/gbtools/src/include/blatSrc/cheapcgi.h b/gbtools/src/include/blatSrc/cheapcgi.h
new file mode 100644
index 0000000..da6b102
--- /dev/null
+++ b/gbtools/src/include/blatSrc/cheapcgi.h
@@ -0,0 +1,564 @@
+/*****************************************************************************
+ * Copyright (C) 2000 Jim Kent.  This source code may be freely used         *
+ * for personal, academic, and non-profit purposes.  Commercial use          *
+ * permitted only by explicit agreement with Jim Kent (jim_kent at pacbell.net) *
+ *****************************************************************************/
+/* Cheapcgi.h - turns variables passed from the web form into
+ * something that C understands. */
+
+#ifndef CHEAPCGI_H
+#define CHEAPCGI_H
+
+#ifndef DYSTRING_H
+#include "dystring.h"
+#endif
+
+#ifndef HASH_H
+#include "hash.h"
+#endif
+
+#define COLOR_BG_DEFAULT         "#FFFEE8"
+#define COLOR_BG_ALTDEFAULT      "#FFF9D2"
+#define COLOR_BG_DEFAULT_DARKER  "#FCECC0"
+#define COLOR_BG_DEFAULT_DARKEST "#EED5B7"
+#define COLOR_BG_GHOST           "#EEEEEE"
+#define COLOR_BG_PALE            "#F8F8F8"
+#define COLOR_BG_HEADER_LTBLUE   "#D9E4F8"
+#define COLOR_DARKGREEN          "#008800"
+#define COLOR_LTGREEN            "#CCFFCC"
+#define COLOR_DARKBLUE           "#000088"
+#define COLOR_BLUE_BUTTON        "#91B3E6"
+#define COLOR_DARKGREY           "#666666"
+#define COLOR_LTGREY             "#CCCCCC"
+#define COLOR_YELLOW             "#FFFF00"
+#define COLOR_LTYELLOW           "#FFF380"
+#define COLOR_WHITE              "#FFFFFF"
+#define COLOR_RED                "#AA0000"
+#define COLOR_TRACKLIST_LEVEL1   COLOR_BG_DEFAULT
+#define COLOR_TRACKLIST_LEVEL2   COLOR_BG_ALTDEFAULT
+#define COLOR_TRACKLIST_LEVEL3   COLOR_BG_DEFAULT_DARKER
+#define COLOR_TRACKLIST_LEVEL4   COLOR_BG_DEFAULT_DARKEST
+
+void initSigHandlers(boolean dumpStack);
+/* set handler for various terminal signals for logging purposes.
+ * if dumpStack is TRUE, attempt to dump the stack. */
+
+struct cgiVar
+/* Info on one cgi variable. */
+    {
+    struct cgiVar *next;	/* Next in list. */
+    char *name;			/* Name - allocated in hash. */
+    char *val;  		/* Value - also not allocated here. */
+    boolean saved;		/* True if saved. */
+    };
+
+struct cgiVar* cgiVarList();
+/* return the list of cgiVar's */
+
+struct cgiDictionary
+/* Stuff to encapsulate parsed out CGI vars. */
+    {
+    struct cgiDictionary *next;	    /* Next in list if we have multiple */
+    char *stringData;		    /* Where values if cgi-vars live. */
+    struct hash *hash;		    /* Keyed by cgi-var name, value is cgiVar */
+    struct cgiVar *list;	    /* List of all vars. */
+    };
+
+void cgiDictionaryFree(struct cgiDictionary **pD);
+/* Free up resources associated with dictionary. */
+
+void cgiDictionaryFreeList(struct cgiDictionary **pList);
+/* Free up a whole list of cgiDictionaries */
+
+struct cgiDictionary *cgiDictionaryFromEncodedString(char *encodedString);
+/* Giving a this=that&this=that string,  return cgiDictionary parsed out from it. 
+ * This does *not* destroy input like the lower level cgiParse functions do. */
+
+char *findCookieData(char *varName);
+/* Get the string associated with varName from the cookie string. */
+
+void dumpCookieList();
+/* Print out the cookie list. */
+
+boolean cgiIsOnWeb();
+/* Return TRUE if looks like we're being run as a CGI. */
+
+char *cgiRequestMethod();
+/* Return CGI REQUEST_METHOD (such as 'GET/POST/PUT/DELETE/HEAD') */
+
+char *cgiRequestUri();
+/* Return CGI REQUEST_URI */
+
+char *cgiRequestContentLength();
+/* Return HTTP REQUEST CONTENT_LENGTH if available*/
+
+char *cgiScriptName();
+/* Return name of script so libs can do context-sensitive stuff. */
+
+char *cgiServerName();
+/* Return name of server, better to use cgiServerNamePort() for
+   actual URL construction */
+
+char *cgiServerPort();
+/* Return port number of server */
+
+char *cgiServerNamePort();
+/* Return name of server with port if different than 80 */
+
+boolean cgiServerHttpsIsOn();
+/* Return true if HTTPS is on */
+
+char *cgiAppendSForHttps();
+/* if running on https, add the letter s to the url protocol */
+
+char *cgiRemoteAddr();
+/* Return IP address of client (or "unknown"). */
+
+char *cgiUserAgent();
+/* Return remote user agent (HTTP_USER_AGENT) or NULL if remote user agent is not known */
+
+enum browserType
+/* How to look at a track. */
+    {
+    btUnknown=0, // Not yet known
+    btOpera=1,   // Opera
+    btIE=2,      // MS Internet Explorer
+    btFF=3,      // Firefox
+    btChrome=4,  // Google Chrome
+    btSafari=5,  // Safari
+    btOther=6    // Anything else
+    };
+
+enum osType
+/* How to look at a track. */
+    {
+    osUnknown=0, // Not yet known
+    osWindows=1, // The evil empire
+    osLinux=2,   // Workhorse
+    osMac=3,     // ashion or Religion
+    osOther=4    // Anything else
+    };
+
+enum browserType cgiClientBrowser(char **browserQualifier, enum osType *clientOs, 
+                                  char **clientOsQualifier);
+/* These routines abort the html output if the input isn't
+ * there or is misformatted. */
+#define cgiBrowser() cgiClientBrowser(NULL,NULL,NULL)
+
+char *cgiString(char *varName);
+int cgiInt(char *varName);
+double cgiDouble(char *varName);
+
+boolean cgiBoolean(char *varName);
+/* The cgiBoolean is a little problematic.  If the variable
+ * is TRUE it exists, but if it is false it is simply not
+ * defined.   cgiBoolean() thus returns FALSE if the CGI
+ * variable doesn't exist or if it is set to FALSE.  To
+ * work around this when need be use cgiBooleanDefined(),
+ * which relies on the fact that when we define a boolean
+ * variable we also define a hidden variable. */
+
+boolean cgiBooleanDefined(char *name);
+/* Return TRUE if boolean variable is defined (by
+ * checking for shadow). */
+
+char *cgiBooleanShadowPrefix();
+/* Prefix for shadow variable set with boolean variables. */
+
+void cgiMakeHiddenBoolean(char *name, boolean on);
+/* Make hidden boolean variable. Also make a shadow hidden variable so we
+ * can distinguish between variable not present and
+ * variable set to false. */
+
+char *cgiMultListShadowPrefix();
+/* Prefix for shadow variable set with multi-select inputs. */
+
+int cgiIntExp(char *varName);
+/* Evaluate an integer expression in varName and
+ * return value. */
+
+char *cgiOptionalString(char *varName);
+/* Return value of string if it exists in cgi environment, else NULL */
+
+char *cgiUsualString(char *varName, char *usual);
+/* Return value of string if it exists in cgi environment.
+ * Otherwiser return 'usual' */
+
+struct slName *cgiStringList(char *varName);
+/* Find list of cgi variables with given name.  This
+ * may be empty.  Free result with slFreeList(). */
+
+int cgiOptionalInt(char *varName, int defaultVal);
+/* This returns value of varName if it exists in cgi environment,
+ * otherwise it returns defaultVal. */
+
+double cgiOptionalDouble(char *varName, double defaultVal);
+/* Returns double value. */
+
+#define cgiUsualInt cgiOptionalInt
+#define cgiUsualDouble cgiOptionalDouble
+
+struct cgiChoice
+/* Choice table */
+    {
+    char *name;
+    int value;
+    };
+
+int cgiOneChoice(char *varName, struct cgiChoice *choices, int choiceSize);
+/* Returns value associated with string variable in choice table. */
+
+boolean cgiVarExists(char *varName);
+/* Returns TRUE if the variable was passed in. */
+
+void cgiBadVar(char *varName);
+/* Complain about a variable that's not there. */
+
+void cgiDecode(char *in, char *out, int inLength);
+/* Decode from cgi pluses-for-spaces format to normal.
+ * Out will be a little shorter than in typically. */
+
+void cgiDecodeFull(char *in, char *out, int inLength);
+/* Out will be a cgi-decoded version of in (no space from plus!).
+ * Out will be a little shorter than in typically, and
+ * can be the same buffer. */
+
+char *cgiEncode(char *inString);
+/* Return a cgi-encoded version of inString.
+ * Alphanumerics kept as is, space translated to plus,
+ * and all other characters translated to %hexVal.
+ * You can free return value with freeMem(). */
+
+char *cgiEncodeFull(char *inString);
+/* Return a cgi-encoded version of inString (no + for space!).
+ * Alphanumerics/./_ kept as is and all other characters translated to
+ * %hexVal. */
+
+void cgiMakeButtonWithMsg(char *name, char *value, char *msg);
+/* Make 'submit' type button. Display msg on mouseover, if present*/
+
+void cgiMakeButtonWithOnClick(char *name, char *value, char *msg, char *onClick);
+/* Make 'submit' type button, with onclick javascript */
+
+void cgiMakeButton(char *name, char *value);
+/* Make 'submit' type button. */
+
+void cgiMakeOnClickButton(char *command, char *value);
+/* Make 'push' type button with client side onClick (java)script. */
+
+void cgiMakeOnClickSubmitButton(char *command, char *name, char *value);
+/* Make submit button with both variable name and value with client side
+ * onClick (java)script. */
+
+void cgiMakeOptionalButton(char *name, char *value, boolean disabled);
+/* Make 'submit' type button that can be disabled. */
+
+void cgiMakeRadioButton(char *name, char *value, boolean checked);
+/* Make radio type button.  A group of radio buttons should have the
+ * same name but different values.   The default selection should be
+ * sent with checked on. */
+
+void cgiMakeOnClickRadioButton(char *name, char *value, boolean checked,
+                                        char *command);
+/* Make radio type button with onClick command.
+ *  A group of radio buttons should have the
+ * same name but different values.   The default selection should be
+ * sent with checked on. */
+
+void cgiMakeCheckBoxUtil(char *name, boolean checked, char *msg, char *id);
+/* Make check box - can be called directly, though it was originally meant
+ * as the common code for all lower level checkbox routines.
+ * However, it's util functionality has been taken over by
+ * cgiMakeCheckBoxWithIdAndOptionalHtml() */
+
+void cgiMakeCheckBox(char *name, boolean checked);
+/* Make check box. */
+
+void cgiMakeCheckBoxWithMsg(char *name, boolean checked, char *msg);
+/* Make check box, which includes a msg. */
+
+void cgiMakeCheckBoxWithId(char *name, boolean checked, char *id);
+/* Make check box, which includes an ID. */
+
+void cgiMakeCheckBoxJS(char *name, boolean checked, char *javascript);
+/* Make check box with javascript */
+
+void cgiMakeCheckBoxIdAndJS(char *name, boolean checked, char *id, char *javascript);
+/* Make check box with ID and javascript. */
+
+void cgiMakeCheckBoxFourWay(char *name, boolean checked, boolean enabled, char *id, 
+                            char *classes, char *moreHtml);
+/* Make check box - with fourWay functionality (checked/unchecked by enabled/disabled
+ * Also makes a shadow hidden variable that supports the 2 boolean states. */
+
+void cgiMakeTextArea(char *varName, char *initialVal, int rowCount, int columnCount);
+/* Make a text area with area rowCount X columnCount and with text: intialVal. */
+
+void cgiMakeTextAreaDisableable(char *varName, char *initialVal, int rowCount, int columnCount, boolean disabled);
+/* Make a text area that can be disabled. The rea has rowCount X
+ * columnCount and with text: intialVal */
+
+void cgiMakeTextVar(char *varName, char *initialVal, int charSize);
+/* Make a text control filled with initial value.  If charSize
+ * is zero it's calculated from initialVal size. */
+
+void cgiMakeTextVarWithExtraHtml(char *varName, char *initialVal, int width, char *extra);
+/* Make a text control filled with initial value. */
+
+void cgiMakeOnKeypressTextVar(char *varName, char *initialVal, int charSize,
+			      char *script);
+/* Make a text control filled with initial value, with a (java)script
+ * to execute every time a key is pressed.  If charSize is zero it's
+ * calculated from initialVal size. */
+
+void cgiMakeIntVar(char *varName, int initialVal, int maxDigits);
+/* Make a text control filled with initial integer value.  */
+
+#define NO_VALUE            -96669
+void cgiMakeIntVarInRange(char *varName, int initialVal, char *title, int width, 
+                          char *min, char *max);
+/* Make a integer control filled with initial value.
+   If min and/or max are non-NULL will enforce range
+   Requires utils.js jQuery.js and inputBox class */
+void cgiMakeIntVarWithLimits(char *varName, int initialVal, char *title, int width, 
+                             int min, int max);
+void cgiMakeIntVarWithMin(char *varName, int initialVal, char *title, int width, int min);
+void cgiMakeIntVarWithMax(char *varName, int initialVal, char *title, int width, int max);
+#define cgiMakeIntVarNoLimits(varName,initialVal,title,width) \
+        cgiMakeIntVarInRange(varName,initialVal,title,width,NULL,NULL)
+/* All four of these call cgiMakeIntVarInRange() and therefore require utils.js */
+
+void cgiMakeDoubleVar(char *varName, double initialVal, int maxDigits);
+/* Make a text control filled with initial floating-point value.  */
+
+void cgiMakeDoubleVarInRange(char *varName, double initialVal, char *title, int width, 
+                             char *min, char *max);
+/* Make a floating point control filled with initial value.
+   If min and/or max are non-NULL will enforce range
+   Requires utils.js jQuery.js and inputBox class */
+void cgiMakeDoubleVarWithLimits(char *varName, double initialVal, char *title, int width, 
+                                double min, double max);
+void cgiMakeDoubleVarWithMin(char *varName, double initialVal, char *title, int width, double min);
+void cgiMakeDoubleVarWithMax(char *varName, double initialVal, char *title, int width, double max);
+#define cgiMakeDoubleVarNoLimits(varName,initialVal,title,width) \
+        cgiMakeDoubleVarInRange(varName,initialVal,title,width,NULL,NULL)
+/* All four of these call cgiMakeDoubleVarInRange() and therefore require utils.js */
+
+void cgiMakeDropListClass(char *name, char *menu[], int menuSize, char *checked, char *class);
+/* Make a drop-down list with names and style sheet class. */
+
+void cgiMakeDropList(char *name, char *menu[], int menuSize, char *checked);
+/* Make a drop-down list with names.
+ * uses style "normalText" */
+
+void cgiMakeDropListClassWithStyleAndJavascript(char *name, char *menu[],
+                                                int menuSize, char *checked, char *class,
+                                                char *style,char *javascript);
+/* Make a drop-down list with names, text class, style and javascript. */
+
+void cgiMakeDropListClassWithStyle(char *name, char *menu[],
+	int menuSize, char *checked, char *class, char *style);
+/* Make a drop-down list with names, text class and style. */
+
+void cgiMakeDropListWithVals(char *name, char *menu[], char *values[],
+                         int menuSize, char *checked);
+/* Make a drop-down list with names and values. In this case checked
+ * corresponds to a value, not a menu. */
+
+void cgiMakeDropListFull(char *name, char *menu[], char *values[], int menuSize, char *checked, char *extraAttribs);
+/* Make a drop-down list with names and values. */
+
+void cgiDropDownWithTextValsAndExtra(char *name, char *text[], char *values[],
+                                     int count, char *selected, char *extra);
+/* Make a drop-down list with both text and values. */
+
+char *cgiMakeSelectDropList(boolean multiple, char *name, struct slPair *valsAndLabels,
+                            char *selected, char *anyAll,char *extraClasses, char *extraHtml);
+// Returns allocated string of HTML defining a drop-down select
+// (if multiple, REQUIRES ui-dropdownchecklist.js)
+// valsAndLabels: val (pair->name) must be filled in but label (pair->val) may be NULL.
+// selected: if not NULL is a val found in the valsAndLabels (multiple then comma delimited list).
+//           If null and anyAll not NULL, that will be selected
+// anyAll: if not NULL is the string for an initial option. It can contain val and label,
+//         delimited by a comma
+// extraHtml: if not NULL contains id, javascript calls and style.
+//            It does NOT contain class definitions
+#define cgiMakeMultiSelectDropList(name,valsAndLabels,selected,anyAll,extraClasses,extraHtml) \
+        cgiMakeSelectDropList(TRUE,(name),(valsAndLabels),(selected),(anyAll),\
+                              (extraClasses),(extraHtml))
+#define cgiMakeSingleSelectDropList(name,valsAndLabels,selected,anyAll,extraClasses,extraHtml) \
+        cgiMakeSelectDropList(FALSE,(name),(valsAndLabels),(selected),(anyAll),\
+                              (extraClasses),(extraHtml))
+
+void cgiMakeMultList(char *name, char *menu[], int menuSize, struct slName *checked, int length);
+/* Make a list of names which can have multiple selections.
+ * Same as drop-down list except "multiple" is added to select tag */
+
+void cgiMakeCheckboxGroup(char *name, char *menu[], int menuSize, struct slName *checked,
+			  int tableColumns);
+/* Make a table of checkboxes that have the same variable name but different
+ * values (same behavior as a multi-select input). */
+
+void cgiMakeCheckboxGroupWithVals(char *name, char *menu[], char *values[], int menuSize,
+				  struct slName *checked, int tableColumns);
+/* Make a table of checkboxes that have the same variable name but different
+ * values (same behavior as a multi-select input), with nice labels in menu[]. */
+
+void cgiMakeHiddenVarWithExtra(char *varName, char *string, char *extra);
+/* Store string in hidden input for next time around. */
+
+#define cgiMakeHiddenVar(name,val) cgiMakeHiddenVarWithExtra((name),(val),NULL)
+/* Store string in hidden input for next time around. */
+
+void cgiContinueHiddenVar(char *varName);
+/* Write CGI var back to hidden input for next time around.
+ * (if it exists). */
+
+void cgiContinueAllVars();
+/* Write back all CGI vars as hidden input for next time around. */
+
+void cgiVarExclude(char *varName);
+/* If varName exists, remove it. */
+
+void cgiVarExcludeExcept(char **varNames);
+/* Exclude all variables except for those in NULL
+ * terminated array varNames.  varNames may be NULL
+ * in which case nothing is excluded. */
+
+void cgiVarSet(char *varName, char *val);
+/* Set a cgi variable to a particular value. */
+
+struct dyString *cgiUrlString();
+/* Get URL-formatted that expresses current CGI variable state. */
+
+void cgiEncodeIntoDy(char *var, char *val, struct dyString *dy);
+/* Add a CGI-encoded &var=val string to dy. */
+
+boolean cgiSpoof(int *pArgc, char *argv[]);
+/* Use the command line to set up things as if we were a CGI program.
+ * User types in command line (assuming your program called cgiScript)
+ * like:
+ *        cgiScript nonCgiArg1 var1=value1 var2=value2 var3=value3 nonCgiArg2
+ * or like
+ *        cgiScript nonCgiArg1 var1=value1&var2=value2&var3=value3 nonCgiArg2
+ * (The non-cgi arguments can occur anywhere.  The cgi arguments (all containing
+ * the character '=') are erased from argc/argv.  Normally you call this
+ *        cgiSpoof(&argc, argv);
+ */
+
+boolean cgiFromCommandLine(int *pArgc, char *argv[], boolean preferWeb);
+/* Use the command line to set up things as if we were a CGI program.
+ * If preferWeb is TRUE will choose real CGI variables over command
+ * line ones. */
+
+void useTempFile();
+/* tell cheapcgi to use temp files */
+
+boolean cgiFromFile(char *fileName);
+/* Set up a cgi environment using parameters stored in a file.
+ * Takes file with arguments in the form:
+ *       argument1=someVal
+ *       # This is a comment
+ *       argument2=someOtherVal
+ *       ...
+ * and puts them into the cgi environment so that the usual
+ * cgiGetVar() commands can be used. Useful when a program
+ * has a lot of possible parameters.
+ */
+
+boolean cgiParseInput(char *input, struct hash **retHash,
+	struct cgiVar **retList);
+/* Parse cgi-style input into a hash table and list.  This will alter
+ * the input data.  The hash table will contain references back
+ * into input, so please don't free input until you're done with
+ * the hash. Prints message and returns FALSE if there's an error.
+ * To clean up - slFreeList, hashFree, and only then free input. */
+
+void cgiParseInputAbort(char *input, struct hash **retHash,
+        struct cgiVar **retList);
+/* Parse cgi-style input into a hash table and list as above but abort if there's an error. */
+
+char *cgiStringNewValForVar(char *cgiIn, char *varName, char *newVal);
+/* Return a cgi-encoded string with newVal in place of what was oldVal.
+ * It is an error for var not to exist.   Do a freeMem of this string
+ * when you are through. */
+
+void cgiSimpleTableStart();
+/* start HTML table  -- no customization. Leaves room
+ * for a fancier implementation */
+
+void cgiTableEnd();
+/* end HTML table */
+
+void cgiMakeSubmitButton();
+/* Make 'submit' type button. */
+
+void cgiMakeResetButton();
+/* Make 'reset' type button. */
+
+void cgiMakeClearButton(char *form, char *field);
+/* Make button to clear a text field. */
+
+void cgiMakeFileEntry(char *name);
+/* Make file entry box/browser */
+
+void cgiSimpleTableRowStart();
+/* Start table row */
+
+void cgiTableRowEnd();
+/* End table row */
+
+void cgiSimpleTableFieldStart();
+/* Start table field */
+
+void cgiTableFieldStartAlignRight();
+/* Start table field */
+
+void cgiTableFieldEnd();
+/* End table field */
+
+void cgiTableField(char *text);
+/* Make table field entry */
+
+void cgiTableFieldWithMsg(char *text, char *msg);
+/* Make table field entry with mouseover */
+
+void cgiParagraph(char *text);
+/* Make text paragraph */
+
+void logCgiToStderr();
+/* Log useful CGI info to stderr */
+
+void cgiResetState();
+/* This is for reloading CGI settings multiple times in the same program
+ * execution.  No effect if state has not yet been initialized. */
+
+void cgiDown(float lines);
+// Drop down a certain number of lines (may be fractional)
+
+char *commonCssStyles();
+/* Returns a string of common CSS styles */
+
+char *javaScriptLiteralEncode(char *inString);
+/* Use backslash escaping on newline
+ * and quote chars, backslash and others.
+ * Intended that the encoded string will be
+ * put between quotes at a higher level and
+ * then interpreted by Javascript. */
+
+struct cgiParsedVars
+/* A parsed out cgi variable string */
+    {
+    struct cgiParsedVars *next;	/* In case want to make a list of these. */
+    char *stringBuf;		/* Holds strings inside vars. */
+    struct cgiVar *list;    /* List of variables. */
+    struct hash *hash;	    /* Keyed by varName, value is just value, not cgiVar. */
+    };
+
+struct cgiParsedVars *cgiParsedVarsNew(char *cgiString);
+/* Build structure containing parsed out cgiString */
+
+void cgiParsedVarsFree(struct cgiParsedVars **pTags);
+/* Free up memory associated with cgiParsedVars */
+
+#endif /* CHEAPCGI_H */
diff --git a/gbtools/src/include/blatSrc/cirTree.h b/gbtools/src/include/blatSrc/cirTree.h
new file mode 100644
index 0000000..f30fcd2
--- /dev/null
+++ b/gbtools/src/include/blatSrc/cirTree.h
@@ -0,0 +1,85 @@
+/* cirTree chromosome id r tree.  Part of a system to index chromosome ranges - things of
+ * form chrN:start-end.  Generally you'll be using the crTree module - which
+ * makes use of this module and the bPlusTree module - rather than this module directly.
+ * This module works with chromosomes mapped to small integers rather than chromosomes
+ * as strings, saving space and speeding things up in the process, but requiring the
+ * separate bPlusTree to map the names to IDs. 
+ *   This module implements a one dimensional R-tree index treating the chromosome ID
+ * as the most significant part of a two-part key, and the base position as the least 
+ * significant part of the key.  */
+
+#ifndef CIRTREE_H
+#define CIRTREE_H
+
+struct cirTreeFile
+/* R tree index file handle. */
+    {
+    struct cirTreeFile *next;	/* Next in list of index files if any. */
+    char *fileName;		/* Name of file - for error reporting. */
+    struct udcFile *udc;			/* Open file pointer. */
+    boolean isSwapped;		/* If TRUE need to byte swap everything. */
+    bits64 rootOffset;		/* Offset of root block. */
+    bits32 blockSize;		/* Size of block. */
+    bits64 itemCount;		/* Number of items indexed. */
+    bits32 startChromIx;	/* First chromosome in file. */
+    bits32 startBase;		/* Starting base position. */
+    bits32 endChromIx;		/* Ending chromosome in file. */
+    bits32 endBase;		/* Ending base position. */
+    bits64 fileSize;		/* Total size of index file. */
+    bits32 itemsPerSlot;	/* Max number of items to put in each index slot at lowest level. */
+    };
+
+struct cirTreeFile *cirTreeFileOpen(char *fileName);
+/* Open up r-tree index file - reading header and verifying things. */
+
+void cirTreeFileClose(struct cirTreeFile **pCrt);
+/* Close and free up cirTree file opened with cirTreeFileAttach. */
+
+struct cirTreeFile *cirTreeFileAttach(char *fileName, struct udcFile *udc);
+/* Open up r-tree index file on previously open file, with cirTree
+ * header at current file position. */
+
+void cirTreeFileDetach(struct cirTreeFile **pCrt);
+/* Detach and free up cirTree file opened with cirTreeFileAttach. */
+
+struct fileOffsetSize *cirTreeFindOverlappingBlocks(struct cirTreeFile *crf, 
+	bits32 chromIx, bits32 start, bits32 end);
+/* Return list of file blocks that between them contain all items that overlap
+ * start/end on chromIx.  Also there will be likely some non-overlapping items
+ * in these blocks too. When done, use slListFree to dispose of the result. */
+
+struct fileOffsetSize *cirTreeEnumerateBlocks(struct cirTreeFile *crf);
+/* Return list of file blocks. When done, use slListFree to dispose of the result. */
+
+struct cirTreeRange
+/* A chromosome id and an interval inside it. */
+    {
+    bits32 chromIx;	/* Chromosome id. */
+    bits32 start;	/* Start position in chromosome. */
+    bits32 end;		/* One past last base in interval in chromosome. */
+    };
+
+void cirTreeFileBulkIndexToOpenFile(
+	void *itemArray, int itemSize, bits64 itemCount, 
+	bits32 blockSize, bits32 itemsPerSlot,
+	void *context,
+	struct cirTreeRange (*fetchKey)(const void *va, void *context),
+	bits64 (*fetchOffset)(const void *va, void *context), 
+	bits64 endFileOffset, FILE *f);
+/* Create a r tree index from a sorted array, writing output starting at current position
+ * of an already open file.  See cirTreeFileCreate for explanation of parameters. */
+
+void cirTreeFileCreate(
+	void *itemArray, 	/* Sorted array of things to index.  Sort on chromIx,start. */
+	int itemSize, 		/* Size of each element in array. */
+	bits64 itemCount, 	/* Number of elements in array. */
+	bits32 blockSize,	/* R tree block size - # of children for each node. */
+	bits32 itemsPerSlot,	/* Number of items to put in each index slot at lowest level. */
+	void *context,		/* Context pointer for use by fetch call-back functions. */
+	struct cirTreeRange (*fetchKey)(const void *va, void *context),/* Given item, return key. */
+	bits64 (*fetchOffset)(const void *va, void *context), /* Given item, return file offset */
+	bits64 endFileOffset,				 /* Last position in file we index. */
+	char *fileName);                                 /* Name of output file. */
+/* Create a r tree index file from a sorted array. */
+
+#endif /* CIRTREE_H */
diff --git a/gbtools/src/include/blatSrc/codebias.h b/gbtools/src/include/blatSrc/codebias.h
new file mode 100644
index 0000000..f9b3e00
--- /dev/null
+++ b/gbtools/src/include/blatSrc/codebias.h
@@ -0,0 +1,33 @@
+/*****************************************************************************
+ * Copyright (C) 2000 Jim Kent.  This source code may be freely used         *
+ * for personal, academic, and non-profit purposes.  Commercial use          *
+ * permitted only by explicit agreement with Jim Kent (jim_kent at pacbell.net) *
+ *****************************************************************************/
+/* codebias.h - stuff for managing codon bias and finding frame. */
+#ifndef CODEBIAS_H
+#define CODEBIAS_H
+
+#ifndef DNAUTIL_H
+#include "dnautil.h"
+#endif
+
+
+struct codonBias
+/* Tendency of codons to occur in a particular region. 
+ * Tables are in scaled log probability format. */
+    {
+    int mark0[64];
+    int mark1[64][64];
+    };
+
+struct codonBias *codonLoadBias(char *fileName);
+/* Create scaled log codon bias tables based on .cod file.  
+ * You can freeMem it when you're done. */
+
+ int codonFindFrame(DNA *dna, int dnaSize, struct codonBias *forBias);
+/* Assuming a stretch of DNA is an exon, find most likely frame that it's in. 
+ * Beware this routine will replace N's with T's in the input dna.*/
+
+
+#endif /* CODEBIAS_H */
+
diff --git a/gbtools/src/include/blatSrc/common.h b/gbtools/src/include/blatSrc/common.h
new file mode 100644
index 0000000..35c32d3
--- /dev/null
+++ b/gbtools/src/include/blatSrc/common.h
@@ -0,0 +1,1483 @@
+/* Common.h - functions that are commonly used.  Includes
+ * routines for managing singly linked lists, some basic
+ * string manipulation stuff, and other stuff of the
+ * short but useful nature.
+ *
+ * This file is copyright 2002-2005 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#ifndef COMMON_H	/* Wrapper to avoid including this twice. */
+#define COMMON_H
+
+/* Some stuff to support large files in Linux. */
+#ifndef _LARGEFILE_SOURCE
+#define _LARGEFILE_SOURCE 1
+#endif
+
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+
+#ifndef _FILE_OFFSET_BITS
+#define _FILE_OFFSET_BITS 64
+#endif
+
+/* Some stuff for safer pthreads. */
+#ifndef _REENTRANT
+#define _REENTRANT
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <ctype.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <strings.h>
+#include <fcntl.h>
+#include <assert.h>
+#include <setjmp.h>
+#include <time.h>
+#include <math.h>
+#include <errno.h>
+#include <unistd.h>
+#include <libgen.h>
+
+#if defined(MACHTYPE_ppc)
+#include <sys/wait.h>
+#endif
+
+#if defined(__APPLE__)
+#if defined(__i686__)
+/* The i686 apple math library defines warn. */
+#define warn jkWarn
+#endif
+#endif
+
+#ifdef __CYGWIN32__
+#include <mingw/math.h>
+#endif
+
+#ifndef NAN
+#define NAN (0.0 / 0.0)
+#endif
+
+#ifndef WIFEXITED
+#define WIFEXITED(stat)  (((*((int *) &(stat))) & 0xff) == 0)
+#endif
+
+#ifndef WEXITSTATUS
+#define WEXITSTATUS(stat) (short)(((*((int *) &(stat))) >> 8) & 0xffff)
+#endif
+
+#ifndef WIFSIGNALED
+#define WIFSIGNALED(stat) (((*((int *) &(stat)))) && ((*((int *) &(stat))) == ((*((int *) &(stat))) &0x00ff)))
+#endif
+
+#ifndef WTERMSIG
+#define WTERMSIG(stat)    ((*((int *) &(stat))) & 0x7f)
+#endif
+
+#ifndef WIFSTOPPED
+#define WIFSTOPPED(stat)  (((*((int *) &(stat))) & 0xff) == 0177)
+#endif
+
+#ifndef WSTOPSIG
+#define WSTOPSIG(stat)    (((*((int *) &(stat))) >> 8) & 0xff)
+#endif
+
+#ifndef HUGE
+#define HUGE MAXFLOAT
+#endif
+
+
+/* Let's pretend C has a boolean type. */
+#define TRUE 1
+#define FALSE 0
+#define boolean int
+#ifndef	__cplusplus
+#ifndef bool
+#define bool char
+#endif
+#endif
+
+/* Some other type synonyms */
+#define UBYTE unsigned char   /* Wants to be unsigned 8 bits. */
+#define BYTE signed char      /* Wants to be signed 8 bits. */
+#define UWORD unsigned short  /* Wants to be unsigned 16 bits. */
+#define WORD short	      /* Wants to be signed 16 bits. */
+#define bits64 unsigned long long  /* Wants to be unsigned 64 bits. */
+#define bits32 unsigned       /* Wants to be unsigned 32 bits. */
+#define bits16 unsigned short /* Wants to be unsigned 16 bits. */
+#define bits8 unsigned char   /* Wants to be unsigned 8 bits. */
+#define signed32 int	      /* Wants to be signed 32 bits. */
+#define bits8 unsigned char   /* Wants to be unsigned 8 bits. */
+
+#define BIGNUM 0x3fffffff	/* A really big number */
+#define BIGDOUBLE 1.7E+308	/* Close to biggest double-precision number */
+
+#define LIMIT_2or8GB (2147483647 * ((sizeof(size_t)/4)*(sizeof(size_t)/4)))
+/*      == 2 Gb for 32 bit machines, 8 Gb for 64 bit machines */
+#define LIMIT_2or6GB (2147483647 + (2147483647 * ((sizeof(size_t)/4)-1)) + \
+	(2147483647 * ((sizeof(size_t)/4)-1)))
+/*      == 2 Gb for 32 bit machines, 6 Gb for 64 bit machines */
+
+/* Default size of directory path, file name and extension string buffers */
+#define PATH_LEN 512
+#define FILENAME_LEN 128
+#define FILEEXT_LEN 64
+
+/* inline functions: To declare a function inline, place the entire function
+ * in a header file and prefix it with the INLINE macro.  If used with a
+ * compiler that doesn't support inline, change the INLINE marco to be simply
+ * `static'.
+ */
+#ifndef INLINE
+#define INLINE static inline
+#endif
+
+/* stdargs compatibility: in a unix universe a long time ago, types of va_list
+ * were passed by value.  It was assume one could do things like:
+ *
+ *     va_start(args);
+ *     vfprintf(fh1, fmt, args);
+ *     vfprintf(fh2, fmt, args);
+ *     va_end(args);
+ *
+ * and life would good.  However this is not true on some modern systems (for
+ * instance gcc/glibc on x86_64), where va_args can be a pointer to some type
+ * of object).  The second call to vfprintf() would then crash, since the
+ * first call modified the object that va_args was pointing to. C99 adds a
+ * va_copy macro that to address this issue.  Many non-C99 system include this
+ * macro, sometimes called __va_copy.  Here we ensure that va_copy is defined.
+ * If if doesn't exist, we try to define it in terms of __va_copy.  If that is
+ * not available, we make the assumption that va_list can be copied by value
+ * and create our own.  Our implementation is the same as used on Solaris.
+ */
+#if defined(__va_copy) && !defined(va_copy)
+#   define va_copy __va_copy
+#endif
+#if !defined(va_copy)
+#   define va_copy(to, from) ((to) = (from))
+#endif
+
+/* Cast a pointer to a long long. Use to printf format points as long-longs
+ * in a 32/64bit portable manner.  Format should use %llx for the result.
+ * Needed because casting a pointer to a different sized number cause a
+ * warning with gcc */
+#define ptrToLL(p) ((long long)((size_t)p))
+
+/* How big is this array? */
+#define ArraySize(a) (sizeof(a)/sizeof((a)[0]))
+
+#define uglyf printf  /* debugging printf */
+#define uglyAbort errAbort /* debugging error abort. */
+#define uglyOut stdout /* debugging fprintf target. */
+
+void *needMem(size_t size);
+/* Need mem calls abort if the memory allocation fails. The memory
+ * is initialized to zero. */
+
+void *needLargeMem(size_t size);
+/* This calls abort if the memory allocation fails. The memory is
+ * not initialized to zero. */
+
+void *needLargeZeroedMem(size_t size);
+/* Request a large block of memory and zero it. */
+
+void *needLargeMemResize(void* vp, size_t size);
+/* Adjust memory size on a block, possibly relocating it.  If vp is NULL,
+ * a new memory block is allocated.  Memory not initted. */
+
+void *needLargeZeroedMemResize(void* vp, size_t oldSize, size_t newSize);
+/* Adjust memory size on a block, possibly relocating it.  If vp is NULL, a
+ * new memory block is allocated.  If block is grown, new memory is zeroed. */
+
+void *needHugeMem(size_t size);
+/* No checking on size.  Memory not initted to 0. */
+
+void *needHugeZeroedMem(size_t size);
+/* Request a large block of memory and zero it. */
+
+void *needHugeMemResize(void* vp, size_t size);
+/* Adjust memory size on a block, possibly relocating it.  If vp is NULL,
+ * a new memory block is allocated.  No checking on size.  Memory not
+ * initted. */
+
+void *needHugeZeroedMemResize(void* vp, size_t oldSize, size_t newSize);
+/* Adjust memory size on a block, possibly relocating it.  If vp is NULL, a
+ * new memory block is allocated.  No checking on size.  If block is grown,
+ * new memory is zeroed. */
+
+void *needMoreMem(void *old, size_t copySize, size_t newSize);
+/* Allocate a new buffer, copy old buffer to it, free old buffer. */
+
+void *cloneMem(void *pt, size_t size);
+/* Allocate a new buffer of given size, and copy pt to it. */
+
+#define CloneVar(pt) cloneMem(pt, sizeof((pt)[0]))
+/* Allocate copy of a structure. */
+
+void *wantMem(size_t size);
+/* Want mem just calls malloc - no zeroing of memory, no
+ * aborting if request fails. */
+
+void freeMem(void *pt);
+/* Free memory will check for null before freeing. */
+
+void freez(void *ppt);
+/* Pass address of pointer.  Will free pointer and set it
+ * to NULL. Typical use:
+ *     s = needMem(1024);
+ *          ...
+ *     freez(&s); */
+
+#define AllocVar(pt) (pt = needMem(sizeof(*pt)))
+/* Shortcut to allocating a single variable on the heap and
+ * assigning pointer to it. */
+
+#define AllocArray(pt, size) (pt = needLargeZeroedMem(sizeof(*pt) * (size)))
+
+#define AllocA(type) needMem(sizeof(type))
+/* Shortcut to allocating a variable on heap of a specific type. */
+
+#define AllocN(type,count) ((type*)needLargeZeroedMem(sizeof(type) * (count)))
+/* Shortcut to allocating an array on the heap of a specific type. */
+
+#define ExpandArray(array, oldCount, newCount) \
+  (array = needMoreMem((array), (oldCount)*sizeof((array)[0]), (newCount)*sizeof((array)[0])))
+/* Expand size of dynamically allocated array. */
+
+#define CopyArray(source, dest,count) memcpy(dest,source,(count)*sizeof(dest[0]))
+/* Copy count elements of array from source to dest. */
+
+#define CloneArray(a, count) cloneMem(a, (count)*sizeof(a[0]))
+/* Make new dynamic array initialized with  count elements of a */
+
+void errAbort(char *format, ...)
+/* Abort function, with optional (printf formatted) error message. */
+#if defined(__GNUC__)
+__attribute__((format(printf, 1, 2)))
+#endif
+;
+
+void errnoAbort(char *format, ...)
+/* Prints error message from UNIX errno first, then does errAbort. */
+#if defined(__GNUC__)
+__attribute__((format(printf, 1, 2)))
+#endif
+;
+
+#define internalErr()  errAbort("Internal error %s %d", __FILE__, __LINE__)
+/* Generic internal error message */
+
+void warn(char *format, ...)
+/* Issue a warning message. */
+#if defined(__GNUC__)
+__attribute__((format(printf, 1, 2)))
+#endif
+;
+
+void warnWithBackTrace(char *format, ...)
+/* Issue a warning message and append backtrace. */
+#if defined(__GNUC__)
+__attribute__((format(printf, 1, 2)))
+#endif
+;
+
+void verbose(int verbosity, char *format, ...)
+/* Write printf formatted message to log (which by
+ * default is stdout) if global verbose variable
+ * is set to verbosity or higher.  Default level is 1. */
+#if defined(__GNUC__)
+__attribute__((format(printf, 2, 3)))
+#endif
+    ;
+
+void verboseTimeInit(void);
+/* Initialize or reinitialize the previous time for use by verboseTime. */
+
+void verboseTime(int verbosity, char *label, ...)
+/* Print label and how long it's been since last call.  Start time can be
+ * initialized with verboseTimeInit, otherwise the elapsed time will be
+ * zero. */
+#if defined(__GNUC__)
+__attribute__((format(printf, 2, 3)))
+#endif
+    ;
+
+void verboseDot();
+/* Write I'm alive dot (at verbosity level 1) */
+
+int verboseLevel();
+/* Get verbosity level. */
+
+void verboseSetLevel(int verbosity);
+/* Set verbosity level in log.  0 for no logging,
+ * higher number for increasing verbosity. */
+
+INLINE void zeroBytes(void *vpt, int count)
+/* fill a specified area of memory with zeroes */
+{
+memset(vpt, '\0', count);
+}
+
+#define ZeroVar(v) zeroBytes(v, sizeof(*v))
+
+void reverseBytes(char *bytes, long length);
+/* Reverse the order of the bytes. */
+
+void reverseInts(int *a, int length);
+/* Reverse the order of the integer array. */
+
+void reverseUnsigned(unsigned *a, int length);
+/* Reverse the order of the unsigned array. */
+
+void reverseDoubles(double *a, int length);
+/* Reverse the order of the double array. */
+
+void reverseStrings(char **a, int length);
+/* Reverse the order of the char* array. */
+
+void swapBytes(char *a, char *b, int length);
+/* Swap buffers a and b. */
+
+/******* Some things to manage simple lists - structures that begin ******
+ ******* with a pointer to the next element in the list.            ******/
+struct slList
+    {
+    struct slList *next;
+    };
+
+int slCount(const void *list);
+/* Return # of elements in list.  */
+
+void *slElementFromIx(void *list, int ix);
+/* Return the ix'th element in list.  Returns NULL
+ * if no such element. */
+
+int slIxFromElement(void *list, void *el);
+/* Return index of el in list.  Returns -1 if not on list. */
+
+INLINE void slAddHead(void *listPt, void *node)
+/* Add new node to start of list.
+ * Usage:
+ *    slAddHead(&list, node);
+ * where list and nodes are both pointers to structure
+ * that begin with a next pointer.
+ */
+{
+struct slList **ppt = (struct slList **)listPt;
+struct slList *n = (struct slList *)node;
+n->next = *ppt;
+*ppt = n;
+}
+
+INLINE void slSafeAddHead(void *listPt, void *node)
+/* Add new node to start of list.  Now that slAddHead is an inline instead of
+ * a macro, this function is obsolete.
+ */
+{
+slAddHead(listPt, node);
+}
+
+void slAddTail(void *listPt, void *node);
+/* Add new node to tail of list.
+ * Usage:
+ *    slAddTail(&list, node);
+ * where list and nodes are both pointers to structure
+ * that begin with a next pointer. This is sometimes
+ * convenient but relatively slow.  For longer lists
+ * it's better to slAddHead, and slReverse when done.
+ */
+
+void *slPopHead(void *listPt);
+/* Return head of list and remove it from list. (Fast) */
+
+void *slPopTail(void *listPt);
+/* Return tail of list and remove it from list. (Not so fast) */
+
+void *slCat(void *a, void *b);
+/* Return concatenation of lists a and b.
+ * Example Usage:
+ *   struct slName *a = getNames("a");
+ *   struct slName *b = getNames("b");
+ *   struct slName *ab = slCat(a,b)
+ * After this it is no longer safe to use a or b.
+ */
+
+void *slLastEl(void *list);
+/* Returns last element in list or NULL if none. */
+
+void slReverse(void *listPt);
+/* Reverse order of a list.
+ * Usage:
+ *    slReverse(&list);
+ */
+
+typedef int CmpFunction(const void *elem1, const void *elem2);
+
+void slSort(void *pList, CmpFunction *compare);
+/* Sort a singly linked list with Qsort and a temporary array.
+ * The arguments to the compare function in real, non-void, life
+ * are pointers to pointers. */
+
+void slUniqify(void *pList, CmpFunction *compare, void (*free)());
+/* Return sorted list with duplicates removed.
+ * Compare should be same type of function as slSort's compare (taking
+ * pointers to pointers to elements.  Free should take a simple
+ * pointer to dispose of duplicate element, and can be NULL. */
+
+void slSortMerge(void *pA, void *b, CmpFunction *compare);
+// Merges and sorts a pair of singly linked lists using slSort.
+
+void slSortMergeUniq(void *pA, void *b, CmpFunction *compare, void (*free)());
+// Merges and sorts a pair of singly linked lists leaving only unique
+// items via slUniqufy.  duplicate itens are defined by the compare routine
+// returning 0. If free is provided, items dropped from list can disposed of.
+
+boolean slRemoveEl(void *vpList, void *vToRemove);
+/* Remove element from singly linked list.  Usage:
+ *    slRemove(&list, el);
+ * Returns TRUE if element in list.  */
+
+void slFreeList(void *listPt);
+/* Free all elements in list and set list pointer to null.
+ * Usage:
+ *    slFreeList(&list);
+ */
+
+/******* slInt - an int on a list - the first of many singly linked list structures *******/
+
+struct slInt
+/* List of integers. */
+    {
+    struct slInt *next;	/* Next in list. */
+    int val;		/* Integer value. */
+    };
+
+struct slInt *slIntNew(int x);
+#define newSlInt slIntNew
+/* Return a new double. */
+
+int slIntCmp(const void *va, const void *vb);
+/* Compare two slInts. */
+
+int slIntCmpRev(const void *va, const void *vb);
+/* Compare two slInts in reverse direction. */
+
+struct slInt * slIntFind(struct slInt *list, int target);
+/* Find target in slInt list or return NULL */
+
+struct slUnsigned
+/* List of unsigned */
+    {
+    struct slUnsigned *next;  /* Next in list */
+    unsigned val;	      /* Unsigned value */
+    };
+
+struct slUnsigned *slUnsignedNew(unsigned x);
+/* Return a new slUnsigned. */
+
+/******* slDouble - a double on a list *******/
+
+struct slDouble
+/* List of double-precision numbers. */
+    {
+    struct slDouble *next;	/* Next in list. */
+    double val;			/* Double-precision value. */
+    };
+
+struct slDouble *slDoubleNew(double x);
+#define newSlDouble slDoubleNew
+/* Return a new int. */
+
+int slDoubleCmp(const void *va, const void *vb);
+/* Compare two slDoubles. */
+
+double slDoubleMedian(struct slDouble *list);
+/* Return median value on list. */
+
+/******* slName - a zero terminated string on a list *******/
+
+struct slName
+/* List of names. The name array is allocated to accommodate full name
+ */
+    {
+    struct slName *next;	/* Next in list. */
+    char name[1];               /* Allocated at run time to length of string. */
+    };
+
+struct slName *newSlName(char *name);
+
+#define slNameNew newSlName
+/* Return a new slName. */
+
+#define slNameFree freez
+/* Free a single slName */
+
+#define slNameFreeList slFreeList
+/* Free a list of slNames */
+
+struct slName *slNameNewN(char *name, int size);
+/* Return new slName of given size. */
+
+int slNameCmpCase(const void *va, const void *vb);
+/* Compare two slNames, ignore case. */
+
+int slNameCmp(const void *va, const void *vb);
+/* Compare two slNames. */
+
+int slNameCmpStringsWithEmbeddedNumbers(const void *va, const void *vb);
+/* Compare strings such as gene names that may have embedded numbers,
+ * so that bmp4a comes before bmp14a */
+
+void slNameSortCase(struct slName **pList);
+/* Sort slName list, ignore case. */
+
+void slNameSort(struct slName **pList);
+/* Sort slName list. */
+
+boolean slNameInList(struct slName *list, char *string);
+/* Return true if string is in name list -- case insensitive. */
+
+boolean slNameInListUseCase(struct slName *list, char *string);
+/* Return true if string is in name list -- case sensitive. */
+
+void *slNameFind(void *list, char *string);
+/* Return first element of slName list (or any other list starting
+ * with next/name fields) that matches string. */
+
+int slNameFindIx(struct slName *list, char *string);
+/* Return index of first element of slName list (or any other
+ * list starting with next/name fields) that matches string.
+ * ... Return -1 if not found. */
+
+char *slNameStore(struct slName **pList, char *string);
+/* Put string into list if it's not there already.
+ * Return the version of string stored in list. */
+
+struct slName *slNameAddHead(struct slName **pList, char *name);
+/* Add name to start of list and return it. */
+
+struct slName *slNameAddTail(struct slName **pList, char *name);
+/* Add name to end of list (not efficient for long lists),
+ * and return it. */
+
+struct slName *slNameCloneList(struct slName *list);
+/* Return clone of list. */
+
+struct slName *slNameListFromString(char *s, char delimiter);
+/* Return list of slNames gotten from parsing delimited string.
+ * The final delimiter is optional. a,b,c  and a,b,c, are equivalent
+ * for comma-delimited lists. */
+
+#define slNameListFromComma(s) slNameListFromString(s, ',')
+/* Parse out comma-separated list. */
+
+struct slName *slNameListOfUniqueWords(char *text,boolean respectQuotes);
+// Return list of unique words found by parsing string delimited by whitespace.
+// If respectQuotes then ["Lucy and Ricky" 'Fred and Ethyl'] will yield 2 slNames no quotes
+
+struct slName *slNameListFromStringArray(char *stringArray[], int arraySize);
+/* Return list of slNames from an array of strings of length arraySize.
+ * If a string in the array is NULL, the array will be treated as
+ * NULL-terminated. */
+
+char *slNameListToString(struct slName *list, char delimiter);
+/* Return string created by joining all names with the delimiter. */
+
+struct slName *slNameLoadReal(char *fileName);
+/* load file lines that are not blank or start with a '#' into a slName
+ * list */
+
+struct slName *slNameIntersection(struct slName *a, struct slName *b);
+/* return intersection of two slName lists.  */
+
+/******* slRef - a void pointer on a list *******/
+
+struct slRef
+/* Singly linked list of generic references. */
+    {
+    struct slRef *next;	/* Next in list. */
+    void *val;		/* A reference to something. */
+    };
+
+struct slRef *slRefNew(void *val);
+/* Create new slRef element. */
+
+struct slRef *refOnList(struct slRef *refList, void *val);
+/* Return ref if val is already on list, otherwise NULL. */
+
+void refAdd(struct slRef **pRefList, void *val);
+/* Add reference to list. */
+
+void refAddUnique(struct slRef **pRefList, void *val);
+/* Add reference to list if not already on list. */
+
+void slRefFreeListAndVals(struct slRef **pList);
+/* Free up (with simple freeMem()) each val on list, and the list itself as well. */
+
+struct slRef *refListFromSlList(void *list);
+/* Make a reference list that mirrors a singly-linked list. */
+
+/******* slPair - a name/value pair on list where value not always a string *******/
+
+struct slPair
+/* A name/value pair. */
+    {
+    struct slPair *next;	/* Next in list. */
+    char *name;			/* Name of item. */
+    void *val;			/* Pointer to item data. */
+    };
+
+struct slPair *slPairNew(char *name, void *val);
+/* Allocate new name/value pair. */
+
+void slPairAdd(struct slPair **pList, char *name, void *val);
+/* Add new slPair to head of list. */
+
+void slPairFree(struct slPair **pEl);
+/* Free up struct and name.  (Don't free up values.) */
+
+void slPairFreeList(struct slPair **pList);
+/* Free up list.  (Don't free up values.) */
+
+void slPairFreeVals(struct slPair *list);
+/* Free up all values on list. */
+
+void slPairFreeValsAndList(struct slPair **pList);
+/* Free up all values on list and list itself */
+
+struct slPair *slPairFind(struct slPair *list, char *name);
+/* Return list element of given name, or NULL if not found. */
+
+void *slPairFindVal(struct slPair *list, char *name);
+/* Return value associated with name in list, or NULL if not found. */
+
+struct slPair *slPairListFromString(char *str,boolean respectQuotes);
+// Return slPair list parsed from list in string like:  [name1=val1 name2=val2 ...]
+// if respectQuotes then string can have double quotes: [name1="val 1" "name 2"=val2 ...]
+//    resulting pair strips quotes: {name1}={val 1},{name 2}={val2}
+// Returns NULL if parse error.  Free this up with slPairFreeValsAndList.
+#define slPairFromString(s) slPairListFromString(s,FALSE)
+
+char *slPairListToString(struct slPair *list,boolean quoteIfSpaces);
+// Returns an allocated string of pairs in form of [name1=val1 name2=val2 ...]
+// If requested, will wrap name or val in quotes if contain spaces: [name1="val 1" "name 2"=val2]
+
+char *slPairNameToString(struct slPair *list, char delimiter,boolean quoteIfSpaces);
+// Return string created by joining all names (ignoring vals) with the delimiter.
+// If requested, will wrap name in quotes if contain spaces: [name1,"name 2" ...]
+
+int slPairCmpCase(const void *va, const void *vb);
+/* Compare two slPairs, ignore case. */
+
+void slPairSortCase(struct slPair **pList);
+/* Sort slPair list, ignore case. */
+
+int slPairCmp(const void *va, const void *vb);
+/* Compare two slPairs. */
+
+int slPairValCmpCase(const void *va, const void *vb);
+/* Case insensitive compare two slPairs on their values (must be string). */
+
+int slPairValCmp(const void *va, const void *vb);
+/* Compare two slPairs on their values (must be string). */
+
+void slPairValSortCase(struct slPair **pList);
+/* Sort slPair list on values (must be string), ignore case. */
+
+void slPairValSort(struct slPair **pList);
+/* Sort slPair list on values (must be string). */
+
+int slPairIntCmp(const void *va, const void *vb);
+// Compare two slPairs on their integer values.
+
+void slPairIntSort(struct slPair **pList);
+// Sort slPair list on integer values.
+
+int slPairAtoiCmp(const void *va, const void *vb);
+// Compare two slPairs on their strings interpreted as integer values.
+
+void slPairValAtoiSort(struct slPair **pList);
+// Sort slPair list on string values interpreted as integers.
+
+
+
+/******* Some old stuff maybe we could trim. *******/
+
+void gentleFree(void *pt);
+/* check pointer for NULL before freeing.
+ * (Actually plain old freeMem does that these days.) */
+
+/******* Some math stuff *******/
+
+void doubleSort(int count, double *array);
+/* Sort an array of doubles. */
+
+double doubleMedian(int count, double *array);
+/* Return median value in array.  This will sort
+ * the array as a side effect. */
+
+void doubleBoxWhiskerCalc(int count, double *array, double *retMin,
+	double *retQ1, double *retMedian, double *retQ3, double *retMax);
+/* Calculate what you need to draw a box and whiskers plot from an array of doubles. */
+
+void slDoubleBoxWhiskerCalc(struct slDouble *list, double *retMin,
+	double *retQ1, double *retMedian, double *retQ3, double *retMax);
+/* Calculate what you need to draw a box and whiskers plot from a list of slDoubles. */
+
+int intMedian(int count, int *array);
+/* Return median value in array.  This will sort
+ * the array as a side effect. */
+
+void intSort(int count, int *array);
+/* Sort an array of ints. */
+
+
+/*******  Some stuff for processing strings. *******/
+
+char *cloneStringZ(const char *s, int size);
+/* Make a zero terminated copy of string in memory */
+
+char *cloneString(const char *s);
+/* Make copy of string in dynamic memory */
+
+char *cloneLongString(char *s);
+/* Make clone of long string. */
+
+char *catTwoStrings(char *a, char *b);
+/* Allocate new string that is a concatenation of two strings. */
+
+int differentWord(char *s1, char *s2);
+/* strcmp ignoring case - returns zero if strings are
+ * the same (ignoring case) otherwise returns difference
+ * between first non-matching characters. */
+
+#define sameWord(a,b) (!differentWord(a,b))
+/* Return TRUE if two strings are same ignoring case */
+
+#define differentString(a,b) (strcmp(a,b))
+/* Returns FALSE if two strings same. */
+
+int differentStringNullOk(char *a, char *b);
+/* Returns 0 if two strings (either of which may be NULL)
+ * are the same.  Otherwise it returns a positive or negative
+ * number depending on the alphabetical order of the two
+ * strings.
+ * This is basically a strcmp that can handle NULLs in
+ * the input.  If used in a sort the NULLs will end
+ * up before any of the cases with data.   */
+
+#define sameOk(a,b) (differentStringNullOk(a,b) == 0)
+/* returns TRUE if two strings same, NULLs OK */
+
+#define sameString(a,b) (strcmp(a,b)==0)
+/* Returns TRUE if two strings same. */
+
+#define sameStringN(a,b,c) (strncmp(a,b,c)==0)
+/* Returns TRUE if two strings start with the same c characters. */
+
+#define isEmpty(string) ((string) == NULL || (string)[0] == 0)
+#define isNotEmpty(string) (! isEmpty(string))
+
+int cmpStringsWithEmbeddedNumbers(const char *a, const char *b);
+/* Compare strings such as gene names that may have embedded numbers,
+ * so that bmp4a comes before bmp14a */
+
+int cmpWordsWithEmbeddedNumbers(const char *a, const char *b);
+/* Case insensitive version of cmpStringsWithEmbeddedNumbers. */
+
+boolean startsWith(const char *start, const char *string);
+/* Returns TRUE if string begins with start. */
+
+boolean startsWithWord(char *firstWord, char *line);
+/* Return TRUE if first white-space-delimited word in line
+ * is same as firstWord.  Comparison is case sensitive. */
+
+boolean startsWithWordByDelimiter(char *firstWord,char delimit, char *line);
+/* Return TRUE if first word in line is same as firstWord as delimited by delimit.
+   Comparison is case sensitive. Delimit of ' ' uses isspace() */
+
+#define stringIn(needle, haystack) strstr(haystack, needle)
+/* Returns position of needle in haystack or NULL if it's not there. */
+/*        char *stringIn(char *needle, char *haystack);      */
+
+char *rStringIn(char *needle, char *haystack);
+/* Return last position of needle in haystack, or NULL if it's not there. */
+
+char *stringBetween(char *start, char *end, char *haystack);
+/* Return string between start and end strings, or NULL if
+ * none found.  The first such instance is returned.
+ * String must be freed by caller. */
+
+char * findWordByDelimiter(char *word,char delimit, char *line);
+/* Return pointer to first word in line matching 'word' and delimited
+   by 'delimit'. Comparison is case sensitive. Delimit of ' ' uses isspace() */
+
+boolean endsWith(char *string, char *end);
+/* Returns TRUE if string ends with end. */
+
+char lastChar(char *s);
+/* Return last character in string. */
+
+void trimLastChar(char *s);
+/* Erase last character in string. */
+
+char *lastNonwhitespaceChar(char *s);
+// Return pointer to last character in string that is not whitespace.
+
+char *matchingCharBeforeInLimits(char *limit, char *s, char c);
+/* Look for character c sometime before s, but going no further than limit.
+ * Return NULL if not found. */
+
+boolean wildMatch(const char *wildCard, const char *string);
+/* does a case insensitive wild card match with a string.
+ * * matches any string or no character.
+ * ? matches any single character.
+ * anything else etc must match the character exactly. */
+
+boolean sqlMatchLike(char *wildCard, char *string);
+/* Match using % and _ wildcards. */
+
+boolean anyWild(const char *string);
+/* Return TRUE if any wild card characters in string. */
+
+char *memMatch(char *needle, int nLen, char *haystack, int hLen);
+/* Returns first place where needle (of nLen chars) matches
+ * haystack (of hLen chars) */
+
+void toUpperN(char *s, int n);
+/* Convert a section of memory to upper case. */
+
+void toLowerN(char *s, int n);
+/* Convert a section of memory to lower case. */
+
+void toggleCase(char *s, int size);
+/* toggle upper and lower case chars in string. */
+
+char *strUpper(char *s);
+#define touppers(s) (void)strUpper(s)
+/* Convert entire string to upper case. */
+
+char *strLower(char *s);
+#define tolowers(s) (void)strLower(s)
+/* Convert entire string to lower case */
+
+char *replaceChars(char *string, char *oldStr, char *newStr);
+/*
+  Replaces the old with the new.
+ The old and new string need not be of equal size
+ Can take any length string.
+ Return value needs to be freeMem'd.
+*/
+
+int strSwapStrs(char *string, int sz,char *oldStr, char *newStr);
+/* Swaps all occurrences of the oldStr with the newStr in string. Need not be same size
+   Swaps in place but restricted by sz.  Returns count of swaps or -1 for sz failure.*/
+
+char * memSwapChar(char *s, int len, char oldChar, char newChar);
+/* Substitute newChar for oldChar throughout memory of given length.
+   old or new may be null */
+#define strSwapChar(s,old,new)   memSwapChar((s),strlen(s),(old),(new))
+#define subChar(s,old,new) (void)memSwapChar((s),strlen(s),(old),(new))
+/* Substitute newChar for oldChar throughout string s. */
+
+void stripChar(char *s, char c);
+/* Remove all occurences of c from s. */
+
+char *stripEnclosingChar(char *inout,char encloser);
+// Removes enclosing char if found at both beg and end, preserving pointer
+// Note: handles brackets '(','{' and '[' by complement at end
+#define stripEnclosingDoubleQuotes(inout) stripEnclosingChar((inout),'"')
+#define stripEnclosingSingleQuotes(inout) stripEnclosingChar((inout),'\'')
+
+void stripString(char *s, char *strip);
+/* Remove all occurences of strip from s. */
+
+int countCase(char *s,boolean upper);
+// Count letters with case (upper or lower)
+
+int countChars(char *s, char c);
+/* Return number of characters c in string s. */
+
+int countCharsN(char *s, char c, int size);
+/* Return number of characters c in string s of given size. */
+
+int countLeadingChars(char *s, char c);
+/* Count number of characters c at start of string. */
+
+int countLeadingDigits(const char *s);
+/* Return number of leading digits in s */
+
+int countLeadingNondigits(const char *s);
+/* Count number of leading non-digit characters in s. */
+
+int countSame(char *a, char *b);
+/* Count number of characters that from start in a,b that are same. */
+
+int countSeparatedItems(char *string, char separator);
+/* Count number of items in string you would parse out with given
+ * separator,  assuming final separator is optional. */
+
+int chopString(char *in, char *sep, char *outArray[], int outSize);
+/* int chopString(in, sep, outArray, outSize); */
+/* This chops up the input string (cannabilizing it)
+ * into an array of zero terminated strings in
+ * outArray.  It returns the number of strings.
+ * If you pass in NULL for outArray, it will just
+ * return the number of strings that it *would*
+ * chop. */
+
+extern char crLfChopper[];
+extern char whiteSpaceChopper[];
+/* Some handy predefined separators. */
+
+int chopByWhite(char *in, char *outArray[], int outSize);
+/* Like chopString, but specialized for white space separators. */
+
+#define chopLine(line, words) chopByWhite(line, words, ArraySize(words))
+/* Chop line by white space. */
+
+int chopByWhiteRespectDoubleQuotes(char *in, char *outArray[], int outSize);
+/* Like chopString, but specialized for white space separators.
+ * Further, any doubleQuotes (") are respected.
+ * If doubleQuote encloses whole string, then they are removed:
+ *   "Fred and Ethyl" results in word [Fred and Ethyl]
+ * If doubleQuotes exist inside string they are retained:
+ *   Fred "and Ethyl" results in word [Fred "and Ethyl"]
+ * Special note "" is a valid, though empty word. */
+
+int chopByChar(char *in, char chopper, char *outArray[], int outSize);
+/* Chop based on a single character. */
+
+#define chopTabs(string, words) chopByChar(string, '\t', words, ArraySize(words))
+/* Chop string by tabs. */
+
+#define chopCommas(string, words) chopByChar(string, ',', words, ArraySize(words))
+/* Chop string by commas. */
+
+
+char *skipBeyondDelimit(char *s,char delimit);
+/* Returns NULL or pointer to first char beyond one (or more contiguous) delimit char.
+   If delimit is ' ' then skips beyond first patch of whitespace. */
+
+char *skipLeadingSpaces(char *s);
+/* Return first white space or NULL if none.. */
+
+char *skipToSpaces(char *s);
+/* Return first white space. */
+
+void eraseTrailingSpaces(char *s);
+/* Replace trailing white space with zeroes. */
+
+void eraseWhiteSpace(char *s);
+/* Remove white space from a string */
+
+void eraseNonAlphaNum(char *s);
+/* Remove non-alphanumeric chars from string */
+
+char *trimSpaces(char *s);
+/* Remove leading and trailing white space. */
+
+void repeatCharOut(FILE *f, char c, int count);
+/* Write character to file repeatedly. */
+
+void spaceOut(FILE *f, int count);
+/* Put out some spaces to file. */
+
+void starOut(FILE *f, int count);
+/* Put out some asterisks to file. */
+
+boolean hasWhiteSpace(char *s);
+/* Return TRUE if there is white space in string. */
+
+char *firstWordInLine(char *line);
+/* Returns first word in line if any (white space separated).
+ * Puts 0 in place of white space after word. */
+
+char *lastWordInLine(char *line);
+/* Returns last word in line if any (white space separated).
+ * Returns NULL if string is empty.  Removes any terminating white space
+ * from line. */
+
+char *nextWord(char **pLine);
+/* Return next word in *pLine and advance *pLine to next
+ * word. Returns NULL when no more words. */
+
+char *nextWordRespectingQuotes(char **pLine);
+// return next word but respects single or double quotes surrounding sets of words.
+
+char *cloneFirstWord(char *line);
+/* Clone first word in line */
+
+char *nextTabWord(char **pLine);
+/* Return next tab-separated word. */
+
+char *cloneFirstWordByDelimiter(char *line,char delimit);
+/* Returns a cloned first word, not harming the memory passed in
+   Delimiter of ' ' will delimit by isspace() */
+#define cloneFirstWordInLine(line) cloneFirstWordByDelimiter((line),' ')
+#define cloneFirstWordByTab(line)  cloneFirstWordByDelimiter((line),'\t')
+/* Returns a cloned first word, not harming the memory passed in */
+
+char *cloneNextWordByDelimiter(char **line,char delimit);
+/* Returns a cloned first word, advancing the line pointer
+   but not harming memory passed in. Delimit ' ' uses isspace() */
+#define cloneNextWord(line)      cloneNextWordByDelimiter((line),' ')
+#define cloneNextWordByTab(line) cloneNextWordByDelimiter((line),'\t')
+
+char *nextStringInList(char **pStrings);
+/* returns pointer to the first string and advances pointer to next in
+   list of strings dilimited by 1 null and terminated by 2 nulls. */
+
+int cntStringsInList(char *pStrings);
+/* returns count of strings in a
+   list of strings dilimited by 1 null and terminated by 2 nulls. */
+
+int stringArrayIx(char *string, char *array[], int arraySize);
+/* Return index of string in array or -1 if not there. */
+
+int ptArrayIx(void *pt, void *array, int arraySize);
+/* Return index of pt in array or -1 if not there. */
+
+#define stringIx(string, array) stringArrayIx( (string), (array), ArraySize(array))
+
+/* Some stuff that is left out of GNU .h files!? */
+#ifndef SEEK_SET
+#define SEEK_SET 0
+#endif
+
+#ifndef SEEK_CUR
+#define SEEK_CUR 1
+#endif
+
+#ifndef SEEK_END
+#define SEEK_END 2
+#endif
+
+#ifndef FILEPATH_H
+void splitPath(char *path, char dir[PATH_LEN], char name[FILENAME_LEN],
+	       char extension[FILEEXT_LEN]);
+/* Split a full path into components.  The dir component will include the
+ * trailing / if any.  The extension component will include the starting
+ * . if any.   Pass in NULL for dir, name, or extension if you don't care about
+ * that part. */
+#endif /* FILEPATH_H */
+
+char *addSuffix(char *head, char *suffix);
+/* Return a needMem'd string containing "headsuffix". Should be free'd
+ when finished. */
+
+void chopSuffix(char *s);
+/* Remove suffix (last . in string and beyond) if any. */
+
+void chopSuffixAt(char *s, char c);
+/* Remove end of string from last occurrence of char c.
+ * chopSuffixAt(s, '.') is equivalent to regular chopSuffix. */
+
+char *chopPrefix(char *s);
+/* This will replace the first '.' in a string with
+ * 0, and return the character after this.  If there
+ * is no '.' in the string this will just return the
+ * unchanged s passed in. */
+
+char *chopPrefixAt(char *s, char c);
+/* Like chopPrefix, but can chop on any character, not just '.' */
+
+FILE *mustOpen(char *fileName, char *mode);
+/* Open a file - or squawk and die. */
+
+void mustWrite(FILE *file, void *buf, size_t size);
+/* Write to file or squawk and die. */
+
+#define writeOne(file, var) mustWrite((file), &(var), sizeof(var))
+/* Write out one variable to file. */
+
+void mustRead(FILE *file, void *buf, size_t size);
+/* Read size bytes from a file or squawk and die. */
+
+#define mustReadOne(file, var) mustRead((file), &(var), sizeof(var))
+/* Read one variable from file or die. */
+
+void mustGetLine(FILE *file, char *buf, int charCount);
+/* Read at most charCount-1 bytes from file, but stop after newline if one is
+ * encountered.  The string in buf is '\0'-terminated.  (See man 3 fgets.)
+ * Die if there is an error. */
+
+int mustOpenFd(char *fileName, int flags);
+/* Open a file descriptor (see man 2 open) or squawk and die. */
+
+void mustReadFd(int fd, void *buf, size_t size);
+/* Read size bytes from a file descriptor or squawk and die. */
+
+void mustWriteFd(int fd, void *buf, size_t size);
+/* Write size bytes to file descriptor fd or die.  (See man 2 write.) */
+
+off_t mustLseek(int fd, off_t offset, int whence);
+/* Seek to given offset, relative to whence (see man lseek) in file descriptor fd or errAbort.
+ * Return final offset (e.g. if this is just an (fd, 0, SEEK_CUR) query for current position). */
+
+void mustCloseFd(int *pFd);
+/* Close file descriptor *pFd if >= 0, abort if there's an error, set *pFd = -1. */
+
+#define writeOneFd(fd, var) mustWriteFd((fd), &(var), sizeof(var))
+/* Write out one variable to file descriptor fd. */
+
+#define readOne(file, var) (fread(&(var), sizeof(var), 1, (file)) == 1)
+/* Read one variable from file. Returns FALSE if can't do it. */
+
+#define readOneFd(fd, var) (read((fd), &(var), sizeof(var)) == sizeof(var))
+/* Read one variable from file. Returns FALSE if can't do it. */
+
+#define mustReadOneFd(fd, var) mustReadFd((fd), &(var), sizeof(var))
+/* Read one variable from file or die. */
+
+#define memReadOne(pPt, var) memRead((pPt), &(var), sizeof(var))
+/* Read one variable from memory. */
+
+void writeString(FILE *f, char *s);
+/* Write a 255 or less character string to a file.
+ * This will write the length of the string in the first
+ * byte then the string itself. */
+
+char *readString(FILE *f);
+/* Read a string (written with writeString) into
+ * memory.  freeMem the result when done. Returns
+ * NULL at EOF. */
+
+char *mustReadString(FILE *f);
+/* Read a string.  Squawk and die at EOF or if any problem. */
+
+boolean fastReadString(FILE *f, char buf[256]);
+/* Read a string into buffer, which must be long enough
+ * to hold it.  String is in 'writeString' format.
+ * Returns FALSE at EOF. */
+
+void msbFirstWriteBits64(FILE *f, bits64 x);
+/* Write out 64 bit number in manner that is portable across architectures */
+
+bits64 msbFirstReadBits64(FILE *f);
+/* Write out 64 bit number in manner that is portable across architectures */
+
+void carefulClose(FILE **pFile);
+/* Close file if open and null out handle to it. */
+
+boolean carefulCloseWarn(FILE **pFile);
+/* Close file if open and null out handle to it.
+ * Return FALSE and print a warning message if there
+ * is a problem.*/
+
+char *firstWordInFile(char *fileName, char *wordBuf, int wordBufSize);
+/* Read the first word in file into wordBuf. */
+
+struct fileOffsetSize
+/* A piece of a file. */
+   {
+   struct fileOffsetSize *next;	/* Next in list. */
+   bits64	offset;		/* Start offset of block. */
+   bits64	size;		/* Size of block. */
+   };
+
+int fileOffsetSizeCmp(const void *va, const void *vb);
+/* Help sort fileOffsetSize by offset. */
+
+struct fileOffsetSize *fileOffsetSizeMerge(struct fileOffsetSize *inList);
+/* Returns a new list which is inList transformed to have adjacent blocks
+ * merged.  Best to use this with a sorted list. */
+
+void fileOffsetSizeFindGap(struct fileOffsetSize *list,
+	struct fileOffsetSize **pBeforeGap, struct fileOffsetSize **pAfterGap);
+/* Starting at list, find all items that don't have a gap between them and the previous item.
+ * Return at gap, or at end of list, returning pointers to the items before and after the gap. */
+
+void mustSystem(char *cmd);
+/* Execute cmd using "sh -c" or die.  (See man 3 system.) fail on errors */
+
+int roundingScale(int a, int p, int q);
+/* returns rounded a*p/q */
+
+int intAbs(int a);
+/* Return integer absolute value */
+
+#define logBase2(x)(log(x)/log(2))
+/* return log base two of number */
+
+#define round(a) ((int)((a)+0.5))
+/* Round floating point val to nearest integer. */
+
+#define roundll(a) ((long long)((a)+0.5))
+/* Round floating point val to nearest long long. */
+
+#ifndef min
+#define min(a,b) ( (a) < (b) ? (a) : (b) )
+/* Return min of a and b. */
+#endif
+
+#ifndef max
+#define max(a,b) ( (a) > (b) ? (a) : (b) )
+/* Return max of a and b. */
+#endif
+
+int  rangeIntersection(int start1, int end1, int start2, int end2);
+/* Return amount of bases two ranges intersect over, 0 or negative if no
+ * intersection. */
+
+int  positiveRangeIntersection(int start1, int end1, int start2, int end2);
+/* Return amount of bases two ranges intersect over, 0 if no
+ * intersection. */
+
+INLINE void memRead(char **pPt, void *buf, int size)
+/* Copy memory from *pPt to buf, and advance *pPt by size. */
+{
+memcpy(buf, *pPt, size);
+*pPt += size;
+}
+
+INLINE void memWrite(char **pPt, void *buf, int size)
+/* Copy memory from buf to *pPt and advance *pPt by size. */
+{
+memcpy(*pPt, buf, size);
+*pPt += size;
+}
+
+#define memWriteOne(pPt, var) memWrite((pPt), &(var), sizeof(var))
+/* Write out one variable to memory stream. */
+
+INLINE void memWriteFloat(char **pPt, float val)
+/* Write out floating point val to file.  Mostly to convert from double... */
+{
+memWriteOne(pPt, val);
+}
+
+bits64 byteSwap64(bits64 a);
+/* Swap from intel to sparc order of a 64 bit quantity. */
+
+bits64 readBits64(FILE *f, boolean isSwapped);
+/* Read and optionally byte-swap 64 bit entity. */
+
+bits64 fdReadBits64(int fd, boolean isSwapped);
+/* Read and optionally byte-swap 64 bit entity. */
+
+bits64 memReadBits64(char **pPt, boolean isSwapped);
+/* Read and optionally byte-swap 64 bit entity from memory buffer pointed to by
+ * *pPt, and advance *pPt past read area. */
+
+bits32 byteSwap32(bits32 a);
+/* Swap from intel to sparc order of a 32 bit quantity. */
+
+bits32 readBits32(FILE *f, boolean isSwapped);
+/* Read and optionally byte-swap 32 bit entity. */
+
+bits32 fdReadBits32(int fd, boolean isSwapped);
+/* Read and optionally byte-swap 32 bit entity. */
+
+bits32 memReadBits32(char **pPt, boolean isSwapped);
+/* Read and optionally byte-swap 32 bit entity from memory buffer pointed to by
+ * *pPt, and advance *pPt past read area. */
+
+bits16 byteSwap16(bits16 a);
+/* Swap from intel to sparc order of a 16 bit quantity. */
+
+bits16 readBits16(FILE *f, boolean isSwapped);
+/* Read and optionally byte-swap 16 bit entity. */
+
+bits16 fdReadBits16(int fd, boolean isSwapped);
+/* Read and optionally byte-swap 16 bit entity. */
+
+bits16 memReadBits16(char **pPt, boolean isSwapped);
+/* Read and optionally byte-swap 32 bit entity from memory buffer pointed to by
+ * *pPt, and advance *pPt past read area. */
+
+double byteSwapDouble(double a);
+/* Return byte-swapped version of a */
+
+double readDouble(FILE *f, boolean isSwapped);
+/* Read and optionally byte-swap double-precision floating point entity. */
+
+double memReadDouble(char **pPt, boolean isSwapped);
+/* Read and optionally byte-swap double-precision floating point entity
+ * from memory buffer pointed to by *pPt, and advance *pPt past read area. */
+
+float byteSwapFloat(float a);
+/* Return byte-swapped version of a */
+
+float readFloat(FILE *f, boolean isSwapped);
+/* Read and optionally byte-swap single-precision floating point entity. */
+
+float memReadFloat(char **pPt, boolean isSwapped);
+/* Read and optionally byte-swap single-precision floating point entity
+ * from memory buffer pointed to by *pPt, and advance *pPt past read area. */
+
+void removeReturns(char* dest, char* src);
+/* Removes the '\r' character from a string.
+ * the source and destination strings can be the same,
+ * if there are no threads */
+
+int intExp(char *text);
+/* Convert text to integer expression and evaluate.
+ * Throws if it finds a non-number. */
+
+double doubleExp(char *text);
+/* Convert text to floating point expression and
+ * evaluate. */
+
+char* readLine(FILE* fh);
+/* Read a line of any size into dynamic memory, return null on EOF */
+
+off_t fileSize(char *fileName);
+/* The size of a file. */
+
+boolean fileExists(char *fileName);
+/* Does a file exist? */
+
+/*
+ Friendly name for strstrNoCase
+*/
+char *containsStringNoCase(char *haystack, char *needle);
+
+char *strstrNoCase(char *haystack, char *needle);
+/* A case-insensitive strstr */
+
+int vasafef(char* buffer, int bufSize, char *format, va_list args);
+/* Format string to buffer, vsprintf style, only with buffer overflow
+ * checking.  The resulting string is always terminated with zero byte. */
+
+int safef(char* buffer, int bufSize, char *format, ...)
+/* Format string to buffer, vsprintf style, only with buffer overflow
+ * checking.  The resulting string is always terminated with zero byte. */
+#ifdef __GNUC__
+__attribute__((format(printf, 3, 4)))
+#endif
+;
+
+void safecpy(char *buf, size_t bufSize, const char *src);
+/* copy a string to a buffer, with bounds checking.*/
+
+void safencpy(char *buf, size_t bufSize, const char *src, size_t n);
+/* copy n characters from a string to a buffer, with bounds checking.
+ * Unlike strncpy, always null terminates the result */
+
+void safecat(char *buf, size_t bufSize, const char *src);
+/* Append  a string to a buffer, with bounds checking.*/
+
+void safencat(char *buf, size_t bufSize, const char *src, size_t n);
+/* append n characters from a string to a buffer, with bounds checking. */
+
+char *naForNull(char *s);
+/* Return 'n/a' if s is NULL, otherwise s. */
+
+char *naForEmpty(char *s);
+/* Return n/a if s is "" or NULL, otherwise s. */
+
+char *emptyForNull(char *s);
+/* Return "" if s is NULL, otherwise s. */
+
+char *nullIfAllSpace(char *s);
+/* Return NULL if s is all spaces, otherwise s. */
+
+char *trueFalseString(boolean b);
+/* Return "true" or "false" */
+
+void uglyTime(char *label, ...);
+/* Print label and how long it's been since last call.  Call with
+ * a NULL label to initialize. */
+
+/*	In case the development environment does not supply INFINITY	*/
+#if !defined(INFINITY)
+#define INFINITY (1.0/0.0)
+#endif
+
+void makeDirs(char* path);
+/* make a directory, including parent directories */
+
+char *skipNumeric(char *s);
+/* Return first char of s that's not a digit */
+
+char *skipToNumeric(char *s);
+/* skip up to where numeric digits appear */
+
+char *splitOffNonNumeric(char *s);
+/* Split off non-numeric part, e.g. mm of mm8. Result should be freed when done */
+
+char *splitOffNumber(char *db);
+/* Split off number part, e.g. 8 of mm8. Result should be freed when done */
+
+
+void childExecFailedExit(char *msg);
+/* Child exec failed, so quit without atexit cleanup */
+
+void vaDumpStack(char *format, va_list args);
+/* debugging function to run the pstack program on the current process. In
+ * prints a message, following by a new line, and then the stack track.  Just
+ * prints errors to stderr rather than aborts. For debugging purposes
+ * only.  */
+
+void dumpStack(char *format, ...)
+/* debugging function to run the pstack program on the current process. In
+ * prints a message, following by a new line, and then the stack track.  Just
+ * prints errors to stderr rather than aborts. For debugging purposes
+ * only.  */
+#if defined(__GNUC__)
+__attribute__((format(printf, 1, 2)))
+#endif
+;
+
+// SETTING_ON set of macros are frequently used comparisons of string values for boolean questions.
+// Notice the subtle difference between NOT_ON and IS_OFF.
+//        NOT_ON could be NULL but IS_OFF must be explicitly set
+#define SETTING_IS_ON(setting) (  setting && (sameWord(setting,"on") || sameWord(setting,"true") \
+                               || sameWord(setting,"yes") || sameWord(setting,"enabled") \
+                               || atoi(setting) != 0) )
+#define SETTING_NOT_ON(setting)   (!SETTING_IS_ON(setting))
+#define SETTING_IS_OFF(setting) (  setting && (sameWord(setting,"off") \
+                                || sameWord(setting,"false") || sameWord(setting,"no") \
+                                || sameWord(setting,"disabled") || sameWord(setting,"0")) )
+
+// Standard bit mask macros
+#define BITS_ADD(    flags,bits) ((flags) = ((flags) |  (bits)))
+#define BITS_REMOVE( flags,bits) ((flags) = ((flags) & ~(bits)))
+#define BITS_ARE_ON( flags,bits) (((flags) & (bits)) == (bits))
+#define BITS_ARE_OFF(flags,bits) (((flags) & (bits)) == 0)
+
+// It is sometimes useful to distinguish between 3 "boolean" states: TRUE, FALSE and UNKNOWN
+enum enumBool
+    {
+    beUnknown=0,              // Not yet set
+    ebYes=1,                  // already set to TRUE
+    ebNo=-1                   // already set to FALSE
+    };
+#define SET_TO_YES(ebool) { (ebool) = ebYes; }
+#define SET_TO_NO(ebool)  { (ebool) = ebNo; }
+#define IS_YES(ebool)     ((ebool) == ebYes)
+#define IS_NO(ebool)      ((ebool) == ebNo)
+#define IS_KNOWN(ebool)   (IS_YES(ebool) || IS_NO(ebool))
+#define IS_TRUE           IS_YES
+#define IS_FALSE          IS_NO
+
+time_t mktimeFromUtc (struct tm *t);
+/* Return time_t for tm in UTC (GMT)
+ * Useful for stuff like converting to time_t the
+ * last-modified HTTP response header
+ * which is always GMT. Returns -1 on failure of mktime */
+
+
+time_t dateToSeconds(const char *date,const char*format);
+// Convert a string date to time_t
+
+boolean dateIsOld(const char *date,const char*format);
+// Is this string date older than now?
+
+boolean dateIsOlderBy(const char *date,const char*format, time_t seconds);
+// Is this string date older than now by this many seconds?
+
+char *dateAddTo(char *date,char *format,int addYears,int addMonths,int addDays);
+/* Add years,months,days to a formatted date and returns the new date as a cloned string
+*  format is a strptime/strftime format: %F = yyyy-mm-dd */
+
+boolean haplotype(const char *name);
+/* Is this name a haplotype name ?  _hap or _alt in the name */
+
+#endif /* COMMON_H */
diff --git a/gbtools/src/include/blatSrc/common.mk b/gbtools/src/include/blatSrc/common.mk
new file mode 100644
index 0000000..35ad0d1
--- /dev/null
+++ b/gbtools/src/include/blatSrc/common.mk
@@ -0,0 +1,411 @@
+CC=gcc
+# to build on sundance: CC=gcc -mcpu=v9 -m64
+ifeq (${COPT},)
+    COPT=-O -g
+endif
+ifeq (${CFLAGS},)
+    CFLAGS=
+endif
+ifeq (${MACHTYPE},)
+    MACHTYPE:=$(shell uname -m)
+#    $(info MACHTYPE was empty, set to: ${MACHTYPE})
+endif
+ifneq (,$(findstring -,$(MACHTYPE)))
+#    $(info MACHTYPE has - sign ${MACHTYPE})
+    MACHTYPE:=$(shell uname -m)
+#    $(info MACHTYPE has - sign set to: ${MACHTYPE})
+endif
+
+HG_DEFS=-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_GNU_SOURCE -DMACHTYPE_${MACHTYPE}
+HG_INC=-I../inc -I../../inc -I../../../inc -I../../../../inc -I../../../../../inc
+
+# to check for Mac OSX Darwin specifics:
+UNAME_S := $(shell uname -s)
+# to check for builds on hgwdev
+FULLWARN = $(shell uname -n)
+
+#global external libraries 
+L=
+
+# pthreads is required
+ifneq ($(UNAME_S),Darwin)
+  L+=-pthread
+endif
+
+# autodetect if openssl is installed
+ifeq (${SSLDIR},)
+  SSLDIR = /usr/include/openssl
+endif
+ifeq (${USE_SSL},)
+  ifneq ($(wildcard ${SSLDIR}),)
+     USE_SSL=1
+  endif
+endif
+
+
+# autodetect UCSC installation of hal:
+ifeq (${HALDIR},)
+    HALDIR = /hive/groups/browser/hal
+    ifneq ($(wildcard ${HALDIR}),)
+        ifeq (${USE_HAL},)
+          USE_HAL=1
+        endif
+    endif
+endif
+
+ifeq (${USE_HAL},1)
+    HALLIBS=${HALDIR}/hal/lib/halMaf.a ${HALDIR}/hal/lib/halChain.a ${HALDIR}/hal/lib/halMaf.a ${HALDIR}/hal/lib/halLiftover.a ${HALDIR}/hal/lib/halLod.a ${HALDIR}/hal/lib/halLib.a ${HALDIR}/sonLib/lib/sonLib.a ${HALDIR}/hdf5-1.8.11/hdf5//lib/libhdf5_cpp.a ${HALDIR}/hdf5-1.8.11/hdf5//lib/libhdf5.a ${HALDIR}/hdf5-1.8.11/hdf5//lib/libhdf5_hl.a 
+    HG_DEFS+=-DUSE_HAL
+    HG_INC+=-I${HALDIR}/hal/chain/inc/
+endif
+
+
+# libssl: disabled by default
+ifeq (${USE_SSL},1)
+    ifneq (${SSL_DIR}, "/usr/include/openssl")
+      ifneq ($(UNAME_S),Darwin)
+        L+=-L${SSL_DIR}/lib
+      endif
+        HG_INC+=-I${SSL_DIR}/include
+    endif
+    # on hgwdev, already using the static library with mysqllient.
+    ifeq (${FULLWARN},hgwdev)
+       L+=/usr/lib64/libssl.a /usr/lib64/libcrypto.a -lkrb5
+    else
+       L+=-lssl -lcrypto
+    endif
+    HG_DEFS+=-DUSE_SSL
+endif
+
+# autodetect where png is installed
+ifeq (${PNGLIB},)
+  ifneq ($(wildcard /usr/lib64/libpng.a),)
+      PNGLIB=/usr/lib64/libpng.a
+  endif
+endif
+ifeq (${PNGLIB},)
+  ifneq ($(wildcard /usr/lib/libpng.a),)
+      PNGLIB=/usr/lib/libpng.a
+  endif
+endif
+ifeq (${PNGLIB},)
+  ifneq ($(wildcard /opt/local/lib/libpng.a),)
+      PNGLIB=/opt/local/lib/libpng.a
+  endif
+endif
+ifeq (${PNGLIB},)
+  ifneq ($(wildcard /usr/local/lib/libpng.a),)
+      PNGLIB=/usr/local/lib/libpng.a
+  endif
+endif
+ifeq (${PNGLIB},)
+      PNGLIB := $(shell libpng-config --ldflags  || true)
+endif
+ifeq (${PNGLIB},)
+  PNGLIB=-lpng
+endif
+ifeq (${PNGINCL},)
+  ifneq ($(wildcard /opt/local/include/png.h),)
+      PNGINCL=-I/opt/local/include
+  else
+      PNGINCL := $(shell libpng-config --I_opts  || true)
+#       $(info using libpng-config to set PNGINCL: ${PNGINCL})
+  endif
+endif
+
+# autodetect where mysql includes and libraries are installed
+# do not need to do this during 'clean' target (this is very slow for 'clean')
+ifneq ($(MAKECMDGOALS),clean)
+  # on hgwdev, use the static library.
+  ifeq (${FULLWARN},hgwdev)
+    MYSQLINC=/usr/include/mysql
+    MYSQLLIBS=/usr/lib64/libssl.a /usr/lib64/libcrypto.a /usr/lib64/mysql/libmysqlclient.a -lkrb5
+  endif
+  # this does *not* work on Mac OSX with the dynamic libraries
+  ifneq ($(UNAME_S),Darwin)
+    ifeq (${MYSQLLIBS},)
+      MYSQLLIBS := $(shell mysql_config --libs || true)
+#        $(info using mysql_config to set MYSQLLIBS: ${MYSQLLIBS})
+    endif
+  endif
+
+  ifeq (${MYSQLINC},)
+    MYSQLINC := $(shell mysql_config --include | sed -e 's/-I//' || true)
+#        $(info using mysql_config to set MYSQLINC: ${MYSQLINC})
+  endif
+  ifeq (${MYSQLINC},)
+    ifneq ($(wildcard /usr/local/mysql/include/mysql.h),)
+	  MYSQLINC=/usr/local/mysql/include
+    endif
+  endif
+  ifeq (${MYSQLINC},)
+    ifneq ($(wildcard /usr/include/mysql/mysql.h),)
+	  MYSQLINC=/usr/include/mysql
+    endif
+  endif
+  ifeq (${MYSQLINC},)
+    ifneq ($(wildcard /opt/local/include/mysql55/mysql/mysql.h),)
+	  MYSQLINC=/opt/local/include/mysql55/mysql
+    endif
+  endif
+  ifeq (${MYSQLLIBS},)
+    ifneq ($(wildcard /usr/lib64/mysql/libmysqlclient.a),)
+	  MYSQLLIBS=/usr/lib64/mysql/libmysqlclient.a
+    endif
+  endif
+  ifeq (${MYSQLLIBS},)
+    ifneq ($(wildcard /usr/local/mysql/lib/libmysqlclient.a),)
+	  MYSQLLIBS=/usr/local/mysql/lib/libmysqlclient.a
+    endif
+  endif
+  ifeq (${MYSQLLIBS},)
+    ifneq ($(wildcard /usr/local/mysql/lib/libmysqlclient.a),)
+	  MYSQLLIBS=/usr/local/mysql/lib/libmysqlclient.a
+    endif
+  endif
+  ifeq (${MYSQLLIBS},)
+    ifneq ($(wildcard /usr/lib64/mysql/libmysqlclient.so),)
+	  MYSQLLIBS=/usr/lib64/mysql/libmysqlclient.so
+    endif
+  endif
+  ifeq (${MYSQLLIBS},)
+    ifneq ($(wildcard /usr/lib/libmysqlclient.a),)
+	  MYSQLLIBS=/usr/lib/libmysqlclient.a
+    endif
+  endif
+  ifeq (${MYSQLLIBS},)
+    ifneq ($(wildcard /opt/local/lib/mysql55/mysql/libmysqlclient.a),)
+	  MYSQLLIBS=/opt/local/lib/mysql55/mysql/libmysqlclient.a
+    endif
+  endif
+  ifeq (${MYSQLLIBS},)
+    ifneq ($(wildcard /usr/local/Cellar/mysql/5.6.19/lib/libmysqlclient.a),)
+	  MYSQLLIBS=/usr/local/Cellar/mysql/5.6.19/lib/libmysqlclient.a
+    endif
+  endif
+  ifeq (${MYSQLLIBS},)
+    ifneq ($(wildcard /usr/local/Cellar/mysql/5.6.16/lib/libmysqlclient.a),)
+	  MYSQLLIBS=/usr/local/Cellar/mysql/5.6.16/lib/libmysqlclient.a
+    endif
+  endif
+  ifeq ($(findstring src/hg/,${CURDIR}),src/hg/)
+    ifeq (${MYSQLINC},)
+        $(error can not find installed mysql development system)
+    endif
+  endif
+    # last resort, hoping the compiler can find it in standard locations
+  ifeq (${MYSQLLIBS},)
+      MYSQLLIBS="-lmysqlclient"
+  endif
+endif
+
+# $(info have MYSQLINC: ${MYSQLINC})
+# $(info have MYSQLLIBS: ${MYSQLLIBS})
+
+# OK to add -lstdc++ to all MYSQLLIBS just in case it is
+#    MySQL version 5.6 libraries, but no 'librt' on Mac OSX
+ifeq (${FULLWARN},hgwdev)
+  MYSQLLIBS += /usr/lib/gcc/x86_64-redhat-linux/4.4.4/libstdc++.a /usr/lib/debug/usr/lib64/librt.a
+else
+  ifeq ($(UNAME_S),Darwin)
+    MYSQLLIBS += -lstdc++
+  else
+    MYSQLLIBS += -lstdc++ -lrt
+  endif
+endif
+
+L+=${PNGLIB}
+HG_INC+=${PNGINCL}
+
+# 32-bit color enabled by default
+ifneq (${COLOR32},0)
+    HG_DEFS+=-DCOLOR32
+endif
+
+# autodetect UCSC installation of samtabix:
+ifeq (${SAMTABIXDIR},)
+    SAMTABIXDIR = /hive/data/outside/samtabix/${MACHTYPE}
+    ifneq ($(wildcard ${SAMTABIXDIR}),)
+        ifeq (${USE_SAMTABIX},)
+          USE_SAMTABIX=1
+        endif
+    endif
+endif
+
+# pass through COREDUMP
+ifneq (${COREDUMP},)
+    HG_DEFS+=-DCOREDUMP
+endif
+
+# autodetect UCSC additional source code with password for some external tracks on gbib
+GBIBDIR = /hive/groups/browser/gbib/
+ifneq ($(wildcard ${GBIBDIR}/*.c),)
+  HG_DEFS+=-DUSE_GBIB_PWD
+  HG_INC += -I${GBIBDIR}
+endif
+
+# libsamtabix (samtools + tabix + Angie's KNETFILE_HOOKS extension to it): disabled by default
+ifeq (${USE_SAMTABIX},1)
+    KNETFILE_HOOKS=1
+    USE_BAM=1
+    USE_TABIX=1
+    ifeq (${SAMTABIXINC},)
+        SAMTABIXINC = ${SAMTABIXDIR}
+    endif
+    ifeq (${SAMTABIXLIB},)
+        SAMTABIXLIB = ${SAMTABIXDIR}/libsamtabix.a
+    endif
+    HG_INC += -I${SAMTABIXINC}
+    L+=${SAMTABIXLIB} -lz
+    HG_DEFS+=-DUSE_SAMTABIX -DUSE_BAM -DUSE_TABIX -DKNETFILE_HOOKS
+else
+  # Deprecated but supported for mirrors, for now: independent samtools and tabix libs
+
+  # libbam (samtools, and Angie's KNETFILE_HOOKS extension to it): disabled by default
+  ifeq (${USE_BAM},1)
+      ifeq (${SAMINC},)
+          SAMINC = ${SAMDIR}
+      endif
+      ifeq (${SAMLIB},)
+          SAMLIB = ${SAMDIR}/libbam.a
+      endif
+      HG_INC += -I${SAMINC}
+      L+=${SAMLIB}
+      HG_DEFS+=-DUSE_BAM
+      ifeq (${KNETFILE_HOOKS},1)
+          HG_DEFS+=-DKNETFILE_HOOKS
+      endif
+  endif
+
+  # libtabix and Angie's KNETFILE_HOOKS extension to it: disabled by default
+  ifeq (${USE_TABIX},1)
+      ifeq (${TABIXINC},)
+          TABIXINC = ${TABIXDIR}
+      endif
+      ifeq (${TABIXLIB},)
+          TABIXLIB = ${TABIXDIR}/libtabix.a
+      endif
+      HG_INC += -I${TABIXINC}
+      L+=${TABIXLIB} -lz
+      HG_DEFS+=-DUSE_TABIX
+      ifeq (${KNETFILE_HOOKS},1)
+	HG_DEFS+=-DKNETFILE_HOOKS
+      endif
+  endif
+endif
+
+SYS = $(shell uname -s)
+
+ifeq (${HG_WARN},)
+  ifeq (${SYS},Darwin)
+      HG_WARN = -Wall -Wno-unused-variable -Wno-deprecated-declarations
+      HG_WARN_UNINIT=
+  else
+    ifeq (${SYS},SunOS)
+      HG_WARN = -Wall -Wformat -Wimplicit -Wreturn-type
+      HG_WARN_UNINIT=-Wuninitialized
+    else
+      ifeq (${FULLWARN},hgwdev)
+        HG_WARN = -Wall -Werror -Wformat -Wformat-security -Wimplicit -Wreturn-type -Wempty-body
+        HG_WARN_UNINIT=-Wuninitialized
+      else
+        HG_WARN = -Wall -Wformat -Wimplicit -Wreturn-type
+        HG_WARN_UNINIT=-Wuninitialized
+      endif
+    endif
+  endif
+  # -Wuninitialized generates a warning without optimization
+  ifeq ($(findstring -O,${COPT}),-O)
+     HG_WARN += ${HG_WARN_UNINIT}
+  endif
+endif
+
+# this is to hack around many make files not including HG_WARN in
+# the link line
+CFLAGS += ${HG_WARN}
+
+ifeq (${SCRIPTS},)
+    SCRIPTS=${HOME}/bin/scripts
+endif
+ifeq (${CGI_BIN},)
+    CGI_BIN=/usr/local/apache/cgi-bin
+endif
+ifeq (${DOCUMENTROOT},)
+    DOCUMENTROOT=/usr/local/apache/htdocs
+endif
+ifeq (${BINDIR},)
+    BINDIR = ${HOME}/bin/${MACHTYPE}
+endif
+ifeq (${ENCODE_PIPELINE_BIN},)
+    ENCODE_PIPELINE_BIN=/cluster/data/encode/pipeline/bin
+endif
+
+# avoid an extra leading slash when DESTDIR is empty
+ifeq (${DESTDIR},)
+  DESTBINDIR=${BINDIR}
+else
+  DESTBINDIR=${DESTDIR}/${BINDIR}
+endif
+
+# location of stringify program
+STRINGIFY = ${DESTBINDIR}/stringify
+
+MKDIR=mkdir -p
+ifeq (${STRIP},)
+   STRIP=true
+endif
+CVS=cvs
+GIT=git
+
+# portable naming of compiled executables: add ".exe" if compiled on 
+# Windows (with cygwin).
+ifeq (${OS}, Windows_NT)
+  AOUT=a
+  EXE=.exe
+else
+  AOUT=a.out
+  EXE=
+endif
+
+#Lowelab defines
+#The lowelab specific code will be included in compilation if the following conditions are satistied
+LOWELAB_WIKI_DEF=
+LOWELAB_DEF=
+ifdef LOWELAB
+    LOWELAB_WIKI=1
+    LOWELAB_DEF=-DLOWELAB
+endif
+ifdef LOWELAB_WIKI
+    LOWELAB_WIKI_DEF=-DLOWELAB_WIKI
+endif
+LOWELAB_DEFS=${LOWELAB_DEF} ${LOWELAB_WIKI_DEF}
+
+ifdef LOWELAB
+    ifeq (${SCRIPTS},/cluster/bin/scripts)
+        SCRIPTS=${HOME}/scripts
+    endif
+    ifeq (${CGI_BIN},/usr/local/apache/cgi-bin)
+        CGI_BIN=/www/cgi-bin
+    endif
+    ifeq (${DOCUMENTROOT},/usr/local/apache/htdocs)
+        DOCUMENTROOT=/www/browser-docs
+    endif
+endif
+
+#ENCODE COMMON VARIABLES
+CONFIG_FILES = \
+	fields.ra \
+	labs.ra
+CV = cv.ra
+CVDIR=${HOME}/kent/src/hg/makeDb/trackDb/cv/alpha
+PIPELINE_PATH=/hive/groups/encode/dcc/pipeline
+CONFIG_DIR = ${PIPELINE_PATH}/${PIPELINE_DIR}/config
+ENCODEDCC_DIR = ${PIPELINE_PATH}/downloads/encodeDCC
+
+%.o: %.c
+	${CC} ${COPT} ${CFLAGS} ${HG_DEFS} ${LOWELAB_DEFS} ${HG_WARN} ${HG_INC} ${XINC} -o $@ -c $<
+
+# jshint: off unless JSHINT is already in environment
+ifeq (${JSHINT},)
+    JSHINT=true
+endif
diff --git a/gbtools/src/include/blatSrc/correlate.h b/gbtools/src/include/blatSrc/correlate.h
new file mode 100644
index 0000000..7bb4858
--- /dev/null
+++ b/gbtools/src/include/blatSrc/correlate.h
@@ -0,0 +1,39 @@
+/* correlate - calculate r, also known as Pearson's correlation
+ * coefficient.  r*r has the nice property that it explains
+ * how much of one variable's variation can be explained as
+ * a linear function of the other variable's variation. */
+#ifndef CORRELATE_H
+#define CORRELATE_H
+
+struct correlate
+/* This helps manage correlations. */
+    {
+    struct correlate *next;	/* Next in list */
+    double sumX;		/* Sum of all X's so far. */
+    double sumY;		/* Sum of all Y's so far. */
+    double sumXY;		/* Sum of all X*Y */
+    double sumXX;		/* Sum of all X*X */
+    double sumYY;		/* Sum of all Y*Y */
+    long long n;		/* Number of samples. */
+    };
+
+struct correlate *correlateNew();
+/* Return new correlation handler. */
+
+void correlateFree(struct correlate **pC);
+/* Free up correlator. */
+
+void correlateNext(struct correlate *c, double x, double y);
+/* Add next sample to correlation. */
+
+void correlateNextMulti(struct correlate *c, double x, double y, int count);
+/* Do same thing as calling correlateNext with x and y count times. */
+
+double correlateResult(struct correlate *c);
+/* Returns correlation (aka R) */
+
+double correlateArrays(double *x, double *y, int size);
+/* Return correlation of two arrays of doubles. */
+
+#endif /* CORRELATE_H */
+
diff --git a/gbtools/src/include/blatSrc/crTree.h b/gbtools/src/include/blatSrc/crTree.h
new file mode 100644
index 0000000..1e8643b
--- /dev/null
+++ b/gbtools/src/include/blatSrc/crTree.h
@@ -0,0 +1,90 @@
+/* crTree chromosome r tree. This module creates and uses a disk-based index that can find items
+ * that overlap with a chromosome range - something of the form chrN:start-end - with a
+ * minimum of disk access.  It is implemented with a combination of bPlusTrees and r-trees. 
+ * The items being indexed can overlap with each other.  
+ * 
+ * There's two main sides to using this module - creating an index, and using it.
+ *
+ * The first step of index creation is actually to insure that the file being indexed
+ * is ordered by chromosome,start,end.  For a .bed file you can insure this
+ * with the command:
+ *     sort -k1,1 -k2,2n -k3,3n unsorted.bed > sorted.bed
+ * Note that the the chromosome field is sorted alphabetically and the start and end
+ * fields are sorted numerically.
+ *
+ * Once this is done then the index creation program scans the input file, and
+ * makes a list of crTreeItems, one for each item in the file. A crTreeItem just 
+ * contains the chromosome range and file offset for an item. In the process of scanning, 
+ * build up a hash containing the chromosome names (using hashStoreName) rather than allocating
+ * a separate string for each chromosome name in each item.  Pass the list and the
+ * hash to crTreeFileCreate.
+ *
+ * Using an index is done in two steps.  First you open the index with crTreeFileOpen,
+ * and then you use crTreeFindOverlappingBlocks to find parts of the file the overlap
+ * with your query range.  The result of a crTreeFindOverlappingBlocks call is a list
+ * of regions in the file.  These regions typically include some non-overlapping items
+ * as well.  It is up to the caller to parse through the resulting region list to
+ * convert it from just bytes on disk into the memory data structure.  During this
+ * parsing you should ignore items that don't overlap your range of interest.
+ *
+ * The programs crTreeIndexBed and crTreeSearchBed create and search a crTree index
+ * for a bed file, and are useful examples to view for other programs that want to
+ * use the crTree system. */
+
+#ifndef CRTREE_H
+#define CRTREE_H
+
+struct crTreeFile
+/* Chromosome R tree index file handle. */
+    {
+    struct crTreeFile *next;	/* Next in list of index files if any. */
+    char *fileName;		/* Name of file - for better error reporting. */
+    struct udcFile *udc;			/* Open file handle. */
+    struct bptFile *chromBpt;	/* Index of chromosomes. */
+    struct cirTreeFile *cir;	/* Index of ranges. */
+    boolean isSwapped;		/* If TRUE need to byte swap everything. */
+    bits64 chromOffset;		/* Offset of chromosome index. */
+    bits64 cirOffset;		/* Offset of range index. */
+    };
+
+struct crTreeFile *crTreeFileOpen(char *fileName);
+/* Open up r-tree index file - reading headers and verifying things. */
+
+void crTreeFileClose(struct crTreeFile **pCrt);
+/* Close and free up crTree file opened with crTreeFileAttach. */
+
+struct fileOffsetSize *crTreeFindOverlappingBlocks(struct crTreeFile *crt, 
+	char *chrom, bits32 start, bits32 end);
+/* Return list of file blocks that between them contain all items that overlap
+ * start/end on chromIx.  Also there will be likely some non-overlapping items
+ * in these blocks too. When done, use slListFree to dispose of the result. */
+
+struct crTreeItem
+/* A chromosome and an interval inside it. */
+    {
+    struct crTreeItem *next;  /* Next in singly linked list. */
+    char *chrom;	/* Name of chromosome not allocated here. */
+    bits32 start;	/* Start position in chromosome. */
+    bits32 end;	/* One past last base in interval in chromosome. */
+    bits64 fileOffset;	/* Offset of item in file we are indexing. */
+    };
+
+void crTreeFileCreateInputCheck(struct crTreeItem *itemList, struct hash *chromHash, 
+	bits32 blockSize, bits32 itemsPerSlot, bits64 endPosition, char *fileName);
+/* Do sanity checking on itemList and chromHash and endPosition.  Make sure that itemList is
+ * sorted properly mostly. */
+
+void crTreeFileCreate(
+	struct crTreeItem *itemList,  /* List of all items - sorted here and in underlying file. */
+	struct hash *chromHash,	      /* Hash of all chromosome names. */
+	bits32 blockSize,	/* R tree block size - # of children for each node. 1024 is good. */
+	bits32 itemsPerSlot,	/* Number of items to put in each index slot at lowest level.
+				 * Typically either blockSize/2 or 1. */
+	bits64 endPosition,	/* File offset after have read all items in file. */
+	char *fileName);        /* Name of output file. */
+/* Create a cr tree index of file. The itemList contains the position of each item in the
+ * chromosome and in the file being indexed.  Both the file and the itemList must be sorted
+ * by chromosome (alphabetic), start (numerical), end (numerical). */
+
+#endif /* CRTREE_H */
+
diff --git a/gbtools/src/include/blatSrc/crudeali.h b/gbtools/src/include/blatSrc/crudeali.h
new file mode 100644
index 0000000..41f0cb7
--- /dev/null
+++ b/gbtools/src/include/blatSrc/crudeali.h
@@ -0,0 +1,26 @@
+/*****************************************************************************
+ * Copyright (C) 2000 Jim Kent.  This source code may be freely used         *
+ * for personal, academic, and non-profit purposes.  Commercial use          *
+ * permitted only by explicit agreement with Jim Kent (jim_kent at pacbell.net) *
+ *****************************************************************************/
+/* crudeAli.h - Interface to the fast, crude blast-like aligner. */
+
+#ifndef CRUDEALI_H
+#define CRUDEALI_H
+
+struct crudeAli
+/* Stored info on a crude alignment. */
+    {
+    struct crudeAli *next;
+    int chromIx;
+    int start, end;
+    int score;
+    char strand;
+    int qStart, qEnd;
+    };
+
+struct crudeAli *crudeAliFind(DNA *probe, int probeSize, struct nt4Seq **chrome, int chromeCount, int tileSize, int minScore);
+/* Returns a list of crude alignments.  (You can free this with slFreeList() */
+
+#endif /* CRUDEALI_H */
+
diff --git a/gbtools/src/include/blatSrc/diGraph.h b/gbtools/src/include/blatSrc/diGraph.h
new file mode 100644
index 0000000..58f43f4
--- /dev/null
+++ b/gbtools/src/include/blatSrc/diGraph.h
@@ -0,0 +1,202 @@
+/* diGraph - Directed graph routines. */
+#ifndef DIGRAPH_H
+#define DIGRAPH_H
+
+#ifndef DLIST_H
+#include "dlist.h"
+#endif
+
+struct diGraph
+/* A directed graph. */
+    {
+    struct dgNode *nodeList;
+    struct hash *nodeHash;
+    struct dlList *edgeList;
+    };
+
+struct dgNode
+/* A node on a directed graph */
+    {
+    struct dgNode *next;   /* Next in master node list. */
+    char *name;            /* Name of node (allocated in hash). */
+    void *val;             /* Value of node. */
+    struct dgConnection *nextList;  /* Ways out of node. */
+    struct dgConnection *prevList;  /* Ways into node. */
+    int topoOrder;      /* Topographical order after call to dgTopoSort. */
+    int component;      /* Connected component number after call to dgConnectedComponents. */
+    int priority;       /* Node priority. */
+    struct dgNode *tempEntry;  /* Way in for breadth first search */
+    bool visited;       /* Visit order in depth first traversal. */
+    bool conn;	        /* Flag for connection algorithms. */
+    bool flagA;         /* Flag used in rangeGraph algorithms. */
+    bool flagB;         /* Currently unused flag. */
+    };
+
+struct dgEdge
+/* An edge on graph */
+    {
+    void *val;		/* Value of edge. */
+    struct dgNode *a;   /* Node on incoming side. */
+    struct dgNode *b;   /* Node on outgoing side. */
+    };
+
+struct dgConnection
+/* Connects one node to another. Linked to edge. */
+    {
+    struct dgConnection *next;  /* Next in list. */
+    struct dgNode *node;        /* Node this connects to. */
+    struct dlNode *edgeOnList;  /* Associated edge. */
+    };
+
+struct dgNodeRef
+/* A reference to a node. */
+    {
+    struct dgNodeRef *next;	/* Next in list. */
+    struct dgNode *node;        /* Pointer to node. */
+    };
+
+struct dgEdgeRef
+/* A reference to an edge. */
+    {
+    struct dgEdgeRef *next;	/* Next in list. */
+    struct dgEdge *edge;        /* Reference to edge. */
+    };
+
+struct diGraph *dgNew();
+/* Return a new directed graph object. */
+
+void dgFree(struct diGraph **pGraph);
+/* Free a directed graph. */
+
+struct dgNode *dgAddNode(struct diGraph *dg, char *name, void *val);
+/* Create new node in graph. */
+
+struct dgNode *dgAddNumberedNode(struct diGraph *dg, int id, void *val);
+/* Create new node with a number instead of a name. */
+ 
+struct dgNode *dgFindNode(struct diGraph *dg, char *name);
+/* Find existing node in graph. */
+
+struct dgNode *dgFindNumberedNode(struct diGraph *dg, int id);
+/* Find node given number. */
+
+void *dgNodeVal(struct dgNode *node);
+/* Return value associated with node. */
+
+void *dgNodeName(struct dgNode *node);
+/* Return name associated with node. */
+
+int dgNodeNumber(struct dgNode *node);
+/* Return number of node.  (Will likely return 0 if node
+ * was added with a name rather than a number). */
+
+struct dgEdge *dgConnect(struct diGraph *dg, struct dgNode *a, struct dgNode *b);
+/* Connect node a to node b.  Returns connecting edge. */
+
+struct dgEdge *dgConnectWithVal(struct diGraph *dg, struct dgNode *a, struct dgNode *b, void *val);
+/* Connect node a to node b and put val on edge. */
+
+void dgDisconnect(struct diGraph *dg, struct dgNode *a, struct dgNode *b);
+/* Disconnect nodes a and b. */
+
+struct dgEdge *dgDirectlyFollows(struct diGraph *dg, struct dgNode *a, struct dgNode *b);
+/* Return TRUE if b directly follows a. */
+
+boolean dgPathExists(struct diGraph *dg, struct dgNode *a, struct dgNode *b);
+/* Return TRUE if there's a path from a to b. */
+
+struct dgNodeRef *dgFindPath(struct diGraph *dg, struct dgNode *a, struct dgNode *b);
+/* Find shortest path from a to b.  Return NULL if can't be found. */
+
+struct dgNodeRef *dgFindConnectedToNode(struct diGraph *dg, struct dgNode *a);
+/* Return reference list of all nodes connected to a, including a.
+ * slFreeList this list when done. */
+
+struct dgNodeRef *dgFindNewConnected(struct diGraph *dg, struct dgNode *a);
+/* Find a connected component guaranteed not to be covered before 
+ * that includes a. */
+
+struct dgNodeRef *dgFindNewConnectedWithVals(struct diGraph *dg, struct dgNode *a);
+/* Find a connected component guaranteed not to be covered before 
+ * that includes a.  Connected components must have values*/
+
+struct dgNodeRef *dgFindNextConnected(struct diGraph *dg);
+/* Return list of nodes that make up next connected component,
+ * or NULL if no more components.  slFreeList this when
+ * done.  Call "dgClearConnFlags" before first call to this.
+ * Do not call dgFindConnectedToNode between dgFindFirstConnected 
+ * and this as they use the same flag variables to keep track of
+ * what vertices are used. */
+
+struct dgNodeRef *dgFindNextConnectedWithVals(struct diGraph *dg);
+/* Like dgFindConnected, but only considers graph nodes that
+ * have a val attached. */
+
+int dgConnectedComponents(struct diGraph *dg);
+/* Count number of connected components and set component field
+ * of each node to reflect which component it is in. */
+
+int dgConnectedComponentsWithVals(struct diGraph *dg);
+/* Count number of connected components and set component field
+ * of each node to reflect which component it is in. Only
+ * consider components with values. */
+
+void dgTopoSort(struct diGraph *dg);
+/* Fill in topological order of nodes. */
+
+boolean dgHasCycles(struct diGraph *dg);
+/* Return TRUE if directed graph has cycles. */
+
+boolean dgParentsAllVisited(struct dgNode *node);
+/* Return TRUE if all parents of node have  been visited. */
+
+struct dgNodeRef *dgConstrainedPriorityOrder(struct diGraph *dg);
+/* Return traversal of graph in priority order subject to
+ * constraint that all parents must be output before
+ * their children regardless of node priority. 
+ * Graph must be cycle free. */
+
+boolean dgRangesConsistent(struct diGraph *rangeGraph,
+   boolean (*findEdgeRange)(struct dgEdge *edge, int *retMin, int *retMax) );
+/* Return TRUE if graph with a range of allowable distances associated
+ * with each edge is internally consistent. */
+
+boolean dgAddedRangeConsistent(struct diGraph *rangeGraph,
+   struct dgNode *a, struct dgNode *b, int abMin, int abMax,
+   boolean (*findEdgeRange)(struct dgEdge *edge, int *retMin, int *retMax) );
+/* Return TRUE if graph with a range of allowable distances associated
+ * with each edge would be internally consistent if add edge from a to b
+ * with given min/max values. */
+
+struct dgEdgeRef *dgFindSubEdges(struct diGraph *dg, struct dgNodeRef *subGraph);
+/* Return list of edges in graph that connected together nodes in subGraph. */
+
+void dgSwapEdges(struct diGraph *dg, struct dgEdgeRef *erList);
+/* Swap polarity of all edges in erList.  (Assumes you don't have
+ * edges going both directions in graph.) */
+
+void dgClearConnFlags(struct diGraph *dg);
+/* Clear out conn flags. */
+
+void dgClearVisitFlags(struct diGraph *dg);
+/* Clear out visit order flags. */
+
+struct dgNodeRef *dgFindNodeInRefList(struct dgNodeRef *refList, struct dgNode *node);
+/* Return reference to node if in list, or NULL if not. */
+
+struct dgConnection *dgFindNodeInConList(struct dgConnection *conList, struct dgNode *node);
+/* Return connection to node if in list, or NULL if not. */
+
+struct dgConnection *dgNextList(struct dgNode *node);
+/* Return list of connections out of this node. Don't free (or rearrange)
+ * this list please. */
+
+struct dgConnection *dgPrevList(struct dgNode *node);
+/* Return list of connections into this node. Don't free (or rearrange)
+ * this list please. */
+
+void dgDumpGraph(struct diGraph *dg, FILE *out, boolean hideIsolated);
+/* Dump info on graph to output. */
+
+#endif /* DIGRAPH_H */
+
diff --git a/gbtools/src/include/blatSrc/diGraph.h.97 b/gbtools/src/include/blatSrc/diGraph.h.97
new file mode 100644
index 0000000..f8fc310
--- /dev/null
+++ b/gbtools/src/include/blatSrc/diGraph.h.97
@@ -0,0 +1,210 @@
+/* diGraph - Directed graph routines. */
+#ifndef DIGRAPH_H
+#define DIGRAPH_H
+
+#ifndef DLIST_H
+#include "dlist.h"
+#endif
+
+struct diGraph
+/* A directed graph. */
+    {
+    struct dgNode *nodeList;
+    struct hash *nodeHash;
+    struct dlList *edgeList;
+    };
+
+struct dgNode
+/* A node on a directed graph */
+    {
+    struct dgNode *next;   /* Next in master node list. */
+    char *name;            /* Name of node (allocated in hash). */
+    void *val;             /* Value of node. */
+    struct dgConnection *nextList;  /* Ways out of node. */
+    struct dgConnection *prevList;  /* Ways into node. */
+    int topoOrder;      /* Topographical order after call to dgTopoSort. */
+    int component;      /* Connected component number after call to dgConnectedComponents. */
+    int priority;       /* Node priority. */
+    struct dgNode *tempEntry;  /* Way in for breadth first search */
+    bool visited;       /* Visit order in depth first traversal. */
+    bool conn;	        /* Flag for connection algorithms. */
+    bool flagA;         /* Flag used in rangeGraph algorithms. */
+    bool flagB;         /* Currently unused flag. */
+    };
+
+struct dgEdge
+/* An edge on graph */
+    {
+    void *val;		/* Value of edge. */
+    struct dgNode *a;   /* Node on incoming side. */
+    struct dgNode *b;   /* Node on outgoing side. */
+    bool unflippable;	/* True if can't flip this edge (specialized ooGreedy thing really) */
+    };
+
+struct dgConnection
+/* Connects one node to another. Linked to edge. */
+    {
+    struct dgConnection *next;  /* Next in list. */
+    struct dgNode *node;        /* Node this connects to. */
+    struct dlNode *edgeOnList;  /* Associated edge. */
+    };
+
+struct dgNodeRef
+/* A reference to a node. */
+    {
+    struct dgNodeRef *next;	/* Next in list. */
+    struct dgNode *node;        /* Pointer to node. */
+    };
+
+struct dgEdgeRef
+/* A reference to an edge. */
+    {
+    struct dgEdgeRef *next;	/* Next in list. */
+    struct dgEdge *edge;        /* Reference to edge. */
+    };
+
+struct diGraph *dgNew();
+/* Return a new directed graph object. */
+
+void dgFree(struct diGraph **pGraph);
+/* Free a directed graph. */
+
+struct dgNode *dgAddNode(struct diGraph *dg, char *name, void *val);
+/* Create new node in graph. */
+
+struct dgNode *dgAddNumberedNode(struct diGraph *dg, int id, void *val);
+/* Create new node with a number instead of a name. */
+ 
+struct dgNode *dgFindNode(struct diGraph *dg, char *name);
+/* Find existing node in graph. */
+
+struct dgNode *dgFindNumberedNode(struct diGraph *dg, int id);
+/* Find node given number. */
+
+void *dgNodeVal(struct dgNode *node);
+/* Return value associated with node. */
+
+void *dgNodeName(struct dgNode *node);
+/* Return name associated with node. */
+
+int dgNodeNumber(struct dgNode *node);
+/* Return number of node.  (Will likely return 0 if node
+ * was added with a name rather than a number). */
+
+struct dgEdge *dgConnect(struct diGraph *dg, struct dgNode *a, struct dgNode *b);
+/* Connect node a to node b.  Returns connecting edge. */
+
+struct dgEdge *dgConnectWithVal(struct diGraph *dg, struct dgNode *a, struct dgNode *b, void *val);
+/* Connect node a to node b and put val on edge. */
+
+struct dgEdge *dgConnectUnflippable(struct diGraph *dg, struct dgNode *a, struct dgNode *b,
+    void *val);
+/* Connect a to b with an edge than can't be flipped. */
+
+void dgDisconnect(struct diGraph *dg, struct dgNode *a, struct dgNode *b);
+/* Disconnect nodes a and b. */
+
+struct dgEdge *dgDirectlyFollows(struct diGraph *dg, struct dgNode *a, struct dgNode *b);
+/* Return TRUE if b directly follows a. */
+
+boolean dgPathExists(struct diGraph *dg, struct dgNode *a, struct dgNode *b);
+/* Return TRUE if there's a path from a to b. */
+
+struct dgNodeRef *dgFindPath(struct diGraph *dg, struct dgNode *a, struct dgNode *b);
+/* Find shortest path from a to b.  Return NULL if can't be found. */
+
+struct dgNodeRef *dgFindConnectedToNode(struct diGraph *dg, struct dgNode *a);
+/* Return reference list of all nodes connected to a, including a.
+ * slFreeList this list when done. */
+
+struct dgNodeRef *dgFindNewConnected(struct diGraph *dg, struct dgNode *a);
+/* Find a connected component guaranteed not to be covered before 
+ * that includes a. */
+
+struct dgNodeRef *dgFindNewFlippableConnected(struct diGraph *dg, struct dgNode *a);
+/* Find a connected component guaranteed not to be covered before 
+ * that includes a.  Connected components must be connected by flippable
+ * edges. */
+
+struct dgNodeRef *dgFindNextConnected(struct diGraph *dg);
+/* Return list of nodes that make up next connected component,
+ * or NULL if no more components.  slFreeList this when
+ * done.  Call "dgClearConnFlags" before first call to this.
+ * Do not call dgFindConnectedToNode between dgFindFirstConnected 
+ * and this as they use the same flag variables to keep track of
+ * what vertices are used. */
+
+struct dgNodeRef *dgFindNextFlippableConnected(struct diGraph *dg);
+/* Like dgFindConnected, but only considers graph nodes that
+ * are conencted by a flippable edge. */
+
+int dgConnectedComponents(struct diGraph *dg);
+/* Count number of connected components and set component field
+ * of each node to reflect which component it is in. */
+
+int dgConnectedFlippableComponents(struct diGraph *dg);
+/* Count number of connected components and set component field
+ * of each node to reflect which component it is in. Only
+ * consider components connected by flippable edges. */
+
+void dgTopoSort(struct diGraph *dg);
+/* Fill in topological order of nodes. */
+
+boolean dgHasCycles(struct diGraph *dg);
+/* Return TRUE if directed graph has cycles. */
+
+boolean dgParentsAllVisited(struct dgNode *node);
+/* Return TRUE if all parents of node have  been visited. */
+
+struct dgNodeRef *dgConstrainedPriorityOrder(struct diGraph *dg);
+/* Return traversal of graph in priority order subject to
+ * constraint that all parents must be output before
+ * their children regardless of node priority. 
+ * Graph must be cycle free. */
+
+boolean dgRangesConsistent(struct diGraph *rangeGraph,
+   boolean (*findEdgeRange)(struct dgEdge *edge, int *retMin, int *retMax) );
+/* Return TRUE if graph with a range of allowable distances associated
+ * with each edge is internally consistent. */
+
+boolean dgAddedRangeConsistent(struct diGraph *rangeGraph,
+   struct dgNode *a, struct dgNode *b, int abMin, int abMax,
+   boolean (*findEdgeRange)(struct dgEdge *edge, int *retMin, int *retMax) );
+/* Return TRUE if graph with a range of allowable distances associated
+ * with each edge would be internally consistent if add edge from a to b
+ * with given min/max values. */
+
+struct dgEdgeRef *dgFindSubEdges(struct diGraph *dg, struct dgNodeRef *subGraph,
+	boolean onlyFlippable);
+/* Return list of edges in graph that connected together nodes in subGraph. 
+ * Optionally return only flippable edges. */
+
+void dgSwapEdges(struct diGraph *dg, struct dgEdgeRef *erList);
+/* Swap polarity of all edges in erList.  (Assumes you don't have
+ * edges going both directions in graph.) */
+
+void dgClearConnFlags(struct diGraph *dg);
+/* Clear out conn flags. */
+
+void dgClearVisitFlags(struct diGraph *dg);
+/* Clear out visit order flags. */
+
+struct dgNodeRef *dgFindNodeInRefList(struct dgNodeRef *refList, struct dgNode *node);
+/* Return reference to node if in list, or NULL if not. */
+
+struct dgConnection *dgFindNodeInConList(struct dgConnection *conList, struct dgNode *node);
+/* Return connection to node if in list, or NULL if not. */
+
+struct dgConnection *dgNextList(struct dgNode *node);
+/* Return list of connections out of this node. Don't free (or rearrange)
+ * this list please. */
+
+struct dgConnection *dgPrevList(struct dgNode *node);
+/* Return list of connections into this node. Don't free (or rearrange)
+ * this list please. */
+
+void dgDumpGraph(struct diGraph *dg, FILE *out, boolean hideIsolated);
+/* Dump info on graph to output. */
+
+#endif /* DIGRAPH_H */
+
diff --git a/gbtools/src/include/blatSrc/dlist.h b/gbtools/src/include/blatSrc/dlist.h
new file mode 100644
index 0000000..27cd226
--- /dev/null
+++ b/gbtools/src/include/blatSrc/dlist.h
@@ -0,0 +1,138 @@
+/* dlist.h - Headers for generic doubly-linked list routines. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#ifndef DLIST_H
+#define DLIST_H
+
+#ifndef COMMON_H
+#include "common.h"
+#endif
+
+struct dlNode
+/* An element on a doubly linked list. */
+    {
+    struct dlNode *next;
+    struct dlNode *prev;
+    void *val;
+    };
+
+struct dlList
+/* A doubly linked list. */
+    {
+    struct dlNode *head;
+    struct dlNode *nullMiddle;
+    struct dlNode *tail;
+    };
+
+#define dlEnd(node) (node->next == NULL)
+/* True if node past end. */
+
+#define dlStart(node) (node->prev == NULL)
+/* True if node before start. */
+
+/* Iterate on a doubly linked list as so:
+    for (el = list->head; !dlEnd(el); el = el->next)
+        val = el->val;
+   or
+    for (el = list->tail; !dlStart(el); el = el->prev)
+        val = el->val;
+ */
+
+struct dlList *newDlList();
+/* Return a new doubly linked list. */
+
+#define dlListNew newDlList
+/* Add object-first synonym. */
+
+void dlListInit(struct dlList *dl);
+/* Initialize list to be empty */
+
+void dlListReset(struct dlList *dl);
+/* Reset a list to the empty state (does not free values)  */
+
+void freeDlList(struct dlList **pList);
+/* Free up a doubly linked list and it's nodes (but not the node values). */
+#define dlListFree freeDlList
+
+void freeDlListAndVals(struct dlList **pList);
+/* Free all values in doubly linked list and the list itself.  (Just calls
+ * freeMem on all values. */
+#define dlListFreeAndVals freeDlListAndVals
+
+void dlAddBefore(struct dlNode *anchor, struct dlNode *newNode);
+/* Add a node to list before anchor member. */
+
+void dlAddAfter(struct dlNode *anchor, struct dlNode *newNode);
+/* Add a node to list after anchor member. */
+
+void dlAddHead(struct dlList *list, struct dlNode *newNode);
+/* Add a node to head of list. */
+
+void dlAddTail(struct dlList *list, struct dlNode *newNode);
+/* Add a node to tail of list. */
+
+struct dlNode *dlAddValBefore(struct dlNode *anchor, void *val);
+/* Create a node containing val and add to list before anchor member. */
+
+struct dlNode *dlAddValAfter(struct dlNode *anchor, void *val);
+/* Create a node containing val and add to list after anchor member. */
+
+struct dlNode *dlAddValHead(struct dlList *list, void *val);
+/* Create a node containing val and add to head of list. */
+
+struct dlNode *dlAddValTail(struct dlList *list, void *val);
+/* Create a node containing val and add to tail of list. */
+
+void dlRemove(struct dlNode *node);
+/* Removes a node from list. Node is not freed. */
+
+void dlRemoveHead(struct dlList *list);
+/* Removes head from list. Node is not freed. */
+
+void dlRemoveTail(struct dlList *list);
+/* Remove tail from list. Node is not freed.  */
+
+struct dlNode *dlPopHead(struct dlList *list);
+/* Remove first node from list and return it. */
+
+struct dlNode *dlPopTail(struct dlList *list);
+/* Remove last node from list and return it. */
+
+void dlDelete(struct dlNode **nodePtr);
+/* Removes a node from list and frees it. */
+
+int dlCount(struct dlList *list);
+/* Return length of list. */
+
+boolean dlEmpty(struct dlList *list);
+/* Return TRUE if list is empty. */
+
+#define dlIsEmpty(list) ((list)->head->next == NULL)
+/* Return TRUE if list is empty.  Macro version of above. */
+
+struct dlNode *dlGetBeforeHead(struct dlList *list);
+/* Get the node before the head of the list */
+
+struct dlNode *dlGetAfterTail(struct dlList *list);
+/* Get the node after the tail of the list */
+
+void dlSort(struct dlList *list, int (*compare )(const void *elem1,  const void *elem2));
+/* Sort a doubly linked list with Qsort and a temporary array. 
+ * The arguments to the compare function in real, non-void, life
+ * are pointers to pointers of the type that is in the val field of 
+ * the nodes of the list. */
+
+void *dlListToSlList(struct dlList *dList);
+/* Return slList from dlList. */
+
+void dlCat(struct dlList *a, struct dlList *b);
+/* Move items from b to end of a. */
+
+struct dlNode *dlValInList(struct dlList *list, void *val);
+/* Return node on list if any that has associated val. */
+
+#endif /* DLIST_H */
+
+
diff --git a/gbtools/src/include/blatSrc/dnaLoad.h b/gbtools/src/include/blatSrc/dnaLoad.h
new file mode 100644
index 0000000..dcd798b
--- /dev/null
+++ b/gbtools/src/include/blatSrc/dnaLoad.h
@@ -0,0 +1,40 @@
+/* dnaLoad - Load dna from a variaty of file formats. */
+
+#ifndef DNALOAD_H
+#define DNALOAD_H
+
+struct dnaLoad;		/* Structure we keep private. */
+
+struct dnaLoad *dnaLoadOpen(char *fileName);
+/* Return new DNA loader.  Call dnaLoadNext() on this until
+ * you get a NULL return, then dnaLoadClose(). */
+
+struct dnaSeq *dnaLoadNext(struct dnaLoad *dl);
+/* Return next dna sequence. */
+
+int dnaLoadCurStart(struct dnaLoad *dl);
+/* Returns the start offset of current sequence within a larger
+ * sequence.  Useful for programs that want to auto-lift
+ * nib and 2bit fragments.  Please call only after a
+ * sucessful dnaLoadNext. */
+
+int dnaLoadCurEnd(struct dnaLoad *dl);
+/* Returns the end offset of current sequence within a larger
+ * sequence.  Useful for programs that want to auto-lift
+ * nib and 2bit fragments.  Please call only after a
+ * sucessful dnaLoadNext. */
+
+int dnaLoadCurSize(struct dnaLoad *dl);
+/* Returns the size of the parent sequence.  Useful for
+ * auto-lift programs.  Please call only after dnaLoadNext. */
+
+void dnaLoadClose(struct dnaLoad **pDl);
+/* Free up resources associated with dnaLoad. */
+
+struct dnaSeq *dnaLoadAll(char *fileName);
+/* Return list of all DNA referenced in file.  File
+ * can be either a single fasta file, a single .2bit
+ * file, a .nib file, or a text file containing
+ * a list of the above files. DNA is mixed case. */
+
+#endif /* DNALOAD_H */
diff --git a/gbtools/src/include/blatSrc/dnaMarkov.h b/gbtools/src/include/blatSrc/dnaMarkov.h
new file mode 100644
index 0000000..552422f
--- /dev/null
+++ b/gbtools/src/include/blatSrc/dnaMarkov.h
@@ -0,0 +1,43 @@
+/* dnaMarkov - stuff to build 1st, 2nd, 3rd, and coding
+ * 3rd degree Markov models for DNA. */
+
+#ifndef DNAMARKOV_H
+#define DNAMARKOV_H
+
+void dnaMark0(struct dnaSeq *seqList, double mark0[5], int slogMark0[5]);
+/* Figure out frequency of bases in input.  Results go into
+ * mark0 and optionally in scaled log form into slogMark0.
+ * Order is N, T, C, A, G.  (TCAG is our normal order) */
+
+void dnaMark1(struct dnaSeq *seqList, double mark0[5], int slogMark0[5], 
+	double mark1[5][5], int slogMark1[5][5]);
+/* Make up 1st order Markov model - probability that one nucleotide
+ * will follow another. Input is sequence and 0th order Markov models.
+ * Output is first order Markov model. slogMark1 can be NULL. */
+
+void dnaMark2(struct dnaSeq *seqList, double mark0[5], int slogMark0[5],
+	double mark1[5][5], int slogMark1[5][5],
+	double mark2[5][5][5], int slogMark2[5][5][5]);
+/* Make up 1st order Markov model - probability that one nucleotide
+ * will follow the previous two. */
+
+void dnaMarkTriple(struct dnaSeq *seqList, 
+    double mark0[5], int slogMark0[5],
+    double mark1[5][5], int slogMark1[5][5],
+    double mark2[5][5][5], int slogMark2[5][5][5],
+    int offset, int advance, int earlyEnd);
+/* Make up a table of how the probability of a nucleotide depends on the previous two.
+ * Depending on offset and advance parameters this could either be a straight 2nd order
+ * Markov model, or a model for a particular coding frame. */
+
+char *dnaMark2Serialize(double mark2[5][5][5]);
+// serialize a 2nd order markov model
+
+void dnaMark2Deserialize(char *buf, double mark2[5][5][5]);
+// deserialize a 2nd order markov model from buf which was serialized with dnaMark2Serialize
+
+void dnaMarkMakeLog2(double mark2[5][5][5]);
+// convert a 2nd-order markov array to log2
+
+#endif /* DNAMARKOV_H */
+
diff --git a/gbtools/src/include/blatSrc/dnaMotif.h b/gbtools/src/include/blatSrc/dnaMotif.h
new file mode 100644
index 0000000..6d4f7b1
--- /dev/null
+++ b/gbtools/src/include/blatSrc/dnaMotif.h
@@ -0,0 +1,126 @@
+/* dnaMotif.h was originally generated by the autoSql program, which also 
+ * generated dnaMotif.c and dnaMotif.sql.  This header links the database and
+ * the RAM representation of objects. */
+
+#ifndef DNAMOTIF_H
+#define DNAMOTIF_H
+
+#ifndef DNAUTIL_H
+#include "dnautil.h"
+#endif
+
+struct dnaMotif
+/* A gapless DNA motif */
+{
+    struct dnaMotif *next;  /* Next in singly linked list. */
+    char *name; /* Motif name. */
+    int columnCount;    /* Count of columns in motif. */ 
+    float *aProb;       /* Probability of A's in each column. */ 
+    float *cProb;       /* Probability of C's in each column. */
+    float *gProb;       /* Probability of G's in each column. */
+    float *tProb;       /* Probability of T's in each column. */
+};
+
+struct dnaMotif *dnaMotifCommaIn(char **pS, struct dnaMotif *ret);
+/* Create a dnaMotif out of a comma separated string. 
+ * This will fill in ret if non-null, otherwise will
+ * return a new dnaMotif */
+
+void dnaMotifFree(struct dnaMotif **pEl);
+/* Free a single dynamically allocated dnaMotif such as created
+ * with dnaMotifLoad(). */
+
+void dnaMotifFreeList(struct dnaMotif **pList);
+/* Free a list of dynamically allocated dnaMotif's */
+
+void dnaMotifOutput(struct dnaMotif *el, FILE *f, char sep, char lastSep);
+/* Print out dnaMotif.  Separate fields with sep. Follow last field with lastSep. */
+
+#define dnaMotifTabOut(el,f) dnaMotifOutput(el,f,'\t','\n');
+/* Print out dnaMotif as a line in a tab-separated file. */
+
+#define dnaMotifCommaOut(el,f) dnaMotifOutput(el,f,',',',');
+/* Print out dnaMotif as a comma separated list including final comma. */
+
+float dnaMotifSequenceProb(struct dnaMotif *motif, DNA *dna);
+/* Return probability of dna according to motif.  Make sure
+ * motif is probabalistic (with call to dnaMotifMakeProbabalistic
+ * if you're not sure) before calling this. */
+
+char dnaMotifBestStrand(struct dnaMotif *motif, DNA *dna);
+/* Figure out which strand of DNA is better for probabalistic motif. */
+
+double dnaMotifBitScore(struct dnaMotif *motif, DNA *dna);
+/* Return logBase2-odds score of dna given a probabalistic motif. */
+
+double dnaMotifBitScoreWithMark0Bg(struct dnaMotif *motif, DNA *dna, double mark0[5]);
+/* Return logBase2-odds score of dna given a probabalistic motif and using a 0-order markov model for the background. */
+
+double dnaMotifBitScoreWithMarkovBg(struct dnaMotif *motif, DNA *dna, double mark2[5][5][5]);
+/* Return logBase2-odds score of dna given a probabalistic motif using a 2nd-order markov model for the background.
+   motif and markd2 must be in log2 format.
+   Seq must contain an extra two bases at the front (i.e. we start scoring from dna + 2). */
+
+void dnaMotifMakeLog2(struct dnaMotif *motif);
+
+void dnaMotifNormalize(struct dnaMotif *motif);
+/* Make all columns of motif sum to one. */
+
+boolean dnaMotifIsScoreBased(struct dnaMotif *motif);
+/* Return TRUE if dnaMotif is score-based (which we decide by
+ * the presense of negative values. */
+
+void dnaMotifScoreToProb(struct dnaMotif *motif);
+/* Convert motif that is log-odds score based to motif
+ * that is probability based.  This assumes that the
+ * background distribution is simple: 25% for each base */
+
+void dnaMotifMakeProbabalistic(struct dnaMotif *motif);
+/* Change motif, which may be score or count based, to 
+ * probabalistic one, where each column adds to 1.0 */
+
+double dnaMotifBitsOfInfo(struct dnaMotif *motif, int pos);
+/* Return bits of information at position. */
+
+void dnaMotifPrintProb(struct dnaMotif *motif, FILE *f);
+/* Print DNA motif probabilities. */
+
+void dnaMotifToLogoPs2(struct dnaMotif *motif, double widthPerBase, double height, 
+                       double minHeight, char *fileName);
+/* Write logo corresponding to motif to postScript file, with extended options. minHeight
+ * is the minimum height that is excluded from information content scaling.  This allows
+ * something to show up in columns with very little information content.  Setting this
+ * to be the same as height creates an frequency-based logo.
+ */
+
+void dnaMotifToLogoPs(struct dnaMotif *motif, double widthPerBase, double height, 
+	char *fileName);
+/* Write logo corresponding to motif to postScript file. */
+
+void dnaMotifToLogoPsW(struct dnaMotif *motif, double widthPerBase, double width,
+	double height, char *fileName);
+/* Write logo corresponding to motif to postScript file. 
+ * use the whole window width, rather than just incrementing
+ * by widthPerBase */
+
+void dnaMotifToLogoPng(
+	struct dnaMotif *motif,	/* Motif to draw. */
+	double widthPerBase, 	/* Width of each base. */
+	double height, 		/* Max height. */
+	char *gsExe, 		/* ghostscript executable, NULL for default */
+	char *tempDir,          /* temp dir , NULL for default */
+	char *fileName);	/* output png file name. */
+/* Write logo corresponding to motif to png file. */
+
+void dnaMotifToLogoPGM(
+	struct dnaMotif *motif,	/* Motif to draw. */
+	double widthPerBase, 	/* Width of each base. */
+	double width, 		/* Max width. */
+	double height, 		/* Max height. */
+	char *gsExe, 		/* ghostscript executable, NULL for default */
+	char *tempDir,          /* temp dir , NULL for default */
+	char *fileName);	/* output png file name. */
+/* Write logo corresponding to motif to PGM file. */
+
+#endif /* DNAMOTIF_H */
+
diff --git a/gbtools/src/include/blatSrc/dnaseq.h b/gbtools/src/include/blatSrc/dnaseq.h
new file mode 100644
index 0000000..164b1e9
--- /dev/null
+++ b/gbtools/src/include/blatSrc/dnaseq.h
@@ -0,0 +1,73 @@
+/* dnaSeq - stuff to manage DNA sequences. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#ifndef DNASEQ_H
+#define DNASEQ_H
+
+#ifndef DNAUTIL_H
+#include "dnautil.h"
+#endif
+
+#ifndef BITS_H
+#include "bits.h"
+#endif
+
+struct dnaSeq
+/* A dna sequence in one-character per base format. */
+    {
+    struct dnaSeq *next;  /* Next in list. */
+    char *name;           /* Name of sequence. */
+    DNA *dna;             /* Sequence base by base. */
+    int size;             /* Size of sequence. */
+    Bits* mask;           /* Repeat mask (optional) */
+    };
+
+typedef struct dnaSeq bioSeq;	/* Preferred use if either DNA or protein. */
+typedef struct dnaSeq aaSeq;	/* Preferred use if protein. */
+
+struct dnaSeq *newDnaSeq(DNA *dna, int size, char *name);
+/* Create a new DNA seq. */
+
+struct dnaSeq *cloneDnaSeq(struct dnaSeq *seq);
+/* Duplicate dna sequence in RAM. */
+
+void freeDnaSeq(struct dnaSeq **pSeq);
+/* Free up DNA seq.  */
+#define dnaSeqFree freeDnaSeq
+
+void freeDnaSeqList(struct dnaSeq **pSeqList);
+/* Free up list of DNA sequences. */
+#define dnaSeqFreeList freeDnaSeqList
+
+aaSeq *translateSeqN(struct dnaSeq *inSeq, unsigned offset, unsigned size, boolean stop);
+/* Return a translated sequence.  Offset is position of first base to
+ * translate. If size is 0 then use length of inSeq. */
+
+aaSeq *translateSeq(struct dnaSeq *inSeq, unsigned offset, boolean stop);
+/* Return a translated sequence.  Offset is position of first base to
+ * translate. If stop is TRUE then stop at first stop codon.  (Otherwise 
+ * represent stop codons as 'Z'). */
+
+boolean seqIsDna(bioSeq *seq);
+/* Make educated guess whether sequence is DNA or protein. */
+
+boolean seqIsLower(bioSeq *seq);
+/* Return TRUE if sequence is all lower case. */
+
+bioSeq *whichSeqIn(bioSeq **seqs, int seqCount, char *letters);
+/* Figure out which if any sequence letters is in. */
+
+Bits *maskFromUpperCaseSeq(bioSeq *seq);
+/* Allocate a mask for sequence and fill it in based on
+ * sequence case. */
+
+struct hash *dnaSeqHash(struct dnaSeq *seqList);
+/* Return hash of sequences keyed by name. */
+
+int dnaSeqCmpName(const void *va, const void *vb);
+/* Compare to sort based on sequence name. */
+
+#endif /* DNASEQ_H */
+
diff --git a/gbtools/src/include/blatSrc/dnautil.h b/gbtools/src/include/blatSrc/dnautil.h
new file mode 100644
index 0000000..2a9b15f
--- /dev/null
+++ b/gbtools/src/include/blatSrc/dnautil.h
@@ -0,0 +1,270 @@
+/* Some stuff that you'll likely need in any program that works with
+ * DNA.  Includes stuff for amino acids as well. 
+ *
+ * Assumes that DNA is stored as a character.
+ * The DNA it generates will include the bases 
+ * as lowercase tcag.  It will generally accept
+ * uppercase as well, and also 'n' or 'N' or '-'
+ * for unknown bases. 
+ *
+ * Amino acids are stored as single character upper case. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+
+#ifndef DNAUTIL_H
+#define DNAUTIL_H
+
+void dnaUtilOpen(); /* Good idea to call this before using any arrays
+		     * here.  */
+
+/* Numerical values for bases. */
+#define T_BASE_VAL 0
+#define U_BASE_VAL 0
+#define C_BASE_VAL 1
+#define A_BASE_VAL 2
+#define G_BASE_VAL 3
+#define N_BASE_VAL 4   /* Used in 1/2 byte representation. */
+
+typedef char DNA;
+typedef char AA;
+typedef char BIOPOL;	/* Biological polymer. */
+
+/* A little array to help us decide if a character is a 
+ * nucleotide, and if so convert it to lower case. 
+ * Contains zeroes for characters that aren't used
+ * in DNA sequence. */
+extern DNA ntChars[256];
+extern AA aaChars[256];
+
+/* An array that converts alphabetical DNA representation
+ * to numerical one: X_BASE_VAL as above.  For charaters
+ * other than [atgcATGC], has -1. */
+extern int ntVal[256];
+extern int aaVal[256];
+extern int ntValLower[256];	/* NT values only for lower case. */
+extern int ntValUpper[256];	/* NT values only for upper case. */
+
+/* Like ntVal, but with T_BASE_VAL in place of -1 for nonexistent nucleotides. */
+extern int ntValNoN[256];     
+
+/* Like ntVal but with N_BASE_VAL in place of -1 for 'n', 'x', '-', etc. */
+extern int ntVal5[256];
+
+/* Inverse array - takes X_BASE_VAL int to a DNA char
+ * value. */
+extern DNA valToNt[];
+
+/* Similar array that doesn't convert to lower case. */
+extern DNA ntMixedCaseChars[256];
+
+/* Another array to help us do complement of DNA  */
+extern DNA ntCompTable[256];
+
+/* Arrays to convert between lower case indicating repeat masking, and
+ * a 1/2 byte representation where the 4th bit indicates if the characeter
+ * is masked. Uses N_BASE_VAL for `n', `x', etc.
+*/
+#define MASKED_BASE_BIT 8
+extern int ntValMasked[256];
+extern DNA valToNtMasked[256];
+
+/*Complement DNA (not reverse)*/
+void complement(DNA *dna, long length);
+
+/* Reverse complement DNA. */
+void reverseComplement(DNA *dna, long length);
+
+
+/* Reverse offset - return what will be offset (0 based) to
+ * same member of array after array is reversed. */
+long reverseOffset(long offset, long arraySize);
+
+/* Switch start/end (zero based half open) coordinates
+ * to opposite strand. */
+void reverseIntRange(int *pStart, int *pEnd, int size);
+
+/* Switch start/end (zero based half open) coordinates
+ * to opposite strand. */
+void reverseUnsignedRange(unsigned *pStart, unsigned *pEnd, int size); 
+
+char *reverseComplementSlashSeparated(char *alleleStr);
+/* Given a slash-separated series of sequences (a common representation of variant alleles),
+ * returns a slash-sep series with the reverse complement of each sequence (if it is a
+ * nucleotide sequence), also reversing the order of sequences. */
+
+enum dnaCase {dnaUpper,dnaLower,dnaMixed,};
+/* DNA upper, lower, or mixed case? */
+
+/* Convert T's to U's */
+void toRna(DNA *dna);
+
+int cmpDnaStrings(DNA *a, DNA *b);
+/* Compare using screwy non-alphabetical DNA order TCGA */
+
+typedef char Codon; /* Our codon type. */
+
+/* Return single letter code (upper case) for protein.
+ * Returns X for bad input, 0 for stop codon.
+ * The "Standard" Code */
+AA lookupCodon(DNA *dna); 
+
+AA lookupUniqCodon(DNA *dna);
+
+boolean isStopCodon(DNA *dna);
+/* Return TRUE if it's a stop codon. */
+
+boolean isKozak(char *dna, int dnaSize, int pos);
+/* Return TRUE if it's a Kozak compatible start, using a relatively
+ * weak definition (either A/G 3 bases before or G after) . */
+
+boolean isReallyStopCodon(char *dna, boolean selenocysteine);
+/* Return TRUE if it's really a stop codon, even considering
+ * possibilility of selenocysteine. */
+
+/* Returns one letter code for protein, 
+ * 0 for stop codon or X for bad input,
+ * Vertebrate Mitochondrial Code */
+AA lookupMitoCodon(DNA *dna);
+
+Codon codonVal(DNA *start);
+/* Return value from 0-63 of codon starting at start. 
+ * Returns -1 if not a codon. */
+
+DNA *valToCodon(int val);
+/* Return  codon corresponding to val (0-63) */
+
+extern char *aaAbbr(int i);
+/* return pointer to AA abbrevation */
+
+extern char aaLetter(int i);
+/* return AA letter */
+
+void dnaTranslateSome(DNA *dna, char *out, int outSize);
+/* Translate DNA upto a stop codon or until outSize-1 amino acids, 
+ * whichever comes first. Output will be zero terminated. */
+
+char *skipIgnoringDash(char *a, int size, bool skipTrailingDash);
+/* Count size number of characters, and any 
+ * dash characters. */
+
+int countNonDash(char *a, int size);
+/* Count number of non-dash characters. */
+
+int nextPowerOfFour(long x);
+/* Return next power of four that would be greater or equal to x.
+ * For instance if x < 4, return 1, if x < 16 return 2.... 
+ * (From biological point of view how many bases are needed to
+ * code this number.) */
+
+long dnaFilteredSize(char *rawDna);
+/* Return how long DNA will be after non-DNA is filtered out. */
+
+long aaFilteredSize(char *rawDna);
+/* Return how long peptide will be after non-peptide is filtered out. */
+
+void dnaFilter(char *in, DNA *out);
+/* Filter out non-DNA characters. */
+
+void aaFilter(char *in, DNA *out);
+/* Filter out non-peptide characters. */
+
+void dnaFilterToN(char *in, DNA *out);
+/* Change all non-DNA characters to N. */
+
+void upperToN(char *s, int size);
+/* Turn upper case letters to N's. */
+
+void lowerToN(char *s, int size);
+/* Turn lower case letters to N's. */
+
+void dnaBaseHistogram(DNA *dna, int dnaSize, int histogram[4]);
+/* Count up frequency of occurance of each base and store 
+ * results in histogram. Use X_BASE_VAL to index histogram. */
+
+void dnaMixedCaseFilter(char *in, DNA *out);
+/* Filter out non-DNA characters but leave case intact. */
+
+bits64 basesToBits64(char *dna, int size);
+/* Convert dna of given size (up to 32) to binary representation */
+
+bits32 packDna16(DNA *in);
+/* pack 16 bases into a word */
+
+bits16 packDna8(DNA *in);
+/* Pack 8 bases into a short word */
+
+UBYTE packDna4(DNA *in);
+/* Pack 4 bases into a UBYTE */
+
+void unpackDna(bits32 *tiles, int tileCount, DNA *out);
+/* Unpack DNA. Expands to 16x tileCount in output. */
+
+void unpackDna4(UBYTE *tiles, int byteCount, DNA *out);
+/* Unpack DNA. Expands to 4x byteCount in output. */
+
+void unalignedUnpackDna(bits32 *tiles, int start, int size, DNA *unpacked);
+/* Unpack into out, even though not starting/stopping on tile 
+ * boundaries. */
+
+int intronOrientationMinSize(DNA *iStart, DNA *iEnd, int minIntronSize);
+/* Given a gap in genome from iStart to iEnd, return 
+ * Return 1 for GT/AG intron between left and right, -1 for CT/AC, 0 for no
+ * intron. */
+
+int intronOrientation(DNA *iStart, DNA *iEnd);
+/* Given a gap in genome from iStart to iEnd, return 
+ * Return 1 for GT/AG intron between left and right, -1 for CT/AC, 0 for no
+ * intron.  Assumes minIntronSize of 32. */
+
+int dnaScore2(DNA a, DNA b);
+/* Score match between two bases (relatively crudely). */
+
+int dnaScoreMatch(DNA *a, DNA *b, int size);
+/* Compare two pieces of DNA base by base. Total mismatches are
+ * subtracted from total matches and returned as score. 'N's 
+ * neither hurt nor help score. */
+
+int aaScore2(AA a, AA b);
+/* Score match between two bases (relatively crudely). */
+
+int aaScoreMatch(AA *a, AA *b, int size);
+/* Compare two peptides aa by aa. */
+
+int  dnaOrAaScoreMatch(char *a, char *b, int size, int matchScore, int mismatchScore, 
+	char ignore);
+/* Compare two sequences (without inserts or deletions) and score. */
+
+void writeSeqWithBreaks(FILE *f, char *letters, int letterCount, int maxPerLine);
+/* Write out letters with newlines every maxLine. */
+
+int tailPolyASizeLoose(DNA *dna, int size);
+/* Return size of PolyA at end (if present).  This allows a few non-A's as 
+ * noise to be trimmed too, but skips first two aa for taa stop codon. 
+ * It is less conservative in extending the polyA region than maskTailPolyA. */
+
+int headPolyTSizeLoose(DNA *dna, int size);
+/* Return size of PolyT at start (if present).  This allows a few non-T's as 
+ * noise to be trimmed too, but skips last two tt for revcomp'd taa stop 
+ * codon.  
+ * It is less conservative in extending the polyA region than maskHeadPolyT. */
+
+int maskTailPolyA(DNA *dna, int size);
+/* Convert PolyA at end to n.  This allows a few non-A's as noise to be 
+ * trimmed too.  Returns number of bases trimmed.  */
+
+int maskHeadPolyT(DNA *dna, int size);
+/* Convert PolyT at start.  This allows a few non-T's as noise to be 
+ * trimmed too.  Returns number of bases trimmed.  */
+
+boolean isDna(char *poly, int size);
+/* Return TRUE if letters in poly are at least 90% ACGTNU- */
+
+boolean isAllDna(char *poly, int size);
+/* Return TRUE if size is great than 1 and all letters in poly are 100% ACGTNU- */
+
+boolean isAllNt(char *seq, int size);
+/* Return TRUE if all letters in seq are ACGTNU-. */
+
+#endif /* DNAUTIL_H */
diff --git a/gbtools/src/include/blatSrc/dtdParse.h b/gbtools/src/include/blatSrc/dtdParse.h
new file mode 100644
index 0000000..2acb1a3
--- /dev/null
+++ b/gbtools/src/include/blatSrc/dtdParse.h
@@ -0,0 +1,57 @@
+/* dtdParse - parse an XML DTD file.  Actually this only
+ * parses a relatively simple subset of DTD's.  It's still
+ * useful for autoXml and xmlToSql. */
+
+#ifndef DTDPARSE_H
+#define DTDPARSE_H
+
+struct dtdElement
+/* An element in an XML file. */
+    {
+    struct dtdElement *next;	/* Next in list. */
+    char *name;			/* Element Name. */
+    char *mixedCaseName;	/* Name converted from EL_NAME or el-name to elName. */
+    struct dtdElChild *children;     /* Child elements. */
+    struct dtdAttribute *attributes; /* Attributes. */
+    int lineIx;			/* Line where element occurs in dtd file. */
+    char *textType;		/* Text between tags if any. */
+    };
+
+struct dtdElChild
+/* A reference to a child element. */
+   {
+   struct dtdElChild *next;	/* Next in list. */
+   char *name;			/* Name of element. */
+   char copyCode;		/* '1', '+', '?', or '*' */
+   boolean isOr;                /* Is this part of a ( n | m ) "or" list? */
+   struct dtdElement *el;	/* Element definition. */
+   };
+
+struct dtdAttribute
+/* An attribute of some sort. */
+    {
+    struct dtdAttribute *next;	/* Next in list. */
+    char *name;			/* Name of attribute. */
+    char *mixedCaseName;	/* Name converted from EL_NAME or el-name to elName. */
+    char *type;			/* Element type - CDATA, INT, FLOAT, etc. */
+    boolean required;		/* True if required. */
+    char *usual;		/* Default value (or NULL if none) */
+    };
+
+void dtdParse(char *fileName, char *prefix, char *textField,
+	struct dtdElement **retList, struct hash **retHash);
+/* Parse out a dtd file into elements that are returned in retList,
+ * and for your convenience also in retHash (which is keyed by the
+ * name of the element.  Note that XML element names can include the '-'
+ * character.  For this and other reasons in addition to the element
+ * name as it appears in the XML tag, the element has a mixedCaseName
+ * that strips '-' and '_' chars, and tries to convert the name to
+ * a mixed-case convention style name.  The prefix if any will be
+ * prepended to mixed-case names.  The textField is what to name
+ * the field that contains the letters between tags.  By default
+ * (if NULL) it is "text." */
+
+void dtdElementDump(struct dtdElement *el, FILE *f);
+/* Dump info on element. */
+
+#endif /* DTDPARSE_H */
diff --git a/gbtools/src/include/blatSrc/dyOut.h b/gbtools/src/include/blatSrc/dyOut.h
new file mode 100644
index 0000000..ba84fe3
--- /dev/null
+++ b/gbtools/src/include/blatSrc/dyOut.h
@@ -0,0 +1,141 @@
+// dyOut - DYnamic string stack based OUTput
+//
+// CAUTION: Inclusion of this header will convert printfs to dyOutPrintfs!!!
+//          This is an Experimental/Test strategy only.  When dyOut is adopted,
+//          direct calls to dyOut functions should be used and printf macros removed.
+//
+// This module relies upon a dyString based stack of buffers which accumulate output
+// for later printing.  As a stack, only the top buffer can be filled and flushed out
+// (duOutFlush).  When flushing, the top buffer's content is appended to the next
+// lower buffer, unless explicitly requested otherwise (dyOutDirectly).
+// If the stack is empty, dyOutPrintf will be equivalent to printf.
+//
+// Output goes to STDOUT unless a single alternative out file is registered.
+
+#ifdef DSPRINT_H      // NEVER INCLUDE TWICE.  ONLY INCLUDE DIRECTLY IN C FILES.
+#error Including dyOut.h twice! Only include directly in C files as this redefines printf !!!
+#else//ifndef DSPRINT_H
+#define DSPRINT_H
+
+#include "common.h"
+#include "dystring.h"
+
+int dyOutOpen(int initialBufSize);
+// Allocate dynamic string and puts at top of stack
+// returns token to be used for later stack accounting asserts
+
+int dyOutPrintf(char *format, ...);
+// Prints into end of the top ds buffer, and return resulting string length
+// If there is no current buffer, this acts like a simple printf and returns -1
+#define dyOutPuts(str) dyOutPrintf("%s\n",str)
+#define dyOutPutc(chr) dyOutPrintf("%c",chr)
+#define SWAP_PRINTF
+#ifdef SWAP_PRINTF
+#define printf dyOutPrintf
+#define puts dyOutPuts
+#undef putc
+#define putc dyOutPutc
+#endif//def SWAP_PRINTF
+
+int dyOutPrintDirectly(int token,FILE *file);
+// Prints the contents of the top buffer directly to a file.
+// Will leave the filled buffer at top of stack
+// Returns the length printed.
+
+int dyOutFlush(int token);
+// Flushes the top buffer to the next lower one and empties top buffer.
+// If there is no lower buffer then the content is printed to STDOUT (or registered out).
+// Returns the length flushed.
+
+int dyOutClose(int token);
+// Abandons the top buffer and its content, freeing memory.
+// Returns the length abandoned.
+#define dyOutAbandon(token) dyOutClose(token)
+
+int dyOutFlushAndClose(int token);
+// Flushes the top buffer to the next lower one and frees the top buffer.
+// If there is no lower buffer then the content is printed to STDOUT (or registered out).
+// Returns the length flushed.
+
+int dyOutFlushAndCloseAll();
+// CAUTION: Bad practice to not Open/Close levels in turn!
+// flushes, frees and closes all stacked buffers
+// returns length flushed
+
+char * dyOutContent(int token);
+// returns the content of the current buffer as a string, but does not flush or free it
+// NOTE: returned pointer is not cloned memory and will be changed by successive dyOut calls
+
+int dyOutEmpty(int token);
+// Empties the top buffer in stack (abandoning content), but leave buffer in place
+// Returns the length abandoned.
+#define dyOutAbandonContent(token) dyOutEmpty(token)
+
+int dyOutSize(int token);
+// Returns the current length of the buffer starting at the level corresponding to token.
+// Unlike other cases, the token does not have to correspond to the top of the stack!
+#define dyOutIsEmpty(token) (dyOutSize(token) == 0)
+
+int dyOutSizeAll();
+// returns combined current size of all buffers
+#define dyOutIsAllEmpty(token) (dyOutSizeAll() == 0)
+
+int dyOutStackDepth();
+// Returns the current dyOut buffer stack depth
+#define dyOutIsOpen() (dyOutStackDepth() > 0)
+
+void dyOutRegisterAltStream(FILE *out);
+// Registers an alternative to STDOUT.  After registering, all dyOut out goes to this file.
+// NOTE: There is no stack. Register/Unregister serially.
+
+void dyOutUnregisterAltStream(FILE *out);
+// Unregisters the alternative to STDOUT.  After unregistering all dyOut out goes to STDOUT.
+// NOTE: There is no stack. Register/Unregister serially.
+
+char *dyOutCannibalizeAndClose(int token);
+// Closes the top stack buffer returning content.  Returned string should be freed.
+
+char *dyOutCannibalizeAndCloseAll();
+// CAUTION: Bad practice to not Open/Close levels in turn!
+// Closes all stack buffers and returns a single string that is the full content.  
+// Returned string should be freed.
+
+void *dyOutStackPop(int token);
+// CAUTION: Not for the faint of heart: print buffer surgery is no substitute for proper coding.
+// Returns a pointer which can be dyOutStackPush'd back into place.
+// Pop/Push is useful for inserting print immediately before a dyOutOpen'd print buffer
+
+void dyOutStackPush(int token,void *dyOutPointer);
+// CAUTION: Not for the faint of heart: print buffer surgery is no substitute for proper coding.
+// Push a previously dyOutStackPop'd print buffer back onto the stack
+// Pop/Push is useful for inserting print immediately before a dyOutOpen'd print buffer
+
+
+#ifdef NOT_NOW
+// Requires regex function added to dystring.c which has been successfully tested.
+boolean dyOutRegexReplace(int token, char *regExpression, char *replaceWith);
+// CAUTION: Not for the faint of heart: print buffer surgery is no substitute for proper coding.
+// Looks for and replaces a single instance of a wildcard match in the current dyOut print buffer
+// regex follows normal EXTENDED (egrep) rules except:
+// ^ - at beginning of the regExpression only and matches beginning of buffer (not of line)
+// $ - at end of regExpression only and matches end of buffer (not end of line)
+// \n - newlines in the body of the regExpression will match newlines in the current print buffer
+// Returns TRUE on success
+// CAUTION: Wildcards match largest sub-string [w.*d] matches all of "wild wild world"
+
+
+//void dyOutTest();
+// Tests of dyOut functions
+#endif///def NOT_NOW
+
+/* Next steps:
+ * 1) DONE WITH MACROS: in cheapCgi.c replace all printfs with dyOutPrintf
+ * 2) DONE WITH MACROS: in hui.c replace all printfs with dyOutPrintf
+ * 3) DONE WITH MACROS: in hgTrackUi replace all printfs with dyOutPrintf
+ * 4) DONE: After 1-3, add opens and closes to hgTrackUi
+ * 5) DONE: Handle boxing cfg with dyOutPrintf (successful test)
+ * 6) Handle isConfigurable tests with dyOutPrintf and throw away results
+ *    This one will require making hgTrackUi Cfgs all lib code.
+ */
+
+#endif /* DSPRINT_H */
diff --git a/gbtools/src/include/blatSrc/dystring.h b/gbtools/src/include/blatSrc/dystring.h
new file mode 100644
index 0000000..892fb7a
--- /dev/null
+++ b/gbtools/src/include/blatSrc/dystring.h
@@ -0,0 +1,98 @@
+/* dystring - dynamically resizing string.
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#ifndef DYSTRING_H	/* Wrapper to avoid including this twice. */
+#define DYSTRING_H
+
+#include "common.h"
+
+struct dyString
+/* Dynamically resizable string that you can do formatted
+ * output to. */
+    {
+    struct dyString *next;	/* Next in list. */
+    char *string;		/* Current buffer. */
+    int bufSize;		/* Size of buffer. */
+    int stringSize;		/* Size of string. */
+    };
+
+struct dyString *newDyString(int initialBufSize);
+/* Allocate dynamic string with initial buffer size.  (Pass zero for default) */
+
+#define dyStringNew newDyString
+
+void freeDyString(struct dyString **pDs);
+/* Free up dynamic string. */
+
+#define dyStringFree(a) freeDyString(a);
+
+void freeDyStringList(struct dyString **pDs);
+/* Free up a list of dynamic strings */
+
+#define dyStringFreeList(a) freeDyStringList(a);
+
+void dyStringAppend(struct dyString *ds, char *string);
+/* Append zero terminated string to end of dyString. */
+
+void dyStringAppendN(struct dyString *ds, char *string, int stringSize);
+/* Append string of given size to end of string. */
+
+char dyStringAppendC(struct dyString *ds, char c);
+/* Append char to end of string. */
+
+void dyStringAppendMultiC(struct dyString *ds, char c, int n);
+/* Append N copies of char to end of string. */
+
+void dyStringAppendEscapeQuotes(struct dyString *dy, char *string,
+	char quot, char esc);
+/* Append escaped-for-quotation version of string to dy. */
+
+#define dyStringWriteOne(dy, var) dyStringAppendN(dy, (char *)(&var), sizeof(var))
+/* Write one variable (binary!) to dyString - for cases when want to treat string like
+ * a file stream. */
+
+void dyStringVaPrintf(struct dyString *ds, char *format, va_list args);
+/* VarArgs Printf to end of dyString. */
+
+void dyStringPrintf(struct dyString *ds, char *format, ...)
+/*  Printf to end of dyString. */
+#ifdef __GNUC__
+__attribute__((format(printf, 2, 3)))
+#endif
+    ;
+
+struct dyString *dyStringCreate(char *format, ...);
+/*  Create a dyString with a printf style initial content */
+
+#define dyStringClear(ds) (ds->string[0] = ds->stringSize = 0)
+/* Clear string. */
+
+struct dyString * dyStringSub(char *orig, char *in, char *out);
+/* Make up a duplicate of orig with all occurences of in substituted
+ * with out. */
+
+void dyStringBumpBufSize(struct dyString *ds, int size);
+/* Force dyString buffer to be at least given size. */
+
+char *dyStringCannibalize(struct dyString **pDy);
+/* Kill dyString, but return the string it is wrapping
+ * (formerly dy->string).  This should be free'd at your
+ * convenience. */
+
+#define dyStringContents(ds) (ds)->string
+/* return raw string. */
+
+#define dyStringLen(ds) ds->stringSize
+/* return raw string length. */
+
+void dyStringResize(struct dyString *ds, int newSize);
+/* resize a string, if the string expands, blanks are appended */
+
+void dyStringQuoteString(struct dyString *dy, char quotChar, char *text);
+/* Append quotChar-quoted text (with any internal occurrences of quotChar
+ * \-escaped) onto end of dy. */
+
+#endif /* DYSTRING_H */
+
diff --git a/gbtools/src/include/blatSrc/elmTree.h b/gbtools/src/include/blatSrc/elmTree.h
new file mode 100644
index 0000000..92c5df0
--- /dev/null
+++ b/gbtools/src/include/blatSrc/elmTree.h
@@ -0,0 +1,122 @@
+// elmTree.c/.h - Extensible local memory tree grown from an slList of objects, via
+// NEIGHBOR JOINING and a supplied compare routine.  Unlike hacTree, this is not a binary tree
+// and any node can have original content, a single parent and N children.  Superficially similar
+// to running slSort(), running elmTreeGrow() creates a tree from a single "root".  All branches
+// and leaves are represented as "tree nodes" which contain pointers to a user defined object,
+// a single parent, a first child (if the node is not a leaf) and a next sibling.  All nodes are
+// additionally joined together as an slList with the single "root" as the first member.  Thus
+// the tree can be traversed linerarly through node->next or hierarchically through recursive
+// node->firstChild,child->sibling access.
+// The tree is grown through neighbor joins and involves figuring out whether each successive 
+// content should be attached as a branch node or leaf node to the existing tree.  To facilitate
+// neighbor joining, each node has cumulative content from the single root node (whcih has NULL
+// content).  An example might be a tree of bitmaps where each node contains all the bits of its
+// parent plus additional bits.
+// Since an elmTree is build with local memory, free the tree by lmCleanup().
+
+#ifndef ELMTREE_H
+#define ELMTREE_H
+
+#include "common.h"
+#include "localmem.h"
+
+struct elmNode {
+// A tree node may be either a leaf or a branch, with branches having children
+// NOTE the root of the tree always has NULL content.
+    struct elmNode * next;       // slList of all nodes in tree starting with root
+    struct elmNode * parent;     // NULL: root of tree, else only one parent allowed
+    struct elmNode * firstChild; // NULL: leaf, or firstChild (successive are siblings)
+    struct elmNode * sibling;    // children are singly linked as on "next" sibling
+    int selfAndDescendants;      // count of self and descendants, but not siblings and parents
+    void *content; // Content of node, such as bitMap that defines node.
+};
+
+enum elmNodeOverlap {
+    enoExcluding  =    0,   // Nothing in common between 2 elements
+    enoEqual      =    1,   // Two node elements are identical
+    enoSuperset   =    2,   // First element completely covers second
+    enoSubset     =    3,   // First element is a subset of second
+    enoMixed      =    4    // Elements match some and differ some (use weight to distinguish)
+};
+
+
+// - - - - - growing a tree:
+typedef enum elmNodeOverlap (elmNodeCompareFunction)(const struct slList *elA,
+                                                     const struct slList *elB,
+                                                     int *joinWeight, void *extra);
+// Prototype of variable compare routines.  Caller may request joinWeight.  Fill this with a
+// weight of the commonality between two elements, with a greater weight representing a better
+// possible join.  An example might be bit compares and the weight being the number of bits
+// that match with the max being the number of possible matches.  This value will be used to
+// help decide what branch a new node should join.
+
+typedef struct slList *(elmNodeJoiningFunction)(const struct slList *elA,
+                                                const struct slList *elB,void *extra);
+// Prototype of function for creating the common content of 2 elements that are part of a tree.
+// As the tree grows, elements will get attached to common branches and those branches will
+// have content created by this function.  An example application might be two of your bitmaps
+// representing actual data being used to create a third bitmap with is the common bits set
+// but not representing one of your original element bitmaps (actual data).
+
+struct elmNode *elmTreeGrow(struct lm *lm,struct slList *collection, void *extra,
+                            elmNodeCompareFunction *neighborCmp,
+                            elmNodeJoiningFunction *neighborJoin);
+// Given a collection of content and a function to compare elements of the content,
+// returns a tree based on neighbor joining.  The nodes of the tree will have content
+// which is cumulative out to the leaves: the root node has null content, while any child
+// has content that is the superset of all it's parents.  Fill 'extra' with anything (like lm)
+// that you want passed into your compare and joining functions.
+
+
+// - - - - - picking nodes from a tree:
+typedef boolean (elmNodePickFunction)(struct slList *element,
+                                      struct slList *parent,void *extra,
+                                      struct slList **result);
+// Prototype for picking nodes by using recursive tree climbing routine.  This user provided 
+// function receives the content of a node and any extra structure provided.
+// The routine can return a result if desired.  When the function returns a result, then the
+// result of the nearest "parent" (if applicable) will be provided as well.  All results will
+// ultimately be strung together in a list in traversal order.  The routine should
+// return TRUE to keep traversing the tree and FALSE if tree traversal should stop.  
+
+boolean rElmTreeClimb(const struct elmNode *node, struct slList *parent, void *extra,
+                      elmNodePickFunction *elmPick, struct slList **results);
+// Recursively climbs tree and examines every node using the supplied function.
+// Each call on a node iterates through its siblings, recursively calling itself on any children.
+// This function might be used to build a list of objects from each or a subset of nodes.
+// If all examinations resulted in a structure, then the list will be in REVERSE traversal order.
+// If you immediately slReverse(results) then the list will ascend to the furthest leaf before
+// moving on to sibling leaves, twigs and branches.
+// Note: if results are returned, then "parent" is filled with nearest parent's result.
+// Return FALSE from the elmPick function to stop the traversal.  Thus, a complete traversal
+// returns TRUE, but one that has been stopped (after finding one node?) returns FALSE.
+
+
+// - - - - - general tree examination
+INLINE int elmNodeCountSiblings(const struct elmNode *node)
+// Counts siblings, including current
+{
+int count = 0;
+const struct elmNode *sibling = node;
+for (;sibling != NULL; sibling = sibling->sibling)
+    count++;
+return count;
+}
+#define elmNodeCountChildren(node) elmNodeCountSiblings((node)->firstChild)
+
+INLINE int elmNodeCountGenerations(const struct elmNode *node)
+// Counts direct generations (first children only), including current
+{
+int count = 0;
+const struct elmNode *child = node;
+for (;child != NULL; child = child->firstChild)
+    count++;
+return count;
+}
+
+#define elmNodeIsBranch(node) (node->firstChild != NULL)
+#define elmNodeIsLeaf(node)   (node->firstChild == NULL)
+#define elmNodeIsRoot(node)   (node->parent     == NULL)
+
+
+#endif//ndef ELMTREE_H
diff --git a/gbtools/src/include/blatSrc/emblParse.h b/gbtools/src/include/blatSrc/emblParse.h
new file mode 100644
index 0000000..ff87f15
--- /dev/null
+++ b/gbtools/src/include/blatSrc/emblParse.h
@@ -0,0 +1,75 @@
+/* Parse EMBL formatted files. EMBL files are basically line
+ * oriented.  Each line begins with a short (usually two letter)
+ * type word.  Adjacent lines with the same type are generally
+ * considered logical extensions of each other.  In many cases
+ * lines can be considered fields in an EMBL database.  Records
+ * are separated by lines starting with '//'  Generally lines
+ * starting with XX are empty and used to make the records more
+ * human readable.   Here is an example record:
+ 
+ C  M00001
+ XX
+ ID  V$MYOD_01
+ XX
+ NA  MyoD
+ XX
+ DT  EWI (created); 19.10.92.
+ DT  ewi (updated); 22.06.95.
+ XX
+ PO     A     C     G     T
+ 01     0     0     0     0
+ 02     0     0     0     0
+ 03     1     2     2     0
+ 04     2     1     2     0
+ 05     3     0     1     1
+ 06     0     5     0     0
+ 07     5     0     0     0
+ 08     0     0     4     1
+ 09     0     1     4     0
+ 10     0     0     0     5
+ 11     0     0     5     0
+ 12     0     1     2     2
+ 13     0     2     0     3
+ 14     1     0     3     1
+ 15     0     0     0     0
+ 16     0     0     0     0
+ 17     0     0     0     0
+ XX
+ BF  T00526; MyoD                         ; mouse
+ XX
+ BA  5 functional elements in 3 genes
+ XX
+ XX
+ //
+ */
+
+#ifndef EMBLPARSE_H
+#define EMBLPARSE_H
+
+#ifndef HASH_H
+#include "hash.h"
+#endif
+
+#ifndef DYSTRING_H
+#include "dystring.h"
+#endif
+
+#ifndef LINEFILE_H
+#include "linefile.h"
+#endif
+
+boolean emblLineGroup(struct lineFile *lf, char type[16], struct dyString *val);
+/* Read next line of embl file.  Read line after that too if it
+ * starts with the same type field. Return FALSE at EOF. */
+
+struct hash *emblRecord(struct lineFile *lf);
+/* Read next record and return it in hash.   (Free this
+ * hash with freeHashAndVals.)   Hash is keyed by type
+ * and has string values. */
+
+struct lineFile *emblOpen(char *fileName, char type[256]);
+/* Open up embl file, verify format and optionally  return 
+ * type (VV line).  Close this with lineFileClose(). */
+
+#endif /* EMBLPARSE_H */
+
diff --git a/gbtools/src/include/blatSrc/ens.h b/gbtools/src/include/blatSrc/ens.h
new file mode 100644
index 0000000..b48dfa4
--- /dev/null
+++ b/gbtools/src/include/blatSrc/ens.h
@@ -0,0 +1,168 @@
+/*****************************************************************************
+ * Copyright (C) 2000 Jim Kent.  This source code may be freely used         *
+ * for personal, academic, and non-profit purposes.  Commercial use          *
+ * permitted only by explicit agreement with Jim Kent (jim_kent at pacbell.net) *
+ *****************************************************************************/
+/* ens.h - Interface to ensEMBL database. */
+#ifndef ENS_H
+#define ENS_H
+
+#ifndef DNAUTIL_H
+#include "dnautil.h"
+#endif 
+
+#ifndef DLIST_H
+#include "dlist.h"
+#endif 
+
+#ifndef UNFIN_H
+#include "unfin.h"
+#endif
+
+struct ensAnalysis
+/* A category of a feature. */
+    {
+    struct ensAnalysis *next;	/* Next in list */
+    int id;			/* Unique id for this feature type. */
+    char *db;			/* Database used. */
+    char *dbVersion;		/* Version of database. */
+    char *program;		/* Program used. */
+    char *programVersion;	/* Version of program. */
+    char *gffSource;		/* Source field from GFF. */
+    char *gffFeature;		/* Feature field from GFF. */
+    char *shortName;		/* 15 letter summary. */
+    };
+
+struct ensFeature
+/* An ensemble feature. */
+    {
+    struct ensFeature *next;	   /* Next in list. */
+    struct contigTree *tContig;    /* Name of target (genomic) sequence */
+    int tStart, tEnd;              /* Position in genomic sequence. */
+    int score;                     /* Score (I don't know units) */
+    int orientation;               /* +1 or -1.  Strand relative to contig. */
+    int type;                      /* Index into analysis table describing type of feature. */
+    char *typeName;                /* Subtype of type really. May be NULL. Not alloced here. */ 
+    int qStart, qEnd;              /* Query (cDNA, protein, etc.) sequence position. */
+    char *qName;                   /* Query sequence name. */
+    };
+
+struct ensExon
+/* An ensemble exon.  Since multiple transcripts can
+ * use the same exon, this is stored as a reference on
+ * a dlList in the transcript and as an instance in the
+ * slList in the gene. */
+    {
+    struct ensExon *next;		/* Next in list (in ensGene) */
+    char *id;				/* Ensemble ID (not allocated here). */
+    struct contigTree *contig;	        /* Contig within clone this is in. (Not allocated here).*/
+    char phase;				/* AKA Frame - codon position of 1st base. */
+    char endPhase;                      /* Codon position of last base. */
+    int orientation;                    /* +1 or -1. Strand relative to contig. */
+    int seqStart;			/* Start position. */
+    int seqEnd;				/* End position. */
+    };
+
+struct ensTranscript
+/* A transcript (isoform) of a gene. */
+    {
+    struct ensTranscript *next;		/* Next in list. */
+    char *id;				/* Ensemble ID. */
+    struct dlList *exonList;		/* Ordered list of exon references. */
+    struct ensExon *startExon;          /* Reference to first coding exon. */
+    struct ensExon *endExon;            /* Reference to last coding exon. */
+    int startSeq, endSeq;               /* Start, end of coding region. */
+    };
+
+struct ensGene
+/* A gene.  A collection of exons and how they
+ * are put together. */
+    {
+    struct ensGene *next;		  /* Next in list. */
+    char *id;				  /* Ensemble ID with many zeroes. */
+    struct ensTranscript *transcriptList; /* List of ways to transcribe and splice. */
+    struct hash *exonIdHash;		  /* Fast lookup of exons from exon ids. */
+    struct ensExon *exonList;		  /* Total exons in all transcripts. */
+    };
+
+void ensGetAnalysisTable(struct ensAnalysis ***retTable, int *retCount);
+/* Returns analysis table (array of different things a feature can be). 
+ * No need to free this, it's managed by system. */
+
+struct dnaSeq *ensDnaInBacRange(char *clone, int start, int end, enum dnaCase dnaCase);
+/* Get DNA for range of clone in browser coordinates, including NNNs between contigs. */
+
+struct dnaSeq *ensDnaInBac(char *clone, enum dnaCase dnaCase);
+/* Get DNA for clone in browser coordinates, including NNNs between contigs. */
+
+
+struct ensFeature *ensGetFeature(char *featureId);
+/* Get a single feature of the given ID.  Returns NULL if no such feature.  */
+
+struct ensFeature *ensFeaturesInBac(char *clone);
+/* Get list of features associated with BAC clone. */
+
+struct ensFeature *ensFeaturesInBacRange(char *clone, int start, int end);
+/* Get list of features associated a section of BAC clone. */
+
+void ensFreeFeature(struct ensFeature **pFeature);
+/* Free up a single feature. */
+
+void ensFreeFeatureList(struct ensFeature **pFeatureList);
+/* Free up a list of features. */
+
+
+
+struct slName *ensGeneNamesInBac(char *bacName);
+/* Get list of all gene names in bac. */
+
+struct ensGene *ensGetGene(char *geneName);
+/* Get named gene. This can also be viewed as a list of one genes. */
+
+struct ensGene *ensGenesInBac(char *bacName);
+/* Get list of all genes in bac. */
+
+struct ensGene *ensGenesInBacRange(char *bacName, int start, int end);
+/* Get list of genes in a section of a BAC clone.  The start/end are
+ * in browser coordinates. */
+
+void ensFreeGene(struct ensGene **pGene);
+/* Free up a single gene. */
+
+void ensFreeGeneList(struct ensGene **pGeneList);
+/* Free up a list of genes. */
+
+
+
+void ensParseContig(char *combined, char retBac[32], int *retContig);
+/* Parse combined bac.contig into two separate values. */
+
+int ensBrowserCoordinates(struct contigTree *contig, int x);
+/* Return x in browser coordinates. */
+
+int ensSubmitCoordinates(struct contigTree *contig, int x);
+/* Return x in GenBank/EMBL submission coordinates. */
+
+int ensBacBrowserLength(char *clone);
+/* Return size of clone in browser coordinate space. */
+
+int ensBacSubmitLength(char *clone);
+/* Return size of clone in GenBank/EMBL submission  coordinate space. */
+
+struct contigTree *ensBacContigs(char *bacId);
+/* Return contigTree rooted at Bac.  Do not free this or modify it, 
+ * the system takes care of it. */
+
+struct contigTree *ensGetContig(char *contigId);
+/* Return contig associated with contigId. Do not free this, system
+ * takes care of it. */
+
+void ensTranscriptBounds(struct ensTranscript *trans, int *retStart, int *retEnd);
+/* Find beginning and end of transcript in browser coordinates. */
+
+void ensGeneBounds(struct ensGene *gene, int *retStart, int *retEnd);
+/* Find beginning and end of gene in browser coordinates. */
+
+#endif /* ENS_H */
+
+
diff --git a/gbtools/src/include/blatSrc/errAbort.h b/gbtools/src/include/blatSrc/errAbort.h
new file mode 100644
index 0000000..4fd645b
--- /dev/null
+++ b/gbtools/src/include/blatSrc/errAbort.h
@@ -0,0 +1,93 @@
+/* ErrAbort.h - our error handler. 
+ *
+ * This maintains two stacks - a warning message printer
+ * stack, and a "abort handler" stack.
+ *
+ * By default the warnings will go to stderr, and
+ * aborts will exit the program.  You can push a
+ * function on to the appropriate stack to change
+ * this behavior.  The top function on the stack
+ * gets called.
+ *
+ * Most functions in this library will call errAbort()
+ * if they run out of memory.  
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#ifndef ERRABORT_H
+#define ERRABORT_H
+
+boolean isErrAbortInProgress();  
+/* Flag to indicate that an error abort is in progress.
+ * Needed so that a warn handler can tell if it's really
+ * being called because of a warning or an error. */
+
+void errAbort(char *format, ...)
+/* Abort function, with optional (printf formatted) error message. */
+#if defined(__GNUC__)
+__attribute__((format(printf, 1, 2)))
+#endif
+;
+
+void vaErrAbort(char *format, va_list args);
+/* Abort function, with optional (vprintf formatted) error message. */
+
+void errnoAbort(char *format, ...)
+/* Prints error message from UNIX errno first, then does errAbort. */
+#if defined(__GNUC__)
+__attribute__((format(printf, 1, 2)))
+#endif
+;
+
+typedef void (*AbortHandler)();
+/* Function that can abort. */
+
+void pushAbortHandler(AbortHandler handler);
+/* Set abort handler */
+
+void popAbortHandler();
+/* Revert to old abort handler. */
+
+void noWarnAbort();
+/* Abort without message. */
+
+void pushDebugAbort();
+/* Push abort handler that will invoke debugger. */
+
+void vaWarn(char *format, va_list args);
+/* Call top of warning stack to issue warning. */
+
+void warn(char *format, ...)
+/* Issue a warning message. */
+#if defined(__GNUC__)
+__attribute__((format(printf, 1, 2)))
+#endif
+;
+
+void errnoWarn(char *format, ...)
+/* Prints error message from UNIX errno first, then does rest of warning. */
+#if defined(__GNUC__)
+__attribute__((format(printf, 1, 2)))
+#endif
+;
+
+typedef void (*WarnHandler)(char *format, va_list args);
+/* Function that can warn. */
+
+void pushWarnHandler(WarnHandler handler);
+/* Set warning handler */
+
+void popWarnHandler();
+/* Revert to old warn handler. */
+
+void pushWarnAbort();
+/* Push handler that will abort on warnings. */
+
+void pushSilentWarnHandler();
+/* Set warning handler to be quiet.  Do a popWarnHandler to restore. */
+
+void errAbortDebugnPushPopErr();
+/*  generate stack dump if there is a error in the push/pop functions */
+
+#endif /* ERRABORT_H */
diff --git a/gbtools/src/include/blatSrc/errCatch.h b/gbtools/src/include/blatSrc/errCatch.h
new file mode 100644
index 0000000..bcaec62
--- /dev/null
+++ b/gbtools/src/include/blatSrc/errCatch.h
@@ -0,0 +1,61 @@
+/* errCatch - help catch errors so that errAborts aren't
+ * fatal, and warn's don't necessarily get printed immediately. 
+ * Note that error conditions caught this way will tend to
+ * leak resources unless there are additional wrappers. 
+ *
+ * Typical usage is
+ * errCatch = errCatchNew();
+ * if (errCatchStart(errCatch))
+ *     doFlakyStuff();
+ * errCatchEnd(errCatch);
+ * if (errCatch->gotError)
+ *     warn("Flaky stuff failed: %s", errCatch->message->string);
+ * errCatchFree(&errCatch); 
+ * cleanupFlakyStuff();
+ */
+#ifndef ERRCATCH_H
+#define ERRCATCH_H
+
+#ifndef DYSTRING_H
+    #include "dystring.h"
+#endif
+
+struct errCatch
+/* Something to help catch errors.   */
+    {
+    struct errCatch *next;	 /* Next in stack. */
+    jmp_buf jmpBuf;		 /* Where to jump back to for recovery. */
+    struct dyString *message; /* Error message if any */
+    boolean gotError;		 /* Some sort of error was caught. */
+    boolean gotWarning;		 /* Some sort of error warning was raised. */
+    };
+
+struct errCatch *errCatchNew();
+/* Return new error catching structure. */
+
+void errCatchFree(struct errCatch **pErrCatch);
+/* Free up resources associated with errCatch */
+
+#define errCatchStart(e) (errCatchPushHandlers(e) && setjmp(e->jmpBuf) == 0)
+/* Little wrapper around setjmp.  This returns TRUE
+ * on the main execution thread, FALSE after abort. */
+
+
+boolean errCatchPushHandlers(struct errCatch *errCatch);
+/* Push error handlers.  Not usually called directly. 
+ * but rather through errCatchStart() macro.  Always
+ * returns TRUE. */
+
+void errCatchEnd(struct errCatch *errCatch);
+/* Restore error handlers and pop self off of catching stack. */
+
+void errCatchReWarn(struct errCatch *errCatch);
+/* Re-warn any warnings that happened even though no abort happened 
+ * to make them visible. */
+
+boolean errCatchFinish(struct errCatch **pErrCatch);
+/* Finish up error catching.  Report error if there is a
+ * problem and return FALSE.  If no problem return TRUE.
+ * This handles errCatchEnd and errCatchFree. */
+#endif /* ERRCATCH_H */
+
diff --git a/gbtools/src/include/blatSrc/fa.h b/gbtools/src/include/blatSrc/fa.h
new file mode 100644
index 0000000..02971b6
--- /dev/null
+++ b/gbtools/src/include/blatSrc/fa.h
@@ -0,0 +1,129 @@
+/* Routines for reading and writing fasta format sequence files.
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#ifndef FA_H
+#define FA_H
+
+#ifndef DNASEQ_H
+#include "dnaseq.h"
+#endif
+
+#ifndef LINEFILE_H
+#include "linefile.h"
+#endif
+
+struct dnaSeq *faReadDna(char *fileName);
+/* Open fa file and read a single dna sequence from it. */
+
+aaSeq *faReadAa(char *fileName);
+/* Open fa file and read a single dna sequence from it. */
+
+bioSeq *faReadSeq(char *fileName, boolean isDna);
+/* Read a dna or protein sequence. */
+
+struct dnaSeq *faReadAllDna(char *fileName);
+/* Return list of all DNA sequences in FA file. */
+
+struct dnaSeq *faReadAllPep(char *fileName);
+/* Return list of all Peptide sequences in FA file. */
+
+struct dnaSeq *faReadAllSeq(char *fileName, boolean isDna);
+/* Return list of all sequences in FA file. */
+
+struct dnaSeq *faReadAllMixed(char *fileName);
+/* Read in mixed case fasta file, preserving case. */
+
+struct hash *faReadAllIntoHash(char *fileName, enum dnaCase dnaCase);
+/* Return hash of all sequences in FA file.  */
+
+struct dnaSeq *faReadAllMixedInLf(struct lineFile *lf);
+/* Read in mixed case sequence from open fasta file. */
+
+struct dnaSeq *faReadOneDnaSeq(FILE *f, char *name, boolean mustStartWithSign);
+/* Read one sequence from FA file. Assumes positioned at or before
+ * the '>' at start of sequence. */  
+
+boolean faReadNext(FILE *f, char *defaultName, boolean mustStartWithComment, 
+    char **retCommentLine, struct dnaSeq **retSeq);
+/* Read next sequence from .fa file. Return sequence in retSeq.  If retCommentLine is non-null
+ * return the '>' line in retCommentLine.   The whole thing returns FALSE at end of file. 
+ * Assumes positioned at or before the '>' at start of sequence.  File must have been
+ * opened in binary mode! Note: sequence is mapped to lower case */
+
+boolean faReadMixedNext(FILE *f, boolean preserveCase, char *defaultName, 
+    boolean mustStartWithComment, char **retCommentLine, struct dnaSeq **retSeq);
+/* Read next sequence from .fa file. Return sequence in retSeq.  If retCommentLine is non-null
+ * return the '>' line in retCommentLine.   The whole thing returns FALSE at end of file. Provides flag for preserving case in sequence */
+
+struct dnaSeq *faFromMemText(char *text);
+/* Return a sequence from a .fa file that's been read into
+ * a string in memory. This cannabalizes text, which should
+ * be allocated with needMem.  This buffer becomes part of
+ * the returned dnaSeq, which may be freed normally with
+ * freeDnaSeq. */
+
+bioSeq *faSeqFromMemText(char *text, boolean isDna);
+/* Convert fa in memory to bioSeq. This cannabalizes text
+ * as does faFromMemText above. */
+
+bioSeq *faNextSeqFromMemText(char **pText, boolean isDna);
+/* Convert fa in memory to bioSeq.  Update *pText to point to next
+ * record.  Returns NULL when no more sequences left. */
+
+bioSeq *faNextSeqFromMemTextRaw(char **pText);
+/* Same as faNextSeqFromMemText, but will leave in 
+ * letters even if they aren't in DNA or protein alphabed. */
+
+bioSeq *faSeqListFromMemText(char *text, boolean isDna);
+/* Convert fa's in memory into list of dnaSeqs. */
+
+bioSeq *faSeqListFromMemTextRaw(char *text);
+/* Convert fa's in memory into list of dnaSeqs without
+ * converting chars to N's. */
+
+boolean faFastReadNext(FILE *f, DNA **retDna, int *retSize, char **retName);
+/* Read in next FA entry as fast as we can. Return FALSE at EOF. 
+ * The returned DNA and name will be overwritten by the next call
+ * to this function. */
+
+boolean faSpeedReadNext(struct lineFile *lf, DNA **retDna, int *retSize, char **retName);
+/* Read in next FA entry as fast as we can. Faster than that old,
+ * pokey faFastReadNext. Return FALSE at EOF. 
+ * The returned DNA and name will be overwritten by the next call
+ * to this function. */
+
+boolean faPepSpeedReadNext(struct lineFile *lf, DNA **retDna, int *retSize, char **retName);
+/* Read in next peptide FA entry as fast as we can.  */
+
+boolean faSomeSpeedReadNext(struct lineFile *lf, DNA **retDna, int *retSize, char **retName, boolean isDna);
+/* Read in DNA or Peptide FA record. */
+
+boolean faMixedSpeedReadNext(struct lineFile *lf, DNA **retDna, int *retSize, char **retName);
+/* Read in DNA or Peptide FA record in mixed case.   Allow any upper or lower case
+ * letter, or the dash character in. */
+
+void faToProtein(char *poly, int size);
+/* Convert possibly mixed-case protein to upper case.  Also
+ * convert any strange characters to 'X'.  Does not change size.
+ * of sequence. */
+
+void faToDna(char *poly, int size);
+/* Convert possibly mixed-case DNA to lower case.  Also turn
+ * any strange characters to 'n'.  Does not change size.
+ * of sequence. */
+
+void faFreeFastBuf();
+/* Free up buffers used in fa fast and speedreading. */
+
+void faWrite(char *fileName, char *startLine, DNA *dna, int dnaSize);
+/* Write out FA file or die trying. */
+
+void faWriteNext(FILE *f, char *startLine, DNA *dna, int dnaSize);
+/* Write next sequence to fa file. */
+
+void faWriteAll(char *fileName, bioSeq *seqList);
+/* Write out all sequences in list to file. */
+
+#endif /* FA_H */
diff --git a/gbtools/src/include/blatSrc/fieldedTable.h b/gbtools/src/include/blatSrc/fieldedTable.h
new file mode 100644
index 0000000..c212ce3
--- /dev/null
+++ b/gbtools/src/include/blatSrc/fieldedTable.h
@@ -0,0 +1,44 @@
+/* fieldedTable - a table composed of untyped strings in memory.  Includes names for each
+ * field. This is a handy way of storing small-to-medium tab-separated files that begin
+ * with a "#list of fields" line among other things. */
+
+#ifndef FIELDEDTABLE_H
+#define FIELDEDTABLE_H
+
+struct fieldedRow
+/* An array of strings with a little extra info, can be hung on a list. */
+    {
+    struct fieldedRow *next;
+    char **row; // Array of strings
+    int id;	// In the file case this is the line of file row starts in
+    };
+
+struct fieldedTable
+/* A table with a name for each field. */
+    {
+    struct fieldedTable *next;
+    char *name;	    /* Often the file name */
+    struct lm *lm;  /* All allocations done out of this memory pool. */
+    int fieldCount; /* Number of fields. */
+    char **fields;  /* Names of fields. */
+    struct fieldedRow *rowList;  /* list of parsed out fields. */
+    struct fieldedRow **cursor;  /* Pointer to where we add next item to list. */
+    };
+
+struct fieldedTable *fieldedTableNew(char *name, char **fields, int fieldCount);
+/* Create a new empty fieldedTable with given name, often a file name. */
+
+void fieldedTableFree(struct fieldedTable **pTable);
+/* Free up memory resources associated with table. */
+
+struct fieldedRow *fieldedTableAdd(struct fieldedTable *table,  char **row, int rowSize, int id);
+/* Create a new row and add it to table.  Return row. */
+
+struct fieldedTable *fieldedTableFromTabFile(char *fileName, char *url, char *requiredFields[], int requiredCount);
+/* Read table from tab-separated file with a #header line that defines the fields.  Ensures
+ * all requiredFields (if any) are present.  The url is just used for error reporting and 
+ * should be the same as fileName for most purposes.  This is used by edwSubmit though which
+ * first copies to a local file, and we want to report errors from the url. */
+
+#endif /* FIELDEDTABLE_H */
+
diff --git a/gbtools/src/include/blatSrc/filePath.h b/gbtools/src/include/blatSrc/filePath.h
new file mode 100644
index 0000000..ca4ddb5
--- /dev/null
+++ b/gbtools/src/include/blatSrc/filePath.h
@@ -0,0 +1,31 @@
+/* filePath - stuff to handle file name parsing. */
+#ifndef FILEPATH_H
+#define FILEPATH_H
+
+#include "common.h"
+
+void splitPath(char *path, char dir[PATH_LEN], char name[FILENAME_LEN],
+	       char extension[FILEEXT_LEN]);
+/* Split a full path into components.  The dir component will include the
+ * trailing / if any.  The extension component will include the starting
+ * . if any.   Pass in NULL for dir, name, or extension if you don't care about
+ * that part. */
+
+char *expandRelativePath(char *baseDir, char *relPath);
+/* Expand relative path to more absolute one. */
+
+char *pathRelativeToFile(char *baseFile, char *relPath);
+/* Given a base file name and a path relative to that, return
+ * relative path interpreted as if it were seen from the
+ * same directory holding the baseFile.  
+ *   An example of using this would be in processing include
+ * files.  In this case the baseFile would be the current
+ * source file, and the relPath would be from the include
+ * statement.  The returned result could then be used to
+ * open the include file. */
+
+void undosPath(char *path);
+/* Convert '\' to '/' in path. (DOS/Windows is typically ok with
+ * this actually.) */
+
+#endif /* FILEPATH_H */
diff --git a/gbtools/src/include/blatSrc/flydna.h b/gbtools/src/include/blatSrc/flydna.h
new file mode 100644
index 0000000..bdbd2a0
--- /dev/null
+++ b/gbtools/src/include/blatSrc/flydna.h
@@ -0,0 +1,32 @@
+/*****************************************************************************
+ * Copyright (C) 2000 Jim Kent.  This source code may be freely used         *
+ * for personal, academic, and non-profit purposes.  Commercial use          *
+ * permitted only by explicit agreement with Jim Kent (jim_kent at pacbell.net) *
+ *****************************************************************************/
+/* flydna.h - routines for accessing fly genome and cDNA sequences. */
+
+#ifndef FLYDNA_H
+#define FLYDNA_H
+
+void flyLoadNt4Genome(struct nt4Seq ***retNt4Seq, int *retNt4Count);
+/* Load up entire packed fly genome into memory. */
+
+void flyFreeNt4Genome(struct nt4Seq ***pNt4Seq);
+/* Free up packed fly genome. */
+
+void flyChromNames(char ***retNames, int *retNameCount);
+/* Get list of fly chromosome names. */
+
+boolean flyCdnaSeq(char *name, struct dnaSeq **retDna, struct wormCdnaInfo *retInfo);
+/* Get a single fly cDNA sequence. Optionally (if retInfo is non-null) get additional
+ * info about the sequence. */
+
+char *flyFeaturesDir();
+/* Return the features directory. (Includes trailing slash.) */
+
+FILE *flyOpenGoodAli();
+/* Opens good alignment file and reads signature. 
+ * (You can then cdaLoadOne() it.) */
+
+#endif /* FLYDNA_H */
+
diff --git a/gbtools/src/include/blatSrc/fof.h b/gbtools/src/include/blatSrc/fof.h
new file mode 100644
index 0000000..af2d27a
--- /dev/null
+++ b/gbtools/src/include/blatSrc/fof.h
@@ -0,0 +1,82 @@
+/*****************************************************************************
+ * Copyright (C) 2000 Jim Kent.  This source code may be freely used         *
+ * for personal, academic, and non-profit purposes.  Commercial use          *
+ * permitted only by explicit agreement with Jim Kent (jim_kent at pacbell.net) *
+ *****************************************************************************/
+/* fof.h - Manages a fof-type index file.  This index refers
+ * to records in multiple external files. */
+
+struct fofPos
+/* This holds the result of a FOF search. */
+    {
+    FILE *f;              /* File. */
+    bits32 offset;        /* Offset within file. */
+    bits32 size;          /* Size within file. */
+    int indexIx;          /* Position within index. */
+    char *fileName;       /* File name. */
+    };
+
+
+struct fof *fofOpen(char *fofName, char *fofDir);
+/* Open up the named fof. fofDir may be NULL.  It should include 
+ * trailing '/' if non-null. */
+
+void fofClose(struct fof **pFof);
+/* Close down the named fof. */
+
+int fofElementCount(struct fof *fof);
+/* How many names are in fof file? */
+
+void fofMake(char *inFiles[], int inCount, char *outName, 
+    boolean (*readHeader)(FILE *inFile, void *data),
+    boolean (*nextRecord)(FILE *inFile, void *data, char **rName, int *rNameLen), 
+    void *data, boolean dupeOk);
+/* Make an index file
+ * Inputs:
+ *     inFiles - List of files that you're indexing with header read and verified.
+ *     inCount - Size of file list.
+ *     outName - name of index file to create
+ *     readHeader - function that sets up file to read first record.  May be NULL.
+ *     nextRecord - function that reads next record in file you're indexing
+ *                  and returns the name of that record.  Returns FALSE at
+ *                  end of file.  Can set *rNameLen to zero you want indexer
+ *                  to ignore the record. 
+ *     data - void pointer passed through to nextRecord.
+ *     dupeOk - set to TRUE if you want dupes to not cause squawking
+ */
+
+boolean fofFindFirst(struct fof *fof, char *prefix, 
+    int prefixSize, struct fofPos *retPos);
+/* Find first element with key starting with prefix. */
+
+boolean fofFind(struct fof *fof, char *name, struct fofPos *retPos);
+/* Find element corresponding with name.  Returns FALSE if no such name
+ * in the index file. */
+
+void *fofFetch(struct fof *fof, char *name, int *retSize);
+/* Lookup element in index, allocate memory for it, and read
+ * it.  Returns buffer with element in it, which should be
+ * freeMem'd when done. Aborts if element isn't there. */
+
+char *fofFetchString(struct fof *fof, char *name, int *retSize);
+/* Lookup element in index, allocate memory for it, read it.
+ * Returns zero terminated string with element in it, which 
+ * should be freeMem'd when done. Aborts if element isn't there. */
+
+struct fofBatch
+/* A structure for doing batch FOF searches.  Client fills
+ * in key and data members.  fofBatchSearch then fills in
+ * file, offset, and size members.  The list on return is
+ * sorted by file position for fast i/o. */
+    {
+    struct fofBatch *next;  /* Next in list. */
+    char *key;              /* Lookup key - filled in by client. Not allocate here. */
+    void *data;             /* Data associated with key - filled in by client. */
+    FILE *f;                /* File - filled in by server. */
+    bits32 offset;          /* Offset in file - filled in by server. */
+    bits32 size;            /* Size in file - filled in by server. */
+    };
+ 
+struct fofBatch *fofBatchFind(struct fof *fof, struct fofBatch *list);
+/* Look up all of members on list. */
+
diff --git a/gbtools/src/include/blatSrc/fq.h b/gbtools/src/include/blatSrc/fq.h
new file mode 100644
index 0000000..22b04f4
--- /dev/null
+++ b/gbtools/src/include/blatSrc/fq.h
@@ -0,0 +1,26 @@
+/* fq - stuff for doing i/o on fastq files. */
+
+#ifndef FQ_H
+#define FQ_H
+
+struct fq
+/* Representation of record as 3 lines of text, not further parsed.  We omit the 1 of 4 lines in the
+ * fastq record, using '+' as a marker between dna and quality. */
+    {
+    struct fq *next;
+    char *header;   // This line starts with @ and contains the sequence name plus other stuff
+    char *dna;  // ACGT and on occassional N normally
+    unsigned char *quality; // Might be 33-based (Sanger) or 64 based (Solexa)
+    };
+
+struct fq *fqReadNext(struct lineFile *lf);
+/* Read next record, return a fq struct. */
+
+void fqFree(struct fq **pFq);
+/* Free up *pFq and set it to NULL */
+
+void fqWriteNext(struct fq *input, FILE *f);
+/*  Writes a single fastq structure to the file provided. */
+
+#endif /* FQ_H */
+
diff --git a/gbtools/src/include/blatSrc/fuzzyFind.h b/gbtools/src/include/blatSrc/fuzzyFind.h
new file mode 100644
index 0000000..c54ee8a
--- /dev/null
+++ b/gbtools/src/include/blatSrc/fuzzyFind.h
@@ -0,0 +1,260 @@
+/*****************************************************************************
+ * Copyright (C) 2000 Jim Kent.  This source code may be freely used         *
+ * for personal, academic, and non-profit purposes.  Commercial use          *
+ * permitted only by explicit agreement with Jim Kent (jim_kent at pacbell.net) *
+ *****************************************************************************/
+/* fuzzyFind.h - This is the interface to the fuzzyFind
+ * DNA sequence aligner.  This just returns a single
+ * alignment - the one the algorithm thinks is best.
+ * The algorithm is heuristic, but pretty good.  (See
+ * comments in the fuzzyFind.c file for more details.) It
+ * is not good for finding distant homologies, but it
+ * will fairly reliably align a somewhat noisy cDNA
+ * sequence with genomic sequence.
+ *
+ * The main data structure is the ffAli - which is
+ * a node in a doubly linked list.  The finder algorithm
+ * returns a pointer to the leftmost node in the list.
+ * When you're done with the alignment you can dispose
+ * of it via ffFreeAli.
+ *
+ * The finder supports three levels of stringency.
+ * Generally you're best off using "ffTight".  "ffLoose"
+ * will allow for more distant matches, but at the 
+ * expense of very often taking several seconds to
+ * return a garbage alignment.  "ffExact" requires
+ * an exact match - which is quick, but in the
+ * real world not so often useful.
+ *
+ * If you want to compare alignments use ffScore.
+ */
+
+#ifndef FUZZYFIND_H
+#define FUZZYFIND_H
+
+#ifndef MEMGFX_H
+#include "memgfx.h"
+#endif 
+
+#ifndef DNAUTIL_H
+#include "dnautil.h"
+#endif
+
+#ifndef LOCALMEM_H
+#include "localmem.h"
+#endif
+
+#ifndef ALITYPE_H
+#include "aliType.h"
+#endif
+
+struct ffAli
+/* Node of a doubly linked list that will contain one
+ * alignment. Contains information on a matching
+ * set of DNA between needle and haystack. */
+    {
+    struct ffAli *left;   /* Neighboring intervals. */
+    struct ffAli *right;
+    char *nStart, *nEnd;          /* Needle start and end. (1/2 open interval) */
+    char *hStart, *hEnd;          /* Haystack start and end. */
+    int startGood, endGood; /* Number that match perfectly on ends. */
+    };
+
+/* maximum intron size for fuzzy find functions */
+
+#define ffIntronMaxDefault 750000	/* Default maximum intron size */
+
+extern int ffIntronMax;
+
+void setFfIntronMax(int value);         /* change max intron size */
+void setFfExtendThroughN(boolean val);	/* Set whether or not can extend through N's. */
+
+/************* lib/ffAli.c routines - using alignments ************/
+
+void ffFreeAli(struct ffAli **pAli);
+/* Dispose of memory gotten from fuzzyFind(). */
+
+int ffOneIntronOrientation(struct ffAli *left, struct ffAli *right);
+/* Return 1 for GT/AG intron between left and right, -1 for CT/AC, 0 for no
+ * intron. */
+
+int ffIntronOrientation(struct ffAli *ali);
+/* Return + for positive orientation overall, - for negative,
+ * 0 if can't tell. */
+
+int ffScoreIntron(DNA a, DNA b, DNA y, DNA z, int orientation);
+/* Return a better score the closer an intron is to
+ * consensus. Max score is 4. */
+
+struct ffAli *ffRightmost(struct ffAli *ff);
+/* Return rightmost block of alignment. */
+
+struct ffAli *ffMakeRightLinks(struct ffAli *rightMost);
+/* Given a pointer to the rightmost block in an alignment
+ * which has all of the left pointers filled in, fill in
+ * the right pointers and return the leftmost block. */
+ 
+void ffCountGoodEnds(struct ffAli *aliList);
+/* Fill in the goodEnd and badEnd scores. */
+
+int ffAliCount(struct ffAli *d);
+/* How many blocks in alignment? */
+
+struct ffAli *ffAliFromSym(int symCount, char *nSym, char *hSym,
+	struct lm *lm, char *nStart, char *hStart);
+/* Convert symbol representation of alignments (letters plus '-')
+ * to ffAli representation.  If lm is nonNULL, ffAli result 
+ * will be lmAlloced, else it will be needMemed. This routine
+ * depends on nSym/hSym being zero terminated. */
+
+/************* lib/ffScore.c routines - scoring alignments ************/
+
+int ffScoreMatch(DNA *a, DNA *b, int size);
+/* Compare two pieces of DNA base by base. Total mismatches are
+ * subtracted from total matches and returned as score. 'N's 
+ * neither hurt nor help score. */
+
+int ffScoreCdna(struct ffAli *ali);
+/* Return score of alignment.  A perfect alignment score will
+ * be the number of bases in needle. */
+
+int ffScore(struct ffAli *ali, enum ffStringency stringency);
+/* Score DNA based alignment. */
+
+int ffScoreProtein(struct ffAli *ali, enum ffStringency stringency);
+/* Figure out overall score of protein alignment. */
+
+int ffScoreSomething(struct ffAli *ali, enum ffStringency stringency,
+   boolean isProt);
+/* Score any alignment. */
+
+int ffScoreSomeAlis(struct ffAli *ali, int count, enum ffStringency stringency);
+/* Figure out score of count consecutive alis. */
+
+int ffCalcGapPenalty(int hGap, int nGap, enum ffStringency stringency);
+/* Return gap penalty for given h and n gaps. */
+
+int ffCalcCdnaGapPenalty(int hGap, int nGap);
+/* Return gap penalty for given h and n gaps in cDNA. */
+
+int ffGapPenalty(struct ffAli *ali, struct ffAli *right, enum ffStringency stringency);
+/* Calculate gap penaltly for alignment. */
+
+int ffCdnaGapPenalty(struct ffAli *ali, struct ffAli *right);
+/* Calculate gap penaltly for cdna alignment. */
+
+/************* jkOwnLib/ffAliHelp -helpers for alignment producers. ****************/
+
+boolean ffSlideIntrons(struct ffAli *ali);
+/* Slide introns (or spaces between aligned blocks)
+ * to match consensus.  Return TRUE if any slid. */
+
+boolean ffSlideOrientedIntrons(struct ffAli *ali, int orient);
+/* Slide introns (or spaces between aligned blocks)
+ * to match consensus on given strand (usually from ffIntronOrientation). */
+
+struct ffAli *ffRemoveEmptyAlis(struct ffAli *ali, boolean doFree);
+/* Remove empty blocks from list. Optionally free empties too. */
+
+struct ffAli *ffMergeHayOverlaps(struct ffAli *ali);
+/* Remove overlaps in haystack that perfectly abut in needle.
+ * These are transformed into perfectly abutting haystacks
+ * that have a gap in the needle. */
+
+struct ffAli *ffMergeNeedleAlis(struct ffAli *ali, boolean doFree);
+/* Remove overlapping areas needle in alignment. Assumes ali is sorted on
+ * ascending nStart field. Also merge perfectly abutting neighbors.*/
+
+void ffExpandExactRight(struct ffAli *ali, DNA *needleEnd, DNA *hayEnd);
+/* Expand aligned segment to right as far as can exactly. */
+
+void ffExpandExactLeft(struct ffAli *ali, DNA *needleStart, DNA *hayStart);
+/* Expand aligned segment to left as far as can exactly. */
+
+struct ffAli *ffMergeClose(struct ffAli *aliList, 
+	DNA *needleStart, DNA *hayStart);
+/* Remove overlapping areas needle in alignment. Assumes ali is sorted on
+ * ascending nStart field. Also merge perfectly abutting neighbors or
+ * ones that could be merged at the expense of just a few mismatches.*/
+
+void ffAliSort(struct ffAli **pList, 
+	int (*compare )(const void *elem1,  const void *elem2));
+/* Sort a doubly linked list of ffAlis. */
+
+void ffCat(struct ffAli **pA, struct ffAli **pB);
+/* Concatenate B to the end of A. Eat up second list
+ * in process. */
+
+int ffCmpHitsHayFirst(const void *va, const void *vb);
+/* Compare function to sort hit array by ascending
+ * target offset followed by ascending query offset. */
+
+int ffCmpHitsNeedleFirst(const void *va, const void *vb);
+/* Compare function to sort hit array by ascending
+ * query offset followed by ascending target offset. */
+
+/************* jkOwnLib/fuzzyFind - old local cDNA alignment. ****************/
+
+struct ffAli *ffFind(DNA *needleStart, DNA *needleEnd, DNA *hayStart, DNA *hayEnd,
+    enum ffStringency stringency);
+/* Return an alignment of needle in haystack. (Returns left end of doubly
+ * linked alignment list.) The input DNA is all expected to be lower case
+ * characters - a, c, g, t, or n. */
+
+boolean ffFindEitherStrand(DNA *needle, DNA *haystack, enum ffStringency stringency,
+    struct ffAli **pAli, boolean *pRcNeedle);
+/* Return TRUE if find an alignment using needle, or reverse complement of 
+ * needle to search haystack. DNA must be lower case. Needle and haystack
+ * are zero terminated. */
+
+boolean ffFindEitherStrandN(DNA *needle, int needleSize, DNA *haystack, int haySize,
+    enum ffStringency stringency, struct ffAli **pAli, boolean *pRcNeedle);
+/* Return TRUE if find an alignment using needle, or reverse complement of 
+ * needle to search haystack. DNA must be lower case. */
+
+boolean ffFindAndScore(DNA *needle, int needleSize, DNA *haystack, int haySize,
+    enum ffStringency stringency, struct ffAli **pAli, boolean *pRcNeedle, int *pScore);
+/* Return TRUE if find an alignment using needle, or reverse complement of 
+ * needle to search haystack. DNA must be lower case. If pScore is non-NULL returns
+ * score of alignment. */
+
+/************* lib/fuzzyShow - display alignments. ****************/
+
+void ffShowSideBySide(FILE *f, struct ffAli *leftAli, DNA *needle, int needleNumOffset,
+		      DNA *haystack, int hayNumOffset, int haySize, int hayOffStart, int hayOffEnd,
+		      int blockMaxGap, boolean rcHaystack, boolean initialNewline);
+/* Print HTML side-by-side alignment of needle and haystack (no title or labels) to f.
+ * {hay,needle}NumOffset are the coords at which the DNA sequence begins.
+ * hayOff{Start,End} are the range of coords *relative to hayNumOffset* to which the 
+ * alignment display will be clipped -- pass in {0,haySize} for no clipping. */
+
+int ffShAliPart(FILE *f, struct ffAli *aliList, 
+    char *needleName, DNA *needle, int needleSize, int needleNumOffset,
+    char *haystackName, DNA *haystack, int haySize, int hayNumOffset,
+    int blockMaxGap, boolean rcNeedle, boolean rcHaystack,
+    boolean showJumpTable, 
+    boolean showNeedle, boolean showHaystack,
+    boolean showSideBySide, boolean upcMatch,
+    int cdsS, int cdsE, int hayPartS, int hayPartE);
+/* Display parts of alignment on html page.  If hayPartS..hayPartE is a 
+ * smaller subrange of the alignment, highlight that part of the alignment 
+ * in both needle and haystack with underline & bold, and show only that 
+ * part of the haystack (plus padding).  Returns number of blocks (after
+ * merging blocks separated by blockMaxGap or less). */
+
+int ffShAli(FILE *f, struct ffAli *aliList, 
+    char *needleName, DNA *needle, int needleSize, int needleNumOffset,
+    char *haystackName, DNA *haystack, int haySize, int hayNumOffset,
+    int blockMaxGap,
+    boolean rcNeedle);
+/* Display alignment on html page.  Returns number of blocks (after
+ * merging blocks separated by blockMaxGap or less). */
+
+void ffShowAli(struct ffAli *aliList, 
+    char *needleName, DNA *needle, int needleNumOffset,
+    char *haystackName, DNA *haystack, int hayNumOffset,
+    boolean rcNeedle);
+/* Display alignment on html page to stdout. */
+
+#endif /* FUZZYFIND_H */
+
diff --git a/gbtools/src/include/blatSrc/gapCalc.h b/gbtools/src/include/blatSrc/gapCalc.h
new file mode 100644
index 0000000..8da6208
--- /dev/null
+++ b/gbtools/src/include/blatSrc/gapCalc.h
@@ -0,0 +1,44 @@
+/* gapCalc - Stuff to calculate complex (but linear) gap costs quickly,
+ * and read specifications from a file. */
+
+#ifndef GAPCALC_H
+#define GAPCALC_H
+
+    
+struct gapCalc;	  /* Predeclare structure.  It's complex and private though, so
+                   * real declaration is in gapCalc.c. */
+
+struct gapCalc *gapCalcDefault();
+/* Return default gapCalc. */
+
+struct gapCalc *gapCalcRnaDna();
+/* Return gaps suitable for RNA queries vs. DNA targets */
+
+struct gapCalc *gapCalcCheap();
+/* Return cheap gap costs. */
+
+struct gapCalc *gapCalcOriginal();
+/* Return gap costs from original paper. */
+
+struct gapCalc *gapCalcFromFile(char *fileName);
+/* Return gapCalc from file. */
+
+struct gapCalc *gapCalcFromString(char *s);
+/* Return gapCalc from description string. */
+
+struct gapCalc *gapCalcRead(struct lineFile *lf);
+/* Create gapCalc from open file. */
+
+void gapCalcFree(struct gapCalc **pGapCalc);
+/* Free up resources associated with gapCalc. */
+
+int gapCalcCost(struct gapCalc *gapCalc, int dq, int dt);
+/* Figure out gap costs. */
+
+char *gapCalcSampleFileContents();
+/* Return contents of a sample linear gap file. */
+
+void gapCalcTest(struct gapCalc *gapCalc);
+/* Print out gap cost info. */
+
+#endif /* GAPCALC_H */
diff --git a/gbtools/src/include/blatSrc/gdf.h b/gbtools/src/include/blatSrc/gdf.h
new file mode 100644
index 0000000..07380df
--- /dev/null
+++ b/gbtools/src/include/blatSrc/gdf.h
@@ -0,0 +1,61 @@
+/*****************************************************************************
+ * Copyright (C) 2000 Jim Kent.  This source code may be freely used         *
+ * for personal, academic, and non-profit purposes.  Commercial use          *
+ * permitted only by explicit agreement with Jim Kent (jim_kent at pacbell.net) *
+ *****************************************************************************/
+/* gdf - Intronerator Gene Description File. */
+
+#ifndef GDF_H
+#define GDF_H
+
+#ifndef DNAUTIL_H
+#include "dnautil.h"
+#endif
+
+struct gdfDataPoint
+/* This stores data at each exon/intron boundary. */
+    {
+    int start;
+    };
+
+struct gdfGene
+/* One structure of these for each gene (each isoform of each gene
+ * actually. */
+    {
+    struct gdfGene *next;
+    char *name;
+    int dataCount;
+    struct gdfDataPoint *dataPoints;
+    char strand;
+    UBYTE chromIx;
+    };
+
+struct gdfGene *newGdfGene(char *name, int nameSize, int exonCount, char strand, UBYTE chromIx);
+/* Return a new gene. */
+
+void gdfFreeGene(struct gdfGene *gene);
+/* Free a gene. */
+
+void gdfFreeGeneList(struct gdfGene **pList);
+/* Free a whole list of genes. */
+
+struct gdfGene *gdfReadOneGene(FILE *f);
+/* Read one entry from a Gdf file.  Assumes that the file pointer
+ * is in the right place. */
+
+void gdfGeneExtents(struct gdfGene *gene, long *pMin, long *pMax);
+/* Figure out first and last base in gene. */
+
+void gdfOffsetGene(struct gdfGene *gene, int offset);
+/* Add offset to each point in gene */
+
+void gdfRcGene(struct gdfGene *gene, int size);
+/* Flip gene to other strand. Assumes dataPoints are already
+ * moved into range from 0-size */
+
+void gdfUpcExons(struct gdfGene *gene, int geneOffset, DNA *dna, int dnaSize, int dnaOffset);
+/* Uppercase exons in DNA. */
+
+
+#endif /* GDF_H */
+
diff --git a/gbtools/src/include/blatSrc/genoFind.h b/gbtools/src/include/blatSrc/genoFind.h
new file mode 100644
index 0000000..856c3d2
--- /dev/null
+++ b/gbtools/src/include/blatSrc/genoFind.h
@@ -0,0 +1,385 @@
+/* genoFind.h - Interface to modules for fast finding of sequence
+ * matches. */
+/* Copyright 2001-2002 Jim Kent.  All rights reserved. */
+
+#ifndef GENOFIND_H
+#define GENOFIND_H
+
+#ifndef DNASEQ_H
+#include "dnaseq.h"
+#endif
+
+#ifndef FUZZYFIND_H
+#include "fuzzyFind.h"
+#endif
+
+#ifndef HASH_H
+#include "hash.h"
+#endif
+
+#ifndef ALITYPE_H
+#include "aliType.h"
+#endif
+
+#ifndef LOCALMEM_H
+#include "localmem.h"
+#endif 
+
+#ifndef BITS_H
+#include "bits.h"
+#endif
+
+#ifndef AXT_H
+#include "axt.h"
+#endif
+
+enum gfConstants {
+    gfMinMatch = 2,
+    gfMaxGap = 2,
+    gfTileSize = 11,
+    gfMaxTileUse = 1024,
+    gfPepMaxTileUse = 30000,
+};
+
+struct gfSeqSource
+/* Where a block of sequence comes from. */
+    {
+    struct gfSeqSource *next;
+    char *fileName;	/* Name of file. */
+    bioSeq *seq;	/* Sequences.  Usually either this or fileName is NULL. */
+    bits32 start,end;	/* Position within merged sequence. */
+    Bits *maskedBits;	/* If non-null contains repeat-masking info. */
+    };
+
+struct gfHit
+/* A genoFind hit. */
+   {
+   struct gfHit *next;
+   bits32 qStart;		/* Where it hits in query. */
+   bits32 tStart;		/* Where it hits in target. */
+   bits32 diagonal;		/* tStart + qSize - qStart. */
+   };
+
+/* gfHits are free'd with simple freeMem or slFreeList. */
+
+struct gfClump
+/* A clump of hits. */
+/* Note: for clumps from regular (blat) queries, tStart and tEnd include 
+ * target->start, but for clumps from gfPcrClumps(), tStart and tEnd have 
+ * already had target->start subtracted.  So tStart and tEnd in PCR clumps 
+ * are relative to that target sequence (not the collection of all target 
+ * sequences). */
+    {
+    struct gfClump *next;	/* Next clump. */
+    bits32 qStart, qEnd;	/* Position in query. */
+    struct gfSeqSource *target;	/* Target source sequence. */
+    bits32 tStart, tEnd;	/* Position in target. */
+    int hitCount;		/* Number of hits. */
+    struct gfHit *hitList;	/* List of hits. Not allocated here. */
+    int queryCoverage;		/* Number of bases covered in query (thx AG!) */
+    };
+
+void gfClumpFree(struct gfClump **pClump);
+/* Free a single clump. */
+
+void gfClumpFreeList(struct gfClump **pList);
+/* Free a list of dynamically allocated gfClump's */
+
+struct genoFind
+/* An index of all K-mers in the genome. */
+    {
+    int maxPat;                          /* Max # of times pattern can occur
+                                          * before it is ignored. */
+    int minMatch;                        /* Minimum number of tile hits needed
+                                          * to trigger a clump hit. */
+    int maxGap;                          /* Max gap between tiles in a clump. */
+    int tileSize;			 /* Size of each N-mer. */
+    int stepSize;			 /* Spacing between N-mers. */
+    int tileSpaceSize;                   /* Number of N-mer values. */
+    int tileMask;			 /* 1-s for each N-mer. */
+    int sourceCount;			 /* Count of source files. */
+    struct gfSeqSource *sources;         /* List of sequence sources. */
+    bool isPep;			 	 /* Is a peptide. */
+    bool allowOneMismatch;		 /* Allow a single mismatch? */
+    int segSize;			 /* Index is segmented if non-zero. */
+    bits32 totalSeqSize;		 /* Total size of all sequences. */
+    bits32 *listSizes;                   /* Size of list for each N-mer */
+    void *allocated;                     /* Storage space for all lists. */
+    bits32 **lists;                      /* A list for each N-mer. Used if
+                                          * isSegmented is false. */
+    bits16 **endLists;                   /* A more complex list for each N-mer.
+                                          * Used if isSegmented is true.
+					  * Values come in groups of threes.
+					  * The first is the packed last few
+					  * letters of the tile.  The next two
+					  * are the offset in the genome.  This
+					  * would be a struct but that would take
+					  * 8 bytes instead of 6, or nearly an
+					  * extra gigabyte of RAM. */
+    };
+
+void genoFindFree(struct genoFind **pGenoFind);
+/* Free up a genoFind index. */
+
+struct gfSeqSource *gfFindNamedSource(struct genoFind *gf, char *name);
+/* Find target of given name.  Return NULL if none. */
+
+/* ---  Stuff for saving results ---- */
+
+
+struct gfOutput
+/* A polymorphic object to help us write many file types. */
+    {
+    struct gfOutput *next;
+    void *data;		/* Type-specific data pointer.  Must be freeMem'able */
+    void (*out)(char *chromName, int chromSize, int chromOffset,
+	    struct ffAli *ali, bioSeq *tSeq, struct hash *t3Hash, bioSeq *qSeq, 
+	    boolean qIsRc, boolean tIsRc,
+	    enum ffStringency stringency, int minMatch, struct gfOutput *out);
+    /* This is the type of a client provided function to save an alignment. 
+     * The parameters are:
+     *     chromName - name of target (aka genomic or database) sequence.
+     *     chromSize - size of target sequence.
+     *     chromOffset - offset of genoSequence in target.
+     *     ffAli - alignment with pointers into tSeq/qSeq or in
+     *             translated target case, into t3Hash.
+     *     tSeq - part of target sequence in normal case.   In translated
+     *             target case look at t3Hash instead.
+     *     t3Hash - used only in translated target case.  A hash keyed by
+     *             target sequence name with values *lists* of trans3 structures.
+     *             This hash can be searched to find both the translated and
+     *             untranslated versions of the bits of the target that are in 
+     *             memory.  (You can assume at this point all parts needed for
+     *             output are indeed in memory.)
+     *     qSeq - query sequence (this isn't segmented at all). 
+     *     isRc - True if query is reverse complemented.
+     *     stringency - ffCdna, etc.  I'm hoping to move this elsewhere.
+     *     minMatch - minimum score to output.  Also should be moved elsewhere.
+     *     outputData - custom data for specific output function.
+     * The interface is a bit complex - partly from the demands of translated
+     * output, and partly from trying not to have the entire target sequence in
+     * memory.
+     */
+    void (*queryOut)(struct gfOutput *out, FILE *f); 
+    /* Called for each query */
+
+    void (*fileHead)(struct gfOutput *out, FILE *f);
+    /* Write file header if any */
+
+    boolean reportTargetStrand; /* Report target as well as query strand? */
+    struct hash *maskHash;	/* associates target sequence name and mask. */
+    int minGood;		/* Minimum sequence identity in thousandths. */
+    boolean qIsProt;		/* Query is peptide. */
+    boolean tIsProt;		/* Target is peptide. */
+    int queryIx;		/* Index of query */
+    boolean includeTargetFile;	/* Prefix file: to target sequence name. */
+    };
+
+struct gfOutput *gfOutputAny(char *format, 
+	int goodPpt, boolean qIsProt, boolean tIsProt, 
+	boolean noHead, char *databaseName,
+	int databaseSeqCount, double databaseLetters,
+	double minIdentity, FILE *f);
+/* Initialize output in a variety of formats in file or memory. 
+ * Parameters:
+ *    format - either 'psl', 'pslx', 'blast', 'wublast', 'axt'
+ *    goodPpt - minimum identity of alignments to output in parts per thousand
+ *    qIsProt - true if query side is a protein.
+ *    tIsProt - true if target (database) side is a protein.
+ *    noHead - if true suppress header in psl/pslx output.
+ *    databaseName - name of database.  Only used for blast output
+ *    databaseSeq - number of sequences in database - only for blast
+ *    databaseLetters - number of bases/aas in database - only blast
+ *    FILE *f - file.  
+ */
+
+struct gfOutput *gfOutputPsl(int goodPpt, 
+	boolean qIsProt, boolean tIsProt, FILE *f, 
+	boolean saveSeq, boolean noHead);
+/* Set up psl/pslx output */
+
+struct gfOutput *gfOutputAxt(int goodPpt, boolean qIsProt, 
+	boolean tIsProt, FILE *f);
+/* Setup output for axt format. */
+
+struct gfOutput *gfOutputAxtMem(int goodPpt, boolean qIsProt, 
+	boolean tIsProt);
+/* Setup output for in memory axt output. */
+
+struct gfOutput *gfOutputBlast(int goodPpt, 
+	boolean qIsProt, boolean tIsProt, 
+	char *databaseName, int databaseSeqCount, double databaseLetters,
+	char *blastType, /* blast, blast8, blast9, wublast, or xml */
+	double minIdentity, FILE *f);
+/* Setup output for blast/wublast format. */
+
+void gfOutputQuery(struct gfOutput *out, FILE *f);
+/* Finish writing out results for a query to file. */
+
+void gfOutputHead(struct gfOutput *out, FILE *f);
+/* Write out header if any. */
+
+void gfOutputFree(struct gfOutput **pOut);
+/* Free up output. */
+
+/* -------- Routines to build up index ------------ */
+
+void gfCheckTileSize(int tileSize, boolean isPep);
+/* Check that tile size is legal.  Abort if not. */
+
+struct genoFind *gfIndexSeq(bioSeq *seqList,
+	int minMatch, int maxGap, int tileSize, int maxPat, char *oocFile,
+	boolean isPep, boolean allowOneMismatch, boolean maskUpper,
+	int stepSize);
+/* Make index for all seqs in list. 
+ *      minMatch - minimum number of matching tiles to trigger alignments
+ *      maxGap   - maximum deviation from diagonal of tiles
+ *      tileSize - size of tile in nucleotides
+ *      maxPat   - maximum use of tile to not be considered a repeat
+ *      oocFile  - .ooc format file that lists repeat tiles.  May be NULL. 
+ *      isPep    - TRUE if indexing proteins, FALSE for DNA. 
+ *      maskUpper - Mask out upper case sequence (currently only for nucleotides).
+ *      stepSize - space between tiles.  Zero means default (which is tileSize). 
+ * For DNA sequences upper case bits will be unindexed. */
+
+struct genoFind *gfIndexNibsAndTwoBits(int fileCount, char *fileNames[],
+	int minMatch, int maxGap, int tileSize, int maxPat, char *oocFile, 
+	boolean allowOneMismatch, int stepSize);
+/* Make index for all .nib and .2bits in list. 
+ *      minMatch - minimum number of matching tiles to trigger alignments
+ *      maxGap   - maximum deviation from diagonal of tiles
+ *      tileSize - size of tile in nucleotides
+ *      maxPat   - maximum use of tile to not be considered a repeat
+ *      oocFile  - .ooc format file that lists repeat tiles.  May be NULL. 
+ *      allowOneMismatch - allow one mismatch in a tile.  
+ *      stepSize - space between tiles.  Zero means default (which is tileSize). */
+
+void gfIndexTransNibsAndTwoBits(struct genoFind *transGf[2][3], 
+    int fileCount, char *fileNames[], 
+    int minMatch, int maxGap, int tileSize, int maxPat, char *oocFile,
+    boolean allowOneMismatch, boolean mask, int stepSize);
+/* Make translated (6 frame) index for all .nib and .2bit files. */
+
+/* -------- Routines to scan index for homolgous areas ------------ */
+
+struct gfClump *gfFindClumps(struct genoFind *gf, struct dnaSeq *seq, 
+	struct lm *lm, int *retHitCount);
+/* Find clumps associated with one sequence. */
+
+struct gfClump *gfFindClumpsWithQmask(struct genoFind *gf, bioSeq *seq, 
+        Bits *qMaskBits, int qMaskOffset,
+	struct lm *lm, int *retHitCount);
+/* Find clumps associated with one sequence soft-masking seq according to qMaskBits */
+
+struct gfHit *gfFindHitsInRegion(struct genoFind *gf, bioSeq *seq, 
+	Bits *qMaskBits, int qMaskOffset, struct lm *lm, 
+	struct gfSeqSource *target, int tMin, int tMax);
+/* Find hits restricted to one particular region. 
+ * The hits returned by this will be in target sequence
+ * coordinates rather than concatenated whole genome
+ * coordinates as hits inside of clumps usually are.  */
+
+void gfTransFindClumps(struct genoFind *gfs[3], aaSeq *seq, struct gfClump *clumps[3], struct lm *lm, int *retHitCount);
+/* Find clumps associated with one sequence in three translated reading frames. */
+
+void gfTransTransFindClumps(struct genoFind *gfs[3], aaSeq *seqs[3], 
+	struct gfClump *clumps[3][3], struct lm *lm, int *retHitCount);
+/* Find clumps associated with three sequences in three translated 
+ * reading frames. Used for translated/translated protein comparisons. */
+
+void gfClumpDump(struct genoFind *gf, struct gfClump *clump, FILE *f);
+/* Print out info on clump.  This routine subtracts clump->target->start 
+ * from clump->tStart and from clump->tEnd for printing, so that printed 
+ * coords are relative to that target sequence. */
+
+
+void gfAlignAaClumps(struct genoFind *gf,  struct gfClump *clumpList, aaSeq *seq,
+    boolean isRc,  int minMatch,  struct gfOutput *out);
+/* Convert gfClumps to an actual alignment that gets saved via 
+ * outFunction/outData. */
+
+void gfFindAlignAaTrans(struct genoFind *gfs[3], aaSeq *qSeq, struct hash *t3Hash, 
+	boolean tIsRc, int minMatch, struct gfOutput *out);
+/* Look for qSeq alignment in three translated reading frames. Save alignment
+ * via outFunction/outData. */
+
+
+/* ---  Some routines for dealing with gfServer at a low level ---- */
+
+char *gfSignature();
+/* Return signature that starts each command to gfServer. Helps defend 
+ * server from confused clients. */
+
+void gfCatchPipes();
+/* Set up to catch broken pipe signals. */
+
+int gfReadMulti(int sd, void *vBuf, size_t size);
+/* Read in until all is read or there is an error. */
+
+/* ---  Some routines for dealing with gfServer at a high level ---- */
+
+struct hash *gfFileCacheNew();
+/* Create hash for storing info on .nib and .2bit files. */
+
+void gfFileCacheFree(struct hash **pCache);
+/* Free up resources in cache. */
+
+void gfAlignStrand(int *pConn, char *nibDir, struct dnaSeq *seq,
+    boolean isRc,  int minMatch, 
+    struct hash *tFileCache, struct gfOutput *out);
+/* Search genome on server with one strand of other sequence to find homology. 
+ * Then load homologous bits of genome locally and do detailed alignment.
+ * Call 'outFunction' with each alignment that is found.  gfSavePsl is a handy
+ * outFunction to use. */
+
+void gfAlignTrans(int *pConn, char *nibDir, aaSeq *seq,
+    int minMatch, struct hash *tFileHash, struct gfOutput *out);
+/* Search indexed translated genome on server with an amino acid sequence. 
+ * Then load homologous bits of genome locally and do detailed alignment.
+ * Call 'outFunction' with each alignment that is found. */
+
+void gfAlignTransTrans(int *pConn, char *nibDir, struct dnaSeq *seq, 
+	boolean qIsRc, int minMatch, struct hash *tFileCache, 
+	struct gfOutput *out, boolean isRna);
+/* Search indexed translated genome on server with an dna sequence.  Translate
+ * this sequence in three frames. Load homologous bits of genome locally
+ * and do detailed alignment.  Call 'outFunction' with each alignment
+ * that is found. */
+
+int gfConnect(char *hostName, char *portName);
+/* Set up our network connection to server. */
+
+int gfDefaultRepMatch(int tileSize, int stepSize, boolean protTiles);
+/* Figure out appropriate step repMatch value. */
+
+void gfMakeOoc(char *outName, char *files[], int fileCount, 
+	int tileSize, bits32 maxPat, enum gfType tType);
+/* Count occurences of tiles in seqList and make a .ooc file. */
+
+void gfLongDnaInMem(struct dnaSeq *query, struct genoFind *gf, 
+   boolean isRc, int minScore, Bits *qMaskBits, struct gfOutput *out,
+   boolean fastMap, boolean band);
+/* Chop up query into pieces, align each, and stitch back
+ * together again. */
+
+void gfLongTransTransInMem(struct dnaSeq *query, struct genoFind *gfs[3], 
+   struct hash *t3Hash, boolean qIsRc, boolean tIsRc, boolean qIsRna,
+   int minScore, struct gfOutput *out);
+/* Chop up query into pieces, align each in translated space, and stitch back
+ * together again as nucleotides. */
+
+struct gfClump *gfPcrClumps(struct genoFind *gf, 
+        char *fPrimer, int fPrimerSize, char *rPrimer, int rPrimerSize,
+	int minDistance, int maxDistance);
+/* Find possible PCR hits.  The fPrimer and rPrimer are on opposite strands.
+ * Note: unlike clumps from other query functions, PCR clumps from this 
+ * function have already had clump->target->start subtracted from 
+ * clump->tStart and clump->tEnd so that the coords are relative to that 
+ * target sequence (not the collection of all target sequences). */
+
+#define MAXSINGLEPIECESIZE 5000 /* maximum size of a single piece */
+
+#define gfVersion "36"	/* Current BLAT version number */
+
+#endif /* GENOFIND_H */
+
diff --git a/gbtools/src/include/blatSrc/genomeRangeTree.h b/gbtools/src/include/blatSrc/genomeRangeTree.h
new file mode 100644
index 0000000..66d1e46
--- /dev/null
+++ b/gbtools/src/include/blatSrc/genomeRangeTree.h
@@ -0,0 +1,113 @@
+/* genomeRangeTree - This module is a way of keeping track of
+ * non-overlapping ranges (half-open intervals) across a whole
+ * genome (multiple chromosomes or scaffolds). 
+ * It is a hash table container mapping chrom to rangeTree.
+ * Most of the work is performed by rangeTree, this container
+ * enables local memory and stack to be shared by many rangeTrees
+ * so it should be able to handle genomes with a very large 
+ * number of scaffolds. See rangeTree for more information. */
+
+#ifndef GENOMERANGETREE_H
+#define GENOMERANGETREE_H
+
+#ifndef HASH_H
+#include "hash.h"
+#endif
+
+#ifndef DYSTRING_H
+#include "dystring.h"
+#endif
+
+#ifndef RANGETREE_H
+#include "rangeTree.h"
+#endif
+
+struct genomeRangeTree
+/* A structure that allows efficient random access of ranges of bases covered
+ * by a particular feature genome-wide.  Implemented as a range tree for each
+ * scaffold or chromosome in a genome. */
+    {
+    struct genomeRangeTree *next;  /* Next genomeRangeTree in list if any. */
+    struct hash *hash;             /* Hash of rangeTrees keyed by chromosome/scaffold name. */
+    struct rbTreeNode *stack[128]; /* Stack for binary search. */
+    struct lm *lm;                 /* Local memory pool for tree nodes and ranges. */
+    };
+
+struct genomeRangeTree *genomeRangeTreeNew();
+/* Create a new, empty, genomeRangeTree. Uses the default hash size.
+ * Free with genomeRangeTreeFree. */
+
+struct genomeRangeTree *genomeRangeTreeNewSize(int hashPowerOfTwoSize);
+/* Create a new, empty, genomeRangeTree. 
+ * Free with genomeRangeTreeFree. */
+
+void genomeRangeTreeFree(struct genomeRangeTree **pTree);
+/* Free up genomeRangeTree. */
+
+struct rbTree *genomeRangeTreeFindRangeTree(struct genomeRangeTree *tree, char *chrom);
+/* Find the rangeTree for this chromosome, if any. Returns NULL if chrom not found.
+ * Free with genomeRangeTreeFree. */
+
+struct rbTree *genomeRangeTreeFindOrAddRangeTree(struct genomeRangeTree *tree, char *chrom);
+/* Find the rangeTree for this chromosome, or add new chrom and empty rangeTree if not found.
+ * Free with genomeRangeTreeFree. */
+
+struct range *genomeRangeTreeAdd(struct genomeRangeTree *tree, char *chrom, int start, int end);
+/* Add range to tree, merging with existing ranges if need be. 
+ * Adds new rangeTree if chrom not found. */
+
+struct range *genomeRangeTreeAddVal(struct genomeRangeTree *tree, char *chrom, int start, int end, void *val, void *(*mergeVals)(void *existing, void*new));
+/* Add range to tree, merging with existing ranges if need be. 
+ * Adds new rangeTree if chrom not found. 
+ * If this is a new range, set the value to this val.
+ * If there are existing items for this range, and if mergeVals function is not null, 
+ * apply mergeVals to the existing values and this new val, storing the result as the val
+ * for this range (see rangeTreeAddValCount() and rangeTreeAddValList() below for examples). */
+
+struct range *genomeRangeTreeAddValCount(struct genomeRangeTree *tree, char *chrom, int start, int end);
+/* Add range to tree, merging with existing ranges if need be. 
+ * Adds new rangeTree if chrom not found. 
+ * Set range val to count of elements in the range. Counts are pointers to 
+ * ints allocated in tree localmem */
+
+struct range *genomeRangeTreeAddValList(struct genomeRangeTree *tree, char *chrom, int start, int end, void *val);
+/* Add range to tree, merging with existing ranges if need be. 
+ * Adds new rangeTree if chrom not found. 
+ * Add val to the list of values (if any) in each range.
+ * val must be valid argument to slCat (ie, be a struct with a 'next' pointer as its first member) */
+
+boolean genomeRangeTreeOverlaps(struct genomeRangeTree *tree, char *chrom, int start, int end);
+/* Return TRUE if start-end overlaps anything in tree. */
+
+int genomeRangeTreeOverlapSize(struct genomeRangeTree *tree, char *chrom, int start, int end);
+/* Return the total size of intersection between interval
+ * from start to end, and items in range tree. Sadly not
+ * thread-safe. */
+
+struct range *genomeRangeTreeFindEnclosing(struct genomeRangeTree *tree, char *chrom, int start, int end);
+/* Find item in range tree that encloses range between start and end 
+ * if there is any such item. */
+
+struct range *genomeRangeTreeAllOverlapping(struct genomeRangeTree *tree, char *chrom, int start, int end);
+/* Return list of all items in range tree that overlap interval start-end.
+ * Do not free this list, it is owned by tree.  However it is only good until
+ * next call to rangeTreeFindInRange or rangeTreeList. Not thread safe. */
+
+struct range *genomeRangeTreeMaxOverlapping(struct genomeRangeTree *tree, char *chrom, int start, int end);
+/* Return item that overlaps most with start-end. Not thread safe.  Trashes list used
+ * by rangeTreeAllOverlapping. */
+
+struct range *genomeRangeTreeList(struct genomeRangeTree *tree, char *chrom);
+/* Return list of all ranges in single rangeTree in order.  Not thread safe. 
+ * No need to free this when done, memory is local to tree. */
+
+struct dyString *genomeRangeTreeToString(struct genomeRangeTree *tree);
+/* Return a string representation of the genomeRangeTree.
+ * Useful for testing.
+ * Not thread-safe; uses globals */
+
+long long genomeRangeTreeSumRanges(struct genomeRangeTree *grt);
+/* Sum up all ranges in tree. */
+
+#endif /* GENOMERANGETREE_H */
+
diff --git a/gbtools/src/include/blatSrc/gfClientLib.h b/gbtools/src/include/blatSrc/gfClientLib.h
new file mode 100644
index 0000000..7f67a97
--- /dev/null
+++ b/gbtools/src/include/blatSrc/gfClientLib.h
@@ -0,0 +1,26 @@
+/* gfClientLib - stuff that both blat and pcr clients of
+ * genoFind use. */
+
+#ifndef GFCLIENTLIB_H
+#define GFCLIENTLIB_H
+
+void gfClientFileArray(char *fileName, char ***retFiles, int *retFileCount);
+/* Check if file if .2bit or .nib or .fa.  If so return just that
+ * file in a list of one.  Otherwise read all file and treat file
+ * as a list of filenames.  */
+
+bioSeq *gfClientSeqList(int fileCount, char *files[], 
+	boolean isProt, boolean isTransDna, char *maskType, 
+	float minRepDivergence, boolean showStatus);
+/* From an array of .fa and .nib file names, create a
+ * list of dnaSeqs, which are set up so that upper case is masked and lower case
+ * is unmasked sequence. (This is the opposite of the input, but set so that
+ * we can use lower case as our primary DNA sequence, which historically predates
+ * our use of lower case masking.)  Protein sequence on the other hand is
+ * all upper case. */
+
+void gfClientUnmask(struct dnaSeq *seqList);
+/* Unmask all sequences. */
+
+#endif /* GFCLIENTLIB_H */
+
diff --git a/gbtools/src/include/blatSrc/gfPcrLib.h b/gbtools/src/include/blatSrc/gfPcrLib.h
new file mode 100644
index 0000000..e35137c
--- /dev/null
+++ b/gbtools/src/include/blatSrc/gfPcrLib.h
@@ -0,0 +1,100 @@
+/* gfPcrLib - Routines to help do in silico PCR.
+ * Copyright 2004 Jim Kent.  All rights reserved. */
+
+#ifndef GFPCRLIB_H
+#define GFPCRLIB_H
+
+struct gfPcrInput
+/* Info for input to one PCR experiment. */
+    {
+    struct gfPcrInput *next;  /* Next in singly linked list. */
+    char *name;	/* Name of experiment */
+    char *fPrimer;	/* Forward primer - 15-30 bases */
+    char *rPrimer;	/* Reverse primer - after fPrimer and on opposite strand */
+    };
+
+void gfPcrInputStaticLoad(char **row, struct gfPcrInput *ret);
+/* Load a row from gfPcrInput table into ret.  The contents of ret will
+ * be replaced at the next call to this function. */
+
+struct gfPcrInput *gfPcrInputLoad(char **row);
+/* Load a gfPcrInput from row fetched with select * from gfPcrInput
+ * from database.  Dispose of this with gfPcrInputFree(). */
+
+struct gfPcrInput *gfPcrInputLoadAll(char *fileName);
+/* Load all gfPcrInput from a whitespace-separated file.
+ * Dispose of this with gfPcrInputFreeList(). */
+
+void gfPcrInputFree(struct gfPcrInput **pEl);
+/* Free a single dynamically allocated gfPcrInput such as created
+ * with gfPcrInputLoad(). */
+
+void gfPcrInputFreeList(struct gfPcrInput **pList);
+/* Free a list of dynamically allocated gfPcrInput's */
+
+struct gfPcrOutput
+/* Output of PCR experiment. */
+    {
+    struct gfPcrOutput *next;	/* Next in list */
+    char *name;			/* Name of experiment. */
+    char *fPrimer;	/* Forward primer - 15-30 bases */
+    char *rPrimer;	/* Reverse primer - after fPrimer and on opposite strand */
+    char *seqName;	/* Name of sequence (chromosome maybe) that gets amplified. */
+    int seqSize;	/* Size of sequence (chromosome maybe) */
+    int fPos;		/* Position of forward primer in seq. */
+    int rPos;		/* Position of reverse primer in seq. */
+    char strand;	/* Strand of amplified sequence. */
+    char *dna;		/* Fragment of sequence that gets amplified.
+                         * Note in some senses you'll want to replace
+			 * start and ends of this with fPrimer/rPrimer to
+			 * be strictly accurate.  */
+    };
+
+void gfPcrOutputFree(struct gfPcrOutput **pOut);
+/* Free up a gfPcrOutput structure. */
+
+void gfPcrOutputFreeList(struct gfPcrOutput **pList);
+/* Free up a list of gfPcrOutputs. */
+
+
+
+
+void gfPcrLocal(char *pcrName, 
+	struct dnaSeq *seq, int seqOffset, char *seqName, int seqSize,
+	int maxSize, char *fPrimer, int fPrimerSize, char *rPrimer, int rPrimerSize,
+	int minPerfect, int minGood, char strand, struct gfPcrOutput **pOutList);
+/* Do detailed PCR scan on DNA already loaded into memory and put results
+ * (in reverse order) on *pOutList. */
+
+struct gfRange *gfPcrGetRanges(char *host, char *port, char *fPrimer, char *rPrimer,
+	int maxSize);
+/* Query gfServer with primers and convert response to a list of gfRanges. */
+
+struct gfPcrOutput *gfPcrViaNet(char *host, char *port, char *seqDir, 
+	struct gfPcrInput *inList,
+	int maxSize, int minPerfect, int minGood);
+/* Do PCRs using gfServer index, returning list of results. */
+
+void gfPcrOutputWriteOne(struct gfPcrOutput *out, char *outType, 
+	char *url, FILE *f);
+/* Write a single output in specified format (either "fa" or "bed") 
+ * to file.  If url is non-null it should be a printf formatted
+ * string that takes %s, %d, %d for chromosome, start, end. */
+
+void gfPcrOutputWriteList(struct gfPcrOutput *outList, char *outType, 
+	char *url, FILE *f);
+/* Write list of outputs in specified format (either "fa" or "bed") 
+ * to file.  If url is non-null it should be a printf formatted
+ * string that takes %s, %d, %d for chromosome, start, end. */
+
+void gfPcrOutputWriteAll(struct gfPcrOutput *outList, 
+	char *outType, char *url, char *fileName);
+/* Create file of outputs in specified format (either "fa" or "bed") 
+ * to file.  If url is non-null it should be a printf formatted
+ * string that takes %s, %d, %d for chromosome, start, end. */
+
+char *gfPcrMakePrimer(char *s);
+/* Make primer (lowercased DNA) out of text.  Complain if
+ * it is too short or too long. */
+
+#endif /* GFPCRLIB_H */
diff --git a/gbtools/src/include/blatSrc/gfWebLib.h b/gbtools/src/include/blatSrc/gfWebLib.h
new file mode 100644
index 0000000..0ba8990
--- /dev/null
+++ b/gbtools/src/include/blatSrc/gfWebLib.h
@@ -0,0 +1,28 @@
+/* gfWebLib - stuff shared by gfWebBlat and gfWebPcr - little web programs
+ * that query gfServer in different ways. */
+
+struct gfServerAt
+/* A gfServer with an in-memory index. */
+    {
+    struct gfServerAt *next;
+    char *host;		/* IP Address of machine running server. */
+    char *port;		/* IP Port on host. */
+    char *seqDir;	/* Where associated sequence lives. */
+    char *name;		/* Name user sees. */
+    };
+
+struct gfServerAt *gfWebFindServer(struct gfServerAt *serverList, char *varName);
+/* Find active server (that matches contents of CGI variable varName). */
+
+struct gfWebConfig
+/* A parsed out configuration file. */
+    {
+    char *company;	/* Company name if any. */
+    char *background;	/* Web page background if any. */
+    struct gfServerAt *serverList;  /* List of servers. */
+    struct gfServerAt *transServerList;  /* List of translated servers. */
+    char *tempDir;	/* Where to put temporary files. */
+    };
+
+struct gfWebConfig *gfWebConfigRead(char *fileName);
+/* Read configuration file into globals. */
diff --git a/gbtools/src/include/blatSrc/gff.h b/gbtools/src/include/blatSrc/gff.h
new file mode 100644
index 0000000..15f7c3d
--- /dev/null
+++ b/gbtools/src/include/blatSrc/gff.h
@@ -0,0 +1,142 @@
+/*****************************************************************************
+ * Copyright (C) 2000 Jim Kent.  This source code may be freely used         *
+ * for personal, academic, and non-profit purposes.  Commercial use          *
+ * permitted only by explicit agreement with Jim Kent (jim_kent at pacbell.net) *
+ *****************************************************************************/
+/* gff.h Parse a GFF or GTF file. */
+
+#ifndef GFF_H
+#define GFF_H
+
+struct gffLine
+/* A parsed line in a GFF file. */
+    {
+    struct gffLine *next;  /* Next line in file */
+    char *seq;      /* Name of sequence. */
+    char *source;   /* Program that made this line.  Not allocated here. */
+    char *feature;  /* Type field. (Intron, CDS, etc). Not allocated here. */
+    int start;      /* Start of feature in sequence. Starts with 0, not 1 */
+    int end;        /* End of feature in sequence. End is not included. */
+    double score;   /* Score. */
+    char strand;    /* Strand of sequence feature is on. + or - or .*/
+    char frame;     /* Frame feature is in. 1, 2, 3, or . */
+    char *group;    /* Group line is in. Not allocated here.  Corresponds to transcript_id in GTF */
+    char *geneId;    /* gene_id in GTF, NULL in GFF.  Not allocated here. */
+    char *exonId;       /* exon_id in GTF, NULL in GFF. Not allocated here. */
+    int exonNumber; /* O in GFF or if missing in GTF.  Otherwise exon number. */
+    char *intronId;       /* intron_id in GTF, NULL in GFF. Not allocated here. */
+    char *intronStatus;   /* intron status. Not allocated here. */
+    char *proteinId;      /* protein_id in GTF, NULL in GFF. Not allocated here. */
+    char *geneName;       /* gene_name or NULL in GTF, NULL in GFF. Not allocated here. */
+    char *transcriptName; /* transcript_name or NULL in GTF, NULL in GFF. Not allocated here. */
+    };
+
+struct gffGroup
+/* A group of lines in a GFF file (all that share the same group field). */
+    {
+    struct gffGroup *next;   /* Next group in file. */
+    char *name;     /* Name of group. Not allocated here. */
+    char *seq;      /* Name of sequence. Not allocated here. */
+    char *source;      /* Name of source program. Not allocated here. */
+    /* The next three fields are only valid after call to gffGroupLines() */
+    int start;      /* Start of feature in sequence. Starts with 0, not 1 */
+    int end;        /* End of feature in sequence. End is not included. */
+    char strand;    /* Strand of sequence. */
+    struct gffLine *lineList;  /* List of lines in group. */
+    };
+
+struct gffSource
+/* A list of sources. */
+    {
+    struct gffSource *next; /* Next in list. */
+    char *name;	  /* Name, not allocated here. */
+    unsigned int id;   /* Database ID (or just 0) */
+    };
+
+struct gffFeature
+/* A list of types in GFF file. */
+    {
+    struct gffFeature *next; /* Next in list. */
+    char *name;	  /* Name, not allocated here. */
+    int count;	  /* Number of times feature is seen */
+    };
+
+struct gffSeqName
+/* A list of sequence. */
+    {
+    struct gffSeqName *next;  /* Next in list. */
+    char *name;   /* Name, not allocated here. */
+    };
+
+struct gffGeneId
+/* A list of genes. */
+    {
+    struct gffGeneId *next;  /* Next in list. */
+    char *name;   /* Name, not allocated here. */
+    };
+
+struct gffFile
+/* This keeps information on a fully parsed GFF file. */
+    {
+    struct gffFile *next;
+    char *fileName;             /* Name of file (allocated here) */
+    struct hash *seqHash;	/* A name only hash of the sequence. */
+    struct hash *sourceHash;	/* A name only hash of gff sources. */
+    struct hash *featureHash;   /* A name only hash of gff types. */
+    struct hash *groupHash;	/* Associates group names and gffGroups. */
+    struct hash *geneIdHash;    /* Hash of all geneIds. */
+    struct hash *strPool;       /* hash used to allocate strings */
+    struct gffLine *lineList;   /* List of lines - lines may be in groupList instead. */
+    struct gffSeqName *seqList; /* List of sequences in file. */
+    struct gffSource *sourceList; /* List of all sources in file. */
+    struct gffFeature *featureList; /* List of all types in file. */
+    struct gffGroup *groupList; /* A list of groups. */
+    struct gffGeneId *geneIdList;  /* List of all gene ID's. */
+    bool isGtf;			/* Is this a GTF file? */
+    bool typeKnown;		/* Is 'isGtf' known? */
+    };
+
+void gffGroupFree(struct gffGroup **pGroup);
+/* Free up a gffGroup including lineList. */
+
+void gffGroupFreeList(struct gffGroup **pList);
+/* Free up a list of gffGroups. */
+
+void gffGroupLines(struct gffFile *gff);
+/* Group lines of gff file together, in process mofing
+ * gff->lineList to gffGroup->lineList. */
+
+struct gffFile *gffRead(char *fileName);
+/* Create a gffFile structure from a GFF file. */
+
+struct gffFile *gffFileNew(char *fileName);
+/* Create a new gffFile structure. */
+
+void gffFileAdd(struct gffFile *gff, char *fileName, int baseOffset);
+/* Add file to gffFile. */
+
+void gffFileAddRow(struct gffFile *gff, int baseOffset, char *words[], int wordCount, 
+		char *fileName, int lineIx);
+/* Process one row of GFF file (a non-comment line parsed by tabs normally). */
+
+void gffFileFree(struct gffFile **pGff);
+/* Free up a gff file. */
+
+int gffLineCmp(const void *va, const void *vb);
+/* Compare two gffLines (for use in slSort, etc.) . */
+
+void gffOutput(struct gffLine *el, FILE *f, char sep, char lastSep);
+/* Print out GTF.  Separate fields with sep. Follow last field with lastSep. */
+
+boolean gffHasGtfGroup(char *line);
+/* Return TRUE if line has a GTF group field */
+
+#define gffTabOut(el,f) gffOutput(el,f,'\t','\n');
+/* Print out GTF as a line in a tab-separated file. */
+
+#define gffCommaOut(el,f) gffOutput(el,f,',',',');
+/* Print out GTF as a comma separated list including final comma. */
+
+
+#endif /* GFF_H */
+
diff --git a/gbtools/src/include/blatSrc/gff3.h b/gbtools/src/include/blatSrc/gff3.h
new file mode 100644
index 0000000..a047f14
--- /dev/null
+++ b/gbtools/src/include/blatSrc/gff3.h
@@ -0,0 +1,268 @@
+/*
+ * Object for accessing GFF3 files
+ * See GFF3 specification for details of file format:
+ *   http://www.sequenceontology.org/gff3.shtml
+ */
+#ifndef gff3_h
+#define gff3_h
+
+struct gff3Ann
+/* Annotation record from a GFF3 file.  Attributes define in the spec (those
+ * starting with upper case letters) are parsed into fields of this
+ * object. User defined attributes (starting with lower-case characters) are
+ * stored as in a list, along with a copy of the string versions of the spec
+ * attributes. All strings stored in the object have been un-escaped.
+ * All storage for the object is allocated by the gff3File object.
+ * For discontinuous features, there are multiple gff3Ann objects.
+ * These objects are stored in a double-linked list, and all references
+ * point to the first one in ascending start order.*/
+{
+    struct gff3Ann *prevPart; /* Discontinuous features have linked annotation */
+    struct gff3Ann *nextPart; /* field name next not used to avoid confusion */
+    char *seqid;   /* The ID of the landmark used to establish the coordinate
+                    * system for the current feature. IDs may contain any
+                    * characters. */
+    char *source;  /* The source is a free text qualifier intended to describe
+                    * the algorithm or operating procedure that generated this
+                    * feature.  Typically this is the name of a piece of
+                    * software, such as "Genescan" or a database name, such as
+                    * "Genbank."  In effect, the source is used to extend the
+                    * feature ontology by adding a qualifier to the type
+                    * creating a new composite type that is a subclass of the
+                    * type in the type column. */
+
+    char *type; /* The type of the feature (previously called the "method").
+                 * This is constrained to be either: (a) a term from the
+                 * "lite" sequence ontology, SOFA; or (b) a SOFA accession
+                 * number.  The latter alternative is distinguished using the
+                 * syntax SO:000000. */
+
+    int start; /* The start and end of the feature, in 0-based, half open
+                * integer coordinates, relative to the landmark given in
+                * seqid.  Start is always less than or equal to end.  For
+                * zero-length features, such as insertion sites, start equals
+                * end and the implied site is to the right of the indicated
+                * base in the direction of the landmark.*/
+    int end;
+    float score; /* The score of the feature, a floating point number.  As in
+                    earlier versions of the format, the semantics of the score
+                    are ill-defined.  It is strongly recommended that E-values
+                    be used for sequence similarity features, and that
+                    P-values be used for ab initio gene prediction features. */
+    boolean haveScore;  /* was score specified? */
+
+    char *strand; /* The strand of the feature.  '+' for positive strand
+                   * (relative to the landmark), '-' for minus strand, and
+                   * NULL for features that are not stranded.  In addition,
+                   * '?' can be used for features whose strandedness is
+                   * relevant, but unknown. */
+
+    int phase; /* For features of type "CDS", the phase indicates where the
+                * feature begins with reference to the reading frame.  The
+                * phase is one of the integers 0, 1, or 2, indicating the
+                * number of bases that should be removed from the beginning of
+                * this feature to reach the first base of the next codon. In
+                * other words, a phase of 0 indicates that the next codon
+                * begins at the first base of the region described by the
+                * current line, a phase of 1 indicates that the next codon
+                * begins at the second base of this region, and a phase of 2
+                * indicates that the codon begins at the third base of this
+                * region. This is NOT to be confused with the frame, which is
+                * simply start modulo 3.  For forward strand features, phase
+                * is counted from the start field. For reverse strand
+                * features, phase is counted from the end field. The phase is
+                * REQUIRED for all CDS features. and -1 for other features. */
+
+    /* The remaining fields are the attributes.  Attributes defined by the
+     * GFF3 spec (starting with an upper-case letter) are stored in the fields
+     * below.  Application-specific attributes (starting with a lower-case
+     * letter) are stored in the attrs list.  */
+
+    char *id;  /* Indicates the name of the feature.  IDs must be unique
+                * within the scope of the GFF file.*/
+    char *name;  /* Display name for the feature.  This is the name to be
+                  * displayed to the user.  Unlike IDs, there is no requirement
+                  * that the Name be unique within the file. */
+
+    struct slName *aliases; /* A secondary names for the feature.  It is
+                             * suggested that this tag be used whenever a
+                             * secondary identifier for the feature is needed,
+                             * such as locus names and accession numbers.
+                             * Unlike ID, there is no requirement that Alias
+                             * be unique within the file. */
+    
+    struct slName *parentIds; /* Indicates the parent of the feature.  A parent
+                               * ID can be used to group exons into transcripts,
+                               * transcripts into genes, an so forth.  A feature
+                               * may have multiple parents.  Parent can *only* be
+                               * used to indicate a partof relationship. */
+    struct gff3AnnRef *parents; /* Parent objects for parentIds */
+                                      
+
+    char *targetId; /* Indicates the target of a nucleotide-to-nucleotide or
+                       protein-to-nucleotide alignment.  NULL if not specified. */
+    int targetStart; /* target start/end, in 0-based, half open coordinates */
+    int targetEnd;
+    char *targetStrand; /* optional target strand, or NULL if none. */
+
+    char *gap; /* The alignment of the feature to the target if the two are
+                * not collinear (e.g. contain gaps).  The alignment format is
+                * taken from the CIGAR format.  See "THE GAP ATTRIBUTE"
+                * section of GFF3 specification for a description of this
+                * format.*/
+
+    char *derivesFromId; /* Used to disambiguate the relationship between one
+                          * feature and another when the relationship is a
+                          * temporal one rather than a purely structural "part
+                          * of" one.  This is needed for polycistronic
+                          * genes. */
+    struct gff3Ann *derivesFrom; /* Object for derivesFromId */
+
+    struct slName *notes;  /* free text notes. */
+
+    boolean isCircular;  /* is this item circular */
+
+    struct slName *dbxrefs; /* database cross references. */
+
+    struct slName *ontologyTerms; /* cross reference to ontology terms. */
+
+    struct gff3Attr *attrs;  /* attributes, both user-define and spec-defined,
+                                  * parsed into one or more values */
+
+    struct gff3AnnRef *children;  /* child nodes */
+
+    struct gff3SeqRegion *seqRegion;  /* start/end of sequence region, taken
+                                       * from ##sequence-region records, or
+                                       * NULL if not specified.*/
+
+    struct gff3File *file;  /* file this record is associated with */
+    int lineNum;            /* line number of record in file, or -1
+                             * if not known */
+};
+
+struct gff3AnnRef
+/* A reference to a gff3Ann object */
+{
+    struct gff3AnnRef *next;   /* next link in the chain */
+    struct gff3Ann *ann;       /* reference to object */
+};
+
+struct gff3Attr
+/* an attribute and string values */
+{
+    struct gff3Attr *next;     /* next attribute in the list */
+    char *tag;                 /* name of attribute */
+   struct slName *vals;       /* values for the attribute */
+};
+
+struct gff3SeqRegion
+/* start/end of a sequence region, taken from ##sequence-region record.*/
+{
+    struct gff3SeqRegion *next;     /* next region */
+    char *seqid;    /* sequence if of region */
+    int start;      /* bounds of region */
+    int end;
+};
+
+struct gff3File
+/* Object representing a GFF file. Manages all memory for related objects. */
+{
+    char *fileName;       /* path of file that was parsed */
+    struct hash *byId;    /* index of gff3Ann object by id.  Links to first object of link discontinuous features */
+    struct gff3AnnRef *anns;   /* all records in the file. Includes all parts of discontinuous features */
+    struct gff3AnnRef *roots;  /* all records without parents. */
+    struct hash *pool;         /* used to allocate string values that tend to
+                                * be repeated in the files.  localMem is also 
+                                * to allocated memory for all other objects. */
+    struct gff3SeqRegion *seqRegions;  /* list of gff3SeqRegion objects. */
+    struct hash *seqRegionMap;  /* map of seqId to gff3SeqRegion objects. NULL
+                                 * if none are specified */
+
+    struct slName *featureOntologies;    /* feature ontology URIs */
+    struct slName *attributeOntologies;  /* attribute ontology URIs */
+    struct slName *sourceOntologies;     /* source ontology URIs */
+    struct slName *species;              /* Species, usually NCBI Taxonomy
+                                          * URI */
+    char *genomeBuildSource;             /* source of genome build */
+    char *genomeBuildName;               /* name or version of genome build */
+    struct dnaSeq *seqs;                 /* list of sequences */
+    struct hash *seqMap;                 /* map of sequence ids to sequence
+                                          * string from ##FASTA section or
+                                          * NULL if none specified */
+    struct lineFile *lf;                 /* only set while parsing */
+    FILE *errFh;            /* write errors to this file */
+    int maxErr;             /* maximum number of errors before aborting */
+    int errCnt;             /* error count */
+};
+
+
+/* standard attribute tags */
+extern char *gff3AttrID;
+extern char *gff3AttrName;
+extern char *gff3AttrAlias;
+extern char *gff3AttrParent;
+extern char *gff3AttrTarget;
+extern char *gff3AttrGap;
+extern char *gff3AttrDerivesFrom;
+extern char *gff3AttrNote;
+extern char *gff3AttrDbxref;
+extern char *gff3AttrOntologyTerm;
+
+/* commonly used features names */
+extern char *gff3FeatGene;
+extern char *gff3FeatMRna;
+extern char *gff3FeatExon;
+extern char *gff3FeatCDS;
+extern char *gff3FeatThreePrimeUTR;
+extern char *gff3FeatFivePrimeUTR;
+extern char *gff3FeatStartCodon;
+extern char *gff3FeatStopCodon;
+extern char *gff3FeatTranscript;
+
+struct gff3File *gff3FileOpen(char *fileName, int maxErr, FILE *errFh);
+/* Parse a GFF3 file into a gff3File object.  If maxErr not zero, then
+ * continue to parse until this number of error have been reached.  A maxErr
+ * less than zero does not stop reports all errors. Write errors to errFh,
+ * if NULL, use stderr. */
+
+void gff3FileFree(struct gff3File **g3fPtr);
+/* Free a gff3File object */
+
+struct gff3Ann *gff3FileFindAnn(struct gff3File *g3f, char *id);
+/* find an annotation record by id, or NULL if not found. */
+
+struct gff3Attr *gff3AnnFindAttr(struct gff3Ann *g3a, char *tag);
+/* find a user attribute, or NULL */
+
+void gff3FileWrite(struct gff3File *g3f, char *fileName);
+/* write contents of an GFF3File object to a file */
+
+INLINE struct gff3AnnRef *gff3AnnRefNew(struct gff3Ann *g3a)
+/* Allocate a gff3AnnRef object from the heap.  Not used by the parsing code, as 
+ * all data is contained in localMem objects */
+{
+struct gff3AnnRef *ref;
+AllocVar(ref);
+ref->ann = g3a;
+return ref;
+}
+
+int gff3AnnRefLocCmp(const void *va, const void *vb);
+/* sort compare function for location of two gff3AnnRef objects */
+
+INLINE int gff3PhaseToFrame(int phase)
+/* convert a phase to a frame */
+{
+switch (phase)
+    {
+    case 0:
+        return 0;
+    case 1:
+        return 2;
+    case 2:
+        return 1;
+    }
+return -1;
+}
+
+#endif
diff --git a/gbtools/src/include/blatSrc/gfxPoly.h b/gbtools/src/include/blatSrc/gfxPoly.h
new file mode 100644
index 0000000..7e363c7
--- /dev/null
+++ b/gbtools/src/include/blatSrc/gfxPoly.h
@@ -0,0 +1,31 @@
+/* gfxPoly - two dimensional polygon. */
+
+#ifndef GFXPOLY_H
+#define GFXPOLY_H
+
+struct gfxPoint
+/* A two-dimensional point, typically in pixel coordinates. */
+    {
+    struct gfxPoint *next;
+    int x, y;		/* Position */
+    };
+
+struct gfxPoly
+/* A two-dimensional polygon */
+    {
+    struct gfxPoly *next;
+    int ptCount;		/* Number of points. */
+    struct gfxPoint *ptList;	/* First point in list, which is circular. */
+    struct gfxPoint *lastPoint;	/* Last point in list. */
+    };
+
+struct gfxPoly *gfxPolyNew();
+/* Create new (empty) polygon */
+
+void gfxPolyFree(struct gfxPoly **pPoly);
+/* Free up resources associated with polygon */
+
+void gfxPolyAddPoint(struct gfxPoly *poly, int x, int y);
+/* Add point to polygon. */
+
+#endif /* GFXPOLY_H */
diff --git a/gbtools/src/include/blatSrc/gifLabel.h b/gbtools/src/include/blatSrc/gifLabel.h
new file mode 100644
index 0000000..462f8f2
--- /dev/null
+++ b/gbtools/src/include/blatSrc/gifLabel.h
@@ -0,0 +1,10 @@
+/* gifLabel - create labels as GIF files. */
+
+int gifLabelMaxWidth(char **labels, int labelCount);
+/* Return maximum pixel width of labels.  It's ok to have
+ * NULLs in labels array. */
+
+void gifLabelVerticalText(char *fileName, char **labels, int labelCount, 
+	int height);
+/* Make a gif file with given labels.  This will check to see if fileName
+ * exists already, and if so do nothing. */
diff --git a/gbtools/src/include/blatSrc/hacTree.h b/gbtools/src/include/blatSrc/hacTree.h
new file mode 100644
index 0000000..1bf994b
--- /dev/null
+++ b/gbtools/src/include/blatSrc/hacTree.h
@@ -0,0 +1,108 @@
+/* hacTree - Hierarchical Agglomerative Clustering a list of inputs into a binary tree */
+/*
+ * This clustering algorithm can be used for problems with high
+ * dimensionality, such as clustering sequences by similarity.  It can
+ * be used for problems with low dimensionality too, such as
+ * clustering a sequence of numbers (1-dimensional: points along the
+ * number line), but there are more efficient algorithms for problems
+ * with low dimensionality.
+ *
+ * In order to use this, you need to provide functions that operate on a
+ * pair of input items (and extra data pointer):
+ * 1. a distance function that takes two input items and returns a number,
+ *    small for short distances/high similarity and large for long
+ *    distances/low similarity
+ * 2. a merging function that takes two input items and returns a new item
+ *    that represents both of them.  Therefore the data structure that
+ *    represents an input item must also be capable of representing a
+ *    cluster of input items.  Usually this is done by combining values
+ *    from input items into a new value that will compare properly with
+ *    other items or clusters in the distance function.
+ *
+ * Then pass in an slList of items, pointers to those two functions, and
+ * a pointer to data used in your distance and merging functions (or NULL).
+ * You get back a pointer to the root node of a binary tree structure
+ * where each leaf node contains one of your items and each node above
+ * that contains a cluster.  The root node contains the cluster of all items.
+ *
+ * If a significant proportion of input items are identical to each other,
+ * you can also pass in a comparison function that will be used to sort the
+ * items before clustering.  After sorting, adjacent identical items will
+ * be pre-clustered in order to reduce the number of inputs to the main
+ * clustering step.
+ *
+ * kent/src/lib/tests/hacTreeTest.c contains a couple simple examples.
+ *
+ * To get the top k clusters, perform a breadth-first,
+ * lowest-distance-child-first search of the tree to find the top k
+ * nodes/clusters with the smallest distances from the root node/cluster.
+ * [It would be nice for this module to provide that function, if/when a need for it arises.]
+ */
+#ifndef HACTREE_H
+#define HACTREE_H
+
+#include "localmem.h"
+
+/* Caller-provided function to measure distance between two items or clusters */
+/* Note: this must be able to handle identical inputs or NULL inputs */
+/* Note: this should be monotonic and nonnegative, *not* a + or -
+ * difference (as would be used for comparing/ordering/sorting) */
+typedef double hacDistanceFunction(const struct slList *item1, const struct slList *item2,
+				   void *extraData);
+
+/* Caller-provided function to merge two items or clusters into a new cluster */
+/* Note: this must be able to handle NULL inputs */
+typedef struct slList *(hacMergeFunction)(const struct slList *item1, const struct slList *item2,
+					  void *extraData);
+
+/* Optional caller-provided function to compare two items or clusters for pre-sorting
+ * and pre-clustering of identical items. */
+typedef int hacCmpFunction(const struct slList *item1, const struct slList *item2,
+			   void *extraData);
+
+/* Structure of nodes of the binary tree that contains a hierarchical clustering of inputs */
+struct hacTree
+    {
+    struct hacTree *next;       // Can have an unordered list of these
+    struct hacTree *parent;     // Cluster that contains this cluster, NULL for root node
+    struct hacTree *left;       // Left child, NULL for leaf node
+    struct hacTree *right;      // Right child, NULL for leaf node
+    double childDistance;       // Result of distance function on left and right kids
+    struct slList *itemOrCluster;  // If leaf node, one of the items passed in;
+                                // otherwise, result of merging left and right kids' itemOrClusters
+    };
+
+struct hacTree *hacTreeFromItems(const struct slList *itemList, struct lm *localMem,
+				 hacDistanceFunction *distF, hacMergeFunction *mergeF,
+				 hacCmpFunction *cmpF, void *extraData);
+/* Using distF, mergeF, optionally cmpF and binary tree operations,
+ * perform a hierarchical agglomerative (bottom-up) clustering of
+ * items.  To free the resulting tree, lmCleanup(&localMem). */
+
+struct hacTree *hacTreeMultiThread(int threadCount, struct slList *itemList, struct lm *localMem,
+				 hacDistanceFunction *distF, hacMergeFunction *mergeF,
+				 void *extraData, struct hash *precalcDistanceHash);
+/* Construct hacTree minimizing number of merges called, and doing distance calls
+ * in parallel when possible.   Do a lmCleanup(localMem) to free returned tree. 
+ * The inputs are
+ *	threadCount - number of threads - at least one, recommended no more than 15
+ *	itemList - list of items to tree up.  Format can vary, but must start with a
+ *	           pointer to next item in list.
+ *	localMem - memory pool where hacTree and a few other things are allocated from
+ *	distF - function that calculates distance between two items, passed items and extraData
+ *	mergeF - function that creates a new item in same format as itemList from two passed
+ *	         in items and the extraData.  Typically does average of two input items
+ *	extraData - parameter passed through to distF and mergeF, otherwise unused, may be NULL
+ *	precalcDistanceHash - a hash containing at least some of the pairwise distances
+ *	            between items on itemList, set with hacTreeDistanceHashAdd. 
+ *	            As a side effect this hash will be expanded to include all distances 
+ *	            including those between intermediate nodes.  May be NULL. */
+
+void hacTreeDistanceHashAdd(struct hash *hash, void *itemA, void *itemB, double distance);
+/* Add an item to distance hash */
+
+double * hacTreeDistanceHashLookup(struct hash *hash, void *itemA, void *itemB);
+/* Look up pair in distance hash.  Returns NULL if not found, otherwise pointer to
+ * distance */
+
+#endif//def HACTREE_H
diff --git a/gbtools/src/include/blatSrc/hash.h b/gbtools/src/include/blatSrc/hash.h
new file mode 100644
index 0000000..6cd50b3
--- /dev/null
+++ b/gbtools/src/include/blatSrc/hash.h
@@ -0,0 +1,285 @@
+/* Hash - a simple hash table that provides name/value pairs. 
+ * The most common usage is to create a hash as so:
+ *    struct hash *hash = hashNew(0);
+ * to add elements to a hash as so:
+ *    hashAdd(hash, name, value);
+ * and to retrieve a named element as so:
+ *    value = hashFindVal(hash, name);
+ * The hashFindVal function will return NULL if the name does not
+ * appear in the hash.  Alternatively you can use:
+ *    value = hashMustFindVal(hash, name);
+ * which will abort if name is not in the hash.  When done with a hash do:
+ *     hashFree(&hash);
+ *
+ * The hash does support multiple values for the same key.  To use
+ * this functionality, try the loop:
+ *     struct hashEl *hel;
+ *     for (hel = hashLookup(hash, name); hel != NULL; hel = hashLookupNext(hel))
+ *         {
+ *         value = hel->val;
+ *         // Further processing here.
+ * The order of elements retrieved this way will be most-recently-added first.
+ * The hashLookup function is _slightly_ faster than the hashFindVal function,
+ * so sometimes it is used just to test for the presence of an element in the
+ * hash when not interested in the value associated with it.
+ *
+ * One can iterate through all the elements in a hash in three ways.  One can
+ * get a list of all things in the hash as so:
+ *     struct hashEl *hel, *helList = hashElListHash(hash);
+ *     for (hel = helList; hel != NULL; hel = hel->next)
+ *        {
+ *        value = hel->val;
+ *        // Further processing of value here. 
+ *        }
+ *     hashElFreeList(&helList);
+ * One can avoid the overhead of creating a list by using an iterator object
+ * and function:
+ *    struct hashEl *hel;
+ *    struct hashCookie cookie = hashFirst(hash);
+ *    while ((hel = hashNext(&cookie)) != NULL)
+ *        {
+ *        value = hel->val;
+ * Finally one can use hashTraverseEls or hashTraverseVals with a callback 
+ * function that takes a hashEl, or the void *value as parameter respectively.
+ *
+ * There are various other functions involving hashes in this module as well
+ * that provide various short cuts.  For information on these and additional
+ * details of the functions described, please read the full hash.h file, and
+ * if so inclined the hash.c file as well.
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#ifndef HASH_H
+#define HASH_H
+
+struct hashEl
+/* An element in a hash list. */
+    {
+    struct hashEl *next;
+    char *name;
+    void *val;
+    bits32 hashVal;
+    };
+
+struct hash
+    {
+    struct hash *next;	/* Next in list. */
+    bits32 mask;	/* Mask hashCrc with this to get it to fit table. */
+    struct hashEl **table;	/* Hash buckets. */
+    int powerOfTwoSize;		/* Size of table as a power of two. */
+    int size;			/* Size of table. */
+    struct lm *lm;	/* Local memory pool. */
+    int elCount;		/* Count of elements. */
+    boolean autoExpand;         /* Automatically expand hash */
+    float expansionFactor;      /* Expand when elCount > size*expansionFactor */
+    int numResizes;             /* number of times resize was called */
+    };
+
+#define defaultExpansionFactor 1.0
+
+#define hashMaxSize 28 
+
+struct hashCookie
+/* used by hashFirst/hashNext in tracking location in traversing hash */
+    {
+    struct hash *hash;      /* hash we are associated with */
+    int idx;                /* current index in hash */
+    struct hashEl *nextEl;  /* current element in hash */
+    };
+
+bits32 hashString(char *string);
+/* Compute a hash value of a string. */
+
+bits32 hashCrc(char *string);
+/* Returns a CRC value on string. */
+
+struct hashEl *hashLookup(struct hash *hash, char *name);
+/* Looks for name in hash table. Returns associated element,
+ * if found, or NULL if not.  If there are multiple entries
+ * for name, the last one added is returned (LIFO behavior).
+ */
+
+struct hashEl *hashLookupUpperCase(struct hash *hash, char *name);
+/* Lookup upper cased name in hash. (Assumes all elements of hash
+ * are themselves already in upper case.) */
+
+struct hashEl *hashLookupNext(struct hashEl *hashEl);
+/* Find the next occurance of name that may occur in the table multiple times,
+ * or NULL if not found.  Use hashLookup to find the first occurrence.  Elements
+ * are returned in LIFO order.
+ */
+
+struct hashEl *hashAdd(struct hash *hash, char *name, void *val);
+/* Add new element to hash table.  If an item with name, already exists, a new
+ * item is added in a LIFO manner.  The last item added for a given name is
+ * the one returned by the hashLookup functions.  hashLookupNext must be used
+ * to find the preceding entries for a name.
+ */
+
+struct hashEl *hashAddN(struct hash *hash, char *name, int nameSize, void *val);
+/* Add name of given size to hash (no need to be zero terminated) */
+
+void *hashRemove(struct hash *hash, char *name);
+/* Remove item of the given name from hash table. 
+ * Returns value of removed item, or NULL if not in the table.
+ * If their are multiple entries for name, the last one added
+ * is removed (LIFO behavior).
+ */
+
+struct hashEl *hashAddUnique(struct hash *hash, char *name, void *val);
+/* Add new element to hash table. Squawk and die if is already in table. */
+
+struct hashEl *hashAddSaveName(struct hash *hash, char *name, void *val, char **saveName);
+/* Add new element to hash table.  Save the name of the element, which is now
+ * allocated in the hash table, to *saveName.  A typical usage would be:
+ *    AllocVar(el);
+ *    hashAddSaveName(hash, name, el, &el->name);
+ */
+
+struct hashEl *hashStore(struct hash *hash, char *name);
+/* If element in hash already return it, otherwise add it
+ * and return it. */
+
+char  *hashStoreName(struct hash *hash, char *name);
+/* Put name into hash table. */
+
+char *hashMustFindName(struct hash *hash, char *name);
+/* Return name as stored in hash table (in hel->name). 
+ * Abort if not found. */
+
+void *hashMustFindVal(struct hash *hash, char *name);
+/* Lookup name in hash and return val.  Abort if not found. */
+
+void *hashFindVal(struct hash *hash, char *name);
+/* Look up name in hash and return val or NULL if not found. */
+
+void *hashOptionalVal(struct hash *hash, char *name, void *usual);
+/* Look up name in hash and return val, or usual if not found. */
+
+void *hashFindValUpperCase(struct hash *hash, char *name);
+/* Lookup upper cased name in hash and return val or return NULL if not found.
+ * (Assumes all elements of hash are themselves already in upper case.) */
+
+struct hashEl *hashAddInt(struct hash *hash, char *name, int val);
+/* Store integer value in hash */
+
+void hashIncInt(struct hash *hash, char *name);
+/* Increment integer value in hash */
+
+int hashIntVal(struct hash *hash, char *name);
+/* Return integer value associated with name in a simple 
+ * hash of ints. */
+
+int hashIntValDefault(struct hash *hash, char *name, int defaultInt);
+/* Return integer value associated with name in a simple 
+ * hash of ints or defaultInt if not found. */
+
+long long hashIntSum(struct hash *hash);
+/* Return sum of all the ints in a hash of ints. */
+
+void hashTraverseEls(struct hash *hash, void (*func)(struct hashEl *hel));
+/* Apply func to every element of hash with hashEl as parameter. */
+
+void hashTraverseVals(struct hash *hash, void (*func)(void *val));
+/* Apply func to every element of hash with hashEl->val as parameter. */
+
+struct hashEl *hashElListHash(struct hash *hash);
+/* Return a list of all elements of hash.   Free return with hashElFreeList. */
+
+int hashElCmp(const void *va, const void *vb);
+/* Compare two hashEl by name. */
+
+int hashElCmpWithEmbeddedNumbers(const void *va, const void *vb);
+/* Compare two hashEl by name sorting including numbers within name,
+ * suitable for chromosomes, genes, etc. */
+
+void *hashElFindVal(struct hashEl *list, char *name);
+/* Look up name in hashEl list and return val or NULL if not found. */
+
+void hashElFree(struct hashEl **pEl);
+/* Free hash el list returned from hashListAll.  */
+
+void hashElFreeList(struct hashEl **pList);
+/* Free hash el list returned from hashListAll.  (Don't use
+ * this internally. */
+
+struct hashCookie hashFirst(struct hash *hash);
+/* Return an object to use by hashNext() to traverse the hash table.
+ * The first call to hashNext will return the first entry in the table. */
+
+struct hashEl* hashNext(struct hashCookie *cookie);
+/* Return the next entry in the hash table, or NULL if no more. Do not modify
+ * hash table while this is being used. (see note in code if you want to fix
+ * this) */
+
+void *hashNextVal(struct hashCookie *cookie);
+/* Return the next value in the hash table, or NULL if no more. Do not modify
+ * hash table while this is being used. */
+
+char *hashNextName(struct hashCookie *cookie);
+/* Return the next name in the hash table, or NULL if no more. Do not modify
+ * hash table while this is being used. */
+
+struct hash *newHashExt(int powerOfTwoSize, boolean useLocalMem);
+/* Returns new hash table. Uses local memory optionally. */
+#define hashNewExt(a) newHashExt(a)	/* Synonym */
+
+#define newHash(a) newHashExt(a, TRUE)
+/* Returns new hash table using local memory. */
+#define hashNew(a) newHash(a)	/* Synonym */
+
+void hashResize(struct hash *hash, int powerOfTwoSize);
+/* Resize the hash to a new size */
+
+struct hash *hashFromSlNameList(void *list);
+/* Create a hash out of a list of slNames. */
+
+struct hash *hashSetFromSlNameList(void *list);
+/* Create a hashSet (hash without values) out of a list of slNames. */
+
+void freeHash(struct hash **pHash);
+/* Free up hash table. */
+#define hashFree(a) freeHash(a)	/* Synonym */
+
+void freeHashAndVals(struct hash **pHash);
+/* Free up hash table and all values associated with it.
+ * (Just calls freeMem on each hel->val) */
+
+void hashFreeWithVals(struct hash **pHash, void (freeFunc)());
+/* Free up hash table and all values associated with it. freeFunc is a
+ * function to free an entry, should take a pointer to a pointer to an
+ * entry. */
+
+void hashFreeList(struct hash **pList);
+/* Free up a list of hashes. */
+
+void hashHisto(struct hash *hash, char *fname);
+/* Output bucket usage counts to a file for producing a histogram  */
+
+void hashPrintStats(struct hash *hash, char *label, FILE *fh);
+/* print statistic about a hash table */
+
+struct hashEl *hashReplace(struct hash *hash, char *name, void *val);
+/* Replace an existing element in hash table, or add it if not present. */
+
+boolean hashMayRemove(struct hash *hash, char *name);
+/* Remove item of the given name from hash table, if present.
+ * Return true if it was present */
+
+void hashMustRemove(struct hash *hash, char *name);
+/* Remove item of the given name from hash table, or error
+ * if not present */
+
+char *hashToRaString(struct hash *hash);
+/* Convert hash to string in ra format. */
+
+int hashNumEntries(struct hash *hash);
+/* count the number of entries in a hash */
+
+struct hash *hashFromString(char *string);
+/* parse a whitespace-separated string with tuples in the format name=val or
+ * name="val" to a hash name->val */
+
+#endif /* HASH_H */
+
diff --git a/gbtools/src/include/blatSrc/hex.h b/gbtools/src/include/blatSrc/hex.h
new file mode 100644
index 0000000..8948b37
--- /dev/null
+++ b/gbtools/src/include/blatSrc/hex.h
@@ -0,0 +1,27 @@
+
+#ifndef HEX_H
+#define HEX_H
+
+char nibbleToHex(char n);
+/* convert nibble to hexidecimal character. 0 <= n <= 15. */
+
+void byteToHex(unsigned char n, char *hex);
+/* convert byte to two hexidecimal characters. 0 <= n <= 255. */
+
+char *byteToHexString(unsigned char n);
+/* convert byte to hexidecimal string. 0 <= n <= 255. */
+
+void hexBinaryString(unsigned char *in, int inSize, char *out, int outSize);
+/* Convert possibly long binary string to hex string.
+ * Out size needs to be at least 2x inSize+1 */
+
+/* Reverse Functions */
+
+char hexToNibble(char n);
+/* convert hexidecimal character to nibble. 0-9a-f. */
+
+unsigned char hexToByte(char *hex);
+/* convert byte to hexidecimal characters. 0 <= n <= 255. */
+
+#endif /* HEX_H */
+
diff --git a/gbtools/src/include/blatSrc/hgGene.h b/gbtools/src/include/blatSrc/hgGene.h
new file mode 100644
index 0000000..ba9752b
--- /dev/null
+++ b/gbtools/src/include/blatSrc/hgGene.h
@@ -0,0 +1,129 @@
+/*****************************************************************************
+ * Copyright (C) 2000 Jim Kent.  This source code may be freely used         *
+ * for personal, academic, and non-profit purposes.  Commercial use          *
+ * permitted only by explicit agreement with Jim Kent (jim_kent at pacbell.net) *
+ *****************************************************************************/
+/* hgGene.h was originally generated by the autoSql program, which also 
+ * generated hgGene.c and hgGene.sql.  This header links the database and the RAM 
+ * representation of objects. */
+
+struct geneFinder
+/* A gene finding program. */
+    {
+    struct geneFinder *next;  /* Next in singly linked list. */
+    unsigned id;	/* Unique ID */
+    char *name;	/* Name of gene finder */
+    };
+
+void geneFinderStaticLoad(char **row, struct geneFinder *ret);
+/* Load a row from geneFinder table into ret.  The contents of ret will
+ * be replaced at the next call to this function. */
+
+struct geneFinder *geneFinderLoad(char **row);
+/* Load a geneFinder from row fetched with select * from geneFinder
+ * from database.  Dispose of this with geneFinderFree(). */
+
+struct geneFinder *geneFinderCommaIn(char **pS);
+/* Create a geneFinder out of a comma separated string. */
+
+void geneFinderFree(struct geneFinder **pEl);
+/* Free a single dynamically allocated geneFinder such as created
+ * with geneFinderLoad(). */
+
+void geneFinderFreeList(struct geneFinder **pList);
+/* Free a list of dynamically allocated geneFinder's */
+
+void geneFinderOutput(struct geneFinder *el, FILE *f, char sep, char lastSep);
+/* Print out geneFinder.  Separate fields with sep. Follow last field with lastSep. */
+
+#define geneFinderTabOut(el,f) geneFinderOutput(el,f,'\t','\n');
+/* Print out geneFinder as a line in a tab-separated file. */
+
+#define geneFinderCommaOut(el,f) geneFinderOutput(el,f,',',',');
+/* Print out geneFinder as a comma separated list including final comma. */
+
+struct hgGene
+/* A gene prediction */
+    {
+    struct hgGene *next;  /* Next in singly linked list. */
+    unsigned id;	/* Unique ID */
+    char *name;	/* Name of gene */
+    unsigned geneFinder;	/* Program that made prediction */
+    unsigned startBac;	/* Bac this starts in */
+    unsigned startPos;	/* Position within bac where starts */
+    unsigned endBac;	/* Bac this ends in */
+    unsigned endPos;	/* Position withing bac where ends */
+    signed char orientation;	/* Orientation relative to start bac */
+    unsigned transcriptCount;	/* Number of transcripts */
+    unsigned *transcripts;	/* Array of transcripts */
+    };
+
+struct hgGene *hgGeneLoad(char **row);
+/* Load a hgGene from row fetched with select * from hgGene
+ * from database.  Dispose of this with hgGeneFree(). */
+
+struct hgGene *hgGeneCommaIn(char **pS);
+/* Create a hgGene out of a comma separated string. */
+
+void hgGeneFree(struct hgGene **pEl);
+/* Free a single dynamically allocated hgGene such as created
+ * with hgGeneLoad(). */
+
+void hgGeneFreeList(struct hgGene **pList);
+/* Free a list of dynamically allocated hgGene's */
+
+void hgGeneOutput(struct hgGene *el, FILE *f, char sep, char lastSep);
+/* Print out hgGene.  Separate fields with sep. Follow last field with lastSep. */
+
+#define hgGeneTabOut(el,f) hgGeneOutput(el,f,'\t','\n');
+/* Print out hgGene as a line in a tab-separated file. */
+
+#define hgGeneCommaOut(el,f) hgGeneOutput(el,f,',',',');
+/* Print out hgGene as a comma separated list including final comma. */
+
+struct hgTranscript
+/* A transcript prediction */
+    {
+    struct hgTranscript *next;  /* Next in singly linked list. */
+    unsigned id;	/* Unique ID */
+    char *name;	/* Name of transcript */
+    unsigned hgGene;	/* Gene this is in */
+    unsigned startBac;	/* Bac this starts in */
+    unsigned startPos;	/* Position within bac where starts */
+    unsigned endBac;	/* Bac this ends in */
+    unsigned endPos;	/* Position withing bac where ends */
+    unsigned cdsStartBac;	/* Start of coding region. */
+    unsigned cdsStartPos;	/* Start of coding region. */
+    unsigned cdsEndBac;	/* End of coding region. */
+    unsigned cdsEndPos;	/* End of coding region. */
+    signed char orientation;	/* Orientation relative to start bac */
+    unsigned exonCount;	/* Number of exons */
+    unsigned *exonStartBacs;	/* Exon start positions */
+    unsigned *exonStartPos;	/* Exon start positions */
+    unsigned *exonEndBacs;	/* Exon start positions */
+    unsigned *exonEndPos;	/* Exon start positions */
+    };
+
+struct hgTranscript *hgTranscriptLoad(char **row);
+/* Load a hgTranscript from row fetched with select * from hgTranscript
+ * from database.  Dispose of this with hgTranscriptFree(). */
+
+struct hgTranscript *hgTranscriptCommaIn(char **pS);
+/* Create a hgTranscript out of a comma separated string. */
+
+void hgTranscriptFree(struct hgTranscript **pEl);
+/* Free a single dynamically allocated hgTranscript such as created
+ * with hgTranscriptLoad(). */
+
+void hgTranscriptFreeList(struct hgTranscript **pList);
+/* Free a list of dynamically allocated hgTranscript's */
+
+void hgTranscriptOutput(struct hgTranscript *el, FILE *f, char sep, char lastSep);
+/* Print out hgTranscript.  Separate fields with sep. Follow last field with lastSep. */
+
+#define hgTranscriptTabOut(el,f) hgTranscriptOutput(el,f,'\t','\n');
+/* Print out hgTranscript as a line in a tab-separated file. */
+
+#define hgTranscriptCommaOut(el,f) hgTranscriptOutput(el,f,',',',');
+/* Print out hgTranscript as a comma separated list including final comma. */
+
diff --git a/gbtools/src/include/blatSrc/hgap.h b/gbtools/src/include/blatSrc/hgap.h
new file mode 100644
index 0000000..4af14b7
--- /dev/null
+++ b/gbtools/src/include/blatSrc/hgap.h
@@ -0,0 +1,233 @@
+/*****************************************************************************
+ * Copyright (C) 2000 Jim Kent.  This source code may be freely used         *
+ * for personal, academic, and non-profit purposes.  Commercial use          *
+ * permitted only by explicit agreement with Jim Kent (jim_kent at pacbell.net) *
+ *****************************************************************************/
+/* HGAP - Human Genome Annotation Project database. */
+#ifndef HGAP_H
+#define HGAP_H
+
+#ifndef DNASEQ_H
+#include "dnaseq.h"
+#endif 
+
+#ifndef UNFIN_H
+#include "unfin.h"
+#endif
+
+#ifndef JKSQL_H
+#include "jksql.h"
+#endif
+
+typedef unsigned int HGID;	/* A database ID. */
+
+void hgSetDb(char *dbName);
+/* Set the database name. */
+
+char *hgGetDb();
+/* Return the current database name. */
+
+struct sqlConnection *hgAllocConn();
+/* Get free connection if possible. If not allocate a new one. */
+
+struct sqlConnection *hgFreeConn(struct sqlConnection **pConn);
+/* Put back connection for reuse. */
+
+
+HGID hgIdQuery(struct sqlConnection *conn, char *query);
+/* Return first field of first table as HGID. 0 return ok. */
+
+HGID hgRealIdQuery(struct sqlConnection *conn, char *query);
+/* Return first field of first table as HGID- abort if 0. */
+
+
+struct sqlConnection *hgStartUpdate();
+/* Get a connection for an update.  (Starts allocating id's) */
+
+void hgEndUpdate(struct sqlConnection **pConn, char *comment, ...);
+/* Finish up connection with a printf format comment. */
+
+HGID hgNextId();
+/* Get next unique id.  (Should only be called after hgStartUpdate). */
+
+FILE *hgCreateTabFile(char *tableName);
+/* Open a tab file with name corresponding to tableName.  This
+ * may just be fclosed when done. (Currently just makes
+ * tableName.tab in the current directory.) */
+
+void hgLoadTabFile(struct sqlConnection *conn, char *tableName);
+/* Load tab delimited file corresponding to tableName. 
+ * Should only be used after hgCreatTabFile, and only after
+ * file closed. */
+
+
+enum 
+/* Various constants used. */
+    {
+    hgContigPad = 800,	  /* Number of N's between contigs. */
+    };
+
+struct hgBac
+/* This represents a sequenced clone (BAC/PAC/cosmid) */
+    {
+    struct hgBac *next;	      /* Next in list. */
+    struct hgNest *nest;      /* Coordinate space. */
+    HGID id;		      /* HGAP ID. */
+    char name[16];            /* GenBank accession. */
+    int contigCount;          /* Number of contigs. */
+    struct hgContig *contigs; /* Contig list. */
+    };
+
+struct hgContig
+/* This represents a contig within a BAC. */
+    {
+    struct hgContig *next;    /* Next in list. */
+    struct hgNest *nest;      /* Coordinate space. */
+    HGID id;		      /* HGAP ID. */
+    char name[20];            /* Name like AC000007.24 */
+    struct hgBac *bac;        /* Bac this is in. */
+    int ix;                   /* Contig index. */
+    int submitOffset;         /* Position in genBank submission. */
+    int size;                 /* Size in bases. */
+    };
+
+struct hgNest
+/* This structure describes the contig tree
+ * chromosomes->chromosome contigs->bacs->
+ * bac contigs.  */
+    {
+    struct hgNest *next;	/* Pointer to next sibling. */
+    struct hgNest *children;	/* Children. */
+    struct hgNest *parent;      /* Parent if any. */
+    HGID id;		        /* HGAP ID. */
+    int orientation;            /* +1 or -1 relative to parent. */
+    int offset;			/* Offset relative to parent. */
+    int size;                   /* Size in bases. */
+    struct hgContig *contig;    /* Associated contig if any. */
+    };
+
+struct hgBac *hgGetBac(char *acc);
+/* Load BAC with given accession into memory. Don't free this, it's
+ * managed by system. */
+
+struct hgContig *hgGetContig(char *acc, int contigIx);
+/* Get contig.  contigIx is position in submission, not position in
+ * ordering. */
+
+struct dnaSeq *hgContigSeq(struct hgContig *contig);
+/* Return DNA associated with contig. */
+
+struct dnaSeq *hgRnaSeq(char *acc);
+/* Return sequence for RNA. */
+
+void hgRnaSeqAndId(char *acc, struct dnaSeq **retSeq, HGID *retId);
+/* Return sequence for RNA and it's database ID. */
+
+struct dnaSeq *hgBacOrderedSeq(struct hgBac *bac);
+/* Return DNA associated with BAC including NNN's between
+ * contigs in ordered coordinates. */
+
+struct dnaSeq *hgBacSubmittedSeq(char *acc);
+/* Returns DNA associated with BAC in submitted ordering
+ * and coordinates. */
+
+struct dnaSeq *hgBacContigSeq(char *acc);
+/* Returns list of sequences, one for each contig in BAC. */
+
+int hgOffset(struct hgNest *source, int offset, struct hgNest *dest);
+/* Translate offset from source to destination coordinate space.
+ * Destination has to be an ancestor (or the same) as source. */
+
+/* The following is a series of nested structures for
+ * describing a range of DNA. The later structures include
+ * the first fields of the earlier ones.  Routines that
+ * work on the earlier structures will also work on
+ * the later.  This is a crude but effective form of single 
+ * inheritance. */
+
+struct hgRange
+/* Just start/end locations somewhere... */
+    {
+    struct hgRange *next; /* Next in list. */
+    int tStart, tEnd;	  /* Position in target or only sequence tStart <= x < tEnd */
+    };
+
+int hgCmpTStart(const void *va, const void *vb);
+/* Compare function to sort by tStart, then by tEnd. */
+
+struct hgHit
+/* A simple hit - an interesting range of a sequence. */
+    {
+    struct hgHit *next;   /* Next in list. */
+    int tStart, tEnd;	  /* Position in target or only sequence tStart <= x < tEnd */
+    int tOrientation;	  /* +1 or -1 orientation. */
+    char *target;	  /* Name of target seq. (Not allocated here.) */
+    };
+
+int hgCmpTarget(const void *va, const void *vb);
+/* Compare function to sort by target, orientaation, tStart, then tEnd. */
+
+struct hgScoredHit
+/* A hit with a log odds score. */
+    {
+    struct hgScoredHit *next;
+    int tStart, tEnd;	  /* Position in target or only sequence tStart <= x < tEnd */
+    int tOrientation;	  /* +1 or -1 orientation. */
+    char *target;	  /* Name of target seq. (Not allocated here.) */
+    int logOdds;          /* Log odds style score - scaled x 1000. */
+    };
+
+int hgCmpScore(const void *va, const void *vb);
+/* Compare function to sort logOdds score. */
+
+struct hgAliHit
+/* A hit representing an alignment between two sequences without inserts. */
+    {
+    struct hgAliHit *next;
+    int tStart, tEnd;	  /* Position in target or only sequence tStart <= x < tEnd */
+    int tOrientation;	  /* +1 or -1 orientation. */
+    char *target;	  /* Name of target seq. (Not allocated here.) */
+    int logOdds;          /* Log odds style score - scaled x 1000. */
+    int qStart, qEnd;     /* Position in query sequence. */
+    int qOrientation;	  /* +1 or -1 query orientation. */
+    char *query;	  /* Name of query seq. (Not allocated here.) */
+    };
+
+int hgCmpQStart(const void *va, const void *vb);
+/* Compare function to sort by qStart, then by qEnd. */
+
+int hgCmpQuery(const void *va, const void *vb);
+/* Compare function to sort by query, orientation, qStart, then qEnd. */
+
+struct hgBoundedHit
+/* An alignment hit that can have soft or hard edges. */
+    {
+    struct hgBoundedHit *next;
+    int tStart, tEnd;	  /* Position in target or only sequence tStart <= x < tEnd */
+    int tOrientation;	  /* +1 or -1 orientation. */
+    char *target;	  /* Name of target seq. (Not allocated here.) */
+    int logOdds;          /* Log odds style score - scaled x 1000. */
+    int qStart, qEnd;     /* Position in query sequence. */
+    int qOrientation;	  /* +1 or -1 query orientation. */
+    char *query;	  /* Name of query seq. (Not allocated here.) */
+    bool hardStart;       /* Start position known */
+    bool hardEnd;         /* End position known */
+    };
+
+struct hgAlignment
+/* An alignment with gaps. */
+    {
+    struct hgAlignment *next;
+    int tStart, tEnd;	  /* Position in target or only sequence tStart <= x < tEnd */
+    int tOrientation;	  /* +1 or -1 orientation. */
+    char *target;	  /* Name of target seq. (Not allocated here.) */
+    int logOdds;          /* Log odds style score - scaled x 1000. */
+    int qStart, qEnd;     /* Position in query sequence. */
+    int qOrientation;     /* +1 or -1 orientation. */
+    bool hardStart;       /* Start position known */
+    bool hardEnd;         /* End position known */
+    struct hgBoundedHit *hitList;  /*  Subalignments. */
+    };
+
+#endif /* HGAP_H */
+
diff --git a/gbtools/src/include/blatSrc/hgdb.h b/gbtools/src/include/blatSrc/hgdb.h
new file mode 100644
index 0000000..8df0d28
--- /dev/null
+++ b/gbtools/src/include/blatSrc/hgdb.h
@@ -0,0 +1,46 @@
+/*****************************************************************************
+ * Copyright (C) 2000 Jim Kent.  This source code may be freely used         *
+ * for personal, academic, and non-profit purposes.  Commercial use          *
+ * permitted only by explicit agreement with Jim Kent (jim_kent at pacbell.net) *
+ *****************************************************************************/
+/* hgdb - Stuff to access human genome database. */
+#ifndef HGDB_H
+#define HGDB_H
+
+char *hgdbRootDir();
+/* Return root directory of human genome database. */
+
+struct dnaSeq *hgdbRnaSeq(char *accession);
+/* Return mRNA or EST sequence from an accession number. */
+
+struct fof *hgdbRnaFof();
+/* Return index for RNA sequences. */
+
+struct dnaSeq *hgdbShortSeq(char *accession);
+/* Return mRNA, EST, BACend or STS sequence based on
+ * accession number. */
+
+struct fof *hgdbShortFof();
+/* Return index for short sequences. */
+
+struct dnaSeq *hgdbFinishedSeq(char *accession);
+/* Return finished BAC sequence. */
+
+struct dnaSeq *hgdbUnfinishedSeq(char *accession);
+/* Return unfinished BAC sequence. May be in 
+ * several contigs (dnaSeq returned may be a list.) */
+
+struct dnaSeq *hgdbGetSeq(char *accession);
+/* Return sequence from any source. */
+
+char *hgdbKeyText(char *accession);
+/* Get key-value lines about accession number. */
+
+struct fof *hgdbKeyFof();
+/* Return index for key-values indexed by accession. */
+
+boolean hgdbSmallKey(char *accession, char *key, char *valBuf, int valBufSize);
+/* Get value of small key.  Returns FALSE if key doesn't exist. */
+
+#endif /* HGDB_H */
+
diff --git a/gbtools/src/include/blatSrc/histogram.h b/gbtools/src/include/blatSrc/histogram.h
new file mode 100644
index 0000000..2aff1bc
--- /dev/null
+++ b/gbtools/src/include/blatSrc/histogram.h
@@ -0,0 +1,26 @@
+/* histogram function for data array in memory	*/
+
+#if !defined(HISTOGRAM_H)
+#define HISTOGRAM_H
+
+#define	DEFAULT_BIN_COUNT	26
+/*	ARBITRARY default choice of # of bins	*/
+
+struct histoResult {
+    struct histoResult *next;	/*	might be a list of them	*/
+    float binSize;		/*	size of a bin	*/
+    unsigned binCount;		/*	number of bins	*/
+    unsigned count;		/*	number of values	*/
+    float binZero;		/*	bin 0 starts at this value	*/
+    unsigned *binCounts;	/*	array binCounts[binCount]	*/
+    float *pValues;		/*	array pValues[binCount]		*/
+};
+
+void freeHistoGram(struct histoResult **histoResults);
+/*      free the histoResults list	*/
+
+struct histoResult *histoGram(float *values, size_t N, float binSize,
+	unsigned binCount, float minValue, float min, float max,
+	struct histoResult *accumHisto);
+/*	construct histogram of data in values[N] array.	*/
+#endif
diff --git a/gbtools/src/include/blatSrc/hmac.h b/gbtools/src/include/blatSrc/hmac.h
new file mode 100644
index 0000000..7360234
--- /dev/null
+++ b/gbtools/src/include/blatSrc/hmac.h
@@ -0,0 +1,12 @@
+/* Calculate an openssl keyed-hash message authentication code (HMAC) */
+
+#ifndef HMAC_H
+#define HMAC_H
+
+char *hmacSha1(char *key, char *data);
+/* Calculate a openssl SHA1 keyed-hash message authentication code (HMAC) */
+
+char *hmacMd5(char *key, char *data);
+/* Calculate a openssl MD5 keyed-hash message authentication code (HMAC) */
+
+#endif /* HMAC_H */
diff --git a/gbtools/src/include/blatSrc/hmmPfamParse.h b/gbtools/src/include/blatSrc/hmmPfamParse.h
new file mode 100644
index 0000000..f9c6c9d
--- /dev/null
+++ b/gbtools/src/include/blatSrc/hmmPfamParse.h
@@ -0,0 +1,55 @@
+/* hmmpfamParse - Parse hmmpfam files.. */
+
+#ifndef HMMPFAMPARSE_H
+#define HMMPFAMPARSE_H
+
+struct hpfDomain
+/* Describes amino acids covered by one use of model. */
+    {
+    struct hpfDomain *next;
+    int qStart, qEnd;	/* Where this is in query sequence. */
+    int hmmStart, hmmEnd; /* Where this is in profile HMM. */
+    double score;	/* Some sort of bit score. */
+    double eVal;	/* Expectation value. */
+    };
+
+struct hpfModel 
+/* Results for a single model for a single query */
+    {
+    struct hpfModel *next;
+    char *name;	/* Model name */
+    char *description; /* Longer description */
+    double score;	/* Some sort of bit score. */
+    double eVal;	/* Expectation value. */
+    struct hpfDomain *domainList;	/* All places model occurs in query */
+    };
+
+void hpfModelFree(struct hpfModel **pMod);
+/* Free memory associated with hpfModel */
+
+void hpfModelFreeList (struct hpfModel **pList);
+/* Free memory associated with list of hpfModels.  */
+
+struct hpfResult
+/* Result for a single query sequence. */
+    {
+    struct hpfResult *next;
+    char *name;	/* Query sequence name. */
+    struct hpfModel *modelList;  /* All models that hit query */
+    };
+
+void hpfResultFree(struct hpfResult **pHr);
+/* Free memory associated with hpfResult */
+
+void hpfResultFreeList(struct hpfResult **pList);
+/* Free memory associated with list of hpfResults. */
+
+
+struct hpfModel *hpfFindResultInModel(struct hpfResult *hr, char *modName);
+/* Look for named result in model. */
+
+struct hpfResult *hpfNext(struct lineFile *lf);
+/* Parse out next record in hmmpfam result file. */
+
+
+#endif /* HMMPFAMPARSE_H */
diff --git a/gbtools/src/include/blatSrc/hmmstats.h b/gbtools/src/include/blatSrc/hmmstats.h
new file mode 100644
index 0000000..7db9bde
--- /dev/null
+++ b/gbtools/src/include/blatSrc/hmmstats.h
@@ -0,0 +1,30 @@
+/*****************************************************************************
+ * Copyright (C) 2000 Jim Kent.  This source code may be freely used         *
+ * for personal, academic, and non-profit purposes.  Commercial use          *
+ * permitted only by explicit agreement with Jim Kent (jim_kent at pacbell.net) *
+ *****************************************************************************/
+/* hmmstats.h - Stuff for doing statistical analysis in general and 
+ * hidden Markov models in particular. */
+#ifndef HMMSTATS_H
+#define HMMSTATS_H
+
+int scaledLog(double val);
+/* Return scaled log of val. */
+
+#define logScaleFactor 1000
+/* Amount we scale logs by. */
+
+double simpleGaussean(double x);
+/* Gaussean distribution with standard deviation 1 and mean 0. */
+
+double gaussean(double x, double mean, double sd);
+/* Gaussean distribution with mean and standard deviation at point x  */
+
+double calcVarianceFromSums(double sum, double sumSquares, bits64 n);
+/* Calculate variance. */
+
+double calcStdFromSums(double sum, double sumSquares, bits64 n);
+/* Calculate standard deviation. */
+
+#endif /* HMMSTATS_H */
+
diff --git a/gbtools/src/include/blatSrc/htmlPage.h b/gbtools/src/include/blatSrc/htmlPage.h
new file mode 100644
index 0000000..735c8ea
--- /dev/null
+++ b/gbtools/src/include/blatSrc/htmlPage.h
@@ -0,0 +1,248 @@
+/* htmlPage - stuff to read, parse, and submit  htmlPages and forms. 
+ *
+ * typical usage is:
+ *   struct htmlPage *page = htmlPageGet(url);
+ *   htmlPageValidateOrAbort(page);
+ *   var = htmlPageGetVar(page, page->forms, "org");
+ *   if (var != NULL)
+ *      printf("Organism = %s\n", var->curVal);
+ *   htmlPageSetVar(page, page->forms, "org", "Human");
+ *   newPage = htmlPageFromForm(page, page->forms, "submit", "Go");
+ */
+
+#ifndef HTMLPAGE_H
+#define HTMLPAGE_H
+
+#ifndef DYSTRING_H
+#include "dystring.h"
+#endif
+
+struct htmlStatus
+/* HTTP version and status code. */
+    {
+    struct htmlStatus *next;	/* Next in list. */
+    char *version;		/* Usually something like HTTP/1.1 */
+    int status;			/* HTTP status code.  200 is good. */
+    };
+
+struct htmlCookie
+/* A cookie - stored by browser usually.  We need to echo it
+ * back when we post forms. */
+    {
+    struct htmlCookie *next;	/* Next in list. */
+    char *name;			/* Cookie name. */
+    char *value;		/* Cookie value. */
+    char *domain;		/* The set of web domains this applies to. */
+    char *path;			/* Cookie applies below this path I guess. */
+    char *expires;		/* Expiration date. */
+    boolean secure;		/* Is it a secure cookie? */
+    };
+
+struct htmlAttribute
+/* An html attribute - part of a set of name/values pairs in a tag. */
+    {
+    struct htmlAttribute *next;
+    char *name;		/* Attribute name. */
+    char *val;		/* Attribute value. */
+    };
+
+struct htmlTag
+/* A html tag - includes attribute list and parent, but no text. */
+    {
+    struct htmlTag *next;
+    char *name;	/* Tag name. */
+    struct htmlAttribute *attributes;  /* Attribute list. */
+    char *start;  /* Start of this tag.  Not allocated here.*/
+    char *end;	  /* End of tag (one past closing '>')  Not allocated here.*/
+    };
+
+struct htmlFormVar
+/* A variable within an html form - from input, button, etc. */
+    {
+    struct htmlFormVar *next;	/* Next in list. */
+    char *name;			/* Variable name.  Not allocated here.*/
+    char *tagName;		/* Name of tag.  Not allocated here. */
+    char *type;			/* Variable type. Not allocated here. */
+    char *curVal;		/* Current value if any.  Allocated here. */
+    struct slName *values;	/* List of available values.  Null if textBox. */
+    struct slRef *tags;	        /* List of references associated tags. */
+    };
+
+struct htmlForm
+/* A form within an html page. */
+    {
+    struct htmlForm *next;	/* Next form in list. */
+    char *name;			/* Name (n/a if not defined).  Not allocated here. */
+    char *action;		/* Action attribute value.  Not allocated here. */
+    char *method;		/* Defaults to "GET". Not allocated here.  */
+    struct htmlTag *startTag;	/* Tag that holds <FORM>. Not allocated here.  */
+    struct htmlTag *endTag;	/* Tag one past </FORM> . Not allocated here. */
+    struct htmlFormVar *vars; /* List of form variables. */
+    };
+
+struct htmlPage
+/* A complete html page parsed out. */
+    {
+    struct htmlPage *next;
+    char *url;				/* Url that produced this page. */
+    struct htmlStatus *status;		/* Version and status. */
+    struct hash *header;		/* Hash of header lines (cookies, etc.) */
+    struct htmlCookie *cookies;		/* Associated cookies if any. */
+    char *fullText;			/* Full unparsed text including headers. */
+    char *htmlText;			/* Text unparsed after header.  Same mem as fullText. */
+    struct htmlTag *tags;		/* List of tags in this page. */
+    struct htmlForm *forms;		/* List of all forms. */
+    };
+
+void htmlStatusFree(struct htmlStatus **pStatus);
+/* Free up resources associated with status */
+
+void htmlStatusFreeList(struct htmlStatus **pList);
+/* Free a list of dynamically allocated htmlStatus's */
+
+struct htmlStatus *htmlStatusParse(char **pText);
+/* Read in status from first line.  Update pText to point to next line. 
+ * Note unlike many routines here, this does not insert zeros into text. */
+
+void htmlCookieFree(struct htmlCookie **pCookie);
+/* Free memory associated with cookie. */
+
+void htmlCookieFreeList(struct htmlCookie **pList);
+/* Free a list of dynamically allocated htmlCookie's */
+
+struct htmlCookie *htmlCookieFileRead(char *fileName);
+/* Read cookies from a line oriented file.  First word in line
+ * is the cookie name, the rest of the line the cookie value. */
+
+void htmlAttributeFree(struct htmlAttribute **pAttribute);
+/* Free up resources associated with attribute. */
+
+void htmlAttributeFreeList(struct htmlAttribute **pList);
+/* Free a list of dynamically allocated htmlAttribute's */
+
+char *htmlTagAttributeVal(struct htmlPage *page, struct htmlTag *tag, 
+	char *name, char *defaultVal);
+/* Return value of named attribute, or defaultVal if attribute doesn't exist. */
+
+char *htmlTagAttributeNeeded(struct htmlPage *page, struct htmlTag *tag, char *name);
+/* Return named tag attribute.  Complain and return "n/a" if it
+ * doesn't exist. */
+
+void htmlTagFree(struct htmlTag **pTag);
+/* Free up resources associated with tag. */
+
+void htmlTagFreeList(struct htmlTag **pList);
+/* Free a list of dynamically allocated htmlTag's */
+
+void htmlFormVarFree(struct htmlFormVar **pVar);
+/* Free up resources associated with form variable. */
+
+void htmlFormVarFreeList(struct htmlFormVar **pList);
+/* Free a list of dynamically allocated htmlFormVar's */
+
+void htmlFormVarPrint(struct htmlFormVar *var, FILE *f, char *prefix);
+/* Print out variable to file, prepending prefix. */
+
+void htmlFormFree(struct htmlForm **pForm);
+/* Free up resources associated with form variable. */
+
+void htmlFormFreeList(struct htmlForm **pList);
+/* Free a list of dynamically allocated htmlForm's */
+
+void htmlFormPrint(struct htmlForm *form, FILE *f);
+/* Print out form structure. */
+
+char *htmlFormCgiVars(struct htmlPage *page, struct htmlForm *form, 
+	char *buttonName, char *buttonVal, struct dyString *dyHeader);
+/* Return cgi vars in name=val format from use having pressed
+ * submit button of given name and value. */
+
+struct htmlForm *htmlFormGet(struct htmlPage *page, char *name);
+/* Get named form. */
+
+struct htmlFormVar *htmlFormVarGet(struct htmlForm *form, char *name);
+/* Get named variable. */
+
+void htmlFormVarSet(struct htmlForm *form, char *name, char *val);
+/* Set variable to given value.  */
+
+struct htmlFormVar *htmlPageGetVar(struct htmlPage *page, struct htmlForm *form, char *name);
+/* Get named variable.  If form is NULL, first form in page is used. */
+
+void htmlPageSetVar(struct htmlPage *page, struct htmlForm *form, char *name, char *val);
+/* Set variable to given value.  If form is NULL, first form in page is used. */
+
+void htmlPageFree(struct htmlPage **pPage);
+/* Free up resources associated with htmlPage. */
+
+void htmlPageFreeList(struct htmlPage **pList);
+/* Free a list of dynamically allocated htmlPage's */
+
+char *expandUrlOnBase(char *base, char *url);
+/* Figure out first character past host name. Load up
+ * return string with protocol (if any) and host name. 
+ * It is assumed that url is relative to base and does not contain a protocol.*/
+
+char *htmlExpandUrl(char *base, char *url);
+/* Expand URL that is relative to base to stand on it's own. 
+ * Return NULL if it's not http or https. */
+
+char *htmlNextCrLfLine(char **pS);
+/* Return zero-terminated line and advance *pS to start of
+ * next line.  Return NULL at end of file.  Warn if there is
+ * no <CR>. */
+
+struct slName *htmlPageScanAttribute(struct htmlPage *page, 
+	char *tagName, char *attribute);
+/* Scan page for values of particular attribute in particular tag.
+ * if tag is NULL then scans in all tags. */
+
+struct slName *htmlPageLinks(struct htmlPage *page);
+/* Scan through tags list and pull out HREF attributes. */
+
+void htmlPageFormOrAbort(struct htmlPage *page);
+/* Aborts if no FORM found */
+
+void htmlPageValidateOrAbort(struct htmlPage *page);
+/* Do some basic validations.  Aborts if there is a problem. */
+
+char *htmlSlurpWithCookies(char *url, struct htmlCookie *cookies);
+/* Send get message to url with cookies, and return full response as
+ * a dyString.  This is not parsed or validated, and includes http
+ * header lines.  Typically you'd pass this to htmlPageParse() to
+ * get an actual page. */
+
+struct htmlPage *htmlPageParse(char *url, char *fullText);
+/* Parse out page and return.  Warn and return NULL if problem. */
+
+struct htmlPage *htmlPageParseOk(char *url, char *fullText);
+/* Parse out page and return only if status ok. */
+
+struct htmlPage *htmlPageParseNoHead(char *url, char *htmlText);
+/* Parse out page in memory (past http header if any) and return. */
+
+struct htmlPage *htmlPageFromForm(struct htmlPage *origPage, struct htmlForm *form, 
+	char *buttonName, char *buttonVal);
+/* Return a new htmlPage based on response to pressing indicated button
+ * on indicated form in origPage. */
+
+struct htmlPage *htmlPageGetWithCookies(char *url, struct htmlCookie *cookies);
+/* Get page from URL giving server the given cookies.   Note only the
+ * name and value parts of the cookies need to be filled in. */
+
+struct htmlPage *htmlPageGet(char *url);
+/* Get page from URL (may be a file). */
+
+struct htmlPage *htmlPageForwarded(char *url, struct htmlCookie *cookies);
+/* Get html page.  If it's just a forwarding link then get do the
+ * forwarding.  Cookies is a possibly empty list of cookies with
+ * name and value parts filled in. */
+
+struct htmlPage *htmlPageForwardedNoAbort(char *url, struct htmlCookie *cookies);
+/* Try and get an HTML page.  Print warning and return NULL if there's a problem. */
+
+struct htmlTag *findNextMatchingTag(struct htmlTag *list, char *name);
+/* Return first tag in list that is of type name or NULL if not found. */
+
+#endif /* HTMLPAGE_H */
+
diff --git a/gbtools/src/include/blatSrc/htmshell.h b/gbtools/src/include/blatSrc/htmshell.h
new file mode 100644
index 0000000..96e4422
--- /dev/null
+++ b/gbtools/src/include/blatSrc/htmshell.h
@@ -0,0 +1,180 @@
+/* Htmshell.h - stuff to make it easier to generate HTML files on
+ * the fly.  Typically included with cheapcgi.h in almost any
+ * CGI program.
+ *
+ * To use this generally you should call the function htmShell()
+ * very early inside of main().  You pass htmShell() a routine
+ * which does most of the work of your web server-side applet.
+ *
+ * These routines will throw errors, which are caught by
+ * htmShell, which then returns.  For the most part you just
+ * want an error to cause an error message to be printed and
+ * then terminate your CGI program, so this works fine.
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+void htmlSetCookie(char* name, char* value, char* expires, char* path, char* domain, boolean isSecure);
+/* create a cookie with the given stats */
+
+void htmlParagraph(char *line, ...);
+/* Print a line in it's own paragraph. */
+
+void htmlVaParagraph(char *line, va_list args);
+/* Print a line in it's own paragraph. */
+
+void htmlCenterParagraph(char *line, ...);
+/* Center a line in it's own paragraph. */
+
+void htmlHorizontalLine();
+/* Print a horizontal line. */
+
+void htmlNbSpaces(int count);
+/* Print a number of non-breaking spaces. */
+
+void htmHorizontalLine(FILE *f);
+/* Print a horizontal line. */
+
+void htmTextOut(FILE *f, char *s);
+/* Print out string to file, if necessary replacing > with > and the like */
+
+void htmlTextOut(char *s);
+/* Print out string, if necessary replacing > with > and the like */
+
+char *htmlTextStripTags(char *s);
+/* Returns a cloned string with all html tags stripped out */
+
+char *htmlTextReplaceTagsWithChar(char *s, char ch);
+/* Returns a cloned string with all html tags replaced with given char (useful for tokenizing) */
+
+char *htmlEncodeText(char *s, boolean tagsOkay);
+/* Returns a cloned string with quotes replaced by html codes.
+   Changes ',",\n and if not tagsOkay >,<,& to code equivalents.
+   This differs from cgiEncode as it handles text that will
+   be displayed in an html page or tooltip style title.  */
+#define htmlEncode(s) htmlEncodeText(s,FALSE)
+
+char *attributeEncode(char *str);
+// encode double and single quotes in a string to be used as an element attribute
+
+void htmlMemDeath();
+/* Complain about lack of memory and abort.  */
+
+void htmlStart(char *title);
+/* Write the start of a cgi-generated html file */
+
+void htmStart(FILE *f, char *title);
+/* Write the start of a stand alone .html file. */
+
+void printBodyTag(FILE *f);
+// print starting BODY tag, including any appropriate attributes (class, background and bgcolor). 
+
+void htmStartWithHead(FILE *f, char *head, char *title);
+/* Write the start of a stand alone .html file, plus head info */
+
+void htmStartDirDepth(FILE *f, char *title, int dirDepth);
+/* Write the start of a stand alone .html file.  dirDepth is the number of levels
+ * beneath apache root that caller's HTML will appear to the web client.
+ * E.g. if writing HTML from cgi-bin, dirDepth is 1; if trash/body/, 2. */
+
+void htmlEnd();
+/* Write the end of a cgi-generated html file */
+
+void htmEnd(FILE *f);
+/* Write the end of a stand-alone html file */
+
+extern char *htmlStyleUndecoratedLink;
+/* Style that gets rid of underline of links. */
+
+void htmlSetStyle(char *style);
+/* Set document wide style. A favorite style to
+ * use for many purposes is htmlStyleUndecoratedLink
+ * which will remove underlines from links.
+ * Needs to be called before htmlStart or htmShell. */
+
+void htmlSetStyleSheet(char *styleSheet);
+/* Set document wide style sheet by adding css name to HEAD part.
+ * Needs to be called before htmlStart or htmShell. */
+
+void htmlSetFormClass(char *formClass);
+/* Set class in the BODY part. */
+
+
+void htmlSetStyleTheme(char *style);
+/* Set theme style, these styles can overwrite document wide styles.
+ * Needs to be called before htmlStart or htmShell. */
+
+void htmlSetBackground(char *imageFile);
+/* Set background image - needs to be called before htmlStart
+ * or htmShell. */
+
+void htmlSetBgColor(int color);
+/* Set background color - needs to be called before htmlStart
+ * or htmShell. */
+
+void htmlBadVar(char *varName);
+/* Complain about input variables. */
+
+void htmlImage(char *fileName, int width, int height);
+/* Display centered image file. */
+
+jmp_buf htmlRecover;  /* Error recovery jump. Exposed for cart's use. */
+
+void htmlVaWarn(char *format, va_list args);
+/* Write an error message.  (Generally you just call warn() or errAbort().
+ * This is exposed mostly for the benefit of the cart.) */
+
+char *htmlWarnStartPattern();
+/* Return starting pattern for warning message. */
+
+char *htmlWarnEndPattern();
+/* Return ending pattern for warning message. */
+
+void htmlWarnBoxSetup(FILE *f);
+/* Creates an invisible, empty warning box than can be filled with errors
+ * and then made visible. */
+
+void htmlAbort();
+/* Terminate HTML file.  Exposed for cart's use. */
+
+void htmlPushEarlyHandlers();
+/* Push stuff to close out web page to make sensible error
+ * message during initialization. */
+
+/* Wrap error recovery around call to doMiddle. */
+void htmErrOnlyShell(void (*doMiddle)());
+
+/* Wrap error recovery and and input processing around call to doMiddle. */
+void htmEmptyShell(void (*doMiddle)(), char *method);
+
+/* Wrap an html file around the passed in function.
+ * The passed in function is already in the body. It
+ * should just make paragraphs and return.
+ * Method should be "query" or "get" or "post" (or NULL
+ * if you don't care)..
+ */
+void htmShell( char *title, void (*doMiddle)(), char *method);
+
+/* Wrap an html file around the passed in function.
+ * The passed in function is already in the body. It
+ * should just make paragraphs and return.
+ * Method should be "query" or "get" or "post".
+param title - The HTML page title
+param head - The head text: can be a refresh directive or javascript
+param method - The function pointer to execute in the middle
+param method - The browser request method to use
+ */
+void htmShellWithHead( char *title, char *head, void (*doMiddle)(), char *method);
+
+/* tell htmlOut to not escape special HTML chars '<', '>' */
+void htmlNoEscape();
+
+/* tell htmlOut to escape special HTML chars '<', '>' */
+void htmlDoEscape();
+
+/* Include an HTML file in a CGI.
+ *   The file path is relative to the web server document root */
+void htmlIncludeWebFile(char *file);
+
+/* Include an HTML file in a CGI */
+void htmlIncludeFile(char *path);
diff --git a/gbtools/src/include/blatSrc/https.h b/gbtools/src/include/blatSrc/https.h
new file mode 100644
index 0000000..7197d0e
--- /dev/null
+++ b/gbtools/src/include/blatSrc/https.h
@@ -0,0 +1,9 @@
+/* Connect via https. */
+
+#ifndef NET_HTTPS_H
+#define NET_HTTPS_H
+
+int netConnectHttps(char *hostName, int port);
+/* Return socket for https connection with server or -1 if error. */
+
+#endif//ndef NET_HTTPS_H
diff --git a/gbtools/src/include/blatSrc/intValTree.h b/gbtools/src/include/blatSrc/intValTree.h
new file mode 100644
index 0000000..07203bb
--- /dev/null
+++ b/gbtools/src/include/blatSrc/intValTree.h
@@ -0,0 +1,50 @@
+/* intValTree - a binary tree with integer keys and void values.  This is based on the 
+ * red/black self-balancing binary tree algorithm in the rbTree module. */
+
+#ifndef INTVALTREE_H
+#define INTVALTREE_H
+
+#ifndef RBTREE_H
+#include "rbTree.h"
+#endif
+
+struct rbTree *intValTreeNew();
+/* Create a new, empty, tree with integer keys and void values. */
+
+#define intValTreeFree(a) rbTreeFree(a)
+/* Free up intVal tree.  */
+
+struct intVal
+/* An integer coupled with a void value. */
+    {
+    int key;
+    void *val;
+    };
+
+int intValCmp(void *va, void *vb);
+/* Return -1 if a before b,  0 if a and b overlap,
+ * and 1 if a after b. */
+
+struct intVal *intValTreeAdd(struct rbTree *tree, int key, void *val);
+/* Add to binary tree.  Will abort if key is already in tree. */
+
+struct intVal *intValTreeUpdate(struct rbTree *tree, int key, void *val);
+/* Add to binary tree. If key is already in tree just updates it with val. */
+
+struct intVal *intValTreeRemove(struct rbTree *tree, int key);
+/* Removes given tree from key. */
+
+struct intVal *intValTreeLookup(struct rbTree *tree, int key);
+/* Returns intVal associated with given key, or NULL if none exists. */
+
+void *intValTreeFind(struct rbTree *tree, int key);
+/* Returns value associated with given key, or NULL if none exists. */
+
+void *intValTreeMustFind(struct rbTree *tree, int key);
+/* Return value associated with given key. Aborts if none exists. */
+
+int *intValTreeKeys(struct rbTree *tree);
+/* Returns array of keys (size is tree->n).  You freeMem this when done. */
+
+#endif /* INTVALTREE_H */
+
diff --git a/gbtools/src/include/blatSrc/internet.h b/gbtools/src/include/blatSrc/internet.h
new file mode 100644
index 0000000..1633799
--- /dev/null
+++ b/gbtools/src/include/blatSrc/internet.h
@@ -0,0 +1,43 @@
+/* internet - some stuff for routines that use the internet
+ * and aren't afraid to include some internet specific structures
+ * and the like.   See also net for stuff that is higher level. */
+
+#ifndef INTERNET_H
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <netdb.h>
+
+bits32 internetHostIp(char *hostName);
+/* Get IP v4 address (in host byte order) for hostName.
+ * Warn and return 0 if there's a problem. */
+
+boolean internetFillInAddress(char *hostName, int port, 
+	struct sockaddr_in *address);
+/* Fill in address. Warn and return FALSE if can't.  */
+
+boolean internetIpToDottedQuad(bits32 ip, char dottedQuad[17]);
+/* Convert IP4 address in host byte order to dotted quad 
+ * notation.  Warn and return FALSE if there's a 
+ * problem. */
+
+boolean internetDottedQuadToIp(char *dottedQuad, bits32 *retIp);
+/* Convert dotted quad format address to IP4 address in
+ * host byte order.  Warn and return FALSE if there's a 
+ * problem. */
+
+boolean internetIsDottedQuad(char *s);
+/* Returns TRUE if it looks like s is a dotted quad. */
+
+void internetParseDottedQuad(char *dottedQuad, unsigned char quad[4]);
+/* Parse dotted quads into quad */
+
+void internetUnpackIp(bits32 packed, unsigned char unpacked[4]);
+/* Convert from 32 bit to 4-byte format with most significant
+ * byte first. */
+
+boolean internetIpInSubnet(unsigned char unpackedIp[4], 
+	unsigned char subnet[4]);
+/* Return true if unpacked IP address is in subnet. */
+
+#endif /* INTERNET_H */
diff --git a/gbtools/src/include/blatSrc/itsa.h b/gbtools/src/include/blatSrc/itsa.h
new file mode 100644
index 0000000..b460430
--- /dev/null
+++ b/gbtools/src/include/blatSrc/itsa.h
@@ -0,0 +1,90 @@
+/* itsa - indexed traversable suffix array.  Used for doing quick genomic searches.
+ * Use itsaMake utility to create one of these files , and the routines here to access it.  
+ * See comment by itsaFileHeader for file format. See src/shortReads/itsaMake/itsa.doc as well 
+ * for an explanation of the data structures, particularly the traverse array. */
+/* This file is copyright 2008 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#ifndef ITSA_H
+#define ITSA_H
+
+struct itsaFileHeader
+/* Short read index file binary file header.  A itsa file starts with this fixed 128 byte
+ * structure.  It is followed by the following sections:
+ *    chromosome name strings - zero terminated.  Padded with zero to 4 byte boundary 
+ *    chromosome sizes (32 bits each)
+ *    chromosome DNA - one byte per base lower case.  A zero between each chrom, and a zero before
+ *                     and after (to make some end conditions easier).  Padded if need be with
+ *                     additional zeroes to 4 base boundary.
+ *    suffix array -   32 bits for each indexed base. Alphabetical offsets into DNA
+ *    traverse array - Also 32 bits per indexed base. Helper info to traverse array like a tree. 
+ *    index13 - index of all 13-base prefixes in the suffix array.  4**13 32 bit values.  
+ *              Will have zeros in positions where there is no data for this slot.
+ *              Index+1 of suffix array where there is data (to free up zero for no data). 
+ *    cursors13 - cursor position at each of the index13 positions*/
+    {
+    bits32 magic;	 /* Always ITSA_MAGIC */
+    bits16 majorVersion; /* This version changes when backward compatibility breaks. */
+    bits16 minorVersion; /* This version changes whenever a feature is added. */
+    bits64 size;	 /* Total size to memmap, including header. */
+    bits32 chromCount;	 /* Total count of chromosomes/contigs in file. */
+    bits32 chromNamesSize;	/* Size of names of all contigs (including zeroes at end),
+    				   padded to 4 byte boundary as needed). */
+    bits64 arraySize;	 /* Total number of bases actually indexed (non-N, unmasked). */
+    bits64 dnaDiskSize;	 /* Size of DNA on disk with zero separators. Padded to 4 byte boundary  */
+    bits64 reserved[11];/* All zeroes for now. */
+    };
+
+struct itsa 
+/* Suffix array in memory */
+    {
+    struct itsa *next;
+    boolean isMapped;	/* True if memory mapped. */
+    struct itsaFileHeader *header;	/* File header. */
+    char **chromNames;	/* Name of each chromosome. */
+    bits32 *chromSizes;    /* Size of each chromosome.  No deallocation required (in memmap) */
+    bits32 *chromOffsets;  /* Offset of each chromosome's DNA */
+    char *allDna;	/* All DNA from each contig/chromosome with zero separators. */
+    bits32 *array;	/* Alphabetized offsets into allDna.  The suffix array. */
+    bits32 *traverse;	/* Offsets to position in array where current prefix changes. */
+    bits32 *index13;	/* Look up the first 13 bases of the query sequence here to find the corresponding
+                         * offset into the suffix array.  0 indicates empty slot.  Subtract 1 to get
+			 * offset (to free up zero for this meaning). */
+    UBYTE *cursors13;	/* Cursor positions in suffix array at index positions. */
+    };
+
+struct itsa *itsaRead(char *fileName, boolean memoryMap);
+/* Read in a itsa from a file.  Does this via memory mapping if you like,
+ * which will be faster typically for about 100 reads, and slower for more
+ * than that (_much_ slower for thousands of reads and more). */
+
+void itsaFree(struct itsa **pSufx);
+/* Free up resources associated with index. */
+
+int itsaOffsetToChromIx(struct itsa *itsa, bits32 tOffset);
+/* Figure out index of chromosome containing tOffset */
+
+/** Stuff to define ITSA files **/
+#define ITSA_MAGIC 0x600BA3A1	/* Magic number at start of ITSA file */
+#define ITSA_MAJOR_VERSION 0	
+#define ITSA_MINOR_VERSION 0
+
+/* Number of slots in itsa index. */
+#define itsaSlotCount (1<<(13*2))
+
+/* Base values in _alphabetical_ order. Unfortunately the ones in dnautil.h are not.... */
+#define ITSA_A 0
+#define ITSA_C 1
+#define ITSA_G 2
+#define ITSA_T 3
+
+/* Table to convert letters to one of the above values. Call itsaBaseToValInit() before using. */
+extern int itsaBaseToVal[256];
+
+void itsaBaseToValInit();
+/* Initialize itsaBaseToVal array */
+
+int itsaDnaToBinary(char *dna, int size);
+/* Convert dna to binary representation. Call itsaBaseToValInit() first. */
+
+#endif /* ITSA_H */
diff --git a/gbtools/src/include/blatSrc/iupac.h b/gbtools/src/include/blatSrc/iupac.h
new file mode 100644
index 0000000..2ff3318
--- /dev/null
+++ b/gbtools/src/include/blatSrc/iupac.h
@@ -0,0 +1,42 @@
+/* iupac - routines to help cope with IUPAC ambiguity codes in DNA sequence. */
+
+#ifndef IUPAC_H
+#define IUPAC_H
+
+boolean iupacMatch(char iupac, char dna);
+/* See if iupac ambiguity code matches dna character */
+
+boolean iupacMatchLower(char iupac, char dna);
+/* See if iupac ambiguity code matches dna character where
+ * both are lower case */
+
+boolean isIupac(char c);
+/* See if iupac c is a legal iupac char */
+
+boolean isIupacLower(char c);
+/* See if iupac c is a legal (lower case) iupac char */
+
+void iupacFilter(char *in, char *out);
+/* Filter out non-DNA non-UIPAC ambiguity code characters and change to lower case. */
+
+boolean anyIupac(char *s);
+/* Return TRUE if there are any IUPAC ambiguity codes in s */
+
+char iupacComplementBaseLower(char iupac);
+/* Return IUPAC complement for a single base */
+
+void iupacComplementLower(char *iupac, int iuSize);
+/* Return IUPAC complement many bases. Assumes iupac is lower case. */
+
+void iupacReverseComplement(char *iu, int iuSize);
+/* Reverse complement a string containing DNA and IUPAC codes. Result will be always
+ * lower case. */
+
+boolean iupacMatchStart(char *iupacPrefix, char *dnaString);
+/* Return TRUE if start of DNA is compatible with iupac */
+
+char *iupacIn(char *needle, char *haystack);
+/* Return first place in haystack (DNA) that matches needle that may contain IUPAC codes. */
+
+#endif /* IUPAC_H */
+
diff --git a/gbtools/src/include/blatSrc/jointalign.h b/gbtools/src/include/blatSrc/jointalign.h
new file mode 100644
index 0000000..c9d9fe0
--- /dev/null
+++ b/gbtools/src/include/blatSrc/jointalign.h
@@ -0,0 +1,30 @@
+/*****************************************************************************
+ * Copyright (C) 2002 Ryan Weber.  This source code may be freely used       *
+ * for personal, academic, and non-profit purposes.  Commercial use          *
+ * permitted only by explicit agreement with Ryan Weber (weber at cse.ucsc.edu) *
+ *****************************************************************************/
+/* jointalign.h - routines for printing a joint alignment in html. */
+
+#ifndef JOINTALIGN_H
+#define JOINTALIGN_H
+
+void htmlPrintJointAlignment( char *seq1, char *seq2, int columnNum, 
+        int start, int end, char *strand );
+/* Print sequences 1 and 2 (assumed to be a joint alignment),
+ * formatted for html output. Coordinates are printed based on
+ * the start and end positions and oriented according to the
+ * strand the sequences are on (+ or -).*/
+
+boolean ucaseMatch( char a, char b );
+/* Case insensitive character matching */
+
+void validateSeqs( char *seq1, char *seq2 );
+/*Make sure sequences are the same length*/
+
+void htmlPrintJointAlignmentLine( char *seq1, char *seq2, int start, int end);
+/* Prints one line of the joint alignment between seq1 and seq2,
+ * from seq[start] to seq[end-1].*/
+
+
+#endif /* JOINTALIGN */
+
diff --git a/gbtools/src/include/blatSrc/jpegSize.h b/gbtools/src/include/blatSrc/jpegSize.h
new file mode 100644
index 0000000..c74f242
--- /dev/null
+++ b/gbtools/src/include/blatSrc/jpegSize.h
@@ -0,0 +1,11 @@
+/* jpegSize - read a jpeg header and figure out dimensions of image.
+ * Adapted by Galt Barber from Matthias Wandel's jhead program */
+
+#ifndef JPEGSIZE_H
+
+void jpegSize(char *fileName, int *width, int *height);
+/* Read image width and height.
+ * Parse marker stream until SOS or EOI; */
+
+#endif /* JPEGSIZE_H */
+
diff --git a/gbtools/src/include/blatSrc/jsonParse.h b/gbtools/src/include/blatSrc/jsonParse.h
new file mode 100644
index 0000000..e356ed9
--- /dev/null
+++ b/gbtools/src/include/blatSrc/jsonParse.h
@@ -0,0 +1,131 @@
+/* jsonParse - routines to parse JSON strings and traverse and pick things out of the
+ * resulting object tree. */
+
+#ifndef JSONPARSE_H
+#define JSONPARSE_H
+
+/* JSON Element code let's you build up a DOM like data structure in memory and then serialize it into
+   html for communication with client side code.
+ */
+
+// supported types
+
+typedef enum _jsonElementType
+{
+    jsonList     = 0,
+    jsonObject   = 1,
+    jsonNumber   = 2,
+    jsonDouble   = 3,
+    jsonBoolean  = 4,
+    jsonString   = 5
+} jsonElementType;
+
+union jsonElementVal
+{
+    struct slRef *jeList;
+    struct hash *jeHash;
+    long jeNumber;
+    double jeDouble;
+    boolean jeBoolean;
+    char *jeString;
+};
+
+struct jsonElement
+{
+    jsonElementType type;
+    union jsonElementVal val;
+};
+
+// constructors for each jsonElementType
+
+struct jsonElement *newJsonString(char *str);
+struct jsonElement *newJsonBoolean(boolean val);
+struct jsonElement *newJsonNumber(long val);
+struct jsonElement *newJsonDouble(double val);
+struct jsonElement *newJsonObject(struct hash *h);
+struct jsonElement *newJsonList(struct slRef *list);
+
+void jsonObjectAdd(struct jsonElement *h, char *name, struct jsonElement *ele);
+// Add a new element to a jsonObject; existing values are replaced.
+
+void jsonListAdd(struct jsonElement *list, struct jsonElement *ele);
+// Add a new element to a jsonList
+
+struct jsonElement *jsonParse(char *str);
+// parse string into an in-memory json representation
+
+char *jsonStringEscape(char *inString);
+/* backslash escape a string for use in a double quoted json string.
+ * More conservative than javaScriptLiteralEncode because
+ * some json parsers complain if you escape & or ' */
+
+void jsonFindNameRecurse(struct jsonElement *ele, char *jName, struct slName **pList);
+// Search the JSON tree recursively to find all the values associated to
+// the name, and add them to head of the list.  
+
+struct slName *jsonFindName(struct jsonElement *json, char *jName);
+// Search the JSON tree to find all the values associated to the name
+// and add them to head of the list. 
+
+struct slName *jsonFindNameUniq(struct jsonElement *json, char *jName);
+// Search the JSON tree to find all the values associated to the name
+// and add them to head of the list. 
+
+void jsonElementRecurse(struct jsonElement *ele, char *name, boolean isLast,
+    void (*startCallback)(struct jsonElement *ele, char *name, boolean isLast, void *context),  
+    // Called at element start
+    void (*endCallback)(struct jsonElement *ele, char *name, boolean isLast, void *context),    
+    // Called at element end
+    void *context);
+/* Recurse through JSON tree calling callback functions with element and context.
+ * Either startCallback or endCallback may be NULL, as can be name. */
+
+void jsonPrintOneStart(struct jsonElement *ele, char *name, boolean isLast, int indent, FILE *f);
+/* Print the start of one json element - just name and maybe an opening brace or bracket.
+ * Recursion is handled elsewhere. */
+
+void jsonPrintOneEnd(struct jsonElement *ele, char *name, boolean isLast, boolean indent, FILE *f);
+/* Print object end */
+
+void jsonPrintToFile(struct jsonElement *root, char *name, FILE *f, int indentPer);
+/* Print out JSON object and all children nicely indented to f as JSON objects. 
+ * Name may be NULL.  Implemented via jsonPrintOneStart/jsonPrintOneEnd. */
+
+/** Routines that check json type and return corresponding value. **/
+
+struct slRef *jsonListVal(struct jsonElement *ele, char *name);
+/* Enforce element is type jsonList.  Return list value */
+
+struct hash *jsonObjectVal(struct jsonElement *ele, char *name);
+/* Enforce object is type jsonObject.  Return object hash */
+
+long jsonNumberVal(struct jsonElement *ele, char *name);
+/* Enforce element is type jsonNumber and return value. */
+
+double jsonDoubleVal(struct jsonElement *ele, char *name);
+/* Enforce element is type jsonDouble and return value. */
+
+boolean jsonBooleanVal(struct jsonElement *ele, char *name);
+/* Enforce element is type jsonBoolean and return value. */
+
+char *jsonStringVal(struct jsonElement *ele, char *eleName);
+/* Enforce element is type jsonString and return value. */
+
+/** Routines that help work with json objects (bracket enclosed key/val pairs **/
+
+struct jsonElement *jsonFindNamedField(struct jsonElement *object, 
+    char *objectName, char *field);
+/* Find named field of object or return NULL if not found.  Abort if object
+ * is not actually an object. */
+
+struct jsonElement *jsonMustFindNamedField(struct jsonElement *object, 
+    char *objectName, char *field);
+/* Find named field of object or die trying. */
+
+char *jsonOptionalStringField(struct jsonElement *object, char *field, char *defaultVal);
+/* Return string valued field of object, or defaultVal if it doesn't exist. */
+
+char *jsonStringField(struct jsonElement *object, char *field);
+/* Return string valued field of object or abort if field doesn't exist. */
+
+#endif /* JSONPARSE_H */
diff --git a/gbtools/src/include/blatSrc/jsonWrite.h b/gbtools/src/include/blatSrc/jsonWrite.h
new file mode 100644
index 0000000..2a888ec
--- /dev/null
+++ b/gbtools/src/include/blatSrc/jsonWrite.h
@@ -0,0 +1,56 @@
+/* jsonWrite - Helper routines for writing out JSON. */
+
+#ifndef JSONWRITE_H
+#define JSONWRITE_H
+
+struct jsonWrite
+/* Object to help output JSON */
+     {
+     struct jsonWrite *next;
+     struct dyString *dy;	/* Most of this module is building json text in here */
+     bool objStack[128];	/* We need stack deep enough to handle nested objects and lists */
+     int stackIx;		/* Current index in stack */
+     };
+
+struct jsonWrite *jsonWriteNew();
+/* Return new empty jsonWrite struct. */
+
+void jsonWriteFree(struct jsonWrite **pJw);
+/* Free up a jsonWrite object. */
+
+void jsonWriteTag(struct jsonWrite *jw, char *var);
+/* Print out quoted tag followed by colon. Print out preceding comma if need be.  */
+
+void jsonWriteEndLine(struct jsonWrite *jw);
+/* Write comma if in middle, and then newline regardless. */
+
+void jsonWriteString(struct jsonWrite *jw, char *var, char *string);
+/* Print out "var": "val".  If var is NULL then just print out "val" */
+
+void jsonWriteDateFromUnix(struct jsonWrite *jw, char *var, long long unixTimeVal);
+/* Add "var": YYYY-MM-DDT-HH:MM:SSZ given a Unix time stamp. Var may be NULL. */
+
+void jsonWriteNumber(struct jsonWrite *jw, char *var, long long val);
+/* print out "var": val as number. Var may be NULL. */
+
+void jsonWriteLink(struct jsonWrite *jw, char *var, char *objRoot, char *name);
+/* Print out the jsony type link to another object.  objRoot will start and end with a '/'
+ * and may have additional slashes in this usage. Var may be NULL. */
+
+void jsonWriteLinkNum(struct jsonWrite *jw, char *var, char *objRoot, long long id);
+/* Print out the jsony type link to another object with a numerical id.  objRoot will start 
+ * and end with a '/' and may have additional slashes in this usage. Var may be NULL */
+
+void jsonWriteListStart(struct jsonWrite *jw, char *var);
+/* Start an array in JSON. Var may be NULL */
+
+void jsonWriteListEnd(struct jsonWrite *jw);
+/* End an array in JSON */
+
+void jsonWriteObjectStart(struct jsonWrite *dy);
+/* Print start of object */
+
+void jsonWriteObjectEnd(struct jsonWrite *jw);
+/* End object in JSON */
+
+#endif /* JSONWRITE_H */
diff --git a/gbtools/src/include/blatSrc/keys.h b/gbtools/src/include/blatSrc/keys.h
new file mode 100644
index 0000000..d12f45d
--- /dev/null
+++ b/gbtools/src/include/blatSrc/keys.h
@@ -0,0 +1,66 @@
+/*****************************************************************************
+ * Copyright (C) 2000 Jim Kent.  This source code may be freely used         *
+ * for personal, academic, and non-profit purposes.  Commercial use          *
+ * permitted only by explicit agreement with Jim Kent (jim_kent at pacbell.net) *
+ *****************************************************************************/
+/* keys.h - Stuff to manage a little key/value table and
+ * evaluate expressions on it. */
+#ifndef KEYS_H
+#define KEYS_H
+
+struct keyVal
+/* A key/value pair of strings. */
+    {
+    char *key;
+    char *val;
+    };
+
+struct kvt *newKvt(int size);
+/* Get a new key value table. */
+
+void freeKvt(struct kvt **pKvt);
+/* Free up key value table. */
+
+void kvtClear(struct kvt *kvt);
+/* Clear the keys table. */
+
+struct keyVal *kvtAdd(struct kvt *kvt, char *key, char *val);
+/* Add in new key. */
+
+struct keyVal* kvtGet(struct kvt *kvt, char *key);
+/* get the keyVal for the specified key, of NULL if not found. */
+
+char *kvtLookup(struct kvt *kvt, char *key);
+/* Search table for key.  Return key value, or NULL if
+ * key not found. */
+
+void kvtWriteAll(struct kvt *kvt, FILE *f, struct slName *hideList);
+/* Write all keys to file except the ones in hideList */
+
+void kvtParseAdd(struct kvt *kvt, char *text);
+/* Add in keys from text.  Text is in format:
+ *     key val
+ * for each line of text. Text gets many of it's
+ * space characters and newlines replaced by 0's
+ * and should persist until call to keysClear(). */
+
+struct keyExp
+/* A handle on a parsed expression which can be
+ * quickly evaluated.  */
+    {
+    void *rootExp;       /* Internally struct exp. */
+    void *tokenList;     /* Internally struct tok. */
+    };
+
+boolean keyExpEval(struct keyExp *exp, struct kvt *kvt);
+/* Recursively evaluate expression. */
+
+struct keyExp *keyExpParse(char *text);
+/* Parse text into key expression.  Squawk and die if it
+ * fails. */
+
+boolean keyTextScan(char *text, char *key, char *valBuf, int valBufSize);
+/* Get value of key in text. Return FALSE if key doesn't exist. */
+
+#endif /* KEYS_H */
+
diff --git a/gbtools/src/include/blatSrc/knetUdc.h b/gbtools/src/include/blatSrc/knetUdc.h
new file mode 100644
index 0000000..f2af578
--- /dev/null
+++ b/gbtools/src/include/blatSrc/knetUdc.h
@@ -0,0 +1,10 @@
+/* knetUdc -- install udc i/o functions in knetfile interface in Heng Li's samtools lib. */
+/* As of 2/23/10, the KNETFILE_HOOKS extension is a UCSC-local modification of samtools. */
+
+#ifndef KNETUDC_H
+#define KNETUDC_H
+
+void knetUdcInstall();
+/* install udc i/o functions in knetfile interface in Heng Li's samtools lib. */
+
+#endif//ndef KNETUDC_H
diff --git a/gbtools/src/include/blatSrc/kxTok.h b/gbtools/src/include/blatSrc/kxTok.h
new file mode 100644
index 0000000..717b5bb
--- /dev/null
+++ b/gbtools/src/include/blatSrc/kxTok.h
@@ -0,0 +1,65 @@
+/* kxTok - quick little tokenizer for stuff first
+ * loaded into memory.  Originally developed for
+ * "Key eXpression" evaluator. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#ifndef KXTOK_H
+#define KXTOK_H
+
+enum kxTokType
+    {
+    kxtEnd,
+    kxtString,
+    kxtWildString,
+    kxtEquals,
+    kxtGT,      /* Greater Than */
+    kxtGE,      /* Greater Than or Equal */
+    kxtLT,      /* Less Than */
+    kxtLE,      /* Less Than or Equal */
+    kxtAnd,
+    kxtOr,
+    kxtXor,
+    kxtNot,
+    kxtOpenParen,
+    kxtCloseParen,
+    kxtAdd,
+    kxtSub,
+    kxtDiv,
+    kxtMul,
+    kxtDot,
+    kxtMod,
+    kxtPunct,
+    };
+
+struct kxTok
+/* A key expression token.   Input text is tokenized
+ * into a list of these. */
+    {
+    struct kxTok *next;
+    enum kxTokType type;
+    bool spaceBefore;	/* True if there is a space before */
+    char string[1];  /* Allocated at run time */
+    };
+
+struct kxTok *kxTokenize(char *text, boolean wildAst);
+/* Convert text to stream of tokens. If 'wildAst' is
+ * TRUE then '*' character will be treated as wildcard
+ * rather than multiplication sign. */
+
+struct kxTok *kxTokenizeFancy(char *text, boolean wildAst,
+			      boolean wildPercent, boolean includeHyphen);
+/* Convert text to stream of tokens. If 'wildAst' is
+ * TRUE then '*' character will be treated as wildcard
+ * rather than multiplication sign.  
+ * If wildPercent is TRUE then the '%' character will be treated as a 
+ * wildcard (as in SQL) rather than a modulo (kxtMod) or percent sign.
+ * If includeHyphen is TRUE then a '-' character in the middle of a String 
+ * token will be treated as a hyphen (part of the String token) instead of 
+ * a new kxtSub token. */
+
+void kxTokIncludeQuotes(boolean val);
+/* Pass in TRUE if kxTok should include quote characters in string tokens. */
+
+#endif /* KXTOK_K */
diff --git a/gbtools/src/include/blatSrc/linefile.h b/gbtools/src/include/blatSrc/linefile.h
new file mode 100644
index 0000000..5eb5df1
--- /dev/null
+++ b/gbtools/src/include/blatSrc/linefile.h
@@ -0,0 +1,296 @@
+/* lineFile - stuff to rapidly read text files and parse them into
+ * lines.
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#ifndef LINEFILE_H
+#define LINEFILE_H
+
+#include "dystring.h"
+#include "udc.h"
+
+#ifdef USE_TABIX
+#include "tabix.h"
+#endif
+
+#define LF_BOGUS_FILE_PREFIX "somefile."
+
+enum nlType {
+ nlt_undet, /* undetermined */
+ nlt_unix,  /* lf   */
+ nlt_dos,   /* crlf */
+ nlt_mac    /* cr   */
+};
+
+struct metaOutput
+/* struct to store list of file handles to output meta data to
+ * meta data is text after # */
+    {
+    struct metaOutput *next;    /* next file handle */
+    FILE *metaFile;             /* file to write metadata to */
+    };
+
+struct lineFile
+/* Structure to handle fast, line oriented
+ * fileIo. */
+    {
+    struct lineFile *next;	/* Might need to be on a list. */
+    char *fileName;		/* Name of file. */
+    int fd;			/* File handle.  -1 for 'memory' files. */
+    int bufSize;		/* Size of buffer. */
+    off_t bufOffsetInFile;	/* Offset in file of first buffer byte. */
+    int bytesInBuf;		/* Bytes read into buffer. */
+    int reserved;		/* Reserved (zero for now). */
+    int lineIx;			/* Current line. */
+    int lineStart;		/* Offset of line in buffer. */
+    int lineEnd;		/* End of line in buffer. */
+    bool zTerm;			/* Replace '\n' with zero? */
+    enum nlType nlType;         /* type of line endings: dos, unix, mac or undet */
+    bool reuse;			/* Set if reusing input. */
+    char *buf;			/* Buffer. */
+    struct pipeline *pl;        /* pipeline if reading compressed */
+    struct metaOutput *metaOutput;   /* list of FILE handles to write metaData to */
+    bool isMetaUnique;          /* if set, do not repeat comments in output */
+    struct hash *metaLines;     /* save lines to suppress repetition */
+#ifdef USE_TABIX
+    tabix_t *tabix;		/* A tabix-compressed file and its binary index file (.tbi) */
+    ti_iter_t tabixIter;	/* An iterator to get decompressed indexed lines of text */
+#endif
+    struct udcFile *udcFile;    /* udc file if using caching */
+    struct dyString *fullLine;  // Filled with full line when a lineFileNextFull is called
+    struct dyString *rawLines;  // Filled with raw lines used to create the full line
+    boolean fullLineReuse;      // If TRUE, next call to lineFileNextFull will get
+                                // already built fullLine
+    void *dataForCallBack;                                 // ptr to data needed for callbacks
+    void(*checkSupport)(struct lineFile *lf, char *where); // check if operation supported 
+    boolean(*nextCallBack)(struct lineFile *lf, char **retStart, int *retSize); // next line callback
+    void(*closeCallBack)(struct lineFile *lf);             // close callback
+    };
+
+char *getFileNameFromHdrSig(char *m);
+/* Check if header has signature of supported compression stream,
+   and return a phoney filename for it, or NULL if no sig found. */
+
+struct lineFile *lineFileDecompressFd(char *name, bool zTerm, int fd);
+/* open a linefile with decompression from a file or socket descriptor */
+
+struct lineFile *lineFileDecompressMem(bool zTerm, char *mem, long size);
+/* open a linefile with decompression from a memory stream */
+
+struct lineFile *lineFileMayOpen(char *fileName, bool zTerm);
+/* Try and open up a lineFile. If fileName ends in .gz, .Z, or .bz2,
+ * it will be read from a decompress pipeline. */
+
+struct lineFile *lineFileUdcMayOpen(char *fileName, bool zTerm);
+/* Open a lineFile through the UDC */
+
+struct lineFile *lineFileOpen(char *fileName, bool zTerm);
+/* Open up a lineFile or die trying If fileName ends in .gz, .Z, or .bz2,
+ * it will be read from a decompress pipeline.. */
+
+struct lineFile *lineFileAttach(char *fileName, bool zTerm, int fd);
+/* Wrap a line file around an open'd file. */
+
+struct lineFile *lineFileStdin(bool zTerm);
+/* Wrap a line file around stdin. */
+
+struct lineFile *lineFileOnString(char *name, bool zTerm, char *s);
+/* Wrap a line file object around string in memory. This buffer
+ * have zeroes written into it if zTerm is non-zero.  It will
+ * be freed when the line file is closed. */
+
+struct lineFile *lineFileOnBigBed(char *bigBedFileName);
+/* Wrap a line file object around a BigBed. */
+
+void lineFileClose(struct lineFile **pLf);
+/* Close up a line file. */
+
+void lineFileCloseList(struct lineFile **pList);
+/* Close up a list of line files. */
+
+boolean lineFileNext(struct lineFile *lf, char **retStart, int *retSize);
+/* Fetch next line from file. */
+
+boolean lineFileNextFull(struct lineFile *lf, char **retFull, int *retFullSize,
+                        char **retRaw, int *retRawSize);
+// Fetch next line from file joining up any that are continued by ending '\'
+// If requested, and was joined, the unjoined raw lines are also returned
+// NOTE: comment lines can't be continued!  ("# comment \ \n more comment" is 2 lines.)
+
+boolean lineFileNextReal(struct lineFile *lf, char **retStart);
+/* Fetch next line from file that is not blank and
+ * does not start with a '#'. */
+
+boolean lineFileNextFullReal(struct lineFile *lf, char **retStart);
+// Fetch next line from file that is not blank and does not start with a '#'.
+// Continuation lines (ending in '\') are joined into a single line.
+
+void lineFileNeedNext(struct lineFile *lf, char **retStart, int *retSize);
+/* Fetch next line from file.  Squawk and die if it's not there. */
+
+void lineFileReuse(struct lineFile *lf);
+/* Reuse current line. */
+
+void lineFileReuseFull(struct lineFile *lf);
+// Reuse last full line read.  Unlike lineFileReuse,
+// lineFileReuseFull only works with previous lineFileNextFull call
+
+#define lineFileString(lf) ((lf)->buf + (lf)->lineStart)
+/* Current string in line file. */
+
+#define lineFileTell(lf) ((lf)->bufOffsetInFile + (lf)->lineStart)
+/* Current offset (of string start) in file. */
+
+void lineFileSeek(struct lineFile *lf, off_t offset, int whence);
+/* Seek to read next line from given position. */
+
+void lineFileRewind(struct lineFile *lf);
+/* Return lineFile to start. */
+
+void lineFileAbort(struct lineFile *lf, char *format, ...)
+/* Print file name, line number, and error message, and abort. */
+#if defined(__GNUC__)
+__attribute__((format(printf, 2, 3)))
+#endif
+;
+
+void lineFileVaAbort(struct lineFile *lf, char *format, va_list args);
+/* Print file name, line number, and error message, and abort. */
+
+void lineFileUnexpectedEnd(struct lineFile *lf);
+/* Complain about unexpected end of file. */
+
+void lineFileExpectWords(struct lineFile *lf, int expecting, int got);
+/* Check line has right number of words. */
+
+void lineFileExpectAtLeast(struct lineFile *lf, int expecting, int got);
+/* Check line has right number of words. */
+
+void lineFileShort(struct lineFile *lf);
+/* Complain that line is too short. */
+
+boolean lineFileNextRow(struct lineFile *lf, char *words[], int wordCount);
+/* Return next non-blank line that doesn't start with '#' chopped into words.
+ * Returns FALSE at EOF.  Aborts on error. */
+
+#define lineFileRow(lf, words) lineFileNextRow(lf, words, ArraySize(words))
+/* Read in line chopped into fixed size word array. */
+
+boolean lineFileNextCharRow(struct lineFile *lf, char sep, char *words[], int wordCount);
+/* Return next non-blank line that doesn't start with '#' chopped into words
+ * delimited by sep. Returns FALSE at EOF.  Aborts on error. */
+
+boolean lineFileNextRowTab(struct lineFile *lf, char *words[], int wordCount);
+/* Return next non-blank line that doesn't start with '#' chopped into words
+ * at tabs. Returns FALSE at EOF.  Aborts on error. */
+
+#define lineFileRowTab(lf, words) \
+	lineFileNextRowTab(lf, words, ArraySize(words))
+/* Read in line chopped by tab into fixed size word array. */
+
+int lineFileChopNext(struct lineFile *lf, char *words[], int maxWords);
+/* Return next non-blank line that doesn't start with '#' chopped into words. */
+
+#define lineFileChop(lf, words) lineFileChopNext(lf, words, ArraySize(words))
+/* Ease-of-usef macro for lineFileChopNext above. */
+
+int lineFileChopCharNext(struct lineFile *lf, char sep, char *words[], int maxWords);
+/* Return next non-blank line that doesn't start with '#' chopped into
+   words delimited by sep. */
+
+int lineFileChopNextTab(struct lineFile *lf, char *words[], int maxWords);
+/* Return next non-blank line that doesn't start with '#' chopped into words
+ * on tabs */
+
+#define lineFileChopTab(lf, words) lineFileChopNextTab(lf, words, ArraySize(words))
+/* Ease-of-usef macro for lineFileChopNext above. */
+
+int lineFileCheckAllIntsNoAbort(char *s, void *val, 
+    boolean isSigned, int byteCount, char *typeString, boolean noNeg, 
+    char *errMsg, int errMsgSize);
+/* Convert string to (signed) integer of the size specified.  
+ * Unlike atol assumes all of string is number, no trailing trash allowed.
+ * Returns 0 if conversion possible, and value is returned in 'val'
+ * Otherwise 1 for empty string or trailing chars, and 2 for numeric overflow,
+ * and 3 for (-) sign in unsigned number.
+ * Error messages if any are written into the provided buffer.
+ * Pass NULL val if you only want validation.
+ * Use noNeg if negative values are not allowed despite the type being signed,
+ * returns 4. */
+
+void lineFileAllInts(struct lineFile *lf, char *words[], int wordIx, void *val,
+  boolean isSigned,  int byteCount, char *typeString, boolean noNeg);
+/* Returns long long integer from converting the input string. Aborts on error. */
+
+int lineFileAllIntsArray(struct lineFile *lf, char *words[], int wordIx, void *array, int arraySize,
+  boolean isSigned,  int byteCount, char *typeString, boolean noNeg);
+/* Convert comma separated list of numbers to an array.  Pass in
+ * array and max size of array. Aborts on error. Returns number of elements in parsed array. */
+
+int lineFileNeedNum(struct lineFile *lf, char *words[], int wordIx);
+/* Make sure that words[wordIx] is an ascii integer, and return
+ * binary representation of it. */
+
+int lineFileNeedFullNum(struct lineFile *lf, char *words[], int wordIx);
+/* Make sure that words[wordIx] is an ascii integer, and return
+ * binary representation of it. Require all chars in word to be digits.*/
+
+double lineFileNeedDouble(struct lineFile *lf, char *words[], int wordIx);
+/* Make sure that words[wordIx] is an ascii double value, and return
+ * binary representation of it. */
+
+void lineFileSkip(struct lineFile *lf, int lineCount);
+/* Skip a number of lines. */
+
+char *lineFileSkipToLineStartingWith(struct lineFile *lf, char *start, int maxCount);
+/* Skip to next line that starts with given string.  Return NULL
+ * if no such line found, otherwise return the line. */
+
+char *lineFileReadAll(struct lineFile *lf);
+/* Read remainder of lineFile and return it as a string. */
+
+boolean lineFileParseHttpHeader(struct lineFile *lf, char **hdr,
+				boolean *chunked, int *contentLength);
+/* Extract HTTP response header from lf into hdr, tell if it's
+ * "Transfer-Encoding: chunked" or if it has a contentLength. */
+
+struct dyString *lineFileSlurpHttpBody(struct lineFile *lf,
+				       boolean chunked, int contentLength);
+/* Return a dyString that contains the http response body in lf.  Handle
+ * chunk-encoding and content-length. */
+
+void lineFileSetMetaDataOutput(struct lineFile *lf, FILE *f);
+/* set file to write meta data to,
+ * should be called before reading from input file */
+
+void lineFileSetUniqueMetaData(struct lineFile *lf);
+/* suppress duplicate lines in metadata */
+
+void lineFileExpandBuf(struct lineFile *lf, int newSize);
+/* Expand line file buffer. */
+
+void lineFileRemoveInitialCustomTrackLines(struct lineFile *lf);
+/* remove initial browser and track lines */
+
+/*----- Optionally-compiled wrapper on tabix (compression + indexing): -----*/
+
+#define COMPILE_WITH_TABIX "%s: Sorry, this functionality is available only when\n" \
+    "you have installed the tabix library from\n" \
+     "http://samtools.sourceforge.net/ and rebuilt kent/src with USE_TABIX=1\n" \
+     "(see http://genomewiki.ucsc.edu/index.php/Build_Environment_Variables)."
+
+struct lineFile *lineFileTabixMayOpen(char *fileOrUrl, bool zTerm);
+/* Wrap a line file around a data file that has been compressed and indexed
+ * by the tabix command line program.  The index file <fileName>.tbi must be
+ * readable in addition to fileName. If there's a problem, warn & return NULL.
+ * This works only if kent/src has been compiled with USE_TABIX=1 and linked
+ * with the tabix C library. */
+
+boolean lineFileSetTabixRegion(struct lineFile *lf, char *seqName, int start, int end);
+/* Assuming lf was created by lineFileTabixMayOpen, tell tabix to seek to the specified region
+ * and return TRUE (or if there are no items in region, return FALSE). */
+
+#endif /* LINEFILE_H */
+
+
diff --git a/gbtools/src/include/blatSrc/localEnvironment.mk b/gbtools/src/include/blatSrc/localEnvironment.mk
new file mode 100644
index 0000000..e69de29
diff --git a/gbtools/src/include/blatSrc/localmem.h b/gbtools/src/include/blatSrc/localmem.h
new file mode 100644
index 0000000..3a58581
--- /dev/null
+++ b/gbtools/src/include/blatSrc/localmem.h
@@ -0,0 +1,66 @@
+/* LocalMem.h - local memory routines. 
+ * 
+ * These routines are meant for the sort of scenario where
+ * a lot of little to medium size pieces of memory are
+ * allocated, and then disposed of all at once.
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#ifndef LOCALMEM_H
+#define LOCALMEM_H
+
+struct lm *lmInit(int blockSize);
+/* Create a local memory pool. Parameters are:
+ *      blockSize - how much system memory to allocate at a time.  Can
+ *                  pass in zero and a reasonable default will be used.
+ */
+
+void lmCleanup(struct lm **pLm);
+/* Clean up a local memory pool. */
+
+size_t lmAvailable(struct lm *lm);
+// Returns currently available memory in pool
+
+size_t lmSize(struct lm *lm);
+// Returns current size of pool, even for memory already allocated
+
+void *lmAlloc(struct lm *lm, size_t size);
+/* Allocate memory from local pool. */
+
+void *lmAllocMoreMem(struct lm *lm, void *pt, size_t oldSize, size_t newSize);
+/* Adjust memory size on a block, possibly relocating it.  If block is grown,
+ * new memory is zeroed. NOTE: in RARE cases, same pointer may be returned. */
+
+void *lmCloneMem(struct lm *lm, void *pt, size_t size);
+/* Return a local mem copy of memory block. */
+
+
+char *lmCloneStringZ(struct lm *lm, char *string, int size);
+/* Return local mem copy of string of given size, adding null terminator. */
+
+char *lmCloneString(struct lm *lm, char *string);
+/* Return local mem copy of string. */
+
+char *lmCloneFirstWord(struct lm *lm, char *line);
+/* Clone first word in line */
+
+char *lmCloneSomeWord(struct lm *lm, char *line, int wordIx);
+/* Return a clone of the given space-delimited word within line.  Returns NULL if
+ * not that many words in line. */
+
+struct slName *lmSlName(struct lm *lm, char *name);
+/* Return slName in memory. */
+
+#define lmAllocVar(lm, pt) (pt = lmAlloc(lm, sizeof(*pt)));
+/* Shortcut to allocating a single variable in local mem and
+ * assigning pointer to it. */
+
+#define lmCloneVar(lm, pt) lmCloneMem(lm, pt, sizeof((pt)[0]))
+/* Allocate copy of a structure. */
+
+#define lmAllocArray(lm, pt, size) (pt = lmAlloc(lm, sizeof(*pt) * (size)))
+/* Shortcut to allocating an array in local mem and
+ * assigning pointer to it. */
+
+#endif//ndef LOCALMEM_H
diff --git a/gbtools/src/include/blatSrc/log.h b/gbtools/src/include/blatSrc/log.h
new file mode 100644
index 0000000..4c2474c
--- /dev/null
+++ b/gbtools/src/include/blatSrc/log.h
@@ -0,0 +1,74 @@
+/* log.h - logging for servers, can log to a file and/or syslog.  Compile with
+ * -DNO_SYSLOG for systems without syslog. */
+
+#ifndef LOG_H
+#define LOG_H
+
+void logOpenSyslog(char* program, char *facility);
+/* Initialize syslog using the specified facility.  Facility is the syslog
+ * facility as specified in syslog.conf.  If facility is NULL, local0 is used.
+ * This adds a warn and errAbort handlers that do logging.  If custom handlers
+ * are added, they should call logErrorVa().
+ */
+
+void logOpenFile(char* program, char *logFile);
+/* Initialize logging to the specified file.  Append to the file if it exists.
+ * This adds a warn and errAbort handlers that do logging.  If custom handlers
+ * are added, they should call logErrorVa(). 
+ */
+
+void logSetMinPriority(char *minPriority);
+/* set minimum priority to log, which is one of the syslog priority names,
+ * even when logging to a file */
+
+FILE *logGetFile();
+/* Returns the log FILE object if file logging is enabled, or NULL if it
+ * isn't. This is useful for logging debugging data that doesn't fit the log
+ * message paradigm, For example, logging fasta records. */
+
+void logErrorVa(char *format, va_list args);
+/* Variable args logError. */
+
+void logError(char *format, ...)
+/* Log an error message. */
+#if defined(__GNUC__)
+__attribute__((format(printf, 1, 2)))
+#endif
+;
+
+void logWarnVa(char *format, va_list args);
+/* Variable args logWarn. */
+
+void logWarn(char *format, ...)
+/* Log a warn message. */
+#if defined(__GNUC__)
+__attribute__((format(printf, 1, 2)))
+#endif
+;
+
+void logInfoVa(char *format, va_list args);
+/* Variable args logInfo. */
+
+void logInfo(char *format, ...)
+/* Log an info message. */
+#if defined(__GNUC__)
+__attribute__((format(printf, 1, 2)))
+#endif
+;
+
+void logDebugVa(char *format, va_list args);
+/* Variable args logDebug. */
+
+void logDebug(char *format, ...)
+/* Log a debug message. */
+#if defined(__GNUC__)
+__attribute__((format(printf, 1, 2)))
+#endif
+;
+
+void logDaemonize(char *progName);
+/* daemonize server process: closing open file descriptors and
+ * starting logging based on the -logFacility and -log command line options .
+ * if -debug is supplied , don't fork. */
+
+#endif
diff --git a/gbtools/src/include/blatSrc/longToList.h b/gbtools/src/include/blatSrc/longToList.h
new file mode 100644
index 0000000..3c951c0
--- /dev/null
+++ b/gbtools/src/include/blatSrc/longToList.h
@@ -0,0 +1,52 @@
+/* longToList - this is a way of associating a generic list with a long key.
+ * You can retrieve back the list given the key,  and add to lists associated with
+ * any given tree. The list can be any sort of singly-linked object that starts with
+ * a next field. 
+ *
+ * Under the hood this uses a balanced binary tree to handle the key/list
+ * association. */
+
+#ifndef LONGLISTTREE_H
+
+struct longToList
+/* A long and a opaquely typed list */
+    {
+    struct longToList *next;  /* In case this list is part of a regular list */
+    struct rbTree *tree;    /* Self balancing tree with long val/list key */
+    struct lm *lm;	    /* Optimized memory allocation thing */
+    };
+
+struct llKeyList
+/* These are what inhabit a longToList->tree.  They are generally allocated out of a lm,
+ * so don't look for a free routine. */
+    {
+    long key;	 /* Some sort of binary key value */
+    struct slRef *list;  /* Some sort of singly linked list */
+    };
+
+struct longToList *longToListNew();
+/* Return new empty longToList */
+
+void longToListFree(struct longToList **pLl);
+/* Free up memory associated with longToList. */
+
+struct llKeyList *longToListAdd(struct longToList *ll, long key, void *item);
+/* Add item to key-associated record in ll.  May make up new record if the
+ * key has never been seen before.  If record already exists item will be prepended
+ * to any existing items. Returns llKeyList associated with key, but most people just
+ * ignore that. */
+
+struct llKeyList *longToListLookup(struct longToList *ll, long key);
+/* Given a key return llKeyList associated with it if any, may return NULL */
+
+struct slRef *longToListFindVal(struct longToList *ll, long key);
+/* Returns the list associated with this key, or NULL if key not in container. */
+
+struct slRef *longToListMustFindVal(struct longToList *ll, long key);
+/* Returns the list associated with this key. Aborts if key not found in container. */
+
+
+
+
+#endif /* LONGLISTTREE_H */
+
diff --git a/gbtools/src/include/blatSrc/maDbRep.h b/gbtools/src/include/blatSrc/maDbRep.h
new file mode 100644
index 0000000..77fce3d
--- /dev/null
+++ b/gbtools/src/include/blatSrc/maDbRep.h
@@ -0,0 +1,62 @@
+/*****************************************************************************
+ * Copyright (C) 2000 Jim Kent.  This source code may be freely used         *
+ * for personal, academic, and non-profit purposes.  Commercial use          *
+ * permitted only by explicit agreement with Jim Kent (jim_kent at pacbell.net) *
+ *****************************************************************************/
+#ifndef MADBREP_H
+#define MADBREP_H
+
+/* maDbRep.h was originally generated by the autoSql program, which also 
+ * generated maDbRep.c and maDbRep.sql.  This header links the database and the RAM 
+ * representation of objects. */
+
+struct mrnaAli
+/* An mRNA/genomic alignment */
+    {
+    struct mrnaAli *next;  /* Next in singly linked list. */
+    unsigned id;	/* Unique ID */
+    signed char readDir;	/* Read direction of mRNA +1 or -1 */
+    signed char orientation;	/* Orientation relative to first BAC */
+    unsigned char hasIntrons;	/* True if alignment has introns */
+    unsigned char isEst;	/* True if an EST. */
+    int score;	/* Score in something like log-odds form */
+    char qAcc[13];	/* GenBank Accession for mRNA sequence */
+    unsigned qId;	/* Database ID of mRNA sequence */
+    unsigned qTotalSize;	/* Total bases (not just aligned) in mRNA */
+    unsigned qStart;	/* Start in mRNA sequence */
+    unsigned qEnd;	/* End in mRNA sequence */
+    unsigned tStartBac;	/* ID of first genomic BAC in alignment */
+    unsigned tStartPos;	/* Start position within first BAC */
+    unsigned tEndBac;	/* ID of last genomic BAC in alignment */
+    unsigned tEndPos;	/* End position within last BAC */
+    unsigned blockCount;	/* Number of aligned blocks */
+    unsigned *blockSizes;	/* Size of each block */
+    unsigned *qBlockStarts;	/* Start of each block in mRNA */
+    unsigned *tBlockBacs;	/* BAC each block starts in */
+    unsigned *tBlockStarts;	/* Position within BAC of each block start */
+    unsigned short *startGoods;	/* Number of perfect bases at start of block */
+    unsigned short *endGoods;	/* Number of perfect bases at end of block */
+    };
+
+struct mrnaAli *mrnaAliLoad(char **row);
+/* Load a mrnaAli from row fetched with select * from mrnaAli
+ * from database.  Dispose of this with mrnaAliFree(). */
+
+void mrnaAliFree(struct mrnaAli **pEl);
+/* Free a single dynamically allocated mrnaAli such as created
+ * with mrnaAliLoad(). */
+
+void mrnaAliFreeList(struct mrnaAli **pList);
+/* Free a list of dynamically allocated mrnaAli's */
+
+void mrnaAliOutput(struct mrnaAli *el, FILE *f, char sep, char lastSep);
+/* Print out mrnaAli.  Separate fields with sep. Follow last field with lastSep. */
+
+#define mrnaAliTabOut(el,f) mrnaAliOutput(el,f,'\t','\n');
+/* Print out mrnaAli as a line in a tab-separated file. */
+
+#define mrnaAliCommaOut(el,f) mrnaAliOutput(el,f,',',',');
+/* Print out mrnaAli as a comma separated list including final comma. */
+
+#endif /* MADBREP_H */
+
diff --git a/gbtools/src/include/blatSrc/maToFf.h b/gbtools/src/include/blatSrc/maToFf.h
new file mode 100644
index 0000000..18b8aa7
--- /dev/null
+++ b/gbtools/src/include/blatSrc/maToFf.h
@@ -0,0 +1,21 @@
+/*****************************************************************************
+ * Copyright (C) 2000 Jim Kent.  This source code may be freely used         *
+ * for personal, academic, and non-profit purposes.  Commercial use          *
+ * permitted only by explicit agreement with Jim Kent (jim_kent at pacbell.net) *
+ *****************************************************************************/
+#ifndef MATOFF_H
+#define MATOFF_H
+
+/* Convert between mrnaAli and ffAli representations of an alignment. */
+
+struct mrnaAli *ffToMa(struct ffAli *ffLeft, 
+	struct dnaSeq *mrnaSeq, char *mrnaAcc,
+	struct dnaSeq *genoSeq, char *genoAcc, 
+	boolean isRc, boolean isEst);
+/* Convert ffAli structure to mrnaAli. */
+
+struct ffAli *maToFf(struct mrnaAli *ma, DNA *needle, DNA *haystack);
+/* Convert from database to internal representation of alignment. */
+
+#endif /* MATOFF_H */
+
diff --git a/gbtools/src/include/blatSrc/maf.h b/gbtools/src/include/blatSrc/maf.h
new file mode 100644
index 0000000..3e3f06b
--- /dev/null
+++ b/gbtools/src/include/blatSrc/maf.h
@@ -0,0 +1,264 @@
+/* maf.h - Multiple alignment format.  */
+#ifndef MAF_H
+#define MAF_H
+
+#ifndef COMMON_H
+#include "common.h"
+#endif
+
+#ifndef AXT_H
+#include "axt.h"
+#endif
+
+struct mafFile
+/* A file full of multiple alignments. */
+    {
+    struct mafFile *next;
+    int version;	 /* Required */
+    char *scoring;	 /* Optional (may be NULL). Name of  scoring scheme. */
+    struct mafAli *alignments;	/* Possibly empty list of alignments. */
+    struct lineFile *lf; /* Open line file if any. NULL except while parsing. */
+    };
+
+void mafFileFree(struct mafFile **pObj);
+/* Free up a maf file including closing file handle if necessary. */
+
+void mafFileFreeList(struct mafFile **pList);
+/* Free up a list of maf files. */
+
+struct mafAli
+/* A multiple alignment. */
+    {
+    struct mafAli *next;
+    double score;        /* Score.  Meaning depends on mafFile.scoring.  0.0 if no scoring. */
+    struct mafComp *components;	/* List of components of alignment */
+    int textSize;         /* Size of text in each component. */
+    struct mafRegDef *regDef; /* source of region definitions (r line) */
+    };
+
+void mafAliFree(struct mafAli **pObj);
+/* Free up a maf alignment. */
+
+void mafAliFreeList(struct mafAli **pList);
+/* Free up a list of maf alignmentx. */
+
+/* the set of syntenic relationships that the previous and
+ * following alignments have with the current one */
+#define	MAF_INVERSE_STATUS		'V'
+#define	MAF_INSERT_STATUS		'I'
+#define	MAF_CONTIG_STATUS		'C'
+#define	MAF_CONTIG_NESTED_STATUS	'c'
+#define	MAF_NEW_STATUS			'N'
+#define	MAF_NEW_NESTED_STATUS		'n'
+#define	MAF_MAYBE_NEW_STATUS		'S'
+#define	MAF_MAYBE_NEW_NESTED_STATUS	's'
+#define	MAF_MISSING_STATUS		'M'
+#define	MAF_TANDEM_STATUS		'T'
+
+struct mafComp
+/* A component of a multiple alignment. */
+    {
+    struct mafComp *next;
+    char *src;	 /* Name of sequence source.  */
+    int srcSize; /* Size of sequence source.  */
+    char strand; /* Strand of sequence.  Either + or -*/
+    int start;	 /* Start within sequence. Zero based. If strand is - is relative to src end. */
+    int size;	 /* Size in sequence (does not include dashes).  */
+    char *text;  /* The sequence including dashes. */
+    char *quality;  /* The quality data (same length as text, or NULL). */
+    char leftStatus; /* the syntenic status of the alignment before us vis a vis ourselves */
+    int leftLen;     /* length related information for the previous alignment for the species */
+    char rightStatus; /* the syntenic status of the alignment after us vis a vis ourselves */
+    int rightLen;     /* length related information for the following alignment for the species */
+    };
+
+void mafCompFree(struct mafComp **pObj);
+/* Free up a maf component. */
+
+void mafCompFreeList(struct mafComp **pList);
+/* Free up a list of maf components. */
+
+char *mafCompGetSrcDb(struct mafComp *mc, char *buf, int bufSize);
+/* parse the srcDb name from the mafComp src name, return NULL if no srcDb */
+
+char *mafCompGetSrcName(struct mafComp *mc);
+/* parse the src sequence name from the mafComp src name */
+
+struct mafRegDef
+/* MAF region definition (r line) */
+{
+    char *type;   // type of definition, one of constants below (not malloced)
+    int size;     // region size
+    char *id;     // identifiers
+};
+extern char *mafRegDefTxUpstream;  // transcription start size upstream region
+
+struct mafRegDef *mafRegDefNew(char *type, int size, char *id);
+/* construct a new mafRegDef object */
+
+void mafRegDefFree(struct mafRegDef **mrdPtr);
+/* Free a mafRegDef object */
+
+int mafPlusStart(struct mafComp *comp);
+/* Return start relative to plus strand of src. */
+
+struct mafFile *mafOpen(char *fileName);
+/* Open up a .maf file for reading.  Read header and
+ * verify. Prepare for subsequent calls to mafNext().
+ * Prints error message and aborts if there's a problem. */
+
+struct mafFile *mafMayOpen(char *fileName);
+/* Like mafOpen above, but returns NULL rather than aborting 
+ * if file does not exist. */
+
+void mafRewind(struct mafFile *mf);
+/* Seek to beginning of open maf file */
+
+struct mafAli *mafNext(struct mafFile *mafFile);
+/* Return next alignment in file or NULL if at end. 
+ * This will close the open file handle at end as well. */
+
+struct mafAli *mafNextWithPos(struct mafFile *mf, off_t *retOffset);
+/* Return next alignment in FILE or NULL if at end.  If retOffset is
+ * non-NULL, return start offset of record in file. */
+
+struct mafFile *mafReadAll(char *fileName);
+/* Read in full maf file */
+
+void mafWriteStart(FILE *f, char *scoring);
+/* Write maf header and scoring scheme name (may be null) */
+
+void mafWrite(FILE *f, struct mafAli *maf);
+/* Write next alignment to file. */
+
+void mafWriteEnd(FILE *f);
+/* Write end tag of maf file. */
+
+void mafWriteAll(struct mafFile *mf, char *fileName);
+/* Write out full mafFile. */
+
+struct mafComp *mafMayFindComponent(struct mafAli *maf, char *src);
+/* Find component of given source. Return NULL if not found. */
+
+struct mafComp *mafMayFindComponentDb(struct mafAli *maf, char *db);
+/* Find component of given database or source. Return NULL if not found. */
+
+struct mafComp *mafFindComponent(struct mafAli *maf, char *src);
+/* Find component of given source or die trying. */
+
+struct mafComp *mafMayFindCompSpecies(struct mafAli *maf, char *species, char sepChar);
+/* Find component of given source that starts with species followed by sepChar or '\0'
+   Return NULL if not found. */
+
+struct mafComp *mafFindCompSpecies(struct mafAli *maf, char *species, char sepChar);
+/* Find component of given source that starts with species followed by sepChar or '\0'
+   or die trying. */
+
+struct mafComp *mafMayFindCompPrefix(struct mafAli *maf, char *pre, char *sep);
+/* Find component of given source that starts with pre followed by sep.
+   Return NULL if not found. */
+
+struct mafComp *mafFindCompPrefix(struct mafAli *maf, char *pre, char *sep);
+/* Find component of given source that starts with pre followed by sep
+   or die trying. */
+
+boolean mafMayFindAllComponents(struct mafAli *maf, struct hash *cHash);
+/* Check to see if all components in hash are in maf block.  Return FALSE if not found. */
+
+struct mafComp *mafMayFindComponentInHash(struct mafAli *maf, struct hash *cHash);
+/* Find arbitrary component of given source that matches any string in the cHash.
+   Return NULL if not found. */
+
+struct mafComp *mafMayFindSpeciesInHash(struct mafAli *maf, struct hash *cHash, char sepChar);
+/* Find arbitrary component of given who's source prefix (ended by sep)
+   matches matches any string in the cHash.  Return NULL if not found. */
+
+void mafMoveComponentToTop(struct mafAli *maf, char *componentSource);
+/* Move given component to head of component list. */
+
+struct mafAli *mafFromAxt(struct axt *pAxt, int tSize, 
+	char *tPrefix, int qSize, char *qPrefix);
+/* Make up a maf file from axt.  Slower than mafFromAxtTemp,
+ * but the axt and maf are independent afterwards. */
+
+void mafFromAxtTemp(struct axt *axt, int tSize, int qSize,
+	struct mafAli *temp);
+/* Make a maf out of axt,  parasiting on the memory in axt.
+ * Do *not* mafFree this temp.  The memory it has in pointers
+ * is still owned by the axt.  Furthermore the next call to
+ * this function will invalidate the previous temp value.
+ * It's sort of a kludge, but quick to run and easy to implement. */
+
+struct mafAli *mafSubset(struct mafAli *maf, char *componentSource,
+	int newStart, int newEnd);
+/* see mafSubsetE below  (called with getInitialDases = FALSE */
+
+struct mafAli *mafSubsetE(struct mafAli *maf, char *componentSource,
+	int newStart, int newEnd, bool getInitialDashes);
+/* Extract subset of maf that intersects a given range
+ * in a component sequence.  The newStart and newEnd
+ * are given in the forward strand coordinates of the
+ * component sequence.  The componentSource is typically
+ * something like 'mm3.chr1'.  This will return NULL
+ * if maf does not intersect range.  The score field
+ * in the returned maf will not be filled in (since
+ * we don't know which scoring scheme to use). 
+ * If getInitialDashes is TRUE then the initial -'s
+ * in the reference sequence are *not* removed*/
+
+boolean mafNeedSubset(struct mafAli *maf, char *componentSource,
+	int newStart, int newEnd);
+/* Return TRUE if maf only partially fits between newStart/newEnd
+ * in given component. */
+
+double mafScoreMultiz(struct mafAli *maf);
+/* Return score of a maf (calculated rather than what is
+ * stored in the structure. */
+
+double mafScoreRangeMultiz(struct mafAli *maf, int start, int size);
+/* Return score of a subset of an alignment.  Parameters are:
+ *    maf - the alignment
+ *    start - the (zero based) offset to start calculating score
+ *    size - the size of the subset
+ * The following relationship should hold:
+ *   scoreRange(maf,start,size) =
+ *	scoreRange(maf,0,start+size) - scoreRange(maf,0,start)
+ */
+
+void mafScoreUseSimple();
+/* use a simple scoring system useful for finding mismatches */
+
+void mafScoreUseTraditional();
+/* use the tradition HOX scoring system */
+
+double mafScoreMultizMaxCol(int species);
+/* Return maximum possible score for a column. */
+
+void mafColMinMaxScore(struct mafAli *maf, 
+	double *retMin, double *retMax);
+/* Get min/max maf scores for a column. */
+
+void mafFlipStrand(struct mafAli *maf);
+/* Reverse complement maf. */
+
+void mafSrcDb(char *name, char *retDb, int retDbSize);
+/* Parse out just database part of name (up to but not including
+ * first dot). If dot found, return entire name */
+
+boolean mafColumnEmpty(struct mafAli *maf, int col);
+/* Return TRUE if the column is all '-' or '.' */
+
+void mafStripEmptyColumns(struct mafAli *maf);
+/* Remove columns that are all '-' or '.' from  maf. */
+
+boolean isContigOrTandem(char status);
+/* is status MAF_CONTIG_STATUS or MAF_TANDEM_STATUS */
+
+struct mafComp *mafCompClone(struct mafComp *srcComp);
+/* clone a mafComp */
+
+struct mafAli *mafAliClone(struct mafAli *srcAli);
+/* clone a mafAli */
+
+#endif /* MAF_H */
+
diff --git a/gbtools/src/include/blatSrc/mailViaPipe.h b/gbtools/src/include/blatSrc/mailViaPipe.h
new file mode 100644
index 0000000..ec33990
--- /dev/null
+++ b/gbtools/src/include/blatSrc/mailViaPipe.h
@@ -0,0 +1,8 @@
+/* mailViaPipe - sendmail via pipeline.  */
+#ifndef MAILVIAPIPE_H
+#define MAILVIAPIPE_H
+
+int mailViaPipe(char *toAddress, char *theSubject, char *theBody, char *fromAddress);
+/* sendmail via pipeline */
+
+#endif
diff --git a/gbtools/src/include/blatSrc/md5.h b/gbtools/src/include/blatSrc/md5.h
new file mode 100644
index 0000000..e8f1215
--- /dev/null
+++ b/gbtools/src/include/blatSrc/md5.h
@@ -0,0 +1,32 @@
+/* md5 calculating functions and the like.  Just wrappers for md5sum program */
+
+#ifndef MD5_H
+#define MD5_H
+
+char *md5HexForFile(char * fileName);
+/* Calculate md5 on file and return in hex format.  Use freeMem on result when done. */
+
+char *md5HexForBuf(char *buf, size_t bufSize);
+/* Return md5 sum of buffer. Use freeMem on result when done. */
+
+char *md5HexForString(char *string);
+/* Return md5 sum of zero-terminated string. Use freeMem on result when done. */
+
+void md5ForFile(char * fileName, unsigned char md5[16]);
+/* Return MD5 sum for file in md5 in binary rather than hex format. */
+
+void md5HexToMd5(char hexIn[32], unsigned char md5Out[16]);
+/* Convert hexadecimal representation of md5 back to binary */
+
+char *md5ToHex(unsigned char md5[16]);
+/* Convert binary representation of md5 to hex string. Do a freeMem on result when done. */
+
+void md5HexToMd5(char hexIn[32], unsigned char md5Out[16]);
+/* Convert hexadecimal representation of md5 back to binary */
+
+struct hash *md5FileHash(char *fileName);
+/* Read md5sum file and return a hash keyed by file names with md5sum values. */
+
+#endif /* MD5_H */
+
+
diff --git a/gbtools/src/include/blatSrc/memalloc.h b/gbtools/src/include/blatSrc/memalloc.h
new file mode 100644
index 0000000..eaa0799
--- /dev/null
+++ b/gbtools/src/include/blatSrc/memalloc.h
@@ -0,0 +1,55 @@
+/* Let the user redirect where memory allocation/deallocation
+ * happens.  'careful' routines help debug scrambled heaps. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#ifndef MEMALLOC_H
+#define MEMALLOC_H
+
+struct memHandler
+    {
+    struct memHandler *next;
+    void * (*alloc)(size_t size);
+    void (*free)(void *vpt);
+    void * (*realloc)(void* vpt, size_t size);
+    };
+
+struct memHandler *pushMemHandler(struct memHandler *newHandler);
+/* Use newHandler for memory requests until matching popMemHandler.
+ * Returns previous top of memory handler stack. */
+
+struct memHandler *popMemHandler();
+/* Removes top element from memHandler stack and returns it. */
+
+void setDefaultMemHandler();
+/* Sets memHandler to the default. */
+
+void pushCarefulMemHandler(size_t maxAlloc);
+/* Push the careful (paranoid, conservative, checks everything)
+ * memory handler  top of the memHandler stack and use it. */
+
+void carefulCheckHeap();
+/* Walk through allocated memory and make sure that all cookies are
+ * in place. Only walks through what's been done since 
+ * pushCarefulMemHandler(). */
+
+int carefulCountBlocksAllocated();
+/* How many memory items are allocated? (Since called
+ * pushCarefulMemHandler(). */
+
+size_t carefulTotalAllocated();
+/* Return total bases allocated */
+
+void setMaxAlloc(size_t s);
+/* Set large allocation limit. */
+
+void memTrackerStart();
+/* Push memory handler that will track blocks allocated so that
+ * they can be automatically released with memTrackerEnd().  */
+
+void memTrackerEnd();
+/* Free any remaining blocks and pop tracker memory handler. */
+
+#endif /* MEMALLOC_H */
+
diff --git a/gbtools/src/include/blatSrc/memgfx.h b/gbtools/src/include/blatSrc/memgfx.h
new file mode 100644
index 0000000..1eb7b6e
--- /dev/null
+++ b/gbtools/src/include/blatSrc/memgfx.h
@@ -0,0 +1,398 @@
+/*****************************************************************************
+ * Copyright (C) 2000 Jim Kent.  This source code may be freely used         *
+ * for personal, academic, and non-profit purposes.  Commercial use          *
+ * permitted only by explicit agreement with Jim Kent (jim_kent at pacbell.net) *
+ *****************************************************************************/
+/* Memgfx - stuff to do graphics in memory buffers.
+ * Typically will just write these out as .gif or .png files.
+ * This stuff is byte-a-pixel for simplicity.
+ * It can do 256 colors.
+ */
+#ifndef MEMGFX_H
+#define MEMGFX_H
+
+#ifndef GFXPOLY_H
+#include "gfxPoly.h"
+#endif
+
+#ifdef COLOR32
+typedef unsigned int Color;
+
+// BIGENDIAN machines:
+
+#if defined(__sgi__) || defined(__sgi) || defined(__powerpc__) || defined(sparc) || defined(__ppc__) || defined(__s390__) || defined(__s390x__)
+
+#define MEMGFX_BIGENDIAN	1
+#define MG_WHITE   0xffffffff
+#define MG_BLACK   0x000000ff
+#define MG_RED     0xff0000ff
+#define MG_GREEN   0x00ff00ff
+#define MG_BLUE    0x0000ffff
+#define MG_CYAN    0x00ffffff
+#define MG_MAGENTA 0xff00ffff
+#define MG_YELLOW  0xffff00ff
+#define MG_GRAY    0x808080ff
+
+#define MAKECOLOR_32(r,g,b) (((unsigned int)0xff) | ((unsigned int)b<<8) | ((unsigned int)g << 16) | ((unsigned int)r << 24))
+#define COLOR_32_RED(c) (((c)>>24)&0xff)
+#define COLOR_32_GREEN(c) (((c)>>16)&0xff)
+#define COLOR_32_BLUE(c) (((c)>>8)&0xff)
+
+#else
+
+#define MG_WHITE   0xffffffff
+#define MG_BLACK   0xff000000
+#define MG_RED     0xff0000ff
+#define MG_GREEN   0xff00ff00
+#define MG_BLUE    0xffff0000
+#define MG_CYAN    0xffffff00
+#define MG_MAGENTA 0xffff00ff
+#define MG_YELLOW  0xff00ffff
+#define MG_GRAY    0xff808080
+
+#define MAKECOLOR_32(r,g,b) (((unsigned int)0xff<<24) | ((unsigned int)b<<16) | ((unsigned int)g << 8) | (unsigned int)r)
+#define COLOR_32_RED(c) ((c)&0xff)
+#define COLOR_32_GREEN(c) (((c)>>8)&0xff)
+#define COLOR_32_BLUE(c) (((c)>>16)&0xff)
+#endif
+
+#else /* 8-bit color */
+typedef unsigned char Color;
+
+#define MG_WHITE 0
+#define MG_BLACK 1
+#define MG_RED 2
+#define MG_GREEN 3
+#define MG_BLUE 4
+#define MG_CYAN 5
+#define MG_MAGENTA 6
+#define MG_YELLOW 7
+#define MG_GRAY 8
+#define MG_FREE_COLORS_START 9
+
+#endif /* COLOR32 */
+
+#define MG_WRITE_MODE_NORMAL    0
+#define MG_WRITE_MODE_MULTIPLY  (1 << 0)
+
+struct rgbColor
+    {
+    unsigned char r, g, b;
+    };
+
+/* HSV and HSL structs can be used for changing lightness, darkness, or
+ * color of RGB colors. Convert RGB->HS[LV], modify hue, saturation, or
+ * value/lightness, then convert back to RGB.
+ * The datatypes were chosen to be fast but also give accurate conversion
+ * back to RGB.
+ * Hue is a float [0,360) degrees 0=red, 120=green, 240=blue
+ * S/V/L are integers [0,1000]
+ */
+
+struct hsvColor
+    {
+    double h;
+    unsigned short s, v;
+    };
+
+struct hslColor
+    {
+    double h;
+    unsigned short s, l;
+    };
+
+extern struct rgbColor mgFixedColors[9];  /* Contains MG_WHITE - MG_GRAY */
+
+struct memGfx
+    {
+    Color *pixels;
+    int width, height;
+    struct rgbColor colorMap[256];
+    int colorsUsed;
+    int clipMinX, clipMaxX;
+    int clipMinY, clipMaxY;
+    struct colHash *colorHash;	/* Hash for fast look up of color. */
+    unsigned int writeMode;
+    };
+
+struct memGfx *mgNew(int width, int height);
+/* Get a new thing to draw on in memory. */
+
+void mgFree(struct memGfx **pmg);
+/* Free up memory raster. */
+
+void mgClearPixelsTrans(struct memGfx *mg);
+/* Set all pixels to transparent. */
+
+void mgClearPixels(struct memGfx *mg);
+/* Set all pixels to background. */
+
+void mgSetClip(struct memGfx *mg, int x, int y, int width, int height);
+/* Set clipping rectangle. */
+
+void mgUnclip(struct memGfx *mg);
+/* Set clipping rect cover full thing. */
+
+Color mgFindColor(struct memGfx *mg, unsigned char r, unsigned char g, unsigned char b);
+/* Returns closest color in color map to rgb values.  If it doesn't
+ * already exist in color map and there's room, it will create
+ * exact color in map. */
+
+Color mgClosestColor(struct memGfx *mg, unsigned char r, unsigned char g, unsigned char b);
+/* Returns closest color in color map to r,g,b */
+
+Color mgAddColor(struct memGfx *mg, unsigned char r, unsigned char g, unsigned char b);
+/* Adds color to end of color map if there's room. */
+
+int mgColorsFree(struct memGfx *mg);
+/* Returns # of unused colors in color map. */
+
+
+#define _mgBpr(mg) ((mg)->width)
+/* Get what to add to get to next line */
+
+#define _mgPixAdr(mg,x,y) ((mg)->pixels+_mgBpr(mg) * (y) + (x))
+/* Get pixel address */
+
+#define _mgPutDot(mg, x, y, color) (*_mgPixAdr(mg,x,y) = (color))
+/* Unclipped plot a dot */
+
+#define _mgGetDot(mg, x, y) (*_mgPixAdr(mg,x,y))
+/* Unclipped get a dot, you do not want to use this, this is special for
+ * verticalText only */
+
+void _mgPutDotMultiply(struct memGfx *mg, int x, int y,Color color);
+
+INLINE void mgPutDot(struct memGfx *mg, int x, int y,Color color)
+{
+if ((x)>=(mg)->clipMinX && (x) < (mg)->clipMaxX && (y)>=(mg)->clipMinY  && (y) < (mg)->clipMaxY) 
+    {
+        switch(mg->writeMode)
+        {
+        case MG_WRITE_MODE_NORMAL:
+            {
+            _mgPutDot(mg,x,y,color);
+            }
+            break;
+        case MG_WRITE_MODE_MULTIPLY:
+            {
+            _mgPutDotMultiply(mg,x,y,color);
+            }
+            break;
+        }
+    }
+}
+/* Clipped put dot */
+
+#define mgGetDot(mg,x,y) ((x)>=(mg)->clipMinX && (x) < (mg)->clipMaxX && (y)>=(mg)->clipMinY  && (y) < (mg)->clipMaxY) ? _mgGetDot(mg,x,y) : 0
+/* Clipped get dot, you do not want to use this, this is special for
+ * verticalText only */
+
+void mgPutSeg(struct memGfx *mg, int x, int y, int width, Color *dots);
+/* Put a series of dots starting at x, y and going to right width pixels. */
+
+void mgPutSegZeroClear(struct memGfx *mg, int x, int y, int width, Color *dots);
+/* Put a series of dots starting at x, y and going to right width pixels.
+ * Don't put zero dots though. */
+
+void mgDrawBox(struct memGfx *mg, int x, int y, int width, int height, Color color);
+/* Draw a (horizontal) box */
+
+void mgDrawLine(struct memGfx *mg, int x1, int y1, int x2, int y2, Color color);
+/* Draw a line from one point to another. */
+
+void mgDrawHorizontalLine(struct memGfx *mg, int y1, Color color);
+/*special case of mgDrawLine*/
+
+void mgLineH(struct memGfx *mg, int y, int x1, int x2, Color color);
+/* Draw horizizontal line width pixels long starting at x/y in color */
+
+void mgSavePng(struct memGfx *mg, char *filename, boolean useTransparency);
+/* Save memory bitmap to filename as a PNG.
+ * If useTransparency, then the first color in memgfx's colormap/palette is
+ * assumed to be the image background color, and pixels of that color
+ * are made transparent. */
+
+boolean mgSaveToPng(FILE *png_file, struct memGfx *mg, boolean useTransparency);
+/* Save PNG to an already open file.
+ * If useTransparency, then the first color in memgfx's colormap/palette is
+ * assumed to be the image background color, and pixels of that color
+ * are made transparent. */
+
+typedef void (*TextBlit)(int bitWidth, int bitHeight, int bitX, int bitY,
+	unsigned char *bitData, int bitDataRowBytes, 
+	struct memGfx *dest, int destX, int destY, 
+	Color color, Color backgroundColor);
+/* This defines the type of a function that takes a rectangular
+ * area of a bitplane and expands it into a rectangular area
+ * of a full color screen. */
+
+void mgTextBlit(int bitWidth, int bitHeight, int bitX, int bitY,
+	unsigned char *bitData, int bitDataRowBytes, 
+	struct memGfx *dest, int destX, int destY, 
+	Color color, Color backgroundColor);
+/* This function leaves the background as it was. */
+
+void mgTextBlitSolid(int bitWidth, int bitHeight, int bitX, int bitY,
+	unsigned char *bitData, int bitDataRowBytes, 
+	struct memGfx *dest, int destX, int destY, 
+	Color color, Color backgroundColor);
+/* This function sets the background to the background color. */
+
+typedef struct font_hdr MgFont;
+/* Type of our font.  */
+
+/* Collection of fonts from here and there.  The mgTinyFont() and mgSmallFont() are uniq
+ * here.  The rest are synonyms at this point for the adobe fonts below. */
+MgFont *mgTinyFont();
+MgFont *mgSmallFont();
+MgFont *mgMediumFont();
+MgFont *mgLargeFont();
+MgFont *mgHugeFont();
+MgFont *mgTinyBoldFont();
+MgFont *mgSmallBoldFont();
+MgFont *mgMediumBoldFont();
+MgFont *mgLargeBoldFont();
+MgFont *mgHugeBoldFont();
+MgFont *mgTinyFixedFont();
+MgFont *mgSmallFixedFont();
+MgFont *mgMediumFixedFont();
+MgFont *mgLargeFixedFont();
+MgFont *mgHugeFixedFont();
+
+/* Adobe fonts from xfree project. */
+MgFont *mgCourier8Font();
+MgFont *mgCourier10Font();
+MgFont *mgCourier12Font();
+MgFont *mgCourier14Font();
+MgFont *mgCourier18Font();
+MgFont *mgCourier24Font();
+MgFont *mgCourier34Font();
+MgFont *mgHelvetica8Font();
+MgFont *mgHelvetica10Font();
+MgFont *mgHelvetica12Font();
+MgFont *mgHelvetica14Font();
+MgFont *mgHelvetica18Font();
+MgFont *mgHelvetica24Font();
+MgFont *mgHelvetica34Font();
+MgFont *mgHelveticaBold8Font();
+MgFont *mgHelveticaBold10Font();
+MgFont *mgHelveticaBold12Font();
+MgFont *mgHelveticaBold14Font();
+MgFont *mgHelveticaBold18Font();
+MgFont *mgHelveticaBold24Font();
+MgFont *mgHelveticaBold34Font();
+MgFont *mgTimes8Font();
+MgFont *mgTimes10Font();
+MgFont *mgTimes12Font();
+MgFont *mgTimes14Font();
+MgFont *mgTimes18Font();
+MgFont *mgTimes24Font();
+MgFont *mgTimes34Font();
+
+/* free Meslo font */
+MgFont *mgMenloMediumFont();
+
+void mgText(struct memGfx *mg, int x, int y, Color color, 
+	MgFont *font, char *text);
+/* Draw a line of text with upper left corner x,y. */
+
+void mgTextCentered(struct memGfx *mg, int x, int y, int width, int height, 
+	Color color, MgFont *font, char *text);
+/* Draw a line of text centered in box defined by x/y/width/height */
+
+void mgTextRight(struct memGfx *mg, int x, int y, int width, int height, 
+	Color color, MgFont *font, char *text);
+/* Draw a line of text right justified in box defined by x/y/width/height */
+
+int mgFontPixelHeight(MgFont *font);
+/* How high in pixels is font? */
+
+int mgFontLineHeight(MgFont *font);
+/* How many pixels to next line ideally? */
+
+int mgFontWidth(MgFont *font, char *chars, int charCount);
+/* How wide are a couple of letters? */
+
+int mgFontStringWidth(MgFont *font, char *string);
+/* How wide is a string? */
+
+int mgFontCharWidth(MgFont *font, char c);
+/* How wide is a character? */
+
+char *mgFontSizeBackwardsCompatible(char *size);
+/* Given "size" argument that may be in old tiny/small/medium/big/huge format,
+ * return it in new numerical string format. Do NOT free the return string*/
+
+MgFont *mgFontForSizeAndStyle(char *textSize, char *fontType);
+/* Get a font of given size and style.  Abort with error message if not found.
+ * The textSize should be 6,8,10,12,14,18,24 or 34.  For backwards compatibility
+ * textSizes of "tiny" "small", "medium", "large" and "huge" are also ok.
+ * The fontType should be "medium", "bold", or "fixed" */
+
+MgFont *mgFontForSize(char *textSize);
+/* Get a font of given size and style.  Abort with error message if not found.
+ * The textSize should be 6,8,10,12,14,18,24 or 34.  For backwards compatibility
+ * textSizes of "tiny" "small", "medium", "large" and "huge" are also ok. */
+
+void mgFillUnder(struct memGfx *mg, int x1, int y1, int x2, int y2, 
+	int bottom, Color color);
+/* Draw a 4 sided filled figure that has line x1/y1 to x2/y2 at
+ * it's top, a horizontal line at bottom at it's bottom,  and
+ * vertical lines from the bottom to y1 on the left and bottom to
+ * y2 on the right. */
+
+struct memGfx *mgRotate90(struct memGfx *in);
+/* Create a copy of input that is rotated 90 degrees clockwise. */
+
+void mgCircle(struct memGfx *mg, int xCen, int yCen, int rad, 
+	Color color, boolean filled);
+/* Draw a circle using a stepping algorithm.  Doesn't correct
+ * for non-square pixels. */
+
+void mgDrawPoly(struct memGfx *mg, struct gfxPoly *poly, Color color,
+	boolean filled);
+/* Draw polygon, possibly filled in color. */
+
+struct hslColor mgRgbToHsl(struct rgbColor rgb);
+/* Convert RGB to HSL colorspace (see http://en.wikipedia.org/wiki/HSL_and_HSV) 
+ * In HSL, Hue is the color in the range [0,360) with 0=red 120=green 240=blue,
+ * Saturation goes from a shade of grey (0) to fully saturated color (1000), and
+ * Lightness goes from black (0) through the hue (500) to white (1000). */
+
+struct hsvColor mgRgbToHsv(struct rgbColor rgb);
+/* Convert RGB to HSV colorspace (see http://en.wikipedia.org/wiki/HSL_and_HSV)
+ * In HSV, Hue is the color in the range [0,360) with 0=red 120=green 240=blue,
+ * Saturation goes from white (0) to fully saturated color (1000), and
+ * Value goes from black (0) through to the hue (1000). */
+#define hsvValMax 1000
+#define hsvSatMax 1000
+
+struct rgbColor mgHslToRgb(struct hslColor hsl);
+/* Convert HSL to RGB colorspace (see http://en.wikipedia.org/wiki/HSL_and_HSV) */
+
+struct rgbColor mgHsvToRgb(struct hsvColor hsv);
+/* Convert HSV to RGB colorspace (see http://en.wikipedia.org/wiki/HSL_and_HSV) */
+
+struct rgbColor mgRgbTransformHsl(struct rgbColor in, double h, double s, double l);
+/* Transform rgb 'in' value using
+ *   hue shift 'h' (0..360 degrees), 
+ *   saturation scale 's', and 
+ *   lightness scale 'l'
+ * Returns the transformed rgb value 
+ * Use H=0, S=L=1 for identity transformation
+ */
+
+struct rgbColor mgRgbTransformHsv(struct rgbColor in, double h, double s, double v);
+/* Transform rgb 'in' value using
+ *   hue shift 'h' (0..360 degrees), 
+ *   saturation scale 's', and 
+ *   value scale 'v'
+ * Returns the transformed rgb value 
+ * Use H=0, S=V=1 for identity transformation
+ */
+
+struct rgbColor mgColorIxToRgb(struct memGfx *mg, int colorIx);
+/* Return rgb value at color index. */
+
+#endif /* MEMGFX_H */
diff --git a/gbtools/src/include/blatSrc/meta.h b/gbtools/src/include/blatSrc/meta.h
new file mode 100644
index 0000000..b9bc371
--- /dev/null
+++ b/gbtools/src/include/blatSrc/meta.h
@@ -0,0 +1,93 @@
+/* metaRa - stuff to parse and interpret a genome-hub meta.txt file, which is in 
+ * a hierarchical ra format.  That is something like:
+ *     meta topLevel
+ *     cellLine HELA
+ *
+ *         meta midLevel
+ *         target H3K4Me3
+ *         antibody abCamAntiH3k4me3
+ *       
+ *            meta lowLevel
+ *            fileName hg19/chipSeq/helaH3k4me3.narrowPeak.bigBed
+ * The file is interpreted so that lower level stanzas inherit tags from higher level ones.
+ */
+
+#ifndef META_H
+#define META_H
+
+struct metaTagVal
+/* A tag/value pair. */
+    {
+    struct metaTagVal *next;	/* Next in list. */
+    char *tag;	/* Tag name. */
+    char *val;	/* Tag value. */
+    };
+
+struct metaTagVal *metaTagValNew(char *tag, char *val);
+/* Create new meta tag/val */
+
+void metaTagValFree(struct metaTagVal **pMtv);
+/* Free up metaTagVal. */
+
+void metaTagValFreeList(struct metaTagVal **pList);
+/* Free a list of dynamically allocated metaTagVal's */
+
+int metaTagValCmp(const void *va, const void *vb);
+/* Compare to sort based on tag name . */
+
+struct meta
+/* A node in the metadata tree */
+    {
+    struct meta *next;  /* Pointer to next younger sibling. */
+    struct meta *children;	/* Pointer to eldest child. */
+    struct meta *parent;	/* Pointer to parent. */
+    char *name;		    /* Same as val of meta tag. Not allocated here. */
+    struct metaTagVal *tagList;	/* All tags, including the "meta" one. */
+    int indent;                 /* Indentation level - generally only set if read from file. */
+    };
+
+struct meta *metaLoadAll(char *fileName, char *keyTag, char *parentTag,
+    boolean ignoreOtherStanzas, boolean ignoreIndent);
+/* Loads in all ra stanzas from file and turns them into a list of meta, some of which
+ * may have children.  The keyTag parameter is optional.  If non-null it should be set to
+ * the tag name that starts a stanza.   If null, the first tag of the first stanza will be used.
+ * The parentTag if non-NULL will be a tag name used to define the parent of a stanza.
+ * The ignoreOtherStanzas flag if set will ignore stanzas that start with other tags.  
+ * If not set the routine will abort on such stanzas.  The ignoreIndent if set will
+ * use the parentTag (which must be set) to define the hierarchy.  Otherwise the program
+ * will look at the indentation, and if there is a parentTag complain about any
+ * disagreements between indentation and parentTag. */
+
+void metaFree(struct meta **pMeta);
+/* Free up memory associated with a meta. */
+
+void metaFreeForest(struct meta **pForest);
+/* Free up all metas in forest and their children. */ 
+
+void metaFreeList(struct meta **pList);
+/* Free a list of dynamically allocated meta's. Use metaFreeForest to free children too. */
+
+#define META_DEFAULT_INDENT 4	/* Default size for meta indentation */
+
+void metaWriteAll(struct meta *metaList, char *fileName, int indent, boolean withParent);
+/* Write out metadata, including children, optionally adding meta tag.   By convention
+ * for out meta.txt/meta.ra files, indent is 4, withParent is FALSE. */
+
+char *metaLocalTagVal(struct meta *meta, char *tag);
+/* Return value of tag found in this node, not going up to parents. */
+
+char *metaTagVal(struct meta *meta, char *tag);
+/* Return value of tag found in this node or if its not there in parents.
+ * Returns NULL if tag not found. */
+
+void metaAddTag(struct meta *meta, char *tag, char *val);
+/* Add tag/val to meta. */
+
+void metaSortTags(struct meta *meta);
+/* Do canonical sort so that the first tag stays first but the
+ * rest are alphabetical. */
+
+struct hash *metaHash(struct meta *forest);
+/* Return hash of meta at all levels of heirarchy keyed by meta value. */
+
+#endif /* META_H */
diff --git a/gbtools/src/include/blatSrc/metaWig.h b/gbtools/src/include/blatSrc/metaWig.h
new file mode 100644
index 0000000..7856e39
--- /dev/null
+++ b/gbtools/src/include/blatSrc/metaWig.h
@@ -0,0 +1,44 @@
+/* Interface class so that wigs and bigWigs look similar */
+
+#ifndef METAWIG_H
+#define METAWIG_H
+
+#ifndef BBIFILE_H
+#include "bbiFile.h"
+#endif
+
+enum metaWigType 
+    {
+    mwtSections,
+    mwtBigWig,
+    };
+
+struct metaWig
+/* Interface class so that wigs and bigWigs look similar */
+    {
+    struct metaWig *next;
+    enum metaWigType type;
+
+    /* For type mwtSections */
+    struct bwgSection *sectionList;	/* List of all sections. */
+    struct hash *chromHash; 		/* Hash value is first section in that chrom */
+    struct lm *lm;			/* Where sectionList is allocated. */
+
+    /* For type mwtBigWig */
+    struct bbiFile *bwf;
+    };
+
+struct metaWig *metaWigOpen(char *fileName);
+/* Wrap self around file.  Read all of it if it's wig, just header if bigWig. */
+
+void metaWigClose(struct metaWig **pMw);
+/* Close up metaWig file */
+
+struct slName *metaWigChromList(struct metaWig *mw);
+/* Return list of chromosomes covered in wig. */
+
+struct bbiInterval *metaIntervalsForChrom(struct metaWig *mw, char *chrom, struct lm *lm);
+/* Get sorted list of all intervals with data on chromosome. */
+
+#endif /* METAWIG_H */
+
diff --git a/gbtools/src/include/blatSrc/mime.h b/gbtools/src/include/blatSrc/mime.h
new file mode 100644
index 0000000..6ff937c
--- /dev/null
+++ b/gbtools/src/include/blatSrc/mime.h
@@ -0,0 +1,62 @@
+/*****************************************************************************
+ * This file is copyright 2005 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. 
+ *****************************************************************************/
+/* mime.h - parses MIME messages, especially from a cgi from a multipart web form */
+
+#ifndef HASH_H
+#include "hash.h"
+#endif 
+
+#define MIMEBUFSIZE 32*1024  /* size of buffer for mime input */
+
+struct mimePart
+/* structure for an element of a MIME (multipart) message */
+    {
+    struct mimePart *next; /* next (sibling) if is part of multipart */
+    struct hash *hdr;      /* hash of part headers */
+    off_t size;     /* determines if local mem or saved to tempfile */
+      /* only one of the next 3 pointers will be non-null, and that is the type */
+    char* data;     /* if size< MAXPARTSIZE and does not contain null */
+    char* fileName; /* if size>=MAXPARTSIZE or data contains null */
+    boolean binary; /* if contains 0 chars, cannot store as a c-string */
+    struct mimePart *multi;/* points to head of child list if itself contains multiparts */
+    };
+
+struct mimeBuf
+/* structure for buffering a MIME message during parsing */
+    {
+    int d;                  /* descriptor (file,socket,etc) */
+    char buf[MIMEBUFSIZE];  /* actual buffer */
+    char *i;                /* index into buffer, current location */
+    char *eop;              /* end of part or -1 */
+    char *boundary;         /* boundary pattern for marking end of mime part */
+    int  blen;              /* boundary pattern length (strlen) */
+    char *eod;              /* end of data = eoi-(blen-1) */
+    char *eoi;              /* end of input or -1 */
+    char *eom;              /* end of memory just buf+MIMEBUFSIZE */
+    };
+
+char *getMimeHeaderMainVal(char *header);
+/* Parse a typical mime header line returning the first
+ * main value up to whitespace, punctuation, or end. 
+ * freeMem the returned string when done */
+
+char *getMimeHeaderFieldVal(char *header, char *field);
+/* Parse a typical mime header line looking for field=
+ * and return the value which may be quoted.
+ * freeMem the returned string when done */
+
+struct mimeBuf * initMimeBuf(int d);
+/* d is a descriptor for a file or socket or some other descriptor 
+   that the MIME input can be read from. 
+   Initializes the mimeBuf structure. */
+
+struct mimePart *parseMultiParts(struct mimeBuf *b, char *altHeader);
+/* This is a recursive function.  It parses multipart MIME messages.
+   Data that are binary or too large will be saved in mimePart->filename
+   otherwise saved as a c-string in mimePart->data.  If multipart,
+   then first child is mimePart->child, subsequent sibs are in child->next.
+   altHeader is a string of headers that can be fed in if the headers have
+   already been read off the stream by an earlier process, i.e. apache.
+ */
diff --git a/gbtools/src/include/blatSrc/net.h b/gbtools/src/include/blatSrc/net.h
new file mode 100644
index 0000000..b00dea4
--- /dev/null
+++ b/gbtools/src/include/blatSrc/net.h
@@ -0,0 +1,267 @@
+/* Net.h some stuff to wrap around net communications. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+
+#ifndef NET_H
+#define NET_H
+
+#include "linefile.h"
+#include "dystring.h"
+
+#define DEFAULTCONNECTTIMEOUTMSEC 10000  /* default connect timeout for tcp in milliseconds */
+#define DEFAULTREADWRITETTIMEOUTSEC 120  /* default read/write timeout for tcp in seconds */
+
+int setReadWriteTimeouts(int sd, int seconds);
+/* Set read and write timeouts on socket sd 
+ * Return -1 if there are any errors, 0 if successful. */
+
+/* add a failure to connFailures[]
+ *  which can save time and avoid more timeouts */
+int netConnect(char *hostName, int port);
+/* Start connection with a server having resolved port. Return < 0 if error. */
+
+int netMustConnect(char *hostName, int port);
+/* Start connection with server or die. */
+
+int netMustConnectTo(char *hostName, char *portName);
+/* Start connection with a server and a port that needs to be converted to integer */
+
+int netAcceptingSocket(int port, int queueSize);
+/* Create a socket for to accept connections. */
+
+int netAcceptingSocketFrom(int port, int queueSize, char *host);
+/* Create a socket that can accept connections from a 
+ * IP address on the current machine if the current machine
+ * has multiple IP addresses. */
+
+int netAccept(int sd);
+/* Accept incoming connection from socket descriptor. */
+
+int netAcceptFrom(int sd, unsigned char subnet[4]);
+/* Wait for incoming connection from socket descriptor
+ * from IP address in subnet.  Subnet is something
+ * returned from netParseDottedQuad.  */
+
+FILE *netFileFromSocket(int socket);
+/* Wrap a FILE around socket.  This should be fclose'd
+ * and separately the socket close'd. */
+
+int netWaitForData(int sd, int microseconds);
+/* Wait for descriptor to have some data to read, up to given number of
+ * microseconds.  Returns amount of data there or zero if timed out. */
+
+void netBlockBrokenPipes();
+/* Make it so a broken pipe doesn't kill us. */
+
+ssize_t netReadAll(int sd, void *vBuf, ssize_t size);
+/* Read given number of bytes into buffer.
+ * Don't give up on first read! */
+
+ssize_t netMustReadAll(int sd, void *vBuf, ssize_t size);
+/* Read given number of bytes into buffer or die.
+ * Don't give up if first read is short! */
+
+boolean netSendString(int sd, char *s);
+/* Send a string down a socket - length byte first. */
+
+boolean netSendLongString(int sd, char *s);
+/* Send a string down a socket - up to 64k characters. */
+
+boolean netSendHugeString(int sd, char *s);
+/* Send a string down a socket - up to 4G characters. */
+
+char *netRecieveString(int sd, char buf[256]);
+/* Read string into buf and return it.  If buf is NULL
+ * an internal buffer will be used. Abort if any problem. */
+
+char *netRecieveLongString(int sd);
+/* Read string up to 64k and return it.  freeMem
+ * the result when done. Abort if any problem*/
+
+char *netRecieveHugeString(int sd);
+/* Read string up to 4G and return it.  freeMem
+ * the result when done. Abort if any problem*/
+
+char *netGetString(int sd, char buf[256]);
+/* Read string into buf and return it.  If buf is NULL
+ * an internal buffer will be used. Print warning message
+ * and return NULL if any problem. */
+
+char *netGetLongString(int sd);
+/* Read string up to 64k and return it.  freeMem
+ * the result when done.  Print warning message and
+ * return NULL if any problem. */
+
+char *netGetHugeString(int sd);
+/* Read string up to 4 gig and return it.  freeMem
+ * the result when done.  Print warning message and
+ * return NULL if any problem. */
+
+void netCatchPipes();
+/* Set up to catch broken pipe signals. */
+
+boolean netPipeIsBroken();
+/* Return TRUE if pipe is broken */
+
+void  netClearPipeFlag();
+/* Clear broken pipe flag. */
+
+void netParseSubnet(char *in, unsigned char out[4]);
+/* Parse subnet, which is a prefix of a normal dotted quad form.
+ * Out will contain 255's for the don't care bits. */
+
+struct netParsedUrl
+/* A parsed URL. */
+   {
+   char protocol[16];	/* Protocol - http or ftp, etc. */
+   char user[128];	/* User name (optional)  */
+   char password[128];	/* Password  (optional)  */
+   char host[128];	/* Name of host computer - www.yahoo.com, etc. */
+   char port[16];       /* Port, usually 80 or 8080. */
+   char file[1024];	/* Remote file name/query string, starts with '/' */
+   ssize_t byteRangeStart; /* Start of byte range, use -1 for none */
+   ssize_t byteRangeEnd;   /* End of byte range use -1 for none */
+   };
+
+void netParseUrl(char *url, struct netParsedUrl *parsed);
+/* Parse a URL into components.   A full URL is made up as so:
+ *   http://user:password@hostName:port/file;byterange=0-499
+ * User and password may be cgi-encoded.
+ * This is set up so that the http:// and the port are optional. 
+ */
+
+char *urlFromNetParsedUrl(struct netParsedUrl *npu);
+/* Build URL from netParsedUrl structure */
+
+int netUrlOpen(char *url);
+/* Return socket descriptor (low-level file handle) for read()ing url data,
+ * or -1 if error.  Just close(result) when done. Errors from this routine
+ * from web urls are rare, because this just opens up enough to read header,
+ * which may just say "file not found." Consider using netUrlMustOpenPastHeader
+ * instead .*/
+
+int netUrlMustOpenPastHeader(char *url);
+/* Get socket descriptor for URL.  Process header, handling any forwarding and
+ * the like.  Do errAbort if there's a problem, which includes anything but a 200
+ * return from http after forwarding. */
+
+int netUrlOpenSockets(char *url, int *retCtrlSocket);
+/* Return socket descriptor (low-level file handle) for read()ing url data,
+ * or -1 if error. 
+ * If retCtrlSocket is non-NULL and url is FTP, set *retCtrlSocket
+ * to the FTP control socket which is left open for a persistent connection.
+ * close(result) (and close(*retCtrlSocket) if applicable) when done. */
+
+struct hash;
+
+int netUrlHeadExt(char *url, char *method, struct hash *hash);
+/* Go get head and return status.  Return negative number if
+ * can't get head. If hash is non-null, fill it with header
+ * lines with upper cased keywords for case-insensitive lookup,
+ * including hopefully CONTENT-TYPE: . */
+
+int netUrlHead(char *url, struct hash *hash);
+/* Go get head and return status.  Return negative number if
+ * can't get head. If hash is non-null, fill it with header
+ * lines with upper cased keywords for case-insensitive lookup, 
+ * including hopefully CONTENT-TYPE: . */
+
+long long netUrlSizeByRangeResponse(char *url);
+/* Use byteRange as a work-around alternate method to get file size (content-length).  
+ * Return negative number if can't get. */
+
+struct lineFile *netLineFileOpen(char *url);
+/* Return a lineFile attached to url.  This one
+ * will skip any headers.   Free this with
+ * lineFileClose(). */
+
+struct lineFile *netLineFileMayOpen(char *url);
+/* Same as netLineFileOpen, but warns and returns
+ * null rather than aborting on problems. */
+
+struct lineFile *netLineFileSilentOpen(char *url);
+/* Open a lineFile on a URL.  Just return NULL without any user
+ * visible warning message if there's a problem. */
+
+struct dyString *netSlurpFile(int sd);
+/* Slurp file into dynamic string and return.  Result will include http headers and
+ * the like. */
+
+struct dyString *netSlurpUrl(char *url);
+/* Go grab all of URL and return it as dynamic string.  Result will include http headers
+ * and the like. This will errAbort if there's a problem. */
+
+char *netReadTextFileIfExists(char *url);
+/* Read entire URL and return it as a string.  URL should be text (embedded zeros will be
+ * interpreted as end of string).  If the url doesn't exist or has other problems,
+ * returns NULL. Does *not* include http headers. */
+
+struct lineFile *netHttpLineFileMayOpen(char *url, struct netParsedUrl **npu);
+/* Parse URL and open an HTTP socket for it but don't send a request yet. */
+
+void netHttpGet(struct lineFile *lf, struct netParsedUrl *npu,
+		boolean keepAlive);
+/* Send a GET request, possibly with Keep-Alive. */
+
+int netOpenHttpExt(char *url, char *method, char *optionalHeader);
+/* Return a file handle that will read the url.  optionalHeader
+ * may by NULL or may contain cookies and other info. */
+
+int netHttpConnect(char *url, char *method, char *protocol, char *agent, char *optionalHeader);
+/* Parse URL, connect to associated server on port, and send most of
+ * the request to the server.  If specified in the url send user name
+ * and password too.  Typically the "method" will be "GET" or "POST"
+ * and the agent will be the name of your program or
+ * library. optionalHeader may be NULL or contain additional header
+ * lines such as cookie info. 
+ * Proxy support via hg.conf httpProxy or env var http_proxy
+ * Return data socket, or -1 if error.*/
+
+int netHttpGetMultiple(char *url, struct slName *queries, void *userData,
+		       void (*responseCB)(void *userData, char *req,
+					  char *hdr, struct dyString *body));
+/* Given an URL which is the base of all requests to be made, and a 
+ * linked list of queries to be appended to that base and sent in as 
+ * requests, send the requests as a batch and read the HTTP response 
+ * headers and bodies.  If not all the requests get responses (i.e. if 
+ * the server is ignoring Keep-Alive or is imposing a limit), try again 
+ * until we can't connect or until all requests have been served. 
+ * For each HTTP response, do a callback. */
+
+
+boolean netSkipHttpHeaderLinesWithRedirect(int sd, char *url, char **redirectedUrl);
+/* Skip http header lines. Return FALSE if there's a problem.
+ * The input is a standard sd or fd descriptor.
+ * This is meant to be able work even with a re-passable stream handle,
+ * e.g. can pass it to the pipes routines, which means we can't
+ * attach a linefile since filling its buffer reads in more than just the http header.
+ * Handles 300, 301, 302, 303, 307 http redirects by setting *redirectedUrl to
+ * the new location. */
+
+boolean netSkipHttpHeaderLinesHandlingRedirect(int sd, char *url, int *redirectedSd, char **redirectedUrl);
+/* Skip http headers lines, returning FALSE if there is a problem.  Generally called as
+ *    netSkipHttpHeaderLine(sd, url, &sd, &url);
+ * where sd is a socket (file) opened with netUrlOpen(url), and url is in dynamic memory.
+ * If the http header indicates that the file has moved, then it will update the *redirectedSd and
+ * *redirectedUrl with the new socket and URL, first closing sd.
+ * If for some reason you want to detect whether the forwarding has occurred you could
+ * call this as:
+ *    char *newUrl = NULL;
+ *    int newSd = 0;
+ *    netSkipHttpHeaderLine(sd, url, &newSd, &newUrl);
+ *    if (newUrl != NULL)
+ *          // Update sd with newSd, free url if appropriate and replace it with newUrl, etc.
+ *          //  free newUrl when finished.
+ * This routine handles up to 5 steps of redirection.
+ * The logic to this routine is also complicated a little to make it work in a pipe, which means we
+ * can't attach a lineFile since filling the lineFile buffer reads in more than just the http header. */
+
+boolean netGetFtpInfo(char *url, long long *retSize, time_t *retTime);
+/* Return date in UTC and size of ftp url file */
+
+boolean hasProtocol(char *urlOrPath);
+/* Return TRUE if it looks like it has http://, ftp:// etc. */
+#endif /* NET_H */
+
diff --git a/gbtools/src/include/blatSrc/nib.h b/gbtools/src/include/blatSrc/nib.h
new file mode 100644
index 0000000..622a213
--- /dev/null
+++ b/gbtools/src/include/blatSrc/nib.h
@@ -0,0 +1,113 @@
+/*****************************************************************************
+ * Copyright (C) 2000 Jim Kent.  This source code may be freely used         *
+ * for personal, academic, and non-profit purposes.  Commercial use          *
+ * permitted only by explicit agreement with Jim Kent (jim_kent at pacbell.net) *
+ *****************************************************************************/
+/* nib.h - interface to nucleotides stored 4 bits per base (so have
+ * room for N. */
+#ifndef NIB_H
+#define NIB_H
+
+#ifndef DNAUTIL_H
+#include "dnautil.h"
+#endif 
+
+#ifndef HASH_H
+#include "hash.h"
+#endif
+
+/** Options for controlling masking  */
+#define NIB_MASK_MIXED    0x01 /* Read uses case to indicate masking.
+                                * Write sets mask bit for lower-case */
+#define NIB_MASK_MAP      0x02 /* Read builds dnaSeq->mask bit map. Write
+                                * uses mask to set mask bases.  Note: the
+                                * bit map indicates which bases are not repeats
+                                */
+#define NIB_BASE_NAME     0x04 /* Return a sequence name that is the base name
+                                * the file. */
+
+void nibOpenVerify(char *fileName, FILE **retFile, int *retSize);
+/* Open file and verify it's in good nibble format. */
+
+struct dnaSeq *nibLoadPart(char *fileName, int start, int size);
+/* Load part of an .nib file. */
+
+struct dnaSeq *nibLoadPartMasked(int options, char *fileName, int start, int size);
+/* Load part of an .nib file, with control over handling of masked positions */
+
+struct dnaSeq *nibLdPart(char *fileName, FILE *f, int seqSize, int start, int size);
+/* Load part of an open .nib file. */
+
+struct dnaSeq *nibLdPartMasked(int options, char *fileName, FILE *f, int seqSize, int start, int size);
+/* Load part of an open .nib file, with control over handling of masked
+ * positions. */
+
+struct dnaSeq *nibLoadAll(char *fileName);
+/* Load all of a nib file. */
+
+struct dnaSeq *nibLoadAllMasked(int options, char *fileName);
+/* Load part of a .nib file, with control over handling of masked
+ * positions. Subranges of nib files may specified in the file name
+ * using the syntax:
+ *    /path/file.nib:seqid:start-end
+ * or\n"
+ *    /path/file.nib:start-end
+ * With the first form, seqid becomes the id of the subrange, with the second
+ * form, a sequence id of file:start-end will be used.
+ */
+
+void nibWrite(struct dnaSeq *seq, char *fileName);
+/* Write out file in format of four bits per nucleotide. */
+
+void nibWriteMasked(int options, struct dnaSeq *seq, char *fileName);
+/* Write out file in format of four bits per nucleotide, with control over
+ * handling of masked positions. */
+
+boolean nibIsFile(char *fileName);
+/* Return TRUE if file is a nib file. */
+
+boolean nibIsRange(char *fileName);
+/* Return TRUE if file specifies a subrange of a nib file. */
+
+void nibParseName(unsigned options, char *fileSpec, char *filePath,
+                         char *name, unsigned *start, unsigned *end);
+/* Parse the nib name, getting the file name, seq name to use, and
+ * optionally the start and end positions. Zero is return for start
+ * and end if they are not specified. Return the path to the file
+ * and the name to use for the sequence. */
+
+struct nibStream *nibStreamOpen(char *fileName);
+/* Create a new nib stream.  Open file and stuff. */
+
+void nibStreamClose(struct nibStream **pNs);
+/* Close a nib stream.  Flush last nibble if need be.  Fix up header. */
+
+void nibStreamOne(struct nibStream *ns, DNA base);
+/* Write out one base to nibStream. */
+
+void nibStreamMany(struct nibStream *ns, DNA *dna, int size);
+/* Write many bases to nibStream. */
+
+struct nibInfo
+/* Info on a nib file. */
+    {
+    struct nibInfo *next;
+    char *fileName;	/* Name of nib file. */
+    int size;		/* Number of bases in nib. */
+    FILE *f;		/* Open file. */
+    };
+
+struct nibInfo *nibInfoNew(char *path);
+/* Make a new nibInfo with open nib file. */
+
+void nibInfoFree(struct nibInfo **pNib);
+/* Free up nib info and close file if open. */
+
+struct nibInfo *nibInfoFromCache(struct hash *hash, char *nibDir, char *nibName);
+/* Get nibInfo on nibDir/nibName.nib from cache, filling cache if need be. */
+
+int nibGetSize(char* nibFile);
+/* Get the number of nucleotides in a nib */
+
+#endif /* NIB_H */
+
diff --git a/gbtools/src/include/blatSrc/nibTwo.h b/gbtools/src/include/blatSrc/nibTwo.h
new file mode 100644
index 0000000..c9466ce
--- /dev/null
+++ b/gbtools/src/include/blatSrc/nibTwo.h
@@ -0,0 +1,55 @@
+/* nibTwo - Something to let you transparently access either
+ * .2bit or .nib files. */
+
+#ifndef NIBTWO_H
+#define NIBTWO_H
+
+#ifndef NIB_H
+#include "nib.h"
+#endif
+
+#ifndef TWOBIT_H
+#include "twoBit.h"
+#endif
+
+struct nibTwoCache
+/* This is a cache for either a directory full of nib files or a .2bit file. */
+    {
+    struct nibTwoCache *next;	/* Next in list */
+    char *pathName;		/* Nib dir name or .2bit file name. */
+    boolean isTwoBit;		/* True if this is a .2bit file. */
+    struct twoBitFile *tbf;	/* Two bit file handle if any. */
+    struct hash *nibHash;	/* Hash of nibInfo's if any. */
+    };
+
+struct nibTwoCache *nibTwoCacheNew(char *pathName);
+/* Get something that will more or less transparently get sequence from 
+ * nib files or .2bit. */ 
+
+void nibTwoCacheFree(struct nibTwoCache **pNtc);
+/* Free up resources associated with nibTwoCache. */
+
+struct dnaSeq *nibTwoCacheSeq(struct nibTwoCache *ntc, char *seqName);
+/* Return all of sequence. This will have repeats in lower case. */
+
+struct dnaSeq *nibTwoCacheSeqPartExt(struct nibTwoCache *ntc, char *seqName, int start, int size,
+                                     boolean doMask, int *retFullSeqSize);
+/* Return part of sequence. If *retFullSeqSize is non-null then return full
+ * size of sequence (not just loaded part) there.   Sequence will be lower
+ * case if doMask is false, mixed case (repeats in lower)
+ * if doMask is true. */
+
+struct dnaSeq *nibTwoCacheSeqPart(struct nibTwoCache *ntc, char *seqName, 
+	int start, int size, int *retFullSeqSize);
+/* Return part of sequence. If *retFullSeqSize is non-null then return full size of
+ * sequence (not just loaded part) there. This will have repeats in lower case. */
+
+struct dnaSeq *nibTwoLoadOne(char *pathName, char *seqName);
+/* Return sequence from a directory full of nibs or a .2bit file. 
+ * The sequence will have repeats in lower case. */
+
+int nibTwoGetSize(struct nibTwoCache *ntc, char *seqName);
+/* Return size of sequence. */
+
+#endif /* NIBTWO_H */
+
diff --git a/gbtools/src/include/blatSrc/nt4.h b/gbtools/src/include/blatSrc/nt4.h
new file mode 100644
index 0000000..a04e382
--- /dev/null
+++ b/gbtools/src/include/blatSrc/nt4.h
@@ -0,0 +1,45 @@
+/*****************************************************************************
+ * Copyright (C) 2000 Jim Kent.  This source code may be freely used         *
+ * for personal, academic, and non-profit purposes.  Commercial use          *
+ * permitted only by explicit agreement with Jim Kent (jim_kent at pacbell.net) *
+ *****************************************************************************/
+#ifndef NT4_H
+#define NT4_H
+
+#ifndef DNAUTIL_H
+#include "dnautil.h"
+#endif
+
+struct nt4Seq
+/* A packed (2 bits per nucleotide) sequence.  'N's are
+ * converted to 'T's. */
+    {
+    struct nt4Seq *next;	/* Next in list. */
+    bits32 *bases;              /* Packed bases. */
+    int baseCount;              /* Number of bases. */
+    char *name;                 /* Name of sequence. */
+    };
+
+struct nt4Seq *newNt4(DNA *dna, int size, char *name);
+/* Create a new DNA seq with 2 bits per base pair. */
+
+void freeNt4(struct nt4Seq **pSeq);
+/* Free up DNA seq with 2 bits per base pair */
+
+struct nt4Seq *loadNt4(char *fileName, char *seqName);
+/* Load up an nt4 sequence from a file. */
+
+void  saveNt4(char *fileName, DNA *dna, bits32 dnaSize);
+/* Save dna in an NT4 file. */
+
+int nt4BaseCount(char *fileName);
+/* Return number of bases in NT4 file. */
+
+DNA *nt4Unpack(struct nt4Seq *n, int start, int size);
+/* Create an unpacked section of nt4 sequence.  */
+
+DNA *nt4LoadPart(char *nt4FileName, int start, int size);
+/* Load part of an nt4 file. */
+
+#endif /* _4NT_H */
+
diff --git a/gbtools/src/include/blatSrc/obscure.h b/gbtools/src/include/blatSrc/obscure.h
new file mode 100644
index 0000000..0142093
--- /dev/null
+++ b/gbtools/src/include/blatSrc/obscure.h
@@ -0,0 +1,185 @@
+/* Obscure.h  - stuff that's relatively rarely used
+ * but still handy. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#ifndef OBSCURE_H
+#define OBSCURE_H
+
+long incCounterFile(char *fileName);
+/* Increment a 32 bit value on disk. */
+
+int digitsBaseTwo(unsigned long x);
+/* Return base two # of digits. */
+
+int digitsBaseTen(int x);
+/* Return number of digits base 10. */
+
+void sprintLongWithCommas(char *s, long long l);
+/* Print out a long number with commas a thousands, millions, etc. */
+
+void printLongWithCommas(FILE *f, long long l);
+/* Print out a long number with commas a thousands, millions, etc. */
+
+void sprintWithGreekByte(char *s, int slength, long long size);
+/* Numbers formatted with PB, TB, GB, MB, KB, B */
+
+void writeGulp(char *file, char *buf, int size);
+/* Write out a bunch of memory. */
+
+void readInGulp(char *fileName, char **retBuf, size_t *retSize);
+/* Read whole file in one big gulp. */
+
+void readAllWords(char *fileName, char ***retWords, int *retWordCount, char **retBuf);
+/* Read in whole file and break it into words. You need to freeMem both
+ * *retWordCount and *retBuf when done. */
+
+int countWordsInFile(char *fileName);
+/* Count number of words in file. */
+
+struct slName *readAllLines(char *fileName);
+/* Read all lines of file into a list.  (Removes trailing carriage return.) */
+
+void copyFile(char *source, char *dest);
+/* Copy file from source to dest. */
+
+void copyOpenFile(FILE *inFh, FILE *outFh);
+/* copy an open stdio file */
+
+void cpFile(int s, int d);
+/* Copy from source file to dest until reach end of file. */
+
+void *intToPt(int i);
+/* Convert integer to pointer. Use when really want to store an
+ * int in a pointer field. */
+
+int ptToInt(void *pt);
+/* Convert pointer to integer.  Use when really want to store a
+ * pointer in an int. */
+
+void *sizetToPt(size_t i);
+/* Convert size_t to pointer. Use when really want to store a
+ * size_t in a pointer. */
+
+size_t ptToSizet(void *pt);
+/* Convert pointer to size_t.  Use when really want to store a
+ * pointer in a size_t. */
+
+boolean parseQuotedStringNoEscapes( char *in, char *out, char **retNext);
+/* Read quoted string from in (which should begin with first quote).
+ * Write unquoted string to out, which may be the same as in.
+ * Return pointer to character past end of string in *retNext. 
+ * Return FALSE if can't find end.
+ * Unlike parseQuotedString() do not treat backslash as an escape
+ *	character, merely pass it on through.
+ */
+
+boolean parseQuotedString( char *in, char *out, char **retNext);
+/* Read quoted string from in (which should begin with first quote).
+ * Write unquoted string to out, which may be the same as in.
+ * Return pointer to character past end of string in *retNext. 
+ * Return FALSE if can't find end. */
+
+char *nextQuotedWord(char **pLine);
+/* Generalization of nextWord.  Returns next quoted
+ * string or if no quotes next word.  Updates *pLine
+ * to point past word that is returned. Does not return
+ * quotes. */
+
+char *makeQuotedString(char *in, char quoteChar);
+/* Create a string surrounded by quoteChar, with internal
+ * quoteChars escaped.  freeMem result when done. */
+
+char *makeEscapedString(char *in, char toEscape);
+/* Return string that is a copy of in, but with all
+ * toEscape characters preceded by '\' 
+ * When done freeMem result. */
+
+void escCopy(char *in, char *out, char toEscape, char escape);
+/* Copy in to out, escaping as needed.  Out better be big enough. 
+ * (Worst case is strlen(in)*2 + 1.) */
+
+struct slName *stringToSlNames(char *string);
+/* Convert string to a list of slNames separated by
+ * white space, but allowing multiple words in quotes.
+ * Quotes if any are stripped.  */
+
+struct slName *commaSepToSlNames(char *commaSep);
+/* Convert comma-separated list of items to slName list. */
+
+struct slName *charSepToSlNames(char *string, char c);
+/* Convert character-separated list of items to slName list. 
+ * Note that the last occurence of c is optional.  (That
+ * is for a comma-separated list a,b,c and a,b,c, are
+ * equivalent. */
+
+struct hash *hashVarLine(char *line, int lineIx);
+/* Return a symbol table from a line of form:
+ *   var1=val1 var2='quoted val2' var3="another val" */
+
+struct hash *hashThisEqThatLine(char *line, int lineIx, boolean firstStartsWithLetter);
+/* Return a symbol table from a line of form:
+ *   1-this1=val1 2-this='quoted val2' var3="another val" 
+ * If firstStartsWithLetter is true, then the left side of the equals must start with
+ * and equals. */
+
+struct hash *hashWordsInFile(char *fileName, int hashSize);
+/* Create a hash of space delimited words in file. 
+ * hashSize is as in hashNew() - pass 0 for default. */
+
+struct hash *hashNameIntFile(char *fileName);
+/* Given a two column file (name, integer value) return a
+ * hash keyed by name with integer values */
+
+struct hash *hashTwoColumnFile(char *fileName);
+/* Given a two column file (key, value) return a hash. */
+
+void shuffleArrayOfChars(char *array, int arraySize);
+/* Shuffle array of characters of given size given number of times. */
+
+void shuffleArrayOfInts(int *array, int arraySize);
+/* Shuffle array of ints of given size given number of times. */
+
+void shuffleArrayOfPointers(void *pointerArray, int arraySize);
+/* Shuffle array of pointers of given size given number of times. */
+
+void shuffleList(void *pList);
+/* Randomize order of slList.  Usage:
+ *     shuffleList(&list)
+ * where list is a pointer to a structure that
+ * begins with a next field. */
+
+void *slListRandomReduce(void *list, double reduceRatio);
+/* Reduce list to approximately reduceRatio times original size. Destroys original list. */
+
+void *slListRandomSample(void *list, int maxCount);
+/* Return a sublist of list with at most maxCount. Destroy list in process */
+
+char *stripCommas(char *position);
+/* make a new string with commas stripped out */
+
+void dotForUserInit(int dotMod);
+/* Set how often dotForUser() outputs a dot. */
+
+void dotForUser();
+/* Write out a dot every _dotForUserMod times this is called. */
+
+void spaceToUnderbar(char *s);
+/* Convert white space to underbar. */
+
+void rangeRoundUp(double start, double end, double *retStart, double *retEnd);
+/* Round start and end so that they cover a slightly bigger range, but with more round
+ * numbers.  For instance 0.23:9.89 becomes 0:10 */
+
+void rangeFromMinMaxMeanStd(double minVal, double maxVal, double mean, double std,
+	double *retStart, double *retEnd);
+/* Given some basic statistical properties, set a range that will be good on a wide
+ * range of biological data. */
+
+void printVmPeak();
+/* print to stderr peak Vm memory usage (if /proc/ business exists) */
+
+boolean nameInCommaList(char *name, char *commaList);
+/* Return TRUE if name is in comma separated list. */
+#endif /* OBSCURE_H */
diff --git a/gbtools/src/include/blatSrc/oldGff.h b/gbtools/src/include/blatSrc/oldGff.h
new file mode 100644
index 0000000..550e9cc
--- /dev/null
+++ b/gbtools/src/include/blatSrc/oldGff.h
@@ -0,0 +1,103 @@
+/*****************************************************************************
+ * Copyright (C) 2000 Jim Kent.  This source code may be freely used         *
+ * for personal, academic, and non-profit purposes.  Commercial use          *
+ * permitted only by explicit agreement with Jim Kent (jim_kent at pacbell.net) *
+ *****************************************************************************/
+/* oldGff.h - This reads a *special* type of .GFF file.  
+ * Some of the routines herein expect the gff file to include
+ * both DNA and gene/intron/exon info.  They expect the
+ * genes to be named by the group field. */
+#ifndef OLDGFF_H
+#define OLDGFF_H
+
+struct gff
+/* This is the structure that holds info on a gff file.
+ */
+    {
+    char fileName[256];
+    FILE *file;
+    long fileSize;
+    char buf[256];
+    int bufSize;
+    int bytesInBuf;
+    int readIx;
+    int lineNumber;
+    struct lm *memPool;
+    char *dna;
+    long dnaSize;
+    char dnaName[128];
+    struct gffGene *genes;
+    };
+
+/* An intron or exon - just an offset into a DNA array. */
+struct gffSegment
+    {
+    struct gffSegment *next;	/* This must be first field! */
+    long start, end;
+    int frame;
+    };
+typedef struct gffSegment GffIntron;
+typedef struct gffSegment GffExon;
+
+struct gffGene
+/* At the end of a GFF file are a number of genes, each of which 
+ * is a list of exons/introns. */
+    {
+    struct gffGene *next;	/* This must be first field! */
+    long start, end;
+    int frame;
+    char strand;	/* + or - */
+    char name[64];
+    GffExon *exons;
+    GffIntron *introns;
+    DNA *dna;
+    long dnaSize;
+    };
+
+
+boolean gffOpen(struct gff *gff, char *fileName);
+/* Initialize gff structure and open file for it. */
+
+boolean gffOpenAndRead(struct gff *gff, char *fileName);
+/* Open up gff file and read everything in it. */
+
+void gffClose(struct gff *gff);
+/* Close down gff structure. */
+
+boolean gffReadDna(struct gff *gff);
+/* Read all the DNA in a file. */
+
+struct gffGene *gffFindGene(struct gff *gff, char *geneName);
+/* Find gene with given name.  Case sensitive. */
+
+struct gffGene *gffFindGeneIgnoreCase(struct gff *gff, char *geneName);
+/* Find gene with given name.  Not case sensitive. */
+
+void gffPrintInfo(struct gff *gff, FILE *out);
+/* Print summary info about file. */
+
+boolean gffReadGenes(struct gff *gff);
+/* Read all the gene (as opposed to base) info in file. */
+
+struct gffGene *gffDupeGene(struct gff *gff, struct gffGene *oldGene);
+/* Make a duplicate of gene (with it's own DNA). gffFreeGene it when done. */
+
+struct gffGene *gffDupeGeneAndSurrounds(struct gff *gff, struct gffGene *oldGene,
+    int leftExtra, int rightExtra);
+/* Make a duplicate of gene with extra DNA around coding region. 
+ * gffFreeGene it when done. */
+
+struct gffGene *gffGeneWithOwnDna(struct gff *gff, char *geneName);
+/* Find gene with given name.  Case sensitive. */
+
+void gffFreeGene(struct gffGene **pGene);
+/* Free a gene returned with dupeGene or geneWithOwnDna. 
+ * (You don't want to free the ones returned by findGene,
+ * they are still owned by the gff.)
+ */
+
+struct dnaSeq *gffReadDnaSeq(char *fileName);
+/* Open gff file and read DNA sequence from it. */
+
+#endif /* GFF_H */
+
diff --git a/gbtools/src/include/blatSrc/oligoTm.h b/gbtools/src/include/blatSrc/oligoTm.h
new file mode 100644
index 0000000..d2490bd
--- /dev/null
+++ b/gbtools/src/include/blatSrc/oligoTm.h
@@ -0,0 +1,98 @@
+/* oligoTm - calculate melting temperature of relatively short DNA sequences.
+ * This is based on the nearest-neighbor thermodynamics of bases from Breslauer,
+ * Frank, Bloecker, and Markey, Proc. Natl. Acad. Sci. USA, vol 83, page 3748,
+ * and uses work from see Rychlik, Spencer, Roads, Nucleic Acids Research, vol 18, 
+ * no 21.  This code was imported from the oligotm module of Whitehead Institute's
+ * primer3 program, and adapted into UCSC conventions by Jim Kent.  Any redistribution
+ * of this code should contain the following copyright notice from Whitehead:
+ *
+ * Copyright (c) 1996,1997,1998,1999,2000,2001,2004
+ *         Whitehead Institute for Biomedical Research. All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * 
+ * 1.      Redistributions 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.  Redistributions of
+ * source code must also reproduce this information in the source code itself.
+ * 
+ * 2.      If the program is modified, redistributions must include a notice
+ * (in the same places as above) indicating that the redistributed program is
+ * not identical to the version distributed by Whitehead Institute.
+ * 
+ * 3.      All advertising materials mentioning features or use of this
+ * software  must display the following acknowledgment:
+ *         This product includes software developed by the
+ *         Whitehead Institute for Biomedical Research.
+ * 
+ * 4.      The name of the Whitehead Institute may not be used to endorse or
+ * promote products derived from this software without specific prior written
+ * permission.
+ * 
+ * We also request that use of this software be cited in publications as 
+ * 
+ *   Rozen, S., Skaletsky, H.  \"Primer3 on the WWW for general users
+ *   and for biologist programmers.\"  In S. Krawetz and S. Misener, eds.
+ *   Bioinformatics Methods and Protocols in the series Methods in 
+ *   Molecular Biology.  Humana Press, Totowa, NJ, 2000, pages 365-386.
+ *   Code available at
+ *   http://fokker.wi.mit.edu/primer3/.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE WHITEHEAD INSTITUTE ``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 WHITEHEAD INSTITUTE 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. */
+
+#ifndef OLIGOTM_H
+#define OLIGOTM_H
+
+double oligoTm(char *dna, double DNA_nM, double K_mM);
+/* Calculate melting point of short DNA sequence given DNA concentration in 
+ * nanomoles, and salt concentration in millimoles.  This is calculated using eqn
+ * (ii) in Rychlik, Spencer, Roads, Nucleic Acids Research, vol 18, no 21, page
+ * 6410, with tables of nearest-neighbor thermodynamics for DNA bases as
+ * provided in Breslauer, Frank, Bloecker, and Markey,
+ * Proc. Natl. Acad. Sci. USA, vol 83, page 3748. */
+
+double oligoDg(char *dna);
+/* Calculate dg (change in Gibb's free energy) from melting oligo
+ * the nearest neighbor model. Seq should be relatively short, given 
+ * the characteristics of the nearest neighbor model (36 bases or less
+ * is best). */
+
+double longSeqTm(char *s, int start, int len, double salt_conc);
+/* Calculate the melting temperature of substr(seq, start, length) using the
+ * formula from Bolton and McCarthy, PNAS 84:1390 (1962) as presented in
+ * Sambrook, Fritsch and Maniatis, Molecular Cloning, p 11.46 (1989, CSHL
+ * Press).
+ *
+ * Tm = 81.5 + 16.6(log10([Na+])) + .41*(%GC) - 600/length
+ *
+ * Where [Na+] is the molar sodium concentration, (%GC) is the percent of Gs
+ * and Cs in the sequence, and length is the length of the sequence.
+ *
+ * A similar formula is used by the prime primer selection program in GCG
+ * (http://www.gcg.com), which instead uses 675.0 / length in the last term
+ * (after F. Baldino, Jr, M.-F. Chesselet, and M.E.  Lewis, Methods in
+ * Enzymology 168:766 (1989) eqn (1) on page 766 without the mismatch and
+ * formamide terms).  The formulas here and in Baldino et al. assume Na+ rather
+ * than K+.  According to J.G. Wetmur, Critical Reviews in BioChem. and
+ * Mol. Bio. 26:227 (1991) 50 mM K+ should be equivalent in these formulae to .2
+ * M Na+.
+ *
+ * This function takes salt_conc to be the millimolar (mM) concentration,
+ * since mM is the usual units in PCR applications.  */
+
+double seqTm(char *seq, double dna_conc, double salt_conc);
+/* Figure out melting temperature of sequence of any length given
+ * dna and salt concentration. */
+#endif /* OLIGOTM_H */
+
diff --git a/gbtools/src/include/blatSrc/ooc.h b/gbtools/src/include/blatSrc/ooc.h
new file mode 100644
index 0000000..5b0bd9b
--- /dev/null
+++ b/gbtools/src/include/blatSrc/ooc.h
@@ -0,0 +1,16 @@
+/* ooc.h - Stuff to handle overused N-mers (tiles) in genome
+ * indexing schemes. */
+/* Copyright 2001-2002 Jim Kent.  All rights reserved. */
+
+#ifndef OOC_H
+#define OOC_H
+
+void oocMaskCounts(char *oocFile, bits32 *tileCounts, int tileSize, bits32 maxPat);
+/* Set items of tileCounts to maxPat if they are in oocFile. 
+ * Effectively masks this out of index.*/
+
+void oocMaskSimpleRepeats(bits32 *tileCounts, int seedSize, bits32 maxPat);
+/* Mask out simple repeats in index . */
+
+#endif /* OOC_H */
+
diff --git a/gbtools/src/include/blatSrc/options.h b/gbtools/src/include/blatSrc/options.h
new file mode 100644
index 0000000..7a385a7
--- /dev/null
+++ b/gbtools/src/include/blatSrc/options.h
@@ -0,0 +1,100 @@
+/* Stuff to process options out of command line. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#ifndef OPTIONS_H
+#define OPTIONS_H
+
+#include "common.h"
+
+/* Types for options */
+#define OPTION_BOOLEAN    0x01
+#define OPTION_STRING     0x02
+#define OPTION_INT        0x04
+#define OPTION_FLOAT      0x10
+#define OPTION_LONG_LONG  0x20
+#define OPTION_MULTI      0x40
+#define OPTION_DOUBLE	  0x80
+
+/* Mask for option types (excluding OPTION_MULTI) */
+#define OPTION_TYPE_MASK (OPTION_BOOLEAN|OPTION_STRING|OPTION_INT|OPTION_FLOAT|OPTION_LONG_LONG|OPTION_DOUBLE)
+
+struct optionSpec
+/* Specification of a single option.  An array of these are passed
+ * to optionInit() to validate options. */
+{
+    char *name;      /* option name */
+    unsigned flags;  /* Flags for option, specifies types */
+};
+
+char *optionVal(char *name, char *defaultVal);
+/* Return named option if in options hash, otherwise default. */
+
+int optionInt(char *name, int defaultVal);
+/* Return integer value of named option, or default value
+ * if not set. */
+
+long long optionLongLong(char *name, long long defaultVal);
+/* Return long long value of named option, or default value
+ * if not set. */
+
+float optionFloat(char *name, float defaultVal);
+/* Return floating point value or default value if not set. */
+
+struct slName *optionMultiVal(char *name, struct slName *defaultVal);
+/* Returns a list of the values assocated with a named option if in options hash, otherwise default. */
+
+double optionDouble(char *name, double defaultVal);
+/* Return double value or default value if not set */
+
+boolean optionExists(char *name);
+/* Return TRUE if option has been set. */
+
+void optionMustExist(char *name);
+/* Abort if option has not been set. */
+
+void optionInit(int *pArgc, char *argv[], struct optionSpec *optionSpecs);
+/* Read options in command line into options hash.
+ * Options come in three forms:
+ *      -option         words starting with dash
+ *      option=val      words with = in the middle
+ *      -option=val     combining the two.
+ * The resulting hash will be keyed by the option name with the val
+ * string for value.  For '-option' types the value is 'on'.
+ * The words in argv are parsed in assending order.  If a word of
+ * "--" is encountered, argument parsing stops.
+ * If optionSpecs is not NULL, it is an array of optionSpec that are
+ * used to validate the options.  An option must exist in the array
+ * and the value must be convertable to the type specified in flags.
+ * Boolean options have must no value, all other options must have one.
+ * Array is terminated by a optionSpec with a NULL name.
+ * If array NULL, no validation is done.
+ */
+
+void optionHash(int *pArgc, char *argv[]);
+/* Read options in command line into options hash.   
+ * Options come in three forms:
+ *      -option         words starting with dash
+ *      option=val      words with = in the middle
+ *      -option=val     combining the two.
+ * The resulting hash will be keyed by the option name with the val
+ * string for value.  For '-option' types the value is 'on'.
+ * The words in argv are parsed in assending order.  If a word of
+ * "--" is encountered, argument parsing stops. */
+
+void optionHashSome(int *pArgc, char *argv[], boolean justFirst);
+/* Set up option hash from command line, optionally only adding
+ * up to first non-optional word. */
+
+struct hash *optionParseIntoHash(int *pArgc, char *argv[], boolean justFirst);
+/* Read options in argc/argv into a hash of your own choosing. */
+
+struct hash *optionParseIntoHashExceptNumbers(int *pArgc, char *argv[], boolean justFirst);
+/* Read options in argc/argv into a hash (except negative numbers) of your own choosing. */
+
+void optionFree();
+/* free the option hash */
+
+#endif /* OPTIONS_H */
+
diff --git a/gbtools/src/include/blatSrc/pairDistance.h b/gbtools/src/include/blatSrc/pairDistance.h
new file mode 100644
index 0000000..4dc9280
--- /dev/null
+++ b/gbtools/src/include/blatSrc/pairDistance.h
@@ -0,0 +1,31 @@
+/* pairDistance - help manage systems where you have a list of distances between pairs of
+ * elements */
+
+#ifndef PAIRDISTANCE_H
+#define PAIRDISTANCE_H
+
+struct pairDistance
+/* A pair of items and the distance between them. */
+    {
+    struct pairDistance *next;
+    char *a;	/* First in pair */
+    char *b;	/* Second in pair */
+    double distance;  /* Distance between two */
+    };
+
+struct pairDistance *pairDistanceReadAll(char *fileName);
+/* Read in file of format <a> <b> <distance> into list of pairs */
+
+struct hash *pairDistanceHashList(struct pairDistance *pairList);
+/* Return hash of all pairs keyed by pairName function on pair with pair values */
+
+double pairDistanceHashLookup(struct hash *pairHash, char *aName, char *bName);
+/* Return distance between a and b. */
+
+void pairDistanceInvert(struct pairDistance *list);
+/* Go through and reverse distances, and make them positive. */
+
+char *pairDistanceName(char *a, char *b, char *outBuf, int outBufSize);
+/* Return name for pair */
+
+#endif /* PAIRDISTANCE_H */
diff --git a/gbtools/src/include/blatSrc/pairHmm.h b/gbtools/src/include/blatSrc/pairHmm.h
new file mode 100644
index 0000000..a054006
--- /dev/null
+++ b/gbtools/src/include/blatSrc/pairHmm.h
@@ -0,0 +1,94 @@
+/* pairHmm - stuff to help implement pairwise hidden markov models,
+ * which are useful ways of aligning two sequences. 
+ *
+ * This file is copyright 2000-2004 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#ifndef PAIRHMM_H
+#define PAIRHMM_H
+
+/* Mommy coding scheme - this is how one cell in the dynamic programming table
+ * points to it's parent (mommy) cell.  Since these tables are really big,
+ * rather than use a simple pointer costing four bytes, we use a encoding
+ * scheme that requires only one byte. 
+ *
+ * Bits 0-4  the "hidden" state of the mommy.  Lets us have 32 hidden states.
+ *           currently only using 7.
+ * Bit  5    whether or not mommy is in previous cell in query
+ * Bit  6    whether or not mommy is in previous cell in target
+ * Bit  7    set during trace back for cells along optimal path
+ *
+ * Since the query and target advancing bits (5 and 6) are never both zero,
+ * it is safe to use the value of all-bits-zero as an indicator of
+ * no mommy. */
+
+/* Compress state, query, and target offset into one byte. */
+#define phmmPackMommy(stateIx, qOff, tOff) ((UBYTE)((stateIx) + ((-(qOff))<<5) + ((-(tOff))<<6)))
+
+/* Traceback sets this, really just for debugging. */
+#define phmmMommyTraceBit (1<<7)
+
+struct phmmMommy
+/* This contains the parent info for a single state of the matrix. */
+    {
+    UBYTE mommy; /* Unlike a parent, you can only have one mommy! */
+    };
+
+extern UBYTE phmmNullMommy; /* mommy value for orphans.... */
+
+struct phmmState
+/* This corresponds to a hidden Markov state.  Each one of
+ * these has a two dimensional array[targetSize+1][querySize+1]
+ * of cells. */
+    {
+    struct phmmMommy *cells;	/* The 2-D array containing traceback info. */
+    int *scores;		/* Scores for the current row. */
+    int *lastScores;		/* Scores for the previous row. */
+    int stateIx;		/* Numerical handle on state. */
+    char *name;			/* Name of state. */
+    char emitLetter;		/* Single letter representing state. */
+    };
+
+struct phmmMatrix
+/* The alignment matrix - has an array of states. */
+    {
+    char *query;	/* One sequence to align- all lower case. */
+    char *target;    	/* Other sequence to align. */
+    int querySize;	/* Size of query. */
+    int targetSize;	/* Size of target. */
+    int qDim;		/* One plus size of query - dimension of matrix. */
+    int tDim;		/* One plus size of target - dimension of matrix. */
+    int stateCount;	/* Number of hidden states in HMM. */
+    int stateSize;	/* Number of cells in each state's matrix. */
+    int stateByteSize;	/* Number of bytes used by each state's matrix. */
+    struct phmmState *states;  /* Array of states. */
+    struct phmmMommy *allCells; /* Memory for all matrices. */
+    int *allScores;	      /* Memory for two rows of scores. */
+    };
+
+struct phmmMatrix *phmmMatrixNew(int stateCount,
+    char *query, int querySize, char *target, int targetSize);
+/* Allocate all memory required for an phmmMatrix. Set up dimensions. */
+
+void phmmMatrixFree(struct phmmMatrix **pAm);
+/* Free up memory required for an phmmMatrix and make sure
+ * nobody reuses it. */
+
+struct phmmState *phmmNameState(struct phmmMatrix *am, int stateIx, 
+	char *name, char emitLetter);
+/* Give a name to a state and return a pointer to it. */
+
+struct phmmAliPair *phmmTraceBack(struct phmmMatrix *am, struct phmmMommy *end);
+/* Create list of alignment pair by tracing back through matrix from end
+ * state back to a start.*/
+
+void phmmPrintTrace(struct phmmMatrix *am, struct phmmAliPair *pairList, 
+	boolean showStates, FILE *f, boolean extraAtEnds);
+/* Print out trace to file. */
+
+struct axt *phhmTraceToAxt(struct phmmMatrix *am, struct phmmAliPair *pairList, 
+	int score, char *qName, char *tName);
+/* Convert alignment from traceback format to axt. */
+
+#endif /* PAIRHMM_H */
+
diff --git a/gbtools/src/include/blatSrc/paraFetch.h b/gbtools/src/include/blatSrc/paraFetch.h
new file mode 100644
index 0000000..2b096d0
--- /dev/null
+++ b/gbtools/src/include/blatSrc/paraFetch.h
@@ -0,0 +1,41 @@
+/* paraFetch - fetch things from remote URLs in parallel. */
+
+#ifndef PARAFETCH_H
+#define PARAFETCH_H
+
+boolean parallelFetch(char *url, char *outPath, int numConnections, int numRetries, boolean newer, boolean progress);
+/* Open multiple parallel connections to URL to speed downloading */
+
+boolean parallelFetchInterruptable(char *url, char *outPath, int numConnections, int numRetries, 
+    boolean newer, boolean progress,
+    boolean (*interrupt)(void *context),  void *context);
+/* Open multiple parallel connections to URL to speed downloading.  If interrupt function 
+ * is non-NULL,  then it gets called passing the context parameter,  and if it returns
+ * TRUE the fetch is interrupted. */
+
+void parallelFetchRemovePartial(char *destName);
+/* Remove any files associated with partial downloads of file of given name. 
+ * This is needed after a FALSE return from parallelFetch or parallelFetchInterruptable
+ * unless you want to leave temp file there to try to restart. */
+
+struct parallelConn
+/* struct to information on a parallel connection */
+    {
+    struct parallelConn *next;  /* next connection */
+    int sd;                     /* socket descriptor */
+    off_t rangeStart;           /* where does the range start */
+    off_t partSize;             /* range size */
+    off_t received;             /* bytes received */
+    };
+
+boolean paraFetchReadStatus(char *origPath, 
+    struct parallelConn **pPcList, char **pUrl, off_t *pFileSize, 
+    char **pDateString, off_t *pTotalDownloaded);
+/* Read a status file - which is just origPath plus .paraFetchStatus.  This is updated during 
+ * transit by parallelFetch. Returns FALSE if status file not there - possibly because
+ * transfer is finished.  Any of the return parameters (pThis and pThat) may be NULL */
+
+time_t paraFetchTempUpdateTime(char *origPath);
+/* Return last mod date of temp file - which is useful to see if process has stalled. */
+
+#endif /* PARAFETCH_H */
diff --git a/gbtools/src/include/blatSrc/patSpace.h b/gbtools/src/include/blatSrc/patSpace.h
new file mode 100644
index 0000000..03a0ccd
--- /dev/null
+++ b/gbtools/src/include/blatSrc/patSpace.h
@@ -0,0 +1,48 @@
+/*****************************************************************************
+ * Copyright (C) 2000 Jim Kent.  This source code may be freely used         *
+ * for personal, academic, and non-profit purposes.  Commercial use          *
+ * permitted only by explicit agreement with Jim Kent (jim_kent at pacbell.net) *
+ *****************************************************************************/
+/* patSpace - a homology finding algorithm that occurs mostly in 
+ * pattern space (as opposed to offset space). */
+
+#ifndef PATSPACE_H
+#define PATSPACE_H
+
+#ifndef DNASEQ_H
+#include "dnaseq.h"
+#endif
+
+struct patSpace *makePatSpace(
+    struct dnaSeq **seqArray,       /* Array of sequence lists. */
+    int seqArrayCount,              /* Size of above array. */
+    int seedSize,	            /* Alignment seed size - 10 or 11. Must match oocFileName */
+    char *oocFileName,              /* File with tiles to filter out, may be NULL. */
+    int minMatch,                   /* Minimum # of matching tiles.  4 is good. */
+    int maxGap                      /* Maximum gap size - 32k is good for 
+                                       cDNA (introns), 500 is good for DNA assembly. */
+    );
+/* Allocate a pattern space and fill from sequences.  (Each element of
+   seqArray is a list of sequences. */
+
+void freePatSpace(struct patSpace **pPatSpace);
+/* Free up a pattern space. */
+
+struct patClump
+/* This holds pattern space output - a list of homologous clumps. */
+    {
+    struct patClump *next;     /* Link to next in list. */
+    int bacIx;                 /* Index of .fa file where hit occurs. */
+    int seqIx;                 /* Index of contig where hit occurs. */
+    struct dnaSeq *seq;        /* Sequence in which hit occurs. */
+    int start;                 /* Start offset within sequence. */
+    int size;                  /* Size of block within sequence. */
+    };
+
+struct patClump *patSpaceFindOne(struct patSpace *ps, DNA *dna, int dnaSize);
+/* Find occurrences of DNA in patSpace. The resulting list can be
+ * freed with slFreeList. */
+
+
+#endif /* PATSPACE_H */
+
diff --git a/gbtools/src/include/blatSrc/peakCluster.h b/gbtools/src/include/blatSrc/peakCluster.h
new file mode 100644
index 0000000..e65823a
--- /dev/null
+++ b/gbtools/src/include/blatSrc/peakCluster.h
@@ -0,0 +1,98 @@
+/* peakCluster - cluster peak calls from different sources. */
+
+#ifndef PEAKCLUSTER_H
+#define PEAKCLUSTER_H
+
+struct peakDim
+/* A peak dimension */
+    {
+    int colIx;		/* Column index in table. */
+    char *label;	/* Label */
+    };
+
+struct peakSource 
+/* A source of peak information */
+    {
+    struct peakSource *next;
+    char *dataSource;		/* File (or table) */
+    int chromColIx;		/* Chromosome column index. */
+    int startColIx;		/* Start coordinate column index. */
+    int endColIx;		/* End ccoordinate column ix. */
+    int scoreColIx;		/* Index for score column. */
+    double normFactor;		/* Multiply this to get browser score. */
+    char **labels;		/* Label for each dimension */
+    int minColCount;		/* Minimum number of columns. */
+    };
+
+struct peakItem
+/* An item in a peak track */
+    {
+    struct peakItem *next;
+    char *chrom;		/* Chromosome. Not allocated here. */
+    int chromStart,chromEnd;	/* Half open coordinates. */
+    double score;		/* Ideally something like -log(p). */
+    struct peakSource *source;   /* Source track/file for item. */
+    char *asciiLine;		/* Ascii representation of line. */
+    };
+
+struct peakCluster
+/* A cluster of items. */
+    {
+    struct peakCluster *next;
+    char *chrom;		/* Chromosome.  Not allocated here. */
+    int chromStart, chromEnd;	/* Half open coordinates. */
+    double score;		/* Sum of component scores. */
+    double maxSubScore;		/* Max of component scores. */
+    struct slRef *itemRefList;	/* List of references to component items. */
+    };
+
+struct peakClusterMaker
+/* Help make a cluster of peaks on multiple-chromosome data sets. */
+    {
+    struct peakClusterMaker *next;
+    struct hash *chromHash;	   /* Key is chromosome, value is a rbTree of items. */
+    struct rbTreeNode *stack[128]; /* Stack for rbTree evaluations. */
+    };
+
+struct peakClusterMaker *peakClusterMakerNew();
+/* Return a new peakClusterMaker. */
+
+void peakClusterMakerFree(struct peakClusterMaker **pMaker);
+/* Free up a peakClusterMaker. */
+
+struct hashEl *peakClusterMakerChromList(struct peakClusterMaker *maker);
+/* Return list of chromosomes.  In hashEl format where the hashEl val is
+ * a rangeTree filled with items. Do a slFreeList when done. */
+
+struct peakSource *peakSourceLoadAll(char *fileName, int dimCount);
+/* Read file, parse it line by line and return list of peakSources. */
+
+void peakClusterMakerAddFromSource(struct peakClusterMaker *maker, struct peakSource *source);
+/* Read through data source and add items to it to rangeTrees in maker */
+
+struct peakCluster *peakClusterItems(struct lm *lm, struct peakItem *itemList, 
+	double forceJoinScore, double weakLevel);
+/* Convert a list of items to a list of clusters of items.  This may break up clusters that
+ * have weakly linked parts. 
+      [                ]
+      AAAAAAAAAAAAAAAAAA 
+       BBBBBB   DDDDDD
+        CCCC     EEEE
+   gets tranformed into
+       [    ]   [    ]
+      AAAAAAAAAAAAAAAAAA 
+       BBBBBB   DDDDDD
+        CCCC     EEEE
+   The strategy is to build a rangeTree of coverage, which might look something like so:
+      123333211123333211 
+   then define cluster ends that exceed the minimum limit, which is either 10% of the highest
+   or forceJoinScore if 10% of the highest is more than forceJoinScore.  This will go to
+   something like so:
+        [---]   [----]   
+   Finally the items that are overlapping a cluster are assigned to it.  Note that this
+   may mean that an item may be in multiple clusters.
+        [ABC]   [ ADE]
+ */
+
+#endif /* PEAKCLUSTER_H */
+
diff --git a/gbtools/src/include/blatSrc/phyloTree.h b/gbtools/src/include/blatSrc/phyloTree.h
new file mode 100644
index 0000000..70ad89a
--- /dev/null
+++ b/gbtools/src/include/blatSrc/phyloTree.h
@@ -0,0 +1,77 @@
+/* phlyogenetic trees */
+
+
+#ifndef PHYLOTREE_H
+#define PHYLOTREE_H
+
+#include "linefile.h"
+
+struct phyloName
+{
+    char *name;		/* name of this node */
+    double length;	/* length of the branch to this node */
+};
+
+struct phyloTree
+{
+    struct phyloTree *next;		/* next in single linked list */
+    struct phyloTree *parent;		/* the parent of this node */
+    struct phyloTree **edges;
+    struct phyloName *ident;		/* the name and branch length */
+    struct phyloTree *mark;		/* probably the favorite child */
+    bool isDup;				/* is this a duplication node */
+    int numEdges;
+    int allocedEdges;
+
+    void *priv;
+};
+
+extern struct phyloTree *phyloOpenTree(char *fileName);
+/* opens an NH tree file */
+
+extern struct phyloTree *phyloReadTree(struct lineFile *lf);
+/* reads a phyloTree from lineFile (first line only) */
+
+extern struct phyloTree *phyloParseString(char *string);
+/* build a phyloTree from a string */
+
+extern void phyloPrintTree( struct phyloTree *,FILE *f);
+/* print a phyloTree to f in Newick format */
+
+extern void phyloDebugTree( struct phyloTree *,FILE *f);
+/* print a phyloTree to f */
+
+extern char *phyloFindPath(struct phyloTree *tree, char *ref, char *cross);
+/* find the shortest path from ref to cross (returns a list
+ * of the node names separated by spaces */
+
+extern char *phyloNodeNames(struct phyloTree *tree);
+/* return list of all the node names separated by spaces */
+
+extern struct phyloTree *phyloFindName( struct phyloTree *tree,char *name );
+/* find the node with this name */
+
+extern struct phyloTree *phyloReRoot(struct phyloTree *inTree);
+/* return a tree whose root is inTree and what were parents are now "right" children */
+
+extern void phyloDeleteEdge(struct phyloTree *tree, struct phyloTree *edge);
+/* delete an edge from a node.  Aborts on error */
+
+extern struct phyloTree *phyloAddEdge(struct phyloTree *parent, struct phyloTree *child);
+/* add an edge to a phyloTree node */
+
+extern void phyloClearTreeMarks(struct phyloTree *tree);
+/* clear the favorite child marks */
+
+extern struct phyloTree *phyloFindMarkUpTree(struct phyloTree *tree);
+/* find a marked node somewhere above this node */
+
+extern void phyloMarkUpTree(struct phyloTree *tree);
+/* mark all the nodes from this one up to the top of the tree */
+
+extern void phyloPrintTreeNoDups( struct phyloTree *tree,FILE *f);
+/* print out phylogenetic tree in Newick format (only speciation nodes) */
+
+extern int phyloCountLeaves( struct phyloTree *tree);
+
+#endif
diff --git a/gbtools/src/include/blatSrc/pipeline.h b/gbtools/src/include/blatSrc/pipeline.h
new file mode 100644
index 0000000..27f6f37
--- /dev/null
+++ b/gbtools/src/include/blatSrc/pipeline.h
@@ -0,0 +1,157 @@
+/* pipeline.h - create a process pipeline that can be used for reading or
+ * writing.  These pipeline objects don't go through the shell, so they
+ * avoid many of the obscure problems associated with system() and popen().
+ *
+ * Read pipelines are pipelines where a program reads output written by the
+ * pipeline, and write pipelines are where the program writes data to the
+ * pipeline.  The type of pipeline is specified in the set of option flags
+ * passed to pipelineOpen().  The file at the other end of the pipeline is
+ * specified in the otherEndFile argument of pipelineOpen(), as shown here:
+ *
+ * pipelineRead:
+ *
+ *   otherEndFile --> cmd[0] --> ... --> cmd[n] --> pipelineLf() etc.
+ *
+ * pipelineWrite:
+ *
+ *   pipeLineFile() --> cmd[0] --> ... --> cmd[n] --> otherEndFile
+ *
+ * Specify otherEndFile as "/dev/null" for no input or no output (or to
+ * discard output).  If otherEndFile is NULL, then either stdin or stdout are
+ * inherited from the current process.
+ * 
+ * I/O to the pipeline is done by using the result of pipelineFd(),
+ * pipelineFile(), or pipelineLineFile().
+ *
+ * An example that reads a compressed file, sorting it numerically by the 
+ * first column:
+ *    
+ *    static char *cmd1[] = {"gzip", "-dc", NULL};
+ *    static char *cmd2[] = {"sort", "-k", "1,1n", NULL};
+ *    static char **cmds[] = {cmd1, cmd2, NULL};
+ *    
+ *    struct pipeline *pl = pipelineOpen(cmds, pipelineRead, inFilePath, stderrFd);
+ *    struct lineFile *lf = pipelineLineFile(pl);
+ *    char *line;
+ *    
+ *    while (lineFileNext(lf, &line, NULL))
+ *        {
+ *        ...
+ *        }
+ *    pipelineClose(&pl);
+ *
+ * A similar example that generates data and writes a compressed file, sorting
+ * it numerically by the first column:
+ *    
+ *    
+ *    static char *cmd1[] = {"sort", "-k", "1,1n", NULL};
+ *    static char *cmd2[] = {"gzip", "-c3", NULL};
+ *    static char **cmds[] = {cmd1, cmd2, NULL};
+ *    
+ *    struct pipeline *pl = pipelineOpen(cmds, pipelineWrite, outFilePath, stderrFd);
+ *    char *line;
+ *    
+ *    while ((line = makeNextRow()) != NULL)
+ *        fprintf(fh, "%s\n", line);
+ *    
+ *    pipelineClose(&pl);
+ *
+ * To append to an output file, use pipelineWrite|pipelineAppend:
+ *    
+ *    struct pipeline *pl = pipelineOpen(cmds, pipelineWrite|pipelineAppend, outFilePath, stderrFd);
+ */
+#ifndef PIPELINE_H
+#define PIPELINE_H
+#include <stdio.h>
+struct linefile;
+struct pipeline;
+
+enum pipelineOpts
+/* pipeline options bitset */
+    {
+    pipelineRead       = 0x01, /* read from pipeline */
+    pipelineWrite      = 0x02, /* write to pipeline */
+    pipelineNoAbort    = 0x04, /* don't abort if a process exits non-zero,
+                                * wait will return exit code instead.
+                                * Still aborts if process signals. */
+    pipelineMemInput   = 0x08, /* pipeline takes input from memory (internal) */
+    pipelineAppend     = 0x10, /* Append to output file (used only with pipelineWrite) */
+    pipelineSigpipe    = 0x20  /* enable sigpipe in the children and don't treat
+                                  as an error in the parent */
+    };
+
+struct pipeline *pipelineOpenFd(char ***cmds, unsigned opts,
+                                int otherEndFd, int stderrFd);
+/* Create a pipeline from an array of commands.  Each command is an array of
+ * arguments.  Shell expansion is not done on the arguments.  If pipelineRead
+ * is specified, the output of the pipeline is readable from the pipeline
+ * object.  If pipelineWrite is specified, the input of the pipeline is
+ * writable from the pipeline object. */
+
+struct pipeline *pipelineOpen(char ***cmds, unsigned opts,
+                              char *otherEndFile, char *stderrFile);
+/* Create a pipeline from an array of commands.  Each command is an array of
+ * arguments.  Shell expansion is not done on the arguments.  If pipelineRead
+ * is specified, the output of the pipeline is readable from the pipeline
+ * object.  If pipelineWrite is specified, the input of the pipeline is
+ * writable from the pipeline object.  If stderrFile is NULL, stderr is inherited,
+ * otherwise it is redirected to this file.
+ */
+
+void pipelineDumpCmds(char ***cmds);
+/* Dump out pipeline-formatted commands to stdout for debugging. */
+
+struct pipeline *pipelineOpenMem(char ***cmds, unsigned opts,
+                                 void *otherEndBuf, size_t otherEndBufSize,
+                                 int stderrFd);
+/* Create a pipeline from an array of commands, with the pipeline input/output
+ * in a memory buffer.  See pipeline.h for full documentation.  Currently only
+ * input to a read pipeline is supported  */
+
+struct pipeline *pipelineOpenFd1(char **cmd, unsigned opts,
+                                 int otherEndFd, int stderrFd);
+/* like pipelineOpenFd(), only takes a single command */
+
+struct pipeline *pipelineOpen1(char **cmd, unsigned opts,
+                               char *otherEndFile, char *stderrFile);
+/* like pipelineOpen(), only takes a single command */
+
+struct pipeline *pipelineOpenMem1(char **cmd, unsigned opts,
+                                  void *otherEndBuf, size_t otherEndBufSize,
+                                  int stderrFd);
+/* like pipelineOpenMem(), only takes a single command */
+
+char *pipelineDesc(struct pipeline *pl);
+/* Get the desciption of a pipeline for use in error messages */
+
+int pipelineFd(struct pipeline *pl);
+/* Get the file descriptor for a pipeline */
+
+FILE *pipelineFile(struct pipeline *pl);
+/* Get a FILE object wrapped around the pipeline.  Do not close the FILE, is
+ * owned by the pipeline object.  A FILE is created on first call to this
+ * function.  Subsequent calls return the same FILE.*/
+
+struct lineFile *pipelineLineFile(struct pipeline *pl);
+/* Get a lineFile object wrapped around the pipeline.  Do not close the
+ * lineFile, is owned by the pipeline object.  A lineFile is created on first
+ * call to this function.  Subsequent calls return the same object.*/
+
+int pipelineWait(struct pipeline *pl);
+/* Wait for processes in a pipeline to complete; normally aborts if any
+ * process exists non-zero.  If pipelineNoAbort was specified, return the exit
+ * code of the first process exit non-zero, or zero if none failed. */
+
+void pipelineFree(struct pipeline **plPtr);
+/* free a pipeline object */
+
+int pipelineClose(struct pipeline **pPl);
+/* Wait for pipeline to finish and free it. Same as pipelineWait then pipelineClose.
+ * Returns pipelineWait result (normally 0). */
+
+#endif
+/*
+ * Local Variables:
+ * c-file-style: "jkent-c"
+ * End:
+ */
diff --git a/gbtools/src/include/blatSrc/portable.h b/gbtools/src/include/blatSrc/portable.h
new file mode 100644
index 0000000..2952a40
--- /dev/null
+++ b/gbtools/src/include/blatSrc/portable.h
@@ -0,0 +1,168 @@
+/* portable.h - wrappers around things that vary from server
+ * to server and operating system to operating system. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#ifndef PORTABLE_H
+#define PORTABLE_H
+
+#include <sys/types.h>
+#include <sys/stat.h>
+
+struct slName *listDir(char *dir, char *pattern);
+/* Return an alphabetized list of all files that match 
+ * the wildcard pattern in directory. */
+
+struct slName *listDirRegEx(char *dir, char *regEx, int flags);
+/* Return an alphabetized list of all files that match 
+ * the regular expression pattern in directory.
+ * See REGCOMP(3) for flags (e.g. REG_ICASE)  */
+
+
+struct fileInfo 
+/* Info about a file. */
+    {
+    struct fileInfo  *next;	/* Next in list. */
+    off_t size;		/* Size in bytes. */
+    bool isDir;		/* True if file is a directory. */
+    int statErrno;	/* Result of stat (e.g. bad symlink). */
+    time_t lastAccess;  /* Last access time. */
+    char name[1];	/* Allocated at run time. */
+    };
+
+struct fileInfo *newFileInfo(char *name, off_t size, bool isDir, int statErrno, 
+	time_t lastAccess);
+/* Return a new fileInfo. */
+
+struct fileInfo *listDirXExt(char *dir, char *pattern, boolean fullPath, boolean ignoreStatFailures);
+/* Return list of files matching wildcard pattern with
+ * extra info. If full path is true then the path will be
+ * included in the name of each file.  You can free the
+ * resulting list with slFreeList. */
+
+struct fileInfo *listDirX(char *dir, char *pattern, boolean fullPath);
+/* Return list of files matching wildcard pattern with
+ * extra info. If full path is true then the path will be
+ * included in the name of each file.  You can free the
+ * resulting list with slFreeList. */
+
+char *getCurrentDir();
+/* Return current directory.  Abort if it fails. */
+
+void setCurrentDir(char *newDir);
+/* Set current directory.  Abort if it fails. */
+
+boolean maybeSetCurrentDir(char *newDir);
+/* Change directory, return FALSE (and set errno) if fail. */
+
+boolean makeDir(char *dirName);
+/* Make dir.  Returns TRUE on success.  Returns FALSE
+ * if failed because directory exists.  Prints error
+ * message and aborts on other error. */
+
+void makeDirsOnPath(char *pathName);
+/* Create directory specified by pathName.  If pathName contains
+ * slashes, create directory at each level of path if it doesn't
+ * already exist.  Abort with error message if there's a problem.
+ * (It's not considered a problem for the directory to already
+ * exist. ) */
+
+char *simplifyPathToDir(char *path);
+/* Return path with ~ (for home) and .. taken out.   freeMem result when done. */
+
+long clock1000();
+/* 1000 hz clock */
+
+void sleep1000(int milli);
+/* Sleep for given number of milliseconds. */
+
+long clock1();
+/* A 1 hz clock. */
+
+char *rTempName(char *dir, char *base, char *suffix);
+/* Make a temp name that's almost certainly unique. */
+
+/* This structure helps us generate temp names and use
+ * them.  Since different servers locate where the cgi
+ * runs from differently, and where the generated html
+ * file runs from - this is necessary for portable code. */
+struct tempName
+	{
+	char forCgi[128];
+	char forHtml[128];
+	};
+
+void makeTempName(struct tempName *tn, char *base, char *suffix);
+/* Make a good name for a temp file. */
+
+void mustRename(char *oldName, char *newName);
+/* Rename file or die trying. */
+
+void mustRemove(char *path);
+/* Remove file or die trying */
+
+char *semiUniqName(char *base);
+/* Figure out a name likely to be unique.
+ * Name will have no periods.  Returns a static
+ * buffer, so best to clone result unless using
+ * immediately. */
+
+char *cgiDir();
+/* Return directory to look for cgi in. */
+
+char *trashDir();
+/* Return directory for relative path to trash from cgi binaries */
+
+void mkdirTrashDirectory(char *prefix);
+/*	create the specified trash directory if it doesn't exist */
+
+double machineSpeed();
+/* Return relative speed of machine.  UCSC CSE dept. 1999 web server is 1.0 */
+
+char *mysqlHost();
+/* Return host computer on network for mySQL database. */
+
+char *getHost();
+/* Get name of this machine. */
+
+void uglyfBreak();
+/* Invoke the debugger. */
+
+char *getUser();
+/* Get user name */
+
+void envUpdate(char *name, char *value);
+/* Update an environment string */
+
+int mustFork();
+/* Fork or abort. */
+
+int rawKeyIn();
+/* Read in an unbuffered, unechoed character from keyboard. */
+
+time_t fileModTime(char *pathName);
+/* Return file last modification time.  The units of
+ * these may vary from OS to OS, but you can depend on
+ * later files having a larger time. */
+
+
+boolean isPipe(int fd);
+/* determine in an open file is a pipe  */
+
+boolean maybeTouchFile(char *fileName);
+/* If file exists, set its access and mod times to now.  If it doesn't exist, create it.
+ * Return FALSE if we have a problem doing so. */
+
+boolean isRegularFile(char *fileName);
+/* Return TRUE if fileName is a regular file. */
+
+void makeSymLink(char *oldName, char *newName);
+/* Return a symbolic link from newName to oldName or die trying */
+
+long long freeSpaceOnFileSystem(char *path);
+/* Given a path to a file or directory on a file system,  return free space
+ * in bytes. */
+
+#endif /* PORTABLE_H */
+
diff --git a/gbtools/src/include/blatSrc/psGfx.h b/gbtools/src/include/blatSrc/psGfx.h
new file mode 100644
index 0000000..9d04cb2
--- /dev/null
+++ b/gbtools/src/include/blatSrc/psGfx.h
@@ -0,0 +1,118 @@
+/* PostScript graphics - 
+ * This provides a bit of a shell around writing graphics to
+ * a postScript file.  Perhaps the most important thing it
+ * does is convert 0,0 from being at the bottom left to
+ * being at the top left. */
+
+#ifndef PSGFX_H
+#define PSGFX_H
+
+#include "psPoly.h"
+
+struct psGfx 
+/* A postScript output file. */
+    {
+    FILE *f;                      /* File to write to. */
+    double userWidth, userHeight; /* Size of image in virtual pixels. */
+    double ptWidth, ptHeight;     /* Size of image in points (1/72 of an inch) */
+    double xScale, yScale;        /* Conversion from pixels to points. */
+    double xOff, yOff;            /* Offset from pixels to points. */
+    double fontHeight;		  /* Height of current font. */
+    };
+
+struct psGfx *psOpen(char *fileName, 
+	double userWidth, double userHeight, /* Dimension of image in user's units. */
+	double ptWidth, double ptHeight,     /* Dimension of image in points. */
+	double ptMargin);                    /* Image margin in points. */
+/* Open up a new postscript file.  If ptHeight is 0, it will be
+ * calculated to keep pixels square. */
+
+void psClose(struct psGfx **pPs);
+/* Close out postScript file. */
+
+void psTranslate(struct psGfx *ps, double xTrans, double yTrans);
+/* add a constant to translate all coordinates */
+
+void psSetLineWidth(struct psGfx *ps, double factor);
+/* Set line width to factor * a single pixel width. */
+
+void psClipRect(struct psGfx *ps, double x, double y, 
+	double width, double height);
+/* Set clipping rectangle. */
+
+void psDrawBox(struct psGfx *ps, double x, double y, 
+	double width, double height);
+/* Draw a filled box in current color. */
+
+void psDrawLine(struct psGfx *ps, double x1, double y1, 
+	double x2, double y2);
+/* Draw a line from x1/y1 to x2/y2 */
+
+void psFillUnder(struct psGfx *ps, double x1, double y1, 
+	double x2, double y2, double bottom);
+/* Draw a 4 sided filled figure that has line x1/y1 to x2/y2 at
+ * it's top, a horizontal line at bottom at it's bottom,  and
+ * vertical lines from the bottom to y1 on the left and bottom to
+ * y2 on the right. */
+
+void psXyOut(struct psGfx *ps, double x, double y);
+/* Output x,y position transformed into PostScript space. 
+ * Useful if you're mixing direct PostScript with psGfx
+ * functions. */
+
+void psWhOut(struct psGfx *ps, double width, double height);
+/* Output width/height transformed into PostScript space. */
+
+void psMoveTo(struct psGfx *ps, double x, double y);
+/* Move PostScript position to given point. */
+
+void psTextAt(struct psGfx *ps, double x, double y, char *text);
+/* Output text in current font at given position. */
+
+void psTextBox(struct psGfx *ps, double x, double y, char *text);
+/* Fill a box the size of the text at the given position*/
+
+void psTextDown(struct psGfx *ps, double x, double y, char *text);
+/* Output text going downwards rather than across at position. */
+
+void psTextRight(struct psGfx *mg, double x, double y, 
+	double width, double height, char *text);
+/* Draw a line of text right justified in box defined by x/y/width/height */
+
+void psTextCentered(struct psGfx *mg, double x, double y, 
+	double width, double height, char *text);
+/* Draw a line of text centered in box defined by x/y/width/height */
+
+void psTimesFont(struct psGfx *ps, double size);
+/* Set font to times of a certain size. */
+
+void psSetColor(struct psGfx *ps, int r, int g, int b);
+/* Set current color. r/g/b values are between 0 and 255. */
+
+void psSetGray(struct psGfx *ps, double grayVal);
+/* Set gray value (between 0.0 and 1.0. */
+
+void psPushG(struct psGfx *ps);
+/* Save graphics state on stack. */
+
+void psPopG(struct psGfx *ps);
+/* Pop off saved graphics state. */
+
+void psDrawPoly(struct psGfx *ps, struct psPoly *poly, boolean filled);
+/* Draw a possibly filled polygon */
+
+void psFillEllipse(struct psGfx *ps, double x, double y, double xrad, double yrad);
+/* Draw a filled ellipse */
+
+void psDrawEllipse(struct psGfx *ps, double x, double y, double xrad, double yrad,
+    double startAngle, double endAngle);
+/* Draw an ellipse outline */
+
+char * convertEpsToPdf(char *epsFile);
+/* Convert EPS to PDF and return filename, or NULL if failure. */
+
+void psLineTo(struct psGfx *ps, double x, double y);
+/* Draw line from current point to given point,
+ * and make given point new current point. */
+#endif /* PSGFX_H */
+
diff --git a/gbtools/src/include/blatSrc/psPoly.h b/gbtools/src/include/blatSrc/psPoly.h
new file mode 100644
index 0000000..a39cb93
--- /dev/null
+++ b/gbtools/src/include/blatSrc/psPoly.h
@@ -0,0 +1,31 @@
+/* psPoly - two dimensional polygon. */
+
+#ifndef PSPOLY_H
+#define PSPOLY_H
+
+struct psPoint
+/* A two-dimensional point, typically in pixel coordinates. */
+    {
+    struct psPoint *next;
+    double x, y;		/* Position */
+    };
+
+struct psPoly
+/* A two-dimensional polygon */
+    {
+    struct psPoly *next;
+    int ptCount;		/* Number of points. */
+    struct psPoint *ptList;	/* First point in list, which is circular. */
+    struct psPoint *lastPoint;	/* Last point in list. */
+    };
+
+struct psPoly *psPolyNew();
+/* Create new (empty) polygon */
+
+void psPolyFree(struct psPoly **pPoly);
+/* Free up resources associated with polygon */
+
+void psPolyAddPoint(struct psPoly *poly, double x, double y);
+/* Add point to polygon. */
+
+#endif /* PSPOLY_H */
diff --git a/gbtools/src/include/blatSrc/pscmGfx.h b/gbtools/src/include/blatSrc/pscmGfx.h
new file mode 100644
index 0000000..b5d13c3
--- /dev/null
+++ b/gbtools/src/include/blatSrc/pscmGfx.h
@@ -0,0 +1,71 @@
+/* pscmGfx - routines for making postScript output seem a
+ * lot like 256 color bitmap output. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#ifndef PSCMGFX_H
+#define PSCMGFX_H
+
+#include "memgfx.h"
+
+struct pscmGfx 
+/* Structure to simululate 256 color image
+ * in postScript - so to make it easier to
+ * swap between memGfx/gif output and PostScript
+ * output */
+    {
+    struct pscmGfx *next;
+    struct psGfx *ps;	  /* Underlying postScript object. */
+    int colAlloc;	  /* Colors allocated. */
+    int colUsed;	  /* Colors used. */
+    void *curFont;	  /* Current font. */
+    int curColor;	  /* Current color. */
+    struct colHash *colorHash;	/* Hash for fast look up of color. */
+    struct rgbColor colorMap[256]; /* The color map. */
+    int colorsUsed;		/* Number of colors actually used. */
+    int clipMinX, clipMaxX;     /* Clipping region upper left corner. */
+    int clipMinY, clipMaxY;     /* lower right, not inclusive */
+    struct hash *hints;   /* Hints to guide behavior */
+    int writeMode;        /* current write mode */
+    };
+
+struct pscmGfx *pscmOpen(int width, int height, char *file);
+/* Return new pscmGfx. */
+
+void pscmClose(struct pscmGfx **ppscm);
+/* Finish writing out and free structure. */
+
+void pscmSetClip(struct pscmGfx *pscm, int x, int y, int width, int height);
+/* Set clipping rectangle. */
+
+void pscmUnclip(struct pscmGfx *pscm);
+/* Set clipping rect cover full thing. */
+
+int pscmFindColorIx(struct pscmGfx *pscm, int r, int g, int b);
+/* Find color index for rgb. */
+
+void pscmSetColor(struct pscmGfx *pscm, Color color);
+/* Set current color to Color. */
+
+void pscmBox(struct pscmGfx *pscm, int x, int y, 
+	int width, int height, int colorIx);
+/* Draw a box. */
+
+void pscmLine(struct pscmGfx *pscm, 
+	int x1, int y1, int x2, int y2, int colorIx);
+/* Draw a line from one point to another. */
+
+void pscmText(struct pscmGfx *pscm, int x, int y, int colorIx, 
+	MgFont *font, char *text);
+/* Draw a line of text with upper left corner x,y. */
+
+void pscmTextRight(struct pscmGfx *pscm, int x, int y, int width, int height,
+	int color, MgFont *font, char *text);
+/* Draw a line of text right justified in box defined by x/y/width/height */
+
+void pscmTextCentered(struct pscmGfx *pscm, int x, int y, 
+	int width, int height, int color, MgFont *font, char *text);
+/* Draw a line of text centered in box defined by x/y/width/height */
+
+#endif /* PSCMGFX_H */
diff --git a/gbtools/src/include/blatSrc/psl.h b/gbtools/src/include/blatSrc/psl.h
new file mode 100644
index 0000000..0557228
--- /dev/null
+++ b/gbtools/src/include/blatSrc/psl.h
@@ -0,0 +1,316 @@
+/* psl.h was originally generated by the autoSql program, which also 
+ * generated psl.c and psl.sql.  This header links the database and 
+ * the RAM representation of objects.   Additional functions were
+ * added later. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#ifndef PSL_H
+#define PSL_H
+
+#ifndef LOCALMEM_H
+#include "localmem.h"
+#endif 
+
+#ifndef LINEFILE_H
+#include "linefile.h"
+#endif
+
+#ifndef FUZZYFIND_H
+#include "fuzzyFind.h"
+#endif
+
+#ifndef DNASEQ_H
+#include "dnaseq.h"
+#endif
+
+/* Some forward declarations of structures used but not defined here. */
+struct rbTree;
+
+#define PSL_NUM_COLS  21  /* number of columns in a PSL */
+#define PSLX_NUM_COLS 23  /* number of columns in a PSLX */
+
+#define PSL_XA_FORMAT 0x04  /* add XA format columns */
+
+/* options for pslFromAlign */
+#define PSL_IS_SOFTMASK 0x01 /* lower case are mask */
+
+struct psl
+/* Summary info about a patSpace alignment */
+    {
+    struct psl *next;  /* Next in singly linked list. */
+    unsigned match;	/* Number of bases that match that aren't repeats */
+    unsigned misMatch;	/* Number of bases that don't match */
+    unsigned repMatch;	/* Number of bases that match but are part of repeats */
+    unsigned nCount;	/* Number of 'N' bases */
+    unsigned qNumInsert;	/* Number of inserts in query */
+    int qBaseInsert;	/* Number of bases inserted in query */
+    unsigned tNumInsert;	/* Number of inserts in target */
+    int tBaseInsert;	/* Number of bases inserted in target */
+    char strand[3];	/* + or - for strand */
+    char *qName;	/* Query sequence name */
+    unsigned qSize;	/* Query sequence size */
+    int qStart;	/* Alignment start position in query */
+    int qEnd;	/* Alignment end position in query */
+    char *tName;	/* Target sequence name */
+    unsigned tSize;	/* Target sequence size */
+    int tStart;	/* Alignment start position in target */
+    int tEnd;	/* Alignment end position in target */
+    unsigned blockCount;	/* Number of blocks in alignment */
+    unsigned *blockSizes;	/* Size of each block */
+    unsigned *qStarts;	/* Start of each block in query. */
+    unsigned *tStarts;	/* Start of each block in target. */
+
+    char **qSequence;  /* query sequence for each block */
+    char **tSequence;  /* target sequence for each block */
+    };
+
+struct psl *pslxLoad(char **row);
+/* Load a pslx from row fetched with select * from psl
+ * from database.  Dispose of this with pslFree(). */
+
+struct psl *pslLoad(char **row);
+/* Load a psl from row fetched with select * from psl
+ * from database.  Dispose of this with pslFree(). */
+
+struct psl *pslCommaIn(char **pS, struct psl *ret);
+/* Create a psl out of a comma separated string. 
+ * This will fill in ret if non-null, otherwise will
+ * return a new psl */
+
+void pslFree(struct psl **pEl);
+/* Free a single dynamically allocated psl such as created
+ * with pslLoad(). */
+
+void pslFreeList(struct psl **pList);
+/* Free a list of dynamically allocated psl's */
+
+void pslOutput(struct psl *el, FILE *f, char sep, char lastSep);
+/* Print out psl.  Separate fields with sep. Follow last field with lastSep. */
+
+#define pslTabOut(el,f) pslOutput(el,f,'\t','\n')
+/* Print out psl as a line in a tab-separated file. */
+
+#define pslCommaOut(el,f) pslOutput(el,f,',',',')
+/* Print out psl as a comma separated list including final comma. */
+
+/* ----- end autoSql generated part --------------- */
+
+void pslOutFormat(struct psl *el, FILE *f, char sep, char lastSep);
+/* Print out selected psl values.  Separate fields with sep. Follow last field with lastSep. */
+/* Prints out a better format with bold field headings followed by value */
+/* Requires further upstream work to ensure that only the field headers */
+/* declared here are printed if replacing an existing psl print function*/
+
+struct psl *pslLoadAll(char *fileName);
+/* Load all psl's in file. */
+
+struct psl *pslNext(struct lineFile *lf);
+/* Read next line from file and convert it to psl.  Return
+ * NULL at eof. */
+
+struct psl *pslxLoadLm(char **row, struct lm *lm);
+/* Load row into local memory pslx. */
+
+struct psl *pslLoadLm(char **row, struct lm *lm);
+/* Load row into local memory psl. */
+
+void pslWriteHead(FILE *f);
+/* Write head of psl. */
+
+void pslxWriteHead(FILE *f, enum gfType qType, enum gfType tType);
+/* Write head of pslx (extended psl). */
+
+void pslWriteAll(struct psl *pslList, char *fileName, boolean writeHeader);
+/* Write a psl file from list. */
+
+struct lineFile *pslFileOpen(char *fileName);
+/* Read header part of psl and make sure it's right. 
+ * Return line file handle to it. */
+
+struct lineFile *pslFileOpenWithMeta(char *fileName, FILE *f);
+/* Read header part of psl and make sure it's right. 
+ * Return line file handle to it and send meta data to output file f */
+
+struct lineFile *pslFileOpenWithUniqueMeta(char *fileName, FILE *f);
+/* Read header part of psl and make sure it's right. 
+* Set flag to suppress duplicate header comments.
+* Return line file handle to it. */
+
+void pslxFileOpen(char *fileName, enum gfType *retQueryType, 
+	enum gfType *retTargetType, struct lineFile **retLf);
+/* Read header part of psl and make sure it's right.  Return
+ * sequence types and file handle. */
+
+void pslxFileOpenWithMeta(char *fileName, enum gfType *retQueryType, enum gfType *retTargetType, struct lineFile **retLf, FILE *f);
+/* Read header part of psl and make sure it's right.  Return
+ * sequence types and file handle and send meta data to output file f */
+
+void pslxFileOpenWithUniqueMeta(char *fileName, enum gfType *retQueryType, enum gfType *retTargetType, struct lineFile **retLf, FILE *f);
+/* Read header part of psl and make sure it's right.  Return
+* sequence types and file handle and send only unique meta data to output f */
+
+int pslCmpQuery(const void *va, const void *vb);
+/* Compare to sort based on query. */
+
+int pslCmpTarget(const void *va, const void *vb);
+/* Compare to sort based on target. */
+
+int pslCmpTargetAndStrand(const void *va, const void *vb);
+/* Compare to sort based on target, strand,  tStart. */
+
+int pslCmpScore(const void *va, const void *vb);
+/* Compare to sort based on score (descending). */
+
+int pslCmpQueryScore(const void *va, const void *vb);
+/* Compare to sort based on query then score (descending). */
+
+int pslCalcMilliBad(struct psl *psl, boolean isMrna);
+/* Calculate badness in parts per thousand. */
+
+int pslCmpScoreDesc(const void *va, const void *vb);
+/* Compare to sort based on score descending. */
+
+int pslCmpMatch(const void *va, const void *vb);
+/* Compare to sort based on match. */
+
+int pslScore(const struct psl *psl);
+/* Return score for psl. */
+
+struct ffAli *pslToFfAli(struct psl *psl, struct dnaSeq *query, struct dnaSeq *target,
+	int targetOffset);
+/* Convert from psl to ffAli format. */
+
+struct ffAli *pslToFakeFfAli(struct psl *psl, DNA *needle, DNA *haystack);
+/* Convert from psl to ffAli format.  In some cases you can pass NULL
+ * for needle and haystack - depending what the post-processing is going
+ * to be. */
+
+struct psl *pslFromFakeFfAli(struct ffAli *ff, 
+	DNA *needle, DNA *haystack, char strand,
+	char *qName, int qSize, char *tName, int tSize);
+/* This will create a basic psl structure from a sorted series of ffAli
+ * blocks.  The fields that would need actual sequence to be filled in
+ * are left zero however - fields including match, repMatch, mismatch. */
+
+int pslOrientation(struct psl *psl);
+/* Translate psl strand + or - to orientation +1 or -1 */
+
+/* marcos to get query and target strand.  Target returns implied + when
+ * it's not specific  */
+#define pslQStrand(p) ((p)->strand[0])
+#define pslTStrand(p) (((p)->strand[1] != '-') ? '+' : '-')
+
+int pslWeightedIntronOrientation(struct psl *psl, struct dnaSeq *genoSeq, int offset);
+/* Return >0 if introns make it look like alignment is on + strand,
+ *        <0 if introns make it look like alignment is on - strand,
+ *        0 if can't tell.  The absolute value of the return indicates
+ * how many splice sites we've seen supporting the orientation.
+ * Sequence should NOT be reverse complemented.  */
+
+int pslIntronOrientation(struct psl *psl, struct dnaSeq *genoSeq, int offset);
+/* Return 1 if introns make it look like alignment is on + strand,
+ *       -1 if introns make it look like alignment is on - strand,
+ *        0 if can't tell.
+ * Sequence should NOT be reverse complemented.  */
+
+boolean pslHasIntron(struct psl *psl, struct dnaSeq *seq, int seqOffset);
+/* Return TRUE if there's a probable intron. Sequence should NOT be
+ * reverse complemented. */
+
+void pslTailSizes(struct psl *psl, int *retStartTail, int *retEndTail);
+/* Find the length of "tails" (rather than extensions) implied by psl. */
+
+void pslRc(struct psl *psl);
+/* Reverse-complement a PSL alignment.  This makes the target strand explicit. */
+
+void pslSwap(struct psl *psl, boolean noRc);
+/* swap query and target in psl.  If noRc is TRUE, don't reverse-complement
+ * PSL if needed, instead make target strand explict. */
+
+void pslTargetOffset(struct psl *psl, int offset);
+/* Add offset to target positions in psl. */
+
+void pslDump(struct psl *psl, FILE *f);
+/* Dump most of PSL to file - for debugging. */
+
+struct psl *pslTrimToTargetRange(struct psl *oldPsl, int tMin, int tMax);
+/* Return psl trimmed to fit inside tMin/tMax.  Note this does not
+ * update the match/misMatch and related fields. */
+
+struct psl *pslTrimToQueryRange(struct psl *oldPsl, int qMin, int qMax);
+/* Return psl trimmed to fit inside qMin/qMax.  Note this does not
+ * update the match/misMatch and related fields. */
+
+int pslCheck(char *pslDesc, FILE* out, struct psl* psl);
+/* Validate a PSL for consistency.  pslDesc is printed the error messages
+ * to file out (open /dev/null to discard). Return count of errors. */
+
+int pslCountBlocks(struct psl *target, struct psl *query, int maxBlockGap);
+/* count the number of blocks in the query that overlap the target */
+/* merge blocks that are closer than maxBlockGap */
+
+struct hash *readPslToBinKeeper(char *sizeFileName, char *pslFileName);
+/* read a list of psls and return results in hash of binKeeper structure for fast query*/
+
+boolean pslIsProtein(const struct psl *psl);
+/* is psl a protein psl (are it's blockSizes and scores in protein space) */
+
+struct psl* pslFromAlign(char *qName, int qSize, int qStart, int qEnd, char *qString,
+                         char *tName, int tSize, int tStart, int tEnd, char *tString,
+                         char* strand, unsigned options);
+/* Create a PSL from an alignment.  Options PSL_IS_SOFTMASK if lower case
+ * bases indicate repeat masking.  Returns NULL if alignment is empty after
+ * triming leading and trailing indels.*/
+
+int pslShowAlignment(struct psl *psl, boolean isProt,
+	char *qName, bioSeq *qSeq, int qStart, int qEnd,
+	char *tName, bioSeq *tSeq, int tStart, int tEnd, FILE *f);
+/* Show protein/DNA alignment or translated DNA alignment in HTML format. */
+
+int pslGenoShowAlignment(struct psl *psl, boolean isProt,
+		      char *qName, bioSeq *qSeq, int qStart, int qEnd,
+		      char *tName, bioSeq *tSeq, int tStart, int tEnd, int exnStarts[], int exnEnds[], int exnCnt, FILE *f);
+/* Show protein/DNA alignment or translated DNA alignment in HTML format. */
+
+struct psl* pslNew(char *qName, unsigned qSize, int qStart, int qEnd,
+                   char *tName, unsigned tSize, int tStart, int tEnd,
+                   char *strand, unsigned blockSpace, unsigned opts);
+/* create a new psl with space for the specified number of blocks allocated.
+ * pslGrow maybe used to expand this space if needed.  Valid options are
+ * PSL_XA_FORMAT. */
+
+void pslGrow(struct psl *psl, int *blockSpacePtr);
+/* Increase memory allocated to a psl to hold more blocks.  blockSpacePtr
+ * should point the the current maximum number of blocks and will be
+ * updated to with the new amount of space. */
+
+struct psl* pslFromGff3Cigar(char *qName, int qSize, int qStart, int qEnd,
+                             char *tName, int tSize, int tStart, int tEnd,
+                             char* strand, char *cigar);
+/* create a PSL from a GFF3-style cigar formatted alignment */
+
+int pslRangeTreeOverlap(struct psl *psl, struct rbTree *rangeTree);
+/* Return amount that psl overlaps (on target side) with rangeTree. */
+
+float pslIdent(struct psl *psl);
+/* computer fraction identity */
+
+float pslQueryAligned(struct psl *psl);
+/* compute fraction of query that was aligned */
+
+INLINE unsigned pslQEnd(struct psl *psl, int blkIdx)
+/* return query end for the given block */
+{
+return psl->qStarts[blkIdx] + psl->blockSizes[blkIdx];
+}
+
+INLINE unsigned pslTEnd(struct psl *psl, int blkIdx)
+/* return target end for the given block */
+{
+return psl->tStarts[blkIdx] + psl->blockSizes[blkIdx];
+}
+
+#endif /* PSL_H */
+
diff --git a/gbtools/src/include/blatSrc/pslTbl.h b/gbtools/src/include/blatSrc/pslTbl.h
new file mode 100644
index 0000000..b1d1b7f
--- /dev/null
+++ b/gbtools/src/include/blatSrc/pslTbl.h
@@ -0,0 +1,42 @@
+/* table of psl alignments, grouped by query */
+#ifndef PSLTBL_H
+#define PSLTBL_H
+
+struct psl;
+struct hash;
+
+struct pslQuery
+/* object containing PSLs for a single query */
+{
+    struct pslQuery *next;
+    char *qName;          /* qName, memory not owned here */
+    struct psl *psls;     /* alignments */
+};
+
+struct pslTbl
+/* table of psl alignments */
+{
+    struct pslTbl *next;               /* next psl table in a list */
+    char *setName;                     /* name identifying the set of psl.
+                                        * maybe file name, or  other name */
+    struct hash *queryHash;            /* hash of pslQuery objects */
+};
+
+struct pslTbl *pslTblNew(char *pslFile, char *setName);
+/* construct a new object, loading the psl file.  If setName is NULL, the file
+* name is saved as the set name. */
+
+void pslTblFree(struct pslTbl **pslTblPtr);
+/* free object */
+
+void pslTblFreeList(struct pslTbl **pslTblList);
+/* free list of pslTbls */
+
+#endif
+
+/*
+ * Local Variables:
+ * c-file-style: "jkent-c"
+ * End:
+ */
+
diff --git a/gbtools/src/include/blatSrc/pslTransMap.h b/gbtools/src/include/blatSrc/pslTransMap.h
new file mode 100644
index 0000000..0f53035
--- /dev/null
+++ b/gbtools/src/include/blatSrc/pslTransMap.h
@@ -0,0 +1,17 @@
+/* pslTransMap - transitive mapping of an alignment another sequence, via a
+ * common alignment */
+#ifndef PSLTRANSMAP_H
+#define PSLTRANSMAP_H
+
+enum pslTransMapOpts
+/* option set for pslTransMap */
+{
+    pslTransMapNoOpts     = 0x00,  /* no options */
+    pslTransMapKeepTrans  = 0x01   /* keep translated alignment strand */
+};
+
+struct psl* pslTransMap(unsigned opts, struct psl *inPsl, struct psl *mapPsl);
+/* map a psl via a mapping psl, a single psl is returned, or NULL if it
+ * couldn't be mapped. */
+
+#endif
diff --git a/gbtools/src/include/blatSrc/pthreadDoList.h b/gbtools/src/include/blatSrc/pthreadDoList.h
new file mode 100644
index 0000000..57fc16b
--- /dev/null
+++ b/gbtools/src/include/blatSrc/pthreadDoList.h
@@ -0,0 +1,67 @@
+/* pthreadDoList - do something to all items in list using multiple threads in parallel. */
+
+#ifndef PTHREADDOLIST_H
+#define PTHREADDOLIST_H
+
+/* The general usage of this routine is to make up a singly-linked list of items 
+ * with the convention that the first field of the item is the next pointer.
+ * Then make a routine that takes a pointer to an item, and optionally a second
+ * pointer to a context for data that is constant across the list.  Then call the
+ * pthreadDoList routine,  which will return after all items on the list have been
+ * processed.  In general the list items will contain output as well as input fields.
+ * The routine that works on an item should not alter any variables except for local
+ * variables, or output fields for an item.  See below for an example. */
+
+typedef void PthreadListWorker(void *item, void *context);
+/* This gets passed a variable item from list, and a constant context */
+
+void pthreadDoList(int threadCount, void *workList,  PthreadListWorker *worker, void *context);
+/* Work through list with threadCount workers each in own thread. 
+ * The worker will be called in parallel with an item from work list and the context
+ *       worker(item, context)
+ * The context is constant across all threads and items. */
+
+#ifdef EXAMPLE
+
+/* In this example we'll raise each element from 1 to 10 to the 4th power */
+
+struct paraPower
+/* Keep track of a number and it's Nth power in parallel */
+    {
+    struct paraPower *next;
+    double in;	/* Input number */
+    double out;  /* output number */
+    };
+
+void doPowerCalc(void *item, void *context)
+/* This routine does the actual work. */
+{
+struct paraPower *p = item; // Convert item to known type
+double *y = context;        // Convert context to a known type
+p->out = pow(p->in, *y);    // Calculate and save output back in item.
+}
+
+void main()
+{
+/* Make up list of items */
+struct paraPower *list = NULL, *el;
+int i;
+for (i=1; i<=10; ++i)
+    {
+    AllocVar(el);
+    el->in = i;
+    slAddHead(&list, el);
+    }
+
+/* Do parallel 4th powering in 3 threads */
+double context = 4;
+pthreadDoList(3, list, doPowerCalc, &context);
+
+/* Report results */
+for (el = list; el != NULL; el = el->next)
+    printf("%g^%g = %g\n", el->in, context, el->out);
+}
+
+#endif /* EXAMPLE */
+
+#endif /* PTHREADDOLIST_H */
diff --git a/gbtools/src/include/blatSrc/pthreadWrap.h b/gbtools/src/include/blatSrc/pthreadWrap.h
new file mode 100644
index 0000000..5021bb4
--- /dev/null
+++ b/gbtools/src/include/blatSrc/pthreadWrap.h
@@ -0,0 +1,45 @@
+/* pthreadWrap - error checking wrappers around Posix
+ * thread functions.  Most of the errors here are invariably
+ * fatal, but shouldn't happen unless the kernal or
+ * the program is hosed. */
+
+#ifndef PTHREADWRAP_H
+#define PTHREADWRAP_H
+
+#include <pthread.h>
+
+void pthreadCreate(pthread_t *thread, const pthread_attr_t *attr,
+	void *(*start_routine)(void *), void *arg);
+/* Create a thread or squawk and die. */
+
+boolean pthreadMayCreate(pthread_t *thread, const pthread_attr_t *attr,
+	void *(*start_routine)(void *), void *arg);
+/* Create a thread.  Warn and return FALSE if there is a problem. */
+
+void pthreadMutexInit(pthread_mutex_t *mutex);
+/* Initialize mutex or die trying */
+
+void pthreadMutexDestroy(pthread_mutex_t *mutex);
+/* Free up mutex. */
+
+void pthreadMutexLock(pthread_mutex_t *mutex);
+/* Lock a mutex to gain exclusive access or die trying. */
+
+void pthreadMutexUnlock(pthread_mutex_t *mutex);
+/* Unlock a mutex or die trying. */
+
+void pthreadCondInit(pthread_cond_t *cond);
+/* Initialize pthread conditional. */
+
+void pthreadCondDestroy(pthread_cond_t *cond);
+/* Free up conditional. */
+
+void pthreadCondSignal(pthread_cond_t *cond);
+/* Set conditional signal to wake up a sleeping thread, or
+ * die trying. */
+
+void pthreadCondWait(pthread_cond_t *cond, pthread_mutex_t *mutex);
+/* Wait for conditional signal. */
+
+#endif /* PTHREADWRAP_H */
+
diff --git a/gbtools/src/include/blatSrc/qa.h b/gbtools/src/include/blatSrc/qa.h
new file mode 100644
index 0000000..016db68
--- /dev/null
+++ b/gbtools/src/include/blatSrc/qa.h
@@ -0,0 +1,65 @@
+/* qa - Module to help do testing, especially on html based apps. */
+
+#ifndef QA_H
+#define QA_H
+
+#ifndef HTMLPAGE_H
+#include "htmlPage.h"
+#endif
+
+char *qaStringBetween(char *text, char *startPattern, char *endPattern);
+/* Return text that occurs between startPattern and endPattern,
+ * or NULL if no startPattern.  (Will return up to 100 characters
+ * after startPattern if there is no endPattern) */
+
+char *qaScanForErrorMessage(char *text);
+/* Scan text for error message.  If one exists then
+ * return copy of it.  Else return NULL. */
+
+int qaCountBetween(char *s, char *startPattern, char *endPattern, 
+	char *midPattern);
+
+struct slName *qaRandomSample(char *db, char *table, char *field, int count);
+/* Get random sample from database. */
+
+
+struct qaStatus
+/* Timing and other info about fetching a web page. */
+    {
+    struct qaStatus *next;
+    int milliTime;	/* Time page fetch took. */
+    char *errMessage;	/* Error message if any. */
+    boolean hardError;	/* Crash of some sort. */
+    };
+
+struct qaStatus *qaPageGet(char *url, struct htmlPage **retPage);
+/* Get info on given url, (and return page if retPage non-null). */
+
+struct qaStatus *qaPageFromForm(struct htmlPage *origPage, struct htmlForm *form, 
+	char *buttonName, char *buttonVal, struct htmlPage **retPage);
+/* Get update to form based on pressing a button. */
+
+void qaStatusSoftError(struct qaStatus *qs, char *format, ...);
+/* Add error message for something less than a crash. */
+
+void qaStatusReportOne(FILE *f, struct qaStatus *qs, char *format, ...);
+/* Report status */
+
+struct qaStatistics
+/* Stats on one set of tests. */
+    {
+    struct qaStatistics *next;
+    int testCount;	/* Number of tests. */
+    int softCount;	/* Soft error count. */
+    int hardCount;	/* Hard error count. */
+    long milliTotal;	/* Time tests took. */
+    };
+
+void qaStatisticsAdd(struct qaStatistics *stats, struct qaStatus *qs);
+/* Add test results to totals */
+
+void qaStatisticsReport(struct qaStatistics *stats, char *label, FILE *f);
+/* Write a line of stats to file. */
+
+#endif /* QA_H */
+
diff --git a/gbtools/src/include/blatSrc/quickHeap.h b/gbtools/src/include/blatSrc/quickHeap.h
new file mode 100644
index 0000000..8dfdb9b
--- /dev/null
+++ b/gbtools/src/include/blatSrc/quickHeap.h
@@ -0,0 +1,53 @@
+/* quickHeap - Heap implemented as an array for speed.
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial.
+ *
+ *    The array can be resized as it grows.
+ *  By preserving the relationship that the children of n are at 2n+1 and 2n+2,
+ *  and therefore the parent of n is at (n-1)/2, we can save alot of pointer
+ *  manipulation and get some speed.  
+ *    This routine could for instance be used at the heart of a multi-way mergesort
+ *  or other situation such as a priority queue.
+ *
+ */
+
+struct quickHeap 
+/* A quick array heap. */
+    {
+    void **heap;
+    int heapCount;
+    int heapMax;
+    int (*compareFunc)(const void *elem1, const void *elem2);
+    };
+
+struct quickHeap *newQuickHeap(int initSize, 
+   int (*compare )(const void *elem1,  const void *elem2));
+/* Create a new array quick heap of initial size specified,
+ * The compare function must return > 0 if elem1 > elem2, etc.*/
+
+void freeQuickHeap(struct quickHeap **pH);
+/* Heap needs more space, double the size of the array preserving elements */
+
+void addToQuickHeap(struct quickHeap *h, void *elem);
+/* add to heap at end (expands array if needed), rebalance */
+
+void quickHeapTopChanged(struct quickHeap *h);
+/* only the value of the top element has changed, now rebalance */
+
+boolean quickHeapEmpty(struct quickHeap *h);
+/* return TRUE if quick heap is empty, otherwise FALSE */
+
+boolean removeFromQuickHeapByElem(struct quickHeap *h, void *elem);
+/* Do a linear search in heap array for elem,
+ * then remove it by position n. Return TRUE
+ * if found and removed, otherwise return FALSE. */
+
+void *peekQuickHeapTop(struct quickHeap *h);
+/* return the top element or NULL if empty */
+
+void *removeQuickHeapTop(struct quickHeap *h);
+/* Return elem (pointer) in heap array[0]
+ * which will be NULL if heap is empty.
+ * Then that top element if found is removed. */
+
diff --git a/gbtools/src/include/blatSrc/quotedP.h b/gbtools/src/include/blatSrc/quotedP.h
new file mode 100644
index 0000000..f483a33
--- /dev/null
+++ b/gbtools/src/include/blatSrc/quotedP.h
@@ -0,0 +1,21 @@
+/* Quoted Printable encoding and decoding.
+ * by Galt Barber */
+
+#ifndef QUOTEDP_H
+#define QUOTEDP_H
+
+char *quotedPrintableEncode(char *input);
+/* Use Quoted-Printable standard to encode a string.
+ */
+
+boolean quotedPCollapse(char *line);
+/* Use Quoted-Printable standard to decode a string.
+ * Return true if the line does not end in '='
+ * which indicate continuation. */
+
+char *quotedPrintableDecode(char *input);
+/* Use Quoted-Printable standard to decode a string.  Return decoded
+ * string which will be freeMem'd. */
+
+#endif /* QUOTEDP_H */
+
diff --git a/gbtools/src/include/blatSrc/ra.h b/gbtools/src/include/blatSrc/ra.h
new file mode 100644
index 0000000..96d38bc
--- /dev/null
+++ b/gbtools/src/include/blatSrc/ra.h
@@ -0,0 +1,81 @@
+/* Stuff to parse .ra files. Ra files are simple text databases.
+ * The database is broken into records by blank lines.
+ * Each field takes a line.  The name of the field is the first
+ * word in the line.  The value of the field is the rest of the line.
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#ifndef RA_H
+
+struct hash *raNextStanza(struct lineFile *lf);
+// Return a hash containing next record.
+// Will ignore '#' comments and joins continued lines (ending in '\').
+// Returns NULL at end of file.  freeHash this when done.
+// Note this will free the hash keys and values as well,
+// so you'll have to cloneMem them if you want them for later.
+#define raNextRecord(lf)  raNextStanza(lf)
+
+struct slPair *raNextStanzAsPairs(struct lineFile *lf);
+// Return ra stanza as an slPair list instead of a hash.  Handy to preserve the
+// order.  Will ignore '#' comments and joins continued lines (ending in '\').
+#define raNextRecordAsSlPairList(lf)  raNextStanzAsPairs(lf)
+
+struct slPair *raNextStanzaLinesAndUntouched(struct lineFile *lf);
+// Return list of lines starting from current position, up through last line of next stanza.
+// May return a few blank/comment lines at end with no real stanza.
+// Will join continuation lines, allocating memory as needed.
+// returns pairs with name=joined line and if joined,
+// val will contain raw lines '\'s and linefeeds, else val will be NULL.
+
+boolean raSkipLeadingEmptyLines(struct lineFile *lf, struct dyString *dy);
+/* Skip leading empty lines and comments.  Returns FALSE at end of file.
+ * Together with raNextTagVal you can construct your own raNextRecord....
+ * If dy parameter is non-null, then the text parsed gets placed into dy. */
+
+boolean raNextTagVal(struct lineFile *lf, char **retTag, char **retVal, struct dyString  *dy);
+// Read next line.  Return FALSE at end of file or blank line.  Otherwise fill in
+// *retTag and *retVal and return TRUE.  If dy parameter is non-null, then the text parsed
+// gets appended to dy. Continuation lines in RA file will be joined to produce tag and val,
+// but dy will be filled with the unedited multiple lines containing the continuation chars.
+
+struct hash *raFromString(char *string);
+/* Return hash of key/value pairs from string.
+ * As above freeHash this when done. */
+
+boolean raFoldInOne(struct lineFile *lf, struct hash *hashOfHash);
+/* Fold in one record from ra file into hashOfHash.
+ * This will add ra's and ra fields to whatever already
+ * exists in the hashOfHash,  overriding fields of the
+ * same name if they exist already. */
+
+void raFoldIn(char *fileName, struct hash *hashOfHash);
+/* Read ra's in file name and fold them into hashOfHash.
+ * This will add ra's and ra fields to whatever already
+ * exists in the hashOfHash,  overriding fields of the
+ * same name if they exist already. */
+
+struct hash *raReadSingle(char *fileName);
+/* Read in first ra record in file and return as hash. */
+
+struct hash *raReadAll(char *fileName, char *keyField);
+/* Return hash that contains all ra records in file keyed
+ * by given field, which must exist.  The values of the
+ * hash are themselves hashes. */
+
+struct hash *raReadWithFilter(char *fileName, char *keyField,char *filterKey,char *filterValue);
+/* Return hash that contains all filtered ra records in file keyed by given field, which must exist.
+ * The values of the hash are themselves hashes.  The filter is a key/value pair that must exist.
+ * Example raReadWithFilter(file,"term","type","antibody"): returns hash of hashes of every term with type=antibody */
+
+struct hash *raReadThreeLevels(char *fileName, char *lowKeyField, char *middleKeyField);
+/* Return 3 level hash that contains all ra records in file keyed by lowKeyField, which must exist.
+ * and broken into sub hashes based upon middleKeyField that must exist.
+ * Example raReadThreeLevels("cv.ra","term","type"):
+ *         returns hash of 'type' hashes of 'term' hashes of every stanza in cv.ra */
+
+struct hash *raTagVals(char *fileName, char *tag);
+/* Return a hash of all values of given tag seen in any stanza of ra file. */
+
+#endif /* RA_H */
+
diff --git a/gbtools/src/include/blatSrc/raToStruct.h b/gbtools/src/include/blatSrc/raToStruct.h
new file mode 100644
index 0000000..48e3347
--- /dev/null
+++ b/gbtools/src/include/blatSrc/raToStruct.h
@@ -0,0 +1,64 @@
+/* raToStruct - stuff to help read ra files into C structures.  Works with raToStructGen
+ * which makes parsers based on .as files. */
+
+#ifndef RATOSTRUCT_H
+
+struct raToStructReader
+/* Something to help us parse RAs into C structures. */
+    {
+    struct raToStructReader *next;
+    char *name;		      /* Name of structure */
+    int fieldCount;	      /* Number of fields. */
+    char **fields;	      /* Names of all fields - not allocated here. */
+    char **requiredFields;    /* Names of required fields - not allocated here */
+    int requiredFieldCount;   /* Count of required fields. */
+    struct hash *fieldIds;    /* So we can do hashLookup/switch instead of strcmp chain */
+    int *requiredFieldIds;    /* An array of IDs of required fields. */
+    bool *fieldsObserved;  /* An entry for each field we've observed. */
+    };
+
+struct raToStructReader *raToStructReaderNew(char *name,  int fieldCount, char **fields,  
+    int requiredFieldCount, char **requiredFields);
+/* Create a helper object for parsing an ra file into a C structure. */
+
+void raToStructReaderFree(struct raToStructReader **pReader);
+/* Free up memory associated with reader. */
+
+void raToStructReaderCheckRequiredFields(struct raToStructReader *reader, struct lineFile *lf);
+/* Make sure that all required files have been seen in the stanza we just parsed. */
+
+void raToStructArraySignedSizer(struct lineFile *lf, int curSize, int *pSize, char *fieldName);
+/* If *pSize is zero,  set it to curSize,  othersize check that it is the same as curSize.
+ * The lf and fieldName are for error reporting. */
+
+void raToStructArrayUnsignedSizer(struct lineFile *lf, unsigned curSize, 
+    unsigned *pSize, char *fieldName);
+/* If *pSize is zero,  set it to curSize,  othersize check that it is the same as curSize.
+ * The lf and fieldName are for error reporting. */
+
+void raToStructArrayShortSizer(struct lineFile *lf, short curSize, 
+    short *pSize, char *fieldName);
+/* If *pSize is zero,  set it to curSize,  othersize check that it is the same as curSize.
+ * The lf and fieldName are for error reporting. */
+
+void raToStructArrayUshortSizer(struct lineFile *lf, unsigned short curSize, 
+    unsigned short *pSize, char *fieldName);
+/* If *pSize is zero,  set it to curSize,  othersize check that it is the same as curSize.
+ * The lf and fieldName are for error reporting. */
+
+void raToStructArrayByteSizer(struct lineFile *lf, signed char curSize, 
+    signed char *pSize, char *fieldName);
+/* If *pSize is zero,  set it to curSize,  othersize check that it is the same as curSize.
+ * The lf and fieldName are for error reporting. */
+
+void raToStructArrayUbyteSizer(struct lineFile *lf, unsigned char curSize, 
+    unsigned char *pSize, char *fieldName);
+/* If *pSize is zero,  set it to curSize,  othersize check that it is the same as curSize.
+ * The lf and fieldName are for error reporting. */
+
+void raToStructArrayLongLongSizer(struct lineFile *lf, long long curSize, 
+    long long *pSize, char *fieldName);
+/* If *pSize is zero,  set it to curSize,  othersize check that it is the same as curSize.
+ * The lf and fieldName are for error reporting. */
+
+#endif /* RATOSTRUCT_H */
diff --git a/gbtools/src/include/blatSrc/rainbow.h b/gbtools/src/include/blatSrc/rainbow.h
new file mode 100644
index 0000000..faa080d
--- /dev/null
+++ b/gbtools/src/include/blatSrc/rainbow.h
@@ -0,0 +1,22 @@
+/* rainbow - stuff to generate rainbow colors. */
+
+#ifndef RAINBOW_H
+#define RAINBOW_H
+
+#ifndef MEMGFX_H
+#include "memgfx.h"
+#endif
+
+struct rgbColor saturatedRainbowAtPos(double pos);
+/* Given pos, a number between 0 and 1, return a saturated rainbow rgbColor
+ * where 0 maps to red,  0.1 is orange, and 0.9 is violet and 1.0 is back to red */
+
+struct rgbColor lightRainbowAtPos(double pos);
+/* Given pos, a number between 0 and 1, return a lightish rainbow rgbColor
+ * where 0 maps to red,  0.1 is orange, and 0.9 is violet and 1.0 is back to red */
+
+struct rgbColor veryLightRainbowAtPos(double pos);
+/* Given pos, a number between 0 and 1, return a light rainbow rgbColor
+ * where 0 maps to red,  0.1 is orange, and 0.9 is violet and 1.0 is back to red */
+
+#endif /* RAINBOW_H */
diff --git a/gbtools/src/include/blatSrc/rangeTree.h b/gbtools/src/include/blatSrc/rangeTree.h
new file mode 100644
index 0000000..7361d02
--- /dev/null
+++ b/gbtools/src/include/blatSrc/rangeTree.h
@@ -0,0 +1,105 @@
+/* rangeTree - This module is a way of keeping track of
+ * non-overlapping ranges (half-open intervals). It is
+ * based on the self-balancing rbTree code.  Use it in
+ * place of a bitmap when the total number of ranges
+ * is significantly smaller than the number of bits would
+ * be. */
+
+#ifndef RANGETREE_H
+#define RANGETREE_H
+
+#ifndef RBTREE_H
+#include "rbTree.h"
+#endif
+
+struct range
+/* An interval in a list of intervals. */
+    {
+    struct range *next;
+    int start,end;	/* Zero based half open interval. */
+    void *val;		/* Some value associated with range. */
+    };
+
+struct rbTree *rangeTreeNew();
+/* Create a new, empty, rangeTree.  Free with rbFreeTree. */
+
+#define rangeTreeFree(a) rbTreeFree(a)
+/* Free up range tree.  */
+
+int rangeCmp(void *va, void *vb);
+/* Return -1 if a before b,  0 if a and b overlap,
+ * and 1 if a after b. */
+
+
+struct range *rangeTreeAddVal(struct rbTree *tree, int start, int end, void *val, void *(*mergeVals)(void *existingVal, void *newVal) );
+/* Add range to tree, merging with existing ranges if need be. 
+ * If this is a new range, set the value to this val.
+ * If there are existing items for this range, and if mergeVals function is not null, 
+ * apply mergeVals to the existing values and this new val, storing the result as the val
+ * for this range (see rangeTreeAddValCount() and rangeTreeAddValList() below for examples). */
+
+struct range *rangeTreeAdd(struct rbTree *tree, int start, int end);
+/* Add range to tree, merging with existing ranges if need be. */
+
+struct range *rangeTreeAddValCount(struct rbTree *tree, int start, int end);
+/* Add range to tree, merging with existing ranges if need be. 
+ * Set range val to count of elements in the range. Counts are pointers to 
+ * ints allocated in tree localmem */
+
+struct range *rangeTreeAddValList(struct rbTree *tree, int start, int end, void *val);
+/* Add range to tree, merging with existing ranges if need be. 
+ * Add val to the list of values (if any) in each range.
+ * val must be valid argument to slCat (ie, be a struct with a 'next' pointer as its first member) */
+
+void rangeTreeAddToCoverageDepth(struct rbTree *tree, int start, int end);
+/* Add area from start to end to a tree that is being built up to store the
+ * depth of coverage.  Recover coverage back out by looking at ptToInt(range->val)
+ * on tree elements. */
+
+boolean rangeTreeOverlaps(struct rbTree *tree, int start, int end);
+/* Return TRUE if start-end overlaps anything in tree */
+
+int rangeTreeOverlapSize(struct rbTree *tree, int start, int end);
+/* Return the total size of intersection between interval
+ * from start to end, and items in range tree. Sadly not
+ * thread-safe.
+ * On 32 bit machines be careful not to overflow
+ * range of start, end or total size return value. */
+
+int rangeTreeOverlapTotalSize(struct rbTree *tree);
+/* Return the total size of all ranges in range tree.
+ * Sadly not thread-safe. 
+ * On 32 bit machines be careful not to overflow
+ * range of start, end or total size return value. */
+
+struct range *rangeTreeFindEnclosing(struct rbTree *tree, int start, int end);
+/* Find item in range tree that encloses range between start and end 
+ * if there is any such item. */
+
+struct range *rangeTreeAllOverlapping(struct rbTree *tree, int start, int end);
+/* Return list of all items in range tree that overlap interval start-end.
+ * Do not free this list, it is owned by tree.  However it is only good until
+ * next call to rangeTreeFindInRange or rangTreeList. Not thread safe. */
+
+struct range *rangeTreeMaxOverlapping(struct rbTree *tree, int start, int end);
+/* Return item that overlaps most with start-end. Not thread safe.  Trashes list used
+ * by rangeTreeAllOverlapping. */
+
+void rangeTreeSumRangeCallback(void *item, void *context);
+/* This is a callback for rbTreeTraverse with context.  It just adds up
+ * end-start */
+
+long long rangeTreeSumRanges(struct rbTree *tree);
+/* Return sum of end-start of all items. */
+
+struct range *rangeTreeList(struct rbTree *tree);
+/* Return list of all ranges in tree in order.  Not thread safe. 
+ * No need to free this when done, memory is local to tree. */
+
+struct rbTree *rangeTreeNewDetailed(struct lm *lm, struct rbTreeNode *stack[128]);
+/* Allocate rangeTree on an existing local memory & stack.  This is for cases
+ * where you want a lot of trees, and don't want the overhead for each one. 
+ * Note, to clean these up, just do freez(&rbTree) rather than rbFreeTree(&rbTree). */
+
+#endif /* RANGETREE_H */
+
diff --git a/gbtools/src/include/blatSrc/rbTree.h b/gbtools/src/include/blatSrc/rbTree.h
new file mode 100644
index 0000000..c42c328
--- /dev/null
+++ b/gbtools/src/include/blatSrc/rbTree.h
@@ -0,0 +1,102 @@
+/* rbTree - rbTreeRed-rbTreeBlack Tree - a type of binary tree which 
+ * automatically keeps relatively balanced during
+ * inserts and deletions.
+ *   original author: Shane Saunders
+ *   adapted into local conventions: Jim Kent
+ */
+#ifndef RBTREE_H
+#define RBTREE_H
+
+typedef enum {rbTreeRed,rbTreeBlack} rbTreeColor;
+
+
+/* Structure type for nodes in the red-black tree. */
+struct rbTreeNode 
+    {
+    struct rbTreeNode *left, *right;		/* Children. */
+    rbTreeColor color;				/* Heart of algorithm. */
+    void *item;					/* Item stored in tree */
+    };
+
+/* Structure type for the red-black tree. */
+struct rbTree 
+    {
+    struct rbTree *next;			/* Next tree in list. */
+    struct rbTreeNode *root;			/* Root of tree */
+    int n;					/* Number of items in tree. */
+    int (* compare)(void *, void *);/* Comparison function */
+    struct rbTreeNode **stack;                  /* Ancestor stack. */
+    struct lm *lm;	                        /* Local memory pool. */
+    struct rbTreeNode *freeList;		/* List of nodes to reuse. */
+    };
+
+struct rbTree *rbTreeNew(int (*compare)(void *, void *));
+/* Allocates space for a red-black tree and returns a pointer
+ * to it.  The function compare compares they keys of two items, and returns a
+ * negative, zero, or positive integer depending on whether the first item is
+ * less than, equal to, or greater than the second. */
+
+void rbTreeFree(struct rbTree **pTree);
+/* Frees space used by the red-black tree pointed to by t. */
+
+void rbTreeFreeList(struct rbTree **pList);
+/* Free up a list of rbTrees. */
+
+struct rbTree *rbTreeNewDetailed(int (*compare)(void *, void *), struct lm *lm, 
+	struct rbTreeNode *stack[128]);
+/* Allocate rbTree on an existing local memory & stack.  This is for cases
+ * where you want a lot of trees, and don't want the overhead for each one. 
+ * Note, to clean these up, just do freez(&rbTree) rather than rbFreeTree(&rbTree). */
+
+void *rbTreeAdd(struct rbTree *t, void *item);
+/* Inserts an item into the red-black tree pointed to by t,
+ * according the the value its key.  The key of an item in the red-black
+ * tree must be unique among items in the tree.  If an item with the same key
+ * already exists in the tree, a pointer to that item is returned.  Otherwise,
+ * NULL is returned, indicating insertion was successful.
+ */
+
+void *rbTreeFind(struct rbTree *t, void *item);
+/* Find an item in the red-black tree with the same key as the
+ * item pointed to by `item'.  Returns a pointer to the item found, or NULL
+ * if no item was found.
+ */
+
+void *rbTreeRemove(struct rbTree *t, void *item);
+/* rbTreeRemove() - Delete an item in the red-black tree with the same key as
+ * the item pointed to by `item'.  Returns a pointer to the  deleted item,
+ * and NULL if no item was found.
+ */
+
+void rbTreeTraverseRange(struct rbTree *tree, void *minItem, void *maxItem,
+	void (*doItem)(void *item));
+/* Apply doItem function to all items in tree such that
+ * minItem <= item <= maxItem */
+
+struct slRef *rbTreeItemsInRange(struct rbTree *tree, void *minItem, void *maxItem);
+/* Return a sorted list of references to items in tree between range.
+ * slFreeList this list when done. */
+
+void rbTreeTraverse(struct rbTree *tree, void (*doItem)(void *item));
+/* Apply doItem function to all items in tree */
+
+void rbTreeTraverseWithContext(struct rbTree *tree, 
+	void (*doItem)(void *item, void *context), void *context);
+/* Traverse tree calling doItem on every item with context pointer passed through to doItem.
+ * This often avoids having to declare global or static variables for the doItem callback to use. */
+
+struct slRef *rbTreeItems(struct rbTree *tree);
+/* Return sorted list of items.  slFreeList this when done.*/
+
+void rbTreeDump(struct rbTree *tree, FILE *f, 
+	void (*dumpItem)(void *item, FILE *f));
+/* Dump out rb tree to file, mostly for debugging. */
+
+int rbTreeCmpString(void *a, void *b);	
+/* Set up rbTree so as to work on strings. */
+
+int rbTreeCmpWord(void *a, void *b);	
+/* Set up rbTree so as to work on case-insensitive strings. */
+
+#endif /* RBTREE_H */
+
diff --git a/gbtools/src/include/blatSrc/regexHelper.h b/gbtools/src/include/blatSrc/regexHelper.h
new file mode 100644
index 0000000..37c5e70
--- /dev/null
+++ b/gbtools/src/include/blatSrc/regexHelper.h
@@ -0,0 +1,29 @@
+/* regexHelper: easy wrappers on POSIX Extended Regular Expressions (man 7 regex, man 3 regex) */
+
+#ifndef REGEXHELPER_H
+#define REGEXHELPER_H
+
+#include "common.h"
+#include <regex.h>
+
+const regex_t *regexCompile(const char *exp, const char *description, int compileFlags);
+/* Compile exp (or die with an informative-as-possible error message).
+ * Cache pre-compiled regex's internally (so don't free result after use). */
+
+boolean regexMatch(const char *string, const char *exp);
+/* Return TRUE if string matches regular expression exp (case sensitive). */
+
+boolean regexMatchNoCase(const char *string, const char *exp);
+/* Return TRUE if string matches regular expression exp (case insensitive). */
+
+boolean regexMatchSubstr(const char *string, const char *exp,
+			 regmatch_t substrArr[], size_t substrArrSize);
+/* Return TRUE if string matches regular expression exp (case sensitive);
+ * regexec fills in substrArr with substring offsets. */
+
+boolean regexMatchSubstrNoCase(const char *string, const char *exp,
+			       regmatch_t substrArr[], size_t substrArrSize);
+/* Return TRUE if string matches regular expression exp (case insensitive);
+ * regexec fills in substrArr with substring offsets. */
+
+#endif // REGEXHELPER_H
diff --git a/gbtools/src/include/blatSrc/repMask.h b/gbtools/src/include/blatSrc/repMask.h
new file mode 100644
index 0000000..6e25563
--- /dev/null
+++ b/gbtools/src/include/blatSrc/repMask.h
@@ -0,0 +1,56 @@
+/* repMask.h was originally generated by the autoSql program, which also 
+ * generated repMask.c and repMask.sql.  This header links the database and the RAM 
+ * representation of objects. */
+
+#ifndef REPMASK_H
+#define REPMASK_H
+
+struct repeatMaskOut
+/* Repeat Masker out format */
+    {
+    struct repeatMaskOut *next;  /* Next in singly linked list. */
+    unsigned score;	/* Smith-Waterman score. */
+    float percDiv;	/* Percentage base divergence. */
+    float percDel;	/* Percentage deletions. */
+    float percInc;	/* Percentage inserts. */
+    char *qName;	/* Name of query. */
+    int qStart;	/* Start query position. */
+    int qEnd;	/* End query position. */
+    char *qLeft;	/* Bases left in query. */
+    char strand[2];	/* Query strand (+ or C) */
+    char *rName;	/* Repeat name */
+    char *rFamily;	/* Repeat name */
+    char *rStart;	/* Start position in repeat. */
+    unsigned rEnd;	/* End position in repeat. */
+    char *rLeft;	/* Bases left in repeat. */
+    };
+
+void repeatMaskOutStaticLoad(char **row, struct repeatMaskOut *ret);
+/* Load a row from repeatMaskOut table into ret.  The contents of ret will
+ * be replaced at the next call to this function. */
+
+struct repeatMaskOut *repeatMaskOutLoad(char **row);
+/* Load a repeatMaskOut from row fetched with select * from repeatMaskOut
+ * from database.  Dispose of this with repeatMaskOutFree(). */
+
+struct repeatMaskOut *repeatMaskOutCommaIn(char **pS);
+/* Create a repeatMaskOut out of a comma separated string. */
+
+void repeatMaskOutFree(struct repeatMaskOut **pEl);
+/* Free a single dynamically allocated repeatMaskOut such as created
+ * with repeatMaskOutLoad(). */
+
+void repeatMaskOutFreeList(struct repeatMaskOut **pList);
+/* Free a list of dynamically allocated repeatMaskOut's */
+
+void repeatMaskOutOutput(struct repeatMaskOut *el, FILE *f, char sep, char lastSep);
+/* Print out repeatMaskOut.  Separate fields with sep. Follow last field with lastSep. */
+
+#define repeatMaskOutTabOut(el,f) repeatMaskOutOutput(el,f,'\t','\n');
+/* Print out repeatMaskOut as a line in a tab-separated file. */
+
+#define repeatMaskOutCommaOut(el,f) repeatMaskOutOutput(el,f,',',',');
+/* Print out repeatMaskOut as a comma separated list including final comma. */
+
+#endif /* REPMASK_H */
+
diff --git a/gbtools/src/include/blatSrc/rle.h b/gbtools/src/include/blatSrc/rle.h
new file mode 100644
index 0000000..7a08188
--- /dev/null
+++ b/gbtools/src/include/blatSrc/rle.h
@@ -0,0 +1,16 @@
+/* rle - byte oriented run length encoding. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#ifndef RLE_H
+#define RLE_H
+
+int rleCompress(void *in, int inSize, signed char *out);
+/* Compress in to out.  Out should be at least inSize * 1.5. 
+ * Returns compressed size. */
+
+void rleUncompress(signed char *in, int inSize, void *out, int outSize);
+/* Uncompress in to out. */
+
+#endif /* RLE_H */
diff --git a/gbtools/src/include/blatSrc/rnautil.h b/gbtools/src/include/blatSrc/rnautil.h
new file mode 100644
index 0000000..4905edb
--- /dev/null
+++ b/gbtools/src/include/blatSrc/rnautil.h
@@ -0,0 +1,55 @@
+/* rnautil.h - functions for dealing with RNA and RNA secondary structure.  */
+#ifndef RNAUTIL_H
+#define RNAUTIL_H
+
+#ifndef COMMON_H
+#include "common.h"
+#endif
+
+extern const char *RNA_PAIRS[];
+/* Null terminated array of rna pairs */
+
+void dna2rna(char *s);
+/* Replace 't' with 'u' and 'T' with 'U'. */
+
+bool rnaPair(char a, char b);
+/* Returns TRUE if a and b can pair, and false otherwise */
+
+void reverseFold(char *s);
+/* Reverse the order of the parenthesis defining an RNA secondary structure annotation. */
+
+void fold2pairingList(char *fold, int len, int **p2pairList);
+/* take a parenthesis string, allocate and return an array of pairing
+   positions: pairList[i] = j <=> i pair with j and pairList[i] = -1
+   <=> i does not pair.*/
+
+void mkPairPartnerSymbols(int * pairList, char * pairSymbols, int size);
+/* Make a symbol string indicating pairing partner */
+
+char * projectString(char * s, char * ref, char refChar, char insertChar);
+/* Insert 'insertChar' in 's' at every positin 'ref' has 'refChar'. */
+
+char * gapAdjustFold(char * s, char * ref);
+/* Insert space in s when there is a gap ('-') in ref. */
+
+int * projectIntArray(int * in, char * ref, char refChar, int insertInt);
+/* Insert 'insertChar' in 's' at every positin 'ref' has 'refChar'. */
+
+int * gapIntArrayAdjust(int * in, char * ref);
+/* Insert space in s when there is a gap ('-') in ref. */
+
+void markCompensatoryMutations(char *s, char *ref, int * pairList, int *markList);
+/* Compares s to ref and pairList and sets values in markList
+ * according to pairing properties. The value of markList[i] specifies
+ * the pairing property of the i'th position. The following values are
+ * used: -1: default; 0: ref[i] = s[i] and both compatible with
+ * pairList, 1: ref[i] != s[i] and both compatible with pairList; 2:
+ * s[i] not compatible with pairList;
+ */
+
+int assignBin(double val, double minVal, double maxVal, int binCount);
+/* Divide range given by minVal and maxVal into maxBin+1 intervals
+   (bins), and return index of the bin val falls into. */
+
+#endif /* RNAUTIL_H */
+
diff --git a/gbtools/src/include/blatSrc/rql.h b/gbtools/src/include/blatSrc/rql.h
new file mode 100644
index 0000000..8dd934f
--- /dev/null
+++ b/gbtools/src/include/blatSrc/rql.h
@@ -0,0 +1,130 @@
+/* rql.h - interface to RQL (Ra Query Language - similar in syntax to SQL) parser and
+ * interpreter. */
+
+#ifndef RQL_H
+#define RQL_H
+
+#ifndef TOKENIZER_H
+#include "tokenizer.h"
+#endif
+
+enum rqlOp
+/* An operation in the parse tree. */
+    {
+    rqlOpUnknown,	/* Should not occur */
+    rqlOpLiteral,        /* Literal string or number. */
+    rqlOpSymbol,	/* A symbol name. */
+
+    /* Type casts. */
+    rqlOpStringToBoolean,	
+    rqlOpIntToBoolean,
+    rqlOpDoubleToBoolean,
+    rqlOpStringToInt,
+    rqlOpDoubleToInt,
+    rqlOpBooleanToInt,
+    rqlOpStringToDouble,
+    rqlOpBooleanToDouble,
+    rqlOpIntToDouble,
+
+    /* Comparisons. */
+    rqlOpEq,	/* An equals comparison */
+    rqlOpNe,	/* A not equals comparison */
+    rqlOpGt,  /* Greater than comparison. */
+    rqlOpLt,  /* Less than comparison. */
+    rqlOpGe,  /* Greater than or equals comparison. */
+    rqlOpLe,  /* Less than or equals comparison. */
+    rqlOpLike, /* SQL wildcard compare. */
+
+    /* Logic ops. */
+    rqlOpAnd,     /* An and */
+    rqlOpOr,      /* An or */
+    rqlOpNot,	  /* A unary not. */
+
+    /* Leading minus. */
+    rqlOpUnaryMinusInt,
+    rqlOpUnaryMinusDouble,
+
+    /* Fancy ops to fetch sub-parts. */
+    rqlOpArrayIx,	/* An array with an index. */
+    };
+
+char *rqlOpToString(enum rqlOp op);
+/* Return string representation of parse op. */
+
+enum rqlType
+/* A type */
+    {
+    rqlTypeBoolean = 1,
+    rqlTypeString = 2,
+    rqlTypeInt = 3,
+    rqlTypeDouble = 4,
+    };
+
+union rqlVal
+/* Some value of arbirary type that can be of any type corresponding to rqlType */
+    {
+    boolean b;
+    char *s;
+    int i;
+    double x;
+    };
+
+struct rqlEval
+/* Result of evaluation of parse tree. */
+    {
+    enum rqlType type;
+    union rqlVal val;
+    };
+
+struct rqlParse
+/* A rql parse-tree. */
+    {
+    struct rqlParse *next;	/* Points to younger sibling if any. */
+    struct rqlParse *children;	/* Points to oldest child if any. */
+    enum rqlOp op;		/* Operation at this node. */
+    enum rqlType type;		/* Return type of this operation. */
+    union rqlVal val;		/* Return value of this operation. */
+    };
+
+struct rqlStatement
+/* A parsed out RQL statement */
+    {
+    char *next;		/* Next in list */
+    char *command;	/* Generally the first word in the statement. */
+    struct slName *fieldList;	/* List of fields if any. */
+    struct slName *tableList;	/* List of tables if any. */
+    struct rqlParse *whereClause;	/* Where clause if any - in parse tree. */
+    struct slName *whereVarList;	/* List of variables used in where clause. */
+    int limit;		/* If >= 0 then limits # of records returned. */
+    };
+
+void rqlValDump(union rqlVal val, enum rqlType type, FILE *f);
+/* Dump out value to file. */
+
+void rqlParseDump(struct rqlParse *p, int depth, FILE *f);
+/* Dump out rqlParse tree and children. */
+
+struct rqlParse *rqlParseExpression(struct tokenizer *tkz);
+/* Parse out a clause, usually a where clause. */
+
+struct rqlStatement *rqlStatementParse(struct lineFile *lf);
+/* Parse an RQL statement out of text */
+
+void rqlStatementFree(struct rqlStatement **pRql);
+/* Free up an rql statement. */
+
+void rqlStatementDump(struct rqlStatement *rql, FILE *f);
+/* Print out statement to file. */
+
+typedef char* (*RqlEvalLookup)(void *record, char *key);
+/* Callback for rqlEvalOnRecord to lookup a variable value. */
+
+struct rqlEval rqlEvalOnRecord(struct rqlParse *p, void *record, RqlEvalLookup lookup,
+	struct lm *lm);
+/* Evaluate parse tree on record, using lm for memory for string operations. */
+
+struct rqlEval rqlEvalCoerceToBoolean(struct rqlEval r);
+/* Return TRUE if it's a nonempty string or a non-zero number. */
+
+#endif /* RQL_H */
+
diff --git a/gbtools/src/include/blatSrc/rudp.h b/gbtools/src/include/blatSrc/rudp.h
new file mode 100644
index 0000000..6bec32e
--- /dev/null
+++ b/gbtools/src/include/blatSrc/rudp.h
@@ -0,0 +1,175 @@
+/* rudp - (semi) reliable UDP communication.  This adds an
+ * acknowledgement and resend layer on top of UDP. 
+ *
+ * UDP is a packet based rather than stream based internet communication 
+ * protocol. Messages sent by UDP are checked for integrety by the UDP layer, 
+ * and discarded if transmission errors are detected.  However packets are
+ * not necessarily received in the same order that they are sent,
+ * and packets may be duplicated or lost.  
+ 
+ * Using rudp packets are only very rarely lost, and the sender is 
+ * notified if they are.  After rudp there are still duplicate
+ * packets that may arrive out of order.  Aside from the duplicates
+ * the packets are in order though.
+ *
+ * For many, perhaps most applications, TCP/IP is a saner choice
+ * than UDP or rudp.  If the communication channel is between just 
+ * two computers you can pretty much just treat TCP/IP as a fairly
+ * reliable pipe.   However if the communication involves many
+ * computers sometimes UDP can be a better choice.  It is possible to
+ * do broadcast and multicast with UDP but not with TCP/IP.  Also
+ * for systems like parasol, where a server may be making and breaking
+ * connections rapidly to thousands of computers, TCP paradoxically
+ * can end up less reliable than UDP.  Though TCP is relatively 
+ * robust when a connection is made,  it can relatively easily fail
+ * to make a connection in the first place, and spend quite a long
+ * time figuring out that the connection can't be made.  Moreover at
+ * the end of each connection TCP goes into a 'TIMED_WAIT' state,  which
+ * prevents another connection from coming onto the same port for a
+ * time that can be as long as 255 seconds.  Since there are only
+ * about 15000 available ports,  this limits TCP/IP to 60 connections
+ * per second in some cases.  Generally the system does not handle
+ * running out of ports gracefully, and this did occur with the 
+ * TCP/IP based version of Parasol.
+ *
+ * This module puts a thin layer around UDP to make it a little bit more
+ * reliable.  Currently the interface is geared towards Parasol rather
+ * than broadcast type applications.  This module will try to send
+ * a message a limited number of times before giving up.  It puts
+ * a small header containing a message ID and timestamp on each message.   
+ * This header is echoed back in acknowledgment by the reciever. This
+ * echo lets the sender know if it needs to resend the message, and
+ * lets it know how long a message takes to get to the destination and
+ * back.  It uses this round trip time information to figure out how
+ * long to wait between resends. 
+ *
+ * Much of this code is based on the 'Adding Reliability to a UDP Application
+ * section in volume I, chapter 20, section 5, of _UNIX Network Programming_
+ * by W. Richard Stevens. */
+
+#ifndef RUDP_H
+#define RUDP_H
+
+#ifndef INTERNET_H
+#include "internet.h"
+#endif
+
+#include "hash.h"
+#include "dlist.h"
+
+struct rudp
+/* A UDP socket and a little bit of stuff to help keep track
+ * of how often we should resend unacknowledged messages. */
+    {
+    int socket;		/* The associated UDP socket. */
+    int rttLast;	/* Last round trip time (RTT) for a message/ack in microseconds. */
+    int rttAve;		/* Approximate average of recent RTTs. */
+    int rttVary;	/* Approximate variation of recent RTTs. */
+    int timeOut;	/* Ideal timeout for next receive. */
+    int receiveCount;	/* Number of packets attempted to receive. */
+    int sendCount;	/* Number of packets attempted to send. */
+    int resendCount;	/* Number of resends. */
+    int failCount;	/* Number of failures. */
+    bits32 lastId;	/* Id number of last message sent. */
+    int maxRetries;	/* Maximum number of retries per message. */
+    bits32 lastIdReceived; /* Id number of last message received. */
+    boolean resend;     /* TRUE if the packet is a re-send */
+    int pid;                 /* sender process id - helps filter out duplicate received packets */
+    int connId;              /* sender conn id - helps filter out duplicate received packets */
+    struct hash *recvHash;   /* hash of data received - helps filter out duplicate received packets */
+    struct dlList *recvList; /* list of data received - helps filter out duplicate received packets */
+    int recvCount;           /* number in list clean */
+    };
+
+enum rudpType
+    {
+    rudpAck = 199,	/* Acknowledge message. */
+    rudpData = 200,	/* Message with some data. */
+    };
+
+struct rudpHeader
+/* The header to a rudp message.  */
+    {
+    bits32 id;		/* Message id.  Returned with ack. */
+    bits32 sendSec;	/* Time sent in seconds.  Returned with ack. */
+    bits32 sendMicro;	/* Time sent microseconds. Returned with ack. */
+    bits8 type;		/* One of rudpType above. */
+    bits8 reserved1;	/* Reserved, always zero for now. */
+    bits8 reserved2;	/* Reserved, always zero for now. */
+    bits8 reserved3;	/* Reserved, always zero for now. */
+    int pid;            /* sender process id - helps filter out duplicate received packets */
+    int connId;         /* sender conn id - helps filter out duplicate received packets */
+    };
+
+struct packetSeen
+/* A packet was last seen when? */
+    {
+    char *recvHashKey;          /* hash key */
+    time_t lastChecked;		/* Last time we checked machine in seconds past 1972 */
+    struct dlNode *node;        /* List node of packetSeen. */
+    };
+
+typedef bits32 rudpHost;  /* The IP address (in host order) of another computer. */
+
+#define udpEthMaxSize 1444
+    /* Max data size that will fit into a single ethernet packet after UDP and IP
+     * headers.  Things are faster & more reliable if you stay below this */
+
+#define rudpMaxSize (udpEthMaxSize - sizeof(struct rudpHeader)  )
+
+struct rudp *rudpNew(int socket);
+/* Wrap a rudp around a socket. Call rudpFree when done, or
+ * rudpClose if you also want to close(socket). */
+
+void rudpFree(struct rudp **pRu);
+/* Free up rudp.  Note this does *not* close the associated socket. */
+
+struct rudp *rudpOpen();
+/* Open up an unbound rudp.   This is suitable for
+ * writing to and for reading responses.  However 
+ * you'll want to rudpOpenBound if you want to listen for
+ * incoming messages.   Call rudpClose() when done 
+ * with this one.  Warns and returns NULL if there is
+ * a problem. */
+
+struct rudp *rudpMustOpen();
+/* Open up unbound rudp.  Warn and die if there is a problem. */
+
+struct rudp *rudpOpenBound(struct sockaddr_in *sai);
+/* Open up a rudp socket bound to a particular port and address.
+ * Use this rather than rudpOpen if you want to wait for
+ * messages at a specific address in a server or the like. */
+
+struct rudp *rudpMustOpenBound(struct sockaddr_in *sai);
+/* Open up a rudp socket bound to a particular port and address
+ * or die trying. */
+
+void rudpClose(struct rudp **pRu);
+/* Close socket and free memory. */
+
+int rudpSend(struct rudp *ru, struct sockaddr_in *sai, void *message, int size);
+/* Send message of given size to port at host via rudp.  Prints a warning and
+ * sets errno and returns -1 if there's a problem. */
+
+int rudpReceive(struct rudp *ru, void *messageBuf, int bufSize);
+/* Read message into buffer of given size.  Returns actual size read on
+ * success. On failure prints a warning, sets errno, and returns -1. */
+
+int rudpReceiveFrom(struct rudp *ru, void *messageBuf, int bufSize, 
+	struct sockaddr_in *retFrom);
+/* Read message into buffer of given size.  Returns actual size read on
+ * success. On failure prints a warning, sets errno, and returns -1. 
+ * Also returns ip address of message source. */
+
+int rudpReceiveTimeOut(struct rudp *ru, void *messageBuf, int bufSize, 
+	struct sockaddr_in *retFrom, int timeOut);
+/* Like rudpReceive from above, but with a timeOut (in microseconds)
+ * parameter.  If timeOut is zero then it will wait forever. */
+
+void rudpPrintStatus(struct rudp *ru);
+/* Print out status info. */
+
+void rudpTest();
+/* Test out rudp stuff. */
+
+#endif /* RUDP_H */
diff --git a/gbtools/src/include/blatSrc/scoreWindow.h b/gbtools/src/include/blatSrc/scoreWindow.h
new file mode 100644
index 0000000..43fec29
--- /dev/null
+++ b/gbtools/src/include/blatSrc/scoreWindow.h
@@ -0,0 +1,7 @@
+/* scoreWindow - find window with most matches to a given char */
+
+/* simple program to find max scoring window representing string of char c in a string s of size size */
+/* index of max score is returned , match and misMatch are the scores to assign, suggested defaults are match=1 and misMatch=1*/
+/* when used for scoring polyA tails, set c='A' for positive strand  or c='T' for neg strand */
+/* start, end are returned pointing to the start and end of the highest scoring window in s */
+int scoreWindow(char c, char *s, int size, int *score, int *start, int *end, int match, int misMatch);
diff --git a/gbtools/src/include/blatSrc/seg.h b/gbtools/src/include/blatSrc/seg.h
new file mode 100644
index 0000000..940639c
--- /dev/null
+++ b/gbtools/src/include/blatSrc/seg.h
@@ -0,0 +1,109 @@
+/* seg.h - Segment file format. */
+#ifndef SEG_H
+#define SEG_H
+
+#include "common.h"
+
+struct segComp
+/* A genomic segment. */
+	{
+	struct segComp *next;
+	char *src;		/* Name of segment source. */
+	int start;		/* Start of segment. Zero based. If strand is - it is */
+					/*   relative to source end.*/
+	int size;		/* Size of segment. */
+	char strand;	/* Strand of segment. Either + or -. */
+	int srcSize;	/* Size of segment source. */
+	};
+
+struct segBlock
+/* A list of genomic segments. */
+	{
+	struct segBlock *next;
+	struct segBlock *prev;
+	char *name;					/* Name of this segment list. */
+	int val;					/* Integer value for this segment list. */
+	struct segComp *components;	/* List of segments in this segment list. */
+	};
+
+struct segFile
+/* A file full of genomic segments. */
+	{
+	struct segFile *next;
+	int version;				/* segFile version. */
+	struct segBlock *blocks;	/* Possibly empty list of segment blocks. */
+	struct lineFile *lf;		/* Open lineFile if any. */
+	};
+
+void segCompFree(struct segComp **pObj);
+/* Free up a segment component. */
+
+void segCompFreeList(struct segComp **pList);
+/* Free up a list of segment components. */
+
+void segBlockFree(struct segBlock **pObj);
+/* Free up a segment block. */
+
+void segBlockFreeList(struct segBlock **pList);
+/* Free up a list of segment blocks. */
+
+void segFileFree(struct segFile **pObj);
+/* Free up a segment file including closing file handle if necessary. */
+
+void segFileFreeList(struct segFile **pList);
+/* Free up a list of segment files. */
+
+struct segFile *segMayOpen(char *fileName);
+/* Open up a segment file for reading. Read header and verify. Prepare
+ * for subsequent calls to segNext(). Return NULL if file does not exist. */
+
+struct segFile *segOpen(char *fileName);
+/* Like segMayOpen() above, but prints an error message and aborts if
+ * there is a problem. */
+
+void segRewind(struct segFile *sf);
+/* Seek to beginning of open segment file */
+
+struct segBlock *segNextWithPos(struct segFile *sf, off_t *retOffset);
+/* Return next segment in segment file or NULL if at end. If retOffset
+ * is not NULL, return start offset of record in file. */
+
+struct segBlock *segNext(struct segFile *sf);
+/* Return next segment in segment file or NULL if at end.  This will
+ * close the open file handle at the end as well. */
+
+struct segFile *segReadAll(char *fileName);
+/* Read in full segment file */
+
+void segWriteStart(FILE *f);
+/* Write segment file header to the file. */
+
+void segWrite(FILE *f, struct segBlock *block);
+/* Write next segment block to the file. */
+
+void segWriteEnd(FILE *f);
+/* Write segment file end tag to the file. */
+
+struct segComp *segMayFindCompSpecies(struct segBlock *sb, char *src,
+	char sepChar);
+/* Find component with a source that matches src up to and possibly
+   including sepChar. Return NULL if not found. */
+
+struct segComp *segFindCompSpecies(struct segBlock *sb, char *src,
+	char sepChar);
+/* Find component with a source that matches src up to and possibly
+   including sepChar or die trying. */
+
+struct segComp *cloneSegComp(struct segComp *sc);
+/* Return a copy of the argument segment component. */
+
+char *segFirstCompSpecies(struct segBlock *sb, char sepChar);
+/* Return the species possibly followed by sepChar of the first component
+   of the argument block. Return NULL if the block has no components. */
+
+struct slName *segSecSpeciesList(struct segBlock *sb, struct segComp *refComp,
+	char sepChar);
+/* Return a name list containing the species possibly followed by sepChar
+of all components other than refComp on the block. */
+
+#endif /* SEG_H */
diff --git a/gbtools/src/include/blatSrc/seqOut.h b/gbtools/src/include/blatSrc/seqOut.h
new file mode 100644
index 0000000..f3daf29
--- /dev/null
+++ b/gbtools/src/include/blatSrc/seqOut.h
@@ -0,0 +1,91 @@
+/* seqOut - stuff to output sequences and alignments in web 
+ * or ascii viewable form. */
+
+
+struct cfm
+/* Colored web character output formatter. */
+    {
+    int wordLen;	/* Number of characters between spaces (often 10) */
+    int lineLen;        /* Number of characters between lines (often 50) */
+    int inWord, inLine; /* Position in word and line. */
+    bool lineNumbers;   /* True if write position at end of line. */
+    bool countDown;     /* True if want numbers counting down. */
+    long charCount;     /* Number of characters written total. */
+    FILE *out;          /* File to write to. */
+    int numOff;         /* Number to start with. */
+    int color;          /* Cache last color here. */
+    bool underline;	/* Underline? */
+    bool bold;		/* Font in bold. */
+    bool italic;	/* Italic? */
+    };
+
+struct cfm *cfmNew(int wordLen, int lineLen, 
+	boolean lineNumbers, boolean countDown, FILE *out, int numOff);
+/* Set up colored sequence formatting for html. */
+
+void cfmOut(struct cfm *cfm, char c, int color);
+/* Write out a byte, and depending on color formatting extras  */
+
+void cfmOutExt(struct cfm *cfm, char c, int color, boolean underline, boolean bold, boolean italic);
+/* Write out a byte, and formatting extras  */
+
+void cfmFree(struct cfm **pCfm);
+/* Finish and free up cfm formatting job. */
+
+enum seqOutColor
+/* Symbolic color for sequence output. */
+    {
+    socBlack = 0,		/* Not aligning. */
+    socBlue = 1,		/* Aligning. */
+    socBrightBlue = 2,		/* End of an aligning block. */
+    socRed = 3, 		/* Aligning UTR. */
+    socOrange = 4,		/* End of an aligning UTR block. */
+    };
+extern int seqOutColorLookup[];		/* Converts these to html format colors. */
+
+struct baf
+/* Block allignment formatter. */
+    {
+    char nChars[256];
+    char hChars[256];
+    int cix;
+    int nLineStart;
+    int hLineStart;
+    int nCurPos;
+    int hCurPos;
+    DNA *needle, *haystack;
+    int nNumOff, hNumOff;
+    FILE *out;
+    int lineSize;
+    bool hCountDown;     /* True if want numbers counting down. */
+    bool isTrans;	 /* True if haystack is translated. */
+    bool nCountDown;	 /* True if want needle numbers counting down. */
+    };
+
+void bafInit(struct baf *baf, DNA *needle, int nNumOff, boolean nCountDown,
+	DNA *haystack, int hNumOff, boolean hCountDown, 
+	FILE *out, int lineSize, boolean isTrans);
+/* Initialize block alignment formatter. */
+
+void bafSetAli(struct baf *baf, struct ffAli *ali);
+/* Set up block formatter around an ffAli block. */
+
+void bafSetPos(struct baf *baf, int nStart, int hStart);
+/* Set up block formatter starting at nStart/hStart. */
+
+void bafStartLine(struct baf *baf);
+/* Set up block formatter to start new line at current position. */
+
+void bafWriteLine(struct baf *baf);
+/* Write out a line of an alignment (which takes up
+ * three lines on the screen. */
+
+void bafOut(struct baf *baf, char n, char h);
+/* Write a pair of character to block alignment. */
+
+void bafFlushLineNoHr(struct baf *baf);
+/* Write out alignment line if it has any characters in it (no <HR>). */
+
+void bafFlushLine(struct baf *baf);
+/* Write out alignment line if it has any characters in it, and an <HR>. */
+
diff --git a/gbtools/src/include/blatSrc/seqStats.h b/gbtools/src/include/blatSrc/seqStats.h
new file mode 100644
index 0000000..427804a
--- /dev/null
+++ b/gbtools/src/include/blatSrc/seqStats.h
@@ -0,0 +1,11 @@
+/* seqStats - some sequence statistics functions that need
+ * math libraries. */
+
+#ifndef SEQSTATS_H
+#define SEQSTATS_H
+
+double dnaMatchEntropy(DNA *query, DNA *target, int baseCount);
+/* Return entropy of matching bases - a number between 0 and 1, with
+ * higher numbers the more diverse the matching bases. */
+
+#endif /* SEQSTATS_H */
diff --git a/gbtools/src/include/blatSrc/shaRes.h b/gbtools/src/include/blatSrc/shaRes.h
new file mode 100644
index 0000000..07a1a10
--- /dev/null
+++ b/gbtools/src/include/blatSrc/shaRes.h
@@ -0,0 +1,45 @@
+/* Shared Resource file 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#ifndef SHARES_H
+#define SHARES_H
+
+struct shaResNode
+/* A shared resource node. */
+    {
+    struct shaResNode *next;
+    struct shaResNode *prev;
+    int links;
+    char *name;
+    struct shaResList *list;
+    void *data;
+    };
+
+struct shaResList
+/* A shared resource list. */
+    {
+    struct shaResNode *head;
+    void (*freeData)(void *pData);
+    };
+
+
+void shaUnlink(struct shaResNode *node);
+/* Decrement link count and free if down to zero. */
+
+void shaLink(struct shaResNode *node);
+/* Increment link count. */
+
+struct shaResNode *shaNewNode(struct shaResList *list, char *name, void *data);
+/* Create a new node with link count of one. */
+
+void shaCleanup(struct shaResList *list);
+/* Free every node on list. */
+
+void shaInit(struct shaResList *list, void (*freeData)(void *pData));
+/* Start up resource list. */
+#endif /* SHARES_H */
+
+
+
diff --git a/gbtools/src/include/blatSrc/sig.h b/gbtools/src/include/blatSrc/sig.h
new file mode 100644
index 0000000..881cdde
--- /dev/null
+++ b/gbtools/src/include/blatSrc/sig.h
@@ -0,0 +1,101 @@
+/*****************************************************************************
+ * Copyright (C) 2000 Jim Kent.  This source code may be freely used         *
+ * for personal, academic, and non-profit purposes.  Commercial use          *
+ * permitted only by explicit agreement with Jim Kent (jim_kent at pacbell.net) *
+ *****************************************************************************/
+/* Sig.h - signatures that start various binary files. */
+#ifndef SIG_H
+#define SIG_H
+
+#define aliSig 0xCDAB8245
+/* Binary alignment file. */
+
+#define alxSig 0xA1B1C1D3
+/* Index into binary alignment file, sorted by start base offset. */
+
+#define pgoSig 0x690
+/* Index into GDF file, sorted by start base offset. Signature is 32 bit. */
+
+#define cdoSig 0xCD01
+/* Index into c2g text file, sorted by start base offset. 32 bit signature. */
+
+#define xaoSig 0xA0B0C0D0
+/* Index into xeno alignment, sorted by start base offset.  32 bit signature. */
+
+#define glSig 0xF1E2D3C4
+/* Binary gene file, sorted by chromosome and then starting offset. */
+
+/* IX sig is int ixSig[4] = {0x693F8ED1, 0x7EDA1C32, 0x4BA58983, 0x277CB89C,};
+ * These are made by snofMake, and are indexes sorted by name. */
+
+/* XI - same as IX but on big-endian (or is it little-endian) archetectures. */
+
+#define nt4Signature 0x12345678
+/* Signature at the beginning of an nt4 file - 2 bit a nucleotide binary file. */
+
+#define lm2Signature 0x12131416
+/* Signature at the beginning of a lm2 file - a 2nd order markov model for nucleotides. */
+
+#define oocSig 0x584155f2
+/* Signature of file that contains over-represented oligomers for patSpace
+ * algorithm. */
+
+#define oocSigSwapped 0xf2554158
+/* Signature of file that contains over-represented oligomers for patSpace
+ * algorithm. */
+
+#define fofSig 0x13410da8
+/* Signature into fof type index file (that can index multiple external files). */
+
+#define nibSig 0x6BE93D3A
+/* Signature into nib file (4 bits per nucleotide DNA file) */
+
+#define qacSig 0x32b67998
+/* Signature of qac file (compressed quality file) */
+
+#define caqSig 0x9879b632
+/* Signature of byte-swapped qac file. */
+
+#define twoBitSig 0x1A412743
+/* Signature into 2bit file (2 bits per nucleotide DNA file) plus
+ * information on N and masked bases. */
+
+#define twoBitSwapSig 0x4327411A
+/* Signature of byte-swapped two-bit file. */
+
+#define chromGraphSig 0x4528421C
+/* Signature of chromGraph binary data file */
+
+#define chromGraphSwapSig 0x1C422845
+/* Signature of byte-swapped chromGraph binary data file */
+
+#define genomeRangeTreeSig     0xf7fb8104
+/* Signature of genomeRangeTree binary data file */
+
+#define genomeRangeTreeSwapSig 0x0481fbf7
+/* Signature of genomeRangeTree binary data file */
+
+#define bptSig 0x78CA8C91
+/* Signature of generic b+ tree index file. */
+
+#define bptSwapped 0x918CCA78
+/* Signature of generic b+ tree index file. */
+
+#define cirTreeSig 0x2468ACE0
+/* Signature of a chromosome id r-tree index file. */
+
+#define crTreeSig 0x2369ADE1
+/* Signature of a chromosome r-tree index file. */
+
+#define bigWigSig 0x888FFC26
+/* Signature for a big wig file. */
+
+#define bigBedSig 0x8789F2EB
+/* Signature for a big bed file. */
+
+#define udcBitmapSig 0x4187E2F6
+/* Signature for a url data cache bitmap file. */
+
+#endif /* SIG_H */
+
+
diff --git a/gbtools/src/include/blatSrc/slog.h b/gbtools/src/include/blatSrc/slog.h
new file mode 100644
index 0000000..5563606
--- /dev/null
+++ b/gbtools/src/include/blatSrc/slog.h
@@ -0,0 +1,18 @@
+/* slog - fixed point scaled logarithm stuff. */
+#ifndef SLOG_H
+#define SLOG_H
+
+extern double fSlogScale;	/* Convert to fixed point by multiplying by this. */
+extern double invSlogScale;	/* To convert back to floating point use this. */
+
+int slog(double val);
+/* Return scaled log. */
+
+int carefulSlog(double val);
+/* Returns scaled log that makes sure there's no int overflow. */
+
+double invSlog(int scaledLog);
+/* Inverse of slog. */
+
+#endif /* SLOG_H */
+
diff --git a/gbtools/src/include/blatSrc/snof.h b/gbtools/src/include/blatSrc/snof.h
new file mode 100644
index 0000000..dfeec55
--- /dev/null
+++ b/gbtools/src/include/blatSrc/snof.h
@@ -0,0 +1,60 @@
+/*****************************************************************************
+ * Copyright (C) 2000 Jim Kent.  This source code may be freely used         *
+ * for personal, academic, and non-profit purposes.  Commercial use          *
+ * permitted only by explicit agreement with Jim Kent (jim_kent at pacbell.net) *
+ *****************************************************************************/
+/* snof.h - Sorted Name Offset File - stuff to handle a simple
+ * indexed file.
+ *
+ * This accesses a file of name/offset pairs that are sorted by
+ * name.  Does a binary search of file to find the offset given name.
+ * Most typically this is used to do a quick lookup given an index file. 
+ */ 
+
+struct snof
+/* Sorted Name Offset File structure.  Get one from snofOpen.  Use
+ * with snofFindOffset.  Finish up with snofClose. */
+    {
+    FILE *file;
+    int maxNameSize;
+    int itemSize;
+    int headSize;
+    int endIx;
+    char *first;
+    char *last;
+    char *less;
+    char *mid;
+    char *more;
+    };
+
+struct snof *snofOpen(char *indexName);
+/* Open up the index file.  Returns NULL if there's any problem. */
+
+struct snof *snofMustOpen(char *indexName);
+/* Open up index file or die. */
+
+void snofClose(struct snof **pSnof);
+/* Close down the index file. */
+
+int snofElementCount(struct snof *snof);
+/* How many names are in snof file? */
+
+long snofOffsetAtIx(struct snof *snof, int ix);
+/* The offset of a particular index in file. */
+
+char *snofNameAtIx(struct snof *snof, int ix);
+/* The name at a particular index in file.  (This will be overwritten by
+ * later calls to snof system. Strdup if you want to keep it.)
+ */
+
+void snofNameOffsetAtIx(struct snof *snof, int ix, char **pName, long *pOffset);
+/* Get both name and offset for an index. */
+
+boolean snofFindFirstStartingWith(struct snof *snof, char *prefix, int prefixSize,
+    int *pSnofIx);
+/* Find first index in snof file whose name begins with prefix. */
+
+boolean snofFindOffset(struct snof *snof, char *name, long *pOffset);
+/* Find offset corresponding with name.  Returns FALSE if no such name
+ * in the index file. */
+
diff --git a/gbtools/src/include/blatSrc/snofmake.h b/gbtools/src/include/blatSrc/snofmake.h
new file mode 100644
index 0000000..406d04f
--- /dev/null
+++ b/gbtools/src/include/blatSrc/snofmake.h
@@ -0,0 +1,35 @@
+/*****************************************************************************
+ * Copyright (C) 2000 Jim Kent.  This source code may be freely used         *
+ * for personal, academic, and non-profit purposes.  Commercial use          *
+ * permitted only by explicit agreement with Jim Kent (jim_kent at pacbell.net) *
+ *****************************************************************************/
+
+boolean snofMakeIndex(FILE *inFile, char *outName, 
+    boolean (*nextRecord)(FILE *inFile, void *data, char **rName, int *rNameLen), 
+    void *data);
+/* Make an index file - name/offset pairs that are sorted by name.
+ * Inputs:
+ *     inFile - open file that you're indexing with header read and verified.
+ *     outName - name of index file to create
+ *     nextRecord - function that reads next record in file you're indexing
+ *                  and returns the name of that record.  Returns FALSE at
+ *                  end of file.  Can set *rNameLen to zero you want indexer
+ *                  to ignore the record. 
+ *     data - void pointer passed through to nextRecord.
+ *
+ * Writes diagnostic output to stderr and returns FALSE if there's a problem.
+ */
+
+boolean snofDupeOkIndex(FILE *inFile, char *outName, 
+    boolean (*nextRecord)(FILE *inFile, void *data, char **rName, int *rNameLen), 
+    void *data, boolean dupeOk);
+/* Make an index file, as in snofMakeIndex, but optionally allow duplicates
+ * without complaining. */
+
+void snofSignature(char **rSig, int *rSigSize);
+/* The get signature that should be at start of a snof indexed 
+ * file. */
+
+boolean isSnofSig(void *sig);
+/* Return true if sig is right. */
+
diff --git a/gbtools/src/include/blatSrc/spaceSaver.h b/gbtools/src/include/blatSrc/spaceSaver.h
new file mode 100644
index 0000000..ea23473
--- /dev/null
+++ b/gbtools/src/include/blatSrc/spaceSaver.h
@@ -0,0 +1,65 @@
+/*****************************************************************************
+ * Copyright (C) 2000 Jim Kent.  This source code may be freely used         *
+ * for personal, academic, and non-profit purposes.  Commercial use          *
+ * permitted only by explicit agreement with Jim Kent (jim_kent at pacbell.net) *
+ *****************************************************************************/
+/* spaceSaver - routines that help layout 1-D objects into a
+ * minimum number of tracks so that no two objects overlap
+ * within a single track. */
+#ifndef SPACESAVER_H
+#define SPACESAVER_H
+
+struct spaceSaver
+/* Help layout 1-D objects onto multiple tracks so that
+ * no two objects overlap on a single track. */
+    {
+    struct spaceSaver *next;	/* Next in list. */
+    struct spaceNode *nodeList; /* List of things put in space saver. */
+    struct spaceRowTracker *rowList; /* List of rows. */
+    int rowCount;             /* Number of rows. */
+    int winStart,winEnd;      /* Start and end of area we're modeling. */
+    int cellsInRow;           /* Number of cells per row. */
+    double scale;             /* What to scale by to get to cell coordinates. */
+    int maxRows;	      /* Maximum number of rows.  */
+    boolean isFull;	      /* Set to true if can't fit data into maxRows. */
+    };
+
+struct spaceNode
+/* Which row is this one on? */
+    {
+    struct spaceNode *next;	/* Next in list. */
+    int row;			/* Which row, starting at zero. */
+    void *val;
+    };
+
+struct spaceRowTracker 
+/* Keeps track of how much of row is used. */
+    {
+    struct spaceRowTracker *next;	/* Next in list. */
+    bool *used;                 /* A flag for each spot used. */
+    };
+
+struct spaceSaver *spaceSaverMaxCellsNew(int winStart, int winEnd, int maxRows, int maxCells);
+/* Create a new space saver around the given window.   */
+
+struct spaceSaver *spaceSaverNew(int winStart, int winEnd, int maxRows);
+/* Create a new space saver around the given window.   */
+
+void spaceSaverFree(struct spaceSaver **pSs);
+/* Free up a space saver. */
+
+struct spaceNode *spaceSaverAdd(struct spaceSaver *ss, int start, int end, void *val);
+/* Add a new node to space saver. */
+
+
+struct spaceNode *spaceSaverAddOverflow(struct spaceSaver *ss, int start, int end, 
+					void *val, boolean allowOverflow);
+/* Add a new node to space saver. Returns NULL if can't fit item in
+ * and allowOverflow == FALSE. If allowOverflow == TRUE then put items
+ * that won't fit in first row (ends up being last row after
+ * spaceSaverFinish()). */
+
+void spaceSaverFinish(struct spaceSaver *ss);
+/* Tell spaceSaver done adding nodes. */
+#endif /* SPACESAVER_H */
+
diff --git a/gbtools/src/include/blatSrc/spacedColumn.h b/gbtools/src/include/blatSrc/spacedColumn.h
new file mode 100644
index 0000000..f294c0a
--- /dev/null
+++ b/gbtools/src/include/blatSrc/spacedColumn.h
@@ -0,0 +1,46 @@
+/* spacedColumn - stuff to handle parsing text files where fields are
+ * fixed width rather than tab delimited. */
+
+#ifndef SPACEDCOLUMN_H
+#define SPACEDCOLUMN_H
+
+struct spacedColumn
+/* Specs on a column. */
+    {
+    struct spacedColumn *next;
+    int start;	/* Starting index. */
+    int size;	/* Size of column. */
+    };
+
+#define spacedColumnFreeList slFreeList
+
+struct spacedColumn *spacedColumnFromWidthArray(int array[], int size);
+/* Return a list of spaced columns corresponding to widths in array.
+ * The final char in each column should be whitespace. */
+
+struct spacedColumn *spacedColumnFromSample(char *sample);
+/* Return spaced column list from a sample line , which is assumed to
+ * have no spaces except between columns */
+
+struct spacedColumn *spacedColumnFromSizeCommaList(char *commaList);
+/* Given an comma-separated list of widths in ascii, return
+ * a list of spacedColumns. */
+
+struct spacedColumn *spacedColumnFromLineFile(struct lineFile *lf);
+/* Scan through lineFile and figure out column spacing. Assumes
+ * file contains nothing but columns. */
+
+struct spacedColumn *spacedColumnFromFile(char *fileName);
+/* Read file and figure out where columns are. */
+
+int spacedColumnBiggestSize(struct spacedColumn *colList);
+/* Return size of biggest column. */
+
+boolean spacedColumnParseLine(struct spacedColumn *colList, 
+	char *line, char *row[]);
+/* Parse line into row according to colList.  This will
+ * trim leading and trailing spaces. It will write 0's
+ * into line.  Returns FALSE if there's a problem (like
+ * line too short.) */
+
+#endif /* SPACEDCOLUMN_H */
diff --git a/gbtools/src/include/blatSrc/spacedSeed.h b/gbtools/src/include/blatSrc/spacedSeed.h
new file mode 100644
index 0000000..8548790
--- /dev/null
+++ b/gbtools/src/include/blatSrc/spacedSeed.h
@@ -0,0 +1,19 @@
+/* spacedSeed - stuff to help with spaced seeds for alignments. */
+
+#ifndef SPACEDSEED_H
+#define SPACEDSEED_H
+
+extern char *spacedSeeds[];
+/* Array of spaced seeds in format with '1' for cares, '0' for don't care. */
+
+int spacedSeedMaxWeight();
+/* Return max weight of spaced seed. */
+
+int *spacedSeedOffsets(int weight);
+/* Return array with offsets for seed of given weight. */
+
+int spacedSeedSpan(int weight);
+/* Return span of seed of given weight */
+
+#endif /*SPACEDSEED_H */
+
diff --git a/gbtools/src/include/blatSrc/splatAli.h b/gbtools/src/include/blatSrc/splatAli.h
new file mode 100644
index 0000000..002c70b
--- /dev/null
+++ b/gbtools/src/include/blatSrc/splatAli.h
@@ -0,0 +1,80 @@
+/* splatAli.h was originally generated by the autoSql program, which also 
+ * generated splatAli.c and splatAli.sql.  This header links the database and
+ * the RAM representation of objects. */
+/* This file is copyright 2008 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#ifndef SPLATALI_H
+#define SPLATALI_H
+
+#define SPLATALI_NUM_COLS 7
+
+struct splatAli
+/* A parsed out splat format alignment. */
+    {
+    struct splatAli *next;  /* Next in singly linked list. */
+    char *chrom;	/* Chromosome mapped to */
+    int chromStart;	/* Start position in chromosome (zero based) */
+    int chromEnd;	/* End position in genome (one based) */
+    char *alignedBases;	/* Tag bases - in upper case for match, -/^ for insert/delete */
+    int score;	/* Mapping score. 1000/placesMapped */
+    char strand[2];	/* + or - for strand */
+    char *readName;	/* Name of read */
+    };
+
+void splatAliStaticLoad(char **row, struct splatAli *ret);
+/* Load a row from splatAli table into ret.  The contents of ret will
+ * be replaced at the next call to this function. */
+
+struct splatAli *splatAliLoad(char **row);
+/* Load a splatAli from row fetched with select * from splatAli
+ * from database.  Dispose of this with splatAliFree(). */
+
+struct splatAli *splatAliLoadAll(char *fileName);
+/* Load all splatAli from whitespace-separated file.
+ * Dispose of this with splatAliFreeList(). */
+
+struct splatAli *splatAliLoadAllByChar(char *fileName, char chopper);
+/* Load all splatAli from chopper separated file.
+ * Dispose of this with splatAliFreeList(). */
+
+#define splatAliLoadAllByTab(a) splatAliLoadAllByChar(a, '\t');
+/* Load all splatAli from tab separated file.
+ * Dispose of this with splatAliFreeList(). */
+
+struct splatAli *splatAliCommaIn(char **pS, struct splatAli *ret);
+/* Create a splatAli out of a comma separated string. 
+ * This will fill in ret if non-null, otherwise will
+ * return a new splatAli */
+
+void splatAliFree(struct splatAli **pEl);
+/* Free a single dynamically allocated splatAli such as created
+ * with splatAliLoad(). */
+
+void splatAliFreeList(struct splatAli **pList);
+/* Free a list of dynamically allocated splatAli's */
+
+void splatAliOutput(struct splatAli *el, FILE *f, char sep, char lastSep);
+/* Print out splatAli.  Separate fields with sep. Follow last field with lastSep. */
+
+#define splatAliTabOut(el,f) splatAliOutput(el,f,'\t','\n');
+/* Print out splatAli as a line in a tab-separated file. */
+
+#define splatAliCommaOut(el,f) splatAliOutput(el,f,',',',');
+/* Print out splatAli as a comma separated list including final comma. */
+
+/* -------------------------------- End autoSql Generated Code -------------------------------- */
+
+int splatAliCmpReadName(const void *va, const void *vb);
+/* Compare two based on readName. Also separate secondarily on chrom position. */
+
+int splatAliScore(char *ali);
+/* Score splat-encoded alignment. */
+
+void splatAliLookForBest(struct splatAli *start, struct splatAli *end, 
+	int *retBestScore, int *retBestCount);
+/* Scan through list from start up to but not including end (which may be NULL)
+ * and figure out best score and number of elements in list with that score. */
+
+#endif /* SPLATALI_H */
+
diff --git a/gbtools/src/include/blatSrc/splix.h b/gbtools/src/include/blatSrc/splix.h
new file mode 100644
index 0000000..fabd4f0
--- /dev/null
+++ b/gbtools/src/include/blatSrc/splix.h
@@ -0,0 +1,80 @@
+/* splix - splat (speedy local alignment tool)  index.  Index that helps map short reads
+ * quickly to the genome. */
+/* This file is copyright 2008 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#ifndef SPLIX_H
+#define SPLIX_H
+
+struct splixFileHeader
+/* Short read index file binary file header.  A splix file starts with this fixed 128 byte
+ * structure.  It is followed by the following sections:
+ *    chromosome name strings - zero terminated
+ *    chromosome sizes (32 bits each)
+ *    chromosome DNA - one byte per base lower case.  A zero between each chrom.
+ *    indexSlotSizes (4^^12 32 bit words containing size of each index slot
+ *    indexSlots - explained more below
+ * Each of these sections is padded with zeroes to end on an 8 byte (64 bit) boundary.
+ * The index section consists of 4^^12 (16 million roughly) index slots.  Each slot 
+ * corresponds to a DNA 12-mer.  The format of a slot is:
+ *    hexesBefore1 - size # of 16 bit words, each containing 6 bases of DNA 2 bits/base 
+ *                   and 4 bits of zero (most significant bits are zero).  These represent
+ *                   the sixmers found before the 12-mer.  They are sorted numerically.
+ *    hexesBefore2 - as hexesBefore, but contains sixmer six before the 12-mer.
+ *    hexesAfter1 - sixmers after the 12-mer.
+ *    hexesAfter2 - sixmers six after the 12-mer.
+ *    offsetsBefore1 - 32 bit offsets into indexed DNA corresponding with hexBefore1
+ *    offsetsBefore2 - 32 bit offsets into indexed DNA corresponding with hexBefore2
+ *    offsetsAfter1 - 32 bit offsets corresponding ith hexesAfter1
+ *    offsetsAfter2 - 32 bit offsets corresponding ith hexesAfter2
+ * The splix files are structured so that they can be memory mapped relatively easily,
+ * and so that on program load, and for a particular read, most of the action happens
+ * in a few isolated piece of memory rather than scattered all over. */
+    {
+    bits32 magic;	/* Always SPLIX_MAGIC */
+    bits16 majorVersion; /* This version changes when backward compatibility breaks. */
+    bits16 minorVersion; /* This version changes whenever a feature is added. */
+    bits64 size;	/* Total size to memmap, including header. */
+    bits32 chromCount;	/* Total count of chromosomes/contigs in file. */
+    bits32 chromNamesSize;	/* Size of names of all contigs (including zeroes at end),
+    				   padded to 8 byte boundary as needed). */
+    bits64 basesIndexed;/* Total number of bases actually indexed (non-N, unmasked). */
+    bits64 dnaDiskSize;	/* Size of DNA on disk including zero separators and 8 byte padding */
+    bits64 reserved[11];/* All zeroes for now. */
+    };
+
+struct splix 
+/* Short read index in memory */
+    {
+    struct splix *next;
+    boolean isMapped;	/* True if memory mapped. */
+    struct splixFileHeader *header;	/* File header. */
+    char **chromNames;	/* Name of each chromosome. */
+    bits32 *chromSizes;    /* Size of each chromosome.  No deallocation required (in memmap) */
+    bits32 *chromOffsets;	/* Offset of each chromosome's DNA */
+    char *allDna;	/* All DNA from each contig/chromosome with zero separators. */
+    bits32 *slotSizes;	/* 4^^12 array of slot sizes.  No deallocation required (in memmap) */
+    char **slots;  	/* 16 M slots corresponding to 12 bases. Actual format of slot is
+                         * explained in indexSlots section of splixFileHeader */
+    };
+
+#define splixSlotCount (1<<(12*2))
+#define splixMinQuerySize 24
+
+struct splix *splixRead(char *fileName, boolean memoryMap);
+/* Read in a splix from a file.  Does this via memory mapping if you like,
+ * which will be faster typically for about 100 reads, and slower for more
+ * than that (_much_ slower for thousands of reads and more). */
+
+void splixFree(struct splix **pSplix);
+/* Free up resources associated with index. */
+
+int splixOffsetToChromIx(struct splix *splix, bits32 tOffset);
+/* Figure out index of chromosome containing tOffset */
+
+/** Stuff to define SPLIX files **/
+#define SPLIX_MAGIC 0x5616A283	/* Magic number at start of SPLIX file */
+#define SPLIX_MAJOR_VERSION 0	
+#define SPLIX_MINOR_VERSION 0
+
+#endif /* SPLIX_H */
diff --git a/gbtools/src/include/blatSrc/sqlList.h b/gbtools/src/include/blatSrc/sqlList.h
new file mode 100644
index 0000000..1de0832
--- /dev/null
+++ b/gbtools/src/include/blatSrc/sqlList.h
@@ -0,0 +1,142 @@
+/* Stuff for processing comma separated lists .
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#ifndef SQLLIST_H
+#define SQLLIST_H
+struct hash;
+
+int sqlDoubleArray(char *s, double *array, int maxArraySize);
+int sqlFloatArray(char *s, float *array, int maxArraySize);
+int sqlUnsignedArray(char *s, unsigned *array, int maxArraySize);
+int sqlSignedArray(char *s, int *array, int maxArraySize);
+int sqlShortArray(char *s, short *array, int arraySize);
+int sqlUshortArray(char *s, unsigned short *array, int arraySize);
+int sqlByteArray(char *s, signed char *array, int arraySize);
+int sqlUbyteArray(char *s, unsigned char *array, int arraySize);
+int sqlCharArray(char *s, char *array, int arraySize);
+int sqlLongLongArray(char *s, long long *array, int arraySize);
+/* Convert comma separated list of numbers to an array.  Pass in 
+ * array and max size of array.  Returns actual array size.*/
+
+void sqlDoubleStaticArray(char *s, double **retArray, int *retSize);
+void sqlFloatStaticArray(char *s, float **retArray, int *retSize);
+void sqlUnsignedStaticArray(char *s, unsigned **retArray, int *retSize);
+void sqlSignedStaticArray(char *s, int **retArray, int *retSize);
+void sqlShortStaticArray(char *s, short **retArray, int *retSize);
+void sqlUshortStaticArray(char *s, unsigned short **retArray, int *retSize);
+void sqlByteStaticArray(char *s, signed char **retArray, int *retSize);
+void sqlUbyteStaticArray(char *s, unsigned char **retArray, int *retSize);
+void sqlCharStaticArray(char *s, char **retArray, int *retSize);
+void sqlLongLongStaticArray(char *s, long long **array, int *retSize);
+/* Convert comma separated list of numbers to an array which will be
+ * overwritten next call to this function or to sqlXxxxxxDynamicArray,
+ * but need not be freed. */
+
+void sqlDoubleDynamicArray(char *s, double **retArray, int *retSize);
+void sqlFloatDynamicArray(char *s, float **retArray, int *retSize);
+void sqlUnsignedDynamicArray(char *s, unsigned **retArray, int *retSize);
+void sqlSignedDynamicArray(char *s, int **retArray, int *retSize);
+void sqlShortDynamicArray(char *s, short **retArray, int *retSize);
+void sqlUshortDynamicArray(char *s, unsigned short **retArray, int *retSize);
+void sqlByteDynamicArray(char *s, signed char **retArray, int *retSize);
+void sqlUbyteDynamicArray(char *s, unsigned char **retArray, int *retSize);
+void sqlCharDynamicArray(char *s, char **retArray, int *retSize);
+void sqlLongLongDynamicArray(char *s, long long **retArray, int *retSize);
+/* Convert comma separated list of numbers to an dynamically allocated
+ * array, which should be freeMem()'d when done. */
+
+
+int sqlStringArray(char *s, char **array, int maxArraySize);
+/* Convert comma separated list of strings to an array.  Pass in 
+ * array and max size of array.  Returns actual size.  This will
+ * only persist as long as s persists.... Use sqlStringDynamicArray
+ * if calling repeatedly. */
+
+void sqlStringStaticArray(char *s, char  ***retArray, int *retSize);
+/* Convert comma separated list of strings to an array which will be
+ * overwritten next call to this function or to sqlUnsignedDynamicArray,
+ * but need not be freed. */
+
+void sqlStringDynamicArray(char *s, char ***retArray, int *retSize);
+/* Convert comma separated list of strings to an dynamically allocated
+ * array, which should be freeMem()'d when done. */
+
+void sqlStringFreeDynamicArray(char ***pArray);
+/* Free up a dynamic array (ends up freeing array and first string on it.) */
+
+char *sqlDoubleArrayToString( double *array, int arraySize);
+char *sqlFloatArrayToString( float *array, int arraySize);
+char *sqlUnsignedArrayToString( unsigned *array, int arraySize);
+char *sqlSignedArrayToString( int *array, int arraySize);
+char *sqlShortArrayToString( short *array, int arraySize);
+char *sqlUshortArrayToString( unsigned short *array, int arraySize);
+char *sqlByteArrayToString( signed char *array, int arraySize);
+char *sqlUbyteArrayToString( unsigned char *array, int arraySize);
+char *sqlCharArrayToString( char *array, int arraySize);
+char *sqlLongLongArrayToString( long long *array, int arraySize);
+char *sqlStringArrayToString( char **array, int arraySize);
+/* Convert arrays into comma separated strings. The char *'s returned
+ * should be freeMem()'d when done */
+
+char *sqlEscapeString(const char *orig);
+/* Prepares string for inclusion in a SQL statement . Remember to free
+ * returned string.  returned string contains strlen(length)*2+1 as many bytes
+ * as orig because in worst case every character has to be escaped.
+ * Example 1: The Gene's Name -> The Gene''s Name
+ * Example 2: he said "order and orient" -> he said ""order and orient"" */
+
+char *sqlEscapeString2(char *to, const char* from);
+/* Prepares a string for inclusion in a sql statement.  Output string
+ * must be 2*strlen(from)+1 */
+
+int sqlUnsignedComma(char **pS);
+/* Return signed number at *pS.  Advance *pS past comma at end.
+ * This function is used by the system that automatically loads
+ * structured object from longblobs. */
+
+int sqlSignedComma(char **pS);
+/* Return signed number at *pS.  Advance *pS past comma at end */
+
+char sqlCharComma(char **pS);
+/* Return char at *pS.  Advance *pS past comma after char */
+
+long long sqlLongLongComma(char **pS);
+/* Return long long number at *pS.  Advance *pS past comma at end */
+
+double sqlDoubleComma(char **pS);
+/* Return double floating number at *pS.  Advance *pS past comma at end */
+
+float sqlFloatComma(char **pS);
+/* Return floating point number at *pS.  Advance *pS past comma at end */
+
+char *sqlStringComma(char **pS);
+/* Return string at *pS.  (Either quoted or not.)  Advance *pS. */
+
+void sqlFixedStringComma(char **pS, char *buf, int bufSize);
+/* Copy string at *pS to buf.  Advance *pS. */
+
+char *sqlEatChar(char *s, char c);
+/* Make sure next character is 'c'.  Return past next char */
+
+unsigned sqlEnumParse(char *valStr, char **values, struct hash **valHashPtr);
+/* parse an enumerated column value */
+
+unsigned sqlEnumComma(char **pS, char **values, struct hash **valHashPtr);
+/* Return enum at *pS.  (Either quoted or not.)  Advance *pS. */
+
+void sqlEnumPrint(FILE *f, unsigned value, char **values);
+/* print an enumerated column value */
+
+unsigned sqlSetParse(char *valStr, char **values, struct hash **valHashPtr);
+/* parse a set column value */
+
+unsigned sqlSetComma(char **pS, char **values, struct hash **valHashPtr);
+/* Return set at *pS.  (Either quoted or not.)  Advance *pS. */
+
+void sqlSetPrint(FILE *f, unsigned value, char **values);
+/* print a set column value */
+
+#endif /* SQLLIST_H */
+
diff --git a/gbtools/src/include/blatSrc/sqlNum.h b/gbtools/src/include/blatSrc/sqlNum.h
new file mode 100644
index 0000000..ff3f056
--- /dev/null
+++ b/gbtools/src/include/blatSrc/sqlNum.h
@@ -0,0 +1,83 @@
+/* sqlNum.h - routines to convert from ascii to
+ * unsigned/integer a bit more quickly than atoi. 
+ * Called sqlNum because it was first developed for use with
+ * SQL databases, which tend to require a lot of conversion from
+ * string to binary representation of numbers. In particular the
+ * code generator AutoSQL puts in lots of calls to these routines
+ * into it's parsers.  Other parser in the source tree have come
+ * to use these too though since they are fast and have good error
+ * checking.
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#ifndef SQLNUM_H
+#define SQLNUM_H
+
+/* get off_t */
+#include <sys/types.h>
+
+unsigned sqlUnsigned(char *s);
+/* Convert series of digits to unsigned integer about
+ * twice as fast as atoi (by not having to skip white 
+ * space or stop except at the null byte.) */
+
+unsigned sqlUnsignedInList(char **pS);
+/* Convert series of digits to unsigned integer about
+ * twice as fast as atoi (by not having to skip white 
+ * space or stop except at the null byte.) 
+ * All of string is number. Number may be delimited by a comma. 
+ * Returns the position of the delimiter or the terminating 0. */
+
+unsigned long sqlUnsignedLong(char *s);
+/* Convert series of digits to unsigned long about
+ * twice as fast as atol (by not having to skip white 
+ * space or stop except at the null byte.) */
+
+unsigned long sqlUnsignedLongInList(char **pS);
+/* Convert series of digits to unsigned long about
+ * twice as fast as atol (by not having to skip white 
+ * space or stop except at the null byte.) 
+ * All of string is number. Number may be delimited by a comma. 
+ * Returns the position of the delimiter or the terminating 0. */
+
+int sqlSigned(char *s);
+/* Convert string to signed integer.  Unlike atol assumes 
+ * all of string is number. */
+
+int sqlSignedInList(char **pS);
+/* Convert string to signed integer.  Unlike atol assumes 
+ * all of string is number. Number may be delimited by a comma. 
+ * Returns the position of the delimiter or the terminating 0. */
+
+long long sqlLongLong(char *s);
+/* Convert string to a long long.  Unlike atol assumes all of string is
+ * number. */
+
+long long sqlLongLongInList(char **pS);
+/* Convert string to a long long.  Unlike atol, assumes 
+ * all of string is number. Number may be delimited by a comma. 
+ * Returns the position of the delimiter or the terminating 0. */
+
+float sqlFloat(char *s);
+/* Convert string to a float.  Assumes all of string is number
+ * and aborts on an error. */
+
+float sqlFloatInList(char **pS);
+/* Convert string to a float.  Assumes all of string is number
+ * and aborts on an error. 
+ * Number may be delimited by a comma. 
+ * Returns the position of the delimiter or the terminating 0. */
+
+double sqlDouble(char *s);
+/* Convert string to a double.  Assumes all of string is number
+ * and aborts on an error. */
+
+double sqlDoubleInList(char **pS);
+/* Convert string to a double.  Assumes all of string is number
+ * and aborts on an error.
+ * Number may be delimited by a comma.
+ * Returns the position of the delimiter or the terminating 0. */
+
+#endif /* SQLNUM_H */
+ 
diff --git a/gbtools/src/include/blatSrc/subText.h b/gbtools/src/include/blatSrc/subText.h
new file mode 100644
index 0000000..555d8eb
--- /dev/null
+++ b/gbtools/src/include/blatSrc/subText.h
@@ -0,0 +1,41 @@
+/* subText.h - perform text substitutions. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#ifndef SUBTEXT_H
+#define SUBTEXT_H
+
+struct subText
+/* Structure that holds data for a single substitution to be made.
+ * The subText routines work mostly on lists of these. */
+    {
+    struct subText *next;	/* pointer to next substitution */
+    char *in;			/* source side of substitution */
+    char *out;			/* dest side of substitution */
+    int inSize;			/* length of in string */
+    int outSize;		/* length of out string */
+    };
+
+struct subText *subTextNew(char *in, char *out);
+/* Make new substitution structure. */
+
+void subTextFree(struct subText **pSub);
+/* Free a subText. */
+
+void subTextFreeList(struct subText **pList);
+/* Free a list of dynamically allocated subText's */
+
+int subTextSizeAfter(struct subText *subList, char *in);
+/* Return size string will be after substitutions. */
+
+void subTextStatic(struct subText *subList, char *in, char *out, int outMaxSize);
+/* Do substition to output buffer of given size.  Complain
+ * and die if not big enough. */
+
+char *subTextString(struct subText *subList, char *in);
+/* Return string with substitutions in list performed.  freeMem
+ * this string when done. */
+
+#endif /* SUBTEXT_H */
+
diff --git a/gbtools/src/include/blatSrc/sufa.h b/gbtools/src/include/blatSrc/sufa.h
new file mode 100644
index 0000000..5538968
--- /dev/null
+++ b/gbtools/src/include/blatSrc/sufa.h
@@ -0,0 +1,60 @@
+/* sufa - suffix array for genome.  Use sufaMake utility to create one of these, and
+ * the routines here to access it.  See comment by sufaFileHeader for file format. */
+/* This file is copyright 2008 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#ifndef SUFA_H
+#define SUFA_H
+
+struct sufaFileHeader
+/* Short read index file binary file header.  A sufa file starts with this fixed 128 byte
+ * structure.  It is followed by the following sections:
+ *    chromosome name strings - zero terminated.  Padded with zero to 4 byte boundary 
+ *    chromosome sizes (32 bits each)
+ *    chromosome DNA - one byte per base lower case.  A zero between each chrom, and a zero before
+ *                     and after (to make some end conditions easier).  Padded if need be with
+ *                     additional zeroes to 4 base boundary.
+ *    suffixArray - 32 bits for each indexed base */
+    {
+    bits32 magic;	/* Always SUFA_MAGIC */
+    bits16 majorVersion; /* This version changes when backward compatibility breaks. */
+    bits16 minorVersion; /* This version changes whenever a feature is added. */
+    bits64 size;	/* Total size to memmap, including header. */
+    bits32 chromCount;	/* Total count of chromosomes/contigs in file. */
+    bits32 chromNamesSize;	/* Size of names of all contigs (including zeroes at end),
+    				   padded to 4 byte boundary as needed). */
+    bits64 arraySize;   /* Total number of bases actually indexed (non-N, unmasked). */
+    bits64 dnaDiskSize;	/* Size of DNA on disk with zero separators. Padded to 4 byte boundary  */
+    bits64 reserved[11];/* All zeroes for now. */
+    };
+
+struct sufa 
+/* Suffix array in memory */
+    {
+    struct sufa *next;
+    boolean isMapped;	/* True if memory mapped. */
+    struct sufaFileHeader *header;	/* File header. */
+    char **chromNames;	/* Name of each chromosome. */
+    bits32 *chromSizes;    /* Size of each chromosome.  No deallocation required (in memmap) */
+    bits32 *chromOffsets;  /* Offset of each chromosome's DNA */
+    char *allDna;	/* All DNA from each contig/chromosome with zero separators. */
+    bits32 *array;	/* Alphabetized offsets into allDna. */
+    };
+
+struct sufa *sufaRead(char *fileName, boolean memoryMap);
+/* Read in a sufa from a file.  Does this via memory mapping if you like,
+ * which will be faster typically for about 100 reads, and slower for more
+ * than that (_much_ slower for thousands of reads and more). */
+
+void sufaFree(struct sufa **pSufa);
+/* Free up resources associated with index. */
+
+int sufaOffsetToChromIx(struct sufa *sufa, bits32 tOffset);
+/* Figure out index of chromosome containing tOffset */
+
+/** Stuff to define SUFA files **/
+#define SUFA_MAGIC 0x6727B283	/* Magic number at start of SUFA file */
+#define SUFA_MAJOR_VERSION 0	
+#define SUFA_MINOR_VERSION 0
+
+#endif /* SUFA_H */
diff --git a/gbtools/src/include/blatSrc/sufx.h b/gbtools/src/include/blatSrc/sufx.h
new file mode 100644
index 0000000..6c588fc
--- /dev/null
+++ b/gbtools/src/include/blatSrc/sufx.h
@@ -0,0 +1,64 @@
+/* sufx - suffix array with traversal extension for genome.  Use sufxMake utility to 
+ * create one of these files , and the routines here to access it.  See comment by 
+ * sufxFileHeader for file format. See src/shortReads/sufxMake/sufx.doc as well for
+ * an explanation of the data structures, particularly the traverse array. */
+/* This file is copyright 2008 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#ifndef SUFX_H
+#define SUFX_H
+
+struct sufxFileHeader
+/* Short read index file binary file header.  A sufx file starts with this fixed 128 byte
+ * structure.  It is followed by the following sections:
+ *    chromosome name strings - zero terminated.  Padded with zero to 4 byte boundary 
+ *    chromosome sizes (32 bits each)
+ *    chromosome DNA - one byte per base lower case.  A zero between each chrom, and a zero before
+ *                     and after (to make some end conditions easier).  Padded if need be with
+ *                     additional zeroes to 4 base boundary.
+ *    suffix array -   32 bits for each indexed base. Alphabetical offsets into DNA
+ *    traverse array - Also 32 bits per indexed base. Helper info to traverse array like a tree. */
+    {
+    bits32 magic;	 /* Always SUFX_MAGIC */
+    bits16 majorVersion; /* This version changes when backward compatibility breaks. */
+    bits16 minorVersion; /* This version changes whenever a feature is added. */
+    bits64 size;	 /* Total size to memmap, including header. */
+    bits32 chromCount;	 /* Total count of chromosomes/contigs in file. */
+    bits32 chromNamesSize;	/* Size of names of all contigs (including zeroes at end),
+    				   padded to 4 byte boundary as needed). */
+    bits64 arraySize;	 /* Total number of bases actually indexed (non-N, unmasked). */
+    bits64 dnaDiskSize;	 /* Size of DNA on disk with zero separators. Padded to 4 byte boundary  */
+    bits64 reserved[11];/* All zeroes for now. */
+    };
+
+struct sufx 
+/* Suffix array in memory */
+    {
+    struct sufx *next;
+    boolean isMapped;	/* True if memory mapped. */
+    struct sufxFileHeader *header;	/* File header. */
+    char **chromNames;	/* Name of each chromosome. */
+    bits32 *chromSizes;    /* Size of each chromosome.  No deallocation required (in memmap) */
+    bits32 *chromOffsets;  /* Offset of each chromosome's DNA */
+    char *allDna;	/* All DNA from each contig/chromosome with zero separators. */
+    bits32 *array;	/* Alphabetized offsets into allDna. */
+    bits32 *traverse;	/* Offsets to position in array where current prefix changes. */
+    };
+
+struct sufx *sufxRead(char *fileName, boolean memoryMap);
+/* Read in a sufx from a file.  Does this via memory mapping if you like,
+ * which will be faster typically for about 100 reads, and slower for more
+ * than that (_much_ slower for thousands of reads and more). */
+
+void sufxFree(struct sufx **pSufx);
+/* Free up resources associated with index. */
+
+int sufxOffsetToChromIx(struct sufx *sufx, bits32 tOffset);
+/* Figure out index of chromosome containing tOffset */
+
+/** Stuff to define SUFX files **/
+#define SUFX_MAGIC 0x600BA3A1	/* Magic number at start of SUFX file */
+#define SUFX_MAJOR_VERSION 0	
+#define SUFX_MINOR_VERSION 0
+
+#endif /* SUFX_H */
diff --git a/gbtools/src/include/blatSrc/supStitch.h b/gbtools/src/include/blatSrc/supStitch.h
new file mode 100644
index 0000000..3ef0d63
--- /dev/null
+++ b/gbtools/src/include/blatSrc/supStitch.h
@@ -0,0 +1,73 @@
+/*****************************************************************************
+ * Copyright (C) 2000 Jim Kent.  This source code may be freely used         *
+ * for personal, academic, and non-profit purposes.  Commercial use          *
+ * permitted only by explicit agreement with Jim Kent (jim_kent at pacbell.net) *
+ *****************************************************************************/
+/* supStitch stitches together a bundle of ffAli alignments that share
+ * a common query and target sequence into larger alignments if possible.
+ * This is commonly used when the query sequence was broken up into
+ * overlapping blocks in the initial alignment, and also to look for
+ * introns larger than fuzzyFinder can handle. */
+
+#ifndef SUPSTITCH_H
+#define SUPSTITCH_H
+
+#ifndef DNASEQ_H
+#include "dnaseq.h"
+#endif
+
+#ifndef FUZZYFIND_H
+#include "fuzzyFind.h"
+#endif
+
+#ifndef PATSPACE_H
+#include "patSpace.h"
+#endif
+
+struct ssFfItem
+/* A list of fuzzy finder alignments. */
+    {
+    struct ssFfItem *next;      /* Next in list. */
+    struct ffAli *ff;		/* Alignment (owned by ssFfItem) */
+    };
+
+void ssFfItemFree(struct ssFfItem **pEl);
+/* Free a single ssFfItem. */
+
+void ssFfItemFreeList(struct ssFfItem **pList);
+/* Free a list of ssFfItems. */
+
+struct ssBundle
+/* A bunch of alignments all with the same query sequence.  This
+ * is the input to the stitcher.*/
+    {
+    struct ssBundle *next;	/* Next in list. */
+    struct ssFfItem *ffList;    /* Item list - memory owned by bundle. */
+    bioSeq *qSeq;        /* Query sequence (not owned by bundle.) */
+    bioSeq *genoSeq;     /* Genomic sequence (not owned by bundle.) */
+    int genoIx;                 /* Index of bac in associated PatSpace. */
+    int genoContigIx;           /* Index of contig inside of seq. */
+    void *data;			/* User defined data pointer. */
+    boolean isProt;		/* True if it's a protein based bundle. */
+    struct trans3 *t3List;	/* Sometimes set to three translated frames. */
+    boolean avoidFuzzyFindKludge;	/* Temporary flag to avoid call to fuzzyFind. */
+    };
+
+void ssBundleFree(struct ssBundle **pEl);
+/* Free up one ssBundle */
+
+void ssBundleFreeList(struct ssBundle **pList);
+/* Free up list of ssBundles */
+
+
+void ssStitch(struct ssBundle *bundle, enum ffStringency stringency, 
+	int minScore, int maxToReturn);
+/* Glue together mrnas in bundle as much as possible. 
+ * Updates bundle->ffList with stitched together version. */
+
+struct ssBundle *ssFindBundles(struct patSpace *ps, struct dnaSeq *cSeq, 
+	char *cName, enum ffStringency stringency, boolean avoidSelfSelf);
+/* Find patSpace alignments on cSeq and bundle them together. */
+
+#endif /* SUPSTITCH_H */
+
diff --git a/gbtools/src/include/blatSrc/synQueue.h b/gbtools/src/include/blatSrc/synQueue.h
new file mode 100644
index 0000000..a79088a
--- /dev/null
+++ b/gbtools/src/include/blatSrc/synQueue.h
@@ -0,0 +1,38 @@
+/* synQueue - a sychronized message queue for messages between
+ * threads. */
+
+#ifndef SYNQUEUE_H
+#define SYNQUEUE_H
+
+struct synQueue *synQueueNew();
+/* Make a new, empty, synQueue. */
+
+void synQueueFree(struct synQueue **pSq);
+/* Free up synQueue.  Be sure no other threads are using
+ * it first though! This will not free any dynamic memory
+ * in the messages.  Use synQueueFreeAndVals for that. */
+
+void synQueueFreeAndVals(struct synQueue **pSq);
+/* Free up synQueue.  Be sure no other threads are using
+ * it first though! This will freeMem all the messages */
+
+void synQueuePut(struct synQueue *sq, void *message);
+/* Add message to end of queue. */
+
+void synQueuePutUnprotected(struct synQueue *sq, void *message);
+/* Add message to end of queue without protecting against multithreading
+ * contention - used before pthreads are launched perhaps. */
+
+void *synQueueGet(struct synQueue *sq);
+/* Get message off start of queue.  Wait until there is
+ * a message if queue is empty. */
+
+void *synQueueGrab(struct synQueue *sq);
+/* Get message off start of queue.  Return NULL immediately 
+ * if queue is empty. */
+
+int synQueueSize(struct synQueue *sq);
+/* Return number of messages currently on queue. */
+
+#endif /* SYNQUEUE_H */
+
diff --git a/gbtools/src/include/blatSrc/tabRow.h b/gbtools/src/include/blatSrc/tabRow.h
new file mode 100644
index 0000000..cc5b583
--- /dev/null
+++ b/gbtools/src/include/blatSrc/tabRow.h
@@ -0,0 +1,45 @@
+/* tabRow - a row from a database or a tab-separated file held in
+ * memory.   Just a light wrapper around an array of strings. 
+ * Also some routines to convert slLines to tabRows. */
+
+#ifndef TABROW_H
+#define TABROW_H
+
+struct tabRow
+/* A parsed out tableRow. */
+    {
+    struct tabRow *next;
+    int colCount;
+    char *columns[1];
+    };
+
+struct tabRow *tabRowNew(int colCount);
+/* Return new row. */
+
+int tabRowMaxColCount(struct tabRow *rowList);
+/* Return largest column count */
+
+struct tabRow *tabRowByWhite(struct slName *lineList, char *fileName,
+	boolean varCol);
+/* Convert lines to rows based on spaces.  If varCol is TRUE then not
+ * all rows need to have same number of columns. */
+
+struct tabRow *tabRowByChar(struct slName *lineList, char c, char *fileName,
+	boolean varCol);
+/* Convert lines to rows based on character separation.  If varCol is TRUE then not
+ * all rows need to have same number of columns. */
+
+struct tabRow *tabRowByFixedOffsets(struct slName *lineList, struct slInt *offList,
+	char *fileName);
+/* Return rows parsed into fixed width fields whose starts are defined by
+ * offList. */
+
+struct tabRow *tabRowByFixedGuess(struct slName *lineList, char *fileName);
+/* Return rows parsed into fixed-width fields. */
+
+struct slInt *tabRowGuessFixedOffsets(struct slName *lineList, char *fileName);
+/* Return our best guess list of starting positions for space-padded fixed
+ * width fields. */
+
+#endif /* TABROW_H */
+
diff --git a/gbtools/src/include/blatSrc/textOut.h b/gbtools/src/include/blatSrc/textOut.h
new file mode 100644
index 0000000..2775f66
--- /dev/null
+++ b/gbtools/src/include/blatSrc/textOut.h
@@ -0,0 +1,48 @@
+/* textOut - set up stdout to be HTTP text, file or compressed file. */
+
+#ifndef TEXTOUT_H
+#define TEXTOUT_H
+
+#include "pipeline.h"
+
+/* Supported compression types: */
+#define textOutCompressNone "none"
+#define textOutCompressBzip2 "bzip2"
+#define textOutCompressCompress "compress"
+#define textOutCompressGzip "gzip"
+#define textOutCompressZip "zip"
+
+/* Menu and values for passing to cgiMakeDropListFull: */
+/* (not declaring the static char *[]'s here because those can lead to 
+ * "variable defined but not used" warnings -- declare locally.) */
+#define textOutCompressMenuContents { "plain text",\
+				       "gzip compressed (.gz)",\
+				       "bzip2 compressed (.bz2)",\
+				       "LZW compressed (.Z)",\
+				       "zip compressed (.zip)",\
+				       NULL\
+				     }
+
+#define textOutCompressValuesContents { textOutCompressNone,\
+					 textOutCompressGzip,\
+					 textOutCompressBzip2,\
+					 textOutCompressCompress,\
+					 textOutCompressZip,\
+					 NULL\
+				       }
+
+char *getCompressSuffix(char *compressType);
+/* Return the file dot-suffix (including the dot) for compressType. */
+
+struct pipeline *textOutInit(char *fileName, char *compressType, int *saveStdout);
+/* Set up stdout to be HTTP text, file (if fileName is specified), or 
+ * compressed file (if both fileName and a supported compressType are 
+ * specified). 
+ * Return NULL if no compression, otherwise a pipeline handle on which 
+ * textOutClose should be called when we're done writing stdout. */
+
+void textOutClose(struct pipeline **pCompressPipeline, int *saveStdout);
+/* Flush and close stdout, wait for the pipeline to finish, and then free 
+ * the pipeline object. */
+
+#endif /* TEXTOUT_H */
diff --git a/gbtools/src/include/blatSrc/tokenizer.h b/gbtools/src/include/blatSrc/tokenizer.h
new file mode 100644
index 0000000..d1ce9d9
--- /dev/null
+++ b/gbtools/src/include/blatSrc/tokenizer.h
@@ -0,0 +1,66 @@
+/* tokenizer - A tokenizer structure that will chop up file into
+ * tokens.  It is aware of quoted strings and otherwise tends to return
+ * white-space or punctuated-separated words, with punctuation in
+ * a separate token.  This is used by autoSql. */
+
+#ifndef TOKENIZER_H
+#define TOKENIZER_H
+
+struct tokenizer
+/* This handles reading in tokens. */
+    {
+    bool reuse;	         /* True if want to reuse this token. */
+    bool eof;            /* True at end of file. */
+    int leadingSpaces;	 /* Number of leading spaces before token. */
+    struct lineFile *lf; /* Underlying file. */
+    char *curLine;       /* Current line of text. */
+    char *linePt;        /* Start position within current line. */
+    char *string;        /* String value of token */
+    int sSize;           /* Size of string. */
+    int sAlloc;          /* Allocated string size. */
+      /* Some variables set after tokenizerNew to control details of
+       * parsing. */
+    bool leaveQuotes;	 /* Leave quotes in string. */
+    bool uncommentC;	 /* Take out C (and C++) style comments. */
+    bool uncommentShell; /* Take out # style comments. */
+    };
+
+struct tokenizer *tokenizerNew(char *fileName);
+/* Return a new tokenizer. */
+
+struct tokenizer *tokenizerOnLineFile(struct lineFile *lf);
+/* Create a new tokenizer on open lineFile. */
+
+void tokenizerFree(struct tokenizer **pTkz);
+/* Tear down a tokenizer. */
+
+void tokenizerReuse(struct tokenizer *tkz);
+/* Reuse token. */
+
+int tokenizerLineCount(struct tokenizer *tkz);
+/* Return line of current token. */
+
+char *tokenizerFileName(struct tokenizer *tkz);
+/* Return name of file. */
+
+char *tokenizerNext(struct tokenizer *tkz);
+/* Return token's next string (also available as tkz->string) or
+ * NULL at EOF. This string will be overwritten with the next call
+ * to tokenizerNext, so cloneString if you need to save it. */
+
+void tokenizerErrAbort(struct tokenizer *tkz, char *format, ...);
+/* Print error message followed by file and line number and
+ * abort. */
+
+void tokenizerNotEnd(struct tokenizer *tkz);
+/* Squawk if at end. */
+
+char *tokenizerMustHaveNext(struct tokenizer *tkz);
+/* Get next token, which must be there. */
+
+void tokenizerMustMatch(struct tokenizer *tkz, char *string);
+/* Require next token to match string.  Return next token
+ * if it does, otherwise abort. */
+
+#endif /* TOKENIZER_H */
+
diff --git a/gbtools/src/include/blatSrc/trans3.h b/gbtools/src/include/blatSrc/trans3.h
new file mode 100644
index 0000000..61f0f0c
--- /dev/null
+++ b/gbtools/src/include/blatSrc/trans3.h
@@ -0,0 +1,59 @@
+/*****************************************************************************
+ * Copyright (C) 2000 Jim Kent.  This source code may be freely used         *
+ * for personal, academic, and non-profit purposes.  Commercial use          *
+ * permitted only by explicit agreement with Jim Kent (jim_kent at pacbell.net) *
+ *****************************************************************************/
+/* trans3 - a sequence and three translated reading frames. 
+ * In the gfServer/gfClient system these are found in a
+ * t3Hash that has as values lists of trans3.  These reflect
+ * the fragments of the genome actually loaded in memory
+ * to perform the alignment. */
+
+#ifndef TRANS3_H
+#define TRANS3_H
+
+#ifndef DNASEQ_H
+#include "dnaseq.h"
+#endif
+
+#ifndef HASH_H
+#include "hash.h"
+#endif
+
+struct trans3
+/* A sequence and three translations of it. */
+     {
+     struct trans3 *next;		/* Next in list. */
+     char *name;			/* Name (not allocated here) */
+     struct dnaSeq *seq;		/* Untranslated sequence.  Not allocated here. */
+     aaSeq *trans[3];			/* Translated sequences.  Allocated here*/
+     int start,end;			/* Start/end of sequence in a larger context. */
+     int nibSize;			/* Size of nib file this is embedded in. */
+     boolean isRc;			/* Has been reverse complemented? */
+     };
+
+struct trans3 *trans3New(struct dnaSeq *seq);
+/* Create a new set of translated sequences. */
+
+void trans3Free(struct trans3 **pT3);
+/* Free a trans3 structure. */
+
+void trans3FreeList(struct trans3 **pList);
+/* Free a list of dynamically allocated trans3's */
+
+struct trans3 *trans3Find(struct hash *t3Hash, char *name, int start, int end);
+/* Find trans3 in hash which corresponds to sequence of given name and includes
+ * bases between start and end. */
+
+void trans3Offset(struct trans3 *t3List, AA *aa, int *retOffset, int *retFrame);
+/* Figure out offset of peptide in context of larger sequences. */
+
+int trans3GenoPos(char *pt, bioSeq *seq, struct trans3 *t3List, boolean isEnd);
+/* Convert from position in one of three translated frames in
+ * t3List to genomic offset. If t3List is NULL then just use seq
+ * instead. */
+
+int trans3Frame(char *pt, struct trans3 *t3List);
+/* Figure out which frame pt is in or 0 if no frame. */
+
+#endif /* TRANS3_H */
diff --git a/gbtools/src/include/blatSrc/trix.h b/gbtools/src/include/blatSrc/trix.h
new file mode 100644
index 0000000..740580b
--- /dev/null
+++ b/gbtools/src/include/blatSrc/trix.h
@@ -0,0 +1,48 @@
+/* trix - text retrieval index.  Stuff for fast two level index
+ * of text for fast word searches.  Generally you use the ixIxx program
+ * to make the indexes. */
+
+struct trix
+/* A two level index */
+    {
+    struct lineFile *lf;	/* Open file on first level index. */
+    struct trixIxx *ixx;	/* Second level index in memory. */
+    int ixxSize;		/* Size of second level index. */
+    int ixxAlloc;	        /* Space allocated for index. */
+    struct hash *wordHitHash;	/* Hash of word hitsLists, so search on "the the the" works fast. */
+    boolean useUdc;            /* are we using UDC or lineFile */
+    };
+
+struct trixSearchResult
+/* Result of a trix search. */
+    {
+    struct trixSearchResult *next;
+    char *itemId;               /* ID of matching item */
+    int unorderedSpan;          /* Minimum span in single doc with words in any order. */
+    int orderedSpan;            /* Minimum span in single doc with words in search order. */
+    int wordPos;		/* Position of word in doc more or less. */
+    int leftoverLetters;	/* Number of leftover letters in words. */
+    };
+
+#define trixPrefixSize 5	/* Size of prefix in second level index. */
+
+struct trix *trixOpen(char *ixFile);
+/* Open up index.  Load second level index in memory. */
+
+void trixClose(struct trix **pTrix);
+/* Close up index and free up associated resources. */
+
+struct trixSearchResult *trixSearch(struct trix *trix, int wordCount, char **words,
+	boolean expand);
+/* Return a list of items that match all words.  This will be sorted so that
+ * multiple-word matches where the words are closer to each other and in the
+ * right order will be first.  Single word matches will be prioritized so that those
+ * closer to the start of the search text will appear before those later.
+ * Do a trixSearchResultFreeList when done.  If expand is TRUE then this will match not 
+ * only the input words, but also additional words that start with the input words. */
+
+void trixSearchResultFree(struct trixSearchResult **pTsr);
+/* Free up data associated with trixSearchResult. */
+
+void trixSearchResultFreeList(struct trixSearchResult **pList);
+/* Free up a list of trixSearchResults. */
diff --git a/gbtools/src/include/blatSrc/twoBit.h b/gbtools/src/include/blatSrc/twoBit.h
new file mode 100644
index 0000000..02a33c7
--- /dev/null
+++ b/gbtools/src/include/blatSrc/twoBit.h
@@ -0,0 +1,209 @@
+/* twoBit - DNA sequence represented as two bits per pixel
+ * with associated list of regions containing N's, and
+ * masked regions. */
+
+#ifndef TWOBIT_H
+#define TWOBIT_H
+
+struct twoBit
+/* Two bit representation of DNA. */
+    {
+    struct twoBit *next;	/* Next sequence in list */
+    char *name;			/* Name of sequence. */
+    UBYTE *data;		/* DNA at two bits per base. */
+    bits32 size;		/* Size of this sequence. */
+    bits32 nBlockCount;		/* Count of blocks of Ns. */
+    bits32 *nStarts;		/* Starts of blocks of Ns. */
+    bits32 *nSizes;		/* Sizes of blocks of Ns. */
+    bits32 maskBlockCount;	/* Count of masked blocks. */
+    bits32 *maskStarts;		/* Starts of masked regions. */
+    bits32 *maskSizes;		/* Sizes of masked regions. */
+    bits32 reserved;		/* Reserved for future expansion. */
+    };
+
+struct twoBitIndex
+/* An entry in twoBit index. */
+    {
+    struct twoBitIndex *next;	/* Next in list. */
+    char *name;			/* Name - allocated in hash */
+    bits32 offset;		/* Offset in file. */
+    };
+
+struct twoBitFile
+/* Holds header and index info from .2bit file. */
+    {
+    struct twoBitFile *next;
+    char *fileName;	/* Name of this file, for error reporting. */
+    void *f;            /* Open file. */
+    boolean isSwapped;	/* Is byte-swapping needed. */
+    bits32 version;	/* Version of .2bit file */
+    bits32 seqCount;	/* Number of sequences. */
+    bits32 reserved;	/* Reserved, always zero for now. */
+    struct twoBitIndex *indexList;	/* List of sequence. */
+    struct hash *hash;	/* Hash of sequences. */
+    struct bptFile *bpt;	/* Alternative index. */
+
+    /* the routines we use to access the twoBit.
+     * These may be UDC routines, or stdio
+     */
+    void (*ourSeek)(void *file, bits64 offset);
+    void (*ourSeekCur)(void *file, bits64 offset);
+    bits32 (*ourReadBits32)(void *f, boolean isSwapped);
+    void (*ourClose)(void *pFile);
+    boolean (*ourFastReadString)(void *f, char buf[256]);
+    void (*ourMustRead)(void *file, void *buf, size_t size);
+    };
+
+struct twoBitSpec
+/* parsed .2bit file and sequence specs */
+{
+    char *fileName;                 /* path to file */
+    struct twoBitSeqSpec *seqs;     /* list of sequences and subsequences */
+};
+
+struct twoBitSeqSpec
+/* specification for a seq or subsequence in a .2bit file */
+{
+    struct twoBitSeqSpec *next;
+    char *name;                 /* name of sequence */
+    bits32 start;              /* start of subsequence 0 */
+    bits32 end;                /* end of subsequence;
+                                 * 0 if not a subsequence */
+};
+
+struct twoBitFile *twoBitOpen(char *fileName);
+/* Open file, read in header and index.  
+ * Squawk and die if there is a problem. */
+
+struct twoBitFile *twoBitOpenExternalBptIndex(char *twoBitName, char *bptName);
+/* Open file, read in header, but not regular index.  Instead use
+ * bpt index.   Beware if you use this the indexList field will be NULL
+ * as will the hash. */
+
+void twoBitClose(struct twoBitFile **pTbf);
+/* Free up resources associated with twoBitFile. */
+
+int twoBitSeqSize(struct twoBitFile *tbf, char *name);
+/* Return size of sequence in two bit file in bases. */
+
+long long twoBitTotalSize(struct twoBitFile *tbf);
+/* Return total size of all sequences in two bit file. */
+
+struct dnaSeq *twoBitReadSeqFragExt(struct twoBitFile *tbf, char *name,
+                                    int fragStart, int fragEnd, boolean doMask, int *retFullSize);
+/* Read part of sequence from .2bit file.  To read full
+ * sequence call with start=end=0.  Sequence will be lower
+ * case if doMask is false, mixed case (repeats in lower)
+ * if doMask is true. */
+
+struct dnaSeq *twoBitReadSeqFrag(struct twoBitFile *tbf, char *name,
+	int fragStart, int fragEnd);
+/* Read part of sequence from .2bit file.  To read full
+ * sequence call with start=end=0.  Note that sequence will
+ * be mixed case, with repeats in lower case and rest in
+ * upper case. */
+
+struct dnaSeq *twoBitReadSeqFragLower(struct twoBitFile *tbf, char *name,
+	int fragStart, int fragEnd);
+/* Same as twoBitReadSeqFrag, but sequence is returned in lower case. */
+
+struct dnaSeq *twoBitLoadAll(char *spec);
+/* Return list of all sequences matching spec, which is in
+ * the form:
+ *
+ *    file/path/input.2bit[:seqSpec1][,seqSpec2,...]
+ *
+ * where seqSpec is either
+ *     seqName
+ *  or
+ *     seqName:start-end */
+
+struct slName *twoBitSeqNames(char *fileName);
+/* Get list of all sequences in twoBit file. */
+
+struct twoBit *twoBitFromDnaSeq(struct dnaSeq *seq, boolean doMask);
+/* Convert dnaSeq representation in memory to twoBit representation.
+ * If doMask is true interpret lower-case letters as masked. */
+
+struct twoBit *twoBitFromFile(char *fileName);
+/* Get twoBit list of all sequences in twoBit file. */
+
+struct twoBit *twoBitOneFromFile(struct twoBitFile *tbf, char *name);
+/* Get single sequence as two bit. */
+
+void twoBitFree(struct twoBit **pTwoBit);
+/* Free up a two bit structure. */
+
+void twoBitFreeList(struct twoBit **pList);
+/* Free a list of dynamically allocated twoBit's */
+
+
+void twoBitWriteOne(struct twoBit *twoBit, FILE *f);
+/* Write out one twoBit sequence to binary file. 
+ * Note this does not include the name, which is
+ * stored only in index. */
+
+void twoBitWriteHeader(struct twoBit *twoBitList, FILE *f);
+/* Write out header portion of twoBit file, including initial
+ * index */
+
+boolean twoBitIsFile(char *fileName);
+/* Return TRUE if file is in .2bit format. */
+
+boolean twoBitParseRange(char *rangeSpec, char **retFile, 
+	char **retSeq, int *retStart, int *retEnd);
+/* Parse out something in format
+ *    file/path/name:seqName:start-end
+ * or
+ *    file/path/name:seqName
+ * This will destroy the input 'rangeSpec' in the process.
+ * Returns FALSE if it doesn't fit this format. 
+ * If it is the shorter form then start and end will both
+ * be returned as zero, which is ok by twoBitReadSeqFrag. */
+
+boolean twoBitIsRange(char *rangeSpec);
+/* Return TRUE if it looks like a two bit range specifier. */
+
+boolean twoBitIsFileOrRange(char *spec);
+/* Return TRUE if it is a two bit file or subrange. */
+
+boolean twoBitIsSpec(char *spec);
+/* Return TRUE spec is a valid 2bit spec (see twoBitSpecNew) */
+
+struct twoBitSpec *twoBitSpecNew(char *specStr);
+/* Parse a .2bit file and sequence spec into an object.
+ * The spec is a string in the form:
+ *
+ *    file/path/input.2bit[:seqSpec1][,seqSpec2,...]
+ *
+ * where seqSpec is either
+ *     seqName
+ *  or
+ *     seqName:start-end
+ *
+ * free result with twoBitSpecFree().
+ */
+
+struct twoBitSpec *twoBitSpecNewFile(char *twoBitFile, char *specFile);
+/* parse a file containing a list of specifications for sequences in the
+ * specified twoBit file. Specifications are one per line in forms:
+ *     seqName
+ *  or
+ *     seqName:start-end
+ */
+
+void twoBitSpecFree(struct twoBitSpec **specPtr);
+/* free a twoBitSpec object */
+
+void twoBitOutNBeds(struct twoBitFile *tbf, char *seqName, FILE *outF);
+/* output a series of bed3's that enumerate the number of N's in a sequence*/
+
+int twoBitSeqSizeNoNs(struct twoBitFile *tbf, char *seqName);
+/* return the length of the sequence, not counting N's */
+
+long long twoBitTotalSizeNoN(struct twoBitFile *tbf);
+/* return the size of the all the sequence in file, not counting N's*/
+
+boolean twoBitIsSequence(struct twoBitFile *tbf, char *chromName);
+/* Return TRUE if chromName is in 2bit file. */
+#endif /* TWOBIT_H */
diff --git a/gbtools/src/include/blatSrc/udc.h b/gbtools/src/include/blatSrc/udc.h
new file mode 100644
index 0000000..b7db8f6
--- /dev/null
+++ b/gbtools/src/include/blatSrc/udc.h
@@ -0,0 +1,165 @@
+/* udc - url data cache - a caching system that keeps blocks of data fetched from URLs in
+ * sparse local files for quick use the next time the data is needed. 
+ *
+ * This cache is enormously simplified by there being no local _write_ to the cache,
+ * just reads.  
+ *
+ * The overall strategy of the implementation is to have a root cache directory
+ * with a subdir for each file being cached.  The directory for a single cached file
+ * contains two files - "bitmap" and "sparseData" that contains information on which
+ * parts of the URL are cached and the actual cached data respectively. The subdirectory name
+ * associated with the file is constructed from the URL in a straightforward manner.
+ *     http://genome.ucsc.edu/cgi-bin/hgGateway
+ * gets mapped to:
+ *     rootCacheDir/http/genome.ucsc.edu/cgi-bin/hgGateway/
+ * The URL protocol is the first directory under the root, and the remainder of the
+ * URL, with some necessary escaping, is used to define the rest of the cache directory
+ * structure, with each '/' after the protocol line translating into another directory
+ * level.
+ *    
+ * The bitmap file contains time stamp and size data as well as an array with one bit
+ * for each block of the file that has been fetched.  Currently the block size is 8K. */
+
+#ifndef UDC_H
+#define UDC_H
+
+struct udcFile;
+/* Handle to a cached file.  Inside of structure mysterious unless you are udc.c. */
+
+struct udcFile *udcFileMayOpen(char *url, char *cacheDir);
+/* Open up a cached file. cacheDir may be null in which case udcDefaultDir() will be
+ * used.  Return NULL if file doesn't exist. */
+
+struct udcFile *udcFileOpen(char *url, char *cacheDir);
+/* Open up a cached file.  cacheDir may be null in which case udcDefaultDir() will be
+ * used.  Abort if if file doesn't exist. */
+
+void udcFileClose(struct udcFile **pFile);
+/* Close down cached file. */
+
+bits64 udcRead(struct udcFile *file, void *buf, bits64 size);
+/* Read a block from file.  Return amount actually read. */
+
+#define udcReadOne(file, var) udcRead(file, &(var), sizeof(var))
+/* Read one variable from file or die. */
+
+void udcMustRead(struct udcFile *file, void *buf, bits64 size);
+/* Read a block from file.  Abort if any problem, including EOF before size is read. */
+
+#define udcMustReadOne(file, var) udcMustRead(file, &(var), sizeof(var))
+/* Read one variable from file or die. */
+
+bits64 udcReadBits64(struct udcFile *file, boolean isSwapped);
+/* Read and optionally byte-swap 64 bit entity. */
+
+bits32 udcReadBits32(struct udcFile *file, boolean isSwapped);
+/* Read and optionally byte-swap 32 bit entity. */
+
+bits16 udcReadBits16(struct udcFile *file, boolean isSwapped);
+/* Read and optionally byte-swap 16 bit entity. */
+
+float udcReadFloat(struct udcFile *file, boolean isSwapped);
+/* Read and optionally byte-swap floating point number. */
+
+double udcReadDouble(struct udcFile *file, boolean isSwapped);
+/* Read and optionally byte-swap double-precision floating point number. */
+
+int udcGetChar(struct udcFile *file);
+/* Get next character from file or die trying. */
+
+char *udcReadLine(struct udcFile *file);
+/* Fetch next line from udc cache. */
+
+char *udcReadStringAndZero(struct udcFile *file);
+/* Read in zero terminated string from file.  Do a freeMem of result when done. */
+
+char *udcFileReadAll(char *url, char *cacheDir, size_t maxSize, size_t *retSize);
+/* Read a complete file via UDC. The cacheDir may be null in which case udcDefaultDir()
+ * will be used.  If maxSize is non-zero, check size against maxSize
+ * and abort if it's bigger.  Returns file data (with an extra terminal for the
+ * common case where it's treated as a C string).  If retSize is non-NULL then
+ * returns size of file in *retSize. Do a freeMem or freez of the returned buffer
+ * when done. */
+
+struct lineFile *udcWrapShortLineFile(char *url, char *cacheDir, size_t maxSize);
+/* Read in entire short (up to maxSize) url into memory and wrap a line file around it.
+ * The cacheDir may be null in which case udcDefaultDir() will be used.  If maxSize
+ * is zero then a default value (currently 64 meg) will be used. */
+
+void udcSeek(struct udcFile *file, bits64 offset);
+/* Seek to a particular (absolute) position in file. */
+
+void udcSeekCur(struct udcFile *file, bits64 offset);
+/* Seek to a particular (from current) position in file. */
+
+bits64 udcTell(struct udcFile *file);
+/* Return current file position. */
+
+bits64 udcCleanup(char *cacheDir, double maxDays, boolean testOnly);
+/* Remove cached files older than maxDays old. If testOnly is set
+ * no clean up is done, but the size of the files that would be
+ * cleaned up is still. */
+
+void udcParseUrl(char *url, char **retProtocol, char **retAfterProtocol, char **retColon);
+/* Parse the URL into components that udc treats separately. 
+ * *retAfterProtocol is Q-encoded to keep special chars out of filenames.  
+ * Free all *ret's except *retColon when done. */
+
+void udcParseUrlFull(char *url, char **retProtocol, char **retAfterProtocol, char **retColon,
+		     char **retAuth);
+/* Parse the URL into components that udc treats separately.
+ * *retAfterProtocol is Q-encoded to keep special chars out of filenames.  
+ * Free all *ret's except *retColon when done. */
+
+char *udcDefaultDir();
+/* Get default directory for cache.  Use this for the udcFileOpen call if you
+ * don't have anything better.... */
+
+void udcSetDefaultDir(char *path);
+/* Set default directory for cache */
+
+#define udcDevicePrefix "udc:"
+/* Prefix used by convention to indicate a file should be accessed via udc.  This is
+ * followed by the local path name or a url, so in common practice you see things like:
+ *     udc:http://genome.ucsc.edu/goldenPath/hg18/tracks/someTrack.bb */
+
+struct slName *udcFileCacheFiles(char *url, char *cacheDir);
+/* Return low-level list of files used in cache. */
+
+char *udcPathToUrl(const char *path, char *buf, size_t size, char *cacheDir);
+/* Translate path into an URL, store in buf, return pointer to buf if successful
+ * and NULL if not. */
+
+long long int udcSizeFromCache(char *url, char *cacheDir);
+/* Look up the file size from the local cache bitmap file, or -1 if there
+ * is no cache for url. */
+
+unsigned long udcCacheAge(char *url, char *cacheDir);
+/* Return the age in seconds of the oldest cache file.  If a cache file is
+ * missing, return the current time (seconds since the epoch). */
+
+int udcCacheTimeout();
+/* Get cache timeout (if local cache files are newer than this many seconds,
+ * we won't ping the remote server to check the file size and update time). */
+
+void udcSetCacheTimeout(int timeout);
+/* Set cache timeout (if local cache files are newer than this many seconds,
+ * we won't ping the remote server to check the file size and update time). */
+
+time_t udcUpdateTime(struct udcFile *udc);
+/* return udc->updateTime */
+
+boolean udcFastReadString(struct udcFile *f, char buf[256]);
+/* Read a string into buffer, which must be long enough
+ * to hold it.  String is in 'writeString' format. */
+
+off_t udcFileSize(char *url);
+/* fetch remote or loca file size from given URL or path */
+
+boolean udcExists(char *url);
+/* return true if a remote or local file exists */
+
+boolean udcIsLocal(char *url);
+/* return true if url is not a http or ftp file, just a normal local file path */
+
+#endif /* UDC_H */
diff --git a/gbtools/src/include/blatSrc/unfin.h b/gbtools/src/include/blatSrc/unfin.h
new file mode 100644
index 0000000..dd2d11e
--- /dev/null
+++ b/gbtools/src/include/blatSrc/unfin.h
@@ -0,0 +1,31 @@
+/*****************************************************************************
+ * Copyright (C) 2000 Jim Kent.  This source code may be freely used         *
+ * for personal, academic, and non-profit purposes.  Commercial use          *
+ * permitted only by explicit agreement with Jim Kent (jim_kent at pacbell.net) *
+ *****************************************************************************/
+/* unfin - things to help handle unfinished (fragmented) DNA sequences). */
+#ifndef UNFIN_H
+#define UNFIN_H
+
+enum {contigPad = 800,};
+/* How may N's between contigs. */
+
+struct contigTree
+/* A hierarchical structure of contigs.  A forest of these is
+ * maintained by the system.  (No need to free these.) */
+    {
+    struct contigTree  *next;    /* Sibling. */
+    struct contigTree *children; /* Sub-contigs. */
+    struct contigTree *parent;   /* Parent of contig. */
+    char *id;	       /* Ensemble ID. (Not allocated here.) */
+    int submitLength;  /* Number of bases in submission. */
+    int submitOffset;  /* Offset relative to parent in genBank submission. */
+    int orientation;   /* +1 or -1. Strand relative to parent.*/
+    int corder;        /* Order of contig in genBank submission. */
+    int browserOffset; /* Offset relative to parent for browser, ordered by ensemble, with
+                        * ensContigPad N's between each contig. */ 
+    int browserLength; /* Size including padding. */
+    };
+
+#endif /* UNFIN_H */
+
diff --git a/gbtools/src/include/blatSrc/userApp.mk b/gbtools/src/include/blatSrc/userApp.mk
new file mode 100644
index 0000000..257fa88
--- /dev/null
+++ b/gbtools/src/include/blatSrc/userApp.mk
@@ -0,0 +1,49 @@
+########################################################################
+# user App rules, typical three-line makefile to use this rule set,
+#   the binary program file name is specified by the 'A' variable:
+#	kentSrc = ../..
+#	A = aveCols
+#	include ${kentSrc}/inc/userApp.mk
+#
+# for more than one object file for the resulting 'A' program, use
+#       extraObjects = second.o third.o fourth.o etc.o
+#
+# to use object files built elsewhere:
+#       externObjects = ../path/other.o
+#
+# use other libraries BEFORE jkweb.a
+#     preMyLibs += path/to/lib/other.a
+#
+include ${kentSrc}/inc/localEnvironment.mk
+include ${kentSrc}/inc/common.mk
+
+DEPLIBS = ${preMyLibs} ${kentSrc}/lib/${MACHTYPE}/jkweb.a
+ifeq ($(findstring src/hg/,${CURDIR}),src/hg/)
+  DEPLIBS = ${preMyLibs} ${kentSrc}/lib/${MACHTYPE}/jkhgap.a ${kentSrc}/lib/${MACHTYPE}/jkweb.a
+endif
+
+LINKLIBS = ${DEPLIBS} ${MYSQLLIBS} -lm
+
+O = ${A}.o
+objects = ${O} ${extraObjects} ${externObjects}
+
+${DESTDIR}${BINDIR}/${A}${EXE}: ${DEPLIBS} ${O} ${extraObjects}
+	${CC} ${COPT} -o ${DESTDIR}${BINDIR}/${A}${EXE} ${objects} ${LINKLIBS} ${L} -lm
+	${STRIP} ${DESTDIR}${BINDIR}/${A}${EXE}
+
+compile:: ${DEPLIBS} ${O} ${extraObjects}
+	${CC} ${COPT} ${CFLAGS} -o ${A}${EXE} ${objects} ${LINKLIBS} ${L} -lm
+
+install:: compile
+	rm -f ${DESTDIR}${BINDIR}/${A}${EXE}
+	cp -p ${A}${EXE} ${DESTDIR}${BINDIR}/${A}${EXE}
+	${STRIP} ${A}${EXE} ${DESTDIR}${BINDIR}/${A}${EXE}
+	rm -f ${O} ${A}${EXE}
+
+clean::
+	rm -f ${O} ${extraObjects} ${A}${EXE}
+	@if test -d tests -a -s tests/makefile; then cd tests && ${MAKE} clean; fi
+
+test::
+	@if test -d tests -a -s tests/makefile; then (cd tests && ${MAKE} test); \
+	else echo "# no tests directory (or perhaps no tests/makefile) in $(CURDIR)"; fi
diff --git a/gbtools/src/include/blatSrc/vGfx.h b/gbtools/src/include/blatSrc/vGfx.h
new file mode 100644
index 0000000..63dd864
--- /dev/null
+++ b/gbtools/src/include/blatSrc/vGfx.h
@@ -0,0 +1,193 @@
+/* vGfx - interface to polymorphic graphic object
+ * that currently can either be a memory buffer or
+ * a postScript file. */
+
+#ifndef VGFX_H
+#define VGFX_H
+
+#ifndef MEMGFX_H
+#include "memgfx.h"
+#endif
+
+struct vGfx
+/* Virtual graphic object - mostly a bunch of function
+ * pointers. */
+    {
+    struct vGfx *next;	/* Next in list. */
+    void *data;		/* Type specific data. */
+    boolean pixelBased; /* Real pixels, not PostScript or something. */
+    int width, height;  /* Virtual pixel dimensions. */
+
+    void (*close)(void **pV);
+    /* Finish writing out and free structure. */
+
+    void (*dot)(void *v, int x, int y, int colorIx);
+    /* Draw a single pixel.  Try to work at a higher level
+     * when possible! */
+
+    int (*getDot)(void *v, int x, int y);
+    /* Fetch a single pixel.  Please do not use this, this is special
+     * for verticalText only. */
+
+    void (*box)(void *v, int x, int y, 
+	    int width, int height, int colorIx);
+    /* Draw a box. */
+
+    void (*line)(void *v, 
+	    int x1, int y1, int x2, int y2, int colorIx);
+    /* Draw a line from one point to another. */
+
+    void (*text)(void *v, int x, int y, int colorIx, void *font, char *text);
+    /* Draw a line of text with upper left corner x,y. */
+
+    void (*textRight)(void *v, int x, int y, int width, int height,
+    	int colorIx, void *font, char *text);
+   /* Draw a line of text right justified in box defined by x/y/width/height */
+
+    void (*textCentered)(void *v, int x, int y, int width, int height,
+    	int colorIx, void *font, char *text);
+    /* Draw a line of text in middle of box. */
+
+    int (*findColorIx)(void *v, int r, int g, int b);
+    /* Find color in map if possible, otherwise create new color or
+     * in a pinch a close color. */
+
+    struct rgbColor (*colorIxToRgb)(void *v, int colorIx);
+    /* Return rgb values for given color index. */
+
+    void (*setWriteMode)(void *v, unsigned int writeMode);
+    /* Set write mode. */
+
+    void (*setClip)(void *v, int x, int y, int width, int height);
+    /* Set clipping rectangle. */
+
+    void (*unclip)(void *v);
+    /* Set clipping rect cover full thing. */
+
+    void (*verticalSmear)(void *v,
+	    int xOff, int yOff, int width, int height, 
+	    Color *dots, boolean zeroClear);
+    /* Put a series of one 'pixel' width vertical lines. */
+
+    void (*fillUnder)(void *v, int x1, int y1, int x2, int y2, 
+	    int bottom, Color color);
+    /* Draw a 4 sided filled figure that has line x1/y1 to x2/y2 at
+     * it's top, a horizontal line at bottom at it's bottom,  and
+     * vertical lines from the bottom to y1 on the left and bottom to
+     * y2 on the right. */
+
+    void (*drawPoly)(void *v, struct gfxPoly *poly, Color color, 
+    	boolean filled);
+    /* Draw polygon, possibly filled in color. */
+
+    void (*setHint)(void *v, char *hint, char *value);
+    /* Set hint */
+
+    char * (*getHint)(void *v, char *hint);
+    /* Get hint */
+
+    int (*getFontPixelHeight)(void *v, void *font);
+    /* How high in pixels is font? */
+
+    int (*getFontStringWidth)(void *v, void *font, char *string);
+    /* How wide is a string? */
+    };
+
+struct vGfx *vgOpenPng(int width, int height, char *fileName, boolean useTransparency);
+/* Open up something that will write out a PNG file upon vgClose.  
+ * If useTransparency, then the first color in memgfx's colormap/palette is
+ * assumed to be the image background color, and pixels of that color
+ * are made transparent. */
+
+struct vGfx *vgOpenPostScript(int width, int height, char *fileName);
+/* Open up something that will someday be a PostScript file. */
+
+void vgClose(struct vGfx **pVg);
+/* Close down virtual graphics object, and finish writing it to file. */
+
+#define vgDot(v,x,y, color) v->dot(v->data,x,y,color)
+/* Draw a single pixel.  Try to work at a higher level
+ * when possible! */
+
+#define vgGetDot(v,x,y) v->getDot(v->data,x,y)
+/* Fetch a single pixel.  Please do not use this, this is special for
+ * verticalText only */
+
+#define vgBox(v,x,y,width,height,color) v->box(v->data,x,y,width,height,color)
+/* Draw a box. */
+
+#define vgLine(v,x1,y1,x2,y2,color) v->line(v->data,x1,y1,x2,y2,color)
+/* Draw a line from one point to another. */
+
+#define vgText(v,x,y,color,font,string) v->text(v->data,x,y,color,font,string)
+/* Draw a line of text with upper left corner x,y. */
+
+#define vgTextRight(v,x,y,width,height,color,font,string) \
+	v->textRight(v->data,x,y,width,height,color,font,string)
+/* Draw a line of text right justified in box defined by x/y/width/height */
+
+#define vgTextCentered(v,x,y,width,height,color,font,string) \
+	v->textCentered(v->data,x,y,width,height,color,font,string)
+/* Draw a line of text in middle of box. */
+
+#define vgFindColorIx(v,r,g,b) v->findColorIx(v->data, r, g, b)
+/* Find index of RGB color.  */
+
+#define vgColorIxToRgb(v,colorIx) v->colorIxToRgb(v->data, colorIx)
+/* Return rgb values for given color index. */
+
+#define vgSetWriteMode(v, writeMode)    \
+	v->setWriteMode(v->data, writeMode)
+/* Set write mode. */
+
+#define vgSetClip(v,x,y,width,height) \
+	v->setClip(v->data, x, y, width, height)
+/* Set clipping rectangle. */
+
+#define vgUnclip(v) v->unclip(v->data);
+/* Get rid of clipping rectangle.  Note this is not completely
+ * the same in PostScript and the memory images.  PostScript
+ * demands that vgSetClip/vgUnclip come in pairs, and that
+ * vgSetClip just further restrict a previous vgSetClip call.
+ * The only portable way to do this is to strictly pair up
+ * the setClip/unclip calls and not to nest them. */
+
+#define vgVerticalSmear(v,x,y,w,h,dots,zeroClear) \
+	v->verticalSmear(v->data,x,y,w,h,dots,zeroClear)
+/* Take array of dots and smear them vertically. */
+
+#define vgFillUnder(v,x1,y1,x2,y2,bottom,color) \
+	v->fillUnder(v->data,x1,y1,x2,y2,bottom,color)
+    /* Draw a 4 sided filled figure that has line x1/y1 to x2/y2 at
+     * it's top, a horizontal line at bottom at it's bottom,  and
+     * vertical lines from the bottom to y1 on the left and bottom to
+     * y2 on the right. */
+
+#define vgDrawPoly(v,poly,color,filled) \
+	v->drawPoly(v->data,poly,color,filled)
+    /* Draw a polygon in color, optionally filled. */
+
+#define vgSetHint(v,hint,value) \
+	v->setHint(v->data,hint,value)
+    /* Set hint */
+
+#define vgGetHint(v,hint) \
+	v->getHint(v->data,hint)
+    /* Get hint */
+
+#define vgGetFontPixelHeight(v,font) \
+	v->getFontPixelHeight(v->data,font)
+    /* How high in pixels is font? */
+
+#define vgGetFontStringWidth(v,font,string) \
+	v->getFontStringWidth(v->data,font,string)
+    /* How wide is a string? */
+
+int vgFindRgb(struct vGfx *vg, struct rgbColor *rgb);
+/* Find color index corresponding to rgb color. */
+
+Color vgContrastingColor(struct vGfx *vg, int backgroundIx);
+/* Return black or white whichever would be more visible over
+ * background. */
+
+#endif /* VGFX_H */
diff --git a/gbtools/src/include/blatSrc/vcf.h b/gbtools/src/include/blatSrc/vcf.h
new file mode 100644
index 0000000..103a7d0
--- /dev/null
+++ b/gbtools/src/include/blatSrc/vcf.h
@@ -0,0 +1,297 @@
+/* VCF: Variant Call Format, version 4.0 / 4.1
+ * http://www.1000genomes.org/wiki/Analysis/Variant%20Call%20Format/vcf-variant-call-format-version-40
+ * http://www.1000genomes.org/wiki/Analysis/Variant%20Call%20Format/vcf-variant-call-format-version-41
+ * The vcfFile object borrows many memory handling and error reporting tricks from MarkD's
+ * gff3File; any local deficiencies are not to reflect poorly on Mark's fine work! :) */
+
+#ifndef vcf_h
+#define vcf_h
+
+#include "limits.h"
+#include "hash.h"
+#include "linefile.h"
+#include "asParse.h"
+
+enum vcfInfoType
+/* VCF header defines INFO column components; each component has one of these types: */
+    {
+    vcfInfoNoType,	// uninitialized value (0) or unrecognized type name
+    vcfInfoInteger,
+    vcfInfoFloat,
+    vcfInfoFlag,
+    vcfInfoCharacter,
+    vcfInfoString,
+    };
+
+union vcfDatum
+/* Container for a value whose type is specified by an enum vcfInfoType. */
+    {
+    int datInt;
+    double datFloat;
+    boolean datFlag;
+    char datChar;
+    char *datString;
+    };
+
+struct vcfInfoDef
+/* Definition of INFO column component from VCF header: */
+    {
+    struct vcfInfoDef *next;
+    char *key;			// A short identifier, e.g. MQ for mapping quality
+    int fieldCount;		// The number of values to follow the id, or -1 if it varies
+    enum vcfInfoType type;	// The type of values that follow the id
+    char *description;		// Brief description of info
+    };
+
+struct vcfInfoElement
+/* A single INFO column component; each row's INFO column may contain multiple components. */
+    {
+    char *key;			// An identifier described by a struct vcfInfoDef
+    int count;			// Number of data values following id
+    union vcfDatum *values;	// Array of data values following id
+    bool *missingData;		// Array of flags for missing data values ("." instead of number)
+    };
+
+struct vcfGenotype
+/* A single component of the optional GENOTYPE column. */
+    {
+    char *id;			// Name of individual/sample (pointer to vcfFile genotypeIds) or .
+    char hapIxA;		// Index of one haplotype's allele: 0=reference, 1=alt, 2=other alt
+				// *or* if negative, missing data
+    char hapIxB;		// Index of other haplotype's allele, or if negative, missing data
+    bool isPhased;		// True if haplotypes are phased
+    bool isHaploid;		// True if there is only one haplotype (e.g. chrY)
+    int infoCount;		// Number of components named in FORMAT column
+    struct vcfInfoElement *infoElements;	// Array of info components for this genotype call
+    };
+
+struct vcfRecord
+/* A VCF data row (or list of rows). */
+{
+    struct vcfRecord *next;
+    char *chrom;		// Reference assembly sequence name
+    unsigned int chromStart;	// Start offset in chrom
+    unsigned int chromEnd;	// End offset in chrom
+    char *name;			// Variant name from ID column
+    int alleleCount;		// Number of alleles (reference + alternates)
+    char **alleles;		// Alleles: reference first then alternate alleles
+    char *qual;			// . or Phred-scaled score, i.e. -10log_10 P(call in ALT is wrong)
+    int filterCount;		// Number of ;-separated filter codes in FILTER column
+    char **filters;		// Code(s) described in header for failed filters (or PASS or .)
+    int infoCount;		// Number of components of INFO column
+    struct vcfInfoElement *infoElements;	// Array of INFO column components
+    char *format;		// Optional column containing ordered list of genotype components
+    char **genotypeUnparsedStrings;	// Temporary array of unparsed optional genotype columns
+    struct vcfGenotype *genotypes;	// If built, array of parsed genotype components;
+					// call vcfParseGenotypes(record) to build.
+    struct vcfFile *file;	// Pointer back to parent vcfFile
+};
+
+struct vcfFile
+/* Info extracted from a VCF file.  Manages all memory for contents.
+ * Clearly borrowing structure from MarkD's gff3File. :) */
+{
+    char *fileOrUrl;		// VCF local file path or URL
+    char *headerString;		// Complete original header including newlines.
+    int majorVersion;		// 4 etc.
+    int minorVersion;		// 0, 1 etc.
+    struct vcfInfoDef *infoDefs;	// Header's definitions of INFO column components
+    struct vcfInfoDef *filterDefs;	// Header's definitions of FILTER column failure codes
+    struct vcfInfoDef *altDefs;	// Header's defs of symbolic alternate alleles (e.g. DEL, INS)
+    struct vcfInfoDef *gtFormatDefs;	// Header's defs of GENOTYPE compnts. listed in FORMAT col.
+    int genotypeCount;		// Number of optional genotype columns described in header
+    char **genotypeIds;		// Array of optional genotype column names described in header
+    struct vcfRecord *records;	// VCF data rows, sorted by position
+    struct hash *byName;		// Hash records by name -- not populated until needed.
+    struct hash *pool;		// Used to allocate string values that tend to
+				// be repeated in the files.  hash's localMem is also used to
+				// allocated memory for all other objects (if recordPool null)
+    struct lm *reusePool;       // If created with vcfFileMakeReusePool, non-shared record data is
+                                // allocated from this pool. Useful when walking through huge files.
+    struct lineFile *lf;	// Used only during parsing
+    int maxErr;			// Maximum number of errors before aborting
+    int errCnt;			// Error count
+};
+
+/* Reserved but optional INFO keys: */
+extern const char *vcfInfoAncestralAllele;
+extern const char *vcfInfoPerAlleleGtCount;	// allele count in genotypes, for each ALT allele,
+						// in the same order as listed
+extern const char *vcfInfoAlleleFrequency;  	// allele frequency for each ALT allele in the same
+						// order as listed: use this when estimated from
+						// primary data, not called genotypes
+extern const char *vcfInfoNumAlleles;		// total number of alleles in called genotypes
+extern const char *vcfInfoBaseQuality;		// RMS base quality at this position
+extern const char *vcfInfoCigar;		// cigar string describing how to align an
+						// alternate allele to the reference allele
+extern const char *vcfInfoIsDbSnp;		// dbSNP membership
+extern const char *vcfInfoDepth;		// combined depth across samples, e.g. DP=154
+extern const char *vcfInfoEnd;			// end position of the variant described in this
+						// record (esp. for CNVs)
+extern const char *vcfInfoIsHapMap2;		// membership in hapmap2
+extern const char *vcfInfoIsHapMap3;		// membership in hapmap3
+extern const char *vcfInfoIs1000Genomes;	// membership in 1000 Genomes
+extern const char *vcfInfoMappingQuality;	// RMS mapping quality, e.g. MQ=52
+extern const char *vcfInfoMapQual0Count;	// number of MAPQ == 0 reads covering this record
+extern const char *vcfInfoNumSamples;		// Number of samples with data
+extern const char *vcfInfoStrandBias;		// strand bias at this position
+extern const char *vcfInfoIsSomatic;		// indicates that the record is a somatic mutation,
+						// for cancer genomics
+extern const char *vcfInfoIsValidated;		// validated by follow-up experiment
+
+/* Reserved but optional per-genotype keys: */
+extern const char *vcfGtGenotype;	// numeric allele values separated by "/" (unphased)
+					// or "|" (phased). Allele values are 0 for
+					// reference allele, 1 for the first allele in ALT,
+					// 2 for the second allele in ALT and so on.
+extern const char *vcfGtDepth;		// read depth at this position for this sample
+extern const char *vcfGtFilter;		// analogous to variant's FILTER field
+extern const char *vcfGtLikelihoods;	// three floating point log10-scaled likelihoods for
+					// AA,AB,BB genotypes where A=ref and B=alt;
+					// not applicable if site is not biallelic.
+extern const char *vcfGtPhred;		// Phred-scaled genotype likelihoods rounded to closest int
+extern const char *vcfGtConditionalQual;	// Conditional genotype quality
+					// i.e. phred quality -10log_10 P(genotype call is wrong,
+					// conditioned on the site's being variant)
+extern const char *vcfGtHaplotypeQualities;	// Two phred qualities comma separated
+extern const char *vcfGtPhaseSet;	// Set of phased genotypes to which this genotype belongs
+extern const char *vcfGtPhasingQuality;	// Phred-scaled P(alleles ordered wrongly in heterozygote)
+extern const char *vcfGtExpectedAltAlleleCount;	// Typically used in association analyses
+
+INLINE void vcfPrintDatum(FILE *f, const union vcfDatum datum, const enum vcfInfoType type)
+/* Print datum to f in the format determined by type. */
+{
+switch (type)
+    {
+    case vcfInfoInteger:
+	fprintf(f, "%d", datum.datInt);
+	break;
+    case vcfInfoFloat:
+	fprintf(f, "%f", datum.datFloat);
+	break;
+    case vcfInfoFlag:
+	fprintf(f, "%s", datum.datString); // Flags could have values in older VCF
+	break;
+    case vcfInfoCharacter:
+	fprintf(f, "%c", datum.datChar);
+	break;
+    case vcfInfoString:
+	fprintf(f, "%s", datum.datString);
+	break;
+    default:
+	errAbort("vcfPrintDatum: Unrecognized type %d", type);
+	break;
+    }
+}
+
+#define VCF_IGNORE_ERRS (INT_MAX - 1)
+
+struct vcfFile *vcfFileNew();
+/* Return a new, empty vcfFile object. */
+
+struct vcfFile *vcfFileMayOpen(char *fileOrUrl, char *chrom, int start, int end,
+			       int maxErr, int maxRecords, boolean parseAll);
+/* Open fileOrUrl and parse VCF header; return NULL if unable.
+ * If chrom is non-NULL, scan past any variants that precede {chrom, chromStart}.
+ * Note: this is very inefficient -- it's better to use vcfTabix if possible!
+ * If parseAll, then read in all lines in region, parse and store in
+ * vcff->records; if maxErr >= zero, then continue to parse until
+ * there are maxErr+1 errors.  A maxErr less than zero does not stop
+ * and reports all errors. Set maxErr to VCF_IGNORE_ERRS for silence. */
+
+struct vcfFile *vcfTabixFileMayOpen(char *fileOrUrl, char *chrom, int start, int end,
+				    int maxErr, int maxRecords);
+/* Open a VCF file that has been compressed and indexed by tabix and
+ * parse VCF header, or return NULL if unable.  If chrom is non-NULL,
+ * seek to the position range and parse all lines in range into
+ * vcff->records.  If maxErr >= zero, then continue to parse until
+ * there are maxErr+1 errors.  A maxErr less than zero does not stop
+ * and reports all errors. Set maxErr to VCF_IGNORE_ERRS for silence. */
+
+int vcfTabixBatchRead(struct vcfFile *vcff, char *chrom, int start, int end,
+                      int maxErr, int maxRecords);
+// Reads a batch of records from an opened and indexed VCF file, adding them to
+// vcff->records and returning the count of new records added in this batch.
+// Note: vcff->records will continue to be sorted, even if batches are loaded
+// out of order.  Additionally, resulting vcff->records will contain no duplicates
+// so returned count refects only the new records added, as opposed to all records
+// in range.  If maxErr >= zero, then continue to parse until there are maxErr+1
+// errors.  A maxErr less than zero does not stop and reports all errors.  Set
+// maxErr to VCF_IGNORE_ERRS for silence.
+
+void vcfFileMakeReusePool(struct vcfFile *vcff, int initialSize);
+// Creates a separate memory pool for records.  Establishing this pool allows
+// using vcfFileFlushRecords to abandon previously read records and free
+// the associated memory. Very useful when reading an entire file in batches.
+#define vcfFileLm(vcff) ((vcff)->reusePool ? (vcff)->reusePool : (vcff)->pool->lm)
+
+void vcfFileFlushRecords(struct vcfFile *vcff);
+// Abandons all previously read vcff->records and flushes the reuse pool (if it exists).
+// USE WITH CAUTION.  All previously allocated record pointers are now invalid.
+
+struct vcfRecord *vcfNextRecord(struct vcfFile *vcff);
+/* Parse the words in the next line from vcff into a vcfRecord. Return NULL at end of file.
+ * Note: this does not store record in vcff->records! */
+
+struct vcfRecord *vcfRecordFromRow(struct vcfFile *vcff, char **words);
+/* Parse words from a VCF data line into a VCF record structure. */
+
+unsigned int vcfRecordTrimIndelLeftBase(struct vcfRecord *rec);
+/* For indels, VCF includes the left neighboring base; for example, if the alleles are
+ * AA/- following a G base, then the VCF record will start one base to the left and have
+ * "GAA" and "G" as the alleles.  That is not nice for display for two reasons:
+ * 1. Indels appear one base wider than their dbSNP entries.
+ * 2. In pgSnp display mode, the two alleles are always the same color.
+ * However, for hgTracks' mapBox we need the correct chromStart for identifying the
+ * record in hgc -- so return the original chromStart. */
+
+unsigned int vcfRecordTrimAllelesRight(struct vcfRecord *rec);
+/* Some tools output indels with extra base to the right, for example ref=ACC, alt=ACCC
+ * which should be ref=A, alt=AC.  When the extra bases make the variant extend from an
+ * intron (or gap) into an exon, it can cause a false appearance of a frameshift.
+ * To avoid this, when all alleles have identical base(s) at the end, trim all of them,
+ * and update rec->chromEnd.
+ * For hgTracks' mapBox we need the correct chromStart for identifying the record in hgc,
+ * so return the original chromEnd. */
+
+int vcfRecordCmp(const void *va, const void *vb);
+/* Compare to sort based on position. */
+
+void vcfFileFree(struct vcfFile **vcffPtr);
+/* Free a vcfFile object. */
+
+const struct vcfRecord *vcfFileFindVariant(struct vcfFile *vcff, char *variantId);
+/* Return all records with name=variantId, or NULL if not found. */
+
+const struct vcfInfoElement *vcfRecordFindInfo(const struct vcfRecord *record, char *key);
+/* Find an INFO element, or NULL. */
+
+struct vcfInfoDef *vcfInfoDefForKey(struct vcfFile *vcff, const char *key);
+/* Return infoDef for key, or NULL if it wasn't specified in the header or VCF spec. */
+
+void vcfParseGenotypes(struct vcfRecord *record);
+/* Translate record->genotypesUnparsedStrings[] into proper struct vcfGenotype[].
+ * This destroys genotypesUnparsedStrings. */
+
+const struct vcfGenotype *vcfRecordFindGenotype(struct vcfRecord *record, char *sampleId);
+/* Find the genotype and associated info for the individual, or return NULL.
+ * This calls vcfParseGenotypes if it has not already been called. */
+
+struct vcfInfoDef *vcfInfoDefForGtKey(struct vcfFile *vcff, const char *key);
+/* Look up the type of genotype FORMAT component key, in the definitions from the header,
+ * and failing that, from the keys reserved in the spec. */
+
+char *vcfFilePooledStr(struct vcfFile *vcff, char *str);
+/* Allocate memory for a string from vcff's shared string pool. */
+
+#define VCF_NUM_COLS 10
+
+struct asObject *vcfAsObj();
+// Return asObject describing fields of VCF
+
+char *vcfGetSlashSepAllelesFromWords(char **words, struct dyString *dy);
+/* Overwrite dy with a /-separated allele string from VCF words,
+ * skipping the extra initial base that VCF requires for indel alleles if necessary.
+ * Return dy->string for convenience. */
+
+#endif // vcf_h
diff --git a/gbtools/src/include/blatSrc/vcfBits.h b/gbtools/src/include/blatSrc/vcfBits.h
new file mode 100644
index 0000000..477ac05
--- /dev/null
+++ b/gbtools/src/include/blatSrc/vcfBits.h
@@ -0,0 +1,158 @@
+/* vcfBits.c/.h: Variant Call Format, analysis by bit maps.
+ * The routines found here are dependent upon vcf.c/.h for accessing vcf records.
+ * They allow analysis of a set of vcf records by bit maps with one bit map per variant
+ * location and where each haplotype covered by the vcf record is represented by a single
+ * bit (or pair of bits). Additional analysis can be performed by creating haplotype based
+ * bit maps from variant bit maps.  There is one haplotype bit map for each haplotype
+ * (subject chromosome) with one (or two) bits for each variant location in the set of records. */
+
+#ifndef vcfBits_h
+#define vcfBits_h
+
+#include "vcf.h"
+#include "bits.h"
+#include "elmTree.h"
+
+enum variantType
+/* VCF header defines INFO column components; each component has one of these types: */
+    {
+    vtNoType    = 0,   // uninitialized value (0) or unrecognized type name
+    vtSNP       = 1,   // Single Nucleotide polymorphism (most)
+    vtInsertion = 2,   // Insertion relative to reference genome
+    vtDeletion  = 3,   // Insertion relative to reference genome
+    };
+
+struct variantBits
+// all genotypes/haplotypes/alleles for one record are converted to a bit map
+// One struct per variant record in vcff->records.  One slot per genotype containing
+// 2 slots for haplotypes and then 1 or 2 bits per allele.
+    {
+    struct variantBits *next;
+    struct vcfRecord *record;     // keep track of record for later interpretation
+    enum variantType vType;       // Might as well know this up front
+    int genotypeSlots;            // subjects covered in vcf file
+    unsigned char haplotypeSlots; // 2 unless haploid or homozygous only
+    unsigned char alleleSlots;    // 1 for 1 alt allele, 2 for 2 or 3 alt alleles >3 unsupported
+    int bitsOn;                   // count of bits on.
+    Bits *bits;                   // allele bits genotype x haplotype x allele
+    Bits *unphased;               // unphased bits (1 bit per genotype) if requested, else NULL
+    void **variants;              // special purposes array of variants filled and used by caller
+    };
+
+#define genoIxFromGenoHapIx(vBits,genoHaploIx)  (genoHaploIx / vBits->haplotypeSlots)
+#define hapIxFromGenoHapIx(vBits,genoHaploIx)   (genoHaploIx % vBits->haplotypeSlots)
+#define genoHapIx(vBits,genoIx,hapIx)          ((genoIx * vBits->haplotypeSlots) + hapIx)
+#define vBitsSlot(vBits,genoIx,hapIx,variantIx) \
+        ( (genoHapIx(vBits,genoIx,hapIx) * vBits->alleleSlots) + variantIx)
+#define vBitsSlotCount(vBits) \
+        ((vBits)->genotypeSlots * (vBits)->haplotypeSlots * (vBits)->alleleSlots)
+#define vcfBitsSubjectCount(vBits) ((vBits)->genotypeSlots)
+
+struct variantBits *vcfRecordsToVariantBits(struct vcfFile *vcff, struct vcfRecord *records,
+                                            boolean phasedOnly, boolean homozygousOnly,
+                                            boolean unphasedBits);
+// Returns list of bit arrays covering all genotypes/haplotype/alleles per record for each record
+// provided.  If records is NULL will use vcff->records. Bit map has one slot per genotype
+// containing 2 slots for haplotypes and 1 or 2 bits per allele. The normal (simple) case of
+// 1 reference and 1 alternate allele results in 1 allele bit with 0:ref. Two or three alt alleles
+// is represented by two bits per allele (>3 non-reference alleles unsupported).
+// If phasedOnly, unphased haplotype bits will be set only if both agree (00 is uninterpretable)
+// Haploid genotypes (e.g. chrY) and homozygousOnly bitmaps contain 1 haplotype slot.
+// If unphasedBits, then vBits->unphased will contain a bitmap with 1s for all unphased genotypes.
+// NOTE: allocated from vcff pool, so closing file or flushing reusePool will invalidate this.
+
+Bits *vcfRecordHaploidBits(struct vcfFile *vcff, struct vcfRecord *record);
+// Returns array (1 bit per genotype) for each haploid genotype.
+// This is useful for interpreting chrX.
+
+int vBitsHaploidCount(struct variantBits *vBits);
+// Returns the number of subjects in the VCF dataset that are haploid at this location
+
+//#define vBitsSubjectChromCount(vBits) ((vBits)->genotypeSlots * (vBits)->haplotypeSlots)
+int vBitsSubjectChromCount(struct variantBits *vBits);
+// Returns the chromosomes in the VCF dataset that are covered at this location
+
+int vcfVariantBitsDropSparse(struct variantBits **vBitsList, int haploGenomeMin,
+                             boolean dropRefMissing);
+// Drops vBits found in less than a minimum number of haplotype genomes.  Supplying 1 will
+// drop variants found in no haplotype genomes.  Declaring dropRefMissing will drop variants
+// in all haplotype genomes (variants where reference is not represented in dataset and
+// *might* be in error). Returns count of vBits structure that were dropped.
+
+int vcfVariantBitsAlleleOccurs(struct variantBits *vBits, unsigned char alleleIx,
+                               boolean homozygousOrHaploid);
+// Counts the number of times a particular allele occurs in the subjects*chroms covered.
+// If homozygousOrHaploid then the allele must occur in both chroms to be counted
+
+int vcfVariantBitsReferenceOccurs(struct vcfFile *vcff, struct variantBits *vBitsList,
+                                  boolean homozygousOrHaploid);
+// For an entire list of vBits structs, counts the times the reference allele occurs.
+// If homozygousOrHaploid then the reference allele must occur in both chroms to be counted
+
+
+int vcfVariantMostPopularCmp(const void *va, const void *vb);
+// Compare to sort variantBits based upon how many genomes/chrom has the variant
+// This can be used to build haploBits in most populous order for tree building
+
+struct haploBits
+// all variants/haplotypes/genotypes for a set of records are converted to a bit map
+// One struct per haplotype genome covering vcff->records.  One slot per variant
+// and 1 or 2 bits per allele.  NOTE: variant slots will all be normalized to max.
+    {
+    struct haploBits *next;
+    char *ids;                 // comma separated lists of genotype names and haplotypes
+    int haploGenomes;          // count of haploid genomes this structure covers
+    int genomeIx;              // genome sample index (allows later lookups)
+    unsigned char haploidIx;   // haploid index [0,1] (allows later  lookups)
+    int variantSlots;          // count of variants covered in set of vcf records
+    unsigned char alleleSlots; // 1 for 1 alt allele, 2 for 2 or 3 alt alleles >3 unsupported
+    int bitsOn;                // count of bits on.
+    Bits *bits;                // allele bits variant x allele
+    };
+
+#define vcfRecordIxFromBitIx(hBits,bitIx)  (bitIx / hBits->alleleSlots)
+#define variantSlotFromBitIx(hBits,bitIx)  (vcfRecordIxFromBitIx(hBits,bitIx) * hBits->alleleSlots)
+#define variantNextFromBitIx(hBits,bitIx)  (variantSlotFromBitIx(hBits,bitIx) + hBits->alleleSlots)
+#define hBitsSlot(hBits,variantIx,alleleIx) ((hBits->alleleSlots * variantIx) + alleleIx)
+#define hBitsSlotCount(hBits) ((hBits)->variantSlots * (hBits)->alleleSlots)
+
+// An hBits struct is "Real" if it is generated from variants.  It may also be a subset.
+#define hBitsIsSubset(hBits)    ((hBits)->haploGenomes == 0)
+#define hBitsIsReal(hBits)      ((hBits)->haploGenomes >  0)
+
+struct haploBits *vcfVariantBitsToHaploBits(struct vcfFile *vcff, struct variantBits *vBitsList,
+                                            boolean ignoreReference);
+// Converts a set of variant bits to haplotype bits, resulting in one bit struct
+// per haplotype genome that has non-reference variations.  If ignoreReference, only
+// haplotype genomes with at lone non-reference variant are returned.
+// A haploBit array has one variant slot per vBit struct and one or more bits per allele.
+// NOTE: allocated from vcff pool, so closing file or flushing reusePool will invalidate this.
+
+int vcfHaploBitsListCollapseIdentical(struct vcfFile *vcff, struct haploBits **phBitsList,
+                                      int haploGenomeMin);
+// Collapses a list of haploBits based upon identical bit arrays.
+// If haploGenomeMin > 1, will drop all hBits structs covering less than N haploGenomes.
+// Returns count of hBit structs removed.
+
+INLINE struct variantBits *vcfHaploBitIxToVariantBits(struct haploBits *hBits, int bitIx,
+                                                      struct variantBits *vBitsList)
+// Returns appropriate vBits from vBits list associated with a given bit in an hBits struct.
+// Assumes vBitsList is in same order as hBits bit array.  Note vBits->record has full vcf details.
+{
+return slElementFromIx(vBitsList,vcfRecordIxFromBitIx(hBits,bitIx));
+}
+
+unsigned char vcfHaploBitsToVariantAlleleIx(struct haploBits *hBits,int bitIx);
+// Given a hBits struct and bitIx, what is the actual variant allele ix
+// to use when accessing the vcfRecord?
+
+enum elmNodeOverlap vcfHaploBitsCmp(const struct slList *elA, const struct slList *elB,
+                                    int *matchWeight, void *extra);
+// HaploBits compare routine for building tree of relations using elmTreeGrow().
+
+struct slList *vcfHaploBitsMatching(const struct slList *elA, const struct slList *elB,
+                                    void *extra);
+// Returns a HaploBits structure representing the common parts of elements A and B.
+// Used with elmTreeGrow() to create nodes that are the common parts between leaves/branches.
+
+#endif // vcfBits_h
diff --git a/gbtools/src/include/blatSrc/verbose.h b/gbtools/src/include/blatSrc/verbose.h
new file mode 100644
index 0000000..4dd68b7
--- /dev/null
+++ b/gbtools/src/include/blatSrc/verbose.h
@@ -0,0 +1,53 @@
+/* verbose.h - write out status messages according to the
+ * current verbosity level.  These messages go to stderr. */
+
+#ifndef VERBOSE_H
+#define VERBOSE_H
+
+void verbose(int verbosity, char *format, ...)
+/* Write printf formatted message to log (which by
+ * default is stderr) if global verbose variable
+ * is set to verbosity or higher. */
+#if defined(__GNUC__)
+__attribute__((format(printf, 2, 3)))
+#endif
+    ;
+
+void verboseVa(int verbosity, char *format, va_list args);
+/* Log with at given verbosity vprintf formatted args. */
+
+void verboseTimeInit(void);
+/* Initialize or reinitialize the previous time for use by verboseTime. */
+
+void verboseTime(int verbosity, char *label, ...)
+/* Print label and how long it's been since last call.  Start time can be
+ * initialized with verboseTimeInit, otherwise the elapsed time will be
+ * zero. */
+#if defined(__GNUC__)
+__attribute__((format(printf, 2, 3)))
+#endif
+    ;
+
+void verboseDot();
+/* Write I'm alive dot (at verbosity level 1) */
+
+boolean verboseDotsEnabled();
+/* check if outputting of happy dots are enabled.  They will be enabled if the
+ * verbosity is > 0, stderr is a tty and we don't appear to be running an
+ * emacs shell. */
+
+int verboseLevel(void);
+/* Get verbosity level. */
+
+void verboseSetLevel(int verbosity);
+/* Set verbosity level in log.  0 for no logging,
+ * higher number for increasing verbosity. */
+
+void verboseSetLogFile(char *name);
+/* Set logFile for verbose messages overrides stderr. */
+
+FILE *verboseLogFile();
+/* Get the verbose log file. */
+
+#endif /* VERBOSE_H */
+
diff --git a/gbtools/src/include/blatSrc/wormdna.h b/gbtools/src/include/blatSrc/wormdna.h
new file mode 100644
index 0000000..6610600
--- /dev/null
+++ b/gbtools/src/include/blatSrc/wormdna.h
@@ -0,0 +1,245 @@
+/*****************************************************************************
+ * Copyright (C) 2000 Jim Kent.  This source code may be freely used         *
+ * for personal, academic, and non-profit purposes.  Commercial use          *
+ * permitted only by explicit agreement with Jim Kent (jim_kent at pacbell.net) *
+ *****************************************************************************/
+/* WormDNA - stuff that finds C. elegans sequence data. */
+#ifndef WORMDNA_H
+#define WORMDNA_H
+
+#ifndef DNAUTIL_H
+#include "dnautil.h"
+#endif
+
+#ifndef DNASEQ_H
+#include "dnaseq.h"
+#endif 
+
+#ifndef NT4_H
+#include "nt4.h"
+#endif 
+
+#ifndef GDF_H
+#include "gdf.h"
+#endif
+
+
+struct wormCdnaInfo 
+/* Extra info stored in cDNA database other than string. */
+    {
+    char *motherString;         /* Holds memory for other strings. */
+    char *name;                 /* Name of cDNA. */
+    char *gene;                 /* Something like unc-1 */
+    char orientation;           /* + or - (relative to gene transcription direction) */
+    char *product;              /* Something like "cyclin-dependent kinase" */
+    int cdsStart, cdsEnd;       /* Start and stop of coding region within cDNA. */
+    boolean knowStart, knowEnd; /* Start known?  End known? */
+    boolean isEmbryonic;        /* True if derived from embryo culture. */
+    boolean isAdult;            /* True if derived from adult culture. */
+    boolean isMale;             /* True if males only. */
+    boolean isHermaphrodite;    /* True if hermaphrodites only. */
+    char *description;          /* One line description. */
+    };
+
+boolean wormCdnaInfo(char *name, struct wormCdnaInfo *retInfo);
+/* Get info about cDNA sequence. */
+
+void wormFaCommentIntoInfo(char *faComment, struct wormCdnaInfo *retInfo);
+/* Process line from .fa file containing information about cDNA into binary
+ * structure. */
+
+void wormFreeCdnaInfo(struct wormCdnaInfo *ci);
+/* Free the mother string in the cdnaInfo.  (The info structure itself normally isn't
+ * dynamically allocated. */
+
+boolean wormInfoForGene(char *orfName, struct wormCdnaInfo *retInfo);
+/* Return info if any on gene/ORF, or NULL if none exists. wormFreeCdnaInfo retInfo when done.
+ */
+
+
+boolean wormCdnaSeq(char *name, struct dnaSeq **retDna, struct wormCdnaInfo *retInfo);
+/* Get a single worm cDNA sequence. Optionally (if retInfo is non-null) get additional
+ * info about the sequence. */
+
+void wormCdnaUncache();
+/* Get rid of any resources used caching or quickly accessing
+ * worm cDNA */
+
+
+/* Stuff for searching entire database of worm cDNA */
+
+struct wormCdnaIterator
+    {
+    FILE *faFile;
+    };
+
+boolean wormSearchAllCdna(struct wormCdnaIterator **retSi);
+/* Set up to search entire database or worm cDNA */
+
+void freeWormCdnaIterator(struct wormCdnaIterator **pIt);
+/* Free up iterator returned by wormSearchAllCdna() */
+
+struct dnaSeq *nextWormCdna(struct wormCdnaIterator *it);
+/* Return next sequence in database */
+
+boolean nextWormCdnaAndInfo(struct wormCdnaIterator *it, struct dnaSeq **retSeq, struct wormCdnaInfo *retInfo);
+/* Return next sequence and associated info from database. */
+
+char *wormFeaturesDir();
+/* Return the features directory. (Includes trailing slash.) */
+
+char *wormChromDir();
+/* Return the directory with the chromosomes. */
+
+char *wormCdnaDir();
+/* Return directory with cDNA data. */
+
+char *wormSangerDir();
+/* Return directory with Sanger specific gene predictions. */
+
+char *wormGenieDir();
+/* Return directory with Genie specific gene predictions. */
+
+char *wormXenoDir();
+/* Return directory with cross-species alignments. */
+
+boolean wormIsGeneName(char *name);
+/* See if it looks like a worm gene name - that is
+ *   abc-12
+ * letters followed by a dash followed by a number. */
+
+boolean wormIsOrfName(char *in);
+/* Check to see if the input is formatted correctly to be
+ * an ORF. */
+
+struct slName *wormGeneToOrfNames(char *name);
+/* Returns list of cosmid.N type ORF names that are known by abc-12 type name. */
+
+char *wormGeneFirstOrfName(char *geneName);
+/* Return first ORF synonym to gene. */
+
+boolean wormGeneForOrf(char *orfName, char *geneNameBuf, int bufSize);
+/* Look for gene type (unc-12 or something) synonym for cosmid.N name. */
+
+boolean getWormGeneExonDna(char *name, DNA **retDna);
+/* get the exon sequence for a gene */
+
+boolean getWormGeneDna(char *name, DNA **retDna, boolean upcExons);
+/* Get the DNA associated with a gene.  Optionally upper case exons. */
+
+void wormLoadNt4Genome(struct nt4Seq ***retNt4Seq, int *retNt4Count);
+/* Load up entire packed worm genome into memory. */
+
+void wormFreeNt4Genome(struct nt4Seq ***pNt4Seq);
+/* Free up packed worm genome. */
+
+int wormChromSize(char *chrom);
+/* Return size of worm chromosome. */
+
+DNA *wormChromPart(char *chromId, int start, int size);
+/* Return part of a worm chromosome. */
+
+DNA *wormChromPartExonsUpper(char *chromId, int start, int size);
+/* Return part of a worm chromosome with exons in upper case. */
+
+void wormChromNames(char ***retNames, int *retNameCount);
+/* Get list of worm chromosome names. */
+
+int wormChromIx(char *name);
+/* Return index of worm chromosome. */
+
+char *wormChromForIx(int ix);
+/* Given ix, return worm chromosome official name. */
+
+char *wormOfficialChromName(char *name);
+/* This returns a pointer to our official string for the chromosome name.
+ * (This allows some routines to do directo pointer comparisons rather
+ * than string comparisons.) */
+
+boolean wormGeneRange(char *name, char **retChromId, char *retStrand, int *retStart, int *retEnd);
+/* Return chromosome position of a gene, ORF,  nameless cluster, or cosmid. Returns
+ * FALSE if no such gene/cluster. */
+
+boolean wormParseChromRange(char *in, char **retChromId, int *retStart, int *retEnd);
+/* Chop up a string representation of a range within a chromosome and put the
+ * pieces into the return variables. Return FALSE if it isn't formatted right. */
+
+boolean wormIsChromRange(char *in);
+/* Check to see if the input is formatted correctly to be
+ * a range of a chromosome. */
+
+void wormClipRangeToChrom(char *chrom, int *pStart, int *pEnd);
+/* Make sure that we stay inside chromosome. */
+
+boolean wormIsNamelessCluster(char *name);
+/* Returns true if name is of correct format to be a nameless cluster. */
+
+DNA *wormGetNamelessClusterDna(char *name);
+/* Get DNA associated with nameless cluster */
+
+struct wormFeature
+/* This holds info on where something is in the genome. */
+    {
+    struct wormFeature *next;
+    char *chrom;    /* One of names returned by */
+    int start, end;
+    char typeByte;
+    char name[1];   /* Allocated to fit. */
+    };
+
+struct wormFeature *newWormFeature(char *name, char *chrom, int start, int end, char typeByte);
+/* Allocate a new feature. */
+
+struct wormFeature *wormCdnasInRange(char *chromId, int start, int end);
+/* Get info on all cDNAs that overlap the range. */
+
+struct wormFeature *wormGenesInRange(char *chromId, int start, int end);
+/* Get info on all genes that overlap the range. */
+
+struct wormFeature *wormSomeGenesInRange(char *chromId, int start, int end, char *gdfDir);
+/* Get info on genes that overlap range in a particular set of gene predictions. */
+
+struct wormFeature *wormCosmidsInRange(char *chromId, int start, int end);
+/* Get info on all cosmids that overlap the range. */
+
+struct cdaAli *wormCdaAlisInRange(char *chromId, int start, int end);
+/* Return list of cdna alignments that overlap range. */
+
+FILE *wormOpenGoodAli();
+/* Opens good alignment file and reads signature. 
+ * (You can then cdaLoadOne() it.) */
+
+struct wormGdfCache
+/* Helps managed fast indexed access to gene predictions. */
+    {
+    char **pDir;
+    struct snof *snof;
+    FILE *file;
+    };
+extern struct wormGdfCache wormSangerGdfCache;
+extern struct wormGdfCache wormGenieGdfCache;
+
+struct gdfGene *wormGetGdfGene(char *name);
+/* Get the named gdfGene. */
+
+struct gdfGene *wormGetSomeGdfGene(char *name, struct wormGdfCache *cache);
+/* Get a single gdfGene of given name. */
+
+struct gdfGene *wormGetGdfGeneList(char *baseName, int baseNameSize);
+/* Get all gdfGenes that start with a given name. */
+
+struct gdfGene *wormGetSomeGdfGeneList(char *baseName, int baseNameSize, struct wormGdfCache *cache);
+/* Get all gdfGenes that start with a given name. */
+
+struct gdfGene *wormGdfGenesInRange(char *chrom, int start, int end, 
+    struct wormGdfCache *geneFinder);
+/* Get list of genes in range according to given gene finder. */
+
+void wormUncacheGdf();
+/* Free up resources associated with fast GDF access. */
+
+void wormUncacheSomeGdf(struct wormGdfCache *cache);
+/* Uncache some gene prediction set. */
+
+#endif /* WORMDNA_H */
+
diff --git a/gbtools/src/include/blatSrc/xAli.h b/gbtools/src/include/blatSrc/xAli.h
new file mode 100644
index 0000000..205823e
--- /dev/null
+++ b/gbtools/src/include/blatSrc/xAli.h
@@ -0,0 +1,73 @@
+/* xAli.h was originally generated by the autoSql program, which also 
+ * generated xAli.c and xAli.sql.  This header links the database and
+ * the RAM representation of objects. */
+
+#ifndef XALI_H
+#define XALI_H
+
+struct xAli
+/* An alignment - like psl but includes the sequence itself */
+    {
+    struct xAli *next;  /* Next in singly linked list. */
+    unsigned match;	/* Number of bases that match that aren't repeats */
+    unsigned misMatch;	/* Number of bases that don't match */
+    unsigned repMatch;	/* Number of bases that match but are part of repeats */
+    unsigned nCount;	/* Number of 'N' bases */
+    unsigned qNumInsert;	/* Number of inserts in query */
+    int qBaseInsert;	/* Number of bases inserted in query */
+    unsigned tNumInsert;	/* Number of inserts in target */
+    int tBaseInsert;	/* Number of bases inserted in target */
+    char strand[3];	/* + or - for strand. First character query, second target (optional) */
+    char *qName;	/* Query sequence name */
+    unsigned qSize;	/* Query sequence size */
+    unsigned qStart;	/* Alignment start position in query */
+    unsigned qEnd;	/* Alignment end position in query */
+    char *tName;	/* Target sequence name */
+    unsigned tSize;	/* Target sequence size */
+    unsigned tStart;	/* Alignment start position in target */
+    unsigned tEnd;	/* Alignment end position in target */
+    unsigned blockCount;	/* Number of blocks in alignment */
+    unsigned *blockSizes;	/* Size of each block */
+    unsigned *qStarts;	/* Start of each block in query. */
+    unsigned *tStarts;	/* Start of each block in target. */
+    char **qSeq;	/* Query sequence for each block. */
+    char **tSeq;	/* Target sequence for each block. */
+    };
+
+struct xAli *xAliLoad(char **row);
+/* Load a xAli from row fetched with select * from xAli
+ * from database.  Dispose of this with xAliFree(). */
+
+struct xAli *xAliLoadAll(char *fileName);
+/* Load all xAli from a tab-separated file.
+ * Dispose of this with xAliFreeList(). */
+
+struct xAli *xAliCommaIn(char **pS, struct xAli *ret);
+/* Create a xAli out of a comma separated string. 
+ * This will fill in ret if non-null, otherwise will
+ * return a new xAli */
+
+void xAliFree(struct xAli **pEl);
+/* Free a single dynamically allocated xAli such as created
+ * with xAliLoad(). */
+
+void xAliFreeList(struct xAli **pList);
+/* Free a list of dynamically allocated xAli's */
+
+void xAliOutput(struct xAli *el, FILE *f, char sep, char lastSep);
+/* Print out xAli.  Separate fields with sep. Follow last field with lastSep. */
+
+#define xAliTabOut(el,f) xAliOutput(el,f,'\t','\n');
+/* Print out xAli as a line in a tab-separated file. */
+
+#define xAliCommaOut(el,f) xAliOutput(el,f,',',',');
+/* Print out xAli as a comma separated list including final comma. */
+
+/* ----------------  Start human generated code. ------------------ */
+
+struct xAli *xAliNext(struct lineFile *lf);
+/* Read next line from file and convert it to xAli.  Return
+ * NULL at eof. */
+
+#endif /* XALI_H */
+
diff --git a/gbtools/src/include/blatSrc/xa.h b/gbtools/src/include/blatSrc/xa.h
new file mode 100644
index 0000000..0a8fe34
--- /dev/null
+++ b/gbtools/src/include/blatSrc/xa.h
@@ -0,0 +1,63 @@
+/*****************************************************************************
+ * Copyright (C) 2000 Jim Kent.  This source code may be freely used         *
+ * for personal, academic, and non-profit purposes.  Commercial use          *
+ * permitted only by explicit agreement with Jim Kent (jim_kent at pacbell.net) *
+ *****************************************************************************/
+/* xa.h - manage cross species alignments stored in database. */
+#ifndef XA_H
+#define XA_H
+
+struct xaAli
+/* This contains information about one xeno alignment. */
+    {
+    struct xaAli *next;
+    char *name;
+    char *query;
+    int qStart, qEnd;
+    char qStrand;
+    char *target;
+    int tStart, tEnd;
+    char tStrand;
+    int milliScore;
+    int symCount;
+    char *qSym, *tSym, *hSym;
+    };
+
+void xaAliFree(struct xaAli *xa);
+/* Free up a single xaAli. */
+
+void xaAliFreeList(struct xaAli **pXa);
+/* Free up a list of xaAlis. */
+
+int xaAliCmpTarget(const void *va, const void *vb);
+/* Compare two xaAli's to sort by ascending target positions. */
+
+FILE *xaOpenVerify(char *fileName);
+/* Open file, verify it's the right type, and
+ * position file pointer for first xaReadNext(). */
+
+FILE *xaIxOpenVerify(char *fileName);
+/* Open file, verify that it's a good xa index. */
+
+struct xaAli *xaReadNext(FILE *f, boolean condensed);
+/* Read next xaAli from file. If condensed
+ * don't fill int query, target, qSym, tSym, or hSym. */
+
+struct xaAli *xaReadRange(char *rangeIndexFileName, char *dataFileName, 
+    int start, int end, boolean condensed);
+/* Return list of all xaAlis that range from start to end.  If condensed
+ * don't fill int query, qSym, tSym, or hSym. */
+
+struct xaAli *xaRdRange(FILE *ix, FILE *data, 
+    int start, int end, boolean condensed);
+/* Like xaReadRange but pass in open files rather than file names. */
+
+char *xaAlignSuffix();
+/* Return suffix of file with actual alignments. */
+
+char *xaChromIxSuffix();
+/* Return suffix of files that index xa's by chromosome position. */
+
+
+#endif /* XA_H */
+
diff --git a/gbtools/src/include/blatSrc/xap.h b/gbtools/src/include/blatSrc/xap.h
new file mode 100644
index 0000000..7183240
--- /dev/null
+++ b/gbtools/src/include/blatSrc/xap.h
@@ -0,0 +1,78 @@
+/* xap - XML Automatic Parser - together with autoXml this helps automatically
+ * read in automatically generated data structures. 
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#ifndef XAP_H
+#define XAP_H
+
+#ifndef DYSTRING_H
+#include "dystring.h"
+#endif
+
+struct xapStack
+/* An element of parse stack. */
+   {
+   void *object;	/* Object being parsed. */
+   char *elName;	/* Name of tag. */
+   struct dyString *text;	/* The text section. */
+   };
+
+struct xap
+/* A parser with a stack built in and other conveniences. */
+   {
+   struct xapStack *stack;			/* Top of stack of open tags. */
+   struct xapStack stackBuf[128];		/* Stack buffer. */
+   struct xapStack *endStack;			/* End of stack. */
+   int stackDepth;				/* Number of elements in stack. */
+   int skipDepth;				/* Depth beneath which we skip. */
+   void *(*startHandler)(struct xap *xap, char *name, char **atts);	/* Handler for start tags. */
+   void (*endHandler)(struct xap *xap, char *name);	/* Handler for end tags. */
+   struct xp *xp;				        /* Pointer to lower level parser. */
+   char *fileName;				/* Name of file being parsed - valid after xapParse. */
+   char *topType;				/* Top level type name - valid after xapParse. */
+   void *topObject;				/* Top level object - valid after xapParse. */
+   FILE *f;					/* File. */
+   };
+
+struct xap *xapNew(void *(*startHandler)(struct xap *xap, char *name, char **atts),
+	void (*endHandler)(struct xap *xap, char *name) ,
+	char *fileName);
+/* Create a new parse stack.  FileName may be NULL. */
+
+void xapFree(struct xap **pXp);
+/* Free up a parse stack. */
+
+void xapParseFile(struct xap *xap, char *fileName);
+/* Open up file and parse it all. */
+
+void xapError(struct xap *xap, char *format, ...);
+/* Issue an error message and abort*/
+
+void xapIndent(int count, FILE *f);
+/* Write out some spaces. */
+
+void xapSkip(struct xap *xap);
+/* Skip current tag and any children.  Called from startHandler. */
+
+void xapParseAny(char *fileName, char *type, 
+	void *(*startHandler)(struct xap *xap, char *name, char **atts),
+	void (*endHandler)(struct xap *xap, char *name),
+	char **retType, void *retObj);
+/* Parse any object out of an XML file. 
+ * If type parameter is non-NULL, force type.
+ * example:
+ *     xapParseAny("file.xml", "das", dasStartHandler, dasEndHandler, &type, &obj); */
+
+struct xap *xapOpen(char *fileName, 
+	void *(*startHandler)(struct xap *xap, char *name, char **atts),
+	void (*endHandler)(struct xap *xap, char *name));
+/* Open up an xml file, but don't start parsing it yet.
+ * Instead call xapNext to get the elements you want out of
+ * the file.  When all done call xapFree. */
+
+void *xapNext(struct xap *xap, char *tag);
+/* Return next item matching tag (and all of it's children). */
+#endif /* XAP_H */
+
diff --git a/gbtools/src/include/blatSrc/xenalign.h b/gbtools/src/include/blatSrc/xenalign.h
new file mode 100644
index 0000000..21455b7
--- /dev/null
+++ b/gbtools/src/include/blatSrc/xenalign.h
@@ -0,0 +1,41 @@
+/*****************************************************************************
+ * Copyright (C) 2000 Jim Kent.  This source code may be freely used         *
+ * for personal, academic, and non-profit purposes.  Commercial use          *
+ * permitted only by explicit agreement with Jim Kent (jim_kent at pacbell.net) *
+ *****************************************************************************/
+/* xenalign.h - Do cross-species DNA alignments from scratch. */
+#ifndef XENALIGN_H
+#define XENALIGN_H
+
+#ifndef NT4_H
+#include "nt4.h"
+#endif
+
+int xenAlignSmall(DNA *query, int querySize, DNA *target, int targetSize, 
+    FILE *f, boolean printExtraAtEnds);
+/* Use dynamic programming to do small scale 
+ * (querySize * targetSize < 10,000,000)
+ * alignment of DNA. Write results into f.*/
+
+void xenStitch(char *inName, FILE *out, int stitchMinScore, 
+    boolean compactOutput);
+/* Do the big old stitching run putting together contents of inName
+ * into contigs in out.  Create output in newer format. */
+
+void xenStitcher(char *inName, FILE *out, int stitchMinScore, boolean 
+    compactOutput);
+/* Do the big old stitching run putting together contents of inName
+ * into contigs in out. Create output in older format. */
+
+void xenAlignBig(DNA *query, int qSize, DNA *target, int tSize, FILE *f, boolean forHtml);
+/* Do a big alignment - one that has to be stitched together. 
+ * Write results into f. */
+
+void xenShowAli(char *qSym, char *tSym, char *hSym, int symCount, FILE *f,
+   int qOffset, int tOffset, char qStrand, char tStrand, int maxLineSize);
+/* Print alignment and HMM symbols maxLineSize bases at a time to file. */
+
+void xenAlignWorm(DNA *query, int qSize, FILE *f, boolean forHtml);
+/* Do alignment against worm genome. */
+
+#endif /* XENALIGN_H */
diff --git a/gbtools/src/include/blatSrc/xmlEscape.h b/gbtools/src/include/blatSrc/xmlEscape.h
new file mode 100644
index 0000000..f02a860
--- /dev/null
+++ b/gbtools/src/include/blatSrc/xmlEscape.h
@@ -0,0 +1,17 @@
+/* Handle escaping for XML files.  Deal with things like
+ * & and &quot. */
+
+#ifndef XMLESCAPE_H
+#define XMLESCAPE_H
+
+struct hash *xmlEscapeSymHash();
+/* Return hash of predefined xml character symbols to lookup. */
+
+void xmlEscapeBytesToFile(unsigned char *buffer, int len, FILE *f);
+/* Write buffer of given length to file, escaping as need be. */
+
+void xmlEscapeStringToFile(char *s, FILE *f);
+/* Write escaped zero-terminated string to file. */
+
+#endif /* XMLESCAPE_H */
+
diff --git a/gbtools/src/include/blatSrc/xp.h b/gbtools/src/include/blatSrc/xp.h
new file mode 100644
index 0000000..1439657
--- /dev/null
+++ b/gbtools/src/include/blatSrc/xp.h
@@ -0,0 +1,78 @@
+/* xp - A minimal non-verifying xml parser.  It's
+ * stream oriented much like expat.
+ *
+ * This file is copyright 2002 Jim Kent, but license is hereby
+ * granted for all use - public, private or commercial. */
+
+#ifndef XP_H
+#define XP_H
+
+#ifndef DYSTRING_H
+#include "dystring.h"
+#endif
+
+struct xpStack
+/* A context stack for parser. */
+    {
+    struct dyString *tag;   /* Name of tag. */
+    struct dyString *text;  /* Contains text if any. */
+    };
+
+struct xp
+/* A minimal non-verifying xml parser. */
+    {
+    struct xp *next;	/* Next in list. */
+    struct xpStack *stack;		/* Current top of stack. */
+    struct xpStack stackBuf[64];	/* Stack buffer and start of stack. */
+    struct xpStack *stackBufEnd;	/* End of stack buffer. */
+    struct dyString *attDyBuf[128];	/* Attribute buffer as dynamic string. */
+    char *attBuf[128];    	        /* Attribute buffer as regular string. */
+    struct dyString *endTag;		/* Buffer for an end tag. */
+    void *userData;			/* Pointer to user's data structure. */
+    void (*atStartTag)(void *userData, char *name, char **atts);  /* Got start and attributes. */
+    void (*atEndTag)(void *userData, char *name, char *text);   /* Got end. */
+    int (*read)(void *userData, char *buf, int bufSize);   /* Read some more. */
+    char *fileName;			/* File name. */
+    int lineIx;				/* Number of current line. */
+    char inBuf[16*1024];		/* Text input buffer. */
+    char *inBufEnd;			/* Pointer to end of input buffer. */
+    char *in;				/* Next character to parse. */
+    struct hash *symHash;		/* Hash of > < etc. */
+    };
+
+struct xp *xpNew(void *userData, 
+   void (*atStartTag)(void *userData, char *name, char **atts),
+   void (*atEndTag)(void *userData, char *name, char *text),
+   int (*read)(void *userData, char *buf, int bufSize),
+   char *fileName);
+/* Form a new xp parser.  File name may be NULL - just used for
+ * error reporting. */
+
+void xpFree(struct xp **pXp);
+/* Free up an xp parser. */
+
+int xpLineIx(struct xp *xp);
+/* Return current line number. */
+
+char *xpFileName(struct xp *xp);
+/* Return current file name. */
+
+int xpReadFromFile(void *userData, char *buf, int bufSize);
+/* This is a function you can pass to xpNew as a read handler.
+ * It assumes you've passed an open FILE in as userData. */
+
+void xpError(struct xp *xp, char *format, ...);
+/* Output an error message with filename and line number included. */
+
+boolean xpParseNext(struct xp *xp, char *tag);
+/* Skip through file until get given tag.  Then parse out the
+ * tag and all of it's children (calling atStartTag/atEndTag).
+ * You can call this repeatedly to process all of a given tag
+ * in file. */
+
+void xpParse(struct xp *xp);
+/* Parse from start tag to end tag.  Throw error if a problem.
+ * Returns FALSE if nothing left to parse. */
+
+#endif /* XP_H */
+
diff --git a/gbtools/src/include/blatSrc/zlibFace.h b/gbtools/src/include/blatSrc/zlibFace.h
new file mode 100644
index 0000000..1b9d027
--- /dev/null
+++ b/gbtools/src/include/blatSrc/zlibFace.h
@@ -0,0 +1,26 @@
+/* Wrappers around zlib to make interfacing to it a bit easier. */
+
+#ifndef ZLIBFACE_H
+#define ZLIBFACE_H
+
+size_t zCompress(
+	void *uncompressed, 	/* Start of area to compress. */
+	size_t uncompressedSize,  /* Size of area to compress. */
+	void *compBuf,       /* Where to put compressed bits */
+	size_t compBufSize); /* Size of compressed bits - calculate using zCompBufSize */
+/* Compress data from memory to memory.  Returns size after compression. */
+
+size_t zCompBufSize(size_t uncompressedSize);
+/* Return size of buffer needed to compress something of given size uncompressed. */
+
+size_t zUncompress(
+        void *compressed,	/* Compressed area */
+	size_t compressedSize,	/* Size after compression */
+	void *uncompBuf,	/* Where to put uncompressed bits */
+	size_t uncompBufSize);	/* Max size of uncompressed bits. */
+/* Uncompress data from memory to memory.  Returns size after decompression. */
+
+void zSelfTest(int count);
+/* Run an internal diagnostic. */
+
+#endif /* ZLIBFACE_H */
diff --git a/gbtools/src/include/gbtools/gbtools.hpp b/gbtools/src/include/gbtools/gbtools.hpp
new file mode 100644
index 0000000..0f380b2
--- /dev/null
+++ b/gbtools/src/include/gbtools/gbtools.hpp
@@ -0,0 +1,38 @@
+/*  File: gbtools.hpp
+ *  Author: Gemma Barson, 2015-03-17
+ *  Copyright (c) 2015 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * gbtools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the gbtools genome browser tools library, 
+ * written by
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ *      Steve Miller      (Sanger Institute, UK)  <sm23 at sanger.ac.uk>
+ *
+ * Description: Contains all exported gbtools functions
+ *----------------------------------------------------------------------------
+ */
+#ifndef gbtools_h_included
+#define gbtools_h_included
+
+#include <gbtools/gbtoolsCurl.hpp>
+#include <gbtools/gbtoolsGUI.hpp>
+#include <gbtools/gbtoolsPfetch.hpp>
+#include <gbtools/gbtoolsUtils.hpp>
+#include <gbtools/gbtoolsTrackhub.hpp>
+
+#endif /* gbtools_h_included */
diff --git a/gbtools/src/include/gbtools/gbtoolsCurl.hpp b/gbtools/src/include/gbtools/gbtoolsCurl.hpp
new file mode 100644
index 0000000..f770b9c
--- /dev/null
+++ b/gbtools/src/include/gbtools/gbtoolsCurl.hpp
@@ -0,0 +1,79 @@
+/*  File: libcurlobject.h
+ *  Author: Roy Storey (rds at sanger.ac.uk)
+ *  Copyright (c) 2006-2015: Genome Research Ltd.
+ *-------------------------------------------------------------------
+ * ZMap 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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ *-------------------------------------------------------------------
+ * This file is part of the ZMap genome database package
+ * originally written by:
+ *
+ * 	Ed Griffiths (Sanger Institute, UK) edgrif at sanger.ac.uk,
+ *      Roy Storey (Sanger Institute, UK) rds at sanger.ac.uk
+ *
+ * Description: Object providing an interface to the curl library.
+ *
+ *-------------------------------------------------------------------
+ */
+#ifndef GBTOOLS_CURL_H
+#define GBTOOLS_CURL_H
+
+#include <glib.h>
+#include <glib-object.h>
+#include <curl/curl.h>
+
+namespace gbtools
+{
+
+
+#define CURL_TYPE_OBJECT            (CURLObjectGetType())
+#define CURL_OBJECT(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj), CURL_TYPE_OBJECT, curlObject))
+#define CURL_OBJECT_CONST(obj)      (G_TYPE_CHECK_INSTANCE_CAST((obj), CURL_TYPE_OBJECT, curlObject const))
+#define CURL_OBJECT_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST((klass),  CURL_TYPE_OBJECT, curlObjectClass))
+#define CURL_IS_OBJECT(obj)         (G_TYPE_CHECK_INSTANCE_TYPE((obj), CURL_TYPE_OBJECT))
+#define CURL_IS_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),  CURL_TYPE_OBJECT))
+#define CURL_OBJECT_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS((obj),  CURL_TYPE_OBJECT, curlObjectClass))
+
+
+typedef enum
+  {
+    CURL_STATUS_OK,
+    CURL_STATUS_FAILED
+  } CURLObjectStatus;
+
+
+/*  */
+typedef struct _curlObjectStruct *CURLObject;
+
+typedef struct _curlObjectStruct  curlObject;
+
+/*  */
+typedef struct _curlObjectClassStruct *CURLObjectClass;
+
+typedef struct _curlObjectClassStruct  curlObjectClass;
+
+
+GType CURLObjectGetType(void);
+
+CURLObject       CURLObjectNew         (void);
+CURLObjectStatus CURLObjectSet         (CURLObject curlobject, const gchar *first_arg_name, ...);
+CURLObjectStatus CURLObjectPerform     (CURLObject curlobject, gboolean use_multi);
+CURLObjectStatus CURLObjectErrorMessage(CURLObject curl_object, char **message);
+CURLObject       CURLObjectDestroy     (CURLObject curlobject);
+
+
+} /* gbtools namespace */
+
+#endif	/* GBTOOLS_CURL_H */
diff --git a/gbtools/src/include/gbtools/gbtoolsGUI.hpp b/gbtools/src/include/gbtools/gbtoolsGUI.hpp
new file mode 100644
index 0000000..e66f906
--- /dev/null
+++ b/gbtools/src/include/gbtools/gbtoolsGUI.hpp
@@ -0,0 +1,44 @@
+/*  File: gbtoolsGUI.hpp
+ *  Author: Gemma Barson, 2015-03-02
+ *  Copyright (c) 2015 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * gbtools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the gbtools genome browser tools library, 
+ * written by
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ *      Steve Miller      (Sanger Institute, UK)  <sm23 at sanger.ac.uk>
+ *
+ * Description: Miscellaneous GUI functions
+ *----------------------------------------------------------------------------
+ */
+#ifndef gbtoolsGUI_h_included
+#define gbtoolsGUI_h_included
+
+#include <gbtools/gbtoolsUtils.hpp>
+#include <gtk/gtk.h>
+
+namespace gbtools
+{
+
+gboolean GUIGetTrueMonitorSize(GtkWidget *widget, int *widthOut, int *heightOut) ;
+gboolean GUIGetTrueMonitorSizeFraction(GtkWidget *widget, const double widthFraction, const double heightFraction, int *widthOut, int *heightOut) ;
+
+
+} /* gbtools namespace */
+
+#endif /* gbtoolsGUI_h_included */
diff --git a/gbtools/src/include/gbtools/gbtoolsPfetch.hpp b/gbtools/src/include/gbtools/gbtoolsPfetch.hpp
new file mode 100644
index 0000000..3e3c838
--- /dev/null
+++ b/gbtools/src/include/gbtools/gbtoolsPfetch.hpp
@@ -0,0 +1,172 @@
+/*  File: gbtoolsPfetch.hpp
+ *  Author: Ed Griffiths (edgrif at sanger.ac.uk)
+ *  Copyright (c) 2006-2015: Genome Research Ltd.
+ *-------------------------------------------------------------------
+ * ZMap 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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ *-------------------------------------------------------------------
+ * This file is part of the ZMap genome database package
+ * originally written by:
+ *
+ * 	Ed Griffiths (Sanger Institute, UK) edgrif at sanger.ac.uk,
+ *      Roy Storey (Sanger Institute, UK) rds at sanger.ac.uk
+ *
+ * Description: Object implementing fetching of sequence data via
+ *              the pfetch server either through a pipe to the
+ *              pfetch command line script or through http requests.
+ *
+ *-------------------------------------------------------------------
+ */
+#ifndef GBTOOLS_PFETCH_H
+#define GBTOOLS_PFETCH_H
+
+#include <glib.h>
+
+#include <gbtools/gbtoolsCurl.hpp>
+
+
+namespace gbtools
+{
+  // Callback functions.
+  typedef bool (* ReaderFunc)(char *output, guint *output_size, char **error_msg,
+                              void *user_data) ;
+
+  typedef bool (* ErrorFunc)(char *output, guint *output_size, char **error_msg,
+                             void *user_data) ;
+
+  typedef void (* ClosedFunc)(void *user_data) ;
+
+
+
+  // Abstract base class.
+  class Pfetch
+  {
+  public:
+
+    void setEntryType(bool full_entry) ;
+
+    void setDebug(bool debug_on) ;
+
+    virtual bool fetch(const char *sequence, char **error_msg) = 0 ;
+
+    const char* getLocation() ;
+
+    virtual ~Pfetch() ;
+
+  protected:
+
+    Pfetch(const char *location,
+           ReaderFunc reader_func, ErrorFunc error_func, ClosedFunc closed_func,
+           void *user_data) ;
+
+    const char *location_ ;
+
+    struct
+    {
+      unsigned int full    : 1 ;	/* full pfetch entry (-F on command line) */
+      unsigned int debug   : 1 ;	/* internal debug */
+    } opts_ ;
+
+    // user callbacks
+    ReaderFunc reader_func_ ;
+    ErrorFunc error_func_ ;
+    ClosedFunc closed_func_ ;
+    void *user_data_ ;
+
+  private:
+
+
+  } ;
+
+
+  // Pipe interface
+  //
+  class PfetchPipe: public Pfetch
+  {
+  public:
+
+    // No default contstructor.
+    PfetchPipe() = delete ;
+
+    // No copy operations
+    PfetchPipe(const PfetchPipe&) = delete ;
+    PfetchPipe& operator=(const PfetchPipe&) = delete ;
+
+    // no move operations
+    PfetchPipe(PfetchPipe&&) = delete ;
+    PfetchPipe& operator=(PfetchPipe&&) = delete ;
+
+    PfetchPipe(const char *location,
+               ReaderFunc reader_func, ErrorFunc error_func, ClosedFunc closed_func,
+               void *user_data) ;
+
+    bool fetch(const char *sequence, char **error_msg) ;
+
+    ~PfetchPipe() ;
+
+  private:
+
+  } ;
+
+
+  // http interface
+  //
+  class PfetchHttp: public Pfetch
+  {
+  public:
+
+    // No default contstructor.
+    PfetchHttp() = delete ;
+
+    // No copy operations
+    PfetchHttp(const PfetchHttp&) = delete ;
+    PfetchHttp& operator=(const PfetchHttp&) = delete ;
+
+    // no move operations
+    PfetchHttp(PfetchHttp&&) = delete ;
+    PfetchHttp& operator=(PfetchHttp&&) = delete ;
+
+    PfetchHttp(const char *location, unsigned int port,
+               const char* cookie_jar, long ipresolve, const char *cainfo, char *proxy,
+               ReaderFunc reader_func, ErrorFunc error_func, ClosedFunc closed_func,
+               void *user_data) ;
+
+    void setProxy(const char *proxy) ;
+
+    char* getError() ;
+
+    bool fetch(const char *sequence, char **error_msg) ;
+
+    ~PfetchHttp() ;
+
+  private:
+
+    unsigned int http_port_;
+    const char *cookie_jar_location_;
+    long ipresolve_;
+    const char *cainfo_;
+    const  char *proxy_ ;
+
+    CURLObject curl_object_;
+    unsigned int request_counter_;
+
+  } ;
+
+
+
+} /* gbtools namespace */
+
+
+#endif /* GBTOOLS_PFETCH_H */
diff --git a/gbtools/src/include/gbtools/gbtoolsTrackhub.hpp b/gbtools/src/include/gbtools/gbtoolsTrackhub.hpp
new file mode 100644
index 0000000..4261d38
--- /dev/null
+++ b/gbtools/src/include/gbtools/gbtoolsTrackhub.hpp
@@ -0,0 +1,284 @@
+/*  File: gbtoolsTrackhub.hpp
+ *  Author: Gemma Barson (gb10 at sanger.ac.uk)
+ *  Copyright (c) 2016: Genome Research Ltd.
+ *-------------------------------------------------------------------
+ * gbtools 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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ *-------------------------------------------------------------------
+ * This file is part of the gbtools genome browser tools library, 
+ * written by
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ *      Steve Miller      (Sanger Institute, UK)  <sm23 at sanger.ac.uk>
+ *
+ * Description: Ensembl Track Hub Registry functions
+ *----------------------------------------------------------------------------
+ */
+
+#ifndef GBTOOLS_TRACKHUB_H
+#define GBTOOLS_TRACKHUB_H
+
+
+#include <string>
+#include <list>
+#include <map>
+
+#include <json/json.h>
+
+#include <gbtools/gbtoolsCurl.hpp>
+
+
+
+namespace gbtools
+{
+namespace trackhub
+{
+
+// Class to hold info about a track
+class Track
+{
+public:
+  Track(std::string name,
+        std::string shortLabel,
+        std::string url,
+        std::string file_type,
+        std::string visibility) 
+    : name_(name),
+      shortLabel_(shortLabel),
+      url_(url),
+      file_type_(file_type),
+      visibility_(visibility)
+  {};
+
+  std::string name() const { return name_; };
+  std::string description() const { return shortLabel_; };
+  std::string url() const { return url_; };
+  std::list<Track> children() const { return children_; };
+  std::string visibility() const { return visibility_; };
+  bool visible() const { return visibility_ != "hide"; };
+  std::string fileType() const { return file_type_; };
+
+  std::list<Track> children_;
+
+private:
+  std::string name_;
+  std::string shortLabel_;
+  std::string url_;
+  std::string file_type_;
+  std::string visibility_;
+};
+
+
+// Class to hold info about a trackDb (i.e. a collection of tracks from a particular hub)
+class TrackDb
+{
+public:
+  TrackDb()
+    : id_(""), 
+      hub_shortLabel_(""),
+      hub_longLabel_(""),
+      hub_url_(""),
+      species_scientific_name_(""),
+      assembly_name_(""),
+      type_(""),
+      num_tracks_(0),
+      num_with_data_(0)
+  {} ;
+
+  TrackDb(const std::string &id, 
+          const std::string &name,
+          const std::string &shortLabel,
+          const std::string &longLabel,
+          const std::string &url,
+          const std::string &scientific_name,
+          const std::string &assembly_name,
+          const std::string &type,
+          const int num_tracks,
+          const int num_with_data,
+          const std::list<std::string> &file_types,
+          const std::list<Track> &tracks
+          ) 
+    : id_(id), 
+      hub_name_(name),
+      hub_shortLabel_(shortLabel),
+      hub_longLabel_(longLabel),
+      hub_url_(url),
+      species_scientific_name_(scientific_name),
+      assembly_name_(assembly_name),
+      type_(type),
+      num_tracks_(num_tracks),
+      num_with_data_(num_with_data),
+      file_types_(file_types),
+      tracks_(tracks)
+  {} ;
+
+  std::string id() const { return id_; } ;
+  std::string name() const { return hub_name_; } ;
+  std::string label() const { return hub_shortLabel_; } ;
+  std::string description() const { return hub_longLabel_; } ;
+  std::string url() const { return hub_url_; } ;
+  std::string species() const { return species_scientific_name_; } ;
+  std::string assembly() const { return assembly_name_; } ;
+  int num_tracks() const { return num_tracks_; } ;
+  int num_with_data() const { return num_with_data_; } ;
+  std::list<std::string> file_types() const { return file_types_; } ;
+  std::list<Track> tracks() const { return tracks_; } ;
+
+private:
+  std::string id_ ;
+  std::string hub_name_ ;
+  std::string hub_shortLabel_ ;
+  std::string hub_longLabel_ ;
+  std::string hub_url_ ;
+  std::string species_scientific_name_ ;
+  std::string assembly_name_ ;
+  std::string type_ ;
+  int num_tracks_;
+  int num_with_data_;
+  std::list<std::string> file_types_;
+  std::list<Track> tracks_;
+};
+
+
+// Class to hold info about a track hub
+class Trackhub
+{
+public:
+  Trackhub() 
+    : name_(""), 
+      shortLabel_(""),
+      longLabel_(""),
+      url_("")
+  {} ;
+
+  Trackhub(std::string name,
+           std::string shortLabel,
+           std::string longLabel,
+           std::string url) 
+    : name_(""), 
+      shortLabel_(""),
+      longLabel_(""),
+      url_("")
+  {} ;
+
+  std::string name() { return name_; } ;
+  std::string label() { return shortLabel_; } ;
+  std::string description() { return longLabel_; } ;
+  std::string url() { return url_; } ;
+
+private:
+  std::string name_ ;
+  std::string shortLabel_ ;
+  std::string longLabel_ ;
+  std::string url_ ;
+} ;
+
+
+
+/* Class for accessing the Ensembl Track Hub Registry API */
+class Registry
+{
+public:
+
+  //
+  // Construct/destruct
+  //
+  Registry();
+  ~Registry();
+
+  void initCurl() ;
+
+  //
+  // API functions
+  //
+  bool ping(std::string &err_msg);
+  std::string version(std::string &err_msg);
+  std::list<std::string> species(std::string &err_msg);
+  std::map<std::string, std::list<std::string>> assemblies(std::string &err_msg);
+  std::list<Trackhub> trackhubs(std::string &err_msg);
+
+  bool getSearchPage(std::stringstream &payload_ss,
+                     const int page_no, std::list<TrackDb> &result,
+                     std::string &err_msg);
+  std::list<TrackDb> search(const std::string &query, const std::string &species,
+                            const std::string &assembly, const std::string &hub,
+                            std::string &err_msg);
+  TrackDb searchTrackDb(const std::string &trackdb, std::string &err_msg);
+
+  bool login(const std::string &user, const std::string &pwd, std::string &err_msg);
+  bool logout(std::string &err_msg);
+
+  Json::Value registerHub(const std::string &url, 
+                          const std::map<std::string, std::string> &assemblies,
+                          const std::string &type,
+                          const bool is_public,
+                          std::string &err_msg);
+  std::list<TrackDb> retrieveHub(const std::string &trackhub, std::string &err_msg);
+  std::string deleteHub(const std::string &trackhub, std::string &err_msg);
+
+  Json::Value retrieveTrackDb(const std::string &trackdb, std::string &err_msg);
+  Json::Value deleteTrackDb(const std::string &trackdb, std::string &err_msg);
+
+  //
+  // Query
+  //
+  bool loggedIn();
+
+  //
+  // Set properties
+  //
+  void setDebug(const bool debug);
+  void setProxy(const std::string &proxy);
+  void setCainfo(const std::string &cainfo);
+  void setUserAgent(const std::string &useragent);
+
+private:
+  curl_slist* getHeaders(const bool authorise);
+  curl_slist* postHeaders(const bool authorise);
+
+  std::string doGetRequest(const std::string &url, const bool authorise, long *response_code = NULL);
+  std::string doPostRequest(const std::string &url, const std::string &postfields, const bool authorise, long *response_code = NULL);
+  std::string doDeleteRequest(const std::string &url, const bool authorise, long *response_code = NULL);
+
+  Json::Value getRequest(const std::string &request, const bool authorise, std::string &err_msg);
+  Json::Value postRequest(const std::string &request, const std::string &postfields, const bool authorise, std::string &err_msg);
+  Json::Value deleteRequest(const std::string &request, const bool authorise, std::string &err_msg);
+
+  std::string host_;
+  std::string user_;
+  std::string auth_token_;
+
+  CURLObject curl_object_get_;
+  CURLObject curl_object_post_;
+  CURLObject curl_object_delete_;
+
+  Json::Reader json_reader_;
+  Json::FastWriter json_writer_;
+
+  bool debug_ ;
+  std::string proxy_ ;
+  std::string cainfo_ ;
+  std::string useragent_ ;
+};
+
+
+
+} // namespace trackhub
+
+
+
+} /* namespace gbtools */
+
+#endif	/* GBTOOLS_TRACKHUB_H */
diff --git a/gbtools/src/include/gbtools/gbtoolsUtils.hpp b/gbtools/src/include/gbtools/gbtoolsUtils.hpp
new file mode 100644
index 0000000..f570c1a
--- /dev/null
+++ b/gbtools/src/include/gbtools/gbtoolsUtils.hpp
@@ -0,0 +1,49 @@
+/*  File: gbtoolsUtils.hpp
+ *  Author: Gemma Barson, 2015-03-24
+ *  Copyright (c) 2015 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * gbtools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the gbtools genome browser tools library, 
+ * written by
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ *      Steve Miller      (Sanger Institute, UK)  <sm23 at sanger.ac.uk>
+ *
+ * Description: Miscellaneous utility functions
+ *----------------------------------------------------------------------------
+ */
+
+#ifndef _gbtoolsUtils_h_included_
+#define _gbtoolsUtils_h_included_
+
+#include <gtk/gtk.h>
+
+namespace gbtools
+{
+
+/* Utility macro to check that our gtk version meets the given minimum version. Use this in
+ * an #if statement */
+#define CHECK_GTK_VERSION(MAJOR, MINOR) GTK_MAJOR_VERSION > (MAJOR) || (GTK_MAJOR_VERSION == (MAJOR) && GTK_MINOR_VERSION >= (MINOR))
+
+
+const char *UtilsGetVersionString() ;
+const char *UtilsGetVersionTitle() ;
+
+
+} /* gbtools namespace */
+
+#endif /* _gbtoolsUtils_h_included_ */
diff --git a/gbtools/src/include/json/json-forwards.h b/gbtools/src/include/json/json-forwards.h
new file mode 100644
index 0000000..cff5fa9
--- /dev/null
+++ b/gbtools/src/include/json/json-forwards.h
@@ -0,0 +1,319 @@
+/// Json-cpp amalgated forward header (http://jsoncpp.sourceforge.net/).
+/// It is intended to be used with #include "json/json-forwards.h"
+/// This header provides forward declaration for all JsonCpp types.
+
+// //////////////////////////////////////////////////////////////////////
+// Beginning of content of file: LICENSE
+// //////////////////////////////////////////////////////////////////////
+
+/*
+The JsonCpp library's source code, including accompanying documentation, 
+tests and demonstration applications, are licensed under the following
+conditions...
+
+The author (Baptiste Lepilleur) explicitly disclaims copyright in all 
+jurisdictions which recognize such a disclaimer. In such jurisdictions, 
+this software is released into the Public Domain.
+
+In jurisdictions which do not recognize Public Domain property (e.g. Germany as of
+2010), this software is Copyright (c) 2007-2010 by Baptiste Lepilleur, and is
+released under the terms of the MIT License (see below).
+
+In jurisdictions which recognize Public Domain property, the user of this 
+software may choose to accept it either as 1) Public Domain, 2) under the 
+conditions of the MIT License (see below), or 3) under the terms of dual 
+Public Domain/MIT License conditions described here, as they choose.
+
+The MIT License is about as close to Public Domain as a license can get, and is
+described in clear, concise terms at:
+
+   http://en.wikipedia.org/wiki/MIT_License
+   
+The full text of the MIT License follows:
+
+========================================================================
+Copyright (c) 2007-2010 Baptiste Lepilleur
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use, copy,
+modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+========================================================================
+(END LICENSE TEXT)
+
+The MIT license is compatible with both the GPL and commercial
+software, affording one all of the rights of Public Domain with the
+minor nuisance of being required to keep the above copyright notice
+and license text in the source code. Note also that by accepting the
+Public Domain "license" you can re-license your copy using whatever
+license you like.
+
+*/
+
+// //////////////////////////////////////////////////////////////////////
+// End of content of file: LICENSE
+// //////////////////////////////////////////////////////////////////////
+
+
+
+
+
+#ifndef JSON_FORWARD_AMALGATED_H_INCLUDED
+# define JSON_FORWARD_AMALGATED_H_INCLUDED
+/// If defined, indicates that the source file is amalgated
+/// to prevent private header inclusion.
+#define JSON_IS_AMALGAMATION
+
+// //////////////////////////////////////////////////////////////////////
+// Beginning of content of file: include/json/config.h
+// //////////////////////////////////////////////////////////////////////
+
+// Copyright 2007-2010 Baptiste Lepilleur
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#ifndef JSON_CONFIG_H_INCLUDED
+#define JSON_CONFIG_H_INCLUDED
+#include <stddef.h>
+#include <string> //typdef String
+
+/// If defined, indicates that json library is embedded in CppTL library.
+//# define JSON_IN_CPPTL 1
+
+/// If defined, indicates that json may leverage CppTL library
+//#  define JSON_USE_CPPTL 1
+/// If defined, indicates that cpptl vector based map should be used instead of
+/// std::map
+/// as Value container.
+//#  define JSON_USE_CPPTL_SMALLMAP 1
+
+// If non-zero, the library uses exceptions to report bad input instead of C
+// assertion macros. The default is to use exceptions.
+#ifndef JSON_USE_EXCEPTION
+#define JSON_USE_EXCEPTION 1
+#endif
+
+/// If defined, indicates that the source file is amalgated
+/// to prevent private header inclusion.
+/// Remarks: it is automatically defined in the generated amalgated header.
+// #define JSON_IS_AMALGAMATION
+
+#ifdef JSON_IN_CPPTL
+#include <cpptl/config.h>
+#ifndef JSON_USE_CPPTL
+#define JSON_USE_CPPTL 1
+#endif
+#endif
+
+#ifdef JSON_IN_CPPTL
+#define JSON_API CPPTL_API
+#elif defined(JSON_DLL_BUILD)
+#if defined(_MSC_VER) || defined(__MINGW32__)
+#define JSON_API __declspec(dllexport)
+#define JSONCPP_DISABLE_DLL_INTERFACE_WARNING
+#endif // if defined(_MSC_VER)
+#elif defined(JSON_DLL)
+#if defined(_MSC_VER) || defined(__MINGW32__)
+#define JSON_API __declspec(dllimport)
+#define JSONCPP_DISABLE_DLL_INTERFACE_WARNING
+#endif // if defined(_MSC_VER)
+#endif // ifdef JSON_IN_CPPTL
+#if !defined(JSON_API)
+#define JSON_API
+#endif
+
+// If JSON_NO_INT64 is defined, then Json only support C++ "int" type for
+// integer
+// Storages, and 64 bits integer support is disabled.
+// #define JSON_NO_INT64 1
+
+#if defined(_MSC_VER) // MSVC
+#  if _MSC_VER <= 1200 // MSVC 6
+    // Microsoft Visual Studio 6 only support conversion from __int64 to double
+    // (no conversion from unsigned __int64).
+#    define JSON_USE_INT64_DOUBLE_CONVERSION 1
+    // Disable warning 4786 for VS6 caused by STL (identifier was truncated to '255'
+    // characters in the debug information)
+    // All projects I've ever seen with VS6 were using this globally (not bothering
+    // with pragma push/pop).
+#    pragma warning(disable : 4786)
+#  endif // MSVC 6
+
+#  if _MSC_VER >= 1500 // MSVC 2008
+    /// Indicates that the following function is deprecated.
+#    define JSONCPP_DEPRECATED(message) __declspec(deprecated(message))
+#  endif
+
+#endif // defined(_MSC_VER)
+
+#if defined(_MSC_VER) && _MSC_VER <= 1600 // MSVC <= 2010
+# define JSONCPP_OVERRIDE
+#else
+# define JSONCPP_OVERRIDE override
+#endif // MSVC <= 2010
+
+
+#ifndef JSON_HAS_RVALUE_REFERENCES
+
+#if defined(_MSC_VER) && _MSC_VER >= 1600 // MSVC >= 2010
+#define JSON_HAS_RVALUE_REFERENCES 1
+#endif // MSVC >= 2010
+
+#ifdef __clang__
+#if __has_feature(cxx_rvalue_references)
+#define JSON_HAS_RVALUE_REFERENCES 1
+#endif  // has_feature
+
+#elif defined __GNUC__ // not clang (gcc comes later since clang emulates gcc)
+#if defined(__GXX_EXPERIMENTAL_CXX0X__) || (__cplusplus >= 201103L)
+#define JSON_HAS_RVALUE_REFERENCES 1
+#endif  // GXX_EXPERIMENTAL
+
+#endif // __clang__ || __GNUC__
+
+#endif // not defined JSON_HAS_RVALUE_REFERENCES
+
+#ifndef JSON_HAS_RVALUE_REFERENCES
+#define JSON_HAS_RVALUE_REFERENCES 0
+#endif
+
+#ifdef __clang__
+#elif defined __GNUC__ // not clang (gcc comes later since clang emulates gcc)
+#  if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5))
+#    define JSONCPP_DEPRECATED(message)  __attribute__ ((deprecated(message)))
+#  elif (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1))
+#    define JSONCPP_DEPRECATED(message)  __attribute__((__deprecated__))
+#  endif  // GNUC version
+#endif // __clang__ || __GNUC__
+
+#if !defined(JSONCPP_DEPRECATED)
+#define JSONCPP_DEPRECATED(message)
+#endif // if !defined(JSONCPP_DEPRECATED)
+
+#if __GNUC__ >= 6
+#  define JSON_USE_INT64_DOUBLE_CONVERSION 1
+#endif
+
+#if !defined(JSON_IS_AMALGAMATION)
+
+# include "version.h"
+
+# if JSONCPP_USING_SECURE_MEMORY
+#  include "allocator.h" //typedef Allocator
+# endif
+
+#endif // if !defined(JSON_IS_AMALGAMATION)
+
+namespace Json {
+typedef int Int;
+typedef unsigned int UInt;
+#if defined(JSON_NO_INT64)
+typedef int LargestInt;
+typedef unsigned int LargestUInt;
+#undef JSON_HAS_INT64
+#else                 // if defined(JSON_NO_INT64)
+// For Microsoft Visual use specific types as long long is not supported
+#if defined(_MSC_VER) // Microsoft Visual Studio
+typedef __int64 Int64;
+typedef unsigned __int64 UInt64;
+#else                 // if defined(_MSC_VER) // Other platforms, use long long
+typedef long long int Int64;
+typedef unsigned long long int UInt64;
+#endif // if defined(_MSC_VER)
+typedef Int64 LargestInt;
+typedef UInt64 LargestUInt;
+#define JSON_HAS_INT64
+#endif // if defined(JSON_NO_INT64)
+#if JSONCPP_USING_SECURE_MEMORY
+#define JSONCPP_STRING        std::basic_string<char, std::char_traits<char>, Json::SecureAllocator<char> >
+#define JSONCPP_OSTRINGSTREAM std::basic_ostringstream<char, std::char_traits<char>, Json::SecureAllocator<char> >
+#define JSONCPP_OSTREAM       std::basic_ostream<char, std::char_traits<char>>
+#define JSONCPP_ISTRINGSTREAM std::basic_istringstream<char, std::char_traits<char>, Json::SecureAllocator<char> >
+#define JSONCPP_ISTREAM       std::istream
+#else
+#define JSONCPP_STRING        std::string
+#define JSONCPP_OSTRINGSTREAM std::ostringstream
+#define JSONCPP_OSTREAM       std::ostream
+#define JSONCPP_ISTRINGSTREAM std::istringstream
+#define JSONCPP_ISTREAM       std::istream
+#endif // if JSONCPP_USING_SECURE_MEMORY
+} // end namespace Json
+
+#endif // JSON_CONFIG_H_INCLUDED
+
+// //////////////////////////////////////////////////////////////////////
+// End of content of file: include/json/config.h
+// //////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+// //////////////////////////////////////////////////////////////////////
+// Beginning of content of file: include/json/forwards.h
+// //////////////////////////////////////////////////////////////////////
+
+// Copyright 2007-2010 Baptiste Lepilleur
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#ifndef JSON_FORWARDS_H_INCLUDED
+#define JSON_FORWARDS_H_INCLUDED
+
+#if !defined(JSON_IS_AMALGAMATION)
+#include "config.h"
+#endif // if !defined(JSON_IS_AMALGAMATION)
+
+namespace Json {
+
+// writer.h
+class FastWriter;
+class StyledWriter;
+
+// reader.h
+class Reader;
+
+// features.h
+class Features;
+
+// value.h
+typedef unsigned int ArrayIndex;
+class StaticString;
+class Path;
+class PathArgument;
+class Value;
+class ValueIteratorBase;
+class ValueIterator;
+class ValueConstIterator;
+
+} // namespace Json
+
+#endif // JSON_FORWARDS_H_INCLUDED
+
+// //////////////////////////////////////////////////////////////////////
+// End of content of file: include/json/forwards.h
+// //////////////////////////////////////////////////////////////////////
+
+
+
+
+
+#endif //ifndef JSON_FORWARD_AMALGATED_H_INCLUDED
diff --git a/gbtools/src/include/json/json.h b/gbtools/src/include/json/json.h
new file mode 100644
index 0000000..c702436
--- /dev/null
+++ b/gbtools/src/include/json/json.h
@@ -0,0 +1,2241 @@
+/// Json-cpp amalgated header (http://jsoncpp.sourceforge.net/).
+/// It is intended to be used with #include "json/json.h"
+
+// //////////////////////////////////////////////////////////////////////
+// Beginning of content of file: LICENSE
+// //////////////////////////////////////////////////////////////////////
+
+/*
+The JsonCpp library's source code, including accompanying documentation, 
+tests and demonstration applications, are licensed under the following
+conditions...
+
+The author (Baptiste Lepilleur) explicitly disclaims copyright in all 
+jurisdictions which recognize such a disclaimer. In such jurisdictions, 
+this software is released into the Public Domain.
+
+In jurisdictions which do not recognize Public Domain property (e.g. Germany as of
+2010), this software is Copyright (c) 2007-2010 by Baptiste Lepilleur, and is
+released under the terms of the MIT License (see below).
+
+In jurisdictions which recognize Public Domain property, the user of this 
+software may choose to accept it either as 1) Public Domain, 2) under the 
+conditions of the MIT License (see below), or 3) under the terms of dual 
+Public Domain/MIT License conditions described here, as they choose.
+
+The MIT License is about as close to Public Domain as a license can get, and is
+described in clear, concise terms at:
+
+   http://en.wikipedia.org/wiki/MIT_License
+   
+The full text of the MIT License follows:
+
+========================================================================
+Copyright (c) 2007-2010 Baptiste Lepilleur
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use, copy,
+modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+========================================================================
+(END LICENSE TEXT)
+
+The MIT license is compatible with both the GPL and commercial
+software, affording one all of the rights of Public Domain with the
+minor nuisance of being required to keep the above copyright notice
+and license text in the source code. Note also that by accepting the
+Public Domain "license" you can re-license your copy using whatever
+license you like.
+
+*/
+
+// //////////////////////////////////////////////////////////////////////
+// End of content of file: LICENSE
+// //////////////////////////////////////////////////////////////////////
+
+
+
+
+
+#ifndef JSON_AMALGATED_H_INCLUDED
+# define JSON_AMALGATED_H_INCLUDED
+/// If defined, indicates that the source file is amalgated
+/// to prevent private header inclusion.
+#define JSON_IS_AMALGAMATION
+
+// //////////////////////////////////////////////////////////////////////
+// Beginning of content of file: include/json/version.h
+// //////////////////////////////////////////////////////////////////////
+
+// DO NOT EDIT. This file (and "version") is generated by CMake.
+// Run CMake configure step to update it.
+#ifndef JSON_VERSION_H_INCLUDED
+# define JSON_VERSION_H_INCLUDED
+
+# define JSONCPP_VERSION_STRING "1.7.2"
+# define JSONCPP_VERSION_MAJOR 1
+# define JSONCPP_VERSION_MINOR 7
+# define JSONCPP_VERSION_PATCH 2
+# define JSONCPP_VERSION_QUALIFIER
+# define JSONCPP_VERSION_HEXA ((JSONCPP_VERSION_MAJOR << 24) | (JSONCPP_VERSION_MINOR << 16) | (JSONCPP_VERSION_PATCH << 8))
+
+#ifdef JSONCPP_USING_SECURE_MEMORY
+#undef JSONCPP_USING_SECURE_MEMORY
+#endif
+#define JSONCPP_USING_SECURE_MEMORY 0
+// If non-zero, the library zeroes any memory that it has allocated before
+// it frees its memory.
+
+#endif // JSON_VERSION_H_INCLUDED
+
+// //////////////////////////////////////////////////////////////////////
+// End of content of file: include/json/version.h
+// //////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+// //////////////////////////////////////////////////////////////////////
+// Beginning of content of file: include/json/allocator.h
+// //////////////////////////////////////////////////////////////////////
+
+// Copyright 2007-2010 Baptiste Lepilleur
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#ifndef CPPTL_JSON_ALLOCATOR_H_INCLUDED
+#define CPPTL_JSON_ALLOCATOR_H_INCLUDED
+
+#include <cstring>
+#include <memory>
+
+namespace Json {
+template<typename T>
+class SecureAllocator {
+	public:
+		// Type definitions
+		using value_type      = T;
+		using pointer         = T*;
+		using const_pointer   = const T*;
+		using reference       = T&;
+		using const_reference = const T&;
+		using size_type       = std::size_t;
+		using difference_type = std::ptrdiff_t;
+
+		/**
+		 * Allocate memory for N items using the standard allocator.
+		 */
+		pointer allocate(size_type n) {
+			// allocate using "global operator new"
+			return static_cast<pointer>(::operator new(n * sizeof(T)));
+		}
+
+		/**
+		 * Release memory which was allocated for N items at pointer P.
+		 *
+		 * The memory block is filled with zeroes before being released.
+		 * The pointer argument is tagged as "volatile" to prevent the
+		 * compiler optimizing out this critical step.
+		 */
+		void deallocate(volatile pointer p, size_type n) {
+			std::memset(p, 0, n * sizeof(T));
+			// free using "global operator delete"
+			::operator delete(p);
+		}
+
+		/**
+		 * Construct an item in-place at pointer P.
+		 */
+		template<typename... Args>
+		void construct(pointer p, Args&&... args) {
+			// construct using "placement new" and "perfect forwarding"
+			::new (static_cast<void*>(p)) T(std::forward<Args>(args)...);
+		}
+
+		size_type max_size() const {
+			return size_t(-1) / sizeof(T);
+		}
+
+		pointer address( reference x ) const {
+			return std::addressof(x);
+		}
+
+		const_pointer address( const_reference x ) const {
+			return std::addressof(x);
+		}
+
+		/**
+		 * Destroy an item in-place at pointer P.
+		 */
+		void destroy(pointer p) {
+			// destroy using "explicit destructor"
+			p->~T();
+		}
+
+		// Boilerplate
+		SecureAllocator() {}
+		template<typename U> SecureAllocator(const SecureAllocator<U>&) {}
+		template<typename U> struct rebind { using other = SecureAllocator<U>; };
+};
+
+
+template<typename T, typename U>
+bool operator==(const SecureAllocator<T>&, const SecureAllocator<U>&) {
+	return true;
+}
+
+template<typename T, typename U>
+bool operator!=(const SecureAllocator<T>&, const SecureAllocator<U>&) {
+	return false;
+}
+
+} //namespace Json
+
+#endif // CPPTL_JSON_ALLOCATOR_H_INCLUDED
+
+// //////////////////////////////////////////////////////////////////////
+// End of content of file: include/json/allocator.h
+// //////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+// //////////////////////////////////////////////////////////////////////
+// Beginning of content of file: include/json/config.h
+// //////////////////////////////////////////////////////////////////////
+
+// Copyright 2007-2010 Baptiste Lepilleur
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#ifndef JSON_CONFIG_H_INCLUDED
+#define JSON_CONFIG_H_INCLUDED
+#include <stddef.h>
+#include <string> //typdef String
+
+/// If defined, indicates that json library is embedded in CppTL library.
+//# define JSON_IN_CPPTL 1
+
+/// If defined, indicates that json may leverage CppTL library
+//#  define JSON_USE_CPPTL 1
+/// If defined, indicates that cpptl vector based map should be used instead of
+/// std::map
+/// as Value container.
+//#  define JSON_USE_CPPTL_SMALLMAP 1
+
+// If non-zero, the library uses exceptions to report bad input instead of C
+// assertion macros. The default is to use exceptions.
+#ifndef JSON_USE_EXCEPTION
+#define JSON_USE_EXCEPTION 1
+#endif
+
+/// If defined, indicates that the source file is amalgated
+/// to prevent private header inclusion.
+/// Remarks: it is automatically defined in the generated amalgated header.
+// #define JSON_IS_AMALGAMATION
+
+#ifdef JSON_IN_CPPTL
+#include <cpptl/config.h>
+#ifndef JSON_USE_CPPTL
+#define JSON_USE_CPPTL 1
+#endif
+#endif
+
+#ifdef JSON_IN_CPPTL
+#define JSON_API CPPTL_API
+#elif defined(JSON_DLL_BUILD)
+#if defined(_MSC_VER) || defined(__MINGW32__)
+#define JSON_API __declspec(dllexport)
+#define JSONCPP_DISABLE_DLL_INTERFACE_WARNING
+#endif // if defined(_MSC_VER)
+#elif defined(JSON_DLL)
+#if defined(_MSC_VER) || defined(__MINGW32__)
+#define JSON_API __declspec(dllimport)
+#define JSONCPP_DISABLE_DLL_INTERFACE_WARNING
+#endif // if defined(_MSC_VER)
+#endif // ifdef JSON_IN_CPPTL
+#if !defined(JSON_API)
+#define JSON_API
+#endif
+
+// If JSON_NO_INT64 is defined, then Json only support C++ "int" type for
+// integer
+// Storages, and 64 bits integer support is disabled.
+// #define JSON_NO_INT64 1
+
+#if defined(_MSC_VER) // MSVC
+#  if _MSC_VER <= 1200 // MSVC 6
+    // Microsoft Visual Studio 6 only support conversion from __int64 to double
+    // (no conversion from unsigned __int64).
+#    define JSON_USE_INT64_DOUBLE_CONVERSION 1
+    // Disable warning 4786 for VS6 caused by STL (identifier was truncated to '255'
+    // characters in the debug information)
+    // All projects I've ever seen with VS6 were using this globally (not bothering
+    // with pragma push/pop).
+#    pragma warning(disable : 4786)
+#  endif // MSVC 6
+
+#  if _MSC_VER >= 1500 // MSVC 2008
+    /// Indicates that the following function is deprecated.
+#    define JSONCPP_DEPRECATED(message) __declspec(deprecated(message))
+#  endif
+
+#endif // defined(_MSC_VER)
+
+#if defined(_MSC_VER) && _MSC_VER <= 1600 // MSVC <= 2010
+# define JSONCPP_OVERRIDE
+#else
+# define JSONCPP_OVERRIDE override
+#endif // MSVC <= 2010
+
+
+#ifndef JSON_HAS_RVALUE_REFERENCES
+
+#if defined(_MSC_VER) && _MSC_VER >= 1600 // MSVC >= 2010
+#define JSON_HAS_RVALUE_REFERENCES 1
+#endif // MSVC >= 2010
+
+#ifdef __clang__
+#if __has_feature(cxx_rvalue_references)
+#define JSON_HAS_RVALUE_REFERENCES 1
+#endif  // has_feature
+
+#elif defined __GNUC__ // not clang (gcc comes later since clang emulates gcc)
+#if defined(__GXX_EXPERIMENTAL_CXX0X__) || (__cplusplus >= 201103L)
+#define JSON_HAS_RVALUE_REFERENCES 1
+#endif  // GXX_EXPERIMENTAL
+
+#endif // __clang__ || __GNUC__
+
+#endif // not defined JSON_HAS_RVALUE_REFERENCES
+
+#ifndef JSON_HAS_RVALUE_REFERENCES
+#define JSON_HAS_RVALUE_REFERENCES 0
+#endif
+
+#ifdef __clang__
+#elif defined __GNUC__ // not clang (gcc comes later since clang emulates gcc)
+#  if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5))
+#    define JSONCPP_DEPRECATED(message)  __attribute__ ((deprecated(message)))
+#  elif (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1))
+#    define JSONCPP_DEPRECATED(message)  __attribute__((__deprecated__))
+#  endif  // GNUC version
+#endif // __clang__ || __GNUC__
+
+#if !defined(JSONCPP_DEPRECATED)
+#define JSONCPP_DEPRECATED(message)
+#endif // if !defined(JSONCPP_DEPRECATED)
+
+#if __GNUC__ >= 6
+#  define JSON_USE_INT64_DOUBLE_CONVERSION 1
+#endif
+
+#if !defined(JSON_IS_AMALGAMATION)
+
+# include "version.h"
+
+# if JSONCPP_USING_SECURE_MEMORY
+#  include "allocator.h" //typedef Allocator
+# endif
+
+#endif // if !defined(JSON_IS_AMALGAMATION)
+
+namespace Json {
+typedef int Int;
+typedef unsigned int UInt;
+#if defined(JSON_NO_INT64)
+typedef int LargestInt;
+typedef unsigned int LargestUInt;
+#undef JSON_HAS_INT64
+#else                 // if defined(JSON_NO_INT64)
+// For Microsoft Visual use specific types as long long is not supported
+#if defined(_MSC_VER) // Microsoft Visual Studio
+typedef __int64 Int64;
+typedef unsigned __int64 UInt64;
+#else                 // if defined(_MSC_VER) // Other platforms, use long long
+typedef long long int Int64;
+typedef unsigned long long int UInt64;
+#endif // if defined(_MSC_VER)
+typedef Int64 LargestInt;
+typedef UInt64 LargestUInt;
+#define JSON_HAS_INT64
+#endif // if defined(JSON_NO_INT64)
+#if JSONCPP_USING_SECURE_MEMORY
+#define JSONCPP_STRING        std::basic_string<char, std::char_traits<char>, Json::SecureAllocator<char> >
+#define JSONCPP_OSTRINGSTREAM std::basic_ostringstream<char, std::char_traits<char>, Json::SecureAllocator<char> >
+#define JSONCPP_OSTREAM       std::basic_ostream<char, std::char_traits<char>>
+#define JSONCPP_ISTRINGSTREAM std::basic_istringstream<char, std::char_traits<char>, Json::SecureAllocator<char> >
+#define JSONCPP_ISTREAM       std::istream
+#else
+#define JSONCPP_STRING        std::string
+#define JSONCPP_OSTRINGSTREAM std::ostringstream
+#define JSONCPP_OSTREAM       std::ostream
+#define JSONCPP_ISTRINGSTREAM std::istringstream
+#define JSONCPP_ISTREAM       std::istream
+#endif // if JSONCPP_USING_SECURE_MEMORY
+} // end namespace Json
+
+#endif // JSON_CONFIG_H_INCLUDED
+
+// //////////////////////////////////////////////////////////////////////
+// End of content of file: include/json/config.h
+// //////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+// //////////////////////////////////////////////////////////////////////
+// Beginning of content of file: include/json/forwards.h
+// //////////////////////////////////////////////////////////////////////
+
+// Copyright 2007-2010 Baptiste Lepilleur
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#ifndef JSON_FORWARDS_H_INCLUDED
+#define JSON_FORWARDS_H_INCLUDED
+
+#if !defined(JSON_IS_AMALGAMATION)
+#include "config.h"
+#endif // if !defined(JSON_IS_AMALGAMATION)
+
+namespace Json {
+
+// writer.h
+class FastWriter;
+class StyledWriter;
+
+// reader.h
+class Reader;
+
+// features.h
+class Features;
+
+// value.h
+typedef unsigned int ArrayIndex;
+class StaticString;
+class Path;
+class PathArgument;
+class Value;
+class ValueIteratorBase;
+class ValueIterator;
+class ValueConstIterator;
+
+} // namespace Json
+
+#endif // JSON_FORWARDS_H_INCLUDED
+
+// //////////////////////////////////////////////////////////////////////
+// End of content of file: include/json/forwards.h
+// //////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+// //////////////////////////////////////////////////////////////////////
+// Beginning of content of file: include/json/features.h
+// //////////////////////////////////////////////////////////////////////
+
+// Copyright 2007-2010 Baptiste Lepilleur
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#ifndef CPPTL_JSON_FEATURES_H_INCLUDED
+#define CPPTL_JSON_FEATURES_H_INCLUDED
+
+#if !defined(JSON_IS_AMALGAMATION)
+#include "forwards.h"
+#endif // if !defined(JSON_IS_AMALGAMATION)
+
+namespace Json {
+
+/** \brief Configuration passed to reader and writer.
+ * This configuration object can be used to force the Reader or Writer
+ * to behave in a standard conforming way.
+ */
+class JSON_API Features {
+public:
+  /** \brief A configuration that allows all features and assumes all strings
+   * are UTF-8.
+   * - C & C++ comments are allowed
+   * - Root object can be any JSON value
+   * - Assumes Value strings are encoded in UTF-8
+   */
+  static Features all();
+
+  /** \brief A configuration that is strictly compatible with the JSON
+   * specification.
+   * - Comments are forbidden.
+   * - Root object must be either an array or an object value.
+   * - Assumes Value strings are encoded in UTF-8
+   */
+  static Features strictMode();
+
+  /** \brief Initialize the configuration like JsonConfig::allFeatures;
+   */
+  Features();
+
+  /// \c true if comments are allowed. Default: \c true.
+  bool allowComments_;
+
+  /// \c true if root must be either an array or an object value. Default: \c
+  /// false.
+  bool strictRoot_;
+
+  /// \c true if dropped null placeholders are allowed. Default: \c false.
+  bool allowDroppedNullPlaceholders_;
+
+  /// \c true if numeric object key are allowed. Default: \c false.
+  bool allowNumericKeys_;
+};
+
+} // namespace Json
+
+#endif // CPPTL_JSON_FEATURES_H_INCLUDED
+
+// //////////////////////////////////////////////////////////////////////
+// End of content of file: include/json/features.h
+// //////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+// //////////////////////////////////////////////////////////////////////
+// Beginning of content of file: include/json/value.h
+// //////////////////////////////////////////////////////////////////////
+
+// Copyright 2007-2010 Baptiste Lepilleur
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#ifndef CPPTL_JSON_H_INCLUDED
+#define CPPTL_JSON_H_INCLUDED
+
+#if !defined(JSON_IS_AMALGAMATION)
+#include "forwards.h"
+#endif // if !defined(JSON_IS_AMALGAMATION)
+#include <string>
+#include <vector>
+#include <exception>
+
+#ifndef JSON_USE_CPPTL_SMALLMAP
+#include <map>
+#else
+#include <cpptl/smallmap.h>
+#endif
+#ifdef JSON_USE_CPPTL
+#include <cpptl/forwards.h>
+#endif
+
+//Conditional NORETURN attribute on the throw functions would:
+// a) suppress false positives from static code analysis 
+// b) possibly improve optimization opportunities.
+#if !defined(JSONCPP_NORETURN)
+#  if defined(_MSC_VER)
+#    define JSONCPP_NORETURN __declspec(noreturn)
+#  elif defined(__GNUC__)
+#    define JSONCPP_NORETURN __attribute__ ((__noreturn__))
+#  else
+#    define JSONCPP_NORETURN
+#  endif
+#endif
+
+// Disable warning C4251: <data member>: <type> needs to have dll-interface to
+// be used by...
+#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+#pragma warning(push)
+#pragma warning(disable : 4251)
+#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+
+/** \brief JSON (JavaScript Object Notation).
+ */
+namespace Json {
+
+/** Base class for all exceptions we throw.
+ *
+ * We use nothing but these internally. Of course, STL can throw others.
+ */
+class JSON_API Exception : public std::exception {
+public:
+  Exception(JSONCPP_STRING const& msg);
+  ~Exception() throw() JSONCPP_OVERRIDE;
+  char const* what() const throw() JSONCPP_OVERRIDE;
+protected:
+  JSONCPP_STRING msg_;
+};
+
+/** Exceptions which the user cannot easily avoid.
+ *
+ * E.g. out-of-memory (when we use malloc), stack-overflow, malicious input
+ * 
+ * \remark derived from Json::Exception
+ */
+class JSON_API RuntimeError : public Exception {
+public:
+  RuntimeError(JSONCPP_STRING const& msg);
+};
+
+/** Exceptions thrown by JSON_ASSERT/JSON_FAIL macros.
+ *
+ * These are precondition-violations (user bugs) and internal errors (our bugs).
+ * 
+ * \remark derived from Json::Exception
+ */
+class JSON_API LogicError : public Exception {
+public:
+  LogicError(JSONCPP_STRING const& msg);
+};
+
+/// used internally
+JSONCPP_NORETURN void throwRuntimeError(JSONCPP_STRING const& msg);
+/// used internally
+JSONCPP_NORETURN void throwLogicError(JSONCPP_STRING const& msg);
+
+/** \brief Type of the value held by a Value object.
+ */
+enum ValueType {
+  nullValue = 0, ///< 'null' value
+  intValue,      ///< signed integer value
+  uintValue,     ///< unsigned integer value
+  realValue,     ///< double value
+  stringValue,   ///< UTF-8 string value
+  booleanValue,  ///< bool value
+  arrayValue,    ///< array value (ordered list)
+  objectValue    ///< object value (collection of name/value pairs).
+};
+
+enum CommentPlacement {
+  commentBefore = 0,      ///< a comment placed on the line before a value
+  commentAfterOnSameLine, ///< a comment just after a value on the same line
+  commentAfter, ///< a comment on the line after a value (only make sense for
+  /// root value)
+  numberOfCommentPlacement
+};
+
+//# ifdef JSON_USE_CPPTL
+//   typedef CppTL::AnyEnumerator<const char *> EnumMemberNames;
+//   typedef CppTL::AnyEnumerator<const Value &> EnumValues;
+//# endif
+
+/** \brief Lightweight wrapper to tag static string.
+ *
+ * Value constructor and objectValue member assignement takes advantage of the
+ * StaticString and avoid the cost of string duplication when storing the
+ * string or the member name.
+ *
+ * Example of usage:
+ * \code
+ * Json::Value aValue( StaticString("some text") );
+ * Json::Value object;
+ * static const StaticString code("code");
+ * object[code] = 1234;
+ * \endcode
+ */
+class JSON_API StaticString {
+public:
+  explicit StaticString(const char* czstring) : c_str_(czstring) {}
+
+  operator const char*() const { return c_str_; }
+
+  const char* c_str() const { return c_str_; }
+
+private:
+  const char* c_str_;
+};
+
+/** \brief Represents a <a HREF="http://www.json.org">JSON</a> value.
+ *
+ * This class is a discriminated union wrapper that can represents a:
+ * - signed integer [range: Value::minInt - Value::maxInt]
+ * - unsigned integer (range: 0 - Value::maxUInt)
+ * - double
+ * - UTF-8 string
+ * - boolean
+ * - 'null'
+ * - an ordered list of Value
+ * - collection of name/value pairs (javascript object)
+ *
+ * The type of the held value is represented by a #ValueType and
+ * can be obtained using type().
+ *
+ * Values of an #objectValue or #arrayValue can be accessed using operator[]()
+ * methods.
+ * Non-const methods will automatically create the a #nullValue element
+ * if it does not exist.
+ * The sequence of an #arrayValue will be automatically resized and initialized
+ * with #nullValue. resize() can be used to enlarge or truncate an #arrayValue.
+ *
+ * The get() methods can be used to obtain default value in the case the
+ * required element does not exist.
+ *
+ * It is possible to iterate over the list of a #objectValue values using
+ * the getMemberNames() method.
+ *
+ * \note #Value string-length fit in size_t, but keys must be < 2^30.
+ * (The reason is an implementation detail.) A #CharReader will raise an
+ * exception if a bound is exceeded to avoid security holes in your app,
+ * but the Value API does *not* check bounds. That is the responsibility
+ * of the caller.
+ */
+class JSON_API Value {
+  friend class ValueIteratorBase;
+public:
+  typedef std::vector<JSONCPP_STRING> Members;
+  typedef ValueIterator iterator;
+  typedef ValueConstIterator const_iterator;
+  typedef Json::UInt UInt;
+  typedef Json::Int Int;
+#if defined(JSON_HAS_INT64)
+  typedef Json::UInt64 UInt64;
+  typedef Json::Int64 Int64;
+#endif // defined(JSON_HAS_INT64)
+  typedef Json::LargestInt LargestInt;
+  typedef Json::LargestUInt LargestUInt;
+  typedef Json::ArrayIndex ArrayIndex;
+
+  static const Value& null;  ///< We regret this reference to a global instance; prefer the simpler Value().
+  static const Value& nullRef;  ///< just a kludge for binary-compatibility; same as null
+  /// Minimum signed integer value that can be stored in a Json::Value.
+  static const LargestInt minLargestInt;
+  /// Maximum signed integer value that can be stored in a Json::Value.
+  static const LargestInt maxLargestInt;
+  /// Maximum unsigned integer value that can be stored in a Json::Value.
+  static const LargestUInt maxLargestUInt;
+
+  /// Minimum signed int value that can be stored in a Json::Value.
+  static const Int minInt;
+  /// Maximum signed int value that can be stored in a Json::Value.
+  static const Int maxInt;
+  /// Maximum unsigned int value that can be stored in a Json::Value.
+  static const UInt maxUInt;
+
+#if defined(JSON_HAS_INT64)
+  /// Minimum signed 64 bits int value that can be stored in a Json::Value.
+  static const Int64 minInt64;
+  /// Maximum signed 64 bits int value that can be stored in a Json::Value.
+  static const Int64 maxInt64;
+  /// Maximum unsigned 64 bits int value that can be stored in a Json::Value.
+  static const UInt64 maxUInt64;
+#endif // defined(JSON_HAS_INT64)
+
+private:
+#ifndef JSONCPP_DOC_EXCLUDE_IMPLEMENTATION
+  class CZString {
+  public:
+    enum DuplicationPolicy {
+      noDuplication = 0,
+      duplicate,
+      duplicateOnCopy
+    };
+    CZString(ArrayIndex index);
+    CZString(char const* str, unsigned length, DuplicationPolicy allocate);
+    CZString(CZString const& other);
+#if JSON_HAS_RVALUE_REFERENCES
+    CZString(CZString&& other);
+#endif
+    ~CZString();
+    CZString& operator=(CZString other);
+    bool operator<(CZString const& other) const;
+    bool operator==(CZString const& other) const;
+    ArrayIndex index() const;
+    //const char* c_str() const; ///< \deprecated
+    char const* data() const;
+    unsigned length() const;
+    bool isStaticString() const;
+
+  private:
+    void swap(CZString& other);
+
+    struct StringStorage {
+      unsigned policy_: 2;
+      unsigned length_: 30; // 1GB max
+    };
+
+    char const* cstr_;  // actually, a prefixed string, unless policy is noDup
+    union {
+      ArrayIndex index_;
+      StringStorage storage_;
+    };
+  };
+
+public:
+#ifndef JSON_USE_CPPTL_SMALLMAP
+  typedef std::map<CZString, Value> ObjectValues;
+#else
+  typedef CppTL::SmallMap<CZString, Value> ObjectValues;
+#endif // ifndef JSON_USE_CPPTL_SMALLMAP
+#endif // ifndef JSONCPP_DOC_EXCLUDE_IMPLEMENTATION
+
+public:
+  /** \brief Create a default Value of the given type.
+
+    This is a very useful constructor.
+    To create an empty array, pass arrayValue.
+    To create an empty object, pass objectValue.
+    Another Value can then be set to this one by assignment.
+This is useful since clear() and resize() will not alter types.
+
+    Examples:
+\code
+Json::Value null_value; // null
+Json::Value arr_value(Json::arrayValue); // []
+Json::Value obj_value(Json::objectValue); // {}
+\endcode
+  */
+  Value(ValueType type = nullValue);
+  Value(Int value);
+  Value(UInt value);
+#if defined(JSON_HAS_INT64)
+  Value(Int64 value);
+  Value(UInt64 value);
+#endif // if defined(JSON_HAS_INT64)
+  Value(double value);
+  Value(const char* value); ///< Copy til first 0. (NULL causes to seg-fault.)
+  Value(const char* begin, const char* end); ///< Copy all, incl zeroes.
+  /** \brief Constructs a value from a static string.
+
+   * Like other value string constructor but do not duplicate the string for
+   * internal storage. The given string must remain alive after the call to this
+   * constructor.
+   * \note This works only for null-terminated strings. (We cannot change the
+   *   size of this class, so we have nowhere to store the length,
+   *   which might be computed later for various operations.)
+   *
+   * Example of usage:
+   * \code
+   * static StaticString foo("some text");
+   * Json::Value aValue(foo);
+   * \endcode
+   */
+  Value(const StaticString& value);
+  Value(const JSONCPP_STRING& value); ///< Copy data() til size(). Embedded zeroes too.
+#ifdef JSON_USE_CPPTL
+  Value(const CppTL::ConstString& value);
+#endif
+  Value(bool value);
+  /// Deep copy.
+  Value(const Value& other);
+#if JSON_HAS_RVALUE_REFERENCES
+  /// Move constructor
+  Value(Value&& other);
+#endif
+  ~Value();
+
+  /// Deep copy, then swap(other).
+  /// \note Over-write existing comments. To preserve comments, use #swapPayload().
+  Value& operator=(Value other);
+  /// Swap everything.
+  void swap(Value& other);
+  /// Swap values but leave comments and source offsets in place.
+  void swapPayload(Value& other);
+
+  ValueType type() const;
+
+  /// Compare payload only, not comments etc.
+  bool operator<(const Value& other) const;
+  bool operator<=(const Value& other) const;
+  bool operator>=(const Value& other) const;
+  bool operator>(const Value& other) const;
+  bool operator==(const Value& other) const;
+  bool operator!=(const Value& other) const;
+  int compare(const Value& other) const;
+
+  const char* asCString() const; ///< Embedded zeroes could cause you trouble!
+#if JSONCPP_USING_SECURE_MEMORY
+  unsigned getCStringLength() const; //Allows you to understand the length of the CString
+#endif
+  JSONCPP_STRING asString() const; ///< Embedded zeroes are possible.
+  /** Get raw char* of string-value.
+   *  \return false if !string. (Seg-fault if str or end are NULL.)
+   */
+  bool getString(
+      char const** begin, char const** end) const;
+#ifdef JSON_USE_CPPTL
+  CppTL::ConstString asConstString() const;
+#endif
+  Int asInt() const;
+  UInt asUInt() const;
+#if defined(JSON_HAS_INT64)
+  Int64 asInt64() const;
+  UInt64 asUInt64() const;
+#endif // if defined(JSON_HAS_INT64)
+  LargestInt asLargestInt() const;
+  LargestUInt asLargestUInt() const;
+  float asFloat() const;
+  double asDouble() const;
+  bool asBool() const;
+
+  bool isNull() const;
+  bool isBool() const;
+  bool isInt() const;
+  bool isInt64() const;
+  bool isUInt() const;
+  bool isUInt64() const;
+  bool isIntegral() const;
+  bool isDouble() const;
+  bool isNumeric() const;
+  bool isString() const;
+  bool isArray() const;
+  bool isObject() const;
+
+  bool isConvertibleTo(ValueType other) const;
+
+  /// Number of values in array or object
+  ArrayIndex size() const;
+
+  /// \brief Return true if empty array, empty object, or null;
+  /// otherwise, false.
+  bool empty() const;
+
+  /// Return isNull()
+  bool operator!() const;
+
+  /// Remove all object members and array elements.
+  /// \pre type() is arrayValue, objectValue, or nullValue
+  /// \post type() is unchanged
+  void clear();
+
+  /// Resize the array to size elements.
+  /// New elements are initialized to null.
+  /// May only be called on nullValue or arrayValue.
+  /// \pre type() is arrayValue or nullValue
+  /// \post type() is arrayValue
+  void resize(ArrayIndex size);
+
+  /// Access an array element (zero based index ).
+  /// If the array contains less than index element, then null value are
+  /// inserted
+  /// in the array so that its size is index+1.
+  /// (You may need to say 'value[0u]' to get your compiler to distinguish
+  ///  this from the operator[] which takes a string.)
+  Value& operator[](ArrayIndex index);
+
+  /// Access an array element (zero based index ).
+  /// If the array contains less than index element, then null value are
+  /// inserted
+  /// in the array so that its size is index+1.
+  /// (You may need to say 'value[0u]' to get your compiler to distinguish
+  ///  this from the operator[] which takes a string.)
+  Value& operator[](int index);
+
+  /// Access an array element (zero based index )
+  /// (You may need to say 'value[0u]' to get your compiler to distinguish
+  ///  this from the operator[] which takes a string.)
+  const Value& operator[](ArrayIndex index) const;
+
+  /// Access an array element (zero based index )
+  /// (You may need to say 'value[0u]' to get your compiler to distinguish
+  ///  this from the operator[] which takes a string.)
+  const Value& operator[](int index) const;
+
+  /// If the array contains at least index+1 elements, returns the element
+  /// value,
+  /// otherwise returns defaultValue.
+  Value get(ArrayIndex index, const Value& defaultValue) const;
+  /// Return true if index < size().
+  bool isValidIndex(ArrayIndex index) const;
+  /// \brief Append value to array at the end.
+  ///
+  /// Equivalent to jsonvalue[jsonvalue.size()] = value;
+  Value& append(const Value& value);
+
+  /// Access an object value by name, create a null member if it does not exist.
+  /// \note Because of our implementation, keys are limited to 2^30 -1 chars.
+  ///  Exceeding that will cause an exception.
+  Value& operator[](const char* key);
+  /// Access an object value by name, returns null if there is no member with
+  /// that name.
+  const Value& operator[](const char* key) const;
+  /// Access an object value by name, create a null member if it does not exist.
+  /// \param key may contain embedded nulls.
+  Value& operator[](const JSONCPP_STRING& key);
+  /// Access an object value by name, returns null if there is no member with
+  /// that name.
+  /// \param key may contain embedded nulls.
+  const Value& operator[](const JSONCPP_STRING& key) const;
+  /** \brief Access an object value by name, create a null member if it does not
+   exist.
+
+   * If the object has no entry for that name, then the member name used to store
+   * the new entry is not duplicated.
+   * Example of use:
+   * \code
+   * Json::Value object;
+   * static const StaticString code("code");
+   * object[code] = 1234;
+   * \endcode
+   */
+  Value& operator[](const StaticString& key);
+#ifdef JSON_USE_CPPTL
+  /// Access an object value by name, create a null member if it does not exist.
+  Value& operator[](const CppTL::ConstString& key);
+  /// Access an object value by name, returns null if there is no member with
+  /// that name.
+  const Value& operator[](const CppTL::ConstString& key) const;
+#endif
+  /// Return the member named key if it exist, defaultValue otherwise.
+  /// \note deep copy
+  Value get(const char* key, const Value& defaultValue) const;
+  /// Return the member named key if it exist, defaultValue otherwise.
+  /// \note deep copy
+  /// \note key may contain embedded nulls.
+  Value get(const char* begin, const char* end, const Value& defaultValue) const;
+  /// Return the member named key if it exist, defaultValue otherwise.
+  /// \note deep copy
+  /// \param key may contain embedded nulls.
+  Value get(const JSONCPP_STRING& key, const Value& defaultValue) const;
+#ifdef JSON_USE_CPPTL
+  /// Return the member named key if it exist, defaultValue otherwise.
+  /// \note deep copy
+  Value get(const CppTL::ConstString& key, const Value& defaultValue) const;
+#endif
+  /// Most general and efficient version of isMember()const, get()const,
+  /// and operator[]const
+  /// \note As stated elsewhere, behavior is undefined if (end-begin) >= 2^30
+  Value const* find(char const* begin, char const* end) const;
+  /// Most general and efficient version of object-mutators.
+  /// \note As stated elsewhere, behavior is undefined if (end-begin) >= 2^30
+  /// \return non-zero, but JSON_ASSERT if this is neither object nor nullValue.
+  Value const* demand(char const* begin, char const* end);
+  /// \brief Remove and return the named member.
+  ///
+  /// Do nothing if it did not exist.
+  /// \return the removed Value, or null.
+  /// \pre type() is objectValue or nullValue
+  /// \post type() is unchanged
+  /// \deprecated
+  Value removeMember(const char* key);
+  /// Same as removeMember(const char*)
+  /// \param key may contain embedded nulls.
+  /// \deprecated
+  Value removeMember(const JSONCPP_STRING& key);
+  /// Same as removeMember(const char* begin, const char* end, Value* removed),
+  /// but 'key' is null-terminated.
+  bool removeMember(const char* key, Value* removed);
+  /** \brief Remove the named map member.
+
+      Update 'removed' iff removed.
+      \param key may contain embedded nulls.
+      \return true iff removed (no exceptions)
+  */
+  bool removeMember(JSONCPP_STRING const& key, Value* removed);
+  /// Same as removeMember(JSONCPP_STRING const& key, Value* removed)
+  bool removeMember(const char* begin, const char* end, Value* removed);
+  /** \brief Remove the indexed array element.
+
+      O(n) expensive operations.
+      Update 'removed' iff removed.
+      \return true iff removed (no exceptions)
+  */
+  bool removeIndex(ArrayIndex i, Value* removed);
+
+  /// Return true if the object has a member named key.
+  /// \note 'key' must be null-terminated.
+  bool isMember(const char* key) const;
+  /// Return true if the object has a member named key.
+  /// \param key may contain embedded nulls.
+  bool isMember(const JSONCPP_STRING& key) const;
+  /// Same as isMember(JSONCPP_STRING const& key)const
+  bool isMember(const char* begin, const char* end) const;
+#ifdef JSON_USE_CPPTL
+  /// Return true if the object has a member named key.
+  bool isMember(const CppTL::ConstString& key) const;
+#endif
+
+  /// \brief Return a list of the member names.
+  ///
+  /// If null, return an empty list.
+  /// \pre type() is objectValue or nullValue
+  /// \post if type() was nullValue, it remains nullValue
+  Members getMemberNames() const;
+
+  //# ifdef JSON_USE_CPPTL
+  //      EnumMemberNames enumMemberNames() const;
+  //      EnumValues enumValues() const;
+  //# endif
+
+  /// \deprecated Always pass len.
+  JSONCPP_DEPRECATED("Use setComment(JSONCPP_STRING const&) instead.")
+  void setComment(const char* comment, CommentPlacement placement);
+  /// Comments must be //... or /* ... */
+  void setComment(const char* comment, size_t len, CommentPlacement placement);
+  /// Comments must be //... or /* ... */
+  void setComment(const JSONCPP_STRING& comment, CommentPlacement placement);
+  bool hasComment(CommentPlacement placement) const;
+  /// Include delimiters and embedded newlines.
+  JSONCPP_STRING getComment(CommentPlacement placement) const;
+
+  JSONCPP_STRING toStyledString() const;
+
+  const_iterator begin() const;
+  const_iterator end() const;
+
+  iterator begin();
+  iterator end();
+
+  // Accessors for the [start, limit) range of bytes within the JSON text from
+  // which this value was parsed, if any.
+  void setOffsetStart(ptrdiff_t start);
+  void setOffsetLimit(ptrdiff_t limit);
+  ptrdiff_t getOffsetStart() const;
+  ptrdiff_t getOffsetLimit() const;
+
+private:
+  void initBasic(ValueType type, bool allocated = false);
+
+  Value& resolveReference(const char* key);
+  Value& resolveReference(const char* key, const char* end);
+
+  struct CommentInfo {
+    CommentInfo();
+    ~CommentInfo();
+
+    void setComment(const char* text, size_t len);
+
+    char* comment_;
+  };
+
+  // struct MemberNamesTransform
+  //{
+  //   typedef const char *result_type;
+  //   const char *operator()( const CZString &name ) const
+  //   {
+  //      return name.c_str();
+  //   }
+  //};
+
+  union ValueHolder {
+    LargestInt int_;
+    LargestUInt uint_;
+    double real_;
+    bool bool_;
+    char* string_;  // actually ptr to unsigned, followed by str, unless !allocated_
+    ObjectValues* map_;
+  } value_;
+  ValueType type_ : 8;
+  unsigned int allocated_ : 1; // Notes: if declared as bool, bitfield is useless.
+                               // If not allocated_, string_ must be null-terminated.
+  CommentInfo* comments_;
+
+  // [start, limit) byte offsets in the source JSON text from which this Value
+  // was extracted.
+  ptrdiff_t start_;
+  ptrdiff_t limit_;
+};
+
+/** \brief Experimental and untested: represents an element of the "path" to
+ * access a node.
+ */
+class JSON_API PathArgument {
+public:
+  friend class Path;
+
+  PathArgument();
+  PathArgument(ArrayIndex index);
+  PathArgument(const char* key);
+  PathArgument(const JSONCPP_STRING& key);
+
+private:
+  enum Kind {
+    kindNone = 0,
+    kindIndex,
+    kindKey
+  };
+  JSONCPP_STRING key_;
+  ArrayIndex index_;
+  Kind kind_;
+};
+
+/** \brief Experimental and untested: represents a "path" to access a node.
+ *
+ * Syntax:
+ * - "." => root node
+ * - ".[n]" => elements at index 'n' of root node (an array value)
+ * - ".name" => member named 'name' of root node (an object value)
+ * - ".name1.name2.name3"
+ * - ".[0][1][2].name1[3]"
+ * - ".%" => member name is provided as parameter
+ * - ".[%]" => index is provied as parameter
+ */
+class JSON_API Path {
+public:
+  Path(const JSONCPP_STRING& path,
+       const PathArgument& a1 = PathArgument(),
+       const PathArgument& a2 = PathArgument(),
+       const PathArgument& a3 = PathArgument(),
+       const PathArgument& a4 = PathArgument(),
+       const PathArgument& a5 = PathArgument());
+
+  const Value& resolve(const Value& root) const;
+  Value resolve(const Value& root, const Value& defaultValue) const;
+  /// Creates the "path" to access the specified node and returns a reference on
+  /// the node.
+  Value& make(Value& root) const;
+
+private:
+  typedef std::vector<const PathArgument*> InArgs;
+  typedef std::vector<PathArgument> Args;
+
+  void makePath(const JSONCPP_STRING& path, const InArgs& in);
+  void addPathInArg(const JSONCPP_STRING& path,
+                    const InArgs& in,
+                    InArgs::const_iterator& itInArg,
+                    PathArgument::Kind kind);
+  void invalidPath(const JSONCPP_STRING& path, int location);
+
+  Args args_;
+};
+
+/** \brief base class for Value iterators.
+ *
+ */
+class JSON_API ValueIteratorBase {
+public:
+  typedef std::bidirectional_iterator_tag iterator_category;
+  typedef unsigned int size_t;
+  typedef int difference_type;
+  typedef ValueIteratorBase SelfType;
+
+  bool operator==(const SelfType& other) const { return isEqual(other); }
+
+  bool operator!=(const SelfType& other) const { return !isEqual(other); }
+
+  difference_type operator-(const SelfType& other) const {
+    return other.computeDistance(*this);
+  }
+
+  /// Return either the index or the member name of the referenced value as a
+  /// Value.
+  Value key() const;
+
+  /// Return the index of the referenced Value, or -1 if it is not an arrayValue.
+  UInt index() const;
+
+  /// Return the member name of the referenced Value, or "" if it is not an
+  /// objectValue.
+  /// \note Avoid `c_str()` on result, as embedded zeroes are possible.
+  JSONCPP_STRING name() const;
+
+  /// Return the member name of the referenced Value. "" if it is not an
+  /// objectValue.
+  /// \deprecated This cannot be used for UTF-8 strings, since there can be embedded nulls.
+  JSONCPP_DEPRECATED("Use `key = name();` instead.")
+  char const* memberName() const;
+  /// Return the member name of the referenced Value, or NULL if it is not an
+  /// objectValue.
+  /// \note Better version than memberName(). Allows embedded nulls.
+  char const* memberName(char const** end) const;
+
+protected:
+  Value& deref() const;
+
+  void increment();
+
+  void decrement();
+
+  difference_type computeDistance(const SelfType& other) const;
+
+  bool isEqual(const SelfType& other) const;
+
+  void copy(const SelfType& other);
+
+private:
+  Value::ObjectValues::iterator current_;
+  // Indicates that iterator is for a null value.
+  bool isNull_;
+
+public:
+  // For some reason, BORLAND needs these at the end, rather
+  // than earlier. No idea why.
+  ValueIteratorBase();
+  explicit ValueIteratorBase(const Value::ObjectValues::iterator& current);
+};
+
+/** \brief const iterator for object and array value.
+ *
+ */
+class JSON_API ValueConstIterator : public ValueIteratorBase {
+  friend class Value;
+
+public:
+  typedef const Value value_type;
+  //typedef unsigned int size_t;
+  //typedef int difference_type;
+  typedef const Value& reference;
+  typedef const Value* pointer;
+  typedef ValueConstIterator SelfType;
+
+  ValueConstIterator();
+  ValueConstIterator(ValueIterator const& other);
+
+private:
+/*! \internal Use by Value to create an iterator.
+ */
+  explicit ValueConstIterator(const Value::ObjectValues::iterator& current);
+public:
+  SelfType& operator=(const ValueIteratorBase& other);
+
+  SelfType operator++(int) {
+    SelfType temp(*this);
+    ++*this;
+    return temp;
+  }
+
+  SelfType operator--(int) {
+    SelfType temp(*this);
+    --*this;
+    return temp;
+  }
+
+  SelfType& operator--() {
+    decrement();
+    return *this;
+  }
+
+  SelfType& operator++() {
+    increment();
+    return *this;
+  }
+
+  reference operator*() const { return deref(); }
+
+  pointer operator->() const { return &deref(); }
+};
+
+/** \brief Iterator for object and array value.
+ */
+class JSON_API ValueIterator : public ValueIteratorBase {
+  friend class Value;
+
+public:
+  typedef Value value_type;
+  typedef unsigned int size_t;
+  typedef int difference_type;
+  typedef Value& reference;
+  typedef Value* pointer;
+  typedef ValueIterator SelfType;
+
+  ValueIterator();
+  explicit ValueIterator(const ValueConstIterator& other);
+  ValueIterator(const ValueIterator& other);
+
+private:
+/*! \internal Use by Value to create an iterator.
+ */
+  explicit ValueIterator(const Value::ObjectValues::iterator& current);
+public:
+  SelfType& operator=(const SelfType& other);
+
+  SelfType operator++(int) {
+    SelfType temp(*this);
+    ++*this;
+    return temp;
+  }
+
+  SelfType operator--(int) {
+    SelfType temp(*this);
+    --*this;
+    return temp;
+  }
+
+  SelfType& operator--() {
+    decrement();
+    return *this;
+  }
+
+  SelfType& operator++() {
+    increment();
+    return *this;
+  }
+
+  reference operator*() const { return deref(); }
+
+  pointer operator->() const { return &deref(); }
+};
+
+} // namespace Json
+
+
+namespace std {
+/// Specialize std::swap() for Json::Value.
+template<>
+inline void swap(Json::Value& a, Json::Value& b) { a.swap(b); }
+}
+
+
+#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+#pragma warning(pop)
+#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+
+#endif // CPPTL_JSON_H_INCLUDED
+
+// //////////////////////////////////////////////////////////////////////
+// End of content of file: include/json/value.h
+// //////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+// //////////////////////////////////////////////////////////////////////
+// Beginning of content of file: include/json/reader.h
+// //////////////////////////////////////////////////////////////////////
+
+// Copyright 2007-2010 Baptiste Lepilleur
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#ifndef CPPTL_JSON_READER_H_INCLUDED
+#define CPPTL_JSON_READER_H_INCLUDED
+
+#if !defined(JSON_IS_AMALGAMATION)
+#include "features.h"
+#include "value.h"
+#endif // if !defined(JSON_IS_AMALGAMATION)
+#include <deque>
+#include <iosfwd>
+#include <stack>
+#include <string>
+#include <istream>
+
+// Disable warning C4251: <data member>: <type> needs to have dll-interface to
+// be used by...
+#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+#pragma warning(push)
+#pragma warning(disable : 4251)
+#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+
+namespace Json {
+
+/** \brief Unserialize a <a HREF="http://www.json.org">JSON</a> document into a
+ *Value.
+ *
+ * \deprecated Use CharReader and CharReaderBuilder.
+ */
+class JSON_API Reader {
+public:
+  typedef char Char;
+  typedef const Char* Location;
+
+  /** \brief An error tagged with where in the JSON text it was encountered.
+   *
+   * The offsets give the [start, limit) range of bytes within the text. Note
+   * that this is bytes, not codepoints.
+   *
+   */
+  struct StructuredError {
+    ptrdiff_t offset_start;
+    ptrdiff_t offset_limit;
+    JSONCPP_STRING message;
+  };
+
+  /** \brief Constructs a Reader allowing all features
+   * for parsing.
+   */
+  Reader();
+
+  /** \brief Constructs a Reader allowing the specified feature set
+   * for parsing.
+   */
+  Reader(const Features& features);
+
+  /** \brief Read a Value from a <a HREF="http://www.json.org">JSON</a>
+   * document.
+   * \param document UTF-8 encoded string containing the document to read.
+   * \param root [out] Contains the root value of the document if it was
+   *             successfully parsed.
+   * \param collectComments \c true to collect comment and allow writing them
+   * back during
+   *                        serialization, \c false to discard comments.
+   *                        This parameter is ignored if
+   * Features::allowComments_
+   *                        is \c false.
+   * \return \c true if the document was successfully parsed, \c false if an
+   * error occurred.
+   */
+  bool
+  parse(const std::string& document, Value& root, bool collectComments = true);
+
+  /** \brief Read a Value from a <a HREF="http://www.json.org">JSON</a>
+   document.
+   * \param beginDoc Pointer on the beginning of the UTF-8 encoded string of the
+   document to read.
+   * \param endDoc Pointer on the end of the UTF-8 encoded string of the
+   document to read.
+   *               Must be >= beginDoc.
+   * \param root [out] Contains the root value of the document if it was
+   *             successfully parsed.
+   * \param collectComments \c true to collect comment and allow writing them
+   back during
+   *                        serialization, \c false to discard comments.
+   *                        This parameter is ignored if
+   Features::allowComments_
+   *                        is \c false.
+   * \return \c true if the document was successfully parsed, \c false if an
+   error occurred.
+   */
+  bool parse(const char* beginDoc,
+             const char* endDoc,
+             Value& root,
+             bool collectComments = true);
+
+  /// \brief Parse from input stream.
+  /// \see Json::operator>>(std::istream&, Json::Value&).
+  bool parse(JSONCPP_ISTREAM& is, Value& root, bool collectComments = true);
+
+  /** \brief Returns a user friendly string that list errors in the parsed
+   * document.
+   * \return Formatted error message with the list of errors with their location
+   * in
+   *         the parsed document. An empty string is returned if no error
+   * occurred
+   *         during parsing.
+   * \deprecated Use getFormattedErrorMessages() instead (typo fix).
+   */
+  JSONCPP_DEPRECATED("Use getFormattedErrorMessages() instead.")
+  JSONCPP_STRING getFormatedErrorMessages() const;
+
+  /** \brief Returns a user friendly string that list errors in the parsed
+   * document.
+   * \return Formatted error message with the list of errors with their location
+   * in
+   *         the parsed document. An empty string is returned if no error
+   * occurred
+   *         during parsing.
+   */
+  JSONCPP_STRING getFormattedErrorMessages() const;
+
+  /** \brief Returns a vector of structured erros encounted while parsing.
+   * \return A (possibly empty) vector of StructuredError objects. Currently
+   *         only one error can be returned, but the caller should tolerate
+   * multiple
+   *         errors.  This can occur if the parser recovers from a non-fatal
+   *         parse error and then encounters additional errors.
+   */
+  std::vector<StructuredError> getStructuredErrors() const;
+
+  /** \brief Add a semantic error message.
+   * \param value JSON Value location associated with the error
+   * \param message The error message.
+   * \return \c true if the error was successfully added, \c false if the
+   * Value offset exceeds the document size.
+   */
+  bool pushError(const Value& value, const JSONCPP_STRING& message);
+
+  /** \brief Add a semantic error message with extra context.
+   * \param value JSON Value location associated with the error
+   * \param message The error message.
+   * \param extra Additional JSON Value location to contextualize the error
+   * \return \c true if the error was successfully added, \c false if either
+   * Value offset exceeds the document size.
+   */
+  bool pushError(const Value& value, const JSONCPP_STRING& message, const Value& extra);
+
+  /** \brief Return whether there are any errors.
+   * \return \c true if there are no errors to report \c false if
+   * errors have occurred.
+   */
+  bool good() const;
+
+private:
+  enum TokenType {
+    tokenEndOfStream = 0,
+    tokenObjectBegin,
+    tokenObjectEnd,
+    tokenArrayBegin,
+    tokenArrayEnd,
+    tokenString,
+    tokenNumber,
+    tokenTrue,
+    tokenFalse,
+    tokenNull,
+    tokenArraySeparator,
+    tokenMemberSeparator,
+    tokenComment,
+    tokenError
+  };
+
+  class Token {
+  public:
+    TokenType type_;
+    Location start_;
+    Location end_;
+  };
+
+  class ErrorInfo {
+  public:
+    Token token_;
+    JSONCPP_STRING message_;
+    Location extra_;
+  };
+
+  typedef std::deque<ErrorInfo> Errors;
+
+  bool readToken(Token& token);
+  void skipSpaces();
+  bool match(Location pattern, int patternLength);
+  bool readComment();
+  bool readCStyleComment();
+  bool readCppStyleComment();
+  bool readString();
+  void readNumber();
+  bool readValue();
+  bool readObject(Token& token);
+  bool readArray(Token& token);
+  bool decodeNumber(Token& token);
+  bool decodeNumber(Token& token, Value& decoded);
+  bool decodeString(Token& token);
+  bool decodeString(Token& token, JSONCPP_STRING& decoded);
+  bool decodeDouble(Token& token);
+  bool decodeDouble(Token& token, Value& decoded);
+  bool decodeUnicodeCodePoint(Token& token,
+                              Location& current,
+                              Location end,
+                              unsigned int& unicode);
+  bool decodeUnicodeEscapeSequence(Token& token,
+                                   Location& current,
+                                   Location end,
+                                   unsigned int& unicode);
+  bool addError(const JSONCPP_STRING& message, Token& token, Location extra = 0);
+  bool recoverFromError(TokenType skipUntilToken);
+  bool addErrorAndRecover(const JSONCPP_STRING& message,
+                          Token& token,
+                          TokenType skipUntilToken);
+  void skipUntilSpace();
+  Value& currentValue();
+  Char getNextChar();
+  void
+  getLocationLineAndColumn(Location location, int& line, int& column) const;
+  JSONCPP_STRING getLocationLineAndColumn(Location location) const;
+  void addComment(Location begin, Location end, CommentPlacement placement);
+  void skipCommentTokens(Token& token);
+
+  typedef std::stack<Value*> Nodes;
+  Nodes nodes_;
+  Errors errors_;
+  JSONCPP_STRING document_;
+  Location begin_;
+  Location end_;
+  Location current_;
+  Location lastValueEnd_;
+  Value* lastValue_;
+  JSONCPP_STRING commentsBefore_;
+  Features features_;
+  bool collectComments_;
+};  // Reader
+
+/** Interface for reading JSON from a char array.
+ */
+class JSON_API CharReader {
+public:
+  virtual ~CharReader() {}
+  /** \brief Read a Value from a <a HREF="http://www.json.org">JSON</a>
+   document.
+   * The document must be a UTF-8 encoded string containing the document to read.
+   *
+   * \param beginDoc Pointer on the beginning of the UTF-8 encoded string of the
+   document to read.
+   * \param endDoc Pointer on the end of the UTF-8 encoded string of the
+   document to read.
+   *        Must be >= beginDoc.
+   * \param root [out] Contains the root value of the document if it was
+   *             successfully parsed.
+   * \param errs [out] Formatted error messages (if not NULL)
+   *        a user friendly string that lists errors in the parsed
+   * document.
+   * \return \c true if the document was successfully parsed, \c false if an
+   error occurred.
+   */
+  virtual bool parse(
+      char const* beginDoc, char const* endDoc,
+      Value* root, JSONCPP_STRING* errs) = 0;
+
+  class JSON_API Factory {
+  public:
+    virtual ~Factory() {}
+    /** \brief Allocate a CharReader via operator new().
+     * \throw std::exception if something goes wrong (e.g. invalid settings)
+     */
+    virtual CharReader* newCharReader() const = 0;
+  };  // Factory
+};  // CharReader
+
+/** \brief Build a CharReader implementation.
+
+Usage:
+\code
+  using namespace Json;
+  CharReaderBuilder builder;
+  builder["collectComments"] = false;
+  Value value;
+  JSONCPP_STRING errs;
+  bool ok = parseFromStream(builder, std::cin, &value, &errs);
+\endcode
+*/
+class JSON_API CharReaderBuilder : public CharReader::Factory {
+public:
+  // Note: We use a Json::Value so that we can add data-members to this class
+  // without a major version bump.
+  /** Configuration of this builder.
+    These are case-sensitive.
+    Available settings (case-sensitive):
+    - `"collectComments": false or true`
+      - true to collect comment and allow writing them
+        back during serialization, false to discard comments.
+        This parameter is ignored if allowComments is false.
+    - `"allowComments": false or true`
+      - true if comments are allowed.
+    - `"strictRoot": false or true`
+      - true if root must be either an array or an object value
+    - `"allowDroppedNullPlaceholders": false or true`
+      - true if dropped null placeholders are allowed. (See StreamWriterBuilder.)
+    - `"allowNumericKeys": false or true`
+      - true if numeric object keys are allowed.
+    - `"allowSingleQuotes": false or true`
+      - true if '' are allowed for strings (both keys and values)
+    - `"stackLimit": integer`
+      - Exceeding stackLimit (recursive depth of `readValue()`) will
+        cause an exception.
+      - This is a security issue (seg-faults caused by deeply nested JSON),
+        so the default is low.
+    - `"failIfExtra": false or true`
+      - If true, `parse()` returns false when extra non-whitespace trails
+        the JSON value in the input string.
+    - `"rejectDupKeys": false or true`
+      - If true, `parse()` returns false when a key is duplicated within an object.
+    - `"allowSpecialFloats": false or true`
+      - If true, special float values (NaNs and infinities) are allowed 
+        and their values are lossfree restorable.
+
+    You can examine 'settings_` yourself
+    to see the defaults. You can also write and read them just like any
+    JSON Value.
+    \sa setDefaults()
+    */
+  Json::Value settings_;
+
+  CharReaderBuilder();
+  ~CharReaderBuilder() JSONCPP_OVERRIDE;
+
+  CharReader* newCharReader() const JSONCPP_OVERRIDE;
+
+  /** \return true if 'settings' are legal and consistent;
+   *   otherwise, indicate bad settings via 'invalid'.
+   */
+  bool validate(Json::Value* invalid) const;
+
+  /** A simple way to update a specific setting.
+   */
+  Value& operator[](JSONCPP_STRING key);
+
+  /** Called by ctor, but you can use this to reset settings_.
+   * \pre 'settings' != NULL (but Json::null is fine)
+   * \remark Defaults:
+   * \snippet src/lib_json/json_reader.cpp CharReaderBuilderDefaults
+   */
+  static void setDefaults(Json::Value* settings);
+  /** Same as old Features::strictMode().
+   * \pre 'settings' != NULL (but Json::null is fine)
+   * \remark Defaults:
+   * \snippet src/lib_json/json_reader.cpp CharReaderBuilderStrictMode
+   */
+  static void strictMode(Json::Value* settings);
+};
+
+/** Consume entire stream and use its begin/end.
+  * Someday we might have a real StreamReader, but for now this
+  * is convenient.
+  */
+bool JSON_API parseFromStream(
+    CharReader::Factory const&,
+    JSONCPP_ISTREAM&,
+    Value* root, std::string* errs);
+
+/** \brief Read from 'sin' into 'root'.
+
+ Always keep comments from the input JSON.
+
+ This can be used to read a file into a particular sub-object.
+ For example:
+ \code
+ Json::Value root;
+ cin >> root["dir"]["file"];
+ cout << root;
+ \endcode
+ Result:
+ \verbatim
+ {
+ "dir": {
+     "file": {
+     // The input stream JSON would be nested here.
+     }
+ }
+ }
+ \endverbatim
+ \throw std::exception on parse error.
+ \see Json::operator<<()
+*/
+JSON_API JSONCPP_ISTREAM& operator>>(JSONCPP_ISTREAM&, Value&);
+
+} // namespace Json
+
+#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+#pragma warning(pop)
+#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+
+#endif // CPPTL_JSON_READER_H_INCLUDED
+
+// //////////////////////////////////////////////////////////////////////
+// End of content of file: include/json/reader.h
+// //////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+// //////////////////////////////////////////////////////////////////////
+// Beginning of content of file: include/json/writer.h
+// //////////////////////////////////////////////////////////////////////
+
+// Copyright 2007-2010 Baptiste Lepilleur
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#ifndef JSON_WRITER_H_INCLUDED
+#define JSON_WRITER_H_INCLUDED
+
+#if !defined(JSON_IS_AMALGAMATION)
+#include "value.h"
+#endif // if !defined(JSON_IS_AMALGAMATION)
+#include <vector>
+#include <string>
+#include <ostream>
+
+// Disable warning C4251: <data member>: <type> needs to have dll-interface to
+// be used by...
+#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+#pragma warning(push)
+#pragma warning(disable : 4251)
+#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+
+namespace Json {
+
+class Value;
+
+/**
+
+Usage:
+\code
+  using namespace Json;
+  void writeToStdout(StreamWriter::Factory const& factory, Value const& value) {
+    std::unique_ptr<StreamWriter> const writer(
+      factory.newStreamWriter());
+    writer->write(value, &std::cout);
+    std::cout << std::endl;  // add lf and flush
+  }
+\endcode
+*/
+class JSON_API StreamWriter {
+protected:
+  JSONCPP_OSTREAM* sout_;  // not owned; will not delete
+public:
+  StreamWriter();
+  virtual ~StreamWriter();
+  /** Write Value into document as configured in sub-class.
+      Do not take ownership of sout, but maintain a reference during function.
+      \pre sout != NULL
+      \return zero on success (For now, we always return zero, so check the stream instead.)
+      \throw std::exception possibly, depending on configuration
+   */
+  virtual int write(Value const& root, JSONCPP_OSTREAM* sout) = 0;
+
+  /** \brief A simple abstract factory.
+   */
+  class JSON_API Factory {
+  public:
+    virtual ~Factory();
+    /** \brief Allocate a CharReader via operator new().
+     * \throw std::exception if something goes wrong (e.g. invalid settings)
+     */
+    virtual StreamWriter* newStreamWriter() const = 0;
+  };  // Factory
+};  // StreamWriter
+
+/** \brief Write into stringstream, then return string, for convenience.
+ * A StreamWriter will be created from the factory, used, and then deleted.
+ */
+JSONCPP_STRING JSON_API writeString(StreamWriter::Factory const& factory, Value const& root);
+
+
+/** \brief Build a StreamWriter implementation.
+
+Usage:
+\code
+  using namespace Json;
+  Value value = ...;
+  StreamWriterBuilder builder;
+  builder["commentStyle"] = "None";
+  builder["indentation"] = "   ";  // or whatever you like
+  std::unique_ptr<Json::StreamWriter> writer(
+      builder.newStreamWriter());
+  writer->write(value, &std::cout);
+  std::cout << std::endl;  // add lf and flush
+\endcode
+*/
+class JSON_API StreamWriterBuilder : public StreamWriter::Factory {
+public:
+  // Note: We use a Json::Value so that we can add data-members to this class
+  // without a major version bump.
+  /** Configuration of this builder.
+    Available settings (case-sensitive):
+    - "commentStyle": "None" or "All"
+    - "indentation":  "<anything>"
+    - "enableYAMLCompatibility": false or true
+      - slightly change the whitespace around colons
+    - "dropNullPlaceholders": false or true
+      - Drop the "null" string from the writer's output for nullValues.
+        Strictly speaking, this is not valid JSON. But when the output is being
+        fed to a browser's Javascript, it makes for smaller output and the
+        browser can handle the output just fine.
+    - "useSpecialFloats": false or true
+      - If true, outputs non-finite floating point values in the following way:
+        NaN values as "NaN", positive infinity as "Infinity", and negative infinity
+        as "-Infinity".
+
+    You can examine 'settings_` yourself
+    to see the defaults. You can also write and read them just like any
+    JSON Value.
+    \sa setDefaults()
+    */
+  Json::Value settings_;
+
+  StreamWriterBuilder();
+  ~StreamWriterBuilder() JSONCPP_OVERRIDE;
+
+  /**
+   * \throw std::exception if something goes wrong (e.g. invalid settings)
+   */
+  StreamWriter* newStreamWriter() const JSONCPP_OVERRIDE;
+
+  /** \return true if 'settings' are legal and consistent;
+   *   otherwise, indicate bad settings via 'invalid'.
+   */
+  bool validate(Json::Value* invalid) const;
+  /** A simple way to update a specific setting.
+   */
+  Value& operator[](JSONCPP_STRING key);
+
+  /** Called by ctor, but you can use this to reset settings_.
+   * \pre 'settings' != NULL (but Json::null is fine)
+   * \remark Defaults:
+   * \snippet src/lib_json/json_writer.cpp StreamWriterBuilderDefaults
+   */
+  static void setDefaults(Json::Value* settings);
+};
+
+/** \brief Abstract class for writers.
+ * \deprecated Use StreamWriter. (And really, this is an implementation detail.)
+ */
+class JSON_API Writer {
+public:
+  virtual ~Writer();
+
+  virtual JSONCPP_STRING write(const Value& root) = 0;
+};
+
+/** \brief Outputs a Value in <a HREF="http://www.json.org">JSON</a> format
+ *without formatting (not human friendly).
+ *
+ * The JSON document is written in a single line. It is not intended for 'human'
+ *consumption,
+ * but may be usefull to support feature such as RPC where bandwith is limited.
+ * \sa Reader, Value
+ * \deprecated Use StreamWriterBuilder.
+ */
+class JSON_API FastWriter : public Writer {
+
+public:
+  FastWriter();
+  ~FastWriter() JSONCPP_OVERRIDE {}
+
+  void enableYAMLCompatibility();
+
+  /** \brief Drop the "null" string from the writer's output for nullValues.
+   * Strictly speaking, this is not valid JSON. But when the output is being
+   * fed to a browser's Javascript, it makes for smaller output and the
+   * browser can handle the output just fine.
+   */
+  void dropNullPlaceholders();
+
+  void omitEndingLineFeed();
+
+public: // overridden from Writer
+  JSONCPP_STRING write(const Value& root) JSONCPP_OVERRIDE;
+
+private:
+  void writeValue(const Value& value);
+
+  JSONCPP_STRING document_;
+  bool yamlCompatiblityEnabled_;
+  bool dropNullPlaceholders_;
+  bool omitEndingLineFeed_;
+};
+
+/** \brief Writes a Value in <a HREF="http://www.json.org">JSON</a> format in a
+ *human friendly way.
+ *
+ * The rules for line break and indent are as follow:
+ * - Object value:
+ *     - if empty then print {} without indent and line break
+ *     - if not empty the print '{', line break & indent, print one value per
+ *line
+ *       and then unindent and line break and print '}'.
+ * - Array value:
+ *     - if empty then print [] without indent and line break
+ *     - if the array contains no object value, empty array or some other value
+ *types,
+ *       and all the values fit on one lines, then print the array on a single
+ *line.
+ *     - otherwise, it the values do not fit on one line, or the array contains
+ *       object or non empty array, then print one value per line.
+ *
+ * If the Value have comments then they are outputed according to their
+ *#CommentPlacement.
+ *
+ * \sa Reader, Value, Value::setComment()
+ * \deprecated Use StreamWriterBuilder.
+ */
+class JSON_API StyledWriter : public Writer {
+public:
+  StyledWriter();
+  ~StyledWriter() JSONCPP_OVERRIDE {}
+
+public: // overridden from Writer
+  /** \brief Serialize a Value in <a HREF="http://www.json.org">JSON</a> format.
+   * \param root Value to serialize.
+   * \return String containing the JSON document that represents the root value.
+   */
+  JSONCPP_STRING write(const Value& root) JSONCPP_OVERRIDE;
+
+private:
+  void writeValue(const Value& value);
+  void writeArrayValue(const Value& value);
+  bool isMultineArray(const Value& value);
+  void pushValue(const JSONCPP_STRING& value);
+  void writeIndent();
+  void writeWithIndent(const JSONCPP_STRING& value);
+  void indent();
+  void unindent();
+  void writeCommentBeforeValue(const Value& root);
+  void writeCommentAfterValueOnSameLine(const Value& root);
+  bool hasCommentForValue(const Value& value);
+  static JSONCPP_STRING normalizeEOL(const JSONCPP_STRING& text);
+
+  typedef std::vector<JSONCPP_STRING> ChildValues;
+
+  ChildValues childValues_;
+  JSONCPP_STRING document_;
+  JSONCPP_STRING indentString_;
+  unsigned int rightMargin_;
+  unsigned int indentSize_;
+  bool addChildValues_;
+};
+
+/** \brief Writes a Value in <a HREF="http://www.json.org">JSON</a> format in a
+ human friendly way,
+     to a stream rather than to a string.
+ *
+ * The rules for line break and indent are as follow:
+ * - Object value:
+ *     - if empty then print {} without indent and line break
+ *     - if not empty the print '{', line break & indent, print one value per
+ line
+ *       and then unindent and line break and print '}'.
+ * - Array value:
+ *     - if empty then print [] without indent and line break
+ *     - if the array contains no object value, empty array or some other value
+ types,
+ *       and all the values fit on one lines, then print the array on a single
+ line.
+ *     - otherwise, it the values do not fit on one line, or the array contains
+ *       object or non empty array, then print one value per line.
+ *
+ * If the Value have comments then they are outputed according to their
+ #CommentPlacement.
+ *
+ * \param indentation Each level will be indented by this amount extra.
+ * \sa Reader, Value, Value::setComment()
+ * \deprecated Use StreamWriterBuilder.
+ */
+class JSON_API StyledStreamWriter {
+public:
+  StyledStreamWriter(JSONCPP_STRING indentation = "\t");
+  ~StyledStreamWriter() {}
+
+public:
+  /** \brief Serialize a Value in <a HREF="http://www.json.org">JSON</a> format.
+   * \param out Stream to write to. (Can be ostringstream, e.g.)
+   * \param root Value to serialize.
+   * \note There is no point in deriving from Writer, since write() should not
+   * return a value.
+   */
+  void write(JSONCPP_OSTREAM& out, const Value& root);
+
+private:
+  void writeValue(const Value& value);
+  void writeArrayValue(const Value& value);
+  bool isMultineArray(const Value& value);
+  void pushValue(const JSONCPP_STRING& value);
+  void writeIndent();
+  void writeWithIndent(const JSONCPP_STRING& value);
+  void indent();
+  void unindent();
+  void writeCommentBeforeValue(const Value& root);
+  void writeCommentAfterValueOnSameLine(const Value& root);
+  bool hasCommentForValue(const Value& value);
+  static JSONCPP_STRING normalizeEOL(const JSONCPP_STRING& text);
+
+  typedef std::vector<JSONCPP_STRING> ChildValues;
+
+  ChildValues childValues_;
+  JSONCPP_OSTREAM* document_;
+  JSONCPP_STRING indentString_;
+  unsigned int rightMargin_;
+  JSONCPP_STRING indentation_;
+  bool addChildValues_ : 1;
+  bool indented_ : 1;
+};
+
+#if defined(JSON_HAS_INT64)
+JSONCPP_STRING JSON_API valueToString(Int value);
+JSONCPP_STRING JSON_API valueToString(UInt value);
+#endif // if defined(JSON_HAS_INT64)
+JSONCPP_STRING JSON_API valueToString(LargestInt value);
+JSONCPP_STRING JSON_API valueToString(LargestUInt value);
+JSONCPP_STRING JSON_API valueToString(double value);
+JSONCPP_STRING JSON_API valueToString(bool value);
+JSONCPP_STRING JSON_API valueToQuotedString(const char* value);
+
+/// \brief Output using the StyledStreamWriter.
+/// \see Json::operator>>()
+JSON_API JSONCPP_OSTREAM& operator<<(JSONCPP_OSTREAM&, const Value& root);
+
+} // namespace Json
+
+#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+#pragma warning(pop)
+#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+
+#endif // JSON_WRITER_H_INCLUDED
+
+// //////////////////////////////////////////////////////////////////////
+// End of content of file: include/json/writer.h
+// //////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+// //////////////////////////////////////////////////////////////////////
+// Beginning of content of file: include/json/assertions.h
+// //////////////////////////////////////////////////////////////////////
+
+// Copyright 2007-2010 Baptiste Lepilleur
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#ifndef CPPTL_JSON_ASSERTIONS_H_INCLUDED
+#define CPPTL_JSON_ASSERTIONS_H_INCLUDED
+
+#include <stdlib.h>
+#include <sstream>
+
+#if !defined(JSON_IS_AMALGAMATION)
+#include "config.h"
+#endif // if !defined(JSON_IS_AMALGAMATION)
+
+/** It should not be possible for a maliciously designed file to
+ *  cause an abort() or seg-fault, so these macros are used only
+ *  for pre-condition violations and internal logic errors.
+ */
+#if JSON_USE_EXCEPTION
+
+// @todo <= add detail about condition in exception
+# define JSON_ASSERT(condition)                                                \
+  {if (!(condition)) {Json::throwLogicError( "assert json failed" );}}
+
+# define JSON_FAIL_MESSAGE(message)                                            \
+  {                                                                            \
+    JSONCPP_OSTRINGSTREAM oss; oss << message;                                    \
+    Json::throwLogicError(oss.str());                                          \
+    abort();                                                                   \
+  }
+
+#else // JSON_USE_EXCEPTION
+
+# define JSON_ASSERT(condition) assert(condition)
+
+// The call to assert() will show the failure message in debug builds. In
+// release builds we abort, for a core-dump or debugger.
+# define JSON_FAIL_MESSAGE(message)                                            \
+  {                                                                            \
+    JSONCPP_OSTRINGSTREAM oss; oss << message;                                    \
+    assert(false && oss.str().c_str());                                        \
+    abort();                                                                   \
+  }
+
+
+#endif
+
+#define JSON_ASSERT_MESSAGE(condition, message)                                \
+  if (!(condition)) {                                                          \
+    JSON_FAIL_MESSAGE(message);                                                \
+  }
+
+#endif // CPPTL_JSON_ASSERTIONS_H_INCLUDED
+
+// //////////////////////////////////////////////////////////////////////
+// End of content of file: include/json/assertions.h
+// //////////////////////////////////////////////////////////////////////
+
+
+
+
+
+#endif //ifndef JSON_AMALGATED_H_INCLUDED
diff --git a/gbtools/src/jsoncpp/Makefile.am b/gbtools/src/jsoncpp/Makefile.am
new file mode 100644
index 0000000..d5903cb
--- /dev/null
+++ b/gbtools/src/jsoncpp/Makefile.am
@@ -0,0 +1,15 @@
+
+include $(top_srcdir)/src/Makefile.am.common
+
+SUBDIRS = .
+
+noinst_LTLIBRARIES = libjsoncpp.la
+
+libjsoncpp_la_SOURCES = \
+jsoncpp.cpp \
+$(NULL) 
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/src/jsoncpp/Makefile.in
+
diff --git a/gbtools/src/jsoncpp/Makefile.in b/gbtools/src/jsoncpp/Makefile.in
new file mode 100644
index 0000000..1316242
--- /dev/null
+++ b/gbtools/src/jsoncpp/Makefile.in
@@ -0,0 +1,723 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 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@
+
+# Common includes for all compiles.....
+#
+
+VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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@
+DIST_COMMON = $(top_srcdir)/src/Makefile.am.common \
+	$(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+	$(top_srcdir)/config/depcomp
+subdir = src/jsoncpp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
+	$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+	$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+	$(top_srcdir)/./gbtools_version.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libjsoncpp_la_LIBADD =
+am_libjsoncpp_la_OBJECTS = jsoncpp.lo
+libjsoncpp_la_OBJECTS = $(am_libjsoncpp_la_OBJECTS)
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+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) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CXXFLAGS) $(CXXFLAGS)
+AM_V_CXX = $(am__v_CXX_ at AM_V@)
+am__v_CXX_ = $(am__v_CXX_ at AM_DEFAULT_V@)
+am__v_CXX_0 = @echo "  CXX     " $@;
+am__v_CXX_1 = 
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+	$(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CXXLD = $(am__v_CXXLD_ at AM_V@)
+am__v_CXXLD_ = $(am__v_CXXLD_ at AM_DEFAULT_V@)
+am__v_CXXLD_0 = @echo "  CXXLD   " $@;
+am__v_CXXLD_1 = 
+SOURCES = $(libjsoncpp_la_SOURCES)
+DIST_SOURCES = $(libjsoncpp_la_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-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 \
+	tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+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@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+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@
+DEPS_CFLAGS = @DEPS_CFLAGS@
+DEPS_LIBS = @DEPS_LIBS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+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@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_BLATSRC = @USE_BLATSRC@
+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@
+AM_CPPFLAGS = \
+$(DEPS_CFLAGS) \
+-I$(top_srcdir)/src/include \
+-I$(top_srcdir)/src/include/blatSrc
+
+AM_CXXFLAGS = -std=c++11 -g -Wall
+SUBDIRS = .
+noinst_LTLIBRARIES = libjsoncpp.la
+libjsoncpp_la_SOURCES = \
+jsoncpp.cpp \
+$(NULL) 
+
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/src/jsoncpp/Makefile.in
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .cpp .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(top_srcdir)/src/Makefile.am.common $(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 src/jsoncpp/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/jsoncpp/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_srcdir)/src/Makefile.am.common:
+
+$(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-noinstLTLIBRARIES:
+	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+	@list='$(noinst_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+
+libjsoncpp.la: $(libjsoncpp_la_OBJECTS) $(libjsoncpp_la_DEPENDENCIES) $(EXTRA_libjsoncpp_la_DEPENDENCIES) 
+	$(AM_V_CXXLD)$(CXXLINK)  $(libjsoncpp_la_OBJECTS) $(libjsoncpp_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/jsoncpp.Plo at am__quote@
+
+.cpp.o:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cpp.lo:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LTCXXCOMPILE) -c -o $@ $<
+
+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.
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	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"
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	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; \
+	$(am__define_uniq_tagged_files); \
+	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-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	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"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+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 \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    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 $(LTLIBRARIES)
+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:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+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."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile 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 -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+	check-am clean clean-generic clean-libtool \
+	clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am 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 \
+	installdirs-am maintainer-clean maintainer-clean-generic \
+	mostlyclean mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
+	uninstall-am
+
+
+# these don't work....or maybe they do...try again...???
+#libgbtools_la_CPPFLAGS =  $(DEPS_CFLAGS)
+#libgbtools_la_CXXFLAGS = -g  -Wall -std=c++0x
+
+# 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/gbtools/src/jsoncpp/jsoncpp.cpp b/gbtools/src/jsoncpp/jsoncpp.cpp
new file mode 100644
index 0000000..6fd52e9
--- /dev/null
+++ b/gbtools/src/jsoncpp/jsoncpp.cpp
@@ -0,0 +1,5247 @@
+/// Json-cpp amalgated source (http://jsoncpp.sourceforge.net/).
+/// It is intended to be used with #include "json/json.h"
+
+// //////////////////////////////////////////////////////////////////////
+// Beginning of content of file: LICENSE
+// //////////////////////////////////////////////////////////////////////
+
+/*
+The JsonCpp library's source code, including accompanying documentation, 
+tests and demonstration applications, are licensed under the following
+conditions...
+
+The author (Baptiste Lepilleur) explicitly disclaims copyright in all 
+jurisdictions which recognize such a disclaimer. In such jurisdictions, 
+this software is released into the Public Domain.
+
+In jurisdictions which do not recognize Public Domain property (e.g. Germany as of
+2010), this software is Copyright (c) 2007-2010 by Baptiste Lepilleur, and is
+released under the terms of the MIT License (see below).
+
+In jurisdictions which recognize Public Domain property, the user of this 
+software may choose to accept it either as 1) Public Domain, 2) under the 
+conditions of the MIT License (see below), or 3) under the terms of dual 
+Public Domain/MIT License conditions described here, as they choose.
+
+The MIT License is about as close to Public Domain as a license can get, and is
+described in clear, concise terms at:
+
+   http://en.wikipedia.org/wiki/MIT_License
+   
+The full text of the MIT License follows:
+
+========================================================================
+Copyright (c) 2007-2010 Baptiste Lepilleur
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use, copy,
+modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+========================================================================
+(END LICENSE TEXT)
+
+The MIT license is compatible with both the GPL and commercial
+software, affording one all of the rights of Public Domain with the
+minor nuisance of being required to keep the above copyright notice
+and license text in the source code. Note also that by accepting the
+Public Domain "license" you can re-license your copy using whatever
+license you like.
+
+*/
+
+// //////////////////////////////////////////////////////////////////////
+// End of content of file: LICENSE
+// //////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+#include "json/json.h"
+
+#ifndef JSON_IS_AMALGAMATION
+#error "Compile with -I PATH_TO_JSON_DIRECTORY"
+#endif
+
+
+// //////////////////////////////////////////////////////////////////////
+// Beginning of content of file: src/lib_json/json_tool.h
+// //////////////////////////////////////////////////////////////////////
+
+// Copyright 2007-2010 Baptiste Lepilleur
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#ifndef LIB_JSONCPP_JSON_TOOL_H_INCLUDED
+#define LIB_JSONCPP_JSON_TOOL_H_INCLUDED
+
+/* This header provides common string manipulation support, such as UTF-8,
+ * portable conversion from/to string...
+ *
+ * It is an internal header that must not be exposed.
+ */
+
+namespace Json {
+
+/// Converts a unicode code-point to UTF-8.
+static inline JSONCPP_STRING codePointToUTF8(unsigned int cp) {
+  JSONCPP_STRING result;
+
+  // based on description from http://en.wikipedia.org/wiki/UTF-8
+
+  if (cp <= 0x7f) {
+    result.resize(1);
+    result[0] = static_cast<char>(cp);
+  } else if (cp <= 0x7FF) {
+    result.resize(2);
+    result[1] = static_cast<char>(0x80 | (0x3f & cp));
+    result[0] = static_cast<char>(0xC0 | (0x1f & (cp >> 6)));
+  } else if (cp <= 0xFFFF) {
+    result.resize(3);
+    result[2] = static_cast<char>(0x80 | (0x3f & cp));
+    result[1] = static_cast<char>(0x80 | (0x3f & (cp >> 6)));
+    result[0] = static_cast<char>(0xE0 | (0xf & (cp >> 12)));
+  } else if (cp <= 0x10FFFF) {
+    result.resize(4);
+    result[3] = static_cast<char>(0x80 | (0x3f & cp));
+    result[2] = static_cast<char>(0x80 | (0x3f & (cp >> 6)));
+    result[1] = static_cast<char>(0x80 | (0x3f & (cp >> 12)));
+    result[0] = static_cast<char>(0xF0 | (0x7 & (cp >> 18)));
+  }
+
+  return result;
+}
+
+/// Returns true if ch is a control character (in range [1,31]).
+static inline bool isControlCharacter(char ch) { return ch > 0 && ch <= 0x1F; }
+
+enum {
+  /// Constant that specify the size of the buffer that must be passed to
+  /// uintToString.
+  uintToStringBufferSize = 3 * sizeof(LargestUInt) + 1
+};
+
+// Defines a char buffer for use with uintToString().
+typedef char UIntToStringBuffer[uintToStringBufferSize];
+
+/** Converts an unsigned integer to string.
+ * @param value Unsigned interger to convert to string
+ * @param current Input/Output string buffer.
+ *        Must have at least uintToStringBufferSize chars free.
+ */
+static inline void uintToString(LargestUInt value, char*& current) {
+  *--current = 0;
+  do {
+    *--current = static_cast<char>(value % 10U + static_cast<unsigned>('0'));
+    value /= 10;
+  } while (value != 0);
+}
+
+/** Change ',' to '.' everywhere in buffer.
+ *
+ * We had a sophisticated way, but it did not work in WinCE.
+ * @see https://github.com/open-source-parsers/jsoncpp/pull/9
+ */
+static inline void fixNumericLocale(char* begin, char* end) {
+  while (begin < end) {
+    if (*begin == ',') {
+      *begin = '.';
+    }
+    ++begin;
+  }
+}
+
+} // namespace Json {
+
+#endif // LIB_JSONCPP_JSON_TOOL_H_INCLUDED
+
+// //////////////////////////////////////////////////////////////////////
+// End of content of file: src/lib_json/json_tool.h
+// //////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+// //////////////////////////////////////////////////////////////////////
+// Beginning of content of file: src/lib_json/json_reader.cpp
+// //////////////////////////////////////////////////////////////////////
+
+// Copyright 2007-2011 Baptiste Lepilleur
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#if !defined(JSON_IS_AMALGAMATION)
+#include <json/assertions.h>
+#include <json/reader.h>
+#include <json/value.h>
+#include "json_tool.h"
+#endif // if !defined(JSON_IS_AMALGAMATION)
+#include <utility>
+#include <cstdio>
+#include <cassert>
+#include <cstring>
+#include <istream>
+#include <sstream>
+#include <memory>
+#include <set>
+#include <limits>
+
+#if defined(_MSC_VER)
+#if !defined(WINCE) && defined(__STDC_SECURE_LIB__) && _MSC_VER >= 1500 // VC++ 9.0 and above 
+#define snprintf sprintf_s
+#elif _MSC_VER >= 1900 // VC++ 14.0 and above
+#define snprintf std::snprintf
+#else
+#define snprintf _snprintf
+#endif
+#elif defined(__ANDROID__) || defined(__QNXNTO__)
+#define snprintf snprintf
+#elif __cplusplus >= 201103L
+#if !defined(__MINGW32__) && !defined(__CYGWIN__)
+#define snprintf std::snprintf
+#endif
+#endif
+
+#if defined(__QNXNTO__)
+#define sscanf std::sscanf
+#endif
+
+#if defined(_MSC_VER) && _MSC_VER >= 1400 // VC++ 8.0
+// Disable warning about strdup being deprecated.
+#pragma warning(disable : 4996)
+#endif
+
+static int const stackLimit_g = 1000;
+static int       stackDepth_g = 0;  // see readValue()
+
+namespace Json {
+
+#if __cplusplus >= 201103L || (defined(_CPPLIB_VER) && _CPPLIB_VER >= 520)
+typedef std::unique_ptr<CharReader> CharReaderPtr;
+#else
+typedef std::auto_ptr<CharReader>   CharReaderPtr;
+#endif
+
+// Implementation of class Features
+// ////////////////////////////////
+
+Features::Features()
+    : allowComments_(true), strictRoot_(false),
+      allowDroppedNullPlaceholders_(false), allowNumericKeys_(false) {}
+
+Features Features::all() { return Features(); }
+
+Features Features::strictMode() {
+  Features features;
+  features.allowComments_ = false;
+  features.strictRoot_ = true;
+  features.allowDroppedNullPlaceholders_ = false;
+  features.allowNumericKeys_ = false;
+  return features;
+}
+
+// Implementation of class Reader
+// ////////////////////////////////
+
+static bool containsNewLine(Reader::Location begin, Reader::Location end) {
+  for (; begin < end; ++begin)
+    if (*begin == '\n' || *begin == '\r')
+      return true;
+  return false;
+}
+
+// Class Reader
+// //////////////////////////////////////////////////////////////////
+
+Reader::Reader()
+    : errors_(), document_(), begin_(), end_(), current_(), lastValueEnd_(),
+      lastValue_(), commentsBefore_(), features_(Features::all()),
+      collectComments_() {}
+
+Reader::Reader(const Features& features)
+    : errors_(), document_(), begin_(), end_(), current_(), lastValueEnd_(),
+      lastValue_(), commentsBefore_(), features_(features), collectComments_() {
+}
+
+bool
+Reader::parse(const std::string& document, Value& root, bool collectComments) {
+  JSONCPP_STRING documentCopy(document.data(), document.data() + document.capacity());
+  std::swap(documentCopy, document_);
+  const char* begin = document_.c_str();
+  const char* end = begin + document_.length();
+  return parse(begin, end, root, collectComments);
+}
+
+bool Reader::parse(std::istream& sin, Value& root, bool collectComments) {
+  // std::istream_iterator<char> begin(sin);
+  // std::istream_iterator<char> end;
+  // Those would allow streamed input from a file, if parse() were a
+  // template function.
+
+  // Since JSONCPP_STRING is reference-counted, this at least does not
+  // create an extra copy.
+  JSONCPP_STRING doc;
+  std::getline(sin, doc, (char)EOF);
+  return parse(doc.data(), doc.data() + doc.size(), root, collectComments);
+}
+
+bool Reader::parse(const char* beginDoc,
+                   const char* endDoc,
+                   Value& root,
+                   bool collectComments) {
+  if (!features_.allowComments_) {
+    collectComments = false;
+  }
+
+  begin_ = beginDoc;
+  end_ = endDoc;
+  collectComments_ = collectComments;
+  current_ = begin_;
+  lastValueEnd_ = 0;
+  lastValue_ = 0;
+  commentsBefore_ = "";
+  errors_.clear();
+  while (!nodes_.empty())
+    nodes_.pop();
+  nodes_.push(&root);
+
+  stackDepth_g = 0;  // Yes, this is bad coding, but options are limited.
+  bool successful = readValue();
+  Token token;
+  skipCommentTokens(token);
+  if (collectComments_ && !commentsBefore_.empty())
+    root.setComment(commentsBefore_, commentAfter);
+  if (features_.strictRoot_) {
+    if (!root.isArray() && !root.isObject()) {
+      // Set error location to start of doc, ideally should be first token found
+      // in doc
+      token.type_ = tokenError;
+      token.start_ = beginDoc;
+      token.end_ = endDoc;
+      addError(
+          "A valid JSON document must be either an array or an object value.",
+          token);
+      return false;
+    }
+  }
+  return successful;
+}
+
+bool Reader::readValue() {
+  // This is a non-reentrant way to support a stackLimit. Terrible!
+  // But this deprecated class has a security problem: Bad input can
+  // cause a seg-fault. This seems like a fair, binary-compatible way
+  // to prevent the problem.
+  if (stackDepth_g >= stackLimit_g) throwRuntimeError("Exceeded stackLimit in readValue().");
+  ++stackDepth_g;
+
+  Token token;
+  skipCommentTokens(token);
+  bool successful = true;
+
+  if (collectComments_ && !commentsBefore_.empty()) {
+    currentValue().setComment(commentsBefore_, commentBefore);
+    commentsBefore_ = "";
+  }
+
+  switch (token.type_) {
+  case tokenObjectBegin:
+    successful = readObject(token);
+    currentValue().setOffsetLimit(current_ - begin_);
+    break;
+  case tokenArrayBegin:
+    successful = readArray(token);
+    currentValue().setOffsetLimit(current_ - begin_);
+    break;
+  case tokenNumber:
+    successful = decodeNumber(token);
+    break;
+  case tokenString:
+    successful = decodeString(token);
+    break;
+  case tokenTrue:
+    {
+    Value v(true);
+    currentValue().swapPayload(v);
+    currentValue().setOffsetStart(token.start_ - begin_);
+    currentValue().setOffsetLimit(token.end_ - begin_);
+    }
+    break;
+  case tokenFalse:
+    {
+    Value v(false);
+    currentValue().swapPayload(v);
+    currentValue().setOffsetStart(token.start_ - begin_);
+    currentValue().setOffsetLimit(token.end_ - begin_);
+    }
+    break;
+  case tokenNull:
+    {
+    Value v;
+    currentValue().swapPayload(v);
+    currentValue().setOffsetStart(token.start_ - begin_);
+    currentValue().setOffsetLimit(token.end_ - begin_);
+    }
+    break;
+  case tokenArraySeparator:
+  case tokenObjectEnd:
+  case tokenArrayEnd:
+    if (features_.allowDroppedNullPlaceholders_) {
+      // "Un-read" the current token and mark the current value as a null
+      // token.
+      current_--;
+      Value v;
+      currentValue().swapPayload(v);
+      currentValue().setOffsetStart(current_ - begin_ - 1);
+      currentValue().setOffsetLimit(current_ - begin_);
+      break;
+    } // Else, fall through...
+  default:
+    currentValue().setOffsetStart(token.start_ - begin_);
+    currentValue().setOffsetLimit(token.end_ - begin_);
+    return addError("Syntax error: value, object or array expected.", token);
+  }
+
+  if (collectComments_) {
+    lastValueEnd_ = current_;
+    lastValue_ = &currentValue();
+  }
+
+  --stackDepth_g;
+  return successful;
+}
+
+void Reader::skipCommentTokens(Token& token) {
+  if (features_.allowComments_) {
+    do {
+      readToken(token);
+    } while (token.type_ == tokenComment);
+  } else {
+    readToken(token);
+  }
+}
+
+bool Reader::readToken(Token& token) {
+  skipSpaces();
+  token.start_ = current_;
+  Char c = getNextChar();
+  bool ok = true;
+  switch (c) {
+  case '{':
+    token.type_ = tokenObjectBegin;
+    break;
+  case '}':
+    token.type_ = tokenObjectEnd;
+    break;
+  case '[':
+    token.type_ = tokenArrayBegin;
+    break;
+  case ']':
+    token.type_ = tokenArrayEnd;
+    break;
+  case '"':
+    token.type_ = tokenString;
+    ok = readString();
+    break;
+  case '/':
+    token.type_ = tokenComment;
+    ok = readComment();
+    break;
+  case '0':
+  case '1':
+  case '2':
+  case '3':
+  case '4':
+  case '5':
+  case '6':
+  case '7':
+  case '8':
+  case '9':
+  case '-':
+    token.type_ = tokenNumber;
+    readNumber();
+    break;
+  case 't':
+    token.type_ = tokenTrue;
+    ok = match("rue", 3);
+    break;
+  case 'f':
+    token.type_ = tokenFalse;
+    ok = match("alse", 4);
+    break;
+  case 'n':
+    token.type_ = tokenNull;
+    ok = match("ull", 3);
+    break;
+  case ',':
+    token.type_ = tokenArraySeparator;
+    break;
+  case ':':
+    token.type_ = tokenMemberSeparator;
+    break;
+  case 0:
+    token.type_ = tokenEndOfStream;
+    break;
+  default:
+    ok = false;
+    break;
+  }
+  if (!ok)
+    token.type_ = tokenError;
+  token.end_ = current_;
+  return true;
+}
+
+void Reader::skipSpaces() {
+  while (current_ != end_) {
+    Char c = *current_;
+    if (c == ' ' || c == '\t' || c == '\r' || c == '\n')
+      ++current_;
+    else
+      break;
+  }
+}
+
+bool Reader::match(Location pattern, int patternLength) {
+  if (end_ - current_ < patternLength)
+    return false;
+  int index = patternLength;
+  while (index--)
+    if (current_[index] != pattern[index])
+      return false;
+  current_ += patternLength;
+  return true;
+}
+
+bool Reader::readComment() {
+  Location commentBegin = current_ - 1;
+  Char c = getNextChar();
+  bool successful = false;
+  if (c == '*')
+    successful = readCStyleComment();
+  else if (c == '/')
+    successful = readCppStyleComment();
+  if (!successful)
+    return false;
+
+  if (collectComments_) {
+    CommentPlacement placement = commentBefore;
+    if (lastValueEnd_ && !containsNewLine(lastValueEnd_, commentBegin)) {
+      if (c != '*' || !containsNewLine(commentBegin, current_))
+        placement = commentAfterOnSameLine;
+    }
+
+    addComment(commentBegin, current_, placement);
+  }
+  return true;
+}
+
+static JSONCPP_STRING normalizeEOL(Reader::Location begin, Reader::Location end) {
+  JSONCPP_STRING normalized;
+  normalized.reserve(static_cast<size_t>(end - begin));
+  Reader::Location current = begin;
+  while (current != end) {
+    char c = *current++;
+    if (c == '\r') {
+      if (current != end && *current == '\n')
+         // convert dos EOL
+         ++current;
+      // convert Mac EOL
+      normalized += '\n';
+    } else {
+      normalized += c;
+    }
+  }
+  return normalized;
+}
+
+void
+Reader::addComment(Location begin, Location end, CommentPlacement placement) {
+  assert(collectComments_);
+  const JSONCPP_STRING& normalized = normalizeEOL(begin, end);
+  if (placement == commentAfterOnSameLine) {
+    assert(lastValue_ != 0);
+    lastValue_->setComment(normalized, placement);
+  } else {
+    commentsBefore_ += normalized;
+  }
+}
+
+bool Reader::readCStyleComment() {
+  while (current_ != end_) {
+    Char c = getNextChar();
+    if (c == '*' && *current_ == '/')
+      break;
+  }
+  return getNextChar() == '/';
+}
+
+bool Reader::readCppStyleComment() {
+  while (current_ != end_) {
+    Char c = getNextChar();
+    if (c == '\n')
+      break;
+    if (c == '\r') {
+      // Consume DOS EOL. It will be normalized in addComment.
+      if (current_ != end_ && *current_ == '\n')
+        getNextChar();
+      // Break on Moc OS 9 EOL.
+      break;
+    }
+  }
+  return true;
+}
+
+void Reader::readNumber() {
+  const char *p = current_;
+  char c = '0'; // stopgap for already consumed character
+  // integral part
+  while (c >= '0' && c <= '9')
+    c = (current_ = p) < end_ ? *p++ : 0;
+  // fractional part
+  if (c == '.') {
+    c = (current_ = p) < end_ ? *p++ : 0;
+    while (c >= '0' && c <= '9')
+      c = (current_ = p) < end_ ? *p++ : 0;
+  }
+  // exponential part
+  if (c == 'e' || c == 'E') {
+    c = (current_ = p) < end_ ? *p++ : 0;
+    if (c == '+' || c == '-')
+      c = (current_ = p) < end_ ? *p++ : 0;
+    while (c >= '0' && c <= '9')
+      c = (current_ = p) < end_ ? *p++ : 0;
+  }
+}
+
+bool Reader::readString() {
+  Char c = 0;
+  while (current_ != end_) {
+    c = getNextChar();
+    if (c == '\\')
+      getNextChar();
+    else if (c == '"')
+      break;
+  }
+  return c == '"';
+}
+
+bool Reader::readObject(Token& tokenStart) {
+  Token tokenName;
+  JSONCPP_STRING name;
+  Value init(objectValue);
+  currentValue().swapPayload(init);
+  currentValue().setOffsetStart(tokenStart.start_ - begin_);
+  while (readToken(tokenName)) {
+    bool initialTokenOk = true;
+    while (tokenName.type_ == tokenComment && initialTokenOk)
+      initialTokenOk = readToken(tokenName);
+    if (!initialTokenOk)
+      break;
+    if (tokenName.type_ == tokenObjectEnd && name.empty()) // empty object
+      return true;
+    name = "";
+    if (tokenName.type_ == tokenString) {
+      if (!decodeString(tokenName, name))
+        return recoverFromError(tokenObjectEnd);
+    } else if (tokenName.type_ == tokenNumber && features_.allowNumericKeys_) {
+      Value numberName;
+      if (!decodeNumber(tokenName, numberName))
+        return recoverFromError(tokenObjectEnd);
+      name = JSONCPP_STRING(numberName.asCString());
+    } else {
+      break;
+    }
+
+    Token colon;
+    if (!readToken(colon) || colon.type_ != tokenMemberSeparator) {
+      return addErrorAndRecover(
+          "Missing ':' after object member name", colon, tokenObjectEnd);
+    }
+    Value& value = currentValue()[name];
+    nodes_.push(&value);
+    bool ok = readValue();
+    nodes_.pop();
+    if (!ok) // error already set
+      return recoverFromError(tokenObjectEnd);
+
+    Token comma;
+    if (!readToken(comma) ||
+        (comma.type_ != tokenObjectEnd && comma.type_ != tokenArraySeparator &&
+         comma.type_ != tokenComment)) {
+      return addErrorAndRecover(
+          "Missing ',' or '}' in object declaration", comma, tokenObjectEnd);
+    }
+    bool finalizeTokenOk = true;
+    while (comma.type_ == tokenComment && finalizeTokenOk)
+      finalizeTokenOk = readToken(comma);
+    if (comma.type_ == tokenObjectEnd)
+      return true;
+  }
+  return addErrorAndRecover(
+      "Missing '}' or object member name", tokenName, tokenObjectEnd);
+}
+
+bool Reader::readArray(Token& tokenStart) {
+  Value init(arrayValue);
+  currentValue().swapPayload(init);
+  currentValue().setOffsetStart(tokenStart.start_ - begin_);
+  skipSpaces();
+  if (*current_ == ']') // empty array
+  {
+    Token endArray;
+    readToken(endArray);
+    return true;
+  }
+  int index = 0;
+  for (;;) {
+    Value& value = currentValue()[index++];
+    nodes_.push(&value);
+    bool ok = readValue();
+    nodes_.pop();
+    if (!ok) // error already set
+      return recoverFromError(tokenArrayEnd);
+
+    Token token;
+    // Accept Comment after last item in the array.
+    ok = readToken(token);
+    while (token.type_ == tokenComment && ok) {
+      ok = readToken(token);
+    }
+    bool badTokenType =
+        (token.type_ != tokenArraySeparator && token.type_ != tokenArrayEnd);
+    if (!ok || badTokenType) {
+      return addErrorAndRecover(
+          "Missing ',' or ']' in array declaration", token, tokenArrayEnd);
+    }
+    if (token.type_ == tokenArrayEnd)
+      break;
+  }
+  return true;
+}
+
+bool Reader::decodeNumber(Token& token) {
+  Value decoded;
+  if (!decodeNumber(token, decoded))
+    return false;
+  currentValue().swapPayload(decoded);
+  currentValue().setOffsetStart(token.start_ - begin_);
+  currentValue().setOffsetLimit(token.end_ - begin_);
+  return true;
+}
+
+bool Reader::decodeNumber(Token& token, Value& decoded) {
+  // Attempts to parse the number as an integer. If the number is
+  // larger than the maximum supported value of an integer then
+  // we decode the number as a double.
+  Location current = token.start_;
+  bool isNegative = *current == '-';
+  if (isNegative)
+    ++current;
+  // TODO: Help the compiler do the div and mod at compile time or get rid of them.
+  Value::LargestUInt maxIntegerValue =
+      isNegative ? Value::LargestUInt(Value::maxLargestInt) + 1
+                 : Value::maxLargestUInt;
+  Value::LargestUInt threshold = maxIntegerValue / 10;
+  Value::LargestUInt value = 0;
+  while (current < token.end_) {
+    Char c = *current++;
+    if (c < '0' || c > '9')
+      return decodeDouble(token, decoded);
+    Value::UInt digit(static_cast<Value::UInt>(c - '0'));
+    if (value >= threshold) {
+      // We've hit or exceeded the max value divided by 10 (rounded down). If
+      // a) we've only just touched the limit, b) this is the last digit, and
+      // c) it's small enough to fit in that rounding delta, we're okay.
+      // Otherwise treat this number as a double to avoid overflow.
+      if (value > threshold || current != token.end_ ||
+          digit > maxIntegerValue % 10) {
+        return decodeDouble(token, decoded);
+      }
+    }
+    value = value * 10 + digit;
+  }
+  if (isNegative && value == maxIntegerValue)
+    decoded = Value::minLargestInt;
+  else if (isNegative)
+    decoded = -Value::LargestInt(value);
+  else if (value <= Value::LargestUInt(Value::maxInt))
+    decoded = Value::LargestInt(value);
+  else
+    decoded = value;
+  return true;
+}
+
+bool Reader::decodeDouble(Token& token) {
+  Value decoded;
+  if (!decodeDouble(token, decoded))
+    return false;
+  currentValue().swapPayload(decoded);
+  currentValue().setOffsetStart(token.start_ - begin_);
+  currentValue().setOffsetLimit(token.end_ - begin_);
+  return true;
+}
+
+bool Reader::decodeDouble(Token& token, Value& decoded) {
+  double value = 0;
+  JSONCPP_STRING buffer(token.start_, token.end_);
+  JSONCPP_ISTRINGSTREAM is(buffer);
+  if (!(is >> value))
+    return addError("'" + JSONCPP_STRING(token.start_, token.end_) +
+                        "' is not a number.",
+                    token);
+  decoded = value;
+  return true;
+}
+
+bool Reader::decodeString(Token& token) {
+  JSONCPP_STRING decoded_string;
+  if (!decodeString(token, decoded_string))
+    return false;
+  Value decoded(decoded_string);
+  currentValue().swapPayload(decoded);
+  currentValue().setOffsetStart(token.start_ - begin_);
+  currentValue().setOffsetLimit(token.end_ - begin_);
+  return true;
+}
+
+bool Reader::decodeString(Token& token, JSONCPP_STRING& decoded) {
+  decoded.reserve(static_cast<size_t>(token.end_ - token.start_ - 2));
+  Location current = token.start_ + 1; // skip '"'
+  Location end = token.end_ - 1;       // do not include '"'
+  while (current != end) {
+    Char c = *current++;
+    if (c == '"')
+      break;
+    else if (c == '\\') {
+      if (current == end)
+        return addError("Empty escape sequence in string", token, current);
+      Char escape = *current++;
+      switch (escape) {
+      case '"':
+        decoded += '"';
+        break;
+      case '/':
+        decoded += '/';
+        break;
+      case '\\':
+        decoded += '\\';
+        break;
+      case 'b':
+        decoded += '\b';
+        break;
+      case 'f':
+        decoded += '\f';
+        break;
+      case 'n':
+        decoded += '\n';
+        break;
+      case 'r':
+        decoded += '\r';
+        break;
+      case 't':
+        decoded += '\t';
+        break;
+      case 'u': {
+        unsigned int unicode;
+        if (!decodeUnicodeCodePoint(token, current, end, unicode))
+          return false;
+        decoded += codePointToUTF8(unicode);
+      } break;
+      default:
+        return addError("Bad escape sequence in string", token, current);
+      }
+    } else {
+      decoded += c;
+    }
+  }
+  return true;
+}
+
+bool Reader::decodeUnicodeCodePoint(Token& token,
+                                    Location& current,
+                                    Location end,
+                                    unsigned int& unicode) {
+
+  if (!decodeUnicodeEscapeSequence(token, current, end, unicode))
+    return false;
+  if (unicode >= 0xD800 && unicode <= 0xDBFF) {
+    // surrogate pairs
+    if (end - current < 6)
+      return addError(
+          "additional six characters expected to parse unicode surrogate pair.",
+          token,
+          current);
+    unsigned int surrogatePair;
+    if (*(current++) == '\\' && *(current++) == 'u') {
+      if (decodeUnicodeEscapeSequence(token, current, end, surrogatePair)) {
+        unicode = 0x10000 + ((unicode & 0x3FF) << 10) + (surrogatePair & 0x3FF);
+      } else
+        return false;
+    } else
+      return addError("expecting another \\u token to begin the second half of "
+                      "a unicode surrogate pair",
+                      token,
+                      current);
+  }
+  return true;
+}
+
+bool Reader::decodeUnicodeEscapeSequence(Token& token,
+                                         Location& current,
+                                         Location end,
+                                         unsigned int& ret_unicode) {
+  if (end - current < 4)
+    return addError(
+        "Bad unicode escape sequence in string: four digits expected.",
+        token,
+        current);
+  int unicode = 0;
+  for (int index = 0; index < 4; ++index) {
+    Char c = *current++;
+    unicode *= 16;
+    if (c >= '0' && c <= '9')
+      unicode += c - '0';
+    else if (c >= 'a' && c <= 'f')
+      unicode += c - 'a' + 10;
+    else if (c >= 'A' && c <= 'F')
+      unicode += c - 'A' + 10;
+    else
+      return addError(
+          "Bad unicode escape sequence in string: hexadecimal digit expected.",
+          token,
+          current);
+  }
+  ret_unicode = static_cast<unsigned int>(unicode);
+  return true;
+}
+
+bool
+Reader::addError(const JSONCPP_STRING& message, Token& token, Location extra) {
+  ErrorInfo info;
+  info.token_ = token;
+  info.message_ = message;
+  info.extra_ = extra;
+  errors_.push_back(info);
+  return false;
+}
+
+bool Reader::recoverFromError(TokenType skipUntilToken) {
+  size_t const errorCount = errors_.size();
+  Token skip;
+  for (;;) {
+    if (!readToken(skip))
+      errors_.resize(errorCount); // discard errors caused by recovery
+    if (skip.type_ == skipUntilToken || skip.type_ == tokenEndOfStream)
+      break;
+  }
+  errors_.resize(errorCount);
+  return false;
+}
+
+bool Reader::addErrorAndRecover(const JSONCPP_STRING& message,
+                                Token& token,
+                                TokenType skipUntilToken) {
+  addError(message, token);
+  return recoverFromError(skipUntilToken);
+}
+
+Value& Reader::currentValue() { return *(nodes_.top()); }
+
+Reader::Char Reader::getNextChar() {
+  if (current_ == end_)
+    return 0;
+  return *current_++;
+}
+
+void Reader::getLocationLineAndColumn(Location location,
+                                      int& line,
+                                      int& column) const {
+  Location current = begin_;
+  Location lastLineStart = current;
+  line = 0;
+  while (current < location && current != end_) {
+    Char c = *current++;
+    if (c == '\r') {
+      if (*current == '\n')
+        ++current;
+      lastLineStart = current;
+      ++line;
+    } else if (c == '\n') {
+      lastLineStart = current;
+      ++line;
+    }
+  }
+  // column & line start at 1
+  column = int(location - lastLineStart) + 1;
+  ++line;
+}
+
+JSONCPP_STRING Reader::getLocationLineAndColumn(Location location) const {
+  int line, column;
+  getLocationLineAndColumn(location, line, column);
+  char buffer[18 + 16 + 16 + 1];
+  snprintf(buffer, sizeof(buffer), "Line %d, Column %d", line, column);
+  return buffer;
+}
+
+// Deprecated. Preserved for backward compatibility
+JSONCPP_STRING Reader::getFormatedErrorMessages() const {
+  return getFormattedErrorMessages();
+}
+
+JSONCPP_STRING Reader::getFormattedErrorMessages() const {
+  JSONCPP_STRING formattedMessage;
+  for (Errors::const_iterator itError = errors_.begin();
+       itError != errors_.end();
+       ++itError) {
+    const ErrorInfo& error = *itError;
+    formattedMessage +=
+        "* " + getLocationLineAndColumn(error.token_.start_) + "\n";
+    formattedMessage += "  " + error.message_ + "\n";
+    if (error.extra_)
+      formattedMessage +=
+          "See " + getLocationLineAndColumn(error.extra_) + " for detail.\n";
+  }
+  return formattedMessage;
+}
+
+std::vector<Reader::StructuredError> Reader::getStructuredErrors() const {
+  std::vector<Reader::StructuredError> allErrors;
+  for (Errors::const_iterator itError = errors_.begin();
+       itError != errors_.end();
+       ++itError) {
+    const ErrorInfo& error = *itError;
+    Reader::StructuredError structured;
+    structured.offset_start = error.token_.start_ - begin_;
+    structured.offset_limit = error.token_.end_ - begin_;
+    structured.message = error.message_;
+    allErrors.push_back(structured);
+  }
+  return allErrors;
+}
+
+bool Reader::pushError(const Value& value, const JSONCPP_STRING& message) {
+  ptrdiff_t const length = end_ - begin_;
+  if(value.getOffsetStart() > length
+    || value.getOffsetLimit() > length)
+    return false;
+  Token token;
+  token.type_ = tokenError;
+  token.start_ = begin_ + value.getOffsetStart();
+  token.end_ = end_ + value.getOffsetLimit();
+  ErrorInfo info;
+  info.token_ = token;
+  info.message_ = message;
+  info.extra_ = 0;
+  errors_.push_back(info);
+  return true;
+}
+
+bool Reader::pushError(const Value& value, const JSONCPP_STRING& message, const Value& extra) {
+  ptrdiff_t const length = end_ - begin_;
+  if(value.getOffsetStart() > length
+    || value.getOffsetLimit() > length
+    || extra.getOffsetLimit() > length)
+    return false;
+  Token token;
+  token.type_ = tokenError;
+  token.start_ = begin_ + value.getOffsetStart();
+  token.end_ = begin_ + value.getOffsetLimit();
+  ErrorInfo info;
+  info.token_ = token;
+  info.message_ = message;
+  info.extra_ = begin_ + extra.getOffsetStart();
+  errors_.push_back(info);
+  return true;
+}
+
+bool Reader::good() const {
+  return !errors_.size();
+}
+
+// exact copy of Features
+class OurFeatures {
+public:
+  static OurFeatures all();
+  bool allowComments_;
+  bool strictRoot_;
+  bool allowDroppedNullPlaceholders_;
+  bool allowNumericKeys_;
+  bool allowSingleQuotes_;
+  bool failIfExtra_;
+  bool rejectDupKeys_;
+  bool allowSpecialFloats_;
+  int stackLimit_;
+};  // OurFeatures
+
+// exact copy of Implementation of class Features
+// ////////////////////////////////
+
+OurFeatures OurFeatures::all() { return OurFeatures(); }
+
+// Implementation of class Reader
+// ////////////////////////////////
+
+// exact copy of Reader, renamed to OurReader
+class OurReader {
+public:
+  typedef char Char;
+  typedef const Char* Location;
+  struct StructuredError {
+    ptrdiff_t offset_start;
+    ptrdiff_t offset_limit;
+    JSONCPP_STRING message;
+  };
+
+  OurReader(OurFeatures const& features);
+  bool parse(const char* beginDoc,
+             const char* endDoc,
+             Value& root,
+             bool collectComments = true);
+  JSONCPP_STRING getFormattedErrorMessages() const;
+  std::vector<StructuredError> getStructuredErrors() const;
+  bool pushError(const Value& value, const JSONCPP_STRING& message);
+  bool pushError(const Value& value, const JSONCPP_STRING& message, const Value& extra);
+  bool good() const;
+
+private:
+  OurReader(OurReader const&);  // no impl
+  void operator=(OurReader const&);  // no impl
+
+  enum TokenType {
+    tokenEndOfStream = 0,
+    tokenObjectBegin,
+    tokenObjectEnd,
+    tokenArrayBegin,
+    tokenArrayEnd,
+    tokenString,
+    tokenNumber,
+    tokenTrue,
+    tokenFalse,
+    tokenNull,
+    tokenNaN,
+    tokenPosInf,
+    tokenNegInf,
+    tokenArraySeparator,
+    tokenMemberSeparator,
+    tokenComment,
+    tokenError
+  };
+
+  class Token {
+  public:
+    TokenType type_;
+    Location start_;
+    Location end_;
+  };
+
+  class ErrorInfo {
+  public:
+    Token token_;
+    JSONCPP_STRING message_;
+    Location extra_;
+  };
+
+  typedef std::deque<ErrorInfo> Errors;
+
+  bool readToken(Token& token);
+  void skipSpaces();
+  bool match(Location pattern, int patternLength);
+  bool readComment();
+  bool readCStyleComment();
+  bool readCppStyleComment();
+  bool readString();
+  bool readStringSingleQuote();
+  bool readNumber(bool checkInf);
+  bool readValue();
+  bool readObject(Token& token);
+  bool readArray(Token& token);
+  bool decodeNumber(Token& token);
+  bool decodeNumber(Token& token, Value& decoded);
+  bool decodeString(Token& token);
+  bool decodeString(Token& token, JSONCPP_STRING& decoded);
+  bool decodeDouble(Token& token);
+  bool decodeDouble(Token& token, Value& decoded);
+  bool decodeUnicodeCodePoint(Token& token,
+                              Location& current,
+                              Location end,
+                              unsigned int& unicode);
+  bool decodeUnicodeEscapeSequence(Token& token,
+                                   Location& current,
+                                   Location end,
+                                   unsigned int& unicode);
+  bool addError(const JSONCPP_STRING& message, Token& token, Location extra = 0);
+  bool recoverFromError(TokenType skipUntilToken);
+  bool addErrorAndRecover(const JSONCPP_STRING& message,
+                          Token& token,
+                          TokenType skipUntilToken);
+  void skipUntilSpace();
+  Value& currentValue();
+  Char getNextChar();
+  void
+  getLocationLineAndColumn(Location location, int& line, int& column) const;
+  JSONCPP_STRING getLocationLineAndColumn(Location location) const;
+  void addComment(Location begin, Location end, CommentPlacement placement);
+  void skipCommentTokens(Token& token);
+
+  typedef std::stack<Value*> Nodes;
+  Nodes nodes_;
+  Errors errors_;
+  JSONCPP_STRING document_;
+  Location begin_;
+  Location end_;
+  Location current_;
+  Location lastValueEnd_;
+  Value* lastValue_;
+  JSONCPP_STRING commentsBefore_;
+  int stackDepth_;
+
+  OurFeatures const features_;
+  bool collectComments_;
+};  // OurReader
+
+// complete copy of Read impl, for OurReader
+
+OurReader::OurReader(OurFeatures const& features)
+    : errors_(), document_(), begin_(), end_(), current_(), lastValueEnd_(),
+      lastValue_(), commentsBefore_(),
+      stackDepth_(0),
+      features_(features), collectComments_() {
+}
+
+bool OurReader::parse(const char* beginDoc,
+                   const char* endDoc,
+                   Value& root,
+                   bool collectComments) {
+  if (!features_.allowComments_) {
+    collectComments = false;
+  }
+
+  begin_ = beginDoc;
+  end_ = endDoc;
+  collectComments_ = collectComments;
+  current_ = begin_;
+  lastValueEnd_ = 0;
+  lastValue_ = 0;
+  commentsBefore_ = "";
+  errors_.clear();
+  while (!nodes_.empty())
+    nodes_.pop();
+  nodes_.push(&root);
+
+  stackDepth_ = 0;
+  bool successful = readValue();
+  Token token;
+  skipCommentTokens(token);
+  if (features_.failIfExtra_) {
+    if (token.type_ != tokenError && token.type_ != tokenEndOfStream) {
+      addError("Extra non-whitespace after JSON value.", token);
+      return false;
+    }
+  }
+  if (collectComments_ && !commentsBefore_.empty())
+    root.setComment(commentsBefore_, commentAfter);
+  if (features_.strictRoot_) {
+    if (!root.isArray() && !root.isObject()) {
+      // Set error location to start of doc, ideally should be first token found
+      // in doc
+      token.type_ = tokenError;
+      token.start_ = beginDoc;
+      token.end_ = endDoc;
+      addError(
+          "A valid JSON document must be either an array or an object value.",
+          token);
+      return false;
+    }
+  }
+  return successful;
+}
+
+bool OurReader::readValue() {
+  if (stackDepth_ >= features_.stackLimit_) throwRuntimeError("Exceeded stackLimit in readValue().");
+  ++stackDepth_;
+  Token token;
+  skipCommentTokens(token);
+  bool successful = true;
+
+  if (collectComments_ && !commentsBefore_.empty()) {
+    currentValue().setComment(commentsBefore_, commentBefore);
+    commentsBefore_ = "";
+  }
+
+  switch (token.type_) {
+  case tokenObjectBegin:
+    successful = readObject(token);
+    currentValue().setOffsetLimit(current_ - begin_);
+    break;
+  case tokenArrayBegin:
+    successful = readArray(token);
+    currentValue().setOffsetLimit(current_ - begin_);
+    break;
+  case tokenNumber:
+    successful = decodeNumber(token);
+    break;
+  case tokenString:
+    successful = decodeString(token);
+    break;
+  case tokenTrue:
+    {
+    Value v(true);
+    currentValue().swapPayload(v);
+    currentValue().setOffsetStart(token.start_ - begin_);
+    currentValue().setOffsetLimit(token.end_ - begin_);
+    }
+    break;
+  case tokenFalse:
+    {
+    Value v(false);
+    currentValue().swapPayload(v);
+    currentValue().setOffsetStart(token.start_ - begin_);
+    currentValue().setOffsetLimit(token.end_ - begin_);
+    }
+    break;
+  case tokenNull:
+    {
+    Value v;
+    currentValue().swapPayload(v);
+    currentValue().setOffsetStart(token.start_ - begin_);
+    currentValue().setOffsetLimit(token.end_ - begin_);
+    }
+    break;
+  case tokenNaN:
+    {
+    Value v(std::numeric_limits<double>::quiet_NaN());
+    currentValue().swapPayload(v);
+    currentValue().setOffsetStart(token.start_ - begin_);
+    currentValue().setOffsetLimit(token.end_ - begin_);
+    }
+    break;
+  case tokenPosInf:
+    {
+    Value v(std::numeric_limits<double>::infinity());
+    currentValue().swapPayload(v);
+    currentValue().setOffsetStart(token.start_ - begin_);
+    currentValue().setOffsetLimit(token.end_ - begin_);
+    }
+    break;
+  case tokenNegInf:
+    {
+    Value v(-std::numeric_limits<double>::infinity());
+    currentValue().swapPayload(v);
+    currentValue().setOffsetStart(token.start_ - begin_);
+    currentValue().setOffsetLimit(token.end_ - begin_);
+    }
+    break;
+  case tokenArraySeparator:
+  case tokenObjectEnd:
+  case tokenArrayEnd:
+    if (features_.allowDroppedNullPlaceholders_) {
+      // "Un-read" the current token and mark the current value as a null
+      // token.
+      current_--;
+      Value v;
+      currentValue().swapPayload(v);
+      currentValue().setOffsetStart(current_ - begin_ - 1);
+      currentValue().setOffsetLimit(current_ - begin_);
+      break;
+    } // else, fall through ...
+  default:
+    currentValue().setOffsetStart(token.start_ - begin_);
+    currentValue().setOffsetLimit(token.end_ - begin_);
+    return addError("Syntax error: value, object or array expected.", token);
+  }
+
+  if (collectComments_) {
+    lastValueEnd_ = current_;
+    lastValue_ = &currentValue();
+  }
+
+  --stackDepth_;
+  return successful;
+}
+
+void OurReader::skipCommentTokens(Token& token) {
+  if (features_.allowComments_) {
+    do {
+      readToken(token);
+    } while (token.type_ == tokenComment);
+  } else {
+    readToken(token);
+  }
+}
+
+bool OurReader::readToken(Token& token) {
+  skipSpaces();
+  token.start_ = current_;
+  Char c = getNextChar();
+  bool ok = true;
+  switch (c) {
+  case '{':
+    token.type_ = tokenObjectBegin;
+    break;
+  case '}':
+    token.type_ = tokenObjectEnd;
+    break;
+  case '[':
+    token.type_ = tokenArrayBegin;
+    break;
+  case ']':
+    token.type_ = tokenArrayEnd;
+    break;
+  case '"':
+    token.type_ = tokenString;
+    ok = readString();
+    break;
+  case '\'':
+    if (features_.allowSingleQuotes_) {
+    token.type_ = tokenString;
+    ok = readStringSingleQuote();
+    break;
+    } // else continue
+  case '/':
+    token.type_ = tokenComment;
+    ok = readComment();
+    break;
+  case '0':
+  case '1':
+  case '2':
+  case '3':
+  case '4':
+  case '5':
+  case '6':
+  case '7':
+  case '8':
+  case '9':
+    token.type_ = tokenNumber;
+    readNumber(false);
+    break;
+  case '-':
+    if (readNumber(true)) {
+      token.type_ = tokenNumber;
+    } else {
+      token.type_ = tokenNegInf;
+      ok = features_.allowSpecialFloats_ && match("nfinity", 7);
+    }
+    break;
+  case 't':
+    token.type_ = tokenTrue;
+    ok = match("rue", 3);
+    break;
+  case 'f':
+    token.type_ = tokenFalse;
+    ok = match("alse", 4);
+    break;
+  case 'n':
+    token.type_ = tokenNull;
+    ok = match("ull", 3);
+    break;
+  case 'N':
+    if (features_.allowSpecialFloats_) {
+      token.type_ = tokenNaN;
+      ok = match("aN", 2);
+    } else {
+      ok = false;
+    }
+    break;
+  case 'I':
+    if (features_.allowSpecialFloats_) {
+      token.type_ = tokenPosInf;
+      ok = match("nfinity", 7);
+    } else {
+      ok = false;
+    }
+    break;
+  case ',':
+    token.type_ = tokenArraySeparator;
+    break;
+  case ':':
+    token.type_ = tokenMemberSeparator;
+    break;
+  case 0:
+    token.type_ = tokenEndOfStream;
+    break;
+  default:
+    ok = false;
+    break;
+  }
+  if (!ok)
+    token.type_ = tokenError;
+  token.end_ = current_;
+  return true;
+}
+
+void OurReader::skipSpaces() {
+  while (current_ != end_) {
+    Char c = *current_;
+    if (c == ' ' || c == '\t' || c == '\r' || c == '\n')
+      ++current_;
+    else
+      break;
+  }
+}
+
+bool OurReader::match(Location pattern, int patternLength) {
+  if (end_ - current_ < patternLength)
+    return false;
+  int index = patternLength;
+  while (index--)
+    if (current_[index] != pattern[index])
+      return false;
+  current_ += patternLength;
+  return true;
+}
+
+bool OurReader::readComment() {
+  Location commentBegin = current_ - 1;
+  Char c = getNextChar();
+  bool successful = false;
+  if (c == '*')
+    successful = readCStyleComment();
+  else if (c == '/')
+    successful = readCppStyleComment();
+  if (!successful)
+    return false;
+
+  if (collectComments_) {
+    CommentPlacement placement = commentBefore;
+    if (lastValueEnd_ && !containsNewLine(lastValueEnd_, commentBegin)) {
+      if (c != '*' || !containsNewLine(commentBegin, current_))
+        placement = commentAfterOnSameLine;
+    }
+
+    addComment(commentBegin, current_, placement);
+  }
+  return true;
+}
+
+void
+OurReader::addComment(Location begin, Location end, CommentPlacement placement) {
+  assert(collectComments_);
+  const JSONCPP_STRING& normalized = normalizeEOL(begin, end);
+  if (placement == commentAfterOnSameLine) {
+    assert(lastValue_ != 0);
+    lastValue_->setComment(normalized, placement);
+  } else {
+    commentsBefore_ += normalized;
+  }
+}
+
+bool OurReader::readCStyleComment() {
+  while (current_ != end_) {
+    Char c = getNextChar();
+    if (c == '*' && *current_ == '/')
+      break;
+  }
+  return getNextChar() == '/';
+}
+
+bool OurReader::readCppStyleComment() {
+  while (current_ != end_) {
+    Char c = getNextChar();
+    if (c == '\n')
+      break;
+    if (c == '\r') {
+      // Consume DOS EOL. It will be normalized in addComment.
+      if (current_ != end_ && *current_ == '\n')
+        getNextChar();
+      // Break on Moc OS 9 EOL.
+      break;
+    }
+  }
+  return true;
+}
+
+bool OurReader::readNumber(bool checkInf) {
+  const char *p = current_;
+  if (checkInf && p != end_ && *p == 'I') {
+    current_ = ++p;
+    return false;
+  }
+  char c = '0'; // stopgap for already consumed character
+  // integral part
+  while (c >= '0' && c <= '9')
+    c = (current_ = p) < end_ ? *p++ : 0;
+  // fractional part
+  if (c == '.') {
+    c = (current_ = p) < end_ ? *p++ : 0;
+    while (c >= '0' && c <= '9')
+      c = (current_ = p) < end_ ? *p++ : 0;
+  }
+  // exponential part
+  if (c == 'e' || c == 'E') {
+    c = (current_ = p) < end_ ? *p++ : 0;
+    if (c == '+' || c == '-')
+      c = (current_ = p) < end_ ? *p++ : 0;
+    while (c >= '0' && c <= '9')
+      c = (current_ = p) < end_ ? *p++ : 0;
+  }
+  return true;
+}
+bool OurReader::readString() {
+  Char c = 0;
+  while (current_ != end_) {
+    c = getNextChar();
+    if (c == '\\')
+      getNextChar();
+    else if (c == '"')
+      break;
+  }
+  return c == '"';
+}
+
+
+bool OurReader::readStringSingleQuote() {
+  Char c = 0;
+  while (current_ != end_) {
+    c = getNextChar();
+    if (c == '\\')
+      getNextChar();
+    else if (c == '\'')
+      break;
+  }
+  return c == '\'';
+}
+
+bool OurReader::readObject(Token& tokenStart) {
+  Token tokenName;
+  JSONCPP_STRING name;
+  Value init(objectValue);
+  currentValue().swapPayload(init);
+  currentValue().setOffsetStart(tokenStart.start_ - begin_);
+  while (readToken(tokenName)) {
+    bool initialTokenOk = true;
+    while (tokenName.type_ == tokenComment && initialTokenOk)
+      initialTokenOk = readToken(tokenName);
+    if (!initialTokenOk)
+      break;
+    if (tokenName.type_ == tokenObjectEnd && name.empty()) // empty object
+      return true;
+    name = "";
+    if (tokenName.type_ == tokenString) {
+      if (!decodeString(tokenName, name))
+        return recoverFromError(tokenObjectEnd);
+    } else if (tokenName.type_ == tokenNumber && features_.allowNumericKeys_) {
+      Value numberName;
+      if (!decodeNumber(tokenName, numberName))
+        return recoverFromError(tokenObjectEnd);
+      name = numberName.asString();
+    } else {
+      break;
+    }
+
+    Token colon;
+    if (!readToken(colon) || colon.type_ != tokenMemberSeparator) {
+      return addErrorAndRecover(
+          "Missing ':' after object member name", colon, tokenObjectEnd);
+    }
+    if (name.length() >= (1U<<30)) throwRuntimeError("keylength >= 2^30");
+    if (features_.rejectDupKeys_ && currentValue().isMember(name)) {
+      JSONCPP_STRING msg = "Duplicate key: '" + name + "'";
+      return addErrorAndRecover(
+          msg, tokenName, tokenObjectEnd);
+    }
+    Value& value = currentValue()[name];
+    nodes_.push(&value);
+    bool ok = readValue();
+    nodes_.pop();
+    if (!ok) // error already set
+      return recoverFromError(tokenObjectEnd);
+
+    Token comma;
+    if (!readToken(comma) ||
+        (comma.type_ != tokenObjectEnd && comma.type_ != tokenArraySeparator &&
+         comma.type_ != tokenComment)) {
+      return addErrorAndRecover(
+          "Missing ',' or '}' in object declaration", comma, tokenObjectEnd);
+    }
+    bool finalizeTokenOk = true;
+    while (comma.type_ == tokenComment && finalizeTokenOk)
+      finalizeTokenOk = readToken(comma);
+    if (comma.type_ == tokenObjectEnd)
+      return true;
+  }
+  return addErrorAndRecover(
+      "Missing '}' or object member name", tokenName, tokenObjectEnd);
+}
+
+bool OurReader::readArray(Token& tokenStart) {
+  Value init(arrayValue);
+  currentValue().swapPayload(init);
+  currentValue().setOffsetStart(tokenStart.start_ - begin_);
+  skipSpaces();
+  if (*current_ == ']') // empty array
+  {
+    Token endArray;
+    readToken(endArray);
+    return true;
+  }
+  int index = 0;
+  for (;;) {
+    Value& value = currentValue()[index++];
+    nodes_.push(&value);
+    bool ok = readValue();
+    nodes_.pop();
+    if (!ok) // error already set
+      return recoverFromError(tokenArrayEnd);
+
+    Token token;
+    // Accept Comment after last item in the array.
+    ok = readToken(token);
+    while (token.type_ == tokenComment && ok) {
+      ok = readToken(token);
+    }
+    bool badTokenType =
+        (token.type_ != tokenArraySeparator && token.type_ != tokenArrayEnd);
+    if (!ok || badTokenType) {
+      return addErrorAndRecover(
+          "Missing ',' or ']' in array declaration", token, tokenArrayEnd);
+    }
+    if (token.type_ == tokenArrayEnd)
+      break;
+  }
+  return true;
+}
+
+bool OurReader::decodeNumber(Token& token) {
+  Value decoded;
+  if (!decodeNumber(token, decoded))
+    return false;
+  currentValue().swapPayload(decoded);
+  currentValue().setOffsetStart(token.start_ - begin_);
+  currentValue().setOffsetLimit(token.end_ - begin_);
+  return true;
+}
+
+bool OurReader::decodeNumber(Token& token, Value& decoded) {
+  // Attempts to parse the number as an integer. If the number is
+  // larger than the maximum supported value of an integer then
+  // we decode the number as a double.
+  Location current = token.start_;
+  bool isNegative = *current == '-';
+  if (isNegative)
+    ++current;
+  // TODO: Help the compiler do the div and mod at compile time or get rid of them.
+  Value::LargestUInt maxIntegerValue =
+      isNegative ? Value::LargestUInt(-Value::minLargestInt)
+                 : Value::maxLargestUInt;
+  Value::LargestUInt threshold = maxIntegerValue / 10;
+  Value::LargestUInt value = 0;
+  while (current < token.end_) {
+    Char c = *current++;
+    if (c < '0' || c > '9')
+      return decodeDouble(token, decoded);
+    Value::UInt digit(static_cast<Value::UInt>(c - '0'));
+    if (value >= threshold) {
+      // We've hit or exceeded the max value divided by 10 (rounded down). If
+      // a) we've only just touched the limit, b) this is the last digit, and
+      // c) it's small enough to fit in that rounding delta, we're okay.
+      // Otherwise treat this number as a double to avoid overflow.
+      if (value > threshold || current != token.end_ ||
+          digit > maxIntegerValue % 10) {
+        return decodeDouble(token, decoded);
+      }
+    }
+    value = value * 10 + digit;
+  }
+  if (isNegative)
+    decoded = -Value::LargestInt(value);
+  else if (value <= Value::LargestUInt(Value::maxInt))
+    decoded = Value::LargestInt(value);
+  else
+    decoded = value;
+  return true;
+}
+
+bool OurReader::decodeDouble(Token& token) {
+  Value decoded;
+  if (!decodeDouble(token, decoded))
+    return false;
+  currentValue().swapPayload(decoded);
+  currentValue().setOffsetStart(token.start_ - begin_);
+  currentValue().setOffsetLimit(token.end_ - begin_);
+  return true;
+}
+
+bool OurReader::decodeDouble(Token& token, Value& decoded) {
+  double value = 0;
+  const int bufferSize = 32;
+  int count;
+  ptrdiff_t const length = token.end_ - token.start_;
+
+  // Sanity check to avoid buffer overflow exploits.
+  if (length < 0) {
+    return addError("Unable to parse token length", token);
+  }
+  size_t const ulength = static_cast<size_t>(length);
+
+  // Avoid using a string constant for the format control string given to
+  // sscanf, as this can cause hard to debug crashes on OS X. See here for more
+  // info:
+  //
+  //     http://developer.apple.com/library/mac/#DOCUMENTATION/DeveloperTools/gcc-4.0.1/gcc/Incompatibilities.html
+  char format[] = "%lf";
+
+  if (length <= bufferSize) {
+    Char buffer[bufferSize + 1];
+    memcpy(buffer, token.start_, ulength);
+    buffer[length] = 0;
+    count = sscanf(buffer, format, &value);
+  } else {
+    JSONCPP_STRING buffer(token.start_, token.end_);
+    count = sscanf(buffer.c_str(), format, &value);
+  }
+
+  if (count != 1)
+    return addError("'" + JSONCPP_STRING(token.start_, token.end_) +
+                        "' is not a number.",
+                    token);
+  decoded = value;
+  return true;
+}
+
+bool OurReader::decodeString(Token& token) {
+  JSONCPP_STRING decoded_string;
+  if (!decodeString(token, decoded_string))
+    return false;
+  Value decoded(decoded_string);
+  currentValue().swapPayload(decoded);
+  currentValue().setOffsetStart(token.start_ - begin_);
+  currentValue().setOffsetLimit(token.end_ - begin_);
+  return true;
+}
+
+bool OurReader::decodeString(Token& token, JSONCPP_STRING& decoded) {
+  decoded.reserve(static_cast<size_t>(token.end_ - token.start_ - 2));
+  Location current = token.start_ + 1; // skip '"'
+  Location end = token.end_ - 1;       // do not include '"'
+  while (current != end) {
+    Char c = *current++;
+    if (c == '"')
+      break;
+    else if (c == '\\') {
+      if (current == end)
+        return addError("Empty escape sequence in string", token, current);
+      Char escape = *current++;
+      switch (escape) {
+      case '"':
+        decoded += '"';
+        break;
+      case '/':
+        decoded += '/';
+        break;
+      case '\\':
+        decoded += '\\';
+        break;
+      case 'b':
+        decoded += '\b';
+        break;
+      case 'f':
+        decoded += '\f';
+        break;
+      case 'n':
+        decoded += '\n';
+        break;
+      case 'r':
+        decoded += '\r';
+        break;
+      case 't':
+        decoded += '\t';
+        break;
+      case 'u': {
+        unsigned int unicode;
+        if (!decodeUnicodeCodePoint(token, current, end, unicode))
+          return false;
+        decoded += codePointToUTF8(unicode);
+      } break;
+      default:
+        return addError("Bad escape sequence in string", token, current);
+      }
+    } else {
+      decoded += c;
+    }
+  }
+  return true;
+}
+
+bool OurReader::decodeUnicodeCodePoint(Token& token,
+                                    Location& current,
+                                    Location end,
+                                    unsigned int& unicode) {
+
+  if (!decodeUnicodeEscapeSequence(token, current, end, unicode))
+    return false;
+  if (unicode >= 0xD800 && unicode <= 0xDBFF) {
+    // surrogate pairs
+    if (end - current < 6)
+      return addError(
+          "additional six characters expected to parse unicode surrogate pair.",
+          token,
+          current);
+    unsigned int surrogatePair;
+    if (*(current++) == '\\' && *(current++) == 'u') {
+      if (decodeUnicodeEscapeSequence(token, current, end, surrogatePair)) {
+        unicode = 0x10000 + ((unicode & 0x3FF) << 10) + (surrogatePair & 0x3FF);
+      } else
+        return false;
+    } else
+      return addError("expecting another \\u token to begin the second half of "
+                      "a unicode surrogate pair",
+                      token,
+                      current);
+  }
+  return true;
+}
+
+bool OurReader::decodeUnicodeEscapeSequence(Token& token,
+                                         Location& current,
+                                         Location end,
+                                         unsigned int& ret_unicode) {
+  if (end - current < 4)
+    return addError(
+        "Bad unicode escape sequence in string: four digits expected.",
+        token,
+        current);
+  int unicode = 0;
+  for (int index = 0; index < 4; ++index) {
+    Char c = *current++;
+    unicode *= 16;
+    if (c >= '0' && c <= '9')
+      unicode += c - '0';
+    else if (c >= 'a' && c <= 'f')
+      unicode += c - 'a' + 10;
+    else if (c >= 'A' && c <= 'F')
+      unicode += c - 'A' + 10;
+    else
+      return addError(
+          "Bad unicode escape sequence in string: hexadecimal digit expected.",
+          token,
+          current);
+  }
+  ret_unicode = static_cast<unsigned int>(unicode);
+  return true;
+}
+
+bool
+OurReader::addError(const JSONCPP_STRING& message, Token& token, Location extra) {
+  ErrorInfo info;
+  info.token_ = token;
+  info.message_ = message;
+  info.extra_ = extra;
+  errors_.push_back(info);
+  return false;
+}
+
+bool OurReader::recoverFromError(TokenType skipUntilToken) {
+  size_t errorCount = errors_.size();
+  Token skip;
+  for (;;) {
+    if (!readToken(skip))
+      errors_.resize(errorCount); // discard errors caused by recovery
+    if (skip.type_ == skipUntilToken || skip.type_ == tokenEndOfStream)
+      break;
+  }
+  errors_.resize(errorCount);
+  return false;
+}
+
+bool OurReader::addErrorAndRecover(const JSONCPP_STRING& message,
+                                Token& token,
+                                TokenType skipUntilToken) {
+  addError(message, token);
+  return recoverFromError(skipUntilToken);
+}
+
+Value& OurReader::currentValue() { return *(nodes_.top()); }
+
+OurReader::Char OurReader::getNextChar() {
+  if (current_ == end_)
+    return 0;
+  return *current_++;
+}
+
+void OurReader::getLocationLineAndColumn(Location location,
+                                      int& line,
+                                      int& column) const {
+  Location current = begin_;
+  Location lastLineStart = current;
+  line = 0;
+  while (current < location && current != end_) {
+    Char c = *current++;
+    if (c == '\r') {
+      if (*current == '\n')
+        ++current;
+      lastLineStart = current;
+      ++line;
+    } else if (c == '\n') {
+      lastLineStart = current;
+      ++line;
+    }
+  }
+  // column & line start at 1
+  column = int(location - lastLineStart) + 1;
+  ++line;
+}
+
+JSONCPP_STRING OurReader::getLocationLineAndColumn(Location location) const {
+  int line, column;
+  getLocationLineAndColumn(location, line, column);
+  char buffer[18 + 16 + 16 + 1];
+  snprintf(buffer, sizeof(buffer), "Line %d, Column %d", line, column);
+  return buffer;
+}
+
+JSONCPP_STRING OurReader::getFormattedErrorMessages() const {
+  JSONCPP_STRING formattedMessage;
+  for (Errors::const_iterator itError = errors_.begin();
+       itError != errors_.end();
+       ++itError) {
+    const ErrorInfo& error = *itError;
+    formattedMessage +=
+        "* " + getLocationLineAndColumn(error.token_.start_) + "\n";
+    formattedMessage += "  " + error.message_ + "\n";
+    if (error.extra_)
+      formattedMessage +=
+          "See " + getLocationLineAndColumn(error.extra_) + " for detail.\n";
+  }
+  return formattedMessage;
+}
+
+std::vector<OurReader::StructuredError> OurReader::getStructuredErrors() const {
+  std::vector<OurReader::StructuredError> allErrors;
+  for (Errors::const_iterator itError = errors_.begin();
+       itError != errors_.end();
+       ++itError) {
+    const ErrorInfo& error = *itError;
+    OurReader::StructuredError structured;
+    structured.offset_start = error.token_.start_ - begin_;
+    structured.offset_limit = error.token_.end_ - begin_;
+    structured.message = error.message_;
+    allErrors.push_back(structured);
+  }
+  return allErrors;
+}
+
+bool OurReader::pushError(const Value& value, const JSONCPP_STRING& message) {
+  ptrdiff_t length = end_ - begin_;
+  if(value.getOffsetStart() > length
+    || value.getOffsetLimit() > length)
+    return false;
+  Token token;
+  token.type_ = tokenError;
+  token.start_ = begin_ + value.getOffsetStart();
+  token.end_ = end_ + value.getOffsetLimit();
+  ErrorInfo info;
+  info.token_ = token;
+  info.message_ = message;
+  info.extra_ = 0;
+  errors_.push_back(info);
+  return true;
+}
+
+bool OurReader::pushError(const Value& value, const JSONCPP_STRING& message, const Value& extra) {
+  ptrdiff_t length = end_ - begin_;
+  if(value.getOffsetStart() > length
+    || value.getOffsetLimit() > length
+    || extra.getOffsetLimit() > length)
+    return false;
+  Token token;
+  token.type_ = tokenError;
+  token.start_ = begin_ + value.getOffsetStart();
+  token.end_ = begin_ + value.getOffsetLimit();
+  ErrorInfo info;
+  info.token_ = token;
+  info.message_ = message;
+  info.extra_ = begin_ + extra.getOffsetStart();
+  errors_.push_back(info);
+  return true;
+}
+
+bool OurReader::good() const {
+  return !errors_.size();
+}
+
+
+class OurCharReader : public CharReader {
+  bool const collectComments_;
+  OurReader reader_;
+public:
+  OurCharReader(
+    bool collectComments,
+    OurFeatures const& features)
+  : collectComments_(collectComments)
+  , reader_(features)
+  {}
+  bool parse(
+      char const* beginDoc, char const* endDoc,
+      Value* root, JSONCPP_STRING* errs) JSONCPP_OVERRIDE {
+    bool ok = reader_.parse(beginDoc, endDoc, *root, collectComments_);
+    if (errs) {
+      *errs = reader_.getFormattedErrorMessages();
+    }
+    return ok;
+  }
+};
+
+CharReaderBuilder::CharReaderBuilder()
+{
+  setDefaults(&settings_);
+}
+CharReaderBuilder::~CharReaderBuilder()
+{}
+CharReader* CharReaderBuilder::newCharReader() const
+{
+  bool collectComments = settings_["collectComments"].asBool();
+  OurFeatures features = OurFeatures::all();
+  features.allowComments_ = settings_["allowComments"].asBool();
+  features.strictRoot_ = settings_["strictRoot"].asBool();
+  features.allowDroppedNullPlaceholders_ = settings_["allowDroppedNullPlaceholders"].asBool();
+  features.allowNumericKeys_ = settings_["allowNumericKeys"].asBool();
+  features.allowSingleQuotes_ = settings_["allowSingleQuotes"].asBool();
+  features.stackLimit_ = settings_["stackLimit"].asInt();
+  features.failIfExtra_ = settings_["failIfExtra"].asBool();
+  features.rejectDupKeys_ = settings_["rejectDupKeys"].asBool();
+  features.allowSpecialFloats_ = settings_["allowSpecialFloats"].asBool();
+  return new OurCharReader(collectComments, features);
+}
+static void getValidReaderKeys(std::set<JSONCPP_STRING>* valid_keys)
+{
+  valid_keys->clear();
+  valid_keys->insert("collectComments");
+  valid_keys->insert("allowComments");
+  valid_keys->insert("strictRoot");
+  valid_keys->insert("allowDroppedNullPlaceholders");
+  valid_keys->insert("allowNumericKeys");
+  valid_keys->insert("allowSingleQuotes");
+  valid_keys->insert("stackLimit");
+  valid_keys->insert("failIfExtra");
+  valid_keys->insert("rejectDupKeys");
+  valid_keys->insert("allowSpecialFloats");
+}
+bool CharReaderBuilder::validate(Json::Value* invalid) const
+{
+  Json::Value my_invalid;
+  if (!invalid) invalid = &my_invalid;  // so we do not need to test for NULL
+  Json::Value& inv = *invalid;
+  std::set<JSONCPP_STRING> valid_keys;
+  getValidReaderKeys(&valid_keys);
+  Value::Members keys = settings_.getMemberNames();
+  size_t n = keys.size();
+  for (size_t i = 0; i < n; ++i) {
+    JSONCPP_STRING const& key = keys[i];
+    if (valid_keys.find(key) == valid_keys.end()) {
+      inv[key] = settings_[key];
+    }
+  }
+  return 0u == inv.size();
+}
+Value& CharReaderBuilder::operator[](JSONCPP_STRING key)
+{
+  return settings_[key];
+}
+// static
+void CharReaderBuilder::strictMode(Json::Value* settings)
+{
+//! [CharReaderBuilderStrictMode]
+  (*settings)["allowComments"] = false;
+  (*settings)["strictRoot"] = true;
+  (*settings)["allowDroppedNullPlaceholders"] = false;
+  (*settings)["allowNumericKeys"] = false;
+  (*settings)["allowSingleQuotes"] = false;
+  (*settings)["stackLimit"] = 1000;
+  (*settings)["failIfExtra"] = true;
+  (*settings)["rejectDupKeys"] = true;
+  (*settings)["allowSpecialFloats"] = false;
+//! [CharReaderBuilderStrictMode]
+}
+// static
+void CharReaderBuilder::setDefaults(Json::Value* settings)
+{
+//! [CharReaderBuilderDefaults]
+  (*settings)["collectComments"] = true;
+  (*settings)["allowComments"] = true;
+  (*settings)["strictRoot"] = false;
+  (*settings)["allowDroppedNullPlaceholders"] = false;
+  (*settings)["allowNumericKeys"] = false;
+  (*settings)["allowSingleQuotes"] = false;
+  (*settings)["stackLimit"] = 1000;
+  (*settings)["failIfExtra"] = false;
+  (*settings)["rejectDupKeys"] = false;
+  (*settings)["allowSpecialFloats"] = false;
+//! [CharReaderBuilderDefaults]
+}
+
+//////////////////////////////////
+// global functions
+
+bool parseFromStream(
+    CharReader::Factory const& fact, JSONCPP_ISTREAM& sin,
+    Value* root, JSONCPP_STRING* errs)
+{
+  JSONCPP_OSTRINGSTREAM ssin;
+  ssin << sin.rdbuf();
+  JSONCPP_STRING doc = ssin.str();
+  char const* begin = doc.data();
+  char const* end = begin + doc.size();
+  // Note that we do not actually need a null-terminator.
+  CharReaderPtr const reader(fact.newCharReader());
+  return reader->parse(begin, end, root, errs);
+}
+
+JSONCPP_ISTREAM& operator>>(JSONCPP_ISTREAM& sin, Value& root) {
+  CharReaderBuilder b;
+  JSONCPP_STRING errs;
+  bool ok = parseFromStream(b, sin, &root, &errs);
+  if (!ok) {
+    fprintf(stderr,
+            "Error from reader: %s",
+            errs.c_str());
+
+    throwRuntimeError(errs);
+  }
+  return sin;
+}
+
+} // namespace Json
+
+// //////////////////////////////////////////////////////////////////////
+// End of content of file: src/lib_json/json_reader.cpp
+// //////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+// //////////////////////////////////////////////////////////////////////
+// Beginning of content of file: src/lib_json/json_valueiterator.inl
+// //////////////////////////////////////////////////////////////////////
+
+// Copyright 2007-2010 Baptiste Lepilleur
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+// included by json_value.cpp
+
+namespace Json {
+
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// class ValueIteratorBase
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+
+ValueIteratorBase::ValueIteratorBase()
+    : current_(), isNull_(true) {
+}
+
+ValueIteratorBase::ValueIteratorBase(
+    const Value::ObjectValues::iterator& current)
+    : current_(current), isNull_(false) {}
+
+Value& ValueIteratorBase::deref() const {
+  return current_->second;
+}
+
+void ValueIteratorBase::increment() {
+  ++current_;
+}
+
+void ValueIteratorBase::decrement() {
+  --current_;
+}
+
+ValueIteratorBase::difference_type
+ValueIteratorBase::computeDistance(const SelfType& other) const {
+#ifdef JSON_USE_CPPTL_SMALLMAP
+  return other.current_ - current_;
+#else
+  // Iterator for null value are initialized using the default
+  // constructor, which initialize current_ to the default
+  // std::map::iterator. As begin() and end() are two instance
+  // of the default std::map::iterator, they can not be compared.
+  // To allow this, we handle this comparison specifically.
+  if (isNull_ && other.isNull_) {
+    return 0;
+  }
+
+  // Usage of std::distance is not portable (does not compile with Sun Studio 12
+  // RogueWave STL,
+  // which is the one used by default).
+  // Using a portable hand-made version for non random iterator instead:
+  //   return difference_type( std::distance( current_, other.current_ ) );
+  difference_type myDistance = 0;
+  for (Value::ObjectValues::iterator it = current_; it != other.current_;
+       ++it) {
+    ++myDistance;
+  }
+  return myDistance;
+#endif
+}
+
+bool ValueIteratorBase::isEqual(const SelfType& other) const {
+  if (isNull_) {
+    return other.isNull_;
+  }
+  return current_ == other.current_;
+}
+
+void ValueIteratorBase::copy(const SelfType& other) {
+  current_ = other.current_;
+  isNull_ = other.isNull_;
+}
+
+Value ValueIteratorBase::key() const {
+  const Value::CZString czstring = (*current_).first;
+  if (czstring.data()) {
+    if (czstring.isStaticString())
+      return Value(StaticString(czstring.data()));
+    return Value(czstring.data(), czstring.data() + czstring.length());
+  }
+  return Value(czstring.index());
+}
+
+UInt ValueIteratorBase::index() const {
+  const Value::CZString czstring = (*current_).first;
+  if (!czstring.data())
+    return czstring.index();
+  return Value::UInt(-1);
+}
+
+JSONCPP_STRING ValueIteratorBase::name() const {
+  char const* keey;
+  char const* end;
+  keey = memberName(&end);
+  if (!keey) return JSONCPP_STRING();
+  return JSONCPP_STRING(keey, end);
+}
+
+char const* ValueIteratorBase::memberName() const {
+  const char* cname = (*current_).first.data();
+  return cname ? cname : "";
+}
+
+char const* ValueIteratorBase::memberName(char const** end) const {
+  const char* cname = (*current_).first.data();
+  if (!cname) {
+    *end = NULL;
+    return NULL;
+  }
+  *end = cname + (*current_).first.length();
+  return cname;
+}
+
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// class ValueConstIterator
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+
+ValueConstIterator::ValueConstIterator() {}
+
+ValueConstIterator::ValueConstIterator(
+    const Value::ObjectValues::iterator& current)
+    : ValueIteratorBase(current) {}
+
+ValueConstIterator::ValueConstIterator(ValueIterator const& other)
+    : ValueIteratorBase(other) {}
+
+ValueConstIterator& ValueConstIterator::
+operator=(const ValueIteratorBase& other) {
+  copy(other);
+  return *this;
+}
+
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// class ValueIterator
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+
+ValueIterator::ValueIterator() {}
+
+ValueIterator::ValueIterator(const Value::ObjectValues::iterator& current)
+    : ValueIteratorBase(current) {}
+
+ValueIterator::ValueIterator(const ValueConstIterator& other)
+    : ValueIteratorBase(other) {
+  throwRuntimeError("ConstIterator to Iterator should never be allowed.");
+}
+
+ValueIterator::ValueIterator(const ValueIterator& other)
+    : ValueIteratorBase(other) {}
+
+ValueIterator& ValueIterator::operator=(const SelfType& other) {
+  copy(other);
+  return *this;
+}
+
+} // namespace Json
+
+// //////////////////////////////////////////////////////////////////////
+// End of content of file: src/lib_json/json_valueiterator.inl
+// //////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+// //////////////////////////////////////////////////////////////////////
+// Beginning of content of file: src/lib_json/json_value.cpp
+// //////////////////////////////////////////////////////////////////////
+
+// Copyright 2011 Baptiste Lepilleur
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#if !defined(JSON_IS_AMALGAMATION)
+#include <json/assertions.h>
+#include <json/value.h>
+#include <json/writer.h>
+#endif // if !defined(JSON_IS_AMALGAMATION)
+#include <math.h>
+#include <sstream>
+#include <utility>
+#include <cstring>
+#include <cassert>
+#ifdef JSON_USE_CPPTL
+#include <cpptl/conststring.h>
+#endif
+#include <cstddef> // size_t
+#include <algorithm> // min()
+
+#define JSON_ASSERT_UNREACHABLE assert(false)
+
+namespace Json {
+
+// This is a walkaround to avoid the static initialization of Value::null.
+// kNull must be word-aligned to avoid crashing on ARM.  We use an alignment of
+// 8 (instead of 4) as a bit of future-proofing.
+#if defined(__ARMEL__)
+#define ALIGNAS(byte_alignment) __attribute__((aligned(byte_alignment)))
+#else
+#define ALIGNAS(byte_alignment)
+#endif
+static const unsigned char ALIGNAS(8) kNull[sizeof(Value)] = { 0 };
+const unsigned char& kNullRef = kNull[0];
+const Value& Value::null = reinterpret_cast<const Value&>(kNullRef);
+const Value& Value::nullRef = null;
+
+const Int Value::minInt = Int(~(UInt(-1) / 2));
+const Int Value::maxInt = Int(UInt(-1) / 2);
+const UInt Value::maxUInt = UInt(-1);
+#if defined(JSON_HAS_INT64)
+const Int64 Value::minInt64 = Int64(~(UInt64(-1) / 2));
+const Int64 Value::maxInt64 = Int64(UInt64(-1) / 2);
+const UInt64 Value::maxUInt64 = UInt64(-1);
+// The constant is hard-coded because some compiler have trouble
+// converting Value::maxUInt64 to a double correctly (AIX/xlC).
+// Assumes that UInt64 is a 64 bits integer.
+static const double maxUInt64AsDouble = 18446744073709551615.0;
+#endif // defined(JSON_HAS_INT64)
+const LargestInt Value::minLargestInt = LargestInt(~(LargestUInt(-1) / 2));
+const LargestInt Value::maxLargestInt = LargestInt(LargestUInt(-1) / 2);
+const LargestUInt Value::maxLargestUInt = LargestUInt(-1);
+
+#if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
+template <typename T, typename U>
+static inline bool InRange(double d, T min, U max) {
+  // The casts can lose precision, but we are looking only for
+  // an approximate range. Might fail on edge cases though. ~cdunn
+  //return d >= static_cast<double>(min) && d <= static_cast<double>(max);
+  return d >= min && d <= max;
+}
+#else  // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
+static inline double integerToDouble(Json::UInt64 value) {
+  return static_cast<double>(Int64(value / 2)) * 2.0 + static_cast<double>(Int64(value & 1));
+}
+
+template <typename T> static inline double integerToDouble(T value) {
+  return static_cast<double>(value);
+}
+
+template <typename T, typename U>
+static inline bool InRange(double d, T min, U max) {
+  return d >= integerToDouble(min) && d <= integerToDouble(max);
+}
+#endif // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
+
+/** Duplicates the specified string value.
+ * @param value Pointer to the string to duplicate. Must be zero-terminated if
+ *              length is "unknown".
+ * @param length Length of the value. if equals to unknown, then it will be
+ *               computed using strlen(value).
+ * @return Pointer on the duplicate instance of string.
+ */
+static inline char* duplicateStringValue(const char* value,
+                                         size_t length)
+{
+  // Avoid an integer overflow in the call to malloc below by limiting length
+  // to a sane value.
+  if (length >= static_cast<size_t>(Value::maxInt))
+    length = Value::maxInt - 1;
+
+  char* newString = static_cast<char*>(malloc(length + 1));
+  if (newString == NULL) {
+    throwRuntimeError(
+        "in Json::Value::duplicateStringValue(): "
+        "Failed to allocate string value buffer");
+  }
+  memcpy(newString, value, length);
+  newString[length] = 0;
+  return newString;
+}
+
+/* Record the length as a prefix.
+ */
+static inline char* duplicateAndPrefixStringValue(
+    const char* value,
+    unsigned int length)
+{
+  // Avoid an integer overflow in the call to malloc below by limiting length
+  // to a sane value.
+  JSON_ASSERT_MESSAGE(length <= static_cast<unsigned>(Value::maxInt) - sizeof(unsigned) - 1U,
+                      "in Json::Value::duplicateAndPrefixStringValue(): "
+                      "length too big for prefixing");
+  unsigned actualLength = length + static_cast<unsigned>(sizeof(unsigned)) + 1U;
+  char* newString = static_cast<char*>(malloc(actualLength));
+  if (newString == 0) {
+    throwRuntimeError(
+        "in Json::Value::duplicateAndPrefixStringValue(): "
+        "Failed to allocate string value buffer");
+  }
+  *reinterpret_cast<unsigned*>(newString) = length;
+  memcpy(newString + sizeof(unsigned), value, length);
+  newString[actualLength - 1U] = 0; // to avoid buffer over-run accidents by users later
+  return newString;
+}
+inline static void decodePrefixedString(
+    bool isPrefixed, char const* prefixed,
+    unsigned* length, char const** value)
+{
+  if (!isPrefixed) {
+    *length = static_cast<unsigned>(strlen(prefixed));
+    *value = prefixed;
+  } else {
+    *length = *reinterpret_cast<unsigned const*>(prefixed);
+    *value = prefixed + sizeof(unsigned);
+  }
+}
+/** Free the string duplicated by duplicateStringValue()/duplicateAndPrefixStringValue().
+ */
+#if JSONCPP_USING_SECURE_MEMORY
+static inline void releasePrefixedStringValue(char* value) {
+  unsigned length = 0;
+  char const* valueDecoded;
+  decodePrefixedString(true, value, &length, &valueDecoded);
+  size_t const size = sizeof(unsigned) + length + 1U;
+  memset(value, 0, size);
+  free(value);
+}
+static inline void releaseStringValue(char* value, unsigned length) {
+  // length==0 => we allocated the strings memory
+  size_t size = (length==0) ? strlen(value) : length;
+  memset(value, 0, size);
+  free(value);
+}
+#else // !JSONCPP_USING_SECURE_MEMORY
+static inline void releasePrefixedStringValue(char* value) {
+  free(value);
+}
+static inline void releaseStringValue(char* value, unsigned) {
+  free(value);
+}
+#endif // JSONCPP_USING_SECURE_MEMORY
+
+} // namespace Json
+
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// ValueInternals...
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+#if !defined(JSON_IS_AMALGAMATION)
+
+#include "json_valueiterator.inl"
+#endif // if !defined(JSON_IS_AMALGAMATION)
+
+namespace Json {
+
+Exception::Exception(JSONCPP_STRING const& msg)
+  : msg_(msg)
+{}
+Exception::~Exception() throw()
+{}
+char const* Exception::what() const throw()
+{
+  return msg_.c_str();
+}
+RuntimeError::RuntimeError(JSONCPP_STRING const& msg)
+  : Exception(msg)
+{}
+LogicError::LogicError(JSONCPP_STRING const& msg)
+  : Exception(msg)
+{}
+JSONCPP_NORETURN void throwRuntimeError(JSONCPP_STRING const& msg)
+{
+  throw RuntimeError(msg);
+}
+JSONCPP_NORETURN void throwLogicError(JSONCPP_STRING const& msg)
+{
+  throw LogicError(msg);
+}
+
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// class Value::CommentInfo
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+
+Value::CommentInfo::CommentInfo() : comment_(0)
+{}
+
+Value::CommentInfo::~CommentInfo() {
+  if (comment_)
+    releaseStringValue(comment_, 0u);
+}
+
+void Value::CommentInfo::setComment(const char* text, size_t len) {
+  if (comment_) {
+    releaseStringValue(comment_, 0u);
+    comment_ = 0;
+  }
+  JSON_ASSERT(text != 0);
+  JSON_ASSERT_MESSAGE(
+      text[0] == '\0' || text[0] == '/',
+      "in Json::Value::setComment(): Comments must start with /");
+  // It seems that /**/ style comments are acceptable as well.
+  comment_ = duplicateStringValue(text, len);
+}
+
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// class Value::CZString
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+
+// Notes: policy_ indicates if the string was allocated when
+// a string is stored.
+
+Value::CZString::CZString(ArrayIndex aindex) : cstr_(0), index_(aindex) {}
+
+Value::CZString::CZString(char const* str, unsigned ulength, DuplicationPolicy allocate)
+    : cstr_(str) {
+  // allocate != duplicate
+  storage_.policy_ = allocate & 0x3;
+  storage_.length_ = ulength & 0x3FFFFFFF;
+}
+
+Value::CZString::CZString(const CZString& other) {
+  cstr_ = (other.storage_.policy_ != noDuplication && other.cstr_ != 0
+				 ? duplicateStringValue(other.cstr_, other.storage_.length_)
+				 : other.cstr_);
+  storage_.policy_ = static_cast<unsigned>(other.cstr_
+                 ? (static_cast<DuplicationPolicy>(other.storage_.policy_) == noDuplication
+                     ? noDuplication : duplicate)
+                 : static_cast<DuplicationPolicy>(other.storage_.policy_)) & 3U;
+  storage_.length_ = other.storage_.length_;
+}
+
+#if JSON_HAS_RVALUE_REFERENCES
+Value::CZString::CZString(CZString&& other)
+  : cstr_(other.cstr_), index_(other.index_) {
+  other.cstr_ = nullptr;
+}
+#endif
+
+Value::CZString::~CZString() {
+  if (cstr_ && storage_.policy_ == duplicate) {
+	  releaseStringValue(const_cast<char*>(cstr_), storage_.length_ + 1u); //+1 for null terminating character for sake of completeness but not actually necessary
+  }
+}
+
+void Value::CZString::swap(CZString& other) {
+  std::swap(cstr_, other.cstr_);
+  std::swap(index_, other.index_);
+}
+
+Value::CZString& Value::CZString::operator=(CZString other) {
+  swap(other);
+  return *this;
+}
+
+bool Value::CZString::operator<(const CZString& other) const {
+  if (!cstr_) return index_ < other.index_;
+  //return strcmp(cstr_, other.cstr_) < 0;
+  // Assume both are strings.
+  unsigned this_len = this->storage_.length_;
+  unsigned other_len = other.storage_.length_;
+  unsigned min_len = std::min(this_len, other_len);
+  JSON_ASSERT(this->cstr_ && other.cstr_);
+  int comp = memcmp(this->cstr_, other.cstr_, min_len);
+  if (comp < 0) return true;
+  if (comp > 0) return false;
+  return (this_len < other_len);
+}
+
+bool Value::CZString::operator==(const CZString& other) const {
+  if (!cstr_) return index_ == other.index_;
+  //return strcmp(cstr_, other.cstr_) == 0;
+  // Assume both are strings.
+  unsigned this_len = this->storage_.length_;
+  unsigned other_len = other.storage_.length_;
+  if (this_len != other_len) return false;
+  JSON_ASSERT(this->cstr_ && other.cstr_);
+  int comp = memcmp(this->cstr_, other.cstr_, this_len);
+  return comp == 0;
+}
+
+ArrayIndex Value::CZString::index() const { return index_; }
+
+//const char* Value::CZString::c_str() const { return cstr_; }
+const char* Value::CZString::data() const { return cstr_; }
+unsigned Value::CZString::length() const { return storage_.length_; }
+bool Value::CZString::isStaticString() const { return storage_.policy_ == noDuplication; }
+
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// class Value::Value
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+
+/*! \internal Default constructor initialization must be equivalent to:
+ * memset( this, 0, sizeof(Value) )
+ * This optimization is used in ValueInternalMap fast allocator.
+ */
+Value::Value(ValueType vtype) {
+  initBasic(vtype);
+  switch (vtype) {
+  case nullValue:
+    break;
+  case intValue:
+  case uintValue:
+    value_.int_ = 0;
+    break;
+  case realValue:
+    value_.real_ = 0.0;
+    break;
+  case stringValue:
+    value_.string_ = 0;
+    break;
+  case arrayValue:
+  case objectValue:
+    value_.map_ = new ObjectValues();
+    break;
+  case booleanValue:
+    value_.bool_ = false;
+    break;
+  default:
+    JSON_ASSERT_UNREACHABLE;
+  }
+}
+
+Value::Value(Int value) {
+  initBasic(intValue);
+  value_.int_ = value;
+}
+
+Value::Value(UInt value) {
+  initBasic(uintValue);
+  value_.uint_ = value;
+}
+#if defined(JSON_HAS_INT64)
+Value::Value(Int64 value) {
+  initBasic(intValue);
+  value_.int_ = value;
+}
+Value::Value(UInt64 value) {
+  initBasic(uintValue);
+  value_.uint_ = value;
+}
+#endif // defined(JSON_HAS_INT64)
+
+Value::Value(double value) {
+  initBasic(realValue);
+  value_.real_ = value;
+}
+
+Value::Value(const char* value) {
+  initBasic(stringValue, true);
+  value_.string_ = duplicateAndPrefixStringValue(value, static_cast<unsigned>(strlen(value)));
+}
+
+Value::Value(const char* beginValue, const char* endValue) {
+  initBasic(stringValue, true);
+  value_.string_ =
+      duplicateAndPrefixStringValue(beginValue, static_cast<unsigned>(endValue - beginValue));
+}
+
+Value::Value(const JSONCPP_STRING& value) {
+  initBasic(stringValue, true);
+  value_.string_ =
+      duplicateAndPrefixStringValue(value.data(), static_cast<unsigned>(value.length()));
+}
+
+Value::Value(const StaticString& value) {
+  initBasic(stringValue);
+  value_.string_ = const_cast<char*>(value.c_str());
+}
+
+#ifdef JSON_USE_CPPTL
+Value::Value(const CppTL::ConstString& value) {
+  initBasic(stringValue, true);
+  value_.string_ = duplicateAndPrefixStringValue(value, static_cast<unsigned>(value.length()));
+}
+#endif
+
+Value::Value(bool value) {
+  initBasic(booleanValue);
+  value_.bool_ = value;
+}
+
+Value::Value(Value const& other)
+    : type_(other.type_), allocated_(false)
+      ,
+      comments_(0), start_(other.start_), limit_(other.limit_)
+{
+  switch (type_) {
+  case nullValue:
+  case intValue:
+  case uintValue:
+  case realValue:
+  case booleanValue:
+    value_ = other.value_;
+    break;
+  case stringValue:
+    if (other.value_.string_ && other.allocated_) {
+      unsigned len;
+      char const* str;
+      decodePrefixedString(other.allocated_, other.value_.string_,
+          &len, &str);
+      value_.string_ = duplicateAndPrefixStringValue(str, len);
+      allocated_ = true;
+    } else {
+      value_.string_ = other.value_.string_;
+      allocated_ = false;
+    }
+    break;
+  case arrayValue:
+  case objectValue:
+    value_.map_ = new ObjectValues(*other.value_.map_);
+    break;
+  default:
+    JSON_ASSERT_UNREACHABLE;
+  }
+  if (other.comments_) {
+    comments_ = new CommentInfo[numberOfCommentPlacement];
+    for (int comment = 0; comment < numberOfCommentPlacement; ++comment) {
+      const CommentInfo& otherComment = other.comments_[comment];
+      if (otherComment.comment_)
+        comments_[comment].setComment(
+            otherComment.comment_, strlen(otherComment.comment_));
+    }
+  }
+}
+
+#if JSON_HAS_RVALUE_REFERENCES
+// Move constructor
+Value::Value(Value&& other) {
+  initBasic(nullValue);
+  swap(other);
+}
+#endif
+
+Value::~Value() {
+  switch (type_) {
+  case nullValue:
+  case intValue:
+  case uintValue:
+  case realValue:
+  case booleanValue:
+    break;
+  case stringValue:
+    if (allocated_)
+      releasePrefixedStringValue(value_.string_);
+    break;
+  case arrayValue:
+  case objectValue:
+    delete value_.map_;
+    break;
+  default:
+    JSON_ASSERT_UNREACHABLE;
+  }
+
+  if (comments_)
+    delete[] comments_;
+
+  value_.uint_ = 0;
+}
+
+Value& Value::operator=(Value other) {
+  swap(other);
+  return *this;
+}
+
+void Value::swapPayload(Value& other) {
+  ValueType temp = type_;
+  type_ = other.type_;
+  other.type_ = temp;
+  std::swap(value_, other.value_);
+  int temp2 = allocated_;
+  allocated_ = other.allocated_;
+  other.allocated_ = temp2 & 0x1;
+}
+
+void Value::swap(Value& other) {
+  swapPayload(other);
+  std::swap(comments_, other.comments_);
+  std::swap(start_, other.start_);
+  std::swap(limit_, other.limit_);
+}
+
+ValueType Value::type() const { return type_; }
+
+int Value::compare(const Value& other) const {
+  if (*this < other)
+    return -1;
+  if (*this > other)
+    return 1;
+  return 0;
+}
+
+bool Value::operator<(const Value& other) const {
+  int typeDelta = type_ - other.type_;
+  if (typeDelta)
+    return typeDelta < 0 ? true : false;
+  switch (type_) {
+  case nullValue:
+    return false;
+  case intValue:
+    return value_.int_ < other.value_.int_;
+  case uintValue:
+    return value_.uint_ < other.value_.uint_;
+  case realValue:
+    return value_.real_ < other.value_.real_;
+  case booleanValue:
+    return value_.bool_ < other.value_.bool_;
+  case stringValue:
+  {
+    if ((value_.string_ == 0) || (other.value_.string_ == 0)) {
+      if (other.value_.string_) return true;
+      else return false;
+    }
+    unsigned this_len;
+    unsigned other_len;
+    char const* this_str;
+    char const* other_str;
+    decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str);
+    decodePrefixedString(other.allocated_, other.value_.string_, &other_len, &other_str);
+    unsigned min_len = std::min(this_len, other_len);
+    JSON_ASSERT(this_str && other_str);
+    int comp = memcmp(this_str, other_str, min_len);
+    if (comp < 0) return true;
+    if (comp > 0) return false;
+    return (this_len < other_len);
+  }
+  case arrayValue:
+  case objectValue: {
+    int delta = int(value_.map_->size() - other.value_.map_->size());
+    if (delta)
+      return delta < 0;
+    return (*value_.map_) < (*other.value_.map_);
+  }
+  default:
+    JSON_ASSERT_UNREACHABLE;
+  }
+  return false; // unreachable
+}
+
+bool Value::operator<=(const Value& other) const { return !(other < *this); }
+
+bool Value::operator>=(const Value& other) const { return !(*this < other); }
+
+bool Value::operator>(const Value& other) const { return other < *this; }
+
+bool Value::operator==(const Value& other) const {
+  // if ( type_ != other.type_ )
+  // GCC 2.95.3 says:
+  // attempt to take address of bit-field structure member `Json::Value::type_'
+  // Beats me, but a temp solves the problem.
+  int temp = other.type_;
+  if (type_ != temp)
+    return false;
+  switch (type_) {
+  case nullValue:
+    return true;
+  case intValue:
+    return value_.int_ == other.value_.int_;
+  case uintValue:
+    return value_.uint_ == other.value_.uint_;
+  case realValue:
+    return value_.real_ == other.value_.real_;
+  case booleanValue:
+    return value_.bool_ == other.value_.bool_;
+  case stringValue:
+  {
+    if ((value_.string_ == 0) || (other.value_.string_ == 0)) {
+      return (value_.string_ == other.value_.string_);
+    }
+    unsigned this_len;
+    unsigned other_len;
+    char const* this_str;
+    char const* other_str;
+    decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str);
+    decodePrefixedString(other.allocated_, other.value_.string_, &other_len, &other_str);
+    if (this_len != other_len) return false;
+    JSON_ASSERT(this_str && other_str);
+    int comp = memcmp(this_str, other_str, this_len);
+    return comp == 0;
+  }
+  case arrayValue:
+  case objectValue:
+    return value_.map_->size() == other.value_.map_->size() &&
+           (*value_.map_) == (*other.value_.map_);
+  default:
+    JSON_ASSERT_UNREACHABLE;
+  }
+  return false; // unreachable
+}
+
+bool Value::operator!=(const Value& other) const { return !(*this == other); }
+
+const char* Value::asCString() const {
+  JSON_ASSERT_MESSAGE(type_ == stringValue,
+                      "in Json::Value::asCString(): requires stringValue");
+  if (value_.string_ == 0) return 0;
+  unsigned this_len;
+  char const* this_str;
+  decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str);
+  return this_str;
+}
+
+#if JSONCPP_USING_SECURE_MEMORY
+unsigned Value::getCStringLength() const {
+  JSON_ASSERT_MESSAGE(type_ == stringValue,
+	                  "in Json::Value::asCString(): requires stringValue");
+  if (value_.string_ == 0) return 0;
+  unsigned this_len;
+  char const* this_str;
+  decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str);
+  return this_len;
+}
+#endif
+
+bool Value::getString(char const** str, char const** cend) const {
+  if (type_ != stringValue) return false;
+  if (value_.string_ == 0) return false;
+  unsigned length;
+  decodePrefixedString(this->allocated_, this->value_.string_, &length, str);
+  *cend = *str + length;
+  return true;
+}
+
+JSONCPP_STRING Value::asString() const {
+  switch (type_) {
+  case nullValue:
+    return "";
+  case stringValue:
+  {
+    if (value_.string_ == 0) return "";
+    unsigned this_len;
+    char const* this_str;
+    decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str);
+    return JSONCPP_STRING(this_str, this_len);
+  }
+  case booleanValue:
+    return value_.bool_ ? "true" : "false";
+  case intValue:
+    return valueToString(value_.int_);
+  case uintValue:
+    return valueToString(value_.uint_);
+  case realValue:
+    return valueToString(value_.real_);
+  default:
+    JSON_FAIL_MESSAGE("Type is not convertible to string");
+  }
+}
+
+#ifdef JSON_USE_CPPTL
+CppTL::ConstString Value::asConstString() const {
+  unsigned len;
+  char const* str;
+  decodePrefixedString(allocated_, value_.string_,
+      &len, &str);
+  return CppTL::ConstString(str, len);
+}
+#endif
+
+Value::Int Value::asInt() const {
+  switch (type_) {
+  case intValue:
+    JSON_ASSERT_MESSAGE(isInt(), "LargestInt out of Int range");
+    return Int(value_.int_);
+  case uintValue:
+    JSON_ASSERT_MESSAGE(isInt(), "LargestUInt out of Int range");
+    return Int(value_.uint_);
+  case realValue:
+    JSON_ASSERT_MESSAGE(InRange(value_.real_, minInt, maxInt),
+                        "double out of Int range");
+    return Int(value_.real_);
+  case nullValue:
+    return 0;
+  case booleanValue:
+    return value_.bool_ ? 1 : 0;
+  default:
+    break;
+  }
+  JSON_FAIL_MESSAGE("Value is not convertible to Int.");
+}
+
+Value::UInt Value::asUInt() const {
+  switch (type_) {
+  case intValue:
+    JSON_ASSERT_MESSAGE(isUInt(), "LargestInt out of UInt range");
+    return UInt(value_.int_);
+  case uintValue:
+    JSON_ASSERT_MESSAGE(isUInt(), "LargestUInt out of UInt range");
+    return UInt(value_.uint_);
+  case realValue:
+    JSON_ASSERT_MESSAGE(InRange(value_.real_, 0, maxUInt),
+                        "double out of UInt range");
+    return UInt(value_.real_);
+  case nullValue:
+    return 0;
+  case booleanValue:
+    return value_.bool_ ? 1 : 0;
+  default:
+    break;
+  }
+  JSON_FAIL_MESSAGE("Value is not convertible to UInt.");
+}
+
+#if defined(JSON_HAS_INT64)
+
+Value::Int64 Value::asInt64() const {
+  switch (type_) {
+  case intValue:
+    return Int64(value_.int_);
+  case uintValue:
+    JSON_ASSERT_MESSAGE(isInt64(), "LargestUInt out of Int64 range");
+    return Int64(value_.uint_);
+  case realValue:
+    JSON_ASSERT_MESSAGE(InRange(value_.real_, minInt64, maxInt64),
+                        "double out of Int64 range");
+    return Int64(value_.real_);
+  case nullValue:
+    return 0;
+  case booleanValue:
+    return value_.bool_ ? 1 : 0;
+  default:
+    break;
+  }
+  JSON_FAIL_MESSAGE("Value is not convertible to Int64.");
+}
+
+Value::UInt64 Value::asUInt64() const {
+  switch (type_) {
+  case intValue:
+    JSON_ASSERT_MESSAGE(isUInt64(), "LargestInt out of UInt64 range");
+    return UInt64(value_.int_);
+  case uintValue:
+    return UInt64(value_.uint_);
+  case realValue:
+    JSON_ASSERT_MESSAGE(InRange(value_.real_, 0, maxUInt64),
+                        "double out of UInt64 range");
+    return UInt64(value_.real_);
+  case nullValue:
+    return 0;
+  case booleanValue:
+    return value_.bool_ ? 1 : 0;
+  default:
+    break;
+  }
+  JSON_FAIL_MESSAGE("Value is not convertible to UInt64.");
+}
+#endif // if defined(JSON_HAS_INT64)
+
+LargestInt Value::asLargestInt() const {
+#if defined(JSON_NO_INT64)
+  return asInt();
+#else
+  return asInt64();
+#endif
+}
+
+LargestUInt Value::asLargestUInt() const {
+#if defined(JSON_NO_INT64)
+  return asUInt();
+#else
+  return asUInt64();
+#endif
+}
+
+double Value::asDouble() const {
+  switch (type_) {
+  case intValue:
+    return static_cast<double>(value_.int_);
+  case uintValue:
+#if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
+    return static_cast<double>(value_.uint_);
+#else  // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
+    return integerToDouble(value_.uint_);
+#endif // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
+  case realValue:
+    return value_.real_;
+  case nullValue:
+    return 0.0;
+  case booleanValue:
+    return value_.bool_ ? 1.0 : 0.0;
+  default:
+    break;
+  }
+  JSON_FAIL_MESSAGE("Value is not convertible to double.");
+}
+
+float Value::asFloat() const {
+  switch (type_) {
+  case intValue:
+    return static_cast<float>(value_.int_);
+  case uintValue:
+#if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
+    return static_cast<float>(value_.uint_);
+#else  // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
+    // This can fail (silently?) if the value is bigger than MAX_FLOAT.
+    return static_cast<float>(integerToDouble(value_.uint_));
+#endif // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
+  case realValue:
+    return static_cast<float>(value_.real_);
+  case nullValue:
+    return 0.0;
+  case booleanValue:
+    return value_.bool_ ? 1.0f : 0.0f;
+  default:
+    break;
+  }
+  JSON_FAIL_MESSAGE("Value is not convertible to float.");
+}
+
+bool Value::asBool() const {
+  switch (type_) {
+  case booleanValue:
+    return value_.bool_;
+  case nullValue:
+    return false;
+  case intValue:
+    return value_.int_ ? true : false;
+  case uintValue:
+    return value_.uint_ ? true : false;
+  case realValue:
+    // This is kind of strange. Not recommended.
+    return (value_.real_ != 0.0) ? true : false;
+  default:
+    break;
+  }
+  JSON_FAIL_MESSAGE("Value is not convertible to bool.");
+}
+
+bool Value::isConvertibleTo(ValueType other) const {
+  switch (other) {
+  case nullValue:
+    return (isNumeric() && asDouble() == 0.0) ||
+           (type_ == booleanValue && value_.bool_ == false) ||
+           (type_ == stringValue && asString() == "") ||
+           (type_ == arrayValue && value_.map_->size() == 0) ||
+           (type_ == objectValue && value_.map_->size() == 0) ||
+           type_ == nullValue;
+  case intValue:
+    return isInt() ||
+           (type_ == realValue && InRange(value_.real_, minInt, maxInt)) ||
+           type_ == booleanValue || type_ == nullValue;
+  case uintValue:
+    return isUInt() ||
+           (type_ == realValue && InRange(value_.real_, 0, maxUInt)) ||
+           type_ == booleanValue || type_ == nullValue;
+  case realValue:
+    return isNumeric() || type_ == booleanValue || type_ == nullValue;
+  case booleanValue:
+    return isNumeric() || type_ == booleanValue || type_ == nullValue;
+  case stringValue:
+    return isNumeric() || type_ == booleanValue || type_ == stringValue ||
+           type_ == nullValue;
+  case arrayValue:
+    return type_ == arrayValue || type_ == nullValue;
+  case objectValue:
+    return type_ == objectValue || type_ == nullValue;
+  }
+  JSON_ASSERT_UNREACHABLE;
+  return false;
+}
+
+/// Number of values in array or object
+ArrayIndex Value::size() const {
+  switch (type_) {
+  case nullValue:
+  case intValue:
+  case uintValue:
+  case realValue:
+  case booleanValue:
+  case stringValue:
+    return 0;
+  case arrayValue: // size of the array is highest index + 1
+    if (!value_.map_->empty()) {
+      ObjectValues::const_iterator itLast = value_.map_->end();
+      --itLast;
+      return (*itLast).first.index() + 1;
+    }
+    return 0;
+  case objectValue:
+    return ArrayIndex(value_.map_->size());
+  }
+  JSON_ASSERT_UNREACHABLE;
+  return 0; // unreachable;
+}
+
+bool Value::empty() const {
+  if (isNull() || isArray() || isObject())
+    return size() == 0u;
+  else
+    return false;
+}
+
+bool Value::operator!() const { return isNull(); }
+
+void Value::clear() {
+  JSON_ASSERT_MESSAGE(type_ == nullValue || type_ == arrayValue ||
+                          type_ == objectValue,
+                      "in Json::Value::clear(): requires complex value");
+  start_ = 0;
+  limit_ = 0;
+  switch (type_) {
+  case arrayValue:
+  case objectValue:
+    value_.map_->clear();
+    break;
+  default:
+    break;
+  }
+}
+
+void Value::resize(ArrayIndex newSize) {
+  JSON_ASSERT_MESSAGE(type_ == nullValue || type_ == arrayValue,
+                      "in Json::Value::resize(): requires arrayValue");
+  if (type_ == nullValue)
+    *this = Value(arrayValue);
+  ArrayIndex oldSize = size();
+  if (newSize == 0)
+    clear();
+  else if (newSize > oldSize)
+    (*this)[newSize - 1];
+  else {
+    for (ArrayIndex index = newSize; index < oldSize; ++index) {
+      value_.map_->erase(index);
+    }
+    JSON_ASSERT(size() == newSize);
+  }
+}
+
+Value& Value::operator[](ArrayIndex index) {
+  JSON_ASSERT_MESSAGE(
+      type_ == nullValue || type_ == arrayValue,
+      "in Json::Value::operator[](ArrayIndex): requires arrayValue");
+  if (type_ == nullValue)
+    *this = Value(arrayValue);
+  CZString key(index);
+  ObjectValues::iterator it = value_.map_->lower_bound(key);
+  if (it != value_.map_->end() && (*it).first == key)
+    return (*it).second;
+
+  ObjectValues::value_type defaultValue(key, nullRef);
+  it = value_.map_->insert(it, defaultValue);
+  return (*it).second;
+}
+
+Value& Value::operator[](int index) {
+  JSON_ASSERT_MESSAGE(
+      index >= 0,
+      "in Json::Value::operator[](int index): index cannot be negative");
+  return (*this)[ArrayIndex(index)];
+}
+
+const Value& Value::operator[](ArrayIndex index) const {
+  JSON_ASSERT_MESSAGE(
+      type_ == nullValue || type_ == arrayValue,
+      "in Json::Value::operator[](ArrayIndex)const: requires arrayValue");
+  if (type_ == nullValue)
+    return nullRef;
+  CZString key(index);
+  ObjectValues::const_iterator it = value_.map_->find(key);
+  if (it == value_.map_->end())
+    return nullRef;
+  return (*it).second;
+}
+
+const Value& Value::operator[](int index) const {
+  JSON_ASSERT_MESSAGE(
+      index >= 0,
+      "in Json::Value::operator[](int index) const: index cannot be negative");
+  return (*this)[ArrayIndex(index)];
+}
+
+void Value::initBasic(ValueType vtype, bool allocated) {
+  type_ = vtype;
+  allocated_ = allocated;
+  comments_ = 0;
+  start_ = 0;
+  limit_ = 0;
+}
+
+// Access an object value by name, create a null member if it does not exist.
+// @pre Type of '*this' is object or null.
+// @param key is null-terminated.
+Value& Value::resolveReference(const char* key) {
+  JSON_ASSERT_MESSAGE(
+      type_ == nullValue || type_ == objectValue,
+      "in Json::Value::resolveReference(): requires objectValue");
+  if (type_ == nullValue)
+    *this = Value(objectValue);
+  CZString actualKey(
+      key, static_cast<unsigned>(strlen(key)), CZString::noDuplication); // NOTE!
+  ObjectValues::iterator it = value_.map_->lower_bound(actualKey);
+  if (it != value_.map_->end() && (*it).first == actualKey)
+    return (*it).second;
+
+  ObjectValues::value_type defaultValue(actualKey, nullRef);
+  it = value_.map_->insert(it, defaultValue);
+  Value& value = (*it).second;
+  return value;
+}
+
+// @param key is not null-terminated.
+Value& Value::resolveReference(char const* key, char const* cend)
+{
+  JSON_ASSERT_MESSAGE(
+      type_ == nullValue || type_ == objectValue,
+      "in Json::Value::resolveReference(key, end): requires objectValue");
+  if (type_ == nullValue)
+    *this = Value(objectValue);
+  CZString actualKey(
+      key, static_cast<unsigned>(cend-key), CZString::duplicateOnCopy);
+  ObjectValues::iterator it = value_.map_->lower_bound(actualKey);
+  if (it != value_.map_->end() && (*it).first == actualKey)
+    return (*it).second;
+
+  ObjectValues::value_type defaultValue(actualKey, nullRef);
+  it = value_.map_->insert(it, defaultValue);
+  Value& value = (*it).second;
+  return value;
+}
+
+Value Value::get(ArrayIndex index, const Value& defaultValue) const {
+  const Value* value = &((*this)[index]);
+  return value == &nullRef ? defaultValue : *value;
+}
+
+bool Value::isValidIndex(ArrayIndex index) const { return index < size(); }
+
+Value const* Value::find(char const* key, char const* cend) const
+{
+  JSON_ASSERT_MESSAGE(
+      type_ == nullValue || type_ == objectValue,
+      "in Json::Value::find(key, end, found): requires objectValue or nullValue");
+  if (type_ == nullValue) return NULL;
+  CZString actualKey(key, static_cast<unsigned>(cend-key), CZString::noDuplication);
+  ObjectValues::const_iterator it = value_.map_->find(actualKey);
+  if (it == value_.map_->end()) return NULL;
+  return &(*it).second;
+}
+const Value& Value::operator[](const char* key) const
+{
+  Value const* found = find(key, key + strlen(key));
+  if (!found) return nullRef;
+  return *found;
+}
+Value const& Value::operator[](JSONCPP_STRING const& key) const
+{
+  Value const* found = find(key.data(), key.data() + key.length());
+  if (!found) return nullRef;
+  return *found;
+}
+
+Value& Value::operator[](const char* key) {
+  return resolveReference(key, key + strlen(key));
+}
+
+Value& Value::operator[](const JSONCPP_STRING& key) {
+  return resolveReference(key.data(), key.data() + key.length());
+}
+
+Value& Value::operator[](const StaticString& key) {
+  return resolveReference(key.c_str());
+}
+
+#ifdef JSON_USE_CPPTL
+Value& Value::operator[](const CppTL::ConstString& key) {
+  return resolveReference(key.c_str(), key.end_c_str());
+}
+Value const& Value::operator[](CppTL::ConstString const& key) const
+{
+  Value const* found = find(key.c_str(), key.end_c_str());
+  if (!found) return nullRef;
+  return *found;
+}
+#endif
+
+Value& Value::append(const Value& value) { return (*this)[size()] = value; }
+
+Value Value::get(char const* key, char const* cend, Value const& defaultValue) const
+{
+  Value const* found = find(key, cend);
+  return !found ? defaultValue : *found;
+}
+Value Value::get(char const* key, Value const& defaultValue) const
+{
+  return get(key, key + strlen(key), defaultValue);
+}
+Value Value::get(JSONCPP_STRING const& key, Value const& defaultValue) const
+{
+  return get(key.data(), key.data() + key.length(), defaultValue);
+}
+
+
+bool Value::removeMember(const char* key, const char* cend, Value* removed)
+{
+  if (type_ != objectValue) {
+    return false;
+  }
+  CZString actualKey(key, static_cast<unsigned>(cend-key), CZString::noDuplication);
+  ObjectValues::iterator it = value_.map_->find(actualKey);
+  if (it == value_.map_->end())
+    return false;
+  *removed = it->second;
+  value_.map_->erase(it);
+  return true;
+}
+bool Value::removeMember(const char* key, Value* removed)
+{
+  return removeMember(key, key + strlen(key), removed);
+}
+bool Value::removeMember(JSONCPP_STRING const& key, Value* removed)
+{
+  return removeMember(key.data(), key.data() + key.length(), removed);
+}
+Value Value::removeMember(const char* key)
+{
+  JSON_ASSERT_MESSAGE(type_ == nullValue || type_ == objectValue,
+                      "in Json::Value::removeMember(): requires objectValue");
+  if (type_ == nullValue)
+    return nullRef;
+
+  Value removed;  // null
+  removeMember(key, key + strlen(key), &removed);
+  return removed; // still null if removeMember() did nothing
+}
+Value Value::removeMember(const JSONCPP_STRING& key)
+{
+  return removeMember(key.c_str());
+}
+
+bool Value::removeIndex(ArrayIndex index, Value* removed) {
+  if (type_ != arrayValue) {
+    return false;
+  }
+  CZString key(index);
+  ObjectValues::iterator it = value_.map_->find(key);
+  if (it == value_.map_->end()) {
+    return false;
+  }
+  *removed = it->second;
+  ArrayIndex oldSize = size();
+  // shift left all items left, into the place of the "removed"
+  for (ArrayIndex i = index; i < (oldSize - 1); ++i){
+    CZString keey(i);
+    (*value_.map_)[keey] = (*this)[i + 1];
+  }
+  // erase the last one ("leftover")
+  CZString keyLast(oldSize - 1);
+  ObjectValues::iterator itLast = value_.map_->find(keyLast);
+  value_.map_->erase(itLast);
+  return true;
+}
+
+#ifdef JSON_USE_CPPTL
+Value Value::get(const CppTL::ConstString& key,
+                 const Value& defaultValue) const {
+  return get(key.c_str(), key.end_c_str(), defaultValue);
+}
+#endif
+
+bool Value::isMember(char const* key, char const* cend) const
+{
+  Value const* value = find(key, cend);
+  return NULL != value;
+}
+bool Value::isMember(char const* key) const
+{
+  return isMember(key, key + strlen(key));
+}
+bool Value::isMember(JSONCPP_STRING const& key) const
+{
+  return isMember(key.data(), key.data() + key.length());
+}
+
+#ifdef JSON_USE_CPPTL
+bool Value::isMember(const CppTL::ConstString& key) const {
+  return isMember(key.c_str(), key.end_c_str());
+}
+#endif
+
+Value::Members Value::getMemberNames() const {
+  JSON_ASSERT_MESSAGE(
+      type_ == nullValue || type_ == objectValue,
+      "in Json::Value::getMemberNames(), value must be objectValue");
+  if (type_ == nullValue)
+    return Value::Members();
+  Members members;
+  members.reserve(value_.map_->size());
+  ObjectValues::const_iterator it = value_.map_->begin();
+  ObjectValues::const_iterator itEnd = value_.map_->end();
+  for (; it != itEnd; ++it) {
+    members.push_back(JSONCPP_STRING((*it).first.data(),
+                                  (*it).first.length()));
+  }
+  return members;
+}
+//
+//# ifdef JSON_USE_CPPTL
+// EnumMemberNames
+// Value::enumMemberNames() const
+//{
+//   if ( type_ == objectValue )
+//   {
+//      return CppTL::Enum::any(  CppTL::Enum::transform(
+//         CppTL::Enum::keys( *(value_.map_), CppTL::Type<const CZString &>() ),
+//         MemberNamesTransform() ) );
+//   }
+//   return EnumMemberNames();
+//}
+//
+//
+// EnumValues
+// Value::enumValues() const
+//{
+//   if ( type_ == objectValue  ||  type_ == arrayValue )
+//      return CppTL::Enum::anyValues( *(value_.map_),
+//                                     CppTL::Type<const Value &>() );
+//   return EnumValues();
+//}
+//
+//# endif
+
+static bool IsIntegral(double d) {
+  double integral_part;
+  return modf(d, &integral_part) == 0.0;
+}
+
+bool Value::isNull() const { return type_ == nullValue; }
+
+bool Value::isBool() const { return type_ == booleanValue; }
+
+bool Value::isInt() const {
+  switch (type_) {
+  case intValue:
+    return value_.int_ >= minInt && value_.int_ <= maxInt;
+  case uintValue:
+    return value_.uint_ <= UInt(maxInt);
+  case realValue:
+    return value_.real_ >= minInt && value_.real_ <= maxInt &&
+           IsIntegral(value_.real_);
+  default:
+    break;
+  }
+  return false;
+}
+
+bool Value::isUInt() const {
+  switch (type_) {
+  case intValue:
+    return value_.int_ >= 0 && LargestUInt(value_.int_) <= LargestUInt(maxUInt);
+  case uintValue:
+    return value_.uint_ <= maxUInt;
+  case realValue:
+    return value_.real_ >= 0 && value_.real_ <= maxUInt &&
+           IsIntegral(value_.real_);
+  default:
+    break;
+  }
+  return false;
+}
+
+bool Value::isInt64() const {
+#if defined(JSON_HAS_INT64)
+  switch (type_) {
+  case intValue:
+    return true;
+  case uintValue:
+    return value_.uint_ <= UInt64(maxInt64);
+  case realValue:
+    // Note that maxInt64 (= 2^63 - 1) is not exactly representable as a
+    // double, so double(maxInt64) will be rounded up to 2^63. Therefore we
+    // require the value to be strictly less than the limit.
+    return value_.real_ >= double(minInt64) &&
+           value_.real_ < double(maxInt64) && IsIntegral(value_.real_);
+  default:
+    break;
+  }
+#endif // JSON_HAS_INT64
+  return false;
+}
+
+bool Value::isUInt64() const {
+#if defined(JSON_HAS_INT64)
+  switch (type_) {
+  case intValue:
+    return value_.int_ >= 0;
+  case uintValue:
+    return true;
+  case realValue:
+    // Note that maxUInt64 (= 2^64 - 1) is not exactly representable as a
+    // double, so double(maxUInt64) will be rounded up to 2^64. Therefore we
+    // require the value to be strictly less than the limit.
+    return value_.real_ >= 0 && value_.real_ < maxUInt64AsDouble &&
+           IsIntegral(value_.real_);
+  default:
+    break;
+  }
+#endif // JSON_HAS_INT64
+  return false;
+}
+
+bool Value::isIntegral() const {
+#if defined(JSON_HAS_INT64)
+  return isInt64() || isUInt64();
+#else
+  return isInt() || isUInt();
+#endif
+}
+
+bool Value::isDouble() const { return type_ == realValue || isIntegral(); }
+
+bool Value::isNumeric() const { return isIntegral() || isDouble(); }
+
+bool Value::isString() const { return type_ == stringValue; }
+
+bool Value::isArray() const { return type_ == arrayValue; }
+
+bool Value::isObject() const { return type_ == objectValue; }
+
+void Value::setComment(const char* comment, size_t len, CommentPlacement placement) {
+  if (!comments_)
+    comments_ = new CommentInfo[numberOfCommentPlacement];
+  if ((len > 0) && (comment[len-1] == '\n')) {
+    // Always discard trailing newline, to aid indentation.
+    len -= 1;
+  }
+  comments_[placement].setComment(comment, len);
+}
+
+void Value::setComment(const char* comment, CommentPlacement placement) {
+  setComment(comment, strlen(comment), placement);
+}
+
+void Value::setComment(const JSONCPP_STRING& comment, CommentPlacement placement) {
+  setComment(comment.c_str(), comment.length(), placement);
+}
+
+bool Value::hasComment(CommentPlacement placement) const {
+  return comments_ != 0 && comments_[placement].comment_ != 0;
+}
+
+JSONCPP_STRING Value::getComment(CommentPlacement placement) const {
+  if (hasComment(placement))
+    return comments_[placement].comment_;
+  return "";
+}
+
+void Value::setOffsetStart(ptrdiff_t start) { start_ = start; }
+
+void Value::setOffsetLimit(ptrdiff_t limit) { limit_ = limit; }
+
+ptrdiff_t Value::getOffsetStart() const { return start_; }
+
+ptrdiff_t Value::getOffsetLimit() const { return limit_; }
+
+JSONCPP_STRING Value::toStyledString() const {
+  StyledWriter writer;
+  return writer.write(*this);
+}
+
+Value::const_iterator Value::begin() const {
+  switch (type_) {
+  case arrayValue:
+  case objectValue:
+    if (value_.map_)
+      return const_iterator(value_.map_->begin());
+    break;
+  default:
+    break;
+  }
+  return const_iterator();
+}
+
+Value::const_iterator Value::end() const {
+  switch (type_) {
+  case arrayValue:
+  case objectValue:
+    if (value_.map_)
+      return const_iterator(value_.map_->end());
+    break;
+  default:
+    break;
+  }
+  return const_iterator();
+}
+
+Value::iterator Value::begin() {
+  switch (type_) {
+  case arrayValue:
+  case objectValue:
+    if (value_.map_)
+      return iterator(value_.map_->begin());
+    break;
+  default:
+    break;
+  }
+  return iterator();
+}
+
+Value::iterator Value::end() {
+  switch (type_) {
+  case arrayValue:
+  case objectValue:
+    if (value_.map_)
+      return iterator(value_.map_->end());
+    break;
+  default:
+    break;
+  }
+  return iterator();
+}
+
+// class PathArgument
+// //////////////////////////////////////////////////////////////////
+
+PathArgument::PathArgument() : key_(), index_(), kind_(kindNone) {}
+
+PathArgument::PathArgument(ArrayIndex index)
+    : key_(), index_(index), kind_(kindIndex) {}
+
+PathArgument::PathArgument(const char* key)
+    : key_(key), index_(), kind_(kindKey) {}
+
+PathArgument::PathArgument(const JSONCPP_STRING& key)
+    : key_(key.c_str()), index_(), kind_(kindKey) {}
+
+// class Path
+// //////////////////////////////////////////////////////////////////
+
+Path::Path(const JSONCPP_STRING& path,
+           const PathArgument& a1,
+           const PathArgument& a2,
+           const PathArgument& a3,
+           const PathArgument& a4,
+           const PathArgument& a5) {
+  InArgs in;
+  in.push_back(&a1);
+  in.push_back(&a2);
+  in.push_back(&a3);
+  in.push_back(&a4);
+  in.push_back(&a5);
+  makePath(path, in);
+}
+
+void Path::makePath(const JSONCPP_STRING& path, const InArgs& in) {
+  const char* current = path.c_str();
+  const char* end = current + path.length();
+  InArgs::const_iterator itInArg = in.begin();
+  while (current != end) {
+    if (*current == '[') {
+      ++current;
+      if (*current == '%')
+        addPathInArg(path, in, itInArg, PathArgument::kindIndex);
+      else {
+        ArrayIndex index = 0;
+        for (; current != end && *current >= '0' && *current <= '9'; ++current)
+          index = index * 10 + ArrayIndex(*current - '0');
+        args_.push_back(index);
+      }
+      if (current == end || *current++ != ']')
+        invalidPath(path, int(current - path.c_str()));
+    } else if (*current == '%') {
+      addPathInArg(path, in, itInArg, PathArgument::kindKey);
+      ++current;
+    } else if (*current == '.') {
+      ++current;
+    } else {
+      const char* beginName = current;
+      while (current != end && !strchr("[.", *current))
+        ++current;
+      args_.push_back(JSONCPP_STRING(beginName, current));
+    }
+  }
+}
+
+void Path::addPathInArg(const JSONCPP_STRING& /*path*/,
+                        const InArgs& in,
+                        InArgs::const_iterator& itInArg,
+                        PathArgument::Kind kind) {
+  if (itInArg == in.end()) {
+    // Error: missing argument %d
+  } else if ((*itInArg)->kind_ != kind) {
+    // Error: bad argument type
+  } else {
+    args_.push_back(**itInArg);
+  }
+}
+
+void Path::invalidPath(const JSONCPP_STRING& /*path*/, int /*location*/) {
+  // Error: invalid path.
+}
+
+const Value& Path::resolve(const Value& root) const {
+  const Value* node = &root;
+  for (Args::const_iterator it = args_.begin(); it != args_.end(); ++it) {
+    const PathArgument& arg = *it;
+    if (arg.kind_ == PathArgument::kindIndex) {
+      if (!node->isArray() || !node->isValidIndex(arg.index_)) {
+        // Error: unable to resolve path (array value expected at position...
+      }
+      node = &((*node)[arg.index_]);
+    } else if (arg.kind_ == PathArgument::kindKey) {
+      if (!node->isObject()) {
+        // Error: unable to resolve path (object value expected at position...)
+      }
+      node = &((*node)[arg.key_]);
+      if (node == &Value::nullRef) {
+        // Error: unable to resolve path (object has no member named '' at
+        // position...)
+      }
+    }
+  }
+  return *node;
+}
+
+Value Path::resolve(const Value& root, const Value& defaultValue) const {
+  const Value* node = &root;
+  for (Args::const_iterator it = args_.begin(); it != args_.end(); ++it) {
+    const PathArgument& arg = *it;
+    if (arg.kind_ == PathArgument::kindIndex) {
+      if (!node->isArray() || !node->isValidIndex(arg.index_))
+        return defaultValue;
+      node = &((*node)[arg.index_]);
+    } else if (arg.kind_ == PathArgument::kindKey) {
+      if (!node->isObject())
+        return defaultValue;
+      node = &((*node)[arg.key_]);
+      if (node == &Value::nullRef)
+        return defaultValue;
+    }
+  }
+  return *node;
+}
+
+Value& Path::make(Value& root) const {
+  Value* node = &root;
+  for (Args::const_iterator it = args_.begin(); it != args_.end(); ++it) {
+    const PathArgument& arg = *it;
+    if (arg.kind_ == PathArgument::kindIndex) {
+      if (!node->isArray()) {
+        // Error: node is not an array at position ...
+      }
+      node = &((*node)[arg.index_]);
+    } else if (arg.kind_ == PathArgument::kindKey) {
+      if (!node->isObject()) {
+        // Error: node is not an object at position...
+      }
+      node = &((*node)[arg.key_]);
+    }
+  }
+  return *node;
+}
+
+} // namespace Json
+
+// //////////////////////////////////////////////////////////////////////
+// End of content of file: src/lib_json/json_value.cpp
+// //////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+// //////////////////////////////////////////////////////////////////////
+// Beginning of content of file: src/lib_json/json_writer.cpp
+// //////////////////////////////////////////////////////////////////////
+
+// Copyright 2011 Baptiste Lepilleur
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#if !defined(JSON_IS_AMALGAMATION)
+#include <json/writer.h>
+#include "json_tool.h"
+#endif // if !defined(JSON_IS_AMALGAMATION)
+#include <iomanip>
+#include <memory>
+#include <sstream>
+#include <utility>
+#include <set>
+#include <cassert>
+#include <cstring>
+#include <cstdio>
+
+#if defined(_MSC_VER) && _MSC_VER >= 1200 && _MSC_VER < 1800 // Between VC++ 6.0 and VC++ 11.0
+#include <float.h>
+#define isfinite _finite
+#elif defined(__sun) && defined(__SVR4) //Solaris
+#if !defined(isfinite)
+#include <ieeefp.h>
+#define isfinite finite
+#endif
+#elif defined(_AIX)
+#if !defined(isfinite)
+#include <math.h>
+#define isfinite finite
+#endif
+#elif defined(__hpux)
+#if !defined(isfinite)
+#if defined(__ia64) && !defined(finite)
+#define isfinite(x) ((sizeof(x) == sizeof(float) ? \
+                     _Isfinitef(x) : _IsFinite(x)))
+#else
+#include <math.h>
+#define isfinite finite
+#endif
+#endif
+#else
+#include <cmath>
+#if !(defined(__QNXNTO__)) // QNX already defines isfinite
+#define isfinite std::isfinite
+#endif
+#endif
+
+#if defined(_MSC_VER)
+#if !defined(WINCE) && defined(__STDC_SECURE_LIB__) && _MSC_VER >= 1500 // VC++ 9.0 and above
+#define snprintf sprintf_s
+#elif _MSC_VER >= 1900 // VC++ 14.0 and above
+#define snprintf std::snprintf
+#else
+#define snprintf _snprintf
+#endif
+#elif defined(__ANDROID__) || defined(__QNXNTO__)
+#define snprintf snprintf
+#elif __cplusplus >= 201103L
+#if !defined(__MINGW32__) && !defined(__CYGWIN__)
+#define snprintf std::snprintf
+#endif
+#endif
+
+#if defined(__BORLANDC__)  
+#include <float.h>
+#define isfinite _finite
+#define snprintf _snprintf
+#endif
+
+#if defined(_MSC_VER) && _MSC_VER >= 1400 // VC++ 8.0
+// Disable warning about strdup being deprecated.
+#pragma warning(disable : 4996)
+#endif
+
+namespace Json {
+
+#if __cplusplus >= 201103L || (defined(_CPPLIB_VER) && _CPPLIB_VER >= 520)
+typedef std::unique_ptr<StreamWriter> StreamWriterPtr;
+#else
+typedef std::auto_ptr<StreamWriter>   StreamWriterPtr;
+#endif
+
+static bool containsControlCharacter(const char* str) {
+  while (*str) {
+    if (isControlCharacter(*(str++)))
+      return true;
+  }
+  return false;
+}
+
+static bool containsControlCharacter0(const char* str, unsigned len) {
+  char const* end = str + len;
+  while (end != str) {
+    if (isControlCharacter(*str) || 0==*str)
+      return true;
+    ++str;
+  }
+  return false;
+}
+
+JSONCPP_STRING valueToString(LargestInt value) {
+  UIntToStringBuffer buffer;
+  char* current = buffer + sizeof(buffer);
+  if (value == Value::minLargestInt) {
+    uintToString(LargestUInt(Value::maxLargestInt) + 1, current);
+    *--current = '-';
+  } else if (value < 0) {
+    uintToString(LargestUInt(-value), current);
+    *--current = '-';
+  } else {
+    uintToString(LargestUInt(value), current);
+  }
+  assert(current >= buffer);
+  return current;
+}
+
+JSONCPP_STRING valueToString(LargestUInt value) {
+  UIntToStringBuffer buffer;
+  char* current = buffer + sizeof(buffer);
+  uintToString(value, current);
+  assert(current >= buffer);
+  return current;
+}
+
+#if defined(JSON_HAS_INT64)
+
+JSONCPP_STRING valueToString(Int value) {
+  return valueToString(LargestInt(value));
+}
+
+JSONCPP_STRING valueToString(UInt value) {
+  return valueToString(LargestUInt(value));
+}
+
+#endif // # if defined(JSON_HAS_INT64)
+
+JSONCPP_STRING valueToString(double value, bool useSpecialFloats, unsigned int precision) {
+  // Allocate a buffer that is more than large enough to store the 16 digits of
+  // precision requested below.
+  char buffer[32];
+  int len = -1;
+
+  char formatString[6];
+  sprintf(formatString, "%%.%dg", precision);
+
+  // Print into the buffer. We need not request the alternative representation
+  // that always has a decimal point because JSON doesn't distingish the
+  // concepts of reals and integers.
+  if (isfinite(value)) {
+    len = snprintf(buffer, sizeof(buffer), formatString, value);
+  } else {
+    // IEEE standard states that NaN values will not compare to themselves
+    if (value != value) {
+      len = snprintf(buffer, sizeof(buffer), useSpecialFloats ? "NaN" : "null");
+    } else if (value < 0) {
+      len = snprintf(buffer, sizeof(buffer), useSpecialFloats ? "-Infinity" : "-1e+9999");
+    } else {
+      len = snprintf(buffer, sizeof(buffer), useSpecialFloats ? "Infinity" : "1e+9999");
+    }
+    // For those, we do not need to call fixNumLoc, but it is fast.
+  }
+  assert(len >= 0);
+  fixNumericLocale(buffer, buffer + len);
+  return buffer;
+}
+
+JSONCPP_STRING valueToString(double value) { return valueToString(value, false, 17); }
+
+JSONCPP_STRING valueToString(bool value) { return value ? "true" : "false"; }
+
+JSONCPP_STRING valueToQuotedString(const char* value) {
+  if (value == NULL)
+    return "";
+  // Not sure how to handle unicode...
+  if (strpbrk(value, "\"\\\b\f\n\r\t") == NULL &&
+      !containsControlCharacter(value))
+    return JSONCPP_STRING("\"") + value + "\"";
+  // We have to walk value and escape any special characters.
+  // Appending to JSONCPP_STRING is not efficient, but this should be rare.
+  // (Note: forward slashes are *not* rare, but I am not escaping them.)
+  JSONCPP_STRING::size_type maxsize =
+      strlen(value) * 2 + 3; // allescaped+quotes+NULL
+  JSONCPP_STRING result;
+  result.reserve(maxsize); // to avoid lots of mallocs
+  result += "\"";
+  for (const char* c = value; *c != 0; ++c) {
+    switch (*c) {
+    case '\"':
+      result += "\\\"";
+      break;
+    case '\\':
+      result += "\\\\";
+      break;
+    case '\b':
+      result += "\\b";
+      break;
+    case '\f':
+      result += "\\f";
+      break;
+    case '\n':
+      result += "\\n";
+      break;
+    case '\r':
+      result += "\\r";
+      break;
+    case '\t':
+      result += "\\t";
+      break;
+    // case '/':
+    // Even though \/ is considered a legal escape in JSON, a bare
+    // slash is also legal, so I see no reason to escape it.
+    // (I hope I am not misunderstanding something.
+    // blep notes: actually escaping \/ may be useful in javascript to avoid </
+    // sequence.
+    // Should add a flag to allow this compatibility mode and prevent this
+    // sequence from occurring.
+    default:
+      if (isControlCharacter(*c)) {
+        JSONCPP_OSTRINGSTREAM oss;
+        oss << "\\u" << std::hex << std::uppercase << std::setfill('0')
+            << std::setw(4) << static_cast<int>(*c);
+        result += oss.str();
+      } else {
+        result += *c;
+      }
+      break;
+    }
+  }
+  result += "\"";
+  return result;
+}
+
+// https://github.com/upcaste/upcaste/blob/master/src/upcore/src/cstring/strnpbrk.cpp
+static char const* strnpbrk(char const* s, char const* accept, size_t n) {
+  assert((s || !n) && accept);
+
+  char const* const end = s + n;
+  for (char const* cur = s; cur < end; ++cur) {
+    int const c = *cur;
+    for (char const* a = accept; *a; ++a) {
+      if (*a == c) {
+        return cur;
+      }
+    }
+  }
+  return NULL;
+}
+static JSONCPP_STRING valueToQuotedStringN(const char* value, unsigned length) {
+  if (value == NULL)
+    return "";
+  // Not sure how to handle unicode...
+  if (strnpbrk(value, "\"\\\b\f\n\r\t", length) == NULL &&
+      !containsControlCharacter0(value, length))
+    return JSONCPP_STRING("\"") + value + "\"";
+  // We have to walk value and escape any special characters.
+  // Appending to JSONCPP_STRING is not efficient, but this should be rare.
+  // (Note: forward slashes are *not* rare, but I am not escaping them.)
+  JSONCPP_STRING::size_type maxsize =
+      length * 2 + 3; // allescaped+quotes+NULL
+  JSONCPP_STRING result;
+  result.reserve(maxsize); // to avoid lots of mallocs
+  result += "\"";
+  char const* end = value + length;
+  for (const char* c = value; c != end; ++c) {
+    switch (*c) {
+    case '\"':
+      result += "\\\"";
+      break;
+    case '\\':
+      result += "\\\\";
+      break;
+    case '\b':
+      result += "\\b";
+      break;
+    case '\f':
+      result += "\\f";
+      break;
+    case '\n':
+      result += "\\n";
+      break;
+    case '\r':
+      result += "\\r";
+      break;
+    case '\t':
+      result += "\\t";
+      break;
+    // case '/':
+    // Even though \/ is considered a legal escape in JSON, a bare
+    // slash is also legal, so I see no reason to escape it.
+    // (I hope I am not misunderstanding something.)
+    // blep notes: actually escaping \/ may be useful in javascript to avoid </
+    // sequence.
+    // Should add a flag to allow this compatibility mode and prevent this
+    // sequence from occurring.
+    default:
+      if ((isControlCharacter(*c)) || (*c == 0)) {
+        JSONCPP_OSTRINGSTREAM oss;
+        oss << "\\u" << std::hex << std::uppercase << std::setfill('0')
+            << std::setw(4) << static_cast<int>(*c);
+        result += oss.str();
+      } else {
+        result += *c;
+      }
+      break;
+    }
+  }
+  result += "\"";
+  return result;
+}
+
+// Class Writer
+// //////////////////////////////////////////////////////////////////
+Writer::~Writer() {}
+
+// Class FastWriter
+// //////////////////////////////////////////////////////////////////
+
+FastWriter::FastWriter()
+    : yamlCompatiblityEnabled_(false), dropNullPlaceholders_(false),
+      omitEndingLineFeed_(false) {}
+
+void FastWriter::enableYAMLCompatibility() { yamlCompatiblityEnabled_ = true; }
+
+void FastWriter::dropNullPlaceholders() { dropNullPlaceholders_ = true; }
+
+void FastWriter::omitEndingLineFeed() { omitEndingLineFeed_ = true; }
+
+JSONCPP_STRING FastWriter::write(const Value& root) {
+  document_ = "";
+  writeValue(root);
+  if (!omitEndingLineFeed_)
+    document_ += "\n";
+  return document_;
+}
+
+void FastWriter::writeValue(const Value& value) {
+  switch (value.type()) {
+  case nullValue:
+    if (!dropNullPlaceholders_)
+      document_ += "null";
+    break;
+  case intValue:
+    document_ += valueToString(value.asLargestInt());
+    break;
+  case uintValue:
+    document_ += valueToString(value.asLargestUInt());
+    break;
+  case realValue:
+    document_ += valueToString(value.asDouble());
+    break;
+  case stringValue:
+  {
+    // Is NULL possible for value.string_?
+    char const* str;
+    char const* end;
+    bool ok = value.getString(&str, &end);
+    if (ok) document_ += valueToQuotedStringN(str, static_cast<unsigned>(end-str));
+    break;
+  }
+  case booleanValue:
+    document_ += valueToString(value.asBool());
+    break;
+  case arrayValue: {
+    document_ += '[';
+    ArrayIndex size = value.size();
+    for (ArrayIndex index = 0; index < size; ++index) {
+      if (index > 0)
+        document_ += ',';
+      writeValue(value[index]);
+    }
+    document_ += ']';
+  } break;
+  case objectValue: {
+    Value::Members members(value.getMemberNames());
+    document_ += '{';
+    for (Value::Members::iterator it = members.begin(); it != members.end();
+         ++it) {
+      const JSONCPP_STRING& name = *it;
+      if (it != members.begin())
+        document_ += ',';
+      document_ += valueToQuotedStringN(name.data(), static_cast<unsigned>(name.length()));
+      document_ += yamlCompatiblityEnabled_ ? ": " : ":";
+      writeValue(value[name]);
+    }
+    document_ += '}';
+  } break;
+  }
+}
+
+// Class StyledWriter
+// //////////////////////////////////////////////////////////////////
+
+StyledWriter::StyledWriter()
+    : rightMargin_(74), indentSize_(3), addChildValues_() {}
+
+JSONCPP_STRING StyledWriter::write(const Value& root) {
+  document_ = "";
+  addChildValues_ = false;
+  indentString_ = "";
+  writeCommentBeforeValue(root);
+  writeValue(root);
+  writeCommentAfterValueOnSameLine(root);
+  document_ += "\n";
+  return document_;
+}
+
+void StyledWriter::writeValue(const Value& value) {
+  switch (value.type()) {
+  case nullValue:
+    pushValue("null");
+    break;
+  case intValue:
+    pushValue(valueToString(value.asLargestInt()));
+    break;
+  case uintValue:
+    pushValue(valueToString(value.asLargestUInt()));
+    break;
+  case realValue:
+    pushValue(valueToString(value.asDouble()));
+    break;
+  case stringValue:
+  {
+    // Is NULL possible for value.string_?
+    char const* str;
+    char const* end;
+    bool ok = value.getString(&str, &end);
+    if (ok) pushValue(valueToQuotedStringN(str, static_cast<unsigned>(end-str)));
+    else pushValue("");
+    break;
+  }
+  case booleanValue:
+    pushValue(valueToString(value.asBool()));
+    break;
+  case arrayValue:
+    writeArrayValue(value);
+    break;
+  case objectValue: {
+    Value::Members members(value.getMemberNames());
+    if (members.empty())
+      pushValue("{}");
+    else {
+      writeWithIndent("{");
+      indent();
+      Value::Members::iterator it = members.begin();
+      for (;;) {
+        const JSONCPP_STRING& name = *it;
+        const Value& childValue = value[name];
+        writeCommentBeforeValue(childValue);
+        writeWithIndent(valueToQuotedString(name.c_str()));
+        document_ += " : ";
+        writeValue(childValue);
+        if (++it == members.end()) {
+          writeCommentAfterValueOnSameLine(childValue);
+          break;
+        }
+        document_ += ',';
+        writeCommentAfterValueOnSameLine(childValue);
+      }
+      unindent();
+      writeWithIndent("}");
+    }
+  } break;
+  }
+}
+
+void StyledWriter::writeArrayValue(const Value& value) {
+  unsigned size = value.size();
+  if (size == 0)
+    pushValue("[]");
+  else {
+    bool isArrayMultiLine = isMultineArray(value);
+    if (isArrayMultiLine) {
+      writeWithIndent("[");
+      indent();
+      bool hasChildValue = !childValues_.empty();
+      unsigned index = 0;
+      for (;;) {
+        const Value& childValue = value[index];
+        writeCommentBeforeValue(childValue);
+        if (hasChildValue)
+          writeWithIndent(childValues_[index]);
+        else {
+          writeIndent();
+          writeValue(childValue);
+        }
+        if (++index == size) {
+          writeCommentAfterValueOnSameLine(childValue);
+          break;
+        }
+        document_ += ',';
+        writeCommentAfterValueOnSameLine(childValue);
+      }
+      unindent();
+      writeWithIndent("]");
+    } else // output on a single line
+    {
+      assert(childValues_.size() == size);
+      document_ += "[ ";
+      for (unsigned index = 0; index < size; ++index) {
+        if (index > 0)
+          document_ += ", ";
+        document_ += childValues_[index];
+      }
+      document_ += " ]";
+    }
+  }
+}
+
+bool StyledWriter::isMultineArray(const Value& value) {
+  ArrayIndex const size = value.size();
+  bool isMultiLine = size * 3 >= rightMargin_;
+  childValues_.clear();
+  for (ArrayIndex index = 0; index < size && !isMultiLine; ++index) {
+    const Value& childValue = value[index];
+    isMultiLine = ((childValue.isArray() || childValue.isObject()) &&
+                        childValue.size() > 0);
+  }
+  if (!isMultiLine) // check if line length > max line length
+  {
+    childValues_.reserve(size);
+    addChildValues_ = true;
+    ArrayIndex lineLength = 4 + (size - 1) * 2; // '[ ' + ', '*n + ' ]'
+    for (ArrayIndex index = 0; index < size; ++index) {
+      if (hasCommentForValue(value[index])) {
+        isMultiLine = true;
+      }
+      writeValue(value[index]);
+      lineLength += static_cast<ArrayIndex>(childValues_[index].length());
+    }
+    addChildValues_ = false;
+    isMultiLine = isMultiLine || lineLength >= rightMargin_;
+  }
+  return isMultiLine;
+}
+
+void StyledWriter::pushValue(const JSONCPP_STRING& value) {
+  if (addChildValues_)
+    childValues_.push_back(value);
+  else
+    document_ += value;
+}
+
+void StyledWriter::writeIndent() {
+  if (!document_.empty()) {
+    char last = document_[document_.length() - 1];
+    if (last == ' ') // already indented
+      return;
+    if (last != '\n') // Comments may add new-line
+      document_ += '\n';
+  }
+  document_ += indentString_;
+}
+
+void StyledWriter::writeWithIndent(const JSONCPP_STRING& value) {
+  writeIndent();
+  document_ += value;
+}
+
+void StyledWriter::indent() { indentString_ += JSONCPP_STRING(indentSize_, ' '); }
+
+void StyledWriter::unindent() {
+  assert(indentString_.size() >= indentSize_);
+  indentString_.resize(indentString_.size() - indentSize_);
+}
+
+void StyledWriter::writeCommentBeforeValue(const Value& root) {
+  if (!root.hasComment(commentBefore))
+    return;
+
+  document_ += "\n";
+  writeIndent();
+  const JSONCPP_STRING& comment = root.getComment(commentBefore);
+  JSONCPP_STRING::const_iterator iter = comment.begin();
+  while (iter != comment.end()) {
+    document_ += *iter;
+    if (*iter == '\n' &&
+       (iter != comment.end() && *(iter + 1) == '/'))
+      writeIndent();
+    ++iter;
+  }
+
+  // Comments are stripped of trailing newlines, so add one here
+  document_ += "\n";
+}
+
+void StyledWriter::writeCommentAfterValueOnSameLine(const Value& root) {
+  if (root.hasComment(commentAfterOnSameLine))
+    document_ += " " + root.getComment(commentAfterOnSameLine);
+
+  if (root.hasComment(commentAfter)) {
+    document_ += "\n";
+    document_ += root.getComment(commentAfter);
+    document_ += "\n";
+  }
+}
+
+bool StyledWriter::hasCommentForValue(const Value& value) {
+  return value.hasComment(commentBefore) ||
+         value.hasComment(commentAfterOnSameLine) ||
+         value.hasComment(commentAfter);
+}
+
+// Class StyledStreamWriter
+// //////////////////////////////////////////////////////////////////
+
+StyledStreamWriter::StyledStreamWriter(JSONCPP_STRING indentation)
+    : document_(NULL), rightMargin_(74), indentation_(indentation),
+      addChildValues_() {}
+
+void StyledStreamWriter::write(JSONCPP_OSTREAM& out, const Value& root) {
+  document_ = &out;
+  addChildValues_ = false;
+  indentString_ = "";
+  indented_ = true;
+  writeCommentBeforeValue(root);
+  if (!indented_) writeIndent();
+  indented_ = true;
+  writeValue(root);
+  writeCommentAfterValueOnSameLine(root);
+  *document_ << "\n";
+  document_ = NULL; // Forget the stream, for safety.
+}
+
+void StyledStreamWriter::writeValue(const Value& value) {
+  switch (value.type()) {
+  case nullValue:
+    pushValue("null");
+    break;
+  case intValue:
+    pushValue(valueToString(value.asLargestInt()));
+    break;
+  case uintValue:
+    pushValue(valueToString(value.asLargestUInt()));
+    break;
+  case realValue:
+    pushValue(valueToString(value.asDouble()));
+    break;
+  case stringValue:
+  {
+    // Is NULL possible for value.string_?
+    char const* str;
+    char const* end;
+    bool ok = value.getString(&str, &end);
+    if (ok) pushValue(valueToQuotedStringN(str, static_cast<unsigned>(end-str)));
+    else pushValue("");
+    break;
+  }
+  case booleanValue:
+    pushValue(valueToString(value.asBool()));
+    break;
+  case arrayValue:
+    writeArrayValue(value);
+    break;
+  case objectValue: {
+    Value::Members members(value.getMemberNames());
+    if (members.empty())
+      pushValue("{}");
+    else {
+      writeWithIndent("{");
+      indent();
+      Value::Members::iterator it = members.begin();
+      for (;;) {
+        const JSONCPP_STRING& name = *it;
+        const Value& childValue = value[name];
+        writeCommentBeforeValue(childValue);
+        writeWithIndent(valueToQuotedString(name.c_str()));
+        *document_ << " : ";
+        writeValue(childValue);
+        if (++it == members.end()) {
+          writeCommentAfterValueOnSameLine(childValue);
+          break;
+        }
+        *document_ << ",";
+        writeCommentAfterValueOnSameLine(childValue);
+      }
+      unindent();
+      writeWithIndent("}");
+    }
+  } break;
+  }
+}
+
+void StyledStreamWriter::writeArrayValue(const Value& value) {
+  unsigned size = value.size();
+  if (size == 0)
+    pushValue("[]");
+  else {
+    bool isArrayMultiLine = isMultineArray(value);
+    if (isArrayMultiLine) {
+      writeWithIndent("[");
+      indent();
+      bool hasChildValue = !childValues_.empty();
+      unsigned index = 0;
+      for (;;) {
+        const Value& childValue = value[index];
+        writeCommentBeforeValue(childValue);
+        if (hasChildValue)
+          writeWithIndent(childValues_[index]);
+        else {
+          if (!indented_) writeIndent();
+          indented_ = true;
+          writeValue(childValue);
+          indented_ = false;
+        }
+        if (++index == size) {
+          writeCommentAfterValueOnSameLine(childValue);
+          break;
+        }
+        *document_ << ",";
+        writeCommentAfterValueOnSameLine(childValue);
+      }
+      unindent();
+      writeWithIndent("]");
+    } else // output on a single line
+    {
+      assert(childValues_.size() == size);
+      *document_ << "[ ";
+      for (unsigned index = 0; index < size; ++index) {
+        if (index > 0)
+          *document_ << ", ";
+        *document_ << childValues_[index];
+      }
+      *document_ << " ]";
+    }
+  }
+}
+
+bool StyledStreamWriter::isMultineArray(const Value& value) {
+  ArrayIndex const size = value.size();
+  bool isMultiLine = size * 3 >= rightMargin_;
+  childValues_.clear();
+  for (ArrayIndex index = 0; index < size && !isMultiLine; ++index) {
+    const Value& childValue = value[index];
+    isMultiLine = ((childValue.isArray() || childValue.isObject()) &&
+                        childValue.size() > 0);
+  }
+  if (!isMultiLine) // check if line length > max line length
+  {
+    childValues_.reserve(size);
+    addChildValues_ = true;
+    ArrayIndex lineLength = 4 + (size - 1) * 2; // '[ ' + ', '*n + ' ]'
+    for (ArrayIndex index = 0; index < size; ++index) {
+      if (hasCommentForValue(value[index])) {
+        isMultiLine = true;
+      }
+      writeValue(value[index]);
+      lineLength += static_cast<ArrayIndex>(childValues_[index].length());
+    }
+    addChildValues_ = false;
+    isMultiLine = isMultiLine || lineLength >= rightMargin_;
+  }
+  return isMultiLine;
+}
+
+void StyledStreamWriter::pushValue(const JSONCPP_STRING& value) {
+  if (addChildValues_)
+    childValues_.push_back(value);
+  else
+    *document_ << value;
+}
+
+void StyledStreamWriter::writeIndent() {
+  // blep intended this to look at the so-far-written string
+  // to determine whether we are already indented, but
+  // with a stream we cannot do that. So we rely on some saved state.
+  // The caller checks indented_.
+  *document_ << '\n' << indentString_;
+}
+
+void StyledStreamWriter::writeWithIndent(const JSONCPP_STRING& value) {
+  if (!indented_) writeIndent();
+  *document_ << value;
+  indented_ = false;
+}
+
+void StyledStreamWriter::indent() { indentString_ += indentation_; }
+
+void StyledStreamWriter::unindent() {
+  assert(indentString_.size() >= indentation_.size());
+  indentString_.resize(indentString_.size() - indentation_.size());
+}
+
+void StyledStreamWriter::writeCommentBeforeValue(const Value& root) {
+  if (!root.hasComment(commentBefore))
+    return;
+
+  if (!indented_) writeIndent();
+  const JSONCPP_STRING& comment = root.getComment(commentBefore);
+  JSONCPP_STRING::const_iterator iter = comment.begin();
+  while (iter != comment.end()) {
+    *document_ << *iter;
+    if (*iter == '\n' &&
+       (iter != comment.end() && *(iter + 1) == '/'))
+      // writeIndent();  // would include newline
+      *document_ << indentString_;
+    ++iter;
+  }
+  indented_ = false;
+}
+
+void StyledStreamWriter::writeCommentAfterValueOnSameLine(const Value& root) {
+  if (root.hasComment(commentAfterOnSameLine))
+    *document_ << ' ' << root.getComment(commentAfterOnSameLine);
+
+  if (root.hasComment(commentAfter)) {
+    writeIndent();
+    *document_ << root.getComment(commentAfter);
+  }
+  indented_ = false;
+}
+
+bool StyledStreamWriter::hasCommentForValue(const Value& value) {
+  return value.hasComment(commentBefore) ||
+         value.hasComment(commentAfterOnSameLine) ||
+         value.hasComment(commentAfter);
+}
+
+//////////////////////////
+// BuiltStyledStreamWriter
+
+/// Scoped enums are not available until C++11.
+struct CommentStyle {
+  /// Decide whether to write comments.
+  enum Enum {
+    None,  ///< Drop all comments.
+    Most,  ///< Recover odd behavior of previous versions (not implemented yet).
+    All  ///< Keep all comments.
+  };
+};
+
+struct BuiltStyledStreamWriter : public StreamWriter
+{
+  BuiltStyledStreamWriter(
+      JSONCPP_STRING const& indentation,
+      CommentStyle::Enum cs,
+      JSONCPP_STRING const& colonSymbol,
+      JSONCPP_STRING const& nullSymbol,
+      JSONCPP_STRING const& endingLineFeedSymbol,
+      bool useSpecialFloats,
+      unsigned int precision);
+  int write(Value const& root, JSONCPP_OSTREAM* sout) JSONCPP_OVERRIDE;
+private:
+  void writeValue(Value const& value);
+  void writeArrayValue(Value const& value);
+  bool isMultineArray(Value const& value);
+  void pushValue(JSONCPP_STRING const& value);
+  void writeIndent();
+  void writeWithIndent(JSONCPP_STRING const& value);
+  void indent();
+  void unindent();
+  void writeCommentBeforeValue(Value const& root);
+  void writeCommentAfterValueOnSameLine(Value const& root);
+  static bool hasCommentForValue(const Value& value);
+
+  typedef std::vector<JSONCPP_STRING> ChildValues;
+
+  ChildValues childValues_;
+  JSONCPP_STRING indentString_;
+  unsigned int rightMargin_;
+  JSONCPP_STRING indentation_;
+  CommentStyle::Enum cs_;
+  JSONCPP_STRING colonSymbol_;
+  JSONCPP_STRING nullSymbol_;
+  JSONCPP_STRING endingLineFeedSymbol_;
+  bool addChildValues_ : 1;
+  bool indented_ : 1;
+  bool useSpecialFloats_ : 1;
+  unsigned int precision_;
+};
+BuiltStyledStreamWriter::BuiltStyledStreamWriter(
+      JSONCPP_STRING const& indentation,
+      CommentStyle::Enum cs,
+      JSONCPP_STRING const& colonSymbol,
+      JSONCPP_STRING const& nullSymbol,
+      JSONCPP_STRING const& endingLineFeedSymbol,
+      bool useSpecialFloats,
+      unsigned int precision)
+  : rightMargin_(74)
+  , indentation_(indentation)
+  , cs_(cs)
+  , colonSymbol_(colonSymbol)
+  , nullSymbol_(nullSymbol)
+  , endingLineFeedSymbol_(endingLineFeedSymbol)
+  , addChildValues_(false)
+  , indented_(false)
+  , useSpecialFloats_(useSpecialFloats)
+  , precision_(precision)
+{
+}
+int BuiltStyledStreamWriter::write(Value const& root, JSONCPP_OSTREAM* sout)
+{
+  sout_ = sout;
+  addChildValues_ = false;
+  indented_ = true;
+  indentString_ = "";
+  writeCommentBeforeValue(root);
+  if (!indented_) writeIndent();
+  indented_ = true;
+  writeValue(root);
+  writeCommentAfterValueOnSameLine(root);
+  *sout_ << endingLineFeedSymbol_;
+  sout_ = NULL;
+  return 0;
+}
+void BuiltStyledStreamWriter::writeValue(Value const& value) {
+  switch (value.type()) {
+  case nullValue:
+    pushValue(nullSymbol_);
+    break;
+  case intValue:
+    pushValue(valueToString(value.asLargestInt()));
+    break;
+  case uintValue:
+    pushValue(valueToString(value.asLargestUInt()));
+    break;
+  case realValue:
+    pushValue(valueToString(value.asDouble(), useSpecialFloats_, precision_));
+    break;
+  case stringValue:
+  {
+    // Is NULL is possible for value.string_?
+    char const* str;
+    char const* end;
+    bool ok = value.getString(&str, &end);
+    if (ok) pushValue(valueToQuotedStringN(str, static_cast<unsigned>(end-str)));
+    else pushValue("");
+    break;
+  }
+  case booleanValue:
+    pushValue(valueToString(value.asBool()));
+    break;
+  case arrayValue:
+    writeArrayValue(value);
+    break;
+  case objectValue: {
+    Value::Members members(value.getMemberNames());
+    if (members.empty())
+      pushValue("{}");
+    else {
+      writeWithIndent("{");
+      indent();
+      Value::Members::iterator it = members.begin();
+      for (;;) {
+        JSONCPP_STRING const& name = *it;
+        Value const& childValue = value[name];
+        writeCommentBeforeValue(childValue);
+        writeWithIndent(valueToQuotedStringN(name.data(), static_cast<unsigned>(name.length())));
+        *sout_ << colonSymbol_;
+        writeValue(childValue);
+        if (++it == members.end()) {
+          writeCommentAfterValueOnSameLine(childValue);
+          break;
+        }
+        *sout_ << ",";
+        writeCommentAfterValueOnSameLine(childValue);
+      }
+      unindent();
+      writeWithIndent("}");
+    }
+  } break;
+  }
+}
+
+void BuiltStyledStreamWriter::writeArrayValue(Value const& value) {
+  unsigned size = value.size();
+  if (size == 0)
+    pushValue("[]");
+  else {
+    bool isMultiLine = (cs_ == CommentStyle::All) || isMultineArray(value);
+    if (isMultiLine) {
+      writeWithIndent("[");
+      indent();
+      bool hasChildValue = !childValues_.empty();
+      unsigned index = 0;
+      for (;;) {
+        Value const& childValue = value[index];
+        writeCommentBeforeValue(childValue);
+        if (hasChildValue)
+          writeWithIndent(childValues_[index]);
+        else {
+          if (!indented_) writeIndent();
+          indented_ = true;
+          writeValue(childValue);
+          indented_ = false;
+        }
+        if (++index == size) {
+          writeCommentAfterValueOnSameLine(childValue);
+          break;
+        }
+        *sout_ << ",";
+        writeCommentAfterValueOnSameLine(childValue);
+      }
+      unindent();
+      writeWithIndent("]");
+    } else // output on a single line
+    {
+      assert(childValues_.size() == size);
+      *sout_ << "[";
+      if (!indentation_.empty()) *sout_ << " ";
+      for (unsigned index = 0; index < size; ++index) {
+        if (index > 0)
+          *sout_ << ", ";
+        *sout_ << childValues_[index];
+      }
+      if (!indentation_.empty()) *sout_ << " ";
+      *sout_ << "]";
+    }
+  }
+}
+
+bool BuiltStyledStreamWriter::isMultineArray(Value const& value) {
+  ArrayIndex const size = value.size();
+  bool isMultiLine = size * 3 >= rightMargin_;
+  childValues_.clear();
+  for (ArrayIndex index = 0; index < size && !isMultiLine; ++index) {
+    Value const& childValue = value[index];
+    isMultiLine = ((childValue.isArray() || childValue.isObject()) &&
+                        childValue.size() > 0);
+  }
+  if (!isMultiLine) // check if line length > max line length
+  {
+    childValues_.reserve(size);
+    addChildValues_ = true;
+    ArrayIndex lineLength = 4 + (size - 1) * 2; // '[ ' + ', '*n + ' ]'
+    for (ArrayIndex index = 0; index < size; ++index) {
+      if (hasCommentForValue(value[index])) {
+        isMultiLine = true;
+      }
+      writeValue(value[index]);
+      lineLength += static_cast<ArrayIndex>(childValues_[index].length());
+    }
+    addChildValues_ = false;
+    isMultiLine = isMultiLine || lineLength >= rightMargin_;
+  }
+  return isMultiLine;
+}
+
+void BuiltStyledStreamWriter::pushValue(JSONCPP_STRING const& value) {
+  if (addChildValues_)
+    childValues_.push_back(value);
+  else
+    *sout_ << value;
+}
+
+void BuiltStyledStreamWriter::writeIndent() {
+  // blep intended this to look at the so-far-written string
+  // to determine whether we are already indented, but
+  // with a stream we cannot do that. So we rely on some saved state.
+  // The caller checks indented_.
+
+  if (!indentation_.empty()) {
+    // In this case, drop newlines too.
+    *sout_ << '\n' << indentString_;
+  }
+}
+
+void BuiltStyledStreamWriter::writeWithIndent(JSONCPP_STRING const& value) {
+  if (!indented_) writeIndent();
+  *sout_ << value;
+  indented_ = false;
+}
+
+void BuiltStyledStreamWriter::indent() { indentString_ += indentation_; }
+
+void BuiltStyledStreamWriter::unindent() {
+  assert(indentString_.size() >= indentation_.size());
+  indentString_.resize(indentString_.size() - indentation_.size());
+}
+
+void BuiltStyledStreamWriter::writeCommentBeforeValue(Value const& root) {
+  if (cs_ == CommentStyle::None) return;
+  if (!root.hasComment(commentBefore))
+    return;
+
+  if (!indented_) writeIndent();
+  const JSONCPP_STRING& comment = root.getComment(commentBefore);
+  JSONCPP_STRING::const_iterator iter = comment.begin();
+  while (iter != comment.end()) {
+    *sout_ << *iter;
+    if (*iter == '\n' &&
+       (iter != comment.end() && *(iter + 1) == '/'))
+      // writeIndent();  // would write extra newline
+      *sout_ << indentString_;
+    ++iter;
+  }
+  indented_ = false;
+}
+
+void BuiltStyledStreamWriter::writeCommentAfterValueOnSameLine(Value const& root) {
+  if (cs_ == CommentStyle::None) return;
+  if (root.hasComment(commentAfterOnSameLine))
+    *sout_ << " " + root.getComment(commentAfterOnSameLine);
+
+  if (root.hasComment(commentAfter)) {
+    writeIndent();
+    *sout_ << root.getComment(commentAfter);
+  }
+}
+
+// static
+bool BuiltStyledStreamWriter::hasCommentForValue(const Value& value) {
+  return value.hasComment(commentBefore) ||
+         value.hasComment(commentAfterOnSameLine) ||
+         value.hasComment(commentAfter);
+}
+
+///////////////
+// StreamWriter
+
+StreamWriter::StreamWriter()
+    : sout_(NULL)
+{
+}
+StreamWriter::~StreamWriter()
+{
+}
+StreamWriter::Factory::~Factory()
+{}
+StreamWriterBuilder::StreamWriterBuilder()
+{
+  setDefaults(&settings_);
+}
+StreamWriterBuilder::~StreamWriterBuilder()
+{}
+StreamWriter* StreamWriterBuilder::newStreamWriter() const
+{
+  JSONCPP_STRING indentation = settings_["indentation"].asString();
+  JSONCPP_STRING cs_str = settings_["commentStyle"].asString();
+  bool eyc = settings_["enableYAMLCompatibility"].asBool();
+  bool dnp = settings_["dropNullPlaceholders"].asBool();
+  bool usf = settings_["useSpecialFloats"].asBool(); 
+  unsigned int pre = settings_["precision"].asUInt();
+  CommentStyle::Enum cs = CommentStyle::All;
+  if (cs_str == "All") {
+    cs = CommentStyle::All;
+  } else if (cs_str == "None") {
+    cs = CommentStyle::None;
+  } else {
+    throwRuntimeError("commentStyle must be 'All' or 'None'");
+  }
+  JSONCPP_STRING colonSymbol = " : ";
+  if (eyc) {
+    colonSymbol = ": ";
+  } else if (indentation.empty()) {
+    colonSymbol = ":";
+  }
+  JSONCPP_STRING nullSymbol = "null";
+  if (dnp) {
+    nullSymbol = "";
+  }
+  if (pre > 17) pre = 17;
+  JSONCPP_STRING endingLineFeedSymbol = "";
+  return new BuiltStyledStreamWriter(
+      indentation, cs,
+      colonSymbol, nullSymbol, endingLineFeedSymbol, usf, pre);
+}
+static void getValidWriterKeys(std::set<JSONCPP_STRING>* valid_keys)
+{
+  valid_keys->clear();
+  valid_keys->insert("indentation");
+  valid_keys->insert("commentStyle");
+  valid_keys->insert("enableYAMLCompatibility");
+  valid_keys->insert("dropNullPlaceholders");
+  valid_keys->insert("useSpecialFloats");
+  valid_keys->insert("precision");
+}
+bool StreamWriterBuilder::validate(Json::Value* invalid) const
+{
+  Json::Value my_invalid;
+  if (!invalid) invalid = &my_invalid;  // so we do not need to test for NULL
+  Json::Value& inv = *invalid;
+  std::set<JSONCPP_STRING> valid_keys;
+  getValidWriterKeys(&valid_keys);
+  Value::Members keys = settings_.getMemberNames();
+  size_t n = keys.size();
+  for (size_t i = 0; i < n; ++i) {
+    JSONCPP_STRING const& key = keys[i];
+    if (valid_keys.find(key) == valid_keys.end()) {
+      inv[key] = settings_[key];
+    }
+  }
+  return 0u == inv.size();
+}
+Value& StreamWriterBuilder::operator[](JSONCPP_STRING key)
+{
+  return settings_[key];
+}
+// static
+void StreamWriterBuilder::setDefaults(Json::Value* settings)
+{
+  //! [StreamWriterBuilderDefaults]
+  (*settings)["commentStyle"] = "All";
+  (*settings)["indentation"] = "\t";
+  (*settings)["enableYAMLCompatibility"] = false;
+  (*settings)["dropNullPlaceholders"] = false;
+  (*settings)["useSpecialFloats"] = false;
+  (*settings)["precision"] = 17;
+  //! [StreamWriterBuilderDefaults]
+}
+
+JSONCPP_STRING writeString(StreamWriter::Factory const& builder, Value const& root) {
+  JSONCPP_OSTRINGSTREAM sout;
+  StreamWriterPtr const writer(builder.newStreamWriter());
+  writer->write(root, &sout);
+  return sout.str();
+}
+
+JSONCPP_OSTREAM& operator<<(JSONCPP_OSTREAM& sout, Value const& root) {
+  StreamWriterBuilder builder;
+  StreamWriterPtr const writer(builder.newStreamWriter());
+  writer->write(root, &sout);
+  return sout;
+}
+
+} // namespace Json
+
+// //////////////////////////////////////////////////////////////////////
+// End of content of file: src/lib_json/json_writer.cpp
+// //////////////////////////////////////////////////////////////////////
+
+
+
+
+
diff --git a/seqtoolsUtils/Makefile.am b/seqtoolsUtils/Makefile.am
new file mode 100644
index 0000000..8203ac0
--- /dev/null
+++ b/seqtoolsUtils/Makefile.am
@@ -0,0 +1,18 @@
+
+SUBDIRS = .
+
+include $(top_srcdir)/Makefile.am.common
+
+if USE_LIBCURL
+AM_CPPFLAGS += -DPFETCH_HTML
+endif
+
+noinst_LIBRARIES = libSeqtoolsUtils.a
+
+libSeqtoolsUtils_a_SOURCES = iupac.hpp version.hpp utilities.hpp utilities.cpp blxmsp.hpp blxmsp.cpp translate.cpp seqtoolsWebBrowser.cpp blxGff3Parser.hpp blxGff3Parser.cpp blxparser.hpp blxparser.cpp seqtoolsFetch.hpp seqtoolsFetch.cpp
+libSeqtoolsUtils_a_LIBADD  = 
+libSeqtoolsUtils_a_CFLAGS  =
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/seqtoolsUtils/Makefile.in
diff --git a/seqtoolsUtils/Makefile.in b/seqtoolsUtils/Makefile.in
new file mode 100644
index 0000000..fb23d01
--- /dev/null
+++ b/seqtoolsUtils/Makefile.in
@@ -0,0 +1,688 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 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@
+
+# Common settings for compiles.
+#
+
+VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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 = :
+DIST_COMMON = $(top_srcdir)/Makefile.am.common $(srcdir)/Makefile.in \
+	$(srcdir)/Makefile.am $(top_srcdir)/config/depcomp
+
+# If gbtools is in a subdirectory, add it to the include path
+ at USE_GBTOOLS_TRUE@am__append_1 = -I$(top_srcdir)/gbtools/src/include
+ at USE_LIBCURL_TRUE@am__append_2 = -DPFETCH_HTML
+subdir = seqtoolsUtils
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/./seqtools_version.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LIBRARIES = $(noinst_LIBRARIES)
+AR = ar
+ARFLAGS = cru
+AM_V_AR = $(am__v_AR_ at AM_V@)
+am__v_AR_ = $(am__v_AR_ at AM_DEFAULT_V@)
+am__v_AR_0 = @echo "  AR      " $@;
+am__v_AR_1 = 
+libSeqtoolsUtils_a_AR = $(AR) $(ARFLAGS)
+libSeqtoolsUtils_a_DEPENDENCIES =
+am_libSeqtoolsUtils_a_OBJECTS = utilities.$(OBJEXT) blxmsp.$(OBJEXT) \
+	translate.$(OBJEXT) seqtoolsWebBrowser.$(OBJEXT) \
+	blxGff3Parser.$(OBJEXT) blxparser.$(OBJEXT) \
+	seqtoolsFetch.$(OBJEXT)
+libSeqtoolsUtils_a_OBJECTS = $(am_libSeqtoolsUtils_a_OBJECTS)
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+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)
+AM_V_CXX = $(am__v_CXX_ at AM_V@)
+am__v_CXX_ = $(am__v_CXX_ at AM_DEFAULT_V@)
+am__v_CXX_0 = @echo "  CXX     " $@;
+am__v_CXX_1 = 
+CXXLD = $(CXX)
+CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+	-o $@
+AM_V_CXXLD = $(am__v_CXXLD_ at AM_V@)
+am__v_CXXLD_ = $(am__v_CXXLD_ at AM_DEFAULT_V@)
+am__v_CXXLD_0 = @echo "  CXXLD   " $@;
+am__v_CXXLD_1 = 
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = $(libSeqtoolsUtils_a_SOURCES)
+DIST_SOURCES = $(libSeqtoolsUtils_a_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-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 \
+	tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+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@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPS_CFLAGS = @DEPS_CFLAGS@
+DEPS_LIBS = @DEPS_LIBS@
+DEPS_SQLITE3_CFLAGS = @DEPS_SQLITE3_CFLAGS@
+DEPS_SQLITE3_LIBS = @DEPS_SQLITE3_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+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_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+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_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+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@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = .
+
+#AM_CPPFLAGS = -g -Wall $(DEPS_CFLAGS) -I$(top_srcdir)
+AM_CPPFLAGS = $(DEPS_CFLAGS) -I$(top_srcdir) $(am__append_1) \
+	$(am__append_2)
+AM_CXXFLAGS = -std=c++11 -g -Wall
+noinst_LIBRARIES = libSeqtoolsUtils.a
+libSeqtoolsUtils_a_SOURCES = iupac.hpp version.hpp utilities.hpp utilities.cpp blxmsp.hpp blxmsp.cpp translate.cpp seqtoolsWebBrowser.cpp blxGff3Parser.hpp blxGff3Parser.cpp blxparser.hpp blxparser.cpp seqtoolsFetch.hpp seqtoolsFetch.cpp
+libSeqtoolsUtils_a_LIBADD = 
+libSeqtoolsUtils_a_CFLAGS = 
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/seqtoolsUtils/Makefile.in
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .cpp .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(top_srcdir)/Makefile.am.common $(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 seqtoolsUtils/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign seqtoolsUtils/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_srcdir)/Makefile.am.common:
+
+$(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-noinstLIBRARIES:
+	-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
+
+libSeqtoolsUtils.a: $(libSeqtoolsUtils_a_OBJECTS) $(libSeqtoolsUtils_a_DEPENDENCIES) $(EXTRA_libSeqtoolsUtils_a_DEPENDENCIES) 
+	$(AM_V_at)-rm -f libSeqtoolsUtils.a
+	$(AM_V_AR)$(libSeqtoolsUtils_a_AR) libSeqtoolsUtils.a $(libSeqtoolsUtils_a_OBJECTS) $(libSeqtoolsUtils_a_LIBADD)
+	$(AM_V_at)$(RANLIB) libSeqtoolsUtils.a
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/blxGff3Parser.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/blxmsp.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/blxparser.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/seqtoolsFetch.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/seqtoolsWebBrowser.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/translate.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/utilities.Po at am__quote@
+
+.cpp.o:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+# 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.
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	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"
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	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; \
+	$(am__define_uniq_tagged_files); \
+	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-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	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"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+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 \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    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 $(LIBRARIES)
+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:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+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."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-recursive
+
+clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile 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 -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+	check-am clean clean-generic clean-noinstLIBRARIES \
+	cscopelist-am ctags ctags-am distclean distclean-compile \
+	distclean-generic 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-compile \
+	mostlyclean-generic pdf pdf-am ps ps-am tags tags-am 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/seqtoolsUtils/blxGff3Parser.cpp b/seqtoolsUtils/blxGff3Parser.cpp
new file mode 100644
index 0000000..1cd9687
--- /dev/null
+++ b/seqtoolsUtils/blxGff3Parser.cpp
@@ -0,0 +1,1700 @@
+/*  File: blxGff3parser.c
+ *  Author: Gemma Barson
+ *  Copyright (c) 2010 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: See blxGff3parser.h
+ *----------------------------------------------------------------------------
+ */
+
+#include <seqtoolsUtils/blxGff3Parser.hpp>
+#include <seqtoolsUtils/blxparser.hpp>
+#include <seqtoolsUtils/utilities.hpp>
+#include <seqtoolsUtils/blxmsp.hpp>
+#include <seqtoolsUtils/seqtoolsFetch.hpp>
+#include <string.h>
+#include <ctype.h>
+#include <string>
+#include <map>
+
+using namespace std;
+
+
+/* globals */
+static std::map<GQuark, BlxDataType*> g_dataTypes;
+
+
+#define SOURCE_DATA_TYPES_GROUP "source-data-types" /* group name for stanza where default data types are specified for sources */
+#define DATA_TYPE_TAG "dataType" /* tag name for dataType */
+
+
+/* Error codes and domain */
+#define BLX_GFF3_ERROR g_quark_from_string("GFF 3 parser")
+
+typedef enum {
+  BLX_GFF3_ERROR_INVALID_STRAND,	      /* invali strand in GFF3 input file */
+  BLX_GFF3_ERROR_INVALID_TYPE,                /* invalid type in GFF3 input file */
+  BLX_GFF3_ERROR_INVALID_NUM_TOKENS,          /* invalid number of columns from a line of the input file */
+  BLX_GFF3_ERROR_INVALID_TAG,                 /* invalid format for a tag/data pair */
+  BLX_GFF3_ERROR_INVALID_SEQ,                 /* invalid sequence data */
+  BLX_GFF3_ERROR_INVALID_SEQ_NAME,            /* invalid sequence name */
+  BLX_GFF3_ERROR_INVALID_CIGAR_FORMAT,        /* invalid CIGAR format */
+  BLX_GFF3_ERROR_INVALID_MSP,                 /* MSP has invalid/missing data */
+  BLX_GFF3_ERROR_INVALID_HEADER,              /* invalid header line */
+  BLX_GFF3_ERROR_UNKNOWN_MODE,                /* unknown blast mode */
+  BLX_GFF3_ERROR_BAD_COLOR,                   /* Bad color string found when parsing color */
+  BLX_GFF3_ERROR_OUT_OF_RANGE,                /* Feature/file is not in the reference sequence range */
+  BLX_GFF3_ERROR_DATA_TYPE                   /* Error finding data type */
+} BlxGff3Error;
+
+
+typedef enum {
+  BLX_GAP_STRING_INVALID,
+  BLX_GAP_STRING_GFF3,                        /* The Gap string used in GFF3 e.g. M23 D3 M10 I1 M20 */
+  BLX_GAP_STRING_BAM_CIGAR,                   /* The cigar format used by SAM/BAM, e.g. 23M3D10M1I20M */
+  BLX_GAP_STRING_ACEDB,                       /* Legacy acedb-style gaps string */
+} BlxGapFormat;
+
+
+/* Utility struct to compile GFF fields and attributes into */
+typedef struct _BlxGffData 
+  {
+    /* standard fields */
+    char *qName;	/* ref seq name */
+    char *source;	/* source */
+    BlxMspType mspType;	/* type (converted to display type) */
+    int qStart;		/* start coord on the ref seq */
+    int qEnd;		/* end coord on the ref seq */
+    gdouble score;	/* score */
+    gdouble percentId;  /* percent ID */
+    BlxStrand qStrand;	/* ref seq strand */
+    int phase;		/* phase */
+    
+    /* Attributes */
+    char *sName;	/* target name */
+    char *sName_orig;   /* target name with original case. */
+    BlxStrand sStrand;	/* target sequence strand */
+    int sStart;		/* target start coord */
+    int sEnd;		/* target end coord */
+    char *idTag;	/* ID of the item */
+    char *parentIdTag;	/* Parent ID of the item */
+    char *sequence;	/* sequence data */
+    char *gapString;	/* the gap string (cigar) */
+    BlxGapFormat gapFormat;    /* the format of the gap string */
+    GQuark dataType;    /* represents a string that should correspond to a data type in the config file */
+    GQuark filename;    /* optional filename e.g. for fetching data from a bam file */
+    char *fetchCommand; /* optional command which will be used for fetching sequence data */
+    char *fetchArgs;    /* optional command which will be used for fetching sequence data */
+  } BlxGffData;
+
+
+/* Data used while parsing a gap string */
+typedef struct _GapStringData
+{
+  BlxGapFormat gapFormat; /* the type of gap string e.g. cigar_bam */
+  MSP **msp;              /* the msp that the gap string is for */
+  int qDirection;         /* the direction we're parsing the reference (query) sequence: 1 for forward strand, -1 for rev */
+  int sDirection;         /* the direction we're parsing the match (subject) sequence: 1 for forward strand, -1 for rev */
+  int resFactor;          /* residue factor (3 for a peptide sequence, 1 for dna) */
+  int *q;                 /* the current reference (query) sequence coord */
+  int *s;                 /* the current match (subject) sequence coord */
+  GArray **featureLists;  /* the array of lists of feature (one list per feature type) */
+  MSP **lastMsp;          /* the last msp in the main msp list */
+  MSP **mspList;          /* the main msp list */
+  GList **seqList;        /* the list of sequence structs */
+  GError *error;          /* gets set if there is an error */
+} GapStringData;
+
+
+static void           parseGffColumns(GString *line_string, const int lineNum, GList **seqList, GSList *supportedTypes, const IntRange* const refSeqRange, BlxGffData *gffData, GError **error);
+static void           parseAttributes(char *attributes, GList **seqList, const int lineNum, BlxGffData *gffData, GError **error);
+static void           parseTagDataPair(char *text, const int lineNum, GList **seqList, BlxGffData *gffData, GError **error);
+static void           parseNameTag(char *data, char **sName, const int lineNum, GError **error);
+static void           parseTargetTag(char *data, const int lineNum, GList **seqList, BlxGffData *gffData, GError **error);
+static void           parseCommandTag(char *data, const int lineNum, GList **seqList, BlxGffData *gffData, GError **error);
+static void           parseSequenceTag(const char *text, const int lineNum, BlxGffData *gffData, GError **error);
+static void           parseGapString(char *text, BlxGapFormat gapFormat, MSP *msp, const int resFactor, GArray* featureLists[], MSP **lastMsp, MSP **mspList, GList **seqList, GError **error);
+
+static BlxStrand      readStrand(char *token, GError **error);
+//static void           parseMspType(char *token, MSP *msp, GSList *supportedTypes, GError **error);
+static const char*           parseCigarStringSection(const char *text, GapStringData *data);
+static int            validateNumTokens(char **tokens, const int minReqd, const int maxReqd, GError **error);
+//static void           validateMsp(const MSP *msp, GError **error);
+static void           addGffType(GSList **supportedTypes, const char *name, const char *soId, BlxMspType blxType);
+static void           destroyGffType(BlxGffType **gffType);
+
+
+/* utility to free a given string and set it to null */
+static void freeAndNullString(char **ptr)
+{
+  g_free(*ptr);
+  *ptr = NULL;
+}
+
+/* free all the memory used by the given gffdata struct (but not the struct itself) */
+static void freeGffData(BlxGffData *gffData)
+{
+  freeAndNullString(&gffData->qName);
+  freeAndNullString(&gffData->sName);
+  freeAndNullString(&gffData->sName_orig);
+  freeAndNullString(&gffData->source);
+  freeAndNullString(&gffData->idTag);
+  freeAndNullString(&gffData->parentIdTag);
+  freeAndNullString(&gffData->gapString);
+  freeAndNullString(&gffData->fetchCommand);
+  freeAndNullString(&gffData->fetchArgs);
+}
+
+
+/* Free all memory used by the given list of supported GFF types */
+void blxDestroyGffTypeList(GSList **supportedTypes)
+{
+  GSList *item = *supportedTypes;
+  
+  for ( ; item; item = item->next)
+    {
+      BlxGffType *gffType = (BlxGffType*)(item->data);
+      destroyGffType(&gffType);
+    }
+  
+  g_slist_free(*supportedTypes);
+  *supportedTypes = NULL;
+}
+
+
+/* Create the list of supported types. Filter match types by the given seqType
+ * (or pass BLXSEQ_NONE to include all supported types) */
+GSList* blxCreateSupportedGffTypeList(const BlxSeqType seqType)
+{
+  GSList *supportedTypes = NULL;
+
+  BlxMspType dnaType = BLXMSP_MATCH;
+  BlxMspType proteinType = BLXMSP_MATCH;
+
+  /* In DNA mode we need to exclude protein matches, so set them to invalid */
+  if (seqType == BLXSEQ_DNA)
+    proteinType = BLXMSP_INVALID;
+
+  /* In protein mode we need to exclude nucleotide matches, so set them to invalid */
+  if (seqType == BLXSEQ_PEPTIDE)
+    dnaType = BLXMSP_INVALID;
+  
+  addGffType(&supportedTypes, "nucleotide_match", "SO:0000347", dnaType);
+  addGffType(&supportedTypes, "primer_match", "SO:0001472", dnaType);
+  addGffType(&supportedTypes, "cross_genome_match", "SO:0000177", dnaType);
+  addGffType(&supportedTypes, "translated_nucleotide_match", "SO:0000181", dnaType);
+  addGffType(&supportedTypes, "expressed_sequence_match", "SO:0000102", dnaType);
+  addGffType(&supportedTypes, "cDNA_match", "SO:0000689", dnaType);
+  addGffType(&supportedTypes, "EST_match", "SO:0000668", dnaType);
+  addGffType(&supportedTypes, "UST_match", "SO:0001470", dnaType);
+  addGffType(&supportedTypes, "RST_match", "SO:0001471", dnaType);
+
+  addGffType(&supportedTypes, "protein_match", "SO:0000349", proteinType);
+  addGffType(&supportedTypes, "protein_hmm_match", "SO:0001831", proteinType);
+  
+  addGffType(&supportedTypes, "match", "SO:0000343", BLXMSP_MATCH);
+  addGffType(&supportedTypes, "match_part", "SO:0000039", BLXMSP_MATCH);
+  addGffType(&supportedTypes, "match_set", "SO:0000038", BLXMSP_MATCH_SET);
+  
+  addGffType(&supportedTypes, "transcript", "SO:0000673", BLXMSP_TRANSCRIPT);
+  addGffType(&supportedTypes, "primary_transcript", "SO:0000185", BLXMSP_TRANSCRIPT);
+  addGffType(&supportedTypes, "processed_transcript", "SO:0000233", BLXMSP_TRANSCRIPT);
+  addGffType(&supportedTypes, "mRNA", "SO:0000234", BLXMSP_TRANSCRIPT);
+
+  /* gb10: hack to support old Sequence type from zmap which unfortunately still gets
+   * passed sometimes (it's not even a real SO term) */
+  addGffType(&supportedTypes, "Sequence", NULL, BLXMSP_TRANSCRIPT);
+
+  addGffType(&supportedTypes, "CDS", "SO:0000316", BLXMSP_CDS);
+  addGffType(&supportedTypes, "UTR", "SO:0000203", BLXMSP_UTR);
+  addGffType(&supportedTypes, "exon", "SO:0000147", BLXMSP_EXON);
+  addGffType(&supportedTypes, "intron", "SO:0000188", BLXMSP_INTRON);
+  
+  addGffType(&supportedTypes, "SNP", "SO:0000694", BLXMSP_VARIATION);
+  addGffType(&supportedTypes, "SNV", "SO:0001483", BLXMSP_VARIATION);
+  addGffType(&supportedTypes, "copy_number_variation", "SO:0001019", BLXMSP_VARIATION);
+  addGffType(&supportedTypes, "substitution", "SO:1000002", BLXMSP_VARIATION);
+  addGffType(&supportedTypes, "insertion", "SO:0000694", BLXMSP_VARIATION);
+  addGffType(&supportedTypes, "deletion", "SO:0000694", BLXMSP_VARIATION);
+  addGffType(&supportedTypes, "sequence_alteration", "SO:0001059", BLXMSP_VARIATION);
+
+  addGffType(&supportedTypes, "polyA_signal_sequence", "SO:0000551", BLXMSP_POLYA_SIGNAL);
+  addGffType(&supportedTypes, "polyA_site", "SO:0000553", BLXMSP_POLYA_SITE);
+
+  addGffType(&supportedTypes, "read", "SO:0000150", BLXMSP_MATCH);
+  addGffType(&supportedTypes, "read_PAIR", "SO:0000007", BLXMSP_MATCH);
+  addGffType(&supportedTypes, "similarity", "SO:0000150", BLXMSP_MATCH); /* not a true gff type but temp fix because it gets put in gff by bam-get script */
+
+  addGffType(&supportedTypes, "region", "SO:0000001", BLXMSP_REGION);
+
+  supportedTypes = g_slist_reverse(supportedTypes);
+  
+  return supportedTypes;
+}
+
+
+/* Get the internal blixem type from the given GFF type (as either the type name or
+ * the SO id) */
+static BlxMspType getBlxType(GSList *supportedTypes, const char *typeStr, GError **error)
+{
+  BlxMspType result = BLXMSP_NONE;
+
+  /* Loop through the supported types and see if the requested type matches the name or SO id */
+  GSList *item = supportedTypes;
+  
+  for ( ; item; item = item->next)
+    {
+      BlxGffType *gffType = (BlxGffType*)(item->data);
+      
+      if (stringsEqual(typeStr, gffType->name, FALSE) || stringsEqual(typeStr, gffType->soId, FALSE))
+        {
+          result = gffType->blxType;
+          break;
+        }
+    }
+  
+  /* If it wasn't found, treat as a basic feature... */
+  if (result == BLXMSP_NONE)
+    {
+      result = BLXMSP_BASIC;
+    }
+
+  return result;
+}
+
+
+/* Parse GFF3 header information */
+void parseGff3Header(const int lineNum,
+                     MSP **lastMsp, 
+		     MSP **mspList, 
+		     BlxParserState *parserState, 
+		     GString *line_string, 
+		     GList **seqList,
+                     char *refSeqName,
+                     IntRange *refSeqRange,
+                     GError **error)
+{
+  //DEBUG_ENTER("parseGff3Header [line=%d]", lineNum);
+
+  GError *tmpError = NULL;
+  
+  /* Look for the "sequence-region" comment line, which tells us info about the reference
+   * sequence. The format is as follows: ##sequence-region    qname qstart qend */
+  char qName[MAXLINE + 1];
+  int qStart = UNSET_INT;
+  int qEnd = UNSET_INT;
+
+  if (!strncasecmp(line_string->str, "##sequence-region", 17))
+    {
+      if (sscanf(line_string->str, "##sequence-region%s%d%d", qName, &qStart, &qEnd) < 3)
+        {
+          g_set_error(&tmpError, BLX_GFF3_ERROR, BLX_GFF3_ERROR_INVALID_HEADER,
+                      "Invalid format in sequence-region line '%s'\n", line_string->str);
+        }
+      
+      //DEBUG_OUT("Found reference sequence name=%s [start=%d, end=%d]\n", qName, qStart, qEnd);
+
+      /* If the ref seq name is already populated, check it's the same as the one we've just read */
+      if (!tmpError && *refSeqName != '\0')
+        {
+          if (!stringsEqual(refSeqName, qName, FALSE))
+            {
+              g_set_error(&tmpError, BLX_GFF3_ERROR, BLX_GFF3_ERROR_INVALID_SEQ,
+                          "The sequence name '%s' in the GFF file does not match the reference sequence '%s'.\n", 
+                          qName, refSeqName);
+            }
+        }
+      else if (!tmpError)
+        {
+          strcpy(refSeqName, qName);
+        }
+      
+      if (!tmpError && refSeqRange)
+        {
+          if (!refSeqRange->isSet())
+            {
+              /* Range is currently unset, so set it */
+              refSeqRange->set(qStart, qEnd);
+            }
+          else if (qStart > refSeqRange->max() || qEnd < refSeqRange->min())
+            {
+              /* GFF file range does not overlap the existing range, so we can't load this file */
+              g_set_error(&tmpError, BLX_GFF3_ERROR, BLX_GFF3_ERROR_OUT_OF_RANGE, 
+                          "GFF file range [%d,%d] does not overlap the reference sequence range [%d,%d]",
+                          qStart, qEnd, refSeqRange->min(), refSeqRange->max());
+            }
+        }
+    }
+  
+  if (tmpError)
+    g_propagate_error(error, tmpError);
+  
+  //DEBUG_EXIT("parseGff3Header");
+}
+
+
+/* Get the dataType for the given source from the source-to-data-type mapping 
+ * stanza in the config file. Returns 0 if not found. */
+static GQuark getBlxDataTypeFromSourceMapping(const char *source, GKeyFile *keyFile)
+{
+  GQuark dataType = 0;
+
+  if (keyFile && g_key_file_has_group(keyFile, SOURCE_DATA_TYPES_GROUP))
+    {
+      char *dataTypeName = g_key_file_get_string(keyFile, SOURCE_DATA_TYPES_GROUP, source, NULL);
+      
+      if (dataTypeName)
+        {
+          dataType = g_quark_from_string(dataTypeName);
+          g_free(dataTypeName);
+        }
+    }
+
+  return dataType;
+}
+
+
+/* Get the dataType for the given source from the source stanza. Returns 0 if
+ * not found. */
+static GQuark getBlxDataTypeFromSource(const char *source, GKeyFile *keyFile)
+{
+  GQuark dataType = 0;
+
+  if (keyFile && source && g_key_file_has_group(keyFile, source))
+    {
+      char *dataTypeName = g_key_file_get_string(keyFile, source, DATA_TYPE_TAG, NULL);
+      
+      if (dataTypeName)
+        {
+          dataType = g_quark_from_string(dataTypeName);
+          g_free(dataTypeName);
+        }
+    }
+
+  return dataType;
+}
+
+
+/* Find the default data type for this source. */
+static GQuark getBlxDataTypeDefault(const char *source, GKeyFile *keyFile)
+{
+  GQuark dataType = 0;
+
+  /* Check in the source stanza first */
+  dataType = getBlxDataTypeFromSource(source, keyFile);
+  
+  /* If not there, check in the source-to-data-types mapping stanza */
+  if (!dataType)
+    dataType = getBlxDataTypeFromSourceMapping(source, keyFile);
+  
+  return dataType;
+}
+
+
+/* Get the value for the given flag for the given group, and set 
+ * it in the datatype if found */
+static void getMspFlag(GKeyFile *keyFile, const char *group, const MspFlag flag, BlxDataType *dataType)
+{
+  /* Get the config-file key to use for this flag */
+  const char *key = mspFlagGetConfigKey(flag);
+
+  if (key)
+    {
+      GError *tmpError = NULL;
+      gboolean result = g_key_file_get_boolean(keyFile, group, key, &tmpError);
+      
+      /* If found, update the value in the dataType */
+      if (!tmpError)
+        dataType->flags[flag] = result;
+    }
+}
+
+
+/* Get the BlxDataType with the given name. Returns null and sets the error if 
+ * we expected to find the name but didn't. */
+BlxDataType* getBlxDataType(GQuark dataType, const char *source, GKeyFile *keyFile, GError **error)
+{
+  BlxDataType *result = NULL;
+
+  /* If no data type was specified in the gff, see if there is a default 
+   * data-type for this source */
+  if (!dataType)
+    dataType = getBlxDataTypeDefault(source, keyFile);
+
+  /* A keyfile might not be supplied if the calling program is not interested
+   * in the data-type data (i.e. the data-type data is currently only used to
+   * supply values that are used in blixem, so are irrelevant to dotter). */
+  if (!keyFile || !dataType)
+    return result;
+  
+  if (dataType)
+    {
+      /* Check if it's already cached */
+      std::map<GQuark, BlxDataType*>::iterator iter = g_dataTypes.find(dataType) ;
+
+      if (iter != g_dataTypes.end())
+        {
+          result = iter->second ;
+        }
+      else
+        {
+          /* look it up in the config file and if we find it then create a new BlxDataType struct for it. */
+          const gchar *typeName = g_quark_to_string(dataType);
+
+          if (g_key_file_has_group(keyFile, typeName))
+            {
+              result = createBlxDataType();
+              result->name = dataType;
+
+              /* Get the values. They're all optional so just ignore any errors. */
+              result->bulkFetch = keyFileGetCsv(keyFile, typeName, SEQTOOLS_BULK_FETCH, NULL); 
+              result->userFetch = keyFileGetCsv(keyFile, typeName, SEQTOOLS_USER_FETCH, NULL); 
+              result->optionalFetch = keyFileGetCsv(keyFile, typeName, SEQTOOLS_OPTIONAL_FETCH, NULL); 
+              
+              /* Get the flags. Again, they're all optional. These calls update the
+               * flag in place if it is found, or leave it at the pre-set default otherwise. */
+              int flag = MSPFLAG_MIN + 1;
+              for ( ; flag < MSPFLAG_NUM_FLAGS; ++flag)
+                {
+                  getMspFlag(keyFile, typeName, (MspFlag)flag, result);
+                }              
+              
+              /* Insert it into the table of data types */
+              g_dataTypes[dataType] = result ;
+            }
+          else
+            {
+              g_set_error(error, BLX_GFF3_ERROR, BLX_GFF3_ERROR_DATA_TYPE, 
+                          "Config file error: data type '%s' not found", typeName);
+            }
+        }
+    }
+  
+  return result;
+}
+
+
+BlxDataType* constructBlxDataType(BlxGffData *gffData, GHashTable *fetchMethods, GError **error)
+{
+  BlxDataType *result = NULL;
+  
+  /* If no data type is specified then try to construct one from the given fetch method */
+  if (gffData && !gffData->dataType && gffData->fetchCommand)
+    {
+      /* Create a name for the new data type. Try using the source and fetchCommand */
+      std::string name("");
+
+      if (gffData->source)
+        {
+          name += gffData->source;
+          name += "_";
+        }
+
+      name += gffData->fetchCommand;
+
+      gffData->dataType = g_quark_from_string(name.c_str());
+
+      /* Ok, now create the data type struct (only if it doesn't exist). */
+      if (!g_dataTypes[gffData->dataType])
+        {
+          /* We'll set the bulk fetch method to a new fetch method based on the given
+           * fetch command. */
+          BlxFetchMethod *fetchMethod = createBlxFetchMethod(name.c_str());
+
+          fetchMethod->name = gffData->dataType;  /// for now, use the same name as the datatype
+          fetchMethod->mode = BLXFETCH_MODE_COMMAND;
+          fetchMethod->separator = g_strdup(" ");
+          fetchMethod->outputType = BLXFETCH_OUTPUT_GFF;
+          fetchMethod->location = g_strdup(gffData->fetchCommand);
+                                                
+          if (gffData->fetchArgs)
+            fetchMethod->args = g_strdup(gffData->fetchArgs);
+
+          /* Add the fetch method to the output list of fetch methods */
+          g_hash_table_insert(fetchMethods, GINT_TO_POINTER(fetchMethod->name), fetchMethod);
+
+          /* Now create the new datatype */
+          result = createBlxDataType();
+
+          result->name = gffData->dataType;
+          result->bulkFetch = g_array_sized_new(FALSE, TRUE, sizeof(GQuark), 1);
+          g_array_append_val(result->bulkFetch, fetchMethod->name);
+
+          /* Add the new datatype to the table of datatypes */
+          g_dataTypes[gffData->dataType] = result;
+        }
+    }
+
+  return result;
+}
+
+
+/* Return the filename from the gff if given, otherwise check 
+ * if the filename is given in the config and return that.
+ * Returns 0 if not found. */
+static GQuark getFeatureFilename(BlxGffData *gffData, GKeyFile *keyFile, GError **error)
+{
+  GQuark result = 0;
+  
+  if (gffData->filename)
+    {
+      /* Filename was given in the gff so use that */
+      result = gffData->filename;
+    }
+  else if (keyFile && gffData->source)
+    {
+      /* Check if filename is given in the keyfile for this source */
+      char *filename = g_key_file_get_string(keyFile, gffData->source, SEQTOOLS_GFF_FILENAME_KEY, error);
+      result = g_quark_from_string(filename);
+      g_free(filename);
+    }
+  
+  return result;
+}
+
+
+/* Create a blixem object from the given parsed GFF data. Creates an MSP if the type is
+ * exon or match, or a BlxSequence if the type is transcript. Does nothing for other types. */
+static void createBlixemObject(BlxGffData *gffData, 
+                               GArray* featureLists[],
+			       MSP **lastMsp, 
+			       MSP **mspList, 
+			       GList **seqList, 
+                               GList *columnList,
+			       GSList *styles,
+                               const int resFactor,
+                               GKeyFile *keyFile,
+                               GHashTable *lookupTable, 
+                               GHashTable *fetchMethods,
+			       GError **error)
+{
+  if (!gffData)
+    {
+      return;
+    }
+    
+  GError *tmpError = NULL;
+
+  /* Get the data type struct */
+  BlxDataType *dataType = getBlxDataType(gffData->dataType, gffData->source, keyFile, &tmpError);
+  reportAndClearIfError(&tmpError, G_LOG_LEVEL_WARNING);
+
+  /* If no dataType is given then see if we can construct one from a given fetch command */
+  if (!dataType && gffData->fetchCommand)
+    {
+      dataType = constructBlxDataType(gffData, fetchMethods, &tmpError);
+      reportAndClearIfError(&tmpError, G_LOG_LEVEL_CRITICAL);
+    }
+
+  GQuark filename = getFeatureFilename(gffData, keyFile, NULL);
+
+  if (gffData->mspType > BLXMSP_NUM_TYPES)
+    {
+      /* "Invalid" MSP types, i.e. don't create a real MSP from these types. */
+      
+      if (gffData->mspType == BLXMSP_TRANSCRIPT)
+        {
+          /* For transcripts, although we don't create an MSP we do create a sequence */
+          addBlxSequence(gffData->sName, gffData->sName_orig, gffData->idTag, gffData->qStrand,
+                         dataType, gffData->source, seqList, columnList, gffData->sequence, NULL, 
+                         lookupTable, NULL, &tmpError);
+        }
+    }
+  else
+    {
+      /* For all other types, create an MSP */
+      
+      /* Regions don't necessarily have a name or ID, but they should have a
+       * source, so use that as the name */
+      if (gffData->mspType == BLXMSP_REGION && !gffData->sName)
+        {
+          gffData->sName = g_strdup(gffData->source);
+        }
+      
+      if (!gffData->sName && !gffData->parentIdTag && 
+	  (gffData->mspType == BLXMSP_TRANSCRIPT || typeIsExon(gffData->mspType) || 
+	   typeIsMatch(gffData->mspType)))
+	{
+	  g_set_error(error, BLX_ERROR, 1, "Target/name/parent-ID must be specified for exons and alignments.\n");
+	  return;
+	}
+	
+      /* Get the id corresponding to the BlxSequence: we want the parent if it's an intron/exon, or the
+       * ID for this item if it's a transcript or match */
+      char *idTag = typeIsExon(gffData->mspType) || typeIsIntron(gffData->mspType) ? gffData->parentIdTag : gffData->idTag;
+      
+      /* For exons and transcripts, the target strand is irrelevant - use the ref seq strand */
+      if (typeIsExon(gffData->mspType) || typeIsIntron(gffData->mspType) || gffData->mspType == BLXMSP_TRANSCRIPT)
+	{
+	  gffData->sStrand = gffData->qStrand;
+	}
+
+      MSP *msp = createNewMsp(featureLists,
+                              lastMsp, 
+			      mspList, 
+			      seqList, 
+                              columnList,
+			      gffData->mspType,
+                              dataType,
+			      gffData->source,
+			      gffData->score, 
+			      gffData->percentId, 
+                              gffData->phase,
+			      idTag,
+			      gffData->qName, 
+			      gffData->qStart, 
+			      gffData->qEnd, 
+			      gffData->qStrand, 
+			      UNSET_INT,
+			      gffData->sName,
+			      gffData->sName_orig,
+			      gffData->sStart, 
+			      gffData->sEnd, 
+			      gffData->sStrand, 
+			      gffData->sequence, 
+                              filename,
+                              lookupTable,
+                              NULL,
+			      &tmpError);
+
+    if (!tmpError)
+	{ 
+	  /* Get the style based on the source */
+	  msp->style = getBlxStyle(gffData->source, styles, &tmpError);
+          
+	  if (tmpError)
+	    {
+	      /* style errors are not critical */
+	      //reportAndClearIfError(&tmpError, G_LOG_LEVEL_WARNING);
+              g_error_free(tmpError);
+              tmpError = NULL;
+	    }
+
+	  /* populate the gaps array */
+	  parseGapString(gffData->gapString, gffData->gapFormat, msp, resFactor, featureLists, lastMsp, mspList, seqList, &tmpError);
+
+          /* Parsing the gaps array may have separated the msp into multiple different msps if it
+           * contained introns. We need to make sure the parent BlxSequence's msp list is sorted
+           * correctly. We do this now, after it is complete, because it's more efficient so sort
+           * the list once rather than on each iteration. */
+          if (msp && msp->sSequence && msp->sSequence->mspList)
+            msp->sSequence->mspList = g_list_sort(msp->sSequence->mspList, compareFuncMspPos);
+          
+	}
+    }
+
+  freeGffData(gffData);
+
+  if (tmpError)
+    {
+      g_propagate_error(error, tmpError);
+    }
+}
+
+
+/* Parse GFF3 data */
+void parseGff3Body(const int lineNum,
+                   GArray* featureLists[],
+                   MSP **lastMsp, 
+		   MSP **mspList, 
+		   BlxParserState *parserState, 
+		   GString *line_string, 
+		   GList **seqList,
+                   GList *columnList,
+                   GSList *supportedTypes,
+                   GSList *styles,
+                   const int resFactor, 
+                   GKeyFile *keyFile,
+                   const IntRange* const refSeqRange,
+                   GHashTable *lookupTable,
+                   GHashTable *fetchMethods)
+{
+  //DEBUG_ENTER("parseGff3Body [line=%d]", lineNum);
+
+  static int num_errors = 0 ;
+  const int max_errors = 20 ; /* Limit the number of errors we report in case there are, say, thousands
+                               * of lines we can't read */
+  
+  /* Parse the data into a temporary struct */
+  BlxGffData gffData = {NULL, NULL, BLXMSP_NONE,
+                        UNSET_INT, UNSET_INT, UNSET_INT, UNSET_INT, BLXSTRAND_NONE, UNSET_INT,
+			NULL, NULL, BLXSTRAND_NONE,
+                        UNSET_INT, UNSET_INT, NULL, NULL, NULL, NULL, BLX_GAP_STRING_INVALID, 0, 0, NULL, NULL};
+		      
+  GError *error = NULL;
+  parseGffColumns(line_string, lineNum, seqList, supportedTypes, refSeqRange, &gffData, &error);
+  
+  /* Create a blixem object based on the parsed data */
+  if (!error)
+    {
+      createBlixemObject(&gffData, featureLists, lastMsp, mspList, seqList, columnList, styles, resFactor, keyFile, lookupTable, fetchMethods, &error);
+    }
+  
+  if (error)
+    {
+      ++num_errors ;
+
+      if (num_errors <= max_errors)
+        {
+          prefixError(error, "[line %d] Error parsing GFF data. ", lineNum);
+          reportAndClearIfError(&error, G_LOG_LEVEL_WARNING);
+        }
+      else if (num_errors == max_errors + 1)
+        {
+          g_warning("Truncating error report (more than %d errors in reading GFF file)\n", max_errors);
+        }
+      else
+        {
+          g_error_free(error);
+        }
+    }
+  
+  //DEBUG_EXIT("parseGff3Body");
+}
+
+
+/* Parse header info for a FASTA sequence in a GFF 3 file. The only info there should be is the
+ * sequence name, on its own line below the "##FASTA" header. This should be in the format ">name".
+ * Sets the readSeq pointer to point to the sequence that needs to be populated, according to the
+ * sequence name that is parsed. */
+/* to do: currently this only allows the reference sequence to be in fasta format. could be extended
+ * to read match sequences in fasta too, although we should probably make the way dotter and blixem
+ * use sequences more consistent before doing that to save refactoring a lot of code later (ie.
+ * if all sequences (including ref seq) were stored in a BlxSequence then it would make things
+ * much easier). */
+void parseFastaSeqHeader(char *line, const int lineNum,
+                         char **refSeq, char *refSeqName, IntRange *refSeqRange,
+                         char ***readSeq, int *readSeqLen, int *readSeqMaxLen,
+                         BlxParserState *parserState)
+{
+  gboolean status = TRUE;
+  char seqName[MAXLINE + 1];
+  
+  /* Read the ref seq name (and optionally the coords) from the header line */
+  int startCoord = UNSET_INT, endCoord = UNSET_INT;
+  const int numFound = sscanf(line, ">%s %d %d", seqName, &startCoord, &endCoord);
+  
+  if (numFound < 1 || !seqName[0])
+    {
+      /* Didn't find name - this is required */
+      status = FALSE;
+      g_error("Error parsing data file: FASTA_SEQ_HEADER line \"%s\" is the wrong format; expected '>seq_name [start_coord end_coord].\n", line);
+    }
+
+  /* Trim out the name. The text can have additional info separated by '|' characters that we're not
+   * interested in (at the moment) so just trim everything off after the first '|' char. */
+  char *cp = strchr(seqName, '|');
+  if (cp)
+    *cp = 0;
+
+  /* Set the name, if not already set. (gb10: we shouldn't really get here so should probably add
+   * some error checking to make sure refSeqName is set so we can check we have the right
+   * sequence. However for now we're flexible and if there's only one fasta sequence in the GFF
+   * then we take that to be the reference sequence. If there are multiple in the GFF and no
+   * reference sequence name is specified then we'll get in trouble here because we have no way of
+   * telling which is the correct one.) */
+  if (status && *refSeqName == 0)
+    {
+      strcpy(refSeqName, seqName);
+    }
+  else if (status && !stringsEqual(refSeqName, seqName, FALSE))
+    {
+      /* Not the sequence we're looking for so quit */
+      status = FALSE;
+    }
+
+  /* Check if we also found coordinates in the header line. (There should be exactly three text
+   * items if so) */
+  if (status && numFound == 3 && refSeqRange)
+    {
+      refSeqRange->set(startCoord, endCoord);
+    }
+
+  /* Now allocate memory for the sequence data (if the sequence is not already populated) */
+  if (status && *refSeq == NULL)
+    {
+      *readSeq = refSeq;
+      *readSeqMaxLen = MAXLINE;
+      **readSeq = (char*)g_malloc(*readSeqMaxLen + 1);
+      *readSeqLen = 0;
+    }
+
+  if (status)
+    {
+      /* Update the parser state so that we proceed to parse the sequence data next. (Even if
+       * we're not populating the ref seq, we still need to loop over these lines. Leaving the
+       * readSeqLen as unset will mean that the fasta sequence parser will ignore the input.) */
+      *parserState = FASTA_SEQ_BODY;
+    }
+  else
+    {
+      *parserState = FASTA_SEQ_IGNORE;
+    }
+}
+
+
+/*********************************************************
+ *                  Internal functions
+ *********************************************************/
+
+
+/* Get the strand enum from a string containing '+' for the forward strand, '-' for the
+ * reverse strand or '.' if no strand is specified */
+static BlxStrand readStrand(char *token, GError **error)
+{
+  BlxStrand result = BLXSTRAND_NONE;
+  
+  if (!strcmp(token, "+"))
+    {
+      result = BLXSTRAND_FORWARD;
+    }
+  else if (!strcmp(token, "-"))
+    {
+      result = BLXSTRAND_REVERSE;
+    }
+  else if (!strcmp(token, ".") || !strcmp(token, "?"))
+    {
+      result = BLXSTRAND_NONE;
+    }
+  else
+    {
+      g_set_error(error, BLX_GFF3_ERROR, BLX_GFF3_ERROR_INVALID_STRAND, "Invalid strand '%s' in input file.\n", token);
+    }
+  
+  return result;
+}
+
+
+/* Parse the columns in a GFF line and populate the parsed info into the given MSP. */
+static void parseGffColumns(GString *line_string, 
+                            const int lineNum, 
+                            GList **seqList,
+                            GSList *supportedTypes,
+                            const IntRange* const refSeqRange,
+			    BlxGffData *gffData,
+                            GError **error)
+{
+    /* Split the line into its tab-separated columns. We should get 9 of them */
+  char **tokens = g_strsplit_set(line_string->str, "\t", -1);   /* -1 means do all tokens. */
+  
+  /* This error should get set if there is a fatal error reading this line. */
+  GError *tmpError = NULL;
+
+  validateNumTokens(tokens, 8, 9, &tmpError);
+
+  if (!tmpError)
+    {
+      /* Reference sequence name */
+      gffData->qName = tokens[0] ? g_ascii_strup(tokens[0], -1) : NULL;
+      
+      /* Source (optional) */
+      if (tokens[1] && strcmp(tokens[1], "."))
+          {
+            gffData->source = g_uri_unescape_string(tokens[1], NULL);
+          }
+      
+      /* Type (converted to a seqtools type) */
+      gffData->mspType = getBlxType(supportedTypes, tokens[2], &tmpError);
+    }
+    
+  if (!tmpError)
+    {
+      /* Reference sequence coords - ignore anything not in refSeqRange.
+       * Note though that we accept features that are partially in range, and
+       * also we currently accept all exons/introns. This is because we may, say, 
+       * be given the exons in a transcript and be expected to calculate the
+       * introns ourselves, but if such an intron is not entirely within range 
+       * then we need knowledge of the adjacent exon that is out of range in 
+       * order to be able to calculate that intron. Rather than get into 
+       * complicated filtering to include only those exons we need, we currently 
+       * just include all exons and introns in the input file. Ideally we would
+       * at least filter out transcripts that are entirely out of range, but we
+       * don't fully know the parent/child relationship at this point, so that
+       * is again getting quite tricky (and it will not cause problems if they
+       * are left in). */
+      gffData->qStart = convertStringToInt(tokens[3]);
+      gffData->qEnd = convertStringToInt(tokens[4]);
+
+      /* We can only check the range if the refseqrange is set... */
+      if (!typeIsExon(gffData->mspType) && !typeIsIntron(gffData->mspType) && !typeIsTranscript(gffData->mspType) &&
+          refSeqRange && refSeqRange->isSet())
+        {
+          IntRange featureRange(gffData->qStart, gffData->qEnd); /* make sure min < max */
+          
+          if (!rangesOverlap(&featureRange, refSeqRange))
+            g_set_error(&tmpError, BLX_GFF3_ERROR, BLX_GFF3_ERROR_OUT_OF_RANGE, "Feature is outside the reference sequence range.\n");
+        }
+    }
+  
+  if (!tmpError)
+    {
+      if (!stringsEqual(tokens[5], ".", TRUE))
+        {
+          gffData->score = g_ascii_strtod(tokens[5], NULL);
+        }
+      
+      gffData->qStrand = readStrand(tokens[6], &tmpError);
+    }
+
+  if (!tmpError)
+    {
+      if (stringsEqual(tokens[7], ".", TRUE))
+        {
+          gffData->phase = 0;
+          
+          if (gffData->mspType == BLXMSP_CDS)
+            {
+              g_warning("[line %d] CDS type does not have phase specified.\n", lineNum);
+            }
+        }
+      else
+        {
+          gffData->phase = convertStringToInt(tokens[7]);
+        }
+  
+      /* Parse the optional attributes */
+      char *attributes = tokens[8];
+      
+      if (attributes)
+        {
+          parseAttributes(attributes, seqList, lineNum, gffData, &tmpError);
+        }
+    }
+    
+  if (tmpError)
+    {
+      g_propagate_error(error, tmpError);
+    }
+  
+  g_strfreev(tokens);
+}
+
+
+/* Parse the given text, which contains attributes of the format "tag=data". The data
+ * can contain multiple values, separated by spaces. Space characters within the data must 
+ * be escaped. Populates the match sequence into 'sequence' if found in one of the attributes. */
+static void parseAttributes(char *attributes, 
+			    GList **seqList, 
+			    const int lineNum, 
+			    BlxGffData *gffData,
+			    GError **error)
+{
+  /* Attributes are separated by semi colons */
+  char **tokens = g_strsplit_set(attributes, ";", -1);   /* -1 means do all tokens. */
+
+  /* Loop through all the tags and read their data. */
+  char **token = tokens;
+  GError *tmpError = NULL;
+  
+  while (token && *token && **token && !tmpError)
+    {
+      parseTagDataPair(*token, lineNum, seqList, gffData, &tmpError);
+      reportAndClearIfError(&tmpError, G_LOG_LEVEL_CRITICAL);
+      ++token;
+    }
+
+  if (tmpError)
+    {
+      g_propagate_error(error, tmpError);
+    }
+  
+  g_strfreev(tokens);
+}
+
+
+/* Parse a tag/data pair of the format "tag=data" */
+static void parseTagDataPair(char *text,
+                             const int lineNum,
+                             GList **seqList, 
+			     BlxGffData *gffData, 
+                             GError **error)
+{
+  //DEBUG_ENTER("parseTagDataPair(text='%s')", text);
+              
+  /* Split on the "=" and check that we get 3 tokens */
+  char **tokens = g_strsplit_set(text, "=", -1);
+  
+  GError *tmpError = NULL;
+  validateNumTokens(tokens, 2, 2, &tmpError);
+  
+  if (!tmpError)
+    {
+      /* Call the relevant function to parse data for this tag */
+      if (!strcmp(tokens[0], "Name"))
+        {
+          parseNameTag(tokens[1], &gffData->sName, lineNum, &tmpError);
+        }
+      else if (!strcmp(tokens[0], "Target"))
+        {
+          parseTargetTag(tokens[1], lineNum, seqList, gffData, &tmpError);
+        }
+      else if (!strcmp(tokens[0], "command"))
+        {
+          parseCommandTag(tokens[1], lineNum, seqList, gffData, &tmpError);
+        }
+      else if (!strcmp(tokens[0], "Gap"))
+        {
+          /* This might have already been set if we have more than one type of gap string */
+          if (gffData->gapString)
+            {
+              /*! \todo For now, override the cigar_bam string because we are experiencing
+               * bugs with it. Longer term it shouldn't really matter which we use, although 
+               * we may want to give preference to more informative gap strings e.g. vulgar */
+              g_free(gffData->gapString);
+              gffData->gapString = NULL;
+              gffData->gapFormat = BLX_GAP_STRING_INVALID;
+            }
+          
+          gffData->gapString = g_strdup(tokens[1]);
+          gffData->gapFormat = BLX_GAP_STRING_GFF3; 
+        }
+      else if (!strcmp(tokens[0], "cigar_bam"))
+        {
+          /* This might have already been set if we have more than one type of gap string */
+          if (!gffData->gapString)
+            {
+              gffData->gapString = g_strdup(tokens[1]);
+              gffData->gapFormat = BLX_GAP_STRING_BAM_CIGAR; 
+            }
+        }
+      else if (!strcmp(tokens[0], "gaps"))
+        {
+          /* This might have already been set if we have more than one type of gap string */
+          if (!gffData->gapString)
+            {
+              gffData->gapString = g_strdup(tokens[1]);
+              gffData->gapFormat = BLX_GAP_STRING_ACEDB; 
+            }
+        }
+      else if (!strcmp(tokens[0], "ID"))
+        {
+          gffData->idTag = g_strdup(tokens[1]);
+        }
+      else if (!strcmp(tokens[0], "Parent"))
+        {
+	  gffData->parentIdTag = g_strdup(tokens[1]);
+        }
+      else if (!strcmp(tokens[0], "percentID"))
+        {
+          gffData->percentId = g_ascii_strtod(tokens[1], NULL);
+        }
+      else if (!strcmp(tokens[0], "sequence"))
+        {
+          parseSequenceTag(tokens[1], lineNum, gffData, &tmpError);
+        }
+      else if (!strcmp(tokens[0], "variant_sequence"))
+        {
+          gffData->sequence = g_strdup(tokens[1]);
+        }
+      else if (!strcmp(tokens[0], DATA_TYPE_TAG))
+        {
+          gffData->dataType = g_quark_from_string(tokens[1]);
+        }
+      else if (!strcmp(tokens[0], "file"))
+        {
+          gffData->filename = g_quark_from_string(tokens[1]);
+        }
+      else
+        {
+          DEBUG_OUT("Unknown tag: ignorning.\n");
+        }
+    }
+  
+  if (tmpError)
+    {
+      prefixError(tmpError, "Error processing data for tag '%s'. ", text);
+      g_propagate_error(error, tmpError);
+    }
+  
+  g_strfreev(tokens);
+  
+  //DEBUG_EXIT("parseTagDataPair");
+}
+
+
+/* Parse the data from the 'Name' tag */
+static void parseNameTag(char *data, char **sName, const int lineNum, GError **error)
+{
+  if (data)
+    { 
+      if (*sName == NULL)
+	{
+	  *sName = g_ascii_strup(data, -1);
+	}
+      else if (!stringsEqual(data, *sName, FALSE))
+	{
+	  g_warning("[line %d] Warning: Name attribute '%s' differs from previously-set name '%s'. Ignoring new value.\n", lineNum, data, *sName);
+	}
+    }
+}
+
+
+/* Parse the data from a 'Target' tag */
+static void parseTargetTag(char *data, const int lineNum, GList **seqList, BlxGffData *gffData, GError **error)
+{
+  /* Split on spaces */
+  char **tokens = g_strsplit_set(data, " ", -1); /* -1 means all tokens */
+  
+  GError *tmpError = NULL;
+  int numTokens = validateNumTokens(tokens, 3, 4, &tmpError);
+  
+  if (!tmpError)
+    {
+      if (gffData->sName == NULL)
+        {
+          gffData->sName = tokens[0] ? g_strdup(tokens[0]) : NULL;
+          gffData->sName_orig = tokens[0] ? g_ascii_strup(gffData->sName, -1) : NULL;
+        }
+      else if (!stringsEqual(gffData->sName, tokens[0], FALSE))
+        {
+          g_warning("[line %d] Warning: Target name '%s' differs from previously-set name '%s'. Overriding old value.\n", lineNum, tokens[0], gffData->sName);
+
+          /* It's easiest if the Target tag overrides other values, because this is where we set
+           * the name in the BlxSequence. */
+          g_free(gffData->sName);
+          gffData->sName = tokens[0] ? g_ascii_strup(tokens[0], -1) : NULL;
+        }
+      
+      gffData->sStart = convertStringToInt(tokens[1]);
+      gffData->sEnd = convertStringToInt(tokens[2]);
+      
+      if (numTokens == 4)
+        {
+          gffData->sStrand = readStrand(tokens[3], &tmpError);
+        }
+     }
+  
+   if (tmpError)
+     {
+       prefixError(tmpError, "Error parsing 'Target' tag '%s'", data);
+       g_propagate_error(error, tmpError);
+     }
+  
+  g_strfreev(tokens);
+}
+
+
+/* A function to replace all occurances of substring 'from' with substring 'to' in the given
+ * string. Taken from http://stackoverflow.com/questions/3418231/replace-part-of-a-string-with-another-string */
+void stringReplace(string& str, const string& from, const string& to) 
+{
+  if(from.empty())
+    return;
+
+  size_t start_pos = 0;
+
+  while((start_pos = str.find(from, start_pos)) != string::npos) 
+    {
+      str.replace(start_pos, from.length(), to);
+      start_pos += to.length();
+    }
+}
+
+
+/* Unescape gff special characters from the given string. Returns a newly-allocated string which
+ * should be free'd using g_free */
+static char* unescapeGffString(const char *src)
+{
+  char *result = NULL;
+
+  if (src)
+    {
+      string dest(src);
+
+      stringReplace(dest, "%3D", "=");
+      stringReplace(dest, "%3B", ";");
+      stringReplace(dest, "%26", ",");
+      stringReplace(dest, "%2C", "&");
+
+      result = g_strdup(dest.c_str());
+    }
+
+  return result;
+}
+
+
+/* Parse the data from a 'command' tag */
+static void parseCommandTag(char *data, const int lineNum, GList **seqList, BlxGffData *gffData, GError **error)
+{
+  if (data && !gffData->fetchCommand)
+    {
+      /* Text up to first space is the executable. Anything after that is the args. */
+      int len = strlen(data);
+      char *cp = strchr(data, ' ');
+
+      if (cp)
+        len = cp - data;
+
+      gffData->fetchCommand = (char*)g_malloc(sizeof(char) * (len + 1));
+      strncpy(gffData->fetchCommand, data, len);
+      gffData->fetchCommand[len] = '\0';
+
+      if (cp)
+        {
+          /* We need to unescape gff special characters */
+          gffData->fetchArgs = unescapeGffString(cp);
+        }
+    }
+}
+
+
+/* Parse the data from the 'sequence' tag */
+static void parseSequenceTag(const char *text, const int lineNum, BlxGffData *gffData, GError **error)
+{
+  gffData->sequence = g_strdup(text);
+}
+
+
+/* Required after reading in legacy acedb-style gaps array; new code assumes
+ * the gaps are in the forward-strand order */
+static void sortGapsArray(MSP *msp)
+{
+  if (msp && msp->gaps)
+    {
+      /* They should be ordered but may be in reverse order, so if the last one is before the
+       * first one then just swap the order */
+      CoordRange *first_range = (CoordRange*)(msp->gaps->data);
+      CoordRange *last_range = (CoordRange*)g_slist_nth_data(msp->gaps, g_slist_length(msp->gaps) - 1);
+
+      const gboolean qRev = last_range->qStart < first_range->qStart;
+      const gboolean sRev = last_range->sStart < first_range->sStart;
+
+      if (qRev != sRev)
+        {
+          msp->gaps = g_slist_reverse(msp->gaps);
+        }
+    }
+}
+
+
+/* Parse the data from the "Gap" string, which uses the CIGAR format, e.g. "M8 D3 M6 I1 M6".
+ * Populates the Gaps array in the given MSP.*/
+static void parseGapString(char *text,
+                           BlxGapFormat gapFormat,
+                           MSP *msp,
+                           const int resFactor,
+                           GArray* featureLists[],
+                           MSP **lastMsp, 
+                           MSP **mspList, 
+                           GList **seqList, 
+                           GError **error)
+{
+  if (!text || gapFormat == BLX_GAP_STRING_INVALID)
+    {
+      return;
+    }
+  else if (gapFormat == BLX_GAP_STRING_ACEDB)
+    {
+      blxParseGaps(&text, msp, FALSE); /* legacy code for lecacy acedb-style gap string */
+      sortGapsArray(msp);
+      return;
+    }
+
+  /* If we have the forward strand of either sequence, start at the min coord
+   * and increase values as we progress through the cigar string; if we have the
+   * reverse strand, start at the max coord and decrease. */
+  const gboolean qForward = (mspGetRefStrand(msp) == BLXSTRAND_FORWARD);
+  const gboolean sForward = (mspGetMatchStrand(msp) == BLXSTRAND_FORWARD);
+  const int qDirection = (qForward ? 1 : -1);
+  const int sDirection = (sForward ? 1 : -1);
+
+  /* Start at one beyond the edge of the range, because it will be incremented (or decremented if
+   * direction is reverse) when we construct the first range. */
+  int q = qForward ? msp->qRange.min() - 1 : msp->qRange.max() + 1;
+  int s = sForward ? msp->sRange.min() - 1 : msp->sRange.max() + 1;
+  
+  GError *tmpError = NULL;
+
+  GapStringData gapStringData = {gapFormat, &msp, qDirection, sDirection, resFactor, &q, &s, 
+                                 featureLists, lastMsp, mspList, seqList, NULL};  
+
+  const char *cp = text;
+  
+  while (cp && *cp)
+    {
+      const char *cp_new = parseCigarStringSection(cp, &gapStringData);
+      
+      if (tmpError)
+        {
+          prefixError(tmpError, "Error parsing gap string '%s'. ", cp);
+        }
+
+      cp = cp_new;
+    }
+  
+  if (tmpError)
+    {
+      g_propagate_error(error, tmpError);
+    }
+}
+
+
+/* Get the length part of a gap string section, e.g. if the text is "M76"
+ * then this returns 76 */
+static int getCigarStringSectionLen(const char *text, BlxGapFormat gapFormat)
+{
+  int result = 0;
+
+  switch (gapFormat)
+    {
+    case BLX_GAP_STRING_GFF3: /* e.g. M76 */
+      result = convertStringToInt(text+1);
+      break;
+      
+    case BLX_GAP_STRING_BAM_CIGAR: /* e.g. 76M */
+      result = convertStringToInt(text); /* uses atoi, which will ignore characters after */
+      break;
+
+    default:
+      g_warning("Invalid gap string format\n");
+      break;
+    };
+
+  return result;
+}
+
+
+/* Get the operator part of a gap string section, e.g. if the text is "M76"
+ * then this returns 'M' */
+static char getCigarStringSectionOperator(const char *text, BlxGapFormat gapFormat, const char **cp_out)
+{
+  char result = 0;
+  const char *cp = text;
+
+  switch (gapFormat)
+    {
+    case BLX_GAP_STRING_GFF3:
+      result = *cp;
+
+      /* Move cp on to the start of the next section in the cigar, i.e. next alpha char */
+      for (++cp ; cp && *cp && !isalpha(*cp); ++cp);
+
+      break;
+      
+    case BLX_GAP_STRING_BAM_CIGAR:
+      {
+        for ( ; cp && *cp && !isalpha(*cp); ++cp); /* find first alphabetic character */
+
+        if (cp) 
+          result = *cp;
+
+        /* Move cp on to the start of the next section in the cigar, i.e. next digit */
+        for (cp++ ; cp && *cp && !isdigit(*cp); ++cp);
+
+        break;
+      }
+      
+    default:
+      g_warning("Invalid gap string format\n");
+      break;
+    };
+
+  if (cp_out)
+    *cp_out = cp;
+  
+  return result;
+}
+
+
+static void parseCigarStringMatch(GapStringData *data, const int numNucleotides, const int numPeptides)
+{
+  MSP *msp = *data->msp;
+
+  /* We were at the end of the previous range or gap, so move to the next coord, where our range will start */
+  *data->q += data->qDirection;
+  *data->s += data->sDirection;
+  
+  /* Find the coords at the end of the range. */
+  int newQ = *data->q + (data->qDirection * (numNucleotides - 1));
+  int newS = *data->s + (data->sDirection * (numPeptides - 1));
+  
+  CoordRange *newRange = new CoordRange;
+  msp->gaps = g_slist_append(msp->gaps, newRange);
+  
+  newRange->qStart = *data->q;
+  newRange->qEnd = newQ;
+  newRange->sStart = *data->s;
+  newRange->sEnd = newS;
+  
+  *data->q = newQ;
+  *data->s = newS;
+}
+
+static void parseCigarStringIntron(GapStringData *data, const int numNucleotides, const int numPeptides)
+{
+  /* Intron. Create a separate msp under the same sequence. Add the new msp to the same parent
+   * BlxSequence but pass sort=FALSE because we'll sort the resulting msp list once we've finished. */
+  MSP *msp = *data->msp;
+  MSP *newMsp = copyMsp(msp, data->featureLists, data->lastMsp, data->mspList, TRUE, FALSE);
+  
+  /* end current msp at the current coords */
+  if (data->qDirection > 0)
+    msp->qRange.setMax(*data->q);
+  else
+    msp->qRange.setMin(*data->q);
+  
+  if (data->sDirection > 0)
+    msp->sRange.setMax(*data->s);
+  else
+    msp->sRange.setMin(*data->s);
+  
+  /* start new msp at new coords */
+  *data->q += data->qDirection * numNucleotides;
+  
+  if (data->qDirection > 0)
+    newMsp->qRange.setMin(*data->q + 1);
+  else
+    newMsp->qRange.setMax(*data->q - 1);
+  
+  if (data->sDirection > 0)
+    newMsp->sRange.setMin(*data->s + 1);
+  else
+    newMsp->sRange.setMax(*data->s - 1);
+  
+  *data->msp = newMsp;
+}
+
+static void parseCigarStringDeletion(GapStringData *data, const int numNucleotides, const int numPeptides)
+{
+  /* Deletion from the subject sequence: increase the q coord by the number of nucleotides. */
+  *data->q += data->qDirection * numNucleotides;
+}
+
+static void parseCigarStringInsertion(GapStringData *data, const int numNucleotides, const int numPeptides)
+{
+  /* Insertion on the subject sequence: increase the s coord by the number of peptides. */
+  *data->s += data->sDirection * numPeptides;
+}
+
+
+/* Return TRUE if the given char is a valid operator for the
+ * given gap string format. */
+static gboolean validateCigarOperator(char op, BlxGapFormat gapFormat)
+{
+  gboolean result = FALSE;
+  
+  switch (op)
+    {
+    case 'M':    case 'm':
+    case 'N':    case 'n':
+    case 'D':    case 'd':
+    case 'I':    case 'i':
+      result = (gapFormat == BLX_GAP_STRING_GFF3 || gapFormat == BLX_GAP_STRING_BAM_CIGAR);
+      break;
+      
+    case 'X':    case 'x':
+    case 'P':    case 'p':
+    case 'S':    case 's':
+    case 'H':    case 'h':
+      result = (gapFormat == BLX_GAP_STRING_BAM_CIGAR);
+      break;
+
+    case 'F':    case 'f':
+    case 'R':    case 'r':
+      result = (gapFormat == BLX_GAP_STRING_GFF3);
+      break;
+
+    default:
+      result = FALSE;
+      break;
+    };
+
+  return result;
+}
+
+
+/* Parse a section from a CIGAR string, e.g.
+
+ "M8" or "I2" or "D3" etc. and create an array of
+ * ranges where bases match.
+ *
+ * For example, the match between the following sequences:
+ *   Chr3  (reference)  1 CAAGACCTAAACTGGAT-TCCAAT  23
+ *   EST23 (target)     1 CAAGACCT---CTGGATATCCAAT  21
+ *
+ * is represented as: "M8 D3 M6 I1 M6", and corresponds to the following ranges of matching coordinates:
+ *   q = 1 to 8    matches   s = 1 to 8
+ *   q = 12 to 17  matches   s = 9 to 14
+ *   q = 18 to 23  matches   s = 16 to 21
+ *
+ * So to translate the CIGAR strings to ranges, we do the following:
+ *   M8 indicates a match of 8 places, so we increase both coords by 8;
+ *   I2 indicates an insertion in the Subject sequence of 2 bases, so we increase the s coord by 2;
+ *   D3 indicates a deletion from the Subject sequence of 3 bases, so we increase the q coord by 3. 
+ *
+ *  qDirection and sDirection are 1 if coords are in an increasing direction or -1 if decreasing.
+ */
+static const char* parseCigarStringSection(const char *text, 
+                                     GapStringData *data)
+{
+  /* Get the digit part of the string, which indicates the number of display coords (peptides in peptide matches,
+   * nucleotides in nucelotide matches). */
+  const int numPeptides = getCigarStringSectionLen(text, data->gapFormat);
+  int numNucleotides = numPeptides * data->resFactor;
+
+  const char *cp = text;
+  char op = getCigarStringSectionOperator(text, data->gapFormat, &cp);
+  
+  /*! \todo If the operator is not valid for this type of cigar string
+   * then we should set the error and return. However, for historic 
+   * reasons we have allowed invalid operators in the GFF Gap string,
+   * so continue allowing this for now and just give a warning. */
+  if (!validateCigarOperator(op, data->gapFormat))
+    g_warning("Invalid operator '%c' for gap string format '%d'", op, data->gapFormat);
+
+  switch (op)
+    {
+    case 'M':
+    case 'm':
+      parseCigarStringMatch(data, numNucleotides, numPeptides);
+      break;
+      
+    case 'N':
+    case 'n':
+      parseCigarStringIntron(data, numNucleotides, numPeptides);
+      break;
+      
+    case 'D':
+    case 'd':
+      parseCigarStringDeletion(data, numNucleotides, numPeptides);
+      break;
+
+    case 'I':
+    case 'i':
+      parseCigarStringInsertion(data, numNucleotides, numPeptides);
+      break;
+      
+    case 'X':
+    case 'x':
+      /* Mismatch. For now just treat it like a match. Blixem detects mistmatches
+       * anyway as long as we have the reference sequence. */
+      /*! \todo It might be useful to parse mistmatches in the gap string. This 
+       * extra info may help e.g. to calculate percentID for matches that extend
+       * beyond the reference sequence range. We could do that calculation here
+       * if percentID was not given in the GFF? */
+      parseCigarStringMatch(data, numNucleotides, numPeptides);
+      break;
+
+    case 'P':
+    case 'p':
+      /* Padding (silent deletion from the reference sequence). Not supported, but 
+       * ignoring these essentially gives us the unpadded cigar. */
+      break;
+
+    case 'S':
+    case 's':
+      /* Soft clipping. This indicates whether the sequence aligns from the first
+       * residue to the last one, but blixem detects this anyway, so we can ignore
+       * this. */
+      break;
+      
+    case 'H':
+    case 'h':
+      /* Hard clipping - not supported */
+      /*! \todo We could probably implement this relatively easily. Hard clipping means
+       * that bases are excluded from the start/end of the sequence (to stop repeating
+       * the same bit of sequence when we have multiple matches from the same sequence).
+       * We'd probably need to pad the sequence (making sure we merge the bits of sequence
+       * from all matches for this sequence). We don't have any real examples of this yet so
+       * leaving it for now. */
+      g_set_error(&data->error, BLX_GFF3_ERROR, BLX_GFF3_ERROR_INVALID_CIGAR_FORMAT, "Blixem does not handle the hard-clipping operator.\n");
+      break;
+
+    case 'F':
+    case 'f':
+    case 'R':
+    case 'r':
+      /* Frameshift operators - not supported */
+      g_set_error(&data->error, BLX_GFF3_ERROR, BLX_GFF3_ERROR_INVALID_CIGAR_FORMAT, "Blixem does not handle Frameshift operators.\n");
+      break;
+      
+    default:
+      g_set_error(&data->error, BLX_GFF3_ERROR, BLX_GFF3_ERROR_INVALID_CIGAR_FORMAT, "Invalid operator '%c' in cigar string.\n", op);
+      break;
+    };
+
+  return cp;
+}
+
+
+/* Validate the number of tokens in a given list. Checks that there are between 'min' and 'max' 
+ * tokens. If not, set the error. Returns the number of tokens. */
+static int validateNumTokens(char **tokens, const int minReqd, const int maxReqd, GError **error)
+{
+  char **token = tokens;
+  int count = 0;
+  
+  while (token && *token)
+    {
+      ++count;
+      ++token; 
+    }
+  
+  if (count < minReqd || count > maxReqd)
+    {
+      g_set_error(error, BLX_GFF3_ERROR, BLX_GFF3_ERROR_INVALID_NUM_TOKENS, "Expected between %d and %d columns but found %d\n", minReqd, maxReqd, count);
+    }
+  
+  return count;
+}
+
+
+/* Create a gff type with the given info and add it to the given list */
+static void addGffType(GSList **supportedTypes, const char *name, const char *soId, BlxMspType blxType)
+{
+  BlxGffType *gffType = new BlxGffType;
+  
+  gffType->name = g_strdup(name);
+  gffType->soId = g_strdup(soId);
+  gffType->blxType = blxType;
+  
+  *supportedTypes = g_slist_prepend(*supportedTypes, gffType);
+}
+
+
+/* Free all memory used by the given gff type */
+static void destroyGffType(BlxGffType **gffType)
+{
+  if (gffType && *gffType)
+    {
+      if ((*gffType)->name)
+        g_free((*gffType)->name);
+
+      if ((*gffType)->soId)
+        g_free((*gffType)->soId);
+
+      delete *gffType;
+      *gffType = NULL;
+    }
+}
+
+
+
diff --git a/seqtoolsUtils/blxGff3Parser.hpp b/seqtoolsUtils/blxGff3Parser.hpp
new file mode 100644
index 0000000..08a5adb
--- /dev/null
+++ b/seqtoolsUtils/blxGff3Parser.hpp
@@ -0,0 +1,147 @@
+/*  File: blxGff3parser.h
+ *  Author: Gemma Barson
+ *  Copyright (c) 2010 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: GFF v3 file format parser.
+ *----------------------------------------------------------------------------
+ */
+
+#ifndef BLX_GFF_P_H
+#define BLX_GFF_P_H
+
+#include <gtk/gtk.h>
+#include <seqtoolsUtils/blxmsp.hpp>
+
+/* We follow glib convention in error domain naming:
+ *          "The error domain is called <NAMESPACE>_<MODULE>_ERROR" */
+#define BLX_GFF_ERROR "BLX_GFF_ERROR"
+
+
+/* This struct contains info about a GFF type: its name and SO id, and the blixem
+ * type that it corresponds to */
+typedef struct _BlxGffType
+  {
+    char *name;         /* the type name as given in the GFF file, e.g. nucleotide_match */
+    char *soId;         /* the type's SO Id, as given in the GFF file, e.g. SO:0000347 */
+    BlxMspType blxType; /* the Blixem object type that the GFF type corresponds to */
+  } BlxGffType;
+
+
+
+/* This enum is to record the type of data currently being parsed by the parser. An input file can 
+ * contain multiple types of data. The start of a new section of data is indicated by a header 
+ * line beginning with a hash and a known type name, e.g. "# exblx_x" or "##gff-version   3"
+ *
+ * FS and SFS (Feature Series) data type names have "FS" or "SFS" followed by a specific format 
+ * type, e.g. "# SFS type=SEG". 
+ *
+ * For some data types, additional data is included in the header line(s) as well as in the 'body' 
+ * section below it. For these, there are two data types in the enum, one postfixed with _HEADER 
+ * and one with _BODY. When the header line is detected the initial type is set to the _HEADER enum, 
+ * and when we are finished processing the header information it is set to _BODY, so that we go on
+ * to process the body of the data on the next loop through. For types with no information in the 
+ * header, there is only a _BODY enum.
+ */
+typedef enum
+  {
+    PARSER_START,                  /* indicates that we haven't started processing yet */
+    PARSER_ERROR,                  /* indiates an error state */
+    
+    GFF_3_HEADER,                  /* GFF 3 header */
+    GFF_3_BODY,                    /* GFF 3 data */
+    
+    FASTA_SEQ_HEADER,              /* FASTA sequence header */
+    FASTA_SEQ_BODY,                /* Sequence data in FASTA format */
+    FASTA_SEQ_IGNORE,              /* A FASTA sequence we're not interested in */
+    
+    EXBLX_BODY,                    /* Old style sequence entries. */
+    SEQBL_BODY,                    /* Old style sequence entries. */
+    EXBLX_X_BODY,                  /* New style sequence entries with gaps and match strand. (_X stands for eXtended.) */ 
+    SEQBL_X_BODY,                  /* New style sequence entries with gaps and match strand. (_X stands for eXtended.) */
+    
+    FS_HSP_BODY,                   /* feature-series HSP data */
+    
+    FS_GSP_HEADER,                 /* feature-series GSP data header */
+    FS_GSP_BODY,                   /* feature-series GSP data */
+    
+    FS_GFF_BODY,                   /* feature-series GFF data */
+    
+    FS_SEG_BODY,                   /* feature-series segment data */
+    
+    FS_XY_HEADER,                  /* feature-series XY data header */
+    FS_XY_BODY,                    /* feature-series XY data */
+    
+    FS_SEQ_HEADER,                 /* feature-series sequence data header */
+    FS_SEQ_BODY                    /* feature-series sequence data */
+  } BlxParserState ;
+
+
+
+/* External functions */
+void parseGff3Header(const int lineNum,
+                     MSP **lastMsp, 
+                     MSP **mspList, 
+                     BlxParserState *parserState, 
+                     GString *line_string, 
+                     GList **seqList,
+                     char *refSeqName,
+                     IntRange *refSeqRange,
+                     GError **error);
+
+void parseGff3Body(const int lineNum,
+                   GArray* featureLists[],
+                   MSP **lastMsp, 
+		   MSP **mspList, 
+		   BlxParserState *parserState, 
+		   GString *line_string, 
+		   GList **seqList,
+                   GList *columnList,
+                   GSList *supportedTypes,
+                   GSList *styles,
+                   const int resFactor,
+                   GKeyFile *keyFile,
+                   const IntRange* const refSeqRange,
+                   GHashTable *lookupTable,
+                   GHashTable *fetchMethods);
+
+void parseFastaSeqHeader(char *line, const int lineNum,
+                         char **refSeq, char *refSeqName, IntRange *refSeqRange,
+                         char ***readSeq, int *readSeqLen, int *readSeqMaxLen,
+                         BlxParserState *parserState);
+                         
+                         
+GSList*                            blxCreateSupportedGffTypeList(const BlxSeqType seqType);
+void                               blxDestroyGffTypeList(GSList **supportedTypes);
+BlxDataType*                       getBlxDataType(GQuark dataType, const char *source, GKeyFile *keyFile, GError **error);
+
+
+#endif /* BLX_GFF_P_H */
diff --git a/seqtoolsUtils/blxmsp.cpp b/seqtoolsUtils/blxmsp.cpp
new file mode 100644
index 0000000..171b904
--- /dev/null
+++ b/seqtoolsUtils/blxmsp.cpp
@@ -0,0 +1,3742 @@
+/*  File: blxmsp.c
+ *  Author: Gemma Barson, 2010-09-02
+ *  Copyright (c) 2010 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: See blxmsp.h
+ *----------------------------------------------------------------------------
+ */
+
+#include <seqtoolsUtils/blxmsp.hpp>
+#include <seqtoolsUtils/utilities.hpp>
+#include <string.h>
+#include <algorithm>
+
+using namespace std;
+
+
+#define POLYA_TAIL_BASES_TO_CHECK -1 /* number of bases to check when looking for a polyA tail (-1
+                                        means check all of the unaligned sequence) */
+
+
+/* Globals */
+static int g_MaxMspLen = 0;                   /* max length in display coords of all MSPs in the detail-view */
+static BlxDataType *g_DefaultDataType = NULL; /* data type containing default values; used if sequences do not have a data-type specified */
+
+/* The config value keys for each flag in BlxDataType. 
+ * Use NULL if you don't want the value to be configurable via the config file.
+ * THIS ARRAY MUST BE UPDATED IF YOU ADD ITEMS TO THE MspFlag ENUM */
+static const char* g_MspFlagConfigKeys[] = 
+  {
+    "dummy", /* dummy value for MSPFLAG_MIN */
+
+    "link-features-by-name",
+    "squash-linked-features",
+    "squash-identical-features",
+    "strand-specific",
+    "show-reverse-strand",
+    
+    "dummy" /* dummy value for MSPFLAG_NUM_FLAGS */
+  };
+
+
+static void addBlxSequences(const char *name, const char *name_orig, const char *idTag, 
+                            BlxStrand strand, BlxDataType *dataType, const char *source, 
+                            GArray *featureLists[], MSP **lastMsp, MSP **mspList, GList **seqList, 
+                            GList *columnList, char *sequence, 
+                            MSP *msp, GHashTable *lookupTable, BlxSequence *blxSeq, GError **error);
+static void findSequenceExtents(BlxSequence *blxSeq);
+static MSP* createMissingMsp(const BlxMspType newType,
+                             const int newStart,
+                             const int newEnd,
+                             const char *qname,
+                             const int newFrame,
+                             BlxStyle *newStyle,
+                             BlxSequence *blxSeq, 
+                             GArray* featureLists[], 
+                             MSP **lastMsp, 
+                             MSP **mspList, 
+                             GList **seqList,
+                             GList *columnList,
+                             GHashTable *lookupTable,
+                             GError **error);
+
+/* Get/set the max MSP length */
+int getMaxMspLen()
+{
+  return g_MaxMspLen;
+}
+
+void setMaxMspLen(const int len)
+{
+  g_MaxMspLen = len;
+}
+
+
+/* Type determination methods */
+gboolean typeIsExon(const BlxMspType mspType)
+{
+  return (mspType == BLXMSP_CDS || mspType == BLXMSP_UTR || mspType == BLXMSP_EXON);
+}
+
+gboolean typeIsIntron(const BlxMspType mspType)
+{
+  return (mspType == BLXMSP_INTRON);
+}
+
+gboolean typeIsTranscript(const BlxMspType mspType)
+{
+  return (mspType == BLXMSP_TRANSCRIPT);
+}
+
+gboolean typeIsMatch(const BlxMspType mspType)
+{
+  return (mspType == BLXMSP_MATCH);
+}
+
+gboolean typeIsVariation(const BlxMspType mspType)
+{
+  return (mspType == BLXMSP_VARIATION);
+}
+
+gboolean typeIsRegion(const BlxMspType mspType)
+{
+  return (mspType == BLXMSP_REGION);
+}
+
+gboolean typeIsBasic(const BlxMspType mspType)
+{
+  return (mspType == BLXMSP_BASIC);
+}
+
+/* types that are drawn as simple boxes */
+gboolean typeIsBoxFeature(const BlxMspType mspType)
+{
+  return (typeIsExon(mspType) || typeIsBasic(mspType));
+}
+
+/* This returns true if the given type should be shown in the detail-view */
+gboolean typeShownInDetailView(const BlxMspType mspType)
+{
+  return (mspType == BLXMSP_MATCH || mspType == BLXMSP_CDS || mspType == BLXMSP_UTR || mspType == BLXMSP_BASIC);
+}
+
+/* This returns true if the given sequence should be added to the detail-view tree (note that
+ * this is slightly different to what is shown because an exon is added but its child cds/utrs
+ * are what is shown */
+gboolean typeAddedToDetailView(const BlxMspType mspType)
+{
+  return (mspType == BLXMSP_MATCH || mspType == BLXMSP_EXON || mspType == BLXMSP_BASIC);
+}
+
+/* This returns true if the given sequence should be shown in the detail-view */
+gboolean blxSequenceShownInDetailView(const BlxSequence *blxSeq)
+{
+  return (blxSeq->type == BLXSEQUENCE_MATCH || blxSeq->type == BLXSEQUENCE_TRANSCRIPT);
+}
+
+/* This returns true if the given sequence should be shown in the big picture grids */
+gboolean blxSequenceShownInGrid(const BlxSequence *blxSeq)
+{
+  return (blxSeq->type == BLXSEQUENCE_MATCH);
+}
+
+gboolean mspIsExon(const MSP* const msp)
+{
+  return (msp && typeIsExon(msp->type));
+}
+
+
+/* Determine whether the given msp is in a visible layer */
+gboolean mspLayerIsVisible(const MSP* const msp)
+{
+  gboolean result = TRUE;
+  
+  /* Currently only applicable to exons. Show plain exons OR their CDS/UTR sections,
+   * but not both. The plan is to add some options to toggle layers on and off, but for 
+   * now just hard code this. */
+  if (msp->type == BLXMSP_EXON)
+    {
+      result = FALSE;
+    }
+  
+  return result;
+}
+
+
+/* Determine whether the given MSP is in a coding region or untranslated region. For 
+ * exons, this is determined by the exon type. For introns, we have to look at the
+ * adjacent exons to determine whether to show them as CDS or UTR - only show it as
+ * CDS if there is a CDS exon on both sides of the intron. */
+static const GdkColor* mspGetIntronColor(const MSP* const msp, 
+                                         GArray *defaultColors,
+                                         const int defaultColorId,
+                                         const BlxSequence *blxSeq,
+                                         const gboolean selected,
+                                         const gboolean usePrintColors,
+                                         const gboolean fill,
+                                         const int exonFillColorId,
+                                         const int exonLineColorId,
+                                         const int cdsFillColorId,
+                                         const int cdsLineColorId,
+                                         const int utrFillColorId,
+                                         const int utrLineColorId)
+{
+  const GdkColor *result = NULL;
+  
+  /* Find the nearest exons before and after this MSP */
+  const MSP *prevExon = NULL;
+  const MSP *nextExon = NULL;
+  
+  GList *mspItem = blxSeq->mspList;
+  for ( ; mspItem; mspItem = mspItem->next)
+    {
+    const MSP *curMsp = (const MSP *)(mspItem->data);
+    
+    if (mspIsExon(curMsp) && mspLayerIsVisible(curMsp))
+      {
+      const int curOffset = mspGetQStart(curMsp) - mspGetQStart(msp);
+      
+      if (curOffset < 0 && (!prevExon || curOffset > mspGetQStart(prevExon) - mspGetQStart(msp)))
+	{
+	/* Current MSP is before our MSP and is the smallest offset so far */
+	prevExon = curMsp;
+	}
+      else if (curOffset > 0 && (!nextExon || curOffset < mspGetQStart(nextExon) - mspGetQStart(msp)))
+	{
+	/* Current MSP is after our MSP and is the smallest offset so far */
+	nextExon = curMsp;
+	}
+      }
+    }
+  
+  gboolean prevIsUtr = prevExon && prevExon->type == BLXMSP_UTR;
+  gboolean nextIsUtr = nextExon && nextExon->type == BLXMSP_UTR;
+  
+  /* if either exon is UTR, the intron is UTR */
+  if (prevIsUtr)
+    {
+      result = mspGetColor(prevExon, defaultColors, defaultColorId, blxSeq, selected, usePrintColors, fill, exonFillColorId, exonLineColorId, cdsFillColorId, cdsLineColorId, utrFillColorId, utrLineColorId);
+    }
+  else if (nextIsUtr)
+    {
+      result = mspGetColor(nextExon, defaultColors, defaultColorId, blxSeq, selected, usePrintColors, fill, exonFillColorId, exonLineColorId, cdsFillColorId, cdsLineColorId, utrFillColorId, utrLineColorId);
+    }
+  else if (prevExon)
+    {
+      /* Both exons (or the sole exon, if only one exists) are CDS, so the intron is CDS */
+      result = mspGetColor(prevExon, defaultColors, defaultColorId, blxSeq, selected, usePrintColors, fill, exonFillColorId, exonLineColorId, cdsFillColorId, cdsLineColorId, utrFillColorId, utrLineColorId);
+    }
+  else if (nextExon)
+    {
+      /* This is the only exon and it is CDS, so make the intron CDS */
+      result = mspGetColor(nextExon, defaultColors, defaultColorId, blxSeq, selected, usePrintColors, fill, exonFillColorId, exonLineColorId, cdsFillColorId, cdsLineColorId, utrFillColorId, utrLineColorId);
+    }
+  else
+    {
+    /* No exon exists adjacent to this intron: default to generic exon color for want of anything better to do. */
+    if (fill)
+      result = getGdkColor(exonFillColorId, defaultColors, selected, usePrintColors);
+    else
+      result = getGdkColor(exonLineColorId, defaultColors, selected, usePrintColors);
+    }
+  
+  return result;
+}
+
+gboolean mspIsIntron(const MSP* const msp)
+{
+  return (msp && msp->type == BLXMSP_INTRON);
+}
+
+gboolean mspIsBlastMatch(const MSP* const msp)
+{
+  return (msp && (msp->type == BLXMSP_MATCH));
+}
+
+gboolean mspIsPolyASite(const MSP* const msp)
+{
+  return (msp && msp->type == BLXMSP_POLYA_SITE);
+}
+
+gboolean mspIsVariation(const MSP* const msp)
+{
+  return (msp && typeIsVariation(msp->type));
+}
+
+gboolean mspIsZeroLenVariation(const MSP* const msp)
+{
+  gboolean result = mspIsVariation(msp);
+  
+  if (result)
+    {
+      const char *seq = mspGetMatchSeq(msp);
+      result = (seq && seq[0] == '-');
+    }
+
+  return result;
+}
+
+gboolean mspIsBoxFeature(const MSP* const msp)
+{
+  return (msp && typeIsBoxFeature(msp->type));
+}
+
+/* Whether the msp has a Target name (i.e. Subject sequence name) */
+gboolean mspHasSName(const MSP* const msp)
+{
+  return TRUE;
+}
+
+/* Whether the MSP requires subject sequence coords to be set. Only matches 
+ * and box features have coords on the subject sequence. (to do: is this optional for exons?) */
+gboolean mspHasSCoords(const MSP* const msp)
+{
+  return mspIsBoxFeature(msp) || mspIsBlastMatch(msp);
+}
+
+/* Whether the MSP requires subject sequence strand to be set. Only matches 
+ * require strand on the subject sequence, although exons may have them set. */
+gboolean mspHasSStrand(const MSP* const msp)
+{
+  return mspIsBlastMatch(msp);
+}
+
+/* Whether the MSP requires the actual sequence data for the subject sequence. Only
+ * matches require the sequence data. */
+gboolean mspHasSSeq(const MSP* const msp)
+{
+  return mspIsBlastMatch(msp);
+}
+
+
+/***********************************************************
+ *		MSP data access functions		   * 
+ ***********************************************************/
+
+/* Get the range of coords of the alignment on the reference sequence */
+const IntRange* mspGetRefCoords(const MSP* const msp)
+{
+  return &msp->qRange;
+}
+
+/* Get the range of coords of the alignment on the match sequence */
+const IntRange* mspGetMatchCoords(const MSP* const msp)
+{
+  return &msp->sRange;
+}
+
+/* Return the length of the range of alignment coords on the ref seq */
+int mspGetQRangeLen(const MSP* const msp)
+{
+  return msp->qRange.length();
+}
+
+/* Return the length of the range of alignment coords on the match seq */
+int mspGetSRangeLen(const MSP* const msp)
+{
+  return msp->sRange.length();
+}
+
+/* Get the start (5 prime) coord of the alignment on the reference sequence. This is
+ * the lowest value coord if the strand is forwards or the highest if it is reverse. */
+int mspGetQStart(const MSP* const msp)
+{
+  return (mspGetRefStrand(msp) == BLXSTRAND_REVERSE ? msp->qRange.max() : msp->qRange.min());
+}
+
+/* Get the end (3 prime) coord of the alignment on the reference sequence. This is
+ * the highest value coord if the strand is forwards or the lowest if it is reverse. */
+int mspGetQEnd(const MSP* const msp)
+{
+  return (mspGetRefStrand(msp) == BLXSTRAND_REVERSE ? msp->qRange.min() : msp->qRange.max());
+}
+
+/* Get the start coord of the alignment on the match sequence. This is
+ * the lowest value coord if the match strand is the same direction as the ref seq strand,
+ * or the highest value coord otherwise. */
+int mspGetSStart(const MSP* const msp)
+{
+  return (mspGetMatchStrand(msp) == mspGetRefStrand(msp) ? msp->sRange.min() : msp->sRange.max());
+}
+
+/* Get the end coord of the alignment on the match sequence. This is
+ * the highest value coord if the match strand is in the same direction as the ref seq strand, 
+ * or the lowest value coord otherwise. */
+int mspGetSEnd(const MSP* const msp)
+{
+  return (mspGetMatchStrand(msp) == mspGetRefStrand(msp) ? msp->sRange.max() : msp->sRange.min());
+}
+
+
+/* Return the match sequence name. (Gets it from the BlxSequence if the MSP itself doesn't have
+ * a name) */
+const char *mspGetSName(const MSP* const msp)
+{
+  const char *result = NULL;
+  
+  if (msp)
+    {
+      if (msp->sname && msp->sname[0] != 0)
+        {
+          result = msp->sname;
+        }
+      else if (msp->sSequence)
+        {
+          result = blxSequenceGetName(msp->sSequence);
+        }
+    }
+  
+  return result;
+}
+
+/* Return the match sequence name original name. */
+const char *mspGetSNameOrig(const MSP* const msp)
+{
+  const char *result = NULL;
+  
+  if (msp)
+    {
+      if (msp->sname_orig && *(msp->sname_orig))
+        {
+          result = msp->sname_orig;
+        }
+    }
+  
+  return result;
+}
+
+
+/* Return the length of the match sequence that the given MSP lies on */
+int mspGetMatchSeqLen(const MSP* const msp)
+{
+  return blxSequenceGetLength(msp->sSequence);
+}
+
+/* Return the reading frame of the ref sequence that the given MSP is a match against */
+int mspGetRefFrame(const MSP* const msp, const BlxSeqType seqType)
+{
+  int result = UNSET_INT;
+  
+  if (seqType == BLXSEQ_DNA)
+    {
+    /* Ignore the frame in  the msp. For DNA matches we only have one frame on each strand. */
+    result = 1;
+    }
+  else
+    {
+    result = msp->qFrame;
+    }
+  
+  return result;
+}
+
+/* Return the reference sequence name that this msp aligns against */
+const char* mspGetRefName(const MSP* const msp)
+{
+  return msp->qname;
+}
+
+/* Return the strand of the ref sequence that the given MSP is a match against */
+BlxStrand mspGetRefStrand(const MSP* const msp)
+{
+  BlxStrand result = msp->qStrand;
+  
+  /* If not strand specific, always return the forward strand */
+  if (!mspGetFlag(msp, MSPFLAG_STRAND_SPECIFIC))
+    result = BLXSTRAND_FORWARD;
+  
+  return result;
+}
+
+/* Return the strand of the match sequence that the given MSP is a match on */
+BlxStrand mspGetMatchStrand(const MSP* const msp)
+{
+  BlxStrand result = (msp->sSequence ? msp->sSequence->strand : BLXSTRAND_NONE);
+
+  /* If not strand specific, always return the forward strand */
+  if (!mspGetFlag(msp, MSPFLAG_STRAND_SPECIFIC))
+    result = BLXSTRAND_FORWARD;
+  
+  return result;
+}
+
+/* Get the match sequence for the given MSP */
+const char* mspGetMatchSeq(const MSP* const msp)
+{
+  return (msp ? blxSequenceGetSequence(msp->sSequence) : NULL);
+}
+
+/* Get the source of the MSP */
+const char* mspGetSource(const MSP* const msp)
+{
+  return blxSequenceGetSource(msp->sSequence);
+}
+
+
+/* Utility to return a pointer to the style's BlxColor for the given flags */
+static BlxColor *styleGetBlxColor(BlxStyle *style,
+                                  const bool fill,
+                                  const bool utr)
+{
+  BlxColor *blxColor = NULL;
+  
+  if (fill)
+    {
+      if (utr)
+        blxColor = &style->fillColorUtr;
+      else
+        blxColor = &style->fillColor;
+    }
+  else
+    {
+      if (utr)
+        blxColor = &style->lineColorUtr;
+      else
+        blxColor = &style->lineColor;
+    }
+
+  return blxColor ;
+}
+
+
+/* Return the color matching the given properties from the given style. Returns null if not
+ * found. defaultColorId here is the color to use if transparent.
+ * Note that this function may alter BlxColor structs to override transparent colors with
+ * alternative colors if allowTransparency is false. It will only do this once for each BlxColor
+ * and will set the overridden flag in the color to indicate that a color has been set. */
+static const GdkColor *styleGetColor(BlxStyle *style, 
+                                     const gboolean selected, 
+                                     const gboolean usePrintColors,
+                                     const gboolean fill, 
+                                     const gboolean utr,
+                                     GArray *defaultColors,
+                                     const int defaultColorId,
+                                     bool allowTransparency)
+{
+  GdkColor *result = NULL;
+  
+  BlxColor *blxColor = styleGetBlxColor(style, fill, utr);
+  
+  /* If it's transparent, use the background color instead, unless 
+   * selected is true in which case we need to use the highlight color */
+  if (blxColor && blxColor->transparent && !selected)
+    {
+      if (allowTransparency)
+        {
+          /* We don't really handle transparency. Instead we return the background color, 
+           * so that it appears transparent */
+          result = getGdkColor(defaultColorId, defaultColors, selected, usePrintColors);
+          blxColor = NULL ;
+        }
+      else if (blxColorOverridden(blxColor, selected, usePrintColors))
+        {
+          /* The transparent color has already been overridden so we can use the override color
+           * which has already been set for it */
+        }
+      else
+        {
+          /* It's a bit ambiguous what to do here. We've been told not to make it transparent
+           * (probably because in the detail view empty boxes are not much use). For now, 
+           * if the fill is transparent then replace it with a lighter version of the
+           * border colour. If the border is transparent then replace with a darker version of the
+           * fill colour. */
+          const BlxColor *source = styleGetBlxColor(style, !fill, utr) ;
+
+          if (!blxColorOverrideTransparency(blxColor, source, fill, selected, usePrintColors))
+            {
+              blxColor = NULL; // indicates not found if it failed
+            }
+        }
+    }
+
+  if (blxColor)
+    {
+      result = blxColorGetColor(blxColor, selected, usePrintColors) ;
+    }
+
+  return result;
+}
+
+
+/* Get the color for drawing the given MSP (If 'selected' is true, returns
+ * the color when the MSP is selected.). Returns the fill color if 'fill' is 
+ * true, otherwise the line color. If allowTransparency is true then the returned color is the
+ * same as the background if transparent; otherwise it is replaced with one of the default colors. */
+const GdkColor* mspGetColor(const MSP* const msp, 
+			    GArray *defaultColors, 
+                            const int defaultColorId,
+			    const BlxSequence *blxSeq,
+			    const gboolean selected, 
+			    const gboolean usePrintColors, 
+			    const gboolean fill,
+			    const int exonFillColorId,
+			    const int exonLineColorId,
+			    const int cdsFillColorId,
+			    const int cdsLineColorId,
+			    const int utrFillColorId,
+			    const int utrLineColorId,
+                            const bool allowTransparency)
+{
+  const GdkColor *result = NULL;
+  
+  if (msp->style)
+    {
+      result = styleGetColor(msp->style, selected, usePrintColors, fill, msp->type == BLXMSP_UTR, defaultColors, defaultColorId, allowTransparency);
+    }
+  
+  if (!result)
+    {
+      /* Use the default color for this MSP's type */
+      switch (msp->type)
+        {
+        case BLXMSP_BASIC: /* fall through */
+        case BLXMSP_EXON:
+          result = getGdkColor(fill ? exonFillColorId : exonLineColorId, defaultColors, selected, usePrintColors);
+          break;
+
+        case BLXMSP_CDS:
+          result = getGdkColor(fill ? cdsFillColorId : cdsLineColorId, defaultColors, selected, usePrintColors);
+          break;
+
+        case BLXMSP_UTR:
+          result = getGdkColor(fill ? utrFillColorId : utrLineColorId, defaultColors, selected, usePrintColors);
+          break;
+      
+          /* to do: mspGetIntronColor() is non-trivial, because it has to work out the color
+           * from the adjacent exons. Since mspGetColor() is called many times on re-draw, it
+           * would be better to work out whether an intron is CDS or UTR during initialisation 
+           * and use different types (e.g. BLXMSP_INTRON_CDS) that can be queried here to quickly
+           * determine what color to use. */
+        case BLXMSP_INTRON:
+          result = mspGetIntronColor(msp, defaultColors, defaultColorId, blxSeq, selected, usePrintColors, fill, exonFillColorId, exonLineColorId, cdsFillColorId, cdsLineColorId, utrFillColorId, utrLineColorId);
+          break;
+          
+        default:
+          break;
+        };
+    }
+  
+  return result;
+}
+
+
+/* Get functions from msps for various sequence properties. Result is owned by the sequence
+ * and should not be free'd. Returns NULL if the property is not set. */
+const char *mspGetColumn(const MSP* const msp, const BlxColumnId columnId)
+{
+  return (msp ? blxSequenceGetColumn(msp->sSequence, columnId) : NULL);
+}
+
+const char *mspGetOrganism(const MSP* const msp)
+{
+  return (msp ? blxSequenceGetOrganism(msp->sSequence) : NULL);
+}
+
+const char *mspGetOrganismAbbrev(const MSP* const msp)
+{
+  return (msp ? blxSequenceGetOrganismAbbrev(msp->sSequence) : NULL);
+}
+
+const char *mspGetGeneName(const MSP* const msp)
+{
+  return (msp ? blxSequenceGetGeneName(msp->sSequence) : NULL);
+}
+
+const char *mspGetTissueType(const MSP* const msp)
+{
+  return (msp ? blxSequenceGetTissueType(msp->sSequence) : NULL);
+}
+
+const char *mspGetStrain(const MSP* const msp)
+{
+  return (msp ? blxSequenceGetStrain(msp->sSequence) : NULL);
+}
+
+
+/* Return the coords of an MSP as a string. The result should be free'd with g_free */
+char *mspGetCoordsAsString(const MSP* const msp)
+{
+  char *result = NULL;
+  
+  if (msp)
+    {
+      GString *resultStr = g_string_new("");
+
+      /* If the s coords are unset then they are not relevant, so exclude them */
+      if (!msp->sRange.isSet())
+        g_string_append_printf(resultStr, "%d,%d", msp->qRange.min(), msp->qRange.max());
+      else
+        g_string_append_printf(resultStr, "%d,%d[%d,%d]", msp->qRange.min(), msp->qRange.max(), msp->sRange.min(), msp->sRange.max());
+      
+      result = g_string_free(resultStr, FALSE);
+    }
+  
+  return result;
+}
+
+
+/* Return the path in the given tree model that this MSP lies in */
+gchar* mspGetTreePath(const MSP* const msp, BlxModelId modelId)
+{
+  return msp->treePaths[modelId];
+}
+
+
+///* Returns true if a feature-series by the given name exists in the feature-series array and
+// * and, if so, sets index_out with its index. */
+//static gboolean fsArrayFindByName(GArray *fsArray, FeatureSeries *fs, int *index_out)
+//{
+//  gboolean result = FALSE;
+//  
+//  if (fsArray)
+//    {
+//    int i = 0;
+//    for ( ; i < fsArray->len; ++i)
+//      {
+//      FeatureSeries *compareFs = &g_array_index(fsArray, FeatureSeries, i);
+//      
+//      if (!fsSortByNameCompareFunc(fs, compareFs))
+//	{
+//	result = TRUE;
+//	*index_out = i;
+//	break;
+//	}
+//      }
+//    }
+//  
+//  return result;
+//}
+
+
+/* Comparison function to sort two Feature Series by the order number stored in the FeatureSeries
+ * struct. Returns -1 if the first item is before the second, 1 if the second is first, or 0 if 
+ * they are equal.  */
+gint fsSortByOrderCompareFunc(gconstpointer fs1_in, gconstpointer fs2_in)
+{
+  int result = 0;
+  
+  FeatureSeries *fs1 = (FeatureSeries *)fs1_in;
+  FeatureSeries *fs2 = (FeatureSeries *)fs2_in;
+  
+  if (fs1->order < fs2->order)
+    result = -1;
+  else if (fs1->order > fs2->order)
+    result = 1;
+  
+  return result;
+}
+
+
+/* Comparison function to sort two Features Series by name. */
+gint fsSortByNameCompareFunc(gconstpointer fs1_in, gconstpointer fs2_in)
+{
+  FeatureSeries *fs1 = (FeatureSeries *)fs1_in;
+  FeatureSeries *fs2 = (FeatureSeries *)fs2_in;
+  
+  /*printf("%s - %s : %d\n", fs1->name, fs2->name,  strcmp(fs1->name, fs2->name));*/
+  
+  return strcmp(fs1->name, fs2->name);
+}
+
+
+/* Insert the given MSP into the Feature Series of the given name. If the Feature Series
+ * does not exist yet, create it. Also, if the Feature Series array does not exist yet, create
+ * that too. */
+//void insertFS(MSP *msp, char *series)
+//{
+//  if (!fsArr) 
+//    {
+//    fsArr = g_array_sized_new(TRUE, FALSE, sizeof(FeatureSeries), 50);
+//    }
+//  
+//  static int orderNum = 0; /* will increment this each time we add a feature series to the array */
+//  
+//  FeatureSeries *fs = new FeatureSeries;
+//  fs->on = 1;
+//  fs->y = 0.0;
+//  fs->xy = (msp->type == BLXMSP_XY_PLOT ? 1 : 0);
+//  
+//  fs->name = g_strdup(series);
+//  
+//  int i;
+//  if (fsArrayFindByName(fsArr, fs, &i))
+//    {
+//    msp->fs = &g_array_index(fsArr, FeatureSeries, i);
+//    g_free(fs->name);
+//    g_free(fs);
+//    }
+//  else
+//    {
+//    /* Remember the order we added them so we can sort by it again later. */
+//    orderNum++;
+//    fs->order = orderNum;
+//    
+//    g_array_append_val(fsArr, *fs);
+//    //      g_array_sort(fsArr, fsSortByNameCompareFunc);
+//    
+//    msp->fs = fs;
+//    }
+//}
+//
+
+
+/* Get the MSP at the given index in the given array. Returns null if out of bounds */
+MSP* mspArrayIdx(const GArray* const array, const int idx)
+{
+  MSP *msp = NULL;
+  
+  if (idx >= 0 && idx < (int)array->len)
+    msp = g_array_index(array, MSP*, idx);
+  
+  return msp;
+}
+
+
+/* Check if the given character is a polyA character (i.e. 'a', or if the strand is reverse 't') */
+static gboolean isPolyAChar(const char c, const BlxStrand strand)
+{
+  gboolean result = FALSE;
+
+  if (strand == BLXSTRAND_FORWARD)
+    result = (c == 'a' || c == 'A');
+  else
+    result = (c == 't' || c == 'T');
+
+  return result;
+}
+
+
+/* Get the number of bases to check when looking for a polyA tail. We may want to make this configurable? */
+static int getNumPolyATailBasesToCheck()
+{
+  static int result = POLYA_TAIL_BASES_TO_CHECK;
+  return result;
+}
+
+
+/* Returns true if there is a polyA site at the 3' end of this MSP's alignment range. */
+gboolean mspHasPolyATail(const MSP* const msp)
+{
+  gboolean found = FALSE;
+  
+  /* Only matches have polyA tails. */
+  if (mspIsBlastMatch(msp))
+    {
+      const char *seq = mspGetMatchSeq(msp);
+      
+      if (seq)
+        {
+          const int numRequired = getNumPolyATailBasesToCheck();
+          const int minRequired = 3; /* check at least 3 bases */
+          const int len = strlen(seq);
+          BlxStrand sStrand = mspGetMatchStrand(msp);
+          BlxStrand qStrand = mspGetRefStrand(msp);
+          int sCoord = mspGetSEnd(msp);
+
+          if (qStrand == sStrand) 
+            {
+              ++sCoord; /* next coord after alignment block end */
+              int sMax = mspGetSStart(msp);
+
+              if (numRequired > 0) /* -1 means check all of the unaligned sequence */
+                sMax = sCoord + numRequired;
+
+              if (sMax <= len && sMax - sCoord >= minRequired)
+                {
+                  found = TRUE;
+
+                  for ( ; sCoord <= sMax; ++sCoord)
+                    {
+                      if (!isPolyAChar(seq[sCoord - 1], qStrand))
+                        {
+                          found = FALSE;
+                          break;
+                        }
+                    }
+                }
+            }
+          else
+            {
+              --sCoord; /* next coord after alignment block end */
+              int sMin = 1;
+              
+              if (numRequired > 0)
+                sMin = sCoord - numRequired;
+
+              if (sMin >= 1 && sCoord - sMin >= minRequired)
+                {
+                  found = TRUE;
+
+                  for ( ; sCoord >= sMin; --sCoord)
+                    {
+                      if (!isPolyAChar(seq[sCoord - 1], qStrand))
+                        {
+                          found = FALSE;
+                          break;
+                        }
+                    }
+                }
+            }
+        }
+    }
+  
+  return found;
+}
+
+
+/* Returns true if the given MSP coord (in ref seq nucleotide coords) is inside a polyA tail, if
+ * this MSP has one. */
+gboolean mspCoordInPolyATail(const int coord, const MSP* const msp)
+{
+  gboolean result = mspHasPolyATail(msp);
+  
+  /* See if the coord is outside the 3' end of the alignment range (i.e. is greater than the
+   * max coord if we're on the forward strand or less than the min coord if on the reverse). */
+  //result &= ((mspGetRefStrand(msp) == BLXSTRAND_FORWARD && coord > msp->displayRange.max) ||
+  //           (mspGetRefStrand(msp) == BLXSTRAND_REVERSE && coord < msp->displayRange.min));
+  result &= coord > msp->displayRange.max();
+
+  return result;
+}
+
+
+/***********************************************************
+ *		      BlxSequence			   * 
+ ***********************************************************/
+
+/* Append the contents of the given text to the GString, if the text is non-null,
+ * including the given separator before the text is appended. Pass the separator
+ * as an empty string if no separation is required. */
+static void appendTextIfNonNull(GString *gstr, const char *separator, const char *text)
+{
+  if (text)
+    {
+      g_assert(separator);
+      g_string_append_printf(gstr, "%s%s", separator, text);
+    }
+}
+
+/* Return summary info about a given BlxSequence (e.g. for displaying in the status bar). The
+ * result should be free'd with g_free. */
+char* blxSequenceGetSummaryInfo(const BlxSequence* const blxSeq, GList *columnList)
+{
+  char *result = NULL;
+  
+  if (blxSeq)
+    {
+      GString *resultStr = g_string_new("");
+      const char *separator = "";
+
+      /* Loop through all the columns, appending any that should be shown
+       * to the result string */
+      GList *item = columnList;
+
+      for ( ; item; item = item->next)
+        {
+          BlxColumnInfo *columnInfo = (BlxColumnInfo*)(item->data);
+          
+          if (columnInfo->showSummary)
+            {
+              const char *valueText = blxSequenceGetValueAsString(blxSeq, columnInfo->columnId);
+
+              if (valueText)
+                {
+                  appendTextIfNonNull(resultStr, separator, valueText);
+
+                  /* The first item has no separator, but subsequence items do,
+                   * so set the separator after the first item has been added. */
+                  separator = ";  ";
+                }
+            }
+        }
+      
+      result = g_string_free(resultStr, FALSE);
+    }
+  
+  return result;
+}
+
+
+/* Return the full name of a BlxSequence (including prefix and variant) */
+const char *blxSequenceGetName(const BlxSequence *seq)
+{
+  const char *result = NULL;
+  
+  if (seq)
+    {
+      result = blxSequenceGetValueAsString(seq, BLXCOL_SEQNAME);
+      
+      if (!result && seq->idTag)
+        result = seq->idTag;
+
+      if (!result)
+        g_warning("Sequence does not have a name specified.\n");
+    }
+  
+  return result;
+}
+
+/* Return the Source text of a BlxSequence, if it has one (note that it gets
+ * this from the first MSP and does no checking whether other MSPs have the 
+ * same source or not). */
+const char *blxSequenceGetSource(const BlxSequence *seq)
+{
+  const char *result = NULL;
+  
+  if (seq)
+    result = blxSequenceGetValueAsString(seq, BLXCOL_SOURCE);
+  
+  return result;
+}
+
+/* Return the fetch method of a BlxSequence. If 'bulk' is true,
+ * get the bulk-fetch method, otherwise the user-fetch method.
+ * 'index' indicates which method to choose if multiple methods
+ * are available; 0 is the first (preferred) method, 1 the second 
+ * etc. If no fetch method is set, return the given default method 
+ * instead (for index==0 only). Pass 'defaultMethod' as 0 if N/A. */
+GQuark blxSequenceGetFetchMethod(const BlxSequence *seq, 
+                                 const gboolean bulk,
+                                 const gboolean optionalColumns,
+                                 const int index,
+                                 const GArray *defaultMethods)
+{
+  GQuark result = 0;
+
+  if (seq && seq->dataType)
+    {
+      GArray *array = NULL;
+
+      if (bulk && optionalColumns)
+        array = seq->dataType->optionalFetch;
+      else if (bulk)
+        array = seq->dataType->bulkFetch;
+      else
+        array = seq->dataType->userFetch;
+      
+      if (array && index >= 0 && index < (int)array->len)
+        result = g_array_index(array, GQuark, index);
+    }
+
+  if (!result && defaultMethods && index >= 0 && index < (int)defaultMethods->len) 
+    {
+      result = g_array_index(defaultMethods, GQuark, index);
+    }
+  
+  return result;
+}
+
+/* Return the length of the given blxsequence's sequence data */
+int blxSequenceGetLength(const BlxSequence *seq)
+{
+  int result = 0;
+  
+  if (seq)
+    {
+      const char *sequence = blxSequenceGetSequence(seq);
+
+      if (sequence)
+        result = strlen(sequence);
+    }
+  
+  return result;
+}
+
+/* Get the start extent of the alignments from this match sequence on the
+ * given reference sequence strand */
+int blxSequenceGetStart(const BlxSequence *seq, const BlxStrand strand)
+{
+  int result = UNSET_INT;
+
+  if (strand == BLXSTRAND_REVERSE && seq->qRangeRev.isSet())
+    result = seq->qRangeRev.min();
+  else if (seq->qRangeFwd.isSet())
+    result = seq->qRangeFwd.min();
+
+  return result;
+}
+
+/* Get the end extend of the sequence on the ref sequence */
+int blxSequenceGetEnd(const BlxSequence *seq, const BlxStrand strand)
+{
+  int result = UNSET_INT;
+
+  if (strand == BLXSTRAND_REVERSE && seq->qRangeRev.isSet())
+    result = seq->qRangeRev.max();
+  else if (seq->qRangeFwd.isSet())
+    result = seq->qRangeFwd.max();
+
+  return result;
+}
+
+/* Get the sequence data for the given blxsequence */
+const char *blxSequenceGetSequence(const BlxSequence *seq)
+{
+  const char *result = blxSequenceGetValueAsString(seq, BLXCOL_SEQUENCE);
+  return result;
+}
+
+/* This returns true if the given sequence object requires sequence data
+ * (i.e. the actual dna or peptide sequence string) */
+gboolean blxSequenceRequiresSeqData(const BlxSequence *seq)
+{
+  return (seq && 
+          (seq->type == BLXSEQUENCE_MATCH || 
+           seq->type == BLXSEQUENCE_VARIATION || 
+           seq->type == BLXSEQUENCE_REGION));
+}
+
+/* This returns true if the given sequence object requires optional data such
+ * as organism and tissue-type, if this data is available. */
+gboolean blxSequenceRequiresOptionalData(const BlxSequence *seq)
+{
+  return (seq && seq->type == BLXSEQUENCE_MATCH);
+}
+
+/* This returns true if the given sequence object requires the data for
+ * the given column */
+gboolean blxSequenceRequiresColumnData(const BlxSequence *seq, const BlxColumnId columnId)
+{
+  gboolean result = FALSE;
+
+  if (seq)
+    {
+      if (columnId == BLXCOL_ORGANISM || columnId == BLXCOL_TISSUE_TYPE ||
+          columnId == BLXCOL_GENE_NAME || columnId == BLXCOL_STRAIN ||
+          columnId >= BLXCOL_NUM_COLUMNS)
+        {
+          result = blxSequenceRequiresOptionalData(seq);
+        }
+      else if (columnId == BLXCOL_SEQUENCE)
+        {
+          result = blxSequenceRequiresSeqData(seq);
+        }
+    }
+  
+  return result;
+}
+
+/* Get the value for the given column */
+GValue* blxSequenceGetValue(const BlxSequence *seq, const int columnId)
+{
+  GValue *result = NULL;
+  
+  if (seq && seq->values && columnId < (int)seq->values->len)
+    result = &g_array_index(seq->values, GValue, columnId);
+
+  return result;
+}
+
+void blxSequenceSetValue(const BlxSequence *seq, const int columnId, GValue *value_in)
+{
+  if (seq && seq->values)
+    {
+      GValue *value = blxSequenceGetValue(seq, columnId);
+      g_value_reset(value);
+      g_value_copy(value_in, value);
+    }
+}
+
+/* Clear the idTag stored in the BlxSequence. This gets done after importing a GFF file is
+ * complete because we don't want the IDs to clash with further files which may be imported
+ * later. If the name is not set, this sets the name to the ID before clearing the ID (really we
+ * should probably be trying to construct a unique name from the source, type, strand and coords,
+ * but we don't currently store the GFF type). */
+static void blxSequenceClearGFFIds(BlxSequence *seq)
+{
+  if (seq)
+    {
+      if (!blxSequenceGetName(seq))
+        {
+          if (seq->idTag)
+            blxSequenceSetValueFromString(seq, BLXCOL_SEQNAME, seq->idTag);
+          else
+            blxSequenceSetValueFromString(seq, BLXCOL_SEQNAME, "<no name>");
+        }
+
+      if (seq->idTag)
+        {
+          g_free(seq->idTag);
+          seq->idTag = NULL;
+        }
+    }
+}
+
+/* Set the value for the given column. The given string is converted to
+ * the relevant value type */
+void blxSequenceSetValueFromString(const BlxSequence *seq, const int columnId, const char *inputStr)
+{
+  if (inputStr && seq && seq->values)
+    {
+      GValue *value = blxSequenceGetValue(seq, columnId);
+
+      if (value)
+        {
+          g_value_reset(value);
+
+          if (G_VALUE_HOLDS_STRING(value))
+            {
+              g_value_take_string(value, g_strdup(inputStr));
+            }
+          else if (G_VALUE_HOLDS_INT(value))
+            {
+              const int tmp = atoi(inputStr);
+              g_value_set_int(value, tmp);
+            }
+          else if (G_VALUE_HOLDS_DOUBLE(value))
+            {
+              const gdouble tmp = g_strtod(inputStr, NULL);
+              g_value_set_double(value, tmp);
+            }
+          else
+            {
+              g_warning("Tried to set value of unknown type for column '%d'\n", columnId);
+            }
+        }
+    }
+}
+
+/* Get the string value for the given column. Returns null if the
+ * value is not a string type. */
+const char* blxSequenceGetValueAsString(const BlxSequence *seq, const int columnId)
+{
+  const char *result = NULL;
+  
+  GValue *value = blxSequenceGetValue(seq, columnId);
+
+  if (value)
+    {
+      if (G_VALUE_HOLDS_STRING(value))
+        result = g_value_get_string(value);
+      else if (G_VALUE_HOLDS_INT(value))
+        result = convertIntToString(g_value_get_int(value));
+      else if (G_VALUE_HOLDS_DOUBLE(value))
+        result = convertDoubleToString(g_value_get_double(value), 2);
+    }
+  
+  /* Return null if it's an empty value (i.e. if it's unset) */
+  if (result && *result == 0)
+    result = NULL;
+
+  return result;
+}
+
+/* Get the relevant data about a sequence for the given column ID (at the moment
+ * this only supports string data) */
+const char* blxSequenceGetColumn(const BlxSequence* const blxSeq, const BlxColumnId columnId)
+{
+  const char *result = NULL;
+
+  GValue *value = blxSequenceGetValue(blxSeq, columnId);
+    
+  if (value && G_VALUE_HOLDS_STRING(value))
+    {
+      result = g_value_get_string(value);
+    }
+  
+  return result;
+}
+
+const char *blxSequenceGetOrganism(const BlxSequence *seq)
+{
+  return blxSequenceGetValueAsString(seq, BLXCOL_ORGANISM);
+}
+
+const char *blxSequenceGetOrganismAbbrev(const BlxSequence *seq)
+{
+  return (seq ? seq->organismAbbrev : NULL);
+}
+
+const char *blxSequenceGetGeneName(const BlxSequence *seq)
+{
+  return blxSequenceGetValueAsString(seq, BLXCOL_GENE_NAME);
+}
+
+const char *blxSequenceGetTissueType(const BlxSequence *seq)
+{
+  return blxSequenceGetValueAsString(seq, BLXCOL_TISSUE_TYPE);
+}
+
+const char *blxSequenceGetStrain(const BlxSequence *seq)
+{
+  return blxSequenceGetValueAsString(seq, BLXCOL_STRAIN);
+}
+
+/* Return the sequence data as a string in fasta format.
+ * Result should be free'd with g_free, unless the name
+ * or sequence couldn't be found, in which case the result
+ * is null */
+char *blxSequenceGetFasta(const BlxSequence *seq)
+{
+  char *result = NULL;
+  
+  if (seq)
+    {
+      const char *name = blxSequenceGetName(seq);
+      const char *sequence = blxSequenceGetSequence(seq);
+      
+      if (name && sequence)
+        {
+          result = g_strdup_printf(">%s\n%s", name, sequence);
+        }
+    }
+  
+  return result;
+}
+
+
+/* Return all the stored info about a blx sequenece (description, organism, tissue type etc.) 
+ * in a single string. The result should be free'd by the caller using g_free. If 'allowNewlines'
+ * is true the data is separated with newline characters, otherwise with tabs (i.e. pass as false
+ * if returned string is to be shown as a single line). The dataLoaded flag should be passed as
+ * false if the optional data has not been loaded yet. */
+char *blxSequenceGetInfo(BlxSequence *blxSeq, const gboolean allowNewlines, GList *columnList)
+{
+  char *result = NULL;
+  
+  if (blxSeq)
+    {
+      GString *resultStr = g_string_new("");
+      char separator = allowNewlines ? '\n' : '\t';
+      char strand = blxSeq->strand == BLXSTRAND_REVERSE ? '-' : '+';
+
+      /* Loop through all the columns, appending them to the result string */
+      GList *item = columnList;
+      const int titleWidth = 17; /* if title is less than this width then it will be padded */
+
+      for ( ; item; item = item->next)
+        {
+          BlxColumnInfo *columnInfo = (BlxColumnInfo*)(item->data);
+          
+          const char *valueText = blxSequenceGetValueAsString(blxSeq, columnInfo->columnId);
+          const char *text = valueText ? valueText : "";
+              
+          if (columnInfo->columnId == BLXCOL_SEQNAME)
+            g_string_append_printf(resultStr, "%-*s  %s%c%c", titleWidth, columnInfo->title, text, strand, separator);
+          else
+            g_string_append_printf(resultStr, "%-*s  %s%c", titleWidth, columnInfo->title, text, separator);
+        }
+      
+      /* Loop through the child features and show their coords */
+      const char *title = "Coords";
+      g_string_append_printf(resultStr, "%-*s  ", titleWidth, title);
+      GList *mspItem = blxSeq->mspList;
+      
+      for ( ; mspItem; mspItem = mspItem->next)
+        {
+          const MSP* const msp = (const MSP*)(mspItem->data);
+          
+          /* Don't show 'exon' msps because we show the exon's
+           * individual 'cds' and 'utr' instead */
+          if (msp->type != BLXMSP_EXON)
+            {
+              char *coordsStr = mspGetCoordsAsString(msp);
+              g_string_append_printf(resultStr, "%s  ", coordsStr ? coordsStr : "");
+              
+              if (coordsStr)
+                g_free(coordsStr);
+            }
+        }
+      
+      result = g_string_free(resultStr, FALSE);
+    }
+  
+  return result;
+}
+
+/* Find a BlxSequence by its full name (must be an exact match but is case insensitive) */
+static BlxSequence* blxSequenceFindByName(const char *name, GList *allSeqs)
+{
+  BlxSequence *result = NULL;
+  GList *listItem = allSeqs;
+  
+  for ( ; listItem; listItem = listItem->next)
+    {
+      BlxSequence *curSeq = (BlxSequence*)(listItem->data);
+      const char *curName = blxSequenceGetName(curSeq);
+    
+      if (name && stringsEqual(curName, name, FALSE))
+        {
+          result = curSeq;
+          break;
+        }
+    }
+  
+  return result;
+}
+
+
+/* Get the "parent" sequence of the given protein variant. Assumes the variant
+ * contains a dash '-' in the name followed by the variant number as a digit. 
+ * e.g. SW:P51531-2.2. The function looks for a sequence with the same name but
+ * with this dash and the following digit(s) (up to the end of the name or the '.'
+ * if there is one) removed. Returns NULL if no parent was found. */
+BlxSequence* blxSequenceGetVariantParent(const BlxSequence *variant, GList *allSeqs)
+{
+  BlxSequence *result = NULL;
+  
+  const char *variantName = blxSequenceGetName(variant);
+  
+  if (variantName)
+    {
+      char *parentName = g_strdup(variantName);
+      char *insertPoint = strchr(parentName, '-');
+      
+      if (insertPoint)
+        {
+          /* Replace '-' by terminating char, in case there's nothing else to copy in. */
+          *insertPoint = '\0';
+          
+          /* The insert point is where we'll copy into. Create another pointer that we'll increment
+           * until we find a '.' and then we'll copy from that point. */
+          char *copyPoint = insertPoint;
+          ++copyPoint;
+          
+          gboolean foundRestartPoint = FALSE; /* set to true when we find where to start copying from again */
+          
+          while (copyPoint && *copyPoint != '\0')
+            {
+              if (foundRestartPoint)
+                {
+                  *insertPoint = *copyPoint;
+                  ++insertPoint;
+                }
+              else if (*copyPoint == '.')
+                {
+                  foundRestartPoint = TRUE;
+                  *insertPoint = *copyPoint;
+                  ++insertPoint;
+                }
+          
+              ++copyPoint;
+            }
+        
+          *insertPoint = '\0';
+        
+          result = blxSequenceFindByName(parentName, allSeqs);
+          g_free(parentName);
+        }
+    }
+  
+  return result;
+}
+
+
+/* Destroy all of the BlxSequences */
+void destroyBlxSequenceList(GList **seqList)
+{
+  GList *seqItem = *seqList;
+  
+  for ( ; seqItem; seqItem = seqItem->next)
+    {
+      BlxSequence *blxSeq = (BlxSequence*)(seqItem->data);
+      destroyBlxSequence(blxSeq);
+    }
+  
+  g_list_free(*seqList);
+  *seqList = NULL;
+}
+
+
+/* Frees all memory used by a BlxSequence */
+void destroyBlxSequence(BlxSequence *seq)
+{
+  if (seq)
+    {
+      if (seq->values)
+        {
+          /* Free all column values */
+          int i = 0;      
+          for ( ; i < (int)seq->values->len; ++i)
+            {
+              GValue *value = &g_array_index(seq->values, GValue, i);
+              g_value_unset(value);
+            }
+        }
+
+      if (seq->idTag)
+        g_free(seq->idTag);
+          
+      delete seq;
+    }
+}
+
+
+/* Destroy an msp and remove it from the BlxSequence and msp lists */
+static void destroyMspFull(MSP *msp, BlxSequence *seq, GArray *featureLists[], MSP **lastMsp, MSP **mspList)
+{
+  /* Remove from the feature list */
+  GArray *array = featureLists[msp->type];
+  unsigned int i = 0;
+  for ( ; i < array->len; ++i)
+    {
+      MSP *curMsp = g_array_index(array, MSP*, i);
+      
+      if (curMsp == msp)
+        {
+          array = g_array_remove_index(array, i);
+          break;
+        }
+    }
+  featureLists[msp->type] = array;
+  
+  /* Remove from mspList */
+  MSP *curMsp = *mspList;
+  MSP *prevMsp = NULL;
+  for ( ; curMsp; curMsp = curMsp->next)
+    {
+      if (msp == curMsp)
+        {
+          if (!prevMsp)
+            *mspList = curMsp->next; /* Remove msp from start of list */
+          else 
+            prevMsp->next = curMsp->next; /* Remove link to msp */
+          
+          if (*lastMsp == msp)
+            *lastMsp = prevMsp;  /* Update pointer to last msp */
+
+          break;
+        }
+      
+      prevMsp = curMsp;
+    }
+  
+  /* Remove from the BlxSequence, if given */
+  if (seq && seq->mspList)
+    {
+      GList *item = seq->mspList;
+
+      for ( ; item; item = item->next)
+        {
+          MSP *curMsp = (MSP*)(item->data);
+          if (curMsp == msp)
+            {
+              seq->mspList = g_list_remove_link(seq->mspList, item);
+              break;
+            }
+        }
+    }
+
+  destroyMspData(msp);
+}
+
+
+/* destroy a blxsequence and it's msps, and remove them from the feature lists */
+static void destroyBlxSequenceFull(BlxSequence *seq, GArray *featureLists[], MSP **lastMsp, MSP **mspList, GList **seqList)
+{
+  /* destroy each msp */
+  GList *mspItem = seq->mspList;
+  
+  for ( ; mspItem; mspItem = mspItem->next)
+    {
+      MSP *msp = (MSP*)(mspItem->data);
+      destroyMspFull(msp, NULL, featureLists, lastMsp, mspList); /* don't remove from
+                                                                    seq->mspList because we
+                                                                    destroy this anyway */
+    }
+
+  g_list_free(seq->mspList);
+
+  /* Remove BlxSequence from seqList */
+  *seqList = g_list_remove(*seqList, seq);
+
+  destroyBlxSequence(seq);
+}
+
+
+/* Set the value for a particular column (by column name) */
+void blxSequenceSetColumn(BlxSequence *seq, const char *colName, const char *value, GList *columnList)
+{
+  if (!colName || !value)
+    return;
+  
+  gboolean found = FALSE;
+
+  /* Loop through the column list and find the one with this name */
+  GList *item = columnList;
+  for ( ; item && !found; item = item->next)
+    {
+      BlxColumnInfo *columnInfo = (BlxColumnInfo*)(item->data);
+      
+      if (stringsEqual(colName, columnInfo->title, FALSE))
+        {
+          blxSequenceSetValueFromString(seq, columnInfo->columnId, value);
+          found = TRUE;
+        }
+    }
+  
+  if (!found)
+    g_warning("Unrecognised column '%s'\n", colName);
+}
+
+
+/* Utility to create a BlxSequence with the given name. */
+BlxSequence* createEmptyBlxSequence()
+{
+  BlxSequence *seq = new BlxSequence;
+  
+  seq->type = BLXSEQUENCE_UNSET;
+  seq->dataType = NULL;
+  seq->idTag = NULL;
+  seq->mspList = NULL;
+  seq->sequenceReqd = FALSE;
+  seq->values = NULL;
+  seq->organismAbbrev = NULL;
+
+  return seq;
+}
+
+
+/* Copies all fields in a sequence. Copies all MSPs apart from CDSs whose name does not match the
+ * given quark */
+static void copyBlxSequenceNamedCds(const BlxSequence *src, 
+                                    const GQuark cdsQuark,
+                                    GArray *featureLists[], 
+                                    MSP **lastMsp, 
+                                    MSP **mspList,
+                                    GList **seqList,
+                                    GList *columnList,
+                                    GHashTable *lookupTable, 
+                                    GError **error)
+{
+  GError *tmpError = NULL;
+  
+  /* We must give the new BlxSequence a unique id - use the cds name */
+  const char *idTag = g_quark_to_string(cdsQuark);
+
+  /* We'll copy these values directly from the source */
+  const char *source = blxSequenceGetSource(src);
+  const BlxStrand sStrand = src->strand;
+  BlxDataType *dataType = src->dataType;
+  
+  /* Copy all MSPs except CDSs whose name does not match cdsQuark */
+  GList *mspItem = src->mspList;
+  
+  for ( ; mspItem && !tmpError; mspItem = mspItem->next)
+    {
+      const MSP* msp = (const MSP*)(mspItem->data);
+      
+      if (msp->type != BLXMSP_CDS || g_quark_from_string(msp->sname) == cdsQuark)
+        {
+          MSP *newMsp = copyMsp(msp, featureLists, lastMsp, mspList, FALSE, FALSE);
+
+          /* Add the new msp to the new blx sequence (this creates it if it does not exist
+           * i.e. the first time we get here for this idTag) */
+          addBlxSequence(newMsp->sname, newMsp->sname_orig, idTag, sStrand, dataType, 
+                         source, seqList, columnList, 
+                         NULL, newMsp, lookupTable, NULL, &tmpError);
+        }
+    }
+
+  if (tmpError)
+    g_propagate_error(error, tmpError);
+}
+
+
+BlxDataType* createBlxDataType()
+{
+  BlxDataType *result = new BlxDataType;
+  
+  result->name = 0;
+  result->bulkFetch = NULL;
+  result->userFetch = NULL;
+
+  /* Loop through the flags, setting them all to false initially */
+  int flag = MSPFLAG_MIN;
+  for ( ; flag < MSPFLAG_NUM_FLAGS; ++flag)
+    {
+      result->flags[flag] = FALSE;
+    }
+  
+  /* Set any specific flags that we want to be true by default */
+  result->flags[MSPFLAG_SQUASH_LINKED_FEATURES] = TRUE;
+  result->flags[MSPFLAG_STRAND_SPECIFIC] = TRUE;
+  result->flags[MSPFLAG_SHOW_REVERSE_STRAND] = TRUE;
+
+  return result;
+}
+
+void destroyBlxDataType(BlxDataType **blxDataType)
+{
+  if (!blxDataType)
+    return;
+  
+  delete *blxDataType;
+  *blxDataType = NULL;
+}
+
+/* The following functions get the data type values as strings */
+const char* getDataTypeName(BlxDataType *blxDataType)
+{
+  return blxDataType ? g_quark_to_string(blxDataType->name) : NULL;
+}
+
+
+/* does the work for compareFuncMspPos and compareFuncMspArray */
+static gint compareMsps(const MSP* const msp1, const MSP* const msp2)
+{
+  gint result = 0;
+  
+  if (result == 0)
+    {
+      if (msp1->qRange.min() == msp2->qRange.min())
+        {
+          /* Sort by type. Lower type numbers should appear first. */
+          result = msp2->type - msp1->type;
+        }
+      else 
+        {
+          result = msp1->qRange.min() -  msp2->qRange.min();
+        }
+    }
+
+  return result;
+}
+
+/* Compare the start position in the ref seq of two MSPs. Returns a negative value if a < b; zero
+ * if a = b; positive value if a > b. Secondarily sorts by type in the order that types appear in 
+ * the BlxMspType enum. Note that this sorts first by strand. */
+gint compareFuncMspPos(gconstpointer a, gconstpointer b)
+{
+  gint result = 0;
+
+  const MSP* const msp1 = (const MSP*)a;
+  const MSP* const msp2 = (const MSP*)b;
+
+  /* First, sort by strand */
+  result = (int)msp1->qStrand - (int)msp2->qStrand;
+  
+  if (!result)
+    result = compareMsps(msp1, msp2);
+
+  return result;
+}
+
+
+/* Same as compareFuncMspPos but accepts pointers to MSP pointers (which is 
+ * what the GArray of MSPs holds). Note that this does NOT sort first by strand,
+ * unlike compareFuncMspPos. This is important for the detail-view filtering 
+ * functions. */
+gint compareFuncMspArray(gconstpointer a, gconstpointer b)
+{
+  const MSP* const msp1 = *((const MSP**)a);
+  const MSP* const msp2 = *((const MSP**)b);
+
+  return compareMsps(msp1, msp2);
+}
+
+
+/* returns true if the given msp should be output when piping features to dotter */
+static gboolean outputMsp(const MSP* const msp, IntRange *range1, IntRange *range2)
+{
+  return ((msp->type == BLXMSP_FS_SEG || mspIsBoxFeature(msp) || mspIsIntron(msp) || mspIsBlastMatch(msp)) && 
+          (rangesOverlap(&msp->qRange, range1) || rangesOverlap(&msp->qRange, range2))
+         );
+}
+
+
+/* Counts the number of msps that should be output when piping to dotter */
+static int countMspsToOutput(const BlxSequence* const blxSeq, IntRange *range1, IntRange *range2)
+{
+  int numMsps = 0;
+  
+  GList *mspItem = blxSeq->mspList;
+  for ( ; mspItem; mspItem = mspItem->next)
+    {
+      const MSP* const msp = (const MSP*)(mspItem->data);
+      
+      if (outputMsp(msp, range1, range2))
+        ++numMsps;
+    }
+  
+  return numMsps;
+}
+
+
+/* write data for the given transcript to the given output pipe. */
+void writeTranscriptToOutput(GIOChannel *ioChannel,
+                             const BlxSequence* const blxSeq, 
+                             IntRange *range, 
+                             const IntRange* const refSeqRange,
+                             GError **error)
+{
+  g_return_if_fail(blxSeq && blxSeq->type == BLXSEQUENCE_TRANSCRIPT);
+
+  /* Count how many exons are within range */
+  int numMsps = 0;
+  GList *mspItem = blxSeq->mspList;
+
+  for ( ; mspItem; mspItem = mspItem->next)
+    {
+      const MSP* msp = (const MSP*)(mspItem->data);
+      
+      /* Only output exons. Also, if an exon has child msps then ignore it and only output the children */
+      if (mspIsBoxFeature(msp) && !msp->childMsps)
+        {
+          /* It's possible that some exons may be out of bounds: clip them, or if completely out
+           * of range ignore this exon. */
+          if (msp->qRange.min() < refSeqRange->max() && msp->qRange.max() > refSeqRange->min())
+            {
+              ++numMsps;
+            }
+        }
+    }
+
+  if (numMsps < 1)
+    return;
+
+  char *tmpStr = g_strdup_printf("%d %d %d",
+                                 blxSeq->type,
+                                 blxSeq->strand,
+                                 numMsps); /* output number of msps so we know how many to read in */
+
+  gsize bytes_written = 0;
+  GError *tmpError = NULL;
+  g_io_channel_write_chars(ioChannel, tmpStr, -1, &bytes_written, &tmpError);
+  g_free(tmpStr);
+
+  const char* transcriptName = blxSequenceGetName(blxSeq);
+  stringProtect(ioChannel, transcriptName, &tmpError);
+  stringProtect(ioChannel, blxSeq->idTag, &tmpError);
+      
+  if (!tmpError)
+    g_io_channel_write_unichar(ioChannel, '\n', &tmpError);
+  
+  mspItem = blxSeq->mspList;
+  int i = 0; /* keeps track of current transcript coord */
+  
+  for ( ; mspItem && !tmpError; mspItem = mspItem->next)
+    {
+      const MSP* msp = (const MSP*)(mspItem->data);
+      
+      /* Only output exons. Also, if an exon has child msps then ignore it: we will come across
+       * the child msps themselves in the list so we don't want to output both the parent and the
+       * child msps. */
+      if (mspIsBoxFeature(msp) && !msp->childMsps)
+        {
+          /* It's possible that some exons may be out of bounds: clip them, or if completely out
+           * of range ignore this exon. */
+          if (msp->qRange.min() < refSeqRange->max() && msp->qRange.max() > refSeqRange->min())
+            {
+              const int start = i + 1;
+              const int end = start + msp->qRange.length() - 1;
+
+              char *tmpStr = g_strdup_printf("%d %f %f %d %d %d %d %d %d %d", 
+                                             msp->type,
+                                             msp->score, 
+                                             msp->id,
+                                             msp->phase,
+                                             //          msp->fsColor, 
+                                             start,
+                                             end,
+                                             msp->sRange.min(),
+                                             msp->sRange.max(),
+                                             msp->qStrand,
+                                             msp->qFrame);
+
+              g_io_channel_write_chars(ioChannel, tmpStr, -1, NULL, &tmpError);
+              g_free(tmpStr);
+
+              stringProtect(ioChannel, transcriptName, &tmpError);
+              stringProtect(ioChannel, msp->sname, &tmpError);
+              stringProtect(ioChannel, msp->desc, &tmpError);
+
+              if (!tmpError)
+                g_io_channel_write_unichar(ioChannel, '\n', &tmpError);
+
+              i = end;
+            }
+        }
+    }
+
+  if (tmpError)
+    {
+      prefixError(tmpError, "Error piping transcript to dotter: ");
+      g_propagate_error(error, tmpError);
+    }
+}
+
+/* write data from the given blxsequence to the given output pipe. if the ranges
+ * are given, only outputs blxsequences that overlap either range */
+void writeBlxSequenceToOutput(GIOChannel *ioChannel, const BlxSequence *blxSeq, 
+                              IntRange *range1, IntRange *range2, 
+                              GError **error)
+{
+  GError *tmpError = NULL;
+  gboolean outputSeq = (blxSeq && (blxSeq->type == BLXSEQUENCE_TRANSCRIPT || blxSeq->type == BLXSEQUENCE_MATCH));
+  
+  int numMsps = countMspsToOutput(blxSeq, range1, range2);
+  outputSeq &= numMsps > 0; /* only output the sequence if it has some valid msps */
+  
+  if (outputSeq)
+    {
+      char *tmpStr = g_strdup_printf("%d %d %d",
+                                     blxSeq->type,
+                                     blxSeq->strand,
+                                     numMsps); /* output number of msps so we know how many to read in */
+      g_io_channel_write_chars(ioChannel, tmpStr, -1, NULL, &tmpError);
+      g_free(tmpStr);
+
+      stringProtect(ioChannel, blxSequenceGetName(blxSeq), &tmpError);
+      stringProtect(ioChannel, blxSeq->idTag, &tmpError);
+
+      if (!tmpError)
+        g_io_channel_write_unichar(ioChannel, '\n', &tmpError);
+      
+      /* now output the msps */
+      GList *mspItem = blxSeq->mspList;
+      for ( ; mspItem && !tmpError; mspItem = mspItem->next)
+        {
+          const MSP* const msp = (const MSP*)(mspItem->data);
+          
+          if (outputMsp(msp, range1, range2))
+            {
+              writeMspToOutput(ioChannel, msp, &tmpError);
+            }
+        }
+    }
+
+  if (tmpError)
+    g_propagate_error(error, tmpError);
+}
+
+
+/* increment the given char pointer until it is not whitespace */
+static void nextChar(char **curChar)
+{
+  while (**curChar == ' ')
+    ++(*curChar);
+}
+
+
+/* read in a blxsequence from the given text. */
+BlxSequence* readBlxSequenceFromText(char *text, int *numMsps)
+{
+  DEBUG_ENTER("readBlxSequenceFromText(text=%s)", text);
+
+  char *curChar = text;
+  
+  GError *error = NULL;
+  BlxSequence *blxSeq = createEmptyBlxSequence();
+  
+  if (error)
+    {
+      reportAndClearIfError(&error, G_LOG_LEVEL_CRITICAL);
+      DEBUG_EXIT("readBlxSequenceFromText returning NULL");
+      return NULL;
+    }
+  
+  nextChar(&curChar);
+  
+  blxSeq->type = (BlxSequenceType)strtol(curChar, &curChar, 10);
+  nextChar(&curChar);
+
+  blxSeq->strand = (BlxStrand)strtol(curChar, &curChar, 10);
+  nextChar(&curChar);
+
+  *numMsps = strtol(curChar, &curChar, 10);
+  nextChar(&curChar);
+  
+  char *fullName = stringUnprotect(&curChar, NULL);
+  blxSequenceSetValueFromString(blxSeq, BLXCOL_SEQNAME, fullName);
+  g_free(fullName);
+
+  blxSeq->idTag = stringUnprotect(&curChar, NULL);
+  
+  DEBUG_EXIT("readBlxSequenceFromText returning numMsps=%d", *numMsps);
+  return blxSeq;
+}
+
+
+/* write data from the given msp to the given output pipe. */
+void writeMspToOutput(GIOChannel *ioChannel, const MSP* const msp, GError **error)
+{
+  GError *tmpError = NULL;
+
+  char *tmpStr = g_strdup_printf("%d %f %f %d %d %d %d %d %d %d", 
+                                 msp->type,
+                                 msp->score, 
+                                 msp->id,
+                                 msp->phase,
+                                 //          msp->fsColor, 
+                                 msp->qRange.min(),
+                                 msp->qRange.max(),
+                                 msp->sRange.min(),
+                                 msp->sRange.max(),
+                                 msp->qStrand,
+                                 msp->qFrame);
+
+  g_io_channel_write_chars(ioChannel, tmpStr, -1, NULL, &tmpError);
+  g_free(tmpStr);
+
+  stringProtect(ioChannel, msp->qname, &tmpError);
+  stringProtect(ioChannel, msp->sname, &tmpError);
+  stringProtect(ioChannel, msp->desc, &tmpError);
+
+  if (!tmpError)
+    g_io_channel_write_unichar(ioChannel, '\n', &tmpError);
+
+  if (tmpError)
+    g_propagate_error(error, tmpError);
+}
+
+
+/* Read in an msp from the given text. the text is in the format as written by writeMspToFile  */
+void readMspFromText(MSP *msp, char *text)
+{
+  //DEBUG_ENTER("readMspFromText(text=%s)", text);
+
+  char *curChar = text;
+
+  nextChar(&curChar);
+  msp->type = (BlxMspType)strtol(curChar, &curChar, 10);
+
+  nextChar(&curChar);
+  msp->score = g_strtod(curChar, &curChar);
+
+  nextChar(&curChar);
+  msp->id = g_strtod(curChar, &curChar);
+
+  nextChar(&curChar);
+  msp->phase = strtol(curChar, &curChar, 10);
+
+//  nextChar(&curChar);
+//  msp->fsColor = strtol(curChar, &curChar, 10);
+
+  /* ref seq range */
+  nextChar(&curChar);
+  const int qStart = strtol(curChar, &curChar, 10); 
+  nextChar(&curChar);
+  const int qEnd = strtol(curChar, &curChar, 10); 
+  msp->qRange.set(qStart, qEnd);
+
+  /* match seq range */
+  nextChar(&curChar);
+  const int sStart = strtol(curChar, &curChar, 10); 
+  nextChar(&curChar);
+  const int sEnd = strtol(curChar, &curChar, 10); 
+  msp->sRange.set(sStart, sEnd);
+  
+  nextChar(&curChar);
+  msp->qStrand = (BlxStrand)strtol(curChar, &curChar, 10);
+
+  nextChar(&curChar);
+  msp->qFrame = strtol(curChar, &curChar, 10);
+
+  nextChar(&curChar);
+  msp->qname = stringUnprotect(&curChar, NULL);
+  msp->sname = stringUnprotect(&curChar, NULL);
+  msp->desc = stringUnprotect(&curChar, NULL);
+
+  //DEBUG_EXIT("readMspFromText returning");
+}
+
+
+/* Insert the given MSP into the given list */
+static void insertMsp(MSP *msp, MSP **mspList, MSP **lastMsp)
+{
+  /* Add it to the list */
+  if (!*mspList) 
+    {
+      /* Nothing in list yet: make this the first entry */
+      *mspList = msp;
+    }
+  
+  if (*lastMsp)
+    {
+      /* Tag it on to the end of the list */
+      (*lastMsp)->next = msp;
+    }
+  
+  /* Make the 'lastMsp' pointer point to the new end of the list */
+  *lastMsp = msp;
+}
+
+
+/* Allocate memory for an MSP and initialise all its fields to relevant 'empty' values.
+ * Add it into the given MSP list and make the end pointer ('lastMsp') point to the new
+ * end of the list. NB the msplist is obsolete and is being replaced by featureLists, but we don't
+ * add it to a feature list yet because we don't know its type. Returns a pointer to the newly-created MSP */
+MSP* createEmptyMsp(MSP **lastMsp, MSP **mspList)
+{
+  MSP *msp = new MSP;
+  
+  int i = 0;
+  for ( ; i < BLXMODEL_NUM_MODELS; ++i)
+    msp->treePaths[i] = NULL;
+
+  msp->next = NULL;
+  msp->childMsps = NULL;
+  
+  msp->type = BLXMSP_INVALID;
+  msp->score = 0.0;
+  msp->id = 0.0;
+  msp->phase = 0;
+  
+  msp->qname = NULL;
+  msp->qFrame = UNSET_INT;
+  
+  msp->sSequence = NULL;
+  msp->sname = msp->sname_orig = NULL;
+  
+  msp->desc = NULL;
+  
+  msp->style = NULL;
+  
+  msp->fs = NULL;
+  msp->fsShape = BLXCURVE_BADSHAPE;
+  
+  msp->xy = NULL;
+  msp->gaps = NULL;
+  
+  insertMsp(msp, mspList, lastMsp);
+  
+  return msp;
+}
+
+
+static void freeStringPointer(char **ptr)
+{
+  if (*ptr)
+    {
+      g_free(*ptr);
+      *ptr = NULL;
+    }
+}
+
+
+/* Destroy all of the MSPs in the given list */
+void destroyMspList(MSP **mspList)
+{
+  /* Free the allocated sequences and names */
+  MSP *msp = NULL;
+  for (msp = *mspList; msp; msp = msp->next)
+    {
+      destroyMspData(msp);
+    }
+  
+  /* Now free the MSPs themselves. */
+  MSP *fmsp = NULL;
+  for (msp = *mspList; msp; )
+    {
+      fmsp = msp;
+      msp = msp->next;
+      delete fmsp;
+    }
+  
+  *mspList = NULL;
+  
+  return ;
+}
+
+
+/* Free all of the memory used by an MSP */
+void destroyMspData(MSP *msp)
+{
+  freeStringPointer(&msp->qname);
+  freeStringPointer(&msp->sname);
+  freeStringPointer(&msp->sname_orig);
+  freeStringPointer(&msp->desc);
+  
+  if (msp->gaps)
+    {
+      /* free the child msp list */
+      if (msp->childMsps)
+        {
+          g_list_free(msp->childMsps);
+          msp->childMsps = NULL;
+        }
+
+      /* free memory allocated for the gap ranges */
+      GSList *item = msp->gaps;
+      for ( ; item; item = item->next)
+        {
+          CoordRange *range = (CoordRange*)(item->data);
+          delete range;
+        }
+      
+      g_slist_free(msp->gaps);
+      msp->gaps = NULL;
+    }
+  
+  if (msp->xy)
+    {
+      g_array_free(msp->xy, TRUE);
+      msp->xy = NULL;
+    }
+}
+
+
+/* Allocates memory for an MSP and initialise all its fields to the given values.
+ * For backwards compatibility, adds it into the given MSP list and makes the end pointer
+ * ('lastMsp') point to the new end of the list. We will hopefully get rid of mspList eventually
+ * and replace it by featureLists. The new msp is added to the relevant list in the featureLists
+ * array according to its type. Returns a pointer to the newly-created MSP. Also creates a BlxSequence
+ * for this MSP's sequence name (or adds the MSP to the existing one, if it exists already), 
+ * and adds that BlxSequence to the given seqList. Takes ownership of 'sequence'. */
+MSP* createNewMsp(GArray* featureLists[],
+                  MSP **lastMsp, 
+                  MSP **mspList,
+                  GList **seqList,
+                  GList *columnList,
+                  const BlxMspType mspType,
+                  BlxDataType *dataType,
+		  const char *source,
+                  const gdouble score,
+                  const gdouble percentId,
+                  const int phase,
+		  const char *idTag,
+                  const char *qName,
+                  const int qStart,
+                  const int qEnd,
+                  const BlxStrand qStrand,
+                  const int qFrame,
+                  const char *sName,
+                  const char *sName_orig,
+                  const int sStart,
+                  const int sEnd,
+                  BlxStrand sStrand,
+                  char *sequence,
+                  const GQuark filename,
+                  GHashTable *lookupTable, 
+                  BlxSequence *blxSeq,
+                  GError **error)
+{
+  MSP *msp = createEmptyMsp(lastMsp, mspList);
+  
+  msp->type = mspType;
+  msp->score = score; 
+  msp->id = percentId; 
+  msp->phase = phase;
+  msp->filename = filename;
+  
+  msp->qname = qName ? g_strdup(qName) : NULL;
+  
+  msp->qFrame = qFrame;
+  msp->qStrand = qStrand;
+  
+  msp->sname = sName ? g_strdup(sName) : NULL;
+  msp->sname_orig = sName_orig ? g_strdup(sName_orig) : NULL;
+
+  
+  msp->qRange.set(qStart, qEnd);  
+  msp->sRange.set(sStart, sEnd);
+
+  /* For exons, introns and basic features, the s strand is not applicable. We always want the exon
+   * to be in the same direction as the ref sequence, so set the match seq strand to be 
+   * the same as the ref seq strand */
+  if (mspIsBoxFeature(msp) || mspIsIntron(msp))
+    {
+      sStrand = qStrand;
+    }
+  
+  /* Add it to the relevant feature list. */
+  featureLists[msp->type] = g_array_append_val(featureLists[msp->type], msp);
+
+  /* For main feature types, add a new (or add to an existing) BlxSequence */
+  if (typeIsBasic(mspType) ||
+      typeIsExon(mspType) || 
+      typeIsIntron(mspType) || 
+      typeIsMatch(mspType) || 
+      typeIsVariation(mspType) || 
+      typeIsRegion(mspType))
+    {
+      addBlxSequences(msp->sname, msp->sname_orig, idTag, sStrand, dataType, source, 
+                      featureLists, lastMsp, mspList, seqList,
+                      columnList, sequence, msp, lookupTable, blxSeq, error);
+    }
+
+  if (error && *error)
+    {
+      prefixError(*error, "Error creating MSP (ref seq='%s' [%d - %d], match seq = '%s' [%d - %d]). ",
+                  qName, qStart, qEnd, sName, sStart, sEnd);
+    }
+  
+  return msp;
+}
+
+
+/* Make a copy of an MSP. If addToParent is true it also copies the pointer to the parent
+ * BlxSequence and adds the new msp to that BlxSequence's mspList. Otherwise it's parent is null.
+ * If added to the parent, it will be added in sorted order if 'sort' is true, or random order
+ * if 'sort' is false (this is to avoid having to sort it every time if the caller intends to
+ * re-sort the list later anyway) */
+MSP* copyMsp(const MSP* const src,
+             GArray* featureLists[],             
+             MSP **lastMsp, 
+             MSP **mspList,
+             const gboolean addToParent,
+             const gboolean sort)
+{
+  MSP *msp = createEmptyMsp(lastMsp, mspList);
+  
+  msp->type = src->type;
+  msp->score = UNSET_INT; 
+  msp->id = UNSET_INT; 
+  msp->phase = src->phase;
+  
+  msp->qname = src->qname ? g_strdup(src->qname) : NULL;
+  
+  msp->qFrame = src->qFrame;
+  msp->qStrand = src->qStrand;
+  
+  msp->sname = src->sname ? g_strdup(src->sname) : NULL;
+  msp->sname_orig = src->sname_orig ? g_strdup(src->sname_orig) : NULL;
+  
+  msp->qRange.set(src->qRange);  
+  msp->sRange.set(src->sRange);
+  
+  /* For matches, exons and introns, add (or add to if already exists) a BlxSequence */
+  if (addToParent && src->sSequence)
+    {
+      if (sort)
+        src->sSequence->mspList = g_list_insert_sorted(src->sSequence->mspList, msp, compareFuncMspPos);
+      else
+        src->sSequence->mspList = g_list_prepend(src->sSequence->mspList, msp);
+
+      msp->sSequence = src->sSequence;
+    }
+
+  /* Add it to the relevant feature list. */
+  featureLists[msp->type] = g_array_append_val(featureLists[msp->type], msp);
+  
+  return msp;
+}
+
+
+
+/* Set the given child list in the given exon. Takes ownership of the child list
+ * (and frees it if exon is null).
+ * Exons and UTRs don't have phase, but we want to display them in the same reading frame
+ * as the CDS in the same exon, if there is one; this function copies it to its siblings. */
+static void setExonChildList(MSP *exon, 
+                             GList *childList,
+                             GArray* featureLists[], 
+                             MSP **lastMsp,
+                             MSP **mspList,
+                             GList **seqList,
+                             GList *columnList,
+                             GHashTable *lookupTable,
+                             MSP **spanningCds)
+{
+  if (!exon)
+    {
+      g_list_free(childList);
+      return;
+    }
+
+  /* Take ownership of the child list */
+  if (exon->childMsps)
+    g_list_free(exon->childMsps);
+  
+  exon->childMsps = childList;
+  
+  /* Loop through and see if there's a CDS */
+  GError *tmpError = NULL;
+  int frame = UNSET_INT;
+  int phase = UNSET_INT;
+  gboolean found = FALSE;
+  
+  GList *childItem = exon->childMsps;
+  for ( ; childItem; childItem = childItem->next)
+    {
+      MSP *cds = (MSP*)(childItem->data);
+      
+      if (cds->type == BLXMSP_CDS)
+        {
+          frame = cds->qFrame;
+          phase = cds->phase;
+          found = TRUE;
+
+          /* Hack to support invalid gff from zmap where a single cds object spans the entire
+           * length rather than having separate cds objects for each exon. Trim the cds to the
+           * exon and "save" the cds to check against later exons. We should only have one cds in
+           * this case (we should verify this but don't at the moment). */
+          if (rangesOverlap(&cds->qRange, &exon->qRange) &&
+              (cds->qRange.min() < exon->qRange.min() || cds->qRange.max() > exon->qRange.max()))
+            {
+              /* Replace the original cds with a new one truncated to this exon */
+              int start = max(cds->qRange.min(), exon->qRange.min());
+              int end = min(cds->qRange.max(), exon->qRange.max());
+              MSP *newCds = createMissingMsp(BLXMSP_CDS, start, end, cds->qname, cds->qFrame, cds->style, cds->sSequence, 
+                                             featureLists, lastMsp, mspList, seqList, columnList, lookupTable, &tmpError);
+              reportAndClearIfError(&tmpError, G_LOG_LEVEL_WARNING);
+
+              *spanningCds = cds;
+              exon->childMsps = g_list_remove(exon->childMsps, cds);
+              exon->childMsps = g_list_insert_sorted(exon->childMsps, newCds, compareFuncMspPos);
+            }
+
+          break;
+        }
+    }
+  
+  if (found)
+    {
+      /* Update the exon */
+      exon->qFrame = frame;
+      exon->phase = phase;
+      
+      /* Loop through and update the other msps (i.e. exon and UTR get the same frame/phase info
+         as the CDS) */
+      for (childItem = exon->childMsps; childItem; childItem = childItem->next)
+        {
+          MSP *msp = (MSP*)(childItem->data);
+          msp->qFrame = frame;
+          msp->phase = phase;
+        }
+    }
+}
+
+
+/* Utility to create the msp for the createMissingExonCdsUtr function. */
+static MSP* createMissingMsp(const BlxMspType newType,
+                             const int newStart,
+                             const int newEnd,
+                             const char *qname,
+                             const int newFrame,
+                             BlxStyle *newStyle,
+                             BlxSequence *blxSeq, 
+                             GArray* featureLists[], 
+                             MSP **lastMsp, 
+                             MSP **mspList, 
+                             GList **seqList,
+                             GList *columnList,
+                             GHashTable *lookupTable,
+                             GError **error)
+{
+  MSP *result = NULL;
+  
+  if (newType != BLXMSP_INVALID)
+    {
+      /* Create the new exon/cds/utr */
+      DEBUG_OUT("Creating MSP for transcript '%s' of type %d.\n", blxSequenceGetName(blxSeq), newType);
+      
+      GError *tmpError = NULL;
+      
+      result = createNewMsp(featureLists, lastMsp, mspList, seqList, columnList, newType, NULL, blxSequenceGetSource(blxSeq),
+                            UNSET_INT, UNSET_INT, UNSET_INT, blxSeq->idTag,
+                            qname, newStart, newEnd, blxSeq->strand, newFrame,
+                            blxSequenceGetName(blxSeq), blxSequenceGetName(blxSeq),
+                            UNSET_INT, UNSET_INT, blxSeq->strand, NULL,
+                            0, lookupTable, blxSeq, &tmpError);
+      
+      result->style = newStyle;
+      
+      if (tmpError)
+        {
+          prefixError(tmpError, "Error constructing missing exon/cds/utr [type='%d']", newType);
+          g_propagate_error(error, tmpError);
+        }
+    }
+  
+  return result;
+}
+
+
+/* We have an exon and one or more child CDS/UTRs. Check whether there is a gap
+ * at the startor end of the exon and, if so, construct a CDS/UTR to fill it. */
+static void createMissingCdsUtr(MSP *exon,
+                                GList **childList,
+                                BlxSequence *blxSeq, 
+                                GArray* featureLists[], 
+                                MSP **lastMsp, 
+                                MSP **mspList, 
+                                GList **seqList, 
+                                GList *columnList,
+                                GHashTable *lookupTable,
+                                GError **error)
+{
+  MSP *startMsp = (MSP*)(g_list_first(*childList)->data);
+  MSP *endMsp = (MSP*)(g_list_last(*childList)->data);
+  
+  if (exon->qRange.min() < startMsp->qRange.min())
+    {
+      const BlxMspType type = (startMsp->type == BLXMSP_CDS ? BLXMSP_UTR : BLXMSP_CDS);
+      MSP *result = createMissingMsp(type, exon->qRange.min(), startMsp->qRange.min() - 1, exon->qname, exon->qFrame, exon->style, blxSeq, featureLists, lastMsp, mspList, seqList, columnList, lookupTable, error);
+      *childList = g_list_append(*childList, result);
+    }
+
+  if (exon->qRange.max() > endMsp->qRange.max())
+    {
+      const BlxMspType type = (endMsp->type == BLXMSP_CDS ? BLXMSP_UTR : BLXMSP_CDS);
+      MSP *result = createMissingMsp(type, endMsp->qRange.max() + 1, exon->qRange.max(), exon->qname, exon->qFrame, exon->style, blxSeq, featureLists, lastMsp, mspList, seqList, columnList, lookupTable, error);
+      *childList = g_list_append(*childList, result);
+    }
+}
+
+
+/* Create a UTR that spans the given exon, and add it to the given childList */
+static void createMissingUtr(MSP *exon,
+                             GList **childList,
+                             BlxSequence *blxSeq, 
+                             GArray* featureLists[], 
+                             MSP **lastMsp, 
+                             MSP **mspList, 
+                             GList **seqList, 
+                             GList *columnList,
+                             GHashTable *lookupTable,
+                             GError **error)
+{
+  MSP *result = createMissingMsp(BLXMSP_UTR, exon->qRange.min(), exon->qRange.max(), exon->qname, exon->qFrame, exon->style, blxSeq, featureLists, lastMsp, mspList, seqList, columnList, lookupTable, error);
+  *childList = g_list_append(*childList, result);
+}
+
+
+/* Create an exon that spans the given child CDSs/UTRs. Must not be called with
+ * an empty childList. */
+static MSP* createMissingExon(GList *childList,
+                              BlxSequence *blxSeq, 
+                              GArray* featureLists[], 
+                              MSP **lastMsp, 
+                              MSP **mspList, 
+                              GList **seqList, 
+                              GList *columnList,
+                              GHashTable *lookupTable,
+                              GError **error)
+{
+  /* Get the max and min extent of the children. They should be in order
+   * of increasing coords and should not overlap etc. */
+  MSP *startMsp = (MSP*)(g_list_first(childList)->data);
+  MSP *endMsp = (MSP*)(g_list_last(childList)->data);
+  
+  MSP *result = createMissingMsp(BLXMSP_EXON, startMsp->qRange.min(), endMsp->qRange.max(), startMsp->qname, startMsp->qFrame, startMsp->style, blxSeq, featureLists, lastMsp, mspList, seqList, columnList, lookupTable, error);
+  return result;
+}
+
+
+/* Utility used by constructExonData to create a missing exon/cds/utr given 
+ * two others out of the three - i.e. if we have an overlapping exon and cds we can
+ * construct the corresponding utr. If created, the new msp is added to the given 
+ * BlxSequence and the  MSP list. If a CDS is given and no UTR exists, assume the exon
+ * spans the entire CDS (and similarly if a UTR is given but no CDS exists) */
+static void createMissingExonCdsUtr(MSP **exon, 
+                                    GList **childList,
+                                    BlxSequence *blxSeq, 
+                                    GArray* featureLists[], 
+                                    MSP **lastMsp, 
+                                    MSP **mspList, 
+                                    GList **seqList, 
+                                    GList *columnList,
+                                    GHashTable *lookupTable,
+                                    GError **error)
+{
+  if (*exon && g_list_length(*childList) > 0)
+    {
+      /* We have an exon and one or more CDS/UTRs. Check if there any other
+       * child CDS/UTRs that we need to create. */
+      createMissingCdsUtr(*exon, childList, blxSeq, featureLists, lastMsp, mspList, seqList, columnList, lookupTable, error);
+    }
+  else if (*exon)
+    {
+      /* We have an exon but no children. Assume the exon is a single UTR */
+      createMissingUtr(*exon, childList, blxSeq, featureLists, lastMsp, mspList, seqList, columnList, lookupTable, error);
+    }
+  else if (g_list_length(*childList) > 0)
+    {
+      /* We have children but no exon; create the exon from the children */
+      *exon = createMissingExon(*childList, blxSeq, featureLists, lastMsp, mspList, seqList, columnList, lookupTable, error);
+    }
+}
+
+
+/* Construct any missing exon data, i.e.
+ *   - if we have a transcript and exons we can construct the introns;
+ *   - if we have exons and CDSs we can construct the UTRs */
+static void constructExonData(BlxSequence *blxSeq, 
+                              GArray* featureLists[], 
+                              MSP **lastMsp,
+                              MSP **mspList,
+                              GList **seqList,
+                              GList *columnList,
+                              GHashTable *lookupTable)
+{
+  GError *tmpError = NULL;
+  
+  const MSP *prevMsp = NULL;
+  const MSP *prevExon = NULL;
+  
+  MSP *curExon = NULL;          /* the current exon we're looking at */
+  GList *curChildMsps = NULL;   /* the child CDS/UTRs of the current exon */
+  MSP *spanningCds = NULL;      /* hack to support invalid GFF used by zmap where a single CDS
+                                 * spanning the entire range is given, rather than a separate CDS
+                                 * feature for each exon */
+  
+  /* Loop through all MSPs on this sequence (which must be sorted by position on the
+   * ref seq - createNewMsp automatically sorts them for us) and create any missing 
+   * exon/cds/utr/introns. */
+  GList *mspItem = blxSeq->mspList;
+  gboolean finished = FALSE;
+  
+  while (!finished)
+    {
+      MSP *msp = mspItem ? (MSP*)(mspItem->data) : NULL;
+      
+      /* Only consider exons and introns */
+      if (mspIsExon(msp) || mspIsIntron(msp) || !msp)
+        {
+          /* See if there was a gap between this exon and the previous one. There's a gap if
+           * we have two exons with space between them, or if we're at the first or last exon 
+           * and there's a gap to the end of the transcript. */
+          gboolean foundGap = FALSE;
+
+          if (msp && mspIsIntron(msp))
+            {
+              /* An intron IS a gap! */
+              foundGap = TRUE;
+            }
+          else if (msp && prevMsp)
+            {
+              /* We have a previous msp; there's a gap if the previous msp is an exon
+               * and if there is a gap between it and the current exon */
+              foundGap = mspIsExon(prevMsp) && !rangesOverlap(&prevMsp->qRange, &msp->qRange) && !rangesAdjacent(&prevMsp->qRange, &msp->qRange);
+            }
+          else if (msp)
+            {
+              /* No previous msp; check if we're at the first exon and if so whether
+               * there's a gap between it and the start of the transcript */
+              foundGap = blxSequenceGetStart(blxSeq, blxSeq->strand) < msp->qRange.min();
+            }
+          
+          if (foundGap || msp == NULL)
+            {
+              /* We've found a gap between exons, or reached the end. First, see if the current exon/cds or utr
+               * is missing and construct it if possible. Also do this if we're at the last MSP. */
+              createMissingExonCdsUtr(&curExon, &curChildMsps, blxSeq, featureLists, lastMsp, mspList, seqList, columnList, lookupTable, &tmpError);
+              reportAndClearIfError(&tmpError, G_LOG_LEVEL_CRITICAL);
+              
+              IntRange newRange;
+              
+              if (prevExon && curExon && !mspIsIntron(msp) && !mspIsIntron(prevMsp))
+                {
+                  /* Create an intron to span the gap */
+                  newRange.set(prevExon->qRange.max() + 1, curExon->qRange.min() - 1);
+                }
+              else if (!prevExon && curExon && blxSequenceGetStart(blxSeq, blxSeq->strand) < curExon->qRange.min() && 
+		       !mspIsIntron(msp) && !mspIsIntron(prevMsp))
+                {
+                  /* Create an intron at the start */
+                  newRange.set(blxSequenceGetStart(blxSeq, blxSeq->strand), curExon->qRange.min() - 1);
+                }
+              else if (msp == NULL && curExon && blxSequenceGetEnd(blxSeq, blxSeq->strand) > curExon->qRange.max() &&
+		       !mspIsIntron(prevMsp))
+                {
+                  /* Create an intron at the end */
+                  newRange.set(curExon->qRange.max() + 1, blxSequenceGetEnd(blxSeq, blxSeq->strand));
+                }
+              
+              if (curExon && newRange.isSet())
+                {
+                  createNewMsp(featureLists, lastMsp, mspList, seqList, columnList, BLXMSP_INTRON, NULL, blxSequenceGetSource(blxSeq), 
+                               curExon->score, curExon->id, 0, blxSeq->idTag, 
+                               curExon->qname, newRange.min(), newRange.max(), blxSeq->strand, curExon->qFrame, 
+                               blxSequenceGetName(blxSeq), blxSequenceGetName(blxSeq),
+                               UNSET_INT, UNSET_INT, blxSeq->strand, NULL, 
+                               0, lookupTable, blxSeq, &tmpError);
+                  
+                  reportAndClearIfError(&tmpError, G_LOG_LEVEL_CRITICAL);
+                }
+              
+              /* We're done with this exon, so set the exon's list of child msps
+               * and reset the pointers */
+              setExonChildList(curExon, curChildMsps, featureLists, lastMsp, mspList, seqList, columnList, lookupTable, &spanningCds);
+
+              prevExon = curExon;
+              curExon = NULL;
+              curChildMsps = NULL;
+            }
+          
+          if (msp && msp->type == BLXMSP_EXON)
+            {
+              curExon = msp;
+
+              /* If there's a spanning cds, add it to the child list for each exon */
+              if (spanningCds)
+                curChildMsps = g_list_append(curChildMsps, spanningCds);
+            }
+          else if (msp && (msp->type == BLXMSP_CDS || msp->type == BLXMSP_UTR))
+            {
+              curChildMsps = g_list_append(curChildMsps, msp);
+            }
+          
+          /* Remember the last MSP we saw */
+          prevMsp = msp;
+          
+          /* Proceed to the next MSP. We allow an extra loop with a NULL mspItem at the end, and then finish. */
+          if (mspItem)
+            mspItem = mspItem->next;
+          else
+            finished = TRUE;
+        } 
+      else
+        {
+          /* Something that's not an exon/intron. Skip this BlxSequence. */
+          finished = TRUE;
+        }
+    }
+
+  if (spanningCds)
+    destroyMspFull(spanningCds, blxSeq, featureLists, lastMsp, mspList);
+}
+
+
+/* Construct any missing transcript data, i.e.
+ *   - if we have multiple CDSs, copy the transcript so we can show each variant;
+ *   - if we have a transcript and exons we can construct the introns;
+ *   - if we have exons and CDSs we can construct the UTRs */
+static void constructTranscriptData(GArray* featureLists[], 
+                                    MSP **lastMsp,
+                                    MSP **mspList,
+                                    GList **seqList,
+                                    GList *columnList,
+                                    GHashTable *lookupTable,
+                                    GError **error)
+{
+  GError *tmpError = NULL;
+
+  /* Loop through all transcripts  */
+  GList *seqItem = *seqList;
+
+  while (seqItem)
+    {
+      BlxSequence *blxSeq = (BlxSequence*)(seqItem->data);
+
+      if (blxSeq->type != BLXSEQUENCE_TRANSCRIPT)
+        {
+          seqItem = seqItem->next;
+          continue;
+        }
+
+      /* Get a list of all CDS names in the transcript */
+      GList *cdsList = blxSequenceConstructCdsList(blxSeq);
+
+      const int numVariants = g_list_length(cdsList);
+
+      if (numVariants <= 1)
+        {
+          /* Only one variant so process it as it is */
+          findSequenceExtents(blxSeq);
+          constructExonData(blxSeq, featureLists, lastMsp, mspList, seqList, columnList, lookupTable);
+
+          seqItem = seqItem->next;
+        }
+      else
+        {
+          /* More than one variant: create copies of the transcript for each variant */
+          GList *cdsItem = cdsList;
+  
+          for ( ; cdsItem && !tmpError; cdsItem = cdsItem->next)
+            {
+              GQuark cdsQuark = GPOINTER_TO_INT(cdsItem->data);
+
+              /* The copy is added to the end of seqList so it will be processed later as we continue
+               * to loop through the list */
+              copyBlxSequenceNamedCds(blxSeq, cdsQuark, featureLists, lastMsp, mspList, seqList, columnList, lookupTable, &tmpError);
+            }
+
+          /* We have made copies for each CDS but we don't need the original transcript so delete
+           * it. This removes the current seqItem from seqList so we have to increment the pointer
+           * before we delete it. */
+          seqItem = seqItem->next;
+          destroyBlxSequenceFull(blxSeq, featureLists, lastMsp, mspList, seqList);
+        }
+
+      g_list_free(cdsList);
+    }
+
+  if (tmpError)
+    g_propagate_error(error, tmpError);
+}
+
+
+/* Adjust the MSP's q coords (as parsed from the input file) by the given offset i.e. to convert
+ * them to real coords */
+static void adjustMspCoordsByOffset(MSP *msp, const int offset)
+{
+  if (offset != 0)
+    {
+      /* Convert the input coords (which are 1-based within the ref sequence section
+       * that we're dealing with) to "real" coords (i.e. coords that the user will see). */
+      msp->qRange.set(msp->qRange.min() + offset,
+                      msp->qRange.max() + offset);
+      
+      /* Gap coords are also 1-based, so convert those too */
+      GSList *rangeItem = msp->gaps;
+      
+      for ( ; rangeItem; rangeItem = rangeItem->next)
+        {
+          CoordRange *curRange = (CoordRange*)(rangeItem->data);
+          curRange->qStart += offset;
+          curRange->qEnd += offset;
+        }
+    }
+}
+
+
+/* Find the first/last base in an entire sequence, if not already set. For transcripts, the
+ * range should already be set from the parent transcript item. For matches, get the start/end
+ * of the first/last MSP in the sequence */
+static void findSequenceExtents(BlxSequence *blxSeq)
+{
+  int start = findMspListQExtent(blxSeq->mspList, TRUE, BLXSTRAND_FORWARD);
+  int end = findMspListQExtent(blxSeq->mspList, FALSE, BLXSTRAND_FORWARD);
+
+  //if (start != UNSET_INT && end != UNSET_INT)
+  blxSeq->qRangeFwd.set(start, end);
+
+  start = findMspListQExtent(blxSeq->mspList, TRUE, BLXSTRAND_REVERSE);
+  end = findMspListQExtent(blxSeq->mspList, FALSE, BLXSTRAND_REVERSE);
+
+  //if (start != UNSET_INT && end != UNSET_INT)
+  blxSeq->qRangeRev.set(start, end);
+}
+
+
+/* Get the offset required from the given base to give the coord that is the first base in 
+ * the first codon of reading frame 1 (or the last codon in reading frame 3 for the reverse strand) */
+static int getOffsetToCodonStart(const int coord, const int numFrames, const BlxStrand strand)
+{
+  int offset = 0;
+  
+  if (strand == BLXSTRAND_FORWARD)
+    {
+      /* If the sequence is 
+       *     1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 ...
+       * then the calculated base below will be
+       *     0, 1, 2, 0, 1, 2, 0, 1, 2, 0,  1, ...
+       * so we have to offset the coords by the following values to get to a base1 coord
+       *     0, 2, 1, 0, 2, 1, 0, 2, 1, 0,  2, ...
+       */
+      
+      int base = ((coord - 1) % numFrames); /* 0, 1 or 2 */
+      offset = numFrames - base;            /* 3, 2 or 1 */
+      
+      if (offset >= numFrames)
+	offset -= numFrames;                /* 0, 2 or 1 */
+    }
+  else
+    {
+      /* I'm not sure if there is a convention for where the reading frame starts in the reverse
+       * strand, so I've made up my own convention. It essentially means that we want the first 
+       * coord in the reversed sequence to be the last base in the last reading frame, i.e. base 3 in frame 3.
+       *
+       * If the forward strand coords are
+       *             1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 
+       * then the have the following base numbers for each frame
+       * frame 1:    1, 2, 3, 1, 2, 3, 1, 2, 3, 1,  2
+       * frame 2:    3, 1, 2, 3, 1, 2, 3, 1, 2, 3,  1
+       * frame 3:    2, 3, 1, 2, 3, 1, 2, 3, 1, 2,  3 (I've included up to coord 11 so we end at base 3 in frame 3)
+       *
+       * Looking at frame 1 in reverse we have
+       *             11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1
+       *              2,  1, 3, 2, 1, 3, 2, 1, 3, 2, 1
+       *
+       * Base 3 in frame 3 is base 2 in frame 1, so this is where we want to start. The offsets we need
+       * to get to a frame1-base2 coord are:
+       *              0,  2, 1, 0, 2, 1, 0, 2, 1, 0, 2
+       */
+      
+      int base = (coord + 1) % numFrames;   /* 0, 2 or 1 */
+      offset = base;
+    }
+  
+  return offset;
+}
+
+
+/* Calculate the reference sequence reading frame that the given MSP belongs to, if not
+ * already set. Requires either the phase to be set, or the frame to already be set; otherwise
+ * assumes a phase of 0 and gives a warning. */
+static void calcReadingFrame(MSP *msp, const BlxSeqType seqType, const int numFrames, const IntRange* const refSeqRange)
+{
+  /* For matches and exons, calculate frame if the phase is known, because the old code that 
+   * used to pass the reading frame in exblx files seemed to occasionally pass an incorrect reading frame. */
+  if (!mspIsIntron(msp))
+    {
+      /* Get the first coord of the first complete codon. This is the start coord (5' end) of the match
+       * plus (or minus) the phase (if non-zero), which initially gets stored in the qFrame field in the MSP... */
+      const int direction = (msp->qStrand == BLXSTRAND_FORWARD ? 1 : -1);
+      const int coord = mspGetQStart(msp) + (direction * msp->phase);
+      
+      /* Find the reading frame that this coord belongs in. This is the same as the base number within
+       * reading frame 1. */
+      int frame = UNSET_INT;
+      const gboolean invertCoords = (mspGetRefStrand(msp) == BLXSTRAND_REVERSE);
+      
+      convertDnaIdxToDisplayIdx(coord, seqType, 1, numFrames, invertCoords, refSeqRange, &frame);
+      
+      if (frame > 0)
+	{
+	  if (msp->qFrame > 0 && mspIsExon(msp))
+	    {
+	      /* Frame is already set. This means we have the old exblx file format, which does not provide phase for exons
+	       * so we must use the reading frame that was passed in the file. However, this used to assume that the first base
+	       * in the ref seq was base 1 in reading frame 1, which is not always the case (we now calculate the correct reading frame
+	       * based on mod3 of the coord). Therefore, we must offset the given frame if the first coord is not base1 in frame1. */
+	      const int startCoord = (msp->qStrand == BLXSTRAND_REVERSE ? refSeqRange->max() : refSeqRange->min());
+	      const int offset = getOffsetToCodonStart(startCoord, numFrames, msp->qStrand);
+	      msp->qFrame += offset;
+	      
+	      if (msp->qFrame > numFrames)
+		{
+		  msp->qFrame -= numFrames;
+		}
+	      
+	      if (msp->qFrame != frame && seqType == BLXSEQ_PEPTIDE)
+		{
+		  g_warning("MSP '%s' (q=%d-%d; s=%d-%d) has reading frame '%d' but calculated frame was '%d'\n", mspGetSName(msp), msp->qRange.min(), msp->qRange.max(), msp->sRange.min(), msp->sRange.max(), msp->qFrame, frame);
+		}
+	    }
+	  else
+	    {
+	      /* We either have the new file format which provides phase or it's not an exon so phase 
+	       * is not applicable, so we can trust the calculated value. */
+	      msp->qFrame = frame;
+	    }
+	}
+      
+      if (msp->qFrame == UNSET_INT)
+	{
+	  g_warning("Reading frame could not be calculated for MSP '%s' (q=%d-%d; s=%d-%d) - setting to 1.\n", mspGetSName(msp), msp->qRange.min(), msp->qRange.max(), msp->sRange.min(), msp->sRange.max());
+	  msp->qFrame = 1;
+	}
+    }
+}
+
+
+/* Should be called after all parsed data has been added to a BlxSequence. Calculates summary
+ * data and the introns etc. */
+void finaliseBlxSequences(GArray* featureLists[], 
+			  MSP **mspList, 
+			  GList **seqList, 
+                          GList *columnList,
+			  const int offset,
+			  const BlxSeqType seqType, 
+			  const int numFrames,
+			  const IntRange* const refSeqRange,
+			  const gboolean calcFrame,
+                          GHashTable *lookupTable)
+{
+  GError *tmpError = NULL;
+
+  /* Loop through all MSPs and adjust their coords by the offest, then calculate their reading
+   * frame. Also find the last MSP in the list. */
+  MSP *msp = *mspList;
+  MSP *lastMsp = msp;
+
+  while (msp)
+    {
+      adjustMspCoordsByOffset(msp, offset);
+    
+      if (calcFrame)
+	calcReadingFrame(msp, seqType, numFrames, refSeqRange);
+    
+      msp = msp->next;
+      if (msp)
+        lastMsp = msp;
+    }
+  
+  /* Loop through all BlxSequences */
+  GList *seqItem = *seqList;
+  
+  for ( ; seqItem; seqItem = seqItem->next)
+    {
+      /* So far we only have the forward strand version of each sequence. We must complement any 
+       * that need the reverse strand */
+      BlxSequence *blxSeq = (BlxSequence*)(seqItem->data);
+
+      if (blxSeq && 
+          blxSeq->strand == BLXSTRAND_REVERSE && 
+          blxSequenceGetFlag(blxSeq, MSPFLAG_STRAND_SPECIFIC) &&
+          blxSequenceGetFlag(blxSeq, MSPFLAG_SHOW_REVERSE_STRAND) &&
+          blxSequenceGetSequence(blxSeq))
+        {
+          char *sequence = g_strdup(blxSequenceGetSequence(blxSeq));
+          blxComplement(sequence);
+          blxSequenceSetValueFromString(blxSeq, BLXCOL_SEQUENCE, sequence);
+        }
+    }
+
+  /* We need to construct any missing transcript data */
+  constructTranscriptData(featureLists, &lastMsp, mspList, seqList, columnList, lookupTable, &tmpError);
+  prefixError(tmpError, "Error constructing transcript data: ");
+  reportAndClearIfError(&tmpError, G_LOG_LEVEL_CRITICAL);
+
+  /* We need to clear GFF ID flags once we've finished importing a file so that they don't clash
+   * with IDs from any other files that the user may import later. */
+  for (seqItem = *seqList; seqItem; seqItem = seqItem->next)
+    blxSequenceClearGFFIds((BlxSequence*)(seqItem->data));
+
+  /* Sort msp arrays by start coord (only applicable to msp types that
+   * appear in the detail-view because the order is only applicable when
+   * filtering detail-view rows) */
+  int typeId = 0;
+  for ( ; typeId < BLXMSP_NUM_TYPES; ++typeId)
+    {
+      if (typeShownInDetailView((BlxMspType)typeId))
+        g_array_sort(featureLists[typeId], compareFuncMspArray);
+    }
+}
+
+
+/* Given a list of msps, find the min or max q coords (according to the given flag)
+ * for msps on the given q strand (or on both strands if strand is BLXSTRAND_NONE. */
+int findMspListQExtent(GList *mspList, const gboolean findMin, const BlxStrand strand)
+{
+  int result = UNSET_INT;
+  gboolean first = TRUE;
+  
+  GList *mspItem = mspList;
+  
+  for ( ; mspItem; mspItem = mspItem->next)
+    {
+      const MSP* const msp = (const MSP*)(mspItem->data);
+    
+      if (msp->qStrand == strand || strand == BLXSTRAND_NONE)
+	{      
+	  if (first)
+	    {
+	      result = findMin ? msp->qRange.min() : msp->qRange.max();
+	      first = FALSE;
+	    }
+	  else if (findMin && msp->qRange.min() < result)
+	    {
+	      result = msp->qRange.min();
+	    }
+	  else if (!findMin && msp->qRange.max() > result)
+	    {
+	      result = msp->qRange.max();
+	    }
+	}
+    }
+  
+  return result;
+}
+
+
+/* Given a list of msps, find the min or max s coords, according to the given flag. */
+int findMspListSExtent(GList *mspList, const gboolean findMin)
+{
+  int result = UNSET_INT;
+  gboolean first = TRUE;
+  
+  GList *mspItem = mspList;
+  
+  for ( ; mspItem; mspItem = mspItem->next)
+    {
+      const MSP* const msp = (const MSP*)(mspItem->data);
+      
+      if (first)
+	{
+	  result = findMin ? msp->sRange.min() : msp->sRange.max();
+	  first = FALSE;
+	}
+      else if (findMin && msp->sRange.min() < result)
+	{
+	  result = msp->sRange.min();
+	}
+      else if (!findMin && msp->sRange.max() > result)
+	{
+	  result = msp->sRange.max();
+	}
+    }
+  
+  return result;
+}
+
+
+/* Get the default value for the given flag */
+gboolean mspFlagGetDefault(const MspFlag flag)
+{
+  gboolean result = FALSE;
+  
+  if (flag > MSPFLAG_MIN && flag < MSPFLAG_NUM_FLAGS)
+    {
+      /* The defaults are populated when we create a BlxDataType,
+       * so create a dummy one so that we can access them. This
+       * is made a global so that we can also change the defaults. */
+      if (!g_DefaultDataType)
+        g_DefaultDataType = createBlxDataType();
+      
+      if (g_DefaultDataType)
+        result = g_DefaultDataType->flags[flag];
+      else
+        g_critical("Program error: Failed to create default data-type struct. Default feature properties may be incorrect.\n");
+    }
+  else
+    {
+      g_critical("Program error: attempt to use unknown MSP flag '%d'\n", flag);
+    }
+  
+  return result;
+}
+
+
+/* Set the default value for the given flag */
+void mspFlagSetDefault(const MspFlag flag, const gboolean value)
+{
+  if (flag > MSPFLAG_MIN && flag < MSPFLAG_NUM_FLAGS)
+    {
+      /* The defaults are populated when we create a BlxDataType,
+       * so create a dummy one so that we can access and set them. */
+      if (!g_DefaultDataType)
+        g_DefaultDataType = createBlxDataType();
+      
+      if (g_DefaultDataType)
+        g_DefaultDataType->flags[flag] = value;
+    }
+  else
+    {
+      g_critical("Program error: attempt to use unknown MSP flag '%d'\n", flag);
+    }
+}
+
+
+/* Returns the colinearity of the two msps */
+ColinearityType mspIsColinear(const MSP* const msp1, const MSP* const msp2)
+{
+  ColinearityType result = COLINEAR_INVALID;
+
+  if (msp1 && msp2 && msp1->qStrand == msp2->qStrand && 
+      msp1->sSequence && msp2->sSequence && 
+      msp1->sSequence->strand == msp2->sSequence->strand)
+    {
+      if (msp2->sRange.min() < msp1->sRange.max())
+        result = COLINEAR_NOT;
+      else if (msp2->sRange.min() == msp1->sRange.max() + 1)
+        result = COLINEAR_PERFECT;
+      else
+        result = COLINEAR_IMPERFECT;
+    }
+
+  return result;
+}
+
+
+/* Return the value of the given boolean flag */
+gboolean dataTypeGetFlag(const BlxDataType* const dataType, const MspFlag flag)
+{
+  gboolean result = mspFlagGetDefault(flag);
+
+  if (flag > MSPFLAG_MIN && flag < MSPFLAG_NUM_FLAGS)
+    {  
+      if (dataType)
+        result = dataType->flags[flag];
+    }
+  else
+    {
+      g_critical("Program error: attempt to use unknown MSP flag '%d'\n", flag);
+    }
+  
+  return result;
+}
+
+
+/* Return the value of the given boolean flag. */
+gboolean blxSequenceGetFlag(const BlxSequence* const blxSeq, const MspFlag flag)
+{
+  gboolean result = mspFlagGetDefault(flag);
+  
+  if (blxSeq)
+    result = dataTypeGetFlag(blxSeq->dataType, flag);
+    
+  return result;
+}
+
+
+/* Return the value of the given boolean flag */
+gboolean mspGetFlag(const MSP* const msp, const MspFlag flag)
+{
+  gboolean result = mspFlagGetDefault(flag);
+  
+  if (msp)
+    result = blxSequenceGetFlag(msp->sSequence, flag);
+  
+  return result;
+}
+
+/* Get the config key to use for the given flag */
+const char* mspFlagGetConfigKey(const MspFlag flag)
+{
+  const char *result = NULL;
+  
+  if (flag > MSPFLAG_MIN && flag < MSPFLAG_NUM_FLAGS)
+    {
+      /* To make sure we don't access the array out of bounds, loop
+       * through from the beginning checking that no values are "dummy".
+       * The array is terminated with a "dummy" value, so if we find this
+       * before we find our flag, there must be enum values that haven't
+       * been added to the array, which is a programming error. */
+      int i = MSPFLAG_MIN + 1;
+      for ( ; i <= flag; ++i)
+        {
+          if (stringsEqual(g_MspFlagConfigKeys[i], "dummy", FALSE))
+            {
+              g_critical("Program error: MSP flag '%d' does not have a config key defined\n", flag);
+              break;
+            }
+          else if (i == flag)
+            {
+              result = g_MspFlagConfigKeys[i];
+              break;
+            }          
+        }
+    }
+  else
+    {
+      g_critical("Program error: Tried to use an unknown MSP flag '%d'\n", flag);
+    }
+  
+  return result;
+}
+
+
+/* Determine the type of BlxSequence that a particular MSP type belongs to */
+static BlxSequenceType getBlxSequenceTypeForMsp(const BlxMspType mspType)
+{
+  BlxSequenceType result = BLXSEQUENCE_UNSET;
+  
+  if (mspType == BLXMSP_MATCH)
+    {
+      result = BLXSEQUENCE_MATCH;
+    }
+  else if (typeIsExon(mspType) || typeIsIntron(mspType) || mspType == BLXMSP_TRANSCRIPT)
+    {
+      result = BLXSEQUENCE_TRANSCRIPT;
+    }
+  else if (typeIsVariation(mspType))
+    {
+      result = BLXSEQUENCE_VARIATION;
+    }
+  else if (mspType == BLXMSP_REGION)
+    {
+      result = BLXSEQUENCE_REGION;
+    }
+
+  return result;
+}
+
+
+/* Utility to get the unique key for a given text string and strand */
+static GQuark getLookupKey(const char *text, const BlxStrand strand)
+{
+  char *keyStr = g_strdup_printf("%s%c", text, (strand == BLXSTRAND_FORWARD ? '+' : '-'));
+  GQuark key = g_quark_from_string(keyStr);
+  g_free(keyStr);
+  
+  return key;
+}
+
+
+/* Utility to find a blxsequence with the given name/id/strand in the 
+ * given hash table. Returns null if it is not there. */
+static BlxSequence* findBlxSequence(GHashTable *lookupTable,
+                                    const char *name, 
+                                    const char *idTag,
+                                    const BlxStrand strand,
+                                    const gboolean linkFeaturesByName)
+{
+  BlxSequence *result = NULL;
+
+  if (idTag)
+    {
+      /* We compare on the id tag and strand, so combine these into a single
+       * string and convert it to a quark for quicker comparisions.
+       * (This is the key for the hash table.) */
+      GQuark key = getLookupKey(idTag, strand);
+      result = (BlxSequence*)g_hash_table_lookup(lookupTable, GINT_TO_POINTER(key));
+    }
+
+  if (!result && name && linkFeaturesByName)
+    {
+      /* No id tag is given but we are asked to link features with the same
+       * name, so do the comparison using name and strand */
+      GQuark key = getLookupKey(name, strand);
+      result = (BlxSequence*)g_hash_table_lookup(lookupTable, GINT_TO_POINTER(key));
+    }
+
+  return result;
+}
+
+
+/* Sort two columns by index */
+gint columnIdxCompareFunc(gconstpointer a, gconstpointer b)
+{
+  BlxColumnInfo *col1 = (BlxColumnInfo*)a;
+  BlxColumnInfo *col2 = (BlxColumnInfo*)b;
+  return col1->columnIdx - col2->columnIdx;
+}
+
+/* Sort two columns by ID */
+static gint columnIdCompareFunc(gconstpointer a, gconstpointer b)
+{
+  BlxColumnInfo *col1 = (BlxColumnInfo*)a;
+  BlxColumnInfo *col2 = (BlxColumnInfo*)b;
+  return col1->columnId - col2->columnId;
+}
+
+
+/* Create a new sequence with the given name and/or ID tag */
+static BlxSequence* createBlxSequence(const char *name,
+                                      const char *idTag, 
+                                      const BlxStrand strand,
+                                      BlxDataType *dataType,
+                                      const char *source,
+                                      GList *columnList)
+{
+  BlxSequence *seq = createEmptyBlxSequence();
+
+  /* Set the hard-coded values */
+  seq->strand = strand;
+  seq->dataType = dataType;
+
+  if (idTag)
+    seq->idTag = g_strdup(idTag);
+
+  /* Allocate the list of values and initialise the value types
+   * to the relevant type for that column */
+  //const int numColumns = g_list_length(columnList);
+  seq->values = g_array_new(FALSE, FALSE, sizeof(GValue));
+
+  /* Sort the columns by column ID (NOT column index) so that we
+   * can easily index on the ID when looking up values in the array */
+  columnList = g_list_sort(columnList, columnIdCompareFunc);
+  
+  GList *item = columnList;
+  for ( ; item; item = item->next)
+    {
+      /* Note that we index on columnId, not columnIdx. This is so that
+       * we can quickly index on the columnId enum. The columnIdx represents
+       * the display order, which is not relevant here. */
+      BlxColumnInfo * columnInfo = (BlxColumnInfo*)(item->data);
+      GType type = columnInfo->type;
+      
+      /* Bit of a hack; the sequence column type is pointer because we
+       * pass a pointer to the msp to the cell renderer, but here we want to
+       * store the actual sequence string */
+      if (columnInfo->columnId == BLXCOL_SEQUENCE)
+        type = G_TYPE_STRING;
+      
+      GValue value = {0};
+      g_value_init(&value, type);
+
+      g_array_append_val(seq->values, value);
+    }
+
+  /* Set the given name and source */
+  blxSequenceSetValueFromString(seq, BLXCOL_SEQNAME, name ? name : idTag);
+  blxSequenceSetValueFromString(seq, BLXCOL_SOURCE, source);
+
+  /* Make sure we change back to the original sort order (sorted by index) */
+  columnList = g_list_sort(columnList, columnIdxCompareFunc);
+
+  return seq;
+}
+
+
+/* Wrapper for addBlxSequence to add multiple sequences. The idTag might be a comma-separated
+ * list of parent IDs, in which case we need to add the msp to multiple BlxSequences (creating
+ * those BlxSequences if they don't exist. */
+static void addBlxSequences(const char *name, 
+                            const char *name_orig, 
+                            const char *idTag, 
+                            BlxStrand strand,
+                            BlxDataType *dataType,
+                            const char *source,
+                            GArray *featureLists[],
+                            MSP **lastMsp,
+                            MSP **mspList,
+                            GList **seqList, 
+                            GList *columnList,
+                            char *sequence, 
+                            MSP *msp_in, 
+                            GHashTable *lookupTable,
+                            BlxSequence *blxSeq,
+                            GError **error)
+{
+  GError *tmpError = NULL;
+  MSP *msp = msp_in;
+
+  if (blxSeq)
+    {
+      /* Add to existing blx sequence */
+      addBlxSequence(msp->sname, msp->sname_orig, idTag, strand, dataType, source, seqList, columnList, sequence, msp, lookupTable, blxSeq, &tmpError);
+    }
+  else if (idTag)
+    {
+      /* For exons and introns, the ID tag we receive is the parent tag, and it may contain
+       * multiple parent transcripts. In this case we need to add the msp to multiple parent
+       * BlxSequences */
+      char **tokens = g_strsplit_set(idTag, ",", -1);   /* -1 means do all tokens. */
+      char **token = tokens;
+      gboolean usedMsp = FALSE;
+      
+      while (token && *token && **token && !tmpError)
+        {
+          /* If we've already used the passed-in msp, then we need to make a copy of it to 
+           * add to the next BlxSequence (because the msp points to its BlxSequence so can't
+           * be added to multiple BlxSequences, at least at the moment) */
+          if (usedMsp)
+            msp = copyMsp(msp, featureLists, lastMsp, mspList, FALSE, FALSE);
+
+          if (!tmpError)
+            addBlxSequence(msp->sname, msp->sname_orig, *token, strand,
+                           dataType, source, seqList, columnList, sequence, msp, lookupTable, NULL, &tmpError);
+
+          usedMsp = TRUE;
+          ++token;
+        }
+
+      g_strfreev(tokens);
+    }
+  else
+    {
+      addBlxSequence(msp->sname, msp->sname_orig, idTag, strand, dataType, source, seqList, columnList, sequence, msp, lookupTable, NULL, &tmpError);
+    }
+
+  if (tmpError)
+    g_propagate_error(error, tmpError);
+}
+
+
+/* Add or create a BlxSequence struct, creating the BlxSequence if one does not
+ * already exist for the MSP's sequence name. Seperate BlxSequence structs are created
+ * for the forward and reverse strands of the same sequence. The passed-in sequence 
+ * should always be forwards, and we reverse complement it here if we need the 
+ * reverse strand. Returns the new BlxSequence */
+BlxSequence* addBlxSequence(const char *name, 
+                            const char *name_orig, 
+			    const char *idTag, 
+			    BlxStrand strand,
+			    BlxDataType *dataType,
+                            const char *source,
+			    GList **seqList, 
+                            GList *columnList,
+			    char *sequence, 
+			    MSP *msp, 
+                            GHashTable *lookupTable,
+                            BlxSequence *blxSeq_in,
+                            GError **error)
+{
+  BlxSequence *blxSeq = blxSeq_in;
+
+  if (blxSeq || name || idTag)
+    {
+      /* If this is an exon, intron or basic feature the match strand is not applicable. The exon should 
+       * be in the same direction as the ref seq, so use the ref seq strand. */
+      if (msp && (mspIsBoxFeature(msp) || mspIsIntron(msp)))
+        {
+          strand = msp->qStrand;
+        }
+    
+      /* See if this sequence already exists. This matches on name (if linkFeaturesByName is
+       * true) or on tag, and strand. */
+      gboolean linkFeaturesByName = dataTypeGetFlag(dataType, MSPFLAG_LINK_FEATURES_BY_NAME);
+
+      if (!blxSeq)
+        blxSeq = findBlxSequence(lookupTable, name, idTag, strand, linkFeaturesByName);
+      
+      if (!blxSeq)
+        {
+          /* Create a new BlxSequence, and take ownership of the passed in sequence (if any) */
+          blxSeq = createBlxSequence(name, idTag, strand, dataType, source, columnList);
+          
+          /* Add it to the return sequence list (must append it because this function can be
+           * called from within a loop which relies on new sequences being appended) */
+          *seqList = g_list_prepend(*seqList, blxSeq);
+
+          /* Add an entry to the lookup table (add an entry for both id and name, if given,
+           * because the next feature may have only one or the other set.) */
+          if (idTag)
+            g_hash_table_insert(lookupTable, GINT_TO_POINTER(getLookupKey(idTag, strand)), blxSeq);
+
+          if (name && linkFeaturesByName)
+            g_hash_table_insert(lookupTable, GINT_TO_POINTER(getLookupKey(name, strand)), blxSeq);
+        }
+      else
+        {
+          if (dataType && !blxSeq->dataType)
+            blxSeq->dataType = dataType;
+          else if (dataType && blxSeq->dataType != dataType)
+            g_warning("Duplicate sequences have different data types [name=%s, ID=%s, strand=%d, orig type=%s, new type=%s].\n", name, idTag, strand, g_quark_to_string(blxSeq->dataType->name), g_quark_to_string(dataType->name));
+          
+          const char *oldSource = blxSequenceGetSource(blxSeq);
+
+          if (source && !oldSource)
+            blxSequenceSetValueFromString(blxSeq, BLXCOL_SOURCE, source);
+          else if (source && !stringsEqual(oldSource, source, FALSE))
+            g_warning("Duplicate sequences have different sources [name=%s, ID=%s, strand=%d, orig source=%s, new source=%s].\n", name, idTag, strand, oldSource, source);
+        }
+      
+      if (name && !blxSequenceGetName(blxSeq))
+	{
+	  /* It's possible that the BlxSequence was created without a name if we found an
+	   * unnamed child exon before we found the parent transcript, so set the name if we have it. */
+          blxSequenceSetValueFromString(blxSeq, BLXCOL_SEQNAME, name);
+
+          /* Add an entry to the lookup table keyed on name, now that we know it */
+          if (linkFeaturesByName)
+            g_hash_table_insert(lookupTable, GINT_TO_POINTER(getLookupKey(name, strand)), blxSeq);
+	}
+      
+      if (msp)
+        {
+          /* Add the MSP to the BlxSequence's list. Keep it sorted by position. */
+          blxSeq->mspList = g_list_insert_sorted(blxSeq->mspList, msp, compareFuncMspPos);
+          msp->sSequence = blxSeq;
+          
+          if (blxSeq->type == BLXSEQUENCE_UNSET)
+            {
+              blxSeq->type = getBlxSequenceTypeForMsp(msp->type);
+            }
+          else if (blxSeq->type != getBlxSequenceTypeForMsp(msp->type))
+            {
+              g_warning("Adding MSP of type %d to parent of type %d (expected parent type to be %d)\n", 
+			msp->type, blxSeq->type, getBlxSequenceTypeForMsp(msp->type));
+            }
+        }
+      
+      /* Add the sequence data */
+      addBlxSequenceData(blxSeq, sequence, error);
+    }
+  else
+    {
+      g_set_error(error, BLX_ERROR, 1, "Sequence name or parent ID must be set.\n");
+    }
+  
+  return blxSeq;
+}
+
+
+/* Add the given sequence data to a BlxSequence. Validates that the existing sequence data is
+ * either null or is the same as the new data; sets the given error if not. We claim ownership
+ * of the given sequence data (either the BlxSequence owns it, or we delete it if it is not 
+ * required). The given sequence should always be the forward strand; we complement it ourselves
+ * here if this BlxSequence requires the reverse strand. */
+void addBlxSequenceData(BlxSequence *blxSeq, char *sequence, GError **error)
+{
+  if (!sequence)
+    {
+      return;
+    }
+  
+  gboolean sequenceUsed = FALSE;
+
+  const char *oldSequence = blxSequenceGetSequence(blxSeq);
+  
+  if (blxSeq && blxSequenceRequiresSeqData(blxSeq))
+    {
+      if (!oldSequence)
+        {
+          /* Sequence does not yet exist, so add it */
+          blxSequenceSetValueFromString(blxSeq, BLXCOL_SEQUENCE, sequence);
+          sequenceUsed = TRUE;
+        }
+      else if (error && *error)
+        {
+          /* Sequence already exists. Validate that it's the same as the existing one. */
+          if (!stringsEqual(sequence, oldSequence, FALSE))
+            {
+              g_set_error(error, BLX_ERROR, BLX_ERROR_SEQ_DATA_MISMATCH, "Sequence data for '%s' does not match previously-found data.\n", blxSequenceGetName(blxSeq));
+            }
+        }
+    }      
+  
+  if (!sequenceUsed)
+    {
+      g_free(sequence);
+    }
+}
+
+
+/***********************************************************
+ *                      Columns
+ ***********************************************************/
+
+/* Creates a data "column" from the given info and adds it to the columnList. */
+void blxColumnCreate(BlxColumnId columnId, 
+                     const gboolean createHeader,
+                     const char *title,
+                     GType type,
+                     const char *propertyName,
+                     const int defaultWidth,
+                     const gboolean dataLoaded,
+                     const gboolean showColumn,
+                     const gboolean showSummary,
+                     const gboolean canShowSummary,
+                     const gboolean searchable,
+                     const char *sortName,
+                     const char *emblId,
+                     const char *emblTag,
+                     GList **columnList)
+{
+  /* Create a simple label for the header (unless told not to) */
+  GtkWidget *headerWidget = NULL;
+  
+  if (createHeader)
+    {
+      headerWidget = createLabel(title, 0.0, 1.0, TRUE, TRUE, TRUE);
+      gtk_widget_set_size_request(headerWidget, defaultWidth, -1);
+    }
+  
+  /* Create the column info */
+  BlxColumnInfo *columnInfo = new BlxColumnInfo;
+
+  static int columnIdx = 0;  
+  columnInfo->columnIdx = columnIdx;
+  ++columnIdx;
+
+  columnInfo->columnId = columnId;
+  columnInfo->headerWidget = headerWidget;
+  columnInfo->refreshFunc = NULL;
+  columnInfo->title = title;
+  columnInfo->propertyName = propertyName;
+  columnInfo->width = defaultWidth;
+  columnInfo->sortName = sortName;
+  columnInfo->emblId = g_quark_from_string(emblId);
+  columnInfo->emblTag = g_quark_from_string(emblTag);
+  columnInfo->dataLoaded = TRUE;
+  columnInfo->showColumn = showColumn;
+  columnInfo->showSummary = showSummary;
+  columnInfo->canShowSummary = canShowSummary;
+  columnInfo->searchable = searchable;
+  columnInfo->type = type;
+  
+  /* Place it in the list. List must be sorted in the same order
+   * as the GtkListStore or gtk_list_store_set fails */
+  *columnList = g_list_insert_sorted(*columnList, columnInfo, columnIdxCompareFunc);
+}
+
+
+/* Create a list of CDS names in a transcript. If there are multiple names it means we have
+ * e.g. different start codons and we need to create multiple versions of the transcript */
+GList* blxSequenceConstructCdsList(BlxSequence *seq)
+{
+  GList *result = NULL;
+
+  /* If none of the CDSs have names, that's fine - we just assume they're all the same. It's
+   * ambiguous what we should do if some have names and others don't, though. I guess we just have
+   * to lump all the nameless ones together. */
+  if (seq && seq->type == BLXSEQUENCE_TRANSCRIPT && seq->mspList && g_list_length(seq->mspList) > 0)
+    {
+      GList *mspItem = seq->mspList;
+
+      for ( ; mspItem; mspItem = mspItem->next)
+        {
+          const MSP *msp = (const MSP*)(mspItem->data);
+          
+          if (msp->type == BLXMSP_CDS)
+            {
+              GQuark name = 0;
+
+              if (msp->sname)
+                name = g_quark_from_string(msp->sname);
+
+              if (!g_list_find(result, GINT_TO_POINTER(name)))
+                result = g_list_append(result, GINT_TO_POINTER(name));
+            }
+        }
+    }
+
+  return result;
+}
+
+
+/***********************************************************
+ *              Sequence manipulation                      * 
+ ***********************************************************/
+
+/* Get the spliced sequence for a given transcript. The result should be free'd by the caller
+ * with g_free. Returns null and sets the error if there was a problem. */
+char *blxSequenceGetSplicedSequence(const BlxSequence* const blxSeq, 
+                                    const char *refSeq, 
+                                    const IntRange* const refSeqRange,
+                                    GError **error)
+{
+  char *result = NULL;
+  g_return_val_if_fail(blxSeq && blxSeq->type == BLXSEQUENCE_TRANSCRIPT, result);
+
+  GString *resultStr = g_string_new(NULL);
+  const int refSeqLen = strlen(refSeq);
+  
+  GList *mspItem = blxSeq->mspList;
+  
+  for ( ; mspItem; mspItem = mspItem->next)
+    {
+      const MSP* msp = (const MSP*)(mspItem->data);
+      
+      /* Ignore msps that have child msps (we just want to export the child msps) */
+      if (mspIsBoxFeature(msp) && !msp->childMsps)
+        {
+          int i = msp->qRange.min() - refSeqRange->min(); /* convert to 0-based index into ref seq */
+
+          /* It's possible that some exons may be out of bounds: clip them. */
+          if (i < 0)
+            i = 0;
+          
+          int iMax = msp->qRange.max() - refSeqRange->min();
+          if (iMax >= refSeqLen)
+            iMax = refSeqLen - 1;
+
+          for ( ; i <= iMax; ++i)
+            {
+              if (i > 0 && i < refSeqLen)
+                g_string_append_c(resultStr, refSeq[i]);
+            }
+        }
+    }
+
+  if (resultStr->len > 0)
+    {
+      g_string_append_c(resultStr, '\0'); /* make sure it's null terminated */
+      result = g_string_free(resultStr, FALSE);
+
+      /* If the result is empty, set the error. */
+      if (!result || *result == 0)
+        {
+          g_set_error(error, BLX_ERROR, BLX_ERROR_SEQ_SEGMENT, "Failed to find sequence for transcript");
+
+          if (result)
+            {
+              g_free(result);
+              result = NULL;
+            }
+        }
+    }
+  else
+    {
+      g_string_free(resultStr, TRUE);
+    }
+
+  return result;
+}
+
diff --git a/seqtoolsUtils/blxmsp.hpp b/seqtoolsUtils/blxmsp.hpp
new file mode 100644
index 0000000..6b97253
--- /dev/null
+++ b/seqtoolsUtils/blxmsp.hpp
@@ -0,0 +1,508 @@
+/*  File: blxmsp.h
+ *  Author: Gemma Barson, 2010-09-02
+ *  Copyright (c) 2010 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed  fGriffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: Defines the MSP data struct and related functions. I think 
+ *              MSP stood for Matching Segment Pair and originally represented
+ *              an alignment. However, it is now used for other feature
+ *              types too, so should be renamed to "BlxFeature" or something.
+ *              Ideally also it would be separated out into a base feature and
+ *              derived features for the different features types.
+ *----------------------------------------------------------------------------
+ */ 
+
+#ifndef _blxmsp_included_
+#define _blxmsp_included_
+
+#include <seqtoolsUtils/utilities.hpp>
+#include <stdlib.h>
+#include <gtk/gtk.h>
+
+
+//extern GArray    *fsArr;                 /* in dotter.c */
+
+/* These are used by both blixem and dotter */
+#define selectFeaturesStr          "Feature series selection tool"
+#define XY_NOT_FILLED -1000        /* Magic value meaning "value not provided" */
+
+
+/* Key names for values in data-type stanzas in the config file */
+#define BLIXEM_GROUP                 "blixem"                   /* [blixem] stanza */
+#define SEQTOOLS_BULK_FETCH          "bulk-fetch"               /* methods(s) for batch-fetching sequences on start */
+#define SEQTOOLS_USER_FETCH          "user-fetch"               /* method(s) for interactively fetching sequences by the user */
+#define SEQTOOLS_OPTIONAL_FETCH      "optional-fetch"           /* method(s) for batch-fetching additional data on user request */
+#define SEQTOOLS_GFF_FILENAME_KEY    "file"
+#define SEQTOOLS_WINDOW_COLOR        "session-colour"           /* color for the main window background */
+
+/* Main Blixem error domain */
+#define BLX_ERROR g_quark_from_string("Blixem")
+
+/* Error codes */
+typedef enum
+{
+  BLX_ERROR_SEQ_SEGMENT,              /* error finding sequence segment */
+  BLX_ERROR_EMPTY_STRING,           /* error code for when user entered a zero-length string */
+  BLX_ERROR_STRING_NOT_FOUND,       /* error code for when a search string is not found */
+  BLX_ERROR_SEQ_NAME_NOT_FOUND,     /* the sequence name(s) being searched for were not found */
+  BLX_ERROR_SEQ_DATA_MISMATCH,      /* same sequence was parsed more than once and data does not match */
+  BLX_ERROR_INVALID_COLUMN          /* error when an invalid column is requested */
+} BlxError;
+
+
+
+/* Supported types of MSP */
+typedef enum 
+{
+  BLXMSP_NONE,                   /* Not set yet */
+  BLXMSP_INVALID,                /* Invalid type (cannot be displayed by blixem) */
+  
+  BLXMSP_MATCH,                  /* A match (i.e. alignment) */
+  BLXMSP_MATCH_SET,              /* The parent of a set of matches. Can be used to specify generic properties such as color. */
+  BLXMSP_CDS,                    /* CDS (coding) region of an exon */
+  BLXMSP_UTR,                    /* UTR (untranslated) region of an exon */
+  BLXMSP_INTRON,                 /* Intron */
+  BLXMSP_EXON,                   /* Exon (should appear AFTER CDS and UTR for sorting, as required by constructTranscriptData) */
+  BLXMSP_POLYA_SITE,             /* polyA tail site */
+  BLXMSP_POLYA_SIGNAL,           /* polyA signal */
+  
+  BLXMSP_VARIATION,              /* SNP, substitution, deletion, insertion */
+  
+  BLXMSP_HSP,                    /* obsolete? */
+  BLXMSP_GSP,                    /* obsolete? */
+  
+  BLXMSP_FS_SEG,                 /* Feature Series Segment - obsolete? */
+  BLXMSP_XY_PLOT,                /* x/y coordinates - for plotting feature-series curves - obsolete? */
+
+  BLXMSP_REGION,                 /* Region */
+  BLXMSP_GAP,                    /* Gap, e.g. assembly gap */
+
+  BLXMSP_BASIC,                  /* Basic feature (just drawn as a simple box) */
+  
+  
+  BLXMSP_NUM_TYPES,               /* the number of valid MSP types - any types following this may be used
+                                   * e.g. for parsing, but no real MSP will be created from them */
+  
+  BLXMSP_TRANSCRIPT              /* Transcript */
+} BlxMspType;
+
+
+/* Type definition for BlxSequences */
+typedef enum
+  {
+    BLXSEQUENCE_UNSET,
+    BLXSEQUENCE_TRANSCRIPT,         /* transcript (i.e. collection of exons and introns) */
+    BLXSEQUENCE_MATCH,              /* match sequence (i.e. collection of matches) */
+    BLXSEQUENCE_VARIATION,          /* variation (i.e. insertion, deletion or substitution) */
+    BLXSEQUENCE_REGION              /* region */
+  } BlxSequenceType;
+
+
+/* This enum provides an ID for each type of data model that we use for the
+ * detail-view trees. */
+typedef enum
+  {
+    BLXMODEL_NORMAL,                /* the normal model, where each row contains one feature */
+    BLXMODEL_SQUASHED,              /* the "squashed" model, where all MSPs from the same sequence appear on the same row */
+    
+    BLXMODEL_NUM_MODELS             /* the number of model IDs. MUST BE LAST IN LIST */
+  } BlxModelId;
+
+/* This enum contains a list of all the boolean flags in the BlxDataType */
+/* YOU MUST UPDATE g_MspFlagConfigKeys AFTER CHANGING THIS ENUM */
+typedef enum
+  {
+    MSPFLAG_MIN,                        /* Start index for looping through flags */
+  
+    MSPFLAG_LINK_FEATURES_BY_NAME,      /* whether features with the same name are part of the same parent */
+    MSPFLAG_SQUASH_LINKED_FEATURES,     /* whether features with the same parent should be compressed onto the same line when you do 'squash matches' */
+    MSPFLAG_SQUASH_IDENTICAL_FEATURES,  /* whether alignments that are identical should be compressed onto the same line when you do 'squash matches' */
+    MSPFLAG_STRAND_SPECIFIC,            /* if false, show all features on the forward strand; else only show forward features on forward strand */
+    MSPFLAG_SHOW_REVERSE_STRAND,        /* if true, and strand-specific, show rev strand features in rev strand area of display */
+
+    /* Add new items above here. */
+    /* YOU MUST UPDATE g_MspFlagConfigKeys AFTER CHANGING THIS ENUM */
+
+    MSPFLAG_NUM_FLAGS                   /* Total number of flags e.g. for creating arrays and loops etc */
+  } MspFlag;
+
+
+/* Defines a data type for sequences. The data type contains properties applicable
+ * to multiple sequences, e.g. which fetch method to use. */
+typedef struct _BlxDataType
+  {
+    GQuark name;           /* the name of the data-type */
+    GArray *bulkFetch;     /* list of fetch methods (by name as a GQuark) to use when bulk fetching sequences, in order of priority */
+    GArray *userFetch;     /* list of fetch methods (by name as a GQuark) to use when user fetches a sequence, in order of priority */
+    GArray *optionalFetch; /* list of fetch methods (by name as a GQuark) to use when user requests optional data to be loaded */
+    gboolean flags[MSPFLAG_NUM_FLAGS];  /* boolean flags */
+  } BlxDataType;
+
+
+/* COLUMNS: To add a new column you must do the following:
+ *    - create the column in blxCreateColumns or dotterCreateColumns
+ * and optionally:
+ *    - add a BlxColumnId enum, if you need a convenient way of referring specifically to the column in the code;
+ *    - add a custom data function in createTreeColumn;
+ *    - add a custom header widget and/or header refresh function in createTreeColHeader;
+ *    - specify specific sort behaviour in sortColumnCompareFunc. */
+
+/* This enum declares identifiers for known data columns. It is
+ * NOT A COMPREHENSIVE LIST of columns because further columns
+ * can be added dynamically to the column list in BlxCreateColumns
+ * or dotterCreateColumns. This enum is just used as a convenient
+ * way of referring to the main set of known columns. */
+typedef enum
+  {
+    BLXCOL_NONE=-1,             /* Used for sorting to indicate that no sorting is required; negative value => not a valid column ID in the trees */
+
+    BLXCOL_SEQNAME=0,           /* The match sequence's name */
+    BLXCOL_SOURCE,              /* The match sequence's source */
+
+    BLXCOL_GROUP,               /* The group that this alignment belongs to */
+    BLXCOL_SCORE,               /* The alignment's score */
+    BLXCOL_ID,                  /* The alignment's %ID */
+    BLXCOL_START,               /* The start coord of the alignment on the match sequence */
+    BLXCOL_SEQUENCE,            /* This column will display the part of the alignment currently in the display range. */
+    BLXCOL_END,                 /* The end coord of the alignment on the match sequence */
+
+    /* The following columns are optional */
+    BLXCOL_ORGANISM,
+    BLXCOL_GENE_NAME,
+    BLXCOL_TISSUE_TYPE,
+    BLXCOL_STRAIN,
+
+    BLXCOL_NUM_COLUMNS          /* Number of main columns. Further additional columns may be
+                                 * added dynamically with a columnId greater than or equal to this. */
+  } BlxColumnId;
+
+
+/* This struct describes a column in the detail view. Multiple widgets (i.e. headers
+ * and tree columns) in the detail view must all have columns that share the same
+ * properties (namely the column width). */
+typedef struct _BlxColumnInfo
+  {
+    BlxColumnId columnId;       /* the column identifier */
+    int columnIdx;              /* 0-based index of columns in display order */
+    GType type;                 /* the type of data, e.g. G_TYPE_STRING */
+    GtkWidget *headerWidget;    /* the header widget for this column (in the detail-view header) */
+    GtkCallback refreshFunc;    /* the function that will be called on the header widget when columns are refreshed */
+    const char *title;          /* the default column title */
+    const char *propertyName;   /* the property name (used to set the data for the SequenceCellRenderer) */
+    const char *sortName;       /* the name to display in the sort-by drop-down box (NULL if the view is not sortable on this column) */
+
+    GQuark emblId;              /* 2-char embl line ID, e.g. 'SQ' for sequence or 'OS' for organism */
+    GQuark emblTag;             /* tag name within an embl line, e.g. the 'tissue_type' tag within the 'FT' section. 
+                                 * Only supports tags of the following format (i.e. like those in the 'FT' section):
+                                 *     /tissue_type="testis"    */
+
+    int width;                  /* the column width */
+    gboolean dataLoaded;        /* whether the data for this column has been loaded from the EMBL file (or tried to be loaded, if it doesn't exist) */
+    gboolean showColumn;        /* whether the column should be shown in the detail view */
+    gboolean showSummary;       /* whether the column should be shown in the summary info (i.e. the mouse-over feedback bar) */
+    gboolean canShowSummary;    /* whether it's possible to show summary info for this column */
+    gboolean searchable;        /* whether searching sequences by data in this column is supported */
+  } BlxColumnInfo;
+
+
+/* Structure that contains information about a sequence */
+typedef struct _BlxSequence
+{
+  BlxSequenceType type;            /* What type of collection of MSPs this is */
+  BlxDataType *dataType;           /* Optional data type that specifies additional properties for this type of sequence data */
+  char *idTag;                     /* Unique identifier e.g. from ID tag in GFF files */
+
+  GArray* values;                  /* Array of values (as GValue) for the columns */
+ 
+  BlxStrand strand;                /* which strand of the sequence this is */
+  gboolean sequenceReqd;           /* whether the sequence data is required (e.g. it is not needed for exons/introns etc.) */
+
+  IntRange qRangeFwd;              /* the extent of alignments from this sequence on the ref sequence forward strand */ 
+  IntRange qRangeRev;              /* the extent of alignments from this sequence on the ref sequence reverse strand */ 
+  char *organismAbbrev;            /* internally-calculated abbreviation for the Organism column value, if set */
+  
+  GList *mspList;                  /* list of MSPs from this sequence */
+} BlxSequence;
+
+
+typedef struct _FeatureSeries
+{
+  char        *name;             /* Name of the Feature Series */
+  int         on;                /* Flag to show/hide the Feature Series */
+  int         order;             /* Order number used for sorting */
+  float       x;                   /* Series offset on x axis, to bump series on the screen */
+  float       y;                   /* Series offset on y axis */
+  int         xy;                  /* Flag for XY plot series */
+} FeatureSeries;
+
+
+/* Shapes of XY curves */
+typedef enum
+{ 
+  BLXCURVE_PARTIAL, 
+  BLXCURVE_INTERPOLATE, 
+  BLXCURVE_BADSHAPE
+} BlxCurveShape;
+
+
+/* Structure holding information about a feature (see note at the top of this
+ * file about the naming of this struct). */
+typedef struct _MSP
+{
+  gchar* treePaths[BLXMODEL_NUM_MODELS]; /* identifies the row in the tree data model this msp is in (for the model given by the modelId) */
+
+  struct _MSP       *next;
+  GList             *childMsps;    /* Child MSPs of this MSP if it has them, e.g. an exon has CDS and UTR children (part_of relationship). */
+  
+  BlxMspType        type;          /* The type of the MSP, e.g. match, exon, SNP etc. */
+  gdouble           score;         /* Score as a percentage. Technically this should be a weighted score taking into account gaps, length of the match etc., but for unknown reasons the ID has always been passed instead of score and the ID gets stored in here */
+  gdouble           id;            /* Identity as a percentage. A simple comparison of bases within the match, ignoring gaps etc. Currently this is calculated internally by blixem. */
+  int               phase;         /* phase: q start coord is offset by this amount to give the first base in the first complete codon (only relevant to CDSs) */
+  GQuark            filename;      /* optional filename, e.g. for features used to fetch data from a bam file */
+  
+  char              *qname;        /* For Dotter, the MSP can belong to either sequence */
+  IntRange          qRange;        /* the range of coords on the ref sequence where the alignment lies */
+  BlxStrand         qStrand;       /* which strand on the reference sequence the match is on */
+  int               qFrame;        /* which frame on the reference sequence the match is on */
+  
+  BlxSequence       *sSequence;    /* pointer to a struct holding info about the sequence/strand this match is from */
+  char              *sname;        /* sequence name (could be different to the sequence name in
+                                      the blxSequence e.g. exons have a postfixed 'x') */
+  char              *sname_orig;   /* sequence name, original case version of sname. */
+  IntRange          sRange;        /* the range of coords on the match sequence where the alignment lies */
+  
+  /* The following ranges are all calculated from the above but are
+   * cached in the MSP because they are used a lot. Note that these
+   * these are not current used by dotter so dotter does not bother to
+   * initialise them. */
+  IntRange          displayRange;  /* the same range as qRange but in display coords */
+  IntRange          fullRange;     /* the full range of display coords to show this match against (includes any unaligned portions of sequence that we're showing) */
+  IntRange          fullSRange;    /* the full range of coords on the match sequence that we're showing (including any unaligned portions of sequence) */
+  
+  char              *desc;         /* Optional description text for the MSP */
+  GSList            *gaps;         /* Array of "gaps" in this homolgy (this is a bit of a misnomer because the array
+                                    * gives the ranges of the bits that align rather than the ranges of the gaps in between */
+  
+  BlxStyle          *style;        /* Specifies drawing style for this MSP, e.g. fill color and line color */
+  
+  /* obsolete? */
+  FeatureSeries     *fs;           /* Feature series that this MSP belongs to */
+  GdkColor          fsColor;       /* Color to draw this MSP in the feature series */
+  BlxCurveShape     fsShape;       /* Shape data for drawing feature series curves, i.e. XY type PARTIAL or INTERPOLATE shapes */
+  GArray            *xy;            /* For XY plot feature series */
+} MSP ;
+
+
+/* MSP functions */
+gboolean              typeIsExon(const BlxMspType mspType);
+gboolean              typeIsIntron(const BlxMspType mspType);
+gboolean              typeIsTranscript(const BlxMspType mspType);
+gboolean              typeIsMatch(const BlxMspType mspType);
+gboolean              typeIsVariation(const BlxMspType mspType);
+gboolean              typeIsRegion(const BlxMspType mspType);
+gboolean              typeIsBasic(const BlxMspType mspType);
+gboolean              typeIsBoxFeature(const BlxMspType mspType);
+gboolean              typeShownInDetailView(const BlxMspType mspType);
+gboolean              typeAddedToDetailView(const BlxMspType mspType);
+gboolean              blxSequenceShownInDetailView(const BlxSequence *blxSeq);
+gboolean              blxSequenceShownInGrid(const BlxSequence *blxSeq);
+
+const char*           mspGetRefName(const MSP* const msp);
+int                   mspGetRefFrame(const MSP* const msp, const BlxSeqType seqType);
+BlxStrand             mspGetRefStrand(const MSP* const msp);
+BlxStrand             mspGetMatchStrand(const MSP* const msp);
+const char*           mspGetMatchSeq(const MSP* const msp);
+const char*           mspGetSource(const MSP* const msp);
+const char*           mspGetSName(const MSP *msp);
+const char*           mspGetSNameOrig(const MSP *msp);
+const IntRange*       mspGetRefCoords(const MSP* const msp);
+const IntRange*       mspGetMatchCoords(const MSP* const msp);
+int                   mspGetQStart(const MSP* const msp);
+int                   mspGetQEnd(const MSP* const msp);
+int                   mspGetSStart(const MSP* const msp);
+int                   mspGetSEnd(const MSP* const msp);
+int                   mspGetQRangeLen(const MSP* const msp);
+int                   mspGetSRangeLen(const MSP* const msp);
+int                   mspGetMatchSeqLen(const MSP* const msp);
+
+const GdkColor*       mspGetColor(const MSP* const msp, 
+                                  GArray *defaultColors,
+                                  const int defaultColorId,
+                                  const BlxSequence *blxSeq, 
+                                  const gboolean selected, 
+                                  const gboolean usePrintColors, 
+                                  const gboolean fill,
+                                  const int exonFillColorId,
+                                  const int exonLineColorId,
+                                  const int cdsFillColorId,
+                                  const int cdsLineColorId,
+                                  const int utrFillColorId,
+                                  const int utrLineColorId,
+                                  const bool allowTransparency = TRUE);
+
+const char*           mspGetColumn(const MSP* const msp, const BlxColumnId columnId);
+const char*           mspGetOrganism(const MSP* const msp);
+const char*           mspGetOrganismAbbrev(const MSP* const msp);
+const char*           mspGetGeneName(const MSP* const msp);
+const char*           mspGetTissueType(const MSP* const msp);
+const char*           mspGetStrain(const MSP* const msp);
+char*                 mspGetCoordsAsString(const MSP* const msp);
+gchar*                mspGetTreePath(const MSP* const msp, BlxModelId modelId);
+
+MSP*                  mspArrayIdx(const GArray* const array, const int idx);
+gint                  compareFuncMspPos(gconstpointer a, gconstpointer b);
+gint                  compareFuncMspArray(gconstpointer a, gconstpointer b);
+
+gboolean              mspLayerIsVisible(const MSP* const msp);
+gboolean              mspIsExon(const MSP* const msp);
+gboolean              mspIsIntron(const MSP* const msp);
+gboolean              mspIsSnp(const MSP* const msp);
+gboolean              mspIsBlastMatch(const MSP* const msp);
+gboolean              mspIsPolyASite(const MSP* const msp);
+gboolean              mspIsVariation(const MSP* const msp);
+gboolean              mspIsZeroLenVariation(const MSP* const msp);
+gboolean              mspIsBasic(const MSP* const msp);
+gboolean              mspIsBoxFeature(const MSP* const msp);
+
+gboolean              mspHasSName(const MSP* const msp);
+gboolean              mspHasSSeq(const MSP * const msp);
+gboolean              mspHasSCoords(const MSP* const msp);
+gboolean              mspHasSStrand(const MSP* const msp);
+gboolean              mspHasPolyATail(const MSP* const msp);
+gboolean              mspCoordInPolyATail(const int coord, const MSP* const msp);
+gboolean              mspGetFlag(const MSP* const msp, const MspFlag flag);
+const char*           mspFlagGetConfigKey(const MspFlag flag);
+gboolean              mspFlagGetDefault(const MspFlag flag);
+void                  mspFlagSetDefault(const MspFlag flag, const gboolean value);
+
+ColinearityType       mspIsColinear(const MSP* const msp1, const MSP* const msp2);
+
+int                   getMaxMspLen();
+void                  setMaxMspLen(const int len);
+
+void                  writeTranscriptToOutput(GIOChannel *ioChannel, const BlxSequence* const blxSeq, IntRange *range, const IntRange* const refSeqRange, GError **error);
+void                  writeBlxSequenceToOutput(GIOChannel *ioChannel, const BlxSequence *blxSeq, IntRange *range1, IntRange *range2, GError **error);
+BlxSequence*          readBlxSequenceFromText(char *text, int *numMsps);
+void                  writeMspToOutput(GIOChannel *ioChannel, const MSP* const msp, GError **error);
+void                  readMspFromText(MSP *msp, char *text);
+
+void                  destroyMspList(MSP **mspList);
+void                  destroyBlxSequenceList(GList **seqList);
+void                  destroyMspData(MSP *msp);
+MSP*                  createEmptyMsp(MSP **lastMsp, MSP **mspList);
+MSP*                  createNewMsp(GArray* featureLists[],
+                                   MSP **lastMsp, MSP **mspList, GList **seqList, GList *columnList,
+                                   const BlxMspType mspType, BlxDataType *dataType, const char *source,
+                                   const gdouble score, const gdouble percentId, const int phase, const char *idTag,
+                                   const char *qName, const int qStart, const int qEnd,
+                                   const BlxStrand qStrand, const int qFrame,
+                                   const char *sName, const char *const sName_orig, int sStart, const int sEnd, 
+                                   const BlxStrand sStrand, char *sequence,
+                                   const GQuark filename, GHashTable *lookupTable, BlxSequence *blxSeq, GError **error);  
+MSP*                  copyMsp(const MSP* const src, GArray* featureLists[], MSP **lastMsp, MSP **mspList, const gboolean addToParent, const gboolean sort);
+
+//void                  insertFS(MSP *msp, char *series);
+
+void                  finaliseBlxSequences(GArray* featureLists[], MSP **mspList, GList **seqList, GList *columnList, const int offset, const BlxSeqType seqType, const int numFrames, const IntRange* const refSeqRange, const gboolean calcFrame, GHashTable *lookupTable);
+int                   findMspListSExtent(GList *mspList, const gboolean findMin);
+int                   findMspListQExtent(GList *mspList, const gboolean findMin, const BlxStrand strand);
+
+/* Feature series */
+gint                  fsSortByNameCompareFunc(gconstpointer fs1_in, gconstpointer fs2_in);
+gint                  fsSortByOrderCompareFunc(gconstpointer fs1_in, gconstpointer fs2_in);
+
+/* Columns */
+gint                  columnIdxCompareFunc(gconstpointer a, gconstpointer b);
+
+/* BlxSequence */
+char*                 blxSequenceGetSummaryInfo(const BlxSequence* const blxSeq, GList *columnList);
+BlxDataType*          createBlxDataType();
+void                  destroyBlxDataType(BlxDataType **blxDataType);
+const char*           getDataTypeName(BlxDataType *blxDataType);
+BlxSequence*          createEmptyBlxSequence();
+void                  addBlxSequenceData(BlxSequence *blxSeq, char *sequence, GError **error);
+BlxSequence*          addBlxSequence(const char *name, const char *name_orig, const char *idTag,
+                                     BlxStrand strand, BlxDataType *dataType, const char *source,
+                                     GList **seqList, GList *columnList, char *sequence, MSP *msp,
+                                     GHashTable *lookupTable, BlxSequence *blxSeq, GError **error);
+GList*                blxSequenceConstructCdsList(BlxSequence *seq);
+void                  blxSequenceSetValue(const BlxSequence *seq, const int columnId, GValue *value);
+void                  blxSequenceSetValueFromString(const BlxSequence *seq, const int columnId, const char *inputStr);
+void                  blxSequenceSetColumn(BlxSequence *seq, const char *colName, const char *value, GList *columnList);
+const char*           blxSequenceGetName(const BlxSequence *seq);
+GQuark                blxSequenceGetFetchMethod(const BlxSequence *seq, const gboolean bulk, const gboolean optionalColumns, const int index, const GArray *defaultMethods);
+int                   blxSequenceGetLength(const BlxSequence *seq);
+const char*           blxSequenceGetSequence(const BlxSequence *seq);
+gboolean              blxSequenceRequiresSeqData(const BlxSequence *seq);
+gboolean              blxSequenceRequiresOptionalData(const BlxSequence *seq);
+gboolean              blxSequenceRequiresColumnData(const BlxSequence *seq, const BlxColumnId columnId);
+BlxSequence*          blxSequenceGetVariantParent(const BlxSequence *variant, GList *allSeqs);
+char*                 blxSequenceGetInfo(BlxSequence *blxSeq, const gboolean allowNewlines, GList *columnList);
+int                   blxSequenceGetStart(const BlxSequence *seq, const BlxStrand strand);
+int                   blxSequenceGetEnd(const BlxSequence *seq, const BlxStrand strand);
+const char*           blxSequenceGetSource(const BlxSequence *seq);
+gboolean              blxSequenceGetLinkFeatures(const BlxSequence *seq, const gboolean defaultLinkFeatures);
+
+GValue*               blxSequenceGetValue(const BlxSequence *seq, const int columnId);
+
+const char*           blxSequenceGetValueAsString(const BlxSequence *seq, const int columnId);
+const char*           blxSequenceGetColumn(const BlxSequence* const blxSeq, const BlxColumnId columnId);
+const char*           blxSequenceGetOrganism(const BlxSequence *seq);
+const char*           blxSequenceGetOrganismAbbrev(const BlxSequence *seq);
+const char*           blxSequenceGetGeneName(const BlxSequence *seq);
+const char*           blxSequenceGetTissueType(const BlxSequence *seq);
+const char*           blxSequenceGetStrain(const BlxSequence *seq);
+char*                 blxSequenceGetFasta(const BlxSequence *seq);
+gboolean              blxSequenceGetFlag(const BlxSequence* const blxSeq, const MspFlag flag);
+
+char*                 blxSequenceGetSplicedSequence(const BlxSequence* const blxSeq, const char *refSeq, const IntRange* const refSeqRange, GError **error);
+
+void                  destroyBlxSequence(BlxSequence *seq);
+
+void                  blxColumnCreate(BlxColumnId columnId, const gboolean createHeader, const char *title,
+                                      GType type, const char *propertyName, const int defaultWidth,
+                                      const gboolean dataLoaded, const gboolean showColumn,
+                                      const gboolean showSummary, const gboolean canShowSummary, const gboolean searchable,
+                                      const char *sortName, const char *emblId, const char *emblTag,
+                                      GList **columnList);
+
+/* BlxDataType */
+gboolean              dataTypeGetFlag(const BlxDataType* const dataType, const MspFlag flag);
+
+#endif /* _blxmsp_included_ */
+
+
+
+
+
+
+
+
diff --git a/seqtoolsUtils/blxparser.cpp b/seqtoolsUtils/blxparser.cpp
new file mode 100644
index 0000000..48395db
--- /dev/null
+++ b/seqtoolsUtils/blxparser.cpp
@@ -0,0 +1,1950 @@
+/*  File: blxparser.c
+ *  Author: Erik Sonnhammer, 1993-05-17
+ *  Copyright (c) 2010 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: See blxparser.h
+ *----------------------------------------------------------------------------
+ */
+
+#include <seqtoolsUtils/utilities.hpp>
+#include <seqtoolsUtils/blxmsp.hpp>
+#include <seqtoolsUtils/blxGff3Parser.hpp>
+#include <seqtoolsUtils/blxparser.hpp>
+#include <string.h>
+#include <ctype.h>
+#include <stdlib.h>
+
+
+/* The following defines give keyword strings for tags in the old file formats */
+#define BLX_GAPS_TAG               "Gaps"
+#define BLX_DESCRIPTION_TAG        "Description"
+#define BLX_SEQUENCE_TAG           "Sequence"
+
+
+/* Error codes and domain */
+#define BLX_PARSER_ERROR g_quark_from_string("Parser")
+
+typedef enum {
+  BLX_PARSER_ERROR_NULL_MSP,	      /* MSP is null */
+  BLX_PARSER_ERROR_INVALID_TYPE,      /* MSP does not have a valid type */
+  BLX_PARSER_ERROR_NO_NAME,           /* MSP does not have a valid name */
+  BLX_PARSER_ERROR_INVALID_COORDS,    /* MSP does not have valid ref seq coords */
+  BLX_PARSER_ERROR_NO_STRAND,         /* MSP does not have a valid ref seq strand */
+  BLX_PARSER_ERROR_INVALID_S_COORDS,  /* MSP does not have valid match coords */
+  BLX_PARSER_ERROR_SEQS_DIFFER,       /* parsed data for the same sequence is different on different data lines */
+  BLX_PARSER_ERROR_COMPLEMENT_FAILED, /* failed to complement the sequence */
+  BLX_PARSER_ERROR_INVALID_FILE,      /* unrecognised file format */
+} BlxDotterError;
+
+
+typedef struct 
+{
+  GString *seqName;
+  GString *seq;
+} SeqStruct;
+
+
+
+static char *	    nextLineOfFile(FILE *file, GString *line_string);
+static char *	    nextLineOfBuffer(const char **buffer_inout, GString *line_string);
+
+
+static gboolean	    parseHeaderLine(char *line, BlxBlastMode *blastMode, MSP *msp, IntRange *seq1Range, BlxParserState *parserState);
+
+static void	    parseBody(char *line, const int lineNum, BlxBlastMode blastMode, const int resFactor, MSP **msp, GString *line_string, char **seq1, 
+                              char *seq1name, IntRange *seq1Range, char **seq2, char *seq2name, 
+                              BlxParserState *parserState, GArray* featureLists[], MSP **mspList, GList **seqList, GList *columnList, 
+                              GSList *supportedTypes, GSList *styles, char ***readSeq, int *readSeqLen, int *readSeqMaxLen, 
+                              GKeyFile *keyFile, GHashTable *lookupTable, GHashTable *fetchMethods);
+
+static void	    parseEXBLXSEQBL(GArray* featureLists[], MSP **lastMsp, MSP **mspList, const BlxParserState parserState, BlxBlastMode blastMode, GString *line_string, GList **seqList, GList *columnList, GHashTable *lookupTable);
+static void	    parseEXBLXSEQBLExtended(GArray* featureLists[], MSP **lastMsp, MSP **mspList, const BlxParserState parserState, BlxBlastMode blastMode, GString *line_string, GList **seqList, GList *columnList, GHashTable *lookupTable);
+static void	    parseFsHsp(char *line, BlxBlastMode blastMode, GArray* featureLists[], MSP **lastMsp, MSP **mspList, GList **seqList, GList *columnList, GHashTable *lookupTable);
+static void	    parseFsGspHeader(char *line, BlxBlastMode blastMode, GArray* featureLists[], MSP **lastMsp, MSP **mspList, BlxParserState *parserState, GList **seqList, GList *columnList);
+static void	    parseFsGspData(char *line, MSP *msp);
+static void	    parseFsGff(char *line, BlxBlastMode blastMode, GArray* featureLists[], MSP **lastMsp, MSP **mspList, GList **seqList, GList *columnList, GHashTable *lookupTable);
+static void	    parseFsSeg(char *line, BlxBlastMode blastMode, GArray* featureLists[], MSP **lastMsp, MSP **mspList, GList **seqList, GList *columnList, GHashTable *lookupTable);
+static void	    parseFsXyHeader(char *line, BlxBlastMode blastMode, GArray* featureLists[], MSP **lastMsp, MSP **mspList, char **seq1, char *seq1name, char **seq2, char *seq2name, BlxParserState *parserState, GList **seqList, GList *columnList, GHashTable *lookupTable);
+static void	    parseFsXyData(char *line, MSP *msp);
+static void         parseFsSeqHeader(char *line, char **seq1, char *seq1name, char **seq2, char *seq2name, char ***readSeq, int *readSeqLen, int *readSeqMaxLen, BlxParserState *parserState);
+static void         parseSeqData(char *line, char ***readSeq, int *readSeqLen, int *readSeqMaxLen, const BlxSeqType seqType);
+
+static gboolean	    parseDescription(char **text, MSP *msp_unused) ;
+static char*	    parseSequence(char **text, MSP *msp, const BlxBlastMode blastMode) ;
+static void	    parseLook(MSP *msp, char *s) ;
+
+static BlxMspType   getMspTypeFromScore(const int score);
+static void	    getDesc(MSP *msp, const char *s1, const char *s2) ;
+static char*	    prepSeq(const int sStart, char *inputSeq, BlxBlastMode blastMode) ;
+
+static void         getStrandAndFrameFromString(char *text, BlxStrand *strand, int *frame);
+static void         checkReversedSubjectAllowed(const MSP *msp, BlxBlastMode blastMode);
+
+/*
+ *  Globals
+ */
+
+/* These colors match those declared in systags, they must appear in the same order */	
+/* If you use more than 256 colours, code WILL break (see for instance the   */
+/* 'priority/colour' packing code in griddisp.c). This should not be a       */
+/* problem because that's a lot of colours and these colours are NOT used    */
+/* for images.                                                               */
+/*                                                                           */
+enum Colour    {WHITE, BLACK, LIGHTGRAY, DARKGRAY,
+                RED, GREEN, BLUE,
+                YELLOW, CYAN, MAGENTA,
+		LIGHTRED, LIGHTGREEN, LIGHTBLUE,
+		DARKRED, DARKGREEN, DARKBLUE,
+		PALERED, PALEGREEN, PALEBLUE,
+		PALEYELLOW, PALECYAN, PALEMAGENTA,
+		BROWN, ORANGE, PALEORANGE,
+		PURPLE, VIOLET, PALEVIOLET,
+		GRAY, PALEGRAY,
+		CERISE, MIDBLUE,
+		NUM_TRUECOLORS,
+                TRANSPARENT,	/* pseudocolour only for background */
+		FORECOLOR,	/* pseudocolor to force box->fcol after graphColor() */
+		BACKCOLOR	/* pseudocolor to force box->bcol after graphColor() */
+               } ;
+
+
+/* Get the factor to multiply match coords by to get display coords */
+static int getResFactorFromMode(const BlxBlastMode blastMode)
+{
+  return (blastMode == BLXMODE_BLASTX || blastMode == BLXMODE_TBLASTX ? 3 : 1);
+}
+
+
+static void parseLine(char *line, const int lineNum, BlxBlastMode *blastMode, const int resFactor, MSP **msp, GString *line_string,
+                      char **seq1, char *seq1name, IntRange *seq1Range, char **seq2, char *seq2name, 
+                      BlxParserState *parserState, GArray *featureLists[], MSP **mspList, GList **seqList, GList *columnList, GSList *supportedTypes,
+                      GSList *styles, char ***readSeq, int *readSeqLen, int *readSeqMaxLen, GKeyFile *keyFile, GHashTable *lookupTable, 
+                      GHashTable *fetchMethods, GError **error)
+{
+  if (!line)
+    return;
+
+  const int lineLen = strlen(line);
+  if (lineLen == 0 || line[0] == '\n')
+    {
+      return; /* empty file??? */
+    }
+  
+  /* get rid of any trailing '\n', there may not be one if the last line of the file
+   * didn't have one. */
+  char *charPtr = strchr(line, '\n');
+  if (charPtr)
+    {
+      *charPtr = 0;
+    }
+  
+  /* Check for header info first */
+  if (parseHeaderLine(line, blastMode, *msp, seq1Range, parserState))
+    {
+      return; 
+    }
+  
+  if (*parserState == PARSER_START)
+    {
+      /* If first line was not a valid header, it's an error */
+      *parserState = PARSER_ERROR;
+      g_set_error(error, BLX_PARSER_ERROR, BLX_PARSER_ERROR_INVALID_FILE, "Unrecognised file header '%s'.\n", line);
+    }
+  else
+    {
+      parseBody(line, lineNum, *blastMode, resFactor, msp, line_string, 
+                seq1, seq1name, seq1Range, seq2, seq2name, parserState, featureLists, mspList, seqList, columnList, supportedTypes,
+                styles, readSeq, readSeqLen, readSeqMaxLen, keyFile, lookupTable, fetchMethods);
+    }
+}
+
+
+/* Utility to determine if we're at the end of a file stream (if given) or the 
+ * end of the buffer (if given) */
+static gboolean endOfFileOrBuffer(FILE *file, const char *buffer)
+{
+  gboolean result = TRUE;
+
+  if (file)
+    result = feof(file);
+  else if (buffer)
+    result = (*buffer == 0 && *buffer == '\0');
+  
+  return result;
+}
+
+/* Parse input from a FILE stream or a string buffer (don't call this directly - use
+ * parseFS or parseBuffer) */
+static void parseFileOrBuffer(MSP **MSPlist, FILE *file, const char *buffer_in, BlxBlastMode *blastMode,
+                              GArray* featureLists[], GList **seqList, GList *columnList, GSList *supportedTypes, GSList *styles,
+                              char **seq1, char *seq1name, IntRange *seq1Range, char **seq2, char *seq2name, 
+                              GKeyFile *keyFile, GHashTable *lookupTable, GHashTable *fetchMethods, GError **error)
+{
+  g_return_if_fail(file || buffer_in);
+
+  const int resFactor = getResFactorFromMode(*blastMode);
+  const char *buffer = buffer_in;
+  
+  /* Find the last MSP in the list - new MSPs will be tagged on to the end of this. We also
+   * want to keep a record of the last MSP that was added in case additional information needs
+   * be be added to the same MSP (e.g. for XY plot information, where we have multiple lines that
+   * contain data for a single MSP). */
+  MSP *msp = NULL;
+  if (*MSPlist)
+    {
+      msp = *MSPlist;  
+      while(msp->next)
+	msp = msp->next;
+    }
+
+  /* Allocate reusable/extendable string as our buffer..*/
+  GString *line_string = g_string_sized_new(MAXLINE + 1); 
+  int lineNum = 0;
+
+  BlxParserState parserState = PARSER_START;
+  
+  /* Variables for reading in SEQ data */
+  char **readSeq = NULL;            /* buffer to hold the sequence we're reading in */
+  int readSeqMaxLen = UNSET_INT;    /* current max length of the buffer */
+  int readSeqLen = UNSET_INT;       /* current end pos of the data in the buffer */
+
+  while (!endOfFileOrBuffer(file, buffer) && parserState != PARSER_ERROR)
+    { 
+      ++lineNum;
+      
+      line_string = g_string_truncate(line_string, 0) ;	    /* Reset buffer pointer. */
+
+      char *line = NULL;
+      
+      if (file)
+        line = nextLineOfFile(file, line_string);
+      else
+        line = nextLineOfBuffer(&buffer, line_string);
+  
+      parseLine(line, lineNum, blastMode, resFactor, &msp, line_string, 
+                seq1, seq1name, seq1Range, seq2, seq2name, &parserState, featureLists, MSPlist, seqList, columnList, supportedTypes,
+                styles, &readSeq, &readSeqLen, &readSeqMaxLen, keyFile, lookupTable, fetchMethods, error);
+    }
+
+  g_string_free(line_string, TRUE) ;			    /* free everything, buffer and all. */
+
+  if (seq1Range)
+    {
+      if (!seq1Range->isSet() && *seq1)
+	{
+	  /* The seq1 range was not parsed from the file; set the default range to be 1 -> strlen */
+	  seq1Range->set(1, strlen(*seq1));
+	}
+      else if (*seq1)
+	{
+	  /* Check that the range is the same length as the sequence */
+	  int len = strlen(*seq1);
+	  if (seq1Range->length() > len)
+	    {
+	      g_warning("Sequence range in features file was %d -> %d (len=%d) but parsed sequence length is %d. Limiting end of sequence range to %d.\n", seq1Range->min(), seq1Range->max(), seq1Range->length(), len, seq1Range->min() + len - 1);
+	      seq1Range->setMax(seq1Range->min() + len - 1);
+	    }
+	  else if (seq1Range->length() < len)
+	    {
+	      g_warning("Sequence range in features file was %d -> %d (len=%d) but parsed sequence length is %d.\n", seq1Range->min(), seq1Range->max(), seq1Range->length(), len);
+	    }
+	}
+    }
+  
+  return ;
+}
+
+
+/* Function: parse a feature file (GFF or obsolete SFS format) from a FILE stream
+ *
+ * Assumptions:
+ *
+ *  *seq1 and *seq2 may or may not be allocated.
+ *
+ *  *seq1name and *seq2name are allocated at least 255 bytes
+ *
+ */
+void parseFS(MSP **MSPlist, FILE *file, BlxBlastMode *blastMode,
+             GArray* featureLists[], GList **seqList, GList *columnList, GSList *supportedTypes, GSList *styles,
+	     char **seq1, char *seq1name, IntRange *seq1Range, char **seq2, char *seq2name, 
+             GKeyFile *keyFile, GHashTable *lookupTable, GHashTable *fetchMethods, GError **error)
+{
+  parseFileOrBuffer(MSPlist, file, NULL, blastMode, featureLists, seqList, columnList, supportedTypes,
+                    styles, seq1, seq1name, seq1Range, seq2, seq2name, keyFile, lookupTable, fetchMethods, error);
+}
+
+
+/* Parse file contents from a string buffer */
+void parseBuffer(MSP **MSPlist, const char *buffer, BlxBlastMode *blastMode,
+                 GArray* featureLists[], GList **seqList, GList *columnList, GSList *supportedTypes, GSList *styles,
+                 char **seq1, char *seq1name, IntRange *seq1Range, char **seq2, char *seq2name, 
+                 GKeyFile *keyFile, GHashTable *lookupTable, GError **error)
+{
+  parseFileOrBuffer(MSPlist, NULL, buffer, blastMode, featureLists, seqList, columnList, supportedTypes,
+                    styles, seq1, seq1name, seq1Range, seq2, seq2name, keyFile, lookupTable, NULL, error);
+}
+
+
+/* Check that the given character is a valid DNA/RNA nucleotide. If not, give
+ * a warning.  If it is not even a valid UTF8 character then GTK cannot display
+ * it, so replace it with a padding character. */
+static void validateIupacChar(char *inputChar, const BlxSeqType seqType)
+{
+  if (!isValidIupacChar(*inputChar, seqType))
+    {
+      if (g_utf8_validate(inputChar, 1, NULL))
+        {
+          g_critical("FASTA input contains invalid %s '%c'\n", (seqType == BLXSEQ_PEPTIDE ? "peptide" : "nucleotide"), *inputChar);
+        }
+      else
+        {
+          g_critical("FASTA input contains bad (non-UTF8) character - it will be replaced by '%c'\n", SEQUENCE_CHAR_INVALID);
+          *inputChar = SEQUENCE_CHAR_INVALID;
+        }
+    }
+}
+
+
+/* Read in a FASTA sequence from a FASTA file or stdin */
+static char *readFastaSeqFromStdin(FILE *seqfile, char *seqName, int *startCoord, int *endCoord, const BlxSeqType seqType)
+{
+  char *resultSeq = NULL;
+  char line[MAXLINE+1];
+  
+  if (!fgets(line, MAXLINE, seqfile))
+    {
+      g_error("Error reading seqFile.\n") ;
+    }
+  
+  sscanf(line, "%s", seqName);
+  
+  /* Loop through the input text and copy into an auto-expandable string */
+  GString *resultStr = g_string_sized_new(5000);
+  char currentChar = fgetc(seqfile);
+  
+  while (currentChar != '\n') 
+    {
+      /* Ignore whitespace/newlines */
+      if (!isWhitespaceChar(currentChar) && !isNewlineChar(currentChar)) 
+        {
+          validateIupacChar(&currentChar, seqType);
+          g_string_append_c(resultStr, currentChar);
+        }      
+      
+      currentChar = fgetc(seqfile);
+    }
+  
+  /* Set the result string and free the GString (but don't free its data) */
+  resultSeq = g_string_free(resultStr, FALSE);
+  
+  return resultSeq;
+}
+
+
+/* Read a fasta sequence from a file */
+static GArray *readFastaSeqsFromFile(FILE *seqfile, char *seqName, int *startCoord, int *endCoord, const BlxSeqType seqType)
+{
+  GArray *resultArr = g_array_new(FALSE, FALSE, sizeof(SeqStruct));
+  char line[MAXLINE+1];
+
+  fseek(seqfile, 0, SEEK_END);
+  fseek(seqfile, 0, SEEK_SET);
+
+  SeqStruct *currentSeqPtr = NULL;
+  int curIdx = -1;
+
+  while (!feof(seqfile))
+    {
+      /* Get the next line */
+      if (!fgets(line, MAXLINE, seqfile)) 
+        {
+          break;
+        }
+      
+      if (*line == '>')
+        {
+          /* This line contains the sequence name (and possibly coords), so start a new sequence */
+          SeqStruct currentSeq = {g_string_new(NULL), g_string_new(NULL)};
+          g_array_append_val(resultArr, currentSeq);
+
+          ++curIdx;
+          currentSeqPtr = &g_array_index(resultArr, SeqStruct, curIdx);
+          
+          char *linePos = line + 1;
+          
+          for ( ; *linePos && *linePos != ' ' && *linePos != '\n'; ++linePos)
+            g_string_append_c(currentSeqPtr->seqName, *linePos);
+	
+	  if (startCoord && endCoord)
+	    {
+	      /* See if there coords specified on the line (format is ">seq_name start end") */
+              ++linePos;
+              sscanf(linePos, "%d %d", startCoord, endCoord);
+	    }
+        }
+      else if (currentSeqPtr)
+        {
+          /* Ok, this must be a line containing sequence data. Loop through each char in the line. */
+          char *linePos = line;
+          
+          for ( ; *linePos; linePos++)
+            {
+              /* Ignore whitespace/newlines */
+              if (!isWhitespaceChar(*linePos) && !isNewlineChar(*linePos))
+                {
+                  validateIupacChar(linePos, seqType);
+                  g_string_append_c(currentSeqPtr->seq, *linePos);
+                }
+            }
+        }      
+    }
+
+  return resultArr;
+}
+
+
+/* Read in multiple FASTA sequences from a file and concatenate them into
+ * a single sequence, using the name of the first sequence. */
+static char *concatenateFastaSeqs(FILE *seqfile, char *seqName, int *startCoord, int *endCoord, const BlxSeqType seqType)
+{
+  GString *resultStr = g_string_new(NULL);
+  
+  GArray *resultArr = readFastaSeqsFromFile(seqfile, seqName, startCoord, endCoord, seqType);
+  
+  int i = 0;
+  for ( ; i < (int)resultArr->len; ++i)
+    {
+      SeqStruct *curSeq = &g_array_index(resultArr, SeqStruct, i);
+      
+      if (curSeq && curSeq->seq)
+        g_string_append(resultStr, curSeq->seq->str);
+      
+      if (seqName[0] == 0 && curSeq && curSeq->seqName)
+        strcpy(seqName, curSeq->seqName->str);
+
+      g_string_free(curSeq->seqName, TRUE);
+      g_string_free(curSeq->seq, TRUE);
+    }
+
+  g_array_unref(resultArr);
+  char *result = g_string_free(resultStr, FALSE);
+  
+  return result;
+}
+
+
+/* Read in a FASTA sequence from an input, which can be a file or stdin.
+ * 
+ * Format: 
+ * >seq_name [start end] more words
+ *
+ *
+ * Example with coords (e.g. for blixem):
+ * 
+ * >chr4-04 43747 43996 more words
+ * aaatatgccattttagtattccacaattatgccaccatttggaaagaaag
+ * gattgttgacagcaaaagatacccctactaaatatgggtcacagatattt
+ * taccctaccctaggctatccacctaccacagaaagctgcagttcattgct
+ * ggggctaccagaaatgccaagatgagattacctagagaaacaggagggtc
+ * ggccaagcagcaacggccaccaccctttccggggaactccttatggccct
+ *
+ *
+ * Example without coords (e.g. for belvu where coords are included in the name):
+ * 
+ * >5H1A_HUMAN/53-400 more words
+ * GNACVVAAIAL...........ERSLQ.....NVANYLIG..S.LAVTDL
+ * MVSVLV..LPMAAL.........YQVL..NKWTL......GQVT.CDL..
+ * >5H1A_RAT more words
+ * GNACVVAAIAL...........ERSLQ.....NVANYLIG..S.LAVTDL
+ * MVSVLV..LPMAAL.........YQVL..NKWTL......GQVT.CDL..
+ * ...
+ */
+char *readFastaSeq(FILE *seqfile, char *seqName, int *startCoord, int *endCoord, const BlxSeqType seqType)
+{
+  if (seqfile == stdin) 
+    return readFastaSeqFromStdin(seqfile, seqName, startCoord, endCoord, seqType);
+  else
+    return concatenateFastaSeqs(seqfile, seqName, startCoord, endCoord, seqType);
+}
+
+
+
+/*************************************************
+ *               Internal functions.
+ *************************************************/
+
+/* Parse a line that contains shape information about a curve. */
+static BlxCurveShape parseShape(char *s) 
+{
+    if (!strcasecmp(s, "interpolate")) 
+      return BLXCURVE_INTERPOLATE;
+    else if (!strcasecmp(s, "partial")) 
+      return BLXCURVE_PARTIAL;
+    else 
+      return BLXCURVE_BADSHAPE;
+}
+
+/* Parse a string that contains information about the way the given MSP
+ * should look, i.e. color and shape-interpolation. */
+static void parseLook(MSP *msp, char *s)
+{
+    char *cp, *s2;
+
+    /* Make copy of string to mess up */
+    s2 = g_strdup(s);
+
+    cp = strtok(s2, "," );
+    while (cp) {
+
+        if (gdk_color_parse(cp, &msp->fsColor)) {
+          gboolean failures[1];
+          gdk_colormap_alloc_colors(gdk_colormap_get_system(), &msp->fsColor, 1, TRUE, TRUE, failures);
+	}
+	else if (parseShape(cp) != BLXCURVE_BADSHAPE) {
+	    msp->fsShape = parseShape(cp);
+	}
+	else 
+	    g_critical("Unrecognised Look: %s\n", cp);
+	
+	cp = strtok(0, "," );
+    }
+    g_free(s2);
+}
+
+
+/* Copy 'remainder of s1 after word s2' into msp->desc  */
+static void getDesc(MSP *msp, const char *s1, const char *s2)
+{
+    const char *cp;
+    
+    if (!(cp = strstr(s1, s2))) {
+	g_critical("Can't find back %s in %s", s2, s1);
+	return;
+    }
+
+    cp += strlen(s2)+1;
+
+    msp->desc = g_strdup(cp);
+}
+
+
+
+/* Called when parsing HSP data. For certain modes, prepends dashes onto the start of the match
+ * sequence if it does not start at 1. However, this old comment suggests that this isn't necessary:
+ * "I think this is a mistake in the code, we get the whole sequence so shouldn't be prepending the
+ * '-'s". */
+static char* prepSeq(const int sStart, char *inputSeq, BlxBlastMode blastMode)
+{
+  char *result = NULL;
+  
+  if (blastMode == BLXMODE_TBLASTN || blastMode == BLXMODE_TBLASTX) 
+    {
+      result = g_strdup(inputSeq) ;
+    }
+  else 
+    {
+      result = (char*)g_malloc(sStart + strlen(inputSeq)+1);
+      memset(result, SEQUENCE_CHAR_PAD,sStart); /* Fill up with dashes */
+      strcpy(result + sStart - 1, inputSeq);
+    }
+
+  return result;
+}
+
+
+
+/* This routine parses MSP files that have either the exblx or seqbl format.
+ * 
+ * Format for both exblx and seqbl files is seven tab separated fields:
+ * 
+ * score reference_strand_and_frame reference_start reference_end match_start match_end match_name
+ * 
+ * For exblx this is optionally followed by:
+ * 
+ *             [match_description]
+ * 
+ * and optionally for seqbl by:
+ * 
+ *             [match_sequence]
+ * 
+ * e.g. for exblx
+ * 
+ *    11 (+2) 49052 49783 102 328 SW:YCF2_MARPO some description or other
+ * 
+ */
+static void parseEXBLXSEQBL(GArray* featureLists[],
+                            MSP **lastMsp,
+                            MSP **mspList, 
+                            BlxParserState parserState, 
+                            BlxBlastMode blastMode, 
+                            GString *line_string, 
+                            GList **seqList,
+                            GList *columnList,
+                            GHashTable *lookupTable)
+{
+  char *cp;
+  char *line ;
+  char *seq_pos = NULL ;
+  
+  char sName[MAXLINE+1];
+  char qframe[8] = "(+1)";
+  int score = UNSET_INT;
+  int qStart = UNSET_INT;
+  int qEnd = UNSET_INT;
+  int sStart = UNSET_INT;
+  int sEnd = UNSET_INT;
+
+  line = line_string->str ;
+
+  /* NOTE that sscanf will fail if the sequence name as spaces in it. The name
+   * shouldn't have spaces but some do. If it does this function will probably fail
+   * in trying to parse the MSP gap data. */
+  if (sscanf(line, "%d%s%d%d%d%d%s", 
+	     &score, qframe, &qStart, &qEnd, 
+	     &sStart, &sEnd, sName) != 7)
+    {
+      g_error("Incomplete MSP data in input file.\n");
+    }
+
+  /* MSPcrunch gives sframe for tblastn - restore qframe */
+  if (blastMode == BLXMODE_TBLASTN)
+    {
+      strcpy(qframe, "(+1)");
+    }
+  
+  BlxStrand qStrand = BLXSTRAND_NONE;
+  int qFrame = UNSET_INT;
+  getStrandAndFrameFromString(qframe, &qStrand, &qFrame);
+  
+  const BlxMspType mspType = getMspTypeFromScore(score);
+
+  /* Create the new MSP */
+  GError *error = NULL;
+  
+  /* Hack for backwards compatibility: remove the 'i' or 'x' postfix from
+   * intron and exon names. */
+  int len = strlen(sName);
+  if (len && mspType == BLXMSP_EXON && toupper(sName[len - 1]) == 'X')
+    sName[len - 1] = '\0';
+  else if (len && mspType == BLXMSP_INTRON && toupper(sName[len - 1]) == 'I')
+    sName[len - 1] = '\0';
+
+  MSP *msp = createNewMsp(featureLists, lastMsp, mspList, seqList, columnList, mspType, NULL, NULL,
+                          score, UNSET_INT, 0,
+                          NULL, NULL, qStart, qEnd, qStrand, qFrame,
+                          sName, NULL, sStart, sEnd, BLXSTRAND_FORWARD, NULL,
+                          0, lookupTable, NULL, &error);
+
+  reportAndClearIfError(&error, G_LOG_LEVEL_CRITICAL);
+  
+  /* Convert subject names to fetchable ones if from NCBI server 
+         
+  Rule 1: If there is a gi, use that.
+  Rule 2: If no gi, use the first and last non-blank field as db:id.
+  */
+  if (strchr(msp->sname, '|'))
+    {
+      char *p, *src;
+  	
+      src = g_strdup(msp->sname);
+  	
+      p = strtok(src, "|");
+  	
+      if (!strcasecmp(p, "GI"))
+	{
+	  /* Use only GI number */
+	  p = strtok(0, "|");
+	  strcpy(msp->sname, "gi");
+	  strcat(msp->sname, ":");
+	  strcat(msp->sname, p);
+	}
+      else
+	{
+	  /* Try to make a proper db:name.  Use last non-blank field */
+          char *db=p, *last=NULL;
+  	    
+	  p = strtok(0, "|");
+	  while (p) {
+	    if (*p && *p != ' ') last = p;
+	    p = strtok(0, "|");
+	  }
+	  strcpy(msp->sname, db);
+	  strcat(msp->sname, ":");
+	  strcat(msp->sname, last);
+	}
+  	
+      g_free(src);
+    }
+  
+  if (!(cp = strstr(line, sName)))
+    {
+      g_error("Line does not include %s\n", sName);
+    }
+      
+  seq_pos = cp + strlen(sName) ;
+            
+  /* Parse the sequence, if applicable */
+  char *sequence = NULL;
+  
+  if (parserState == EXBLX_BODY)
+    {
+      /* skip over description */
+      while (*seq_pos && (*seq_pos == ' ' || *seq_pos == '\t')) 
+	seq_pos++;
+      if (*seq_pos && !isdigit(*seq_pos))
+	{
+	  while (*seq_pos && *seq_pos != ' ' && *seq_pos != '\t')
+	    seq_pos++;
+	  while (*seq_pos && (*seq_pos == ' ' || *seq_pos == '\t')) 
+	    seq_pos++;
+	}
+    }
+  else if (parserState == SEQBL_BODY)
+    {
+      /* Line contains chars other than sequence so get the starter data...not sure this test
+       * is necessary any more now we have a better mechanism of getting a whole line 
+       * from a file. All this is a horrible mixture of strtok and sscanf but what else
+       * to do.... */
+      if (strcspn(line, "acgt") != 0)
+	{
+	  sequence = (char*)g_malloc(line_string->len + 1) ;
+	  
+	  if (sscanf(seq_pos, "%s", sequence) != 1)
+	    {
+	      g_error("Error parsing %s\n", line);
+	    }
+          
+          while (*seq_pos && (*seq_pos == ' ' || *seq_pos == '\t')) 
+            seq_pos++;
+          while (*seq_pos && *seq_pos != ' ' && *seq_pos != '\t')
+            seq_pos++;
+	  while (*seq_pos && (*seq_pos == ' ' || *seq_pos == '\t')) 
+	    seq_pos++;
+	}
+    }
+  
+  if (sequence)
+    {
+      addBlxSequenceData(msp->sSequence, sequence, &error);
+      reportAndClearIfError(&error, G_LOG_LEVEL_CRITICAL);
+    }
+
+  /* Parse gaps data */
+  if (seq_pos)
+    {
+      if (!blxParseGaps(&seq_pos, msp, FALSE))
+        {
+          g_error("Incomplete MSP gap data for MSP '%s' [%d - %d]\n", msp->sname, msp->sRange.min(), msp->sRange.max()) ;
+        }
+    }
+  
+  if (parserState == SEQBL_BODY)
+    { 
+      checkReversedSubjectAllowed(msp, blastMode);
+    }
+  
+  return;
+}
+
+
+/* This routine parses MSP files that have either the _extended_ exblx or
+ * seqbl formats which borrow from the GFF format in having a set number
+ * of fixed fields followed by a variable number of attribute fields.
+ * These formats are distinguished by having exblx_x or seqbl_x in the
+ * file comment header:
+ *
+ * "# seqbl_x"  or  "# exblx_x"
+ *
+ * Format for both exblx_x and seqbl_x files is eight tab separated fields:
+ * 
+ * score reference_strand_frame reference_start reference_end match_start match_end match_strand match_name
+ * 
+ * For exblx_x this is optionally followed by:
+ * 
+ *             [gaps data] [match_description]
+ * 
+ * and for seqbl_x by:
+ * 
+ *             [gaps data] [match_sequence]
+ * 
+ * The format of these extra fields is "tag value(s) ;", i.e.
+ * 
+ * "Gaps [ref_start ref_end match_start match_end]+ ;"
+ * 
+ * "Description the sequence description ;"
+ * 
+ * "Sequence aaagggtttttcccccc ;"
+ * 
+ * Currently acedb & ZMap export this format but other programs could also use it.
+ * 
+ */
+static void parseEXBLXSEQBLExtended(GArray* featureLists[],
+                                    MSP **lastMsp, 
+                                    MSP **mspList, 
+                                    BlxParserState parserState, 
+                                    BlxBlastMode blastMode, 
+                                    GString *line_string, 
+                                    GList **seqList,
+                                    GList *columnList,
+                                    GHashTable *lookupTable)
+{
+  DEBUG_ENTER("parseEXBLXSEQBLExtended");
+  
+  gboolean result = FALSE ;
+  char *cp;
+  char *line ;
+  char *seq_pos = NULL;
+  char *first_pos ;
+  
+  char sName[MAXLINE+1];
+  char qframe[8] ;
+  char sframe[8] ;
+  int qStart = UNSET_INT;
+  int qEnd = UNSET_INT;
+  int sStart = UNSET_INT;
+  int sEnd = UNSET_INT;
+  int score = UNSET_INT;
+
+  line = line_string->str ;
+
+  /* NOTE that sscanf will fail if the sequence name as spaces in it. The name
+   * shouldn't have spaces but some do. If it does this function will probably fail
+   * in trying to parse the MSP gap data. */
+  if (sscanf(line, "%d%s%d%d%s%d%d%s", 
+	     &score,
+	     qframe, &qStart, &qEnd, 
+	     sframe, &sStart, &sEnd, sName) != 8)
+    {
+      g_error("Incomplete MSP data in input file.\n");
+    }
+
+  /* MSPcrunch gives sframe for tblastn - restore qframe */
+  if (blastMode == BLXMODE_TBLASTN)
+    strcpy(qframe, "(+1)");
+  
+  const BlxMspType mspType = getMspTypeFromScore(score) ;
+  
+  /* Extract frame and strand from qframe/sframe text */
+  BlxStrand qStrand = BLXSTRAND_NONE;
+  int qFrame = UNSET_INT;
+  getStrandAndFrameFromString(qframe, &qStrand, &qFrame);
+
+  BlxStrand sStrand = BLXSTRAND_NONE;
+  getStrandAndFrameFromString(sframe, &sStrand, NULL);
+
+  /* Create the new MSP */
+  GError *error = NULL;
+
+  /* Hack for backwards compatibility: remove the 'i' or 'x' postfix from
+   * intron and exon names. */
+  int len = strlen(sName);
+  if (len && typeIsExon(mspType) && toupper(sName[len - 1]) == 'X')
+    sName[len - 1] = '\0';
+  else if (len && typeIsIntron(mspType) && toupper(sName[len - 1]) == 'I')
+    sName[len - 1] = '\0';
+  
+  MSP *msp = createNewMsp(featureLists, lastMsp, mspList, seqList, columnList, mspType, NULL, NULL,
+                          score, UNSET_INT, 0,
+                          NULL, NULL, qStart, qEnd, qStrand, qFrame, 
+                          sName, NULL, sStart, sEnd, sStrand, NULL,
+                          0, lookupTable, NULL, &error);
+  
+  reportAndClearIfError(&error, G_LOG_LEVEL_CRITICAL);
+  
+  
+  /* Convert subject names to fetchable ones if from NCBI server 
+   *  Rule 1: If there is a gi, use that.
+   *  Rule 2: If no gi, use the first and last non-blank field as db:id.
+   */
+  if (strchr(msp->sname, '|'))
+    {
+      char *p, *src;
+  	
+      src = g_strdup(msp->sname);
+  	
+      p = strtok(src, "|");
+  	
+      if (!strcasecmp(p, "GI"))
+	{
+	  /* Use only GI number */
+	  p = strtok(0, "|");
+	  strcpy(msp->sname, "gi");
+	  strcat(msp->sname, ":");
+	  strcat(msp->sname, p);
+	}
+      else
+	{
+	  /* Try to make a proper db:name.  Use last non-blank field */
+          char *db=p, *last=NULL;
+  	    
+	  p = strtok(0, "|");
+	  while (p) {
+	    if (*p && *p != ' ') last = p;
+	    p = strtok(0, "|");
+	  }
+	  strcpy(msp->sname, db);
+	  strcat(msp->sname, ":");
+	  strcat(msp->sname, last);
+	}
+  	
+      g_free(src);
+    }
+  
+  if (!(cp = strstr(line, sName)))
+    {
+      g_error("Line does not include %s\n", sName);
+    }
+
+  seq_pos = cp + strlen(sName) ;
+            
+  /* Now read attributes. */
+  char *sequence = NULL;
+  
+  if (seq_pos && *seq_pos)
+    {
+      first_pos = seq_pos ;
+      result = TRUE ;
+      while (result)
+	{
+	  if (!(seq_pos = strtok(first_pos, " ")))
+	    {
+	      result = FALSE ;
+	      break ;
+	    }
+	  else
+	    {
+	      first_pos = NULL ;
+              
+	      /* Get first word and then parse.... */
+	      if ((strstr(seq_pos, BLX_GAPS_TAG)))
+		{
+		  if (!(result = blxParseGaps(&seq_pos, msp, TRUE)))
+		    g_error("Incomplete MSP gap data\n") ;
+		}
+	      else if (parserState == EXBLX_BODY && (strstr(seq_pos, BLX_DESCRIPTION_TAG)))
+		{
+		  result = parseDescription(&seq_pos, msp);
+                  
+		  if (!result)
+                    {
+                      g_error("Bad description data\n");
+                    }
+		}
+	      else if ((parserState == SEQBL_X_BODY || mspIsVariation(msp)) && (strstr(seq_pos, BLX_SEQUENCE_TAG)))
+		{
+                  sequence = parseSequence(&seq_pos, msp, blastMode);
+                  result = (sequence != NULL);
+                  
+		  if (!result)
+                    {
+                      g_error("Bad sequence data\n");
+                    }
+		}
+              
+	    }
+	}
+    }
+  
+  if (sequence)
+    {
+      addBlxSequenceData(msp->sSequence, sequence, &error);
+      reportAndClearIfError(&error, G_LOG_LEVEL_CRITICAL);
+    }
+  
+  if (parserState == SEQBL_X_BODY)
+    { 
+      checkReversedSubjectAllowed(msp, blastMode);
+    }
+  
+  DEBUG_EXIT("parseEXBLXSEQBLExtended");
+  return ;
+}
+
+
+/* Get the next line in a buffer */
+static char *nextLineOfBuffer(const char **buffer_inout, GString *line_string)
+{
+  char *result = NULL;
+  g_return_val_if_fail(buffer_inout && line_string, result);
+
+  const char *buffer = *buffer_inout;
+  const char *cp = strchr(buffer, '\n');
+  
+  if (cp)
+    {
+      /* Append the text up to the newline */
+      int len = cp - buffer;
+      g_string_append_len(line_string, buffer, len);
+      
+      /* Chop off the bit before the newline, so buffer is ready for the next iteration */
+      *buffer_inout = cp + 1;
+    }
+  else
+    {
+      /* Just a single line in the buffer, so append the whole thing */
+      g_string_append(line_string, buffer);
+      *buffer_inout = 0;
+    }
+
+  result = line_string->str ;
+  return result;
+}
+
+
+/* Read a line from a file, gets the whole line no matter how big...until you run out
+ * of memory.
+ * Returns NULL if there was nothing to read from the file, otherwise returns the
+ * line read which is actually the string held within the GString passed in.
+ * Crashes if there is a problem with the file. */
+static char *nextLineOfFile(FILE *file, GString *line_string)
+{
+  enum {BLX_BUF_SIZE = 4096} ;				    /* Vague guess at initial length. */
+  char *result = NULL ;
+  gboolean line_finished ;
+  char buffer[BLX_BUF_SIZE] ;
+
+  g_assert(file) ;
+
+  line_finished = FALSE ;
+  while (!line_finished)
+    {
+
+      if (!fgets(buffer, BLX_BUF_SIZE, file))
+	{
+	  if (feof(file))
+	    line_finished = TRUE ;
+	  else
+	    g_error("NULL value returned on reading input file\n") ;
+	}
+      else
+	{
+	  if (buffer[0] == '\0')
+	    {
+	      line_finished = TRUE ;
+	      result = line_string->str ;
+	    }
+	  else
+	    {
+	      int line_end ;
+
+	      g_string_sprintfa(line_string, "%s", &buffer[0]) ;
+
+	      line_end = strlen(&buffer[0]) - 1 ;
+
+	      if (buffer[line_end] == '\n' || buffer[line_end] == '\r')
+		{
+		  line_finished = TRUE ;
+		  result = line_string->str ;
+		}
+	    }
+	}
+    }
+
+  return result ;
+}
+
+
+/* Expects a string in the format "Gaps [ref_start ref_end match_start match_end]+ ; more text....."
+ * and parses out the coords. Only spaces allowed in the string, not tabs. Moves text
+ * to first char after ';'. 
+ * The hasGapsTag is a bit of a hack to also allow this function to work with the old style
+ * exblx file format that does not have a "Gaps" tag on the front of the gaps data. (In this case
+ * we need to do something slightly different with strtok to start reading in the correct place
+ * in the string.) */
+gboolean blxParseGaps(char **text, MSP *msp, const gboolean hasGapsTag)
+{
+  gboolean result = TRUE;
+
+  CoordRange *currentGap = NULL;
+  gboolean finished = FALSE;
+
+  char *currentGapStr = hasGapsTag ? strtok(NULL, " ") : strtok(*text, " ") ;
+
+  while (result && !finished && currentGapStr)
+    {
+      int i  = 0;
+
+      /* Loop through the four coords in this range */
+      for (i = 0 ;  i < 4 ; i++)
+	{
+	  if (!currentGapStr)
+	    {
+	      result = FALSE;
+	      break;
+	    }
+	  else if (*currentGapStr == ';')
+	    {
+	      finished = TRUE;
+	      break;
+	    }
+	     
+	  switch (i)
+	  {
+	    case 0:
+	    {
+	      /* First value is start of subject sequence range. Create the range struct */
+              currentGap = new CoordRange;
+              msp->gaps = g_slist_append(msp->gaps, currentGap);
+	      currentGap->sStart = convertStringToInt(currentGapStr);
+	      break;
+	    }
+	      
+	    case 1:
+	    {
+	      /* Second value is end of subject sequence range. Order values so that
+	       * sStart is less than sEnd if we have the forward strand or v.v. if the reverse. */
+	      currentGap->sEnd = convertStringToInt(currentGapStr);
+	      sortValues(&currentGap->sStart, &currentGap->sEnd, mspGetMatchStrand(msp) == BLXSTRAND_FORWARD);
+	      break;
+	    }
+	      
+	    case 2:
+	    {
+	      /* Third value is start of reference sequence range */
+	      currentGap->qStart = convertStringToInt(currentGapStr);
+	      break;
+	    }
+	      
+	    case 3:
+	    {
+	      /* Fourth value is end of reference sequence range. Order values so that
+	       * qStart is less than qEnd if ref sequence is forward strand or v.v. if the reverse. */
+	      currentGap->qEnd = convertStringToInt(currentGapStr);
+	      sortValues(&currentGap->qStart, &currentGap->qEnd, mspGetRefStrand(msp) == BLXSTRAND_FORWARD);
+	    }
+	  }
+
+	  currentGapStr = strtok(NULL, "\t ,") ; 
+	}  
+    }
+
+  return result ;
+}
+
+
+/* Description, should just be plain text, format is:
+ * 
+ * "Description text ; more text....."
+ * 
+ * text following Description must not contain ';'. Moves text to first
+ * char after ';'. */
+static gboolean parseDescription(char **text, MSP *msp)
+{
+  gboolean result = TRUE ;
+  char *cp ;
+
+  cp = strtok(NULL, ";") ;
+
+  if (cp && *cp)
+    {
+      msp->desc = g_strdup(cp) ;
+    }
+
+  return result ;
+}
+
+
+/* Find out the sequence type to display (nucleotide or peptide) based on the blast mode */
+static BlxSeqType getSeqTypeFromBlastMode(const BlxBlastMode blastMode, GError **error)
+{
+  BlxSeqType result = BLXSEQ_NONE;
+  
+  switch (blastMode)
+    {
+      case BLXMODE_BLASTP: /* fall through */
+      case BLXMODE_BLASTX: /* fall through */
+      case BLXMODE_TBLASTX:
+        result = BLXSEQ_PEPTIDE;
+        break;
+        
+      case BLXMODE_BLASTN: /* fall through */
+      case BLXMODE_TBLASTN:
+        result = BLXSEQ_DNA;
+        break;
+        
+      default:
+        g_set_error(error, BLX_ERROR, 1, "Unknown blast mode '%d'.\n", blastMode);
+        break;
+    };
+  
+  return result;
+}
+
+
+/* Description, should just be plain text, format is:
+ * 
+ * "Sequence text ; "
+ * 
+ * text following Sequence must not contain ';'. Moves text to first
+ * char after ';'. */
+static char* parseSequence(char **text, MSP *msp, const BlxBlastMode blastMode)
+{
+  char *result = NULL;
+
+  char *startPtr = *text ;
+  startPtr = strtok(NULL, "\t ") ;				    /* skip "Sequence" */
+
+  const int origLen = (int)strlen(startPtr);
+  
+  int validLen = 0;
+  char *cp = startPtr;
+  
+  GError *tmpError = NULL;
+  BlxSeqType seqType = getSeqTypeFromBlastMode(blastMode, &tmpError);
+  reportAndClearIfError(&tmpError, G_LOG_LEVEL_ERROR);
+  
+  while (isValidIupacChar(*cp, seqType))
+    {
+      ++cp;
+      ++validLen;
+    }
+  
+  if (validLen < 1 || validLen < (int)strlen(startPtr))
+    {
+      g_error("Error parsing sequence data for MSP '%s'; sequence is only valid up to %d (out of length %d).\n",
+		mspGetSName(msp), origLen, validLen) ;
+    }
+  else
+    {
+      result = (char*)g_malloc(validLen + 1) ;
+	  
+      if (sscanf(startPtr, "%s", result) != 1)
+	{
+	  g_error("Error parsing sequence data '%s' for MSP '%s'\n", startPtr, mspGetSName(msp)) ;
+	}
+    }
+
+  return result ;
+}
+
+
+/* Utility called by parseFS to parse the header info of a line from a file. Returns true if the
+ * line was completely processed, false if further processing on the same line is still required */
+static gboolean parseHeaderLine(char *line, BlxBlastMode *blastMode, MSP *msp, IntRange *seq1Range, BlxParserState *parserState)
+{
+  //DEBUG_ENTER("parseHeaderLine(parserState=%d)", *parserState);
+  
+  gboolean processed = FALSE;
+  
+  if (!strncasecmp(line, "##gff-version", 13))
+    {
+      /* Check it's GFF version 3. Loop past any whitespace first. */
+      char *cp = line + 13;
+      while (cp && (*cp == ' ' || *cp == '\t'))
+	{
+	  ++cp;
+	} 
+    
+      if (*cp != '3')
+	{
+	  *parserState = PARSER_ERROR;
+	  g_critical("Error parsing GFF file: GFF version '%s' is not supported (only version 3 is supported).", cp);
+	}
+      else
+	{
+	  *parserState = GFF_3_HEADER ;
+	  processed = TRUE;
+	}
+    }
+  else if (!strncasecmp(line, "##FASTA", 7))
+    {
+      *parserState = FASTA_SEQ_HEADER ;
+      processed = TRUE;
+    }
+  else if (!strncasecmp(line, "# seqbl_x", 9))
+    {
+      *parserState = SEQBL_X_BODY ;
+      processed = TRUE ;
+    }
+  else if (!strncasecmp(line, "# exblx_x", 9))
+    {
+      *parserState = EXBLX_X_BODY ;
+      processed = TRUE ;
+    }
+  else if (!strncasecmp(line, "# seqbl", 7))
+    {
+      /* Only for backwards compatibility */
+      *parserState = SEQBL_BODY ;
+      processed = TRUE ;
+    }
+  else if (!strncasecmp(line, "# exblx", 7))
+    {
+      /* Only for backwards compatibility */
+      *parserState = EXBLX_BODY ;
+      processed = TRUE ;
+    }
+  else if (!strncasecmp(line, "# FS type=HSP", 13) || 
+	   !strncasecmp(line, "# SFS type=HSP", 14))
+    {
+      *parserState = FS_HSP_BODY;
+      processed = TRUE ;
+    }
+  else if (!strncasecmp(line, "# FS type=GSP", 13) || 
+	   !strncasecmp(line, "# SFS type=GSP", 14))
+    {
+      *parserState = FS_GSP_HEADER;
+      processed = TRUE ;
+    }
+  else if (!strncasecmp(line, "# dotter feature format 2", 25) ||
+	   !strncasecmp(line, "# FS type=SEG", 13) ||
+	   !strncasecmp(line, "# SFS type=SEG", 14))
+    {
+      *parserState = FS_SEG_BODY;
+      processed = TRUE ;
+    }
+  else if (!strncasecmp(line, "# FS type=GFF", 13) || 
+	   !strncasecmp(line, "# SFS type=GFF", 14))
+    {
+      *parserState = FS_GFF_BODY;
+      processed = TRUE ;
+    }
+  else if (!strncasecmp(line, "# FS type=XY", 12) ||
+	   !strncasecmp(line, "# SFS type=XY", 13))
+    {
+      /* More info exists in the header line for this data type, so indicate we need to parse
+       * header info and return false to indicate we have not finished with this line */
+      *parserState = FS_XY_HEADER;
+      processed = FALSE;
+    }
+  else if (!strncasecmp(line, "# FS type=SEQ", 13) ||
+	   !strncasecmp(line, "# SFS type=SEQ", 14))
+    {
+      *parserState = FS_SEQ_HEADER;
+      processed = FALSE; /* more info exists in the header line for this data type */
+    }
+  else if (!strncasecmp(line, "# FS type=", 10) ||
+	   !strncasecmp(line, "# SFS type=", 11))
+    {
+      g_error("Unrecognised SFS type: %s\n", line);
+    }
+  else if (*line == '#' && *parserState == GFF_3_HEADER)
+    {
+      /* If we're in a GFF header we want to take a look at additional comment lines. */
+      processed = FALSE ;
+    }
+  else if (*parserState == GFF_3_HEADER)
+    {
+      /* We were processing GFF3 header lines (which all start with '#'), but this line does not
+       * start with '#', so it must be the start of the GFF3 body. */
+      *parserState = GFF_3_BODY;
+      processed = FALSE;
+    }
+  else if (*line == '#')
+    {
+      /* Very ugly; only for backwards compatibility */
+      /* Changed to soft parsing (unknown labels ignored) so that
+       any comment can be used */
+      if (!strncasecmp(line, "# blastp" , 8))
+        *blastMode = BLXMODE_BLASTP;
+      else if (!strncasecmp(line, "# tblastn", 9))
+        *blastMode = BLXMODE_TBLASTN;
+      else if (!strncasecmp(line, "# tblastx", 9))
+        *blastMode = BLXMODE_TBLASTX;
+      else if (!strncasecmp(line, "# blastn" , 8))
+        *blastMode = BLXMODE_BLASTN;
+      else if (!strncasecmp(line, "# blastx" , 8))
+        *blastMode = BLXMODE_BLASTX;
+      else if (!strncasecmp(line, "# hspgaps", 9))
+	{
+	  /* unused */
+	}
+      else if (!strncasecmp(line, "# DESC ", 7) &&
+	       (*parserState == FS_HSP_BODY || *parserState == FS_GSP_HEADER || 
+		*parserState == SEQBL_BODY))
+	{
+	  if (msp)
+	    getDesc(msp, line, mspGetSName(msp));
+	}
+      else if (!strncasecmp(line, "# sequence-region", 17) &&
+               (*parserState == EXBLX_BODY || *parserState == EXBLX_X_BODY || *parserState == SEQBL_BODY || *parserState == SEQBL_X_BODY))
+        {
+          /* read in the reference sequence name and range */
+          char qName[MAXLINE + 1];
+          int qStart = UNSET_INT;
+          int qEnd = UNSET_INT;
+          
+          if (sscanf(line, "# sequence-region%s%d%d", qName, &qStart, &qEnd) < 3)
+            {
+              g_warning("Error parsing sequence-region line in input file. Sequence range was not set. \"%s\"\n", line);
+            }
+          else
+            {
+              seq1Range->set(qStart, qEnd);
+            }
+        }
+	
+      processed = TRUE;
+    }
+  else if (*line == '>' && 
+           (*parserState == FASTA_SEQ_BODY || *parserState == FASTA_SEQ_IGNORE))
+    {
+      /* We can have multiple fasta sequences after the ##FASTA comment line.
+       * They don't have another ##FASTA comment so we need to look for the 
+       * '>' which indicates the header line of the fasta data. Only do this if
+       * we've already seen the ##FASTA comment, though. */
+      *parserState = FASTA_SEQ_HEADER;
+      processed = FALSE; /* more info exists on the header line that we need to parse out */      
+    }
+
+  //DEBUG_EXIT("parseHeaderLine returning processed = %d, (parserState = %d)", processed, *parserState);
+  return processed ;
+}
+
+
+/* Parse data from the given line into an MSP of type FS_HSP */
+static void parseFsHsp(char *line, 
+                       BlxBlastMode blastMode,
+                       GArray* featureLists[], 
+                       MSP **lastMsp,
+                       MSP **mspList,
+                       GList **seqList,
+                       GList *columnList,
+                       GHashTable *lookupTable)
+{
+  char qName[MAXLINE+1];
+  char sName[MAXLINE+1];
+  char seq[MAXLINE+1];
+  char qframe[8] = "(+1)";
+  char sframe[8] = "(+1)";
+  int qStart = UNSET_INT;
+  int sStart = UNSET_INT;
+  int qEnd = UNSET_INT;
+  int sEnd = UNSET_INT;
+  int score = UNSET_INT;
+  
+  /* <score> <qname> <qframe> <qstart> <qend> <sname> <sframe> <sstart> <ssend> <sequence> [annotation] */
+  if (sscanf(line, "%d%s%s%d%d%s%s%d%d%s", 
+	     &score, 
+	     qName, qframe+1, &qStart, &qEnd, 
+	     sName, sframe+1, &sStart, &sEnd,
+	     seq) != 10)
+    {
+      g_error("Error parsing data, type FS_HSP: \"%s\"\n", line);
+    }
+  
+  /* Get the strand and frame from the frame strings */
+  BlxStrand qStrand = BLXSTRAND_NONE;
+  int qFrame = UNSET_INT;
+  getStrandAndFrameFromString(qframe, &qStrand, &qFrame);
+
+  BlxStrand sStrand = BLXSTRAND_NONE;
+  int sFrame = UNSET_INT;
+  getStrandAndFrameFromString(sframe, &sStrand, &sFrame);
+
+  /* Get the sequence data */
+  char *sSeq = prepSeq(sStart, seq, blastMode);
+
+  /* Create the new MSP */
+  GError *error = NULL;
+
+  MSP *msp = createNewMsp(featureLists, lastMsp, mspList, seqList, columnList, BLXMSP_HSP, NULL,  NULL,
+                          score, UNSET_INT, 0, 
+                          NULL, qName, qStart, qEnd, qStrand, qFrame, 
+                          sName, NULL, sStart, sEnd, sStrand, sSeq, 0, lookupTable, NULL, &error);
+
+  reportAndClearIfError(&error, G_LOG_LEVEL_CRITICAL);
+  checkReversedSubjectAllowed(msp, blastMode);
+}
+
+
+/* Parse data from the given line, which contains feature-series GSP header info */
+static void parseFsGspHeader(char *line, 
+                             BlxBlastMode blastMode, 
+                             GArray* featureLists[], 
+                             MSP **lastMsp, 
+                             MSP **mspList, 
+                             BlxParserState *parserState, 
+                             GList **seqList,
+                             GList *columnList)
+{
+  /* Data goes into a new MSP */
+//  msp->type = BLXMSP_GSP;
+
+  /* Will write this as soon as MSPcrunch generates it */
+  g_warning("Parser for GSP data not implemented\n");
+  
+  /* Start parsing the GSP data next */
+  *parserState = FS_GSP_BODY ;
+}
+
+
+/* Parse a line that contains feature-series GSP data */
+static void parseFsGspData(char *line, MSP *msp)
+{
+  g_warning("Parser for GSP data not implemented\n");
+}
+
+
+/* Parse data from the given line into an MSP of type FS_SEG (Feature Series Segment) */
+static void parseFsSeg(char *line, 
+                       BlxBlastMode blastMode, 
+                       GArray* featureLists[], 
+                       MSP **lastMsp, 
+                       MSP **mspList, 
+                       GList **seqList,
+                       GList *columnList,
+                       GHashTable *lookupTable)
+{
+  char series[MAXLINE+1];
+  char qName[MAXLINE+1];
+  char look[MAXLINE+1];
+  int score = UNSET_INT;
+  int qStart = UNSET_INT;
+  int qEnd = UNSET_INT;
+  
+  /* <score> <sequencename> <seriesname> <start> <end> <look> [annotation] */
+  if (sscanf(line, "%d%s%s%d%d%s",
+	     &score, qName, series, &qStart, &qEnd, look) != 6)
+    {
+      g_error("Error parsing data, type FS_SEG: \"%s\"\n", line);
+    }
+  
+  
+  /* Create the new MSP */
+  GError *error = NULL;
+  
+  MSP *msp = createNewMsp(featureLists, lastMsp, mspList, seqList, columnList, BLXMSP_FS_SEG, NULL, NULL,
+                          UNSET_INT, UNSET_INT, 0, 
+                          NULL, qName, qStart, qStart, BLXSTRAND_NONE, 1, 
+                          series, NULL, qStart, qStart, BLXSTRAND_NONE, NULL, 0, lookupTable, NULL, &error);
+
+  /* Parse in additional feature-series info */
+  parseLook(msp, look);
+  getDesc(msp, line, look);
+//  insertFS(msp, series);
+  
+  reportAndClearIfError(&error, G_LOG_LEVEL_CRITICAL);
+}
+
+
+/* Parse data from a line of text that contains feature-series data in GFF format */
+static void parseFsGff(char *line, 
+                       BlxBlastMode blastMode, 
+                       GArray* featureLists[], 
+                       MSP **lastMsp, 
+                       MSP **mspList, 
+                       GList **seqList,
+                       GList *columnList,
+                       GHashTable *lookupTable)
+{
+  char scorestring[256];
+  char series[MAXLINE+1];
+  char qName[MAXLINE+1];
+  char look[MAXLINE+1];
+  char qframe[8] = "(+1)";
+  int qStart = UNSET_INT;
+  int qEnd = UNSET_INT;
+  
+  /* <sequencename> <seriesname> <look> <start> <end> <score> <strand> <transframe> [annotation] */
+  if (sscanf(line, "%s%s%s%d%d%s%s%s",
+	     qName, series, look, &qStart, &qEnd, scorestring, 
+	     qframe+1, qframe+2) != 8)
+    {
+      g_error("Error parsing data, type FS_GFF: \"%s\"\n", line);
+    }
+  
+  int score = UNSET_INT;
+  if (!strcmp(scorestring, ".")) 
+    {
+      score = 100;
+    }
+  else 
+    {
+      score = 50.0*atof(scorestring);
+    }
+  
+  BlxStrand qStrand = BLXSTRAND_NONE;
+  int qFrame = UNSET_INT;
+  getStrandAndFrameFromString(qframe, &qStrand, &qFrame);
+  
+  /* Create the new MSP */
+  GError *error = NULL;
+  
+  MSP *msp = createNewMsp(featureLists, lastMsp, mspList, seqList, columnList, BLXMSP_FS_SEG, NULL, NULL,
+                          score, UNSET_INT, 0, 
+                          NULL, qName, qStart, qEnd, qStrand, qFrame, 
+                          series, NULL, qStart, qEnd, BLXSTRAND_FORWARD, NULL, 0, lookupTable, NULL, &error);
+  
+
+  /* Parse additional feature-series information */
+  msp->desc = g_strdup(series);
+  parseLook(msp, look);
+//  insertFS(msp, series);
+  
+  reportAndClearIfError(&error, G_LOG_LEVEL_ERROR);
+}
+
+
+/* Parse data from the given line, which contains header info for Feature-Series XY-plot data */
+static void parseFsXyHeader(char *line, 
+                            BlxBlastMode blastMode, 
+                            GArray* featureLists[],
+                            MSP **lastMsp, 
+                            MSP **mspList, 
+                            char **seq1, 
+                            char *seq1name, 
+                            char **seq2,
+                            char *seq2name, 
+                            BlxParserState *parserState,
+                            GList **seqList,
+                            GList *columnList,
+                            GHashTable *lookupTable)
+{
+  int i, seqlen;
+  
+  char series[MAXLINE+1];
+  char qName[MAXLINE+1];
+  char look[MAXLINE+1];
+  
+  /* # FS type=XY <sequencename> <seriesname> <look> [annotation] */
+  if (sscanf(line+13, "%s%s%s", qName, series, look) != 3)
+    {
+      g_error("Error parsing data, type XY: \"%s\"\n", line);
+    }
+  
+  if (!seq1name || !seq2name)
+    {
+      g_error("Sequencenames not provided\n");
+    }
+  
+  if (!strcasecmp(qName, seq1name) || !strcmp(qName, "@1"))
+    {
+      if (!seq1 || !*seq1)
+        {
+          g_error("Sequence for %s not provided\n", qName);
+        }
+        
+      seqlen = strlen(*seq1);
+    }
+  else if (!strcasecmp(qName, seq2name) || !strcmp(qName, "@2"))
+    {
+      if (!seq2 || !*seq2)
+        {
+          g_error("Sequence for %s not provided\n", qName);
+        }
+
+      seqlen = strlen(*seq2);
+    }
+  else
+    {
+      g_error("Invalid sequence name: %s\n", qName);
+    }
+  
+  if (!seqlen)
+    { 
+      g_error("Sequence for %s is empty\n", qName);
+    }
+
+  /* Create an MSP to put the data in */
+  GError *error = NULL;
+  
+  MSP *msp = createNewMsp(featureLists, lastMsp, mspList, seqList, columnList, BLXMSP_XY_PLOT, NULL, NULL,
+                          UNSET_INT, UNSET_INT, 0, 
+                          NULL, qName, UNSET_INT, UNSET_INT, BLXSTRAND_FORWARD, 1,
+                          series, NULL, UNSET_INT, UNSET_INT, BLXSTRAND_FORWARD, NULL, 0, lookupTable, NULL, &error);
+  
+  reportAndClearIfError(&error, G_LOG_LEVEL_CRITICAL);
+
+  /* Add additional MSP information */
+  msp->xy = g_array_sized_new(TRUE, FALSE, sizeof(int), seqlen);
+  
+  for (i = 0; i < seqlen; i++)
+    {
+      int *iPtr = (int*)g_malloc(sizeof(int));
+      *iPtr = XY_NOT_FILLED;
+      g_array_append_val(msp->xy, *iPtr);
+    }
+  
+  msp->fsShape = BLXCURVE_INTERPOLATE; /* default */
+  parseLook(msp, look);
+  getDesc(msp, line, look);
+//  insertFS(msp, series); 
+  
+  /* Start parsing the actual XY data next */
+  *parserState = FS_XY_BODY;
+}
+
+
+/* Parse a line that contains XY-plot data for a feature-series. Data is populated into
+ * the given MSP. */
+static void parseFsXyData(char *line, MSP *msp)
+{
+  /* XY coordinates go in to the XY list in the current MSP. */
+  int x, y;
+  if (sscanf(line, "%d%d", &x, &y) != 2) 
+    {
+      g_error("Error parsing data file, type FS_XY_BODY: \"%s\"\n", line);
+    }
+    
+  int *xyVal = &g_array_index(msp->xy, int, x - 1);
+  *xyVal = y;
+}
+
+
+/* Parse a line that contains feature-series sequence header info */
+static void parseFsSeqHeader(char *line, 
+                             char **seq1, char *seq1name, char **seq2, char *seq2name,
+                             char ***readSeq, int *readSeqLen, int *readSeqMaxLen, BlxParserState *parserState)
+{
+  /* We have a header for sequence data. Read in the sequence name from the header line. */
+  char series[MAXLINE+1];
+  char qname[MAXLINE+1];
+  
+  if (sscanf(line+14, "%s%s", qname, series) != 2) 
+    {
+      g_error("Error parsing data file, type FS_SEQ_HEADER: \"%s\"\n", line);
+    }
+  
+  /* We need to allocate a string to read the seqeunce data in to. We want to allocate the releavant
+   * return pointer (seq1 or seq2) depending on which string was indicated in the header line. */
+  if (!strcmp(qname, "@1")) 
+    {
+      *readSeq = seq1;
+      strcpy(seq1name, series);
+    }
+  else if (!strcmp(qname, "@2")) 
+    {
+      *readSeq = seq2;
+      strcpy(seq2name, series);
+    }
+  
+  *readSeqMaxLen = MAXLINE;
+  **readSeq = (char*)g_malloc(*readSeqMaxLen + 1);
+  *readSeqLen = 0;
+  
+  /* Update the parser state so that we proceed to parse the sequence data next */
+  *parserState = FS_SEQ_BODY;
+}
+
+
+/* Parse a line that contains a chunk of sequence data. Concatenates the contents of the
+ * line onto readSeq, extending readSeq if necessary. readSeqLen is the length of the current
+ * contents of readSeq, and readSeqMaxLen is the currently allocated space for readSeq. */
+static void parseSeqData(char *line, char ***readSeq, int *readSeqLen, int *readSeqMaxLen, const BlxSeqType seqType)
+{
+  if (*readSeqLen == UNSET_INT)
+    {
+      /* Not initialised for reading in sequence; do nothing */
+      return;
+    }
+  
+  /* Read in the actual sequence data. It may span several lines, so concatenate each
+   * one on to the end of our result. */
+  
+  /* First, validate that we have valid input */
+  char *cp = line;
+  for ( ; cp && *cp; ++cp)
+    {
+      validateIupacChar(cp, seqType);
+    }
+  
+  /* Also reealloc memory if necessary */
+  if (*readSeqLen + (int)strlen(line) > *readSeqMaxLen) 
+    {
+      char *tmp;
+      *readSeqMaxLen += MAXLINE + strlen(line);
+      tmp = (char*)g_malloc(*readSeqMaxLen + 1);
+      strcpy(tmp, **readSeq);
+      g_free(**readSeq);
+      **readSeq = tmp;
+    }
+  
+  /* Copy in the contents of the line */
+  strcpy(**readSeq + *readSeqLen, line);
+  
+  /* Update the length counter */
+  *readSeqLen += strlen(line);
+}
+
+
+/* Utility to call the relevant parser function to parse the current data type */
+static void parseBody(char *line, const int lineNum, BlxBlastMode blastMode, const int resFactor, MSP **lastMsp, GString *line_string,
+                      char **seq1, char *seq1name, IntRange *seq1Range, char **seq2, char *seq2name, 
+                      BlxParserState *parserState, GArray *featureLists[], MSP **mspList, GList **seqList, GList *columnList, GSList *supportedTypes,
+                      GSList *styles, char ***readSeq, int *readSeqLen, int *readSeqMaxLen, GKeyFile *keyFile, GHashTable *lookupTable, GHashTable *fetchMethods)
+{
+  //DEBUG_ENTER("parseBody(parserState=%d, line=%d)", *parserState, lineNum);
+
+  GError *tmpError = NULL;
+  
+  /* Call the relevant function for the current type of data being parsed */
+  switch (*parserState)
+  {
+    case GFF_3_HEADER:
+      parseGff3Header(lineNum, lastMsp, mspList, parserState, line_string, seqList, seq1name, seq1Range, &tmpError);
+      break;
+      
+    case GFF_3_BODY:
+      parseGff3Body(lineNum, featureLists, lastMsp, mspList, parserState, line_string, 
+                    seqList, columnList, supportedTypes, styles, resFactor, keyFile, seq1Range, lookupTable, fetchMethods);
+      break;
+
+    case SEQBL_BODY: /* fall through */
+    case EXBLX_BODY:
+      parseEXBLXSEQBL(featureLists, lastMsp, mspList, *parserState, blastMode, line_string, seqList, columnList, lookupTable) ;
+      break;
+      
+    case SEQBL_X_BODY: /* fall through */
+    case EXBLX_X_BODY:
+      parseEXBLXSEQBLExtended(featureLists, lastMsp, mspList, *parserState, blastMode, line_string, seqList, columnList, lookupTable) ;
+      break;
+
+    case FS_HSP_BODY:
+      parseFsHsp(line, blastMode, featureLists, lastMsp, mspList, seqList, columnList, lookupTable);
+      break;
+
+    case FS_GSP_HEADER:
+      parseFsGspHeader(line, blastMode, featureLists, lastMsp, mspList, parserState, seqList, columnList);
+      break;
+
+    case FS_GSP_BODY:
+      parseFsGspData(line, *lastMsp);
+      break;
+      
+    case FS_GFF_BODY:
+      parseFsGff(line, blastMode, featureLists, lastMsp, mspList, seqList, columnList, lookupTable);
+      break;
+
+    case FS_SEG_BODY:
+      parseFsSeg(line, blastMode, featureLists, lastMsp, mspList, seqList, columnList, lookupTable);
+      break;
+      
+    case FS_XY_HEADER:
+      parseFsXyHeader(line, blastMode, featureLists, lastMsp, mspList, seq1, seq1name, seq2, seq2name, parserState, seqList, columnList, lookupTable);
+      break;
+      
+    case FS_XY_BODY:
+      parseFsXyData(line, *lastMsp);
+      break;
+
+    case FS_SEQ_HEADER:
+      parseFsSeqHeader(line, seq1, seq1name, seq2, seq2name, readSeq, readSeqLen, readSeqMaxLen, parserState);
+      break;
+
+    case FASTA_SEQ_HEADER:
+      parseFastaSeqHeader(line, lineNum, seq1, seq1name, seq1Range, readSeq, readSeqLen, readSeqMaxLen, parserState);
+      break;
+
+    case FS_SEQ_BODY: /* fall through */
+    case FASTA_SEQ_BODY:
+      parseSeqData(line, readSeq, readSeqLen, readSeqMaxLen, BLXSEQ_DNA); /* ref seq is always dna, not peptide */
+      break;
+
+    case FASTA_SEQ_IGNORE:
+      /* ignore this line of fasta sequence */
+      break;
+      
+    case PARSER_ERROR:
+      break;
+
+    default:
+      g_warning("Unexpected state '%d' while parsing input file.\n", (int)(*parserState));
+      *parserState = PARSER_ERROR;
+      break;
+  };
+  
+  if (tmpError)
+    {
+      reportAndClearIfError(&tmpError, G_LOG_LEVEL_CRITICAL);
+      *parserState = PARSER_ERROR;
+    }
+
+  //DEBUG_EXIT("parseBody");
+}
+
+
+/* For old file types, the hacky way of specifying the type of the MSP was by using a negative score
+ * for anything that is not a match. This function determines the type from the given score. */
+static BlxMspType getMspTypeFromScore(const int score)
+{
+  BlxMspType result = BLXMSP_INVALID;
+  
+  if (score >= 0)
+    {
+      result = BLXMSP_MATCH;
+    }
+  else if (score == -1)
+    {
+      result = BLXMSP_CDS;
+    }
+  else if (score == -2)
+    {
+      result = BLXMSP_INTRON;
+    }
+  else if (score == -3)
+    {
+      result = BLXMSP_VARIATION;
+    }
+
+  return result;  
+}
+
+
+/* Extract the strand and frame from the given string of the format "(+1)" and populate
+ * the return values, if non-null. */
+static void getStrandAndFrameFromString(char *text, BlxStrand *strand, int *frame)
+{
+  if (frame)
+    {
+      *frame = convertStringToInt(&text[2]);
+    }
+
+  if (strand)
+    {
+      if (text[1] == '+')
+        {
+          *strand = BLXSTRAND_FORWARD;
+        }
+      else if (text[1] == '-')
+        {
+          *strand = BLXSTRAND_REVERSE;
+        }
+      else
+        {
+          *strand = BLXSTRAND_NONE;
+        }
+    }
+}
+
+
+/* Check if we have a reversed subject and, if so, if this is allowed. Throws an error if not. */
+static void checkReversedSubjectAllowed(const MSP *msp, BlxBlastMode blastMode)
+{
+  if (mspGetMatchStrand(msp) == BLXSTRAND_REVERSE && (blastMode == BLXMODE_BLASTP || blastMode == BLXMODE_BLASTX))
+    {
+      g_error("Reversed subjects are not allowed in modes blastp or blastx.\n");
+    }
+}
+
+
+
+
diff --git a/seqtoolsUtils/blxparser.hpp b/seqtoolsUtils/blxparser.hpp
new file mode 100644
index 0000000..9d201f4
--- /dev/null
+++ b/seqtoolsUtils/blxparser.hpp
@@ -0,0 +1,47 @@
+/*  File: blxparser.h
+ *  Author: Gemma Barson, 2010-09-02
+ *  Copyright (c) 2010 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ *  Description: Parser for Blixem and Dotter feature input files.
+ *               
+ *               GFF v3 is the preferred input file format. This parser also
+ *               includes code to parse the old exblx or feature-series file
+ *               types (e.g. as output from the MSPcrunch program). 
+ *----------------------------------------------------------------------------
+ */
+
+void           parseFS(MSP **MSPlist, FILE *file, BlxBlastMode *blastMode, GArray* featureLists[], GList **seqList, GList *columnList, GSList *supportedTypes, GSList *styles,
+		       char **seq1, char *seq1name, IntRange *seq1Range, char **seq2, char *seq2name, GKeyFile *keyFile, GHashTable *lookupTable, GHashTable *fetchMethods, GError **error) ;
+
+void           parseBuffer(MSP **MSPlist, const char *buffer_in, BlxBlastMode *blastMode, GArray* featureLists[], GList **seqList, GList *columnList, GSList *supportedTypes, GSList *styles,
+                           char **seq1, char *seq1name, IntRange *seq1Range, char **seq2, char *seq2name, GKeyFile *keyFile, GHashTable *lookupTable, GError **error) ;
+gboolean       blxParseGaps(char **text, MSP *msp, const gboolean hasGapsTag);
diff --git a/seqtoolsUtils/iupac.hpp b/seqtoolsUtils/iupac.hpp
new file mode 100644
index 0000000..7ac3bed
--- /dev/null
+++ b/seqtoolsUtils/iupac.hpp
@@ -0,0 +1,320 @@
+/*  File: iupac.h
+ *  Author: Fred Wobus, 1999-08-26
+ *  Copyright (c) 2010 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: Globally defines the IUPAC symbols for nucleic acid sequence
+ *              iupac stuff from Sean Eddy's libsquid
+ *----------------------------------------------------------------------------
+ */
+
+#ifndef _iupac_h_included_
+#define _iupac_h_included_
+
+
+int PAM120[23][23] =
+  {
+    /*A   R   N   D   C   Q   E   G   H   I   L   K   M   F   P   S   T   W   Y   V   B   Z   X */ 
+    { 3, -3, -1,  0, -3, -1,  0,  1, -3, -1, -3, -2, -2, -4,  1,  1,  1, -7, -4,  0,  1,  0, -1},
+    {-3,  6, -1, -3, -4,  1, -3, -4,  1, -2, -4,  2, -1, -5, -1, -1, -2,  1, -5, -3, -1,  0, -1},
+    {-1, -1,  4,  2, -5,  0,  1,  0,  2, -2, -4,  1, -3, -4, -2,  1,  0, -4, -2, -3,  4,  1, -1},
+    { 0, -3,  2,  5, -7,  1,  3,  0,  0, -3, -5, -1, -4, -7, -3,  0, -1, -8, -5, -3,  5,  3, -1},
+    {-3, -4, -5, -7,  9, -7, -7, -4, -4, -3, -7, -7, -6, -6, -4,  0, -3, -8, -1, -3, -4, -6, -1},
+    {-1,  1,  0,  1, -7,  6,  2, -3,  3, -3, -2,  0, -1, -6,  0, -2, -2, -6, -5, -3,  1,  5, -1},
+    { 0, -3,  1,  3, -7,  2,  5, -1, -1, -3, -4, -1, -3, -7, -2, -1, -2, -8, -5, -3,  3,  5, -1},
+    { 1, -4,  0,  0, -4, -3, -1,  5, -4, -4, -5, -3, -4, -5, -2,  1, -1, -8, -6, -2,  1, -1, -1},
+    {-3,  1,  2,  0, -4,  3, -1, -4,  7, -4, -3, -2, -4, -3, -1, -2, -3, -3, -1, -3,  2,  2, -1},
+    {-1, -2, -2, -3, -3, -3, -3, -4, -4,  6,  1, -3,  1,  0, -3, -2,  0, -6, -2,  3, -2, -2, -1},
+    {-3, -4, -4, -5, -7, -2, -4, -5, -3,  1,  5, -4,  3,  0, -3, -4, -3, -3, -2,  1, -3, -2, -1},
+    {-2,  2,  1, -1, -7,  0, -1, -3, -2, -3, -4,  5,  0, -7, -2, -1, -1, -5, -5, -4,  1,  0, -1},
+    {-2, -1, -3, -4, -6, -1, -3, -4, -4,  1,  3,  0,  8, -1, -3, -2, -1, -6, -4,  1, -3, -1, -1},
+    {-4, -5, -4, -7, -6, -6, -7, -5, -3,  0,  0, -7, -1,  8, -5, -3, -4, -1,  4, -3, -4, -5, -1},
+    { 1, -1, -2, -3, -4,  0, -2, -2, -1, -3, -3, -2, -3, -5,  6,  1, -1, -7, -6, -2, -1,  0, -1},
+    { 1, -1,  1,  0,  0, -2, -1,  1, -2, -2, -4, -1, -2, -3,  1,  3,  2, -2, -3, -2,  1,  0, -1},
+    { 1, -2,  0, -1, -3, -2, -2, -1, -3,  0, -3, -1, -1, -4, -1,  2,  4, -6, -3,  0,  1, -1, -1},
+    {-7,  1, -4, -8, -8, -6, -8, -8, -3, -6, -3, -5, -6, -1, -7, -2, -6, 12, -2, -8, -5, -6, -1},
+    {-4, -5, -2, -5, -1, -5, -5, -6, -1, -2, -2, -5, -4,  4, -6, -3, -3, -2,  8, -3, -2, -4, -1},
+    { 0, -3, -3, -3, -3, -3, -3, -2, -3,  3,  1, -4,  1, -3, -2, -2,  0, -8, -3,  5, -2, -2, -1},
+    { 1, -1,  4,  5, -4,  1,  3,  1,  2, -2, -3,  1, -3, -4, -1,  1,  1, -5, -2, -2,  6,  4, -1},
+    { 0,  0,  1,  3, -6,  5,  5, -1,  2, -2, -2,  0, -1, -5,  0,  0, -1, -6, -4, -2,  4,  6, -1},
+    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}
+  };
+
+#define NA 23   /* Not A residue - equal to X */
+int aa_atob[]	/* ASCII-to-binary translation table */
+	= {
+	NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+	NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+	NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+	NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+	NA, 1,21, 5, 4, 7,14, 8, 9,10,NA,12,11,13, 3,NA,
+	15, 6, 2,16,17,NA,20,18,23,19,22,NA,NA,NA,NA,NA,
+	NA, 1,21, 5, 4, 7,14, 8, 9,10,NA,12,11,13, 3,NA,
+	15, 6, 2,16,17,NA,20,18,23,19,22,NA,NA,NA,NA,NA,
+	NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+	NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+	NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+	NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+	NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+	NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+	NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
+	NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA 
+};
+
+
+struct iupactype
+{
+  char       sym;               /* character representation */
+  char       symcomp;           /* complement (regular char */
+  char       code;              /* my binary rep */
+  char       comp;              /* binary encoded complement */
+};
+
+
+/* Binary encoding of the IUPAC code for nucleotides
+ *
+ *    four-bit "word", permitting rapid degenerate matching
+ *         A  C  G  T/U
+ *         0  0  1  0
+ */
+#define NTA 8
+#define NTC 4
+#define NTG 2
+#define NTT 1
+#define NTU 1
+#define NTN 15                  /* A|C|G|T */
+#define NTR 10                  /* A|G */
+#define NTY 5                   /* C|T */
+#define NTM 12                  /* A|C */
+#define NTK 3                   /* G|T */
+#define NTS 6                   /* C|G */
+#define NTW 9                   /* A|T */
+#define NTH 13                  /* A|C|T */
+#define NTB 7                   /* C|G|T */
+#define NTV 14                  /* A|C|G */
+#define NTD 11                  /* A|G|T */
+#define NTGAP 16                /* GAP */
+#define NTEND 0                 /* null string terminator */
+
+                                /* ntmatch(): bitwise comparison of two nuc's */
+                                /* note that it's sensitive to the order;
+                                   probe may be degenerate but target should
+                                   not be */
+
+				/* IUPAC code translations */
+				/* note: sequence chars are UPPER CASE */
+				/* in order of occurrence frequency;
+				   to speed up loops a bit */
+
+/* Define all of the valid characters in a DNA/RNA sequence, and their
+ * complements */
+/* residue:                 inverse:
+ * A = adenine              T
+ * C = cytosine             G
+ * G = guanine              C
+ * T = thymine (DNA only)   A
+ * U = uracil (RNA only)    A
+ * R = G/A (purine)         Y = C/T
+ * Y = T/C (pyrimidine)     R = G/A
+ * K = G/T (keto)           M = C/A
+ * M = A/C (amino)          K = T/G
+ * S = G/C (strong bonds)   S = C/G
+ * W = A/T (weak bonds)     W = T/A
+ * B = G/T/C (all but A)    V = C/A/G
+ * D = G/A/T (all but C)    H = C/T/A
+ * H = A/C/T (all but G)    D = T/G/A
+ * V = G/C/A (all but T)    B = C/G/T
+ * N = A/G/C/T (any)        N = A/G/C/T
+ */ 
+#define IUPACSYMNUM 17
+struct iupactype iupac[IUPACSYMNUM] =
+  {
+    {'A', 'T', NTA, NTT},
+    {'C', 'G', NTC, NTG},
+    {'G', 'C', NTG, NTC},
+    {'T', 'A', NTT, NTA},
+    {'U', 'A', NTU, NTA},
+    {'N', 'N', NTN, NTN},
+    {'-', '-', NTGAP, NTGAP},
+    {'R', 'Y', NTR, NTY},
+    {'Y', 'R', NTY, NTR},
+    {'M', 'K', NTM, NTK},
+    {'K', 'M', NTK, NTM},
+    {'S', 'S', NTS, NTS},
+    {'W', 'W', NTW, NTW},
+    {'H', 'D', NTH, NTD},
+    {'B', 'V', NTB, NTV},
+    {'V', 'B', NTV, NTB},
+    {'D', 'H', NTD, NTH}
+  };
+
+
+const char *stdcode1[65] = {
+  "K",				/* AAA */
+  "N",				/* AAC */
+  "K",				/* AAG */
+  "N",				/* AAU */
+  "T",				/* ACA */
+  "T",				/* ACC */
+  "T",				/* ACG */
+  "T",				/* ACU */
+  "R",				/* AGA */
+  "S",				/* AGC */
+  "R",				/* AGG */
+  "S",				/* AGU */
+  "I",				/* AUA */
+  "I",				/* AUC */
+  "M",				/* AUG */
+  "I",				/* AUU */
+  "Q",				/* CAA */
+  "H",				/* CAC */
+  "Q",				/* CAG */
+  "H",				/* CAU */
+  "P",				/* CCA */
+  "P",				/* CCC */
+  "P",				/* CCG */
+  "P",				/* CCU */
+  "R",				/* CGA */
+  "R",				/* CGC */
+  "R",				/* CGG */
+  "R",				/* CGU */
+  "L",				/* CUA */
+  "L",				/* CUC */
+  "L",				/* CUG */
+  "L",				/* CUU */
+  "E",				/* GAA */
+  "D",				/* GAC */
+  "E",				/* GAG */
+  "D",				/* GAU */
+  "A",				/* GCA */
+  "A",				/* GCC */
+  "A",				/* GCG */
+  "A",				/* GCU */
+  "G",				/* GGA */
+  "G",				/* GGC */
+  "G",				/* GGG */
+  "G",				/* GGU */
+  "V",				/* GUA */
+  "V",				/* GUC */
+  "V",				/* GUG */
+  "V",				/* GUU */
+  "*",				/* UAA */
+  "Y",				/* UAC */
+  "*",				/* UAG */
+  "Y",				/* UAU */
+  "S",				/* UCA */
+  "S",				/* UCC */
+  "S",				/* UCG */
+  "S",				/* UCU */
+  "*",				/* UGA */
+  "C",				/* UGC */
+  "W",				/* UGG */
+  "C",				/* UGU */
+  "L",				/* UUA */
+  "F",				/* UUC */
+  "L",				/* UUG */
+  "F",				/* UUU */
+  "X",				/* unknown */
+};
+
+
+
+
+const char *stdcode3[65] = {
+  "Lys",			/* AAA */
+  "Asn",			/* AAC */
+  "Lys",			/* AAG */
+  "Asn",			/* AAU */
+  "Thr",			/* ACA */
+  "Thr",			/* ACC */
+  "Thr",			/* ACG */
+  "Thr",			/* ACU */
+  "Arg",			/* AGA */
+  "Ser",			/* AGC */
+  "Arg",			/* AGG */
+  "Ser",			/* AGU */
+  "Ile",			/* AUA */
+  "Ile",			/* AUC */
+  "Met",			/* AUG */
+  "Ile",			/* AUU */
+  "Gln",			/* CAA */
+  "His",			/* CAC */
+  "Gln",			/* CAG */
+  "His",			/* CAU */
+  "Pro",			/* CCA */
+  "Pro",			/* CCC */
+  "Pro",			/* CCG */
+  "Pro",			/* CCU */
+  "Arg",			/* CGA */
+  "Arg",			/* CGC */
+  "Arg",			/* CGG */
+  "Arg",			/* CGU */
+  "Leu",			/* CUA */
+  "Leu",			/* CUC */
+  "Leu",			/* CUG */
+  "Leu",			/* CUU */
+  "Glu",			/* GAA */
+  "Asp",			/* GAC */
+  "Glu",			/* GAG */
+  "Asp",			/* GAU */
+  "Ala",			/* GCA */
+  "Ala",			/* GCC */
+  "Ala",			/* GCG */
+  "Ala",			/* GCU */
+  "Gly",			/* GGA */
+  "Gly",			/* GGC */
+  "Gly",			/* GGG */
+  "Gly",			/* GGU */
+  "Val",			/* GUA */
+  "Val",			/* GUC */
+  "Val",			/* GUG */
+  "Val",			/* GUU */
+  "***",			/* UAA */
+  "Tyr",			/* UAC */
+  "***",			/* UAG */
+  "Tyr",			/* UAU */
+  "Ser",			/* UCA */
+  "Ser",			/* UCC */
+  "Ser",			/* UCG */
+  "Ser",			/* UCU */
+  "***",			/* UGA */
+  "Cys",			/* UGC */
+  "Trp",			/* UGG */
+  "Cys",			/* UGU */
+  "Leu",			/* UUA */
+  "Phe",			/* UUC */
+  "Leu",			/* UUG */
+  "Trp",			/* UUU */
+  "XXX",			/* unknown */
+};
+
+
+#endif /* _iupac_h_included_ */
diff --git a/seqtoolsUtils/seqtoolsFetch.cpp b/seqtoolsUtils/seqtoolsFetch.cpp
new file mode 100644
index 0000000..55b0f85
--- /dev/null
+++ b/seqtoolsUtils/seqtoolsFetch.cpp
@@ -0,0 +1,62 @@
+/*  File: seqtoolsFetch.cpp
+ *  Author: Gemma Guest, 2015-12-21
+ *  Copyright (c) 2015 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: Utility methods for sequence-fetching code
+ *----------------------------------------------------------------------------
+ */
+
+#include <seqtoolsUtils/seqtoolsFetch.hpp>
+
+
+/* Create a fetch method struct */
+BlxFetchMethod* createBlxFetchMethod(const char *fetchName)
+{
+  BlxFetchMethod *result = new BlxFetchMethod;
+
+  result->name = g_quark_from_string(fetchName);
+  result->mode = BLXFETCH_MODE_NONE;
+
+  result->location = NULL;
+  result->node = NULL;
+  result->port = 0;
+  result->cookie_jar = NULL;
+  result->proxy = NULL;
+  result->args = NULL;
+  result->columns = NULL;
+
+  result->separator = NULL;
+  result->errors = NULL;
+  result->outputType = BLXFETCH_OUTPUT_INVALID;
+
+  return result;
+}
diff --git a/seqtoolsUtils/seqtoolsFetch.hpp b/seqtoolsUtils/seqtoolsFetch.hpp
new file mode 100644
index 0000000..43643d7
--- /dev/null
+++ b/seqtoolsUtils/seqtoolsFetch.hpp
@@ -0,0 +1,99 @@
+/*  File: seqtoolsFetch.hpp
+ *  Author: Gemma Guest, 2015-12-21
+ *  Copyright (c) 2015 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: Utility structs for sequence-fetching code
+ *----------------------------------------------------------------------------
+ */
+
+#ifndef DEF_SEQTOOLS_FETCH_HPP
+#define DEF_SEQTOOLS_FETCH_HPP
+
+#include <glib.h>
+
+/* These are the supported fetch modes. ***If you add anything here, also add it in fetchModeStr*** */
+typedef enum
+  {
+#ifdef PFETCH_HTML 
+    BLXFETCH_MODE_HTTP,
+    BLXFETCH_MODE_PIPE,
+#endif
+    BLXFETCH_MODE_SOCKET,
+    BLXFETCH_MODE_WWW,
+    BLXFETCH_MODE_SQLITE,
+    BLXFETCH_MODE_COMMAND,
+    BLXFETCH_MODE_INTERNAL,
+    BLXFETCH_MODE_NONE,
+
+    BLXFETCH_NUM_MODES /* must be last in list */
+  } BlxFetchMode;
+
+
+/* output types for fetch modes. *** if you add anything here, also add it in outputTypeStr *** */
+typedef enum
+{
+  BLXFETCH_OUTPUT_INVALID,
+  BLXFETCH_OUTPUT_RAW,      /* raw sequence data, separated by newlines */
+  BLXFETCH_OUTPUT_FASTA,    /* sequence data in FASTA format */
+  BLXFETCH_OUTPUT_EMBL,     /* the sequence's EMBL entry */
+  BLXFETCH_OUTPUT_LIST,     /* a list of named columns is returned */
+  BLXFETCH_OUTPUT_GFF,      /* a new gff for re-parsing is returned */
+
+  BLXFETCH_NUM_OUTPUT_TYPES
+} BlxFetchOutputType;
+
+
+
+
+/* struct to hold info about a fetch method */
+typedef struct _BlxFetchMethod
+{
+  GQuark name;                      /* fetch method name */
+  BlxFetchMode mode;                /* the type of fetch method */
+  
+  char *location;                   /* e.g. url, script, command, db location etc. */
+  char *node;                       /* for socket fetch mode */
+  int port;                         /* for socket and http/pipe fetch modes */
+  char *cookie_jar;                 /* for http/pipe fetch mode */
+  char *proxy;                      /* for http/pipe fetch mode */
+  char *args;                       /* arguments/query/request */
+  GArray *columns;                  /* for db-fetch, the list of columns the query will populate */
+
+  char *separator;                  /* separator when combining multiple sequence names into a list */
+  GArray *errors;                   /* array of messages (as GQuarks) that indicate that an error occurred, e.g. "no match" */
+  BlxFetchOutputType outputType;    /* the output format to expect from the fetch command */
+} BlxFetchMethod;
+
+#endif /* DEF_SEQTOOLS_FETCH_HPP */
+
+
+BlxFetchMethod* createBlxFetchMethod(const char *fetchName);
diff --git a/seqtoolsUtils/seqtoolsWebBrowser.cpp b/seqtoolsUtils/seqtoolsWebBrowser.cpp
new file mode 100644
index 0000000..a8ea3ed
--- /dev/null
+++ b/seqtoolsUtils/seqtoolsWebBrowser.cpp
@@ -0,0 +1,392 @@
+/*  File: seqtoolsWebBrowser.c
+ *  Author: Gemma Barson
+ *  Copyright (c) 2010 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: Functions to display a URL in a web browser. Copied from
+ *              zmapWebBrowser.c
+ *
+ * Exported functions: See utilities.h
+ *----------------------------------------------------------------------------
+ */
+
+#include <seqtoolsUtils/utilities.hpp>
+#include <sys/utsname.h>
+#include <glib.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* Describes various browsers, crude at the moment, we will probably need more options later. */
+typedef struct
+  {
+    const char *system ;					    /* system name as in "uname -s" */
+    const char *executable ;					    /* executable name or full path. */
+    const char *open_command ;					    /* alternative command to start browser. */
+  } BrowserConfigStruct, *BrowserConfig ;
+
+
+static char *findBrowser(BrowserConfig browsers, BrowserConfig *browser_out, GError **error) ;
+static void makeBrowserCmd(GString *cmd, BrowserConfig best_browser, char *url) ;
+static char *translateURLChars(const char *orig_link) ;
+static gboolean seqtools_g_string_replace(GString *string, const char *target, char *source);
+
+
+/* Records information for running a specific browser. The intent here is to add enough
+ * information to allow us to use stuff like Netscapes "open" subcommand which opens the
+ * url in an already running netscape if there is one, otherwise in a new netscape.
+ * 
+ * (see w2/graphgdkremote.c in acedb for some useful stuff.)
+ * 
+ * (See manpage for more options for "open" on the Mac, e.g. we could specify to always
+ * use Safari via the -a flag...which would also deal with badly specified urls...)
+ * 
+ * In the open_command the %U is substituted with the URL.
+ * 
+ * Note that if open_command is NULL then the executable name is simply combined with
+ * the URL in the expected way to form the command:    "executable  URL"
+ * 
+ * 
+ * Here's one from gnome...this will start in a new window or start a new browser as required.
+ * /usr/bin/gnome-moz-remote --newwin www.acedb.org
+ * 
+ * 
+ *  */
+#define BROWSER_PATTERN "%U"
+
+/* List of browsers for different systems, you can have more than one browser for a system. */
+static BrowserConfigStruct browsers_G[] =
+{
+{"Linux",  "xdg-open",  "xdg-open \"" BROWSER_PATTERN "\""},
+{"Linux",  "iceweasel",  "iceweasel -new-window \"" BROWSER_PATTERN "\""},
+{"Linux",  "firefox",  "firefox -browser \"" BROWSER_PATTERN "\""},
+{"Linux",  "mozilla",  "mozilla -remote 'openurl(\"" BROWSER_PATTERN "\",new-window)' || mozilla \"" BROWSER_PATTERN "\""},
+{"OSF",    "netscape", NULL},
+{"Darwin", "/Applications/Safari.app/Contents/MacOS/Safari", "open \"" BROWSER_PATTERN "\""},
+{NULL, NULL}					    /* Terminator record. */
+} ;
+
+
+/* Error handling stuff. */
+static const char *domain_G = "SEQTOOLS_WEB" ;
+enum {BROWSER_NOT_FOUND, BROWSER_COMMAND_FAILED, BROWSER_UNAME_FAILED, BROWSER_NOT_REGISTERED} ;
+static GQuark err_domain_G = 0 ;
+
+
+
+
+/*! @addtogroup seqtoolsutils
+ * @{ || 
+ *  */
+
+
+/*!
+ * Launches a web browser to display the specified link. The browser is chosen
+ * from an internal list of browsers for different machines. As so much can go
+ * wrong this function returns FALSE and a GError struct when an error occurs.
+ * You should call this function like this:
+ * 
+ *     GError *error = NULL ;
+ * 
+ *     if (!(seqtoolsLaunchWebBrowser("www.acedb.org", &error)))
+ *       { || 
+ *         printf("Error: %s\n", error->message) ;
+ * 
+ *         g_error_free(error) ;
+ *       }
+ *
+ * @param    link              url to be shown in browser.
+ * @param    error             pointer to NULL GError pointer for return of errors.
+ * @return   gboolean          TRUE if launch of browser successful.
+ */
+gboolean seqtoolsLaunchWebBrowser(const char *link, GError **error)
+{
+  gboolean result = FALSE ;
+  BrowserConfig best_browser = NULL ;
+  char *browser = NULL ;
+  
+  g_assert(link && *link && error && !(*error)) ; 
+  
+  if (!err_domain_G)
+    err_domain_G = g_quark_from_string(domain_G) ;
+  
+  
+  /* Check we have a registered browser for this system. */
+  browser = findBrowser(browsers_G, &best_browser, error) ;
+  
+  
+  
+  /* Run the browser in a separate process. */
+  if (browser)
+    {
+      char *url ;
+      GString *sys_cmd ;
+      int sys_rc ;
+      
+      /* Translate troublesome chars to their url escape sequences, see translateURLChars() for explanation. */
+      url = translateURLChars(link) ;  
+      
+      sys_cmd = g_string_sized_new(1024) ;		    /* Should be long enough for most urls. */
+      
+      if (best_browser->open_command)
+	{
+	  makeBrowserCmd(sys_cmd, best_browser, url) ;
+	}
+      else 
+	{
+	  g_string_printf(sys_cmd, "%s \"%s\"", browser, url) ;
+	}
+      
+      /* Make sure browser is run in background by the shell so we do not wait.
+       * NOTE that because we do not wait for the command to be executed,
+       * we cannot tell if the command actually worked, only that the shell
+       * got exec'd */
+      g_string_append(sys_cmd, " &") ;    
+      
+      /* We could do much more to interpret what exactly failed here... */
+      if ((sys_rc = system(sys_cmd->str)) == EXIT_SUCCESS)
+	{
+	  result = TRUE ;
+	}
+      else   
+	{
+	  *error = g_error_new(err_domain_G, BROWSER_COMMAND_FAILED,
+			       "Failed to run command \"%s\".", sys_cmd->str) ;
+	}
+      
+      g_string_free(sys_cmd, TRUE) ;
+      g_free(url) ;
+    }
+  
+  
+  return result ;
+}
+
+
+/*! @} end of seqtoolsutils docs. */
+
+
+
+
+
+
+/* 
+ *                Internal functions.
+ */
+
+
+
+
+/* Gets the system name and then finds browsers for that system from our || 
+ * our internal list, if it finds the browser is in the users path then
+ * returns the path otherwise returns NULL and sets error to give details
+ * of what went wrong. */
+static char *findBrowser(BrowserConfig browsers_in, BrowserConfig *browser_out, GError **error)
+{
+  char *browser = NULL ;
+  struct utsname unamebuf ;
+  gboolean browser_in_list = FALSE ;
+  
+  if (uname(&unamebuf) == -1)
+    {
+      *error = g_error_new_literal(err_domain_G, BROWSER_UNAME_FAILED,
+				   "uname() call to find system name failed") ;
+    }
+  else 
+    {
+      BrowserConfig curr_browser = browsers_in ;
+      
+      while (curr_browser->system != NULL)
+	{
+	  if (g_ascii_strcasecmp(curr_browser->system, unamebuf.sysname) == 0)
+	    {
+	      browser_in_list = TRUE ; 
+              
+	      /* Look for the browser in the users path. */
+	      if ((browser = g_find_program_in_path(curr_browser->executable)))
+		{
+		  *browser_out = curr_browser ;
+                  
+		  break ;
+		}
+	    }
+          
+	  curr_browser++ ;
+	}
+    }
+  
+  if (!browser)
+    {
+      if (browser_in_list)
+	{
+	  *error = g_error_new(err_domain_G, BROWSER_NOT_FOUND,
+			       "Browser(s) registered with SeqTools for this system (%s)"
+			       " but none found in $PATH or they were not executable.", unamebuf.sysname) ;
+	}
+      else
+	{
+	  *error = g_error_new(err_domain_G, BROWSER_NOT_REGISTERED,
+			       "No browser registered for system %s", unamebuf.sysname) ;
+	}
+    }
+  
+  return browser ;
+}
+
+
+static void makeBrowserCmd(GString *cmd, BrowserConfig best_browser, char *url)
+{
+  gboolean found ;
+  
+  cmd = g_string_append(cmd, best_browser->open_command) ;
+  
+  found = seqtools_g_string_replace(cmd, BROWSER_PATTERN, url) ;
+  
+  g_assert(found) ;					    /* Must find at least one pattern. */
+  
+  return ;
+}
+
+
+/* URL standards provide escape sequences for all chars which gets round problems
+ * with them being wrongly interpreted. This function translates chars in the url
+ * that give us problems for various reasons:
+ *
+ * If we use the netscape or Mozilla "OpenURL" remote commands to display links, then sadly the
+ * syntax for this command is: "OpenURL(URL[,new-window])" and stupid
+ * netscape/mozilla will think that any "," in the url (i.e. lots of cgi links have
+ * "," to separate args !) is the "," for its OpenURL command and will then
+ * usually report a syntax error in the OpenURL command.                   
+ *                                                                         
+ * To get round this we translate any "," into "%2C" which is the standard 
+ * code for a "," in urls (thanks to Roger Pettet for this)....YUCH.
+ * 
+ * Some urls have single quotes in them, if you pass the whole string through
+ * to the shell these get wrongly interpreted by the shell in its normal
+ * string fashion so we translate them all to "%27".
+ * 
+ * mh17: for security we need to patch out other shell special characters such as '|', ';', '`'. >,< should be harmless
+ * Anything that allows a user to run another command is a no-no
+ * This gets inefficient (perl and php might do this better)
+ * we can quote the url, but that opens the door to interpretation, better to code metachars as hex.
+ "
+ * The returned string should be g_free'd when no longer needed.
+ *
+ *    mh17: second thoughts: don't use, these rely on quoting: thrid thoughts: no amount of escaped quoting seems to work
+ */
+static char *translateURLChars(const char *orig_link)
+{
+  char *url = NULL ;
+  
+#if TRANSLATE
+  
+  GString *link ;
+  char *target, *source ;
+  
+  link = g_string_new(orig_link) ;
+  
+  target = " " ;
+  source = "%20" ;
+  seqtools_g_string_replace(link, target, source) ;
+  
+  target = ";" ;
+  source = "%3B" ;
+  seqtools_g_string_replace(link, target, source) ;
+  
+  target = "," ;
+  source = "%2C" ;
+  seqtools_g_string_replace(link, target, source) ;
+  
+  target = "'" ;
+  source = "%27" ;
+  seqtools_g_string_replace(link, target, source) ;
+  
+  target = "&" ;
+  source = "%26" ;
+  seqtools_g_string_replace(link, target, source) ;
+  
+  target = "|" ;
+  source = "%7C" ;
+  seqtools_g_string_replace(link, target, source) ;
+  
+  target = "`" ;
+  source = "%60" ;
+  seqtools_g_string_replace(link, target, source) ;
+  
+  url = g_string_free(link, FALSE) ;
+#else
+  url = g_strdup(orig_link);
+#endif
+  return url ;
+}
+
+
+
+
+/*!
+ * Substitute one string for another in a GString.
+ *
+ * You should note that this routine simply uses the existing GString erase/insert
+ * functions and so may not be incredibly efficient. If the target string was not
+ * found the GString remains unaltered and FALSE is returned.
+ *
+ * @param string                 A valid GString.
+ * @param target                 The string to be replaced.
+ * @param source                 The string to be inserted.
+ * @return                       TRUE if a string was replaced, FALSE otherwise.
+ *  */
+static gboolean seqtools_g_string_replace(GString *string, const char *target, char *source)
+{
+  gboolean result = FALSE ;
+  int source_len ;
+  int target_len ;
+  int target_pos ;
+  char *template_ptr ;
+  
+  
+  target_len = strlen(target) ;
+  source_len = strlen(source) ;
+  
+  template_ptr = string->str ;
+  while ((template_ptr = strstr(template_ptr, target)))
+    {
+      result = TRUE ;
+      
+      target_pos = template_ptr - string->str ;
+      
+      string = g_string_erase(string, target_pos, target_len) ;
+      
+      string = g_string_insert(string, target_pos, source) ;
+      
+      template_ptr = string->str + target_pos + source_len ; /* Shouldn't go off the end. */
+    }
+  
+  return result ;
+}
diff --git a/seqtoolsUtils/translate.cpp b/seqtoolsUtils/translate.cpp
new file mode 100644
index 0000000..2bb2178
--- /dev/null
+++ b/seqtoolsUtils/translate.cpp
@@ -0,0 +1,212 @@
+/*  File: translate.c
+ *  Author: sre, 1993-01-12
+ *  Copyright (c) 2010 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: Functions for complementing, reversing and translating nucleic
+ *              acid sequences
+ *
+ * Exported functions: See utilities.h
+ *----------------------------------------------------------------------------
+ */
+
+#include <seqtoolsUtils/utilities.hpp>
+#include <seqtoolsUtils/iupac.hpp>
+#include <glib.h>
+#include <ctype.h>
+#include <string.h>
+
+
+/* Translation errors domain */
+#define SEQTOOLS_TRANSLATION_ERROR g_quark_from_string("SeqTools")
+
+/* Error codes */
+typedef enum
+  {
+    SEQTOOLS_ERROR_INVALID_NUCLEOTIDE      /* invalid dna/rna nucleotide */
+  } SeqToolsTranslationError;
+
+
+
+
+/* THIS FILE NEEDS RENAMING TO SOMETHING LIKE utils.c */
+
+/* Function: Translate(char *seq, char **code)
+ * 
+ * Given a ptr to the start of a nucleic acid sequence, and a genetic code, translate the sequence
+ * into amino acid sequence.
+ * 
+ * code is an array of 65 strings, representing the translations of the 64 codons, arranged in
+ * order AAA, AAC, AAG, AAU, ..., UUA, UUC, UUG, UUU.  '*' or '***' is used to represent
+ * termination codons, usually. The final string, code[64], is the code for an ambiguous amino
+ * acid.
+ *
+ * Because of the way space is allocated for the amino acid sequence, the amino acid strings
+ * cannot be longer than 3 letters each. (I don't foresee using anything but the single- and
+ * triple- letter codes.)
+ * 
+ * Returns a ptr to the translation string on success, or NULL on failure.
+ */
+char *blxTranslate(const char *seq, char **code)
+{
+  char *aaseq = NULL ;					    /* RETURN: the translation */
+  int   codon;						    /* index for codon         */
+  char *aaptr;						    /* ptr into aaseq */
+  int   i;
+  
+  if (seq && *seq)
+    {
+      aaseq = (char *)g_malloc(strlen(seq) + 1) ;
+
+      for (aaptr = aaseq ; *seq != '\0' && *(seq+1) != '\0' && *(seq+2) != '\0'; seq += 3)
+	{
+	  /* calculate the lookup value for this codon */
+	  codon = 0;
+	  for (i = 0; i < 3; i++)
+	    {
+	      codon *= 4;
+
+	      switch (*(seq + i))
+		{
+		case 'A': case 'a':             break;
+		case 'C': case 'c': codon += 1; break;
+		case 'G': case 'g': codon += 2; break;
+		case 'T': case 't': codon += 3; break;
+		case 'U': case 'u': codon += 3; break;
+		default: codon = 64; break;
+		}
+
+	      if (codon == 64)
+		break;
+	    }
+
+	  strcpy(aaptr, code[codon]);
+	  aaptr += strlen(code[codon]);
+	}
+    }  
+
+  return aaseq ;
+}
+
+
+/* Get the complement of the given nucleotide. Returns the original char and sets
+ * the error if no valid complement exists */
+char complementChar(const char inputChar, GError **error)
+{
+  /* Loop through each iupac code looking for this char. iupac chars are all
+   * uppercase */
+  char result = '\0';
+  char c = toupper(inputChar);
+  int idx = 0;
+  
+  for ( ; c != iupac[idx].sym && idx < IUPACSYMNUM; idx++);
+  
+  if (idx >= IUPACSYMNUM)
+    {
+      /* not found; return original char */
+      result = inputChar;
+      g_set_error(error, SEQTOOLS_TRANSLATION_ERROR, SEQTOOLS_ERROR_INVALID_NUCLEOTIDE, "Invalid nucleotide '%c'; could not find complement.\n", inputChar);
+    }
+  else
+    {
+      result = iupac[idx].symcomp;
+      
+      if (islower(inputChar))
+        result = tolower(result);
+    }
+  
+  return result;
+}
+
+
+/* All these calls need rationalising into a single function with options. */
+
+/* revComplement.c
+ * 
+ * Reverse complement of a IUPAC character string
+ * 
+ */
+/* Ratinalise this with my func. below..... */
+char *revComplement(char *comp, char *seq)
+{
+  long  bases;
+  char *bckp, *fwdp;
+  long  pos;
+
+  if (comp == NULL)
+    return NULL;
+  if (seq == NULL)
+    return NULL;
+
+  bases = strlen(seq);
+
+  fwdp = comp;
+  bckp = seq + bases -1;
+  for (pos = 0; pos < bases; pos++)
+    {
+      *fwdp = complementChar(*bckp, NULL);
+      fwdp++;
+      bckp--;
+    }
+  *fwdp = '\0';
+
+  return comp;
+}
+  
+
+/* blxComplement.c
+ * 
+ * Just complement of a IUPAC character string
+ * 
+ * Note that it overwrites calling string!!!! (revcomp doesn't)
+ */
+void blxComplement(char *seq)
+{
+  char *fwdp;
+  long  pos;
+
+  if (seq == NULL)
+    return ;
+
+  fwdp = seq;
+  for (pos = 0; pos < (int)strlen(seq); pos++)
+    {
+      *fwdp = complementChar(*fwdp, NULL);
+      fwdp++;
+    }
+
+  *fwdp = '\0';
+
+  return ;
+}
+  
+
+
diff --git a/seqtoolsUtils/utilities.cpp b/seqtoolsUtils/utilities.cpp
new file mode 100644
index 0000000..cc3e13d
--- /dev/null
+++ b/seqtoolsUtils/utilities.cpp
@@ -0,0 +1,5283 @@
+/*  File: utilities.c
+ *  Author: Gemma Barson, 2010-01-05
+ *  Copyright (c) 2010 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: See utilities.h
+ *----------------------------------------------------------------------------
+ */
+
+#include <seqtoolsUtils/utilities.hpp>
+#include <string.h>
+#include <ctype.h>
+#include <math.h>
+#include <algorithm>
+#include <stdlib.h>
+#include <stdio.h>
+#include <errno.h>
+#include <sys/utsname.h>
+#include <gbtools/gbtools.hpp>
+
+using namespace std;
+
+
+#ifdef HAVE_EXECINFO_H
+#include <execinfo.h>
+#endif
+
+#ifdef DEBUG
+#include <gdk/gdkx.h>
+#endif
+
+#define SEQTOOLS_TOOLBAR_NAME   "SeqtoolsToolbarName"
+#define DEFAULT_PFETCH_WINDOW_WIDTH_FRACTION          0.47
+#define DEFAULT_PFETCH_WINDOW_HEIGHT_FRACTION         0.4
+
+
+/* Macros to test a char to see if it's a iupac dna/peptide code (see iupac.h
+ * for details of what the codes are). */
+#define ISIUPACDNA(BASE) \
+(((BASE) == 'a' || (BASE) == 'c'|| (BASE) == 'g' || (BASE) == 't'       \
+|| (BASE) == 'u' || (BASE) == 'r'|| (BASE) == 'y' || (BASE) == 'm'    \
+|| (BASE) == 'k' || (BASE) == 'w'|| (BASE) == 's' || (BASE) == 'b'    \
+|| (BASE) == 'd' || (BASE) == 'h'|| (BASE) == 'v'                     \
+|| (BASE) == 'n' || (BASE) == SEQUENCE_CHAR_GAP))
+
+#define ISIUPACPEPTIDE(PEPTIDE) \
+(((PEPTIDE) == 'A' || (PEPTIDE) == 'B'|| (PEPTIDE) == 'C' || (PEPTIDE) == 'D'       \
+|| (PEPTIDE) == 'E' || (PEPTIDE) == 'F'|| (PEPTIDE) == 'G' || (PEPTIDE) == 'H'    \
+|| (PEPTIDE) == 'I' || (PEPTIDE) == 'K'|| (PEPTIDE) == 'L' || (PEPTIDE) == 'M'    \
+|| (PEPTIDE) == 'N' || (PEPTIDE) == 'P'|| (PEPTIDE) == 'Q' || (PEPTIDE) == 'R'    \
+|| (PEPTIDE) == 'S' || (PEPTIDE) == 'T'|| (PEPTIDE) == 'U' || (PEPTIDE) == 'V'    \
+|| (PEPTIDE) == 'W' || (PEPTIDE) == 'X'|| (PEPTIDE) == 'Y' || (PEPTIDE) == 'Z'    \
+|| (PEPTIDE) == SEQUENCE_CHAR_STOP || (PEPTIDE) == SEQUENCE_CHAR_GAP))
+
+
+/* Globals */
+gboolean g_printCachedOnly = FALSE;
+PrintScaleType g_printScaleType = PRINT_FIT_BOTH;
+
+
+/* A struct used to record warning/error messages */
+typedef struct _BlxMessage
+  {
+    char *text;
+    time_t timestamp;
+    GLogLevelFlags logLevel;
+  } BlxMessage;
+
+
+static gboolean        widgetGetDrawableValid(GtkWidget *widget);
+static void            widgetSetDrawableValid(GtkWidget *widget, const gboolean valid);
+static CallbackData*   widgetGetCallbackData(GtkWidget *widget);
+static void            displayMessageAsPopup(const gchar *message, GLogLevelFlags log_level, const char *titlePrefix, GtkWindow *parent, GtkStatusbar *statusBar);
+static void            displayMessageAsList(GSList *messageList, const char *titlePrefix, const gboolean bringToFront);
+static BlxMessage*     createBlxMessage(const char *text, const GLogLevelFlags logLevel);
+static void            destroyBlxMessage(BlxMessage **blxMessage);
+static GSList**        getMessageList();
+void                   destroyMessageList();
+static char*           blxMessageGetDisplayText(const BlxMessage *msg, const gboolean incTimestamp);
+static void            addMessagesToBuffer(GSList *messageList, GtkTextBuffer *textBuffer, GtkTextTag *normalTag, GtkTextTag *highlightTag);
+static gboolean        getUseScrolledMessages();
+static void            setUseScrolledMessages(const gboolean newValue);
+static gboolean        onSetUseScrolledMessages(GtkWidget *button, const gint responseId, gpointer data);
+static gboolean        onSetUsePopupMessages(GtkWidget *button, const gint responseId, gpointer data);
+static const char*     getDialogIcon(GLogLevelFlags log_level);
+static void            printMessageToStatusbar(const gchar *message, gpointer data);
+static void            blxColorOverrideColor(BlxColor *blxColor, 
+                                             const gboolean selected, 
+                                             const gboolean usePrintColors, 
+                                             const GdkColor *color) ;
+
+
+/***********************************************************
+ *                       Widgets                           * 
+ ***********************************************************/
+
+
+/* Functions to get/set/destroy a GdkDrawable in a widget property, if a different drawable
+ * than the window is required to be drawn to. The main purpose of this is for printing
+ * (and only widgets that have this drawable set are printed) */
+static void onDestroyCustomWidget(GtkWidget *widget)
+{
+  GdkDrawable *drawable = widgetGetDrawable(widget);
+  if (drawable)
+    {
+      g_object_unref(drawable);
+      drawable = NULL;
+      g_object_set_data(G_OBJECT(widget), "drawable", NULL);
+    }
+  
+  CallbackData *callbackData = widgetGetCallbackData(widget);
+  if (callbackData)
+    {
+      delete callbackData;
+      g_object_set_data(G_OBJECT(widget), "callbackData", NULL);
+    }
+}
+
+GdkDrawable* widgetGetDrawable(GtkWidget *widget)
+{
+  GdkDrawable *result = widget ? (GdkDrawable*)(g_object_get_data(G_OBJECT(widget), "drawable")) : NULL;
+
+  /* if the drawable has been marked as invalid, return null */
+  if (result && !widgetGetDrawableValid(widget))
+    result = NULL;
+  
+  return result;
+}
+
+static GdkDrawable* widgetGetDrawableAllowInvalid(GtkWidget *widget)
+{
+  GdkDrawable *result = widget ? (GdkDrawable*)(g_object_get_data(G_OBJECT(widget), "drawable")) : NULL;
+  return result;
+}
+
+void widgetSetDrawable(GtkWidget *widget, GdkDrawable *drawable)
+{
+  if (widget)
+    { 
+      /* Delete the old one first, if there is one */
+      GdkDrawable *oldDrawable = widgetGetDrawableAllowInvalid(widget);
+      if (oldDrawable)
+        {
+          g_object_unref(oldDrawable);
+          oldDrawable = NULL;
+        }
+
+      g_object_set_data(G_OBJECT(widget), "drawable", drawable);
+      g_signal_connect(G_OBJECT(widget), "destroy", G_CALLBACK(onDestroyCustomWidget), NULL);
+
+      widgetSetDrawableValid(widget, TRUE);
+    }
+}
+
+
+/* Call this function to clear the cached drawable for the widget. This means that the
+ * next time that expose is called, the bitmap will be redrawn from scratch. */
+void widgetClearCachedDrawable(GtkWidget *widget, gpointer data)
+{  
+  /* Don't delete the drawable; instead, mark it as invalid so that we
+   * can re-use it (because lots of create/delete of drawables can cause 
+   * XID reuse errors */
+  widgetSetDrawableValid(widget, FALSE);
+}
+
+
+static void widgetSetDrawableValid(GtkWidget *widget, const gboolean valid)
+{
+  g_object_set_data(G_OBJECT(widget), "drawableValid", GINT_TO_POINTER(valid));
+}
+
+static gboolean widgetGetDrawableValid(GtkWidget *widget)
+{
+  return GPOINTER_TO_INT(g_object_get_data(G_OBJECT(widget), "drawableValid"));
+}
+
+
+/* Recursively call the given function on this widget and any child widgets */
+void callFuncOnAllChildWidgets(GtkWidget *widget, gpointer data)
+{
+  GtkCallback func = (GtkCallback)data;
+  func(widget, NULL);
+  
+  if (GTK_IS_CONTAINER(widget))
+    gtk_container_foreach(GTK_CONTAINER(widget), callFuncOnAllChildWidgets, data);
+}
+
+
+/* Functions to get/set a boolean property that is set to true if this widget has
+ * been hidden by the user. (We can't just use gtk_widget_hide because we do a 
+ * show_all when we remove and re-add widgets to the parent when we toggle strands. 
+ * Note that if the property is not set the result is FALSE, so by default widgets
+ * are not hidden. */
+gboolean widgetGetHidden(GtkWidget *widget)
+{
+  gboolean result = FALSE;
+  
+  if (widget)
+    {   
+      result = (gboolean)GPOINTER_TO_INT(g_object_get_data(G_OBJECT(widget), "hidden"));
+    }
+  
+  return result;
+}
+
+void widgetSetHidden(GtkWidget *widget, const gboolean hidden)
+{
+  if (widget)
+    {
+      /* Set the property */
+      g_object_set_data(G_OBJECT(widget), "hidden", GINT_TO_POINTER((gint)hidden));
+      
+      /* Show/hide the widget */
+      if (hidden)
+        {
+          gtk_widget_hide_all(widget);
+        }
+      else
+        {
+          gtk_widget_show_all(widget);
+        }       
+    }
+}
+
+
+/* Hides the given widget if it has been set as hidden by the user. Recurses
+ * over all children. */
+void hideUserHiddenWidget(GtkWidget *widget, gpointer callbackData)
+{
+  if (widgetGetHidden(widget))
+    {
+      gtk_widget_hide_all(widget);
+    }
+  
+  if (GTK_IS_CONTAINER(widget))
+    {
+      gtk_container_foreach(GTK_CONTAINER(widget), hideUserHiddenWidget, NULL);
+    }
+}
+
+
+/* Create a label with the given properties. If 'showWhenPrinting' is false 
+ * this label will not appear when printing */
+GtkWidget* createLabel(const char *text, 
+                       const gdouble xalign,
+                       const gdouble yalign,
+                       const gboolean ellipsize,
+                       const gboolean enableCopyPaste,
+                       const gboolean showWhenPrinting)
+{
+  GtkWidget *label = NULL;
+  
+  if (text)
+    {
+      label = gtk_widget_new(GTK_TYPE_LABEL, 
+                             "label", text, 
+                             "xalign", xalign,
+                             "yalign", yalign,
+                             "selectable", enableCopyPaste,
+                             NULL);
+    }
+  else
+    {
+      label = gtk_widget_new(GTK_TYPE_LABEL, 
+                             "xalign", xalign, 
+                             "yalign", yalign, 
+                             "selectable", enableCopyPaste,
+                             NULL);
+    }
+
+  if (ellipsize)
+    gtk_label_set_ellipsize(GTK_LABEL(label), PANGO_ELLIPSIZE_END);
+
+  gtk_misc_set_padding(GTK_MISC(label), DEFAULT_LABEL_X_PAD, 0);
+  
+  GtkWidget *parent = NULL;
+  
+  if (label && showWhenPrinting)
+    {
+      /* Connect to the expose event handler that will create the drawable object required for printing */
+      parent = gtk_event_box_new();
+      gtk_container_add(GTK_CONTAINER(parent), label);
+      g_signal_connect(G_OBJECT(label), "expose-event", G_CALLBACK(onExposePrintable), NULL);
+    }
+
+  return parent ? parent : label;
+}
+
+
+/* We use labels that might be GtkLabel widgets or might be
+ * a GtkLabel inside a GtkEventBox. This checks for the latter
+ * case and returns the actual label; otherwise it returns the
+ * original widget. */
+GtkWidget* getLabelWidget(GtkWidget *widget)
+{
+  GtkWidget *label = widget;
+  
+  if (GTK_IS_EVENT_BOX(widget))
+    {
+      GList *childItem = gtk_container_get_children(GTK_CONTAINER(widget));
+      label = GTK_WIDGET(childItem->data);
+    }
+  
+  return label;
+}
+
+
+/* Set the font for a widget. If the widget is a GtkEventBox then
+ * we actually want to set the font on its child rather than the
+ * event box itself, so this function takes care of that. */
+void labelSetFont(GtkWidget *widget, PangoFontDescription *fontDesc)
+{
+  GtkWidget *label = getLabelWidget(widget);
+  gtk_widget_modify_font(label, fontDesc);
+}
+
+
+/* Expose-event handler for labels/entrys that are required to be shown during printing. */
+gboolean onExposePrintable(GtkWidget *widget, GdkEventExpose *event, gpointer callbackData)
+{
+  if (!widget || !(GTK_IS_LABEL(widget) || GTK_IS_ENTRY(widget)))
+    {
+      g_critical("Invalid widget type for printable label/text-entry [%p]\n", widget);
+    }
+
+  /* Get the window. (Labels don't have their own so get the parent's window) */
+  GtkWidget *parent = gtk_widget_get_parent(widget);
+
+  /* Create a pixmap and store it in the widget properties. (Only widgets with
+   * a drawable are shown in print output.) */
+  createBlankSizedPixmap(parent, parent->window, widget->allocation.width, widget->allocation.height);
+
+  return FALSE; /* let the default handler continue */
+}
+
+
+/* Set the given widget's background to the given color, if given (does nothing otherwise) */
+void blxSetWidgetColor(GtkWidget* widget, const char *colorName)
+{
+  if (widget && colorName)
+    {
+      GdkColor color;
+
+      if (gdk_color_parse(colorName, &color))
+        gtk_widget_modify_bg(widget, GTK_STATE_NORMAL, &color);
+      else
+        g_warning("Could not parse colour '%s'\n", colorName);
+    }
+}
+
+
+/* Find the position of the left edge of the source widget wrt the dest widget and offset 
+ * the event by this amount, then propagate the event to the dest widget. This allows us
+ * to get the correct x coord on the parent widget for a click on the child widget. */
+void propagateEventButton(GtkWidget *srcWidget, GtkWidget *destWidget, GdkEventButton *event)
+{
+  int xOffset;
+  gtk_widget_translate_coordinates(srcWidget, destWidget, 0, 0, &xOffset, NULL);
+  
+  event->x += xOffset;
+  
+  gtk_propagate_event(destWidget, (GdkEvent*)event);
+}
+
+
+/* Utility to translate the coords in the given event from coords relative to the source
+ * widget to coords relative to the destination widget, and then propagate the event to the
+ * dest widget. */
+void propagateEventMotion(GtkWidget *srcWidget, GtkWidget *destWidget, GdkEventMotion *event)
+{
+  /* Find the position of 0,0 of the source widget wrt the dest widget and offset by this amount. */
+  int xOffset, yOffset;
+  gtk_widget_translate_coordinates(srcWidget, destWidget, 0, 0, &xOffset, &yOffset);
+  
+  event->x += xOffset;
+  event->y += yOffset;  
+  
+  gtk_propagate_event(destWidget, (GdkEvent*)event);
+}
+
+/***********************************************************
+ *                       Misc utils                        * 
+ ***********************************************************/
+
+/* Return true if the given character is a delimiter */
+gboolean isDelimiter(const char c)
+{
+  return (c == '\"' || c == '\'');
+}
+
+
+/* Remove any delimiters (" and ') surrounding the given text.
+ * Modifies the text in place and returns the same string. */
+char* removeDelimiters(char *text)
+{
+  /* Remove enclosing quotes */
+  if (text)
+    {
+      char *c = text;
+      
+      if (isDelimiter(*c))
+        {
+          text = g_strdup(c+1);
+          g_free(c);
+          c = text;
+        }
+      
+      c = &text[strlen(text) - 1];
+      
+      if (isDelimiter(*c))
+        {
+          *c = '\0';
+        }
+    }
+
+  return text;
+}
+
+
+/* Get a semi-colon-separated list of strings from a key file and place
+ * them into an array as GQuarks. Returns null if the group/key is not found.
+ * The given error value can be non-null, in which case any new error will be appended */
+GArray* keyFileGetCsv(GKeyFile *keyFile, const char *group, const char *key, GError **error)
+{
+  GArray *result = NULL;
+  GError *tmpError = NULL;
+  char *fetchStr = g_key_file_get_string(keyFile, group, key, &tmpError);
+
+  if (fetchStr)
+    {
+      result = g_array_sized_new(FALSE, TRUE, sizeof(GQuark), 1);
+
+      char **tokens = g_strsplit(fetchStr, ";", -1);   /* -1 means do all tokens. */
+      char **token = tokens;
+
+      while (token && *token && **token)
+        {
+          /* Remove any leading/trailing whitespace and delimiters */
+          *token = g_strchug(g_strchomp(*token));
+          *token = removeDelimiters(*token);
+          
+          /* Add it as a quark to the array */
+          GQuark quark = g_quark_from_string(*token);
+          result = g_array_append_val(result, quark);
+          ++token;
+        }
+      
+      g_strfreev(tokens);
+      g_free(fetchStr);
+    }
+
+  if (tmpError && error && *error)
+    postfixError(*error, "; %s", tmpError->message);
+  else if (tmpError)
+    g_propagate_error(error, tmpError);
+
+  return result;
+}
+
+
+/* Utility to free the given list of  strings and (if the option is true) all
+ * of its data items as well. */
+void freeStringList(GList **stringList, const gboolean freeDataItems)
+{
+  if (stringList && *stringList)
+    {
+      if (freeDataItems)
+        {
+          GList *item = *stringList;
+          for ( ; item; item = item->next)
+            {
+              char *strData = (char*)(item->data);
+              g_free(strData);
+              item->data = NULL;
+            }
+        }
+      
+      g_list_free(*stringList);
+      *stringList = NULL;
+    }
+}
+
+
+/***********************************************************
+ *                       Ranges/values                     * 
+ ***********************************************************/
+
+IntRange::IntRange(const IntRange &range)
+{
+  if (range.isSet())
+    {
+      m_min = range.min();
+      m_max = range.max();
+      m_min_is_set = true;
+      m_max_is_set = true;
+    }
+}
+
+IntRange::IntRange(const IntRange *range)
+{
+  if (range && range->isSet())
+    {
+      m_min = range->min();
+      m_max = range->max();
+      m_min_is_set = true;
+      m_max_is_set = true;
+    }
+}
+
+IntRange::IntRange(const int val1, const int val2) : m_min_is_set(true), m_max_is_set(true)
+{
+  if (val1 < val2)
+    {
+      m_min = val1;
+      m_max = val2;
+    }
+  else
+    {
+      m_min = val2;
+      m_max = val1;
+    }
+}
+
+bool IntRange::isSet() const
+{
+  return m_min_is_set && m_max_is_set;
+}
+
+/* Utilities to return the "start" which is the minimum coord if !rev or the max if rev. The result
+ * is negated if "negate" is true. */
+int IntRange::start(const bool rev, const bool negate) const
+{
+  int result = 0;
+
+  if (rev && m_max_is_set)
+    {
+      result = negate ? m_max * -1 : m_max;
+    }
+  else if (m_min_is_set)
+    {
+      result = negate ? m_min * -1 : m_min;
+    }
+  else
+    {
+      g_warn_if_reached();
+    }
+
+  return result;
+}
+
+int IntRange::end(const bool rev, const bool negate) const
+{
+  int result = 0;
+
+  if (rev && m_min_is_set)
+    {
+      result = negate ? m_min * -1 : m_min;
+    }
+  else if (m_max_is_set)
+    {
+      result = negate ? m_max * -1 : m_max;
+    }
+  else
+    {
+      g_warn_if_reached();
+    }
+
+  return result;
+}
+
+/* Utilities to return the min and max values. If inclusive is true then return the max value
+ * plus one if forward or the min value minus one if reversed (this is used when drawing from 
+ * left to right to draw to the left edge of the next base) */
+int IntRange::min(const bool inclusive, const bool rev) const
+{
+  int result = 0;
+
+  if (m_min_is_set)
+    {
+      result = m_min;
+
+      if (inclusive && rev)
+        result = m_min - 1;
+    }
+  else
+    {
+      g_warn_if_reached();
+    }
+
+  return result;
+}
+
+int IntRange::max(const bool inclusive, const bool rev) const
+{
+  int result = 0;
+
+  if (m_max_is_set)
+    {
+      result = m_max;
+
+      if (inclusive && !rev)
+        result = m_max + 1;
+    }
+  else
+    {
+      g_warn_if_reached();
+    }
+
+  return result;
+}
+
+void IntRange::reset()
+{
+  m_min = 0;
+  m_max = 0;
+  m_min_is_set = false;
+  m_max_is_set = false;
+}
+
+void IntRange::set(const int val1, const int val2)
+{
+  if (val1 < val2)
+    {
+      m_min = val1;
+      m_max = val2;
+    }
+  else
+    {
+      m_min = val2;
+      m_max = val1;
+    }
+
+  m_min_is_set = true;
+  m_max_is_set = true;
+}
+
+void IntRange::set(const IntRange &range)
+{
+  if (range.isSet())
+    {
+      m_min = range.min();
+      m_max = range.max();
+
+      m_min_is_set = true;
+      m_max_is_set = true;
+    }
+}
+
+void IntRange::set(const IntRange *range)
+{
+  if (range)
+    set(*range);
+}
+
+bool IntRange::setMin(const int val)
+{
+  bool changed = false;
+
+  if (!m_min_is_set || m_min != val)
+    {
+      m_min = val;
+      m_min_is_set = true;
+      changed = true;
+    }
+
+  return changed;
+}
+
+bool IntRange::setMax(const int val)
+{
+  bool changed = false;
+
+  if (!m_max_is_set || m_max != val)
+    {
+      m_max = val;
+      m_max_is_set = true;
+      changed = true;
+    }
+
+  return changed;
+}
+
+/* Utility to bounds-limit this range to within the given range. If maintainLen is true, maintains
+ * the length of the range if possible by shifting the range. */
+void IntRange::boundsLimit(const IntRange* const limit, const gboolean maintainLen)
+{
+  const int len = length();
+  
+  if (!m_min_is_set || m_min < limit->min())
+    {
+      setMin(limit->min());
+      
+      if (maintainLen)
+        {
+          setMax(m_min + len);
+        }
+    }
+  
+  if (!m_max_is_set || m_max > limit->max())
+    {
+      setMax(limit->max());
+      
+      if (maintainLen)
+        {
+          setMin(m_max - len);
+
+          /* If limit is shorter than range, we'll have gone lower than the min again */
+          boundsLimitValue(&m_min, limit);
+       }
+    }
+  
+  boundsLimitValue(&m_max, limit);
+}
+
+
+/* Utility to return the length of the given range */
+int IntRange::length() const
+{
+  return (m_max - m_min + 1);
+}
+
+/* Utility to return the centre value of the given range (rounded down if an odd number) */
+int IntRange::centre() const
+{
+  return m_min + ((m_max - m_min) / 2);
+}
+
+/* Make sure max and min are the correct way round */
+void IntRange::sort(const bool forwards)
+{
+  sortValues(&m_min, &m_max, forwards);
+}
+
+/* Utility to set the given range to the given length, centred on the given coord */
+void centreRangeOnCoord(IntRange *range, const int coord, const int length)
+{
+  range->set(coord - (length / 2), range->min() + length);
+}
+
+
+/* Simple utility to determine whether the given value is within the given range.
+ * Returns false if the given value is an unset int or the given range is null */
+gboolean valueWithinRange(const int value, const IntRange* const range)
+{
+  return (range != NULL && value >= range->min() && value <= range->max());
+}
+
+
+/* Return true if two IntRanges overlap */
+gboolean rangesOverlap(const IntRange* const range1, const IntRange* const range2)
+{
+  return (range1->min() <= range2->max() && range1->max() >= range2->min());
+}
+
+/* Return true if two IntRanges are adjacent */
+gboolean rangesAdjacent(const IntRange* const range1, const IntRange* const range2)
+{
+  return (range1->min() == range2->max() + 1 || range2->min() == range1->max() + 1);
+}
+
+/* Return true if two IntRanges are equal */
+gboolean rangesEqual(const IntRange* const range1, const IntRange* const range2)
+{
+  return (range1->min() == range2->min() && range1->max() == range2->max());
+}
+
+
+/* Utility to bounds-limit the given value to within the given range */
+void boundsLimitValue(int *value, const IntRange* const range)
+{
+  if (*value < range->min())
+    {
+      *value = range->min();
+    }
+  
+  if (*value > range->max())
+    {
+      *value = range->max();
+    }
+}
+
+
+/* Return true if the given point is inside the given rect */
+gboolean pointInRect(const int x, const int y, const GdkRectangle* const rect)
+{
+  gboolean result = FALSE;
+  
+  if (x >= rect->x && x <= rect->x + rect->width && y >= rect->y && y <= rect->y + rect->height)
+    {
+      result = TRUE;
+    }
+  
+  return result;
+}
+/* Utility to calculate how many digits are in an integer (including the '-'
+ * sign if the integer is negative) */
+int numDigitsInInt(int val)
+{
+  int count = 0;
+
+  if (val == 0)
+    {
+      count = 1;
+    }
+  else
+    {
+      if (val < 0)
+        {
+          /* Add one for the '-' sign, then treat it as a positive number */
+          ++count;
+          val *= -1;
+        }
+
+      while (val > 0)
+        {
+          ++count;
+          val /= 10;
+        }
+    }
+      
+  return count;
+}
+
+
+/***********************************************************
+ *                       Misc                              * 
+ ***********************************************************/
+
+/* Returns true if the given button event position is inside the given rectangle
+ * (expands the rectangle to the given minimum width if it is less than this) */
+gboolean clickedInRect(GdkEventButton *event, GdkRectangle *rect, const int minWidth)
+{
+  gboolean result = event->x >= rect->x && event->x <= rect->x + rect->width + minWidth;
+  result &= event->y >= rect->y && event->y <= rect->y + rect->height;
+  
+  return result;
+}
+
+
+/* Determine (or give our best guess) the sequence type of a sequence, based on the characters it
+ * contains. Returns BLXSEQ_DNA for nucleotide sequences or BLXSEQ_PEPTIDE for peptide sequences. */
+BlxSeqType determineSeqType(char *seq, GError **error)
+{
+    const int lenToSearch = 300;
+    const char *aminos      = "ABCDEFGHIKLMNPQRSTVWXYZ*";
+    const char *primenuc    = "ACGTUN";
+    const char *protonly    = "EFIPQZ";
+
+    /* Simplified version of Sean Eddy's */
+
+    int  pos;
+    char c;
+    int  po = 0;                        /* count of protein-only */
+    int  nt = 0;                        /* count of t's */
+    int  nu = 0;                        /* count of u's */
+    int  na = 0;                        /* count of nucleotides */
+    int  aa = 0;                        /* count of amino acids */
+    int  no = 0;                        /* count of others */
+  
+    /* Look at the first lenToSearch characters
+     */
+    for (pos = 0; seq[pos] && pos < lenToSearch; pos++)
+    {
+        c = toupper(seq[pos]);
+
+        if (strchr(protonly, c)) 
+            po++;
+        else if (strchr(primenuc, c)) {
+            na++;
+            if (c == 'T') nt++;
+            else if (c == 'U') nu++;
+        }
+        else if (strchr(aminos, c)) 
+            aa++;
+        else if (isalpha(c)) 
+            no++;
+    }
+
+    if (po == 0 && na == 0 && aa == 0 && no == 0)
+      g_set_error(error, SEQTOOLS_ERROR, SEQTOOLS_ERROR_SEQ_TYPE, "No valid DNA or amino-acid characters found. (Searched the first %d characters.)\n", lenToSearch);
+    
+    if (po > 0) 
+      return BLXSEQ_PEPTIDE;
+    else if (na > aa) 
+      return BLXSEQ_DNA;
+    else
+      return BLXSEQ_PEPTIDE;
+} /* determineSeqType */
+
+
+/* Use this routine to add -install in programs that use Dotter */
+void argvAdd(int *argc, char ***argv, const char *s)
+{
+    char **v;
+    int i;
+
+    v = (char **)malloc(sizeof(char *)*(*argc+2));
+
+    /* Copy argv */
+    for (i = 0; i < (*argc); i++)
+        v[i] = (*argv)[i];
+
+    /* Add s */
+    v[*argc] = (char *)malloc(strlen(s)+1);
+    strcpy(v[*argc], s);
+
+    (*argc)++;
+
+    /* Terminator - ANSI C standard */
+    v[*argc] = 0;
+
+    /* free(*argv); */   /* Too risky */
+    
+    *argv = v;
+}
+
+
+char* getSystemErrorText()
+{
+  char *result = NULL;
+
+#ifdef SUN
+  /* horrible hack for Sunos/Macs(?) which are not standard C compliant */
+  result = g_strdup_printf(SYSERR_FORMAT, errno, sys_errlist[errno]) ;
+#elif defined(MACINTOSH)
+  result = g_strdup_printf(SYSERR_FORMAT, errno) ;
+#else
+  result = g_strdup_printf(SYSERR_FORMAT, errno, strerror(errno)) ;
+#endif
+
+  return result;
+}
+  
+  
+/* Get the BlxStyle with the given name. Returns null and sets the error if 
+ * we expected to find the name but didn't. The special-case input string "."
+ * means "value not set", so in this case we return NULL and don't set the error. */
+BlxStyle* getBlxStyle(const char *styleName, GSList *styles, GError **error)
+{
+  BlxStyle *result = NULL;
+
+  if (styleName && strcmp(styleName, ".") != 0)
+    {
+      GSList *item = styles;
+      
+      for ( ; item; item = item->next)
+        {
+          BlxStyle *style = (BlxStyle*)(item->data);
+          if (style && stringsEqual(style->styleName, styleName, FALSE))
+            {
+              result = style;
+              break;
+            }
+        }
+        
+      if (!result)
+        {
+          /* Only report the same missing style once */
+          static GSList *seenStyles = NULL;
+          GSList *item = seenStyles;
+          gboolean seen = FALSE;
+          for ( ; item && !seen; item = item->next)
+            {
+              seen = stringsEqual((char*)(item->data), styleName, FALSE);
+            }
+          
+          if (!seen)
+            {
+              seenStyles = g_slist_append(seenStyles, g_strdup(styleName));
+              g_set_error(error, SEQTOOLS_ERROR, SEQTOOLS_ERROR_NO_STYLE, "Requested style '%s' does not exist.\n", styleName);
+            }
+        }
+    }
+
+  return result;
+}
+
+/***********************************************************
+ *                       Colors                            * 
+ ***********************************************************/
+
+/* Creates a GdkColor from the given color string in hex format, e.g. "#00ffbe". Returns false
+ * and sets 'error' if there was a problem */
+gboolean getColorFromString(const char *colorStr, GdkColor *color, GError **error)
+{
+  gboolean ok = gdk_color_parse(colorStr, color);
+
+  if (ok)
+    {
+      gboolean failures[1];
+      gint numFailures = gdk_colormap_alloc_colors(gdk_colormap_get_system(), color, 1, TRUE, TRUE, failures);
+      
+      if (numFailures > 0)
+        {
+          ok = FALSE;
+        }
+    }
+
+  if (!ok)
+    {
+      g_set_error(error, SEQTOOLS_ERROR, 1, "Error parsing color string '%s'\n", colorStr);
+    }
+    
+  return ok;
+}
+
+
+/* Increase the brightness of a color by the given factor */
+static void increaseColorBrightness(const GdkColor* const origColor, const double factor, GdkColor *result)
+{
+  result->pixel = 0;
+  const int maxRgb = 65535;
+  
+//  int maxVal = origColor->red > origColor->green ? origColor->red : origColor->green;
+//  
+//  if (origColor->blue > maxVal)
+//    maxVal = origColor->blue;
+//  
+//  int offset = maxVal * (factor - 1);
+//
+//  result->red = ((int)origColor->red + offset > maxRgb)   ? maxRgb : (origColor->red + offset);
+//  result->green = ((int)origColor->green + offset > maxRgb) ? maxRgb : (origColor->green + offset);
+//  result->blue        = ((int)origColor->blue + offset > maxRgb)  ? maxRgb : (origColor->blue + offset);
+
+  int newRed = origColor->red * factor;
+  int newGreen = origColor->green * factor;
+  int newBlue = origColor->blue * factor;
+  
+  gboolean bustMax = FALSE;
+
+  if (newRed > maxRgb)
+    {
+      bustMax = TRUE;
+      newRed = maxRgb;
+    }
+
+  if (newGreen > maxRgb)
+    {
+      bustMax = TRUE;
+      newGreen = maxRgb;
+    }
+
+  if (newBlue > maxRgb)
+    {
+      bustMax = TRUE;
+      newBlue = maxRgb;
+    }
+  
+  if (bustMax)
+    {
+      const int offset = maxRgb * (factor - 1);
+      newRed = (origColor->red + offset > maxRgb) ? maxRgb : origColor->red + offset;
+      newGreen = (origColor->green + offset > maxRgb) ? maxRgb : origColor->green + offset;
+      newBlue = (origColor->blue + offset > maxRgb) ? maxRgb : origColor->blue + offset;
+    }
+  
+  result->red = newRed;
+  result->green = newGreen;
+  result->blue = newBlue;
+  
+  gboolean failures[1];
+  gint numFailures = gdk_colormap_alloc_colors(gdk_colormap_get_system(), result, 1, TRUE, TRUE, failures);
+  
+  if (numFailures > 0)
+    {
+      g_warning("Error calculating highlight color; using original color instead (RGB=%d %d %d).", origColor->red, origColor->green, origColor->blue);
+      result->pixel = origColor->pixel;
+      result->red = origColor->red;
+      result->green = origColor->green;
+      result->blue = origColor->blue;
+    }
+}
+
+
+/* Reduce the brightness of a color by the given factor (e.g. 0.5 for half brightness) */
+static void reduceColorBrightness(const GdkColor* const origColor, const double factor, GdkColor *result)
+{
+  result->pixel = 0;
+  result->red = origColor->red * factor;
+  result->green = origColor->green * factor;
+  result->blue = origColor->blue * factor;
+  
+  gboolean failures[1];
+  gint numFailures = gdk_colormap_alloc_colors(gdk_colormap_get_system(), result, 1, TRUE, TRUE, failures);
+  
+  if (numFailures > 0)
+    {
+      g_warning("Error calculating highlight color; using original color instead (RGB=%d %d %d).", origColor->red, origColor->green, origColor->blue);
+      result->pixel = origColor->pixel;
+      result->red = origColor->red;
+      result->green = origColor->green;
+      result->blue = origColor->blue;
+    }
+}
+
+
+/* Increase/decrease color brightness by given factor */
+void adjustColorBrightness(const GdkColor* const origColor, const double factor, GdkColor *result)
+{
+  if (factor > 1)
+    increaseColorBrightness(origColor, factor, result);
+  else if (factor < 1)
+    reduceColorBrightness(origColor, factor, result);
+}
+
+
+/* Utility to take a gdk color and return a slightly darker shade of it, for higlighting
+ * things of that color when they are selected. */
+void getSelectionColor(const GdkColor* const origColor, GdkColor *result)
+{
+  const double factor = 0.8;
+  adjustColorBrightness(origColor, factor, result);
+}
+
+
+/* Utility to take a gdk color and return a greyscale version of it */
+void convertToGrayscale(const GdkColor* const origColor, GdkColor *result)
+{
+  result->red = result->green = result->blue =
+   ((11 * origColor->red) + (16 * origColor->green) + (5 * origColor->blue)) / 32;
+   
+  gboolean failures[1];
+  gint numFailures = gdk_colormap_alloc_colors(gdk_colormap_get_system(), result, 1, TRUE, TRUE, failures);
+  
+  if (numFailures > 0)
+    {
+      g_warning("Error calculating greyscale color (RGB=%d %d %d).", origColor->red, origColor->green, origColor->blue);
+      
+      /* Set it to black, for want of something better to do... */
+      result->pixel = 0;
+      result->red = 0;
+      result->green = 0;
+      result->blue = 0;
+    }
+
+}
+
+
+/* Utility to take a gdk color and return a much darker shade of it, for use as a drop-shadow */
+void getDropShadowColor(const GdkColor* const origColor, GdkColor *result)
+{
+  const double factor = 0.3;
+  adjustColorBrightness(origColor, factor, result);
+}
+
+
+/* Return a pointer to the BlxColor with the given id */
+BlxColor* getBlxColor(GArray *defaultColors, const int colorId)
+{
+  BlxColor *result = &g_array_index(defaultColors, BlxColor, colorId);
+
+  if (!result)
+    {
+      g_warning("Color ID %d not found in the default colors array.\n", colorId);
+    }
+  
+  return result;
+}
+
+
+/* Lookup the BlxColor with the given id in the given hash table and return a 
+ * pointer to the gdk color with the given properties */
+GdkColor* getGdkColor(const int colorId, GArray *defaultColors, const gboolean selected, const gboolean usePrintColors)
+{
+  GdkColor *result = NULL;
+  
+  BlxColor *blxColor = getBlxColor(defaultColors, colorId);
+  
+  if (blxColor)
+    {
+      if (usePrintColors)
+        {
+          result = selected ? &blxColor->printSelected : &blxColor->print;
+        }
+      else
+        {
+          result = selected ? &blxColor->selected : &blxColor->normal;
+        }
+    }
+  else
+    {
+      g_warning("Error: requested invalid color ID %d", colorId);
+    }
+  
+  return result;
+}
+
+
+/* This basically does what gdk_color_to_string does, but that function isn't available in
+ * older versions of GDK... */
+char* convertColorToString(GdkColor *color)
+{
+  //  char *result = gdk_color_to_string(&widget->style->bg[GTK_STATE_NORMAL]);
+  //  return result;
+  
+  /* Need to make sure the color is allocated (otherwise the 'pixel' field may be zero) */
+  gboolean failures[1];
+  gdk_colormap_alloc_colors(gdk_colormap_get_system(), color, 1, TRUE, TRUE, failures);
+  
+  const int hexLen = 8; /* to fit a string of the format '#ffffff', plus the terminating character */
+  
+  char *result = (char*)g_malloc(sizeof(char) * hexLen);
+  sprintf(result, "#%x", color->pixel);
+  
+  return result;
+}
+
+
+/* Free all memory used by a BlxColor */
+void destroyBlxColor(BlxColor *blxColor)
+{
+  if (blxColor)
+    {
+      g_free(blxColor->name);
+      g_free(blxColor->desc);
+    }
+}
+
+/* Create a BlxColor. The result should be destroyed with destroyBlxColor. Returns
+ * NULL if there was any problem. If "selected" state colors are not passed, this function
+ * calculates a slightly darker shade of the normal color to use for when it is selected.
+ * Inserts the new color into the given list */
+void createBlxColor(GArray *defaultColors,
+                    int colorId,
+                    const char *name, 
+                    const char *desc, 
+                    const char *normalCol, 
+                    const char *printCol,
+                    const char *normalColSelected,
+                    const char *printColSelected)
+{
+  BlxColor *result = &g_array_index(defaultColors, BlxColor, colorId);
+  
+  result->transparent = FALSE;
+  GError *error = NULL;
+  
+  if (!normalCol)
+    {
+      result->transparent = TRUE;
+    }
+  else if (getColorFromString(normalCol, &result->normal, &error)) 
+    {
+      /* find a "selected" version of it, if not passed one */
+      if (normalColSelected)
+        {
+          if (!getColorFromString(normalColSelected, &result->selected, &error))
+            {
+              prefixError(error, "Error getting 'selected' color: using normal color instead. ");
+              reportAndClearIfError(&error, G_LOG_LEVEL_MESSAGE);
+              result->selected = result->normal;
+            }
+        }
+    else
+        {
+          getSelectionColor(&result->normal, &result->selected); 
+        }
+    
+    /* Parse the print color */
+    if (getColorFromString(printCol, &result->print, &error))
+      {
+        /* find a "selected" version of it, if not passed one */
+        if (printColSelected)
+          {
+            if (!getColorFromString(printColSelected, &result->printSelected, &error))
+              {
+                prefixError(error, "Error getting print color for selected items: using normal print color instead. ");
+                reportAndClearIfError(&error, G_LOG_LEVEL_MESSAGE);
+                result->printSelected = result->print;
+              }
+          }
+        else
+          {
+            getSelectionColor(&result->print, &result->printSelected); 
+          }
+        }
+      else
+        {
+        /* Error parsing the print color: use the normal color but give a warning */
+        prefixError(error, "Error getting print colors: using normal colors instead. ");
+        reportAndClearIfError(&error, G_LOG_LEVEL_MESSAGE);
+        result->print = result->normal;
+        result->printSelected = result->selected;
+        }
+    }
+  else
+    {
+      reportAndClearIfError(&error, G_LOG_LEVEL_WARNING);
+      delete result;
+      result = NULL;
+    }
+  
+  if (result)
+    {
+      /* Set the other properties */
+      result->name = g_strdup(name);
+      result->desc = g_strdup(desc);
+    }
+}
+
+
+/* Calculate how many pixels wide a base is */
+gdouble pixelsPerBase(const gint displayWidth, const IntRange* const displayRange)
+{
+  gdouble displayLen = (gdouble)(displayRange->max() - displayRange->min()) + 1;
+  return ((gdouble)displayWidth / displayLen);
+}
+
+
+/* Convert a base index to a coord within the given rectangle - the x coord if 
+ * horizontal is true, the y coord otherwise. Returns the number of pixels 
+ * to the coord from 0 at the left edge (or top edge, if vertical), including 
+ * any pixels up to the left/top edge of the rectangle. 
+ * 
+ * 'displayRev' should be passed as true if the display is reversed (i.e. if 
+ * values decrease from left-to-right/top-to-bottom). 
+ * 
+ * The result is clipped to lie within the rectangle if 'clip' is true */
+gdouble convertBaseIdxToRectPos(const gint dnaIdx, 
+                                const GdkRectangle* const rect, 
+                                const IntRange* const dnaDispRange,
+                                const gboolean horizontal,
+                                const gboolean displayRev,
+                                const gboolean clip)
+{
+  int baseIdx = invertCoord(dnaIdx, dnaDispRange, displayRev);
+  
+  gdouble numBasesFromEdge = (gdouble)(baseIdx - dnaDispRange->min()); /* 0-based index from edge */
+  
+  if (clip && numBasesFromEdge < 0)
+    {
+      numBasesFromEdge = 0;
+    }
+  
+  const int rectLength = horizontal ? rect->width : rect->height;
+  gdouble pixelsFromEdge = numBasesFromEdge * pixelsPerBase(rectLength, dnaDispRange);
+  
+  const int rectStart = horizontal ? rect->x : rect->y;
+  gdouble result = (gdouble)rectStart + pixelsFromEdge;
+  
+  if (clip && result > rectStart + rectLength)
+    {
+      result = rectStart + rectLength;
+    }
+  
+  return result;
+}
+
+
+/* Sorts the given values so that val1 is less than val2 if forwards is true,
+ * or the reverse if forwards is false. */
+void sortValues(int *val1, int *val2, gboolean forwards)
+{
+  if ((forwards && *val1 > *val2) || (!forwards && *val1 < *val2))
+    {
+      int temp = *val1;
+      *val1 = *val2;
+      *val2 = temp;
+    }
+}
+
+
+/* Returns the upper and lower extents of the query and subject sequence ranges in
+ * the given gap range. Any of the return values can be passed as NULL if they are not required. */
+void getCoordRangeExtents(CoordRange *range, int *qRangeMin, int *qRangeMax, int *sRangeMin, int *sRangeMax)
+{
+  if (qRangeMin)
+    *qRangeMin = min(range->qStart, range->qEnd);
+  
+  if (qRangeMax)
+    *qRangeMax = max(range->qStart, range->qEnd);
+  
+  if (sRangeMin)
+    *sRangeMin = min(range->sStart, range->sEnd);
+  
+  if (sRangeMax)
+    *sRangeMax = max(range->sStart, range->sEnd);
+}
+
+
+char convertBaseToCorrectCase(const char charToConvert, const BlxSeqType seqType)
+{
+  char result = (seqType == BLXSEQ_PEPTIDE) ? toupper(charToConvert) : tolower(charToConvert);
+  return result;
+}
+
+
+/* Utility to return the base at the given index in the given sequence. If
+ * 'complement' is true and seqType is DNA, the result is complemented.
+ * Returns ' ' if the index is out of range. */
+char getSequenceIndex(char *seq,
+                      const int qIdx, 
+                      const gboolean complement, 
+                      const IntRange* const seqRange,
+                      const BlxSeqType seqType)
+{
+  char result = ' ';
+  
+  if (qIdx >= seqRange->min() && qIdx <= seqRange->max())
+    {
+      char base = seq[qIdx - seqRange->min()];
+      base = convertBaseToCorrectCase(base, seqType);
+      
+      if (!complement || seqType == BLXSEQ_PEPTIDE)
+        result = base;
+      else
+        result = complementChar(base, NULL);
+    }
+  
+  return result;
+}
+
+
+/* Convert the given range of display coords to dna coords */
+void convertDisplayRangeToDnaRange(const IntRange* const displayRange, 
+                                   const BlxSeqType displaySeqType,
+                                   const int numFrames,
+                                   const gboolean displayRev,
+                                   const IntRange* const refSeqRange,
+                                   IntRange *result)
+{
+  const int q1 = convertDisplayIdxToDnaIdx(displayRange->min(), displaySeqType, 1, 1, numFrames, displayRev, refSeqRange); /* 1st base in 1st reading frame */
+  const int q2 = convertDisplayIdxToDnaIdx(displayRange->max(), displaySeqType, numFrames, numFrames, numFrames, displayRev, refSeqRange); /* last base in last frame */
+  result->set(q1, q2);
+}
+
+
+/***********************************************************
+ *			   IMPORTANT!!!			   
+ * The following two functions (convertDisplayIdxToDnaIdx and
+ * convertDnaIdxToDisplayIdx) are used extensively by Blixem
+ * and underpin all of its coordinate conversions. Be very careful
+ * when editing these functions - it is very difficult to
+ * change anything here and NOT mess anything up.
+ ***********************************************************/
+
+/* Given an index into the displayed sequence, a reading frame, and the base number within that
+ * reading frame, return the index into the DNA sequence that will give the equivalent DNA base.
+ * If the display sequence is a peptide sequence, it will convert the coord to a DNA coord. If the
+ * display is reversed, the display coord will be inverted. */
+int convertDisplayIdxToDnaIdx(const int displayIdx, 
+                              const BlxSeqType srcSeqType,
+                              const int frame, 
+                              const int baseNum, 
+                              const int numFrames,
+                              const gboolean displayRev,
+                              const IntRange* const refSeqRange)
+{
+  int dnaIdx = displayIdx;
+  int base = baseNum;
+  
+  if (srcSeqType == BLXSEQ_PEPTIDE)
+    {
+      /* Convert the input peptide coord to a dna coord */
+      dnaIdx = (displayIdx * numFrames) - numFrames + frame + base - 1;
+    }
+  
+  if (displayRev)
+    {
+      /* If the display is reversed, we need to invert the result. For example, if the 
+       * result is index '2' out of the range '12345', then we convert it to '4', which is the
+       * equivalent position in the range '54321'. */
+      dnaIdx = refSeqRange->max() - dnaIdx + refSeqRange->min();
+    }
+
+  return dnaIdx;
+}
+
+
+/* Given an index into a dna sequence and the reading frame, find the index into 
+ * the display sequence. Converts the index to a peptide index if displaying
+ * peptide sequences (Also returns the base number of the DNA base within the
+ * reading frame in this case (i.e. whether it's the 1st, 2nd or 3rd out of the 
+ * triplet). */
+int convertDnaIdxToDisplayIdx(const int dnaIdx, 
+                              const BlxSeqType displaySeqType,
+                              const int frame, 
+                              const int numFrames, 
+                              const gboolean displayRev,
+                              const IntRange* const dnaIdxRange,
+                              int *baseNum)
+{
+  int displayIdx = dnaIdx;
+  
+  const gboolean peptides = (displaySeqType == BLXSEQ_PEPTIDE);
+
+  const int direction = displayRev ? -1 : 1;
+  int base = peptides ? (dnaIdx - direction * (frame - 1)) % numFrames : 1;
+
+  if (base < 1)
+    base += numFrames;
+
+  /* If the display is reversed (i.e. showing increasing values from right-to-left),
+   * invert the index (i.e. as if it were the normal left-to-right index for this
+   * same position - for example, if the index is '4' out of the range '54321', convert
+   * it to '2', which is the equivalent position in the range '12345'. */
+  if (displayRev)
+    {
+      /* Invert the coord and base */
+      displayIdx = dnaIdxRange->max() - dnaIdx + dnaIdxRange->min();
+      base = numFrames - base + 1;
+    }
+
+  /* Convert from nucleotide to peptide coords */
+  if (peptides)
+    {
+      displayIdx = ceil((gdouble)(displayIdx - (frame - 1)) / (gdouble)numFrames);
+    }
+  
+  if (baseNum)
+    {
+      *baseNum = base;
+    }
+  
+  return displayIdx;
+}
+
+
+/* Get the start coord in the given display range, reversed as necessary if 'reverse' is true.
+ * Result is a coord in the DNA sequence - converts as necessary if the display range is in terms
+ * of peptide coords */
+int getStartDnaCoord(const IntRange* const displayRange, 
+                     const int frame,
+                     const BlxSeqType displaySeqType, 
+                     const gboolean displayRev, 
+                     const int numFrames,
+                     const IntRange* const refSeqRange)
+{
+  int result = displayRange->min();
+  
+  /* Convert the display coord to coords into the ref seq, which is a DNA sequence. We want
+   * the first base in the codon, if this is a peptide sequence. */
+  const int baseNum = 1;
+  result = convertDisplayIdxToDnaIdx(result, displaySeqType, frame, baseNum, numFrames, displayRev, refSeqRange);
+  
+  return result;
+}
+
+
+/* Get the end coord in the given display range, reversed as necessary if 'reverse' is true.
+ * Result is a coord in the DNA sequence - converts as necessary if the display range is in terms
+ * of peptide coords */
+int getEndDnaCoord(const IntRange* const displayRange, 
+                   const int frame,
+                   const BlxSeqType displaySeqType, 
+                   const gboolean displayRev, 
+                   const int numFrames,
+                   const IntRange* const refSeqRange)
+{
+  int result = displayRange->max();
+  
+  /* Convert the display coord to coords into the ref seq, which is a DNA sequence. We want
+   * the last base in the codon, if this is a peptide sequence. */
+  const int baseNum = numFrames;
+  result = convertDisplayIdxToDnaIdx(result, displaySeqType, frame, baseNum, numFrames, displayRev, refSeqRange);
+  
+  return result;
+}
+
+
+/* Returns true if the given (transparent) color has been overridden */
+gboolean blxColorOverridden(const BlxColor *blxColor, const gboolean selected, const gboolean usePrintColors)
+{
+  gboolean result = FALSE ;
+
+  if (usePrintColors)
+    {
+      if (selected)
+        {
+          result = blxColor->printSelected_overridden;
+        }
+      else
+        {
+          result = blxColor->print_overridden;
+        }
+    }
+  else
+    {
+      if (selected)
+        {
+          result = blxColor->selected_overridden;
+        }
+      else
+        {
+          result = blxColor->normal_overridden;
+        }
+    }
+
+  return result ;
+}
+
+
+/* Override a specific GdkColor in dest with a lighter/darker version of the same GdkColor in
+ * source. Returns true if successful, false otherwise. */
+gboolean blxColorOverrideTransparency(BlxColor *dest, 
+                                      const BlxColor *source, 
+                                      const gboolean lighten,
+                                      const gboolean selected,
+                                      const gboolean usePrintColors)
+{
+  gboolean success = FALSE ;
+
+  double factor = lighten ? 1.3 : 0.7;
+
+  /* Make a copy of the source color */
+  const GdkColor *sourceColor = blxColorGetColor(source, selected, usePrintColors) ;
+
+  if (sourceColor)
+    {
+      GdkColor *newColor = gdk_color_copy(sourceColor) ;
+
+      /* Adjust its brightness */
+      adjustColorBrightness(sourceColor, factor, newColor);
+
+      /* Set it in the destination blxcolor struct */
+      blxColorOverrideColor(dest, selected, usePrintColors, newColor);
+
+      /* The above does not take ownership of newColor so we have to free it */
+      gdk_color_free(newColor);
+
+      success = TRUE ;
+    }
+
+  return success ;
+}
+
+
+/* For the given BlxColor, set a pointer to the GdkColor that meets the given criteria */
+static void blxColorOverrideColor(BlxColor *blxColor, 
+                                  const gboolean selected, 
+                                  const gboolean usePrintColors, 
+                                  const GdkColor *source)
+{
+  GdkColor *color = NULL ;
+
+  if (usePrintColors)
+    {
+      if (selected)
+        {
+          color = &blxColor->printSelected;
+          blxColor->printSelected_overridden = TRUE ;
+        }
+      else
+        {
+          color = &blxColor->print;
+          blxColor->print_overridden = TRUE ;
+        }
+    }
+  else
+    {
+      if (selected)
+        {
+          color = &blxColor->selected;
+          blxColor->selected_overridden = TRUE ;
+        }
+      else
+        {
+          color = &blxColor->normal;
+          blxColor->normal_overridden = TRUE ;
+        }
+    }
+
+  gdk_color_parse(gdk_color_to_string(source), color);
+
+  gboolean failures[1];
+  gdk_colormap_alloc_colors(gdk_colormap_get_system(), color, 1, TRUE, TRUE, failures);
+}
+
+
+/* For the given BlxColor, return a pointer to the GdkColor that meets the given criteria */
+GdkColor *blxColorGetColor(BlxColor *blxColor, const gboolean selected, const gboolean usePrintColors)
+{
+  GdkColor *result = NULL;
+  
+  if (usePrintColors)
+    {
+      if (selected)
+        {
+          result = &blxColor->printSelected;
+        }
+      else
+        {
+          result = &blxColor->print;
+        }
+    }
+  else
+    {
+      if (selected)
+        {
+          result = &blxColor->selected;
+        }
+      else
+        {
+          result = &blxColor->normal;
+        }
+    }
+    
+  return result;
+}
+
+
+/* For the given BlxColor, return a pointer to the GdkColor that meets the given criteria */
+const GdkColor *blxColorGetColor(const BlxColor *blxColor, const gboolean selected, const gboolean usePrintColors)
+{
+  const GdkColor *result = NULL;
+  
+  if (usePrintColors)
+    {
+      if (selected)
+        {
+          result = &blxColor->printSelected;
+        }
+      else
+        {
+          result = &blxColor->print;
+        }
+    }
+  else
+    {
+      if (selected)
+        {
+          result = &blxColor->selected;
+        }
+      else
+        {
+          result = &blxColor->normal;
+        }
+    }
+    
+  return result;
+}
+
+
+gboolean colorsEqual(GdkColor *color1, GdkColor *color2)
+{
+  return (color1->pixel == color2->pixel &&
+          color1->red == color2->red &&
+          color1->green == color2->green &&
+          color1->blue == color2->blue);
+}
+
+
+/* Return a char representation of a strand, i.e. "+" for forward strand, "-" for
+ * reverse, or "." for none. */
+char getStrandAsChar(const BlxStrand strand)
+{
+  char result = '.';
+  
+  if (strand == BLXSTRAND_FORWARD)
+    {
+      result = '+';
+    }
+  else if (strand == BLXSTRAND_REVERSE)
+    {
+      result = '-';
+    }
+  
+  return result;
+}
+
+
+/* Round to nearest int (needed because there is no  round() function in ISO C90) */
+int roundNearest(const double val)
+{
+  int truncated = (int)val;
+  double remainder = val - truncated;
+  int result = truncated;
+
+  if (remainder > 0.5)
+    {
+      result = truncated + 1;
+    }
+  else if (remainder < -0.5)
+    {
+      result = truncated - 1;
+    }
+    
+  return result;
+}
+
+
+/* Round to the nearest multiple of the given value */
+int roundToValue(const int inputVal, const int roundTo)
+{
+  return roundNearest((double)inputVal / (double)roundTo) * roundTo;
+}
+
+
+/* Function to round the given value to the nearest "nice" value, from the given
+ * list of values to round by. Returns the value it rounded to the nearest of. */
+int roundToValueFromList(const int inputVal, GSList *roundValues, int *roundedTo)
+{
+  /* Decide what amount to round to the nearest number of, out of a list of possible
+   * "nice" values. Find the nearest value in this list to our result. The list 
+   * shouldn't be long, so this doesn't worry about efficiency */
+  GSList *listItem = roundValues;
+  int roundTo = UNSET_INT;
+  int smallestDiff = inputVal - roundTo;
+  
+  for ( ; listItem; listItem = listItem->next)
+    {
+      int val = GPOINTER_TO_INT(listItem->data);
+      int thisDiff = inputVal - val;
+      
+      if (roundTo == UNSET_INT || (val > 0 && abs(thisDiff) < smallestDiff))
+	{
+	  roundTo = val;
+	  smallestDiff = abs(thisDiff);
+	}
+    }
+  
+  /* Round the input to the nearest multiple of 'roundTo'. */
+  int result = roundNearest((double)inputVal / (double)roundTo) * roundTo;
+  
+  if (roundedTo)
+    {
+      *roundedTo = roundTo;
+    }
+  
+  return result;
+}
+
+
+/* Function to round the given value up to the next "nice" value, from the given
+ * list of values to round by. Returns the value it rounded to the nearest of. 
+ * Input list of values should be sorted in descending order. */
+int roundUpToValueFromList(const int inputVal, GSList *roundValues, int *roundedTo)
+{
+  /* Decide what amount to round to the nearest number of, out of a list of possible
+   * "nice" values. Find the nearest value in this list to our result. The list 
+   * shouldn't be long, so this doesn't worry about efficiency */
+  GSList *listItem = roundValues;
+  int roundTo = UNSET_INT;
+  int smallestDiff = inputVal - roundTo;
+  
+  for ( ; listItem; listItem = listItem->next)
+    {
+      int val = GPOINTER_TO_INT(listItem->data);
+
+      if (val < inputVal)
+        break;
+      
+      int thisDiff = inputVal - val;
+      
+      if (roundTo == UNSET_INT || (val > 0 && abs(thisDiff) < smallestDiff))
+	{
+	  roundTo = val;
+	  smallestDiff = abs(thisDiff);
+	}
+    }
+  
+  /* Round the input to the nearest multiple of 'roundTo'. */
+  int result = max(1, roundNearest((double)inputVal / (double)roundTo)) * roundTo;
+  
+  if (roundedTo)
+    {
+      *roundedTo = roundTo;
+    }
+  
+  return result;
+}
+
+
+/* Converts the given integer to a string. The result must be free'd with g_free */
+char* convertIntToString(const int value)
+{
+  char result[numDigitsInInt(value) + 1];
+  sprintf(result, "%d", value);
+  return g_strdup(result);
+}
+
+
+/* Converts the given double to a string. The result must be free'd with g_free. Numdp specifies the
+ * number of decimal places to show */
+char* convertDoubleToString(const gdouble value, const int numDp)
+{
+  char format[numDp + 5];
+  sprintf(format, "%%1.%df", numDp);
+  
+  char result[numDigitsInInt((int)value) + numDp + 2]; /* the +2 includes the and terminating null */
+  
+  sprintf(result, format, value);
+  return g_strdup(result);
+}
+
+
+/* Converts the given string to an integer. */
+int convertStringToInt(const char *inputStr)
+{
+  return atoi(inputStr);
+}
+
+
+/* Utility to return true if the given char is a whitespace char */
+gboolean isWhitespaceChar(const char curChar)
+{
+  return (curChar == ' ' || curChar == '\t');
+}
+
+
+/* Utility to return true if the given char is a newline char */
+gboolean isNewlineChar(const char curChar)
+{
+  return (curChar == '\n');
+}
+
+
+/* Get the child of the given widget that has the given name (which could be the given 
+ * widget itself.) Assumes there is only one, so returns the first one found. */
+GtkWidget* getNamedChildWidget(GtkWidget *widget, const gchar *searchName)
+{
+  GtkWidget *result = NULL;
+  const gchar *widgetName = gtk_widget_get_name(widget);
+ 
+  if (stringsEqual(widgetName, searchName, TRUE))
+    {
+      result = widget;
+    }
+  else if (GTK_IS_CONTAINER(widget))
+    {
+      /* recurse over children until we find the detail view (assumes there is only one!) */
+      GList *children = gtk_container_get_children(GTK_CONTAINER(widget));
+      GList *child = children;
+      
+      for ( ; child && !result; child = child->next)
+        {
+          GtkWidget *childWidget = GTK_WIDGET(child->data);
+          result = getNamedChildWidget(childWidget, searchName);
+        }
+
+      g_list_free(children);
+    }
+    
+  return result;
+}
+
+
+/* Send a string to a GIOChannel, "protecting" it by placing quotes around it and escaping quotes
+ * inside it. */
+void stringProtect(GIOChannel *ioChannel, const char *string, GError **error)
+{
+  /* We pass in the same error from previous calls to stringProtect because it's convenient to
+   * check it here and quit rather than checking each time from the calling function */
+  if (error && *error != NULL)
+    return;
+
+  const char *cp;
+  GError *tmpError = NULL;
+ 
+  g_io_channel_write_unichar(ioChannel, ' ', &tmpError);
+
+  if (!tmpError)
+    g_io_channel_write_unichar(ioChannel, '"', &tmpError);
+
+  if (string && !tmpError)
+    {
+      for(cp = string; *cp && !tmpError; ++cp)
+        {
+          /* Escape any internal quotes (or the escape char itself) by placing '$' in front */
+          if (*cp == '"' || *cp == '$')
+            g_io_channel_write_unichar(ioChannel, '$', &tmpError);
+
+          if (!tmpError)
+            g_io_channel_write_unichar(ioChannel, *cp, &tmpError);
+        }
+    }
+
+  if (!tmpError)
+    g_io_channel_write_unichar(ioChannel, '"', &tmpError);
+
+  if (tmpError)
+    g_propagate_error(error, tmpError);
+}
+
+
+/* Read a protected string. If 'target' is given, then this function will 
+ * populate it with the result and return a pointer to it. If target is NULL, 
+ * then memory will be allocated for the result and this must be freed by the 
+ * caller using g_free. */
+char *stringUnprotect(char **textp, char *target)
+{
+  char *cp, *cpd;
+  int count = 0;
+
+ redo:
+  cp = *textp;
+  cpd = target;
+  
+  while (*cp)
+    {
+      /* Protected strings are enclosed in quotes, so find the opening quote
+       * Note that any internal quotes are escaped. */
+      if (*cp == '"')
+        {
+          cp++;                                             /* skip quote */
+          break ;
+        }
+      else
+        cp++ ;
+    }
+
+  /* Loop through each character until we find the closing quote */
+  while (*cp != '"' && *cp)
+    {
+      /* If it's the escape character, skip it and process the next character
+       * instead (this avoids the escaped character being processed by the 
+       * while statement, so internal quotes do not cause the loop to exit). */
+      if (*cp == '$')
+        cp++;
+
+      /* If the target pointer exists, set the current char and increment.
+       * Otherwise, on the first run through we maintain a count of how 
+       * many chars there are so we can allocate the correct memory for the target */
+      if (cpd)
+        *cpd++ = *cp;
+      else
+        count++;
+
+      cp++;
+    }
+  
+  if (!target)
+    {
+      /* Allocate the memory for the target and then re-do the loops to populate it. */
+      target = (char*)g_malloc0(count+1);
+      goto redo;
+    }
+  
+  *cp = '\0' ;
+  *textp = cp+1; /* skip quote */
+
+  return target;
+}
+
+
+/***********************************************************
+ *                         Dialogs                         *
+ ***********************************************************/
+
+/* Utility to set the width and height of a GtkTextView based on the width and
+ * number of lines of text it contains (but not going above the given max). 
+ * Returns the width/height that was set. */
+static void setTextViewSize(GtkWidget *textView, GtkTextBuffer *textBuffer, PangoFontDescription *fontDesc, int *width, int *height)
+{
+  /* Adjust height to include all the lines if possible (limit to the original height passed in though) */
+  if (height)
+    {
+      const int charHeight = getTextHeight(textView, "A");
+      const int calcHeight = (gtk_text_buffer_get_line_count(textBuffer) * charHeight);
+      *height = min(*height, calcHeight);
+    }
+
+  if (width)
+    {
+      /* Loop through all lines and find the max line length. */
+      int maxWidth = 0;
+      int numLines = gtk_text_buffer_get_line_count(textBuffer);
+      
+      int line = 0;
+      for ( ; line < numLines; ++line)
+        {
+          GtkTextIter iter1;
+          GtkTextIter iter2;
+          gtk_text_buffer_get_iter_at_line(textBuffer, &iter1, line);
+          gtk_text_buffer_get_iter_at_line(textBuffer, &iter2, line + 1);
+          
+          gchar *text = gtk_text_iter_get_text(&iter1, &iter2);
+          const int lineWidth = getTextWidth(textView, text);
+          
+          if (lineWidth > maxWidth)
+            maxWidth = lineWidth;
+        } 
+      
+      /* Limit it to the input width */
+      *width = min(*width, maxWidth);
+    }
+}
+
+
+/* Utility to create a scrollable text view from the given message text. If textBufferOut is
+ * non-null its value is set to point to the text buffer. */
+GtkWidget* createScrollableTextView(const char *messageText,
+                                    const gboolean wrapText,
+                                    PangoFontDescription *fontDesc,
+                                    const gboolean useMarkup,
+                                    int *width,
+                                    int *height,
+                                    GtkTextView **textViewOut)
+{
+  /* Create a text buffer and copy the text in */
+  GtkTextBuffer *textBuffer = gtk_text_buffer_new(NULL);
+  
+  GtkTextIter textIter;
+  gtk_text_buffer_get_iter_at_line(textBuffer, &textIter, 0);
+  
+  if (useMarkup && messageText)
+    {
+      gtk_text_buffer_insert_markup(textBuffer, &textIter, messageText);
+    }
+  else if (messageText)
+    {
+      gtk_text_buffer_set_text(textBuffer, messageText, -1);
+    }
+  
+  /* Create a text view to display the buffer */
+  GtkWidget *textView = gtk_text_view_new();
+  gtk_text_view_set_buffer(GTK_TEXT_VIEW(textView), textBuffer);
+  gtk_text_view_set_editable(GTK_TEXT_VIEW(textView), FALSE);
+  
+  if (textViewOut)
+    {
+      *textViewOut = GTK_TEXT_VIEW(textView);
+    }
+  
+  if (fontDesc)
+    {
+      gtk_widget_modify_font(textView, fontDesc);
+    }
+  
+  if (wrapText)
+    {
+      gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(textView), GTK_WRAP_WORD);
+    }
+  
+  /* Put the text view in a scrollable window */
+  GtkWidget *scrollWin = gtk_scrolled_window_new(NULL, NULL);
+  gtk_container_add(GTK_CONTAINER(scrollWin), textView);
+  gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollWin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+
+  /* Set the height to fit the number of lines of text, unless this would exceed 
+   * the passed-in height. To do: should pass in width here too but the calculation
+   * is not accurate. */
+ setTextViewSize(textView, textBuffer, fontDesc, NULL, height);
+  
+  /* Return the outermost container */
+  return scrollWin;
+}
+
+
+/* Utility to pop up a simple dialog with the given title and text, with just an "OK" 
+ * button. Returns the dialog, and optionally sets a pointer to the text buffer in the 
+ * textBuffer return arg. */
+GtkWidget* showMessageDialog(const char *title,  
+                             const char *messageText,
+                             GtkWidget *parent,
+                             const int maxWidth,
+                             const int maxHeight,
+                             const gboolean wrapText,
+                             const gboolean useMarkup,
+                             PangoFontDescription *fontDesc,
+                             GtkTextView **textView)
+{
+  GtkWidget *dialog = gtk_dialog_new_with_buttons(title, 
+                                                  GTK_WINDOW(parent), 
+                                                  GTK_DIALOG_DESTROY_WITH_PARENT,
+                                                  GTK_STOCK_OK,
+                                                  GTK_RESPONSE_ACCEPT,
+                                                  NULL);
+
+  gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT);
+
+  /* ideally we'd pass in width and height here to set them from the actual size
+   * of the text. however, this function is used for the pfetch window, which
+   * may change its contents, giving an inaccurate size if we calculate it now, so
+   * just use the max size. */
+  int width = maxWidth, height = maxHeight;
+  GtkWidget *child = createScrollableTextView(messageText, wrapText, fontDesc, useMarkup, NULL, NULL, textView);
+  height += 40; /* fudge to allow space for dialog buttons */
+  
+  gtk_window_set_default_size(GTK_WINDOW(dialog), width, height);
+  gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), child, TRUE, TRUE, 0);
+
+  g_signal_connect(dialog, "response", G_CALLBACK(gtk_widget_destroy), NULL);
+  gtk_widget_show_all(dialog);
+  
+  return dialog;
+}
+
+
+/* Get/set a CallbackData struct for this widget */
+static CallbackData* widgetGetCallbackData(GtkWidget *widget)
+{
+  return widget ? (CallbackData*)(g_object_get_data(G_OBJECT(widget), "callbackData")) : NULL;
+}
+
+
+/* Set callback function and user-data for the given widget */
+void widgetSetCallbackData(GtkWidget *widget, BlxResponseCallback func, gpointer data)
+{
+  if (widget)
+    { 
+      CallbackData *callbackData = widgetGetCallbackData(widget);
+      
+      if (!callbackData)
+        callbackData = new CallbackData;
+      
+      callbackData->func = func;
+      callbackData->data = data;
+      
+      g_object_set_data(G_OBJECT(widget), "callbackData", callbackData);
+      g_signal_connect(G_OBJECT(widget), "destroy", G_CALLBACK(onDestroyCustomWidget), NULL);
+    }
+}
+
+/* Get the CallbackData struct for this widget, if it has one, and call it. Returns false if
+ * there was an error */
+static gboolean widgetCallCallback(GtkWidget *widget, const gint responseId)
+{
+  gboolean result = TRUE;
+  CallbackData *callbackData = widgetGetCallbackData(widget);
+  
+  if (callbackData && callbackData->func)
+    {
+      result = callbackData->func(widget, responseId, callbackData->data);
+    }
+  
+  return result;
+}
+
+/* Call the stored CallbackData callbacks (if any exist) for this widget and
+ * all of its children. The response ID is passed as the user data. Returns false if
+ * any callback returns an error. */
+gboolean widgetCallAllCallbacks(GtkWidget *widget, gpointer data)
+{
+  gboolean result = TRUE;
+  
+  if (widget && GTK_IS_WIDGET(widget))
+    {
+      gint responseId = GPOINTER_TO_INT(data);
+      
+      if (!widgetCallCallback(widget, responseId))
+        {
+          result = FALSE;
+        }
+  
+      if (GTK_IS_CONTAINER(widget))
+        {
+          GList *children = gtk_container_get_children(GTK_CONTAINER(widget));
+          GList *childItem = children;
+          
+          for ( ; childItem; childItem = childItem->next)
+            {
+              GtkWidget *child = GTK_WIDGET(childItem->data);
+              
+              if (!widgetCallAllCallbacks(child, data))
+                {
+                  result = FALSE;
+                }
+            }
+
+          g_list_free(children);
+        }
+    }
+  
+  return result;
+}
+
+
+/* Generic callback to call all user-specified callbacks for all child widgets of
+ * the given dialog if ACCEPT or APPLY responses received. Also closes the dialog 
+ * if ACCEPT or REJECT responses received.
+ * The user data must be a boolean (which has been converted to a pointer using
+ * GINT_TO_POINTER), that is true if this dialog is persistent or false 
+ * otherwise. If it is persistent, the dialog will be hidden rather than being 
+ * destroyed. */
+void onResponseDialog(GtkDialog *dialog, gint responseId, gpointer data)
+{
+  gboolean destroy = TRUE;
+  
+  switch (responseId)
+  {
+    case GTK_RESPONSE_ACCEPT:
+      /* Destroy if successful */
+      destroy = widgetCallAllCallbacks(GTK_WIDGET(dialog), GINT_TO_POINTER(responseId));
+      break;
+      
+    case GTK_RESPONSE_APPLY:
+      widgetCallAllCallbacks(GTK_WIDGET(dialog), GINT_TO_POINTER(responseId));
+      destroy = FALSE;
+      break;
+
+    case BLX_RESPONSE_BACK:  /* fall through */
+    case BLX_RESPONSE_FORWARD:
+      widgetCallAllCallbacks(GTK_WIDGET(dialog), GINT_TO_POINTER(responseId));
+      destroy = FALSE;
+      break;
+      
+    case GTK_RESPONSE_CANCEL:
+    case GTK_RESPONSE_REJECT:
+      destroy = TRUE;
+      break;
+      
+    default:
+      break;
+  };
+  
+  if (destroy)
+    {
+      /* If it's a persistent dialog, just hide it, otherwise destroy it */
+      const gboolean isPersistent = GPOINTER_TO_INT(data);
+      
+      if (isPersistent)
+        {
+          gtk_widget_hide_all(GTK_WIDGET(dialog));
+        }
+      else
+        {
+          gtk_widget_destroy(GTK_WIDGET(dialog));
+        }
+    }
+}
+
+
+/* Utility to remove all of the child widgets from a dialog's content area. */
+void dialogClearContentArea(GtkDialog *dialog)
+{
+  GtkWidget *contentArea = dialog->vbox;
+  GtkWidget *actionArea = dialog->action_area;
+  
+  GList *children = gtk_container_get_children(GTK_CONTAINER(contentArea));
+  GList *child = children;
+  
+  for ( ; child; child = child->next)
+    {
+      GtkWidget *childWidget = GTK_WIDGET(child->data);
+      
+      if (childWidget != actionArea)
+        {
+          gtk_widget_destroy(childWidget);
+          child->data = NULL;
+        }
+    }
+
+  g_list_free(children);
+  
+//  gtk_container_foreach(GTK_CONTAINER(contentArea), destroyWidget, NULL);
+}
+
+
+/* Gets the dialog widget for the given dialog id. Returns null if the widget has not
+ * been created yet. */
+GtkWidget* getPersistentDialog(GtkWidget* dialogList[], const int dialogId)
+{
+  GtkWidget *result = NULL;
+  
+  if (dialogList[dialogId])
+    {
+      result = dialogList[dialogId];
+    }
+  
+  return result;
+}
+
+/* Add a newly-created dialog to the list of persistent dialogs. The dialog should not
+ * exist in the list yet. */
+void addPersistentDialog(GtkWidget* dialogList[], const int dialogId, GtkWidget *widget)
+{
+  if (dialogId == 0)
+    {
+      g_warning("Code error: cannot add a dialog with ID %d. Dialog will not be persistent.\n", dialogId);
+    }
+  else
+    {
+      if (dialogList[dialogId])
+        {
+          g_warning("Creating a dialog that already exists. Old dialog will be destroyed. Dialog ID=%d.\n", dialogId);
+          gtk_widget_destroy(dialogList[dialogId]);
+          dialogList[dialogId] = NULL;
+        }
+      
+      dialogList[dialogId] = widget;
+    }
+}
+
+
+/***********************************************************
+ *                         Text parsing                    *
+ ***********************************************************/
+
+/* match to template with wildcards.   Authorized wildchars are * ? #
+     ? represents any single char
+     * represents any set of chars
+   case-insensitive.   Example: *Nc*DE# fits abcaNchjDE23
+
+   returns 0 if not found
+           1 + pos of first sigificant match (i.e. not a *) if found
+*/
+int wildcardSearch(const char *textToSearch, const char *searchStr)
+{
+  if (!textToSearch || !searchStr)
+    {
+      return 0;
+    }
+  
+  char *textChar = (char*)textToSearch; /* to do: don't cast away const! */
+  char *searchChar = (char*)searchStr;  /* to do: don't cast away const! */
+  char *ts = 0, *cs = 0, *s = 0 ;
+  int star=0;
+
+  while (1)
+    {
+      switch(*searchChar)
+        {
+        case '\0':
+          {
+            if(!*textChar)
+              {
+                return  ( s ? 1 + (s - textToSearch) : 1);
+              }
+            else if (!star)
+              {
+                return 0;
+              }
+            else
+              {
+                /* not success yet go back in template */
+                searchChar = ts;
+                textChar = cs + 1;
+                
+                if (ts == searchStr)
+                  {
+                    s = 0;
+                  }
+              }
+            
+            break ;
+          }
+            
+        case '?':
+          {
+            if (!*textChar)
+              {
+                return 0;
+              }
+            
+            if(!s)
+              {
+                s = textChar;
+              }
+            
+            searchChar++;
+            textChar++;
+            break;
+          }
+            
+        case '*':
+          {
+            ts = searchChar;
+            
+            while( *searchChar == '?' || *searchChar == '*')
+              {
+                searchChar++;
+              }
+            
+            if (!*searchChar)
+              {
+                return s ? 1 + (s-textToSearch) : 1 ;
+              }
+            
+            while (toupper(*textChar) != toupper(*searchChar))
+              {
+                if (*textChar)
+                  textChar++;
+                else
+                  return 0;
+              }
+            
+            star = 1;
+            cs = textChar;
+            
+            if(!s)
+              {
+                s = textChar;
+              }
+            
+            break;
+          }
+            
+        default:
+          {
+            if (toupper(*searchChar++) != toupper(*textChar++))
+              {
+                if(!star)
+                  {
+                    return 0;
+                  }
+                
+                searchChar = ts;
+                textChar = cs + 1;
+                
+                if(ts == searchStr)
+                  {
+                    s = 0;
+                  }
+              }
+            else if(!s)
+              {
+                s = textChar - 1 ;
+              }
+            
+            break;
+          }
+        }
+    }
+
+  return 0;
+}
+
+
+/* Given a string, returns the string if is less than a fudge factor or returns
+ * the string abbreviated in the form "xxxxx...yyyyy". The result should be 
+ * free'd with g_free. */
+gchar *abbreviateText(const char *inputStr, const int max_len)
+{
+  gchar *result = NULL;
+
+  if (max_len > 0) 
+    { 
+      char abbrev[] = "<>";
+      int inputStrLen = strlen(inputStr);
+      
+      if (inputStrLen <= max_len)
+        {
+          result = g_strdup(inputStr);
+        }
+      else
+        {
+          /* Get the first len/2 chars */
+          const int headChars = (max_len / 2) - 1 ;
+          char *headStr = headChars > 0 ? g_strndup(inputStr, headChars) : NULL;
+
+          const int tailChars = max_len - ((max_len / 2) + 1) ;
+          char *tailStr = g_strndup(inputStr + inputStrLen - tailChars, tailChars); /* trailing null fudged in here. */
+          
+          result = g_strconcat(headStr, abbrev, tailStr, NULL);
+          
+          g_free(headStr);
+          g_free(tailStr);
+        }
+    }
+    
+  return (result) ;
+}
+
+
+/* String comparison function with caseSensitive option. Returns true if the two 
+ * strings are equal. The two strings must be null-terminated. */
+gboolean stringsEqual(const char *str1, const char *str2, const gboolean caseSensitive)
+{
+  gboolean result = FALSE;
+  
+  if (!str1 && !str2)
+    {
+      result = TRUE;
+    }
+  else if (!str1 || !str2)
+    {
+      result = FALSE;
+    }
+  else if (caseSensitive)
+    {
+      result = !strcmp(str1, str2);
+    }
+  else
+    {
+      const size_t len1 = strlen(str1);
+      result = (strlen(str2) == len1 && !g_ascii_strncasecmp(str1, str2, len1));
+    }
+  
+  return result;
+}
+
+
+/* Parses a line of text containing a match description, which is of the form:
+ * 
+ *                       "\"name\" start end (length)"
+ * or:                   "name start end (length)"
+ *
+ * Returns the number of valid fields that were found.
+ * 
+ * We could verify "name" more but it's probably not worth it - in fact, being
+ * more flexible here allows us to use wildcards, because we can verify it 
+ * with wildcard matching later.
+ */
+int parseMatchLine(const char *inputText,
+                   char **matchNameOut,
+                   int *matchStartOut, 
+                   int *matchEndOut, 
+                   int *matchLenOut)
+{
+  char sequence_name[1000] = {'\0'};
+  int start = 0, end = 0, length = 0;
+  const char *format_str = "\"%[^\"]\"%d%d (%d)";
+
+  int fields = sscanf(inputText, format_str, &sequence_name[0], &start, &end, &length);
+  
+  if (fields < 1)
+    {
+      /* Try again but without the quotes */
+      format_str = "%[^\"]%d%d (%d)";
+      fields = sscanf(inputText, format_str, &sequence_name[0], &start, &end, &length);
+    }
+  
+  gboolean foundError = (fields < 1);
+  int validFields = 0;
+
+  if (fields > 0)
+    {
+      *matchNameOut = g_strdup(sequence_name);
+      foundError = (sequence_name == NULL);
+      
+      if (!foundError)
+        ++validFields;
+    }
+    
+  if (fields > 1)
+    {
+      *matchStartOut = start;
+      foundError = (start < 1);
+      
+      if (!foundError)
+        ++validFields;
+    }
+
+  if (fields > 2)
+    {
+      *matchEndOut = end;
+      foundError = (start >= end);
+      
+      if (!foundError)
+        ++validFields;
+    }
+
+  if (fields > 3)
+    {
+      *matchLenOut = length;
+      foundError = (length < 1);
+      
+      if (!foundError)
+        ++validFields;
+    }
+
+  return fields;
+}
+
+
+/* Parse a list of matches using parseMatchLine(), and extract the names. Returns
+ * a GList of sequence names. Both the list and all its entries should be free'd 
+ * by the caller. */
+GList* parseMatchList(const char *inputText)
+{
+  GList *matchList = NULL ;
+
+  if (inputText)
+    {
+      /* Split the input text into separate strings based on the following delimiters: */
+      const char *delimiters = "\n\r,;";
+      char **tokens = g_strsplit_set(inputText, delimiters, -1);   /* -1 means do all tokens. */
+      char **token = tokens;
+      
+      if (token)
+        {
+          char *match = *token;
+
+          while (token && match)
+            {
+              char *match_name ;
+              int start = 0, end = 0, length = 0 ;
+
+              if (parseMatchLine(match, &match_name, &start, &end, &length) > 0)
+                {
+                  matchList = g_list_append(matchList, match_name);
+                }
+
+              token++ ;
+              match = *token ? *token : 0; /* token may be empty string if two delimiters next to each other */
+            }
+        }
+      
+      g_strfreev(tokens);
+    }
+  
+  return matchList ;
+}
+
+
+/* Request the text in the PRIMARY clipboard and pass it to the given callback function */
+void requestPrimaryClipboardText(GtkClipboardTextReceivedFunc callback, gpointer data)
+{
+#ifndef __CYGWIN__  /* Not applicable for Windows */
+
+  GtkClipboard *clipboard = gtk_clipboard_get(GDK_SELECTION_PRIMARY);
+  gtk_clipboard_request_text(clipboard, callback, data);
+  
+#endif
+}
+
+
+/* Set the text in the PRIMARY clipboard */
+void setPrimaryClipboardText(const char *text)
+{
+#ifndef __CYGWIN__   /* Not applicable for Windows */
+
+  GtkClipboard *clipboard = gtk_clipboard_get(GDK_SELECTION_PRIMARY);
+  gtk_clipboard_set_text(clipboard, text, -1);
+  
+#endif
+}
+
+
+/* Request the text in the DEFAULT clipboard and pass it to the given callback function */
+void requestDefaultClipboardText(GtkClipboardTextReceivedFunc callback, gpointer data)
+{
+  GtkClipboard *clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
+  gtk_clipboard_request_text(clipboard, callback, data);
+}
+
+
+/* Set the text in the DEFAULT clipboard */
+void setDefaultClipboardText(const char *text)
+{
+  GtkClipboard *clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
+  gtk_clipboard_set_text(clipboard, text, -1);
+}
+
+
+/* Utility to check whether the given drawable has the given size */
+static gboolean drawableSizeCorrect(GdkDrawable *drawable, const int widthIn, const int heightIn)
+{
+  int width = UNSET_INT, height = UNSET_INT;
+  gdk_drawable_get_size(drawable, &width, &height);
+  return (width == widthIn && height == heightIn);
+}
+
+
+/* Create and cache a blank pixmap drawable in the given widget. The size of the
+ * resultant pixmap is the same as the widget's allocation size. */
+GdkDrawable* createBlankPixmap(GtkWidget *widget)
+{
+  /* If there's already a stored drawable, re-use it */
+  GdkDrawable *drawable = widgetGetDrawableAllowInvalid(widget);
+  
+  if (!drawable || !drawableSizeCorrect(drawable, widget->allocation.width, widget->allocation.height))
+    {
+      GdkWindow *window = GTK_IS_LAYOUT(widget) ? GTK_LAYOUT(widget)->bin_window : widget->window;
+  
+      drawable = gdk_pixmap_new(window, widget->allocation.width, widget->allocation.height, -1);
+      gdk_drawable_set_colormap(drawable, gdk_colormap_get_system());
+      widgetSetDrawable(widget, drawable); /* deletes the old drawable, if there is one */
+
+      DEBUG_OUT("Created drawable '%x', XID=%d\n", drawable, gdk_x11_drawable_get_xid(drawable));
+    }
+  
+  /* Paint a blank rectangle for the background, the same color as the widget's background */
+  GdkGC *gc = gdk_gc_new(drawable);
+  
+  GdkColor *bgColor = &widget->style->bg[GTK_STATE_NORMAL];
+  gdk_gc_set_foreground(gc, bgColor);
+  gdk_draw_rectangle(drawable, gc, TRUE, 0, 0, widget->allocation.width, widget->allocation.height);
+      
+  g_object_unref(gc);
+  
+  widgetSetDrawableValid(widget, TRUE);
+
+  return drawable;
+}
+
+
+/* Like createBlankPixmap, but allows the caller to specify a different size to
+ * the widget allocation size */
+GdkDrawable* createBlankSizedPixmap(GtkWidget *widget, GdkDrawable *window, const int width, const int height)
+{
+  /* If there's already a stored drawable, re-use it */
+  GdkDrawable *drawable = widgetGetDrawableAllowInvalid(widget);
+  
+  if (!drawable || !drawableSizeCorrect(drawable, width, height))
+    {
+      drawable = gdk_pixmap_new(window, width, height, -1);
+      gdk_drawable_set_colormap(drawable, gdk_colormap_get_system());
+      widgetSetDrawable(widget, drawable); /* deletes the old drawable, if there is one */
+      DEBUG_OUT("Created drawable '%x', XID=%d\n", drawable, gdk_x11_drawable_get_xid(drawable));
+    }
+  
+  /* Paint a blank rectangle for the background, the same color as the widget's background */
+  GdkGC *gc = gdk_gc_new(drawable);
+  
+  GdkColor *bgColor = &widget->style->bg[GTK_STATE_NORMAL];
+  gdk_gc_set_foreground(gc, bgColor);
+  gdk_draw_rectangle(drawable, gc, TRUE, 0, 0, width, height);
+  
+  g_object_unref(gc);
+  
+  widgetSetDrawableValid(widget, TRUE);
+  
+  return drawable;
+}
+
+
+/* Utility to pop up a simple confirmation dialog box with the given title and text, 
+ * with just an "OK" and "Cancel" button. Blocks until the user responds, and returns
+ * their response ID. */
+gint runConfirmationBox(GtkWidget *widget, const char *title, const char *messageText)
+{
+  GtkWidget *dialog = gtk_dialog_new_with_buttons(title, 
+                                                  GTK_WINDOW(widget), 
+                                                  (GtkDialogFlags)(GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT),
+                                                  GTK_STOCK_CANCEL,
+                                                  GTK_RESPONSE_REJECT,
+                                                  GTK_STOCK_OK,
+                                                  GTK_RESPONSE_ACCEPT,
+                                                  NULL);
+  
+  gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT);
+
+  /* Put message and icon into an hbox */
+  GtkWidget *hbox = gtk_hbox_new(FALSE, 0);
+  gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox, TRUE, TRUE, 0);
+  
+  GtkWidget *image = gtk_image_new_from_stock(GTK_STOCK_DIALOG_QUESTION, GTK_ICON_SIZE_DIALOG);
+  gtk_box_pack_start(GTK_BOX(hbox), image, TRUE, TRUE, 0);
+  
+  GtkWidget *label = gtk_label_new(messageText);
+  gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
+  gtk_widget_show_all(hbox);
+  
+  gint response = gtk_dialog_run(GTK_DIALOG(dialog));
+  
+  gtk_widget_destroy(dialog);
+  
+  return response;
+}
+
+
+/* If error is non-null, tag the given prefix string onto the start of the given 
+ * error's message. If error is null, do nothing. */
+void prefixError(GError *error, const char *formatStr, ...)
+{
+//  g_prefix_error(error, prefixStr);  /* Only from GLib v2.16 */
+
+  if (error)
+    {
+      va_list argp;
+      va_start(argp, formatStr);
+      
+      /* Print the prefix text and args into a new string. We're not sure how much space we need
+       * for the args, so give a generous buffer but use vsnprintf to make sure we don't overrun.
+       * (g_string_vprintf would avoid this problem but is only available from GLib version 2.14). */
+      const int len = strlen(formatStr) + 200;
+      char tmpStr[len];
+      vsnprintf(tmpStr, len, formatStr, argp);
+
+      va_end(argp);
+
+      /* Append the error message */
+      char *resultStr = g_strdup_printf("%s%s", tmpStr, error->message);
+      
+      /* Replace the error message text with the new string. */
+      g_free(error->message);
+      error->message = resultStr;
+  }
+}
+
+
+/* Tag the given postfix string onto the end of the given error's message */
+void postfixError(GError *error, const char *formatStr, ...)
+{
+  if (error)
+    {
+      va_list argp;
+      va_start(argp, formatStr);
+      
+      /* Print the postfix text and args into a new string. We're not sure how much space we need
+       * for the args, so give a generous buffer but use vsnprintf to make sure we don't overrun.
+       * (g_string_vprintf would avoid this problem but is only available from GLib version 2.14). */
+      const int len = strlen(formatStr) + 200;
+      char tmpStr[len];
+      vsnprintf(tmpStr, len, formatStr, argp);
+      
+      va_end(argp);
+      
+      /* Prepend the error message */
+      char *resultStr = g_strdup_printf("%s%s", error->message, tmpStr);
+      
+      /* Replace the error message text with the new string. */
+      g_free(error->message);
+      error->message = resultStr;
+    }
+}
+
+
+///* Custom function to propagate a GError. Unlike g_propagate_error, this allows the destination
+// * error to be non-null: if that is the case, the new error message is concatenated on the end
+// * of the original error message. The src error is free'd and set to NULL. */
+//void propagateError(GError **dest, GError **src)
+//{
+//  if (dest == NULL || src == NULL || *src == NULL)
+//    return;
+//  
+//  if (*dest == NULL)
+//    {
+//      g_propagate_error(dest, *src);
+//      *src = NULL;
+//    }
+//  else
+//    {
+//      postfixError(*error, (*src)->message);
+//    }
+//}
+
+
+/* This utility reports the given error if it is non-null and then frees the GError and
+ * sets the pointer to NULL. It reports it at the given log level.  */
+void reportAndClearIfError(GError **error, GLogLevelFlags log_level)
+{
+  if (error && *error)
+    {
+      if (log_level & G_LOG_LEVEL_ERROR)
+        g_error("%s", (*error)->message);
+      else if (log_level & G_LOG_LEVEL_CRITICAL)
+        g_critical("%s", (*error)->message);
+      else if (log_level & G_LOG_LEVEL_WARNING)
+        g_warning("%s", (*error)->message);
+      else if (log_level & G_LOG_LEVEL_DEBUG)
+        g_debug("%s", (*error)->message);
+      else if (log_level & G_LOG_LEVEL_INFO)
+        g_message_info("%s", (*error)->message);
+      else 
+        g_message("%s", (*error)->message);
+            
+      g_error_free(*error);
+      *error = NULL;
+    }
+}
+
+
+#ifdef DEBUG
+/* Prints whitespace for log level (that is, how indented logging currently is, according to how
+ * many DEBUG_ENTER and EXITs we've called), and then increase it by the increase amount (can be negative). */
+void debugLogLevel(const int increaseAmt)
+{
+  static int count = 0;
+  
+  gboolean done = FALSE;
+  
+  /* If decreasing the count (i.e. printing an exit statement) decrease the log level
+   * first. */
+  if (increaseAmt < 0)
+    {
+      count += increaseAmt;
+      if (count < 0) count = 0;
+      done = TRUE;
+    }
+  
+  /* Print whitespace */
+  int i = 0;
+  for ( ; i < count; ++i)
+    {
+      printf("  "); /* print 2 spaces per log level */
+    }
+  
+  if (!done)
+    {
+      count += increaseAmt;
+      if (count < 0) count = 0;
+    }
+}
+#endif
+
+
+/* Utility to draw a filled rectangle (optionally transparent; 
+ * pass alpha=1 for opaque) */
+void drawRect(GdkDrawable *drawable, 
+              GdkColor *color,
+              const int x,
+              const int y,
+              const int width,
+              const int height,
+              const double alpha,
+              cairo_operator_t op)
+{
+  cairo_t *cr = gdk_cairo_create(drawable);
+  
+  gdk_cairo_set_source_color(cr, color);
+  
+  cairo_rectangle(cr, x, y, width, height);
+  cairo_clip(cr);
+  
+  cairo_set_operator(cr, op);
+  cairo_paint_with_alpha(cr, alpha);
+  cairo_destroy(cr);
+}
+
+
+/* Draw the highlight box (for highlighting the current detail-view display range on 
+ * big-picture widgets such as the grids and exon views). */
+void drawHighlightBox(GdkDrawable *drawable,
+                      const GdkRectangle* const rect,
+                      const gint minWidth, 
+                      GdkColor *color)
+{
+  const int width = max(minWidth, rect->width);
+
+  cairo_t *cr = gdk_cairo_create(drawable);
+  
+  gdk_cairo_set_source_color(cr, color);
+  cairo_rectangle(cr, rect->x, rect->y, width, rect->height);
+  cairo_clip(cr);
+  cairo_paint_with_alpha(cr, 0.2);
+  
+  cairo_destroy(cr);
+}
+
+
+/* Returns true if the given char is a valid IUPAC character of the given type */
+gboolean isValidIupacChar(const char inputChar, const BlxSeqType seqType)
+{
+  gboolean isValidChar = FALSE;
+
+  if (seqType == BLXSEQ_DNA)
+    {
+      /* Convert to correct case and then check if this letter is a valid base */
+      char cp = tolower(inputChar);
+      isValidChar = ISIUPACDNA(cp);
+    }
+  else if (seqType == BLXSEQ_PEPTIDE)
+    {
+      /* Convert to correct case and then check if this letter is a valid peptide */
+      char cp = toupper(inputChar);
+      isValidChar = ISIUPACPEPTIDE(cp);
+    }
+
+  return isValidChar;
+}
+
+
+/* Set the shadow style for the given status bar. Give the shadow style as described
+ * in the GTK documentation but as a string, e.g. "GTK_SHADOW_IN". */
+void setStatusBarShadowStyle(GtkWidget *statusBar, const char *shadowStyle)
+{
+  const char name[] = "StatusbarName";
+  gtk_widget_set_name(statusBar, name);
+
+  char parseString[500];
+  sprintf(parseString, "style \"detailViewStatusbar\"\n"
+          "{\n"
+          "GtkStatusbar::shadow-type          = %s\n"
+          "}"
+          "widget \"*%s*\" style \"detailViewStatusbar\"", shadowStyle, name);
+  gtk_rc_parse_string(parseString);
+}
+
+
+
+/* Copy a segment of the given sequence into a new string. The result must be
+ * free'd with g_free by the caller. The given indices must be 0-based. */
+static gchar *copySeqSegment(const char* const inputSeq, const int idx1, const int idx2)
+{
+
+  const int minIdx = min(idx1, idx2);
+  const int maxIdx = max(idx1, idx2);
+  
+  const int segmentLen = maxIdx - minIdx + 1;
+
+  gchar *segment = (gchar*)g_malloc(sizeof(gchar) * segmentLen + 1);
+
+  
+  strncpy(segment, inputSeq + minIdx, segmentLen);
+  segment[segmentLen] = '\0';
+
+  return segment;
+}
+
+
+
+/* Copy a segment of the given sequence (which is always the DNA sequence and
+ * always the forward strand).
+ *
+ * The result is complemented if the reverse strand is requested, but only if
+ * the allowComplement flag allows it.
+ * 
+ * The result is translated to a peptide sequence if the destination seq type 
+ * is peptide.
+ *
+ * The result is reversed if the reverseResult flag is true (regardless of the
+ * strand requested - this is because the caller often wants the result in the
+ * opposite direction to that indicated by the strand, because the display may be
+ * reversed, so we leave it up to the caller to decide).
+ */
+gchar *getSequenceSegment(const char* const dnaSequence,
+                          IntRange *qRangeIn,                  /* the range to extract, in nucleotide coords */
+                          const BlxStrand strand,
+                          const BlxSeqType srcSeqType,        /* whether input sequence is nucleotide or peptide */
+                          const BlxSeqType destSeqType,       /* whether result sequence should be nucleotide or peptide */
+                          const int frame,
+                          const int numFrames, 
+                          const IntRange* const refSeqRange,
+                          const BlxBlastMode blastMode,
+                          char **geneticCode,
+                          const gboolean displayRev,
+                          const gboolean reverseResult,
+                          const gboolean allowComplement,
+                          GError **error)
+{
+  gchar *result = NULL;
+  GError *tmpError = NULL;
+  
+  if (destSeqType == BLXSEQ_DNA && srcSeqType == BLXSEQ_PEPTIDE)
+    {
+      /* We shouldn't try to convert from peptide to nucleotide. If we get here it's a coding error */
+      g_set_error(error, SEQTOOLS_ERROR, SEQTOOLS_ERROR_SEQ_SEGMENT, "Error: requested conversion of peptide sequence to nucleotide sequence.\n");
+      return result;
+    }
+  
+  IntRange qRange(qRangeIn->min(), qRangeIn->max());
+  
+  if (qRange.min() < refSeqRange->min() || qRange.max() > refSeqRange->max())
+    {
+      /* We might request up to 3 bases beyond the end of the range if we want to 
+       * show a partial triplet at the start/end. (It's a bit tricky for the caller to
+       * specify the exact bases they want here so we allow it but just limit it to 
+       * the actual range so that they can't index beyond the end of the range.) Any
+       * further out than one triplet is probably indicative of an error, so give a warning.
+       * If it doesn't overlap the ref seq range at all, just return NULL. */
+      if (!rangesOverlap(qRangeIn, refSeqRange))
+        return NULL;
+
+      if (qRange.min() < refSeqRange->min() - (numFrames + 1) || qRange.max() > refSeqRange->max() + (numFrames + 1))
+        {
+          g_set_error(&tmpError, SEQTOOLS_ERROR, SEQTOOLS_ERROR_SEQ_SEGMENT, "Requested query sequence %d - %d out of available range: %d - %d.\n", qRange.min(), qRange.max(), refSeqRange->min(), refSeqRange->max());
+        }
+      
+      if (qRange.min() < refSeqRange->min())
+        {
+          qRange.setMin(refSeqRange->min());
+        }
+      
+      if (qRange.max() > refSeqRange->max())
+        {
+          qRange.setMax(refSeqRange->max());
+        }
+    }
+  
+  /* Get 0-based indices into the sequence */
+  const int idx1 = qRange.min() - refSeqRange->min();
+  const int idx2 = qRange.max() - refSeqRange->min();
+
+  /* Copy the required segment from the ref seq. Must pass 0-based indices into the sequence */
+  result = copySeqSegment(dnaSequence, idx1, idx2);
+
+  /* If a nucleotide seq, complement if this is the reverse strand (and if allowed). NB the old code didn't used to do
+   * this for tblastn or blastp modes so I've kept that behaviour, but I'm not sure why it is that way. */
+  if (srcSeqType == BLXSEQ_DNA && strand == BLXSTRAND_REVERSE && allowComplement && blastMode != BLXMODE_TBLASTN && blastMode != BLXMODE_BLASTP)
+    {
+      blxComplement(result);
+      
+      if (!result)
+        {
+          g_set_error(error, SEQTOOLS_ERROR, SEQTOOLS_ERROR_SEQ_SEGMENT, "Error getting sequence segment: Failed to complement the reference sequence for the range %d - %d.\n", qRange.min(), qRange.max());
+          g_free(result);
+          return NULL;
+        }
+    }
+  
+  /* Reverse if requested. */
+  if (reverseResult)
+    {
+      g_strreverse(result);
+    }
+
+  /* Translate if we're going from a nucleotide seq to a peptide seq */
+  if (srcSeqType == BLXSEQ_DNA && destSeqType == BLXSEQ_PEPTIDE)
+    {
+      char *tmp = blxTranslate(result, geneticCode);
+          
+      g_free(result); /* delete the original because it's no longer required */
+      result = tmp;
+          
+      if (!result)
+        {
+          g_set_error(error, SEQTOOLS_ERROR, SEQTOOLS_ERROR_SEQ_SEGMENT,
+                      "Error getting the sequence segment: Failed to translate the DNA sequence for the reference sequence range %d - %d\n", 
+                      qRange.min(), qRange.max()) ;
+          
+          return NULL;
+        }
+    }
+  
+  if (!result)
+    {
+      g_set_error(error, SEQTOOLS_ERROR, SEQTOOLS_ERROR_SEQ_SEGMENT, "Failed to find sequence segment for the range %d - %d\n", qRange.min(), qRange.max());
+    }
+  
+  if (tmpError && *error != NULL)
+    {
+      prefixError(*error, tmpError->message);
+    }
+  else if (tmpError)
+    {
+      g_propagate_error(error, tmpError);
+    }
+
+  return result;
+}
+
+
+/* Invert the given coord's position within the given range. Only invert if the bool is true; otherwise
+ * returns the original coord */
+int invertCoord(const int coord, const IntRange* const range, const gboolean invert)
+{
+  int result = invert ? range->max() - coord + range->min() : coord;
+  return result;
+}
+
+
+
+/* Tries to return a fixed font from the list given in pref_families, returns
+ * the font family name if it succeeded in finding a matching font, FALSE otherwise.
+ * The list of preferred fonts is treated with most preferred first and least
+ * preferred last.  The function will attempt to return the most preferred font
+ * it finds.
+ *
+ * @param widget         Needed to get a context, ideally should be the widget you want to
+ *                       either set a font in or find out about a font for.
+ * @param pref_families  List of font families (as text strings).
+ * @return               font family name if font found, NULL otherwise.
+ */
+const char* findFixedWidthFontFamily(GtkWidget *widget, GList *pref_families)
+{
+  /* Find all the font families available */
+  PangoContext *context = gtk_widget_get_pango_context(widget) ;
+  PangoFontFamily **families;
+  gint n_families;
+  pango_context_list_families(context, &families, &n_families) ;
+  
+  /* Loop through the available font families looking for one in our preferred list */
+  gboolean found_most_preferred = FALSE;
+  gint most_preferred = g_list_length(pref_families);
+  PangoFontFamily *match_family = NULL;
+
+  gint family;
+  for (family = 0 ; (family < n_families && !found_most_preferred) ; family++)
+    {
+      const gchar *name = pango_font_family_get_name(families[family]) ;
+      
+      /* Look for this font family in our list of preferred families */
+      GList *pref = g_list_first(pref_families) ;
+      gint current = 1;
+      
+      while(pref)
+        {
+          char *pref_font = (char *)pref->data ;
+          
+          if (g_ascii_strncasecmp(name, pref_font, strlen(pref_font)) == 0
+#if GLIB_MAJOR_VERSION >= 1 && GLIB_MINOR_VERSION >= 4
+              && pango_font_family_is_monospace(families[family])
+#endif
+              )
+            {
+              /* We prefer ones nearer the start of the list */
+              if(current <= most_preferred)
+                {
+                  most_preferred = current;
+                  match_family = families[family];
+
+                  if(most_preferred == 1)
+                    {
+                      found_most_preferred = TRUE;
+                    }
+                }
+
+              break;
+            }
+          
+          pref = g_list_next(pref);
+          ++current;
+        }
+    }
+
+  const char *result = NULL;
+  if (match_family)
+    {
+      result = pango_font_family_get_name(match_family);
+      DEBUG_OUT("Using fixed-width font '%s'\n", result);
+    }
+  else
+    {
+      g_critical("Could not find a fixed-width font. Alignments may not be displayed correctly.\n");
+    }
+  
+  return result;
+}
+
+
+/* We need a fixed-width font for displaying alignments. Find one from a 
+ * list of possibilities. */
+const char* findFixedWidthFont(GtkWidget *widget)
+{
+  GList *fixed_font_list = NULL ;
+
+  /* g++ compiler gives an error if we don't cast away const */
+//  fixed_font_list = g_list_append(fixed_font_list, (void*)"inconsolata");
+//  fixed_font_list = g_list_append(fixed_font_list, (void*)"consolas");
+//  fixed_font_list = g_list_append(fixed_font_list, (void*)"droid sans mono");
+//  fixed_font_list = g_list_append(fixed_font_list, (void*)"proggy");
+//  fixed_font_list = g_list_append(fixed_font_list, (void*)"profont");
+  fixed_font_list = g_list_append(fixed_font_list, (void*)"Andale mono");
+  fixed_font_list = g_list_append(fixed_font_list, (void*)"Lucida sans typewriter");
+  fixed_font_list = g_list_append(fixed_font_list, (void*)"deja vu sans mono");
+  fixed_font_list = g_list_append(fixed_font_list, (void*)"DejaVu Sans Mono");
+  fixed_font_list = g_list_append(fixed_font_list, (void*)"Bitstream vera sans mono");
+  fixed_font_list = g_list_append(fixed_font_list, (void*)"monaco");
+  fixed_font_list = g_list_append(fixed_font_list, (void*)"Lucida console");
+  fixed_font_list = g_list_append(fixed_font_list, (void*)"Courier 10 pitch");
+  fixed_font_list = g_list_append(fixed_font_list, (void*)"Courier new");
+  fixed_font_list = g_list_append(fixed_font_list, (void*)"Courier");
+  fixed_font_list = g_list_append(fixed_font_list, (void*)"Monospace");
+  fixed_font_list = g_list_append(fixed_font_list, (void*)"fixed");
+  
+  const char *fontFamily = findFixedWidthFontFamily(widget, fixed_font_list);
+  g_list_free(fixed_font_list);
+
+  DEBUG_OUT("Set fixed-width font as '%s'\n", fontFamily);
+  return fontFamily;
+}
+
+
+/* Utility to get the character width and height of a given pango font */
+void getFontCharSize(GtkWidget *widget,
+                     PangoFontDescription *fontDesc,
+                     gdouble *width,
+                     gdouble *height,
+                     gboolean fixedWidthFont)
+{
+  PangoContext *context = gtk_widget_get_pango_context(widget);
+  PangoFontMetrics *metrics = pango_context_get_metrics(context, fontDesc, pango_context_get_language(context));
+
+  if (fixedWidthFont)
+    {
+      /* All chars are the same width so create a layout containing one char and find its
+       * size. It is important that we get an accurate width for fixed-width fonts because it is
+       * used to calculate character positions (for non-fixed-width fonts the approximate method
+       * below is probably better to get a representative size). */
+      PangoLayout *layout = gtk_widget_create_pango_layout(widget, "a");
+      pango_layout_set_font_description(layout, widget->style->font_desc);
+      int width_i = 0, height_i = 0;
+      pango_layout_get_pixel_size(layout, &width_i, &height_i);
+
+      if (width)
+        *width = (gdouble)width_i;
+
+      if (height)
+        *height = (gdouble)height_i;
+    }
+  else
+    {
+      if (height)
+        *height = (gdouble)(pango_font_metrics_get_ascent (metrics) + pango_font_metrics_get_descent (metrics)) / (gdouble)PANGO_SCALE;
+  
+      if (width)
+        *width = (gdouble)pango_font_metrics_get_approximate_digit_width(metrics) / (gdouble)PANGO_SCALE;
+    }
+  
+  pango_font_metrics_unref(metrics);
+}
+
+
+/***********************************************************
+ *                      Memory
+***********************************************************/
+
+/* Create a handle. A handle is just a GSList so should be initialised to NULL */
+BlxHandle handleCreate()
+{
+  BlxHandle handle = new BlxHandleStruct;
+  handle->memoryList = NULL;
+  return handle;
+}
+
+/* Utility to allocate memory of the given size with g_malloc. Returns the allocated memory and
+ * adds a pointer to it to the given handle (list), so that all memory allocated to this list can be destroyed
+ * with handleDestroy */
+gpointer handleAlloc(BlxHandle *handle, size_t numBytes)
+{
+  gpointer result = g_malloc(numBytes);
+  
+  /* prepend so that we delete data in reverse order */
+  (*handle)->memoryList = g_slist_prepend((*handle)->memoryList, result); 
+
+  return result;
+}
+
+/* Utilitiy to call g_free on all elements in the given handle. Frees the handle too and sets it to null. */
+void handleDestroy(BlxHandle *handle)
+{
+  DEBUG_ENTER("handleDestroy");
+
+  if (handle == NULL || *handle == NULL)
+    return;
+
+  GSList *listItem = (*handle)->memoryList;
+  for ( ; listItem; listItem = listItem->next)
+    {
+      g_free(listItem->data);
+      listItem->data = NULL;
+    }
+  
+  g_slist_free((*handle)->memoryList);
+  g_free(*handle);
+  *handle = NULL;
+  
+  DEBUG_EXIT("handleDestroy returning ");
+}
+
+
+/***********************************************************
+ *                      Toolbars
+***********************************************************/
+
+static void buttonAttach(GtkHandleBox *handlebox, GtkWidget *toolbar, gpointer data)
+{
+  gtk_widget_set_usize(toolbar, 1, -2);
+}
+
+
+static void buttonDetach(GtkHandleBox *handlebox, GtkWidget *toolbar, gpointer data)
+{
+  gtk_widget_set_usize(toolbar, -1, -2);
+}
+
+
+/* This creates a handle box where we can attach/detach a toolbar */
+GtkWidget *createToolbarHandle()
+{
+  GtkWidget *handleBox = gtk_handle_box_new();
+
+  /* this stops the toolbar forcing the size of the parent window */
+  g_signal_connect(GTK_OBJECT(handleBox), "child-attached", G_CALLBACK(buttonAttach), NULL);
+  g_signal_connect(GTK_OBJECT(handleBox), "child-detached", G_CALLBACK(buttonDetach), NULL);
+
+  return handleBox;
+}
+
+
+/* Makes the given widget into a toolbar item on the given toolbar.
+ * 'position' is the position; can be 0 to add to the start or -1 to add to the end. */
+GtkToolItem* addToolbarWidget(GtkToolbar *toolbar, GtkWidget *widget, const int position)
+{
+  GtkToolItem *toolItem = gtk_tool_item_new();
+  gtk_container_add(GTK_CONTAINER(toolItem), widget);
+  gtk_toolbar_insert(toolbar, toolItem, position);
+  
+  gtk_tool_item_set_visible_horizontal(toolItem, TRUE);
+  gtk_tool_item_set_visible_vertical(toolItem, TRUE);
+  gtk_tool_item_set_is_important(toolItem, TRUE);
+  
+  return toolItem;
+}
+
+
+
+/***********************************************************
+ * Customisation to GtkTextView to allow pango markup.     
+ * 
+ * Taken from https://bugzilla.gnome.org/show_bug.cgi?id=59390
+ * since this code hasn't been incorporated into GTK yet...
+ * 
+ ***********************************************************/
+
+static void gtk_text_buffer_real_insert_markup         (GtkTextBuffer     *buffer,
+                                                        GtkTextIter       *textiter,
+                                                        const gchar       *markup,
+                                                        GtkTextTag        *extratag);
+
+static void
+gtk_text_buffer_real_insert_markup (GtkTextBuffer *buffer,
+                                    GtkTextIter   *textiter,
+                                    const gchar   *markup,
+                                    GtkTextTag    *extratag)
+{
+ PangoAttrIterator  *paiter;
+  PangoAttrList      *attrlist;
+  GtkTextMark        *mark;
+  GError             *error = NULL;
+  gchar              *text;
+
+  g_return_if_fail (GTK_IS_TEXT_BUFFER (buffer));
+  g_return_if_fail (textiter != NULL);
+  g_return_if_fail (markup != NULL);
+  g_return_if_fail (gtk_text_iter_get_buffer (textiter) == buffer);
+
+  if (*markup == '\000')
+    return;
+
+  if (!pango_parse_markup(markup, -1, 0, &attrlist, &text, NULL, &error))
+    {
+      g_warning("Invalid markup string: %s", error->message);
+      g_error_free(error);
+      return;
+    }
+
+  if (attrlist == NULL)
+    {
+      gtk_text_buffer_insert(buffer, textiter, text, -1);
+      g_free(text);
+      return;
+    }
+
+  /* create mark with right gravity */
+  mark = gtk_text_buffer_create_mark(buffer, NULL, textiter, FALSE);
+
+  paiter = pango_attr_list_get_iterator(attrlist);
+
+  do
+    {
+      PangoAttribute *attr;
+      GtkTextTag     *tag;
+      gint            start, end;
+
+      pango_attr_iterator_range(paiter, &start, &end);
+
+      if (end == G_MAXINT)  /* last chunk */
+        end = start-1; /* resulting in -1 to be passed to _insert */
+
+      tag = gtk_text_tag_new(NULL);
+
+      if ((attr = pango_attr_iterator_get(paiter, PANGO_ATTR_LANGUAGE)))
+        g_object_set(tag, "language", pango_language_to_string(((PangoAttrLanguage*)attr)->value), NULL);
+
+      if ((attr = pango_attr_iterator_get(paiter, PANGO_ATTR_FAMILY)))
+        g_object_set(tag, "family", ((PangoAttrString*)attr)->value, NULL);
+
+      if ((attr = pango_attr_iterator_get(paiter, PANGO_ATTR_STYLE)))
+        g_object_set(tag, "style", ((PangoAttrInt*)attr)->value, NULL);
+
+      if ((attr = pango_attr_iterator_get(paiter, PANGO_ATTR_WEIGHT)))
+        g_object_set(tag, "weight", ((PangoAttrInt*)attr)->value, NULL);
+
+      if ((attr = pango_attr_iterator_get(paiter, PANGO_ATTR_VARIANT)))
+        g_object_set(tag, "variant", ((PangoAttrInt*)attr)->value, NULL);
+
+      if ((attr = pango_attr_iterator_get(paiter, PANGO_ATTR_STRETCH)))
+        g_object_set(tag, "stretch", ((PangoAttrInt*)attr)->value, NULL);
+
+      if ((attr = pango_attr_iterator_get(paiter, PANGO_ATTR_SIZE)))
+        g_object_set(tag, "size", ((PangoAttrInt*)attr)->value, NULL);
+
+      if ((attr = pango_attr_iterator_get(paiter, PANGO_ATTR_FONT_DESC)))
+        g_object_set(tag, "font-desc", ((PangoAttrFontDesc*)attr)->desc, NULL);
+
+      if ((attr = pango_attr_iterator_get(paiter, PANGO_ATTR_FOREGROUND)))
+        {
+          GdkColor col = { 0,
+                           ((PangoAttrColor*)attr)->color.red,
+                           ((PangoAttrColor*)attr)->color.green,
+                           ((PangoAttrColor*)attr)->color.blue
+                         };
+
+          g_object_set(tag, "foreground-gdk", &col, NULL);
+        }
+
+      if ((attr = pango_attr_iterator_get(paiter, PANGO_ATTR_BACKGROUND)))
+        {
+          GdkColor col = { 0,
+                           ((PangoAttrColor*)attr)->color.red,
+                           ((PangoAttrColor*)attr)->color.green,
+                           ((PangoAttrColor*)attr)->color.blue
+                         };
+
+          g_object_set(tag, "background-gdk", &col, NULL);
+        }
+
+      if ((attr = pango_attr_iterator_get(paiter, PANGO_ATTR_UNDERLINE)))
+        g_object_set(tag, "underline", ((PangoAttrInt*)attr)->value, NULL);
+
+      if ((attr = pango_attr_iterator_get(paiter, PANGO_ATTR_STRIKETHROUGH)))
+        g_object_set(tag, "strikethrough", (gboolean)(((PangoAttrInt*)attr)->value != 0), NULL);
+
+      if ((attr = pango_attr_iterator_get(paiter, PANGO_ATTR_RISE)))
+        g_object_set(tag, "rise", ((PangoAttrInt*)attr)->value, NULL);
+
+      /* PANGO_ATTR_SHAPE cannot be defined via markup text */
+
+      if ((attr = pango_attr_iterator_get(paiter, PANGO_ATTR_SCALE)))
+        g_object_set(tag, "scale", ((PangoAttrFloat*)attr)->value, NULL);
+
+      gtk_text_tag_table_add(gtk_text_buffer_get_tag_table(buffer), tag);
+
+      if (extratag)
+        {
+          gtk_text_buffer_insert_with_tags(buffer, textiter, text+start, end - start, tag, extratag, NULL);
+        }
+      else
+        {
+          gtk_text_buffer_insert_with_tags(buffer, textiter, text+start, end - start, tag, NULL);
+        }
+
+      /* mark had right gravity, so it should be
+       *  at the end of the inserted text now */
+      gtk_text_buffer_get_iter_at_mark(buffer, textiter, mark);
+    }
+  while (pango_attr_iterator_next(paiter));
+
+  gtk_text_buffer_delete_mark(buffer, mark);
+  pango_attr_iterator_destroy(paiter);
+  pango_attr_list_unref(attrlist);
+  g_free(text);
+}
+
+
+/**
+ * gtk_text_buffer_insert_markup:
+ * @buffer: a #GtkTextBuffer
+ * @iter: a position in the buffer
+ * @markup: nul-terminated UTF-8 format text with pango markup to insert
+ *
+ * Inserts the text in @markup at position @iter. @markup
+ * will be inserted in its entirety and must be nul-terminated
+ * and valid UTF-8. Emits the "insert_text" signal, possibly multiple
+ * times; insertion actually occurs in the default handler for
+ * the signal. @iter will point to the end of the inserted text
+ * on return
+ *
+ * Since: 2.6
+ **/
+
+void
+gtk_text_buffer_insert_markup (GtkTextBuffer *buffer,
+                               GtkTextIter   *iter,
+                               const gchar   *markup)
+{
+  gtk_text_buffer_real_insert_markup (buffer, iter, markup, NULL);
+}
+
+
+/**
+ * gtk_text_buffer_insert_markup_with_tag:
+ * @buffer: a #GtkTextBuffer
+ * @iter: a position in the buffer
+ * @markup: nul-terminated UTF-8 format text in pango markup format to insert
+ * @tag: additional text tag to apply to the whole text
+ *
+ * Just like <literal>gtk_text_buffer_insert_markup</literal>, only
+ * that an additional tag can be specified that is applied to the
+ * whole text to be inserted. This is useful to pass formatting
+ * options to the text buffer that cannot be specified with
+ * pango markup (e.g. text justification or wrap mode).
+ * @markup will be inserted in its entirety and must be
+ * nul-terminated and valid UTF-8 format
+ *
+ * Since: 2.6
+ **/
+
+void
+gtk_text_buffer_insert_markup_with_tag (GtkTextBuffer *buffer,
+                                        GtkTextIter   *iter,
+                                        const gchar   *markup,
+                                        GtkTextTag    *tag)
+{
+  gtk_text_buffer_real_insert_markup (buffer, iter, markup, tag);
+}
+
+
+/**
+ * gtk_text_buffer_set_markup:
+ * @buffer: a #GtkTextBuffer
+ * @markup: nul-terminated UTF-8 text with pango markup to insert
+ *
+ * Deletes current contents of @buffer, and inserts the text
+ * in @markup instead, which may contain pango markup.
+ * @markup will be inserted in its entirety and must be
+ * nul-terminated and valid UTF-8.
+ *
+ * Since: 2.6
+ **/
+
+void
+gtk_text_buffer_set_markup_with_tag (GtkTextBuffer *buffer,
+                                     const gchar   *markup,
+                                     GtkTextTag    *tag)
+{
+  GtkTextIter  start, end;
+
+  g_return_if_fail (GTK_IS_TEXT_BUFFER (buffer));
+  g_return_if_fail (markup != NULL);
+
+  if (*markup == '\000')
+    return;
+
+  gtk_text_buffer_get_bounds (buffer, &start, &end);
+
+  gtk_text_buffer_delete (buffer, &start, &end);
+
+  gtk_text_buffer_get_iter_at_offset (buffer, &start, 0);
+  gtk_text_buffer_insert_markup_with_tag (buffer, &start, markup, tag);
+}
+
+/**
+ * gtk_text_buffer_set_markup:
+ * @buffer: a #GtkTextBuffer
+ * @markup: nul-terminated UTF-8 text with pango markup to insert
+ *
+ * Deletes current contents of @buffer, and inserts the text
+ * in @markup instead, which may contain pango markup and must
+ * be valid UTF-8. @markup will be inserted in its entirety and
+ * must be nul-terminated.
+ *
+ * Since: 2.6
+ **/
+
+void
+gtk_text_buffer_set_markup (GtkTextBuffer *buffer,
+                            const gchar   *markup)
+{
+  gtk_text_buffer_set_markup_with_tag(buffer, markup, NULL);
+}
+
+
+/***********************************************************
+ *                     Message handlers
+ ***********************************************************/
+
+/* GLib doesn't have a convenience function to log a message with the 
+ * G_LOG_LEVEL_INFO flag, so this provides us one. In seqtools, this is usd
+ * to provide task progress messages that will be sent to stderr (as opposed
+ * to g_message, which is used for program output that is sent to stdout) */
+void g_message_info(const char *formatStr, ...)
+{
+  va_list argp;
+  va_start(argp, formatStr);
+  
+  g_logv(G_LOG_DOMAIN, G_LOG_LEVEL_INFO, formatStr, argp);
+  
+  va_end(argp);
+}
+
+
+static void printMessageToConsole(const char *prefixText, const char *message, GLogLevelFlags log_level)
+{
+  /* If debug is enabled, use DEBUG_OUT so that the output gets indented by
+   * the same amount as other DEBUG_OUT statements. */
+  
+#ifdef DEBUG
+  
+  DEBUG_OUT("%s%s", prefixText, (char*)message);
+  
+#else
+  
+  /* Print messages and debug to stdout; all warnings and info messages to stderr */
+  if (log_level & G_LOG_LEVEL_DEBUG || log_level & G_LOG_LEVEL_MESSAGE)
+    {
+      printf("%s%s", prefixText, (char*)message);
+      fflush(stdout);
+    }
+  else
+    {
+      fprintf(stderr, "%s%s", prefixText, (char*)message);
+      fflush(stderr);
+    }
+  
+#endif
+  
+}
+
+
+/* Default handler for GLib log messages (e.g. from g_message() etc.) */
+void defaultMessageHandler(const gchar *log_domain, GLogLevelFlags log_level, const gchar *message, gpointer data)
+{
+  const char *warningText = "Warning: ";
+  
+  const int len = strlen(warningText) + 1;
+  char prefixText[len];
+  prefixText[len - 1] = '\0';
+  
+  if (log_level & G_LOG_LEVEL_WARNING)
+    strcpy(prefixText, warningText);
+  else
+    prefixText[0] = '\0';
+  
+  /* print to console */
+  printMessageToConsole(prefixText, message, log_level);
+  
+  /* also display the message in the status bar (unless it's debug output) */
+  if (!(log_level & G_LOG_LEVEL_DEBUG))
+    {
+      BlxMessageData *msgData = data ? (BlxMessageData*)data : NULL;
+      GtkStatusbar *statusBar = msgData ? msgData->statusBar : NULL;
+      printMessageToStatusbar(message, statusBar);
+    }
+}
+
+
+/* Default handler for critical GLib log messages (i.e. from g_error and g_critical.) */
+void popupMessageHandler(const gchar *log_domain, GLogLevelFlags log_level, const gchar *message, gpointer data)
+{
+  const char *criticalText = "** Warning: ";
+  const char *errorText = "** Error: ";
+
+  const int len = max(strlen(criticalText), strlen(errorText)) + 1;
+  char prefixText[len];
+  prefixText[len - 1] = '\0';
+  
+  if (log_level & G_LOG_LEVEL_ERROR)
+    strcpy(prefixText, errorText);
+  else if (log_level & G_LOG_LEVEL_CRITICAL)
+    strcpy(prefixText, criticalText);
+  else
+    prefixText[0] = '\0';
+  
+  /* print to console */
+  printMessageToConsole(prefixText, message, log_level);
+
+  BlxMessageData *msgData = data ? (BlxMessageData*)data : NULL;
+  GtkWindow *parent = msgData ? msgData->parent : NULL;
+  GtkStatusbar *statusBar = msgData ? msgData->statusBar : NULL;
+  char *titlePrefix = msgData ? msgData->titlePrefix : NULL;
+  
+  /* also display in the status bar */
+  printMessageToStatusbar(message, statusBar);
+
+  /* Record each message in a list */
+  GSList **messageList = getMessageList();
+  
+  BlxMessage *blxMessage = createBlxMessage(message, log_level);
+  *messageList = g_slist_append(*messageList, blxMessage);
+  
+  /* Display as popup or in a scrolled list, whichever method is active */
+  if (getUseScrolledMessages())
+    {
+      displayMessageAsList(*messageList, titlePrefix ? titlePrefix : "", FALSE);
+    }
+  else
+    {
+      displayMessageAsPopup(message, log_level, titlePrefix ? titlePrefix : "", parent, statusBar);
+    }
+    
+  /* Exit elegantly if it's a fatal error */
+  if (log_level & G_LOG_LEVEL_ERROR)
+    exit(EXIT_FAILURE);
+}
+
+
+/* Print the given message to the given statusbar (passed as the user data May be null if the
+ * statusbar widget does not exist). */
+static void printMessageToStatusbar(const gchar *message, gpointer data)
+{
+  if (data && GTK_IS_STATUSBAR(data))
+    {
+      GtkStatusbar *statusBar = GTK_STATUSBAR(data);
+
+      /* Remove any newline chars */
+      char *displayText = g_strdup(message);
+      char *cp = strchr(displayText, '\n');
+      
+      while (cp)
+        {
+          *cp = ' ';
+          cp = strchr(displayText, '\n');
+        }
+          
+      guint contextId = gtk_statusbar_get_context_id(GTK_STATUSBAR(statusBar), "defaultMessages");
+      gtk_statusbar_pop(GTK_STATUSBAR(statusBar), contextId);
+      gtk_statusbar_push(GTK_STATUSBAR(statusBar), contextId, displayText);
+        
+      g_free(displayText);
+    }
+}
+
+
+/* Display a warning/error message as a popup */
+static void displayMessageAsPopup(const gchar *message, GLogLevelFlags log_level, const char *titlePrefix, GtkWindow *parent, GtkStatusbar *statusBar)
+{
+  char *title = g_strdup_printf("%s%s", titlePrefix, "Error");
+  
+  GtkWidget *dialog = gtk_dialog_new_with_buttons(title, 
+                                                  parent, 
+                                                  (GtkDialogFlags)(GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT),
+                                                  GTK_STOCK_OK,
+                                                  GTK_RESPONSE_ACCEPT,
+                                                  NULL);
+  
+  g_free(title);
+  gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT);
+  
+  GtkWidget *vbox = gtk_vbox_new(FALSE, 12);
+  gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), vbox, TRUE, TRUE, 0);
+  
+  GtkWidget *hbox = gtk_hbox_new(FALSE, 12);
+  gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
+  
+  GtkWidget *image = gtk_image_new_from_stock(getDialogIcon(log_level), GTK_ICON_SIZE_DIALOG);
+  gtk_box_pack_start(GTK_BOX(hbox), image, TRUE, TRUE, 0);
+  
+  GtkWidget *label = gtk_label_new(message);
+  gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
+  
+  GtkWidget *button = gtk_check_button_new_with_mnemonic("Switch to _scrolled message window");
+  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), getUseScrolledMessages());
+  widgetSetCallbackData(button, onSetUseScrolledMessages, NULL);
+  gtk_box_pack_start(GTK_BOX(vbox), button, TRUE, TRUE, 0);
+  
+  g_signal_connect(dialog, "response", G_CALLBACK(onResponseDialog), NULL);
+  
+  gtk_widget_show_all(vbox);
+  
+  /* Block until the user clears the dialog */
+  gtk_dialog_run(GTK_DIALOG(dialog));
+}
+
+
+/* Display a warning/error message in the scrolled message list */
+static void displayMessageAsList(GSList *messageList, const char *titlePrefix, const gboolean bringToFront)
+{
+  static GtkWidget *dialog = NULL;
+  static GtkWidget *button = NULL;
+  static GtkTextView *textView = NULL;
+  static GtkTextBuffer *textBuffer = NULL;
+  static GtkTextTag *normalTag = NULL;       /* for normal text */
+  static GtkTextTag *highlightTag = NULL;    /* for highlighting text */
+  
+  if (!dialog)
+    {
+      char *title = g_strdup_printf("%s%s", titlePrefix, "Errors");
+      
+      dialog = gtk_dialog_new_with_buttons(title, 
+                                           NULL, 
+                                           GTK_DIALOG_DESTROY_WITH_PARENT,
+                                           GTK_STOCK_OK,
+                                           GTK_RESPONSE_ACCEPT,
+                                           NULL);
+      g_free(title);
+      
+      /* Hide the widget instead of destroying it when it is closed */
+      g_signal_connect(G_OBJECT(dialog), "delete-event", G_CALLBACK(gtk_widget_hide_on_delete), NULL);
+      g_signal_connect(dialog, "response", G_CALLBACK(onResponseDialog), GINT_TO_POINTER(TRUE));
+      
+      GtkWidget *vbox = gtk_vbox_new(FALSE, 0);
+      gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), vbox, TRUE, TRUE, 0);
+      
+      /* Create the text view */
+      int width = 600;
+      int height = 180;
+      
+      GtkWidget *child = createScrollableTextView(NULL, FALSE, NULL, TRUE, NULL, &height, &textView);
+      gtk_box_pack_start(GTK_BOX(vbox), child, TRUE, TRUE, 0);
+      gtk_window_set_default_size(GTK_WINDOW(dialog), width, height);
+      textBuffer = gtk_text_view_get_buffer(textView);
+      
+      /* Always show the horizontal scrollbar, otherwise it can cover the last line in the list
+       * when it magically appears */
+      gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(child), GTK_POLICY_ALWAYS, GTK_POLICY_AUTOMATIC);
+      
+      /* Add some tags for normal/highlighted text */
+      normalTag = gtk_text_buffer_create_tag(textBuffer, NULL, "foreground", BLX_BLACK, NULL);
+      highlightTag = gtk_text_buffer_create_tag(textBuffer, NULL, "foreground", BLX_RED, NULL);
+      
+      /* Create a button to allow user to switch back to popup messages */
+      button = gtk_check_button_new_with_mnemonic("Switch to _popup messages");
+      widgetSetCallbackData(button, onSetUsePopupMessages, NULL);
+      gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 0);
+    }
+  else
+    {
+      /* Delete contents of text buffer */
+      GtkTextIter startIter;
+      GtkTextIter endIter;
+      gtk_text_buffer_get_start_iter(textBuffer, &startIter);
+      gtk_text_buffer_get_end_iter(textBuffer, &endIter);
+      
+      gtk_text_buffer_delete(textBuffer, &startIter, &endIter);
+    }
+  
+  gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT);
+  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), !getUseScrolledMessages());
+  
+  addMessagesToBuffer(messageList, textBuffer, normalTag, highlightTag);
+  
+  /* Don't bring the dialog to the front if it was already open, unless specifically requested. */
+  gtk_widget_show_all(dialog);
+  
+  if (bringToFront || !GTK_WIDGET_VISIBLE(dialog))
+    {
+      gtk_window_present(GTK_WINDOW(dialog));
+    }
+  
+  /* Scroll to the last line in the text view. We must make sure the text view height has
+   * been calculated first or gtk_text_view_scroll_to_iter might not do the correct thing. */
+  while(gtk_events_pending()) 
+    {
+      gtk_main_iteration();
+    }
+  
+  GtkTextIter textIter;
+  gtk_text_buffer_get_end_iter(textBuffer, &textIter);
+  gtk_text_view_scroll_to_iter(textView, &textIter, 0.0, FALSE, 0.0, 0.0);
+}
+
+
+/* Create a BlxMessage. Result should be destroyed with destroyBlxMessage. Timestamps the
+ * message with the current system time. */
+static BlxMessage* createBlxMessage(const char *text, const GLogLevelFlags logLevel)
+{
+  BlxMessage *blxMessage = new BlxMessage;
+  
+  blxMessage->text = g_strdup(text);
+  blxMessage->timestamp = time(NULL);
+  blxMessage->logLevel = logLevel;
+  
+  return blxMessage;
+}
+
+/* free the memory used by a blxMessage */
+static void destroyBlxMessage(BlxMessage **blxMessage)
+{
+  if (blxMessage && *blxMessage)
+    {
+      if ((*blxMessage)->text)
+        {
+          g_free((*blxMessage)->text);
+        }
+      
+      delete *blxMessage;
+    }
+}
+
+
+/* Get the message list. Creates the list the first time it is requested. */
+static GSList** getMessageList()
+{
+  static GSList *messageList = NULL;
+  
+  return &messageList;
+}
+
+
+/* Clear the message list, freeing any memory that it uses */
+void destroyMessageList()
+{
+  GSList **messageList = getMessageList();
+  
+  if (messageList && *messageList)
+    {
+      GSList *msgItem = *messageList;
+      for ( ; msgItem; msgItem = msgItem->next)
+        {
+          BlxMessage *blxMessage = (BlxMessage*)(msgItem->data);
+          destroyBlxMessage(&blxMessage);
+        }
+      
+      g_slist_free(*messageList);
+      *messageList = NULL;
+    }
+}
+
+
+/* Get the display text for a message, including the timestamp if 'incTimestamp' is true.
+ * The result should be free'd with g_free */
+static char* blxMessageGetDisplayText(const BlxMessage *msg, const gboolean incTimestamp)
+{
+  /* Use ctime to format the timestamp but cut off the newline char at the end. */
+  char *timeText = g_strdup(ctime(&msg->timestamp));
+  char *cutPoint = strchr(timeText, '\n');
+  if (cutPoint)
+    {
+      *cutPoint = '\0';
+    }
+  
+  char separatorText[] = " - "; /* separates timestamp from message body */
+  
+  char *result = (char*)g_malloc(strlen(msg->text) + strlen(separatorText) + strlen(timeText) + 1);
+  
+  sprintf(result, "%s%s%s", timeText, separatorText, msg->text);
+  
+  return result;
+}
+
+
+/* Add each BlxMessage in the given list to the given text buffer */
+static void addMessagesToBuffer(GSList *messageList, 
+                                GtkTextBuffer *textBuffer, 
+                                GtkTextTag *normalTag, 
+                                GtkTextTag *highlightTag)
+{
+  GSList *msgItem = messageList;  
+  
+  for ( ; msgItem; msgItem = msgItem->next)
+    {
+      const BlxMessage *msg = (const BlxMessage*)(msgItem->data);
+      
+      /* If it's the last in the list, highlight it. */
+      GtkTextTag *tag = (msgItem->next == NULL ? highlightTag : normalTag);
+      
+      char *displayText = blxMessageGetDisplayText(msg, TRUE);
+      
+      GtkTextIter endIter;
+      gtk_text_buffer_get_end_iter(textBuffer, &endIter);
+      gtk_text_buffer_insert_with_tags(textBuffer, &endIter, displayText, -1, tag, NULL);
+      
+      g_free(displayText);
+    }
+}
+
+
+/* Internal function to get a pointer to the useScrolledMessages flag. Creates the flag the first 
+ * time it is requested.  */
+static gboolean* getUseScrolledMessagesPtr()
+{
+  static gboolean useScrolledMessages = FALSE;
+  return &useScrolledMessages;
+}
+
+
+/* Access function to set the 'use scrolled messages' flag */
+static gboolean getUseScrolledMessages()
+{
+  return *getUseScrolledMessagesPtr();
+}
+
+/* Access function to set the 'use scrolled messages' flag */
+static void setUseScrolledMessages(const gboolean newValue)
+{
+  gboolean *useScrolledMessages = getUseScrolledMessagesPtr();
+  *useScrolledMessages = newValue;
+}
+
+
+/* Called when user requests to view messages as a list */
+static gboolean onSetUseScrolledMessages(GtkWidget *button, const gint responseId, gpointer data)
+{
+  const gboolean useScrolledMessages = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button));
+  setUseScrolledMessages(useScrolledMessages);
+  return TRUE;
+}
+
+
+/* Called when user requests to view messages as popups */
+static gboolean onSetUsePopupMessages(GtkWidget *button, const gint responseId, gpointer data)
+{
+  const gboolean usePopupMessages = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button));
+  setUseScrolledMessages(!usePopupMessages);
+  return TRUE;
+}
+
+
+/* Utility to return the stock icon to use for a dialog for a given message severity */
+static const char* getDialogIcon(GLogLevelFlags log_level)
+{
+  const char *result = NULL;
+  
+  if (log_level & G_LOG_LEVEL_ERROR)
+        result = GTK_STOCK_DIALOG_ERROR;
+  else if (log_level & G_LOG_LEVEL_CRITICAL || log_level & G_LOG_LEVEL_WARNING)
+        result = GTK_STOCK_DIALOG_WARNING;
+  else
+        result = GTK_STOCK_DIALOG_INFO;
+    
+  return result;
+}
+
+
+/***********************************************************
+ *                       Printing                          * 
+ ***********************************************************/
+
+/* Utility to get the drawable to print for the given widget */
+static GdkDrawable* getPrintDrawable(GtkWidget *widget, const gboolean cachedOnly)
+{
+  GdkDrawable *drawable = widget->window; /* draw everything by default */
+  
+  if (cachedOnly)
+    {
+      if (widgetGetDrawable(widget) && (GTK_IS_LAYOUT(widget) || GTK_IS_DRAWING_AREA(widget)))
+        {
+          /* We've been asked to print a drawing area, so print the cached drawable directly */
+          drawable = widgetGetDrawable(widget);
+        }
+      else if (GTK_IS_CONTAINER(widget))
+        {
+          /* Create a blank pixmap to draw the child widgets on to (clear any previous print first) */
+          widgetClearCachedDrawable(widget, NULL);
+          drawable = createBlankPixmap(widget);
+          gtk_container_foreach(GTK_CONTAINER(widget), collatePixmaps, widget);
+        }
+    }
+  
+  return drawable;
+}
+
+
+/* Get the scale required to fit the image to the required dimension */
+static double getPrintScale(GtkPrintContext *context, GdkDrawable *drawable, PrintScaleType scaleType)
+{
+  /* Get the page size */
+  double ctxWidth = gtk_print_context_get_width(context);
+  double ctxHeight = gtk_print_context_get_height(context);
+  
+  /* Get the image size */
+  int imgWidth, imgHeight;
+  gdk_drawable_get_size(drawable, &imgWidth, &imgHeight);
+  
+  double scale = 1;
+  
+  switch (scaleType)
+  {
+    case PRINT_FIT_WIDTH:
+      scale = ctxWidth / (double)imgWidth;
+      break;
+      
+    case PRINT_FIT_HEIGHT:
+      scale = ctxHeight / (double)imgHeight;
+      break;
+      
+    default:
+      scale = min(ctxWidth / (double)imgWidth, ctxHeight / (double)imgHeight);
+      break;
+  };
+  
+  scale = min(scale, 1.0); /* don't scale larger */
+  
+  return scale;
+}
+
+
+/* Called after the user clicks ok in the print dialog. Calcualtes the number
+ * of pages to print. The drawable to print is passed as the user data. */
+void onBeginPrint(GtkPrintOperation *print, GtkPrintContext *context, gpointer data)
+{
+  GdkDrawable *drawable = GDK_DRAWABLE(data);
+  double scale = getPrintScale(context, drawable, g_printScaleType);
+
+  /* Get the scaled image size */
+  int imgWidth, imgHeight;
+  gdk_drawable_get_size(drawable, &imgWidth, &imgHeight);
+  imgWidth = (int)((double)imgWidth * scale);
+  imgHeight = (int)((double)imgHeight * scale);
+
+  /* Get the page size */
+  double ctxWidth = gtk_print_context_get_width(context);
+  double ctxHeight = gtk_print_context_get_height(context);
+
+  /* Calculate the number of pages. We always scale to fit in at least one direction
+   * so we should only have multiple pages in one dimension. */
+  int numPages = 1;
+  
+  switch (g_printScaleType)
+  {
+    case PRINT_FIT_WIDTH:
+      numPages = ceil((double)imgHeight / ctxHeight);
+      break;
+      
+    case PRINT_FIT_HEIGHT:
+      numPages = ceil((double)imgWidth / ctxWidth);
+      break;
+      
+    default:
+      numPages = 1;
+      break;
+  };
+  
+  gtk_print_operation_set_n_pages(print, numPages);
+}
+
+
+/* This function is called recursively to combine all of the drawables for 
+ * any child widgets onto a single drawable for their top-level parent widget,
+ * which is passed as the user data. */
+void collatePixmaps(GtkWidget *widget, gpointer data)
+{
+  GtkWidget *parent = GTK_WIDGET(data);
+  GdkDrawable *drawable = widgetGetDrawable(widget);
+  
+  /* If this widget is visible and has a drawable set, draw it onto the window's drawable */
+  if (drawable && GTK_WIDGET_VISIBLE(widget))
+    {
+      /* Get the left edge of the widget in terms of the blixem window's coordinates */
+      int xSrc = 0, ySrc = 0;
+      int xDest, yDest;
+      gtk_widget_translate_coordinates(widget, parent, xSrc, ySrc, &xDest, &yDest);
+      
+      GdkGC *gc = gdk_gc_new(widget->window);
+      gdk_draw_drawable(widgetGetDrawable(parent), gc, drawable, xSrc, ySrc, xDest, yDest, -1, -1); /* -1 means full width/height */
+      g_object_unref(gc);
+    }
+  
+  /* If this widget is a container, recurse over its children */
+  if (GTK_IS_CONTAINER(widget))
+    {
+      gtk_container_foreach(GTK_CONTAINER(widget), collatePixmaps, parent);
+    }
+}
+
+
+/* Print handler - renders a specific page */
+void onDrawPage(GtkPrintOperation *print, GtkPrintContext *context, gint pageNum, gpointer data)
+{
+  GdkDrawable *drawable = GDK_DRAWABLE(data);
+  cairo_t *cr = gtk_print_context_get_cairo_context(context);
+
+  double scale = getPrintScale(context, drawable, g_printScaleType);
+  
+  double ctxWidth = gtk_print_context_get_width(context);
+  double ctxHeight = gtk_print_context_get_height(context);
+  ctxWidth /= scale;
+  ctxHeight /= scale;
+  
+  /* Get the coords on the image at which this page starts */
+  int x = 0;
+  int y = 0;
+
+  switch (g_printScaleType)
+  {
+    case PRINT_FIT_WIDTH:
+      y = pageNum * ctxHeight;
+      break;
+      
+    case PRINT_FIT_HEIGHT:
+      x = pageNum * ctxWidth;
+      break;
+      
+    default:
+      break;
+  };
+  
+  /* Create a new pixmap for drawing just the section for this page */
+  GdkDrawable *pagePixmap = gdk_pixmap_new(drawable, ctxWidth, ctxHeight, -1);
+  GdkGC *gc = gdk_gc_new(pagePixmap);
+  GdkColor bgColor;
+  gdk_color_parse("#ffffff", &bgColor);
+  gboolean failures[1];
+  gdk_colormap_alloc_colors(gdk_colormap_get_system(), &bgColor, 1, TRUE, TRUE, failures);
+  gdk_gc_set_foreground(gc, &bgColor);
+  gdk_draw_rectangle(pagePixmap, gc, TRUE, 0, 0, ctxWidth, ctxHeight);
+  
+  gdk_draw_drawable(pagePixmap, gc, drawable, x, y, 0, 0, ctxWidth, ctxHeight);
+  g_object_unref(gc);
+
+  /* Scale the image */
+  cairo_scale(cr, scale, scale); 
+  
+  /* Paint the image */
+  gdk_cairo_set_source_pixmap(cr, pagePixmap, 0, 0);
+  cairo_paint(cr);
+}
+
+
+/* This function initiates a print operation. It prints the given drawable if
+ * not null, otherwise it prints the given widget (which may be null if drawable is
+ * given).
+ *
+ * When printing a whole widget, the 'printCachedOnly' argument is an attempt to 
+ * de-clutter the print by only printing stuff we request by setting a cached
+ * drawable on it, i.e. so that we can exclude scrollbars etc. It works pretty well, 
+ * except for the case where you want to include transient items that are not part
+ * of the cached drawable in the print (such as the highlight box in blixem or the
+ * crosshair in dotter). It's up to the application to set its cached drawables and
+ * make sure they include everything necessary if they want to use this option, 
+ * otherwise we just draw everything. */
+void blxPrintWidget(GtkWidget *widget, 
+                    GdkDrawable *drawableIn,
+                    GtkWindow *window,
+                    GtkPrintSettings **printSettings, 
+                    GtkPageSetup **pageSetup, 
+                    const char *filename,
+                    const gboolean printCachedOnly,
+                    const PrintScaleType scaleType)
+{
+  g_printCachedOnly = printCachedOnly;
+  g_printScaleType = scaleType;
+  
+  /* Use the given drawable, if any; otherwise get the drawable from the widget */
+  GdkDrawable *drawable = drawableIn;
+  if (!drawable && widget)
+    drawable = getPrintDrawable(widget, printCachedOnly);
+
+  g_assert(drawable);
+
+  /* Create a print operation, using the same settings as the last print, if there was one */
+  GtkPrintOperation *print = gtk_print_operation_new();
+  GtkPrintOperationAction printAction = GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG;
+  
+  if (*printSettings != NULL)
+    gtk_print_operation_set_print_settings(print, *printSettings);
+  
+  if (*pageSetup)
+    gtk_print_operation_set_default_page_setup(print, *pageSetup);
+  
+  if (filename)
+    {
+      /* If a filename was given, export to that file (without showing the print dialog) */
+      g_message("Exporting graphical image to '%s'.\n", filename);
+      gtk_print_operation_set_export_filename(print, filename);
+      printAction = GTK_PRINT_OPERATION_ACTION_EXPORT;
+    }
+  
+  g_signal_connect (print, "begin_print", G_CALLBACK (onBeginPrint), drawable);
+  g_signal_connect(G_OBJECT(print), "draw-page", G_CALLBACK(onDrawPage), drawable);
+  
+  /* Pop up the print dialog */
+  GtkPrintOperationResult printResult = gtk_print_operation_run (print, printAction, window, NULL);
+  
+  /* If the user hit ok, remember the print settings for next time */
+  if (printResult == GTK_PRINT_OPERATION_RESULT_APPLY)
+    {
+      if (*printSettings != NULL)
+        {
+          g_object_unref(*printSettings);
+          *printSettings = NULL;
+        }
+      
+      *printSettings = (GtkPrintSettings*)g_object_ref(gtk_print_operation_get_print_settings(print));
+    }
+  
+  g_object_unref(print);
+}
+
+
+/* Recursively set the background color for the given widget and all its children */
+void setWidgetBackgroundColor(GtkWidget *widget, gpointer data)
+{
+  GdkColor *color = (GdkColor*)data;
+  GtkWidget *window = gtk_widget_get_toplevel(widget);
+  
+  window->style->bg[GTK_STATE_NORMAL] = *color;
+  gtk_widget_modify_bg(widget, GTK_STATE_NORMAL, color);
+  gtk_widget_modify_base(widget, GTK_STATE_NORMAL, color);
+  
+  if (GTK_IS_CONTAINER(widget))
+    {
+      gtk_container_foreach(GTK_CONTAINER(widget), setWidgetBackgroundColor, data);
+    }
+}
+
+
+/* Emits the size-allocate signal on the given widget */
+void forceResize(GtkWidget *widget)
+{
+  g_signal_emit_by_name(G_OBJECT(widget), "size-allocate", &widget->allocation);
+}
+
+
+/***********************************************************
+ *                       Combo boxes                       * 
+ ***********************************************************/
+
+/* Callback for when the value in a 2-column combo box has changed. 
+ * The value to update is an enum, a pointer to which is passed in the user
+ * data.
+ * This is called as a result of a response on a dialog, and the response
+ * function of the dialog is responsible for updating the display. */
+gboolean onComboChanged(GtkWidget *combo, const gint responseId, gpointer data)
+{
+  int *result = (int*)data;
+  GtkTreeIter iter;
+  
+  if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(combo), &iter))
+    {
+      GtkTreeModel *model = gtk_combo_box_get_model(GTK_COMBO_BOX(combo));
+      
+      GValue val = {0};
+      gtk_tree_model_get_value(model, &iter, COMBO_ENUM_COL, &val);
+      
+      *result = g_value_get_int(&val);
+    }
+  
+  return TRUE;
+}
+
+
+/* Utility to add an item to our 2-column combo box */
+void addComboItem(GtkComboBox *combo,
+                         GtkTreeIter *parent, 
+                         const int val,
+                         const char *text,
+                         const int initVal)
+{
+  GtkTreeStore *store = GTK_TREE_STORE(gtk_combo_box_get_model(combo));
+  
+  GtkTreeIter iter;
+  gtk_tree_store_append(store, &iter, parent);
+  
+  gtk_tree_store_set(store, &iter, COMBO_ENUM_COL, val, COMBO_TEXT_COL, text, -1);
+  
+  if (val == initVal)
+    {
+      gtk_combo_box_set_active_iter(combo, &iter);
+    }
+}
+
+
+/* Utility to create a 2-column combo box with column1 as an enum and column2 
+ * as a text description */
+GtkComboBox* createComboBox()
+{
+  /* Create a data-store for the combo box, and the combo itself */
+  GtkTreeStore *store = gtk_tree_store_new(N_COMBO_COLUMNS, G_TYPE_INT, G_TYPE_STRING);
+  GtkComboBox *combo = GTK_COMBO_BOX(gtk_combo_box_new_with_model(GTK_TREE_MODEL(store)));
+  g_object_unref(store);
+  
+  /* Create a cell renderer to display the text column. */
+  GtkCellRenderer *renderer = gtk_cell_renderer_text_new();
+  gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combo), renderer, FALSE);
+  gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combo), renderer, "text", COMBO_TEXT_COL, NULL);
+  
+  return combo;
+}
+
+
+/***********************************************************
+ *                       Files                             * 
+ ***********************************************************/
+
+/* Utility to ask the user for a file to save to. Returns the file name (or
+ * NULL if the user cancels). The current file name, default file path, 
+ * default file extension and dialog title can all be specified, or passed
+ * as null to use defaults. */
+const char* getSaveFileName(GtkWidget *widget, 
+                            const char *currentName,   
+                            const char *defaultPath,
+                            const char *defaultExtension,
+                            const char *title)
+{
+  const char *filename = NULL;
+  
+  GtkWindow *window = widget ? GTK_WINDOW(gtk_widget_get_toplevel(widget)) : NULL;
+  
+  GtkWidget *dialog = gtk_file_chooser_dialog_new (title ? title : "Save File",
+                                                   window,
+                                                   GTK_FILE_CHOOSER_ACTION_SAVE,
+                                                   GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+                                                   GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
+                                                   NULL);
+  
+  gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE);
+  
+  if (defaultPath)
+    {
+      gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), defaultPath);
+    }
+  
+  if (currentName)
+    {
+      gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), currentName);
+    }
+  else if (defaultExtension)
+    {
+      gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), defaultExtension);
+    }
+  
+  
+  if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
+    {
+      filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
+    }
+  
+  gtk_widget_destroy (dialog);
+  return filename;
+}
+
+
+/* Called when the text entry box on the file chooser dialog is
+ * changed. Updates the file-chooser button passed in the data
+ * to match .*/
+static void onFilenameEntered(GtkCellEditable *entry, gpointer data)
+{
+  GtkFileChooser *fileChooser = GTK_FILE_CHOOSER(data);
+  const char *filename = gtk_entry_get_text(GTK_ENTRY(entry));
+  gtk_file_chooser_set_filename(fileChooser, filename);
+}
+
+
+/* Called when the file-chooser button on the file chooser dialog is
+ * changed. Updates the text entry box passed in the data
+ * to match. */
+static void onFileChooserFileSet(GtkFileChooserButton *button, gpointer data)
+{
+  GtkEntry *entry = GTK_ENTRY(data);
+  const char *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(button));
+  gtk_entry_set_text(entry, filename);
+}
+
+
+/* Utility to ask the user for a file to load. Returns the file name (or
+ * NULL if the user cancels). The default file path and dialog title can be
+ * specified, or passed as null to use defaults. Result should be free'd using g_free */
+char* getLoadFileName(GtkWidget *widget, 
+                      const char *defaultPath,
+                      const char *title)
+{
+  char *filename = NULL;
+  uint defaultWidth = 60;
+  const int xpad = 2;
+  const int ypad = 2;
+
+  if (defaultPath && strlen(defaultPath) > defaultWidth)
+    defaultWidth = strlen(defaultPath);
+
+  GtkWindow *window = widget ? GTK_WINDOW(gtk_widget_get_toplevel(widget)) : NULL;
+  
+  GtkWidget *dialog = gtk_dialog_new_with_buttons(title, 
+                                                  window,
+                                                  (GtkDialogFlags)(GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT),
+                                                  GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+                                                  GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
+                                                  NULL);
+
+  gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT);
+
+  GtkBox *contentArea = GTK_BOX(GTK_DIALOG(dialog)->vbox);
+  GtkTable *table = GTK_TABLE(gtk_table_new(2, 2, FALSE));
+  gtk_box_pack_start(contentArea, GTK_WIDGET(table), FALSE, FALSE, 4);
+
+  GtkWidget *entry = gtk_entry_new();
+  gtk_entry_set_activates_default(GTK_ENTRY(entry), TRUE);
+  gtk_entry_set_width_chars(GTK_ENTRY(entry), defaultWidth);
+
+  gtk_table_attach(table, gtk_label_new("File name or URL: "), 0, 1, 0, 1, GTK_FILL, GTK_SHRINK, xpad, ypad); 
+  gtk_table_attach(table, entry, 1, 2, 0, 1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), GTK_SHRINK, xpad, ypad); 
+
+  GtkWidget *fileChooser = gtk_file_chooser_button_new(title, GTK_FILE_CHOOSER_ACTION_OPEN);
+  gtk_file_chooser_button_set_width_chars(GTK_FILE_CHOOSER_BUTTON(fileChooser), defaultWidth);
+
+  gtk_table_attach(table, gtk_label_new("Browse: "), 0, 1, 1, 2, GTK_FILL, GTK_SHRINK, xpad, ypad); 
+  gtk_table_attach(table, fileChooser, 1, 2, 1, 2, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), GTK_SHRINK, xpad, ypad); 
+  
+  if (defaultPath)
+    gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (fileChooser), defaultPath); 
+
+  /* Set callbacks so that the filechooser gets updated when the
+   * entry is changed and vice versa */
+  g_signal_connect(G_OBJECT(entry), "changed", G_CALLBACK(onFilenameEntered), fileChooser);
+  g_signal_connect(G_OBJECT(fileChooser), "file-set", G_CALLBACK(onFileChooserFileSet), entry);
+
+  gtk_widget_show_all(dialog);
+
+  if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
+    {
+      /* filechooser and entry should have the same value, so just
+       * look in the entry */
+      filename = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry)));
+    }
+  
+  gtk_widget_destroy (dialog);
+  return filename;
+}
+
+
+/***********************************************************
+ *                       Action groups                     * 
+ ***********************************************************/
+
+/* Utility to enable/disable an item in a menu. The action name must be the value of a valid action. */
+void enableMenuAction(GtkActionGroup *action_group, const char *actionName, const gboolean enable)
+{
+  GtkAction *action = gtk_action_group_get_action(action_group, actionName);
+  
+  if (!action)
+    g_warning("Error %s menu item: action '%s' not found.\n", (enable ? "enabling" : "disabling"), actionName);
+  else
+    gtk_action_set_sensitive(action, enable);
+}
+
+
+/* Utility to set the status of a toggle item in a menu. The action name must be the name 
+ * of a valid toggle action. */
+void setToggleMenuStatus(GtkActionGroup *action_group, const char *actionName, const gboolean active)
+{
+  GtkAction *action = gtk_action_group_get_action(action_group, actionName);
+  
+  if (!action)
+    {
+      g_warning("Error toggling menu item: action '%s' not found.\n", actionName);
+    }
+  else if (!GTK_IS_TOGGLE_ACTION(action))
+    {
+      g_warning("Error toggling menu item: action '%s' is not a valid toggle action.\n", actionName);
+    }
+  else
+    {
+      gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), active);
+    }
+}
+
+
+/* Utility to get the status of a toggle item in a menu. The action name must be the name 
+ * of a valid toggle action. */
+gboolean getToggleMenuStatus(GtkActionGroup *action_group, const char *actionName)
+{
+  gboolean result = FALSE;
+
+  GtkAction *action = gtk_action_group_get_action(action_group, actionName);
+  
+  if (!action)
+    {
+      g_warning("Error getting menu item: action '%s' not found.\n", actionName);
+    }
+  else if (!GTK_IS_TOGGLE_ACTION(action))
+    {
+      g_warning("Error getting toggle-menu item: action '%s' is not a valid toggle action.\n", actionName);
+    }
+  else
+    {
+      result = gtk_toggle_action_get_active(GTK_TOGGLE_ACTION(action));
+    }
+
+  return result;
+}
+
+
+/* Utility to set the status of a radio button item in a menu. The action name must be the name 
+ * of a valid toggle action. */
+void setRadioMenuStatus(GtkActionGroup *action_group, const char *actionName, const gint value)
+{
+  GtkAction *action = gtk_action_group_get_action(action_group, actionName);
+  
+  if (!action)
+    {
+      g_warning("Error toggling menu item: action '%s' not found.\n", actionName);
+    }
+  else if (!GTK_IS_RADIO_ACTION(action))
+    {
+      g_warning("Error toggling menu item: action '%s' is not a valid toggle action.\n", actionName);
+    }
+  else
+    {
+      gtk_radio_action_set_current_value(GTK_RADIO_ACTION(action), value);
+    }
+}
+
+/***********************************************************
+ *                       External calls                    * 
+ ***********************************************************/
+
+/* call an external shell command and print output in a text_scroll window
+ *
+ * This is a replacement for the old graph based text window, it has the advantage
+ * that it uses gtk directly and provides cut/paste/scrolling but...it has the
+ * disadvantage that it will use more memory as it collects all the output into
+ * one string and then this is _copied_ into the text widget.
+ * 
+ * If this proves to be a problem I expect there is a way to feed the text to the
+ * text widget a line a time. */
+GtkWidget* externalCommand (const char *command, const char *progName, GtkWidget *widget, GError **error)
+{
+  GtkWidget *resultWindow = NULL;
+
+#if !defined(MACINTOSH)
+  
+  GString *result = getExternalCommandOutput(command, error);
+  
+  if (!error || *error == NULL)
+    {
+      char *title = g_strdup_printf("%s - %s", progName, command);
+      resultWindow = displayFetchResults(title, result->str, widget, NULL, NULL);
+      
+      g_free(title);
+      g_string_free(result, TRUE);
+    }
+  
+
+#endif
+  
+  return resultWindow;
+}
+
+
+/* Execute the given external command and return the output from the 
+ * command.
+ * The result should be free'd with g_string_free. */
+GString* getExternalCommandOutput(const char *command, GError **error)
+{
+  GString *resultText = g_string_new(NULL) ;
+  gboolean ok = TRUE;
+  char *standardOutput = NULL;
+  GError *tmpError = NULL;
+
+  g_message_info("Calling external command: %s\n", command);
+
+  ok = g_spawn_command_line_sync(command,
+                                 &standardOutput,
+                                 NULL,
+                                 NULL,
+                                 &tmpError);
+
+  if (!ok || tmpError)
+    {
+      g_set_error(error, SEQTOOLS_ERROR, SEQTOOLS_ERROR_EXECUTING_CMD, "Error executing command: %s\n\n%s", 
+                  command, (tmpError ? tmpError->message : "<no error message>"));
+    }
+  else
+    {
+      g_string_append(resultText, standardOutput);
+    }
+
+  if (tmpError)
+    g_error_free(tmpError);
+
+  if (standardOutput)
+    g_free(standardOutput);
+
+  return resultText;
+}
+
+
+/* Display a message dialog showing the given display text. This
+ * utility function sets things like the font and default width
+ * based on properties of the main blixem window. Returns a pointer
+ * to the dialog, and optionally sets a pointer to the text buffer 
+ * in the textBuffer return argument.
+ * If the given dialog and text_buffer already contain values
+ * then those are updated rather than creating a new dialog */
+GtkWidget* displayFetchResults(const char *title, 
+                               const char *displayText, 
+                               GtkWidget *widget, 
+                               GtkWidget *dialog,
+                               GtkTextBuffer **text_buffer)
+{
+  GtkWidget *result = NULL;
+  
+  if (dialog && text_buffer && *text_buffer)
+    {
+      /* Just update the existing dialog and return that */
+      gtk_window_set_title(GTK_WINDOW(dialog), title);
+      gtk_text_buffer_set_text(*text_buffer, displayText, -1);
+      result = dialog;
+    }
+  else
+    {
+      /* Create a new dialog for the results */
+
+      /* Use a fixed-width font */
+      const char *fontFamily = findFixedWidthFont(widget);
+      PangoFontDescription *fontDesc = pango_font_description_from_string(fontFamily);
+      
+      int maxWidth = 300, maxHeight = 200;
+      gbtools::GUIGetTrueMonitorSizeFraction(widget, DEFAULT_PFETCH_WINDOW_WIDTH_FRACTION, DEFAULT_PFETCH_WINDOW_HEIGHT_FRACTION, &maxWidth, &maxHeight);
+      
+      GtkTextView *textView = NULL;
+      result = showMessageDialog(title, displayText, NULL, maxWidth, maxHeight, FALSE, FALSE, fontDesc, &textView);
+      
+      if (text_buffer && textView)
+        {
+          *text_buffer = gtk_text_view_get_buffer(textView);
+        }
+    }
+  
+  return result;
+}
+
+
+/* Utility function to calculate the width of a vertical scrollbar */
+int scrollBarWidth()
+{
+  static int result = UNSET_INT;
+  
+  if (result == UNSET_INT)
+    {
+      /* Create a temp scrollbar and find the default width from the style properties. */
+      GtkWidget *scrollbar = gtk_vscrollbar_new(NULL);
+      
+      gint sliderWidth = 0, separatorWidth = 0, troughBorder = 0, stepperSpacing = 0;
+      gtk_widget_style_get(scrollbar, "slider-width", &sliderWidth, NULL);
+      gtk_widget_style_get(scrollbar, "separator-width", &separatorWidth, NULL);
+      gtk_widget_style_get(scrollbar, "trough-border", &troughBorder, NULL);
+      gtk_widget_style_get(scrollbar, "stepper-spacing", &stepperSpacing, NULL);
+      
+      gtk_widget_destroy(scrollbar);
+      
+      result = sliderWidth + separatorWidth*2 + troughBorder*2 + stepperSpacing*2 + 4; /* to do: find out why the extra fudge factor is needed here */
+    }
+  
+  return result;
+}
+
+
+/* Utility to get the width and height of the given text as a pango layout
+ * on the given widget. Either width or height may be null if not required. 
+ * The results are in pixels. */
+void getTextSize(GtkWidget *widget, const char *text, int *width, int *height)
+{
+  if (widget && text && (width || height))
+    {
+      PangoLayout *layout = gtk_widget_create_pango_layout(widget, text);
+      pango_layout_get_size(layout, width, height);
+      g_object_unref(layout);
+      
+      if (width)
+        *width /= PANGO_SCALE;
+
+      if (height)
+        *height /= PANGO_SCALE;
+    }
+}
+
+
+/* Utility to get the width of the given text as a pango layout on the given
+ * widget. This is really just a convenience function for calling getTextSize. */
+int getTextWidth(GtkWidget *widget, const char *text)
+{
+  int width = 0;
+  getTextSize(widget, text, &width, NULL);
+  return width;
+}
+
+
+/* Utility to get the height of the given text as a pango layout on the given
+ * widget. This is really just a convenience function for calling getTextSize. */
+int getTextHeight(GtkWidget *widget, const char *text)
+{
+  int height = 0;
+  getTextSize(widget, text, NULL, &height);
+  return height;
+}
+
+
+/* Create a text entry box initialised with the given integer. Adds the entry
+ * to the given table. Optionally adds a label with the given mnemonic; if 
+ * a label is included it will be drawn at the column before the given 'col'
+ * Optionally also sets a callback which will be called on the dialog response
+ * (if it uses the standard onResponseDialog function or similar). */
+GtkWidget* createTextEntryFromInt(GtkWidget *widget,
+                                  GtkTable *table, 
+                                  const int row,
+                                  const int col,
+                                  const int xpad,
+                                  const int ypad,
+                                  const char *mnemonic,
+                                  const int value,
+                                  BlxResponseCallback callback)
+{
+  if (mnemonic)
+    {
+      GtkWidget *label = gtk_label_new_with_mnemonic(mnemonic);
+      gtk_misc_set_alignment(GTK_MISC(label), 1, 0);
+      gtk_table_attach(table, label, col - 1, col, row, row + 1, GTK_FILL, GTK_SHRINK, xpad, ypad);
+    }
+  
+  GtkWidget *entry = gtk_entry_new();
+  gtk_table_attach(table, entry, col, col + 1, row, row + 1, GTK_FILL, GTK_SHRINK, xpad, ypad);
+  
+  char *displayText = convertIntToString(value);
+  gtk_entry_set_text(GTK_ENTRY(entry), displayText);
+  gtk_entry_set_width_chars(GTK_ENTRY(entry), strlen(displayText) + 3);
+  
+  gtk_entry_set_activates_default(GTK_ENTRY(entry), TRUE);
+  
+  if (callback)
+    widgetSetCallbackData(entry, callback, widget);
+  
+  return entry;
+}
+
+
+/* Similar to createTextEntryFromInt, but for doubles */
+GtkWidget* createTextEntryFromDouble(GtkWidget *widget,
+                                     GtkTable *table, 
+                                     const int row,
+                                     const int col,
+                                     const int xpad,
+                                     const int ypad,
+                                     const char *mnemonic,
+                                     const double value,
+                                     BlxResponseCallback callback)
+{
+  if (mnemonic)
+    {
+      GtkWidget *label = gtk_label_new_with_mnemonic(mnemonic);
+      gtk_misc_set_alignment(GTK_MISC(label), 1, 0);
+      gtk_table_attach(table, label, col - 1, col, row, row + 1, GTK_FILL, GTK_SHRINK, xpad, ypad);
+    }
+  
+  GtkWidget *entry = gtk_entry_new();
+  gtk_table_attach(table, entry, col, col + 1, row, row + 1, GTK_FILL, GTK_SHRINK, xpad, ypad);
+  
+  /* Only display decimal places if not a whole number */
+  const int numDp = value - (int)value > 0 ? 1 : 0;
+  
+  char *displayText = convertDoubleToString(value, numDp);
+  gtk_entry_set_text(GTK_ENTRY(entry), displayText);
+  gtk_entry_set_width_chars(GTK_ENTRY(entry), strlen(displayText) + 3);
+  
+  gtk_entry_set_activates_default(GTK_ENTRY(entry), TRUE);
+  
+  if (callback)
+    widgetSetCallbackData(entry, callback, widget);
+  
+  return entry;
+}
+
+
+/* Callback for when a radio button with a secondary widget (passed as the user
+ * data) is toggled. It enables/disables the other widget according to whether
+ * the radio button is active or not. */
+static void onRadioButtonToggled(GtkWidget *button, gpointer data)
+{
+  GtkWidget *otherWidget = GTK_WIDGET(data);
+
+  if (otherWidget)
+    {
+      const gboolean isActive = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button));
+      //      gtk_widget_set_sensitive(otherWidget, isActive);
+
+      if (isActive)
+    {
+      GtkWindow *dialogWindow = GTK_WINDOW(gtk_widget_get_toplevel(button));
+      GtkWindow *mainWin = gtk_window_get_transient_for(dialogWindow);
+
+      gtk_window_set_focus(mainWin, otherWidget);
+    }
+    }
+}
+
+
+/* Callback when a text entry box in the groups dialog is clicked (for text that
+ * is associated with a radio button). Clicking the text box activates its radio button */
+static gboolean onRadioButtonTextEntered(GtkWidget *textWidget, GdkEventButton *event, gpointer data)
+{
+  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data), TRUE);
+
+  return FALSE;
+}
+
+
+/* Utility to create a radio button with certain given properties, and to pack it
+ * into the given container widget. Returns the radio button (so that further
+ * buttons can be created in the same group by passing it as 'existingButton').
+ * If entryList is passed, the new text entry widget is appended to it */
+GtkRadioButton* createRadioButton(GtkTable *table,
+                                  const int col,
+                                  const int row,
+                                   GtkRadioButton *existingButton,
+                                  const char *mnemonic,
+                                  const gboolean isActive,
+                                  const gboolean createTextEntry,
+                                  const gboolean multiline,
+                                  BlxResponseCallback callbackFunc,
+                                  GtkWidget *window,
+                                  GSList **entryList)
+{
+  GtkWidget *button = gtk_radio_button_new_with_mnemonic_from_widget(existingButton, mnemonic);
+
+  GtkBox *box = GTK_BOX(gtk_vbox_new(FALSE, 0));
+
+  gtk_table_attach(table, GTK_WIDGET(box), 
+                   col, col + 1, row, row + 1, 
+                   (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), 
+                   (GtkAttachOptions)((multiline ? GTK_EXPAND | GTK_FILL : GTK_SHRINK)), 
+                   TABLE_XPAD, TABLE_YPAD);
+
+  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), isActive);
+  gtk_box_pack_start(box, button, FALSE, FALSE, 0);
+
+  GtkWidget *entry = NULL;
+
+  if (createTextEntry && multiline)
+    {
+      /* Multi-line text buffer */
+      GtkTextBuffer *textBuffer = gtk_text_buffer_new(gtk_text_tag_table_new());
+      entry = gtk_text_view_new_with_buffer(GTK_TEXT_BUFFER(textBuffer));
+
+      /* Specify a min height */
+      const int numLines = 4;
+      const int charHeight = getTextHeight(entry, "A");
+      gtk_widget_set_size_request(entry, -1, roundNearest(charHeight * numLines));
+
+      GtkWidget *scrollWin = gtk_scrolled_window_new(NULL, NULL);
+      gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollWin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+
+      GtkWidget *frame = gtk_frame_new(NULL);
+      gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN);
+
+      gtk_container_add(GTK_CONTAINER(scrollWin), entry);
+      gtk_container_add(GTK_CONTAINER(frame), scrollWin);
+      gtk_box_pack_start(box, frame, TRUE, TRUE, 0);
+    }
+  else if (createTextEntry)
+    {
+      /* Single line text buffer */
+      entry = gtk_entry_new();
+      gtk_entry_set_activates_default(GTK_ENTRY(entry), TRUE);
+      gtk_box_pack_start(box, entry, FALSE, FALSE, 0);
+    }
+
+  if (entry)
+    {
+      if (entryList)
+        *entryList = g_slist_append(*entryList, entry);
+
+      /* to do: don't want to set insensitive because want to receive clicks on text
+       * box to activate it; however, it would be good to grey out the background */
+//      gtk_widget_set_sensitive(entry, isActive);
+
+      if (isActive)
+        {
+          gtk_window_set_focus(GTK_WINDOW(window), entry);
+        }
+
+      g_signal_connect(G_OBJECT(button), "toggled", G_CALLBACK(onRadioButtonToggled), entry);
+      g_signal_connect(G_OBJECT(entry), "focus-in-event", G_CALLBACK(onRadioButtonTextEntered), button);
+    }
+
+  /* Add the callback data. This specifies what callback to use when the dialog is ok'd. */
+  widgetSetCallbackData(button, callbackFunc, entry);
+
+  return GTK_RADIO_BUTTON(button);
+}
+
+
+/* Utility to extract the contents of a GtkEntry and return it as a string. The result is
+ * owned by the GtkTextEntry and should not be free'd. */
+const char* getStringFromTextEntry(GtkEntry *entry)
+{
+  const char *result = NULL;
+
+  if (!entry || !GTK_WIDGET_SENSITIVE(GTK_WIDGET(entry)))
+    {
+      g_warning("Could not set search string: invalid text entry box\n");
+    }
+  else
+    {
+      result = gtk_entry_get_text(entry);
+    }
+
+  return result;
+}
+
+
+/* Recursively set the font size for this widget and all its children */
+void widgetSetFontSize(GtkWidget *widget, gpointer data)
+{
+  if (!widget)
+    return;
+  
+  int newSize = GPOINTER_TO_INT(data);
+  
+  pango_font_description_set_size(widget->style->font_desc, newSize * PANGO_SCALE);
+  gtk_widget_modify_font(widget, widget->style->font_desc);
+  
+  if (GTK_IS_CONTAINER(widget))
+    gtk_container_foreach(GTK_CONTAINER(widget), widgetSetFontSize, data);
+}
+
+
+/* Utility to set the font size of the given widget to the given size (in
+ * points) and check that the new size is within sensible limits; otherwise 
+ * does nothing. */
+void widgetSetFontSizeAndCheck(GtkWidget *belvuAlignment, const int newSize)
+{
+  if (newSize >= MIN_FONT_SIZE && newSize <= MAX_FONT_SIZE)
+    {
+      widgetSetFontSize(belvuAlignment, GINT_TO_POINTER(newSize));
+    }
+}
+
+
+/***********************************************************
+ *                          Scale                          * 
+ ***********************************************************/
+
+/* Utility to draw a horizontal scale. Currently limited to draw a minor
+ * tickmark at every value in the given range. (Could be improved to allow
+ * minor tickmarks at larger intervals.) */
+void drawHScale(GtkWidget *widget, 
+                GdkDrawable *drawable,
+                const IntRange* const range, /* the range of values to draw */
+                const GdkRectangle* const rect, /* the drawing area */
+                const int widthPerVal,       /* the width between each value in the range */
+                const int majorTickInterval, /* how many values at which to draw major tickmarks */
+                const int labelInterval,     /* how many values at which to draw labels */
+                const int minorTickHeight,
+                const int majorTickHeight)
+{
+  GdkGC *gc = gdk_gc_new(drawable);
+  
+  int y = rect->y;
+  const int yBottom = y + rect->height;            /* bottom pos of tickmarks */
+  const int yTopMajor = yBottom - majorTickHeight; /* top position of major tickmarks */
+  const int yTopMinor = yBottom - minorTickHeight; /* top position of major tickmarks */
+  
+  int x = rect->x + widthPerVal / 2;
+  int tickmarkVal = range->min();
+
+  for ( ; tickmarkVal <= range->max(); ++tickmarkVal, x += widthPerVal)
+    {
+      const gboolean major = (tickmarkVal % majorTickInterval == 0);
+      const gboolean drawLabel = (tickmarkVal % labelInterval == 0);
+      
+      /* Draw the tick mark */
+      const int yTop = (major ? yTopMajor : yTopMinor);
+      gdk_draw_line(drawable, gc, x, yTop, x, yBottom);
+      
+      if (drawLabel)
+        {
+          char *tmpStr = g_strdup_printf("%d", tickmarkVal);
+          PangoLayout *layout = gtk_widget_create_pango_layout(widget, tmpStr);
+          g_free(tmpStr);
+          
+          /* Centre the text on the tick-mark position */
+          int width;
+          pango_layout_get_pixel_size(layout, &width, NULL);
+          
+          gdk_draw_layout(drawable, gc, x - width / 2, y, layout);
+          g_object_unref(layout);
+        }
+    }
+  
+  /* Draw a horizontal separator line */
+  y = yBottom - 1;
+  x = 0;
+  gdk_draw_line(drawable, gc, x, y, x + rect->width, y);
+  
+  g_object_unref(gc);
+}
+
+
+/* Get the temp directory. Some systems seem to have a trailing slash, 
+ * some not, so if it has one then remove it... */
+const char *getSystemTempDir()
+{
+  static char *tmpDir = NULL;
+
+  if (!tmpDir)
+    {
+      tmpDir = g_strdup(g_get_tmp_dir());
+      
+      if (tmpDir[strlen(tmpDir) - 1] == '/')
+        tmpDir[strlen(tmpDir) - 1] = '\0';
+    }
+
+  return tmpDir;
+}
+
+
+/***********************************************************
+ *                       Error handling                    * 
+ ***********************************************************/
+
+void errorHandler(const int sig) 
+{
+  fprintf(stderr, "Error: signal %d:\n", sig);
+  fflush(stderr);
+
+#ifdef HAVE_EXECINFO_H
+  // get void*'s for all entries on the stack
+  void *array[10];
+  size_t size = backtrace(array, 10);
+
+  // print out all the frames to stderr
+  backtrace_symbols_fd(array, size, 2);
+#else
+  fprintf(stderr, "Cannot print backtrace\n");
+  fflush(stderr);
+#endif
+
+  exit(EXIT_FAILURE);
+}
+
+
diff --git a/seqtoolsUtils/utilities.hpp b/seqtoolsUtils/utilities.hpp
new file mode 100644
index 0000000..200cc09
--- /dev/null
+++ b/seqtoolsUtils/utilities.hpp
@@ -0,0 +1,698 @@
+/*  File: utilities.h
+ *  Author: Gemma Barson, 2010-01-05
+ *  Copyright (c) 2010 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: Utility functions for the SeqTools package.
+ *----------------------------------------------------------------------------
+ */
+ 
+#ifndef _utilities_h_included_
+#define _utilities_h_included_
+
+#include <gtk/gtk.h>
+
+#define UNSET_INT                     -1   /* this value indicates an unset integer */
+#define DEFAULT_LABEL_X_PAD           0    /* default x padding to use for header labels */
+#define DEFAULT_PRINT_RESOLUTION      300  /* default resolution for printing in DPI */
+#define TABLE_XPAD                    12      /* default x padding around table elements */
+#define TABLE_YPAD                    2       /* default y padding around table elements */
+#define MIN_FONT_SIZE                 2
+#define MAX_FONT_SIZE                 20
+#define MACHINE_RES                   0.000000001
+#define SEQTOOLS_GFF_VERSION          3    /* the default GFF version */
+
+
+/* Really the buffers that use this should be dynamic but I'm not going to do that, this
+ * code is so poor that it doesn't warrant the effort.... */
+#define NAMESIZE      12
+#define MAXLINE       10000
+
+
+/* Utility macro to check that our gtk version meets the given minimum version. Use this in
+ * an #if statement */
+#define CHECK_GTK_VERSION(MAJOR, MINOR) GTK_MAJOR_VERSION > (MAJOR) || (GTK_MAJOR_VERSION == (MAJOR) && GTK_MINOR_VERSION >= (MINOR))
+
+
+/* Debug logging macros. #define DEBUG to enable debug output. */
+#ifdef DEBUG
+#define DEBUG_OUT(format, args...) debugLogLevel(0); printf(format, ##args); fflush(stdout);
+#else
+#define DEBUG_OUT(format, args...)
+#endif
+
+#ifdef DEBUG
+#define DEBUG_ENTER(format, args...) debugLogLevel(1); printf("-->"); printf(format, ##args); printf("\n"); fflush(stdout);
+#else
+#define DEBUG_ENTER(format, args...)
+#endif
+
+#ifdef DEBUG
+#define DEBUG_EXIT(format, args...) debugLogLevel(-1); printf("<--"); printf(format, ##args); printf("\n"); fflush(stdout);
+#else
+#define DEBUG_EXIT(format, args...)
+#endif
+
+
+/* Generic SeqTools error domain */
+#define SEQTOOLS_ERROR g_quark_from_string("SeqTools")
+
+/* Error codes */
+typedef enum
+{
+  SEQTOOLS_ERROR_PARSING_COLOR,       /* error parsing color string */
+  SEQTOOLS_ERROR_SEQ_SEGMENT,         /* error getting the requested segment of a sequence */
+  SEQTOOLS_ERROR_NO_STYLE,            /* style does not exist */
+  SEQTOOLS_ERROR_EXECUTING_CMD,       /* error executing command */
+  SEQTOOLS_ERROR_SEQ_TYPE,            /* error determining sequence type */
+  SEQTOOLS_ERROR_NO_EXE       /* executable does not exist */
+} SeqToolsError;
+
+
+/* This enum defines the columns for a combo box with the common combination
+ * of two columns: an int relating to an enum, and a text description. */
+typedef enum _BlxComboColumns
+  {
+    COMBO_ENUM_COL,
+    COMBO_TEXT_COL,
+    N_COMBO_COLUMNS
+  } BlxComboColumns;
+
+
+/* Printing scale type - we can scale to fit the page width, or height, or both */
+typedef enum
+{
+  PRINT_FIT_WIDTH,
+  PRINT_FIT_HEIGHT,
+  PRINT_FIT_BOTH
+} PrintScaleType;
+
+
+
+#if defined(MACINTOSH)
+#define      SYSERR_FORMAT             "system error %d"
+#else
+#define      SYSERR_FORMAT             "system error %d - %s"
+#endif
+
+
+/* Special characters for displaying in sequences */
+#define SEQUENCE_CHAR_DELETION '.'   /* represents a deletion */
+#define SEQUENCE_CHAR_GAP      '-'   /* represents a gap. Note that gaps in the reference sequence will be highlighted as assembly gaps */
+#define SEQUENCE_CHAR_PAD      '-'   /* used for padding when the sequence is unavailable */
+#define SEQUENCE_CHAR_BLANK    '-'   /* used to display a blank when we're not interested in what the actual base is */
+#define SEQUENCE_CHAR_INVALID  ' '   /* used to replace non-utf8 characters (which GTK can't display) */
+#define SEQUENCE_CHAR_STOP     '*'   /* STOP codon */
+#define SEQUENCE_CHAR_MET      'M'   /* MET codon */
+
+
+/* Color strings that can be passed to create a GdkColor */
+#define BLX_BLACK             "#000000"
+#define BLX_WHITE             "#ffffff"
+
+#define BLX_GREY              "#bebebe"
+#define BLX_LIGHT_GREY        "#cacaca"
+#define BLX_VERY_LIGHT_GREY   "#eeeeee"
+#define BLX_DARK_GREY         "#929292"
+#define BLX_VERY_DARK_GREY    "#5f5f5f"
+
+#define BLX_YELLOW            "#ffff00" 
+#define BLX_DARK_YELLOW       "#d0d000"
+#define BLX_PALE_YELLOW       "#ffffcc"
+
+#define BLX_BLUE              "#0000ff"
+#define BLX_DARK_BLUE         "#000080"
+#define BLX_ROYAL_BLUE        "#4169e1"
+#define BLX_SKY_BLUE          "#87cefa"
+#define BLX_PALE_BLUE         "#c0d8f0"
+#define BLX_CYAN              "#15ced2"
+#define BLX_LIGHT_CYAN        "#6defe9"
+#define BLX_VIOLET            "#78b4f0"
+#define BLX_DARK_VIOLET       "#5c98d5"
+#define BLX_MID_BLUE          "#6495ED"
+#define BLX_SLATE_BLUE        "#7C7FFF"
+
+#define BLX_RED               "#ff0000"
+#define BLX_LIGHT_RED         "#ff7373"
+#define BLX_SALMON_RED        "#ffa07a"
+#define BLX_DARK_RED          "#800000"
+#define BLX_VERY_DARK_RED     "#400000"
+#define BLX_ORANGE_RED        "#ff4500"
+#define BLX_ORANGE            "#ffa500"
+#define BLX_PALE_ORANGE       "#ff9c00"
+#define BLX_MAGENTA           "#ff00ff"
+#define BLX_PALE_MAGENTA      "#ffccff"
+#define BLX_PURPLE            "#A020F0"
+#define BLX_PALE_VIOLET       "#EE82EE"
+#define BLX_CERISE            "#DE3163"
+
+#define BLX_GREEN             "#00ff00"
+#define BLX_LIGHT_GREEN       "#C1FFC1" 
+#define BLX_LAWN_GREEN        "#7cfc00"
+#define BLX_DARK_GREEN        "#00bb00"
+#define BLX_VERY_DARK_GREEN   "#015800"
+
+#define BLX_BROWN             "#A52A2A"
+
+typedef struct _BlxColor
+  {
+    char *name;                   /* meaningful name for the color e.g. "Match" */
+    char *desc;                   /* meaningful description for what the color is used for e.g. "background color for exact matches" */
+
+    gboolean transparent;         /* If this is true, the colors are not specified and the
+                                   * background color should be used instead. */
+
+    /* If the overridden flags are true, transparency has been overridden and the 
+     * colors ARE set but should only be used where transparency is
+     * not allowed. */
+    gboolean normal_overridden;
+    gboolean selected_overridden;
+    gboolean print_overridden;
+    gboolean printSelected_overridden;
+
+    GdkColor normal;              /* the color in normal operation */
+    GdkColor selected;            /* the color in a selected state */
+    GdkColor print;               /* the color used for printing */
+    GdkColor printSelected;       /* the selected-state color used for printing */
+  } BlxColor;
+  
+  
+/* This handle holds a list of pointers to all memory allocated via this handle. 
+ * Use handleDestroy to free the handle and all its allocated memory. */
+typedef struct _BlxHandle
+  {
+    GSList *memoryList;
+  } BlxHandleStruct, *BlxHandle;
+  
+  
+/* This struct is used to pass user data to the message handlers */
+typedef struct _BlxMessageData
+{
+  char *titlePrefix;
+  GtkWindow *parent;
+  GtkStatusbar *statusBar;
+} BlxMessageData;
+  
+  
+/* Define a drawing style for an MSP */
+typedef struct _BlxStyle
+  {
+    char *styleName;
+    BlxColor fillColor;
+    BlxColor lineColor;
+    BlxColor fillColorUtr; /* used only for transcript features; fillColor and lineColor are for CDS portions and these are for UTR portions */
+    BlxColor lineColorUtr; /* used only for transcript features; fillColor and lineColor are for CDS portions and these are for UTR portions */
+  } BlxStyle;
+
+/* Utility structs to hold a range of integers/doubles */
+class IntRange
+{
+public:
+  // Constructors
+  IntRange() : m_min(0), m_max(0), m_min_is_set(false), m_max_is_set(false) {};
+  IntRange(const IntRange &range);
+  IntRange(const IntRange *range);
+  IntRange(const int val1, const int val2);
+
+  // Access functions
+  bool isSet() const;
+  int start(const bool rev = false, const bool negate = false) const;
+  int end(const bool rev = false, const bool negate = false) const;
+  int min(const bool inclusive = false, const bool rev = false) const;
+  int max(const bool inclusive = false, const bool rev = false) const;
+
+  int length() const;
+  int centre() const;
+
+  // Modify functions
+  void reset();
+  void set(const int val1, const int val2);
+  void set(const IntRange &range);
+  void set(const IntRange *range);
+  bool setMin(const int val);
+  bool setMax(const int val);
+
+  void sort(const bool forwards = false);
+  void boundsLimit(const IntRange* const limit, const gboolean maintainLen);
+
+private:
+  int m_min;
+  int m_max;
+
+  bool m_min_is_set;
+  bool m_max_is_set;
+};
+
+typedef struct _DoubleRange
+  {
+    gdouble min;
+    gdouble max;
+  } DoubleRange ;
+  
+
+/* Fundamental strand direction. */
+typedef enum
+  {
+    BLXSTRAND_NONE, 
+    BLXSTRAND_FORWARD, 
+    BLXSTRAND_REVERSE
+  } BlxStrand ;
+  
+/* Fundamental type of sequence (DNA really means nucleotide, because it could be RNA as well). */
+typedef enum
+  {
+    BLXSEQ_NONE, 
+    BLXSEQ_DNA, 
+    BLXSEQ_PEPTIDE
+  } BlxSeqType ;
+
+/* Fundamental blast mode used */
+typedef enum
+  {
+    BLXMODE_UNSET, 
+    BLXMODE_BLASTX, 
+    BLXMODE_TBLASTX, 
+    BLXMODE_BLASTN, 
+    BLXMODE_TBLASTN, 
+    BLXMODE_BLASTP
+  } BlxBlastMode ;
+  
+
+/* Function pointer for callback functions used by widgets on dialog boxes. */
+typedef gboolean (*BlxResponseCallback)(GtkWidget *widget, const gint responseId, gpointer data);
+
+/* This struct holds generic callback information. It can be stored as a widget
+ * property and called on the widget on request (e.g. by a dialog when it applies changes). */
+typedef struct _CallbackData
+  {
+    BlxResponseCallback func;     /* Callback function to be called */
+    gpointer data;                /* User data to pass to the callback function */
+  } CallbackData;
+
+/* Custom dialog response types, which can be used in addition
+ * to the default types specified by GtkResponseType */
+typedef enum
+  {
+    BLX_RESPONSE_FORWARD, 
+    BLX_RESPONSE_BACK,
+    BLX_RESPONSE_RESET,
+    BLX_RESPONSE_CLEAR
+  } BlxResponseType;
+
+
+/* Class to hold a pair of coordinate ranges, one holding ref seq coords, the other match coords */
+class CoordRange
+{
+public:
+  CoordRange() : qStart(0), qEnd(0), sStart(0), sEnd(0) {};
+  
+  int qStart;     /* start coord on the reference (Query) seq */
+  int qEnd;       /* end coord on the reference (Query) seq */
+  int sStart;     /* start coord on the match (Subject) seq */
+  int sEnd;       /* end coord on the match (Subject) seq */
+};
+  
+
+/* Used to specify the degree of colinearity between two alignment blocks. */
+typedef enum
+  {
+    COLINEAR_INVALID,
+    COLINEAR_NOT,                                          /* blocks not colinear. */
+    COLINEAR_IMPERFECT,                                    /* blocks colinear but not contiguous. */
+    COLINEAR_PERFECT,                                      /* blocks colinear and contiguous. */
+    COLINEARITY_N_TYPE
+  } ColinearityType ;
+
+
+/* Supported drag-and-drop target types */
+typedef enum {TARGET_STRING, TARGET_URL} DragDropTargetType;
+
+
+GdkDrawable*          widgetGetDrawable(GtkWidget *widget);
+void                  widgetSetDrawable(GtkWidget *widget, GdkDrawable *drawable);
+gboolean              widgetGetHidden(GtkWidget *widget);
+void                  widgetSetHidden(GtkWidget *widget, const gboolean hidden);
+void                  hideUserHiddenWidget(GtkWidget *widget, gpointer data);
+void                  widgetClearCachedDrawable(GtkWidget *widget, gpointer data);
+void                  callFuncOnAllChildWidgets(GtkWidget *widget, gpointer data);
+
+void                  blxSetWidgetColor(GtkWidget* widget, const char *colorName);
+gboolean              onExposePrintable(GtkWidget *widget, GdkEventExpose *event, gpointer data);
+GtkWidget*            createLabel(const char *text, const gdouble xalign, const gdouble yalign, const gboolean ellipsize, const gboolean enableCopyPaste, const gboolean showWhenPrinting);
+GtkWidget*            getLabelWidget(GtkWidget *widget);
+void                  labelSetFont(GtkWidget *widget, PangoFontDescription *fontDesc);
+GdkDrawable*          createBlankPixmap(GtkWidget *widget);
+GdkDrawable*          createBlankSizedPixmap(GtkWidget *widget, GdkDrawable *window, const int width, const int height);
+
+gboolean              clickedInRect(GdkEventButton *event, GdkRectangle *rect, const int minWidth);
+
+BlxSeqType            determineSeqType(char *seq, GError **error);
+void                  argvAdd(int *argc, char ***argv, const char *s);
+char*                 getSystemErrorText();
+gpointer              handleAlloc(BlxHandle *handle, size_t numBytes);
+BlxHandle             handleCreate();
+void                  handleDestroy(BlxHandle *handle);
+BlxStyle*             getBlxStyle(const char *styleName, GSList *styles, GError **error);
+
+void                  sortValues(int *val1, int *val2, gboolean forwards);
+int                   numDigitsInInt(int val);
+
+gboolean              getColorFromString(const char *colorStr, GdkColor *color, GError **error);
+void                  getSelectionColor(const GdkColor* const origColor, GdkColor *result);
+void                  getDropShadowColor(const GdkColor* const origColor, GdkColor *result);
+void                  convertToGrayscale(const GdkColor* const origColor, GdkColor *result);
+void                  adjustColorBrightness(const GdkColor* const origColor, const double factor, GdkColor *result);
+
+void                  getCoordRangeExtents(CoordRange *range, int *qRangeMin, int *qRangeMax, int *sRangeMin, int *sRangeMax);
+
+gboolean              isDelimiter(const char c);
+char*                 removeDelimiters(char *text);
+GArray*               keyFileGetCsv(GKeyFile *keyFile, const char *group, const char *key, GError **error);
+
+void                  freeStringList(GList **stringList, const gboolean freeDataItems);
+
+void                  centreRangeOnCoord(IntRange *range, const int coord, const int length);
+gboolean              valueWithinRange(const int value, const IntRange* const range);
+gboolean              rangesOverlap(const IntRange* const range1, const IntRange* const range2);
+gboolean              rangesAdjacent(const IntRange* const range1, const IntRange* const range2);
+gboolean              rangesEqual(const IntRange* const range1, const IntRange* const range2);
+void                  boundsLimitValue(int *value, const IntRange* const range);
+gboolean              pointInRect(const int x, const int y, const GdkRectangle* const rect);
+char                  convertBaseToCorrectCase(const char charToConvert, const BlxSeqType seqType);
+
+void                  convertDisplayRangeToDnaRange(const IntRange* const displayRange, 
+                                                    const BlxSeqType displaySeqType,
+                                                    const int numFrames,
+                                                    const gboolean displayRev,
+                                                    const IntRange* const refSeqRange,
+                                                    IntRange *result);
+
+int                   convertDisplayIdxToDnaIdx(const int inputIdx, 
+                                                const BlxSeqType inputIdxType,
+                                                const int frame, 
+                                                const int baseNum, 
+                                                const int numFrames,
+                                                const gboolean displayRev,
+                                                const IntRange* const dnaIdxRange);
+
+int                   convertDnaIdxToDisplayIdx(const int dnaIdx, 
+                                                const BlxSeqType displaySeqType,
+                                                const int frame,
+                                                const int numFrames, 
+                                                const gboolean displayRev,
+                                                const IntRange* const dnaIdxRange,
+                                                int *baseNum);
+
+char                  getStrandAsChar(const BlxStrand strand);
+
+int                   roundNearest(const double val);
+int                   roundToValue(const int inputVal, const int roundTo);
+int                   roundToValueFromList(const int inputVal, GSList *roundValues, int *roundedTo);
+int                   roundUpToValueFromList(const int inputVal, GSList *roundValues, int *roundedTo);
+
+char                  getSequenceIndex(char *seq, 
+                                       const int qIdx, 
+                                       const gboolean complement, 
+                                       const IntRange* const seqRange,
+                                       const BlxSeqType seqType);
+
+int                   getStartDnaCoord(const IntRange* const displayRange, 
+                                       const int frame,
+                                       const BlxSeqType displaySeqType, 
+                                       const gboolean displayRev, 
+                                       const int numFrames,
+                                       const IntRange* const refSeqRange);
+
+int                   getEndDnaCoord(const IntRange* const displayRange, 
+                                     const int frame,
+                                     const BlxSeqType displaySeqType, 
+                                     const gboolean displayRev, 
+                                     const int numFrames,
+                                     const IntRange* const refSeqRange);
+
+int                   wildcardSearch(const char *textToSearch, const char *searchStr);
+
+char*                 convertIntToString(const int value);
+char*                 convertDoubleToString(const gdouble value, const int numDp);
+int                   convertStringToInt(const char *inputStr);
+gboolean              isWhitespaceChar(const char curChar);
+gboolean              isNewlineChar(const char curChar);
+char*                 abbreviateText(const char *inputStr, const int maxLen);
+gboolean              stringsEqual(const char *str1, const char *str2, const gboolean caseSensitive);
+gboolean              isValidIupacChar(const char inputChar, const BlxSeqType seqType);
+void                  stringProtect(GIOChannel *ioChannel, const char *string, GError **error);
+char*                 stringUnprotect(char **textp, char *target);
+
+int                   invertCoord(const int coord, const IntRange* const range, const gboolean invert);
+
+void                  popupMessageHandler(const gchar *log_domain, GLogLevelFlags log_level, const gchar *message, gpointer data);
+void                  defaultMessageHandler(const gchar *log_domain, GLogLevelFlags log_level, const gchar *message, gpointer data);
+void                  g_message_info(const char *formatStr, ...);
+
+GtkWidget*            showMessageDialog(const char *title,  
+                                        const char *messageText,
+                                        GtkWidget *parent,
+                                        const int initWidth,
+                                        const int maxHeight,
+                                        const gboolean wrapText,
+                                        const gboolean useMarkup,
+                                        PangoFontDescription *fontDesc,
+                                        GtkTextView **textView);
+
+void                    destroyMessageList();
+
+GtkWidget*              createScrollableTextView(const char *messageText,
+                                                 const gboolean wrapText,
+                                                 PangoFontDescription *fontDesc,
+                                                 const gboolean useMarkup,
+                                                 int *width,
+                                                 int *height,
+                                                 GtkTextView **textViewOut);
+                                    
+void                  widgetSetCallbackData(GtkWidget *widget, BlxResponseCallback callbackFunc, gpointer callbackData);
+gboolean              widgetCallAllCallbacks(GtkWidget *widget, gpointer data);
+void                  onResponseDialog(GtkDialog *dialog, gint responseId, gpointer data);
+void                  onCloseDialog(GtkDialog *dialog, gpointer data);
+void                  dialogClearContentArea(GtkDialog *dialog);
+GtkWidget*            getPersistentDialog(GtkWidget* dialogList[], const int dialogId);
+void                  addPersistentDialog(GtkWidget* dialogList[], const int dialogId, GtkWidget *widget);
+
+void                  setPrimaryClipboardText(const char *text);
+void                  setDefaultClipboardText(const char *text);
+void                  requestPrimaryClipboardText(GtkClipboardTextReceivedFunc callback, gpointer data);
+void                  requestDefaultClipboardText(GtkClipboardTextReceivedFunc callback, gpointer data);
+
+int                   parseMatchLine(const char *inputText,
+                                     char **matchNameOut,
+                                     int *matchStartOut, 
+                                     int *matchEndOut, 
+                                     int *matchLenOut);
+
+GList*                parseMatchList(const char *inputText);
+
+GtkWidget*            getNamedChildWidget(GtkWidget *widget, const gchar *searchName);
+
+gint                  runConfirmationBox(GtkWidget *blxWindow, const char *title, const char *messageText);
+
+void                  prefixError(GError *error, const char *prefixStr, ...);
+void                  postfixError(GError *error, const char *formatStr, ...);
+void                  reportAndClearIfError(GError **error, GLogLevelFlags log_level);
+
+#ifdef DEBUG
+void                  debugLogLevel(const int increaseAmt);
+#endif
+
+void                  drawRect(GdkDrawable *drawable, GdkColor *color, const int x, const int y, const int width, const int height, const double alpha, cairo_operator_t op);
+void                  drawHighlightBox(GdkDrawable *drawable, const GdkRectangle* const rect, const gint minWidth, GdkColor *color);
+
+void                  blxPrintWidget(GtkWidget *widget, GdkDrawable *drawable, GtkWindow *window, GtkPrintSettings **printSettings, GtkPageSetup **pageSetup, const char *filename, const gboolean printCachedOnly, const PrintScaleType scaleType);
+void                  setStatusBarShadowStyle(GtkWidget *statusBar, const char *shadowStyle);
+
+BlxColor*             getBlxColor(GArray *defaultColors, const int colorId);
+GdkColor*             getGdkColor(int colorId, GArray *defaultColors, const gboolean selected, const gboolean usePrintColors);
+GdkColor*             blxColorGetColor(BlxColor *blxColor, const gboolean selected, const gboolean usePrintColors);
+const GdkColor*       blxColorGetColor(const BlxColor *blxColor, const gboolean selected, const gboolean usePrintColors);
+gboolean              blxColorOverridden(const BlxColor *blxColor, const gboolean selected, const gboolean usePrintColors);
+gboolean              blxColorOverrideTransparency(BlxColor *dest, const BlxColor *source, const gboolean lighten, const gboolean selected, const gboolean usePrintColors);
+char*                 convertColorToString(GdkColor *color);
+void                  destroyBlxColor(BlxColor *blxColor);
+gboolean              colorsEqual(GdkColor *color1, GdkColor *color2);
+
+void                  createBlxColor(GArray *defaultColors,
+                                     int colorId,
+                                     const char *name, 
+                                     const char *desc, 
+                                     const char *normalCol, 
+                                     const char *printCol,
+                                     const char *normalColSelected,
+                                     const char *printColSelected);
+
+gdouble               pixelsPerBase(const gint displayWidth, 
+                                    const IntRange* const displayRange);
+
+gdouble               convertBaseIdxToRectPos(const gint dnaIdx, 
+                                              const GdkRectangle* const rect, 
+                                              const IntRange* const dnaDispRange,
+                                              const gboolean horizontal,
+                                              const gboolean displayRev,
+                                              const gboolean clip);
+
+gchar*                    getSequenceSegment(const char* const dnaSequence,
+                                             IntRange *qRange,
+                                             const BlxStrand strand,
+                                             const BlxSeqType srcSeqType,
+                                             const BlxSeqType destSeqType,
+                                             const int frame,
+                                             const int numFrames,
+                                             const IntRange* const refSeqRange,
+                                             const BlxBlastMode blastMode,
+                                             char **geneticCode,
+                                             const gboolean displayRev,
+                                             const gboolean reverseResult,
+                                             const gboolean allowComplement,
+                                             GError **error);
+
+const char*                        findFixedWidthFont(GtkWidget *widget);
+const char*                        findFixedWidthFontFamily(GtkWidget *widget, GList *pref_families);
+void                               getFontCharSize(GtkWidget *widget, PangoFontDescription *fontDesc, gdouble *width, gdouble *height, const gboolean fixedWidthFont = FALSE);
+
+GtkWidget*                         createToolbarHandle();
+GtkToolItem*                       addToolbarWidget(GtkToolbar *toolbar, GtkWidget *widget, const int position);
+
+void                               onBeginPrint(GtkPrintOperation *print, GtkPrintContext *context, gpointer data);
+void                               collatePixmaps(GtkWidget *widget, gpointer data);
+void                               onDrawPage(GtkPrintOperation *print, GtkPrintContext *context, gint pageNum, gpointer data);
+void                               setWidgetBackgroundColor(GtkWidget *widget, gpointer data);
+void                               propagateEventButton(GtkWidget *srcWidget, GtkWidget *destWidget, GdkEventButton *event);
+void                               propagateEventMotion(GtkWidget *srcWidget, GtkWidget *destWidget, GdkEventMotion *event);
+
+void                               forceResize(GtkWidget *widget);
+
+gboolean                           onComboChanged(GtkWidget *combo, const gint responseId, gpointer data);
+GtkComboBox*                       createComboBox();
+void                               addComboItem(GtkComboBox *combo, GtkTreeIter *parent, const int val, const char *text, const int initVal);
+
+const char*                        getSaveFileName(GtkWidget *widget, const char *currentName, const char *defaultPath, const char *defaultExtension, const char *title);
+char*                              getLoadFileName(GtkWidget *widget, const char *defaultPath, const char *title);
+
+void                               enableMenuAction(GtkActionGroup *action_group, const char *actionName, const gboolean enable);
+void                               setToggleMenuStatus(GtkActionGroup *action_group, const char *actionName, const gboolean active);
+gboolean                           getToggleMenuStatus(GtkActionGroup *action_group, const char *actionName);
+void                               setRadioMenuStatus(GtkActionGroup *action_group, const char *actionName, const gint value);
+
+GtkWidget*                         externalCommand(const char *command, const char *progName, GtkWidget *widget, GError **error);
+GString*                           getExternalCommandOutput(const char *command, GError **error);
+GtkWidget*                         displayFetchResults(const char *title, const char *displayText, GtkWidget *widget, GtkWidget *dialog, GtkTextBuffer **textBuffer);
+
+int                                scrollBarWidth();
+void                               getTextSize(GtkWidget *widget, const char *text, int *width, int *height);
+int                                getTextWidth(GtkWidget *widget, const char *text);
+int                                getTextHeight(GtkWidget *widget, const char *text);
+
+GtkWidget*                         createTextEntryFromInt(GtkWidget *widget,
+                                                          GtkTable *table, 
+                                                          const int row,
+                                                          const int col,
+                                                          const int xpad,
+                                                          const int ypad,
+                                                          const char *mnemonic,
+                                                          const int value,
+                                                          BlxResponseCallback callback);
+
+GtkWidget*                         createTextEntryFromDouble(GtkWidget *widget,
+                                                             GtkTable *table, 
+                                                             const int row,
+                                                             const int col,
+                                                             const int xpad,
+                                                             const int ypad,
+                                                             const char *mnemonic,
+                                                             const double value,
+                                                             BlxResponseCallback callback);
+
+void                               drawHScale(GtkWidget *widget, 
+                                              GdkDrawable *drawable,
+                                              const IntRange* const range,
+                                              const GdkRectangle* const rect,
+                                              const int widthPerVal,       
+                                              const int majorTickInterval, 
+                                              const int labelInterval,     
+                                              const int minorTickHeight,
+                                              const int majorTickHeight);
+
+const char*                        getStringFromTextEntry(GtkEntry *entry);
+void                               widgetSetFontSize(GtkWidget *widget, gpointer data);
+void                               widgetSetFontSizeAndCheck(GtkWidget *belvuAlignment, const int newSize);
+
+GtkRadioButton*                    createRadioButton(GtkTable *table,
+                                                     const int col,
+                                                     const int row,
+                                                      GtkRadioButton *existingButton,
+                                                     const char *mnemonic,
+                                                     const gboolean isActive,
+                                                     const gboolean createTextEntry,
+                                                     const gboolean multiline,
+                                                     BlxResponseCallback callbackFunc,
+                                                     GtkWidget *blxWindow,
+                                                     GSList **entryList);
+
+const char*                        getSystemTempDir();     
+
+void                               errorHandler(const int sig); 
+
+/* seqtoolsWebBrowser.c */
+gboolean                           seqtoolsLaunchWebBrowser(const char *link, GError **error);
+
+
+/* translate.c */
+char*                              blxTranslate(const char *seq, char **code);
+void                               blxComplement(char *seq) ;    
+char*                              revComplement(char *comp, char *seq) ;
+char                               complementChar(const char inputChar, GError **error);
+
+
+void    gtk_text_buffer_insert_markup             (GtkTextBuffer *buffer,
+                                                   GtkTextIter   *iter,
+                                                   const gchar   *markup);
+
+void    gtk_text_buffer_insert_markup_with_tag    (GtkTextBuffer *buffer,
+                                                   GtkTextIter   *iter,
+                                                   const gchar   *markup,
+                                                   GtkTextTag    *tag);
+
+void    gtk_text_buffer_set_markup_with_tag       (GtkTextBuffer *buffer,
+                                                   const gchar   *markup,
+                                                   GtkTextTag    *tag);
+
+void    gtk_text_buffer_set_markup                (GtkTextBuffer *buffer,
+                                                   const gchar   *markup);
+
+
+#endif /* _utilities_h_included_ */
diff --git a/seqtoolsUtils/version.hpp b/seqtoolsUtils/version.hpp
new file mode 100755
index 0000000..b4e86c0
--- /dev/null
+++ b/seqtoolsUtils/version.hpp
@@ -0,0 +1,179 @@
+/*  File: version.h
+ *  Author: Ed Griffiths
+ *  Copyright (c) 2010 - 2012 Genome Research Ltd
+ * ---------------------------------------------------------------------------
+ * SeqTools is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 3
+ * of the License, or (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.
+ * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt
+ * ---------------------------------------------------------------------------
+ * This file is part of the SeqTools sequence analysis package, 
+ * written by
+ *      Gemma Barson      (Sanger Institute, UK)  <gb10 at sanger.ac.uk>
+ * 
+ * based on original code by
+ *      Erik Sonnhammer   (SBC, Sweden)           <Erik.Sonnhammer at sbc.su.se>
+ * 
+ * and utilizing code taken from the AceDB and ZMap packages, written by
+ *      Richard Durbin    (Sanger Institute, UK)  <rd at sanger.ac.uk>
+ *      Jean Thierry-Mieg (CRBM du CNRS, France)  <mieg at kaa.crbm.cnrs-mop.fr>
+ *      Ed Griffiths      (Sanger Institute, UK)  <edgrif at sanger.ac.uk>
+ *      Roy Storey        (Sanger Institute, UK)  <rds at sanger.ac.uk>
+ *      Malcolm Hinsley   (Sanger Institute, UK)  <mh17 at sanger.ac.uk>
+ *
+ * Description: Macros to support version numbering of libraries and
+ *              applications in SeqTools.
+ *----------------------------------------------------------------------------
+ */
+
+#ifndef UT_VERSION_H
+#define UT_VERSION_H
+
+
+/* Tools for creating version strings in an application or library.          */
+/*                                                                           */
+
+
+/* This macro creates a routine that must be provided by all applications    */
+/* that use the ACECB kernel code or libace. libace routines expect to be    */
+/* able to query the date on which the applications main routine was         */
+/* compiled so that this information can be displayed to the user.           */
+/* The function must have this prototype and must return a string that gives */
+/* the build date:                                                           */
+/*                                                                           */
+char *utAppGetCompileDate(void) ;
+/* The acedb                                                                 */
+/* makefile is arranged so that the main routine is recompiled every time    */
+/* the application is relinked. This means that the date represents the      */
+/* 'build' date of the application.                                          */
+/*                                                                           */
+/* Code the macro by simply putting it in the .c file that contains the      */
+/* main function of the application, it's probably best to put it just       */
+/* before or after the main function. Do not put a terminating ';' after     */
+/* the macro, this will cause a compile error.                               */
+/*                                                                           */
+#define UT_COMPILE_PHRASE "Compiled on:"
+
+#define UT_MAKE_GETCOMPILEDATEROUTINE()                                      \
+char *utAppGetCompileDate(void) { return UT_COMPILE_PHRASE " " __DATE__ " " __TIME__ ; }
+
+
+
+/* These tools assume that various numbers/strings are defined, e.g.         */
+/*                                                                           */
+/* #define SOME_TITLE   "UT library"         (definitive name for library)   */
+/* #define SOME_DESC    "brief description"  (purpose of library - one liner)*/
+/* #define SOME_VERSION 1                    (major version)                 */
+/* #define SOME_RELEASE 0                    (minor version)                 */
+/* #define SOME_UPDATE  1                    (latest fix number)             */
+/*                                                                           */
+
+
+/*  Use UT_MAKESTRING to make strings out of #define'd numbers.          
+ *  (required because of the way ANSI preprocessor handles strings)      
+ *  e.g. UT_MAKESTRING(6)  produces "6"                                 */   
+#define UT_PUTSTRING(x) #x
+#define UT_MAKESTRING(x) UT_PUTSTRING(x)
+
+
+/* Make a single version number out of a version, release and update number.
+ * NOTE that there should be no more than 100 (i.e. 0 - 99) revisions per    
+ * version, or updates per revision, otherwise version will be wrong. */
+#define UT_MAKE_VERSION_NUMBER(VERSION, RELEASE, UPDATE) \
+((VERSION * 10000) + (RELEASE * 100) + UPDATE)
+
+
+/* Make a single version string out of the version, release and update numbers */
+#define UT_MAKE_VERSION_STRING(VERSION, RELEASE, UPDATE) \
+UT_MAKESTRING(VERSION) "." UT_MAKESTRING(RELEASE) "." UT_MAKESTRING(UPDATE)
+
+
+/* Make a title string containing the title of the application/library and the version. */
+#define UT_MAKE_TITLE_STRING(TITLE, VERSION) \
+TITLE " - " VERSION
+
+
+/* Make a string containing the compile time and date */
+#define UT_MAKE_COMPILE_DATE() \
+__TIME__ " " __DATE__
+
+
+/* Make a copyright string, where the copyright for the given year(s) (passed as a string, e.g. "2009 - 2010") */
+#define UT_MAKE_COPYRIGHT_STRING(YEARS_STRING) \
+"Copyright (c) " YEARS_STRING ": Genome Research Ltd."
+
+
+/* Make a version-info string (has the package name and version string) */
+#define UT_MAKE_VERSION_INFO_STRING(PACKAGE_NAME, VERSION_STRING) \
+PACKAGE_NAME " - " VERSION_STRING
+
+
+/* Make a licence string */
+#define UT_MAKE_LICENCE_STRING(TITLE) \
+TITLE" is distributed under the GNU Public License; see http://www.gnu.org/copyleft/gpl.txt"
+
+
+/* Define the authors of the SeqTools package. AUTHOR_LIST is a comma-separated list of all authors
+ * that should be credited. AUTHOR_TEXT is a string containing the main authors. */
+#define AUTHOR_LIST	   "Gemma Barson (Sanger Institute, UK) <gb10 at sanger.ac.uk>",\
+                           "Erik Sonnhammer (SBC, Sweden) <Erik.Sonnhammer at sbc.su.se>",\
+                           "Jean Thierry-Mieg (CRBM du CNRS, France) <mieg at kaa.crbm.cnrs-mop.fr>",\
+                           "Richard Durbin (Sanger Institute, UK) <rd at sanger.ac.uk>",\
+                           "Ed Griffiths (Sanger Institute, UK) <edgrif at sanger.ac.uk>",\
+                           "Roy Storey (Sanger Institute, UK) <rds at sanger.ac.uk>",\
+                           "Malcolm Hinsley (Sanger Institute, UK) <mh17 at sanger.ac.uk>"
+
+#define AUTHOR_TEXT        "Gemma Barson <gb10 at sanger.ac.uk>\n"\
+                           "Erik Sonnhammer <Erik.Sonnhammer at sbc.su.se>"
+                           
+#define AUTHOR_TEXT_FULL   " Written by Gemma Barson <gb10 at sanger.ac.uk>\n"\
+                           " Based on original code by Erik Sonnhammer <Erik.Sonnhammer at sbc.su.se>"
+                           
+
+
+/*    Macro for creating a standard copyright string to be inserted into     
+ *    compiled applications and libraries. The macro ensures a common        
+ *    format for version numbers etc.                                        
+ *                                                                           
+ * The macro is a statement, NOT an expression, but does NOT require a       
+ * terminating semi-colon. The macro should be coded like this:              
+ *                                                                           
+ *    UT_COPYRIGHT_STRING(prefix, title, description, copyright_years)       
+ *                                                                           
+ *    where  prefix is some a string locally used to prefix variables        
+ *    where  title is a string of the form   "Appname  1.0.1"                
+ *    where  description is of the form  "Application to blah, blah."        
+ *    and    copyright_years is of the form  "2010", "2008-2010", "2008, 2010" etc.
+ */
+#define UT_COPYRIGHT(YEARS_STRING)                                                   \
+"@(#) " UT_MAKE_COPYRIGHT_STRING(YEARS_STRING) "\n"                                  \
+"@(#) \n"                                                                            \
+"@(#) This file contains the above Sanger Informatics Group library, \n"             \
+"@(#) " AUTHOR_TEXT "\n\n"                                                           \
+"@(#) You may redistribute this software subject to the conditions in the \n"        \
+"@(#) accompanying copyright file. Anyone interested in obtaining an up to date \n"  \
+"@(#) version should contact one of the authors at the above email addresses. \n"
+
+
+#define UT_COPYRIGHT_STRING(TITLE, VERSION, DESCRIPTION_STRING, COPYRIGHT_YEARS)     \
+"@(#) \n"                                                                            \
+"@(#) --------------------------------------------------------------------------\n"  \
+"@(#) Title/Version:  " UT_MAKE_TITLE_STRING(TITLE, VERSION) "\n"                    \
+"@(#)      Compiled:  " UT_MAKE_COMPILE_DATE "\n"                                    \
+"@(#)   Description:  " DESCRIPTION_STRING "\n\n"                                    \
+UT_COPYRIGHT()                                                                       \
+"@(#) --------------------------------------------------------------------------\n"  \
+"@(#) \n" ;
+
+
+#endif	/* UT_VERSION_H */
diff --git a/seqtools_version.m4 b/seqtools_version.m4
new file mode 100644
index 0000000..c420ab4
--- /dev/null
+++ b/seqtools_version.m4
@@ -0,0 +1,2 @@
+dnl seqtools_version.m4 generated by autogen.sh script. Do not hand edit.
+m4_define([VERSION_NUMBER], [4.44.1])
diff --git a/test/Makefile.am b/test/Makefile.am
new file mode 100644
index 0000000..c4ce230
--- /dev/null
+++ b/test/Makefile.am
@@ -0,0 +1,8 @@
+
+SUBDIRS = data scripts
+
+EXTRA_DIST = README test_plan.ods
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/test/Makefile.in
diff --git a/test/Makefile.in b/test/Makefile.in
new file mode 100644
index 0000000..3c4ee93
--- /dev/null
+++ b/test/Makefile.in
@@ -0,0 +1,585 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 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@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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 = :
+subdir = test
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am README
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/./seqtools_version.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-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 \
+	tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+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@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPS_CFLAGS = @DEPS_CFLAGS@
+DEPS_LIBS = @DEPS_LIBS@
+DEPS_SQLITE3_CFLAGS = @DEPS_SQLITE3_CFLAGS@
+DEPS_SQLITE3_LIBS = @DEPS_SQLITE3_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+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_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+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_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+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@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = data scripts
+EXTRA_DIST = README test_plan.ods
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/test/Makefile.in
+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 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):
+
+# 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.
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	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"
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	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; \
+	$(am__define_uniq_tagged_files); \
+	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-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	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"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+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 \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    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:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+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."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-recursive
+
+clean-am: clean-generic 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
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+	check-am clean clean-generic cscopelist-am ctags ctags-am \
+	distclean distclean-generic 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 pdf \
+	pdf-am ps ps-am tags tags-am 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/test/README b/test/README
new file mode 100644
index 0000000..b7d5bd1
--- /dev/null
+++ b/test/README
@@ -0,0 +1,19 @@
+SEQTOOLS PACKAGE TESTS
+
+This directory contains test descriptions, datasets and scripts that can be used to verify the basic functionality of Blixem, Dotter and Belvu. The test scripts are not extensive, particularly for graphical functions, but they are a good starting point. To supplement the test scripts, there are also some manual tests described in test_plan.ods.
+
+The directory contents are:
+- data: test datasets
+- scripts: contains the test scripts
+- scripts/automated: contains tests that can be run on the command line. Tests are organised into subdirectories by program. The program output on stdout for, say, test1, should match the recorded results in test1_results. The intent is that these tests can be automated at some point.
+- scripts/manual: contains tests that must be run manually, e.g. graphical tests for checking that colors are displayed correctly etc. Tests are organised into subdirectories by program. These tests start up the graphical user interface and require user interaction/verification.  See the description inside the individual test scripts for details of what the script is testing and the expected results.
+- test_plan.ods: an Open Office spreadsheet detailing the manual tests.
+
+Note that the blixem/dotter/belvu executables must be in your path for the test scripts to work.
+
+ISSUES
+The test scripts are a work in progress and there are the following outstanding issues:
+- Some tests in automated/belvu place the relative path name into the results file, so they will fail if you run them from a different directory to where they were originally run. Run them from the 'scripts' directory to get around this.
+- Some tests in automated/dotter try to do a diff between PDF files, which does not work reliably, so the tests may fail; currently the PDF files must be inspected manually to verify the results.
+- Some belvu tests may fail due to small differences in rounding of decimal values on different machines, so the tests will fail. Currently you need to compare the results manually to verify the results.
+- Some belvu processes output data in a somewhat arbitrary order; if the order differs from the saved results, the tests will fail. Currently you need to compare the results manually to verify the results.
diff --git a/test/data/ALIGN.fasta b/test/data/ALIGN.fasta
new file mode 100644
index 0000000..1c32709
--- /dev/null
+++ b/test/data/ALIGN.fasta
@@ -0,0 +1,740 @@
+>Q9UPQ9.4
+MREKEQEREEQLMEDKKRKKEDKKKKEATQ-KVTEQKTKVPEVTKP-----SLS-QPTAASP-------IGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------SAA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPPSCMLLGGGAGPPP-CTAP-GANPNNA--QVTG-ALLQSESGTAPDSTLGGA-AASNYANSTWGSGASSNN-----GTSPNPIHIWDKVIVDG-SDMEEWPCIAS-KD-TESSSENTTDNNS--ASNPGSEKS-TL------------PGSTTS--------NK------------GKGSQCQS----ASS----------------GNECNLGVWK------SDPK-A------K--------------SVQSSNSTTE-NNNGLGNW-------RNVSG--Q [...]
+>A8MYY3.2/16-949
+-QEKEQEREEQLMEDKKRKKEDKKKKEATQ-KVTEQKTKVPEVTKP-----SLS-QPTAASP-------IGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------SAA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPPSCMLLGGGAGPPP-CTAP-GANPNNA--QVTG-ALLQSESGTAPDSTLGGA-AASNYANSTWGSGASSNN-----GTSPNPIHIWDKVIVDG-SDMEEWPCIAS-KD-TESSSENTTDNNS--ASNPGSEKS-TL------------PGSTTS--------NK------------GKGSQCQS----ASS----------------GNECNLGVWK------SDPK-A------K--------------SVQSSNSTTE-NNNGLGNW-------RNVSG--Q [...]
+>A8MYY3.2/946-1098
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>A8MYY3.2/1098-1737
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B0QY77.1/1-879
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------WK------SDPK-A------K--------------SVQSSNSTTE-NNNGLGNW-------RNVSG--Q [...]
+>B0QY77.1/879-1390
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B1ATC3.1/2-1028
+------------EEKKKKKQEDKKKKEGAQKKAADQKTKVPELTKT-----CSS-QPQPAGT-------SPSTSTS--------------------TISSGSNGKR--ASACGQQP----------------------------AAS-----------------------------RYLPREVPPRFR-Q----QEQKQLLKRGQPLPTGGLT---SLNSAQ-AAGPAGASPPPL--PGAG-A-QQHPSKLQQDLGHSG--LVDHYENSHWGQHPSYRS-----EAN----CSWDKVIIDR-TEPEVWPSIPV-TE-TESASECPTDTDS--ASNCGSENS-SM-----------ATGSAQS--------SFPSHLKKTNGSHGTNGALVQS----PSNQSALG------AGGTNGNGGVARVWGVATSSSSGLA-H------C--------------SVGGGDGKMD-NMIGDGRS-------QNCWG--A [...]
+>B1ATC3.1/1015-1647
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B1ATC3.1/1646-1899
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B3N1G0.1/6-1260
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B3P9S0.1/6-1293
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B4E231.1/1-251
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B4E231.1/251-762
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B4IIY1.1/6-1290
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B4PW21.1/6-1287
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B4R2G2.1/6-1156
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B5ME23.2/16-165
+-QEKEQEREEQLMEDKKRKKEDKKKKEATQ-KVTEQKTKVPEVTKP-----SLS-QPTAASP-------IGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------SAA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPPSCMLLGGGAGPPP-CTAP-GANPNNA--QVTG-ALLQSESGTA------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B5ME23.2/165-368
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B5ME23.2/368-1007
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B7ZC94.1/2-868
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------EANCSWDKVIIDR-TEPEVWPSIPV-TE-TESASECPTDTDS--ASNCGSENS-SM-----------ATGSAQS--------SFPSHLKKTNGSHGTNGALVQS----PSNQSALG------AGGTNGNGGVARVWGVATSSSSGLA-H------C--------------SVGGGDGKMD-NMIGDGRS-------QNCWG--A [...]
+>B7ZC94.1/855-1477
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B7ZC94.1/1478-1731
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>C9J5L7.1/16-949
+-QEKEQEREEQLMEDKKRKKEDKKKKEATQ-KVTEQKTKVPEVTKP-----SLS-QPTAASP-------IGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------SAA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPPSCMLLGGGAGPPP-CTAP-GANPNNA--QVTG-ALLQSESGTAPDSTLGGA-AASNYANSTWGSGASSNN-----GTSPNPIHIWDKVIVDG-SDMEEWPCIAS-KD-TESSSENTTDNNS--ASNPGSEKS-TL------------PGSTTS--------NK------------GKGSQCQS----ASS----------------GNECNLGVWK------SDPK-A------K--------------SVQSSNSTTE-NNNGLGNW-------RNVSG--Q [...]
+>C9J5L7.1/946-1098
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>C9J5L7.1/1098-1737
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>C9JA83.1/3-471
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>C9JA83.1/468-1101
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>C9JAR8.1/20-121
+----LVQEEEQLMEEKKKKKDDKKKKEAAQKKATEQKIKVPEQIKP-----SVS-QPQPANS-------N-NGTST--------------------ATSTNNNAKR-ATANNQQPQ----------------------------QQQ----------------------------QQQQPQQQQPQQQPQ---PQPQQQQ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+>C9JAR8.1/119-1283
+-----------------------------------------------------------------------------------------------------------QQQPQQQPQ----------------------------ALP-----------------------------RY-PREVPPRFRH-----QEHKQLLKRGQHFPVIAANLGSAVKVLN-SQSE-SSALTNQQPQNNG-EVQNSKNQSDINH---ST-SGSHYENSQRGPVSST-S-----DSSTN---CKNAVVSDL-SEKEAWPSAPG-SD-PELASEC-MDADS--ASSSESERNITIM----------ASGNTGG--------EKDGL-----RNSTGLGSQNKFVVGSSSNN--------------VGHGSSTGPWG------FSHG-AIISTCQV--------------SVDAPESKSESSNNRMNAW-------GTVSS--S [...]
+>C9JAR8.1/1280-1913
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>D2GZL8.1/5-902
+--------------------------------------SVPEVTKP-----SLS-QPTAASP-------IGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------SAA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPPSCMLLGGGAGPPP-STAP-GANSNNA--QVTG-TPLQSDSGTAPESTLGGA-AASNYANSTWGPGASSNN-----GASPNPIHIWDKVIVDG-SDTEEWPCIAS-KD-TESSSENTTDNNS--ASNPGSEKS-TL------------PGSTTS--------NK------------GKGSQCQS----ASS----------------GNECNLGVWK------SDPK-T------K--------------SVQSSNSTTE-SNNGLGNW-------RNVSG--Q [...]
+>D2GZL8.1/900-1051
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>D2GZL8.1/1051-1690
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>D2H997.1/2-866
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ASSSWDKVIIDR-TDKEAWPSITG-AE-TESASECTTDTDS--ASNCGSENS-SMATGSAQGTFTGHT--------------KKTN-----GNNGTNGALVQS----PSNQSALG------AGGANGNGNGARVWGVATGSSSGPA-H------C--------------SLSGGDGKMD-NMIGDGRS-------QNCWG--A [...]
+>D2H997.1/853-1477
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>D2H997.1/1476-1729
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>D2I222.1/1-1905
+---------------------------------------VPEQIKP-----SVS-QPQPANS-------N-NGTST--------------------ATSTNNNAKR-ATANNPQQQ----------------------------QQQQPQPPQQPQPPQPPQQPPQQPPQPAQALPRY-PREVPPRFRH-----QEHKQLLKRGQHFPVIAANLGSAVKVLS-SQSE-SSALTNQQPQNNG-EVQNSKNQSDINH---NT-SGSHYENSQRGPVSS-PS-----DSSTN---CKNAVVNDS-PEKEAWPSTPG-SD-PELASEC-MDADS--ASSSESERNITIM----------ASGSTGG--------EKDGLRNSTGLGSQSKFVVGSS----SNN---------------VGHGSSTGPWG------FSHG-AIISTCQV--------------SVDAPESKSESSNNRMNAW-------GTVSS--S [...]
+>D3ZRA6.1/2-1000
+------------EEKKKKKQEDKKKKEGAQKKAADQKTKVPELTKT-----CSS-QPQPAGT-------SPSTSTS--------------------TISSGSNGKR--ASACGQQP----------------------------AAS-----------------------------RYLPREVPPRFR-Q----QEQKQLLKRGQPLPTGSLT---SVSPAQ-AAGPAGASPPPL--PGAG-A-QQHPSKLQPDLGHSG--LAGHYENCHWGQHPSYRS-----EAD----CSWDKVIIDR-TDQELWPSTPV-TE-TESASECPTDTDS--ASNCGSENS-SM-----------ATGSTQS--------SFPGHPKKTNGSHGTNGTLVQS----PSNPSALG------AGAANGNGGMARVWGVATGSSSGLA-H------C--------------SVGGGDGKMD-NMIGDGRS-------QNCWG--A [...]
+>D4A372.1/1-97
+------------MEEKKRKKDDKKKKEAAQKKATEQKIKVPEQIKP-----SVS-QPQPANS-------D-NGTST--------------------ATSTNNNAKR-ATASNQQPP----------------------------PPP-----------------------------QQ-PQQQQQQQQQQ----QEQQQQQQQQQQ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+>D4A372.1/95-1931
+-----------------------------------------------------------------------------------------------------------QQQQQQQPQ----------------------------ALP-----------------------------RY-PREVPPRFRH-----QEHKQLLKRGQHFPVIAANLGSAVKVLN-SQSE-SSAVTNQQPQNNG-EVQNSKSQSDINH---NT-SGSHYENCQRGPVSST-S-----DCSTS---C-KNAVNDL-LEKEAWPSAPG-SD-PELASEC-IDADS--ASNSESERNITVM----------ASGNTGG--------EKDGLRNSTGLGPQSKFVVGSS----SNN---------------VGHGSSTGPWG------FPHG-AIISTCQV--------------SVDAPESKPESSNSRMNAW-------GTVSS--S [...]
+>Q05CE3.1/20-1014
+----LVQEEEQLMEEKKKKKDDKKKKEAAQKKATEQKIKVPEQIKP-----SVS-QPQPANS-------D-NGTST--------------------ATSTNNNAKR-ATASNQQPPPPQQQ------------------QPQQEQ-QQQQP---------------------QALPRY-PREVPPRFRH-----QEHKQLLKRGQHFPVIAANLGSAVKVLN-SQSE-SSAVTNQQPQNNG-EVQNSKSQSDINH---NT-SGSHYENCQRGPVSST-S-----DCSTS---C-KNAVNDL-LEKEAWPSAPG-SD-PELAPEC-IDADS--ASNSESERNITVM----------ASGNTGG--------EKDGLRNSTGLGSQSKFVVGSS----SNN---------------VGHGSSTGPWG------FPHG-ALISTCQV--------------SVDAPESKPESSNNRMNAW-------GTVSS--S [...]
+>Q29CP6.2/6-1291
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q3TRH0.1/1-49
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q3TRH0.1/46-194
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q3TRH0.1/194-838
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q3UHC0.2/4-818
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------GSAQS-SFPS--------HLKKTNGS--------HG------------TNGALVQS----PSNQSALG------AGGTNGNGGVARVWGVATSSSSGLA-H------C--------------SVGGGDGKMD-NMIGDGRS-------QNCWG--A [...]
+>Q3UHC0.2/805-1437
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q3UHC0.2/1436-1689
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q3UHK8.1/20-1269
+----LVQEEEQLMEEKKKKKDDKKKKEAAQKKATEQKIKVPEQIKP-----SVS-QPQPANS-------D-NGTST--------------------ATSTNNNAKR-ATASNQQPPPPQQQ------------------QPQQEQ-QQQQP---------------------QALPRY-PREVPPRFRH-----QEHKQLLKRGQHFPVIAANLGSAVKVLN-SQSE-SSAVTNQQPQNNG-EVQNSKSQSDINH---NT-SGSHYENCQRGPVSST-S-----DCSTS---C-KNAVNDL-LEKEAWPSAPG-SD-PELAPEC-IDADS--ASNSESERNITVM----------ASGNTGG--------EKDGLRNSTGLGSQSKFVVGSS----SNN---------------VGHGSSTGPWG------FPHG-ALISTCQV--------------SVDAPESKPESSNNRMNAW-------GTVSS--S [...]
+>Q3UHK8.1/1266-1896
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q4S9I4.1/33-1574
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------TGS-PCTGDGNSNWGKVLVDGSTDKSNNTS-TSSAVWPPSSFSCSSSSSSSGCGSG-SD-PELASEC-MDADS--SSLNGSEKH-LAAV-------TPVMMSSNA--------SS------------SVSSTASS----PSSSMVTSAVMIGVAVNGDGNGNSRHMLG------GGMG-T------VSGSNSGNVTGPPHFSVAGSSNIGSNNMGNHNNKPINSSVWGTQSG--S [...]
+>Q4S9I4.1/1569-1835
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q4T574.1/1-220
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------SWDKVIIDR-SDTEAWPSISCSSD-LNHPV---VPECP--VGSASSNQD-TS------------AVTTTC--------SS------------SSLSMA-T----GAT----------------GQQAHYASLK------ANNN-M------T--------------GPGSANILTS-N-RGWGSD-------SKQDGVNS [...]
+>Q4T574.1/239-596
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q4T574.1/639-850
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q4T574.1/894-1324
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q4T574.1/1322-1578
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q8BKI2.2/38-1167
+-QEKEQEREEQLMEDKKRKKEDKKKKEATQ-KVTEQKTKVPEVTKP-----SLS-QPTAASP-------IGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------SAA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPPSCMLLGGGAGPPP-CTAP-GANPNNN-AQVTG-ALLQSESGTAPESTLGGA-AASNYANSTWGPGASSNS-----GASPNPIHIWDKVIVDG-SDMEEWPCIAS-KD-TESSSENTTDNNS--ASNPGSEKS-SL------------PGSTTS--------NK------------GKGSQCQA----ASS----------------GNECNLGVWK------SDPK-A------K--------------SVQPPNSTSD-SNNGLGNW-------RSTSG--Q [...]
+>Q8BKI2.2/1167-1810
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q8BWL0.1/2-169
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q8BWL0.1/169-812
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q8NDV7.2/20-121
+----LVQEEEQLMEEKKKKKDDKKKKEAAQKKATEQKIKVPEQIKP-----SVS-QPQPANS-------N-NGTST--------------------ATSTNNNAKR-ATANNQQPQ----------------------------QQQ----------------------------QQQQPQQQQPQQQPQ---PQPQQQQ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+>Q8NDV7.2/119-1962
+-----------------------------------------------------------------------------------------------------------QQQPQQQPQ----------------------------ALP-----------------------------RY-PREVPPRFRH-----QEHKQLLKRGQHFPVIAANLGSAVKVLN-SQSE-SSALTNQQPQNNG-EVQNSKNQSDINH---ST-SGSHYENSQRGPVSST-S-----DSSTN---CKNAVVSDL-SEKEAWPSAPG-SD-PELASEC-MDADS--ASSSESERNITIM----------ASGNTGG--------EKDGL-----RNSTGLGSQNKFVVGSSSNN--------------VGHGSSTGPWG------FSHG-AIISTCQV--------------SVDAPESKSESSNNRMNAW-------GTVSS--S [...]
+>Q8SY33.1/6-1289
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q9HCJ0.3/4-822
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------GSAQG-NF------------TGHTKK--------TNGN--------NGTNGALVQS----PSNQSALG------AGGANSNGSAARVWGVATGSSSGLA-H------C--------------SVSGGDGKMD-TMIGDGRS-------QNCWG--A [...]
+>Q9HCJ0.3/810-1437
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q9HCJ0.3/1434-1689
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q9UPQ9.4/1-1833
+MREKEQEREEQLMEDKKRKKEDKKKKEATQ-KVTEQKTKVPEVTKP-----SLS-QPTAASP-------IGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------SAA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPPSCMLLGGGAGPPP-CTAP-GANPNNA--QVTG-ALLQSESGTAPDSTLGGA-AASNYANSTWGSGASSNN-----GTSPNPIHIWDKVIVDG-SDMEEWPCIAS-KD-TESSSENTTDNNS--ASNPGSEKS-TL------------PGSTTS--------NK------------GKGSQCQS----ASS----------------GNECNLGVWK------SDPK-A------K--------------SVQSSNSTTE-NNNGLGNW-------RNVSG--Q [...]
+>B4H887.1/32-1121
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q3TRK2.1/1-88
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q3TRK2.1/88-731
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q8BNF0.2/9-877
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------VVNRMNAW-------GTVSS--S [...]
+>B4MF11.1/6-1287
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B4NHM7.1/6-1344
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>D0Z7B2.1/6-1290
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B4JZV3.1/6-1310
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q1LZM4.1/2-292
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q1LZM4.1/292-736
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q4S4D3.1/1-379
+------------MEDKKRKKDDKRKRETSQ-KVTEQKNKVPELTKP-----ASA-QPSAPQI-------SSASHSPGPTPSASPSPATLGPGSAAAPPQGGNNAKR-LAGANGQPCSNTVSPPAASGPSPAGNGSANSGGQTPQQQP-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPL-SSMLLGGGGGG------D-GPNANMA--ATCD-SVAASSSTALTSSSVAAASTTSNYANSMWGVSS--GS-----QTSSQ---GREKVIVDG-NDLEEWPSIAG-ND-GARAPFTGLGGGS---ANSGKPVN-SISA-------SGNQSSPTS--------SF------------SMPNECIQ----SSN----------------GVAWGVAASQ------GHLSGG------N--------------AVAASGPLLQ-QPSSLSKASAL-PPSHDASG--S [...]
+>Q4S4D3.1/395-556
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q4S4D3.1/557-654
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q4S4D3.1/651-825
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q4S4D3.1/823-1099
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q4S4D3.1/1091-1191
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q3UUG8.1/1-727
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>C3ZJT1.1/159-315
+-RLQMEEEEEQRQEEERRKREEKKKKQQQL-KAKAQELKAKEAE-S-----AKS-QPSQAQP-------AQQ------------------------------AAKR-PSSAQGQQP----------------------------P-------------------------------RY-PREVPPRFQQQAQKQQHHKQKQQGGQGK---KQQGGSGWGSPP-PQMP-SAAPQVG-PSGWGDSNPRSQENSWANAAKKGM-APENFTNGAK----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+>C3ZJT1.1/328-369
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>C3ZJT1.1/371-689
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>C3ZJT1.1/730-1350
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B0WTJ5.1/228-1404
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q8BXM6.1/4-627
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q99JR3.2/24-648
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q172C6.1/6-1080
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B4L7C4.1/6-1178
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q172C7.1/363-538
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q172C7.1/573-1487
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q6P7B1.1/2-432
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q3UQ45.1/7-500
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q4T0A8.1/27-228
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q4T0A8.1/329-402
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q4T0A8.1/405-529
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q4T0A8.1/526-801
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B7ZB91.1/13-478
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q7Q3B9.4/7-766
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q7Q3B9.4/781-1217
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q8BX83.2/38-410
+-QEKEQEREEQLMEDKKRKKEDKKKKEATQ-KVTEQKTKVPEVTKP-----SLS-QPTAASP-------IGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------SAA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPPSCMLLGGGAGPPP-CTAP-GANPNNN-AQVTG-ALLQSESGTAPESTLGGA-AASNYANSTWGPGASSNS-----GASPNPIHIWDKVIVDG-SDMEEWPCIAS-KD-TESSSENTTDNNS--ASNPGSEKS-SL------------PGSTTS--------NK------------GKGSQCQA----ASS----------------GNECNLGVWK------SDPK-A------K--------------SVQPPNSTSD-SNNGLGNW-------RSTSG--Q [...]
+>Q172C8.1/192-646
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q172C8.1/672-1244
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B0WXH0.1/311-1189
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B0WXH0.1/1191-1443
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B0R1E2.1/1-289
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B0R1E2.1/290-554
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B1H1W1.1/13-388
+-REKEQEREEQLMEDKKRKKEDKKKKEAAQ-KVTEQKTKVPEVTKP-----SSS-QATAASL-------PGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------STA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPASCMLPGGGAGAPPSTTAP-GACPGNA-QPGVG-ALLQGESGPTTDSSSGAA-ATSNYANSTWGSGGPASS-----GPTTNPPHAWDKVIVDG-SDMEEWPCIAG-VD-AEPPSDNATDNNS--ASNSASEKG-PP------------QGSTTS--------HK------------GRGGQGQQ----QQQ---------------PGSECIQGVWK------SDPK-A------K--------------PVPSSNPAAE-GVNRVGNW-------RNVGG--S [...]
+>A7UUT0.1/13-626
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>A7UUT0.1/686-771
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>A7UUT0.1/838-1208
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q66JU9.1/2-312
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B4DKJ5.1/1-276
+MREKEQEREEQLMEDKKRKKEDKKKKEATQ-KVTEQKTKVPEVTKP-----SLS-QPTAASP-------IGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------SAA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPPSCMLLGGGAGPPP-CTAP-GANPNNA--QVTG-ALLQSESGTAPDSTLGGA-AASNYANSTWGSGASSNN-----GTSPNPIHIWDKVIVDG-SDMEEWPCIAS-KD-TESSSENTTDNNS--ASNPGSEKS-TL------------PGSTTS--------NK------------GKGSQCQS----ASS----------------GNECNLGVWK------SDPK-A------K--------------SVQSSKPKGQ------------------------ [...]
+>Q8BWM2.1/1-337
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>A0NFA3.2/8-516
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>A0NFA3.2/687-1175
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B7PWH5.1/252-389
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B7PWH5.1/349-695
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B7PWH5.1/720-1088
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q8VD67.1/1-249
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q148P0.1/1-249
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q9JHZ1.1/1-249
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B0WXG8.1/386-1198
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B0WXG8.1/1199-1287
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q4TA89.1/1-316
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q4T0A9.1/1-255
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------WDQLIIDQ-RDTEAWPLIKL-SPSQASPGGCSLDTDPGPLTSSGSTSN-SCSAVN----MATGANSQTGHFPANHLSNK------------ANSGLNHT----NHTGTS----------MLSNQVAANRSWG------SGPG-PS----HCP-----------SQSSVGTEVKND-SPVGAGSS-------RG-WG--A [...]
+>Q4T0A9.1/370-579
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q6ZPQ4.1/1-243
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q4TA88.1/5-275
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q4TA88.1/319-457
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B3KSX2.1/4-277
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B8RJB3.1/9-266
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>A7SDW4.1/430-1260
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>A7SDW4.1/1319-1671
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>A8PU70.1/566-908
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q4T5V2.1/1-136
+------------MEDKKKKKDDKKKKEISQ-KVSEQKIKDTSCSQPLATPGSVSPSPGPATPSSPTPGAAGVSAQV--------------------PPCGGNNAKQWTAVANGQPSSQTSQT----------------SQQQQQQQQ-----------------------------RYMSREVPPRFRSQ----QDHKVLLKRGQPPL-SSMLLGGGGE--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+>B4DST4.1/1-168
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B3RQ20.1/1143-1394
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q8BXV9.1/2-142
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>A7T6Q0.1/2-144
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>C1K8B6.1/4-244
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>C1K890.1/4-244
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>A5BE57.1/246-300
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>A5BE57.1/307-474
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>C1K8V5.1/4-177
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q2GV87.1/66-278
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q8MSF0.1/1-120
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B4H886.1/6-148
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>A9USE7.1/720-774
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>A9USE7.1/997-1101
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>C5WVW4.1/223-289
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>P20105.2/153-385
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>P20105.2/537-654
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>C4IYK3.1/223-290
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B6UA93.1/223-290
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B9RQB9.1/109-183
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B9RQB9.1/236-287
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B9RQB9.1/300-388
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B8APB9.1/226-292
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q10R21.1/226-292
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q0DUQ0.1/248-314
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q8BZH2.1/5-63
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B4PJL3.1/173-393
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B4PJL3.1/533-654
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B5DF80.1/306-473
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>C1GEW9.1/11-129
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>C1GVG2.1/279-439
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B2GUY3.1/194-262
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B2GUY3.1/296-379
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B3M4K4.1/89-378
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B3M4K4.1/533-691
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>D4AC14.1/194-262
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>D4AC14.1/296-379
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q4T1P6.1/6-46
+-------------------------------------------------------------------------------------------------------------TPPQQQC----------------------------QLSSA-------------------------SARYPPREVPPRFR-Q----QEHKQLLKRGQPLP-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+>D4AC21.1/123-191
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>D4AC21.1/225-308
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>C5WPD4.1/242-318
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B9GH32.1/107-174
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B9GH32.1/295-362
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>A5B3Z9.1/212-306
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q6IQ30.1/296-379
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>O04319.1/114-194
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>O04319.1/304-419
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>P31209.2/366-455
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B2RXY9.1/193-253
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B2RXY9.1/296-394
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>A2A5N3.1/193-253
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>A2A5N3.1/296-393
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q9D4E6.1/307-466
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q4VC03.1/296-379
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q13310.1/296-379
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>D3Z5M2.1/296-380
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>A4IFC3.1/296-379
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B1ANR0.1/296-379
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B4NNJ8.1/320-445
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>D2I596.1/309-392
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B4JL62.1/290-395
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>C5YBU9.1/128-201
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>C5YBU9.1/329-416
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q99LF8.1/296-380
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>C0PPV9.1/259-392
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q91YZ8.1/296-380
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B9GNX9.1/266-364
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>A3KFU8.1/296-380
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B9N4W3.1/235-341
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q6PHQ9.1/296-380
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B9MVK8.1/264-361
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>D3AVQ3.1/284-366
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>A3KFU5.1/296-380
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>A5BPW5.1/140-241
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q3UX16.1/225-309
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>C0PT30.1/259-393
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B4K3C6.1/67-191
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>C4Q4K6.1/224-436
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B9H7X8.1/113-180
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B9H7X8.1/304-412
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B3S2W8.1/76-163
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B3S2W8.1/165-267
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q6CDH3.1/332-428
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B9R7H3.1/281-377
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q7T3G5.1/297-380
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q3UTA6.1/197-279
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B3NHT3.1/152-330
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B4MHJ9.1/106-306
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>A5BF74.1/281-378
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q8QGJ7.1/296-379
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B4J985.1/306-430
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B8LRZ2.1/277-363
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>A5E351.1/72-416
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>D2H6M0.1/296-405
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>O42323.1/299-489
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>A9NX92.1/275-362
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B9GT62.1/311-412
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q5KBW2.1/367-420
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q2PEV8.1/238-322
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B6U4M0.1/324-410
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>A8NF86.1/337-425
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B4N2I1.1/44-159
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q2I2V8.1/539-606
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B3MYX8.1/14-153
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q4RNX8.1/296-379
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>D1ZFW1.1/794-871
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B9RIB9.1/231-294
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>C0SAP5.1/281-410
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B9HRX8.1/250-356
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q7SGG0.1/13-167
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q9FPJ8.1/236-325
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q9FFU0.1/236-325
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>A5E1Y8.1/358-537
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q15164.1/107-185
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>D3ZAS7.1/296-399
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B6K033.1/364-457
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q5TST0.3/683-841
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B6K6T8.1/356-444
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>C1GDP1.1/281-415
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B9H7X9.1/314-422
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q7Q9F7.4/282-427
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q10N87.1/216-320
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>A3F293.1/10-109
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B4JPX4.1/284-409
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q8RXR5.1/110-177
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>P42731.1/126-193
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q2VIP3.1/296-392
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>A3F295.1/6-117
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>A9S4M3.1/42-65
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q54BM2.1/286-375
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q3ZCS4.1/296-393
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>A3F290.1/9-110
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>A9TLC5.1/312-407
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>A5E7X5.1/33-235
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>A3F299.1/12-111
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q5VX58.1/296-390
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q9H361.2/296-390
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q2VIN9.1/296-390
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>A9T3C5.1/56-79
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q4PF35.1/18-283
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>C5WUD2.1/243-339
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q4P8R9.1/368-413
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q55F37.1/112-343
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q54LR6.1/53-262
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B4NBP3.1/171-277
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>D3B9K1.1/622-823
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B8AL31.1/216-320
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q4P3Y1.1/128-184
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q4VXU2.1/296-404
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q9VYA6.1/174-225
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q25AW7.1/146-228
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q2VIN7.1/296-392
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>D0N277.1/201-240
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q6R969.1/253-422
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B4KT28.1/222-266
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q98SP8.2/296-391
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B9RY32.1/285-382
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B4NP54.1/2-69
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q86KE5.1/77-311
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q2V9C2.1/258-417
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q9LEB4.1/261-347
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q4P2T9.1/335-396
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>A5C5B3.1/256-335
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B3MKU5.1/256-639
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q86NT0.1/173-270
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>A8NN12.1/68-136
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>A3CUY7.1/2-69
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B0X8C2.1/150-263
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>A5E3S9.1/278-450
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q9FX88.1/338-415
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q54X31.1/100-217
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q10HZ8.1/240-333
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q9AY92.1/240-333
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q10HZ7.1/240-333
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B8AKU6.1/240-333
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q2V9A1.1/201-306
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>A2YEJ5.1/343-442
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B4KQM5.1/242-419
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q69X94.1/342-443
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q8LBV8.1/233-325
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>C0P488.1/242-336
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B3M300.1/220-284
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q9SAB3.1/234-326
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q0DQQ8.1/284-377
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>C0PFW8.1/269-336
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>C0HHH3.1/270-337
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q9M6E6.1/117-184
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q2FSR7.1/6-69
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>C0SUE2.1/77-175
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>A0CJW3.1/434-742
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B4ME65.1/311-417
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B9I0E1.1/253-334
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q8LFI9.1/244-343
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B4PH83.1/181-247
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B9FTY9.1/365-463
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B3M562.1/702-895
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>C4QZM5.1/235-294
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>D3BFK6.1/320-440
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>A3GHN7.2/350-469
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q54C48.1/271-412
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q0WW84.1/287-386
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q54FL0.1/951-1244
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B4MC02.1/171-283
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>A7AT74.1/621-697
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q9LJL7.1/287-386
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B4NE44.1/470-686
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>A0BQD1.1/165-319
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q05196.2/328-430
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>A9TFH5.1/223-287
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>A1C5H3.1/188-267
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>A9NWA0.1/248-328
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B4JY35.1/15-92
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>D0H0K7.1/432-591
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q6DGV1.1/174-212
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B4KN27.1/225-337
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B3NV15.1/1200-1273
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B5LEQ5.1/179-323
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q6C9A9.1/660-764
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B4JIH9.1/171-286
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>Q5TSQ4.3/457-676
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>A9TZW4.1/245-319
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B4PZT3.1/1188-1272
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>D4APH2.1/480-541
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>D3BH34.1/115-236
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>C4XVP0.1/46-94
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>C5GQY8.1/409-612
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>B4L803.1/240-323
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>C5DIP1.1/2-75
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+>D3B7T2.1/209-345
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
diff --git a/test/data/ALIGN.selex b/test/data/ALIGN.selex
new file mode 100644
index 0000000..4d539c3
--- /dev/null
+++ b/test/data/ALIGN.selex
@@ -0,0 +1,370 @@
+Q9UPQ9.4                   MREKEQEREEQLMEDKKRKKEDKKKKEATQ-KVTEQKTKVPEVTKP-----SLS-QPTAASP-------IGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------SAA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPPSCMLLGGGAGPPP-CTAP-GANPNNA--QVTG-ALLQSESGTAPDSTLGGA-AASNYANSTWGSGASSNN-----GTSPNPIHIWDKVIVDG-SDMEEWPCIAS-KD-TESSSENTTDNNS--ASNPGSEKS-TL------------PGSTTS--------NK------------GKGSQCQS----ASS----------------GNECNLGVWK------SDPK-A------K--------------SVQSSNS [...]
+A8MYY3.2/16-949            -QEKEQEREEQLMEDKKRKKEDKKKKEATQ-KVTEQKTKVPEVTKP-----SLS-QPTAASP-------IGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------SAA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPPSCMLLGGGAGPPP-CTAP-GANPNNA--QVTG-ALLQSESGTAPDSTLGGA-AASNYANSTWGSGASSNN-----GTSPNPIHIWDKVIVDG-SDMEEWPCIAS-KD-TESSSENTTDNNS--ASNPGSEKS-TL------------PGSTTS--------NK------------GKGSQCQS----ASS----------------GNECNLGVWK------SDPK-A------K--------------SVQSSNS [...]
+A8MYY3.2/946-1098          --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A8MYY3.2/1098-1737         --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B0QY77.1/1-879             ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------WK------SDPK-A------K--------------SVQSSNS [...]
+B0QY77.1/879-1390          --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B1ATC3.1/2-1028            ------------EEKKKKKQEDKKKKEGAQKKAADQKTKVPELTKT-----CSS-QPQPAGT-------SPSTSTS--------------------TISSGSNGKR--ASACGQQP----------------------------AAS-----------------------------RYLPREVPPRFR-Q----QEQKQLLKRGQPLPTGGLT---SLNSAQ-AAGPAGASPPPL--PGAG-A-QQHPSKLQQDLGHSG--LVDHYENSHWGQHPSYRS-----EAN----CSWDKVIIDR-TEPEVWPSIPV-TE-TESASECPTDTDS--ASNCGSENS-SM-----------ATGSAQS--------SFPSHLKKTNGSHGTNGALVQS----PSNQSALG------AGGTNGNGGVARVWGVATSSSSGLA-H------C--------------SVGGGDG [...]
+B1ATC3.1/1015-1647         --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B1ATC3.1/1646-1899         --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3N1G0.1/6-1260            --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3P9S0.1/6-1293            --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4E231.1/1-251             --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4E231.1/251-762           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4IIY1.1/6-1290            --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4PW21.1/6-1287            --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4R2G2.1/6-1156            --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B5ME23.2/16-165            -QEKEQEREEQLMEDKKRKKEDKKKKEATQ-KVTEQKTKVPEVTKP-----SLS-QPTAASP-------IGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------SAA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPPSCMLLGGGAGPPP-CTAP-GANPNNA--QVTG-ALLQSESGTA--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B5ME23.2/165-368           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B5ME23.2/368-1007          --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B7ZC94.1/2-868             ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------EANCSWDKVIIDR-TEPEVWPSIPV-TE-TESASECPTDTDS--ASNCGSENS-SM-----------ATGSAQS--------SFPSHLKKTNGSHGTNGALVQS----PSNQSALG------AGGTNGNGGVARVWGVATSSSSGLA-H------C--------------SVGGGDG [...]
+B7ZC94.1/855-1477          --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B7ZC94.1/1478-1731         --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C9J5L7.1/16-949            -QEKEQEREEQLMEDKKRKKEDKKKKEATQ-KVTEQKTKVPEVTKP-----SLS-QPTAASP-------IGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------SAA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPPSCMLLGGGAGPPP-CTAP-GANPNNA--QVTG-ALLQSESGTAPDSTLGGA-AASNYANSTWGSGASSNN-----GTSPNPIHIWDKVIVDG-SDMEEWPCIAS-KD-TESSSENTTDNNS--ASNPGSEKS-TL------------PGSTTS--------NK------------GKGSQCQS----ASS----------------GNECNLGVWK------SDPK-A------K--------------SVQSSNS [...]
+C9J5L7.1/946-1098          --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C9J5L7.1/1098-1737         --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C9JA83.1/3-471             --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C9JA83.1/468-1101          --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C9JAR8.1/20-121            ----LVQEEEQLMEEKKKKKDDKKKKEAAQKKATEQKIKVPEQIKP-----SVS-QPQPANS-------N-NGTST--------------------ATSTNNNAKR-ATANNQQPQ----------------------------QQQ----------------------------QQQQPQQQQPQQQPQ---PQPQQQQ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C9JAR8.1/119-1283          -----------------------------------------------------------------------------------------------------------QQQPQQQPQ----------------------------ALP-----------------------------RY-PREVPPRFRH-----QEHKQLLKRGQHFPVIAANLGSAVKVLN-SQSE-SSALTNQQPQNNG-EVQNSKNQSDINH---ST-SGSHYENSQRGPVSST-S-----DSSTN---CKNAVVSDL-SEKEAWPSAPG-SD-PELASEC-MDADS--ASSSESERNITIM----------ASGNTGG--------EKDGL-----RNSTGLGSQNKFVVGSSSNN--------------VGHGSSTGPWG------FSHG-AIISTCQV--------------SVDAPES [...]
+C9JAR8.1/1280-1913         --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D2GZL8.1/5-902             --------------------------------------SVPEVTKP-----SLS-QPTAASP-------IGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------SAA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPPSCMLLGGGAGPPP-STAP-GANSNNA--QVTG-TPLQSDSGTAPESTLGGA-AASNYANSTWGPGASSNN-----GASPNPIHIWDKVIVDG-SDTEEWPCIAS-KD-TESSSENTTDNNS--ASNPGSEKS-TL------------PGSTTS--------NK------------GKGSQCQS----ASS----------------GNECNLGVWK------SDPK-T------K--------------SVQSSNS [...]
+D2GZL8.1/900-1051          --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D2GZL8.1/1051-1690         --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D2H997.1/2-866             -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ASSSWDKVIIDR-TDKEAWPSITG-AE-TESASECTTDTDS--ASNCGSENS-SMATGSAQGTFTGHT--------------KKTN-----GNNGTNGALVQS----PSNQSALG------AGGANGNGNGARVWGVATGSSSGPA-H------C--------------SLSGGDG [...]
+D2H997.1/853-1477          --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D2H997.1/1476-1729         --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D2I222.1/1-1905            ---------------------------------------VPEQIKP-----SVS-QPQPANS-------N-NGTST--------------------ATSTNNNAKR-ATANNPQQQ----------------------------QQQQPQPPQQPQPPQPPQQPPQQPPQPAQALPRY-PREVPPRFRH-----QEHKQLLKRGQHFPVIAANLGSAVKVLS-SQSE-SSALTNQQPQNNG-EVQNSKNQSDINH---NT-SGSHYENSQRGPVSS-PS-----DSSTN---CKNAVVNDS-PEKEAWPSTPG-SD-PELASEC-MDADS--ASSSESERNITIM----------ASGSTGG--------EKDGLRNSTGLGSQSKFVVGSS----SNN---------------VGHGSSTGPWG------FSHG-AIISTCQV--------------SVDAPES [...]
+D3ZRA6.1/2-1000            ------------EEKKKKKQEDKKKKEGAQKKAADQKTKVPELTKT-----CSS-QPQPAGT-------SPSTSTS--------------------TISSGSNGKR--ASACGQQP----------------------------AAS-----------------------------RYLPREVPPRFR-Q----QEQKQLLKRGQPLPTGSLT---SVSPAQ-AAGPAGASPPPL--PGAG-A-QQHPSKLQPDLGHSG--LAGHYENCHWGQHPSYRS-----EAD----CSWDKVIIDR-TDQELWPSTPV-TE-TESASECPTDTDS--ASNCGSENS-SM-----------ATGSTQS--------SFPGHPKKTNGSHGTNGTLVQS----PSNPSALG------AGAANGNGGMARVWGVATGSSSGLA-H------C--------------SVGGGDG [...]
+D4A372.1/1-97              ------------MEEKKRKKDDKKKKEAAQKKATEQKIKVPEQIKP-----SVS-QPQPANS-------D-NGTST--------------------ATSTNNNAKR-ATASNQQPP----------------------------PPP-----------------------------QQ-PQQQQQQQQQQ----QEQQQQQQQQQQ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D4A372.1/95-1931           -----------------------------------------------------------------------------------------------------------QQQQQQQPQ----------------------------ALP-----------------------------RY-PREVPPRFRH-----QEHKQLLKRGQHFPVIAANLGSAVKVLN-SQSE-SSAVTNQQPQNNG-EVQNSKSQSDINH---NT-SGSHYENCQRGPVSST-S-----DCSTS---C-KNAVNDL-LEKEAWPSAPG-SD-PELASEC-IDADS--ASNSESERNITVM----------ASGNTGG--------EKDGLRNSTGLGPQSKFVVGSS----SNN---------------VGHGSSTGPWG------FPHG-AIISTCQV--------------SVDAPES [...]
+Q05CE3.1/20-1014           ----LVQEEEQLMEEKKKKKDDKKKKEAAQKKATEQKIKVPEQIKP-----SVS-QPQPANS-------D-NGTST--------------------ATSTNNNAKR-ATASNQQPPPPQQQ------------------QPQQEQ-QQQQP---------------------QALPRY-PREVPPRFRH-----QEHKQLLKRGQHFPVIAANLGSAVKVLN-SQSE-SSAVTNQQPQNNG-EVQNSKSQSDINH---NT-SGSHYENCQRGPVSST-S-----DCSTS---C-KNAVNDL-LEKEAWPSAPG-SD-PELAPEC-IDADS--ASNSESERNITVM----------ASGNTGG--------EKDGLRNSTGLGSQSKFVVGSS----SNN---------------VGHGSSTGPWG------FPHG-ALISTCQV--------------SVDAPES [...]
+Q29CP6.2/6-1291            --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q3TRH0.1/1-49              --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q3TRH0.1/46-194            --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q3TRH0.1/194-838           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q3UHC0.2/4-818             ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------GSAQS-SFPS--------HLKKTNGS--------HG------------TNGALVQS----PSNQSALG------AGGTNGNGGVARVWGVATSSSSGLA-H------C--------------SVGGGDG [...]
+Q3UHC0.2/805-1437          --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q3UHC0.2/1436-1689         --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q3UHK8.1/20-1269           ----LVQEEEQLMEEKKKKKDDKKKKEAAQKKATEQKIKVPEQIKP-----SVS-QPQPANS-------D-NGTST--------------------ATSTNNNAKR-ATASNQQPPPPQQQ------------------QPQQEQ-QQQQP---------------------QALPRY-PREVPPRFRH-----QEHKQLLKRGQHFPVIAANLGSAVKVLN-SQSE-SSAVTNQQPQNNG-EVQNSKSQSDINH---NT-SGSHYENCQRGPVSST-S-----DCSTS---C-KNAVNDL-LEKEAWPSAPG-SD-PELAPEC-IDADS--ASNSESERNITVM----------ASGNTGG--------EKDGLRNSTGLGSQSKFVVGSS----SNN---------------VGHGSSTGPWG------FPHG-ALISTCQV--------------SVDAPES [...]
+Q3UHK8.1/1266-1896         --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4S9I4.1/33-1574           -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------TGS-PCTGDGNSNWGKVLVDGSTDKSNNTS-TSSAVWPPSSFSCSSSSSSSGCGSG-SD-PELASEC-MDADS--SSLNGSEKH-LAAV-------TPVMMSSNA--------SS------------SVSSTASS----PSSSMVTSAVMIGVAVNGDGNGNSRHMLG------GGMG-T------VSGSNSGNVTGPPHFSVAGSSN [...]
+Q4S9I4.1/1569-1835         --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4T574.1/1-220             ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------SWDKVIIDR-SDTEAWPSISCSSD-LNHPV---VPECP--VGSASSNQD-TS------------AVTTTC--------SS------------SSLSMA-T----GAT----------------GQQAHYASLK------ANNN-M------T--------------GPGSANI [...]
+Q4T574.1/239-596           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4T574.1/639-850           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4T574.1/894-1324          --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4T574.1/1322-1578         --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8BKI2.2/38-1167           -QEKEQEREEQLMEDKKRKKEDKKKKEATQ-KVTEQKTKVPEVTKP-----SLS-QPTAASP-------IGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------SAA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPPSCMLLGGGAGPPP-CTAP-GANPNNN-AQVTG-ALLQSESGTAPESTLGGA-AASNYANSTWGPGASSNS-----GASPNPIHIWDKVIVDG-SDMEEWPCIAS-KD-TESSSENTTDNNS--ASNPGSEKS-SL------------PGSTTS--------NK------------GKGSQCQA----ASS----------------GNECNLGVWK------SDPK-A------K--------------SVQPPNS [...]
+Q8BKI2.2/1167-1810         --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8BWL0.1/2-169             --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8BWL0.1/169-812           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8NDV7.2/20-121            ----LVQEEEQLMEEKKKKKDDKKKKEAAQKKATEQKIKVPEQIKP-----SVS-QPQPANS-------N-NGTST--------------------ATSTNNNAKR-ATANNQQPQ----------------------------QQQ----------------------------QQQQPQQQQPQQQPQ---PQPQQQQ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8NDV7.2/119-1962          -----------------------------------------------------------------------------------------------------------QQQPQQQPQ----------------------------ALP-----------------------------RY-PREVPPRFRH-----QEHKQLLKRGQHFPVIAANLGSAVKVLN-SQSE-SSALTNQQPQNNG-EVQNSKNQSDINH---ST-SGSHYENSQRGPVSST-S-----DSSTN---CKNAVVSDL-SEKEAWPSAPG-SD-PELASEC-MDADS--ASSSESERNITIM----------ASGNTGG--------EKDGL-----RNSTGLGSQNKFVVGSSSNN--------------VGHGSSTGPWG------FSHG-AIISTCQV--------------SVDAPES [...]
+Q8SY33.1/6-1289            --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9HCJ0.3/4-822             ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------GSAQG-NF------------TGHTKK--------TNGN--------NGTNGALVQS----PSNQSALG------AGGANSNGSAARVWGVATGSSSGLA-H------C--------------SVSGGDG [...]
+Q9HCJ0.3/810-1437          --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9HCJ0.3/1434-1689         --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9UPQ9.4/1-1833            MREKEQEREEQLMEDKKRKKEDKKKKEATQ-KVTEQKTKVPEVTKP-----SLS-QPTAASP-------IGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------SAA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPPSCMLLGGGAGPPP-CTAP-GANPNNA--QVTG-ALLQSESGTAPDSTLGGA-AASNYANSTWGSGASSNN-----GTSPNPIHIWDKVIVDG-SDMEEWPCIAS-KD-TESSSENTTDNNS--ASNPGSEKS-TL------------PGSTTS--------NK------------GKGSQCQS----ASS----------------GNECNLGVWK------SDPK-A------K--------------SVQSSNS [...]
+B4H887.1/32-1121           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q3TRK2.1/1-88              --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q3TRK2.1/88-731            --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8BNF0.2/9-877             --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4MF11.1/6-1287            --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4NHM7.1/6-1344            --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D0Z7B2.1/6-1290            --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4JZV3.1/6-1310            --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q1LZM4.1/2-292             --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q1LZM4.1/292-736           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4S4D3.1/1-379             ------------MEDKKRKKDDKRKRETSQ-KVTEQKNKVPELTKP-----ASA-QPSAPQI-------SSASHSPGPTPSASPSPATLGPGSAAAPPQGGNNAKR-LAGANGQPCSNTVSPPAASGPSPAGNGSANSGGQTPQQQP-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPL-SSMLLGGGGGG------D-GPNANMA--ATCD-SVAASSSTALTSSSVAAASTTSNYANSMWGVSS--GS-----QTSSQ---GREKVIVDG-NDLEEWPSIAG-ND-GARAPFTGLGGGS---ANSGKPVN-SISA-------SGNQSSPTS--------SF------------SMPNECIQ----SSN----------------GVAWGVAASQ------GHLSGG------N--------------AVAASGP [...]
+Q4S4D3.1/395-556           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4S4D3.1/557-654           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4S4D3.1/651-825           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4S4D3.1/823-1099          --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4S4D3.1/1091-1191         --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q3UUG8.1/1-727             --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C3ZJT1.1/159-315           -RLQMEEEEEQRQEEERRKREEKKKKQQQL-KAKAQELKAKEAE-S-----AKS-QPSQAQP-------AQQ------------------------------AAKR-PSSAQGQQP----------------------------P-------------------------------RY-PREVPPRFQQQAQKQQHHKQKQQGGQGK---KQQGGSGWGSPP-PQMP-SAAPQVG-PSGWGDSNPRSQENSWANAAKKGM-APENFTNGAK-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C3ZJT1.1/328-369           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C3ZJT1.1/371-689           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C3ZJT1.1/730-1350          --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B0WTJ5.1/228-1404          --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8BXM6.1/4-627             --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q99JR3.2/24-648            --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q172C6.1/6-1080            --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4L7C4.1/6-1178            --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q172C7.1/363-538           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q172C7.1/573-1487          --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q6P7B1.1/2-432             --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q3UQ45.1/7-500             --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4T0A8.1/27-228            --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4T0A8.1/329-402           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4T0A8.1/405-529           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4T0A8.1/526-801           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B7ZB91.1/13-478            --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q7Q3B9.4/7-766             --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q7Q3B9.4/781-1217          --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8BX83.2/38-410            -QEKEQEREEQLMEDKKRKKEDKKKKEATQ-KVTEQKTKVPEVTKP-----SLS-QPTAASP-------IGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------SAA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPPSCMLLGGGAGPPP-CTAP-GANPNNN-AQVTG-ALLQSESGTAPESTLGGA-AASNYANSTWGPGASSNS-----GASPNPIHIWDKVIVDG-SDMEEWPCIAS-KD-TESSSENTTDNNS--ASNPGSEKS-SL------------PGSTTS--------NK------------GKGSQCQA----ASS----------------GNECNLGVWK------SDPK-A------K--------------SVQPPNS [...]
+Q172C8.1/192-646           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q172C8.1/672-1244          --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B0WXH0.1/311-1189          --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B0WXH0.1/1191-1443         --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B0R1E2.1/1-289             --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B0R1E2.1/290-554           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B1H1W1.1/13-388            -REKEQEREEQLMEDKKRKKEDKKKKEAAQ-KVTEQKTKVPEVTKP-----SSS-QATAASL-------PGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------STA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPASCMLPGGGAGAPPSTTAP-GACPGNA-QPGVG-ALLQGESGPTTDSSSGAA-ATSNYANSTWGSGGPASS-----GPTTNPPHAWDKVIVDG-SDMEEWPCIAG-VD-AEPPSDNATDNNS--ASNSASEKG-PP------------QGSTTS--------HK------------GRGGQGQQ----QQQ---------------PGSECIQGVWK------SDPK-A------K--------------PVPSSNP [...]
+A7UUT0.1/13-626            --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A7UUT0.1/686-771           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A7UUT0.1/838-1208          --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q66JU9.1/2-312             --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4DKJ5.1/1-276             MREKEQEREEQLMEDKKRKKEDKKKKEATQ-KVTEQKTKVPEVTKP-----SLS-QPTAASP-------IGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------SAA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPPSCMLLGGGAGPPP-CTAP-GANPNNA--QVTG-ALLQSESGTAPDSTLGGA-AASNYANSTWGSGASSNN-----GTSPNPIHIWDKVIVDG-SDMEEWPCIAS-KD-TESSSENTTDNNS--ASNPGSEKS-TL------------PGSTTS--------NK------------GKGSQCQS----ASS----------------GNECNLGVWK------SDPK-A------K--------------SVQSSKP [...]
+Q8BWM2.1/1-337             --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A0NFA3.2/8-516             --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A0NFA3.2/687-1175          --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B7PWH5.1/252-389           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B7PWH5.1/349-695           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B7PWH5.1/720-1088          --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8VD67.1/1-249             --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q148P0.1/1-249             --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9JHZ1.1/1-249             --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B0WXG8.1/386-1198          --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B0WXG8.1/1199-1287         --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4TA89.1/1-316             --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4T0A9.1/1-255             -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------WDQLIIDQ-RDTEAWPLIKL-SPSQASPGGCSLDTDPGPLTSSGSTSN-SCSAVN----MATGANSQTGHFPANHLSNK------------ANSGLNHT----NHTGTS----------MLSNQVAANRSWG------SGPG-PS----HCP-----------SQSSVGTEV [...]
+Q4T0A9.1/370-579           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q6ZPQ4.1/1-243             --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4TA88.1/5-275             --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4TA88.1/319-457           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3KSX2.1/4-277             --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B8RJB3.1/9-266             --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A7SDW4.1/430-1260          --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A7SDW4.1/1319-1671         --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A8PU70.1/566-908           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4T5V2.1/1-136             ------------MEDKKKKKDDKKKKEISQ-KVSEQKIKDTSCSQPLATPGSVSPSPGPATPSSPTPGAAGVSAQV--------------------PPCGGNNAKQWTAVANGQPSSQTSQT----------------SQQQQQQQQ-----------------------------RYMSREVPPRFRSQ----QDHKVLLKRGQPPL-SSMLLGGGGE------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+B4DST4.1/1-168             --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3RQ20.1/1143-1394         --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8BXV9.1/2-142             --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A7T6Q0.1/2-144             --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C1K8B6.1/4-244             --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C1K890.1/4-244             --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A5BE57.1/246-300           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A5BE57.1/307-474           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C1K8V5.1/4-177             --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q2GV87.1/66-278            --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8MSF0.1/1-120             --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4H886.1/6-148             --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A9USE7.1/720-774           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A9USE7.1/997-1101          --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C5WVW4.1/223-289           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+P20105.2/153-385           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+P20105.2/537-654           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C4IYK3.1/223-290           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B6UA93.1/223-290           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9RQB9.1/109-183           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9RQB9.1/236-287           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9RQB9.1/300-388           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B8APB9.1/226-292           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q10R21.1/226-292           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q0DUQ0.1/248-314           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8BZH2.1/5-63              --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4PJL3.1/173-393           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4PJL3.1/533-654           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B5DF80.1/306-473           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C1GEW9.1/11-129            --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C1GVG2.1/279-439           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B2GUY3.1/194-262           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B2GUY3.1/296-379           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3M4K4.1/89-378            --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3M4K4.1/533-691           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D4AC14.1/194-262           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D4AC14.1/296-379           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4T1P6.1/6-46              -------------------------------------------------------------------------------------------------------------TPPQQQC----------------------------QLSSA-------------------------SARYPPREVPPRFR-Q----QEHKQLLKRGQPLP----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D4AC21.1/123-191           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D4AC21.1/225-308           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C5WPD4.1/242-318           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9GH32.1/107-174           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9GH32.1/295-362           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A5B3Z9.1/212-306           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q6IQ30.1/296-379           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+O04319.1/114-194           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+O04319.1/304-419           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+P31209.2/366-455           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B2RXY9.1/193-253           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B2RXY9.1/296-394           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A2A5N3.1/193-253           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A2A5N3.1/296-393           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9D4E6.1/307-466           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4VC03.1/296-379           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q13310.1/296-379           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D3Z5M2.1/296-380           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A4IFC3.1/296-379           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B1ANR0.1/296-379           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4NNJ8.1/320-445           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D2I596.1/309-392           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4JL62.1/290-395           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C5YBU9.1/128-201           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C5YBU9.1/329-416           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q99LF8.1/296-380           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C0PPV9.1/259-392           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q91YZ8.1/296-380           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9GNX9.1/266-364           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A3KFU8.1/296-380           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9N4W3.1/235-341           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q6PHQ9.1/296-380           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9MVK8.1/264-361           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D3AVQ3.1/284-366           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A3KFU5.1/296-380           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A5BPW5.1/140-241           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q3UX16.1/225-309           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C0PT30.1/259-393           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4K3C6.1/67-191            --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C4Q4K6.1/224-436           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9H7X8.1/113-180           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9H7X8.1/304-412           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3S2W8.1/76-163            --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3S2W8.1/165-267           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q6CDH3.1/332-428           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9R7H3.1/281-377           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q7T3G5.1/297-380           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q3UTA6.1/197-279           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3NHT3.1/152-330           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4MHJ9.1/106-306           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A5BF74.1/281-378           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8QGJ7.1/296-379           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4J985.1/306-430           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B8LRZ2.1/277-363           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A5E351.1/72-416            --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D2H6M0.1/296-405           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+O42323.1/299-489           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A9NX92.1/275-362           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9GT62.1/311-412           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q5KBW2.1/367-420           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q2PEV8.1/238-322           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B6U4M0.1/324-410           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A8NF86.1/337-425           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4N2I1.1/44-159            --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q2I2V8.1/539-606           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3MYX8.1/14-153            --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4RNX8.1/296-379           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D1ZFW1.1/794-871           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9RIB9.1/231-294           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C0SAP5.1/281-410           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9HRX8.1/250-356           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q7SGG0.1/13-167            --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9FPJ8.1/236-325           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9FFU0.1/236-325           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A5E1Y8.1/358-537           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q15164.1/107-185           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D3ZAS7.1/296-399           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B6K033.1/364-457           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q5TST0.3/683-841           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B6K6T8.1/356-444           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C1GDP1.1/281-415           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9H7X9.1/314-422           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q7Q9F7.4/282-427           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q10N87.1/216-320           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A3F293.1/10-109            --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4JPX4.1/284-409           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8RXR5.1/110-177           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+P42731.1/126-193           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q2VIP3.1/296-392           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A3F295.1/6-117             --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A9S4M3.1/42-65             --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q54BM2.1/286-375           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q3ZCS4.1/296-393           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A3F290.1/9-110             --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A9TLC5.1/312-407           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A5E7X5.1/33-235            --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A3F299.1/12-111            --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q5VX58.1/296-390           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9H361.2/296-390           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q2VIN9.1/296-390           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A9T3C5.1/56-79             --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4PF35.1/18-283            --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C5WUD2.1/243-339           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4P8R9.1/368-413           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q55F37.1/112-343           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q54LR6.1/53-262            --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4NBP3.1/171-277           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D3B9K1.1/622-823           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B8AL31.1/216-320           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4P3Y1.1/128-184           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4VXU2.1/296-404           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9VYA6.1/174-225           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q25AW7.1/146-228           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q2VIN7.1/296-392           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D0N277.1/201-240           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q6R969.1/253-422           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4KT28.1/222-266           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q98SP8.2/296-391           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9RY32.1/285-382           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4NP54.1/2-69              --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q86KE5.1/77-311            --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q2V9C2.1/258-417           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9LEB4.1/261-347           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4P2T9.1/335-396           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A5C5B3.1/256-335           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3MKU5.1/256-639           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q86NT0.1/173-270           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A8NN12.1/68-136            --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A3CUY7.1/2-69              --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B0X8C2.1/150-263           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A5E3S9.1/278-450           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9FX88.1/338-415           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q54X31.1/100-217           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q10HZ8.1/240-333           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9AY92.1/240-333           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q10HZ7.1/240-333           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B8AKU6.1/240-333           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q2V9A1.1/201-306           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A2YEJ5.1/343-442           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4KQM5.1/242-419           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q69X94.1/342-443           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8LBV8.1/233-325           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C0P488.1/242-336           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3M300.1/220-284           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9SAB3.1/234-326           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q0DQQ8.1/284-377           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C0PFW8.1/269-336           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C0HHH3.1/270-337           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9M6E6.1/117-184           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q2FSR7.1/6-69              --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C0SUE2.1/77-175            --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A0CJW3.1/434-742           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4ME65.1/311-417           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9I0E1.1/253-334           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8LFI9.1/244-343           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4PH83.1/181-247           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9FTY9.1/365-463           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3M562.1/702-895           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C4QZM5.1/235-294           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D3BFK6.1/320-440           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A3GHN7.2/350-469           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q54C48.1/271-412           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q0WW84.1/287-386           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q54FL0.1/951-1244          --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4MC02.1/171-283           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A7AT74.1/621-697           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9LJL7.1/287-386           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4NE44.1/470-686           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A0BQD1.1/165-319           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q05196.2/328-430           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A9TFH5.1/223-287           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A1C5H3.1/188-267           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A9NWA0.1/248-328           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4JY35.1/15-92             --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D0H0K7.1/432-591           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q6DGV1.1/174-212           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4KN27.1/225-337           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3NV15.1/1200-1273         --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B5LEQ5.1/179-323           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q6C9A9.1/660-764           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4JIH9.1/171-286           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q5TSQ4.3/457-676           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A9TZW4.1/245-319           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4PZT3.1/1188-1272         --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D4APH2.1/480-541           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D3BH34.1/115-236           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C4XVP0.1/46-94             --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C5GQY8.1/409-612           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4L803.1/240-323           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C5DIP1.1/2-75              --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D3B7T2.1/209-345           --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
diff --git a/test/data/DA730641.fasta b/test/data/DA730641.fasta
new file mode 100644
index 0000000..f25ebbf
--- /dev/null
+++ b/test/data/DA730641.fasta
@@ -0,0 +1,16 @@
+>DA730641.1 Homo sapiens cDNA clone NT2RM4000472, 5' end, mRNA sequence.
+AAAATCTGGCGCGGCTTTTGCCTTTTGCGCCAGCGTGAGCTCGGTTAGGGTCTCCACGGC
+CGTGCTTTCACCCCTCAGGGAGGCGTCGGTGATTCGGTCACAGCCTCAGCCTCCGTCGCT
+CTGTGACCTGCGGGTATTGGATGATTCGTAGCTGAGACTCCGCTACACCCCTGAAGTGGG
+GAAATGGTGTGTGTTCTCATTTTACCCAAGATCTTTGGCCAGTGCAGGGCATAGAAGATT
+CATTCCACAAACTTATACTGAGAAGATATGAGAAATGTGGACAGAAGAATTTACAATTAA
+GGAAAGGCTCTAAAAGTGTGAATAAGTGTAAGGTGCAGAAAGGAGGTTATAATGGACTTT
+ACCAATGCTTATCAACTACCCAGAGCAAAATAATTCAGTGTAATACATCTGTCAAAGTTT
+TTCATAAATTTTCAAATTCAAACAACATAAGACATACTGGAGAGAAATCATTTAAATGTA
+AAAAATGTGGCAGATCATTTCGCAAGTTCCTCCAACTAACTTAACATAAGGGAATACATG
+CTGGAGAGATACCCTACAAATAAATGTGAAGAATGTGGCAAAGCCTCTAATAGGTCCACA
+AGCATTACTAAATATAAGAAAATTCATGCTGGAGAGAAACCCCTCATGTGAAGAACGTGT
+CAGAATCTTTACCTCATCCTCAAGCTTTGACAAACATAAGAGAATTCATACTGGAGAGAA
+ACCCTACACGTGAAGAATGTGGCAAAGCCTTGAGACAATTCACAGTTCTGAATGAACATA
+AGAAAATTCATACTGGAAAAGAACCCTNCCAATGTGAAGAATGNGCAAAGCTTTTAAACA
+GTCCANAAGCCTGAATGACATAAGAA
diff --git a/test/data/Makefile.am b/test/data/Makefile.am
new file mode 100644
index 0000000..1ecea96
--- /dev/null
+++ b/test/data/Makefile.am
@@ -0,0 +1,35 @@
+
+SUBDIRS = .
+
+EXTRA_DIST = \
+ALIGN.fasta \
+ALIGN.selex \
+DA730641.fasta \
+PF02171_full.selex \
+PF02171_full.stock \
+PF02171_seed.fasta \
+PF02171_seed.msf \
+PF02171_seed.scores \
+PF02171_seed.segs \
+PF02171_seed.selex \
+PF02171_seed.stock \
+PF02171_seed_segs.stock \
+PF02171_seed_separator.stock \
+Q9H8G1.fasta \
+cgph_pale.color \
+cgph_pale2.color \
+chr4_dna_align.gff \
+chr4_protein_align.gff \
+chr4_ref_seq.fasta \
+chr4_ref_seq_short.fasta \
+chr4_translation_frame1.fasta \
+chr4_vs_DA730641.dot \
+chr4_vs_chr4.dot \
+markup.color \
+markup2.color \
+markup_content.selex \
+markup_headers.selex
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/test/data/Makefile.in
diff --git a/test/data/Makefile.in b/test/data/Makefile.in
new file mode 100644
index 0000000..3a4eb03
--- /dev/null
+++ b/test/data/Makefile.in
@@ -0,0 +1,613 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 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@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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 = :
+subdir = test/data
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/./seqtools_version.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-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 \
+	tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+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@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPS_CFLAGS = @DEPS_CFLAGS@
+DEPS_LIBS = @DEPS_LIBS@
+DEPS_SQLITE3_CFLAGS = @DEPS_SQLITE3_CFLAGS@
+DEPS_SQLITE3_LIBS = @DEPS_SQLITE3_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+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_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+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_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+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@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = .
+EXTRA_DIST = \
+ALIGN.fasta \
+ALIGN.selex \
+DA730641.fasta \
+PF02171_full.selex \
+PF02171_full.stock \
+PF02171_seed.fasta \
+PF02171_seed.msf \
+PF02171_seed.scores \
+PF02171_seed.segs \
+PF02171_seed.selex \
+PF02171_seed.stock \
+PF02171_seed_segs.stock \
+PF02171_seed_separator.stock \
+Q9H8G1.fasta \
+cgph_pale.color \
+cgph_pale2.color \
+chr4_dna_align.gff \
+chr4_protein_align.gff \
+chr4_ref_seq.fasta \
+chr4_ref_seq_short.fasta \
+chr4_translation_frame1.fasta \
+chr4_vs_DA730641.dot \
+chr4_vs_chr4.dot \
+markup.color \
+markup2.color \
+markup_content.selex \
+markup_headers.selex
+
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/test/data/Makefile.in
+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 test/data/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign test/data/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):
+
+# 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.
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	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"
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	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; \
+	$(am__define_uniq_tagged_files); \
+	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-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	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"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+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 \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    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:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+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."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-recursive
+
+clean-am: clean-generic 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
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+	check-am clean clean-generic cscopelist-am ctags ctags-am \
+	distclean distclean-generic 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 pdf \
+	pdf-am ps ps-am tags tags-am 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/test/data/PF02171_full.selex b/test/data/PF02171_full.selex
new file mode 100644
index 0000000..ab18c1c
--- /dev/null
+++ b/test/data/PF02171_full.selex
@@ -0,0 +1,842 @@
+C4V9J2_NOSCE/489-791        ...........................................................................................is--LVVLPD..KSTAR..YEEIKRK.TE...TR..S..RMVTQCVLE.K..N.FSRLDN................-PQFAGNLLL.......KINSK..........LGGV.N.....FKV.D....K--.-E........F......S..V....V...K...G.....K.A..T.L..................................VIGIDVNHPGIGD...............LNSP..SVVAIVGGMN...N...E.L.T...S....F.K.....T.II..K...QQ.....D..........R.......R....H...EI......VEN....LKD......................... [...]
+B6K0R2_SCHJY/507-805        ............................................................................................y-LFFILDS..NSPEP..YATIKRL.CN...TK..F..GIPSQCALR.K..H.IEGA--................KPQYCANLGM.......KVNAK..........LGGV.N.....VHL.E....PKS.--........F......P..-....L...G...N.....I.P..T.I..................................ILGGDVYHPARGG...............-SGA..SIGSMVGSID...L...H.G.C...K....Y.T.....A.MS..R...AQ.....N..........R.......N....Q...EM......IQG....MKD......................... [...]
+AGO1_SCHPO/500-798          ............................................................................................y-LFFILDK..NSPEP..YGSIKRV.CN...TM..L..GVPSQCAIS.K..H.ILQS--................KPQYCANLGM.......KINVK..........VGGI.N....cSLI.P....KSN.P-........-......-..-....L...G...N.....V.P..T.L..................................ILGGDVYHPGVGA...............-TGV..SIASIVASVD...L...N.G.C...K....Y.T.....A.VS..R...SQ.....P..........R.......H....Q...EV......IEG....MKD......................... [...]
+D0U267_CRYPA/639-939        ............................................................................................l-IFYIMPS..KDIVA..YERLKKS.MD...VR..V..GTLSQIVLA.P..H.VMKA--................APQYCSNVAT.......KVNAK..........LGGY.T.....SKL.K....E--.--........-......G..G....F...F...K.....V.P..T.M..................................ILGADISHGSFGQt.............gNLQA..SLAAITMSMD...P...D.A.I...T....Y.A.....A.GC..E...TN.....G..........Y.......R....V...EI......MTKd..tVRR......................... [...]
+A4QSM3_MAGGR/672-970        ............................................................................................l-IFFILPN..KSSIN..YERIKKS.AD...CR..Y..ALVTQCMQA.A..H.VRKN--................QAQYCSNVAM.......KVNAK..........LGGQ.T.....CKV.A....---.--........-......-..T....A...F...K.....K.P..T.M..................................MIGCDVSHAAPGA...............-QQA..SMAAITVSMD...K...D.C.A...R....Y.A.....A.AV..E...TN.....G..........Y.......R....C...EI......LLPq..nVRG......................... [...]
+C7YHP8_NECH7/612-917        ............................................................................................l-LFVVVSK..KNSGT..YERLKKS.AD...CR..F..GILTQVVLG.S..H.VQKN--................NGQYHSNVCM.......KVNAK..........LGGA.T....aCTP.P....LWK.TP........T......F..F....P...E...T.....R.P..T.I..................................MIGVDVSHTAPGG...............-TSP..STAAMTMSVD...K...D.A.T...R....Y.A.....A.LV..E...TN.....G..........Y.......R....V...EM......LTPg..nMRM......................... [...]
+C9SSA6_VERA1/19-91          ............................................................................................p--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+C9SGB5_VERA1/589-897        ............................................................................................m-LFVIIRH..ANSGN..YERVKKS.AD...CR..F..GVLTQVVLS.R..H.VEKN--................QGQYHSNVAM.......KVNAK..........LGGT.T.....CRV.PhpnaKAP.RG........Q......P..P....F...F...S.....E.P..T.M..................................IMGLDVSHAGAGI...............-NSP..SMAAMTMSMD...K...D.A.C...R....Y.A.....A.VC..Q...TN.....G..........Y.......R....V...EM......LSPs..nTNE......................... [...]
+Q8J276_NEUCR/628-929        ...........................................................................................qi-VFVAVPD..KSAHV..YERLKKI.FE...CR..Y..GIVTQVLQA.D..H.VKKA--................QGQYISNVCM.......KVNAK..........LGGQ.T.....SSL.T....ATK.AK........S......H..N....F...F...I.....R.P..T.M..................................MIGVDVTHASPGS...............-DMP..SIAAMCASVD...V...E.G.Y...Q....Y.R.....A.AV..Q...TN.....G..........W.......H....N...EI......LTDe..nIST......................... [...]
+D1ZPU0_SORMA/563-867        ...........................................................................................qi-IFIVVPD..KTAHV..YERIKKI.FD...CR..Y..GVVTQVVQA.Q..H.VQKA--................NGQYLSNVCM.......KVNAK..........LGGQ.T.....SSL.T....ANK.TK........P......H..G....F...F...T.....R.P..T.M..................................MIGVDVSHASPGS...............-EMP..SIAAMCATVD...R...D.G.Y...Q....Y.R.....A.AV..Q...TN.....G..........W.......R....S...EV......LTNe..nIEA......................... [...]
+A6S388_BOTFB/557-866        ............................................................................................i-LFFILPD..RNSFM..YERFKKN.NE...CR..F..AMMSQMMNV.A..H.VAKA--................QPQYCSNVCM.......KVNAK..........LGGT.T.....CKV.A....DSK.PP........K......P..-....F...F...P.....R.A..T.M..................................VIGADVSHATPGS...............-PQS..SMACLTMSMD...S...T.A.C...R....Y.A.....A.AV..Q...TN.....G..........K.......R....V...EM......ISPd..nINS......................... [...]
+A7F377_SCLS1/445-754        ............................................................................................i-LFFIMPD..RNSFL..YERLKKN.NE...CR..F..GMMSQMMNI.A..H.VLKA--................QPQYCSNVCM.......KVNAK..........LGGT.T.....CKV.A....DVK.P-........L......K..P....F...F...P.....R.P..T.M..................................VIGADVSHASPGS...............-PQS..SMACLTMSMD...S...T.A.C...R....Y.A.....A.AV..Q...TN.....G..........N.......R....V...EM......ISKd..nINS......................... [...]
+Q2GQS4_CHAGB/345-418        ...........................................................................................qi-IFYILRD..KTAFV..YDRFKQA.ND...CG..V..ACLSQMLQA.Q..H.VRKA--................QGQYCSNVCM.......KVNSK..........LGGQ.T.....SKI.A....SRA.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+B2AKU3_PODAN/441-754        ...........................................................................................qi-IFFILKD..KSAWY..YERLKRS.SD...CR..Y..AMPTQMLNL.Q..Q.VRKG--................QAQYCSNVCL.......KVNAK..........LGGC.T....aVA-.V....KTQ.AGqplkpnsvA......P..H....F...D...N.....T.P..T.M..................................FIGADVSHGAAGH...............-LSP..SVAAMTVSMD...K...A.A.T...K....Y.A.....A.GA..Q...TN.....G..........W.......R....V...EI......IQPy..nMMQ......................... [...]
+B6Q5R7_PENMQ/547-853        ............................................................................................l-LLFIVPN..KDTLV..YHRIKKS.CD...CR..F..GVASQVLQR.A..H.VERK--................QPQYMSNVAM.......KVNAK..........LGGV.-.....-TC.K....VAP.-R........Q......D..S....L...N...R.....A.G..C.M..................................IIGADVSHAAPGS...............-TAA..SLTAISVSAD...Q...N.C.V...K....Y.M.....G.SC..Q...TG.....Y..........S.......R....V...EM......IDEd..nMKN......................... [...]
+B8M5N8_TALSN/546-852        ............................................................................................l-LLFVVPN..KDVLV..YHKIKKS.CD...SR..F..GVASQVLQS.A..H.VFKKQL................--QYMSNVAM.......KVNAK..........LGGV.-.....-TC.K....AAP.RQ........A......-..S....M...N...R.....P.G..C.M..................................IIGADVSHAAPGS...............-IAA..SLTAISVSAD...L...D.C.V...K....Y.M.....G.SA..Q...TG.....Y..........S.......R....V...EM......IDEh..nMKS......................... [...]
+C8V9S4_EMENI/46-154         ................................................................................feiyihlppgdhn--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+Q5B3I7_EMENI/46-154         ................................................................................feiyihlppgdhn--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+C1G1H6_PARBD/510-817        ............................................................................................l-LIFVVSE..KNAFH..YSRIKKS.CD...CR..F..GVPSQVLQA.T..Q.VVKC--................NGQYISNVLM.......KVNAK..........LGGT.-.....TAR.V....SSK.IT........K......G..L....-...-...L.....P.F..T.M..................................IIGADVSHSAPGS...............-PAP..SMAAVSVSMD...Q...F.G.G...R....Y.A.....G.AC..Q...TN.....G..........D.......H....V...EM......ISEa..nVES......................... [...]
+C0S3N8_PARBP/535-823        .............................................................................fnlrpellifvvlqat--------..-----..-------.--...--..-..---------.-..-.-QVV-K...............cNGQYISNVLM.......KVNAK..........LGGT.-.....TAR.V....SSK.IT........K......G..L....-...-...L.....P.F..T.M..................................IIGADVSHSAPGS...............-PAP..SMAAVSVSMD...Q...F.G.G...R....Y.A.....G.AC..Q...TN.....G..........D.......H....V...EM......ISEa..nVES......................... [...]
+C1GU57_PARBA/495-755        .........................................................................................vdtf--------..-----..-------.--...--..-..---------.-..-.------................----------.......-VNAK..........LGGT.-.....TAR.V....SSK.IT........K......G..L....-...-...L.....P.F..T.M..................................IIGADVSHSAPGS...............-PAP..SMAAVSVSMD...Q...F.G.G...R....Y.A.....G.AC..Q...TN.....G..........D.......H....V...EM......ISEa..nVES......................... [...]
+C5G7J1_AJEDR/547-854        ............................................................................................l-LIFIVMD..KNAFH..YTRIKKS.CD...CR..F..GVVSQVLQA.S..Q.VAKC--................NGQYISNVLM.......KVNAK..........LGGT.T.....-AR.I....ASK.IT........K......G..L....-...-...A.....P.F..S.M..................................IIGADISHSAPGS...............-FAP..SMAAMTVSMD...Q...F.G.G...R....Y.T.....G.AC..E...TN.....G..........D.......R....V...EM......ISQa..nIKS......................... [...]
+C5JJJ6_AJEDS/547-854        ............................................................................................l-LIFIVMD..KNAFH..YTRIKKS.CD...CR..F..GVVSQVLQA.S..Q.VAKC--................NGQYISNVLM.......KVNAK..........LGGT.T.....-AR.I....ASK.IT........K......G..L....-...-...A.....P.F..S.M..................................IIGADISHSAPGS...............-FAP..SMAAMTVSMD...Q...F.G.G...R....Y.T.....G.AC..E...TN.....G..........D.......R....V...EM......ISQa..nIKS......................... [...]
+C6HRE3_AJECH/547-854        ............................................................................................l-LIFIVMD..KNAFH..YTRVKKS.CD...CR..F..GVPSQVLQA.S..Q.VAKC--................NGQYISNVLM.......KVNAK..........LGGT.-.....TAR.I....SSK.IT........K......G..L....-...-...P.....P.Y..T.M..................................IIGADISHSSPGS...............-VAP..SMAAMTVSMD...Q...F.G.G...R....Y.T.....A.AC..E...TN.....G..........D.......H....V...EM......ISQa..nIKS......................... [...]
+C0NUS8_AJECG/547-854        ............................................................................................l-LIFIVMD..KNAFH..YTRVKKS.CD...CR..F..GVPSQVLQA.S..Q.VAKC--................NGQYISNVLM.......KVNAK..........LGGT.-.....TAR.I....SSK.IT........K......G..L....-...-...P.....P.Y..T.M..................................IIGADISHSSPGS...............-VAP..SMAAMTVSMD...Q...F.G.G...R....Y.T.....A.AC..E...TN.....G..........D.......H....V...EM......ISQa..nIKS......................... [...]
+A6RGK9_AJECN/547-854        ............................................................................................l-LIFIVMD..KNAFH..YTRVKKS.CD...CR..F..GVPSQVLQA.S..Q.VAKC--................NGQYISNVLM.......KVNAK..........LGGT.-.....TAR.I....SSK.IT........K......G..L....-...-...P.....P.Y..T.M..................................IIGADISHSSPGS...............-VAP..SMAAMTVSMD...Q...F.G.G...R....Y.T.....A.AC..E...TN.....G..........D.......H....V...EM......ISQa..nIRS......................... [...]
+C5FDD8_NANOT/542-847        ............................................................................................l-MIFVVAD..RQSFH..YLRIKKS.CD...CR..F..GVPSQVLQG.Q..Q.VAKC--................NGQYISNVLM.......KINAK..........LGGT.T.....-AR.A....VSK.HS........S......-..-....G...L...P.....P.Y..T.M..................................IIGSDVSHSSPGS...............-FSP..SMAAMTVSMD...T...F.G.G...R....Y.T.....A.GC..E...TN.....G..........E.......R....V...EL......ISQa..nIKS......................... [...]
+D4AMR8_ARTBE/628-933        ............................................................................................l-MIFVVAD..KQSFH..YLRIKKS.CD...CR..F..GVPSQVLQG.Q..Q.VVKC--................NGQYISNVLM.......KINAK..........LGGT.T.....ARA.V....SKQ.CS........-......-..-....G...L...P.....P.F..T.M..................................IIGADVSHSSPGS...............-FSP..SMAAMTVSMD...T...F.G.G...R....Y.T.....A.GC..E...TN.....G..........E.......R....V...EL......ISQa..nIKS......................... [...]
+D4DBM7_TRIVC/515-807        ............................................................................................l-MIFVVAD..KQSFH..YLRIKKS.CD...CR..F..GVPSQVLQG.Q..Q.VGKC--................NGQYISNVLM.......KINAK..........LGGT.T.....ARA.V....SKQ.CS........-......-..-....G...L...P.....P.F..T.M..................................IIGADVSHSSPGS...............-FSP..SMAAMTVSMD...T...F.G.G...R....Y.T.....A.GC..E...TN.....G..........E.......R....V...EL......ISQa..nIRS......................... [...]
+C5P9D5_COCP7/668-975        ............................................................................................l-LILIVQD..RHSFH..YLRIKKS.CD...CR..F..GVPSQVLQG.R..Q.VVKG--................SGQYISNVLM.......KINAK..........LGGT.-.....TAR.S....HSR.Y-........-......N..T....S...L...P.....P.F..T.M..................................IIGADVSHSSPGS...............-YAP..SMASFTVCMD...T...F.G.G...R....Y.T.....A.GC..E...TN.....G..........E.......R....R...EI......ISPl..nIKE......................... [...]
+C4JZ88_UNCRE/552-859        ............................................................................................i-LILVVQD..KQSFH..YLRIKKS.CD...CR..F..GVPSQVLQG.Q..Q.VVKG--................SPQYISNVLM.......KVNAK..........LGGT.T....aRAI.S....KYN.PS........L......P..-....-...-...-.....P.Y..T.M..................................VIGADVSHASPGS...............-HAP..SMASFTVCMD...T...F.G.G...R....Y.N.....A.GC..E...TN.....G..........E.......R....R...EI......ISPa..nIRD......................... [...]
+B6H4L5_PENCW/673-980        ............................................................................................l-MVFIVPD..KDSFV..YLRIKKS.SD...CR..Y..GTPSQVLQA.A..H.CINN--................RPQYHANVLM.......KVNAK..........LGGI.-.....-TA.R....AVP.KS........K......S..S....G...L...R.....P.G..S.M..................................IIGADVTHPMMGV...............-WTP..SLAAMSVSAN...S...T.A.T...R....Y.M.....G.GC..E...TN.....G..........D.......R....I...EI......IRDk..vVEY......................... [...]
+A2QDC5_ASPNC/643-949        ............................................................................................l-LLVIVPD..KNSFT..YTRIKKS.CD...CR..W..GVPSQVMQS.T..H.VIKG--................NAQYISNVLM.......KVNAK..........LGGV.T.....SRA.V....SKV.Q-........-......G..A....S...L...R.....P.G..S.I..................................IIGADVTHPPMGV...............-WSP..SMAALSVSKD...P...Y.G.S...S....Y.F.....G.SC..E...AN.....M..........D.......R....V...EI......ISRt..sMEF......................... [...]
+Q2UKV9_ASPOR/543-849        ............................................................................................l-LLIIVPD..KNSFT..YLRIKKS.CD...CR..W..GVPSQVLQS.A..H.VAKA--................NPQYISNVLM.......KVNAK..........LGGT.T.....A--.R....IIP.KV........N......D..A....S...L...K.....P.M..T.M..................................IIGADVTHPTIGV...............-WSP..SMAAVSVCMD...T...F.G.G...R....Y.W.....G.AC..E...TN.....G..........D.......R....V...EV......IARa..nMEH......................... [...]
+B8N3T1_ASPFN/436-742        ............................................................................................l-LLIIVPD..KNSFT..YLRIKKS.CD...CR..W..GVPSQVLQS.A..H.VAKA--................NPQYISNVLM.......KVNAK..........LGGT.T.....A--.R....IIP.KV........N......D..A....S...L...K.....P.M..T.M..................................IIGADVTHPTIGV...............-WSP..SMAAVSVCMD...T...F.G.G...R....Y.W.....G.AC..E...TN.....G..........D.......R....V...EV......IARa..nMEH......................... [...]
+Q0CNV7_ASPTN/543-854        ............................................................................................l-LVVIVAD..KNSFN..YTRIKKS.CD...CR..W..GVPSQLLQA.A..Q.VAKN--................NPQYISNVLM.......KVNAK..........LGGT.T.....AKI.I....PKT.P-........-......D..A....T...L...K.....P.M..S.M..................................IIGADVTHSPLGV...............-WSP..SMAAISVCAD...T...F.G.G...R....Y.W.....G.AC..E...AN.....G..........E.......R....N...EI......INRa..nMEH......................... [...]
+A1CKK4_ASPCL/543-849        ............................................................................................l-LLIIVPD..KNSFT..YTRIKKS.CD...CR..W..GVPSQVLQS.G..H.VIKM--................NPQYASNVLM.......KVNAK..........LGGT.-.....-TA.R....AMP.KI........T......E..A....S...L...R.....P.R..S.M..................................IIGADVTHSPLGV...............-WSP..SMAAMSVCMD...T...F.G.G...R....Y.W.....G.AC..E...AN.....G..........D.......R....N...EI......IASs..nIEV......................... [...]
+A1D6W7_NEOFI/543-849        ............................................................................................l-LLIIVPD..KNSFT..YTRIKKS.CD...CR..W..GVPSQVLQS.G..H.CVKL--................NPQYASNVLM.......KVNAK..........LGGT.-.....-TA.R....AVP.KV........T......E..A....T...L...R.....P.R..S.M..................................IIGADVTHSPLGV...............-WSP..SMAAMSVCMD...A...F.G.G...R....Y.W.....G.AC..E...AN.....G..........D.......R....L...EI......IATs..nIEV......................... [...]
+B0XXP5_ASPFC/564-870        ............................................................................................l-LLIIVPD..KNSFT..YTRIKKS.CD...CR..W..GVPSQVLQS.G..H.CVKL--................NPQYASNVLM.......KVNAK..........LGGT.-.....-TA.R....AVP.KV........T......D..A....T...L...R.....P.R..S.M..................................IIGADVTHPSLGV...............-WSP..SMAAMSVCMD...T...F.G.G...R....Y.W.....G.AC..E...AN.....G..........D.......R....L...EI......IATs..nIEV......................... [...]
+Q4WXX3_ASPFU/564-870        ............................................................................................l-LLIIVPD..KNSFT..YTRIKKS.CD...CR..W..GVPSQVLQS.G..H.CVKL--................NPQYASNVLM.......KVNAK..........LGGT.-.....-TA.R....AVP.KV........T......D..A....T...L...R.....P.R..S.M..................................IIGADVTHPSLGV...............-WSP..SMAAMSVCMD...T...F.G.G...R....Y.W.....G.AC..E...AN.....G..........D.......R....L...EI......IATs..nIEV......................... [...]
+Q0U7V7_PHANO/645-956        ............................................................................................f-LFFVVND..RNVDV..YRRIKKS.CD...IR..F..GVASQVLQA.K..H.VMSA--................SPQYISNVCM.......KVNAK..........LGGC.T....sVAK.S....NVI.PK........V.....aP..K....S...P...S.....I.P..T.M..................................VVGADVSHPAPGAg.............sSEAA..SFAAITVSAD...P...F.F.A...K....Y.W.....A.EV..Q...TN.....G..........N.......R....V...EM......VTTs..nIDE......................... [...]
+B2W8P0_PYRTR/611-920        ............................................................................................n-FMFFIVN.dRNVEV..YRRIKKS.CD...IR..F..GVASQCLQA.K..H.VLSA--................SPQYISNVCM.......KVNAK..........LGGC.TsvaksQLI.P....KIA.--........-......P..K....S...A...S.....I.P..T.M..................................VVGADVSHPAPGAa.............sGEAA..SFAAITVSAD...A...Y.F.V...K....Y.W.....A.EC..N...TN.....G..........N.......R....V...EM......VTTt..nIYE......................... [...]
+B8BT49_THAPS/780-963        ............................................................................................i-MLVVLPD..KGKAL..YDHVKFV.SN...QC..S..GVQTQCASL.D..T.FNRQRN................KEQYSTALAT.......KMNAK..........LSTV.E.....DGA.I....AWR.GA........V......D..W....V...N...Q.....C.H..T.L..................................VIGIGMAHGMGRG...............--AE..TIVGISTCLD...G...Q.C.F...R....L.L.....H.SA..Y...VQ.....K..........K.......A....D...TL......SKD...aMID......................... [...]
+C7SYH3_THAPS/780-1048       ............................................................................................i-MLVVLPD..KGKAL..YDHVKFV.SN...QC..S..GVQTQCASL.D..T.FNRQRN................KEQYSTALAT.......KMNAK..........LSTV.E.....DGA.I....AWR.GA........V......D..W....V...N...Q.....C.H..T.L..................................VIGIGMAHGMGRVl............lvMSVPpyHLIAISLVF-...F...V.L.L...K....V.P.....K.RA..Y...VQ.....K..........K.......A....D...TL......SKD...aMID......................... [...]
+C7SYH3_THAPS/1070-1160      .......................................................................................sssass--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+C7SYH2_PHATR/826-1176       ...........................................................................................lm--FAVIPT..KDVST..YAFVKYL.SH...VE..F..GIPSQVMVE.E..S.YQNQRS...............kTEAYCAGIAL.......KLNTK..........LSNSlNr..stAWS.I....YSG.TA........R......Q..W....L...M...D.....T.P..T.M..................................IMGYCVASGPGQD...............--SK..SIVVGTASLD...V...G.G.T...H....C.C.....H.DK..R...VQ.....S..........K.......S....H...IV......DSD...vLEE......................... [...]
+B7G499_PHATR/1-107          .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+A8Q5F0_BRUMA/545-849        .............................................................................itkdrydpvhaisnrg--------..-----..-------.--...--..-..---------.-..-.------................AEMTLDNLVM.......KMNLK..........LGGI.Nh...aLTS.S....AAFlSK........N......R..L....T...N...N.....V.M..D.Mewlr..........................hsrmFFGLDMSHAAPQSlyer......qaqvpPSEP..TIVAMTFSC-...G...E.P.F...A....M.Q.....G.EY..W...MQ.....E..........P.......R....L...HV......VKF....LKE......................... [...]
+Q21691_CAEEL/673-1001       .............................................................................................TIVFGIIA..EKRPD..MHDILKY.FE...EK..L..GQQTIQISS.E..T.ADKFMRd.............hgGKQTIDNVIR.......KLNPK..........CGGT.Nf...lIDV.P....ESV.GH........R......V..V....C...N...N.....S.A..E.Mrakl.........................yaktqFIGFEMSHTGARTrfdi......qkvmfDGDP..TVVGVAYSL-...K...H.S.A...Q....L.G.....G.FS..Y...FQ.....E..........S.......R....L...HK......LTN....LQE......................... [...]
+A8WNJ6_CAEBR/660-987        ............................................................................................s-LVIGIAL..EKMPH..IHDVLKY.YE...EK..I..GQQTLQLCA.E..T.VRKMGQg.............ggNKTTVDNVIR.......KLNAK..........CGGT.Nf...yVEV.P....NAV.KN........R......Q..V....C...I...N.....P.E..E.Mrkkl.........................ykytqFIGFELSHTGARSkfdk......qkqtvEIDP..TIVGVSYTL-...K...H.A.T...Q....L.G.....G.FS..Y...FQ.....D..........S.......R....V...HK......LTR....VKE......................... [...]
+A8WS47_CAEBR/435-755        ......................................................................................trverss--------..-----..-NHILKY.YE...EK..I..GQQTLQLCA.E..T.VMKMARc.............ggNKTTVDNVLR.......KLNLK..........CGGT.Nf...yVGV.P....DAV.NN........R......Q..V....C...I...N.....P.E..E.Mrkkl.........................ykntqFIGFELSHTGAQSkfdk......lkedaEIDP..TIVGVAYSL-...K...H.A.T...Q....L.G.....G.FS..Y...FQ.....D..........G.......R....V...HK......LTH....VQE......................... [...]
+A8WQA0_CAEBR/671-998        ............................................................................................d-IFVGIAR..DKKPD..VHDIMKY.YE...ES..V..GMQTIQLCK.Q..T.VDKMMNp.............qgGRQTIDNVMR.......KFNLK..........CGGT.Nf...yVDI.P....SNI.RG........R......S..I....C...S...N.....T.E..T.Lhkkl.........................lekvqFIGFEISHGAARTlydr......srnqmDGEP..SIVGVSYSL-...K...Q.S.T...Q....L.G.....G.FS..Y...MQ.....T..........Q.......R....E...YK......IQK....LDD......................... [...]
+Q9TXN7_CAEEL/609-935        ............................................................................................n-ILVAIAK..EKKPD..VHDVLKY.YE...AS..V..GLQTIQVCK.Q..T.VDMMLSs..............gGRQTADNVMR.......KFNLK..........CGGT.Nf...fVQI.P....RSV.NG........R......T..V....C...A...D.....A.H..L.Lnekl.........................fervqFIGFDISHGASRTlfdr......stgkmDGEV..SIVGVSYSL-...S...H.S.T...H....-.L.....G.GF..A...YM.....Q..........T.......Q....K...EY......KLQ...kLDE......................... [...]
+C8JQR1_CAEEL/591-918        ............................................................................................d-ILFAITR..EKKPD..VHDILKY.YE...ES..I..GLQTIQVCQ.Q..T.VDKMMGg.............ggGRQTIDNVMR.......KFNLK..........CGGT.Nf...fDEI.P....SSV.RG........R......A..V....C...S...N.....S.E..T.Lskkl.........................fehvqFIGFEISHGAARTlfdr......srsqlDGEP..SVVGVSYSLT...-...-.N.S...T....Q.L.....G.GF..T...YL.....Q..........T.......Q....K...EY......KLQ...kLGE......................... [...]
+YQ53_CAEEL/650-977          ............................................................................................d-ILVGIAR..EKKPD..VHDILKY.FE...ES..I..GLQTIQLCQ.Q..T.VDKMMGg.............qgGRQTIDNVMR.......KFNLK..........CGGT.Nf...fVEI.P....NAV.RG........K......A..V....C...S...N.....N.E..T.Lrkkl.........................lehvqFIGFEISHGASRTlfdr......srsqmDGEP..SVVGVSYSLT...-...-.N.S...T....Q.L.....G.GF..T...YL.....Q..........T.......Q....K...EY......KLQ...kLDE......................... [...]
+Q9N3L7_CAEEL/585-911        ............................................................................................s-IIIGITE..EKKPE..VHDVLKY.FE...AA..V..GLQTMQIHS.K..T.AGFIIS...............gNGQTAGNVIK.......KLNLK..........CGGI.Ny...iVEV.P....QSF.NR........T......V..V....C...S...N.....N.S..F.Vqkkl.........................fdgtqFIGFEMTHGAARTlfdk......sngtfDGEP..TIVGCAYSL-...Q...K.A.T...D....L.G.....G.FN..W...FQ.....E..........Q.......N....E...YR......LKN....LGT......................... [...]
+A8XZY0_CAEBR/665-992        ............................................................................................s-IVIGITS..EKKPD..VHDVMKY.FE...AG..I..GLQTLQIHD.R..T.AECFMRe.............qgGAQTVDNVMR.......KLNLK..........LGGI.Nf...nVDP.V....NMY.EH........K......V..I....C...N...N.....I.G..G.Mkkkl.........................fekvqFVGFEMTHGSSRTlydk......aqgqfDGEP..TIVGCGYSL-...S...S.P.T...E....L.G.....G.YN..F...LQ.....E..........R.......N....E...YK......LKN....LDS......................... [...]
+Q27GU1_CAEEL/511-833        ............................................................................................p-FVLFISD..-DVPN..IHECLKF.EE...RM..S..DIPTQHVLL.K..N.VKKMRDniekks....qggrraYDLTLDNIVM.......KANIK..........CGGL.N.....YT-.A....DIP.RD........L......A..C....W...N...E.....V.S..T.F..................................VIGMDVAHPDRNAa.............rEGNP..STVGLSCNSA...E...N.P.Y...S....F.I.....G.DF..L...YT.....D..........P.......R....R...EA......IQDe..iLRK......................... [...]
+Q19645_CAEEL/674-996        ............................................................................................p-FVLFISD..-DVPN..IHECLKF.EE...RM..S..DIPTQHVLL.K..N.VKKMRDniekks....qggrraYDLTLDNIVM.......KANIK..........CGGL.N.....YT-.A....DIP.RD........L......A..C....W...N...E.....V.S..T.F..................................VIGMDVAHPDRNAa.............rEGNP..STVGLSCNSA...E...N.P.Y...S....F.I.....G.DF..L...YT.....D..........P.......R....R...EA......IQDe..iLRK......................... [...]
+A8XRG0_CAEBR/648-970        ............................................................................................p-FVLFVSD..-DVPN..IHECLKF.EE...RM..S..DIPTQHILL.K..N.IRKIRDniekks....qggrraYDLTLDNIVM.......KANVK..........CGGL.N.....YT-.A....DIP.RD........I......G..S....W...R...E.....V.S..T.F..................................VMGMDVAHPDKMAt.............rEGSP..STVGLSCNSA...E...S.P.Y...S....F.V.....G.DF..L...YT.....D..........P.......R....R...EA......IQDe..iLRK......................... [...]
+A8QE08_BRUMA/711-1030       ..........................................................................................afv-----MYI..DSRDD..THDDLKL.YE...AL..H..RIVTQHIHG.S..R.AREAPK................KVATLENIVN.......KLNCK..........NFGQ.C....yGII.P....ESF.AT........N......K..W....I...S...T.....G.K..T.L..................................IIGYDVCHPEPQPrher......rmrmpPTQP..SVLGISFNGA...S...C.P.E...T....F.I.....G.DY..S...FQ.....E..........P.......R....K...EQ......VTSs..iLEE......................... [...]
+A8WWH9_CAEBR/55-193         ..................................................................................hqymqnlrgah--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....T.N..T.L..................................FIAYTVNHGTVDPnt..........pgvYNNP..STAVFTFNGT...T...R.P.E...H....F.I.....D.YF..H...FQ.....K..........A.......S....I...QH......IDPq..vIQR......................... [...]
+Q17600_CAEEL/19-157         ....................................................................................qymrslrgp--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...E.....T.N..T.L..................................FIGYAINHGTVDPst..........pgvYNNP..STVVFTFNGT...S...C.P.D...H....F.T.....E.YF..H...FQ.....K..........A.......T....I...PH......VDPa..lIRR......................... [...]
+Q9XVF1_CAEEL/588-902        ...........................................................................................pi---VIYAD..HTSEG..THSTLKL.QE...RL..C..EVITQQVAL.D..K.SLKRTP................GKVTANNLLM.......KLNLK..........YGGV.Nh...kVRV.D....N-S.I-........S......H..L....W...G...D....tS.N..T.L..................................IISYDVCHSSGKVykk.........deiCDEP..SCVGFGFNGT...A...C.P.E...A....F.I.....G.DF..H...YQ.....L..........P.......R....H...EQ......VDEh..lLKL......................... [...]
+A8WWI1_CAEBR/598-920        .........................................................................................yviy------VD..HSSEP..YHQLLKY.LE...RK..F..EVMTQHLNF.D..K.ALQIRSgs...........pllGKSTMTNILM.......KINLK..........NGGL.N....hKVL.P....DPS.ID........H......L..W....G...D...K.....S.N..T.L..................................IISYDVCHSSGKVykk.........getCFEP..SCVGFGYNGT...S...V.P.E...A....I.I.....G.DF..H...YQ.....L..........P.......R....N...EQ......VDP...sVLT......................... [...]
+Q8MU01_HETGL/745-963        .....................................................................................rvgsslpp--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............---P..SCIGWAATIG..kR...H.K.D...E....Y.I.....G.DF..V...YQ.....A..........P.......R....R...EE......KID...iIAS......................... [...]
+A8XFJ6_CAEBR/595-895        ...........................................................................................ky--VFIITD..DNITH..LHRE--F.NQ...TR..L..AVYNIFREM.S..K.ATSVCKd..............gKRLTLENVIN.......KTNIK..........LGGL.N.....YTV.S....DTK.RS........M......-..-....-...-...T.....D.D..Q.L..................................IIGVGISAPPPGTkfll.......egkgHLNP..QIVGFASNA-...V...S.N.H...E....F.V.....G.DF..V...LA.....S..........V.......G....Q...DT......MSS....IED......................... [...]
+Q23415_CAEEL/40-350         ............................................................................................k-FAFVITD..DSITH..LHKKYKA.LE...QK..S..MMVIQDMKI.S..K.ANSVVKd..............gKRLTLENVIN.......KTNMK..........LGGL.N.....YTV.S....DAK.KS........M......-..-....-...-...T.....D.E..Q.L..................................IIGVGVSAPPAGTkymm.......dnkgHLNP..QIIGFASNA-...V...A.N.H...E....F.V.....G.DF..V...LA.....P..........S.......G....Q...DT......MAS....IED......................... [...]
+GCC7_CAEEL/596-906          ...........................................................................................ky--VLMITD..DAIVH..LHKQYKA.LE...QR..T..MMIVQDMKI.S..K.ANAVVKd..............gKRLTLENIIN.......KTNVK..........LGGL.N.....YTV.S....DAK.KS........M......-..-....-...-...T.....D.E..Q.L..................................IIGVGVSAPPAGTkymm.......dnkgHLNP..QIIGFASNA-...V...A.N.H...E....F.V.....G.DF..V...LA.....P..........S.......G....Q...DT......MAS....IED......................... [...]
+P91085_CAEEL/543-853        ...........................................................................................ky--VLVITD..DAITH..LHKRYKA.LE...QK..S..RMTIQDMKI.S..K.ANAVVKd..............gKRLTLENIIN.......KTNLK..........LGGL.N.....YTV.S....DSK.KS........M......-..-....-...-...T.....D.E..Q.L..................................IIGVGVSAPPAGTkfmm.......dnkgHLNP..QIIGFASNA-...V...A.N.H...E....F.V.....G.DF..V...LA.....P..........S.......T....Q...DT......MAS....IED......................... [...]
+A8WJ71_CAEBR/596-953        ............................................................................................e-FVFIITD..DTITN..LHQKYKM.IE...SL..Q..SIVVQDMKM.S..K.ALSVIDs..............gKRLTLENVIN.......KTNVK..........LGGS.N.....YIF.T....DTK.KY........L......-..-....-...-...-.....D.R..V.L..................................VIGIGISQPPPGTkfiv.......egkgFLNP..QIIGFAYNG-...K...Q.K.Q...E....F.A.....G.DF..V...LC.....P..........A.......G....Q...DV......SGF...sASKivisfq................... [...]
+A8X957_CAEBR/565-899        ............................................................................................e-FVFIITD..DAITN..LHQKYKM.IE...SL..Q..SIVIQDMKM.T..K.ALSVIDs..............gKRLTLENVIN.......KTNVK..........LGGS.N.....YIF.T....DTK.KY........L......-..-....-...-...-.....D.R..V.L..................................VIGIGISQPPPVTkfiv.......egkgFLSP..QIISFSYNG-...K...Q.K.Q...E....F.A.....G.DF..V...LC.....P..........A.......G....Q...DV......NGF...sASKliislq................... [...]
+O62275_CAEEL/594-924        .............................................................................................TFVFIITD..DSITT..LHQRYKM.IE...KD..T..KMIVQDMKL.S..K.ALSVINa..............gKRLTLENVIN.......KTNVK..........LGGS.N.....YVF.V....DAK.KQ........L......-..-....-...-...-.....D.S..H.L..................................IIGVGISAPPAGTkyam.......enkgVLNP..NVIGYAYNA-...Q...H.N.Q...E....F.S.....G.DF..V...LN.....S..........A.......S....Q...DT......LAP....IED......................... [...]
+Q9N585_CAEEL/604-934        .............................................................................................TFVLCITE..DNITC..LHQKYKF.IE...HH..T..QMIVQDMKL.S..K.ALSVVNa..............sKKLTLENVIN.......KTNVK..........LGGS.N.....YVY.L....DTK.NF........L......-..-....-...-...-.....Q.E..H.L..................................IIGVGISSPPPGTkyim.......esrgILNP..TIVGFAYNG-...N...G.K.Q...E....F.S.....G.DF..V...LN.....A..........A.......G....Q...ET......IAP....IED......................... [...]
+A8P7Z4_BRUMA/1-302          ............................................................................................m--------..-----..-----KY.IE...SQ..E..QILTQDLKA.S..T.ALGIVMk..............rQYQTLDNIVN.......KTNIK..........MGGL.N.....YSVhL....EEN.CD........-......R..W....L...G...R.....P.G..F.L..................................IVGLDIAHPSYSRvpn.........kdrNTVL..SVVGYSANIK...K...H.P.L...D....F.I.....G.GY..R...FA.....K..........A.......Q...mE...EL......MDD...aIQQ......................... [...]
+A8XEJ5_CAEBR/552-849        ............................................................................................q-LLFFVVK..-SRYN..YHQNIKC.LE...QK..Y..DLLTQEVRA.E..T.AEKVFR................QPQTRLNIVN.......KTNMK..........LGGL.N.....YQI.G....S--.--........-......E..T....F...R...R.....P.D..Y.L..................................IVGFETSQRSGGN...............PDYP..ISVGYAANML...D...H.H.Q...K....F.A.....G.GY..V...YV.....K..........R.......S....N...DV......FGP...iIKD......................... [...]
+Q86S33_CAEEL/548-852        ............................................................................................q-LLFFVVK..-SRYN..YHQQIKA.LE...QK..Y..DVLTQEIRA.E..T.AEKVFR................QPQTRLNIIN.......KTNMK..........LGGL.N.....YAI.G....S--.--........-......E..A....F...N...K.....P.N..R.L..................................IVGFVTSQRVGGN...............PDYP..ISVGFAANML...K...H.H.Q...K....F.A.....G.GY..V...YV.....H..........R.......D....R...DV......FGS...iIKD......................... [...]
+Q9GZG4_CAEEL/548-852        ............................................................................................q-LLFFVVK..-SRYN..YHQQIKA.LE...QK..Y..DVLTQEIRA.E..T.AEKVFR................QPQTRLNIIN.......KTNMK..........LGGL.N.....YAI.G....S--.--........-......E..A....F...N...K.....P.N..R.L..................................IVGFVTSQRVGGN...............PDYP..ISVGFAANML...K...H.H.Q...K....F.A.....G.GY..V...YV.....H..........R.......D....R...DV......FGS...iIKD......................... [...]
+Q86NJ8_CAEEL/548-852        ............................................................................................q-LLFFVVK..-SRYN..YHQQIKA.LE...QK..Y..DVLTQEIRA.E..T.AEKVFR................QPQTRLNIIN.......KTNMK..........LGGL.N.....YAI.G....S--.--........-......E..A....F...N...K.....P.N..R.L..................................IVGFVTSQRVGGN...............PDYP..ISVGFAANML...K...H.H.Q...K....F.A.....G.GY..V...YV.....H..........R.......D....R...DV......FGS...iIKD......................... [...]
+B3KLZ7_CAEEL/358-662        ............................................................................................q-LLFFVVK..-SRYN..YHQQIKA.LE...QK..Y..DVLTQEIRA.E..T.AEKVFR................QPQTRLNIIN.......KTNMK..........LGGL.N.....YAI.G....S--.--........-......E..A....F...N...K.....P.N..R.L..................................IVGFVTSQRVGGN...............PDYP..ISVGFAANML...K...H.H.Q...K....F.A.....G.GY..V...YV.....H..........R.......D....R...DV......FGS...iIKD......................... [...]
+O02095_CAEEL/574-878        ............................................................................................q-LLFFVVK..-SRYN..YHQQIKA.LE...QK..Y..DVLTQEIRA.E..T.AEKVFR................QPQTRLNIIN.......KTNMK..........LGGL.N.....YAI.G....S--.--........-......E..A....F...N...K.....P.N..R.L..................................IVGFVTSQRVGGN...............PDYP..ISVGFAANML...K...H.H.Q...K....F.A.....G.GY..V...YV.....H..........R.......D....R...DV......FGS...iIKD......................... [...]
+O16386_CAEEL/548-847        ............................................................................................q-LIMFITK..-SMNN..YHTEIKC.LE...QE..F..DLLTQDIRF.E..T.AVKLAQ................QQNTRKNIIY.......KTNMK..........LGGL.N.....YEL.R....S--.--........-......G..V....F...S...N.....S.K..R.L..................................IIGFETSQRGGLG...............-DAP..IAIGFAANMM...S...H.S.Q...Q....F.A.....G.GY..M...FV.....K..........K.......S....A...DN......YGP...vIPE......................... [...]
+A8XUC0_CAEBR/563-774        ............................................................................................e-LLMFITK..-SNRE..YHKEIKV.LE...HE..F..DIRTQDIRF.E..T.ALKFER................QQNTRRNLVN.......KINVK..........LGGI.N.....YEV.E....S-P.T-........-......-..-....-...F...T.....K.D..R.I..................................IIGLETSQNSTMG...............-DGL..ICVGFSANMM...A...K.E.T...Q....F.C.....G.GY..M...FT.....Q..........R.......S....N...DI......YGS...vLKD......................... [...]
+Q8MU01_HETGL/598-705        ....................................................................................lighakgfe--------..--GDD..VHVTIKA.FE...QQ..T..EIVTQAITF.D..V.LKEVLDk..............gSPLTVTNCIH.......KTNVK..........MGGL.N.....YAL.H....MDD.PS........V......A..Q....L...F...D.....G.Q..T.L..................................FLGFAMNFP----...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+A8X254_CAEBR/555-701        ..........................................................................................qll---MFVFR..-RSVP..LHAQIKS.LE...QK..F..DILTQEITL.E..T.AEKIFR................QPQTLQNIVN.......KTNMK..........LGGL.N.....YRI.D....STV.L-........-......-..-....-...-...N.....P.N..I.L..................................FIGFETSSKGGAGdvg........iinlKFGP..VSIGFAANMM...Q...N.H.Q...Q....F.A.....G.GY..I...YA.....P..........Q.......A....R...DV......GKN...qYFQ......................... [...]
+A8X254_CAEBR/749-889        ...........................................................................................nl--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+A8X022_CAEBR/492-805        .....................................................................................qllpfvth--------..-SRYA..LRKDIEW.ME...HK..Y..RIPSLAIDL.K..I.ARKMVE................DKAVKLDLAD.......QVNKK..........TQGV.N.....YAI.Y....S--.--........-......D..V....F...R...N.....G.N..D.L..................................VISISFSEPSPKYakvrililfshmifcFQYP..FTVGFAANTS...N...H.P.L...V....F.T.....S.EF..L...YS.....N..........S.......D....N...MD......SGA...vLTE......................... [...]
+A8X023_CAEBR/600-841        ..................................................................................hgilalqnael--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................------------G...............DSEV..TTVGYASNFM...D...H.P.Q...K....F.A.....G.SY..K...FV.....E..........R.......T....D...EA......SLD...sIIEllqymitl................. [...]
+Q21495_CAEEL/61-336         ...................................................................................ffrdgqetsl--------..-----..-------.--...--..-..---------.N..N.QSFRNP................TDFAQTGFFV.......DAKQQ..........LGGL.N.....YVV.N....S--.--........-......E..T....W...N...D.....S.G..L.L..................................LIGLSTAPYLNSY..............sSENV..TTIGFVSNTM...D...H.P.Q...K....F.A.....G.GY..K...YV.....K..........S.......G....S...DV......FGQ...vMPE......................... [...]
+C4LVV2_ENTHI/470-756        ......................................................................................mvlavsv--------..--TDS..IYEQIKK.FC...VD..E..NVPTQCIKP.N..T.LRRQPP................-TPVIQMITL.......QMQSK..........MGGI.-.....PWK.T....EID.SS........F......-..-....-...-...-.....A.D..G.M..................................TVGIDVISAGKDR...............----..EIVAIVSSVD...K...D.F.T...V....Y.K.....K.SS..V...VE.....K..........K.......G....L...HT......AGI...hIGE......................... [...]
+B0ET37_ENTDI/470-756        ......................................................................................mvlavsv--------..--TDS..IYEQIKK.FC...VD..E..NVPTQCIKP.N..T.LRRQSL................-TPIIQMITL.......QMQSK..........MGGI.-.....PWK.T....EID.SG........F......-..-....-...-...-.....S.D..G.M..................................TVGIDVISAGKDR...............----..EIVAIVSSVD...K...S.F.T...V....Y.K.....K.SS..V...VE.....K..........K.......G....L...HT......AGI...hIGE......................... [...]
+B0ENU6_ENTDI/467-753        ..........................................................................................kiv---FVVLL..-NDSL..YEDIKRK.C-...FD..R..EIITQCILP.D..T.LKKQNL................-FPIVSQITY.......QIQSK..........LGGI.P.....-WD.V....LTN.NK........L......-..-....-...-...-.....F.K..T.M..................................IIGISVIPYDDNK...............----..ECISLVSSMK...S...N.S.L...A....T.R.....K.KY..S...TI.....E..........K.......K....G...CG......NEG....YNSq........................ [...]
+C4LVQ2_ENTHI/467-753        ...........................................................................................ki--VFVVIL..-NDSL..YEDIKRK.CF...DK..-..EIITQCIHP.D..T.LKKQNL................-FPIVSQITY.......QIQSK..........IGGI.-.....PWD.V....LTN.NK........F......-..-....-...-...-.....I.K..T.M..................................IIGIAVTPYDDNK...............----..ECISLVSSMK...Y...N.S.F...A....T.R.....K.KY..S...AI.....E.........tK.......G....S...GN......AGY...nSQI......................... [...]
+C4LY31_ENTHI/438-711        ............................................................................................q-IVFSVFD..-SIEQ..MVEIKEY.FM...IY..G..NIPTQIIDL.N..E.RYDDKK................----ITNLCL.......RTGIK..........LGCS.R.....MKL.D....QNT.S-........-......-..-....-...-...-.....-.D..I.C..................................VIGI--TSREFFV...............--NK..TLITLCISKD...E...N.L.N...V....F.D.....T.ES..Y...FV.....S..........N.......D....N...WH......SGI...gLEQ......................... [...]
+B0EI01_ENTDI/438-710        ............................................................................................q-IVFSVFD..-SIEQ..MVEIKDY.FM...IY..G..NIPTQIIDL.N..E.RYDDKK................----ITSLCL.......RTGIK..........IGCS.R.....LKL.D....QNT.--........-......-..-....-...-...-.....S.D..I.C..................................VIGI--TSREFFV...............--NK..TLITLCISKD...E...N.L.N...V....F.D.....T.DS..Y...FV.....S..........N.......D....N...WH......SGI...gLEQ......................... [...]
+A2DPV7_TRIVA/501-794        ............................................................................................f-VICVVPD..TQKDR..YDSIKSV.LS...SD..L..GIPSQIAIE.G..S.L-NPKL................LMSVATNLVI.......QIGTK..........LNGA.-.....LVK.L....S-R.KS........I......-..S....A...E...M.....K.G..T.M..................................LIGLSIASGKGRD...............--PS..SYVSGVATTD...F...D.L.S...M....Y.H.....S.KS..F...GP.....H..........N.......E....K...II......PEN...fITD......................... [...]
+D2V7J4_NAEGR/498-769        ............................................................................................y-VFFLMAN..ENKHI..YSALKQF.YN...CT..V..GIPSQCIVC.N.gD.WFKR--................----LPNCLI.......QMSAK..........IGGL.-.....IWS.V....ERS.YQ........E......-..-....-...-...-.....-.F..V.S..................................VCGIDIQRKGRNF...............---K..GSISLSLNT-...-...-.S.T...T....L.Y.....Y.TV..P...FR.....E..........S.......D....E...TN......IRN...kLLS......................... [...]
+C5LD15_9ALVE/718-952        ....................................................................................vsgttpsts--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..S...MK.....E..........R.......R....S...AG......VAR...aIKE......................... [...]
+Q3SD94_PARTE/460-750        ...........................................................................................qi-VVSILDR.hEDSKL..YNELKKF.LI...SV..Q..GVLHQNVSI.Q..T.VDSKKF................-SKIAQQIVK.......QVHSK..........IGKQ.-.....LWN.I....QKI.TE........I......-..-....-...-...S.....E.K..I.M..................................IIGIDVYHKTLAN...............--NK..SCVGFNAQFG...Q...Q.S.E...K....H.F.....T.KT..I...IV.....E..........K.......G....K...EL......NKG....VGQ......................... [...]
+A0D4I7_PARTE/320-610        ...........................................................................................qi-VVSILDR.hEDSKL..YNELKKF.LI...SV..Q..GVLHQNVSI.Q..T.VDSKKF................-SKIAQQIVK.......QVHSK..........IGKQ.-.....LWN.I....QKI.TE........I......-..-....-...-...S.....E.K..I.M..................................IIGIDVYHKTLAN...............--NK..SCVGFNAQFG...Q...Q.S.E...K....H.F.....T.KT..I...IV.....E..........K.......G....K...EL......NKG....VGQ......................... [...]
+Q3SD95_PARTE/471-760        ...........................................................................................lv--VSLIDQ.eKDKQI..YQQLKQY.LI...AE..E..GVSHQNVTL.Q..L.IENQKF................-GAIVPKIIQ.......QIHSK..........LGNQ.T.....WNI.Q....KIQ.E-........I......-..-....-...-...S.....D.N..I.M..................................IVGIDVYHKTVLG...............--LD..SCVGFNAQFG...Q...Q.G.Y...A....N.F.....T.KT..I...IV.....R..........K.......G....K...EI......NKD....VAM......................... [...]
+A0CE33_PARTE/2-210          .........................................................................................keis--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....D.E..I.M..................................IIGIDVYHKTEKK...............--IN..SCVGFNAQFG..qQ...G.D.T...N....F.T.....-.KT..I...IV.....D..........Q.......G....K...EI......NKD....IAN......................... [...]
+A0DEE4_PARTE/478-780        ............................................................................................s-LVVSLTD..KNRDTslYIGLKDF.LL...SQggA..GVIHQNVTT.K..S.CKNKNK................-QSIASKIAQ.......QISVK..........LGNP.-.....LWV.I....PKV.KG........I......-..-....-...-...S.....E.K..I.M..................................IIGMDIYHKLVTG...............--KQ..SCMGFVAHFD..lE...C.K.T...S....F.S.....K.TI..-...IM.....K..........S.......G....Q...EF......NQA....VGQ......................... [...]
+Q3SE57_PARTE/478-788        ............................................................................................s-LVVSLTD..KNRDTslYIGLKDF.LL...SQggA..GVIHQNVTT.K..S.CKNKNK................-QSIASKIAQ.......QISVK..........LGNP.-.....LWV.I....PKV.KG........I......-..-....-...-...S.....E.K..I.M..................................IIGMDIYHKLVTG...............--KQ..SCMGFVAHFD..lE...C.K.T...S....F.S.....K.TI..-...IM.....K..........S.......G....Q...EF......NQA....VGQ......................... [...]
+Q3SE52_PARTE/466-770        ............................................................................................l-IVTFVNE.rDKDRI..YGHIKKY.CF...QD..Q..GISHQNILS.K..F.LKTKNP................-SSVASKIAQ.......QMSMK..........LGNP.-.....LWA.I....PKP.NG........I......-..-....-...-...S.....D.K..T.M..................................VVGIDIYHKLLTN...............--RK..SCMGFVAYLE...S...E.C.L...N....T.F.....A.KP..I...IM.....R..........E.......G....Q...EM......SQE....VGR......................... [...]
+Q3SE58_PARTE/466-770        ............................................................................................l-IVTFINE..KDKDR.iYGQMKKY.CF...QE..H..GISHQNILS.K..F.LKSKNP................-SSVASKIAQ.......QMSMK..........LGNP.-.....LWA.I....PKP.NG........I......-..-....-...-...S.....D.K..T.M..................................VIGIDIYHKLLTN...............--RR..SCMGFVAYLE...S...E.C.L...N....T.F.....A.RP..I...IM.....K..........E.......G....Q...EM......CHE....VGR......................... [...]
+A0CB11_PARTE/463-767        ............................................................................................l-IVTFINE..KDKDR.iYGQMKKY.CF...QE..H..GISHQNILS.K..F.LKSKNP................-SSVASKIAQ.......QMSMK..........LGNP.-.....LWA.I....PKP.NG........I......-..-....-...-...S.....D.K..T.M..................................VIGIDIYHKLLTN...............--RR..SCMGFVAYLE...S...E.C.L...N....T.F.....A.RP..I...IM.....K..........E.......G....Q...EM......CHE....VGR......................... [...]
+A4ZYY5_TETTH/495-793        ......................................................................................qfivtfs------NA.eKNPSL..YREMKKF.FS...SEggV..GIESQHVTP.R..A.LQKN--................GKSVASKIAL.......QIASK..........LGKR.-.....IWS.V....ETP.VG........I......-..-....-...-...N.....Q.N..T.M..................................IVGIETSMKKIRN...............---Q..QVIGVVASIN...K...D.F.N...K....F.Y.....S.QV..D...FR.....N..........G.......-....N...DI......KLP...tLSK......................... [...]
+A4VE06_TETTH/14-183         ................................................................................lslrllpkpyrli--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+A4VE05_TETTH/347-645        ...........................................vndesaqnkdktsvnfkkgnqvtqllniilksimrdekfqeigknskfyd--------..-----..-------.--...--..-..---------.-..-.------................-----VNSKS.......DIIIK..........SRRI.-.....-WQ.V....ETP.TG........I......-..-....-...-...D.....K.N..T.M..................................IIGIETSMKKINK...............---Q..QVIGVVASID...K...D.F.T...K....Y.F.....S.DV..E...IR.....K..........E.......N....D...TT......FPT....LSK......................... [...]
+Q6UE79_TETTH/497-791        ..........................................................................................qfv---LSFGQ..AQSGL..YSGLKKF.LT...SE..A..GIESQHVNP.R..S.LQKN--................GMSVASKIAL.......QIASK..........LGRR.-.....IWQ.V....ETP.TG........I......-..-....-...-...D.....K.N..T.M..................................IIGIETSMKKIKQ...............---Q..QVVGVVASID...K...D.F.T...K....Y.F.....S.DV..E...IR.....K..........D.......N....D...TT......LPT....LSK......................... [...]
+Q0GM58_TETTH/497-791        ..........................................................................................qfv---LSFGQ..AQSGL..YSGLKKF.LT...SE..A..GIESQHVNP.R..S.LQKN--................GMSVASKIAL.......QIASK..........LGRR.-.....IWQ.V....ETP.TG........I......-..-....-...-...D.....K.N..T.M..................................IIGIETSMKKIKQ...............---Q..QVVGVVASID...K...D.F.T...K....Y.F.....S.DV..E...IR.....K..........D.......N....D...TT......LPT....LSK......................... [...]
+Q22NE2_TETTH/491-777        ............................................................................................s-FIVTFGD..LNTNF..YQQIKHF.FC...IL..A..NVESQHISP.Q..S.LKNKNK................-YKICLNIVL.......QILQK..........TGNQ.-.....IWN.V....EMP.MQ........I......T..-....S...Q...T.....I.N..T.M..................................IVGIETSRNIIKG...............---K..QIIAVVCSIN...R...N.F.S...R....Y.L.....S.QV..Y...FR.....E..........K.......G....C...KQ......LHQ....LQK......................... [...]
+A8VSR3_TETTH/491-787        ............................................................................................s-FIVTFGD..LNTNF..YQQIKHF.FC...IL..A..NVESQHISP.Q..S.LKNKNK................-YKICLNIVL.......QILQK..........TGNQ.-.....IWN.V....EMP.MQ........I......T..-....S...Q...T.....I.N..T.M..................................IVGIETSRNIIKG...............---K..QIIAVVCSIN...R...N.F.S...R....Y.L.....S.QV..Y...FR.....E..........K.......G....C...KQ......LHQ....LQK......................... [...]
+A4ZYY4_TETTH/474-761        ......................................................................................nfnhprq--------..--QTF..YQELKLY.LY...AT..V..AIEHQHFND.D..F.SCHKNK................-NAAISSLII.......QIASK..........LGYP.-.....LWQ.T....HIP.NQ........I......-..-....-...-...F.....N.K..T.M..................................IIAIAVEQKTLHL...............NKQQ..QMIAVVTTIS...K...D.F.T...Q....M.H.....S.EI..F...FN.....E..........I.......Q....N...GP......ISI....LSK......................... [...]
+Q24HU6_TETTH/383-631        ......................................................................................nfnhprq--------..--QTF..YQELKLY.LY...AT..V..AIEHQHFND.D..F.SCHKNK................-NAAISSLII.......QIASK..........LGYP.-.....LWQ.T....HIP.NQ........I......-..-....-...-...F.....N.K..T.M..................................IIAIAVEQKTLHL...............NKQQ..QMIAVVTTIS...K...D.F.T...Q....M.H.....S.EI..F...FN.....E..........I.......Q....N...GP......ISI....LSK......................... [...]
+Q0MRE2_TETTH/533-834        ...................................................................................ivaivapnkf--------..STVQN..YSKIKKL.CT...IT..Q..QIKSQYIRQ.Q..S.LDSKQS................-YNVCSAILS.......QMAAK..........CGTT.-.....LWV.V....NPP.NG........I......-..-....-...-...P.....D.N..T.M..................................IIGTSVQKVFING...............-QPQ..FVIGFVASQD...K...N.V.S...R....F.Y.....S.RA..T...FQ.....K..........L.......N....K...DN......IEK....IST......................... [...]
+Q239A3_TETTH/603-904        ...................................................................................ivaivapnkf--------..STVQN..YSKIKKL.CT...IT..Q..QIKSQYIRQ.Q..S.LDSKQS................-YNVCSAILS.......QMAAK..........CGTT.-.....LWV.V....NPP.NG........I......-..-....-...-...P.....D.N..T.M..................................IIGTSVQKVFING...............-QPQ..FVIGFVASQD...K...N.V.S...R....F.Y.....S.RA..T...FQ.....K..........L.......N....K...DN......IEK....IST......................... [...]
+A0CR14_PARTE/559-847        .............................................................................................MIVIVLNR..YMKNC..YAPLKKM.CM..sEK..F..GVLTQMVSS.D..S.ISKQKK...............gLFSIIQKLAI.......QMMDK..........VGNC.-.....LWT.V....QLP.QK........W......P..-....-...-...-.....D.N..I.M..................................IVSVIIE---KG-...............----..KFAGMLSSLD...K...T.Y.S...R....Y.Y.....S.QM..S...TK.....I..........V.......E....K...CL......IKD....IGD......................... [...]
+Q3SE51_PARTE/572-860        .............................................................................................MIVIVLNR..YMKNC..YAPLKKM.CM..sEK..F..GVLTQMVSS.D..S.ISKQKK...............gLFSIIQKLAI.......QMMDK..........VGNC.-.....LWT.V....QLP.QK........W......P..-....-...-...-.....D.N..I.M..................................IVSVIIE---KG-...............----..KFAGMLSSLD...K...T.Y.S...R....Y.Y.....S.QM..S...TK.....I..........V.......E....K...CL......IKD....IGD......................... [...]
+Q0Q5B1_9SPIT/472-767        ...........................................................................................av--VLLLPGqkGKCNL..YDEVKKY.LL...TD..V..PVPSQAVLT.G..T.IQKGKN................LRSIVNKILI.......QINVK..........IGGI.-.....PWA.V....DSL.PL........-......-..-....-...L...T.....K.P..S.M..................................ICGMDVFHSTSLG...............--KK..SVLALTASMN...Q...T.A.T...K....Y.W.....S.TN..V...IQ.....S..........E......lG....Q...EA......SHA....LNQ......................... [...]
+Q8ISG8_STYLE/475-767        .....................................................................................vlllpgak--------..GKTSL..YDDIKRF.LL...AE..F..PVPSQVVLC.N..T.ISKGKN................LRSIVNKILI.......QITAK..........IGGI.-.....PWT.V....DAL.P-........-......-..-....F...M...D.....K.P..T.M..................................ICGMDVFHSTSLG...............--KK..SVLGLTASIN...V...S.A.T...K....Y.F.....S.SC..V...IQ....gE..........L.......G....L...EA......SHS....LQN......................... [...]
+Q86CV7_STYLE/475-767        .....................................................................................vlllpgak--------..GKTSL..YDDIKRF.LL...AE..F..PVPSQVVLC.N..T.ISKGKN................PRSIVNKILI.......QITAK..........IGGI.-.....PWT.V....GAL.P-........-......-..-....F...M...D.....K.P..T.M..................................ICGMDVFHSTSLG...............--KK..SVLGLTASIN...V...S.A.T...K....Y.F.....S.SC..V...IQ....gE..........L.......G....L...EA......SHS....LQN......................... [...]
+Q8MQL1_TETTH/444-756        ...........................................................................................ma--VFLLPG..KKKAGmyYDEIKRY.FT...NV..K..PIPTQVILA.S..T.AMKDKG................LRSVVNKLLM.......QICAK..........TGGV.-.....PWV.M....DNL.P-........-......-..-....F...Q...N.....L.P..T.M..................................VVGMDVFHNTPGK...............--KE..SIFGFVSTVD...R...N.F.S...K....Y.Y.....S.HS..H...VL.....P..........T.......G....Q...EI......TPF....LQQ......................... [...]
+Q8MXZ9_TETTH/444-756        ...........................................................................................ma--VFLLPG..KKKAGmyYDEIKRY.FT...NV..K..PIPTQVILA.S..T.AMKDKG................LRSVVNKLLM.......QICAK..........TGGV.-.....PWV.M....DNL.P-........-......-..-....F...Q...N.....L.P..T.M..................................VVGMDVFHNTPGK...............--KE..SIFGFVSTVD...R...N.F.S...K....Y.Y.....S.HS..H...VL.....P..........T.......G....Q...EI......TPF....LQQ......................... [...]
+Q23ND1_TETTH/444-756        ...........................................................................................ma--VFLLPG..KKKAGmyYDEIKRY.FT...NV..K..PIPTQVILA.S..T.AMKDKG................LRSVVNKLLM.......QICAK..........TGGV.-.....PWV.M....DNL.P-........-......-..-....F...Q...N.....L.P..T.M..................................VVGMDVFHNTPGK...............--KE..SIFGFVSTVD...R...N.F.S...K....Y.Y.....S.HS..H...VL.....P..........T.......G....Q...EI......TPF....LQQ......................... [...]
+Q3SE56_PARTE/450-741        ............................................................................................f-IIFLLPGqkKNSRL..YRCAKFI.SL...QK..I..ACPSQVVLE.D..T.LTKN--................TRSIVNKIMV.......QICAK..........LGGV.-.....PWA.I....DKL.P-........-......K..L....F...Q...Q.....Q.H..T.M..................................ICAAECYDRIHQI...............----..KHLAFCSTVD...K...N.M.T...K....Y.H.....S.QI..-...--.....L..........K.......G....A...DY......KGD...nLKK......................... [...]
+Q3SE59_PARTE/450-741        ............................................................................................f-IIFLLPGqkKNSRL..YRCAKFI.SL...QK..I..GCPSQVVLE.D..T.LAKN--................TRSIVNKIMV.......QICAK..........LGGV.-.....PWA.I....DKL.P-........-......K..L....F...Q...Q.....Q.H..T.M..................................ICAAECYDRLHQI...............----..KHLAFCSTVD...K...N.M.T...K....Y.H.....S.QI..-...--.....L..........K.......G....A...DY......KGD...nLKK......................... [...]
+Q9U5C9_PARCA/466-759        ............................................................................................f-LIFLLPGqkKKAKL..YKTAKKI.SM...QS..F..GCPSQVIIE.K..T.LQKN--................TRSIVNKILI.......QLNAK..........VGGI.-.....PWA.L....DGF.PQ........Q......-..-....F...Q...A.....K.P..T.M..................................ICGVDIFSKHGKK...............----..NQLAFCSTTD...K...Y.F.S...R....Y.Y.....S.QV..-...--.....I..........S.......S....G...EF......SIH....LQQ......................... [...]
+Q3SE49_PARTE/467-759        ............................................................................................f-LIFLLPGqkKKARL..YKACKVI.SM...AT..F..GCASQVIVE.K..T.LQRN--................TRSIVNKILI.......QLNAK..........IGGT.-.....PWA.L....DGM.P-........-......D..M....F...T...N.....Q.P..T.M..................................ICGVDIFTKAGRK...............----..SQLAFCSTIN...R...Q.F.S...R....Y.Y.....S.QV..-...--.....I..........T.......S....G...EF......CSH....LQL......................... [...]
+Q3SE53_PARTE/460-752        ............................................................................................f-LLFLLPGqkKKARL..YKTAKKI.SM...QK..F..GCASQVVVE.K..T.LAKN--................TRSIVNKILI.......QLNAK..........VGGT.-.....PWA.I....DSL.P-........L......-..T....F...Q...N.....Q.P..T.M..................................ICGTDCFVKSGRK...............----..NQLAFCSTVD...R...N.L.S...R....Y.Y.....S.QV..V...T-.....-..........-.......S....G...EF......SQH....LQS......................... [...]
+A0E0B0_PARTE/455-747        ............................................................................................f-LLFLLPGqkKKARL..YKTAKKI.SM...QK..F..GCASQVVVE.K..T.LAKN--................TRSIVNKILI.......QLNAK..........VGGT.-.....PWA.I....DSL.P-........-......T..T....F...Q...N.....Q.P..T.M..................................ICGTDCFVKSGRK...............----..NQLAFCSTVD...R...N.L.S...R....Y.Y.....S.QV..V...TS.....-..........-.......-....G...EF......SQH....LQQ......................... [...]
+Q3SE50_PARTE/446-748        .....................................................................................llllilng------PK..KNAPL..YTDLKRY.LI...ND..C..PIASQVILS.S..T.LNQPKG...............kVKTICNKLLV.......QICAK..........VGGT.-.....PWG.I....SDL.P-........-......-..-....F...T...D.....Q.P..T.M..................................ICGMDVYHSTAKG...............--RK..SMLSFVSTED...E...F.F.S...K....Y.M.....T.QS..I...EM.....D..........S.......G....V...EF......SFS....LCP......................... [...]
+Q3SE54_PARTE/446-748        .....................................................................................llllilng------PK..KNAPL..YTDIKRY.LI...ND..C..PIASQVILS.S..T.LNQPKG...............kVKTICNKLLV.......QICAK..........VGGT.-.....PWG.V....SEL.P-........-......-..-....F...T...D.....Q.P..T.M..................................ICGMDVYHSTGKA...............--KK..SMLSFVSTED...E...F.F.S...K....Y.M.....T.QS..I...EM.....E..........T.......G....V...EF......SFS....LCP......................... [...]
+Q3SE55_PARTE/446-748        .....................................................................................llllilng------PK..KSAPL..YTDIKRY.LI...ND..C..PIASQVILS.S..T.LNQPKG...............kVKTICNKLLV.......QICAK..........VGGT.-.....PWG.V....SEL.P-........-......-..-....F...T...D.....Q.P..T.M..................................ICGMDVYHSTGKA...............--KK..SMLSFVSTED...E...F.F.S...K....Y.M.....T.QS..V...EM.....E..........T.......G....V...EF......SFS....LCP......................... [...]
+Q54HL3_DICDI/867-1166       ............................................................................................l-FIIILPE.nDHSFI..YKSIKNLsLL...RN..R..AVITQCIKS.S..K.IKDR--................LNLISKPIAS.......QIIAK..........MGKF.-.....PWS.I....D--.PT........I......-..-....F...S...Ni...pE.N..T.M..................................VIGIDVTHNPEIS...............---Y..SVAAFVASTN...N...C.H.T...Q....F.Y.....H.KI..N...IQ.....P..........F.......L....K...EI......LDSd..fIFT......................... [...]
+Q7KWS3_DICDI/669-964        ............................................................................................f-FLIIIPQ..NNAEV..YKGIKMK.SL...IQ..F..RVLTQCIFS.R..T.FDKG--................-RPVSVKLKQ.......QVVAK..........LGLA.-.....PWG.L....GQD.IY........K......G..V....-...-...P.....K.K..T.M..................................VIGVDVGHNSDMK...............--GH..SVVGFVATID...D...K.F.Q...K....F.F.....S.RA..Y...AQ.....E.........rP.......G....K...EI......IHS....LED......................... [...]
+Q54G64_DICDI/590-885        ............................................................................................f-FLMLIPQ..NQPEI..YKEIKRK.SL...VQ..F..KVLTQCIFP.R..T.FYKG--................-RSVTNKLKQ.......QVIAK..........LGYA.-.....PWG.L....NQQ.I-........F......N..G....V...I...P.....K.K..T.M..................................IIGIDVGHNSDMR...............--GH..SVVGFVATID...D...K.F.Q...K....Y.F.....S.RS..F...VQ.....K.........rP.......G....K...EI......IDS....LEE......................... [...]
+Q1ZXG9_DICDI/1063-1281      ......................................................................................nqskiht--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................------------Q...............KDAR..SVAAFCATTN...N...A.F.T...N...cY.V.....S.AT..I...QK.....Q..........S.......S....K...EV......INS....LGA......................... [...]
+Q86HF5_DICDI/896-1194       .............................................................................................FIVVVVNG..VKTDL..YNSIKRT.AI...LE..C..KVITQVLTV.K..T.ITNQKI................-SSIFSKITN.......QINAK..........IDIP.-.....PWT.L....KEN.SN........F......G..I....-...-...P.....N.Y..T.M..................................VVGIDVGHNTDKE...............--SR..SVAAFCASVN...H...S.F.T...N....F.F.....V.AC..S...IQ.....K..........Q......nT....K...EV......IHS....LGN......................... [...]
+D3B338_POLPA/992-1287       ............................................................................................f-FLCAIQQ..-KPDF..YNLIKKY.TL...IT..A..RVITQCILA.K..T.MDKDNI................-GSVVSKVIL.......QVIAK..........LGKD.-.....PWV.L....KNP.G-........Y......-..-....N...I...P.....E.H..T.M..................................VVGIDVGHNAATR...............--GK..SIVAITATLN...R...S.L.T...R....Y.F.....S.TA..I..iQQ.....T..........P.......G....K...DI......IDS....LQT......................... [...]
+D3BMP8_POLPA/633-929        ............................................................................................f-FFCLIPF..GKADV..YAAIKKS.TL...TQ..F..KAITQCAYA.K..T.LGIT--................GMAVAKKILH.......QLIAK..........LGRS.P.....WSI.S....NPV.YK........M......-..-....-...-...P.....K.H..T.M..................................IVGIDVGHNSDQR...............--GK..SVVGFCASID..sE...Y.S.L...Y....H.T.....T.AI..V...QS.....T..........P.......G....K...EI......VES....LRP......................... [...]
+D2V2M6_NAEGR/28-326         ............................................................................................s-FILMITK.nKTSTE..YHTLKEK.TI...VD..M..GIPSQCITE.R..N.IAISEK................KSSILKNITI.......EMNAK..........LGGI.-.....PWM.T....SIP.M-........-......-..-....-...-...K.....P.H..T.M..................................IVGMDVNHSGEVY..............hRSKS..SLVGFVSSYD...S...K.V.C...A....Y.Y.....S.QI..Q...VQ.....K..........P.......G....V...EL......VEN....IKN......................... [...]
+D2VMG4_NAEGR/577-883        ...........................................................................................fa--LVVLFN..DQKQR..YSRVKEV.LC...NQ..V..GIISQCVKL.S..T.ITNEKG................LASKATKVIV.......QICSK..........MGGA.-.....PWT.V....P--.L-........-......A..F....P...N...K.....E.P..T.M..................................IIGMDVYHSGEIY..............kRKKA..SVAGFVASID...A...K.I.S...T....Y.F.....T.KC..I...IQ.....E..........A.......G....K...EI......VDE....LEE......................... [...]
+B7PDV6_IXOSC/541-835        ...........................................................................................la--LVILPN..NRKDR..YDMIKKH.AC...VD..L..GLQTQVLLS.R..T.IGNRKN................VRSVATKVAI.......QLNCK..........LGGQ.-.....AWC.L....EIP.L-........-......-..-....-...-...-.....A.S..T.M..................................VIGYDTYHDSSQR...............--GR..SAGAFVASLN...R...T.F.T...R....W.F.....S.RA..S...FH.....A..........S.......H....Q...EL......GNS....LAI......................... [...]
+B7Q5I1_IXOSC/446-741        ............................................................................................l-LMTIFPN..NRKDR..YDSLKKV.AC...VD..M..GLHTQVMLG.R..T.ISNKKN................LKSVATKVAI.......QMNCK..........LGGE.-.....AWA.L....DIP.L-........-......-..-....-...-...-.....T.K..M.M..................................CVGYDTYHDSRQK...............--GL..SAGGFVASLN...R...T.L.T...R....W.Y.....S.RV..S...FH.....Q..........T.......H....Q...EL......GSA....LKT......................... [...]
+Q0H8V5_9CNID/70-239         ............................................................................................m-VVTILTT..NRKDR..YDAIKKL.CC...LE..K..PVPSQVIVG.R..T.ISKKQM................LMSVSTKIAI.......QLNCK..........LGGE.-.....AWA.L....EIP.L-........-......-..-....-...-...-.....K.K..T.M..................................VIGIDTYHDSSAK...............--GR..SVGGFVASVN...Q...T.L.T...K....Y.Y.....S.RV..S...FQ.....H..........T.......G....M...EF......IDA....LKT......................... [...]
+A7RFC2_NEMVE/557-857        ............................................................................................i-VVTIVPS..NRKDR..YDSIKKL.CC...LE..K..GVPSQVVVS.R..T.LSKKQM................LMSVCTKIGI.......QLNCK..........LGGE.-.....AWA.V....DIP.L-........-......-..-....-...-...-.....K.N..L.M..................................IVGIDTYHDSSQK...............--GR..SVGGFVASLNkpcT...R.Q.R...E....Y.Y.....S.RC..T...FQ.....H..........S.......G....Q...EL......VDG....LKV......................... [...]
+A7T755_NEMVE/2-70           ............................................................................................i-VVTIVPS..NRKDR..YDSIKKL.CC...LE..K..GVPSQVVVS.R..T.LSKKQM................LMSVCTKIGI.......QLNCK..........LGGE.-.....AWA.V....DIP.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+Q6RSS9_PODCA/561-853        ............................................................................................i-VVCIVPN..NRKDR..YDVIKKL.CC...VE..R..PVPSQVVVS.R..T.LSKKQM................LMSVCTKIGI.......QLNCK..........LGGE.-.....VWA.V....DIP.L-........-......-..-....-...-...-.....K.N..V.M..................................VVGFDVYHDSATK...............--GK..SIGGFVASTN...R...Y.L.T...R....Y.Y.....S.RI..T...SQ.....T..........S.......H....Q...EI......CNQ....LKV......................... [...]
+B2KTD9_9CNID/559-850        ............................................................................................i-VVCIVPN..NRKDR..YDAIKKI.TC...VE..N..PVPSQVVVS.R..T.LSKQQM................LMSVCTKIAI.......QLNCK..........LGGE.-.....VWA.T....EIP.V-........-......-..-....-...-...-.....K.K..L.M..................................VIGFDVYHDSMNK...............--GQ..SIGGFIASTN...D...S.L.T...R....Y.Y.....S.RI..T...KQ.....R..........S.......H....N...EI......CSQ....LKI......................... [...]
+Q3ZUK2_PLADU/35-327         ............................................................................................l-VLCILPS..NKKDR..YDAIKKL.CC...IN..C..PVPSQMVLA.K..T.LSKAKM................LMSVATKIAI.......QINCK..........LGGE.-.....VWA.L....EIP.L-........-......-..-....-...-...-.....K.G..L.M..................................VVGVDSYHDSKQK...............--GR..SVGAFVASMN...Q...S.L.T...R....Y.Y.....S.RC..C...FQ.....H..........Q.......H....Q...EL......LDG....LRV......................... [...]
+B5BUZ0_9ASCI/567-860        ............................................................................................m-ILSLMPS..NRKDR..YDGIKRL.CC...VD..I..PIPTQVVLT.K..T.LSKPQR................VMSIATKIAI.......QINCK..........LGGE.-.....AWA.A....HIP.L-........-......-..-....-...-...-.....K.G..T.M..................................VIGIDTYHDTARK...............--GQ..SVGGFVANIN...Q...E.Y.T...R....W.Y.....S.NT..T...FQ.....Q..........N.......S....T...EL......IDG....LKK......................... [...]
+C3XV23_BRAFL/67-195         ................................................................................lsnlcacfrfplr--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+B4DYF7_HUMAN/569-859        .............................................................................................MVICILPN..DDKRR..YDSIKRY.LC...TK..C..PIPSQCVVK.K..T.LEKVQA................-RTIVTKIAQ.......QMNCK..........MGGA.-.....LWK.V....ETD.V-........-......-..-....-...-...-.....Q.R..T.M..................................FVGIDCFHDIVNR...............--QK..SIAGFVASTN...A...E.L.T...K....W.Y.....S.QC..V...IQ.....K..........T.......G....E...EL......VKE....LEI......................... [...]
+PIWL3_HUMAN/578-868         ............................................................................................k-VICILPN..DDKRR..YDSIKRY.LC...TK..C..PIPSQCVVK.K..T.LEKVQA................-RTIVTKIAQ.......QMNCK..........MGGA.-.....LWK.V....ETD.V-........-......-..-....-...-...-.....Q.R..T.M..................................FVGIDCFHDIVNR...............--QK..SIAGFVASTN...A...E.L.T...K....W.Y.....S.QC..V...IQ.....K..........T.......G....E...EL......VKE....LEI......................... [...]
+PIWL1_CHICK/561-853         ............................................................................................i-VVCILSS..TRKDK..YDAIKKY.LC...TD..C..PIPSQCVVA.R..T.LSKPQT................ALAIVTKIAL.......QMNCK..........MGGE.-.....LWS.V....EIP.L-........-......-..-....-...-...-.....K.Q..L.M..................................IVGIDCYHDTLSG...............--KQ..SIAGFVASLN...E...K.M.T...R....W.F.....S.RC..V...VQ.....S..........R.......G....Q...EI......VDG....LKA......................... [...]
+PIWL1_HUMAN/555-847         ............................................................................................i-VVCLLSS..NRKDK..YDAIKKY.LC...TD..C..PTPSQCVVA.R..T.LGKQQT................VMAIATKIAL.......QMNCK..........MGGE.-.....LWR.V....DIP.LK........L......-..-....-...-...-.....-.-..V.M..................................IVGIDCYHDMTAG...............--RR..SIAGFVASIN...E...G.M.T...R....W.F.....S.RC..I...FQ.....D..........R.......G....Q...EL......VDG....LKV......................... [...]
+D2HWM8_AILME/555-847        ............................................................................................i-VVCLLSS..NRKDK..YDAIKKY.LC...TD..C..PTPSQCVVA.R..T.LGKQQT................VMAIATKIAL.......QMNCK..........MGGE.-.....LWR.V....DMP.LK........L......-..-....-...-...-.....-.-..A.M..................................IVGIDCYHDTTAG...............--RR..SIAGFVASIN...E...G.M.T...R....W.F.....S.RC..V...FQ.....D..........R.......G....Q...EL......VDG....LKV......................... [...]
+PIWL1_MOUSE/556-848         ............................................................................................i-VVCLLSS..NRKDK..YDAIKKY.LC...TD..C..PTPSQCVVA.R..T.LGKQQT................VMAIATKIAL.......QMNCK..........MGGE.-.....LWR.V....DMP.LK........L......-..-....-...-...-.....-.-..A.M..................................IVGIDCYHDTTAG...............--RR..SIAGFVASIN...E...G.M.T...R....W.F.....S.RC..V...FQ.....D..........R.......G....Q...EL......VDG....LKV......................... [...]
+D3ZTP9_RAT/556-848          ............................................................................................i-VVCLLSS..NRKDK..YDAIKKY.LC...TD..C..PTPSQCVVA.R..T.LGKQQT................VMAIATKIAL.......QMNCK..........MGGE.-.....LWR.V....DMP.LK........L......-..-....-...-...-.....-.-..A.M..................................IVGIDCYHDTTAG...............--RR..SIAGFVASIN...E...G.M.T...R....W.F.....S.RC..V...FQ.....D..........R.......G....Q...EL......VDG....LKV......................... [...]
+PIWL1_DANRE/552-844         .............................................................................................MVVVILPT..NRKDK..YDCVKKY.LC...VD..C..PTPSQCVVS.R..T.ISKPQA................LMTVATKIAL.......QMNCK..........MGGE.-.....LWS.V....EIP.L-........-......-..-....-...-...-.....R.Q..L.M..................................IVGIDCYHDTAAG...............--KR..SIGAMVASLN...Q...G.M.S...R....W.F.....S.KC..V...LQ.....N..........R.......G....Q...EI......IDA....LKG......................... [...]
+Q4T9Z1_TETNG/519-587        .............................................................................................MVVVILPT..NRKDK..YDSIKKY.LC...VD..C..PVPSQCVVA.Q..T.LSRPQT................LLNVATKIAL.......QMACK..........MGGE.-.....LWS.V....EIP.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+Q4T9Y6_TETNG/521-792        .............................................................................................MVVVILPT..NRKDK..YDSIKKY.LC...VD..C..PVPSQCVVA.Q..T.LSRPQT................LLNVATKIAL.......QMACK..........MGGE.-.....LWS.V....EIP.L-........-......-..-....-...-...-.....K.H..L.M..................................VVGIDCYHDISAG...............--KR..SVGALVASMN...Q...T.M.S...R....W.F.....S.RC..V...LQ.....Q..........K.......G....Q...EI......MDG....LKR......................... [...]
+Q4T9Y9_TETNG/1-228          .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-MACK..........MGGE.-.....LWS.V....EIP.L-........-......-..-....-...-...-.....K.H..L.M..................................VVGIDCYHDISAG...............--KR..SIGALVASMN...Q...T.M.S...R....W.F.....S.RC..V...LQ.....Q..........K.......G....Q...EI......MDG....LKR......................... [...]
+B9U223_ORYLA/549-841        .............................................................................................MVVVVLPS..NRKDK..YDSVKKY.LC...VD..C..PTPSQCVLS.R..T.LSRPQA................LMTVATKIAL.......QMSCK..........MGGE.-.....LWS.V....EIP.L-........-......-..-....-...-...-.....K.Q..L.M..................................IVGIDCYHDISAG...............--KR..SIGAMVASLN...Q...S.M.S...R....W.Y.....S.KC..V...LQ.....H..........K.......G....Q...EL......MDG....LKM......................... [...]
+PIWL4_HUMAN/546-838         ............................................................................................l-VMCILPS..NQKTY..YDSIKKY.LS...SD..C..PVPSQCVLA.R..T.LNKQGM................MMSIATKIAM.......QMTCK..........LGGE.-.....LWA.V....EIP.L-........-......-..-....-...-...-.....K.S..L.M..................................VVGIDVCKDALSK...............--DV..MVVGCVASVN...P...R.I.T...R....W.F.....S.RC..I...LQ.....R..........T.......M....T...DV......ADC....LKV......................... [...]
+D2I3M6_AILME/487-786        ............................................................................................l-VMCILPS..NQKSY..YDCIKKY.LS...CV..F..PVPSQCVLA.R..T.LTRQGM................MMSIATKIAM.......QMACK..........LGGE.-.....LWA.V....EIP.L-........-......-..-....-...-...-.....K.S..L.M..................................VVGIDVCKHEFSK...............--GM..VVVGFVASIN...P...G.I.T...R....W.F.....S.RC..T...LQ.....R..........T.......T....T...DV......ADC....LKV......................... [...]
+A6X965_MOUSE/3-172          ...........................................................................................pg--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+D3ZDI3_RAT/541-827          ............................................................................................l-VMCILPS..NQKNY..YDSIKRY.LS...SD..X..PTPVSCTLQ.D..A.LSKDVA................VVGFVASINS.......RITRR..........IKGL.-.....--L.P....SLS.QP........L......-..-....-...-...L.....K.S..L.M..................................VVGIDICRDALSK...............--DV..AVVGFVASIN...S...R.I.T...R....W.F.....S.RC..V...LQ.....R..........T.......A....A...DI......ADC....LKV......................... [...]
+PIWL4_RAT/541-834           ............................................................................................l-VMCILPS..NQKNY..YDSIKRY.LS...SD..C..PVPSQCVLT.R..T.LNKQGM................MLSVATKIAM.......QMTCK..........LGGE.-.....LWA.V....EIP.L-........-......-..-....-...-...-.....K.S..L.M..................................VVGIDICRDALSK...............--DV..AVVGFVASIN...S...R.I.T...R....W.F.....S.RC..V...LQ.....R..........T.......A....A...DI......ADC....LKV......................... [...]
+PIWL4_MOUSE/541-834         ............................................................................................l-VMCILPS..NQKNY..YDSIKKY.LS...SD..C..PVPSQCVLT.R..T.LNKQGT................MLSVATKIAM.......QMTCK..........LGGE.-.....LWS.V....EIP.L-........-......-..-....-...-...-.....K.S..L.M..................................VVGIDICRDALNK...............--NV..VVVGFVASIN...S...R.I.T...R....W.F.....S.RC..V...LQ.....R..........T.......A....A...DI......ADC....LKV......................... [...]
+D1LXB5_SACKO/1-252          ...........................................................................................ml--------..-----..-------.--...--..-..---------.-..-.------................-MSVATKIAM.......QLNCK..........LGGE.-.....LWA.L....EIP.I-........-......-..-....-...-...-.....K.N..M.M..................................IVGIDCYHDSATK...............--GQ..SIGAFIASTN...R...T.I.T...R....F.Y.....S.RV..T...FQ.....H..........T.......G....Q...EL......IDG....LKV......................... [...]
+C3XV22_BRAFL/1173-1299      ........................................................................................lqapr--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.H...S....W.Y.....S.GC..T...FQ.....H..........S.......G....Q...EL......IDG....LKV......................... [...]
+C3XV22_BRAFL/2983-3180      ............................................................saeaapkkkmqkkkkranqktstiklttepvpv--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+C3XV22_BRAFL/1831-1964      .........................................................................................ktqm--------..-RKDR..YDAIKKF.CC...VD..H..PVPSQVIVS.R..T.LNKKQM................LMSVATKIAM.......QLNCK..........LGGE.-.....LWA.V....EIP.L-........-......-..-....-...-...-.....K.S..M.M..................................VVGIDCYHDSATK...............--GQ..SIGGVIASMN...S...S.L.T...R....W.Y.....S.RC..T...FQ.....H..........S.......G....Q...EL......IDG....LKV......................... [...]
+C3XV20_BRAFL/551-843        .............................................................................................MVVCIVSN..NRKDR..YDAIKKF.CC...VD..R..PVPSQVIVS.R..T.LSKKQM................LMSVCTKVAL.......QMNCK..........LGGE.-.....LWA.L....EIP.I-........-......-..-....-...-...-.....K.N..L.M..................................VVGINCYQDSLTK...............--GQ..SVGGVIASIN...S...S.L.T...R....W.Y.....S.RC..T...FQ.....R..........S.......S....Q...EL......IDG....LKV......................... [...]
+Q9GPA6_STRPU/114-407        ............................................................................................i-VVVILPT..NRKDR..YDAIKKT.CV...VT..H..PCPSQVIVS.R..T.LSKQQM................LMSVATKIAM.......QMNCK..........MGGD.-.....LWR.V....EIP.L-........-......-..-....-...-...-.....S.N..L.M..................................IIGIDSYHDSLTK...............--GR..SVLGFVASMN...K...S.Q.T...S....F.F.....S.SC..A...FQ.....H..........A.......Q....G...EF......GAN....LST......................... [...]
+Q9GPA7_STRPU/547-808        ............................................................................................i-VVVILPT..NRKDR..YDAIKKT.CV...VT..H..PCPSQVIVS.R..T.LSKQQM................LMSVATKIAM.......QMNCK..........MGGD.-.....LWR.V....EIP.L-........-......-..-....-...-...-.....S.N..L.M..................................IIGIDSYHDSLTK...............--GR..SVLGFVASMN...K...S.Q.T...S....F.F.....S.SC..A...FQ.....H..........A.......Q....G...EF......GAN....LST......................... [...]
+Q9GPA8_STRPU/547-840        ............................................................................................i-VVVILPT..NRKDR..YDAIKKT.CV...VT..H..PCPSQVIVS.R..T.LSKQQM................LMSVATKIAM.......QMNCK..........MGGD.-.....LWR.V....EIP.L-........-......-..-....-...-...-.....S.N..L.M..................................IIGIDSYHDSLTK...............--GR..SVLGFVASMN...K...S.Q.T...S....F.F.....S.SC..A...FQ.....H..........A.......Q....G...EF......GAN....LST......................... [...]
+B9ZU53_9TURB/586-879        ...........................................................................................la--IVVLPD..NRADR..YNAIKRQ.CY...VE..T..PVPSQCVLN.R..T.LNNEKG................FMSVVSKLAL.......QINVK..........MGGE.-.....PWM.C....KLP.V-........-......-..-....-...-...D.....P.G..A.M..................................IIGMDVHHVGKGG...............-KGP..SQLGFVSSLN...V...E.L.T...R....F.Y.....S.RV..-...YN.....N..........E.......S....N...EI......SGT....IKV......................... [...]
+B2Z3D6_SCHMD/665-960        ............................................................................................l-VVTILSA..VREDR..YNAIKKF.CY...VD..C..PVPSQVVLA.Q..T.LKEGPK................LNSVAVNIAL.......QINAK..........LGGE.-.....LWA.V....KIP.I-........-......-..-....-...-...-.....K.K..F.M..................................VVGLDVWHDTKGR...............--SR..SVGAVVGSTN...A...L.C.T...R....W.F.....S.KS..H...LQ.....E..........Q.......D....K...EI......MYV....LQS......................... [...]
+D2Z0E0_DUGJA/657-952        ............................................................................................l-VVTILSA..VREDR..YNAIKKH.CY...VD..C..PVPSQVVLA.Q..T.LKEGPK................LNSVAVNIAL.......QINAK..........LGGE.-.....LWA.V....KIP.I-........-......-..-....-...-...-.....K.K..F.M..................................VVGLDVWHDAKGR...............--GR..SVGAVVGSTN...A...L.C.T...R....W.F.....S.KS..H...LQ.....E..........H.......D....K...EI......VYV....LQS......................... [...]
+D2A2S9_TRICA/552-839        ...........................................................................................va--VFICPT..LRADR..YSIIKKM.CC...VN..I..PVASQVILS.K..T.LSNPQK................VRTIIHKIAM.......QITCK..........LGGT.-.....LWS.V....KIP.V-........-......-..-....-...-...-.....S.G..W.M..................................VCGIDVYHGANNQ...............----..SVCGFVASIN...G...S.M.T...K....Y.F.....S.KA..M...FQ.....D..........-.......-....G...EI......GDY....FKM......................... [...]
+A9ZSZ2_BOMMO/619-912        ............................................................................................q-LVVAICS.tKRDDR..YAAIKKV.CC...AD..N..PVPSQVINA.R..T.LMNTNK................IRSITQKILL.......QLNCK..........LGGT.-.....LWS.I....SIP.F-........-......-..-....-...-...-.....K.S..A.M..................................IVGIDSYHDPSRR...............--NR..SVCSFVASYN...Q...S.M.T...L....W.Y.....S.KV..I...FQ.....E..........K.......G....Q...EI......VDG....LKC......................... [...]
+A7BJS3_BOMMO/619-912        ............................................................................................q-LVVAICS.tKRDDR..YAAIKKV.CC...AD..N..PVPSQVINA.R..T.LMNTNK................IRSITQKILL.......QLNCK..........LGGT.-.....LWS.I....SIP.F-........-......-..-....-...-...-.....K.S..A.M..................................IVGIDSYHDPSRR...............--NR..SVCSFVASYN...Q...S.M.T...L....W.Y.....S.KV..I...FQ.....E..........K.......G....Q...EI......VDG....LKC......................... [...]
+A7LNN5_BOMMO/2-193          ...........................................................................................ls--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..A.M..................................IVGIDSYHDPSRR...............--NR..SVCSFVASYN...Q...S.M.T...L....W.Y.....S.KV..I...FQ.....E..........K.......G....Q...EI......VDG....LKC......................... [...]
+B4N2M0_DROWI/49-131         ........................................................................................fhlsg--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+B4JP35_DROGR/334-622        ...........................................................................................qi-VVCICSS..RRDDR..YSAIKKI.CC...AE..R..PVASQVINS.R..T.LSNETR................NRSIVQKIIL.......QMNCK..........MGGS.-.....LWT.V....KIP.F-........-......-..-....-...-...-.....K.N..V.M..................................ICGIDSYHDPSQK...............--SH..SVAAFVASLN...S...T.Y.T...H....W.F.....S.KA..V...IQ.....T..........K.......K....E...EL......VNG....LTS......................... [...]
+B7FNN2_DROME/566-845        ............................................................................................m-VVCICHN..RRDDR..YAAIKKI.CC...SE..I..PIPSQVINA.K..T.LQNDLK................IRSVVQKIVL.......QMNCK..........LGGS.-.....LWT.V....KIP.F-........-......-..-....-...-...-.....K.N..V.M..................................ICGIDSYHDPSNR...............--GN..SVAAFVASIN...S...S.Y.S...Q....W.Y.....S.KA..V...VQ.....T..........K.......R....E...EI......VNG....LSA......................... [...]
+A4GUJ7_DROME/566-848        ............................................................................................m-VVCICHN..RRDDR..YAAIKKI.CC...SE..I..PIPSQVINA.K..T.LQNDLK................IRSVVQKIVL.......QMNCK..........LGGS.-.....LWT.V....KIP.F-........-......-..-....-...-...-.....K.N..V.M..................................ICGIDSYHDPSNR...............--GN..SVAAFVASIN...S...S.Y.S...Q....W.Y.....S.KA..V...VQ.....T..........K.......R....E...EI......VNG....LSA......................... [...]
+A7YFW6_DROME/299-494        ............................................................................................m-VVCICHN..RRDDR..YAAIKKI.CC...SE..I..PIPSQVINA.K..T.LQNDLK................IRSVVQKIVL.......QMNCK..........LGGS.-.....LWT.V....KIP.F-........-......-..-....-...-...-.....K.N..V.M..................................ICGIDSYHDPSNR...............--GN..SVAAFVASIN...S...S.Y.S...Q....W.Y.....S.KA..V...VQ.....T..........K.......R....E...EI......VNG....LSA......................... [...]
+B6IDV1_DROME/574-861        ............................................................................................m-VVCICHN..RRDDR..YAAIKKI.CC...SE..I..PIPSQVINA.K..T.LQNDLK................IRSVVQKIVL.......QMNCK..........LGGS.-.....LWT.V....KIP.F-........-......-..-....-...-...-.....K.N..V.M..................................ICGIDSYHDPSNR...............--GN..SVAAFVASIN...S...S.Y.S...Q....W.Y.....S.KA..V...VQ.....T..........K.......R....E...EI......VNG....LSA......................... [...]
+Q7PLK0_DROME/566-853        ............................................................................................m-VVCICHN..RRDDR..YAAIKKI.CC...SE..I..PIPSQVINA.K..T.LQNDLK................IRSVVQKIVL.......QMNCK..........LGGS.-.....LWT.V....KIP.F-........-......-..-....-...-...-.....K.N..V.M..................................ICGIDSYHDPSNR...............--GN..SVAAFVASIN...S...S.Y.S...Q....W.Y.....S.KA..V...VQ.....T..........K.......R....E...EI......VNG....LSA......................... [...]
+A4GND8_DROME/566-853        ............................................................................................m-VVCICHN..RRDDR..YAAIKKI.CC...SE..I..PIPSQVINA.K..T.LQNDLK................IRSVVQKIVL.......QMNCK..........LGGS.-.....LWT.V....KIP.F-........-......-..-....-...-...-.....K.N..V.M..................................ICGIDSYHDPSNR...............--GN..SVAAFVASIN...S...S.Y.S...Q....W.Y.....S.KA..V...VQ.....T..........K.......R....E...EI......VNG....LSA......................... [...]
+Q7PWT1_ANOGA/618-916        ............................................................................................q-IVVIICP.tSRDDR..YAAIKRI.LC...TE..V..PIPSQVINA.R..T.LANEKR................NRSVVLKVLL.......QMNCK..........LGGS.-.....LWG.V....RVP.I-........-......-..-....-...-...-.....K.R..T.M..................................ICGIDTYHEAKQR...............--SN..SVAAFVGSLD...A...A.F.T...H....W.Y.....S.RA..T...VQ.....E..........R.......K....E...EI......LNG....LCV......................... [...]
+B0WE96_CULQU/634-782        ............................................................................................q-IVVIICP.tSRDDR..YAAIKRI.CC...SE..I..PVPSQVINA.R..T.LANEAK................NRAIVQKILL.......QMNCK..........LGGT.-.....LWS.I....KIP.F-........-......-..-....-...-...-.....Q.N..V.M..................................IAGIDTYHDPKQK...............--SN..SVSAFVASLN...G...E.Y.T...R....W.Y.....S.RA..C...IQ.....S..........K.......K....E...EF......MNG....LCA......................... [...]
+B0WE95_CULQU/32-179         ............................................................................................i--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+Q170R5_AEDAE/637-930        ............................................................................................q-IVVIICP.tSRDDR..YAAIKRI.CC...SE..I..PVPSQVINA.R..T.LSNEAK................NRAIVQKIIL.......QMNCK..........LGGT.-.....LWS.I....RIP.F-........-......-..-....-...-...-.....D.N..V.M..................................IAGIDTYHDPKQK...............--SN..SVSAFVASLN...G...D.Y.T...R....W.Y.....S.RA..C...IQ.....S..........K.......K....E...EF......ING....LCA......................... [...]
+B7QEM1_IXOSC/88-370         ............................................................................................v-IVLIFPT..SRDDR..YSAVKRL.CC...VD..M..PVPSQVIIS.N..T.IGQQQK................LRSVTQKVAL.......QINCK..........LGGE.-.....LWK.V....EIP.M-........-......-..-....-...-...-.....H.N..V.M..................................VIGIDVYHDITRG...............--RQ..SVMGFVASMN...Q...S.L.T...R....W.F.....S.KC..A...FQ.....E..........P.......G....K...EL......VNC....IKI......................... [...]
+PIWL2_XENTR/644-935         ............................................................................................l-LVCLISG..TRDDL..YGAIKKL.CC...VQ..N..PVPSQVINT.R..T.ISQPQK................LRSIAQKILL.......QINCK..........LGGE.-.....LWG.V....DIP.L-........-......-..-....-...-...-.....K.S..V.M..................................VIGMDVYHDPSRG...............--MR..SVLGFVASIN...S...C.L.T...A....W.Y.....S.RV..V...FQ.....L..........P.......N....Q...EI......MDS....LKL......................... [...]
+D2H044_AILME/665-956        .............................................................................................MVVCIIMG..ARDDL..YGAIKKL.CC...VQ..A..PVPSQVINV.R..T.IGQPTR................LRSVAQKILL.......QINCK..........LGGE.-.....LWG.V....DIP.L-........-......-..-....-...-...-.....K.Q..L.M..................................VIGMDVYHDPSRG...............--MR..SVVGFVASIN...L...T.L.T...K....W.Y.....S.RV..V...FQ.....M..........P.......H....Q...EI......VDS....LKL......................... [...]
+PIWL2_HUMAN/668-959         .............................................................................................MVVCIIMG..PRDDL..YGAIKKL.CC...VQ..S..PVPSQVVNV.R..T.IGQPTR................LRSVAQKILL.......QINCK..........LGGE.-.....LWG.V....DIP.L-........-......-..-....-...-...-.....K.Q..L.M..................................VIGMDVYHDPSRG...............--MR..SVVGFVASIN...L...T.L.T...K....W.Y.....S.RV..V...FQ.....M..........P.......H....Q...EI......VDS....LKL......................... [...]
+D3ZRE1_RAT/666-957          .............................................................................................MVVCIIMG..TRDDL..YGAIKKL.CC...VQ..S..PVPSQVINV.R..T.IGQPTR................LRSVAQKILL.......QMNCK..........LGGE.-.....LWG.V....DIP.L-........-......-..-....-...-...-.....K.Q..L.M..................................VIGMDVYHDPSRG...............--MR..SVVGFVASIN...L...T.L.T...K....W.Y.....S.RV..V...FQ.....M..........P.......H....Q...EI......VDS....LKL......................... [...]
+PIWL2_MOUSE/666-957         .............................................................................................MVVCIIMG..TRDDL..YGAIKKL.CC...VQ..S..PVPSQVINV.R..T.IGQPTR................LRSVAQKILL.......QMNCK..........LGGE.-.....LWG.V....DIP.L-........-......-..-....-...-...-.....K.Q..L.M..................................VIGMDVYHDPSRG...............--MR..SVVGFVASIN...L...T.L.T...K....W.Y.....S.RV..V...FQ.....M..........P.......H....Q...EI......VDS....LKL......................... [...]
+PIWL2_ONCMY/749-1040        ............................................................................................l-VVCIMTG..NRDDL..YSAIKKL.CC...VQ..S..PVPSQAINV.R..T.ISQPQK................LRSVAQKILL.......QMNCK..........LGGE.-.....LWT.V....NVP.L-........-......-..-....-...-...-.....K.H..L.M..................................VIGVDVHHDTSKK...............--NR..SVMGFVASLN...S...L.L.T...R....W.Y.....S.RV..T...FQ.....M..........P.......N....E...EI......ING....FRV......................... [...]
+PIWL2_DANRE/741-1032        ............................................................................................l-VVCIMTG..NRDDL..YSAIKKL.CC...IQ..S..PVPSQAINV.R..T.ISQPQK................LRSVAQKILL.......QINCK..........LGGE.-.....LWT.V....NVP.LK........Y......-..-....-...-...-.....-.-..L.M..................................VIGVDVHHDTSKK...............--SR..SVMGFVASLN...S...M.L.T...K....W.Y.....S.RV..T...FQ.....M..........P.......N....E...EI......ING....FRV......................... [...]
+A5PL40_DANRE/7-278          .........................................................................................ssra--------..-----..-------.--...--..F..TLNSQAINV.R..T.ISQPQK................LRSVAQKILL.......QINCK..........LGGE.-.....LWT.V....NVP.LK........Y......-..-....-...-...-.....-.-..L.M..................................VIGVDVHHDTSKK...............--SR..SVMGFVASLN...S...M.L.T...K....W.Y.....S.RV..T...FQ.....M..........P.......N....E...EI......ING....FRV......................... [...]
+B9U224_ORYLA/729-1020       ............................................................................................l-VVCVIEG..NRDDL..YSAIKKL.CC...LK..C..PVPSQVINV.R..T.ISQQQK................LRGIAQKILL.......QLNSK..........LGGE.-.....LWT.V....GIP.L-........-......-..-....-...-...-.....K.S..L.M..................................VVGVDVHHDTSKK...............--HQ..SVMGFVASVN...S...S.L.T...H....W.Y.....S.RV..T...FQ.....T..........P.......T....E...EL......ISG....FRA......................... [...]
+Q4RPK4_TETNG/383-660        ................................................................................plvlnafkyicmf--------..-----..-------.--...--..-..--CPQAINV.R..T.ISNQAK................LKSIAQKILL.......QINCK..........LGGE.-.....LWT.V....SIP.M-........-......-..-....-...-...-.....K.N..F.M..................................VVGVDVYHDTKKK...............--YH..SVMGFVASVN...S...T.L.T...R....W.Y.....S.RV..I...FQ.....T..........P.......N....E...EL......IGG....FRI......................... [...]
+A7SQI3_NEMVE/441-733        ...........................................................................................qv-VVVIFPT..SRDDR..YAAVKKL.CC...VE..S..PVPSQVIIS.K..T.ISNPTK................LRSVVQKIAL.......QINVK..........LGGE.-.....LWA.L....DIP.S-........-......-..-....-...-...-.....R.S..L.M..................................VCGIDVYHDKARG...............--GR..SVGGLVCSMN...R...S.L.T...R....W.Y.....S.DV..C...FQ.....S..........P.......G....Q...EL......IDG....LKM......................... [...]
+A7T7C9_NEMVE/1-180          ............................................................................................r--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.S..L.M..................................VCGIDVYHDKARG...............--GR..SVGGLVCSMN...R...S.L.T...R....W.Y.....S.DV..C...FQ.....S..........P.......G....Q...EL......IDG....LKMllikgirkwhdairkwhdvcyltmf [...]
+C3Z5S8_BRAFL/570-730        .............................................................................................MVVCIFPT..PRDDR..YSAIKKL.CC...VD..S..PVPSQVINA.K..T.IGSQQK................LRSVTQKIAL.......QINAK..........LGGE.-.....LWA.L....EIP.L-........-......-..-....-...-...-.....K.N..I.M..................................VVGIDVYHEIKKG...............--VR..SVAGFVASTN...R...E.L.T...R....W.Y.....S.RT..C...FQ.....M..........P.......G....Q...EL......MDG....LKL......................... [...]
+B0FLQ9_STRPU/653-945        ............................................................................................l-VIAIFPT..SRDDR..YSAFKKL.CC...IE..A..PVPSQVING.R..T.ISQKQK................LRSVTQKIAL.......QINCK..........LGGE.-.....LWA.L....DVP.L-........-......-..-....-...-...-.....S.K..L.M..................................VIGIDVYHDPNRG...............--KK..SIGAFVASMN...R...D.L.T...S....W.F.....S.RV..C...IQ.....T..........P.......H....Q...EL......IGG....LKL......................... [...]
+C9E0T2_APIME/1-294          ............................................................................................m--VIVFPT..NRTDR..YSAVKRV.CC...VE..M..PVPSQVIMS.R..T.ISRGDK................LKSITEKIAL.......QINCK..........LGGA.-.....LWA.L....AIP.M-........-......-..-....-...-...-.....D.H..C.M..................................ICGIDVYHAGVGQ...............SMKG..SVAGFVASLD...K...L.L.T...S....W.H.....S.KI..C...LQ.....G..........K.......H....Q...EL......VDI....LQI......................... [...]
+C9E0S9_APIME/551-753        ............................................................................................l-MVIVFPT..NRTDR..YSAVKRV.CC...VE..M..PVPSQVIMS.R..T.ISRGDK................LKSITEKIAL.......QINCK..........LGGA.-.....LWA.L....AIP.M-........-......-..-....-...-...-.....D.H..C.M..................................ICGIDVYHAGVGQ...............SMKG..SVAGFVASLD...K...L.L.T...S....W.H.....S.KI..C...LQ.....G..........K.......H....Q...EL......VDI....LQI......................... [...]
+C9E0S8_APIME/604-898        ............................................................................................l-MVIVFPT..NRTDR..YSAVKRV.CC...VE..M..PAPSQVIMS.R..T.ISRGDK................LKSITEKIAL.......QINCK..........LGGA.-.....LWA.L....AIP.M-........-......-..-....-...-...-.....D.H..C.M..................................ICGIDVYHAGVGQ...............SMKG..SVAGFVASLD...K...L.L.T...S....W.H.....S.KI..C...LQ.....G..........K.......H....Q...EL......VDI....LQI......................... [...]
+C3ZKW1_BRAFL/534-739        ..........................................................................................cqk--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...-Q.....G..........Q.......G....E...EV......IPS....IGK......................... [...]
+B9ZU54_9TURB/593-893        ............................................................................................i-VVCLLPT..KVEQK..YNAIKRQ.CC...IS..T..PVASQVIIS.R..T.LSNDSK................RKRIVQNIGL.......QMVAK..........MGGE.-.....LWG.V....QLP.TV........Q......Q..V....-...-...-.....G.R..L.M..................................VVGIDVYHEAKKR...............--SE..SWLGVCCSLN...Q...H.A.T...R....Y.K.....S.SV..H...KQ.....T..........P.......G....V...EL......GGF....YNV......................... [...]
+C9E0T4_APIME/497-785        ............................................................................................l-IFCVVSN..NRADR..YSAIKKK.CT...HD..R..PVASQVFLA.K..N.LTNKGI................-RSIATKVAI.......QLNCK..........LGGA.-.....PWS.V....ELP.P-........-......-..-....-...-...-.....I.N..L.M..................................VVGYDVCHDPADK...............--SR..DFGAMVASLD...R...S.L.T...R....Y.Y.....S.AV..A...AH.....T..........T.......G....E...EL......SDE....FGE......................... [...]
+C9E0T3_APIME/525-813        ............................................................................................l-IFCVVSN..NRADR..YSAIKKK.CT...HD..R..PVASQVFLA.K..N.LTNKGI................-RSIATKVAI.......QLNCK..........LGGA.-.....PWS.V....ELP.P-........-......-..-....-...-...-.....I.N..L.M..................................VVGYDVCHDPADK...............--SR..DFGAMVASLD...R...S.L.T...R....Y.Y.....S.AV..A...AH.....T..........T.......G....E...EL......SDE....FGE......................... [...]
+A7LM14_BOMMO/414-612        .............................................................................................LILCVLAR..NYADR..YEAIKKK.CT...VD..R..AVPTQVVCA.R..N.MSSKSA................-MSIATKVAI.......QINCK..........LGGS.-.....PWT.V....DIP.L-........-......-..-....-...-...-.....P.S..L.M..................................VVGYDVCHDTRSK...............--EK..SFGAFVATLD...K...Q.M.T...Q....Y.Y.....S.IV..N...AH.....T..........S.......G....E...EL......SSH....MGF......................... [...]
+A8D8P8_BOMMO/594-885        .............................................................................................LILCVLAR..NYADR..YEAIKKK.CT...VD..R..AVPTQVVCA.R..N.MSSKSA................-MSIATKVAI.......QINCK..........LGGS.-.....PWT.V....DIP.L-........-......-..-....-...-...-.....P.S..L.M..................................VVGYDVCHDTRSK...............--EK..SFGAFVATLD...K...Q.M.T...Q....Y.Y.....S.IV..N...AH.....T..........S.......G....E...EL......SSH....MGF......................... [...]
+Q7QG53_ANOGA/576-875        .............................................................................................MIMCVVSN..SKSDR..YTAIKKK.CC...VE..R..AIPTQIMVQ.K..T.ITPKSGnv............rtLMSVATKVVI.......QMNCK..........LGGV.-.....PWK.V....KIP.L-........-......-..-....-...-...-.....N.G..L.M..................................TIGFDVCHDSKDK...............--SK..SFGAMVATLD...H...D.N.RgtpK....F.F.....S.TV..S...HH.....S..........S.......G....E...EI......SNY....LPL......................... [...]
+Q16IF2_AEDAE/569-868        .............................................................................................LIMCVVTN..QKADR..YTAIKKK.CC...VD..R..AVPTQVICQ.K..T.ITPKGGnv............rtLMSVATKVVI.......QMNCK..........LGGV.-.....PWK.V....KIP.L-........-......-..-....-...-...-.....S.G..M.M..................................TIGFDVCHDTNDK...............--SK..SYGAMVATFD...H...D.N.RgtpK....F.F.....S.TV..S...QH.....R..........H.......G....E...EI......CNY....LPL......................... [...]
+Q16ZS2_AEDAE/361-660        .............................................................................................LIMCVVTN..QKADR..YTAIKKK.CC...VD..R..AVPTQVICQ.K..T.ITPKGGnv............rtLMSVATKVVI.......QMNCK..........LGGV.-.....PWK.V....KIP.L-........-......-..-....-...-...-.....S.G..M.M..................................TIGFDVCHDTNDK...............--SK..SYGAMVATFD...H...D.N.RgtpK....F.F.....S.TV..S...QH.....R..........H.......G....E...EI......CNY....LPL......................... [...]
+Q16ZS3_AEDAE/562-861        .............................................................................................LIMCVVTN..QKADR..YTAIKKK.CC...VD..R..AVPTQVICQ.K..T.ITPKGGnv............rtLMSVATKVVI.......QMNCK..........LGGV.-.....PWK.V....KIP.L-........-......-..-....-...-...-.....N.G..L.M..................................TVGFDVCHDTNDK...............--SK..SYGAMVATFD...H...D.N.RgtpK....F.F.....S.TV..S...QH.....G..........H.......G....E...EI......CNY....LPL......................... [...]
+B0W5T3_CULQU/510-809        .............................................................................................MIMCVVSN..NKADR..YTAIKKK.CC...VD..R..AIPTQVMVQ.R..T.ITPKGGnv............rtLMSVATKVVI.......QMNCK..........LGGV.-.....PWK.V....KIP.L-........-......-..-....-...-...-.....S.G..L.M..................................TVGFDVCHDTKDK...............--SK..SFGAMVATFDyenK...G.V.P...K....Y.F.....S.TV..S...QH.....T..........H.......G....E...EI......SNY....LPL......................... [...]
+B0W5P0_CULQU/552-851        .............................................................................................MIMCVVSN..NKADR..YTAIKKK.CC...VD..R..AIPTQVMVQ.R..T.ITPKGGnv............rtLMSVATKVVI.......QMNCK..........LGGV.-.....PWK.V....KIP.L-........-......-..-....-...-...-.....S.G..L.M..................................TVGFDVCHDTKDK...............--SK..SFGAMVATFDyenK...G.V.P...K....Y.F.....S.TV..S...QH.....T..........H.......G....E...EI......SNY....LPL......................... [...]
+Q171B3_AEDAE/547-846        ............................................................................................l-VMCVVTN..NKADR..YTAIKKK.CC...VD..R..AIPTQVMVQ.K..T.ITPKGGnv............rtLMSVATKVVI.......QMNCK..........LGGV.-.....PWK.V....KIP.L-........-......-..-....-...-...-.....N.G..L.M..................................TIGFDVCHDGKDK...............--SK..SFGAMVATLDhdnK...G.T.P...K....F.F.....S.TV..S...QH.....T..........H.......G....E...EI......SNY....LPI......................... [...]
+B0W5T4_CULQU/546-845        .............................................................................................LIMCVVTN..NKADR..YTAIKKK.CC...VD..R..AIPTQVMVQ.K..T.ITPKGGnv............rtLMSVATKVVI.......QMNCK..........LGGV.-.....PWK.V....KIP.L-........-......-..-....-...-...-.....N.G..L.M..................................TIGFDVCHDAKDK...............--SK..SFGAMVATLDhdnK...G.T.P...K....F.F.....S.TV..S...QH.....T..........H.......G....E...EI......SNY....LPI......................... [...]
+Q5TW24_ANOGA/530-829        ............................................................................................l-VMCIVPN..DRADR..YKAIKKK.CC...VD..R..PLPCQVIKA.R..T.ITPKNQnl............raLLTIATKVMI.......QLNCK..........LGGI.-.....PWI.V....KNP.L-........-......-..-....-...-...-.....S.S..V.M..................................VVGFDVCHDASDK...............--SL..SYGALVATMYa.aK...HiE.P...K....Y.F.....S.VI..E...RH.....Q..........R.......G....E...EL......SSF....LSS......................... [...]
+Q16JS1_AEDAE/576-874        .............................................................................................LIMCLVTN..DKADR..YSAIKKK.CC...VD..R..AVPTQVLKT.R..T.ITPKGGnv............rtLMSVATKVAI.......QMNCK..........LGGI.-.....PWV.I....KSP.L-........-......-..-....-...-...-.....A.S..V.M..................................VIGYDVCKDSKDR...............--SK..GYGALVASMYgggV...K.H.P...K....Y.Y.....S.TV..N...QH.....A..........Y.......G....E...EL......SNY....LAL......................... [...]
+Q176R2_AEDAE/633-931        .............................................................................................MIMCVVTN..DKADR..YAAIKKK.CC...VD..R..AVATQVIKT.R..T.ITPKGGnv............rtLMSVATKVAI.......QVNCK..........LGGI.-.....PWI.L....KNP.L-........-......-..-....-...-...-.....S.S..I.M..................................VIGFDVCHDTRDK...............--SK..SYGALVASMYgagC...R.H.P...K....Y.F.....S.TV..N...HH.....S..........N.......G....E...EL......SNF....MAQ......................... [...]
+B0XE75_CULQU/501-788        .............................................................................................MIFCVVSN..DKADR..YAAIKKK.TC...VE..R..AIPTQVIKA.R..T.ITPKGGnv............rtLMSVATKVAI.......QMNCK..........LGGI.-.....PWV.L....RNP.L-........-......-..-....-...-...-.....T.S..V.M..................................VIGFDVCHDTRDK...............----..-----SKSYG...Q...K.H.P...K....F.F.....S.TV..N...HH.....S..........S.......G....E...EL......SNF....MAQ......................... [...]
+Q16JS2_AEDAE/571-869        ............................................................................................l-VMCLVSN..DKADR..YAAIKKK.SC...VD..R..AVATQVIKA.R..T.ITPKGGnv............rtLMSVATKVAI.......QLNCK..........LGGI.-.....PWV.L....KNP.L-........-......-..-....-...-...-.....T.S..V.M..................................VIGFDVCHDTRDK...............--SK..SFGAMVASMYgggC...K.H.P...K....F.F.....S.TV..N...PH.....T..........S.......G....E...EL......SNF....MAQ......................... [...]
+B0XE74_CULQU/592-891        .............................................................................................LIMCIVTN..DKVDR..YAAIKKK.CC...VD..R..AVPTQVIKC.K..T.ITPKGGnp............rtLMSVATKVAI.......QLNCK..........LGGI.-.....PWI.V....KSP.L-........-......-..-....-...-...-.....L.S..V.M..................................CLGFDVCRDTKDR...............--NK..TYGALVAAMY...H...G.K.H...RyhpnF.Y.....S.TV..N...QH.....A..........N.......G....A...EL......SDS....LAL......................... [...]
+B0WYL9_CULQU/560-857        .............................................................................................LIMCVVTD..DKADR..YAAIKKK.CC...VN..R..AIPTQVIKS.R..T.ITPRHGn..............mMLSVATKVAI.......QLNSK..........LGGI.-.....PWV.V....KVL.M-........-......-..-....-...-...-.....E.S..V.M..................................CVGFDVCRDTKDK...............--NI..CYGALVAAMN...H...G.K.H...R....Q.H.....S.EF..Y...ST.....V..........N.......Q....H...SY......GAD....LSDsl....................... [...]
+B4P152_DROYA/546-844        ...........................................................................................qi-VMVVMRS..QNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.R..V.IAPRQEks............agLMSIATKVVI.......QMNAK..........LMGA.-.....PWM.I....DLP.L-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSSKDK...............--NK..SYGALVATMD..qR...E.S.S...R....Y.F.....S.TV..T...EH.....M..........K.......G....Q...EL......SEH....MSL......................... [...]
+B3N4Z9_DROER/546-844        ...........................................................................................qi-VMVVMRS..PNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.K..V.IAPRQEka............tgLMSIATKVVI.......QMNAK..........LMGA.-.....PWM.I....SLP.L-........-......-..-....-...-...-.....H.G..L.M..................................TVGFDVCHSSKDK...............--NK..SYGALVATMD..qK...E.S.N...R....Y.F.....S.SV..N...EH.....M..........K.......G....Q...EL......SEH....MSL......................... [...]
+Q95PE5_DROME/1-176          .............................................................................................--------..-----..YSCIKKR.TC...VD..R..PVPSQVVTL.K..V.IAPRQQkp............tgLMSIATKVVI.......QMNAK..........LMGA.-.....PWQ.V....VIP.L-........-......-..-....-...-...-.....H.G..L.M..................................TVGFDVCHSPKNK...............--NK..SYGAFVATMD..qK...E.S.F...R....Y.F.....S.TV..N...EH.....I..........K.......G....Q...EL......SEQ....MSV......................... [...]
+A8DYZ0_DROME/483-781        ...........................................................................................qi-VMVVMRS..PNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.K..V.IAPRQQkp............tgLMSIATKVVI.......QMNAK..........LMGA.-.....PWQ.V....VIP.L-........-......-..-....-...-...-.....H.G..L.M..................................TVGFDVCHSPKNK...............--NK..SYGAFVATMD..qK...E.S.F...R....Y.F.....S.TV..N...EH.....I..........K.......G....Q...EL......SEQ....MSV......................... [...]
+O76922_DROME/554-852        ...........................................................................................qi-VMVVMRS..PNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.K..V.IAPRQQkp............tgLMSIATKVVI.......QMNAK..........LMGA.-.....PWQ.V....VIP.L-........-......-..-....-...-...-.....H.G..L.M..................................TVGFDVCHSPKNK...............--NK..SYGAFVATMD..qK...E.S.F...R....Y.F.....S.TV..N...EH.....I..........K.......G....Q...EL......SEQ....MSV......................... [...]
+B4Q9X4_DROSI/545-843        ...........................................................................................qi-VMVVIRT..PNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.K..V.IAPRQQkp............agLSSIATKVVI.......QMNAK..........LMGA.-.....PWK.I....EIP.L-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSPKNK...............--NK..SYGALVATMD..qK...E.S.F...R....Y.F.....S.TV..N...EH.....S..........K.......G....Q...EL......SEQ....MSL......................... [...]
+B4HWZ3_DROSE/549-847        ...........................................................................................qi-VMVVIRT..PNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.K..V.IAPRQQks............agLSSVATKVVI.......QMNAK..........LMGA.-.....PWK.I....EIP.L-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSPKNK...............--NK..SYGALVATMD..qK...E.S.F...R....Y.F.....S.TV..N...EH.....T..........K.......G....Q...EL......SEQ....MSL......................... [...]
+B4LV39_DROVI/546-843        ............................................................................................i-IMLVMKS..PNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.R..T.IAPRPEks............ggLMSIATKVVI.......QMNAK..........LMGA.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....K.G..L.M..................................TVGFDVCHSSKNK...............--NK..SYGALVASLD..mK...Y.S.E...R....Y.Y.....S.SV..T...EH.....M..........K.......G....Q...EL......SDQ....MSL......................... [...]
+B4KHC1_DROMO/539-836        ............................................................................................i-IMLVLKT..NNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.R..T.IAPRPEra............sgLMSVATKVVI.......QMNAK..........LMGA.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSSKNK...............--NK..SYGALVATMD..mK...S.S.T...R....Y.F.....S.SV..S...EH.....M..........K.......G....Q...EL......SDQ....MSL......................... [...]
+B4JBE4_DROGR/542-839        ............................................................................................i-IMLVLRS..PNEEK..YSCIKKR.AC...VD..R..PVPSQVVTL.R..T.IAPRPDra............sgLMSIATKVVI.......QMNAK..........IMGA.-.....PWI.I....ELP.L-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSSKDK...............--NK..SYGALVATMD..mK...L.S.T...R....Y.Y.....S.SV..T...EH.....L..........K.......G....Q...EL......SNQ....MSV......................... [...]
+B4MUA1_DROWI/563-860        ............................................................................................i-VMLVLKT..PNEEK..YSCIKKR.AC...VD..R..PVPSQVVTL.K..T.IAPRQEra............ggLMSIATKVVI.......QMNAK..........LMGA.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSPKSK...............--NK..SYGALVATMD..mK...E.S.Q...R....Y.Y.....S.SV..T...EH.....M..........K.......G....Q...EL......SNQ....MSM......................... [...]
+B4MUA0_DROWI/539-836        ............................................................................................i-VMLVLKT..PNEEK..YSCIKKR.AC...VD..R..PVPSQVVTL.K..T.IAPRQEra............ggLMSIATKVVI.......QMNAK..........LMGA.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSPKSK...............--NK..SYGALVATMD..mK...E.S.Q...R....Y.Y.....S.SV..T...EH.....M..........K.......G....Q...EL......SNQ....MSM......................... [...]
+B3MJZ7_DROAN/562-859        ............................................................................................i-VMLVLKA..PNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.K..T.IAPRQEks............agLMSIATKVVI.......QMNAK..........LMGA.-.....PWM.I....ELP.V-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSSKNK...............--NK..SYGALVATMD..mK...T.S.T...R....Y.F.....S.SV..T...EH.....M..........K.......G....Q...EL......SDQ....MSM......................... [...]
+B4G765_DROPE/541-838        ............................................................................................i-IMLVLKA..PNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.K..T.IAPRKEks............agLMSIATKVVI.......QMNAK..........LMGA.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSSKNK...............--NK..SYGALVATMD..mK...S.S.N...R....Y.F.....S.SV..N...EH.....M..........K.......G....Q...EL......SDQ....MSM......................... [...]
+Q29P29_DROPS/540-837        ............................................................................................i-IMLVLKA..PNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.K..T.IAPRKEks............agLMSIATKVVI.......QMNAK..........LMGA.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSSKNK...............--NK..SYGALVATMD..mK...L.S.N...R....Y.F.....S.SV..N...EH.....M..........K.......G....Q...EL......SEQ....MSM......................... [...]
+B4N6U3_DROWI/34-103         ...........................................................................................nh--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+B4JBE1_DROGR/574-864        ............................................................................................l-VLCIVPS..NNVER..YSSIKKR.GC...VD..R..SVPTQVVTT.R..A.NQK---................GMSVATKIAI.......QINCK..........LGYT.-.....PWM.I....AVP.M-........-......-..-....-...-...-.....A.G..L.M..................................TMGFDIAKCTRDR...............--NK..AYGALVASMD..lQ...R.N.A...T....F.F.....S.TV..-...AE.....C..........S.......A....Y...DV......LAN...nLWP......................... [...]
+B4KHB7_DROMO/577-867        .............................................................................................LILCFVPS..DSPER..YSAIKKR.GC...VD..R..AVPTQVVTK.R..C.-NKN--................GLSVATKIAI.......QMNCK..........IGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TMGFDIAKCSSNR...............--NK..AYGALVASMD..lQ...R.N.A...T....F.F.....S.TV..-...AE.....C..........S.......A....Y...DV......LAN...nLWP......................... [...]
+B4LV36_DROVI/558-849        ............................................................................................l-ILCFFAR..NNPER..YAAIKKR.GY...VD..R..AIPTQVVTT.N..A.NRNG--................-LSVATKIAI.......QINCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKCSRNR...............--SK..AYGALVASMD..lQ...Q.N.S...T....F.F.....S.TV..-...AE.....C..........S.......A....Y...DV......LAN...nLWP......................... [...]
+B4MU97_DROWI/591-882        ............................................................................................l-ILCLVPN..NNVER..YSSIKKI.GC...ID..K..GIPTQVVTS.K..T.VSNRSL................-MSIATKIAV.......QLNCK..........MGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TLGFDIAKSSRDR...............--SK..AFGALVASMD..lQ...E.N.S...T....Y.F.....S.TV..-...AE.....C..........S.......A....Y...DV......LAN...hLWP......................... [...]
+B4G753_DROPE/334-531        ............................................................................................l-ILCLVPN..NNVER..YSSIKKR.GC...VD..R..AVPTQVVTI.K..T.SKNRGL................-LSIATKIAI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSARDR...............--RK..AYGALVASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...SE.....C..........S.......A....F...DV......LAN...nLWP......................... [...]
+Q29CN1_DROPS/543-834        ............................................................................................l-ILCLVPN..NNVER..YSSIKKR.GC...VD..R..AVPTQVVTI.K..T.SKNRGL................-LSIATKIAI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSARDR...............--RK..AYGALVASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...SE.....C..........S.......A....F...DV......LAN...nLWP......................... [...]
+B3MJZ4_DROAN/563-854        ............................................................................................l-ILCLVPN..NNADR..YSAIKKR.GY...VD..R..AVPTQVVTI.K..T.AKNRGL................-MSIATKIAI.......QINCK..........LGYT.-.....PWM.V....EVP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSTRDR...............--KK..AYGALVASMD..lQ...Q.N.S...T....Y.F.....S.TV..S...EC.....S..........A.......F....D...SL......SNN....LWP......................... [...]
+B3N502_DROER/538-829        ............................................................................................l-ILCLVPN..DNVER..YSSIKKR.GY...VD..R..AVPTQVVTI.K..T.TKNRSL................-MSIATKIAI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSTRDR...............--KR..AYGALIASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...TE.....C..........S.......A....F...DV......LAN...tLWP......................... [...]
+B4P149_DROYA/538-829        ............................................................................................l-ILCLVPN..DNAER..YSSIKKR.GY...VD..R..AVPTQVVTI.K..T.TKNRSL................-MSIATKIGI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSTRDR...............--KR..AYGALIASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...TE.....C..........S.......A....F...DV......LAN...tLWP......................... [...]
+Q6NNZ4_DROME/552-843        ............................................................................................l-ILCLVPN..DNAER..YSSIKKR.GY...VD..R..AVPTQVVTL.K..T.TKNRSL................-MSIATKIAI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSTRDR...............--KR..AYGALIASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...TE.....C..........S.......A....F...DV......LAN...tLWP......................... [...]
+C0PTU6_DROME/566-857        ............................................................................................l-ILCLVPN..DNAER..YSSIKKR.GY...VD..R..AVPTQVVTL.K..T.TKNRSL................-MSIATKIAI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSTRDR...............--KR..AYGALIASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...TE.....C..........S.......A....F...DV......LAN...tLWP......................... [...]
+PIWI_DROME/538-829          ............................................................................................l-ILCLVPN..DNAER..YSSIKKR.GY...VD..R..AVPTQVVTL.K..T.TKNRSL................-MSIATKIAI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSTRDR...............--KR..AYGALIASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...TE.....C..........S.......A....F...DV......LAN...tLWP......................... [...]
+Q6NP34_DROME/566-857        ............................................................................................l-ILCLVPN..DNAER..YSSIKKR.GY...VD..R..AVPTQVVTL.K..T.TKNRSL................-MSIATKIAI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSTRDR...............--KR..AYGALIASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...TE.....C..........S.......A....F...DV......LAN...tLWP......................... [...]
+B4Q9X1_DROSI/538-829        ............................................................................................l-ILCLVPN..DNVER..YSSIKKR.GY...VD..R..AVPTQVVTM.K..T.AKNRSL................-MSIATKIAI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSTRDR...............--KR..AYGALIASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...TE.....C..........S.......A....F...DV......LAN...tLWP......................... [...]
+B4HWY9_DROSE/538-829        ............................................................................................l-ILCLVPN..DNAER..YSSIKKR.GY...VD..R..AVPTQVVTM.K..T.AKNRSL................-MSIATKIAI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSTRDR...............--KR..AYGALIASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...TE.....C..........S.......A....F...DV......LAN...tLWP......................... [...]
+A8XEN9_CAEBR/501-812        .............................................................................................MLVVMLAD..DNKTR..YDSLKKY.LC...VE..C..PIPNQCINL.R..T.LAGKSSdgg.........enknFGSIVLKIVL.......QMVCK..........TGGA.-.....LWR.V....NIP.M-........-......-..-....-...-...-.....Q.D..T.M..................................IVGYDLYHDSTLK...............--GK..TVGACVSTTS...S...E.F.T...K....F.Y.....S.QT..R...PH.....E..........N.......P....T...QL......GNN....LTH......................... [...]
+Q17567_CAEEL/397-708        .............................................................................................MLVVMLAD..DNKTR..YDSLKKY.LC...VE..C..PIPNQCVNL.R..T.LAGKSKdgg.........enknLGSIVLKIVL.......QMICK..........TGGA.-.....LWK.V....NIP.L-........-......-..-....-...-...-.....K.S..T.M..................................IVGYDLYHDSTLK...............--GK..TVGACVSTTS...N...D.F.T...Q....F.Y.....S.QT..R...PH.....E..........N.......P....T...QL......GNN....LTH......................... [...]
+P90786_CAEEL/499-810        .............................................................................................MLVVMLAD..DNKTR..YDSLKKF.LC...VE..C..PIPNQCVNL.R..T.LAGKSKdgg.........enknLGSIVLKIVL.......QMICK..........TGGA.-.....LWK.V....NIP.L-........-......-..-....-...-...-.....K.N..T.M..................................IVGYDLYHDSTLK...............--GK..TVGACVSTTS...N...D.F.T...Q....F.Y.....S.QT..R...PH.....E..........N.......P....T...QL......GNN....LTH......................... [...]
+PIWI1_SCHMD/493-790         ...........................................................................................ma--LVFIPD..---DK..VYAKVKN.FT...MS..T..GLLTQCVTQ.R..N.GSNRDDr..............rRKTVADKSVM.......QMFSK..........LGYD.-.....PWG.I....NLK.M-........-......-..-....-...-...-.....A.P..T.M..................................IVGLDTFHSKTGK...............---R..SVQASVFSIS...A...K.F.S...Q....Y.I.....S.FV..N...SS.....K..........G.......K....N...EF......HEN....LGK......................... [...]
+D2Z0D8_DUGJA/494-791        ...........................................................................................la--LVFIPD..---DK..IYAKVKN.FT...MS..T..GLLTQCVTQ.R..N.GSNRDDr..............rRKTVADKSVM.......QMFSK..........LGYD.-.....PWG.I....NLK.M-........-......-..-....-...-...-.....A.P..T.M..................................IVGLDTFHSKTGK...............---R..SVQASVFSIS...S...K.F.S...Q....Y.I.....S.FV..N...SS.....K..........G.......K....N...EF......HEN....LGK......................... [...]
+PIWIL_DUGJA/502-800         ..........................................................................................ial---VFVPD..---DR..VYAKVKS.FT...IS..T..GLLTQCVTT.R..N.GTNRNDk..............rRQVVSSKTVM.......QIFSK..........FGYD.-.....PWT.I....DIK.M-........-......-..-....-...-...-.....R.P..T.M..................................IVGMDTFHNKGSK...............---K..SIHASVFSIN...S...T.F.S...Q....Y.M.....S.FA..N...SP.....K..........G.......K....Q...EF......HDT....LSG......................... [...]
+PIWI2_SCHMD/516-815         ..........................................................................................mal---VFVPD..---DR..VYAKVKS.FT...MS..T..GLLTQCVTT.R..N.GTNRNDk..............rRKVVSSKTVM.......QIFAK..........FGYD.-.....PWT.V....EIK.L-........-......-..-....-...-...-.....R.P..T.M..................................IVGMDTYHNKSSK...............---K..SIQASVFSIN...S...T.F.T...Q....Y.M.....S.FV..V...NS.....P..........K.......G....R...QE......FHE...tLGK......................... [...]
+D2Z0D9_DUGJA/512-810        ..........................................................................................mal---VFVPD..---DR..VYAKVKS.FT...MS..T..GLLTQCVTT.R..N.GTNRNDk..............rRKVVSNKTVM.......QIFAK..........FGYD.-.....PWT.V....EIK.L-........-......-..-....-...-...-.....R.P..T.M..................................IVGMDTYHNKSSK...............---K..SIQASVFSIN...S...T.F.T...Q....Y.M.....S.FV..N...QP.....K..........G.......R....Q...EF......HET....LGK......................... [...]
+B9ZU52_9TURB/589-885        ............................................................................................l-VFCLLPS..NKKQR..YDSIKRL.CY...VN..K..PVPSQCVLT.K..T.IRNPAK................VMSVATKVAL.......QISCK..........LGDV.-.....AWA.V....SIP.M-........-......-..-....-...-...-.....R.R..T.M..................................IVGMDTYHDKRQS...............---V..SVQGIVFSLN...E...T.F.T...Q....Y.Y.....S.YS..P...IV.....K..........G.......G....K...AE......LHN...rLEV......................... [...]
+A8VSS4_TETTH/479-774        ............................................................................................f-IVFILQGakGKGKN..YQYLKSF.LL...KE..K..PIPSQMILQ.G..T.IKSSKD...............gCQVICNKICN.......QICIK..........VGGI.P.....YII.K....DLP.F-........-......-..-....-...S...N.....L.P..T.M..................................LVGIDYIRKENQK...............----..SVYSFVASVD...S...T.F.C...K....F.F.....S.GA..Q...LL.....D..........A.......Q....D...QN......NKF....VDK......................... [...]
+A4ZYY6_TETTH/491-831        .............................................................................tfaliimnselehyhf--------..-----..YKTCKQA.IT...VD..K..GICCSLIKA.S..T.LQQYVPtqqypq....ippgnsIEAFASRFLS.......QMQAK..........LGES.P.....WLM.Q....ELP.Y-........-......-..-....-...N...Q.....N.P..C.T..................................MIGFSVLRQRNAR...............---K..IIVAGAASIN...K...Q.Y.S...K....Y.L.....P.DY..R...VI.....S..........E.......V....S...TK......IK-....--Edgtleivelseq............. [...]
+Q23AZ6_TETTH/491-831        .............................................................................tfaliimnselehyhf--------..-----..YKTCKQA.IT...VD..K..GICCSLIKA.S..T.LQQYVPtqqypq....ippgnsIEAFASRFLS.......QMQAK..........LGES.P.....WLM.Q....ELP.Y-........-......-..-....-...N...Q.....N.P..C.T..................................MIGFSVLRQRNAR...............---K..IIVAGAASIN...K...Q.Y.S...K....Y.L.....P.DY..R...VI.....S..........E.......V....S...TK......IK-....--Edgtleivelseq............. [...]
+C5LD15_9ALVE/568-697        ............................................................................................l-VMLFTPV..KDCKR.vYQIFKQV.CT...VE..R..PCITQVVRS.E..T.MRKKTS................IVAIVTRIIM.......QISAK..........FLGP.-.....LWH.I....DLH.TS........L......T..P....M...M...N.....E.P..C.M..................................LVGIDTAVAKETR...............---R..AVLGFVCSLD...S...A.S.S...Q....Y.F.....S.KA..V...PL.....D..........-.......-....-...--......---....---......................... [...]
+A0D5D7_PARTE/374-640        vlfvgdqktdftsarntllskaipnqlinlpiqdqeinrllaimtanlgsvpwsikeingqinnkksavlgiwksdnsfsaclsinkylnkyi--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...SS......FGD....LDQ......................... [...]
+B9S0P9_RICCO/17-119         ............................................................................................i-LICVLAK..-KDHS..YNNLKLI.SE...TK..V..GIVAQCCSF.K..N.APRT--................KTQFLTNLAL.......KINVR..........LGGS.N.....MEL.F....KQP.QC........-......-..L....R...S...K.....G.H..V.M..................................FIGTEVNHLVSYN...............STCP..SIVDVVVIT-...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+B7R785_9THEO/119-333        ............................................................................................d-IVIMTTT.vRNELI..YAKVKSL.LL...GN..-..GIPSQVVTA.E..K.LRNTKG................LPWILENIAL.......QIYAK..........IGGT.P.....WTV.M....SSS.P-........-......-..-....-...-...-.....K.G..E.L..................................VIGVSRAIDKRRN...............----..YIIGFITLFS..yD...G.D.Y...L....L.F.....Y.SL..A...PR.....P..........I.......E....W...QK......LDEyrnaLSQ......................... [...]
+Q11QW7_CYTH3/390-605        .........................................................................................tlpv--------..-KKSP..YHTCKAK.LI...GS..-..GIPTQDIQV.V..N.LKNA--................NQFTINNIAL.......NIYAK..........IGGT.-.....AWT.I....EKE.DK........R......-..-....-...-...-.....M.E..E.L..................................VIGVGSSLSSDGK...............----..LVLGIAQIFH...S...D.G.R...Y....L.V.....G.DC..T...PL.....S..........T.......F....D...NY......AKN....LED......................... [...]
+Q9L1X1_STRCO/365-661        ...............................................................................dsspylvaksafmg--------..-----..-------.--...--..Q..GVPVQEVRI.E..T.VRQSKL................-AYPLNSIAL.......ACYAK..........LGGI.-.....PFV.I....AAP.RT........L......-..-....-...-...-.....A.H..E.L..................................VIGIGSAHVKESR..............lTEPE..RVVGITTVFS..aD...G.N.Y...L....L.W.....N.TS..ReadYD.....D..........Y.......P....R...EL......LLS....LRD......................... [...]
+D2M4C5_RHOPA/151-447        ...........................................................................................fd--------..DESNP..YYATKSV.FL...KR..-..DVPVQSVRL.E..T.MAQADS...............qLIFSMNHMSL.......ATYAK..........LGGT.-.....PWL.L....ASQ.QT........V......-..-....-...-...-.....A.H..E.L..................................VIGLGSHSVANSR..............iGSQQ..RFVGITTVFS...S...D.G.S...Y....L.L.....S.DR..T...AV.....V..........P.......Y....E...EY......ATA....LYD......................... [...]
+A3VQY4_9PROT/445-745        ........................................................................................lpgpq--------..---NP..YYATKAM.LL...RN..-..NVAVQNVRI.E..T.MSEPDK...............sLVYTMNQVSL.......ACYAK..........LGGR.-.....PWL.L....AAQ.QS........V......-..-....-...-...-.....A.H..E.L..................................VIGLGSHTEQKSR..............fDQSV..RYVGITTVFS..sDggyH.L.S...E....R.T.....G.VV..L...FE.....D..........Y.......A....T...EL......TDT....LTR......................... [...]
+B9MH92_ACIET/439-730        ...................................................................................apqknpylva--------..-----..-----KA.AF...LS..N..QIPTQFIAF.E..T.FSMAPA...............sLAYTLSNLAL.......AVYAK..........LGGI.-.....PWL.I....KSD.KG........I......-..-....-...-...-.....A.H..E.V..................................VIGLGSAAIGESR..............fSRKE..RIVGITSVFR...G...D.G.G...Y....L.L.....S.NL..S...NA.....V..........P.......M....S...KY......GEA....LTE......................... [...]
+A5D4D9_PELTS/458-756        ...................................................................................qlfgnknpyl--------..-----..---VTKC.FF...LQ..Q..QVPVQEVEI.E..N.IVKDDR...............qLIYILNNISL.......ASYAK..........MGGT.-.....PWL.L....KAD.SP........I......-..-....-...-...-.....A.H..E.L..................................VFGLGSCQVSRSR..............lGSKE..RVVGITTVFT..gD...G.N.Y...L....L.-.....T.NK..S...AA.....V..........P.......F....K...EY......PKA....LLR......................... [...]
+A0LL61_SYNFM/455-750        ................................................................................sqnpyfitkgsfl--------..-----..-------.--...-A..H..QIPVQEFEI.E..T.AQKNDR...............eLQYSLNNMAL.......ATYAK..........MNGI.-.....PWL.L....KAN.PT........I......-..-....-...-...-.....A.H..E.L..................................IIGLGSANIADGR..............lGDSE..RYVGITTVFS..gD...G.N.Y...H....L.T.....N.VS..-...-R.....A..........V.......T....I...DC......YQK...aFLE......................... [...]
+D0BWJ3_9GAMM/401-693        ...................................................................................klkveenpyy--------..-----..---LGKS.LF...FM..H..QVPVQDFTI.E..L.LSQSDY...............nLSFSLNNMAL.......ACYAK..........MGGV.-.....PWL.L....KSS.PT........L......-..-....-...-...-.....S.H..E.L..................................VIGIGSANIGQER..............gINGQ..RVMGITTVFS...G...D.G.S...Y....I.V.....S.NT..S...KA.....V..........V.......P....K...AY......CEA....LTS......................... [...]
+A4WYU7_RHOS5/454-756        .......................................................................................arlpdd--------..--RNP..YIHTKSL.LL...-T..L..GVPTQQVRM.P..T.VLLEPK...............sLQYTLQNFSI.......ATYAK..........LNGT.-.....PWT.V....NHD.KA........I......-..-....-...-...-.....N.D..E.L..................................VVGMGLAELSGSR..............tEKRQ..RFVGITTVFA...G...D.G.S...Y....L.L.....G.NV..S...KE.....C..........E.......Y....E...GY......SDA....IRE......................... [...]
+B7K585_CYAP8/439-744        ...............................................................................aiviildehsnlpd--------..-SINP..YLHSKSL.LL...TH..-..GIPVQEIRY.S..N.IQKDKK...............sLQYILQNFSL.......AMYAK..........LTGQ.-.....PWT.V....DQD.QT........I......-..-....-...-...-.....S.D..E.L..................................VIGIGTSELSNSR..............fETRQ..RFVGITTVFR...G...D.G.N...Y....L.L.....S.SL..S...KE.....C..........S.......Y....D...EY......PDV....LRE......................... [...]
+C1F5Q7_ACIC5/440-735        .........................................................................................glpd--------..-ASNP..YYTTKAR.LM...AQ..-..GVPVQLLNI.E..T.IRRKSL................-DYILNNIGL.......AMYAK..........LGGI.-.....PWT.L....TQN.SD........M......-..-....-...-...-.....A.H..E.I..................................IVGIGSARLNESR..............rGAGE..RVIGITTVFS...G...D.G.Q...Y....L.L.....A.NN..T...QE.....V..........P.......S....E...EY......VDA....LTQ......................... [...]
+Q1PV30_9BACT/383-655        ..........................................................................................sde--------..EEEKT..YYEIKKL.LL...DK..-..GITSQFIAN.K..T.VRSGNF................-NYCLPNIAI.......AILAK..........LGGI.-.....PWK.L....NTK.K-........-......-..-....-...-...-.....Y.N..D.L..................................VIGYNYKKLQDQK...............----..-WIGSAVFFD..nE...G.R.L...G....R.I.....Y.GF..S...EE.....R..........A.......G....E...DL......ISH....---......................... [...]
+D2QY15_PIRSD/353-529        ...........................................................................................dt-------E..DFSDQ..YYVTKHA.FL...KA..-..GLPSQFVST.K..T.IRNKAS................FKWTVSNIGM.......AVFAK..........LGGK.-.....PWK.V....VSE.--........-......-..-....-...-...N.....D.D..C.L..................................IVGIGQSHRCGED...............KTIS..RYYSYCVL--...T...D.S.S...G....L.Y.....E.DV..R...VL.....G..........K.......D....T...DE......RSY....LTR......................... [...]
+D2QGL1_SPILD/333-520        .....................................................................................snideegv--------..---SD..TYYYLKY.HL...TK..L..GVPLQVLSH.E..K.INVEKT................LKWSTSNIGL.......ALFSK..........LGGI.-.....PWV.V....KPS.T-........-......-..-....-...-...-.....A.D..C.L..................................ILGIGSAHQSNAQ...............NEIE..RFFAYSV--C...V...D.S.S...G....L.Y.....K.KL..E...VL.....A..........D.......D....Q...SE......VSY....LDA......................... [...]
+PIWI_ARCFU/110-406          ............................................................................................g-IMLVLPE..YNTPL..YYKLKSY.LI...NS..-..-IPSQFMRY.D..I.LSNRNL................-TFYVDNLLV.......QFVSK..........LGGK.-.....PWI.L....NVD.PE........K......-..-....-...-...-.....-.-..-.-..................................--GSDIIIGTGAT..............rIDNV..NLFCFAMVFK...K...D.G.T...M....L.W.....N.EI..S...PI.....V..........T.......S....S...EY......LTY....LKS......................... [...]
+Q96Z85_SULTO/134-346        ..........................................................................aksqidsiyyrvkasflds--------..-----..-------.GL...EE..R..ATPTQIVTV.D..L.LKQRDEnk...........ntnYSWSLLPIAV.......QMFTK..........MGGI.P.....YAL.K....QSC.IN........I......-..-....G...S...E.....F.N..V.H..................................FIGLGLTSDPRNK...............---L..KRVGFVTIFN..dN...G.S.L...S....Y.M.....D.SN..I...LE.....D..........N.......K....T...ES......YGR...iIYN......................... [...]
+A3VPN8_9PROT/165-321        .......................................................................................afverd--------..EEDFD..LHDYLKA.VG...AS..M..GVSVQLIRS.D..K.ALDYHC................RASVMWRLSI.......ALYTK..........AGGV.P.....WVL.E....DIH.P-........-......-..-....-...-...-.....-.Q..T.A..................................FIGIDYAMRRVQD...............DGPR..FAICCAQVFD..aE...G.SgL...E....F.IaykadG.VS..V...YG.....D..........N.......P....Y...LN......HAQ....MLK......................... [...]
+D1JFX3_9ARCH/159-437        ........................................................................................yfkfn--------..--YED..LRAHIKA.LC...VK..K..HVYTQILTK.T..S.FRPFDM................-SDNMWNLSL.......GLYVK..........AGGV.-.....PWK.L....ESG.E-........-......-..-....-...-...-.....E.N..T.C..................................FIGIAFGIKKGED...............-GQE..ILVGLAEVFD...V...F.G.E...S....V.T.....I.KV..V...ED.....E..........F.......K....S...EV......GLH....LSEek....................... [...]
+Q8U3D2_PYRFU/474-756        ..................................................................................lafiaarnkls--------..--SEK..FEEIKRR.LF...-N..L..NVISQVVNE.D..T.LKNKRDkyd.........rnrlDLFVRHNLLF.......QVLSK..........LGVK.-.....YYV.L....DYR.FN........Y......D..Y....-...-...-.....-.-..-.-..................................IIGIDVAPMKRSE...............---G..YIGGSAVMF-...-...D.S.Q...G....Y.I.....R.KI..V...PI.....K..........I.......G....E...QR......GESv..dMNE......................... [...]
+D3S0S6_FERPL/490-768        .......................................................................................egedsf--------..----D..YYNPLKS.AL...FR..N..NILSQNFDV.T..N.YVRGDGkin..........kntIKYAVSNIIY.......NIFGK..........LGVK.-.....FFV.L....EED.VP........Y......D..Y....-...-...-.....-.-..-.-..................................ILGIDVGYGEAYT...............---G..KVAGCTTVHD..sE...G.R.L...R....N.L.....I.PI..E...KQ.....N..........Y.......P....S...KE......TAR....IKA......................... [...]
+Y1321_METJA/426-699         .............................................................................................CFALIIGK.eKYKDN.dYYEILKK.QL...FD..L..KIISQNILW.E..N.WRKDDK................-GYMTNNLLI.......QIMGK..........LGIK.-.....YFI.L....DSK.TP........Y......D..Y....-...-...-.....-.-..-.-..................................IMGLDTGLGIFGN...............---H..RVGGCTVVYD..sE...G.K.I...R....R.I.....Q.PI..E...TP.....A..........P.......G....E...RL......HLP....---......................... [...]
+C7P7E7_METFA/420-692        ............................................................................................g-FALIIGN.rYYEND..YYETLKM.QL...FN..L..NIISQNILW.E..N.WSKDDN................-NFMTNNLLI.......QIMGK..........LGIK.-.....YFA.L....DAK.VN........Y......D..Y....-...-...-.....-.-..-.-..................................IMGLDSGLGAFKS...............---N..RVSGCTVIYD..sE...G.K.I...R....R.I.....Q.PI..D...VP.....S..........P.......G....E...RI......PIH....---......................... [...]
+B6YTQ5_THEON/463-751        ..........................................................................................lai---TLIPD..MRQEQ..FDKIKGF.FF...NN..-..GILHKAINI.N..N.LRDPSK...............dQKKLIESMIL.......QALYA..........FGIY.F.....YSL.D....NLN.Y-........-......-..-....-...-...-.....-.-..D.F..................................IIGLDVTREMDKS...............GRYY..GISGAAVVQN...K...N.G.Q...V....L.K.....I.IP..I...TS.....P..........Q.......S....S...SE......TAN....INY......................... [...]
+D3S7P9_9EURY/531-824        ......................................................................licispklpnnefdelkshlfsy--------..-----..-------.QQ...TT..F..HQFMYPFNL.K..R.CLNDDD...............fKKPFINSILS.......QFFHK..........MGMY.-.....LFS.F....SEE.L-........-......-..-....-...-...G.....D.Y..D.F..................................IIGYDITKEKDEN...............DKIK..GIGGSAIIYN...S...H.G.H...V....I.T.....TvTF..E...DV.....H..........T.......S....S...EI......ARY....-EKlf....................... [...]
+B5IR12_9EURY/528-819        ..................................................................................dlelrefynwl--------..-----..----KKE.FY...DE.tK..PLVFQGARV.E..S.VFGMYK................-RYAVPNIVL.......QMAAK..........LGVY.P.....YSL.E....TSS.G-........Y......D..Y....-...-...-.....-.-..-.-..................................IIGIDYTYWHERD...............--AV..SVGGGAVVVS..pS...G.L.I...E....G.I.....Y.PI..A...IP.....S..........K.......R....E...SL......DMKe..iLQE......................... [...]
+O67434_AQUAE/419-694        ............................................................................................l-VIVFLEE.yPKVDP..YKSFLLY.DF...VK..R..ELLKKMIPS.Q..V.ILNRTLkn............enLKFVLLNVAE.......QVLAK..........TGNI.P.....YKL.K....EIE.GK........V......D..A....-...-...-.....-.-..-.-..................................FVGIDISRITRDG...............-KTV..NAVAFTKIFN..sK...G.E.L...V....R.Y.....Y.LT..S...YP.....A..........F.......G....E...KL......TEK....---......................... [...]
+B4B3R2_9CHRO/1-219          ...............................................................................mgnlpfilaeplei--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.A..D.Y..................................FIGLDISRERKRN...............SRGS..NNACGSVRL-...-...-.Y.G...K....Q.G.....E.FI..Q...YQ.....L..........D.......D....Q...PI......EGE....--E......................... [...]
+A0YYT3_9CYAN/471-752        .............................................................................tddtedgsfysfvssr--------..-----..-------.-L...LR..R..GISSQVIYE.D..T.LKNPNN................YSYILNQVIP.......GILAK..........LGNL.-.....PFI.L....AKP.LE........I......-..-....-...-...-.....-.A..D.Y..................................FIGLDISRTPKKR..............kSGSL..NVCASVR---...-...L.Y.G...K....Y.G.....E.FI..R...YR.....-..........-.......L....E...DA......LTQ....GEE......................... [...]
+A8YDH3_MICAE/463-734        .....................................................................................nadnteeg--------..----S..LYSWIKK.KF...LE..R..RVMTQMIYE.K..T.LNDKSN................YKNILNQVVP.......GILAK..........LGNL.P.....YVL.A....ESL.E-........-......-..-....-...-...-.....I.A..D.Y..................................FIGLDVGRMPKKN..............lPGSL..NVCASVRLY-...-...G.K.Q...G....E.F.....V.RC..R...VE.....-..........-.......-....-...DS......LTE....GEE......................... [...]
+B0JXD6_MICAN/462-734        ....................................................................................rnadnteeg--------..----S..LYSWIKR.KF...LG..R..GVITQMIYE.K..T.LNDKSN................YKNILNQVVP.......GILAK..........LGNL.P.....YVL.A....E-P.LE........-......-..-....-...-...-.....I.A..D.Y..................................FIGLDVGRMPKKN..............lPGSL..NVCASVRLY-...-...G.K.Q...G....E.F.....V.RC..R...VE.....-..........-.......-....-...DS......LTE....GEE......................... [...]
+B0ADC8_9CLOT/432-721        ............................................................................................p-VLVILEK..ENIDK.yYETLKKI.FG...GR..N..NIPTQFVDL.D..T.IKKCDPkid.........nkrgKESIFLNILL.......GIYCK..........SGIQ.-.....PWV.L....ANG.LS........A......D..C....-...-...-.....-.-..-.-..................................YIGLDVCREN---...............--NM..STAGLIQVIG...K...D.G.R...V....LkS.....K.TI..S...SH.....Q..........S.......G....E...KI......QIN...iLKD......................... [...]
+C4L1M1_EXISA/321-484        ............................................................................................g-VVVVIAE.eASLQH.sYQAIKRQ.FG...GK..Q..DVVTQCVEL.H..D.RVLN--................SEDTLYNILL.......GIYVK..........AGLQ.-.....PWI.L....GEP.LH........S......D..C....-...-...-.....-.-..-.-..................................FVGLDVSHENGKH...............----..-AAGIIQIIG...K...D.G.A...M....I.K.....Q.KA..L..sTS.....E..........A.......G....E...KI......SSE...tMRE......................... [...]
+C6QUV9_9BACI/2-48           ............................................................................................c--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+B7GJX9_ANOFW/423-692        ............................................................................................t-IVVIGTE..ENIER.aYMAIKKE.FG...AK..A..DIMTQFVIF.D..S.SIVN--................NSFYYYNVLL.......GIYAK..........SGVQ.-.....PWI.L....LDH.MN........S......D..C....-...-...-.....-.-..-.-..................................FIGLDVSHEQGKH...............----..-ASGIIQVIG...K...D.G.R...I....I.K.....Q.KS..V...MA.....T..........E.......A....G...ET......IARc..tMEE......................... [...]
+C1V6Q1_9EURY/608-882        ........................................................................................aaaad--------..-YDDP..YPEFKRR.LG...-Q..L..GVPSQMITI.D..N.LGND--................--SYLGNISS.......SLIGK..........AGGV.P.....WRI.D....DVP.GD........V......D..A....-...-...-.....-.-..-.-..................................FVGLDVTYDHATK...............---Q..HLGAAANVIM...A...D.G.T...I....L.A.....S.EA..V...TK.....Q..........A.......G....E...TF......DED...dVAN......................... [...]
+B9LVW4_HALLT/464-658        .......................................................................................fsmges--------..SASDI..YHEMKKA.LR...QR..-..RVDSQMAHI.D..T.LATS--................--YALPNVAL.......GLVAA..........AGGI.P.....FTT.E....DAM.P-........-......-..-....-...-...G.....E.T..D.L..................................FIGIDVSHRYPRD..............tDERV..HIAASTTSIY...G...D.G.T...I....L.G.....Y.TS..A...KP.....Q..........T.......G....E...KV......PPK...eLKN......................... [...]
+Q53W94_THET8/418-669        ....rnrlkalllreglpsqilnvplreeerhrwenallgllakaglqvvalsgaypaelavgfdaggresfrfggaacavggdgghllwtlp--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...EA.....Q..........A.......G....E...RI......PQE...vVWD......................... [...]
+Q746M7_THET2/418-669        ....rnrlkalllreglpsqilnvplreeerhrwenallgllakaglqvvalsgaypaelavgfdaggresfrfggaacavggdgghllwtlp--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...EA.....Q..........A.......G....E...RI......PQE...vVWD......................... [...]
+B1XJG0_SYNP2/307-599        ...........................................................................................ti---LVISE..WLDNK..YKTKLTR.DA...LE..H..GITLQFMLP.L..K.ENVR-RiesnkgveskitcftsDQYRANNILL.......GLLAK..........AGWQ.A.....VGL.P....LLN.NE........Y......-..-....-...-...-.....A.A..D.L..................................VIGFDAGRNETLS...............-YGT..SSFAVLADG-...-...-.-.-...Q....I.L.....G.WE..L...PE.....A..........Q.......K....G...EI......LDPd..hVRR......................... [...]
+Q2JSR3_SYNJA/437-712        ...........................................................................................tv--LVVMPW..-SPNE..RKQRIRM.EA...LE..A..GIATQFMIP.G..A.------................DPYKALNVVL.......GLLCK..........AAWQ.P.....VLL.E....PLD.D-........-......P..V....-...-...-.....G.P..E.L..................................IIGFDVGTNRRLY...............----..-YGASAFAVL...A...D.G.Q...S....L.G.....W.EL..P...AV.....Q..........R.......G....E...TF......SGD...aIYQ......................... [...]
+Q2JI93_SYNJB/454-728        ...................................................................................vlvvmplspn--------..-----..-------.-E...HK..Q..KIRLQALRA.G..I.ATQFMIp.............gaDPYKALNVVL.......GLLCK..........AAWQ.P.....VLL.E....PLD.H-........-......-..-....-...P...E.....C.S..E.L..................................TIGFDVGTNRELY...............-YGT..SAFAVLANG-...-...-.-.Q...S....L.G.....W.EL..P...DI.....Q..........R.......G....E...TF......SGE...aIYQ......................... [...]
+Q8DKB1_THEEB/458-739        .................................................................................tvlvvmpwsphe--------..-----..EKTRLRI.QA...LK..A..GIATQFMIP.T..P.QDNP--................--YKALNVAL.......GLLCK..........AKWQ.P....vYLK.P....LDD.PQ........-......-..-....-...-...-.....A.A..D.L..................................IIGFDTSTNRRLY...............-YGT..SAFAILAN--...-...-.G.Q...S....L.G.....W.EL..P...DI.....Q..........R.......G....E...TF......SGQ...sIWQ......................... [...]
+Q5MZ10_SYNP6/441-718        ............................................................................................t-VLVVMPW..DSHHD..-KQKIRI.QA...IQ..A..GIATQFMVPlP..K.AD----................-KYKALNVTL.......GLLCK..........AGWQ.P.....IQL.E....SVD.HP........-......-..-....-...-...E.....V.A..D.L..................................IIGFDTGTNRELY...............---Y..GTSAFAVLA-...-...D.G.Q...S....L.G.....W.EL..P...AV.....Q..........G.......G....E...TF......SGQ...aIWQ......................... [...]
+Q31N05_SYNE7/441-718        ............................................................................................t-VLVVMPW..DSHHD..-KQKIRI.QA...IQ..A..GIATQFMVPlP..K.AD----................-KYKALNVTL.......GLLCK..........AGWQ.P.....IQL.E....SVD.HP........-......-..-....-...-...E.....V.A..D.L..................................IIGFDTGTNRELY...............---Y..GTSAFAVLA-...-...D.G.Q...S....L.G.....W.EL..P...AV.....Q..........R.......G....E...TF......SGQ...aIWQ......................... [...]
+A4HBN9_LEIBR/872-1190       .......................................................................................svilvt-------N..EMGTR..ATRWLKV.EC...MC..R..GVHFIAIPA.S..S.NPKRLNl..............vGAQLRQRIAT.......QFE--..........---L.N....pLRG.I....DLR.GE........L......P..V....L...G...R.....R.H..V.L..................................ILGVDSCHTNTH-...............----..SVGAIVGILS..tP...A.G.N...S....L.L.....S.FF..W...RH.....D..........A.......R....G...RE......AQH....VAK......................... [...]
+A4HZ40_LEIIN/904-1226       ........................................................................................svili------TN..EIDTR..ATRWLKV.EC...MC..R..GAHFIAIPA.S..S.SPKK--................LNLAGAQLRM.......RIASQ..........FELN.P.....LRG.V....DLR.GE........L......P..V....L...G...H.....R.H..V.L..................................VIGVDSCHTNTHS...............--VG..TIVGILST--...P...T.E.S...K....L.L.....S.YF..W...RH.....D..........A.......R....G...RE......TQH....VAK......................... [...]
+Q4QCH4_LEIMA/899-1221       ..........................................................................................svi----LITN..EMDTR..ATRWLKV.EC...MC..R..GAHFIAIPA.S..S.NPKK--................LNLVGAQLRM.......RIATQ..........FELN.P.....LRG.V....DLR.GE........L......P..V....L...G...H.....R.H..V.L..................................VIGVDSCHTNTHS...............--VG..TIVGILST--...P...T.E.S...K....L.L.....S.YF..W...RH.....D..........A.......R....G...RE......AQH....VAK......................... [...]
+Q4DYG9_TRYCR/791-1083       ...........................................................................................ta--AVIISA..ERETR..ASRWILA.EC...LT..R..GILGMFIPP.A..T.TPKR--................QNLLCENVRI.......QLRTK..........FETD.P.....AHG.V....NLP.RE........V......P..A....L...A...Q.....R.R..V.L..................................VVGVDACHTTTFS...............--TG..SVVGILCAPE..rN...H.L.L...P....F.F.....W.KH..E...MR.....G..........Q.......E....A...DR......VTE....---......................... [...]
+Q6T6J9_9TRYP/784-1082       ..........................................................................................taa---VIVTN..ERETR..LVRWMQA.EC...LT..R..GILPLFVPP.C..A.SPKQ--................QQLRCENIRL.......RLRTV..........FATD.P.....LRG.V....DLQ.RE........V......P..A....V...A...Q.....R.R..V.L..................................LVGVDSCHTPTVS...............--TG..SVVGILCTAE..rN...H.L.L...P....F.F.....W.KH..E...RR.....G..........Q.......E....V...EL......VSE...hFEV......................... [...]
+D0A1P1_TRYBG/784-1082       ..........................................................................................taa---VIVTN..ERETR..LVRWMQA.EC...LT..R..GILPLFVPP.C..A.SPKQ--................QQLRCENIRL.......RLRTV..........FATD.P.....LRG.V....DLQ.RE........V......P..A....V...A...Q.....R.R..V.L..................................LVGVDSCHTPTVS...............--TG..SVVGILCTAE..rN...H.L.L...P....F.F.....W.KH..E...RR.....G..........Q.......E....V...EL......VSE...hFEV......................... [...]
+Q38C22_9TRYP/783-1081       ..........................................................................................taa---VIVTN..ERETR..LVRWMQA.EC...LT..R..GILPLFVPP.C..A.SPKQ--................QQLRCENIRL.......RLRTV..........FATD.P.....LRG.V....DLQ.RE........V......P..A....V...A...Q.....R.R..V.L..................................LVGVDSCHTPTVS...............--TG..SVVGILCTAE..rN...H.L.L...P....F.F.....W.KH..E...RR.....G..........Q.......E....V...EL......VSE...hFEV......................... [...]
+A4HH63_LEIBR/16-225         ...............................................................................sdaasshmssttlt--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..V...RR.....Q..........N.......A....N...EV......LNN...rFPD......................... [...]
+A4H6I4_LEIBR/673-882        ...............................................................................sdaasshmssttlt--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..V...RR.....Q..........N.......A....N...EV......LNN...rFPD......................... [...]
+Q6T6K0_9TRYP/549-877        ...........................................................................................vt----FLRR..PEREP..YAEWKAS.WS...GG..-..GALSQVVAK.D..L.TGGR--................ESSIVMAVAQ.......QICAK..........TGRL.Nw...tLDV.N....QVC.PK........L......-..A....K...S...D.....P.SggI.L..................................IIAADVGRDQRSVate........ssavRQEF..FAVAFVSFYVk.gT...Q.W.S...T....Y.C.....N.HY..Q...VN.....G..........R.......K....E...TL......YAD....GSDcdttsmsegg............... [...]
+D0A4M3_TRYBG/571-899        ...........................................................................................vt----FLRR..PEREP..YAEWKAS.WS...GG..-..GALSQVVAK.D..L.TGGR--................ESSIVMAVAQ.......QICAK..........TGRL.Nw...tLDV.N....QVC.PK........L......A..K....A...D...P.....SgG..I.L..................................IIAADVGRDQRSVate........ssavRQEF..FAVAFVSFYVk.gT...Q.W.S...T....Y.C.....N.HY..Q...VN.....G..........R.......K....E...TL......YAD....GSDcdttsmsegg............... [...]
+Q389P5_9TRYP/560-888        ...........................................................................................vt----FLRR..PEREP..YAEWKAS.WS...GG..-..GALSQVVAK.D..L.TGGRE-................-LSIVMAVAQ.......QICAK..........TGRL.Nw...tLDV.N....QVC.PK........L......A..K....A...D...P.....SgG..I.L..................................IIAADVGRDQRSVate........ssavRQEF..FAVAFVSFYVk.gT...Q.W.S...T....Y.C.....N.HY..Q...VN.....G..........R.......K....E...TL......YAD....GSDcdttsmsegg............... [...]
+Q86QW7_GIALA/412-736        ............................................................................................l-VVIVIPG..PKQDRgdLYKGIKQ.FY...TH..M..GIVTQCLLA.P..K.SSQNELq.............wyDQAVLRSVCQ.......QIYAK..........AGGA.-.....VWA.P....VLP.PQ........N......-..-....V...Y...S.....K.S..T.M..................................LCALDISRPKKTVgr...........paEVPI..STAGFISTYD..gS...F.E.Y...I....Y.S.....Q.KK..T...LV.....P..........N.......R....L...NH......GGE....LQQqtl...................... [...]
+A8BCK6_GIALA/555-879        ............................................................................................l-VVIVIPG..PKQDRgdLYKGIKQ.FY...TH..M..GIVTQCLLA.P..K.SSQNELq.............wyDQAVLRSVCQ.......QIYAK..........AGGA.-.....VWA.P....VLP.PQ........N......-..-....V...Y...S.....K.S..T.M..................................LCALDISRPKKTVgr...........paEVPI..STAGFISTYD..gS...F.E.Y...I....Y.S.....Q.KK..T...LV.....P..........N.......R....L...NH......GGE....LQQqtl...................... [...]
+C6LTG5_GIALA/555-877        ............................................................................................l-VVVVIPG..PKQYSggLYKEVKR.FY...TD..K..GIVTQCLLT.P..R.LSRDGPe.............wyDQAILNGLCQ.......QIYAK..........AGGA.-.....VWA.P....ALP.KD........N......A..Y....-...-...S.....T.S..T.M..................................LCALDVSRPKKTVgr...........ptEVPA..STAGFISTY-...E...G.S.F...E....Y.I.....Y.SQkkN...LMpn.rlN..........Q.......G....G...EV......QQQt..lMKT......................... [...]
+Q0TWJ6_PHANO/160-297        .......................................................................................rgssit--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+Q5KAT1_CRYNE/560-859        ............................................................................................i-ILCILPR..KEASI..YQTIKSV.GA...EG..LfkPVVTQCLQS.A..K.IKSDRG................IDQYCGNVAM.......KVHCK..........LGGV.-.....TH-.-....QVK.HN........V......-..-....-...-...D.....K.T..T.M..................................LCGADVTHPPSRG..............rVLYP..SIAATVASIN...G...E.N.N...Y....F.A.....G.CV..T...EQ.....G..........G.......R....V...EI......IQL....LDE......................... [...]
+Q5KAU3_CRYNE/580-879        ............................................................................................i-IFCILPK..KDPSI..YQAIKAC.AA...EQ..LfkPVVTQCLQS.L..K.IKSDRG................IEQYCGNVAM.......KVHAK..........LGGL.-.....THQ.V....SHQ.L-........-......-..-....-...-...E.....R.T..T.M..................................MVGADTGHPPAKG..............gALPP..SIAVTVAAVN...G...E.N.N...R....F.V.....S.GV..R...LQ.....E..........G.......R....V...EI......IQD....LEN......................... [...]
+A7TMA9_VANPO/888-1209       ............................................................................................y-ILYVLRR.gNDSAV..YDRLKYI.TD...LK..F..GALNSCVVW.D..N.FKKNS-................-IQYNSNVVM.......KMNLK..........LLGS.Nh...sLSI.E....NNK.LL........I......D..K....E...S...N.....L.P..I.L..................................VLGSDVTHYPEKD...............--QN..SIASLVGSYD...D...K.F.T...Q....F.P.....G.DY..M...LQ.....D.........gP.......G....E...EI......ITN....VGS......................... [...]
+A5E477_LODEL/107-430        ............................................................................................f-LLVVLPS..KDARF..YRAVKRA.GD...LK..V..GINNSCVIV.D..T.FTKRKFd.............kfDMTLFAQVGM.......KVNLK..........LGGS.N.....HKL.S....DAN.SK........G.....lV..D....E...K...K.....V.P..V.F..................................ILGADVTHPTGES..............nEESV..SIASVVGSED...A...I.F.N...S....F.P.....G.SL..R...VQ.....G..........G.......G....Q...EV......IAE....IKD......................... [...]
+C5MCT9_CANTT/554-879        ............................................................................................y-LLVLLPR..SDTTY..YLSVKRV.CD...LK..V..GILNSCSIL.S..V.FIKQRRg.............sfDTMTYAQMAM.......KVNIK..........LGGS.N....hKLS.H....QDS.AS........L......V..D....K...N...G.....V.P..I.M..................................ILGADVTHPTGQI..............nHESV..SIAACVASED...G...I.F.N...K....F.P.....G.SI..R...IQ.....S..........G.......G....Q...EV......IKD....IKG......................... [...]
+B9WGS3_CANDC/555-882        ............................................................................................y-LLFILPR..QDTQL..YSAIKRA.CD...LK..I..GILNSCSVL.N..T.FTKKRRgs...........dnfDTMTYAQMAM.......KINIK..........LGGS.Nh...kLSK.K....DSQ.GL........F......D..-....K...N...N.....V.P..I.F..................................ILGADVTHPTGEI..............nSESV..SIASIVGSED...G...I.F.N...K....F.P.....G.SV..R...IQ.....T..........G.......G....Q...EV......IAD....VKS......................... [...]
+Q5A1B6_CANAL/296-623        ............................................................................................f-LLFILPR..QDTPL..YSAIKRA.CD...LK..V..GILNSCSIL.N..T.FTKKRRgt...........enfDAMTYAQMAM.......KINIK..........LGGS.Nh...kLSK.K....DSQ.GL........F......D..-....K...N...N.....V.P..I.F..................................ILGADVTHPTGEI..............nSESV..SIASIVGSED...G...I.F.N...K....F.P.....G.SV..R...IQ.....T..........G.......G....Q...EV......IAD....VKS......................... [...]
+C4YGL4_CANAL/554-881        ............................................................................................f-LLFILPR..QDTPL..YSAIKRA.CD...LK..V..GILNSCSIL.N..T.FTKKRRgt...........enfDAMTYAQMAM.......KINIK..........LGGS.Nh...kLSK.K....DSQ.GL........F......D..-....K...N...N.....V.P..I.F..................................ILGADVTHPTGEI..............nSESV..SIASIVGNED...G...I.F.N...K....F.P.....G.SV..R...IQ.....T..........G.......G....Q...EV......IAD....VKS......................... [...]
+B2WJ98_PYRTR/213-541        ...........................................................................................ct--FFLLRE..KDFDI..YAKIKRD.GD...FS..-..GNHTICAVA.S..R.IKDRNEqdnr........rsgpRWQHFSNLAL.......KMNMK..........LGGD.N.....HWL.D....ENE.LE........K......V..L....GgkdK...K.....Q.N..T.M..................................ILGADVIHPGSSS..............kIGAP..SIACVVGTID...S...R.F.M...S....Y.R.....G.SM..R...LQ.....A..........G.......G....Q...EQ......IEDf..nFRS......................... [...]
+Q0U676_PHANO/647-830        ........................................................................................nvldv--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............--GP..SIAAVVASTD...S...T.A.L...Q....F.P.....G.SV..T...IQ.....Q..........T.......F....D...EY......TTR...gAEDkttltapv................. [...]
+A7ISJ0_MYCPJ/514-830        ............................................................................................t-VLVVLPS..KDAND..YAAVKTW.GE...LH..D..GVNTICVTA.G..K.QHRL-I................DYDFQANLAL.......KFNAK..........LRGQ.N.....HKL.D....KSF.FE........Y......L..C....H...G...Q.....S.A..T.M..................................VVGADVTHPGPSS..............vDYCP..SIAAVVASTD...S...G.A.C...K....Y.S.....G.SI..R...LQ.....A..........S.......R....E...EI......ITD....LQG......................... [...]
+A6S1V9_BOTFB/6-263          .......................................................................................eivsva--------..-----..-------.--...--..-..-CPTVCVST.D..G.VERGAR...............pDLGVLANIAL.......KINFK..........LGGI.N.....HKI.E....NIP.L-........-......-..-....-...-...K.....D.R..T.M..................................IMGADVTHVGKGQ..............dDACP..SQAGVVATRD...S...N.Y.V...H....Y.L.....A.SA..R...LQ.....P..........H.......N....T...EF......IED....LQG......................... [...]
+A6SR68_BOTFB/1-284          ............................................................................................m--------..-----..-------.--...--..-..---------.-..-.------................--------CL.......KFNLK..........LGGV.N.....QEV.S....E-G.C-........-......-..-....G...I...K.....A.R..T.M..................................VVGADVTHPGDEE...............-VCP..SIAAVVATDD...N...S.Q.F...K....Y.L.....G.SA..R...LQ.....E..........G.......K....Q...EY......ISD....LRG......................... [...]
+Q0UCE8_PHANO/551-880        ............................................................................................l-VVFLLNK..SSTPF..YAHLKDL.AD...RT..H..GIHSLCLVE.Q.yK.LIKQ-Yger..........ahlFQEYMTNVVM.......KINLK..........MGGI.-.....TQS.V....T--.TV........S......D..Y....L...A...K.....N.R..V.M..................................VLGADVVHAGPGA..............yPGTP..SIAAIVGSVD...F...S.A.G...K....C.L.....G.SM..R...LQr..idT..........T.......D....R...ET......IVE....VED......................... [...]
+B2WJ35_PYRTR/419-708        ............................................................................................l-FILVVEK..YDTTI..YRELKNL.AD...RV..V..GIQSLCVVE.Q..M.-KKTDR...............wFDDMMRNVMM.......KLNLK..........LGGI.N.....HVV.D....AVQ.TR........L......-..-....-...-...K.....S.H..T.V..................................VLGADLVHPSGNL...............PGVP..SIASIVGSVD...N...H.A.G...K....C.L.....G.SM..R...LQ.....G..........I.......D....T...TD......REL....IIE......................... [...]
+Q0UCU3_PHANO/737-1044       ............................................................................................l-VVLLLKT..QSIPV..YSAFKAA.AD...TE..A..GLQSICMTQ.ApnY.ISAKQKck............enIDQYMANIMM.......KANLK..........FGGG.Nh...tVQF.A....AKP.LT........H......I..A....T...T...L.....Q.D..T.L..................................VLGADITHPSPGS..............lVGCP..SIAAVVGSVN...S...M.S.T...K....Y.L.....G.SM..R...LQ.....E..........T.......C....K..kEI......IDD....LQA......................... [...]
+Q0UCG8_PHANO/473-701        .............................................................................ekentpaysvfkylad--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............SGTP..SIAAIVGSVD...A...K.G.G...K....F.L.....G.SM..R...LQ.....P..........Rl.....iA....C...ED......IQD....VES......................... [...]
+Q0UCH0_PHANO/670-999        ............................................................................................l-VILVLRS..KDQEV..YSNFKYL.AD...RV..F..GIPSIVMVT.A..S.NFR--Ggaw.........nvtgLDQYIGNIMM.......KANLK..........LGGI.N.....HSA.E....SDR.GN........I......K..N....-...H...L.....E.N..T.L..................................VLGSDVTHPSNGS..............lFGCP..SVAALVGSVD...N...T.G.G...C....F.L.....G.SL..R...LQ.....D..........Q.......G....SkehQM......IDD....LKS......................... [...]
+Q2HHM4_CHAGB/694-1033       ............................................................................................l-VFVLLPD..KGAEL..YNAIKAA.AD...IK..V..GIHTVCMVE.S..K.AAKKFNkhtk........kmqfDLQFFDNILL.......KANLK..........QGGI.N.....HT-.L....EFP.TS........-......K..I....L...S...T.....W.Q..A.M..................................VLGLDVTHSPPGAn............kaKATP..SIIGMVANAD...E...H.L.A...Q....W.P.....A.TI..A...FQ.....D..........R.......E...nQ...EI......VTS....MQSf........................ [...]
+B2WJ32_PYRTR/383-592        .......................................................hrdasgnvitgdtvtvtvkqyqrlqygrtlrhgelsav--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...NI......ITG....LAT......................... [...]
+B6HRB3_PENCW/625-938        ............................................................................................f-LVVVLPT..TEGKN..FDYVKYA.GD...LK..T..GILTHCILY.D..K.VLRS--................NEQYWSNNAM.......KVNLK..........MGGC.N.....QLL.Q....PAN.AR........F......-..I....G...A...G.....K.S..T.M..................................VVGLDVTHPSSAD..............pEVFP..SVASIVASID...Y...R.M.G...Q....W.P.....G.EV..R...AQ.....M..........R.......R....Q...EH......VVH....LKD......................... [...]
+D0U264_CRYPA/482-802        ................................................................................lalivfpyqqpsg--------..----V..YNKIKFL.GD...VV..H..GLHTVCVIG.R..K.FVKNGQ...............tQREYFANVSL.......KINLK..........LGGT.N.....HQL.T....H-P.PE........L......-..-....-...-...F.....R.G..T.M..................................VVGYDAVHPTAVE..............kEDLP..SHMALVASVD...E...G.L.G...Q....W.S.....G.CY..W...TQ.....K..........R.......R....Q...EI......ADAt..nLKQ......................... [...]
+D1ZJ09_SORMA/711-1030       ............................................................................................f-LVVVLPD..KDSTT..YSWVKRA.AD...MK..Y..GIHTVCVQG.E..K.LVEEKG................QAGYYANVGL.......KVNLK..........FGGT.N.....HN-.-....-IK.TP........I......P..L....L...A...K.....G.K..T.M..................................VVGYDVTHPTNLTag..........qspSTAP..SIVGLVSTID...Q...H.L.G...Q....W.P.....G.MV..W...NN.....P..........R.......G....Q...ES......MTK...qFTD......................... [...]
+Q1K6I6_NEUCR/733-1052       ............................................................................................f-VVVLLPR..KDVAI..YNMVKRA.AD...IT..F..GVHTVCCVA.E..K.FLSTKG................QLGYFANVGL.......KVNLK..........FGGT.N.....HN-.-....-IK.TP........I......P..L....L...A...K.....G.K..T.M..................................VVGYDVTHPTNLAag..........qspASAP..SIVGLVSTID...Q...H.L.G...Q....W.P.....A.MV..W...NN.....P..........H.......G....Q...ES......MTE...qFTD......................... [...]
+Q9P8T1_NEUCR/582-901        ............................................................................................f-VVVLLPR..KDVAI..YNMVKRA.AD...IT..F..GVHTVCCVA.E..K.FLSTKG................QLGYFANVGL.......KVNLK..........FGGT.N.....HN-.-....-IK.TP........I......P..L....L...A...K.....G.K..T.M..................................VVGYDVTHPTNLAag..........qspASAP..SIVGLVSTID...Q...H.L.G...Q....W.P.....A.MV..W...NN.....P..........H.......G....Q...ES......MTE...qFTD......................... [...]
+B2AR52_PODAN/574-886        ............................................................................................l-VIVVLGD..QDANV..YNTVKKL.GD...VE..F..GIQTVCVVR.N..K.ITNN--................-KGYFTNVAL.......KVNLK..........FGGV.N.....HKL.Q....NAH.P-........-......-..L....L...K...G.....G.K..T.M..................................VVGYDVTHPTNLPtg...........agENAP..SLVGLVASID...S...D.L.G...Q....W.P.....A.IA..W...QN.....P..........A.......R....V...EQ......LDV...kLAE......................... [...]
+Q2GSQ8_CHAGB/651-969        ............................................................................................f-LLVLIPN..KDAVT..YSNIKKC.GD...CL..F..GIPTVCCRE.E..K.ITDPKG................QKGYFANVGL.......KVNLK..........FGGV.N.....HRV.Q....DTT.GL........V......-..-....-...-...-.....A.K..T.M..................................FVGYDVTHPTNLSag...........aaENAP..SLVGLVASVD...K...D.L.A...Q....W.P.....A.VT..W...AN.....K..........A.......R....V...EK......VGQ....NDDgq....................... [...]
+A4RL50_MAGGR/721-1039       ............................................................................................m-VFVILPD.sKDAAV..YNAVKRI.AD...ID..L..GVHTVCMVR.K..N.LFKNGPg..............qNPQYYANVGL.......KVNLK..........AGGI.N....hKLS.Q....DIP.V-........-......-..-....S...K...G.....G.K..A.M..................................FVGWDVIHPTNLGvd...........kdSGLP..SVVGLVSSID...E...H.L.A...Q....W.P.....A.VA..W...AQ.....K..........G.......G....Q...EM......ADS...rLEE......................... [...]
+C9ST09_VERA1/571-888        ............................................................................................f-VLVILPR..QDTTL..YSVIKTL.GD...CQ..F..GFHTICAVE.K..T.FTKE--................NPMTFANIGL.......KWNLK..........NGGI.N.....HRV.K....D--.-P........I......G..I....V...A...Q.....G.K..T.M..................................VVGYDVTHPTNMGlqp.........gekDVPP..SIVGLVASVD...K...D.L.G...Q....W.P.....A.VA..W...EQ.....K..........A.......G....Q...EM......LDS...kLLE......................... [...]
+C7YM23_NECH7/666-978        ............................................................................................f-ILIALGS..TDTAM..YSAVKLL.GD...VT..W..GIHTSCVQG.K..K.LANA--................NPGYYANVAL.......KWNLK..........AGGV.N.....HKL.R....N--.-E........F......G..I....I...K...E.....G.K..T.M..................................VVGYDVTHPTNMPtg...........asDDLP..SLVGLVATID...R...N.M.G...Q....W.P.....A.VS..W...EQ.....S..........S.......K....Q...EM......LDE...vLTE......................... [...]
+A4R6J1_MAGGR/641-908        ............................................................................................f-VLIILPD..KDVSR..YNMIKYL.GD...VC..Y..GVPTVCVAS.R..T.FFPARG................ADQMFGNLGL.......KINLK..........LGGV.N.....HKI.E....DSL.LG........I......-..-....V...A...Q.....G.K..T.M..................................IVGIDVAHPPAGA...............AVTA..SIAAMVASID...S...N.L.A...Q....W.P.....G.EI..G...IQ.....S..........Q.......A....R...KE......QVD...aLTS......................... [...]
+A2QG96_ASPNC/558-884        ............................................................................................f-LLIILPQ..AAEGL..YSRIKFL.CD...VQ..F..GIRNVCVVA.D..K.FLRS--................NDQFLSNVAL.......KLNLK..........LGGV.N.....QKL.L....TRS.L-........-......D..M....I...S...E.....G.K..T.M..................................VIGVDVTHPNSGNl.............pARAP..SVAAMVASVD...R...Y.L.A...Q....W.P.....A.EI..C...TQ.....P..........A.......R....Q...EL......VTQ....LGV......................... [...]
+B8MQK8_TALSN/682-995        .............................................................................................FILVILPS..RDTLL..YNTVKYL.CD...VK..H..GLLHACVTA.N..K.FAKP--................SAQYDANVAL.......KVNLK..........LGGT.N.....HRV.G....GTQ.L-........-......G..I....I...S...E.....G.K..T.M..................................LVGIDVTHPSPGS..............aKSAP..SIAAIVASVG...T...N.L.S...Q....F.P.....A.QL..R...VQ.....T..........E.......K....Q...EK......VDA....LDV......................... [...]
+B6QUK3_PENMQ/689-1001       ............................................................................................f-VLVVLPR..RETFL..YNTIKYL.CD...VK..Y..GLLHACVVA.D..K.FARG--................GPQYDANVAL.......KVNLK..........LNGT.N.....HIV.G....GT-.-Q........L......G..L....I...S...K.....G.K..T.M..................................LVGIDVTHPSPGS..............vKNAP..SIAAIVASVG...K...D.L.S...Q....F.P.....A.QL..H...VQ.....P..........G.......K....Q...EQ......VDA....LDV......................... [...]
+C5GYE6_AJEDR/653-980        ...........................................................................................ql-IFFILPV..-VSSI..YSRIKYL.CD...VK..W..GVHSICVVA.G..K.FAKERN................-CQYFSNVAL.......KFNLK..........LGGT.N.....HTL.D....PSK.L-........-......G..F....I...S...E.....G.K..T.M..................................VVGLDVTHPSPGS..............sSNAP..SIAAIVASID...Q...D.L.T...Q....W.P.....A.DV..R...IQ.....P..........S.......R....Q...EM......VSG....LDE......................... [...]
+C5K303_AJEDS/770-890        .................................................................................psriiirrprrq--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+C1GSN8_PARBA/1-191          .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.M..................................VVATDVTHPSPGS..............aSNTP..SIAGIIASIN...S...Q.L.A...Q....W.P.....A.DL..R...IQ.....T..........Y.......R....Q...EM......VSA....LDD......................... [...]
+C6H5C6_AJECH/26-168         ..........................................................................msnlaftafapspanspkd--------..-----..-------.--...--..-..---------.-..-.-----R................NHTYFANVAL.......ETNRK..........LGGA.S.....HTL.D....AHK.--........L......G..F....I...P...G.....C.K..T.M..................................VVCVDVTHPSPGS..............sTNAS..SGAAIVASID...Q...N.L.T...Q....W.P.....A.EF..R...IQ.....A..........T.......F....Q...KM......MIS...rLDE......................... [...]
+A6RDB0_AJECN/9-157          ........................................................................................lkpyv--------..-----..-------.CD...VK..F..GVHSFRAIA.S..K.FAKDRN................-HTYFANVAL.......EANRK..........LGGA.S.....HTL.D....AHK.--........L......G..F....I...P...G.....C.K..T.V..................................VVCVDVTHPSPGS..............sTNAS..SGAAIVASID...Q...N.L.T...Q....W.P.....A.EL..C...TQ.....A..........V.......F....Q...KM......ISR....LDE......................... [...]
+C0S8I9_PARBP/1049-1137      ............................................................................................p--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+B6H0X0_PENCW/641-959        ...........................................................................................vf-ILGILYT..KDTGV..YNCVKQV.CD...VR..V..GIRNVNVLA.E..K.LANS--................NDQYNANVGL.......KINLK..........LGGA.N.....QAL.R....TQD.L-........-......G..I....I...S...E.....G.K..T.M..................................LVGIDVTHPSPGS..............aSTAP..SVAGIVASVD...G...T.L.A...Q....W.P.....A.EI..R...VQ.....G..........A.......R....Q...EM......VAD....LET......................... [...]
+A1C469_ASPCL/690-1008       ............................................................................................l-ILSIMYG..SDTEA..YNSLKKV.CD...VH..C..GVRNINVLA.E..K.LRGA--................NDQYYANVGL.......KFNLK..........LGGA.N.....QSL.K....TSE.LG........I......-..-....V...A...E.....G.K..T.M..................................LVGIDVTHPSPGS..............sATAP..SVAGMVASID...S...S.L.S...Q....W.P.....A.DI..R...IQ.....T..........S.......R....Q...EM......VSD....LDA......................... [...]
+A1DBD4_NEOFI/680-998        ............................................................................................l-ILTILYS..SDAEA..YNCIKQI.CD...VR..R..GVRNINVLA.E..K.LRGA--................NDQYYANVGL.......KFNLK..........LGGA.N.....QTL.K....ASE.LG........I......-..-....V...A...E.....G.K..T.M..................................LVGIDVTHPSPGS..............sAEAP..SVAGMVASVN...S...S.L.S...Q....W.P.....A.DI..R...IQ.....T..........S.......R....Q...EM......VSD....LDE......................... [...]
+B0Y9U0_ASPFC/686-1004       ............................................................................................l-ILTILYS..SDVEA..YNCIKKI.CD...VR..R..GVRNVNVLA.E..K.LRGA--................NDQYYANVGL.......KFNLK..........LGGA.N.....QIL.K....ASE.LG........-......-..I....V...A...E.....G.K..T.M..................................LVGIDVTHPSPGS..............sAEAP..SVAGMVASID...S...S.L.S...Q....W.P.....A.DI..R...IQ.....T..........S.......R....Q...EM......VSN....LDE......................... [...]
+Q4WC92_ASPFU/686-1004       ............................................................................................l-ILTILYS..SDVEA..YNCIKKI.CD...VR..R..GVRNVNVLA.E..K.LRGA--................NDQYYANVGL.......KFNLK..........LGGA.N.....QIL.K....ASE.LG........-......-..I....V...A...E.....G.K..T.M..................................LVGIDVTHPSPGS..............sAEAP..SVAGMVASID...S...S.L.S...Q....W.P.....A.DI..R...IQ.....T..........S.......R....Q...EM......VSN....LDE......................... [...]
+C8VMQ3_EMENI/660-979        ............................................................................................l-ILTILPF..NDTAL..YNCIKRA.CD...VR..H..GVRNINVLA.E..Q.FCKR--................NEQYFANVGL.......KFNLK..........LGGV.N.....QVV.R....PSQ.L-........-......G..I....I...G...E.....G.K..T.M..................................LIGIDVTHPSPGS..............aKGAP..SVAAMVASVD...S...S.L.G...Q....W.P.....A.EI..R...IQ.....K..........E.......A....R..kEM......VDA....LDS......................... [...]
+Q5BD61_EMENI/660-979        ............................................................................................l-ILTILPF..NDTAL..YNCIKRA.CD...VR..H..GVRNINVLA.E..Q.FCKR--................NEQYFANVGL.......KFNLK..........LGGV.N.....QVV.R....PSQ.L-........-......G..I....I...G...E.....G.K..T.M..................................LIGIDVTHPSPGS..............aKGAP..SVAAMVASVD...S...S.L.G...Q....W.P.....A.EI..R...IQ.....K..........E.......A....R..kEM......VDA....LDS......................... [...]
+Q0CNH1_ASPTN/643-961        ............................................................................................l-ILGILPF..NDADY..YNAIKRA.CD...VK..F..GVRNINVLA.E..K.FLEA--................KDQYIANVGL.......KFNLK..........LGGV.N....qVL-.H....P--.KE........L......G..I....I...G...Q.....G.K..T.M..................................LVGIDVTHPSPGS..............sSHAP..SVAGMVASTD...A...T.L.G...Q....W.P.....A.EL..R...IQ.....A..........S.......R....Q...EM......VED....LDT......................... [...]
+B8MXT2_ASPFN/684-1002       ............................................................................................l-ILSVLPF..SDADY..YNCIKRA.CD...LT..Y..GVRNINVLA.D..K.FRDA--................NPQYFANVGL.......KVNLK..........LGGA.N.....QLL.D....A--.KE........L......G..L....I...G...Q.....N.K..T.M..................................LVGMDVTHPSPGS..............sANAP..SVAGMVASVD...S...T.L.S...Q....W.P.....A.EI..R...VQ.....R..........S.......R....E...EM......IQD....LSD......................... [...]
+Q2US02_ASPOR/573-891        ............................................................................................l-ILSVLPF..SDADY..YNCIKRA.CD...LT..Y..GVRNINVLA.D..K.FRDA--................NPQYFANVGL.......KVNLK..........LGGA.N.....QLL.D....A--.KE........L......G..L....I...G...Q.....N.K..T.M..................................LVGMDVTHPSPGS..............sANAP..SVAGMVASVD...S...T.L.S...Q....W.P.....A.EI..R...VQ.....R..........S.......R....E...EM......IQD....LSD......................... [...]
+A2R8K3_ASPNC/710-1028       ............................................................................................l-ILTILPS..NDADI..YNIVKRA.CD...LT..H..GVRNVNVVA.D..K.FRKPNN................-DQYWANVGL.......KFNLK..........LGGN.N.....QLI.D....P--.KE........L......G..L....I...G...Q.....N.K..T.M..................................LVGVDVTHPSPGS..............sSAAP..SVAGMVASID...S...T.L.G...Q....W.P.....A.EL..R...IQ.....K..........P.......R....E...EM......VAE....LDA......................... [...]
+B8N7A8_ASPFN/617-954        ...........................................................................................ll--YIVLPK..KESRW..YLVIKRL.CD...VE..Y..GLQTICSVG.P..K.LVAKKGqtme.......qydksLDQYMRNVAM.......KFNLK..........LGGT.N.....HVV.D....NLR.L-........-......S..I....I...N...E.....D.K..T.M..................................IVGLDVTHPTGSSqv...........ssATAP..SVAAMVASID...K...T.L.G...Q....W.P.....A.TI..Q...VQ.....S..........H.......G...gK...EE......IDS....LDG......................... [...]
+Q2UBS9_ASPOR/578-915        ...........................................................................................ll--YIVLPK..KDSRW..YLVIKRL.CD...VE..Y..GLQTICSVG.P..K.LVAKKGqtme.......qydksLDQYMRNVAM.......KFNLK..........LGGT.N.....HVV.D....NLR.L-........-......S..I....I...N...E.....D.K..T.M..................................IVGLDVTHPTGSSqv...........ssATAP..SVAAMVASID...K...T.L.G...Q....W.P.....A.TI..Q...VQ.....S..........H.......G...gK...EE......IDS....LDG......................... [...]
+B2WES9_PYRTR/643-967        ............................................................................................l-LFIVLPE..ANIPL..YKRIKSI.AD...KE..Y..GLHTICSVG.S..K.LAKDRG................RDQYIANVAL.......KINLK..........LGGI.N.....QIV.E....N--.KN........L......G..I....I...D...Q.....N.K..T.M..................................VVGIDVTHPSPGS..............aSNAP..SVSAMVASVD...R...F.L.G...Q....W.P.....A.TL..R...IQ.....R..........G.......R....Q...EN......VDA....LGE......................... [...]
+A6QW60_AJECN/639-963        ............................................................................................l-LFIILPE..ANIPL..YKRIKTL.AD...KD..Y..GIHTICSVG.S..K.LAKDRG................RDQYMANIAL.......KFNLK..........LGGI.N.....QIV.E....N--.KN........L......G..I....I...D...Q.....N.K..T.M..................................VVGIDVTHPSPGS..............sSNAP..SVSAMVASID...K...F.L.G...Q....W.P.....A.TL..R...KQ.....R..........A.......R....Q...EN......VDD....LTE......................... [...]
+B6QWK7_PENMQ/644-968        ............................................................................................l-LYVILPQ..ANTTL..YKRIKTL.TD...KD..F..GIHTICSVA.S..K.LAKERG................RDQYMANIAL.......KFNLK..........LGGI.N.....QIV.E....NRN.L-........-......G..I....V...D...Q.....N.K..T.M..................................VVGIDVTHPSPGS..............sSNAP..SISAMVASID...R...S.L.G...Q....W.P.....A.TL..R...IQ.....R..........A.......R....Q...EN......VDD....LTE......................... [...]
+B8MGF3_TALSN/2-137          ..........................................................................................lad--------..-----..-------.--...KD..F..GIHTICSVG.S..K.LVKDRG................RDQYMANVAL.......KFNLK..........LGGI.N.....QIV.E....NRN.L-........-......G..I....V...D...E.....N.K..T.M..................................VVGTDVTHPSPSS..............sSNAP..SVSAMVASID...K...F.L.G...Q....W.P.....A.TL..R...IQ.....H..........A.......R....Q...EN......VTD....LTE......................... [...]
+C7ZR18_NECH7/19-235         ...............................................................lcqgsirynapltprtstlreesyirmtii--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+C5PJP0_COCP7/663-977        ............................................................................................f-VLVILPL..EDSSI..YNRVKYR.GD...IQ..N..GIHTVCVLA.N..K.FRGI--................--QYCANVAL.......KFNLK..........LGGT.N.....HVL.D....SSK.L-........-......G..V....V...G...E.....G.K..T.M..................................LVGIDVTHPSPGS..............sSQAP..SVAAMVANVD...K...H.L.A...Q....W.P.....A.SI..R...LQ.....Q.........eP.......K....A...EM......VDK....LQE......................... [...]
+C4JG78_UNCRE/651-963        ............................................................................................f-LLVMLPF..EDSAI..YNRVKFR.GD...IQ..N..GIHTVCVGD.R..T.G-----................GIQSLANIAL.......KFNLK..........LGGA.N.....HVL.-....D-P.PK........L......G..L....I...G...E.....G.K..T.M..................................LVGIDVTHPSPGS..............sSQAP..SVAAMVASVD...K...D.L.A...Q....W.P.....A.SI..R...LQ.....R..........E......aK....A...EM......VDE....LEE......................... [...]
+D4ANV6_ARTBE/642-958        ............................................................................................l-LLVILPN..DNPTV..YKRIKLN.GE...VF..H..GIQTVCVIM.S..K.FTKSSN................-VQYHANVAM.......KFNLK..........LGGT.N.....HVL.D....DSK.MG........-......-..I....I...A...G.....G.K..T.M..................................VVGIDVTHPAPGS..............sETAP..SVAGMVASID...K...T.L.G...Q....W.P.....A.IL..R...LQ....rE..........A.......K....Q...EM......VDD....LTD......................... [...]
+D4CZ86_TRIVC/642-958        ............................................................................................l-LLVILPN..DNPTV..YKRIKLN.GE...VF..H..GIQTVCVIM.S..K.FTKSSN................-VQYHANVAM.......KFNLK..........LGGT.N.....HVL.D....DSK.MG........-......-..I....I...A...G.....G.K..T.M..................................VVGIDVTHPAPGS..............sETAP..SVAGMVASID...K...T.L.G...Q....W.P.....A.IL..R...LQ....rE..........A.......K....Q...EM......VDD....LTD......................... [...]
+C5FGF6_NANOT/649-965        ............................................................................................l-LLMILPN..DNPTV..YKRIKLN.GE...VM..H..GIQTICVIR.S..K.FDKQYN................-VQYHANVAM.......KFNLK..........LGGI.N.....HVV.D....DTK.L-........-......G..I....I...A...A.....G.K..T.M..................................VVGIDVTHPAPGS..............sVTAP..SVAGMVASVD...K...Y.L.G...Q....W.P.....A.VL..R...LQ.....H.........eA.......K....Q...EM......VDD....LTD......................... [...]
+C5JDT9_AJEDS/671-859        .....................................................................................rlqqqara--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+C5GX22_AJEDR/671-859        .....................................................................................rlqqqara--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+C1G7F3_PARBD/674-979        .....................................................................................qqsrvrgd--------..-----..-------.--...VK..D..GIHTICVVA.E..K.FAKN--................QVQYFANVAL.......KFNLK..........LGGV.N.....HRL.Q....PSK.L-........-......G..T....L...S...E.....G.K..T.M..................................VVGIDVTHPSPGS..............aPTAP..SIAGMVASVD...N...V.L.G...Q....W.P.....A.SI..R...LQ.....H.........qA.......R....A...EM......VND....LDP......................... [...]
+C0RZ18_PARBP/688-993        .....................................................................................qqsrvrgd--------..-----..-------.--...VK..D..GIHTICVVA.E..K.FAKN--................QVQYFANVAL.......KFNLK..........LGGV.N.....HRL.Q....PSK.L-........-......G..T....L...S...E.....G.K..T.M..................................VVGIDVTHPSPGS..............aPTAP..SIAGMVASVD...N...V.L.G...Q....W.P.....A.SI..R...LQ.....H.........qA.......R....A...EM......VND....LDP......................... [...]
+C1GXU8_PARBA/683-1002       ............................................................................................l-VLVILPF..ASPPI..YNQVKYR.GD...VK..D..GIHTICVVA.E..K.FAKN--................QAQYFANVAL.......KFNLK..........LGGV.N.....HRL.Q....PSK.L-........-......G..T....L...S...E.....G.K..T.M..................................VVGIDVTHPSPGS..............aPTAP..SIAGMVASVD...N...V.L.G...Q....W.P.....A.SI..R...LQ.....H.........qA.......R....A...EM......VND....LDP......................... [...]
+C5JDT9_AJEDS/580-664        ............................................................................................l-VLVILPF..ASPQI..YSQVKYR.GD...IK..D..GIHTICVVA.E..K.FRKN--................QPQYFANVAL.......KFNLK..........LGGV.N.....HKL.Q....PSK.L-........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+C5GX22_AJEDR/580-664        ............................................................................................l-VLVILPF..ASPQI..YSQVKYR.GD...IK..D..GIHTICVVA.E..K.FRKN--................QPQYFANVAL.......KFNLK..........LGGV.N.....HKL.Q....PSK.L-........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+C0NMG7_AJECG/678-986        ............................................................................................l-VLVILPF..ESPQM..YNHIKYR.GD...IK..D..GIHTICVVA.E..K.FGKN--................QPQYFANVAL.......KFNLK..........LGGI.N.....HKL.Q....PSK.L-........-......G..I....I...S...E.....G.K..T.M..................................VVGIDVTHPAPGS..............lPTAP..SIAGMVASVD...K...F.L.A...Q....W.P.....A.SI..R...LQ.....H..........Q......aR....A...EM......VDD....LDP......................... [...]
+C6H291_AJECH/678-997        ............................................................................................l-VLVILPF..ESPQM..YNHIKYR.GD...IK..D..GIHTICVVA.E..K.FGKN--................QPQYFANVAL.......KFNLK..........LGGI.N.....HKL.Q....PSK.L-........-......G..I....I...S...E.....G.K..T.M..................................VVGIDVTHPAPGS..............lPTAP..SIAGMVASVD...K...F.L.A...Q....W.P.....A.SI..R...LQ.....H..........Q......aR....A...EM......VDD....LDP......................... [...]
+A6RB60_AJECN/291-610        ............................................................................................l-VLVILPF..ESPQM..YNHIKYR.GD...IK..D..GIHTICVVA.E..K.FGKN--................QPQYFANVAL.......KFNLK..........LGGI.N.....HKL.Q....PSK.L-........-......G..I....I...S...E.....G.K..T.M..................................VVGIDVTHPAPGS..............lPTAP..SIAGMVASVD...K...F.L.A...Q....W.P.....A.SI..R...LQ.....H..........Q......aH....A...EM......VDD....LDP......................... [...]
+Q96UM0_BLUGR/565-886        ............................................................................................f-VLCILPK..NDPAI..YNSIKTV.AD...TK..A..GIHTVCCVS.S..K.FTKQQR................QEQYFGNVAL.......KFNLK..........AGGI.N.....HIL.E....PAK.L-........-......G..I....V...S...E.....G.K..T.M..................................VVGVDVTHPSPGS..............rEGAP..SVAGIVASVD...K...H.L.G...Q....W.P.....S.QF..S...IQ.....A..........K.......S...rT...EM......VSD....LES......................... [...]
+A7E4W2_SCLS1/692-1008       ............................................................................................f-VLCILPV..NDVML..YNTIKRH.AD...TR..A..GIHTVCVQY.S..K.FVKGDL................--QYFGNVAL.......KFNLK..........AGGI.N.....QTI.D....K--.--........L......G..V....I...N...E.....G.K..T.M..................................VVGIDVTHPSPGS..............kETAP..SVAAMVTSTD...K...L.L.G...Q....W.S.....G.IC..R...LQ.....N.........qA.......R....Q...EM......VSD....LES......................... [...]
+A6RK26_BOTFB/654-970        ............................................................................................f-LLCILPV..DDVML..YNTIKRF.GD...TK..A..GIHTVCVQY.S..K.FTKG--................DPQYFGNVAL.......KFNLK..........AGGI.N.....QTI.D....K--.--........L......G..I....I...N...E.....G.K..T.M..................................VVGIDVTHPSPGS..............kDTAP..SVAAMVTSTD...K...L.L.G...Q....W.S.....G.VC..R...LQ.....D..........K......aR....Q...EM......VSD....LEP......................... [...]
+D0U265_CRYPA/712-1038       ...................................................................................lllvilpgrd-------K.gDNTEL..YNWVKTL.GD...VK..H..GVHTICVVG.Q..K.FTAA--................QDQFFANVAL.......KFNLK..........LGGN.N.....QSV.D....PSR.L-........-......S..F....I...N...E.....D.K..T.M..................................LVGIDVTHPSPGS..............rSNAP..SVAGMVASTD...K...H.L.G...Q....W.P.....G.IL..S...IQ.....N..........K......aR....A...EM......VSD....LTE......................... [...]
+D0U266_CRYPA/635-957        ...........................................................................................lv--WVIVPA..GSKLL..YDRIKYL.SD...VK..L..GVMTVVSVD.K..T.LKERDPr..............yQSQYLGNEAL.......KVNLK..........LGGM.N.....QRI.T....S--.-G........L......H..F....I...S...E.....G.K..T.M..................................LVGIDVIHPSTDQt.............rGGMP..SVAGMVATVD...R...H.V.A...Q....W.P.....G.VL..Q...VQ.....Q..........K.......R....Q...EM......VSD....LEP......................... [...]
+D4B128_ARTBE/608-819        ...........................................................................................ft--LIVLPR..YDAEI..YSKVKYS.AD...VK..H..GCHTLCVVP.K..P.PKNGRPgepl........qiniQPSYLANLAL.......KINLK..........LGGV.N.....HQL.E....PLK.KY........-......-..-....-...Q...S.....C.P..I.M..................................YLGIDVTHPTGTDs.............iPNAP..SIAGVVANCD...P...M.L.G...Q....W.P.....A.SI..R...TQ.....A..........H.......C....V...EM......VEN....LGE......................... [...]
+D4D326_TRIVC/587-798        ...........................................................................................ft--LIVLPR..YDAEI..YSKVKYS.AD...VK..H..GCHTLCVVP.K..P.PKNGRPgepl........qvniQPSYLANLAL.......KINLK..........LGGV.N.....HQL.E....PLK.KY........-......-..-....-...Q...S.....C.P..I.M..................................YLGIDVTHPTGTDs.............iPNAP..SIAGVVANCD...P...M.L.G...Q....W.P.....A.SI..R...TQ.....A..........H.......C....V...EM......VEN....LGE......................... [...]
+C4JIN7_UNCRE/692-1007       ............................................................................................f-VVALLPK..YDQQI..YSLVKHQ.GD...IK..T..GIPTVCVVE.K..P.IKDKQTntsy.......vglkdDEGTLRNISL.......KVNLK..........LGGI.N.....HEI.T....SRQ.EI........R......N..I....-...-...M.....Q.T..T.M..................................FIGIDVTHPTGTEs.............qSDAP..SIAAVVANTD...P...T.L.S...Q....W.P.....A.SI..T...TQ.....G..........H.......R....K...EM......VED...dLYS......................... [...]
+C5FBF4_NANOT/570-628        ..........................................................................................pda--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+C5P8C9_COCP7/682-993        ............................................................................................y-VIVLLPK..FDQQV..YSYVKYY.GD...IV..T..GIPNTCVTE.K..Y.VKKEKRit...........fktDGGAVENIAL.......KINLK..........LGGI.N.....HEI.Q....SDG.RI........H......D..I....-...-...I.....R.T..T.M..................................FIGIDVTHPTGTDs.............qSGAP..SISAVVANND...P...T.L.A...Q....W.P.....A.SI..T...TQ.....E..........H.......R....K...EM......VES...vLER......................... [...]
+B0D488_LACBS/608-916        ...........................................................................................ti-VLVILSN..GDKHV..YSGLKHL.CD...CY..L..DLATVCVHS.S..K.IRKEKG................QLQYFANVAL.......KFNMK..........LGGV.N.....HAL.N....AAN.M-........-......A..W....L...K...K.....A.P..T.M..................................LVGIDVTHPGPGS..............vKGTP..SIAAVVASCE...S...D.F.A...Q....Y.P.....A.SM..E...IQ.....E..........T.......K....K...EM......VTN....LAK......................... [...]
+A8P0D4_COPC7/619-925        ............................................................................................i-VLVILSS..GDKHV..YNGIKKL.CD...TQ..L..DLPTVCVQT.A..K.FRKEKG................QPQYFANVAL.......KVNMK..........LGGV.N.....HVL.D....K--.DN........M......T..W....L...K...Q.....K.P..T.M..................................LVGMDVTHPGPGS..............rLGTP..SVAAVVASCD...P...D.F.A...Q....F.P.....C.SM..E...IQ.....E..........S.......K....K...EM......ITN....LEK......................... [...]
+A8P2K4_COPC7/589-903        ...........................................................................................sf-MLVLLEQ..KEKYI..YPGIKRI.GD...VE..L..GLLTLHMQL.P..R.VFGDSLgg............tkRDQYLSNVAL.......KVNTK..........LGGV.N.....HML.E....DSA.M-........-......A..W....L...R...K.....K.K..T.M..................................MVGIDVTHPSPLS..............kEGTP..SIAAVVASVD...D...N.F.V...Q....F.P.....A.SL..R...IQ.....T..........S.......K....K...EM......LDE....LSD......................... [...]
+B0E0C2_LACBS/610-916        ...........................................................................................sf-VLVLLEN..RDNYI..YPGIKRI.CD...VE..L..GIHTVHMQL.G..K.ALTDER...............kQDQYFSNVAL.......KVNTK..........LGGM.N....hLLE.P....N--.-A........M......N..W....L...T...K.....K.K..T.M..................................MVGIDVTHPGPNS..............rEGTP..SIAAVVANVD...D...N.F.V...Q....F.P.....A.SL..R...IQ.....Q..........H.......S....K...KE......MLD...eLRD......................... [...]
+B8PBB9_POSPM/331-616        ............................................................................................l-LIVMLPW..RKRQL..YAAIKYY.TD...VV..L..GIHTAHILL.P..K.AHGD--................--GYLSSLAL.......KLNAK..........LGGI.N.....YYL.D....DQS.I-........-......R..W....L...S...D.....R.A..N.M..................................IVGLHVRHSLPSM...............NMAW..TTAAMVSNVD...G...F.F.H...N....F.P.....A.HL..E...VT.....V..........D.......F....Q...K-......--P...dVGR......................... [...]
+B8PFP7_POSPM/371-656        ............................................................................................l-LIVMLPW..RKRQL..YAAIKYY.TD...VV..L..GIHTAHILL.P..K.AHGD--................--GYLSSLAL.......KLNAK..........LGGV.N.....YYL.D....DQS.I-........-......R..W....L...S...D.....R.A..D.M..................................IVGLHVRHSPPST...............EMVW..TTAATVSNVD...G...F.F.H...N....F.P.....A.RL..K...VA.....V..........E.......F....Q...K-......--P...dVGR......................... [...]
+B8PN24_POSPM/140-415        ............................................................................................l-LIVMLPW..RKRQL..YAAIKYY.TD...VV..L..GIHTAHILL.P..K.AHGD--................--GYLSSLAL.......KLNAK..........LGGV.N.....YYL.D....DQS.I-........-......R..W....L...S...D.....R.A..D.M..................................IVGLHVRHSPPST...............EMVW..TTAAMVSNVD...G...F.F.H...N....F.P.....A.RL..K...VA.....V..........E.......F....Q...K-......--P...dVGR......................... [...]
+A2DXK9_TRIVA/462-624        .............................................................................................FIICVLPD..GNSQL..YSTLKIF.LT...SS..L..GIPSSFVTD.E..S.LVANKQ...............sMDQIATDMCL.......SIICK..........TGGV.P....fY-V.S....PVS.LP........L......-..-....-...-...-.....R.N..T.V..................................FAGFEVSQTNVAAva..........sydN---..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+A1D5I6_NEOFI/71-143         ..........................................................................................iey--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+B2VW51_PYRTR/606-910        ............................................................................................f-LFALLPS..DNTVL..YDSIKLL.FD...CK..L..GLPSVCCIG.S..K.FAKL--................DPHYFANVAM.......KFNQK..........LGGV.N.....HTV.P....LAK.LA........-......-..-....P...L...D.....A.Q..T.I..................................IFGIDVTHPSPGS..............sQTAP..SIAGVVASVD...A...K.F.S...Q....Y.A.....A.SM..R...TQ.....A..........R.......R....V...EM......VAE....LEE......................... [...]
+Q0UNU9_PHANO/666-973        ............................................................................................f-LFVILPS..DNAVL..YDCIKFV.CD...CK..L..GVPNICNIG.S..K.FSKEKG................QMQYFANVAM.......KFNQK..........LGGV.N.....HT-.V....ELK.RM........A......P..-....-...L...D.....P.Q..T.I..................................LFGIDVTHPSPGS..............sDSAP..SVAGVVASVD...S...L.F.S...Q....F.P.....A.SM..R...TQ.....R..........G.......R....Q...EM......VEE....LEE......................... [...]
+B8PJA4_POSPM/353-665        ............................................................................................l-ILAFLPV..NAPDI..RRRIKHW.GD...VD..K..GVPTQCLRA.G..K.WERA--................RDQYINNVALnsrpqitRINAK..........LGGV.N.....SAI.N....A-K.LL........-......-..-....-...-...P.....Q.C..T.M..................................VIGADVGHPGPGI...............MNRP..SVTSLVASVD...P...D.A.T...K....Y.T.....T.YA..S...VQ.....A..........P.......R....V...EI......IQD....LEQ......................... [...]
+B0DLH7_LACBS/515-821        ............................................................................................i-LVVILPD..EAATI..LHTVKFW.GD...VK..Y..GILTQCVRA.D..K.LLKA--................NDQYWNNVAL.......KLNAR..........LGGL.N.....YHA.S....GSR.T-........I......N..D....L...K...K.....E.P..Y.I..................................IMGADVGHPGPRV...............-RKP..SVTSLVFSLD...M...H.A.T...K....Y.A.....S.MC..R...IQ.....N..........P.......R....Q...EV......IQD....LRE......................... [...]
+A8NFX5_COPC7/531-721        .............................................................................................MLVVILPE..DALNL..KAKVKYF.GD...IT..H..GVPTQCLRV.S..K.LLDPKSrrlk........qprqLNQYFNNVAL.......KINAR..........LRGV.N....vMLE.S....KIP.GG........S......P..LailsT...Q...G.....R.K..T.M..................................IIGVDVSHPGPGV...............TNRP..SVASLVFSLY...Q...G.G.A...Q....Y.A.....A.TT..T...IQ.....K..........P.......R....L...EK......VEQ....LAS......................... [...]
+A8NFX0_COPC7/514-795        ............................................................................................m-LIVLLPS..EAAHL..RTEVKYW.GD...AV..N..GVKTQCLRF.G..K.TMN---................-NQYCNNVAL.......KVES-..........-GKA.L.....REF.A....NDD.R-........-......-..-....-...-...-.....-.-..-.-..................................---ADIGHPGAGI...............RNKP..SVSGLVFSIS...Q...F.A.T...E....Y.A.....A.IT..R...IQ.....P..........P.......R....V...EA......IVD....LEE......................... [...]
+A8PFS7_COPC7/454-749        ....................................................................fvvvlpqggdeirigvkhfgnfinp--------..-----..-------.--...--..-..GIATQCLKG.F..Q.CRGA--................RPQYWANVMI.......QVNGK..........LGGI.-.....HAV.P....NST.TS........G......S..L....V...D...E....aI.A..T.M..................................LIGADVTHPPPGDq.............sKHKP..SFAAIVWSWD...R...H.Y.A...R....Y.R.....A.RD..S...IQ.....R..........G.......R....E...EI......IQH....MKP......................... [...]
+A8NXQ6_COPC7/547-849        ............................................................................................l-IVVVLPDgpVANEI..YSQVKFF.GD...VK..M..GVHTQCMRA.M..R.CFGG--................NNQYFANIAL.......KLNAR..........LGGV.Nv...aPDL.S....DGV.SR........N......L..L....S...P...P.....N.K..T.L..................................VMGADVIHPSPGS...............EGRP..SFTAVVGSTD...C...N.M.T...R....F.V.....S.ST..R...AQ.....T..........S.......R....E...EI......IDD....LKD......................... [...]
+A8P6A7_COPC7/477-803        ............................................................................................l-IFAVLPP..NSGDI..YTGVKRF.GD...VT..M..GIATQCLLS.N..K.CKKG--................NHQYWANVTL.......KVNVK..........LGGI.N....fY--.P....ELR.GD........I......-..L....D...P...A.....K.P..T.I..................................IMGADAIHPPPGV...............RDKP..SVTALVSSID...S...K.L.A...R....Y.V.....A.TS..R...VQ.....K..........Gsds.gkgG....R...EI......ILD....MED......................... [...]
+B0CXE0_LACBS/567-880        .............................................................................................LIVVILPD..GGDDI..YTAVKHF.GD...VT..M..GVATQCLLA.K..K.CYRA--................NAQYWANVML.......KVNVK..........LDGI.Ns...vPDL.P....SLT.DP........-......-..-....-...-...A.....H.P..T.I..................................IMGADVIHPAPGT...............EGRP..SFTALVASVD...T...T.V.S...K....Y.V.....A.MS..R...VQ.....T..........G.......R....Q...EM......IDD....LED......................... [...]
+A8PFQ6_COPC7/458-767        ............................................................................................l-VVVILPE..GGDEI..YTSVKHF.GD...IV..R..GVATQCLIG.R..K.CSRA--................RPQYWANVLL.......KVNVK..........LGGI.N.....SII.D....PSG.SP........L......-..A....D...P...A.....N.P..T.V..................................VMGADVIHPAPGS...............EGRP..SFTALVSSVD...T...H.A.T...K....Y.I.....A.CN..N...VQ.....E..........G.......R....T...EI......IED....LEA......................... [...]
+B0CYG1_LACBS/553-863        .............................................................................................LIVVVLPE..GGNDI..YTAVKHF.GD...IT..M..GVATQCMKS.S..K.CFRA--................KPQYYANISL.......KINVK..........LGGI.N.....TI-.P....D-P.SS........V......S..V....L...T...Dp...hQ.P..T.I..................................VMGADVIHPAPGS...............DGRP..SFTALVANVD...S...D.T.A...K....Y.I.....A.DS..R...VQ.....T..........S.......R....Q...EM......IEE....LQA......................... [...]
+B0D2D0_LACBS/417-738        ............................................................................................l-IVAVLPD..NVGDL..YSTIKHH.GD...IR..F..GVATQCLKS.H..K.CSRA--................KEQYWKNVML.......KVNVK..........LGGI.N.....VVP.S....STE.LS........D......P..A....-...-...-.....N.P..T.Ivigtpsai..................iasiltfcLSGADTAHPAPGA...............HDRP..SFTSVVANVD...S...N.V.A...K....Y.V.....A.ST..R...VQ.....K..........G.......R....Q...EI......ITD....LKE......................... [...]
+B2RFN0_OIKDI/550-850        ...........................................................................................fa--LVILPR..RDSHI..YSIVKEK.AE...LV..F..GVVTQCVQS.R..N.VERA--................NAMFYGNLLQ.......KINVK..........LGGV.N.....TKV.V....NRI.Q-........-......-..-....L...F...T.....K.P..I.M..................................IVGLSFSHPAPGS...............-RNP..SIVTASFSCD...A...S.G.T...K....Y.F.....V.GK..R...LQ.....S..........S.......R....F...SL......ATG....IKD......................... [...]
+C5K8K7_9ALVE/727-977        ...............................................................................aftlerseavggfw--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..-IASAVGSVD...N...D.V.N...L....Y.A.....T.AS..S...VQ.....D..........T.......G....T...RI......LD-....IET......................... [...]
+B9Q8Q1_TOXGO/379-692        ............................................................................................l-LFVILNE..RVSLD..IYQIVKS.-C...TD..V..NFPSQCLNG.R..H.KCIDAIfrg..........dnpNPQYFANVMS.......KVNMK..........LQGV.N.....QTL.E....ADI.IK........Q......E..I....G...T...D.....K.S..T.L..................................VLAVETSFFANPTkt..........sppPTAP..IVCACTGNMD...D...D.L.G...A....F.G.....H.AV..C...VE.....S..........R.......K....H...PI......VTD....IGS......................... [...]
+Q1L1E2_TOXGO/161-474        ............................................................................................l-LFVILNE..RVSLD..IYQIVKS.-C...TD..V..NFPSQCLNG.R..H.KCIDAIfrg..........dnpNPQYFANVMS.......KVNMK..........LQGV.N.....QTL.E....ADI.IK........Q......E..I....G...T...D.....K.S..T.L..................................VLAVETSFFANPTkt..........sppPTAP..IVCACTGNMD...D...D.L.G...A....F.G.....H.AV..C...VE.....S..........R.......K....H...PI......VTD....IGS......................... [...]
+B6KA84_TOXGO/379-692        ............................................................................................l-LFVILNE..RVSLD..IYQIVKS.-C...TD..V..NFPSQCLNG.R..H.KCIDAIfrg..........dnpNPQYFANVMS.......KVNMK..........LQGV.N.....QTL.E....ADI.IK........Q......E..I....G...T...D.....K.S..T.L..................................VLAVETSFFANPTkt..........sppPTAP..IVCACTGNMD...D...D.L.G...A....F.G.....H.AV..C...VE.....S..........R.......K....H...PI......VTD....IGS......................... [...]
+Q1L2C9_TOXGO/379-692        ............................................................................................l-LFVILNE..RVSLD..IYQIVKS.-C...TD..V..NFPSQCLNG.R..H.KCIDAIfrg..........dnpNPQYFANVMS.......KVNMK..........LQGV.N.....QTL.E....ADI.IK........Q......E..I....G...T...D.....K.S..T.L..................................VLAVETSFFANPTkt..........sppPTAP..IVCACTGNMD...D...D.L.G...A....F.G.....H.AV..C...VE.....S..........R.......K....H...PI......VTD....IGS......................... [...]
+D2JRZ7_TOXGO/582-895        ............................................................................................l-LFVILNE..RVSLD..IYQIVKS.-C...TD..V..NFPSQCLNG.R..H.KCIDAIfrg..........dnpNPQYFANVMS.......KVNMK..........LQGV.N.....QTL.E....ADI.IK........Q......E..I....G...T...D.....K.S..T.L..................................VLAVETSFFANPTkt..........sppPTAP..IVCACTGNMD...D...D.L.G...A....F.G.....H.AV..C...VE.....S..........R.......K....H...PI......VTD....IGS......................... [...]
+B9PJN3_TOXGO/379-693        ............................................................................................l-LFVILNE..RVSLD..IYQIVKS.-C...TD..V..NFPSQCLNG.R..H.KCIDAIfrg.........adnpNPQYFANVMS.......KVNMK..........LQGV.N.....QTL.E....ADI.IK........Q......E..I....G...T...D.....K.S..T.L..................................VLAVETSFFANPTkt..........sppPTAP..IVCACTGNMD...D...D.L.G...A....F.G.....H.AV..C...VE.....S..........R.......K....H...PI......VTD....IGS......................... [...]
+Q1L2C8_TOXGO/379-693        ............................................................................................l-LFVILNE..RVSLD..IYQIVKS.-C...TD..V..NFPSQCLNG.R..H.KCIDAIfrg.........adnpNPQYFANVMS.......KVNMK..........LQGV.N.....QTL.E....ADI.IK........Q......E..I....G...T...D.....K.S..T.L..................................VLAVETSFFANPTkt..........sppPTAP..IVCACTGNMD...D...D.L.G...A....F.G.....H.AV..C...VE.....S..........R.......K....H...PI......VTD....IGS......................... [...]
+Q4PLA9_PICGL/597-913        ............................................................................................f-LLCILPE.rKNSDL..YGPWKRK.FL...AD..L..GVINQCIAP.P..N.MRKV--................NDQYLTNVAL.......KINAK..........VGGL.N....sVLS.V....EFA.HK........I......P..K....I...S...T.....K.P..T.I..................................IIGMDVSHGSPGH...............ADSP..SISAVVSSRE..wP...L.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IEA...lYKPlpsg..................... [...]
+A5BG74_VITVI/577-717        .............................................................................................FILCILPQ.kKNCDI..YGPWKRQ.CL...SG..C..GVPTQCIAP.S..T.PVV---................NDQYLTNLLL.......KINAK..........LGGL.N....sLLT.M....GYC.PS........L......R..L....I...S...T.....I.P..T.L..................................ILGMDVSHGSPGR...............ADVP..SIAAVVSSRH..wP...S.I.S...Q....Y.R.....A.TV..R...TQ.....S..........P.......K....L...EM......IDS....L--......................... [...]
+AGO16_ORYSJ/535-844         ............................................................................................f-LLCVLPE.rKNCDL..YGPWKKK.NL...HE..M..GIITQCIVP.S..V.--KM--................NDQYYTNVLL.......KINAK..........LGGM.N....sKLS.L....EHR.HM........I......P..I....V...N...Q.....T.P..T.L..................................ILGMDVSHGSPGR...............ADVP..SIAAVVGSRC..wP...L.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IDS...lFKPlddg..................... [...]
+B8B4Z4_ORYSI/515-824        ............................................................................................f-LLCVLPE.rKNCDL..YGPWKKK.NL...HE..M..GIITQCIVP.S..V.--KM--................NDQYYTNVLL.......KINAK..........LGGM.N....sKLS.L....EHR.HM........I......P..I....V...N...Q.....T.P..T.L..................................ILGMDVSHGSPGR...............ADVP..SIAAVVGSRC..wP...L.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IDS...lFKPlddg..................... [...]
+B9FWI9_ORYSJ/515-824        ............................................................................................f-LLCVLPE.rKNCDL..YGPWKKK.NL...HE..M..GIITQCIVP.S..V.--KM--................NDQYYTNVLL.......KINAK..........LGGM.N....sKLS.L....EHR.HM........I......P..I....V...N...Q.....T.P..T.L..................................ILGMDVSHGSPGR...............ADVP..SIAAVVGSRC..wP...L.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IDS...lFKPlddg..................... [...]
+C0P9X1_MAIZE/1-253          .....................................................................................mnsklale--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....-HR.QM........I......P..V....V...T...Q.....I.P..T.L..................................ILGMDVSHGSPGR...............ADIP..SIAAVVGSRC..wP...L.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IDS...lFKPlddg..................... [...]
+C5YU43_SORBI/1-285          ............................................................................................m--------..-----..-------.--...--..-..GIVTQCIAP.S..N.--KM--................NDQYFTNVLL.......KINAK..........LGGM.N....sKLA.L....EHR.QM........I......P..V....V...T...Q.....I.P..T.L..................................ILGMDVSHGSPGR...............ADIP..SIAAVVGSRC..wP...L.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IDS...lFKPlddg..................... [...]
+O48771_ARATH/542-860        .............................................................................................FILCILPE.rKTSDI..YGPWKKI.CL...TE..E..GIHTQCICP.I..K.I-----................SDQYLTNVLL.......KINSK..........LGGI.N....sLLG.I....EYS.YN........I......P..L....I...N...K.....I.P..T.L..................................ILGMDVSHGPPGR...............ADVP..SVAAVVGSKC..wP...L.I.S...R....Y.R.....A.AV..R...TQ.....S..........P.......R....L...EM......IDS...lFQPiente.................... [...]
+B9T7B0_RICCO/516-824        .............................................................................................FILCVLPE.rKNSDI..YGPWKKK.CL...SD..F..GIVTQCISP.F..K.I-----................NDQYLTNVLL.......KINSK..........LGGI.N....sLLE.I....EHS.KQ........I......R..L....I...M...D.....T.P..T.M..................................ILGMDVSHGARGC...............SDIP..SVAAVVGSRY..wP...L.I.S...R....Y.R.....A.CV..R...TQ.....S..........P.......K....V...EM......IDA....LFKltdd..................... [...]
+B9IAL0_POPTR/521-830        .............................................................................................FILCVLAE.rKNSDI..YGPWKKT.SL...SD..F..GIVTQCISP.T..K.I-----................NDQYLTNVLL.......KINSK..........LGGI.N....sLLA.I....EHS.SH........I......P..L....I...M...D.....T.P..T.M..................................ILGMDVSHGSPGR...............SDMP..SVAAVVGSRC..wP...L.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IDA...lYKPlang..................... [...]
+A5CB61_VITVI/15-305         ............................................................................................f-LLCVLPE.kKNSEI..YGPWKKR.SL...SD..F..GIVTQCISP.T..K.I-----................NDQYLTNVLL.......KINTK..........LGGT.N....sLLA.I....EHT.SR........I......P..L....I...K...D.....T.P..T.M..................................ILGMDVSHGSPGQ...............ADVP..SIAAVVGSRC..wP...L.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IDA...lYKPlang..................... [...]
+Q3E984_ARATH/528-708        ............................................................................................f-LLCILEK..KNSDV..YEKSCSM.WN...CE..C..IVPPQNL--.-..-.------................NDQYLTNLLL.......KINAK..........LGGL.N....sVLD.M....ELS.GT........M......P..L....V...M...R.....V.P..T.I..................................IIGMDVSHGSPGQ..............sDHIP..SIAAVVSSRE..wP...L.I.S...K....Y.R.....A.CV..R...TQ.....S..........P.......K....V...EM......IDS...lFKPvsdk..................... [...]
+Q56X15_ARATH/234-541        ............................................................................................f-LLCILAE.rKNSDV..YGPWKKK.NL...VD..L..GIVTQCIAP.T..R.L-----................NDQYLTNVLL.......KINAK..........LGGL.N....sLLA.M....ERS.TA........M......P..K....V...T...Q.....V.P..T.I..................................IVGMDVSHGSPGQ...............SDIP..SIAAVVSSRQ..wP...L.I.S...K....Y.K.....A.CV..R...TQ.....S..........R.......K....M...EM......IDN...lFKPvng...................... [...]
+Q84VQ0_ARATH/546-853        ............................................................................................f-LLCILAE.rKNSDV..YGPWKKK.NL...VD..L..GIVTQCIAP.T..R.L-----................NDQYLTNVLL.......KINAK..........LGGL.N....sLLA.M....ERS.PA........M......P..K....V...T...Q.....V.P..T.I..................................IVGMDVSHGSPGQ...............SDIP..SIAAVVSSRQ..wP...L.I.S...K....Y.K.....A.CV..R...TQ.....S..........R.......K....M...EM......IDN...lFKPvng...................... [...]
+Q84YI4_ARATH/550-857        ............................................................................................f-LLCILAE.rKNSDV..YGPWKKK.DL...VD..L..GIVTQCIAP.T..R.L-----................NDQYLTNVLL.......KINAK..........LGGL.N....sLLA.M....ERS.PA........M......P..K....V...T...Q.....V.P..T.I..................................IVGMDVSHGSPGQ...............SDIP..SIAAVVSSRQ..wP...L.I.S...K....Y.K.....A.CV..R...TQ.....S..........R.......K....M...EM......IDN...lFKPvng...................... [...]
+Q9ZVD5_ARATH/577-885        .............................................................................................FILCVLPD.kKNSDL..YGPWKKK.NL...TE..F..GIVTQCMAP.T..R.QPND--................--QYLTNLLL.......KINAK..........LGGL.N....sMLS.V....ERT.PA........F......T..V....I...S...K.....V.P..T.I..................................ILGMDVSHGSPGQ...............SDVP..SIAAVVSSRE..wP...L.I.S...K....Y.R.....A.SV..R...TQ.....P..........S.......K....A...EM......IES...lVKKngt...................... [...]
+AGO4A_ORYSJ/557-865         ............................................................................................f-LLCVLAE.rKNSDI..YGPWKRK.CL...AE..F..GIITQCVAP.T..R.V-----................NDQYITNVLL.......KINAK..........LGGL.N....sLLQ.I....ETS.PS........I......P..L....V...S...K.....V.P..T.I..................................ILGMDVSHGSPGQ...............SDIP..SIAAVVSSRE..wP...L.V.S...K....Y.R.....A.SV..R...SQ.....S..........P.......K....L...EM......IDG...lFKPqgaq..................... [...]
+B8ACN1_ORYSI/524-832        ............................................................................................f-LLCVLAE.rKNSDI..YGPWKRK.CL...AE..F..GIITQCVAP.T..R.V-----................NDQYITNVLL.......KINAK..........LGGL.N....sLLQ.I....ETS.PS........I......P..L....V...S...K.....V.P..T.I..................................ILGMDVSHGSPGQ...............SDIP..SIAAVVSSRE..wP...L.V.S...K....Y.R.....A.SV..R...SQ.....S..........P.......K....L...EM......IDG...lFKPqgaq..................... [...]
+A2ZRR6_ORYSJ/650-958        ............................................................................................f-LLCVLAE.rKNSDI..YGPWKRK.CL...AE..F..GIITQCVAP.T..R.V-----................NDQYITNVLL.......KINAK..........LGGL.N....sLLQ.I....ETS.PS........I......P..L....V...S...K.....V.P..T.I..................................ILGMDVSHGSPGQ...............SDIP..SIAAVVSSRE..wP...L.V.S...K....Y.R.....A.SV..R...SQ.....S..........P.......K....L...EM......IDG...lFKPqgaq..................... [...]
+C0HGZ0_MAIZE/552-859        ............................................................................................f-LLCVLAE.rKNSDI..YGPWKKK.CL...AE..F..GIVTQCVAP.T..R.V-----................NDQYLTNVLL.......KINAK..........LGGL.N....sLLQ.I....ETS.PA........I......P..L....V...S...K.....V.P..T.I..................................ILGMDVSHGSPGH...............SDIP..SVAAVVSSRE..wP...L.I.S...K....Y.R.....A.SV..R...TQ.....S..........P.......K....M...EM......IDS...lFKPret...................... [...]
+B4FL08_MAIZE/45-352         ............................................................................................f-LLCVLAE.rKNSDI..YGPWKKK.CL...AE..F..GIVTQCVAP.T..R.V-----................NDQYLTNVLL.......KINAK..........LGGM.N....sLLQ.I....ETS.PA........I......P..L....V...S...K.....V.P..T.I..................................ILGMDVSHGSPGH...............SDVP..SIAAVVSSRE..wP...L.I.S...K....Y.R.....A.SV..R...TQ.....S..........P.......K....M...EM......IDS...lFKPrea...................... [...]
+C5YX36_SORBI/564-870        ............................................................................................f-LMCLLPE.rKNCEV..YGPWKRK.CL...AE..F..GIVTQCLAP.T..R.VN----................-DPYLLNLLM.......KINAK..........LGGL.N....sLLQ.V....EAS.PS........I......P..H....V...S...E.....V.P..T.I..................................ILGMDVSHGHPGQ...............-DRP..SVAAVVSSRQ..wP...L.I.S...K....Y.R.....A.SV..H...TQ.....S..........A.......R....L...EM......MSS...lFKPrgt...................... [...]
+B8AUX7_ORYSI/565-872        ............................................................................................f-LLCLLPE.rKNCEV..YGPWKRK.CL...AE..F..GIVTQCLAP.Q..R.V-----................NDQYLLNLLL.......KINAK..........LGGI.N....sLLQ.I....EAS.PS........I......P..L....V...S...K.....T.P..T.I..................................ILGMDVSHGQPGQ...............SDRP..SIAAVVSSRQ..wP...L.I.S...K....Y.R.....A.SV..H...TQ.....S..........P.......K....L...EM......MSS...lFKPrgt...................... [...]
+AGO4B_ORYSJ/565-872         ............................................................................................f-LLCLLPE.rKNCEV..YGPWKRK.CL...AE..F..GIVTQCLAP.Q..R.V-----................NDQYLLNLLL.......KINAK..........LGGI.N....sLLQ.I....EAS.PS........I......P..L....V...S...K.....T.P..T.I..................................ILGMDVSHGQPGQ...............SDRP..SIAAVVSSRQ..wP...L.I.S...K....Y.R.....A.SV..H...TQ.....S..........P.......K....L...EM......MSS...lFKPrgt...................... [...]
+Q01MP5_ORYSA/565-872        ............................................................................................f-LLCLLPE.rKNCEV..YGPWKRK.CL...AE..F..GIVTQCLAP.Q..R.V-----................NDQYLLNLLL.......KINAK..........LGGI.N....sLLQ.I....EAS.PS........I......P..L....V...S...K.....T.P..T.I..................................ILGMDVSHGQPGQ...............SDRP..SIAAVVSSRQ..wP...L.I.S...K....Y.R.....A.SV..H...TQ.....S..........P.......K....L...EM......MSS...lFKPrgt...................... [...]
+B9EV67_ORYSJ/22-172         .........................................................................cgisiaqeftqvaarvlpap--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+B8ACN0_ORYSI/540-670        .....................................................................................aceflane--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+AGO15_ORYSJ/546-853         ............................................................................................f-VLCVLPE.rKNCDI..YGPWKRM.CL...VK..Y..GIVTQCLAP.T..K.I-----................NDQYLTNVLL.......KINAK..........LGGL.N....sLLQ.I....ERN.QA........I......P..L....L...S...K.....T.P..T.I..................................ILGMDVSHGSPGR...............DDVP..SVAAVVSSLE..wP...L.I.S...K....Y.K.....A.SV..C...TQ.....S..........P.......R....L...EM......IDS....LFKlvgn..................... [...]
+B9HK80_POPTR/565-884        ............................................................................................f-LLCILPE.rKNSDI..YGPWKRK.NL...SD..L..GIVTQCIAP.T..K.V-----................NDQYLTNVLL.......KINAKvefcnvipfeLGGM.N....sLLS.I....EHA.PS........I......P..L....V...S...K.....L.P..T.L..................................ILGMDVSHGSPGH...............SDVP..SIAAVVSSRH..wP...L.I.S...R....Y.R.....A.SV..R...TQ.....S..........Q.......K....V...EM......IAN...lFKPvagt..................... [...]
+B9SP45_RICCO/574-882        ............................................................................................f-LLCLLPE.rKNSDL..YGPWKKK.NL...SD..F..GIVTQCIAP.Q..R.V-----................NDQYLTNVLL.......KINAK..........LGGL.N....sMLA.V....EHS.PS........I......P..L....V...S...K.....V.P..T.I..................................IIGMDVSHGSPGH...............SDVP..SIAAVVSSRQ..wP...L.I.S...R....Y.R.....A.CV..R...TQ.....S..........P.......K....V...EM......IDS...lYKPvsdt..................... [...]
+Q2LFC1_NICBE/558-866        ............................................................................................f-LLCLLPE.rKNCDI..YGPWKRK.NL...AE..F..GIVTQCIAP.T..R.V-----................NDQYITNVLL.......KINAK..........LGGL.N....sMLT.V....EHA.PA........I......P..M....V...S...K.....V.P..T.I..................................ILGMDVSHGSPGQ...............SDVP..SIAAVVSSRQ..wP...S.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IDN...lFKRasdt..................... [...]
+Q2LFC2_NICBE/565-873        ............................................................................................f-LLCLLPE.rKNCDI..YGPWKRK.NL...AD..Y..GIVTQCLAP.G..R.V-----................NDQYLTNLLL.......KINAK..........LGGL.N....sVLA.I....EHS.PS........I......P..M....V...S...K.....V.P..T.M..................................ILGMDVSHGSPGQ...............SDVP..SIAAVVSSRQ..wP...S.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IDN...lFKKvsdt..................... [...]
+A5AMR1_VITVI/53-183         .......................................................................................lptllh--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+B9SN14_RICCO/570-878        ............................................................................................f-LLSIFPD.rKNSDI..YGPWKRK.NL...AE..F..GIFNQCLCS.P..N.RL----................SEMYVTNVLM.......KINAK..........LGGL.N....tFLA.V....EQS.RN........V......P..F....V...S...K.....V.P..T.I..................................IFGMDVSHGSPGQ...............SDVP..SIAAVVSSRN..wP...L.L.S...R....Y.R.....A.SV..H...SQ.....S..........P.......K....V...EM......IDS...lFKPegk...................... [...]
+B9HDH5_POPTR/582-891        ............................................................................................f-LVCLLPD.rKNSDI..YGPWKRK.NL...AE..Y..GIFNQCLAP.T..R.V-----................NEQYILNVLL.......KINAK..........LGGL.N....sLLA.M....EQS.RN........I......P..F....V...S...K.....V.P..T.I..................................IFGMDVSHGSPGQ...............SDMP..SIAAVVSSRN..wP...L.L.S...R....Y.R.....A.SV..R...SQ.....S..........P.......K....V...EM......VDS....LFTltpdk.................... [...]
+B9IHG7_POPTR/573-882        ............................................................................................f-LVCLLPD.rKNSDI..YGPWKRK.NL...AE..Y..GIFNQCLAP.T..R.V-----................NDQYILNVLL.......KINAK..........LGGL.N....sLLA.M....EQS.RN........I......P..F....V...S...K.....V.P..T.I..................................IFGMDVSHGSPGQ...............SDIP..SIAAVVSSRN..wP...L.L.S...R....Y.R.....A.SV..R...SQ.....S..........P.......K....V...EM......VDS....LFKltadk.................... [...]
+A9SKW0_PHYPA/518-721        ............................................................................................f-ILVALPTdsSSSNL..YVAFKRY.FE...MR..I..GVISQCMIK.P..R.QF----................NPQYLWNLVL.......KINQK..........MEGF.N....sPLT.S....KIT.S-........-......-..C....L...G...G.....A.P..T.I..................................IFGIDVSHGSIGE...............-NFP..SVAAVVATKN..wP...D.V.F...H....F.A.....T.RA..G...TQ.....Q..........S.......K....L...KL......IEG....LWEpksamvn.................. [...]
+A9RNH7_PHYPA/593-893        .............................................................................................FILVILPD..KDSPI..YVPFKRF.CE...MK..I..GVVSQCMVK.P..R.QLND--................--QYLGNLAL.......KINLK..........MGGF.N....sPLS.P....R--.--........M......V..S....C...L...G.....P.S..T.I..................................IFGMDVSHGSPGE...............SSVP..SIAAVVATKN..wP...D.V.F...H....Y.S.....T.QV..R...IQ.....P..........A.......K....T...EM......IEG....LHDsk....................... [...]
+A9SRY5_PHYPA/573-879        .............................................................................................FILAILAE..KDSPI..YVPFKRL.CE...IR..L..GIISQCMVK.P..R.TLND--................--QFLGNLAL.......KINLK..........MGGL.N.....SPL.S....QRM.L-........-......-..H....C...L...G.....Q.S..T.I..................................IFGMDVTHGSPGD...............VEIP..SIAAVVATKN..wP...E.V.F...H....Y.S.....T.QV..K...VQ.....P..........A.......R....M...EM......IQG....LYEpe....................... [...]
+A9U2A5_PHYPA/597-903        .............................................................................................FILVILSD..KDSPI..YAPFKRF.CE...MK..I..GIISQCMVK.P..R.QI----................NDQYLGNLAL.......KINLK..........MGGF.N.....SPL.S....R--.-R........M......L..T....C...L...G.....E.S..T.I..................................IFGMDVSHGSPGD...............LSVP..SIAAVVATKN..wP...E.V.F...H....Y.S.....T.QV..R...TQ.....P..........P.......K....M...EM......ITG....LYEpk....................... [...]
+A9SKW0_PHYPA/722-774        .........................................................................................ttts--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+A9TD99_PHYPA/2-180          ................................................................................emieglhiegkgg--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+A8JAG8_CHLRE/672-990        ............................................................................................l-VLVVLPE..KTADE..YREVKRV.SD...IE..L..GIPSQVVVA.S..K.ARVGYRah...........kggGPQYCANVAM.......KINNK..........LGGV.N.....VQL.S....GGL.RN........M......P..V....L...GgagA.....V.P..F.M..................................VLGADVTHPTGAAar...........adSRDP..SVAAVVASLD...A...S.L.G...R....W.A.....S.RV..L...LQ.....A..........G.......R....Q...EV......ITG....MCG......................... [...]
+A8J9T3_CHLRE/1058-1164      .......................................................................................fmvlga--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+A8J0N0_CHLRE/619-933        .............................................................................................MVMVVLPD.rGGVGL..YDAIKAA.GD...GK..L..GVATQCVNP.A..K.AGLVGPkas..........sgpSFSYAAQLAL.......SVNAK..........LGGA.-.....TTR.P....AGR.PNd......wL......P..L....L...G...G.....R.R..L.Mvggrgpg....................rlearlgLSGALLSRGYRGAa............qvSAGV..EYAAVVGSAD...S...H.A.V...D....Y.R.....V.QL..S...AQ.....V..........A.......G....N...R-......---....---......................... [...]
+A8J0M9_CHLRE/675-993        .............................................................................................MVMVVLPD.rGGVGL..YDAIKAA.GD...GK..L..GVATQCVNP.A..K.AGLVGPkas..........sgpSFSYAAQLAL.......SVNAK..........LGGA.-.....TTR.P....AGR.P-........-......-..-....-...-...-.....N.G..E.L..................................ALALPRTRRTRVQ..............vSAGV..EYAAVVGSAD...S...H.A.V...D....Y.R.....V.QL..S...AQ.....V..........A.......G....N..rDI......VVS....MRE......................... [...]
+D0MT95_PHYIN/497-796        ............................................................................................f-LLVILPA..KNSPV..YGDVKRM.SD...TV..L..GLPSQCIAS.Q..N.LPRA--................NPQFCANVCL.......KINMK..........LNGK.N.....AVL.R....D--.-P........L......P..L....I...S...S.....E.P..T.I..................................IIGADVEHPRSGM...............GGRP..SIAAVVASMD...R...Y.S.A...Q....Y.A.....A.RV..A...AQ.....K..........A.......S....S...D-......IQQ....LPN......................... [...]
+D0MT54_PHYIN/891-1191       ............................................................................................q-LIMVIKQ.dKSVGS..YSDIKRM.SD...TV..L..GIPSQCIVS.Q..N.VRSA--................KPQYCANVCL.......KINMK..........LSGK.N.....SIL.R....E--.-P........L......P..L....V...S...T.....A.P..T.I..................................IIGADVEHPRSGM...............GSRP..SIASVVASLD...R...Y.S.A...K....Y.V.....A.RV..A...AQ.....K..........A.......S....S...DI......-QL....LPH......................... [...]
+D0MT94_PHYIN/524-824        ............................................................................................q-LILVIKQ.dKGSVS..YGRIKRM.SD...TV..L..GIPSQCIVA.T..N.LRKA--................NPQVCANVCL.......KMNMK..........LSGK.N.....SVL.R....E--.-P........L......P..L....I...S...T.....C.P..T.I..................................VIGADVEHPRSGM...............GSRP..SIASVVASMD...A...Y.S.A...K....Y.I.....G.RV..A...AQ.....K..........A.......A....N...D-......IQQ....LPH......................... [...]
+Q8H714_PHYIN/1-173          .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+D0N1C0_PHYIN/587-890        ....................................................................................qiiwminvr--------..MDAHA..YGELKLM.SD...SEagV..GILSQCMLS.K..H.IPKC--................NPQYIANILM.......KVNTK..........LGGR.N.....GVI.S....---.GQ........L......P..L....V...S...A.....S.R..T.I..................................IFGADVTHPSPMD...............RSRP..SIAAVTASMD...A...N.F.I...R....H.A.....S.AI..R...AQ.....G..........H.......R....V...EQ......IMN....LKD......................... [...]
+D0N1B9_PHYIN/587-890        .....................................................................................qiiwminp-------R..MDAHA..YGELKLM.SD...SEagV..GILSQCMLS.K..H.IPKC--................NPQYIANILM.......KVNTK..........LGGR.N.....GVI.S....---.GQ........L......P..L....V...S...A.....S.R..T.I..................................IFGADVTHPSPMD...............RSRP..SIAAVTASMD...A...N.F.I...R....H.A.....S.AI..R...AQ.....G..........H.......R....V...EQ......IMN....LKD......................... [...]
+AGO1_ARATH/676-997          ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TE..L..GIVSQCCLT.K..H.VFKM--................SKQYMANVAL.......KINVK..........VGGR.N....tVLV.D....ALS.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.I.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lFKEwkdpqk................... [...]
+Q3ECU7_ARATH/678-999        ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TE..L..GIVSQCCLT.K..H.VFKM--................SKQYMANVAL.......KINVK..........VGGR.N....tVLV.D....ALS.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.I.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lFKEwkdpqk................... [...]
+A9T6J3_PHYPA/524-842        ............................................................................................l-LIAILPD..NNGSL..YGDLKKQ.CE...TV..L..GVVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALS.RR........I......P..L....V...S...D.....K.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....T..........H.......R....Q...EL......IAD...lFKEytdpmk................... [...]
+A9RG03_PHYPA/598-919        ............................................................................................l-LIAILPD..NNGPL..YGDLKKQ.CE...TV..L..GVVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALS.RK........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPHPGE...............DFSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKEwkdpqk................... [...]
+A9RTW5_PHYPA/744-1065       ............................................................................................l-LIAILPD..NNGPL..YGDLKKQ.CE...TV..L..GVVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RK........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKEwrdpqk................... [...]
+PINH_ARATH/625-946          ............................................................................................l-LLAILPD..NNGSL..YGDLKRI.CE...TE..L..GLISQCCLT.K..H.VFKI--................SKQYLANVSL.......KINVK..........MGGR.N....tVLV.D....AIS.CR........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPENGE...............ESSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwqdpvr................... [...]
+B0FHH7_BRANA/614-935        ............................................................................................l-LLAILPD..NNGSL..YGDLKRI.CE...TE..L..GLISQCCLT.K..H.VFKI--................SKQYLANVSL.......KINVK..........MGGR.N....tVLL.D....AIS.CR........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPENGE...............ESSP..SIGAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwqdpvr................... [...]
+B9RTJ1_RICCO/626-947        ............................................................................................l-LLAILPD..NNGTL..YGDLKRI.CE...TD..L..GLISQCCLT.K..H.VFKI--................SKQYLANVSL.......KINVK..........MGGR.N....tVLL.D....AIS.CR........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPENGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwqdpvr................... [...]
+B9HKB5_POPTR/631-952        ............................................................................................l-LLAILPD..NNGSL..YGDLKRI.CE...TD..L..GLITQCCLS.K..H.VFKI--................SKQYLANLSL.......KINVK..........MGGR.N....tVLL.D....AIS.CR........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPENGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwqdpvr................... [...]
+B9HUQ6_POPTR/452-776        ............................................................................................l-LLAILPD..NNGSL..YGDLKRI.CE...TD..L..GLLTQCCLS.K..H.VFKI--................SKQYLANVSL.......KINVK..........MGGR.N....tVLL.D....AIS.CR........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPENGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwqdpvr................... [...]
+PNH1_ORYSJ/620-941          ............................................................................................l-LLAILPD..NNGSL..YGDIKRI.CE...TD..L..GLISQCCLT.K..H.VFKI--................SKQYLANVSL.......KINVK..........MGGR.N....tVLL.D....AIS.WR........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPETGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwhdpqr................... [...]
+B9FU05_ORYSJ/458-779        ............................................................................................l-LLAILPD..NNGSL..YGDIKRI.CE...TD..L..GLISQCCLT.K..H.VFKI--................SKQYLANVSL.......KINVK..........MGGR.N....tVLL.D....AIS.WR........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPETGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwhdpqr................... [...]
+C0PNQ0_MAIZE/1-267          .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........MGGR.N....tVLL.D....AIS.WS........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPETGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....H.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwhdpqr................... [...]
+C5Z5J6_SORBI/617-938        ............................................................................................l-LLAILPD..NNGPL..YGDIKRI.CE...TD..L..GLITQCCLT.K..H.VFKI--................SKQYLANVSL.......KINVK..........MGGR.N....tVLL.D....AIS.WR........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPETGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwhdpqr................... [...]
+B9STN2_RICCO/586-907        ............................................................................................l-LIAILPD..SNGSL..YGDLKRI.CE...TD..L..GLISQCCLT.K..H.VFKI--................NRQYLANVSL.......KINVK..........MGGR.N....tVLL.D....AIS.WR........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPESGE...............DISP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....P..........H.......R....Q...EL......IQD...lFKTwqdpqq................... [...]
+A5ARQ9_VITVI/592-892        ............................................................................................l-LIAILPD..NNGSL..YGDLKRI.CD...TD..L..GLISQCCLT.K..N.VYKI--................SNQYLANVSL.......KINVK..........MGGR.N....tVLL.D....ALS.SG........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPETGD...............DSCP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD....---......................... [...]
+A1E5M2_PEA/696-1017         ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TD..L..GVVSQCCLT.K..H.VFKM--................NKQYLANVSL.......KINVK..........VGGR.N....tVLV.D....ALS.RR........I......P..I....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.I.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lFKQwqdpvr................... [...]
+Q2PEW1_TRIPR/1-247          ............................................................................................d--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lFKQwqdpar................... [...]
+A1E5M3_PEA/726-1047         ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TD..L..GVVSQCCLT.K..H.VFKM--................SKQYLANVSL.......KINVK..........VGGR.N....tVLV.D....ALS.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.I.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lFKQwqdpvr................... [...]
+Q2LFC4_NICBE/678-999        ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TE..L..GIVSQCCLT.K..H.VFKM--................SKQYLANVSL.......KINVK..........VGGR.N....tVLV.D....ALS.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.I.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lYKTwqdpvr................... [...]
+B9SJV6_RICCO/687-1008       ............................................................................................l-LIVILPD..NNGSL..YGELKRI.CE...TD..L..GLVSQCCLT.K..H.VFRM--................NKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALS.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lFKEwqdpvr................... [...]
+B9I4Y6_POPTR/688-1009       ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....AIS.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwqdpvr................... [...]
+B9N365_POPTR/308-629        ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALS.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwqdpvr................... [...]
+B8B2X0_ORYSI/647-968        ...........................................................................................ll--IGLLPD..NNGSL..YGDLKRI.CE...ID..L..GLVSQCCCT.K..Q.VFKM--................NKQILANLAL.......KINVK..........VGGR.N....tVLV.D....AVS.RR........I......P..L....V...T...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....S..........H.......R....Q...EL......IDD....LYNithdph................... [...]
+AGO1D_ORYSJ/669-990         ...........................................................................................ll--IGLLPD..NNGSL..YGDLKRI.CE...ID..L..GLVSQCCCT.K..Q.VFKM--................NKQILANLAL.......KINVK..........VGGR.N....tVLV.D....AVS.RR........I......P..L....V...T...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....S..........H.......R....Q...EL......IDD....LYNithdph................... [...]
+B9FR04_ORYSJ/644-965        ...........................................................................................ll--IGLLPD..NNGSL..YGDLKRI.CE...ID..L..GLVSQCCCT.K..Q.VFKM--................NKQILANLAL.......KINVK..........VGGR.N....tVLV.D....AVS.RR........I......P..L....V...T...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....S..........H.......R....Q...EL......IDD....LYNithdph................... [...]
+C5Z2L1_SORBI/643-964        ............................................................................................l-LIGILPD..NNGSL..YGDLKRI.CE...ID..L..GLVSQCCCA.K..Q.VFKM--................NKQILANLAL.......KINVK..........VGGR.N....tVLA.D....AVS.RR........I......P..L....V...T...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....S..........H.......R....Q...EL......IED....LYKvvhdpq................... [...]
+C5XWS2_SORBI/656-978        ............................................................................................l-LIGILPD..NNGSL..YGDLKRV.CE...ID..L..GIVSQCCCT.K..Q.VFKMNN................-KQILANLAL.......KINVK..........VGGR.N....tVLV.D....AVS.RG........I......P..L....V...T...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IED....LYKvwqdpq................... [...]
+B8AFI6_ORYSI/637-958        ............................................................................................l-LIGILPD..NNGSL..YGDLKRV.CE...ID..L..GIVSQCCCT.K..Q.VFKM--................NKQILANLAL.......KINVK..........VGGR.N....tVLV.D....AVS.RR........I......P..L....V...T...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IED....LYKiwqdpq................... [...]
+AGO1C_ORYSJ/638-959         ............................................................................................l-LIGILPD..NNGSL..YGDLKRV.CE...ID..L..GIVSQCCCT.K..Q.VFKM--................NKQILANLAL.......KINVK..........VGGR.N....tVLV.D....AVS.RR........I......P..L....V...T...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IED....LYKiwqdpq................... [...]
+Q2LFC3_NICBE/604-925        ............................................................................................l-LVVILPD..NNGSL..YGDLKRI.CE...TE..L..GVVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....AIS.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.I.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD....LYTtrqdpv................... [...]
+B1B5A8_DAUCA/736-1057       ............................................................................................l-LIAILPD..NNGSL..YGDLKRI.CE...TD..L..GVISQCCLA.K..H.VFRM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALS.WR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.S.....G.LV..C...AQ.....A..........H.......R....Q...EI......IQD....LYTtwqdpn................... [...]
+C5YY05_SORBI/736-1058       ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKANK................-QQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....V.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....T..........H.......R....Q...EL......IQD...lFKVyqdpqr................... [...]
+B4FGY3_MAIZE/13-335         ............................................................................................l-LIVILPD..NNGSL..YGDVKRI.CE...TN..L..GLVSQCCLT.K..H.VFKVNK................-QQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALA.RR........I......P..L....V...S...D.....I.A..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwqdper................... [...]
+B8AGF0_ORYSI/693-1014       ............................................................................................l-LIAILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwkdpqr................... [...]
+B9F1L3_ORYSJ/693-1014       ............................................................................................l-LIAILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwkdpqr................... [...]
+AGO1A_ORYSJ/709-1030        ............................................................................................l-LIAILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwkdpqr................... [...]
+C5YE15_SORBI/712-1033       ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwqdpqr................... [...]
+C0HEU9_MAIZE/87-408         ............................................................................................l-LIVILPD..INGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwqdpqr................... [...]
+B9FC11_ORYSJ/374-695        ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwqdphr................... [...]
+AGO1B_ORYSJ/746-1067        ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwqdphr................... [...]
+B8AT34_ORYSI/729-1050       ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwqdphr................... [...]
+C7J0V9_ORYSJ/1-271          .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-INVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwqdphr................... [...]
+AGO17_ORYSJ/514-834         ............................................................................................l-LIVILPN..NNGSL..YGDVKRI.CE...TD..I..GLISQCCLA.K..H.VLKM--................NKWYLASVAL.......KINAK..........MGGR.N....tVLV.D....ALE.MR........L......P..H....V...R...D.....T.P..T.I..................................VFGAHVTHPHPGK...............ANSS..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LI..S...VQ.....A..........C.......H....Q...ES......IQG...lFKVqddper................... [...]
+B8AII3_ORYSI/514-834        ............................................................................................l-LIVILPN..NNGSL..YGDVKRI.CE...TD..I..GLISQCCLA.K..H.VLKM--................NKWYLASVAL.......KINAK..........MGGR.N....tVLV.D....ALE.MR........L......P..H....V...R...D.....T.P..T.I..................................VFGAHVTHPHPGK...............ANSS..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LI..S...VQ.....A..........C.......H....Q...ES......IQG...lFKVqddper................... [...]
+C5WPM0_SORBI/900-1216       ............................................................................................l-LIIILPD..-MSGF..YGRIKRL.CE...TE..L..GLITQCCAP.K..N.VRKG--................GNQYLENLSL.......KINVK..........VGGR.N....tVLD.D....ALN.RR........I......P..L....L...T...D.....C.P..T.I..................................VFGADVTHPSPGE...............SSSP..SIAAVVASMD..wP...Q.V.T...K....Y.K.....C.LV..S...SQ.....G..........H.......R....V...EI......ING...lYTEvrdpqk................... [...]
+AGO12_ORYSJ/693-1012        ...........................................................................................ql-LIVILTE..-ISGS..YGRIKRI.CE...TE..V..GVITQCCAP.K..S.LQKG--................GKQYLENLAL.......KMNVK..........VGGR.N....tVLE.D....ALH.KK........I......P..I....L...T...D.....R.P..T.I..................................VFGADVTHPSPGE...............DASP..SIAAVVASMD..wP...E.V.T...K....Y.K.....C.LV..S...TQ.....S..........H.......R....E...EI......ISN...lYTEvkdplk................... [...]
+B9FAL8_ORYSJ/438-757        ...........................................................................................ql-LIVILTE..-ISGS..YGRIKRI.CE...TE..V..GVITQCCAP.K..S.LQKG--................GKQYLENLAL.......KMNVK..........VGGR.N....tVLE.D....ALH.KK........I......P..I....L...T...D.....R.P..T.I..................................VFGADVTHPSPGE...............DASP..SIAAVVASMD..wP...E.V.T...K....Y.K.....C.LV..S...TQ.....S..........H.......R....E...EI......ISN...lYTEvkdplk................... [...]
+A2XKQ7_ORYSI/654-972        ............................................................................................l-LIVILPE..-ISGS..YGRIKRI.CE...TE..V..GVITQCCAP.K..S.LQKG--................GKQYLENLAL.......KMNVK..........VGGR.N....tVLE.D....ALH.KK........I......P..I....L...T...D.....R.P..T.I..................................VFGADVTHPSPGE...............DASP..SIAAVVASMD..wP...E.V.T...K....Y.K.....C.LV..S...TQ.....S..........H.......R....E...EI......ISN...lYTEvkdplk................... [...]
+C5WPM1_SORBI/697-1047       ............................................................................................l-LIVVLPD.aNASFF..YGRIKRL.CE...TE..L..GIITQCCIP.K..N.VHKG--................GRQYLQNLAL.......KINVK..........VGGR.N....tVLE.D....ALN.RR........I......H..L....L...T...D.....L.P..T.I..................................IFGADVTHPAPGE...............DASP..SIAAVVASMD..wP...E.V.S...K....Y.R.....C.LV..S...SQ.....G..........H.......R....E...EI......IAD...lFTQvkdpqkgllhggmirhaeh...... [...]
+C0PMV6_MAIZE/89-412         ............................................................................................l-LIVVLPD.aNASVF..YGRIKRL.CE...TE..L..GLVTQCCQP.K..N.VFKG--................GRQYLQNLAL.......KINVK..........VGGR.N....tVLE.D....ALN.RR........I......H..L....L...T...D.....L.P..T.I..................................IFGADVTHPAPGE...............DASP..SIAAVVASMD..wP...Q.V.A...K....Y.R.....C.LV..S...SQ.....G..........H.......R....E...EI......ITD...lFTQvkdpqk................... [...]
+B8APJ4_ORYSI/9-101          ..................................................................................ykcsvssqshr--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+B9FEW4_ORYSJ/531-767        .............................................................................anatvfygrikrlcet--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....E...L...D.....M.P..T.M..................................IFGADVTHPPAGE...............DSSP..SIAAVVASMD..wP...E.V.S...K....Y.K.....C.SV..S...SQ.....S..........H.......R....E...EI......IAD...lFTEvkdsqn................... [...]
+AGO11_ORYSJ/541-848         ............................................................................................l-LVIVLPD..ANATV.fYGRIKRL.CE...TE..L..GVITQCCLA.R..N.VQNV--................----------.......-----..........-GGR.N....tVLE.D....ALH.RR........I......P..L....L...T...D.....M.P..T.M..................................IFGADVTHPPAGE...............DSSP..SIAAVVASMD..wP...E.V.S...K....Y.K.....C.SV..S...SQ.....S..........H.......R....E...EI......IAD...lFTEvkdsqn................... [...]
+B9MTL4_POPTR/505-810        ...........................................................................................qi-LIIILPD..-VSGS..YGTIKRV.CE...TE..L..GIVSQCCQP.K..Q.ARKC--................SPQYLENVAL.......KINVK..........AGGR.N....tVLE.D....ALN.RR........I......P..L....L...S...D.....T.P..T.I..................................IFGADVTHPQPGE...............DSSP..SIAAIVASMD..wP...E.V.T...T....Y.R.....G.LV..S...AQ.....K..........H.......R....Q...EI......IQD....CAG......................... [...]
+B9SCN8_RICCO/632-949        ............................................................................................l-LIIILPD..-ISGS..YGIIKRV.CE...TE..L..GIVSQCCQP.R..Q.AAKL--................SKQYFENVAL.......KINVK..........VGGR.N....tVLN.D....AVQ.RR........I......P..L....V...T...D.....C.P..T.I..................................IFGADVTHPPPGE...............DSSP..SIAAVVASMD..wP...E.V.T...K....Y.R.....G.IV..S...AQ.....A..........H.......R....E...EI......IQD...lYKSfqdpqg................... [...]
+AGOL_ARATH/638-958          ............................................................................................l-LIVILPD..-VTGS..YGKIKRI.CE...TE..L..GIVSQCCQP.R..Q.VNKL--................NKQYMENVAL.......KINVK..........TGGR.N....tVLN.D....AIR.RN........I......P..L....I...T...D.....R.P..T.I..................................IMGADVTHPQPGE...............DSSP..SIAAVVASMD..wP...E.I.N...K....Y.R.....G.LV..S...AQ.....A..........H.......R....E...EI......IQD....LYKlvqdpq................... [...]
+B9HQS2_POPTR/635-955        ............................................................................................l-LIIILPD..-VTGS..YGKIKRV.CE...TE..L..GIVSQCCQP.Q..Q.AKKL--................SKQYMENVAL.......KINVK..........AGGR.N....tVLN.D....AFH.RR........I......P..L....L...T...D.....V.P..T.I..................................VFGADVTHPQAGE...............DAGP..SIAAVVASMD..wP...E.V.T...K....Y.R.....G.LV..S...AQ.....A..........H.......R....E...EI......IED...lYKKyqdpkk................... [...]
+B9GEQ1_POPTR/548-869        ...........................................................................................ql-LIIILPD..-FSGS..YGKIKRI.CE...TE..L..GIVSQCCQP.Q..Q.AKKL--................SKQYLENVAL.......KINVK..........AGGR.N....tVLN.D....AIQ.RR........I......P..N....V...T...D.....L.P..T.I..................................IFGADVTHPQPGE...............DSSP..SIAAVVASMD..wP...E.V.T...K....Y.R.....G.LV..S...AQ.....A..........H.......R....E...EI......IQD...lYKKyqdpqk................... [...]
+B8ALC4_ORYSI/596-877        ................................................................................yvfsprnmtilch--------..-----..-------.--...--..-..---------.-..-.------................----------.......---NQ..........VGGR.Nt...vLER.A....FIR.NG........I......P..F....V...S...E.....V.P..T.I..................................IFGADVTHSPPGE...............DSAS..SIAAVVASMD..wP...E.I.T...K....Y.R.....G.LV..S...AQ.....S..........H.......R....Q...EI......IED....LFSvgkdpv................... [...]
+AGO13_ORYSJ/471-770         ..........................................................................................qll--IVILLE..-VSGS..YGKIKRV.CE...ND..L..GIVSQCCLP.R..H.ASRP--................NKQYLENVAL.......KINVK..........KSQQ.-.....---.S....S--.L-........-......-..-....-...-...-.....-.-..-.-..................................---VLMSHTPPGE...............DSAS..SIAAVVASMD..wP...E.I.T...K....Y.R.....G.LV..S...AQ.....S..........H.......R....Q...EI......IED....LFSvgkdpv................... [...]
+B9F6E0_ORYSJ/564-783        .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----VVASMD..wP...E.I.T...K....Y.R.....G.LV..S...AQ.....S..........H.......R....Q...EI......IED....LFSvgkdpv................... [...]
+MEL1_ORYSJ/696-1016         ............................................................................................l-LIVILPE..-VSGS..YGKIKRV.CE...TD..L..GIVSQCCLP.R..H.ASRP--................NKQYLENVAL.......KINVK..........VGGR.Nt...vLER.A....FIR.NG........I......P..F....V...S...E.....V.P..T.I..................................IFGADVTHPPPGE...............DSAS..SIAAVVASMD..wP...E.I.T...K....Y.R.....G.LV..S...AQ.....P..........H.......R....Q...EI......IED....LFSvgkdpv................... [...]
+B8ALC8_ORYSI/696-1016       ............................................................................................l-LIVILPE..-VSGS..YGKIKRV.CE...TD..L..GIVSQCCLP.R..H.ASRP--................NKQYLENVAL.......KINVK..........VGGR.Nt...vLER.A....FIR.NG........I......P..F....V...S...E.....V.P..T.I..................................IFGADVTHPPPGE...............DSAS..SIAAVVASMD..wP...E.I.T...K....Y.R.....G.LV..S...AQ.....P..........H.......R....Q...EI......IED....LFSvgkdpv................... [...]
+A3ANP6_ORYSJ/644-982        ............................................................................................l-LIVILPE..-VSGS..YGKIKRV.CE...TD..L..GIVSQCCLP.R..H.ASRP--................NKQYLENVAL.......KINVK..........VGGR.Nt...vLER.A....FIR.NG........I......P..F....V...S...E.....V.P..T.I..................................IFGADVTHPPPGE...............DSAS..SIAAVVASMD..wP...E.I.T...K....Y.R.....G.LV..S...AQ.....P..........H.......R....Q...EI......IED....LFSvgkdpv................... [...]
+C5WX38_SORBI/703-1025       ............................................................................................l-LIVILPD..-VSGS..YGKIKRV.CE...TD..I..GIVSQCCLP.K..H.ASRP--................NKQYLENVAL.......KINVK..........VGGR.Nt...vLER.A....FVR.NG........I......P..F....V...S...E.....V.P..T.I..................................IFGADVTHPPPGE...............DSAS..SIAAVVASMD..wP...E.I.T...K....Y.R.....G.LV..S...AQ.....P..........H.......R....Q...EI......IED...lFTVtkdlqk................... [...]
+C5WX34_SORBI/1-43           ............................................................................................g--------..-----..--KIKRV.CE...TD..I..GIVSQCCLM.K..H.DCRP--................NKIFLENISL.......KNNAK..........V---.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+B7ZZW2_MAIZE/663-969        ............................................................................................l-LIVILPD..-VTGY..YGEIKRM.CE...TD..L..GIVSQCINP.K..K.N--R--................NKQYFENLAL.......KINVK..........AGGR.Nt...vLER.A....SVP.NG........I......P..F....V...S...D.....V.P..T.I..................................IFGADVTHPTAGE...............ESSA..SVGAVVASMD..wP...Q.V.T...T....Y.K.....A.LV..S...AQ.....A..........H.......R....E...EI......IQN....LGG......................... [...]
+Q7FS89_MAIZE/11-170         ..................................................................................crgmalaagtv--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----VVASMD..wP...Q.V.T...T....Y.K.....A.LV..S...AQ.....A..........H.......R....E...EI......IQN....LGG......................... [...]
+Q8S478_MAIZE/38-188         ...........................................................................................hk--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----VVASMD..wP...Q.V.T...T....Y.K.....A.LV..S...AQ.....A..........H.......R....E...EI......IQN....LGG......................... [...]
+C5XBU2_SORBI/675-995        ............................................................................................l-LIVVLPD..-VSGH..YGKIKRI.CE...TD..L..GIVSQCINP.K..K.NKN---................-KQYFENVAL.......KINVK..........VGGR.Nt...vLER.A....FVP.NG........I......P..F....V...S...D.....V.P..T.I..................................IFGADVTHPTAGE...............DSSA..SIAAVVASMD..wP...Q.V.T...T....Y.K.....A.LV..S...AQ.....A..........H.......R....E...EI......IQN...lFWTgtdpek................... [...]
+C5X6M9_SORBI/1-69           ........................................................................................ntfcl--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....K.P..T.I..................................IFGADAIHPTAGE...............DSSA..FITAVVESME..rP...Q.V.M...T....Y.K.....A.LA..S...AQ.....K..........H.......R....E...EM......IHN...lL--......................... [...]
+B9FVX3_ORYSJ/462-794        ............................................................................................l-LIVILPD..-VNGY..YGRIKRV.CE...TE..L..GIVSQCLKP.G..RkLLSL--................DRQFLENVSL.......KINVK..........AGGR.Ns...vLQR.P....LVP.G-........-......-..-....G...L...E.....N.T..T.I..................................IFGADVTHPASGE...............DSSA..SIAAVVASMD..wP...E.I.T...K....Y.K.....A.LV..S...AQ.....P..........P.......R....Q...EI......IQD....LFTmtevaqnadapaq............ [...]
+AGO14_ORYSJ/677-1009        ............................................................................................l-LIVILPD..-VNGY..YGRIKRV.CE...TE..L..GIVSQCLKP.G..RkLLSL--................DRQFLENVSL.......KINVK..........AGGR.Ns...vLQR.P....LVP.G-........-......-..-....G...L...E.....N.T..T.I..................................IFGADVTHPASGE...............DSSA..SIAAVVASMD..wP...E.I.T...K....Y.K.....A.LV..S...AQ.....P..........P.......R....Q...EI......IQD....LFTmtevaqnadapaq............ [...]
+B8B7Y0_ORYSI/653-985        ............................................................................................l-LIVILPD..-VNGY..YGRIKRV.CE...TE..L..GIVSQCLKP.G..RkLLSL--................DRQFLENVSL.......KINVK..........AGGR.Ns...vLQR.P....LVP.G-........-......-..-....G...L...E.....N.T..T.I..................................IFGADVTHPASGE...............DSSA..SIAAVVASMD..wP...E.I.T...K....Y.K.....A.LV..S...AQ.....P..........P.......R....Q...EI......IQD....LFTmtevaqnadapaq............ [...]
+Q0DZI9_ORYSJ/119-248        ...................................................................................qstgqksphi--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....E.LI..S...AQ.....L..........E.......R....Q...EI......IGG....LFHstrdpk................... [...]
+B8AFF9_ORYSI/534-832        ............................................................................................l-LIVILPE..-ERGN..YGKIKRV.CE...TK..L..GLVSQCCLP.K..N.VKTDTN................-IKYLENIAL.......KINVK..........VGGR.Nt...vLQQ.A....FVH.NG........I......P..F....V...S...D.....I.P..T.I..................................IFGADVSHPPPGM...............-YSS..SIAGVVGSID..wP...E.V.T...T....Y.R.....A.VI..S...AQ.....L..........E.......R....Q...EI......IGG....---......................... [...]
+B9F134_ORYSJ/36-347         ............................................................................................l-LIVILPE..-ERGN..YGKIKRV.CE...TK..L..GLVSQCCLP.K..N.VKTDTN................-IKYLENIAL.......KINVK..........VGGQ.Nt...vLQQ.A....FVH.NG........I......P..F....V...S...D.....I.P..T.I..................................IFGADVSHPPPGMwld........qstgQKSP..HIELISAQL-...-...E.R.Q...E....I.I.....G.GL.fH...ST.....R..........D.......P....K...GC......LKP....-DG......................... [...]
+Q0DZI9_ORYSJ/36-107         ............................................................................................l-LIVILPE..-ERGN..YGKIKRV.CE...TK..L..GLVSQCCLP.K..N.VKTDTN................-IKYLENIAL.......KINVK..........T---.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+Q0DZJ0_ORYSJ/35-101         ........................................................................................rakre--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+B9FX53_ORYSJ/672-981        ...........................................................................................ll-LVVMTDD.kNNASL..YGDVKRI.CE...TE..I..GVLSQCCRA.K..Q.VYKERN................-VQYCANVAL.......KINAK..........AGGR.N.....SVF.L....NVE.AS........L......P..V....V...S...K.....S.P..T.I..................................IFGADVTHPGSFD...............ESTP..SIASVVASAD..wP...E.V.T...K....Y.N.....S.VV..R...MQ.....A..........S.......R....K...EI......IQD....LDS......................... [...]
+AGO18_ORYSJ/747-1056        ...........................................................................................ll-LVVMTDD.kNNASL..YGDVKRI.CE...TE..I..GVLSQCCRA.K..Q.VYKERN................-VQYCANVAL.......KINAK..........AGGR.N.....SVF.L....NVE.AS........L......P..V....V...S...K.....S.P..T.I..................................IFGADVTHPGSFD...............ESTP..SIASVVASAD..wP...E.V.T...K....Y.N.....S.VV..R...MQ.....A..........S.......R....K...EI......IQD....LDS......................... [...]
+B8B5Y3_ORYSI/745-1054       ...........................................................................................ll-LVVMTDD.kNNASL..YGDVKRI.CE...TE..I..GVLSQCCRA.K..Q.VYKERN................-VQYCANVAI.......KINAK..........AGGR.N.....SVF.L....NVE.AS........L......P..V....V...S...K.....S.P..T.I..................................IFGADVTHPGSFD...............ESTP..SIASVVASAD..wP...E.V.T...K....Y.N.....S.LV..R...MQ.....A..........S.......R....K...EI......IQD....LDS......................... [...]
+C5X8G4_SORBI/699-1002       ............................................................................................l-LLAILPE..KNGNL..YGNFKRI.CE...TE..I..GIMSQCCLD.K..N.VRSA--................GPPYFANVAI.......KINAK..........FGGR.N.....LEF.A....NPK.ES........L......P..V....V...S...I.....E.P..T.I..................................IFGADVTHPAALD...............DTAP..SIASVVASQD..wP...T.V.A...N....Y.N.....G.IA..R...AQ.....G..........H.......R....K...EL......IDG....LED......................... [...]
+C5X8G7_SORBI/41-220         ..........................................................................................ivk--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+C5WR49_SORBI/670-825        ..........................................................................................div--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+C0PDS4_MAIZE/580-888        ............................................................................................l-LLAILPD..KKDSL..YGNIKRI.CE...TD..I..GLVSQCCRR.S..R.VLVN--................NNQILANIAI.......KINAK..........VGGR.I.....SVF.D....DVQ.KS........L......P..V....V...S...N.....K.P..T.I..................................IFGAHVSHPSVVD..............gSTGP..SIASVVASQD...W...H.E.V...S....K.Y.....N.GV..V...RA.....Q..........G.......H....T...EE......IGG....LED......................... [...]
+C5WR49_SORBI/585-661        ............................................................................................l-LLAILPD..KNGSL..YGNIKRI.CE...TD..I..GLVSQCCRR.S..N.VFTE--................NSQILANIAI.......KINAK..........VVAS.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+B7ZXH7_MAIZE/580-736        ............................................................................................l-LLAILPD..KKDSL..YGNIKRI.CE...TD..I..GLVSQCCRR.S..R.VLVN--................NNQILANIAI.......KINAK..........VGGR.I.....SVF.D....DVQ.KS........L......P..V....V...S...N.....K.P..T.I..................................IFGAHVSHPSVVD..............gSTGP..SIASVVASQD...W...H.E.V...S....K.Y.....N.GV..V...RA.....Q..........G.......H....T...EE......IGG....LED......................... [...]
+A5BG29_VITVI/774-895        ........................................................................................dlgam--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+A5BW27_VITVI/926-1238       ...........................................................................................ql-LICIMER..-KHKG..YADLKRI.AE...TS..I..GVVSQCCLY.Q..N.LGKS--................SSQFLANLAL.......KINAK..........MGGC.T....vALY.N....SLP.SQ........I......PrlL....R...P...D.....E.P..V.I..................................FMGADVTHPHPLD...............DFSP..SIAAVVGSMN..wP...A.A.N...K....Y.V.....S.RM..R...SQ.....T..........H.......R....Q...EI......IQD....LGA......................... [...]
+B9S921_RICCO/670-981        ...........................................................................................ql-LICIMEK..-RHKG..YADLKRI.AE...TS..V..GVVSQCCLF.P..N.LGKL--................SSQFLANLAL.......KINAK..........VGGC.T....vALF.N....SLP.SQ........I......PrlL....H...S...D.....D.P..V.I..................................FMGADVTHPHPLD...............DFSP..SVAAVVGSMN..wP...A.A.N...K....Y.A.....S.RM..R...SQ.....T..........H.......R....Q...EI......IQD....LGA......................... [...]
+B9HXP0_POPTR/520-831        ...........................................................................................ql-LICVMEK..-KHKG..YADLKRI.AE...TS..V..GVVTQCCLY.L..N.LGKL--................SSQFLANLAL.......KINAK..........VGGC.T....vALY.N....SLP.SQ........I......PrlL....R...S...N.....E.P..V.I..................................FMGADVTHPHPLD...............DISP..SVAAVVGSMN..wP...A.A.N...K....Y.V.....S.RM..R...SQ.....T..........H.......R....Q...EI......IQD....LGE......................... [...]
+B9IL53_POPTR/1-160          .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.M..................................FMGADVTHPCPLE...............DISP..SAAAVVGSMN..wP...A.A.N...K....Y.V.....S.RM..R...SQ.....T..........H.......R....Q...EI......IWD....LGA......................... [...]
+D3GBV1_LOTJA/669-981        ............................................................................................l-LICVMER..-KHKG..YADLKRI.AE...TS..I..GLISQCCLY.P..N.LCKL--................SSQFLANLAL.......KINAK..........VGGC.T....vALY.N....SLP.SQ........L......PrlF....H...I...D.....E.P..V.I..................................FMGADVTHPHPLD...............DSSP..SVAAVVGSMN..wP...T.A.N...K....Y.I.....S.RI..R...SQ.....T..........H.......R....Q...EI......IQD....LGP......................... [...]
+Q9C793_ARATH/649-950        ............................................................................................l-IICVMEK..-KHKG..YGDLKRI.SE...TR..I..GVVTQCCLY.P..N.ITKL--................SSQFVSNLAL.......KINAK..........IGGS.M....tELY.N....SIP.SH........I......PrlL....R...P...D.....E.P..V.I..................................FMGADVTHPHPFD...............DCSP..SVAAVVGSIN..wP...E.A.N...R....Y.V.....S.RM..R...SQ.....T..........H.......R....Q...EI......IQD....LDL......................... [...]
+A3AJI1_ORYSJ/584-892        ............................................................................................l-LICVMER..-RHQG..YADLKRI.AE...TS..I..GVVTQCCLY.S..N.LSKL--................TSQFLTNLAL.......KINAK..........LGGC.N....iALY.S....SFP.CQ........I......PriF....L...S...E.....E.P..V.M..................................FMGADVTHPHPLD...............DSSP..SVVAVVASMN..wP...S.A.N...K....Y.I.....S.RM..R...SQ.....T..........H.......R....K...EI......IEQ....LDV......................... [...]
+AGO7_ORYSJ/709-1017         ............................................................................................l-LICVMER..-RHQG..YADLKRI.AE...TS..I..GVVTQCCLY.S..N.LSKL--................TSQFLTNLAL.......KINAK..........LGGC.N....iALY.S....SFP.CQ........I......PriF....L...S...E.....E.P..V.M..................................FMGADVTHPHPLD...............DSSP..SVVAVVASMN..wP...S.A.N...K....Y.I.....S.RM..R...SQ.....T..........H.......R....K...EI......IEQ....LDV......................... [...]
+A2YQ96_ORYSI/716-1024       ............................................................................................l-LICVMER..-RHQG..YADLKRI.AE...TS..I..GVVTQCCLY.S..N.LSKL--................TSQFLTNLAL.......KINAK..........LGGC.N....iALY.S....SFP.CQ........I......PriF....L...S...E.....E.P..V.M..................................FMGADVTHPHPLD...............DSSP..SVVAVVASMN..wP...S.A.N...K....Y.I.....S.RM..R...SQ.....T..........H.......R....K...EI......IEQ....LDV......................... [...]
+D0EYF3_MAIZE/683-995        ............................................................................................l-LICVMER..-RHRG..YADLKRI.AE...TS..I..GVLTQCCLY.S..N.LSKL--................SFQFLANLAL.......KINAK..........LGGC.N....vALY.N....SLP.CQ........I......P..R....Vf.sD...E.....E.P..A.M..................................FMGADVTHPHPLD...............DSSP..SVVAVVASMN..wP...S.A.N...K....Y.I.....S.RM..R...SQ.....T..........H.......R....K...EI......IER....LDV......................... [...]
+C5WVP1_SORBI/688-996        ............................................................................................l-LICVMER..-RHRG..YADLKRI.AE...TS..I..GVLTQCCLY.S..N.LSKL--................SFQFLANLAL.......KINAK..........VGGS.N....vALY.N....SLP.CQ........I......P..R....Vf.sD...K.....E.P..V.M..................................FMGADVTHPHPLD...............DSSP..SVVAVVASMN..wP...S.A.N...K....Y.I.....S.RM..R...SQ.....T..........H.......R....K...EI......IER....LDV......................... [...]
+A3AXD9_ORYSJ/720-1023       ....................................................................................llfcpmlnr--------..--CHG..YKTLKLM.CE...TE..L..GIQTQCFLS.T..A.AKLDEK...............rQDQYITNLAL.......KINGK..........IGGS.N.....MQL.D....P--.DS........I......P..V....V...S...A.....K.D..F.M..................................FIGADVNHPPPGNv.............sKDIP..SIAAVVASVD...K...G.A.S...K....Y.V.....T.RI..R...AQ.....Y..........H.......R....C...EM......IQN....LGD......................... [...]
+A2XXJ0_ORYSI/688-991        ....................................................................................llfcpmlnr--------..--CHG..YKTLKLM.CE...TE..L..GIQTQCFLS.T..A.AKLDEK...............rQDQYITNLAL.......KINGK..........IGGS.N.....MQL.D....P--.DS........I......P..V....V...S...A.....K.D..F.M..................................FIGADVNHPPPGNv.............sKDIP..SIAAVVASVD...K...G.A.S...K....Y.V.....T.RI..R...AQ.....Y..........H.......R....C...EM......IQN....LGD......................... [...]
+AGO3_ORYSJ/720-1023         ....................................................................................llfcpmlnr--------..--CHG..YKTLKLM.CE...TE..L..GIQTQCFLS.T..A.AKLDEK...............rQDQYITNLAL.......KINGK..........IGGS.N.....MQL.D....P--.DS........I......P..V....V...S...A.....K.D..F.M..................................FIGADVNHPPPGNv.............sKDIP..SIAAVVASVD...K...G.A.S...K....Y.V.....T.RI..R...AQ.....Y..........H.......R....C...EM......IQN....LGD......................... [...]
+Q00RR5_ORYSA/745-1048       ....................................................................................llfcpmlnr--------..--CHG..YKTLKLM.CE...TE..L..GIQTQCFLS.T..A.AKLDEK...............rQDQYITNLAL.......KINGK..........IGGS.N.....MQL.D....P--.DS........I......P..V....V...S...A.....K.D..F.M..................................FIGADVNHPPPGNv.............sKDIP..SIAAVVASVD...K...G.A.S...K....Y.V.....T.RI..R...AQ.....Y..........H.......R....C...EM......IQN....LGD......................... [...]
+B9FCH7_ORYSJ/626-928        ..........................................................................................qll--FCPMSD..-QHPG..YKTLKLI.CE...TQ..L..GIQTQCFLS.F..L.ANKQQG................QDQYMSNLAL.......KINGK..........IGGS.N....iQLF.G....ESL.P-........-......-..R....I...S...G.....A.P..Y.M..................................FIGADVNHPSPGN...............VESP..SIAAVVASVD...Q...G.A.S...K....Y.V.....P.RI..R...AQ.....P..........H.......R....C...EV......IQH....LGD......................... [...]
+AGO2_ORYSJ/687-989          ..........................................................................................qll--FCPMSD..-QHPG..YKTLKLI.CE...TQ..L..GIQTQCFLS.F..L.ANKQQG................QDQYMSNLAL.......KINGK..........IGGS.N....iQLF.G....ESL.P-........-......-..R....I...S...G.....A.P..Y.M..................................FIGADVNHPSPGN...............VESP..SIAAVVASVD...Q...G.A.S...K....Y.V.....P.RI..R...AQ.....P..........H.......R....C...EV......IQH....LGD......................... [...]
+Q00RR6_ORYSA/693-995        ..........................................................................................qll--FCPMSD..-QHPG..YKTLKLI.CE...TQ..L..GIQTQCFLS.F..L.ANKQQG................QDQYMSNLAL.......KINGK..........IGGS.N....iQLF.G....ESL.P-........-......-..R....I...S...G.....A.P..Y.M..................................FIGADVNHPSPGN...............VESP..SIAAVVASVD...Q...G.A.S...K....Y.V.....P.RI..R...AQ.....P..........H.......R....C...EV......IQH....LGD......................... [...]
+A2XXI9_ORYSI/693-995        ..........................................................................................qll--FCPMSD..-QHPG..YKTLKLI.CE...TQ..L..GIQTQCFLS.F..L.ANKQQG................QDQYMSNLAL.......KINGK..........IGGS.N....iQLF.G....ESL.P-........-......-..R....I...S...G.....A.P..Y.M..................................FIGADVNHPSPGN...............VESP..SIAAVVASVD...Q...G.A.S...K....Y.V.....P.RI..R...AQ.....P..........H.......R....C...EV......IQH....LGD......................... [...]
+C5YG12_SORBI/746-1048       ..........................................................................................qll--FCPMSE..-QHPG..YKTLKLI.CD...TQ..L..GILTQCFLS.D..R.ANKPNG................QDQYMTNLAL.......KINGK..........LGGS.N.....VQL.F....DSL.PR........-......-..V....G...G...G.....A.P..F.M..................................FIGADVNHPSPGN...............VESP..SIAGVVASIN...S...G.A.N...K....Y.V.....S.RI..R...AQ.....P..........H.......R....C...EV......IQQ....LGE......................... [...]
+C0PIX4_MAIZE/1-297          ..........................................................................................mse--------..-QHSG..YKTLKLI.CD...TQ..L..GILTQCLLS.D..R.ANNRKG................QDQYMTNLAL.......KINGK..........LGGS.N.....VQL.F....DSL.PR........-......-..V....G...G...G.....V.P..F.M..................................FIGADVNHPSPGN...............VESP..SIAAVVASVN...S...G.V.N...K....Y.V.....T.RI..R...AQ.....P..........H.......R....C...EV......IQQ....LGE......................... [...]
+Q9SHF2_ARATH/841-1145       ............................................................................................l-VLCAMTG..-KHDG..YKTLKWI.AE...TK..L..GLVTQCFLT.I..S.AIKGET...............vSDQYLANLAL.......KINAK..........VGGT.N.....VEL.V....DNI.FS........F......-..F....K...K...E.....D.K..V.M..................................FIGADVNHPAAHD...............NMSP..SIVAVVGTLN..wP...E.A.N...R....Y.A.....A.RV..K...AQ.....S..........H.......R....K...EE......IQG....FGE......................... [...]
+Q9SHF3_ARATH/665-965        ...........................................................................................tl-VLCAMSR..-KDDG..YKTLKWI.AE...TK..L..GLVTQCFLT.G..P.ATKG--................GDQYRANLAL.......KMNAK..........VGGS.N.....VEL.M....DTF.SF........-......-..F....K...K...E.....D.E..V.M..................................FIGADVNHPAARD...............KMSP..SIVAVVGTLN..wP...E.A.N...R....Y.A.....A.RV..I...AQ.....P..........H.......R....K...EE......IQG....FGD......................... [...]
+Q8GX33_ARATH/191-491        ...........................................................................................tl-VLCAMSR..-KDDG..YKTLKWI.AE...TK..L..GLVTQCFLT.G..P.ATKG--................GDQYRANLAL.......KMNAK..........VGGS.N.....VEL.M....DTF.SF........-......-..F....K...K...E.....D.E..V.M..................................FIGADVNHPAARD...............KMSP..SIVAVVGTLN..wP...E.A.N...R....Y.A.....A.RV..I...AQ.....P..........H.......R....K...EE......IQG....FGD......................... [...]
+B9SSM8_RICCO/639-934        ............................................................................................i-LVCVLPK..-EDPG..YSNLKWI.CE...TK..V..GIVTQCCLS.E..N.AFRP--................KAQFLANLAL.......KINAK..........LGGS.N.....VEL.F....KQP.QC........-......-..L....Q...S...K.....G.H..V.M..................................FIGADVNHPSSYN...............STSP..SIAAVVATMN..wP...A.A.N...Q....Y.G.....A.LI..C...PQ.....D..........H.......R....A...EK......ILK....FGD......................... [...]
+A5AFZ6_VITVI/719-1022       ...........................................................................................qi-LVCVMAR..-KDPG..YNYLKWF.CE...TN..I..GIVTQCCLS.S..P.ANKA--................NDQYLANLAL.......KMNAK..........LGGS.N.....VEL.I....DRL.PH........F......-..-....E...N...E.....G.Y..V.M..................................FVGADVNHPGAWN...............SASP..SIAAVVATVN..wP...A.V.N...R....Y.A.....A.RV..R...PQ.....L..........H.......R....T...EK......ILN....FGD......................... [...]
+A5CBU3_VITVI/601-900        ...........................................................................................qi-LVCVMAR..-RDAG..YGYLKWF.SE...TR..L..GMVTQCCLS.S..P.ANKA--................SDQYLANLAL.......KLNAK..........LGGS.N.....VEL.I....ERL.PR........F......E..-....-...G...E.....G.H..V.M..................................FIGADVNHPGSQN...............TTSP..SIAAVVATVN..wP...A.A.N...R....Y.A.....A.RI..R...PQ.....A..........H.......R....M...EK......IQN....FGA......................... [...]
+A5B8D3_VITVI/625-924        ...........................................................................................qi-LVCVMAR..-KDAG..YGYLKWF.AE...TK..L..GMVTQCCLS.R..P.ANKV--................SDHHLANLAL.......KLNAK..........LGGS.N.....VEL.I....XRL.PR........F......E..-....-...G...E.....G.H..V.M..................................FIGADVNHPGSQN...............TTSP..SIAAVVATXN..wP...A.A.N...R....Y.A.....A.RI..R...PQ.....A..........H.......R....M...EK......IQN....FGA......................... [...]
+B9NA51_POPTR/676-973        ...........................................................................................qf-LLCVMSK..-KDPG..YKYLKWI.CE...TK..V..GIVTQCCLS.R..S.ANKV--................NDQYLANIGL.......KINAK..........LGGS.N.....AEL.S....D--.-R........L......P..Y....F...G...D.....E.N..HiM..................................FIGADVNHPAARN...............TTSP..SIAAVVGTTN..wP...A.A.N...R....Y.A.....A.RV..R...PQ.....D..........H.......R....C...EK......ILN....FGD......................... [...]
+B9S3I1_RICCO/146-445        ...........................................................................................qi-LICVMSR..-KDPG..YKYLKWI.SE...TK..V..GVVTQCCLS.D..Y.ANKG--................HDQYFANLAL.......KINAK..........LGGN.N.....VEL.N....DRL.PY........F......-..-....E...G...E.....D.H..V.M..................................FLGADVNHPGSRN...............TTSP..SIAAVVATVN..wP...A.A.N...R....Y.A.....A.RV..R...PQ.....D..........H.......R....K...EK......ILN....FGD......................... [...]
+Q10P03_ORYSJ/678-756        ........................................................................................gtead--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+B9F6T7_ORYSJ/653-731        ........................................................................................gtead--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+B8AK97_ORYSI/622-700        ........................................................................................gtead--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+A9T108_PHYPA/1-169          ............................................................................................k--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+C6XVE0_PEDHD/320-460        .....................................................................................viitnskk-------E..ESDDK..LYFSLKH.RF...TN..E..GIPCQVVTK.D..L.IINDNA................LKFSLGNIAL.......QMFAK..........AGGI.-.....PWK.M....K--.PA........T......-..-....-...-...-.....T.E..Y.L..................................IIGIGQSYNIEIT..............eD---..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+B3SEP3_TRIAD/438-734        ....................................................................rkvevlisklkkstadcgieginek--------..-----..-------.--...--..-..---NLCMQI.K..N.IDKA--................NHQFLANLAL.......KINAK..........LGGT.N.....NTI.N....QSE.L-........-......-..-....-...L...K.....K.P..T.I..................................IFGADVTHPGIGD...............QTSP..SVAAIVGSAN...I...D.L.S...H....Y.F.....H.AI..R...IQ.....E..........H.......R....K...EI......IQD....LQS......................... [...]
+A8NJ50_BRUMA/1-61           .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+TAG76_CAEEL/660-966         .............................................................................................CIIVVLQS..KNSDI..YMTVKEQ.SD...IV..H..GIMSQCVLM.K..N.VSRP--................TPATCANIVL.......KLNMK..........MGGI.N.....SRI.V....ADK.IT........N......K..Y....L...V...D.....Q.P..T.M..................................VVGIDVTHPTQAEm.............rMNMP..SVAAIVANVD...L...L.P.Q...S....Y.G.....A.NV..K...VQ.....K..........K.......C....R...ES......VVY....LLD......................... [...]
+A8XA10_CAEBR/683-989        .............................................................................................CIIVVLQA..KNSDI..YMTVKEQ.SD...IV..H..GIMSQCVLM.K..N.VSRP--................TPATCANIVL.......KLNMK..........MGGI.N.....SRI.V....ADQ.IT........N......K..Y....L...V...D.....Q.P..T.M..................................VVGIDVTHPTQAEm.............rMNMP..SVAAIVANVD...L...L.P.Q...S....Y.G.....A.NV..K...VQ.....K..........K.......C....R...ES......VVY....LLD......................... [...]
+Q7JLZ2_CAEEL/652-958        .............................................................................................CIIVVLQS..KNSDI..YMTVKEQ.SD...IV..H..GIMSQCVLM.K..N.VSRP--................TPATCANIIL.......KLNMK..........MGGI.N.....SRI.V....ADQ.IT........N......K..Y....L...V...D.....Q.P..T.M..................................VVGIDVTHPTQAEm.............rMNMP..SVAAIVANVD...L...L.P.Q...S....Y.G.....A.NV..K...VQ.....K..........K.......C....R...ES......VVY....LLD......................... [...]
+Q21079_CAEEL/655-961        .............................................................................................CIIVVLQS..KNSDI..YMTVKEQ.SD...IV..H..GIMSQCVLM.K..N.VSRP--................TPATCANIIL.......KLNMK..........MGGI.N.....SRI.V....ADQ.IT........N......K..Y....L...V...D.....Q.P..T.M..................................VVGIDVTHPTQAEm.............rMNMP..SVAAIVANVD...L...L.P.Q...S....Y.G.....A.NV..K...VQ.....K..........K.......C....R...ES......VVY....LLD......................... [...]
+A8NGN0_BRUMA/1-135          ...........................................................................................mq--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+C3ZN91_BRAFL/470-771        ............................................................................................l-ILVVLPG..-KTPV..YAEVKRV.GD...TM..L..GVATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGV.N....nILV.P....HIR.PR........V......F..L....-...-...-.....E.P..V.I..................................FIGADVTHPPAGD...............GRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....T..........H.......R....Q...EI......IAD....LAS......................... [...]
+C3ZQ22_BRAFL/680-848        .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+B3VCG6_STRPU/599-900        ............................................................................................l-IIVVLPG..-KTPV..YAEVKRV.GD...IL..L..GIATQCVQV.K..N.VNRT--................TAQTLSNLCL.......KIKVK..........LGGV.N....nILA.P....NIR.PR........I......-..-....-...F...S.....E.P..V.I..................................FCGADVTHPPAGD...............DKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.SV..R...IQ.....T..........H.......R....V...EI......IQD....LQA......................... [...]
+B2RFN1_OIKDI/771-1072       ............................................................................................l-IVVVLPG..-KTPV..YAEVKRV.GD...TC..L..GIATQCVQV.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....NMR.PK........I......-..-....-...F...Q.....E.P..V.I..................................FIGADVTHPPAGD...............KRKP..SIAAVVASMD...G...H.P.S...R....Y.C.....A.AV..R...VQ.....K..........H.......R....Q...EV......IDD....LSN......................... [...]
+C8TEF3_OIKDI/573-874        ............................................................................................l-IMVILPG..-RTPV..YAEVKRV.GD...TL..L..GVATQCVQV.K..N.VTKV--................TTQTLSNLCL.......KINVK..........LGGI.N....nILL.P....NAR.PR........V......-..-....-...F...N.....E.P..V.I..................................FIGADVTHPPAGD...............RRKP..SIAAVVASID...A...H.P.S...R....Y.C.....A.SV..R...VQ.....R..........H.......R....Q...EA......IED....LTN......................... [...]
+B7QCC4_IXOSC/509-810        ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAS......................... [...]
+A9NJ58_PENMO/569-898        ...........................................................................................ql--VCVVLP..GKTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....GIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...NG......STT...qGQSasdgsrprqltfa............ [...]
+D2XYX4_PENJP/572-901        ...........................................................................................ql--VCVVLP..GKTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....GIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...NG......STT...qGQSasdgsrprqltfa............ [...]
+A9NJ57_PENMO/572-901        ...........................................................................................ql--VCVVLP..GKTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....GIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...NG......STT...qGQSasdgsrprqltfa............ [...]
+D2DK65_PENJP/572-901        ...........................................................................................ql--VCVVLP..GKTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....GIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...NG......STT...qGQSasdgsrprqltfa............ [...]
+D2DK66_PENJP/569-898        ...........................................................................................ql--VCVVLP..GKTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....GIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...NG......STT...qGQSasdgsrprqltfa............ [...]
+Q071E1_PENMO/569-898        ...........................................................................................ql--VCVVLP..GKTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....GIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...NG......STT...qGQSasdgsrprqltfa............ [...]
+A7XZ43_PENMO/569-898        ...........................................................................................ql--VCVVLP..GKTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....GIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...NG......STT...qGQSasdgsrprqltfa............ [...]
+A9QW17_TRICA/69-158         ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PR........I......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+A7BJS5_BOMMO/569-871        ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SLR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGVDVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......VHE....MSS......................... [...]
+B4LJF3_DROVI/646-948        ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS......................... [...]
+B4KTB5_DROMO/643-945        ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS......................... [...]
+B4N5V9_DROWI/642-944        ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...G...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS......................... [...]
+B4P449_DROYA/624-926        ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS......................... [...]
+B4JW20_DROGR/647-949        ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS......................... [...]
+Q7KY08_DROME/607-909        ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS......................... [...]
+B3NRF4_DROER/624-926        ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS......................... [...]
+B4INL3_DROSE/624-926        ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS......................... [...]
+B4GGS7_DROPE/642-944        ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS......................... [...]
+Q28ZU1_DROPS/642-944        ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS......................... [...]
+B3MHG1_DROAN/641-943        ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS......................... [...]
+Q32KD4_DROME/641-943        ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS......................... [...]
+Q960T1_DROME/258-560        ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS......................... [...]
+Q8T059_DROME/81-383         ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....STR.PK........-......-..-....V...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS......................... [...]
+Q27IQ2_DROSI/554-851        ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS......................... [...]
+Q27IR0_DROME/554-851        ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS......................... [...]
+B0WFU8_CULQU/621-923        ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...D.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS......................... [...]
+Q7PZ41_ANOGA/638-940        ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...D.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS......................... [...]
+Q16EE2_AEDAE/482-784        ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...D.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS......................... [...]
+Q16M62_AEDAE/604-906        ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...D.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS......................... [...]
+Q4S7L6_TETNG/228-304        ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQ-.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+D4AC38_RAT/515-816          ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY......................... [...]
+Q8BJP2_MOUSE/364-665        ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY......................... [...]
+A2VDG1_MOUSE/513-814        ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY......................... [...]
+D2H607_AILME/507-808        ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY......................... [...]
+B2RAD8_HUMAN/515-816        ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY......................... [...]
+Q5TA58_HUMAN/440-741        ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY......................... [...]
+A1L365_MOUSE/515-816        ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY......................... [...]
+AGO1_HUMAN/515-816          ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY......................... [...]
+B3KME0_HUMAN/440-741        ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....H-Q.R-........-......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY......................... [...]
+AGO1_MOUSE/515-816          ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.AVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY......................... [...]
+Q8CGU0_MOUSE/527-843        ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.YE........R......-..-....-...-...-.....-.-..L.Lalsrgppge...............ssavfqqpviFLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY......................... [...]
+Q4S7L5_TETNG/517-818        ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY......................... [...]
+AGO3_DANRE/518-819          ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EV......IQD....LAS......................... [...]
+A3KFX7_MOUSE/1-109          .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+A3KFX6_MOUSE/1-140          .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+Q4TBP2_TETNG/578-853        ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCV--.-..-.------................--QTLSNLCL.......KINVK..........LGGI.N....nILV.P....QQR.YQ........P......-..-....-...-...-.....H.P..G.LgcsglssgvcvcvcvcetltsrprrpsvfqqpviFLGADVTHPPAGDgkkp......siaavRAPR..SRCSVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EV......IQD....LAS......................... [...]
+Q7M738_MOUSE/426-707        .....................................................................................rytfgygh--------..-----..-------.--...--..-..----TCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS......................... [...]
+Q3TBP7_MOUSE/518-819        ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS......................... [...]
+AGO3_MOUSE/518-819          ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS......................... [...]
+Q4TF92_TETNG/161-225        .....................................................................ragerqcvcvcvregaqqvtfrcs--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+AGO3_BOVIN/518-820          ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS......................... [...]
+D2H606_AILME/513-814        ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS......................... [...]
+AGO3_HUMAN/518-819          ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS......................... [...]
+B4DY67_HUMAN/154-455        ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS......................... [...]
+B1ALI0_HUMAN/284-585        ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS......................... [...]
+A8KA05_HUMAN/518-819        ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS......................... [...]
+B4E1P5_HUMAN/346-647        ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS......................... [...]
+AGO3_CHICK/518-819          ............................................................................................l-IIVILPG..-KTPV..YAEVKRA.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS......................... [...]
+Q8CGT7_MOUSE/576-634        ..........................................................................................kls--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+Q4SXU1_TETNG/1-206          ...........................................................................................sf--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..--IQVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EV......IQD....LAS......................... [...]
+D2HF39_AILME/511-813        ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAT......................... [...]
+AGO2_RAT/517-819            ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA......................... [...]
+A1A563_MOUSE/517-819        ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA......................... [...]
+AGO2_RABIT/497-799          ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA......................... [...]
+B0JYP5_BOVIN/517-819        ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA......................... [...]
+Q6PHA2_MOUSE/94-396         ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA......................... [...]
+AGO2_HUMAN/516-818          ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA......................... [...]
+A4FVC0_HUMAN/465-767        ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA......................... [...]
+Q8R3Q7_MOUSE/187-489        ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA......................... [...]
+AGO2_MOUSE/517-819          ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA......................... [...]
+Q8CGT9_MOUSE/501-743        ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA......................... [...]
+AGO2_XENLA/519-821          ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LSA......................... [...]
+C0IN02_XENLA/519-821        ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LSA......................... [...]
+AGO2_XENTR/528-830          ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LSA......................... [...]
+AGO2_BOVIN/517-819          ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLWL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA......................... [...]
+Q6P239_MOUSE/277-579        ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLYL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA......................... [...]
+Q8CGT7_MOUSE/455-570        .......................................................................................vlgmat--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......Q..A....V...F...Q.....Q.P..V.I..................................FLGANVTYPPVGD...............GKKP..SIAAVMGSMD...A...H.P.N...R....Y.C.....V.TV..C...VQ.....Q..........H.......Q....Q...EI......IQD....---......................... [...]
+Q4RKH3_TETNG/508-822        ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQV.K..N.VQKT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.--........-......P..L....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...DI......IQD....LAT......................... [...]
+C9V4A2_CTEID/306-581        ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQV.K..N.VQKT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.--........-......P..L....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...DI......IQD....LAT......................... [...]
+B0F0Y5_9TELE/526-828        ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQV.K..N.VQKT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.--........-......P..L....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...DI......IQD....LAT......................... [...]
+A8WKF9_CAEBR/562-864        ...........................................................................................ql-VVIVLPG..-KTPV..YAEIKRV.GD...TV..L..GIATQCIQS.K..N.VTRT--................TPQTLSNICM.......KMNMK..........LGGV.N....cVLA.P....NVR.PK........I......-..-....-...F...S.....E.S..V.I..................................FLGCDITHPPAGD...............SRKP..SVAAIVGSMD...A...H.P.S...K....Y.A.....A.TV..R...VQ.....P..........N.......R....Q...EI......ITE....MAS......................... [...]
+A8P168_BRUMA/623-925        ...........................................................................................ql--VCVVLP..GKTPV..YAEVKRV.GD...TV..L..GIATQCVQA.K..N.VIKT--................TPQTLSNLCL.......KMNVK..........LGGV.N....sILL.P....AVR.PR........I......-..-....-...F...T.....E.P..V.I..................................FLGCDITHPPAGD...............SRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....A..........H.......R....Q...EI......ISD....LTY......................... [...]
+Q86B39_CAEEL/547-848        ............................................................................................l-IVVVLPG..-KTPI..YAEVKRV.GD...TV..L..GIATQCVQA.K..N.AIRT--................TPQTLSNLCL.......KMNVK..........LGGV.N....sILL.P....NVR.PR........I......-..-....-...F...N.....E.P..V.I..................................FLGCDITHPAAGD...............TRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......ITD....LTY......................... [...]
+O16720_CAEEL/566-867        ............................................................................................l-IVVVLPG..-KTPI..YAEVKRV.GD...TV..L..GIATQCVQA.K..N.AIRT--................TPQTLSNLCL.......KMNVK..........LGGV.N....sILL.P....NVR.PR........I......-..-....-...F...N.....E.P..V.I..................................FLGCDITHPAAGD...............TRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......ITD....LTY......................... [...]
+B2L7Q3_CAERE/1-268          .............................................................................................--------..-----..-------.--...--..-..-IATQCVQA.K..N.AIRT--................TPQTLSNLCL.......KMNVK..........LGGV.N....sILL.P....NVR.PR........I......-..-....-...F...N.....E.P..V.I..................................FFGCDITHPPAGD...............SRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......ISD....LTY......................... [...]
+B2L7P9_CAERE/1-269          .............................................................................................--------..-----..-------.--...--..-..GIATQCVQA.K..N.AIRT--................TPQTLSNLCL.......KMNVK..........LGGV.N....sILL.P....NVR.PR........I......-..-....-...F...N.....E.P..V.I..................................FFGCDITHPPAGD...............SRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......ISD....LTY......................... [...]
+A8X4Z3_CAEBR/691-992        ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GIATQCVQA.K..N.AIRT--................TPQTLSNLCL.......KMNVK..........LGGV.N....sILL.P....NVR.PR........I......-..-....-...F...N.....E.P..V.I..................................FFGCDITHPPAGD...............SRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......ISD....LTY......................... [...]
+Q3LTR7_CAEEL/668-969        ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GIATQCVQA.K..N.AIRT--................TPQTLSNLCL.......KMNVK..........LGGV.N....sILL.P....NVR.PR........I......-..-....-...F...N.....E.P..V.I..................................FFGCDITHPPAGD...............SRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......ISD....LTY......................... [...]
+Q20578_CAEEL/660-961        ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GIATQCVQA.K..N.AIRT--................TPQTLSNLCL.......KMNVK..........LGGV.N....sILL.P....NVR.PR........I......-..-....-...F...N.....E.P..V.I..................................FFGCDITHPPAGD...............SRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......ISD....LTY......................... [...]
+B6VQ75_CAEEL/681-982        ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GIATQCVQA.K..N.AIRT--................TPQTLSNLCL.......KMNVK..........LGGV.N....sILL.P....NVR.PR........I......-..-....-...F...N.....E.P..V.I..................................FFGCDITHPPAGD...............SRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......ISD....LTY......................... [...]
+A8WWP9_CAEBR/632-910        ...........................................................................................ql-VICIVSG..-KSTV..YGDLKRK.GD...L-..L..GLTTQCIRT.N..N.VARV--................SPHTLSNLCM.......KINSK..........LGGV.N.....VVL.S....APP.PS........T......A..-....-...-...T.....T.P..T.L..................................FIGCHLSRNSVASsses......ssslnYSDT..SIACLVGSMD...G...H.P.T...R....F.A.....P.IF..R...LQ.....P..........R.......N....A...NT......IID....MSE......................... [...]
+Q9XVI3_CAEEL/574-882        ............................................................................................l-VLCIVPG..-KSVV..YGELKRK.GE...L-..L..GLTTQCVRS.Q..N.VSKA--................SPHTLSNLCM.......KINSK..........LGGI.N.....VIL.S....S-P.PQ........-......-..S....L...N...S.....E.P..V.L..................................FIGCHLTRSSLASssds......tssiaHCDS..SIACLVGSMD...G...H.P.T...Q....F.S.....P.IF..R...TQ.....P..........R.......H....Q...RT......IVD....MCE......................... [...]
+A7RQ46_NEMVE/511-812        .............................................................................................MILVVLPG..-KTPV..YAEVKRV.GD...TM..L..GVITQCIQG.K..N.VTKP--................SPQTLSNLCL.......KINAK..........LGGV.N....nILA.P....EIR.PP........V......-..-....-...F...R.....E.P..V.I..................................FLGADVTHPAAGD...............DKRP..SVAAVVGSMD...A...H.P.S...R....Y.Y.....A.SV..R...VQ.....T..........H.......R....Q...EI......IAE....LAA......................... [...]
+D2XMQ5_SACKO/1-219          .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------HPPAGD...............MKKP..SIAAVVASMD...A...H.P.S...R....Y.A.....A.SV..R...VQ.....S..........H.......R....Q...EL......IEE....LSH......................... [...]
+C4Q6D1_SCHMA/608-835        ..........................................................................................xxx--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-LGADVTHPPAGD...............KTKP..SIAAVVASMD...A...H.P.S...R....Y.S.....A.TV..R...VQ.....S..........H.......R....Q...EI......IHD....LYP......................... [...]
+Q5C3Y0_SCHJA/4-157          ............................................................................................y--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+D4A2P5_RAT/843-954          ..........................................................................vrhcshdnflcssivfivg--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+A7SCI6_NEMVE/496-743        ............................................................................................l-IVVALPD.rGNKDV..YNEVKRV.GD...TV..L..GIPTQCVQM.K..Q.FTMA--................KPQVCSNIAM.......KINGK..........LGGT.N.....HVI.A....DSL.KA........TitddkgN..G....I...F...N.....S.P..V.I..................................IFGADVTHPAPGD...............NGIP..SIAAVVASLN...R...N.A.S...R....Y.C.....A.RV..R...PQthmkcK..........Q.......A....Q...EI......IVD....LAD......................... [...]
+Q4TF92_TETNG/239-305        .........................................................................................alll--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+Q4TBP2_TETNG/868-934        .........................................................................................alll--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+Q8CGT8_MOUSE/1000-1102      .....................................................................................lcsfmffl--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+Q4R7V5_MACFA/1-211          ............................................................................................m--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..---------D...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...EI......SQE....LLYsqevi.................... [...]
+AGO4_HUMAN/509-820          ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...EI......SQE....LLYsqevi.................... [...]
+D2H608_AILME/505-816        ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...EI......SQE....LLYsqevi.................... [...]
+A7MD27_HUMAN/509-820        ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...EI......SQE....LLYsqevi.................... [...]
+Q9NXV9_HUMAN/35-346         ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...EI......SQE....LLYsqevi.................... [...]
+D4A2P5_RAT/513-742          ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...EI......AQE...lLFSqevv..................... [...]
+Q4SVE6_TETNG/553-864        ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...DM......SQE...qLFSqevi..................... [...]
+AGO4_MOUSE/509-820          ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KMNAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...EI......TQE....LLYsqevv.................... [...]
+Q8BTF2_MOUSE/35-346         ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KMNAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...EI......TQE....LLYsqevv.................... [...]
+Q8CGT8_MOUSE/660-885        ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KMNAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...EI......TQE....LLYsqevv.................... [...]
+AGO4_XENLA/532-843          ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...ET......TQE....LLYsqevi.................... [...]
+AGO4_CHICK/442-753          ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...ET......SQE....LLYsqevi.................... [...]
+B7QBT5_IXOSC/313-623        ............................................................................................q-VIFVVVV..NKSPI..YNELKST.AE...TE..I..GVMTQCVTD.K..S.IMNKCN................-PMLVNNILQ.......KVNAK..........LGGV.N.....NTI.P....KSV.K-........-......S..V....I...F...S.....K.P..V.I..................................VMGADVTHPGAKE...............FNRP..SIAAVVASTD...P...F.A.F...R....Y.I.....T.AF..R...IQ.....K..........Q.......N....M...EVkarveiIED....MKS......................... [...]
+B7Q990_IXOSC/474-787        ............................................................................................k-FLLIILN..PMIDN..HDAIKLI.CE...RD..L..GLATQCCME.K..N.VFNVVDkml..........hqpLPALLVNLCH.......KVNAK..........CGGD.A.....NTI.S....K--.--........R......P..A....I...F...E.....E.P..V.I..................................ILGADVNHPAPGR...............SNHP..SYAALVGSLD...S...C.P.S...K....Y.H.....A.SV..R...IQrtsanS..........N.......E....R...EI......IKD....LKG......................... [...]
+B7Q811_IXOSC/611-920        ............................................................................................e-IMVIVLA..-KNSN..YAEIKQV.AE...TD..L..GLRTQCIMD.N..N.VIKKCN................-AALVTNLCQ.......KLNAK..........MGGT.N....nSLL.A....Q-E.K-........-......P..A....I...F...Q.....K.P..V.I..................................IIGADVTHPAPGD...............KLRP..SIAACVGSLD...S...I.P.S...K....F.H.....A.SI..R...IQ.....Meds....aamS.......R....V...EI......IKD....LKD......................... [...]
+B7P230_IXOSC/468-776        ............................................................................................l-VIVVLGR..--NSS..YADIKQT.AE...TS..L..GIRTQCILE.Q..N.FTRNCK................-PQLMVNLCQ.......KINAK..........MGGI.N....nGLL.L....AQK.PE........-......-..-....I...F...R.....K.P..V.I..................................IIGADVSHPAPGD...............RIRP..SIAACVGSLD...S...I.P.S...K....Y.R.....A.SI..R...VQ.....L..........E.......D....Q...EA......VAR....VEMikd...................... [...]
+Q5DFJ9_SCHJA/2-164          .........................................................................................lylr--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+Q5DG80_SCHJA/3-99           ........................................................................................hclyr--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+C4QPD2_SCHMA/595-831        ............................................................................................f-IMLILYD..--DLA..YGTIKRL.SD...LK..M..GIRTQCVRG.S..T.LRKP--................--NVFPNLLL.......KLNGK..........LGGV.N.....WIV.P....DLT.E-........-......-..-....Y...S...K.....D.L..I.M..................................VFGADVTHPAPTQt.............hQVLK..SVAAVVGSVS...P...E.L.M...R....Y.G.....A.IV..R...QQ.....A..........TtergnktT....R...EI......IDN....LHL......................... [...]
+C4QPD1_SCHMA/595-896        ............................................................................................f-IMLILYD..--DLA..YGTIKRL.SD...LK..M..GIRTQCVRG.S..T.LRKP--................--NVFPNLLL.......KLNGK..........LGGV.N.....WIV.P....DLT.E-........-......-..-....Y...S...K.....D.L..I.M..................................VFGADVTHPAPTQt.............hQVLK..SVAAVVGSVS...P...E.L.M...R....Y.G.....A.IV..R...QQ.....A..........TtergnktT....R...EI......IDN....LHL......................... [...]
+Q5DCI0_SCHJA/265-566        ...........................................................................................fl--LLILYD..--EYS..YPTIKRL.SD...LQ..M..GIRTQCVRG.R..T.LDKP--................--NVFPNLLL.......KLNGK..........LGGV.N.....WQI.P....DLI.KN........-......-..-....-...G...N.....E.L..I.M..................................VFGADVTHPAPTQn.............qQIRK..SVAAVIGSVS...P...D.L.M...R....Y.G.....V.VI..R...QQ.....A..........TtekgnktA....R...EI......IDD....MRL......................... [...]
+C4QPD0_SCHMA/628-928        ..........................................................................................afl--LLILYD..--EHA..YPAIKRL.SD...LQ..I..GIRTQCVRS.R..T.LDKP--................--NVFPNLLL.......KINGK..........LGGV.N.....WQI.P....DLI.KN........-......-..-....-...S...D.....E.L..I.M..................................VFGADVTHPAQTQ...............QVRK..SVAAVLGSVS...P...D.L.M...R....Y.G.....V.VI..R...QQ.....A..........TtekgnkaA....R...EI......IDD....MRL......................... [...]
+C4WWR5_ACYPI/1-266          .........................................................................................mfrm--------..-----..-------.--...--..-..---------.-..-.------................NTSTSSNILL.......KINSK..........LNGI.Nh...tLAI.R....SSP.PS........M......-..-....-...-...-.....E.G..A.I..................................IFGADVTHPSPEQ...............TTIP..SVAAVAASHD...T...Y.G.S...Q....Y.N.....M.EW..R...LQ.....S..........P.......K....V...EI......IQD....LED......................... [...]
+Q59HV7_BOMMO/706-1006       ............................................................................................f-LVVVVSG..RGRDY..YHKLKQI.AE...LK..V..GILTHVFKE.D..T.ATRRMN................-PQTARNILL.......KVNSK..........LMGI.N.....QAL.E....NRS.IP........-......Q..C....L...K...G.....G.A..V.M..................................IVGADVTHPSPDQ...............SNIP..SIAAVTASMD...T...K.C.Y...I....Y.N.....I.EL..S...IQ.....T..........P.......K....K...EM......IVQ....FED......................... [...]
+B5DIM9_DROPS/1-71           .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+B4NLX0_DROWI/695-993        ............................................................................................l-VIVIIPN..-RGTT..YDTIKQK.AE...LT..H..GILTQCIKQ.F..T.VQRK-L................NAQLIGNLLL.......KVNSK..........LNGI.N.....HKL.K....DDP.LT........R......-..L....-...-...-.....V.N..T.M..................................YLGADVTHPSPDQ...............RDIP..SVVGVAASHD...L...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........S.......T....A...EE......IED....MEG......................... [...]
+B4N082_DROWI/579-877        ............................................................................................l-VIVIIPQ..-IGVS..YDIIKQK.AE...LK..H..GILTQCLKQ.L..T.VERK-L................NPQLIGNVLL.......KINSK..........LNGI.N.....HKL.K....DEP.NR........L......-..L....-...-...-.....S.N..V.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MET......................... [...]
+B3NI38_DROER/838-1138       ..........................................................................................dla---FVIIP..QFGTS..YDIIKQK.AE...LQ..H..GILTQCIKQ.F..T.VERK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..T.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MYS......................... [...]
+Q2Q3X0_9MUSC/506-806        ..........................................................................................dla---FVIIP..QSGSS..YDIIKQK.AE...LQ..H..GILTQCIKQ.Y..T.FDRK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..A.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......T....L...EE......IED....MYA......................... [...]
+Q2Q3X2_DROYA/506-806        ..........................................................................................dla---FVIIP..QSGSS..YDIIKQK.AE...LQ..H..GILTQCIKQ.Y..T.FDRK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..A.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MYA......................... [...]
+Q2Q3X7_DROYA/506-806        ..........................................................................................dla---FVIIP..QSGSS..YDIIKQK.AE...LQ..H..GILTQCIKQ.Y..T.FDRK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..A.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MYA......................... [...]
+Q2Q3X4_DROYA/506-806        ..........................................................................................dla---FVIIP..QSGSS..YDIIKQK.AE...LQ..H..GILTQCIKQ.Y..T.FDRK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..A.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MYA......................... [...]
+B4PCH3_DROYA/843-1143       ..........................................................................................dla---FVIIP..QSGSS..YDIIKQK.AE...LQ..H..GILTQCIKQ.Y..T.FDRK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..A.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MYA......................... [...]
+Q2Q3X6_DROYA/506-806        ..........................................................................................dla---FVIIP..QSGSS..YDIIKQK.AE...LQ..H..GILTQCIKQ.Y..T.FDRK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..A.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MYA......................... [...]
+Q2Q3X8_DROYA/506-806        ..........................................................................................dla---FVIIP..QSGSS..YDIIKQK.AE...LQ..H..GILTQCIKQ.Y..T.FDRK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..A.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MYA......................... [...]
+B4IU14_DROYA/810-1110       ..........................................................................................dla---FVIIP..QSGSS..YDIIKQK.AE...LQ..H..GILTQCIKQ.Y..T.FDRK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..A.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MYA......................... [...]
+Q2Q3X1_DROTE/424-724        ..........................................................................................dla---FVIIP..QSGSS..YDIIKQK.AE...LQ..H..GILTQCIKQ.Y..T.FDRK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..A.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MYS......................... [...]
+C7LAD2_DROME/888-1187       ...........................................................................................la--IVIIPQ..-FRIS..YDTIKQK.AE...LQ..H..GILTQCIKQ.F..T.VERKCN................-NQTIGNILL.......KINSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...M.....K.N..T.M..................................YIGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...S....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MFS......................... [...]
+AGO2_DROME/885-1184         ...........................................................................................la--IVIIPQ..-FRIS..YDTIKQK.AE...LQ..H..GILTQCIKQ.F..T.VERKCN................-NQTIGNILL.......KINSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...M.....K.N..T.M..................................YIGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...S....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MFS......................... [...]
+Q2Q3W2_DROSI/511-810        ...........................................................................................la--IVIIPQ..-SRIS..YDTIKQK.AE...LQ..H..GILTQCVKQ.F..T.VERKCN................-DQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....V.N..T.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...S....Y.N.....M.QY..R...LQ.....R..........G.......T....L...EE......IED....MYT......................... [...]
+Q2Q3W7_DROSI/511-810        ...........................................................................................la--IVIIPQ..-SRIS..YDTIKQK.AE...LQ..H..GILTQCVKQ.F..T.VERKCN................-DQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....V.N..T.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...S....Y.N.....M.QY..R...LQ.....R..........G.......T....L...EE......IED....MYT......................... [...]
+Q2Q3W9_DROSI/511-810        ...........................................................................................la--IVIIPQ..-SRIS..YDTIKQK.AE...LQ..H..GILTQCVKQ.F..T.VERKCN................-DQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....V.N..T.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...S....Y.N.....M.QY..R...LQ.....R..........G.......T....L...EE......IED....MYT......................... [...]
+B4NVX8_DROSI/80-259         ...........................................................................................la--IVIIPQ..-SRIS..YDTIKQK.AE...LQ..H..GILTQCVKQ.F..T.VERKCN................-DQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....V.N..T.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...S....Y.N.....M.QY..R...LQ.....R..........G.......T....L...EE......IED....MYT......................... [...]
+B4HIG2_DROSE/1-224          .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.M..................................YMGADVTILSRSA...............-RDS..QCGRVAASHD...P...Y.G.A...S....Y.N.....M.QY..R...LQ.....R..........G.......T....L...EE......IED....MYT......................... [...]
+B4QL34_DROSI/606-729        .........................................................................................nvgc--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+B3M505_DROAN/688-988        ...........................................................................................dl--AFVIIP..NYGAS..YETIKQK.AE...LK..H..GILTQCIKQ.F..T.FERK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKL.K....E-D.TR........L......P..V....-...-...P.....K.N..A.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........A.......A....L...EE......IED....MES......................... [...]
+B4GTA7_DROPE/448-747        ............................................................................................d-VVFVIIP..NFGHL..YDVVKQK.AE...LQ..H..GILTQCIKR.V..T.VERKCN................-AQVIGSILL.......KVNAK..........LNGT.N.....HKL.R....D-D.L-........-......-..H....C...L...P.....K.K..T.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MES......................... [...]
+B4GTA5_DROPE/448-747        ............................................................................................d-VVFVIIP..NFGHL..YDVVKQK.AE...LQ..H..GILTQCIKR.V..T.VERKCN................-AQVIGSILL.......KVNSK..........LNGT.N.....HKL.R....D-D.L-........-......-..H....C...L...P.....K.K..T.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MES......................... [...]
+B5DT30_DROPS/694-993        ............................................................................................d-VVFVIIP..NSGHL..YDVVKQK.AE...LQ..H..GILTQCIKQ.I..T.VERKCN................-AQVIGNILL.......KVNSK..........LNGT.N.....HKL.R....D-D.L-........-......-..H....C...L...P.....K.K..T.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MES......................... [...]
+B4ISF4_DROPE/14-227         .........................................................................................tdvv--------..-----..----KQK.AE...LQ..H..GILTQCIKR.I..T.VERKCN................-AQVIGSILL.......KVNSK..........LNGT.N.....HKL.R....D-D.L-........-......-..H....C...L...P.....K.K..T.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MES......................... [...]
+B5DKZ0_DROPS/2-120          ...................................................................................tytvcqrrpc--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................FXGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MES......................... [...]
+B4HDJ4_DROPE/40-339         ............................................................................................d-VVFVIIP..NFGHL..YDVVKQK.AE...LQ..H..GILTQCIKR.I..T.VERKCN................-AQVIGSILL.......KVNAK..........LNGT.N.....HKL.R....D-D.L-........-......-..H....C...L...P.....K.K..T.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MES......................... [...]
+B4GTA6_DROPE/448-736        ............................................................................................d-VVFVIIP..NFGHL..YDVVKQK.AE...LQ..H..GILTQCIKR.I..T.VERKCN................-AQVIGSILL.......KVNAK..........LNGT.N.....HKL.R....D-D.L-........-......-..H....C...L...P.....K.K..T.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......V....L...EE......IED....MES......................... [...]
+B5DWW4_DROPS/3-186          ..........................................................................................rll--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....K.N..T.M..................................FLGADVSHPSPDQ...............REIP..SVVGVAATHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MES......................... [...]
+B4GDQ8_DROPE/669-968        ............................................................................................d-LVFVIIP..NVGRS..YDVVKQK.AE...LK..Y..GILTQCLKQ.I..T.VERKCN................-PQCIGNVLL.......KVNSK..........LNGI.N.....HKL.R....DDP.R-........-......-..-....C...L...L.....K.N..T.M..................................FLGADVTHPSPDQ...............WEMP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......T....L...EE......IED....MES......................... [...]
+B4GDQ6_DROPE/661-960        ............................................................................................d-LVFVIIP..NVGRS..YDVVKQK.AE...LK..Y..GILTQCLKQ.I..T.VERKCN................-PQCIGNVLL.......KVNSK..........LNGI.N.....HKL.R....DDP.R-........-......-..-....C...L...L.....K.N..T.M..................................FLGADVTHPSPDQ...............WEMP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......T....L...EE......IED....MES......................... [...]
+B5DYR9_DROPS/651-950        ............................................................................................d-LVFVIIP..NVGRS..YDVVKQK.AE...LK..H..GILTQCLKQ.I..T.VERKCN................-PQCIGNVLL.......KVNSK..........LNGI.N.....HKL.R....DDP.R-........-......-..-....C...L...L.....K.N..A.M..................................FLGADVTHPSPDQ...............WEMP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......T....L...EE......IED....MES......................... [...]
+B5DU45_DROPS/389-589        ............................................................................................d-LVFVIIP..NVGRS..YDVVKQK.AE...LK..H..GILTQCLKQ.I..T.VERKCN................-PQCIGNVLL.......KVNSK..........LNGI.N.....HKL.R....DDP.R-........-......-..-....C...L...L.....K.N..A.M..................................FLGADVTHPSPDQ...............WEMP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......T....L...EE......IED....MES......................... [...]
+B5DYR8_DROPS/41-340         ............................................................................................d-LVFVIIP..NVGRS..YDVVKQK.AE...LK..H..GILTQCLKQ.I..T.VERKCN................-PQCIGNVLL.......KVNSK..........LNGI.N.....HKL.R....DDP.R-........-......-..-....C...L...L.....K.N..A.M..................................FLGADVTHPSPDQ...............WEMP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......T....L...EE......IED....MES......................... [...]
+B5DY62_DROPS/643-942        ............................................................................................d-LVFVIIP..NSGPF..YDVVKQK.AE...LQ..H..GILTQCIKE.I..T.VLRKCN................-LQCIGNVLL.......KVNSK..........LNGI.N.....HKL.K....DDP.R-........F......-..-....-...L...L.....K.N..A.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MES......................... [...]
+B4GFG0_DROPE/449-748        ............................................................................................d-LVFVIIP..NSGPF..YDVVKQK.AE...LQ..H..GILTQCIKE.I..T.VLRKCN................-LQCIGNVLL.......KVNSK..........LNGI.N.....HKL.K....DDP.R-........F......-..-....-...L...L.....K.N..A.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MES......................... [...]
+B4GUA7_DROPE/624-923        ..........................................................................................dlv--YVIIPN..-SGSV..YDVVKQK.AE...LE..H..GILTQCIKE.N..T.VLRKCN................-LQCIGNVLL.......KVNSK..........LNGI.N.....HKL.K....DDP.L-........-......-..-....C...L...L.....K.N..A.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......D....L...EE......IQD....MES......................... [...]
+B5DQH3_DROPS/471-770        ..........................................................................................dlv--YVIIPN..-SGSV..YDVVKQK.AE...LE..H..GILTQCIKE.N..T.VLHKCN................-LQCIGNVLL.......KVNSK..........LNGI.N.....HKL.K....DDP.L-........-......-..-....C...L...L.....K.N..A.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......D....L...EE......IQD....MES......................... [...]
+B4IWV1_DROGR/788-1091       ............................................................................................l-VFVIIPS..RGGAS..YEMIKQR.AE...LH..C..GILTQCIKQ.N..N.VERR-L................DDQLVGNLLL.......KVNSK..........LNGI.N.....HKI.K....DDV.R-........I......K..L....-...-...-.....P.N..V.M..................................YLGADVTHPSPDQ...............RDIP..SVVGVAASHD...L...Y.G.G...S....Y.N.....M.QF..R...MQ.....S..........N.......SggrpR...EE......IDD....MQS......................... [...]
+B4LH85_DROVI/152-457        ............................................................................................d-LVFVILA..SRGPS..YDIIKQK.AE...LQ..Y..GILTQCIKQ.N..N.VERR-L................NGQLVGNILL.......KVNSK..........LNGV.N.....HKL.K....DDP.RT........M......L..-....-...-...-.....A.N..V.M..................................YLGADVTHPSPDQ...............RDIP..SVVGVAASHD...M...H.G.G...S....Y.N.....M.QY..R...LQ.....C..........G.......GgggaR...EE......IED....MES......................... [...]
+B4KUJ5_DROMO/715-1017       ...........................................................................................dl-VFVIIPS..-RGAT..YEVIKQK.AE...LQ..H..GILTQCIKH.N..N.VDRR-L................NAQLVGNILL.......KVNSK..........LNGI.N.....HKL.K....DDP.R-........T......Q..L....-...-...-.....T.N..V.M..................................YLGADVTHPSPDQ...............RDIP..SVVGVAASHD...A...Y.G.G...S....F.N.....M.QY..R...LQ.....Cga......ggR.......A....A...EE......ILD....MES......................... [...]
+B4G6N7_DROPE/19-133         ........................................................................................vrrei--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+B5DIM7_DROPS/517-815        ............................................................................................l-VLVVIPN..-SGNF..YDKLKQK.AE...LE..Y..GILTQCIKQ.A..T.VERRCN................-GQVVGNLLL.......KMNSK..........LNGI.N.....HTL.K....ADT.AA........L......-..-....-...-...P.....K.N..V.M..................................FVGADVTHPSPEQ...............REIP..SVVGVAASHD...A...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MES......................... [...]
+B4G6N0_DROPE/517-815        ............................................................................................l-VLVVIPN..-SGNF..YDKLKQK.AE...LE..Y..GILTQCIKQ.A..T.VERRCN................-GQMVGNLLL.......KMNSK..........LNGI.N.....HTL.K....ADT.AA........L......-..-....-...-...P.....K.N..V.M..................................FVGADVTHPTPEQ...............REIP..SVVGVAASHD...A...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MES......................... [...]
+B4G6N2_DROPE/1-37           .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+A9QW19_TRICA/79-190         ............................................................................................l-IIVVVPN..-SGPQ..YSFVKQA.AE...LN..V..GCLTQCIKE.R..T.IGRL--................NPQTVGNILL.......KINSK..........MNGT.N....hRLS.P....NSR.--........-......P..L....I...M...K.....R.P..C.M..................................IMGADVTHPSPDA...............RDIP..SVAAVTASHD...P...N.A.F...Q....Y.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+B0X641_CULQU/527-832        ............................................................................................f-VIVVIPG..-IGDH..YSRLKQK.AE...LV..V..GVLTSCVKG.N..T.VKNTRS................PLTVVNNILL.......KINGK..........TNGT.N.....HVV.Q....SPD.PK........I......P..L....-...I...K.....K.R..I.M..................................FVGADVTHPSPEQ...............STIP..SVVGVVASFD...R...N.G.F...R....Y.K.....P.HF..Q...LQ.....D..........P.......K....K...EM......IHG....LEA......................... [...]
+B0LJQ7_CULTA/1-148          .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+B0WRW8_CULQU/638-943        ...........................................................................................df-VIVVISG..-MGDQ..YSKVKQR.AE...LV..T..GLLTQCIKG.D..T.VFKKAG................DMSTINNIWL.......KINAK..........TNGT.N....hVLK.P....ESK.PP........L......-..-....-...I...R.....K.R..V.M..................................YVGADVTHPSPEQ...............TNIP..SVVGVAASYD...L...E.G.F...R....Y.N.....C.CY..R...LQ.....N..........P.......K....D...EM......IRD....LEN......................... [...]
+C5J0H4_AEDAE/655-961        ............................................................................................l-VFVVIPSpgRDGDV..YAKVKQK.AE...LC..V..GLLTQCIKS.F..T.LDKKRG................DMSTISNIWL.......KINAK..........TNGS.N....hVLA.K....NFK.PP........I......-..-....-...A...R.....K.T..V.M..................................YVGADVTHPSPEQ...............TNIP..SVVGVAASYD...L...E.G.F...R....Y.N.....C.CY..R...LQ.....G..........P.......K....D...EM......IRD....LQN......................... [...]
+B0LJQ8_AEDTR/1-254          .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................---------L.......KINAK..........TNGT.N....hLLA.P....GSK.PP........M......-..-....-...S...R.....K.D..V.M..................................YIGADVTHPSPEQ...............TNIP..SVVGVAASYD...L...E.G.F...R....Y.N.....C.CY..R...LQ.....N..........A.......K....D...EM......IRD....LEN......................... [...]
+Q5TVL2_ANOGA/535-839        ...........................................................................................vt--IVVLPS..-RGDA..YAKVKQK.AElasER..I..GLLTQCVKG.M..T.VAKKGT................DMSTLNNIML.......KINAK..........TNGT.N.....HCI.S....QVA.V-........-......P..P....L...G...R.....G.K..V.M..................................YIGADVTHPLSEN...............--EP..SVVGVAALYD...L...T.G.F...R....Y.N.....C.SV..R...LQ.....G..........A.......R....D...EM......IRD....LEN......................... [...]
+B4H1E3_DROPE/6-68           ...................................................................................sistdtenqa--------..-----..-------.-E...LE..H..GILTQCIIQ.A..T.GERRFN................-GQVMSNLLL.......KMNSK..........LNGI.N.....PTL.K....R--.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+Q70IH5_ARAHA/1-61           .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+B9ZU55_9TURB/580-893        ............................................................................................i-LFFALPR..KDSGY..YARVKVA.AD...QL..L..IVPSQVVVA.G..G.-KG---................ITQKVDLLLQ.......KVNAK..........LGGQ.N.....TDL.V....PMK.QD........-......P..A....M...E...N.....V.A..R.Llge............................pimFIGADVTHPDSHD..............eDGRP..SIAAVIGSSH...R...D.I.F...S....Y.A.....A.QV..R...AQ.....K..........Pia..krrA....K...ES......IDD....MQT......................... [...]
+C1DZY0_9CHLO/572-888        ............................................................................................i-VFCVLPK.fDNKHI..YNSIKEC.AE...IE..I..GVRTQCIMN.K..V.GGGGGG...............lNDQTLANIMQ.......KVNAK..........LGGI.N.....MLV.S....PVT.SP........NaaprspT..Q....L...F...S.....K.A..T.I..................................IFGGDVSHASPGS...............-QAS..SIAALVGNIN...R...S.C.T...Q....Y.V.....A.RL..S...AQ.....A..........N.......R....K...EM......IDD....LKS......................... [...]
+O61931_CAEEL/762-1081       .....................................................................................vysgnnne--------..--YND..YNVLKYL.AD...NK..Y..GIHTQGILE.K..S.LGVVGPs..............pKNCALTRLMV......eKVLGK..........VGTT.Hr...kLER.G....GAH.KT........W......T..I....F...T...Dp...aK.P..T.L..................................VLGIDVSHPSTRDret.........gnvLQKM..SAATVVGNID...L...D.V.T...E....F.R.....A.SS..R...IQ.....D..........T.......G....V...EC......LID....FSK......................... [...]
+A8WPC9_CAEBR/828-1145       ......................................................................................tlnlqrq--------..DFQND..YNLFKWL.AD...NH..V..GIFTQGMLY.K..T.FNGIGSt.............paTCKYTSQIVE.......KVLGK..........VGTT.-.....HRR.L....ERN.GE........H......K..S....W...K...Ki..vvE.P..T.L..................................LLGVDVSHPSTRDlmg.........edqVKRL..SVATVVGNID...L...D.C.T...E....Y.R.....A.SS..K...IQ.....D..........V.......G....E...ER......IVR....FEN......................... [...]
+A8XN44_CAEBR/716-1005       ..............................................................pgtildwfislkknldeykqsedevivplvf--------..-----..-------.--...--..-..---------.-..-.------................---------V.......IFEVR..........FTTL.N.....LER.Q....DFQ.ND........Y......-..-....-...-...T.....E.P..T.L..................................LLGVDVSHPSTRDlkg.........edhVKRL..SIATVVGNID...L...D.C.T...E....Y.R.....A.SS..K...IQ.....D..........V.......G....E...ER......IVR....FEN......................... [...]
+A8XRY5_CAEBR/161-269        ....................................................................................tstivnlnk--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+A8XS10_CAEBR/818-1134       ........................................................................................cerse--------..-FQND..YNLFKWM.AD...NE..V..GVFTQGLLY.K..T.FNSIGNt.............paSCRFTRLIVE.......KILGK..........IGTT.-.....HRR.L....ERD.GD........H......K..S....W...K...KlvnpaE.P..T.L..................................FLGVDVSHPSARDlkg.........ddpVKRL..SVATVVGNID...L...D.C.T...E....Y.R.....A.SS..K...LQ.....D..........V.......G....E...ER......IVR....FQE......................... [...]
+A8XP19_CAEBR/721-1037       ........................................................................................cerpd--------..-FQND..YNLFKWM.SD...NE..V..GVFTQGILY.K..T.FNSIGLs.............paPCKYTSQLVE.......KILGK..........VGTT.-.....HRR.L....ERD.GE........H......K..S....W...K...KlvnpaE.P..T.L..................................LLGVDVSHPSTRDlkg.........edpVKRL..SVATVVGNID...F...D.C.T...E....F.R.....A.SS..K...IQ.....D..........V.......G....E...ER......IVR....FDE......................... [...]
+A8PVW7_BRUMA/492-800        ............................................................................................l-MIFITPE..KNDDI..YGRIKVT.CD...KE..E..GVACQVILV.E..T.FLKMLGn.............peRNAVSHNICL.......KINVK..........LDGI.N....nEVA.R....NQN.YW........K......K..F....T..dK...E.....S.P..T.L..................................FMGIDVTHPPSGD...............TSAP..SIASIIGSLN...I...S.A.T...K....Y.A.....A.SL..K...IQ.....Q..........P.......G....V...EV......MTY....AVD......................... [...]
+B6VBQ1_CAEBE/1034-1381      ..........................................................................................lvf-IVVSGPH..KDQDA..YGYVKHH.CD...VN..L..GVVSQYVRA.E..T.AKLT--................ERNIYNTIAL.......KINAK..........LGGV.Nq...eLNF.S....E-N.AE........M......S..L....A...E...K.....E.ErkK.Lpl..............................kmFVGIDVTHPTTGS...............GIDF..SIAAVVASVN...A...S.G.T...K....Y.Q.....N.MI..V...TQ.....EecvpgerpgaH.......G....R...ER......TDI....LEG......................... [...]
+A8XVL1_CAEBR/571-952        ...........................................................................................ki-LLFIVFS..KRRWN.fYGFVKQF.CD...VE..L..GVASQHVTA.H..V.AKRALQdms.........shkpSKRIFYQIAL.......KINGK..........LGGV.Nq..elDWS.E....NAE.MT........V......E..E....K...E...K.....R.K..N.Mpl..............................rmYVGIDVTHPTNGS...............GIDY..SIAAIVASMN...P...G.G.T...V....Y.R.....N.MI..V...TQ.....E..........E.......N....R...PG......ERP....VAHgrertdilegk.............. [...]
+O46002_CAEEL/57-176         ...........................................................ieymaseynytikiknhfvyslapelskknpkvk--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---......................... [...]
+Q9XU82_CAEEL/618-985        ............................................................................................v-LMFIIIS.kRQLNA..YGFVKHY.CD...HT..I..GVANQHITS.E..T.VTKALAslr.........hekgSKRIFYQIAL.......KINAK..........LGGI.NqeldwSEI.A....EIS.PE........E......K..E....-...-...R.....R.K..T.Mpl..............................tmYVGIDVTHPTSYS...............GIDY..SIAAVVASIN...P...G.G.T...I....Y.R.....N.MI..V...TQ.....E..........E.......C....R...PG......ERA....VAHgrert.................... [...]
diff --git a/test/data/PF02171_full.stock b/test/data/PF02171_full.stock
new file mode 100644
index 0000000..c4abfdf
--- /dev/null
+++ b/test/data/PF02171_full.stock
@@ -0,0 +1,1739 @@
+# STOCKHOLM 1.0
+#=GS C4V9J2_NOSCE/489-791    AC C4V9J2.1
+#=GS B6K0R2_SCHJY/507-805    AC B6K0R2.1
+#=GS AGO1_SCHPO/500-798      AC O74957.1
+#=GS D0U267_CRYPA/639-939    AC D0U267.1
+#=GS A4QSM3_MAGGR/672-970    AC A4QSM3.1
+#=GS C7YHP8_NECH7/612-917    AC C7YHP8.1
+#=GS C9SSA6_VERA1/19-91      AC C9SSA6.1
+#=GS C9SGB5_VERA1/589-897    AC C9SGB5.1
+#=GS Q8J276_NEUCR/628-929    AC Q8J276.1
+#=GS D1ZPU0_SORMA/563-867    AC D1ZPU0.1
+#=GS A6S388_BOTFB/557-866    AC A6S388.1
+#=GS A7F377_SCLS1/445-754    AC A7F377.1
+#=GS Q2GQS4_CHAGB/345-418    AC Q2GQS4.1
+#=GS B2AKU3_PODAN/441-754    AC B2AKU3.1
+#=GS B6Q5R7_PENMQ/547-853    AC B6Q5R7.1
+#=GS B8M5N8_TALSN/546-852    AC B8M5N8.1
+#=GS C8V9S4_EMENI/46-154     AC C8V9S4.1
+#=GS Q5B3I7_EMENI/46-154     AC Q5B3I7.1
+#=GS C1G1H6_PARBD/510-817    AC C1G1H6.1
+#=GS C0S3N8_PARBP/535-823    AC C0S3N8.1
+#=GS C1GU57_PARBA/495-755    AC C1GU57.1
+#=GS C5G7J1_AJEDR/547-854    AC C5G7J1.1
+#=GS C5JJJ6_AJEDS/547-854    AC C5JJJ6.1
+#=GS C6HRE3_AJECH/547-854    AC C6HRE3.1
+#=GS C0NUS8_AJECG/547-854    AC C0NUS8.1
+#=GS A6RGK9_AJECN/547-854    AC A6RGK9.1
+#=GS C5FDD8_NANOT/542-847    AC C5FDD8.1
+#=GS D4AMR8_ARTBE/628-933    AC D4AMR8.1
+#=GS D4DBM7_TRIVC/515-807    AC D4DBM7.1
+#=GS C5P9D5_COCP7/668-975    AC C5P9D5.1
+#=GS C4JZ88_UNCRE/552-859    AC C4JZ88.1
+#=GS B6H4L5_PENCW/673-980    AC B6H4L5.1
+#=GS A2QDC5_ASPNC/643-949    AC A2QDC5.1
+#=GS Q2UKV9_ASPOR/543-849    AC Q2UKV9.1
+#=GS B8N3T1_ASPFN/436-742    AC B8N3T1.1
+#=GS Q0CNV7_ASPTN/543-854    AC Q0CNV7.1
+#=GS A1CKK4_ASPCL/543-849    AC A1CKK4.1
+#=GS A1D6W7_NEOFI/543-849    AC A1D6W7.1
+#=GS B0XXP5_ASPFC/564-870    AC B0XXP5.1
+#=GS Q4WXX3_ASPFU/564-870    AC Q4WXX3.1
+#=GS Q0U7V7_PHANO/645-956    AC Q0U7V7.2
+#=GS B2W8P0_PYRTR/611-920    AC B2W8P0.1
+#=GS B8BT49_THAPS/780-963    AC B8BT49.1
+#=GS C7SYH3_THAPS/780-1048   AC C7SYH3.1
+#=GS C7SYH3_THAPS/1070-1160  AC C7SYH3.1
+#=GS C7SYH2_PHATR/826-1176   AC C7SYH2.1
+#=GS B7G499_PHATR/1-107      AC B7G499.1
+#=GS A8Q5F0_BRUMA/545-849    AC A8Q5F0.1
+#=GS Q21691_CAEEL/673-1001   AC Q21691.1
+#=GS A8WNJ6_CAEBR/660-987    AC A8WNJ6.2
+#=GS A8WS47_CAEBR/435-755    AC A8WS47.2
+#=GS A8WQA0_CAEBR/671-998    AC A8WQA0.2
+#=GS Q9TXN7_CAEEL/609-935    AC Q9TXN7.1
+#=GS C8JQR1_CAEEL/591-918    AC C8JQR1.1
+#=GS YQ53_CAEEL/650-977      AC Q09249.1
+#=GS Q9N3L7_CAEEL/585-911    AC Q9N3L7.1
+#=GS A8XZY0_CAEBR/665-992    AC A8XZY0.2
+#=GS Q27GU1_CAEEL/511-833    AC Q27GU1.1
+#=GS Q19645_CAEEL/674-996    AC Q19645.1
+#=GS A8XRG0_CAEBR/648-970    AC A8XRG0.1
+#=GS A8QE08_BRUMA/711-1030   AC A8QE08.1
+#=GS A8WWH9_CAEBR/55-193     AC A8WWH9.1
+#=GS Q17600_CAEEL/19-157     AC Q17600.1
+#=GS Q9XVF1_CAEEL/588-902    AC Q9XVF1.1
+#=GS A8WWI1_CAEBR/598-920    AC A8WWI1.1
+#=GS Q8MU01_HETGL/745-963    AC Q8MU01.1
+#=GS A8XFJ6_CAEBR/595-895    AC A8XFJ6.2
+#=GS Q23415_CAEEL/40-350     AC Q23415.1
+#=GS GCC7_CAEEL/596-906      AC Q21770.1
+#=GS P91085_CAEEL/543-853    AC P91085.2
+#=GS A8WJ71_CAEBR/596-953    AC A8WJ71.2
+#=GS A8X957_CAEBR/565-899    AC A8X957.2
+#=GS O62275_CAEEL/594-924    AC O62275.1
+#=GS Q9N585_CAEEL/604-934    AC Q9N585.1
+#=GS A8P7Z4_BRUMA/1-302      AC A8P7Z4.1
+#=GS A8XEJ5_CAEBR/552-849    AC A8XEJ5.2
+#=GS Q86S33_CAEEL/548-852    AC Q86S33.1
+#=GS Q9GZG4_CAEEL/548-852    AC Q9GZG4.1
+#=GS Q86NJ8_CAEEL/548-852    AC Q86NJ8.1
+#=GS B3KLZ7_CAEEL/358-662    AC B3KLZ7.1
+#=GS O02095_CAEEL/574-878    AC O02095.2
+#=GS O16386_CAEEL/548-847    AC O16386.1
+#=GS A8XUC0_CAEBR/563-774    AC A8XUC0.2
+#=GS Q8MU01_HETGL/598-705    AC Q8MU01.1
+#=GS A8X254_CAEBR/555-701    AC A8X254.2
+#=GS A8X254_CAEBR/749-889    AC A8X254.2
+#=GS A8X022_CAEBR/492-805    AC A8X022.2
+#=GS A8X023_CAEBR/600-841    AC A8X023.2
+#=GS Q21495_CAEEL/61-336     AC Q21495.4
+#=GS C4LVV2_ENTHI/470-756    AC C4LVV2.1
+#=GS B0ET37_ENTDI/470-756    AC B0ET37.1
+#=GS B0ENU6_ENTDI/467-753    AC B0ENU6.1
+#=GS C4LVQ2_ENTHI/467-753    AC C4LVQ2.1
+#=GS C4LY31_ENTHI/438-711    AC C4LY31.1
+#=GS B0EI01_ENTDI/438-710    AC B0EI01.1
+#=GS A2DPV7_TRIVA/501-794    AC A2DPV7.1
+#=GS D2V7J4_NAEGR/498-769    AC D2V7J4.1
+#=GS C5LD15_9ALVE/718-952    AC C5LD15.1
+#=GS Q3SD94_PARTE/460-750    AC Q3SD94.1
+#=GS A0D4I7_PARTE/320-610    AC A0D4I7.1
+#=GS Q3SD95_PARTE/471-760    AC Q3SD95.1
+#=GS A0CE33_PARTE/2-210      AC A0CE33.1
+#=GS A0DEE4_PARTE/478-780    AC A0DEE4.1
+#=GS Q3SE57_PARTE/478-788    AC Q3SE57.1
+#=GS Q3SE52_PARTE/466-770    AC Q3SE52.1
+#=GS Q3SE58_PARTE/466-770    AC Q3SE58.1
+#=GS A0CB11_PARTE/463-767    AC A0CB11.1
+#=GS A4ZYY5_TETTH/495-793    AC A4ZYY5.1
+#=GS A4VE06_TETTH/14-183     AC A4VE06.1
+#=GS A4VE05_TETTH/347-645    AC A4VE05.1
+#=GS Q6UE79_TETTH/497-791    AC Q6UE79.1
+#=GS Q0GM58_TETTH/497-791    AC Q0GM58.1
+#=GS Q22NE2_TETTH/491-777    AC Q22NE2.1
+#=GS A8VSR3_TETTH/491-787    AC A8VSR3.1
+#=GS A4ZYY4_TETTH/474-761    AC A4ZYY4.1
+#=GS Q24HU6_TETTH/383-631    AC Q24HU6.1
+#=GS Q0MRE2_TETTH/533-834    AC Q0MRE2.1
+#=GS Q239A3_TETTH/603-904    AC Q239A3.1
+#=GS A0CR14_PARTE/559-847    AC A0CR14.1
+#=GS Q3SE51_PARTE/572-860    AC Q3SE51.1
+#=GS Q0Q5B1_9SPIT/472-767    AC Q0Q5B1.1
+#=GS Q8ISG8_STYLE/475-767    AC Q8ISG8.1
+#=GS Q86CV7_STYLE/475-767    AC Q86CV7.1
+#=GS Q8MQL1_TETTH/444-756    AC Q8MQL1.2
+#=GS Q8MXZ9_TETTH/444-756    AC Q8MXZ9.1
+#=GS Q23ND1_TETTH/444-756    AC Q23ND1.1
+#=GS Q3SE56_PARTE/450-741    AC Q3SE56.1
+#=GS Q3SE59_PARTE/450-741    AC Q3SE59.1
+#=GS Q9U5C9_PARCA/466-759    AC Q9U5C9.1
+#=GS Q3SE49_PARTE/467-759    AC Q3SE49.1
+#=GS Q3SE53_PARTE/460-752    AC Q3SE53.1
+#=GS A0E0B0_PARTE/455-747    AC A0E0B0.1
+#=GS Q3SE50_PARTE/446-748    AC Q3SE50.1
+#=GS Q3SE54_PARTE/446-748    AC Q3SE54.1
+#=GS Q3SE55_PARTE/446-748    AC Q3SE55.1
+#=GS Q54HL3_DICDI/867-1166   AC Q54HL3.1
+#=GS Q7KWS3_DICDI/669-964    AC Q7KWS3.1
+#=GS Q54G64_DICDI/590-885    AC Q54G64.1
+#=GS Q1ZXG9_DICDI/1063-1281  AC Q1ZXG9.1
+#=GS Q86HF5_DICDI/896-1194   AC Q86HF5.1
+#=GS D3B338_POLPA/992-1287   AC D3B338.1
+#=GS D3BMP8_POLPA/633-929    AC D3BMP8.1
+#=GS D2V2M6_NAEGR/28-326     AC D2V2M6.1
+#=GS D2VMG4_NAEGR/577-883    AC D2VMG4.1
+#=GS B7PDV6_IXOSC/541-835    AC B7PDV6.1
+#=GS B7Q5I1_IXOSC/446-741    AC B7Q5I1.1
+#=GS Q0H8V5_9CNID/70-239     AC Q0H8V5.1
+#=GS A7RFC2_NEMVE/557-857    AC A7RFC2.1
+#=GS A7T755_NEMVE/2-70       AC A7T755.1
+#=GS Q6RSS9_PODCA/561-853    AC Q6RSS9.1
+#=GS B2KTD9_9CNID/559-850    AC B2KTD9.1
+#=GS Q3ZUK2_PLADU/35-327     AC Q3ZUK2.1
+#=GS B5BUZ0_9ASCI/567-860    AC B5BUZ0.1
+#=GS C3XV23_BRAFL/67-195     AC C3XV23.1
+#=GS B4DYF7_HUMAN/569-859    AC B4DYF7.1
+#=GS PIWL3_HUMAN/578-868     AC Q7Z3Z3.2
+#=GS PIWL1_CHICK/561-853     AC A6N7Y9.1
+#=GS PIWL1_HUMAN/555-847     AC Q96J94.1
+#=GS D2HWM8_AILME/555-847    AC D2HWM8.1
+#=GS PIWL1_MOUSE/556-848     AC Q9JMB7.1
+#=GS D3ZTP9_RAT/556-848      AC D3ZTP9.1
+#=GS PIWL1_DANRE/552-844     AC Q8UVX0.1
+#=GS Q4T9Z1_TETNG/519-587    AC Q4T9Z1.1
+#=GS Q4T9Y6_TETNG/521-792    AC Q4T9Y6.1
+#=GS Q4T9Y9_TETNG/1-228      AC Q4T9Y9.1
+#=GS B9U223_ORYLA/549-841    AC B9U223.1
+#=GS PIWL4_HUMAN/546-838     AC Q7Z3Z4.2
+#=GS D2I3M6_AILME/487-786    AC D2I3M6.1
+#=GS A6X965_MOUSE/3-172      AC A6X965.1
+#=GS D3ZDI3_RAT/541-827      AC D3ZDI3.1
+#=GS PIWL4_RAT/541-834       AC Q4G033.2
+#=GS PIWL4_MOUSE/541-834     AC Q8CGT6.3
+#=GS D1LXB5_SACKO/1-252      AC D1LXB5.1
+#=GS C3XV22_BRAFL/1173-1299  AC C3XV22.1
+#=GS C3XV22_BRAFL/2983-3180  AC C3XV22.1
+#=GS C3XV22_BRAFL/1831-1964  AC C3XV22.1
+#=GS C3XV20_BRAFL/551-843    AC C3XV20.1
+#=GS Q9GPA6_STRPU/114-407    AC Q9GPA6.1
+#=GS Q9GPA7_STRPU/547-808    AC Q9GPA7.1
+#=GS Q9GPA8_STRPU/547-840    AC Q9GPA8.1
+#=GS B9ZU53_9TURB/586-879    AC B9ZU53.1
+#=GS B2Z3D6_SCHMD/665-960    AC B2Z3D6.1
+#=GS D2Z0E0_DUGJA/657-952    AC D2Z0E0.1
+#=GS D2A2S9_TRICA/552-839    AC D2A2S9.1
+#=GS A9ZSZ2_BOMMO/619-912    AC A9ZSZ2.1
+#=GS A7BJS3_BOMMO/619-912    AC A7BJS3.2
+#=GS A7LNN5_BOMMO/2-193      AC A7LNN5.1
+#=GS B4N2M0_DROWI/49-131     AC B4N2M0.1
+#=GS B4JP35_DROGR/334-622    AC B4JP35.1
+#=GS B7FNN2_DROME/566-845    AC B7FNN2.1
+#=GS A4GUJ7_DROME/566-848    AC A4GUJ7.1
+#=GS A7YFW6_DROME/299-494    AC A7YFW6.1
+#=GS B6IDV1_DROME/574-861    AC B6IDV1.1
+#=GS Q7PLK0_DROME/566-853    AC Q7PLK0.3
+#=GS A4GND8_DROME/566-853    AC A4GND8.1
+#=GS Q7PWT1_ANOGA/618-916    AC Q7PWT1.4
+#=GS B0WE96_CULQU/634-782    AC B0WE96.1
+#=GS B0WE95_CULQU/32-179     AC B0WE95.1
+#=GS Q170R5_AEDAE/637-930    AC Q170R5.1
+#=GS B7QEM1_IXOSC/88-370     AC B7QEM1.1
+#=GS PIWL2_XENTR/644-935     AC A8KBF3.1
+#=GS D2H044_AILME/665-956    AC D2H044.1
+#=GS PIWL2_HUMAN/668-959     AC Q8TC59.1
+#=GS D3ZRE1_RAT/666-957      AC D3ZRE1.1
+#=GS PIWL2_MOUSE/666-957     AC Q8CDG1.2
+#=GS PIWL2_ONCMY/749-1040    AC A6P7L8.1
+#=GS PIWL2_DANRE/741-1032    AC A2CEI6.2
+#=GS A5PL40_DANRE/7-278      AC A5PL40.1
+#=GS B9U224_ORYLA/729-1020   AC B9U224.1
+#=GS Q4RPK4_TETNG/383-660    AC Q4RPK4.1
+#=GS A7SQI3_NEMVE/441-733    AC A7SQI3.1
+#=GS A7T7C9_NEMVE/1-180      AC A7T7C9.1
+#=GS C3Z5S8_BRAFL/570-730    AC C3Z5S8.1
+#=GS B0FLQ9_STRPU/653-945    AC B0FLQ9.1
+#=GS C9E0T2_APIME/1-294      AC C9E0T2.1
+#=GS C9E0S9_APIME/551-753    AC C9E0S9.1
+#=GS C9E0S8_APIME/604-898    AC C9E0S8.1
+#=GS C3ZKW1_BRAFL/534-739    AC C3ZKW1.1
+#=GS B9ZU54_9TURB/593-893    AC B9ZU54.1
+#=GS C9E0T4_APIME/497-785    AC C9E0T4.1
+#=GS C9E0T3_APIME/525-813    AC C9E0T3.1
+#=GS A7LM14_BOMMO/414-612    AC A7LM14.1
+#=GS A8D8P8_BOMMO/594-885    AC A8D8P8.1
+#=GS Q7QG53_ANOGA/576-875    AC Q7QG53.3
+#=GS Q16IF2_AEDAE/569-868    AC Q16IF2.1
+#=GS Q16ZS2_AEDAE/361-660    AC Q16ZS2.1
+#=GS Q16ZS3_AEDAE/562-861    AC Q16ZS3.1
+#=GS B0W5T3_CULQU/510-809    AC B0W5T3.1
+#=GS B0W5P0_CULQU/552-851    AC B0W5P0.1
+#=GS Q171B3_AEDAE/547-846    AC Q171B3.1
+#=GS B0W5T4_CULQU/546-845    AC B0W5T4.1
+#=GS Q5TW24_ANOGA/530-829    AC Q5TW24.2
+#=GS Q16JS1_AEDAE/576-874    AC Q16JS1.1
+#=GS Q176R2_AEDAE/633-931    AC Q176R2.1
+#=GS B0XE75_CULQU/501-788    AC B0XE75.1
+#=GS Q16JS2_AEDAE/571-869    AC Q16JS2.1
+#=GS B0XE74_CULQU/592-891    AC B0XE74.1
+#=GS B0WYL9_CULQU/560-857    AC B0WYL9.1
+#=GS B4P152_DROYA/546-844    AC B4P152.1
+#=GS B3N4Z9_DROER/546-844    AC B3N4Z9.1
+#=GS Q95PE5_DROME/1-176      AC Q95PE5.1
+#=GS A8DYZ0_DROME/483-781    AC A8DYZ0.1
+#=GS O76922_DROME/554-852    AC O76922.1
+#=GS B4Q9X4_DROSI/545-843    AC B4Q9X4.1
+#=GS B4HWZ3_DROSE/549-847    AC B4HWZ3.1
+#=GS B4LV39_DROVI/546-843    AC B4LV39.1
+#=GS B4KHC1_DROMO/539-836    AC B4KHC1.1
+#=GS B4JBE4_DROGR/542-839    AC B4JBE4.1
+#=GS B4MUA1_DROWI/563-860    AC B4MUA1.1
+#=GS B4MUA0_DROWI/539-836    AC B4MUA0.1
+#=GS B3MJZ7_DROAN/562-859    AC B3MJZ7.1
+#=GS B4G765_DROPE/541-838    AC B4G765.1
+#=GS Q29P29_DROPS/540-837    AC Q29P29.2
+#=GS B4N6U3_DROWI/34-103     AC B4N6U3.1
+#=GS B4JBE1_DROGR/574-864    AC B4JBE1.1
+#=GS B4KHB7_DROMO/577-867    AC B4KHB7.1
+#=GS B4LV36_DROVI/558-849    AC B4LV36.1
+#=GS B4MU97_DROWI/591-882    AC B4MU97.1
+#=GS B4G753_DROPE/334-531    AC B4G753.1
+#=GS Q29CN1_DROPS/543-834    AC Q29CN1.2
+#=GS B3MJZ4_DROAN/563-854    AC B3MJZ4.1
+#=GS B3N502_DROER/538-829    AC B3N502.1
+#=GS B4P149_DROYA/538-829    AC B4P149.1
+#=GS Q6NNZ4_DROME/552-843    AC Q6NNZ4.1
+#=GS C0PTU6_DROME/566-857    AC C0PTU6.1
+#=GS PIWI_DROME/538-829      AC Q9VKM1.1
+#=GS Q6NP34_DROME/566-857    AC Q6NP34.1
+#=GS B4Q9X1_DROSI/538-829    AC B4Q9X1.1
+#=GS B4HWY9_DROSE/538-829    AC B4HWY9.1
+#=GS A8XEN9_CAEBR/501-812    AC A8XEN9.1
+#=GS Q17567_CAEEL/397-708    AC Q17567.1
+#=GS P90786_CAEEL/499-810    AC P90786.1
+#=GS PIWI1_SCHMD/493-790     AC Q2Q5Y9.1
+#=GS D2Z0D8_DUGJA/494-791    AC D2Z0D8.1
+#=GS PIWIL_DUGJA/502-800     AC Q2PC95.1
+#=GS PIWI2_SCHMD/516-815     AC Q2Q5Y8.1
+#=GS D2Z0D9_DUGJA/512-810    AC D2Z0D9.1
+#=GS B9ZU52_9TURB/589-885    AC B9ZU52.1
+#=GS A8VSS4_TETTH/479-774    AC A8VSS4.1
+#=GS A4ZYY6_TETTH/491-831    AC A4ZYY6.1
+#=GS Q23AZ6_TETTH/491-831    AC Q23AZ6.1
+#=GS C5LD15_9ALVE/568-697    AC C5LD15.1
+#=GS A0D5D7_PARTE/374-640    AC A0D5D7.1
+#=GS B9S0P9_RICCO/17-119     AC B9S0P9.1
+#=GS B7R785_9THEO/119-333    AC B7R785.1
+#=GS Q11QW7_CYTH3/390-605    AC Q11QW7.1
+#=GS Q9L1X1_STRCO/365-661    AC Q9L1X1.1
+#=GS D2M4C5_RHOPA/151-447    AC D2M4C5.1
+#=GS A3VQY4_9PROT/445-745    AC A3VQY4.1
+#=GS B9MH92_ACIET/439-730    AC B9MH92.1
+#=GS A5D4D9_PELTS/458-756    AC A5D4D9.1
+#=GS A0LL61_SYNFM/455-750    AC A0LL61.1
+#=GS D0BWJ3_9GAMM/401-693    AC D0BWJ3.1
+#=GS A4WYU7_RHOS5/454-756    AC A4WYU7.1
+#=GS B7K585_CYAP8/439-744    AC B7K585.1
+#=GS C1F5Q7_ACIC5/440-735    AC C1F5Q7.1
+#=GS Q1PV30_9BACT/383-655    AC Q1PV30.1
+#=GS D2QY15_PIRSD/353-529    AC D2QY15.1
+#=GS D2QGL1_SPILD/333-520    AC D2QGL1.1
+#=GS PIWI_ARCFU/110-406      AC O28951.1
+#=GS PIWI_ARCFU/110-406      DR PDB; 1w9h A; 110-406;
+#=GS PIWI_ARCFU/110-406      DR PDB; 2bgg A; 110-406;
+#=GS PIWI_ARCFU/110-406      DR PDB; 1ytu B; 110-406;
+#=GS PIWI_ARCFU/110-406      DR PDB; 1ytu A; 110-406;
+#=GS PIWI_ARCFU/110-406      DR PDB; 2w42 A; 110-406;
+#=GS PIWI_ARCFU/110-406      DR PDB; 2bgg B; 110-406;
+#=GS PIWI_ARCFU/110-406      DR PDB; 2w42 B; 110-406;
+#=GS Q96Z85_SULTO/134-346    AC Q96Z85.1
+#=GS A3VPN8_9PROT/165-321    AC A3VPN8.1
+#=GS D1JFX3_9ARCH/159-437    AC D1JFX3.1
+#=GS Q8U3D2_PYRFU/474-756    AC Q8U3D2.1
+#=GS Q8U3D2_PYRFU/474-756    DR PDB; 1z25 A; 474-756;
+#=GS Q8U3D2_PYRFU/474-756    DR PDB; 1z26 A; 474-756;
+#=GS Q8U3D2_PYRFU/474-756    DR PDB; 1u04 A; 474-756;
+#=GS D3S0S6_FERPL/490-768    AC D3S0S6.1
+#=GS Y1321_METJA/426-699     AC Q58717.1
+#=GS C7P7E7_METFA/420-692    AC C7P7E7.1
+#=GS B6YTQ5_THEON/463-751    AC B6YTQ5.1
+#=GS D3S7P9_9EURY/531-824    AC D3S7P9.1
+#=GS B5IR12_9EURY/528-819    AC B5IR12.1
+#=GS O67434_AQUAE/419-694    AC O67434.1
+#=GS O67434_AQUAE/419-694    DR PDB; 2nub A; 419-694;
+#=GS O67434_AQUAE/419-694    DR PDB; 2f8s A; 419-694;
+#=GS O67434_AQUAE/419-694    DR PDB; 1yvu A; 419-694;
+#=GS O67434_AQUAE/419-694    DR PDB; 2f8s B; 419-694;
+#=GS B4B3R2_9CHRO/1-219      AC B4B3R2.1
+#=GS A0YYT3_9CYAN/471-752    AC A0YYT3.1
+#=GS A8YDH3_MICAE/463-734    AC A8YDH3.1
+#=GS B0JXD6_MICAN/462-734    AC B0JXD6.1
+#=GS B0ADC8_9CLOT/432-721    AC B0ADC8.1
+#=GS C4L1M1_EXISA/321-484    AC C4L1M1.1
+#=GS C6QUV9_9BACI/2-48       AC C6QUV9.1
+#=GS B7GJX9_ANOFW/423-692    AC B7GJX9.1
+#=GS C1V6Q1_9EURY/608-882    AC C1V6Q1.1
+#=GS B9LVW4_HALLT/464-658    AC B9LVW4.1
+#=GS Q53W94_THET8/418-669    AC Q53W94.1
+#=GS Q746M7_THET2/418-669    AC Q746M7.1
+#=GS Q746M7_THET2/418-669    DR PDB; 3f73 B; 418-669;
+#=GS Q746M7_THET2/418-669    DR PDB; 3hvr A; 418-669;
+#=GS Q746M7_THET2/418-669    DR PDB; 3f73 A; 418-669;
+#=GS Q746M7_THET2/418-669    DR PDB; 3hxm A; 418-669;
+#=GS Q746M7_THET2/418-669    DR PDB; 3ho1 A; 418-669;
+#=GS Q746M7_THET2/418-669    DR PDB; 3hm9 A; 418-669;
+#=GS Q746M7_THET2/418-669    DR PDB; 3dlb A; 418-669;
+#=GS Q746M7_THET2/418-669    DR PDB; 3hjf A; 418-669;
+#=GS Q746M7_THET2/418-669    DR PDB; 3dlb B; 418-669;
+#=GS Q746M7_THET2/418-669    DR PDB; 3hvr B; 418-669;
+#=GS Q746M7_THET2/418-669    DR PDB; 3hk2 B; 418-669;
+#=GS Q746M7_THET2/418-669    DR PDB; 3hk2 A; 418-669;
+#=GS Q746M7_THET2/418-669    DR PDB; 3dlh B; 418-669;
+#=GS Q746M7_THET2/418-669    DR PDB; 3dlh A; 418-669;
+#=GS B1XJG0_SYNP2/307-599    AC B1XJG0.1
+#=GS Q2JSR3_SYNJA/437-712    AC Q2JSR3.1
+#=GS Q2JI93_SYNJB/454-728    AC Q2JI93.1
+#=GS Q8DKB1_THEEB/458-739    AC Q8DKB1.1
+#=GS Q5MZ10_SYNP6/441-718    AC Q5MZ10.1
+#=GS Q31N05_SYNE7/441-718    AC Q31N05.1
+#=GS A4HBN9_LEIBR/872-1190   AC A4HBN9.1
+#=GS A4HZ40_LEIIN/904-1226   AC A4HZ40.1
+#=GS Q4QCH4_LEIMA/899-1221   AC Q4QCH4.1
+#=GS Q4DYG9_TRYCR/791-1083   AC Q4DYG9.1
+#=GS Q6T6J9_9TRYP/784-1082   AC Q6T6J9.1
+#=GS D0A1P1_TRYBG/784-1082   AC D0A1P1.1
+#=GS Q38C22_9TRYP/783-1081   AC Q38C22.1
+#=GS A4HH63_LEIBR/16-225     AC A4HH63.1
+#=GS A4H6I4_LEIBR/673-882    AC A4H6I4.1
+#=GS Q6T6K0_9TRYP/549-877    AC Q6T6K0.1
+#=GS D0A4M3_TRYBG/571-899    AC D0A4M3.1
+#=GS Q389P5_9TRYP/560-888    AC Q389P5.1
+#=GS Q86QW7_GIALA/412-736    AC Q86QW7.1
+#=GS A8BCK6_GIALA/555-879    AC A8BCK6.1
+#=GS C6LTG5_GIALA/555-877    AC C6LTG5.1
+#=GS Q0TWJ6_PHANO/160-297    AC Q0TWJ6.2
+#=GS Q5KAT1_CRYNE/560-859    AC Q5KAT1.1
+#=GS Q5KAU3_CRYNE/580-879    AC Q5KAU3.1
+#=GS A7TMA9_VANPO/888-1209   AC A7TMA9.1
+#=GS A5E477_LODEL/107-430    AC A5E477.1
+#=GS C5MCT9_CANTT/554-879    AC C5MCT9.1
+#=GS B9WGS3_CANDC/555-882    AC B9WGS3.1
+#=GS Q5A1B6_CANAL/296-623    AC Q5A1B6.1
+#=GS C4YGL4_CANAL/554-881    AC C4YGL4.1
+#=GS B2WJ98_PYRTR/213-541    AC B2WJ98.1
+#=GS Q0U676_PHANO/647-830    AC Q0U676.2
+#=GS A7ISJ0_MYCPJ/514-830    AC A7ISJ0.1
+#=GS A6S1V9_BOTFB/6-263      AC A6S1V9.1
+#=GS A6SR68_BOTFB/1-284      AC A6SR68.1
+#=GS Q0UCE8_PHANO/551-880    AC Q0UCE8.2
+#=GS B2WJ35_PYRTR/419-708    AC B2WJ35.1
+#=GS Q0UCU3_PHANO/737-1044   AC Q0UCU3.2
+#=GS Q0UCG8_PHANO/473-701    AC Q0UCG8.2
+#=GS Q0UCH0_PHANO/670-999    AC Q0UCH0.2
+#=GS Q2HHM4_CHAGB/694-1033   AC Q2HHM4.1
+#=GS B2WJ32_PYRTR/383-592    AC B2WJ32.1
+#=GS B6HRB3_PENCW/625-938    AC B6HRB3.1
+#=GS D0U264_CRYPA/482-802    AC D0U264.1
+#=GS D1ZJ09_SORMA/711-1030   AC D1ZJ09.1
+#=GS Q1K6I6_NEUCR/733-1052   AC Q1K6I6.1
+#=GS Q9P8T1_NEUCR/582-901    AC Q9P8T1.1
+#=GS B2AR52_PODAN/574-886    AC B2AR52.1
+#=GS Q2GSQ8_CHAGB/651-969    AC Q2GSQ8.1
+#=GS A4RL50_MAGGR/721-1039   AC A4RL50.1
+#=GS C9ST09_VERA1/571-888    AC C9ST09.1
+#=GS C7YM23_NECH7/666-978    AC C7YM23.1
+#=GS A4R6J1_MAGGR/641-908    AC A4R6J1.1
+#=GS A2QG96_ASPNC/558-884    AC A2QG96.1
+#=GS B8MQK8_TALSN/682-995    AC B8MQK8.1
+#=GS B6QUK3_PENMQ/689-1001   AC B6QUK3.1
+#=GS C5GYE6_AJEDR/653-980    AC C5GYE6.1
+#=GS C5K303_AJEDS/770-890    AC C5K303.1
+#=GS C1GSN8_PARBA/1-191      AC C1GSN8.1
+#=GS C6H5C6_AJECH/26-168     AC C6H5C6.1
+#=GS A6RDB0_AJECN/9-157      AC A6RDB0.1
+#=GS C0S8I9_PARBP/1049-1137  AC C0S8I9.1
+#=GS B6H0X0_PENCW/641-959    AC B6H0X0.1
+#=GS A1C469_ASPCL/690-1008   AC A1C469.1
+#=GS A1DBD4_NEOFI/680-998    AC A1DBD4.1
+#=GS B0Y9U0_ASPFC/686-1004   AC B0Y9U0.1
+#=GS Q4WC92_ASPFU/686-1004   AC Q4WC92.1
+#=GS C8VMQ3_EMENI/660-979    AC C8VMQ3.1
+#=GS Q5BD61_EMENI/660-979    AC Q5BD61.1
+#=GS Q0CNH1_ASPTN/643-961    AC Q0CNH1.1
+#=GS B8MXT2_ASPFN/684-1002   AC B8MXT2.1
+#=GS Q2US02_ASPOR/573-891    AC Q2US02.1
+#=GS A2R8K3_ASPNC/710-1028   AC A2R8K3.1
+#=GS B8N7A8_ASPFN/617-954    AC B8N7A8.1
+#=GS Q2UBS9_ASPOR/578-915    AC Q2UBS9.1
+#=GS B2WES9_PYRTR/643-967    AC B2WES9.1
+#=GS A6QW60_AJECN/639-963    AC A6QW60.1
+#=GS B6QWK7_PENMQ/644-968    AC B6QWK7.1
+#=GS B8MGF3_TALSN/2-137      AC B8MGF3.1
+#=GS C7ZR18_NECH7/19-235     AC C7ZR18.1
+#=GS C5PJP0_COCP7/663-977    AC C5PJP0.1
+#=GS C4JG78_UNCRE/651-963    AC C4JG78.1
+#=GS D4ANV6_ARTBE/642-958    AC D4ANV6.1
+#=GS D4CZ86_TRIVC/642-958    AC D4CZ86.1
+#=GS C5FGF6_NANOT/649-965    AC C5FGF6.1
+#=GS C5JDT9_AJEDS/671-859    AC C5JDT9.1
+#=GS C5GX22_AJEDR/671-859    AC C5GX22.1
+#=GS C1G7F3_PARBD/674-979    AC C1G7F3.1
+#=GS C0RZ18_PARBP/688-993    AC C0RZ18.1
+#=GS C1GXU8_PARBA/683-1002   AC C1GXU8.1
+#=GS C5JDT9_AJEDS/580-664    AC C5JDT9.1
+#=GS C5GX22_AJEDR/580-664    AC C5GX22.1
+#=GS C0NMG7_AJECG/678-986    AC C0NMG7.1
+#=GS C6H291_AJECH/678-997    AC C6H291.1
+#=GS A6RB60_AJECN/291-610    AC A6RB60.1
+#=GS Q96UM0_BLUGR/565-886    AC Q96UM0.1
+#=GS A7E4W2_SCLS1/692-1008   AC A7E4W2.1
+#=GS A6RK26_BOTFB/654-970    AC A6RK26.1
+#=GS D0U265_CRYPA/712-1038   AC D0U265.1
+#=GS D0U266_CRYPA/635-957    AC D0U266.1
+#=GS D4B128_ARTBE/608-819    AC D4B128.1
+#=GS D4D326_TRIVC/587-798    AC D4D326.1
+#=GS C4JIN7_UNCRE/692-1007   AC C4JIN7.1
+#=GS C5FBF4_NANOT/570-628    AC C5FBF4.1
+#=GS C5P8C9_COCP7/682-993    AC C5P8C9.1
+#=GS B0D488_LACBS/608-916    AC B0D488.1
+#=GS A8P0D4_COPC7/619-925    AC A8P0D4.1
+#=GS A8P2K4_COPC7/589-903    AC A8P2K4.1
+#=GS B0E0C2_LACBS/610-916    AC B0E0C2.1
+#=GS B8PBB9_POSPM/331-616    AC B8PBB9.1
+#=GS B8PFP7_POSPM/371-656    AC B8PFP7.1
+#=GS B8PN24_POSPM/140-415    AC B8PN24.1
+#=GS A2DXK9_TRIVA/462-624    AC A2DXK9.1
+#=GS A1D5I6_NEOFI/71-143     AC A1D5I6.1
+#=GS B2VW51_PYRTR/606-910    AC B2VW51.1
+#=GS Q0UNU9_PHANO/666-973    AC Q0UNU9.1
+#=GS B8PJA4_POSPM/353-665    AC B8PJA4.1
+#=GS B0DLH7_LACBS/515-821    AC B0DLH7.1
+#=GS A8NFX5_COPC7/531-721    AC A8NFX5.1
+#=GS A8NFX0_COPC7/514-795    AC A8NFX0.1
+#=GS A8PFS7_COPC7/454-749    AC A8PFS7.1
+#=GS A8NXQ6_COPC7/547-849    AC A8NXQ6.1
+#=GS A8P6A7_COPC7/477-803    AC A8P6A7.1
+#=GS B0CXE0_LACBS/567-880    AC B0CXE0.1
+#=GS A8PFQ6_COPC7/458-767    AC A8PFQ6.1
+#=GS B0CYG1_LACBS/553-863    AC B0CYG1.1
+#=GS B0D2D0_LACBS/417-738    AC B0D2D0.1
+#=GS B2RFN0_OIKDI/550-850    AC B2RFN0.1
+#=GS C5K8K7_9ALVE/727-977    AC C5K8K7.1
+#=GS B9Q8Q1_TOXGO/379-692    AC B9Q8Q1.1
+#=GS Q1L1E2_TOXGO/161-474    AC Q1L1E2.1
+#=GS B6KA84_TOXGO/379-692    AC B6KA84.1
+#=GS Q1L2C9_TOXGO/379-692    AC Q1L2C9.1
+#=GS D2JRZ7_TOXGO/582-895    AC D2JRZ7.1
+#=GS B9PJN3_TOXGO/379-693    AC B9PJN3.1
+#=GS Q1L2C8_TOXGO/379-693    AC Q1L2C8.1
+#=GS Q4PLA9_PICGL/597-913    AC Q4PLA9.1
+#=GS A5BG74_VITVI/577-717    AC A5BG74.1
+#=GS AGO16_ORYSJ/535-844     AC Q6YSJ5.2
+#=GS B8B4Z4_ORYSI/515-824    AC B8B4Z4.1
+#=GS B9FWI9_ORYSJ/515-824    AC B9FWI9.1
+#=GS C0P9X1_MAIZE/1-253      AC C0P9X1.1
+#=GS C5YU43_SORBI/1-285      AC C5YU43.1
+#=GS O48771_ARATH/542-860    AC O48771.1
+#=GS B9T7B0_RICCO/516-824    AC B9T7B0.1
+#=GS B9IAL0_POPTR/521-830    AC B9IAL0.1
+#=GS A5CB61_VITVI/15-305     AC A5CB61.1
+#=GS Q3E984_ARATH/528-708    AC Q3E984.1
+#=GS Q56X15_ARATH/234-541    AC Q56X15.1
+#=GS Q84VQ0_ARATH/546-853    AC Q84VQ0.1
+#=GS Q84YI4_ARATH/550-857    AC Q84YI4.1
+#=GS Q9ZVD5_ARATH/577-885    AC Q9ZVD5.2
+#=GS AGO4A_ORYSJ/557-865     AC Q9SDG8.1
+#=GS B8ACN1_ORYSI/524-832    AC B8ACN1.1
+#=GS A2ZRR6_ORYSJ/650-958    AC A2ZRR6.1
+#=GS C0HGZ0_MAIZE/552-859    AC C0HGZ0.1
+#=GS B4FL08_MAIZE/45-352     AC B4FL08.1
+#=GS C5YX36_SORBI/564-870    AC C5YX36.1
+#=GS B8AUX7_ORYSI/565-872    AC B8AUX7.1
+#=GS AGO4B_ORYSJ/565-872     AC Q0JF58.1
+#=GS Q01MP5_ORYSA/565-872    AC Q01MP5.1
+#=GS B9EV67_ORYSJ/22-172     AC B9EV67.1
+#=GS B8ACN0_ORYSI/540-670    AC B8ACN0.1
+#=GS AGO15_ORYSJ/546-853     AC Q5NBN9.2
+#=GS B9HK80_POPTR/565-884    AC B9HK80.1
+#=GS B9SP45_RICCO/574-882    AC B9SP45.1
+#=GS Q2LFC1_NICBE/558-866    AC Q2LFC1.1
+#=GS Q2LFC2_NICBE/565-873    AC Q2LFC2.1
+#=GS A5AMR1_VITVI/53-183     AC A5AMR1.1
+#=GS B9SN14_RICCO/570-878    AC B9SN14.1
+#=GS B9HDH5_POPTR/582-891    AC B9HDH5.1
+#=GS B9IHG7_POPTR/573-882    AC B9IHG7.1
+#=GS A9SKW0_PHYPA/518-721    AC A9SKW0.1
+#=GS A9RNH7_PHYPA/593-893    AC A9RNH7.1
+#=GS A9SRY5_PHYPA/573-879    AC A9SRY5.1
+#=GS A9U2A5_PHYPA/597-903    AC A9U2A5.1
+#=GS A9SKW0_PHYPA/722-774    AC A9SKW0.1
+#=GS A9TD99_PHYPA/2-180      AC A9TD99.1
+#=GS A8JAG8_CHLRE/672-990    AC A8JAG8.1
+#=GS A8J9T3_CHLRE/1058-1164  AC A8J9T3.1
+#=GS A8J0N0_CHLRE/619-933    AC A8J0N0.1
+#=GS A8J0M9_CHLRE/675-993    AC A8J0M9.1
+#=GS D0MT95_PHYIN/497-796    AC D0MT95.1
+#=GS D0MT54_PHYIN/891-1191   AC D0MT54.1
+#=GS D0MT94_PHYIN/524-824    AC D0MT94.1
+#=GS Q8H714_PHYIN/1-173      AC Q8H714.1
+#=GS D0N1C0_PHYIN/587-890    AC D0N1C0.1
+#=GS D0N1B9_PHYIN/587-890    AC D0N1B9.1
+#=GS AGO1_ARATH/676-997      AC O04379.1
+#=GS Q3ECU7_ARATH/678-999    AC Q3ECU7.1
+#=GS A9T6J3_PHYPA/524-842    AC A9T6J3.1
+#=GS A9RG03_PHYPA/598-919    AC A9RG03.1
+#=GS A9RTW5_PHYPA/744-1065   AC A9RTW5.1
+#=GS PINH_ARATH/625-946      AC Q9XGW1.1
+#=GS B0FHH7_BRANA/614-935    AC B0FHH7.1
+#=GS B9RTJ1_RICCO/626-947    AC B9RTJ1.1
+#=GS B9HKB5_POPTR/631-952    AC B9HKB5.1
+#=GS B9HUQ6_POPTR/452-776    AC B9HUQ6.1
+#=GS PNH1_ORYSJ/620-941      AC Q69VD5.1
+#=GS B9FU05_ORYSJ/458-779    AC B9FU05.1
+#=GS C0PNQ0_MAIZE/1-267      AC C0PNQ0.1
+#=GS C5Z5J6_SORBI/617-938    AC C5Z5J6.1
+#=GS B9STN2_RICCO/586-907    AC B9STN2.1
+#=GS A5ARQ9_VITVI/592-892    AC A5ARQ9.1
+#=GS A1E5M2_PEA/696-1017     AC A1E5M2.1
+#=GS Q2PEW1_TRIPR/1-247      AC Q2PEW1.1
+#=GS A1E5M3_PEA/726-1047     AC A1E5M3.1
+#=GS Q2LFC4_NICBE/678-999    AC Q2LFC4.1
+#=GS B9SJV6_RICCO/687-1008   AC B9SJV6.1
+#=GS B9I4Y6_POPTR/688-1009   AC B9I4Y6.1
+#=GS B9N365_POPTR/308-629    AC B9N365.1
+#=GS B8B2X0_ORYSI/647-968    AC B8B2X0.1
+#=GS AGO1D_ORYSJ/669-990     AC Q5Z5B2.1
+#=GS B9FR04_ORYSJ/644-965    AC B9FR04.1
+#=GS C5Z2L1_SORBI/643-964    AC C5Z2L1.1
+#=GS C5XWS2_SORBI/656-978    AC C5XWS2.1
+#=GS B8AFI6_ORYSI/637-958    AC B8AFI6.1
+#=GS AGO1C_ORYSJ/638-959     AC Q6K972.1
+#=GS Q2LFC3_NICBE/604-925    AC Q2LFC3.1
+#=GS B1B5A8_DAUCA/736-1057   AC B1B5A8.1
+#=GS C5YY05_SORBI/736-1058   AC C5YY05.1
+#=GS B4FGY3_MAIZE/13-335     AC B4FGY3.1
+#=GS B8AGF0_ORYSI/693-1014   AC B8AGF0.1
+#=GS B9F1L3_ORYSJ/693-1014   AC B9F1L3.1
+#=GS AGO1A_ORYSJ/709-1030    AC Q6EU14.1
+#=GS C5YE15_SORBI/712-1033   AC C5YE15.1
+#=GS C0HEU9_MAIZE/87-408     AC C0HEU9.1
+#=GS B9FC11_ORYSJ/374-695    AC B9FC11.1
+#=GS AGO1B_ORYSJ/746-1067    AC Q7XSA2.3
+#=GS B8AT34_ORYSI/729-1050   AC B8AT34.1
+#=GS C7J0V9_ORYSJ/1-271      AC C7J0V9.1
+#=GS AGO17_ORYSJ/514-834     AC Q6H6C3.1
+#=GS B8AII3_ORYSI/514-834    AC B8AII3.1
+#=GS C5WPM0_SORBI/900-1216   AC C5WPM0.1
+#=GS AGO12_ORYSJ/693-1012    AC Q7Y001.2
+#=GS B9FAL8_ORYSJ/438-757    AC B9FAL8.1
+#=GS A2XKQ7_ORYSI/654-972    AC A2XKQ7.1
+#=GS C5WPM1_SORBI/697-1047   AC C5WPM1.1
+#=GS C0PMV6_MAIZE/89-412     AC C0PMV6.1
+#=GS B8APJ4_ORYSI/9-101      AC B8APJ4.1
+#=GS B9FEW4_ORYSJ/531-767    AC B9FEW4.1
+#=GS AGO11_ORYSJ/541-848     AC Q10F39.2
+#=GS B9MTL4_POPTR/505-810    AC B9MTL4.1
+#=GS B9SCN8_RICCO/632-949    AC B9SCN8.1
+#=GS AGOL_ARATH/638-958      AC Q9SJK3.1
+#=GS B9HQS2_POPTR/635-955    AC B9HQS2.1
+#=GS B9GEQ1_POPTR/548-869    AC B9GEQ1.1
+#=GS B8ALC4_ORYSI/596-877    AC B8ALC4.1
+#=GS AGO13_ORYSJ/471-770     AC Q852N2.1
+#=GS B9F6E0_ORYSJ/564-783    AC B9F6E0.1
+#=GS MEL1_ORYSJ/696-1016     AC Q851R2.1
+#=GS B8ALC8_ORYSI/696-1016   AC B8ALC8.1
+#=GS A3ANP6_ORYSJ/644-982    AC A3ANP6.1
+#=GS C5WX38_SORBI/703-1025   AC C5WX38.1
+#=GS C5WX34_SORBI/1-43       AC C5WX34.1
+#=GS B7ZZW2_MAIZE/663-969    AC B7ZZW2.1
+#=GS Q7FS89_MAIZE/11-170     AC Q7FS89.1
+#=GS Q8S478_MAIZE/38-188     AC Q8S478.1
+#=GS C5XBU2_SORBI/675-995    AC C5XBU2.1
+#=GS C5X6M9_SORBI/1-69       AC C5X6M9.1
+#=GS B9FVX3_ORYSJ/462-794    AC B9FVX3.1
+#=GS AGO14_ORYSJ/677-1009    AC Q6Z4F1.1
+#=GS B8B7Y0_ORYSI/653-985    AC B8B7Y0.1
+#=GS Q0DZI9_ORYSJ/119-248    AC Q0DZI9.2
+#=GS B8AFF9_ORYSI/534-832    AC B8AFF9.1
+#=GS B9F134_ORYSJ/36-347     AC B9F134.1
+#=GS Q0DZI9_ORYSJ/36-107     AC Q0DZI9.2
+#=GS Q0DZJ0_ORYSJ/35-101     AC Q0DZJ0.1
+#=GS B9FX53_ORYSJ/672-981    AC B9FX53.1
+#=GS AGO18_ORYSJ/747-1056    AC Q69UP6.1
+#=GS B8B5Y3_ORYSI/745-1054   AC B8B5Y3.1
+#=GS C5X8G4_SORBI/699-1002   AC C5X8G4.1
+#=GS C5X8G7_SORBI/41-220     AC C5X8G7.1
+#=GS C5WR49_SORBI/670-825    AC C5WR49.1
+#=GS C0PDS4_MAIZE/580-888    AC C0PDS4.1
+#=GS C5WR49_SORBI/585-661    AC C5WR49.1
+#=GS B7ZXH7_MAIZE/580-736    AC B7ZXH7.1
+#=GS A5BG29_VITVI/774-895    AC A5BG29.1
+#=GS A5BW27_VITVI/926-1238   AC A5BW27.1
+#=GS B9S921_RICCO/670-981    AC B9S921.1
+#=GS B9HXP0_POPTR/520-831    AC B9HXP0.1
+#=GS B9IL53_POPTR/1-160      AC B9IL53.1
+#=GS D3GBV1_LOTJA/669-981    AC D3GBV1.1
+#=GS Q9C793_ARATH/649-950    AC Q9C793.1
+#=GS A3AJI1_ORYSJ/584-892    AC A3AJI1.1
+#=GS AGO7_ORYSJ/709-1017     AC Q75HC2.2
+#=GS A2YQ96_ORYSI/716-1024   AC A2YQ96.1
+#=GS D0EYF3_MAIZE/683-995    AC D0EYF3.1
+#=GS C5WVP1_SORBI/688-996    AC C5WVP1.1
+#=GS A3AXD9_ORYSJ/720-1023   AC A3AXD9.1
+#=GS A2XXJ0_ORYSI/688-991    AC A2XXJ0.1
+#=GS AGO3_ORYSJ/720-1023     AC Q7XTS3.2
+#=GS Q00RR5_ORYSA/745-1048   AC Q00RR5.1
+#=GS B9FCH7_ORYSJ/626-928    AC B9FCH7.1
+#=GS AGO2_ORYSJ/687-989      AC Q7XTS4.2
+#=GS Q00RR6_ORYSA/693-995    AC Q00RR6.1
+#=GS A2XXI9_ORYSI/693-995    AC A2XXI9.1
+#=GS C5YG12_SORBI/746-1048   AC C5YG12.1
+#=GS C0PIX4_MAIZE/1-297      AC C0PIX4.1
+#=GS Q9SHF2_ARATH/841-1145   AC Q9SHF2.1
+#=GS Q9SHF3_ARATH/665-965    AC Q9SHF3.1
+#=GS Q8GX33_ARATH/191-491    AC Q8GX33.1
+#=GS B9SSM8_RICCO/639-934    AC B9SSM8.1
+#=GS A5AFZ6_VITVI/719-1022   AC A5AFZ6.1
+#=GS A5CBU3_VITVI/601-900    AC A5CBU3.1
+#=GS A5B8D3_VITVI/625-924    AC A5B8D3.1
+#=GS B9NA51_POPTR/676-973    AC B9NA51.1
+#=GS B9S3I1_RICCO/146-445    AC B9S3I1.1
+#=GS Q10P03_ORYSJ/678-756    AC Q10P03.1
+#=GS B9F6T7_ORYSJ/653-731    AC B9F6T7.1
+#=GS B8AK97_ORYSI/622-700    AC B8AK97.1
+#=GS A9T108_PHYPA/1-169      AC A9T108.1
+#=GS C6XVE0_PEDHD/320-460    AC C6XVE0.1
+#=GS B3SEP3_TRIAD/438-734    AC B3SEP3.1
+#=GS A8NJ50_BRUMA/1-61       AC A8NJ50.1
+#=GS TAG76_CAEEL/660-966     AC P34681.2
+#=GS A8XA10_CAEBR/683-989    AC A8XA10.2
+#=GS Q7JLZ2_CAEEL/652-958    AC Q7JLZ2.1
+#=GS Q21079_CAEEL/655-961    AC Q21079.2
+#=GS A8NGN0_BRUMA/1-135      AC A8NGN0.1
+#=GS C3ZN91_BRAFL/470-771    AC C3ZN91.1
+#=GS C3ZQ22_BRAFL/680-848    AC C3ZQ22.1
+#=GS B3VCG6_STRPU/599-900    AC B3VCG6.1
+#=GS B2RFN1_OIKDI/771-1072   AC B2RFN1.1
+#=GS C8TEF3_OIKDI/573-874    AC C8TEF3.1
+#=GS B7QCC4_IXOSC/509-810    AC B7QCC4.1
+#=GS A9NJ58_PENMO/569-898    AC A9NJ58.1
+#=GS D2XYX4_PENJP/572-901    AC D2XYX4.1
+#=GS A9NJ57_PENMO/572-901    AC A9NJ57.1
+#=GS D2DK65_PENJP/572-901    AC D2DK65.1
+#=GS D2DK66_PENJP/569-898    AC D2DK66.1
+#=GS Q071E1_PENMO/569-898    AC Q071E1.1
+#=GS A7XZ43_PENMO/569-898    AC A7XZ43.1
+#=GS A9QW17_TRICA/69-158     AC A9QW17.1
+#=GS A7BJS5_BOMMO/569-871    AC A7BJS5.1
+#=GS B4LJF3_DROVI/646-948    AC B4LJF3.1
+#=GS B4KTB5_DROMO/643-945    AC B4KTB5.1
+#=GS B4N5V9_DROWI/642-944    AC B4N5V9.1
+#=GS B4P449_DROYA/624-926    AC B4P449.1
+#=GS B4JW20_DROGR/647-949    AC B4JW20.1
+#=GS Q7KY08_DROME/607-909    AC Q7KY08.1
+#=GS B3NRF4_DROER/624-926    AC B3NRF4.1
+#=GS B4INL3_DROSE/624-926    AC B4INL3.1
+#=GS B4GGS7_DROPE/642-944    AC B4GGS7.1
+#=GS Q28ZU1_DROPS/642-944    AC Q28ZU1.1
+#=GS B3MHG1_DROAN/641-943    AC B3MHG1.1
+#=GS Q32KD4_DROME/641-943    AC Q32KD4.1
+#=GS Q960T1_DROME/258-560    AC Q960T1.1
+#=GS Q8T059_DROME/81-383     AC Q8T059.1
+#=GS Q27IQ2_DROSI/554-851    AC Q27IQ2.1
+#=GS Q27IR0_DROME/554-851    AC Q27IR0.1
+#=GS B0WFU8_CULQU/621-923    AC B0WFU8.1
+#=GS Q7PZ41_ANOGA/638-940    AC Q7PZ41.4
+#=GS Q16EE2_AEDAE/482-784    AC Q16EE2.1
+#=GS Q16M62_AEDAE/604-906    AC Q16M62.1
+#=GS Q4S7L6_TETNG/228-304    AC Q4S7L6.1
+#=GS D4AC38_RAT/515-816      AC D4AC38.1
+#=GS Q8BJP2_MOUSE/364-665    AC Q8BJP2.1
+#=GS A2VDG1_MOUSE/513-814    AC A2VDG1.1
+#=GS D2H607_AILME/507-808    AC D2H607.1
+#=GS B2RAD8_HUMAN/515-816    AC B2RAD8.1
+#=GS Q5TA58_HUMAN/440-741    AC Q5TA58.1
+#=GS A1L365_MOUSE/515-816    AC A1L365.1
+#=GS AGO1_HUMAN/515-816      AC Q9UL18.3
+#=GS B3KME0_HUMAN/440-741    AC B3KME0.1
+#=GS AGO1_MOUSE/515-816      AC Q8CJG1.1
+#=GS Q8CGU0_MOUSE/527-843    AC Q8CGU0.1
+#=GS Q4S7L5_TETNG/517-818    AC Q4S7L5.1
+#=GS AGO3_DANRE/518-819      AC A3KPK0.1
+#=GS A3KFX7_MOUSE/1-109      AC A3KFX7.1
+#=GS A3KFX6_MOUSE/1-140      AC A3KFX6.1
+#=GS Q4TBP2_TETNG/578-853    AC Q4TBP2.1
+#=GS Q7M738_MOUSE/426-707    AC Q7M738.1
+#=GS Q3TBP7_MOUSE/518-819    AC Q3TBP7.1
+#=GS AGO3_MOUSE/518-819      AC Q8CJF9.1
+#=GS Q4TF92_TETNG/161-225    AC Q4TF92.1
+#=GS AGO3_BOVIN/518-820      AC Q6T5B7.2
+#=GS D2H606_AILME/513-814    AC D2H606.1
+#=GS AGO3_HUMAN/518-819      AC Q9H9G7.2
+#=GS B4DY67_HUMAN/154-455    AC B4DY67.1
+#=GS B1ALI0_HUMAN/284-585    AC B1ALI0.1
+#=GS A8KA05_HUMAN/518-819    AC A8KA05.1
+#=GS B4E1P5_HUMAN/346-647    AC B4E1P5.1
+#=GS AGO3_CHICK/518-819      AC Q5ZLG4.1
+#=GS Q8CGT7_MOUSE/576-634    AC Q8CGT7.1
+#=GS Q4SXU1_TETNG/1-206      AC Q4SXU1.1
+#=GS D2HF39_AILME/511-813    AC D2HF39.1
+#=GS AGO2_RAT/517-819        AC Q9QZ81.2
+#=GS A1A563_MOUSE/517-819    AC A1A563.1
+#=GS AGO2_RABIT/497-799      AC O77503.2
+#=GS B0JYP5_BOVIN/517-819    AC B0JYP5.1
+#=GS Q6PHA2_MOUSE/94-396     AC Q6PHA2.1
+#=GS AGO2_HUMAN/516-818      AC Q9UKV8.3
+#=GS AGO2_HUMAN/516-818      DR PDB; 3luh B; 516-575;
+#=GS AGO2_HUMAN/516-818      DR PDB; 3luc B; 516-575;
+#=GS AGO2_HUMAN/516-818      DR PDB; 3luh A; 516-575;
+#=GS AGO2_HUMAN/516-818      DR PDB; 3lug C; 516-575;
+#=GS AGO2_HUMAN/516-818      DR PDB; 3lud B; 516-575;
+#=GS AGO2_HUMAN/516-818      DR PDB; 3luh C; 516-575;
+#=GS AGO2_HUMAN/516-818      DR PDB; 3lug A; 516-575;
+#=GS AGO2_HUMAN/516-818      DR PDB; 3luc A; 516-575;
+#=GS AGO2_HUMAN/516-818      DR PDB; 3luj C; 516-575;
+#=GS AGO2_HUMAN/516-818      DR PDB; 3luk B; 516-575;
+#=GS AGO2_HUMAN/516-818      DR PDB; 3luj B; 516-575;
+#=GS AGO2_HUMAN/516-818      DR PDB; 3luk C; 516-575;
+#=GS AGO2_HUMAN/516-818      DR PDB; 3lug B; 516-575;
+#=GS AGO2_HUMAN/516-818      DR PDB; 3luj A; 516-575;
+#=GS AGO2_HUMAN/516-818      DR PDB; 3lud C; 516-575;
+#=GS AGO2_HUMAN/516-818      DR PDB; 3luk A; 516-575;
+#=GS AGO2_HUMAN/516-818      DR PDB; 3luc C; 516-575;
+#=GS AGO2_HUMAN/516-818      DR PDB; 3lud A; 516-575;
+#=GS A4FVC0_HUMAN/465-767    AC A4FVC0.1
+#=GS Q8R3Q7_MOUSE/187-489    AC Q8R3Q7.2
+#=GS AGO2_MOUSE/517-819      AC Q8CJG0.2
+#=GS Q8CGT9_MOUSE/501-743    AC Q8CGT9.1
+#=GS AGO2_XENLA/519-821      AC Q6DCX2.1
+#=GS C0IN02_XENLA/519-821    AC C0IN02.1
+#=GS AGO2_XENTR/528-830      AC Q6DJB9.1
+#=GS AGO2_BOVIN/517-819      AC Q6QME8.1
+#=GS Q6P239_MOUSE/277-579    AC Q6P239.1
+#=GS Q8CGT7_MOUSE/455-570    AC Q8CGT7.1
+#=GS Q4RKH3_TETNG/508-822    AC Q4RKH3.1
+#=GS C9V4A2_CTEID/306-581    AC C9V4A2.1
+#=GS B0F0Y5_9TELE/526-828    AC B0F0Y5.1
+#=GS A8WKF9_CAEBR/562-864    AC A8WKF9.2
+#=GS A8P168_BRUMA/623-925    AC A8P168.1
+#=GS Q86B39_CAEEL/547-848    AC Q86B39.1
+#=GS O16720_CAEEL/566-867    AC O16720.2
+#=GS B2L7Q3_CAERE/1-268      AC B2L7Q3.1
+#=GS B2L7P9_CAERE/1-269      AC B2L7P9.1
+#=GS A8X4Z3_CAEBR/691-992    AC A8X4Z3.2
+#=GS Q3LTR7_CAEEL/668-969    AC Q3LTR7.1
+#=GS Q20578_CAEEL/660-961    AC Q20578.3
+#=GS B6VQ75_CAEEL/681-982    AC B6VQ75.1
+#=GS A8WWP9_CAEBR/632-910    AC A8WWP9.1
+#=GS Q9XVI3_CAEEL/574-882    AC Q9XVI3.2
+#=GS A7RQ46_NEMVE/511-812    AC A7RQ46.1
+#=GS D2XMQ5_SACKO/1-219      AC D2XMQ5.1
+#=GS C4Q6D1_SCHMA/608-835    AC C4Q6D1.1
+#=GS Q5C3Y0_SCHJA/4-157      AC Q5C3Y0.2
+#=GS D4A2P5_RAT/843-954      AC D4A2P5.1
+#=GS A7SCI6_NEMVE/496-743    AC A7SCI6.1
+#=GS Q4TF92_TETNG/239-305    AC Q4TF92.1
+#=GS Q4TBP2_TETNG/868-934    AC Q4TBP2.1
+#=GS Q8CGT8_MOUSE/1000-1102  AC Q8CGT8.1
+#=GS Q4R7V5_MACFA/1-211      AC Q4R7V5.1
+#=GS AGO4_HUMAN/509-820      AC Q9HCK5.2
+#=GS D2H608_AILME/505-816    AC D2H608.1
+#=GS A7MD27_HUMAN/509-820    AC A7MD27.1
+#=GS Q9NXV9_HUMAN/35-346     AC Q9NXV9.1
+#=GS D4A2P5_RAT/513-742      AC D4A2P5.1
+#=GS Q4SVE6_TETNG/553-864    AC Q4SVE6.1
+#=GS AGO4_MOUSE/509-820      AC Q8CJF8.2
+#=GS Q8BTF2_MOUSE/35-346     AC Q8BTF2.1
+#=GS Q8CGT8_MOUSE/660-885    AC Q8CGT8.1
+#=GS AGO4_XENLA/532-843      AC Q4KLV6.1
+#=GS AGO4_CHICK/442-753      AC Q5ZMW0.1
+#=GS B7QBT5_IXOSC/313-623    AC B7QBT5.1
+#=GS B7Q990_IXOSC/474-787    AC B7Q990.1
+#=GS B7Q811_IXOSC/611-920    AC B7Q811.1
+#=GS B7P230_IXOSC/468-776    AC B7P230.1
+#=GS Q5DFJ9_SCHJA/2-164      AC Q5DFJ9.1
+#=GS Q5DG80_SCHJA/3-99       AC Q5DG80.1
+#=GS C4QPD2_SCHMA/595-831    AC C4QPD2.1
+#=GS C4QPD1_SCHMA/595-896    AC C4QPD1.1
+#=GS Q5DCI0_SCHJA/265-566    AC Q5DCI0.1
+#=GS C4QPD0_SCHMA/628-928    AC C4QPD0.1
+#=GS C4WWR5_ACYPI/1-266      AC C4WWR5.1
+#=GS Q59HV7_BOMMO/706-1006   AC Q59HV7.2
+#=GS B5DIM9_DROPS/1-71       AC B5DIM9.1
+#=GS B4NLX0_DROWI/695-993    AC B4NLX0.1
+#=GS B4N082_DROWI/579-877    AC B4N082.1
+#=GS B3NI38_DROER/838-1138   AC B3NI38.1
+#=GS Q2Q3X0_9MUSC/506-806    AC Q2Q3X0.1
+#=GS Q2Q3X2_DROYA/506-806    AC Q2Q3X2.1
+#=GS Q2Q3X7_DROYA/506-806    AC Q2Q3X7.1
+#=GS Q2Q3X4_DROYA/506-806    AC Q2Q3X4.1
+#=GS B4PCH3_DROYA/843-1143   AC B4PCH3.1
+#=GS Q2Q3X6_DROYA/506-806    AC Q2Q3X6.1
+#=GS Q2Q3X8_DROYA/506-806    AC Q2Q3X8.1
+#=GS B4IU14_DROYA/810-1110   AC B4IU14.1
+#=GS Q2Q3X1_DROTE/424-724    AC Q2Q3X1.1
+#=GS C7LAD2_DROME/888-1187   AC C7LAD2.1
+#=GS AGO2_DROME/885-1184     AC Q9VUQ5.3
+#=GS Q2Q3W2_DROSI/511-810    AC Q2Q3W2.1
+#=GS Q2Q3W7_DROSI/511-810    AC Q2Q3W7.1
+#=GS Q2Q3W9_DROSI/511-810    AC Q2Q3W9.1
+#=GS B4NVX8_DROSI/80-259     AC B4NVX8.1
+#=GS B4HIG2_DROSE/1-224      AC B4HIG2.1
+#=GS B4QL34_DROSI/606-729    AC B4QL34.1
+#=GS B3M505_DROAN/688-988    AC B3M505.1
+#=GS B4GTA7_DROPE/448-747    AC B4GTA7.1
+#=GS B4GTA5_DROPE/448-747    AC B4GTA5.1
+#=GS B5DT30_DROPS/694-993    AC B5DT30.1
+#=GS B4ISF4_DROPE/14-227     AC B4ISF4.1
+#=GS B5DKZ0_DROPS/2-120      AC B5DKZ0.1
+#=GS B4HDJ4_DROPE/40-339     AC B4HDJ4.1
+#=GS B4GTA6_DROPE/448-736    AC B4GTA6.1
+#=GS B5DWW4_DROPS/3-186      AC B5DWW4.1
+#=GS B4GDQ8_DROPE/669-968    AC B4GDQ8.1
+#=GS B4GDQ6_DROPE/661-960    AC B4GDQ6.1
+#=GS B5DYR9_DROPS/651-950    AC B5DYR9.1
+#=GS B5DU45_DROPS/389-589    AC B5DU45.1
+#=GS B5DYR8_DROPS/41-340     AC B5DYR8.1
+#=GS B5DY62_DROPS/643-942    AC B5DY62.1
+#=GS B4GFG0_DROPE/449-748    AC B4GFG0.1
+#=GS B4GUA7_DROPE/624-923    AC B4GUA7.1
+#=GS B5DQH3_DROPS/471-770    AC B5DQH3.1
+#=GS B4IWV1_DROGR/788-1091   AC B4IWV1.1
+#=GS B4LH85_DROVI/152-457    AC B4LH85.1
+#=GS B4KUJ5_DROMO/715-1017   AC B4KUJ5.1
+#=GS B4G6N7_DROPE/19-133     AC B4G6N7.1
+#=GS B5DIM7_DROPS/517-815    AC B5DIM7.1
+#=GS B4G6N0_DROPE/517-815    AC B4G6N0.1
+#=GS B4G6N2_DROPE/1-37       AC B4G6N2.1
+#=GS A9QW19_TRICA/79-190     AC A9QW19.1
+#=GS B0X641_CULQU/527-832    AC B0X641.1
+#=GS B0LJQ7_CULTA/1-148      AC B0LJQ7.1
+#=GS B0WRW8_CULQU/638-943    AC B0WRW8.1
+#=GS C5J0H4_AEDAE/655-961    AC C5J0H4.1
+#=GS B0LJQ8_AEDTR/1-254      AC B0LJQ8.1
+#=GS Q5TVL2_ANOGA/535-839    AC Q5TVL2.3
+#=GS B4H1E3_DROPE/6-68       AC B4H1E3.1
+#=GS Q70IH5_ARAHA/1-61       AC Q70IH5.1
+#=GS B9ZU55_9TURB/580-893    AC B9ZU55.1
+#=GS C1DZY0_9CHLO/572-888    AC C1DZY0.1
+#=GS O61931_CAEEL/762-1081   AC O61931.2
+#=GS A8WPC9_CAEBR/828-1145   AC A8WPC9.2
+#=GS A8XN44_CAEBR/716-1005   AC A8XN44.2
+#=GS A8XRY5_CAEBR/161-269    AC A8XRY5.2
+#=GS A8XS10_CAEBR/818-1134   AC A8XS10.2
+#=GS A8XP19_CAEBR/721-1037   AC A8XP19.1
+#=GS A8PVW7_BRUMA/492-800    AC A8PVW7.1
+#=GS B6VBQ1_CAEBE/1034-1381  AC B6VBQ1.1
+#=GS A8XVL1_CAEBR/571-952    AC A8XVL1.2
+#=GS O46002_CAEEL/57-176     AC O46002.1
+#=GS Q9XU82_CAEEL/618-985    AC Q9XU82.2
+C4V9J2_NOSCE/489-791               ...........................................................................................is--LVVLPD..KSTAR..YEEIKRK.TE...TR..S..RMVTQCVLE.K..N.FSRLDN................-PQFAGNLLL.......KINSK..........LGGV.N.....FKV.D....K--.-E........F......S..V....V...K...G.....K.A..T.L..................................VIGIDVNHPGIGD...............LNSP..SVVAIVGGMN...N...E.L.T...S....F.K.....T.II..K...QQ.....D..........R.......R....H...EI......VEN....LKD.................. [...]
+B6K0R2_SCHJY/507-805               ............................................................................................y-LFFILDS..NSPEP..YATIKRL.CN...TK..F..GIPSQCALR.K..H.IEGA--................KPQYCANLGM.......KVNAK..........LGGV.N.....VHL.E....PKS.--........F......P..-....L...G...N.....I.P..T.I..................................ILGGDVYHPARGG...............-SGA..SIGSMVGSID...L...H.G.C...K....Y.T.....A.MS..R...AQ.....N..........R.......N....Q...EM......IQG....MKD.................. [...]
+AGO1_SCHPO/500-798                 ............................................................................................y-LFFILDK..NSPEP..YGSIKRV.CN...TM..L..GVPSQCAIS.K..H.ILQS--................KPQYCANLGM.......KINVK..........VGGI.N....cSLI.P....KSN.P-........-......-..-....L...G...N.....V.P..T.L..................................ILGGDVYHPGVGA...............-TGV..SIASIVASVD...L...N.G.C...K....Y.T.....A.VS..R...SQ.....P..........R.......H....Q...EV......IEG....MKD.................. [...]
+D0U267_CRYPA/639-939               ............................................................................................l-IFYIMPS..KDIVA..YERLKKS.MD...VR..V..GTLSQIVLA.P..H.VMKA--................APQYCSNVAT.......KVNAK..........LGGY.T.....SKL.K....E--.--........-......G..G....F...F...K.....V.P..T.M..................................ILGADISHGSFGQt.............gNLQA..SLAAITMSMD...P...D.A.I...T....Y.A.....A.GC..E...TN.....G..........Y.......R....V...EI......MTKd..tVRR.................. [...]
+A4QSM3_MAGGR/672-970               ............................................................................................l-IFFILPN..KSSIN..YERIKKS.AD...CR..Y..ALVTQCMQA.A..H.VRKN--................QAQYCSNVAM.......KVNAK..........LGGQ.T.....CKV.A....---.--........-......-..T....A...F...K.....K.P..T.M..................................MIGCDVSHAAPGA...............-QQA..SMAAITVSMD...K...D.C.A...R....Y.A.....A.AV..E...TN.....G..........Y.......R....C...EI......LLPq..nVRG.................. [...]
+C7YHP8_NECH7/612-917               ............................................................................................l-LFVVVSK..KNSGT..YERLKKS.AD...CR..F..GILTQVVLG.S..H.VQKN--................NGQYHSNVCM.......KVNAK..........LGGA.T....aCTP.P....LWK.TP........T......F..F....P...E...T.....R.P..T.I..................................MIGVDVSHTAPGG...............-TSP..STAAMTMSVD...K...D.A.T...R....Y.A.....A.LV..E...TN.....G..........Y.......R....V...EM......LTPg..nMRM.................. [...]
+C9SSA6_VERA1/19-91                 ............................................................................................p--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+C9SGB5_VERA1/589-897               ............................................................................................m-LFVIIRH..ANSGN..YERVKKS.AD...CR..F..GVLTQVVLS.R..H.VEKN--................QGQYHSNVAM.......KVNAK..........LGGT.T.....CRV.PhpnaKAP.RG........Q......P..P....F...F...S.....E.P..T.M..................................IMGLDVSHAGAGI...............-NSP..SMAAMTMSMD...K...D.A.C...R....Y.A.....A.VC..Q...TN.....G..........Y.......R....V...EM......LSPs..nTNE.................. [...]
+Q8J276_NEUCR/628-929               ...........................................................................................qi-VFVAVPD..KSAHV..YERLKKI.FE...CR..Y..GIVTQVLQA.D..H.VKKA--................QGQYISNVCM.......KVNAK..........LGGQ.T.....SSL.T....ATK.AK........S......H..N....F...F...I.....R.P..T.M..................................MIGVDVTHASPGS...............-DMP..SIAAMCASVD...V...E.G.Y...Q....Y.R.....A.AV..Q...TN.....G..........W.......H....N...EI......LTDe..nIST.................. [...]
+D1ZPU0_SORMA/563-867               ...........................................................................................qi-IFIVVPD..KTAHV..YERIKKI.FD...CR..Y..GVVTQVVQA.Q..H.VQKA--................NGQYLSNVCM.......KVNAK..........LGGQ.T.....SSL.T....ANK.TK........P......H..G....F...F...T.....R.P..T.M..................................MIGVDVSHASPGS...............-EMP..SIAAMCATVD...R...D.G.Y...Q....Y.R.....A.AV..Q...TN.....G..........W.......R....S...EV......LTNe..nIEA.................. [...]
+A6S388_BOTFB/557-866               ............................................................................................i-LFFILPD..RNSFM..YERFKKN.NE...CR..F..AMMSQMMNV.A..H.VAKA--................QPQYCSNVCM.......KVNAK..........LGGT.T.....CKV.A....DSK.PP........K......P..-....F...F...P.....R.A..T.M..................................VIGADVSHATPGS...............-PQS..SMACLTMSMD...S...T.A.C...R....Y.A.....A.AV..Q...TN.....G..........K.......R....V...EM......ISPd..nINS.................. [...]
+A7F377_SCLS1/445-754               ............................................................................................i-LFFIMPD..RNSFL..YERLKKN.NE...CR..F..GMMSQMMNI.A..H.VLKA--................QPQYCSNVCM.......KVNAK..........LGGT.T.....CKV.A....DVK.P-........L......K..P....F...F...P.....R.P..T.M..................................VIGADVSHASPGS...............-PQS..SMACLTMSMD...S...T.A.C...R....Y.A.....A.AV..Q...TN.....G..........N.......R....V...EM......ISKd..nINS.................. [...]
+Q2GQS4_CHAGB/345-418               ...........................................................................................qi-IFYILRD..KTAFV..YDRFKQA.ND...CG..V..ACLSQMLQA.Q..H.VRKA--................QGQYCSNVCM.......KVNSK..........LGGQ.T.....SKI.A....SRA.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+B2AKU3_PODAN/441-754               ...........................................................................................qi-IFFILKD..KSAWY..YERLKRS.SD...CR..Y..AMPTQMLNL.Q..Q.VRKG--................QAQYCSNVCL.......KVNAK..........LGGC.T....aVA-.V....KTQ.AGqplkpnsvA......P..H....F...D...N.....T.P..T.M..................................FIGADVSHGAAGH...............-LSP..SVAAMTVSMD...K...A.A.T...K....Y.A.....A.GA..Q...TN.....G..........W.......R....V...EI......IQPy..nMMQ.................. [...]
+B6Q5R7_PENMQ/547-853               ............................................................................................l-LLFIVPN..KDTLV..YHRIKKS.CD...CR..F..GVASQVLQR.A..H.VERK--................QPQYMSNVAM.......KVNAK..........LGGV.-.....-TC.K....VAP.-R........Q......D..S....L...N...R.....A.G..C.M..................................IIGADVSHAAPGS...............-TAA..SLTAISVSAD...Q...N.C.V...K....Y.M.....G.SC..Q...TG.....Y..........S.......R....V...EM......IDEd..nMKN.................. [...]
+B8M5N8_TALSN/546-852               ............................................................................................l-LLFVVPN..KDVLV..YHKIKKS.CD...SR..F..GVASQVLQS.A..H.VFKKQL................--QYMSNVAM.......KVNAK..........LGGV.-.....-TC.K....AAP.RQ........A......-..S....M...N...R.....P.G..C.M..................................IIGADVSHAAPGS...............-IAA..SLTAISVSAD...L...D.C.V...K....Y.M.....G.SA..Q...TG.....Y..........S.......R....V...EM......IDEh..nMKS.................. [...]
+C8V9S4_EMENI/46-154                ................................................................................feiyihlppgdhn--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+Q5B3I7_EMENI/46-154                ................................................................................feiyihlppgdhn--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+C1G1H6_PARBD/510-817               ............................................................................................l-LIFVVSE..KNAFH..YSRIKKS.CD...CR..F..GVPSQVLQA.T..Q.VVKC--................NGQYISNVLM.......KVNAK..........LGGT.-.....TAR.V....SSK.IT........K......G..L....-...-...L.....P.F..T.M..................................IIGADVSHSAPGS...............-PAP..SMAAVSVSMD...Q...F.G.G...R....Y.A.....G.AC..Q...TN.....G..........D.......H....V...EM......ISEa..nVES.................. [...]
+C0S3N8_PARBP/535-823               .............................................................................fnlrpellifvvlqat--------..-----..-------.--...--..-..---------.-..-.-QVV-K...............cNGQYISNVLM.......KVNAK..........LGGT.-.....TAR.V....SSK.IT........K......G..L....-...-...L.....P.F..T.M..................................IIGADVSHSAPGS...............-PAP..SMAAVSVSMD...Q...F.G.G...R....Y.A.....G.AC..Q...TN.....G..........D.......H....V...EM......ISEa..nVES.................. [...]
+C1GU57_PARBA/495-755               .........................................................................................vdtf--------..-----..-------.--...--..-..---------.-..-.------................----------.......-VNAK..........LGGT.-.....TAR.V....SSK.IT........K......G..L....-...-...L.....P.F..T.M..................................IIGADVSHSAPGS...............-PAP..SMAAVSVSMD...Q...F.G.G...R....Y.A.....G.AC..Q...TN.....G..........D.......H....V...EM......ISEa..nVES.................. [...]
+C5G7J1_AJEDR/547-854               ............................................................................................l-LIFIVMD..KNAFH..YTRIKKS.CD...CR..F..GVVSQVLQA.S..Q.VAKC--................NGQYISNVLM.......KVNAK..........LGGT.T.....-AR.I....ASK.IT........K......G..L....-...-...A.....P.F..S.M..................................IIGADISHSAPGS...............-FAP..SMAAMTVSMD...Q...F.G.G...R....Y.T.....G.AC..E...TN.....G..........D.......R....V...EM......ISQa..nIKS.................. [...]
+C5JJJ6_AJEDS/547-854               ............................................................................................l-LIFIVMD..KNAFH..YTRIKKS.CD...CR..F..GVVSQVLQA.S..Q.VAKC--................NGQYISNVLM.......KVNAK..........LGGT.T.....-AR.I....ASK.IT........K......G..L....-...-...A.....P.F..S.M..................................IIGADISHSAPGS...............-FAP..SMAAMTVSMD...Q...F.G.G...R....Y.T.....G.AC..E...TN.....G..........D.......R....V...EM......ISQa..nIKS.................. [...]
+C6HRE3_AJECH/547-854               ............................................................................................l-LIFIVMD..KNAFH..YTRVKKS.CD...CR..F..GVPSQVLQA.S..Q.VAKC--................NGQYISNVLM.......KVNAK..........LGGT.-.....TAR.I....SSK.IT........K......G..L....-...-...P.....P.Y..T.M..................................IIGADISHSSPGS...............-VAP..SMAAMTVSMD...Q...F.G.G...R....Y.T.....A.AC..E...TN.....G..........D.......H....V...EM......ISQa..nIKS.................. [...]
+C0NUS8_AJECG/547-854               ............................................................................................l-LIFIVMD..KNAFH..YTRVKKS.CD...CR..F..GVPSQVLQA.S..Q.VAKC--................NGQYISNVLM.......KVNAK..........LGGT.-.....TAR.I....SSK.IT........K......G..L....-...-...P.....P.Y..T.M..................................IIGADISHSSPGS...............-VAP..SMAAMTVSMD...Q...F.G.G...R....Y.T.....A.AC..E...TN.....G..........D.......H....V...EM......ISQa..nIKS.................. [...]
+A6RGK9_AJECN/547-854               ............................................................................................l-LIFIVMD..KNAFH..YTRVKKS.CD...CR..F..GVPSQVLQA.S..Q.VAKC--................NGQYISNVLM.......KVNAK..........LGGT.-.....TAR.I....SSK.IT........K......G..L....-...-...P.....P.Y..T.M..................................IIGADISHSSPGS...............-VAP..SMAAMTVSMD...Q...F.G.G...R....Y.T.....A.AC..E...TN.....G..........D.......H....V...EM......ISQa..nIRS.................. [...]
+C5FDD8_NANOT/542-847               ............................................................................................l-MIFVVAD..RQSFH..YLRIKKS.CD...CR..F..GVPSQVLQG.Q..Q.VAKC--................NGQYISNVLM.......KINAK..........LGGT.T.....-AR.A....VSK.HS........S......-..-....G...L...P.....P.Y..T.M..................................IIGSDVSHSSPGS...............-FSP..SMAAMTVSMD...T...F.G.G...R....Y.T.....A.GC..E...TN.....G..........E.......R....V...EL......ISQa..nIKS.................. [...]
+D4AMR8_ARTBE/628-933               ............................................................................................l-MIFVVAD..KQSFH..YLRIKKS.CD...CR..F..GVPSQVLQG.Q..Q.VVKC--................NGQYISNVLM.......KINAK..........LGGT.T.....ARA.V....SKQ.CS........-......-..-....G...L...P.....P.F..T.M..................................IIGADVSHSSPGS...............-FSP..SMAAMTVSMD...T...F.G.G...R....Y.T.....A.GC..E...TN.....G..........E.......R....V...EL......ISQa..nIKS.................. [...]
+D4DBM7_TRIVC/515-807               ............................................................................................l-MIFVVAD..KQSFH..YLRIKKS.CD...CR..F..GVPSQVLQG.Q..Q.VGKC--................NGQYISNVLM.......KINAK..........LGGT.T.....ARA.V....SKQ.CS........-......-..-....G...L...P.....P.F..T.M..................................IIGADVSHSSPGS...............-FSP..SMAAMTVSMD...T...F.G.G...R....Y.T.....A.GC..E...TN.....G..........E.......R....V...EL......ISQa..nIRS.................. [...]
+C5P9D5_COCP7/668-975               ............................................................................................l-LILIVQD..RHSFH..YLRIKKS.CD...CR..F..GVPSQVLQG.R..Q.VVKG--................SGQYISNVLM.......KINAK..........LGGT.-.....TAR.S....HSR.Y-........-......N..T....S...L...P.....P.F..T.M..................................IIGADVSHSSPGS...............-YAP..SMASFTVCMD...T...F.G.G...R....Y.T.....A.GC..E...TN.....G..........E.......R....R...EI......ISPl..nIKE.................. [...]
+C4JZ88_UNCRE/552-859               ............................................................................................i-LILVVQD..KQSFH..YLRIKKS.CD...CR..F..GVPSQVLQG.Q..Q.VVKG--................SPQYISNVLM.......KVNAK..........LGGT.T....aRAI.S....KYN.PS........L......P..-....-...-...-.....P.Y..T.M..................................VIGADVSHASPGS...............-HAP..SMASFTVCMD...T...F.G.G...R....Y.N.....A.GC..E...TN.....G..........E.......R....R...EI......ISPa..nIRD.................. [...]
+B6H4L5_PENCW/673-980               ............................................................................................l-MVFIVPD..KDSFV..YLRIKKS.SD...CR..Y..GTPSQVLQA.A..H.CINN--................RPQYHANVLM.......KVNAK..........LGGI.-.....-TA.R....AVP.KS........K......S..S....G...L...R.....P.G..S.M..................................IIGADVTHPMMGV...............-WTP..SLAAMSVSAN...S...T.A.T...R....Y.M.....G.GC..E...TN.....G..........D.......R....I...EI......IRDk..vVEY.................. [...]
+A2QDC5_ASPNC/643-949               ............................................................................................l-LLVIVPD..KNSFT..YTRIKKS.CD...CR..W..GVPSQVMQS.T..H.VIKG--................NAQYISNVLM.......KVNAK..........LGGV.T.....SRA.V....SKV.Q-........-......G..A....S...L...R.....P.G..S.I..................................IIGADVTHPPMGV...............-WSP..SMAALSVSKD...P...Y.G.S...S....Y.F.....G.SC..E...AN.....M..........D.......R....V...EI......ISRt..sMEF.................. [...]
+Q2UKV9_ASPOR/543-849               ............................................................................................l-LLIIVPD..KNSFT..YLRIKKS.CD...CR..W..GVPSQVLQS.A..H.VAKA--................NPQYISNVLM.......KVNAK..........LGGT.T.....A--.R....IIP.KV........N......D..A....S...L...K.....P.M..T.M..................................IIGADVTHPTIGV...............-WSP..SMAAVSVCMD...T...F.G.G...R....Y.W.....G.AC..E...TN.....G..........D.......R....V...EV......IARa..nMEH.................. [...]
+B8N3T1_ASPFN/436-742               ............................................................................................l-LLIIVPD..KNSFT..YLRIKKS.CD...CR..W..GVPSQVLQS.A..H.VAKA--................NPQYISNVLM.......KVNAK..........LGGT.T.....A--.R....IIP.KV........N......D..A....S...L...K.....P.M..T.M..................................IIGADVTHPTIGV...............-WSP..SMAAVSVCMD...T...F.G.G...R....Y.W.....G.AC..E...TN.....G..........D.......R....V...EV......IARa..nMEH.................. [...]
+Q0CNV7_ASPTN/543-854               ............................................................................................l-LVVIVAD..KNSFN..YTRIKKS.CD...CR..W..GVPSQLLQA.A..Q.VAKN--................NPQYISNVLM.......KVNAK..........LGGT.T.....AKI.I....PKT.P-........-......D..A....T...L...K.....P.M..S.M..................................IIGADVTHSPLGV...............-WSP..SMAAISVCAD...T...F.G.G...R....Y.W.....G.AC..E...AN.....G..........E.......R....N...EI......INRa..nMEH.................. [...]
+A1CKK4_ASPCL/543-849               ............................................................................................l-LLIIVPD..KNSFT..YTRIKKS.CD...CR..W..GVPSQVLQS.G..H.VIKM--................NPQYASNVLM.......KVNAK..........LGGT.-.....-TA.R....AMP.KI........T......E..A....S...L...R.....P.R..S.M..................................IIGADVTHSPLGV...............-WSP..SMAAMSVCMD...T...F.G.G...R....Y.W.....G.AC..E...AN.....G..........D.......R....N...EI......IASs..nIEV.................. [...]
+A1D6W7_NEOFI/543-849               ............................................................................................l-LLIIVPD..KNSFT..YTRIKKS.CD...CR..W..GVPSQVLQS.G..H.CVKL--................NPQYASNVLM.......KVNAK..........LGGT.-.....-TA.R....AVP.KV........T......E..A....T...L...R.....P.R..S.M..................................IIGADVTHSPLGV...............-WSP..SMAAMSVCMD...A...F.G.G...R....Y.W.....G.AC..E...AN.....G..........D.......R....L...EI......IATs..nIEV.................. [...]
+B0XXP5_ASPFC/564-870               ............................................................................................l-LLIIVPD..KNSFT..YTRIKKS.CD...CR..W..GVPSQVLQS.G..H.CVKL--................NPQYASNVLM.......KVNAK..........LGGT.-.....-TA.R....AVP.KV........T......D..A....T...L...R.....P.R..S.M..................................IIGADVTHPSLGV...............-WSP..SMAAMSVCMD...T...F.G.G...R....Y.W.....G.AC..E...AN.....G..........D.......R....L...EI......IATs..nIEV.................. [...]
+Q4WXX3_ASPFU/564-870               ............................................................................................l-LLIIVPD..KNSFT..YTRIKKS.CD...CR..W..GVPSQVLQS.G..H.CVKL--................NPQYASNVLM.......KVNAK..........LGGT.-.....-TA.R....AVP.KV........T......D..A....T...L...R.....P.R..S.M..................................IIGADVTHPSLGV...............-WSP..SMAAMSVCMD...T...F.G.G...R....Y.W.....G.AC..E...AN.....G..........D.......R....L...EI......IATs..nIEV.................. [...]
+Q0U7V7_PHANO/645-956               ............................................................................................f-LFFVVND..RNVDV..YRRIKKS.CD...IR..F..GVASQVLQA.K..H.VMSA--................SPQYISNVCM.......KVNAK..........LGGC.T....sVAK.S....NVI.PK........V.....aP..K....S...P...S.....I.P..T.M..................................VVGADVSHPAPGAg.............sSEAA..SFAAITVSAD...P...F.F.A...K....Y.W.....A.EV..Q...TN.....G..........N.......R....V...EM......VTTs..nIDE.................. [...]
+B2W8P0_PYRTR/611-920               ............................................................................................n-FMFFIVN.dRNVEV..YRRIKKS.CD...IR..F..GVASQCLQA.K..H.VLSA--................SPQYISNVCM.......KVNAK..........LGGC.TsvaksQLI.P....KIA.--........-......P..K....S...A...S.....I.P..T.M..................................VVGADVSHPAPGAa.............sGEAA..SFAAITVSAD...A...Y.F.V...K....Y.W.....A.EC..N...TN.....G..........N.......R....V...EM......VTTt..nIYE.................. [...]
+B8BT49_THAPS/780-963               ............................................................................................i-MLVVLPD..KGKAL..YDHVKFV.SN...QC..S..GVQTQCASL.D..T.FNRQRN................KEQYSTALAT.......KMNAK..........LSTV.E.....DGA.I....AWR.GA........V......D..W....V...N...Q.....C.H..T.L..................................VIGIGMAHGMGRG...............--AE..TIVGISTCLD...G...Q.C.F...R....L.L.....H.SA..Y...VQ.....K..........K.......A....D...TL......SKD...aMID.................. [...]
+C7SYH3_THAPS/780-1048              ............................................................................................i-MLVVLPD..KGKAL..YDHVKFV.SN...QC..S..GVQTQCASL.D..T.FNRQRN................KEQYSTALAT.......KMNAK..........LSTV.E.....DGA.I....AWR.GA........V......D..W....V...N...Q.....C.H..T.L..................................VIGIGMAHGMGRVl............lvMSVPpyHLIAISLVF-...F...V.L.L...K....V.P.....K.RA..Y...VQ.....K..........K.......A....D...TL......SKD...aMID.................. [...]
+C7SYH3_THAPS/1070-1160             .......................................................................................sssass--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+C7SYH2_PHATR/826-1176              ...........................................................................................lm--FAVIPT..KDVST..YAFVKYL.SH...VE..F..GIPSQVMVE.E..S.YQNQRS...............kTEAYCAGIAL.......KLNTK..........LSNSlNr..stAWS.I....YSG.TA........R......Q..W....L...M...D.....T.P..T.M..................................IMGYCVASGPGQD...............--SK..SIVVGTASLD...V...G.G.T...H....C.C.....H.DK..R...VQ.....S..........K.......S....H...IV......DSD...vLEE.................. [...]
+B7G499_PHATR/1-107                 .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+A8Q5F0_BRUMA/545-849               .............................................................................itkdrydpvhaisnrg--------..-----..-------.--...--..-..---------.-..-.------................AEMTLDNLVM.......KMNLK..........LGGI.Nh...aLTS.S....AAFlSK........N......R..L....T...N...N.....V.M..D.Mewlr..........................hsrmFFGLDMSHAAPQSlyer......qaqvpPSEP..TIVAMTFSC-...G...E.P.F...A....M.Q.....G.EY..W...MQ.....E..........P.......R....L...HV......VKF....LKE.................. [...]
+Q21691_CAEEL/673-1001              .............................................................................................TIVFGIIA..EKRPD..MHDILKY.FE...EK..L..GQQTIQISS.E..T.ADKFMRd.............hgGKQTIDNVIR.......KLNPK..........CGGT.Nf...lIDV.P....ESV.GH........R......V..V....C...N...N.....S.A..E.Mrakl.........................yaktqFIGFEMSHTGARTrfdi......qkvmfDGDP..TVVGVAYSL-...K...H.S.A...Q....L.G.....G.FS..Y...FQ.....E..........S.......R....L...HK......LTN....LQE.................. [...]
+A8WNJ6_CAEBR/660-987               ............................................................................................s-LVIGIAL..EKMPH..IHDVLKY.YE...EK..I..GQQTLQLCA.E..T.VRKMGQg.............ggNKTTVDNVIR.......KLNAK..........CGGT.Nf...yVEV.P....NAV.KN........R......Q..V....C...I...N.....P.E..E.Mrkkl.........................ykytqFIGFELSHTGARSkfdk......qkqtvEIDP..TIVGVSYTL-...K...H.A.T...Q....L.G.....G.FS..Y...FQ.....D..........S.......R....V...HK......LTR....VKE.................. [...]
+A8WS47_CAEBR/435-755               ......................................................................................trverss--------..-----..-NHILKY.YE...EK..I..GQQTLQLCA.E..T.VMKMARc.............ggNKTTVDNVLR.......KLNLK..........CGGT.Nf...yVGV.P....DAV.NN........R......Q..V....C...I...N.....P.E..E.Mrkkl.........................ykntqFIGFELSHTGAQSkfdk......lkedaEIDP..TIVGVAYSL-...K...H.A.T...Q....L.G.....G.FS..Y...FQ.....D..........G.......R....V...HK......LTH....VQE.................. [...]
+A8WQA0_CAEBR/671-998               ............................................................................................d-IFVGIAR..DKKPD..VHDIMKY.YE...ES..V..GMQTIQLCK.Q..T.VDKMMNp.............qgGRQTIDNVMR.......KFNLK..........CGGT.Nf...yVDI.P....SNI.RG........R......S..I....C...S...N.....T.E..T.Lhkkl.........................lekvqFIGFEISHGAARTlydr......srnqmDGEP..SIVGVSYSL-...K...Q.S.T...Q....L.G.....G.FS..Y...MQ.....T..........Q.......R....E...YK......IQK....LDD.................. [...]
+Q9TXN7_CAEEL/609-935               ............................................................................................n-ILVAIAK..EKKPD..VHDVLKY.YE...AS..V..GLQTIQVCK.Q..T.VDMMLSs..............gGRQTADNVMR.......KFNLK..........CGGT.Nf...fVQI.P....RSV.NG........R......T..V....C...A...D.....A.H..L.Lnekl.........................fervqFIGFDISHGASRTlfdr......stgkmDGEV..SIVGVSYSL-...S...H.S.T...H....-.L.....G.GF..A...YM.....Q..........T.......Q....K...EY......KLQ...kLDE.................. [...]
+C8JQR1_CAEEL/591-918               ............................................................................................d-ILFAITR..EKKPD..VHDILKY.YE...ES..I..GLQTIQVCQ.Q..T.VDKMMGg.............ggGRQTIDNVMR.......KFNLK..........CGGT.Nf...fDEI.P....SSV.RG........R......A..V....C...S...N.....S.E..T.Lskkl.........................fehvqFIGFEISHGAARTlfdr......srsqlDGEP..SVVGVSYSLT...-...-.N.S...T....Q.L.....G.GF..T...YL.....Q..........T.......Q....K...EY......KLQ...kLGE.................. [...]
+YQ53_CAEEL/650-977                 ............................................................................................d-ILVGIAR..EKKPD..VHDILKY.FE...ES..I..GLQTIQLCQ.Q..T.VDKMMGg.............qgGRQTIDNVMR.......KFNLK..........CGGT.Nf...fVEI.P....NAV.RG........K......A..V....C...S...N.....N.E..T.Lrkkl.........................lehvqFIGFEISHGASRTlfdr......srsqmDGEP..SVVGVSYSLT...-...-.N.S...T....Q.L.....G.GF..T...YL.....Q..........T.......Q....K...EY......KLQ...kLDE.................. [...]
+Q9N3L7_CAEEL/585-911               ............................................................................................s-IIIGITE..EKKPE..VHDVLKY.FE...AA..V..GLQTMQIHS.K..T.AGFIIS...............gNGQTAGNVIK.......KLNLK..........CGGI.Ny...iVEV.P....QSF.NR........T......V..V....C...S...N.....N.S..F.Vqkkl.........................fdgtqFIGFEMTHGAARTlfdk......sngtfDGEP..TIVGCAYSL-...Q...K.A.T...D....L.G.....G.FN..W...FQ.....E..........Q.......N....E...YR......LKN....LGT.................. [...]
+A8XZY0_CAEBR/665-992               ............................................................................................s-IVIGITS..EKKPD..VHDVMKY.FE...AG..I..GLQTLQIHD.R..T.AECFMRe.............qgGAQTVDNVMR.......KLNLK..........LGGI.Nf...nVDP.V....NMY.EH........K......V..I....C...N...N.....I.G..G.Mkkkl.........................fekvqFVGFEMTHGSSRTlydk......aqgqfDGEP..TIVGCGYSL-...S...S.P.T...E....L.G.....G.YN..F...LQ.....E..........R.......N....E...YK......LKN....LDS.................. [...]
+Q27GU1_CAEEL/511-833               ............................................................................................p-FVLFISD..-DVPN..IHECLKF.EE...RM..S..DIPTQHVLL.K..N.VKKMRDniekks....qggrraYDLTLDNIVM.......KANIK..........CGGL.N.....YT-.A....DIP.RD........L......A..C....W...N...E.....V.S..T.F..................................VIGMDVAHPDRNAa.............rEGNP..STVGLSCNSA...E...N.P.Y...S....F.I.....G.DF..L...YT.....D..........P.......R....R...EA......IQDe..iLRK.................. [...]
+Q19645_CAEEL/674-996               ............................................................................................p-FVLFISD..-DVPN..IHECLKF.EE...RM..S..DIPTQHVLL.K..N.VKKMRDniekks....qggrraYDLTLDNIVM.......KANIK..........CGGL.N.....YT-.A....DIP.RD........L......A..C....W...N...E.....V.S..T.F..................................VIGMDVAHPDRNAa.............rEGNP..STVGLSCNSA...E...N.P.Y...S....F.I.....G.DF..L...YT.....D..........P.......R....R...EA......IQDe..iLRK.................. [...]
+A8XRG0_CAEBR/648-970               ............................................................................................p-FVLFVSD..-DVPN..IHECLKF.EE...RM..S..DIPTQHILL.K..N.IRKIRDniekks....qggrraYDLTLDNIVM.......KANVK..........CGGL.N.....YT-.A....DIP.RD........I......G..S....W...R...E.....V.S..T.F..................................VMGMDVAHPDKMAt.............rEGSP..STVGLSCNSA...E...S.P.Y...S....F.V.....G.DF..L...YT.....D..........P.......R....R...EA......IQDe..iLRK.................. [...]
+A8QE08_BRUMA/711-1030              ..........................................................................................afv-----MYI..DSRDD..THDDLKL.YE...AL..H..RIVTQHIHG.S..R.AREAPK................KVATLENIVN.......KLNCK..........NFGQ.C....yGII.P....ESF.AT........N......K..W....I...S...T.....G.K..T.L..................................IIGYDVCHPEPQPrher......rmrmpPTQP..SVLGISFNGA...S...C.P.E...T....F.I.....G.DY..S...FQ.....E..........P.......R....K...EQ......VTSs..iLEE.................. [...]
+A8WWH9_CAEBR/55-193                ..................................................................................hqymqnlrgah--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....T.N..T.L..................................FIAYTVNHGTVDPnt..........pgvYNNP..STAVFTFNGT...T...R.P.E...H....F.I.....D.YF..H...FQ.....K..........A.......S....I...QH......IDPq..vIQR.................. [...]
+Q17600_CAEEL/19-157                ....................................................................................qymrslrgp--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...E.....T.N..T.L..................................FIGYAINHGTVDPst..........pgvYNNP..STVVFTFNGT...S...C.P.D...H....F.T.....E.YF..H...FQ.....K..........A.......T....I...PH......VDPa..lIRR.................. [...]
+Q9XVF1_CAEEL/588-902               ...........................................................................................pi---VIYAD..HTSEG..THSTLKL.QE...RL..C..EVITQQVAL.D..K.SLKRTP................GKVTANNLLM.......KLNLK..........YGGV.Nh...kVRV.D....N-S.I-........S......H..L....W...G...D....tS.N..T.L..................................IISYDVCHSSGKVykk.........deiCDEP..SCVGFGFNGT...A...C.P.E...A....F.I.....G.DF..H...YQ.....L..........P.......R....H...EQ......VDEh..lLKL.................. [...]
+A8WWI1_CAEBR/598-920               .........................................................................................yviy------VD..HSSEP..YHQLLKY.LE...RK..F..EVMTQHLNF.D..K.ALQIRSgs...........pllGKSTMTNILM.......KINLK..........NGGL.N....hKVL.P....DPS.ID........H......L..W....G...D...K.....S.N..T.L..................................IISYDVCHSSGKVykk.........getCFEP..SCVGFGYNGT...S...V.P.E...A....I.I.....G.DF..H...YQ.....L..........P.......R....N...EQ......VDP...sVLT.................. [...]
+Q8MU01_HETGL/745-963               .....................................................................................rvgsslpp--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............---P..SCIGWAATIG..kR...H.K.D...E....Y.I.....G.DF..V...YQ.....A..........P.......R....R...EE......KID...iIAS.................. [...]
+A8XFJ6_CAEBR/595-895               ...........................................................................................ky--VFIITD..DNITH..LHRE--F.NQ...TR..L..AVYNIFREM.S..K.ATSVCKd..............gKRLTLENVIN.......KTNIK..........LGGL.N.....YTV.S....DTK.RS........M......-..-....-...-...T.....D.D..Q.L..................................IIGVGISAPPPGTkfll.......egkgHLNP..QIVGFASNA-...V...S.N.H...E....F.V.....G.DF..V...LA.....S..........V.......G....Q...DT......MSS....IED.................. [...]
+Q23415_CAEEL/40-350                ............................................................................................k-FAFVITD..DSITH..LHKKYKA.LE...QK..S..MMVIQDMKI.S..K.ANSVVKd..............gKRLTLENVIN.......KTNMK..........LGGL.N.....YTV.S....DAK.KS........M......-..-....-...-...T.....D.E..Q.L..................................IIGVGVSAPPAGTkymm.......dnkgHLNP..QIIGFASNA-...V...A.N.H...E....F.V.....G.DF..V...LA.....P..........S.......G....Q...DT......MAS....IED.................. [...]
+GCC7_CAEEL/596-906                 ...........................................................................................ky--VLMITD..DAIVH..LHKQYKA.LE...QR..T..MMIVQDMKI.S..K.ANAVVKd..............gKRLTLENIIN.......KTNVK..........LGGL.N.....YTV.S....DAK.KS........M......-..-....-...-...T.....D.E..Q.L..................................IIGVGVSAPPAGTkymm.......dnkgHLNP..QIIGFASNA-...V...A.N.H...E....F.V.....G.DF..V...LA.....P..........S.......G....Q...DT......MAS....IED.................. [...]
+P91085_CAEEL/543-853               ...........................................................................................ky--VLVITD..DAITH..LHKRYKA.LE...QK..S..RMTIQDMKI.S..K.ANAVVKd..............gKRLTLENIIN.......KTNLK..........LGGL.N.....YTV.S....DSK.KS........M......-..-....-...-...T.....D.E..Q.L..................................IIGVGVSAPPAGTkfmm.......dnkgHLNP..QIIGFASNA-...V...A.N.H...E....F.V.....G.DF..V...LA.....P..........S.......T....Q...DT......MAS....IED.................. [...]
+A8WJ71_CAEBR/596-953               ............................................................................................e-FVFIITD..DTITN..LHQKYKM.IE...SL..Q..SIVVQDMKM.S..K.ALSVIDs..............gKRLTLENVIN.......KTNVK..........LGGS.N.....YIF.T....DTK.KY........L......-..-....-...-...-.....D.R..V.L..................................VIGIGISQPPPGTkfiv.......egkgFLNP..QIIGFAYNG-...K...Q.K.Q...E....F.A.....G.DF..V...LC.....P..........A.......G....Q...DV......SGF...sASKivisfq............ [...]
+A8X957_CAEBR/565-899               ............................................................................................e-FVFIITD..DAITN..LHQKYKM.IE...SL..Q..SIVIQDMKM.T..K.ALSVIDs..............gKRLTLENVIN.......KTNVK..........LGGS.N.....YIF.T....DTK.KY........L......-..-....-...-...-.....D.R..V.L..................................VIGIGISQPPPVTkfiv.......egkgFLSP..QIISFSYNG-...K...Q.K.Q...E....F.A.....G.DF..V...LC.....P..........A.......G....Q...DV......NGF...sASKliislq............ [...]
+O62275_CAEEL/594-924               .............................................................................................TFVFIITD..DSITT..LHQRYKM.IE...KD..T..KMIVQDMKL.S..K.ALSVINa..............gKRLTLENVIN.......KTNVK..........LGGS.N.....YVF.V....DAK.KQ........L......-..-....-...-...-.....D.S..H.L..................................IIGVGISAPPAGTkyam.......enkgVLNP..NVIGYAYNA-...Q...H.N.Q...E....F.S.....G.DF..V...LN.....S..........A.......S....Q...DT......LAP....IED.................. [...]
+Q9N585_CAEEL/604-934               .............................................................................................TFVLCITE..DNITC..LHQKYKF.IE...HH..T..QMIVQDMKL.S..K.ALSVVNa..............sKKLTLENVIN.......KTNVK..........LGGS.N.....YVY.L....DTK.NF........L......-..-....-...-...-.....Q.E..H.L..................................IIGVGISSPPPGTkyim.......esrgILNP..TIVGFAYNG-...N...G.K.Q...E....F.S.....G.DF..V...LN.....A..........A.......G....Q...ET......IAP....IED.................. [...]
+A8P7Z4_BRUMA/1-302                 ............................................................................................m--------..-----..-----KY.IE...SQ..E..QILTQDLKA.S..T.ALGIVMk..............rQYQTLDNIVN.......KTNIK..........MGGL.N.....YSVhL....EEN.CD........-......R..W....L...G...R.....P.G..F.L..................................IVGLDIAHPSYSRvpn.........kdrNTVL..SVVGYSANIK...K...H.P.L...D....F.I.....G.GY..R...FA.....K..........A.......Q...mE...EL......MDD...aIQQ.................. [...]
+A8XEJ5_CAEBR/552-849               ............................................................................................q-LLFFVVK..-SRYN..YHQNIKC.LE...QK..Y..DLLTQEVRA.E..T.AEKVFR................QPQTRLNIVN.......KTNMK..........LGGL.N.....YQI.G....S--.--........-......E..T....F...R...R.....P.D..Y.L..................................IVGFETSQRSGGN...............PDYP..ISVGYAANML...D...H.H.Q...K....F.A.....G.GY..V...YV.....K..........R.......S....N...DV......FGP...iIKD.................. [...]
+Q86S33_CAEEL/548-852               ............................................................................................q-LLFFVVK..-SRYN..YHQQIKA.LE...QK..Y..DVLTQEIRA.E..T.AEKVFR................QPQTRLNIIN.......KTNMK..........LGGL.N.....YAI.G....S--.--........-......E..A....F...N...K.....P.N..R.L..................................IVGFVTSQRVGGN...............PDYP..ISVGFAANML...K...H.H.Q...K....F.A.....G.GY..V...YV.....H..........R.......D....R...DV......FGS...iIKD.................. [...]
+Q9GZG4_CAEEL/548-852               ............................................................................................q-LLFFVVK..-SRYN..YHQQIKA.LE...QK..Y..DVLTQEIRA.E..T.AEKVFR................QPQTRLNIIN.......KTNMK..........LGGL.N.....YAI.G....S--.--........-......E..A....F...N...K.....P.N..R.L..................................IVGFVTSQRVGGN...............PDYP..ISVGFAANML...K...H.H.Q...K....F.A.....G.GY..V...YV.....H..........R.......D....R...DV......FGS...iIKD.................. [...]
+Q86NJ8_CAEEL/548-852               ............................................................................................q-LLFFVVK..-SRYN..YHQQIKA.LE...QK..Y..DVLTQEIRA.E..T.AEKVFR................QPQTRLNIIN.......KTNMK..........LGGL.N.....YAI.G....S--.--........-......E..A....F...N...K.....P.N..R.L..................................IVGFVTSQRVGGN...............PDYP..ISVGFAANML...K...H.H.Q...K....F.A.....G.GY..V...YV.....H..........R.......D....R...DV......FGS...iIKD.................. [...]
+B3KLZ7_CAEEL/358-662               ............................................................................................q-LLFFVVK..-SRYN..YHQQIKA.LE...QK..Y..DVLTQEIRA.E..T.AEKVFR................QPQTRLNIIN.......KTNMK..........LGGL.N.....YAI.G....S--.--........-......E..A....F...N...K.....P.N..R.L..................................IVGFVTSQRVGGN...............PDYP..ISVGFAANML...K...H.H.Q...K....F.A.....G.GY..V...YV.....H..........R.......D....R...DV......FGS...iIKD.................. [...]
+O02095_CAEEL/574-878               ............................................................................................q-LLFFVVK..-SRYN..YHQQIKA.LE...QK..Y..DVLTQEIRA.E..T.AEKVFR................QPQTRLNIIN.......KTNMK..........LGGL.N.....YAI.G....S--.--........-......E..A....F...N...K.....P.N..R.L..................................IVGFVTSQRVGGN...............PDYP..ISVGFAANML...K...H.H.Q...K....F.A.....G.GY..V...YV.....H..........R.......D....R...DV......FGS...iIKD.................. [...]
+O16386_CAEEL/548-847               ............................................................................................q-LIMFITK..-SMNN..YHTEIKC.LE...QE..F..DLLTQDIRF.E..T.AVKLAQ................QQNTRKNIIY.......KTNMK..........LGGL.N.....YEL.R....S--.--........-......G..V....F...S...N.....S.K..R.L..................................IIGFETSQRGGLG...............-DAP..IAIGFAANMM...S...H.S.Q...Q....F.A.....G.GY..M...FV.....K..........K.......S....A...DN......YGP...vIPE.................. [...]
+A8XUC0_CAEBR/563-774               ............................................................................................e-LLMFITK..-SNRE..YHKEIKV.LE...HE..F..DIRTQDIRF.E..T.ALKFER................QQNTRRNLVN.......KINVK..........LGGI.N.....YEV.E....S-P.T-........-......-..-....-...F...T.....K.D..R.I..................................IIGLETSQNSTMG...............-DGL..ICVGFSANMM...A...K.E.T...Q....F.C.....G.GY..M...FT.....Q..........R.......S....N...DI......YGS...vLKD.................. [...]
+Q8MU01_HETGL/598-705               ....................................................................................lighakgfe--------..--GDD..VHVTIKA.FE...QQ..T..EIVTQAITF.D..V.LKEVLDk..............gSPLTVTNCIH.......KTNVK..........MGGL.N.....YAL.H....MDD.PS........V......A..Q....L...F...D.....G.Q..T.L..................................FLGFAMNFP----...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+A8X254_CAEBR/555-701               ..........................................................................................qll---MFVFR..-RSVP..LHAQIKS.LE...QK..F..DILTQEITL.E..T.AEKIFR................QPQTLQNIVN.......KTNMK..........LGGL.N.....YRI.D....STV.L-........-......-..-....-...-...N.....P.N..I.L..................................FIGFETSSKGGAGdvg........iinlKFGP..VSIGFAANMM...Q...N.H.Q...Q....F.A.....G.GY..I...YA.....P..........Q.......A....R...DV......GKN...qYFQ.................. [...]
+A8X254_CAEBR/749-889               ...........................................................................................nl--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+A8X022_CAEBR/492-805               .....................................................................................qllpfvth--------..-SRYA..LRKDIEW.ME...HK..Y..RIPSLAIDL.K..I.ARKMVE................DKAVKLDLAD.......QVNKK..........TQGV.N.....YAI.Y....S--.--........-......D..V....F...R...N.....G.N..D.L..................................VISISFSEPSPKYakvrililfshmifcFQYP..FTVGFAANTS...N...H.P.L...V....F.T.....S.EF..L...YS.....N..........S.......D....N...MD......SGA...vLTE.................. [...]
+A8X023_CAEBR/600-841               ..................................................................................hgilalqnael--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................------------G...............DSEV..TTVGYASNFM...D...H.P.Q...K....F.A.....G.SY..K...FV.....E..........R.......T....D...EA......SLD...sIIEllqymitl.......... [...]
+Q21495_CAEEL/61-336                ...................................................................................ffrdgqetsl--------..-----..-------.--...--..-..---------.N..N.QSFRNP................TDFAQTGFFV.......DAKQQ..........LGGL.N.....YVV.N....S--.--........-......E..T....W...N...D.....S.G..L.L..................................LIGLSTAPYLNSY..............sSENV..TTIGFVSNTM...D...H.P.Q...K....F.A.....G.GY..K...YV.....K..........S.......G....S...DV......FGQ...vMPE.................. [...]
+C4LVV2_ENTHI/470-756               ......................................................................................mvlavsv--------..--TDS..IYEQIKK.FC...VD..E..NVPTQCIKP.N..T.LRRQPP................-TPVIQMITL.......QMQSK..........MGGI.-.....PWK.T....EID.SS........F......-..-....-...-...-.....A.D..G.M..................................TVGIDVISAGKDR...............----..EIVAIVSSVD...K...D.F.T...V....Y.K.....K.SS..V...VE.....K..........K.......G....L...HT......AGI...hIGE.................. [...]
+B0ET37_ENTDI/470-756               ......................................................................................mvlavsv--------..--TDS..IYEQIKK.FC...VD..E..NVPTQCIKP.N..T.LRRQSL................-TPIIQMITL.......QMQSK..........MGGI.-.....PWK.T....EID.SG........F......-..-....-...-...-.....S.D..G.M..................................TVGIDVISAGKDR...............----..EIVAIVSSVD...K...S.F.T...V....Y.K.....K.SS..V...VE.....K..........K.......G....L...HT......AGI...hIGE.................. [...]
+B0ENU6_ENTDI/467-753               ..........................................................................................kiv---FVVLL..-NDSL..YEDIKRK.C-...FD..R..EIITQCILP.D..T.LKKQNL................-FPIVSQITY.......QIQSK..........LGGI.P.....-WD.V....LTN.NK........L......-..-....-...-...-.....F.K..T.M..................................IIGISVIPYDDNK...............----..ECISLVSSMK...S...N.S.L...A....T.R.....K.KY..S...TI.....E..........K.......K....G...CG......NEG....YNSq................. [...]
+C4LVQ2_ENTHI/467-753               ...........................................................................................ki--VFVVIL..-NDSL..YEDIKRK.CF...DK..-..EIITQCIHP.D..T.LKKQNL................-FPIVSQITY.......QIQSK..........IGGI.-.....PWD.V....LTN.NK........F......-..-....-...-...-.....I.K..T.M..................................IIGIAVTPYDDNK...............----..ECISLVSSMK...Y...N.S.F...A....T.R.....K.KY..S...AI.....E.........tK.......G....S...GN......AGY...nSQI.................. [...]
+C4LY31_ENTHI/438-711               ............................................................................................q-IVFSVFD..-SIEQ..MVEIKEY.FM...IY..G..NIPTQIIDL.N..E.RYDDKK................----ITNLCL.......RTGIK..........LGCS.R.....MKL.D....QNT.S-........-......-..-....-...-...-.....-.D..I.C..................................VIGI--TSREFFV...............--NK..TLITLCISKD...E...N.L.N...V....F.D.....T.ES..Y...FV.....S..........N.......D....N...WH......SGI...gLEQ.................. [...]
+B0EI01_ENTDI/438-710               ............................................................................................q-IVFSVFD..-SIEQ..MVEIKDY.FM...IY..G..NIPTQIIDL.N..E.RYDDKK................----ITSLCL.......RTGIK..........IGCS.R.....LKL.D....QNT.--........-......-..-....-...-...-.....S.D..I.C..................................VIGI--TSREFFV...............--NK..TLITLCISKD...E...N.L.N...V....F.D.....T.DS..Y...FV.....S..........N.......D....N...WH......SGI...gLEQ.................. [...]
+A2DPV7_TRIVA/501-794               ............................................................................................f-VICVVPD..TQKDR..YDSIKSV.LS...SD..L..GIPSQIAIE.G..S.L-NPKL................LMSVATNLVI.......QIGTK..........LNGA.-.....LVK.L....S-R.KS........I......-..S....A...E...M.....K.G..T.M..................................LIGLSIASGKGRD...............--PS..SYVSGVATTD...F...D.L.S...M....Y.H.....S.KS..F...GP.....H..........N.......E....K...II......PEN...fITD.................. [...]
+D2V7J4_NAEGR/498-769               ............................................................................................y-VFFLMAN..ENKHI..YSALKQF.YN...CT..V..GIPSQCIVC.N.gD.WFKR--................----LPNCLI.......QMSAK..........IGGL.-.....IWS.V....ERS.YQ........E......-..-....-...-...-.....-.F..V.S..................................VCGIDIQRKGRNF...............---K..GSISLSLNT-...-...-.S.T...T....L.Y.....Y.TV..P...FR.....E..........S.......D....E...TN......IRN...kLLS.................. [...]
+C5LD15_9ALVE/718-952               ....................................................................................vsgttpsts--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..S...MK.....E..........R.......R....S...AG......VAR...aIKE.................. [...]
+Q3SD94_PARTE/460-750               ...........................................................................................qi-VVSILDR.hEDSKL..YNELKKF.LI...SV..Q..GVLHQNVSI.Q..T.VDSKKF................-SKIAQQIVK.......QVHSK..........IGKQ.-.....LWN.I....QKI.TE........I......-..-....-...-...S.....E.K..I.M..................................IIGIDVYHKTLAN...............--NK..SCVGFNAQFG...Q...Q.S.E...K....H.F.....T.KT..I...IV.....E..........K.......G....K...EL......NKG....VGQ.................. [...]
+A0D4I7_PARTE/320-610               ...........................................................................................qi-VVSILDR.hEDSKL..YNELKKF.LI...SV..Q..GVLHQNVSI.Q..T.VDSKKF................-SKIAQQIVK.......QVHSK..........IGKQ.-.....LWN.I....QKI.TE........I......-..-....-...-...S.....E.K..I.M..................................IIGIDVYHKTLAN...............--NK..SCVGFNAQFG...Q...Q.S.E...K....H.F.....T.KT..I...IV.....E..........K.......G....K...EL......NKG....VGQ.................. [...]
+Q3SD95_PARTE/471-760               ...........................................................................................lv--VSLIDQ.eKDKQI..YQQLKQY.LI...AE..E..GVSHQNVTL.Q..L.IENQKF................-GAIVPKIIQ.......QIHSK..........LGNQ.T.....WNI.Q....KIQ.E-........I......-..-....-...-...S.....D.N..I.M..................................IVGIDVYHKTVLG...............--LD..SCVGFNAQFG...Q...Q.G.Y...A....N.F.....T.KT..I...IV.....R..........K.......G....K...EI......NKD....VAM.................. [...]
+A0CE33_PARTE/2-210                 .........................................................................................keis--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....D.E..I.M..................................IIGIDVYHKTEKK...............--IN..SCVGFNAQFG..qQ...G.D.T...N....F.T.....-.KT..I...IV.....D..........Q.......G....K...EI......NKD....IAN.................. [...]
+A0DEE4_PARTE/478-780               ............................................................................................s-LVVSLTD..KNRDTslYIGLKDF.LL...SQggA..GVIHQNVTT.K..S.CKNKNK................-QSIASKIAQ.......QISVK..........LGNP.-.....LWV.I....PKV.KG........I......-..-....-...-...S.....E.K..I.M..................................IIGMDIYHKLVTG...............--KQ..SCMGFVAHFD..lE...C.K.T...S....F.S.....K.TI..-...IM.....K..........S.......G....Q...EF......NQA....VGQ.................. [...]
+Q3SE57_PARTE/478-788               ............................................................................................s-LVVSLTD..KNRDTslYIGLKDF.LL...SQggA..GVIHQNVTT.K..S.CKNKNK................-QSIASKIAQ.......QISVK..........LGNP.-.....LWV.I....PKV.KG........I......-..-....-...-...S.....E.K..I.M..................................IIGMDIYHKLVTG...............--KQ..SCMGFVAHFD..lE...C.K.T...S....F.S.....K.TI..-...IM.....K..........S.......G....Q...EF......NQA....VGQ.................. [...]
+Q3SE52_PARTE/466-770               ............................................................................................l-IVTFVNE.rDKDRI..YGHIKKY.CF...QD..Q..GISHQNILS.K..F.LKTKNP................-SSVASKIAQ.......QMSMK..........LGNP.-.....LWA.I....PKP.NG........I......-..-....-...-...S.....D.K..T.M..................................VVGIDIYHKLLTN...............--RK..SCMGFVAYLE...S...E.C.L...N....T.F.....A.KP..I...IM.....R..........E.......G....Q...EM......SQE....VGR.................. [...]
+Q3SE58_PARTE/466-770               ............................................................................................l-IVTFINE..KDKDR.iYGQMKKY.CF...QE..H..GISHQNILS.K..F.LKSKNP................-SSVASKIAQ.......QMSMK..........LGNP.-.....LWA.I....PKP.NG........I......-..-....-...-...S.....D.K..T.M..................................VIGIDIYHKLLTN...............--RR..SCMGFVAYLE...S...E.C.L...N....T.F.....A.RP..I...IM.....K..........E.......G....Q...EM......CHE....VGR.................. [...]
+A0CB11_PARTE/463-767               ............................................................................................l-IVTFINE..KDKDR.iYGQMKKY.CF...QE..H..GISHQNILS.K..F.LKSKNP................-SSVASKIAQ.......QMSMK..........LGNP.-.....LWA.I....PKP.NG........I......-..-....-...-...S.....D.K..T.M..................................VIGIDIYHKLLTN...............--RR..SCMGFVAYLE...S...E.C.L...N....T.F.....A.RP..I...IM.....K..........E.......G....Q...EM......CHE....VGR.................. [...]
+A4ZYY5_TETTH/495-793               ......................................................................................qfivtfs------NA.eKNPSL..YREMKKF.FS...SEggV..GIESQHVTP.R..A.LQKN--................GKSVASKIAL.......QIASK..........LGKR.-.....IWS.V....ETP.VG........I......-..-....-...-...N.....Q.N..T.M..................................IVGIETSMKKIRN...............---Q..QVIGVVASIN...K...D.F.N...K....F.Y.....S.QV..D...FR.....N..........G.......-....N...DI......KLP...tLSK.................. [...]
+A4VE06_TETTH/14-183                ................................................................................lslrllpkpyrli--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+A4VE05_TETTH/347-645               ...........................................vndesaqnkdktsvnfkkgnqvtqllniilksimrdekfqeigknskfyd--------..-----..-------.--...--..-..---------.-..-.------................-----VNSKS.......DIIIK..........SRRI.-.....-WQ.V....ETP.TG........I......-..-....-...-...D.....K.N..T.M..................................IIGIETSMKKINK...............---Q..QVIGVVASID...K...D.F.T...K....Y.F.....S.DV..E...IR.....K..........E.......N....D...TT......FPT....LSK.................. [...]
+Q6UE79_TETTH/497-791               ..........................................................................................qfv---LSFGQ..AQSGL..YSGLKKF.LT...SE..A..GIESQHVNP.R..S.LQKN--................GMSVASKIAL.......QIASK..........LGRR.-.....IWQ.V....ETP.TG........I......-..-....-...-...D.....K.N..T.M..................................IIGIETSMKKIKQ...............---Q..QVVGVVASID...K...D.F.T...K....Y.F.....S.DV..E...IR.....K..........D.......N....D...TT......LPT....LSK.................. [...]
+Q0GM58_TETTH/497-791               ..........................................................................................qfv---LSFGQ..AQSGL..YSGLKKF.LT...SE..A..GIESQHVNP.R..S.LQKN--................GMSVASKIAL.......QIASK..........LGRR.-.....IWQ.V....ETP.TG........I......-..-....-...-...D.....K.N..T.M..................................IIGIETSMKKIKQ...............---Q..QVVGVVASID...K...D.F.T...K....Y.F.....S.DV..E...IR.....K..........D.......N....D...TT......LPT....LSK.................. [...]
+Q22NE2_TETTH/491-777               ............................................................................................s-FIVTFGD..LNTNF..YQQIKHF.FC...IL..A..NVESQHISP.Q..S.LKNKNK................-YKICLNIVL.......QILQK..........TGNQ.-.....IWN.V....EMP.MQ........I......T..-....S...Q...T.....I.N..T.M..................................IVGIETSRNIIKG...............---K..QIIAVVCSIN...R...N.F.S...R....Y.L.....S.QV..Y...FR.....E..........K.......G....C...KQ......LHQ....LQK.................. [...]
+A8VSR3_TETTH/491-787               ............................................................................................s-FIVTFGD..LNTNF..YQQIKHF.FC...IL..A..NVESQHISP.Q..S.LKNKNK................-YKICLNIVL.......QILQK..........TGNQ.-.....IWN.V....EMP.MQ........I......T..-....S...Q...T.....I.N..T.M..................................IVGIETSRNIIKG...............---K..QIIAVVCSIN...R...N.F.S...R....Y.L.....S.QV..Y...FR.....E..........K.......G....C...KQ......LHQ....LQK.................. [...]
+A4ZYY4_TETTH/474-761               ......................................................................................nfnhprq--------..--QTF..YQELKLY.LY...AT..V..AIEHQHFND.D..F.SCHKNK................-NAAISSLII.......QIASK..........LGYP.-.....LWQ.T....HIP.NQ........I......-..-....-...-...F.....N.K..T.M..................................IIAIAVEQKTLHL...............NKQQ..QMIAVVTTIS...K...D.F.T...Q....M.H.....S.EI..F...FN.....E..........I.......Q....N...GP......ISI....LSK.................. [...]
+Q24HU6_TETTH/383-631               ......................................................................................nfnhprq--------..--QTF..YQELKLY.LY...AT..V..AIEHQHFND.D..F.SCHKNK................-NAAISSLII.......QIASK..........LGYP.-.....LWQ.T....HIP.NQ........I......-..-....-...-...F.....N.K..T.M..................................IIAIAVEQKTLHL...............NKQQ..QMIAVVTTIS...K...D.F.T...Q....M.H.....S.EI..F...FN.....E..........I.......Q....N...GP......ISI....LSK.................. [...]
+Q0MRE2_TETTH/533-834               ...................................................................................ivaivapnkf--------..STVQN..YSKIKKL.CT...IT..Q..QIKSQYIRQ.Q..S.LDSKQS................-YNVCSAILS.......QMAAK..........CGTT.-.....LWV.V....NPP.NG........I......-..-....-...-...P.....D.N..T.M..................................IIGTSVQKVFING...............-QPQ..FVIGFVASQD...K...N.V.S...R....F.Y.....S.RA..T...FQ.....K..........L.......N....K...DN......IEK....IST.................. [...]
+Q239A3_TETTH/603-904               ...................................................................................ivaivapnkf--------..STVQN..YSKIKKL.CT...IT..Q..QIKSQYIRQ.Q..S.LDSKQS................-YNVCSAILS.......QMAAK..........CGTT.-.....LWV.V....NPP.NG........I......-..-....-...-...P.....D.N..T.M..................................IIGTSVQKVFING...............-QPQ..FVIGFVASQD...K...N.V.S...R....F.Y.....S.RA..T...FQ.....K..........L.......N....K...DN......IEK....IST.................. [...]
+A0CR14_PARTE/559-847               .............................................................................................MIVIVLNR..YMKNC..YAPLKKM.CM..sEK..F..GVLTQMVSS.D..S.ISKQKK...............gLFSIIQKLAI.......QMMDK..........VGNC.-.....LWT.V....QLP.QK........W......P..-....-...-...-.....D.N..I.M..................................IVSVIIE---KG-...............----..KFAGMLSSLD...K...T.Y.S...R....Y.Y.....S.QM..S...TK.....I..........V.......E....K...CL......IKD....IGD.................. [...]
+Q3SE51_PARTE/572-860               .............................................................................................MIVIVLNR..YMKNC..YAPLKKM.CM..sEK..F..GVLTQMVSS.D..S.ISKQKK...............gLFSIIQKLAI.......QMMDK..........VGNC.-.....LWT.V....QLP.QK........W......P..-....-...-...-.....D.N..I.M..................................IVSVIIE---KG-...............----..KFAGMLSSLD...K...T.Y.S...R....Y.Y.....S.QM..S...TK.....I..........V.......E....K...CL......IKD....IGD.................. [...]
+Q0Q5B1_9SPIT/472-767               ...........................................................................................av--VLLLPGqkGKCNL..YDEVKKY.LL...TD..V..PVPSQAVLT.G..T.IQKGKN................LRSIVNKILI.......QINVK..........IGGI.-.....PWA.V....DSL.PL........-......-..-....-...L...T.....K.P..S.M..................................ICGMDVFHSTSLG...............--KK..SVLALTASMN...Q...T.A.T...K....Y.W.....S.TN..V...IQ.....S..........E......lG....Q...EA......SHA....LNQ.................. [...]
+Q8ISG8_STYLE/475-767               .....................................................................................vlllpgak--------..GKTSL..YDDIKRF.LL...AE..F..PVPSQVVLC.N..T.ISKGKN................LRSIVNKILI.......QITAK..........IGGI.-.....PWT.V....DAL.P-........-......-..-....F...M...D.....K.P..T.M..................................ICGMDVFHSTSLG...............--KK..SVLGLTASIN...V...S.A.T...K....Y.F.....S.SC..V...IQ....gE..........L.......G....L...EA......SHS....LQN.................. [...]
+Q86CV7_STYLE/475-767               .....................................................................................vlllpgak--------..GKTSL..YDDIKRF.LL...AE..F..PVPSQVVLC.N..T.ISKGKN................PRSIVNKILI.......QITAK..........IGGI.-.....PWT.V....GAL.P-........-......-..-....F...M...D.....K.P..T.M..................................ICGMDVFHSTSLG...............--KK..SVLGLTASIN...V...S.A.T...K....Y.F.....S.SC..V...IQ....gE..........L.......G....L...EA......SHS....LQN.................. [...]
+Q8MQL1_TETTH/444-756               ...........................................................................................ma--VFLLPG..KKKAGmyYDEIKRY.FT...NV..K..PIPTQVILA.S..T.AMKDKG................LRSVVNKLLM.......QICAK..........TGGV.-.....PWV.M....DNL.P-........-......-..-....F...Q...N.....L.P..T.M..................................VVGMDVFHNTPGK...............--KE..SIFGFVSTVD...R...N.F.S...K....Y.Y.....S.HS..H...VL.....P..........T.......G....Q...EI......TPF....LQQ.................. [...]
+Q8MXZ9_TETTH/444-756               ...........................................................................................ma--VFLLPG..KKKAGmyYDEIKRY.FT...NV..K..PIPTQVILA.S..T.AMKDKG................LRSVVNKLLM.......QICAK..........TGGV.-.....PWV.M....DNL.P-........-......-..-....F...Q...N.....L.P..T.M..................................VVGMDVFHNTPGK...............--KE..SIFGFVSTVD...R...N.F.S...K....Y.Y.....S.HS..H...VL.....P..........T.......G....Q...EI......TPF....LQQ.................. [...]
+Q23ND1_TETTH/444-756               ...........................................................................................ma--VFLLPG..KKKAGmyYDEIKRY.FT...NV..K..PIPTQVILA.S..T.AMKDKG................LRSVVNKLLM.......QICAK..........TGGV.-.....PWV.M....DNL.P-........-......-..-....F...Q...N.....L.P..T.M..................................VVGMDVFHNTPGK...............--KE..SIFGFVSTVD...R...N.F.S...K....Y.Y.....S.HS..H...VL.....P..........T.......G....Q...EI......TPF....LQQ.................. [...]
+Q3SE56_PARTE/450-741               ............................................................................................f-IIFLLPGqkKNSRL..YRCAKFI.SL...QK..I..ACPSQVVLE.D..T.LTKN--................TRSIVNKIMV.......QICAK..........LGGV.-.....PWA.I....DKL.P-........-......K..L....F...Q...Q.....Q.H..T.M..................................ICAAECYDRIHQI...............----..KHLAFCSTVD...K...N.M.T...K....Y.H.....S.QI..-...--.....L..........K.......G....A...DY......KGD...nLKK.................. [...]
+Q3SE59_PARTE/450-741               ............................................................................................f-IIFLLPGqkKNSRL..YRCAKFI.SL...QK..I..GCPSQVVLE.D..T.LAKN--................TRSIVNKIMV.......QICAK..........LGGV.-.....PWA.I....DKL.P-........-......K..L....F...Q...Q.....Q.H..T.M..................................ICAAECYDRLHQI...............----..KHLAFCSTVD...K...N.M.T...K....Y.H.....S.QI..-...--.....L..........K.......G....A...DY......KGD...nLKK.................. [...]
+Q9U5C9_PARCA/466-759               ............................................................................................f-LIFLLPGqkKKAKL..YKTAKKI.SM...QS..F..GCPSQVIIE.K..T.LQKN--................TRSIVNKILI.......QLNAK..........VGGI.-.....PWA.L....DGF.PQ........Q......-..-....F...Q...A.....K.P..T.M..................................ICGVDIFSKHGKK...............----..NQLAFCSTTD...K...Y.F.S...R....Y.Y.....S.QV..-...--.....I..........S.......S....G...EF......SIH....LQQ.................. [...]
+Q3SE49_PARTE/467-759               ............................................................................................f-LIFLLPGqkKKARL..YKACKVI.SM...AT..F..GCASQVIVE.K..T.LQRN--................TRSIVNKILI.......QLNAK..........IGGT.-.....PWA.L....DGM.P-........-......D..M....F...T...N.....Q.P..T.M..................................ICGVDIFTKAGRK...............----..SQLAFCSTIN...R...Q.F.S...R....Y.Y.....S.QV..-...--.....I..........T.......S....G...EF......CSH....LQL.................. [...]
+Q3SE53_PARTE/460-752               ............................................................................................f-LLFLLPGqkKKARL..YKTAKKI.SM...QK..F..GCASQVVVE.K..T.LAKN--................TRSIVNKILI.......QLNAK..........VGGT.-.....PWA.I....DSL.P-........L......-..T....F...Q...N.....Q.P..T.M..................................ICGTDCFVKSGRK...............----..NQLAFCSTVD...R...N.L.S...R....Y.Y.....S.QV..V...T-.....-..........-.......S....G...EF......SQH....LQS.................. [...]
+A0E0B0_PARTE/455-747               ............................................................................................f-LLFLLPGqkKKARL..YKTAKKI.SM...QK..F..GCASQVVVE.K..T.LAKN--................TRSIVNKILI.......QLNAK..........VGGT.-.....PWA.I....DSL.P-........-......T..T....F...Q...N.....Q.P..T.M..................................ICGTDCFVKSGRK...............----..NQLAFCSTVD...R...N.L.S...R....Y.Y.....S.QV..V...TS.....-..........-.......-....G...EF......SQH....LQQ.................. [...]
+Q3SE50_PARTE/446-748               .....................................................................................llllilng------PK..KNAPL..YTDLKRY.LI...ND..C..PIASQVILS.S..T.LNQPKG...............kVKTICNKLLV.......QICAK..........VGGT.-.....PWG.I....SDL.P-........-......-..-....F...T...D.....Q.P..T.M..................................ICGMDVYHSTAKG...............--RK..SMLSFVSTED...E...F.F.S...K....Y.M.....T.QS..I...EM.....D..........S.......G....V...EF......SFS....LCP.................. [...]
+Q3SE54_PARTE/446-748               .....................................................................................llllilng------PK..KNAPL..YTDIKRY.LI...ND..C..PIASQVILS.S..T.LNQPKG...............kVKTICNKLLV.......QICAK..........VGGT.-.....PWG.V....SEL.P-........-......-..-....F...T...D.....Q.P..T.M..................................ICGMDVYHSTGKA...............--KK..SMLSFVSTED...E...F.F.S...K....Y.M.....T.QS..I...EM.....E..........T.......G....V...EF......SFS....LCP.................. [...]
+Q3SE55_PARTE/446-748               .....................................................................................llllilng------PK..KSAPL..YTDIKRY.LI...ND..C..PIASQVILS.S..T.LNQPKG...............kVKTICNKLLV.......QICAK..........VGGT.-.....PWG.V....SEL.P-........-......-..-....F...T...D.....Q.P..T.M..................................ICGMDVYHSTGKA...............--KK..SMLSFVSTED...E...F.F.S...K....Y.M.....T.QS..V...EM.....E..........T.......G....V...EF......SFS....LCP.................. [...]
+Q54HL3_DICDI/867-1166              ............................................................................................l-FIIILPE.nDHSFI..YKSIKNLsLL...RN..R..AVITQCIKS.S..K.IKDR--................LNLISKPIAS.......QIIAK..........MGKF.-.....PWS.I....D--.PT........I......-..-....F...S...Ni...pE.N..T.M..................................VIGIDVTHNPEIS...............---Y..SVAAFVASTN...N...C.H.T...Q....F.Y.....H.KI..N...IQ.....P..........F.......L....K...EI......LDSd..fIFT.................. [...]
+Q7KWS3_DICDI/669-964               ............................................................................................f-FLIIIPQ..NNAEV..YKGIKMK.SL...IQ..F..RVLTQCIFS.R..T.FDKG--................-RPVSVKLKQ.......QVVAK..........LGLA.-.....PWG.L....GQD.IY........K......G..V....-...-...P.....K.K..T.M..................................VIGVDVGHNSDMK...............--GH..SVVGFVATID...D...K.F.Q...K....F.F.....S.RA..Y...AQ.....E.........rP.......G....K...EI......IHS....LED.................. [...]
+Q54G64_DICDI/590-885               ............................................................................................f-FLMLIPQ..NQPEI..YKEIKRK.SL...VQ..F..KVLTQCIFP.R..T.FYKG--................-RSVTNKLKQ.......QVIAK..........LGYA.-.....PWG.L....NQQ.I-........F......N..G....V...I...P.....K.K..T.M..................................IIGIDVGHNSDMR...............--GH..SVVGFVATID...D...K.F.Q...K....Y.F.....S.RS..F...VQ.....K.........rP.......G....K...EI......IDS....LEE.................. [...]
+Q1ZXG9_DICDI/1063-1281             ......................................................................................nqskiht--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................------------Q...............KDAR..SVAAFCATTN...N...A.F.T...N...cY.V.....S.AT..I...QK.....Q..........S.......S....K...EV......INS....LGA.................. [...]
+Q86HF5_DICDI/896-1194              .............................................................................................FIVVVVNG..VKTDL..YNSIKRT.AI...LE..C..KVITQVLTV.K..T.ITNQKI................-SSIFSKITN.......QINAK..........IDIP.-.....PWT.L....KEN.SN........F......G..I....-...-...P.....N.Y..T.M..................................VVGIDVGHNTDKE...............--SR..SVAAFCASVN...H...S.F.T...N....F.F.....V.AC..S...IQ.....K..........Q......nT....K...EV......IHS....LGN.................. [...]
+D3B338_POLPA/992-1287              ............................................................................................f-FLCAIQQ..-KPDF..YNLIKKY.TL...IT..A..RVITQCILA.K..T.MDKDNI................-GSVVSKVIL.......QVIAK..........LGKD.-.....PWV.L....KNP.G-........Y......-..-....N...I...P.....E.H..T.M..................................VVGIDVGHNAATR...............--GK..SIVAITATLN...R...S.L.T...R....Y.F.....S.TA..I..iQQ.....T..........P.......G....K...DI......IDS....LQT.................. [...]
+D3BMP8_POLPA/633-929               ............................................................................................f-FFCLIPF..GKADV..YAAIKKS.TL...TQ..F..KAITQCAYA.K..T.LGIT--................GMAVAKKILH.......QLIAK..........LGRS.P.....WSI.S....NPV.YK........M......-..-....-...-...P.....K.H..T.M..................................IVGIDVGHNSDQR...............--GK..SVVGFCASID..sE...Y.S.L...Y....H.T.....T.AI..V...QS.....T..........P.......G....K...EI......VES....LRP.................. [...]
+D2V2M6_NAEGR/28-326                ............................................................................................s-FILMITK.nKTSTE..YHTLKEK.TI...VD..M..GIPSQCITE.R..N.IAISEK................KSSILKNITI.......EMNAK..........LGGI.-.....PWM.T....SIP.M-........-......-..-....-...-...K.....P.H..T.M..................................IVGMDVNHSGEVY..............hRSKS..SLVGFVSSYD...S...K.V.C...A....Y.Y.....S.QI..Q...VQ.....K..........P.......G....V...EL......VEN....IKN.................. [...]
+D2VMG4_NAEGR/577-883               ...........................................................................................fa--LVVLFN..DQKQR..YSRVKEV.LC...NQ..V..GIISQCVKL.S..T.ITNEKG................LASKATKVIV.......QICSK..........MGGA.-.....PWT.V....P--.L-........-......A..F....P...N...K.....E.P..T.M..................................IIGMDVYHSGEIY..............kRKKA..SVAGFVASID...A...K.I.S...T....Y.F.....T.KC..I...IQ.....E..........A.......G....K...EI......VDE....LEE.................. [...]
+B7PDV6_IXOSC/541-835               ...........................................................................................la--LVILPN..NRKDR..YDMIKKH.AC...VD..L..GLQTQVLLS.R..T.IGNRKN................VRSVATKVAI.......QLNCK..........LGGQ.-.....AWC.L....EIP.L-........-......-..-....-...-...-.....A.S..T.M..................................VIGYDTYHDSSQR...............--GR..SAGAFVASLN...R...T.F.T...R....W.F.....S.RA..S...FH.....A..........S.......H....Q...EL......GNS....LAI.................. [...]
+B7Q5I1_IXOSC/446-741               ............................................................................................l-LMTIFPN..NRKDR..YDSLKKV.AC...VD..M..GLHTQVMLG.R..T.ISNKKN................LKSVATKVAI.......QMNCK..........LGGE.-.....AWA.L....DIP.L-........-......-..-....-...-...-.....T.K..M.M..................................CVGYDTYHDSRQK...............--GL..SAGGFVASLN...R...T.L.T...R....W.Y.....S.RV..S...FH.....Q..........T.......H....Q...EL......GSA....LKT.................. [...]
+Q0H8V5_9CNID/70-239                ............................................................................................m-VVTILTT..NRKDR..YDAIKKL.CC...LE..K..PVPSQVIVG.R..T.ISKKQM................LMSVSTKIAI.......QLNCK..........LGGE.-.....AWA.L....EIP.L-........-......-..-....-...-...-.....K.K..T.M..................................VIGIDTYHDSSAK...............--GR..SVGGFVASVN...Q...T.L.T...K....Y.Y.....S.RV..S...FQ.....H..........T.......G....M...EF......IDA....LKT.................. [...]
+A7RFC2_NEMVE/557-857               ............................................................................................i-VVTIVPS..NRKDR..YDSIKKL.CC...LE..K..GVPSQVVVS.R..T.LSKKQM................LMSVCTKIGI.......QLNCK..........LGGE.-.....AWA.V....DIP.L-........-......-..-....-...-...-.....K.N..L.M..................................IVGIDTYHDSSQK...............--GR..SVGGFVASLNkpcT...R.Q.R...E....Y.Y.....S.RC..T...FQ.....H..........S.......G....Q...EL......VDG....LKV.................. [...]
+A7T755_NEMVE/2-70                  ............................................................................................i-VVTIVPS..NRKDR..YDSIKKL.CC...LE..K..GVPSQVVVS.R..T.LSKKQM................LMSVCTKIGI.......QLNCK..........LGGE.-.....AWA.V....DIP.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+Q6RSS9_PODCA/561-853               ............................................................................................i-VVCIVPN..NRKDR..YDVIKKL.CC...VE..R..PVPSQVVVS.R..T.LSKKQM................LMSVCTKIGI.......QLNCK..........LGGE.-.....VWA.V....DIP.L-........-......-..-....-...-...-.....K.N..V.M..................................VVGFDVYHDSATK...............--GK..SIGGFVASTN...R...Y.L.T...R....Y.Y.....S.RI..T...SQ.....T..........S.......H....Q...EI......CNQ....LKV.................. [...]
+B2KTD9_9CNID/559-850               ............................................................................................i-VVCIVPN..NRKDR..YDAIKKI.TC...VE..N..PVPSQVVVS.R..T.LSKQQM................LMSVCTKIAI.......QLNCK..........LGGE.-.....VWA.T....EIP.V-........-......-..-....-...-...-.....K.K..L.M..................................VIGFDVYHDSMNK...............--GQ..SIGGFIASTN...D...S.L.T...R....Y.Y.....S.RI..T...KQ.....R..........S.......H....N...EI......CSQ....LKI.................. [...]
+Q3ZUK2_PLADU/35-327                ............................................................................................l-VLCILPS..NKKDR..YDAIKKL.CC...IN..C..PVPSQMVLA.K..T.LSKAKM................LMSVATKIAI.......QINCK..........LGGE.-.....VWA.L....EIP.L-........-......-..-....-...-...-.....K.G..L.M..................................VVGVDSYHDSKQK...............--GR..SVGAFVASMN...Q...S.L.T...R....Y.Y.....S.RC..C...FQ.....H..........Q.......H....Q...EL......LDG....LRV.................. [...]
+B5BUZ0_9ASCI/567-860               ............................................................................................m-ILSLMPS..NRKDR..YDGIKRL.CC...VD..I..PIPTQVVLT.K..T.LSKPQR................VMSIATKIAI.......QINCK..........LGGE.-.....AWA.A....HIP.L-........-......-..-....-...-...-.....K.G..T.M..................................VIGIDTYHDTARK...............--GQ..SVGGFVANIN...Q...E.Y.T...R....W.Y.....S.NT..T...FQ.....Q..........N.......S....T...EL......IDG....LKK.................. [...]
+C3XV23_BRAFL/67-195                ................................................................................lsnlcacfrfplr--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+B4DYF7_HUMAN/569-859               .............................................................................................MVICILPN..DDKRR..YDSIKRY.LC...TK..C..PIPSQCVVK.K..T.LEKVQA................-RTIVTKIAQ.......QMNCK..........MGGA.-.....LWK.V....ETD.V-........-......-..-....-...-...-.....Q.R..T.M..................................FVGIDCFHDIVNR...............--QK..SIAGFVASTN...A...E.L.T...K....W.Y.....S.QC..V...IQ.....K..........T.......G....E...EL......VKE....LEI.................. [...]
+PIWL3_HUMAN/578-868                ............................................................................................k-VICILPN..DDKRR..YDSIKRY.LC...TK..C..PIPSQCVVK.K..T.LEKVQA................-RTIVTKIAQ.......QMNCK..........MGGA.-.....LWK.V....ETD.V-........-......-..-....-...-...-.....Q.R..T.M..................................FVGIDCFHDIVNR...............--QK..SIAGFVASTN...A...E.L.T...K....W.Y.....S.QC..V...IQ.....K..........T.......G....E...EL......VKE....LEI.................. [...]
+PIWL1_CHICK/561-853                ............................................................................................i-VVCILSS..TRKDK..YDAIKKY.LC...TD..C..PIPSQCVVA.R..T.LSKPQT................ALAIVTKIAL.......QMNCK..........MGGE.-.....LWS.V....EIP.L-........-......-..-....-...-...-.....K.Q..L.M..................................IVGIDCYHDTLSG...............--KQ..SIAGFVASLN...E...K.M.T...R....W.F.....S.RC..V...VQ.....S..........R.......G....Q...EI......VDG....LKA.................. [...]
+PIWL1_HUMAN/555-847                ............................................................................................i-VVCLLSS..NRKDK..YDAIKKY.LC...TD..C..PTPSQCVVA.R..T.LGKQQT................VMAIATKIAL.......QMNCK..........MGGE.-.....LWR.V....DIP.LK........L......-..-....-...-...-.....-.-..V.M..................................IVGIDCYHDMTAG...............--RR..SIAGFVASIN...E...G.M.T...R....W.F.....S.RC..I...FQ.....D..........R.......G....Q...EL......VDG....LKV.................. [...]
+D2HWM8_AILME/555-847               ............................................................................................i-VVCLLSS..NRKDK..YDAIKKY.LC...TD..C..PTPSQCVVA.R..T.LGKQQT................VMAIATKIAL.......QMNCK..........MGGE.-.....LWR.V....DMP.LK........L......-..-....-...-...-.....-.-..A.M..................................IVGIDCYHDTTAG...............--RR..SIAGFVASIN...E...G.M.T...R....W.F.....S.RC..V...FQ.....D..........R.......G....Q...EL......VDG....LKV.................. [...]
+PIWL1_MOUSE/556-848                ............................................................................................i-VVCLLSS..NRKDK..YDAIKKY.LC...TD..C..PTPSQCVVA.R..T.LGKQQT................VMAIATKIAL.......QMNCK..........MGGE.-.....LWR.V....DMP.LK........L......-..-....-...-...-.....-.-..A.M..................................IVGIDCYHDTTAG...............--RR..SIAGFVASIN...E...G.M.T...R....W.F.....S.RC..V...FQ.....D..........R.......G....Q...EL......VDG....LKV.................. [...]
+D3ZTP9_RAT/556-848                 ............................................................................................i-VVCLLSS..NRKDK..YDAIKKY.LC...TD..C..PTPSQCVVA.R..T.LGKQQT................VMAIATKIAL.......QMNCK..........MGGE.-.....LWR.V....DMP.LK........L......-..-....-...-...-.....-.-..A.M..................................IVGIDCYHDTTAG...............--RR..SIAGFVASIN...E...G.M.T...R....W.F.....S.RC..V...FQ.....D..........R.......G....Q...EL......VDG....LKV.................. [...]
+PIWL1_DANRE/552-844                .............................................................................................MVVVILPT..NRKDK..YDCVKKY.LC...VD..C..PTPSQCVVS.R..T.ISKPQA................LMTVATKIAL.......QMNCK..........MGGE.-.....LWS.V....EIP.L-........-......-..-....-...-...-.....R.Q..L.M..................................IVGIDCYHDTAAG...............--KR..SIGAMVASLN...Q...G.M.S...R....W.F.....S.KC..V...LQ.....N..........R.......G....Q...EI......IDA....LKG.................. [...]
+Q4T9Z1_TETNG/519-587               .............................................................................................MVVVILPT..NRKDK..YDSIKKY.LC...VD..C..PVPSQCVVA.Q..T.LSRPQT................LLNVATKIAL.......QMACK..........MGGE.-.....LWS.V....EIP.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+Q4T9Y6_TETNG/521-792               .............................................................................................MVVVILPT..NRKDK..YDSIKKY.LC...VD..C..PVPSQCVVA.Q..T.LSRPQT................LLNVATKIAL.......QMACK..........MGGE.-.....LWS.V....EIP.L-........-......-..-....-...-...-.....K.H..L.M..................................VVGIDCYHDISAG...............--KR..SVGALVASMN...Q...T.M.S...R....W.F.....S.RC..V...LQ.....Q..........K.......G....Q...EI......MDG....LKR.................. [...]
+Q4T9Y9_TETNG/1-228                 .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-MACK..........MGGE.-.....LWS.V....EIP.L-........-......-..-....-...-...-.....K.H..L.M..................................VVGIDCYHDISAG...............--KR..SIGALVASMN...Q...T.M.S...R....W.F.....S.RC..V...LQ.....Q..........K.......G....Q...EI......MDG....LKR.................. [...]
+B9U223_ORYLA/549-841               .............................................................................................MVVVVLPS..NRKDK..YDSVKKY.LC...VD..C..PTPSQCVLS.R..T.LSRPQA................LMTVATKIAL.......QMSCK..........MGGE.-.....LWS.V....EIP.L-........-......-..-....-...-...-.....K.Q..L.M..................................IVGIDCYHDISAG...............--KR..SIGAMVASLN...Q...S.M.S...R....W.Y.....S.KC..V...LQ.....H..........K.......G....Q...EL......MDG....LKM.................. [...]
+PIWL4_HUMAN/546-838                ............................................................................................l-VMCILPS..NQKTY..YDSIKKY.LS...SD..C..PVPSQCVLA.R..T.LNKQGM................MMSIATKIAM.......QMTCK..........LGGE.-.....LWA.V....EIP.L-........-......-..-....-...-...-.....K.S..L.M..................................VVGIDVCKDALSK...............--DV..MVVGCVASVN...P...R.I.T...R....W.F.....S.RC..I...LQ.....R..........T.......M....T...DV......ADC....LKV.................. [...]
+D2I3M6_AILME/487-786               ............................................................................................l-VMCILPS..NQKSY..YDCIKKY.LS...CV..F..PVPSQCVLA.R..T.LTRQGM................MMSIATKIAM.......QMACK..........LGGE.-.....LWA.V....EIP.L-........-......-..-....-...-...-.....K.S..L.M..................................VVGIDVCKHEFSK...............--GM..VVVGFVASIN...P...G.I.T...R....W.F.....S.RC..T...LQ.....R..........T.......T....T...DV......ADC....LKV.................. [...]
+A6X965_MOUSE/3-172                 ...........................................................................................pg--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+D3ZDI3_RAT/541-827                 ............................................................................................l-VMCILPS..NQKNY..YDSIKRY.LS...SD..X..PTPVSCTLQ.D..A.LSKDVA................VVGFVASINS.......RITRR..........IKGL.-.....--L.P....SLS.QP........L......-..-....-...-...L.....K.S..L.M..................................VVGIDICRDALSK...............--DV..AVVGFVASIN...S...R.I.T...R....W.F.....S.RC..V...LQ.....R..........T.......A....A...DI......ADC....LKV.................. [...]
+PIWL4_RAT/541-834                  ............................................................................................l-VMCILPS..NQKNY..YDSIKRY.LS...SD..C..PVPSQCVLT.R..T.LNKQGM................MLSVATKIAM.......QMTCK..........LGGE.-.....LWA.V....EIP.L-........-......-..-....-...-...-.....K.S..L.M..................................VVGIDICRDALSK...............--DV..AVVGFVASIN...S...R.I.T...R....W.F.....S.RC..V...LQ.....R..........T.......A....A...DI......ADC....LKV.................. [...]
+PIWL4_MOUSE/541-834                ............................................................................................l-VMCILPS..NQKNY..YDSIKKY.LS...SD..C..PVPSQCVLT.R..T.LNKQGT................MLSVATKIAM.......QMTCK..........LGGE.-.....LWS.V....EIP.L-........-......-..-....-...-...-.....K.S..L.M..................................VVGIDICRDALNK...............--NV..VVVGFVASIN...S...R.I.T...R....W.F.....S.RC..V...LQ.....R..........T.......A....A...DI......ADC....LKV.................. [...]
+D1LXB5_SACKO/1-252                 ...........................................................................................ml--------..-----..-------.--...--..-..---------.-..-.------................-MSVATKIAM.......QLNCK..........LGGE.-.....LWA.L....EIP.I-........-......-..-....-...-...-.....K.N..M.M..................................IVGIDCYHDSATK...............--GQ..SIGAFIASTN...R...T.I.T...R....F.Y.....S.RV..T...FQ.....H..........T.......G....Q...EL......IDG....LKV.................. [...]
+C3XV22_BRAFL/1173-1299             ........................................................................................lqapr--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.H...S....W.Y.....S.GC..T...FQ.....H..........S.......G....Q...EL......IDG....LKV.................. [...]
+C3XV22_BRAFL/2983-3180             ............................................................saeaapkkkmqkkkkranqktstiklttepvpv--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+C3XV22_BRAFL/1831-1964             .........................................................................................ktqm--------..-RKDR..YDAIKKF.CC...VD..H..PVPSQVIVS.R..T.LNKKQM................LMSVATKIAM.......QLNCK..........LGGE.-.....LWA.V....EIP.L-........-......-..-....-...-...-.....K.S..M.M..................................VVGIDCYHDSATK...............--GQ..SIGGVIASMN...S...S.L.T...R....W.Y.....S.RC..T...FQ.....H..........S.......G....Q...EL......IDG....LKV.................. [...]
+C3XV20_BRAFL/551-843               .............................................................................................MVVCIVSN..NRKDR..YDAIKKF.CC...VD..R..PVPSQVIVS.R..T.LSKKQM................LMSVCTKVAL.......QMNCK..........LGGE.-.....LWA.L....EIP.I-........-......-..-....-...-...-.....K.N..L.M..................................VVGINCYQDSLTK...............--GQ..SVGGVIASIN...S...S.L.T...R....W.Y.....S.RC..T...FQ.....R..........S.......S....Q...EL......IDG....LKV.................. [...]
+Q9GPA6_STRPU/114-407               ............................................................................................i-VVVILPT..NRKDR..YDAIKKT.CV...VT..H..PCPSQVIVS.R..T.LSKQQM................LMSVATKIAM.......QMNCK..........MGGD.-.....LWR.V....EIP.L-........-......-..-....-...-...-.....S.N..L.M..................................IIGIDSYHDSLTK...............--GR..SVLGFVASMN...K...S.Q.T...S....F.F.....S.SC..A...FQ.....H..........A.......Q....G...EF......GAN....LST.................. [...]
+Q9GPA7_STRPU/547-808               ............................................................................................i-VVVILPT..NRKDR..YDAIKKT.CV...VT..H..PCPSQVIVS.R..T.LSKQQM................LMSVATKIAM.......QMNCK..........MGGD.-.....LWR.V....EIP.L-........-......-..-....-...-...-.....S.N..L.M..................................IIGIDSYHDSLTK...............--GR..SVLGFVASMN...K...S.Q.T...S....F.F.....S.SC..A...FQ.....H..........A.......Q....G...EF......GAN....LST.................. [...]
+Q9GPA8_STRPU/547-840               ............................................................................................i-VVVILPT..NRKDR..YDAIKKT.CV...VT..H..PCPSQVIVS.R..T.LSKQQM................LMSVATKIAM.......QMNCK..........MGGD.-.....LWR.V....EIP.L-........-......-..-....-...-...-.....S.N..L.M..................................IIGIDSYHDSLTK...............--GR..SVLGFVASMN...K...S.Q.T...S....F.F.....S.SC..A...FQ.....H..........A.......Q....G...EF......GAN....LST.................. [...]
+B9ZU53_9TURB/586-879               ...........................................................................................la--IVVLPD..NRADR..YNAIKRQ.CY...VE..T..PVPSQCVLN.R..T.LNNEKG................FMSVVSKLAL.......QINVK..........MGGE.-.....PWM.C....KLP.V-........-......-..-....-...-...D.....P.G..A.M..................................IIGMDVHHVGKGG...............-KGP..SQLGFVSSLN...V...E.L.T...R....F.Y.....S.RV..-...YN.....N..........E.......S....N...EI......SGT....IKV.................. [...]
+B2Z3D6_SCHMD/665-960               ............................................................................................l-VVTILSA..VREDR..YNAIKKF.CY...VD..C..PVPSQVVLA.Q..T.LKEGPK................LNSVAVNIAL.......QINAK..........LGGE.-.....LWA.V....KIP.I-........-......-..-....-...-...-.....K.K..F.M..................................VVGLDVWHDTKGR...............--SR..SVGAVVGSTN...A...L.C.T...R....W.F.....S.KS..H...LQ.....E..........Q.......D....K...EI......MYV....LQS.................. [...]
+D2Z0E0_DUGJA/657-952               ............................................................................................l-VVTILSA..VREDR..YNAIKKH.CY...VD..C..PVPSQVVLA.Q..T.LKEGPK................LNSVAVNIAL.......QINAK..........LGGE.-.....LWA.V....KIP.I-........-......-..-....-...-...-.....K.K..F.M..................................VVGLDVWHDAKGR...............--GR..SVGAVVGSTN...A...L.C.T...R....W.F.....S.KS..H...LQ.....E..........H.......D....K...EI......VYV....LQS.................. [...]
+D2A2S9_TRICA/552-839               ...........................................................................................va--VFICPT..LRADR..YSIIKKM.CC...VN..I..PVASQVILS.K..T.LSNPQK................VRTIIHKIAM.......QITCK..........LGGT.-.....LWS.V....KIP.V-........-......-..-....-...-...-.....S.G..W.M..................................VCGIDVYHGANNQ...............----..SVCGFVASIN...G...S.M.T...K....Y.F.....S.KA..M...FQ.....D..........-.......-....G...EI......GDY....FKM.................. [...]
+A9ZSZ2_BOMMO/619-912               ............................................................................................q-LVVAICS.tKRDDR..YAAIKKV.CC...AD..N..PVPSQVINA.R..T.LMNTNK................IRSITQKILL.......QLNCK..........LGGT.-.....LWS.I....SIP.F-........-......-..-....-...-...-.....K.S..A.M..................................IVGIDSYHDPSRR...............--NR..SVCSFVASYN...Q...S.M.T...L....W.Y.....S.KV..I...FQ.....E..........K.......G....Q...EI......VDG....LKC.................. [...]
+A7BJS3_BOMMO/619-912               ............................................................................................q-LVVAICS.tKRDDR..YAAIKKV.CC...AD..N..PVPSQVINA.R..T.LMNTNK................IRSITQKILL.......QLNCK..........LGGT.-.....LWS.I....SIP.F-........-......-..-....-...-...-.....K.S..A.M..................................IVGIDSYHDPSRR...............--NR..SVCSFVASYN...Q...S.M.T...L....W.Y.....S.KV..I...FQ.....E..........K.......G....Q...EI......VDG....LKC.................. [...]
+A7LNN5_BOMMO/2-193                 ...........................................................................................ls--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..A.M..................................IVGIDSYHDPSRR...............--NR..SVCSFVASYN...Q...S.M.T...L....W.Y.....S.KV..I...FQ.....E..........K.......G....Q...EI......VDG....LKC.................. [...]
+B4N2M0_DROWI/49-131                ........................................................................................fhlsg--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+B4JP35_DROGR/334-622               ...........................................................................................qi-VVCICSS..RRDDR..YSAIKKI.CC...AE..R..PVASQVINS.R..T.LSNETR................NRSIVQKIIL.......QMNCK..........MGGS.-.....LWT.V....KIP.F-........-......-..-....-...-...-.....K.N..V.M..................................ICGIDSYHDPSQK...............--SH..SVAAFVASLN...S...T.Y.T...H....W.F.....S.KA..V...IQ.....T..........K.......K....E...EL......VNG....LTS.................. [...]
+B7FNN2_DROME/566-845               ............................................................................................m-VVCICHN..RRDDR..YAAIKKI.CC...SE..I..PIPSQVINA.K..T.LQNDLK................IRSVVQKIVL.......QMNCK..........LGGS.-.....LWT.V....KIP.F-........-......-..-....-...-...-.....K.N..V.M..................................ICGIDSYHDPSNR...............--GN..SVAAFVASIN...S...S.Y.S...Q....W.Y.....S.KA..V...VQ.....T..........K.......R....E...EI......VNG....LSA.................. [...]
+A4GUJ7_DROME/566-848               ............................................................................................m-VVCICHN..RRDDR..YAAIKKI.CC...SE..I..PIPSQVINA.K..T.LQNDLK................IRSVVQKIVL.......QMNCK..........LGGS.-.....LWT.V....KIP.F-........-......-..-....-...-...-.....K.N..V.M..................................ICGIDSYHDPSNR...............--GN..SVAAFVASIN...S...S.Y.S...Q....W.Y.....S.KA..V...VQ.....T..........K.......R....E...EI......VNG....LSA.................. [...]
+A7YFW6_DROME/299-494               ............................................................................................m-VVCICHN..RRDDR..YAAIKKI.CC...SE..I..PIPSQVINA.K..T.LQNDLK................IRSVVQKIVL.......QMNCK..........LGGS.-.....LWT.V....KIP.F-........-......-..-....-...-...-.....K.N..V.M..................................ICGIDSYHDPSNR...............--GN..SVAAFVASIN...S...S.Y.S...Q....W.Y.....S.KA..V...VQ.....T..........K.......R....E...EI......VNG....LSA.................. [...]
+B6IDV1_DROME/574-861               ............................................................................................m-VVCICHN..RRDDR..YAAIKKI.CC...SE..I..PIPSQVINA.K..T.LQNDLK................IRSVVQKIVL.......QMNCK..........LGGS.-.....LWT.V....KIP.F-........-......-..-....-...-...-.....K.N..V.M..................................ICGIDSYHDPSNR...............--GN..SVAAFVASIN...S...S.Y.S...Q....W.Y.....S.KA..V...VQ.....T..........K.......R....E...EI......VNG....LSA.................. [...]
+Q7PLK0_DROME/566-853               ............................................................................................m-VVCICHN..RRDDR..YAAIKKI.CC...SE..I..PIPSQVINA.K..T.LQNDLK................IRSVVQKIVL.......QMNCK..........LGGS.-.....LWT.V....KIP.F-........-......-..-....-...-...-.....K.N..V.M..................................ICGIDSYHDPSNR...............--GN..SVAAFVASIN...S...S.Y.S...Q....W.Y.....S.KA..V...VQ.....T..........K.......R....E...EI......VNG....LSA.................. [...]
+A4GND8_DROME/566-853               ............................................................................................m-VVCICHN..RRDDR..YAAIKKI.CC...SE..I..PIPSQVINA.K..T.LQNDLK................IRSVVQKIVL.......QMNCK..........LGGS.-.....LWT.V....KIP.F-........-......-..-....-...-...-.....K.N..V.M..................................ICGIDSYHDPSNR...............--GN..SVAAFVASIN...S...S.Y.S...Q....W.Y.....S.KA..V...VQ.....T..........K.......R....E...EI......VNG....LSA.................. [...]
+Q7PWT1_ANOGA/618-916               ............................................................................................q-IVVIICP.tSRDDR..YAAIKRI.LC...TE..V..PIPSQVINA.R..T.LANEKR................NRSVVLKVLL.......QMNCK..........LGGS.-.....LWG.V....RVP.I-........-......-..-....-...-...-.....K.R..T.M..................................ICGIDTYHEAKQR...............--SN..SVAAFVGSLD...A...A.F.T...H....W.Y.....S.RA..T...VQ.....E..........R.......K....E...EI......LNG....LCV.................. [...]
+B0WE96_CULQU/634-782               ............................................................................................q-IVVIICP.tSRDDR..YAAIKRI.CC...SE..I..PVPSQVINA.R..T.LANEAK................NRAIVQKILL.......QMNCK..........LGGT.-.....LWS.I....KIP.F-........-......-..-....-...-...-.....Q.N..V.M..................................IAGIDTYHDPKQK...............--SN..SVSAFVASLN...G...E.Y.T...R....W.Y.....S.RA..C...IQ.....S..........K.......K....E...EF......MNG....LCA.................. [...]
+B0WE95_CULQU/32-179                ............................................................................................i--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+Q170R5_AEDAE/637-930               ............................................................................................q-IVVIICP.tSRDDR..YAAIKRI.CC...SE..I..PVPSQVINA.R..T.LSNEAK................NRAIVQKIIL.......QMNCK..........LGGT.-.....LWS.I....RIP.F-........-......-..-....-...-...-.....D.N..V.M..................................IAGIDTYHDPKQK...............--SN..SVSAFVASLN...G...D.Y.T...R....W.Y.....S.RA..C...IQ.....S..........K.......K....E...EF......ING....LCA.................. [...]
+B7QEM1_IXOSC/88-370                ............................................................................................v-IVLIFPT..SRDDR..YSAVKRL.CC...VD..M..PVPSQVIIS.N..T.IGQQQK................LRSVTQKVAL.......QINCK..........LGGE.-.....LWK.V....EIP.M-........-......-..-....-...-...-.....H.N..V.M..................................VIGIDVYHDITRG...............--RQ..SVMGFVASMN...Q...S.L.T...R....W.F.....S.KC..A...FQ.....E..........P.......G....K...EL......VNC....IKI.................. [...]
+PIWL2_XENTR/644-935                ............................................................................................l-LVCLISG..TRDDL..YGAIKKL.CC...VQ..N..PVPSQVINT.R..T.ISQPQK................LRSIAQKILL.......QINCK..........LGGE.-.....LWG.V....DIP.L-........-......-..-....-...-...-.....K.S..V.M..................................VIGMDVYHDPSRG...............--MR..SVLGFVASIN...S...C.L.T...A....W.Y.....S.RV..V...FQ.....L..........P.......N....Q...EI......MDS....LKL.................. [...]
+D2H044_AILME/665-956               .............................................................................................MVVCIIMG..ARDDL..YGAIKKL.CC...VQ..A..PVPSQVINV.R..T.IGQPTR................LRSVAQKILL.......QINCK..........LGGE.-.....LWG.V....DIP.L-........-......-..-....-...-...-.....K.Q..L.M..................................VIGMDVYHDPSRG...............--MR..SVVGFVASIN...L...T.L.T...K....W.Y.....S.RV..V...FQ.....M..........P.......H....Q...EI......VDS....LKL.................. [...]
+PIWL2_HUMAN/668-959                .............................................................................................MVVCIIMG..PRDDL..YGAIKKL.CC...VQ..S..PVPSQVVNV.R..T.IGQPTR................LRSVAQKILL.......QINCK..........LGGE.-.....LWG.V....DIP.L-........-......-..-....-...-...-.....K.Q..L.M..................................VIGMDVYHDPSRG...............--MR..SVVGFVASIN...L...T.L.T...K....W.Y.....S.RV..V...FQ.....M..........P.......H....Q...EI......VDS....LKL.................. [...]
+D3ZRE1_RAT/666-957                 .............................................................................................MVVCIIMG..TRDDL..YGAIKKL.CC...VQ..S..PVPSQVINV.R..T.IGQPTR................LRSVAQKILL.......QMNCK..........LGGE.-.....LWG.V....DIP.L-........-......-..-....-...-...-.....K.Q..L.M..................................VIGMDVYHDPSRG...............--MR..SVVGFVASIN...L...T.L.T...K....W.Y.....S.RV..V...FQ.....M..........P.......H....Q...EI......VDS....LKL.................. [...]
+PIWL2_MOUSE/666-957                .............................................................................................MVVCIIMG..TRDDL..YGAIKKL.CC...VQ..S..PVPSQVINV.R..T.IGQPTR................LRSVAQKILL.......QMNCK..........LGGE.-.....LWG.V....DIP.L-........-......-..-....-...-...-.....K.Q..L.M..................................VIGMDVYHDPSRG...............--MR..SVVGFVASIN...L...T.L.T...K....W.Y.....S.RV..V...FQ.....M..........P.......H....Q...EI......VDS....LKL.................. [...]
+PIWL2_ONCMY/749-1040               ............................................................................................l-VVCIMTG..NRDDL..YSAIKKL.CC...VQ..S..PVPSQAINV.R..T.ISQPQK................LRSVAQKILL.......QMNCK..........LGGE.-.....LWT.V....NVP.L-........-......-..-....-...-...-.....K.H..L.M..................................VIGVDVHHDTSKK...............--NR..SVMGFVASLN...S...L.L.T...R....W.Y.....S.RV..T...FQ.....M..........P.......N....E...EI......ING....FRV.................. [...]
+PIWL2_DANRE/741-1032               ............................................................................................l-VVCIMTG..NRDDL..YSAIKKL.CC...IQ..S..PVPSQAINV.R..T.ISQPQK................LRSVAQKILL.......QINCK..........LGGE.-.....LWT.V....NVP.LK........Y......-..-....-...-...-.....-.-..L.M..................................VIGVDVHHDTSKK...............--SR..SVMGFVASLN...S...M.L.T...K....W.Y.....S.RV..T...FQ.....M..........P.......N....E...EI......ING....FRV.................. [...]
+A5PL40_DANRE/7-278                 .........................................................................................ssra--------..-----..-------.--...--..F..TLNSQAINV.R..T.ISQPQK................LRSVAQKILL.......QINCK..........LGGE.-.....LWT.V....NVP.LK........Y......-..-....-...-...-.....-.-..L.M..................................VIGVDVHHDTSKK...............--SR..SVMGFVASLN...S...M.L.T...K....W.Y.....S.RV..T...FQ.....M..........P.......N....E...EI......ING....FRV.................. [...]
+B9U224_ORYLA/729-1020              ............................................................................................l-VVCVIEG..NRDDL..YSAIKKL.CC...LK..C..PVPSQVINV.R..T.ISQQQK................LRGIAQKILL.......QLNSK..........LGGE.-.....LWT.V....GIP.L-........-......-..-....-...-...-.....K.S..L.M..................................VVGVDVHHDTSKK...............--HQ..SVMGFVASVN...S...S.L.T...H....W.Y.....S.RV..T...FQ.....T..........P.......T....E...EL......ISG....FRA.................. [...]
+Q4RPK4_TETNG/383-660               ................................................................................plvlnafkyicmf--------..-----..-------.--...--..-..--CPQAINV.R..T.ISNQAK................LKSIAQKILL.......QINCK..........LGGE.-.....LWT.V....SIP.M-........-......-..-....-...-...-.....K.N..F.M..................................VVGVDVYHDTKKK...............--YH..SVMGFVASVN...S...T.L.T...R....W.Y.....S.RV..I...FQ.....T..........P.......N....E...EL......IGG....FRI.................. [...]
+A7SQI3_NEMVE/441-733               ...........................................................................................qv-VVVIFPT..SRDDR..YAAVKKL.CC...VE..S..PVPSQVIIS.K..T.ISNPTK................LRSVVQKIAL.......QINVK..........LGGE.-.....LWA.L....DIP.S-........-......-..-....-...-...-.....R.S..L.M..................................VCGIDVYHDKARG...............--GR..SVGGLVCSMN...R...S.L.T...R....W.Y.....S.DV..C...FQ.....S..........P.......G....Q...EL......IDG....LKM.................. [...]
+A7T7C9_NEMVE/1-180                 ............................................................................................r--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.S..L.M..................................VCGIDVYHDKARG...............--GR..SVGGLVCSMN...R...S.L.T...R....W.Y.....S.DV..C...FQ.....S..........P.......G....Q...EL......IDG....LKMllikgirkwhdairkwhd [...]
+C3Z5S8_BRAFL/570-730               .............................................................................................MVVCIFPT..PRDDR..YSAIKKL.CC...VD..S..PVPSQVINA.K..T.IGSQQK................LRSVTQKIAL.......QINAK..........LGGE.-.....LWA.L....EIP.L-........-......-..-....-...-...-.....K.N..I.M..................................VVGIDVYHEIKKG...............--VR..SVAGFVASTN...R...E.L.T...R....W.Y.....S.RT..C...FQ.....M..........P.......G....Q...EL......MDG....LKL.................. [...]
+B0FLQ9_STRPU/653-945               ............................................................................................l-VIAIFPT..SRDDR..YSAFKKL.CC...IE..A..PVPSQVING.R..T.ISQKQK................LRSVTQKIAL.......QINCK..........LGGE.-.....LWA.L....DVP.L-........-......-..-....-...-...-.....S.K..L.M..................................VIGIDVYHDPNRG...............--KK..SIGAFVASMN...R...D.L.T...S....W.F.....S.RV..C...IQ.....T..........P.......H....Q...EL......IGG....LKL.................. [...]
+C9E0T2_APIME/1-294                 ............................................................................................m--VIVFPT..NRTDR..YSAVKRV.CC...VE..M..PVPSQVIMS.R..T.ISRGDK................LKSITEKIAL.......QINCK..........LGGA.-.....LWA.L....AIP.M-........-......-..-....-...-...-.....D.H..C.M..................................ICGIDVYHAGVGQ...............SMKG..SVAGFVASLD...K...L.L.T...S....W.H.....S.KI..C...LQ.....G..........K.......H....Q...EL......VDI....LQI.................. [...]
+C9E0S9_APIME/551-753               ............................................................................................l-MVIVFPT..NRTDR..YSAVKRV.CC...VE..M..PVPSQVIMS.R..T.ISRGDK................LKSITEKIAL.......QINCK..........LGGA.-.....LWA.L....AIP.M-........-......-..-....-...-...-.....D.H..C.M..................................ICGIDVYHAGVGQ...............SMKG..SVAGFVASLD...K...L.L.T...S....W.H.....S.KI..C...LQ.....G..........K.......H....Q...EL......VDI....LQI.................. [...]
+C9E0S8_APIME/604-898               ............................................................................................l-MVIVFPT..NRTDR..YSAVKRV.CC...VE..M..PAPSQVIMS.R..T.ISRGDK................LKSITEKIAL.......QINCK..........LGGA.-.....LWA.L....AIP.M-........-......-..-....-...-...-.....D.H..C.M..................................ICGIDVYHAGVGQ...............SMKG..SVAGFVASLD...K...L.L.T...S....W.H.....S.KI..C...LQ.....G..........K.......H....Q...EL......VDI....LQI.................. [...]
+C3ZKW1_BRAFL/534-739               ..........................................................................................cqk--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...-Q.....G..........Q.......G....E...EV......IPS....IGK.................. [...]
+B9ZU54_9TURB/593-893               ............................................................................................i-VVCLLPT..KVEQK..YNAIKRQ.CC...IS..T..PVASQVIIS.R..T.LSNDSK................RKRIVQNIGL.......QMVAK..........MGGE.-.....LWG.V....QLP.TV........Q......Q..V....-...-...-.....G.R..L.M..................................VVGIDVYHEAKKR...............--SE..SWLGVCCSLN...Q...H.A.T...R....Y.K.....S.SV..H...KQ.....T..........P.......G....V...EL......GGF....YNV.................. [...]
+C9E0T4_APIME/497-785               ............................................................................................l-IFCVVSN..NRADR..YSAIKKK.CT...HD..R..PVASQVFLA.K..N.LTNKGI................-RSIATKVAI.......QLNCK..........LGGA.-.....PWS.V....ELP.P-........-......-..-....-...-...-.....I.N..L.M..................................VVGYDVCHDPADK...............--SR..DFGAMVASLD...R...S.L.T...R....Y.Y.....S.AV..A...AH.....T..........T.......G....E...EL......SDE....FGE.................. [...]
+C9E0T3_APIME/525-813               ............................................................................................l-IFCVVSN..NRADR..YSAIKKK.CT...HD..R..PVASQVFLA.K..N.LTNKGI................-RSIATKVAI.......QLNCK..........LGGA.-.....PWS.V....ELP.P-........-......-..-....-...-...-.....I.N..L.M..................................VVGYDVCHDPADK...............--SR..DFGAMVASLD...R...S.L.T...R....Y.Y.....S.AV..A...AH.....T..........T.......G....E...EL......SDE....FGE.................. [...]
+A7LM14_BOMMO/414-612               .............................................................................................LILCVLAR..NYADR..YEAIKKK.CT...VD..R..AVPTQVVCA.R..N.MSSKSA................-MSIATKVAI.......QINCK..........LGGS.-.....PWT.V....DIP.L-........-......-..-....-...-...-.....P.S..L.M..................................VVGYDVCHDTRSK...............--EK..SFGAFVATLD...K...Q.M.T...Q....Y.Y.....S.IV..N...AH.....T..........S.......G....E...EL......SSH....MGF.................. [...]
+A8D8P8_BOMMO/594-885               .............................................................................................LILCVLAR..NYADR..YEAIKKK.CT...VD..R..AVPTQVVCA.R..N.MSSKSA................-MSIATKVAI.......QINCK..........LGGS.-.....PWT.V....DIP.L-........-......-..-....-...-...-.....P.S..L.M..................................VVGYDVCHDTRSK...............--EK..SFGAFVATLD...K...Q.M.T...Q....Y.Y.....S.IV..N...AH.....T..........S.......G....E...EL......SSH....MGF.................. [...]
+Q7QG53_ANOGA/576-875               .............................................................................................MIMCVVSN..SKSDR..YTAIKKK.CC...VE..R..AIPTQIMVQ.K..T.ITPKSGnv............rtLMSVATKVVI.......QMNCK..........LGGV.-.....PWK.V....KIP.L-........-......-..-....-...-...-.....N.G..L.M..................................TIGFDVCHDSKDK...............--SK..SFGAMVATLD...H...D.N.RgtpK....F.F.....S.TV..S...HH.....S..........S.......G....E...EI......SNY....LPL.................. [...]
+Q16IF2_AEDAE/569-868               .............................................................................................LIMCVVTN..QKADR..YTAIKKK.CC...VD..R..AVPTQVICQ.K..T.ITPKGGnv............rtLMSVATKVVI.......QMNCK..........LGGV.-.....PWK.V....KIP.L-........-......-..-....-...-...-.....S.G..M.M..................................TIGFDVCHDTNDK...............--SK..SYGAMVATFD...H...D.N.RgtpK....F.F.....S.TV..S...QH.....R..........H.......G....E...EI......CNY....LPL.................. [...]
+Q16ZS2_AEDAE/361-660               .............................................................................................LIMCVVTN..QKADR..YTAIKKK.CC...VD..R..AVPTQVICQ.K..T.ITPKGGnv............rtLMSVATKVVI.......QMNCK..........LGGV.-.....PWK.V....KIP.L-........-......-..-....-...-...-.....S.G..M.M..................................TIGFDVCHDTNDK...............--SK..SYGAMVATFD...H...D.N.RgtpK....F.F.....S.TV..S...QH.....R..........H.......G....E...EI......CNY....LPL.................. [...]
+Q16ZS3_AEDAE/562-861               .............................................................................................LIMCVVTN..QKADR..YTAIKKK.CC...VD..R..AVPTQVICQ.K..T.ITPKGGnv............rtLMSVATKVVI.......QMNCK..........LGGV.-.....PWK.V....KIP.L-........-......-..-....-...-...-.....N.G..L.M..................................TVGFDVCHDTNDK...............--SK..SYGAMVATFD...H...D.N.RgtpK....F.F.....S.TV..S...QH.....G..........H.......G....E...EI......CNY....LPL.................. [...]
+B0W5T3_CULQU/510-809               .............................................................................................MIMCVVSN..NKADR..YTAIKKK.CC...VD..R..AIPTQVMVQ.R..T.ITPKGGnv............rtLMSVATKVVI.......QMNCK..........LGGV.-.....PWK.V....KIP.L-........-......-..-....-...-...-.....S.G..L.M..................................TVGFDVCHDTKDK...............--SK..SFGAMVATFDyenK...G.V.P...K....Y.F.....S.TV..S...QH.....T..........H.......G....E...EI......SNY....LPL.................. [...]
+B0W5P0_CULQU/552-851               .............................................................................................MIMCVVSN..NKADR..YTAIKKK.CC...VD..R..AIPTQVMVQ.R..T.ITPKGGnv............rtLMSVATKVVI.......QMNCK..........LGGV.-.....PWK.V....KIP.L-........-......-..-....-...-...-.....S.G..L.M..................................TVGFDVCHDTKDK...............--SK..SFGAMVATFDyenK...G.V.P...K....Y.F.....S.TV..S...QH.....T..........H.......G....E...EI......SNY....LPL.................. [...]
+Q171B3_AEDAE/547-846               ............................................................................................l-VMCVVTN..NKADR..YTAIKKK.CC...VD..R..AIPTQVMVQ.K..T.ITPKGGnv............rtLMSVATKVVI.......QMNCK..........LGGV.-.....PWK.V....KIP.L-........-......-..-....-...-...-.....N.G..L.M..................................TIGFDVCHDGKDK...............--SK..SFGAMVATLDhdnK...G.T.P...K....F.F.....S.TV..S...QH.....T..........H.......G....E...EI......SNY....LPI.................. [...]
+B0W5T4_CULQU/546-845               .............................................................................................LIMCVVTN..NKADR..YTAIKKK.CC...VD..R..AIPTQVMVQ.K..T.ITPKGGnv............rtLMSVATKVVI.......QMNCK..........LGGV.-.....PWK.V....KIP.L-........-......-..-....-...-...-.....N.G..L.M..................................TIGFDVCHDAKDK...............--SK..SFGAMVATLDhdnK...G.T.P...K....F.F.....S.TV..S...QH.....T..........H.......G....E...EI......SNY....LPI.................. [...]
+Q5TW24_ANOGA/530-829               ............................................................................................l-VMCIVPN..DRADR..YKAIKKK.CC...VD..R..PLPCQVIKA.R..T.ITPKNQnl............raLLTIATKVMI.......QLNCK..........LGGI.-.....PWI.V....KNP.L-........-......-..-....-...-...-.....S.S..V.M..................................VVGFDVCHDASDK...............--SL..SYGALVATMYa.aK...HiE.P...K....Y.F.....S.VI..E...RH.....Q..........R.......G....E...EL......SSF....LSS.................. [...]
+Q16JS1_AEDAE/576-874               .............................................................................................LIMCLVTN..DKADR..YSAIKKK.CC...VD..R..AVPTQVLKT.R..T.ITPKGGnv............rtLMSVATKVAI.......QMNCK..........LGGI.-.....PWV.I....KSP.L-........-......-..-....-...-...-.....A.S..V.M..................................VIGYDVCKDSKDR...............--SK..GYGALVASMYgggV...K.H.P...K....Y.Y.....S.TV..N...QH.....A..........Y.......G....E...EL......SNY....LAL.................. [...]
+Q176R2_AEDAE/633-931               .............................................................................................MIMCVVTN..DKADR..YAAIKKK.CC...VD..R..AVATQVIKT.R..T.ITPKGGnv............rtLMSVATKVAI.......QVNCK..........LGGI.-.....PWI.L....KNP.L-........-......-..-....-...-...-.....S.S..I.M..................................VIGFDVCHDTRDK...............--SK..SYGALVASMYgagC...R.H.P...K....Y.F.....S.TV..N...HH.....S..........N.......G....E...EL......SNF....MAQ.................. [...]
+B0XE75_CULQU/501-788               .............................................................................................MIFCVVSN..DKADR..YAAIKKK.TC...VE..R..AIPTQVIKA.R..T.ITPKGGnv............rtLMSVATKVAI.......QMNCK..........LGGI.-.....PWV.L....RNP.L-........-......-..-....-...-...-.....T.S..V.M..................................VIGFDVCHDTRDK...............----..-----SKSYG...Q...K.H.P...K....F.F.....S.TV..N...HH.....S..........S.......G....E...EL......SNF....MAQ.................. [...]
+Q16JS2_AEDAE/571-869               ............................................................................................l-VMCLVSN..DKADR..YAAIKKK.SC...VD..R..AVATQVIKA.R..T.ITPKGGnv............rtLMSVATKVAI.......QLNCK..........LGGI.-.....PWV.L....KNP.L-........-......-..-....-...-...-.....T.S..V.M..................................VIGFDVCHDTRDK...............--SK..SFGAMVASMYgggC...K.H.P...K....F.F.....S.TV..N...PH.....T..........S.......G....E...EL......SNF....MAQ.................. [...]
+B0XE74_CULQU/592-891               .............................................................................................LIMCIVTN..DKVDR..YAAIKKK.CC...VD..R..AVPTQVIKC.K..T.ITPKGGnp............rtLMSVATKVAI.......QLNCK..........LGGI.-.....PWI.V....KSP.L-........-......-..-....-...-...-.....L.S..V.M..................................CLGFDVCRDTKDR...............--NK..TYGALVAAMY...H...G.K.H...RyhpnF.Y.....S.TV..N...QH.....A..........N.......G....A...EL......SDS....LAL.................. [...]
+B0WYL9_CULQU/560-857               .............................................................................................LIMCVVTD..DKADR..YAAIKKK.CC...VN..R..AIPTQVIKS.R..T.ITPRHGn..............mMLSVATKVAI.......QLNSK..........LGGI.-.....PWV.V....KVL.M-........-......-..-....-...-...-.....E.S..V.M..................................CVGFDVCRDTKDK...............--NI..CYGALVAAMN...H...G.K.H...R....Q.H.....S.EF..Y...ST.....V..........N.......Q....H...SY......GAD....LSDsl................ [...]
+B4P152_DROYA/546-844               ...........................................................................................qi-VMVVMRS..QNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.R..V.IAPRQEks............agLMSIATKVVI.......QMNAK..........LMGA.-.....PWM.I....DLP.L-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSSKDK...............--NK..SYGALVATMD..qR...E.S.S...R....Y.F.....S.TV..T...EH.....M..........K.......G....Q...EL......SEH....MSL.................. [...]
+B3N4Z9_DROER/546-844               ...........................................................................................qi-VMVVMRS..PNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.K..V.IAPRQEka............tgLMSIATKVVI.......QMNAK..........LMGA.-.....PWM.I....SLP.L-........-......-..-....-...-...-.....H.G..L.M..................................TVGFDVCHSSKDK...............--NK..SYGALVATMD..qK...E.S.N...R....Y.F.....S.SV..N...EH.....M..........K.......G....Q...EL......SEH....MSL.................. [...]
+Q95PE5_DROME/1-176                 .............................................................................................--------..-----..YSCIKKR.TC...VD..R..PVPSQVVTL.K..V.IAPRQQkp............tgLMSIATKVVI.......QMNAK..........LMGA.-.....PWQ.V....VIP.L-........-......-..-....-...-...-.....H.G..L.M..................................TVGFDVCHSPKNK...............--NK..SYGAFVATMD..qK...E.S.F...R....Y.F.....S.TV..N...EH.....I..........K.......G....Q...EL......SEQ....MSV.................. [...]
+A8DYZ0_DROME/483-781               ...........................................................................................qi-VMVVMRS..PNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.K..V.IAPRQQkp............tgLMSIATKVVI.......QMNAK..........LMGA.-.....PWQ.V....VIP.L-........-......-..-....-...-...-.....H.G..L.M..................................TVGFDVCHSPKNK...............--NK..SYGAFVATMD..qK...E.S.F...R....Y.F.....S.TV..N...EH.....I..........K.......G....Q...EL......SEQ....MSV.................. [...]
+O76922_DROME/554-852               ...........................................................................................qi-VMVVMRS..PNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.K..V.IAPRQQkp............tgLMSIATKVVI.......QMNAK..........LMGA.-.....PWQ.V....VIP.L-........-......-..-....-...-...-.....H.G..L.M..................................TVGFDVCHSPKNK...............--NK..SYGAFVATMD..qK...E.S.F...R....Y.F.....S.TV..N...EH.....I..........K.......G....Q...EL......SEQ....MSV.................. [...]
+B4Q9X4_DROSI/545-843               ...........................................................................................qi-VMVVIRT..PNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.K..V.IAPRQQkp............agLSSIATKVVI.......QMNAK..........LMGA.-.....PWK.I....EIP.L-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSPKNK...............--NK..SYGALVATMD..qK...E.S.F...R....Y.F.....S.TV..N...EH.....S..........K.......G....Q...EL......SEQ....MSL.................. [...]
+B4HWZ3_DROSE/549-847               ...........................................................................................qi-VMVVIRT..PNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.K..V.IAPRQQks............agLSSVATKVVI.......QMNAK..........LMGA.-.....PWK.I....EIP.L-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSPKNK...............--NK..SYGALVATMD..qK...E.S.F...R....Y.F.....S.TV..N...EH.....T..........K.......G....Q...EL......SEQ....MSL.................. [...]
+B4LV39_DROVI/546-843               ............................................................................................i-IMLVMKS..PNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.R..T.IAPRPEks............ggLMSIATKVVI.......QMNAK..........LMGA.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....K.G..L.M..................................TVGFDVCHSSKNK...............--NK..SYGALVASLD..mK...Y.S.E...R....Y.Y.....S.SV..T...EH.....M..........K.......G....Q...EL......SDQ....MSL.................. [...]
+B4KHC1_DROMO/539-836               ............................................................................................i-IMLVLKT..NNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.R..T.IAPRPEra............sgLMSVATKVVI.......QMNAK..........LMGA.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSSKNK...............--NK..SYGALVATMD..mK...S.S.T...R....Y.F.....S.SV..S...EH.....M..........K.......G....Q...EL......SDQ....MSL.................. [...]
+B4JBE4_DROGR/542-839               ............................................................................................i-IMLVLRS..PNEEK..YSCIKKR.AC...VD..R..PVPSQVVTL.R..T.IAPRPDra............sgLMSIATKVVI.......QMNAK..........IMGA.-.....PWI.I....ELP.L-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSSKDK...............--NK..SYGALVATMD..mK...L.S.T...R....Y.Y.....S.SV..T...EH.....L..........K.......G....Q...EL......SNQ....MSV.................. [...]
+B4MUA1_DROWI/563-860               ............................................................................................i-VMLVLKT..PNEEK..YSCIKKR.AC...VD..R..PVPSQVVTL.K..T.IAPRQEra............ggLMSIATKVVI.......QMNAK..........LMGA.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSPKSK...............--NK..SYGALVATMD..mK...E.S.Q...R....Y.Y.....S.SV..T...EH.....M..........K.......G....Q...EL......SNQ....MSM.................. [...]
+B4MUA0_DROWI/539-836               ............................................................................................i-VMLVLKT..PNEEK..YSCIKKR.AC...VD..R..PVPSQVVTL.K..T.IAPRQEra............ggLMSIATKVVI.......QMNAK..........LMGA.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSPKSK...............--NK..SYGALVATMD..mK...E.S.Q...R....Y.Y.....S.SV..T...EH.....M..........K.......G....Q...EL......SNQ....MSM.................. [...]
+B3MJZ7_DROAN/562-859               ............................................................................................i-VMLVLKA..PNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.K..T.IAPRQEks............agLMSIATKVVI.......QMNAK..........LMGA.-.....PWM.I....ELP.V-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSSKNK...............--NK..SYGALVATMD..mK...T.S.T...R....Y.F.....S.SV..T...EH.....M..........K.......G....Q...EL......SDQ....MSM.................. [...]
+B4G765_DROPE/541-838               ............................................................................................i-IMLVLKA..PNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.K..T.IAPRKEks............agLMSIATKVVI.......QMNAK..........LMGA.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSSKNK...............--NK..SYGALVATMD..mK...S.S.N...R....Y.F.....S.SV..N...EH.....M..........K.......G....Q...EL......SDQ....MSM.................. [...]
+Q29P29_DROPS/540-837               ............................................................................................i-IMLVLKA..PNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.K..T.IAPRKEks............agLMSIATKVVI.......QMNAK..........LMGA.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSSKNK...............--NK..SYGALVATMD..mK...L.S.N...R....Y.F.....S.SV..N...EH.....M..........K.......G....Q...EL......SEQ....MSM.................. [...]
+B4N6U3_DROWI/34-103                ...........................................................................................nh--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+B4JBE1_DROGR/574-864               ............................................................................................l-VLCIVPS..NNVER..YSSIKKR.GC...VD..R..SVPTQVVTT.R..A.NQK---................GMSVATKIAI.......QINCK..........LGYT.-.....PWM.I....AVP.M-........-......-..-....-...-...-.....A.G..L.M..................................TMGFDIAKCTRDR...............--NK..AYGALVASMD..lQ...R.N.A...T....F.F.....S.TV..-...AE.....C..........S.......A....Y...DV......LAN...nLWP.................. [...]
+B4KHB7_DROMO/577-867               .............................................................................................LILCFVPS..DSPER..YSAIKKR.GC...VD..R..AVPTQVVTK.R..C.-NKN--................GLSVATKIAI.......QMNCK..........IGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TMGFDIAKCSSNR...............--NK..AYGALVASMD..lQ...R.N.A...T....F.F.....S.TV..-...AE.....C..........S.......A....Y...DV......LAN...nLWP.................. [...]
+B4LV36_DROVI/558-849               ............................................................................................l-ILCFFAR..NNPER..YAAIKKR.GY...VD..R..AIPTQVVTT.N..A.NRNG--................-LSVATKIAI.......QINCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKCSRNR...............--SK..AYGALVASMD..lQ...Q.N.S...T....F.F.....S.TV..-...AE.....C..........S.......A....Y...DV......LAN...nLWP.................. [...]
+B4MU97_DROWI/591-882               ............................................................................................l-ILCLVPN..NNVER..YSSIKKI.GC...ID..K..GIPTQVVTS.K..T.VSNRSL................-MSIATKIAV.......QLNCK..........MGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TLGFDIAKSSRDR...............--SK..AFGALVASMD..lQ...E.N.S...T....Y.F.....S.TV..-...AE.....C..........S.......A....Y...DV......LAN...hLWP.................. [...]
+B4G753_DROPE/334-531               ............................................................................................l-ILCLVPN..NNVER..YSSIKKR.GC...VD..R..AVPTQVVTI.K..T.SKNRGL................-LSIATKIAI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSARDR...............--RK..AYGALVASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...SE.....C..........S.......A....F...DV......LAN...nLWP.................. [...]
+Q29CN1_DROPS/543-834               ............................................................................................l-ILCLVPN..NNVER..YSSIKKR.GC...VD..R..AVPTQVVTI.K..T.SKNRGL................-LSIATKIAI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSARDR...............--RK..AYGALVASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...SE.....C..........S.......A....F...DV......LAN...nLWP.................. [...]
+B3MJZ4_DROAN/563-854               ............................................................................................l-ILCLVPN..NNADR..YSAIKKR.GY...VD..R..AVPTQVVTI.K..T.AKNRGL................-MSIATKIAI.......QINCK..........LGYT.-.....PWM.V....EVP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSTRDR...............--KK..AYGALVASMD..lQ...Q.N.S...T....Y.F.....S.TV..S...EC.....S..........A.......F....D...SL......SNN....LWP.................. [...]
+B3N502_DROER/538-829               ............................................................................................l-ILCLVPN..DNVER..YSSIKKR.GY...VD..R..AVPTQVVTI.K..T.TKNRSL................-MSIATKIAI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSTRDR...............--KR..AYGALIASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...TE.....C..........S.......A....F...DV......LAN...tLWP.................. [...]
+B4P149_DROYA/538-829               ............................................................................................l-ILCLVPN..DNAER..YSSIKKR.GY...VD..R..AVPTQVVTI.K..T.TKNRSL................-MSIATKIGI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSTRDR...............--KR..AYGALIASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...TE.....C..........S.......A....F...DV......LAN...tLWP.................. [...]
+Q6NNZ4_DROME/552-843               ............................................................................................l-ILCLVPN..DNAER..YSSIKKR.GY...VD..R..AVPTQVVTL.K..T.TKNRSL................-MSIATKIAI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSTRDR...............--KR..AYGALIASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...TE.....C..........S.......A....F...DV......LAN...tLWP.................. [...]
+C0PTU6_DROME/566-857               ............................................................................................l-ILCLVPN..DNAER..YSSIKKR.GY...VD..R..AVPTQVVTL.K..T.TKNRSL................-MSIATKIAI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSTRDR...............--KR..AYGALIASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...TE.....C..........S.......A....F...DV......LAN...tLWP.................. [...]
+PIWI_DROME/538-829                 ............................................................................................l-ILCLVPN..DNAER..YSSIKKR.GY...VD..R..AVPTQVVTL.K..T.TKNRSL................-MSIATKIAI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSTRDR...............--KR..AYGALIASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...TE.....C..........S.......A....F...DV......LAN...tLWP.................. [...]
+Q6NP34_DROME/566-857               ............................................................................................l-ILCLVPN..DNAER..YSSIKKR.GY...VD..R..AVPTQVVTL.K..T.TKNRSL................-MSIATKIAI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSTRDR...............--KR..AYGALIASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...TE.....C..........S.......A....F...DV......LAN...tLWP.................. [...]
+B4Q9X1_DROSI/538-829               ............................................................................................l-ILCLVPN..DNVER..YSSIKKR.GY...VD..R..AVPTQVVTM.K..T.AKNRSL................-MSIATKIAI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSTRDR...............--KR..AYGALIASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...TE.....C..........S.......A....F...DV......LAN...tLWP.................. [...]
+B4HWY9_DROSE/538-829               ............................................................................................l-ILCLVPN..DNAER..YSSIKKR.GY...VD..R..AVPTQVVTM.K..T.AKNRSL................-MSIATKIAI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSTRDR...............--KR..AYGALIASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...TE.....C..........S.......A....F...DV......LAN...tLWP.................. [...]
+A8XEN9_CAEBR/501-812               .............................................................................................MLVVMLAD..DNKTR..YDSLKKY.LC...VE..C..PIPNQCINL.R..T.LAGKSSdgg.........enknFGSIVLKIVL.......QMVCK..........TGGA.-.....LWR.V....NIP.M-........-......-..-....-...-...-.....Q.D..T.M..................................IVGYDLYHDSTLK...............--GK..TVGACVSTTS...S...E.F.T...K....F.Y.....S.QT..R...PH.....E..........N.......P....T...QL......GNN....LTH.................. [...]
+Q17567_CAEEL/397-708               .............................................................................................MLVVMLAD..DNKTR..YDSLKKY.LC...VE..C..PIPNQCVNL.R..T.LAGKSKdgg.........enknLGSIVLKIVL.......QMICK..........TGGA.-.....LWK.V....NIP.L-........-......-..-....-...-...-.....K.S..T.M..................................IVGYDLYHDSTLK...............--GK..TVGACVSTTS...N...D.F.T...Q....F.Y.....S.QT..R...PH.....E..........N.......P....T...QL......GNN....LTH.................. [...]
+P90786_CAEEL/499-810               .............................................................................................MLVVMLAD..DNKTR..YDSLKKF.LC...VE..C..PIPNQCVNL.R..T.LAGKSKdgg.........enknLGSIVLKIVL.......QMICK..........TGGA.-.....LWK.V....NIP.L-........-......-..-....-...-...-.....K.N..T.M..................................IVGYDLYHDSTLK...............--GK..TVGACVSTTS...N...D.F.T...Q....F.Y.....S.QT..R...PH.....E..........N.......P....T...QL......GNN....LTH.................. [...]
+PIWI1_SCHMD/493-790                ...........................................................................................ma--LVFIPD..---DK..VYAKVKN.FT...MS..T..GLLTQCVTQ.R..N.GSNRDDr..............rRKTVADKSVM.......QMFSK..........LGYD.-.....PWG.I....NLK.M-........-......-..-....-...-...-.....A.P..T.M..................................IVGLDTFHSKTGK...............---R..SVQASVFSIS...A...K.F.S...Q....Y.I.....S.FV..N...SS.....K..........G.......K....N...EF......HEN....LGK.................. [...]
+D2Z0D8_DUGJA/494-791               ...........................................................................................la--LVFIPD..---DK..IYAKVKN.FT...MS..T..GLLTQCVTQ.R..N.GSNRDDr..............rRKTVADKSVM.......QMFSK..........LGYD.-.....PWG.I....NLK.M-........-......-..-....-...-...-.....A.P..T.M..................................IVGLDTFHSKTGK...............---R..SVQASVFSIS...S...K.F.S...Q....Y.I.....S.FV..N...SS.....K..........G.......K....N...EF......HEN....LGK.................. [...]
+PIWIL_DUGJA/502-800                ..........................................................................................ial---VFVPD..---DR..VYAKVKS.FT...IS..T..GLLTQCVTT.R..N.GTNRNDk..............rRQVVSSKTVM.......QIFSK..........FGYD.-.....PWT.I....DIK.M-........-......-..-....-...-...-.....R.P..T.M..................................IVGMDTFHNKGSK...............---K..SIHASVFSIN...S...T.F.S...Q....Y.M.....S.FA..N...SP.....K..........G.......K....Q...EF......HDT....LSG.................. [...]
+PIWI2_SCHMD/516-815                ..........................................................................................mal---VFVPD..---DR..VYAKVKS.FT...MS..T..GLLTQCVTT.R..N.GTNRNDk..............rRKVVSSKTVM.......QIFAK..........FGYD.-.....PWT.V....EIK.L-........-......-..-....-...-...-.....R.P..T.M..................................IVGMDTYHNKSSK...............---K..SIQASVFSIN...S...T.F.T...Q....Y.M.....S.FV..V...NS.....P..........K.......G....R...QE......FHE...tLGK.................. [...]
+D2Z0D9_DUGJA/512-810               ..........................................................................................mal---VFVPD..---DR..VYAKVKS.FT...MS..T..GLLTQCVTT.R..N.GTNRNDk..............rRKVVSNKTVM.......QIFAK..........FGYD.-.....PWT.V....EIK.L-........-......-..-....-...-...-.....R.P..T.M..................................IVGMDTYHNKSSK...............---K..SIQASVFSIN...S...T.F.T...Q....Y.M.....S.FV..N...QP.....K..........G.......R....Q...EF......HET....LGK.................. [...]
+B9ZU52_9TURB/589-885               ............................................................................................l-VFCLLPS..NKKQR..YDSIKRL.CY...VN..K..PVPSQCVLT.K..T.IRNPAK................VMSVATKVAL.......QISCK..........LGDV.-.....AWA.V....SIP.M-........-......-..-....-...-...-.....R.R..T.M..................................IVGMDTYHDKRQS...............---V..SVQGIVFSLN...E...T.F.T...Q....Y.Y.....S.YS..P...IV.....K..........G.......G....K...AE......LHN...rLEV.................. [...]
+A8VSS4_TETTH/479-774               ............................................................................................f-IVFILQGakGKGKN..YQYLKSF.LL...KE..K..PIPSQMILQ.G..T.IKSSKD...............gCQVICNKICN.......QICIK..........VGGI.P.....YII.K....DLP.F-........-......-..-....-...S...N.....L.P..T.M..................................LVGIDYIRKENQK...............----..SVYSFVASVD...S...T.F.C...K....F.F.....S.GA..Q...LL.....D..........A.......Q....D...QN......NKF....VDK.................. [...]
+A4ZYY6_TETTH/491-831               .............................................................................tfaliimnselehyhf--------..-----..YKTCKQA.IT...VD..K..GICCSLIKA.S..T.LQQYVPtqqypq....ippgnsIEAFASRFLS.......QMQAK..........LGES.P.....WLM.Q....ELP.Y-........-......-..-....-...N...Q.....N.P..C.T..................................MIGFSVLRQRNAR...............---K..IIVAGAASIN...K...Q.Y.S...K....Y.L.....P.DY..R...VI.....S..........E.......V....S...TK......IK-....--Edgtleivelseq...... [...]
+Q23AZ6_TETTH/491-831               .............................................................................tfaliimnselehyhf--------..-----..YKTCKQA.IT...VD..K..GICCSLIKA.S..T.LQQYVPtqqypq....ippgnsIEAFASRFLS.......QMQAK..........LGES.P.....WLM.Q....ELP.Y-........-......-..-....-...N...Q.....N.P..C.T..................................MIGFSVLRQRNAR...............---K..IIVAGAASIN...K...Q.Y.S...K....Y.L.....P.DY..R...VI.....S..........E.......V....S...TK......IK-....--Edgtleivelseq...... [...]
+C5LD15_9ALVE/568-697               ............................................................................................l-VMLFTPV..KDCKR.vYQIFKQV.CT...VE..R..PCITQVVRS.E..T.MRKKTS................IVAIVTRIIM.......QISAK..........FLGP.-.....LWH.I....DLH.TS........L......T..P....M...M...N.....E.P..C.M..................................LVGIDTAVAKETR...............---R..AVLGFVCSLD...S...A.S.S...Q....Y.F.....S.KA..V...PL.....D..........-.......-....-...--......---....---.................. [...]
+A0D5D7_PARTE/374-640               vlfvgdqktdftsarntllskaipnqlinlpiqdqeinrllaimtanlgsvpwsikeingqinnkksavlgiwksdnsfsaclsinkylnkyi--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...SS......FGD....LDQ.................. [...]
+B9S0P9_RICCO/17-119                ............................................................................................i-LICVLAK..-KDHS..YNNLKLI.SE...TK..V..GIVAQCCSF.K..N.APRT--................KTQFLTNLAL.......KINVR..........LGGS.N.....MEL.F....KQP.QC........-......-..L....R...S...K.....G.H..V.M..................................FIGTEVNHLVSYN...............STCP..SIVDVVVIT-...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+B7R785_9THEO/119-333               ............................................................................................d-IVIMTTT.vRNELI..YAKVKSL.LL...GN..-..GIPSQVVTA.E..K.LRNTKG................LPWILENIAL.......QIYAK..........IGGT.P.....WTV.M....SSS.P-........-......-..-....-...-...-.....K.G..E.L..................................VIGVSRAIDKRRN...............----..YIIGFITLFS..yD...G.D.Y...L....L.F.....Y.SL..A...PR.....P..........I.......E....W...QK......LDEyrnaLSQ.................. [...]
+Q11QW7_CYTH3/390-605               .........................................................................................tlpv--------..-KKSP..YHTCKAK.LI...GS..-..GIPTQDIQV.V..N.LKNA--................NQFTINNIAL.......NIYAK..........IGGT.-.....AWT.I....EKE.DK........R......-..-....-...-...-.....M.E..E.L..................................VIGVGSSLSSDGK...............----..LVLGIAQIFH...S...D.G.R...Y....L.V.....G.DC..T...PL.....S..........T.......F....D...NY......AKN....LED.................. [...]
+Q9L1X1_STRCO/365-661               ...............................................................................dsspylvaksafmg--------..-----..-------.--...--..Q..GVPVQEVRI.E..T.VRQSKL................-AYPLNSIAL.......ACYAK..........LGGI.-.....PFV.I....AAP.RT........L......-..-....-...-...-.....A.H..E.L..................................VIGIGSAHVKESR..............lTEPE..RVVGITTVFS..aD...G.N.Y...L....L.W.....N.TS..ReadYD.....D..........Y.......P....R...EL......LLS....LRD.................. [...]
+D2M4C5_RHOPA/151-447               ...........................................................................................fd--------..DESNP..YYATKSV.FL...KR..-..DVPVQSVRL.E..T.MAQADS...............qLIFSMNHMSL.......ATYAK..........LGGT.-.....PWL.L....ASQ.QT........V......-..-....-...-...-.....A.H..E.L..................................VIGLGSHSVANSR..............iGSQQ..RFVGITTVFS...S...D.G.S...Y....L.L.....S.DR..T...AV.....V..........P.......Y....E...EY......ATA....LYD.................. [...]
+A3VQY4_9PROT/445-745               ........................................................................................lpgpq--------..---NP..YYATKAM.LL...RN..-..NVAVQNVRI.E..T.MSEPDK...............sLVYTMNQVSL.......ACYAK..........LGGR.-.....PWL.L....AAQ.QS........V......-..-....-...-...-.....A.H..E.L..................................VIGLGSHTEQKSR..............fDQSV..RYVGITTVFS..sDggyH.L.S...E....R.T.....G.VV..L...FE.....D..........Y.......A....T...EL......TDT....LTR.................. [...]
+B9MH92_ACIET/439-730               ...................................................................................apqknpylva--------..-----..-----KA.AF...LS..N..QIPTQFIAF.E..T.FSMAPA...............sLAYTLSNLAL.......AVYAK..........LGGI.-.....PWL.I....KSD.KG........I......-..-....-...-...-.....A.H..E.V..................................VIGLGSAAIGESR..............fSRKE..RIVGITSVFR...G...D.G.G...Y....L.L.....S.NL..S...NA.....V..........P.......M....S...KY......GEA....LTE.................. [...]
+A5D4D9_PELTS/458-756               ...................................................................................qlfgnknpyl--------..-----..---VTKC.FF...LQ..Q..QVPVQEVEI.E..N.IVKDDR...............qLIYILNNISL.......ASYAK..........MGGT.-.....PWL.L....KAD.SP........I......-..-....-...-...-.....A.H..E.L..................................VFGLGSCQVSRSR..............lGSKE..RVVGITTVFT..gD...G.N.Y...L....L.-.....T.NK..S...AA.....V..........P.......F....K...EY......PKA....LLR.................. [...]
+A0LL61_SYNFM/455-750               ................................................................................sqnpyfitkgsfl--------..-----..-------.--...-A..H..QIPVQEFEI.E..T.AQKNDR...............eLQYSLNNMAL.......ATYAK..........MNGI.-.....PWL.L....KAN.PT........I......-..-....-...-...-.....A.H..E.L..................................IIGLGSANIADGR..............lGDSE..RYVGITTVFS..gD...G.N.Y...H....L.T.....N.VS..-...-R.....A..........V.......T....I...DC......YQK...aFLE.................. [...]
+D0BWJ3_9GAMM/401-693               ...................................................................................klkveenpyy--------..-----..---LGKS.LF...FM..H..QVPVQDFTI.E..L.LSQSDY...............nLSFSLNNMAL.......ACYAK..........MGGV.-.....PWL.L....KSS.PT........L......-..-....-...-...-.....S.H..E.L..................................VIGIGSANIGQER..............gINGQ..RVMGITTVFS...G...D.G.S...Y....I.V.....S.NT..S...KA.....V..........V.......P....K...AY......CEA....LTS.................. [...]
+A4WYU7_RHOS5/454-756               .......................................................................................arlpdd--------..--RNP..YIHTKSL.LL...-T..L..GVPTQQVRM.P..T.VLLEPK...............sLQYTLQNFSI.......ATYAK..........LNGT.-.....PWT.V....NHD.KA........I......-..-....-...-...-.....N.D..E.L..................................VVGMGLAELSGSR..............tEKRQ..RFVGITTVFA...G...D.G.S...Y....L.L.....G.NV..S...KE.....C..........E.......Y....E...GY......SDA....IRE.................. [...]
+B7K585_CYAP8/439-744               ...............................................................................aiviildehsnlpd--------..-SINP..YLHSKSL.LL...TH..-..GIPVQEIRY.S..N.IQKDKK...............sLQYILQNFSL.......AMYAK..........LTGQ.-.....PWT.V....DQD.QT........I......-..-....-...-...-.....S.D..E.L..................................VIGIGTSELSNSR..............fETRQ..RFVGITTVFR...G...D.G.N...Y....L.L.....S.SL..S...KE.....C..........S.......Y....D...EY......PDV....LRE.................. [...]
+C1F5Q7_ACIC5/440-735               .........................................................................................glpd--------..-ASNP..YYTTKAR.LM...AQ..-..GVPVQLLNI.E..T.IRRKSL................-DYILNNIGL.......AMYAK..........LGGI.-.....PWT.L....TQN.SD........M......-..-....-...-...-.....A.H..E.I..................................IVGIGSARLNESR..............rGAGE..RVIGITTVFS...G...D.G.Q...Y....L.L.....A.NN..T...QE.....V..........P.......S....E...EY......VDA....LTQ.................. [...]
+Q1PV30_9BACT/383-655               ..........................................................................................sde--------..EEEKT..YYEIKKL.LL...DK..-..GITSQFIAN.K..T.VRSGNF................-NYCLPNIAI.......AILAK..........LGGI.-.....PWK.L....NTK.K-........-......-..-....-...-...-.....Y.N..D.L..................................VIGYNYKKLQDQK...............----..-WIGSAVFFD..nE...G.R.L...G....R.I.....Y.GF..S...EE.....R..........A.......G....E...DL......ISH....---.................. [...]
+D2QY15_PIRSD/353-529               ...........................................................................................dt-------E..DFSDQ..YYVTKHA.FL...KA..-..GLPSQFVST.K..T.IRNKAS................FKWTVSNIGM.......AVFAK..........LGGK.-.....PWK.V....VSE.--........-......-..-....-...-...N.....D.D..C.L..................................IVGIGQSHRCGED...............KTIS..RYYSYCVL--...T...D.S.S...G....L.Y.....E.DV..R...VL.....G..........K.......D....T...DE......RSY....LTR.................. [...]
+D2QGL1_SPILD/333-520               .....................................................................................snideegv--------..---SD..TYYYLKY.HL...TK..L..GVPLQVLSH.E..K.INVEKT................LKWSTSNIGL.......ALFSK..........LGGI.-.....PWV.V....KPS.T-........-......-..-....-...-...-.....A.D..C.L..................................ILGIGSAHQSNAQ...............NEIE..RFFAYSV--C...V...D.S.S...G....L.Y.....K.KL..E...VL.....A..........D.......D....Q...SE......VSY....LDA.................. [...]
+PIWI_ARCFU/110-406                 ............................................................................................g-IMLVLPE..YNTPL..YYKLKSY.LI...NS..-..-IPSQFMRY.D..I.LSNRNL................-TFYVDNLLV.......QFVSK..........LGGK.-.....PWI.L....NVD.PE........K......-..-....-...-...-.....-.-..-.-..................................--GSDIIIGTGAT..............rIDNV..NLFCFAMVFK...K...D.G.T...M....L.W.....N.EI..S...PI.....V..........T.......S....S...EY......LTY....LKS.................. [...]
+#=GR PIWI_ARCFU/110-406      SS    ............................................................................................---EEEESS..S-HHH..HHHHHHH.HH...TT..-..-S--EEEEH.H..H.HCTSTH................-HHHHHHHHH.......HHHHH..........----.-.....--E.E....---.TT........-......-..-....-...-...-.....-.-..-.-..................................-----EEE----E..............ESSSS..EEE-EEEEEE...-...-.-.-...E....E.E.....E.EE..-...-S.....E..........E.......G....G...GH......HHH....HHH.................. [...]
+Q96Z85_SULTO/134-346               ..........................................................................aksqidsiyyrvkasflds--------..-----..-------.GL...EE..R..ATPTQIVTV.D..L.LKQRDEnk...........ntnYSWSLLPIAV.......QMFTK..........MGGI.P.....YAL.K....QSC.IN........I......-..-....G...S...E.....F.N..V.H..................................FIGLGLTSDPRNK...............---L..KRVGFVTIFN..dN...G.S.L...S....Y.M.....D.SN..I...LE.....D..........N.......K....T...ES......YGR...iIYN.................. [...]
+A3VPN8_9PROT/165-321               .......................................................................................afverd--------..EEDFD..LHDYLKA.VG...AS..M..GVSVQLIRS.D..K.ALDYHC................RASVMWRLSI.......ALYTK..........AGGV.P.....WVL.E....DIH.P-........-......-..-....-...-...-.....-.Q..T.A..................................FIGIDYAMRRVQD...............DGPR..FAICCAQVFD..aE...G.SgL...E....F.IaykadG.VS..V...YG.....D..........N.......P....Y...LN......HAQ....MLK.................. [...]
+D1JFX3_9ARCH/159-437               ........................................................................................yfkfn--------..--YED..LRAHIKA.LC...VK..K..HVYTQILTK.T..S.FRPFDM................-SDNMWNLSL.......GLYVK..........AGGV.-.....PWK.L....ESG.E-........-......-..-....-...-...-.....E.N..T.C..................................FIGIAFGIKKGED...............-GQE..ILVGLAEVFD...V...F.G.E...S....V.T.....I.KV..V...ED.....E..........F.......K....S...EV......GLH....LSEek................ [...]
+Q8U3D2_PYRFU/474-756               ..................................................................................lafiaarnkls--------..--SEK..FEEIKRR.LF...-N..L..NVISQVVNE.D..T.LKNKRDkyd.........rnrlDLFVRHNLLF.......QVLSK..........LGVK.-.....YYV.L....DYR.FN........Y......D..Y....-...-...-.....-.-..-.-..................................IIGIDVAPMKRSE...............---G..YIGGSAVMF-...-...D.S.Q...G....Y.I.....R.KI..V...PI.....K..........I.......G....E...QR......GESv..dMNE.................. [...]
+#=GR Q8U3D2_PYRFU/474-756    SS    ..................................................................................-EEEEE-TTS---------..--HHH..HHHHHHH.HH...-T..T..T--EEEEEH.H..H.HHHSEETTE.........EEEE-HHHHHHHHH.......HHHHH..........---B.-.....--E.E....S--.-S........S......S..E....-...-...-.....-.-..-.-..................................EE------B----...............----..-B---EEEE-...-...E.-.-...-....-.E.....E.EE..E...--.....-..........-.......-....-...--......----..-HHH.................. [...]
+D3S0S6_FERPL/490-768               .......................................................................................egedsf--------..----D..YYNPLKS.AL...FR..N..NILSQNFDV.T..N.YVRGDGkin..........kntIKYAVSNIIY.......NIFGK..........LGVK.-.....FFV.L....EED.VP........Y......D..Y....-...-...-.....-.-..-.-..................................ILGIDVGYGEAYT...............---G..KVAGCTTVHD..sE...G.R.L...R....N.L.....I.PI..E...KQ.....N..........Y.......P....S...KE......TAR....IKA.................. [...]
+Y1321_METJA/426-699                .............................................................................................CFALIIGK.eKYKDN.dYYEILKK.QL...FD..L..KIISQNILW.E..N.WRKDDK................-GYMTNNLLI.......QIMGK..........LGIK.-.....YFI.L....DSK.TP........Y......D..Y....-...-...-.....-.-..-.-..................................IMGLDTGLGIFGN...............---H..RVGGCTVVYD..sE...G.K.I...R....R.I.....Q.PI..E...TP.....A..........P.......G....E...RL......HLP....---.................. [...]
+C7P7E7_METFA/420-692               ............................................................................................g-FALIIGN.rYYEND..YYETLKM.QL...FN..L..NIISQNILW.E..N.WSKDDN................-NFMTNNLLI.......QIMGK..........LGIK.-.....YFA.L....DAK.VN........Y......D..Y....-...-...-.....-.-..-.-..................................IMGLDSGLGAFKS...............---N..RVSGCTVIYD..sE...G.K.I...R....R.I.....Q.PI..D...VP.....S..........P.......G....E...RI......PIH....---.................. [...]
+B6YTQ5_THEON/463-751               ..........................................................................................lai---TLIPD..MRQEQ..FDKIKGF.FF...NN..-..GILHKAINI.N..N.LRDPSK...............dQKKLIESMIL.......QALYA..........FGIY.F.....YSL.D....NLN.Y-........-......-..-....-...-...-.....-.-..D.F..................................IIGLDVTREMDKS...............GRYY..GISGAAVVQN...K...N.G.Q...V....L.K.....I.IP..I...TS.....P..........Q.......S....S...SE......TAN....INY.................. [...]
+D3S7P9_9EURY/531-824               ......................................................................licispklpnnefdelkshlfsy--------..-----..-------.QQ...TT..F..HQFMYPFNL.K..R.CLNDDD...............fKKPFINSILS.......QFFHK..........MGMY.-.....LFS.F....SEE.L-........-......-..-....-...-...G.....D.Y..D.F..................................IIGYDITKEKDEN...............DKIK..GIGGSAIIYN...S...H.G.H...V....I.T.....TvTF..E...DV.....H..........T.......S....S...EI......ARY....-EKlf................ [...]
+B5IR12_9EURY/528-819               ..................................................................................dlelrefynwl--------..-----..----KKE.FY...DE.tK..PLVFQGARV.E..S.VFGMYK................-RYAVPNIVL.......QMAAK..........LGVY.P.....YSL.E....TSS.G-........Y......D..Y....-...-...-.....-.-..-.-..................................IIGIDYTYWHERD...............--AV..SVGGGAVVVS..pS...G.L.I...E....G.I.....Y.PI..A...IP.....S..........K.......R....E...SL......DMKe..iLQE.................. [...]
+O67434_AQUAE/419-694               ............................................................................................l-VIVFLEE.yPKVDP..YKSFLLY.DF...VK..R..ELLKKMIPS.Q..V.ILNRTLkn............enLKFVLLNVAE.......QVLAK..........TGNI.P.....YKL.K....EIE.GK........V......D..A....-...-...-.....-.-..-.-..................................FVGIDISRITRDG...............-KTV..NAVAFTKIFN..sK...G.E.L...V....R.Y.....Y.LT..S...YP.....A..........F.......G....E...KL......TEK....---.................. [...]
+#=GR O67434_AQUAE/419-694    SS    ............................................................................................E-EEEEE--.-S---S..SS--HHH.HH...HH..H..HHHHTT--E.E..E.EEHHHHHH............S-HHHHHHHHHH.......HHHHH..........---B.S.....-EE.S....---.--........-......S..E....-...-...-.....-.-..-.-..................................EE--EEEEEE---...............--EC..EEEEEEEEEE..--...-.-.E...E....E.E.....E.EE..E...ET.....T..........-.......-....-...HH......HHH....---.................. [...]
+B4B3R2_9CHRO/1-219                 ...............................................................................mgnlpfilaeplei--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.A..D.Y..................................FIGLDISRERKRN...............SRGS..NNACGSVRL-...-...-.Y.G...K....Q.G.....E.FI..Q...YQ.....L..........D.......D....Q...PI......EGE....--E.................. [...]
+A0YYT3_9CYAN/471-752               .............................................................................tddtedgsfysfvssr--------..-----..-------.-L...LR..R..GISSQVIYE.D..T.LKNPNN................YSYILNQVIP.......GILAK..........LGNL.-.....PFI.L....AKP.LE........I......-..-....-...-...-.....-.A..D.Y..................................FIGLDISRTPKKR..............kSGSL..NVCASVR---...-...L.Y.G...K....Y.G.....E.FI..R...YR.....-..........-.......L....E...DA......LTQ....GEE.................. [...]
+A8YDH3_MICAE/463-734               .....................................................................................nadnteeg--------..----S..LYSWIKK.KF...LE..R..RVMTQMIYE.K..T.LNDKSN................YKNILNQVVP.......GILAK..........LGNL.P.....YVL.A....ESL.E-........-......-..-....-...-...-.....I.A..D.Y..................................FIGLDVGRMPKKN..............lPGSL..NVCASVRLY-...-...G.K.Q...G....E.F.....V.RC..R...VE.....-..........-.......-....-...DS......LTE....GEE.................. [...]
+B0JXD6_MICAN/462-734               ....................................................................................rnadnteeg--------..----S..LYSWIKR.KF...LG..R..GVITQMIYE.K..T.LNDKSN................YKNILNQVVP.......GILAK..........LGNL.P.....YVL.A....E-P.LE........-......-..-....-...-...-.....I.A..D.Y..................................FIGLDVGRMPKKN..............lPGSL..NVCASVRLY-...-...G.K.Q...G....E.F.....V.RC..R...VE.....-..........-.......-....-...DS......LTE....GEE.................. [...]
+B0ADC8_9CLOT/432-721               ............................................................................................p-VLVILEK..ENIDK.yYETLKKI.FG...GR..N..NIPTQFVDL.D..T.IKKCDPkid.........nkrgKESIFLNILL.......GIYCK..........SGIQ.-.....PWV.L....ANG.LS........A......D..C....-...-...-.....-.-..-.-..................................YIGLDVCREN---...............--NM..STAGLIQVIG...K...D.G.R...V....LkS.....K.TI..S...SH.....Q..........S.......G....E...KI......QIN...iLKD.................. [...]
+C4L1M1_EXISA/321-484               ............................................................................................g-VVVVIAE.eASLQH.sYQAIKRQ.FG...GK..Q..DVVTQCVEL.H..D.RVLN--................SEDTLYNILL.......GIYVK..........AGLQ.-.....PWI.L....GEP.LH........S......D..C....-...-...-.....-.-..-.-..................................FVGLDVSHENGKH...............----..-AAGIIQIIG...K...D.G.A...M....I.K.....Q.KA..L..sTS.....E..........A.......G....E...KI......SSE...tMRE.................. [...]
+C6QUV9_9BACI/2-48                  ............................................................................................c--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+B7GJX9_ANOFW/423-692               ............................................................................................t-IVVIGTE..ENIER.aYMAIKKE.FG...AK..A..DIMTQFVIF.D..S.SIVN--................NSFYYYNVLL.......GIYAK..........SGVQ.-.....PWI.L....LDH.MN........S......D..C....-...-...-.....-.-..-.-..................................FIGLDVSHEQGKH...............----..-ASGIIQVIG...K...D.G.R...I....I.K.....Q.KS..V...MA.....T..........E.......A....G...ET......IARc..tMEE.................. [...]
+C1V6Q1_9EURY/608-882               ........................................................................................aaaad--------..-YDDP..YPEFKRR.LG...-Q..L..GVPSQMITI.D..N.LGND--................--SYLGNISS.......SLIGK..........AGGV.P.....WRI.D....DVP.GD........V......D..A....-...-...-.....-.-..-.-..................................FVGLDVTYDHATK...............---Q..HLGAAANVIM...A...D.G.T...I....L.A.....S.EA..V...TK.....Q..........A.......G....E...TF......DED...dVAN.................. [...]
+B9LVW4_HALLT/464-658               .......................................................................................fsmges--------..SASDI..YHEMKKA.LR...QR..-..RVDSQMAHI.D..T.LATS--................--YALPNVAL.......GLVAA..........AGGI.P.....FTT.E....DAM.P-........-......-..-....-...-...G.....E.T..D.L..................................FIGIDVSHRYPRD..............tDERV..HIAASTTSIY...G...D.G.T...I....L.G.....Y.TS..A...KP.....Q..........T.......G....E...KV......PPK...eLKN.................. [...]
+Q53W94_THET8/418-669               ....rnrlkalllreglpsqilnvplreeerhrwenallgllakaglqvvalsgaypaelavgfdaggresfrfggaacavggdgghllwtlp--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...EA.....Q..........A.......G....E...RI......PQE...vVWD.................. [...]
+Q746M7_THET2/418-669               ....rnrlkalllreglpsqilnvplreeerhrwenallgllakaglqvvalsgaypaelavgfdaggresfrfggaacavggdgghllwtlp--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...EA.....Q..........A.......G....E...RI......PQE...vVWD.................. [...]
+#=GR Q746M7_THET2/418-669    SS    ....HHHHHHHHHH----EEEEESS--TT-HHHHHHHH---TTT---B--EEE---S-SEEE--------SSB----EEEB------EEEE----------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...-S.....B..........-.......-....-...--......HHH...HHHH.................. [...]
+B1XJG0_SYNP2/307-599               ...........................................................................................ti---LVISE..WLDNK..YKTKLTR.DA...LE..H..GITLQFMLP.L..K.ENVR-RiesnkgveskitcftsDQYRANNILL.......GLLAK..........AGWQ.A.....VGL.P....LLN.NE........Y......-..-....-...-...-.....A.A..D.L..................................VIGFDAGRNETLS...............-YGT..SSFAVLADG-...-...-.-.-...Q....I.L.....G.WE..L...PE.....A..........Q.......K....G...EI......LDPd..hVRR.................. [...]
+Q2JSR3_SYNJA/437-712               ...........................................................................................tv--LVVMPW..-SPNE..RKQRIRM.EA...LE..A..GIATQFMIP.G..A.------................DPYKALNVVL.......GLLCK..........AAWQ.P.....VLL.E....PLD.D-........-......P..V....-...-...-.....G.P..E.L..................................IIGFDVGTNRRLY...............----..-YGASAFAVL...A...D.G.Q...S....L.G.....W.EL..P...AV.....Q..........R.......G....E...TF......SGD...aIYQ.................. [...]
+Q2JI93_SYNJB/454-728               ...................................................................................vlvvmplspn--------..-----..-------.-E...HK..Q..KIRLQALRA.G..I.ATQFMIp.............gaDPYKALNVVL.......GLLCK..........AAWQ.P.....VLL.E....PLD.H-........-......-..-....-...P...E.....C.S..E.L..................................TIGFDVGTNRELY...............-YGT..SAFAVLANG-...-...-.-.Q...S....L.G.....W.EL..P...DI.....Q..........R.......G....E...TF......SGE...aIYQ.................. [...]
+Q8DKB1_THEEB/458-739               .................................................................................tvlvvmpwsphe--------..-----..EKTRLRI.QA...LK..A..GIATQFMIP.T..P.QDNP--................--YKALNVAL.......GLLCK..........AKWQ.P....vYLK.P....LDD.PQ........-......-..-....-...-...-.....A.A..D.L..................................IIGFDTSTNRRLY...............-YGT..SAFAILAN--...-...-.G.Q...S....L.G.....W.EL..P...DI.....Q..........R.......G....E...TF......SGQ...sIWQ.................. [...]
+Q5MZ10_SYNP6/441-718               ............................................................................................t-VLVVMPW..DSHHD..-KQKIRI.QA...IQ..A..GIATQFMVPlP..K.AD----................-KYKALNVTL.......GLLCK..........AGWQ.P.....IQL.E....SVD.HP........-......-..-....-...-...E.....V.A..D.L..................................IIGFDTGTNRELY...............---Y..GTSAFAVLA-...-...D.G.Q...S....L.G.....W.EL..P...AV.....Q..........G.......G....E...TF......SGQ...aIWQ.................. [...]
+Q31N05_SYNE7/441-718               ............................................................................................t-VLVVMPW..DSHHD..-KQKIRI.QA...IQ..A..GIATQFMVPlP..K.AD----................-KYKALNVTL.......GLLCK..........AGWQ.P.....IQL.E....SVD.HP........-......-..-....-...-...E.....V.A..D.L..................................IIGFDTGTNRELY...............---Y..GTSAFAVLA-...-...D.G.Q...S....L.G.....W.EL..P...AV.....Q..........R.......G....E...TF......SGQ...aIWQ.................. [...]
+A4HBN9_LEIBR/872-1190              .......................................................................................svilvt-------N..EMGTR..ATRWLKV.EC...MC..R..GVHFIAIPA.S..S.NPKRLNl..............vGAQLRQRIAT.......QFE--..........---L.N....pLRG.I....DLR.GE........L......P..V....L...G...R.....R.H..V.L..................................ILGVDSCHTNTH-...............----..SVGAIVGILS..tP...A.G.N...S....L.L.....S.FF..W...RH.....D..........A.......R....G...RE......AQH....VAK.................. [...]
+A4HZ40_LEIIN/904-1226              ........................................................................................svili------TN..EIDTR..ATRWLKV.EC...MC..R..GAHFIAIPA.S..S.SPKK--................LNLAGAQLRM.......RIASQ..........FELN.P.....LRG.V....DLR.GE........L......P..V....L...G...H.....R.H..V.L..................................VIGVDSCHTNTHS...............--VG..TIVGILST--...P...T.E.S...K....L.L.....S.YF..W...RH.....D..........A.......R....G...RE......TQH....VAK.................. [...]
+Q4QCH4_LEIMA/899-1221              ..........................................................................................svi----LITN..EMDTR..ATRWLKV.EC...MC..R..GAHFIAIPA.S..S.NPKK--................LNLVGAQLRM.......RIATQ..........FELN.P.....LRG.V....DLR.GE........L......P..V....L...G...H.....R.H..V.L..................................VIGVDSCHTNTHS...............--VG..TIVGILST--...P...T.E.S...K....L.L.....S.YF..W...RH.....D..........A.......R....G...RE......AQH....VAK.................. [...]
+Q4DYG9_TRYCR/791-1083              ...........................................................................................ta--AVIISA..ERETR..ASRWILA.EC...LT..R..GILGMFIPP.A..T.TPKR--................QNLLCENVRI.......QLRTK..........FETD.P.....AHG.V....NLP.RE........V......P..A....L...A...Q.....R.R..V.L..................................VVGVDACHTTTFS...............--TG..SVVGILCAPE..rN...H.L.L...P....F.F.....W.KH..E...MR.....G..........Q.......E....A...DR......VTE....---.................. [...]
+Q6T6J9_9TRYP/784-1082              ..........................................................................................taa---VIVTN..ERETR..LVRWMQA.EC...LT..R..GILPLFVPP.C..A.SPKQ--................QQLRCENIRL.......RLRTV..........FATD.P.....LRG.V....DLQ.RE........V......P..A....V...A...Q.....R.R..V.L..................................LVGVDSCHTPTVS...............--TG..SVVGILCTAE..rN...H.L.L...P....F.F.....W.KH..E...RR.....G..........Q.......E....V...EL......VSE...hFEV.................. [...]
+D0A1P1_TRYBG/784-1082              ..........................................................................................taa---VIVTN..ERETR..LVRWMQA.EC...LT..R..GILPLFVPP.C..A.SPKQ--................QQLRCENIRL.......RLRTV..........FATD.P.....LRG.V....DLQ.RE........V......P..A....V...A...Q.....R.R..V.L..................................LVGVDSCHTPTVS...............--TG..SVVGILCTAE..rN...H.L.L...P....F.F.....W.KH..E...RR.....G..........Q.......E....V...EL......VSE...hFEV.................. [...]
+Q38C22_9TRYP/783-1081              ..........................................................................................taa---VIVTN..ERETR..LVRWMQA.EC...LT..R..GILPLFVPP.C..A.SPKQ--................QQLRCENIRL.......RLRTV..........FATD.P.....LRG.V....DLQ.RE........V......P..A....V...A...Q.....R.R..V.L..................................LVGVDSCHTPTVS...............--TG..SVVGILCTAE..rN...H.L.L...P....F.F.....W.KH..E...RR.....G..........Q.......E....V...EL......VSE...hFEV.................. [...]
+A4HH63_LEIBR/16-225                ...............................................................................sdaasshmssttlt--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..V...RR.....Q..........N.......A....N...EV......LNN...rFPD.................. [...]
+A4H6I4_LEIBR/673-882               ...............................................................................sdaasshmssttlt--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..V...RR.....Q..........N.......A....N...EV......LNN...rFPD.................. [...]
+Q6T6K0_9TRYP/549-877               ...........................................................................................vt----FLRR..PEREP..YAEWKAS.WS...GG..-..GALSQVVAK.D..L.TGGR--................ESSIVMAVAQ.......QICAK..........TGRL.Nw...tLDV.N....QVC.PK........L......-..A....K...S...D.....P.SggI.L..................................IIAADVGRDQRSVate........ssavRQEF..FAVAFVSFYVk.gT...Q.W.S...T....Y.C.....N.HY..Q...VN.....G..........R.......K....E...TL......YAD....GSDcdttsmsegg........ [...]
+D0A4M3_TRYBG/571-899               ...........................................................................................vt----FLRR..PEREP..YAEWKAS.WS...GG..-..GALSQVVAK.D..L.TGGR--................ESSIVMAVAQ.......QICAK..........TGRL.Nw...tLDV.N....QVC.PK........L......A..K....A...D...P.....SgG..I.L..................................IIAADVGRDQRSVate........ssavRQEF..FAVAFVSFYVk.gT...Q.W.S...T....Y.C.....N.HY..Q...VN.....G..........R.......K....E...TL......YAD....GSDcdttsmsegg........ [...]
+Q389P5_9TRYP/560-888               ...........................................................................................vt----FLRR..PEREP..YAEWKAS.WS...GG..-..GALSQVVAK.D..L.TGGRE-................-LSIVMAVAQ.......QICAK..........TGRL.Nw...tLDV.N....QVC.PK........L......A..K....A...D...P.....SgG..I.L..................................IIAADVGRDQRSVate........ssavRQEF..FAVAFVSFYVk.gT...Q.W.S...T....Y.C.....N.HY..Q...VN.....G..........R.......K....E...TL......YAD....GSDcdttsmsegg........ [...]
+Q86QW7_GIALA/412-736               ............................................................................................l-VVIVIPG..PKQDRgdLYKGIKQ.FY...TH..M..GIVTQCLLA.P..K.SSQNELq.............wyDQAVLRSVCQ.......QIYAK..........AGGA.-.....VWA.P....VLP.PQ........N......-..-....V...Y...S.....K.S..T.M..................................LCALDISRPKKTVgr...........paEVPI..STAGFISTYD..gS...F.E.Y...I....Y.S.....Q.KK..T...LV.....P..........N.......R....L...NH......GGE....LQQqtl............... [...]
+A8BCK6_GIALA/555-879               ............................................................................................l-VVIVIPG..PKQDRgdLYKGIKQ.FY...TH..M..GIVTQCLLA.P..K.SSQNELq.............wyDQAVLRSVCQ.......QIYAK..........AGGA.-.....VWA.P....VLP.PQ........N......-..-....V...Y...S.....K.S..T.M..................................LCALDISRPKKTVgr...........paEVPI..STAGFISTYD..gS...F.E.Y...I....Y.S.....Q.KK..T...LV.....P..........N.......R....L...NH......GGE....LQQqtl............... [...]
+C6LTG5_GIALA/555-877               ............................................................................................l-VVVVIPG..PKQYSggLYKEVKR.FY...TD..K..GIVTQCLLT.P..R.LSRDGPe.............wyDQAILNGLCQ.......QIYAK..........AGGA.-.....VWA.P....ALP.KD........N......A..Y....-...-...S.....T.S..T.M..................................LCALDVSRPKKTVgr...........ptEVPA..STAGFISTY-...E...G.S.F...E....Y.I.....Y.SQkkN...LMpn.rlN..........Q.......G....G...EV......QQQt..lMKT.................. [...]
+Q0TWJ6_PHANO/160-297               .......................................................................................rgssit--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+Q5KAT1_CRYNE/560-859               ............................................................................................i-ILCILPR..KEASI..YQTIKSV.GA...EG..LfkPVVTQCLQS.A..K.IKSDRG................IDQYCGNVAM.......KVHCK..........LGGV.-.....TH-.-....QVK.HN........V......-..-....-...-...D.....K.T..T.M..................................LCGADVTHPPSRG..............rVLYP..SIAATVASIN...G...E.N.N...Y....F.A.....G.CV..T...EQ.....G..........G.......R....V...EI......IQL....LDE.................. [...]
+Q5KAU3_CRYNE/580-879               ............................................................................................i-IFCILPK..KDPSI..YQAIKAC.AA...EQ..LfkPVVTQCLQS.L..K.IKSDRG................IEQYCGNVAM.......KVHAK..........LGGL.-.....THQ.V....SHQ.L-........-......-..-....-...-...E.....R.T..T.M..................................MVGADTGHPPAKG..............gALPP..SIAVTVAAVN...G...E.N.N...R....F.V.....S.GV..R...LQ.....E..........G.......R....V...EI......IQD....LEN.................. [...]
+A7TMA9_VANPO/888-1209              ............................................................................................y-ILYVLRR.gNDSAV..YDRLKYI.TD...LK..F..GALNSCVVW.D..N.FKKNS-................-IQYNSNVVM.......KMNLK..........LLGS.Nh...sLSI.E....NNK.LL........I......D..K....E...S...N.....L.P..I.L..................................VLGSDVTHYPEKD...............--QN..SIASLVGSYD...D...K.F.T...Q....F.P.....G.DY..M...LQ.....D.........gP.......G....E...EI......ITN....VGS.................. [...]
+A5E477_LODEL/107-430               ............................................................................................f-LLVVLPS..KDARF..YRAVKRA.GD...LK..V..GINNSCVIV.D..T.FTKRKFd.............kfDMTLFAQVGM.......KVNLK..........LGGS.N.....HKL.S....DAN.SK........G.....lV..D....E...K...K.....V.P..V.F..................................ILGADVTHPTGES..............nEESV..SIASVVGSED...A...I.F.N...S....F.P.....G.SL..R...VQ.....G..........G.......G....Q...EV......IAE....IKD.................. [...]
+C5MCT9_CANTT/554-879               ............................................................................................y-LLVLLPR..SDTTY..YLSVKRV.CD...LK..V..GILNSCSIL.S..V.FIKQRRg.............sfDTMTYAQMAM.......KVNIK..........LGGS.N....hKLS.H....QDS.AS........L......V..D....K...N...G.....V.P..I.M..................................ILGADVTHPTGQI..............nHESV..SIAACVASED...G...I.F.N...K....F.P.....G.SI..R...IQ.....S..........G.......G....Q...EV......IKD....IKG.................. [...]
+B9WGS3_CANDC/555-882               ............................................................................................y-LLFILPR..QDTQL..YSAIKRA.CD...LK..I..GILNSCSVL.N..T.FTKKRRgs...........dnfDTMTYAQMAM.......KINIK..........LGGS.Nh...kLSK.K....DSQ.GL........F......D..-....K...N...N.....V.P..I.F..................................ILGADVTHPTGEI..............nSESV..SIASIVGSED...G...I.F.N...K....F.P.....G.SV..R...IQ.....T..........G.......G....Q...EV......IAD....VKS.................. [...]
+Q5A1B6_CANAL/296-623               ............................................................................................f-LLFILPR..QDTPL..YSAIKRA.CD...LK..V..GILNSCSIL.N..T.FTKKRRgt...........enfDAMTYAQMAM.......KINIK..........LGGS.Nh...kLSK.K....DSQ.GL........F......D..-....K...N...N.....V.P..I.F..................................ILGADVTHPTGEI..............nSESV..SIASIVGSED...G...I.F.N...K....F.P.....G.SV..R...IQ.....T..........G.......G....Q...EV......IAD....VKS.................. [...]
+C4YGL4_CANAL/554-881               ............................................................................................f-LLFILPR..QDTPL..YSAIKRA.CD...LK..V..GILNSCSIL.N..T.FTKKRRgt...........enfDAMTYAQMAM.......KINIK..........LGGS.Nh...kLSK.K....DSQ.GL........F......D..-....K...N...N.....V.P..I.F..................................ILGADVTHPTGEI..............nSESV..SIASIVGNED...G...I.F.N...K....F.P.....G.SV..R...IQ.....T..........G.......G....Q...EV......IAD....VKS.................. [...]
+B2WJ98_PYRTR/213-541               ...........................................................................................ct--FFLLRE..KDFDI..YAKIKRD.GD...FS..-..GNHTICAVA.S..R.IKDRNEqdnr........rsgpRWQHFSNLAL.......KMNMK..........LGGD.N.....HWL.D....ENE.LE........K......V..L....GgkdK...K.....Q.N..T.M..................................ILGADVIHPGSSS..............kIGAP..SIACVVGTID...S...R.F.M...S....Y.R.....G.SM..R...LQ.....A..........G.......G....Q...EQ......IEDf..nFRS.................. [...]
+Q0U676_PHANO/647-830               ........................................................................................nvldv--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............--GP..SIAAVVASTD...S...T.A.L...Q....F.P.....G.SV..T...IQ.....Q..........T.......F....D...EY......TTR...gAEDkttltapv.......... [...]
+A7ISJ0_MYCPJ/514-830               ............................................................................................t-VLVVLPS..KDAND..YAAVKTW.GE...LH..D..GVNTICVTA.G..K.QHRL-I................DYDFQANLAL.......KFNAK..........LRGQ.N.....HKL.D....KSF.FE........Y......L..C....H...G...Q.....S.A..T.M..................................VVGADVTHPGPSS..............vDYCP..SIAAVVASTD...S...G.A.C...K....Y.S.....G.SI..R...LQ.....A..........S.......R....E...EI......ITD....LQG.................. [...]
+A6S1V9_BOTFB/6-263                 .......................................................................................eivsva--------..-----..-------.--...--..-..-CPTVCVST.D..G.VERGAR...............pDLGVLANIAL.......KINFK..........LGGI.N.....HKI.E....NIP.L-........-......-..-....-...-...K.....D.R..T.M..................................IMGADVTHVGKGQ..............dDACP..SQAGVVATRD...S...N.Y.V...H....Y.L.....A.SA..R...LQ.....P..........H.......N....T...EF......IED....LQG.................. [...]
+A6SR68_BOTFB/1-284                 ............................................................................................m--------..-----..-------.--...--..-..---------.-..-.------................--------CL.......KFNLK..........LGGV.N.....QEV.S....E-G.C-........-......-..-....G...I...K.....A.R..T.M..................................VVGADVTHPGDEE...............-VCP..SIAAVVATDD...N...S.Q.F...K....Y.L.....G.SA..R...LQ.....E..........G.......K....Q...EY......ISD....LRG.................. [...]
+Q0UCE8_PHANO/551-880               ............................................................................................l-VVFLLNK..SSTPF..YAHLKDL.AD...RT..H..GIHSLCLVE.Q.yK.LIKQ-Yger..........ahlFQEYMTNVVM.......KINLK..........MGGI.-.....TQS.V....T--.TV........S......D..Y....L...A...K.....N.R..V.M..................................VLGADVVHAGPGA..............yPGTP..SIAAIVGSVD...F...S.A.G...K....C.L.....G.SM..R...LQr..idT..........T.......D....R...ET......IVE....VED.................. [...]
+B2WJ35_PYRTR/419-708               ............................................................................................l-FILVVEK..YDTTI..YRELKNL.AD...RV..V..GIQSLCVVE.Q..M.-KKTDR...............wFDDMMRNVMM.......KLNLK..........LGGI.N.....HVV.D....AVQ.TR........L......-..-....-...-...K.....S.H..T.V..................................VLGADLVHPSGNL...............PGVP..SIASIVGSVD...N...H.A.G...K....C.L.....G.SM..R...LQ.....G..........I.......D....T...TD......REL....IIE.................. [...]
+Q0UCU3_PHANO/737-1044              ............................................................................................l-VVLLLKT..QSIPV..YSAFKAA.AD...TE..A..GLQSICMTQ.ApnY.ISAKQKck............enIDQYMANIMM.......KANLK..........FGGG.Nh...tVQF.A....AKP.LT........H......I..A....T...T...L.....Q.D..T.L..................................VLGADITHPSPGS..............lVGCP..SIAAVVGSVN...S...M.S.T...K....Y.L.....G.SM..R...LQ.....E..........T.......C....K..kEI......IDD....LQA.................. [...]
+Q0UCG8_PHANO/473-701               .............................................................................ekentpaysvfkylad--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............SGTP..SIAAIVGSVD...A...K.G.G...K....F.L.....G.SM..R...LQ.....P..........Rl.....iA....C...ED......IQD....VES.................. [...]
+Q0UCH0_PHANO/670-999               ............................................................................................l-VILVLRS..KDQEV..YSNFKYL.AD...RV..F..GIPSIVMVT.A..S.NFR--Ggaw.........nvtgLDQYIGNIMM.......KANLK..........LGGI.N.....HSA.E....SDR.GN........I......K..N....-...H...L.....E.N..T.L..................................VLGSDVTHPSNGS..............lFGCP..SVAALVGSVD...N...T.G.G...C....F.L.....G.SL..R...LQ.....D..........Q.......G....SkehQM......IDD....LKS.................. [...]
+Q2HHM4_CHAGB/694-1033              ............................................................................................l-VFVLLPD..KGAEL..YNAIKAA.AD...IK..V..GIHTVCMVE.S..K.AAKKFNkhtk........kmqfDLQFFDNILL.......KANLK..........QGGI.N.....HT-.L....EFP.TS........-......K..I....L...S...T.....W.Q..A.M..................................VLGLDVTHSPPGAn............kaKATP..SIIGMVANAD...E...H.L.A...Q....W.P.....A.TI..A...FQ.....D..........R.......E...nQ...EI......VTS....MQSf................. [...]
+B2WJ32_PYRTR/383-592               .......................................................hrdasgnvitgdtvtvtvkqyqrlqygrtlrhgelsav--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...NI......ITG....LAT.................. [...]
+B6HRB3_PENCW/625-938               ............................................................................................f-LVVVLPT..TEGKN..FDYVKYA.GD...LK..T..GILTHCILY.D..K.VLRS--................NEQYWSNNAM.......KVNLK..........MGGC.N.....QLL.Q....PAN.AR........F......-..I....G...A...G.....K.S..T.M..................................VVGLDVTHPSSAD..............pEVFP..SVASIVASID...Y...R.M.G...Q....W.P.....G.EV..R...AQ.....M..........R.......R....Q...EH......VVH....LKD.................. [...]
+D0U264_CRYPA/482-802               ................................................................................lalivfpyqqpsg--------..----V..YNKIKFL.GD...VV..H..GLHTVCVIG.R..K.FVKNGQ...............tQREYFANVSL.......KINLK..........LGGT.N.....HQL.T....H-P.PE........L......-..-....-...-...F.....R.G..T.M..................................VVGYDAVHPTAVE..............kEDLP..SHMALVASVD...E...G.L.G...Q....W.S.....G.CY..W...TQ.....K..........R.......R....Q...EI......ADAt..nLKQ.................. [...]
+D1ZJ09_SORMA/711-1030              ............................................................................................f-LVVVLPD..KDSTT..YSWVKRA.AD...MK..Y..GIHTVCVQG.E..K.LVEEKG................QAGYYANVGL.......KVNLK..........FGGT.N.....HN-.-....-IK.TP........I......P..L....L...A...K.....G.K..T.M..................................VVGYDVTHPTNLTag..........qspSTAP..SIVGLVSTID...Q...H.L.G...Q....W.P.....G.MV..W...NN.....P..........R.......G....Q...ES......MTK...qFTD.................. [...]
+Q1K6I6_NEUCR/733-1052              ............................................................................................f-VVVLLPR..KDVAI..YNMVKRA.AD...IT..F..GVHTVCCVA.E..K.FLSTKG................QLGYFANVGL.......KVNLK..........FGGT.N.....HN-.-....-IK.TP........I......P..L....L...A...K.....G.K..T.M..................................VVGYDVTHPTNLAag..........qspASAP..SIVGLVSTID...Q...H.L.G...Q....W.P.....A.MV..W...NN.....P..........H.......G....Q...ES......MTE...qFTD.................. [...]
+Q9P8T1_NEUCR/582-901               ............................................................................................f-VVVLLPR..KDVAI..YNMVKRA.AD...IT..F..GVHTVCCVA.E..K.FLSTKG................QLGYFANVGL.......KVNLK..........FGGT.N.....HN-.-....-IK.TP........I......P..L....L...A...K.....G.K..T.M..................................VVGYDVTHPTNLAag..........qspASAP..SIVGLVSTID...Q...H.L.G...Q....W.P.....A.MV..W...NN.....P..........H.......G....Q...ES......MTE...qFTD.................. [...]
+B2AR52_PODAN/574-886               ............................................................................................l-VIVVLGD..QDANV..YNTVKKL.GD...VE..F..GIQTVCVVR.N..K.ITNN--................-KGYFTNVAL.......KVNLK..........FGGV.N.....HKL.Q....NAH.P-........-......-..L....L...K...G.....G.K..T.M..................................VVGYDVTHPTNLPtg...........agENAP..SLVGLVASID...S...D.L.G...Q....W.P.....A.IA..W...QN.....P..........A.......R....V...EQ......LDV...kLAE.................. [...]
+Q2GSQ8_CHAGB/651-969               ............................................................................................f-LLVLIPN..KDAVT..YSNIKKC.GD...CL..F..GIPTVCCRE.E..K.ITDPKG................QKGYFANVGL.......KVNLK..........FGGV.N.....HRV.Q....DTT.GL........V......-..-....-...-...-.....A.K..T.M..................................FVGYDVTHPTNLSag...........aaENAP..SLVGLVASVD...K...D.L.A...Q....W.P.....A.VT..W...AN.....K..........A.......R....V...EK......VGQ....NDDgq................ [...]
+A4RL50_MAGGR/721-1039              ............................................................................................m-VFVILPD.sKDAAV..YNAVKRI.AD...ID..L..GVHTVCMVR.K..N.LFKNGPg..............qNPQYYANVGL.......KVNLK..........AGGI.N....hKLS.Q....DIP.V-........-......-..-....S...K...G.....G.K..A.M..................................FVGWDVIHPTNLGvd...........kdSGLP..SVVGLVSSID...E...H.L.A...Q....W.P.....A.VA..W...AQ.....K..........G.......G....Q...EM......ADS...rLEE.................. [...]
+C9ST09_VERA1/571-888               ............................................................................................f-VLVILPR..QDTTL..YSVIKTL.GD...CQ..F..GFHTICAVE.K..T.FTKE--................NPMTFANIGL.......KWNLK..........NGGI.N.....HRV.K....D--.-P........I......G..I....V...A...Q.....G.K..T.M..................................VVGYDVTHPTNMGlqp.........gekDVPP..SIVGLVASVD...K...D.L.G...Q....W.P.....A.VA..W...EQ.....K..........A.......G....Q...EM......LDS...kLLE.................. [...]
+C7YM23_NECH7/666-978               ............................................................................................f-ILIALGS..TDTAM..YSAVKLL.GD...VT..W..GIHTSCVQG.K..K.LANA--................NPGYYANVAL.......KWNLK..........AGGV.N.....HKL.R....N--.-E........F......G..I....I...K...E.....G.K..T.M..................................VVGYDVTHPTNMPtg...........asDDLP..SLVGLVATID...R...N.M.G...Q....W.P.....A.VS..W...EQ.....S..........S.......K....Q...EM......LDE...vLTE.................. [...]
+A4R6J1_MAGGR/641-908               ............................................................................................f-VLIILPD..KDVSR..YNMIKYL.GD...VC..Y..GVPTVCVAS.R..T.FFPARG................ADQMFGNLGL.......KINLK..........LGGV.N.....HKI.E....DSL.LG........I......-..-....V...A...Q.....G.K..T.M..................................IVGIDVAHPPAGA...............AVTA..SIAAMVASID...S...N.L.A...Q....W.P.....G.EI..G...IQ.....S..........Q.......A....R...KE......QVD...aLTS.................. [...]
+A2QG96_ASPNC/558-884               ............................................................................................f-LLIILPQ..AAEGL..YSRIKFL.CD...VQ..F..GIRNVCVVA.D..K.FLRS--................NDQFLSNVAL.......KLNLK..........LGGV.N.....QKL.L....TRS.L-........-......D..M....I...S...E.....G.K..T.M..................................VIGVDVTHPNSGNl.............pARAP..SVAAMVASVD...R...Y.L.A...Q....W.P.....A.EI..C...TQ.....P..........A.......R....Q...EL......VTQ....LGV.................. [...]
+B8MQK8_TALSN/682-995               .............................................................................................FILVILPS..RDTLL..YNTVKYL.CD...VK..H..GLLHACVTA.N..K.FAKP--................SAQYDANVAL.......KVNLK..........LGGT.N.....HRV.G....GTQ.L-........-......G..I....I...S...E.....G.K..T.M..................................LVGIDVTHPSPGS..............aKSAP..SIAAIVASVG...T...N.L.S...Q....F.P.....A.QL..R...VQ.....T..........E.......K....Q...EK......VDA....LDV.................. [...]
+B6QUK3_PENMQ/689-1001              ............................................................................................f-VLVVLPR..RETFL..YNTIKYL.CD...VK..Y..GLLHACVVA.D..K.FARG--................GPQYDANVAL.......KVNLK..........LNGT.N.....HIV.G....GT-.-Q........L......G..L....I...S...K.....G.K..T.M..................................LVGIDVTHPSPGS..............vKNAP..SIAAIVASVG...K...D.L.S...Q....F.P.....A.QL..H...VQ.....P..........G.......K....Q...EQ......VDA....LDV.................. [...]
+C5GYE6_AJEDR/653-980               ...........................................................................................ql-IFFILPV..-VSSI..YSRIKYL.CD...VK..W..GVHSICVVA.G..K.FAKERN................-CQYFSNVAL.......KFNLK..........LGGT.N.....HTL.D....PSK.L-........-......G..F....I...S...E.....G.K..T.M..................................VVGLDVTHPSPGS..............sSNAP..SIAAIVASID...Q...D.L.T...Q....W.P.....A.DV..R...IQ.....P..........S.......R....Q...EM......VSG....LDE.................. [...]
+C5K303_AJEDS/770-890               .................................................................................psriiirrprrq--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+C1GSN8_PARBA/1-191                 .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.M..................................VVATDVTHPSPGS..............aSNTP..SIAGIIASIN...S...Q.L.A...Q....W.P.....A.DL..R...IQ.....T..........Y.......R....Q...EM......VSA....LDD.................. [...]
+C6H5C6_AJECH/26-168                ..........................................................................msnlaftafapspanspkd--------..-----..-------.--...--..-..---------.-..-.-----R................NHTYFANVAL.......ETNRK..........LGGA.S.....HTL.D....AHK.--........L......G..F....I...P...G.....C.K..T.M..................................VVCVDVTHPSPGS..............sTNAS..SGAAIVASID...Q...N.L.T...Q....W.P.....A.EF..R...IQ.....A..........T.......F....Q...KM......MIS...rLDE.................. [...]
+A6RDB0_AJECN/9-157                 ........................................................................................lkpyv--------..-----..-------.CD...VK..F..GVHSFRAIA.S..K.FAKDRN................-HTYFANVAL.......EANRK..........LGGA.S.....HTL.D....AHK.--........L......G..F....I...P...G.....C.K..T.V..................................VVCVDVTHPSPGS..............sTNAS..SGAAIVASID...Q...N.L.T...Q....W.P.....A.EL..C...TQ.....A..........V.......F....Q...KM......ISR....LDE.................. [...]
+C0S8I9_PARBP/1049-1137             ............................................................................................p--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+B6H0X0_PENCW/641-959               ...........................................................................................vf-ILGILYT..KDTGV..YNCVKQV.CD...VR..V..GIRNVNVLA.E..K.LANS--................NDQYNANVGL.......KINLK..........LGGA.N.....QAL.R....TQD.L-........-......G..I....I...S...E.....G.K..T.M..................................LVGIDVTHPSPGS..............aSTAP..SVAGIVASVD...G...T.L.A...Q....W.P.....A.EI..R...VQ.....G..........A.......R....Q...EM......VAD....LET.................. [...]
+A1C469_ASPCL/690-1008              ............................................................................................l-ILSIMYG..SDTEA..YNSLKKV.CD...VH..C..GVRNINVLA.E..K.LRGA--................NDQYYANVGL.......KFNLK..........LGGA.N.....QSL.K....TSE.LG........I......-..-....V...A...E.....G.K..T.M..................................LVGIDVTHPSPGS..............sATAP..SVAGMVASID...S...S.L.S...Q....W.P.....A.DI..R...IQ.....T..........S.......R....Q...EM......VSD....LDA.................. [...]
+A1DBD4_NEOFI/680-998               ............................................................................................l-ILTILYS..SDAEA..YNCIKQI.CD...VR..R..GVRNINVLA.E..K.LRGA--................NDQYYANVGL.......KFNLK..........LGGA.N.....QTL.K....ASE.LG........I......-..-....V...A...E.....G.K..T.M..................................LVGIDVTHPSPGS..............sAEAP..SVAGMVASVN...S...S.L.S...Q....W.P.....A.DI..R...IQ.....T..........S.......R....Q...EM......VSD....LDE.................. [...]
+B0Y9U0_ASPFC/686-1004              ............................................................................................l-ILTILYS..SDVEA..YNCIKKI.CD...VR..R..GVRNVNVLA.E..K.LRGA--................NDQYYANVGL.......KFNLK..........LGGA.N.....QIL.K....ASE.LG........-......-..I....V...A...E.....G.K..T.M..................................LVGIDVTHPSPGS..............sAEAP..SVAGMVASID...S...S.L.S...Q....W.P.....A.DI..R...IQ.....T..........S.......R....Q...EM......VSN....LDE.................. [...]
+Q4WC92_ASPFU/686-1004              ............................................................................................l-ILTILYS..SDVEA..YNCIKKI.CD...VR..R..GVRNVNVLA.E..K.LRGA--................NDQYYANVGL.......KFNLK..........LGGA.N.....QIL.K....ASE.LG........-......-..I....V...A...E.....G.K..T.M..................................LVGIDVTHPSPGS..............sAEAP..SVAGMVASID...S...S.L.S...Q....W.P.....A.DI..R...IQ.....T..........S.......R....Q...EM......VSN....LDE.................. [...]
+C8VMQ3_EMENI/660-979               ............................................................................................l-ILTILPF..NDTAL..YNCIKRA.CD...VR..H..GVRNINVLA.E..Q.FCKR--................NEQYFANVGL.......KFNLK..........LGGV.N.....QVV.R....PSQ.L-........-......G..I....I...G...E.....G.K..T.M..................................LIGIDVTHPSPGS..............aKGAP..SVAAMVASVD...S...S.L.G...Q....W.P.....A.EI..R...IQ.....K..........E.......A....R..kEM......VDA....LDS.................. [...]
+Q5BD61_EMENI/660-979               ............................................................................................l-ILTILPF..NDTAL..YNCIKRA.CD...VR..H..GVRNINVLA.E..Q.FCKR--................NEQYFANVGL.......KFNLK..........LGGV.N.....QVV.R....PSQ.L-........-......G..I....I...G...E.....G.K..T.M..................................LIGIDVTHPSPGS..............aKGAP..SVAAMVASVD...S...S.L.G...Q....W.P.....A.EI..R...IQ.....K..........E.......A....R..kEM......VDA....LDS.................. [...]
+Q0CNH1_ASPTN/643-961               ............................................................................................l-ILGILPF..NDADY..YNAIKRA.CD...VK..F..GVRNINVLA.E..K.FLEA--................KDQYIANVGL.......KFNLK..........LGGV.N....qVL-.H....P--.KE........L......G..I....I...G...Q.....G.K..T.M..................................LVGIDVTHPSPGS..............sSHAP..SVAGMVASTD...A...T.L.G...Q....W.P.....A.EL..R...IQ.....A..........S.......R....Q...EM......VED....LDT.................. [...]
+B8MXT2_ASPFN/684-1002              ............................................................................................l-ILSVLPF..SDADY..YNCIKRA.CD...LT..Y..GVRNINVLA.D..K.FRDA--................NPQYFANVGL.......KVNLK..........LGGA.N.....QLL.D....A--.KE........L......G..L....I...G...Q.....N.K..T.M..................................LVGMDVTHPSPGS..............sANAP..SVAGMVASVD...S...T.L.S...Q....W.P.....A.EI..R...VQ.....R..........S.......R....E...EM......IQD....LSD.................. [...]
+Q2US02_ASPOR/573-891               ............................................................................................l-ILSVLPF..SDADY..YNCIKRA.CD...LT..Y..GVRNINVLA.D..K.FRDA--................NPQYFANVGL.......KVNLK..........LGGA.N.....QLL.D....A--.KE........L......G..L....I...G...Q.....N.K..T.M..................................LVGMDVTHPSPGS..............sANAP..SVAGMVASVD...S...T.L.S...Q....W.P.....A.EI..R...VQ.....R..........S.......R....E...EM......IQD....LSD.................. [...]
+A2R8K3_ASPNC/710-1028              ............................................................................................l-ILTILPS..NDADI..YNIVKRA.CD...LT..H..GVRNVNVVA.D..K.FRKPNN................-DQYWANVGL.......KFNLK..........LGGN.N.....QLI.D....P--.KE........L......G..L....I...G...Q.....N.K..T.M..................................LVGVDVTHPSPGS..............sSAAP..SVAGMVASID...S...T.L.G...Q....W.P.....A.EL..R...IQ.....K..........P.......R....E...EM......VAE....LDA.................. [...]
+B8N7A8_ASPFN/617-954               ...........................................................................................ll--YIVLPK..KESRW..YLVIKRL.CD...VE..Y..GLQTICSVG.P..K.LVAKKGqtme.......qydksLDQYMRNVAM.......KFNLK..........LGGT.N.....HVV.D....NLR.L-........-......S..I....I...N...E.....D.K..T.M..................................IVGLDVTHPTGSSqv...........ssATAP..SVAAMVASID...K...T.L.G...Q....W.P.....A.TI..Q...VQ.....S..........H.......G...gK...EE......IDS....LDG.................. [...]
+Q2UBS9_ASPOR/578-915               ...........................................................................................ll--YIVLPK..KDSRW..YLVIKRL.CD...VE..Y..GLQTICSVG.P..K.LVAKKGqtme.......qydksLDQYMRNVAM.......KFNLK..........LGGT.N.....HVV.D....NLR.L-........-......S..I....I...N...E.....D.K..T.M..................................IVGLDVTHPTGSSqv...........ssATAP..SVAAMVASID...K...T.L.G...Q....W.P.....A.TI..Q...VQ.....S..........H.......G...gK...EE......IDS....LDG.................. [...]
+B2WES9_PYRTR/643-967               ............................................................................................l-LFIVLPE..ANIPL..YKRIKSI.AD...KE..Y..GLHTICSVG.S..K.LAKDRG................RDQYIANVAL.......KINLK..........LGGI.N.....QIV.E....N--.KN........L......G..I....I...D...Q.....N.K..T.M..................................VVGIDVTHPSPGS..............aSNAP..SVSAMVASVD...R...F.L.G...Q....W.P.....A.TL..R...IQ.....R..........G.......R....Q...EN......VDA....LGE.................. [...]
+A6QW60_AJECN/639-963               ............................................................................................l-LFIILPE..ANIPL..YKRIKTL.AD...KD..Y..GIHTICSVG.S..K.LAKDRG................RDQYMANIAL.......KFNLK..........LGGI.N.....QIV.E....N--.KN........L......G..I....I...D...Q.....N.K..T.M..................................VVGIDVTHPSPGS..............sSNAP..SVSAMVASID...K...F.L.G...Q....W.P.....A.TL..R...KQ.....R..........A.......R....Q...EN......VDD....LTE.................. [...]
+B6QWK7_PENMQ/644-968               ............................................................................................l-LYVILPQ..ANTTL..YKRIKTL.TD...KD..F..GIHTICSVA.S..K.LAKERG................RDQYMANIAL.......KFNLK..........LGGI.N.....QIV.E....NRN.L-........-......G..I....V...D...Q.....N.K..T.M..................................VVGIDVTHPSPGS..............sSNAP..SISAMVASID...R...S.L.G...Q....W.P.....A.TL..R...IQ.....R..........A.......R....Q...EN......VDD....LTE.................. [...]
+B8MGF3_TALSN/2-137                 ..........................................................................................lad--------..-----..-------.--...KD..F..GIHTICSVG.S..K.LVKDRG................RDQYMANVAL.......KFNLK..........LGGI.N.....QIV.E....NRN.L-........-......G..I....V...D...E.....N.K..T.M..................................VVGTDVTHPSPSS..............sSNAP..SVSAMVASID...K...F.L.G...Q....W.P.....A.TL..R...IQ.....H..........A.......R....Q...EN......VTD....LTE.................. [...]
+C7ZR18_NECH7/19-235                ...............................................................lcqgsirynapltprtstlreesyirmtii--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+C5PJP0_COCP7/663-977               ............................................................................................f-VLVILPL..EDSSI..YNRVKYR.GD...IQ..N..GIHTVCVLA.N..K.FRGI--................--QYCANVAL.......KFNLK..........LGGT.N.....HVL.D....SSK.L-........-......G..V....V...G...E.....G.K..T.M..................................LVGIDVTHPSPGS..............sSQAP..SVAAMVANVD...K...H.L.A...Q....W.P.....A.SI..R...LQ.....Q.........eP.......K....A...EM......VDK....LQE.................. [...]
+C4JG78_UNCRE/651-963               ............................................................................................f-LLVMLPF..EDSAI..YNRVKFR.GD...IQ..N..GIHTVCVGD.R..T.G-----................GIQSLANIAL.......KFNLK..........LGGA.N.....HVL.-....D-P.PK........L......G..L....I...G...E.....G.K..T.M..................................LVGIDVTHPSPGS..............sSQAP..SVAAMVASVD...K...D.L.A...Q....W.P.....A.SI..R...LQ.....R..........E......aK....A...EM......VDE....LEE.................. [...]
+D4ANV6_ARTBE/642-958               ............................................................................................l-LLVILPN..DNPTV..YKRIKLN.GE...VF..H..GIQTVCVIM.S..K.FTKSSN................-VQYHANVAM.......KFNLK..........LGGT.N.....HVL.D....DSK.MG........-......-..I....I...A...G.....G.K..T.M..................................VVGIDVTHPAPGS..............sETAP..SVAGMVASID...K...T.L.G...Q....W.P.....A.IL..R...LQ....rE..........A.......K....Q...EM......VDD....LTD.................. [...]
+D4CZ86_TRIVC/642-958               ............................................................................................l-LLVILPN..DNPTV..YKRIKLN.GE...VF..H..GIQTVCVIM.S..K.FTKSSN................-VQYHANVAM.......KFNLK..........LGGT.N.....HVL.D....DSK.MG........-......-..I....I...A...G.....G.K..T.M..................................VVGIDVTHPAPGS..............sETAP..SVAGMVASID...K...T.L.G...Q....W.P.....A.IL..R...LQ....rE..........A.......K....Q...EM......VDD....LTD.................. [...]
+C5FGF6_NANOT/649-965               ............................................................................................l-LLMILPN..DNPTV..YKRIKLN.GE...VM..H..GIQTICVIR.S..K.FDKQYN................-VQYHANVAM.......KFNLK..........LGGI.N.....HVV.D....DTK.L-........-......G..I....I...A...A.....G.K..T.M..................................VVGIDVTHPAPGS..............sVTAP..SVAGMVASVD...K...Y.L.G...Q....W.P.....A.VL..R...LQ.....H.........eA.......K....Q...EM......VDD....LTD.................. [...]
+C5JDT9_AJEDS/671-859               .....................................................................................rlqqqara--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+C5GX22_AJEDR/671-859               .....................................................................................rlqqqara--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+C1G7F3_PARBD/674-979               .....................................................................................qqsrvrgd--------..-----..-------.--...VK..D..GIHTICVVA.E..K.FAKN--................QVQYFANVAL.......KFNLK..........LGGV.N.....HRL.Q....PSK.L-........-......G..T....L...S...E.....G.K..T.M..................................VVGIDVTHPSPGS..............aPTAP..SIAGMVASVD...N...V.L.G...Q....W.P.....A.SI..R...LQ.....H.........qA.......R....A...EM......VND....LDP.................. [...]
+C0RZ18_PARBP/688-993               .....................................................................................qqsrvrgd--------..-----..-------.--...VK..D..GIHTICVVA.E..K.FAKN--................QVQYFANVAL.......KFNLK..........LGGV.N.....HRL.Q....PSK.L-........-......G..T....L...S...E.....G.K..T.M..................................VVGIDVTHPSPGS..............aPTAP..SIAGMVASVD...N...V.L.G...Q....W.P.....A.SI..R...LQ.....H.........qA.......R....A...EM......VND....LDP.................. [...]
+C1GXU8_PARBA/683-1002              ............................................................................................l-VLVILPF..ASPPI..YNQVKYR.GD...VK..D..GIHTICVVA.E..K.FAKN--................QAQYFANVAL.......KFNLK..........LGGV.N.....HRL.Q....PSK.L-........-......G..T....L...S...E.....G.K..T.M..................................VVGIDVTHPSPGS..............aPTAP..SIAGMVASVD...N...V.L.G...Q....W.P.....A.SI..R...LQ.....H.........qA.......R....A...EM......VND....LDP.................. [...]
+C5JDT9_AJEDS/580-664               ............................................................................................l-VLVILPF..ASPQI..YSQVKYR.GD...IK..D..GIHTICVVA.E..K.FRKN--................QPQYFANVAL.......KFNLK..........LGGV.N.....HKL.Q....PSK.L-........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+C5GX22_AJEDR/580-664               ............................................................................................l-VLVILPF..ASPQI..YSQVKYR.GD...IK..D..GIHTICVVA.E..K.FRKN--................QPQYFANVAL.......KFNLK..........LGGV.N.....HKL.Q....PSK.L-........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+C0NMG7_AJECG/678-986               ............................................................................................l-VLVILPF..ESPQM..YNHIKYR.GD...IK..D..GIHTICVVA.E..K.FGKN--................QPQYFANVAL.......KFNLK..........LGGI.N.....HKL.Q....PSK.L-........-......G..I....I...S...E.....G.K..T.M..................................VVGIDVTHPAPGS..............lPTAP..SIAGMVASVD...K...F.L.A...Q....W.P.....A.SI..R...LQ.....H..........Q......aR....A...EM......VDD....LDP.................. [...]
+C6H291_AJECH/678-997               ............................................................................................l-VLVILPF..ESPQM..YNHIKYR.GD...IK..D..GIHTICVVA.E..K.FGKN--................QPQYFANVAL.......KFNLK..........LGGI.N.....HKL.Q....PSK.L-........-......G..I....I...S...E.....G.K..T.M..................................VVGIDVTHPAPGS..............lPTAP..SIAGMVASVD...K...F.L.A...Q....W.P.....A.SI..R...LQ.....H..........Q......aR....A...EM......VDD....LDP.................. [...]
+A6RB60_AJECN/291-610               ............................................................................................l-VLVILPF..ESPQM..YNHIKYR.GD...IK..D..GIHTICVVA.E..K.FGKN--................QPQYFANVAL.......KFNLK..........LGGI.N.....HKL.Q....PSK.L-........-......G..I....I...S...E.....G.K..T.M..................................VVGIDVTHPAPGS..............lPTAP..SIAGMVASVD...K...F.L.A...Q....W.P.....A.SI..R...LQ.....H..........Q......aH....A...EM......VDD....LDP.................. [...]
+Q96UM0_BLUGR/565-886               ............................................................................................f-VLCILPK..NDPAI..YNSIKTV.AD...TK..A..GIHTVCCVS.S..K.FTKQQR................QEQYFGNVAL.......KFNLK..........AGGI.N.....HIL.E....PAK.L-........-......G..I....V...S...E.....G.K..T.M..................................VVGVDVTHPSPGS..............rEGAP..SVAGIVASVD...K...H.L.G...Q....W.P.....S.QF..S...IQ.....A..........K.......S...rT...EM......VSD....LES.................. [...]
+A7E4W2_SCLS1/692-1008              ............................................................................................f-VLCILPV..NDVML..YNTIKRH.AD...TR..A..GIHTVCVQY.S..K.FVKGDL................--QYFGNVAL.......KFNLK..........AGGI.N.....QTI.D....K--.--........L......G..V....I...N...E.....G.K..T.M..................................VVGIDVTHPSPGS..............kETAP..SVAAMVTSTD...K...L.L.G...Q....W.S.....G.IC..R...LQ.....N.........qA.......R....Q...EM......VSD....LES.................. [...]
+A6RK26_BOTFB/654-970               ............................................................................................f-LLCILPV..DDVML..YNTIKRF.GD...TK..A..GIHTVCVQY.S..K.FTKG--................DPQYFGNVAL.......KFNLK..........AGGI.N.....QTI.D....K--.--........L......G..I....I...N...E.....G.K..T.M..................................VVGIDVTHPSPGS..............kDTAP..SVAAMVTSTD...K...L.L.G...Q....W.S.....G.VC..R...LQ.....D..........K......aR....Q...EM......VSD....LEP.................. [...]
+D0U265_CRYPA/712-1038              ...................................................................................lllvilpgrd-------K.gDNTEL..YNWVKTL.GD...VK..H..GVHTICVVG.Q..K.FTAA--................QDQFFANVAL.......KFNLK..........LGGN.N.....QSV.D....PSR.L-........-......S..F....I...N...E.....D.K..T.M..................................LVGIDVTHPSPGS..............rSNAP..SVAGMVASTD...K...H.L.G...Q....W.P.....G.IL..S...IQ.....N..........K......aR....A...EM......VSD....LTE.................. [...]
+D0U266_CRYPA/635-957               ...........................................................................................lv--WVIVPA..GSKLL..YDRIKYL.SD...VK..L..GVMTVVSVD.K..T.LKERDPr..............yQSQYLGNEAL.......KVNLK..........LGGM.N.....QRI.T....S--.-G........L......H..F....I...S...E.....G.K..T.M..................................LVGIDVIHPSTDQt.............rGGMP..SVAGMVATVD...R...H.V.A...Q....W.P.....G.VL..Q...VQ.....Q..........K.......R....Q...EM......VSD....LEP.................. [...]
+D4B128_ARTBE/608-819               ...........................................................................................ft--LIVLPR..YDAEI..YSKVKYS.AD...VK..H..GCHTLCVVP.K..P.PKNGRPgepl........qiniQPSYLANLAL.......KINLK..........LGGV.N.....HQL.E....PLK.KY........-......-..-....-...Q...S.....C.P..I.M..................................YLGIDVTHPTGTDs.............iPNAP..SIAGVVANCD...P...M.L.G...Q....W.P.....A.SI..R...TQ.....A..........H.......C....V...EM......VEN....LGE.................. [...]
+D4D326_TRIVC/587-798               ...........................................................................................ft--LIVLPR..YDAEI..YSKVKYS.AD...VK..H..GCHTLCVVP.K..P.PKNGRPgepl........qvniQPSYLANLAL.......KINLK..........LGGV.N.....HQL.E....PLK.KY........-......-..-....-...Q...S.....C.P..I.M..................................YLGIDVTHPTGTDs.............iPNAP..SIAGVVANCD...P...M.L.G...Q....W.P.....A.SI..R...TQ.....A..........H.......C....V...EM......VEN....LGE.................. [...]
+C4JIN7_UNCRE/692-1007              ............................................................................................f-VVALLPK..YDQQI..YSLVKHQ.GD...IK..T..GIPTVCVVE.K..P.IKDKQTntsy.......vglkdDEGTLRNISL.......KVNLK..........LGGI.N.....HEI.T....SRQ.EI........R......N..I....-...-...M.....Q.T..T.M..................................FIGIDVTHPTGTEs.............qSDAP..SIAAVVANTD...P...T.L.S...Q....W.P.....A.SI..T...TQ.....G..........H.......R....K...EM......VED...dLYS.................. [...]
+C5FBF4_NANOT/570-628               ..........................................................................................pda--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+C5P8C9_COCP7/682-993               ............................................................................................y-VIVLLPK..FDQQV..YSYVKYY.GD...IV..T..GIPNTCVTE.K..Y.VKKEKRit...........fktDGGAVENIAL.......KINLK..........LGGI.N.....HEI.Q....SDG.RI........H......D..I....-...-...I.....R.T..T.M..................................FIGIDVTHPTGTDs.............qSGAP..SISAVVANND...P...T.L.A...Q....W.P.....A.SI..T...TQ.....E..........H.......R....K...EM......VES...vLER.................. [...]
+B0D488_LACBS/608-916               ...........................................................................................ti-VLVILSN..GDKHV..YSGLKHL.CD...CY..L..DLATVCVHS.S..K.IRKEKG................QLQYFANVAL.......KFNMK..........LGGV.N.....HAL.N....AAN.M-........-......A..W....L...K...K.....A.P..T.M..................................LVGIDVTHPGPGS..............vKGTP..SIAAVVASCE...S...D.F.A...Q....Y.P.....A.SM..E...IQ.....E..........T.......K....K...EM......VTN....LAK.................. [...]
+A8P0D4_COPC7/619-925               ............................................................................................i-VLVILSS..GDKHV..YNGIKKL.CD...TQ..L..DLPTVCVQT.A..K.FRKEKG................QPQYFANVAL.......KVNMK..........LGGV.N.....HVL.D....K--.DN........M......T..W....L...K...Q.....K.P..T.M..................................LVGMDVTHPGPGS..............rLGTP..SVAAVVASCD...P...D.F.A...Q....F.P.....C.SM..E...IQ.....E..........S.......K....K...EM......ITN....LEK.................. [...]
+A8P2K4_COPC7/589-903               ...........................................................................................sf-MLVLLEQ..KEKYI..YPGIKRI.GD...VE..L..GLLTLHMQL.P..R.VFGDSLgg............tkRDQYLSNVAL.......KVNTK..........LGGV.N.....HML.E....DSA.M-........-......A..W....L...R...K.....K.K..T.M..................................MVGIDVTHPSPLS..............kEGTP..SIAAVVASVD...D...N.F.V...Q....F.P.....A.SL..R...IQ.....T..........S.......K....K...EM......LDE....LSD.................. [...]
+B0E0C2_LACBS/610-916               ...........................................................................................sf-VLVLLEN..RDNYI..YPGIKRI.CD...VE..L..GIHTVHMQL.G..K.ALTDER...............kQDQYFSNVAL.......KVNTK..........LGGM.N....hLLE.P....N--.-A........M......N..W....L...T...K.....K.K..T.M..................................MVGIDVTHPGPNS..............rEGTP..SIAAVVANVD...D...N.F.V...Q....F.P.....A.SL..R...IQ.....Q..........H.......S....K...KE......MLD...eLRD.................. [...]
+B8PBB9_POSPM/331-616               ............................................................................................l-LIVMLPW..RKRQL..YAAIKYY.TD...VV..L..GIHTAHILL.P..K.AHGD--................--GYLSSLAL.......KLNAK..........LGGI.N.....YYL.D....DQS.I-........-......R..W....L...S...D.....R.A..N.M..................................IVGLHVRHSLPSM...............NMAW..TTAAMVSNVD...G...F.F.H...N....F.P.....A.HL..E...VT.....V..........D.......F....Q...K-......--P...dVGR.................. [...]
+B8PFP7_POSPM/371-656               ............................................................................................l-LIVMLPW..RKRQL..YAAIKYY.TD...VV..L..GIHTAHILL.P..K.AHGD--................--GYLSSLAL.......KLNAK..........LGGV.N.....YYL.D....DQS.I-........-......R..W....L...S...D.....R.A..D.M..................................IVGLHVRHSPPST...............EMVW..TTAATVSNVD...G...F.F.H...N....F.P.....A.RL..K...VA.....V..........E.......F....Q...K-......--P...dVGR.................. [...]
+B8PN24_POSPM/140-415               ............................................................................................l-LIVMLPW..RKRQL..YAAIKYY.TD...VV..L..GIHTAHILL.P..K.AHGD--................--GYLSSLAL.......KLNAK..........LGGV.N.....YYL.D....DQS.I-........-......R..W....L...S...D.....R.A..D.M..................................IVGLHVRHSPPST...............EMVW..TTAAMVSNVD...G...F.F.H...N....F.P.....A.RL..K...VA.....V..........E.......F....Q...K-......--P...dVGR.................. [...]
+A2DXK9_TRIVA/462-624               .............................................................................................FIICVLPD..GNSQL..YSTLKIF.LT...SS..L..GIPSSFVTD.E..S.LVANKQ...............sMDQIATDMCL.......SIICK..........TGGV.P....fY-V.S....PVS.LP........L......-..-....-...-...-.....R.N..T.V..................................FAGFEVSQTNVAAva..........sydN---..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+A1D5I6_NEOFI/71-143                ..........................................................................................iey--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+B2VW51_PYRTR/606-910               ............................................................................................f-LFALLPS..DNTVL..YDSIKLL.FD...CK..L..GLPSVCCIG.S..K.FAKL--................DPHYFANVAM.......KFNQK..........LGGV.N.....HTV.P....LAK.LA........-......-..-....P...L...D.....A.Q..T.I..................................IFGIDVTHPSPGS..............sQTAP..SIAGVVASVD...A...K.F.S...Q....Y.A.....A.SM..R...TQ.....A..........R.......R....V...EM......VAE....LEE.................. [...]
+Q0UNU9_PHANO/666-973               ............................................................................................f-LFVILPS..DNAVL..YDCIKFV.CD...CK..L..GVPNICNIG.S..K.FSKEKG................QMQYFANVAM.......KFNQK..........LGGV.N.....HT-.V....ELK.RM........A......P..-....-...L...D.....P.Q..T.I..................................LFGIDVTHPSPGS..............sDSAP..SVAGVVASVD...S...L.F.S...Q....F.P.....A.SM..R...TQ.....R..........G.......R....Q...EM......VEE....LEE.................. [...]
+B8PJA4_POSPM/353-665               ............................................................................................l-ILAFLPV..NAPDI..RRRIKHW.GD...VD..K..GVPTQCLRA.G..K.WERA--................RDQYINNVALnsrpqitRINAK..........LGGV.N.....SAI.N....A-K.LL........-......-..-....-...-...P.....Q.C..T.M..................................VIGADVGHPGPGI...............MNRP..SVTSLVASVD...P...D.A.T...K....Y.T.....T.YA..S...VQ.....A..........P.......R....V...EI......IQD....LEQ.................. [...]
+B0DLH7_LACBS/515-821               ............................................................................................i-LVVILPD..EAATI..LHTVKFW.GD...VK..Y..GILTQCVRA.D..K.LLKA--................NDQYWNNVAL.......KLNAR..........LGGL.N.....YHA.S....GSR.T-........I......N..D....L...K...K.....E.P..Y.I..................................IMGADVGHPGPRV...............-RKP..SVTSLVFSLD...M...H.A.T...K....Y.A.....S.MC..R...IQ.....N..........P.......R....Q...EV......IQD....LRE.................. [...]
+A8NFX5_COPC7/531-721               .............................................................................................MLVVILPE..DALNL..KAKVKYF.GD...IT..H..GVPTQCLRV.S..K.LLDPKSrrlk........qprqLNQYFNNVAL.......KINAR..........LRGV.N....vMLE.S....KIP.GG........S......P..LailsT...Q...G.....R.K..T.M..................................IIGVDVSHPGPGV...............TNRP..SVASLVFSLY...Q...G.G.A...Q....Y.A.....A.TT..T...IQ.....K..........P.......R....L...EK......VEQ....LAS.................. [...]
+A8NFX0_COPC7/514-795               ............................................................................................m-LIVLLPS..EAAHL..RTEVKYW.GD...AV..N..GVKTQCLRF.G..K.TMN---................-NQYCNNVAL.......KVES-..........-GKA.L.....REF.A....NDD.R-........-......-..-....-...-...-.....-.-..-.-..................................---ADIGHPGAGI...............RNKP..SVSGLVFSIS...Q...F.A.T...E....Y.A.....A.IT..R...IQ.....P..........P.......R....V...EA......IVD....LEE.................. [...]
+A8PFS7_COPC7/454-749               ....................................................................fvvvlpqggdeirigvkhfgnfinp--------..-----..-------.--...--..-..GIATQCLKG.F..Q.CRGA--................RPQYWANVMI.......QVNGK..........LGGI.-.....HAV.P....NST.TS........G......S..L....V...D...E....aI.A..T.M..................................LIGADVTHPPPGDq.............sKHKP..SFAAIVWSWD...R...H.Y.A...R....Y.R.....A.RD..S...IQ.....R..........G.......R....E...EI......IQH....MKP.................. [...]
+A8NXQ6_COPC7/547-849               ............................................................................................l-IVVVLPDgpVANEI..YSQVKFF.GD...VK..M..GVHTQCMRA.M..R.CFGG--................NNQYFANIAL.......KLNAR..........LGGV.Nv...aPDL.S....DGV.SR........N......L..L....S...P...P.....N.K..T.L..................................VMGADVIHPSPGS...............EGRP..SFTAVVGSTD...C...N.M.T...R....F.V.....S.ST..R...AQ.....T..........S.......R....E...EI......IDD....LKD.................. [...]
+A8P6A7_COPC7/477-803               ............................................................................................l-IFAVLPP..NSGDI..YTGVKRF.GD...VT..M..GIATQCLLS.N..K.CKKG--................NHQYWANVTL.......KVNVK..........LGGI.N....fY--.P....ELR.GD........I......-..L....D...P...A.....K.P..T.I..................................IMGADAIHPPPGV...............RDKP..SVTALVSSID...S...K.L.A...R....Y.V.....A.TS..R...VQ.....K..........Gsds.gkgG....R...EI......ILD....MED.................. [...]
+B0CXE0_LACBS/567-880               .............................................................................................LIVVILPD..GGDDI..YTAVKHF.GD...VT..M..GVATQCLLA.K..K.CYRA--................NAQYWANVML.......KVNVK..........LDGI.Ns...vPDL.P....SLT.DP........-......-..-....-...-...A.....H.P..T.I..................................IMGADVIHPAPGT...............EGRP..SFTALVASVD...T...T.V.S...K....Y.V.....A.MS..R...VQ.....T..........G.......R....Q...EM......IDD....LED.................. [...]
+A8PFQ6_COPC7/458-767               ............................................................................................l-VVVILPE..GGDEI..YTSVKHF.GD...IV..R..GVATQCLIG.R..K.CSRA--................RPQYWANVLL.......KVNVK..........LGGI.N.....SII.D....PSG.SP........L......-..A....D...P...A.....N.P..T.V..................................VMGADVIHPAPGS...............EGRP..SFTALVSSVD...T...H.A.T...K....Y.I.....A.CN..N...VQ.....E..........G.......R....T...EI......IED....LEA.................. [...]
+B0CYG1_LACBS/553-863               .............................................................................................LIVVVLPE..GGNDI..YTAVKHF.GD...IT..M..GVATQCMKS.S..K.CFRA--................KPQYYANISL.......KINVK..........LGGI.N.....TI-.P....D-P.SS........V......S..V....L...T...Dp...hQ.P..T.I..................................VMGADVIHPAPGS...............DGRP..SFTALVANVD...S...D.T.A...K....Y.I.....A.DS..R...VQ.....T..........S.......R....Q...EM......IEE....LQA.................. [...]
+B0D2D0_LACBS/417-738               ............................................................................................l-IVAVLPD..NVGDL..YSTIKHH.GD...IR..F..GVATQCLKS.H..K.CSRA--................KEQYWKNVML.......KVNVK..........LGGI.N.....VVP.S....STE.LS........D......P..A....-...-...-.....N.P..T.Ivigtpsai..................iasiltfcLSGADTAHPAPGA...............HDRP..SFTSVVANVD...S...N.V.A...K....Y.V.....A.ST..R...VQ.....K..........G.......R....Q...EI......ITD....LKE.................. [...]
+B2RFN0_OIKDI/550-850               ...........................................................................................fa--LVILPR..RDSHI..YSIVKEK.AE...LV..F..GVVTQCVQS.R..N.VERA--................NAMFYGNLLQ.......KINVK..........LGGV.N.....TKV.V....NRI.Q-........-......-..-....L...F...T.....K.P..I.M..................................IVGLSFSHPAPGS...............-RNP..SIVTASFSCD...A...S.G.T...K....Y.F.....V.GK..R...LQ.....S..........S.......R....F...SL......ATG....IKD.................. [...]
+C5K8K7_9ALVE/727-977               ...............................................................................aftlerseavggfw--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..-IASAVGSVD...N...D.V.N...L....Y.A.....T.AS..S...VQ.....D..........T.......G....T...RI......LD-....IET.................. [...]
+B9Q8Q1_TOXGO/379-692               ............................................................................................l-LFVILNE..RVSLD..IYQIVKS.-C...TD..V..NFPSQCLNG.R..H.KCIDAIfrg..........dnpNPQYFANVMS.......KVNMK..........LQGV.N.....QTL.E....ADI.IK........Q......E..I....G...T...D.....K.S..T.L..................................VLAVETSFFANPTkt..........sppPTAP..IVCACTGNMD...D...D.L.G...A....F.G.....H.AV..C...VE.....S..........R.......K....H...PI......VTD....IGS.................. [...]
+Q1L1E2_TOXGO/161-474               ............................................................................................l-LFVILNE..RVSLD..IYQIVKS.-C...TD..V..NFPSQCLNG.R..H.KCIDAIfrg..........dnpNPQYFANVMS.......KVNMK..........LQGV.N.....QTL.E....ADI.IK........Q......E..I....G...T...D.....K.S..T.L..................................VLAVETSFFANPTkt..........sppPTAP..IVCACTGNMD...D...D.L.G...A....F.G.....H.AV..C...VE.....S..........R.......K....H...PI......VTD....IGS.................. [...]
+B6KA84_TOXGO/379-692               ............................................................................................l-LFVILNE..RVSLD..IYQIVKS.-C...TD..V..NFPSQCLNG.R..H.KCIDAIfrg..........dnpNPQYFANVMS.......KVNMK..........LQGV.N.....QTL.E....ADI.IK........Q......E..I....G...T...D.....K.S..T.L..................................VLAVETSFFANPTkt..........sppPTAP..IVCACTGNMD...D...D.L.G...A....F.G.....H.AV..C...VE.....S..........R.......K....H...PI......VTD....IGS.................. [...]
+Q1L2C9_TOXGO/379-692               ............................................................................................l-LFVILNE..RVSLD..IYQIVKS.-C...TD..V..NFPSQCLNG.R..H.KCIDAIfrg..........dnpNPQYFANVMS.......KVNMK..........LQGV.N.....QTL.E....ADI.IK........Q......E..I....G...T...D.....K.S..T.L..................................VLAVETSFFANPTkt..........sppPTAP..IVCACTGNMD...D...D.L.G...A....F.G.....H.AV..C...VE.....S..........R.......K....H...PI......VTD....IGS.................. [...]
+D2JRZ7_TOXGO/582-895               ............................................................................................l-LFVILNE..RVSLD..IYQIVKS.-C...TD..V..NFPSQCLNG.R..H.KCIDAIfrg..........dnpNPQYFANVMS.......KVNMK..........LQGV.N.....QTL.E....ADI.IK........Q......E..I....G...T...D.....K.S..T.L..................................VLAVETSFFANPTkt..........sppPTAP..IVCACTGNMD...D...D.L.G...A....F.G.....H.AV..C...VE.....S..........R.......K....H...PI......VTD....IGS.................. [...]
+B9PJN3_TOXGO/379-693               ............................................................................................l-LFVILNE..RVSLD..IYQIVKS.-C...TD..V..NFPSQCLNG.R..H.KCIDAIfrg.........adnpNPQYFANVMS.......KVNMK..........LQGV.N.....QTL.E....ADI.IK........Q......E..I....G...T...D.....K.S..T.L..................................VLAVETSFFANPTkt..........sppPTAP..IVCACTGNMD...D...D.L.G...A....F.G.....H.AV..C...VE.....S..........R.......K....H...PI......VTD....IGS.................. [...]
+Q1L2C8_TOXGO/379-693               ............................................................................................l-LFVILNE..RVSLD..IYQIVKS.-C...TD..V..NFPSQCLNG.R..H.KCIDAIfrg.........adnpNPQYFANVMS.......KVNMK..........LQGV.N.....QTL.E....ADI.IK........Q......E..I....G...T...D.....K.S..T.L..................................VLAVETSFFANPTkt..........sppPTAP..IVCACTGNMD...D...D.L.G...A....F.G.....H.AV..C...VE.....S..........R.......K....H...PI......VTD....IGS.................. [...]
+Q4PLA9_PICGL/597-913               ............................................................................................f-LLCILPE.rKNSDL..YGPWKRK.FL...AD..L..GVINQCIAP.P..N.MRKV--................NDQYLTNVAL.......KINAK..........VGGL.N....sVLS.V....EFA.HK........I......P..K....I...S...T.....K.P..T.I..................................IIGMDVSHGSPGH...............ADSP..SISAVVSSRE..wP...L.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IEA...lYKPlpsg.............. [...]
+A5BG74_VITVI/577-717               .............................................................................................FILCILPQ.kKNCDI..YGPWKRQ.CL...SG..C..GVPTQCIAP.S..T.PVV---................NDQYLTNLLL.......KINAK..........LGGL.N....sLLT.M....GYC.PS........L......R..L....I...S...T.....I.P..T.L..................................ILGMDVSHGSPGR...............ADVP..SIAAVVSSRH..wP...S.I.S...Q....Y.R.....A.TV..R...TQ.....S..........P.......K....L...EM......IDS....L--.................. [...]
+AGO16_ORYSJ/535-844                ............................................................................................f-LLCVLPE.rKNCDL..YGPWKKK.NL...HE..M..GIITQCIVP.S..V.--KM--................NDQYYTNVLL.......KINAK..........LGGM.N....sKLS.L....EHR.HM........I......P..I....V...N...Q.....T.P..T.L..................................ILGMDVSHGSPGR...............ADVP..SIAAVVGSRC..wP...L.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IDS...lFKPlddg.............. [...]
+B8B4Z4_ORYSI/515-824               ............................................................................................f-LLCVLPE.rKNCDL..YGPWKKK.NL...HE..M..GIITQCIVP.S..V.--KM--................NDQYYTNVLL.......KINAK..........LGGM.N....sKLS.L....EHR.HM........I......P..I....V...N...Q.....T.P..T.L..................................ILGMDVSHGSPGR...............ADVP..SIAAVVGSRC..wP...L.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IDS...lFKPlddg.............. [...]
+B9FWI9_ORYSJ/515-824               ............................................................................................f-LLCVLPE.rKNCDL..YGPWKKK.NL...HE..M..GIITQCIVP.S..V.--KM--................NDQYYTNVLL.......KINAK..........LGGM.N....sKLS.L....EHR.HM........I......P..I....V...N...Q.....T.P..T.L..................................ILGMDVSHGSPGR...............ADVP..SIAAVVGSRC..wP...L.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IDS...lFKPlddg.............. [...]
+C0P9X1_MAIZE/1-253                 .....................................................................................mnsklale--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....-HR.QM........I......P..V....V...T...Q.....I.P..T.L..................................ILGMDVSHGSPGR...............ADIP..SIAAVVGSRC..wP...L.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IDS...lFKPlddg.............. [...]
+C5YU43_SORBI/1-285                 ............................................................................................m--------..-----..-------.--...--..-..GIVTQCIAP.S..N.--KM--................NDQYFTNVLL.......KINAK..........LGGM.N....sKLA.L....EHR.QM........I......P..V....V...T...Q.....I.P..T.L..................................ILGMDVSHGSPGR...............ADIP..SIAAVVGSRC..wP...L.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IDS...lFKPlddg.............. [...]
+O48771_ARATH/542-860               .............................................................................................FILCILPE.rKTSDI..YGPWKKI.CL...TE..E..GIHTQCICP.I..K.I-----................SDQYLTNVLL.......KINSK..........LGGI.N....sLLG.I....EYS.YN........I......P..L....I...N...K.....I.P..T.L..................................ILGMDVSHGPPGR...............ADVP..SVAAVVGSKC..wP...L.I.S...R....Y.R.....A.AV..R...TQ.....S..........P.......R....L...EM......IDS...lFQPiente............. [...]
+B9T7B0_RICCO/516-824               .............................................................................................FILCVLPE.rKNSDI..YGPWKKK.CL...SD..F..GIVTQCISP.F..K.I-----................NDQYLTNVLL.......KINSK..........LGGI.N....sLLE.I....EHS.KQ........I......R..L....I...M...D.....T.P..T.M..................................ILGMDVSHGARGC...............SDIP..SVAAVVGSRY..wP...L.I.S...R....Y.R.....A.CV..R...TQ.....S..........P.......K....V...EM......IDA....LFKltdd.............. [...]
+B9IAL0_POPTR/521-830               .............................................................................................FILCVLAE.rKNSDI..YGPWKKT.SL...SD..F..GIVTQCISP.T..K.I-----................NDQYLTNVLL.......KINSK..........LGGI.N....sLLA.I....EHS.SH........I......P..L....I...M...D.....T.P..T.M..................................ILGMDVSHGSPGR...............SDMP..SVAAVVGSRC..wP...L.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IDA...lYKPlang.............. [...]
+A5CB61_VITVI/15-305                ............................................................................................f-LLCVLPE.kKNSEI..YGPWKKR.SL...SD..F..GIVTQCISP.T..K.I-----................NDQYLTNVLL.......KINTK..........LGGT.N....sLLA.I....EHT.SR........I......P..L....I...K...D.....T.P..T.M..................................ILGMDVSHGSPGQ...............ADVP..SIAAVVGSRC..wP...L.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IDA...lYKPlang.............. [...]
+Q3E984_ARATH/528-708               ............................................................................................f-LLCILEK..KNSDV..YEKSCSM.WN...CE..C..IVPPQNL--.-..-.------................NDQYLTNLLL.......KINAK..........LGGL.N....sVLD.M....ELS.GT........M......P..L....V...M...R.....V.P..T.I..................................IIGMDVSHGSPGQ..............sDHIP..SIAAVVSSRE..wP...L.I.S...K....Y.R.....A.CV..R...TQ.....S..........P.......K....V...EM......IDS...lFKPvsdk.............. [...]
+Q56X15_ARATH/234-541               ............................................................................................f-LLCILAE.rKNSDV..YGPWKKK.NL...VD..L..GIVTQCIAP.T..R.L-----................NDQYLTNVLL.......KINAK..........LGGL.N....sLLA.M....ERS.TA........M......P..K....V...T...Q.....V.P..T.I..................................IVGMDVSHGSPGQ...............SDIP..SIAAVVSSRQ..wP...L.I.S...K....Y.K.....A.CV..R...TQ.....S..........R.......K....M...EM......IDN...lFKPvng............... [...]
+Q84VQ0_ARATH/546-853               ............................................................................................f-LLCILAE.rKNSDV..YGPWKKK.NL...VD..L..GIVTQCIAP.T..R.L-----................NDQYLTNVLL.......KINAK..........LGGL.N....sLLA.M....ERS.PA........M......P..K....V...T...Q.....V.P..T.I..................................IVGMDVSHGSPGQ...............SDIP..SIAAVVSSRQ..wP...L.I.S...K....Y.K.....A.CV..R...TQ.....S..........R.......K....M...EM......IDN...lFKPvng............... [...]
+Q84YI4_ARATH/550-857               ............................................................................................f-LLCILAE.rKNSDV..YGPWKKK.DL...VD..L..GIVTQCIAP.T..R.L-----................NDQYLTNVLL.......KINAK..........LGGL.N....sLLA.M....ERS.PA........M......P..K....V...T...Q.....V.P..T.I..................................IVGMDVSHGSPGQ...............SDIP..SIAAVVSSRQ..wP...L.I.S...K....Y.K.....A.CV..R...TQ.....S..........R.......K....M...EM......IDN...lFKPvng............... [...]
+Q9ZVD5_ARATH/577-885               .............................................................................................FILCVLPD.kKNSDL..YGPWKKK.NL...TE..F..GIVTQCMAP.T..R.QPND--................--QYLTNLLL.......KINAK..........LGGL.N....sMLS.V....ERT.PA........F......T..V....I...S...K.....V.P..T.I..................................ILGMDVSHGSPGQ...............SDVP..SIAAVVSSRE..wP...L.I.S...K....Y.R.....A.SV..R...TQ.....P..........S.......K....A...EM......IES...lVKKngt............... [...]
+AGO4A_ORYSJ/557-865                ............................................................................................f-LLCVLAE.rKNSDI..YGPWKRK.CL...AE..F..GIITQCVAP.T..R.V-----................NDQYITNVLL.......KINAK..........LGGL.N....sLLQ.I....ETS.PS........I......P..L....V...S...K.....V.P..T.I..................................ILGMDVSHGSPGQ...............SDIP..SIAAVVSSRE..wP...L.V.S...K....Y.R.....A.SV..R...SQ.....S..........P.......K....L...EM......IDG...lFKPqgaq.............. [...]
+B8ACN1_ORYSI/524-832               ............................................................................................f-LLCVLAE.rKNSDI..YGPWKRK.CL...AE..F..GIITQCVAP.T..R.V-----................NDQYITNVLL.......KINAK..........LGGL.N....sLLQ.I....ETS.PS........I......P..L....V...S...K.....V.P..T.I..................................ILGMDVSHGSPGQ...............SDIP..SIAAVVSSRE..wP...L.V.S...K....Y.R.....A.SV..R...SQ.....S..........P.......K....L...EM......IDG...lFKPqgaq.............. [...]
+A2ZRR6_ORYSJ/650-958               ............................................................................................f-LLCVLAE.rKNSDI..YGPWKRK.CL...AE..F..GIITQCVAP.T..R.V-----................NDQYITNVLL.......KINAK..........LGGL.N....sLLQ.I....ETS.PS........I......P..L....V...S...K.....V.P..T.I..................................ILGMDVSHGSPGQ...............SDIP..SIAAVVSSRE..wP...L.V.S...K....Y.R.....A.SV..R...SQ.....S..........P.......K....L...EM......IDG...lFKPqgaq.............. [...]
+C0HGZ0_MAIZE/552-859               ............................................................................................f-LLCVLAE.rKNSDI..YGPWKKK.CL...AE..F..GIVTQCVAP.T..R.V-----................NDQYLTNVLL.......KINAK..........LGGL.N....sLLQ.I....ETS.PA........I......P..L....V...S...K.....V.P..T.I..................................ILGMDVSHGSPGH...............SDIP..SVAAVVSSRE..wP...L.I.S...K....Y.R.....A.SV..R...TQ.....S..........P.......K....M...EM......IDS...lFKPret............... [...]
+B4FL08_MAIZE/45-352                ............................................................................................f-LLCVLAE.rKNSDI..YGPWKKK.CL...AE..F..GIVTQCVAP.T..R.V-----................NDQYLTNVLL.......KINAK..........LGGM.N....sLLQ.I....ETS.PA........I......P..L....V...S...K.....V.P..T.I..................................ILGMDVSHGSPGH...............SDVP..SIAAVVSSRE..wP...L.I.S...K....Y.R.....A.SV..R...TQ.....S..........P.......K....M...EM......IDS...lFKPrea............... [...]
+C5YX36_SORBI/564-870               ............................................................................................f-LMCLLPE.rKNCEV..YGPWKRK.CL...AE..F..GIVTQCLAP.T..R.VN----................-DPYLLNLLM.......KINAK..........LGGL.N....sLLQ.V....EAS.PS........I......P..H....V...S...E.....V.P..T.I..................................ILGMDVSHGHPGQ...............-DRP..SVAAVVSSRQ..wP...L.I.S...K....Y.R.....A.SV..H...TQ.....S..........A.......R....L...EM......MSS...lFKPrgt............... [...]
+B8AUX7_ORYSI/565-872               ............................................................................................f-LLCLLPE.rKNCEV..YGPWKRK.CL...AE..F..GIVTQCLAP.Q..R.V-----................NDQYLLNLLL.......KINAK..........LGGI.N....sLLQ.I....EAS.PS........I......P..L....V...S...K.....T.P..T.I..................................ILGMDVSHGQPGQ...............SDRP..SIAAVVSSRQ..wP...L.I.S...K....Y.R.....A.SV..H...TQ.....S..........P.......K....L...EM......MSS...lFKPrgt............... [...]
+AGO4B_ORYSJ/565-872                ............................................................................................f-LLCLLPE.rKNCEV..YGPWKRK.CL...AE..F..GIVTQCLAP.Q..R.V-----................NDQYLLNLLL.......KINAK..........LGGI.N....sLLQ.I....EAS.PS........I......P..L....V...S...K.....T.P..T.I..................................ILGMDVSHGQPGQ...............SDRP..SIAAVVSSRQ..wP...L.I.S...K....Y.R.....A.SV..H...TQ.....S..........P.......K....L...EM......MSS...lFKPrgt............... [...]
+Q01MP5_ORYSA/565-872               ............................................................................................f-LLCLLPE.rKNCEV..YGPWKRK.CL...AE..F..GIVTQCLAP.Q..R.V-----................NDQYLLNLLL.......KINAK..........LGGI.N....sLLQ.I....EAS.PS........I......P..L....V...S...K.....T.P..T.I..................................ILGMDVSHGQPGQ...............SDRP..SIAAVVSSRQ..wP...L.I.S...K....Y.R.....A.SV..H...TQ.....S..........P.......K....L...EM......MSS...lFKPrgt............... [...]
+B9EV67_ORYSJ/22-172                .........................................................................cgisiaqeftqvaarvlpap--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+B8ACN0_ORYSI/540-670               .....................................................................................aceflane--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+AGO15_ORYSJ/546-853                ............................................................................................f-VLCVLPE.rKNCDI..YGPWKRM.CL...VK..Y..GIVTQCLAP.T..K.I-----................NDQYLTNVLL.......KINAK..........LGGL.N....sLLQ.I....ERN.QA........I......P..L....L...S...K.....T.P..T.I..................................ILGMDVSHGSPGR...............DDVP..SVAAVVSSLE..wP...L.I.S...K....Y.K.....A.SV..C...TQ.....S..........P.......R....L...EM......IDS....LFKlvgn.............. [...]
+B9HK80_POPTR/565-884               ............................................................................................f-LLCILPE.rKNSDI..YGPWKRK.NL...SD..L..GIVTQCIAP.T..K.V-----................NDQYLTNVLL.......KINAKvefcnvipfeLGGM.N....sLLS.I....EHA.PS........I......P..L....V...S...K.....L.P..T.L..................................ILGMDVSHGSPGH...............SDVP..SIAAVVSSRH..wP...L.I.S...R....Y.R.....A.SV..R...TQ.....S..........Q.......K....V...EM......IAN...lFKPvagt.............. [...]
+B9SP45_RICCO/574-882               ............................................................................................f-LLCLLPE.rKNSDL..YGPWKKK.NL...SD..F..GIVTQCIAP.Q..R.V-----................NDQYLTNVLL.......KINAK..........LGGL.N....sMLA.V....EHS.PS........I......P..L....V...S...K.....V.P..T.I..................................IIGMDVSHGSPGH...............SDVP..SIAAVVSSRQ..wP...L.I.S...R....Y.R.....A.CV..R...TQ.....S..........P.......K....V...EM......IDS...lYKPvsdt.............. [...]
+Q2LFC1_NICBE/558-866               ............................................................................................f-LLCLLPE.rKNCDI..YGPWKRK.NL...AE..F..GIVTQCIAP.T..R.V-----................NDQYITNVLL.......KINAK..........LGGL.N....sMLT.V....EHA.PA........I......P..M....V...S...K.....V.P..T.I..................................ILGMDVSHGSPGQ...............SDVP..SIAAVVSSRQ..wP...S.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IDN...lFKRasdt.............. [...]
+Q2LFC2_NICBE/565-873               ............................................................................................f-LLCLLPE.rKNCDI..YGPWKRK.NL...AD..Y..GIVTQCLAP.G..R.V-----................NDQYLTNLLL.......KINAK..........LGGL.N....sVLA.I....EHS.PS........I......P..M....V...S...K.....V.P..T.M..................................ILGMDVSHGSPGQ...............SDVP..SIAAVVSSRQ..wP...S.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IDN...lFKKvsdt.............. [...]
+A5AMR1_VITVI/53-183                .......................................................................................lptllh--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+B9SN14_RICCO/570-878               ............................................................................................f-LLSIFPD.rKNSDI..YGPWKRK.NL...AE..F..GIFNQCLCS.P..N.RL----................SEMYVTNVLM.......KINAK..........LGGL.N....tFLA.V....EQS.RN........V......P..F....V...S...K.....V.P..T.I..................................IFGMDVSHGSPGQ...............SDVP..SIAAVVSSRN..wP...L.L.S...R....Y.R.....A.SV..H...SQ.....S..........P.......K....V...EM......IDS...lFKPegk............... [...]
+B9HDH5_POPTR/582-891               ............................................................................................f-LVCLLPD.rKNSDI..YGPWKRK.NL...AE..Y..GIFNQCLAP.T..R.V-----................NEQYILNVLL.......KINAK..........LGGL.N....sLLA.M....EQS.RN........I......P..F....V...S...K.....V.P..T.I..................................IFGMDVSHGSPGQ...............SDMP..SIAAVVSSRN..wP...L.L.S...R....Y.R.....A.SV..R...SQ.....S..........P.......K....V...EM......VDS....LFTltpdk............. [...]
+B9IHG7_POPTR/573-882               ............................................................................................f-LVCLLPD.rKNSDI..YGPWKRK.NL...AE..Y..GIFNQCLAP.T..R.V-----................NDQYILNVLL.......KINAK..........LGGL.N....sLLA.M....EQS.RN........I......P..F....V...S...K.....V.P..T.I..................................IFGMDVSHGSPGQ...............SDIP..SIAAVVSSRN..wP...L.L.S...R....Y.R.....A.SV..R...SQ.....S..........P.......K....V...EM......VDS....LFKltadk............. [...]
+A9SKW0_PHYPA/518-721               ............................................................................................f-ILVALPTdsSSSNL..YVAFKRY.FE...MR..I..GVISQCMIK.P..R.QF----................NPQYLWNLVL.......KINQK..........MEGF.N....sPLT.S....KIT.S-........-......-..C....L...G...G.....A.P..T.I..................................IFGIDVSHGSIGE...............-NFP..SVAAVVATKN..wP...D.V.F...H....F.A.....T.RA..G...TQ.....Q..........S.......K....L...KL......IEG....LWEpksamvn........... [...]
+A9RNH7_PHYPA/593-893               .............................................................................................FILVILPD..KDSPI..YVPFKRF.CE...MK..I..GVVSQCMVK.P..R.QLND--................--QYLGNLAL.......KINLK..........MGGF.N....sPLS.P....R--.--........M......V..S....C...L...G.....P.S..T.I..................................IFGMDVSHGSPGE...............SSVP..SIAAVVATKN..wP...D.V.F...H....Y.S.....T.QV..R...IQ.....P..........A.......K....T...EM......IEG....LHDsk................ [...]
+A9SRY5_PHYPA/573-879               .............................................................................................FILAILAE..KDSPI..YVPFKRL.CE...IR..L..GIISQCMVK.P..R.TLND--................--QFLGNLAL.......KINLK..........MGGL.N.....SPL.S....QRM.L-........-......-..H....C...L...G.....Q.S..T.I..................................IFGMDVTHGSPGD...............VEIP..SIAAVVATKN..wP...E.V.F...H....Y.S.....T.QV..K...VQ.....P..........A.......R....M...EM......IQG....LYEpe................ [...]
+A9U2A5_PHYPA/597-903               .............................................................................................FILVILSD..KDSPI..YAPFKRF.CE...MK..I..GIISQCMVK.P..R.QI----................NDQYLGNLAL.......KINLK..........MGGF.N.....SPL.S....R--.-R........M......L..T....C...L...G.....E.S..T.I..................................IFGMDVSHGSPGD...............LSVP..SIAAVVATKN..wP...E.V.F...H....Y.S.....T.QV..R...TQ.....P..........P.......K....M...EM......ITG....LYEpk................ [...]
+A9SKW0_PHYPA/722-774               .........................................................................................ttts--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+A9TD99_PHYPA/2-180                 ................................................................................emieglhiegkgg--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+A8JAG8_CHLRE/672-990               ............................................................................................l-VLVVLPE..KTADE..YREVKRV.SD...IE..L..GIPSQVVVA.S..K.ARVGYRah...........kggGPQYCANVAM.......KINNK..........LGGV.N.....VQL.S....GGL.RN........M......P..V....L...GgagA.....V.P..F.M..................................VLGADVTHPTGAAar...........adSRDP..SVAAVVASLD...A...S.L.G...R....W.A.....S.RV..L...LQ.....A..........G.......R....Q...EV......ITG....MCG.................. [...]
+A8J9T3_CHLRE/1058-1164             .......................................................................................fmvlga--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+A8J0N0_CHLRE/619-933               .............................................................................................MVMVVLPD.rGGVGL..YDAIKAA.GD...GK..L..GVATQCVNP.A..K.AGLVGPkas..........sgpSFSYAAQLAL.......SVNAK..........LGGA.-.....TTR.P....AGR.PNd......wL......P..L....L...G...G.....R.R..L.Mvggrgpg....................rlearlgLSGALLSRGYRGAa............qvSAGV..EYAAVVGSAD...S...H.A.V...D....Y.R.....V.QL..S...AQ.....V..........A.......G....N...R-......---....---.................. [...]
+A8J0M9_CHLRE/675-993               .............................................................................................MVMVVLPD.rGGVGL..YDAIKAA.GD...GK..L..GVATQCVNP.A..K.AGLVGPkas..........sgpSFSYAAQLAL.......SVNAK..........LGGA.-.....TTR.P....AGR.P-........-......-..-....-...-...-.....N.G..E.L..................................ALALPRTRRTRVQ..............vSAGV..EYAAVVGSAD...S...H.A.V...D....Y.R.....V.QL..S...AQ.....V..........A.......G....N..rDI......VVS....MRE.................. [...]
+D0MT95_PHYIN/497-796               ............................................................................................f-LLVILPA..KNSPV..YGDVKRM.SD...TV..L..GLPSQCIAS.Q..N.LPRA--................NPQFCANVCL.......KINMK..........LNGK.N.....AVL.R....D--.-P........L......P..L....I...S...S.....E.P..T.I..................................IIGADVEHPRSGM...............GGRP..SIAAVVASMD...R...Y.S.A...Q....Y.A.....A.RV..A...AQ.....K..........A.......S....S...D-......IQQ....LPN.................. [...]
+D0MT54_PHYIN/891-1191              ............................................................................................q-LIMVIKQ.dKSVGS..YSDIKRM.SD...TV..L..GIPSQCIVS.Q..N.VRSA--................KPQYCANVCL.......KINMK..........LSGK.N.....SIL.R....E--.-P........L......P..L....V...S...T.....A.P..T.I..................................IIGADVEHPRSGM...............GSRP..SIASVVASLD...R...Y.S.A...K....Y.V.....A.RV..A...AQ.....K..........A.......S....S...DI......-QL....LPH.................. [...]
+D0MT94_PHYIN/524-824               ............................................................................................q-LILVIKQ.dKGSVS..YGRIKRM.SD...TV..L..GIPSQCIVA.T..N.LRKA--................NPQVCANVCL.......KMNMK..........LSGK.N.....SVL.R....E--.-P........L......P..L....I...S...T.....C.P..T.I..................................VIGADVEHPRSGM...............GSRP..SIASVVASMD...A...Y.S.A...K....Y.I.....G.RV..A...AQ.....K..........A.......A....N...D-......IQQ....LPH.................. [...]
+Q8H714_PHYIN/1-173                 .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+D0N1C0_PHYIN/587-890               ....................................................................................qiiwminvr--------..MDAHA..YGELKLM.SD...SEagV..GILSQCMLS.K..H.IPKC--................NPQYIANILM.......KVNTK..........LGGR.N.....GVI.S....---.GQ........L......P..L....V...S...A.....S.R..T.I..................................IFGADVTHPSPMD...............RSRP..SIAAVTASMD...A...N.F.I...R....H.A.....S.AI..R...AQ.....G..........H.......R....V...EQ......IMN....LKD.................. [...]
+D0N1B9_PHYIN/587-890               .....................................................................................qiiwminp-------R..MDAHA..YGELKLM.SD...SEagV..GILSQCMLS.K..H.IPKC--................NPQYIANILM.......KVNTK..........LGGR.N.....GVI.S....---.GQ........L......P..L....V...S...A.....S.R..T.I..................................IFGADVTHPSPMD...............RSRP..SIAAVTASMD...A...N.F.I...R....H.A.....S.AI..R...AQ.....G..........H.......R....V...EQ......IMN....LKD.................. [...]
+AGO1_ARATH/676-997                 ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TE..L..GIVSQCCLT.K..H.VFKM--................SKQYMANVAL.......KINVK..........VGGR.N....tVLV.D....ALS.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.I.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lFKEwkdpqk............ [...]
+Q3ECU7_ARATH/678-999               ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TE..L..GIVSQCCLT.K..H.VFKM--................SKQYMANVAL.......KINVK..........VGGR.N....tVLV.D....ALS.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.I.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lFKEwkdpqk............ [...]
+A9T6J3_PHYPA/524-842               ............................................................................................l-LIAILPD..NNGSL..YGDLKKQ.CE...TV..L..GVVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALS.RR........I......P..L....V...S...D.....K.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....T..........H.......R....Q...EL......IAD...lFKEytdpmk............ [...]
+A9RG03_PHYPA/598-919               ............................................................................................l-LIAILPD..NNGPL..YGDLKKQ.CE...TV..L..GVVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALS.RK........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPHPGE...............DFSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKEwkdpqk............ [...]
+A9RTW5_PHYPA/744-1065              ............................................................................................l-LIAILPD..NNGPL..YGDLKKQ.CE...TV..L..GVVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RK........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKEwrdpqk............ [...]
+PINH_ARATH/625-946                 ............................................................................................l-LLAILPD..NNGSL..YGDLKRI.CE...TE..L..GLISQCCLT.K..H.VFKI--................SKQYLANVSL.......KINVK..........MGGR.N....tVLV.D....AIS.CR........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPENGE...............ESSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwqdpvr............ [...]
+B0FHH7_BRANA/614-935               ............................................................................................l-LLAILPD..NNGSL..YGDLKRI.CE...TE..L..GLISQCCLT.K..H.VFKI--................SKQYLANVSL.......KINVK..........MGGR.N....tVLL.D....AIS.CR........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPENGE...............ESSP..SIGAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwqdpvr............ [...]
+B9RTJ1_RICCO/626-947               ............................................................................................l-LLAILPD..NNGTL..YGDLKRI.CE...TD..L..GLISQCCLT.K..H.VFKI--................SKQYLANVSL.......KINVK..........MGGR.N....tVLL.D....AIS.CR........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPENGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwqdpvr............ [...]
+B9HKB5_POPTR/631-952               ............................................................................................l-LLAILPD..NNGSL..YGDLKRI.CE...TD..L..GLITQCCLS.K..H.VFKI--................SKQYLANLSL.......KINVK..........MGGR.N....tVLL.D....AIS.CR........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPENGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwqdpvr............ [...]
+B9HUQ6_POPTR/452-776               ............................................................................................l-LLAILPD..NNGSL..YGDLKRI.CE...TD..L..GLLTQCCLS.K..H.VFKI--................SKQYLANVSL.......KINVK..........MGGR.N....tVLL.D....AIS.CR........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPENGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwqdpvr............ [...]
+PNH1_ORYSJ/620-941                 ............................................................................................l-LLAILPD..NNGSL..YGDIKRI.CE...TD..L..GLISQCCLT.K..H.VFKI--................SKQYLANVSL.......KINVK..........MGGR.N....tVLL.D....AIS.WR........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPETGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwhdpqr............ [...]
+B9FU05_ORYSJ/458-779               ............................................................................................l-LLAILPD..NNGSL..YGDIKRI.CE...TD..L..GLISQCCLT.K..H.VFKI--................SKQYLANVSL.......KINVK..........MGGR.N....tVLL.D....AIS.WR........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPETGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwhdpqr............ [...]
+C0PNQ0_MAIZE/1-267                 .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........MGGR.N....tVLL.D....AIS.WS........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPETGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....H.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwhdpqr............ [...]
+C5Z5J6_SORBI/617-938               ............................................................................................l-LLAILPD..NNGPL..YGDIKRI.CE...TD..L..GLITQCCLT.K..H.VFKI--................SKQYLANVSL.......KINVK..........MGGR.N....tVLL.D....AIS.WR........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPETGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwhdpqr............ [...]
+B9STN2_RICCO/586-907               ............................................................................................l-LIAILPD..SNGSL..YGDLKRI.CE...TD..L..GLISQCCLT.K..H.VFKI--................NRQYLANVSL.......KINVK..........MGGR.N....tVLL.D....AIS.WR........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPESGE...............DISP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....P..........H.......R....Q...EL......IQD...lFKTwqdpqq............ [...]
+A5ARQ9_VITVI/592-892               ............................................................................................l-LIAILPD..NNGSL..YGDLKRI.CD...TD..L..GLISQCCLT.K..N.VYKI--................SNQYLANVSL.......KINVK..........MGGR.N....tVLL.D....ALS.SG........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPETGD...............DSCP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD....---.................. [...]
+A1E5M2_PEA/696-1017                ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TD..L..GVVSQCCLT.K..H.VFKM--................NKQYLANVSL.......KINVK..........VGGR.N....tVLV.D....ALS.RR........I......P..I....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.I.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lFKQwqdpvr............ [...]
+Q2PEW1_TRIPR/1-247                 ............................................................................................d--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lFKQwqdpar............ [...]
+A1E5M3_PEA/726-1047                ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TD..L..GVVSQCCLT.K..H.VFKM--................SKQYLANVSL.......KINVK..........VGGR.N....tVLV.D....ALS.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.I.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lFKQwqdpvr............ [...]
+Q2LFC4_NICBE/678-999               ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TE..L..GIVSQCCLT.K..H.VFKM--................SKQYLANVSL.......KINVK..........VGGR.N....tVLV.D....ALS.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.I.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lYKTwqdpvr............ [...]
+B9SJV6_RICCO/687-1008              ............................................................................................l-LIVILPD..NNGSL..YGELKRI.CE...TD..L..GLVSQCCLT.K..H.VFRM--................NKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALS.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lFKEwqdpvr............ [...]
+B9I4Y6_POPTR/688-1009              ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....AIS.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwqdpvr............ [...]
+B9N365_POPTR/308-629               ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALS.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwqdpvr............ [...]
+B8B2X0_ORYSI/647-968               ...........................................................................................ll--IGLLPD..NNGSL..YGDLKRI.CE...ID..L..GLVSQCCCT.K..Q.VFKM--................NKQILANLAL.......KINVK..........VGGR.N....tVLV.D....AVS.RR........I......P..L....V...T...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....S..........H.......R....Q...EL......IDD....LYNithdph............ [...]
+AGO1D_ORYSJ/669-990                ...........................................................................................ll--IGLLPD..NNGSL..YGDLKRI.CE...ID..L..GLVSQCCCT.K..Q.VFKM--................NKQILANLAL.......KINVK..........VGGR.N....tVLV.D....AVS.RR........I......P..L....V...T...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....S..........H.......R....Q...EL......IDD....LYNithdph............ [...]
+B9FR04_ORYSJ/644-965               ...........................................................................................ll--IGLLPD..NNGSL..YGDLKRI.CE...ID..L..GLVSQCCCT.K..Q.VFKM--................NKQILANLAL.......KINVK..........VGGR.N....tVLV.D....AVS.RR........I......P..L....V...T...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....S..........H.......R....Q...EL......IDD....LYNithdph............ [...]
+C5Z2L1_SORBI/643-964               ............................................................................................l-LIGILPD..NNGSL..YGDLKRI.CE...ID..L..GLVSQCCCA.K..Q.VFKM--................NKQILANLAL.......KINVK..........VGGR.N....tVLA.D....AVS.RR........I......P..L....V...T...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....S..........H.......R....Q...EL......IED....LYKvvhdpq............ [...]
+C5XWS2_SORBI/656-978               ............................................................................................l-LIGILPD..NNGSL..YGDLKRV.CE...ID..L..GIVSQCCCT.K..Q.VFKMNN................-KQILANLAL.......KINVK..........VGGR.N....tVLV.D....AVS.RG........I......P..L....V...T...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IED....LYKvwqdpq............ [...]
+B8AFI6_ORYSI/637-958               ............................................................................................l-LIGILPD..NNGSL..YGDLKRV.CE...ID..L..GIVSQCCCT.K..Q.VFKM--................NKQILANLAL.......KINVK..........VGGR.N....tVLV.D....AVS.RR........I......P..L....V...T...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IED....LYKiwqdpq............ [...]
+AGO1C_ORYSJ/638-959                ............................................................................................l-LIGILPD..NNGSL..YGDLKRV.CE...ID..L..GIVSQCCCT.K..Q.VFKM--................NKQILANLAL.......KINVK..........VGGR.N....tVLV.D....AVS.RR........I......P..L....V...T...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IED....LYKiwqdpq............ [...]
+Q2LFC3_NICBE/604-925               ............................................................................................l-LVVILPD..NNGSL..YGDLKRI.CE...TE..L..GVVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....AIS.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.I.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD....LYTtrqdpv............ [...]
+B1B5A8_DAUCA/736-1057              ............................................................................................l-LIAILPD..NNGSL..YGDLKRI.CE...TD..L..GVISQCCLA.K..H.VFRM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALS.WR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.S.....G.LV..C...AQ.....A..........H.......R....Q...EI......IQD....LYTtwqdpn............ [...]
+C5YY05_SORBI/736-1058              ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKANK................-QQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....V.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....T..........H.......R....Q...EL......IQD...lFKVyqdpqr............ [...]
+B4FGY3_MAIZE/13-335                ............................................................................................l-LIVILPD..NNGSL..YGDVKRI.CE...TN..L..GLVSQCCLT.K..H.VFKVNK................-QQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALA.RR........I......P..L....V...S...D.....I.A..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwqdper............ [...]
+B8AGF0_ORYSI/693-1014              ............................................................................................l-LIAILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwkdpqr............ [...]
+B9F1L3_ORYSJ/693-1014              ............................................................................................l-LIAILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwkdpqr............ [...]
+AGO1A_ORYSJ/709-1030               ............................................................................................l-LIAILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwkdpqr............ [...]
+C5YE15_SORBI/712-1033              ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwqdpqr............ [...]
+C0HEU9_MAIZE/87-408                ............................................................................................l-LIVILPD..INGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwqdpqr............ [...]
+B9FC11_ORYSJ/374-695               ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwqdphr............ [...]
+AGO1B_ORYSJ/746-1067               ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwqdphr............ [...]
+B8AT34_ORYSI/729-1050              ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwqdphr............ [...]
+C7J0V9_ORYSJ/1-271                 .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-INVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwqdphr............ [...]
+AGO17_ORYSJ/514-834                ............................................................................................l-LIVILPN..NNGSL..YGDVKRI.CE...TD..I..GLISQCCLA.K..H.VLKM--................NKWYLASVAL.......KINAK..........MGGR.N....tVLV.D....ALE.MR........L......P..H....V...R...D.....T.P..T.I..................................VFGAHVTHPHPGK...............ANSS..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LI..S...VQ.....A..........C.......H....Q...ES......IQG...lFKVqddper............ [...]
+B8AII3_ORYSI/514-834               ............................................................................................l-LIVILPN..NNGSL..YGDVKRI.CE...TD..I..GLISQCCLA.K..H.VLKM--................NKWYLASVAL.......KINAK..........MGGR.N....tVLV.D....ALE.MR........L......P..H....V...R...D.....T.P..T.I..................................VFGAHVTHPHPGK...............ANSS..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LI..S...VQ.....A..........C.......H....Q...ES......IQG...lFKVqddper............ [...]
+C5WPM0_SORBI/900-1216              ............................................................................................l-LIIILPD..-MSGF..YGRIKRL.CE...TE..L..GLITQCCAP.K..N.VRKG--................GNQYLENLSL.......KINVK..........VGGR.N....tVLD.D....ALN.RR........I......P..L....L...T...D.....C.P..T.I..................................VFGADVTHPSPGE...............SSSP..SIAAVVASMD..wP...Q.V.T...K....Y.K.....C.LV..S...SQ.....G..........H.......R....V...EI......ING...lYTEvrdpqk............ [...]
+AGO12_ORYSJ/693-1012               ...........................................................................................ql-LIVILTE..-ISGS..YGRIKRI.CE...TE..V..GVITQCCAP.K..S.LQKG--................GKQYLENLAL.......KMNVK..........VGGR.N....tVLE.D....ALH.KK........I......P..I....L...T...D.....R.P..T.I..................................VFGADVTHPSPGE...............DASP..SIAAVVASMD..wP...E.V.T...K....Y.K.....C.LV..S...TQ.....S..........H.......R....E...EI......ISN...lYTEvkdplk............ [...]
+B9FAL8_ORYSJ/438-757               ...........................................................................................ql-LIVILTE..-ISGS..YGRIKRI.CE...TE..V..GVITQCCAP.K..S.LQKG--................GKQYLENLAL.......KMNVK..........VGGR.N....tVLE.D....ALH.KK........I......P..I....L...T...D.....R.P..T.I..................................VFGADVTHPSPGE...............DASP..SIAAVVASMD..wP...E.V.T...K....Y.K.....C.LV..S...TQ.....S..........H.......R....E...EI......ISN...lYTEvkdplk............ [...]
+A2XKQ7_ORYSI/654-972               ............................................................................................l-LIVILPE..-ISGS..YGRIKRI.CE...TE..V..GVITQCCAP.K..S.LQKG--................GKQYLENLAL.......KMNVK..........VGGR.N....tVLE.D....ALH.KK........I......P..I....L...T...D.....R.P..T.I..................................VFGADVTHPSPGE...............DASP..SIAAVVASMD..wP...E.V.T...K....Y.K.....C.LV..S...TQ.....S..........H.......R....E...EI......ISN...lYTEvkdplk............ [...]
+C5WPM1_SORBI/697-1047              ............................................................................................l-LIVVLPD.aNASFF..YGRIKRL.CE...TE..L..GIITQCCIP.K..N.VHKG--................GRQYLQNLAL.......KINVK..........VGGR.N....tVLE.D....ALN.RR........I......H..L....L...T...D.....L.P..T.I..................................IFGADVTHPAPGE...............DASP..SIAAVVASMD..wP...E.V.S...K....Y.R.....C.LV..S...SQ.....G..........H.......R....E...EI......IAD...lFTQvkdpqkgllhggmirhae [...]
+C0PMV6_MAIZE/89-412                ............................................................................................l-LIVVLPD.aNASVF..YGRIKRL.CE...TE..L..GLVTQCCQP.K..N.VFKG--................GRQYLQNLAL.......KINVK..........VGGR.N....tVLE.D....ALN.RR........I......H..L....L...T...D.....L.P..T.I..................................IFGADVTHPAPGE...............DASP..SIAAVVASMD..wP...Q.V.A...K....Y.R.....C.LV..S...SQ.....G..........H.......R....E...EI......ITD...lFTQvkdpqk............ [...]
+B8APJ4_ORYSI/9-101                 ..................................................................................ykcsvssqshr--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+B9FEW4_ORYSJ/531-767               .............................................................................anatvfygrikrlcet--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....E...L...D.....M.P..T.M..................................IFGADVTHPPAGE...............DSSP..SIAAVVASMD..wP...E.V.S...K....Y.K.....C.SV..S...SQ.....S..........H.......R....E...EI......IAD...lFTEvkdsqn............ [...]
+AGO11_ORYSJ/541-848                ............................................................................................l-LVIVLPD..ANATV.fYGRIKRL.CE...TE..L..GVITQCCLA.R..N.VQNV--................----------.......-----..........-GGR.N....tVLE.D....ALH.RR........I......P..L....L...T...D.....M.P..T.M..................................IFGADVTHPPAGE...............DSSP..SIAAVVASMD..wP...E.V.S...K....Y.K.....C.SV..S...SQ.....S..........H.......R....E...EI......IAD...lFTEvkdsqn............ [...]
+B9MTL4_POPTR/505-810               ...........................................................................................qi-LIIILPD..-VSGS..YGTIKRV.CE...TE..L..GIVSQCCQP.K..Q.ARKC--................SPQYLENVAL.......KINVK..........AGGR.N....tVLE.D....ALN.RR........I......P..L....L...S...D.....T.P..T.I..................................IFGADVTHPQPGE...............DSSP..SIAAIVASMD..wP...E.V.T...T....Y.R.....G.LV..S...AQ.....K..........H.......R....Q...EI......IQD....CAG.................. [...]
+B9SCN8_RICCO/632-949               ............................................................................................l-LIIILPD..-ISGS..YGIIKRV.CE...TE..L..GIVSQCCQP.R..Q.AAKL--................SKQYFENVAL.......KINVK..........VGGR.N....tVLN.D....AVQ.RR........I......P..L....V...T...D.....C.P..T.I..................................IFGADVTHPPPGE...............DSSP..SIAAVVASMD..wP...E.V.T...K....Y.R.....G.IV..S...AQ.....A..........H.......R....E...EI......IQD...lYKSfqdpqg............ [...]
+AGOL_ARATH/638-958                 ............................................................................................l-LIVILPD..-VTGS..YGKIKRI.CE...TE..L..GIVSQCCQP.R..Q.VNKL--................NKQYMENVAL.......KINVK..........TGGR.N....tVLN.D....AIR.RN........I......P..L....I...T...D.....R.P..T.I..................................IMGADVTHPQPGE...............DSSP..SIAAVVASMD..wP...E.I.N...K....Y.R.....G.LV..S...AQ.....A..........H.......R....E...EI......IQD....LYKlvqdpq............ [...]
+B9HQS2_POPTR/635-955               ............................................................................................l-LIIILPD..-VTGS..YGKIKRV.CE...TE..L..GIVSQCCQP.Q..Q.AKKL--................SKQYMENVAL.......KINVK..........AGGR.N....tVLN.D....AFH.RR........I......P..L....L...T...D.....V.P..T.I..................................VFGADVTHPQAGE...............DAGP..SIAAVVASMD..wP...E.V.T...K....Y.R.....G.LV..S...AQ.....A..........H.......R....E...EI......IED...lYKKyqdpkk............ [...]
+B9GEQ1_POPTR/548-869               ...........................................................................................ql-LIIILPD..-FSGS..YGKIKRI.CE...TE..L..GIVSQCCQP.Q..Q.AKKL--................SKQYLENVAL.......KINVK..........AGGR.N....tVLN.D....AIQ.RR........I......P..N....V...T...D.....L.P..T.I..................................IFGADVTHPQPGE...............DSSP..SIAAVVASMD..wP...E.V.T...K....Y.R.....G.LV..S...AQ.....A..........H.......R....E...EI......IQD...lYKKyqdpqk............ [...]
+B8ALC4_ORYSI/596-877               ................................................................................yvfsprnmtilch--------..-----..-------.--...--..-..---------.-..-.------................----------.......---NQ..........VGGR.Nt...vLER.A....FIR.NG........I......P..F....V...S...E.....V.P..T.I..................................IFGADVTHSPPGE...............DSAS..SIAAVVASMD..wP...E.I.T...K....Y.R.....G.LV..S...AQ.....S..........H.......R....Q...EI......IED....LFSvgkdpv............ [...]
+AGO13_ORYSJ/471-770                ..........................................................................................qll--IVILLE..-VSGS..YGKIKRV.CE...ND..L..GIVSQCCLP.R..H.ASRP--................NKQYLENVAL.......KINVK..........KSQQ.-.....---.S....S--.L-........-......-..-....-...-...-.....-.-..-.-..................................---VLMSHTPPGE...............DSAS..SIAAVVASMD..wP...E.I.T...K....Y.R.....G.LV..S...AQ.....S..........H.......R....Q...EI......IED....LFSvgkdpv............ [...]
+B9F6E0_ORYSJ/564-783               .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----VVASMD..wP...E.I.T...K....Y.R.....G.LV..S...AQ.....S..........H.......R....Q...EI......IED....LFSvgkdpv............ [...]
+MEL1_ORYSJ/696-1016                ............................................................................................l-LIVILPE..-VSGS..YGKIKRV.CE...TD..L..GIVSQCCLP.R..H.ASRP--................NKQYLENVAL.......KINVK..........VGGR.Nt...vLER.A....FIR.NG........I......P..F....V...S...E.....V.P..T.I..................................IFGADVTHPPPGE...............DSAS..SIAAVVASMD..wP...E.I.T...K....Y.R.....G.LV..S...AQ.....P..........H.......R....Q...EI......IED....LFSvgkdpv............ [...]
+B8ALC8_ORYSI/696-1016              ............................................................................................l-LIVILPE..-VSGS..YGKIKRV.CE...TD..L..GIVSQCCLP.R..H.ASRP--................NKQYLENVAL.......KINVK..........VGGR.Nt...vLER.A....FIR.NG........I......P..F....V...S...E.....V.P..T.I..................................IFGADVTHPPPGE...............DSAS..SIAAVVASMD..wP...E.I.T...K....Y.R.....G.LV..S...AQ.....P..........H.......R....Q...EI......IED....LFSvgkdpv............ [...]
+A3ANP6_ORYSJ/644-982               ............................................................................................l-LIVILPE..-VSGS..YGKIKRV.CE...TD..L..GIVSQCCLP.R..H.ASRP--................NKQYLENVAL.......KINVK..........VGGR.Nt...vLER.A....FIR.NG........I......P..F....V...S...E.....V.P..T.I..................................IFGADVTHPPPGE...............DSAS..SIAAVVASMD..wP...E.I.T...K....Y.R.....G.LV..S...AQ.....P..........H.......R....Q...EI......IED....LFSvgkdpv............ [...]
+C5WX38_SORBI/703-1025              ............................................................................................l-LIVILPD..-VSGS..YGKIKRV.CE...TD..I..GIVSQCCLP.K..H.ASRP--................NKQYLENVAL.......KINVK..........VGGR.Nt...vLER.A....FVR.NG........I......P..F....V...S...E.....V.P..T.I..................................IFGADVTHPPPGE...............DSAS..SIAAVVASMD..wP...E.I.T...K....Y.R.....G.LV..S...AQ.....P..........H.......R....Q...EI......IED...lFTVtkdlqk............ [...]
+C5WX34_SORBI/1-43                  ............................................................................................g--------..-----..--KIKRV.CE...TD..I..GIVSQCCLM.K..H.DCRP--................NKIFLENISL.......KNNAK..........V---.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+B7ZZW2_MAIZE/663-969               ............................................................................................l-LIVILPD..-VTGY..YGEIKRM.CE...TD..L..GIVSQCINP.K..K.N--R--................NKQYFENLAL.......KINVK..........AGGR.Nt...vLER.A....SVP.NG........I......P..F....V...S...D.....V.P..T.I..................................IFGADVTHPTAGE...............ESSA..SVGAVVASMD..wP...Q.V.T...T....Y.K.....A.LV..S...AQ.....A..........H.......R....E...EI......IQN....LGG.................. [...]
+Q7FS89_MAIZE/11-170                ..................................................................................crgmalaagtv--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----VVASMD..wP...Q.V.T...T....Y.K.....A.LV..S...AQ.....A..........H.......R....E...EI......IQN....LGG.................. [...]
+Q8S478_MAIZE/38-188                ...........................................................................................hk--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----VVASMD..wP...Q.V.T...T....Y.K.....A.LV..S...AQ.....A..........H.......R....E...EI......IQN....LGG.................. [...]
+C5XBU2_SORBI/675-995               ............................................................................................l-LIVVLPD..-VSGH..YGKIKRI.CE...TD..L..GIVSQCINP.K..K.NKN---................-KQYFENVAL.......KINVK..........VGGR.Nt...vLER.A....FVP.NG........I......P..F....V...S...D.....V.P..T.I..................................IFGADVTHPTAGE...............DSSA..SIAAVVASMD..wP...Q.V.T...T....Y.K.....A.LV..S...AQ.....A..........H.......R....E...EI......IQN...lFWTgtdpek............ [...]
+C5X6M9_SORBI/1-69                  ........................................................................................ntfcl--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....K.P..T.I..................................IFGADAIHPTAGE...............DSSA..FITAVVESME..rP...Q.V.M...T....Y.K.....A.LA..S...AQ.....K..........H.......R....E...EM......IHN...lL--.................. [...]
+B9FVX3_ORYSJ/462-794               ............................................................................................l-LIVILPD..-VNGY..YGRIKRV.CE...TE..L..GIVSQCLKP.G..RkLLSL--................DRQFLENVSL.......KINVK..........AGGR.Ns...vLQR.P....LVP.G-........-......-..-....G...L...E.....N.T..T.I..................................IFGADVTHPASGE...............DSSA..SIAAVVASMD..wP...E.I.T...K....Y.K.....A.LV..S...AQ.....P..........P.......R....Q...EI......IQD....LFTmtevaqnadapaq..... [...]
+AGO14_ORYSJ/677-1009               ............................................................................................l-LIVILPD..-VNGY..YGRIKRV.CE...TE..L..GIVSQCLKP.G..RkLLSL--................DRQFLENVSL.......KINVK..........AGGR.Ns...vLQR.P....LVP.G-........-......-..-....G...L...E.....N.T..T.I..................................IFGADVTHPASGE...............DSSA..SIAAVVASMD..wP...E.I.T...K....Y.K.....A.LV..S...AQ.....P..........P.......R....Q...EI......IQD....LFTmtevaqnadapaq..... [...]
+B8B7Y0_ORYSI/653-985               ............................................................................................l-LIVILPD..-VNGY..YGRIKRV.CE...TE..L..GIVSQCLKP.G..RkLLSL--................DRQFLENVSL.......KINVK..........AGGR.Ns...vLQR.P....LVP.G-........-......-..-....G...L...E.....N.T..T.I..................................IFGADVTHPASGE...............DSSA..SIAAVVASMD..wP...E.I.T...K....Y.K.....A.LV..S...AQ.....P..........P.......R....Q...EI......IQD....LFTmtevaqnadapaq..... [...]
+Q0DZI9_ORYSJ/119-248               ...................................................................................qstgqksphi--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....E.LI..S...AQ.....L..........E.......R....Q...EI......IGG....LFHstrdpk............ [...]
+B8AFF9_ORYSI/534-832               ............................................................................................l-LIVILPE..-ERGN..YGKIKRV.CE...TK..L..GLVSQCCLP.K..N.VKTDTN................-IKYLENIAL.......KINVK..........VGGR.Nt...vLQQ.A....FVH.NG........I......P..F....V...S...D.....I.P..T.I..................................IFGADVSHPPPGM...............-YSS..SIAGVVGSID..wP...E.V.T...T....Y.R.....A.VI..S...AQ.....L..........E.......R....Q...EI......IGG....---.................. [...]
+B9F134_ORYSJ/36-347                ............................................................................................l-LIVILPE..-ERGN..YGKIKRV.CE...TK..L..GLVSQCCLP.K..N.VKTDTN................-IKYLENIAL.......KINVK..........VGGQ.Nt...vLQQ.A....FVH.NG........I......P..F....V...S...D.....I.P..T.I..................................IFGADVSHPPPGMwld........qstgQKSP..HIELISAQL-...-...E.R.Q...E....I.I.....G.GL.fH...ST.....R..........D.......P....K...GC......LKP....-DG.................. [...]
+Q0DZI9_ORYSJ/36-107                ............................................................................................l-LIVILPE..-ERGN..YGKIKRV.CE...TK..L..GLVSQCCLP.K..N.VKTDTN................-IKYLENIAL.......KINVK..........T---.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+Q0DZJ0_ORYSJ/35-101                ........................................................................................rakre--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+B9FX53_ORYSJ/672-981               ...........................................................................................ll-LVVMTDD.kNNASL..YGDVKRI.CE...TE..I..GVLSQCCRA.K..Q.VYKERN................-VQYCANVAL.......KINAK..........AGGR.N.....SVF.L....NVE.AS........L......P..V....V...S...K.....S.P..T.I..................................IFGADVTHPGSFD...............ESTP..SIASVVASAD..wP...E.V.T...K....Y.N.....S.VV..R...MQ.....A..........S.......R....K...EI......IQD....LDS.................. [...]
+AGO18_ORYSJ/747-1056               ...........................................................................................ll-LVVMTDD.kNNASL..YGDVKRI.CE...TE..I..GVLSQCCRA.K..Q.VYKERN................-VQYCANVAL.......KINAK..........AGGR.N.....SVF.L....NVE.AS........L......P..V....V...S...K.....S.P..T.I..................................IFGADVTHPGSFD...............ESTP..SIASVVASAD..wP...E.V.T...K....Y.N.....S.VV..R...MQ.....A..........S.......R....K...EI......IQD....LDS.................. [...]
+B8B5Y3_ORYSI/745-1054              ...........................................................................................ll-LVVMTDD.kNNASL..YGDVKRI.CE...TE..I..GVLSQCCRA.K..Q.VYKERN................-VQYCANVAI.......KINAK..........AGGR.N.....SVF.L....NVE.AS........L......P..V....V...S...K.....S.P..T.I..................................IFGADVTHPGSFD...............ESTP..SIASVVASAD..wP...E.V.T...K....Y.N.....S.LV..R...MQ.....A..........S.......R....K...EI......IQD....LDS.................. [...]
+C5X8G4_SORBI/699-1002              ............................................................................................l-LLAILPE..KNGNL..YGNFKRI.CE...TE..I..GIMSQCCLD.K..N.VRSA--................GPPYFANVAI.......KINAK..........FGGR.N.....LEF.A....NPK.ES........L......P..V....V...S...I.....E.P..T.I..................................IFGADVTHPAALD...............DTAP..SIASVVASQD..wP...T.V.A...N....Y.N.....G.IA..R...AQ.....G..........H.......R....K...EL......IDG....LED.................. [...]
+C5X8G7_SORBI/41-220                ..........................................................................................ivk--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+C5WR49_SORBI/670-825               ..........................................................................................div--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+C0PDS4_MAIZE/580-888               ............................................................................................l-LLAILPD..KKDSL..YGNIKRI.CE...TD..I..GLVSQCCRR.S..R.VLVN--................NNQILANIAI.......KINAK..........VGGR.I.....SVF.D....DVQ.KS........L......P..V....V...S...N.....K.P..T.I..................................IFGAHVSHPSVVD..............gSTGP..SIASVVASQD...W...H.E.V...S....K.Y.....N.GV..V...RA.....Q..........G.......H....T...EE......IGG....LED.................. [...]
+C5WR49_SORBI/585-661               ............................................................................................l-LLAILPD..KNGSL..YGNIKRI.CE...TD..I..GLVSQCCRR.S..N.VFTE--................NSQILANIAI.......KINAK..........VVAS.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+B7ZXH7_MAIZE/580-736               ............................................................................................l-LLAILPD..KKDSL..YGNIKRI.CE...TD..I..GLVSQCCRR.S..R.VLVN--................NNQILANIAI.......KINAK..........VGGR.I.....SVF.D....DVQ.KS........L......P..V....V...S...N.....K.P..T.I..................................IFGAHVSHPSVVD..............gSTGP..SIASVVASQD...W...H.E.V...S....K.Y.....N.GV..V...RA.....Q..........G.......H....T...EE......IGG....LED.................. [...]
+A5BG29_VITVI/774-895               ........................................................................................dlgam--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+A5BW27_VITVI/926-1238              ...........................................................................................ql-LICIMER..-KHKG..YADLKRI.AE...TS..I..GVVSQCCLY.Q..N.LGKS--................SSQFLANLAL.......KINAK..........MGGC.T....vALY.N....SLP.SQ........I......PrlL....R...P...D.....E.P..V.I..................................FMGADVTHPHPLD...............DFSP..SIAAVVGSMN..wP...A.A.N...K....Y.V.....S.RM..R...SQ.....T..........H.......R....Q...EI......IQD....LGA.................. [...]
+B9S921_RICCO/670-981               ...........................................................................................ql-LICIMEK..-RHKG..YADLKRI.AE...TS..V..GVVSQCCLF.P..N.LGKL--................SSQFLANLAL.......KINAK..........VGGC.T....vALF.N....SLP.SQ........I......PrlL....H...S...D.....D.P..V.I..................................FMGADVTHPHPLD...............DFSP..SVAAVVGSMN..wP...A.A.N...K....Y.A.....S.RM..R...SQ.....T..........H.......R....Q...EI......IQD....LGA.................. [...]
+B9HXP0_POPTR/520-831               ...........................................................................................ql-LICVMEK..-KHKG..YADLKRI.AE...TS..V..GVVTQCCLY.L..N.LGKL--................SSQFLANLAL.......KINAK..........VGGC.T....vALY.N....SLP.SQ........I......PrlL....R...S...N.....E.P..V.I..................................FMGADVTHPHPLD...............DISP..SVAAVVGSMN..wP...A.A.N...K....Y.V.....S.RM..R...SQ.....T..........H.......R....Q...EI......IQD....LGE.................. [...]
+B9IL53_POPTR/1-160                 .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.M..................................FMGADVTHPCPLE...............DISP..SAAAVVGSMN..wP...A.A.N...K....Y.V.....S.RM..R...SQ.....T..........H.......R....Q...EI......IWD....LGA.................. [...]
+D3GBV1_LOTJA/669-981               ............................................................................................l-LICVMER..-KHKG..YADLKRI.AE...TS..I..GLISQCCLY.P..N.LCKL--................SSQFLANLAL.......KINAK..........VGGC.T....vALY.N....SLP.SQ........L......PrlF....H...I...D.....E.P..V.I..................................FMGADVTHPHPLD...............DSSP..SVAAVVGSMN..wP...T.A.N...K....Y.I.....S.RI..R...SQ.....T..........H.......R....Q...EI......IQD....LGP.................. [...]
+Q9C793_ARATH/649-950               ............................................................................................l-IICVMEK..-KHKG..YGDLKRI.SE...TR..I..GVVTQCCLY.P..N.ITKL--................SSQFVSNLAL.......KINAK..........IGGS.M....tELY.N....SIP.SH........I......PrlL....R...P...D.....E.P..V.I..................................FMGADVTHPHPFD...............DCSP..SVAAVVGSIN..wP...E.A.N...R....Y.V.....S.RM..R...SQ.....T..........H.......R....Q...EI......IQD....LDL.................. [...]
+A3AJI1_ORYSJ/584-892               ............................................................................................l-LICVMER..-RHQG..YADLKRI.AE...TS..I..GVVTQCCLY.S..N.LSKL--................TSQFLTNLAL.......KINAK..........LGGC.N....iALY.S....SFP.CQ........I......PriF....L...S...E.....E.P..V.M..................................FMGADVTHPHPLD...............DSSP..SVVAVVASMN..wP...S.A.N...K....Y.I.....S.RM..R...SQ.....T..........H.......R....K...EI......IEQ....LDV.................. [...]
+AGO7_ORYSJ/709-1017                ............................................................................................l-LICVMER..-RHQG..YADLKRI.AE...TS..I..GVVTQCCLY.S..N.LSKL--................TSQFLTNLAL.......KINAK..........LGGC.N....iALY.S....SFP.CQ........I......PriF....L...S...E.....E.P..V.M..................................FMGADVTHPHPLD...............DSSP..SVVAVVASMN..wP...S.A.N...K....Y.I.....S.RM..R...SQ.....T..........H.......R....K...EI......IEQ....LDV.................. [...]
+A2YQ96_ORYSI/716-1024              ............................................................................................l-LICVMER..-RHQG..YADLKRI.AE...TS..I..GVVTQCCLY.S..N.LSKL--................TSQFLTNLAL.......KINAK..........LGGC.N....iALY.S....SFP.CQ........I......PriF....L...S...E.....E.P..V.M..................................FMGADVTHPHPLD...............DSSP..SVVAVVASMN..wP...S.A.N...K....Y.I.....S.RM..R...SQ.....T..........H.......R....K...EI......IEQ....LDV.................. [...]
+D0EYF3_MAIZE/683-995               ............................................................................................l-LICVMER..-RHRG..YADLKRI.AE...TS..I..GVLTQCCLY.S..N.LSKL--................SFQFLANLAL.......KINAK..........LGGC.N....vALY.N....SLP.CQ........I......P..R....Vf.sD...E.....E.P..A.M..................................FMGADVTHPHPLD...............DSSP..SVVAVVASMN..wP...S.A.N...K....Y.I.....S.RM..R...SQ.....T..........H.......R....K...EI......IER....LDV.................. [...]
+C5WVP1_SORBI/688-996               ............................................................................................l-LICVMER..-RHRG..YADLKRI.AE...TS..I..GVLTQCCLY.S..N.LSKL--................SFQFLANLAL.......KINAK..........VGGS.N....vALY.N....SLP.CQ........I......P..R....Vf.sD...K.....E.P..V.M..................................FMGADVTHPHPLD...............DSSP..SVVAVVASMN..wP...S.A.N...K....Y.I.....S.RM..R...SQ.....T..........H.......R....K...EI......IER....LDV.................. [...]
+A3AXD9_ORYSJ/720-1023              ....................................................................................llfcpmlnr--------..--CHG..YKTLKLM.CE...TE..L..GIQTQCFLS.T..A.AKLDEK...............rQDQYITNLAL.......KINGK..........IGGS.N.....MQL.D....P--.DS........I......P..V....V...S...A.....K.D..F.M..................................FIGADVNHPPPGNv.............sKDIP..SIAAVVASVD...K...G.A.S...K....Y.V.....T.RI..R...AQ.....Y..........H.......R....C...EM......IQN....LGD.................. [...]
+A2XXJ0_ORYSI/688-991               ....................................................................................llfcpmlnr--------..--CHG..YKTLKLM.CE...TE..L..GIQTQCFLS.T..A.AKLDEK...............rQDQYITNLAL.......KINGK..........IGGS.N.....MQL.D....P--.DS........I......P..V....V...S...A.....K.D..F.M..................................FIGADVNHPPPGNv.............sKDIP..SIAAVVASVD...K...G.A.S...K....Y.V.....T.RI..R...AQ.....Y..........H.......R....C...EM......IQN....LGD.................. [...]
+AGO3_ORYSJ/720-1023                ....................................................................................llfcpmlnr--------..--CHG..YKTLKLM.CE...TE..L..GIQTQCFLS.T..A.AKLDEK...............rQDQYITNLAL.......KINGK..........IGGS.N.....MQL.D....P--.DS........I......P..V....V...S...A.....K.D..F.M..................................FIGADVNHPPPGNv.............sKDIP..SIAAVVASVD...K...G.A.S...K....Y.V.....T.RI..R...AQ.....Y..........H.......R....C...EM......IQN....LGD.................. [...]
+Q00RR5_ORYSA/745-1048              ....................................................................................llfcpmlnr--------..--CHG..YKTLKLM.CE...TE..L..GIQTQCFLS.T..A.AKLDEK...............rQDQYITNLAL.......KINGK..........IGGS.N.....MQL.D....P--.DS........I......P..V....V...S...A.....K.D..F.M..................................FIGADVNHPPPGNv.............sKDIP..SIAAVVASVD...K...G.A.S...K....Y.V.....T.RI..R...AQ.....Y..........H.......R....C...EM......IQN....LGD.................. [...]
+B9FCH7_ORYSJ/626-928               ..........................................................................................qll--FCPMSD..-QHPG..YKTLKLI.CE...TQ..L..GIQTQCFLS.F..L.ANKQQG................QDQYMSNLAL.......KINGK..........IGGS.N....iQLF.G....ESL.P-........-......-..R....I...S...G.....A.P..Y.M..................................FIGADVNHPSPGN...............VESP..SIAAVVASVD...Q...G.A.S...K....Y.V.....P.RI..R...AQ.....P..........H.......R....C...EV......IQH....LGD.................. [...]
+AGO2_ORYSJ/687-989                 ..........................................................................................qll--FCPMSD..-QHPG..YKTLKLI.CE...TQ..L..GIQTQCFLS.F..L.ANKQQG................QDQYMSNLAL.......KINGK..........IGGS.N....iQLF.G....ESL.P-........-......-..R....I...S...G.....A.P..Y.M..................................FIGADVNHPSPGN...............VESP..SIAAVVASVD...Q...G.A.S...K....Y.V.....P.RI..R...AQ.....P..........H.......R....C...EV......IQH....LGD.................. [...]
+Q00RR6_ORYSA/693-995               ..........................................................................................qll--FCPMSD..-QHPG..YKTLKLI.CE...TQ..L..GIQTQCFLS.F..L.ANKQQG................QDQYMSNLAL.......KINGK..........IGGS.N....iQLF.G....ESL.P-........-......-..R....I...S...G.....A.P..Y.M..................................FIGADVNHPSPGN...............VESP..SIAAVVASVD...Q...G.A.S...K....Y.V.....P.RI..R...AQ.....P..........H.......R....C...EV......IQH....LGD.................. [...]
+A2XXI9_ORYSI/693-995               ..........................................................................................qll--FCPMSD..-QHPG..YKTLKLI.CE...TQ..L..GIQTQCFLS.F..L.ANKQQG................QDQYMSNLAL.......KINGK..........IGGS.N....iQLF.G....ESL.P-........-......-..R....I...S...G.....A.P..Y.M..................................FIGADVNHPSPGN...............VESP..SIAAVVASVD...Q...G.A.S...K....Y.V.....P.RI..R...AQ.....P..........H.......R....C...EV......IQH....LGD.................. [...]
+C5YG12_SORBI/746-1048              ..........................................................................................qll--FCPMSE..-QHPG..YKTLKLI.CD...TQ..L..GILTQCFLS.D..R.ANKPNG................QDQYMTNLAL.......KINGK..........LGGS.N.....VQL.F....DSL.PR........-......-..V....G...G...G.....A.P..F.M..................................FIGADVNHPSPGN...............VESP..SIAGVVASIN...S...G.A.N...K....Y.V.....S.RI..R...AQ.....P..........H.......R....C...EV......IQQ....LGE.................. [...]
+C0PIX4_MAIZE/1-297                 ..........................................................................................mse--------..-QHSG..YKTLKLI.CD...TQ..L..GILTQCLLS.D..R.ANNRKG................QDQYMTNLAL.......KINGK..........LGGS.N.....VQL.F....DSL.PR........-......-..V....G...G...G.....V.P..F.M..................................FIGADVNHPSPGN...............VESP..SIAAVVASVN...S...G.V.N...K....Y.V.....T.RI..R...AQ.....P..........H.......R....C...EV......IQQ....LGE.................. [...]
+Q9SHF2_ARATH/841-1145              ............................................................................................l-VLCAMTG..-KHDG..YKTLKWI.AE...TK..L..GLVTQCFLT.I..S.AIKGET...............vSDQYLANLAL.......KINAK..........VGGT.N.....VEL.V....DNI.FS........F......-..F....K...K...E.....D.K..V.M..................................FIGADVNHPAAHD...............NMSP..SIVAVVGTLN..wP...E.A.N...R....Y.A.....A.RV..K...AQ.....S..........H.......R....K...EE......IQG....FGE.................. [...]
+Q9SHF3_ARATH/665-965               ...........................................................................................tl-VLCAMSR..-KDDG..YKTLKWI.AE...TK..L..GLVTQCFLT.G..P.ATKG--................GDQYRANLAL.......KMNAK..........VGGS.N.....VEL.M....DTF.SF........-......-..F....K...K...E.....D.E..V.M..................................FIGADVNHPAARD...............KMSP..SIVAVVGTLN..wP...E.A.N...R....Y.A.....A.RV..I...AQ.....P..........H.......R....K...EE......IQG....FGD.................. [...]
+Q8GX33_ARATH/191-491               ...........................................................................................tl-VLCAMSR..-KDDG..YKTLKWI.AE...TK..L..GLVTQCFLT.G..P.ATKG--................GDQYRANLAL.......KMNAK..........VGGS.N.....VEL.M....DTF.SF........-......-..F....K...K...E.....D.E..V.M..................................FIGADVNHPAARD...............KMSP..SIVAVVGTLN..wP...E.A.N...R....Y.A.....A.RV..I...AQ.....P..........H.......R....K...EE......IQG....FGD.................. [...]
+B9SSM8_RICCO/639-934               ............................................................................................i-LVCVLPK..-EDPG..YSNLKWI.CE...TK..V..GIVTQCCLS.E..N.AFRP--................KAQFLANLAL.......KINAK..........LGGS.N.....VEL.F....KQP.QC........-......-..L....Q...S...K.....G.H..V.M..................................FIGADVNHPSSYN...............STSP..SIAAVVATMN..wP...A.A.N...Q....Y.G.....A.LI..C...PQ.....D..........H.......R....A...EK......ILK....FGD.................. [...]
+A5AFZ6_VITVI/719-1022              ...........................................................................................qi-LVCVMAR..-KDPG..YNYLKWF.CE...TN..I..GIVTQCCLS.S..P.ANKA--................NDQYLANLAL.......KMNAK..........LGGS.N.....VEL.I....DRL.PH........F......-..-....E...N...E.....G.Y..V.M..................................FVGADVNHPGAWN...............SASP..SIAAVVATVN..wP...A.V.N...R....Y.A.....A.RV..R...PQ.....L..........H.......R....T...EK......ILN....FGD.................. [...]
+A5CBU3_VITVI/601-900               ...........................................................................................qi-LVCVMAR..-RDAG..YGYLKWF.SE...TR..L..GMVTQCCLS.S..P.ANKA--................SDQYLANLAL.......KLNAK..........LGGS.N.....VEL.I....ERL.PR........F......E..-....-...G...E.....G.H..V.M..................................FIGADVNHPGSQN...............TTSP..SIAAVVATVN..wP...A.A.N...R....Y.A.....A.RI..R...PQ.....A..........H.......R....M...EK......IQN....FGA.................. [...]
+A5B8D3_VITVI/625-924               ...........................................................................................qi-LVCVMAR..-KDAG..YGYLKWF.AE...TK..L..GMVTQCCLS.R..P.ANKV--................SDHHLANLAL.......KLNAK..........LGGS.N.....VEL.I....XRL.PR........F......E..-....-...G...E.....G.H..V.M..................................FIGADVNHPGSQN...............TTSP..SIAAVVATXN..wP...A.A.N...R....Y.A.....A.RI..R...PQ.....A..........H.......R....M...EK......IQN....FGA.................. [...]
+B9NA51_POPTR/676-973               ...........................................................................................qf-LLCVMSK..-KDPG..YKYLKWI.CE...TK..V..GIVTQCCLS.R..S.ANKV--................NDQYLANIGL.......KINAK..........LGGS.N.....AEL.S....D--.-R........L......P..Y....F...G...D.....E.N..HiM..................................FIGADVNHPAARN...............TTSP..SIAAVVGTTN..wP...A.A.N...R....Y.A.....A.RV..R...PQ.....D..........H.......R....C...EK......ILN....FGD.................. [...]
+B9S3I1_RICCO/146-445               ...........................................................................................qi-LICVMSR..-KDPG..YKYLKWI.SE...TK..V..GVVTQCCLS.D..Y.ANKG--................HDQYFANLAL.......KINAK..........LGGN.N.....VEL.N....DRL.PY........F......-..-....E...G...E.....D.H..V.M..................................FLGADVNHPGSRN...............TTSP..SIAAVVATVN..wP...A.A.N...R....Y.A.....A.RV..R...PQ.....D..........H.......R....K...EK......ILN....FGD.................. [...]
+Q10P03_ORYSJ/678-756               ........................................................................................gtead--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+B9F6T7_ORYSJ/653-731               ........................................................................................gtead--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+B8AK97_ORYSI/622-700               ........................................................................................gtead--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+A9T108_PHYPA/1-169                 ............................................................................................k--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+C6XVE0_PEDHD/320-460               .....................................................................................viitnskk-------E..ESDDK..LYFSLKH.RF...TN..E..GIPCQVVTK.D..L.IINDNA................LKFSLGNIAL.......QMFAK..........AGGI.-.....PWK.M....K--.PA........T......-..-....-...-...-.....T.E..Y.L..................................IIGIGQSYNIEIT..............eD---..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+B3SEP3_TRIAD/438-734               ....................................................................rkvevlisklkkstadcgieginek--------..-----..-------.--...--..-..---NLCMQI.K..N.IDKA--................NHQFLANLAL.......KINAK..........LGGT.N.....NTI.N....QSE.L-........-......-..-....-...L...K.....K.P..T.I..................................IFGADVTHPGIGD...............QTSP..SVAAIVGSAN...I...D.L.S...H....Y.F.....H.AI..R...IQ.....E..........H.......R....K...EI......IQD....LQS.................. [...]
+A8NJ50_BRUMA/1-61                  .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+TAG76_CAEEL/660-966                .............................................................................................CIIVVLQS..KNSDI..YMTVKEQ.SD...IV..H..GIMSQCVLM.K..N.VSRP--................TPATCANIVL.......KLNMK..........MGGI.N.....SRI.V....ADK.IT........N......K..Y....L...V...D.....Q.P..T.M..................................VVGIDVTHPTQAEm.............rMNMP..SVAAIVANVD...L...L.P.Q...S....Y.G.....A.NV..K...VQ.....K..........K.......C....R...ES......VVY....LLD.................. [...]
+A8XA10_CAEBR/683-989               .............................................................................................CIIVVLQA..KNSDI..YMTVKEQ.SD...IV..H..GIMSQCVLM.K..N.VSRP--................TPATCANIVL.......KLNMK..........MGGI.N.....SRI.V....ADQ.IT........N......K..Y....L...V...D.....Q.P..T.M..................................VVGIDVTHPTQAEm.............rMNMP..SVAAIVANVD...L...L.P.Q...S....Y.G.....A.NV..K...VQ.....K..........K.......C....R...ES......VVY....LLD.................. [...]
+Q7JLZ2_CAEEL/652-958               .............................................................................................CIIVVLQS..KNSDI..YMTVKEQ.SD...IV..H..GIMSQCVLM.K..N.VSRP--................TPATCANIIL.......KLNMK..........MGGI.N.....SRI.V....ADQ.IT........N......K..Y....L...V...D.....Q.P..T.M..................................VVGIDVTHPTQAEm.............rMNMP..SVAAIVANVD...L...L.P.Q...S....Y.G.....A.NV..K...VQ.....K..........K.......C....R...ES......VVY....LLD.................. [...]
+Q21079_CAEEL/655-961               .............................................................................................CIIVVLQS..KNSDI..YMTVKEQ.SD...IV..H..GIMSQCVLM.K..N.VSRP--................TPATCANIIL.......KLNMK..........MGGI.N.....SRI.V....ADQ.IT........N......K..Y....L...V...D.....Q.P..T.M..................................VVGIDVTHPTQAEm.............rMNMP..SVAAIVANVD...L...L.P.Q...S....Y.G.....A.NV..K...VQ.....K..........K.......C....R...ES......VVY....LLD.................. [...]
+A8NGN0_BRUMA/1-135                 ...........................................................................................mq--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+C3ZN91_BRAFL/470-771               ............................................................................................l-ILVVLPG..-KTPV..YAEVKRV.GD...TM..L..GVATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGV.N....nILV.P....HIR.PR........V......F..L....-...-...-.....E.P..V.I..................................FIGADVTHPPAGD...............GRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....T..........H.......R....Q...EI......IAD....LAS.................. [...]
+C3ZQ22_BRAFL/680-848               .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+B3VCG6_STRPU/599-900               ............................................................................................l-IIVVLPG..-KTPV..YAEVKRV.GD...IL..L..GIATQCVQV.K..N.VNRT--................TAQTLSNLCL.......KIKVK..........LGGV.N....nILA.P....NIR.PR........I......-..-....-...F...S.....E.P..V.I..................................FCGADVTHPPAGD...............DKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.SV..R...IQ.....T..........H.......R....V...EI......IQD....LQA.................. [...]
+B2RFN1_OIKDI/771-1072              ............................................................................................l-IVVVLPG..-KTPV..YAEVKRV.GD...TC..L..GIATQCVQV.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....NMR.PK........I......-..-....-...F...Q.....E.P..V.I..................................FIGADVTHPPAGD...............KRKP..SIAAVVASMD...G...H.P.S...R....Y.C.....A.AV..R...VQ.....K..........H.......R....Q...EV......IDD....LSN.................. [...]
+C8TEF3_OIKDI/573-874               ............................................................................................l-IMVILPG..-RTPV..YAEVKRV.GD...TL..L..GVATQCVQV.K..N.VTKV--................TTQTLSNLCL.......KINVK..........LGGI.N....nILL.P....NAR.PR........V......-..-....-...F...N.....E.P..V.I..................................FIGADVTHPPAGD...............RRKP..SIAAVVASID...A...H.P.S...R....Y.C.....A.SV..R...VQ.....R..........H.......R....Q...EA......IED....LTN.................. [...]
+B7QCC4_IXOSC/509-810               ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAS.................. [...]
+A9NJ58_PENMO/569-898               ...........................................................................................ql--VCVVLP..GKTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....GIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...NG......STT...qGQSasdgsrprqltfa..... [...]
+D2XYX4_PENJP/572-901               ...........................................................................................ql--VCVVLP..GKTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....GIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...NG......STT...qGQSasdgsrprqltfa..... [...]
+A9NJ57_PENMO/572-901               ...........................................................................................ql--VCVVLP..GKTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....GIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...NG......STT...qGQSasdgsrprqltfa..... [...]
+D2DK65_PENJP/572-901               ...........................................................................................ql--VCVVLP..GKTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....GIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...NG......STT...qGQSasdgsrprqltfa..... [...]
+D2DK66_PENJP/569-898               ...........................................................................................ql--VCVVLP..GKTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....GIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...NG......STT...qGQSasdgsrprqltfa..... [...]
+Q071E1_PENMO/569-898               ...........................................................................................ql--VCVVLP..GKTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....GIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...NG......STT...qGQSasdgsrprqltfa..... [...]
+A7XZ43_PENMO/569-898               ...........................................................................................ql--VCVVLP..GKTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....GIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...NG......STT...qGQSasdgsrprqltfa..... [...]
+A9QW17_TRICA/69-158                ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PR........I......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+A7BJS5_BOMMO/569-871               ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SLR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGVDVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......VHE....MSS.................. [...]
+B4LJF3_DROVI/646-948               ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.................. [...]
+B4KTB5_DROMO/643-945               ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.................. [...]
+B4N5V9_DROWI/642-944               ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...G...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.................. [...]
+B4P449_DROYA/624-926               ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.................. [...]
+B4JW20_DROGR/647-949               ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.................. [...]
+Q7KY08_DROME/607-909               ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.................. [...]
+B3NRF4_DROER/624-926               ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.................. [...]
+B4INL3_DROSE/624-926               ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.................. [...]
+B4GGS7_DROPE/642-944               ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.................. [...]
+Q28ZU1_DROPS/642-944               ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.................. [...]
+B3MHG1_DROAN/641-943               ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.................. [...]
+Q32KD4_DROME/641-943               ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.................. [...]
+Q960T1_DROME/258-560               ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.................. [...]
+Q8T059_DROME/81-383                ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....STR.PK........-......-..-....V...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.................. [...]
+Q27IQ2_DROSI/554-851               ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.................. [...]
+Q27IR0_DROME/554-851               ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.................. [...]
+B0WFU8_CULQU/621-923               ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...D.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.................. [...]
+Q7PZ41_ANOGA/638-940               ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...D.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.................. [...]
+Q16EE2_AEDAE/482-784               ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...D.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.................. [...]
+Q16M62_AEDAE/604-906               ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...D.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.................. [...]
+Q4S7L6_TETNG/228-304               ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQ-.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+D4AC38_RAT/515-816                 ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY.................. [...]
+Q8BJP2_MOUSE/364-665               ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY.................. [...]
+A2VDG1_MOUSE/513-814               ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY.................. [...]
+D2H607_AILME/507-808               ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY.................. [...]
+B2RAD8_HUMAN/515-816               ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY.................. [...]
+Q5TA58_HUMAN/440-741               ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY.................. [...]
+A1L365_MOUSE/515-816               ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY.................. [...]
+AGO1_HUMAN/515-816                 ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY.................. [...]
+B3KME0_HUMAN/440-741               ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....H-Q.R-........-......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY.................. [...]
+AGO1_MOUSE/515-816                 ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.AVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY.................. [...]
+Q8CGU0_MOUSE/527-843               ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.YE........R......-..-....-...-...-.....-.-..L.Lalsrgppge...............ssavfqqpviFLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY.................. [...]
+Q4S7L5_TETNG/517-818               ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY.................. [...]
+AGO3_DANRE/518-819                 ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EV......IQD....LAS.................. [...]
+A3KFX7_MOUSE/1-109                 .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+A3KFX6_MOUSE/1-140                 .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+Q4TBP2_TETNG/578-853               ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCV--.-..-.------................--QTLSNLCL.......KINVK..........LGGI.N....nILV.P....QQR.YQ........P......-..-....-...-...-.....H.P..G.LgcsglssgvcvcvcvcetltsrprrpsvfqqpviFLGADVTHPPAGDgkkp......siaavRAPR..SRCSVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EV......IQD....LAS.................. [...]
+Q7M738_MOUSE/426-707               .....................................................................................rytfgygh--------..-----..-------.--...--..-..----TCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS.................. [...]
+Q3TBP7_MOUSE/518-819               ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS.................. [...]
+AGO3_MOUSE/518-819                 ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS.................. [...]
+Q4TF92_TETNG/161-225               .....................................................................ragerqcvcvcvregaqqvtfrcs--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+AGO3_BOVIN/518-820                 ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS.................. [...]
+D2H606_AILME/513-814               ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS.................. [...]
+AGO3_HUMAN/518-819                 ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS.................. [...]
+B4DY67_HUMAN/154-455               ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS.................. [...]
+B1ALI0_HUMAN/284-585               ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS.................. [...]
+A8KA05_HUMAN/518-819               ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS.................. [...]
+B4E1P5_HUMAN/346-647               ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS.................. [...]
+AGO3_CHICK/518-819                 ............................................................................................l-IIVILPG..-KTPV..YAEVKRA.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS.................. [...]
+Q8CGT7_MOUSE/576-634               ..........................................................................................kls--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+Q4SXU1_TETNG/1-206                 ...........................................................................................sf--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..--IQVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EV......IQD....LAS.................. [...]
+D2HF39_AILME/511-813               ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAT.................. [...]
+AGO2_RAT/517-819                   ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA.................. [...]
+A1A563_MOUSE/517-819               ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA.................. [...]
+AGO2_RABIT/497-799                 ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA.................. [...]
+B0JYP5_BOVIN/517-819               ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA.................. [...]
+Q6PHA2_MOUSE/94-396                ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA.................. [...]
+AGO2_HUMAN/516-818                 ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA.................. [...]
+#=GR AGO2_HUMAN/516-818      SS    ...........................................................................................-E-EEEEE--..---TH..HHHHHH-.--...--..-..---EEEEET.H..H.HHS---................-HHHHHHHHH.......HHHHH..........----.-....XXXX.X....XXX.XX........-......-..-....X...X...X.....X.X..X.X..................................XXXXXXXXXXXXX...............XXXX..XXXXXXXXXX...X...X.X.X...X....X.X.....X.XX..X...XX.....X..........X.......X....X...XX......XXX....XXX.................. [...]
+A4FVC0_HUMAN/465-767               ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA.................. [...]
+Q8R3Q7_MOUSE/187-489               ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA.................. [...]
+AGO2_MOUSE/517-819                 ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA.................. [...]
+Q8CGT9_MOUSE/501-743               ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA.................. [...]
+AGO2_XENLA/519-821                 ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LSA.................. [...]
+C0IN02_XENLA/519-821               ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LSA.................. [...]
+AGO2_XENTR/528-830                 ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LSA.................. [...]
+AGO2_BOVIN/517-819                 ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLWL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA.................. [...]
+Q6P239_MOUSE/277-579               ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLYL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA.................. [...]
+Q8CGT7_MOUSE/455-570               .......................................................................................vlgmat--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......Q..A....V...F...Q.....Q.P..V.I..................................FLGANVTYPPVGD...............GKKP..SIAAVMGSMD...A...H.P.N...R....Y.C.....V.TV..C...VQ.....Q..........H.......Q....Q...EI......IQD....---.................. [...]
+Q4RKH3_TETNG/508-822               ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQV.K..N.VQKT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.--........-......P..L....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...DI......IQD....LAT.................. [...]
+C9V4A2_CTEID/306-581               ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQV.K..N.VQKT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.--........-......P..L....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...DI......IQD....LAT.................. [...]
+B0F0Y5_9TELE/526-828               ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQV.K..N.VQKT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.--........-......P..L....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...DI......IQD....LAT.................. [...]
+A8WKF9_CAEBR/562-864               ...........................................................................................ql-VVIVLPG..-KTPV..YAEIKRV.GD...TV..L..GIATQCIQS.K..N.VTRT--................TPQTLSNICM.......KMNMK..........LGGV.N....cVLA.P....NVR.PK........I......-..-....-...F...S.....E.S..V.I..................................FLGCDITHPPAGD...............SRKP..SVAAIVGSMD...A...H.P.S...K....Y.A.....A.TV..R...VQ.....P..........N.......R....Q...EI......ITE....MAS.................. [...]
+A8P168_BRUMA/623-925               ...........................................................................................ql--VCVVLP..GKTPV..YAEVKRV.GD...TV..L..GIATQCVQA.K..N.VIKT--................TPQTLSNLCL.......KMNVK..........LGGV.N....sILL.P....AVR.PR........I......-..-....-...F...T.....E.P..V.I..................................FLGCDITHPPAGD...............SRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....A..........H.......R....Q...EI......ISD....LTY.................. [...]
+Q86B39_CAEEL/547-848               ............................................................................................l-IVVVLPG..-KTPI..YAEVKRV.GD...TV..L..GIATQCVQA.K..N.AIRT--................TPQTLSNLCL.......KMNVK..........LGGV.N....sILL.P....NVR.PR........I......-..-....-...F...N.....E.P..V.I..................................FLGCDITHPAAGD...............TRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......ITD....LTY.................. [...]
+O16720_CAEEL/566-867               ............................................................................................l-IVVVLPG..-KTPI..YAEVKRV.GD...TV..L..GIATQCVQA.K..N.AIRT--................TPQTLSNLCL.......KMNVK..........LGGV.N....sILL.P....NVR.PR........I......-..-....-...F...N.....E.P..V.I..................................FLGCDITHPAAGD...............TRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......ITD....LTY.................. [...]
+B2L7Q3_CAERE/1-268                 .............................................................................................--------..-----..-------.--...--..-..-IATQCVQA.K..N.AIRT--................TPQTLSNLCL.......KMNVK..........LGGV.N....sILL.P....NVR.PR........I......-..-....-...F...N.....E.P..V.I..................................FFGCDITHPPAGD...............SRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......ISD....LTY.................. [...]
+B2L7P9_CAERE/1-269                 .............................................................................................--------..-----..-------.--...--..-..GIATQCVQA.K..N.AIRT--................TPQTLSNLCL.......KMNVK..........LGGV.N....sILL.P....NVR.PR........I......-..-....-...F...N.....E.P..V.I..................................FFGCDITHPPAGD...............SRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......ISD....LTY.................. [...]
+A8X4Z3_CAEBR/691-992               ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GIATQCVQA.K..N.AIRT--................TPQTLSNLCL.......KMNVK..........LGGV.N....sILL.P....NVR.PR........I......-..-....-...F...N.....E.P..V.I..................................FFGCDITHPPAGD...............SRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......ISD....LTY.................. [...]
+Q3LTR7_CAEEL/668-969               ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GIATQCVQA.K..N.AIRT--................TPQTLSNLCL.......KMNVK..........LGGV.N....sILL.P....NVR.PR........I......-..-....-...F...N.....E.P..V.I..................................FFGCDITHPPAGD...............SRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......ISD....LTY.................. [...]
+Q20578_CAEEL/660-961               ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GIATQCVQA.K..N.AIRT--................TPQTLSNLCL.......KMNVK..........LGGV.N....sILL.P....NVR.PR........I......-..-....-...F...N.....E.P..V.I..................................FFGCDITHPPAGD...............SRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......ISD....LTY.................. [...]
+B6VQ75_CAEEL/681-982               ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GIATQCVQA.K..N.AIRT--................TPQTLSNLCL.......KMNVK..........LGGV.N....sILL.P....NVR.PR........I......-..-....-...F...N.....E.P..V.I..................................FFGCDITHPPAGD...............SRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......ISD....LTY.................. [...]
+A8WWP9_CAEBR/632-910               ...........................................................................................ql-VICIVSG..-KSTV..YGDLKRK.GD...L-..L..GLTTQCIRT.N..N.VARV--................SPHTLSNLCM.......KINSK..........LGGV.N.....VVL.S....APP.PS........T......A..-....-...-...T.....T.P..T.L..................................FIGCHLSRNSVASsses......ssslnYSDT..SIACLVGSMD...G...H.P.T...R....F.A.....P.IF..R...LQ.....P..........R.......N....A...NT......IID....MSE.................. [...]
+Q9XVI3_CAEEL/574-882               ............................................................................................l-VLCIVPG..-KSVV..YGELKRK.GE...L-..L..GLTTQCVRS.Q..N.VSKA--................SPHTLSNLCM.......KINSK..........LGGI.N.....VIL.S....S-P.PQ........-......-..S....L...N...S.....E.P..V.L..................................FIGCHLTRSSLASssds......tssiaHCDS..SIACLVGSMD...G...H.P.T...Q....F.S.....P.IF..R...TQ.....P..........R.......H....Q...RT......IVD....MCE.................. [...]
+A7RQ46_NEMVE/511-812               .............................................................................................MILVVLPG..-KTPV..YAEVKRV.GD...TM..L..GVITQCIQG.K..N.VTKP--................SPQTLSNLCL.......KINAK..........LGGV.N....nILA.P....EIR.PP........V......-..-....-...F...R.....E.P..V.I..................................FLGADVTHPAAGD...............DKRP..SVAAVVGSMD...A...H.P.S...R....Y.Y.....A.SV..R...VQ.....T..........H.......R....Q...EI......IAE....LAA.................. [...]
+D2XMQ5_SACKO/1-219                 .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------HPPAGD...............MKKP..SIAAVVASMD...A...H.P.S...R....Y.A.....A.SV..R...VQ.....S..........H.......R....Q...EL......IEE....LSH.................. [...]
+C4Q6D1_SCHMA/608-835               ..........................................................................................xxx--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-LGADVTHPPAGD...............KTKP..SIAAVVASMD...A...H.P.S...R....Y.S.....A.TV..R...VQ.....S..........H.......R....Q...EI......IHD....LYP.................. [...]
+Q5C3Y0_SCHJA/4-157                 ............................................................................................y--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+D4A2P5_RAT/843-954                 ..........................................................................vrhcshdnflcssivfivg--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+A7SCI6_NEMVE/496-743               ............................................................................................l-IVVALPD.rGNKDV..YNEVKRV.GD...TV..L..GIPTQCVQM.K..Q.FTMA--................KPQVCSNIAM.......KINGK..........LGGT.N.....HVI.A....DSL.KA........TitddkgN..G....I...F...N.....S.P..V.I..................................IFGADVTHPAPGD...............NGIP..SIAAVVASLN...R...N.A.S...R....Y.C.....A.RV..R...PQthmkcK..........Q.......A....Q...EI......IVD....LAD.................. [...]
+Q4TF92_TETNG/239-305               .........................................................................................alll--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+Q4TBP2_TETNG/868-934               .........................................................................................alll--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+Q8CGT8_MOUSE/1000-1102             .....................................................................................lcsfmffl--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+Q4R7V5_MACFA/1-211                 ............................................................................................m--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..---------D...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...EI......SQE....LLYsqevi............. [...]
+AGO4_HUMAN/509-820                 ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...EI......SQE....LLYsqevi............. [...]
+D2H608_AILME/505-816               ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...EI......SQE....LLYsqevi............. [...]
+A7MD27_HUMAN/509-820               ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...EI......SQE....LLYsqevi............. [...]
+Q9NXV9_HUMAN/35-346                ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...EI......SQE....LLYsqevi............. [...]
+D4A2P5_RAT/513-742                 ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...EI......AQE...lLFSqevv.............. [...]
+Q4SVE6_TETNG/553-864               ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...DM......SQE...qLFSqevi.............. [...]
+AGO4_MOUSE/509-820                 ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KMNAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...EI......TQE....LLYsqevv............. [...]
+Q8BTF2_MOUSE/35-346                ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KMNAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...EI......TQE....LLYsqevv............. [...]
+Q8CGT8_MOUSE/660-885               ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KMNAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...EI......TQE....LLYsqevv............. [...]
+AGO4_XENLA/532-843                 ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...ET......TQE....LLYsqevi............. [...]
+AGO4_CHICK/442-753                 ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...ET......SQE....LLYsqevi............. [...]
+B7QBT5_IXOSC/313-623               ............................................................................................q-VIFVVVV..NKSPI..YNELKST.AE...TE..I..GVMTQCVTD.K..S.IMNKCN................-PMLVNNILQ.......KVNAK..........LGGV.N.....NTI.P....KSV.K-........-......S..V....I...F...S.....K.P..V.I..................................VMGADVTHPGAKE...............FNRP..SIAAVVASTD...P...F.A.F...R....Y.I.....T.AF..R...IQ.....K..........Q.......N....M...EVkarveiIED....MKS.................. [...]
+B7Q990_IXOSC/474-787               ............................................................................................k-FLLIILN..PMIDN..HDAIKLI.CE...RD..L..GLATQCCME.K..N.VFNVVDkml..........hqpLPALLVNLCH.......KVNAK..........CGGD.A.....NTI.S....K--.--........R......P..A....I...F...E.....E.P..V.I..................................ILGADVNHPAPGR...............SNHP..SYAALVGSLD...S...C.P.S...K....Y.H.....A.SV..R...IQrtsanS..........N.......E....R...EI......IKD....LKG.................. [...]
+B7Q811_IXOSC/611-920               ............................................................................................e-IMVIVLA..-KNSN..YAEIKQV.AE...TD..L..GLRTQCIMD.N..N.VIKKCN................-AALVTNLCQ.......KLNAK..........MGGT.N....nSLL.A....Q-E.K-........-......P..A....I...F...Q.....K.P..V.I..................................IIGADVTHPAPGD...............KLRP..SIAACVGSLD...S...I.P.S...K....F.H.....A.SI..R...IQ.....Meds....aamS.......R....V...EI......IKD....LKD.................. [...]
+B7P230_IXOSC/468-776               ............................................................................................l-VIVVLGR..--NSS..YADIKQT.AE...TS..L..GIRTQCILE.Q..N.FTRNCK................-PQLMVNLCQ.......KINAK..........MGGI.N....nGLL.L....AQK.PE........-......-..-....I...F...R.....K.P..V.I..................................IIGADVSHPAPGD...............RIRP..SIAACVGSLD...S...I.P.S...K....Y.R.....A.SI..R...VQ.....L..........E.......D....Q...EA......VAR....VEMikd............... [...]
+Q5DFJ9_SCHJA/2-164                 .........................................................................................lylr--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+Q5DG80_SCHJA/3-99                  ........................................................................................hclyr--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+C4QPD2_SCHMA/595-831               ............................................................................................f-IMLILYD..--DLA..YGTIKRL.SD...LK..M..GIRTQCVRG.S..T.LRKP--................--NVFPNLLL.......KLNGK..........LGGV.N.....WIV.P....DLT.E-........-......-..-....Y...S...K.....D.L..I.M..................................VFGADVTHPAPTQt.............hQVLK..SVAAVVGSVS...P...E.L.M...R....Y.G.....A.IV..R...QQ.....A..........TtergnktT....R...EI......IDN....LHL.................. [...]
+C4QPD1_SCHMA/595-896               ............................................................................................f-IMLILYD..--DLA..YGTIKRL.SD...LK..M..GIRTQCVRG.S..T.LRKP--................--NVFPNLLL.......KLNGK..........LGGV.N.....WIV.P....DLT.E-........-......-..-....Y...S...K.....D.L..I.M..................................VFGADVTHPAPTQt.............hQVLK..SVAAVVGSVS...P...E.L.M...R....Y.G.....A.IV..R...QQ.....A..........TtergnktT....R...EI......IDN....LHL.................. [...]
+Q5DCI0_SCHJA/265-566               ...........................................................................................fl--LLILYD..--EYS..YPTIKRL.SD...LQ..M..GIRTQCVRG.R..T.LDKP--................--NVFPNLLL.......KLNGK..........LGGV.N.....WQI.P....DLI.KN........-......-..-....-...G...N.....E.L..I.M..................................VFGADVTHPAPTQn.............qQIRK..SVAAVIGSVS...P...D.L.M...R....Y.G.....V.VI..R...QQ.....A..........TtekgnktA....R...EI......IDD....MRL.................. [...]
+C4QPD0_SCHMA/628-928               ..........................................................................................afl--LLILYD..--EHA..YPAIKRL.SD...LQ..I..GIRTQCVRS.R..T.LDKP--................--NVFPNLLL.......KINGK..........LGGV.N.....WQI.P....DLI.KN........-......-..-....-...S...D.....E.L..I.M..................................VFGADVTHPAQTQ...............QVRK..SVAAVLGSVS...P...D.L.M...R....Y.G.....V.VI..R...QQ.....A..........TtekgnkaA....R...EI......IDD....MRL.................. [...]
+C4WWR5_ACYPI/1-266                 .........................................................................................mfrm--------..-----..-------.--...--..-..---------.-..-.------................NTSTSSNILL.......KINSK..........LNGI.Nh...tLAI.R....SSP.PS........M......-..-....-...-...-.....E.G..A.I..................................IFGADVTHPSPEQ...............TTIP..SVAAVAASHD...T...Y.G.S...Q....Y.N.....M.EW..R...LQ.....S..........P.......K....V...EI......IQD....LED.................. [...]
+Q59HV7_BOMMO/706-1006              ............................................................................................f-LVVVVSG..RGRDY..YHKLKQI.AE...LK..V..GILTHVFKE.D..T.ATRRMN................-PQTARNILL.......KVNSK..........LMGI.N.....QAL.E....NRS.IP........-......Q..C....L...K...G.....G.A..V.M..................................IVGADVTHPSPDQ...............SNIP..SIAAVTASMD...T...K.C.Y...I....Y.N.....I.EL..S...IQ.....T..........P.......K....K...EM......IVQ....FED.................. [...]
+B5DIM9_DROPS/1-71                  .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+B4NLX0_DROWI/695-993               ............................................................................................l-VIVIIPN..-RGTT..YDTIKQK.AE...LT..H..GILTQCIKQ.F..T.VQRK-L................NAQLIGNLLL.......KVNSK..........LNGI.N.....HKL.K....DDP.LT........R......-..L....-...-...-.....V.N..T.M..................................YLGADVTHPSPDQ...............RDIP..SVVGVAASHD...L...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........S.......T....A...EE......IED....MEG.................. [...]
+B4N082_DROWI/579-877               ............................................................................................l-VIVIIPQ..-IGVS..YDIIKQK.AE...LK..H..GILTQCLKQ.L..T.VERK-L................NPQLIGNVLL.......KINSK..........LNGI.N.....HKL.K....DEP.NR........L......-..L....-...-...-.....S.N..V.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MET.................. [...]
+B3NI38_DROER/838-1138              ..........................................................................................dla---FVIIP..QFGTS..YDIIKQK.AE...LQ..H..GILTQCIKQ.F..T.VERK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..T.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MYS.................. [...]
+Q2Q3X0_9MUSC/506-806               ..........................................................................................dla---FVIIP..QSGSS..YDIIKQK.AE...LQ..H..GILTQCIKQ.Y..T.FDRK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..A.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......T....L...EE......IED....MYA.................. [...]
+Q2Q3X2_DROYA/506-806               ..........................................................................................dla---FVIIP..QSGSS..YDIIKQK.AE...LQ..H..GILTQCIKQ.Y..T.FDRK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..A.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MYA.................. [...]
+Q2Q3X7_DROYA/506-806               ..........................................................................................dla---FVIIP..QSGSS..YDIIKQK.AE...LQ..H..GILTQCIKQ.Y..T.FDRK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..A.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MYA.................. [...]
+Q2Q3X4_DROYA/506-806               ..........................................................................................dla---FVIIP..QSGSS..YDIIKQK.AE...LQ..H..GILTQCIKQ.Y..T.FDRK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..A.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MYA.................. [...]
+B4PCH3_DROYA/843-1143              ..........................................................................................dla---FVIIP..QSGSS..YDIIKQK.AE...LQ..H..GILTQCIKQ.Y..T.FDRK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..A.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MYA.................. [...]
+Q2Q3X6_DROYA/506-806               ..........................................................................................dla---FVIIP..QSGSS..YDIIKQK.AE...LQ..H..GILTQCIKQ.Y..T.FDRK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..A.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MYA.................. [...]
+Q2Q3X8_DROYA/506-806               ..........................................................................................dla---FVIIP..QSGSS..YDIIKQK.AE...LQ..H..GILTQCIKQ.Y..T.FDRK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..A.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MYA.................. [...]
+B4IU14_DROYA/810-1110              ..........................................................................................dla---FVIIP..QSGSS..YDIIKQK.AE...LQ..H..GILTQCIKQ.Y..T.FDRK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..A.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MYA.................. [...]
+Q2Q3X1_DROTE/424-724               ..........................................................................................dla---FVIIP..QSGSS..YDIIKQK.AE...LQ..H..GILTQCIKQ.Y..T.FDRK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..A.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MYS.................. [...]
+C7LAD2_DROME/888-1187              ...........................................................................................la--IVIIPQ..-FRIS..YDTIKQK.AE...LQ..H..GILTQCIKQ.F..T.VERKCN................-NQTIGNILL.......KINSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...M.....K.N..T.M..................................YIGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...S....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MFS.................. [...]
+AGO2_DROME/885-1184                ...........................................................................................la--IVIIPQ..-FRIS..YDTIKQK.AE...LQ..H..GILTQCIKQ.F..T.VERKCN................-NQTIGNILL.......KINSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...M.....K.N..T.M..................................YIGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...S....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MFS.................. [...]
+Q2Q3W2_DROSI/511-810               ...........................................................................................la--IVIIPQ..-SRIS..YDTIKQK.AE...LQ..H..GILTQCVKQ.F..T.VERKCN................-DQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....V.N..T.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...S....Y.N.....M.QY..R...LQ.....R..........G.......T....L...EE......IED....MYT.................. [...]
+Q2Q3W7_DROSI/511-810               ...........................................................................................la--IVIIPQ..-SRIS..YDTIKQK.AE...LQ..H..GILTQCVKQ.F..T.VERKCN................-DQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....V.N..T.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...S....Y.N.....M.QY..R...LQ.....R..........G.......T....L...EE......IED....MYT.................. [...]
+Q2Q3W9_DROSI/511-810               ...........................................................................................la--IVIIPQ..-SRIS..YDTIKQK.AE...LQ..H..GILTQCVKQ.F..T.VERKCN................-DQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....V.N..T.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...S....Y.N.....M.QY..R...LQ.....R..........G.......T....L...EE......IED....MYT.................. [...]
+B4NVX8_DROSI/80-259                ...........................................................................................la--IVIIPQ..-SRIS..YDTIKQK.AE...LQ..H..GILTQCVKQ.F..T.VERKCN................-DQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....V.N..T.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...S....Y.N.....M.QY..R...LQ.....R..........G.......T....L...EE......IED....MYT.................. [...]
+B4HIG2_DROSE/1-224                 .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.M..................................YMGADVTILSRSA...............-RDS..QCGRVAASHD...P...Y.G.A...S....Y.N.....M.QY..R...LQ.....R..........G.......T....L...EE......IED....MYT.................. [...]
+B4QL34_DROSI/606-729               .........................................................................................nvgc--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+B3M505_DROAN/688-988               ...........................................................................................dl--AFVIIP..NYGAS..YETIKQK.AE...LK..H..GILTQCIKQ.F..T.FERK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKL.K....E-D.TR........L......P..V....-...-...P.....K.N..A.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........A.......A....L...EE......IED....MES.................. [...]
+B4GTA7_DROPE/448-747               ............................................................................................d-VVFVIIP..NFGHL..YDVVKQK.AE...LQ..H..GILTQCIKR.V..T.VERKCN................-AQVIGSILL.......KVNAK..........LNGT.N.....HKL.R....D-D.L-........-......-..H....C...L...P.....K.K..T.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MES.................. [...]
+B4GTA5_DROPE/448-747               ............................................................................................d-VVFVIIP..NFGHL..YDVVKQK.AE...LQ..H..GILTQCIKR.V..T.VERKCN................-AQVIGSILL.......KVNSK..........LNGT.N.....HKL.R....D-D.L-........-......-..H....C...L...P.....K.K..T.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MES.................. [...]
+B5DT30_DROPS/694-993               ............................................................................................d-VVFVIIP..NSGHL..YDVVKQK.AE...LQ..H..GILTQCIKQ.I..T.VERKCN................-AQVIGNILL.......KVNSK..........LNGT.N.....HKL.R....D-D.L-........-......-..H....C...L...P.....K.K..T.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MES.................. [...]
+B4ISF4_DROPE/14-227                .........................................................................................tdvv--------..-----..----KQK.AE...LQ..H..GILTQCIKR.I..T.VERKCN................-AQVIGSILL.......KVNSK..........LNGT.N.....HKL.R....D-D.L-........-......-..H....C...L...P.....K.K..T.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MES.................. [...]
+B5DKZ0_DROPS/2-120                 ...................................................................................tytvcqrrpc--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................FXGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MES.................. [...]
+B4HDJ4_DROPE/40-339                ............................................................................................d-VVFVIIP..NFGHL..YDVVKQK.AE...LQ..H..GILTQCIKR.I..T.VERKCN................-AQVIGSILL.......KVNAK..........LNGT.N.....HKL.R....D-D.L-........-......-..H....C...L...P.....K.K..T.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MES.................. [...]
+B4GTA6_DROPE/448-736               ............................................................................................d-VVFVIIP..NFGHL..YDVVKQK.AE...LQ..H..GILTQCIKR.I..T.VERKCN................-AQVIGSILL.......KVNAK..........LNGT.N.....HKL.R....D-D.L-........-......-..H....C...L...P.....K.K..T.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......V....L...EE......IED....MES.................. [...]
+B5DWW4_DROPS/3-186                 ..........................................................................................rll--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....K.N..T.M..................................FLGADVSHPSPDQ...............REIP..SVVGVAATHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MES.................. [...]
+B4GDQ8_DROPE/669-968               ............................................................................................d-LVFVIIP..NVGRS..YDVVKQK.AE...LK..Y..GILTQCLKQ.I..T.VERKCN................-PQCIGNVLL.......KVNSK..........LNGI.N.....HKL.R....DDP.R-........-......-..-....C...L...L.....K.N..T.M..................................FLGADVTHPSPDQ...............WEMP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......T....L...EE......IED....MES.................. [...]
+B4GDQ6_DROPE/661-960               ............................................................................................d-LVFVIIP..NVGRS..YDVVKQK.AE...LK..Y..GILTQCLKQ.I..T.VERKCN................-PQCIGNVLL.......KVNSK..........LNGI.N.....HKL.R....DDP.R-........-......-..-....C...L...L.....K.N..T.M..................................FLGADVTHPSPDQ...............WEMP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......T....L...EE......IED....MES.................. [...]
+B5DYR9_DROPS/651-950               ............................................................................................d-LVFVIIP..NVGRS..YDVVKQK.AE...LK..H..GILTQCLKQ.I..T.VERKCN................-PQCIGNVLL.......KVNSK..........LNGI.N.....HKL.R....DDP.R-........-......-..-....C...L...L.....K.N..A.M..................................FLGADVTHPSPDQ...............WEMP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......T....L...EE......IED....MES.................. [...]
+B5DU45_DROPS/389-589               ............................................................................................d-LVFVIIP..NVGRS..YDVVKQK.AE...LK..H..GILTQCLKQ.I..T.VERKCN................-PQCIGNVLL.......KVNSK..........LNGI.N.....HKL.R....DDP.R-........-......-..-....C...L...L.....K.N..A.M..................................FLGADVTHPSPDQ...............WEMP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......T....L...EE......IED....MES.................. [...]
+B5DYR8_DROPS/41-340                ............................................................................................d-LVFVIIP..NVGRS..YDVVKQK.AE...LK..H..GILTQCLKQ.I..T.VERKCN................-PQCIGNVLL.......KVNSK..........LNGI.N.....HKL.R....DDP.R-........-......-..-....C...L...L.....K.N..A.M..................................FLGADVTHPSPDQ...............WEMP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......T....L...EE......IED....MES.................. [...]
+B5DY62_DROPS/643-942               ............................................................................................d-LVFVIIP..NSGPF..YDVVKQK.AE...LQ..H..GILTQCIKE.I..T.VLRKCN................-LQCIGNVLL.......KVNSK..........LNGI.N.....HKL.K....DDP.R-........F......-..-....-...L...L.....K.N..A.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MES.................. [...]
+B4GFG0_DROPE/449-748               ............................................................................................d-LVFVIIP..NSGPF..YDVVKQK.AE...LQ..H..GILTQCIKE.I..T.VLRKCN................-LQCIGNVLL.......KVNSK..........LNGI.N.....HKL.K....DDP.R-........F......-..-....-...L...L.....K.N..A.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MES.................. [...]
+B4GUA7_DROPE/624-923               ..........................................................................................dlv--YVIIPN..-SGSV..YDVVKQK.AE...LE..H..GILTQCIKE.N..T.VLRKCN................-LQCIGNVLL.......KVNSK..........LNGI.N.....HKL.K....DDP.L-........-......-..-....C...L...L.....K.N..A.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......D....L...EE......IQD....MES.................. [...]
+B5DQH3_DROPS/471-770               ..........................................................................................dlv--YVIIPN..-SGSV..YDVVKQK.AE...LE..H..GILTQCIKE.N..T.VLHKCN................-LQCIGNVLL.......KVNSK..........LNGI.N.....HKL.K....DDP.L-........-......-..-....C...L...L.....K.N..A.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......D....L...EE......IQD....MES.................. [...]
+B4IWV1_DROGR/788-1091              ............................................................................................l-VFVIIPS..RGGAS..YEMIKQR.AE...LH..C..GILTQCIKQ.N..N.VERR-L................DDQLVGNLLL.......KVNSK..........LNGI.N.....HKI.K....DDV.R-........I......K..L....-...-...-.....P.N..V.M..................................YLGADVTHPSPDQ...............RDIP..SVVGVAASHD...L...Y.G.G...S....Y.N.....M.QF..R...MQ.....S..........N.......SggrpR...EE......IDD....MQS.................. [...]
+B4LH85_DROVI/152-457               ............................................................................................d-LVFVILA..SRGPS..YDIIKQK.AE...LQ..Y..GILTQCIKQ.N..N.VERR-L................NGQLVGNILL.......KVNSK..........LNGV.N.....HKL.K....DDP.RT........M......L..-....-...-...-.....A.N..V.M..................................YLGADVTHPSPDQ...............RDIP..SVVGVAASHD...M...H.G.G...S....Y.N.....M.QY..R...LQ.....C..........G.......GgggaR...EE......IED....MES.................. [...]
+B4KUJ5_DROMO/715-1017              ...........................................................................................dl-VFVIIPS..-RGAT..YEVIKQK.AE...LQ..H..GILTQCIKH.N..N.VDRR-L................NAQLVGNILL.......KVNSK..........LNGI.N.....HKL.K....DDP.R-........T......Q..L....-...-...-.....T.N..V.M..................................YLGADVTHPSPDQ...............RDIP..SVVGVAASHD...A...Y.G.G...S....F.N.....M.QY..R...LQ.....Cga......ggR.......A....A...EE......ILD....MES.................. [...]
+B4G6N7_DROPE/19-133                ........................................................................................vrrei--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+B5DIM7_DROPS/517-815               ............................................................................................l-VLVVIPN..-SGNF..YDKLKQK.AE...LE..Y..GILTQCIKQ.A..T.VERRCN................-GQVVGNLLL.......KMNSK..........LNGI.N.....HTL.K....ADT.AA........L......-..-....-...-...P.....K.N..V.M..................................FVGADVTHPSPEQ...............REIP..SVVGVAASHD...A...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MES.................. [...]
+B4G6N0_DROPE/517-815               ............................................................................................l-VLVVIPN..-SGNF..YDKLKQK.AE...LE..Y..GILTQCIKQ.A..T.VERRCN................-GQMVGNLLL.......KMNSK..........LNGI.N.....HTL.K....ADT.AA........L......-..-....-...-...P.....K.N..V.M..................................FVGADVTHPTPEQ...............REIP..SVVGVAASHD...A...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MES.................. [...]
+B4G6N2_DROPE/1-37                  .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+A9QW19_TRICA/79-190                ............................................................................................l-IIVVVPN..-SGPQ..YSFVKQA.AE...LN..V..GCLTQCIKE.R..T.IGRL--................NPQTVGNILL.......KINSK..........MNGT.N....hRLS.P....NSR.--........-......P..L....I...M...K.....R.P..C.M..................................IMGADVTHPSPDA...............RDIP..SVAAVTASHD...P...N.A.F...Q....Y.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+B0X641_CULQU/527-832               ............................................................................................f-VIVVIPG..-IGDH..YSRLKQK.AE...LV..V..GVLTSCVKG.N..T.VKNTRS................PLTVVNNILL.......KINGK..........TNGT.N.....HVV.Q....SPD.PK........I......P..L....-...I...K.....K.R..I.M..................................FVGADVTHPSPEQ...............STIP..SVVGVVASFD...R...N.G.F...R....Y.K.....P.HF..Q...LQ.....D..........P.......K....K...EM......IHG....LEA.................. [...]
+B0LJQ7_CULTA/1-148                 .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+B0WRW8_CULQU/638-943               ...........................................................................................df-VIVVISG..-MGDQ..YSKVKQR.AE...LV..T..GLLTQCIKG.D..T.VFKKAG................DMSTINNIWL.......KINAK..........TNGT.N....hVLK.P....ESK.PP........L......-..-....-...I...R.....K.R..V.M..................................YVGADVTHPSPEQ...............TNIP..SVVGVAASYD...L...E.G.F...R....Y.N.....C.CY..R...LQ.....N..........P.......K....D...EM......IRD....LEN.................. [...]
+C5J0H4_AEDAE/655-961               ............................................................................................l-VFVVIPSpgRDGDV..YAKVKQK.AE...LC..V..GLLTQCIKS.F..T.LDKKRG................DMSTISNIWL.......KINAK..........TNGS.N....hVLA.K....NFK.PP........I......-..-....-...A...R.....K.T..V.M..................................YVGADVTHPSPEQ...............TNIP..SVVGVAASYD...L...E.G.F...R....Y.N.....C.CY..R...LQ.....G..........P.......K....D...EM......IRD....LQN.................. [...]
+B0LJQ8_AEDTR/1-254                 .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................---------L.......KINAK..........TNGT.N....hLLA.P....GSK.PP........M......-..-....-...S...R.....K.D..V.M..................................YIGADVTHPSPEQ...............TNIP..SVVGVAASYD...L...E.G.F...R....Y.N.....C.CY..R...LQ.....N..........A.......K....D...EM......IRD....LEN.................. [...]
+Q5TVL2_ANOGA/535-839               ...........................................................................................vt--IVVLPS..-RGDA..YAKVKQK.AElasER..I..GLLTQCVKG.M..T.VAKKGT................DMSTLNNIML.......KINAK..........TNGT.N.....HCI.S....QVA.V-........-......P..P....L...G...R.....G.K..V.M..................................YIGADVTHPLSEN...............--EP..SVVGVAALYD...L...T.G.F...R....Y.N.....C.SV..R...LQ.....G..........A.......R....D...EM......IRD....LEN.................. [...]
+B4H1E3_DROPE/6-68                  ...................................................................................sistdtenqa--------..-----..-------.-E...LE..H..GILTQCIIQ.A..T.GERRFN................-GQVMSNLLL.......KMNSK..........LNGI.N.....PTL.K....R--.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+Q70IH5_ARAHA/1-61                  .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+B9ZU55_9TURB/580-893               ............................................................................................i-LFFALPR..KDSGY..YARVKVA.AD...QL..L..IVPSQVVVA.G..G.-KG---................ITQKVDLLLQ.......KVNAK..........LGGQ.N.....TDL.V....PMK.QD........-......P..A....M...E...N.....V.A..R.Llge............................pimFIGADVTHPDSHD..............eDGRP..SIAAVIGSSH...R...D.I.F...S....Y.A.....A.QV..R...AQ.....K..........Pia..krrA....K...ES......IDD....MQT.................. [...]
+C1DZY0_9CHLO/572-888               ............................................................................................i-VFCVLPK.fDNKHI..YNSIKEC.AE...IE..I..GVRTQCIMN.K..V.GGGGGG...............lNDQTLANIMQ.......KVNAK..........LGGI.N.....MLV.S....PVT.SP........NaaprspT..Q....L...F...S.....K.A..T.I..................................IFGGDVSHASPGS...............-QAS..SIAALVGNIN...R...S.C.T...Q....Y.V.....A.RL..S...AQ.....A..........N.......R....K...EM......IDD....LKS.................. [...]
+O61931_CAEEL/762-1081              .....................................................................................vysgnnne--------..--YND..YNVLKYL.AD...NK..Y..GIHTQGILE.K..S.LGVVGPs..............pKNCALTRLMV......eKVLGK..........VGTT.Hr...kLER.G....GAH.KT........W......T..I....F...T...Dp...aK.P..T.L..................................VLGIDVSHPSTRDret.........gnvLQKM..SAATVVGNID...L...D.V.T...E....F.R.....A.SS..R...IQ.....D..........T.......G....V...EC......LID....FSK.................. [...]
+A8WPC9_CAEBR/828-1145              ......................................................................................tlnlqrq--------..DFQND..YNLFKWL.AD...NH..V..GIFTQGMLY.K..T.FNGIGSt.............paTCKYTSQIVE.......KVLGK..........VGTT.-.....HRR.L....ERN.GE........H......K..S....W...K...Ki..vvE.P..T.L..................................LLGVDVSHPSTRDlmg.........edqVKRL..SVATVVGNID...L...D.C.T...E....Y.R.....A.SS..K...IQ.....D..........V.......G....E...ER......IVR....FEN.................. [...]
+A8XN44_CAEBR/716-1005              ..............................................................pgtildwfislkknldeykqsedevivplvf--------..-----..-------.--...--..-..---------.-..-.------................---------V.......IFEVR..........FTTL.N.....LER.Q....DFQ.ND........Y......-..-....-...-...T.....E.P..T.L..................................LLGVDVSHPSTRDlkg.........edhVKRL..SIATVVGNID...L...D.C.T...E....Y.R.....A.SS..K...IQ.....D..........V.......G....E...ER......IVR....FEN.................. [...]
+A8XRY5_CAEBR/161-269               ....................................................................................tstivnlnk--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+A8XS10_CAEBR/818-1134              ........................................................................................cerse--------..-FQND..YNLFKWM.AD...NE..V..GVFTQGLLY.K..T.FNSIGNt.............paSCRFTRLIVE.......KILGK..........IGTT.-.....HRR.L....ERD.GD........H......K..S....W...K...KlvnpaE.P..T.L..................................FLGVDVSHPSARDlkg.........ddpVKRL..SVATVVGNID...L...D.C.T...E....Y.R.....A.SS..K...LQ.....D..........V.......G....E...ER......IVR....FQE.................. [...]
+A8XP19_CAEBR/721-1037              ........................................................................................cerpd--------..-FQND..YNLFKWM.SD...NE..V..GVFTQGILY.K..T.FNSIGLs.............paPCKYTSQLVE.......KILGK..........VGTT.-.....HRR.L....ERD.GE........H......K..S....W...K...KlvnpaE.P..T.L..................................LLGVDVSHPSTRDlkg.........edpVKRL..SVATVVGNID...F...D.C.T...E....F.R.....A.SS..K...IQ.....D..........V.......G....E...ER......IVR....FDE.................. [...]
+A8PVW7_BRUMA/492-800               ............................................................................................l-MIFITPE..KNDDI..YGRIKVT.CD...KE..E..GVACQVILV.E..T.FLKMLGn.............peRNAVSHNICL.......KINVK..........LDGI.N....nEVA.R....NQN.YW........K......K..F....T..dK...E.....S.P..T.L..................................FMGIDVTHPPSGD...............TSAP..SIASIIGSLN...I...S.A.T...K....Y.A.....A.SL..K...IQ.....Q..........P.......G....V...EV......MTY....AVD.................. [...]
+B6VBQ1_CAEBE/1034-1381             ..........................................................................................lvf-IVVSGPH..KDQDA..YGYVKHH.CD...VN..L..GVVSQYVRA.E..T.AKLT--................ERNIYNTIAL.......KINAK..........LGGV.Nq...eLNF.S....E-N.AE........M......S..L....A...E...K.....E.ErkK.Lpl..............................kmFVGIDVTHPTTGS...............GIDF..SIAAVVASVN...A...S.G.T...K....Y.Q.....N.MI..V...TQ.....EecvpgerpgaH.......G....R...ER......TDI....LEG.................. [...]
+A8XVL1_CAEBR/571-952               ...........................................................................................ki-LLFIVFS..KRRWN.fYGFVKQF.CD...VE..L..GVASQHVTA.H..V.AKRALQdms.........shkpSKRIFYQIAL.......KINGK..........LGGV.Nq..elDWS.E....NAE.MT........V......E..E....K...E...K.....R.K..N.Mpl..............................rmYVGIDVTHPTNGS...............GIDY..SIAAIVASMN...P...G.G.T...V....Y.R.....N.MI..V...TQ.....E..........E.......N....R...PG......ERP....VAHgrertdilegk....... [...]
+O46002_CAEEL/57-176                ...........................................................ieymaseynytikiknhfvyslapelskknpkvk--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.................. [...]
+Q9XU82_CAEEL/618-985               ............................................................................................v-LMFIIIS.kRQLNA..YGFVKHY.CD...HT..I..GVANQHITS.E..T.VTKALAslr.........hekgSKRIFYQIAL.......KINAK..........LGGI.NqeldwSEI.A....EIS.PE........E......K..E....-...-...R.....R.K..T.Mpl..............................tmYVGIDVTHPTSYS...............GIDY..SIAAVVASIN...P...G.G.T...I....Y.R.....N.MI..V...TQ.....E..........E.......C....R...PG......ERA....VAHgrert............. [...]
+#=GC SS_cons                       ....HHHHHHHHHH....EEEEESS..TT.HHHHHHHH...TTT...B..EEE...S.SEEE........SSB....EEEB..EEEEEECCSE-EEEEESS..S-HHH..HHHHHHH.HH...CT..C..CCHEEEEEH.H..H.HHHSCHCCE.........EECEHHHHHHHHHH.......HHHHH..........---B.S....XXEE.E....SXX.TT........S......S..E....X...X...X.....X.X..X.X..................................EEXXEEEEEEXXE..............ESSCC..EEEEEEEEEE...X...E.X.E...E....E.E.....E.EE..E...ES.....C..........E.......G....G...HH......HHH...HHHH.................. [...]
+#=GC seq_cons                      ............................................................................................h.llhllst...ps.h..YstlK+h.sp...hp..h..Gl.oQsl...p..p.h.pt....................phhsNlsl.......clNsK..........lGGh.s.....hhh......p..........................................t.s..s.h..................................hlGhDVsHssssp.................ts..SlsuhVuShc.......p.h.s...p....a.h.....u.ps..p...hQ.....p..........p.......p....p...Eh......lps....lpt.................. [...]
+//
diff --git a/test/data/PF02171_seed.fasta b/test/data/PF02171_seed.fasta
new file mode 100644
index 0000000..0ac870e
--- /dev/null
+++ b/test/data/PF02171_seed.fasta
@@ -0,0 +1,176 @@
+>YQ53_CAEEL/650-977
+DILvgiAR.EKKPD.VHDILKYFEESIGLQTIQLCQQTVDKM.....MG....GQGGRQT
+IDNVMRKFNLKCGGTNFFVEIPNAVRGKAVCSNNETLRKKLLEHVQFIGFEISHGASRTL
+FDRSRSQMDGEPSVVGVSYSLT...NSTQLGGFTYLQTQKEYKLQKLDE...........
+.FFPKCVRSYKEHSKT.LPTRIVIYRVGAGEGNFNRVKE.EVEEMRRTFD.......KIQ
+.PGYR..PHLVVIIAQRASHARVFPSCISG.....................NRATDQNIP
+SGTCV...ENVLTSYGYDEFILSSQTPLIGTVRPCKYTILVNDA...KWSKNEL.MHL..
+....TYFRAFGHQVSY....QPPSV........PDVLYAAENLAKRGRNNYK
+>Q21691_CAEEL/673-1001
+TIVFGIIA.EKRPD.MHDILkyfeeklGQQTIQISSETADKF.....MR....DHGGKQT
+IDNVIRKLNPKCGGTNFLIDVPESVGHRVVCNNSAEMRAKLYAKTQFIGFEMSHTGARTR
+FDIQKVMFDGDPTVVGVAYSL..KHSAQLGGFSYFQESRLHKLTN.LQE...........
+.KMQICLNAYEQSSSY.LPETVVVYRVGSGEGDYPQIVN.EVNEMKLAAR.......KKK
+.HGYN..PKFLVICTQRNSHIRVFPEHINE....................RGKSMEQNVK
+SGTCV...DVPGASHGYEEFILCCQTPLIGTVKPTKYTIIVNDC...RWSKNEI.MNV..
+....TYHLAFAHQVSY....APPAI........PNVSYAAQNLAKRGHNNYK
+>O48771_ARATH/542-860
+FILCILPERKTSDI.YGPWKKICLTEEGIHTQCICPIKI.................SDQY
+LTNVLLKINSKLGGINS.LLGIEYSYNIPLINKIPTL.........ILGMDVSHGPPGR.
+........ADVPSVAAVVGSKCWPLISRYRAAVRTQSPRLEMIDSLFQP..IENTEKGDN
+GIMNELFVEFYRTSRARKPKQIIIFRDGVSESQFEQVLKIEVDQIIKAYQ.......RLG
+.ESDV..PKFTVIVAQKNHHTKLFQAKGPE...........................NVP
+AGTVV...DTKIVHPTNYDFYMCAHAGKIGTSRPAHYHVLLDEI...GFSPDDL.QNL..
+....IHSLSYKLLNSI....FNVSSLLCVFVLSVAPVRYAHLAAAQVAQFTK
+>Q9ZVD5_ARATH/577-885
+FILCVLPDKKNSDL.YGPWKKKNLTEFGIVTQCMAPTRQPND................QY
+LTNLLLKINAKLGGLNS.MLSVERTPAFTVISKVPTI.........ILGMDVSHGSPGQ.
+........SDVPSIAAVVSSREWPLISKYRASVRTQPSKAEMIESLVKK.....NGTEDD
+GIIKELLVDFYTSSNKRKPEHIIIFRDGVSESQFNQVLNIELDQIIEACK.......LLD
+.ANWN..PKFLLLVAQKNHHTKFFQPTSPE...........................NVP
+PGTII...DNKICHPKNNDFYLCAHAGMIGTTRPTHYHVLYDEI...GFSADEL.QEL..
+....VHSLSYVYQRST....SAISV........VAPICYAHLAAAQLGTFMK
+>TAG76_CAEEL/660-966
+CIIVVLQS.KNSDI.YMTVKEQSDIVHGIMSQCVLMKNVSRP..............TPAT
+CANIVLKLNMKMGGIN..SRIVADKITNKYLVDQPTM.........VVGIDVTHPTQAE.
+......MRMNMPSVAAIVANVD.LLPQSYGANVKVQKKCRESVVY.LLD...........
+.AIRERIITFYRHTKQ.KPARIIVYRDGVSEGQFSEVLREEIQSIRTACL.......AIA
+.EDFR..PPITYIVVQKRHHARIFCKYQND.....................MVGKAKNVP
+PGTTV...DTGIVSPEGFDFYLCSHYGVQGTSRPARYHVLLDEC...KFTADEI.QSI..
+....TYGMCHTYGRCT....RSVSI........PTPVYYADLVATRARCHVK
+>O16720_CAEEL/566-867
+LIVVVLPG..KTPI.YAEVKRVGDTVLGIATQCVQAKNAIRT..............TPQT
+LSNLCLKMNVKLGGVNS.ILLPNVRPR...IFNEPVI.........FLGCDITHPAAGD.
+........TRKPSIAAVVGSMD.AHPSRYAATVRVQQHRQEIITD.LTY...........
+.MVRELLVQFYRNTRF.KPARIVVYRDGVSEGQLFNVLQYELRAIREACV.......MLE
+.SGYQ..PGITFIAVQKRHHTRLFAADKAD.....................QVGKAFNIP
+PGTTV...DVGITHPTEFDFFLCSHAGIQGTSRPSHYHVLWDDN...DLTADEL.QQL..
+....TYQMCHTYVRCT....RSVSI........papAYyaHLVAFRARYHLV
+>PINH_ARATH/625-946
+LLLAILPD.NNGSL.YGDLKRICETELGLISQCCLTKHVFKI..............SKQY
+LANVSLKINVKMGGRNT.VLVDAISCRIPLVSDIPTI.........IFGADVTHPENGE.
+........ESSPSIAAVVASQDWPEVTKYAGLVCAQAHRQELIQDLYKTWQDPVRGTVSG
+GMIRDLLISFRKATGQ.KPLRIIFYRDGVSEGQFYQVLLYELDAIRKACA.......SLE
+.PNYQ..PPVTFIVVQKRHHTRLFANNHRD...................KNSTDRSGNIL
+PGTVV...DTKICHPTEFDFYLCSHAGIQGTSRPAHYHVLWDEN...NFTADGI.QSL..
+....TNNLCYTYARCT....RSVSI........VPPAYYAHLAAFRARFYLE
+>AGO1_SCHPO/500-799
+YLFFILDK.NSPEP.YGSIKRVCNTMLGVPSQCAISKHILQS..............KPQY
+CANLGMKINVKVGGINC.SLIPKSNP....LGNVPTL.........ILGGDVYHPGVGA.
+.........TGVSIASIVASVD.LNGCKYTAVSRSQPRHQEVIEG.MKD...........
+.IVVYLLQGFRAMTKQ.QPQRIIYFRDGTSEGQFLSVINDELSQIKEACH.......SLS
+.PKYN..PKILVCTTQKRHHARFFIKNKSD......................GDRNGNPL
+PGTII...EKHVTHPYQYDFYLISHPSLQGVSVPVHYTVLHDEI...QMPPDQF.QTL..
+....CYNLCYVYARAT....SAVSL........VPPVYYAHLVSNLARYQDV
+>O76922_DROME/555-852
+IVMVVMRS.PNEEK.YSCIKKRTCVDRPVPSQVVTLKVIAPR.....QQ...KPTGLMSI
+ATKVVIQMNAKLMGA...PWQVVIPL.......HGLM.........TVGFDVCHSPKNK.
+..........NKSYGAFVATMDQKESFRYFSTVNEHIKGQELSEQ.MSV...........
+.NMACALRSYQEQHRS.LPERILFFRDGVGDGQLYQVVNSEVNTLKDRLDEI...YKSAG
+.KQEG..CRMTFIIVSKRINSRYFT.............................GHRNPV
+PGTVV...DDVITLPERYDFFLVSQAVRIGTVSPTSYNVISDNM...GLNADKL.QML..
+....SYKMTHMYYNYS....GTIRV........PAVCHYAHKLAFLVAESIN
+>PIWI_DROME/538-829
+LILCLVPN.DNAER.YSSIKKRGYVDRAVPTQVVTLKTTKNR.....SL........MSI
+ATKIAIQLNCKLGYT...PWMIELPL.......SGLM.........TIGFDIAKSTRDR.
+..........KRAYGALIASMDLQQNSTYFSTV.TECSAFDVLANTLWP...........
+.MIAKALRQYQHEHRK.LPSRIVFYRDGVSSGSLKQLFEFEVKDIIEKLKTE...YARVQ
+.LSP...PQLAYIVVTRSMNTRFFLN.............................GQNPP
+PGTIV...DDVITLPERYDFYLVSQQVRQGTVSPTSYNVLYSSM...GLSPEKM.QKL..
+....TYKMCHLYYNWS....GTTRV........PAVCQYAKKLATLVGTNLH
+>Q17567_CAEEL/397-708
+MLVVMLAD.DNKTR.YDSLKKYLCVECPIPNQCVNLRTLAGK.....SKDGGENKNLGSI
+VLKIVLQMICKTGGA...LWKVNIPL.......KSTM.........IVGYDLYHDSTLK.
+..........GKTVGACVSTTS.NDFTQFYSQTRPHENPTQLGNN.LTH...........
+.FVRKSLKQYYDNNDKTLPSRLILYRDGAGDGQIPYIKNTEVKLVRDACDAVTDKAAELS
+.NKVQEKIKLAFIIVTKRVNMRILKQGSSS.......................KSAINPQ
+PGTVV...DTTVTRPERMDFYLVPQFVNQGTVTPVSYNIIHDDT...GLGPDKH.QQL..
+....AFKLCHLYYNWQ....GTVRV........PAPCQYAHKLAFLTAQSLH
+>PIWL1_HUMAN/555-847
+IVVCLLSS.NRKDK.YDAIKKYLCTDCPTPSQCVVARTLGKQ.....QT.......VMAI
+ATKIALQMNCKMGGE...LWRVDIPL.......KLVM.........IVGIDCYHDMTAG.
+..........RRSIAGFVASIN.EGMTRWFSRCIFQDRGQELVDG.LKV...........
+.CLQAALRAW.NSCNEYMPSRIIVYRDGVGDGQLKTLVNYEVPQFLDCLK.......SIG
+.RGYN..PRLTVIVVKKRVNTRFFAQSGGR.........................LQNPL
+PGTVI...DVEVTRPEWYDFFIVSQAVRSGSVSPTHYNVIYDNS...GLKPDHI.QRL..
+....TYKLCHIYYNWP....GVIRV........PAPCQYAHKLAFLVGQSIH
+>PIWI_ARCFU/110-406
+GIMLVLPE.YNTPL.YYKLKSYLINS..IPSQFMRYDILSNR.....NL........TFY
+VDNLLVQFVSKLGGK...PWILNVDPEK....................GSDIIIGTGAT.
+.......RIDNVNLFCFAMVFK.KDGTMLWNEISPIVTSSEYLTY.LKS...........
+.TIKKVVYGFKKSNPDWDVEKLTLHVSG....KRPKMKDGETKILKETVE.......ELK
+.KQEMVSRDVKYAILHLNETHPFWVMGDPN........................NRFHPY
+EGTKVKLSSKRYLLTLLQPYLKRNGLEMVTPIKPLSVEIVSDN.....WTSEEYYHNVHE
+ILDEIYYLSKMNWRGF....RSRNL........PVTVNYPKLVAGIIANVNR
+>Y1321_METJA/426-699
+CFALIIGKEKYKDNDYYEILKKQLFDLKIISQNILWENWRKD.....DK........GYM
+TNNLLIQIMGKLGIK...YFILDSKTPYDY................IMGLDTGLGIFGN.
+...........HRVGGCTVVYDSEGKIRRIQPIETPAPGERLHLP...............
+.YVIEYLEN..KANIDMENKNILFLRDG.......FIQNSERNDLKEISK.......ELN
+.......SNIEVISIRKNNKYKVFTSDYRI........................GSVFGN
+DGIFLPHKTPFGSNPVKLSTWLRFNCGNEEGLK...IN.............ESI.MQL..
+....LYDLTKMNYSALYGEGRYLRI........PAPIHYADKFVKALGKNWK
+>O67434_AQUAE/419-694
+LVIVFLEEYPKVDP.YKSFLLYDFVKRELLKKMIPSQVILNR.....TL...KNENLKFV
+LLNVAEQVLAKTGNIP..YKLKEIEGKVDA................FVGIDISRITRDG.
+.........KTVNAVAFTKIFNSKGELVRYYLTSYPAFGEKLTEK...............
+.AIGDVFSLLEKLGF.KKGSKIVVHRDG.......RLYRDEVAAFK...........KYG
+.ELYG..YSLELLEIIKRNNPRFFSNEKFI..............................
+KGYFYKLSEDSVILATYNQVY.......EGTHQPIKVRKVYGE.....LPVEVL.CSQ..
+....ILSLTLMNYSSF....QPIKL........PATVHYSDKITKLMLRGIE
+>Q21495_CAEEL/52-336
+GIVLPTPRIFFRDG..........QETSLNNQSFRNPT...................DFA
+QTGFFVDAKQQLGGLN..YVVNS.....ETWNDSGLL.........LIGLSTAPYLNSY.
+.......SSENVTTIGFVSNTM.DHPQKFAGGYKYVKSGSDVFGQVMPE...........
+.ILLNSLRSARKARKI.KPMNIVIYLCGMSESRFSIVKEEYVRNCHSVFK.......TLG
+.EKYS..PQLTIIVGSKGHSTRLYARGERD........................QISNLQ
+PGTIV...DSVIVSPDYNKFFHCGAVARQGTCKATKYTVLYPE....SPKMEWI.QRM..
+....TNDLCYMHEIVF....HPVSL........PAPLYLTAEMAERGTKNLA
+>O16386_CAEEL/548-847
+QLIMFITK..SMNN.YHTEIKCLEQEFDLLTQDIRFETAVKL.....AQ.......QQNT
+RKNIIYKTNMKLGGLN..YELRS.....GVFSNSKRL.........IIGFETSQRGGLG.
+.........DAPIAIGFAANMM.SHSQQFAGGYMFVKKSADNYGPVIPE...........
+.ILLTILKQAKANRPNDRPDELLIYFSGVSEGQHALVNEYYANQVKAACG.......LFN
+.ESFR..PHITLILASKVHNTRVYKSENGG........................GVCNVE
+PGTVI...DHTIVSPVLSEWYHAGSLARQGTSKLVKYSLIFNTK...KNEKLSVYERL..
+....TNELCYEMQIVF....HPTSL........PIPLHIAGTYSERGSQMLA
+>O16386_CAEEL/879-1178
+QLIMFITK..SMNN.YHTEIKCLEQEFDLLTQDIRFETAVKL.....AQ.......QQNT
+RKNIIYKTNMKLGGLN..YELRS.....GVFSNSKRL.........IIGFETSQRGGLG.
+.........DAPIAIGFAANMM.SHSQQFAGGYMFVKKSADNYGPVIPE...........
+.ILLTILKQAKANRPNDRPDELLIYFSGVSEGQHALVNEYYANQVKAACG.......LFN
+.ESFR..PHITLILASKVHNTRVYKSENGG........................GVCNVE
+PGTVI...DHTIVSPVLSEWYHAGSLARQGTSKLVKYSLIFNTK...KNEKLSVYERL..
+....TNELCYEMQIVF....HPTSL........PIPLHIAGTYSERGSQMLA
+>O02095_CAEEL/574-878
+QLLFFVVK..SRYN.YHQQIKALEQKYDVLTQEIRAETAEKV.....FR.......QPQT
+RLNIINKTNMKLGGLN..YAIGS.....EAFNKPNRL.........IVGFVTSQRVGGN.
+........PDYPISVGFAANML.KHHQKFAGGYVYVHRDRDVFGSIIKD...........
+.TLLAIFKTCTEQRG..RPDDILLYFNGVSEGQFSMINEEFSARVKEACMAF...QKEGT
+.PPFR..PHITIIASSKAHNERLYKSDKGR.........................IVNLE
+PGTVV...DHTIVSNVYTEWYHASAVARQGTAKATKFTLIFTTKAGPQAEPLWHLEQL..
+....TNDLCYDHQIVF....HPVGL........PVPLYIADRYSQRGAMVLA
+>Q19645_CAEEL/674-996
+PFVLFISD..DVPN.IHECLKFEERMSDIPTQHVLLKNVKKMRDNIEKKSQGGRRAYDLT
+LDNIVMKANIKCGGLN..YT.ADIPRDLACWNEVSTF.........VIGMDVAHPDRNA.
+......AREGNPSTVGLSCNSA.ENPYSFIGDFLYTDPRREAIQDEILR...........
+KFTDQSVRNFAEIRG..FPKKVIIFRDGVSFGEETAALK.EVEIIEQTIKTA...AKSMG
+HSDYA..PKVLAIVVKKRHHTRFYAKGGHH......................GNMPINPL
+PDTSV...GGDIAEYGKRQIFIQAFRPVQGTAKVPSFLVIRDDE...EVSDEHV.AKM..
+....VCAVCSLHQLVN....SPTSI........PTPVYVAHELAKRGTGLYK
+>Q23415_CAEEL/40-350
+KFAFVITD.DSITH.LHKKYKALEQKSMMVIQDMKISKANSV.....VK.....DGKRLT
+LENVINKTNMKLGGLN..YTVSDAKKSMT....DEQL.........IIGVGVSAPPAGT.
+KYMMDNKGHLNPQIIGFASNA..VANHEFVGDFVLAPSGQDTMAS.IED...........
+.VLKSSIDLFEMNRNT.LPKRIIIYRSGASDGSHASILAYEIPLARATIQ.......GYS
+.KDIN....LIYIIVTKEHSYRFFRDQLRS....................GGKATEMNIP
+PGIVL...DSAVTNPACKQFFLNGHTTLQGTAKTPLYTILADDC...NAPMDRL.EEL..
+....TYTLCHHHQIVA....LSTSI........PTPLYVANEYAKRGRDLWS
+>O62275_CAEEL/594-924
+TFVFIITD.DSITT.LHQRYKMIEKDTKMIVQDMKLSKALSV..........INAGKRLT
+LENVINKTNVKLGGSN..YVFVDAKKQL.....DSHL.........IIGVGISAPPAGT.
+KYAMENKGVLNPNVIGYAYNA..QHNQEFSGDFVLNSASQDTLAP.IED...........
+.IVMHSLNEYQKFHDGGLPRRVIVYRTGTSEGNHGSIMAYEIPLARAAMR.......DFS
+.PDIQ....LVYIVVSKDHSFRFFKPDLASLASRPQATSSTASRHSAMPAAPKAWDLNIA
+PGILV...DSIVTNPACKQFFLNSHITLQGTAKTPLYTVLADDA...KVSMTAL.EDI..
+....TYKLCHLHQIVG....LPTSL........PTPLYVANEYAKRGRNLWN
diff --git a/test/data/PF02171_seed.msf b/test/data/PF02171_seed.msf
new file mode 100644
index 0000000..56c9493
--- /dev/null
+++ b/test/data/PF02171_seed.msf
@@ -0,0 +1,215 @@
+
+Align   MSF: 21  Type: P  Tue Apr 12 13:15:04 2011  Check: 00 ..
+
+ Name: YQ53_CAEEL/650-977     Len:    412  Check:  10  Weight:  1.00
+ Name: Q21691_CAEEL/673-1001  Len:    412  Check:  10  Weight:  1.00
+ Name: O48771_ARATH/542-860   Len:    412  Check:  10  Weight:  1.00
+ Name: Q9ZVD5_ARATH/577-885   Len:    412  Check:  10  Weight:  1.00
+ Name: TAG76_CAEEL/660-966    Len:    412  Check:  10  Weight:  1.00
+ Name: O16720_CAEEL/566-867   Len:    412  Check:  10  Weight:  1.00
+ Name: PINH_ARATH/625-946     Len:    412  Check:  10  Weight:  1.00
+ Name: AGO1_SCHPO/500-799     Len:    412  Check:  10  Weight:  1.00
+ Name: O76922_DROME/555-852   Len:    412  Check:  10  Weight:  1.00
+ Name: PIWI_DROME/538-829     Len:    412  Check:  10  Weight:  1.00
+ Name: Q17567_CAEEL/397-708   Len:    412  Check:  10  Weight:  1.00
+ Name: PIWL1_HUMAN/555-847    Len:    412  Check:  10  Weight:  1.00
+ Name: PIWI_ARCFU/110-406     Len:    412  Check:  10  Weight:  1.00
+ Name: Y1321_METJA/426-699    Len:    412  Check:  10  Weight:  1.00
+ Name: O67434_AQUAE/419-694   Len:    412  Check:  10  Weight:  1.00
+ Name: Q21495_CAEEL/52-336    Len:    412  Check:  10  Weight:  1.00
+ Name: O16386_CAEEL/548-847   Len:    412  Check:  10  Weight:  1.00
+ Name: O02095_CAEEL/574-878   Len:    412  Check:  10  Weight:  1.00
+ Name: Q19645_CAEEL/674-996   Len:    412  Check:  10  Weight:  1.00
+ Name: Q23415_CAEEL/40-350    Len:    412  Check:  10  Weight:  1.00
+ Name: O62275_CAEEL/594-924   Len:    412  Check:  10  Weight:  1.00
+
+//
+   YQ53_CAEEL/650-977  DILVGIAR.E KKPD.VHDIL KYFEESIGLQ TIQLCQQTVD KM.....MG. 
+Q21691_CAEEL/673-1001  TIVFGIIA.E KRPD.MHDIL KYFEEKLGQQ TIQISSETAD KF.....MR. 
+ O48771_ARATH/542-860  FILCILPERK TSDI.YGPWK KICLTEEGIH TQCICPIKI. .......... 
+ Q9ZVD5_ARATH/577-885  FILCVLPDKK NSDL.YGPWK KKNLTEFGIV TQCMAPTRQP ND........ 
+  TAG76_CAEEL/660-966  CIIVVLQS.K NSDI.YMTVK EQSDIVHGIM SQCVLMKNVS RP........ 
+ O16720_CAEEL/566-867  LIVVVLPG.. KTPI.YAEVK RVGDTVLGIA TQCVQAKNAI RT........ 
+   PINH_ARATH/625-946  LLLAILPD.N NGSL.YGDLK RICETELGLI SQCCLTKHVF KI........ 
+   AGO1_SCHPO/500-799  YLFFILDK.N SPEP.YGSIK RVCNTMLGVP SQCAISKHIL QS........ 
+ O76922_DROME/555-852  IVMVVMRS.P NEEK.YSCIK KRTCVDRPVP SQVVTLKVIA PR.....QQ. 
+   PIWI_DROME/538-829  LILCLVPN.D NAER.YSSIK KRGYVDRAVP TQVVTLKTTK NR.....SL. 
+ Q17567_CAEEL/397-708  MLVVMLAD.D NKTR.YDSLK KYLCVECPIP NQCVNLRTLA GK.....SKD 
+  PIWL1_HUMAN/555-847  IVVCLLSS.N RKDK.YDAIK KYLCTDCPTP SQCVVARTLG KQ.....QT. 
+   PIWI_ARCFU/110-406  GIMLVLPE.Y NTPL.YYKLK SYLINS..IP SQFMRYDILS NR.....NL. 
+  Y1321_METJA/426-699  CFALIIGKEK YKDNDYYEIL KKQLFDLKII SQNILWENWR KD.....DK. 
+ O67434_AQUAE/419-694  LVIVFLEEYP KVDP.YKSFL LYDFVKRELL KKMIPSQVIL NR.....TL. 
+  Q21495_CAEEL/52-336  GIVLPTPRIF FRDG...... ....QETSLN NQSFRNPT.. .......... 
+ O16386_CAEEL/548-847  QLIMFITK.. SMNN.YHTEI KCLEQEFDLL TQDIRFETAV KL.....AQ. 
+ O02095_CAEEL/574-878  QLLFFVVK.. SRYN.YHQQI KALEQKYDVL TQEIRAETAE KV.....FR. 
+ Q19645_CAEEL/674-996  PFVLFISD.. DVPN.IHECL KFEERMSDIP TQHVLLKNVK KMRDNIEKKS 
+  Q23415_CAEEL/40-350  KFAFVITD.D SITH.LHKKY KALEQKSMMV IQDMKISKAN SV.....VK. 
+ O62275_CAEEL/594-924  TFVFIITD.D SITT.LHQRY KMIEKDTKMI VQDMKLSKAL SV........ 
+   YQ53_CAEEL/650-977  ...GQGGRQT IDNVMRKFNL KCGGTNFFVE IPNAVRGKAV CSNNETLRKK 
+Q21691_CAEEL/673-1001  ...DHGGKQT IDNVIRKLNP KCGGTNFLID VPESVGHRVV CNNSAEMRAK 
+ O48771_ARATH/542-860  ......SDQY LTNVLLKINS KLGGINS.LL GIEYSYNIPL INKIPTL... 
+ Q9ZVD5_ARATH/577-885  ........QY LTNLLLKINA KLGGLNS.ML SVERTPAFTV ISKVPTI... 
+  TAG76_CAEEL/660-966  ......TPAT CANIVLKLNM KMGGIN..SR IVADKITNKY LVDQPTM... 
+ O16720_CAEEL/566-867  ......TPQT LSNLCLKMNV KLGGVNS.IL LPNVRPR... IFNEPVI... 
+   PINH_ARATH/625-946  ......SKQY LANVSLKINV KMGGRNT.VL VDAISCRIPL VSDIPTI... 
+   AGO1_SCHPO/500-799  ......KPQY CANLGMKINV KVGGINC.SL IPKSNP.... LGNVPTL... 
+ O76922_DROME/555-852  ..KPTGLMSI ATKVVIQMNA KLMGA...PW QVVIPL.... ...HGLM... 
+   PIWI_DROME/538-829  .......MSI ATKIAIQLNC KLGYT...PW MIELPL.... ...SGLM... 
+ Q17567_CAEEL/397-708  GGENKNLGSI VLKIVLQMIC KTGGA...LW KVNIPL.... ...KSTM... 
+  PIWL1_HUMAN/555-847  ......VMAI ATKIALQMNC KMGGE...LW RVDIPL.... ...KLVM... 
+   PIWI_ARCFU/110-406  .......TFY VDNLLVQFVS KLGGK...PW ILNVDPEK.. .......... 
+  Y1321_METJA/426-699  .......GYM TNNLLIQIMG KLGIK...YF ILDSKTPYDY .......... 
+ O67434_AQUAE/419-694  ..KNENLKFV LLNVAEQVLA KTGNIP..YK LKEIEGKVDA .......... 
+  Q21495_CAEEL/52-336  .......DFA QTGFFVDAKQ QLGGLN..YV VNS.....ET WNDSGLL... 
+ O16386_CAEEL/548-847  ......QQNT RKNIIYKTNM KLGGLN..YE LRS.....GV FSNSKRL... 
+ O02095_CAEEL/574-878  ......QPQT RLNIINKTNM KLGGLN..YA IGS.....EA FNKPNRL... 
+ Q19645_CAEEL/674-996  QGGRRAYDLT LDNIVMKANI KCGGLN..YT .ADIPRDLAC WNEVSTF... 
+  Q23415_CAEEL/40-350  ....DGKRLT LENVINKTNM KLGGLN..YT VSDAKKSMT. ...DEQL... 
+ O62275_CAEEL/594-924  ..INAGKRLT LENVINKTNV KLGGSN..YV FVDAKKQL.. ...DSHL... 
+   YQ53_CAEEL/650-977  LLEHVQFIGF EISHGASRTL FDRSRSQMDG EPSVVGVSYS LT...NSTQL 
+Q21691_CAEEL/673-1001  LYAKTQFIGF EMSHTGARTR FDIQKVMFDG DPTVVGVAYS L..KHSAQLG 
+ O48771_ARATH/542-860  ......ILGM DVSHGPPGR. ........AD VPSVAAVVGS KCWPLISRYR 
+ Q9ZVD5_ARATH/577-885  ......ILGM DVSHGSPGQ. ........SD VPSIAAVVSS REWPLISKYR 
+  TAG76_CAEEL/660-966  ......VVGI DVTHPTQAE. ......MRMN MPSVAAIVAN VD.LLPQSYG 
+ O16720_CAEEL/566-867  ......FLGC DITHPAAGD. ........TR KPSIAAVVGS MD.AHPSRYA 
+   PINH_ARATH/625-946  ......IFGA DVTHPENGE. ........ES SPSIAAVVAS QDWPEVTKYA 
+   AGO1_SCHPO/500-799  ......ILGG DVYHPGVGA. .........T GVSIASIVAS VD.LNGCKYT 
+ O76922_DROME/555-852  ......TVGF DVCHSPKNK. .......... NKSYGAFVAT MDQKESFRYF 
+   PIWI_DROME/538-829  ......TIGF DIAKSTRDR. .......... KRAYGALIAS MDLQQNSTYF 
+ Q17567_CAEEL/397-708  ......IVGY DLYHDSTLK. .......... GKTVGACVST TS.NDFTQFY 
+  PIWL1_HUMAN/555-847  ......IVGI DCYHDMTAG. .......... RRSIAGFVAS IN.EGMTRWF 
+   PIWI_ARCFU/110-406  ........GS DIIIGTGAT. .......RID NVNLFCFAMV FK.KDGTMLW 
+  Y1321_METJA/426-699  ......IMGL DTGLGIFGN. .......... .HRVGGCTVV YDSEGKIRRI 
+ O67434_AQUAE/419-694  ......FVGI DISRITRDG. .........K TVNAVAFTKI FNSKGELVRY 
+  Q21495_CAEEL/52-336  ......LIGL STAPYLNSY. .......SSE NVTTIGFVSN TM.DHPQKFA 
+ O16386_CAEEL/548-847  ......IIGF ETSQRGGLG. .........D APIAIGFAAN MM.SHSQQFA 
+ O02095_CAEEL/574-878  ......IVGF VTSQRVGGN. ........PD YPISVGFAAN ML.KHHQKFA 
+ Q19645_CAEEL/674-996  ......VIGM DVAHPDRNA. ......AREG NPSTVGLSCN SA.ENPYSFI 
+  Q23415_CAEEL/40-350  ......IIGV GVSAPPAGT. KYMMDNKGHL NPQIIGFASN A..VANHEFV 
+ O62275_CAEEL/594-924  ......IIGV GISAPPAGT. KYAMENKGVL NPNVIGYAYN A..QHNQEFS 
+   YQ53_CAEEL/650-977  GGFTYLQTQK EYKLQKLDE. .......... .FFPKCVRSY KEHSKT.LPT 
+Q21691_CAEEL/673-1001  GFSYFQESRL HKLTN.LQE. .......... .KMQICLNAY EQSSSY.LPE 
+ O48771_ARATH/542-860  AAVRTQSPRL EMIDSLFQP. .IENTEKGDN GIMNELFVEF YRTSRARKPK 
+ Q9ZVD5_ARATH/577-885  ASVRTQPSKA EMIESLVKK. ....NGTEDD GIIKELLVDF YTSSNKRKPE 
+  TAG76_CAEEL/660-966  ANVKVQKKCR ESVVY.LLD. .......... .AIRERIITF YRHTKQ.KPA 
+ O16720_CAEEL/566-867  ATVRVQQHRQ EIITD.LTY. .......... .MVRELLVQF YRNTRF.KPA 
+   PINH_ARATH/625-946  GLVCAQAHRQ ELIQDLYKTW QDPVRGTVSG GMIRDLLISF RKATGQ.KPL 
+   AGO1_SCHPO/500-799  AVSRSQPRHQ EVIEG.MKD. .......... .IVVYLLQGF RAMTKQ.QPQ 
+ O76922_DROME/555-852  STVNEHIKGQ ELSEQ.MSV. .......... .NMACALRSY QEQHRS.LPE 
+   PIWI_DROME/538-829  STV.TECSAF DVLANTLWP. .......... .MIAKALRQY QHEHRK.LPS 
+ Q17567_CAEEL/397-708  SQTRPHENPT QLGNN.LTH. .......... .FVRKSLKQY YDNNDKTLPS 
+  PIWL1_HUMAN/555-847  SRCIFQDRGQ ELVDG.LKV. .......... .CLQAALRAW .NSCNEYMPS 
+   PIWI_ARCFU/110-406  NEISPIVTSS EYLTY.LKS. .......... .TIKKVVYGF KKSNPDWDVE 
+  Y1321_METJA/426-699  QPIETPAPGE RLHLP..... .......... .YVIEYLEN. .KANIDMENK 
+ O67434_AQUAE/419-694  YLTSYPAFGE KLTEK..... .......... .AIGDVFSLL EKLGF.KKGS 
+  Q21495_CAEEL/52-336  GGYKYVKSGS DVFGQVMPE. .......... .ILLNSLRSA RKARKI.KPM 
+ O16386_CAEEL/548-847  GGYMFVKKSA DNYGPVIPE. .......... .ILLTILKQA KANRPNDRPD 
+ O02095_CAEEL/574-878  GGYVYVHRDR DVFGSIIKD. .......... .TLLAIFKTC TEQRG..RPD 
+ Q19645_CAEEL/674-996  GDFLYTDPRR EAIQDEILR. .......... KFTDQSVRNF AEIRG..FPK 
+  Q23415_CAEEL/40-350  GDFVLAPSGQ DTMAS.IED. .......... .VLKSSIDLF EMNRNT.LPK 
+ O62275_CAEEL/594-924  GDFVLNSASQ DTLAP.IED. .......... .IVMHSLNEY QKFHDGGLPR 
+   YQ53_CAEEL/650-977  RIVIYRVGAG EGNFNRVKE. EVEEMRRTFD .......KIQ .PGYR..PHL 
+Q21691_CAEEL/673-1001  TVVVYRVGSG EGDYPQIVN. EVNEMKLAAR .......KKK .HGYN..PKF 
+ O48771_ARATH/542-860  QIIIFRDGVS ESQFEQVLKI EVDQIIKAYQ .......RLG .ESDV..PKF 
+ Q9ZVD5_ARATH/577-885  HIIIFRDGVS ESQFNQVLNI ELDQIIEACK .......LLD .ANWN..PKF 
+  TAG76_CAEEL/660-966  RIIVYRDGVS EGQFSEVLRE EIQSIRTACL .......AIA .EDFR..PPI 
+ O16720_CAEEL/566-867  RIVVYRDGVS EGQLFNVLQY ELRAIREACV .......MLE .SGYQ..PGI 
+   PINH_ARATH/625-946  RIIFYRDGVS EGQFYQVLLY ELDAIRKACA .......SLE .PNYQ..PPV 
+   AGO1_SCHPO/500-799  RIIYFRDGTS EGQFLSVIND ELSQIKEACH .......SLS .PKYN..PKI 
+ O76922_DROME/555-852  RILFFRDGVG DGQLYQVVNS EVNTLKDRLD EI...YKSAG .KQEG..CRM 
+   PIWI_DROME/538-829  RIVFYRDGVS SGSLKQLFEF EVKDIIEKLK TE...YARVQ .LSP...PQL 
+ Q17567_CAEEL/397-708  RLILYRDGAG DGQIPYIKNT EVKLVRDACD AVTDKAAELS .NKVQEKIKL 
+  PIWL1_HUMAN/555-847  RIIVYRDGVG DGQLKTLVNY EVPQFLDCLK .......SIG .RGYN..PRL 
+   PIWI_ARCFU/110-406  KLTLHVSG.. ..KRPKMKDG ETKILKETVE .......ELK .KQEMVSRDV 
+  Y1321_METJA/426-699  NILFLRDG.. .....FIQNS ERNDLKEISK .......ELN .......SNI 
+ O67434_AQUAE/419-694  KIVVHRDG.. .....RLYRD EVAAFK.... .......KYG .ELYG..YSL 
+  Q21495_CAEEL/52-336  NIVIYLCGMS ESRFSIVKEE YVRNCHSVFK .......TLG .EKYS..PQL 
+ O16386_CAEEL/548-847  ELLIYFSGVS EGQHALVNEY YANQVKAACG .......LFN .ESFR..PHI 
+ O02095_CAEEL/574-878  DILLYFNGVS EGQFSMINEE FSARVKEACM AF...QKEGT .PPFR..PHI 
+ Q19645_CAEEL/674-996  KVIIFRDGVS FGEETAALK. EVEIIEQTIK TA...AKSMG HSDYA..PKV 
+  Q23415_CAEEL/40-350  RIIIYRSGAS DGSHASILAY EIPLARATIQ .......GYS .KDIN....L 
+ O62275_CAEEL/594-924  RVIVYRTGTS EGNHGSIMAY EIPLARAAMR .......DFS .PDIQ....L 
+   YQ53_CAEEL/650-977  VVIIAQRASH ARVFPSCISG .......... .......... .NRATDQNIP 
+Q21691_CAEEL/673-1001  LVICTQRNSH IRVFPEHINE .......... .......... RGKSMEQNVK 
+ O48771_ARATH/542-860  TVIVAQKNHH TKLFQAKGPE .......... .......... .......NVP 
+ Q9ZVD5_ARATH/577-885  LLLVAQKNHH TKFFQPTSPE .......... .......... .......NVP 
+  TAG76_CAEEL/660-966  TYIVVQKRHH ARIFCKYQND .......... .......... .MVGKAKNVP 
+ O16720_CAEEL/566-867  TFIAVQKRHH TRLFAADKAD .......... .......... .QVGKAFNIP 
+   PINH_ARATH/625-946  TFIVVQKRHH TRLFANNHRD .......... .........K NSTDRSGNIL 
+   AGO1_SCHPO/500-799  LVCTTQKRHH ARFFIKNKSD .......... .......... ..GDRNGNPL 
+ O76922_DROME/555-852  TFIIVSKRIN SRYFT..... .......... .......... ....GHRNPV 
+   PIWI_DROME/538-829  AYIVVTRSMN TRFFLN.... .......... .......... .....GQNPP 
+ Q17567_CAEEL/397-708  AFIIVTKRVN MRILKQGSSS .......... .......... ...KSAINPQ 
+  PIWL1_HUMAN/555-847  TVIVVKKRVN TRFFAQSGGR .......... .......... .....LQNPL 
+   PIWI_ARCFU/110-406  KYAILHLNET HPFWVMGDPN .......... .......... ....NRFHPY 
+  Y1321_METJA/426-699  EVISIRKNNK YKVFTSDYRI .......... .......... ....GSVFGN 
+ O67434_AQUAE/419-694  ELLEIIKRNN PRFFSNEKFI .......... .......... .......... 
+  Q21495_CAEEL/52-336  TIIVGSKGHS TRLYARGERD .......... .......... ....QISNLQ 
+ O16386_CAEEL/548-847  TLILASKVHN TRVYKSENGG .......... .......... ....GVCNVE 
+ O02095_CAEEL/574-878  TIIASSKAHN ERLYKSDKGR .......... .......... .....IVNLE 
+ Q19645_CAEEL/674-996  LAIVVKKRHH TRFYAKGGHH .......... .......... ..GNMPINPL 
+  Q23415_CAEEL/40-350  IYIIVTKEHS YRFFRDQLRS .......... .......... GGKATEMNIP 
+ O62275_CAEEL/594-924  VYIVVSKDHS FRFFKPDLAS LASRPQATSS TASRHSAMPA APKAWDLNIA 
+   YQ53_CAEEL/650-977  SGTCV...EN VLTSYGYDEF ILSSQTPLIG TVRPCKYTIL VNDA...KWS 
+Q21691_CAEEL/673-1001  SGTCV...DV PGASHGYEEF ILCCQTPLIG TVKPTKYTII VNDC...RWS 
+ O48771_ARATH/542-860  AGTVV...DT KIVHPTNYDF YMCAHAGKIG TSRPAHYHVL LDEI...GFS 
+ Q9ZVD5_ARATH/577-885  PGTII...DN KICHPKNNDF YLCAHAGMIG TTRPTHYHVL YDEI...GFS 
+  TAG76_CAEEL/660-966  PGTTV...DT GIVSPEGFDF YLCSHYGVQG TSRPARYHVL LDEC...KFT 
+ O16720_CAEEL/566-867  PGTTV...DV GITHPTEFDF FLCSHAGIQG TSRPSHYHVL WDDN...DLT 
+   PINH_ARATH/625-946  PGTVV...DT KICHPTEFDF YLCSHAGIQG TSRPAHYHVL WDEN...NFT 
+   AGO1_SCHPO/500-799  PGTII...EK HVTHPYQYDF YLISHPSLQG VSVPVHYTVL HDEI...QMP 
+ O76922_DROME/555-852  PGTVV...DD VITLPERYDF FLVSQAVRIG TVSPTSYNVI SDNM...GLN 
+   PIWI_DROME/538-829  PGTIV...DD VITLPERYDF YLVSQQVRQG TVSPTSYNVL YSSM...GLS 
+ Q17567_CAEEL/397-708  PGTVV...DT TVTRPERMDF YLVPQFVNQG TVTPVSYNII HDDT...GLG 
+  PIWL1_HUMAN/555-847  PGTVI...DV EVTRPEWYDF FIVSQAVRSG SVSPTHYNVI YDNS...GLK 
+   PIWI_ARCFU/110-406  EGTKVKLSSK RYLLTLLQPY LKRNGLEMVT PIKPLSVEIV SDN.....WT 
+  Y1321_METJA/426-699  DGIFLPHKTP FGSNPVKLST WLRFNCGNEE GLK...IN.. .......... 
+ O67434_AQUAE/419-694  KGYFYKLSED SVILATYNQV Y.......EG THQPIKVRKV YGE.....LP 
+  Q21495_CAEEL/52-336  PGTIV...DS VIVSPDYNKF FHCGAVARQG TCKATKYTVL YPE....SPK 
+ O16386_CAEEL/548-847  PGTVI...DH TIVSPVLSEW YHAGSLARQG TSKLVKYSLI FNTK...KNE 
+ O02095_CAEEL/574-878  PGTVV...DH TIVSNVYTEW YHASAVARQG TAKATKFTLI FTTKAGPQAE 
+ Q19645_CAEEL/674-996  PDTSV...GG DIAEYGKRQI FIQAFRPVQG TAKVPSFLVI RDDE...EVS 
+  Q23415_CAEEL/40-350  PGIVL...DS AVTNPACKQF FLNGHTTLQG TAKTPLYTIL ADDC...NAP 
+ O62275_CAEEL/594-924  PGILV...DS IVTNPACKQF FLNSHITLQG TAKTPLYTVL ADDA...KVS 
+   YQ53_CAEEL/650-977  KNEL.MHL.. ....TYFRAF GHQVSY.... QPPSV..... ...PDVLYAA 
+Q21691_CAEEL/673-1001  KNEI.MNV.. ....TYHLAF AHQVSY.... APPAI..... ...PNVSYAA 
+ O48771_ARATH/542-860  PDDL.QNL.. ....IHSLSY KLLNSI.... FNVSSLLCVF VLSVAPVRYA 
+ Q9ZVD5_ARATH/577-885  ADEL.QEL.. ....VHSLSY VYQRST.... SAISV..... ...VAPICYA 
+  TAG76_CAEEL/660-966  ADEI.QSI.. ....TYGMCH TYGRCT.... RSVSI..... ...PTPVYYA 
+ O16720_CAEEL/566-867  ADEL.QQL.. ....TYQMCH TYVRCT.... RSVSI..... ...PAPAYYA 
+   PINH_ARATH/625-946  ADGI.QSL.. ....TNNLCY TYARCT.... RSVSI..... ...VPPAYYA 
+   AGO1_SCHPO/500-799  PDQF.QTL.. ....CYNLCY VYARAT.... SAVSL..... ...VPPVYYA 
+ O76922_DROME/555-852  ADKL.QML.. ....SYKMTH MYYNYS.... GTIRV..... ...PAVCHYA 
+   PIWI_DROME/538-829  PEKM.QKL.. ....TYKMCH LYYNWS.... GTTRV..... ...PAVCQYA 
+ Q17567_CAEEL/397-708  PDKH.QQL.. ....AFKLCH LYYNWQ.... GTVRV..... ...PAPCQYA 
+  PIWL1_HUMAN/555-847  PDHI.QRL.. ....TYKLCH IYYNWP.... GVIRV..... ...PAPCQYA 
+   PIWI_ARCFU/110-406  SEEYYHNVHE ILDEIYYLSK MNWRGF.... RSRNL..... ...PVTVNYP 
+  Y1321_METJA/426-699  .ESI.MQL.. ....LYDLTK MNYSALYGEG RYLRI..... ...PAPIHYA 
+ O67434_AQUAE/419-694  VEVL.CSQ.. ....ILSLTL MNYSSF.... QPIKL..... ...PATVHYS 
+  Q21495_CAEEL/52-336  MEWI.QRM.. ....TNDLCY MHEIVF.... HPVSL..... ...PAPLYLT 
+ O16386_CAEEL/548-847  KLSVYERL.. ....TNELCY EMQIVF.... HPTSL..... ...PIPLHIA 
+ O02095_CAEEL/574-878  PLWHLEQL.. ....TNDLCY DHQIVF.... HPVGL..... ...PVPLYIA 
+ Q19645_CAEEL/674-996  DEHV.AKM.. ....VCAVCS LHQLVN.... SPTSI..... ...PTPVYVA 
+  Q23415_CAEEL/40-350  MDRL.EEL.. ....TYTLCH HHQIVA.... LSTSI..... ...PTPLYVA 
+ O62275_CAEEL/594-924  MTAL.EDI.. ....TYKLCH LHQIVG.... LPTSL..... ...PTPLYVA 
+   YQ53_CAEEL/650-977  ENLAKRGRNN YK 
+Q21691_CAEEL/673-1001  QNLAKRGHNN YK 
+ O48771_ARATH/542-860  HLAAAQVAQF TK 
+ Q9ZVD5_ARATH/577-885  HLAAAQLGTF MK 
+  TAG76_CAEEL/660-966  DLVATRARCH VK 
+ O16720_CAEEL/566-867  HLVAFRARYH LV 
+   PINH_ARATH/625-946  HLAAFRARFY LE 
+   AGO1_SCHPO/500-799  HLVSNLARYQ DV 
+ O76922_DROME/555-852  HKLAFLVAES IN 
+   PIWI_DROME/538-829  KKLATLVGTN LH 
+ Q17567_CAEEL/397-708  HKLAFLTAQS LH 
+  PIWL1_HUMAN/555-847  HKLAFLVGQS IH 
+   PIWI_ARCFU/110-406  KLVAGIIANV NR 
+  Y1321_METJA/426-699  DKFVKALGKN WK 
+ O67434_AQUAE/419-694  DKITKLMLRG IE 
+  Q21495_CAEEL/52-336  AEMAERGTKN LA 
+ O16386_CAEEL/548-847  GTYSERGSQM LA 
+ O02095_CAEEL/574-878  DRYSQRGAMV LA 
+ Q19645_CAEEL/674-996  HELAKRGTGL YK 
+  Q23415_CAEEL/40-350  NEYAKRGRDL WS 
+ O62275_CAEEL/594-924  NEYAKRGRNL WN 
diff --git a/test/data/PF02171_seed.scores b/test/data/PF02171_seed.scores
new file mode 100644
index 0000000..e2dc7ae
--- /dev/null
+++ b/test/data/PF02171_seed.scores
@@ -0,0 +1,33 @@
+99.87 YQ53_CAEEL/650-977     AC Q09249.1
+99.87 Q21691_CAEEL/673-1001  AC Q21691.1
+99.87 O48771_ARATH/542-860   AC O48771.1
+87.87 Q9ZVD5_ARATH/577-885   AC Q9ZVD5.2
+99.87 TAG76_CAEEL/660-966    AC P34681.2
+99.87 O16720_CAEEL/566-867   AC O16720.2
+43.00 PINH_ARATH/625-946     AC Q9XGW1.1
+99.87 AGO1_SCHPO/500-799     AC O74957.1
+99.87 O76922_DROME/555-852   AC O76922.1
+99.87 PIWI_DROME/538-829     AC Q9VKM1.1
+99.87 Q17567_CAEEL/397-708   AC Q17567.1
+80.005 PIWL1_HUMAN/555-847    AC Q96J94.1
+80.005 PIWI_ARCFU/110-406     AC O28951.1
+80.005 PIWI_ARCFU/110-406     DR PDB; 1w9h A; 110-406;
+80.005 PIWI_ARCFU/110-406     DR PDB; 2bgg A; 110-406;
+80.005 PIWI_ARCFU/110-406     DR PDB; 2bgg B; 110-406;
+80.005 PIWI_ARCFU/110-406     DR PDB; 1ytu A; 110-406;
+80.005 PIWI_ARCFU/110-406     DR PDB; 2w42 A; 110-406;
+80.005 PIWI_ARCFU/110-406     DR PDB; 2w42 B; 110-406;
+80.005 PIWI_ARCFU/110-406     DR PDB; 1ytu B; 110-406;
+80.005 Y1321_METJA/426-699    AC Q58717.1
+80.005 O67434_AQUAE/419-694   AC O67434.1
+80.005 O67434_AQUAE/419-694   DR PDB; 2nub A; 419-694;
+80.005 O67434_AQUAE/419-694   DR PDB; 1yvu A; 419-694;
+80.005 O67434_AQUAE/419-694   DR PDB; 2f8s A; 419-694;
+80.005 O67434_AQUAE/419-694   DR PDB; 2f8s B; 419-694;
+80.005 Q21495_CAEEL/52-336    AC Q21495.4
+80.005 O16386_CAEEL/548-847   AC O16386.1
+80.005 O02095_CAEEL/574-878   AC O02095.2
+80.005 Q19645_CAEEL/674-996   AC Q19645.1
+80.005 Q23415_CAEEL/40-350    AC Q23415.1
+80.005 O62275_CAEEL/594-924   AC O62275.1
+80.005 O75_CAEEL/594-924   AC O62275.1
diff --git a/test/data/PF02171_seed.segs b/test/data/PF02171_seed.segs
new file mode 100644
index 0000000..0cc46b6
--- /dev/null
+++ b/test/data/PF02171_seed.segs
@@ -0,0 +1,4 @@
+seg_match/3-30  20.0
+WLPLHTLinsertAACGEFYLVDSLLKH
+1 7 3 9  14 28 10 24
+
diff --git a/test/data/PF02171_seed.selex b/test/data/PF02171_seed.selex
new file mode 100644
index 0000000..47f5e83
--- /dev/null
+++ b/test/data/PF02171_seed.selex
@@ -0,0 +1,45 @@
+#=RF                                           **********Q**********
+YQ53_CAEEL/650-977           vgiAR.EKKPD.VHDILKYFEESIGLQTIQLCQQTVDKM.....MG....GQGGRQTIDNVMRKFNLKCGGTNFFVEIPNAVRGKAVCSNNETLRKKLLEHVQFIG
+Q21691_CAEEL/673-1001     TIVFGIIA.EKRPD.MHDILKYFEEKLGQQTIQISSETADKF.....MR....DHGGKQTIDNVIRKLNPKCGGTNFLIDVPESVGHRVVCNNSAEMRAKLYAKTQFIG
+O48771_ARATH/542-860      FILCILPERKTSDI.YGPWKKICLTEEGIHTQCICPIKI.................SDQYLTNVLLKINSKLGGINS.LLGIEYSYNIPLINKIPTL.........ILG
+Q9ZVD5_ARATH/577-885      FILCVLPDKKNSDL.YGPWKKKNLTEFGIVTQCMAPTRQPND................QYLTNLLLKINAKLGGLNS.MLSVERTPAFTVISKVPTI.........ILG
+TAG76_CAEEL/660-966       CIIVVLQS.KNSDI.YMTVKEQSDIVHGIMSQCVLMKNVSRP..............TPATCANIVLKLNMKMGGIN..SRIVADKITNKYLVDQPTM.........VVG
+O16720_CAEEL/566-867      LIVVVLPG..KTPI.YAEVKRVGDTVLGIATQCVQAKNAIRT..............TPQTLSNLCLKMNVKLGGVNS.ILLPNVRPR...IFNEPVI.........FLG
+PINH_ARATH/625-946        LLLAILPD.NNGSL.YGDLKRICETELGLISQCCLTKHVFKI..............SKQYLANVSLKINVKMGGRNT.VLVDAISCRIPLVSDIPTI.........IFG
+AGO1_SCHPO/500-799        YLFFILDK.NSPEP.YGSIKRVCNTMLGVPSQCAISKHILQS..............KPQYCANLGMKINVKVGGINC.SLIPKSNP....LGNVPTL.........ILG
+O76922_DROME/555-852      IVMVVMRS.PNEEK.YSCIKKRTCVDRPVPSQVVTLKVIAPR.....QQ...KPTGLMSIATKVVIQMNAKLMGA...PWQVVIPL.......HGLM.........TVG
+PIWI_DROME/538-829        LILCLVPN.DNAER.YSSIKKRGYVDRAVPTQVVTLKTTKNR.....SL........MSIATKIAIQLNCKLGYT...PWMIELPL.......SGLM.........TIG
+Q17567_CAEEL/397-708      MLVVMLAD.DNKTR.YDSLKKYLCVECPIPNQCVNLRTLAGK.....SKDGGENKNLGSIVLKIVLQMICKTGGA...LWKVNIPL.......KSTM.........IVG
+PIWL1_HUMAN/555-847       IVVCLLSS.NRKDK.YDAIKKYLCTDCPTPSQCVVARTLGKQ.....QT.......VMAIATKIALQMNCKMGGE...LWRVDIPL.......KLVM.........IVG
+PIWI_ARCFU/110-406        GIMLVLPE.YNTPL.YYKLKSYLINS..IPSQFMRYDILSNR.....NL........TFYVDNLLVQFVSKLGGK...PWILNVDPEK....................G
+Y1321_METJA/426-699       CFALIIGKEKYKDNDYYEILKKQLFDLKIISQNILWENWRKD.....DK........GYMTNNLLIQIMGKLGIK...YFILDSKTPYDY................IMG
+O67434_AQUAE/419-694      LVIVFLEEYPKVDP.YKSFLLYDFVKRELLKKMIPSQVILNR.....TL...KNENLKFVLLNVAEQVLAKTGNIP..YKLKEIEGKVDA................FVG
+Q21495_CAEEL/52-336       GIVLPTPRIFFRDG..........QETSLNNQSFRNPT...................DFAQTGFFVDAKQQLGGLN..YVVNS.....ETWNDSGLL.........LIG
+O16386_CAEEL/548-847      QLIMFITK..SMNN.YHTEIKCLEQEFDLLTQDIRFETAVKL.....AQ.......QQNTRKNIIYKTNMKLGGLN..YELRS.....GVFSNSKRL.........IIG
+O02095_CAEEL/574-878      QLLFFVVK..SRYN.YHQQIKALEQKYDVLTQEIRAETAEKV.....FR.......QPQTRLNIINKTNMKLGGLN..YAIGS.....EAFNKPNRL.........IVG
+Q19645_CAEEL/674-996      PFVLFISD..DVPN.IHECLKFEERMSDIPTQHVLLKNVKKMRDNIEKKSQGGRRAYDLTLDNIVMKANIKCGGLN..YT.ADIPRDLACWNEVSTF.........VIG
+Q23415_CAEEL/40-350       KFAFVITD.DSITH.LHKKYKALEQKSMMVIQDMKISKANSV.....VK.....DGKRLTLENVINKTNMKLGGLN..YTVSDAKKSMT....DEQL.........IIG
+O62275_CAEEL/594-924      TFVFIITD.DSITT.LHQRYKMIEKDTKMIVQDMKLSKALSV..........INAGKRLTLENVINKTNVKLGGSN..YVFVDAKKQL.....DSHL.........IIG
+
+#=RF                       
+YQ53_CAEEL/650-977         FEISHGASRTLFDRSRSQMDGEPSVVGVSYSLT...NSTQLGGFTYLQTQKEYKLQKLDE............FFPKCVRSYKEHSKT.LPTRIVIYRVGAGEGNFNRVKE.EVEEMRRTFD.......KIQ.PGYR..PHLVVIIAQRASHARVFPSCISG.....................NRATDQNIPSGTCV...ENVLTSYGYDEFILSSQTPLIGTVRPCKYTILVNDA...KWSKNEL.MHL......TYFRAFGHQVSY....QPPSV........PDVLYAAENLAKRGRNNYK
+Q21691_CAEEL/673-1001      FEMSHTGARTRFDIQKVMFDGDPTVVGVAYSL..KHSAQLGGFSYFQESRLHKLTN.LQE............KMQICLNAYEQSSSY.LPETVVVYRVGSGEGDYPQIVN.EVNEMKLAAR.......KKK.HGYN..PKFLVICTQRNSHIRVFPEHINE....................RGKSMEQNVKSGTCV...DVPGASHGYEEFILCCQTPLIGTVKPTKYTIIVNDC...RWSKNEI.MNV......TYHLAFAHQVSY....APPAI........PNVSYAAQNLAKRGHNNYK
+O48771_ARATH/542-860       MDVSHGPPGR.........ADVPSVAAVVGSKCWPLISRYRAAVRTQSPRLEMIDSLFQP..IENTEKGDNGIMNELFVEFYRTSRARKPKQIIIFRDGVSESQFEQVLKIEVDQIIKAYQ.......RLG.ESDV..PKFTVIVAQKNHHTKLFQAKGPE...........................NVPAGTVV...DTKIVHPTNYDFYMCAHAGKIGTSRPAHYHVLLDEI...GFSPDDL.QNL......IHSLSYKLLNSI....FNVSSLLCVFVLSVAPVRYAHLAAAQVAQFTK
+Q9ZVD5_ARATH/577-885       MDVSHGSPGQ.........SDVPSIAAVVSSREWPLISKYRASVRTQPSKAEMIESLVKK.....NGTEDDGIIKELLVDFYTSSNKRKPEHIIIFRDGVSESQFNQVLNIELDQIIEACK.......LLD.ANWN..PKFLLLVAQKNHHTKFFQPTSPE...........................NVPPGTII...DNKICHPKNNDFYLCAHAGMIGTTRPTHYHVLYDEI...GFSADEL.QEL......VHSLSYVYQRST....SAISV........VAPICYAHLAAAQLGTFMK
+TAG76_CAEEL/660-966        IDVTHPTQAE.......MRMNMPSVAAIVANVD.LLPQSYGANVKVQKKCRESVVY.LLD............AIRERIITFYRHTKQ.KPARIIVYRDGVSEGQFSEVLREEIQSIRTACL.......AIA.EDFR..PPITYIVVQKRHHARIFCKYQND.....................MVGKAKNVPPGTTV...DTGIVSPEGFDFYLCSHYGVQGTSRPARYHVLLDEC...KFTADEI.QSI......TYGMCHTYGRCT....RSVSI........PTPVYYADLVATRARCHVK
+O16720_CAEEL/566-867       CDITHPAAGD.........TRKPSIAAVVGSMD.AHPSRYAATVRVQQHRQEIITD.LTY............MVRELLVQFYRNTRF.KPARIVVYRDGVSEGQLFNVLQYELRAIREACV.......MLE.SGYQ..PGITFIAVQKRHHTRLFAADKAD.....................QVGKAFNIPPGTTV...DVGITHPTEFDFFLCSHAGIQGTSRPSHYHVLWDDN...DLTADEL.QQL......TYQMCHTYVRCT....RSVSI........PAPAYYAHLVAFRARYHLV
+PINH_ARATH/625-946         ADVTHPENGE.........ESSPSIAAVVASQDWPEVTKYAGLVCAQAHRQELIQDLYKTWQDPVRGTVSGGMIRDLLISFRKATGQ.KPLRIIFYRDGVSEGQFYQVLLYELDAIRKACA.......SLE.PNYQ..PPVTFIVVQKRHHTRLFANNHRD...................KNSTDRSGNILPGTVV...DTKICHPTEFDFYLCSHAGIQGTSRPAHYHVLWDEN...NFTADGI.QSL......TNNLCYTYARCT....RSVSI........VPPAYYAHLAAFRARFYLE
+AGO1_SCHPO/500-799         GDVYHPGVGA..........TGVSIASIVASVD.LNGCKYTAVSRSQPRHQEVIEG.MKD............IVVYLLQGFRAMTKQ.QPQRIIYFRDGTSEGQFLSVINDELSQIKEACH.......SLS.PKYN..PKILVCTTQKRHHARFFIKNKSD......................GDRNGNPLPGTII...EKHVTHPYQYDFYLISHPSLQGVSVPVHYTVLHDEI...QMPPDQF.QTL......CYNLCYVYARAT....SAVSL........VPPVYYAHLVSNLARYQDV
+O76922_DROME/555-852       FDVCHSPKNK...........NKSYGAFVATMDQKESFRYFSTVNEHIKGQELSEQ.MSV............NMACALRSYQEQHRS.LPERILFFRDGVGDGQLYQVVNSEVNTLKDRLDEI...YKSAG.KQEG..CRMTFIIVSKRINSRYFT.............................GHRNPVPGTVV...DDVITLPERYDFFLVSQAVRIGTVSPTSYNVISDNM...GLNADKL.QML......SYKMTHMYYNYS....GTIRV........PAVCHYAHKLAFLVAESIN
+PIWI_DROME/538-829         FDIAKSTRDR...........KRAYGALIASMDLQQNSTYFSTV.TECSAFDVLANTLWP............MIAKALRQYQHEHRK.LPSRIVFYRDGVSSGSLKQLFEFEVKDIIEKLKTE...YARVQ.LSP...PQLAYIVVTRSMNTRFFLN.............................GQNPPPGTIV...DDVITLPERYDFYLVSQQVRQGTVSPTSYNVLYSSM...GLSPEKM.QKL......TYKMCHLYYNWS....GTTRV........PAVCQYAKKLATLVGTNLH
+Q17567_CAEEL/397-708       YDLYHDSTLK...........GKTVGACVSTTS.NDFTQFYSQTRPHENPTQLGNN.LTH............FVRKSLKQYYDNNDKTLPSRLILYRDGAGDGQIPYIKNTEVKLVRDACDAVTDKAAELS.NKVQEKIKLAFIIVTKRVNMRILKQGSSS.......................KSAINPQPGTVV...DTTVTRPERMDFYLVPQFVNQGTVTPVSYNIIHDDT...GLGPDKH.QQL......AFKLCHLYYNWQ....GTVRV........PAPCQYAHKLAFLTAQSLH
+PIWL1_HUMAN/555-847        IDCYHDMTAG...........RRSIAGFVASIN.EGMTRWFSRCIFQDRGQELVDG.LKV............CLQAALRAW.NSCNEYMPSRIIVYRDGVGDGQLKTLVNYEVPQFLDCLK.......SIG.RGYN..PRLTVIVVKKRVNTRFFAQSGGR.........................LQNPLPGTVI...DVEVTRPEWYDFFIVSQAVRSGSVSPTHYNVIYDNS...GLKPDHI.QRL......TYKLCHIYYNWP....GVIRV........PAPCQYAHKLAFLVGQSIH
+PIWI_ARCFU/110-406         SDIIIGTGAT........RIDNVNLFCFAMVFK.KDGTMLWNEISPIVTSSEYLTY.LKS............TIKKVVYGFKKSNPDWDVEKLTLHVSG....KRPKMKDGETKILKETVE.......ELK.KQEMVSRDVKYAILHLNETHPFWVMGDPN........................NRFHPYEGTKVKLSSKRYLLTLLQPYLKRNGLEMVTPIKPLSVEIVSDN.....WTSEEYYHNVHEILDEIYYLSKMNWRGF....RSRNL........PVTVNYPKLVAGIIANVNR
+Y1321_METJA/426-699        LDTGLGIFGN............HRVGGCTVVYDSEGKIRRIQPIETPAPGERLHLP................YVIEYLEN..KANIDMENKNILFLRDG.......FIQNSERNDLKEISK.......ELN.......SNIEVISIRKNNKYKVFTSDYRI........................GSVFGNDGIFLPHKTPFGSNPVKLSTWLRFNCGNEEGLK...IN.............ESI.MQL......LYDLTKMNYSALYGEGRYLRI........PAPIHYADKFVKALGKNWK
+O67434_AQUAE/419-694       IDISRITRDG..........KTVNAVAFTKIFNSKGELVRYYLTSYPAFGEKLTEK................AIGDVFSLLEKLGF.KKGSKIVVHRDG.......RLYRDEVAAFK...........KYG.ELYG..YSLELLEIIKRNNPRFFSNEKFI..............................KGYFYKLSEDSVILATYNQVY.......EGTHQPIKVRKVYGE.....LPVEVL.CSQ......ILSLTLMNYSSF....QPIKL........PATVHYSDKITKLMLRGIE
+Q21495_CAEEL/52-336        LSTAPYLNSY........SSENVTTIGFVSNTM.DHPQKFAGGYKYVKSGSDVFGQVMPE............ILLNSLRSARKARKI.KPMNIVIYLCGMSESRFSIVKEEYVRNCHSVFK.......TLG.EKYS..PQLTIIVGSKGHSTRLYARGERD........................QISNLQPGTIV...DSVIVSPDYNKFFHCGAVARQGTCKATKYTVLYPE....SPKMEWI.QRM......TNDLCYMHEIVF....HPVSL........PAPLYLTAEMAERGTKNLA
+O16386_CAEEL/548-847       FETSQRGGLG..........DAPIAIGFAANMM.SHSQQFAGGYMFVKKSADNYGPVIPE............ILLTILKQAKANRPNDRPDELLIYFSGVSEGQHALVNEYYANQVKAACG.......LFN.ESFR..PHITLILASKVHNTRVYKSENGG........................GVCNVEPGTVI...DHTIVSPVLSEWYHAGSLARQGTSKLVKYSLIFNTK...KNEKLSVYERL......TNELCYEMQIVF....HPTSL........PIPLHIAGTYSERGSQMLA
+O02095_CAEEL/574-878       FVTSQRVGGN.........PDYPISVGFAANML.KHHQKFAGGYVYVHRDRDVFGSIIKD............TLLAIFKTCTEQRG..RPDDILLYFNGVSEGQFSMINEEFSARVKEACMAF...QKEGT.PPFR..PHITIIASSKAHNERLYKSDKGR.........................IVNLEPGTVV...DHTIVSNVYTEWYHASAVARQGTAKATKFTLIFTTKAGPQAEPLWHLEQL......TNDLCYDHQIVF....HPVGL........PVPLYIADRYSQRGAMVLA
+Q19645_CAEEL/674-996       MDVAHPDRNA.......AREGNPSTVGLSCNSA.ENPYSFIGDFLYTDPRREAIQDEILR...........KFTDQSVRNFAEIRG..FPKKVIIFRDGVSFGEETAALK.EVEIIEQTIKTA...AKSMGHSDYA..PKVLAIVVKKRHHTRFYAKGGHH......................GNMPINPLPDTSV...GGDIAEYGKRQIFIQAFRPVQGTAKVPSFLVIRDDE...EVSDEHV.AKM......VCAVCSLHQLVN....SPTSI........PTPVYVAHELAKRGTGLYK
+Q23415_CAEEL/40-350        VGVSAPPAGT.KYMMDNKGHLNPQIIGFASNA..VANHEFVGDFVLAPSGQDTMAS.IED............VLKSSIDLFEMNRNT.LPKRIIIYRSGASDGSHASILAYEIPLARATIQ.......GYS.KDIN....LIYIIVTKEHSYRFFRDQLRS....................GGKATEMNIPPGIVL...DSAVTNPACKQFFLNGHTTLQGTAKTPLYTILADDC...NAPMDRL.EEL......TYTLCHHHQIVA....LSTSI........PTPLYVANEYAKRGRDLWS
+O62275_CAEEL/594-924       VGISAPPAGT.KYAMENKGVLNPNVIGYAYNA..QHNQEFSGDFVLNSASQDTLAP.IED............IVMHSLNEYQKFHDGGLPRRVIVYRTGTSEGNHGSIMAYEIPLARAAMR.......DFS.PDIQ....LVYIVVSKDHSFRFFKPDLASLASRPQATSSTASRHSAMPAAPKAWDLNIAPGILV...DSIVTNPACKQFFLNSHITLQGTAKTPLYTVLADDA...KVSMTAL.EDI......TYKLCHLHQIVG....LPTSL........PTPLYVANEYAKRGRNLWN
diff --git a/test/data/PF02171_seed.stock b/test/data/PF02171_seed.stock
new file mode 100644
index 0000000..6337c18
--- /dev/null
+++ b/test/data/PF02171_seed.stock
@@ -0,0 +1,59 @@
+# STOCKHOLM 1.0
+#=GS YQ53_CAEEL/650-977     AC Q09249.1
+#=GS Q21691_CAEEL/673-1001  AC Q21691.1
+#=GS O48771_ARATH/542-860   AC O48771.1
+#=GS Q9ZVD5_ARATH/577-885   AC Q9ZVD5.2
+#=GS TAG76_CAEEL/660-966    AC P34681.2
+#=GS O16720_CAEEL/566-867   AC O16720.2
+#=GS PINH_ARATH/625-946     AC Q9XGW1.1
+#=GS AGO1_SCHPO/500-799     AC O74957.1
+#=GS O76922_DROME/555-852   AC O76922.1
+#=GS PIWI_DROME/538-829     AC Q9VKM1.1
+#=GS Q17567_CAEEL/397-708   AC Q17567.1
+#=GS PIWL1_HUMAN/555-847    AC Q96J94.1
+#=GS PIWI_ARCFU/110-406     AC O28951.1
+#=GS PIWI_ARCFU/110-406     DR PDB; 1w9h A; 110-406;
+#=GS PIWI_ARCFU/110-406     DR PDB; 2bgg A; 110-406;
+#=GS PIWI_ARCFU/110-406     DR PDB; 2bgg B; 110-406;
+#=GS PIWI_ARCFU/110-406     DR PDB; 1ytu A; 110-406;
+#=GS PIWI_ARCFU/110-406     DR PDB; 2w42 A; 110-406;
+#=GS PIWI_ARCFU/110-406     DR PDB; 2w42 B; 110-406;
+#=GS PIWI_ARCFU/110-406     DR PDB; 1ytu B; 110-406;
+#=GS Y1321_METJA/426-699    AC Q58717.1
+#=GS O67434_AQUAE/419-694   AC O67434.1
+#=GS O67434_AQUAE/419-694   DR PDB; 2nub A; 419-694;
+#=GS O67434_AQUAE/419-694   DR PDB; 1yvu A; 419-694;
+#=GS O67434_AQUAE/419-694   DR PDB; 2f8s A; 419-694;
+#=GS O67434_AQUAE/419-694   DR PDB; 2f8s B; 419-694;
+#=GS Q21495_CAEEL/52-336    AC Q21495.4
+#=GS O16386_CAEEL/548-847   AC O16386.1
+#=GS O02095_CAEEL/574-878   AC O02095.2
+#=GS Q19645_CAEEL/674-996   AC Q19645.1
+#=GS Q23415_CAEEL/40-350    AC Q23415.1
+#=GS O62275_CAEEL/594-924   AC O62275.1
+YQ53_CAEEL/650-977                DILVGIAR.EKKPD.VHDILKYFEESIGLQTIQLCQQTVDKM.....MG....GQGGRQTIDNVMRKFNLKCGGTNFFVEIPNAVRGKAVCSNNETLRKKLLEHVQFIGFEISHGASRTLFDRSRSQMDGEPSVVGVSYSLT...NSTQLGGFTYLQTQKEYKLQKLDE............FFPKCVRSYKEHSKT.LPTRIVIYRVGAGEGNFNRVKE.EVEEMRRTFD.......KIQ.PGYR..PHLVVIIAQRASHARVFPSCISG.....................NRATDQNIPSGTCV...ENVLTSYGYDEFILSSQTPLIGTVRPCKYTILVNDA...KWSKNEL.MHL......TYFRAFGHQVSY....QPPSV........PDVLYAAENLAKRGRNNYK
+Q21691_CAEEL/673-1001             TIVFGIIA.EKRPD.MHDILKYFEEKLGQQTIQISSETADKF.....MR....DHGGKQTIDNVIRKLNPKCGGTNFLIDVPESVGHRVVCNNSAEMRAKLYAKTQFIGFEMSHTGARTRFDIQKVMFDGDPTVVGVAYSL..KHSAQLGGFSYFQESRLHKLTN.LQE............KMQICLNAYEQSSSY.LPETVVVYRVGSGEGDYPQIVN.EVNEMKLAAR.......KKK.HGYN..PKFLVICTQRNSHIRVFPEHINE....................RGKSMEQNVKSGTCV...DVPGASHGYEEFILCCQTPLIGTVKPTKYTIIVNDC...RWSKNEI.MNV......TYHLAFAHQVSY....APPAI........PNVSYAAQNLAKRGHNNYK
+O48771_ARATH/542-860              FILCILPERKTSDI.YGPWKKICLTEEGIHTQCICPIKI.................SDQYLTNVLLKINSKLGGINS.LLGIEYSYNIPLINKIPTL.........ILGMDVSHGPPGR.........ADVPSVAAVVGSKCWPLISRYRAAVRTQSPRLEMIDSLFQP..IENTEKGDNGIMNELFVEFYRTSRARKPKQIIIFRDGVSESQFEQVLKIEVDQIIKAYQ.......RLG.ESDV..PKFTVIVAQKNHHTKLFQAKGPE...........................NVPAGTVV...DTKIVHPTNYDFYMCAHAGKIGTSRPAHYHVLLDEI...GFSPDDL.QNL......IHSLSYKLLNSI....FNVSSLLCVFVLSVAPVRYAHLAAAQVAQFTK
+Q9ZVD5_ARATH/577-885              FILCVLPDKKNSDL.YGPWKKKNLTEFGIVTQCMAPTRQPND................QYLTNLLLKINAKLGGLNS.MLSVERTPAFTVISKVPTI.........ILGMDVSHGSPGQ.........SDVPSIAAVVSSREWPLISKYRASVRTQPSKAEMIESLVKK.....NGTEDDGIIKELLVDFYTSSNKRKPEHIIIFRDGVSESQFNQVLNIELDQIIEACK.......LLD.ANWN..PKFLLLVAQKNHHTKFFQPTSPE...........................NVPPGTII...DNKICHPKNNDFYLCAHAGMIGTTRPTHYHVLYDEI...GFSADEL.QEL......VHSLSYVYQRST....SAISV........VAPICYAHLAAAQLGTFMK
+TAG76_CAEEL/660-966               CIIVVLQS.KNSDI.YMTVKEQSDIVHGIMSQCVLMKNVSRP..............TPATCANIVLKLNMKMGGIN..SRIVADKITNKYLVDQPTM.........VVGIDVTHPTQAE.......MRMNMPSVAAIVANVD.LLPQSYGANVKVQKKCRESVVY.LLD............AIRERIITFYRHTKQ.KPARIIVYRDGVSEGQFSEVLREEIQSIRTACL.......AIA.EDFR..PPITYIVVQKRHHARIFCKYQND.....................MVGKAKNVPPGTTV...DTGIVSPEGFDFYLCSHYGVQGTSRPARYHVLLDEC...KFTADEI.QSI......TYGMCHTYGRCT....RSVSI........PTPVYYADLVATRARCHVK
+O16720_CAEEL/566-867              LIVVVLPG..KTPI.YAEVKRVGDTVLGIATQCVQAKNAIRT..............TPQTLSNLCLKMNVKLGGVNS.ILLPNVRPR...IFNEPVI.........FLGCDITHPAAGD.........TRKPSIAAVVGSMD.AHPSRYAATVRVQQHRQEIITD.LTY............MVRELLVQFYRNTRF.KPARIVVYRDGVSEGQLFNVLQYELRAIREACV.......MLE.SGYQ..PGITFIAVQKRHHTRLFAADKAD.....................QVGKAFNIPPGTTV...DVGITHPTEFDFFLCSHAGIQGTSRPSHYHVLWDDN...DLTADEL.QQL......TYQMCHTYVRCT....RSVSI........PAPAYYAHLVAFRARYHLV
+PINH_ARATH/625-946                LLLAILPD.NNGSL.YGDLKRICETELGLISQCCLTKHVFKI..............SKQYLANVSLKINVKMGGRNT.VLVDAISCRIPLVSDIPTI.........IFGADVTHPENGE.........ESSPSIAAVVASQDWPEVTKYAGLVCAQAHRQELIQDLYKTWQDPVRGTVSGGMIRDLLISFRKATGQ.KPLRIIFYRDGVSEGQFYQVLLYELDAIRKACA.......SLE.PNYQ..PPVTFIVVQKRHHTRLFANNHRD...................KNSTDRSGNILPGTVV...DTKICHPTEFDFYLCSHAGIQGTSRPAHYHVLWDEN...NFTADGI.QSL......TNNLCYTYARCT....RSVSI........VPPAYYAHLAAFRARFYLE
+AGO1_SCHPO/500-799                YLFFILDK.NSPEP.YGSIKRVCNTMLGVPSQCAISKHILQS..............KPQYCANLGMKINVKVGGINC.SLIPKSNP....LGNVPTL.........ILGGDVYHPGVGA..........TGVSIASIVASVD.LNGCKYTAVSRSQPRHQEVIEG.MKD............IVVYLLQGFRAMTKQ.QPQRIIYFRDGTSEGQFLSVINDELSQIKEACH.......SLS.PKYN..PKILVCTTQKRHHARFFIKNKSD......................GDRNGNPLPGTII...EKHVTHPYQYDFYLISHPSLQGVSVPVHYTVLHDEI...QMPPDQF.QTL......CYNLCYVYARAT....SAVSL........VPPVYYAHLVSNLARYQDV
+O76922_DROME/555-852              IVMVVMRS.PNEEK.YSCIKKRTCVDRPVPSQVVTLKVIAPR.....QQ...KPTGLMSIATKVVIQMNAKLMGA...PWQVVIPL.......HGLM.........TVGFDVCHSPKNK...........NKSYGAFVATMDQKESFRYFSTVNEHIKGQELSEQ.MSV............NMACALRSYQEQHRS.LPERILFFRDGVGDGQLYQVVNSEVNTLKDRLDEI...YKSAG.KQEG..CRMTFIIVSKRINSRYFT.............................GHRNPVPGTVV...DDVITLPERYDFFLVSQAVRIGTVSPTSYNVISDNM...GLNADKL.QML......SYKMTHMYYNYS....GTIRV........PAVCHYAHKLAFLVAESIN
+PIWI_DROME/538-829                LILCLVPN.DNAER.YSSIKKRGYVDRAVPTQVVTLKTTKNR.....SL........MSIATKIAIQLNCKLGYT...PWMIELPL.......SGLM.........TIGFDIAKSTRDR...........KRAYGALIASMDLQQNSTYFSTV.TECSAFDVLANTLWP............MIAKALRQYQHEHRK.LPSRIVFYRDGVSSGSLKQLFEFEVKDIIEKLKTE...YARVQ.LSP...PQLAYIVVTRSMNTRFFLN.............................GQNPPPGTIV...DDVITLPERYDFYLVSQQVRQGTVSPTSYNVLYSSM...GLSPEKM.QKL......TYKMCHLYYNWS....GTTRV........PAVCQYAKKLATLVGTNLH
+Q17567_CAEEL/397-708              MLVVMLAD.DNKTR.YDSLKKYLCVECPIPNQCVNLRTLAGK.....SKDGGENKNLGSIVLKIVLQMICKTGGA...LWKVNIPL.......KSTM.........IVGYDLYHDSTLK...........GKTVGACVSTTS.NDFTQFYSQTRPHENPTQLGNN.LTH............FVRKSLKQYYDNNDKTLPSRLILYRDGAGDGQIPYIKNTEVKLVRDACDAVTDKAAELS.NKVQEKIKLAFIIVTKRVNMRILKQGSSS.......................KSAINPQPGTVV...DTTVTRPERMDFYLVPQFVNQGTVTPVSYNIIHDDT...GLGPDKH.QQL......AFKLCHLYYNWQ....GTVRV........PAPCQYAHKLAFLTAQSLH
+PIWL1_HUMAN/555-847               IVVCLLSS.NRKDK.YDAIKKYLCTDCPTPSQCVVARTLGKQ.....QT.......VMAIATKIALQMNCKMGGE...LWRVDIPL.......KLVM.........IVGIDCYHDMTAG...........RRSIAGFVASIN.EGMTRWFSRCIFQDRGQELVDG.LKV............CLQAALRAW.NSCNEYMPSRIIVYRDGVGDGQLKTLVNYEVPQFLDCLK.......SIG.RGYN..PRLTVIVVKKRVNTRFFAQSGGR.........................LQNPLPGTVI...DVEVTRPEWYDFFIVSQAVRSGSVSPTHYNVIYDNS...GLKPDHI.QRL......TYKLCHIYYNWP....GVIRV........PAPCQYAHKLAFLVGQSIH
+PIWI_ARCFU/110-406                GIMLVLPE.YNTPL.YYKLKSYLINS..IPSQFMRYDILSNR.....NL........TFYVDNLLVQFVSKLGGK...PWILNVDPEK....................GSDIIIGTGAT........RIDNVNLFCFAMVFK.KDGTMLWNEISPIVTSSEYLTY.LKS............TIKKVVYGFKKSNPDWDVEKLTLHVSG....KRPKMKDGETKILKETVE.......ELK.KQEMVSRDVKYAILHLNETHPFWVMGDPN........................NRFHPYEGTKVKLSSKRYLLTLLQPYLKRNGLEMVTPIKPLSVEIVSDN.....WTSEEYYHNVHEILDEIYYLSKMNWRGF....RSRNL........PVTVNYPKLVAGIIANVNR
+#=GR PIWI_ARCFU/110-406     SS    --EEEESS.S-HHH.HHHHHHHHHTT..S--EEEEHHHHCTS.....TH........HHHHHHHHHHHHHH----...--EE---TT-....................---EEE----E........ESSSSEEE-EEEEEE.----EEEEEE--SEEGGGHHHH.HHH............HHHHHH---TTTSTT---SEEEEEE--....---S-----HHHHHHHHH.......HHH.HTTSS-TT-EEEEEEEEE---EEEE--TT........................TT-------EEESSSSEEEEEEE-TCEE----EEEEEEEEEEEEEEEE-.....--TTTHHHHHHHHHHHHHHHTT------....---SS........-HHHHHHHHH---HHHHHH
+Y1321_METJA/426-699               CFALIIGKEKYKDNDYYEILKKQLFDLKIISQNILWENWRKD.....DK........GYMTNNLLIQIMGKLGIK...YFILDSKTPYDY................IMGLDTGLGIFGN............HRVGGCTVVYDSEGKIRRIQPIETPAPGERLHLP................YVIEYLEN..KANIDMENKNILFLRDG.......FIQNSERNDLKEISK.......ELN.......SNIEVISIRKNNKYKVFTSDYRI........................GSVFGNDGIFLPHKTPFGSNPVKLSTWLRFNCGNEEGLK...IN.............ESI.MQL......LYDLTKMNYSALYGEGRYLRI........PAPIHYADKFVKALGKNWK
+O67434_AQUAE/419-694              LVIVFLEEYPKVDP.YKSFLLYDFVKRELLKKMIPSQVILNR.....TL...KNENLKFVLLNVAEQVLAKTGNIP..YKLKEIEGKVDA................FVGIDISRITRDG..........KTVNAVAFTKIFNSKGELVRYYLTSYPAFGEKLTEK................AIGDVFSLLEKLGF.KKGSKIVVHRDG.......RLYRDEVAAFK...........KYG.ELYG..YSLELLEIIKRNNPRFFSNEKFI..............................KGYFYKLSEDSVILATYNQVY.......EGTHQPIKVRKVYGE.....LPVEVL.CSQ......ILSLTLMNYSSF....QPIKL........PATVHYSDKITKLMLRGIE
+#=GR O67434_AQUAE/419-694   SS    EEEEEE---S---S.SS--HHHHHHHHHHHHTT--EEEEEHH.....HH...HHS-HHHHHHHHHHHHHHH---BS..-EES------SE................EE--EEEEEE---..........-ECEEEEEEEEEE----EEEEEEEEETT---HHHHH................H---HHHHHHH---.----EEEEEE--.......---HHHHHHHH...........H--.----..-EEEEEEEE-SS---EEES-S--..............................---EEEETTTEEEE--S----.......---B--EEEEEEE--.....--HHHH.HHH......HHHHGGGG--TT....S--SS........-TTTTTHHHHHHHHH----
+Q21495_CAEEL/52-336               GIVLPTPRIFFRDG..........QETSLNNQSFRNPT...................DFAQTGFFVDAKQQLGGLN..YVVNS.....ETWNDSGLL.........LIGLSTAPYLNSY........SSENVTTIGFVSNTM.DHPQKFAGGYKYVKSGSDVFGQVMPE............ILLNSLRSARKARKI.KPMNIVIYLCGMSESRFSIVKEEYVRNCHSVFK.......TLG.EKYS..PQLTIIVGSKGHSTRLYARGERD........................QISNLQPGTIV...DSVIVSPDYNKFFHCGAVARQGTCKATKYTVLYPE....SPKMEWI.QRM......TNDLCYMHEIVF....HPVSL........PAPLYLTAEMAERGTKNLA
+O16386_CAEEL/548-847              QLIMFITK..SMNN.YHTEIKCLEQEFDLLTQDIRFETAVKL.....AQ.......QQNTRKNIIYKTNMKLGGLN..YELRS.....GVFSNSKRL.........IIGFETSQRGGLG..........DAPIAIGFAANMM.SHSQQFAGGYMFVKKSADNYGPVIPE............ILLTILKQAKANRPNDRPDELLIYFSGVSEGQHALVNEYYANQVKAACG.......LFN.ESFR..PHITLILASKVHNTRVYKSENGG........................GVCNVEPGTVI...DHTIVSPVLSEWYHAGSLARQGTSKLVKYSLIFNTK...KNEKLSVYERL......TNELCYEMQIVF....HPTSL........PIPLHIAGTYSERGSQMLA
+O02095_CAEEL/574-878              QLLFFVVK..SRYN.YHQQIKALEQKYDVLTQEIRAETAEKV.....FR.......QPQTRLNIINKTNMKLGGLN..YAIGS.....EAFNKPNRL.........IVGFVTSQRVGGN.........PDYPISVGFAANML.KHHQKFAGGYVYVHRDRDVFGSIIKD............TLLAIFKTCTEQRG..RPDDILLYFNGVSEGQFSMINEEFSARVKEACMAF...QKEGT.PPFR..PHITIIASSKAHNERLYKSDKGR.........................IVNLEPGTVV...DHTIVSNVYTEWYHASAVARQGTAKATKFTLIFTTKAGPQAEPLWHLEQL......TNDLCYDHQIVF....HPVGL........PVPLYIADRYSQRGAMVLA
+Q19645_CAEEL/674-996              PFVLFISD..DVPN.IHECLKFEERMSDIPTQHVLLKNVKKMRDNIEKKSQGGRRAYDLTLDNIVMKANIKCGGLN..YT.ADIPRDLACWNEVSTF.........VIGMDVAHPDRNA.......AREGNPSTVGLSCNSA.ENPYSFIGDFLYTDPRREAIQDEILR...........KFTDQSVRNFAEIRG..FPKKVIIFRDGVSFGEETAALK.EVEIIEQTIKTA...AKSMGHSDYA..PKVLAIVVKKRHHTRFYAKGGHH......................GNMPINPLPDTSV...GGDIAEYGKRQIFIQAFRPVQGTAKVPSFLVIRDDE...EVSDEHV.AKM......VCAVCSLHQLVN....SPTSI........PTPVYVAHELAKRGTGLYK
+Q23415_CAEEL/40-350               KFAFVITD.DSITH.LHKKYKALEQKSMMVIQDMKISKANSV.....VK.....DGKRLTLENVINKTNMKLGGLN..YTVSDAKKSMT....DEQL.........IIGVGVSAPPAGT.KYMMDNKGHLNPQIIGFASNA..VANHEFVGDFVLAPSGQDTMAS.IED............VLKSSIDLFEMNRNT.LPKRIIIYRSGASDGSHASILAYEIPLARATIQ.......GYS.KDIN....LIYIIVTKEHSYRFFRDQLRS....................GGKATEMNIPPGIVL...DSAVTNPACKQFFLNGHTTLQGTAKTPLYTILADDC...NAPMDRL.EEL......TYTLCHHHQIVA....LSTSI........PTPLYVANEYAKRGRDLWS
+O62275_CAEEL/594-924              TFVFIITD.DSITT.LHQRYKMIEKDTKMIVQDMKLSKALSV..........INAGKRLTLENVINKTNVKLGGSN..YVFVDAKKQL.....DSHL.........IIGVGISAPPAGT.KYAMENKGVLNPNVIGYAYNA..QHNQEFSGDFVLNSASQDTLAP.IED............IVMHSLNEYQKFHDGGLPRRVIVYRTGTSEGNHGSIMAYEIPLARAAMR.......DFS.PDIQ....LVYIVVSKDHSFRFFKPDLASLASRPQATSSTASRHSAMPAAPKAWDLNIAPGILV...DSIVTNPACKQFFLNSHITLQGTAKTPLYTVLADDA...KVSMTAL.EDI......TYKLCHLHQIVG....LPTSL........PTPLYVANEYAKRGRNLWN
+#=GC SS_cons                      EEEEEESS-S-HHC.CCHHHHHHHCCHHCHHCCEECCCCCCC.....CH...HHS-HHHHHHHHHHHHHHH---BS..-EEC---TT-SE................EE--EEEEEE--E........ESSCCEEEEEEEEEE----EEEEEEEEETCEGGHHHHH.HHH............HHHHHHHHHCCTSTT---SEEEEEE--.......S--HHHHHHHHHHHH.......HHH.HTTSS.TCEEEEEEEECC---EEEC-STT........................TT....---EEECTTTEEEEEEC-TCEE....EEEEEEEEEEEEEEEE-.....--CCCHHHHHHHHHHHHHHHCCGG--TT....S--SS........-CCCCCHHHHHHHHHHHHH
+#=GC seq_cons                     hllhllsc.pspst.YtshhKhhppchsl.oQslphcsh.ph...............tthhsNllhKhNsKlGGhN..hhlssh.h........sph.........llGhDlu+sssus..........tssolsuhsushs.ppsppahushphpppsp-hhss.lpp............hltphLpsapcpspp.hPp+IllYRDGsS-Gph.plhp.Elspl+cshc.......pls.psap..PplshIllpKpcpsRhFtpstsp.........................thNs.PGTlV...DsslspPsth-FaLsupsshpGTs+Ps+YsllhD-h...thss-cl.ppL......oapLCaha.psh....pslul........PsPlaYAcphAppstp.hc
+//
diff --git a/test/data/PF02171_seed_segs.stock b/test/data/PF02171_seed_segs.stock
new file mode 100644
index 0000000..1a35c22
--- /dev/null
+++ b/test/data/PF02171_seed_segs.stock
@@ -0,0 +1,63 @@
+# STOCKHOLM 1.0
+#=GS YQ53_CAEEL/650-977     AC Q09249.1
+#=GS Q21691_CAEEL/673-1001  AC Q21691.1
+#=GS O48771_ARATH/542-860   AC O48771.1
+#=GS Q9ZVD5_ARATH/577-885   AC Q9ZVD5.2
+#=GS TAG76_CAEEL/660-966    AC P34681.2
+#=GS O16720_CAEEL/566-867   AC O16720.2
+#=GS PINH_ARATH/625-946     AC Q9XGW1.1
+#=GS AGO1_SCHPO/500-799     AC O74957.1
+#=GS O76922_DROME/555-852   AC O76922.1
+#=GS PIWI_DROME/538-829     AC Q9VKM1.1
+#=GS Q17567_CAEEL/397-708   AC Q17567.1
+#=GS PIWL1_HUMAN/555-847    AC Q96J94.1
+#=GS PIWI_ARCFU/110-406     AC O28951.1
+#=GS PIWI_ARCFU/110-406     DR PDB; 1w9h A; 110-406;
+#=GS PIWI_ARCFU/110-406     DR PDB; 2bgg A; 110-406;
+#=GS PIWI_ARCFU/110-406     DR PDB; 2bgg B; 110-406;
+#=GS PIWI_ARCFU/110-406     DR PDB; 1ytu A; 110-406;
+#=GS PIWI_ARCFU/110-406     DR PDB; 2w42 A; 110-406;
+#=GS PIWI_ARCFU/110-406     DR PDB; 2w42 B; 110-406;
+#=GS PIWI_ARCFU/110-406     DR PDB; 1ytu B; 110-406;
+#=GS Y1321_METJA/426-699    AC Q58717.1
+#=GS O67434_AQUAE/419-694   AC O67434.1
+#=GS O67434_AQUAE/419-694   DR PDB; 2nub A; 419-694;
+#=GS O67434_AQUAE/419-694   DR PDB; 1yvu A; 419-694;
+#=GS O67434_AQUAE/419-694   DR PDB; 2f8s A; 419-694;
+#=GS O67434_AQUAE/419-694   DR PDB; 2f8s B; 419-694;
+#=GS Q21495_CAEEL/52-336    AC Q21495.4
+#=GS O16386_CAEEL/548-847   AC O16386.1
+#=GS O02095_CAEEL/574-878   AC O02095.2
+#=GS Q19645_CAEEL/674-996   AC Q19645.1
+#=GS Q23415_CAEEL/40-350    AC Q23415.1
+#=GS O62275_CAEEL/594-924   AC O62275.1
+YQ53_CAEEL/650-977                DILVGIAR.EKKPD.VHDILKYFEESIGLQTIQLCQQTVDKM.....MG....GQGGRQTIDNVMRKFNLKCGGTNFFVEIPNAVRGKAVCSNNETLRKKLLEHVQFIGFEISHGASRTLFDRSRSQMDGEPSVVGVSYSLT...NSTQLGGFTYLQTQKEYKLQKLDE............FFPKCVRSYKEHSKT.LPTRIVIYRVGAGEGNFNRVKE.EVEEMRRTFD.......KIQ.PGYR..PHLVVIIAQRASHARVFPSCISG.....................NRATDQNIPSGTCV...ENVLTSYGYDEFILSSQTPLIGTVRPCKYTILVNDA...KWSKNEL.MHL......TYFRAFGHQVSY....QPPSV........PDVLYAAENLAKRGRNNYK
+Q21691_CAEEL/673-1001             TIVFGIIA.EKRPD.MHDILKYFEEKLGQQTIQISSETADKF.....MR....DHGGKQTIDNVIRKLNPKCGGTNFLIDVPESVGHRVVCNNSAEMRAKLYAKTQFIGFEMSHTGARTRFDIQKVMFDGDPTVVGVAYSL..KHSAQLGGFSYFQESRLHKLTN.LQE............KMQICLNAYEQSSSY.LPETVVVYRVGSGEGDYPQIVN.EVNEMKLAAR.......KKK.HGYN..PKFLVICTQRNSHIRVFPEHINE....................RGKSMEQNVKSGTCV...DVPGASHGYEEFILCCQTPLIGTVKPTKYTIIVNDC...RWSKNEI.MNV......TYHLAFAHQVSY....APPAI........PNVSYAAQNLAKRGHNNYK
+O48771_ARATH/542-860              FILCILPERKTSDI.YGPWKKICLTEEGIHTQCICPIKI.................SDQYLTNVLLKINSKLGGINS.LLGIEYSYNIPLINKIPTL.........ILGMDVSHGPPGR.........ADVPSVAAVVGSKCWPLISRYRAAVRTQSPRLEMIDSLFQP..IENTEKGDNGIMNELFVEFYRTSRARKPKQIIIFRDGVSESQFEQVLKIEVDQIIKAYQ.......RLG.ESDV..PKFTVIVAQKNHHTKLFQAKGPE...........................NVPAGTVV...DTKIVHPTNYDFYMCAHAGKIGTSRPAHYHVLLDEI...GFSPDDL.QNL......IHSLSYKLLNSI....FNVSSLLCVFVLSVAPVRYAHLAAAQVAQFTK
+Q9ZVD5_ARATH/577-885              FILCVLPDKKNSDL.YGPWKKKNLTEFGIVTQCMAPTRQPND................QYLTNLLLKINAKLGGLNS.MLSVERTPAFTVISKVPTI.........ILGMDVSHGSPGQ.........SDVPSIAAVVSSREWPLISKYRASVRTQPSKAEMIESLVKK.....NGTEDDGIIKELLVDFYTSSNKRKPEHIIIFRDGVSESQFNQVLNIELDQIIEACK.......LLD.ANWN..PKFLLLVAQKNHHTKFFQPTSPE...........................NVPPGTII...DNKICHPKNNDFYLCAHAGMIGTTRPTHYHVLYDEI...GFSADEL.QEL......VHSLSYVYQRST....SAISV........VAPICYAHLAAAQLGTFMK
+TAG76_CAEEL/660-966               CIIVVLQS.KNSDI.YMTVKEQSDIVHGIMSQCVLMKNVSRP..............TPATCANIVLKLNMKMGGIN..SRIVADKITNKYLVDQPTM.........VVGIDVTHPTQAE.......MRMNMPSVAAIVANVD.LLPQSYGANVKVQKKCRESVVY.LLD............AIRERIITFYRHTKQ.KPARIIVYRDGVSEGQFSEVLREEIQSIRTACL.......AIA.EDFR..PPITYIVVQKRHHARIFCKYQND.....................MVGKAKNVPPGTTV...DTGIVSPEGFDFYLCSHYGVQGTSRPARYHVLLDEC...KFTADEI.QSI......TYGMCHTYGRCT....RSVSI........PTPVYYADLVATRARCHVK
+O16720_CAEEL/566-867              LIVVVLPG..KTPI.YAEVKRVGDTVLGIATQCVQAKNAIRT..............TPQTLSNLCLKMNVKLGGVNS.ILLPNVRPR...IFNEPVI.........FLGCDITHPAAGD.........TRKPSIAAVVGSMD.AHPSRYAATVRVQQHRQEIITD.LTY............MVRELLVQFYRNTRF.KPARIVVYRDGVSEGQLFNVLQYELRAIREACV.......MLE.SGYQ..PGITFIAVQKRHHTRLFAADKAD.....................QVGKAFNIPPGTTV...DVGITHPTEFDFFLCSHAGIQGTSRPSHYHVLWDDN...DLTADEL.QQL......TYQMCHTYVRCT....RSVSI........PAPAYYAHLVAFRARYHLV
+PINH_ARATH/625-946                LLLAILPD.NNGSL.YGDLKRICETELGLISQCCLTKHVFKI..............SKQYLANVSLKINVKMGGRNT.VLVDAISCRIPLVSDIPTI.........IFGADVTHPENGE.........ESSPSIAAVVASQDWPEVTKYAGLVCAQAHRQELIQDLYKTWQDPVRGTVSGGMIRDLLISFRKATGQ.KPLRIIFYRDGVSEGQFYQVLLYELDAIRKACA.......SLE.PNYQ..PPVTFIVVQKRHHTRLFANNHRD...................KNSTDRSGNILPGTVV...DTKICHPTEFDFYLCSHAGIQGTSRPAHYHVLWDEN...NFTADGI.QSL......TNNLCYTYARCT....RSVSI........VPPAYYAHLAAFRARFYLE
+AGO1_SCHPO/500-799                YLFFILDK.NSPEP.YGSIKRVCNTMLGVPSQCAISKHILQS..............KPQYCANLGMKINVKVGGINC.SLIPKSNP....LGNVPTL.........ILGGDVYHPGVGA..........TGVSIASIVASVD.LNGCKYTAVSRSQPRHQEVIEG.MKD............IVVYLLQGFRAMTKQ.QPQRIIYFRDGTSEGQFLSVINDELSQIKEACH.......SLS.PKYN..PKILVCTTQKRHHARFFIKNKSD......................GDRNGNPLPGTII...EKHVTHPYQYDFYLISHPSLQGVSVPVHYTVLHDEI...QMPPDQF.QTL......CYNLCYVYARAT....SAVSL........VPPVYYAHLVSNLARYQDV
+O76922_DROME/555-852              IVMVVMRS.PNEEK.YSCIKKRTCVDRPVPSQVVTLKVIAPR.....QQ...KPTGLMSIATKVVIQMNAKLMGA...PWQVVIPL.......HGLM.........TVGFDVCHSPKNK...........NKSYGAFVATMDQKESFRYFSTVNEHIKGQELSEQ.MSV............NMACALRSYQEQHRS.LPERILFFRDGVGDGQLYQVVNSEVNTLKDRLDEI...YKSAG.KQEG..CRMTFIIVSKRINSRYFT.............................GHRNPVPGTVV...DDVITLPERYDFFLVSQAVRIGTVSPTSYNVISDNM...GLNADKL.QML......SYKMTHMYYNYS....GTIRV........PAVCHYAHKLAFLVAESIN
+PIWI_DROME/538-829                LILCLVPN.DNAER.YSSIKKRGYVDRAVPTQVVTLKTTKNR.....SL........MSIATKIAIQLNCKLGYT...PWMIELPL.......SGLM.........TIGFDIAKSTRDR...........KRAYGALIASMDLQQNSTYFSTV.TECSAFDVLANTLWP............MIAKALRQYQHEHRK.LPSRIVFYRDGVSSGSLKQLFEFEVKDIIEKLKTE...YARVQ.LSP...PQLAYIVVTRSMNTRFFLN.............................GQNPPPGTIV...DDVITLPERYDFYLVSQQVRQGTVSPTSYNVLYSSM...GLSPEKM.QKL......TYKMCHLYYNWS....GTTRV........PAVCQYAKKLATLVGTNLH
+Q17567_CAEEL/397-708              MLVVMLAD.DNKTR.YDSLKKYLCVECPIPNQCVNLRTLAGK.....SKDGGENKNLGSIVLKIVLQMICKTGGA...LWKVNIPL.......KSTM.........IVGYDLYHDSTLK...........GKTVGACVSTTS.NDFTQFYSQTRPHENPTQLGNN.LTH............FVRKSLKQYYDNNDKTLPSRLILYRDGAGDGQIPYIKNTEVKLVRDACDAVTDKAAELS.NKVQEKIKLAFIIVTKRVNMRILKQGSSS.......................KSAINPQPGTVV...DTTVTRPERMDFYLVPQFVNQGTVTPVSYNIIHDDT...GLGPDKH.QQL......AFKLCHLYYNWQ....GTVRV........PAPCQYAHKLAFLTAQSLH
+PIWL1_HUMAN/555-847               IVVCLLSS.NRKDK.YDAIKKYLCTDCPTPSQCVVARTLGKQ.....QT.......VMAIATKIALQMNCKMGGE...LWRVDIPL.......KLVM.........IVGIDCYHDMTAG...........RRSIAGFVASIN.EGMTRWFSRCIFQDRGQELVDG.LKV............CLQAALRAW.NSCNEYMPSRIIVYRDGVGDGQLKTLVNYEVPQFLDCLK.......SIG.RGYN..PRLTVIVVKKRVNTRFFAQSGGR.........................LQNPLPGTVI...DVEVTRPEWYDFFIVSQAVRSGSVSPTHYNVIYDNS...GLKPDHI.QRL......TYKLCHIYYNWP....GVIRV........PAPCQYAHKLAFLVGQSIH
+PIWI_ARCFU/110-406                GIMLVLPE.YNTPL.YYKLKSYLINS..IPSQFMRYDILSNR.....NL........TFYVDNLLVQFVSKLGGK...PWILNVDPEK....................GSDIIIGTGAT........RIDNVNLFCFAMVFK.KDGTMLWNEISPIVTSSEYLTY.LKS............TIKKVVYGFKKSNPDWDVEKLTLHVSG....KRPKMKDGETKILKETVE.......ELK.KQEMVSRDVKYAILHLNETHPFWVMGDPN........................NRFHPYEGTKVKLSSKRYLLTLLQPYLKRNGLEMVTPIKPLSVEIVSDN.....WTSEEYYHNVHEILDEIYYLSKMNWRGF....RSRNL........PVTVNYPKLVAGIIANVNR
+#=GR PIWI_ARCFU/110-406     SS    --EEEESS.S-HHH.HHHHHHHHHTT..S--EEEEHHHHCTS.....TH........HHHHHHHHHHHHHH----...--EE---TT-....................---EEE----E........ESSSSEEE-EEEEEE.----EEEEEE--SEEGGGHHHH.HHH............HHHHHH---TTTSTT---SEEEEEE--....---S-----HHHHHHHHH.......HHH.HTTSS-TT-EEEEEEEEE---EEEE--TT........................TT-------EEESSSSEEEEEEE-TCEE----EEEEEEEEEEEEEEEE-.....--TTTHHHHHHHHHHHHHHHTT------....---SS........-HHHHHHHHH---HHHHHH
+Y1321_METJA/426-699               CFALIIGKEKYKDNDYYEILKKQLFDLKIISQNILWENWRKD.....DK........GYMTNNLLIQIMGKLGIK...YFILDSKTPYDY................IMGLDTGLGIFGN............HRVGGCTVVYDSEGKIRRIQPIETPAPGERLHLP................YVIEYLEN..KANIDMENKNILFLRDG.......FIQNSERNDLKEISK.......ELN.......SNIEVISIRKNNKYKVFTSDYRI........................GSVFGNDGIFLPHKTPFGSNPVKLSTWLRFNCGNEEGLK...IN.............ESI.MQL......LYDLTKMNYSALYGEGRYLRI........PAPIHYADKFVKALGKNWK
+O67434_AQUAE/419-694              LVIVFLEEYPKVDP.YKSFLLYDFVKRELLKKMIPSQVILNR.....TL...KNENLKFVLLNVAEQVLAKTGNIP..YKLKEIEGKVDA................FVGIDISRITRDG..........KTVNAVAFTKIFNSKGELVRYYLTSYPAFGEKLTEK................AIGDVFSLLEKLGF.KKGSKIVVHRDG.......RLYRDEVAAFK...........KYG.ELYG..YSLELLEIIKRNNPRFFSNEKFI..............................KGYFYKLSEDSVILATYNQVY.......EGTHQPIKVRKVYGE.....LPVEVL.CSQ......ILSLTLMNYSSF....QPIKL........PATVHYSDKITKLMLRGIE
+#=GR O67434_AQUAE/419-694   SS    EEEEEE---S---S.SS--HHHHHHHHHHHHTT--EEEEEHH.....HH...HHS-HHHHHHHHHHHHHHH---BS..-EES------SE................EE--EEEEEE---..........-ECEEEEEEEEEE----EEEEEEEEETT---HHHHH................H---HHHHHHH---.----EEEEEE--.......---HHHHHHHH...........H--.----..-EEEEEEEE-SS---EEES-S--..............................---EEEETTTEEEE--S----.......---B--EEEEEEE--.....--HHHH.HHH......HHHHGGGG--TT....S--SS........-TTTTTHHHHHHHHH----
+Q21495_CAEEL/52-336               GIVLPTPRIFFRDG..........QETSLNNQSFRNPT...................DFAQTGFFVDAKQQLGGLN..YVVNS.....ETWNDSGLL.........LIGLSTAPYLNSY........SSENVTTIGFVSNTM.DHPQKFAGGYKYVKSGSDVFGQVMPE............ILLNSLRSARKARKI.KPMNIVIYLCGMSESRFSIVKEEYVRNCHSVFK.......TLG.EKYS..PQLTIIVGSKGHSTRLYARGERD........................QISNLQPGTIV...DSVIVSPDYNKFFHCGAVARQGTCKATKYTVLYPE....SPKMEWI.QRM......TNDLCYMHEIVF....HPVSL........PAPLYLTAEMAERGTKNLA
+O16386_CAEEL/548-847              QLIMFITK..SMNN.YHTEIKCLEQEFDLLTQDIRFETAVKL.....AQ.......QQNTRKNIIYKTNMKLGGLN..YELRS.....GVFSNSKRL.........IIGFETSQRGGLG..........DAPIAIGFAANMM.SHSQQFAGGYMFVKKSADNYGPVIPE............ILLTILKQAKANRPNDRPDELLIYFSGVSEGQHALVNEYYANQVKAACG.......LFN.ESFR..PHITLILASKVHNTRVYKSENGG........................GVCNVEPGTVI...DHTIVSPVLSEWYHAGSLARQGTSKLVKYSLIFNTK...KNEKLSVYERL......TNELCYEMQIVF....HPTSL........PIPLHIAGTYSERGSQMLA
+O02095_CAEEL/574-878              QLLFFVVK..SRYN.YHQQIKALEQKYDVLTQEIRAETAEKV.....FR.......QPQTRLNIINKTNMKLGGLN..YAIGS.....EAFNKPNRL.........IVGFVTSQRVGGN.........PDYPISVGFAANML.KHHQKFAGGYVYVHRDRDVFGSIIKD............TLLAIFKTCTEQRG..RPDDILLYFNGVSEGQFSMINEEFSARVKEACMAF...QKEGT.PPFR..PHITIIASSKAHNERLYKSDKGR.........................IVNLEPGTVV...DHTIVSNVYTEWYHASAVARQGTAKATKFTLIFTTKAGPQAEPLWHLEQL......TNDLCYDHQIVF....HPVGL........PVPLYIADRYSQRGAMVLA
+Q19645_CAEEL/674-996              PFVLFISD..DVPN.IHECLKFEERMSDIPTQHVLLKNVKKMRDNIEKKSQGGRRAYDLTLDNIVMKANIKCGGLN..YT.ADIPRDLACWNEVSTF.........VIGMDVAHPDRNA.......AREGNPSTVGLSCNSA.ENPYSFIGDFLYTDPRREAIQDEILR...........KFTDQSVRNFAEIRG..FPKKVIIFRDGVSFGEETAALK.EVEIIEQTIKTA...AKSMGHSDYA..PKVLAIVVKKRHHTRFYAKGGHH......................GNMPINPLPDTSV...GGDIAEYGKRQIFIQAFRPVQGTAKVPSFLVIRDDE...EVSDEHV.AKM......VCAVCSLHQLVN....SPTSI........PTPVYVAHELAKRGTGLYK
+Q23415_CAEEL/40-350               KFAFVITD.DSITH.LHKKYKALEQKSMMVIQDMKISKANSV.....VK.....DGKRLTLENVINKTNMKLGGLN..YTVSDAKKSMT....DEQL.........IIGVGVSAPPAGT.KYMMDNKGHLNPQIIGFASNA..VANHEFVGDFVLAPSGQDTMAS.IED............VLKSSIDLFEMNRNT.LPKRIIIYRSGASDGSHASILAYEIPLARATIQ.......GYS.KDIN....LIYIIVTKEHSYRFFRDQLRS....................GGKATEMNIPPGIVL...DSAVTNPACKQFFLNGHTTLQGTAKTPLYTILADDC...NAPMDRL.EEL......TYTLCHHHQIVA....LSTSI........PTPLYVANEYAKRGRDLWS
+O62275_CAEEL/594-924              TFVFIITD.DSITT.LHQRYKMIEKDTKMIVQDMKLSKALSV..........INAGKRLTLENVINKTNVKLGGSN..YVFVDAKKQL.....DSHL.........IIGVGISAPPAGT.KYAMENKGVLNPNVIGYAYNA..QHNQEFSGDFVLNSASQDTLAP.IED............IVMHSLNEYQKFHDGGLPRRVIVYRTGTSEGNHGSIMAYEIPLARAAMR.......DFS.PDIQ....LVYIVVSKDHSFRFFKPDLASLASRPQATSSTASRHSAMPAAPKAWDLNIAPGILV...DSIVTNPACKQFFLNSHITLQGTAKTPLYTVLADDA...KVSMTAL.EDI......TYKLCHLHQIVG....LPTSL........PTPLYVANEYAKRGRNLWN
+#=GC SS_cons                      EEEEEESS-S-HHC.CCHHHHHHHCCHHCHHCCEECCCCCCC.....CH...HHS-HHHHHHHHHHHHHHH---BS..-EEC---TT-SE................EE--EEEEEE--E........ESSCCEEEEEEEEEE----EEEEEEEEETCEGGHHHHH.HHH............HHHHHHHHHCCTSTT---SEEEEEE--.......S--HHHHHHHHHHHH.......HHH.HTTSS.TCEEEEEEEECC---EEEC-STT........................TT....---EEECTTTEEEEEEC-TCEE....EEEEEEEEEEEEEEEE-.....--CCCHHHHHHHHHHHHHHHCCGG--TT....S--SS........-CCCCCHHHHHHHHHHHHH
+#=GC seq_cons                     hllhllsc.pspst.YtshhKhhppchsl.oQslphcsh.ph...............tthhsNllhKhNsKlGGhN..hhlssh.h........sph.........llGhDlu+sssus..........tssolsuhsushs.ppsppahushphpppsp-hhss.lpp............hltphLpsapcpspp.hPp+IllYRDGsS-Gph.plhp.Elspl+cshc.......pls.psap..PplshIllpKpcpsRhFtpstsp.........................thNs.PGTlV...DsslspPsth-FaLsupsshpGTs+Ps+YsllhD-h...thss-cl.ppL......oapLCaha.psh....pslul........PsPlaYAcphAppstp.hc
+# matchFooter
+seg_match/3-30  20.0
+WLPLHTLinsertAACGEFYLVDSLLKH
+1 7 3 9  14 28 10 24
+//
diff --git a/test/data/PF02171_seed_separator.stock b/test/data/PF02171_seed_separator.stock
new file mode 100644
index 0000000..bdbd550
--- /dev/null
+++ b/test/data/PF02171_seed_separator.stock
@@ -0,0 +1,59 @@
+# STOCKHOLM 1.0
+#=GS YQ53_CAEEL=650-977     AC Q09249.1
+#=GS Q21691_CAEEL=673-1001  AC Q21691.1
+#=GS O48771_ARATH=542-860   AC O48771.1
+#=GS Q9ZVD5_ARATH=577-885   AC Q9ZVD5.2
+#=GS TAG76_CAEEL=660-966    AC P34681.2
+#=GS O16720_CAEEL=566-867   AC O16720.2
+#=GS PINH_ARATH=625-946     AC Q9XGW1.1
+#=GS AGO1_SCHPO=500-799     AC O74957.1
+#=GS O76922_DROME=555-852   AC O76922.1
+#=GS PIWI_DROME=538-829     AC Q9VKM1.1
+#=GS Q17567_CAEEL=397-708   AC Q17567.1
+#=GS PIWL1_HUMAN=555-847    AC Q96J94.1
+#=GS PIWI_ARCFU=110-406     AC O28951.1
+#=GS PIWI_ARCFU=110-406     DR PDB; 1w9h A; 110-406;
+#=GS PIWI_ARCFU=110-406     DR PDB; 2bgg A; 110-406;
+#=GS PIWI_ARCFU=110-406     DR PDB; 2bgg B; 110-406;
+#=GS PIWI_ARCFU=110-406     DR PDB; 1ytu A; 110-406;
+#=GS PIWI_ARCFU=110-406     DR PDB; 2w42 A; 110-406;
+#=GS PIWI_ARCFU=110-406     DR PDB; 2w42 B; 110-406;
+#=GS PIWI_ARCFU=110-406     DR PDB; 1ytu B; 110-406;
+#=GS Y1321_METJA=426-699    AC Q58717.1
+#=GS O67434_AQUAE=419-694   AC O67434.1
+#=GS O67434_AQUAE=419-694   DR PDB; 2nub A; 419-694;
+#=GS O67434_AQUAE=419-694   DR PDB; 1yvu A; 419-694;
+#=GS O67434_AQUAE=419-694   DR PDB; 2f8s A; 419-694;
+#=GS O67434_AQUAE=419-694   DR PDB; 2f8s B; 419-694;
+#=GS Q21495_CAEEL=52-336    AC Q21495.4
+#=GS O16386_CAEEL=548-847   AC O16386.1
+#=GS O02095_CAEEL=574-878   AC O02095.2
+#=GS Q19645_CAEEL=674-996   AC Q19645.1
+#=GS Q23415_CAEEL=40-350    AC Q23415.1
+#=GS O62275_CAEEL=594-924   AC O62275.1
+YQ53_CAEEL=650-977                DILVGIAR.EKKPD.VHDILKYFEESIGLQTIQLCQQTVDKM.....MG....GQGGRQTIDNVMRKFNLKCGGTNFFVEIPNAVRGKAVCSNNETLRKKLLEHVQFIGFEISHGASRTLFDRSRSQMDGEPSVVGVSYSLT...NSTQLGGFTYLQTQKEYKLQKLDE............FFPKCVRSYKEHSKT.LPTRIVIYRVGAGEGNFNRVKE.EVEEMRRTFD.......KIQ.PGYR..PHLVVIIAQRASHARVFPSCISG.....................NRATDQNIPSGTCV...ENVLTSYGYDEFILSSQTPLIGTVRPCKYTILVNDA...KWSKNEL.MHL......TYFRAFGHQVSY....QPPSV........PDVLYAAENLAKRGRNNYK
+Q21691_CAEEL=673-1001             TIVFGIIA.EKRPD.MHDILKYFEEKLGQQTIQISSETADKF.....MR....DHGGKQTIDNVIRKLNPKCGGTNFLIDVPESVGHRVVCNNSAEMRAKLYAKTQFIGFEMSHTGARTRFDIQKVMFDGDPTVVGVAYSL..KHSAQLGGFSYFQESRLHKLTN.LQE............KMQICLNAYEQSSSY.LPETVVVYRVGSGEGDYPQIVN.EVNEMKLAAR.......KKK.HGYN..PKFLVICTQRNSHIRVFPEHINE....................RGKSMEQNVKSGTCV...DVPGASHGYEEFILCCQTPLIGTVKPTKYTIIVNDC...RWSKNEI.MNV......TYHLAFAHQVSY....APPAI........PNVSYAAQNLAKRGHNNYK
+O48771_ARATH=542-860              FILCILPERKTSDI.YGPWKKICLTEEGIHTQCICPIKI.................SDQYLTNVLLKINSKLGGINS.LLGIEYSYNIPLINKIPTL.........ILGMDVSHGPPGR.........ADVPSVAAVVGSKCWPLISRYRAAVRTQSPRLEMIDSLFQP..IENTEKGDNGIMNELFVEFYRTSRARKPKQIIIFRDGVSESQFEQVLKIEVDQIIKAYQ.......RLG.ESDV..PKFTVIVAQKNHHTKLFQAKGPE...........................NVPAGTVV...DTKIVHPTNYDFYMCAHAGKIGTSRPAHYHVLLDEI...GFSPDDL.QNL......IHSLSYKLLNSI....FNVSSLLCVFVLSVAPVRYAHLAAAQVAQFTK
+Q9ZVD5_ARATH=577-885              FILCVLPDKKNSDL.YGPWKKKNLTEFGIVTQCMAPTRQPND................QYLTNLLLKINAKLGGLNS.MLSVERTPAFTVISKVPTI.........ILGMDVSHGSPGQ.........SDVPSIAAVVSSREWPLISKYRASVRTQPSKAEMIESLVKK.....NGTEDDGIIKELLVDFYTSSNKRKPEHIIIFRDGVSESQFNQVLNIELDQIIEACK.......LLD.ANWN..PKFLLLVAQKNHHTKFFQPTSPE...........................NVPPGTII...DNKICHPKNNDFYLCAHAGMIGTTRPTHYHVLYDEI...GFSADEL.QEL......VHSLSYVYQRST....SAISV........VAPICYAHLAAAQLGTFMK
+TAG76_CAEEL=660-966               CIIVVLQS.KNSDI.YMTVKEQSDIVHGIMSQCVLMKNVSRP..............TPATCANIVLKLNMKMGGIN..SRIVADKITNKYLVDQPTM.........VVGIDVTHPTQAE.......MRMNMPSVAAIVANVD.LLPQSYGANVKVQKKCRESVVY.LLD............AIRERIITFYRHTKQ.KPARIIVYRDGVSEGQFSEVLREEIQSIRTACL.......AIA.EDFR..PPITYIVVQKRHHARIFCKYQND.....................MVGKAKNVPPGTTV...DTGIVSPEGFDFYLCSHYGVQGTSRPARYHVLLDEC...KFTADEI.QSI......TYGMCHTYGRCT....RSVSI........PTPVYYADLVATRARCHVK
+O16720_CAEEL=566-867              LIVVVLPG..KTPI.YAEVKRVGDTVLGIATQCVQAKNAIRT..............TPQTLSNLCLKMNVKLGGVNS.ILLPNVRPR...IFNEPVI.........FLGCDITHPAAGD.........TRKPSIAAVVGSMD.AHPSRYAATVRVQQHRQEIITD.LTY............MVRELLVQFYRNTRF.KPARIVVYRDGVSEGQLFNVLQYELRAIREACV.......MLE.SGYQ..PGITFIAVQKRHHTRLFAADKAD.....................QVGKAFNIPPGTTV...DVGITHPTEFDFFLCSHAGIQGTSRPSHYHVLWDDN...DLTADEL.QQL......TYQMCHTYVRCT....RSVSI........PAPAYYAHLVAFRARYHLV
+PINH_ARATH=625-946                LLLAILPD.NNGSL.YGDLKRICETELGLISQCCLTKHVFKI..............SKQYLANVSLKINVKMGGRNT.VLVDAISCRIPLVSDIPTI.........IFGADVTHPENGE.........ESSPSIAAVVASQDWPEVTKYAGLVCAQAHRQELIQDLYKTWQDPVRGTVSGGMIRDLLISFRKATGQ.KPLRIIFYRDGVSEGQFYQVLLYELDAIRKACA.......SLE.PNYQ..PPVTFIVVQKRHHTRLFANNHRD...................KNSTDRSGNILPGTVV...DTKICHPTEFDFYLCSHAGIQGTSRPAHYHVLWDEN...NFTADGI.QSL......TNNLCYTYARCT....RSVSI........VPPAYYAHLAAFRARFYLE
+AGO1_SCHPO=500-799                YLFFILDK.NSPEP.YGSIKRVCNTMLGVPSQCAISKHILQS..............KPQYCANLGMKINVKVGGINC.SLIPKSNP....LGNVPTL.........ILGGDVYHPGVGA..........TGVSIASIVASVD.LNGCKYTAVSRSQPRHQEVIEG.MKD............IVVYLLQGFRAMTKQ.QPQRIIYFRDGTSEGQFLSVINDELSQIKEACH.......SLS.PKYN..PKILVCTTQKRHHARFFIKNKSD......................GDRNGNPLPGTII...EKHVTHPYQYDFYLISHPSLQGVSVPVHYTVLHDEI...QMPPDQF.QTL......CYNLCYVYARAT....SAVSL........VPPVYYAHLVSNLARYQDV
+O76922_DROME=555-852              IVMVVMRS.PNEEK.YSCIKKRTCVDRPVPSQVVTLKVIAPR.....QQ...KPTGLMSIATKVVIQMNAKLMGA...PWQVVIPL.......HGLM.........TVGFDVCHSPKNK...........NKSYGAFVATMDQKESFRYFSTVNEHIKGQELSEQ.MSV............NMACALRSYQEQHRS.LPERILFFRDGVGDGQLYQVVNSEVNTLKDRLDEI...YKSAG.KQEG..CRMTFIIVSKRINSRYFT.............................GHRNPVPGTVV...DDVITLPERYDFFLVSQAVRIGTVSPTSYNVISDNM...GLNADKL.QML......SYKMTHMYYNYS....GTIRV........PAVCHYAHKLAFLVAESIN
+PIWI_DROME=538-829                LILCLVPN.DNAER.YSSIKKRGYVDRAVPTQVVTLKTTKNR.....SL........MSIATKIAIQLNCKLGYT...PWMIELPL.......SGLM.........TIGFDIAKSTRDR...........KRAYGALIASMDLQQNSTYFSTV.TECSAFDVLANTLWP............MIAKALRQYQHEHRK.LPSRIVFYRDGVSSGSLKQLFEFEVKDIIEKLKTE...YARVQ.LSP...PQLAYIVVTRSMNTRFFLN.............................GQNPPPGTIV...DDVITLPERYDFYLVSQQVRQGTVSPTSYNVLYSSM...GLSPEKM.QKL......TYKMCHLYYNWS....GTTRV........PAVCQYAKKLATLVGTNLH
+Q17567_CAEEL=397-708              MLVVMLAD.DNKTR.YDSLKKYLCVECPIPNQCVNLRTLAGK.....SKDGGENKNLGSIVLKIVLQMICKTGGA...LWKVNIPL.......KSTM.........IVGYDLYHDSTLK...........GKTVGACVSTTS.NDFTQFYSQTRPHENPTQLGNN.LTH............FVRKSLKQYYDNNDKTLPSRLILYRDGAGDGQIPYIKNTEVKLVRDACDAVTDKAAELS.NKVQEKIKLAFIIVTKRVNMRILKQGSSS.......................KSAINPQPGTVV...DTTVTRPERMDFYLVPQFVNQGTVTPVSYNIIHDDT...GLGPDKH.QQL......AFKLCHLYYNWQ....GTVRV........PAPCQYAHKLAFLTAQSLH
+PIWL1_HUMAN=555-847               IVVCLLSS.NRKDK.YDAIKKYLCTDCPTPSQCVVARTLGKQ.....QT.......VMAIATKIALQMNCKMGGE...LWRVDIPL.......KLVM.........IVGIDCYHDMTAG...........RRSIAGFVASIN.EGMTRWFSRCIFQDRGQELVDG.LKV............CLQAALRAW.NSCNEYMPSRIIVYRDGVGDGQLKTLVNYEVPQFLDCLK.......SIG.RGYN..PRLTVIVVKKRVNTRFFAQSGGR.........................LQNPLPGTVI...DVEVTRPEWYDFFIVSQAVRSGSVSPTHYNVIYDNS...GLKPDHI.QRL......TYKLCHIYYNWP....GVIRV........PAPCQYAHKLAFLVGQSIH
+PIWI_ARCFU=110-406                GIMLVLPE.YNTPL.YYKLKSYLINS..IPSQFMRYDILSNR.....NL........TFYVDNLLVQFVSKLGGK...PWILNVDPEK....................GSDIIIGTGAT........RIDNVNLFCFAMVFK.KDGTMLWNEISPIVTSSEYLTY.LKS............TIKKVVYGFKKSNPDWDVEKLTLHVSG....KRPKMKDGETKILKETVE.......ELK.KQEMVSRDVKYAILHLNETHPFWVMGDPN........................NRFHPYEGTKVKLSSKRYLLTLLQPYLKRNGLEMVTPIKPLSVEIVSDN.....WTSEEYYHNVHEILDEIYYLSKMNWRGF....RSRNL........PVTVNYPKLVAGIIANVNR
+#=GR PIWI_ARCFU=110-406     SS    --EEEESS.S-HHH.HHHHHHHHHTT..S--EEEEHHHHCTS.....TH........HHHHHHHHHHHHHH----...--EE---TT-....................---EEE----E........ESSSSEEE-EEEEEE.----EEEEEE--SEEGGGHHHH.HHH............HHHHHH---TTTSTT---SEEEEEE--....---S-----HHHHHHHHH.......HHH.HTTSS-TT-EEEEEEEEE---EEEE--TT........................TT-------EEESSSSEEEEEEE-TCEE----EEEEEEEEEEEEEEEE-.....--TTTHHHHHHHHHHHHHHHTT------....---SS........-HHHHHHHHH---HHHHHH
+Y1321_METJA=426-699               CFALIIGKEKYKDNDYYEILKKQLFDLKIISQNILWENWRKD.....DK........GYMTNNLLIQIMGKLGIK...YFILDSKTPYDY................IMGLDTGLGIFGN............HRVGGCTVVYDSEGKIRRIQPIETPAPGERLHLP................YVIEYLEN..KANIDMENKNILFLRDG.......FIQNSERNDLKEISK.......ELN.......SNIEVISIRKNNKYKVFTSDYRI........................GSVFGNDGIFLPHKTPFGSNPVKLSTWLRFNCGNEEGLK...IN.............ESI.MQL......LYDLTKMNYSALYGEGRYLRI........PAPIHYADKFVKALGKNWK
+O67434_AQUAE=419-694              LVIVFLEEYPKVDP.YKSFLLYDFVKRELLKKMIPSQVILNR.....TL...KNENLKFVLLNVAEQVLAKTGNIP..YKLKEIEGKVDA................FVGIDISRITRDG..........KTVNAVAFTKIFNSKGELVRYYLTSYPAFGEKLTEK................AIGDVFSLLEKLGF.KKGSKIVVHRDG.......RLYRDEVAAFK...........KYG.ELYG..YSLELLEIIKRNNPRFFSNEKFI..............................KGYFYKLSEDSVILATYNQVY.......EGTHQPIKVRKVYGE.....LPVEVL.CSQ......ILSLTLMNYSSF....QPIKL........PATVHYSDKITKLMLRGIE
+#=GR O67434_AQUAE=419-694   SS    EEEEEE---S---S.SS--HHHHHHHHHHHHTT--EEEEEHH.....HH...HHS-HHHHHHHHHHHHHHH---BS..-EES------SE................EE--EEEEEE---..........-ECEEEEEEEEEE----EEEEEEEEETT---HHHHH................H---HHHHHHH---.----EEEEEE--.......---HHHHHHHH...........H--.----..-EEEEEEEE-SS---EEES-S--..............................---EEEETTTEEEE--S----.......---B--EEEEEEE--.....--HHHH.HHH......HHHHGGGG--TT....S--SS........-TTTTTHHHHHHHHH----
+Q21495_CAEEL=52-336               GIVLPTPRIFFRDG..........QETSLNNQSFRNPT...................DFAQTGFFVDAKQQLGGLN..YVVNS.....ETWNDSGLL.........LIGLSTAPYLNSY........SSENVTTIGFVSNTM.DHPQKFAGGYKYVKSGSDVFGQVMPE............ILLNSLRSARKARKI.KPMNIVIYLCGMSESRFSIVKEEYVRNCHSVFK.......TLG.EKYS..PQLTIIVGSKGHSTRLYARGERD........................QISNLQPGTIV...DSVIVSPDYNKFFHCGAVARQGTCKATKYTVLYPE....SPKMEWI.QRM......TNDLCYMHEIVF....HPVSL........PAPLYLTAEMAERGTKNLA
+O16386_CAEEL=548-847              QLIMFITK..SMNN.YHTEIKCLEQEFDLLTQDIRFETAVKL.....AQ.......QQNTRKNIIYKTNMKLGGLN..YELRS.....GVFSNSKRL.........IIGFETSQRGGLG..........DAPIAIGFAANMM.SHSQQFAGGYMFVKKSADNYGPVIPE............ILLTILKQAKANRPNDRPDELLIYFSGVSEGQHALVNEYYANQVKAACG.......LFN.ESFR..PHITLILASKVHNTRVYKSENGG........................GVCNVEPGTVI...DHTIVSPVLSEWYHAGSLARQGTSKLVKYSLIFNTK...KNEKLSVYERL......TNELCYEMQIVF....HPTSL........PIPLHIAGTYSERGSQMLA
+O02095_CAEEL=574-878              QLLFFVVK..SRYN.YHQQIKALEQKYDVLTQEIRAETAEKV.....FR.......QPQTRLNIINKTNMKLGGLN..YAIGS.....EAFNKPNRL.........IVGFVTSQRVGGN.........PDYPISVGFAANML.KHHQKFAGGYVYVHRDRDVFGSIIKD............TLLAIFKTCTEQRG..RPDDILLYFNGVSEGQFSMINEEFSARVKEACMAF...QKEGT.PPFR..PHITIIASSKAHNERLYKSDKGR.........................IVNLEPGTVV...DHTIVSNVYTEWYHASAVARQGTAKATKFTLIFTTKAGPQAEPLWHLEQL......TNDLCYDHQIVF....HPVGL........PVPLYIADRYSQRGAMVLA
+Q19645_CAEEL=674-996              PFVLFISD..DVPN.IHECLKFEERMSDIPTQHVLLKNVKKMRDNIEKKSQGGRRAYDLTLDNIVMKANIKCGGLN..YT.ADIPRDLACWNEVSTF.........VIGMDVAHPDRNA.......AREGNPSTVGLSCNSA.ENPYSFIGDFLYTDPRREAIQDEILR...........KFTDQSVRNFAEIRG..FPKKVIIFRDGVSFGEETAALK.EVEIIEQTIKTA...AKSMGHSDYA..PKVLAIVVKKRHHTRFYAKGGHH......................GNMPINPLPDTSV...GGDIAEYGKRQIFIQAFRPVQGTAKVPSFLVIRDDE...EVSDEHV.AKM......VCAVCSLHQLVN....SPTSI........PTPVYVAHELAKRGTGLYK
+Q23415_CAEEL=40-350               KFAFVITD.DSITH.LHKKYKALEQKSMMVIQDMKISKANSV.....VK.....DGKRLTLENVINKTNMKLGGLN..YTVSDAKKSMT....DEQL.........IIGVGVSAPPAGT.KYMMDNKGHLNPQIIGFASNA..VANHEFVGDFVLAPSGQDTMAS.IED............VLKSSIDLFEMNRNT.LPKRIIIYRSGASDGSHASILAYEIPLARATIQ.......GYS.KDIN....LIYIIVTKEHSYRFFRDQLRS....................GGKATEMNIPPGIVL...DSAVTNPACKQFFLNGHTTLQGTAKTPLYTILADDC...NAPMDRL.EEL......TYTLCHHHQIVA....LSTSI........PTPLYVANEYAKRGRDLWS
+O62275_CAEEL=594-924              TFVFIITD.DSITT.LHQRYKMIEKDTKMIVQDMKLSKALSV..........INAGKRLTLENVINKTNVKLGGSN..YVFVDAKKQL.....DSHL.........IIGVGISAPPAGT.KYAMENKGVLNPNVIGYAYNA..QHNQEFSGDFVLNSASQDTLAP.IED............IVMHSLNEYQKFHDGGLPRRVIVYRTGTSEGNHGSIMAYEIPLARAAMR.......DFS.PDIQ....LVYIVVSKDHSFRFFKPDLASLASRPQATSSTASRHSAMPAAPKAWDLNIAPGILV...DSIVTNPACKQFFLNSHITLQGTAKTPLYTVLADDA...KVSMTAL.EDI......TYKLCHLHQIVG....LPTSL........PTPLYVANEYAKRGRNLWN
+#=GC SS_cons                      EEEEEESS-S-HHC.CCHHHHHHHCCHHCHHCCEECCCCCCC.....CH...HHS-HHHHHHHHHHHHHHH---BS..-EEC---TT-SE................EE--EEEEEE--E........ESSCCEEEEEEEEEE----EEEEEEEEETCEGGHHHHH.HHH............HHHHHHHHHCCTSTT---SEEEEEE--.......S--HHHHHHHHHHHH.......HHH.HTTSS.TCEEEEEEEECC---EEEC-STT........................TT....---EEECTTTEEEEEEC-TCEE....EEEEEEEEEEEEEEEE-.....--CCCHHHHHHHHHHHHHHHCCGG--TT....S--SS........-CCCCCHHHHHHHHHHHHH
+#=GC seq_cons                     hllhllsc.pspst.YtshhKhhppchsl.oQslphcsh.ph...............tthhsNllhKhNsKlGGhN..hhlssh.h........sph.........llGhDlu+sssus..........tssolsuhsushs.ppsppahushphpppsp-hhss.lpp............hltphLpsapcpspp.hPp+IllYRDGsS-Gph.plhp.Elspl+cshc.......pls.psap..PplshIllpKpcpsRhFtpstsp.........................thNs.PGTlV...DsslspPsth-FaLsupsshpGTs+Ps+YsllhD-h...thss-cl.ppL......oapLCaha.psh....pslul........PsPlaYAcphAppstp.hc
+//
diff --git a/test/data/Q9H8G1.fasta b/test/data/Q9H8G1.fasta
new file mode 100644
index 0000000..08a7da7
--- /dev/null
+++ b/test/data/Q9H8G1.fasta
@@ -0,0 +1,11 @@
+>Q9H8G1.2 Zinc finger protein 430.
+MENLKSGVYPLKEASGCPGADRNLLVYSFYEKGPLTFRDVAIEFSLEEWQCLDTAQQDLY
+RKVMLENYRNLVFLAGIAVSKPDLITCLEQGKEPWNMKRHAMVDQPPVTYSHFAQDLWPE
+QGIKDSFQEVILRRYGKCGHEDLQLRTGCRSVDECNLHKECYDELNQCLTTTQSEIFQYD
+KYVNVFYKFSNPNIQKIRHTGKKPFKCKKCDKSFCMLLHLTQHKRIHIRENSYQCEECGK
+VFNWFSTLTRHRRIHTGEKPYKCEQCGKAFKQSSTLTTHKIIHTGEKPYRCEECGKTFNR
+SSHLTTHKRIHTGEKPYRCEECGRAFNRSSHLTTHKIIHTGEKPYKCEECGKAFNQSSTL
+TTHKIIHAGEKPYKCEECGKAFYRFSYLTKHKIIHTGEKFYKCEECGKGFNWSSTLTKHK
+RIHTGEKPYKCEQCGKAFNESSNLTAHKIIHTGEKPYKCEECGKAFNRSPKLTAHKVIHS
+GEKPYKCEECGKAFNQFSNLTKHKITHIGDTSYKYLECDKAFSQSSTLTKHKVIHTGEKP
+YNCEEYGKAFNQSSNLIEQSNSYWRETLQM
diff --git a/test/data/cgph_pale.color b/test/data/cgph_pale.color
new file mode 100644
index 0000000..45d0cf4
--- /dev/null
+++ b/test/data/cgph_pale.color
@@ -0,0 +1,20 @@
+A WHITE
+R WHITE
+N WHITE
+D WHITE
+C LIGHTBLUE
+Q WHITE
+E WHITE
+G LIGHTRED
+H PALEYELLOW
+I WHITE
+L WHITE
+K WHITE
+M WHITE
+F WHITE
+P LIGHTGREEN
+S WHITE
+T WHITE
+W WHITE
+Y WHITE
+V WHITE
diff --git a/test/data/cgph_pale2.color b/test/data/cgph_pale2.color
new file mode 100644
index 0000000..e4c37ac
--- /dev/null
+++ b/test/data/cgph_pale2.color
@@ -0,0 +1,5 @@
+C LIGHTBLUE
+E WHITE
+G LIGHTRED
+H PALEYELLOW
+P LIGHTGREEN
diff --git a/test/data/chr4_dna_align.gff b/test/data/chr4_dna_align.gff
new file mode 100644
index 0000000..e90eff5
--- /dev/null
+++ b/test/data/chr4_dna_align.gff
@@ -0,0 +1,2269 @@
+##gff-version 3
+##sequence-region chr4-04 246635 359336
+chr4-04	EST_Human	nucleotide_match	254341	254784	407.000000	+	.	Target=H29997.1 15 472 +;percentID=95.6;Gap=M340 I1 M6 I1 M13 I1 M5 I1 M15 I1 M9 I1 M5 I1 M7 I1 M4 I1 M5 I1 M2 I1 M10 I1 M9 I1 M4 I1 M10 ;sequence=AATTCGGCACGATGGGAGTTAGGTACTTTTTATACAGATTCCAAATATGCCATTTTAGTATTCCACAATTATGCCACCATTTGGAAAGAAAGGATTGTTGACAGCAAAAGATACCCCTACTAAATATGGGTCACAGATATTTTACCCTACCCTAGGCTATCCACCTACCACAGAAAGCTGCAGTTCATTGCTGGGGCTACCAGAAATGCCAAGATGAGATTACCTAGAGAAACAGGAGGGTCGGCCAAGCAGCAACGGCCACCACCCTTTCCGGGGAACTC [...]
+chr4-04	EST_Human	nucleotide_match	254353	254821	467.000000	+	.	Target=CR738687.1 1 469 +;percentID=99.8;sequence=TTTTTATACAGATTCCAAATATGCCATTTTAGTATTCCACAATTATGCCACCATTTGGAAAGAAAGGATTGTTGACAGCAAAAGATACCCCTACTAAATATGGGTCACAGATATTTTACCCTACCCTAGGCTATCCACCTACCACAGAAAGCTGCAGTTCATTGCTGGGGCTACCAGAAATGCCAAGATGAGATTACCTAGAGAAACAGGAGGGTCGGCCAAGCAGCAACGGCCACCACCCTTTCCGGGGAACTCCTTATGGCCCTTATCCCAACTTTGCCTAACAACCTGCCCACCCTGCAATGGGGTATCAAATGTGAATATACTCTAGGACTGAAAGATTGTATAAATTGGGAGAGGTTCTTTATTTCCCCCAGG [...]
+chr4-04	EST_Human	nucleotide_match	254371	254823	435.000000	-	.	Target=AI806801.1 7 459 +;percentID=98;sequence=GCTCATTTTTTTTTTTTTTTTTTGGTTATAGCTGATTGTTATGGCCTCTCCTACAGAAACAAGAGTTGGGTTGTGCCCTTATTGCTTTCTGCTGGAGAACCTGGGGGAAATAAAGAACCTCTCCCAATTTATACAATCTTTCAGTCCTAGAGTATATTCACATTTGATACCCCATTGCAGGGTGGGCAGGTTGTTAGGCAAAGTTGGGATAAGGGCCATAAGGAGTTCCCCGGAAAGGGTGGTGGCCGTTGCTGCTTGGCCGACCCTCCTGTTTCTCTAGGTAATCTCATCTTGGCATTTCTGGTAGCCCCAGCAATGAACTGCAGCTTTCTGTGGTAGGTGGATAGCCTAGGGTAGGGTAAAATATCTGTGACCCATAT [...]
+chr4-04	EST_Human	nucleotide_match	254530	254816	283.000000	+	.	Target=AV753258.1 1 287 +;percentID=99.3;sequence=AAATGCCAAGATGAGATTACCTAGAGAAACAGGAGGGTCGGGCAAGCAGCAACGGGCACCACCCTTTCCGGGGAACTCCTTATGGCCCTTATCCCAACTTTGCCTAACAACCTGCCCACCCTGCAATGGGGTATCAAATGTGAATATACTCTAGGACTGAAAGATTGTATAAATTGGGAGAGGTTCTTTATTTCCCCCAGGTTCTCCAGCAGAAAGCAATAAGGGCACTCCATAATTCTTGTTTCTGTAGGAGAGGCCATCTCCATCAGCTATAACCAAAAAAAAAAATTCACTGGCCGTCGTTTTACAACGTCGTGACTGGGCCCTGGCGTTACCCAACTTAATCGCCTTGCAGCACATACCCCTTTCGCCAGCTGG [...]
+chr4-04	EST_Human	nucleotide_match	254553	254839	232.000000	+	.	Target=AV752332.1 1 292 +;percentID=91.6;Gap=M18 D1 M16 D1 M3 I1 M82 I1 M42 I1 M13 I1 M9 I1 M24 I1 M27 I1 M18 D2 M17 I2 M2 I1 M7 D1 M4 ;sequence=GAGAAACAGGAGGGTCGGCAAGCAGCAACGGACAGACGCCTTTCCGGGGAACTCCTTATGGCCCTTATCCCAACTTTGCCTAACAACCTGCCCACCCTGCAATGGGGTATCAAATGTGAAGTATACTCTAGGACTGAAAGATGGTATAAAGTGGGAGAGGTTCGTTTATTTCCCCCAGGGTTCTCCAGGCAGAAAGCAATAAGGGCACTCCAGTAATTCTTGTTTCTGTAGGAGAGGCCAGTCTCCATCAGCTATAACCAAAAATTACAATTCACTGGCCGTC [...]
+chr4-04	EST_Human	nucleotide_match	336559	336754	179.000000	-	.	Target=AA211349.1 255 455 +;percentID=95.5;Gap=M32 I1 M90 I1 M9 I1 M20 I1 M27 I1 M18 ;sequence=CCCGTTCGCACCAAAACCGTGAAGAAGGCGGCCCGGGTCATCATAGAAAAGTACTACACGCGCCTGGGCAACGACTTCCACACGAACAAGCGCGTGTGCGACNGAGATCGCCATTATCCACAGCAAAAAGCTCCGCAACAAGATAGCAGGTTACGTCACGCATCTGATGAAGCGAATTCAGAGAGGCCCAGTAAGAGGTATCTCCATCAAGCTGCAGGAGGAGGAGAGAGAAAGGAGAGACAATTATGTTCCTGAAGGTCTCAGCCTTGGATCAGGAGATTATTGANAGTAGATCCTGACACTAAGGAAATGCTGAAGCTTTTGGACTTCGGC [...]
+chr4-04	EST_Human	nucleotide_match	254681	254806	108.000000	-	.	Target=H29898.1 1 128 +;percentID=92.2;Gap=M17 I2 M109 ;sequence=GGNTATAGCTTATTTCNTTATGGCCTCTCCTACAGAAACAAGAATTATGGAGTGCCCTTATTGCTTTCTGCTGGAGAACCTGGGGGAAATAAAGAACCTCTCCCAATTTATACAATCTTTCAATCATATTCAAAACACAGAAATAATCAGACTATAACAATGCTGCATAGATAGTGGTATACAAGTNCCCTGACTCTAACTTCTTCCTAACTTAAAAGTTCAATTTTCAAGTCAC
+chr4-04	EST_Human	nucleotide_match	336568	336755	156.000000	+	.	Target=AI150945.1 1 189 +;percentID=91.5;Gap=M47 I1 M141 ;sequence=AGATTTATTGAAAATCATACTTCCCTACACAAAAAATTCAAACAGGTACCCCGAGGCGTCTTGAAATTCATCCCAACTGTATGCTGAGTGACCTGAAGGTTGGACAGACTGCCTACATCCAAAAGCTTCAACATTTACTTAGTGTCAGGATCTACTTCAATAATCTCCTGATCCAAGGCTGAGACCTTAGGAACATAATTGACTATCATTTGTCTCTCCTGCTACTGCAGATTGATGGATATACCTCTTACTGGACCTGTCTGAATTCGCTTTATCACATGCGTGACGTAACCTGCTATCTTGTTGCCGAGCTTTTTGCTGAGGATAATAGGAAACTACTCGCACACACGCTTGTTCGAGT [...]
+chr4-04	EST_Human	nucleotide_match	256713	257250	534.000000	-	.	Target=AI080623.1 1 538 +;percentID=99.6;sequence=TTTTTAAACATAGGCATGTTTCTAGTAGTGTCAAAGAAAAGGATTTTCTGAAAGAAATTAAAGACTTGAAACCTTTTGCATAATTTATACTGGCTTGGTCAACACCATGGGTTGGGTTGACTCCAAGAAGGGTGACTGACGCAGAACTCAGAGGCATCATTTTGGATGAATGGTCCAGGTGTTAAAACATTTGGAGGGAGAATAGAAAATCTCATTTGATGTTGAGAATATTTAGTGAAACAAAATTTTGAGAAATATCAATAATGGTGCTCGTTATGTTGCATTGTGCTGGGTCTAAAGCACCCACAATGGATCTGGAATTTACAGTAGCACAGATGTATAGGAGTGCCTGGCCAATGAGGGTAGCAGGGGAGAACA [...]
+chr4-04	EST_Human	nucleotide_match	336914	337425	228.000000	-	.	Target=AA521317.1 44 548 +;percentID=75.1;Gap=M35 I1 M1 I1 M7 I1 M2 I2 M3 I1 M1 I1 M3 I2 M17 D1 M9 D1 M9 I1 M19 I1 M16 I2 M2 I1 M1 I1 M8 D1 M12 D1 M4 D1 M9 D2 M2 D1 M10 D2 M73 D1 M3 D1 M1 D3 M1 D1 M1 D4 M1 D1 M104 D1 M136 ;sequence=CACCTACGCTGTCACGTGCAGCCTCAAACTCCTGGACTTGTGATCTCCCGCCTCAGCTTACCTAGTAGCTGGGACCACGAATGTCCACAGATGCACTCCACCTACCCGGCTAATTATTTTTTGTATAATTAGCTGGGGTCTTTACCATCATGCCCAGGGCTGGTCTCTAACTCCTGGGAAACATTCTTATTGCAAA [...]
+chr4-04	EST_Human	nucleotide_match	256732	257891	821.000000	-	.	Target=BU902103.1 1 1164 +;percentID=86.4;Gap=M140 I1 M1 I7 M1 I1 M177 I1 M3 I1 M8 I1 M306 I1 M7 I1 M5 I4 M1 I1 M49 D5 M132 D1 M13 D1 M116 D1 M7 D1 M16 D1 M34 D1 M22 D1 M5 D1 M10 I1 M15 I1 M9 D1 M15 I1 M12 D1 M1 D1 M7 D1 M17 D1 M13 ;sequence=TAGCCCTTAGTGGCATGTTTCTGATGGTGACAGGCTTGGTTTATAAAATCTCTAACATGGTCCTGGACTTTCCCTAATCTGTTAACCCAGAAACAGCATTTTTCTCCTAGCATAAGGCAAATGCTTTTGTGAGCTGCAGCTAGTGTGGCAAGACCTCTACAATTTTGAACTACAGCCACGAGATAA [...]
+chr4-04	EST_Human	nucleotide_match	337225	337543	170.000000	-	.	Target=AI095103.1 15 334 +;percentID=77.6;Gap=M28 I2 M157 D2 M60 I1 M1 I1 M65 D1 M5 ;sequence=TTTAAATTTTTATTTATTTATTTATTTATTTATTTATTTATTCATTGAGATGGAGTCTCGCCCTGTCACCCAGGCTGGAGCGCAGCGGCACAATGTCGGCCCACTGCAACCTCCGCCCCCCGGGTTCAAGTGACTCTCCCGCCCCAGTCTCCCGAGCAGCTGGGACCACAGGCATGCGCCACCACACCCGGCCAACTTTCCATTTTTAGTGGAGACAGGGTTTCTCCATGCCGGCCAGGCCGGTCTCGAACTCCTGACCTCAGGTGATCCACCCGCCTCAGCCTCCCGAAGTGCTGGGATTACAGGCGTGAGCCACCATGCCCGGCCTAGGGAG [...]
+chr4-04	EST_Human	nucleotide_match	337233	337331	41.000000	+	.	Target=DB084699.1 141 240 +;percentID=72.8;Gap=M11 I1 M60 D2 M11 D1 M8 I2 M3 I1 M3 ;sequence=AAAACAGCTTTAACCTGGATGTGGAGGAGGATGACATTGAGAATCTCTTAGAGGTGGTTCATGAGGAATGGGTTAATGAGGAGTCATTGGAACTGATACAGGAACATGTAGCTGAAGAAGAGGCAAGAGAATAGGGAACTGGCTGGGCACNGGTGGCTCACATCTATAATCCCTGCACTTTGGGAGGCCGAGGCAGGTGGATCACTTGAGCAATTTCCAGTCCTCCAAGCTCCATTCATGGGACACTTGACATTCAGGGACGTGGCCATAGAATTCTCTCAGGAGGAGTGGAAATGCCTGGACCCTGTGCAGAAGGCTTTATACAGGGATGTGATG [...]
+chr4-04	EST_Human	nucleotide_match	256891	257073	179.000000	+	.	Target=EL593706.1 12 194 +;percentID=98.9;sequence=GCCCTTGGTCATCATTGTCCAGGCACTCCTATACATCTGTGCTACTGTAAATTCCAGATCCATTGTGGGTGCTTTAGACCCAGCACAATGCAACACAACGAGCACCATTATTGATATTTCTCAAAATTTTGTTTCACTAAATATTCTCAACATCAAATGAGATTTTCTATTCTCCCTCCAAATGTTTTAACACCAAACGTGGCTTGCCAGCCCAAGGGC
+chr4-04	EST_Human	nucleotide_match	337233	337299	43.000000	+	.	Target=DB093425.1 141 207 +;percentID=82.1;sequence=AAAACAGCTTTAACCTGGATGTGGAGGAGGATGACATTGAGAATCTCTTAGAGGTGGTTCATGAGGAATGGGTTAATGAGGAGTCATTGGAACTGATACAGGAACATGTAGCTGAAGAAGAGGCAAGAGAATAGGGAACTGGCTGGGCACGGTGGCTCACATCTATAATCCCTGCACTTTGGGAGGCCGAGGCAGGTGGATCACTTGAGGGACACTTGACATTCAGGGACGTGGCCATAGAATTCTCTCAGGAGGAGTGGAAATGCCTGGACCCTGTGCAGAAGGCTTTATACAGGGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGAATCTGTCTTCCTGACCTGAGTATTATCTCCATGATGAAG [...]
+chr4-04	EST_Human	nucleotide_match	337233	337299	43.000000	+	.	Target=DB039972.1 138 204 +;percentID=82.1;sequence=CAGCTTTAACCTGGATGTGGAGGAGGATGACATTGAGAATCTCTTAGAGGTGGTTCATGAGGAATGGGTTAATGAGGAGTCATTGGAACTGATACAGGAACATGTAGCCTGAAGAAGAGGCAAGAGAATAGGGAACTGGCTGGGCACGGTGGCTCACATCTATAATCCCTGCACTTTGGGAGGCCGAGGCAGGTGGATCACTTGAGGGACACTTGACATTCAGGGACGTGGCCATAGAATTCTCTCAGGAGGAGTGGAAATGCCTGGACCCTGTGCAGAAGGCTTTATACAGGGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGAATCTGTCTTCCTGACCTGAGTATTATCTCCATGATGAAGCAA [...]
+chr4-04	EST_Human	nucleotide_match	257183	257755	551.000000	+	.	Target=BX495940.1 1 571 +;percentID=98.4;Gap=M63 I2 M310 D4 M196 ;sequence=CAAGTCTTTAATTCCTTTCAGAAAATCCTTTTCTTTGACACTACTAGAAACATGCCTATGTTTAAAAAAAAAAAAAAATAGGACCCATGTCTGGCTCCCCTGGCAGCAGCAACTTTAGTGGCAGGATCTCACATGTCGGGTAGCCAACAAGGACCCTGGTCAATGTTTGGAACTGACCTCACCTTCTGCATCCATTTTTATCGACTACAGAACTTTACTTCCTGTGTGAAATGCAGGCTTATCTCTGTCTCTCTGGAAACTTGACGAGCACAAGCACTCTGGCTTCCTTCACCCCTAACATTTCCATTGTCCCGGTTGATGCTTCCTTGCTGTTACCCTTTACTACCTCACAC [...]
+chr4-04	EST_Human	nucleotide_match	257061	257591	527.000000	+	.	Target=DA115622.1 1 533 +;percentID=99.6;Gap=M185 I1 M310 I1 M36 ;sequence=ATGTTTTAACACCTGGACCATTCATCCAAAATGATGCCTCTGAGTTCTGCGTCAGTCACCCTTCTTGGAGTCAACCCAACCCATGGTGTTGACCAAGCCAGTATAAATTATGCAAAAGGTTTCAAGTCTTTAATTTCTTTCAGAAAATCCTTTTCTTTGACACTACTAGAAACATGCCTATGTTTAAAAAAAAAAAAAATAGGACCCATGTCTGGCTCCCCTGGCAGCAGCAACTTTAGTGGCAGGATCTCACATGTCGGGTAGCCAACAAGGACCCTGGTCAATGTTTGGAACTGACCTCACCTTCTGCATCCATTTTTATCGACTACAGAACTTTACTTCCTGTGTGAAAT [...]
+chr4-04	EST_Human	nucleotide_match	257377	257906	321.000000	+	.	Target=DB271521.1 3 546 +;percentID=81.2;Gap=M30 D1 M3 I1 M108 I3 M37 D2 M176 I1 M1 I3 M15 I1 M1 I7 M2 I1 M154 ;sequence=TGTTTATGGAGTGCAGAACTTTACTTCCTATGGAAGATGCAGGCTCATCTCTGCCTCTCTGCAAATTGGACCAGAACATACACTCTGGCTTACCTCACCCCTAAAATTTCCATTGTTCTGGGTGATGCTTCTCTGCTGTTACCCTTATTTACCACCTCACACCAGATCAGCTCAGAAGTTTATCTAATTTCCTTCCACAATGAGCTTGTCATCACAAGTGCCACCACAGGAATAGCTGTCATTGTTATTGCCTCCTCAACTTTCCACAACCCATCTCTGGAACTGACTCATAAAATAGAAACCACTG [...]
+chr4-04	EST_Human	nucleotide_match	257380	257914	317.000000	+	.	Target=AL691897.1 1 548 +;percentID=80.6;Gap=M27 D1 M3 I1 M108 I3 M37 D2 M176 I1 M1 I3 M15 I1 M1 I7 M2 I1 M56 D1 M105 ;sequence=ATGGAGTGCAGAACTTTACTTCCTATGGAAGATGCAGGCTCATCTCTGCCTCTCTGCAAATTGGACCAGAACATACACTCTGGCTTACCTCACCGCTAAAATTTCCATTGTTCTGGGTGATGCTTCTCTGCTGTTACCCTTATTTACCACCTCACACCAGATCAGCTCAGAAGTTTATCTAATTTCCTTCCACAATGAGCTTGTCATCACAAGTGCCACCACAGGAATAGCTGTCATTGTTATTGCCTCCTCAACTTTCCACAACCCATCTCTGGAACTGACTCATAAAATAGAAACCAC [...]
+chr4-04	EST_Human	nucleotide_match	257556	258020	464.000000	+	.	Target=BF511884.1 2 466 +;percentID=99.8;sequence=TTTTTTTTTTTTTTTTTCCTGAGTTTGGCATCTCAGGTGCCACTATAGGAATAGCTGGCATAATTATTGCCTCCTCAACTTACCAAAACCTGTCTCTGGAACTGACTCACAAAATAAAAACTACTGCTCAGACTCTTACAGAGTGACACCAACAAGTTGATTATCTCGTGGCTGTAGTTTGAAATTGTAGAGGTCTTGCTGCAGCTCAGGAAAGAATCTGCCTTATGCTAGGAGAAAAATGCTGTTTCTGGGTTAACAGATTAGGGAAAGTCCAGGACCATGTTAGAGGTTTTACAAACCAGGCCTGTCACCATCAGAAACATGCCACTGAAAGCTAGTTCTCTTGGGGTGCCACTTGGTTCCAATTCTCATGACATC [...]
+chr4-04	EST_Human	nucleotide_match	257557	258296	740.000000	-	.	Target=BX101722.1 1 740 +;percentID=100;sequence=AACGTTCCCTCCTCAATAGATTGAGACTCCAAAAATCTTTGAGTCTAGGGGCACTGTGGGTCTTCTGTAACTACTTCCTGGTAATATGAGATAAAGAATTCATCAGTATCTCATTCTCTTGCTTTTTGTCAGAAAAAGATTCCATCCATGTTCTCCCAGAAGGTTGAACTTGCATTGTCCAGAGGAAATGTGTAGGGACATGGCTGTGCAGATTGGGGGAAAATAGGTCGATATTCCTGTTGCAGGACCATTTGAAGTCTGAGAGTTTCTAGGTGAGAGGAAACGAACCTGGTTACTAGATTTAGTGAGCAAGGCTCACAAAAGAGAGAAAGGAAGACAAAGGCTAGGGATCCCCAAAAAGTGGGATGTCATGAGAATT [...]
+chr4-04	EST_Human	nucleotide_match	337110	337352	51.000000	+	.	Target=BF964632.1 366 622 +;percentID=65.3;Gap=M3 D1 M12 I1 M18 D1 M8 I1 M12 D1 M6 I1 M2 I1 M1 I2 M4 I1 M3 I1 M2 I1 M6 D1 M6 D1 M6 D1 M3 D1 M2 D1 M5 I1 M2 I1 M13 I1 M33 I1 M8 I1 M17 I1 M4 I1 M2 I1 M14 I1 M20 I1 M8 I1 M6 I1 M3 I1 M6 ;sequence=GTCGGTTAGGGCCTCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATTGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTC [...]
+chr4-04	EST_Human	nucleotide_match	257572	257941	370.000000	+	.	Target=AI684693.1 1 370 +;percentID=100;sequence=CCTGAGTTTGGCATCTCAGGTGCCACTATAGGAATAGCTGGCATAATTATTGCCTCCTCAACTTACCAAAACCTGTCTCTGGAACTGACTCACAAAATAAAAACTACTGCTCAGACTCTTACAGAGTGACACCAACAAGTTGATTATCTCGTGGCTGTAGTTTGAAATTGTAGAGGTCTTGCTGCAGCTCAGGAAAGAATCTGCCTTATGCTAGGAGAAAAATGCTGTTTCTGGGTTAACAGATTAGGGAAAGTCCAGGACCATGTTAGAGGTTTTACAAACCAGGCCTGTCACCATCAGAAACATGCCACTGAAAGCTAGTTCTCTTGGGGTGCCACTTGGTTCCAATTCTCATGACATCCCACTTTTT
+chr4-04	EST_Human	nucleotide_match	257572	257968	393.000000	+	.	Target=AA969119.1 1 399 +;percentID=99.5;Gap=M10 I1 M21 I1 M366 ;sequence=CCTGAGTTTGAGCATCTCAGGTGCCACTATAGAGAATAGCTGGCATAATTATTGCCTCCTCAACTTACCAAAACCTGTCTCTGGAACTGACTCACAAAATAAAAACTACTGCTCAGACTCTTACAGAGTGACACCAACAAGTTGATTATCTCGTGGCTGTAGTTTGAAATTGTAGAGGTCTTGCTGCAGCTCAGGAAAGAATCTGCCTTATGCTAGGAGAAAAATGCTGTTTCTGGGTTAACAGATTAGGGAAAGTCCAGGACCATGTTAGAGGTTTTACAAACCAGGCCTGTCACCATCAGAAACATGCCACTGAAAGCTAGTTCTCTTGGGGTGCCACTTGGTTCCAATTCT [...]
+chr4-04	EST_Human	nucleotide_match	336536	336753	200.000000	+	.	Target=BU197993.1 6 223 +;percentID=95.9;sequence=TTTTTTTTTTTTTTTTTTTTTTTTTTGCTGTTGTCCCAGATTTATTGAAAATAATACAGCACTACAGAAAAAATTCAAACAGGTCCCCGAGGCGTTTTGAAATTCATCCCAACTGTAGGCTGAGTGACCTGAAGGTTGGACAGACTGCCGAAGTCCAAAAGCTTCAGCATTTCCTTAGTGTCAGGATCTACTTCAATAATCTCCTGATCCAAGGCTGAGACCTCAGGAACATAATTGTCTCTCCTTTCTCCCTCCTCCTCCTGCAGCTTGATGGAGATACCTCTTACTGGGCCTCTCTGAATTCGCTTCATCAGATGCGTGACGTAACCTGCTATCTTGTTGCGGAGCTTTTTGCTGGGGATAATGGCGATCTCCTCG [...]
+chr4-04	EST_Human	nucleotide_match	257572	258059	488.000000	+	.	Target=AI143189.1 1 488 +;percentID=100;sequence=CCTGAGTTTGGCATCTCAGGTGCCACTATAGGAATAGCTGGCATAATTATTGCCTCCTCAACTTACCAAAACCTGTCTCTGGAACTGACTCACAAAATAAAAACTACTGCTCAGACTCTTACAGAGTGACACCAACAAGTTGATTATCTCGTGGCTGTAGTTTGAAATTGTAGAGGTCTTGCTGCAGCTCAGGAAAGAATCTGCCTTATGCTAGGAGAAAAATGCTGTTTCTGGGTTAACAGATTAGGGAAAGTCCAGGACCATGTTAGAGGTTTTACAAACCAGGCCTGTCACCATCAGAAACATGCCACTGAAAGCTAGTTCTCTTGGGGTGCCACTTGGTTCCAATTCTCATGACATCCCACTTTTTGGGGATCCC [...]
+chr4-04	EST_Human	nucleotide_match	257572	258175	564.000000	+	.	Target=DB357764.1 1 596 +;percentID=96.9;Gap=M497 D1 M8 D1 M7 D1 M19 D1 M8 D1 M36 D1 M5 D1 M1 D1 M15 ;sequence=CCTGAGTTTGGCATCTCAGGTGCCACTATAGGAATAGCTGGCATAATTATTGCCTCCTCAACTTACCAAAACCTGTCTCTGGAACTGACTCACAAAATAAAGACTACTGCTCAGACTCTTACAGAGTGACACCAACAAGTTGATTATCTCGTGGCTGTAGTTTGAAATTGTAGAGGTCTTGCTGCAGCTCAGGAAAGAATCTGCCTTATGCTAGGAGAAAAATGCTGTTTCTGGGTTAACAGATTAGGGAAAGTCCAGGACCATGTTAGAGGTTTTACAAACCAGGCCTGTCACCATCAGAAACATGCCACTGAAAG [...]
+chr4-04	EST_Human	nucleotide_match	257845	258418	574.000000	+	.	Target=DA745472.1 1 574 +;percentID=100;sequence=TTTACAAACCAGGCCTGTCACCATCAGAAACATGCCACTGAAAGCTAGTTCTCTTGGGGTGCCACTTGGTTCCAATTCTCATGACATCCCACTTTTTGGGGATCCCTAGCCTTTGTCTTCCTTTCTCTCTTTTGTGAGCCTTGCTCACTAAATCTAGTAACCAGGTTCGTTTCCTCTCACCTAGAAACTCTCAGACTTCAAATGGTCCTGCAACAGGAATATCGACCTATTTTCCCCCAATCTGCACAGCCATGTCCCTACACATTTCCTCTGGACAATGCAAGTTCAACCTTCTGGGAGAACATGGATGGAATCTTTTTCTGACAAAAAGCAAGAGAATGAGATACTGATGAATTCTTTATCTCATATTACCAGGAAG [...]
+chr4-04	EST_Human	nucleotide_match	257865	258171	283.000000	-	.	Target=BF091525.1 8 318 +;percentID=96.1;Gap=M60 I1 M10 I1 M22 I1 M124 I1 M91 ;sequence=CACTCGCTTGTCTGGAAAAGATTCCATCCATGTTCTCCCAGAAGGTTGAACTTGCATTGTCCAGAGGCAAATGTGTATCGGACATGGCTGTGCATATTGGGCGGAAAATAGGTCGATATTCCTGTTGCAGGACCATTTGAAGTCTGAGAGTTTCTAGGTGAGAGGAAACGAACCTGGTTACTACATTTAGTGAGCAAGGCTCACAAAAGAGAGAATGGAAGACTAATGGCTAGGGATCCCCAAAAAGTGTGATGTCATGAGAATTGGAACCAAGTGGCACCCCAAGAGAACTAGCTTTCAGTGGCATGTTTCTGATGGACAACGCGATT
+chr4-04	EST_Human	nucleotide_match	257907	258469	557.000000	-	.	Target=GD261951.1 1 561 +;percentID=99.6;Gap=M18 D1 M10 D1 M533 ;sequence=CACAGTATGAGCAATTATGGGTGTCTTAGGGGTGTTTCTGGGTATTCTTTCTTCATGGGTATTTCCTGTCCACTCTGCTCAAATTTAGCGTACATATCTTGGGTTGTCTTTGGAGCATGAGATTTTTCTCCCCCAGGGGCTTTTTCCTGCTCATGTCTAACTGCCTCCTCTAACGTTCCCTCCTCAATAGATTGAGACTCCAAAAATCTTTGAGTCTAGGGGCACTGTGGGTCTTCTGTAACTACTTCCTGGTAATATGAGATAAAGAATTCATCAGTATCTCATTCTCTTGCTTTTTGTCAGAAAAAGATTCCATCCATGTTCTCCCAGAAGGTTGAACTTGCATTGTCCAGA [...]
+chr4-04	EST_Human	nucleotide_match	258964	259751	714.000000	-	.	Target=DA570951.1 1 788 +;percentID=95.1;sequence=TCTGATGTCTTCATGTGTTTATCCCCAGCTATGTATGCTTCACTGCTCTTCTTTGTGTTGTGGCTGCGGTTTCCTCGCTGTTCTCTTCATGCCATGTGGTTTCACTAGGACTTTCTAGGCTCTGATGAGAAGTTTGGAATTTTTGATGTATATTGTTTTTAACTGGCGTGTTTGAGATTGTAGCTTGTCAATGCAACATTCAGATCATGTAATTGAGGTAAGACTAATTCACTGTCCACATGTAGGAGGATTAAGTGAGCACCGTTTTTCTCTTTGTAAAAGAAAAATTGTATGAGAATCTAACACAAAGTGTGTTAGATGTAACATACCTTAATATATATTAAAGCATGAATATGGGTTGGTTGCAGATTGTAAGCA [...]
+chr4-04	EST_Human	nucleotide_match	258996	259238	158.000000	-	.	Target=CN414775.1 117 370 +;percentID=83.5;Gap=M19 I2 M66 D1 M26 I3 M4 I2 M1 I1 M4 I1 M1 I2 M88 I1 M33 ;sequence=GAGATGGGGTTTCACCATGTTGGCCAGGATGGTCTCGATCTTTTGACCTCATGATCTGCCTGCCTTGGCCTCCTGAAGTACTGGGATTACAGGCATGAGCCACCGTGCCTGGCCAGAATATTATATCTTTGAGTGTGAATGTTAAATGGTGGAAAAACAATAGAATGATCTCTGTAGATTCAAAATCTGCACTGATCTTTTTTGTCCAGATTCATATTACAATCTTGAGGAATTTCTCATAATTCTTTGTTTTAGTGGATGCATTTCATGGGCTACAGTTTTCATTTTTACTCACCTAACTTTATCCAAGTCCTT [...]
+chr4-04	EST_Human	nucleotide_match	258996	259241	164.000000	-	.	Target=BG702736.1 35 292 +;percentID=84.1;Gap=M22 I2 M93 I3 M4 I2 M1 I1 M4 I1 M1 I2 M88 I1 M33 ;sequence=AGCGGGATTACAGGCGTGAGCCACCGTGCCTGGCCAGAATATTATATCTTTGAGTGTGAATGTTAAATGGTGGAAAAACAATAGAATGATCTCTGTAGATTCAAAATCTGCACTGATCTTTTTTTGTCCAGATTCATATTACAATCTTGAGGAATTTCTCATAATTCTTTGTTTTAGTGGATGCATTTCATGGGCTACAGTTTTCATTTTTACTCACCTAACTTTATCCAAGTCCTTGGTCACCTTCTCTGGAAAAAAATTTGAAGATTATGGCAGCTGTTGAATCCAAACAGTTTCTCAGTGATTTTTTTTTTTTTTTTTTT [...]
+chr4-04	EST_Human	nucleotide_match	259276	259737	380.000000	-	.	Target=BI039926.1 6 485 +;percentID=91.7;Gap=M5 D1 M114 D1 M20 I1 M11 I1 M7 I1 M9 I1 M12 I1 M9 I1 M7 I1 M5 I1 M4 I1 M6 I1 M5 I1 M4 I1 M9 I1 M3 I1 M6 I1 M12 I1 M8 I1 M5 I1 M5 I1 M9 I1 M185 ;sequence=CGAACGTGTTATCCCCAGCTATGTATGCCTCACTGCTCTTCTTGGTGTTATGGCTACAGTTTCCTCACTGTTCTCCTCATGCCATGCAATTTCACTTGGACTTTCCAGGCTCTGATGAGAAGTTGGAATTTTTAATGTATATTGGTTTTTAACTGGGCGTGTTTAGCGATTATATGCTTATCAATGCCAACATTCAGCATCATGTCAATTGCAGGTCAAGACTCAATTCC [...]
+chr4-04	EST_Human	nucleotide_match	259608	259748	90.000000	+	.	Target=DA136141.1 1 138 +;percentID=83.9;Gap=M7 D1 M5 D2 M2 D1 M74 I2 M39 D1 M9 ;sequence=AAAAAGTCGAACCTATCAGAACCTGGAAAGTCCATGTGAAATTGCATGGCATGAAGAGAACAGTGAGAAAACCGTAGCCATAACACAAGGAGAGGAGCTGTGAGGCATACATAGCTGAGGATAAACATAAAACAAATCCTCTTTAAGGAGCGCCTCTGCCCAGCTGCCCAACTTTCTGGGAAGTGAGAAGCACCTCTGCCCAGCTGCCCCACCGTCTGGGAAGTGAGCAGCGCCTCTCCCTGGCCCCCAGCCCTGTCTGGGAATGAGAAGCGCCTTTGCCCGGCCACTGCACCGCCTGGGACGTGAGGAGCGCCTCTGCCTGGCTGCCACACCTTCTTG [...]
+chr4-04	EST_Human	nucleotide_match	259668	259918	232.000000	+	.	Target=CA427639.1 440 689 +;percentID=96.5;Gap=M219 D1 M31 ;sequence=TTTTTTTTTTTTTTTTATTATTTACGATGTGAGCTGGTGAGAAATTGTAAGAATGATTTTTATAAAATTTAGTACACAAATTTTTAGATGCAAGTTCACAATTTGTGTATTGTTATATTTGATCTAGTTAGAAAATTTCATTTTGTGGCTTTAACTGGAGAACTCTATATGAACCGTTTTCTTTAGTTGTTCCTTTCACTTTTTACTTGACATAAATGAGTTTATGTATTGTGTGCCAATTTGTTCAGGTAAGTACTGGGAAATCTTTTAAGTCATGGAGATGTTTTGATATAAAATTGTAGTGAACATAAGAAAGTGCTGTGTGTGTAATAGATGCTCCACAATTAGCCATAAATATT [...]
+chr4-04	EST_Human	nucleotide_match	259781	259895	69.000000	-	.	Target=CN414775.1 1 116 +;percentID=80.3;Gap=M22 I1 M93 
+chr4-04	EST_Human	nucleotide_match	260116	260701	566.000000	+	.	Target=BU785955.1 47 632 +;percentID=98.3;sequence=GCCCCCTTTCCACCCACGCGTCCGGTAATTTCACAATGTGTATAGCCACATTGTGAAATTACATTTAACCAGTATTTTCTGTGCACTAACTTTTTAAAAAAATTTTGTAATTTCTGACCAGCCCACATACTTTATGGAGTTAAAAAAGAAGAATGAGAAACGGGAAAATTATACCTCTAGCATGAGCACCACATTAAAACAGAGACTTTTTACAGGGAGATTCTCAAAAATGATCCATTAGATTTTACAGTAATTACATAAAAATAAGAAAACATAGATTTTAATTCAAAATGTTTTAGGTTTCTAGATTTCCAGTAAATTATCCACAGTATTAATAGAAACTTCTTTGTTCCAATATTGCTATTTTCTTCGGAAAA [...]
+chr4-04	EST_Human	nucleotide_match	260207	260737	266.000000	-	.	Target=AW876304.1 19 526 +;percentID=78.6;Gap=M10 D3 M1 D1 M18 I1 M33 D2 M3 D2 M13 D1 M1 D1 M1 D2 M4 D1 M3 D1 M16 I2 M8 I2 M46 I2 M11 I2 M52 I1 M102 D1 M62 D1 M3 D1 M5 D1 M1 D1 M22 D1 M1 D2 M1 D4 M19 D1 M1 D1 M1 D2 M45 D2 M1 D1 M14 ;sequence=NTCGACGAGTTGTCCGAGTTATACACTTTATTTTTCAATGTACAATTATTTTTTACTACAGATCGTTCTGTGATTGTAATATATCAAAGTATAATCCATATGTTTCTGAGTCCTGAATGAATACTTAAAAAAAATGTTTCATATTTGTCTTTGAACATGCAGTGTCTTGTCCTGCAAACACATACG [...]
+chr4-04	EST_Human	nucleotide_match	260470	260696	127.000000	-	.	Target=DA243951.1 367 595 +;percentID=80;Gap=M6 D1 M1 D1 M12 I1 M2 I1 M2 I1 M2 I1 M1 I1 M6 I1 M96 I2 M7 D2 M1 D1 M3 D1 M82 ;sequence=TGTGTTAAAATTTTTGTGCCGTGAATGAAGTGTTTTATTATGCCACCAACTTTCACCTATCCAACCTTACTCAAGGGTGTACGTTAAAGATGGTAACAATGTACTATCTGGTAATATAATTGAATGACATCTCTAGTCTTTTTTAGTGGCTTTCAACAGCAAATAAATTGAAGAATATTGTTTGCATGTTACATTTTTATTCTTATTGAAATTTTTCAAAAGGTTTTGTGAGTACATAGTATGTGTATATATTTATGGTATATATGGGTTATTTTGATACAGGCATACAGTATGT [...]
+chr4-04	EST_Human	nucleotide_match	337233	337698	291.000000	+	.	Target=DA588900.1 54 546 +;percentID=82.2;Gap=M97 I1 M193 I1 M7 I3 M1 I4 M1 I4 M2 I2 M1 I1 M2 I4 M2 I1 M1 I1 M14 I1 M1 I1 M7 I1 M2 I1 M2 I1 M133 ;sequence=GGCGTGGAGATATGGCGCAACTGCGGCGCGATTGACTTCTAAAGAGTCATGTTGGCCGGGCCCGGGGGCTCATACCTGTAATCCCGGCACTTTGGGAGGCCGAGACGGGCAGATCACGAGGTCAGGAGATCAAGACCATCCTGGCTAACACNGGTGAAACCCCGTCTCTACTACGAATACAAAAAATTACCTGGGCGTGTTGGCGGGCACCTGTAGTCCCAGCTACTCAGGAGGCTGAGGCAGGAGAATGGTGTGAACCCGGGAGGCGGAGCT [...]
+chr4-04	EST_Human	nucleotide_match	260560	260696	67.000000	-	.	Target=AL037864.1 447 589 +;percentID=76.6;Gap=M6 D1 M1 D1 M12 I1 M2 I1 M2 I1 M2 I1 M1 I1 M6 I1 M96 I2 M7 ;sequence=GGGGTGCAATAAAATGCAGTAAATTTTAAAATTCTCTTAAGATAATGTGTGAACTTAATTTTTGAAATAAAAATTGTTATTGTGTTAAAATTTTTGTGCCGTGAATGAAGTGTTTTATTATGCCACCAACTTTCACCTATCCAACCTTACTCAAGGGTGTACGTTAAAGATGGTAACAATGTACTATCTGGTAATATAATTGAATGACATCTCTAGTCTTTTTTAGTGGCTTTCAACAGCAAATAAATTGAAGAATATTGTTTGCATGTTACATTTTTATTCTTATTGAAATTTTTCAAAAGGTTTTGTGAGT [...]
+chr4-04	EST_Human	nucleotide_match	337233	337698	291.000000	+	.	Target=DA283460.1 62 554 +;percentID=82.2;Gap=M97 I1 M193 I1 M7 I3 M1 I4 M1 I4 M2 I2 M1 I1 M2 I4 M2 I1 M1 I1 M14 I1 M1 I1 M7 I1 M2 I1 M2 I1 M133 ;sequence=AAGTGGATGGCGTGGAGATATGGCGCAACTGCGGCGCGATTGACTTCTAAAGAGTCATGTTGGCCGGGCGCGGGGGCTCATGCCTGTAATCCCGGCACTTTGGGAGGCCGAGACGGGCAGATCACGAGGTCAGGAGATCAAGACCATCCTGGCTAACACNGGTGAAACCCCGTCTCTACTACGAATACAAAAAATTACCTGGGCGTGTTGGCGGGCACCTGTGGTCCCAGCTGCTCAGGAGGCTGAGGCAGGAGAATGGTGTGAACCCGGGAG [...]
+chr4-04	EST_Human	nucleotide_match	261262	261616	213.000000	-	.	Target=DA243951.1 1 366 +;percentID=81.4;Gap=M34 I2 M2 I3 M98 D1 M5 D2 M28 I3 M65 I1 M56 I1 M1 I1 M6 I1 M1 I2 M14 D1 M40 I1 M1 
+chr4-04	EST_Human	nucleotide_match	261262	261642	231.000000	-	.	Target=AL037864.1 54 446 +;percentID=81.6;Gap=M19 I1 M41 I2 M2 I3 M98 D1 M5 D2 M28 I3 M65 I1 M56 I1 M1 I1 M6 I1 M1 I2 M14 D1 M40 I1 M1 
+chr4-04	EST_Human	nucleotide_match	261326	261631	209.000000	-	.	Target=DB288459.1 225 537 +;percentID=85.1;Gap=M8 I1 M41 I2 M2 I3 M98 D1 M5 D2 M28 I3 M65 I1 M56 ;sequence=AATAAAAGATGCACCAGGAAAATCTGAGCAGAGAGGCTTTTAGTGGTTGACTTACTGAGTGATGCCTGAAGTAGGTGTTCAGAGTAATACTTTGCGTTATACTGAGAGAGAATCTGAATTTTAGTAGTAAATTGTTTTGCCAACNTGTATATTTATGTAATAAGTGCAATAAAATGCAGTAAATTTTAAAATTCTCTTAAGATAATGTGTGAACTTAATTTTTGAAATAAAAATTGTTATTGTGTTAAAATTTTTGTGCCGTGAATGAAGTGTTTTATTATGCCACCAACTTTCACCTATCCAACCTTACTCAAGGGTGTA [...]
+chr4-04	EST_Human	nucleotide_match	337233	337698	296.000000	+	.	Target=DA787952.1 64 555 +;percentID=82.7;Gap=M290 I1 M7 I3 M1 I4 M1 I4 M2 I2 M1 I1 M2 I4 M2 I1 M1 I1 M14 I1 M1 I1 M7 I1 M2 I1 M2 I1 M133 ;sequence=GGAAGTGGATGGCGTGGAGATATGGCGCAACTGCGGCGCGATCGACTTCTAAAGAGTCATGTTGGCCGGGCGCGGGGGCTCATACCTGTAATCCCGGCACTTTGGGAGGCCGAGACGGGCAGATCACGAGGTCAGGAGATCAAGACCATCCTGGCTAACACGGTGAAACCCCGTCTCTACTACGAATACAAAAAATTACCTGGGCGTGTTGGCGGGCACCTGTAGTCCCAGCTACTCGGGAGGCTGAGGCAGGAGAATGGTGTGAACCCGGGAGGCGGGG [...]
+chr4-04	EST_Human	nucleotide_match	261928	262144	150.000000	-	.	Target=DB288459.1 1 224 +;percentID=85.4;Gap=M54 I2 M87 I1 M12 I1 M1 I2 M3 I1 M1 I2 M31 D2 M26 
+chr4-04	EST_Human	nucleotide_match	261929	262384	297.000000	+	.	Target=BU616016.1 42 501 +;percentID=84;Gap=M25 D2 M31 I2 M1 I1 M3 I2 M1 I1 M99 I1 M52 D1 M2 D1 M45 I5 M101 I1 M14 D1 M29 D1 M16 D1 M1 D2 M27 ;sequence=TTTTTTTTTTTTTTTTTTAACACAATAACAATTTTTATTTCAAAAATTAAGTTCACACATTATCTTAAGAGAATTTTAAAATTTACTGCATTTTATTGCACTTATTACATAAATATACAGTTGGCAAAACAATTTACTACTAAAATTCAGATTCTCTCTCAGTATAACGCAAAGTATTACTCTGAACACCTACTTCAGGCATCACTCAGTAGTCAACCACTAAAAGCCTCTCTGCTCAGATTTTCCTGGTGCATCTTTTATTTCTCTTCTCTTTCA [...]
+chr4-04	EST_Human	nucleotide_match	337390	337508	63.000000	-	.	Target=BM800078.1 225 343 +;percentID=77.7;Gap=M26 I1 M12 D1 M3 I1 M72 D1 M4 ;sequence=ACTGGTGCCATCTCAGCTCACTGCAACTTCTGACTCCCGAGTTCAAGTGATTCTTTTGCCTCAGTCTCCCAAGTAGCTGGGACAACAGGGGCGTGCCGAGAAGCCCAGCTAATTTTGTACTTGTAGTAGAGAGCGGGTTTCACCACGCTGGCCAAAATTGTCTCAACCTCTTGATCTCATGATCCACCGCCTCACCCTCCCAAAGTGCTGGGATTACAGGCATGAGAGTCTCACTCTGTCCTTCAGGCTGTGAGTGCAGTCTCCTGATCTTGGCTCACTGCAACCTCTGTCTCCTGGGTTCAAGTGATTCTTGTGCCTCAGCCTACCAAGTAGCTGAGATAC [...]
+chr4-04	EST_Human	nucleotide_match	261929	262384	297.000000	+	.	Target=CA442913.1 42 501 +;percentID=84;Gap=M25 D2 M31 I2 M1 I1 M3 I2 M1 I1 M99 I1 M52 D1 M2 D1 M45 I5 M101 I1 M14 D1 M29 D1 M16 D1 M1 D2 M27 ;sequence=TTTTTTTTTTTTTTTTTTAACACAATAACAATTTTTATTTCAAAAATTAAGTTCACACATTATCTTAAGAGAATTTTAAAATTTACTGCATTTTATTGCACTTATTACATAAATATACAGTTGGCAAAACAATTTACTACTAAAATTCAGATTCTCTCTCAGTATAACGCAAAGTATTACTCTGAACACCTACTTCAGGCATCACTCAGTAGTCAACCACTAAAAGCCTCTCTGCTCAGATTTTCCTGGTGCATCTTTTATTTCTCTTCTCTTTCA [...]
+chr4-04	EST_Human	nucleotide_match	337539	337697	159.000000	+	.	Target=DB221880.1 174 332 +;percentID=100;sequence=CTTTGCGTCTGGCTACTACCAGACCGCGGGTTAGGGGCTTCATCTCTCTGCGTCCTCAGTTCTGGGAGGCCTTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTGGTAGCTAAGACTCCCGAATACNTTCAGAAGTGGGGAAATGAACTATGTCCCTTGATATATTTGTATTTTCAGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGACCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTGTTGCTATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAA [...]
+chr4-04	EST_Human	nucleotide_match	261929	262388	297.000000	+	.	Target=DB316679.1 24 489 +;percentID=83.8;Gap=M25 D2 M31 I2 M1 I1 M3 I2 M1 I1 M29 I1 M70 I2 M52 D1 M2 D1 M45 I5 M101 I1 M14 D1 M29 D1 M16 D1 M1 D2 M31 ;sequence=AACACAATAACAATTTTTATTTCAAAAATTAAGTTCACACATTATCTTAAGAGAATTTTAAAATTTACTGCATTTTATTGCACTTATTACATAAATATACAGTTGGCAAAACAATTTACTTACTAAAATTCAGATTCTCTCTCAGTATAACGCAAAGTATTACTCAGAACACCTACTTCAGGCATCACTCAGTAAGTCAACCACTAAAAGCCTCTCTGCTCAGATTTTCCTGGTGCATCTTTTATTTCTCTTCTCTTTCATGTAGAA [...]
+chr4-04	EST_Human	nucleotide_match	337486	337720	88.000000	+	.	Target=DA231238.1 266 503 +;percentID=70.1;Gap=M14 D1 M10 I1 M1 I1 M3 I1 M24 I1 M2 I1 M7 I1 M6 D1 M8 D1 M157 ;sequence=AGATTCTCGCAAATCTGGAAGCGGATCGCGTGGAGTGACGGTCACACCGCGGCGAATTAATTCCCAAAGACTCATGTTACATGAGAAAGCCACCAAGAAGACCAAAGAAAAGGAGACAAGGATGGCCTCTTCCTCAGGGATGCCTTGACTTTCAAGGATGTGGCTATAGAATTCTCTTTGGAGGAGTGGAAATGCCTGAACCCTGCACGGAGGGCTTTATACAGGGCCGTGATGTTGGAGAACTACAGGAACCTGGAGTCTGTGGGATCGACTTCTAAGGACTCTTGGTACATGAGGAAGAAACCCGGAA [...]
+chr4-04	EST_Human	nucleotide_match	261929	262384	299.000000	-	.	Target=BQ187251.1 136 596 +;percentID=84.3;Gap=M27 D2 M1 D1 M16 D1 M29 D1 M14 I1 M101 I5 M45 D1 M2 D1 M52 I2 M99 I1 M1 I2 M3 I1 M1 I2 M31 D2 M25 ;sequence=GAGAAATATTTAGGCTAAAATTAAGACTATGTAAACATCAGAGGATTTACAGTAGAAAGAACTAAGGAACTAACACTTCAGACTTTAAAATAAATCAGAGTATTAAGTATAACAAAAGTTGAACCTGTTAGAAAATTTCCTTGTATATAAGTTGAAAAGTAGGTTTTTGAAGAGATATATTCGAAATATATTTTTTCACTTGAAAAAAGTAAAAATTTTTTTCAAAAGCAAATAATTCAACTCTAAAATTATACTATTTCAACATTCTCATTT [...]
+chr4-04	EST_Human	nucleotide_match	337553	337710	106.000000	-	.	Target=DB346087.1 132 289 +;percentID=83.5;sequence=GCAGCATTATGAAGCTTTTTATTTGTGAGTCAACAAGGCTTCAGTCTCAGTCAAATAATGGAAGGGCTCCCAAGAAAGACAACAGAGAAAATACAAAAATACACGAGGGCAGATCTTAACCTTCTAGAGCAAAATTATCCTTACCCAGGAAGACCAGGTTCCTGTAGTTCTCCAACATCACATCCCAGTACAAAGCTTTCTGCACAGGGTCCAGGGATTTCCACTCCTCCTGAGAGAATTCTATGGCTACATCCCTGAATGTCAAAGGTCCCTGAAATGAAAAACACATTTCAACATGAGCAATGGGAGAGCTCTTATCTATACATAAAATGAGAAGAGGAGAGAACTGTCACATCAATTTGATTGTGTGTTTTCA [...]
+chr4-04	EST_Human	nucleotide_match	261929	262388	299.000000	+	.	Target=AI681521.1 35 498 +;percentID=83.9;Gap=M25 D2 M31 I2 M1 I1 M3 I2 M1 I1 M99 I1 M52 D1 M2 D1 M45 I5 M101 I1 M14 D1 M29 D1 M16 D1 M1 D2 M31 ;sequence=TTTTTTTTTTTAACACAATAACAATTTTTATTTCAAAAATTAAGTTCACACATTATCTTAAGAGAATTTTAAAATTTACTGCATTTTATTGCACTTATTACATAAATATACAGTTGGCAAAACAATTTACTACTAAAATTCAGATTCTCTCTCAGTATAACGCAAAGTATTACTCTGAACACCTACTTCAGGCATCACTCAGTAGTCAACCACTAAAAGCCTCTCTGCTCAGATTTTCCTGGTGCATCTTTTATTTCTCTTCTCTTTCATGTAG [...]
+chr4-04	EST_Human	nucleotide_match	337567	337697	89.000000	+	.	Target=DB447371.2 219 349 +;percentID=84;sequence=GGTCTAGCGGGGCCTTTGTGCCGACAGAGCTCCACTTCCTGTCCCCGCGGCTCTGTGTCCCCTGCTAGCCGTAGGCCGTGTGACCCGCAGGCACCGGGAGATCCAGAAGTGAAACGCCAGGCTCTCTGGAGGCCAGGAGATGGTGTGATTTGTCCAGAGAATCTTTCCTAAGAGGAAATCCCAGAGAAGCAGGAGAAAGAGAAAGAAATGGCTGGTGCTCAGACTCTGGTGACGTTCAGGGATGTGGCCATAGAATTCTCCCTGGAGGAGTGGAAATGCCTGGACCTCGCTCAGCAGAATTTGTACAGGGATGTGATGTTGGAGAACTACAGAAACTTGGTCTCCGTTGGTCTCACTGTCTGTAAGCCAGGCCTGATCA [...]
+chr4-04	EST_Human	nucleotide_match	261929	262384	301.000000	+	.	Target=CA312619.1 42 502 +;percentID=84.5;Gap=M25 D2 M31 I2 M1 I1 M3 I2 M1 I1 M99 I2 M52 D1 M2 D1 M45 I5 M101 I1 M14 D1 M29 D1 M16 D1 M1 D2 M27 ;sequence=TTTTTTTTTTTTTTTTTTAACACAATAACAATTTTTATTTCAAAAATTAAGTTCACACATTATCTTAAGAGAATTTTAAAATTTACTGCATTTTATTGCACTTATTACATAAATATACAGTTGGCAAAACAATTTACTACTAAAATTCAGATTCTCTCTCAGTATAACGCAAAGTATTACTCTGAACACCTACTTCAGGCATCACTCAGTAAGTCAACCACTAAAAGCCTCTCTGCTCAGATTTTCCTGGTGCATCTTTTATTTCTCTTCTCTT [...]
+chr4-04	EST_Human	nucleotide_match	337320	337490	92.000000	+	.	Target=BX956892.1 257 425 +;percentID=77.2;Gap=M39 D2 M130 ;sequence=GGCCCACCTCGTGGGCTCCACGGAGGCCTGGCTTCTGTCCTGTGCTTGTAGATTCGCCCGGACCAGGAAGCGGATCGCGTGGACTGGAAGTCACACTGCGGCGGGAGGGGGTATGTTGACTCTGAGCAATAAACAACATATTTCTAACATTCATGATTGACTTCTAAAGACTCTGGGTATGTGAAGAAGAAACTCANAAGAGGAAGAGGAAAGCAAAGGAGTCAGGGATGGCTCTTCCTCAGGTAATTGANTGAGTCTGACCAACATGGAGAAACCCTGTCTCTAGCAAAAATACAAAATTANCTGGGCATGGTGGTGTGTGCCTGCAATCCCTGCTACTCAGGAGACTGAGGCAGAAGA [...]
+chr4-04	EST_Human	nucleotide_match	261929	262388	301.000000	+	.	Target=AW513477.1 26 490 +;percentID=84.2;Gap=M25 D2 M31 I2 M1 I1 M3 I2 M1 I1 M99 I2 M52 D1 M2 D1 M45 I5 M101 I1 M14 D1 M29 D1 M16 D1 M1 D2 M31 ;sequence=TTAACACAATAACAATTTTTATTTCAAAAATTAAGTTCACACATTATCTTAAGAGAATTTTAAAATTTACTGCATTTTATTGCACTTATTACATAAATATACAGTTGGCAAAACAATTTACTACTAAAATTCAGATTCTCTCTCAGTATAACGCAAAGTATTACTCTGAACACCTACTTCAGGCATCACTCAGTAAGTCAACCACTAAAAGCCTCTCTGCTCAGATTTTCCTGGTGCATCTTTTATTTCTCTTCTCTTTCATGTAGAAGTCTAT [...]
+chr4-04	EST_Human	nucleotide_match	261963	262384	273.000000	+	.	Target=BU620973.1 15 442 +;percentID=83.7;Gap=M24 I2 M1 I1 M3 I2 M1 I1 M99 I1 M52 D1 M2 D1 M45 I5 M101 I1 M14 D1 M29 D1 M16 D1 M1 D2 M27 ;sequence=TTTTTTTTTTTTTTTTTTAAAATTTACTGCATTTTATTGCACTTATTACATAAATATACAGTTGGCAAAACAATTTACTACTAAAATTCAGATTCTCTCTCAGTATAACGCAAAGTATTACTCTGAACACCTACTTCAGGCATCACTCAGTAGTCAACCACTAAAAGCCTCTCTGCTCAGATTTTCCTGGTGCATCTTTTATTTCTCTTCTCTTTCATGTAGAAGTCTATGAATAATGCCCACCTAATGCAAAGGAGTTTCTCATATCTCTGACGCAGCAA [...]
+chr4-04	EST_Human	nucleotide_match	262014	262384	88.000000	+	.	Target=AL571386.2 97 502 +;percentID=65.5;Gap=M6 D1 M17 I1 M53 I2 M8 I2 M4 I1 M2 I1 M38 I2 M2 I2 M47 I5 M50 I2 M5 D1 M4 I1 M1 I2 M5 I1 M1 I1 M5 I1 M2 I2 M9 I1 M5 I2 M26 D1 M32 I1 M2 I2 M2 I2 M9 I1 M2 I3 M31 ;sequence=AAGSTTATAAATAATCTAAAAATTTTCAAATNGTANTGNATTTATAGCATAAAAGTACAATTAGTAAAATGATTCACTAGTAATTTAATTACATTTAATTTAAAGTAAAATTAAAAATGCCTTTTCTCTATGATGCAGAATATTACTCCAAACACCTACCTCATGCATCACTCAATATGAAAAGTAAACTAACAGGGCCTCTCCACTTAGAT [...]
+chr4-04	EST_Human	nucleotide_match	337564	337697	88.000000	+	.	Target=BG192751.1 53 186 +;percentID=83;Gap=M26 D1 M10 I1 M97 ;sequence=TCCTTATACTATAATCTGTAACGAAAATACATACAAAGTTGAAAAACAGGACTTCTCGNGGGCACTTGACATTCAGTGCGTGGCCATACCAATTCTCTCAGGAGGAGTGGAAATGCCTGGACCCTGTGCAGAAGGCTTTATACAGGGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGAATCTGTCTTCCTGACCTGAGTATTATCTCCATGATGAAGCAAAGGACAGAGCCCAGGACTGTGGAGAATGAAATGAAAGTAGCAAAAAATCCAGATAGGTGGGAAGGTATCAAAGATATCAAC
+chr4-04	EST_Human	nucleotide_match	262041	262384	223.000000	-	.	Target=CB158662.1 189 533 +;percentID=83.8;Gap=M27 D2 M1 D1 M16 D1 M29 D1 M14 I1 M101 I5 M45 D1 M2 D1 M52 I2 M50 ;sequence=AGAAACACCAGAGAATTTTTACTAGAATATAATTTGTAGGTGCAGTAAATGTGAAGAAATATTTAGGCTAAAATTAAGACTATGTAAACATCAGAGGATTTACAGTAGAAAGAACTAAGGAACTAACACTTCATATTTTATAATAAATCAGAGTATTAAGTATAACAAAAGTTGAACCTGTTAGAAAATTTCCTTGTATATAAGTTGAAAAGTAGGTTTTTGAAGAGATATATTCGAAATATATTTTTTCACTTGAAAAAAGTAAAAATTTTTTTCAAAAGCAAATAATTCAACTCTAAAATTAT [...]
+chr4-04	EST_Human	nucleotide_match	337567	337697	87.000000	+	.	Target=CB128971.1 258 388 +;percentID=83.2;sequence=AATCAGGCACATGTCTGGAGAGGAGAAGACGGCTTCCGGGATCTAGCGGGGCCTTTGTCCCGACAGAGCTCCACTTCCTGTCCCCGCGGCTCTGTGTCCCCTGCTAGCCGTAGGCCGTGTGACCCGCAGGCACCGGGAGATCCAGAAGTGAAACGCCAGGCTCTCTGGAGGCCAGGAGATGGTGTGATTTGTCCAGAGAATCTTTCCTAAGAGGAAATCCCAGAGAAGCAGGAGAAAGAGAAAGAAATGGCTGGTGCTCAGACTCTGTTGACGTTCAGGGATGTGGCCATAGAATTCTCCCTGGAGGAGTGGAAATGCCTGGACCTCGCTCAGCAGAATTTGTACAGGGATGTGATGTTGGAGAGCTACAGAAACTT [...]
+chr4-04	EST_Human	nucleotide_match	262065	262360	178.000000	+	.	Target=BX453464.2 1 299 +;percentID=81.6;Gap=M25 D1 M2 I2 M4 D1 M45 D1 M2 D1 M45 I5 M101 I1 M14 D1 M29 D1 M6 I1 M17 ;sequence=CTGAACACCTACTTGAGGCATCACTTAGTAGTCACTCCTAAAAGCCTCTCTGCTCAGATTTTCCTGGTGCATCTTTTATTTCTCTTCTCTTTCATGTAGAAGTCTATGAATAATGCCCACCTAATGCAAAGGAGTTTCTCATATCTCTGACGCAGCAACAATTTATCACATGCTTTCACATAAATGAGAATGTTGAAATAGTATAATTTTAGAGTTGAATCATTCGCTTTTGAAAAAAATTTTTACTTTTTTCAAGTGAAAAAATATATTCCGAATATATCGTGTTCAAAAACCTACTTTGC [...]
+chr4-04	EST_Human	nucleotide_match	262149	262360	129.000000	-	.	Target=Z30125.1 157 372 +;percentID=81.7;Gap=M23 D1 M29 D1 M14 I1 M100 I5 M28 D1 M7 I1 M8 ;sequence=AAGAAATATTTAGGCTAAAATTAAGACTATGTAAACATCAGAGGATTTACCGTAGAAAGAACTAAGGAACTAACACTNCAGACTTTAAAATAAATCAGAGTATTAAGTATAACAAAAGTTGACCCTGTTAGAAAATNTCCTTGTATATAAGTTGAAAAGTAGGTTTGTGAAGAGATATATTCGAAATATATTTTTTCACTTGAAAAAAGTAAAAATTTTTCACAAAAGCAAATAACTCATCTCTAAAATTATTCTATTTCAACATTCTCATTTATGTGAAAGCATGTGATAAATTGTTGCTGCGTCAGAGATATGAGAAACTCTTTTG [...]
+chr4-04	EST_Human	nucleotide_match	262180	262384	114.000000	-	.	Target=AV732491.2 195 391 +;percentID=80.8;Gap=M27 D2 M1 D1 M16 D1 M29 D1 M14 I1 M21 D4 M42 D1 M1 D1 M27 I1 M3 I1 M13 ;sequence=AAGAAAAGAAACACCAGAGAATTTTTACTAGAATATAATTTGTAGGTGCAGTAAATGTGAAGAAATATTTAGGCTAAAATTAAGACTATGTAAACATCAGAGGATTTACAGTAGAAAGAACTAAGGAACTAACACTTCAGACTTTAAAATAAATCAGAGTATTAAGTATAACAAAAGTTGAACCTGTTAGAAAATTTCCTTGTATATAAGTTGAAAAGTAGGTTTTTGAAGAGATATATTCGAAATATATTTTTTCACTTGAAAAAAGTAAAAATTTTTTTCAAAAGCAAATAATTCAAC [...]
+chr4-04	EST_Human	nucleotide_match	262226	262375	94.000000	-	.	Target=BG569463.1 605 751 +;percentID=83.7;Gap=M3 I1 M15 D2 M1 D1 M4 D1 M11 D1 M29 D1 M18 I1 M23 I1 M40 ;sequence=GCATAAGAAAATTCATACTGGAGAGAAACCCTACACGTGTGGAGACTGTGGCAAAACCTTTAGACAGTCTGCAAATCTTTATGCACATAAGAAAATTCATACTGGAGATAAAACCATACAAGTGTAAAGAATGTGGCAAAGCCTTTAAGTCATACTACAGCATTCTTAAACATAAGAGAACTCATACCAGGGGAATGTCTTACGAAGGTGACGAATGTCGCGGTCTTTAAATGCTCCTCAATCCTTTCTAATCATAAGATAATTCATAATGAAGAGAAACTCTAAAATGTGAAACACATGTGAGAAGGCTTTTAA [...]
+chr4-04	EST_Human	nucleotide_match	262384	262680	170.000000	-	.	Target=BM803355.1 496 795 +;percentID=78.3;Gap=M63 I2 M17 I1 M2 D1 M51 D1 M13 D1 M4 I2 M36 I1 M22 D1 M49 I1 M36 ;sequence=TTAACTAAAATTAAAAATGTGGCAAAGACTTCCAATTCTAGTCAGTTCTTAATGTAATTCCTACTGAAGAAAACACCTNGGAAATACAAAAAATGTGGCAAAACTTGTAACCAATGCTTAGCATTTTTGCACATGATAGTATTTATATGTGAGACTACTTGTACAAACATAAAAATATACAAAAGCTATTGTCTACTTGAAATTTATAGTTAATAAAAGCATTATAAATGTAATTTCTGTTGAAAGACCTTTTAGAAAATATAGGCCATTAAAGTGAAGAATAGTCTTAAGACAGAGAATACAAAG [...]
+chr4-04	EST_Human	nucleotide_match	262394	262680	189.000000	+	.	Target=DB349057.1 4 292 +;percentID=83.5;Gap=M24 I1 M132 D1 M47 D1 M2 I1 M17 I2 M63 ;sequence=ATCTTGTTTTGAGACAGAGTTTCACTCTTGTTACCCAGGCTGGAGTGCAATGGCACGATCTCAGCTCACCGCAACCTCCACCTCCTGGGTTCAAGCCATTCTCCTGTCTCAGCCTCCTGAGTAGCTGGGATTACAGCCATGCACCACCATGTCCTGCTAATTTTTGTATTTTTAGTACAGACGAGGTTTCTCCATATTGGTCAGGCTGTCCTTGAACTCCCGACCTCAGGTGATCCACCCTCCTTGGCCTCCCAAAGTGTTGGGATTACAGGCGTGAGCCACCGCGCCTGGCCTCTGGTTTCTTAACCTGCAGTTTCTGAACAGAGGTTTTTCC [...]
+chr4-04	EST_Human	nucleotide_match	262394	262680	189.000000	+	.	Target=DB324740.1 2 290 +;percentID=83.5;Gap=M24 I1 M132 D1 M47 D1 M2 I1 M17 I2 M63 ;sequence=CTTGTTTTGAGACAGAGTTTCACTCTTGTTACCCAGGCTGGAGTGCAATGGCACGATCTCAGCTCACCGCAACCTCCACCTCCTGGGTTCAAGCCATTCTCCTGTCTCAGCCTCCTGAGTAGCTGGGATTACAGCCATGCACCACCATGTCCTGCTAATTTTTGTATTTTTAGTACAGACGAGGTTTCTCCATATTGGTCAGGCTGTCCTTGAACTCCCGACCTCAGGTGATCCACCCTCCTTGGCCTCCCAAAGTGTTGGGATTACAGGCGTGAGCCACCGCGCCTGGCCTCTGGTTTCTTAACCTGCAGTTTCTGAACAGAGGTTTTTCCAC [...]
+chr4-04	EST_Human	nucleotide_match	262394	262680	189.000000	+	.	Target=DB326282.1 2 290 +;percentID=83.5;Gap=M24 I1 M132 D1 M47 D1 M2 I1 M17 I2 M63 ;sequence=CTTGTTTTGAGACAGAGTTTCACTCTTGTTACCCAGGCTGGAGTGCAATGGCACGATCTCAGCTCACCGCAACCTCCACCTCCTGGGTTCAAGCCATTCTCCTGTCTCAGCCTCCTGAGTAGCTGGGATTACAGCCATGCACCACCATGTCCTGCTAATTTTTGTATTTTTAGTACAGACGAGGTTTCTCCATATTGGTCAGGCTGTCCTTGAACTCCCGACCTCAGGTGATCCACCCTCCTTGGCCTCCCAAAGTGTTGGGATTACAGGCGTGAGCCACCGCGCCTGGCCTCTGGTTTCTTAACCTGCAGTTTCTGAACAGAGGTTTTTCCAC [...]
+chr4-04	EST_Human	nucleotide_match	262397	262680	188.000000	+	.	Target=DB315243.1 2 287 +;percentID=83.7;Gap=M21 I1 M132 D1 M47 D1 M2 I1 M17 I2 M63 ;sequence=GTTTTGAGACAGAGTTTCACTCTTGTTACCCAGGCTGGAGTGCAATGGCACGATCTCAGCTCACCGCAACCTCCACCTCCTGGGTTCAAGCCATTCTCCTGTCTCAGCCTCCTGAGTAGCTGGGATTACAGCCATGCACCACCATGTCCTGCTAATTTTTGTATTTTTAGTACAGACGAGGTTTCTCCATATTGGTCAGGCTGTCCTTGAACTCCCGACCTCAGGTGATCCACCCTCCTTGGCCTCCCAAAGTGTTGGGATTACAGGCGTGAGCCACCGCGCCTGGCCTCTGGTTTCTTAACCTGCAGTTTCTGAACAGAGGTTTTTCCACATT [...]
+chr4-04	EST_Human	nucleotide_match	262405	263065	333.000000	-	.	Target=DB507896.2 7 652 +;percentID=77.1;Gap=M21 I1 M114 I1 M4 D1 M47 D1 M3 I1 M9 D2 M20 I1 M18 D1 M1 D1 M73 D1 M2 D1 M2 D1 M6 D2 M1 D1 M9 D1 M4 D3 M17 D1 M1 D1 M13 D1 M31 D1 M32 I2 M66 D2 M132 I1 M13 ;sequence=GATGACCACTACAAATGTGAAGAGGGTTGTAGTACCTTTATTTGTATCACAGATTTTATTGTACACATTTTGTACTAGAAGAAAACTCTGAAGTAGTTGCTCAAACTTTGTTCAACATCAGGGAATTTATATTGAAGAAAAACTTTGCAAATTTAATAAATTTTAAAAAACACTTTTTCAAAAAGTACAGCTTAGAAGACACCAGAGTTCATACTAA [...]
+chr4-04	EST_Human	nucleotide_match	262647	263199	551.000000	+	.	Target=DA327460.1 4 557 +;percentID=99.8;Gap=M154 I1 M399 ;sequence=TTAGCTGGGATTACAGGCGTGAGCCACCGTGCCCGGCCAACAAAGAAAGTTTCTAACAGGTTGAACTTTGGATTTTTTTACACTTAATACTCCGATTTCTTGTAAGGTGTTAGTTCCTTAGTTCTTTCTCCAGTAAATCCTCTGATGTTTACATAGGCCTTAATTTTAGCCTAAATATTTCTCCACATTTATTGCATCTACAAATTCTCTTCTAATATAAACTCTCTAGTGTTTCTTAACCTGCAGTTTTTGAACAGATGTTTTTCCACATTTATTACATTTGTCGTATTTCGCTCCAATGTAAATTCTCTGATGTTGAACAAAGTTTGAGCAACTGCTTCTGAGTCTTCCGCTAGTACA [...]
+chr4-04	EST_Human	nucleotide_match	262671	262905	81.000000	+	.	Target=BX453464.2 300 541 +;percentID=70.2;Gap=M45 D6 M25 I1 M3 I3 M2 I1 M2 I2 M107 I1 M22 I1 M5 I1 M3 I2 M5 I1 M10 
+chr4-04	EST_Human	nucleotide_match	262672	262824	76.000000	-	.	Target=Z30125.1 2 156 +;percentID=77.8;Gap=M75 I2 M1 I4 M2 I1 M31 D6 M27 I1 M11 
+chr4-04	EST_Human	nucleotide_match	262672	263089	407.000000	+	.	Target=AW381146.1 2 419 +;percentID=98.8;Gap=M6 D1 M69 I1 M342 ;sequence=GGTGGCCTCCAGCAAAGAAAGTTTCTAACAGGTTGAACTTTGGATTTTTTTACACTTAATACTCCGATTTCTTGTANAGGTGTTAGTTCCTTAGTTCTTTCTCCAGTAAATCCTCTGATGTTTACATAGGCTTAATTTTAGCCTAAATATTTCTCCACATTTATTGCATCTACAAATTCTCTTCTAATATAAACTCTCTAGTGTTTCTTAACCTGCAGTTTTTGAACAGATGTTTTTCCACATTTATTACATTTGTCGTATTTCGCTCCAATGTAAATTCTCTGATGTTGAACAAAGTTTGAGCAACTGCTTCTGAGTCTTCCGCTAGTACAAAATGTGTACAGTAAGATCCAGG [...]
+chr4-04	EST_Human	nucleotide_match	262683	262879	113.000000	-	.	Target=R22735.1 104 308 +;percentID=80.9;Gap=M109 I1 M21 I2 M1 I4 M2 I2 M21 D1 M9 D3 M7 I1 M8 I1 M11 I1 M4 ;sequence=GCTTGAACCCAGGAGGTGGAGGTTGCGGTGANTGAGATCGTGCCATTGCACTCCAGCCTGGGTAACAAGAGTGAAACTCTGTCTCAAAACAAGAAAAAAAGAAAAGAAACACCAGAGAATTTTTACTAGAATATAATTTGTAGGTGCAGTAAATGTGAAGAAATATTTAGGCTAAAATTAAGACTATGTAAACATCAGAGGATTTACAGTAGGAAAGAACTAAGGAACTAACACTTCAGACTTTTAAAATAAATCAGAGTATTTAAGTATTAACAAAAGTTGGAACCTGTTTAGGAAATTTCCCTTGTATT [...]
+chr4-04	EST_Human	nucleotide_match	337567	337698	93.000000	-	.	Target=BI007170.1 381 512 +;percentID=84.8;sequence=GTTCTCACAGAATCTCCCATTTGCAGAGAGTTTCCCAAACGCTATGTAATAGTGTGGCTTTGCAGGGTACAGTGGCTCATGGCTGTAATCCCAACACTTTGGAAGAGCGAGCCAGGAGATCCCTTAAGTCCAGGAATTCAAGGCTGCAGTGAGCTATGATTGCCACCGCACTCTAGCCTGGATGACAGCGTTAGACCCTGTCTCAAAAAACAAAAATTATGGGGCCTCCACTCTGCCCACCCGAGCTCTCACCTGTGTTCACACCTTTGATGCACTCCCTGCCGTCTGGATCGTTTGCTATTTTCTCTTCACTCTGCAGAGTCCAGGNATCTCTCTTTTGCTCTAACATGGAGGTAACACTCAGGTCAGGAAGACAG [...]
+chr4-04	EST_Human	nucleotide_match	262683	262887	121.000000	-	.	Target=BG569463.1 399 604 +;percentID=81.6;Gap=M138 I2 M1 I4 M2 I1 M31 D6 M27 
+chr4-04	EST_Human	nucleotide_match	262683	262879	124.000000	-	.	Target=DW431518.1 53 250 +;percentID=82.6;Gap=M130 D1 M2 D1 M2 D1 M11 I1 M15 I1 M3 I1 M4 I1 M27 ;sequence=GGCCATTACGGCCGGGAGAGTGAAACTCTGTCTCAAAACAAGAAAAAAAGAAAAGAAACACCAGAGAATTTTTACTAGAATATAATTTGTAGGTGCAGTAAATGTGAAGAAATATTTAGGCTAAAATTAAGACTATGTAAACATCAGAGGATTTACAGTAGAAAGAACTAAGGAACTAACACTTCAGACTTTAAAATCAATCAGAGTATTAAGTATAACAAAAGTTGAACCTGTTAGAAAATTTCCTTGTATATAAGTTGAAAAGTAGG
+chr4-04	EST_Human	nucleotide_match	337568	337774	102.000000	-	.	Target=N94749.1 67 272 +;percentID=75.6;Gap=M5 D2 M18 I1 M13 D1 M15 I1 M153 ;sequence=CAGCATTATGAAGCTTTTTATTTGTGAGTCAACAAGGCTTCAGTCTCAGTCAAATAATGGAAGGGCTCCCAAGAAAGACAACAGAGAAAATACAAAAATACACGAGGGCAGATCTTAACTTCTAGAGCAAAATTATCCTTACCCAGGAAGACCAGGTTCCTGTAGTTCTCCAACATCACATCCCAGTACAAAGCTTTCTGCACAGGGTCCAGGGATTTCCACTCCTCCTGAGAGAATTCTATGGCTACATCCCTGAATGTCAAAGGTCCCTGTGTAAGAGCCATCCCTGACTCCTTTTCTTTCCTCTTCTTCCTCTTCTGGGGCTTCTCTCTCAGTCAATAT [...]
+chr4-04	EST_Human	nucleotide_match	262683	263232	263.000000	-	.	Target=BF031091.1 3 557 +;percentID=77.2;Gap=M25 I1 M8 D2 M81 D1 M3 D1 M67 I1 M26 D1 M41 D6 M1 D2 M18 I1 M6 I1 M66 D1 M1 D2 M2 D3 M1 D4 M33 I1 M7 I1 M25 I1 M21 I1 M5 I1 M4 I1 M10 I1 M6 I1 M6 I1 M3 I4 M2 I3 M21 I1 M1 I1 M5 I1 M1 I2 M8 I1 M12 I1 M5 I1 M6 ;sequence=TCGAGAAAAGTTATAGAAATATAAAAAATATAGAAAAGTCATATCTCCTCACATTTTACTAACTAGCACAGTTCATACTTAATAAAAACATTATAAATGTAATTTCTGTTGAAAGACTTCAGAAAATATAGGCCTTTAAAGTGAAGAAGAGTATTCTTAAGACAA [...]
+chr4-04	EST_Human	nucleotide_match	337569	337697	99.000000	+	.	Target=DB028799.1 62 190 +;percentID=88.4;sequence=AGTGCGTTACCAAACAGCTTTAACCTGGATGTGGAGGAGGATGACATTGAGAATCTCTTAGAGGGACACTTGACATTCAGGGACGTGGCCATAGAATTCTCTCAGGAGGAGTGGAAATGCCTGGACCCTGTGCAGAAGGCTTTATACAGGGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGAATCTGTCTTCCTGACCTGAGTATTATCTCCATGATGAAGCAAAGGACAGAGCCCTGGACTGTGGAGAATGAAATGAAAGTAGCAAAAAATCCAGATAGGTGGGAAGGTATCAAAGATATCAACACAGGGAGGAGCTGTGCAGTGAGAAGCAAAGCAGGAAACAAGCCTATTACAAATCAACTTGGA [...]
+chr4-04	EST_Human	nucleotide_match	262690	263252	563.000000	+	.	Target=DB253512.1 1 563 +;percentID=100;sequence=AAGTTTCTAACAGGTTGAACTTTGGATTTTTTTACACTTAATACTCCGATTTCTTGTAAGGTGTTAGTTCCTTAGTTCTTTCTCCAGTAAATCCTCTGATGTTTACATAGGCTTAATTTTAGCCTAAATATTTCTCCACATTTATTGCATCTACAAATTCTCTTCTAATATAAACTCTCTAGTGTTTCTTAACCTGCAGTTTTTGAACAGATGTTTTTCCACATTTATTACATTTGTCGTATTTCGCTCCAATGTAAATTCTCTGATGTTGAACAAAGTTTGAGCAACTGCTTCTGAGTCTTCCGCTAGTACAAAATGTGTACAGTAAGATCCAGGATACAAGTACAGGTACTACACCCTCTTTATATTTGTATTGTCT [...]
+chr4-04	EST_Human	nucleotide_match	337569	337697	99.000000	+	.	Target=CD358945.1 105 233 +;percentID=88.4;sequence=GGATGTGGAGGAGGATGACATTGAGAATCTCTTAGAGGTGGTTCATGAGGAATGGGTTAATGAGGAGTCATTGGAACTGATACAGGAACATGTAGCTGAAGAAGAGGGACACTTGACATTCAGGGACGTGGCCATAGAATTCTCTCAGGAGGAGTGGAAATGCCTGGACCCTGTGCAGAAGGCTTTATACAGGGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGAATCTGTCTTCCTGACCTGAGTATTATCTCCATGATGAAGCAAAGGACAGAGCCCTGGACTGTGGAGAATGAAATGAAAGTAGCAAAAAATCCAGATAGGTGGGAAGGTATCAAAGATATCAACACAGGGAGGAGCTGTGCAG [...]
+chr4-04	EST_Human	nucleotide_match	262696	263335	640.000000	+	.	Target=DN992929.1 8 647 +;percentID=100;sequence=CACGAGGCTAACAGGTTGAACTTTGGATTTTTTTACACTTAATACTCCGATTTCTTGTAAGGTGTTAGTTCCTTAGTTCTTTCTCCAGTAAATCCTCTGATGTTTACATAGGCTTAATTTTAGCCTAAATATTTCTCCACATTTATTGCATCTACAAATTCTCTTCTAATATAAACTCTCTAGTGTTTCTTAACCTGCAGTTTTTGAACAGATGTTTTTCCACATTTATTACATTTGTCGTATTTCGCTCCAATGTAAATTCTCTGATGTTGAACAAAGTTTGAGCAACTGCTTCTGAGTCTTCCGCTAGTACAAAATGTGTACAGTAAGATCCAGGATACAAGTACAGGTACTACACCCTCTTTATATTTGTATTGTC [...]
+chr4-04	EST_Human	nucleotide_match	337569	337697	99.000000	+	.	Target=DB050382.1 121 249 +;percentID=88.4;sequence=AAAACAGCTTTAACCTGGATGTGGAGGAGGATGACATTGAGAATCTCTTAGAGGTGGTTCATGAGGAATGGGTTAATGAGGAGTCATTGGAACTGATACAGGAACATGTAGCTGAAGAAGAGGGACACTTGACATTCAGGGACGTGGCCATAGAATTCTCTCAGGAGGAGTGGAAATGCCTGGACCCTGTGCAGAAGGCTTTATACAGGGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGAATCTGTCTTCCTGACCTGAGTATTATCTCCATGATGAAGCAAAGGACAGAGCCCTGGACTGTGGAGAATGAAATGAAAGTAGCAAAAAATCCAGATAGGTGGGAAGGTATCAAAGATATCAACACA [...]
+chr4-04	EST_Human	nucleotide_match	262701	262825	73.000000	-	.	Target=BQ187251.1 1 135 +;percentID=80.7;Gap=M76 I2 M1 I4 M2 I1 M31 I1 M8 I1 M3 I1 M4 
+chr4-04	EST_Human	nucleotide_match	262701	262859	94.000000	+	.	Target=BU616016.1 502 670 +;percentID=80.5;Gap=M4 I1 M3 I1 M8 I1 M31 I1 M2 I4 M1 I2 M110 
+chr4-04	EST_Human	nucleotide_match	262701	262869	101.000000	+	.	Target=CA312619.1 503 681 +;percentID=81;Gap=M4 I1 M3 I1 M8 I1 M31 I1 M2 I4 M1 I2 M120 
+chr4-04	EST_Human	nucleotide_match	262701	262905	108.000000	+	.	Target=BU620973.1 443 661 +;percentID=78.2;Gap=M4 I1 M3 I1 M8 I1 M31 I1 M2 I4 M1 I2 M133 I1 M5 I2 M2 I1 M6 I1 M5 D1 M4 
+chr4-04	EST_Human	nucleotide_match	262701	262878	108.000000	-	.	Target=CB158662.1 1 188 +;percentID=81.4;Gap=M129 I2 M1 I1 M1 I1 M1 I3 M31 I1 M8 I1 M3 I1 M4 
+chr4-04	EST_Human	nucleotide_match	262701	262879	109.000000	-	.	Target=AV732491.2 6 194 +;percentID=81.5;Gap=M130 I2 M1 I4 M2 I1 M31 I1 M8 I1 M3 I1 M4 
+chr4-04	EST_Human	nucleotide_match	262701	262879	110.000000	+	.	Target=CA442913.1 502 690 +;percentID=81.5;Gap=M4 I1 M3 I1 M8 I1 M31 I1 M2 I4 M1 I2 M130 
+chr4-04	EST_Human	nucleotide_match	262702	263330	272.000000	+	.	Target=AL571386.2 503 1152 +;percentID=73.5;Gap=M10 I1 M26 I1 M3 I2 M3 I2 M2 I2 M106 I1 M12 D1 M1 D1 M2 D1 M1 D1 M23 I2 M150 I1 M1 I2 M1 I1 M2 I2 M1 I1 M2 I2 M22 I1 M4 I1 M4 I1 M1 I1 M41 I1 M48 D1 M2 I1 M26 I1 M4 I1 M5 I1 M66 D2 M3 D1 M23 I1 M14 D1 M11 
+chr4-04	EST_Human	nucleotide_match	262707	263020	163.000000	-	.	Target=N75183.1 10 329 +;percentID=77.5;Gap=M126 I2 M23 D1 M1 D1 M2 D1 M1 D1 M12 I1 M28 D1 M77 I2 M2 I2 M3 I2 M3 I1 M26 I1 M5 ;sequence=GTATTACAAATCTTATTGTACGCATTTTGTACTAGAGAAAAACACTGAAGCAGTTGCTCAAACTTTGTTCAACATCAGGGAATTTATATTGGAGAAAAATCCTGCAAATGTAATGAATTTGGAAAAACATTTTTTTTCAAAAACTACGGCGTAGAAAACATGAATTTATATTGAAATGTGTTTTTGCAGATGCAGTAAGTATGAAAAATATTTAATCCAAAATTGAGTCTATGTAAATATTAAATAATTTACAGTAGAAATAACTAAGGCACTGACACTTTAGACATTACAC [...]
+chr4-04	EST_Human	nucleotide_match	337570	337617	40.000000	+	.	Target=DB170146.1 171 218 +;percentID=91.7;sequence=GTTTTCCTCTGGCTCCTGCGAGGGCTTGGTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGGAACTCGTAACATTCAGGGATGTGGCCATAGAATTCTCCCCTGAAGGGTGGAAATGTCTGGAGCAAATAAAAGAGCCCTGCAATTTGAAGATACATGAGACAGCAGCCAAACCCCCAGCTATATGTTCTCCTTTCAGCCAAGACCTTTCACCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAAAAGATACGAGAA [...]
+chr4-04	EST_Human	nucleotide_match	262743	263325	282.000000	-	.	Target=BG527927.1 1 598 +;percentID=75.9;Gap=M24 I1 M2 I1 M22 D2 M66 I1 M5 I1 M4 I1 M26 I1 M2 D1 M89 I1 M1 I1 M4 I1 M4 I1 M22 I2 M2 I1 M1 I2 M2 I1 M1 I2 M1 I1 M150 I3 M23 D1 M1 D1 M2 D1 M1 D1 M12 I2 M28 D1 M55 D1 M24 ;sequence=TAATTTATATTGGAGAAAACTTTATAAGTGTAAAGAATGTGACAAAACTTAACCAATACTCACATCTTATTGCACAGGAAAGCATTTTTACTTGAGAAAGATTGTACAAGTATAAAGAATGTGAAAAAGTCATTGATATCTTTTCACATCTTACTCAACACCAGAGTTTATACTTATTAAAAGCATTATAAATGCAATTAC [...]
+chr4-04	EST_Human	nucleotide_match	337570	337752	110.000000	+	.	Target=BU954839.1 151 332 +;percentID=81.2;Gap=M156 D1 M1 D2 M8 D1 M4 I2 M3 I1 M7 ;sequence=GGGGTCTCCTTGCGGCCGGCGGGGTGCTGGGTTCCCGTCTGCTGCCTCTCGGAGAGTCCCGGGTGACTGCCGCAGGCTCCATCGCCCTGTGGCCTGCAGGTATTGCGAGATTTATAGGGAGGACGCTGGGACCCCCAAAAGCTGGGAAATGGGACTATTGGCATTCAGGGATGTGGCTCTAGAATTCTCTCCAGAGGAGTGGGAATGCCTGGACCCAGCTCAGCGGAGTTTGTATAGGGATGTGATGTTAGAGAACTACAGAAACCTGATCTCCCTTGGTGAGGATAGCTTCANTATGCAATTCCTATTTCACAGTCTTGCTATGTCTAAGCCAGA [...]
+chr4-04	EST_Human	nucleotide_match	262745	263089	340.000000	+	.	Target=AW381151.1 1 344 +;percentID=99.4;Gap=M50 D1 M294 ;sequence=GTAAGGTGTTAGTTCCTTAGTTCTTTCTCCAGTAAATCCTCTGATGTTTAATAGGCTTAATTTTAGCCTAAATATTTCTCCACATTTATTGCATCTACAAATTCTCTTCTAATATAAACTCTCTAGTGTTTCTTAACCTGCAGTTTTTGAACAGATGTTTTTCCACATTTATTACATTTGTCGTATTTCGCTCCAATGTAAATTCTCCGATGTTGAACAAAGTTTGAGCAACTGCTTCTGAGTCTTCCGCTAGTACAAAATGTGTACAGTAAGATCCAGGATACAAGTACAGGTACTACACCCTCTTTATATTTGTATTGTCTGTCTTAAGAATACTCTTCTTC
+chr4-04	EST_Human	nucleotide_match	337570	337752	111.000000	+	.	Target=EL735851.1 3 184 +;percentID=81.7;Gap=M156 D1 M1 D2 M8 D1 M4 I2 M3 I1 M7 ;sequence=ATGGGACTATTGGCATTCAGGGATGTGGCTCTAGAATTCTCTCCAGAGGAGTGGGAATGCCTGGACCCAGCTCAGCGGAGTTTGTATAGGGATGTGATGTTAGAGAACTACAGAAACCTGATCTCCCTTGGTGAGGATAGCTTCAATATGCAATTCCTATTTCACAGTCTTGCTATGTCTAAGCCAGAACTGATCATCTGTCTGGAGGCAAGGAAAGAGCCCTGGAACGTGAACACAGAGAAGACAGCCAAACACTCAGCCATGTGCCCAACTTTCTTGTACAAAGTTGGCATTATAAGAAAGCATTGCTTATCAATTTGTTGCAACGAACAGGTCAC [...]
+chr4-04	EST_Human	nucleotide_match	262827	263193	213.000000	+	.	Target=AA617794.1 1 348 +;percentID=81.8;Gap=M37 D4 M1 D3 M2 D2 M1 D1 M90 D2 M1 D6 M68 I1 M67 D1 M3 D1 M77 ;sequence=ACATTTACTGCATCTACAAAATATTTTCTAGTGTAAACTGTTTAAGCTGCAGTTTTTGAACAAATGTTTTTCCACATTTATTACATTTGTAGGATTTCTCTCCAATATAAATTTTCTGATGTTGAAGAAAGTCTCCTTCAGTGTTTTCCCCTATTATAAAATGTGTACAACAAAATCCATGAGAGAAGTACAGGTACTACAACCCTCTTTATATTTGTATTGTTTGTCTTAAGAATACTCTTCTTCACTTTAAAGGCCTATATTTTCTGAAGTCTTTCAACAGAAATTACATTTATAATGTTTTTATTAAG [...]
+chr4-04	EST_Human	nucleotide_match	337570	337826	97.000000	+	.	Target=DA311782.1 219 483 +;percentID=70.4;Gap=M126 I1 M2 I4 M4 I1 M56 I1 M4 I1 M19 D1 M15 I2 M19 D1 M10 ;sequence=AGGCGCGCAGTCTGAGAGGAGGGGGCTGGCATCCGGGATCTTCGGCGGCCTTGGCCTGTTGCTTCAGCCTGAGCTCGGTTAGGGCCTCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGAT [...]
+chr4-04	EST_Human	nucleotide_match	262866	263123	188.000000	+	.	Target=DB326282.1 291 542 +;percentID=88.1;Gap=M4 D1 M1 D1 M173 I1 M31 D3 M1 D2 M1 D1 M21 I1 M18 
+chr4-04	EST_Human	nucleotide_match	262866	263116	190.000000	+	.	Target=DB324740.1 291 537 +;percentID=88.5;Gap=M4 D1 M1 D1 M173 I1 M31 D3 M37 
+chr4-04	EST_Human	nucleotide_match	262866	263123	191.000000	+	.	Target=DB349057.1 293 547 +;percentID=88.1;Gap=M4 D1 M1 D1 M173 I1 M31 D3 M36 I1 M8 
+chr4-04	EST_Human	nucleotide_match	262866	263136	203.000000	+	.	Target=DB315243.1 288 551 +;percentID=89;Gap=M4 D1 M1 D1 M173 I1 M31 D3 M1 D2 M1 D1 M52 
+chr4-04	EST_Human	nucleotide_match	262866	263338	279.000000	-	.	Target=CF140195.1 114 565 +;percentID=82.7;Gap=M1 I1 M3 I1 M29 I3 M40 D2 M4 I1 M59 D3 M1 D2 M2 D3 M6 D3 M3 D1 M2 D4 M1 D1 M3 D1 M80 D1 M1 D2 M1 D3 M31 I1 M173 D1 M1 D1 M4 ;sequence=CACGAGGTGTGAGAAGGCTTTTAATCACACCTCAATCTGTTGTAGACATAAGAGTAATTATATTGATGAGAAGCCAAATTAAAATTAAAAATGTGGCAAAGACTTCCAATTCTAGTCAGTTCTTAATGTAATTCCTACTGAAGAAAACACCTGGAAATACAAAAAATGTGGCAAAACTTGTAACCAATGCTTAGCATTTTTGCACATGATAGTATTTATATGTGAGACTACTTGTACAAACATAAAA [...]
+chr4-04	EST_Human	nucleotide_match	337570	337695	117.000000	+	.	Target=AV742687.1 206 330 +;percentID=96.8;Gap=M17 D1 M108 ;sequence=AATTCGCGGCCGCGTCGACTCTGCGAGAAGACGACAGAAGGGGCTGTTGCTCAGCCTGAGCTCGGTTAGGGCCTCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGGNCGGGGCATGGTGGCTCACGCCTGTA [...]
+chr4-04	EST_Human	nucleotide_match	262866	263358	297.000000	-	.	Target=BM803355.1 26 495 +;percentID=83.2;Gap=M26 D4 M23 I3 M3 I1 M37 D2 M4 I1 M59 D3 M1 D2 M2 D3 M6 D3 M3 D1 M2 D4 M1 D1 M3 D1 M85 D3 M31 I1 M173 D1 M1 D1 M4 
+chr4-04	EST_Human	nucleotide_match	262895	263338	237.000000	-	.	Target=CB999730.1 305 742 +;percentID=80;Gap=M1 I1 M3 I1 M29 I3 M40 D2 M4 I1 M59 D3 M1 D2 M2 D3 M6 D3 M3 D1 M2 D4 M1 D1 M3 D1 M85 D3 M31 I1 M7 I1 M47 I1 M13 I1 M15 I1 M16 I1 M11 I1 M6 I1 M11 I1 M12 I1 M5 I1 M8 ;sequence=GGACTGGAGATAAAACCATACAAGTGTAAAGAATGTGGCAAAGCCTTTAAGTCATACTACAGCATTCTTAAACATAAGAGAACTCATACCAGGGGAATGTCTTACGAAGGTGACGAATGTCGCGGTCTTTAAATGCTCCTCAATCCTTTCTAATCATAAGATAATTCATAATGAAGAGAAACTCTAAAATGTGAAAAATGTGAGAAGG [...]
+chr4-04	EST_Human	nucleotide_match	337570	337697	120.000000	+	.	Target=CN399123.1 109 236 +;percentID=96.9;sequence=GGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAGAAGATATGAGAAATGTGGGCATGATAATTTACAATTAAGGAAAGGCTGTAAAAGTATGAACGTG [...]
+chr4-04	EST_Human	nucleotide_match	262931	263288	349.000000	-	.	Target=AW191584.1 12 371 +;percentID=98.9;Gap=M138 I1 M31 I2 M161 D1 M27 ;sequence=TTTTTTTTTTTTGGCAAAACTTTTAATCAATGCTCATATCTTTTTGCATGTGATAGCATTTATACATGAGAATAATTGCACAAATATAAAAATACAAAAGCCATTAATTTCTACTCACATCTTACCAGATATCAGAATTTATGGTTAACTAAAAGCATTATAAATGTAATTTCTGTTGAAAAAGACCTTTTAGAAAATATAGGCCATTAAAGCGAAGAAGAGTATTCTTAAGACAGACAATACAAATATAAAGAGGGTGTAGTACCTGTACTTGTATCCTGGATCTTACTGTACACATTTTGTACTAGCGGAAGACTCAGAAGCAGTTGCTCAAACTTTGTTCAC [...]
+chr4-04	EST_Human	nucleotide_match	337570	337697	114.000000	+	.	Target=CD385642.1 186 313 +;percentID=94.5;sequence=AACCGGACCGAAGGAGTAGAAACTTTGTCTCACTTCAGCCAGAGCGCGGGGTTAGGGCTTCATTGCCTCGTGTCCTCTGCTCCCGGAGACTTCGGTGATTCTGCCACTCACTCCGTCGCTCTGTGACCTGCTGGCATTGAATGATTTATAGCTAAGACTCCAGGACACCCCTGAGGCCGAGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTAGACCCTGCCCAACAGAATTTATATAGAGATGTGATGTTGGAGAACTACAGAGACCTCGTCTCCCTGGTGTTGTTATCTCTAACCAGACCTGGTCACCTGTCTGGAGCAAAGAAAAGAGCCTTACAATTTG [...]
+chr4-04	EST_Human	nucleotide_match	262953	263293	337.000000	-	.	Target=BU785632.1 16 356 +;percentID=99.4;sequence=TTTTTTTTTTTTTTTAAATGCGGCAAAACTTTTAATCAATGCTCATATCTTTTTGCATGTGATAGCATTTATACATGAGAATAATTGCACAAATATAAAAATACAAAAGCCATTAATTTCTACTCACATCTTACCAGATATCAGAATTTATGGTTAACAAAAGCATTATAAATGTAATTTCTGTTGAAAGACCTTTTAAAAAATATAGGCCATTAAAGCGAAGAAGAGTATTCTTAAGACAGACAATACAAATATAAAGAGGGTGTAGTACCTGTACTTGTATCCTGGATCTTACTGTACACATTTTGTACTAGCGGAAGACTCAGAAGCAGTTGCTCAAACTTTGTTCAACATCA
+chr4-04	EST_Human	nucleotide_match	337570	337695	120.000000	+	.	Target=AV725968.1 126 251 +;percentID=97.6;sequence=CCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGGCCGGGCATGGTGGCTCACGCCTGTAATCCCAGCACTTCGGGAGGCTGAGGCGGGTGGATCACCTGAGGTCGGGAGTTCGAGACCAGCCTGGCCGGCATGGAGAAACCCTGTCTNCACTAAAA [...]
+chr4-04	EST_Human	nucleotide_match	263087	263338	122.000000	-	.	Target=CN430381.1 381 618 +;percentID=78.7;Gap=M1 I1 M3 I1 M29 I3 M40 D2 M4 I1 M59 D3 M1 D2 M2 D3 M6 D3 M3 D1 M2 D4 M1 D1 M3 D1 M78 ;sequence=GGGAAACCCTACACGTGTGGAGACTGTGGCAAAACCTTTAGACAGTCTGCAAATCTTTATGCACATAAGAAAATTCATACTGGAGATAAAACCATACAAGTGTAAAGAATGTGGCAAAGCCTTTAAGTCATACTACAGCATTCTTAAACATAAGAGAACTCATACCAGGGGAATGTCTTACGAAGGTGACGAATGTCGCGGTCTTTAAATGCTCCTCAATCCTTTCTAATCATAAGATAATTCATAATGAAGAGAAACTCTAAAATGTGAAAAATGTGAGAAGGCT [...]
+chr4-04	EST_Human	nucleotide_match	337570	337752	111.000000	+	.	Target=DA809929.1 188 369 +;percentID=81.7;Gap=M156 D1 M1 D2 M8 D1 M4 I2 M3 I1 M7 ;sequence=AGAGAGGAAGGGGCGGCCTTGGGGATCTGGCGGGGCCTTTGTCTCCTTGCGGCCGGCGGGGTGCTGGGTTCCCGTCTGCTGCCTCTCGGAGAGTCCCGGGTGACTGCCGCAGGCTCCATCGCCCTGTGGCCTGCAGGTATTGCGAGATTTATAGGGAGGACGCTGGGACCCCCAAAAGCTGGGAAATGGGACTATTGGCATTCAGGGATGTGGCTCTAGAATTCTCTCCAGAGGAGTGGGAATGCCTGGACCCAGCTCAGCGGAGTTTGTATAGGGATGTGATGTTAGAGAACTACAGAAACCTGATCTCCCTTGGTGAGGATAGCTTCAATATGC [...]
+chr4-04	EST_Human	nucleotide_match	263195	263338	80.000000	-	.	Target=DB116515.1 380 530 +;percentID=79.7;Gap=M1 I1 M3 I1 M29 I3 M40 D2 M4 I1 M37 I1 M17 I2 M11 ;sequence=AGAAACCCTACACGTGTGGAGACTGTGGCAAAACCTTTAGACAGTCTGCAAATCTTTATGCACATAAGAAAATTCATACTGGAGATAAAACCATACAAGTGTAAAGAATGTGGCAAAGCCTTTAAGTCATACTACAGCATTCTTAAACATAAGAGAACTCATACCAGGGGAATGTCTTACGAAGGTGACGAATGTCGCGGTCTTTAAATGCTCCTCAATCCTTTCTAATCATAAGATAATTCATAATGAAGAGAAACTCTAAAATGTGAAAAATGTGAGAAGGCTTTTAATCACACCTCAATCTGTTGTAGACATAAGAGTA [...]
+chr4-04	EST_Human	nucleotide_match	337570	337697	112.000000	+	.	Target=DA571532.1 162 289 +;percentID=93.8;sequence=GTAGCTCCAGCCAGAGCTCGGTTAGGGCCTCATCGCTCTGCTCCCGCTCCTTAGGGAAGCCTCGGTGATTCTGCCACAGCCTCAGCCTCTGTGGCTCTGTGACCTGCCGGTATTGGATGATTCGTATCTAAGACTCTGGGACACTCCTGAAGTCGGGAAATGGAACTCTTAACATTCAAGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGTCTGGACATTTCCCAGCAGAATTTATATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTGGGTGTTACTATCTCTAACCCAGACCTGGTCACCAGTCTGGAGCAAAGAAAAGAGCCCTACAATTTGAAGATACATGAAACAGCAGCCA [...]
+chr4-04	EST_Human	nucleotide_match	263226	263338	57.000000	-	.	Target=CX759702.1 668 782 +;percentID=78.2;Gap=M1 I1 M3 I1 M29 I3 M40 D2 M4 I1 M10 D2 M22 ;sequence=AGGATGGACTTAGACAGTTTCGGTCCGGATTCCGGGATGAACCCTTTAAATGTTTAGAATGTGGTAAAGCGTTTACTAGTTCCACAACCCTTACTAAACATAGGAGAATTCATACTGGAGAGAAACCCTACACATGTGAAGAATGTGGCAAAGCCTTTAGACAGTCAGCAATCCTTTATGTACATAGGAGAATTCATACTGGAGAGAAACCCTACACATGTGGAGAATGTGGCAAAACCTTTAGACAGTCTGCAAATCTTTATGCGCATAAGAAAATTCATACTGGAGAGAAACCCTACACGTGTGGAGACTGTGGCAAAACCTTTAGA [...]
+chr4-04	EST_Human	nucleotide_match	337571	337697	88.000000	+	.	Target=BX956892.1 426 552 +;percentID=84.3
+chr4-04	EST_Human	nucleotide_match	263236	263338	55.000000	-	.	Target=CX760338.1 629 733 +;percentID=79.8;Gap=M1 I1 M3 I1 M29 I3 M39 D2 M5 I1 M10 D2 M12 ;sequence=AACCCTTTAAATGTTTAGAATGTGGTAAAGCGTTTACTAGTTCCACAACCCTTACTAAACATAGGAGAATTCATACTGGAGAGAAACCCTACACATGTGAAGAATGTGGCAAAGCCTTTAGACAGTCAGCAATCCTTTATGTACATAGGAGAATTCATACTGGAGAGAAACCCTACACATGTGGAGAATGTGGCAAAACCTTTAGACAGTCTGCAAATCTTTATGCGCATAAGAAAATTCATACTGGAGAGAAACCCTACACGTGTGGAGACTGTGGCAAAACCTTTAGACAGTCTGCAAATCTTTATGCACATAAGAAAATTCATACT [...]
+chr4-04	EST_Human	nucleotide_match	337570	337697	120.000000	+	.	Target=BQ069369.1 161 288 +;percentID=96.9;sequence=TTGCTTCAGCCTGAGCTCGGTTAGGGCCTCACTTGCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAGAAGATATGAGAA [...]
+chr4-04	EST_Human	nucleotide_match	263655	263758	76.000000	-	.	Target=CF140195.1 10 113 +;percentID=86.5
+chr4-04	EST_Human	nucleotide_match	263655	263943	214.000000	-	.	Target=CX759702.1 380 667 +;percentID=87.2;Gap=M170 D1 M118 
+chr4-04	EST_Human	nucleotide_match	263655	263943	214.000000	-	.	Target=CX760338.1 341 628 +;percentID=87.2;Gap=M170 D1 M118 
+chr4-04	EST_Human	nucleotide_match	263655	263955	226.000000	-	.	Target=CN430381.1 81 380 +;percentID=87.7;Gap=M182 D1 M118 
+chr4-04	EST_Human	nucleotide_match	263655	263955	226.000000	-	.	Target=DB116515.1 80 379 +;percentID=87.7;Gap=M182 D1 M118 
+chr4-04	EST_Human	nucleotide_match	263655	263957	228.000000	-	.	Target=CB999730.1 3 304 +;percentID=87.8;Gap=M184 D1 M118 
+chr4-04	EST_Human	nucleotide_match	263657	263955	184.000000	-	.	Target=BG569463.1 103 398 +;percentID=81.7;Gap=M182 D1 M10 I1 M1 I1 M72 D2 M23 D2 M6 
+chr4-04	EST_Human	nucleotide_match	264242	264314	43.000000	-	.	Target=CN430381.1 3 75 +;percentID=80.8
+chr4-04	EST_Human	nucleotide_match	264242	264315	44.000000	-	.	Target=DB116515.1 1 74 +;percentID=81
+chr4-04	EST_Human	nucleotide_match	264242	264328	57.000000	-	.	Target=BG569463.1 11 97 +;percentID=83.7
+chr4-04	EST_Human	nucleotide_match	264558	264895	182.000000	-	.	Target=CX760338.1 1 340 +;percentID=77.1;Gap=M147 I2 M191 
+chr4-04	EST_Human	nucleotide_match	264558	264907	183.000000	-	.	Target=CX759702.1 29 379 +;percentID=76.4;Gap=M7 D1 M151 I2 M191 
+chr4-04	EST_Human	nucleotide_match	265157	265518	219.000000	-	.	Target=DA239049.1 219 580 +;percentID=80.4;Gap=M334 I1 M7 D1 M20 ;sequence=AAATATTTCAATGTAATGCACGTGTCAAAGTTTTTAGTAAATTTGCAAATTCAAACAAAGATAAGACAAGACATACTGGAGAGAAACACTTTAAATGTAACGAATGTGGCAAGTCATTTCAGAAGTTCTCAGACCTAACTCAACATAAAGGAATTCATGCNTGGAGAGAAACCCTACACTTGTGAAGAACGTGGCAAAGACTTTGGATGGTACACAGACCTGAATCAACACAAGAAAATTCATACTGGAGAGAAACCTTACAAATGTGAAGAATGTGGCAAAGCCTTTAATAGGTCAACAAACCTTACTGCACATAAGAGAATTCACAACAGAGAGAAAGCTTACACAGGTGA [...]
+chr4-04	EST_Human	nucleotide_match	337570	337700	123.000000	+	.	Target=AU138611.1 149 279 +;percentID=96.9;sequence=GAGCTCGGTTAGGGCCTCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGGTGTCTGGAAATGAAGTATGGAAATGAAATCATGAATAAAGACCCAGTTTTCAGAATCTCTCCACGAAGTAGAGGAACTCATACCAATCCAGAAGAGCCT [...]
+chr4-04	EST_Human	nucleotide_match	265281	265381	42.000000	-	.	Target=BQ069369.1 682 793 +;percentID=74.3;Gap=M4 D1 M14 I1 M12 I1 M4 I1 M9 I1 M7 I1 M3 I1 M9 I1 M2 I1 M8 I1 M8 I1 M10 I2 M10 
+chr4-04	EST_Human	nucleotide_match	265281	265379	85.000000	-	.	Target=DB215628.1 463 561 +;percentID=92.9;sequence=ACTCACTGTAGCGCGTGGCTCCGTAGGCCACACCGAGGAACAGGGCGGAGTAGCGGCCGAGCTGCGAAAGAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTTGAGAAGATATGAGAAATGTGGGCATGATAATTTACAATTAAGGAAAGGCTGTAAAAGTATGAACGTGTGTAAAGTGCAGAAGGGAGTTTATAATGGAATTAATAAATGCTTGTCAAATACTCAGAGCAAAATATTTCAATGTAATGCACGTGTCAAAGTTTTTAGTAAATTTGCAAATTCAAACAAAGATAAGACAAGACATACTGGAGAGAAACACTTTAAATGTAACGA [...]
+chr4-04	EST_Human	nucleotide_match	265283	265379	83.000000	-	.	Target=DA803972.1 462 558 +;percentID=92.8;sequence=AGCGGGCGGTGTTCCCGGCTCCGTGGGGCCGTCTTCCCGGCGAGTCCGCGACGGTCGCCGCCCACGGCGAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACNTGAGAAGATATGAGAAATGTGGGCATGATAATTTACAATTAAGGAAAGGCTGTAAAAGTATGAACGTGTGTAAAGTGCAGAAGGGAGTTTATAATGGAATTAATAAATGCTTGTCAAATACTCAGAGCAAAATATTTCAATGTAATGCACGTGTCAAAGTTTTTAGTAAATTTGCAAATTCAAACAAAGATAAGACAAGACATACTGGAGAGAAACACTTTAAATGTAACGAA [...]
+chr4-04	EST_Human	nucleotide_match	265502	265668	111.000000	-	.	Target=DA730641.1 703 865 +;percentID=83.9;Gap=M27 D2 M70 I1 M3 D1 M22 D1 M33 D1 M7 ;sequence=AAAATCTGGCGCGGCTTTTGCCTTTTGCGCCAGCGTGAGCTCGGTTAGGGTCTCCACGGCCGTGCTTTCACCCCTCAGGGAGGCGTCGGTGATTCGGTCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTCGTAGCTGAGACTCCGCTACACCCCTGAAGTGGGGAAATGGTGTGTGTTCTCATTTTACCCAAGATCTTTGGCCAGTGCAGGGCATAGAAGATTCATTCCACAAACTTATACTGAGAAGATATGAGAAATGTGGACAGAAGAATTTACAATTAAGGAAAGGCTCTAAAAGTGTGAATAAGTGTAAGGT [...]
+chr4-04	EST_Human	nucleotide_match	265556	265695	118.000000	-	.	Target=CN421855.1 561 700 +;percentID=92.1;sequence=GCGAGGGCTTGGTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGGAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGCTATATGTTCTCCTTTCAGCCAAGACCTTTCACCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAAAAGATACGAGAAATGTGGACATGAGAATTTACAATTAAGAAAAGGCTGTAAACGTGTGAATGAGTGTAAGGTGCAGAAAGGAGTTAATAATGGAGTTTACCAGTGCTTGTCAACTACCCAGAGCAAAATATTTCAATGTAATACAT [...]
+chr4-04	EST_Human	nucleotide_match	337570	337695	120.000000	+	.	Target=BU178885.1 143 268 +;percentID=97.6;sequence=GGTTAGGGCCTCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGGCCGGGCATGGTGGCTCACGCCTGTAATCCCAGCACTTCGGGAGGCTGAGGCGGGTGGATCACCTGAGGTCAGGAGTTCGGGACCGGCCTGGCCGGCATGGAGAAA [...]
+chr4-04	EST_Human	nucleotide_match	265589	265668	51.000000	-	.	Target=BI463333.1 675 752 +;percentID=84;Gap=M15 I1 M12 D2 M19 D1 M31 ;sequence=AGCGGGGCTGAGCTCGGTTAGGGCCTCACCGACCTGCTTCCACCCCTCAGGGAGGCCTCAGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTCGTAGCTAAGACTCTACGACATCCCTGAAGCCGGGAAATGGTGTGTGTTCTCATTTTACCCAAGATCTTTGGCCAGTGCAGGGCATAGAAGATTCATTCCACAAACTTATACTGAGAAGATATGAGAAATGTGGACAGAAGAATTTACAATTAAGGAAAGGCTCTAAAAGTGTGAATAAGTGTAAGGTGCAGAAAGGAGGTTATAATGGACTTTACCAATGCTTATCAACT [...]
+chr4-04	EST_Human	nucleotide_match	265619	265695	69.000000	-	.	Target=DA666860.1 482 558 +;percentID=94.8;sequence=ACCTGGTCACCTGTCTGGAGCAAATAAAAGAGCCCTGCAATTTGAAGATACATGAGACAGCAGCCAAACCCCCAGCTATATGTTCTCCTTTCAGCCAAGACCTTTCACCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAAAAGATACGAGAAATGTGGACATGAGAATTTACAATTAAGAAAAGGCTGTAAACGTGTGAATGAGTGTAAGGTGCAGAAAGGAGTTAATAATGGAGTTTACCAGTGCTTGTCAACTACCCAGAGCAAAATATTTCAATGTAATACATGTGTTAAAGTTTTTAGTAAATTTTCAAATTCAAACAAACATAAGATAAGACATACTGGAGAGAAACCCTTTAAATGTACA [...]
+chr4-04	EST_Human	nucleotide_match	265717	265885	111.000000	-	.	Target=BG718573.1 564 730 +;percentID=84.2;Gap=M45 I1 M30 D2 M68 I1 M8 D1 M11 D1 M3 ;sequence=AGCGGGCTTTTGCGTCAGGCTTCTGCCTGAGCTCGGTTAGGGCCTCACCGACCTGCTTCCACCCCTCAGGAAGGCCTCAGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTCGTAGCTAAGACTCTACGACATCCCTGAAGCCGGGAAATGGTGTGTGTTCTCATTTTACCCAAGATCTTTGGCCAGTGCAGGGCATAGAAGATTCATTCCACAAACTTATACTGAGAAGATATGAGAAATGTGGACAGAAGAATTTACAATTAAGGAAAGGCTCTAAAAGTGTGAATAAGTGTAAGGTGCAGAAAGG [...]
+chr4-04	EST_Human	nucleotide_match	265920	266419	289.000000	-	.	Target=DA730641.1 187 701 +;percentID=80.8;Gap=M123 I6 M2 I3 M2 I1 M3 I1 M1 I1 M114 D1 M3 D2 M1 D3 M20 I1 M5 I3 M1 I2 M30 I1 M6 D1 M45 I4 M81 D2 M53 I1 M1 
+chr4-04	EST_Human	nucleotide_match	265920	266419	291.000000	-	.	Target=BI463333.1 159 673 +;percentID=81;Gap=M123 I6 M2 I3 M2 I1 M3 I1 M1 I1 M114 D1 M3 D2 M1 D3 M20 I1 M5 I3 M1 I2 M30 I1 M6 D1 M45 I4 M81 D2 M53 I1 M1 
+chr4-04	EST_Human	nucleotide_match	265922	266419	286.000000	-	.	Target=CN278785.1 85 596 +;percentID=80.7;Gap=M123 I6 M2 I3 M2 I1 M3 I1 M1 I1 M114 D1 M3 D2 M1 D3 M20 I1 M5 I3 M1 I2 M30 I1 M6 D1 M45 I4 M36 D1 M41 D1 M32 I1 M9 D1 M14 ;sequence=GCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTCGTAGCTAAGACTCTACGACATCCCTGAAGCCGGGAAATGGTGTGTGTTCTCATTTTACCCAAGATCTTTGGCCAGTGCAGGGCATAGAAGATTCATTCCACAAACTTATACTGAGAAGATATGAGAAATGTGGACAGAAGAATTTACAATTAAGGAAAGGCTCTAAAAGTGTGAATAAGTGTAAGGTGCAGAAAGGAGGTTATAA [...]
+chr4-04	EST_Human	nucleotide_match	337570	337740	121.000000	+	.	Target=BG778551.1 157 323 +;percentID=86.5;Gap=M136 D1 M4 D1 M6 D1 M15 D1 M6 ;sequence=GCACTTCAGCCAGAGCGCGGGGTTAGGGGTTCATTGCCTTGTGTCCTCTGCTCCGGGAGACTTCGGTGATTCTGCCACTCACTCCGTCGCTCTGTGACCTGCTGGCATTGAATGATTTATAGCTAAGACTCCAGGACACCCCTGAAGCCGAGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTAGACCCTGCCCAACAGAATTTATATAGAGATGTGATGTTGGAGAACTACAGAAACCTCGTCTCCCTGGCTGTGTATTCTTATTACAACCAAGGCATTTTACCAGAGCAAGGCATACAAGATTCAT [...]
+chr4-04	EST_Human	nucleotide_match	265956	266419	297.000000	-	.	Target=CD652116.1 249 725 +;percentID=83.2;Gap=M130 I3 M3 I1 M1 I1 M5 I2 M1 I3 M1 I1 M4 I1 M139 I1 M1 I1 M2 I4 M124 D1 M9 D1 M17 D1 M4 D1 M7 D1 M11 ;sequence=AGAGGTAATCCGGGAGGCCTCGGCGCTTTAGAAAGAGCCTCAGCCTCCATCGCTCCGCTAACCTGCGGGTATTGGATGATTCGGAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCA [...]
+chr4-04	EST_Human	nucleotide_match	265975	266303	252.000000	+	.	Target=BE172609.1 3 336 +;percentID=88.7;Gap=M111 I1 M4 D1 M21 I1 M27 I1 M150 I1 M1 I1 M2 I1 M12 ;sequence=GAGTAAAAGGTTTCTCTCCAGTATGAATTCTCTTATGTTCATTAAATATTAAAGACCATTTAAAGGCTTTGCCACATTCTTCACAAGTGTAGGGTTTCTCTCCAGCATGAATTACCTTATGTTGAGTTAGGTGTGAAAACCTTCTGAAATGATTTGCCACATTCTTTAAAAGTGTTTCTCTCCAGTATGTCTTGTCTTACGTTTGTTTGAATTTGAAAATTTACTAACAACTTTGACACTTGCTTTACACTGAAGTATTTGGCTCTGGGTAGTTGACAAGCATTCATTAAATTCATTATAACCTCCTTTCTGCAACTTACA [...]
+chr4-04	EST_Human	nucleotide_match	337571	337697	127.000000	+	.	Target=CD701489.1 216 342 +;percentID=100;sequence=CGATAAGCTGATATCGAATCGTATCGGCCATTATGGCCGGGGTCTTTGCGTCTGGCTACTACCAGACCGCGGGTTAGGGGCTTCATCTCTCTGCGTCCTCAGTTCTGGGAGGCCTTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTGGTAGCTAAGACTCCCGAATACTTCAGAAGTGGGGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGACCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGCTATGTGTTCTCATTTCACCCAAGACCATTGGCCA [...]
+chr4-04	EST_Human	nucleotide_match	265995	266419	250.000000	-	.	Target=DA571532.1 386 820 +;percentID=80.2;Gap=M107 I1 M7 I2 M7 D1 M6 I2 M2 I1 M1 I1 M24 I1 M5 D1 M123 I1 M1 I1 M2 I4 M28 D1 M87 D1 M21 
+chr4-04	EST_Human	nucleotide_match	265999	266419	289.000000	-	.	Target=CD654571.1 372 794 +;percentID=85.7;Gap=M130 I3 M3 I1 M1 I1 M3 I7 M188 I1 M4 D1 M25 D1 M5 D1 M13 D1 M3 D1 M1 D1 M6 D1 M7 D1 M1 D1 M4 D1 M1 D1 M3 I1 M3 D1 M8 ;sequence=AGAGGTAATCCGGCTTCATCTCTCTGCGTTCTCAGTTGTGGGAGGCCTTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTGGTAGCTAAGACTCCCGAATACTTCAGAAGTGGGGAAATGGAACTCTTAACGTTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGACCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACT [...]
+chr4-04	EST_Human	nucleotide_match	266020	266230	155.000000	-	.	Target=DA239049.1 1 218 +;percentID=87.2;Gap=M95 I1 M1 I1 M2 I4 M56 I1 M57 
+chr4-04	EST_Human	nucleotide_match	266027	266420	253.000000	-	.	Target=DB115439.1 143 551 +;percentID=83.3;Gap=M129 I6 M1 I2 M1 I1 M1 I3 M153 I1 M1 I1 M1 I1 M1 I3 M22 D1 M4 D2 M77 ;sequence=GTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGCTATATGTTCTCCTTTCAGCCAAGACCTTTCACCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAAAAGATACGAGAAATGTGGACATGAGAATTTACAATTAAGAAAAGGCTGTAAACGTGTGAATGAGTGTAAGGTGCAGAAAGGAG [...]
+chr4-04	EST_Human	nucleotide_match	337570	337740	121.000000	+	.	Target=EL735691.1 3 169 +;percentID=86.5;Gap=M136 D1 M4 D1 M6 D1 M15 D1 M6 ;sequence=ATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTAGACCCTGCCCAACAGAATTTATATAGAGATGTGATGTTGGAGAACTACAGAAACCTCGTCTCCCTGGCTGTGTATTCTTATTACAACCAAGGCATTTTACCAGAGCAAGGCATACAAGATTCATTCAAAAAAGCAACACTGGGAAGATATGGGAGCTGTGGCCTTGAAAATATATGCTTATGGAAAAACTGGGAAAGTATAGGTGAAGGTGAAGGACAAAAGGAATGTTATAATCTATGTAGCCAATATTTGACAACTAGTCATAACAAACATTTAACTG [...]
+chr4-04	EST_Human	nucleotide_match	266028	266502	188.000000	-	.	Target=BG026620.1 271 741 +;percentID=73.3;Gap=M19 D1 M21 D1 M3 I1 M1 I1 M7 D1 M12 I1 M15 I1 M32 D1 M76 I1 M7 I2 M7 D1 M6 I2 M2 I1 M1 I1 M24 I1 M5 D1 M67 D1 M8 D1 M15 D1 M21 D1 M9 I1 M4 I1 M3 I2 M3 D1 M6 I1 M4 D1 M2 D1 M4 I1 M11 D1 M2 D1 M4 D1 M7 D1 M4 D1 M12 D1 M3 I1 M4 D1 M5 D1 M4 D2 M12 ;sequence=CACACCTCAGGGAGGCTCGGTGATTTTGCCAGAGCCTCAGGCCTCCATCGCTCTGTAACCTGCGGGTATGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAA [...]
+chr4-04	EST_Human	nucleotide_match	266029	266422	251.000000	-	.	Target=DA666860.1 73 481 +;percentID=83;Gap=M131 I6 M1 I2 M1 I1 M1 I3 M153 I1 M1 I1 M1 I1 M1 I3 M22 D1 M4 D2 M75 
+chr4-04	EST_Human	nucleotide_match	266029	266420	251.000000	-	.	Target=CN421855.1 154 560 +;percentID=83.2;Gap=M129 I6 M1 I2 M1 I1 M1 I3 M153 I1 M1 I1 M1 I1 M1 I3 M22 D1 M4 D2 M75 
+chr4-04	EST_Human	nucleotide_match	266032	266420	252.000000	-	.	Target=DC306304.1 171 574 +;percentID=83.5;Gap=M129 I6 M1 I2 M1 I1 M1 I3 M153 I1 M1 I1 M1 I1 M1 I3 M22 D1 M4 D2 M72 ;sequence=GTTTTCCTCTGGCTCCTGCGAGGGCTTGGTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGCTATATGTTCTCCTTTCAGCCAAGACCTTTCACCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAAAAGATACGAGAAATGTGGACATGAGAATTTACAATTAAGAAAAGGCTGTAAACGT [...]
+chr4-04	EST_Human	nucleotide_match	337570	337697	120.000000	+	.	Target=BG026620.1 117 244 +;percentID=96.9
+chr4-04	EST_Human	nucleotide_match	266033	266420	251.000000	-	.	Target=DC315881.1 171 574 +;percentID=83.5;Gap=M72 I1 M57 I6 M1 I2 M1 I1 M1 I3 M153 I1 M1 I1 M1 I1 M1 I3 M22 D1 M4 D2 M71 ;sequence=GTTTTCCTCTGGCTCCTGCGAGGGCTTGGTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGCTATATGTTCTCCTTTCAGCCAAGACCTTTCACCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTTGAAAAGATACGAGAAATGTGGACATGAGAATTTACAATTAAGAAAAGGCTG [...]
+chr4-04	EST_Human	nucleotide_match	337570	337700	123.000000	+	.	Target=DN989940.1 137 267 +;percentID=96.9;sequence=CACGAGGCTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGGTGTCTGGAAATGAAGTATGGAAATGAAATCATGAATAAAGACCCAGTTTTCAGAATCTCTCCACGAAGTAGAGGAACTCATACCAATCCAGAAGAGCCTGAAGAAGATGTT [...]
+chr4-04	EST_Human	nucleotide_match	266048	266419	210.000000	-	.	Target=BG718573.1 178 563 +;percentID=80.5;Gap=M123 I6 M2 I3 M2 I1 M3 I1 M1 I1 M114 D1 M3 D2 M1 D3 M20 I1 M5 I3 M1 I2 M30 I1 M6 D1 M46 I3 M3 D1 M4 
+chr4-04	EST_Human	nucleotide_match	266049	266419	255.000000	-	.	Target=BQ069369.1 289 681 +;percentID=85.3;Gap=M130 I3 M3 I1 M1 I1 M3 I7 M131 I1 M16 I1 M1 I1 M2 I4 M35 I1 M7 I1 M17 I1 M25 
+chr4-04	EST_Human	nucleotide_match	266049	266421	274.000000	-	.	Target=DA803972.1 70 461 +;percentID=87.3;Gap=M73 I1 M59 I3 M3 I1 M1 I1 M5 I2 M1 I3 M1 I1 M4 I1 M139 I1 M1 I1 M2 I4 M84 
+chr4-04	EST_Human	nucleotide_match	266049	266421	275.000000	-	.	Target=DB215628.1 71 462 +;percentID=87.5;Gap=M73 I1 M59 I3 M3 I1 M1 I1 M5 I2 M1 I3 M1 I1 M4 I1 M139 I1 M1 I1 M2 I4 M84 
+chr4-04	EST_Human	nucleotide_match	266054	266370	198.000000	+	.	Target=BF734985.1 3 336 +;percentID=82.8;Gap=M5 I1 M8 D1 M12 I1 M19 D1 M25 D1 M7 I4 M2 I1 M33 I1 M107 I1 M4 I1 M1 I3 M1 I2 M5 I1 M1 I1 M3 I3 M81 ;sequence=TACACCTGGTGTAGGGTTCTCTCCAGCACTGAGTTCCTTTTTGTTGAGTAGGTCTGCGAGCGTCTGATATGACTGCCACATTCGTTACTTTAAAGTGTTTCTCTCCAGTATGTCTTGTCCTTATCTTTGTTTGAATTTGCTAATTTACTAAAAACTTTGACACGTGCATTACATTGAAATATTTTGCTCTGAGTATTTGACAAGCATTTATTAATTCCATTATAAACTCCCTTCTGCACTTTACACACGTTCATACTTTTACAGCCTTTCCTT [...]
+chr4-04	EST_Human	nucleotide_match	337571	337697	127.000000	+	.	Target=BM800016.1 160 286 +;percentID=100;sequence=TACTACCAGACCGCGGGTTAGGGGCTTCATCTCTCTGCGTTCTCAGTTGTGGGAGGCCTTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTGGTAGCTAAGACTCCCGAATACTTCAGAAGTGGGGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGACCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTGTTGCTATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAAGAAAAGAGCCCTACAATGTGAAGATACATAAGATCGTAGCCAGACC [...]
+chr4-04	EST_Human	nucleotide_match	266059	266395	235.000000	+	.	Target=BF735517.1 1 351 +;percentID=86.2;Gap=M8 D1 M57 D1 M7 I4 M2 I1 M1 I1 M26 D1 M3 D1 M108 I1 M4 I1 M1 I3 M1 I2 M5 I1 M1 I1 M3 I3 M106 ;sequence=GTGTAGGGTTCTCTCCAGCATGAATTCCTTTATGTTGAGTTAGGTCTGAGAACTTCTGAAATGACTGCCACATTCGTTACATTTAAAGTGTTTCTCTCCAGTATGTCTGTCTATCTTTGTTTGAATTTGCAAATTTACTAAAAACTTTGACACGTGCATTACATTGAAATATTTTGCTCTGAGTATTTGACAAGCATTTATTAATTCCATTATAAACTCCCTTCTGCACTTTACACACGTTCATACTTTTACAGCCTTTCCTTAATTGTAAATTATCATG [...]
+chr4-04	EST_Human	nucleotide_match	337570	337740	121.000000	+	.	Target=DR002780.1 100 266 +;percentID=86.5;Gap=M136 D1 M4 D1 M6 D1 M15 D1 M6 ;sequence=CACGAGGGTGATTCTGCCACTCACTCCGTCGCTCTGTGACCTGCTGGCATTAGAATGATTTATAGCTAAGACTCCAGGACACCCCTGAAGCCGAGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTAGACCCTGCCCAACAGAATTTATATAGAGATGTGATGTTGGAGAACTACAGAAACCTCGTCTCCCTGGCTGTGTATTCTTATTACAACCAAGGCATTTTACCAGAGCAAGGCATACAAGATTCATTCAAAAAAGCAACACTGGGAAGATATGGGAGCTGTGGCCTTGAAAATATATGCTTAT [...]
+chr4-04	EST_Human	nucleotide_match	266059	266445	243.000000	+	.	Target=CV312743.1 1 411 +;percentID=82.8;Gap=M14 I1 M30 I1 M1 I1 M3 I1 M2 I1 M4 I1 M1 I1 M4 I1 M7 D1 M3 I1 M1 I2 M15 D1 M129 I1 M4 I1 M1 I3 M1 I2 M5 I1 M1 I1 M3 I3 M140 I1 M5 I1 M2 I1 M9 ;sequence=GTGTAGGGTTCATCATCCAGCATGACTTCCTTTATGTTGAGGTAGAGATCTCGACGAGCGTGTCTGTCAATGACTGCACATACGTTAATTAAAGTGTACTCTCCAGTATGTCTTGTCTTATCTAAGTTTGAATTTGCAAATTTACTAAAAACTTTGACACGTGCATTACATTGCAATATTTTGCTCTGAGTATTTGACAAGCATTTATTAATTCCATTATCACCTCCCTTC [...]
+chr4-04	EST_Human	nucleotide_match	337571	337697	127.000000	+	.	Target=BP200889.1 175 301 +;percentID=100;sequence=GTCTTTGCGTCTGGCTACTACCAGACCGCGGGTTAGGGGCTTCATCTCTCTGCGTTCTCAGTTGTGGGAGGCCTTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTGGTAGCTAAGACTCCCGAATACTTCAGAAGTGGGGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGACCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTGTTGCTATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAAGAAAAGAGCCCTACAATGTGAAGATACATAA [...]
+chr4-04	EST_Human	nucleotide_match	266060	266420	230.000000	-	.	Target=DC365868.1 171 546 +;percentID=83.1;Gap=M129 I6 M1 I2 M1 I1 M1 I3 M153 I1 M1 I1 M1 I1 M1 I3 M22 D1 M4 D2 M44 ;sequence=GTTTTCCTCTGGCTCCTGCGAGGGCTTGGTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGCTATATGTTCTCCTTTCAGCCAAGACCTTTCACCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAAAAGATACGAGAAATGTGGACATGAGAATTTACAATTAAGAAAAGGCTGTAAACGT [...]
+chr4-04	EST_Human	nucleotide_match	337571	337697	127.000000	+	.	Target=DA803616.1 175 301 +;percentID=100;sequence=GTCTTTGCGTCTGGCTACTACCAGACCGCGGGTTAGGGGCTTCATCTCTCTGCGTTCTCAGTTGTGGGAGGCCTTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTGGTAGCTAAGACTCCCGAATACTTCAGAAGTGGGGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGACCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTGTTGCTATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAAGAAAAGAGCCCTACAATGTGAAGATACATAA [...]
+chr4-04	EST_Human	nucleotide_match	266065	266419	153.000000	-	.	Target=BI561969.1 400 799 +;percentID=74.8;Gap=M89 I1 M8 I1 M17 I1 M6 I1 M3 I1 M7 I1 M1 I2 M2 I1 M1 I2 M3 I1 M3 I4 M1 I1 M2 I2 M7 I1 M1 I1 M34 I1 M6 I1 M1 I1 M9 I1 M22 I1 M30 I1 M5 I1 M11 I1 M13 I1 M1 I6 M4 I1 M32 I1 M4 I1 M4 I1 M6 I1 M6 I1 M4 I1 M5 I1 M1 I1 M6 ;sequence=AGCGGGTTTTCCTCTGGCTCCTGCGAGGGCTTGGTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGA [...]
+chr4-04	EST_Human	nucleotide_match	337571	337697	97.000000	+	.	Target=DB084699.1 241 367 +;percentID=88.2
+chr4-04	EST_Human	nucleotide_match	266067	266419	259.000000	-	.	Target=DA309597.1 227 597 +;percentID=87.3;Gap=M130 I3 M3 I1 M1 I1 M5 I2 M1 I3 M1 I1 M4 I1 M139 I1 M1 I1 M2 I4 M66 ;sequence=AGCGGGGCGTCACCTCGGACATACGAACAGCGGGCGGTGTTCCCGGCTCCGTGGGGCCGTCTTCCCGGCGAGTCCGCGACGGTCGCCGCCCACGGCGAGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAGA [...]
+chr4-04	EST_Human	nucleotide_match	266069	266419	266.000000	-	.	Target=DA799182.1 175 537 +;percentID=88.5;Gap=M130 I3 M3 I1 M1 I1 M3 I7 M192 D1 M4 I1 M17 ;sequence=GTCTTTGCGTCTGGCTACTACCAGACCGCGGGTTAGGGGCTTCATCTCTCTGCGTCCTCAGTTCTGGGAGGCATTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTGGTATCTAAGACTCCCGAATACTTCAGAAGTGGGGAAATGCTATGTGTTCTCATTTCACCCAAGACCATTGGCCAGTGCAGGGCATAGAAGATTCATTCCACAAACTTATACTGAGATGATATGAGAAATGTGGACATGATAATTTACAATTAAGAAAAGGCTGTAAAAGTTTGAATGAGTGTAAGTTGCAGA [...]
+chr4-04	EST_Human	nucleotide_match	337571	337697	127.000000	+	.	Target=BX485984.1 163 289 +;percentID=100;sequence=GGCTACTACCAGACCGCGGGTTAGGGGCTTCATCTCTCTGCGTCCTCAGTTCTGGGAGGCATTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTGGTATCTAAGACTCCCGAATACTTCAGAAGTGGGGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGACCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTGTTGCTATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAAGAAAAGAGCCCTACAATGTGAAGATACATAAGATCGTAGCCAG [...]
+chr4-04	EST_Human	nucleotide_match	266081	266419	255.000000	-	.	Target=BM800016.1 383 731 +;percentID=88.3;Gap=M130 I3 M3 I1 M1 I1 M3 I7 M192 D1 M3 D1 M5 
+chr4-04	EST_Human	nucleotide_match	337571	337697	127.000000	+	.	Target=DA460146.1 210 336 +;percentID=100;sequence=AGAGAGGAGGCGGTGGCTTCCGGGATGTGGCGCGGGTCTTTGCGTCTGGCTACTACCAGACCGCGGGTTAGGGGCTTCATCTCTCTGCGTTCTCAGTTGTGGGAGGCCTTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTGGTAGCTAAGACTCCCGAATACTTCAGAAGTGGGGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGACCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTGTTGCTATCTCTAACCCAGACCTGGTCACCTGTCTGGAG [...]
+chr4-04	EST_Human	nucleotide_match	266081	266419	339.000000	-	.	Target=DC397567.1 238 576 +;percentID=100;sequence=GAAGTGGGGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGATCTCCCTGGGTGTTGCTATCTCTAACCCAGACCTGGTCATCTATCTGGAGCAAAGAAAGGAGCCCTACAAAGTGAAGATACATGAGACAGTAGCCAAACACCCAGCTGTGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCGTTCCACAAACTTATATTAAGAAGATATGAGAAATGTGGACATGAGAATTTAGAATTAAGAAAAAGCTGTAAAAGGAAGGTGCAG [...]
+chr4-04	EST_Human	nucleotide_match	337573	337697	97.000000	+	.	Target=DA628344.1 48 172 +;percentID=88.8;sequence=AGACCCGGAAGTGGATGGCGTGGAGGTATGGCGCAACTGCGGCGCGGACACTTGACATTCAGGGACGTGGCCATAGAATTCTCTCAGGAGGAGTGGAAATGCCTGGACCCTGTGCAGAAGGCTTTATACAGGGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGAATCTGTCTTCCTGACCTGAGTATTATCTCCATGATGAAGCAAAGGACAGAGCCCTGGACTGTGGAGAATGAAATGAAAGTAGCAAAAAATCCAGATAGGTGGGAAGGTATCAAAGATATCAACACAGGGAGGAGCTATGCGGTGAGAAGCAAAGCAGGAAACAAGCCTATTACAAATCAACTTGGATTAACCTTTCAGTTACCT [...]
+chr4-04	EST_Human	nucleotide_match	266088	266419	238.000000	-	.	Target=CN399123.1 237 586 +;percentID=86.6;Gap=M130 I3 M3 I1 M1 I1 M5 I2 M1 I3 M1 I1 M4 I1 M139 I1 M1 I1 M2 I4 M45 
+chr4-04	EST_Human	nucleotide_match	266104	266419	224.000000	-	.	Target=DA806351.1 238 571 +;percentID=86.2;Gap=M130 I3 M3 I1 M1 I1 M5 I2 M1 I3 M1 I1 M4 I1 M139 I1 M1 I1 M2 I4 M29 ;sequence=AGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCATTCCACAAAC [...]
+chr4-04	EST_Human	nucleotide_match	266136	266419	190.000000	-	.	Target=CV024709.1 227 522 +;percentID=84.1;Gap=M128 I6 M1 I2 M1 I1 M1 I3 M153 ;sequence=ATGGAACTCGTAACATTCAGGGATGTGGCCATAGAATTCTCCCCTGAAGAGTGGAAATGTCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTTTTGTGATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAATAAAAGAGCCCTGCAATTTGAAGATACATGAGACAGCAGCCAAACCCCCAGCTATATGTTCTCCTTTCAGCCAAGACCTTTCACCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAAAAGATACGAGAAATGTGGACATGAGAATTTACAATTAA [...]
+chr4-04	EST_Human	nucleotide_match	337571	337660	90.000000	+	.	Target=BX503083.1 183 272 +;percentID=100;sequence=GGGGGGAGGAGGGTGTCCTCAGCAACGGTGACCCGCACCAAAGCCCTCCTCACCGGGGTCACCGCCACAGCCGGTGCGAGGCCCGCAGGGCGCTGGGGATGCGCGACCGACTCCCGTGAACCTGCTCCTCGCGCGTCAGGGAGAGCTGTGCACCCGACTAGGCTCTGTGAGGACGGACTGAGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGACCAGCAGAATTTGTATAGAGAT
+chr4-04	EST_Human	nucleotide_match	266136	266419	202.000000	-	.	Target=DB229909.1 290 585 +;percentID=86.1;Gap=M130 I3 M3 I1 M1 I1 M5 I2 M1 I3 M1 I1 M4 I1 M139 ;sequence=GTTGCTTCAGCCTGAGCTCGGTTAGGGCCTCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGC [...]
+chr4-04	EST_Human	nucleotide_match	337571	337697	115.000000	+	.	Target=AL700660.1 176 302 +;percentID=95.3;sequence=GGTCTTTGCGTCTGGCTACTACCAGACCGCGGGTTAGGGGCTTCATCTCTCTGCGTTCTCAGTTGTGGGAGGCCTTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGCTATTGGATGATTGGTAGCTAACACTCCCGGATACTTCACAAGTGAGGAAATGGAATTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGTACCCTGACCAGCAGAATTGGTATCAACATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTGTTGCTATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAAGAAAAGAGCCCTACAATGTGAAGATACAT [...]
+chr4-04	EST_Human	nucleotide_match	266136	266419	204.000000	-	.	Target=DA335223.1 250 545 +;percentID=86.5;Gap=M130 I3 M3 I1 M1 I1 M5 I2 M1 I3 M1 I1 M4 I1 M139 ;sequence=ATACTCTGGTTTCTCTTCAGAACAGCGGGGCGTCACCTCGGACATACGAACAGCGGGCGGTGTTCCCGGCTCCGTGGGGCCGTCTTCCCGGCGAGTCCGCGACGGTCGCCGCCCACGGCGAGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACT [...]
+chr4-04	EST_Human	nucleotide_match	337571	337697	127.000000	+	.	Target=DA385292.1 182 308 +;percentID=100;sequence=GGCGCGGGTCTTTGCGTCTGGCTACTACCAGACCGCGGGTTAGGGGCTTCATCTCTCTGCGTTCTCAGTTGTGGGAGGCCTTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTGGTAGCTAAGACTCCCGAATACTTCAGAAGTGGGGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGACCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTGTTGCTATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAAGAAAAGAGCCCTACAATGTGAAGA [...]
+chr4-04	EST_Human	nucleotide_match	266142	266393	135.000000	+	.	Target=CV312697.1 6 270 +;percentID=79.3;Gap=M3 D1 M9 I1 M12 I1 M61 D1 M13 D1 M3 I1 M5 I1 M2 D1 M1 D1 M8 I1 M11 I1 M4 I1 M1 I3 M1 I2 M5 I1 M1 I1 M3 I3 M2 I1 M102 ;sequence=TCCACGTGTACACTCCACGTATGTCTTGTCTCTATCAAAGAACGAATTTGCAAATTTACTAAAAACATCGACACGTGCATTACATTGAAATATTTGCTCTGAGTATAGAACAAGACATAATAAATTCCATTATAAACTCCCTTCTGCACTTTACACACGTTCATACTATTTACAGCCTTTCCTTAATTGTAAATTATCATGCCCACATTTCTCATATCTTCTCAGTATAAGTTTGTGGAATGAATCTTCTATCCCC [...]
+chr4-04	EST_Human	nucleotide_match	337571	337697	127.000000	+	.	Target=DA757889.1 173 299 +;percentID=100;sequence=CTTTGCGTCTGGCTACTACCAGACCGCGGGTTAGGGGCTTCATCTCTCTGCGTCCTCAGTTCTGGGAGGCCTTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTGGTAGCTAAGACTCCCGAATACTTCAGAAGTGGGGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGACCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTGTTGCTATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAAGAAAAGAGCCCTACAATGTGAAGATACATAAGA [...]
+chr4-04	EST_Human	nucleotide_match	266142	266419	196.000000	-	.	Target=BP248393.1 293 582 +;percentID=85.9;Gap=M130 I3 M3 I1 M1 I1 M5 I2 M1 I3 M1 I1 M4 I1 M133 ;sequence=AAAGTTGCTTCAGCCTGAGCTCGGTTAGGGCCTCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTT [...]
+chr4-04	EST_Human	nucleotide_match	337573	337697	97.000000	+	.	Target=DA145375.1 58 182 +;percentID=88.8;sequence=AGCCGCCTGCAGACCCGGAAGTGGATGGCGTGGAGATATGGCGCAACTGCGGCGCGGACACTTGACATTCAGGGACGTGGCCATAGAATTCTCTCAGGAGGAGTGGAAATGCCTGGACCCTGTGCAGAAGGCTTTATACAGGGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGAATNTGTCTTCCTGACCTGAGTATTATCTCCATGATGAAGCAAAGGACAGAGCCCTGGACTGTGGAGAATGAAATGAAAGTAGCAAAAAATCCAGATAGGTGGGAAGGTATCAAAGATATCAACACAGGGAGGAGCTATGCGGTGAGAAGCAAAGCAGGAAACAAGCCTATTACAAATCAACTTGGATTAACCTT [...]
+chr4-04	EST_Human	nucleotide_match	266214	266444	145.000000	-	.	Target=BP240055.1 333 572 +;percentID=82.7;Gap=M20 D2 M2 D1 M130 I3 M3 I1 M1 I1 M5 I2 M1 I3 M1 I1 M4 I1 M61 ;sequence=GTTGCTTCAGCCTGAGCTCGTTTAGGGCCTCACTTCCTTGCTTCCACACCTGAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGGGAACTACAGAAACCTGGTCTCCCTAGGTCTCTTGATGGGAAGGACCA [...]
+chr4-04	EST_Human	nucleotide_match	337661	337697	33.000000	+	.	Target=BQ365590.1 9 46 +;percentID=94.7;Gap=M3 I1 M34 ;sequence=TGTTGTACGTGAATGTTGGAGAACTACAGGAACCTGGTCTCCCTGCGTTTGTGATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAATAAAAGAGCCCTGAATTTGAAGATACATGAGACAGCAGCCAAACCCCCAGGTAGGTGAGACTGAATGAAGGAGAGGACACAGGCTAGGAGGCCAGAGGTCAGGAAGGAAGCCAGGCCTTCAAATGTAGTCTGGGAAACTGCGCCAATAAAAATAATTTCCGAAAAGGCTGCATTTTTTCTCTTATTCACAAATAGGGTCATCTTCTGTCCCATGCTCTTAAATCTTCTAAGAATTTCCTTTTTTTCTTCAGTGATCTCCAAGTTTGCAAGGAGAG [...]
+chr4-04	EST_Human	nucleotide_match	266249	266419	112.000000	-	.	Target=DA385292.1 404 583 +;percentID=84.7;Gap=M130 I3 M3 I1 M1 I1 M3 I7 M20 D1 M1 D2 M10 
+chr4-04	EST_Human	nucleotide_match	337571	337697	127.000000	+	.	Target=DB135798.1 176 302 +;percentID=100;sequence=GTCTTTGCGTCTGGCTACTACCAGACCGCGGGTTAGGGGCTTCATCTCTCTGCGTTCTCAGTTGTGGGAGGCCTTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTGGTAGCTAAGACTCCCGAATACNTTCAGAAGTGGGGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGACCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTGTTGCTATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAAGAAAAGAGCCCTACAATGTGAAGATACATA [...]
+chr4-04	EST_Human	nucleotide_match	266301	266419	84.000000	-	.	Target=DA736785.1 656 774 +;percentID=84;sequence=GCGGCATCCGGGATCTGGCGCGGCTTTTGCTTGTAGCTCCAGCCAGAGCTCGGTTAGGGCCTCATCGCTCTGCTCCCGCTCCTTAGGGAAGCCTCGGTGATTCTGCCACAGCCTCAGCCTCTGTGGCTCTGTGACCTGCCGGTATTGGATGATTCGTATCTAAGACTCTGGGACACTCCTGAAGTCGGGAAATGGTGAGTGTGCAGGGCAGGGCGTCCCAAGGCTGTGGAGGCCTCATCGGAACCGGCGGGAAATGGCGGCGGTGGGAGGAGTCTGTGAATGGAGTTCCCGCTCAGCCCTCTGTCCTCAGTCCCCTCCGGTGAGGGACCCGCGCTCTTGTCAGTCCCCGTACAGCGGCTCTGGCCCAGCCTGCAGCCCT [...]
+chr4-04	EST_Human	nucleotide_match	337571	337697	127.000000	+	.	Target=DA418713.1 175 301 +;percentID=100;sequence=CTTTTTGCGTCTGGCTACTACCAGACCGCGGGTTAGGGGCTTCATCTCTCTGCGTTCTCAGTTGTGGGAGGCCTTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTGGTAGCTAAGACTCCCGAATACTTCAGAAGTGGGGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGACCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTGTTGCTATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAAGAAAAGAGCCCTACAATGTGAAGATACATAA [...]
+chr4-04	EST_Human	nucleotide_match	266349	266419	55.000000	-	.	Target=BU854428.1 406 476 +;percentID=88.7;sequence=GGGGGCGCGGCGTTTTCCTCTGGCTCCTGCGAGGGCTTGGTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGGAACTCGTAACATTCAGGGATGTGGCCATAGAATTCTCCCCTGAAGAGTGGAAATGTCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTTTTGTGATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAATAAAAGAGCCCTGCAATTTGAAG [...]
+chr4-04	EST_Human	nucleotide_match	337571	337697	125.000000	+	.	Target=CD654571.1 149 275 +;percentID=99.2
+chr4-04	EST_Human	nucleotide_match	266370	266738	365.000000	-	.	Target=DB343927.1 1 369 +;percentID=98.9;sequence=ACTTCTAATGGCACAGTGCTATATTGGGGAGGAGGAAGAACTGTGGTTGGTAAATGTAACAAACTTTGTATCCTGTTCTATGTGGCTCTTGGCATTGTGCTTACCTGAGGCATTGCATGTAACTCATTTATAAATTTCACTAAAAGGCATTTTGATCAGTATATGTTTGTTACATATATATGTCTGTGAAGAAATTATGGCCTGTGGTATTTTGTTATGCCATCTTACTAATGTACTTTGTATAAGTTTATATATTANATTTTTAAAGTATATTCGTATGAATCTAGTAAGCAGGATAATTTATTTTTATTTCTTTCANCTGTGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCANGGGATANAA
+chr4-04	EST_Human	nucleotide_match	338124	338229	22.000000	+	.	Target=BG192751.1 187 292 +;percentID=63.6;Gap=M4 I1 M2 I1 M2 D1 M2 D1 M4 D1 M5 I1 M10 I1 M2 D1 M71 
+chr4-04	EST_Human	nucleotide_match	266962	267477	340.000000	-	.	Target=DB269867.1 26 549 +;percentID=83.5;Gap=M64 I2 M14 I2 M3 I1 M35 I1 M21 D1 M94 I1 M48 I1 M1 I2 M221 D1 M13 ;sequence=TTTTGAAACTTTGCTTATATAAATCTCTGTGTATGTATCCTAGTTGAAGTTTGTTGAGCTTCTTCATTTTTTACATCCTTATTTTACTTTTGGAACTTTCTCACTCATTACTTTTGTATTTTTCACATCCACAATTTGTTTTTTATATTTTAACGTTTTCATCGATACCTCATTTGTCTTATTATATTTAGTTGTATGTGTTCCCCTTTAGCTCATTGAGGATTTTTCAGGTTAATTTTTTAAAATTTCTACATCTTCATTTCTTATGGTTGTTTTCTGAAAAGTTTTAAATTTTTTAATTGGGCC [...]
+chr4-04	EST_Human	nucleotide_match	267101	267656	501.000000	-	.	Target=AW977656.1 1 545 +;percentID=96;Gap=M357 D1 M77 D1 M26 D1 M7 D1 M8 D1 M26 D1 M5 D1 M3 D1 M9 D1 M8 D1 M13 D1 M6 ;sequence=CTAGCACCTTAACAATATCCCAATTCTTTCTGTTGGGAAATAGTTTTGTTGACAGATTCACTGGTAATCTTTTAAGACCACAGTTATAAATGACACATCACTTTTATTTTGCAGCTCCTAAGATGTCGTTTTTGAGTTTGATTTTTGAAACTTTGCTTATATATGTGCTTTGCTGTAAATCTGTGTGTGTAACCTTGTTGAAGTTTGTTGAGCTTCTTCCGTTTTTATATCCTTTTTTAACTTGAAAATTTCTGTCTTTATTTTGCATTTTTCACCTTCATGATTTGTTTTTTGTTTTTA [...]
+chr4-04	EST_Human	nucleotide_match	337573	337697	97.000000	+	.	Target=AU143777.1 42 166 +;percentID=88.8;sequence=GGAAGTGGATGGCGTGGAGATATGGCGCAACTGCGGCGCGGACACTTGACATTCAGGGACGTGGCCATAGAATTCTCTCAGGAGGAGTGGAAATGCCTGGACCCTGTGCAGAAGGCTTTATACAGGGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGAATCTGTCTTCCTGACCTGAGTATTATCTCCATGATGAAGCAAAGGACAGAGCCCTGGACTGTGGAGAATGAAATGAAAGTAGCAAAAAATCCAGATAGGTGGGAAGGTATCAAAGATATCAACACAGATGGAGTCCTGTTCTGTCGCCCAGGCTGGAGTACAGTGGTGTGATCTCGGCTCACTGCAACTTCCGCCTCCCAGGGAGGAGCT [...]
+chr4-04	EST_Human	nucleotide_match	267427	268011	312.000000	-	.	Target=DA189566.1 7 572 +;percentID=79.8;Gap=M11 I1 M42 D2 M1 D1 M1 D1 M2 D1 M34 I2 M2 I1 M18 I1 M2 I3 M10 I2 M24 I1 M83 I1 M1 I1 M112 D6 M1 D2 M68 D3 M51 D1 M2 D1 M6 D2 M30 D1 M5 D1 M4 D2 M1 D2 M4 D6 M38 ;sequence=TTTTTATGTTGCTTATTTATTAACAGATTATGATGAACAGTTTATGATCATTTTTATGCTCTTTAAAATTTTAGAGAATAATTAAAATGTTTTCTGCACTATCATGATAATGGTACAGAACCTTACATTTGTATATGTTCATGTCTTTCCCAAAAAGTTACNTTATTTTCATATGATTATGTTTTGTTTTCTTGCATCATATTATTTTCAGTG [...]
+chr4-04	EST_Human	nucleotide_match	337577	337697	90.000000	+	.	Target=CN426971.1 249 369 +;percentID=87.7;Gap=M60 D1 M2 I1 M58 ;sequence=CGCGTCCGCGTTGGGTGAAGGTGACGGCGTCGAGCAAAGGTGGGAGACAATGCCTTGGAGCTGCAAATCTTCTCTGAGTCTGAAGCATCCTGCCTGACGCGTTTGCTCACATTGACCCGTGCCTTCCCTCAGTCCTTCTCATCTCTACTGAGATTCCGTCTCACCCTGACCCTGTGACATGAACTTCTGAAGAGTCCACTGGGCATGGTCCTGGGAAGGGCTCACACCCAGACATGGATGGAGACGGGTTGACATTCAGGGACGTGGCCATCGAATTCTCTCAAGATGAGTGGAAATGCCTGAACTCTACACAGAGGACTTTATACAGGGATGTGATGTTGGAGAACTACAGGAA [...]
+chr4-04	EST_Human	nucleotide_match	273072	273298	110.000000	+	.	Target=CR739309.1 2 227 +;percentID=75.8;Gap=M82 D2 M61 I1 M41 I1 M1 I1 M13 I1 M4 D1 M1 D1 M6 D1 M13 ;sequence=TAAAAATACAAAAAATTAGCCGGGCGTGGTGGTGCATGCCTGTAATCCCAGCTTCTCGGGAGGCTGAGGCAGGAGAATCGCCTCCCCAGGAGGCAGAGGTTGTGGTGAGCCAAAATCATGCCATTGCTCTCCAGCCTGGGCAACAAGAGCAAAACCCTGTCTCAAAATTAAAAAAAAAAAACAAAACCAACAAAAATATAAAGATTAAAAACAAACCACTAAAATGGAGTTGAAAACTAGAATAAAAAATTCTGACCTATAAAATATTGAATCTAATATATATGTATCATAAAGACAATCTTTTAAATAACTACAGT [...]
+chr4-04	EST_Human	nucleotide_match	273172	273298	46.000000	+	.	Target=CB120026.1 2 129 +;percentID=70.2;Gap=M45 I1 M41 I1 M1 I1 M13 I1 M4 D1 M1 D1 M6 D1 M13 ;sequence=GTTGTGGTGAGCCAAAATCATGCCATTGCTCTCCAGCCTGGGCAACAAGAGCAAAACCCTGTCTCAAAATTAAAAAAAAAAAACAAAACCAACAAAAATATAAAGATTAAAAACAAACCACTAAAATGGAGTTGAAAACTAGAATAAAAAATTCTGACCTATAAAATATTGAATCTAATATATATGTATCATAAAGACAATCTTTTAAATAACTACAGTTTTCAACTGTGACTATGTACTTATGAAGAGCTGGCATTTTGAATCTTTGGCATTCAAGGTACAGCAGCAAAAGAAAATTAAGTCAATAATTAATAAAATGCTCTGA [...]
+chr4-04	EST_Human	nucleotide_match	273448	273969	290.000000	-	.	Target=DN917339.1 17 530 +;percentID=79.9;Gap=M31 D1 M11 D1 M61 D1 M8 I1 M3 I1 M3 I2 M127 D1 M1 D3 M46 I1 M7 I1 M2 I2 M40 D1 M67 I1 M1 I1 M26 D1 M9 D1 M14 D1 M1 D1 M14 D1 M4 D1 M2 D1 M7 D1 M7 D1 M8 D1 M4 ;sequence=ACGCAGAGTCGCGGGATATATTTAATATTTTCTTTGTTAGAATTTTTATTGTATTCAACTCCATTTTACTGGGCAATCTTTTTTCATGTAGATACTCCTTGATTATTTAATTTTTTTCACTTCTAATCTTCATATTTGGTAATTTTCAAATCTATACCTTTAATGATCAAGTGGTGTTTAATTCAAATAAAAATAATTGGGTTTCACTTGAGGC [...]
+chr4-04	EST_Human	nucleotide_match	338023	338235	28.000000	+	.	Target=CK001884.1 256 459 +;percentID=60.4;Gap=M16 D1 M2 D1 M30 I1 M15 D1 M3 D1 M7 D1 M11 D3 M2 D1 M22 D1 M5 D1 M14 I1 M20 I2 M21 D2 M32 ;sequence=GGGCTACAGGCCCGGAAACGGATCGCGTTGGGTGAAGGTGACGGCGTCGAGCCATTGACTTCCAAAGACTCCTGGCACATGAGGAAGAAACCCAGAAGAGGAGAGCAAAGGAGTCAGGAATGGCTTTTACTCAGTTGACATTCAGGGACGTGGCCATCGAATTCTCTCAAGATGAGTGGAAATGCCTGAACTCTACACAGAGGACTTTATACAGGGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGATCCATCTGTGATAGCCTCTCTTCTTA [...]
+chr4-04	EST_Human	nucleotide_match	273475	273876	261.000000	-	.	Target=BP395595.1 19 413 +;percentID=84.3;Gap=M9 D1 M195 I1 M7 I1 M2 I1 M1 I1 M51 D2 M13 D3 M4 D1 M1 D1 M3 D2 M3 D3 M19 I1 M1 I1 M80 ;sequence=CTCGAGCCGCGCCCGACCTTTTGTTTTAATCTTTCTGTTTGCCTGGTAATTTTAAACTCTGTACCTTTTATGACCCTGTGGTATTTAATTCAAATAAAAATCATTGGGTTTCACTTTGAGCAAATTAAAATGTACATATAAATCAGATATTTCTATTGCCTATAAAAGTTATCTGTGTGGTATTTGCATGTATAAATATTGCCCCTACTTTGTTCGTAAATTATTTATTCACTTGAGTGGTCACCAGTGTTTTCTTGTGTACGTGAGTAATCAAAGAAACTGTAA [...]
+chr4-04	EST_Human	nucleotide_match	273487	273867	270.000000	-	.	Target=BM671203.1 310 689 +;percentID=86.9;Gap=M27 D1 M3 D1 M82 I1 M2 I3 M24 D1 M37 D1 M6 D1 M9 I1 M8 I1 M2 I1 M2 I1 M67 D1 M6 D1 M1 D1 M20 D1 M76 ;sequence=TTTTTTTTTTTTTTTTTTAATTTTGAGACAGGGTTTTGCTCTTGTTGCCCAGGCTGGAGAGCAATGGCATGATTTTTGGCTCACCACAACCTCTGCCTCCTGGGGAGGCGATTCTCCTGCCTCAGCCTCCCGAGAAGCTGGGATTACAGGCATGCACCACCACGCCCGGCTAATTTTTTGTATTTTTAGTAGAGATGGGGTTTCTCCATATTGGTTATTCTGGGGTCTCGAACTCCTGACCTCAGGTGATCCACCTGCCTTGGCCTCCCAA [...]
+chr4-04	EST_Human	nucleotide_match	273510	273867	244.000000	-	.	Target=BM671221.1 310 666 +;percentID=85.5;Gap=M27 D1 M3 D1 M82 I1 M2 I3 M24 D1 M37 D1 M6 D1 M9 I1 M8 I1 M2 I1 M2 I1 M67 D1 M6 D1 M1 D1 M20 D1 M53 ;sequence=TTTTTTTTTTTTTTTTTTAATTTTGAGACAGGGTTTTGCTCTTGTTGCCCAGGCTGGAGAGCAATGGCATGATTTTGGGCTCACCACAACCTCTGCCTCCTGGGGAGGCGATTCTCCTGCCTCAGCCTCCCGAGAAGCTGGGATTACAGGCATGCACCACCACGCCCGGCTAATTTTTTGTATTTTTAGTAGAGATGGGGTTTCTCCATATTGGTTATTCTGGGGTCTCGAACTCCTGACCTCAGGTGATCCACCTGCCTTGGCCTCCCAA [...]
+chr4-04	EST_Human	nucleotide_match	273642	274089	287.000000	-	.	Target=CA941914.1 140 587 +;percentID=83.4;Gap=M54 I1 M69 D1 M3 D1 M23 D1 M11 D1 M61 D1 M8 I1 M3 I1 M3 I2 M128 D4 M46 I1 M7 I1 M2 I2 M21 ;sequence=GATATGTTCTATGCCAAATTATCTGATTTCAAATTCAAAATTTCTGAAATAAAATGCCCAAGTTTACACATTGTGTAATAAGTACATGTATTGACATGGCTCATTTTCATTAGAGCATTTTATTAATTATTGAGATGCATTTTCTTTTACTGCTTTACATTTCATGCCAAAGATTCAAAATCCTGGCTCTTCAATAAGAACATAGTCACAGTTAAAAACTGTAGTTATTTAAAGGATTGTTTTTATGGTACATCTGTATATATTTAATATTTTGTGGGTTA [...]
+chr4-04	EST_Human	nucleotide_match	337570	337697	120.000000	+	.	Target=BP248393.1 165 292 +;percentID=96.9
+chr4-04	EST_Human	nucleotide_match	273787	274250	168.000000	+	.	Target=BX435704.1 8 491 +;percentID=71.4;Gap=M15 I1 M65 I2 M3 I1 M1 I1 M8 I1 M1 I1 M3 I2 M1 I1 M42 D1 M43 D1 M37 D2 M10 D2 M2 D4 M2 D1 M50 I2 M3 I1 M3 I3 M1 I3 M25 I1 M1 I1 M7 I1 M17 I1 M12 I1 M7 I1 M20 I1 M5 I2 M18 I1 M2 I1 M6 I1 M24 D1 M7 I1 M11 ;sequence=CTTGCTTCCAATGATTTTTATTGGGAATTAAACAATACATGGTCATAAAAGGTACAAAGTTGAAAATTACCATACAAATATGAAGATTAAAAACACACAAAAAAGTAAATGATCAAGGAGAACCTACATGAAAAGAGACTCCCCAGTAAAATACAGTTGAAAACAAGAGA [...]
+chr4-04	EST_Human	nucleotide_match	273787	274089	198.000000	+	.	Target=DB316147.1 19 319 +;percentID=84.9;Gap=M80 I2 M3 I1 M1 I1 M8 I1 M1 I1 M3 I2 M1 I1 M42 D1 M43 D1 M37 D2 M10 D2 M2 D4 M2 D1 M59 ;sequence=ATATTTTTTTAACTTGCTCCAATGATTTTTATTGGAATTAAACAATACATGGTCATAAAAGGTACAAAGTTGAAAATTACCATACAAATATGAAGATTAAAAACACACAAAAAAGTAAATGATCAAGGAGAACCTACATGAAAAGAGACTCCCCAGTAAAATACAGTTGAAAACAAGAGAAAATTCTGACCTATAAAATATTGAATATAATACAGACGTATCATAAAAACAATCCTTTAAATAACTAGTTTCCAACTGTGACTTATGAAGAGCTGGCATTTTGAA [...]
+chr4-04	EST_Human	nucleotide_match	273788	274089	197.000000	+	.	Target=AW590651.1 10 309 +;percentID=84.9;Gap=M79 I2 M3 I1 M1 I1 M8 I1 M1 I1 M3 I2 M1 I1 M42 D1 M43 D1 M37 D2 M10 D2 M2 D4 M2 D1 M59 ;sequence=AACTTGCTTCAATGATTTTTATTGGAATTAAACAATACATGGTCATAAAAGGTACAAAGTTGAAAATTACCATACAAATATGAAGATTAAAAACACACAAAAAAGTAAATGATCAAGGAGAACCTACATGAAAAGAGACTCCCCAGTAAAATACAGTTGAAAACAAGAGAAAATTCTGACCTATAAAATATTGAATATAATACAGACGTATGATAAAAACAATCCTTTAAATAACTAGTTTTCAACTGTGACTTATGAAGAGCTGGCATTTTGAATCTTTGACAT [...]
+chr4-04	EST_Human	nucleotide_match	273924	274089	120.000000	+	.	Target=CR739309.1 228 394 +;percentID=87;Gap=M2 D1 M8 I3 M35 D1 M119 
+chr4-04	EST_Human	nucleotide_match	273924	274089	120.000000	+	.	Target=CB120026.1 130 296 +;percentID=87;Gap=M2 D1 M8 I3 M35 D1 M119 
+chr4-04	EST_Human	nucleotide_match	274099	274378	144.000000	-	.	Target=BM671203.1 21 309 +;percentID=78;Gap=M58 I1 M26 D2 M50 D3 M1 D1 M23 I1 M6 I2 M5 I2 M1 I4 M11 I1 M11 I2 M18 I1 M2 I1 M62 
+chr4-04	EST_Human	nucleotide_match	274099	274378	144.000000	-	.	Target=BM671221.1 21 309 +;percentID=78;Gap=M58 I1 M26 D2 M50 D3 M1 D1 M23 I1 M6 I2 M5 I2 M1 I4 M11 I1 M11 I2 M18 I1 M2 I1 M62 
+chr4-04	EST_Human	nucleotide_match	274359	274776	206.000000	+	.	Target=BX435704.1 492 903 +;percentID=77.2;Gap=M15 I2 M3 I1 M24 I1 M105 D1 M2 D2 M4 D5 M1 D2 M41 D4 M98 I1 M14 I1 M4 D1 M4 D1 M7 I1 M12 D1 M8 I1 M23 I3 M36 
+chr4-04	EST_Human	nucleotide_match	276251	276568	314.000000	-	.	Target=AW189324.1 1 318 +;percentID=99.4;sequence=GTAATTTCCAAGGGACCATAAAATATCTCATAGTTTAAAAAGTCTAGCTTAAGGTAACAATCTAACTTCTTTTTTACCCACATAGGATCTTACTTTGTTTCCCAGGATGTAGTGCAGTGGTGGGTTCACAGCTCAGTGCAGCCTTGAACTCTCCAATATCAAACACTTTTCCCATATCAGCCTCCCAAGTAGCTGGGATCACAAGCACATGCCACCATGTCCAGCTAATTTTTTTGGTATTTTTTGTAGAGACAGGGTTTTGCCACGTTGCTCAGGCTGGTCATGAACTTCTGGGCTCAAGAAATCTACCTGCCTTGG
+chr4-04	EST_Human	nucleotide_match	337598	337774	84.000000	-	.	Target=AW130582.1 69 244 +;percentID=74.9;Gap=M5 D2 M18 I1 M13 D1 M15 I1 M123 ;sequence=TTCAGCATTATGAAGCTTTTTATTTGTGAGTCAACAAGGCTTCAGTCTCAGTCAAATAATGGAAGGGCTCCCAAGAAAGACAACAGAGAAAATACAAAAATACACGAGGGCAGATCTTAACTTCTAGAGCAAAATTATCCTTACCCAGGAAGACCAGGTTCCTGTAGTTCTCCAACATCACATCCCAGTACAAAGCTTTCTGGACAGGGTCCAGGGATTTCCACTCCTCCTGAGAGAATTCTATCGGAC
+chr4-04	EST_Human	nucleotide_match	278622	278654	25.000000	+	.	Target=DB473756.1 3 35 +;percentID=87.9;sequence=ATTGCACTCCAGCCTGGGTGACAGAGTGAGACTCCATCTCAAAAAAAAAAAAAATTCTAATGAAAGGTTTTTAGAAAAGGGAGGAGAGAAAATACTCTTCCTTTATTTTCCAGTTGGAGGACTAAGTCTCTCATTTCTGTTTTGCACTTATATTTACAATAACCACATCCAAAAACTCTGCTTCGAACTCATGGACATCTGATTTCCAGCATGGCCTGGATTTAGGCACCTGCAGGGAGACATTGGGCATACTGTCTTCACAGGAAAGAGGGTTTGTGGGGGAAAAATGCAGAATAGAAAAGGTGCTATCAAGAATCCATGGGTGAGCTTTGGTGCACAATTGGTGAAAGAACTGGTTAGTGCTACAGATACTGGCCCAG [...]
+chr4-04	EST_Human	nucleotide_match	278735	279140	260.000000	+	.	Target=DB473756.1 36 444 +;percentID=83.1;Gap=M1 I1 M23 D1 M18 I1 M5 I1 M16 I1 M2 I1 M21 I2 M3 I1 M146 D1 M3 D3 M14 D1 M90 I1 M58 
+chr4-04	EST_Human	nucleotide_match	278808	279173	257.000000	+	.	Target=AA551515.1 1 365 +;percentID=85.9;Gap=M14 I2 M3 I1 M146 D1 M3 D3 M14 D1 M90 I1 M91 ;sequence=GCTAGACGACTAAGTCTCTCATTTCTGTTTTGCACTTATATTTACAATAACCACATCCAAAAACTCTGCTTCGAACTCATGGACATCTGATTTCCAGCATGGCCTGGATTTAGGCACCTGCAGGGAGACCTTGGGCATACTGTCTTCACAGGAAAGAGGGTTTGTGGGGGAAAAATGCAGAATAGAAAAGGTGCTATCAAGAATCCATGGGTGAGCTTTGGTGCACAATTGGTGAAAGAACTGGTTAGTGCTACAGATACTGGCCCAGGCAGGACAGCTCTGACTTATAAATGTGTGCGTGCAGGGAGATAAGATGGTCAGGTGATCC [...]
+chr4-04	EST_Human	nucleotide_match	338124	338252	25.000000	+	.	Target=DB028799.1 191 320 +;percentID=62.7;Gap=M4 I1 M2 I1 M2 D1 M2 D1 M4 D1 M5 I1 M10 I1 M2 D1 M85 I1 M9 
+chr4-04	EST_Human	nucleotide_match	278812	279209	283.000000	+	.	Target=AA493610.1 5 401 +;percentID=86.3;Gap=M10 I2 M3 I1 M146 D1 M3 D3 M14 D1 M90 I1 M127 ;sequence=GGTCGACGACTAAGTCTCTCATTTCTGTTTTGCACTTATATTTACAATAACCACATCCAAAAACTCTGCTTCGAACTCATGGACATCTGATTTCCAGCATGGCCTGGATTTAGGCACCTGCAGGGAGACCTTGGGCATACTGTCTTCACAGGAAAGAGGGTTTGTGGGGGAAAAATGCAGAATAGAAAAGGTGCTATCAAGAATCCATGGGTGAGCTTTGGTGCACAATTGGTGAAAGAACTGGTTAGTGCTACAGATACTGGCCCAGGCAGGACAGCTCTGACTTATAAATGTGTGCGTGCAGGGAGATAAGATGGTCAGGTGATC [...]
+chr4-04	EST_Human	nucleotide_match	338023	338180	23.000000	+	.	Target=AA125955.1 220 369 +;percentID=61.5;Gap=M16 D1 M2 D1 M25 I1 M1 I1 M19 D1 M3 D1 M7 D1 M11 D3 M2 D1 M22 D1 M5 D1 M14 I1 M20 ;sequence=GCACCCTCCACCTCAGCATTGACTTCCAAAGACTCCTGGCACATGAGGAAGAAACCCAGAAGAGGAGAGCAAAGGAGTCAGGAATGGCTTTTACTCAGTTGACATTCAGGGACGTGGCCATCGAATTCTCTCAAGATGAGTGGAAATGCCTGAACTCTACACAGAGGACTTTATACAGGGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGATCCATCTGTGATAGCCTCTCTTCTTATCCAAGCAAAGGGCTGAGATTCTTGAAAAAGCCACAGCACATCA [...]
+chr4-04	EST_Human	nucleotide_match	278933	279259	230.000000	-	.	Target=AW089533.1 79 401 +;percentID=86;Gap=M177 I1 M90 D1 M14 D3 M3 D1 M38 ;sequence=TTTTTTTTGCAGACAAGCTGTCACACTGTGAATTGTCCTGTGATTCTAGGTCTCCTCCAAGGGTCAAAGGAGACTGAGGACTGCTTCTAGAGTTTTCCACTAACAGGCCACGTAAGTGTCCCGAAGATTCATGGCTTCTTTCTACCTCCCAGATCTTGAATCTGCACCAGTAACCTCTTTCCTGCAGTAGCCTAGATTTCTGGATCACCTGACCATCTTATCTCCCTGCACGCACACATTTATAAGTCAGAGCTGTCCTGCCTGGGCCAGTATCTGTAGCACTAACCAGTTCTTTCACCAATTGTGCACCAAAGCTCACCCATGGATTCTTGATAGCACCTT [...]
+chr4-04	EST_Human	nucleotide_match	279397	279470	50.000000	-	.	Target=AW089533.1 5 78 +;percentID=84.2
+chr4-04	EST_Human	nucleotide_match	282950	283018	65.000000	-	.	Target=BQ949754.1 742 810 +;percentID=97.1;sequence=ATTTTAGAATGATAGGAAGTTTCTCGAGTTAGCCTTCATGCAATTTTGTAGATTAAAACATAAAATTTGTCCAGAACTTAAAGATTTAGATGCCTTCCTAAATTGTTACAATGCTTTACCAAATCTATGACTTCTACATAACACAAACCAGTGGTCAAATGTAAACACTATATTGTAGATTTACTGTAGGTTTTCAACCTTTTTTAGATTTATGCATGTGGACATTTTTATAATGTAATTACAATCACCACAAGGTTAGCTTTTTTAATTGCAGACAGTAATGCATGTCACACTAATATGTAGTGGCCTTTTCAAGGCCTAGTCCCAGGGAAAACATTTTGTAGAGTATAGGGGAGTGGGAGGAAGGGGAGGAATAA [...]
+chr4-04	EST_Human	nucleotide_match	337577	337697	90.000000	+	.	Target=DA281897.1 128 248 +;percentID=87.7;Gap=M60 D1 M2 I1 M58 ;sequence=AGGCCCGGAAACGGATCGCGTTGGGTGAAGGTGACGGCGTCGAGCCATTGACTTCCAAAGACTCCTGGCACATGAGGAAGAAACCCAGAAGAGGAGAGCAAAGGAGTCAGGAATGGCTTTTACTCAGTTGACATTCAGGGACGTGGCCATCGAATTCTCTCAAGATGAGTGGAAATGCCTGAACTCTACACAGAGGACTTTATACAGGGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGATCCATCTGTGATAGCCTCTCTTCTTATCCAAGCAAAGGGCTGAGATTCTTGAAAAGCCACAGCACATCATGTTCCATTCATTTTATAAGCGGGAAATTCTCTTCCT [...]
+chr4-04	EST_Human	nucleotide_match	282950	283018	65.000000	-	.	Target=BG014278.1 185 253 +;percentID=97.1;sequence=TTCTGAGCTTCAGATAATATCTTAACTGTGGAACTCAAAAGTTTGATCACTGAATTAGGCAGTTATTATTACCTAGGTACCCCCGCTGTTACACAGGTGTTTAGATACGTGTTCCTGAATGAAGCTGCTTTTGAATTTTGTTATGTTGAAATGCAAGAAATAACAATGATGGCAGCAATTAAGGTCACAGAAATCATTAGGTAAAGGAAAACCAATGAGGAGTTCTGCAGTTTTCTTTTAATAAGTAAAGTGAGACTTGGGTGGTGGGAAGAAGGAAGGTGGGAAGAAGGAATTAGACACTCTGCCTGCCACTCTGCGTGTGTGTGCTCTCGCGCACGTGCTGTCTATATGGAAG
+chr4-04	EST_Human	nucleotide_match	338124	338250	52.000000	+	.	Target=BG576135.1 242 368 +;percentID=72.3;Gap=M97 D1 M3 D1 M2 D1 M4 I1 M7 I1 M5 I1 M6 ;sequence=AGCTCCACTTCCTGTCCCCGCGGCTCTGTGTCCCTGCTAGCCGTAGGCCGTGTGACCCGCAGGCACCGGGAGATCCAGAAGTGAAACGCCAGGCTCTCTGGAGGCCAGGAGATGACTCTGTTGACGTTCAGGGATGTGGCCATAGAATTCTCCCTGGAGGAGTGGAAATGCCTGGACCTCGCTCAGCAGAATTTGTACAGGGATGTGATGTTGGAGAACTACAGAAACTTGTTCTCCGTTGGTCTCACTGTCTGTAAGCCAGGCCTGATCACCTGCCTGGAGCAACGAAAAGAGCCCTGGAATGTGAAGAGACAGGAGGCAGCAGACGGACA [...]
+chr4-04	EST_Human	nucleotide_match	282950	283018	65.000000	-	.	Target=DB200520.1 512 580 +;percentID=97.1;sequence=AATGTAATTACAATCACCACAAGGTTAGCTTTTTTAATTGCAGACAGTAATGCATGTCACACCTAATATGTAGTGGCCTTTTCAAGGCCTAGTCCCAGGGAAAACATTTTGTAGAGTATAGGGGAGTGGGAGGAAGGGGAGGAATAATTTTTTATTTAAAGTTGATTTCTGCACTATCTTTTTCTCAGTTACCTGCATGAATAAATAATGAGAAATATTTTGTGACTTTAATTGGTAAATATGTTACAAAACCAAGTACTTAATCTTTTACATCATGTCTTCAGCTATTTGTATTTTAACCAGTAATTTCAATGGTCTGAAACATGATTCTGAGCTTCACATAATATCTTAACTGTGGAACTCAAAAGTTTGATCAC [...]
+chr4-04	EST_Human	nucleotide_match	338124	338165	24.000000	+	.	Target=CB128971.1 389 430 +;percentID=78.6
+chr4-04	EST_Human	nucleotide_match	282957	283206	213.000000	-	.	Target=F33235.1 1 251 +;percentID=92.9;Gap=M36 I1 M18 D1 M102 I1 M93 ;sequence=TGAGTTCTTAAATTTTCCAAAAAGGTATAATTGCAAACATATAGGATTTCCCCCCATTTTAACCTTACCAGTTTCAAAGGAAAGTAAAGGTACTGGATTACATGAAGACAGCATGTGTGCGAGTGCACACGCATGCAGGGTGGCAGGTAGAGTGTCTTAATTCCTTTTTCTTACTACCCAAGTCTCACTTCACAGAAATCATTAGGTAAAGGAAAACCAACGAGGAGTTCTGCAGTTTTCTTTTAATAACTGAGGCTGAGGCAGGAGAATCGCTTCAACCCTGGAGGTGGAGGTTGCAGTGAGCCAAGATTGTGCCACTGCATTCCAGCCTGAGCGATAGAGTGAGACTCCA
+chr4-04	EST_Human	nucleotide_match	337606	337697	76.000000	-	.	Target=T69725.1 269 359 +;percentID=89.1;Gap=M61 D1 M30 ;sequence=CGTGGTGGCGGGACCTGTAGCCCAGCTACTAGGGAAGGNTGAGGAGGCAATGGTNTGACATGGGAGGCGGACTTCAATAAACGAGATGGCNCACTCACTCCACTCCGCCTCAAAAAAAAAAAGGAGCAATCTAAAATCATATCAGAACTGAAGAGACCAGAAGTGCTGAACAACTGGGGGTTTGGCTGCTGTCTCATGTATCTTCAAATTGCAGGGTCTTTTNTTTGCTCCAGACAGGTGACCAGGTNTGGGTTAGAGNTCACAAAACCCAGGGAGACCAGGTTCCTNTAGTTNTCCAACATCACATCTCTATACAANTTCTGCTGGGNGGGTCCAGACATTTCCACTNTTCAGGGGAG
+chr4-04	EST_Human	nucleotide_match	282991	283187	132.000000	-	.	Target=BU170536.1 14 214 +;percentID=83.2;Gap=M154 I1 M4 I1 M7 I1 M7 I1 M9 I1 M4 D1 M11 ;sequence=TAAAATAGGGGAGAAAAGCTATCATTCCAACATGTAGGATTTCTCCCCTATTTTAACCTTACCAGTTTCAAAGGAAAGAAAAGGGAGTGGCTTCCATATAGACAGCACGTGCGCGAGAGCACACACACGCAGAGTGGCAGGCAGAGTGTCTAATTCCTTCTTCCCACCTTCCTCNNNTCCACACCNAGTCTCACTTTACTTATTAAAAGAAAACTGCAGAACTCCCCAATGGGTTTCTTTTACCTAATGATTTCTGGGAACTTTATNTGCCGGCCACCCTTGTAATTTCTTGGCATTTCCACCTACCAAAATTTCCAAAGCGCCTTTCCT [...]
+chr4-04	EST_Human	nucleotide_match	338124	338252	25.000000	+	.	Target=CD358945.1 234 363 +;percentID=62.7;Gap=M4 I1 M2 I1 M2 D1 M2 D1 M4 D1 M5 I1 M10 I1 M2 D1 M85 I1 M9 
+chr4-04	EST_Human	nucleotide_match	283034	283277	197.000000	+	.	Target=EB387371.1 498 736 +;percentID=91.4;Gap=M167 D5 M72 ;sequence=TTGTAGAGTATAGGGGAGTGGGAGGAAGGGGAGGAATAATTTTTTATTTAAAGTTGATTTCTGCACTATCTTTTTCTCAGTTACCTGCATGAATAAATAATGAGAAATATTTTGTGACTTTAATTGGTAAATATGTTACAAAACCAAGTACTTAATCTTTTACATCATGTCTTCAGCTATTTGTATTTTAACCAGTAATTTCAATGGTCTGAAACATGATTCTGAGCTTCACATAATATCTTAACTGTGGAACTCAAAAGTTTGATCACTGAATTTGGCAGTTATTATTACCTAGGTACCCCCGCTGTTACACAGGTGTTTAGATACGTGTTCCTGAATGAAGCTGCTTTTGAATTTTG [...]
+chr4-04	EST_Human	nucleotide_match	338124	338284	28.000000	+	.	Target=DA145375.1 183 342 +;percentID=62.3;Gap=M4 I1 M2 I1 M2 D1 M2 D1 M4 D1 M5 I1 M10 I1 M2 D1 M85 I1 M9 D1 M6 D1 M3 I1 M5 D1 M15 
+chr4-04	EST_Human	nucleotide_match	283034	283319	225.000000	+	.	Target=AU138541.1 353 630 +;percentID=90.2;Gap=M167 D5 M90 D1 M3 D2 M18 ;sequence=AAGTACTTAATCTTTTACATCATGTCTTCAGCTATTTGTATTTTAACCAGTAATTTCAATGGTCTGAAACATGATTCTGAGCTTCACATAATATCTTAACTGTGGAACTCAAAAGTTTGATCACTGAATTTGGCAGTTATTATTACCTAGGTACCCCCGCTGTTACACAGGTGTTTAGATACGTGTTCCTGAATGAAGCTGCTTTTGAATTTTGTTATGTTGAAATGCAAGAAATAACAATGATGGCAGCAATTAAGGTCACAGAAATCATTAGGTAAAGGAAAACCAATGAGGAGTTCTGCAGTTTTCTTTTAATAAGTAAAGTGAGACTTGGGTGGTGGGAAGA [...]
+chr4-04	EST_Human	nucleotide_match	338023	338235	28.000000	+	.	Target=DA281897.1 249 452 +;percentID=60.4;Gap=M16 D1 M2 D1 M30 I1 M15 D1 M3 D1 M7 D1 M11 D3 M2 D1 M22 D1 M5 D1 M14 I1 M20 I2 M21 D2 M32 
+chr4-04	EST_Human	nucleotide_match	283034	283319	229.000000	+	.	Target=CR747967.1 423 700 +;percentID=91.3;Gap=M167 D5 M90 D1 M3 D2 M18 ;sequence=CTCAGTTACCTGCATGAATAAATAATGAGAAATATTTTGTGACTTTAATTGGTAAATATGTTACAAAACCAAGTACTTAATCTTTTACATCATGTCTTCAGCTATTTGTATTTTAACCAGTAATTTCAATGGTCTGAAACATGATTCTGAGCTTCACATAATATCTTAACTGTGGAACTCAAAAGTTTGATCACTGAATTTGGCAGTTATTATTACCTAGGTACCCCCGCTGTTACACAGGTGTTTAGATACGTGTTCCTGAATGAAGCTGCTTTTGAATTTTGTTATGTTGAAATGCAAGAAATAACAATGATGGCAGCAATTAAGGTCACAGAAATCATTAGGT [...]
+chr4-04	EST_Human	nucleotide_match	338124	338220	51.000000	+	.	Target=BG708988.1 371 467 +;percentID=76.3;sequence=AGCGGGTCTCTCGCTGCAGCTGGAGCTGCAGGTCTCGCCTTCACTGCCCTGTGTCCTCTGCTCGCAGAGGCCCAGCCTCTGTGGCCCTGTGACCTGCAGGTATTGAGAGATCCACAGCTAAGACGCCAGGTACCCCGGAAGCCTAGAAATGGGCGACCTGAGGTCTGGAGTGTATCCTCTCAAGGGAGCAAGTGGATCCCTGGGGCAGAGAGGAAGCTTCTAGTGTACTCTTACTTTGAAAAGGAGACGTTGACATTTAGGGATGTGGCCATAGAATTCTCTCTGGAGGAGTGGGAATGCCTGGACCCTGCTCAGCAGAATTTATATATGAATGTGATGTTAGAGAACTACAAAAACCTGGTCTTCTTGGGTATTGC [...]
+chr4-04	EST_Human	nucleotide_match	283034	283520	383.000000	+	.	Target=CK822888.1 125 606 +;percentID=90.2;Gap=M167 D5 M90 D1 M3 D2 M56 I1 M77 I2 M86 ;sequence=AAGAAATAACAATGATGGCAGCAATTAAGGTCACAGAAATCATTAGGTAAAGGAAAACCAATGAGGAGTTCTGCAGTTTTCTTTTAATAAGTAAAGTGAGACTTGGGTGGTGGGAAGAAGGAAGGTGGGAAGAAGGAATTAGACACTCTGCCTGCCACTCTGCGTGTGTGTGCTCTCGCGCACGTGCTGTCTATATGGAAGCCACTCCCTTTTCTTTCCTTTGAAACTGGTAAGGTTAAAATAGGGGAGAAATCCTACATGTTGGAATGATAGCTTTTTGGAAAATTTAAGAAACTCTCCAGGCTCTCCATCTTGATTTATGCTTGAGTTGT [...]
+chr4-04	EST_Human	nucleotide_match	337577	337697	90.000000	+	.	Target=CD358872.1 109 229 +;percentID=87.7;Gap=M60 D1 M2 I1 M58 ;sequence=GTTGGGTGAAGGTGACGGCGTCGAGCCATTGACTTCCAAAGACTCCTGGCACATGAGGAAGAAACCCAGAAGAGGAGAGCAAAGGAGTCAGGAATGGCTTTTACTCAGTTGACATTCAGGGACGTGGCCATCGAATTCTCTCAAGATGAGTGGAAATGCCTGAACTCTACACAGAGGACTTTATACAGGGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGATCCATCTGTGATAGCCTCTCTTCTTATCCAAGCAAAGGGCTGAGATTCTTGAAAAGCCACAGCACATCATGTTCCATTCATTTTATAAGCGGGAAATTCTCTTCCTGACCAGAGTATTATCCTAT [...]
+chr4-04	EST_Human	nucleotide_match	283034	283520	383.000000	+	.	Target=BP206017.1 94 575 +;percentID=90.2;Gap=M167 D5 M90 D1 M3 D2 M56 I1 M77 I2 M86 ;sequence=CACAGAATTCATTAGGTGGAGGAAAACCAATGAGGAGTTCTGCAGTTTTCTTTTAATAAGTAAAGTGAGACTTGGGTGGTGGGAAGAAGGAAGGTGGGAAGAAGGAATTAGACACTCTGCCTGCCACTCTGCGTGTGTGTGCTCTCGCGCACGTGCTGTCTATATGGAAGCCACTCCCTTTTCTTTCCTTTGAAACTGGTAAGGTTAAAATAGGGGAGAAATCCTACATGTTGGAATGATAGCTTTTTGGAAAATTTAAGAAACTCTCCAGGCTCTCCATCTTGATTTATGCTTGAGTTGTTATGTGCCATATTTGCTTTGAACTCTGATTAT [...]
+chr4-04	EST_Human	nucleotide_match	337577	337697	90.000000	+	.	Target=CK001884.1 135 255 +;percentID=87.7;Gap=M60 D1 M2 I1 M58 
+chr4-04	EST_Human	nucleotide_match	283034	283520	383.000000	+	.	Target=BU184304.1 132 613 +;percentID=90.2;Gap=M167 D5 M90 D1 M3 D2 M56 I1 M77 I2 M86 ;sequence=GAAATGCAAGAAATAACAATGATGGCAGCAATTAAGGTCACAGAAATCATTAGGTAAAGGAAAACCAATGAGGAGTTCTGCAGTTTTCTTTTAATAAGTAAAGTGAGACTTGGGTGGTGGGAAGAAGGAAGGTGGGAAGAAGGAATTAGACACTCTGCCTGCCACTCTGCGTGTGTGTGCTCTCGCGCACGTGCTGTCTATATGGAAGCCACTCCCTTTTCTTTCCTTTGAAACTGGTAAGGTTAAAATAGGGGAGAAATCCTACATGTTGGAATGATAGCTTTTTGGAAAATTTAAGAAACTCTCCAGGCTCTCCATCTTGATTTATGCTT [...]
+chr4-04	EST_Human	nucleotide_match	331605	331775	169.000000	+	.	Target=BP231503.1 1 172 +;percentID=99.4;Gap=M89 I1 M82 ;sequence=CTTTGCGTCTGGCTACTACCAGACCGCGGGTTAGGGGCTTCATCTCTCTGCGTTCTCAGTTGTGGGAGGCCTTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTGGTAGCTAAGACTCCCGAATACTTCAGAAGTGGGGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGACCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTGTTGCTATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAAGAAAAGAGCCCTACAATG [...]
+chr4-04	EST_Human	nucleotide_match	283034	283519	385.000000	-	.	Target=AA502757.1 1 482 +;percentID=90.4;Gap=M85 I2 M77 I1 M56 D2 M3 D1 M90 D2 M4 D2 M164 ;sequence=TTATTTATGATAGCTCATCCATCACAGTTTAATCTAAAAATGAAATTTCTACAGAAACAGGAACTATTTTGACAAAGAAAAAAAAAATCCCTCATCCAAACTTCTTTGTAGTGGTAAAGGCTGCAAATTTGCAGCGTTTAGAAAACTACACTATCAACAAGCTTTGCTTTATGGACTGAGATGTACAAAATCTAGAAAGCAGATGAAAGTGAATTATTTCAAAGTTTTAGTAAAACTTCTGATAATCAGAGTTCAAAGCAAATATGGCACATAACAACTCAAGCATAAATCAAGATGGAGAGCCTGGAGAGTTTTTTAAAATTTCCCA [...]
+chr4-04	EST_Human	nucleotide_match	338124	338226	61.000000	+	.	Target=CV024818.1 167 269 +;percentID=79.6;sequence=ATGGCTAAAAGACCGGGATCCCCTGGAAGCCGAGAAATGGGACTGTTGACATTCAGAGATGTAGTCATAGAATTCTCTCTGGAGGAGTGGCAATGCCTGGATCACGCTCAGCAGAATTTATATAGAGATGTGATGTTAGAGAACTACAGAAACCTGGTCTCCCTGGGTATTGCTGTCTCTAAGCCAGACTTGATCACCTGTCTGGAGCAAAATAAAGAGCCTTGGAATATAAAGAGAAATGAGATGGTAACCAAACACCCAGTTATGTGTTCTCATTTCACCCAAGACCTTCCGCCAGAGCTAGGCATAAAAGATTCACTCCAAAAAGTAATACCAAGAAGATATGGAAAAAGTGGACATGACAATTTACAAGTAAA [...]
+chr4-04	EST_Human	nucleotide_match	283061	283520	358.000000	-	.	Target=BQ002681.1 317 771 +;percentID=89.6;Gap=M86 I2 M77 I1 M56 D2 M3 D1 M90 D5 M140 ;sequence=TTTTTTTTTTTTTCTTTTAAGATTTAGCATTTTATTTTAGTCTCTTATCTTAGTTTGGACCACTTGTACCCAGTACTCTACCTACTACAGACTATTTAACTTACCCAACAAAATCAAAAGAGGTTGCTGACCAGATTTATAGGGGACATAACTGTTTATATTATCAAAGTGTTTGCATAACCAAAAGTACAATAATAAAGATGAAAATGCCTCCTATTTCTTTTAGAAAATAATACTTAATAAGCTTGCTGCATCTTTGATGTTTTTACTACTACTGCATGACAATGAATATCTGATAGAAAAAAGAAATGTATACTTGAATTATGATAGCT [...]
+chr4-04	EST_Human	nucleotide_match	338023	338180	23.000000	+	.	Target=DA259842.1 404 552 +;percentID=61.2;Gap=M16 D1 M2 D1 M30 I1 M15 D1 M3 D1 M7 D1 M11 D3 M2 D1 M22 D1 M5 D1 M14 I1 M20 ;sequence=AGGCCCGGAAACGGATCGCGTTGGGTGAAGGTGACGGCGTCGAGCGACCTCTCTGACCTCATCTCCTGCCTGTGTCCTCCTCGCTCCCTCTGCTCCAGCCAAGCATGCGTCCTTCCTGTTCCTGGGCCGAGCTTGCTCCTGCCTCAAGGCCTTCACGTGGGCTGTGCCTCTGCTGGAACTCGCTGGCCCCTCAGCTGCAGCATTGACTTCCAAAGACTCCTGGCACATGAGGAAGAAACCCAGAAGAGGAGAGCAAAGGAGTCAGGAATGGCTTTTACTCAGTTGACATTCAGGGA [...]
+chr4-04	EST_Human	nucleotide_match	283062	283522	348.000000	-	.	Target=BG208379.1 352 802 +;percentID=89;Gap=M11 D2 M2 D1 M2 D1 M69 I2 M77 I1 M56 D2 M3 D1 M90 D5 M78 D1 M60 ;sequence=CTGGCCGCATCCATGTTTATTAGACCAAGGCACAAAACGTTTAGTGCATAAACCCAGTTTCTTTTAAGATTTAGCATTTTATTTTAGTCTCTTATCTTATTTGGACCACTGACCCAGACTCTACTACTCAAACTTTTTAATTACCCACAAAATCAAAGAAGGTGGTTGCCCAAATTTTGTGGGCACAAACGGTAAATTAAAAAAAGGTGGGGTACCCCAGAGGCCAATATTAAAAAAGAAAAAGGCCCGCCTTTTTTTTTTTTGAAAAAAAAAAATAAAAAAAAACGCCGGCCCCCTTTTAGGGGTTTT [...]
+chr4-04	EST_Human	nucleotide_match	338023	338212	25.000000	+	.	Target=DA072857.1 396 576 +;percentID=60.8;Gap=M16 D1 M2 D1 M30 I1 M15 D1 M3 D1 M7 D1 M11 D3 M2 D1 M22 D1 M5 D1 M14 I1 M20 I2 M21 D2 M9 ;sequence=AAACGGATCGCGTTGGGTGAAGGTGACGGCGTCGAGCGACCTCTCTGACCTCATCTCCTGCCTGTGTCCTCCTCGCTCCCTCTGCTCCAGCCAAGCATGCGTCCTTCCTGTTCCTGGGCCGAGCTTGCTCCTGCCTCAAGGCCTTCACGTGAGCTGTGCCTCTGCTGGAACTCGCTGGCCCCTCAGCTGCAGCATTGACTTCCAAAGACTCCTGGCACATGAGGAAGAAACCCAGAAGAGGAGAGCAAAGGAGTCAGGAATGGCTTTTACTCAGTTGACATTC [...]
+chr4-04	EST_Human	nucleotide_match	283062	283520	357.000000	-	.	Target=BG181940.1 71 524 +;percentID=89.8;Gap=M86 I2 M77 I1 M56 D2 M3 D1 M90 D5 M139 ;sequence=CGGTCTGTATCTGGGTTTTTTACTACTTCTGCATGACAATGAATATCTGATAGAAAAAAGAAATGTATACTTGAATTATGATAGCTCATCCACCACAGTTTAATCTAAAAATGAAATTTCTACAGAAACAGGAACTATTTTGACAAAGAAAAAAAAAATCCCTCATCCAAACTTCTTTGTAGTGGTAAAGGCTGCAAATTTGCAGCGTTTAGAAAACTACACTATCAACAAGCTTTGCTTTATGGACTGAGATGTACAAAATCTAGAAAGCAGATGAAAGTGAATTATTTCAAAGTTTTAGTAAAACTTCTGATAATCAGAGTTCAAAGCAAA [...]
+chr4-04	EST_Human	nucleotide_match	338023	338235	28.000000	+	.	Target=CD358872.1 230 433 +;percentID=60.4;Gap=M16 D1 M2 D1 M30 I1 M15 D1 M3 D1 M7 D1 M11 D3 M2 D1 M22 D1 M5 D1 M14 I1 M20 I2 M21 D2 M32 
+chr4-04	EST_Human	nucleotide_match	283070	283474	323.000000	-	.	Target=BM987890.1 11 410 +;percentID=90.9;Gap=M40 I2 M77 I1 M56 D2 M3 D1 M90 D5 M131 ;sequence=TTTTTTTTTTTTTCTACAGAAACAGGAACTATTTTGACAAAGAAAAAAAAAATCCCTCATCCAAACTTCTTTGTAGTGGTAAAGGCTGCAAATTTGCAGCGTTTAGAAAACTACACTATCAACAAGCTTTGCTTTATGGACTGAGATGTACAAAATCTAGAAAGCAGATGAAAGTGAATTATTTCAAAGTTTTAGTAAAACTTCTGATAATCAGAGTTCAAAGCAAATATGGCACATAACAACTCAAGCATAAATCAAGATGGAGAGCCTGGAGAGTTTCTTAAATTTTCCAAAAAGCTATCATTCCAACATGTAGGATTTCTCCCCTATTTT [...]
+chr4-04	EST_Human	nucleotide_match	337571	337697	127.000000	+	.	Target=DB074733.1 175 301 +;percentID=100;sequence=GTCTTTGCGTCTGGCTACTACCAGACCGCGGGTTAGGGGCTTCATCTCTCTGCGTTCTCAGTTGTGGGAGGCCTTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTGGTAGCTAAGACTCCCGAATACTTCAGAAGTGGGGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGACCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTGTTGCTATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAAGAAAAGAGCCCTACAATGTGAAGATACATAA [...]
+chr4-04	EST_Human	nucleotide_match	283084	283520	343.000000	-	.	Target=AA843154.1 51 481 +;percentID=90.2;Gap=M71 I1 M92 I1 M56 D2 M3 D1 M90 D5 M117 ;sequence=TACTACTACTGCATGACAATGAATATCTGATAGAAAAAAGAAATGTATACTTGAATTATGATAGCTCATCCATCACAGTTTAATCTAAAAATGAAATTTCTACAGAAACAGGAACTATTTTGAAAAAAAAAAAAAAATCCCTCATCCAAACTTCTTTGTAGTGGTAAAGGCTGCAAATTTGCAGCGTTTAGAAAACTACACTATCAACAAGCTTTGCTTTATGGACTGAGATGTACAAAATCTAGAAAGCAGATGAAAGTGAATTATTTCAAAGTTTTAGTAAAACTTCTGATAATCAGAGTTCAAAGCAAATATGGCACATAACAACTCAAG [...]
+chr4-04	EST_Human	nucleotide_match	337571	337697	127.000000	+	.	Target=DA533464.1 175 301 +;percentID=100;sequence=GTCTTTGCGTCTGGCTACTACCAGACCGCGGGTTAGGGGCTTCATCTCTCTGCGTTCTCAGTTGTGGGAGGCCTTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTGGTAGCTAAGACTCCCGAATACTTCAGAAGTGGGGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGACCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTGTTGCTATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAAGAAAAGAGCCCTACAATGTGAAGATACATAA [...]
+chr4-04	EST_Human	nucleotide_match	283111	283522	328.000000	-	.	Target=AI494074.1 3 409 +;percentID=90.8;Gap=M88 I2 M77 I1 M56 D2 M3 D1 M90 D5 M90 ;sequence=TTTTTTTTTTTATGATAGCTCATCCATCACAGTTTAATCTAAAAATGAAATTTCTACAGAAACAGGAACTATTTTGACAAAGAAAAAAAAAATCCCTCATCCAAACTTCTTTGTAGTGGTAAAGGCTGCAAATTTGCAGCGTTTAGAAAACTACACTATCAACAAGCTTTGCTTTATGGACTGAGATGTACAAAATCTAGAAAGCAGATGAAAGTGAATTATTTCAAAGTTTTAGTAAAACTTCTGATAATCAGAGTTCAAAGCAAATATGGCACATAACAACTCAAGCATAAATCAAGATGGAGAGCCTGGAGAGTTTCTTAAATTTTCCAAAA [...]
+chr4-04	EST_Human	nucleotide_match	337571	337697	127.000000	+	.	Target=DA224929.1 173 299 +;percentID=100;sequence=CTTTGCGTCTGGCTACTACCAGACCGCGGGTTAGGGGCTTCATCTCTCTGCGTTCTCAGTTGTGGGAGGCCTTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTGGTAGCTAAGACTCCCGAATACTTCAGAAGTGGGGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGACCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTGTTGCTATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAAGAAAAGAGCCCTACAATGTGAAGATACATAAGA [...]
+chr4-04	EST_Human	nucleotide_match	283332	283775	333.000000	-	.	Target=CB146734.1 139 587 +;percentID=87.8;Gap=M129 I2 M1 I1 M7 I1 M203 D1 M21 I1 M58 I1 M24 ;sequence=ATTTTTTTTTTTTTTTTTTAGTAGAGACGGGGTTTCACCGTGTTAGCCAGGATGATCTCTATCTCCTGACCTTGTGATCTGCCTGCCTTGGCCTCCCAAAGTGCTGGGATTACAGGCGTGAGCCACCGTGCCCTTTCTAGCCGCATCCTTTTAAATTATTCATCTGTTGAAGGATGTTTGAGGTTTTTCACTTTTTGGCTTTTGTAAGTAATATGGTTTGGATCTGTGGCGCCATTCAAATCTCACATCAAATTGTAAGCCTGAATGTTGTAGGTGGGGCCTGGTGGGAGGTGACTGGATTATATGGTTGGATTCTCATGAATCA [...]
+chr4-04	EST_Human	nucleotide_match	337571	337697	127.000000	+	.	Target=DB136011.1 172 298 +;percentID=100;sequence=TTTGCGTCTGGCTACTACCAGACCGCGGGTTAGGGGCTTCATCTCTCTGCGTTCTCAGTTGTGGGAGGCCTTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTGGTAGCTAAGACTCCCGAATACTTCAGAAGTGGGGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGACCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTGTTGCTATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAAGAAAAGAGCCCTACAATGTGAAGATACATAAGAT [...]
+chr4-04	EST_Human	nucleotide_match	287971	288229	140.000000	-	.	Target=BF964632.1 344 616 +;percentID=78.5;Gap=M4 I1 M70 I1 M4 I1 M24 I1 M1 I1 M30 I1 M1 I1 M2 I1 M38 I1 M10 I1 M17 I1 M2 I1 M10 I1 M6 I1 M20 I1 M13 D1 M6 
+chr4-04	EST_Human	nucleotide_match	288533	289027	282.000000	-	.	Target=BU179167.1 340 869 +;percentID=80.6;Gap=M79 D1 M31 I1 M19 I2 M6 I1 M6 I1 M17 I1 M82 I1 M1 I1 M1 I4 M1 I1 M1 I1 M3 I1 M52 I1 M18 I1 M3 I1 M4 I1 M5 I1 M8 I1 M2 I1 M23 I1 M1 I5 M15 I1 M14 I1 M8 I1 M7 I1 M8 I1 M5 I1 M15 D1 M7 D4 M11 I1 M4 I1 M4 I1 M6 I1 M5 I1 M5 I1 M9 I1 M3 ;sequence=CTCCTTAGGGAAGCCTCGGTGATTCTGCCACAGCCTCAGCCTCTGTGGCTCTGTGACCTGCCGGTATTGGATGATTCGTATCTAAGACTCTGGGACACTCCTGAAGTCGGGAAATGGAACTCTTAACATTCAAGGATGTG [...]
+chr4-04	EST_Human	nucleotide_match	338124	338197	66.000000	-	.	Target=AA935244.1 3 76 +;percentID=94.6;sequence=TCATGTATCTTCACTTTGTAGGGCTCCTTTCTTTGCTCCAGATAGATGACCAGGTCTGGGTTAGAGATAGCAACACCCAGGGAGATCAGGTTCCTGTAGGTCTCCAACAT
+chr4-04	EST_Human	nucleotide_match	288675	288915	188.000000	-	.	Target=AA349226.1 1 242 +;percentID=88.9;Gap=M30 I1 M18 I1 M177 D1 M15 ;sequence=TTGAGGAGCTGTATGTCAAAGTATTTTTTTTCAAATATTCTTTTCGTATTATGTCTAAAATGTGTAACGTGAGTAGTGGACATAGTGGGATTTGGTTCAGAAATCCCAGGAACACCAAGGACAGATGTTGCCTCTTTNCTACTTAGTGTTTTTNAATCCTATGGAGGCTGCAAATGTAATTCTACAAAAATTCTTACTTAGCAATTTTATCAGAACAATAAGCATTTCCTAAATATGAAAAA
+chr4-04	EST_Human	nucleotide_match	338124	338223	50.000000	+	.	Target=DB244653.1 346 441 +;percentID=77;Gap=M78 D1 M1 D2 M13 D1 M4 ;sequence=ACTCTCAAGCGCGCCGCGAAAGGAGGGAGCAGCTTCCGGGACCTGGCGCGGCTTTTGTGTTGGGCAGCGCGAATGTGGCGAGCTCGGTGCGTCTCCGCTGCTCCTTCCCCTTATCCCTGGGAGGTCCAAGTGGTCCCGCGGCAGCTTCTGTTGCTCTGGGACCTGCAGGTCCCGGAAGGTCCTTAGGGAGGACCCCAGACACCGGAGACTGGGAAATGGGACTATTGGCATTCAGGGATGTGGCTCTAGAATTCTCTCCAGAGGAGTGGGAATGCCTGGACCCAGCTCAGCGGAGTTTGTATAGGGATGTGATGTTAGAGAACTACAGAAACCTGATCTCCCTTGGTCTTG [...]
+chr4-04	EST_Human	nucleotide_match	288733	289153	327.000000	-	.	Target=BG400733.1 304 725 +;percentID=89.4;Gap=M56 D1 M63 I2 M117 I1 M31 I1 M18 I1 M42 D1 M55 D1 M6 D1 M29 ;sequence=TGCAGTGGCTCATGCCTGTAATCCAAGGACTTTGGGAGGCCGAGGCAGGCGGATCACGAGGTCAAGAGATCGAGATCATCCTGGCCAACATGGTGAAGCCCCGTCTCTACTAAAAATACAAAAATTAGCTGGGCATGGTGGTGCGCACCTGGAGTCCCAGCTACTCGGGAGGCTGAAGCAGGAGAATCACTTGAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCGCACCACTGCACTCCAGCCTGGTGACAGAGTTAGACTCCGTCTCAAAAAATAAAATAAAATAAAAAATAAACCAGGTAGTTTG [...]
+chr4-04	EST_Human	nucleotide_match	288909	289153	201.000000	+	.	Target=BI016270.1 1 245 +;percentID=91.5;Gap=M8 I1 M44 D1 M13 I1 M122 D1 M56 ;sequence=TCCTCAGTAACACAAATATTCCAGTGTCTCCAAAAGCAATGGAACAGCAGTCAATCATGCAGCCCCTTTATAAGCGATAAAGTGGACATTAGCTCTCCCTGTAAACTTAAAGGGAGATCACTAAAGAAAAAAGAGAATTCTTGGATTTAACAGCATGGAACAGAAGATGCCCCTATTTGTGAACATGAGACAAAATGCAGCTTTTTCAGAAATTATTTTCACTGGAGCAGAGCTTCCCAAACTACCTGGTTTATTTCTCCATTTCATTTTATTTTT
+chr4-04	EST_Human	nucleotide_match	338124	338219	74.000000	+	.	Target=CV024709.1 131 226 +;percentID=88.5
+chr4-04	EST_Human	nucleotide_match	288964	289027	48.000000	-	.	Target=EL736128.1 227 290 +;percentID=87.5;sequence=ATGGAACTCTTAACATTCAAGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGTCTGGACATTTCCCAGCAGAATTTATATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTGGGTGTTACTATCTCTAACCCAGACCTGGTCACCAGTCTGGAGCAAAGAAAAGAGCCCTACAATTTGAAGATACATGAAACAGCAGCCAGACCCCCAGTGATCTCCCTTCAAGTTTACAGGGAGTGCCAGTGTCCACTTTATCACTTACAAAGGGCTACATGCCCAACTTTCTTGTACAAAGTTGGCATTATAAGAAAGCATTGCTTATCAATTTGTTGCAACGAACAGGTCACTATCAGTCAAAATAA [...]
+chr4-04	EST_Human	nucleotide_match	338056	338581	522.000000	-	.	Target=DB295442.1 1 527 +;percentID=99.6;Gap=M128 I1 M398 ;sequence=GAGACGGAGTCTAACTCTGTCACCAGGCTGGAGTGCAGTGGTGTGATCTTGGCTCACTGCAACCTCCGCCTCCTGGGTTCAAGTGATTCTCCTGCCTCAGCCTCCCGAGTAGCTGGGACTCCAGGTGCCGCACCACCATGCCCAGCTAATTTTTGTATTTTTAGTAGAGACGGGGTTTCACCATGTTGGCCAGGATGATCTCGATCTCTTGACCTCGTGATCCGCCTGCCTCGGCCTCCCAAAGTCCTTGGATTACAGGCATGAGCCACTGCACCCGGCCCCAAACCACATTTTAAGGCCTGGCTTCCTTCTTGACCTTTGGTCCCCTTGCCTGTGCCCTCTCCTCCATTCACTCTCACC [...]
+chr4-04	EST_Human	nucleotide_match	289059	289174	-1.000000	-	.	Target=DA311782.1 360 480 +;percentID=57.7;Gap=M5 I2 M5 I1 M12 D1 M10 I2 M3 I1 M1 I1 M6 I2 M12 D2 M6 D1 M1 D1 M16 I1 M17 D1 M9 I2 M4 D1 M2 
+chr4-04	EST_Human	nucleotide_match	289128	289384	186.000000	+	.	Target=DB295442.1 267 527 +;percentID=87.1;Gap=M11 D1 M2 D2 M38 I1 M144 I1 M8 I2 M7 I2 M7 I1 M37 
+chr4-04	EST_Human	nucleotide_match	338124	338222	53.000000	+	.	Target=BM462194.1 298 396 +;percentID=76.8;sequence=TTGTGTCCCCTGCTAGCCGTAGGCCGTGTGACCCGCAGGCACCGGGAGATCCAGAAGTGAAACGCCAGGCTCTCTGGAGGCCAGGAGATGGTGTGATTTGTCCAGAGAATCTTTCCTAAGAGGAAATCCCAGAGAAGCAGGAGAAAGAGAAAGAAATGGCTGGTGCTCAGACTCTGTTGACGTTCAGGGATGTGGCCATAGAATTCTCCCTGGAGGAGTGGAAATGCCTGGACCTCGCTCAGCAGAATTTGTACAGGGATGTGATGTTGGAGAACTACAGAAACTTGTTCTCCGTTGGTCTCACTGTCTGTAAGCCAGGCCTGATCACCTGCCTGGAGCAACGAAAAGAGCCCTGGAATGTGAAGAGACAGGAGGCA [...]
+chr4-04	EST_Human	nucleotide_match	289163	289305	36.000000	-	.	Target=DA628344.1 184 332 +;percentID=66.9;Gap=M9 I1 M3 I2 M4 I2 M3 I1 M33 I1 M1 I1 M6 D1 M1 D1 M44 I1 M7 D1 M5 D1 M5 I1 M12 I1 M2 D1 M3 
+chr4-04	EST_Human	nucleotide_match	338124	338252	25.000000	+	.	Target=DB050382.1 250 379 +;percentID=62.7;Gap=M4 I1 M2 I1 M2 D1 M2 D1 M4 D1 M5 I1 M10 I1 M2 D1 M85 I1 M9 
+chr4-04	EST_Human	nucleotide_match	289163	289305	36.000000	-	.	Target=DA145375.1 194 342 +;percentID=66.9;Gap=M9 I1 M3 I2 M4 I2 M3 I1 M33 I1 M1 I1 M6 D1 M1 D1 M44 I1 M7 D1 M5 D1 M5 I1 M12 I1 M2 D1 M3 
+chr4-04	EST_Human	nucleotide_match	338124	338242	61.000000	+	.	Target=DB479243.2 200 318 +;percentID=75.6;sequence=GTAGGCCGTGTGACCCGCAGGCACCGGGAGATCCAGAAGTGAAACGCCAGGCTCTCTGGAGGCCAGGAGATGACTCTGTTGACGTTCAGGGATGTGGCCATAGAATTCTCCCTGGAGGAGTGGAAATGCCTGGACCTCGCTCAGCAGAATTTGTACAGGGATGTGATGTTGGAGAACTACAGAAACTTGTTCTCCGTTGGTCTCACTGTCTGTAAGCCAGGCCTGATCACCTGCCTGGAGCAACGAAAAGAGCCCTGGAATGTGAAGAGACAGGAGGCAGCAGACGGACATCCAGGTGGGTGGGAATGAACGAAGCAGGTAACCCAGAGATGGGATTTCACCATGCTACTCAGGCTTGTCTTGAACTCCTGGGCTCA [...]
+chr4-04	EST_Human	nucleotide_match	289194	289305	34.000000	-	.	Target=DB075319.1 351 469 +;percentID=68.6;Gap=M9 I1 M3 I2 M4 I2 M3 I1 M33 I1 M1 I1 M6 D1 M1 D1 M44 I1 M6 ;sequence=AAAACAGCTTTAACCTGGATGTGGAGGAGGATGACATTGAGAATTTCTTAGAGGTGGTTCATGAGGAATGGGTTAATGAGGAGTCATTGGAACTGATACAGGAACATGTAGCTGAAGAAGAGGCAAGAGAATAGGGAACCTGGCTGGGCACNGGTGGCCTCACATCTATAATCCCTGCACTTTGGGAGGCCGAGGCAGGTGGATCACTTGAGGGACACTTGACATTCAGGGACGTGGCCATAGAATTCTCTCAGGAGGAGTGGAAATGCCTGGACCCTGTGCAGAAGGCTTTATACAGGGATGTGATGTTGGA [...]
+chr4-04	EST_Human	nucleotide_match	338124	338219	68.000000	-	.	Target=BX281319.1 295 390 +;percentID=85.4;sequence=TGGAAGATATCTCTCCAGTATGTCTTATCTTATGTCTATTTAGATTTGACGATTTACTAAAGACTTTCACACATTTATTAAATTGAAAGATTTTGGTATGTGTAGTTGATAAAGATTGGTTAAGTCCATTACAACATTCTTTCTGCACCTTAGATTCACCCACACTTTCCCAATCTTTCTTTAATTGTAAATTCTCAATGCCATAGCTTCCATATCTTCTCAGTATCACTTTTTGAAATGAATCTTTTATACCATGCTCTGGCAAGAGGTCTTGGGTGAAATGAGAAGAAACAGCTGGGTGTCTGGCTACTGTCTCATGTTTCTTCACATTCCAGGGCTCATTCCTTTGCTCTAGACAGGTGATCAGGTCTGGCTTA [...]
+chr4-04	EST_Human	nucleotide_match	289194	289305	34.000000	-	.	Target=DA825213.1 173 291 +;percentID=68.6;Gap=M9 I1 M3 I2 M4 I2 M3 I1 M33 I1 M1 I1 M6 D1 M1 D1 M44 I1 M6 ;sequence=GGATGGCTGTGGAGATATGGCGCAACTGCGGCGCGGACACTTGACATTCAGGGACGTGGCCATAGAATTCTCTCAGGAGGAGTGGAAATGCCTGGACCCTGTGCAGAAGGCTTTATACAGGGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGAATCTGTCTTCCTGACCTGAGTATTATCTCCATGATGAAGCAAAGGACAGAGCCCTGGACTGTGGAGAATGAAATGAAAGTAGCAAAAAATCCAGATAGGTGGGAAGGTATCAAAGATATCAACACAGGGAGGAGCTGTGCAGTGAGAAGC [...]
+chr4-04	EST_Human	nucleotide_match	338124	338219	73.000000	+	.	Target=DB056944.1 301 396 +;percentID=87.5;sequence=GTTTTTCCTCTGGCTCCTGCGAGGGCTTGGTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCCGGGAAATGGAACTCGTAACATTCAGGGATGTGGCCATAGAATTCTCCCCTGAAGAGTGGAAATGTCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTTTTGTGATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAATAAAAGAGCCCTGCAATTTGAAGATACATGAG [...]
+chr4-04	EST_Human	nucleotide_match	289194	289305	34.000000	-	.	Target=DB093425.1 348 466 +;percentID=68.6;Gap=M9 I1 M3 I2 M4 I2 M3 I1 M33 I1 M1 I1 M6 D1 M1 D1 M44 I1 M6 
+chr4-04	EST_Human	nucleotide_match	338124	338219	80.000000	+	.	Target=BU179167.1 244 339 +;percentID=91.7
+chr4-04	EST_Human	nucleotide_match	289194	289305	34.000000	-	.	Target=DB039972.1 345 463 +;percentID=68.6;Gap=M9 I1 M3 I2 M4 I2 M3 I1 M33 I1 M1 I1 M6 D1 M1 D1 M44 I1 M6 
+chr4-04	EST_Human	nucleotide_match	338124	338225	52.000000	+	.	Target=BM153152.1 231 332 +;percentID=75.5;sequence=GGTCCCCGCGGCTCTGTGTCCCCTGCTAGCCGTAGGCCGTGTGACCCGCAGGCACCGGGAGATCCAGAAGTGAAACGCCAGGCTCTCTGGAGGCCAGGATACTACNTTGTTGACGTTCAGGGATGTGGCCATAGAATTCTCCCTGGAGGAGTGGAAATGCCTGGACCTCGCTCAGCAGAATTTGTACAGGGATGTGATGTTGGAGAACTACAGAAACTTGTTCTCCGTTGGTCTCACTGTCTGTAAGCCAGGCCTGATCACCTGCCTGGAGCAACGAAAAGAGCCCTGGAATGTGAAGAGACAGGAGGCAGCAGACGGACATCCAGCTATGTCTTCTCATTTTACCCAAGACCTTCTGCCAGAGCAGGGCATACAAG [...]
+chr4-04	EST_Human	nucleotide_match	289195	289417	27.000000	-	.	Target=DA281897.1 248 469 +;percentID=59.9;Gap=M5 I1 M11 D1 M4 D1 M20 I1 M1 I1 M11 D1 M12 D1 M9 I1 M10 D1 M25 D1 M4 D1 M4 D1 M3 I1 M7 I1 M25 I1 M3 D1 M8 D1 M2 I1 M36 I1 M13 
+chr4-04	EST_Human	nucleotide_match	338124	338222	53.000000	+	.	Target=DA039065.1 296 394 +;percentID=76.8;sequence=GTGTCCCCTGCTAGCCGTAGGCCGTGTGACCCGCAGGCACCGGGAGATCCAGAAGTGAAACGCCAGGCTCTCTGGAGGCCAGGAGATGGTGTGATTTGTCCAGAGAATCTTTCCTAAGAGGAAATCCCAGAGAAGCAGGAGAAAGAGAAAGAAATGGCTGGTGCTCAGACTCTGTTGACGTTCAGGGATGTGGCCATAGAATTCTCCCTGGAGGAGTGGAAATGCCTGGACCTCGCTCAGCAGAATTTGTACAGGGATGTGATGTTGGAGAACTACAGAAACTTGTTCTCCGTTGGTCTCACTGTCTGTAAGCCAGGCCTGATCACCTGCCTGGAGCAACGAAAAGAGCCCTGGAATGTGAAGAGACAGGAGGCAGC [...]
+chr4-04	EST_Human	nucleotide_match	289195	289417	27.000000	-	.	Target=CK001884.1 255 476 +;percentID=59.9;Gap=M5 I1 M11 D1 M4 D1 M20 I1 M1 I1 M11 D1 M12 D1 M9 I1 M10 D1 M25 D1 M4 D1 M4 D1 M3 I1 M7 I1 M25 I1 M3 D1 M8 D1 M2 I1 M36 I1 M13 
+chr4-04	EST_Human	nucleotide_match	338124	338229	24.000000	+	.	Target=DB084699.1 368 473 +;percentID=64.5;Gap=M4 I1 M2 I1 M2 D1 M2 D1 M4 D1 M5 I1 M10 I1 M2 D1 M71 
+chr4-04	EST_Human	nucleotide_match	289195	289322	60.000000	-	.	Target=DB479243.2 200 327 +;percentID=73.4
+chr4-04	EST_Human	nucleotide_match	338124	338229	24.000000	+	.	Target=AU143777.1 167 272 +;percentID=64.5;Gap=M4 I1 M2 I1 M2 D1 M2 D1 M4 D1 M5 I1 M10 I1 M2 D1 M71 
+chr4-04	EST_Human	nucleotide_match	289207	289322	45.000000	-	.	Target=BG708988.1 371 488 +;percentID=70.6;Gap=M97 I1 M7 I1 M3 D1 M3 I1 M5 
+chr4-04	EST_Human	nucleotide_match	338124	338219	74.000000	+	.	Target=DA703911.1 289 384 +;percentID=88.5;sequence=GGCTCCTGCGAGGGCTTGGTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGGAACTCGTAACATTCAGGGATGTGGCCATAGAATTCTCCCCTGAAGAGTGGAAATGTCTGGACCCTGCCCGGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTTTTGTGATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAATAAAAGAGCCCTGCAATTTGAAGATACATGAGACAGCAGCCAAA [...]
+chr4-04	EST_Human	nucleotide_match	289214	289322	50.000000	-	.	Target=BG576135.1 242 352 +;percentID=74.1;Gap=M97 I1 M3 I2 M3 D1 M5 
+chr4-04	EST_Human	nucleotide_match	338124	338284	28.000000	+	.	Target=DA628344.1 173 332 +;percentID=62.3;Gap=M4 I1 M2 I1 M2 D1 M2 D1 M4 D1 M5 I1 M10 I1 M2 D1 M85 I1 M9 D1 M6 D1 M3 I1 M5 D1 M15 
+chr4-04	EST_Human	nucleotide_match	289216	289322	81.000000	-	.	Target=DA803616.1 302 406 +;percentID=88.8;Gap=M96 D1 M4 D1 M5 
+chr4-04	EST_Human	nucleotide_match	289216	289322	81.000000	-	.	Target=DA224929.1 300 404 +;percentID=88.8;Gap=M96 D1 M4 D1 M5 
+chr4-04	EST_Human	nucleotide_match	289216	289322	81.000000	-	.	Target=DA418713.1 302 406 +;percentID=88.8;Gap=M96 D1 M4 D1 M5 
+chr4-04	EST_Human	nucleotide_match	338124	338219	50.000000	+	.	Target=DB447371.2 350 445 +;percentID=76
+chr4-04	EST_Human	nucleotide_match	289218	289322	79.000000	-	.	Target=DA460146.1 337 439 +;percentID=88.6;Gap=M96 D1 M1 D1 M6 
+chr4-04	EST_Human	nucleotide_match	289219	289322	53.000000	-	.	Target=BU954839.1 315 415 +;percentID=78.3;Gap=M41 I1 M9 D1 M18 D2 M2 D1 M4 D1 M3 I1 M22 
+chr4-04	EST_Human	nucleotide_match	338124	338219	74.000000	+	.	Target=DB203397.1 255 350 +;percentID=88.5;sequence=CTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCGGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGGAACTCGTAACATTCAGGGATGTGGCCATAGAATTCTCCCCTGAAGAGTGGAAATGTCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTTTTGTGATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAATAAAAGAGCCCTGCAATTTGAAGATACATGAGACAGCAGCCAAACCCCCAGCTATATGTTCTCCTTTCAGCCAAGACC [...]
+chr4-04	EST_Human	nucleotide_match	289220	289322	52.000000	-	.	Target=EL735851.1 167 266 +;percentID=78.1;Gap=M41 I1 M9 D1 M18 D2 M2 D1 M4 D1 M3 I1 M21 
+chr4-04	EST_Human	nucleotide_match	338124	338219	74.000000	+	.	Target=DB111318.1 297 392 +;percentID=88.5;sequence=TTTCCTCTGGCTCCTGCGAGGGCTTGGTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGGAACTCGTAACATTCAGGGATGTGGCCATAGAATTCTCCCCTGAAGAGTGGAAATGTCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTTTTGTGATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAATAAAAGAGCCCTGCAATTTGAAGATACATGAGACAG [...]
+chr4-04	EST_Human	nucleotide_match	289220	289322	75.000000	-	.	Target=CN265977.1 253 355 +;percentID=86.4;sequence=GGATTGATCCCACCTAGAATCTGCATACAAAAGTTGGCCTCTGCCTGGGATTCCCAACACTGGACCAGACTTTGGGTTGAAGACATACGAAAAACTCACAGAAGACATTTTCTGCATCATGAGAGGAACTCTTAACATTCAAGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGTCTGGACATTTCCCAGCAGAATTTATATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTGGGTGTTACTATCTCTAACCCAGACCTGGTCACCAGTCTGGAGCAAAGAAAAGAGCCCTACAATTTGAAGATACATGAAACAGCAGCCAGACCCCCAGCTGTGTGTTCTCATTTCACCCAAAACCTT [...]
+chr4-04	EST_Human	nucleotide_match	289221	289322	50.000000	-	.	Target=BM153152.1 231 332 +;percentID=74.5
+chr4-04	EST_Human	nucleotide_match	338124	338225	54.000000	+	.	Target=DA000562.1 257 358 +;percentID=76.5;sequence=CTTTGTCCCGACAGAGCTCCACTTCCTGTCCCCGCGGCTCTGTGTCCCCTGCTAGCCGTAGGCCGTGTGACCCGCAGGCACCGGGAGATCCAGAAGTGAAACGCCAGGCTCTCTGGAGGCCAGGAGATGACTCTGTTGACGTTCAGGGATGTGGCCATAGAATTCTCCCTGGAGGAGTGGAAATGCCTGGACCTCGCTCAGCAGAATTTGTACAGGGATGTGACGTTGGAGAACTACAGAAACTTGTTCTCCGTTGGTCTCACTGTCTGTAAGCCAGGCCTGGTCACCTGCCTGGAGCAACGAAAAGAGCCCTGGAATGTGAAGAGACAGGAGGCAGCAGACGGACATCCAGCTATGTCTTCTCATTTTACCCAAGA [...]
+chr4-04	EST_Human	nucleotide_match	289221	289322	52.000000	-	.	Target=DA000562.1 257 358 +;percentID=75.5
+chr4-04	EST_Human	nucleotide_match	338124	338226	61.000000	+	.	Target=BG717274.1 442 544 +;percentID=79.6;sequence=AGCGGGGGTACTTGATCCAGGTATATGTCACATTCCCAACTGTTGGCTGGGCCCAAGCAAATTAGTAAAATAAATTAGGTGCTGTGTGAAAGTATACGCCACAATCACACCTGCGGGAAGGACCAGGAATAAATTTCACAATTCTACGTATTTCCCAGCTTTAGGTCTGAGAGTCTACACTTCTGAGCTCCAGTTCTTCTCTTCACTGCTCTGCGTCCTCTGTTCCTAGAGGCCAAGCCACTGTGGCCTTGTGTTCTGCAGGTATCCGCAGATTTATGGCTAAAAGACCGGGATCCCCTGGAAGCCGAGAAATGGGACTGTTGACATTCAGAGATGTAGTCATAGAATTCTCTCTGGAGGAGTGGCAATGCCTGGAT [...]
+chr4-04	EST_Human	nucleotide_match	289223	289322	52.000000	-	.	Target=DB152890.1 282 377 +;percentID=79.4;Gap=M41 I1 M9 D1 M18 D2 M2 D1 M4 D1 M3 I1 M14 D1 M3 ;sequence=CTTTTTGTCTCCTTGCGGCCGGCGGGGTGCTGGGTTCCCGTCTGCTGCCTCTCGGAGAGTCCCGGGTGACTGCCGCAGGCTCCATCGCCCTGTGGCCTGCAGGTATTGCGAGATTTATAGGGAGGACGCTGGGACCCCCAAAAGCTGGGAAATGGGACTATTGGCATTCAGGGATGTGGCTCTAGAATTCTCTCCAGAGGAGTGGGAATGCCTGGACCCAGCTCAGCGGAGTTTGTATAGGGATGTGATGTTAGAGAACTACAGAAACCTGATCTCCCTTGGTCTTGCTATGTCTAAGCCAGAACTGATCATCTGTCTGGAGGC [...]
+chr4-04	EST_Human	nucleotide_match	338124	338228	75.000000	+	.	Target=AI525680.1 280 383 +;percentID=85.7;Gap=M95 D1 M9 ;sequence=TGACAGGAATTCGGCACGAGCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGGAACTCGTAACATTCAGGGATGTGGCCATAGAATTCTCCCCTGAAGAGTGGAAATGTCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTTTTGTGATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAATAAAAGAGCCCTGCAATTTGAAGATACATGAGACAGCA [...]
+chr4-04	EST_Human	nucleotide_match	289223	289322	52.000000	-	.	Target=DB244653.1 346 441 +;percentID=79.4;Gap=M41 I1 M9 D1 M18 D2 M2 D1 M4 D1 M3 I1 M14 D1 M3 
+chr4-04	EST_Human	nucleotide_match	338124	338219	70.000000	-	.	Target=T69725.1 174 268 +;percentID=85.4;Gap=M43 D1 M52 
+chr4-04	EST_Human	nucleotide_match	289223	289322	79.000000	-	.	Target=DB136011.1 299 397 +;percentID=90;Gap=M96 D1 M3 
+chr4-04	EST_Human	nucleotide_match	289224	289322	51.000000	-	.	Target=DA081687.1 258 356 +;percentID=75.8;sequence=CTTTTGTCCCGACAGAGCTCCACTTCCTGTCCCCGCGGCTCTGTGTCCCCTGCTAGCCGTAGGCCGTGTGACCCGCAGGCACCGGGAGATCCAGAAGTGAAACGCCAGGCTCTCTGGAGGCCAGGAGATGACTCTGTTGACGTTCAGGGATGTGGCCATAGAATTCTCCCTGGAGGAGTGGAAATGCCTGGACCTCGCTCAGCAGAATTTGTACAGGGATGTGATGTTGGAGAACTACAGAAACTTGTTCTCCGTTGGTCTCACTGTCTGTAAGCCAGGCCTGATCACCTGCCTGGAGCAACGAAAAGAGCCCTGGAATGTGAAGAGACAGGAGGCAGCAGACGGACATCCAGGTATTTTCTTTGTGGTTACCATGG [...]
+chr4-04	EST_Human	nucleotide_match	338124	338219	80.000000	+	.	Target=EL736128.1 131 226 +;percentID=91.7
+chr4-04	EST_Human	nucleotide_match	289224	289322	51.000000	-	.	Target=DA039065.1 296 394 +;percentID=75.8
+chr4-04	EST_Human	nucleotide_match	338124	338219	74.000000	+	.	Target=CD689816.1 300 395 +;percentID=88.5;sequence=GTATCGGCCATTATGGCCGGGGGGGCTTGGTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCGCAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGGAACTCGTAACATTCAGGGATGTGGCCATAGAATTCTCCCCTGAAGAGTGGAAATGTCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTTTTGTGATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAATAAAAGAGCCCTGCAATTTGAAGATACATGAGA [...]
+chr4-04	EST_Human	nucleotide_match	289224	289322	51.000000	-	.	Target=DA644046.1 325 423 +;percentID=75.8;sequence=AGAGCTCCACTTCCTGTCCCCGCGGCTCTGTGTCCCCTGCTAGCCGTAGGCCGTGTGACCCGCAGGCACCGGGAGATCCAGAAGTGAAACGCCAGGCTCTCTGGAGGCCAGGAGATGGTGTGATTTGTCCAGAGAATCTTTCCTAAGAGGAAATCCCAGAGAAGCAGGAGAAAGAGAAAGAAATGGCTGGTGCTCAGACTCTGTTGACGTTCAGGGATGTGGCCATAGAATTCTCCCTGGAGGAGTGGAAATGCCTGGACCTCGCTCAGCAGAATTTGTACAGGGATGTGATGTTGGAGAACTACAGAAACTTGTTCTCCGTTGGTCTCACTGTCTGTAAGCCAGGCCTGATCACCTGCCTGGAGCAACGAAAAGAG [...]
+chr4-04	EST_Human	nucleotide_match	338124	338219	74.000000	+	.	Target=DB201918.1 301 396 +;percentID=88.5;sequence=TTTTTTTCCTCTGGCTCCTGCGAGGGCTTGGTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGGAACTCGTAACATTCAGGGATGTGGCCATAGAATTCTCCCCTGAAGAGTGGAAATGTCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTTTTGTGATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAATAAAAGAGCCCTGCAATTTGAAGATACATGAG [...]
+chr4-04	EST_Human	nucleotide_match	289224	289322	51.000000	-	.	Target=BM462194.1 298 396 +;percentID=75.8
+chr4-04	EST_Human	nucleotide_match	338124	338219	74.000000	+	.	Target=DA685292.1 264 359 +;percentID=88.5;sequence=GCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGGAACTCGTAACATTCAGGGATGTGGCCATAGAATTCTCCCCTGAAGAGTGGAAATGTCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTTTTGTGATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAATAAAAGAGCCCTGCAATTTGAAGATACATGAGACAGCAGCCAAACCCCCAGCTATATGTTCTCCTTTCA [...]
+chr4-04	EST_Human	nucleotide_match	289227	289288	48.000000	-	.	Target=DB170146.1 228 289 +;percentID=88.7
+chr4-04	EST_Human	nucleotide_match	289227	289322	51.000000	-	.	Target=DA809929.1 352 444 +;percentID=79.6;Gap=M41 I1 M9 D1 M18 D2 M2 D1 M4 D1 M3 I1 M14 
+chr4-04	EST_Human	nucleotide_match	338124	338219	74.000000	+	.	Target=DA422914.1 293 388 +;percentID=88.5;sequence=CTCTGGCTCCTGCGAGGGCTTGGTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGGAACTCGTAACATTCAGGGATGTGGCCATAGAATTCTCCCCTGAAGAGTGGAAATGTCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTTTTGTGATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAATAAAAGAGCCCTGCAATTTGAAGATACATGAGACAGCAGC [...]
+chr4-04	EST_Human	nucleotide_match	289227	289322	68.000000	+	.	Target=BX281319.1 295 390 +;percentID=85.4
+chr4-04	EST_Human	nucleotide_match	338124	338219	74.000000	+	.	Target=BI561969.1 304 399 +;percentID=88.5
+chr4-04	EST_Human	nucleotide_match	289227	289322	71.000000	-	.	Target=DB056944.1 301 396 +;percentID=86.5
+chr4-04	EST_Human	nucleotide_match	289227	289322	72.000000	-	.	Target=BI560805.1 294 389 +;percentID=87.5;sequence=AGCGGGGCTCCTGCGAGGGCTTGGTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGGAACTCGTAACATTCAGGGATGTGGCCATAGAATTCTCCCCTGAAGAGTGGAAATGTCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTTTTGTGATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAATAAAAGAGCCCTGCAATTTGAAGATACATGAGACAGCAG [...]
+chr4-04	EST_Human	nucleotide_match	289227	289322	72.000000	-	.	Target=CV024709.1 131 226 +;percentID=87.5
+chr4-04	EST_Human	nucleotide_match	289227	289322	72.000000	-	.	Target=AI525680.1 280 375 +;percentID=87.5
+chr4-04	EST_Human	nucleotide_match	338124	338219	80.000000	+	.	Target=DA571532.1 290 385 +;percentID=91.7
+chr4-04	EST_Human	nucleotide_match	289227	289322	72.000000	-	.	Target=AL545089.3 286 381 +;percentID=87.5;sequence=TCCCGGGATGCTTGGTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGGAACTCGTAACATTCAGGGATGTGGCCATAGAATTCTCCCCTGAAGAGTGGAAATGTCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACGTACAGGAACCTGGTCTCCCTGGGTTTTGTGATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAATAAAAGAGCCCTGCAATTTGAAGATACATGAGACAGCAGCCAAACCC [...]
+chr4-04	EST_Human	nucleotide_match	289227	289322	72.000000	-	.	Target=DA888845.1 298 393 +;percentID=87.5;sequence=TTTTCCTCTGGCTCCTGCGAGGGCTTGGTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGGAACTCGTAACATTCAGGGATGTGGCCATAGAATTCTCCTCTGAAGAGTGGAAATGTCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTTTTGTGATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAATAAAAGAGCCCTGCAATTTGAAGATACATGAGACA [...]
+chr4-04	EST_Human	nucleotide_match	338124	338219	74.000000	+	.	Target=DA888845.1 298 393 +;percentID=88.5
+chr4-04	EST_Human	nucleotide_match	289227	289322	72.000000	-	.	Target=CD689816.1 300 395 +;percentID=87.5
+chr4-04	EST_Human	nucleotide_match	289227	289322	72.000000	-	.	Target=DB203397.1 255 350 +;percentID=87.5
+chr4-04	EST_Human	nucleotide_match	289227	289322	72.000000	-	.	Target=DB201918.1 301 396 +;percentID=87.5
+chr4-04	EST_Human	nucleotide_match	289227	289322	72.000000	-	.	Target=DB111318.1 297 392 +;percentID=87.5
+chr4-04	EST_Human	nucleotide_match	289227	289322	72.000000	-	.	Target=DA685292.1 264 359 +;percentID=87.5
+chr4-04	EST_Human	nucleotide_match	289227	289322	72.000000	-	.	Target=DA917260.1 293 388 +;percentID=87.5;sequence=CTCTGGCTCCTGCGAGGGCTTGGTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGGAACTCGTAACATTCAGGGATGTGGCCATAGAATTCTCCCCTGAAGAGTGGAAATGTCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTTTTGTGATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAATAAAAGAGCCCTGCAATTTGAAGATACATGAGACAGCAGC [...]
+chr4-04	EST_Human	nucleotide_match	289227	289322	72.000000	-	.	Target=DB187202.1 291 386 +;percentID=87.5;sequence=CTGGCTCCTGCGAGGGCTTGGTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGGAACTCGTAACATTCAGGGATGTGGCCATAGAATTCTCCCCTGAAGAGTGGAAATGTCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTTTTGTGATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAATAAAAGAGCCCTGCAATTTGAAGATACATGAGACAGCAGCCA [...]
+chr4-04	EST_Human	nucleotide_match	289227	289322	72.000000	-	.	Target=DA422914.1 293 388 +;percentID=87.5
+chr4-04	EST_Human	nucleotide_match	289227	289322	72.000000	-	.	Target=DA703911.1 289 384 +;percentID=87.5
+chr4-04	EST_Human	nucleotide_match	289227	289322	72.000000	-	.	Target=BI561969.1 304 399 +;percentID=87.5
+chr4-04	EST_Human	nucleotide_match	289227	289322	72.000000	-	.	Target=BU854428.1 310 405 +;percentID=87.5
+chr4-04	EST_Human	nucleotide_match	289227	289322	73.000000	-	.	Target=CD385642.1 313 407 +;percentID=88.5;Gap=M18 D1 M77 
+chr4-04	EST_Human	nucleotide_match	289227	289322	74.000000	-	.	Target=BU179167.1 244 339 +;percentID=88.5
+chr4-04	EST_Human	nucleotide_match	289227	289322	74.000000	-	.	Target=DA571532.1 290 385 +;percentID=88.5
+chr4-04	EST_Human	nucleotide_match	289227	289322	74.000000	-	.	Target=EL736128.1 131 226 +;percentID=88.5
+chr4-04	EST_Human	nucleotide_match	289227	289322	76.000000	-	.	Target=BP231503.1 300 395 +;percentID=89.6
+chr4-04	EST_Human	nucleotide_match	289227	289322	77.000000	-	.	Target=DA385292.1 309 403 +;percentID=90.6;Gap=M90 D1 M5 
+chr4-04	EST_Human	nucleotide_match	289227	289322	78.000000	-	.	Target=CD654571.1 276 371 +;percentID=90.6
+chr4-04	EST_Human	nucleotide_match	289227	289322	78.000000	-	.	Target=BM800016.1 287 382 +;percentID=90.6
+chr4-04	EST_Human	nucleotide_match	289227	289322	78.000000	-	.	Target=DB074733.1 302 397 +;percentID=90.6
+chr4-04	EST_Human	nucleotide_match	289227	289322	78.000000	-	.	Target=DB135798.1 303 398 +;percentID=90.6
+chr4-04	EST_Human	nucleotide_match	289227	289322	78.000000	-	.	Target=DA564196.1 302 397 +;percentID=90.6;sequence=GTCTTTGCGTCTGGCTACTACCAGACCGCGGGTTAGGGGCTTCATCTCTCTGCGTCCTCAGTTCTGGGAGGCCTTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTGGTAGCTAAGACTCCCGAATACTTCAGAAGTGGGGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGACCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTGTTGCTATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAAGAAAAGAGCCCTACAATGTGAAGATACATAA [...]
+chr4-04	EST_Human	nucleotide_match	289227	289322	78.000000	-	.	Target=DB221880.1 333 428 +;percentID=90.6
+chr4-04	EST_Human	nucleotide_match	289227	289322	78.000000	-	.	Target=DA801371.1 302 397 +;percentID=90.6;sequence=GTCTTTGCGTCTGGCTACTACCAGACCGCGGGTTAGGGGCTACATCTCTCTGCGTCCTCAGTTCTGGGAGGCATTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTGGTATCTAAGACTCCCGAATACTTCAGAAGTGGGGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGACCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTGTTGCTATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAAGAAAAGAGCCCTACAATGTGAAGATACATAA [...]
+chr4-04	EST_Human	nucleotide_match	289227	289322	78.000000	-	.	Target=BU177765.1 285 380 +;percentID=90.6;sequence=GGACCAGACCGCGGGTTAGGGGCTTCATCTCTCTGCGTTCTCAGTTGTGGGAGGCCTTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTGGTAGCTAAGACTCCCGAATACTTCAGAAGTGGGGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGACCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTGTTGCTATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAAGAAAAGAGCCCTACAATGTGAAGATACATAAGATCGTAGCCAGACCCC [...]
+chr4-04	EST_Human	nucleotide_match	289227	289322	78.000000	-	.	Target=DA002438.1 280 375 +;percentID=90.6;sequence=AGACCGCGGGTTAGGGGCTTCATCTCTCTGCGTTCTCAGTTGTGGGAGGCCTTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTGGTAGCTAAGACTCCCGAATACTTCAGAAGTGGGGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGACCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTGTTGCTATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAAGAAAAGAGCCCTACAATGTGAAGATACATAAGATCGTAGCCAGACCCCCAGAT [...]
+chr4-04	EST_Human	nucleotide_match	289227	289322	78.000000	-	.	Target=DA757889.1 300 395 +;percentID=90.6
+chr4-04	EST_Human	nucleotide_match	289227	289322	96.000000	-	.	Target=DC397567.1 142 237 +;percentID=100
+chr4-04	EST_Human	nucleotide_match	289247	289322	76.000000	+	.	Target=AA935244.1 1 76 +;percentID=100
+chr4-04	EST_Human	nucleotide_match	338124	338219	96.000000	+	.	Target=DA757889.1 300 395 +;percentID=100
+chr4-04	EST_Human	nucleotide_match	289565	289735	25.000000	-	.	Target=DB080772.1 335 506 +;percentID=59.7;Gap=M9 I1 M3 I1 M10 D1 M2 D1 M25 I1 M16 D1 M8 I1 M35 D1 M49 I1 M10 ;sequence=TGGCCTACTGGATGCGCGCAAACCCGGAAGCGGATTATGTGGAGTGAAAGTTACACCGTGGCGGATTGACTTCTAAGGACTCTTGGTACATGAGGAAGAAACCCGGAAGGGGAAGAGGAAAGCAAAGGCGTCAGGAATGGTTCTTCCTCAGGGTCTATTGACATTCAGGGATGTGGCCATAGAATTCTCTCAGGAGGAGTGGAAATGCCTGGACCCTGCTCAGAGGACTCTATACAGAGATGTGATGTTGGAGAATTATAGGAACCTGGTCTCCCTGGGTGAGGATAACTTCCCTCCAGAAGTGGGGAT [...]
+chr4-04	EST_Human	nucleotide_match	338124	338219	78.000000	+	.	Target=DC397567.1 142 237 +;percentID=90.6
+chr4-04	EST_Human	nucleotide_match	289565	289735	25.000000	-	.	Target=CN417586.1 356 527 +;percentID=59.7;Gap=M9 I1 M3 I1 M10 D1 M2 D1 M25 I1 M16 D1 M8 I1 M35 D1 M49 I1 M10 ;sequence=GCGTCCGCCTGGCTTCTGTACTGCGCGCGCACATGCGCGCAAACCCGGAAGCGGATTATGTGGAGTGAAAGTTACACCGTGGCGGATTGACTTCTAAGGACTCTTGGTACATGAGGAAGAAACCCGGAAGGGGAAGAGGAAAGCAAAGGCGTCAGGAATGGTTCTTCCTCAGGGTCTATTGACATTCAGGGATGTGGCCATAGAATTCTCTCAGGAGGAGTGGAAATGCCTGGACCCTGCTCAGAGGACTCTATACAGAGATGTGATGTTGGAGAATTATAGGAACCTGGTCTCCCTGGGTGAGGATAA [...]
+chr4-04	EST_Human	nucleotide_match	289645	289945	219.000000	-	.	Target=DA804383.1 125 426 +;percentID=87.3;Gap=M169 D2 M39 D1 M10 I2 M2 I2 M31 D1 M28 I1 M18 ;sequence=ATTGCCTTGTGTCCTCTGCTCCGGGAGACTTCGGTGATTCTGCCACTCACTCCGTCGCTCTGTGACCTGCTGGCATTGAATGATTTATAGCTAAGACTCCAGGACACCCCTGAAGCCGAGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTAGACCCTGCCCAACAGAATTTATATAGAGATGTGATGTTGGAGAACTACAGAAACCTCGTCTCCCTGGGTGAGAATAACTTCAATACATAATTCCTAATTCTCCCTCAGAGTTTTATTTTCTTTCTTTGTAGACTGTCTCT [...]
+chr4-04	EST_Human	nucleotide_match	289663	289945	216.000000	-	.	Target=BP199153.1 159 440 +;percentID=89.2;Gap=M169 D2 M39 D1 M10 I2 M2 I2 M29 D1 M1 D1 M28 ;sequence=ACTCACTTCAGCCAGAGCGCGGGGTTAGGGCTTCATTGCCTTGTGTCCTCTGCTCCGGGAGACTTCGGTGATTCTGCCACTCACTCCGTCGCTCTGTGACCTGCTGGCATTGAATGATTTATAGCTAAGACTCCAGGACACCCCTGAAGCCGAGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTAGACCCTGCCCAACAGAATTTATATAGAGATGTGATGTTGGAGAACTACAGAAACCTCGTCTCCCTGGGTGAGAATAACTTCAATACATAATTCCTAATTCTCCCTCA [...]
+chr4-04	EST_Human	nucleotide_match	289720	289947	109.000000	+	.	Target=N94749.1 50 272 +;percentID=75.7;Gap=M12 D1 M13 D1 M1 D1 M12 D1 M1 D1 M20 I1 M2 I1 M5 D2 M155 
+chr4-04	EST_Human	nucleotide_match	338124	338219	74.000000	+	.	Target=BI560805.1 294 389 +;percentID=88.5
+chr4-04	EST_Human	nucleotide_match	289720	289950	111.000000	+	.	Target=DB346087.1 51 277 +;percentID=75.5;Gap=M12 D1 M13 D1 M1 D1 M12 D1 M1 D1 M20 I1 M2 I1 M5 D1 M159 
+chr4-04	EST_Human	nucleotide_match	338124	338219	93.000000	+	.	Target=DA385292.1 309 403 +;percentID=99;Gap=M89 D1 M6 
+chr4-04	EST_Human	nucleotide_match	289738	289945	174.000000	-	.	Target=BP260998.1 148 353 +;percentID=92.3;Gap=M169 D2 M37 ;sequence=AGCTCGGTTAGGGCCTGGCTTCCGTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGGCGTAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGGTGAGGATAACTTTAATGCGTAATTCCTAATACTCCCTCTGAGTTTTATTTTCTATTTTTGTAGAATGTCTTTTGAGATATATC [...]
+chr4-04	EST_Human	nucleotide_match	289746	289945	171.000000	-	.	Target=BF964632.1 147 343 +;percentID=93.5;Gap=M169 D2 M18 D1 M10 
+chr4-04	EST_Human	nucleotide_match	289764	289948	111.000000	-	.	Target=DB080772.1 148 334 +;percentID=80.2;Gap=M180 I2 M5 
+chr4-04	EST_Human	nucleotide_match	289764	289948	111.000000	-	.	Target=CN417586.1 169 355 +;percentID=80.2;Gap=M180 I2 M5 
+chr4-04	EST_Human	nucleotide_match	289774	289945	104.000000	-	.	Target=DA809929.1 188 351 +;percentID=82.6;Gap=M157 D1 M1 D2 M1 D3 M4 D2 M1 
+chr4-04	EST_Human	nucleotide_match	289774	289945	104.000000	-	.	Target=EL735851.1 3 166 +;percentID=82.6;Gap=M157 D1 M1 D2 M1 D3 M4 D2 M1 
+chr4-04	EST_Human	nucleotide_match	289774	289945	105.000000	-	.	Target=BU954839.1 151 314 +;percentID=82.6;Gap=M157 D1 M1 D2 M1 D3 M4 D2 M1 
+chr4-04	EST_Human	nucleotide_match	289774	289945	106.000000	-	.	Target=BP240055.1 162 332 +;percentID=81.5;Gap=M148 D1 M9 I1 M6 D1 M7 
+chr4-04	EST_Human	nucleotide_match	289780	289938	102.000000	-	.	Target=DA224550.1 382 540 +;percentID=82.5;Gap=M152 D1 M2 I1 M4 ;sequence=ATGCGCAGTTTCCTACAGGCCCGGAAACGGATCGCGTTGGGTGAAGGTGACGGCGTCGAGCGTGAGTGACCCTCTGTGTAGATTAAACCTGCGCTCCCTGTTTCCCATTTCCACAGCCGATGTCCAGGGTCGATACGGCCCTTAAAATCCCCGCACACTCCACCCCAGAAAGGTGGGAGACAATGCCTTGGAGCTGCAAATCTTCTCTGAGTCTGAAGCATCCTGCCTGACGCGTTTGCTCACATTGACCCGTGCCTTCCCTCAGTCCTTCTCATCTCTACTGAGATTCCGTCTCACCCTGACCCTGTGACATGAACTTCTGAAGAGTCCACTGGGCATGGTCCTGGGAAGGGC [...]
+chr4-04	EST_Human	nucleotide_match	338738	339173	289.000000	+	.	Target=CD385642.1 408 857 +;percentID=82.4;Gap=M229 I1 M99 I1 M8 I1 M11 I1 M18 I1 M12 I2 M7 I1 M4 I1 M8 I1 M2 I1 M2 I2 M15 I1 M21 
+chr4-04	EST_Human	nucleotide_match	289786	289945	111.000000	-	.	Target=BG026620.1 117 270 +;percentID=87;Gap=M133 D1 M1 D3 M3 I1 M13 D2 M2 D1 M1 
+chr4-04	EST_Human	nucleotide_match	289803	289945	113.000000	-	.	Target=DA311782.1 219 359 +;percentID=90.2;Gap=M134 D1 M3 D1 M4 
+chr4-04	EST_Human	nucleotide_match	289804	289948	103.000000	-	.	Target=BU537030.1 136 280 +;percentID=85.5;sequence=GGGAGACCAGGAAGCGGATCCCGTGGAATGACGGTCACGCCGCGGCGGGCGGATTGACTTCTAAAGAATCTTGGTACGTGAGGAAGAAACCCAGAAGAGGAAGAGGAAAGCAAAGGAGTCAGGGATGGCTCTTCCTCAGGGTCTATTGACATTCAGGGACGTGGCCATAGAATTCTCTCAGGAGGAGTGGAAATGCCTGGACCCTGCTCAGAGGACTCTTTACAGGGATGTGATGCTGGAGAATTATAGGAACCTGGTCTCCCTGGGTGAGGATAACCTCCTGGGGATGTGCCCTTGTGTATCTTTGTATTTTCTCTTGTTGCCTCTTGGGAGCCACATCCTTACTTGACTAAAATGGAAGCCGTATTGATTTTGA [...]
+chr4-04	EST_Human	nucleotide_match	338124	338223	97.000000	+	.	Target=DB136011.1 299 397 +;percentID=99;Gap=M95 D1 M4 
+chr4-04	EST_Human	nucleotide_match	289809	289942	88.000000	-	.	Target=DA628344.1 48 183 +;percentID=83.2;Gap=M126 I2 M8 
+chr4-04	EST_Human	nucleotide_match	289809	289942	88.000000	-	.	Target=DA825213.1 37 172 +;percentID=83.2;Gap=M126 I2 M8 
+chr4-04	EST_Human	nucleotide_match	289809	289942	89.000000	-	.	Target=DA145375.1 58 193 +;percentID=83.2;Gap=M126 I2 M8 
+chr4-04	EST_Human	nucleotide_match	289809	289949	91.000000	-	.	Target=DB075319.1 208 350 +;percentID=82.6;Gap=M133 I2 M8 
+chr4-04	EST_Human	nucleotide_match	289809	289949	91.000000	-	.	Target=DB093425.1 205 347 +;percentID=82.6;Gap=M133 I2 M8 
+chr4-04	EST_Human	nucleotide_match	289809	289949	91.000000	-	.	Target=DB039972.1 202 344 +;percentID=82.6;Gap=M133 I2 M8 
+chr4-04	EST_Human	nucleotide_match	289815	289944	122.000000	-	.	Target=DA501191.1 230 359 +;percentID=96.9;sequence=ACTGCCCAATCAGGCGCGCAGTCTGAGAGGAGGGGGCGGCATCCGGGATCTTCGGCGGCCTTGGCCTGTTGCTTCAGCCTGAGCTCGGTTAGGGCCTCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGGTGTCTGGAAATGAAGTATG [...]
+chr4-04	EST_Human	nucleotide_match	338124	338219	96.000000	+	.	Target=CD654571.1 276 371 +;percentID=100
+chr4-04	EST_Human	nucleotide_match	289815	289944	122.000000	-	.	Target=AU138611.1 150 279 +;percentID=96.9
+chr4-04	EST_Human	nucleotide_match	338124	338219	96.000000	+	.	Target=DA460146.1 337 432 +;percentID=100
+chr4-04	EST_Human	nucleotide_match	289815	289944	122.000000	-	.	Target=DN989940.1 138 267 +;percentID=96.9
+chr4-04	EST_Human	nucleotide_match	338124	338219	96.000000	+	.	Target=BP200889.1 302 397 +;percentID=100
+chr4-04	EST_Human	nucleotide_match	289815	289945	123.000000	-	.	Target=CD688651.1 190 320 +;percentID=96.9;sequence=CTTGATATCGAATCGTATCGGCCATTATGGCCGGGGAGCCTGAGCTCGGTTAGGGCCTCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGGTGTCTGGAAATGAAGTATAGAAATGAAATCATGAATAAAGACCCAGTTTTCAGAATCT [...]
+chr4-04	EST_Human	nucleotide_match	338124	338219	74.000000	+	.	Target=DB187202.1 291 386 +;percentID=88.5
+chr4-04	EST_Human	nucleotide_match	289815	289945	123.000000	-	.	Target=BU156411.1 134 264 +;percentID=96.9;sequence=CTCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGGTGTCTGGAAATGAAGTATGGAAATGAAATCATGAATAAAGACCCAGTTTTCAGAATCTCTCCACGAAGTAGAGGAACTCATACCAATCCAGAAGAGCCTGAAGAAGATGTTCAA [...]
+chr4-04	EST_Human	nucleotide_match	338267	338497	99.000000	+	.	Target=CN417586.1 503 736 +;percentID=72.8;Gap=M1 I1 M17 D1 M81 I2 M98 I1 M6 D1 M4 I1 M22 
+chr4-04	EST_Human	nucleotide_match	289817	289958	92.000000	-	.	Target=BM800078.1 418 560 +;percentID=82.5;Gap=M10 I1 M132 
+chr4-04	EST_Human	nucleotide_match	338124	338223	97.000000	+	.	Target=DA803616.1 302 400 +;percentID=99;Gap=M95 D1 M4 
+chr4-04	EST_Human	nucleotide_match	289817	289933	95.000000	-	.	Target=DA102026.1 317 433 +;percentID=90.6;sequence=GCAGCTTGAGAGGCGGAGGGGGTTTCCGGGATCTGGCGGGGCCTTTGTCTTGTGCTCCAGCTGGAGCTTTGGTCCCGTATTCTCGGCTATTTATCCCCAGCTGCGGGAGGCCCTGGTGACTCTGCTGCTGCAGTGTCTGGTTTCCCTGTGACCTGCAGGTACNTGGGAGTTACATAGCTAAGATGCCAGGACACCCCGAAAGCCGGAAAACGAGACGCATTCTCACTATGTTGCCCAGGCTGGTCTTGAACTCCTTCCCTCAAGTGATTCTTCTGCCTAATCCTCCCAAAGTTCTTAGATTACAGGGACTACTGGCATTCAGTGATGTGGTCATAGAATTCTCTCCAGAGGAGTGGGCATGCCTGGACCCTGCCCAG [...]
+chr4-04	EST_Human	nucleotide_match	338302	338608	162.000000	+	.	Target=AV725968.1 252 562 +;percentID=76.4;Gap=M64 I1 M1 I1 M60 D1 M43 I1 M5 D1 M81 I1 M31 I2 M1 I1 M4 D1 M14 
+chr4-04	EST_Human	nucleotide_match	289817	289933	95.000000	-	.	Target=DA703641.1 265 381 +;percentID=90.6;sequence=GTGCTCCAGCTGGAGCTTTGGTCCCGTATTCTCGGCTATTTATCCCCAGCTGCGGGAGGCCCTTGTGACTCTGCTGCTGCAGTGTCTGGTTTCCCTGTGACCTGCAGGTACTGGGAGTTACATAGCTAAGATGCCAGGACACCCCGAAAGCCGGAAAACGAGACGCATTCTCACTATGTTGCCCAGGCTGGTCTTGAACTCCTTCCCTCAAGTGATTCTTCTGCCTAATCCTCCCAAAGTTCTTAGATTACAGGGACTACTGGCATTCAGTGATGTGGTCATAGAATTCTCTCCAGAGGAGTGGGCATGCCTGGACCCTGCCCAGCGAAATTTGTATAGGGATGTGATGTTCGAGAACTACAGAAACCTGGTCTCCC [...]
+chr4-04	EST_Human	nucleotide_match	338124	338230	97.000000	+	.	Target=BX485984.1 290 394 +;percentID=96.3;Gap=M95 D1 M2 D1 M8 
+chr4-04	EST_Human	nucleotide_match	289817	289933	95.000000	-	.	Target=DA692754.1 287 403 +;percentID=90.6;sequence=GATCTGGCGGGGCCTTTGTCTTGTGCTCCAGCTGGAGCTTTGGTCCCGTATTCTCGGCTATTTATCCCCAGCTGCGGGAGGCCCTGGTGACTCTGCTGCTGCAGTGTCTGGTTTCCCTGTGACCTGCAGGTACTGGGAGTTACATAGCTAAGATGCCAGGACACCCCGAAAGCCGGAAAACGAGACGCATTCTCACTATGTTGCCCAGGCTGGTCTTGAACTCCTTCCCTCAAGTGATTCTTCTGCCTAATCCTCCCAAAGTTCTTAGATTACAGGGACTACTGGCATTCAGTGATGTGGTCATAGAATTCTCTCCAGAGGAGTGGGCATGCCTGGACCCTGCCCAGCGAAATTTGTATAGGGATGTGATGTTCGAG [...]
+chr4-04	EST_Human	nucleotide_match	338124	338219	80.000000	+	.	Target=CN265977.1 253 348 +;percentID=91.7
+chr4-04	EST_Human	nucleotide_match	289817	289945	121.000000	+	.	Target=AI095103.1 326 454 +;percentID=96.9
+chr4-04	EST_Human	nucleotide_match	338142	338219	35.000000	+	.	Target=DA809929.1 370 444 +;percentID=74.7;Gap=M60 D1 M1 D2 M14 
+chr4-04	EST_Human	nucleotide_match	289818	289851	32.000000	+	.	Target=AA935244.1 77 110 +;percentID=97.1
+chr4-04	EST_Human	nucleotide_match	289818	289941	88.000000	-	.	Target=DA000562.1 133 256 +;percentID=85.5
+chr4-04	EST_Human	nucleotide_match	289818	289933	88.000000	+	.	Target=BX281319.1 391 506 +;percentID=87.9
+chr4-04	EST_Human	nucleotide_match	289818	289958	89.000000	-	.	Target=DB263540.1 248 389 +;percentID=81.7;Gap=M10 I1 M131 ;sequence=AGACCAGGAAGCGGATCCCGTGGAGTGAAGGTCGCACCGCGGCGTAGAGATGGGGTTTCTCCATGTTGGTCAGTATGGTCTCGAACTCCCGACATCAGGTGATCCGCCTGCCTCGGCCTCCCAAAGTGCTGGGATTACAGGTGTGAGCCACCGCACTCAGCCTCCCTGTTTTGAAGGATTGACTTCTAAAGACTTGGTACGTGAGGAAAAAACACGGAAGAGGAAGAGGAAAGCAAAGGAGTCAGGGATGGCTCTTCCTCAGGGTCTACTGACATTCAGGGATGTGGCCATAGAATTCTCTCAGGAGGAGTGGAAATGCCTGGACCCTGCTCAGAGGACTCTATACAGAGACGTGATGCT [...]
+chr4-04	EST_Human	nucleotide_match	338147	338219	41.000000	+	.	Target=DB170146.1 219 289 +;percentID=80;Gap=M4 D2 M67 
+chr4-04	EST_Human	nucleotide_match	289818	289938	89.000000	-	.	Target=DA259842.1 283 403 +;percentID=86.8
+chr4-04	EST_Human	nucleotide_match	338267	338364	35.000000	+	.	Target=DA237788.1 473 570 +;percentID=69.6;Gap=M1 I1 M17 D1 M79 ;sequence=ACATGCGCGCAAACCCGGAAGCGGATTATGTGGAGTGAAAGTTACACCGTGGCGGATTGACTTCTAAGGACTCTTGGTACATGAGGAAGAAACCCGGAAGGGGAAGAGGAAAGCAAAGGCGTCAGGAATGGTTCTTCCTCAGGGTCTATTGACATTCAGGGATGTGGCCATAGAATTCTCTCAGGAGGAGTGGAAATGCCTGGACCCTGCTCAGAGGACTCTATACAGAGACGTGATGTTGGAGAATTATAGGAACCTGGTCTCCCTGGGTGAGGATAACTTCCCTCCAAAAGTGGGGATGTTCCCTTGTGTATCTTTGCATTTTCTCTTGTTTCTCTTGGGAGTTGCATCCTTG [...]
+chr4-04	EST_Human	nucleotide_match	289818	289938	89.000000	-	.	Target=AA125955.1 99 219 +;percentID=86.8
+chr4-04	EST_Human	nucleotide_match	338124	338219	74.000000	+	.	Target=DA917260.1 293 388 +;percentID=88.5
+chr4-04	EST_Human	nucleotide_match	289818	289938	89.000000	-	.	Target=DA072857.1 275 395 +;percentID=86.8
+chr4-04	EST_Human	nucleotide_match	338277	338520	119.000000	+	.	Target=DB029777.1 328 576 +;percentID=75.3;Gap=M7 I1 M8 I2 M9 D1 M61 I1 M1 I1 M125 I1 M32 ;sequence=GGGGCTGGATGTGGAGGAGGATGACATTGAGAATCTCTTAGAGGTGGTTCATGAGGAATGGGTTAATGAGGAGTCATTGGAACTGATACAGGAACATGTAGCTGAAGAAGAGGGACACTTGACATTCAGGGACGTGGCCATAGAATTCTCTCAGGAGGAGTGGAAATGCCTGGACCCTGTGCAGAAGGCTTTATACAGGGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTAAGGATAATGCCCCTCCAGAAGTTGGGGTCTGCCCTTAGTATCTCTGCATTTTCCCTTGTGTGCCTCTTGGGAGCCCCTGCATTGCT [...]
+chr4-04	EST_Human	nucleotide_match	289818	289938	89.000000	-	.	Target=DA483132.1 275 395 +;percentID=86.8;sequence=AAACGGATCGCGTTGGGTGAAGGTGACGGCGTCGAGCGACCTCTCTGACCTCATCTCCTGCCTGTGTCCTCCTCGCTCCCTCTGCTCCAGCCAAGCATGCGTCCTTCCTGTTCCTGGGCCGAGCTTGCTCCTGCCTCAAGGCCTTCACGTGGGCTGTGCCTCTGCTGGAACTCGCTGGCCCCTCAGCTGCAGCATTGACTTCCAAAGACTCCTGGCACATGAGGAAGAAACCCAGAAGAGGAGAGCAAAGGAGTCAGGAATGGCTTTTACTCAGTTGACATTCAGGGACGTGGCCATCGAATTCTCTCAAGATGAGTGGAAATGCCTGAACTCTACACAGAGGACTTTATACAGGGATGTGATGTTGGAGAACTACA [...]
+chr4-04	EST_Human	nucleotide_match	338302	338561	106.000000	+	.	Target=AV742687.1 331 575 +;percentID=73.5;Gap=M8 D1 M3 I2 M53 I1 M25 D1 M28 D3 M3 D2 M10 D1 M9 D1 M1 D1 M9 I1 M2 D1 M16 D1 M31 D1 M2 D1 M1 D1 M7 D1 M4 D1 M6 D1 M6 D1 M17 
+chr4-04	EST_Human	nucleotide_match	289818	289946	89.000000	-	.	Target=BG708988.1 242 370 +;percentID=85.5;Gap=M4 I1 M3 D1 M79 I1 M2 D1 M39 
+chr4-04	EST_Human	nucleotide_match	289818	289938	89.000000	-	.	Target=BM153152.1 110 230 +;percentID=86.8
+chr4-04	EST_Human	nucleotide_match	289818	289946	89.000000	-	.	Target=DA321991.1 202 330 +;percentID=84.5;sequence=CTATATATGCAAACCCTTTGGGATGGCCACTAAATTTGTCACAGAGTATGGTAACAGTGGTTGACTGAACCACAGCCATGAAAGTGAGCTTCCAGCTCTTCTGCTGTTGCACCGCAGTCCACATTGCCAGCATTGATGGAACGGGCATCAGCCTCCATCTTCTCCTCAATGGACGTGATCACGTGGGCCAGCATTGCCTGGAGGGTCTATTGACATTCAGGGACGTGGCCATAGAATTCTCTCAGGAGGAGTGGAAATGCCTGGACCCTGCTCAGAGGACTCTTTACAGGGATGTGATGCTGGAGAATTATAGGAACCTGGTCTCCCTGGATTTTCGGTCTGTCACCCAGGCTAAAGTGCAGTGGTGTCACCTNGGC [...]
+chr4-04	EST_Human	nucleotide_match	338310	339034	694.000000	+	.	Target=BG400733.1 1 725 +;percentID=98.1;Gap=M416 I2 M148 I1 M66 D1 M57 D1 M5 D1 M30 
+chr4-04	EST_Human	nucleotide_match	289818	289941	90.000000	-	.	Target=DB479243.2 76 199 +;percentID=86.3
+chr4-04	EST_Human	nucleotide_match	289818	289941	90.000000	-	.	Target=DA081687.1 134 257 +;percentID=86.3
+chr4-04	EST_Human	nucleotide_match	289818	289941	90.000000	-	.	Target=BG576135.1 118 241 +;percentID=86.3
+chr4-04	EST_Human	nucleotide_match	289818	289958	91.000000	-	.	Target=BQ690668.1 423 564 +;percentID=82.4;Gap=M9 I1 M132 ;sequence=TCTCAACCTTTAGGCGCCTGAAGCGCAAACGTCGCGATCCCAGTCTCAGGGAGGCCGAGTTCTCTGCCTGGTGCTGGGATCTTGTGGACCCCACCGAAGGCGTCGTCGCACCCCACCTCCCGCCTCATGCTGGGCCTTGCTGCACCCCAAGTCTCCCCTTAGCAGTCACCACTTTCCTTGAGCCAGCGTTGGGGAGGTGCCAGGGGCCAGTCCTGTGACACGAGATGGGGTTTCTCCATGTTGGTCAGGATGGTCTCGAACTCCCGACATCAGGTGATCCGCCTGCCTCGGCCTCCCAAAGTGCTGGGATTACAGGTGTGAGCCACCGCACTCAGCCTCCCTGTTTTGAAGGATTGACTTC [...]
+chr4-04	EST_Human	nucleotide_match	337571	337697	127.000000	+	.	Target=BP231503.1 173 299 +;percentID=100
+chr4-04	EST_Human	nucleotide_match	289818	289948	91.000000	-	.	Target=DA039065.1 165 295 +;percentID=84.7
+chr4-04	EST_Human	nucleotide_match	289818	289948	91.000000	-	.	Target=DA644046.1 194 324 +;percentID=84.7
+chr4-04	EST_Human	nucleotide_match	289818	289948	91.000000	-	.	Target=BM462194.1 167 297 +;percentID=84.7
+chr4-04	EST_Human	nucleotide_match	289818	289945	96.000000	-	.	Target=DB152890.1 154 281 +;percentID=87.5
+chr4-04	EST_Human	nucleotide_match	289818	289945	96.000000	-	.	Target=DB244653.1 218 345 +;percentID=87.5
+chr4-04	EST_Human	nucleotide_match	289818	289944	111.000000	-	.	Target=BU179167.1 117 243 +;percentID=93.7
+chr4-04	EST_Human	nucleotide_match	289818	289944	111.000000	-	.	Target=DA571532.1 163 289 +;percentID=93.7
+chr4-04	EST_Human	nucleotide_match	289818	289945	112.000000	-	.	Target=EL736128.1 3 130 +;percentID=93.8
+chr4-04	EST_Human	nucleotide_match	289818	289946	113.000000	-	.	Target=CN265977.1 124 252 +;percentID=93.8
+chr4-04	EST_Human	nucleotide_match	289818	289945	116.000000	-	.	Target=AL545089.3 157 285 +;percentID=95.3;Gap=M106 I1 M22 
+chr4-04	EST_Human	nucleotide_match	289818	289945	116.000000	-	.	Target=DA888845.1 170 297 +;percentID=95.3
+chr4-04	EST_Human	nucleotide_match	289818	289945	116.000000	-	.	Target=DA703911.1 161 288 +;percentID=95.3
+chr4-04	EST_Human	nucleotide_match	289818	289945	118.000000	-	.	Target=BI560805.1 166 293 +;percentID=96.1
+chr4-04	EST_Human	nucleotide_match	289818	289945	118.000000	-	.	Target=CV024709.1 3 130 +;percentID=96.1
+chr4-04	EST_Human	nucleotide_match	289818	289945	118.000000	-	.	Target=DR002880.1 170 297 +;percentID=96.1;sequence=CACGAGGCTGGCTCCTGCGAGGGCTTGGTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGGAACTCGTAACATTCAGGGATGTGGCCATAGAATTCTCCCCTGAAGAGTGGAAATGTCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTTTTGTGATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAATAAAAGAGCCCTGCAATTTGAAGATACATGAGAC [...]
+chr4-04	EST_Human	nucleotide_match	289818	289945	118.000000	-	.	Target=AI525680.1 152 279 +;percentID=96.1
+chr4-04	EST_Human	nucleotide_match	289818	289945	118.000000	-	.	Target=DA118777.1 170 297 +;percentID=96.1;sequence=CTTGGCCTGTTGCTTCAGCCTGAGCTCGGTTAGGGCCTCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCGTAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAGAAG [...]
+chr4-04	EST_Human	nucleotide_match	289818	289945	118.000000	-	.	Target=CD689816.1 172 299 +;percentID=96.1
+chr4-04	EST_Human	nucleotide_match	289818	289945	118.000000	-	.	Target=DB203397.1 127 254 +;percentID=96.1
+chr4-04	EST_Human	nucleotide_match	289818	289945	118.000000	-	.	Target=DB201918.1 173 300 +;percentID=96.1
+chr4-04	EST_Human	nucleotide_match	289818	289945	118.000000	-	.	Target=DB111318.1 169 296 +;percentID=96.1
+chr4-04	EST_Human	nucleotide_match	289818	289945	118.000000	-	.	Target=DA685292.1 136 263 +;percentID=96.1
+chr4-04	EST_Human	nucleotide_match	289818	289945	118.000000	-	.	Target=DA917260.1 165 292 +;percentID=96.1
+chr4-04	EST_Human	nucleotide_match	289818	289945	118.000000	-	.	Target=DB187202.1 163 290 +;percentID=96.1
+chr4-04	EST_Human	nucleotide_match	289818	289945	118.000000	-	.	Target=DA422914.1 165 292 +;percentID=96.1
+chr4-04	EST_Human	nucleotide_match	289818	289945	118.000000	-	.	Target=DB056944.1 173 300 +;percentID=96.1
+chr4-04	EST_Human	nucleotide_match	289818	289945	118.000000	-	.	Target=BI561969.1 176 303 +;percentID=96.1
+chr4-04	EST_Human	nucleotide_match	289818	289945	118.000000	-	.	Target=BU854428.1 182 309 +;percentID=96.1
+chr4-04	EST_Human	nucleotide_match	289818	289944	119.000000	-	.	Target=BQ069369.1 162 288 +;percentID=96.9
+chr4-04	EST_Human	nucleotide_match	289818	289944	119.000000	-	.	Target=CN399123.1 110 236 +;percentID=96.9
+chr4-04	EST_Human	nucleotide_match	289818	289944	119.000000	-	.	Target=DB095116.1 150 276 +;percentID=96.9;sequence=GAGCTCGGTTAGGGCCTCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAGAAGATATGAGAAATGTGGGCATGA [...]
+chr4-04	EST_Human	nucleotide_match	289818	289944	119.000000	-	.	Target=BP248393.1 166 292 +;percentID=96.9
+chr4-04	EST_Human	nucleotide_match	289818	289945	120.000000	-	.	Target=CD652116.1 121 248 +;percentID=96.9
+chr4-04	EST_Human	nucleotide_match	289818	289945	120.000000	-	.	Target=DA806351.1 110 237 +;percentID=96.9
+chr4-04	EST_Human	nucleotide_match	289818	289945	120.000000	-	.	Target=DA766426.1 132 259 +;percentID=96.9;sequence=ACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCAGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAGAAGATATGAGAAATGTGGGCATGATAATTTACAATTAAGGA [...]
+chr4-04	EST_Human	nucleotide_match	289818	289945	120.000000	-	.	Target=DB229909.1 162 289 +;percentID=96.9
+chr4-04	EST_Human	nucleotide_match	289818	289945	120.000000	-	.	Target=DA399659.1 134 261 +;percentID=96.9;sequence=CTCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAGAAGATATGAGAAATGTGGGCATGATAATTTACAATTAAG [...]
+chr4-04	EST_Human	nucleotide_match	289818	289945	120.000000	-	.	Target=DA758630.1 176 303 +;percentID=96.9;sequence=GGCGGCCTTGGCCTGTTGCTTCAGCCTGAGCTCGGTTAGGGCCTCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACT [...]
+chr4-04	EST_Human	nucleotide_match	289818	289945	120.000000	-	.	Target=DA799229.1 162 289 +;percentID=96.9;sequence=GTTGCTTCAGCCTGAGCTCGGTTAGGGCCTCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAGAAGATATGAGA [...]
+chr4-04	EST_Human	nucleotide_match	289818	289945	120.000000	-	.	Target=DA787611.1 165 292 +;percentID=96.9;sequence=CTGTTGCTTCAGCCTGAGCTCGGTTAGGGCCTCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAGAAGATATG [...]
+chr4-04	EST_Human	nucleotide_match	289818	289945	120.000000	-	.	Target=DB158549.1 164 291 +;percentID=96.9;sequence=CTGTTGCTTCAGCCTGAGCTCGGTTAGGGCCTCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAGAAGATATGA [...]
+chr4-04	EST_Human	nucleotide_match	289818	289945	120.000000	-	.	Target=DA741721.1 162 289 +;percentID=96.9;sequence=GTTGCTTCAGCCTGAGCTCGGTTAGGGCCTCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAGAAGATATGAGA [...]
+chr4-04	EST_Human	nucleotide_match	289818	289945	120.000000	-	.	Target=DB231938.1 164 291 +;percentID=96.9;sequence=CTGTTGCTTCAGCCTGAGCTCGGTTAGGGCCCCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAGAAGATATGA [...]
+chr4-04	EST_Human	nucleotide_match	289818	289945	120.000000	-	.	Target=DR423054.1 180 307 +;percentID=96.9;sequence=CTTCGGCGGCCTTGGCCTGTTGCTTCAGCCTGAGCTCGGTTAGGGCCTCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGTATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTA [...]
+chr4-04	EST_Human	nucleotide_match	289818	289945	120.000000	-	.	Target=DA246722.1 182 309 +;percentID=96.9;sequence=ATCTTCGGCGGCCTTGGCCTGTTGCTTCAGCCTGAGCTCGGTTAGGGCCTCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCATTCCACAAACT [...]
+chr4-04	EST_Human	nucleotide_match	289818	289945	120.000000	-	.	Target=BP273260.1 162 289 +;percentID=96.9;sequence=GTTGCTTCAGCCTGAGCTCGGTTAGGGCCTCACTTTCCTGCTTCCTTACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAGAAGATATGAGA [...]
+chr4-04	EST_Human	nucleotide_match	289818	289945	120.000000	-	.	Target=BP420960.1 163 290 +;percentID=96.9;sequence=CGTCTATTCAGCCTGAGCTCGGTTAGGGCCTCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAGAAGATATGAG [...]
+chr4-04	EST_Human	nucleotide_match	289818	289945	120.000000	-	.	Target=DA240008.1 164 291 +;percentID=96.9;sequence=CTGTTGCTTCAGCCTGAGCTCGGTTAGGGCCTCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGNGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAGAAGATATGA [...]
+chr4-04	EST_Human	nucleotide_match	289818	289945	120.000000	-	.	Target=DC411795.1 162 289 +;percentID=96.9;sequence=GTTGCTTCAGCCTGAGCTCGGTTAGGGCCTCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAGAAGATATGAGA [...]
+chr4-04	EST_Human	nucleotide_match	289818	289945	120.000000	-	.	Target=DC411178.1 162 289 +;percentID=96.9;sequence=GTTGCTTCAGCCTGAGCTCGGTTAGGGCCTCACTTCCCTGCTTCCACACCTCAGGGAGGCCTCGGTGATTTTGCCAGAGCCTCAGCCTCCATCGCTCTGTAACCTGCGGGTATTGGATGATTCGTAGCTAAGACTTCGCGACACCCTTGAAGCTGAGAAATGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAGAAGATATGAGA [...]
+chr4-04	EST_Human	nucleotide_match	289818	289944	121.000000	-	.	Target=CD654571.1 149 275 +;percentID=97.6
+chr4-04	EST_Human	nucleotide_match	289818	289946	121.000000	-	.	Target=DA309597.1 98 226 +;percentID=96.9
+chr4-04	EST_Human	nucleotide_match	289818	289946	121.000000	-	.	Target=DA335223.1 121 249 +;percentID=96.9
+chr4-04	EST_Human	nucleotide_match	289818	289946	121.000000	-	.	Target=DA324408.1 74 202 +;percentID=96.9;sequence=GAACAGCGGGCGGTGTTCCCGGCTCCGTGGGGCCGTCTTCCCGGCGAGTCCGCGACGGTCGCCGCCCACGGCGAGGAACCCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTAGCTATGTGTTCTCATTTCACCCAAGACTTTTTGCCAGTGCAGGGGATAGAAGATTCATTCCACAAACTTATACTGAGAAGATATGA
+chr4-04	EST_Human	nucleotide_match	289818	289944	123.000000	-	.	Target=BM906511.1 171 297 +;percentID=98.4;sequence=GTCCGGATTTCGGGATCCAGACCGCGGGTTAGGGGCTTCATCTCTCTGCGTCCTCAGTTCTGGGAGGCCTTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTGGTAGCTAAGACTCCCGAATACTTCAGAAGTGGGGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGACCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGGTCTCCCTGGGTGTTGCTATCTCTAACCCAGACCTGGTCACCTGTCTGGAGCAAAGAAAAGAGCCCTACAATGTGAAGATACATAAGAT [...]
+chr4-04	EST_Human	nucleotide_match	289818	289944	123.000000	-	.	Target=BM800016.1 160 286 +;percentID=98.4
+chr4-04	EST_Human	nucleotide_match	289818	289944	123.000000	-	.	Target=CD701489.1 216 342 +;percentID=98.4
+chr4-04	EST_Human	nucleotide_match	289818	289944	123.000000	-	.	Target=DA460146.1 210 336 +;percentID=98.4
+chr4-04	EST_Human	nucleotide_match	289818	289944	123.000000	-	.	Target=DB074733.1 175 301 +;percentID=98.4
+chr4-04	EST_Human	nucleotide_match	289818	289944	123.000000	-	.	Target=BP200889.1 175 301 +;percentID=98.4
+chr4-04	EST_Human	nucleotide_match	289818	289944	123.000000	-	.	Target=DA803616.1 175 301 +;percentID=98.4
+chr4-04	EST_Human	nucleotide_match	289818	289944	123.000000	-	.	Target=DA224929.1 173 299 +;percentID=98.4
+chr4-04	EST_Human	nucleotide_match	289818	289944	123.000000	-	.	Target=DB135798.1 176 302 +;percentID=98.4
+chr4-04	EST_Human	nucleotide_match	289818	289944	123.000000	-	.	Target=DB136011.1 172 298 +;percentID=98.4
+chr4-04	EST_Human	nucleotide_match	289818	289944	123.000000	-	.	Target=DA418713.1 175 301 +;percentID=98.4
+chr4-04	EST_Human	nucleotide_match	289818	289944	123.000000	-	.	Target=DA564196.1 175 301 +;percentID=98.4
+chr4-04	EST_Human	nucleotide_match	289818	289944	123.000000	-	.	Target=DA801371.1 175 301 +;percentID=98.4
+chr4-04	EST_Human	nucleotide_match	289818	289944	123.000000	-	.	Target=BU177765.1 158 284 +;percentID=98.4
+chr4-04	EST_Human	nucleotide_match	289818	289944	123.000000	-	.	Target=BX485984.1 163 289 +;percentID=98.4
+chr4-04	EST_Human	nucleotide_match	289818	289944	123.000000	-	.	Target=DA002438.1 153 279 +;percentID=98.4
+chr4-04	EST_Human	nucleotide_match	289818	289944	123.000000	-	.	Target=BP231503.1 173 299 +;percentID=98.4
+chr4-04	EST_Human	nucleotide_match	289818	289944	123.000000	-	.	Target=DA757889.1 173 299 +;percentID=98.4
+chr4-04	EST_Human	nucleotide_match	289818	289944	123.000000	-	.	Target=DA385292.1 182 308 +;percentID=98.4
+chr4-04	EST_Human	nucleotide_match	289818	289944	127.000000	-	.	Target=CN273339.1 168 294 +;percentID=100;sequence=GCCTTTTGCGCCAGCGTGAGCTCGGTTAGGGTCTCCACGGCCGTGCTTTCACCCCTCAGGGAGGCGTCGGTGATTCGGTCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTCGTAGCTGAGACTCCGCTACACCCCTGAAGTGGGGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGATCTCCCTGGGTGTTGCTATCTCTAACCCAGACCTGGTCATCTATCTGGAGCAAAGAAAGGAGCCCTACAAGTGAAGATACATGAGACAGTAG [...]
+chr4-04	EST_Human	nucleotide_match	289818	289944	127.000000	-	.	Target=CX788870.1 166 292 +;percentID=100;sequence=CGGGATCGCCAGCGTGAGCTCGGTTAGGGTCTCCACGGCCGTGCTTTCACCCCTCAGGGAGGCGTCGGTGATTCGGTCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTCGTAGCTGAGACTCCGCTACACCCCTGAAGTGGGGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGCCCAGCAGAATTTGTATAGAGATGTGATGTTGGAGAACTACAGGAACCTGATCTCCCTGGGTGTTGCTATCTCTAACCCAGACCTGGTCATCTATCTGGAGCAAAGAAAGGAGCCCTACAAAGTGAAGATACATGAGACAGTAGC [...]
+chr4-04	EST_Human	nucleotide_match	289818	289945	128.000000	-	.	Target=DC397567.1 14 141 +;percentID=100
+chr4-04	EST_Human	nucleotide_match	289818	289976	145.000000	-	.	Target=DB221880.1 174 332 +;percentID=95.6
+chr4-04	EST_Human	nucleotide_match	289819	289938	86.000000	-	.	Target=DA281897.1 128 247 +;percentID=86
+chr4-04	EST_Human	nucleotide_match	289819	289938	86.000000	-	.	Target=CK001884.1 135 254 +;percentID=86
+chr4-04	EST_Human	nucleotide_match	289819	289945	111.000000	-	.	Target=CD385642.1 186 312 +;percentID=93.8
+chr4-04	EST_Human	nucleotide_match	289859	289944	74.000000	-	.	Target=DA817816.1 175 260 +;percentID=93;sequence=GTCTTTGCGTCTGGCTACTACCAGACCGCGGGTTAGGGGCTTCATCTCTCTGCGTCCTCAGTTCTGGGAGGCATTGGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTGGTATCTAAGACTCCCGAATACTTCAGAAGTGGGGAAATGGAACTCTTAACATTCAGGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGCCTGGACCCTGACCAGCAGCACATCAATAGTCTAACATACTCACCTTTTGGAGACTCTCCTCTCTTCCGGAATCCGATGTCAGACCCTAAGAAGAAGGAAGAGAGATTGAAACCAACAAATCCAGCAGCCCAGAAGGCTCTTACTACAC [...]
+chr4-04	EST_Human	nucleotide_match	299097	299266	92.000000	-	.	Target=DA799182.1 4 174 +;percentID=77.2;Gap=M28 I1 M142 
+chr4-04	EST_Human	nucleotide_match	289889	289945	49.000000	-	.	Target=DB170146.1 171 227 +;percentID=93
+chr4-04	EST_Human	nucleotide_match	289965	290299	201.000000	+	.	Target=AA521317.1 244 562 +;percentID=82.4;Gap=M51 D1 M1 D1 M1 D2 M1 D3 M6 D2 M1 D1 M1 D1 M106 D1 M60 D1 M73 D1 M1 D1 M3 D1 M14 
+chr4-04	EST_Human	nucleotide_match	290290	290776	330.000000	-	.	Target=DA016989.1 13 499 +;percentID=84.8;Gap=M65 D1 M50 D4 M2 D1 M25 I1 M25 I2 M127 I2 M1 I2 M163 D1 M3 D1 M11 I1 M7 ;sequence=TTAATGCAGATGCACATGTTGTTTTTCAGATACAGACTTACTCAGACATTGCCACCGTCTCCAACTTCTGTAACCTTATAGGGTCTGCAGAGAATGCCATGTTTGAAGATGATGATTGGTGGTCTTGGGATGAAAAGTATTTGTGTTGTGATAACNGGTGTTGGGGTAAGGGACTCTGTGTGCTGTGTCTGCTTTCTCTAACTGAGTGGTACTATAATGGGTCTAGAGGGAGGAGCGTCAGCATTAACAGGAGACTTGCTGTAAAAAGCTAATTCATGGACCCTTTTCAAACCTGCAGAA [...]
+chr4-04	EST_Human	nucleotide_match	290612	290935	60.000000	-	.	Target=BM800078.1 85 417 +;percentID=62.6;Gap=M32 D1 M73 D1 M41 I1 M5 D1 M19 I1 M4 I1 M6 I1 M4 I1 M6 I1 M4 D2 M15 I1 M2 I1 M5 I1 M3 I1 M4 I1 M6 I1 M3 D1 M4 D1 M15 I1 M12 I1 M5 I1 M1 I1 M4 I1 M21 D1 M22 
+chr4-04	EST_Human	nucleotide_match	290652	290772	91.000000	-	.	Target=AW851594.1 16 136 +;percentID=87.6;sequence=TAATGCATGTGGATGTGCTGTTTTTCAAATGCAGACTTACTCAGACATTGCCACCATCTCCAGCCTCTGTAACCTTTAAAGGGCTTGCAGATAATGCCACGTTTCAGGATGTTGATTGCTGGTCTTGTCTTCGGAT
+chr4-04	EST_Human	nucleotide_match	290687	290890	51.000000	-	.	Target=BQ690668.1 222 422 +;percentID=64.9;Gap=M50 I1 M1 I1 M61 D1 M6 D1 M1 D1 M6 D1 M12 D1 M4 I1 M7 I1 M26 D1 M3 D1 M20 
+chr4-04	EST_Human	nucleotide_match	290687	290893	52.000000	-	.	Target=DB263540.1 44 247 +;percentID=64.9;Gap=M53 I1 M1 I1 M61 D1 M6 D1 M1 D1 M6 D1 M12 D1 M4 I1 M7 I1 M26 D1 M3 D1 M20 
+chr4-04	EST_Human	nucleotide_match	290721	290948	105.000000	+	.	Target=DB048715.1 25 253 +;percentID=74.1;Gap=M4 D1 M4 I1 M19 D1 M7 D1 M70 I1 M13 I1 M62 I1 M46 ;sequence=AAAAACAGCTTTAACCTGGATGTGGAGGAGGATGACATTGAGAATCTCTTAGAGGATTGACTTCTAAAGAGTCATGTTGGCCGGGCGCGGGGGCTCATACCTGTAATCCCGGCACTTTGGGAGGCCGAGACTGGGCAGATCACTGAGGTCAGGAGATCAAGACCATCCTGGCTAACACGGTGAAACCCCGTCTCTACTACGAATACAAAAAATTACCTGGGCGTGTTGGCGGGCACCTGTGGTCCCAGCTGCTCAGGAGGCTGAGGCAGGAGAATGGTGTGAACCCGGGAGGCGGAGCTTGCAGTGAGCTGAGATCGGGCCA [...]
+chr4-04	EST_Human	nucleotide_match	298685	298993	211.000000	+	.	Target=AV693207.1 33 336 +;percentID=85.2;Gap=M18 D1 M75 D1 M41 I1 M4 D1 M38 D1 M3 D2 M124 ;sequence=GTGATTTGCTTCGCTTCCTCACACACCTCACAGCTTTCCCATTAATAAGTCCTGTTTGCTCACATGAACTCCATGTTTTGATGGGGCCTCAATCTCATTCTGAACAGGGTAAAGTAGGGACGGGATTCCGGACCACAGCTCCTCCCACGCCGGCACCGCGCAGGCCGCCGCGGTGTCTTCCGGATGAGCTCCTACTCACTCCACAGCCCGGGGGTGCAGGGCTACCGGCGCAGAGCTGCACAAGGAGGGCTGCAGGCTGGGCCAGAGCCGCTGTACGGGGACTGACAAGAGCGCGGGTCCCTCACCGGAGGGGACTGAGGACAGAGG [...]
+chr4-04	EST_Human	nucleotide_match	290723	290948	106.000000	+	.	Target=DA588900.1 1 227 +;percentID=75;Gap=M3 I1 M5 I2 M6 D1 M3 I1 M2 D1 M8 D1 M1 D1 M2 D1 M116 I1 M29 I1 M46 
+chr4-04	EST_Human	nucleotide_match	298685	298993	211.000000	+	.	Target=AV694308.1 33 336 +;percentID=85.2;Gap=M18 D1 M75 D1 M41 I1 M4 D1 M38 D1 M3 D2 M124 ;sequence=GTGATTTGCTTCGCTTCCTCACACACCTCACAGCTTTCCCATTAATAAGTCCTGTTTGCTCACATGAACTCCATGTTTTGATGGGGCCTCAATCTCATTCTGAACAGGGTAAAGTAGGGACGGGATTCCGGACCACAGCTCCTCCCACGCCGGCACCGCGCAGGCCGCCGCGGTGTCTTCCGGATGAGCTCCTACTCACTCCACAGCCCGGGGGTGCAGGGCTACCGGCGCAGAGCTGCACAAGGAGGGCTGCAGGCTGGGCCAGAGCCGCTGTACGGGGACTGACAAGAGCGCGGGTCCCTCACCGGAGGGGACTGAGGACAGAGG [...]
+chr4-04	EST_Human	nucleotide_match	290723	290948	109.000000	+	.	Target=DA787952.1 11 236 +;percentID=75.8;Gap=M3 I1 M5 I2 M6 D1 M3 I1 M2 D1 M8 D1 M2 D1 M1 D1 M145 I1 M46 
+chr4-04	EST_Human	nucleotide_match	298708	299302	404.000000	-	.	Target=DA386535.1 2 585 +;percentID=85.1;Gap=M81 D1 M134 I1 M63 D1 M18 D1 M3 D1 M1 D1 M2 D6 M164 D1 M4 I1 M41 D1 M71 ;sequence=AGAGAGGAGGGTGCGGCATCCGGGATCTGGCGCGGCTTTTGCTTGTAGCTCCAGCCAGAGCTCGGTTAGGGCCTCATCGCTCTGCTCCCGCTCCTTAGGGAAGCCTCGGTGATTCTGCCACAGCCTCAGCCTCTGTGGCTCTGTGACCTGCCGGTATTGGATGATTCGTATCTAAGACTCTGGGACACTCCTGAAGTCGGGAAATGGTGAGTGTGCAGGGCAGGGCGTCCCAAGGCTGTGGAGGCCTCATCGGAACCGGCGGGAAATGGCGGCGGTGGGAGGAGTCTGTGAATGGAGTTCC [...]
+chr4-04	EST_Human	nucleotide_match	290758	290933	95.000000	-	.	Target=CF123528.1 462 637 +;percentID=78.2;Gap=M57 I1 M36 I2 M43 D2 M17 D1 M20 ;sequence=CACGNAGGAAGCAGTGGTAACAACGCAAAGTACGCGGGGGAGGATTCACTTCCAAAGAGACATATTATGCAAGGAAGCAACTTGGAAGAGGGAAGAAAAGAAGTCAGGAATGGCCCTTACTCAGGGACCCTTGAAATTCATGGATGTGGCCATAGAGTTCTCTCAGGAAGAGTGGAAATGCCTGGACCCTGCGCAGAGGACTTTATACAGGGACGTGATGTTGGAGAATTATAGGAACCTGGTCTCCCTGGGAATCTGTCTTCCTGACCTGAGTGTTACCTCCATGTTAGAGCAAAAGAGAGATCCCTGGACTCTGCAGAGTGAAGAGAAAATAGCAAAC [...]
+chr4-04	EST_Human	nucleotide_match	298741	299319	383.000000	-	.	Target=DA152889.1 2 568 +;percentID=84.3;Gap=M17 D1 M80 D1 M134 I1 M63 D1 M18 D1 M3 D1 M1 D1 M2 D6 M164 D1 M4 I1 M41 D1 M38 ;sequence=GAATGAGGCGCGCAGCAGAGAGGAGGGTGCGGCATCCGGGAGCTGGCGCGGCTTTTGCTTGTAGCTCCAGCCAGAGCTCGGTTAGGGCCTCATCGCTCTGCTCCCGCTCCTTAGGGAAGCCTCGGTGATTCTGCCACAGCCTCAGCCTCTGTGGCTCTGTGACCTGCCGGTATTGGATGATTCGTATCTAAGACTCTGGGACACTCCTGAAGTCGGGAAATGGTGAGTGTGCAGGGCAGGGCGTCCCAAGGCTGTGGAGGCCTCATCGGAACCGGCGGGAAATGGCGGCGGTGG [...]
+chr4-04	EST_Human	nucleotide_match	290784	290890	28.000000	-	.	Target=DA102026.1 212 316 +;percentID=66.7;Gap=M5 D1 M5 I1 M39 I2 M43 D3 M2 D1 M8 
+chr4-04	EST_Human	nucleotide_match	290784	290890	28.000000	-	.	Target=DA703641.1 160 264 +;percentID=66.7;Gap=M5 D1 M5 I1 M39 I2 M43 D3 M2 D1 M8 
+chr4-04	EST_Human	nucleotide_match	290784	290890	28.000000	-	.	Target=DA692754.1 182 286 +;percentID=66.7;Gap=M5 D1 M5 I1 M39 I2 M43 D3 M2 D1 M8 
+chr4-04	EST_Human	nucleotide_match	291353	291599	170.000000	+	.	Target=AW197712.1 4 251 +;percentID=85.3;Gap=M11 I1 M3 I2 M13 I1 M8 D1 M1 D1 M5 D1 M203 ;sequence=TTTTGCAATTCAGAGGAATTTTTTATTTTTGTGTTTGTAGTTATTATGAGACTTGTGAAAAAAACCACTGAAACTGCAGAGATGGGGAACAGGTTGCTGGATAGGATGTCTCTAGAAACACTGACTTTAATTTTATAAAAAAGAATTTAAGGCACAAAAGTATATTGCTTTTCCTCATTTATCTGCTTTTGGGTATCAGGAAATTGTGAGCACCAGCTCTGGAGAGGCAGTAGGGGTAGCCACCCCAAACT
+chr4-04	EST_Human	nucleotide_match	298685	298993	210.000000	+	.	Target=AV695420.2 33 336 +;percentID=84.8;Gap=M18 D1 M75 D1 M41 I1 M4 D1 M38 D1 M3 D2 M124 ;sequence=GTGATTTGCTTCGCTTCCTCACACACCTCACAGCTTTCCCATTAATAAGTCCTGTTTGCTCACATGAACTCCATGTTTTGATGGGGCCTCAATCTCATTCTGAACAGGGTAAAGTAGGGACGGGATTCCGGACCACAGCTCCTCCCACGCCGGCACCGCGCAGGCCGCCGCGGTGTCTTCCGGATGAGCTCCTACTCACTCCACAGCCCGGGGGTGCAGGGCTACCGGCGCAGAGCTGCACAAGGAGGGCTGCAGGCTGGGCCAGAGCCGCTGTACGGNGACTGACAAGAGCGCGGGTCCCTCACCGGAGGGGACTGAGGACAGAGG [...]
+chr4-04	EST_Human	nucleotide_match	291358	291810	327.000000	+	.	Target=AI335588.1 3 457 +;percentID=86.7;Gap=M6 I1 M3 I2 M13 I1 M8 D1 M1 D1 M5 D1 M224 I2 M170 D1 M19 ;sequence=TTTTCAGAGGAATTTTTTATTTTTGTGTTTGTAGTTATTATGAGACTTGTGAAAAAAACCACTGAAACTGCAGAGATGGGGAACAGGTTGCTGGATAGGATGTCTCTAGAAACACTGACTTTAATTTTATAAAAAAGAATTTAAGGCACAAAAGTATATTGCTTTTCCTCATTTATCTGCTTTTGGGTATCAGGAAATTGTGAGCACCAGCTCTGGAGAGGCAGTAGGGGTAGCCACCCCAAACTCTGATCTCCTCTAAGCAGTTCTGTGAGAGATTTCAGTGTGGGGTAAGACCTGGACAAGGTTCAGCAGAGGG [...]
+chr4-04	EST_Human	nucleotide_match	291358	291841	334.000000	+	.	Target=AI379940.1 3 485 +;percentID=85.3;Gap=M6 I1 M3 I2 M13 I1 M8 D1 M1 D1 M5 D1 M224 I2 M170 D1 M25 D1 M1 D1 M4 D1 M3 D1 M6 I1 M7 ;sequence=TTTTCAGAGGAATTTTTTATTTTTGTGTTTGTAGTTATTATGAGACTTGTGAAAAAAACCACTGAAACTGCAGAGATGGGGAACAGGTTGCTGGATAGGATGTCTCTAGAAACACTGACTTTAATTTTATAAAAAAGAATTTAAGGCACAAAAGTATATTGCTTTTCCTCATTTATCTGCTTTTGGGTATCAGGAAATTGTGAGCACCAGCTCTGGAGAGGCAGTAGGGGTAGCCACCCCAAACTCTGATCTCCTCTAAGCAGTTCTGTGAGAGATTTCAGTGTGG [...]
+chr4-04	EST_Human	nucleotide_match	291368	291786	290.000000	+	.	Target=T78596.1 7 433 +;percentID=84.2;Gap=M12 I1 M8 D1 M1 D1 M5 D1 M224 I2 M16 I1 M12 I1 M21 I1 M6 I1 M6 I1 M16 I1 M11 I1 M23 I1 M55 ;sequence=TTTTTTTTTTTTTTTGTGTTTGTAGTTATTATGAGACTTNTGAAAAAAACCACTGAAACTGCAGAGATGGGGAACAGGTTGCTGGANAGGATNTCTCTAGAAACACTGACTTTAATTTTATAAAAAAGANTTTAAGGCACAAAAGTATATTGCTTTTCCNCATTTATCTGCTTTTGGGNATCAGGAAATTGTGAGCACCAGCTCTGGAGAGGCAGTAGGGGTAGCCACCCCAAACTCTGATCTCCTCTAAGCAGTTCTGTGAGAGATTTCAGTGTGGGGGTAAG [...]
+chr4-04	EST_Human	nucleotide_match	291406	292079	477.000000	-	.	Target=BX111612.1 1 693 +;percentID=86.1;Gap=M21 D1 M35 D1 M67 D1 M3 I1 M21 I3 M5 I1 M3 I4 M5 I1 M1 I4 M78 I3 M12 I3 M6 I1 M28 D1 M170 I2 M215 ;sequence=CATGAATAAATGATTGAATTNGCATCGTGTGTTCAGTACAAAGACAGAAACTGTATGGAGACTTAAGCTTAATTTGTGTTACTTCCCTTTTATTGTTTTGTGAGTTTTAATGCCACCATCTGATCAGCTGTTCATTGACAGAAGAGAAATTGTTGTTATTATTTGTGTTGTTTTTACCTTGCTAAGAATAAATAATTAGCTTCTAATATAATTGGTCTAGAAAAACATAAGGGTTTTGGTTAAATTCCTTGTTATTGTGTGTTATAATGTTATAA [...]
+chr4-04	EST_Human	nucleotide_match	292064	292390	224.000000	-	.	Target=AA496479.1 190 516 +;percentID=86;Gap=M7 I1 M3 I2 M45 D2 M1 D1 M65 I1 M1 I1 M1 I2 M53 D5 M13 I1 M1 I1 M51 D1 M77 ;sequence=ACTGTGTTATGGGAGTAGAGTACTTTTGTCCTTCATCTTACCTCAGAGTTAGCTGATCAGGGACAGGGGATATCACATCTGGAGCCAAGATGTGCAGGACCACCAGGACAGCGCCATTTTCTGTTTGCACCACACAAAGTCAGCCTGAGTGTCTCCTCCGTGGATCACTATGAGGGCATCATTACTCAGCATCTTTGAGTAATGAGACATTTGAGGATGTCATGTGCAGACTGGGGTCAGTCTGACAAGGTCTAATTCTGCTCCCATTTCAGAGGAAGATAAGTGACTCATGCAGGGT [...]
+chr4-04	EST_Human	nucleotide_match	338124	338219	96.000000	+	.	Target=AL700660.1 303 398 +;percentID=100
+chr4-04	EST_Human	nucleotide_match	292413	292594	110.000000	-	.	Target=AA496479.1 7 189 +;percentID=80.3;Gap=M180 I1 M2 
+chr4-04	EST_Human	nucleotide_match	298203	298747	413.000000	+	.	Target=DC338413.1 1 560 +;percentID=88.7;Gap=M90 I1 M8 I1 M19 I1 M1 I1 M35 D3 M13 I1 M155 I7 M1 I3 M3 I1 M1 I4 M147 D1 M23 D1 M44 ;sequence=AGACTCGGCCATGTCTTTCTTCTGACAGAAAACTTGCGGAGTTTCCTCAACACCAGTCAATGCTCCAACCCCAACGGGGTGTCCAGCAACGTCACTAACTGACACCACCCAGAGTCAGCTGCNTGACCCCACAAGCTCAGCACTCTTCCCGCAGCTGCTCTCCTGCAGACTGCCAGTCCCTGCCTCTGGACACCCGTCTTCATTTCTGAACCCCTGCCTACAAACCAGGGACGCCCACACCCTCCTCAAGTTCAATAATGTGGCAGAACTACTCACAGAACTAAGAGA [...]
+chr4-04	EST_Human	nucleotide_match	338320	338543	124.000000	-	.	Target=BM800078.1 3 224 +;percentID=78.6;Gap=M114 D1 M72 D1 M36 
+chr4-04	EST_Human	nucleotide_match	298203	298758	433.000000	+	.	Target=DC413588.1 1 566 +;percentID=89.7;Gap=M153 D3 M168 I7 M1 I3 M3 I1 M1 I4 M147 D1 M23 D1 M55 ;sequence=AGACTCGGCCATGTCTTTCTTCTGACAGAAAACTTGCGGAGTTTCCTCAACACCAGTCAATGCTCCAACCCCAACGGGGTGTCCAGCAACTCACTAACGACACCACCCAGAGTCAGCGCTGACCCCACAAGCTCAGCACTCTTCCCGCAGCTGCTCTCCTGCAGACGCCAGTCCCTGCCTCTGGACACCCGTCTTCATTTCTGAACCCCTGCCTACAAACCAGGGACGCCCACACCCTCCTCAAGTTCAATAATGTGGCAGAACTACTCACAGAACTAAGAGAAGCGCTGTGCGCACCGACACCAGCGTATTCTAAAAGA [...]
+chr4-04	EST_Human	nucleotide_match	299097	299205	81.000000	-	.	Target=CN399123.1 1 109 +;percentID=87.2
+chr4-04	EST_Human	nucleotide_match	298213	298728	403.000000	+	.	Target=DC393066.1 1 526 +;percentID=89.8;Gap=M143 D3 M168 I7 M1 I3 M3 I1 M1 I4 M147 D1 M23 D1 M25 
+chr4-04	EST_Human	nucleotide_match	299097	299220	86.000000	-	.	Target=CD654571.1 25 148 +;percentID=84.7
+chr4-04	EST_Human	nucleotide_match	298229	298794	434.000000	+	.	Target=DC396648.1 1 575 +;percentID=89.2;Gap=M127 D3 M168 I7 M1 I3 M3 I1 M1 I4 M147 D1 M23 D1 M75 D1 M15 ;sequence=AGAAAACTTGCGGAGTTTCCTCAACACCAGTCAATGCTCCAACCCCAACGGGGTGTCCAGCAACTCACTAACGACACCACCCAGAGTCAGCGCTGACCCCACAAGCTCAGCACTCTTCCCGCAGCTGCTCTCCTGCAGACGCCAGTCCCTGCCTCTGGACACCCGTCTTCATTTCTGAACCCCTGCCTACAAACCAGGGACGCCCACACCCTCCTCAAGTTCAATAATGTGGCAGAACTACTCACAGAACTAAGAGAAGCGCTGTGCGCACCGACACCAGCGTATTCTAAAAGATGCGAACAGACACCAGCGT [...]
+chr4-04	EST_Human	nucleotide_match	299097	299240	92.000000	-	.	Target=BM906511.1 27 170 +;percentID=81.9
+chr4-04	EST_Human	nucleotide_match	298308	298691	270.000000	-	.	Target=R78014.1 1 384 +;percentID=85.9;Gap=M86 D1 M110 D1 M1 D1 M51 D1 M2 D1 M12 I1 M27 I1 M25 I1 M5 I1 M10 D2 M10 I1 M21 I1 M4 I1 M13 ;sequence=GGACAGCGTCGGCCGCGGCTCCTGGTTTGGGGACTGCCAGCGGGTCTTGAAGGAAAGGCTTTTGTGAGGTGTGTGAGCAAGCGACAANATCACCCGCCCGCTCCAACTATTCCACCAGTCCCTTTGCCCTGTGCACCTCCTCCGCGTGGCTGTTCCTGAGTAACATCTTTTAGAATACGCTGGTGTCGGTGCGCACGGCTTNCTTCAGTTCTGTGAGTAGTTCTGCCACATTGCTGAACTTGAGGTTGTGGGGCGCCCCTGGGTTTGTAGACAGGCGTTCAGA [...]
+chr4-04	EST_Human	nucleotide_match	338738	339219	268.000000	+	.	Target=BU179167.1 340 851 +;percentID=80;Gap=M78 D1 M16 D1 M2 I1 M36 I4 M109 I8 M1 I1 M53 I1 M19 I1 M6 I1 M1 I1 M10 I3 M6 I1 M21 I1 M13 I1 M4 I1 M4 I1 M15 I1 M2 I1 M2 I2 M7 I1 M9 I1 M2 I1 M18 D2 M2 D2 M2 D1 M12 I2 M10 I1 M6 I1 M9 
+chr4-04	EST_Human	nucleotide_match	298462	299220	411.000000	-	.	Target=BE540535.1 13 752 +;percentID=79.9;Gap=M52 I1 M23 D1 M32 D1 M12 I1 M1 I1 M11 I1 M18 I1 M8 I1 M70 D1 M15 D5 M2 D1 M1 D1 M13 D1 M6 D1 M20 D1 M7 D1 M11 D1 M23 I1 M1 I1 M60 I1 M12 I1 M31 I1 M40 D1 M6 D1 M2 D2 M18 I1 M20 I1 M11 I1 M34 D1 M18 I1 M6 I1 M11 D1 M12 D1 M12 D2 M9 D1 M5 D1 M12 I1 M3 D1 M4 D1 M3 D1 M8 D1 M12 D1 M15 D1 M10 D1 M1 D1 M5 D2 M17 ;sequence=GGCTTCAGTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCC [...]
+chr4-04	EST_Human	nucleotide_match	338142	338232	38.000000	+	.	Target=BU954839.1 333 422 +;percentID=73.4;Gap=M60 D1 M1 D2 M21 I1 M3 I1 M3 
+chr4-04	EST_Human	nucleotide_match	298464	299256	506.000000	-	.	Target=DA735070.1 4 802 +;percentID=83;Gap=M35 D1 M134 I1 M63 D1 M18 D1 M3 D1 M1 D1 M2 D6 M164 D1 M4 I1 M41 D1 M75 D1 M23 D1 M129 I1 M10 I1 M10 I2 M1 I2 M1 I4 M1 I7 M53 I1 M7 I1 M3 ;sequence=GTAGCTCCAGCCAGAGCTCGGTTAGGGCCTCATCGCTCTGCTCCCGCTCCTTAGGGAAGCCTCGGTGATTCTGCCACAGCCTCAGCCTCTGTGGCTCTGTGACCTGCCGGTATTGGATGATTCGTATCTAAGACTCTGGGACACTCCTGAAGTCGGGAAATGGTGAGTGTGCAGGGCAGGGCGTCCCAAGGCTGTGGAGGCCTCATCGGAACCGGCGGGAAATGGCGGCGGTGGGAG [...]
+chr4-04	EST_Human	nucleotide_match	338145	338271	23.000000	+	.	Target=DA483132.1 396 523 +;percentID=62.1;Gap=M1 D1 M14 I1 M20 I2 M21 D2 M32 I1 M18 D1 M14 I1 M3 
+chr4-04	EST_Human	nucleotide_match	298477	299242	503.000000	-	.	Target=AL521029.3 8 775 +;percentID=84.2;Gap=M21 D1 M134 I1 M63 D1 M18 D1 M3 D1 M1 D1 M2 D6 M164 D1 M4 I1 M41 D1 M75 D1 M23 D1 M147 I4 M1 I1 M3 I3 M1 I7 M50 ;sequence=CCCGGGATCGGTTAGGGCCTCATCGCTCTGCTCCCGCTCCTTAGGGAAGCCTCGGTGATTCTGCCACAGCCTCAGCCTCTGTGGCTCTGTGACCTGCCGGTATTGGATGATTCGTATCTAAGACTCTGGGACACTCCTGAAGTCGGGAAATGGTGAGTGTGCAGGGCAGGGCGTCCCAAGGCTGTGGAGGCCTCATCGGAACCGGCGGGAAATGGCGGCGGTGGGAGGAGTCTGTGAATGGAGTTCCCGCTCAGCCCTCTG [...]
+chr4-04	EST_Human	nucleotide_match	338258	338353	28.000000	+	.	Target=DA888845.1 394 494 +;percentID=66.7;Gap=M13 I2 M3 I1 M14 I1 M1 I1 M65 
+chr4-04	EST_Human	nucleotide_match	298477	299246	511.000000	-	.	Target=BQ050525.1 2 773 +;percentID=84.5;Gap=M25 D1 M134 I1 M63 D1 M18 D1 M3 D1 M1 D1 M2 D6 M164 D1 M4 I1 M41 D1 M75 D1 M23 D1 M147 I4 M1 I1 M3 I3 M1 I7 M50 ;sequence=AGAGCTCGGTTAGGGCCTCATCGCTCTGCTCCCGCTCCTTAGGGAAGCCTCGGTGATTCTGCCACAGCCTCAGCCTCTGTGGCTCTGTGACCTGCCGGTATTGGATGATTCGTATCTAAGACTCTGGGACACTCCTGAAGTCGGGAAATGGTGAGTGTGCAGGGCAGGGCGTCCCAAGGCTGTGGAGGCCTCATCGGAACCGGCGGGAAATGGCGGCGGTGGGAGGAGTCTGTGAATGGAGTTCCCGCTCAGCCCTCTGTC [...]
+chr4-04	EST_Human	nucleotide_match	338124	338219	94.000000	+	.	Target=BP231503.1 300 395 +;percentID=99
+chr4-04	EST_Human	nucleotide_match	299097	299210	84.000000	-	.	Target=BU179167.1 3 116 +;percentID=86.8
+chr4-04	EST_Human	nucleotide_match	298525	298978	353.000000	-	.	Target=DA592987.1 98 549 +;percentID=89.2;Gap=M26 D1 M132 I1 M93 D1 M1 D1 M199 ;sequence=GGGATCTGGCGCGGCGTTTTCCTCTGGCTCCTGCGAGGGCTTGGTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCCTCAGTCCCCTCCGGTGACGGACCGGGCTCCTGTCGGTCCCCGCACGGCGGCTCTGGCCCAGCCTGCGGCCCTCCTTGTGCAGTTCTGCGCCCGCAGCCCCGCACCTTCCCTGGGCCGTGGGGTGAGGAGGAGCTCATCTGGAAGACGCCGGCGCCCGCGTGCGAGGTGCCCGCCTGGGAGGAGCTGTGGTCCGGGGGTCCGGTCCCTACTTTACCCTGTTCGGAATGAGATCGAGGCCC [...]
+chr4-04	EST_Human	nucleotide_match	298535	299220	406.000000	-	.	Target=BG251450.1 10 681 +;percentID=81.4;Gap=M134 I1 M63 D1 M18 D1 M3 D1 M1 D1 M2 D6 M77 D1 M7 D1 M78 D1 M4 I1 M3 D1 M37 D1 M42 D1 M18 I1 M8 I1 M30 D1 M9 I1 M5 D1 M28 D1 M5 I1 M15 I1 M5 I1 M20 D1 M20 D1 M6 D1 M26 ;sequence=TCATCGCTCTGCTCCCGCTCCTTAGGGAAGCCTCGGTGATTCTGCCACAGCCTCAGCCTCTGTGGCTCTGTGACCTGCCGGTATTGGATGATTCGTATCTAAGACTCTGGGACACTCCTGAAGTCGGGAAATGGTGAGTGTGCAGGGCAGGGCGTCCCAAGGCTGTGGAGGCCTCATCGGAACCGGCGGGAAATGGCGGCGGTG [...]
+chr4-04	EST_Human	nucleotide_match	338124	338219	96.000000	+	.	Target=DB074733.1 302 397 +;percentID=100
+chr4-04	EST_Human	nucleotide_match	298560	299272	479.000000	-	.	Target=CN310771.1 3 701 +;percentID=84.8;Gap=M25 D1 M25 D1 M134 I1 M63 D1 M18 D1 M3 D1 M1 D1 M2 D6 M164 D1 M4 I1 M41 D1 M75 D1 M23 D1 M119 ;sequence=GGGCGGCTTTTGCTTGTAGCTCCAGCCGAGCTCGGTTAGGGCCTCATCGCTCTGCTCCCGCTCCTTAGGGAAGCCTCGGTGATTCTGCCACAGCCTCAGCCTCTGTGGCTCTGTGACCTGCCGGTATTGGATGATTCGTATCTAAGACTCTGGGACACTCCTGAAGTCGGGAAATGGTGAGTGTGCAGGGCAGGGCGTCCCAAGGCTGTGGAGGCCTCATCGGAACCGGCGGGAAATGGCGGCGGTGGGAGGAGTCTGTGAATGGAGTTCCCGCTCAGC [...]
+chr4-04	EST_Human	nucleotide_match	338124	338219	96.000000	+	.	Target=DB135798.1 303 398 +;percentID=100
+chr4-04	EST_Human	nucleotide_match	298611	299220	416.000000	-	.	Target=CN310770.1 5 602 +;percentID=85.3;Gap=M134 I1 M63 D1 M18 D1 M3 D1 M1 D1 M2 D6 M164 D1 M4 I1 M41 D1 M75 D1 M23 D1 M68 ;sequence=GCTCTGCTCCCGCTCCTTAGGGAAGCCTCGGTGATTCTGCCACAGCCTCAGCCTCTGTGGCTCTGTGACCTGCCGGTATTGGATGATTCGTATCTAAGACTCTGGGACACTCCTGAAGTCGGGAAATGGTGAGTGTGCAGGGCAGGGCGTCCCAAGGCTGTGGAGGCCTCATCGGAACCGGCGGGAAATGGCGGCGGTGGGAGGAGTCTGTGAATGGAGTTCCCGCTCAGCCCTCTGTCCTCAGTCCCCTCCGGTGAGGGACCCGCGCTCTTGTCAGTCCCCGTACAGCGGCTC [...]
+chr4-04	EST_Human	nucleotide_match	338303	338538	147.000000	-	.	Target=CF123528.1 383 619 +;percentID=82.1;Gap=M29 I1 M4 D1 M102 I1 M36 I2 M43 D2 M19 
+chr4-04	EST_Human	nucleotide_match	298618	299269	410.000000	-	.	Target=DA732237.1 1 640 +;percentID=82;Gap=M48 D1 M134 I1 M63 D1 M18 D1 M3 D1 M1 D1 M2 D6 M164 D1 M4 I1 M41 D1 M75 D1 M16 D1 M6 D1 M20 I1 M35 I1 M6 ;sequence=GCTTTTGCTTGTAGCTCCAGCCAGAGCTCGGTTAGGGCCTCATCGCTCTGCTCCCGCTCCTTAGGGAAGCCTCGGTGATTCTGCCACAGCCTCAGCCTCTGTGGCTCTGTGACCTGCCGGTATTGGATGATTCGTATCTAAGACTCTGGGACACTCCTGAAGTCGGGAAATGGTGAGTGTGCAGGGCAGGGCGTCCCAAGGCTGTGGAGGCCTCATCGGAACCGGCGGGAAATGGCGGCGGTGGGAGGAGTCTGTGAATGGAGTTCCCGC [...]
+chr4-04	EST_Human	nucleotide_match	338124	338223	97.000000	+	.	Target=DA533464.1 302 400 +;percentID=99;Gap=M95 D1 M4 
+chr4-04	EST_Human	nucleotide_match	298624	299291	449.000000	-	.	Target=DA736785.1 1 655 +;percentID=84.8;Gap=M70 D1 M134 I1 M63 D1 M18 D1 M3 D1 M1 D1 M2 D6 M164 D1 M4 I1 M41 D1 M75 D1 M23 D1 M55 
+chr4-04	EST_Human	nucleotide_match	298640	299246	429.000000	-	.	Target=DN999087.1 4 602 +;percentID=86.3;Gap=M10 I1 M4 D1 M63 I1 M56 D1 M24 I1 M112 D5 M2 D1 M1 D1 M13 D1 M132 I1 M96 D2 M82 ;sequence=CACGAGCTTGGTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGGTGAGTGTGCGGGGCAGGGCGTCCGGAGGCTGGGGAGGCCTCATCGGAACCGGCGGGAAATGGCGGCGGCGGGACCGAGTCTGCGAACGGAGTCCCCGCTGCCGCCTCTCAGCCCTCAGTCCCCTCCGGTGACGGACCGG [...]
+chr4-04	EST_Human	nucleotide_match	338370	338449	5.000000	+	.	Target=BG026620.1 245 321 +;percentID=57.3;Gap=M2 D1 M11 D1 M1 D1 M6 I1 M21 D1 M5 D1 M24 I1 M5 
+chr4-04	EST_Human	nucleotide_match	299097	299180	70.000000	-	.	Target=CN278785.1 1 84 +;percentID=91.7
+chr4-04	EST_Human	nucleotide_match	298672	299265	412.000000	-	.	Target=DA787270.1 1 586 +;percentID=85.8;Gap=M29 I1 M4 D1 M63 I1 M56 D1 M24 I1 M112 D5 M2 D1 M1 D1 M13 D1 M132 I1 M93 D1 M1 D1 M52 ;sequence=TTTCCTCTGGCTCCTGCGAGGGCTTGGTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGGTGAGTGTGCGGGGCAGGGCGTCCGGAGGCTGGGGAGGCCTCATCGGAACCGGCGGGAAATGGCGGCGGCGGGACCGAGTCTGCGAACGGAGTCCCCGCTGCCGCCTCTCAGCCCTCA [...]
+chr4-04	EST_Human	nucleotide_match	338124	338223	50.000000	+	.	Target=DB152890.1 282 377 +;percentID=77;Gap=M78 D1 M1 D2 M13 D1 M4 
+chr4-04	EST_Human	nucleotide_match	338124	338296	127.000000	+	.	Target=DR002880.1 298 471 +;percentID=86.9;Gap=M128 I1 M6 I1 M31 D1 M7 
+chr4-04	EST_Human	nucleotide_match	299097	299240	90.000000	-	.	Target=BX485984.1 19 162 +;percentID=81.2
+chr4-04	EST_Human	nucleotide_match	338124	338222	75.000000	+	.	Target=BU854428.1 310 408 +;percentID=87.9
+chr4-04	EST_Human	nucleotide_match	338142	338226	36.000000	+	.	Target=EL735851.1 185 266 +;percentID=73.3;Gap=M60 D1 M1 D2 M21 
+chr4-04	EST_Human	nucleotide_match	339524	340011	488.000000	-	.	Target=AW978510.1 80 567 +;percentID=100;sequence=GACAGTCTTGCTTTGTTGCCAAGGCTGGAGTGTAGTCCCAGAATCTTGGCTCACTGCAACCTCCGCCTCCCGGGTTCAAGCCATTCAAACATAACTCGTTATCTTTTAAACTCTGGTTATCAATTAAACTCTGGTAAAATTAGTTTTCTTAATATGTTGCTTCCCTCAGTTTCCAAGAACCTATCAACAATGTTAAGTGAGAATTTACTACACACTTAAATAAGTTATATAGGTGTGTGTGTGAGACACACATTTTTATATAGCTACAGAGAGATACATCTCAATGACAGAATCTCAACAGACTTCCTACTAAGACAAAATTATAATAGCTATTAACAAATAAGAGAACAATTGAGAGCTTAATATACACTTAGTAAT [...]
+chr4-04	EST_Human	nucleotide_match	338124	338222	53.000000	+	.	Target=DA081687.1 258 356 +;percentID=76.8
+chr4-04	EST_Human	nucleotide_match	339609	340011	403.000000	-	.	Target=AA836242.1 19 421 +;percentID=100;sequence=TCCGCCTCCCGGGTTCAAGCCATTCAAACATAACTCGTTATCTTTTAAACTCTGGTTATCAATTAAACTCTGGTAAAATTAGTTTTCTTAATATGTTGCTTCCCTCAGTTTCCAAGAACCTATCAACAATGTTAAGTGAGAATTTACTACACACTTAAATAAGTTATATAGGTGTGTGTGTGAGACACACATTTTTATATAGCTACAGAGAGATACATCTCAATGACAGAATCTCAACAGACTTCCTACTAAGACAAAATTATAATAGCTATTAACAAATAAGAGAACAATTGAGAGCTTAATATACACTTAGTAATGTTCTATGCTGGTTAATGACATAGCACATTTATGCTTGTTAATGATACAGTGCATTTAAGA [...]
+chr4-04	EST_Human	nucleotide_match	338124	338222	53.000000	+	.	Target=DA644046.1 325 423 +;percentID=76.8
+chr4-04	EST_Human	nucleotide_match	338124	338221	82.000000	+	.	Target=BG779893.1 303 400 +;percentID=91.8;sequence=GGGCTTTTGCTTGTAGCTCCAGCCAGAGCTCGGTTAGGGCCTCATCGCTCTGCTCCCGCTCCTTAGGGAAGCCTCGGTGATTCTGCCACAGCCTCAGCCTCTGTGGCTCTGTGACCTGCCGGTATTGGATGATTCGTATCTAAGACTCTGGGACACTCCTGAAGTCGGGAAATGGAACTCTTAACATTCAAGGATGTGGCCATAGAATTCTCTCCAGAAGAGTGGAAATGTCTGGACATTTCCCAGCACGAATTTATATAGAGATGTGATGTTGGAGAACTACAGAAACCTGGTCTCCCTGGGTGTTACTATCTCTAACCCAGACCTGGTCACCAGTCTGGAGCAAAGAAAAGAGCCCTACAATTTGAAGATACATG [...]
+chr4-04	EST_Human	nucleotide_match	347760	348104	227.000000	+	.	Target=AW089533.1 66 401 +;percentID=84.4;Gap=M5 D1 M1 D2 M1 D1 M6 D1 M1 D1 M1 D3 M245 I1 M19 D1 M56 
+chr4-04	EST_Human	nucleotide_match	338267	338366	37.000000	+	.	Target=DA297086.1 457 556 +;percentID=70.2;Gap=M1 I1 M17 D1 M81 ;sequence=GGAAGCGGATTATGTGGAGTGAAAGTTACACCGTGGCGGATTGACTTCTAAGGACTCTTGGTACATGAGGAAGAAACCCGGAAGGGGAAGAGGAAAGCAAAGGCGTCAGGAGTGGTTCTTCCTCAGGGTCTATTGACATTCAGGGATGTGGCCATAGAATTCTCTCAGGAGGAGTGGAAATGCCTGGACCCTGCTCAGAGGACTCTATACAGAGACGTGATGTTGGAGAATTATAGGAACCTGGTCTCCCTGGGTGAGGATAACTTCCCTCCAAAAGTGGGGATGTTCCCTTGTGTATCTTTGCATTTTCTCTTGTTTCTCTTGGGAGTTGCATCCTTGCTTGACTAAAATGGAA [...]
+chr4-04	EST_Human	nucleotide_match	352965	353859	858.000000	+	.	Target=BX452265.2 1 909 +;percentID=97.9;Gap=M765 I1 M8 I1 M18 I1 M6 I1 M14 I1 M10 I1 M6 I1 M8 I1 M10 I1 M5 I1 M12 I1 M3 I1 M11 I1 M7 I1 M12 ;sequence=CTGGGTCTACAGTGAAGTTAATGCTTGGCAGACCTGTTATTTAAGCATCAGACAGTTGAGGATTCCATTTTCTGAGGAGACTGAACTTTCTTTAAGATCTTGATCAATAAGACTGGTGCTGAGAAAAAAAAAACCCAGTTAATATCTGCAAATGGAGATGCTGATACAATAAATATGAGTAGGTGTGGCTCCTGCTGTTTGGCTCTTGCGAGATGTTTGGAAATGCTCTAACCTAGTCATTGGACAGGTTTCTAGATGACCGTTACTGAGCGTTGAT [...]
+chr4-04	EST_Human	nucleotide_match	338124	338219	96.000000	+	.	Target=BM800016.1 287 382 +;percentID=100
+chr4-04	EST_Human	nucleotide_match	353336	354028	692.000000	+	.	Target=CR743452.1 1 693 +;percentID=99.9;sequence=TCTCCCTCCAGATTTCTAGGTGGGCAGGACTTCTCCCTGCCTCTAGCTGCCAGGGACTGGAGCTTGGTTATAGGACTGCTTCACAATTCACGGTGGGAATAAAGTCAGCCAGCATGCCTACAGGGACACATGTAGCTGTGCTTTTGGGCAGGTCACAGGTCAGGAAAAACTCCTCCTGGATTTTGGTTGCATGGACTTGGAGCCAAGTTGTAGTGCCACGTCAAGATCCACCATCAAATAAATATTGGCAAGCCTACATCCAGGGGCAGAGATGGATATTTCTGTCTGTGGGTCCCTGTGTGAGTAGGATTTCTTCCACATCATGACTGACATGTGCAAGGGGTGCAGTTTGGGGTAATTCAGAGATCACAGACAGAA [...]
+chr4-04	EST_Human	nucleotide_match	338302	338608	194.000000	+	.	Target=BU178885.1 269 576 +;percentID=82.3;Gap=M64 I1 M1 I1 M61 D1 M129 I1 M31 D1 M4 D1 M7 I1 M7 
+chr4-04	EST_Human	nucleotide_match	338124	338219	96.000000	+	.	Target=DB221880.1 333 428 +;percentID=100
+chr4-04	EST_Human	nucleotide_match	338338	338575	145.000000	-	.	Target=DA569791.1 119 359 +;percentID=81;Gap=M13 I1 M5 I1 M128 D1 M62 I1 M1 I1 M28 ;sequence=ATACAGAAACCTGGTCTCCCTGGGTGTTACTATCTCTAACCCAGACCTGGTCACCAGTCTGGAGCAAAGAAAAGAGCCCTACAATTTGAAGATACATGAAACAGCAGCCAGACCCCCAGAGTTTTGCTCTGATTGCCCAGGCTGGAGTGCAGTGGCATGATCTTGGCTCACTACAACCTCCGCCTCCCAGGTTCAAGTGATTTTCCTGCCTCAGCCTCGCAAGTAGCTGGGACTACAGGTGCCCACCATCATGCCGTACTCATTTTGCCTTTTTAGTAGAGATGAGGTTTCACCATGTTGGCCAGTCTGGTCTTGAACTCCTAACCTCAGGTAAT [...]
+chr4-04	EST_Human	nucleotide_match	338124	338223	97.000000	+	.	Target=DA224929.1 300 398 +;percentID=99;Gap=M95 D1 M4 
+chr4-04	EST_Human	nucleotide_match	338583	338857	260.000000	-	.	Target=BI016270.1 1 276 +;percentID=97.5;Gap=M53 D1 M15 I1 M190 I1 M16 
+chr4-04	EST_Human	nucleotide_match	338124	338230	97.000000	+	.	Target=DA418713.1 302 406 +;percentID=96.3;Gap=M95 D1 M2 D1 M8 
+chr4-04	EST_Human	nucleotide_match	338617	338714	62.000000	+	.	Target=DR002880.1 473 566 +;percentID=83.8;Gap=M8 D2 M25 D1 M24 D1 M37 
+chr4-04	EST_Human	nucleotide_match	338124	338293	126.000000	+	.	Target=BQ365590.1 47 214 +;percentID=87.6;Gap=M2 D1 M54 D1 M112 
+chr4-04	EST_Human	nucleotide_match	338125	338219	72.000000	+	.	Target=CD385642.1 314 407 +;percentID=88.5;Gap=M15 D1 M79 
+chr4-04	EST_Human	nucleotide_match	338852	339091	234.000000	+	.	Target=AA349226.1 2 242 +;percentID=98.3;Gap=M22 I1 M218 
+chr4-04	EST_Human	nucleotide_match	338145	338271	23.000000	+	.	Target=CN426971.1 370 497 +;percentID=62.1;Gap=M1 D1 M14 I1 M20 I2 M21 D2 M32 I1 M18 D1 M14 I1 M3 
+chr4-04	EST_Human	nucleotide_match	347562	347624	34.000000	+	.	Target=AW089533.1 2 65 +;percentID=78.5;Gap=M24 I2 M32 D1 M6 
+chr4-04	EST_Human	nucleotide_match	349004	349034	29.000000	-	.	Target=DB473756.1 3 33 +;percentID=96.8
+chr4-04	EST_Human	nucleotide_match	353288	353919	392.000000	-	.	Target=AV722306.1 4 648 +;percentID=82.9;Gap=M64 I1 M2 I1 M1 I1 M3 I1 M2 I2 M1 I1 M1 I3 M36 I3 M1 I1 M124 D2 M5 D7 M6 D1 M1 D1 M190 D1 M83 I2 M1 I7 M1 I5 M1 I1 M65 D2 M8 D2 M20 ;sequence=GTAAACCTAAGACTGATGAGGGCTGTATTGAGAAGGCATGAGCTTGCTTGAGTGGCATGCTTGCCCATCATAGTCCCAGCTACAAAATAAAATATGATTAATTCTCATTGTAAGTATAGCTGTAGGCCATTTGGTTTTGTTTATGCCACTAGCACCATCTGCCAAGACACCAAGGAGGATTCATAATGTCCTGTGTCTCAGGTGAAAGGACTTTAGATGTTGCTCCTCTCAGTGATCTCCG [...]
+chr4-04	EST_Human	nucleotide_match	353399	354119	410.000000	-	.	Target=CA415400.1 18 725 +;percentID=80.9;Gap=M74 I1 M20 D4 M1 D1 M164 I1 M2 I1 M1 I1 M1 I3 M1 I1 M1 I1 M1 I2 M39 I3 M1 I1 M45 D2 M1 D2 M2 D1 M7 D1 M116 D4 M57 D1 M88 D1 M5 I1 M14 D1 M9 D1 M6 D4 M1 D1 M8 D1 M7 D1 M7 D1 M2 D1 M7 D1 M4 ;sequence=TTTTTTTTTTTTTTTTTTAAATGTGAGCATTTTATTTCAGAAATTTTGAATTTGAAATCAGATAAATTTGACATAGAATGTATCAGAAACTGAAAACACAGTAAGATGGCAGGAGGTTCTCTACCCACAACTTCTACAGTTATAAAAAAGCAGCAGTTATGTCCTGAAAAAAGGAACTTTATGG [...]
+chr4-04	EST_Human	nucleotide_match	338613	338902	185.000000	+	.	Target=BQ365590.1 215 501 +;percentID=83.3;Gap=M12 D2 M88 I2 M1 I1 M5 I1 M23 D1 M2 D3 M124 D1 M28 
+chr4-04	EST_Human	nucleotide_match	338738	338801	48.000000	+	.	Target=EL736128.1 227 290 +;percentID=87.5
+chr4-04	EST_Human	nucleotide_match	353550	354118	327.000000	-	.	Target=DB352298.1 1 568 +;percentID=80.7;Gap=M73 I1 M20 D4 M1 D1 M164 I1 M2 I1 M1 I1 M1 I3 M1 I1 M1 I1 M1 I2 M39 I3 M1 I1 M45 D2 M1 D2 M2 D1 M7 D1 M116 D4 M57 D1 M20 ;sequence=AAATGTGAGCATTTTATTTCAGAAATTTTGAATTTGAAATCAGATAAATTTGACATAGAATGTATCAGAAACTGAAAACACAGTAAGATGGCAGGAGGTTCTCTACCCACAACTTCTACAGTTATAAAAAAGCAGCAGTTATGTCCTGAAAAAAGGAACTTTATGGGAGCTTTGGAATCCATGTCAAGGGTTGTGAACCCAAGACTGAGGAGGGCTGTATTGAAAAGACATGCCCTTGCTTGAGTGGCATGC [...]
+chr4-04	EST_Human	nucleotide_match	353558	353964	264.000000	-	.	Target=BI062009.1 1 417 +;percentID=83.6;Gap=M109 I1 M2 I1 M1 I1 M1 I3 M1 I1 M1 I1 M1 I2 M39 I4 M141 D1 M2 I1 M46 D1 M1 D1 M4 D2 M53 ;sequence=AAAAGAACCTTTATGAAAACTTAGAAATCCGTGTAAAAGATTGTGAATCCAAGACTGAGGAGGGCTGTATTAAGAGGGCATGCACTTGCTTGAGTGGCATGCTTGCCCATCATAGTCCCAGCTACCGAATGAAATATGAATAATTCTCACTGTAAACATAGCTATAGATCATTTGGTTTTGTTCCTGCCACTATCACCATCTGCCAAGACACTTAGGAGAATTCATAATGTCCTGTGTCTCAGGTGAAAGGCCTTGACATGTTGGTCCTGCCTGTGATCTATAAA [...]
+chr4-04	EST_Human	nucleotide_match	353563	354250	428.000000	+	.	Target=BI754448.1 1 712 +;percentID=82.5;Gap=M44 I1 M4 D2 M4 D1 M1 D1 M46 I1 M2 D1 M12 D1 M128 I4 M39 I2 M1 I1 M1 I1 M1 I3 M1 I1 M1 I1 M2 I1 M139 D2 M45 I7 M2 I2 M5 I1 M2 I2 M1 I3 M1 I1 M18 D1 M174 I1 M5 ;sequence=CCACCATTGAATAAATATTGGCAGGCCTACATCCAGGNGCACAGAATGGATGTTTCTGTGGGTCTCTGTGTGTGCAGGATTTCTTCCACACTATGACTGATCAGGGAAAGGGGTGGGTTTGGGCTAATTTACAGATCACAGGCAGGACCAACATGTCAAGGCCTTTCACCTGAGACACAGGACATTATGAATTCTCCTAAGTGTCTTGGCAGAT [...]
+chr4-04	EST_Human	nucleotide_match	353572	354158	363.000000	+	.	Target=CN272206.1 4 613 +;percentID=82.5;Gap=M39 D2 M4 D1 M1 D1 M46 I1 M2 D1 M141 I4 M39 I2 M1 I1 M1 I1 M1 I3 M1 I1 M1 I1 M2 I1 M139 D2 M45 I7 M2 I2 M5 I1 M2 I2 M1 I3 M1 I1 M18 D1 M87 ;sequence=TTGAATAAATATTGGCAGGCCTACATCCAGGGGCACAGATGGATGTTTCTGTGGGTCTCTGTGTGTGCAGGATTTCTTCCACACTATGACTGATCAGGGAAAGGGGTGGGTTTTGGGCTAATTTACAGATCACAGGCAGGACCAACATGTCAAGGCCTTTCACCTGAGACACAGGACATTATGAATTCTCCTAAGTGTCTTGGCAGATGGTGATAGTGGCAGGAACAAAACCAA [...]
+chr4-04	EST_Human	nucleotide_match	353592	354084	261.000000	+	.	Target=BX493503.1 1 492 +;percentID=78.7;Gap=M36 D4 M21 D1 M94 D1 M7 D1 M2 D2 M1 D2 M45 I1 M1 I3 M39 I2 M1 I1 M1 I1 M1 I3 M1 I1 M1 I1 M2 I1 M164 D1 M1 D4 M20 I1 M39 ;sequence=CATCCAGGGGCACAGATGGATGTTTCTCTCTGTGGGTGTCTGGGCAGGATTTCTTCCCACCATGACTGATATGTGCAAAGGGTGGATTTTGGGCTAATTCAGAGATCACAGATAGAACCAACTTCTAAAGGCCTTTCACCTGAGGCATAGGTGTCTTGGTTTAGGTGTCTTCACAGATGGTGCTAGTAGCAGGAACAGAACCAAATGGTCTACAGCTAAGTCTACAATGAAAATTGGACACATTTTATTCTGT [...]
+chr4-04	EST_Human	nucleotide_match	353596	354499	865.000000	-	.	Target=BX435704.1 1 905 +;percentID=98;Gap=M6 I1 M17 I1 M762 I1 M16 I1 M4 D1 M23 D1 M9 I1 M26 D1 M29 D1 M8 
+chr4-04	EST_Human	nucleotide_match	353983	354511	527.000000	-	.	Target=DB316147.1 1 529 +;percentID=99.8
+chr4-04	EST_Human	nucleotide_match	353988	354501	506.000000	-	.	Target=AW590651.1 1 514 +;percentID=99.2
+chr4-04	EST_Human	nucleotide_match	354053	354549	288.000000	+	.	Target=CA941914.1 1 502 +;percentID=80.4;Gap=M18 D1 M174 I1 M2 I6 M1 I1 M16 I2 M37 D1 M30 D1 M70 D1 M1 D1 M17 D2 M1 D1 M1 D1 M62 I1 M20 I1 M5 I1 M1 I1 M32 
+chr4-04	EST_Human	nucleotide_match	354410	354549	76.000000	+	.	Target=BP395595.1 24 167 +;percentID=77.8;Gap=M82 I1 M2 I1 M8 I1 M8 I1 M40 
+chr4-04	EST_Human	nucleotide_match	354637	354895	149.000000	+	.	Target=BP395595.1 169 420 +;percentID=81;Gap=M33 I1 M91 D1 M1 D3 M3 D3 M5 D1 M1 D1 M4 D1 M18 I2 M93 
+chr4-04	EST_Human	nucleotide_match	354639	354726	53.000000	+	.	Target=CA941914.1 503 590 +;percentID=81.3;Gap=M2 D1 M28 I1 M57 
+chr4-04	EST_Human	nucleotide_match	299097	299240	92.000000	-	.	Target=BM800016.1 16 159 +;percentID=81.9
+chr4-04	EST_Human	nucleotide_match	299097	299266	92.000000	-	.	Target=DA801371.1 4 174 +;percentID=77.2;Gap=M28 I1 M142 
+chr4-04	EST_Human	nucleotide_match	299097	299240	92.000000	-	.	Target=BU177765.1 14 157 +;percentID=81.9
+chr4-04	EST_Human	nucleotide_match	299097	299240	92.000000	-	.	Target=DA002438.1 9 152 +;percentID=81.9
+chr4-04	EST_Human	nucleotide_match	299097	299266	92.000000	-	.	Target=DA817816.1 4 174 +;percentID=77.2;Gap=M28 I1 M142 
+chr4-04	EST_Human	nucleotide_match	299097	299266	93.000000	-	.	Target=DB135798.1 4 175 +;percentID=77.3;Gap=M28 I1 M126 I1 M16 
+chr4-04	EST_Human	nucleotide_match	299097	299266	93.000000	-	.	Target=DB221880.1 2 173 +;percentID=77.3;Gap=M28 I1 M126 I1 M16 
+chr4-04	EST_Human	nucleotide_match	299097	299223	93.000000	-	.	Target=DN989940.1 11 137 +;percentID=86.6
+chr4-04	EST_Human	nucleotide_match	299097	299266	94.000000	-	.	Target=DB074733.1 4 174 +;percentID=77.8;Gap=M28 I1 M142 
+chr4-04	EST_Human	nucleotide_match	299097	299266	94.000000	-	.	Target=BP200889.1 4 174 +;percentID=77.8;Gap=M28 I1 M142 
+chr4-04	EST_Human	nucleotide_match	299097	299266	94.000000	-	.	Target=DA803616.1 4 174 +;percentID=77.8;Gap=M28 I1 M142 
+chr4-04	EST_Human	nucleotide_match	299097	299266	94.000000	-	.	Target=DA224929.1 2 172 +;percentID=77.8;Gap=M28 I1 M142 
+chr4-04	EST_Human	nucleotide_match	299097	299266	94.000000	-	.	Target=DB136011.1 1 171 +;percentID=77.8;Gap=M28 I1 M142 
+chr4-04	EST_Human	nucleotide_match	299097	299266	94.000000	-	.	Target=DA564196.1 4 174 +;percentID=77.8;Gap=M28 I1 M142 
+chr4-04	EST_Human	nucleotide_match	299097	299266	94.000000	-	.	Target=BP231503.1 2 172 +;percentID=77.8;Gap=M28 I1 M142 
+chr4-04	EST_Human	nucleotide_match	299097	299266	94.000000	-	.	Target=DA757889.1 2 172 +;percentID=77.8;Gap=M28 I1 M142 
+chr4-04	EST_Human	nucleotide_match	299097	299267	95.000000	-	.	Target=DA418713.1 3 174 +;percentID=77.9;Gap=M29 I1 M142 
+chr4-04	EST_Human	nucleotide_match	299097	299276	96.000000	-	.	Target=CD701489.1 34 215 +;percentID=76.9;Gap=M10 I1 M28 I1 M142 
+chr4-04	EST_Human	nucleotide_match	299097	299275	99.000000	-	.	Target=DA385292.1 1 181 +;percentID=77.9;Gap=M9 I1 M28 I1 M142 
+chr4-04	EST_Human	nucleotide_match	299097	299256	103.000000	-	.	Target=DA571532.1 4 162 +;percentID=82.5;Gap=M35 D1 M124 
+chr4-04	EST_Human	nucleotide_match	299097	299246	107.000000	-	.	Target=AU138611.1 1 149 +;percentID=86;Gap=M18 D1 M131 
+chr4-04	EST_Human	nucleotide_match	299097	299246	107.000000	-	.	Target=DB095116.1 1 149 +;percentID=86;Gap=M18 D1 M131 
+chr4-04	EST_Human	nucleotide_match	299097	299258	112.000000	-	.	Target=BQ069369.1 1 161 +;percentID=85.3;Gap=M30 D1 M3 I1 M3 D1 M124 
+chr4-04	EST_Human	nucleotide_match	299097	299258	113.000000	-	.	Target=BP248393.1 5 165 +;percentID=85.2;Gap=M30 D1 M131 
+chr4-04	EST_Human	nucleotide_match	299097	299247	118.000000	-	.	Target=BI463333.1 9 158 +;percentID=89.4;Gap=M26 D1 M124 
+chr4-04	EST_Human	nucleotide_match	299097	299302	118.000000	-	.	Target=DA460146.1 2 209 +;percentID=78.8;Gap=M36 I1 M28 I1 M142 
+chr4-04	EST_Human	nucleotide_match	299097	299274	124.000000	-	.	Target=BG718573.1 2 177 +;percentID=85.4;Gap=M3 D1 M49 D1 M124 
+chr4-04	EST_Human	nucleotide_match	299097	299255	159.000000	-	.	Target=CX788870.1 7 165 +;percentID=100
+chr4-04	EST_Human	nucleotide_match	299097	299326	165.000000	-	.	Target=DA501191.1 1 229 +;percentID=86.1;Gap=M98 D1 M131 
+chr4-04	EST_Human	nucleotide_match	299097	299263	167.000000	-	.	Target=CN273339.1 1 167 +;percentID=100
+chr4-04	EST_Human	nucleotide_match	299097	299279	183.000000	-	.	Target=DA730641.1 4 186 +;percentID=100
+chr4-04	EST_Human	nucleotide_match	299187	299282	47.000000	-	.	Target=DA592987.1 1 97 +;percentID=75.5;Gap=M46 I1 M4 D1 M44 I1 M1 
+chr4-04	EST_Human	nucleotide_match	299996	300237	193.000000	+	.	Target=BG010868.1 1 239 +;percentID=90.5;Gap=M175 D2 M1 D1 M63 ;sequence=AGGGCCTGAACACGTCTTTTCTGCTGGAAGTGAGGGAACAGCCTCTCTACCAACTTTTCTCCTCAGGCTCAAGGGTGGGTGGGACAGTGCCCCTAGAGAGAGCAGGGGCTGCGAGCTGAGAGTGTCCACGTGAAGACCATGGTCTCCCAGTCACTGTTTGGTGCCGGTGTGGTGGTCTCAGTTCAGCCAGGTCTGGGCTCTCTTCCCATGACCAGGAAGAATAAGACATACAGACCCCATGCGCCGGGT
+chr4-04	EST_Human	nucleotide_match	300247	301026	616.000000	+	.	Target=CA312024.1 18 799 +;percentID=90.3;Gap=M45 D1 M2 D1 M37 I7 M1 I3 M201 D1 M67 D1 M145 D2 M2 D2 M80 D1 M70 D1 M26 I1 M4 I3 M38 D1 M22 D1 M28 ;sequence=TTTTTTTTTTTTTTTTTTAAAGCAGAATAGGATTTATTAAGCAAAAGGAAAGCTCTCAGCAGAAAGGGGACATGAAAGCAGGTTGCCAGAAATGGGGCTGAGTTCTGGGTCTTTTATGTGGCAAGAACGAGGAAGTCTTCTGTGGGTTCTGCCCAAATGGGAGGGGTAAATTTCCCCGCTAAGGGTGTTGTATCTGTGCATGCCTGGAGTTGACCACAGTGACTCCATCTTGGTTATTACCCATGAGTGCCCAAGCAAAACCGACAGCAGGT [...]
+chr4-04	EST_Human	nucleotide_match	300771	301157	335.000000	+	.	Target=W90643.1 54 440 +;percentID=93.3;sequence=GCCTGCCTCGGNCTCCCAAAGTGCTGGGATCACAGGTGTGAGCTACTGCGCCCGGTTTCCTCTTTCTTTTAAATATCATACAGTAAACAAGGAATGATGGGTCCACAGGAAGAGAGACCACCATGTCTTCAGATCTCCTCACAGCCTTGCCCTCCAGAGTTTAGATGTGGAGGGAATAGATTAAAGGCAAACTTCTTGTTTTGCTGTTTATCTTTGGACCTGTCAGGCTGTAACTGTGTGTTTTTCTCCTGTGGTGTGGGGCACTGCGTGAGTTTAAGCACCAATCACATACATCCACATGTACCTGCACTTCTGTTCCCAGAAGGAAGACCGTGAGTGTGAGTTGTCCAGGTCCTTGATATTTTGAACAAATAATTGA [...]
+chr4-04	EST_Human	nucleotide_match	300806	300950	100.000000	+	.	Target=BF796782.1 1 145 +;percentID=85.8;Gap=M13 D1 M5 D1 M4 I1 M109 I1 M6 I1 M2 D1 M3 ;sequence=AAAGAATGTTGGGGCACACAAGCAGAGAACACCATGTCTTCAGATCTCTTCACAGCCTTGTCCTCCAGAGTTTAGAAGTGGAGGGAAAAGATTAAAGGCAATCTTCTTGTTTTGCTATTTGTCCTTGGACCTAATCTGGACTTAATTTGGACACACAGGCTAACGAAGGCCGTGAGTGTGAGTTGTCCAGGTCCTTGGCAACAAAGAATTGAACAAAATGCACAAAGTAACAAAGGAACAAAACAGAGGGAGGAAGCATCAAAAGCGGAAATTTATTAAGGTAAGAAATAGGGTGGGTATGGGCTTGAGCAAGTGGCTCAAGGACCCAGTT [...]
+chr4-04	EST_Human	nucleotide_match	300820	300926	82.000000	+	.	Target=BE243937.1 3 109 +;percentID=88.9;Gap=M5 D1 M4 I1 M97 ;sequence=GGCCACACAAGCAGAGAACACCATGTCTTCAGATCTCTTCACAGCCTTGTCCTCCAGAGTTTAGAAGTGGAGGGAAAAGTTTATAGGCAATGTTCTTGTTTTGCTATTTGT
+chr4-04	EST_Human	nucleotide_match	301028	301631	291.000000	+	.	Target=BF796782.1 146 740 +;percentID=77.2;Gap=M2 D1 M5 I1 M1 I1 M2 I1 M1 I2 M36 D6 M25 I1 M3 I1 M1 I6 M51 D1 M2 D2 M1 D1 M1 D2 M1 D1 M3 D1 M166 D1 M112 I4 M7 I1 M7 D1 M34 D1 M8 D2 M5 D1 M5 D1 M1 D1 M12 I1 M16 D1 M6 D1 M3 D1 M4 D1 M4 D1 M2 D1 M30 I1 M18 
+chr4-04	EST_Human	nucleotide_match	301131	301782	516.000000	+	.	Target=CA314198.1 20 665 +;percentID=90.1;Gap=M291 D1 M43 I1 M79 I1 M112 I1 M64 D1 M1 D1 M1 D5 M1 D1 M51 ;sequence=TTTTTTTTTTTTTTTTTTGAATAGCAAAAGCAAGATTTTATTAAAGTGAGAAAGCACTCTACAGGGTGGGTGTGAGCCCCAGCAAGCCGCCCAAGGACCCGGTTACAATGTTTTCTGGGTTTTAAGTACTCCTTTTGAGGTTCCTATCAGCTACCCCTTATCTNAATGAAGGATTTGGTCCTTGGCTAATCAAAGGTTGAGGCGAATTGGTACCCTATGCAGATNAAGGCATGGCCTGTGCTTGGCCCACGGCCACTCCAAGGCACTGTCCTTTTCTATCAGAGAACTGGTACAAGGGGGAGGGTTGTAGGAC [...]
+chr4-04	EST_Human	nucleotide_match	301134	301778	519.000000	+	.	Target=BU685417.1 19 658 +;percentID=90.9;Gap=M331 I1 M80 I1 M112 I1 M64 D1 M1 D1 M1 D5 M1 D1 M47 ;sequence=TTTTTTTTTTTTTTTTTTAGCAAAAGCAAGATTTTATTAAAGTGAGAAAGCACTCTACAGGGTGGGTGTGAGCCCCAGCAAGCCGCCCAAGGACCCGGTTACAATGTTTTCTGGGTTTTAAGTACTCCTTTTGAGGTTCCTATCAGCTACCCCTTATCTGAATGAAGGATTTGGTCCTTGGCTAATCAAAGGTTGAGGCGAATTGGTACCCTATGCAGATGAAGGCATGGCCTGTGCTTGGCCCACGGCCACTCCAAGGCACTGTCCTTTTCTATCAGAGAACTGGTACAAGGGGGAGGGTTGTAGCGACAGTCGCTTTC [...]
+chr4-04	EST_Human	nucleotide_match	301197	301828	513.000000	+	.	Target=CB854294.1 1 626 +;percentID=91.3;Gap=M268 I1 M80 I1 M112 I1 M64 D1 M1 D1 M1 D5 M1 D1 M86 D1 M10 ;sequence=GCCGCCCAAGGACCCGGTTACAATGTTTTCTGGGTTTTAAGTACTCCTTTTGAGGTTCCTATCAGCTACCCCTTATCTGAATGAAGGATTTGGTCCTTGGCTAATCAAAGGTTGAGGCGAATTGGTACCCTATGCAGATGAAGGCATGGCCTGTGCTTGGCCCACGGCCACTCCAAGGCACTGTCCTTTTCTATCAGAGAACTGGTACAAGGGGGAGGGTTGTAGCGACAGTCGCTTTCGATCCTTTGCTACTCGGGTGTAGATGAGGTTTTTCCTTTTGGTTTAGATGTAGGAAGTTCACGTTAACTGGCTTT [...]
+chr4-04	EST_Human	nucleotide_match	301340	301916	501.000000	+	.	Target=BY797195.2 1 584 +;percentID=93.5;Gap=M125 I1 M80 I1 M112 I1 M120 I4 M140 ;sequence=GCATGGTCTGTGCTTGGCCCACGGCCACTCCAAGGCACTGTCCTTTTCTATCAGAGAACTGGTACAAGGGGGAGGGTTGTAGTGACAGTCGCCTTCGATCCTTTGCTACTCGGGTGTAGATGAGGTTTTTCCTTTTGGTTTAGTTGTAGGAAGTTCACGTTAACTGGCTTTAGGTTCCCTGCTCCCAGACCTTGGTGTTTTTTCTTGTAGGAAGTCAGCACGAATTGGCCTTAAGTTCCCTGTCTCCAGACCCTATTCTCCTGCCTCACTTCTGTATAAGTCAATACCATCTTAAAACAAATCTAACTTTAAATAAAGGAAAAAAGAAAATCAATAC [...]
+chr4-04	EST_Human	nucleotide_match	301368	302020	587.000000	-	.	Target=BQ224228.1 191 858 +;percentID=95.2;Gap=M478 D1 M44 I1 M29 I1 M11 I1 M8 I1 M6 I1 M13 I1 M3 I1 M6 I1 M3 I1 M6 I1 M2 I1 M6 I1 M3 I1 M4 I1 M3 I1 M5 I1 M1 I1 M13 D1 M7 ;sequence=CATGTGAGATGTGCCTTTCAGCTTGCGCCGTGATTGTGAGGCCTCCCTAGCATTGTGGAGTTTGGGGCATTGGCCAGGCGCGGTCCACTGCACTCCAACCTGGGCAACAGAGTGAGACTGCATATCAAAAAAAAAAAAATAGTGGAGCATTTACATTCAGTCATCATGAGATGGATACTAATATTCCAAGAATTCTTCCATCTCTATGAGAACAAGCCCATTTTAACTTTCTGGAGGATAAAATAGC [...]
+chr4-04	EST_Human	nucleotide_match	301445	302023	442.000000	-	.	Target=BM906511.1 391 1008 +;percentID=89;Gap=M345 I1 M8 I1 M17 I1 M6 I1 M9 I1 M5 I1 M2 I1 M5 I1 M10 I1 M8 I1 M6 I1 M6 I1 M12 I1 M2 I1 M5 I1 M8 I1 M10 I2 M4 I1 M5 I1 M5 I1 M6 I1 M8 I1 M4 I1 M6 I1 M4 I1 M3 I1 M10 I1 M2 I1 M4 I1 M3 I1 M1 I1 M6 I1 M6 I1 M3 I1 M5 I2 M5 I1 M7 I1 M4 I1 M9 D1 M4 
+chr4-04	EST_Human	nucleotide_match	301462	302023	559.000000	-	.	Target=CA439736.1 136 696 +;percentID=99.8;Gap=M487 D1 M74 ;sequence=TTTATTTTTTTTTTTTTTAGTAGAGATGGGGTTTCACCGTGTTAGCCAGGATGGTCTTGATCTCCTGACCTGGTGATCCGCCCACTTTGGCCTCCCAAAGTGCTGGGATTACAGGCATGAGCCACCGCGCCCGGCCAGAATTCTTCCATCTCTATGAGAACAAGCCCATTTTAACTTTCTGGAGGATAAAATAGCATGCTGAGGAAAGCCAAAGTGCGCCAGTTTACAGACAGCTCACTCCCAGAAGCAGAGCCACCTAATTCACCAGCATCTGACCACTCACACCTGAAGGAGCCAAACTGAGCCCAGAAGAATGGCCCAGCTAAGCCCAGCCTAAATTTCTAACCAGCTCAACCCTG [...]
+chr4-04	EST_Human	nucleotide_match	301465	301994	526.000000	-	.	Target=BF345586.1 1 530 +;percentID=99.6;sequence=CCCATTTTAACTTTCTGGAGGATAAAATAGCATGCTGAGGAAAGCCAAAGTGCGCCAGTTTACAGACAGCTCACTCCCAGAAGCAGAGCCACCTAATTCACCAGCATCTGACCACTCACACCTGAAGGAGCCAAACTGAGCCCAGAAGAATGGCCCAGCTAAGCCCAGCCTAAATTTCTAACCAGCTCAACCCTGAGCTAGTATGTTTCAGGATTGTTATGCAGTTATAGCTTAGTAATATATACACCCATTAAAGACAGGATTCCAGGATTCCAGGACAGATTGATTACAAATAACCTGCAAATGCTTGGCACCCTGTAAGTATTGATATTGTGTTTCCTTTATTTAAAGTTAAATTTGTTGTAAGATGGTATTGAC [...]
+chr4-04	EST_Human	nucleotide_match	301469	302029	451.000000	-	.	Target=CN271553.1 1 550 +;percentID=91.5;Gap=M55 D1 M1 D1 M1 D3 M6 D1 M229 D1 M1 D5 M1 D1 M1 D1 M64 I1 M112 I1 M56 I1 M20 ;sequence=CTTTTTCAGAATTATTCCATCTCTATGACAACAAGCCCATTTTAGCTTTCTGGAGAATAGCATCTGAGAAAAGCCAAAGTGCCTCAGTTTACAGACAGCTCACTCACAGAAGCAGAGCCACCTAATTCACCAGCATCTAACCACTCACACCTGAAGGAGCCAAACTGAGCCCAGAAGAATGGCCCGGCTGAGCCCAGCCTAAATTTCTAACCAGCTCAATCCTGAGCTAGTATGTTTCGGGATTGTTATGCAGTTATAAGTTAGTAATATATACACCCATTAAAGACAGGATCTCA [...]
+chr4-04	EST_Human	nucleotide_match	301503	302080	263.000000	-	.	Target=BG338431.1 460 992 +;percentID=77.4;Gap=M29 D1 M15 I1 M61 D1 M1 D1 M1 D3 M6 D1 M12 I1 M96 D1 M22 D1 M10 D1 M15 D1 M7 I1 M4 D1 M12 D1 M7 D1 M28 D1 M3 D1 M6 D1 M4 D2 M1 D2 M4 D1 M1 D3 M1 D1 M2 D1 M6 D1 M1 D1 M5 D1 M6 D1 M14 D1 M3 D1 M7 I1 M31 D1 M11 D1 M4 I1 M3 I1 M3 D1 M4 D1 M15 D1 M8 D1 M11 D2 M1 D1 M15 D1 M1 D1 M9 D1 M1 D2 M4 D1 M2 D1 M3 D1 M1 D1 M10 ;sequence=GCTAAACCCAATGCTCAGCAATTTTCTCAAATAGTTTTACAGTTTTTCCAAGAGACT [...]
+chr4-04	EST_Human	nucleotide_match	301503	302223	508.000000	-	.	Target=BX115999.1 34 744 +;percentID=86.4;Gap=M95 I1 M93 D1 M47 D1 M141 D2 M1 D1 M56 I1 M2 I3 M52 D4 M1 D4 M77 D2 M1 D1 M99 I1 M40 ;sequence=GTGACAAGAGCAAAACTGCATCTCAAAAATAAAAAAGACAAATATTTTAAAATTTCTTCTTGTATTCATGCCCTTGGCAGTGGCTTTTATAGTCGTTCCCATCAAGAGACAGATTCTGCTTCCCAAACCTTGACTCTTTCTTGCCTTATTTGCACTGGCCAAAGCTGTGCACATGACAGTATGTCAGTTTGGTACCTAGGTTCAAACAGTTTTAAATGCTTCGTTTTGTTTTTCAGAACCCTTTCATCTCTATTAGAACAAGCCCATTTAACTTTCTGGAGGATAAA [...]
+chr4-04	EST_Human	nucleotide_match	301748	302080	253.000000	-	.	Target=BQ428430.1 539 870 +;percentID=89.1;Gap=M29 D1 M76 D1 M1 D1 M1 D3 M6 D1 M116 I1 M8 I1 M46 I1 M9 I1 M7 I1 M8 I1 M19 ;sequence=TTTGTAGGTATGATTAGTGCATTATAGGTGTTTTCAAATTTCTCCTATGATAAATTAAAAATGTAATGTTGGGCATTAATTTCCTAAACCCAATGCTCAGCAATTTTCTCAAATTGTTTACAGTTTTTCCAAGAGACTTCAGAACCATTCCCTGGAGTGAATTATTTCCAATGGTGAAGAGTAATGGATGGATGGCATGAGATTCTCAAAAAAATCTTGCTCCTATTTCAGAAGTGTCACTCCAGCCCCTTGAAGGTCCAGGAAACCTGGCTGAGTAGTGTGGTCTATGGAGGTGC [...]
+chr4-04	EST_Human	nucleotide_match	301841	302080	151.000000	-	.	Target=BG110742.1 584 803 +;percentID=85.9;Gap=M80 I1 M26 D1 M1 D1 M1 D3 M6 D1 M14 D1 M20 D1 M22 D1 M8 D1 M2 D1 M4 D1 M2 D1 M1 D1 M6 D1 M9 D1 M2 D2 M3 D1 M4 D1 M2 D1 M6 ;sequence=CCTGTAGTCCCAGCTACTCGGGAAGCTGAGGCAGGAGAATCGCTTGAACCCAGGATGCAGAGGTTGCAGTGAGCTGATGTTGTGCCACTGCAGTGCAGCCTGCCAACAGAGTAAGACCCGTCTCAACAACAACAACAAAAAAGAAGAAAATTTTTAGGAGACAATGTTTTTCCAAGAGACTTCAGAACCATTCCCTGGAGTGAATTATTTCCAATGGTGAAGAGTAATGGATGGATGGCATGAGATTCT [...]
+chr4-04	EST_Human	nucleotide_match	302004	302854	631.000000	-	.	Target=BQ722919.1 4 844 +;percentID=88.5;Gap=M208 I2 M220 D6 M28 D2 M73 I1 M116 I1 M22 I1 M11 I1 M40 I1 M30 D2 M1 D2 M3 D1 M1 D5 M1 D3 M4 D1 M35 I1 M4 I1 M15 I1 M7 I1 M7 I1 M3 ;sequence=CACTTGCCCTATGGCTGCTCCTAAATGTGGGGTCTTAGAAAACATCTTGTCCCTTCGAAGCATACTCTGCTGGTTGGCTAAATTGCACTGGGAAAAAATAGCAGCAGCCCTATTGCTATGTCACTTGCCTGCAGAGCAAAAGTTGATTCAGGAACAGTAATTTGACTTTGTCTATATTAAAAATCATAAATAGTCAACAAATGCAAAAAATGCAAAGAATTTGTAGGTATGATTAGTGCATT [...]
+chr4-04	EST_Human	nucleotide_match	302095	302557	344.000000	-	.	Target=BG338431.1 2 459 +;percentID=88.2;Gap=M37 I1 M95 D5 M28 D2 M189 I1 M70 I1 M3 I1 M30 D2 M2 
+chr4-04	EST_Human	nucleotide_match	302095	302640	422.000000	-	.	Target=BQ428430.1 1 538 +;percentID=89.6;Gap=M214 D6 M28 D2 M189 I1 M73 I1 M30 D2 M2 
+chr4-04	EST_Human	nucleotide_match	302096	302518	313.000000	-	.	Target=BG110742.1 166 583 +;percentID=88.1;Gap=M92 D6 M28 D2 M189 I1 M73 I1 M14 I1 M19 
+chr4-04	EST_Human	nucleotide_match	302253	302709	344.000000	-	.	Target=AU144283.1 1 451 +;percentID=87.8;Gap=M64 I1 M2 I1 M125 D1 M91 D6 M28 D2 M131 I1 M7 ;sequence=CAGGAACAGTAATTTGACTTTGTCTATATTAAAAATCATAAATAGTCAACAAATACAAAAAATACAAAGAGTTTGCAGATATGATCAGNGCATTATAGGNGTTTTCAAATTTCTCCTATGATAAATTAAAAATGTAATGTTGGACATTAATTTCCTAAACCCAATGCTCAGCAATTTTCTCAAATTGTTTCGCTTTTCCCAAGAGACTTCAGAACCATTCCCTGGAGNGAATTATTTCCAATGGTGAAGAGTAATGGATGGATGGGATGACATTCTCAAAAAAATCTTGCTCCTATTTCAGAAGNGTCACTCCAGCCCCTTGAAGGT [...]
+chr4-04	EST_Human	nucleotide_match	302268	302708	441.000000	-	.	Target=AA278523.1 1 441 +;percentID=100;sequence=AGGAACAGTAATTTGATTTAGTCTATATTAAAAATCATAAATAGTCTACAAATACAAAAAATAAAGAGTTTGCAGCTATGTTGAGTGCATTATAGGTGTTTTCAAATTTCTCCTATGATAAATTAAAAATGTAACGTTGGGCATTAATTTCCTAAACCCAATGCTCAGCAATTTCCTCAAATTGTTGCCAGTTTTTCCAAGAGACTTCAGAACCATTCCCTGGAGTGAATTATTTCCAATGGTGAAGAGTAAGGGGTGGATGGGATGAGATTCTAAAAAAAAAAAAAATCTTGCTTCTATTTCAGAAGTGTCACTCTTCAGCCCCGTGAAGGACACGAAAAGCTGGCTGAGTAGTGTGGTCTATGGAGGTGCAGGGGCT [...]
+chr4-04	EST_Human	nucleotide_match	302434	302891	456.000000	+	.	Target=AI703192.1 1 458 +;percentID=99.8;sequence=TAGAATCTTATCCCATCCACCCCTTACTCTTCACCATTGGAAATAATTCACTCCAGGGAATGGTTCTGAAGTCTCTTGGAAAAACTGGCAACAATTTGAGGAAATTGCTGAGCATTGGGTTTAGGAAATTAATGCCCAACGTTACATTTTTAATTTATCATAGGAGAAATTTGAAAACACCTATAATGCACTCAACATAGCTGCAAACTCTTTATTTTTTGTATTTGTAGACTATTTATGATTTTTAATATAGACTAAATCAAATTACTGTTCCTGAAACAACTTTTGCTCTGCAGGCAAGTGACATAGCAATAGGGCTGCTGATATTTTTTCCTGCTGCAATTTAGCCAACCAGCAGAGTATGCTTTGAAGGGCCAA [...]
+chr4-04	EST_Human	nucleotide_match	302464	302830	298.000000	+	.	Target=BQ365830.1 6 371 +;percentID=91.1;Gap=M16 D1 M8 D1 M28 D1 M125 I1 M2 I1 M185 ;sequence=CTACATCACGATAGGAAATAATCACTCCAGGAATGGTTCTGAAGTCTCTTGGGACAAGCGAAACAATTTGAGAAAATTGCTGAGCATTGGGTTTAGGAAATTAATGTCCAACATTACATTTTTAATTTATCATAGGAGAAATTTGTAAACACCTATAATGCACTGATCATATCTGCAAACTCTTTGTATTTTTTGTATTTGTTGACTATTTATGATTTTTAATATAGACAAAGTCAAATTACTGTTCCTGAATCAACTTTTGCTCTGTAGACAAATGACATAGCAATAGGGCTGCTGCTTTTTTTTCCCAGTGCAATTTAGCCGACCAGCAGAG [...]
+chr4-04	EST_Human	nucleotide_match	303000	303409	210.000000	-	.	Target=CV408888.1 19 450 +;percentID=78.5;Gap=M22 D1 M41 D1 M68 D1 M1 D1 M59 I1 M1 I1 M3 I4 M1 I3 M2 I1 M1 I3 M1 I1 M4 I5 M1 I1 M5 I1 M3 I1 M6 I1 M1 I5 M55 I1 M2 I2 M19 I1 M68 D1 M2 D3 M2 D2 M32 ;sequence=TAGAGGATCCCGTGTGTTCCTTTGTCTTTCATTGTTTACTCAGTTGAGTAAATATCATGGTTTCAGTTTTGGGGAATGCAATTTCTTACAGCAAAGTCCTTCCTCCACAATAATATTCACCACGGTCAGGCCACCTAGCACAGTGGGCTTAGTATGTGTGGAACTGGTTTGAATCAGGAGCAAAACAAGCAGTAGAGGTGAGTAGAGAACACAGGCGGGACTG [...]
+chr4-04	EST_Human	nucleotide_match	303000	303489	277.000000	+	.	Target=CB993178.1 47 558 +;percentID=80.4;Gap=M32 D2 M2 D3 M2 D1 M87 I2 M2 I1 M55 I5 M1 I1 M6 I1 M3 I1 M5 I1 M1 I5 M4 I1 M1 I3 M1 I1 M2 I3 M1 I4 M3 I1 M1 I1 M59 D1 M1 D1 M68 D1 M144 ;sequence=TCTAGCGAGGTGACAGCGTAGAACCAGGATTACAGGCGTGCGCCAGTTAAGCCAGAATCTTTAGAGTGAGACCCAGGCAATGGCGATTTTAGGCTCTCCAGGTGATTACAATATGCAACCATGCTCCCAAATGTCTGCTGTAAACCAACATCTTTCGGAGGACCAGTTGAAAATAATATTTCTCAAATTAATGTGAAAAGTGTTTGCTGTTGAGTTGCGGCCTTTCAGTCCCGCCT [...]
+chr4-04	EST_Human	nucleotide_match	303221	303489	184.000000	+	.	Target=CN268901.1 116 381 +;percentID=84.8;Gap=M53 D1 M1 D1 M68 D1 M144 ;sequence=CGCGTCCGAATTAATGTGAAAAGTGTTTGCTGTTGAGTTGCGGCCTTTCAGTCCCGCCTTTGTTCTCTACTCACCACTGTTGAGTTGTGGCCTTTCAGTCCCGCCTGTGTTCTCTACTCACCTCTACTGCTTGTTTTGCTCCTGATTCAAACCAGTTCCACACATACTAAGCCCACTGTGCTAGGTGGCCTGACCGTGGTGAATATTATTGTGGAGGAAGGACTTTGCTGTAAGAAATTGCATTCCCCAAAACTGAAACCATGATATTTACTCAACTGAGGTAAAAAATGAAAGACTAAGGGGGACTCCCAAGGGTCAGGGCAAGAATAAATACCTTGGAATATTA [...]
+chr4-04	EST_Human	nucleotide_match	303443	303570	128.000000	-	.	Target=BQ224228.1 63 190 +;percentID=100
+chr4-04	EST_Human	nucleotide_match	303625	303971	208.000000	+	.	Target=DB353038.1 4 348 +;percentID=81.3;Gap=M19 D1 M11 D3 M23 D1 M5 D2 M35 D1 M42 I1 M53 I2 M17 I3 M134 ;sequence=AAGATTAAATATGTAATATTTAAATTTTATTGAATGACATGCATACAGAAATATATGTCCAAAGCATTAACATAATGCTCAGTAAATTATTACAAACAAATACATTTGTGTAGGCATAGGATAGAACTAGCCTTGTTTCTGCCACACAAACCACTTTCTNTTTTCCTCCCCTCCAAAAGTAACCACAATCTTAAGAGCTAATGTTGTAGATAAAGTTTGTCTTTTTATACAATTATTTTATTAGAGAATATTTTAAACATATATGCAATAAGCAATGTAGTATAATAGACTGATGCTCAGCCTAAACATCTAC [...]
+chr4-04	EST_Human	nucleotide_match	303821	303971	119.000000	-	.	Target=CD514482.1 178 329 +;percentID=89.5;Gap=M135 I1 M16 ;sequence=CAGGTGATTCACATGCACATTAATAATTGTTAACTGGTAGTAATTCTGTAATTGAAAGGGAAACGCTTATACAGATGTACTGATTTGTCAGACAGGTACAGTAATGACTATGTTTCGATGCATATACATCTTATCTTACAGAAAATGAAAATAATAAAGTGGGGATGGGGAAGGAGTTGAAGTAGAAATTAAACAGAAATGAGACATAATTAGCAGATGTTCAGGTGGAGCATCAGCCTATTATACTATTTTGGTTACTGTGTATAAGTTAAAAATATTCTCTAATAAAACACTTGTATAAAAAGACAAACAATCTATAACATTGCCTCTTGGCTGGGCACGGTGGCTCACGCCTGTAA [...]
+chr4-04	EST_Human	nucleotide_match	303939	304316	180.000000	-	.	Target=BX483315.1 117 492 +;percentID=75.3;Gap=M3 D1 M12 I2 M5 D1 M11 D1 M5 D1 M3 D1 M59 I2 M105 D1 M6 I1 M120 I1 M26 D1 M9 D1 M6 ;sequence=ACCTGAGGCAGGAGAATCATATGAACCTGGGAGGCAGAGGTTGCAGTGAGCCGAGATCACGCCATTTCACTTCAACCTGGGTGACAGAGTGAGAGTCCCTCTCAAAAAAAACAAAAACAAAAACAACTTGATGAATAAAATTAAGAAAAATTGGGCCGGGCGCGGTGGCTCATGCTGGTAATCCCAGCACTTTGGGAGGCCGAGGTGGGCGGATCCCCTGAGGTCAGGAGTTTGAGGCCAGCCTGACCAACATGGAGAAACCTCCTCTCTACTAAAAATACAAAAAAT [...]
+chr4-04	EST_Human	nucleotide_match	304269	304456	147.000000	+	.	Target=DB353038.1 349 535 +;percentID=89.4;Gap=M8 D1 M179 
+chr4-04	EST_Human	nucleotide_match	304269	304455	113.000000	-	.	Target=CD514482.1 1 177 +;percentID=82.9;Gap=M109 D2 M39 D2 M3 D5 M18 D1 M8 
+chr4-04	EST_Human	nucleotide_match	304622	304820	165.000000	+	.	Target=AJ713840.1 33 235 +;percentID=91.6;Gap=M108 I2 M65 I2 M26 ;sequence=GCCGCAGTGGTGGTGGGAATTCAGAATAAAATAACAAATCAAAATGCATGTGCAATATGCGACCTGTGGGAGCATTTCATCAACAATGTCTCACAGTCATATGTGACCTTTACTGACTCGCCCAAAATTCGGTCATTTATACACCAAGTGCACATAAATTTCATAGTTTCCTATTAAAATTATATTTAATGCCTTTATAAAATCTAACTCAGTTTTCTGATCAAATTAAGTAACATT
+chr4-04	EST_Human	nucleotide_match	304622	304959	241.000000	+	.	Target=BX395253.2 14 346 +;percentID=87.1;Gap=M108 I2 M65 I2 M25 D1 M2 D1 M3 D1 M19 D1 M3 D1 M2 D1 M1 D2 M1 D1 M100 ;sequence=CCTCAGATAAAATAACAAATCAAAATGCATGTGCAATATGCGACCTGTGGGAGCATTTCATCAACAATGTCTCACAGTCATATGTGACCTTTACTGACTCGCCCAAAATTCGGTCATTTATACACCAAGTGCACATAAATTTCATAGTTTCCTATTAAAATTATATTTAATGCCTTTATAAAATCTAACTCAGTTTTCTGATCAAATTAAGTAACATTTTATATGACGTTTTAAGTTCCGTTTATATTAAACTTACATAATTTTATTAGGCAGCGTATGCGTGTCTACTACCAAATATTCTT [...]
+chr4-04	EST_Human	nucleotide_match	315735	315938	139.000000	+	.	Target=DB302170.1 356 558 +;percentID=84.3;Gap=M52 D1 M151 ;sequence=CTCTTGACCAGAAGATTTGTTTACCTACCATTTCATTGGTAGTATGGCCTGCGGTGACCATTTTTTTGTGTGTGTACAGCAGTCATACAGGCTTTGCCTTTAATGATCTCTTATGGTTAGAAAACACAATAAAAACAAACTGGCTACCTGGACAAATTGTATATTACCAGATCATCACTAGCAGCTTTCAGTTGCACTTCAGTCCTTTATCAAATTCATAAAGAATTGTTCTGGGAAGTGAGGAGCACCTCTGCCTGGCCACCCTGTCTGGGAAGTGAGGAGCCCCGCTTCCCGGGAGCCGCCCCATCTGGGAAGTGAGGAGCGCTTGCCTGGCCGCCCAACTGTCTGGGAAGTGTGGT [...]
+chr4-04	EST_Human	nucleotide_match	315736	315932	134.000000	+	.	Target=DB313739.1 353 548 +;percentID=84.3;Gap=M51 D1 M145 ;sequence=CTTGACCAGAAGATTTGTTTACCTACCATTTCATTGGTAGTATGGCCTGCGGTGACCATTTTTTTGTGTGTGTACAGCGTCATACAGGCTTTGCCTTTAATGATCTCTTATGGTTAGAAAACACAATAAAAACAAACTGGCTACTGGACAAATTGTATATTACCAGATCATCACTAGCAGCTTTCAGTTGCACTTCAGTCCTTTATCAAATTCATAAAGAATTGTTCTGGGAAGTGAGGAGCACCTCTGCCTGGCCACCCTGTCTGGGAAGTGAGGAGCCCCGCTTCCCGCGAGCCGCCCCATCTGGGAAGTGAGGAGCGCTTGCCTGGCCGCCCAACTGTCTGGGAAGTGAGGTGTGC [...]
+chr4-04	EST_Human	nucleotide_match	315736	315930	137.000000	+	.	Target=AA292824.1 253 447 +;percentID=85.1;sequence=ACGGTATGGGAAGTCAGGAGCGCCTCTGCCCAGCTGCCCTGTCTGGGAAGTAAGGAGCGCCTCTGCCTCGCCGCCATCCCGTCTGCGAAGTGAGGCGTGCCTCTGCCCGGCCTCCTCACCGTCTGGGAAATGAGAAGCGCCTCTGCCCGGCCACCGTCCCATCTGGGAAGTGAGGAGCGCTTCTGCCCAGCCACCGCCCTGTCTGGAAAGTGAGGAGCACCTCTGCCCAGCCCCCTCACCCTTTGTAAGGGAGGAGTGCCTCTGCCCAGCCCCTGCACCGTCTGGGAAGTGAGGAGCGCCTCTGCCCGGCCCCCTCACCATCTGGGAAGTGAGGAGCGTCTCTGCCCAGCCGCTGTGCAACCTTCCACGTGTGAAG [...]
+chr4-04	EST_Human	nucleotide_match	315736	315943	141.000000	+	.	Target=BQ018108.1 371 577 +;percentID=84.1;Gap=M51 D1 M156 ;sequence=TTTTTTTTTTTTTTTTCTCTTGACCAGAAGATTTGTTTACCTACCATTTCATTGGTAGTATGGCCTGCGGTGACCATTTTTTTGTGTGTGTACAGCGTCATACAGGCTTTGCCTTTAATGATCTCTTATGGTTAGAAAACACAATAAAAACAAACTGGCTACTGGACAAATTGTATATTACCAGATCATCACTAGCAGCTTTCAGTTGCACTTCAGTCCTTTATCAAATTCATAAAGAATTGTTCTGGGAAGTGAGGAGCACCTCTGCCTGGCCACCCTGTCTGGGAAGTGAGGAGCCCCGCTTCCCGCGAGCCGCCCCATCTGGGAAGTGAGGAGCGCTTGCCTGGCCGCCCAACTGT [...]
+chr4-04	EST_Human	nucleotide_match	315736	315943	141.000000	-	.	Target=DA935082.1 192 398 +;percentID=84.1;Gap=M156 D1 M51 ;sequence=CGGAACGCTGCAGCCCAGGCTTCCTCCCACAGTGGCCCTTGGAAGCAGGCCGCAGAGTAGACAGCTGCTCCTTTTGGAAGAGTCAGTCCCCTGTGTTTTCTGAACTGTTTTTCCTAGCATGTATGTGGGTAGAGCTTTCATGCATCTCTAGTAATAATAAGCTGAAATTAGTTTTTTTTTTAATTCTCCAATTTAAAACTTTTAATTAAAAAGTAAATTTTAATGTCGAAAATGCAAACTTGGGGAGGGCAGAAAGATCACACACAAGGCTGTCACTTCATACTTGCAGGATTGCACAGCAGCCGGGCAGAGGCGCTCCTCACTTCCCAGATGGGGCGGCGGGCAGCAGAGACGCACCT [...]
+chr4-04	EST_Human	nucleotide_match	315736	315943	141.000000	-	.	Target=DA513682.1 307 513 +;percentID=84.1;Gap=M156 D1 M51 ;sequence=CGCCAAATTGTAGTTGAAGCTAAGGAAGGGGAATCTGGCCCCTGCTGGGAGAGGGAACTGGAATGCCACACAAGGCAAGGCCTGCTTCCTTCCTTCCCCTCTGCTGCTGCTGCCTCGGAACGCTGCAGCCCAGGCTTCCTCCCACAGTGGCCCTTGGAAGCAGGCCGCAGAGTAGACAGCTGCTCCTTTTGGAAGAGTCAGTCCCCTGTGTTTTCTGAACTGTTTTTCCTAGCATGTATGTGGGTAGAGCTTTCATGCATCTCTAGTAATAATAAGCTGAAATTAGTTTTTTTTTTAATTCTCCAATTTAAAACTTTTAATTAAAAAGTAAATTTTAATGTCGAAAATGCAAACTTGGG [...]
+chr4-04	EST_Human	nucleotide_match	315736	315943	141.000000	+	.	Target=CB160516.1 352 558 +;percentID=84.1;Gap=M51 D1 M156 ;sequence=TTGACCAGAAGATTTGTTTACCTACCATTTCATTGGTAGTATGGCCTGCGGTGACCATTTTTTTGTGTGTGTACAGCGTCATACAGGCTTTGCCTTTAATGATCTCTTATGGTTAGAAAACACAATAAAAACAAACTGGCTACTGGACAAATTGTATATTACCAGATCATCACTAGCAGCTTTCAGTTGCACTTCAGTCCTTTATCAAATTCATAAAGAATTGTTCTGGGAAGTGAGGAGCACCTCTGCCTGGCCACCCTGTCTGGGAAGTGAGGAGCCCCGCTTCCCGCGAGCCGCCCCATCTGGGAAGTGAGGAGCGCTTGCCTGGCCGCCCAACTGTCTGGGAAGTGAGGTGTGCC [...]
+chr4-04	EST_Human	nucleotide_match	315736	315935	142.000000	-	.	Target=AA401684.1 15 214 +;percentID=85.5;sequence=TTTTAGCATTTTTTTTTTAATTAAAAAGTAAACTTTAATGTCGAAAATGCAAACTTGGGGAGGGCAGAAAGATCACACACAAGGCTGTCACTTCACACGTGGAAGGTTGCACAGCGGCTGGGCAGAGACGCTCCTCACTTCCCAGATGGTGAGGGGGCCGGGCAGAGGCGCTCCTCACTTCCCAGACGGTGCAGGGGCTGGGCAGAGGCACTCCTCCCTTACAAAGGGTGAGGGGGCT
+chr4-04	EST_Human	nucleotide_match	315736	315943	143.000000	+	.	Target=BU623852.1 258 462 +;percentID=85.1;Gap=M20 D1 M3 D2 M182 ;sequence=TTTTTTTTTTTTTTTTTTCTCTTGACCAGAAGATTTGTTTACCTACCATTTCATTGGTAGTATGGCCTGCGGTGACCATTTTTTTGTGTGTGTACAGCGTCATACAGGCTTTGCCTTTAATGATCTCTTATGGTTAGAAAACACAATAAAAACAAACTGGCTACTGGACAAATTGTATATTACCAGATCATCACTAGCAGCTTTCAGTTGCACTTCAGTCCTTTATCAAATTCATAAAGAATTGTTCTGGGAAGTGAGGAGCACCTCTGCCTGGCCACCCTGTCTGGGAAGTGAGGAGCCCCGCTTCCCGGGAGCCGCCCCATCTGGGAAGTGAGGAGCGCCTCTGCCCGGCT [...]
+chr4-04	EST_Human	nucleotide_match	315788	315935	94.000000	+	.	Target=BQ371442.1 79 227 +;percentID=82.8;Gap=M4 D1 M4 I1 M8 I1 M3 I1 M13 D1 M114 ;sequence=CTTGAGCATCCTGCTAGTCCTGAGCATCCTGCTGTCCTGAGCATCCTGCTGTCCTGGTCATCCTGCTGTCCTGATCATCCTGCTGTCCTGATCATCCTGCTGTCCTGATCATCCTGCTGCCCGGCTGCTGTGCAACCTTCCAAGAGTGAAGTGACAGCCTTGTGTGTGATCTTTCTGCCCTCCCCAAGTTTGCATTTTCGACATTGAAGTTTACTTTTTAATTAAAAAAAAGGAGATTGAGATCATTCTGGCCAACATGGTGAAACTCCGTCTCTACTGAAAATACAAGAATTAGGCCGGCATCGCGGTTTGTGCCTGTGGTCCCAGCTACTCGGGA
+chr4-04	EST_Human	nucleotide_match	315797	315948	94.000000	-	.	Target=BX504916.1 415 567 +;percentID=81;Gap=M9 I1 M143 ;sequence=AAGGTATTAGAGTGATATGAATTTCACTAGAAATATTGATAGTTTTGTTTTATTTCATTTTTTGAGAATGAGTCTCTGTCTGTTACCCAGGCTGGAGTGCAATGGTGCAATCTTGGCTCACTGCAACCTCCACCTCCTGGGTTCAAGCAATTCTCCTGCCTCAGCCTCCTGAGTAGCTGGGACTACAGGTGCGCACCACCATGTCTGGCTAATTTTTGTATTTTTACTAGAGAGGGGGTTTCACCATGTTGGCCAGGCTGGTCTCGAACTCCTGACCTCAGGTAATCCACCTGCCTCGGCTTCCCAAAGTGTTGGGATTACAGGTGTGAGGCACCACGCCCGAACGATAGTTTTATAAAACCT [...]
+chr4-04	EST_Human	nucleotide_match	316004	316385	197.000000	-	.	Target=BX504916.1 33 414 +;percentID=76.7;Gap=M24 I1 M18 I1 M2 D1 M201 I1 M1 I1 M66 D1 M1 D1 M11 D1 M2 D1 M36 I1 M15 
+chr4-04	EST_Human	nucleotide_match	319773	320263	483.000000	+	.	Target=BX485043.1 4 494 +;percentID=99.2;sequence=TGTTTTTTTTTTTTTTTTTGAGATGCAGTTTCGCTCCTGTTGCCCAGGCTGTAGTGCAATGGTGCAATCTCGGCTCACCGCAACCTCCGCCTCCCGGGTTCAAGCAACTCTCCTGCCTCAGCCTCCCAAGTAGCTGGGATTACATGCATGCCTGTAATTAACCATGCCTGGCTAATTTTGTATTTCTAGTAGAGATGGGGTTTCTCCATGTTGGTCAGGCTGGTCTCGAACTCCCGACCTCAGGTGATCCACCCGCCTCGGCCTCCCAAAGTGTTGGGATTACTGGCGTGAGCCACTGCACCTGGCTATTTTCATAGAAATTGACAAGCTGCTCTTTCTAAATTCTATACAGACATGCAAAAAAATCAAACACATGAG [...]
+chr4-04	EST_Human	nucleotide_match	320155	320306	140.000000	+	.	Target=R50084.1 2 153 +;percentID=93.4;sequence=NAAAACAAAAATGAAATTTATTTCTGANATTCTNACTAAAATNTTATACTAACCAAACAATATGGCATTACCATAAGANTTGATTTTGAGCTCCCACCCAGGNTTGATACAGNGCCAAAGGANCCCCCGCCCCAGCCAAGAAAANTGGTGAGT
+chr4-04	EST_Human	nucleotide_match	329659	330014	309.000000	+	.	Target=BF913255.1 2 356 +;percentID=93.5;Gap=M352 D1 M3 ;sequence=TGTTAGAATGCTGCTGGAGGATTCCGGGATCTCACAGGCTGGATTTCAGAGTCCTGAATTTTAGACTTTTCAAGGACATGTGCCCATCTGGGGTTCAGGCATAATAGTCTATATTAACTGATGGTGACTGTGTGCATGTCACCATAACATGTTACATTATTAACTCACTTAAGGGACTCCATGAGGCAGGTACTGCTATCTTCACTTTACAGAGGACATTGAGCACAGGCAAGTAACTTGCCCATGGTCACAAACCTGGAAATAGCAGAGCAGCTGGGATATGCACCCAGAGTCTGTGTACTTAGCCACAGTGCAGTCCTGCTTAACTGCAGAACAAAATTATGTGTGTGAGCTCTGATGGC [...]
+chr4-04	EST_Human	nucleotide_match	329659	330014	309.000000	+	.	Target=BF914407.1 2 356 +;percentID=93.5;Gap=M352 D1 M3 ;sequence=TGTTAGAATGCTGCTGGAGGATTCCGGGATCTCACAGGCTGGATTTCAGAGTCCTGAATTTTAGACTTTTCAAGGACATGTGCCCATCTGGGGTTCAGGCATAATAGTCTATATTAACTGATGGTGACTGTGTGCATGTCACCATAACATGTTACATTATTAACTCACTTAAGGGACTCCATGAGGCAGGTACTGCTATCTTCACTTTACAGAGGACATTGAGCACAGGCAAGTAACTTGCCCATGGTCACAAACCTGGAAATAGCAGAGCAGCTGGGATATGCACCCAGAGTCTGTGTACTTAGCCACAGTGCAGTCCTGCTTAACTGCAGAACAAAATTATGTGTGTGAGCTCTGATGGC [...]
+chr4-04	EST_Human	nucleotide_match	330002	330154	107.000000	+	.	Target=GD264276.1 1 159 +;percentID=85.5;Gap=M13 I4 M124 I1 M11 I1 M5 ;sequence=TGTGTAAGCATATGAGCATCTGCCCAAGCAGACAAGTGTCAAAGTACGCGAATGCCGTCCGAGCACTGCCTGAGCATACACTTCTCTCAAAGGGTTCTGCTCATCAACGGAGCCGGCCAGTGACTTTTCTGATCGCTTAATGGCATAAATACATGTATCCAGCCTCTCCACGCTGTTAAAACACAGAATCAAATTCTGCAGAGCCCATTTTCTCTGGCTCATGAAATTCTGTTGTAGGCCGAGAGTTCACATCGCTTTCAGTAACTGTAATTCTCTAAGCAGGTGTAGTTTCATCTTCAAACTCATCATCA
+chr4-04	EST_Human	nucleotide_match	330338	330923	395.000000	+	.	Target=BX952419.1 1 594 +;percentID=84.5;Gap=M23 D2 M36 I3 M1 I3 M39 D1 M65 I1 M1 I1 M1 I1 M34 I1 M2 I1 M93 D1 M9 I1 M9 D1 M251 I1 M17 ;sequence=CACCCTGCGGGGCTCCGCAGCTCGGGGTCACCCAGGGGTGTGGTCCCAGCTTTGCCCTCAATGCCCATGCTGTCCGCCCCGGCCCTGGCTTGGCTGACAGCGGCCAGTCCAGGTGGGGCTTGGGCTAGGGGCACGGCCCTCCCACCTTTCCAGAATCCAAGTCCTCGCCGCCACTGCCAGGTCCTGCCAATACCCCTGGTGGCCCTGGCAACACCCCAGTTGCAGCGTCGCCATCGCAGGGCAGACCCCGGCCAACCTCAAAGCGACTGTGCAGTGGGGCCAA [...]
+chr4-04	EST_Human	nucleotide_match	330419	330894	467.000000	+	.	Target=DB451844.1 1 476 +;percentID=98.9;sequence=TGGCTAGGCCGACGGCAGCCGGGTCCGGGTGGGGCTCGGGCTCGGGGCGCGCCCCTCCCATCTCTCCAGGGTCCGCGTCCTCGCTGCCGCCAGGTCCCGCCGAGATCCTCGGTGGCCCCGGCTCCAGCGGCTGCAGCGTCGCCATCGCCGGGCAGACCCCGGCCGACCTCAAAGCGACCGCGCGGTGGGGCCGGCGGGGACTGGGGCTGCGCAGCGCGGCCTGGGGTGGGGGCGGCGGGGCCCCCAGGAGCTCCTGGGAACCGAGGGTCCTGNGGCGGTCCCGCCCCGCACAGCTCCGGGTGAGCTTGGGGAGGGAGACACACTCTCAGCCCACCTCGCCCCGCCCGACAGCGCTCCGAGTCCTGAGTCCCCTCAACC [...]
+chr4-04	EST_Human	nucleotide_match	330616	331134	472.000000	-	.	Target=BU159504.1 1 520 +;percentID=95.4;Gap=M482 I1 M22 I1 M2 D1 M12 ;sequence=CGCAGCCTGCAGGCCGACCTCAGTCCGTCCTCACAGAGCCTAGTTGGGTGCACAGCTCTCCCTGACGCGCGAGGAGCAGGTTCACGGGAGTCGGTCGCGCATCCCCAGCGCCCTGCGGGCCTCGCACCGGCTGTGGCGGTGACCCCGGTGAGGAGGGCTTTGGTGCGGGTCACCGTTGCTGAGGACACCCTCCTCCCCCGGAAGCGCGGTCCTGGGGGTCTGGGGGGCGGGTCCCTGACCGCTGTAAACAATAGGTCGGTGGTGTCCACGCAGCAGGCAGCAAATTCTCAGGAAGTGAGCGTCCCGTCTTTGGCTTCACCTTCGTGTCTGTAGAATGGGGGTGAGGGG [...]
+chr4-04	EST_Human	nucleotide_match	316143	316248	57.000000	+	.	Target=BQ371442.1 228 333 +;percentID=77.6;Gap=M67 I1 M11 D1 M27 
+chr4-04	EST_Human	nucleotide_match	330657	331168	508.000000	-	.	Target=BM720074.1 1 512 +;percentID=99.6;sequence=CGAATCATCTCTCCACAAATCCTGCCTTCGGGGCCGCAGCCTGCAGGCCGACCTCAGTCCGTCCTCACAGAGCCTAGTTGGGTGCACAGCTCTCCCTGACGCGCGAGGAGCAGGTTCACGGGAGTCGGTCGCGCATCCCCAGCGCCCTGCGGGCCTCGCACCGGCTGTGGCGGTGACCCCGGTGAGGAGGGCTTTGGTGCGGGTCACCGTTGCTGAGGACACCCTCCTCCCCCGGAAGCGCGGTCCTGGGGGTCTGGGGGGCGGGTCCCTGACCGCTGTAAACAATAGGTCGGTGGTGTCCACGCAGCAGGCAGCAAATACTCAGGAAGTGAGCGTCCCGTCTTTGGCTTCACCTTCGTGTCTGTAGAATGGGGGTGA [...]
+chr4-04	EST_Human	nucleotide_match	331568	332172	360.000000	+	.	Target=DA386535.1 1 585 +;percentID=82;Gap=M37 D1 M26 D1 M5 D1 M55 I1 M149 I1 M1 I1 M22 D6 M1 D2 M1 D1 M163 D2 M4 D1 M7 D1 M2 D1 M1 D2 M2 D1 M1 D1 M3 D1 M6 D1 M2 D1 M18 D1 M57 I2 M17 
+chr4-04	EST_Human	nucleotide_match	331602	331775	162.000000	+	.	Target=AL700660.1 1 175 +;percentID=96.6;Gap=M92 I1 M82 
+chr4-04	EST_Human	nucleotide_match	331603	331775	169.000000	+	.	Target=DB135798.1 1 175 +;percentID=98.9;Gap=M91 I1 M64 I1 M18 
+chr4-04	EST_Human	nucleotide_match	331603	331775	171.000000	+	.	Target=BP200889.1 1 174 +;percentID=99.4;Gap=M91 I1 M82 
+chr4-04	EST_Human	nucleotide_match	331605	331775	165.000000	+	.	Target=DA757889.1 1 172 +;percentID=98.3;Gap=M89 I1 M82 
+chr4-04	EST_Human	nucleotide_match	331592	331812	92.000000	+	.	Target=DB024685.1 1 226 +;percentID=73.2;Gap=M13 D1 M26 D1 M5 D1 M55 I1 M56 I1 M4 I1 M2 D1 M1 D1 M20 I1 M2 I3 M15 I1 M1 I1 M10 I1 M6 ;sequence=ATCTGGCGCCGCTTTTGCGTCAGGCTTCTGCCTGAGCTCGGTTAGGGCCTCACCGACCTGCTTCCACCCCTCAGGGAGGCCTCAGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTCGTAGCTAAGACTCTACGACATCCCTGAAGCCGGGAAATGGTGTTGCTCTCTTTAACTCAGACCTGATCACCTGTTTGGAGCAAAGAAAAGAGCCCTTTAATGGGAAGACACATGAGACAGTAGCCAAAGCCCCAGGTGTGTGT [...]
+chr4-04	EST_Human	nucleotide_match	331603	331775	163.000000	+	.	Target=DA799182.1 1 174 +;percentID=97.1;Gap=M91 I1 M82 
+chr4-04	EST_Human	nucleotide_match	331607	332209	404.000000	+	.	Target=DA787270.1 1 587 +;percentID=85.4;Gap=M31 D1 M55 I1 M8 I1 M56 D1 M78 I3 M48 D2 M1 D5 M25 D1 M124 D1 M3 D1 M2 D1 M2 D2 M5 D1 M2 D1 M1 D1 M3 D1 M3 D1 M5 D1 M130 
+chr4-04	EST_Human	nucleotide_match	331606	332149	358.000000	+	.	Target=DA223739.1 3 530 +;percentID=85.1;Gap=M32 D1 M55 I1 M8 I1 M56 D1 M78 I3 M48 D2 M1 D5 M25 D1 M130 I1 M33 D7 M1 D2 M2 D2 M7 D1 M46 ;sequence=GTTTTTCCTCTGGCTCCTGCGAGGGCTTGGTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGGTGAGTGTGCGGGGCAGGGCGTCCGGAGGCTGGGGAGGCCTCATCGGAACCGGCGGGAAATGGCGGCGGCGGGACCGAGTCTGCGAACGGAGTCCCCGCTGCCGCCTCTC [...]
+chr4-04	EST_Human	nucleotide_match	331616	332417	476.000000	+	.	Target=DA735070.1 4 803 +;percentID=81.6;Gap=M16 D1 M5 D1 M55 I1 M149 I1 M1 I1 M22 D6 M1 D2 M1 D1 M163 D2 M4 D1 M7 D1 M2 D1 M1 D2 M2 D1 M1 D1 M3 D1 M6 D1 M2 D1 M18 D1 M57 I2 M17 D1 M22 D1 M133 I1 M10 I1 M7 I2 M1 I1 M1 I7 M1 I2 M2 I3 M52 I1 M10 I1 M4 
+chr4-04	EST_Human	nucleotide_match	331605	331775	169.000000	+	.	Target=DA224929.1 1 172 +;percentID=99.4;Gap=M89 I1 M82 
+chr4-04	EST_Human	nucleotide_match	331606	331775	168.000000	+	.	Target=DA418713.1 4 174 +;percentID=99.4;Gap=M88 I1 M82 
+chr4-04	EST_Human	nucleotide_match	331582	332256	412.000000	+	.	Target=DA736785.1 3 655 +;percentID=82.6;Gap=M23 D1 M26 D1 M5 D1 M55 I1 M149 I1 M1 I1 M22 D6 M1 D2 M1 D1 M163 D2 M4 D1 M7 D1 M2 D1 M1 D2 M2 D1 M1 D1 M3 D1 M6 D1 M2 D1 M18 D1 M57 I2 M17 D1 M22 D1 M60 
+chr4-04	EST_Human	nucleotide_match	331603	331775	171.000000	+	.	Target=DA803616.1 1 174 +;percentID=99.4;Gap=M91 I1 M82 
+chr4-04	EST_Human	nucleotide_match	331614	332348	447.000000	+	.	Target=CD518149.1 27 742 +;percentID=82.2;Gap=M9 I1 M9 D1 M5 D1 M55 I1 M149 I1 M1 I1 M22 D6 M1 D2 M1 D1 M163 D2 M4 D1 M7 D1 M2 D1 M1 D2 M2 D1 M1 D1 M3 D1 M6 D1 M2 D1 M18 D1 M57 I1 M3 I1 M14 D1 M14 I1 M8 D1 M41 D1 M105 I1 M5 ;sequence=GCTGGTANNCCGGTCCGGAATTCCCGTGGATTCCAGCCAGAGCTCGGTTAGGGCCTCATCGCTCTGCTCCCGCTCCTTAGGGAAGCCTCGGTGATTCTGCCACAGCCTCAGCCTCTGTGGCTCTGTGACCTGCCGGTATTGGATGATTCGTATCTAAGACTCTGGGACACTCCTGAAGTCGGGAAATGGTGAGT [...]
+chr4-04	EST_Human	nucleotide_match	331615	331775	151.000000	+	.	Target=BX485984.1 1 162 +;percentID=96.9;Gap=M79 I1 M82 
+chr4-04	EST_Human	nucleotide_match	331606	332262	383.000000	+	.	Target=DA732237.1 4 640 +;percentID=80.8;Gap=M26 D1 M5 D1 M55 I1 M149 I1 M1 I1 M22 D6 M1 D2 M1 D1 M165 D1 M5 I1 M22 D2 M1 D1 M3 D8 M4 D1 M8 D1 M57 I2 M17 D1 M18 D1 M3 D1 M25 I1 M33 I1 M8 
+chr4-04	EST_Human	nucleotide_match	331603	331775	171.000000	+	.	Target=DB074733.1 1 174 +;percentID=99.4;Gap=M91 I1 M82 
+chr4-04	EST_Human	nucleotide_match	331603	331775	171.000000	+	.	Target=DA533464.1 1 174 +;percentID=99.4;Gap=M91 I1 M82 
+chr4-04	EST_Human	nucleotide_match	331605	331775	163.000000	+	.	Target=DB221880.1 1 173 +;percentID=97.7;Gap=M89 I1 M64 I1 M18 
+chr4-04	EST_Human	nucleotide_match	331633	332240	422.000000	+	.	Target=DN999087.1 10 602 +;percentID=86.3;Gap=M61 I1 M8 I1 M56 D1 M78 I3 M48 D2 M1 D5 M25 D1 M124 D1 M3 D1 M2 D1 M2 D2 M5 D1 M2 D1 M1 D1 M3 D1 M3 D1 M5 D1 M161 
+chr4-04	EST_Human	nucleotide_match	246258	246797	375.000000	+	.	Target=DB269867.1 18 566 +;percentID=85.3;Gap=M41 I3 M30 I1 M7 I1 M1 I2 M43 D1 M20 I1 M319 I2 M2 I1 M1 I1 M40 D1 M15 D1 M18 
+chr4-04	EST_Human	nucleotide_match	331640	331775	134.000000	+	.	Target=CD654571.1 12 148 +;percentID=99.3;Gap=M54 I1 M82 
+chr4-04	EST_Human	nucleotide_match	246494	246827	326.000000	+	.	Target=BM987769.1 1 334 +;percentID=98.8;sequence=TTTTTTTTTTTTTTTTCTGAAAATCTTTAAATTTTTTAATTTGGCCATGTTGCCCTAATATTTTGTATGCATTGTAATATTTGCTTGTTATTTGAAGATTAACAAAAAGCCATTTGTCACAATCTTTACAATGTTGCTTTGTCCTGACATAGTCTGAAACCAATTGTCTTTGATAGAGATTATGGGAGCCTCCCATACATGTTTTAAGGATGTGTCTTGTCTGGAATTTCATGTTTTTCAGTTAAAAGGGTTTGTTCATGTTTCTTCTTAACAGTCTCTAATCACTTGCCCTACCTACTTTCTGTATTTAACACTGCAGTCTGCTCCTGAAACA
+chr4-04	EST_Human	nucleotide_match	246886	246953	29.000000	+	.	Target=BU155753.1 321 388 +;percentID=72.5;Gap=M33 I1 M5 D1 M29 ;sequence=GTCCTCTTCTCCTAGGGGCCCAGCCTCTGTGGCCCTGTGACCTGCAGGTATTGGGAGATCCCCAGCTAAGACGCCAGGTCCTCCTGGAAGCCTAGAAATGGGACCACTGACAATTAGGGATGTGACTGTAGAATTCTCTCTGGAGGAGTGGCATTGCCTGGACACTGCACAGCAGAATTTATATAGGGATGTGATGTTAGAGAACTACAGAAACCTGGTCTTCCTGGGTATTGCTGTCTCTAAGCCAGACCTGATCACCTGTCTGGAGCAAGGAAAAGAGCCCTGTAATATGAAGAGACATGAGATGGTAGCCAAACCCCCAGCATTTTATTTAATGGGAGAATGAAACCAGTGT [...]
+chr4-04	EST_Human	nucleotide_match	330657	331010	350.000000	+	.	Target=BU739888.1 33 386 +;percentID=99.4;sequence=TTTTTTTTTTTTTTTTTTCCTGGTTTTTTTCTGGCCCCCAGGAGCTCCTGGGAACCGAGGGTCCTGGGGCGGTCCCGCCCCGCACAGCTCCGGGTGAGCTTGGGGAGGGAGACACACTCCCAGCCCACCTCGCCCCGCCCGACAGCGCTCCGAGTCCTGAGTCCCCTCACCCCCATTCTACAGACACGAAGGTGAAGCCAAAGACGGGACGCTCACTTCCTGAGTATTTGCTGCCTGCTGCGTGGACACCACCGACCTATTGTTTACAGCGGTCAGGGACCCGCCCCCCAGACCCCCAGGACCGCGCTTCCGGGGGAGGAGGGTGTCCTCAGCAACGGTGACCCGCACCAAAGCCCTCCTCACCGGGGTCACCGCCA [...]
+chr4-04	EST_Human	nucleotide_match	247211	247276	40.000000	-	.	Target=BF223897.1 329 392 +;percentID=81.8;Gap=M23 D1 M1 D1 M40 ;sequence=GTCTTTTTCTTATGTATATTTGAATTTGAGAATTTATGAAGGACTTTAACATATTTATCACATTGAAATATTTTGCTCTGGGTAGTTGTCAAACATTGGTTAAGTCCATTATAACCTCTTTTGTGCACCTTATGCTCATCCGCACTTTTACAGCCTTTTCTTAATTGTAAATTCTCATGTCCATATTTTCCATATCTTCTCAGTATCACTTTTTGAAAAGAATCTTTTAAGCCCTGCTTTGGCCAAAGGTCTTGGGCAAAATGAGAACACACAACTGAAAGAAATAAAAGTAACAATTACCCCACTTACTAGACTCAGATGAATATACTTTACAAATCTAACCTATAAAAATATA [...]
+chr4-04	EST_Human	nucleotide_match	331633	332403	476.000000	+	.	Target=AL521029.3 10 775 +;percentID=82.9;Gap=M5 D1 M55 I1 M149 I1 M1 I1 M22 D6 M1 D2 M1 D1 M163 D2 M4 D1 M7 D1 M2 D1 M1 D2 M2 D1 M1 D1 M3 D1 M6 D1 M2 D1 M18 D1 M57 I2 M17 D1 M22 D1 M151 I3 M1 I7 M1 I2 M2 I3 M52 
+chr4-04	EST_Human	nucleotide_match	247236	247782	181.000000	+	.	Target=BG026620.1 241 764 +;percentID=70.8;Gap=M3 D1 M1 D2 M5 D1 M7 I1 M19 I1 M5 I1 M3 D1 M24 D1 M3 I1 M1 I1 M6 D1 M14 I2 M12 I1 M26 D1 M82 D2 M2 D1 M3 D2 M3 D1 M111 D1 M15 D1 M9 I4 M1 I1 M25 D1 M3 D1 M5 D1 M12 D1 M7 D1 M2 D1 M7 D1 M1 D1 M7 I1 M16 D1 M6 D1 M12 D1 M3 D3 M4 D1 M2 D1 M7 D2 M9 D1 M7 D1 M2 D1 M1 D1 M7 I1 M9 
+chr4-04	EST_Human	nucleotide_match	247254	247433	54.000000	+	.	Target=DA311782.1 388 567 +;percentID=67.7;Gap=M9 I1 M3 I1 M8 D1 M14 I1 M7 I1 M9 D1 M11 I1 M9 D3 M5 D1 M15 I1 M84 
+chr4-04	EST_Human	nucleotide_match	247299	247614	213.000000	-	.	Target=BF223897.1 8 327 +;percentID=84.2;Gap=M8 I1 M268 I1 M2 I3 M6 D1 M31 
+chr4-04	EST_Human	nucleotide_match	247340	247667	191.000000	+	.	Target=BE177799.1 5 337 +;percentID=79.6;Gap=M16 D1 M250 I1 M4 I5 M57 ;sequence=ATAGTTCTTTCAGTTGTGTGTCTCATTTTGCCCAAGACCTTTGGCCAGAGCAGAGCATAAAAGATTCTTACCAAAAAGTGATACTGAGAAAATTTGAAAAATGTGGACATGGCAATTTACACTTTAAAAAAGGCTGTGAAAGTGTGGATGAGTGTAAGTTACACAAAAGAGGTTATAATGGACTTAACCAATGTTTGACAACTACCCAGAGCAAAATATTTCAATGTGGTAAATATGTGAAAGTCTTTCATCAATTTTCAAATTCAAAGAGACATAAAAGAAGACATACTGAAAAAAAACCTTTGAAATATATAGAAGGTGACAAAGCTTTTAACCAGTCCTCAACCC [...]
+chr4-04	EST_Human	nucleotide_match	247345	247648	178.000000	+	.	Target=DA572502.1 22 331 +;percentID=80.1;Gap=M101 I1 M3 D1 M80 D1 M4 I1 M67 I2 M1 I1 M1 I1 M2 I2 M43 ;sequence=CATGAGATGGTAGCCAACCCCTCAGTTATATGTTCTCATTTTGCCCAAGATTTTTGGCCAGAGCAGAACATAAAAGATTCTTTCCAAAAAGTGATACTGAAAAGATATGAAAAACGTGGACATGGAAATTTACAGTTAATAAAAAGGTGTGAAAGTGTAGATGAGTGTAAGGTGCACACAGGAGGTTATAATGGACTTAACCAGTGTAGTACAACTACCCAGAGCAAAGTATTTCAATGTGATAAATATGGGAAAGTCTTTCATAAATTTTCAAATTCAAATAGACATAATATAAGACATACTGAAAAAAAACCTT [...]
+chr4-04	EST_Human	nucleotide_match	331633	331775	86.000000	+	.	Target=BI463333.1 16 158 +;percentID=81.5;Gap=M5 D1 M55 I1 M56 I1 M4 I1 M2 D1 M1 D1 M17 
+chr4-04	EST_Human	nucleotide_match	247345	247845	264.000000	+	.	Target=DA737145.1 326 831 +;percentID=77.5;Gap=M101 I1 M3 D1 M80 D1 M4 I1 M67 I2 M1 I1 M1 I1 M2 I2 M65 D1 M5 I1 M5 D1 M3 I1 M34 D2 M2 D2 M27 I1 M2 D1 M51 I1 M2 I1 M13 I1 M24 ;sequence=ACTCTGTGTCCTGTGCTCCTACAGGCCCAGCCTCTGTGGCCCTGTGACCTGCAGGTATTGGGAGATCCACAGCTAAGACACCAGGACCCCTGGAAGCCTAGAAATGGGACCATTGCAATTTAGAGATGTGGCCATAGAATTCTCTCTGGAGGAGTGGCATTGCCTGGACACTGCACAGCGGAATCTATATAGGAATGTGATGTTAGAGAACTACAGTAACCTGGTCTTCCTTGGTATTGTTGTC [...]
+chr4-04	EST_Human	nucleotide_match	247346	247752	232.000000	+	.	Target=CV022989.1 128 536 +;percentID=79.8;Gap=M184 I1 M5 D1 M66 I2 M1 I1 M1 I1 M2 I2 M63 I1 M4 D1 M37 I1 M6 D1 M2 D4 M29 ;sequence=ATGTTAAAGAACTACAGAAACCTGGTCTTCCTGGGTATTGCTGTCTCTAAGCCAGACCTGATCACCTGTCTGGAGCAAGGAAAAGAGCCCTGTAATATGAAGAGACATGAGATGGTAGCCAAACCCCCAGTTATGTGTTCTCATATTGCTGAAGACCTTTGCCCAGAGCGAGACATAAAATATTTTTTCCAAAAAGTCATACTGAGGAGATATGATAAATGTGAACATGAGAATTTACAATTAAGAAAGGGCTGTAAAAGTGTGGATGAGTGTAAGGTGTGCAAAGGAGGTTATAA [...]
+chr4-04	EST_Human	nucleotide_match	247346	247770	235.000000	+	.	Target=BU509138.1 453 884 +;percentID=79;Gap=M261 I1 M4 I5 M12 D1 M4 I1 M8 I1 M15 I1 M16 I1 M25 D2 M6 D1 M4 I1 M6 D1 M8 D1 M11 I1 M16 I1 M23 ;sequence=GTTCGCGTGGGCGCAGCTCCAGGTCTCGTCTTCACTGCTCTATGTCCTCTGCTCCTAGAGGTCCACCTTCTGTGGCCCCGTTACCTGCAGGTATTGGGAGATCCACAGCTAAGACGCCAGGACTCCCTGGAAGCCTAGAAATGGCCAGAAAAACTGGGAAAATCACAGGCTCTTCCACTTACTGGATGTTTGACAAAATATTCTTCTTGGGCCAAAAACATTGGCATTACTGGGACCACTGACATTTAGGGATGTGGCCATAGAATTCTCTCTGGAG [...]
+chr4-04	EST_Human	nucleotide_match	247346	247804	239.000000	+	.	Target=BU167813.1 350 812 +;percentID=76.9;Gap=M261 I1 M7 I3 M1 I2 M6 D1 M14 I1 M33 I1 M4 D1 M34 D1 M11 D2 M17 I1 M66 ;sequence=TCTGCGTCTCGTCTTCGTTCTTCTGTGTCCTCTGCTGCTAGAGGTCCAGCCTCTGTGGCTCTGTGACCTGCGGGTATTGGGGGATCCACAGCTAAGACGCCAGGACCCCCCGGAAGCCTAGAAATGGGACCATTGACATTTATGGATGTGGCCATAGAATTCTGTCTGGAGGAGTGGCAATGCCTGGACATTGCACAGCAGAATTTATATAGGAATGTGATGTTAGAGAACTACAGAAACCTGGTCTTCCTGGGTATTGCTGTCTCTAAGCCAGACCTGATCACCTGTCTGGAGCAAGAA [...]
+chr4-04	EST_Human	nucleotide_match	247346	247804	260.000000	+	.	Target=BM465909.1 220 680 +;percentID=79.5;Gap=M261 I1 M4 I5 M56 I1 M6 D1 M18 D2 M6 D1 M4 I1 M6 D1 M8 D1 M9 D1 M4 I1 M70 ;sequence=GACCACTGACATTTAGGGATGTGGCCATAGAATTCTCTCTGGAGGAGTGGCAATGCCTGGACACTTCACAGCAGAATTTGTATAGGAATGTGATGTTAGATAACTACAGAAACCTGGTCTTCCTGGGTATTGCTGTCTCTAAGCCAGACCTGATCACTTGTCTGGAGCAAGGAAAAGAGCCCTGCAATATGAAGAGACATGCGATGGTAGCCAAACCCCCAGTTGTGTGTTCTCATTTTGCCCAAGACCTTTGGCCAAAGCAGGGCTTAAAAGATTCTTTTCAAAAAGTGATACTGA [...]
+chr4-04	EST_Human	nucleotide_match	247346	247804	262.000000	+	.	Target=EL737031.1 128 588 +;percentID=79.7;Gap=M261 I1 M4 I5 M56 I1 M6 D1 M18 D2 M6 D1 M4 I1 M6 D1 M8 D1 M9 D1 M4 I1 M70 ;sequence=ATGTTAGATAACTACAGAAACCTGGTCTTCCTGGGTATTGCTGTCTCTAAGCCAGACCTGATCACTTGTCTGGAGCAAGGAAAAGAGCCCTGCAATATGAAGAGACATGCGATGGTAGCCAAACCCCCAGTTGTGTGTTCTCATTTTGCCCAAGACCTTTGGCCAAAGCAGGGCTTAAAAGATTCTTTTCAAAAAGTGATACTGAGAAGATATGGAAAATATGGACATGAGAATTTACAATTAAGAAAAGGCTGTAAAAGTGCGGATGAGCATAAGGTGCACAAAAGAGGTTATAAT [...]
+chr4-04	EST_Human	nucleotide_match	331625	332403	481.000000	+	.	Target=BQ050525.1 1 773 +;percentID=83;Gap=M7 D1 M5 D1 M55 I1 M149 I1 M1 I1 M22 D6 M1 D2 M1 D1 M163 D2 M4 D1 M7 D1 M2 D1 M1 D2 M2 D1 M1 D1 M3 D1 M6 D1 M2 D1 M18 D1 M57 I2 M17 D1 M22 D1 M151 I3 M1 I7 M1 I2 M1 I1 M1 I2 M52 
+chr4-04	EST_Human	nucleotide_match	247346	247824	329.000000	+	.	Target=DA666860.1 73 552 +;percentID=85.5;Gap=M260 I1 M3 I5 M60 D1 M1 D1 M1 D1 M46 D4 M38 D1 M4 I1 M38 I2 M20 
+chr4-04	EST_Human	nucleotide_match	247347	247715	251.000000	+	.	Target=DB215628.1 71 446 +;percentID=84.7;Gap=M74 I1 M185 I1 M5 I5 M19 D1 M2 I1 M38 D1 M3 I1 M41 
+chr4-04	EST_Human	nucleotide_match	331618	331775	156.000000	+	.	Target=BM800016.1 1 159 +;percentID=99.4;Gap=M76 I1 M82 
+chr4-04	EST_Human	nucleotide_match	247347	247715	251.000000	+	.	Target=DA803972.1 70 445 +;percentID=84.7;Gap=M74 I1 M185 I1 M5 I5 M19 D1 M2 I1 M38 D1 M3 I1 M41 
+chr4-04	EST_Human	nucleotide_match	247348	247895	531.000000	+	.	Target=BG718573.1 177 726 +;percentID=98.5;Gap=M379 I1 M52 I1 M96 I1 M9 D1 M11 
+chr4-04	EST_Human	nucleotide_match	247348	247947	584.000000	+	.	Target=BI463333.1 158 756 +;percentID=98.8;Gap=M531 I1 M31 D1 M31 D1 M5 
+chr4-04	EST_Human	nucleotide_match	331640	332486	407.000000	+	.	Target=BE540535.1 1 802 +;percentID=78.3;Gap=M7 D1 M46 I1 M8 I1 M24 D1 M31 D1 M14 I1 M1 I1 M30 I1 M8 I1 M25 I3 M40 D1 M7 D2 M1 D5 M25 D1 M5 D1 M21 D1 M5 D1 M8 D1 M27 I1 M2 I1 M59 D1 M10 D5 M1 D1 M2 D1 M2 D1 M5 D1 M27 I1 M36 D1 M6 D1 M22 I1 M20 I1 M4 I1 M41 D1 M17 I1 M7 I1 M12 D1 M10 D1 M9 D2 M12 D1 M5 D1 M7 I1 M10 D1 M2 D1 M4 D1 M8 D1 M5 D1 M10 D1 M4 D1 M7 I1 M10 D2 M6 D2 M8 D1 M9 D3 M2 D1 M8 D4 M6 D1 M8 D2 M3 D1 M2 D1 M5 D1 [...]
+chr4-04	EST_Human	nucleotide_match	331668	331775	80.000000	+	.	Target=CN278786.1 34 142 +;percentID=88.3;Gap=M26 I1 M56 I1 M4 I1 M2 D1 M1 D1 M17 ;sequence=CCCACGCGTCCGCCGACCTGCTTCCACCCCTCAGGGAGGCCTCAGTGATTCGGCCACAGCCTCAGCCTCCGTCGCTCTGTGACCTGCGGGTATTGGATGATTCGTAGCTAAGACTCTACGACATCCCTGAAGCCGGGAAATGGTGTGTGTTCTCATTTTACCCAAGATCTTTGGCCAGTGCAGGGCATAGAAGATTCATTCCACAAACTTATACTGAGAAGATATGAGAAATGTGGACAGAAGAATTTACAATTAAGGAAAGGCTCTAAAAGTGTGAATAAG
+chr4-04	EST_Human	nucleotide_match	247348	248030	662.000000	+	.	Target=DA730641.1 186 866 +;percentID=98.4;Gap=M638 D1 M34 D1 M9 
+chr4-04	EST_Human	nucleotide_match	331668	332269	392.000000	+	.	Target=CN310770.1 20 602 +;percentID=84.7;Gap=M26 I1 M149 I1 M1 I1 M22 D6 M1 D2 M1 D1 M163 D2 M4 D1 M7 D1 M2 D1 M1 D2 M2 D1 M1 D1 M3 D1 M6 D1 M2 D1 M18 D1 M57 I2 M17 D1 M22 D1 M73 
+chr4-04	EST_Human	nucleotide_match	247349	247430	60.000000	+	.	Target=DB056944.1 397 478 +;percentID=86.6
+chr4-04	EST_Human	nucleotide_match	247349	247430	60.000000	+	.	Target=DA703911.1 385 466 +;percentID=86.6
+chr4-04	EST_Human	nucleotide_match	247349	247437	69.000000	+	.	Target=CN265977.1 349 437 +;percentID=88.8
+chr4-04	EST_Human	nucleotide_match	247349	247428	70.000000	+	.	Target=AL700660.1 399 478 +;percentID=93.8
+chr4-04	EST_Human	nucleotide_match	247349	247433	71.000000	+	.	Target=DA324408.1 203 287 +;percentID=91.8
+chr4-04	EST_Human	nucleotide_match	247349	247438	76.000000	+	.	Target=DC411795.1 290 379 +;percentID=92.2
+chr4-04	EST_Human	nucleotide_match	247349	247438	76.000000	+	.	Target=DC411178.1 290 379 +;percentID=92.2
+chr4-04	EST_Human	nucleotide_match	247349	247452	81.000000	+	.	Target=DA240008.1 292 395 +;percentID=88.5
+chr4-04	EST_Human	nucleotide_match	247349	247439	81.000000	+	.	Target=DA757889.1 396 486 +;percentID=94.5
+chr4-04	EST_Human	nucleotide_match	247349	247462	84.000000	+	.	Target=DA422914.1 389 503 +;percentID=87;Gap=M108 I1 M6 
+chr4-04	EST_Human	nucleotide_match	247349	247526	136.000000	+	.	Target=DA685292.1 360 537 +;percentID=88.2
+chr4-04	EST_Human	nucleotide_match	247349	247526	136.000000	+	.	Target=DA917260.1 389 566 +;percentID=88.2
+chr4-04	EST_Human	nucleotide_match	247349	247526	136.000000	+	.	Target=DB187202.1 387 564 +;percentID=88.2
+chr4-04	EST_Human	nucleotide_match	247349	247537	141.000000	+	.	Target=BP420960.1 291 479 +;percentID=87.3
+chr4-04	EST_Human	nucleotide_match	247349	247540	142.000000	+	.	Target=BP273260.1 290 481 +;percentID=87
+chr4-04	EST_Human	nucleotide_match	247349	247537	143.000000	+	.	Target=DB111318.1 393 581 +;percentID=87.8
+chr4-04	EST_Human	nucleotide_match	247349	247539	145.000000	+	.	Target=DB201918.1 397 587 +;percentID=88
+chr4-04	EST_Human	nucleotide_match	247349	247549	149.000000	+	.	Target=DA246722.1 310 510 +;percentID=87.1
+chr4-04	EST_Human	nucleotide_match	247349	247535	149.000000	+	.	Target=BP231503.1 396 582 +;percentID=89.8
+chr4-04	EST_Human	nucleotide_match	247349	247544	150.000000	+	.	Target=DB203397.1 351 546 +;percentID=88.3
+chr4-04	EST_Human	nucleotide_match	247349	247546	152.000000	+	.	Target=CD689816.1 396 593 +;percentID=88.4
+chr4-04	EST_Human	nucleotide_match	247349	247565	159.000000	+	.	Target=DR423054.1 308 524 +;percentID=86.6
+chr4-04	EST_Human	nucleotide_match	247349	247579	169.000000	+	.	Target=DA741721.1 290 520 +;percentID=86.6
+chr4-04	EST_Human	nucleotide_match	247349	247579	169.000000	+	.	Target=DB231938.1 292 522 +;percentID=86.6
+chr4-04	EST_Human	nucleotide_match	247349	247579	169.000000	+	.	Target=DB095116.1 277 507 +;percentID=86.6
+chr4-04	EST_Human	nucleotide_match	247349	247584	174.000000	+	.	Target=DA118777.1 298 533 +;percentID=86.9
+chr4-04	EST_Human	nucleotide_match	247349	247579	177.000000	+	.	Target=CD701489.1 343 573 +;percentID=88.3
+chr4-04	EST_Human	nucleotide_match	247349	247596	180.000000	+	.	Target=DA787611.1 293 540 +;percentID=86.3
+chr4-04	EST_Human	nucleotide_match	247349	247594	180.000000	+	.	Target=DB158549.1 292 537 +;percentID=86.6
+chr4-04	EST_Human	nucleotide_match	247349	247597	181.000000	+	.	Target=DA799229.1 290 538 +;percentID=86.3
+chr4-04	EST_Human	nucleotide_match	247349	247599	183.000000	+	.	Target=DA758630.1 304 554 +;percentID=86.5
+chr4-04	EST_Human	nucleotide_match	247349	247601	185.000000	+	.	Target=DA399659.1 262 514 +;percentID=86.6
+chr4-04	EST_Human	nucleotide_match	247349	247626	208.000000	+	.	Target=DB170146.1 290 573 +;percentID=87.7;Gap=M257 I1 M3 I5 M18 
+chr4-04	EST_Human	nucleotide_match	247349	247662	219.000000	+	.	Target=DA766426.1 260 579 +;percentID=85.4;Gap=M257 I1 M5 I5 M19 D1 M2 I1 M30 
+chr4-04	EST_Human	nucleotide_match	247349	247671	224.000000	+	.	Target=DA806351.1 238 566 +;percentID=85.2;Gap=M257 I1 M5 I5 M19 D1 M2 I1 M39 
+chr4-04	EST_Human	nucleotide_match	247349	247759	226.000000	+	.	Target=BU155753.1 389 807 +;percentID=78.8;Gap=M181 I1 M5 D1 M66 I2 M1 I1 M1 I1 M2 I2 M63 I1 M4 D1 M27 I1 M10 I1 M13 D2 M3 D1 M9 I1 M9 I1 M5 I1 M7 
+chr4-04	EST_Human	nucleotide_match	247349	247691	233.000000	+	.	Target=CN399123.1 237 585 +;percentID=84.6;Gap=M257 I1 M5 I5 M19 D1 M2 I1 M38 D1 M3 I1 M17 
+chr4-04	EST_Human	nucleotide_match	247349	247800	245.000000	+	.	Target=BI560805.1 390 830 +;percentID=80.5;Gap=M200 I1 M31 D1 M15 D1 M9 I1 M3 I5 M2 I1 M19 I2 M7 I1 M12 I1 M7 I1 M7 D1 M5 D1 M1 D1 M8 D1 M2 D1 M23 I1 M5 D1 M5 D4 M1 D1 M14 D1 M2 D1 M6 D1 M9 D3 M8 D1 M6 D1 M1 D1 M10 D2 M1 D1 M8 
+chr4-04	EST_Human	nucleotide_match	247349	247711	249.000000	+	.	Target=DA309597.1 227 595 +;percentID=84.9;Gap=M257 I1 M5 I5 M19 D1 M2 I1 M38 D1 M3 I1 M37 
+chr4-04	EST_Human	nucleotide_match	247349	247758	260.000000	+	.	Target=CD654571.1 372 771 +;percentID=83.7;Gap=M257 I1 M3 I5 M21 D1 M2 D1 M2 D3 M1 D1 M30 D1 M3 I1 M11 I1 M4 D1 M21 D1 M7 D5 M14 D1 M2 D1 M3 D1 M7 D1 M4 
+chr4-04	EST_Human	nucleotide_match	247349	247803	261.000000	+	.	Target=BQ069369.1 289 758 +;percentID=80.3;Gap=M257 I1 M5 I5 M10 I1 M9 D1 M2 I1 M38 D1 M4 I1 M6 I1 M9 I1 M14 I1 M15 D1 M3 D3 M12 I1 M16 I1 M8 I1 M5 I1 M4 I1 M9 I1 M6 I1 M6 I1 M5 I1 M6 
+chr4-04	EST_Human	nucleotide_match	247349	247607	270.000000	+	.	Target=DA571532.1 386 641 +;percentID=81.7;Gap=M106 D2 M2 D1 M3 D2 M3 D1 M137 I2 M1 I1 M1 
+chr4-04	EST_Human	nucleotide_match	247349	247858	279.000000	+	.	Target=CD652116.1 249 755 +;percentID=79;Gap=M257 I2 M1 I1 M1 I1 M3 I2 M19 I1 M2 D1 M38 D1 M4 I1 M44 D1 M3 D3 M24 I1 M3 D1 M20 D1 M9 D1 M29 D1 M9 D1 M4 D1 M2 D1 M15 I1 M10 
+chr4-04	EST_Human	nucleotide_match	247349	247631	283.000000	+	.	Target=DB024685.1 279 561 +;percentID=100
+chr4-04	EST_Human	nucleotide_match	247362	247667	191.000000	+	.	Target=BG391074.1 1 313 +;percentID=81.8;Gap=M27 D1 M70 I1 M147 I1 M4 I5 M56 I1 M1 ;sequence=TTTTGCCCAAGACCTTTGGCCAAAGCAGGCTTAAAAGATTCTTTTCAAAAAGTGATACTGAGAAGATATGGAAAATATGGACATGAGAATTTACAATATAAGAAAAGGCTGTAAAAGTGCGGATGAGCATAAGGTGCACAAAAGAGGTTATAATGGACTTAACCAATGTTTGACAACTACCCAGAGCAAAATATTTCACTGTGATAAATATGTTAAAGTCCTTCATAAATTCTCAAATTCAAATATACATAAGAAAAGACAAACTGGAAAGAAACCTTTCAAATGTAAAGAATGTGGCAAATCATGTTGCATACTTTCACAACTAACTCAGCATA [...]
+chr4-04	EST_Human	nucleotide_match	247386	247804	217.000000	+	.	Target=AL705298.1 2 422 +;percentID=77;Gap=M221 I1 M7 I3 M1 I2 M6 D1 M14 I1 M33 I1 M4 D1 M38 D1 M1 D2 M4 D1 M84 ;sequence=AGCAGCATATAAAAGATCCTTTCCAAAAAGCGACACTGAGAAGATATAAAAACTGTGAACATAAAAATGTACATTTAAAAAAAGACCCTAAAAGTGTGGATGAGTGTAAGGTGCACAGAGGAGGTTATAATGGATTTAACCAATGTTTGCCAGCTACCCAGAGCAAAATATTTCTATTTGATAAATGTGTGAAAGCCTTTCATAAATTTTCAAATTCAAACAGACATAAGATAAGCCATACTGAAAAAAAACTTTTCAAATGCAAAGAATGTGGCAAATCATTTTGCATGCTTCCACATCTAGCTC [...]
+chr4-04	EST_Human	nucleotide_match	334972	335150	108.000000	+	.	Target=BG999393.1 8 183 +;percentID=81.9;Gap=M15 D1 M3 D2 M21 D1 M15 D1 M10 D1 M44 I2 M62 I1 M3 ;sequence=CCCCGGTTCTGGGTAGCTGGGATACGTGCGTGACACCACGNCCGGCTAATTTCTGTGTTTTTAGTAGATATGGGATTCACCATATTGGCCAGGCTGGTCTCGAACTCCTGACCTTAGGTGATCCACCCACCTCGGTCTTCCAAAGTACTGGGATTACAGGCATGAGCCACCGCGCCCAGCCCTATAGTTATTATTTCTATTGCTTTTACCTTGTGAAGACTAAATATTTAGCTTCTAATATACATGTCCTAGAAAACACTATGCATTTTGGTTAAATTCCTTGTTACTGTATGTTATAAAATAGACAGGGAATTGGGTGAAA [...]
+chr4-04	EST_Human	nucleotide_match	247396	247715	188.000000	+	.	Target=DN997781.1 8 327 +;percentID=81.1;Gap=M59 D2 M2 D1 M3 D2 M3 D1 M76 I1 M61 I6 M65 D1 M3 I1 M37 D1 M3 ;sequence=GCACGAGGAAGATTCATTCCACAAACTTATACCAAAAGGACATGAGAAACGTGGACATGAGAATTTAAGAAAAACTTGTAAAAGTATAAATGAGTGTAAGGTGCAGAAAGGTGGTTATAATAGAATTAACCAATGCTTATTAACTACCCANGAAAAAAACAATTCAATCTAATATATGTGTCAAAGTTTTTCATAAATTTTCAAATTCAAACAAAGATAAGATAAGATATACTGGAGATAAAACCTTTAAATGTAAAGAATGTGGCAAATCATTTCACGTGCTCTCACGCCTAACTCAACACAAAAGAATT [...]
+chr4-04	EST_Human	nucleotide_match	335150	335283	96.000000	-	.	Target=AI221100.1 5 141 +;percentID=86.1;Gap=M79 I2 M2 I1 M53 ;sequence=TTTTTTTTTTTTTTCTAGACCAATTATATTAAAAGCTAATTATTTATTCTTAGCAAGGTAAAAACAACACAAATAATAACAACACTTTCTCTTCTGTCAATGAACAGCTGATCAGATGGTGGCATTAAAACTCACAAAACAATAAAAGGGAAGTAACACAAATTAAGCTTAAGTCTCCATACAGTTTCTGTCTTTGTACTGAACACACGATGCTGAATTCAATCATTTATTCATGTGCTCTAGACTGCAAGTTCCTTGATGGTAGGGACCATGACTGCTTTATGTCTTTTTCTAATGATCATATGAAATAGAAGCAATTAGCTTATTGATCAGTTTGAGTCTCCAGATTCCTCATTT [...]
+chr4-04	EST_Human	nucleotide_match	247435	247667	149.000000	+	.	Target=BP420445.1 4 243 +;percentID=82.5;Gap=M172 I1 M4 I5 M56 I1 M1 ;sequence=GGAAAATATGGACATGAGAATTTACAATTAAGAAAAGGCTGTAAAAGTGCGGATGAGCATAAGGTGCACAAAAGAGGTTATAATGGACTTAACCAATGTTTGACAACTACCCAGAGCAAAATATTTCAATGTGATAAATATGTTAAAGTCCTTCATAAATTCTCAAATTCAAATATACATAAGAAAAGACAAACTGGAAAGAAACCTTTCAAATGTAAAGAATGTGGCAAATCATGTTGCATACTTTCACAACTAACTCAGCATAAGAAAACTGCTACTAGAGTGAATTTCTACAAATGTAAGACATGTGGAAAAGCCTTTAACCAGTTCTCAAATCTTACTAAACATA [...]
+chr4-04	EST_Human	nucleotide_match	335150	335264	87.000000	-	.	Target=AW135251.1 14 131 +;percentID=88.1;Gap=M60 I2 M2 I1 M53 ;sequence=TTTTTTTTTTTTTTTATATTAGAAGCTAATTATTTATTCTTAGCAAGGTAAAAACAACACAAATAATAACAACAATTTCTCTTCTGTCAATGAACAGCTGATCAGATGGTGGCATTAAAACTCACAAAACAATAAAAGGGAAGTAACACAAATTAAGCTTAAGTCTCCATACAGTTTCTGTCTTTGTACTGAACACACGATGCTGAATTCAATCATTTATTCATGTGCTCTAGACTGCAAGTTCCTTGATGGTAGGGACCATGACTGCTTTATGTCTTTTTCTAATGATCATATGAAATAGAAGCAATTAGCTTATTGATCAGTTTGAGTCTCCAGATTCCTCATTTTTCACCAAA [...]
+chr4-04	EST_Human	nucleotide_match	247455	247715	149.000000	+	.	Target=BP336027.1 1 266 +;percentID=80;Gap=M8 D1 M10 D1 M55 I1 M5 D1 M66 I2 M1 I1 M1 I1 M2 I2 M63 I1 M4 D1 M37 I1 M5 ;sequence=ACAATTAAGAAAGGCTGTAAAGTGTGGATGAGTGTAAGGTGTGCAAAGGAGGTTATAATGGACTTAACCAATGTCTGATAACTACCCAGAGCAAAATGTATCAATGTGATAAATATGTAAAAGTCTTCTATAAGTTTTCAAATTCAGATAGACATAAGATAAGACATACTGAAAAGAAAACTTGCAAATGTAAAGAATGTGGCAAATCATTTTGCATGCTTTCACAACTAACTCGACATAAGAGAATTCATATTAGAGAGAATTCCCACAAATGTGAAGAATGTGGCAAAGCCTTTAACCA [...]
+chr4-04	EST_Human	nucleotide_match	335150	335270	91.000000	+	.	Target=AW020056.1 378 501 +;percentID=87.9;Gap=M53 I1 M2 I2 M66 ;sequence=GCACGAGTGCAGACTGGGGTCAGTCTGACAAGGTCTAATTCTGCTCCCATTTCAGAGGAAGATAAGTGACTCATGCAGGGTTTGTTCCTCCCCTCACAGAAAGAATCTCCTTGGTTTGTACCCAGATAAGAATTGCTCCAGTTTTCTGGTTCTTTGGTGAAAAATGAGGAATCTGGAGACTCAAACTGATCAATAAGCTAATTGCTTCTATTTCATATGATCATTAGAAAAAGACATAAAGCAGTCATGGTCCCTACCATCAAGGAACTTGCAGTCTAGAGCACATGAATAAATGATTGAATTCAGCATCGTGTGTTCAGTACAAAGACAGAAACTGTATGGAGACTTAAGCTTA [...]
+chr4-04	EST_Human	nucleotide_match	335305	335796	339.000000	-	.	Target=AI379940.1 3 493 +;percentID=85.1;Gap=M16 D1 M40 D1 M80 I1 M83 D1 M3 I1 M32 D2 M2 D1 M180 D1 M34 I3 M1 I1 M14 
+chr4-04	EST_Human	nucleotide_match	247460	247614	105.000000	-	.	Target=BF508454.1 25 180 +;percentID=84;Gap=M8 I1 M147 ;sequence=TTTTTTTTTTTTTTTTTGCCTTTTTCTTATGTATATTTGAATTTGAGAATTTATGAAGGACTTTAACATATTTATCACATTGACATATTTTGCTCTGGGTAGTTGTCAAACATTGGTTAAGTCCATTATAACCTCTTTTGTGCACCTTATGCTCATCCGCACTTTTACAGCCTTTTCTTA
+chr4-04	EST_Human	nucleotide_match	335427	335766	200.000000	-	.	Target=N20005.1 3 351 +;percentID=81.1;Gap=M19 D2 M87 I1 M10 I7 M37 I1 M36 D1 M3 I1 M32 D2 M2 D1 M14 I1 M52 I1 M10 I1 M12 I1 M5 I1 M15 ;sequence=TATAGTTACTTTGAGACTTGTGAAAAATCCACTGAAACTGCAAAGATGGAGAACAGGTTGCTGGATGGGATGTCTCTAGAAATACTGGTTTTAATTTTACATAAAATAATTTAAGTACATTAAATTCAAAGTACATTGCCTTTCTCCATTTATCAGCTTTTGGTGTTTCAGGAAATTGGGAGCACCAGCTCTGGAGAGGCAGTAGGAATAGCTACTCCAAACTCTGATCTTCTCTAAGCAGTTCTGTGAGGGTATTTCAGTGTGGGGTCAGACCTGGACAAGG [...]
+chr4-04	EST_Human	nucleotide_match	247956	248409	180.000000	+	.	Target=BM800562.1 506 990 +;percentID=72.4;Gap=M60 D1 M5 I1 M52 I1 M42 I1 M8 I1 M5 I1 M14 I1 M10 I1 M10 I1 M13 I1 M11 I1 M10 I2 M1 I1 M8 I1 M2 I1 M7 I1 M11 I1 M23 I1 M1 I1 M10 D1 M3 I1 M9 I1 M20 I1 M6 I1 M10 I1 M3 I1 M8 I1 M18 I1 M5 I1 M22 I1 M12 I1 M3 I1 M2 I1 M11 I1 M17 ;sequence=GGACGCGTGGGTTGCAATTTAGAGATGTGGCCATAGAATTCTCTCTGGAGGAGTGGCATTGCCTGGACACTGCACAGCGGAATCTATATAGGAATGTGATGTTAGAGAACTACAGTAACCTGGTCTTCCTTGGTATTGTTGTCTC [...]
+chr4-04	EST_Human	nucleotide_match	247956	248468	284.000000	+	.	Target=DA732282.1 220 736 +;percentID=78.2;Gap=M60 D1 M5 I1 M52 I1 M123 I2 M62 I1 M3 D1 M47 I1 M33 D1 M3 I1 M36 D1 M53 D1 M14 I1 M7 I1 M10 ;sequence=CCAAAAAGTGATACTGAGAAGATATGAAAAACGTGGACATGGAAATTTACAGTTAATAAAAAGGTGTGAAAGTGTAGATGAGTGTAAGGTGCACACAGGAGGTTATAATGGACTTAACCAGTGTAGTACAACTACCCAGAGCAAAGTATTTCAATGTGATAAATATGGGAAAGTCTTTCATAAATTTTCAAATTCAAATAGACATAATATAAGACATACTGAAAAAAAACCTTTCAAATGCATAGAATGTGGCAAAGCTTTTAACCAGTTCTCAACCCT [...]
+chr4-04	EST_Human	nucleotide_match	335206	335452	147.000000	+	.	Target=BG999393.1 185 436 +;percentID=80.8;Gap=M69 D1 M5 I1 M82 D1 M3 I1 M50 I1 M22 I1 M2 I2 M1 I1 M11 
+chr4-04	EST_Human	nucleotide_match	247956	248575	285.000000	+	.	Target=BG289439.1 224 851 +;percentID=75.3;Gap=M60 D1 M5 I1 M52 I1 M123 I2 M14 I1 M48 I1 M3 D1 M81 D1 M2 I1 M51 I1 M6 I1 M2 I1 M1 I1 M12 D1 M3 I1 M8 I2 M11 I1 M1 I1 M15 I1 M5 I1 M10 D1 M5 I1 M12 D1 M7 I1 M3 I1 M8 D1 M2 D1 M7 D1 M4 D1 M5 I1 M1 I1 M6 D1 M11 D1 M5 D1 M5 D1 M7 D1 M4 ;sequence=CTTTCCAAAAAGTGATACTGAGAAGATATGAAAAACGTGGACATGGAAATTTACAGTTAATAAAAAGGTGTGAAAGTGTAGATGAGTGTAAGGTGCACACAGGAGGTTATAATGGACTTAACCAGTGTAGTACAACTA [...]
+chr4-04	EST_Human	nucleotide_match	335150	335319	127.000000	+	.	Target=T79074.1 94 269 +;percentID=87.5;Gap=M53 I1 M2 I2 M62 I1 M6 I1 M18 I1 M29 ;sequence=ATGAATAAATGATTGAATTCAGCATCGTGTGTTCAGTACAAAGACAGAAACTGTATGGAGACTTAAGCTTAATTTGTGTTACTTCCCTTTTATTGTTTTGTGAGTTTTAATGCCACCATCTGATCAGCTGTTCATTGACAGAAGAGAAATTGTTGTTATTATTTGTGTTGTTTTTACCTTGCTAAGAATAAATAATTAGCTTCTAATATAATTGGGTCTAGGAAAAACATAAGGGTTTTGGGTTAAATTCCNTGTTATTGTGTGTTATAATGTTATAAAATAGGGGGNATTAGGCCTAAAATAGGGTTAAGGGTACNGGGA
+chr4-04	EST_Human	nucleotide_match	248067	248563	276.000000	+	.	Target=DA572502.1 332 829 +;percentID=78.7;Gap=M3 D1 M117 I1 M1 I1 M56 D1 M7 I1 M90 I1 M3 D1 M90 D1 M26 D1 M8 D1 M17 I1 M6 I1 M12 D1 M11 I1 M19 I1 M6 I1 M11 D1 M6 
+chr4-04	EST_Human	nucleotide_match	248108	248718	607.000000	-	.	Target=AW291262.1 18 628 +;percentID=99.5;sequence=TTTTTTTTTTTTTTTTTAACAATATTCTTCACTTTATTTGCTGTTTAAAGCCAAAGGAAACATATTACCAGAAATGTCATTCAACTATGTTATCAACTATGTTTCTCACCTGTCTGAATTCTCTGGTGTACAGTAAGGGTTGAGGACCAAGTAAAATCTTTGCCACATTCTTCACATGTGTAGGGTTTCTCTCCAATATGAATATTCGTATGTTCATTCAGGCTTCTGGACCATCTAAAGGCTTTGCCACATTCTTTACATTTGTAGGGTTTCTCTGCAGTATGAATTTTCTTATGTTCATTCAGTGCAGAGGACTGTCTAAAGGCTTTGCCACATTCTTCACATTTGTAGGGTTTTTGCCCANAATGAATTCTCTT [...]
+chr4-04	EST_Human	nucleotide_match	335150	335264	87.000000	-	.	Target=AA628705.1 3 120 +;percentID=88.1;Gap=M60 I2 M2 I1 M53 ;sequence=TTTTATATTAGAAGCTAATTATTTATTCTTAGCAAGGTAAAAACAACACAAATAATAACAACAATTTCTCTTCTGTCAATGAACAGCTGATCAGATGGTGGCATTAAAACTCACAAAACAATAAAAGGGAAGTAACACAAATTAAGCTTAAGTCTCCATACAGTTTCTGTCTTTGTACTGAACACACGATGCTGAATTCAATCATTTATTCATGTGCTCTAGACTGCAAGTTCCTTGATGGTAGGGACCATGACTGCTTTATGTCTTTTTCTAATGATCATATGAAATAGAAGCAATTAGCTTATTGATCAGTTTGAGTCTCCAGATTCCTCATTTTTCACCAAAGAACC
+chr4-04	EST_Human	nucleotide_match	248136	248432	181.000000	+	.	Target=BP336027.1 267 565 +;percentID=80.7;Gap=M51 I2 M246 
+chr4-04	EST_Human	nucleotide_match	248187	248720	502.000000	-	.	Target=DB369343.1 1 535 +;percentID=96.8;Gap=M228 D2 M194 D1 M22 I1 M6 I1 M4 I1 M15 I1 M62 ;sequence=GGAACAATATTCTTCACTTTATTTGCTGTTTAAAGCCAAAGGAAACATATTACTAGAAATGTCATTCAACTATGTTATCAACTATGTTTCTCACCTGTCTGAATTCTCTGGTGTACAGTAAGGGTTGAGGACCAAGTAAAATCTTTGCCACATTCTTCACATGTGTAGGGTTTCTCTCCAATATGAATATTCGTATGTTCATTCAGGCTTCTGGACCATCTAAAGGCTGCCACATTCTTTACATTTGTAGGGTTTCTCTGCAGTATGAATTTTCTTATGTTCATTCAGTGCAGAGGACTGTCTAAAGGCTTTGCCACATTCTTCACA [...]
+chr4-04	EST_Human	nucleotide_match	331694	331775	60.000000	+	.	Target=CN278785.1 3 84 +;percentID=88.1;Gap=M56 I1 M4 I1 M2 D1 M1 D1 M17 
+chr4-04	EST_Human	nucleotide_match	248205	248373	106.000000	+	.	Target=BX100770.1 550 718 +;percentID=81.2;sequence=CTGGAGCGGACAGGGTGGCTTCCGGGTTTGGCGGGTACTTTGTCTCTCGCTCTAGCCGGAGCTGCAGGTCTCGTCTTCCCTGGTCTGTGTCCTCTTCTCCTAGGGGCCCAGCCTCTGTGGCCCTGTGACCTGCAGGTATTGGGAGATCCCCAGCTAAGACGCCAGGTCCTCCTGGAAGCCTAGAAATGTTATGTGTTCTCATATTGCTGAAGACCTTTGCCCAGAGCGAGACATAAAATATTTTTTCCAAAAAGTCATACTGAGGAGATATGATAAATGTGAACATGAGAATTTACAATTAAGAAAGGGCTGTAAAAGTGTGGATGAGTGTAAGGTGTGCAAAGGAGGTTATAATGGACTTAACCAATGTCTGATA [...]
+chr4-04	EST_Human	nucleotide_match	248216	248527	206.000000	+	.	Target=DN997781.1 328 639 +;percentID=83
+chr4-04	EST_Human	nucleotide_match	248217	248336	81.000000	+	.	Target=DB215628.1 447 566 +;percentID=84.4;Gap=M31 I1 M3 D1 M85 
+chr4-04	EST_Human	nucleotide_match	248218	248318	53.000000	+	.	Target=BU167813.1 813 916 +;percentID=77.4;Gap=M30 I1 M16 I1 M5 I1 M50 
+chr4-04	EST_Human	nucleotide_match	248218	248400	75.000000	+	.	Target=BM465909.1 681 873 +;percentID=73.1;Gap=M39 I1 M12 D1 M32 I1 M7 I1 M9 I1 M5 I1 M14 I1 M8 I1 M7 I1 M16 I2 M8 I2 M17 D1 M7 
+chr4-04	EST_Human	nucleotide_match	248218	248362	87.000000	+	.	Target=AL705298.1 423 568 +;percentID=80.4;Gap=M105 I1 M40 
+chr4-04	EST_Human	nucleotide_match	248253	248457	114.000000	+	.	Target=BP420445.1 244 447 +;percentID=78.7;Gap=M2 D1 M55 D1 M4 I1 M18 I1 M6 D1 M117 
+chr4-04	EST_Human	nucleotide_match	331568	331775	206.000000	+	.	Target=DA460146.1 1 209 +;percentID=99.5;Gap=M126 I1 M82 
+chr4-04	EST_Human	nucleotide_match	248253	248599	181.000000	+	.	Target=BG391074.1 314 657 +;percentID=77.1;Gap=M2 D1 M55 D1 M4 I1 M18 I1 M6 D1 M161 D1 M2 I1 M40 D1 M29 D1 M24 
+chr4-04	EST_Human	nucleotide_match	248253	248576	181.000000	+	.	Target=BE177799.1 338 653 +;percentID=79.4;Gap=M175 I1 M2 D1 M73 D1 M16 D1 M8 D1 M11 D1 M5 D1 M9 D1 M4 D1 M3 D1 M9 
+chr4-04	EST_Human	nucleotide_match	248385	248497	77.000000	+	.	Target=DA803972.1 446 558 +;percentID=84.2
+chr4-04	EST_Human	nucleotide_match	248580	249122	517.000000	-	.	Target=DB362556.1 1 543 +;percentID=97.1;sequence=GGAGACGGAGTCTCACTCTGTCGCCTAGGCTGGCGTGCAGTGCAGTGGCGCTATCTAGGCTCACTGCAAGCTCTGCCTCCTGGGTTCACACCATTCTCCTGCCTCAGCCTCCTGAGTAGCTGGGACTACAGGCACTCACCACCATGCCCAGTTATTTTTTTGTATTTTTAGTAGAGATGGGGTTTCACCATGTTAGCCAGGATGGTCTTGACCTCCTGAACTTGTGATCCGCCTGCCTTGGCCTCCCAAAGTGCTGGGATTATAGGCATGAGCCACTGCGCCTGGCCTACTCTGATGGATTATTACATGGTGTATGCCTGTATTCAAATAACTAATATATGCCAGAAATATGTACATATACTATGTGCCTACAAAAAT [...]
+chr4-04	EST_Human	nucleotide_match	248935	249438	336.000000	+	.	Target=AA017090.1 1 529 +;percentID=83.9;Gap=M11 I1 M16 D1 M100 D1 M37 D1 M1 D1 M47 I1 M50 D1 M45 I1 M43 I1 M7 I1 M21 I1 M4 I1 M3 I1 M4 I1 M6 I1 M8 I1 M3 I1 M10 I1 M2 I1 M7 I1 M3 I2 M8 I1 M7 I1 M1 I1 M4 I1 M3 I1 M3 I1 M1 I1 M7 I1 M2 I1 M7 I1 M4 I1 M4 I1 M6 I1 M14 ;sequence=GTGAAACCCTATTCTCTACTAAAAATACAAAATGTGGCCAGGCCTGGTGGTGTGTGTCTGTAGTCCCAGCTACTCAGGAGGCTGAGGCAGGAGAATCACTTGAACCTGGGAGGCGGAGGTTGCGGTGANCGAGATTGTGCCACTGCACGCCANC [...]
+chr4-04	EST_Human	nucleotide_match	249003	249445	440.000000	-	.	Target=CR746939.1 25 467 +;percentID=99.5;sequence=AGCGCTGGAGAGTTTTTTTTTTTTTTTTCTTACACCTAACGGTTTATTTTTAGAGCAATACATTTATATATTTAACTTCATGTAAATAAAAATGAAAAGTCCGTATGTGTTTGCAGGACAAGACACTACATGTTCAAAGACAAATATGAAACATTTTTTTTAAGTATTCATTCAGGACTCANAAACATATGAATTATACTTTGATATATTACAATCACAAAACGATCTGTAGTAAAAAATAATTGTACATTGAAAAATAAAGTGTATAACTGGACTTGTGTAATACAAAGAATAAATACTTAAGGTGATGAATATCTCATTTACTCTGATGGATTTTTTCTTTTTTTGGAGACGGAGTCTCACTCTGTCGCCTAGGC [...]
+chr4-04	EST_Human	nucleotide_match	249194	249789	478.000000	+	.	Target=AW876428.1 8 601 +;percentID=90.3;Gap=M54 D1 M7 D1 M55 I1 M7 D1 M470 ;sequence=GACGAGTAGTCGAGGTATACACTATATTTTTCAATGTACAATTATTTTTCACTACAGATCGTCCGTGATGCAATATATCAAAGTACAATCCATATGTATCTGAGTCCTGAATGAATACTTAANGAAAAATGTTCATATTTGTCCTTGAACATGCAGTGTCTTGTCCTGCAAACACATACGGACTTTTCATTTTCATCCACATGAAGTTAAACATACAAATGCACTGCTCCAAAAATAAACCGTTAGGTGCAAGAAAACTACAGAGCAAGCAATAGTGCTTGCGCGAGAGTCTGCACCCACCCTCCAAAGAAAAGATCAACATTGGAACAAAGAAGACTCTCT [...]
+chr4-04	EST_Human	nucleotide_match	249195	249712	500.000000	+	.	Target=AW876304.1 12 530 +;percentID=98.3;Gap=M4 I1 M514 
+chr4-04	EST_Human	nucleotide_match	331644	332345	383.000000	+	.	Target=BG251450.1 1 681 +;percentID=80;Gap=M50 I1 M149 I1 M1 I1 M22 D6 M1 D2 M1 D1 M80 D1 M6 D1 M77 D1 M5 I1 M5 D1 M16 D2 M1 D1 M3 D7 M1 D1 M1 D1 M10 D1 M44 D1 M6 I1 M5 I1 M8 I1 M6 I1 M27 D1 M14 I1 M3 D1 M27 D1 M6 I1 M17 I1 M1 I1 M23 D1 M19 D1 M8 D1 M26 
+chr4-04	EST_Human	nucleotide_match	249196	249783	486.000000	+	.	Target=AW876242.1 1 588 +;percentID=91.3;sequence=TCGAGTTATACACTTTATTTTTCAATGTACAATTATTTTTCACTACAGATCGTTCCGTGATTGCAATATATCAAAGTACAATCCATATGTTTCTGAGTCCTGAATGAATACTTAACAAAAATGTTTCATATTTGTCCTTGAACATGCAGTGTCTTGTCCTGCAAACACATACGGACTTTTCATTTTCATCCACATGAAGTTAAACATACAAATGCACTGCTCCAAAAATAAACCGTTAGGTGCAAGAAAACTACAGAGCAAGCAATAGTGCTTGCGCGAGAGTCTGCACCCACCCTCCAAAGAAAAGATCAACATTGGAACAAAGAAGACTCTCTCATAAGGTGGACAATTCACTAGAAATCCAGAAACCCAAAACAC [...]
+chr4-04	EST_Human	nucleotide_match	249236	249804	282.000000	-	.	Target=BU785955.1 42 630 +;percentID=77.2;Gap=M28 I1 M1 I2 M5 I1 M3 I2 M10 D1 M7 D1 M3 D1 M33 D1 M13 I1 M50 I1 M1 I3 M25 I2 M1 I2 M1 I3 M24 I3 M5 I1 M62 I1 M98 D1 M56 D2 M10 D1 M2 D1 M48 D1 M2 D2 M2 D1 M33 I1 M1 I5 M6 I1 M3 I3 M23 
+chr4-04	EST_Human	nucleotide_match	330936	331116	179.000000	+	.	Target=BX503083.1 2 182 +;percentID=99.4
+chr4-04	EST_Human	nucleotide_match	249593	250186	342.000000	+	.	Target=BG564801.1 18 627 +;percentID=80.9;Gap=M28 I1 M1 I3 M1 I1 M1 I1 M1 I1 M22 I4 M13 I2 M1 I2 M33 I1 M16 I2 M1 I2 M57 I2 M1 I1 M35 D3 M3 D1 M70 I3 M12 I1 M5 I1 M17 D2 M1 D1 M1 D1 M4 D1 M1 D1 M35 I1 M40 D1 M51 D3 M39 I1 M90 ;sequence=AAACATTCTATATTTTCTTCTTTTTATTTAATGACTCTAGAATCTAATGGATTGTCGTTGAGAATCTCCCCATACAAACTCCTTGTTTTTATTTGTCTGGTGCTCATGCTAGAGCTATAATTTCTTTGATTCTCTTTTTTGTTTTCACTTCATGAAGTGTTTATTATGTGAGCTGGTCAGAAATTATAAGAA [...]
+chr4-04	EST_Human	nucleotide_match	336052	336604	549.000000	+	.	Target=DA016989.1 1 554 +;percentID=99.6;Gap=M155 I1 M398 
+chr4-04	EST_Human	nucleotide_match	249696	250129	424.000000	+	.	Target=CA427639.1 2 435 +;percentID=98.8
+chr4-04	EST_Human	nucleotide_match	330988	331260	267.000000	-	.	Target=EL955530.1 47 317 +;percentID=99.3;Gap=M46 D2 M225 ;sequence=GCGGCGCTCTAAACTAGTGGATCCCCGGGCTGCAGGAATCGAATTCCAGTCTCACATAAACATACAAAAGTCACAGACACACACACACACACGCACGCACCCACGCACGCACAGCCCATCCTTCCTCCAAGGCTCGCGAATCATCTCTCCACAAATCCTGCCTTCGGGGCCGCAGCCTGCAGGCCGACCTCAGTCCGTCCTCACAGAGCCTAGTTGGGTGCACAGCTCTCCCTGACGCGCGAGGAGCAGGTTCACGGGAGTCGGTCGCGCATCCCCAGCGCCCTGCGGGCCTCGCACCGGCTGTGGCGGTGACCCCGAATTCTTCCATCTCTATGAGAACAAGCCCATTTTAACTTTCTG [...]
+chr4-04	EST_Human	nucleotide_match	249924	250452	521.000000	-	.	Target=AA017091.1 1 530 +;percentID=99.2;Gap=M264 D1 M248 I1 M10 I1 M6 ;sequence=GCGNCCGCACTAAGAAATGAGGAGTGCCTCTGCTCGGCGGCCCTACCATCTGGGAGTAAGGAGCGCCTCTTCCTGGCTGCCCCACCATCTGGGAAGTGAGGAGCATCTCTGTCCAGCTGCTGCACCATCTGGGAAGTGAGGAGAGCCTTTGCCCAGATGCTGTGCAACCCTCCAAGTGTGAAGTGGCAGCCTTGTATGTGATCTTTATGTCCTCCCTAAGTTTGCATTTTTGACATTAAAGTTTACTTTTAAATTAAAAAAAAACCCTCTTTAAATTCAGAATGAGTCAGTTTTGCAGCCTGGGAACAGATGTCCTCTCCACATGCACAATTAATGCCATTTCTTCA [...]
+chr4-04	EST_Human	nucleotide_match	249934	250218	187.000000	+	.	Target=BX956046.1 14 292 +;percentID=84.3;Gap=M26 D2 M43 I1 M50 D3 M83 D2 M48 I1 M16 D1 M11 ;sequence=ATAACTAAATAAGTTTGTTCAGGCAAGTACTGGGAAGACATAAGTATTGGGGATGTTTTGATAAATAATTGTAGTGAACAAACACAAAGTGCTGGGTCTGTAATAGATGCTCCATAACTAGCCATAAATATTCCTGGAGTTAGTTCGTAGCTCCAAGTAAAAGATTAAAAATATCTATGTTGAAGAAATGTCATTAATTGTGCATGTGGAGAGGACGTGTTCCCAGGCTGCAAAACTGACTCAGTCTGAATTTAAAGAGGATTTCTGTTTTTATTTTCTAATTATCTTTAGTTTTGTGATGTCTTCTTTTCCTTTGTGTTTTGGCT [...]
+chr4-04	EST_Human	nucleotide_match	335361	335786	289.000000	-	.	Target=T78596.1 3 433 +;percentID=83.9;Gap=M47 D1 M80 I1 M83 D1 M3 I1 M32 D2 M2 D1 M28 I1 M10 I1 M21 I1 M7 I1 M10 I1 M12 I1 M9 I1 M27 I1 M50 
+chr4-04	EST_Human	nucleotide_match	331581	332159	380.000000	+	.	Target=DA289388.1 3 564 +;percentID=85;Gap=M22 I1 M2 D1 M3 D1 M28 D1 M55 I1 M8 I1 M56 D1 M78 I3 M48 D2 M1 D5 M25 D1 M124 D1 M3 D1 M2 D1 M2 D2 M5 D1 M2 D1 M1 D1 M3 D1 M3 D1 M5 D1 M80 ;sequence=GTTGGCTTCCGGGATCTGGCGCGGCGTTTTCCTCTGGCTCCTGCGAGGGCTTGGTTTAGGGCTTCAGCTCTCTGCGTTCTCGGCTCCGGGAGGCCTCGGTGATTCAGCCACAGCCTCTGCCTCCCGTTGCTCTGTGACCTGAGGGTATTGGACAATTTGTAGCTAAGACTCCCGGATACCCTGAAGTCGGGAAATGGTGAGTGTGCGGGGCAGGGCGTCCGGAGGCTGGGGAGGCC [...]
+chr4-04	EST_Human	nucleotide_match	250017	250218	134.000000	+	.	Target=BX645181.1 3 202 +;percentID=84.3;Gap=M38 D3 M39 I1 M94 I1 M16 D1 M11 ;sequence=GGGTGTGTAATAGATGCTTCATAATTAGCCATAAATATTCCTGGAGTTAGTTTGTAGCTCCAAGTAAGAGATTGAAAATAATCTGTGGCGAACAAATGGCATTAATTGTGCATGTGGAGAGGACGTCTGTTCTCAGGCTGCAGAACCAACTCATTATGAATGTAAAGAGGATTTCTTTTCTTATTTTCTAATTATCTTCAGTTTTGTGATATCTTTATGATTTATCCCCAGCTATGTATGCCTCAGAGCCTTTCTTCATTTTTGCGTTATGGCTAGTTTGTCACTGTTCTCTTCATTCCACGTAATTTCACGTGGACTTTAGGTTAACTGGGGTGTTTGAG [...]
+chr4-04	EST_Human	nucleotide_match	250028	250218	123.000000	+	.	Target=BE619505.1 1 189 +;percentID=84.1;Gap=M19 I1 M2 I1 M1 I1 M18 D1 M48 D4 M65 I1 M21 D1 M11 ;sequence=ATGCTCCATAATTAGCCATAAATATTATTCTTTCTGGAGTGAGTAGTAGCTCCAAGTAAGAGAATGAAAATGTCTATAGTGAAGAAATGGCAGTCTGCATGTGGAGAGAACATCTGTTACCAGGCTGCAAAACTGACTCATTCTGAATTTAAAGAGAACCTCTGATTTTATTTTCTAATTATCTTTAGTTTTGGAATATCTTTATGGTTTATTCCCAGCTATGTATGCCTCACACCCCTTCTTCTTGTGTTATGGCTACAGTCTTCTCACTGTTCTCTTTTTGCCATGTAATTTCATACAGACTTTCTATGTTCTGATTAGA [...]
+chr4-04	EST_Human	nucleotide_match	335591	335755	110.000000	+	.	Target=BX111612.1 538 702 +;percentID=84;Gap=M68 I1 M80 D1 M16 
+chr4-04	EST_Human	nucleotide_match	250170	250443	159.000000	+	.	Target=BX114674.1 305 582 +;percentID=79.6;Gap=M4 I1 M9 D1 M6 I2 M3 I1 M205 I1 M46 ;sequence=TGTCGTCCAGCCTCCCCCATGTCACCAGCAACCACGTCAGCTACAATGGCCTGTATGGAGTGGCAGTATTTAGCCAGAAGGATGGCTCCAGCGAGTTACCTCGAGGCTACAGGGCTCAAGAGAACTTCAGCGAGGATGGGGACGCCATCCTCTGGGAGACAGAGCTGGAGAAGGAGGACGACCCACTGCGCCGGCCCATCACCATAGCTCTTGTTGAGTCTAACAGTATTAATCACAATGGAGGTGAGTATACCCCCTCAGCCCCTGCTCAAGAACCTTCCATGGCTCCCCACTGTCTTTTTTTTTCTCCAATTTAAAACTTTTAATTTAATTTA [...]
+chr4-04	EST_Human	nucleotide_match	336530	336753	202.000000	-	.	Target=BG754914.1 266 489 +;percentID=95.1;sequence=GCCAACATGGGCCGCGTTCGCACCAAAACCGTGAAGAAGGCGGCCCGGGTCATCATAGAAAAGTACTACACGCGCCTGGGCAACGACTTCCACACGAACAAGCGCGTGTGCGAGGAGATCGCCATTATCCCCAGCAAAAAGCTCCGCAACAAGATAGCAGGTTATGTCACGCATCTGATGAAGCGAATTCAGAGAGGCCCAGTAAGAGGTATCTCCATCAAGCTGCAGGAGGAGGAGAGAGAAAGGAGAGACAATTATGTTCCTGAGGTCTCAGCCTTGGATCAGGAGATTATTGAAGTAGATCCTGACACTAAGGAAATGCTGAAGCTTTTGGACTTCGGCAGTCTGTCCAACCTTCAGGTCACTCAGCCTACAG [...]
+chr4-04	EST_Human	nucleotide_match	250170	250463	168.000000	+	.	Target=BM051754.1 17 317 +;percentID=79.5;Gap=M4 I1 M9 D1 M6 I2 M3 I1 M205 I1 M43 I2 M2 I2 M17 D1 M3 ;sequence=GCCACTGTCTTTTTTTTTCTCCAATTTAAAACTTTTAATTTAATTTAAATTTAAAAGTAAACTTTAATGTCAAAGATGCAAACCTGGGTAGGGCAGAAAAATCACACACAAGGTTGCCACTTCACACTTGGAGGGTTGCACAGCGGCCAGGCAGAGGCGCTCCTCACTTCCCAGACAGTGTGGGGGCCAGGGAGAGGCGCTCCTCACTTCCCAGACAGCGTGGGGGCCAGGGAGAGGTGCTCCTCACTTCCCAGACGGTGGGGCGGCCGAGCAGAGGTGCTTCTTATTTTTGAGACGGTGCGGCCGCCAGGCAGGGC [...]
+chr4-04	EST_Human	nucleotide_match	336536	336753	202.000000	-	.	Target=BG682179.1 266 483 +;percentID=96.3;sequence=CCAACATGGGCCGCGTTCGCACCAAAACCGTGAAGAAGGCGGCCCGGGTCATCATAGAAAAGTACTACACGCGCCTGGGCAACGACTTCCACACGAACAAGCGCGTGTGCGAGGAGATCGCCATTATCCCCAGCAAAAAGCTCCGCAACAAGATAGCAGGTTATGTCACGCATCTGATGAAGCGAATTCAGAGAGGCCCAGTAAGAGGTATCTCCATCAAGCTGCAGGAGGAGGAGAGAGAAACGGAGAGACAATTATGTTCCTGAGGTCTCAGCCTTGGATCAGGAGATTATTGAAGTAGATCCTGACACTAAGGAAATGCTGAAGCTTTTGGACTTCGGCAGTCTGTCCAACCTTCAGGTCACTCAGCCTACAG [...]
+chr4-04	EST_Human	nucleotide_match	250182	250814	624.000000	-	.	Target=DA136141.1 1 632 +;percentID=99.4;Gap=M626 D1 M6 
+chr4-04	EST_Human	nucleotide_match	336539	336775	196.000000	-	.	Target=CD176941.1 17 252 +;percentID=91.6;Gap=M19 D1 M217 ;sequence=ACCGACCGAAGAGTAGAAGGAATTCATTATGTTCCTGAGGTCTCAGCCTTGCATCAGGAGATTATTGAAGTAGATCCTGACACTAAGGAAATGCTGAAGCTTTTGGACTTCGGCAGTCTGTCCAACCTTCAGGTCACTCAGCCTACAGTTGGGATGAATTTCAAAACGCCTCGGGGACCTGTTTGAACTTTTTCTGTAGTGCTGTATTATTTTCAATAAATCTGGGACAACAGCAAAAAAAAAAAAAAAAAAAACCC
+chr4-04	EST_Human	nucleotide_match	250188	250452	251.000000	-	.	Target=AW196461.1 1 272 +;percentID=97.4;Gap=M198 I1 M8 I1 M10 I1 M15 I1 M6 I1 M13 I1 M3 I1 M12 ;sequence=GCGGCCGCACTAAGAAATGAGGAGTGCCTCTGCTCGGCGGCCCTACCATCTGGGAGTAAGGAGCGCCTCTTCCTGGCTGCCCCACCATCTGGGAAGTGAGGAGCATCTCTGTCCAGCTGCTGCACCATCTGGGAAGTGAGGAGAGCCTTTGCCCAGATGCTGTGCAACCCTCCAAGTGTGAAGTGGCAGCCTTGTATGGTGATCTTTTATGTCCTCCCCTAAGTTTGCATTTTTTGACATTTAAAGTTTACTTTTTAAANTTAAAAAAAAAAAAAAAAACNCTCGTGCCC
+chr4-04	EST_Human	nucleotide_match	336539	336756	198.000000	-	.	Target=BG755162.1 267 486 +;percentID=95.5;Gap=M208 I1 M1 I1 M9 ;sequence=GGCCAACATGGGCCGCGTTCGCACCAAAACCGTGAAGAAGGCGGCCCGGGTCATCATAGAAAAGTACTACACGCGCCTGGGCAACGACTTCCACACGAACAAGCGCGTGTGCTGAGGAGATCGCCATTATCCCCAGTCAAAAAGCTCCGCAACAAGATAGCAGGTTATGTCACGCATCTGATGAAGCGAATTCAGAGAGGCCCAGTAAGAGGTATCTCCATCAAGCTGCAGGAGGAGGAGAGAGAAAGGAGAGACAATTATGTTCCATGAGGTCTCAGCCTTGGATCAGGAGATTATTGAAGTAGATCCTGACACTAAGGAAATGCTGAAGCTTCTGGACTTCGGCAGTCTGTC [...]
+chr4-04	EST_Human	nucleotide_match	250193	250336	116.000000	+	.	Target=AA609601.1 1 144 +;percentID=90.3;sequence=TTTCTAATTTAAAAGTAAACTTTAATATTGAAAATGCAAACTTGGGGAGGGCAGAAAGATCACACACAGGGCTGCCACTTCACACTTGGAGGGTTGCACAGCAGCCGGGCAAAGGCTCTCCTCACTTCTCAGATGGTGCTGCGGCTGGCGGGAGGCGCGGGCCAGGGGGAGGGGCTTTTCACTTCCCCGATGGTGGGGCGATCAGGCAGAGGCGCTCCTCACTTCCCAGACAGTGGGGCGGCCAGGCAGAGGCGCTCCTCGCTTCCCAGACAGTGGGGCGGCCAGGCAGAGGCGCTCCTCGCTTCCCAGACAATGGAGCGGCCAGGCAGAGACACTCCTCACTTCCCAGACATTGTGGCGACCAAGGAGAGTCGCTCC [...]
+chr4-04	EST_Human	nucleotide_match	336536	336753	200.000000	+	.	Target=AI564812.1 2 219 +;percentID=95.9;sequence=TTTTTTTTTTTTTTTTTTTTTTGCTGTTGTCCCAGATTTATTGAAAATAATACAGCACTACAGAAAAAATTCAAACAGGTCCCCGAGGCGTTTTGAAATTCATCCCAACTGTAGGCTGAGTGACCTGAAGGTTGGACAGACTGCCGAAGTCCAAAAGCTTCAGCATTTCCTTAGTGTCAGGATCTACTTCAATAATCTCCTGATCCAAGGCTGAGACCTCAGGAACATAATTGTCTCTCCTTTCTCTCTCCTCCTCCTGCAGCTTGATGGAGATACCTCTTACTGGGCCTCTCTGAATTCGCTTCATCAGATGCGTGACGTAACCTGCTATCTTGTTGCGGAGCTTTTTGCTGGGGATAATGGCGATCTCCTCGCACA [...]
+chr4-04	EST_Human	nucleotide_match	250198	250340	120.000000	+	.	Target=W95750.1 1 143 +;percentID=91.6;sequence=AATTTAAAAGTAAACTTTAATATTGAAAATGCAAACTTNGGGAGGGCAGAAAGATCACACACAGGGCTGCCACTTCACACTTGGAGGGTTGCACAGCAGCCGGGCAAAGGCTCTCCTCACTTCCCAGATGGTGCTGCGGCTGGC
+chr4-04	EST_Human	nucleotide_match	336536	336753	201.000000	+	.	Target=AA633038.1 1 217 +;percentID=96.3;Gap=M21 D1 M196 ;sequence=TTTTTTTTTTTTTTTTTTATTTTGTTGTCCCAGATTTATTGAAAATAATACAGCACTACAGAAAAAATTCAAACAGGTCCCCGAGGCGTTTTGAAATTCATCCCAACTGTAGGCTGAGTGACCTGAAGGTTGGACAGACTGCCGAAGTCCAAAAGCTTCAGCATTTCCTTAGTGTCAGGATCTACTTCAATAATCTCCTGATCCAAGGCTGAGACCTCAGGAACATAATTGTCTCTCCTTTCTCTCTCCTCCTCCTGCAGCTTGATGGAGATACCTCTTACTGGGCCTCTCTGAATTCGCTTCATCAGATGCGTGACATAACCTGCTATCTTGTTGCGGACTTTTTGCTGGGGATAATGGC [...]
+chr4-04	EST_Human	nucleotide_match	250213	250452	240.000000	-	.	Target=AI654212.1 1 240 +;percentID=100;sequence=GCGGCCGCACTAAGAAATGAGGAGTGCCTCTGCTCGGCGGCCCTACCATCTGGGAGTAAGGAGCGCCTCTTCCTGGCTGCCCCACCATCTGGGAAGTGAGGAGCATCTCTGTCCAGCTGCTGCACCATCTGGGAAGTGAGGAGAGCCTTTGCCCAGATGCTGTGCAACCCTCCAAGTGTGAAGTGGCAGCCTTGTATGTGATCTTTATGTCCTCCCTAAGTTTGCATTTTTGACATTAAA
+chr4-04	EST_Human	nucleotide_match	330988	331228	239.000000	-	.	Target=DA689205.1 116 356 +;percentID=99.6;sequence=ATGGGTCAGTCGGTCCTGAGAGATGGGCGAGCGCCGTTCCGAAGGGACGGGCGATGGCCTCCGTTGCCCTCGGCCGATCGAAAGGGAGTCGGGTTCAGATCCCCGAATCCGACAGACACACACACACACACGCACGCACCCACGCACGCACAGCCCATCCTTCCTCCAAGGCTCGCGAATCATCTCTCCACAAATCCTGCCTTCGGGGCCGCAGCCTGCAGGCCGACCTCAGTCCGTCCTCACAGAGCCTAGTTGGGTGCACAGCTCTCCCTGACGCGCGAGGAGCAGGTTCACGGGAGTCGGTCGCGCATCCCCAGCGCCCTGCGGGCCTCGCACCGGCTGTGGCGGCGACCCCGAATTCTTCCATCTCTATGAG [...]
+chr4-04	EST_Human	nucleotide_match	250358	250634	130.000000	+	.	Target=AA609601.1 145 424 +;percentID=74.6;Gap=M16 D2 M22 I1 M38 I1 M2 I1 M2 I2 M112 I1 M13 D1 M69 
+chr4-04	EST_Human	nucleotide_match	250675	250794	62.000000	+	.	Target=BX645181.1 205 324 +;percentID=79.7;Gap=M2 I1 M5 D1 M7 I1 M28 I1 M1 I2 M5 I1 M17 D2 M1 D1 M44 D2 M4 
+chr4-04	EST_Human	nucleotide_match	250675	250890	127.000000	+	.	Target=BE619505.1 192 408 +;percentID=80.6;Gap=M14 I1 M111 I1 M3 I2 M3 D1 M21 D1 M11 D1 M50 
+chr4-04	EST_Human	nucleotide_match	250702	251062	185.000000	+	.	Target=BX956046.1 293 663 +;percentID=78.3;Gap=M5 I1 M3 D2 M1 D2 M9 D1 M76 I1 M2 I2 M3 D1 M19 I1 M1 I2 M16 D1 M50 D1 M25 I1 M1 I3 M20 I1 M3 I1 M7 I1 M6 I1 M11 I4 M17 D1 M1 D1 M64 I1 M11 
+chr4-04	EST_Human	nucleotide_match	250787	251592	762.000000	-	.	Target=BF965584.1 1 793 +;percentID=98.1;Gap=M30 D1 M89 D1 M308 D1 M194 D1 M26 I1 M71 D1 M31 D1 M9 D1 M2 D1 M2 D1 M11 D1 M7 D1 M3 D1 M3 D1 M1 D1 M5 ;sequence=ATAAGACAAGATGATGTACTCTAGGGCTTTGCTTTAAGTTTGAAGCACCTGGAGTTTCTAATGCTGATGGTAATTATAGGGAAGACATTAAAAGGGTAACTTGCTAAAGGTCCCATAATGTCCATTCTGTGACCAAAGTAAGTAAATTTGCATTAAAAATCACTGAGAAAATGATACTCTCCAAAATTTTTCCAGAGAAGGTTACCAAGGACTTGGTTAAAGTTAGTTAGATGACTAAGAATGAAAACTGTAGACCATGAACTGCATCCA [...]
+chr4-04	EST_Human	nucleotide_match	250835	251105	138.000000	+	.	Target=BX645181.1 325 615 +;percentID=77.9;Gap=M8 D1 M50 I3 M1 I1 M25 I1 M1 I3 M6 I4 M12 I2 M12 I1 M6 I1 M10 I2 M1 I1 M1 I1 M9 I1 M3 I1 M1 I1 M50 D1 M14 D1 M58 
+chr4-04	EST_Human	nucleotide_match	250989	251816	825.000000	+	.	Target=EB388150.1 1 827 +;percentID=99.9;Gap=M784 D1 M43 ;sequence=CTAAGACTAGGTAAAGCATTAATATGAGTGGGTTGCATATTGTCAGCACCATATGAAGAAAATATCAGAATTTTGAAATTTCTTCAGAGAAAATGTATCTTAGAGGTAAATTTTTTAGGAGACTTAATGGTAGAGAAGAATTTTACATTTAATATTCTATGACATACTTATAGCAAAACTTTTTTCATGCAGAATTTTCTATTTTTGAATGTGAATCTTAAGTGTTGGAAAATAATAGAATGGTCTCTGTAGATTCAAAATTTGGAATGATCTTTTTTGTCCAGATTGATACTGCAATCCTGAGGAATTTCTCTTATGATTTTTTATTTTAGTGGATGCAGTTCATGGTCTACAGTTTTCA [...]
+chr4-04	EST_Human	nucleotide_match	251178	251417	162.000000	+	.	Target=CN414775.1 114 349 +;percentID=85.1;Gap=M39 I1 M85 D2 M52 D2 M1 D1 M2 D1 M37 I1 M18 
+chr4-04	EST_Human	nucleotide_match	252424	253113	679.000000	-	.	Target=BG290372.1 1 693 +;percentID=99.3;Gap=M461 I1 M54 I1 M107 I1 M31 I1 M5 D1 M31 ;sequence=CTAGGTTATGATTATAGAGCGAGGATTATTATAATATTGGAATAAAGAATAAGTACTGCTGATTAATTATATTCATATATAATCATATCTAAGATCTATGTCTGGCGTAACTATTGTTGTTTTACATTTTGTTATACTGGAACAGCTCGTGTCCTCGGTCTCTTGCCTCTGCACCTGGGTGGCTTGCCGCCCACACATTTGCACACACATATAACAAAAAATGTATCAGTTGATTTAATTTTGTTAAATATTTACTAAGAATGGGTGTTGAAGATAATCACTTATTTTCTGTTTGAAGAGGGTGTTTAACAAAGAGTGTTTTCTCTGGAGTCA [...]
+chr4-04	EST_Human	nucleotide_match	252621	253446	814.000000	+	.	Target=DA568484.1 1 825 +;percentID=99.2;Gap=M816 D1 M9 ;sequence=TAAACACTACCCATAACACTGTGTTAATAAATTTAATTTTCACAGTAATTCCATAGCATAGGCATTATTATTATCCTTATTTTAAAGAGAAAGAAATAGAGCCACAGAGAAAAATTACTTGCTCACAACAGTGGAGCCAGTTTTAAAACACAGGGAACTTTGACTCCAGAGAAAACACTCTTTGTTAAACACCCTCTTCAAACAGAAAATAAGTGATTATCTTCAACACCCATTCTTAGTAAATATTTAACAAAATTAAATCAACTGATACATTTTTTGTTATATGTGTGTGCAAATGTGTGGGCGGCAAGCCACCCAGGTGCAGAGGCAAGAGACCGAGGACACGAGCTGTTCCAGTATAA [...]
+chr4-04	EST_Human	nucleotide_match	254205	254806	577.000000	-	.	Target=DB354994.1 1 602 +;percentID=97.7;Gap=M522 I1 M20 D1 M59 ;sequence=GGTTATAGCTGATGGAGATGGCCTCTCCTACAGAAACAAGAATTATGGAGTGCCCTTATTGCTTTCTGCTGGAGAACCTGGGGGAAATAAAGAACCTCTCCCAATTTATACAATCTTTCAGTCCTAGAGTATATTCACATTTGATACCCCATTGCAGGGTGGGCAGGTTGTTAGGCAAAGTTGGGATAAGGGCCATAAGGAGTTCCCCGGAAAGGGTGGTGGCCGTTGCTGCTTGGCCGACCCTCCTGTTTCTCTAGGTAATCTCATCTTGGCATTTCTGGTAGCCCCAGCAATGAACTGCAGCTTTCTGTGGTAGGTGGATAGCCTAGGGTAGGGTAAAATATCTGTGACCCA [...]
+chr4-04	EST_Human	nucleotide_match	254324	254806	483.000000	-	.	Target=AI336023.1 1 483 +;percentID=100;sequence=GGTTATAGCTGATGGAGATGGCCTCTCCTACAGAAACAAGAATTATGGAGTGCCCTTATTGCTTTCTGCTGGAGAACCTGGGGGAAATAAAGAACCTCTCCCAATTTATACAATCTTTCAGTCCTAGAGTATATTCACATTTGATACCCCATTGCAGGGTGGGCAGGTTGTTAGGCAAAGTTGGGATAAGGGCCATAAGGAGTTCCCCGGAAAGGGTGGTGGCCGTTGCTGCTTGGCCGACCCTCCTGTTTCTCTAGGTAATCTCATCTTGGCATTTCTGGTAGCCCCAGCAATGAACTGCAGCTTTCTGTGGTAGGTGGATAGCCTAGGGTAGGGTAAAATATCTGTGACCCATATTTAGTAGGGGTATCTTTTGCTG [...]
+chr4-04	EST_Human	nucleotide_match	332156	332662	393.000000	-	.	Target=DC393066.1 1 522 +;percentID=89.3;Gap=M215 I2 M96 I3 M2 I2 M1 I7 M1 I3 M151 D1 M22 D1 M17 ;sequence=ATGTCTTTCTTCTGACAGAAAACTTGCGGAGTTTCCTCAACACCAGTCAATGCTCCAACCCCAACGGGGTGTCCAGCAACTCACTAACGACACCACCCAGAGTCAGCGCTGACCCCACAAGCTCAGCACTCTTCCCGCAGCTGCTCTCCTGCAGACGCCAGTCCCTGCCTCTGGACACCCGTCTTCATTTCTGAACCCCTGCCTACAAACCAGGGACGCCCACACCCTCCTCAAGTTCAATAATGTGGCAGAACTACTCACAGAACTAAGAGAAGCGCTGTGCGCACCGACACCAGCGTATTCTAAAAGATGCGAACAGAC [...]
+chr4-04	EST_Human	nucleotide_match	336531	336753	203.000000	-	.	Target=BM009041.1 268 490 +;percentID=95.5;sequence=GCGCCAACATGGGCCGCGTTCGCACCAAAACCGTGAAGAAGGCGGCCCGGGTCATCATAGAAAAGTACTACACGCGCCTGGGCAACGACTTCCACACGAACAAGCGCGTGTGCGAGGAGATCGCCATTATCCCCAGCAAAAAGCTCCGCAACAAGATAGCAGGTTATGTCACGCATCTGATGAAGCGAATTCAGAGAGGCCCAGTAAGAGGTATCTCCATCAAGCTGCAGGAGGAGGAGAGAGAAAGGAGAGACAATTATGTTCCTGAGGTCTCAGCCTTGGATCAGGAGATTATTGAAGTAGATCCTGACACTAAGGAAATGCTGAAGCTTTTGGACTTCGGCAGTCTGTCCAACCTTCAGGTCACTCAGCCTAC [...]
+chr4-04	EST_Human	nucleotide_match	336536	336754	160.000000	+	.	Target=BI159833.1 8 243 +;percentID=87.8;Gap=M17 D1 M15 I1 M29 I1 M30 I1 M27 I1 M11 I1 M10 I1 M8 I1 M6 I1 M10 I1 M2 I1 M6 I1 M3 I1 M6 I1 M2 I1 M10 I1 M6 I2 M9 I1 M11 ;sequence=GGTCGAGTTTTTTTTTTTGTTTTTCTTGCTGTGGTCCCACAATTTATTGAAAATAATACAGCACTACAGAAAAAAATTCAAACAGGTCCCCGAGGCGTTTGTGAAATTCATCCCAACTGTAGGCTGAGTTGACCTGAAGGTTTGGACAGACGTGCCGAAGTTCCAAAGAGCTTCAGCATTTCTCCTTAGGTGCTCAGGATTCATACTTCAATTAATCTCCTGTGATCCAAGTGTTGAGACCTTCAGGAACAT [...]
+chr4-04	known_cds	mRNA	264464	299110	.	-	.	ID=transcript1;Name=Z95704.2-001
+chr4-04	known_cds	exon	264464	266419	.	-	.	Parent=transcript1
+chr4-04	known_cds	CDS	264888	266419	.	-	2	Parent=transcript1
+chr4-04	known_cds	exon	289227	289322	.	-	.	Parent=transcript1
+chr4-04	known_cds	CDS	289227	289322	.	-	2	Parent=transcript1
+chr4-04	known_cds	exon	289818	289944	.	-	.	Parent=transcript1
+chr4-04	known_cds	CDS	289818	289944	.	-	0	Parent=transcript1
+chr4-04	known_cds	exon	299097	299110	.	-	.	Parent=transcript1
+chr4-04	known_cds	CDS	299097	299099	.	-	0	Parent=transcript1
+chr4-04	ensembl_variation	SNP	358038	358038	.	+	.	Name=rs112781035;variant_sequence=T/C;
+chr4-04	ensembl_variation	insertion	263638	263639	.	+	.	Name=rs111682324;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	358053	358053	.	+	.	Name=rs111267637;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	263649	263649	.	+	.	Name=rs115291458;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	358455	358455	.	+	.	Name=rs6831791;variant_sequence=G/A;
+chr4-04	ensembl_variation	deletion	263651	263652	.	+	.	Name=rs71654578;variant_sequence=AG/-;
+chr4-04	ensembl_variation	SNP	358456	358456	.	+	.	Name=rs79147894;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	263652	263652	.	+	.	Name=rs78782155;variant_sequence=G/A;
+chr4-04	ensembl_variation	insertion	358665	358666	.	+	.	Name=rs72598754;variant_sequence=-/G;
+chr4-04	ensembl_variation	SNP	263804	263804	.	+	.	Name=rs114544910;variant_sequence=C/T;
+chr4-04	ensembl_variation	insertion	358666	358667	.	+	.	Name=rs35953653;variant_sequence=-/G;
+chr4-04	ensembl_variation	SNP	263916	263916	.	+	.	Name=rs116247731;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	358879	358879	.	+	.	Name=rs60333530;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	263969	263969	.	+	.	Name=rs115321593;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	358932	358932	.	+	.	Name=rs56733551;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	263970	263970	.	+	.	Name=rs116766523;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	358988	358988	.	+	.	Name=rs59182798;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	264216	264216	.	+	.	Name=rs13110246;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	359013	359013	.	+	.	Name=rs114311518;variant_sequence=G/C;
+chr4-04	ensembl_variation	insertion	264240	264241	.	+	.	Name=rs71654579;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	359201	359201	.	+	.	Name=rs58835461;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	264241	264241	.	+	.	Name=rs118069740;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	359301	359301	.	+	.	Name=rs79360490;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	264558	264558	.	+	.	Name=rs17775145;variant_sequence=G/A;
+chr4-04	ensembl_variation	deletion	359304	359306	.	+	.	Name=rs77588968;variant_sequence=GTT/-;
+chr4-04	ensembl_variation	SNP	264681	264681	.	+	.	Name=rs77776147;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	264832	264832	.	+	.	Name=rs115469042;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	264941	264941	.	+	.	Name=rs11731285;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	265298	265299	.	+	.	Name=rs34590377;variant_sequence=-/C;
+chr4-04	ensembl_variation	insertion	265300	265301	.	+	.	Name=rs34359434;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	265324	265324	.	+	.	Name=rs61792061;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	265339	265339	.	+	.	Name=rs61792062;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	265341	265341	.	+	.	Name=rs61792063;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	265349	265349	.	+	.	Name=rs61792064;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	265355	265355	.	+	.	Name=rs61792065;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	265359	265359	.	+	.	Name=rs61792066;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	265369	265369	.	+	.	Name=rs61792067;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	265380	265380	.	+	.	Name=rs61792068;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	265387	265387	.	+	.	Name=rs61792069;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	265391	265391	.	+	.	Name=rs61792070;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	265397	265397	.	+	.	Name=rs61792071;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	265399	265399	.	+	.	Name=rs61792072;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	265411	265411	.	+	.	Name=rs61792073;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	265414	265414	.	+	.	Name=rs61792074;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	265427	265427	.	+	.	Name=rs61792075;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	265433	265433	.	+	.	Name=rs61792076;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	265435	265435	.	+	.	Name=rs61792077;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	265437	265437	.	+	.	Name=rs61792078;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	265439	265439	.	+	.	Name=rs61792079;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	265441	265441	.	+	.	Name=rs61792080;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	265444	265444	.	+	.	Name=rs61792081;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	265465	265465	.	+	.	Name=rs61792082;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	265469	265469	.	+	.	Name=rs61792083;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	265479	265479	.	+	.	Name=rs61792084;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	265485	265485	.	+	.	Name=rs61792085;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	265495	265495	.	+	.	Name=rs61792086;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	265500	265500	.	+	.	Name=rs61792087;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	265504	265504	.	+	.	Name=rs61792088;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	265514	265514	.	+	.	Name=rs61792089;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	265519	265519	.	+	.	Name=rs61792090;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	265522	265522	.	+	.	Name=rs61792091;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	265527	265527	.	+	.	Name=rs61792092;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	265536	265536	.	+	.	Name=rs79816310;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	265550	265550	.	+	.	Name=rs61792093;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	265558	265558	.	+	.	Name=rs61792094;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	265563	265563	.	+	.	Name=rs114747783;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	265566	265566	.	+	.	Name=rs61792095;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	265637	265637	.	+	.	Name=rs61597111;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	265743	265743	.	+	.	Name=rs114872625;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	265970	265970	.	+	.	Name=rs61730555;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	266047	266047	.	+	.	Name=rs61730554;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	266124	266124	.	+	.	Name=rs114394748;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	266171	266171	.	+	.	Name=rs115069723;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	266491	266491	.	+	.	Name=rs77771572;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	266659	266659	.	+	.	Name=rs79366248;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	266863	266863	.	+	.	Name=rs4629385;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	267075	267075	.	+	.	Name=rs79767202;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	267076	267076	.	+	.	Name=rs2883231;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	267173	267173	.	+	.	Name=rs76052254;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	267230	267230	.	+	.	Name=rs79263269;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	267232	267232	.	+	.	Name=rs117235891;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	267437	267437	.	+	.	Name=rs78343340;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	267442	267442	.	+	.	Name=rs114536727;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	267511	267511	.	+	.	Name=rs75569198;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	267528	267528	.	+	.	Name=rs73795403;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	267621	267621	.	+	.	Name=rs6811431;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	267634	267634	.	+	.	Name=rs79242577;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	267878	267878	.	+	.	Name=rs115102557;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	267963	267963	.	+	.	Name=rs75849171;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	267968	267968	.	+	.	Name=rs75105190;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	268300	268300	.	+	.	Name=rs78676359;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	268371	268371	.	+	.	Name=rs58641957;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	268580	268580	.	+	.	Name=rs13435268;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	268590	268590	.	+	.	Name=rs73791808;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	268623	268624	.	+	.	Name=rs34079698;variant_sequence=-/G;
+chr4-04	ensembl_variation	SNP	268659	268659	.	+	.	Name=rs73791809;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	268771	268771	.	+	.	Name=rs76605095;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	269041	269041	.	+	.	Name=rs73791811;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	269042	269042	.	+	.	Name=rs7694325;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	269457	269457	.	+	.	Name=rs73213596;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	269477	269477	.	+	.	Name=rs75591813;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	269546	269546	.	+	.	Name=rs116839202;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	269629	269629	.	+	.	Name=rs115946034;variant_sequence=G/A;
+chr4-04	ensembl_variation	deletion	269693	269694	.	+	.	Name=rs113923591;variant_sequence=AG/-;
+chr4-04	ensembl_variation	SNP	270046	270046	.	+	.	Name=rs61192761;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	270058	270058	.	+	.	Name=rs13136187;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	270510	270510	.	+	.	Name=rs116611457;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	270574	270574	.	+	.	Name=rs6824022;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	270656	270656	.	+	.	Name=rs6814846;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	270698	270698	.	+	.	Name=rs6824248;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	270742	270743	.	+	.	Name=rs113777886;variant_sequence=-/AAAAAC;
+chr4-04	ensembl_variation	SNP	270880	270880	.	+	.	Name=rs75684666;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	271072	271072	.	+	.	Name=rs56218479;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	271076	271076	.	+	.	Name=rs73213597;variant_sequence=C/T;
+chr4-04	ensembl_variation	insertion	271391	271392	.	+	.	Name=rs111756381;variant_sequence=-/A;
+chr4-04	ensembl_variation	insertion	271400	271401	.	+	.	Name=rs57017607;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	271580	271580	.	+	.	Name=rs113114939;variant_sequence=A/C;
+chr4-04	ensembl_variation	insertion	271717	271718	.	+	.	Name=rs36014294;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	271755	271755	.	+	.	Name=rs115916539;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	271980	271980	.	+	.	Name=rs79879654;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	272177	272177	.	+	.	Name=rs112899466;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	272456	272456	.	+	.	Name=rs74547440;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	272471	272471	.	+	.	Name=rs80057113;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	272494	272494	.	+	.	Name=rs79897974;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	272520	272520	.	+	.	Name=rs76533221;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	272521	272521	.	+	.	Name=rs76333467;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	272522	272522	.	+	.	Name=rs6837796;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	272523	272523	.	+	.	Name=rs79651239;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	272524	272524	.	+	.	Name=rs11729365;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	272526	272526	.	+	.	Name=rs77511484;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	272528	272528	.	+	.	Name=rs74521993;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	272533	272533	.	+	.	Name=rs74358611;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	272535	272535	.	+	.	Name=rs78139614;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	272548	272548	.	+	.	Name=rs77869118;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	272554	272554	.	+	.	Name=rs75349959;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	272563	272563	.	+	.	Name=rs78652590;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	272565	272565	.	+	.	Name=rs75105672;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	272571	272571	.	+	.	Name=rs75824078;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	272579	272579	.	+	.	Name=rs78345290;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	272600	272600	.	+	.	Name=rs78397384;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	272605	272605	.	+	.	Name=rs76198714;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	272606	272606	.	+	.	Name=rs75041583;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	272621	272621	.	+	.	Name=rs76152366;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	272671	272671	.	+	.	Name=rs115038596;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	272743	272743	.	+	.	Name=rs78746414;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	272777	272777	.	+	.	Name=rs79262119;variant_sequence=T/A;
+chr4-04	ensembl_variation	insertion	272925	272926	.	+	.	Name=rs111326176;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	273157	273157	.	+	.	Name=rs11733683;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	273217	273217	.	+	.	Name=rs111551744;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	273246	273247	.	+	.	Name=rs71166804;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	273314	273314	.	+	.	Name=rs113970876;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	273476	273476	.	+	.	Name=rs6815868;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	273576	273576	.	+	.	Name=rs116671481;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	273872	273872	.	+	.	Name=rs114250682;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	273875	273875	.	+	.	Name=rs76980245;variant_sequence=A/T;
+chr4-04	ensembl_variation	insertion	273881	273882	.	+	.	Name=rs35971123;variant_sequence=-/ATAA;
+chr4-04	ensembl_variation	SNP	273882	273882	.	+	.	Name=rs117802913;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	273969	273969	.	+	.	Name=rs79516104;variant_sequence=A/G;
+chr4-04	ensembl_variation	deletion	274008	274009	.	+	.	Name=rs112737400;variant_sequence=AC/-;
+chr4-04	ensembl_variation	insertion	274083	274084	.	+	.	Name=rs112052577;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	274084	274084	.	+	.	Name=rs76583286;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	274097	274098	.	+	.	Name=rs59901961;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	274120	274120	.	+	.	Name=rs56217474;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	274287	274287	.	+	.	Name=rs113652207;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	274394	274394	.	+	.	Name=rs56023157;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	274492	274492	.	+	.	Name=rs114234114;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	274493	274493	.	+	.	Name=rs111711081;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	274728	274728	.	+	.	Name=rs116524627;variant_sequence=G/A;
+chr4-04	ensembl_variation	deletion	274752	274753	.	+	.	Name=rs72495105;variant_sequence=CA/-;
+chr4-04	ensembl_variation	SNP	274910	274910	.	+	.	Name=rs116067225;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	274943	274943	.	+	.	Name=rs77762064;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	275116	275116	.	+	.	Name=rs2353602;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	275207	275207	.	+	.	Name=rs56327123;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	275229	275229	.	+	.	Name=rs79295381;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	275234	275234	.	+	.	Name=rs76166839;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	275238	275238	.	+	.	Name=rs78490597;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	275251	275251	.	+	.	Name=rs79208974;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	275418	275418	.	+	.	Name=rs115129711;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	275599	275599	.	+	.	Name=rs28616744;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	275744	275744	.	+	.	Name=rs115932953;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	275870	275870	.	+	.	Name=rs78697570;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	275902	275902	.	+	.	Name=rs6810785;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	276449	276449	.	+	.	Name=rs74570414;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	276696	276696	.	+	.	Name=rs73791813;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	276765	276765	.	+	.	Name=rs11722521;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	276983	276983	.	+	.	Name=rs11723615;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	277057	277057	.	+	.	Name=rs7665727;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	277173	277173	.	+	.	Name=rs73217569;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	277356	277356	.	+	.	Name=rs79991484;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	277481	277481	.	+	.	Name=rs75314292;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	277739	277739	.	+	.	Name=rs113847214;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	277748	277748	.	+	.	Name=rs6843821;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	277924	277924	.	+	.	Name=rs74675982;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	277955	277955	.	+	.	Name=rs6814967;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	278063	278063	.	+	.	Name=rs73064337;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	278095	278095	.	+	.	Name=rs77279928;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	278196	278196	.	+	.	Name=rs9328738;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	278326	278326	.	+	.	Name=rs13327936;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	278380	278380	.	+	.	Name=rs78833908;variant_sequence=T/C;
+chr4-04	ensembl_variation	insertion	278627	278628	.	+	.	Name=rs71654580;variant_sequence=-/T;
+chr4-04	ensembl_variation	SNP	278680	278680	.	+	.	Name=rs12719767;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	278849	278849	.	+	.	Name=rs76862729;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	278915	278915	.	+	.	Name=rs73791814;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	279086	279086	.	+	.	Name=rs114676750;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	279226	279226	.	+	.	Name=rs118183222;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	279396	279396	.	+	.	Name=rs10002733;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	280006	280006	.	+	.	Name=rs111484673;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	280353	280353	.	+	.	Name=rs7697560;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	280426	280426	.	+	.	Name=rs2353599;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	280496	280496	.	+	.	Name=rs4438712;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	281028	281028	.	+	.	Name=rs116669208;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	281038	281038	.	+	.	Name=rs10023604;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	281408	281408	.	+	.	Name=rs116529450;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	281440	281440	.	+	.	Name=rs73217572;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	281442	281442	.	+	.	Name=rs13112393;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	281649	281649	.	+	.	Name=rs61792096;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	281707	281707	.	+	.	Name=rs11722197;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	281746	281747	.	+	.	Name=rs35663095;variant_sequence=-/T;
+chr4-04	ensembl_variation	SNP	281994	281994	.	+	.	Name=rs114334217;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	282006	282006	.	+	.	Name=rs6820547;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	282046	282046	.	+	.	Name=rs6826459;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	282160	282160	.	+	.	Name=rs66712247;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	282499	282499	.	+	.	Name=rs11723261;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	282528	282528	.	+	.	Name=rs113987817;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	282608	282608	.	+	.	Name=rs10027325;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	282633	282633	.	+	.	Name=rs61792097;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	282668	282668	.	+	.	Name=rs116753444;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	282909	282909	.	+	.	Name=rs114784277;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	283037	283037	.	+	.	Name=rs78207271;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	283041	283041	.	+	.	Name=rs78342895;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	283076	283076	.	+	.	Name=rs113509731;variant_sequence=T/C;
+chr4-04	ensembl_variation	deletion	283084	283085	.	+	.	Name=rs3047214;variant_sequence=CT/-;
+chr4-04	ensembl_variation	SNP	283118	283118	.	+	.	Name=rs1986557;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	283353	283353	.	+	.	Name=rs13120331;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	283355	283355	.	+	.	Name=rs13120332;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	283395	283395	.	+	.	Name=rs13126833;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	283404	283404	.	+	.	Name=rs13120513;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	283538	283538	.	+	.	Name=rs13110510;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	283652	283652	.	+	.	Name=rs58644592;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	283694	283694	.	+	.	Name=rs74325388;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	283767	283767	.	+	.	Name=rs114055282;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	283883	283883	.	+	.	Name=rs13111233;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	284122	284122	.	+	.	Name=rs73791815;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	284201	284201	.	+	.	Name=rs73791816;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	284604	284604	.	+	.	Name=rs75349991;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	284653	284653	.	+	.	Name=rs73791817;variant_sequence=G/A;
+chr4-04	ensembl_variation	insertion	284857	284858	.	+	.	Name=rs34876350;variant_sequence=-/T;
+chr4-04	ensembl_variation	SNP	284884	284884	.	+	.	Name=rs6841950;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	284956	284956	.	+	.	Name=rs6855867;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	285053	285053	.	+	.	Name=rs77807218;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	285548	285548	.	+	.	Name=rs6832556;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	285893	285893	.	+	.	Name=rs73791818;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	285984	285984	.	+	.	Name=rs73791819;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	286344	286344	.	+	.	Name=rs57092574;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	286395	286395	.	+	.	Name=rs59106553;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	286600	286600	.	+	.	Name=rs56229296;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	286676	286676	.	+	.	Name=rs10428380;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	286677	286677	.	+	.	Name=rs61792098;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	286678	286678	.	+	.	Name=rs10428381;variant_sequence=A/C;
+chr4-04	ensembl_variation	deletion	286707	286707	.	+	.	Name=rs34118991;variant_sequence=A/-;
+chr4-04	ensembl_variation	SNP	286709	286709	.	+	.	Name=rs78205493;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	286712	286712	.	+	.	Name=rs61792099;variant_sequence=C/A;
+chr4-04	ensembl_variation	deletion	286768	286768	.	+	.	Name=rs111452322;variant_sequence=A/-;
+chr4-04	ensembl_variation	SNP	286823	286823	.	+	.	Name=rs13133253;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	286824	286824	.	+	.	Name=rs13149604;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	286970	286970	.	+	.	Name=rs28411935;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	287046	287046	.	+	.	Name=rs28784663;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	287141	287141	.	+	.	Name=rs59163505;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	287649	287649	.	+	.	Name=rs12506277;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	287664	287664	.	+	.	Name=rs12505343;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	287846	287846	.	+	.	Name=rs74996354;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	288012	288012	.	+	.	Name=rs79405074;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	288074	288074	.	+	.	Name=rs12501727;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	288284	288284	.	+	.	Name=rs28498753;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	288309	288309	.	+	.	Name=rs116752037;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	288697	288697	.	+	.	Name=rs55711923;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	288786	288786	.	+	.	Name=rs116635147;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	288787	288787	.	+	.	Name=rs118058299;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	288793	288793	.	+	.	Name=rs75532834;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	288799	288799	.	+	.	Name=rs75833793;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	288803	288803	.	+	.	Name=rs79718948;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	288809	288809	.	+	.	Name=rs78732596;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	288816	288816	.	+	.	Name=rs76212162;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	288829	288829	.	+	.	Name=rs76100058;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	288845	288845	.	+	.	Name=rs76162446;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	288853	288853	.	+	.	Name=rs76652139;variant_sequence=G/A;
+chr4-04	ensembl_variation	insertion	288868	288869	.	+	.	Name=rs59264418;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	288870	288870	.	+	.	Name=rs79212688;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	288875	288875	.	+	.	Name=rs79318474;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	288877	288877	.	+	.	Name=rs77194027;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	288893	288893	.	+	.	Name=rs76758124;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	288895	288895	.	+	.	Name=rs80331174;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	288899	288899	.	+	.	Name=rs74338602;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	288922	288922	.	+	.	Name=rs77462754;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	288925	288925	.	+	.	Name=rs78318185;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	288930	288930	.	+	.	Name=rs74906145;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	288932	288932	.	+	.	Name=rs74708111;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	288936	288936	.	+	.	Name=rs77287525;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	288968	288968	.	+	.	Name=rs77927389;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	288974	288974	.	+	.	Name=rs78043905;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	288976	288976	.	+	.	Name=rs79280619;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	288977	288977	.	+	.	Name=rs75233992;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	288981	288981	.	+	.	Name=rs74658891;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	288982	288982	.	+	.	Name=rs79723991;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	288996	288996	.	+	.	Name=rs77103782;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	289001	289001	.	+	.	Name=rs75039624;variant_sequence=T/A;
+chr4-04	ensembl_variation	insertion	289006	289007	.	+	.	Name=rs34182736;variant_sequence=-/C;
+chr4-04	ensembl_variation	insertion	289018	289019	.	+	.	Name=rs35350742;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	289034	289034	.	+	.	Name=rs79931657;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	289040	289040	.	+	.	Name=rs76221862;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	289046	289046	.	+	.	Name=rs111551553;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	289058	289058	.	+	.	Name=rs77014946;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	289068	289068	.	+	.	Name=rs112921104;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	289139	289139	.	+	.	Name=rs61792114;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	289213	289213	.	+	.	Name=rs13118678;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	289244	289244	.	+	.	Name=rs112253195;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	289272	289272	.	+	.	Name=rs112132883;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	289488	289488	.	+	.	Name=rs74686788;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	289490	289490	.	+	.	Name=rs76324531;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	289560	289560	.	+	.	Name=rs78205047;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	289649	289649	.	+	.	Name=rs115426268;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	289835	289835	.	+	.	Name=rs114239297;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	289877	289877	.	+	.	Name=rs62619793;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	290284	290284	.	+	.	Name=rs61792115;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	290322	290322	.	+	.	Name=rs77503766;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	290381	290381	.	+	.	Name=rs7654568;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	290641	290641	.	+	.	Name=rs78355952;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	290914	290914	.	+	.	Name=rs2352936;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	290925	290925	.	+	.	Name=rs113238980;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	291039	291039	.	+	.	Name=rs73217573;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	291053	291053	.	+	.	Name=rs77223069;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	291086	291086	.	+	.	Name=rs77380000;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	291328	291328	.	+	.	Name=rs35130395;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	291397	291397	.	+	.	Name=rs6846655;variant_sequence=A/T;
+chr4-04	ensembl_variation	deletion	291420	291421	.	+	.	Name=rs60725655;variant_sequence=AA/-;
+chr4-04	ensembl_variation	SNP	291421	291421	.	+	.	Name=rs76782413;variant_sequence=A/C;
+chr4-04	ensembl_variation	deletion	291421	291421	.	+	.	Name=rs57681246;variant_sequence=A/-;
+chr4-04	ensembl_variation	SNP	291662	291662	.	+	.	Name=rs2352935;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	291759	291759	.	+	.	Name=rs10003142;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	291950	291950	.	+	.	Name=rs9994510;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	291959	291959	.	+	.	Name=rs116809879;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	291969	291969	.	+	.	Name=rs75991748;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	292000	292000	.	+	.	Name=rs114428980;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	292001	292001	.	+	.	Name=rs10005733;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	292007	292007	.	+	.	Name=rs76099983;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	292067	292067	.	+	.	Name=rs76572209;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	292085	292085	.	+	.	Name=rs75658930;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	292104	292104	.	+	.	Name=rs75819259;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	292127	292127	.	+	.	Name=rs77790028;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	292189	292189	.	+	.	Name=rs113056980;variant_sequence=C/T;
+chr4-04	ensembl_variation	deletion	292203	292203	.	+	.	Name=rs113693845;variant_sequence=C/-;
+chr4-04	ensembl_variation	SNP	292235	292235	.	+	.	Name=rs78686789;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	292242	292242	.	+	.	Name=rs75639235;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	292310	292310	.	+	.	Name=rs74491581;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	292331	292331	.	+	.	Name=rs115789757;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	292369	292369	.	+	.	Name=rs11723803;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	292388	292388	.	+	.	Name=rs73791820;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	292486	292486	.	+	.	Name=rs73791821;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	292668	292668	.	+	.	Name=rs12503543;variant_sequence=C/T;
+chr4-04	ensembl_variation	insertion	292851	292852	.	+	.	Name=rs35105663;variant_sequence=-/G;
+chr4-04	ensembl_variation	SNP	292938	292938	.	+	.	Name=rs76541352;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	293171	293171	.	+	.	Name=rs114109973;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	293226	293226	.	+	.	Name=rs7655058;variant_sequence=A/G;
+chr4-04	ensembl_variation	deletion	293230	293231	.	+	.	Name=rs34906622;variant_sequence=AT/-;
+chr4-04	ensembl_variation	insertion	293251	293252	.	+	.	Name=rs35866088;variant_sequence=-/TA;
+chr4-04	ensembl_variation	insertion	293262	293263	.	+	.	Name=rs61392588;variant_sequence=-/TA;
+chr4-04	ensembl_variation	SNP	293271	293271	.	+	.	Name=rs112663915;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	293417	293417	.	+	.	Name=rs113125124;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	293735	293735	.	+	.	Name=rs113135022;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	293796	293796	.	+	.	Name=rs75049882;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	293865	293865	.	+	.	Name=rs117321689;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	293926	293926	.	+	.	Name=rs74282718;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	294017	294017	.	+	.	Name=rs6856961;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	294018	294018	.	+	.	Name=rs28787332;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	294113	294113	.	+	.	Name=rs4401407;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	294196	294196	.	+	.	Name=rs112043870;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	294263	294263	.	+	.	Name=rs13110091;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	294264	294264	.	+	.	Name=rs77249364;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	294286	294286	.	+	.	Name=rs114659363;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	294335	294335	.	+	.	Name=rs76028337;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	294349	294349	.	+	.	Name=rs77928010;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	294394	294394	.	+	.	Name=rs114696014;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	294397	294397	.	+	.	Name=rs116057011;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	294398	294398	.	+	.	Name=rs115476119;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	294410	294410	.	+	.	Name=rs116128125;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	294422	294422	.	+	.	Name=rs114643969;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	294424	294424	.	+	.	Name=rs115678115;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	294442	294442	.	+	.	Name=rs116157903;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	294444	294444	.	+	.	Name=rs114873384;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	294508	294508	.	+	.	Name=rs112870397;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	294529	294529	.	+	.	Name=rs114001772;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	295525	295526	.	+	.	Name=rs35984540;variant_sequence=-/G;
+chr4-04	ensembl_variation	SNP	295912	295912	.	+	.	Name=rs116435429;variant_sequence=T/C;
+chr4-04	ensembl_variation	insertion	296040	296041	.	+	.	Name=rs113397472;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	296170	296170	.	+	.	Name=rs115869462;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	296274	296274	.	+	.	Name=rs114674955;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	296447	296447	.	+	.	Name=rs112095322;variant_sequence=T/C;
+chr4-04	ensembl_variation	insertion	296943	296944	.	+	.	Name=rs35602170;variant_sequence=-/A;
+chr4-04	ensembl_variation	insertion	296956	296957	.	+	.	Name=rs35409469;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	297077	297077	.	+	.	Name=rs111677123;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	297525	297525	.	+	.	Name=rs12505835;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	297529	297529	.	+	.	Name=rs79627729;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	297547	297547	.	+	.	Name=rs12511388;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	297557	297557	.	+	.	Name=rs112408556;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	297686	297686	.	+	.	Name=rs78153223;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	297812	297813	.	+	.	Name=rs35894346;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	297893	297893	.	+	.	Name=rs74635655;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	297915	297915	.	+	.	Name=rs77149905;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	297932	297932	.	+	.	Name=rs2352927;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	297989	297989	.	+	.	Name=rs2352928;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	298080	298080	.	+	.	Name=rs4373108;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	298094	298094	.	+	.	Name=rs4417915;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	298338	298338	.	+	.	Name=rs11730801;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	298364	298364	.	+	.	Name=rs75390499;variant_sequence=C/T;
+chr4-04	ensembl_variation	insertion	298364	298365	.	+	.	Name=rs71166805;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	298373	298373	.	+	.	Name=rs7660634;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	298772	298772	.	+	.	Name=rs7661412;variant_sequence=G/A;
+chr4-04	ensembl_variation	deletion	298931	298931	.	+	.	Name=rs34512845;variant_sequence=T/-;
+chr4-04	ensembl_variation	SNP	299178	299178	.	+	.	Name=rs10019188;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	299259	299259	.	+	.	Name=rs6852858;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	299261	299261	.	+	.	Name=rs79657896;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	299271	299271	.	+	.	Name=rs116560731;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	299364	299364	.	+	.	Name=rs115951453;variant_sequence=T/C;
+chr4-04	ensembl_variation	deletion	299601	299603	.	+	.	Name=rs35887445;variant_sequence=AAT/-;
+chr4-04	ensembl_variation	SNP	299746	299746	.	+	.	Name=rs76135225;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	299778	299778	.	+	.	Name=rs73791822;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	299964	299964	.	+	.	Name=rs12512676;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	300235	300235	.	+	.	Name=rs114556916;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	300407	300407	.	+	.	Name=rs78640123;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	300442	300442	.	+	.	Name=rs79902242;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	300501	300501	.	+	.	Name=rs115429563;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	300647	300647	.	+	.	Name=rs10014959;variant_sequence=C/A;
+chr4-04	ensembl_variation	deletion	300773	300773	.	+	.	Name=rs34548090;variant_sequence=G/-;
+chr4-04	ensembl_variation	SNP	300795	300795	.	+	.	Name=rs10019453;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	300831	300831	.	+	.	Name=rs115080519;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	301077	301077	.	+	.	Name=rs61792116;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	301272	301272	.	+	.	Name=rs111874231;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	301574	301574	.	+	.	Name=rs115723820;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	301595	301595	.	+	.	Name=rs116821973;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	301720	301720	.	+	.	Name=rs111833408;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	301773	301773	.	+	.	Name=rs61792117;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	301774	301774	.	+	.	Name=rs1986866;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	302008	302008	.	+	.	Name=rs4129956;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	302136	302136	.	+	.	Name=rs28863627;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	302226	302226	.	+	.	Name=rs11729208;variant_sequence=G/A;
+chr4-04	ensembl_variation	deletion	302421	302421	.	+	.	Name=rs112492846;variant_sequence=T/-;
+chr4-04	ensembl_variation	insertion	302434	302435	.	+	.	Name=rs59966100;variant_sequence=-/T;
+chr4-04	ensembl_variation	SNP	302574	302574	.	+	.	Name=rs117549951;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	302664	302664	.	+	.	Name=rs113743932;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	302726	302726	.	+	.	Name=rs10012510;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	302791	302791	.	+	.	Name=rs116734627;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	302820	302820	.	+	.	Name=rs11732707;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	302849	302849	.	+	.	Name=rs114157292;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	302857	302857	.	+	.	Name=rs115119741;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	302934	302934	.	+	.	Name=rs6828802;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	303059	303059	.	+	.	Name=rs79005758;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	303303	303303	.	+	.	Name=rs116439516;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	303443	303443	.	+	.	Name=rs77848190;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	303493	303493	.	+	.	Name=rs114568657;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	303609	303609	.	+	.	Name=rs113641721;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	304003	304003	.	+	.	Name=rs118148467;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	304008	304008	.	+	.	Name=rs116850815;variant_sequence=G/C;
+chr4-04	ensembl_variation	deletion	304262	304264	.	+	.	Name=rs75640186;variant_sequence=CCA/-;
+chr4-04	ensembl_variation	SNP	304388	304388	.	+	.	Name=rs77782115;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	304649	304649	.	+	.	Name=rs7439780;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	305287	305287	.	+	.	Name=rs115791032;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	305291	305291	.	+	.	Name=rs10034550;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	305514	305515	.	+	.	Name=rs35820483;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	305932	305932	.	+	.	Name=rs113109546;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	306092	306092	.	+	.	Name=rs75589822;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	306196	306196	.	+	.	Name=rs112823067;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	306541	306541	.	+	.	Name=rs113283879;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	306661	306661	.	+	.	Name=rs113261074;variant_sequence=G/A;
+chr4-04	ensembl_variation	insertion	306732	306733	.	+	.	Name=rs55700348;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	306855	306855	.	+	.	Name=rs80171987;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	307094	307094	.	+	.	Name=rs6822366;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	307307	307307	.	+	.	Name=rs6828943;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	307369	307369	.	+	.	Name=rs116835805;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	307433	307433	.	+	.	Name=rs13434593;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	307622	307623	.	+	.	Name=rs34524149;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	307707	307707	.	+	.	Name=rs75026280;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	307710	307710	.	+	.	Name=rs79151868;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	307710	307711	.	+	.	Name=rs77347601;variant_sequence=-/AAG;
+chr4-04	ensembl_variation	insertion	307718	307719	.	+	.	Name=rs72598751;variant_sequence=-/AAG;
+chr4-04	ensembl_variation	insertion	307719	307720	.	+	.	Name=rs34024398;variant_sequence=-/AAG;
+chr4-04	ensembl_variation	SNP	307720	307720	.	+	.	Name=rs111794249;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	307721	307721	.	+	.	Name=rs111372533;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	307722	307722	.	+	.	Name=rs114503066;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	307723	307723	.	+	.	Name=rs61792118;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	307725	307725	.	+	.	Name=rs115416518;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	307805	307805	.	+	.	Name=rs80124885;variant_sequence=T/A;
+chr4-04	ensembl_variation	insertion	307854	307855	.	+	.	Name=rs34349366;variant_sequence=-/A;
+chr4-04	ensembl_variation	insertion	307985	307986	.	+	.	Name=rs58082865;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	308010	308010	.	+	.	Name=rs6848983;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	308068	308068	.	+	.	Name=rs76841021;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	308152	308152	.	+	.	Name=rs113058803;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	308154	308154	.	+	.	Name=rs78352775;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	308499	308499	.	+	.	Name=rs13434802;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	308549	308549	.	+	.	Name=rs78627900;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	308596	308596	.	-	.	Name=rs80261151;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	308962	308962	.	+	.	Name=rs78296438;variant_sequence=C/T;
+chr4-04	ensembl_variation	sequence_alteration	309253	309253	.	+	.	Name=rs7669892;variant_sequence=C/A/G;
+chr4-04	ensembl_variation	SNP	309258	309258	.	+	.	Name=rs111456805;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	309558	309558	.	+	.	Name=rs10005699;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	309686	309686	.	+	.	Name=rs7685662;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	309727	309727	.	+	.	Name=rs115057862;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	309800	309800	.	+	.	Name=rs61587838;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	309903	309903	.	+	.	Name=rs11248012;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	310033	310033	.	+	.	Name=rs79743945;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	310044	310044	.	+	.	Name=rs111938627;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	310283	310283	.	+	.	Name=rs4690251;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	310297	310297	.	+	.	Name=rs115915074;variant_sequence=G/A;
+chr4-04	ensembl_variation	insertion	310378	310379	.	+	.	Name=rs35995816;variant_sequence=-/C;
+chr4-04	ensembl_variation	deletion	310384	310384	.	+	.	Name=rs34668634;variant_sequence=G/-;
+chr4-04	ensembl_variation	SNP	310384	310384	.	+	.	Name=rs74921165;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	310488	310488	.	+	.	Name=rs73791826;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	310670	310670	.	+	.	Name=rs115756802;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	310691	310691	.	+	.	Name=rs10021364;variant_sequence=T/C;
+chr4-04	ensembl_variation	insertion	311030	311031	.	+	.	Name=rs34750316;variant_sequence=-/G;
+chr4-04	ensembl_variation	insertion	311038	311039	.	+	.	Name=rs35476693;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	311039	311039	.	+	.	Name=rs56011643;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	311425	311425	.	+	.	Name=rs11248013;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	311487	311487	.	+	.	Name=rs56275185;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	311801	311801	.	+	.	Name=rs113103124;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	311857	311857	.	+	.	Name=rs28372409;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	312061	312061	.	+	.	Name=rs114212536;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	312137	312137	.	+	.	Name=rs116298770;variant_sequence=T/G;
+chr4-04	ensembl_variation	insertion	312178	312179	.	+	.	Name=rs33943278;variant_sequence=-/T;
+chr4-04	ensembl_variation	insertion	312189	312190	.	+	.	Name=rs34195785;variant_sequence=-/T;
+chr4-04	ensembl_variation	insertion	312198	312199	.	+	.	Name=rs58342775;variant_sequence=-/T;
+chr4-04	ensembl_variation	SNP	312665	312665	.	+	.	Name=rs4374577;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	312920	312920	.	+	.	Name=rs76219687;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	312950	312950	.	+	.	Name=rs71602458;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	312953	312953	.	+	.	Name=rs115547082;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	313003	313003	.	+	.	Name=rs111938647;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	313947	313947	.	+	.	Name=rs17718976;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	314108	314108	.	+	.	Name=rs80303103;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	314208	314208	.	+	.	Name=rs77792255;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	314210	314210	.	+	.	Name=rs113601353;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	314362	314362	.	+	.	Name=rs114942228;variant_sequence=C/T;
+chr4-04	ensembl_variation	insertion	314439	314440	.	+	.	Name=rs35701209;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	314539	314539	.	+	.	Name=rs11731415;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	314541	314541	.	+	.	Name=rs111321884;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	314849	314849	.	+	.	Name=rs28441553;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	315279	315279	.	+	.	Name=rs73791827;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	315673	315673	.	+	.	Name=rs6847267;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	315805	315805	.	+	.	Name=rs113858749;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	315890	315890	.	+	.	Name=rs116611682;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	315911	315911	.	+	.	Name=rs79784952;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	316162	316162	.	+	.	Name=rs2001947;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	316377	316377	.	+	.	Name=rs113252687;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	316378	316378	.	+	.	Name=rs112644506;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	316379	316379	.	+	.	Name=rs111893160;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	316729	316729	.	+	.	Name=rs80298182;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	316923	316923	.	+	.	Name=rs78692002;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	316927	316927	.	+	.	Name=rs79600249;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	317690	317690	.	+	.	Name=rs113988940;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	317691	317691	.	+	.	Name=rs28752043;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	317726	317727	.	+	.	Name=rs35042441;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	317756	317756	.	+	.	Name=rs76913492;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	318058	318058	.	+	.	Name=rs79291724;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	318196	318196	.	+	.	Name=rs73217578;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	318269	318269	.	+	.	Name=rs115720072;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	318273	318273	.	+	.	Name=rs7661700;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	318274	318274	.	+	.	Name=rs6847881;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	318275	318275	.	+	.	Name=rs6818538;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	318359	318359	.	+	.	Name=rs61792119;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	318364	318364	.	+	.	Name=rs13110321;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	318532	318532	.	+	.	Name=rs113880905;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	318536	318536	.	+	.	Name=rs77098660;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	318549	318549	.	+	.	Name=rs13120968;variant_sequence=A/C;
+chr4-04	ensembl_variation	deletion	318549	318549	.	+	.	Name=rs59164415;variant_sequence=A/-;
+chr4-04	ensembl_variation	SNP	318550	318550	.	+	.	Name=rs13110777;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	318556	318556	.	+	.	Name=rs113670149;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	318760	318760	.	+	.	Name=rs57380154;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	319105	319105	.	+	.	Name=rs113386709;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	319121	319121	.	+	.	Name=rs113921175;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	319123	319123	.	+	.	Name=rs79056760;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	319125	319125	.	+	.	Name=rs77386963;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	319208	319208	.	+	.	Name=rs10033213;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	319553	319553	.	+	.	Name=rs73217579;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	319689	319689	.	+	.	Name=rs59071324;variant_sequence=A/G;
+chr4-04	ensembl_variation	deletion	319773	319773	.	+	.	Name=rs111444295;variant_sequence=T/-;
+chr4-04	ensembl_variation	SNP	319787	319787	.	+	.	Name=rs77253907;variant_sequence=T/G;
+chr4-04	ensembl_variation	deletion	319788	319788	.	+	.	Name=rs71166806;variant_sequence=T/-;
+chr4-04	ensembl_variation	SNP	320059	320059	.	+	.	Name=rs58102171;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	320411	320411	.	+	.	Name=rs115396080;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	320461	320461	.	+	.	Name=rs73217581;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	320464	320464	.	+	.	Name=rs73217582;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	320481	320481	.	+	.	Name=rs116547041;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	320595	320595	.	+	.	Name=rs115894987;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	320667	320667	.	+	.	Name=rs76112048;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	320696	320696	.	+	.	Name=rs79929361;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	320771	320771	.	+	.	Name=rs60533229;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	320897	320897	.	+	.	Name=rs60869410;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	320934	320934	.	+	.	Name=rs28849156;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	320997	320997	.	+	.	Name=rs113388729;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	321077	321077	.	+	.	Name=rs117139226;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	321415	321415	.	+	.	Name=rs73217583;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	321731	321731	.	+	.	Name=rs113847733;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	321825	321825	.	+	.	Name=rs118076268;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	321902	321902	.	+	.	Name=rs11946825;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	321929	321929	.	+	.	Name=rs73791830;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	321960	321960	.	+	.	Name=rs114639949;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	322026	322026	.	+	.	Name=rs11947752;variant_sequence=C/T;
+chr4-04	ensembl_variation	deletion	322051	322053	.	+	.	Name=rs79443965;variant_sequence=AGC/-;
+chr4-04	ensembl_variation	SNP	322080	322080	.	+	.	Name=rs61792120;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	322223	322223	.	+	.	Name=rs77034783;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	322352	322352	.	+	.	Name=rs114122353;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	322359	322359	.	+	.	Name=rs75081609;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	322515	322515	.	+	.	Name=rs75039103;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	322521	322521	.	+	.	Name=rs76235782;variant_sequence=A/T;
+chr4-04	ensembl_variation	sequence_alteration	322726	322726	.	+	.	Name=rs56182615;variant_sequence=C/T/G;
+chr4-04	ensembl_variation	SNP	322759	322759	.	+	.	Name=rs73217585;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	322787	322787	.	+	.	Name=rs57257197;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	322810	322810	.	+	.	Name=rs73064352;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	322814	322814	.	+	.	Name=rs115106197;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	322931	322931	.	+	.	Name=rs59194971;variant_sequence=C/T;
+chr4-04	ensembl_variation	insertion	322943	322944	.	+	.	Name=rs77039116;variant_sequence=-/TTGAGTCA;
+chr4-04	ensembl_variation	SNP	322946	322946	.	+	.	Name=rs114685629;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	322956	322956	.	+	.	Name=rs11929868;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	322990	322990	.	+	.	Name=rs73064354;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	323003	323003	.	+	.	Name=rs76467771;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	323327	323327	.	+	.	Name=rs59419008;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	323331	323331	.	+	.	Name=rs112256327;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	323335	323335	.	+	.	Name=rs59883453;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	323339	323339	.	+	.	Name=rs61520487;variant_sequence=C/T;
+chr4-04	ensembl_variation	deletion	323339	323340	.	+	.	Name=rs35906781;variant_sequence=CA/-;
+chr4-04	ensembl_variation	deletion	323339	323342	.	+	.	Name=rs60219376;variant_sequence=CATA/-;
+chr4-04	ensembl_variation	deletion	323357	323358	.	+	.	Name=rs35228659;variant_sequence=TA/-;
+chr4-04	ensembl_variation	insertion	323358	323359	.	+	.	Name=rs57380674;variant_sequence=-/TA;
+chr4-04	ensembl_variation	SNP	323404	323404	.	+	.	Name=rs73064356;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	323406	323406	.	+	.	Name=rs79704925;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	323463	323463	.	+	.	Name=rs112448993;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	323474	323474	.	+	.	Name=rs56678228;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	323586	323586	.	+	.	Name=rs114449464;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	323689	323689	.	+	.	Name=rs116533437;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	323746	323746	.	+	.	Name=rs61792122;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	323886	323886	.	+	.	Name=rs12640520;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	323953	323953	.	+	.	Name=rs114158562;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	323954	323954	.	+	.	Name=rs112695261;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	324069	324069	.	+	.	Name=rs75268814;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	324071	324071	.	+	.	Name=rs76585603;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	324242	324243	.	+	.	Name=rs58570103;variant_sequence=-/AAT;
+chr4-04	ensembl_variation	SNP	324335	324335	.	+	.	Name=rs116460974;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	324337	324337	.	+	.	Name=rs6839107;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	324435	324435	.	+	.	Name=rs6853199;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	324719	324719	.	+	.	Name=rs115372345;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	324747	324747	.	+	.	Name=rs116073575;variant_sequence=C/T;
+chr4-04	ensembl_variation	insertion	324766	324767	.	+	.	Name=rs35252169;variant_sequence=-/TTT;
+chr4-04	ensembl_variation	SNP	325036	325036	.	+	.	Name=rs73217587;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	325079	325079	.	+	.	Name=rs7654234;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	325097	325097	.	+	.	Name=rs114779353;variant_sequence=C/T;
+chr4-04	ensembl_variation	deletion	325097	325097	.	+	.	Name=rs34822758;variant_sequence=C/-;
+chr4-04	ensembl_variation	SNP	325127	325127	.	+	.	Name=rs75843656;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	325317	325317	.	+	.	Name=rs115520686;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	325406	325406	.	+	.	Name=rs112979686;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	325470	325470	.	+	.	Name=rs112880788;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	325883	325883	.	+	.	Name=rs61792123;variant_sequence=A/C;
+chr4-04	ensembl_variation	insertion	325944	325945	.	+	.	Name=rs34701336;variant_sequence=-/T;
+chr4-04	ensembl_variation	SNP	325980	325980	.	+	.	Name=rs7655981;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	325992	325992	.	+	.	Name=rs7689416;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	326146	326146	.	+	.	Name=rs13129786;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	326256	326256	.	+	.	Name=rs6846653;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	326475	326475	.	+	.	Name=rs6853198;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	326493	326493	.	+	.	Name=rs6837456;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	326508	326508	.	+	.	Name=rs6847222;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	326803	326803	.	+	.	Name=rs73217589;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	326806	326806	.	+	.	Name=rs13110772;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	326881	326881	.	+	.	Name=rs112983012;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	326904	326904	.	+	.	Name=rs112300904;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	326936	326936	.	+	.	Name=rs112465689;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	326944	326944	.	+	.	Name=rs111641016;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	327198	327198	.	+	.	Name=rs61792124;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	327227	327227	.	+	.	Name=rs115915710;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	327353	327353	.	+	.	Name=rs13137548;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	327380	327380	.	+	.	Name=rs61792125;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	327504	327504	.	+	.	Name=rs7655080;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	327659	327659	.	+	.	Name=rs11936209;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	327804	327804	.	+	.	Name=rs76457459;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	328019	328019	.	+	.	Name=rs76445368;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	328044	328044	.	+	.	Name=rs78730328;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	328421	328421	.	+	.	Name=rs58094550;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	328480	328480	.	+	.	Name=rs61431967;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	328492	328492	.	+	.	Name=rs58361877;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	328509	328509	.	+	.	Name=rs112625818;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	328511	328511	.	+	.	Name=rs58145935;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	328556	328556	.	+	.	Name=rs112101530;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	328697	328697	.	+	.	Name=rs58020250;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	328767	328767	.	+	.	Name=rs59806409;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	328812	328812	.	+	.	Name=rs114353359;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	328821	328821	.	+	.	Name=rs73792140;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	328906	328906	.	+	.	Name=rs61792130;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	329042	329042	.	+	.	Name=rs73217597;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	329062	329062	.	+	.	Name=rs116230769;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	329136	329136	.	+	.	Name=rs115432903;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	329432	329432	.	+	.	Name=rs73792142;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	329501	329501	.	+	.	Name=rs3762866;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	329686	329686	.	+	.	Name=rs3762867;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	329821	329821	.	+	.	Name=rs116873815;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	330114	330114	.	+	.	Name=rs73064371;variant_sequence=C/T;
+chr4-04	ensembl_variation	deletion	330181	330181	.	+	.	Name=rs111227600;variant_sequence=G/-;
+chr4-04	ensembl_variation	SNP	330505	330505	.	+	.	Name=rs13121052;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	330589	330589	.	+	.	Name=rs13131469;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	330684	330684	.	+	.	Name=rs73064374;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	330741	330741	.	+	.	Name=rs13121530;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	330797	330797	.	+	.	Name=rs73064378;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	330849	330849	.	+	.	Name=rs6599327;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	330895	330895	.	+	.	Name=rs116410854;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	330901	330901	.	+	.	Name=rs115618128;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	330950	330950	.	+	.	Name=rs77640350;variant_sequence=T/A;
+chr4-04	ensembl_variation	deletion	331091	331091	.	+	.	Name=rs35724339;variant_sequence=A/-;
+chr4-04	ensembl_variation	SNP	331136	331136	.	+	.	Name=rs77220685;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	331146	331146	.	+	.	Name=rs115073815;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	331229	331229	.	+	.	Name=rs115913393;variant_sequence=G/C;
+chr4-04	ensembl_variation	deletion	331229	331230	.	+	.	Name=rs3834806;variant_sequence=GT/-;
+chr4-04	ensembl_variation	SNP	331349	331349	.	+	.	Name=rs114334322;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	331372	331372	.	+	.	Name=rs7677824;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	331658	331658	.	+	.	Name=rs3749520;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	331666	331666	.	+	.	Name=rs3749521;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	331675	331675	.	+	.	Name=rs3749522;variant_sequence=C/A;
+chr4-04	ensembl_variation	insertion	331693	331694	.	+	.	Name=rs5855672;variant_sequence=-/C;
+chr4-04	ensembl_variation	insertion	331694	331695	.	+	.	Name=rs33917951;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	331696	331696	.	+	.	Name=rs115407293;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	331740	331740	.	+	.	Name=rs3749523;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	331764	331764	.	+	.	Name=rs73064385;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	331866	331866	.	+	.	Name=rs4261927;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	331896	331896	.	+	.	Name=rs4261928;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	331897	331897	.	+	.	Name=rs75145605;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	331907	331907	.	+	.	Name=rs115677187;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	332063	332063	.	+	.	Name=rs116780403;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	332087	332087	.	+	.	Name=rs114871510;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	332128	332128	.	+	.	Name=rs116640416;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	332138	332138	.	+	.	Name=rs114002176;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	332449	332449	.	+	.	Name=rs115050279;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	332542	332542	.	+	.	Name=rs78894128;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	332627	332627	.	+	.	Name=rs115709135;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	332671	332671	.	+	.	Name=rs73064387;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	332781	332781	.	+	.	Name=rs116470367;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	333030	333030	.	+	.	Name=rs115795345;variant_sequence=G/A;
+chr4-04	ensembl_variation	insertion	333288	333289	.	+	.	Name=rs72598752;variant_sequence=-/G;
+chr4-04	ensembl_variation	insertion	333289	333290	.	+	.	Name=rs35185356;variant_sequence=-/G;
+chr4-04	ensembl_variation	SNP	333310	333310	.	+	.	Name=rs11729526;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	333322	333322	.	+	.	Name=rs58500057;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	333384	333384	.	+	.	Name=rs11729532;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	333526	333526	.	+	.	Name=rs73064394;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	333531	333531	.	+	.	Name=rs79051926;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	333596	333596	.	+	.	Name=rs11727981;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	333610	333610	.	+	.	Name=rs77176200;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	333976	333976	.	+	.	Name=rs114724588;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	334213	334213	.	+	.	Name=rs61580954;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	334254	334254	.	+	.	Name=rs73064400;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	334293	334293	.	+	.	Name=rs79034091;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	334304	334304	.	+	.	Name=rs77849020;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	334418	334418	.	+	.	Name=rs115464827;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	334428	334428	.	+	.	Name=rs116126290;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	334497	334497	.	+	.	Name=rs114656131;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	334591	334591	.	+	.	Name=rs78640996;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	334600	334600	.	+	.	Name=rs75091307;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	334613	334613	.	+	.	Name=rs75234965;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	334617	334617	.	+	.	Name=rs79083622;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	334621	334621	.	+	.	Name=rs78396383;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	334647	334647	.	+	.	Name=rs78538668;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	334664	334664	.	+	.	Name=rs79582683;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	334671	334671	.	+	.	Name=rs75793340;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	334696	334696	.	+	.	Name=rs76910478;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	334710	334710	.	+	.	Name=rs79841389;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	334754	334754	.	+	.	Name=rs79300438;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	334764	334764	.	+	.	Name=rs77132186;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	334771	334771	.	+	.	Name=rs80049316;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	334777	334777	.	+	.	Name=rs76813187;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	334797	334797	.	+	.	Name=rs77321155;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	334808	334808	.	+	.	Name=rs77442745;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	334824	334824	.	+	.	Name=rs77506680;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	334835	334835	.	+	.	Name=rs74897519;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	334856	334856	.	+	.	Name=rs74597574;variant_sequence=T/A;
+chr4-04	ensembl_variation	deletion	334862	334862	.	+	.	Name=rs111597104;variant_sequence=T/-;
+chr4-04	ensembl_variation	deletion	334871	334871	.	+	.	Name=rs34755542;variant_sequence=T/-;
+chr4-04	ensembl_variation	deletion	334875	334875	.	+	.	Name=rs56926897;variant_sequence=T/-;
+chr4-04	ensembl_variation	SNP	334876	334876	.	+	.	Name=rs78157142;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	335283	335283	.	+	.	Name=rs115605875;variant_sequence=A/T;
+chr4-04	ensembl_variation	insertion	335301	335302	.	+	.	Name=rs36060329;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	335394	335394	.	+	.	Name=rs116161766;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	335434	335434	.	+	.	Name=rs78313348;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	335438	335438	.	+	.	Name=rs114851193;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	335452	335452	.	+	.	Name=rs116644845;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	335613	335613	.	+	.	Name=rs79021988;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	335932	335932	.	+	.	Name=rs77188978;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	336301	336301	.	+	.	Name=rs116439268;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	336463	336463	.	+	.	Name=rs112100920;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	336494	336494	.	+	.	Name=rs55901060;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	336615	336615	.	-	.	Name=rs14938;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	336658	336658	.	-	.	Name=rs11552842;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	336671	336671	.	-	.	Name=rs11552833;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	336689	336689	.	-	.	Name=rs11552836;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	336704	336704	.	-	.	Name=rs11543161;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	336827	336827	.	+	.	Name=rs77959891;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	337019	337019	.	+	.	Name=rs114171904;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	337084	337084	.	+	.	Name=rs114752580;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	337185	337185	.	+	.	Name=rs117558645;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	337271	337271	.	+	.	Name=rs3762868;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	337376	337376	.	-	.	Name=rs75291536;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	337376	337376	.	+	.	Name=rs61792144;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	337474	337474	.	+	.	Name=rs2352932;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	337501	337501	.	+	.	Name=rs59095927;variant_sequence=G/A;
+chr4-04	ensembl_variation	insertion	337513	337514	.	+	.	Name=rs35268031;variant_sequence=-/A;
+chr4-04	ensembl_variation	insertion	337537	337538	.	+	.	Name=rs71166807;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	337538	337538	.	+	.	Name=rs115220023;variant_sequence=G/A;
+chr4-04	ensembl_variation	deletion	337567	337567	.	+	.	Name=rs60315529;variant_sequence=T/-;
+chr4-04	ensembl_variation	SNP	337613	337613	.	+	.	Name=rs4571280;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	337709	337709	.	+	.	Name=rs75808368;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	337769	337769	.	+	.	Name=rs79176412;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	337794	337794	.	+	.	Name=rs113901747;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	337845	337845	.	+	.	Name=rs116240104;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	337921	337921	.	+	.	Name=rs115461380;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	337926	337926	.	+	.	Name=rs116746268;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	338031	338031	.	+	.	Name=rs76818296;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	338036	338036	.	+	.	Name=rs74606788;variant_sequence=A/T;
+chr4-04	ensembl_variation	deletion	338114	338115	.	+	.	Name=rs3833613;variant_sequence=AA/-;
+chr4-04	ensembl_variation	SNP	338115	338115	.	+	.	Name=rs76078467;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	338129	338129	.	+	.	Name=rs75245145;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	338156	338156	.	+	.	Name=rs79227679;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	338171	338171	.	+	.	Name=rs111369004;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	338186	338186	.	+	.	Name=rs78725891;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	338198	338198	.	+	.	Name=rs78575109;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	338200	338200	.	+	.	Name=rs79869819;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	338202	338202	.	+	.	Name=rs76167181;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	338203	338203	.	+	.	Name=rs75942616;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	338205	338205	.	+	.	Name=rs80052234;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	338213	338213	.	+	.	Name=rs61733103;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	338246	338246	.	+	.	Name=rs79348421;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	338252	338252	.	+	.	Name=rs76962477;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	338258	338258	.	+	.	Name=rs80241916;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	338260	338260	.	+	.	Name=rs76915575;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	338266	338266	.	+	.	Name=rs74323716;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	338289	338289	.	+	.	Name=rs77578216;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	338296	338296	.	+	.	Name=rs77544910;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	338306	338306	.	+	.	Name=rs74908199;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	338308	338308	.	+	.	Name=rs74691923;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	338310	338310	.	+	.	Name=rs75092352;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	338311	338311	.	+	.	Name=rs75382858;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	338313	338313	.	+	.	Name=rs78000808;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	338322	338322	.	+	.	Name=rs78396627;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	338334	338334	.	+	.	Name=rs75796306;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	338337	338337	.	+	.	Name=rs75299168;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	338355	338355	.	+	.	Name=rs79742766;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	338359	338359	.	+	.	Name=rs76521508;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	338364	338364	.	+	.	Name=rs113399189;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	338851	338851	.	+	.	Name=rs34483255;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	338884	338884	.	+	.	Name=rs61792145;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	339385	339385	.	+	.	Name=rs77018968;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	339386	339386	.	+	.	Name=rs80197975;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	339388	339388	.	+	.	Name=rs74471344;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	339557	339557	.	+	.	Name=rs73792145;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	339582	339582	.	+	.	Name=rs73066313;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	339652	339652	.	+	.	Name=rs115731956;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	340019	340019	.	+	.	Name=rs12646983;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	340020	340020	.	+	.	Name=rs12646984;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	340190	340190	.	+	.	Name=rs12647018;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	340684	340684	.	+	.	Name=rs115802431;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	340685	340685	.	+	.	Name=rs116208259;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	340889	340889	.	+	.	Name=rs68126535;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	341215	341215	.	+	.	Name=rs112275142;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	341270	341270	.	+	.	Name=rs61792146;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	341319	341319	.	+	.	Name=rs61792147;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	341361	341361	.	+	.	Name=rs112609182;variant_sequence=C/G;
+chr4-04	ensembl_variation	insertion	341530	341531	.	+	.	Name=rs113198024;variant_sequence=-/A;
+chr4-04	ensembl_variation	insertion	341542	341543	.	+	.	Name=rs57927172;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	341654	341654	.	+	.	Name=rs114945348;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	341656	341656	.	+	.	Name=rs115561965;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	341673	341673	.	+	.	Name=rs117325980;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	341802	341802	.	+	.	Name=rs113620767;variant_sequence=T/G;
+chr4-04	ensembl_variation	deletion	341814	341814	.	+	.	Name=rs35997079;variant_sequence=T/-;
+chr4-04	ensembl_variation	SNP	341959	341959	.	+	.	Name=rs114424096;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	342039	342039	.	+	.	Name=rs76566288;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	342113	342113	.	+	.	Name=rs73217600;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	342377	342377	.	+	.	Name=rs117405395;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	342426	342426	.	+	.	Name=rs79662803;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	342994	342994	.	+	.	Name=rs73066317;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	343020	343021	.	+	.	Name=rs34322430;variant_sequence=-/T;
+chr4-04	ensembl_variation	SNP	343192	343192	.	+	.	Name=rs116803324;variant_sequence=C/A;
+chr4-04	ensembl_variation	insertion	343293	343294	.	+	.	Name=rs34073128;variant_sequence=-/T;
+chr4-04	ensembl_variation	SNP	246640	246640	.	+	.	Name=rs116068146;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	343527	343527	.	+	.	Name=rs76849836;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	246656	246656	.	+	.	Name=rs73793586;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	343528	343528	.	+	.	Name=rs75337215;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	246664	246664	.	+	.	Name=rs116435106;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	343533	343533	.	+	.	Name=rs74666941;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	246700	246700	.	+	.	Name=rs61795003;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	343543	343543	.	+	.	Name=rs60750098;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	247207	247207	.	+	.	Name=rs74848272;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	343652	343652	.	+	.	Name=rs115888797;variant_sequence=G/C;
+chr4-04	ensembl_variation	deletion	247255	247256	.	+	.	Name=rs34738994;variant_sequence=AT/-;
+chr4-04	ensembl_variation	SNP	343734	343734	.	+	.	Name=rs116269826;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	247818	247818	.	+	.	Name=rs74643185;variant_sequence=C/T;
+chr4-04	ensembl_variation	insertion	343795	343796	.	+	.	Name=rs3037605;variant_sequence=-/TGCT;
+chr4-04	ensembl_variation	SNP	247825	247825	.	+	.	Name=rs10028482;variant_sequence=G/A;
+chr4-04	ensembl_variation	insertion	343796	343797	.	+	.	Name=rs59301713;variant_sequence=-/GCTT;
+chr4-04	ensembl_variation	insertion	247876	247877	.	+	.	Name=rs35065588;variant_sequence=-/G;
+chr4-04	ensembl_variation	SNP	344138	344138	.	+	.	Name=rs73217601;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	248055	248055	.	+	.	Name=rs9994989;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	344144	344144	.	+	.	Name=rs115196964;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	248174	248174	.	+	.	Name=rs34951088;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	344236	344236	.	+	.	Name=rs61450142;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	248244	248244	.	+	.	Name=rs35862389;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	344405	344405	.	+	.	Name=rs61481977;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	248328	248328	.	+	.	Name=rs34505342;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	344519	344519	.	+	.	Name=rs7663963;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	248417	248417	.	+	.	Name=rs116639095;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	344606	344606	.	+	.	Name=rs113552584;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	248709	248709	.	+	.	Name=rs6599322;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	344685	344685	.	+	.	Name=rs7697421;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	248744	248744	.	+	.	Name=rs76252400;variant_sequence=A/G;
+chr4-04	ensembl_variation	deletion	344719	344719	.	+	.	Name=rs35754231;variant_sequence=T/-;
+chr4-04	ensembl_variation	SNP	248848	248848	.	+	.	Name=rs10002898;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	344861	344861	.	+	.	Name=rs116839538;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	248893	248893	.	+	.	Name=rs79724879;variant_sequence=G/A;
+chr4-04	ensembl_variation	insertion	344874	344875	.	+	.	Name=rs34984368;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	249303	249303	.	+	.	Name=rs61795004;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	344995	344995	.	+	.	Name=rs73066320;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	249430	249430	.	+	.	Name=rs6857106;variant_sequence=G/T;
+chr4-04	ensembl_variation	deletion	345039	345040	.	+	.	Name=rs78231244;variant_sequence=TT/-;
+chr4-04	ensembl_variation	SNP	249537	249537	.	+	.	Name=rs73793588;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	345252	345252	.	+	.	Name=rs56905415;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	249567	249567	.	+	.	Name=rs73793589;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	345475	345475	.	+	.	Name=rs57731643;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	249661	249661	.	+	.	Name=rs77805970;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	345914	345914	.	+	.	Name=rs4371565;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	250036	250036	.	+	.	Name=rs56985696;variant_sequence=T/C;
+chr4-04	ensembl_variation	insertion	346032	346033	.	+	.	Name=rs34797742;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	250405	250405	.	+	.	Name=rs77219899;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	346689	346689	.	+	.	Name=rs114511550;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	250432	250432	.	+	.	Name=rs116924127;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	346699	346699	.	+	.	Name=rs77114946;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	250434	250434	.	+	.	Name=rs111351468;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	346726	346726	.	+	.	Name=rs115410125;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	250450	250450	.	+	.	Name=rs73793590;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	346758	346758	.	+	.	Name=rs6821220;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	250454	250454	.	-	.	Name=rs76503349;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	346898	346898	.	+	.	Name=rs2352945;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	250522	250522	.	+	.	Name=rs74984113;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	347038	347038	.	+	.	Name=rs73066321;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	250544	250544	.	+	.	Name=rs73793591;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	347120	347120	.	+	.	Name=rs7669794;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	250595	250595	.	+	.	Name=rs113846040;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	347125	347125	.	+	.	Name=rs7682942;variant_sequence=G/C;
+chr4-04	ensembl_variation	insertion	250597	250598	.	+	.	Name=rs34607998;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	347185	347185	.	+	.	Name=rs116749675;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	250641	250641	.	+	.	Name=rs79167157;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	347194	347194	.	+	.	Name=rs17329078;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	250645	250645	.	+	.	Name=rs75984075;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	347203	347203	.	+	.	Name=rs11248014;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	250669	250669	.	+	.	Name=rs112544218;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	347219	347219	.	+	.	Name=rs9715622;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	251416	251416	.	+	.	Name=rs73793592;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	347255	347255	.	+	.	Name=rs6820996;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	251624	251624	.	+	.	Name=rs78148790;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	347262	347262	.	+	.	Name=rs35032247;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	251893	251893	.	+	.	Name=rs73213590;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	347411	347411	.	+	.	Name=rs61792150;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	251896	251896	.	+	.	Name=rs73793593;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	347470	347470	.	+	.	Name=rs7439657;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	252048	252048	.	+	.	Name=rs77078697;variant_sequence=T/C;
+chr4-04	ensembl_variation	insertion	347547	347548	.	+	.	Name=rs71654581;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	252137	252137	.	+	.	Name=rs73213592;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	347714	347714	.	+	.	Name=rs115249188;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	252480	252480	.	+	.	Name=rs28712710;variant_sequence=G/C;
+chr4-04	ensembl_variation	insertion	347747	347748	.	+	.	Name=rs34239724;variant_sequence=-/T;
+chr4-04	ensembl_variation	SNP	252501	252501	.	+	.	Name=rs56147344;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	347918	347918	.	+	.	Name=rs116584319;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	252804	252804	.	+	.	Name=rs12510827;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	348062	348062	.	+	.	Name=rs115321965;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	252836	252836	.	+	.	Name=rs79780296;variant_sequence=A/G;
+chr4-04	ensembl_variation	deletion	348062	348062	.	+	.	Name=rs112852083;variant_sequence=C/-;
+chr4-04	ensembl_variation	SNP	252871	252871	.	+	.	Name=rs12498545;variant_sequence=C/T;
+chr4-04	ensembl_variation	deletion	348066	348066	.	+	.	Name=rs72598753;variant_sequence=C/-;
+chr4-04	ensembl_variation	SNP	252966	252966	.	+	.	Name=rs112158821;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	348096	348096	.	+	.	Name=rs114067128;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	252998	252998	.	+	.	Name=rs77983317;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	348167	348167	.	+	.	Name=rs77495498;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	253008	253008	.	+	.	Name=rs114218307;variant_sequence=G/A;
+chr4-04	ensembl_variation	insertion	348235	348236	.	+	.	Name=rs34379509;variant_sequence=-/G;
+chr4-04	ensembl_variation	SNP	253328	253328	.	+	.	Name=rs111786358;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	348524	348524	.	+	.	Name=rs7690318;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	253491	253491	.	-	.	Name=rs78084122;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	348580	348580	.	+	.	Name=rs73066324;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	253525	253525	.	+	.	Name=rs76336650;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	348946	348946	.	+	.	Name=rs7672205;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	253601	253601	.	+	.	Name=rs61795006;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	349596	349596	.	+	.	Name=rs61792151;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	253766	253766	.	+	.	Name=rs115681450;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	349716	349716	.	+	.	Name=rs73066326;variant_sequence=C/T;
+chr4-04	ensembl_variation	deletion	253821	253824	.	+	.	Name=rs113305604;variant_sequence=TCTT/-;
+chr4-04	ensembl_variation	SNP	349728	349728	.	+	.	Name=rs73066328;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	253847	253847	.	+	.	Name=rs112505624;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	349784	349784	.	+	.	Name=rs7697144;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	253881	253881	.	+	.	Name=rs4518181;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	349847	349847	.	+	.	Name=rs73219204;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	254213	254213	.	+	.	Name=rs117855818;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	349862	349862	.	+	.	Name=rs61140156;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	254419	254419	.	+	.	Name=rs114233186;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	349867	349867	.	+	.	Name=rs59346249;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	254569	254569	.	+	.	Name=rs73064335;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	349874	349874	.	+	.	Name=rs60690562;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	254583	254583	.	+	.	Name=rs73793595;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	349882	349882	.	+	.	Name=rs61237401;variant_sequence=C/T;
+chr4-04	ensembl_variation	insertion	254685	254686	.	+	.	Name=rs112652832;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	349889	349889	.	+	.	Name=rs60202579;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	254746	254746	.	+	.	Name=rs114645989;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	349900	349900	.	+	.	Name=rs58672922;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	254807	254807	.	+	.	Name=rs74482758;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	349904	349904	.	+	.	Name=rs58161640;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	254816	254816	.	+	.	Name=rs74852956;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	349912	349912	.	+	.	Name=rs60368971;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	255073	255073	.	+	.	Name=rs78456397;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	349913	349913	.	+	.	Name=rs58597776;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	255102	255102	.	+	.	Name=rs57435500;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	349914	349914	.	+	.	Name=rs13149871;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	255263	255263	.	+	.	Name=rs60229242;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	349923	349923	.	+	.	Name=rs13149881;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	255264	255264	.	+	.	Name=rs61795007;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	349935	349935	.	+	.	Name=rs59747454;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	255429	255429	.	+	.	Name=rs77982137;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	349942	349942	.	+	.	Name=rs60944334;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	255594	255594	.	+	.	Name=rs73793596;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	349968	349968	.	+	.	Name=rs60057712;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	255758	255758	.	+	.	Name=rs114400649;variant_sequence=C/A;
+chr4-04	ensembl_variation	insertion	349977	349978	.	+	.	Name=rs59361684;variant_sequence=-/TACT;
+chr4-04	ensembl_variation	SNP	255905	255905	.	+	.	Name=rs73793597;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	349982	349982	.	+	.	Name=rs57550020;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	255966	255966	.	+	.	Name=rs111626473;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	349984	349984	.	+	.	Name=rs61671519;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	255994	255994	.	+	.	Name=rs112631443;variant_sequence=G/A;
+chr4-04	ensembl_variation	deletion	350020	350020	.	+	.	Name=rs111839333;variant_sequence=A/-;
+chr4-04	ensembl_variation	SNP	256429	256429	.	+	.	Name=rs114007248;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	350044	350044	.	+	.	Name=rs116268551;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	256450	256450	.	+	.	Name=rs61792060;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	350083	350083	.	+	.	Name=rs115799425;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	256598	256598	.	+	.	Name=rs117573143;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	350525	350525	.	+	.	Name=rs78870565;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	256698	256698	.	+	.	Name=rs111929404;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	350579	350579	.	+	.	Name=rs6825544;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	256851	256851	.	+	.	Name=rs73213593;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	350795	350795	.	+	.	Name=rs12647659;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	256975	256975	.	+	.	Name=rs73793599;variant_sequence=C/T;
+chr4-04	ensembl_variation	deletion	350928	350928	.	+	.	Name=rs36000451;variant_sequence=T/-;
+chr4-04	ensembl_variation	SNP	256979	256979	.	+	.	Name=rs11728100;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	351044	351044	.	+	.	Name=rs10212688;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	257048	257048	.	+	.	Name=rs115632218;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	351209	351209	.	+	.	Name=rs74463326;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	257154	257154	.	+	.	Name=rs115337428;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	351489	351489	.	+	.	Name=rs77592170;variant_sequence=C/T;
+chr4-04	ensembl_variation	deletion	257246	257246	.	+	.	Name=rs112220317;variant_sequence=A/-;
+chr4-04	ensembl_variation	SNP	351651	351651	.	+	.	Name=rs112845648;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	257249	257249	.	+	.	Name=rs28517538;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	351661	351661	.	+	.	Name=rs11721823;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	257258	257258	.	+	.	Name=rs74653446;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	351729	351729	.	+	.	Name=rs113082510;variant_sequence=C/T;
+chr4-04	ensembl_variation	insertion	257258	257259	.	+	.	Name=rs35178489;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	351741	351741	.	+	.	Name=rs6819237;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	257259	257259	.	+	.	Name=rs75047593;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	351783	351783	.	+	.	Name=rs78734670;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	257318	257318	.	+	.	Name=rs73793600;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	351853	351853	.	+	.	Name=rs115361560;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	257365	257365	.	+	.	Name=rs112776858;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	351970	351970	.	+	.	Name=rs12499633;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	257384	257384	.	+	.	Name=rs113402102;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	351972	351972	.	+	.	Name=rs115597071;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	257406	257406	.	+	.	Name=rs75759167;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	352394	352394	.	+	.	Name=rs113243205;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	257500	257500	.	+	.	Name=rs77113404;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	352661	352661	.	+	.	Name=rs55718920;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	257553	257553	.	+	.	Name=rs117100792;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	352768	352768	.	+	.	Name=rs74559842;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	257555	257555	.	+	.	Name=rs118023272;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	352890	352890	.	+	.	Name=rs56171831;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	257729	257729	.	+	.	Name=rs75581629;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	352937	352937	.	+	.	Name=rs74437406;variant_sequence=G/A;
+chr4-04	ensembl_variation	deletion	257941	257941	.	+	.	Name=rs35957357;variant_sequence=T/-;
+chr4-04	ensembl_variation	SNP	352955	352955	.	+	.	Name=rs7682616;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	258032	258032	.	+	.	Name=rs79914894;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	352968	352968	.	+	.	Name=rs56048545;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	258294	258294	.	+	.	Name=rs77234191;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	353088	353088	.	+	.	Name=rs78449876;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	258471	258471	.	+	.	Name=rs28565113;variant_sequence=T/A;
+chr4-04	ensembl_variation	insertion	353097	353098	.	+	.	Name=rs59855402;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	258512	258512	.	+	.	Name=rs7657860;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	353183	353183	.	+	.	Name=rs75612802;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	258609	258609	.	+	.	Name=rs115761664;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	353271	353271	.	+	.	Name=rs77936062;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	258627	258627	.	+	.	Name=rs7658064;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	353898	353898	.	+	.	Name=rs116976302;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	258692	258692	.	+	.	Name=rs113702774;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	353902	353902	.	+	.	Name=rs60054816;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	258788	258788	.	+	.	Name=rs73213594;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	354013	354013	.	+	.	Name=rs75739380;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	258920	258920	.	+	.	Name=rs78301707;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	354044	354044	.	+	.	Name=rs114751295;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	259525	259525	.	+	.	Name=rs79043901;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	354051	354051	.	+	.	Name=rs17719492;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	259638	259638	.	+	.	Name=rs73793601;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	354238	354238	.	+	.	Name=rs7675459;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	259679	259679	.	+	.	Name=rs76635023;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	354256	354256	.	+	.	Name=rs76886738;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	260121	260121	.	+	.	Name=rs10006781;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	354270	354270	.	+	.	Name=rs115249012;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	260165	260165	.	+	.	Name=rs28703806;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	354274	354274	.	+	.	Name=rs116671819;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	260166	260166	.	+	.	Name=rs28415975;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	354589	354589	.	+	.	Name=rs73219209;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	260173	260173	.	+	.	Name=rs28429717;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	354613	354613	.	+	.	Name=rs113178711;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	260176	260176	.	+	.	Name=rs111766204;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	354756	354756	.	+	.	Name=rs76524747;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	260415	260415	.	+	.	Name=rs114500782;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	354878	354878	.	+	.	Name=rs61792154;variant_sequence=A/G;
+chr4-04	ensembl_variation	deletion	260415	260417	.	+	.	Name=rs74271677;variant_sequence=TTT/-;
+chr4-04	ensembl_variation	SNP	354955	354955	.	+	.	Name=rs79402412;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	260417	260417	.	+	.	Name=rs77926823;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	354969	354969	.	+	.	Name=rs115388974;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	260441	260441	.	+	.	Name=rs73793602;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	355103	355103	.	+	.	Name=rs79922358;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	260587	260587	.	+	.	Name=rs17164747;variant_sequence=G/T;
+chr4-04	ensembl_variation	insertion	355103	355104	.	+	.	Name=rs111431602;variant_sequence=-/TCTT;
+chr4-04	ensembl_variation	SNP	260810	260810	.	+	.	Name=rs115074177;variant_sequence=G/C;
+chr4-04	ensembl_variation	insertion	355108	355109	.	+	.	Name=rs72490219;variant_sequence=-/CTTT;
+chr4-04	ensembl_variation	SNP	260950	260950	.	+	.	Name=rs60056532;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	355109	355109	.	+	.	Name=rs77399824;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	261095	261095	.	+	.	Name=rs79716987;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	355176	355176	.	+	.	Name=rs75801112;variant_sequence=G/T;
+chr4-04	ensembl_variation	deletion	261104	261106	.	+	.	Name=rs61296103;variant_sequence=GGG/-;
+chr4-04	ensembl_variation	SNP	355177	355177	.	+	.	Name=rs76633695;variant_sequence=T/G;
+chr4-04	ensembl_variation	insertion	261106	261107	.	+	.	Name=rs71164502;variant_sequence=-/GG;
+chr4-04	ensembl_variation	SNP	356081	356081	.	+	.	Name=rs80248324;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	261156	261156	.	+	.	Name=rs7688540;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	357570	357571	.	+	.	Name=rs59300063;variant_sequence=-/G;
+chr4-04	ensembl_variation	SNP	261274	261274	.	+	.	Name=rs76539830;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	357657	357657	.	+	.	Name=rs61792156;variant_sequence=A/T;
+chr4-04	ensembl_variation	insertion	261381	261382	.	+	.	Name=rs34809141;variant_sequence=-/CA;
+chr4-04	ensembl_variation	SNP	357669	357669	.	+	.	Name=rs11937955;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	261601	261601	.	+	.	Name=rs75442577;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	357785	357785	.	+	.	Name=rs2624729;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	262062	262062	.	+	.	Name=rs10010286;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	357793	357793	.	+	.	Name=rs76047999;variant_sequence=T/C;
+chr4-04	ensembl_variation	insertion	262144	262145	.	+	.	Name=rs112945850;variant_sequence=-/TC;
+chr4-04	ensembl_variation	SNP	357793	357793	.	-	.	Name=rs113200034;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	262145	262146	.	+	.	Name=rs59995882;variant_sequence=-/CT;
+chr4-04	ensembl_variation	SNP	357806	357806	.	+	.	Name=rs62171238;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	262152	262152	.	+	.	Name=rs75470053;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	357817	357817	.	+	.	Name=rs74475438;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	262153	262153	.	+	.	Name=rs77148043;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	357818	357818	.	+	.	Name=rs2784390;variant_sequence=C/T;
+chr4-04	ensembl_variation	insertion	262400	262401	.	+	.	Name=rs35751601;variant_sequence=-/T;
+chr4-04	ensembl_variation	SNP	357821	357821	.	+	.	Name=rs55769528;variant_sequence=G/A;
+chr4-04	ensembl_variation	insertion	262448	262449	.	+	.	Name=rs34190666;variant_sequence=-/G;
+chr4-04	ensembl_variation	SNP	357823	357823	.	+	.	Name=rs74482379;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	262572	262572	.	+	.	Name=rs34293116;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	357841	357841	.	+	.	Name=rs28867109;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	262589	262589	.	+	.	Name=rs34181697;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	357856	357856	.	+	.	Name=rs111353602;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	262598	262598	.	+	.	Name=rs34529823;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	357857	357857	.	-	.	Name=rs79712056;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	262617	262617	.	+	.	Name=rs35773246;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	357870	357870	.	-	.	Name=rs75801552;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	262624	262624	.	+	.	Name=rs36116654;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	357884	357884	.	+	.	Name=rs11723986;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	262874	262874	.	+	.	Name=rs115899071;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	357892	357892	.	-	.	Name=rs113296940;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	262934	262934	.	+	.	Name=rs17775090;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	357914	357914	.	+	.	Name=rs112521424;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	263205	263205	.	+	.	Name=rs80276391;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	357918	357918	.	-	.	Name=rs80163004;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	263319	263319	.	+	.	Name=rs7674560;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	357918	357918	.	-	.	Name=rs77278650;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	263400	263400	.	+	.	Name=rs112824916;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	357926	357926	.	-	.	Name=rs112532717;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	263427	263427	.	+	.	Name=rs111314890;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	357931	357931	.	+	.	Name=rs77220357;variant_sequence=C/A;
+chr4-04	ensembl_variation	deletion	263482	263482	.	+	.	Name=rs112413297;variant_sequence=A/-;
+chr4-04	ensembl_variation	SNP	357956	357956	.	+	.	Name=rs111411991;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	263562	263562	.	+	.	Name=rs112975726;variant_sequence=C/T;
+chr4-04	ensembl_variation	insertion	357956	357957	.	-	.	Name=rs35441996;variant_sequence=-/G;
+chr4-04	ensembl_variation	SNP	263638	263638	.	+	.	Name=rs115344128;variant_sequence=C/A;
+chr4-04	polya_signal	polyA_signal_sequence	249422	249427	.	+	.
+chr4-04	polya_signal	polyA_signal_sequence	249755	249760	.	+	.
+chr4-04	polya_site	polyA_site	249773	249774	.	+	.
+chr4-04	polya_site	polyA_site	249444	249445	.	+	.
+chr4-04	transcript_trunc	mRNA	247349	249774	.	+	.	ID=transcript2;Name=RP11-2H3.4-001
+chr4-04	transcript_trunc	exon	247349	249774	.	+	.	Parent=transcript2
+chr4-04	transcript_trunc	mRNA	331622	352339	.	+	.	ID=transcript3;Name=RP11-2H3.1-003
+chr4-04	transcript_trunc	exon	331622	331775	.	+	.	Parent=transcript3
+chr4-04	transcript_trunc	exon	337571	337697	.	+	.	Parent=transcript3
+chr4-04	transcript_trunc	exon	338124	338219	.	+	.	Parent=transcript3
+chr4-04	transcript_trunc	exon	351997	352339	.	+	.	Parent=transcript3
+chr4-04	transcript_trunc	mRNA	331603	331775	.	+	.	ID=transcript4;Name=RP11-2H3.1-006
+chr4-04	transcript_trunc	exon	331603	331775	.	+	.	Parent=transcript4
+chr4-04	CCDS_Gene	mRNA	264888	299099	.	-	.	ID=transcript5;Name=CCDS46990.1
+chr4-04	CCDS_Gene	exon	299097	299099	.	-	.	Parent=transcript5
+chr4-04	CCDS_Gene	CDS	299097	299099	.	-	0	Parent=transcript5
+chr4-04	CCDS_Gene	exon	289818	289944	.	-	.	Parent=transcript5
+chr4-04	CCDS_Gene	CDS	289818	289944	.	-	1	Parent=transcript5
+chr4-04	CCDS_Gene	exon	289227	289322	.	-	.	Parent=transcript5
+chr4-04	CCDS_Gene	CDS	289227	289322	.	-	1	Parent=transcript5
+chr4-04	CCDS_Gene	exon	264888	266419	.	-	.	Parent=transcript5
+chr4-04	CCDS_Gene	CDS	264888	266419	.	-	0	Parent=transcript5
+chr4-04	CCDS_Gene	mRNA	331773	338219	.	+	.	ID=transcript6;Name=CCDS33931.1
+chr4-04	CCDS_Gene	exon	331773	331775	.	+	.	Parent=transcript6
+chr4-04	CCDS_Gene	exon	337571	337697	.	+	.	Parent=transcript6
+chr4-04	CCDS_Gene	exon	338124	338219	.	+	.	Parent=transcript6
+chr4-04	Augustus	mRNA	330156	330563	.	-	.	ID=transcript7;Name=AUGUSTUS00000051712
+chr4-04	Augustus	exon	330156	330563	.	-	.	Parent=transcript7
+chr4-04	Augustus	CDS	330156	330563	.	-	0	Parent=transcript7
+chr4-04	Genscan	mRNA	330013	333007	.	-	.	ID=transcript8;Name=GENSCAN00000046298
+chr4-04	Genscan	exon	332861	333007	.	-	.	Parent=transcript8
+chr4-04	Genscan	CDS	332861	333007	.	-	0	Parent=transcript8
+chr4-04	Genscan	exon	330841	331098	.	-	.	Parent=transcript8
+chr4-04	Genscan	CDS	330841	331098	.	-	0	Parent=transcript8
+chr4-04	Genscan	exon	330289	330722	.	-	.	Parent=transcript8
+chr4-04	Genscan	CDS	330289	330722	.	-	2	Parent=transcript8
+chr4-04	Genscan	exon	330013	330175	.	-	.	Parent=transcript8
+chr4-04	Genscan	CDS	330013	330175	.	-	0	Parent=transcript8
+chr4-04	Genscan	mRNA	221598	299038	.	-	.	ID=transcript9;Name=GENSCAN00000046296
+chr4-04	Genscan	exon	298963	299038	.	-	.	Parent=transcript9
+chr4-04	Genscan	CDS	298963	299038	.	-	0	Parent=transcript9
+chr4-04	Genscan	exon	289227	289301	.	-	.	Parent=transcript9
+chr4-04	Genscan	CDS	289227	289301	.	-	1	Parent=transcript9
+chr4-04	Genscan	exon	266273	266395	.	-	.	Parent=transcript9
+chr4-04	Genscan	CDS	266273	266395	.	-	1	Parent=transcript9
+chr4-04	Genscan	exon	228521	228666	.	-	.	Parent=transcript9
+chr4-04	Genscan	CDS	228521	228666	.	-	0	Parent=transcript9
+chr4-04	Genscan	exon	221598	221681	.	-	.	Parent=transcript9
+chr4-04	Genscan	CDS	221598	221681	.	-	0	Parent=transcript9
+chr4-04	Halfwise	mRNA	262776	262844	.	-	.	ID=transcript10;Name=zf-C2H2.40836
+chr4-04	Halfwise	exon	262776	262844	.	-	.	Parent=transcript10
+chr4-04	Halfwise	CDS	262776	262844	.	-	0	Parent=transcript10
+chr4-04	Halfwise	mRNA	263873	263941	.	-	.	ID=transcript11;Name=zf-C2H2.40835
+chr4-04	Halfwise	exon	263873	263941	.	-	.	Parent=transcript11
+chr4-04	Halfwise	CDS	263873	263941	.	-	0	Parent=transcript11
+chr4-04	Halfwise	mRNA	211321	251478	.	-	.	ID=transcript12;Name=zf-C2H2.40837
+chr4-04	Halfwise	exon	251454	251478	.	-	.	Parent=transcript12
+chr4-04	Halfwise	CDS	251454	251478	.	-	0	Parent=transcript12
+chr4-04	Halfwise	exon	228409	228425	.	-	.	Parent=transcript12
+chr4-04	Halfwise	CDS	228409	228425	.	-	0	Parent=transcript12
+chr4-04	Halfwise	exon	211321	211350	.	-	.	Parent=transcript12
+chr4-04	Halfwise	CDS	211321	211350	.	-	0	Parent=transcript12
+chr4-04	Halfwise	mRNA	289816	289938	.	-	.	ID=transcript13;Name=KRAB.40832
+chr4-04	Halfwise	exon	289816	289938	.	-	.	Parent=transcript13
+chr4-04	Halfwise	CDS	289816	289938	.	-	0	Parent=transcript13
+chr4-04	Halfwise	mRNA	337577	337699	.	+	.	ID=transcript14;Name=KRAB.40834
+chr4-04	Halfwise	exon	337577	337699	.	+	.	Parent=transcript14
+chr4-04	Halfwise	CDS	337577	337699	.	+	0	Parent=transcript14
+chr4-04	known_cds_trunc	mRNA	331624	338219	.	+	.	ID=transcript15;Name=RP11-2H3.1-001
+chr4-04	known_cds_trunc	exon	331624	331775	.	+	.	Parent=transcript15
+chr4-04	known_cds_trunc	exon	337571	337697	.	+	.	Parent=transcript15
+chr4-04	known_cds_trunc	exon	338124	338219	.	+	.	Parent=transcript15
+chr4-04	Augustus	mRNA	330156	330563	.	-	.	ID=transcript16;Name=AUGUSTUS00000051712
+chr4-04	Augustus	exon	330156	330563	.	-	.	Parent=transcript16
+chr4-04	Augustus	CDS	330156	330563	.	-	0	Parent=transcript16
+chr4-04	Halfwise	mRNA	262776	262844	.	-	.	ID=transcript17;Name=zf-C2H2.40836
+chr4-04	Halfwise	exon	262776	262844	.	-	.	Parent=transcript17
+chr4-04	Halfwise	CDS	262776	262844	.	-	0	Parent=transcript17
+chr4-04	Halfwise	mRNA	263873	263941	.	-	.	ID=transcript18;Name=zf-C2H2.40835
+chr4-04	Halfwise	exon	263873	263941	.	-	.	Parent=transcript18
+chr4-04	Halfwise	CDS	263873	263941	.	-	0	Parent=transcript18
+chr4-04	Halfwise	mRNA	211321	251478	.	-	.	ID=transcript19;Name=zf-C2H2.40837
+chr4-04	Halfwise	exon	251454	251478	.	-	.	Parent=transcript19
+chr4-04	Halfwise	CDS	251454	251478	.	-	0	Parent=transcript19
+chr4-04	Halfwise	exon	228409	228425	.	-	.	Parent=transcript19
+chr4-04	Halfwise	CDS	228409	228425	.	-	0	Parent=transcript19
+chr4-04	Halfwise	exon	211321	211350	.	-	.	Parent=transcript19
+chr4-04	Halfwise	CDS	211321	211350	.	-	0	Parent=transcript19
+chr4-04	Halfwise	mRNA	289816	289938	.	-	.	ID=transcript20;Name=KRAB.40832
+chr4-04	Halfwise	exon	289816	289938	.	-	.	Parent=transcript20
+chr4-04	Halfwise	CDS	289816	289938	.	-	0	Parent=transcript20
+chr4-04	Halfwise	mRNA	337577	337699	.	+	.	ID=transcript21;Name=KRAB.40834
+chr4-04	Halfwise	exon	337577	337699	.	+	.	Parent=transcript21
+chr4-04	Halfwise	CDS	337577	337699	.	+	0	Parent=transcript21
+chr4-04	putative_cds_trunc	mRNA	331623	338219	.	+	.	ID=transcript22;Name=RP11-2H3.1-005
+chr4-04	putative_cds_trunc	exon	331623	331775	.	+	.	Parent=transcript22
+chr4-04	putative_cds_trunc	exon	337571	337697	.	+	.	Parent=transcript22
+chr4-04	putative_cds_trunc	exon	338124	338219	.	+	.	Parent=transcript22
+chr4-04	putative_cds_trunc	mRNA	331609	338219	.	+	.	ID=transcript23;Name=RP11-2H3.1-002
+chr4-04	putative_cds_trunc	exon	331609	331775	.	+	.	Parent=transcript23
+chr4-04	putative_cds_trunc	exon	337571	337697	.	+	.	Parent=transcript23
+chr4-04	putative_cds_trunc	exon	338124	338219	.	+	.	Parent=transcript23
+chr4-04	ensembl_ncRNA	mRNA	343946	344041	.	+	.	ID=transcript24;Name=MIR571.388281
+chr4-04	ensembl_ncRNA	exon	343946	344041	.	+	.	Parent=transcript24
+chr4-04	Genscan	mRNA	330013	333007	.	-	.	ID=transcript25;Name=GENSCAN00000046298
+chr4-04	Genscan	exon	332861	333007	.	-	.	Parent=transcript25
+chr4-04	Genscan	CDS	332861	333007	.	-	0	Parent=transcript25
+chr4-04	Genscan	exon	330841	331098	.	-	.	Parent=transcript25
+chr4-04	Genscan	CDS	330841	331098	.	-	0	Parent=transcript25
+chr4-04	Genscan	exon	330289	330722	.	-	.	Parent=transcript25
+chr4-04	Genscan	CDS	330289	330722	.	-	2	Parent=transcript25
+chr4-04	Genscan	exon	330013	330175	.	-	.	Parent=transcript25
+chr4-04	Genscan	CDS	330013	330175	.	-	0	Parent=transcript25
+chr4-04	Genscan	mRNA	221598	299038	.	-	.	ID=transcript26;Name=GENSCAN00000046296
+chr4-04	Genscan	exon	298963	299038	.	-	.	Parent=transcript26
+chr4-04	Genscan	CDS	298963	299038	.	-	0	Parent=transcript26
+chr4-04	Genscan	exon	289227	289301	.	-	.	Parent=transcript26
+chr4-04	Genscan	CDS	289227	289301	.	-	1	Parent=transcript26
+chr4-04	Genscan	exon	266273	266395	.	-	.	Parent=transcript26
+chr4-04	Genscan	CDS	266273	266395	.	-	1	Parent=transcript26
+chr4-04	Genscan	exon	228521	228666	.	-	.	Parent=transcript26
+chr4-04	Genscan	CDS	228521	228666	.	-	0	Parent=transcript26
+chr4-04	Genscan	exon	221598	221681	.	-	.	Parent=transcript26
+chr4-04	Genscan	CDS	221598	221681	.	-	0	Parent=transcript26
+chr4-04	ensembl_havana_transcripts	mRNA	264464	299110	.	-	.	ID=transcript27;Name=ZNF732.317436
+chr4-04	ensembl_havana_transcripts	exon	299097	299110	.	-	.	Parent=transcript27
+chr4-04	ensembl_havana_transcripts	CDS	299097	299099	.	-	0	Parent=transcript27
+chr4-04	ensembl_havana_transcripts	exon	289818	289944	.	-	.	Parent=transcript27
+chr4-04	ensembl_havana_transcripts	CDS	289818	289944	.	-	1	Parent=transcript27
+chr4-04	ensembl_havana_transcripts	exon	289227	289322	.	-	.	Parent=transcript27
+chr4-04	ensembl_havana_transcripts	CDS	289227	289322	.	-	1	Parent=transcript27
+chr4-04	ensembl_havana_transcripts	exon	264464	266419	.	-	.	Parent=transcript27
+chr4-04	ensembl_havana_transcripts	CDS	264888	266419	.	-	0	Parent=transcript27
+chr4-04	ensembl_havana_transcripts	mRNA	331624	338219	.	+	.	ID=transcript28;Name=ZNF141.317475
+chr4-04	ensembl_havana_transcripts	exon	331624	331775	.	+	.	Parent=transcript28
+chr4-04	ensembl_havana_transcripts	exon	337571	337697	.	+	.	Parent=transcript28
+chr4-04	ensembl_havana_transcripts	exon	338124	338219	.	+	.	Parent=transcript28
+chr4-04	ensembl_EST_genes	mRNA	247349	247934	.	+	.	ID=transcript29;Name=ENSESTT00000087222
+chr4-04	ensembl_EST_genes	exon	247349	247934	.	+	.	Parent=transcript29
+chr4-04	ensembl_EST_genes	mRNA	331603	331775	.	+	.	ID=transcript30;Name=ENSESTT00000087249
+chr4-04	ensembl_EST_genes	exon	331603	331775	.	+	.	Parent=transcript30
+chr4-04	ensembl_EST_genes	mRNA	247725	247760	.	+	.	ID=transcript31;Name=ENSESTT00000087201
+chr4-04	ensembl_EST_genes	exon	247725	247760	.	+	.	Parent=transcript31
+chr4-04	ensembl_EST_genes	mRNA	330936	337660	.	+	.	ID=transcript32;Name=ENSESTT00000087238
+chr4-04	ensembl_EST_genes	exon	330936	331116	.	+	.	Parent=transcript32
+chr4-04	ensembl_EST_genes	CDS	330938	331116	.	+	0	Parent=transcript32
+chr4-04	ensembl_EST_genes	exon	337571	337660	.	+	.	Parent=transcript32
+chr4-04	ensembl_EST_genes	CDS	337571	337580	.	+	1	Parent=transcript32
+chr4-04	ensembl_EST_genes	mRNA	213083	247631	.	+	.	ID=transcript33;Name=ENSESTT00000087219
+chr4-04	ensembl_EST_genes	exon	213083	213178	.	+	.	Parent=transcript33
+chr4-04	ensembl_EST_genes	exon	247349	247631	.	+	.	Parent=transcript33
+chr4-04	ensembl_EST_genes	mRNA	331596	338219	.	+	.	ID=transcript34;Name=ENSESTT00000087246
+chr4-04	ensembl_EST_genes	exon	331596	331775	.	+	.	Parent=transcript34
+chr4-04	ensembl_EST_genes	exon	337571	337697	.	+	.	Parent=transcript34
+chr4-04	ensembl_EST_genes	exon	338124	338219	.	+	.	Parent=transcript34
+chr4-04	polya_signal	polyA_signal_sequence	249422	249427	.	+	.
+chr4-04	polya_signal	polyA_signal_sequence	249755	249760	.	+	.
+chr4-04	polya_site	polyA_site	249773	249774	.	+	.
+chr4-04	polya_site	polyA_site	249444	249445	.	+	.
diff --git a/test/data/chr4_protein_align.gff b/test/data/chr4_protein_align.gff
new file mode 100644
index 0000000..d501723
--- /dev/null
+++ b/test/data/chr4_protein_align.gff
@@ -0,0 +1,4904 @@
+##gff-version 3
+##sequence-region chr4-04 246635 359336
+chr4-04	SwissProt	protein_match	266088	266159	65.000000	-	.	Target=O14709.1 420 445 +;percentID=50;Gap=M8 I2 M16 ;sequence=MTRENVAHNALRQEGLVKGKDDTWKWGTSFQGSSSSVWETSHLHFRQLRYHETSGPQEALSRLRELCRRWLRPEARTKAQILELLVLEQFLSILPGEIRTWVQLHHPGSGEEAVALVEELQKDLDGPAIQVPVLVKDQDTLQKVVSAPGTTLPPVLPGSHIAAEICPHPPTDLVAFNLQDPQHDSPAPEASALSQEENPRNQLMALMLLTAQPQELVMFEEVSVCFTSEEWACLGPIQRALYWDVMLENYGNVTSLEWETMTENEEVTSKPSSSQRADSHKGTSKRLQGSVPQVLDFEEECEWQVLASQWGNETDERADTVKKVSLCERDKKKRTPPEKQGQKWKELGDSLTFGSAISESLIGTEGKKF [...]
+chr4-04	SwissProt	protein_match	266088	266171	65.000000	-	.	Target=P51508.3 461 489 +;percentID=50;Gap=M3 D1 M8 I2 M16 ;sequence=MPANEDAPQPGEHGSACEVSVSFEDVTVDFSREEWQQLDSTQRRLYQDVMLENYSHLLSVGFEVPKPEVIFKLEQGEGPWTLEGEAPHQSCSDGKFGIKPSQRRISGKSTFHSEMEGEDTRDDSLYSILEELWQDAEQIKRCQEKHNKLLSRTTFLNKKILNTEWDYEYKDFGKFVHPSPNLILSQKRPHKRDSFGKSFKHNLDLHIHNKSNAAKNLDKTIGHGQVFTQNSSYSHHENTHTGVKFCERNQCGKVLSLKHSLSQNVKFPIGEKANTCTEFGKIFTQRSHFFAPQKIHTVEKPHELSKCVNVFTQKPLLSIYLRVHRDEKLYICTKCGKAFIQNSELIMHEKTHTREKPYKCNEC [...]
+chr4-04	SwissProt	protein_match	266088	266159	65.000000	-	.	Target=Q6P560.1 313 338 +;percentID=50;Gap=M8 I2 M16 ;sequence=MAKPQEPVTFEDVAVDFTQEEWQYLNSPQRTLYRDVMLETYSNLVSVCEVASIGSEDQGGISHLSSLEQQVTKPDLIIKLEVEEPDPEDGEIPVWSFPEVCQINEQFERQHQDKQDKYLLMQVRLPNDNIITKSGQNYTDFRNAFHLSTGLLVPMQRSHKFESFGNTMVDNLNLLTGSSTENKHDTGCAKFFFHTEYENPNFIVKPCGYKEYEKTLSQKKGLSLHQRIKNGERPFECTACQKTFSKKSHLIVHWRTHTGEKPFECSECGKAFSQKSQLIIHLRTHTGERPFACPECGKAFREKSTVIIHYRTHTGEKPYECNQCGKAFTQKSNLIVHQKTHTGEKTYECTKCGESFIQKLDLIIHHSTH [...]
+chr4-04	SwissProt	protein_match	266088	266192	68.000000	-	.	Target=Q8N988-2.2 244 283 +;percentID=45;Gap=M9 I2 M2 I1 M8 I2 M16 ;sequence=MAAVVLPPTAALSSLFPASQREGHTEGGELVNELLKSWLKGLVTFEDVAVEFTQEEWALLDPAQRTLYRDVMLENCRNLASLGNQVDKPRLISQLEQEDKVMTEERGILSGTCPDVENPFKAKGLTPKLHVFRKEQSRNMKMERNHLGATLNECNQCFKVFSTKSSLTRHRKIHTGERPYGCSECGKSYSSRSYLAVHKRIHNGEKPYECNDCGKTFSSRSYLTVHKRIHNGEKPYECSDCGKTFSNSSYLRPHLRIHTGEKPYKCNQCFREFRTQSIFTRHKRVHTGEGHYVCNQCGKAFGTRSSLSSHYSIHTGEYPYECHDCGRTFRRRSNLTQHIRTHTGEKPYTCNECGK [...]
+chr4-04	SwissProt	protein_match	266088	266192	68.000000	-	.	Target=Q8N988.2 237 276 +;percentID=45;Gap=M9 I2 M2 I1 M8 I2 M16 ;sequence=MAAVVLPPTAASQREGHTEGGELVNELLKSWLKGLVTFEDVAVEFTQEEWALLDPAQRTLYRDVMLENCRNLASLGNQVDKPRLISQLEQEDKVMTEERGILSGTCPDVENPFKAKGLTPKLHVFRKEQSRNMKMERNHLGATLNECNQCFKVFSTKSSLTRHRKIHTGERPYGCSECGKSYSSRSYLAVHKRIHNGEKPYECNDCGKTFSSRSYLTVHKRIHNGEKPYECSDCGKTFSNSSYLRPHLRIHTGEKPYKCNQCFREFRTQSIFTRHKRVHTGEGHYVCNQCGKAFGTRSSLSSHYSIHTGEYPYECHDCGRTFRRRSNLTQHIRTHTGEKPYTCNECGKSFTNSFSLT [...]
+chr4-04	SwissProt	protein_match	266088	266159	69.000000	-	.	Target=Q86T29.1 443 468 +;percentID=53;Gap=M8 I2 M16 ;sequence=MIQSQISFEDVAVDFTLEEWQLLNPTQKNLYRDVMLENYSNLVFLEVWLDNPKMWLRDNQDNLKSMERGHKYDVFGKIFNSSINIVHVGLRSHKCGTGEKSLKCPFDLLIPKNNCERKKIDELNKKLLFCIKPGRTHGGIKYCDCSTCRKSSNEEPWLTANHITHTGVYLCMECGRFFNKKSQLVIHQRTHTGEKPYQCSECGKAFSQKSLLTVHQRTHSGEKPHGCSECQKAFSRKSLLILHQRIHTGEKPYGCSECGKAFSRKSQLKRHQITHTIEKPYSCSECGKAFSQKLKLITHQRAHTGEKPYPCSHCGKAFFWKSQLITHQRTHTGKKPYGCGECQKAFSRNSLLIRHQRIHTGEKPYECNE [...]
+chr4-04	SwissProt	protein_match	266088	266171	69.000000	-	.	Target=Q5RB30.1 373 401 +;percentID=53;Gap=M3 D1 M7 I2 M17 ;sequence=MPASWTSPQKSSALAPDDHGSSYEGSVSFRDVVINFSREEWQHLDLSQRNLYRDVMLETYSHLLSVGYQVPKPEVVMLEQGKEPWALQGERPRHSCPGEKLWDHNQHRKIIGYKPASSQDQKIYSGEKSYECAEFGKSFTWKSQFKVHLKVPTGEKLYVCIECGRAFVQKPEFITHQKAHMREKPYKCNECGKSVFQVSSLFRHQRIHTGEKLYQCSECGKGFPYNSDLSIHEKIHTGERHHECTDCGKAFTQRSTLKMHQKIHTGERSYICIECGQAFIQKTQLIAHRRIHSGEKPYECNNCGKSFISKSQLEVHQRIHTRLKPYICTEYGKVFSNNSNLITHEKVQSREKSSICTECGKAF [...]
+chr4-04	SwissProt	protein_match	266088	266171	71.000000	-	.	Target=Q6P1L6.1 400 428 +;percentID=50;Gap=M3 D1 M7 I2 M17 ;sequence=MMLPYPSALGDQYWEEILLPKNGENVETMKKLTQNHKAKGLPSNDTDCPQKKEGKAQIVVPVTFRDVTVIFTEAEWKRLSPEQRNLYKEVMLENYRNLLSLAEPKPEIYTCSSCLLAFSCQQFLSQHVLQIFLGLCAENHFHPGNSSPGHWKQQGQQYSHVSCWFENAEGQERGGGSKPWSARTEERETSRAFPSPLQRQSASPRKGNMVVETEPSSAQRPNPVQLDKGLKELETLRFGAINCREYEPDHNLESNFITNPRTLLGKKPYICSDCGRSFKDRSTLIRHHRIHSMEKPYVCSECGRGFSQKSNLSRHQRTHSEEKPYLCRECGQSFRSKSILNRHQWTHSEEKPYVCSECGRGFS [...]
+chr4-04	SwissProt	protein_match	266088	266231	72.000000	-	.	Target=Q8N2I2.1 189 235 +;percentID=40;Gap=M15 D1 M6 D2 M7 I2 M17 ;sequence=MGQPAPYAEGPIQGGDAGELCKCDFLVSISIPQTRSDIPAGARRSSMGPRSLDTCWGRGPERHVHRLECNGVIFTHRNLCLPGGKTKTENEEKTAQLNISKESESHRLIVEGLLMDVPQHPDFKDRLEKSQLHDTGNKTKIGDCTDLTVQDHESSTTEREEIARKLEESSVSTHLITKQGFAKEQVFYKCGECGSYYNPHSDFHLHQRVHTNEKPYTCKECGKTFRYNSKLSRHQKIHTGEKPYSCEECGQAFSQNSHLLQHQKLHGGQRPYECTDCGKTFSYNSKLIRHQRIHTGEKPFKCKECGKAFSCSYDCIIHERIHNGEKPYECKECGKSLSSNSVLIQHQRIHTGEKPY [...]
+chr4-04	SwissProt	protein_match	266088	266174	73.000000	-	.	Target=Q9NSJ1.2 61 91 +;percentID=51;Gap=M13 I2 M16 ;sequence=MRDEVAEKEKADINVTLVFQGYENTPIMVCVDGIVFSKPDLVTCLEQRKKPWSMKHPGLTQHNIVHTGDKPYKCKDCGKIFKWSSNLTIHQRIHSGEKPYKCEECGKAFKQSSKLNEHMRAHTGEKFYKCEECGKAFKHPSGLTLHKRIHTGENPYKFEECDKAFYWVLSFTKHMIIHRGEKPYKYQECGKAFKWSSNLTIHKRIHTGEKPCKCEECGKACKQSLGLTIQKRIHTEEKPYKCEECGSSNLTIYKKIHAGEKPYNCEKCGKAFYCSSNLIQNNIVHAEEKHYKCQECGKAFKKSLDLNVHKIIHSGEKPYRYEECGKITHSGEESYKCEECGKGFYCSSSLTKHMIVHTEEKLYKCEECGK [...]
+chr4-04	SwissProt	protein_match	266088	266192	74.000000	-	.	Target=Q969W8.1 179 218 +;percentID=50;Gap=M7 I3 M11 I2 M17 ;sequence=MAQESVMFSDVSVDFSQEEWECLNDDQRDLYRDVMLENYSNLVSMGHSISKPNVISYLEQGKEPWLADRELTRGQWPVLESRCETKKLFLKKEIYEIESTQWEIMEKLTRRDFQCSSFRDDWECNRQFKKELGSQGGHFNQLVFTHEDLPTLSHHPSFTLQQIINSKKKFCASKEYRKTFRHGSQFATHEIIHTIEKPYECKECGKSFRHPSRLTHHQKIHTGKKPFECKECGKTFICGSDLTRHHRIHTGEKPYECKECGKAFSSGSNFTRHQRIHTGEKPYECKECGKAFSSGSNFTQHQRIHTGEKPYECKECGNAFSQSSQLIKHQRIHTGEKPYECKECEKAFRSGSDLTRHQRIHT [...]
+chr4-04	SwissProt	protein_match	266088	266219	74.000000	-	.	Target=Q8IVC4.1 216 261 +;percentID=41;Gap=M28 I2 M16 ;sequence=MAGEAEAQLDPSLQGLVMFEDVTVYFSREEWGLLNVTQKGLYRDVMLENFALVSSLGLAPSRSPVFTQLEDDEQSWVPSWVDVTPVSRAEARRGFGLDGLCRVEDERAHPEHLKSYRVIQHQDTHSEGKPRRHTEHGAAFPPGSSCGQQQEVHVAEKLFKCSDCGKVFLKAFALLDHLITHSEERPFRCPTGRSAFKKSAHINPRKIHTGETAHVCNECGKAFSYPSKLRKHQKVHTGIKPFKCSDCGKTFNRKDALVLHQRIHTGERPYECSKCGKTFSVLSTLIRHRKVHIGERPYECTECGKFFKYNNSFILHQRVHTGERPFECKQCGKGYVTRSGLYQHWKVHTGERPYECSLCGKTFTTRSY [...]
+chr4-04	SwissProt	protein_match	266088	266231	74.000000	-	.	Target=Q6P1L6-2.1 205 254 +;percentID=36;Gap=M31 I2 M17 ;sequence=MLENYRNLLSLAEPKPEIYTCSSCLLAFSCQQFLSQHVLQIFLGLCAENHFHPGNSSPGHWKQQGQQYSHVSCWFENAEGQERGGGSKPWSARTEERETSRAFPSPLQRQSASPRKGNMVVETEPSSAQRPNPVQLDKGLKELETLRFGAINCREYEPDHNLESNFITNPRTLLGKKPYICSDCGRSFKDRSTLIRHHRIHSMEKPYVCSECGRGFSQKSNLSRHQRTHSEEKPYLCRECGQSFRSKSILNRHQWTHSEEKPYVCSECGRGFSEKSSFIRHQRTHSGEKPYVCLECGRSFCDKSTLRKHQRIHSGEKPYVCRECGRGFSQNSDLIKHQRTHLDEKPYVCRECGRGFCDKSTLIIHE [...]
+chr4-04	SwissProt	protein_match	266088	266171	76.000000	-	.	Target=Q49A33-2.2 54 82 +;percentID=53;Gap=M3 D1 M7 I2 M17 ;sequence=MHTGEKPYTCEECVKLLTNPQALLYTGAFILNKNFTNVKNAAKPLLNPHPLINKRIHTGEKPYTCEECGKAFYRSSHLTEHKNIHTGEKSYKCEECGNAFYRSSHLTKHKRIHSGQKPYKCEECGKAFRQSSALNEHKKIHTAEKPYKCKECGKAFRWSRSLNEHTNIHIGEKPYTCEECGKDFTWSSTLTVHQRIQTGEKHS
+chr4-04	SwissProt	protein_match	266088	266192	76.000000	-	.	Target=Q6J6I6.1 179 218 +;percentID=50;Gap=M7 I3 M11 I2 M17 ;sequence=MAQESVMFSDVSVDFSQEEWECLNDDQRDLYRDVMLENYSNLVSMGHSISKPNVISYLEQGKEPWLVDRELTRGQWPVLESRCETKKLFLKKEIYEIESTQWEIMEKLTRHDFQCSSFRDDWECNRQFKKELGSQGGHFNQLVFTHEDLPTLSHHPSFTLQQIINSKKKFCASKEYRKTFRHGSQFATHEIIHTTEKPYECKECGKSFRHPSRLTHHQKIHTGKKPFECKECGKTFICGSDLTRHHRIHTGEKPYECKECGKAFSSGSNFTRHQRIHTGEKPYECKECGKAFSSGSNFTQHQRIHTGEKPYECKECGNAFSQSSQLIKHQRIHTGEKPYECKECEKAFRSGSDLTRHQRIHT [...]
+chr4-04	SwissProt	protein_match	266088	266240	76.000000	-	.	Target=Q5VIY5-2.1 185 237 +;percentID=39;Gap=M35 I2 M16 ;sequence=MLKTLSSTGQGNTEVIHTGTLHRQASHHIGEFCFHEIEKDIHGFEFQWKEDETNGHAAPMTEIKELAGSTGQHDQRHAGNKRIKDQLGSSFHLHLPEPHIFQSEGKIGNQVEKSINNASSVSTSQRICCRPKTHISNKYGNNSLHSSLLTQKWEVHMREKSFECIQSFKSFNCSSLLKKHQIIHLEEKQCKCDVCGKVFNQKRYLACHRRCHTGEKPYKCNECGKTFGHNSSLFIHKALHTGEKPYECEECDKVFSRKSHLERHKRIHTGEKPYKCKVCDEAFAYNSYLAKHTILHTGEKPYTCNECGKVFNRLSTLARHHRLHTGEKPYKCEECDKVFSRKSHLERHRRIHSGEKPYKCEECCKV [...]
+chr4-04	SwissProt	protein_match	266088	266171	76.000000	-	.	Target=Q49A33.3 54 82 +;percentID=53;Gap=M3 D1 M7 I2 M17 ;sequence=MHTGEKPYTCEECVKLLTNPQALLYTGAFILNKNFTNVKNAAKPLLNPHPLINKRIHTGEKPYTCEECGKAFYRSSHLTEHKNIHTGEKSYKCEECGNAFYRSSHLTKHKRIHSGQKPYKCEECGKAFRQSSALNEHKKIHTAEKPYKCKECGKAFRWSRSLNEHTNIHIGEKPYTCEECGKDFTWSSTLTVHQRIQTGEKHS
+chr4-04	SwissProt	protein_match	266088	266159	77.000000	-	.	Target=Q6ZMY9.1 390 415 +;percentID=61;Gap=M8 I2 M16 ;sequence=MAMALPMPGPQEAVVFEDVAVYFTRIEWSCLAPDQQALYRDVMLENYGNLASLGFLVAKPALISLLEQGEEPGALILQVAEQSVAKASLCTDSRMEAGIMESPLQRKLSRQAGLPGTVWGCLPWGHPVGGHPAPPHPHGGPEDGSDKPTHPRAREHSASPRVLQEDLGRPVGSSAPRYRCVCGKAFRYNSLLLRHQIVHTGAKPFQCTECGKAFKQSSILLRHQLIHTEEKPFQCGECGKAFRQSTQLAAHHRVHTRERPYACGECGKAFSRSSRLLQHQKFHTGEKPFACTECGKAFCRRFTLNEHGRIHSGERPYRCLRCGQRFIRGSSLLKHHRLHAQEGAQDGGAGQGALLGAAQRPQAGDPPHE [...]
+chr4-04	SwissProt	protein_match	266088	266231	77.000000	-	.	Target=Q5RBQ3.1 330 380 +;percentID=45;Gap=M12 I3 M5 D1 M5 D1 M8 I2 M16 ;sequence=MAAAALVNTPQIPMVTEEFVKPSQGHVTFEDIAVYFSQEEWGLLDEAQRCLYHDVMLENFLLMASVGCLHGIEAEEAPSEQTISAQGVSQARTPKLGPSIPNAHSCEMCILVMKDILYLTEHQGTLPWQKPYTSVASGKWFSFGSNLQQHQNQDSGEKHIRKEESSALLLNSCKIPLSDNLFPCKDVEKDFPTILGLLQHQTTHSREEYAHRSRETFQQRRYKCEQVFNEKVHVTEHQRVHTGEKAYKRREYGKSLNSKYSFVEHQRTHNTEKPYVCNVCGKSFLHKQTLVGHQQRIHTRERSYVCIECGKSLSSKYSLVEHQRTHNGEKPYVCNVCGKSFRHKQTFVGH [...]
+chr4-04	SwissProt	protein_match	266088	266225	77.000000	-	.	Target=P18725.2 295 342 +;percentID=48;Gap=M11 D2 M7 I1 M2 I1 M7 I2 M17 ;sequence=MLQIKTEKEELDCGDDQNPKESSAVPLTDGASPEPQPQILQIKIKEEEPDYEYYLPTIKREMDPVPGAASPLAESEILQIKIKEEEPDSEDDGNSAATSAVTFRDWDNCWSDEENWDDSRPQLNQYNSDFPGSADTANTPAINTVLSRGNGLFVVNQEKRVATNSSCQSDTGHVDCSVGSEPSGFICCKCGDSFAHHSDLHTHLYACAGHNITSSFTNASEEGQHSHKNGGVLPREKPFKCTVCGKCFTLKNSLQLHHRIHTGEKPFTCTECGKSFAQSCSLQLHSRTHTGYNPYVCTECGKRFSSNSGLRRHMRTHTGVKPYACKECGKFFSDLSTLHRHQNSHKGEKP [...]
+chr4-04	SwissProt	protein_match	266088	266225	77.000000	-	.	Target=P18725-2.2 270 317 +;percentID=48;Gap=M11 D2 M7 I1 M2 I1 M7 I2 M17 ;sequence=MLQIKTEKEELDCGDDQNPKESSAVPLTDGASPEPQPQILQIKIKEEEPDYEYYLPTIKREMDPVPGAASPLAESEILQIKIKEEEPDSEDDGNSAATSAVTFRDWGSADTANTPAINTVLSRGNGLFVVNQEKRVATNSSCQSDTGHVDCSVGSEPSGFICCKCGDSFAHHSDLHTHLYACAGHNITSSFTNASEEGQHSHKNGGVLPREKPFKCTVCGKCFTLKNSLQLHHRIHTGEKPFTCTECGKSFAQSCSLQLHSRTHTGYNPYVCTECGKRFSSNSGLRRHMRTHTGVKPYACKECGKFFSDLSTLHRHQNSHKGEKPFICTECGKGFTLKDSLHRHQRTH [...]
+chr4-04	SwissProt	protein_match	266088	266159	77.000000	-	.	Target=Q92670.2 286 311 +;percentID=61;Gap=M8 I2 M16 ;sequence=MIMRELKADACLNSHMGAMWETNRSVKENSSQSKKYSTQIECLSPGSACRHFRSFHYHEATEPLEAINQLQKLCHQWLRPEIHSKKHILEMLVLEHFLTILPKGTQNWVQKHHPQLAKQALVLVERLQREPGGTKNEVTAHELGEEAVLLRGTTVAPGFKWKPAELEPMERILEHIQILALSEHKSTKDWKMAPKLIWPESQSLLTFEDMAVYFSEEEWQLLGPLEKTLYNDVMQDIYETAISLGKQRTGKIMGIEMASSFSKEEKKLTTCKQELPKLMDLHGKGHTGEKPFKCQDCGKIFRVSSDLIKHQRIHTEEKLYKCQQCDRRFRWSSGLNKHFMTHQGINPYRCSWYGKSISYDTNLQTHQRI [...]
+chr4-04	SwissProt	protein_match	266088	266249	77.000000	-	.	Target=Q8N8C0.1 25 80 +;percentID=35;Gap=M37 I2 M17 ;sequence=MQRNAMYLKNVAETACNFQLTQYQISHANQKPYECQICGKPFRKRAHLTQHNRIHTGGKPYECKECGKVFICCSTLIQHKRTHTSEKPYECLECRKTFRRSAHLIRHQRIHTGEKPYKCKQCWKAFASVSDLIDIGKFTLMRDFTNVQNVGRHLTIAQLLFSIREFTLVRSPLNVRNVAKHSIIAQHLLNTRELILMRNLMNVRNVKRLLGKVHILLNIKEFILVRNHMSVSNVGRLSLVFLILIDIREFTLVKNPMNVKNVVELLTIVQLLFNTREFTLVRRLMNISSVGRFLSPVQHLFNIREHILMKNLMNVSNARRPSSIMHILFDIKEFILVRNLINVSNVGRPLLLFLI
+chr4-04	SwissProt	protein_match	266088	266231	77.000000	-	.	Target=Q96SK3-2.3 178 227 +;percentID=38;Gap=M32 I2 M16 ;sequence=MHQRIYSGEKHYECKENGEAFSSGHQLTAPHTFESVEKPYKCEECGKAFSVHGRLTRHQGIHSGKKPYECNKCGKSFRLNSSLKIHQNIHTGEKPYKCKECGKAFSQRAHLAHHNRIHTGYKPFECKECGKSFRCASYLVIHERIHTGEKPYVCQECGKGFSYSHKLTIHRRVHTGEKPYECKECGKAFSVSGQLTQHLSIHSGKKPFECNKCGKSFRFISVLKAHQNIHSAEKPYECKECGKAFRHATSLIYHDRTHAGEKSYECKECGETFSHASHLIIHERIHTSDKPYECKRCGKAFHCASYLVRHESVHADGNPYMCEECGKAFNSSHELSIHHRVHTGEKPFKCNKCRRSFRLRSILEVHQRIHI
+chr4-04	SwissProt	protein_match	266088	266231	78.000000	-	.	Target=Q8N9F8.1 382 431 +;percentID=41;Gap=M32 D1 M2 I3 M13 ;sequence=MAVSHLPTMVQESVTFKDVAILFTQEEWGQLSPAQRALYRDVMLENYSNLVSLGLLGPKPDTFSQLEKREVWMPEDTPGGFCLDWMTMPASKKSTVKAEIPEEELDQWTIKERFSSSSHWKCASLLEWQCGGQEISLQRVVLTHPNTPSQEYDESGSTMSSSLHSDQSQGFQPSKNAFECSECGKVFSKSSTLNKHQKIHNEKNANQKIHIKEKRYECRECGKAFHQSTHLIHHQRIHTGEKPYECKECGKAFSVSSSLTYHQKIHTGEKPFECNLCGKAFIRNIHLAHHHRIHTGEKPFKCNICEKAFVCRAHLTKHQNIHSGEKPYKCNECGKAFNQSTSFLQHQRIHTGEKPFECNECG [...]
+chr4-04	SwissProt	protein_match	266088	266231	78.000000	-	.	Target=Q2M218.1 457 506 +;percentID=42;Gap=M32 I2 M16 ;sequence=MIESQEPVTFEDVAVDFTQEEWQQLNPAQKTLHRDVMLETYNHLVSVGCSGIKPDVIFKLEHGKDPWIIESELSRWIYPDRVKGLESSQQIISGELLFQREILERAPKDNSLYSVLKIWHIDNQMDRYQGNQDRVLRQVTVISRETLTDEMGSKYSAFGKMFNRCTDLAPLSQKFHKFDSCENSLKSNSDLLNYNRSYARKNPTKRFRCGRPPKYNASCSVPEKEGFIHTGMEPYGDSQCEKVLSHKQAHVQYKKFQAREKPNVCSMCGKAFIKKSQLIIHQRIHTGEKPYVCGDCRKAFSEKSHLIVHQRIHTGEKPYECTKYGRAFSRKSPFTVHQRVHTGEKPYECFECPKAFSQKSHLIIHQRV [...]
+chr4-04	SwissProt	protein_match	266088	266231	78.000000	-	.	Target=Q0VAW7.1 550 599 +;percentID=40;Gap=M32 I2 M16 ;sequence=MTKLQEMVTFRDVAVVFSEEELGLLDAAQWKLYREVMLENFRMLLSVAHQPFKPGLIAQLENGEQLWMVEAEAHAGGLSGRRNGHAVENAEDVEVNSLCPEDLSFCQTWPWGACTLPSGQEFIKRCQGSNGESQSQEASPRLVWAGMPMQISEDRNYGLPPAHEDSASMKNQEFPPPRSQQSQGEPYLGRPCVTCQWKGQQTSIRNHFCRYGSVCWSPYHSDNEELYSKGKSYGFHDDRGKTVKVLLLNQDFIELGPEPCPRTKNREAWGHDDNDHSSHTHQQCHSRGKPCTRSLSGEGCGDRSALHGHPGLEAGDEGADGSPPLQSSPRVCMEQVPRECSGNVHYGSPLNTCGCAHPGNTSQTCSIP [...]
+chr4-04	SwissProt	protein_match	266088	266231	78.000000	-	.	Target=Q0VAW7-2.1 544 593 +;percentID=40;Gap=M32 I2 M16 ;sequence=MVTFRDVAVVFSEEELGLLDAAQWKLYREVMLENFRMLLSVAHQPFKPGLIAQLENGEQLWMVEAEAHAGGLSGRRNGHAVENAEDVEVNSLCPEDLSFCQTWPWGACTLPSGQEFIKRCQGSNGESQSQEASPRLVWAGMPMQISEDRNYGLPPAHEDSASMKNQEFPPPRSQQSQGEPYLGRPCVTCQWKGQQTSIRNHFCRYGSVCWSPYHSDNEELYSKGKSYGFHDDRGKTVKVLLLNQDFIELGPEPCPRTKNREAWGHDDNDHSSHTHQQCHSRGKPCTRSLSGEGCGDRSALHGHPGLEAGDEGADGSPPLQSSPRVCMEQVPRECSGNVHYGSPLNTCGCAHPGNTSQTCSIPKQAV [...]
+chr4-04	SwissProt	protein_match	266088	266231	78.000000	-	.	Target=Q9UK10.2 482 531 +;percentID=42;Gap=M32 I2 M16 ;sequence=MTTLKEAVTFKDVAVVFTEEELRLLDLAQRKLYREVMLENFRNLLSVGHQSLHRDTFHFLKEEKFWMMETATQREGNLGGKIQMEMETVSESGTHEGLFSHQTWEQISSDLTRFQDSMVNSFQFSKQDDMPCQVDAGLSIIHVRQKPSEGRTCKKSFSDVSVLDLHQQLQSREKSHTCDECGKSFCYSSALRIHQRVHMGEKLYNCDVCGKEFNQSSHLQIHQRIHTGEKPFKCEQCGKGFSRRSGLYVHRKLHTGVKPHICEKCGKAFIHDSQLQEHQRIHTGEKPFKCDICCKSFRSRANLNRHSMVHMREKPFRCDTCGKSFGLKSALNSHRMVHTGEKRYKCEECGKRFIYRQDLYKHQIDHTG [...]
+chr4-04	SwissProt	protein_match	266088	266231	78.000000	-	.	Target=Q6P9A3-2.1 317 367 +;percentID=45;Gap=M12 I3 M5 D1 M5 D1 M7 I2 M17 ;sequence=MAEAALVNTPQGHVTFEDIAVYFSQEEWGLLDEAQRCLYHDVMLENFSLMASVGCLHGIEAEEAPSEQTLSAQGVSQARTPKLGPSIPNAHSCEMCILVMKDILYLSEHQGTLPWQKPYTSVASGKWFSFGSNLQQHQNQDSGEKHIRKEESSALLLNSCKIPLSDNLFPCKDVEKDFPTILGLLQHQTTHSRQEYAHRSRETFQQRRYKCEQVFNEKVHVTEHQRVHTGEKAYKRREYGKSLNSKYLFVEHQRTHNAEKPYVCNICGKSFLHKQTLVGHQQRIHTRERSYVCIECGKSLSSKYSLVEHQRTHNGEKPYVCNVCGKSFRHKQTFVGHQQRIHTGERPY [...]
+chr4-04	SwissProt	protein_match	266088	266231	78.000000	-	.	Target=Q6P9A3.1 330 380 +;percentID=45;Gap=M12 I3 M5 D1 M5 D1 M7 I2 M17 ;sequence=MAEAALVNTPQIPMVTEEFVKPSQGHVTFEDIAVYFSQEEWGLLDEAQRCLYHDVMLENFSLMASVGCLHGIEAEEAPSEQTLSAQGVSQARTPKLGPSIPNAHSCEMCILVMKDILYLSEHQGTLPWQKPYTSVASGKWFSFGSNLQQHQNQDSGEKHIRKEESSALLLNSCKIPLSDNLFPCKDVEKDFPTILGLLQHQTTHSRQEYAHRSRETFQQRRYKCEQVFNEKVHVTEHQRVHTGEKAYKRREYGKSLNSKYLFVEHQRTHNAEKPYVCNICGKSFLHKQTLVGHQQRIHTRERSYVCIECGKSLSSKYSLVEHQRTHNGEKPYVCNVCGKSFRHKQTFVGH [...]
+chr4-04	SwissProt	protein_match	266088	266231	79.000000	-	.	Target=Q08ER8.2 309 358 +;percentID=42;Gap=M32 I2 M16 ;sequence=MAASAQVSVTFEDVAVTFTQEEWGQLDAAQRTLYQEVMLETCGLLMSLGCPLFKPELIYQLDHRQELWMATKDLSQSSYPGDNTKPKTTEPTFSHLALPEEVLLQERLTQGASKNSQLGQSKDQDGPSEMQEVHLKIGIGPQRGKLLEKMSSERDGLGSDDGVCTKITQKQVSTEGDLYECDSHGPVTDALIREEKNSYKCEECGKVFKKNALLVQHERIHTQVKPYECTECGKTFSKSTHLLQHHIIHTGEKPYKCMECGKAFNRRSHLTRHQRIHSGEKPYKCSECGKAFTHRSTFVLHHRSHTGEKPFVCKECGKAFRDRPGFIRHYIIHTGEKPYECIECGKAFNRRSYLTWHQQIHTGVKPFE [...]
+chr4-04	SwissProt	protein_match	266088	266231	79.000000	-	.	Target=Q02525.2 407 456 +;percentID=40;Gap=M31 I2 M17 ;sequence=MRNLQPDSVENSLSQLPSRCLETRKRKRSYKKRPVTYSYWRRTQRNRARKHKAPVKGLVSFEDVSVDFTWDEWQDLDDSQRKLYRDVMLETYSSLESLGHCITKPEVIFKLEQGAEPWRAEDVPKQSRADVQKITELNETSQDNEERHLWHHAITYSNKSTEEKVKLGNIVNVSSNCVSNLTVKNGNSSGMRPVALTVWQSVLPPNKPDDTRIGEELDASLTSEPPIHAEHPGLYSRAPGTGQQFQCCMQEVTCNTKALWTKRFHIAHGSSKFGESEKVPDEVALHAQDVSWVRAETFECSICKKTFCTKCELMKHKKIHKGQQYYTCRDCEKTFIKESYHTDQRVHAGVGSHRCKQCEKCFHQKNQQ [...]
+chr4-04	SwissProt	protein_match	266088	266159	79.000000	-	.	Target=P10755.2 190 215 +;percentID=57;Gap=M7 I2 M17 ;sequence=MALAQGLVTFGDVAVDFSQEEWEFLDPAQKNLYRDVMWETYSNFISLDLESRFKTDTSSSDKGICEVYSLQWELIEKIKNLSPQGSGLSDDQECKHKTGLQKEPQEGYFGQLKITSEKVTYEKHSFLSEYQRVQNGEKFYECKECRKTFIRRSTLSQHLRIHTGEKPYKCKECGQPFRQRAHLIRHHKLHTGEKPYECKDCGKAFTVLQELTQHQRLHTGEKPYECKECGKAFRVHQQLARHQRIHTGEKPYECKECGKTFRQCTHLTRHQRLHTSEKLYECKECGKAFVCGPDLRVHQKIHFGEKPYACKDCGKSFRICQQLTVHQSIHTGEKPYECKECGKTFRLRQQLVRHQRIHTHERPYECLEC [...]
+chr4-04	SwissProt	protein_match	266088	266231	79.000000	-	.	Target=Q14587.2 890 939 +;percentID=44;Gap=M32 I2 M16 ;sequence=MATRVRTASIWVPPLQERNSSWDRIRKLQGQESILGQGTPGLQPLPGTPRQKQKSRRIEKVLEWLFISQEQPKITKSWGPLSFMDVFVDFTWEEWQLLDPAQKCLYRSVMLENYSNLVSLGYQHTKPDIIFKLEQGEELCMVQAQVPNQTCPNTVWKIDDLMDWHQENKDKLGSTAKSFECTTFGKLCLLSTKYLSRQKPHKCGTHGKSLKYIDFTSDYARNNPNGFQVHGKSFFHSKHEQTVIGIKYCESIESGKTVNKKSQLMCQQMYMGEKPFGCSCCEKAFSSKSYLLVHQQTHAEEKPYGCNECGKDFSSKSYLIVHQRIHTGEKLHECSECRKTFSFHSQLVIHQRIHTGENPYECCECGKV [...]
+chr4-04	SwissProt	protein_match	266088	266225	79.000000	-	.	Target=Q569E7.1 377 424 +;percentID=48;Gap=M15 I1 M6 D1 M5 I1 M1 I1 M18 ;sequence=MEQEDNQGVCEYQTSEDRGMDSDLENSEDREGDPEERGMGSNPWDTEDRGHLEQEVDSNPQDDDLRGDSRERDRASTVCSEGRLSEEERAILREEEDDQPGVADMALFPGLSESDSISRSPRGEEDEEEEDEEEESAGENRLIEEEDPLPTPVLPWRRHLSLGGRHRGDKPAHRRFHRLHHPMAMDLGELDSLMASIMDAPTICPDCGESFSPGAAFLQHQRIHRLAEAAAVASLEPFGLAGECGGVVGMMGMGMGVGMGVAGGFGAGPTLARPPREKPFRCGECGKGFSRNTYLTNHLRLHTGERPNLCADCGKSFSWRADLLKHRRLHTGEKPYPCPECGEAFSLSSH [...]
+chr4-04	SwissProt	protein_match	266088	266225	79.000000	-	.	Target=Q5TEC3.2 353 400 +;percentID=48;Gap=M15 I1 M6 D1 M5 I1 M1 I1 M18 ;sequence=MKQEDNQGVCAHQDSEDKGMGSDFEDSEDREGDPEEREMGSNPHDTNKREGHPEPEMGSNPQDSRHREAVPDICTEGQLSEEEGVSVRGEEDDQSGVADMAMFPGLSESDSISRSLREDDDESAGENRLEEEEEQPAPPVLPWRRHLSLGSRHRGDKPAHRRFHRLHHPMAVDLGELDSLVASIMDAPTICPDCGESFSPGAAFLQHQRIHRLAEAAAAASLEPFGLAGECDAMVGMMGVGVAGGFGAGPPLARPPREKPFRCGECGKGFSRNTYLTNHLRLHTGERPNLCADCGKSFSWRADLLKHRRLHTGEKPYPCPECGEAFSLSSHLLSHRRAHAAASGAGAAAL [...]
+chr4-04	SwissProt	protein_match	266088	266222	79.000000	-	.	Target=A0JPL0.1 495 538 +;percentID=44;Gap=M3 D3 M23 I2 M16 ;sequence=MNCHSVPLQGPVSFKDVTVDFTQEEWQRLDPAQKALYRDVMLENYCHFISVGFHITKPDMIRKLEQGEELWTERMFPSQSYLEDEEVLVKFRDYQDKPPTSIVIINHKKLIKERNNVYEKTLGNNHIISKTLFEYKSDGKVLKNISDFISRDINPVMGTLGDSSEWEESVLTSEQEKTHPVPTLYKQIGRNLSSSLELAQHQKTQIPEQRFECDECDSSFLMTEVAFPHDRAHRGVRDFNCSKDEIAFFEKSDLGIHPHNLMEKKCSTYNKYGKLLCRKSVFVMHPRSQVDERPFQCPYCGNSFRRKSYLIEHQRIHTGEKPYICSQCGKAFRQKTALTLHEKTHTDGKPYLCVDCGKSFRQ [...]
+chr4-04	SwissProt	protein_match	266088	266231	79.000000	-	.	Target=P24399.2 32 81 +;percentID=42;Gap=M31 I2 M17 ;sequence=MAEKPYKCDKCGKGFTRSSSLLVHHSVHTGEKPFKCDRCGKGFSQSSKLHIHKRVHTGEKPYACEECGMSFSQRSNLHIHQRVHTGERPYKCGECGKGFSQSSNLHIHRCTHTGEKPYQCYECGKGFSQSSDLRIHLRVHTGEKPYHCGKCGQGFSQSSKLLIHQRVHTGEKPYECSKCGKGFSQSSNLHIHQRVHRKELH
+chr4-04	SwissProt	protein_match	266088	266225	80.000000	-	.	Target=P17098.2 285 332 +;percentID=41;Gap=M30 I2 M16 ;sequence=MDPEDEGVAGVMSVGPPAARLQEPVTFRDVAVDFTQEEWGQLDPTQRILYRDVMLETFGHLLSIGPELPKPEVISQLEQGTELWVAERGTTQGCHPAWEPRSESQASRKEEGLPEEEPSHVTGREGFPTDAPYPTTLGKDRECQSQSLALKEQNNLKQLEFGLKEAPVQDQGYKTLRLRENCVLSSSPNPFPEISRGEYLYTYDSQITDSEHNSSLVSQQTGSPGKQPGENSDCHRDSSQAIPITELTKSQVQDKPYKCTDCGKSFNHNAHLTVHKRIHTGERPYMCKECGKAFSQNSSLVQHERIHTGDKPYKCAECGKSFCHSTHLTVHRRIHTGEKPYECQDCGRAFNQNSSLGRHKRTHTGEKP [...]
+chr4-04	SwissProt	protein_match	266088	266231	80.000000	-	.	Target=Q8N972.1 474 523 +;percentID=41;Gap=M13 D1 M10 I1 M7 I2 M17 ;sequence=MDSVVFEDVAVNFTQEEWALLGPSQKKLYRDVMQETFVNLASIGENWEEKNIEDHKNQGRKLRSHMVERLCERKEGSQFGETISQTPNPKPNKKTFTRVKPYECSVCGKDYMCHSSLNRHMRSHTEHRSYEYHKYGEKSYECKECGKRFSFRSSFRIHERTHTGEKPYKCKQCGKAFSWPSSFQIHERTHTGEKPYECKECGKAFIYHTTFRGHMRMHTGEKPYKCKECGKTFSHPSSFRNHERTHSGEKPYECKQCGKAFRYYQTFQIHERTHTGEKPYQCKQCGKALSCPTSFRSHERIHTGEKPYKCKKCGKAFSFPSSFRKHERIHTGEKPYDCKECGKAFISLPSYRRHM [...]
+chr4-04	SwissProt	protein_match	266088	266231	81.000000	-	.	Target=Q8N7K0.1 280 329 +;percentID=43;Gap=M14 D1 M9 I1 M7 I2 M17 ;sequence=MMFQDSVAFEDVAVTFTQEEWALLDPSQKNLCRDVMQETFRNLASIGKKWKPQNIYVEYENLRRNLRIVGERLFESKEGHQHGEILTQVPDDMLKKTTTGVKSCESSVYGEVGSAHSSLNRHIRDDTGHKAYEYQEYGQKPYKCKYCKKPFNCLSSVQTHERAHSGRKLYVCEECGKTFISHSNLQRHRIMHRGDGPYKCKFCGKALMFLSLYLIHKRTHTGEKPYQCKQCGKAFSHSSSLRIHERTHTGEKPYKCNECGKAFHSSTCLHAHKRTHTGEKPYECKQCGKAFSSSHSFQIHERTHTGEKPYECKECGKAFKCPSSVRRHERTHSRKKPYECKHCGKVLSYLTSFQNH [...]
+chr4-04	SwissProt	protein_match	266088	266231	81.000000	-	.	Target=Q8N7K0-2.1 245 294 +;percentID=43;Gap=M14 D1 M9 I1 M7 I2 M17 ;sequence=MQETFRNLASIGKKWKPQNIYVEYENLRRNLRIVGERLFESKEGHQHGEILTQVPDDMLKKTTTGVKSCESSVYGEVGSAHSSLNRHIRDDTGHKAYEYQEYGQKPYKCKYCKKPFNCLSSVQTHERAHSGRKLYVCEECGKTFISHSNLQRHRIMHRGDGPYKCKFCGKALMFLSLYLIHKRTHTGEKPYQCKQCGKAFSHSSSLRIHERTHTGEKPYKCNECGKAFHSSTCLHAHKRTHTGEKPYECKQCGKAFSSSHSFQIHERTHTGEKPYECKECGKAFKCPSSVRRHERTHSRKKPYECKHCGKVLSYLTSFQNHLGMHTGEISHKCKICGKAFYSPSSLQTHEKTHT [...]
+chr4-04	SwissProt	protein_match	266088	266231	81.000000	-	.	Target=Q14590-2.3 509 558 +;percentID=46;Gap=M32 I1 M1 I1 M15 ;sequence=MTKFQEAVTFKDVAVAFTEEELGLLDSAQRKLYRDVMLENFRNLVSVGHQSFKPDMISQLEREEKLWMKELQTQRGDRNQNEMATLHKAGLRCFSLGELSCWQIKRHIASKLARSQDSMINIEGKSSQFPKHHDSPCQVGAGESIQASVDDNCLVNHIGDHSSIIENQEFPTGKVPNSWSKIYLNETQNYQRSCKQTQMKNKLCIFAPYVDIFSCISHHHDDNIVHKRDKVHSNSDCGKDTLKVSPLTQRSIHTGQKTYQGNECEEAFNDSSSLELHKQVHLGKKSPACSTHEKDTSYSSGIPVQQSVRTGKKRYWCHECGKGFSQSSNLQTHQRVHTGEKPYTCHECGKSFNQSSHLYA [...]
+chr4-04	SwissProt	protein_match	266088	266231	81.000000	-	.	Target=Q14590.3 513 562 +;percentID=46;Gap=M32 I1 M1 I1 M15 ;sequence=MTKFQEAVTFKDVAVAFTEEELGLLDSAQRKLYRDVMLENFRNLVSVGHQSFKPDMISQLEREEKLWMKELQTQRGKHSGDRNQNEMATLHKAGLRCFSLGELSCWQIKRHIASKLARSQDSMINIEGKSSQFPKHHDSPCQVGAGESIQASVDDNCLVNHIGDHSSIIENQEFPTGKVPNSWSKIYLNETQNYQRSCKQTQMKNKLCIFAPYVDIFSCISHHHDDNIVHKRDKVHSNSDCGKDTLKVSPLTQRSIHTGQKTYQGNECEEAFNDSSSLELHKQVHLGKKSPACSTHEKDTSYSSGIPVQQSVRTGKKRYWCHECGKGFSQSSNLQTHQRVHTGEKPYTCHECGKSFNQSSHL [...]
+chr4-04	SwissProt	protein_match	266088	266225	81.000000	-	.	Target=Q96GC6.1 563 610 +;percentID=37;Gap=M30 I2 M16 ;sequence=MASRLPTAWSCEPVTFEDVTLGFTPEEWGLLDLKQKSLYREVMLENYRNLVSVEHQLSKPDVVSQLEEAEDFWPVERGIPQDTIPEYPELQLDPKLDPLPAESPLMNIEVVEVLTLNQEVAGPRNAQIQALYAEDGSLSADAPSEQIQQQGKHPGDPEAARQRFRQFRYKDMTGPREALDQLRELCHQWLQPKARSKEQILELLVLEQFLGALPVKLRTWVESQHPENCQEVVALVEGVTWMSEEEVLPAGQPAEGTTCCLEVTAQQEEKQEDAAICPVTVLPEEPVTFQDVAVDFSREEWGLLGPTQRTEYRDVMLETFGHLVSVGWETTLENKELAPNSDIPEEEPAPSLKVQESSRDCALSSTLE [...]
+chr4-04	SwissProt	protein_match	266088	266225	81.000000	-	.	Target=Q96GC6-2.1 531 578 +;percentID=37;Gap=M30 I2 M16 ;sequence=MASRLPTAWSCEPVTFEDVTLGFTPEEWGLLDLKQKSLYREVMLENYRNLVSVEYPELQLDPKLDPLPAESPLMNIEVVEVLTLNQEVAGPRNAQIQALYAEDGSLSADAPSEQIQQQGKHPGDPEAARQRFRQFRYKDMTGPREALDQLRELCHQWLQPKARSKEQILELLVLEQFLGALPVKLRTWVESQHPENCQEVVALVEGVTWMSEEEVLPAGQPAEGTTCCLEVTAQQEEKQEDAAICPVTVLPEEPVTFQDVAVDFSREEWGLLGPTQRTEYRDVMLETFGHLVSVGWETTLENKELAPNSDIPEEEPAPSLKVQESSRDCALSSTLEDTLQGGVQEVQDTVLKQMESAQEKDLPQKK [...]
+chr4-04	SwissProt	protein_match	266088	266225	81.000000	-	.	Target=Q96GC6-4.1 282 329 +;percentID=37;Gap=M30 I2 M16 ;sequence=MLQEPVTFQDVAVDFSREEWGLLGPTQRTEYRDVMLETFGHLVSVGWETTLENKELAPNSDIPEEEPAPSLKVQESSRDCALSSTLEDTLQGGVQEVQDTVLKQMESAQEKDLPQKKHFDNRESQANSGALDTNQVSLQKIDNPESQANSGALDTNQVLLHKIPPRKRLRKRDSQVKSMKHNSRVKIHQKSCERQKAKEGNGCRKTFSRSTKQITFIRIHKGSQVCRCSECGKIFRNPRYFSVHKKIHTGERPYVCQDCGKGFVQSSSLTQHQRVHSGERPFECQECGRTFNDRSAISQHLRTHTGAKPYKCQDCGKAFRQSSHLIRHQRTHTGERPYACNKCGKAFTQSSHLIGHQRTHNRTKRKKKQPTS
+chr4-04	SwissProt	protein_match	266088	266231	82.000000	-	.	Target=Q2M3X9.1 439 488 +;percentID=40;Gap=M32 I2 M16 ;sequence=MAMSQESLTFKDVFVDFTLEEWQQLDSAQKNLYRDVMLENYSHLVSVGHLVGKPDVIFRLGPGDESWMADGGTPVRTCAGEDRPEVWEVDEQIDHYKESQDKFLWQAAFIGKETLKDESGQECKICRKIIYLNTDFVSVKQRLPKYYSWERCSKHHLNFLGQNRSYVRKKDDGCKAYWKVCLHYNLHKAQPAERFFDPNQRGKALHQKQALRKSQRSQTGEKLYKCTECGKVFIQKANLVVHQRTHTGEKPYECCECAKAFSQKSTLIAHQRTHTGEKPYECSECGKTFIQKSTLIKHQRTHTGEKPFVCDKCPKAFKSSYHLIRHEKTHIRQAFYKGIKCTTSSLIYQRIHTSEKPQCSEHGKASDE [...]
+chr4-04	SwissProt	protein_match	266088	266231	82.000000	-	.	Target=Q6ZN19-2.1 227 276 +;percentID=45;Gap=M17 I1 M6 D1 M8 I2 M16 ;sequence=MLEGHESYDTENFYFREIRKNLQEVDFQWKDGEINYKEGPMTHKNNLTGQRVRHSQGDVENKHMENQLILRFQSGLGELQKFQTAEKIYGCNQIERTVNNCFLASPLQRIFPGVQTNISRKYGNDFLQLSLPTQDEKTHIREKPYIGNECGKAFRVSSSLINHQMIHTTEKPYRCNESGKAFHRGSLLTVHQIVHTRGKPYQCDVCGRIFRQNSDLVNHRRSHTGDKPYICNECGKSFSKSSHLAVHQRIHTGEKPYKCNRCGKCFSQSSSLATHQTVHTGDKPYKCNECGKTFKRNSSLTAHHIIHAGKKPYTCDVCGKVFYQNSQLVRHQIIHTGETPYKCNECGKVFRYRS [...]
+chr4-04	SwissProt	protein_match	266088	266231	82.000000	-	.	Target=B2KFW1-2.2 294 343 +;percentID=45;Gap=M17 I1 M6 D1 M8 I2 M16 ;sequence=MDDQDEGSWEPEETVEDCSGSGLAAEESLQGPRIAGGPALLQSRIAGVHWGFEETKVFLAILSESPFAEKLRTCHQNSQIYRAIAERLRALGFLRTLEQCRYRFKNLLRSYRKAKSSCPPGTCPFYEEMDSLMRARTVIRAVEMVGEATGLPGSGQSSTEADDQEAWGEMEDEDAVRLLTPDSQPADAGFELKREEEDQISEQDVLGDLPGALSRYTTKAVCQPCDWGEDHVNGNEGEWRNTWEECSSEEDLEKLIDHQGLYLTEKPYGCDTRAKSFSRKVHFFAPQRTHSSEKPYKCLGSGKSFSDRANLSTHQRIHIGEKPYRCLECGKSFNDPSNLITHQRTHTGEKPYKC [...]
+chr4-04	SwissProt	protein_match	266088	266231	82.000000	-	.	Target=B2KFW1.2 723 772 +;percentID=45;Gap=M17 I1 M6 D1 M8 I2 M16 ;sequence=MMAVASPPPEPEDLLIVKLEEDSWGSDSRPEKESHSPVPGPEVSRRCFRQFRYRDAAGPHEAFSQLWALCCRWLRPELRLKEQILELLVLEQFLSILPREVQTWVQARHPESGEEAVALVEDWHREAWAAGQQGLELCSEDSRSFEAVQEFQRFQLQPVTHGSEGQPRKQWVENARPDLSKMPPESLKESAVLTPQAPTVPKMASIGDWEVAGKSQETPSPSRQAKKEPCQDPAGGDRGDSACLGVPASKPSATSQQEQGPEIWGLSLINSGNGSAADDSLDSAQDKPVQAVAQADSRAWGEPCQWGAEDMKVSGVHWGYEETKTFLAILSESPFSEKLQTCHQNRQVYRAIAERL [...]
+chr4-04	SwissProt	protein_match	266088	266231	83.000000	-	.	Target=Q96JF6.3 458 507 +;percentID=40;Gap=M32 I2 M16 ;sequence=MKEWKSKMEISEEKKSARAASEKLQRQITQECELVETSNSEDRLLKHWVSPLKDAMRHLPSQESGIREMHIIPQKAIVGEIGHGCNEGEKILSAGESSHRYEVSGQNFKQKSGLTEHQKIHNINKTYECKECEKTFNRSSNLIIHQRIHTGNKPYVCNECGKDSNQSSNLIIHQRIHTGKKPYICHECGKDFNQSSNLVRHKQIHSGGNPYECKECGKAFKGSSNLVLHQRIHSRGKPYLCNKCGKAFSQSTDLIIHHRIHTGEKPYECYDCGQMFSQSSHLVPHQRIHTGEKPLKCNECEKAFRQHSHLTEHQRLHSGEKPYECHRCGKTFSGRTAFLKHQRLHAGEKIEECEKTFSKDEELREEQR [...]
+chr4-04	SwissProt	protein_match	266088	266231	83.000000	-	.	Target=Q5T5D7.1 297 346 +;percentID=45;Gap=M18 I1 M5 D1 M8 I2 M16 ;sequence=MISFQESVTFQDVAVDFTAEEWQLLDCAERTLYWDVMLENYRNLISVGCPITKTKVILKVEQGQEPWMVEGANPHESSPESDYPLVDEPGKHRESKDNFLKSVLLTFNKILTMERIHHYNMSTSLNPMRKKSYKSFEKCLPPNLDLLKYNRSYTVENAYECSECGKAFKKKFHFIRHEKNHTRKKPFECNDCGKAYSRKAHLATHQKIHNGERPFVCNDCGKAFMHKAQLVVHQRLHTGEKPYECSQCGKTFTWNSSFNQHVKSHTLEKSFECKECGKTFRYSSSLYKHSRFHTGEKPYQCIICGKAFGNTSVLVTHQRIHTGEKPYSCIECGKAFIKKSHLLRHQITHTGEKPYE [...]
+chr4-04	SwissProt	protein_match	266088	266231	83.000000	-	.	Target=Q96RE9.1 519 568 +;percentID=45;Gap=M17 I1 M6 D1 M7 I2 M17 ;sequence=MMKSQGLVSFKDVAVDFTQEEWQQLDPSQRTLYRDVMLENYSHLVSMGYPVSKPDVISKLEQGEEPWIIKGDISNWIYPDEYQADGRQDRKSNLHNSQSCILGTVSFHHKILKGVTRDGSLCSILKVCQGDGQLQRFLENQDKLFRQVTFVNSKTVTEASGHKYNPLGKIFQECIETDISIQRFHKYDAFKKNLKPNIDLPSCYKSNSRKKPDQSFGGGKSSSQSEPNSNLEKIHNGVIPFDDNQCGNVFRNTQSLIQYQNVETKEKSCVCVTCGKAFAKKSQLIVHQRIHTGKKPYDCGACGKAFSEKFHLVVHQRTHTGEKPYDCSECGKAFSQKSSLIIHQRVHTGEKPYECS [...]
+chr4-04	SwissProt	protein_match	266088	266231	83.000000	-	.	Target=A6NK53.2 450 499 +;percentID=42;Gap=M32 I2 M16 ;sequence=MTKFQEMVTFKDVAVVFTREELGLLDLAQRKLYQDVMLENFRNLLSVGYQPFKLDVILQLGKEDKLRMMETEIQGDGCSGHKNQNEIDTLQEVRLRFLSYEDLICWQIWEQFTSKLTSNQDLIINLQGKRSKLLKQGDSPCQVWTGESSQVSEDENYVIKLQGESSNSIKNQELPLRTTWDFWRKMYLREPQNYQSRCQQIDVKNKLCKCDHCVRQRIAHQHDDHGVHKREKAFSHNNCGKDCVKESSQHSIIQSGEQTSDENGKGLSVGSNLELHQQLHLRDKPHVNVEYGKGIGYSSGLPRHQCFHIGEKCYRNGDSGEGFSQGSHLQPHQRVSTGENLYRCQVYARSSNQNSCLPSHELTHPGEK [...]
+chr4-04	SwissProt	protein_match	266088	266231	83.000000	-	.	Target=Q6ZMS4.2 135 184 +;percentID=40;Gap=M32 I2 M16 ;sequence=MMESSELTPKQEIFKGSESSNSTSGGLFGVVPGGTETGDVCEDTFKELEGQPSNEEGSRLESDFLEIIDEDKKKSTKDRYEEYKEVEEHPPLSSSPVEHEGVLKGQKSYRCDECGKAFYWSSHLIGHRRIHTGEKPYECNECGKTFRQTSQLIVHLRTHTGEKPYECSECGKAYRHSSHLIQHQRLHNGEKPYKCNECAKAFNQSSKLFDHQRTHTGEKPYECKECGAAFSRSKNLVRHQFLHTGKKPYKCNECGRAFCSNRNLIDHQRTHTGEKPYKCNECGKAFSRSKCLIRHQSLHTGEKPYKCSECGKAFNQISQLVEHERIHTGEKPFKCSECGKAFGLSKCLIRHQRLHTSEKPYKCNECGK [...]
+chr4-04	SwissProt	protein_match	266088	266231	83.000000	-	.	Target=Q96RE9-3.1 535 584 +;percentID=45;Gap=M17 I1 M6 D1 M7 I2 M17 ;sequence=MMVPAETSSSGLLEEQKMKSQGLVSFKDVAVDFTQEEWQQLDPSQRTLYRDVMLENYSHLVSMGYPVSKPDVISKLEQGEEPWIIKGDISNWIYPDEYQADGRQDRKSNLHNSQSCILGTVSFHHKILKGVTRDGSLCSILKVCQGDGQLQRFLENQDKLFRQVTFVNSKTVTEASGHKYNPLGKIFQECIETDISIQRFHKYDAFKKNLKPNIDLPSCYKSNSRKKPDQSFGGGKSSSQSEPNSNLEKIHNGVIPFDDNQCGNVFRNTQSLIQYQNVETKEKSCVCVTCGKAFAKKSQLIVHQRIHTGKKPYDCGACGKAFSEKFHLVVHQRTHTGEKPYDCSECGKAFSQKS [...]
+chr4-04	SwissProt	protein_match	266088	266231	83.000000	-	.	Target=Q96RE9-2.1 534 583 +;percentID=45;Gap=M17 I1 M6 D1 M7 I2 M17 ;sequence=MVPAETSSSGLLEEQKMKSQGLVSFKDVAVDFTQEEWQQLDPSQRTLYRDVMLENYSHLVSMGYPVSKPDVISKLEQGEEPWIIKGDISNWIYPDEYQADGRQDRKSNLHNSQSCILGTVSFHHKILKGVTRDGSLCSILKVCQGDGQLQRFLENQDKLFRQVTFVNSKTVTEASGHKYNPLGKIFQECIETDISIQRFHKYDAFKKNLKPNIDLPSCYKSNSRKKPDQSFGGGKSSSQSEPNSNLEKIHNGVIPFDDNQCGNVFRNTQSLIQYQNVETKEKSCVCVTCGKAFAKKSQLIVHQRIHTGKKPYDCGACGKAFSEKFHLVVHQRTHTGEKPYDCSECGKAFSQKSS [...]
+chr4-04	SwissProt	protein_match	266088	266186	84.000000	-	.	Target=Q5JVG2.1 369 403 +;percentID=51;Gap=M17 I2 M16 ;sequence=MTKSLESVSFKDVTVDFSRDEWQQLDLAQKSLYREVMLENYFNLISVGCQVPKPEVIFSLEQEEPCMLDGEIPSQSRPDGDIGFGPLQQRMSEEVSFQSEININLFTRDDPYSILEELWKDDEHTRKCGENQNKPLSRVVFINKKTLANDSIFEYKDIGEIVHVNTHLVSSRKRPHNCNSCGKNLEPIITLYNRNNATENSDKTIGDGDIFTHLNSHTEVTACECNQCGKPLHHKQALIQQQKIHTRESLYLFSDYVNVFSPKSHAFAHESICAEEKQHECHECEAVFTQKSQLDGSQRVYAGICTEYEKDFSLKSNRQKTPYEGNYYKCSDYGRAFIQKSDLFRCQRIHSGEKPYEYSECEKNLPQN [...]
+chr4-04	SwissProt	protein_match	266088	266231	84.000000	-	.	Target=P10078.3 460 509 +;percentID=46;Gap=M31 I2 M17 ;sequence=MQGMASVVSCEPWALLGRGALCTKARPGGGPAAGTVVAPGSPDRGRPRSRNSLASQDQQGAVTSGTAHKALFSRDTNFLQEINRKQEAAPTGTRHKAKSQGLVTFGDVAVVFSQEEWEWLNSEQRSLYWKVMLDNYRNLASLGLCASQPDMITSLEQGRDPWMMKRKMRKGQHLDLKAMQETKEFPPKDLSEETLFLAVLRKQLLPHRPKCSMVRAAWEGGAVFTTHRGLKTNSGLARDSPAQLVSAQRSFCKSVTWENCGDRGSVGQQSVQEAQDLLPRQDSHAERVTGRTWSTKLECSTFRDQDSECTFERNEQETVTPNRAFSEGRDGMCIESGRWFHLNSSDERSHNCDSGKSFSSNPVVVKET [...]
+chr4-04	SwissProt	protein_match	266088	266231	84.000000	-	.	Target=Q6N045.2 289 338 +;percentID=41;Gap=M12 D1 M11 I1 M8 I2 M16 ;sequence=MGIVEKASSSSDSVTFEDVAVNFTQEEWTLLDPSQKKLYRDVMWETFRNLATIGTKQKEWNIEEQYKNQGRNLRNHMVERLCESKEGSHGGEGFSQIANLSLNKKTPSGGKLWESSVCGKVLSHHSSLNRHIRSYTRHKLYKCQEYGEKPYKCKKCGKPFSYLQSFKKHKRTHSAGIVYKCKACGKAFSCQRSFQIHGRTHTGDKPFKCKECGKAFRYHQSAQKHEKAHTGEKPYKCKECGKPFIYRHSARAHERNHTVQKRYECKQCGKTYISSVGFQAHERTHTGEKPYECKKCGKVFVYHNSAQRHEKTHTGEKPYKCKECGKAFSYHCTAQKHERNHTAQKHYECKLCGKT [...]
+chr4-04	SwissProt	protein_match	266088	266231	85.000000	-	.	Target=Q9BS34.1 195 244 +;percentID=40;Gap=M31 I2 M17 ;sequence=MDSVSFEDVAVAFTQEEWALLDPSQKNLYRDVMQEIFRNLASVGNKSEDQNIQDDFKNPGRNLSSHVVERLFEIKEGSQYGETFSQDSNLNLNKKVSTGVKPCECSVCGKVFICHSALHRHILSHIGNKLFECEECPEKLYHCKQCGKAFISLTSVDRHMVTHTSNGPYKGPVYEKPFDFPSVFQMPQSTYTGEKTYKCKHCDKAFNYSSYLREHERTHTGEKPYACKKCGKSFTFSSSLRQHERSHTGEKPYECKECGKAFSRSTYLGIHERTHTGEKPYECIKCGKAFRCSRVLRVHERTHSGEKPYECKQCGKAFKYSSNLCEHERTHTGVKPYGCKECGKSFTSSSALRSHERTHTGEKPYECK [...]
+chr4-04	SwissProt	protein_match	266088	266231	85.000000	-	.	Target=P10754.2 264 313 +;percentID=42;Gap=M32 I2 M16 ;sequence=MSADSQSIAATENEEKSHEVPGNVQHCGDMLSGQEETVPLGTSQESTHIKAEPEEPHSEGASREDRTPGTQRWMSPCPGPKDKGPFLPGGVVPSPWTPVLSRGGRTRERKMAAALLTAWSQMPVTFEDVALYLSQEEWGRLDHTQQNFYRDVLQGKNGLALGAVEMGKVVPALAVATLEDTKSIRTRARWAPGEDPKCGQHVASGPGTKLTRDTGKAGQLKPAPSESRPLKTPEDSGPEKPSEGEEALKSGEEGLVPDGDTGKKTYKCEQCGKGFSWHSHLVTHRRTHTGEKPYTCTDCGKRFGRSSHLIQHQIIHTGEKPYTCPSCWKSFSHHSTLIQHQRIHTGEKPYVCDRCAKRFTRRSDLVTH [...]
+chr4-04	SwissProt	protein_match	266088	266231	85.000000	-	.	Target=P10754-2.2 257 306 +;percentID=42;Gap=M32 I2 M16 ;sequence=MSADSQSIAATENEEKSHEVPGNVQHCGDMLSGQEETVPLGTSQESTHIKAEPEEPHSEGASREDRTPGTQRWMSPCPGPKDKVVPSPWTPVLSRGGRTRERKMAAALLTAWSQMPVTFEDVALYLSQEEWGRLDHTQQNFYRDVLQGKNGLALGAVEMGKVVPALAVATLEDTKSIRTRARWAPGEDPKCGQHVASGPGTKLTRDTGKAGQLKPAPSESRPLKTPEDSGPEKPSEGEEALKSGEEGLVPDGDTGKKTYKCEQCGKGFSWHSHLVTHRRTHTGEKPYTCTDCGKRFGRSSHLIQHQIIHTGEKPYTCPSCWKSFSHHSTLIQHQRIHTGEKPYVCDRCAKRFTRRSDLVTHQGTHT [...]
+chr4-04	SwissProt	protein_match	266088	266231	85.000000	-	.	Target=Q32KN0.1 157 206 +;percentID=42;Gap=M32 I2 M16 ;sequence=MEQEQKLLVSDSNGLTKKESLKNTITGDESKNNLKTVQFSNSKADKERASKWSRSDGPENYKDEDTKEILLTGSQGGKTERDDSYENDSNLGSQRNCTEKEEEQPNHWGWSPGDHTGPAGQQNPSFGDKPYKCSECWKSFSNSSHLRIHQRTHSGEKPYRCSECGKCFSNSSHLIQHLRTHTGEKPYQCGECGKSFSNTSHLIIHERTHTGEKPYKCPECAKSLSSSSHLIQHHRSHTGEKPYECPLCGKCFSHSYVLVEHQRTHTGEKPYKCPDCGKSFSQSSSLIRHQRTHTGEKPYKCPECGKGFGCNSTLIKHQRIHTGEKPYQCIECGKNFSRSSNLVTHQKMHTDDKTYQSSEYEESLSQNY [...]
+chr4-04	SwissProt	protein_match	266088	266231	85.000000	-	.	Target=Q7L2R6.2 241 290 +;percentID=40;Gap=M32 I2 M16 ;sequence=MALPQGLLTFRDVAIEFSQEEWKCLDPAQRTLYRDVMLENYRNLVSLDISSKCMMKEFSSTAQGNREVFHAGTSQRHESHHNGDFCFQDIDKDIHDIEFQWQEDERNGHEALMTKIKKLTGSTERYDQNYAGNKPVKYQLGFSFHSHLPELHIFHTEEKIDNQVVKSIHDASLVSTAQRISCRPETHISNDYGNNFLNSSLFTQKQEVHMREKSFQCNDSGKAYNCSSLLRKHQLIHLGEKQYKCDICGKVFNSKRYVARHRRCHTGEKPYKCNECGKTFSQTYYLTCHRRLHTGEKPYKCEECDKAFHFKSKLQIHRRIHTGEKPYKCNECGKTFSQKSYLTCHRRLHTGEKPYKCNECGKTFSRKS [...]
+chr4-04	SwissProt	protein_match	266088	266180	85.000000	-	.	Target=P51522-2.2 5 36 +;percentID=57;Gap=M6 D1 M8 I2 M16 ;sequence=MSHLAQHRRIHTGEKPYKCNECGKVFNQISHLAQHQRIHTGEKPYKCNECGKVFHQISHLAQHRTIHTGEKPYECNKCGKVFSRNSYLVQHLIIHTGEKPYRCNVCGKVFHHISHLAQHQRIHTGEKPYKCNECGKVFSHKSSLVNHWRIHTGEKPYKCNECGKVFSHKSSLVNHWRIHTGEKPYKCNECGKVFSRNSYLAQHLIIHAGEKPYKCDECDKAFSQNSHLVQHHRIHTGEKPYKCDECGKVFSQNSYLAYHWRIHTGEKAYKCNECGKVFGLNSSLAHHRKIHTGEKPFKCNECGKAFSMRSSLTNHHAIHTGEKHFKCNECGKLFRDNSYLVRHQRFHAGKKSNTCN
+chr4-04	SwissProt	protein_match	266088	266231	86.000000	-	.	Target=A2RRD8.1 327 376 +;percentID=42;Gap=M32 I2 M16 ;sequence=MALSQGLLTFRDVAIEFSQEEWKCLDPAQRTLYRDVMLENYRNLVSLDISSKCMMNTLSSTGQGNTEVIHTGTLQRQASYHIGAFCSQEIEKDIHDFVFQWQEDETNDHEAPMTEIKKLTSSTDRYDQRHAGNKPIKGQLESRFHLHLRRHRRIHTGEKPYKCEECEKVFSCKSHLEIHRIIHTGEKPYKCKVCDKAFKHDSHLAKHTRIHRGDKHYTCNECGKVFDQKATLACHHRSHTGEKPYKCNECGKTFSQTSHLVYHHRLHTGEKPYKCNECGKTFARNSVLVIHKAVHTAEKPYKCNECGKVFKQRATLAGHRRVHTGEKPYRCEECDKVFSRKSHLERHRRIHTGEKPYKCKVCDKAFRS [...]
+chr4-04	SwissProt	protein_match	266088	266225	86.000000	-	.	Target=Q96SQ5.1 380 427 +;percentID=41;Gap=M29 I2 M17 ;sequence=MAAAVPRRPTQQGTVTFEDVAVNFSQEEWCLLSEAQRCLYRDVMLENLALISSLGCWCGSKDEEAPCKQRISVQRESQSRTPRAGVSPKKAHPCEMCGLILEDVFHFADHQETHHKQKLNRSGACGKNLDDTAYLHQHQKQHIGEKFYRKSVREASFVKKRKLRVSQEPFVFREFGKDVLPSSGLCQEEAAVEKTDSETMHGPPFQEGKTNYSCGKRTKAFSTKHSVIPHQKLFTRDGCYVCSDCGKSFSRYVSFSNHQRDHTAKGPYDCGECGKSYSRKSSLIQHQRVHTGQTAYPCEECGKSFSQKGSLISHQLVHTGEGPYECRECGKSFGQKGNLIQHQQGHTGERAYHCGECGKSFRQKFCFI [...]
+chr4-04	SwissProt	protein_match	266088	266231	86.000000	-	.	Target=A0JNB1.1 478 527 +;percentID=44;Gap=M32 I2 M16 ;sequence=MPSQDSDFPQKEHEKMTEFQEAVTFKDVAVVFTEEELGLLDSAQRKLYQDVMVENFRNLVSVGHVPFKADMVSQLETEEKLWTMERETQRNGHSSEIHSAVTSGSKIPNEMETLGKVMFKYLSCEELSCWQIWKHTTNDLTLQRKSSWFLHGDSLQVSEDENHIMNHKGDHFGCLENQEFLIPTAQASCGSRCLSESENPSRGKQMSVKNHLHVCEGFTKNSPLSDPGKTDAKQTPCKGERPHPCRVCGEGFSHGAVLPVHQVDPGEKCSHLQTHQRIHPGGTVNKCPKSGDGFHQNSFHPHHSNPTGEKSYRCDSCGKAFGSSTGLIIHYRTHTGEKPYRCEACGKCFSQSSNFQCHQRVHTEEKPY [...]
+chr4-04	SwissProt	protein_match	266088	266231	86.000000	-	.	Target=A8MT65.2 486 535 +;percentID=41;Gap=M14 D1 M9 I1 M8 I2 M16 ;sequence=MAVMDLSSPWALTKQDSACFHLRNAEEERMIAVFLTTWLQEPMTFKDVAVEFTQEEWMMLDSAQRSLYRDVMLENYRNLTSVEYQLYRLTVISPLDQEEIRNMKKRIPQAICPDQKIQPKTKESTVQKILWEEPSNAVKMIKLTMHNWSSTLREDWECHKIRKQHKIPGGHWRQMIYAPKKTVPQELFRDYHELEENSKLGSKLIFSQSIFTSKHCQKCYSEIGCLKHNSIINNYVKNSISEKLYESHECDTTLWHFQRNQTVQKEYTYSKHGMHFTHNMFPVPNNLHMAQNACECNKDETLCHQSSLKKQGQTHTEKKHECNQCGKAFKRISNLTLYKKSHMGEKQYECKECGKV [...]
+chr4-04	SwissProt	protein_match	266088	266231	87.000000	-	.	Target=Q5R5S6.1 297 346 +;percentID=43;Gap=M13 I1 M10 D1 M7 I2 M17 ;sequence=MAHALVTFRDVTIDFSQKEWECLDTTQRKLYRDVMLENYNNLVSLGYSGSKPDVITLLEQGKEPCVAARDVTGRQYPGLLSRHKTKKLSSEKDIHDISLSKGSKIEKSKTLHLKGSIFRNEWQSKSEFEGQQGLKERSISQKKIIFKKMSTDRKHPSFTLNQRIHNSEKSCDSNLVQHGKIDSDVKHDCKECGSTFNNVYQLTLHQKIHTGEKSCKCEKCGKVFSHSYQLTLHQRFHTGEKPYECQECGKTFILYPQLNRHQKIHTGKKPYMCKKCDKSFFSRLELTQHKRIHTGKKSYECKECGKVFQLVFYFKEHERIHTGKKPYECKECGKAFSVCGQLTRHQKIHTGVKPY [...]
+chr4-04	SwissProt	protein_match	266088	266246	87.000000	-	.	Target=O95201.2 301 355 +;percentID=40;Gap=M37 I2 M16 ;sequence=MSADGGGIQDTQDKETPPEVPDRGHPHQEMPSKLGEAVPSGDTQESLHIKMEPEEPHSEGASQEDGAQGAWGWAPLSHGSKEKALFLPGGALPSPRIPVLSREGRTRDRQMAAALLTAWSQMPVTFEDVALYLSREEWGRLDHTQQNFYRDVLQKKNGLSLGFPFSRPFWAPQAHGKGEASGSSRQAGDEKEWRGACTGAVEVGQRVQTSSVAALGNVKPFRTRAGRVQWGVPQCAQEAACGRSSGPAKDSGQPAEPDRTPDAAPPDPSPTEPQEYRVPEKPNEEEKGAPESGEEGLAPDSEVGRKSYRCEQCGKGFSWHSHLVTHRRTHTGEKPYACTDCGKRFGRSSHLIQHQIIHTGEKPYTCPA [...]
+chr4-04	SwissProt	protein_match	266088	266225	87.000000	-	.	Target=Q7Z340.3 475 522 +;percentID=42;Gap=M12 I1 M9 D1 M8 I2 M16 ;sequence=MPAPVGRRSPPSPRSSMAAVALRDSAQGMTFEDVAIYFSQEEWELLDESQRFLYCDVMLENFAHVTSLGYCHGMENEAIASEQSVSIQVRTSKGNTPTQKTHLSEIKMCVPVLKDILPAAEHQTTSPVQKSYLGSTSMRGFCFSADLHQHQKHYNEEEPWKRKVDEATFVTGCRFHVLNYFTCGEAFPAPTDLLQHEATPSGEEPHSSSSKHIQAFFNAKSYYKWGEYRKASSHKHTLVQHQSVCSEGGLYECSKCEKAFTCKNTLVQHQQIHTGQKMFECSECEESFSKKCHLILHKIIHTGERPYECSDREKAFIHKSEFIHHQRRHTGGVRHECGECRKTFSYKSNLIEHQRV [...]
+chr4-04	SwissProt	protein_match	266088	266231	87.000000	-	.	Target=P10078-2.3 600 649 +;percentID=47;Gap=M12 I1 M11 D1 M8 I2 M16 ;sequence=MQGMASVVSCEPWALLGRGALCTKARPGGGPAAGTVVAPGSPDRGRPRSRNSLASQDQQGAVTSGTAHKALFSRDTNFLQEINRKQEAAPTGTRHKAKSQGLVTFGDVAVVFSQEEWEWLNSEQRSLYWKVMLDNYRNLASLGLCASQPDMITSLEQGRDPWMMKRKMRKGQHLDLKAMQETKEFPPKDLSEETLFLAVLRKQLLPHRPKCSMVRAAWEGGAVFTTHRGLKTNSGLARDSPAQLVSAQRSFCKSVTWENCGDRGSVGQQSVQEAQDLLPRQDSHAERVTGRTWSTKLECSTFRDQDSECTFERNEQETVTPNRAFSEGRDGMCIESGRWFHLNSSDERSHNCD [...]
+chr4-04	SwissProt	protein_match	266088	266225	87.000000	-	.	Target=Q7Z340-2.3 402 449 +;percentID=42;Gap=M12 I1 M9 D1 M8 I2 M16 ;sequence=MENEAIASEQSVSIQVRTSKGNTPTQKTHLSEIKMCVPVLKDILPAAEHQTTSPVQKSYLGSTSMRGFCFSADLHQHQKHYNEEEPWKRKVDEATFVTGCRFHVLNYFTCGEAFPAPTDLLQHEATPSGEEPHSSSSKHIQAFFNAKSYYKWGEYRKASSHKHTLVQHQSVCSEGGLYECSKCEKAFTCKNTLVQHQQIHTGQKMFECSECEESFSKKCHLILHKIIHTGERPYECSDREKAFIHKSEFIHHQRRHTGGVRHECGECRKTFSYKSNLIEHQRVHTGERPYECGECGKSFRQSSSLFRHQRVHSGERPYQCCECGKSFRQIFNLIRHRRVHTGEMPYQCSDCGKS [...]
+chr4-04	SwissProt	protein_match	266088	266225	87.000000	-	.	Target=Q9NYW8.1 373 420 +;percentID=43;Gap=M30 I2 M16 ;sequence=MNTLQGPVSFKDVAVDFTQEEWQQLDPDEKITYRDVMLENYSHLVSVGYDTTKPNVIIKLEQGEEPWIMGGEFPCQHSPEAWRVDDLIERIQENEDKHSRQAACINSKTLTEEKENTFSQIYMETSLVPSSIIAHNCVSCGKNLESISQLISSDGSYARTKPDECNECGKTYHGEKMCEFNQNGDTYSHNEENILQKISILEKPFEYNECMEALDNEAVFIAHKRAYIGEKPYEWNDSGPDFIQMSNFNAYQRSQMEMKPFECSECGKSFCKKSKFIIHQRAHTGEKPYECNVCGKSFSQKGTLTVHRRSHLEEKPYKCNECGKTFCQKLHLTQHLRTHSGEKPYECSECGKTFCQKTHLTLHQRNHS [...]
+chr4-04	SwissProt	protein_match	266088	266222	87.000000	-	.	Target=Q8TC21.2 196 242 +;percentID=44;Gap=M26 I1 M4 I1 M15 ;sequence=MPSPDSMTFEDIIVDFTQEEWALLDTSQRKLFQDVMLENISHLVSIGKQLCKSVVLSQLEQVEKLSTQRISLLQGREVGIKHQEIPFIQHIYQKGTSTISTMRSHTQEDPFLCNDLGEDFTQHIALTQNVITYMRTKHFVSKKFGKIFSDWLSFNQHKEIHTKCKSYGSHLFDYAFIQNSALRPHSVTHTREITLECRVCGKTFSKNSNLRRHEMIHTGEKPHGCHLCGKAFTHCSDLRKHERTHTGEKPYGCHLCGKAFSKSSNLRRHEMIHTREKAQICHLCGKAFTHCSDLRKHERTHLGDKPYGCLLCGKAFSKCSYLRQHERTHNGEKPYECHLCGKAFSHCSHLRQHERSHNGEKP [...]
+chr4-04	SwissProt	protein_match	266088	266222	87.000000	-	.	Target=Q8TC21-2.2 126 172 +;percentID=44;Gap=M26 I1 M4 I1 M15 ;sequence=MPSPDSMTFEDIIVDFTQEEWALLDTSQRKLFQDVMLENISHLVSIGEDFTQHIALTQNVITYMRTKHFVSKKFGKIFSDWLSFNQHKEIHTKCKSYGSHLFDYAFIQNSALRPHSVTHTREITLECRVCGKTFSKNSNLRRHEMIHTGEKPHGCHLCGKAFTHCSDLRKHERTHTGEKPYGCHLCGKAFSKSSNLRRHEMIHTREKAQICHLCGKAFTHCSDLRKHERTHLGDKPYGCLLCGKAFSKCSYLRQHERTHNGEKPYECHLCGKAFSHCSHLRQHERSHNGEKPHGCHLCGKAFTESSVLKRHERIHTGEKPYECHVCGKAFTESSDLRRHERTHTGEKPYECHLCGKAFNH [...]
+chr4-04	SwissProt	protein_match	266088	266231	88.000000	-	.	Target=Q9NQZ8.1 184 233 +;percentID=42;Gap=M31 I2 M17 ;sequence=MKELDPKNDISEDKLSVVGEATGGPTRNGARGPGSEGVWEPGSWPERPRGDAGAEWEPLGIPQGNKLLGGSVPACHELKAFANQGCVLVPPRLDDPTEKGACPPVRRGKNFSSTSDLSKPPMPCEEKKTYDCSECGKAFSRSSSLIKHQRIHTGEKPFECDTCGKHFIERSSLTIHQRVHTGEKPYACGDCGKAFSQRMNLTVHQRTHTGEKPYVCDVCGKAFRKTSSLTQHERIHTGEKPYACGDCGKAFSQNMHLIVHQRTHTGEKPYVCPECGRAFSQNMHLTEHQRTHTGEKPYACKECGKAFNKSSSLTLHQRNHTGEKPYVCGECGKAFSQSSYLIQHQRFHIGVKPFECSECGKAFSKNSS [...]
+chr4-04	SwissProt	protein_match	266088	266231	88.000000	-	.	Target=Q86WZ6.1 490 539 +;percentID=44;Gap=M32 I2 M16 ;sequence=MPSQNYDLPQKKQEKMTKFQEAVTFKDVAVVFSREELRLLDLTQRKLYRDVMVENFKNLVAVGHLPFQPDMVSQLEAEEKLWMMETETQRSSKHQNKMETLQKFALKYLSNQELSCWQIWKQVASELTRCLQGKSSQLLQGDSIQVSENENNIMNPKGDSSIYIENQEFPFWRTQHSCGNTYLSESQIQSRGKQIDVKNNLQIHEDFMKKSPFHEHIKTDTEPKPCKGNEYGKIISDGSNQKLPLGEKPHPCGECGRGFSYSPRLPLHPNVHTGEKCFSQSSHLRTHQRIHPGEKLNRCHESGDCFNKSSFHSYQSNHTGEKSYRCDSCGKGFSSSTGLIIHYRTHTGEKPYKCEECGKCFSQSSNFQ [...]
+chr4-04	SwissProt	protein_match	266088	266231	88.000000	-	.	Target=Q9XSR1.1 370 419 +;percentID=45;Gap=M18 I1 M5 D1 M7 I2 M17 ;sequence=MAVKQLLPAGSQVLVSFEDVAVLLSREEWGRLGPAQRGLYSDVMLETYRNLISLGLQGSKPDVISRLEKGEEPWAPYSAKIEESWIRSHESESFQSLMEKKGLTPKQEISKAMGFRRAKSEYVRNVSKESEFEEMNKTKGKLKNYRKKSAEEELKKSFSQKNSSRPVTLTHVKSPVSGKGQKSSSLEVDYTVDASPVRFHRASTGGSLHQNVPCVNDFQQSQDLINLQCLHLGERACQTDLFMKAPRQSSVLSENQRVNNPEKSFECTECRRLFSPSKALSQHQRSHTGEIPCESGGCGRTSHHCSVLSQHQEVHHGGESHTCAECGKAFKAHSYFIQQHNTHTGERPYECSECAH [...]
+chr4-04	SwissProt	protein_match	266088	266225	88.000000	-	.	Target=B2RUI1.2 505 552 +;percentID=44;Gap=M12 I1 M9 D1 M8 I2 M16 ;sequence=MPRARPREETSATWSLLPLQNPMAVAMHRNIAQVPLTSEPVMELGLDVSFEDVAIHFSQEEWVLLDKAQRLLYCSVMLENLALVASLGSCTGMGDEDVTCEPAEEVVCNTSPSPQETHLLEIPVPALEEAWHQNEFLSTQPVQTLDLSRTGSGLKEDSNRHWKSYSGEKSCERDSHRATAMSSCRSHGLTEPFIRGKDGEEALSSIAGVQQQGACHSEQPSTGCLQQQATCIREQPYSSAKCGQALLNGEKHCKDGECQKGSSCKHTLVQCPSASSEKRPSECSKYEKAFSCSYKHAQHQDSHSGKRTHEHSQHEKPFSKKCRLNTQDRICPQERPYKCTECGKAFIYKSELVYHQ [...]
+chr4-04	SwissProt	protein_match	266088	266231	89.000000	-	.	Target=Q95K52.1 405 454 +;percentID=42;Gap=M31 I2 M17 ;sequence=MGSLRHAWFNTSFSFPSSGFSGFCASPIEESHGALISSCNSRTMTDGLVTFRDVAIDFSQEEWECLDPAQRDLYVDVMLENYSNLVSLDLESTTYETKKIFSEKDIFEINFSQWEMKEKSKTLGLEASIFRNNWKCKSIFKGLKGCQEGYFSQMIISYEEIPSYRKSKSLTPHQSIHNTEKPYVYKERVNACSHGSKLVQHKRTHTAEKHFECKECGKNYLSAYQLNVHQRFHTGEKPYECKECGKTFSWGSSLVKHERIHTGEKPYECKECGKAFSRGYHLTQHQKIHIGVKSYKCKECGKAFFWGSSLAKHEIIHTGEKPYQCKECGKAFSRGYQLTQHQKIHTGKKPYECKICGKAFCWGYQLTR [...]
+chr4-04	SwissProt	protein_match	266088	266231	89.000000	-	.	Target=Q6ECI4-2.2 192 241 +;percentID=40;Gap=M32 I2 M16 ;sequence=MKSQEEVEVAGIKLCKAMSLGSVTFTDVAIDFSQDEWEWLNLAQRSLYKKVMLENYRNLVSVGKSIFLLLPPHDSVVFYAIIRISHSFPQHRQFLYVFLHAGLCISKPDVISLLEQEKDPWVIKGGMNRGLCPGEKPYECIECGKAFSQSAHLAQHQRIHTGEKPFECTECGKAFSQNAHLVQHQRVHTGEKPYQCKQCNKAFSQLAHLAQHQRVHTGEKPYECIECGKAFSDCSSLAHHRRIHTGKRPYECIDCGKAFRQNASLIRHRRYYHTGEKPFDCIDCGKAFTDHIGLIQHKRIHTGERPYKCNVCGKAFSHGSSLTVHQRIHTGEKPYECNICEKAFSHRGSLTLHQRVHTGEKPYECK [...]
+chr4-04	SwissProt	protein_match	266088	266237	89.000000	-	.	Target=Q16587.2 271 322 +;percentID=40;Gap=M33 I2 M17 ;sequence=MEIPAPEPEKTALSSQDPALSLKENLEDISGWGLPEARSKESVSFKDVAVDFTQEEWGQLDSPQRALYRDVMLENYQNLLALGPPLHKPDVISHLERGEEPWSMQREVPRGPCPEWELKAVPSQQQGICKEEPAQEPIMERPLGGAQAWGRQAGALQRSQAAPGRRTCHGLGRPVEEFPLRCPLFAQQRVPEGGPLLDTRKNVQATEGRTKAPARLCAGENASTPSEPEKFPQVRRQRGAGAGEGEFVCGECGKAFRQSSSLTLHRRWHSREKAYKCDECGKAFTWSTNLLEHRRIHTGEKPFFCGECGKAFSCHSSLNVHQRIHTGERPYKCSACEKAFSCSSLLSMHLRVHTGEKPYRCGECGKAF [...]
+chr4-04	SwissProt	protein_match	266088	266237	89.000000	-	.	Target=Q16587-3.2 239 290 +;percentID=40;Gap=M33 I2 M17 ;sequence=MEIPAPEPEKTALSSQDPALSLKENLEDISGWGLPEARSKESVSFKDVAVDFTQEEWGQLDSPQRALYRDVMLENYQNLLALEWELKAVPSQQQGICKEEPAQEPIMERPLGGAQAWGRQAGALQRSQAAPGRRTCHGLGRPVEEFPLRCPLFAQQRVPEGGPLLDTRKNVQATEGRTKAPARLCAGENASTPSEPEKFPQVRRQRGAGAGEGEFVCGECGKAFRQSSSLTLHRRWHSREKAYKCDECGKAFTWSTNLLEHRRIHTGEKPFFCGECGKAFSCHSSLNVHQRIHTGERPYKCSACEKAFSCSSLLSMHLRVHTGEKPYRCGECGKAFNQRTHLTRHHRIHTGEKPYQCGSCGKAFTC [...]
+chr4-04	SwissProt	protein_match	266088	266231	89.000000	-	.	Target=Q8N7M2.3 429 478 +;percentID=42;Gap=M31 I2 M17 ;sequence=MESRSVAQAGVQWCDLGSLQAPPPGFTLFSCLSLLSSWDYSSGFSGFCASPIEESHGALISSCNSRTMTDGLVTFRDVAIDFSQEEWECLDPAQRDLYVDVMLENYSNLVSLDLESKTYETKKIFSENDIFEINFSQWEMKDKSKTLGLEASIFRNNWKCKSIFEGLKGHQEGYFSQMIISYEKIPSYRKSKSLTPHQRIHNTEKSYVCKECGKACSHGSKLVQHERTHTAEKHFECKECGKNYLSAYQLNVHQRFHTGEKPYECKECGKTFSWGSSLVKHERIHTGEKPYECKECGKAFSRGYHLTQHQKIHIGVKSYKCKECGKAFFWGSSLAKHEIIHTGEKPYKCKECGKAFSRGYQLTQHQKI [...]
+chr4-04	SwissProt	protein_match	266088	266225	89.000000	-	.	Target=Q13398-4.2 345 392 +;percentID=48;Gap=M30 I2 M6 I1 M4 D1 M5 ;sequence=MISAYCNLHLLGSSDSPASASQVAGTTGMRHHAQGSVTFEDVAVYFSWEEWDLLDEAQKHLYFDVMLENFALTSSLGCWCGVEHEETPSEQRISGERVPQFRTSKEGSSSQNADSCEICCLVLRDILHLAEHQGTNCGQKLHTCGKQFYISANLQQHQRQHITEAPFRSYVDTASFTQSCIVHVSEKPFTCREIRKDFLANMRFLHQDATQTGEKPNNSNKCAVAFYSGKSHHNWGKCSKAFSHIDTLVQDQRILTREGLFECSKCGKACTRRCNLIQHQKVHSEERPYECNECGKFFTYYSSFIIHQRVHTGERPYACPECGKSFSQIYSLNSHRKVHTGERPYECGECGKSFS [...]
+chr4-04	SwissProt	protein_match	266088	266225	89.000000	-	.	Target=Q13398.2 341 388 +;percentID=48;Gap=M30 I2 M6 I1 M4 D1 M5 ;sequence=MLGFPPGRPQLPVQLRPQTRMATALRDPASGSVTFEDVAVYFSWEEWDLLDEAQKHLYFDVMLENFALTSSLGCWCGVEHEETPSEQRISGERVPQFRTSKEGSSSQNADSCEICCLVLRDILHLAEHQGTNCGQKLHTCGKQFYISANLQQHQRQHITEAPFRSYVDTASFTQSCIVHVSEKPFTCREIRKDFLANMRFLHQDATQTGEKPNNSNKCAVAFYSGKSHHNWGKCSKAFSHIDTLVQDQRILTREGLFECSKCGKACTRRCNLIQHQKVHSEERPYECNECGKFFTYYSSFIIHQRVHTGERPYACPECGKSFSQIYSLNSHRKVHTGERPYECGECGKSFSQRSNLM [...]
+chr4-04	SwissProt	protein_match	266088	266225	89.000000	-	.	Target=Q13398-3.2 353 400 +;percentID=48;Gap=M30 I2 M6 I1 M4 D1 M5 ;sequence=MRTLRQREVEYFSKATQLVRGSTKDRGAQVPIATEVLFKLTQGSVTFEDVAVYFSWEEWDLLDEAQKHLYFDVMLENFALTSSLGCWCGVEHEETPSEQRISGERVPQFRTSKEGSSSQNADSCEICCLVLRDILHLAEHQGTNCGQKLHTCGKQFYISANLQQHQRQHITEAPFRSYVDTASFTQSCIVHVSEKPFTCREIRKDFLANMRFLHQDATQTGEKPNNSNKCAVAFYSGKSHHNWGKCSKAFSHIDTLVQDQRILTREGLFECSKCGKACTRRCNLIQHQKVHSEERPYECNECGKFFTYYSSFIIHQRVHTGERPYACPECGKSFSQIYSLNSHRKVHTGERPYEC [...]
+chr4-04	SwissProt	protein_match	266088	266225	89.000000	-	.	Target=Q13398-6.2 321 368 +;percentID=48;Gap=M30 I2 M6 I1 M4 D1 M5 ;sequence=MATALRDPASGSVTFEDVAVYFSWEEWDLLDEAQKHLYFDVMLENFALTSSLGCWCGVEHEETPSEQRISGERVPQFRTSKEGSSSQNADSCEICCLVLRDILHLAEHQGTNCGQKLHTCGKQFYISANLQQHQRQHITEAPFRSYVDTASFTQSCIVHVSEKPFTCREIRKDFLANMRFLHQDATQTGEKPNNSNKCAVAFYSGKSHHNWGKCSKAFSHIDTLVQDQRILTREGLFECSKCGKACTRRCNLIQHQKVHSEERPYECNECGKFFTYYSSFIIHQRVHTGERPYACPECGKSFSQIYSLNSHRKVHTGERPYECGECGKSFSQRSNLMQHRRVHTGERPYECSECG [...]
+chr4-04	SwissProt	protein_match	266088	266225	89.000000	-	.	Target=Q13398-5.2 280 327 +;percentID=48;Gap=M30 I2 M6 I1 M4 D1 M5 ;sequence=MLENFALTSSLGCWCGVEHEETPSEQRISGERVPQFRTSKEGSSSQNADSCEICCLVLRDILHLAEHQGTNCGQKLHTCGKQFYISANLQQHQRQHITEAPFRSYVDTASFTQSCIVHVSEKPFTCREIRKDFLANMRFLHQDATQTGEKPNNSNKCAVAFYSGKSHHNWGKCSKAFSHIDTLVQDQRILTREGLFECSKCGKACTRRCNLIQHQKVHSEERPYECNECGKFFTYYSSFIIHQRVHTGERPYACPECGKSFSQIYSLNSHRKVHTGERPYECGECGKSFSQRSNLMQHRRVHTGERPYECSECGKSFSQNFSLIYHQRVHTGERPHECNECGKSFSRSSSLIHHR [...]
+chr4-04	SwissProt	protein_match	266088	266225	89.000000	-	.	Target=Q13398-2.2 332 379 +;percentID=48;Gap=M30 I2 M6 I1 M4 D1 M5 ;sequence=MLENFALTSSLGLISSWSHVVAQLGLGEVPSVLHRMFMTPASARWDQRGPGLHEWHLGKGMSSGCWCGVEHEETPSEQRISGERVPQFRTSKEGSSSQNADSCEICCLVLRDILHLAEHQGTNCGQKLHTCGKQFYISANLQQHQRQHITEAPFRSYVDTASFTQSCIVHVSEKPFTCREIRKDFLANMRFLHQDATQTGEKPNNSNKCAVAFYSGKSHHNWGKCSKAFSHIDTLVQDQRILTREGLFECSKCGKACTRRCNLIQHQKVHSEERPYECNECGKFFTYYSSFIIHQRVHTGERPYACPECGKSFSQIYSLNSHRKVHTGERPYECGECGKSFSQRSNLMQHRRVHT [...]
+chr4-04	SwissProt	protein_match	266088	266237	89.000000	-	.	Target=Q16587-4.2 199 250 +;percentID=40;Gap=M33 I2 M17 ;sequence=MPSPPFSPRAGPPLHKPDVISHLERGEEPWSMQREVPRGPCPEWELKAVPSQQQGICKEEPAQEPIMERPLGGAQAWGRQAGALQRSQAAPGRRTCHGLGRPVEEFPLRCPLFAQQRVPEGGPLLDTRKNVQATEGRTKAPARLCAGENASTPSEPEKFPQVRRQRGAGAGEGEFVCGECGKAFRQSSSLTLHRRWHSREKAYKCDECGKAFTWSTNLLEHRRIHTGEKPFFCGECGKAFSCHSSLNVHQRIHTGERPYKCSACEKAFSCSSLLSMHLRVHTGEKPYRCGECGKAFNQRTHLTRHHRIHTGEKPYQCGSCGKAFTCHSSLTVHEKIHSGDKPFKCSDCEKAFNSRSRLTLHQRTHT [...]
+chr4-04	SwissProt	protein_match	266088	266237	89.000000	-	.	Target=Q16587-2.2 200 251 +;percentID=40;Gap=M33 I2 M17 ;sequence=MLENYQNLLALGPPLHKPDVISHLERGEEPWSMQREVPRGPCPEWELKAVPSQQQGICKEEPAQEPIMERPLGGAQAWGRQAGALQRSQAAPGRRTCHGLGRPVEEFPLRCPLFAQQRVPEGGPLLDTRKNVQATEGRTKAPARLCAGENASTPSEPEKFPQVRRQRGAGAGEGEFVCGECGKAFRQSSSLTLHRRWHSREKAYKCDECGKAFTWSTNLLEHRRIHTGEKPFFCGECGKAFSCHSSLNVHQRIHTGERPYKCSACEKAFSCSSLLSMHLRVHTGEKPYRCGECGKAFNQRTHLTRHHRIHTGEKPYQCGSCGKAFTCHSSLTVHEKIHSGDKPFKCSDCEKAFNSRSRLTLHQRTH [...]
+chr4-04	SwissProt	protein_match	266088	266231	89.000000	-	.	Target=Q8BPP0.1 149 195 +;percentID=44;Gap=M6 D3 M22 I2 M17 ;sequence=MAMYLTREEWRPLDPTQRDLYRDVMQENYGNVVSLDFEIRSENEANPKQEFSDDVEFATMSEEPLENAEKNPGSEEAFESGDQAERPWGDLTAEEWVSYPLQQVTDLLVHKEAHAGIRYHICSQCGKAFSQISDLNRHQKTHTGDRPYKCYECGKGFSRSSHLIQHQRTHTGERPYDCNECGKSFGRSSHLIQHQTIHTGEKPHKCTECGKSFCRLSHLIQHQRTHSGEKPYECEECGKSFSRSSHLAQHQRTHTGEKPYECHECGRGFSERSDLIKHYRVHTGERPYKCDECGKNFSQNSDLVRHRRAHTGEKPYHCNECGENFSRISHLVQHQRTHTGEKPYECTACGKSFSRSSHLITH [...]
+chr4-04	SwissProt	protein_match	266088	266240	90.000000	-	.	Target=Q9HBT8.1 461 513 +;percentID=43;Gap=M35 I2 M16 ;sequence=METDLAEMPEKGALSSQDSPHFQEKSTEEGEVAALRLTARSQETVTFKDVAMDFTPEEWGKLDPAQRDVMLENYRNLVSLWLPVSKPESYNLENGKEPLKLERKAPKSSYSDMETRPQSKDSTSVQDFSKAESCKVAIIDRLTRNSVYDSNLEAALECENWLENQQGNQERHLREMFTHMNSLSEETDHKHDVYWKSFNQKSVLITEDRVPKGSYAFHTLEKSLKQKSNLMKKQRTYKEKKPHKCNDCGELFTYHSVLIRHQRVHTGEKPYTCNECGKSFSHRANLTKHQRTHTRILFECSECKKTFTESSSLATHQRIHVGERPYECNECGKGFNRSTHLVQHQLIHTGVKPYECNECDKAFIHSSA [...]
+chr4-04	SwissProt	protein_match	266088	266231	90.000000	-	.	Target=Q7Z3V5.3 221 270 +;percentID=42;Gap=M31 I2 M17 ;sequence=MPHLLVTFRDVAIDFSQEEWECLDPAQRDLYRDVMLENYSNLISLDLESSCVTKKLSPEKEIYEMESLQWENMGKRINHHLQYNGLGDNMECKGNLEGQEASQEGLYMCVKITCEEKATESHSTSSTFHRIIPTKEKLYKCKECRQGFSYLSCLIQHEENHNIEKCSEVKKHRNTFSKKPSYIQHQRIQTGEKPYECMECGKAFGRTSDLIQHQKIHTNEKPYQCNACGKAFIRGSQLTEHQRVHTGEKPYECKKCGKAFSYCSQYTLHQRIHSGEKPYECKDCGKAFILGSQLTYHQRIHSGEKPYECKECGKAFILGSHLTYHQRVHTGEKPYICKECGKAFLCASQLNEHQRIHTGEKPYECKEC [...]
+chr4-04	SwissProt	protein_match	266088	266231	90.000000	-	.	Target=Q8N184-2.3 363 412 +;percentID=47;Gap=M17 I1 M6 D1 M7 I2 M17 ;sequence=MAQGSVSFNDVTVDFTQEEWQHLDHAQKTLYMDVMLENYCHLISVGCHMTKPDVILKLERGEEPWTSFAGHTCLEENWKAEDFLVKFKEHQEKYSRSVVSINHKKLVKEKSKIYEKTFTLGKNPVNSKNLPPEYDTHGRILKNVSELIISNLNPARKRLSEYNGYGKSLLSTKQETTHPEVKSHNQSARAFSHNEVLMQYQKTETPAQSFGYNDCEKSFLQRGGLITHSRPYKGENPSVYNKKRRATNIEKKHTCNECGKSFCRKSVLILHQGIHSEEKPYQCHQCGNAFRRKSYLIDHQRTHTGEKPFVCNECGKSFRLKTALTDHQRTHTGEKSYECLQCRNAFRLKSHLIR [...]
+chr4-04	SwissProt	protein_match	266088	266231	90.000000	-	.	Target=Q6NX49.1 518 567 +;percentID=47;Gap=M18 I1 M5 D1 M8 I2 M16 ;sequence=MEARSMLVPPQASVCFEDVAMAFTQEEWEQLDLAQRTLYREVTLETWEHIVSLGLFLSKSDVISQLEQEEDLCRAEQEAPRDWKATLEENRLNSEKDRAREELSHHVEVYRSGPEEPPSLVLGKVQDQSNQLREHQENSLRFMVLTSERLFAQREHCELELGGGYSLPSTLSLLPTTLPTSTGFPKPNSQVKELKQNSAFINHEKNGADGKHCESHQCARAFCQSIYLSKLGNVETGKKNPYEYIVSGDSLNYGSSLCFHGRTFSVKKSDDCKDYGNLFSHSVSLNEQKPVHFGKSQYECDECRETCSESLCLVQTERSGPGETPFRCEERCAAFPMASSFSDCNIIQTTEKPSVC [...]
+chr4-04	SwissProt	protein_match	266088	266231	90.000000	-	.	Target=Q06732.2 691 740 +;percentID=44;Gap=M32 I2 M16 ;sequence=MNKVDQKFQGSVSFKDVTVGFTQEEWQHLDPSQRALYRDVMLENYSNLVSVGYCAHKPEVIFRLEQGEEPWRLEEEFPSQSFPEVWTADHLKERSQENQSKHLWEVVFINNEMLTKEQGNVIGIPFNMDVSSFPSRKMFCQYDSRGMSFNTVSELVISKINYLGKKSDEFNACGKLLLNIKHDETHTREKNEVLKNRNTLSHRENTLQHEKIQTLDHNFEYSICQETLLEKAVFNTRKRENAEENNCDYNEFGRTFCDSSSLLFHQIPPSKDSHYEFSDCEKFLCVKSTLSKHDGVPVKHYDCGESGNNFRRKLCLSQLQKGDKGEKHFECNECGKAFWEKSHLTRHQRVHTGEKHFQCNQCGKTFWE [...]
+chr4-04	SwissProt	protein_match	266088	266231	90.000000	-	.	Target=Q8N184.3 363 412 +;percentID=47;Gap=M17 I1 M6 D1 M7 I2 M17 ;sequence=MAQGSVSFNDVTVDFTQEEWQHLDHAQKTLYMDVMLENYCHLISVGCHMTKPDVILKLERGEEPWTSFAGHTCLEENWKAEDFLVKFKEHQEKYSRSVVSINHKKLVKEKSKIYEKTFTLGKNPVNSKNLPPEYDTHGRILKNVSELIISNLNPARKRLSEYNGYGKSLLSTKQETTHPEVKSHNQSARAFSHNEVLMQYQKTETPAQSFGYNDCEKSFLQRGGLITHSRPYKGENPSVYNKKRRATNIEKKHTCNECGKSFCRKSVLILHQGIHSEEKPYQCHQCGNAFRRKSYLIDHQRTHTGEKPFVCNECGKSFRLKTALTDHQRTHTGEKSYECLQCRNAFRLKSHLIRHQ [...]
+chr4-04	SwissProt	protein_match	266088	266231	90.000000	-	.	Target=Q6JLC9.1 270 319 +;percentID=42;Gap=M32 I2 M16 ;sequence=MAHGLVTFSDVAIDFSQEEWACLDSRQRDLYWDVMLENYSNLVSLDLESPYGTKSLPTEKGIYEINLSKWNSNGKSKSLGLDWMCEGEFEGPQGPRESCFNQMIINYEKTPTCRENTSVRPHQRLHTRENSYECKECGKAFSRGYQLTQHQKIHTGEKPYECKECKKAFRWGNQLTQHQKIHTGEKPYECKDCGKAFRWGSSLVIHKRIHTGEKPYECKDCEKAFRRGDELTQHQRFHTGEKDYECKDCGKTFSRVYKLIQHKRIHSGEKPYECKDCGKAFICGSSLVQHKRIHTGEKPYECQECGKAFTRVNYLTQHQKIHTGEKPHECKECGKAFRWGSSLVKHERIHTGEKPYKCTECGKAFNCG [...]
+chr4-04	SwissProt	protein_match	266088	266231	90.000000	-	.	Target=Q8N184-1.3 332 381 +;percentID=47;Gap=M17 I1 M6 D1 M7 I2 M17 ;sequence=MDVMLENYCHLISVGCHMTKPDVILKLERGEEPWTSFAGHTCLEENWKAEDFLVKFKEHQEKYSRSVVSINHKKLVKEKSKIYEKTFTLGKNPVNSKNLPPEYDTHGRILKNVSELIISNLNPARKRLSEYNGYGKSLLSTKQETTHPEVKSHNQSARAFSHNEVLMQYQKTETPAQSFGYNDCEKSFLQRGGLITHSRPYKGENPSVYNKKRRATNIEKKHTCNECGKSFCRKSVLILHQGIHSEEKPYQCHQCGNAFRRKSYLIDHQRTHTGEKPFVCNECGKSFRLKTALTDHQRTHTGEKSYECLQCRNAFRLKSHLIRHQRTHTGEKPYECNDCGKSFRQKTTLSLHQR [...]
+chr4-04	SwissProt	protein_match	266088	266231	91.000000	-	.	Target=Q96SE7.1 595 644 +;percentID=49;Gap=M17 I1 M6 D1 M8 I2 M16 ;sequence=MALTQGQVTFRDVAIEFSQEEWTCLDPAQRTLYRDVMLENYRNLASLGISCFDLSIISMLEQGKEPFTLESQVQIAGNPDGWEWIKAVITALSSEFVMKDLLHKGKSNTGEVFQTVMLERQESQDIEGCSFREVQKNTHGLEYQCRDAEGNYKGVLLTQEGNLTHGRDEHDKRDARNKLIKNQLGLSLQSHLPELQLFQYEGKIYECNQVEKSFNNNSSVSPPQQMPYNVKTHISKKYLKDFISSLLLTQGQKANNWGSPYKSDGCGMVFPQNSHLASHQRSHTKEKPYKCYECGKAFRTRSNLTTHQVIHTGEKRYKCNECGKVFSRNSQLSQHQKIHTGEKPYKCNECGKVFTQ [...]
+chr4-04	SwissProt	protein_match	266088	266231	91.000000	-	.	Target=A2T812.1 527 576 +;percentID=48;Gap=M13 I2 M9 D2 M8 I2 M16 ;sequence=MNSSSRSQILLRWKSDKAQSGPYNVEKEILTSRFLRDTETCRQNFRNFPYPDLAGPRKALSQLRELCLKWLRPEIHSKEQILELLVLEQFLTILPGEVRTWVKSQYPESSEEAVTLVEDLTQILEEEAPQNSTLSQDTPEEDPRGKHAFQTGWLNDLVTKESMTFKDVAVDITQEDWELMRPVQKELYKTVTLQNYWNMVSLGLTVYRPTVIPILEEPWMVIKEILEGPSPEWETKAQACTPVEDMSKLTKEETQTIKLEDSYDYDDRLERRATGGFWKIHTNERGFSLKSALSQEYDPTEECLSKYDIYRNNFEKHSNLIVQFDTQLDNKTSVYNEGRATFNHVSYGIVHRKILP [...]
+chr4-04	SwissProt	protein_match	266088	266231	91.000000	-	.	Target=Q9HBT7.1 527 576 +;percentID=48;Gap=M13 I2 M9 D2 M8 I2 M16 ;sequence=MNSSSRSQILLRWKSDKAQSGPYNVEKEILTSRFLRDTETCRQNFRNFPYPDLAGPRKALSQLRELCLKWLRPEIHSKEQILELLVLEQFLTILPGEVRTWVKSQYPESSEEAVTLVEDLTQILEEEAPQNSTLSQDTPEEDPRGKHAFQTGWLNDLVTKESMTFKDVAVDITQEDWELMRPVQKELYKTVTLQNYWNMVSLGLTVYRPTVIPILEEPWMVIKEILEGPSPEWETKAQACTPVEDMSKLTKEETHTIKLEDSYDYDDRLERRGKGGFWKIHTDERGFSLKSVLSQEYDPTEECLSKYDIYRNNFEKHSNLIVQFDTQLDNKTSVYNEGRATFNHVSYGIVHRKILP [...]
+chr4-04	SwissProt	protein_match	266088	266225	91.000000	-	.	Target=Q8TAU3.1 380 427 +;percentID=43;Gap=M29 I2 M17 ;sequence=MAAAAPRRPTQQGTVTFEDVAVNFSQEEWCLLSEAQRCLYRDVMLENLALISSLGCWCGSKDEEAPCKQRISVQRESQSRTPRAGVSPKKAHPCEMCGLILEDVFHFADHQETHHKQKLNRSGACGKNLDDTAYLHQHQKQHIGEKFYRKSVREASFVKKRKLRVSQEPFVFHEFGKDVLPSSGLCQEAAAVEKTDSETMHGPPFQEGKTNYSCGKRTKAFSTKHSVIPHQKLFTRDGCYVCSDCGKSFSRYVSFSNHQRDHTAKGPYDCGECGKSYSRKSSLIQHQRVHTGKTAYPCEECGKSFSQKGSLISHQLVHTGERPYECREYGKSFGQKGNLIQHQQGHTGERAYHCGECGKSFRQKFCFI [...]
+chr4-04	SwissProt	protein_match	266088	266231	91.000000	-	.	Target=Q3KNS6.1 266 315 +;percentID=47;Gap=M12 D1 M11 I1 M7 I2 M17 ;sequence=MPHSPLISIPHVWCHPEEEERMHDELLQAVSKGPVMFRDVSIDFSQEEWECLDADQMNLYKEVMLENFSNLVSVGLSNSKPAVISLLEQGKEPWMVDRELTRGLCSDLESMCETKILSLKKRHFSQVIITREDMSTFIQPTFLIPPQKTMSEEKPWECKICGKTFNQNSQFIQHQRIHFGEKHYESKEYGKSFSRGSLVTRHQRIHTGKKPYECKECGKAFSCSSYFSQHQRIHTGEKPYECKECGKAFKYCSNLNDHQRIHTGEKPYECKVCGKAFTKSSQLFLHLRIHTGEKPYECKECGKAFTQHSRLIQHQRMHTGEKPYECKQCGKAFNSASTLTNHHRIHAGEKLYECE [...]
+chr4-04	SwissProt	protein_match	266088	266231	91.000000	-	.	Target=Q08AN1.2 519 568 +;percentID=49;Gap=M17 I1 M6 D1 M8 I2 M16 ;sequence=MATQGHLTFKDVAIEFSQEEWKCLEPVQKALYKDVMLENYRNLVFLGISPKCVIKELPPTENSNTGERFQTVALERHQSYDIENLYFREIQKHLHDLEFQWKDGETNDKEVPVPHENNLTGKRDQHSQGDVENNHIENQLTSNFESRLAELQKVQTEGRLYECNETEKTGNNGCLVSPHIREKTYVCNECGKAFKASSSLINHQRIHTTEKPYKCNECGKAFHRASLLTVHKVVHTRGKSYQCDVCGKIFRKNSYFVRHQRSHTGQKPYICNECGKSFSKSSHLAVHQRIHTGEKPYKCNLCGKSFSQRVHLRLHQTVHTGERPFKCNECGKTFKRSSNLTVHQVIHAGKKPYKCD [...]
+chr4-04	SwissProt	protein_match	266088	266225	92.000000	-	.	Target=Q8BQC8.1 370 417 +;percentID=45;Gap=M30 I2 M16 ;sequence=MSRSKGPLSFKDVAVAFSQEEWQQLDPEERTTYRDVMLETYSNLVSVGYDVTKPNMIIKLEQGEEPWTVEGDRHAQRHLEISKVYDPREGIEEIGEKHLQCDDDPYCWRAEKGAAFDEAYTLETALISPSSGAHSCVSCGETLESVSELISSDGSYALEKPSMCFECGKAYGESLEDFNQDEGNSSQHDENILQKVTILEKPFAYECMEALDSESVFMARERAYMGEKPYDWGDSGPDFIQMSDFSTYPRSQMELKPFECTQCGKSFCKKSKFIIHQRAHTGEKPYACSVCGKSFSQKGTLTVHRRSHLEEKPYKCNECGKTFCQKLHLTQHQRTHSGEKPYECSECGKSFCQKTHLTLHQRNHSGER [...]
+chr4-04	SwissProt	protein_match	266088	266225	92.000000	-	.	Target=Q8BQC8-2.1 369 416 +;percentID=45;Gap=M30 I2 M16 ;sequence=MSLQGPLSFKDVAVAFSQEEWQQLDPEERTTYRDVMLETYSNLVSVGYDVTKPNMIIKLEQGEEPWTVEGDRHAQRHLEISKVYDPREGIEEIGEKHLQCDDDPYCWRAEKGAAFDEAYTLETALISPSSGAHSCVSCGETLESVSELISSDGSYALEKPSMCFECGKAYGESLEDFNQDEGNSSQHDENILQKVTILEKPFAYECMEALDSESVFMARERAYMGEKPYDWGDSGPDFIQMSDFSTYPRSQMELKPFECTQCGKSFCKKSKFIIHQRAHTGEKPYACSVCGKSFSQKGTLTVHRRSHLEEKPYKCNECGKTFCQKLHLTQHQRTHSGEKPYECSECGKSFCQKTHLTLHQRNHSGE [...]
+chr4-04	SwissProt	protein_match	266088	266231	92.000000	-	.	Target=A6NF35.2 492 541 +;percentID=40;Gap=M32 I2 M16 ;sequence=MAAAATLRLSAQGTVTFEDVAVNFTWEEWNLLSEAQRCLYRDVTLENLALISSLGCWCGVEDEAAPSKQSIYIQRETQVRTPMAGVSPKKAHPCEMCGPILGDILHVADHQGTHHKQKLHRCEAWGNKLYDSGNFHQHQNEHIGEKPYRGSVEEALFAKRCKLHVSGESSVFSESGKDFLPRSGLLQQEASHTGEKSNSKTECVSPIQCGGAHYSCGESMKHFSTKHILSQHQRLLTREECYVCCECGKSFSKYASFSNHQRVHTDKKHYECGECGKSFSQKSSLIQHQRFHTGEKPYGCEECGKSFSHKRSLVHHQRVHSGERPYQCGECGKSFSQKGNLVLHQRVHTGARPYECGECGKSFSHKRS [...]
+chr4-04	SwissProt	protein_match	266088	266240	92.000000	-	.	Target=P17040-2.3 639 691 +;percentID=39;Gap=M35 I2 M16 ;sequence=MAMALELQAQASPQPEPEELLIVKLELLVLEQFLTILPREVQTWVQARHPESGEEAVALVEDWHRETRTAGQSGLELHTEETRPLKTGEEAQSFQLQPVDPWPEGQSQKKGVKNTCPDLPNHLNAEVAPQPLKESAVLTPRVPTLPKMGSVGDWEVTAESQEALGPGKHAEKELCKDPPGDDCGNSVCLGVPVSKPSNTSEKEQGPEFWGLSLINSGKRSTADYSLDNEPAQALTWRDSRAWEEQYQWDVEDMKVSGVHWGYEETKTFLAILSESPFSEKLRTCHQNRQVYRAIAEQLRARGFLRTLEQCRYRVKNLLRNYRKAKSSHPPGTCPFYEELEALVRARTAIRATDGPGEAVALPRLGY [...]
+chr4-04	SwissProt	protein_match	266088	266231	92.000000	-	.	Target=Q86UE3.2 383 432 +;percentID=44;Gap=M31 I2 M17 ;sequence=MQVDPPLHGPPNDFLIFQIIPLHSLSIMPRFLWILCFSMEETQGELTSSCGSKTMANVSLAFRDVSIDLSQEEWECLDAVQRDLYKDVMLENYSNLVSLGYTIPKPDVITLLEQEKEPWIVMREGTRNWFTDLEYKYITKNLLSEKNVCKIYLSQLQTGEKSKNTIHEDTIFRNGLQCKHEFERQERHQMGCVSQMLIQKQISHPLHPKIHAREKSYECKECRKAFRQQSYLIQHLRIHTGERPYKCMECGKAFCRVGDLRVHHTIHAGERPYECKECGKAFRLHYHLTEHQRIHSGVKPYECKECGKAFSRVRDLRVHQTIHAGERPYECKECGKAFRLHYQLTEHQRIHTGERPYECKVCGKTFRV [...]
+chr4-04	SwissProt	protein_match	266088	266231	93.000000	-	.	Target=P51814-6.2 381 430 +;percentID=42;Gap=M32 I2 M16 ;sequence=MAANGDSPPWSPALAAEGRGSSCEASVSFEDVTVDFSKEEWQHLDPAQRRLYWDVTLENYSHLLSVGYQIPKSEAAFKLEQGEGPWMLEGEAPHQSCSGEAIGKMQQQGIPGGIFFHCERFDQPIGEDSLCSILEELWQDNDQLEQRQENQNNLLSHVKVLIKERGYEHKNIEKIIHVTTKLVPSIKRLHNCDTILKHTLNSHNHNRNSATKNLGKIFGNGNNFPHSPSSTKNENAKTGANSCEHDHYEKHLSHKQAPTHHQKIHPEEKLYVCTECVMGFTQKSHLFEHQRIHAGEKSRECDKSNKVFPQKPQVDVHPSVYTGEKPYLCTQCGKVFTLKSNLITHQKIHTGQKPYKCSECGKAFFQ [...]
+chr4-04	SwissProt	protein_match	266088	266231	93.000000	-	.	Target=P51814.2 423 472 +;percentID=42;Gap=M32 I2 M16 ;sequence=MAANGDSPPWSPALAAEGRGSSCEVRRERTPEARIHSVKRYPDLSPGPKGRSSADHAALNSIVSLQASVSFEDVTVDFSKEEWQHLDPAQRRLYWDVTLENYSHLLSVGYQIPKSEAAFKLEQGEGPWMLEGEAPHQSCSGEAIGKMQQQGIPGGIFFHCERFDQPIGEDSLCSILEELWQDNDQLEQRQENQNNLLSHVKVLIKERGYEHKNIEKIIHVTTKLVPSIKRLHNCDTILKHTLNSHNHNRNSATKNLGKIFGNGNNFPHSPSSTKNENAKTGANSCEHDHYEKHLSHKQAPTHHQKIHPEEKLYVCTECVMGFTQKSHLFEHQRIHAGEKSRECDKSNKVFPQKPQVDVHPSVYTGEKP [...]
+chr4-04	SwissProt	protein_match	266088	266231	93.000000	-	.	Target=P51814-5.2 415 464 +;percentID=42;Gap=M32 I2 M16 ;sequence=MAANGDSPPWSPALAAEGRGSSCEVRRERTPEARIHSVKRYPDLSPGPKGRSSIVSLQASVSFEDVTVDFSKEEWQHLDPAQRRLYWDVTLENYSHLLSVGYQIPKSEAAFKLEQGEGPWMLEGEAPHQSCSGEAIGKMQQQGIPGGIFFHCERFDQPIGEDSLCSILEELWQDNDQLEQRQENQNNLLSHVKVLIKERGYEHKNIEKIIHVTTKLVPSIKRLHNCDTILKHTLNSHNHNRNSATKNLGKIFGNGNNFPHSPSSTKNENAKTGANSCEHDHYEKHLSHKQAPTHHQKIHPEEKLYVCTECVMGFTQKSHLFEHQRIHAGEKSRECDKSNKVFPQKPQVDVHPSVYTGEKPYLCTQC [...]
+chr4-04	SwissProt	protein_match	266088	266231	93.000000	-	.	Target=P51814-2.2 383 432 +;percentID=42;Gap=M32 I2 M16 ;sequence=MGTLPHGPRPWLQRDVAAHVSIVSLQASVSFEDVTVDFSKEEWQHLDPAQRRLYWDVTLENYSHLLSVGYQIPKSEAAFKLEQGEGPWMLEGEAPHQSCSGEAIGKMQQQGIPGGIFFHCERFDQPIGEDSLCSILEELWQDNDQLEQRQENQNNLLSHVKVLIKERGYEHKNIEKIIHVTTKLVPSIKRLHNCDTILKHTLNSHNHNRNSATKNLGKIFGNGNNFPHSPSSTKNENAKTGANSCEHDHYEKHLSHKQAPTHHQKIHPEEKLYVCTECVMGFTQKSHLFEHQRIHAGEKSRECDKSNKVFPQKPQVDVHPSVYTGEKPYLCTQCGKVFTLKSNLITHQKIHTGQKPYKCSECGKAF [...]
+chr4-04	SwissProt	protein_match	266088	266231	93.000000	-	.	Target=P51814-4.2 295 344 +;percentID=42;Gap=M32 I2 M16 ;sequence=MLEGEAPHQSCSGEAIGKMQQQGIPGGIFFHCERFDQPIGEDSLCSILEELWQDNDQLEQRQENQNNLLSHVKVLIKERGYEHKNIEKIIHVTTKLVPSIKRLHNCDTILKHTLNSHNHNRNSATKNLGKIFGNGNNFPHSPSSTKNENAKTGANSCEHDHYEKHLSHKQAPTHHQKIHPEEKLYVCTECVMGFTQKSHLFEHQRIHAGEKSRECDKSNKVFPQKPQVDVHPSVYTGEKPYLCTQCGKVFTLKSNLITHQKIHTGQKPYKCSECGKAFFQRSDLFRHLRIHTGEKPYECSECGKGFSQNSDLSIHQKTHTGEKHYECNECGKAFTRKSALRMHQRIHTGEKPYVCADCGKAFIQKS [...]
+chr4-04	SwissProt	protein_match	266088	266231	93.000000	-	.	Target=P51814-3.2 391 440 +;percentID=42;Gap=M32 I2 M16 ;sequence=MGTLPHGPRPWLQRDVAAHVSADHAALNSIVSLQASVSFEDVTVDFSKEEWQHLDPAQRRLYWDVTLENYSHLLSVGYQIPKSEAAFKLEQGEGPWMLEGEAPHQSCSGEAIGKMQQQGIPGGIFFHCERFDQPIGEDSLCSILEELWQDNDQLEQRQENQNNLLSHVKVLIKERGYEHKNIEKIIHVTTKLVPSIKRLHNCDTILKHTLNSHNHNRNSATKNLGKIFGNGNNFPHSPSSTKNENAKTGANSCEHDHYEKHLSHKQAPTHHQKIHPEEKLYVCTECVMGFTQKSHLFEHQRIHAGEKSRECDKSNKVFPQKPQVDVHPSVYTGEKPYLCTQCGKVFTLKSNLITHQKIHTGQKPYK [...]
+chr4-04	SwissProt	protein_match	266088	266231	93.000000	-	.	Target=P51814-7.2 347 396 +;percentID=42;Gap=M32 I2 M16 ;sequence=MGTLPHGPRPWLQRDVAAHVSIVSLQASVSFEDVTVDFSKEEWQHLDPAQRRLYWDVTLENYSHLLSVGYQIPKSEAAFKLEQGEGPWMLEGEAPHQSCSEELWQDNDQLEQRQENQNNLLSHVKVLIKERGYEHKNIEKIIHVTTKLVPSIKRLHNCDTILKHTLNSHNHNRNSATKNLGKIFGNGNNFPHSPSSTKNENAKTGANSCEHDHYEKHLSHKQAPTHHQKIHPEEKLYVCTECVMGFTQKSHLFEHQRIHAGEKSRECDKSNKVFPQKPQVDVHPSVYTGEKPYLCTQCGKVFTLKSNLITHQKIHTGQKPYKCSECGKAFFQRSDLFRHLRIHTGEKPYECSECGKGFSQNSDLSI [...]
+chr4-04	SwissProt	protein_match	266088	266231	93.000000	-	.	Target=P51814-8.2 345 394 +;percentID=42;Gap=M32 I2 M16 ;sequence=MAANGDSPPWSPALAAEGRGSSCEASVSFEDVTVDFSKEEWQHLDPAQRRLYWDVTLENYSHLLSVGYQIPKSEAAFKLEQGEGPWMLEGEAPHQSCSEELWQDNDQLEQRQENQNNLLSHVKVLIKERGYEHKNIEKIIHVTTKLVPSIKRLHNCDTILKHTLNSHNHNRNSATKNLGKIFGNGNNFPHSPSSTKNENAKTGANSCEHDHYEKHLSHKQAPTHHQKIHPEEKLYVCTECVMGFTQKSHLFEHQRIHAGEKSRECDKSNKVFPQKPQVDVHPSVYTGEKPYLCTQCGKVFTLKSNLITHQKIHTGQKPYKCSECGKAFFQRSDLFRHLRIHTGEKPYECSECGKGFSQNSDLSIHQ [...]
+chr4-04	SwissProt	protein_match	266088	266231	93.000000	-	.	Target=Q5R5Q6.1 527 576 +;percentID=42;Gap=M31 I2 M17 ;sequence=MPHLLVTFRDVAIDFTQEEWECLDPAQRDLYRDVMLENYSNLISLDLESSCATKKLSPEKEIYEMESLQWENIGNLINHHLQYGLGDNMECKGNLEGQEASQEGLYMCVKITCEEKATESHSTSSTFHRMIPTKEKLYKCKECRQGFSYLSCLIQHEKNHNIEKCSEVKKHRNTFSKKPSYIQHQRIQTGEKPYECMECGKAFGRSSDLIQHQKIHTNEKPYQCNACGKAFIRGSQLTEHQRVHTGEKPYECKKCGKAFSYCSQYTLHQRIHSGEKPYECKDCGKAFILGSQLTYHQRIHSGEKPYECKECGKAFILGSHLTYHQRVHTGEKPYICKECGKAFLCASQLNEHQRIHTGEKPYECKECG [...]
+chr4-04	SwissProt	protein_match	266088	266231	93.000000	-	.	Target=Q06732-2.2 467 516 +;percentID=42;Gap=M32 I2 M16 ;sequence=MLTKEQGNVIGIPFNMDVSSFPSRKMFCQYDSRGMSFNTVSELVISKINYLGKKSDEFNACGKLLLNIKHDETHTREKNEVLKNRNTLSHRENTLQHEKIQTLDHNFEYSICQETLLEKAVFNTRKRENAEENNCDYNEFGRTFCDSSSLLFHQIPPSKDSHYEFSDCEKFLCVKSTLSKHDGVPVKHYDCGESGNNFRRKLCLSQLQKGDKGEKHFECNECGKAFWEKSHLTRHQRVHTGEKHFQCNQCGKTFWEKSNLTKHQRSHTGEKPFECNECGKAFSHKSALTLHQRTHTGEKPYQCNACGKTFYQKSDLTKHQRTHTGQKPYECYECGKSFCMNSHLTVHQRTHTGEKPFECLECGKSF [...]
+chr4-04	SwissProt	protein_match	266088	266231	93.000000	-	.	Target=P08042-2.3 195 244 +;percentID=44;Gap=M32 I2 M16 ;sequence=MMGSQEEWEQLDPSQRILYMDVMLENYSNLLSVEVWKADGQVERDPRDLQRQVGSLTTIKNQPPTEERGSRFGKTLTLNTDFVSLRQVPYKYDLYEKTLKYNSDLLSSRNCVRKKGDGCGGFGEPLLYLKQEKPHAGLEYSEYNGNGRALSHKDAIFKHRKIKSLVQPFVCNYCDKTFSFKSLLVSHKRIHTGEKPYECDVCQKTFSHKANLIKHQRIHTGEKPFECPECGKAFTHQSNLIVHQRAHMEKKPYGCSECGKTFAQKFELTTHQRIHTGERPYECNECAKTFFKKSNLIIHQKIHTGEKRYECSECGKSFIQNSQLIIHRRTHTGEKPYECTECGKTFSQRSTLRLHLRIRTGEKPYE [...]
+chr4-04	SwissProt	protein_match	266088	266231	93.000000	-	.	Target=P08042.3 208 257 +;percentID=44;Gap=M32 I2 M16 ;sequence=MGSQGSVSFTDVTVDFTQEEWEQLDPSQRILYMDVMLENYSNLLSVEVWKADGQVERDPRDLQRQVGSLTTIKNQPPTEERGSRFGKTLTLNTDFVSLRQVPYKYDLYEKTLKYNSDLLSSRNCVRKKGDGCGGFGEPLLYLKQEKPHAGLEYSEYNGNGRALSHKDAIFKHRKIKSLVQPFVCNYCDKTFSFKSLLVSHKRIHTGEKPYECDVCQKTFSHKANLIKHQRIHTGEKPFECPECGKAFTHQSNLIVHQRAHMEKKPYGCSECGKTFAQKFELTTHQRIHTGERPYECNECAKTFFKKSNLIIHQKIHTGEKRYECSECGKSFIQNSQLIIHRRTHTGEKPYECTECGKTFSQRSTLRLH [...]
+chr4-04	SwissProt	protein_match	266088	266231	94.000000	-	.	Target=Q6PG37.1 252 301 +;percentID=49;Gap=M17 I1 M6 D1 M7 I2 M17 ;sequence=MAHLMMFRDVAVDFSQEEWECLDLEQRDLYRDVMLENYSNMVSLGFCIYQPEAFSLLEKGKEPWKILRDETRGPCPDMQSRCQTKKLLPKNGIFEREIAQLEIMRICKNHSLDCLCFRGDWEGNTQFQTLQDNQEECFKQVIRTCEKRPTFNQHTVFNLHQRLNTGDKLNEFKELGKAFISGSDHTQHQLIHTSEKFCGDKECGNTFLPDSEVIQYQTVHTVKKTYECKECGKSFSLRSSLTGHKRIHTGEKPFKCKDCGKAFRFHSQLSVHKRIHTGEKSYECKECGKAFSCGSDLTRHRRIHTGEKPYECNECRKAFSQRSHLIKHQRIHTGEKPYECKECGKAFTRGSHLTQH [...]
+chr4-04	SwissProt	protein_match	266088	266231	94.000000	-	.	Target=O75123.1 177 226 +;percentID=42;Gap=M32 I2 M16 ;sequence=MILLSFVSDSNVGTGEKKVTEAWISEDENSHRTTSDRLTVMELPSPESEEVHEPRLGELLGNPEGQSLGSSPSQDRGCKQVTVTHWKIQTGETAQVCTKSGRNHILNSDLLLLQRELIEGEANPCDICGKTFTFNSDLVRHRISHAGEKPYTCDQCGKGFGQSSHLMEHQRIHTGERLYVCNVCGKDFIHYSGLIEHQRVHSGEKPFKCAQCGKAFCHSSDLIRHQRVHTRERPFECKECGKGFSQSSLLIRHQRIHTGERPYECNECGKSFIRSSSLIRHYQIHTEVKQYECKECGKAFRHRSDLIEHQRIHTGERPFECNECGKAFIRSSKLIQHQRIHTGERPYVCNECGKRFSQTSNFTQHQRI [...]
+chr4-04	SwissProt	protein_match	266088	266231	94.000000	-	.	Target=P17027.3 334 383 +;percentID=44;Gap=M31 I2 M17 ;sequence=MLENYGNVASLGFPLLKPAVISQLEGGSELGGSSPLAAGTGLQGLQTDIQTDNDLTKEMYEGKENVSFELQRDFSQETDFSEASLLEKQQEVHSAGNIKKEKSNTIDGTVKDETSPVEECFFSQSSNSYQCHTITGEQPSGCTGLGKSISFDTKLVKHEIINSEERPFKCEELVEPFRCDSQLIQHQENNTEEKPYQCSECGKAFSINEKLIWHQRLHSGEKPFKCVECGKSFSYSSHYITHQTIHSGEKPYQCKMCGKAFSVNGSLSRHQRIHTGEKPYQCKECGNGFSCSSAYITHQRVHTGEKPYECNDCGKAFNVNAKLIQHQRIHTGEKPYECNECGKGFRCSSQLRQHQSIHTGEKPYQCKE [...]
+chr4-04	SwissProt	protein_match	266088	266231	94.000000	-	.	Target=Q8TAQ5.1 557 606 +;percentID=46;Gap=M31 I2 M17 ;sequence=MARKLVMFRDVAIDFSQEEWECLDSAQRDLYRDVMLENYSNLVSLDLPSRCASKDLSPEKNTYETELSQWEMSDRLENCDLEESNSRDYLEAKGKMEKQQENQKEYFRQGMIIYDKMSIFNQHTYLSQHSRCHSTEKPYKCKECGKAFRRASHLTQHQSIHTGEKPYECKQCGKAFSRDSQLSLHQRLHTGEKPYACKECGKAFTQSSQLILHHRIHTGEKPYKCEECGKAFIRSSQLTRHQKVHTGEKPYECKECGKAFTQNSQLTLHQRLHTGEKLYECKECRKVFTQLSQLILHKRIHTGEKPYECKECGKAFICGSQLSQHQKIHNGEKPYECKECGRAFIRGSLLMQHQRIHTGEKPYKCEEC [...]
+chr4-04	SwissProt	protein_match	266088	266231	94.000000	-	.	Target=Q02386.2 414 463 +;percentID=46;Gap=M32 I2 M16 ;sequence=MTKSKEAVTFKDVAVVFSEEELQLLDLAQRKLYRDVMLENFRNVVSVGHQSTPDGLPQLEREEKLWMMKMATQRDNSSGAKNLKEMETLQEVGLRYLPHEELFCSQIWQQITRELIKYQDSVVNIQRTGCQLEKRDDLHYKDEGFSNQSSHLQVHRVHTGEKPYKGEHCVKSFSWSSHLQINQRAHAGEKPYKCEKCDNAFRRFSSLQAHQRVHSRAKSYTNDASYRSFSQRSHLPHHQRVPTGENPYKYEECGRNVGKSSHCQAPLIVHTGEKPYKCEECGVGFSQRSYLQVHLKVHTGKKPYKCEECGKSFSWRSRLQAHERIHTGEKPYKCNACGKSFSYSSHLNIHCRIHTGEKPYKCEECGKG [...]
+chr4-04	SwissProt	protein_match	266088	266231	94.000000	-	.	Target=P0C7V5.1 303 352 +;percentID=40;Gap=M31 I2 M17 ;sequence=MAVTDLSHGFFPREPICPFEEKTKIGTMVEDYLANSYQDSVTFDDVAVEFTPEEWALLDTTEKCLYRDVMLENYVNLASVEATVDGNSENCGEVFSEWFCLKTHMRAQNGGNIFEGNCYGKDILSVHKEASIGQELSKFNPCGKVFTLTPDLAAHLGILNARQPYKCKECRKGFKYFASLDNHMGIHIGEKFCEFQECRRAITHSSHLKQCVTVHTGKKSKKTKKHGKSFTNFSQLSAHVKIHKGEKSFECKECGRSFRNSSSFNVHIQIHTGIKPHKYTECGKAFTRSTHLTQHVRTHTGIKPYECKECGQAFTQYTGLAIHIRNHTGEKHYQCKECGKAFNGSSTLTQHKIIHTGEKPYGCVECGK [...]
+chr4-04	SwissProt	protein_match	266088	266231	94.000000	-	.	Target=A2VDQ7.1 556 605 +;percentID=46;Gap=M31 I2 M17 ;sequence=MAQRSVMFRDVAIDFSQEEWDCLDSAQRDLYRDVMLENYSNLVSLDLPSRGANKLLSPKKDIYETGLSQWEMSARLENCDLENSSSRDYLEVKGTLEKQQENQAYFSQGMIIYDNMSIFNQHAYLSQHPRCHSTEKPYKCKECGKAFRRASHLTQHQSIHTGEKPYECKQCGKAFSRDSQLSLHQRLHTGEKPYACKECGKAFTQSSQLILHHRIHTGEKPYKCEECGKAFIRSSQLTRHQKVHTGEKPYECKECGKAFTQNSQLTLHQRLHTGEKLYECKECRKVFTQLSQLILHKRIHTGEKPYECKECGKAFICGSQLSQHQKIHNGEKPYECQECGKAFIRGSLLMQHQRIHTGEKPYKCEECG [...]
+chr4-04	SwissProt	protein_match	266088	266231	95.000000	-	.	Target=Q86Y25.1 270 319 +;percentID=45;Gap=M14 D1 M9 I1 M8 I2 M16 ;sequence=MAVDLLSAQEPVTFRDVAVFFSQDEWLHLDSAQRALYREVMLENYSSLVSLGIPFSMPKLIHQLQQGEDPCMVEREVPSDTRLGFKTWLETEALPHRQDIFIEETSQGMVKKESIKDGHWDINFEEAVEFESEIEEEQEKKPLRQMIDSHEKTISEDGNHTSLELGKSLFTNTALVTQQSVPIERIPNMYYTFGKDFKQNFDLMKCFQIYPGGKPHICNECGKSFKQNLHLIEHQRIHTGEKPYKCNECEKTFSHRSSLLSHQRIHTGEKPYKCNECEKAFSNSSTLIKHLRVHTGEKPYRCRECGKAFSQCSTLTVHQRIHTGEKLYKCGECEKAFNCRAKLHRHQRIHTGEKPY [...]
+chr4-04	SwissProt	protein_match	266088	266231	95.000000	-	.	Target=Q8BZW4-2.1 301 350 +;percentID=45;Gap=M16 D1 M7 I1 M7 I2 M17 ;sequence=MFLLDVFCVPLLGAGTSGKPRSSDMDIVTYDDVHVNFTWEEWALLDPSQKDLYRDVMLETYRNLAAIGMKEVILKRNFLNLLNMIKTLHIRAILKGMKEFILERNPMKVSNILKDFAHHSSLQIQRRTHVVEKPYECNQCGKAFAYHSYLQRHERSHTGEKPYECNQCGKAFGRHSHLQRHERIHTGEKSYDCNQCGKTFVHHSHLQIHKRTHIGEKPFECNQCGKAFARNSHLLIHKRIHTGEKPYECKQCGKAFAYQSGLLYHKRRYTVEKLYECNQCGKAFACHNSLQVHKRTHTGEKPYKCNQCGKAFGRYSSLQRHERIHTGEKPYECKQCGKAFGRHSSLQRHERIHT [...]
+chr4-04	SwissProt	protein_match	266088	266231	95.000000	-	.	Target=Q8BZW4.1 322 371 +;percentID=45;Gap=M16 D1 M7 I1 M7 I2 M17 ;sequence=MFLLDVFCVPLLGAGTSGKPRSSDMDIVTYDDVHVNFTWEEWALLDPSQKDLYRDVMLETYRNLAAIGYYWKGHNISEGHFQNSRRNGRHERSDTEEKLSEFTQYDKDFAYQSHPQRHERIYSGEKPYEGVQYFEDFAHHSSLQIQRRTHVVEKPYECNQCGKAFAYHSYLQRHERSHTGEKPYECNQCGKAFGRHSHLQRHERIHTGEKSYDCNQCGKTFVHHSHLQIHKRTHIGEKPFECNQCGKAFARNSHLLIHKRIHTGEKPYECKQCGKAFAYQSGLLYHKRRYTVEKLYECNQCGKAFACHNSLQVHKRTHTGEKPYKCNQCGKAFGRYSSLQRHERIHTGEKPYECKQ [...]
+chr4-04	SwissProt	protein_match	266088	266222	96.000000	-	.	Target=Q9Z1D8.1 342 388 +;percentID=51;Gap=M29 I2 M16 ;sequence=MIMTESRAVIHLEPPAETSQEQADLLIVKVEEEDCSWMQGYNRPVLETFYQRFKHFQYHEAAGPRDALSQLRVLCCEWLRPELHTKEQILELLVLEQFLTILPEEFQAWVREHHPESGEEAVAVIESIQRELEERRQQIATSPEVLPQKMVPPGATQESFSHQCLPVEAQPERESQNLLEENALPALQVSSVPLKDSQELTDSLLSDGPQKLVKTEDVADVAVSFILEEWAHLDQSQKSLGRDSRKEDCESTTPVDYEPKEGNLEFTVQQVSDAADPHWVAAERTEKNGVQRPESGEVSDLKDMVPRWQVNPTSGNPRQKRPLRSGPDVNRKQKSNGERGHRCGDCGKFFLQASNFIQHRRIHTGEKP [...]
+chr4-04	SwissProt	protein_match	266088	266231	96.000000	-	.	Target=Q8NB42.1 492 541 +;percentID=44;Gap=M32 I2 M16 ;sequence=MAVGLCKAMSQGLVTFRDVALDFSQEEWEWLKPSQKDLYRDVMLENYRNLVWLDWESWCEIEELSPKWFIDEDEISQEMVMERLASHGLECSSFREAWKYKGEFELHQGNAERHFMQVTAVKEISTGKRDNEFSNSGRSIPLKSVFLTQQKVPTIQQVHKFDIYDKLFPQNSVIIEYKRLHAEKESLIGNECEEFNQSTYLSKDIGIPPGEKPYESHDFSKLLSFHSLFTQHQTTHFGKLPHGYDECGDAFSCYSFFTQPQRIHSGEKPYACNDCGKAFSHDFFLSEHQRTHIGEKPYECKECNKAFRQSAHLAQHQRIHTGEKPFACNECGKAFSRYAFLVEHQRIHTGEKPYECKECNKAFRQSAH [...]
+chr4-04	SwissProt	protein_match	266088	266231	97.000000	-	.	Target=Q15937.2 219 268 +;percentID=42;Gap=M32 I2 M16 ;sequence=MLEEGVLPSPGPALPQEENTGEEGMAAGLLTAGPRGSTFFSSVTVAFAQERWRCLVSTPRDRFKEGIPGKSRSLVLLGLPVSQPGMNSQLEQREGAWMLEGEDLRSPSPGWKIISGSPPEQALSEASFQDPCVEMPPGDSDHGTSDLEKSFNLRPVLSPQQRVPVEARPRKCETHTESFKNSEILKPHRAKPYACNECGKAFSYCSSLSQHQKSHTGEKPYECSECGKAFSQSSSLIQHQRIHTGEKPYKCSECGRAFSQNANLTKHQRTHTGEKPYRCSECEKAFSDCSALVQHQRIHTGEKPYECSDCGKAFRHSANLTNHQRTHTGEKPYKCSECGKAFSYCAAFIQHQRIHTGEKPYRCAACGK [...]
+chr4-04	SwissProt	protein_match	266088	266231	97.000000	-	.	Target=Q7TSH9.1 227 276 +;percentID=47;Gap=M18 I1 M5 D1 M8 I2 M16 ;sequence=MAGLSFADSASLHEGRPLLLPSSFRESVTFKDVVVNFTQEEWKHLDPIQRDLFRDVTLENYTHLVSIGLQVSKPDMISQLEQGTEPWTEDSCIPVGPLEDWKKRAGNSVSSLELDISEEHLFSETVVTNSKRDDGSLEKLQANQQMLPREVQITEKTAPTCESNLSVSSSFITQTEVALDQPSTKTRAKQNSHPVKKEKLCKCNECGKAFTYCSALIRHQRTHTGEKPYKCNECNKAFSRSENLINHQRIHTGDKPYKCDQCGKGFIEGPSLTQHQRIHTGEKPYKCDECGKAFSQRTHLVQHQRIHTGEKPYTCTECGKSFSQRGHFMEHQKIHTGEKPFKCEECEKTFTRSTHL [...]
+chr4-04	SwissProt	protein_match	266088	266231	98.000000	-	.	Target=Q14586.2 574 623 +;percentID=44;Gap=M31 I2 M17 ;sequence=MGLLTFRDVAVEFSLEEWEHLEPAQKNLYQDVMLENYRNLVSLGLVVSKPDLITFLEQRKEPWNVKSEETVAIQPDVFSHYNKDLLTEHCTEASFQKVISRRHGSCDLENLHLRKRWKREECEGHNGCYDEKTFKYDQFDESSVESLFHQQILSSCAKSYNFDQYRKVFTHSSLLNQQEEIDIWGKHHIYDKTSVLFRQVSTLNSYRNVFIGEKNYHCNNSEKTLNQSSSPKNHQENYFLEKQYKCKEFEEVFLQSMHGQEKQEQSYKCNKCVEVCTQSLKHIQHQTIHIRENSYSYNKYDKDLSQSSNLRKQIIHNEEKPYKCEKCGDSLNHSLHLTQHQIIPTEEKPYKWKECGKVFNLNCSLYLT [...]
+chr4-04	SwissProt	protein_match	266088	266231	98.000000	-	.	Target=Q3MIS6.1 491 540 +;percentID=48;Gap=M32 I2 M16 ;sequence=MALTQGPLKFMDVAIEFSQEEWKCLDPAQRTLYRDVMLENYRNLVSLGICLPDLSVTSMLEQKRDPWTLQSEEKIANDPDGRECIKGVNTERSSKLGSNAGNKPCKNQLGFTFQLHLSDLQLFQAERKISGCKHFEKPVSDNSSVSPLEKISSSVKSHLLNKYRNNFDHAPLLPQEQKAHIREKAYKCNEHGQVFRASASLTNQVIHNADNPYKCSECGKVFSCSSKLVIHRRMHTGEKPYKCHECGKLFSSNSNLSQHQRIHTGEKPYKCHECDKVFRSSSKLAQHQRIHTGEKPYKCHECDKVFNQIAHLVRHQKIHTGEKPYSCNKCGKVFSRHSYLAEHQTVHTGEKPYKCEECGKAFSVRSSL [...]
+chr4-04	SwissProt	protein_match	266088	266246	98.000000	-	.	Target=Q9Y2L8.1 339 393 +;percentID=47;Gap=M37 I2 M16 ;sequence=MIMTESREVIDLDPPAETSQEQEDLFIVKVEEEDCTWMQEYNPPTFETFYQRFRHFQYHEASGPREALSQLRVLCCEWLRPELHTKEQILELLVLEQFLTILPEEFQPWVREHHPESGEEAVAVIENIQRELEERRQQIVACPDVLPRKMATPGAVQESCSPHPLTVDTQPEQAPQKPRLLEENALPVLQVPSLPLKDSQELTASLLSTGSQKLVKIEEVADVAVSFILEEWGHLDQSQKSLYRDDRKENYGSITSMGYESRDNMELIVKQISDDSESHWVAPEHTERSVPQDPDFAEVSDLKGMVQRWQVNPTVGKSRQNPSQKRDLDAITDISPKQSTHGERGHRCSDCGKFFLQASNFIQHRRIH [...]
+chr4-04	SwissProt	protein_match	266088	266246	98.000000	-	.	Target=A2T7D2.1 339 393 +;percentID=47;Gap=M37 I2 M16 ;sequence=MIMTESREVIDLDPPAETSQEQEDLFIVKVEEEDCTWMQEYNPPTFETFYQRFRHFQYHEASGPREALSQLRVLCCEWLRPELHTKEQILELLVLEQFLTILPEEFQPWVREHHPESGEEAVAVIENIQRELEERRQQIVACPDVLPRKMAPPGAVQESCSPQPLTVDTQPEQAPQKPRLLEENALPVLQVPSLPLKDSQELTASLLSTGSQKLVKIEEVADVAVSFILEEWGHLDQSQKSLYRDDRKENYGSITSMGYESRDNMELIVKQISDDSESRWVAPEHTERSVPQDPDFAEVSDLKGMVQRWQVNPTVGKSRQNPSQKRDLDAITDISPKQSTHGERGHRCSDCGKFFLQASNFIQHRRIH [...]
+chr4-04	SwissProt	protein_match	266088	266231	98.000000	-	.	Target=Q06730.3 438 487 +;percentID=46;Gap=M32 I2 M16 ;sequence=MNKVEQKSQESVSFKDVTVGFTQEEWQHLDPSQRALYRDVMLENYSNLVSVGYCVHKPEVIFRLQQGEEPWKQEEEFPSQSFPVWTADHLKERSQENQSKHLWEVVFINNEMLTKEQGDVIGIPFNVDVSSFPSRKMFCQCDSCGMSFNTVSELVISKINYLGKKSDEFNACGKLLLNIKHDETHTQEKNEVLKNRNTLSHHEETLQHEKIQTLEHNFEYSICQETLLEKAVFNTQKRENAEENNCDYNEFGRTLCDSSSLLFHQISPSRDNHYEFSDCEKFLCVKSTLSKPHGVSMKHYDCGESGNNFRRKLCLSHLQKGDKGEKHFECNECGKAFWEKSHLTRHQRVHTGQKPFQCNECEKAFWDK [...]
+chr4-04	SwissProt	protein_match	266088	266231	98.000000	-	.	Target=Q8IZ26.2 424 473 +;percentID=46;Gap=M32 I2 M16 ;sequence=MAALFLSAPPQAEVTFEDVAVYLSREEWGRLGPAQRGLYRDVMLETYGNLVSLGVGPAGPKPGVISQLERGDEPWVLDVQGTSGKEHLRVNSPALGTRTEYKELTSQETFGEEDPQGSEPVEACDHISKSEGSLEKLVEQRGPRAVTLTNGESSRESGGNLRLLSRPVPDQRPHKCDICEQSFEQRSYLNNHKRVHRSKKTNTVRNSGEIFSANLVVKEDQKIPTGKKLHYCSYCGKTFRYSANLVKHQRLHTEEKPYKCDECGKAFSQSCEFINHRRMHSGEIPYRCDECGKTFTRRPNLMKHQRIHTGEKPYKCGECGKHFSAYSSLIYHQRIHTGEKPYKCNDCGKAFSDGSILIRHRRTHTGEK [...]
+chr4-04	SwissProt	protein_match	266088	266225	98.000000	-	.	Target=Q3KQV3.2 422 469 +;percentID=45;Gap=M27 I1 M1 I1 M18 ;sequence=MAAAALRDPAQGCVTFEDVTIYFSQEEWVLLDEAQRLLYCDVMLENFALIASLGLISFRSHIVSQLEMGKEPWVPDSVDMTSAMARGAYGRPGSDFCHGTEGKDLPSEHNVSVEGVAQDRSPEATLCPQKTCPCDICGLRLKDILHLAEHQTTHPRQKPFVCEAYVKGSEFSANLPRKQVQQNVHNPIRTEEGQASPVKTCRDHTSDQLSTCREGGKDFVATAGFLQCEVTPSDGEPHEATEGVVDFHIALRHNKCCESGDAFNNKSTLVQHQRIHSRERPYECSKCGIFFTYAADLTQHQKVHNRGKPYECCECGKFFSQHSSLVKHRRVHTGESPHVCGDCGKFFSRSSNLIQHKRVHTG [...]
+chr4-04	SwissProt	protein_match	266088	266225	98.000000	-	.	Target=Q3KQV3-2.2 355 402 +;percentID=45;Gap=M27 I1 M1 I1 M18 ;sequence=MGKEPWVPDSVDMTSAMARGAYGRPGSDFCHGTEGKDLPSEHNVSVEGVAQDRSPEATLCPQKTCPCDICGLRLKDILHLAEHQTTHPRQKPFVCEAYVKGSEFSANLPRKQVQQNVHNPIRTEEGQASPVKTCRDHTSDQLSTCREGGKDFVATAGFLQCEVTPSDGEPHEATEGVVDFHIALRHNKCCESGDAFNNKSTLVQHQRIHSRERPYECSKCGIFFTYAADLTQHQKVHNRGKPYECCECGKFFSQHSSLVKHRRVHTGESPHVCGDCGKFFSRSSNLIQHKRVHTGEKPYECSDCGKFFSQRSNLIHHKRVHTGRSAHECSECGKSFNCNSSLIKHWRVHTGERPYKCNEC [...]
+chr4-04	SwissProt	protein_match	266088	266231	99.000000	-	.	Target=Q5REN4.1 349 398 +;percentID=48;Gap=M32 I2 M16 ;sequence=MNKSQEQVSFKDVCVDFTQEEWYLLDPAQKILYRDVILENYSNLVSVGYCITKPEVIFKIEQGEEPWILEKGFPSQDPERKWKVDDMLESSQENEDDHFWELLFHNNKTVSVENGDRGSKTFNLGTDPVSLRNYPYKICDSCEMSLKNISGLIISKKSCSRKKPDEFNVCEKLLLDIRHEKIPIGEKSYKYDQKRNAINYHQDLSQPSFGQSFEYSKNGQGFHDEAAFFTNKRSQIGETVCKYNECGRTFIESLKLNISQRPHLEMEPYGCSICGKSFCMNLRFGHQRALTKDNPYEYNEYGEIFCDNSAFIIHQGAYTRKILREYKVSDKTWEKSTVLKHQIVHMGGKSYDYNENGSNFSKKSHLTQ [...]
+chr4-04	SwissProt	protein_match	266088	266231	99.000000	-	.	Target=Q8NDW4.1 350 399 +;percentID=48;Gap=M32 I2 M16 ;sequence=MNKSQEQVSFKDVCVDFTQEEWYLLDPAQKILYRDVILENYSNLVSVGYCITKPEVIFKIEQGEEPWILEKGFPSQCHPERKWKVDDVLESSQENEDDHFWELLFHNNKTVSVENGDRGSKTFNLGTDPVSLRNYPYKICDSCEMNLKNISGLIISKKNCSRKKPDEFNVCEKLLLDIRHEKIPIGEKSYKYDQKRNAINYHQDLSQPSFGQSFEYSKNGQGFHDEAAFFTNKRSQIGETVCKYNECGRTFIESLKLNISQRPHLEMEPYGCSICGKSFCMNLRFGHQRALTKDNPYEYNEYGEIFCDNSAFIIHQGAYTRKILREYKVSDKTWEKSALLKHQIVHMGGKSYDYNENGSNFSKKSHLT [...]
+chr4-04	SwissProt	protein_match	266088	266237	99.000000	-	.	Target=Q9UJW8.2 349 400 +;percentID=44;Gap=M34 I2 M16 ;sequence=MRACAGSTREAGSGAQDLSTLLCLEESMEEQDEKPPEPPKACAQDSFLPQEIIIKVEGEDTGSLTIPSQEGVNFKIVTVDFTREEQGTWNPAQRTLDRDVILENHRDLVSWDLATAVGKKDSTSKQRIFDEEPANGVKIERFTRDDPWLSSCEEVDDCKDQLEKQQEKQEILLQEVAFTQRKAVIHERVCKSDETGEKSGLNSSLFSSPVIPIRNHFHKHVSHAKKWHLNAAVNSHQKINENETLYENNECGKPPQSIHLIQFTRTQTKDKCYGFSDRIQSFCHGTPLHIHEKIHGGGKTFDFKECGQVLNPKISHNEQQRIPFEESQYKCSETSHSSSLTQNMRNNSEEKPFECNQCGKSFSWSSHL [...]
+chr4-04	SwissProt	protein_match	266088	266231	99.000000	-	.	Target=P17097.1 439 488 +;percentID=46;Gap=M32 I2 M16 ;sequence=MEVVTFGDVAVHFSREEWQCLDPGQRALYREVMLENHSSVAGLAGFLVFKPELISRLEQGEEPWVLDLQGAEGTEAPRTSKTDSTIRTENEQACEDMDILKSESYGTVVRISPQDFPQNPGFGDVSDSEVWLDSHLGSPGLKVTGFTFQNNCLNEETVVPKTFTKDAPQGCKELGSSGLDCQPLESQGESAEGMSQRCEECGKGIRATSDIALHWEINTQKISRCQECQKKLSDCLQGKHTNNCHGEKPYECAECGKVFRLCSQLNQHQRIHTGEKPFKCTECGKAFRLSSKLIQHQRIHTGEKPYRCEECGKAFGQSSSLIHHQRIHTGERPYGCRECGKAFSQQSQLVRHQRTHTGERPYPCKECG [...]
+chr4-04	SwissProt	protein_match	266088	266231	99.000000	-	.	Target=Q5RBX0.1 439 488 +;percentID=46;Gap=M32 I2 M16 ;sequence=MEVVTFGDVAVHFSREEWQCLDPGQRALYREVMLENHSSVAGLAGFLVFKPELISRLEQGEEPWVLDLQGAEGTEAPRTSKTDSTIRTENEQACEDMDILKSESYGTVVRISPQDFPQNPGFGDVSDSEVWLDSHLGSPGLKVTGFTFQNNCLNEETVVPKTFTKDAPQGCKELGSSGLDCQPLESQGESAEGMSQRCEECGKGIRATSDIALHWEINTQKISRCQECQKKLSDCLQGKHTNNCHGEKPYECAECGKVFRLCSQLNQHQRIHTGEKPFKCTECGKAFRLSSKLIQHQRIHTGEKPYRCEECGKAFGQSSSLIHHQRIHTGERPYGCRECGKAFSQQSQLVRHQRTHTGERPYPCKECG [...]
+chr4-04	SwissProt	protein_match	266088	266231	99.000000	-	.	Target=P16374.2 482 531 +;percentID=42;Gap=M31 I2 M17 ;sequence=MANSSSQHMVCGSVTFRDVAVDFSQEEWACLDATQKVLYRNIMLETYSNLVAVVGRCIPKPDLIVLLEPEKEPWMAVKKETGRPSQGLETGFEAENRSPKNHVYNKKLPKQTIQQLSKTSDVQGVSVSNGPGYSVIKEPQNYQEGDANRNITNKKEMSTYTSKTLAHNKEKPYKCKDCGKCFGCKSNLHQHESIHTGEKPYECKDCGKTFRLPQMLSRHQKSHSDERPFECNICGKSFHLPTLLQYHKNIHTGLKPFECEECGKSFKSFNRISTLFQHRTIHAGMKPYKCNVCGKAFNRRSNLLQHQKIHSEDRPFHCKVCGKAFTVLAQLTRHENIHTEDKSFECKQCGKIFSNGSYLLRHYDTHTN [...]
+chr4-04	SwissProt	protein_match	266088	266231	100.000000	-	.	Target=Q6ZNG0.1 306 355 +;percentID=44;Gap=M31 I2 M17 ;sequence=MFQTAWRQEPVTFEDVAVYFTQNEWASLDSVQRALYREVMLENYANVASLAFPFTTPVLVSQLEQGELPWGLDPWEPMGREALRGICPGDEARTEKEGLTPKDHVSKETESFRLMVGGLPGNVSQHLDFGSSLEQPQGHWIIKTKSKRRHFTDTSARHHEAYEVKNGEKFEKLGKNISVSTQLTTNQTNPSGQISYECGQCGRYFIQMADFHRHEKCHTGEKSFECKECGKYFRYNSLLIRHQIIHTGKKPFKCKECGKGLSSDTALIQHQRIHTGEKPYECKECGKAFSSSSVFLQHQRFHTGEKLYECNECWKTFSCSSSFTVHQRMHTGEKPYECKECGKRLSSNTALTQHQRIHTGEKPFECK [...]
+chr4-04	SwissProt	protein_match	266088	266231	100.000000	-	.	Target=Q5RB33.1 306 355 +;percentID=44;Gap=M31 I2 M17 ;sequence=MFQTAWRQEPVTFEDVAVYFTQNEWASLDSVQRALYREVMLENYANVASLAFPFTTPVLVSQLEQGELPWGLDPWEPMGREALRGICPGDEARTEKEGLTPKDHVFKETESFRLMVGELPGNVSQHLDFGSSLEQPQGHWIIKTKSKRRHFTDTSARHHEAYAVKNGEKFEKLGKNISVSTQLTTNQTNPSGQISYECGQRGRYFIRMADFHRHQKCHTGEKSFECKECGKDFRYNSLLIRHQIIHTGKKPFKCKECGKGLSSDTALIQHQRIHTGEKPYECKECGKAFSSSSVFLQHQRFHTGEKLYECNECWKTFSCSSSFTVHQRMHTGEKPYECKECGKRLSSNTALTQHQRIHTGEKPFECK [...]
+chr4-04	SwissProt	protein_match	266088	266231	100.000000	-	.	Target=A2VDP4.1 503 552 +;percentID=46;Gap=M31 I2 M17 ;sequence=MAQGSVSFKDVTVDFSQEEWQHLDPAQKTLYMDVMLENYCHLISVGCHMTKPDVILKLERGEEPWTSFKGHTCLEENWKAEDFLLKFKEQQDKYSRSVILINHKKLVNENGSTCEKTLTLSKNPINSKKLPPEYDTREKILKNVSELIISNLSPTRRRLSECNGYGKSLLNTKPETAHSGVKSHNQCGRTISHNEKITQYHKMETPAQSFEYNDCEKAFLKRGGPVTHSRTYRRGNTSDYNKRRRTTNIEKKHTCTECGKSFCRKSVLILHQGIHTEEKPYQCHQCGNSFRRKSYLIDHQRTHTGEKPFVCNECGKSFRLKTALTDHQRTHTGEKSYECPQCRNAFRLKSHLIRHQRTHTGEKPYEC [...]
+chr4-04	SwissProt	protein_match	266088	266231	101.000000	-	.	Target=Q4R6C2.1 336 385 +;percentID=49;Gap=M17 I1 M6 D1 M7 I2 M17 ;sequence=MAEGSVMFSDVSIDFSQEEWDCLDPVQRDLYRDVMLENYSNLVSMGLYTPKPQVISLLEQGKEPWMVGRELTRGLCSDLESMCETKLLSLKKEVYEIELCQREIMGLTKHGLEYSSFGDVLEYRSRLAKQLGYPNGHFSQEIFTPEYMPTFIQQTFLTLQQIMNNEDRPFECKKCGKAFSQNSQFIQHQRIHIGEKSYECKECGKFFSCGSHVTRHLKIHTGEKPFECKECGKAFSCSSYLSQHQRIHTGKKPYECKECGKAFSYCSNLIDHQRIHTGEKPYACKVCGKAFTKSSQLFQHVRIHTGEKPYECKECGKAFTQSSKLVQHQRIHTGEKPYECKECGKAFSSGSALTN [...]
+chr4-04	SwissProt	protein_match	266088	266231	101.000000	-	.	Target=Q8NA42.1 336 385 +;percentID=49;Gap=M17 I1 M6 D1 M7 I2 M17 ;sequence=MAEGSVMFSDVSIDFSQEEWDCLDPVQRDLYRDVMLENYGNLVSMGLYTPKPQVISLLEQGKEPWMVGRELTRGLCSDLESMCETKLLSLKKEVYEIELCQREIMGLTKHGLEYSSFGDVLEYRSHLAKQLGYPNGHFSQEIFTPEYMPTFIQQTFLTLHQIINNEDRPYECKKCGKAFSQNSQFIQHQRIHIGEKSYECKECGKFFSCGSHVTRHLKIHTGEKPFECKECGKAFSCSSYLSQHQRIHTGKKPYECKECGKAFSYCSNLIDHQRIHTGEKPYECKVCGKAFTKSSQLFQHARIHTGEKPYECKECGKAFTQSSKLVQHQRIHTGEKPYECKECGKAFSSGSALTN [...]
+chr4-04	SwissProt	protein_match	266088	266231	101.000000	-	.	Target=Q61116.1 535 584 +;percentID=48;Gap=M32 I2 M16 ;sequence=MTKLQEMVTFRDVAVVFSEEELGLLDAAQRKLYHDVMLENFRNLLAVGCQSPNKMAPLDTTGIRCLPLGQLPCWQMTSHDVNKLARAPEDGINTPGKGPHLLEQCHSSCHWGAEQPSQAPEDDGCLENLPSNHSSSSDNQEFLSGRAQSSWSKAHFSERWNHEKHCPQTLVKTKSQLLAPGVNILGCISHHDHNILHKRDKVPSSGDCDQVIFPMTLLTQHCVYREQKAYQCSRGQEVFSDSPSLELHQQTLLGKKSPVHSTHKDTRHSPSVPIQPSVHPGRKRYWCHECGKGFRQSSALQTHQRVHTGEKPYRCDSCGKGFSRSSDLNIHRRVHTGEKPYKCEVCGKGFTQWAHLQAHERIHTGEK [...]
+chr4-04	SwissProt	protein_match	266088	266237	101.000000	-	.	Target=P18751.1 506 557 +;percentID=44;Gap=M33 I2 M17 ;sequence=MGMWEEASDTGMKGKKKDKNEEEEERGKKERMVNLTLEMIYLLTGEHYIPRKKSDDGGALHAPGSVIQKENNKNDKKILELMSNIIQLLTGEVAIRTHHVSIYFSLDEWDYIKGNKELYEEGIKEEPQQLRPQACEYKDESNVTAHMEATLCCNSDGNFINPENPEISPGEQPPPANGIKEEATSSEEGNQSDCSINPLTEEIQGTDTPTPIMGCSLNYSLSDNYISDEIKEEETSCQGRNQSDCSITPLTEQIQGTDTPTPIMGCSLKDNKYDGNPHWSPKNTLRRKYSCNECHEYLIHKRDFGKHQMTHKREKSFSCSECGKCFLNQLCPDRHQTGKKPFSCSKCGKCFAFLSDLTVHRRIHTGE [...]
+chr4-04	SwissProt	protein_match	266088	266231	101.000000	-	.	Target=Q08DG8.1 435 484 +;percentID=44;Gap=M31 I2 M17 ;sequence=MTAGLLTAGDPDQVTFEDVVVDFTQEEWGHLEPAQRTLYRDVMLETFGLLVSVGHWLPKPDVISLLEQEAELWAADKGGPRGVCPDLETRPQSKLSTENQGVTEEIPNSALVERFLQESLWHSKDEGAAGHREQGPEKSDSCVVQAACTLVKTLTEEQQQGDGCGENLSLRPDLPTQPMTPERQGAPTWGTHGQRENPDSNAQQKTCAKEKPYGCQECGKAFSHSLALIEHHRTHTGERPYECPECGKGFRNSSALTKHQRIHTGEKPYKCAQCGRTFNQIAPLIQHQRTHTGEKPYECSECGKSFSFRSSFSQHERTHTGEKPYTCSQCGKAFRQSIHLTQHLRIHTGEKPYQCGECGKAFSHSSS [...]
+chr4-04	SwissProt	protein_match	266088	266231	101.000000	-	.	Target=Q3MIS6-2.1 6 55 +;percentID=46;Gap=M32 I2 M16 ;sequence=MHTGEKPYKCHECGKLFSSNSNLSQHQRIHTGEKPYKCHECDKVFRSSSKLAQHQRIHTGEKPYKCHECDKVFNQIAHLVRHQKIHTGEKPYSCNKCGKVFSRHSYLAEHQTVHTGEKPYKCEECGKAFSVRSSLITHQLIHTGRKPYKCKECDKVFGRKCFLTSHQRIHTRERPYGCSQCGKIFSQKSDLIRHRKTHTDEKPYKCNKCGTAFREFSDLTAHFLIHSGEKPYECKECGKVFRYKSSLTSHHRIHTGEKPYKCNRCGKVFSRSSNLVCHQKIHTGEKPYKCNQCGKVFNQASYLTRHQIIHTGERPYRCSKCGKAFRGCSGLTAHLAIHTEKKSHECKECGKIFTQKSSLTNHHRIHIG [...]
+chr4-04	SwissProt	protein_match	266088	266231	102.000000	-	.	Target=Q9UC06.2 166 215 +;percentID=46;Gap=M31 I2 M17 ;sequence=MEVPPATKFGETFAFENRLESQQGLFPGEDLGDPFLQERGLEQMAVIYKEIPLGEQDEENDDYEGNFSLCSSPVQHQSIPPGTRPQDDELFGQTFLQKSDLSMCQIIHSEEPSPCDCAETDRGDSGPNAPHRTPQPAKPYACRECGKAFSQSSHLLRHLVIHTGEKPYECCECGKAFSQSSHLLRHQIIHTGEKPYECRECGKAFRQSSALTQHQKIHTGKRPYECRECGKDFSRSSSLRKHERIHTGERPYQCKECGKSFNQSSGLSQHRKIHTLKKPHECDLCGKAFCHRSHLIRHQRIHTGKKPYKCDECGKAFSQSSNLIEHRKTHTGEKPYKCQKCGKAFSQSSSLIEHQRIHTGEKPYECC [...]
+chr4-04	SwissProt	protein_match	266088	266231	102.000000	-	.	Target=Q8TAF7.2 271 320 +;percentID=46;Gap=M31 I2 M17 ;sequence=MAHELVMFRDVAIDVSQEEWECLNPAQRNLYKEVMLENYSNLVSLGLSVSKPAVISSLEQGKEPWMVVREETGRWCPGTWKTWGFHNNFLDNNEATDINADLASRDEPQKLSPKRDIYETELSQWVNMEEFKSHSPERSIFSAIWEGNCHFEQHQGQEEGYFRQLMINHENMPIFSQHTLLTQEFYDREKISECKKCRKIFSYHLFFSHHKRTHSKELSECKECTEIVNTPCLFKQQTIQNGDKCNECKECWKAFVHCSQLKHLRIHNGEKRYECNECGKAFNYGSELTLHQRIHTGEKPYECKECGKAFRQRSQLTQHQRLHTGEKPYECKQCGKAFIRGFQLTEHLRLHTGEKPYECKECGKTFR [...]
+chr4-04	SwissProt	protein_match	266088	266231	102.000000	-	.	Target=Q8TAF7-2.2 144 193 +;percentID=46;Gap=M31 I2 M17 ;sequence=MEEFKSHSPERSIFSAIWEGNCHFEQHQGQEEGYFRQLMINHENMPIFSQHTLLTQEFYDREKISECKKCRKIFSYHLFFSHHKRTHSKELSECKECTEIVNTPCLFKQQTIQNGDKCNECKECWKAFVHCSQLKHLRIHNGEKRYECNECGKAFNYGSELTLHQRIHTGEKPYECKECGKAFRQRSQLTQHQRLHTGEKPYECKQCGKAFIRGFQLTEHLRLHTGEKPYECKECGKTFRHRSHLTIHQRIHTGEKPYECRECGKAFSYHSSFSHHQKIHSGKKPYECHECGKAFCDGLQLTLHQRIHTGEKPYECKECGKTFRQCSHLKRHQRIHTGEKPHECMICGKAFRLHSHLIQHQRIHT [...]
+chr4-04	SwissProt	protein_match	266088	266231	102.000000	-	.	Target=Q5CZA5.2 227 276 +;percentID=46;Gap=M32 I2 M16 ;sequence=MALTDPAQVSVTFDDVAVTFTQEEWGQLDLAQRTLYQEVMLENCGLLVSLGCPVPRPELIYHLEHGQEPWTRKEDLSQGTCPGDKGKPKSTEPTTCELALSEGISFWGQLTQGASGDSQLGQPKDQDGFSEMQGERLRPGLDSQKEKLPGKMSPKHDGLGTADSVCSRIIQDRVSLGDDVHDCDSHGSGKNPVIQEEENIFKCNECEKVFNKKRLLARHERIHSGVKPYECTECGKTFSKSTYLLQHHMVHTGEKPYKCMECGKAFNRKSHLTQHQRIHSGEKPYKCSECGKAFTHRSTFVLHNRSHTGEKPFVCKECGKAFRDRPGFIRHYIIHSGENPYECFECGKVFKHRSYLMWHQQTHTGEK [...]
+chr4-04	SwissProt	protein_match	266088	266231	102.000000	-	.	Target=Q2KI58.1 486 535 +;percentID=48;Gap=M32 I2 M16 ;sequence=MFQVTFSDVAIDFSHEEWRWLNSTQRNLYKDVMVQNYENLVSLGLSIPKPYVIALLEDGKEPCMVEEKLSKDTFPDCKTRWENKELSMKEDIYDEDLPQMVLKEKTIQQNHEFSNFNKDLYYIKKFKGKYENQVEHFRPVTLTFRESPIGESVYKCNAFKSIFHLKSVFSEPQRISAEGKSHKCDILKKSLPTNSVIKNENINDGKKLLNSNESVAAFSQSKSLTLHQTLNKEKIYTCNECGKAFGKQSILNRHWRIHTGEKPYECHECGKTFSHGSSLTRHQISHSGEKPYKCIECGKAFSHVSSLTNHQSTHTGEKPYECMNCGKAFSRVSHLIEHLRIHTQEKLYECRICGKAFIHRSSLIHHQ [...]
+chr4-04	SwissProt	protein_match	266088	266231	102.000000	-	.	Target=Q5REF1.1 531 580 +;percentID=48;Gap=M32 I2 M16 ;sequence=MPQLQYPECYLAPNRCLVSNCGVNKMSNEELVGQNHGMEGEACTGEDVTFSDVAIDFSHEEWGWLNSAQRDLYKDVMVQNYENLVSVAGLSVTKPHVITLLEDGKEPWMMEKKLSKGLIPDWESRWENKELSTKKDIYDEDSPQTVIIEKVVKQSYEFSNSKMNLEYTEKLEGKHGSQVDHFRPAILTSRESPIADSVYKYNIFRSTFHSKSTLSEPQKISAEGNSYKYDILKKNLPKKSVIKNEKVNGGKKLLNSNKSGAAFSQGKSLALPQTCNREKIYTCSECGKAFGKQSILNRHWRIHTGEKPYECRECGKTFSHGSSLTRHLISHSGEKPYKCIECGKAFSHVSSLTNHQSTHTGEKPYEC [...]
+chr4-04	SwissProt	protein_match	266088	266231	102.000000	-	.	Target=P52742.2 436 485 +;percentID=44;Gap=M32 I2 M16 ;sequence=MTPGVRVSTDPEQVTFEDVVVDFSQEEWGQLKPAQRTLYRDVMLDTFRLLVSVGHWLPKPNVISLLEQEAELWAVESRLPQGVYPDLETRPKVKLSVLKQGISEEISNSVILVERFLWDGLWYCRGEDTEGHWEWSCESLESLAVPVAFTPVKTPVLEQWQRNGFGENISLNPDLPHQPMTPERQSPHTWGTRGKREKPDLNVLQKTCVKEKPYKCQECGKAFSHSSALIEHHRTHTGERPYECHECLKGFRNSSALTKHQRIHTGEKPYKCTQCGRTFNQIAPLIQHQRTHTGEKPYECSECGKSFSFRSSFSQHERTHTGEKPYECSECGKAFRQSIHLTQHLRIHTGEKPYQCGECGKAFSHSS [...]
+chr4-04	SwissProt	protein_match	266088	266231	102.000000	-	.	Target=Q2M3W8.1 487 536 +;percentID=48;Gap=M32 I2 M16 ;sequence=MPQVTFNDVAIDFTHEEWGWLSSAQRDLYKDVMVQNYENLVSVAGLSVTKPYVITLLEDGKEPWMMEKKLSKGMIPDWESRWENKELSTKKDNYDEDSPQTVIIEKVVKQSYEFSNSKKNLEYIEKLEGKHGSQVDHFRPAILTSRESPTADSVYKYNIFRSTFHSKSTLSEPQKISAEGNSHKYDILKKNLPKKSVIKNEKVNGGKKLLNSNKSGAAFSQGKSLTLPQTCNREKIYTCSECGKAFGKQSILNRHWRIHTGEKPYECRECGKTFSHGSSLTRHLISHSGEKPYKCIECGKAFSHVSSLTNHQSTHTGEKPYECMNCGKSFSRVSHLIEHLRIHTQEKLYECRICGKAFIHRSSLIHH [...]
+chr4-04	SwissProt	protein_match	266088	266336	102.000000	-	.	Target=Q2M3W8-2.1 165 248 +;percentID=31;Gap=M34 D1 M32 I2 M16 ;sequence=MMEKKLSKGMIPDWESRWENKELSTKKDNYDEDSPQTVIIEKVVKQSYEFSNSKKNLEYIEKLEGKHGSQVDHFRPAILTSRESPTADSVYKYNIFRSTFHSKSTLSEPQKISAEGNSHKYDILKKNLPKKSVIKNEKVNGGKKLLNSNKSGAAFSQGKSLTLPQTCNREKIYTCSECGKAFGKQSILNRHWRIHTGEKPYECRECGKTFSHGSSLTRHLISHSGEKPYKCIECGKAFSHVSSLTNHQSTHTGEKPYECMNCGKSFSRVSHLIEHLRIHTQEKLYECRICGKAFIHRSSLIHHQKIHTGEKPYECRECGKAFCCSSHLTRHQRIHTMEKQYECNKCLKVFSSLSFLVQ [...]
+chr4-04	SwissProt	protein_match	266088	266237	102.000000	-	.	Target=Q6ECI4.2 224 275 +;percentID=40;Gap=M34 I2 M16 ;sequence=MKSQEEVEVAGIKLCKAMSLGSVTFTDVAIDFSQDEWEWLNLAQRSLYKKVMLENYRNLVSVGLCISKPDVISLLEQEKDPWVIKGGMNRGLCPDLECVWVTKSLSLNQDIYEEKLPPAIIMERLKSYDLECSTLGKNWKCEDLFERELVNQKTHFRQETITHIDTLIEKRDHSNKSGTVFHLNTLSYIKQIFPMEERIFNFHTDKKSLKTHSVVKKHKQDRGEKKLLKCNDCEKIFSKISTLTLHQRIHTGEKPYECIECGKAFSQSAHLAQHQRIHTGEKPFECTECGKAFSQNAHLVQHQRVHTGEKPYQCKQCNKAFSQLAHLAQHQRVHTGEKPYECIECGKAFSDCSSLAHHRRIHTGKRP [...]
+chr4-04	SwissProt	protein_match	266088	266231	103.000000	-	.	Target=Q5VIY5.1 409 458 +;percentID=48;Gap=M32 I2 M16 ;sequence=MALPQGLLTFRDVAIEFSQEEWKCLDPAQRTLYRDVMLENYRNLVSLDISSKCMLKTLSSTGQGNTEVIHTGTLHRQASHHIGEFCFHEIEKDIHGFEFQWKEDETNGHAAPMTEIKELAGSTGQHDQRHAGNKRIKDQLGSSFHLHLPEPHIFQSEGKIGNQVEKSINNASSVSTSQRICCRPKTHISNKYGNNSLHSSLLTQKWEVHMREKSFECIQSFKSFNCSSLLKKHQIIHLEEKQCKCDVCGKVFNQKRYLACHRRCHTGEKPYKCNECGKTFGHNSSLFIHKALHTGEKPYECEECDKVFSRKSHLERHKRIHTGEKPYKCKVCDEAFAYNSYLAKHTILHTGEKPYTCNECGKVFNRL [...]
+chr4-04	SwissProt	protein_match	266088	266237	103.000000	-	.	Target=P21506.3 261 312 +;percentID=44;Gap=M33 I2 M17 ;sequence=MDAKSLTAWSRTLVTFKDVFVDFTREEWKLLDTAQQIVYRNVMLENYKNLVSLGYQLTKPDVILRLEKGEEPWLVEREIHQETHPDSETAFEIKSSVSSRSIFKDKQSCDIKMEGMARNDLWYLSLEEVWKCRDQLDKYQENPERHLRQVAFTQKKVLTQERVSESGKYGGNCLLPAQLVLREYFHKRDSHTKSLKHDLVLNGHQDSCASNSNECGQTFCQNIHLIQFARTHTGDKSYKCPDNDNSLTHGSSLGISKGIHREKPYECKECGKFFSWRSNLTRHQLIHTGEKPYECKECGKSFSRSSHLIGHQKTHTGEEPYECKECGKSFSWFSHLVTHQRTHTGDKLYTCNQCGKSFVHSSRLIRH [...]
+chr4-04	SwissProt	protein_match	266088	266231	103.000000	-	.	Target=Q6ZN57.1 156 205 +;percentID=46;Gap=M31 I2 M17 ;sequence=MEREGIWHSTLGETWEPNNWLEGQQDSHLSQVGVTHKETFTEMRVCGGNEFERCSSQDSILDTQQSIPMVKRPHNCNSHGEDATQNSELIKTQRMFVGKKIYECNQCSKTFSQSSSLLKHQRIHTGEKPYKCNVCGKHFIERSSLTVHQRIHTGEKPYKCNECGKAFSQSMNLTVHQRTHTGEKPYQCKECGKAFHKNSSLIQHERIHTGEKPYKCNECGKAFTQSMNLTVHQRTHTGEKPYECNECGKAFSQSMHLIVHQRSHTGEKPYECSQCGKAFSKSSTLTLHQRNHTGEKPYKCNKCGKSFSQSTYLIEHQRLHSGVKPFECNECGKAFSKNSSLTQHRRIHTGEKPYECMVCGKHFTGRS [...]
+chr4-04	SwissProt	protein_match	266088	266231	103.000000	-	.	Target=A6NDX5.5 471 520 +;percentID=44;Gap=M31 I2 M17 ;sequence=MSLMGHGKVEMLLYAVPLLKAPNCLSSSMQLPHGGGRHQELVRFRDVAVVFSPEEWDHLTPEQRNLYKDVMLDNCKYLASLGNWTYKAHVMSSLKQGKEPWMMEREVTGDPCPACQPALATFRALNESGNAFRQSFHHGEYRTHRTFVQHYECDDCGMAFGHVSQLTGHQKIHKVGETHEYGENTRGFRHRSSFTMLQRICTLYKHFECNQCGETFNRPSKVIQHQSMHSGLKPYKCDVCQKAFRFLSSLSIHQRFHVGNRVNLTRHQKTHTQRKPFSCNFCGKTFHRFSEKTQHLLIHTRKKYYTCNYCKKEFNPYSKFILHQRTHTGEKPHKCDVCEKSFKSISNLNKHQKTHTGEKPFSCNECK [...]
+chr4-04	SwissProt	protein_match	266088	266231	103.000000	-	.	Target=Q96LW9.2 265 314 +;percentID=44;Gap=M31 I2 M17 ;sequence=MASTEEQYDLKIVKVEEDPIWDQETHLRGNNFSGQEASRQLFRQFCYQETPGPREALSRLRELCHQWLRPEIHTKEQILELLVLEQFLTILPEELQAWVREHHPESGEEAVAVVEDLEQELSEPGNQAPDHEHGHSEVLLEDVEHLKVKQEPTDIQLQPMVTQLRYESFCLHQFQEQDGESIPENQELASKQEILKEMEHLGDSKLQRDVSLDSKYRETCKRDSKAEKQQAHSTGERRHRCNECGKSFTKSSVLIEHQRIHTGEKPYECEECGKAFSRRSSLNEHRRSHTGEKPYQCKECGKAFSASNGLTRHRRIHTGEKPYECKVCGKAFLLSSCLVQHQRIHTGEKRYQCRECGKAFIQNAGLF [...]
+chr4-04	SwissProt	protein_match	266088	266231	104.000000	-	.	Target=Q9HCL3.2 450 499 +;percentID=46;Gap=M31 I2 M17 ;sequence=MAHGSVTFRDVAIDFSQEEWEFLDPAQRDLYRDVMWENYSNFISLGPSISKPDVITLLDEERKEPGMVVREGTRRYCPDLESRYRTNTLSPEKDIYEIYSFQWDIMERIKSYSLQGSIFRNDWECKSKIEGEKEQQEGYFGQVKITSEKMTTYKRHNFLTEYQIVHNGEKVYECKECRKTFIRRSTLSQHLRIHTGEKPYKCKECGQAFRQRAHLIRHHKLHTGEKPYECKECGKAFTVLQELTQHQRLHTGEKPYECKECGKAFRVHQQLARHQRIHTGEKPYECKDCGKTFRQCTHLTRHQRLHTAEKLYECKECGKAFVCGPDLRVHQKIHFGEKPYECKECGKAFRICQQLTVHQSIHTGEKP [...]
+chr4-04	SwissProt	protein_match	266088	266237	104.000000	-	.	Target=Q9P2J8-2.3 230 281 +;percentID=46;Gap=M34 I2 M16 ;sequence=MEPKPATKKATRTKAISEDLSQEAILEKLTENGLWDSRMEGLWKWNDRILRLQNNQENHLSQRIIPLKKTPTSQRGFRFESILIPEPGIATEELHSRCQTQEENFTENLNLITDTHLGKIICKEMKGSKAIRQTSELTLGKKSNNKEKPYKCSTCEKAFHYRSLLIQHQRTHTKEKPYECNECGKTFSQPSYLSQHKKIHTGEKPYKCNECGKAFIASSSLMVHQRIHTKEKPYQCNVCGKSFSQCARLNQHQRIQTGEKPYKCSECGKAFSDKSKLARHQETHNGEKPYKCDDCGKAFRNKSYLSVHQKTHTEEKPYQCNECGKSFKNTTIFNVHQRIHTGEKPFRCNECGKAYRSNSSLIVHI [...]
+chr4-04	SwissProt	protein_match	266088	266237	104.000000	-	.	Target=Q9P2J8.3 356 407 +;percentID=46;Gap=M34 I2 M16 ;sequence=MSLQDSTLSREGKPEGEIMAAVFFSVGRLSPEVTQPDEDLHLQAEETQLVKESVTFKDVAIDFTLEEWRLMDPTQRNLHKDVMLENYRNLVSLGLAVSKPDMISHLENGKGPWVTVREISRIPYPDMEPKPATKKATRTKAISEDLSQEAILEKLTENGLWDSRMEGLWKWNDRILRLQNNQENHLSQRIIPLKKTPTSQRGFRFESILIPEPGIATEELHSRCQTQEENFTENLNLITDTHLGKIICKEMKGSKAIRQTSELTLGKKSNNKEKPYKCSTCEKAFHYRSLLIQHQRTHTKEKPYECNECGKTFSQPSYLSQHKKIHTGEKPYKCNECGKAFIASSSLMVHQRIHTKEKPYQCNVCGK [...]
+chr4-04	SwissProt	protein_match	266088	266231	105.000000	-	.	Target=Q8N4W9.2 845 894 +;percentID=48;Gap=M32 I2 M16 ;sequence=MLREEAAQKRKGKESGMALPQGRLTFRDVAIEFSLAEWKFLNPAQRALYREVMLENYRNLEAVDISSKHMMKEVLSTGQGNREVIHTGTLQRHQSYHIGDFCFQEIEKEIHNIEFQCQEDERNGHEAPTTKIKKLTGSTDQHDHRHAGNKPIKDQLGSSFYSHLPELHIFQIKGEIANQLEKSTSDASSVSTSQRISCRPQIHISNNYGNNPLNSSLLPQKQEVHMREKSFPCNESGKAFNCSSLLRKHQIPHLGDKQYKCDVCGKLFNHKQYLACHRRCHTGEKPYKCKECGKSFSYKSSLTCHHRLHTGVKPYKCNECGKVFRQNSALVIHKAIHTGEKPYKCNECGKAFNQQSHLSRHQRLHTG [...]
+chr4-04	SwissProt	protein_match	266088	266231	106.000000	-	.	Target=Q494X3.1 185 234 +;percentID=44;Gap=M31 I2 M17 ;sequence=MARVPLTFSDVAIDFSQEEWEYLNSDQRDLYRDVMLENYTNLVSLDFNFTTESNKLSSEKRNYEVNAYHQETWKRNKTFNLMRFIFRTDPQYTIEFGRQQRPKVGCFSQMIFKKHKSLPLHKRNNTREKSYECKEYKKGFRKYLHLTEHLRDHTGVIPYECNECGKAFVVFQHFIRHRKIHTDLKPYECNGCEKAFRFYSQLIQHQIIHTGMKPYECKQCGKAFRRHSHLTEHQKIHVGLKPFECKECGETFRLYRHMCLHQKIHHGVKPYKCKECGKAFGHRSSLYQHKKIHSGEKPYKCEQCEKAFVRSYLLVEHQRSHTGEKPHECMECGKAFSKGSSLLKHKRIHSSEKLYDCKDCGKAFCRG [...]
+chr4-04	SwissProt	protein_match	266088	266258	106.000000	-	.	Target=Q571J5.2 404 461 +;percentID=44;Gap=M8 D1 M31 I2 M17 ;sequence=MAVDLLAARGTEPVTFRDVAVSFSQDEWLHLDPAQRSLYREVMLENYSNLASLGFQASIPPVIGKLQKGQDPCMEREAPEDTCLDFEIWPEIEALPPKQDVLTKETSHGLIKNGSTKCVYWKISFGELVKTECRDIAQEQEKKVHGPGAESPKETTSEDGTPTGFEPEKPLFISKALVSQEGDPTESVPATYHTSEKDLPQDFDLMRSFQMYPGQKPHVCSECGKGFTQSLHLLEHKRLHTGEKPYKCSECGKSFSHRSSLLAHQRTHTGEKPYKCSECEKAFGSSSTLIKHLRVHTGEKPYRCRQCGKAFSQCSTLTVHQRIHTGEKLYKCAECDKAFNCRAKLHRHQRIHTGEKPYKCA [...]
+chr4-04	SwissProt	protein_match	266088	266231	108.000000	-	.	Target=Q09FC8-5.2 410 459 +;percentID=50;Gap=M17 I1 M6 D1 M8 I2 M16 ;sequence=MAFTQLTFRDVAIEFSQDEWKCLNSTQRTLYRDVMLENYRNLVSLDLSRNCVIKELAPQQEGNPGEVFHTVTLEQHEKHDIEEFCFREIKKKIHDFDCQWRDDERNCNKVTTAPKENLTCRRDQRDRRGIGNKSIKHQLGLSFLPHPHELQQFQAEGKIYECNHVEKSVNHGSSVSPPQIISSTIKTHVSNKYGTDFICSSLLTQEQKSCIREKPYRYIECDKALNHGSHMTVRQVSHSGEKGYKCDLCGKVFSQKSNLARHWRVHTGEKPYKCNECDRSFSRNSCLALHRRVHTGEKPYKCYECDKVFSRNSCLALHQKTHIGEKPYTCKECGKAFSVRSTLTNHQVIHSGK [...]
+chr4-04	SwissProt	protein_match	266088	266231	108.000000	-	.	Target=Q9BX82.1 541 590 +;percentID=48;Gap=M32 I2 M16 ;sequence=MNVEVVKVMPQDLVTFKDVAIDFSQEEWQWMNPAQKRLYRSMMLENYQSLVSLGLCISKPYVISLLEQGREPWEMTSEMTRSPFSDWESIYVTQELPLKQFMYDDACMEGITSYGLECSTFEENWKWEDLFEKQMGSHEMFSKKEIITHKETITKETEFKYTKFGKCIHLENIEESIYNHTSDKKSFSKNSMVIKHKKVYVGKKLFKCNECDKTFTHSSSLTVHFRIHTGEKPYACEECGKAFKQRQHLAQHHRTHTGEKLFECKECRKAFKQSEHLIQHQRIHTGEKPYKCKECRKAFRQPAHLAQHQRIHTGEKPYECKECGKAFSDGSSFARHQRCHTGKRPYECIECGKAFRYNTSFIRHWRS [...]
+chr4-04	SwissProt	protein_match	266088	266231	108.000000	-	.	Target=Q09FC8-2.2 422 471 +;percentID=50;Gap=M17 I1 M6 D1 M8 I2 M16 ;sequence=MPELYTEDFIQGCDVGELQEPGLPGLECNGAISAHCNLRLPDSNDSPASASRVAGITDLSRNCVIKELAPQQEGNPGEVFHTVTLEQHEKHDIEEFCFREIKKKIHDFDCQWRDDERNCNKVTTAPKENLTCRRDQRDRRGIGNKSIKHQLGLSFLPHPHELQQFQAEGKIYECNHVEKSVNHGSSVSPPQIISSTIKTHVSNKYGTDFICSSLLTQEQKSCIREKPYRYIECDKALNHGSHMTVRQVSHSGEKGYKCDLCGKVFSQKSNLARHWRVHTGEKPYKCNECDRSFSRNSCLALHRRVHTGEKPYKCYECDKVFSRNSCLALHQKTHIGEKPYTCKECGKAFSVRS [...]
+chr4-04	SwissProt	protein_match	266088	266231	108.000000	-	.	Target=Q09FC8.2 458 507 +;percentID=50;Gap=M17 I1 M6 D1 M8 I2 M16 ;sequence=MPELYTEDFIQGCDVGELQEPGLPGVLSYVGAQERALDHRKPSTSSKKTKRVEIDQRCENRLECNGAISAHCNLRLPDSNDSPASASRVAGITDLSRNCVIKELAPQQEGNPGEVFHTVTLEQHEKHDIEEFCFREIKKKIHDFDCQWRDDERNCNKVTTAPKENLTCRRDQRDRRGIGNKSIKHQLGLSFLPHPHELQQFQAEGKIYECNHVEKSVNHGSSVSPPQIISSTIKTHVSNKYGTDFICSSLLTQEQKSCIREKPYRYIECDKALNHGSHMTVRQVSHSGEKGYKCDLCGKVFSQKSNLARHWRVHTGEKPYKCNECDRSFSRNSCLALHRRVHTGEKPYKCYECDK [...]
+chr4-04	SwissProt	protein_match	266088	266240	108.000000	-	.	Target=Q96N38-3.1 13 65 +;percentID=45;Gap=M35 I2 M16 ;sequence=MLLHLHQHKRIHIRENSYQCEECDKVFKRFSTLTRHKRVHTGEKPFKCEECGKAFKHSSTLTTHKMIHTGEKPYRCEECGKAFYHSSHLTTHKVIHTGEKPFKCEECGKAFNHPSALTTHKFIHVKEKPYKCEECDKAFNRFSYLTKHKIIHSGEKSYKCEQCGKGFNWSSTLTKHRRIHTGEKPYKCEECGKAFNVSSHLTTHKMIHTGEKPYKCEECGKAFNHSSKLTIHKIIHTGEKPYKCEECGKAFNQSSNLTKHKIIHTGEKLYKCEECGKAFNRSSNLTTHKRIHTGEKPYKCEECGKAFNRSSNLTKHNIIHTGEKSYKCEECGKAFNQSSTLTKHRKIQQGMVAHACNPNTLRGLGEQ [...]
+chr4-04	SwissProt	protein_match	266088	266231	109.000000	-	.	Target=Q96NG5.1 150 199 +;percentID=50;Gap=M31 I2 M17 ;sequence=MAAVILPSTAAPSSLFPASQQKGHTQGGELVNELLTSWLRGLVTFEDVAVEFTQEEWALLDPAQRTLYRDVMLENCRNLASLGCRVNKPSLISQLEQDKKVVTEERGILPSTCPDLETLLKAKWLTPKKNVFRKEQSKGVKTERSHRGVKLNECNQCFKVFSTKSNLTQHKRIHTGEKPYDCSQCGKSFSSRSYLTIHKRIHNGEKPYECNHCGKAFSDPSSLRLHLRIHTGEKPYECNQCFHVFRTSCNLKSHKRIHTGENHHECNQCGKAFSTRSSLTGHNSIHTGEKPYECHDCGKTFRKSSYLTQHVRTHTGEKPYECNECGKSFSSSFSLTVHKRIHTGEKPYECSDCGKAFNNLSAVKKHL [...]
+chr4-04	SwissProt	protein_match	266088	266231	109.000000	-	.	Target=Q6ZNA1.2 608 657 +;percentID=50;Gap=M17 I1 M6 D1 M8 I2 M16 ;sequence=MALTQGPLTFRDVAIEFSQEEWKSLDPVQKALYWDVMLENYRNLVFLGILPKCMTKELPPIGNSNTGEKCQTVTLERHECYDVENFYLREIQKNLQDLEFQWKDGEINYKEVPMTYKNNLNGKRGQHSQEDVENKCIENQLTLSFQSRLTELQKFQTEGKIYECNQSEKTVNNSSLVSPLQRILPSVQTNISKKYENEFLQLSLPTQLEKTHIREKPYMCKGCGKAFRVSSSLINHQMVHTTEKPYKCNECGKAFHRGSLLTIHQIVHTRGKPYQCGVCGKIFRQNSDLVNHRRSHTGEKPYKCNECGKSFSQSYNLAIHQRIHTGEKPYKCNECGKTFKQGSCLTTHQIIHTGE [...]
+chr4-04	SwissProt	protein_match	266088	266240	109.000000	-	.	Target=P52738.2 268 320 +;percentID=45;Gap=M35 I2 M16 ;sequence=MSQGSVTFRDVAIDFSQEEWKWLQPAQRDLYRCVMLENYGHLVSLGLSISKPDVVSLLEQGKEPWLGKREVKRDLFSVSESSGEIKDFSPKNVIYDDSSQYLIMERILSQGPVYSSFKGGWKCKDHTEMLQENQGCIRKVTVSHQEALAQHMNISTVERPYGCHECGKTFGRRFSLVLHQRTHTGEKPYACKECGKTFSQISNLVKHQMIHTGKKPHECKDCNKTFSYLSFLIEHQRTHTGEKPYECTECGKAFSRASNLTRHQRIHIGKKQYICRKCGKAFSSGSELIRHQITHTGEKPYECIECGKAFRRFSHLTRHQSIHTTKTPYECNECRKAFRCHSFLIKHQRIHAGEKLYECDECGKVFT [...]
+chr4-04	SwissProt	protein_match	266088	266237	110.000000	-	.	Target=Q96NI8.1 214 265 +;percentID=46;Gap=M34 I2 M16 ;sequence=MAVGLLKAMYQELVTFRDVAVDFSQEEWDCLDSSQRHLYSNVMLENYRILVSLGLCFSKPSVILLLEQGKAPWMVKRELTKGLCSGWEPICETEELTPKQDFYEEHQSQKIIETLTSYNLEYSSLREEWKCEGYFERQPGNQKACFKEEIITHEEPLFDEREQEYKSWGSFHQNPLLCTQKIIPKEEKVHKHDTQKRSFKKNLMAIKPKSVCAEKKLLKCNDCEKVFSQSSSLTLHQRIHTGEKPYKCIECGKAFSQRSNLVQHQRIHTGEKPYECKECRKAFSQNAHLVQHLRVHTGEKPYECKVCRKAFSQFAYLAQHQRVHTGEKPYECIECGKAFSNRSSIAQHQRVHTGEKPYECNVCGKAF [...]
+chr4-04	SwissProt	protein_match	266088	266264	110.000000	-	.	Target=Q14591.3 105 165 +;percentID=40;Gap=M43 I2 M16 ;sequence=MEIQFNYESQEHHLLSDGENKTKIGKPASEEGITAKIEPLTEESSSLRMFSRILKAKNSVNLGINEKDQNVFKRRPHNCDEYGQSFVWSTSLFRHRKTHCEKPYEWDKCGKATGEKPYSCNWCIKSFSWSSDLIKHQRVHTGEKPYKCDECGKAFSQSSDLIIHQRIHIGEKPYQCRHCSKSFSQRSDLVKHQRIHTGEKPYTCNQCNKHFSQSSDVIKHQRIHTGEKPYKCDVCGKAFSQSSDLILHQRIHTGEKPYPCNQCSKSFSQNSDLIKHRRIHTGEKPYKCNECGKAFNQSSVLILHQRIHTGEKPYPCDQCSKTFSRLSDLINHQRIHTGEKPYPCNQCNKMFSRRSDLVKHHRIHTGE [...]
+chr4-04	SwissProt	protein_match	266088	266231	111.000000	-	.	Target=P51522.2 147 196 +;percentID=50;Gap=M32 I2 M16 ;sequence=MHGRKDDAQKQPVKNQLGLNPQSHLPELQLFQAEGKIYKYDHMEKSVNSSSLVSPPQRISSTVKTHISHTYECNFVDSLFTQKEKANIGTEHYKCNERGKAFHQGLHFTIHQIIHTKETQFKCDICGKIFNKKSNLASHQRIHTGEKPYKCNECGKVFHNMSHLAQHRRIHTGEKPYKCNECGKVFNQISHLAQHQRIHTGEKPYKCNECGKVFHQISHLAQHRTIHTGEKPYECNKCGKVFSRNSYLVQHLIIHTGEKPYRCNVCGKVFHHISHLAQHQRIHTGEKPYKCNECGKVFSHKSSLVNHWRIHTGEKPYKCNECGKVFSHKSSLVNHWRIHTGEKPYKCNECGKVFSRNSYLAQHLIIH [...]
+chr4-04	SwissProt	protein_match	266088	266240	112.000000	-	.	Target=Q86XU0.1 258 310 +;percentID=46;Gap=M20 I1 M6 D1 M8 I2 M16 ;sequence=MALSQGLFTFKDVAIEFSQEEWECLDPAQRALYRDVMLENYRNLLSLDEDNIPPEDDISVGFTSKGLSPKENNKEELYHLVILERKESHGINNFDLKEVWENMPKFDSLWDYDVKNYKGMPLTCNKNLTHRKDQQHNKSSIHFSLKQSVSIRDSAHQYFIHDKPFIRNLLKLKNNIRYAGNKYVKCFENKIGLSLQAQLAELQRFQTGEKMYECNPVEKSINSSSVSPLPPCVKNICNKYRKILKYPLLHTQYGRTHIREKSYKCNDCGKAFSKSSNLTNHQRIHSGQRPYKCNECGKAFNQCSNLTRHQRVHTGEKPYQCNICGKVCSQNSNLASHQRMHTGEKPYKCNECGKA [...]
+chr4-04	SwissProt	protein_match	266088	266234	113.000000	-	.	Target=Q9HCG1.2 478 528 +;percentID=53;Gap=M18 I1 M6 D1 M8 I2 M16 ;sequence=MALTQVRLTFRDVAIEFSQEEWKCLDPAQRILYRDVMLENYWNLVSLGLCHFDMNIISMLEEGKEPWTVKSCVKIARKPRTRECVKGVVTDIPPKCTIKDLLPKEKSSTEAVFHTVVLERHESPDIEDFSFKEPQKNVHDFECQWRDDTGNYKGVLMAQKEGKRDQRDRRDIENKLMNNQLGVSFHSHLPELQLFQGEGKMYECNQVEKSTNNGSSVSPLQQIPSSVQTHRSKKYHELNHFSLLTQRRKANSCGKPYKCNECGKAFTQNSNLTSHRRIHSGEKPYKCSECGKTFTVRSNLTIHQVIHTGEKPYKCHECGKVFRHNSYLATHRRIHTGEKPYKCNECGKAFRGHSN [...]
+chr4-04	SwissProt	protein_match	266088	266231	115.000000	-	.	Target=Q9Y6R6.1 359 408 +;percentID=50;Gap=M31 I2 M17 ;sequence=MVHGSVTFRDVAIDFSQEEWECLQPDQRTLYRDVMLENYSHLISLGSSISKPDVITLLEQEKEPWIVVSKETSRWYPDLESKYGPEKISPENDIFEINLPKHVIKQISKTLGLEAFYFRNDSEYRSRFEGRQGHQEGYINQKIISYEEMPAYTHASPIHNTHKPYECKECGKYFSCGSNLIQHQSIHTGEKPYKCKECGKAFQLHIQLTRHQKFHTGEKTFECKECGKAFNLPTQLNRHKNIHTVKKLFECKECGKSFNRSSNLTQHQSIHAGVKPYQCKECGKAFNRGSNLIQHQKIHSNEKPFVCRECEMAFRYHYQLIEHCRIHTGEKPFECKECRKAFTLLTKLVRHQKIHMGEKPFECRECG [...]
+chr4-04	SwissProt	protein_match	266088	266231	117.000000	-	.	Target=Q5SXM1.1 207 256 +;percentID=50;Gap=M32 I2 M16 ;sequence=MGTISLCIGVCAFEGANTSTSFYKLVYTAILSYSIQDLLPEQDMKDLCQKVTLTRHRSWGLDNLHLVKDWRTVNEGKGQKEYCNRLTQCSSTKSKIFQCIECGRNFSWRSILTEHKRIHTGEKPYKCEECGKVFNRCSNLTKHKRIHTGEKPYKCDECGKVFNWWSQLTNHKKIHTGEKPYKCDECDKVFNWWSQLTSHKKIHSGEKPYPCEECGKAFTQFSNLTQHKRIHTGEKPYKCKECCKAFNKFSNLTQHKRIHTGEKPYKCEECGNVFNECSHLTRHRRIHTGEKPYKCEECGKAFTQFASLTRHKRIHTGEKPYQCEECGKTFNRCSHLSSHKRIHTGEKPYKCEECGRTFTQFSNLTQH [...]
+chr4-04	SwissProt	protein_match	266088	266231	118.000000	-	.	Target=O75290.3 219 268 +;percentID=52;Gap=M31 I2 M17 ;sequence=MVHGSVTFRDVAIDFSQEEWECLQPDQRTLYRDVMLENYSHLISLGSSISKPDVITLLEQEKEPWMVVRKETSRRYPDLELKYGPEKVSPENDTSEVNLPKQVIKQISTTLGIEAFYFRNDSEYRQFEGLQGYQEGNINQKMISYEKLPTHTPHASLICNTHKPYECKECGKYFSRSANLIQHQSIHTGEKPFECKECGKAFRLHIQFTRHQKFHTGEKPFECNECGKAFSLLTLLNRHKNIHTGEKLFECKECGKSFNRSSNLVQHQSIHSGVKPYECKECGKGFNRGAHLIQHQKIHSNEKPFVCKECGMAFRYHYQLIEHCQIHTGEKPFECKECGKAFTLLTKLVRHQKIHTGEKPFECRECG [...]
+chr4-04	SwissProt	protein_match	266088	266231	122.000000	-	.	Target=Q9H7R5.1 335 384 +;percentID=54;Gap=M17 I1 M6 D1 M8 I2 M16 ;sequence=MGEAFYTVKLERLESCDTAGLSFQEVQKNTYDFECQWKDDEGNYKTVLMLQKENLPGRRAQRDRRAAGNRHIENQLGVSFQSHLPELQQFQREGKIYEYNQVEKSPNNRGKHYKCDECGKVFSQNSRLTSHKRIHTGEKPYQCNKCGKAFTVRSNLTIHQVIHTGEKPYKCNECGKVFSQPSNLAGHQRIHTGEKPYKCNECGKAFRAHSKLTTHQVIHTGEKPYKCKECGKCFTQNSHLASHRRIHTGEKPYKCNECGKAFSVRSSLTTHQTIHTGEKPYKCNECGKVFRHNSYLAKHRRIHTGEKPYKCNECGKAFSMHSNLTKHQIIHTGEKPFKCNECVKVFTQYSHLANH [...]
+chr4-04	SwissProt	protein_match	266088	266231	122.000000	-	.	Target=Q5R8X1.1 335 384 +;percentID=54;Gap=M17 I1 M6 D1 M8 I2 M16 ;sequence=MGEAFYTVKLERLESHDTEGLSFQEVQKNTYDFECPWKDDEGNSKRVLTLQKENLPGRRDQRDRRAAGNRLIENQLGVSFQSHLPELQQFQGEGKIYEYNQVEKSLSNRGKHYKCDECGKVFNQNSRLTSHKRIHTGEKPYRCNECGKAFTVRSNLTIHQVIHTGEKPYKCNECGKVFSQPSNLAGHQRIHTGEKPYKCNECGKAFRAHSKLTTHQVIHTGEKPYKCNECGKCFTQNSHLASHRRIHTGEKPYKCNECGKAFSVRSSLTTHQTIHTGEKPYKCNECGKVFRHNSYLTKHRRVHTGEKPYKCNECGKAFSMHSNLTKHQIIHTGEKPFKCNECVKVFTQYSHLANH [...]
+chr4-04	SwissProt	protein_match	266088	266303	128.000000	-	.	Target=Q8TB69.1 379 451 +;percentID=40;Gap=M23 D1 M32 I2 M16 ;sequence=MELLTFRDVAIEFSPEEWKCLDPAQQNLYRDVMLENYRNLVSLAVYSYYNQGILPEQGIQDSFKKATLGRYGSCGLENICLWKNWESIGEGEGQKECYNLCSQYLTTSHNKHLTVKGDKEYRIFQKKPQFLSAAPTEPCIPMNKYQHKFLKSVFCNKNQINFNHDSDISKHHSTHFLENYYNCNECEKVFYQSSKLIFPENIHIQEKPYNSNECGETSDPFSKLTQHQRIYIGESSQRCNKKCIIVFSQSHLKGHKIINTGEKSVKYKERGKAFTRGLHLGHQKIHTGEKPYKCKKCDKAFNKSSHLAQHQRIHTGEKPFKCKECGKAFNRGSYLTQHQRIHTGERAFKCEECGKAFNRG [...]
+chr4-04	SwissProt	protein_match	266088	266285	185.000000	-	.	Target=Q6ZR52.3 6 73 +;percentID=55;Gap=M50 I2 M16 ;sequence=MNECNVHKEGYNELNQYLTTTQSKIFQCDKYVKVFHKLLNSNRHNTKHTGKKPFKCKKCGKSFCMLLHLCQHKRIHIRENSYRCEECGKAFIWFSTLTRHRRVHTGEKSYKYECGKSFNQDSNLTTHKRIHTGQKPYKCEECGTSFYQFSYLTRHKLIHTREKPYKCEQYGKTFNQSSTLTGHKIIHNGEKPYKCEECGKAFSIFSTPTKHKIIHTEEKSHRCEEYCKAYKESSHLTTHKRIHTGEKPYKCEECGKAFSIFSTLTKHKIIHTEEKSHRCEECGKAYKESSHLTTHKRIHTGEKPYKCEECGKTFSVFSILTKHKIIHTEEKPYKCEECGKAFKRSSTLTKHRIIHTEEKPYKCEECGKAF [...]
+chr4-04	SwissProt	protein_match	266088	266411	278.000000	-	.	Target=O95780-2.1 3 116 +;percentID=54;Gap=M41 I4 M51 I2 M16 ;sequence=MSSHYTEDLLPEQCMQDSFQKVILRRYGSCGLEDLHLRKDGENVGECKDQKEIYNGLNQCLSTLPSKIFPYNKCVKVFSKSSNLNRENIRHTTEKLFKCMQCGKVFKSHSGLSYHKIIHTEEKLCICEECGKTFKWFSYLTKHKRIHTGEKPYKCEECGKAFNWCSSLTKHKRIHTGEKPYKCEECGKAFHWCSPFVRHKKIHTGEKPYTCEDCGRAFNRHSHLTKHKTIHTGKKPYKCKECGKAFNHCSLLTIHERTHTGEKPYKCEECGKAFNSSSILTEHKVIHSGEKPYKCEKCDKVFKRFSYLTKHKRIHTGEKPYKCEECGKAFNWSSILTEHKRIHTGEKPYNCEECGKAFNR [...]
+chr4-04	SwissProt	protein_match	266088	266420	282.000000	-	.	Target=O95780.1 76 192 +;percentID=53;Gap=M44 I4 M51 I2 M16 ;sequence=MELLTFRDVTIEFSLEEWEFLNPAQQSLYRKVMLENYRNLVSLGLTVSKPELISRLEQRQEPWNVKRHETIAKPPAMSSHYTEDLLPEQCMQDSFQKVILRRYGSCGLEDLHLRKDGENVGECKDQKEIYNGLNQCLSTLPSKIFPYNKCVKVFSKSSNLNRENIRHTTEKLFKCMQCGKVFKSHSGLSYHKIIHTEEKLCICEECGKTFKWFSYLTKHKRIHTGEKPYKCEECGKAFNWCSSLTKHKRIHTGEKPYKCEECGKAFHWCSPFVRHKKIHTGEKPYTCEDCGRAFNRHSHLTKHKTIHTGKKPYKCKECGKAFNHCSLLTIHERTHTGEKPYKCEECGKAFNSSSILTEHKV [...]
+chr4-04	SwissProt	protein_match	266088	266420	293.000000	-	.	Target=P17019.3 76 187 +;percentID=50;Gap=M34 D5 M4 I4 M52 I2 M16 ;sequence=MGPLTFMDVAIEFSLEEWQCLDTAQQNLYRNVMLENYRNLVFLGIAVSNLDLITCLEQGKEPWNMKRHEMVAKPPAMCSHFAKDLRPEQYIKNSFQQVILRRYGKCGYQKGCKSVDEHKLHKGGHKGLNRCVTTTQSKIVQCDKYVKVFHKYSNAKRHKIRHTGKNPFKCKECGKSFCMLSQLTQHEIIHTGEKPYKCEECGKAFKKSSNLTNHKIIHTGEKPYKCEECGKAFNQSSTLTRHKIIHTGEKLYKCEECGKAFNRSSNLTKHKIVHTGEKPYKCEECGKAFKQSSNLTNHKKIHTGEKPYKCGECGKAFTLSSHLTTHKRIHTGEKPYKCEECGKAFSVFSTLTKHK [...]
+chr4-04	SwissProt	protein_match	266088	266411	296.000000	-	.	Target=Q5JVG8.1 79 192 +;percentID=53;Gap=M41 I4 M51 I2 M16 ;sequence=MGPLQFRDVAIEFSLEEWHCLDAAQRNLYRDVMLENYRNLIFLGIVVSKPNLITCLEQGKKPLTMKRHEMIAKPPVMYSHFAQDLWSEQSIKDSFQKVILRRYEKCRHDNLQLKKGCKSVDECPVHKRGYNGLKQCLATTQRKIFQCDEYVKFLHKFSNSNKHKIRDTGKKSFKCIEYGKTFNQSSTRTTYKKIDAGEKRYKCEECGKAYKQSSHLTTHKKIHTGEKPYKCEECGKAYKQSCNLTTHKIIHTGEKPYRCRECGKAFNHPATLFSHKKIHTGEKPYKCDKCGKAFISSSTLTKHEIIHTGEKPYKCEECGKAFNRSSNLTKHKRIHTGDVPYKCDECGKTFTWYSSLSKHKR [...]
+chr4-04	SwissProt	protein_match	266088	266417	298.000000	-	.	Target=Q8IYN0.1 109 224 +;percentID=53;Gap=M43 I4 M51 I2 M16 ;sequence=MDDPRYGMCPLKGASGCPGAERSLLVQSYFEKGPLTFRDVAIEFSLEEWQCLDSAQQGLYRKVMLENYRNLVFLAGIALTKPDLITCLEQGKEPWNIKRHEMVAKPPVICSHFPQDLWAEQDIKDSFQEAILKKYGKYGHDNLQLQKGCKSVDECKVHKEHDNKLNQCLITTQSNIFQCDPSAKVFHTFSNSNRHKIRHTRKKPFKCKKCEKSFCMLLHLTQHKRFHITENSYQCKDCGKAFNWFSTLTTHRRIHTGEKPYKCEECGKAFNRSSHLTTHKIIHTGEKPYRCEECGKAFNRSSHLTTHKRIHTGVKPYKCTECGKAFNRSSHLTTHRIIHTGEKPYKCEECGKAFNQSSTL [...]
+chr4-04	SwissProt	protein_match	266088	266411	298.000000	-	.	Target=A6NN14.3 88 199 +;percentID=52;Gap=M41 I4 M38 D2 M11 I2 M16 ;sequence=MPGAPGSLEMGPLTFRDVTIEFSLEEWQCLDTVQQNLYRDVMLENYRNLVFLGMAVFKPDLITCLKQGKEPWNMKRHEMVTKPPVMRSHFTQDLWPDQSTKDSFQEVILRTYARCGHKNLRLRKDCKSANEGKMHKEGYNKLNQCRTATQRKIFQCNKHMKVFHKYSNRNKVRHTKKKTFKCIKCSKSFFMLSCLIRHKRIHIRQNIYKCEERGKAFKSFSTLTKHKIIHTEDKPYKYKKCGNAFKFSSTFTKHKRIHTGETPFRCEECGKAFNQSSNLTDHKRIHTGEKTYKCEECGKAFKGSSNFNAHKVIHTAEKPYKCEDCGKTFNHFSALRKHKIIHTGKKPYKREECG [...]
+chr4-04	SwissProt	protein_match	266088	266411	298.000000	-	.	Target=O75346.2 79 191 +;percentID=53;Gap=M9 D1 M30 I4 M52 I2 M16 ;sequence=MGPLQFRDVAIEFSLEEWHCLDTAQRNLYRDVMLENYRNLVFLGIVVSKPDLVTCLEQGKKPLTMERHEMIAKPPVMSSHFAQDLWPENIQNSFQIGMLRRYEECRHDNLQLKKGCKSVGEHKVHKGGYNGLNQCLTTTQKEIFQCDKYGKVFHKFSNSNTYKTRHTGINLFKCIICGKAFKRSSTLTTHKKIHTGEKPYRCEECGKAFNQSANLTTHKRIHTGEKPYRCEECGKAFKQSSNLTTHKKIHTGEKPYKCEECGKAFNRSTDLTTHKIVHTGEKPYKCEECGKAFKHPSHVTTHKKIHTRGKPYNCEECGKSFKHCSNLTIHKRIHTGEKPYKCEECGKAFHLSSHL [...]
+chr4-04	SwissProt	protein_match	266088	266411	298.000000	-	.	Target=O75346-2.2 3 115 +;percentID=53;Gap=M9 D1 M30 I4 M52 I2 M16 ;sequence=MSSHFAQDLWPENIQNSFQIGMLRRYEECRHDNLQLKKGCKSVGEHKVHKGGYNGLNQCLTTTQKEIFQCDKYGKVFHKFSNSNTYKTRHTGINLFKCIICGKAFKRSSTLTTHKKIHTGEKPYRCEECGKAFNQSANLTTHKRIHTGEKPYRCEECGKAFKQSSNLTTHKKIHTGEKPYKCEECGKAFNRSTDLTTHKIVHTGEKPYKCEECGKAFKHPSHVTTHKKIHTRGKPYNCEECGKSFKHCSNLTIHKRIHTGEKPYKCEECGKAFHLSSHLTTHKILHTGEKPYRCRECGKAFNHSTTLFSHEKIHTGEKPYKCDECGKTFTWPSILSKHKRTHTGEKPYKCEECG [...]
+chr4-04	SwissProt	protein_match	266088	266417	301.000000	-	.	Target=P17038-2.4 72 187 +;percentID=54;Gap=M43 I4 M51 I2 M16 ;sequence=MDVAIEFCLEEWQCLDIAQQNLYRNVMLENYRNLVFLGIAVSKPDLITCLEQEKEPWEPMRRHEMVAKPPVMCSHFTQDFWPEQHIKDPFQKATLRRYKNCEHKNVHLKKDHKSVDECKVHRGGYNGFNQCLPATQSKIFLFDKCVKAFHKFSNSNRHKISHTEKKLFKCKECGKSFCMLPHLAQHKIIHTRVNFCKCEKCGKAFNCPSIITKHKRINTGEKPYTCEECGKVFNWSSRLTTHKKNYTRYKLYKCEECGKAFNKSSILTTHKIIRTGEKFYKCKECAKAFNQSSNLTEHKKIHPGEKPYKCEECGKAFNWPSTLTKHKRIHTGEKPYTCEECGKAFNQFSNLTTHKRIHT [...]
+chr4-04	SwissProt	protein_match	266088	266417	301.000000	-	.	Target=P17038.4 78 193 +;percentID=54;Gap=M43 I4 M51 I2 M16 ;sequence=MGPLTFMDVAIEFCLEEWQCLDIAQQNLYRNVMLENYRNLVFLGIAVSKPDLITCLEQEKEPWEPMRRHEMVAKPPVMCSHFTQDFWPEQHIKDPFQKATLRRYKNCEHKNVHLKKDHKSVDECKVHRGGYNGFNQCLPATQSKIFLFDKCVKAFHKFSNSNRHKISHTEKKLFKCKECGKSFCMLPHLAQHKIIHTRVNFCKCEKCGKAFNCPSIITKHKRINTGEKPYTCEECGKVFNWSSRLTTHKKNYTRYKLYKCEECGKAFNKSSILTTHKIIRTGEKFYKCKECAKAFNQSSNLTEHKKIHPGEKPYKCEECGKAFNWPSTLTKHKRIHTGEKPYTCEECGKAFNQFSNLTTHK [...]
+chr4-04	SwissProt	protein_match	266088	266417	303.000000	-	.	Target=Q96H40.3 77 192 +;percentID=52;Gap=M43 I4 M51 I2 M16 ;sequence=MESLQFRDVAVEFSLEEWHCLDTAQQNLYRDVMLENYRHLVFLGIIVSKPDLITCLEQGIKPLTMKRHEMIAKPPVVCSHFAQDLWPEQSIKDSYQKVILRKFEKCGHGNLHFKKGCESVDECKLHKRGYNGLNQCLTTTQSKIFQCGKYVKVFHQFSNSKRHKRRHTEKKPLKYIEGDKAFNQSSTHTTHKKIDTGEKPYKCEECGKAFNRSSCL
+chr4-04	SwissProt	protein_match	266088	266411	303.000000	-	.	Target=Q9H8G1.2 111 224 +;percentID=54;Gap=M41 I4 M51 I2 M16 ;sequence=MENLKSGVYPLKEASGCPGADRNLLVYSFYEKGPLTFRDVAIEFSLEEWQCLDTAQQDLYRKVMLENYRNLVFLAGIAVSKPDLITCLEQGKEPWNMKRHAMVDQPPVTYSHFAQDLWPEQGIKDSFQEVILRRYGKCGHEDLQLRTGCRSVDECNLHKECYDELNQCLTTTQSEIFQYDKYVNVFYKFSNPNIQKIRHTGKKPFKCKKCDKSFCMLLHLTQHKRIHIRENSYQCEECGKVFNWFSTLTRHRRIHTGEKPYKCEQCGKAFKQSSTLTTHKIIHTGEKPYRCEECGKTFNRSSHLTTHKRIHTGEKPYRCEECGRAFNRSSHLTTHKIIHTGEKPYKCEECGKAFNQSSTL [...]
+chr4-04	SwissProt	protein_match	266088	266417	305.000000	-	.	Target=A6NK75.3 45 160 +;percentID=56;Gap=M43 I4 M51 I2 M16 ;sequence=MLENYRNLVFVGIAASKPDLITCLEQGKEPWNVKRHEMVTEPPVVYSYFAQDLWPKQGKKNYFQKVILRTYKKCGRENLQLRKYCKSMDECKVHKECYNGLNQCLTTTQNKIFQYDKYVKVFHKFSNSNRHKIGHTGKKSFKCKECEKSFCMLSHLAQHKRIHSGEKPYKCKECGKAYNEASNLSTHKRIHTGKKPYKCEECGKAFNRLSHLTTHKIIHTGKKPYKCEECGKAFNQSANLTTHKRIHTGEKPYKCEECGRAFSQSSTLTAHKIIHAGEKPYKCEECGKAFSQSSTLTTHKIIHTGEKFYKCEECGKAFSRLSHLTTHKRIHSGEKPYKCEECGKAFKQSSTLTTHKRIHAG [...]
+chr4-04	SwissProt	protein_match	266088	266417	306.000000	-	.	Target=A8MTY0.2 77 189 +;percentID=56;Gap=M43 I4 M38 D4 M7 I1 M2 I2 M16 ;sequence=MGPLTFMDVAIEFSVEEWQCLDTAQQNLYRNVMLENYRNLVFLGIAVSKPDLITCLEQGKEPWNMERHEMVAKPPGMCCYFAQDLRPEQSIKASLQRIILRKYEKCGHHNLQLKKGYKSVDEYKVHKGSYNGFNQCLTTTQSKIFQCDKYVKDFHKFSNSNRHKTEKNPFKCKECGKSFCVLSHLTQHKRIHTTVNSYKLEECGKAFNVSSTLSQHKRIHTGDKPYKCEECGKAFNVSSTLTQHKRIHTGEKPYKCEECGKAFNVSSTLTQHKRIHTGEKPYKCEECGKAFNTSSHLTTHKRIHTGEKPYKCEECGKAFNQFSQLTTHKIIHTGEKPYKCKECGKAFKR [...]
+chr4-04	SwissProt	protein_match	266088	266420	307.000000	-	.	Target=Q96N38-2.1 48 164 +;percentID=53;Gap=M44 I4 M51 I2 M16 ;sequence=MNVMLENYKNLVFLAGIAVSKQDPITSLEQEKEPWNMKICEMVDESPAMCSSFTRDLWPEQDIKDSFQQVILRRHGKCEHENLQLRKGSANVVECKVYKKGYNELNQCLTTTQSKIFPCDKYIKVFHKIFNSNRHKTRHTGEKPFKCKKCDESFCMLLHLHQHKRIHIRENSYQCEECDKVFKRFSTLTRHKRVHTGEKPFKCEECGKAFKHSSTLTTHKMIHTGEKPYRCEECGKAFYHSSHLTTHKVIHTGEKPFKCEECGKAFNHPSALTTHKFIHVKEKPYKCEECDKAFNRFSYLTKHKIIHSGEKSYKCEQCGKGFNWSSTLTKHRRIHTGEKPYKCEECGKAFNVSSHLTTH [...]
+chr4-04	SwissProt	protein_match	266088	266420	307.000000	-	.	Target=Q96N38.1 48 164 +;percentID=53;Gap=M44 I4 M51 I2 M16 ;sequence=MNVMLENYKNLVFLAGIAVSKQDPITSLEQEKEPWNMKICEMVDESPAMCSSFTRDLWPEQDIKDSFQQVILRRHGKCEHENLQLRKGSANVVECKVYKKGYNELNQCLTTTQSKIFPCDKYIKVFHKIFNSNRHKTRHTGEKPFKCKKCDESFCMLLHLHQHKRIHIRENSYQCEECDKVFKRFSTLTRHKRVHTGEKPFKCEECGKAFKHSSTLTTHKMIHTGEKPYRCEECGKAFYHSSHLTTHKVIHTGEKPFKCEECGKAFNHPSALTTHKFIHVKEKPYKCEECDKAFNRFSYLTKHKIIHSGEKSYKCEQCGKGFNWSSTLTKHRRIHTGEKPYKCEECGKAFNVSSHLTTHKM [...]
+chr4-04	SwissProt	protein_match	266088	266417	308.000000	-	.	Target=Q03938.2 77 192 +;percentID=52;Gap=M43 I4 M51 I2 M16 ;sequence=MGPLEFRDVAIEFSLEEWHCLDTAQQNLYRDVMLENYRHLVFLGIVVTKPDLITCLEQGKKPFTVKRHEMIAKSPVMCFHFAQDLCPEQSLKDSFQKVIVTRYEKREYGNLELKKGCESVDEGKVHKRGYNGLNQCLTATQSKVFQCDTYVKVSHIFSNSNRHKIRDTGKKPFKCIECGKAFNQSSTLATHKKIHTGEITCKCEECGKAFNRSSHLT
+chr4-04	SwissProt	protein_match	266088	266420	310.000000	-	.	Target=O14628-4.2 76 191 +;percentID=58;Gap=M44 I4 M5 D1 M45 I2 M16 ;sequence=MTLLTFRDVAIEFSLEEWKCLDLAQQNLYRDVMLENYRNLFSVGLTVCKPGLITCLEQRKEPWNVKRQEAADGHPAMSSHFTQDLLPEQGIQDAFPKRILRGYGNCGLDNLYLRKDWESLDECKLQKDYNGLNQCSSTTHSKIFQYNKYVKIFDNFSNLHRRNISNTGEKPFKCQECGKSFQMLSFLTEHQKIHTGKKFQKCGECGKTFIQCSHFTEPENIDTGEKPYKCQECNNVIKTCSVLTKNRIYAGGEHYRCEEFGKVFNQCSHLTEHEHGTEEKPCKYEECSSVFISCSSLSNQQMILAGEKLSKCETWYKGFNHSPNPSKHQRNEIGGKPFKCEECDSIFKWFSDL [...]
+chr4-04	SwissProt	protein_match	266088	266420	310.000000	-	.	Target=O14628-7.2 80 195 +;percentID=58;Gap=M44 I4 M5 D1 M45 I2 M16 ;sequence=MAGAQTLLTFRDVAIEFSLEEWKCLDLAQQNLYRDVMLENYRNLFSVGLTVCKPGLITCLEQRKEPWNVKRQEAADGHPAMSSHFTQDLLPEQGIQDAFPKRILRGYGNCGLDNLYLRKDWESLDECKLQKDYNGLNQCSSTTHSKIFQYNKYVKIFDNFSNLHRRNISNTGEKPFKCQECGKSFQMLSFLTEHQKIHTGKKFQKCGECGKTFIQCSHFTEPENIDTGEKPYKCQECNNVIKTCSVLTKNRIYAGGEHYRCEEFGKVFNQCSHLTEHEHGTEEKPCKYEECSSVFISCSSLSNQQMILAGEKLSKCETWYKGFNHSPNPSKHQRNEIGGKPFKCEECDSIFKW [...]
+chr4-04	SwissProt	protein_match	266088	266423	311.000000	-	.	Target=O14628-5.2 124 240 +;percentID=57;Gap=M45 I4 M5 D1 M45 I2 M16 ;sequence=MTLLTFRDVAIEFSLEEWKCLDLAQQNLYRDVMLENYRNLFSVGLTVCKPGLITCLEQRKEPWNVKRQEAADGHPEMGFHHATQACLELLGSSDLPASASQSAGITGVNHRAQPGLNVSVDKFTAMSSHFTQDLLPEQGIQDAFPKRILRGYGNCGLDNLYLRKDWESLDECKLQKDYNGLNQCSSTTHSKIFQYNKYVKIFDNFSNLHRRNISNTGEKPFKCQECGKSFQMLSFLTEHQKIHTGKKFQKCGECGKTFIQCSHFTEPENIDTGEKPYKCQECNNVIKTCSVLTKNRIYAGGEHYRCEEFGKVFNQCSHLTEHEHGTEEKPCKYEECSSVFISCSSLSNQQMI [...]
+chr4-04	SwissProt	protein_match	266088	266423	311.000000	-	.	Target=O14628-6.2 128 244 +;percentID=57;Gap=M45 I4 M5 D1 M45 I2 M16 ;sequence=MAGAQTLLTFRDVAIEFSLEEWKCLDLAQQNLYRDVMLENYRNLFSVGLTVCKPGLITCLEQRKEPWNVKRQEAADGHPEMGFHHATQACLELLGSSDLPASASQSAGITGVNHRAQPGLNVSVDKFTAMSSHFTQDLLPEQGIQDAFPKRILRGYGNCGLDNLYLRKDWESLDECKLQKDYNGLNQCSSTTHSKIFQYNKYVKIFDNFSNLHRRNISNTGEKPFKCQECGKSFQMLSFLTEHQKIHTGKKFQKCGECGKTFIQCSHFTEPENIDTGEKPYKCQECNNVIKTCSVLTKNRIYAGGEHYRCEEFGKVFNQCSHLTEHEHGTEEKPCKYEECSSVFISCSSLSN [...]
+chr4-04	SwissProt	protein_match	266088	266417	312.000000	-	.	Target=A6NK21.3 77 192 +;percentID=57;Gap=M37 I3 M6 I1 M51 I2 M16 ;sequence=MGVLTFRDVAIEFSLEEWHCLDTAQQNLYRNVMLENYRNLVFLGIAASKPDLITCLEQGKEPWNVKRHEMVAEPPVVCSYFAQDLWPNQGIKNCFQKVILRRYKKCGHENLQLGKYRKSMDECKVHEECCNGFNQCSRTTQSKILQCDKYVKVFHKFSNSNRYKIRHTGKKPFKCKECEKSFFMLSHSAQHKRIHSGEKPYKCKECGKAYNEASNLSTHKRIHTGKKPYKCEDCGKAFNWLSHLTTQKIIHTGKKPYKCEDCGKAFNQSANLTTHKRIHTGEKPYKCEECGKAFSQSSTLTTHKIIHAGEKPYKCEECGKSFNQSSVLHLTTRKRIHSGEKPYKCEECGKAFKQS [...]
+chr4-04	SwissProt	protein_match	266088	266408	314.000000	-	.	Target=Q03924-2.3 16 128 +;percentID=55;Gap=M43 I4 M48 I2 M16 ;sequence=MKRHEMVAKHLVMFYYFAQHLWPEQNIRDSFQKVTLRRYRKCGYENLQLRKGCKSVVECKQHKGDYSGLNQCLKTTLSKIFQCNKYVEVFHKISNSNRHKMRHTENKHFKCKECRKTFCMLSHLTQHKRIHTRVNFYKCEAYGRAFNWSSTLNKHKRIHTGEKPYKCKECGKAFNQTSHLIRHKRIHTEEKPYKCEECGKAFNQSSTLTTHNIIHTGEIPYKCEKCVRAFNQASKLTEHKLIHTGEKRYECEECGKAFNRSSKLTEHKYIHTGEKLYKCEECDKAFNLSSTLTKHKVIHTGEKLYKCKECGKAFKQFSHLAIHNIIHTGEKLYKCEECGKAFNSSSNLTAHKKNRTGEK [...]
+chr4-04	SwissProt	protein_match	266088	266432	314.000000	-	.	Target=O14628.2 144 263 +;percentID=57;Gap=M48 I4 M5 D1 M45 I2 M16 ;sequence=MTLLTFRDVAIEFSLEEWKCLDLAQQNLYRDVMLENYRNLFSVGLTVCKPGLITCLEQRKEPWNVKRQEAADGHPEMGFHHATQACLELLGSSDLPASASQSAGITGVNHRAQPGLNVSVDKFTALCSPGVLQTVKWFLEFRCIFSLAMSSHFTQDLLPEQGIQDAFPKRILRGYGNCGLDNLYLRKDWESLDECKLQKDYNGLNQCSSTTHSKIFQYNKYVKIFDNFSNLHRRNISNTGEKPFKCQECGKSFQMLSFLTEHQKIHTGKKFQKCGECGKTFIQCSHFTEPENIDTGEKPYKCQECNNVIKTCSVLTKNRIYAGGEHYRCEEFGKVFNQCSHLTEHEHGTEEKPC [...]
+chr4-04	SwissProt	protein_match	266088	266408	314.000000	-	.	Target=Q03924.3 16 128 +;percentID=55;Gap=M43 I4 M48 I2 M16 ;sequence=MKRHEMVAKHLVMFYYFAQHLWPEQNIRDSFQKVTLRRYRKCGYENLQLRKGCKSVVECKQHKGDYSGLNQCLKTTLSKIFQCNKYVEVFHKISNSNRHKMRHTENKHFKCKECRKTFCMLSHLTQHKRIHTRVNFYKCEAYGRAFNWSSTLNKHKRIHTGEKPYKCKECGKAFNQTSHLIRHKRIHTEEKPYKCEECGKAFNQSSTLTTHNIIHTGEIPYKCEKCVRAFNQASKLTEHKLIHTGEKRYECEECGKAFNRSSKLTEHKYIHTGEKLYKCEECDKAFNLSSTLTKHKVIHTGEKLYKCKECGKAFKQFSHLAIHNIIHTGEKLYKCEECGKAFNSSSNLTAHKKNRTGEKPY [...]
+chr4-04	SwissProt	protein_match	266088	266417	315.000000	-	.	Target=O43345.1 77 192 +;percentID=56;Gap=M43 I4 M50 I2 M17 ;sequence=MGSLTFRDVAIEFSLEEWQCLDTAQQNLYRNVMLENYRNLVFLGIAAFKPDLIIFLEEGKESWNMKRHEMVEESPVICSHFAQDLWPEQGIEDSFQKVILRRYEKCGHENLHLKIGYTNVDECKVHKEGYNKLNQSLTTTQSKVFQRGKYANVFHKCSNSNRHKIRHTGKKHLQCKEYVRSFCMLSHLSQHKRIYTRENSYKCEEGGKAFNWSSTLTYYKSAHTGEKPYRCKECGKAFSKFSILTKHKVIHTGEKSYKCEECGKAFNQSAILTKHKIIHTGEKPNKCEECGKAFSKVSTLTTHKAIHAGEKPYKCKECGKAFSKVSTLITHKAIHAGEKPYKCKECGKAFSKFSILTKHKV [...]
+chr4-04	SwissProt	protein_match	266088	266411	315.000000	-	.	Target=A6NF79.3 91 203 +;percentID=57;Gap=M41 I4 M5 D1 M45 I2 M16 ;sequence=MAKRPGPPGSREMGLLTFRDIAIEFSLEEWQCLDCAQRNLYRDVMLENYRNLVSLGIAVSKPDLITCLEQNKESQNIKRNEMVAKRPVTRSHFTQDLQPEQGIKDSLQKVIPRTYGKCGHEKLQFKKCCKSVGECEVPKGYSEVNQCLSTTQNKIFQTHKYVKVFGKFSNSNRDKTRYTGKKHFKCNKYGKSFCMLSHLNQHQVIHTREKSYKCKECGKSFNCSSNHTTHKIIHTGEKPYRCEECGKAFSWSANLTRHKRTHTGEKPYTCEECGQAFRRSSALTNHKRIHTGGRPYKCEECGKAFSVSSTLTDHKRIHTGEKPCRCEECGKAFSWSSNLSRHKRIHTREKPYACE [...]
+chr4-04	SwissProt	protein_match	266088	266411	315.000000	-	.	Target=A6NKZ1.3 91 203 +;percentID=57;Gap=M41 I4 M5 D1 M45 I2 M16 ;sequence=MAKRPGPPGSREMGLLTFRDIAIEFSLEEWQCLDCAQRNLYRHVMLENYRNLVSLGIAVSKPDLITCLEQNKESQNIKRNEMVAKRPVTHSHFTQDLQPEQGIKDSLQKVIPRTYGKCGHEKLQFKKCCKSVGECEVPKGYSEVNQCLSTTQNKIFQTHKYVKVFGKFSNSNRDKTRYTGKKHFKCNKYGKSFCMLSHLNQHQVIHTREKSYKCKECGKSFNCSSNHTTHKIIHTGEKPYRCEECGKAFSWSANLTRHKRIHTGEKPYTCEECGQAFRRSSALTNHKRIHTGGRPYKCEECGKAFSVSSTLTDHKRIHTGEKPCRCEECGKAFSWSSNLTRHKRIHTRKPYACEE [...]
+chr4-04	SwissProt	protein_match	266088	266423	316.000000	-	.	Target=P52744.2 12 129 +;percentID=55;Gap=M45 I4 M50 I2 M17 ;sequence=MKRHEMVVAKHSALCSRFAQDLWLEQNIKDSFQKVTLSRYGKYGHKNLQLRKGCKSVDECKGHQGGFNGLNQCLKITTSKIFQCNKYVKVMHKFSNSNRHKIRHTENKHFRCKECDKSLCMLSRLTQHKKIHTRENFYKCEECGKTFNWSTNLSKPKKIHTGEKPYKCEVCGKAFHQSSILTKHKIIRTGEKPYKCAHCGKAFKQSSHLTRHKIIHTEEKPYKCEQCGKVFKQSPTLTKHQIIYTGEEPYKCEECGKAFNLS
+chr4-04	SwissProt	protein_match	266088	266417	318.000000	-	.	Target=O75437.3 86 201 +;percentID=56;Gap=M43 I4 M51 D1 M8 I3 M7 ;sequence=MPGPPRSLEMGLLTFRDVAIEFSLEEWQHLDIAQQNLYRNVMLENYRNLAFLGIAVSKPDLITCLEQGKEPWNMKRHEMVDEPPGMCPHFAQDLWPEQGMEDSFQKAILRRYGKYGHENLQLRKGCKSVDEYKVNKEGYNGLNQCFTTAQSKVFQCDKYLKVFYKFLNSNRPKIRHTEKKSFKCKKRVKLFCMLSHKTQHKSIYHREKSYKCKECGKTFNWSSTLTNHRKIYTEEKPYKCEEYNKSPKQLSTLTTHEIIHAGEKLYKCEECGEAFNRSSNLTTHKIIHTGEKPYKCEECGKAFIWSSTLTEHKKIHTRKKPYKCEECGKAFIWSSTLTRHKRMHTGEKPYKCEECG [...]
+chr4-04	SwissProt	protein_match	266088	266417	318.000000	-	.	Target=O75437-2.3 86 201 +;percentID=56;Gap=M43 I4 M51 D1 M8 I3 M7 ;sequence=MPGPPRSLEMGLLTFRDVAIEFSLEEWQHLDIAQQNLYRNVMLENYRNLAFLGIAVSKPDLITCLEQGKEPWNMKRHEMVDEPPGMCPHFAQDLWPEQGMEDSFQKAILRRYGKYGHENLQLRKGCKSVDEYKVNKEGYNGLNQCFTTAQSKVFQCDKYLKVFYKFLNSNRPKIRHTEKKSFKCKKRVKLFCMLSHKTQHKSIYHREKSYKCKECGKTFNWSSTLTNHRKIYTEEKPYKCEEYNKSPKQLSTLTTHEIIHAGEKLYKCEECGEAFNRSSTFTKHKVIHTGVKPYKCEECGKAFFWSSTLTKHKRIHTGEQPYKWEKFGKAFNRSSHLTTDKITHWREILQV
+chr4-04	SwissProt	protein_match	266088	266417	324.000000	-	.	Target=Q9Y2Q1.1 77 192 +;percentID=55;Gap=M43 I4 M48 I2 M19 ;sequence=MGPLTIRDVTVEFSLEEWHCLDTAQQNLYRDVMLENYRNLVFLGIAVSKPDLITCLEQGKEPCNMKRHEMVAKPPVMCSHIAEDLCPERDIKYFFQKVILRRYDKCEHENLQLRKGCKSVDECKVCKGGYNGLNQCLITTQSKMYQCDKYVKVFYKFSNSDRHKIRHTEKKTCKCKECGKAFNQSSALTRHKMTHTGEKPYKCEECGKAFNRSSHLTQHKVIHTREKPYKCEECGKAFNRSSHITQHKRIHNREKPFKYDECCKAFKWSSALTTLTQHKRIHTGEKPYKCEECGKAFNQSSALTRHKMIHTGEKPFQCEECGKAFNRSSHLTQHKIIHTKEKPYKCEECGKAFNRSSHLTK [...]
+chr4-04	SwissProt	protein_match	266088	266417	326.000000	-	.	Target=Q8IYX0.1 89 203 +;percentID=59;Gap=M37 D1 M5 I4 M51 I2 M16 ;sequence=MAKRPGSPGSREMGLLTFRDVVIEFSLEEWQCLDHAQQNLYRDVMLENYRNLVSLGIAVSKPDLITCLEQNKEPWNIKRNEMVTKHPVMCSHFTQDLPPELGIKDSLQKVIPRRYGKSGHDNLQVKTCKSMGECEVQKGGCNEVNQCLSTTQNKIFQTHKCVKVFGKFSNSNRHKTRHTGKKHFKCKKYGKSFCMVSQLHQHQIIHTRENSYQCEECGKPFNCSSTLSKHKRIHTGEKPYRCEECGKAFTWSSTLTKHRRIHTGEKPYTCEECGQAFSRSSTLANHKRIHTGEKPYTCEECGKAFSLSSSLTYHKRIHTGEKPYTCEKCGKAFNCSSTLKKHKIIHTGEKPYKCK [...]
+chr4-04	SwissProt	protein_match	266088	266417	327.000000	-	.	Target=Q03936.2 77 192 +;percentID=58;Gap=M43 I4 M51 D1 M1 I3 M14 ;sequence=MGPLTFRDVKIEFSLEEWQCLDTAQRNLYRDVMLENYRNLVFLGIAVSKPDLITWLEQGKEPWNLKRHEMVDKTPVMCSHFAQDVWPEHSIKDSFQKVILRTYGKYGHENLQLRKDHKSVDACKVYKGGYNGLNQCLTTTDSKIFQCDKYVKVFHKFPNVNRNKIRHTGKKPFKCKNRGKSFCMLSQLTQHKKIHTREYSYKCEECGKAFNWSSTLTKHKIIHTGEKPYKCEECGKAFNRSSNLTKHKIIHTGEKPYKCEECGKAFNRSSTLTKHKRIHTEEKPYKCEECGKAFNQFSILNKHKRIHMEDKPYKCEECGKAFRVFSILKKHKIIHTGEKPYKCEECGKAFNQFSN [...]
+chr4-04	SwissProt	protein_match	266088	266417	327.000000	-	.	Target=Q03936-2.2 8 123 +;percentID=58;Gap=M43 I4 M51 D1 M1 I3 M14 ;sequence=MVDKTPVMCSHFAQDVWPEHSIKDSFQKVILRTYGKYGHENLQLRKDHKSVDACKVYKGGYNGLNQCLTTTDSKIFQCDKYVKVFHKFPNVNRNKIRHTGKKPFKCKNRGKSFCMLSQLTQHKKIHTREYSYKCEECGKAFNWSSTLTKHKIIHTGEKPYKCEECGKAFNRSSNLTKHKIIHTGEKPYKCEECGKAFNRSSTLTKHKRIHTEEKPYKCEECGKAFNQFSILNKHKRIHMEDKPYKCEECGKAFRVFSILKKHKIIHTGEKPYKCEECGKAFNQFSNLTKHKIIHTGEKPYKCDECGKAFNQSSTLTKHKRIHTGEKPYKCEECGKAFKQSSTLTEHKIIHTGEK [...]
+chr4-04	SwissProt	protein_match	266088	266459	329.000000	-	.	Target=A6NP11.3 63 192 +;percentID=52;Gap=M57 I4 M51 D1 M1 I3 M14 ;sequence=MGLLTFRDIAIEFSLAEWQCLDHAQQNLYRDVMLENYRNLVSLGIAVSKPDLITCLEQNKEPQNIKRNEMVAKHPVTCSHFTQDLQSEQGIKDSLQKVILRRYGKCGQEDLQVKKCCKSVGECEVHKGGYNYVNQCLSATQNKTFQTHKCVKVFGKFSNSNRHKTRHTGKKHFKCKNDGKSFCMLSRLNQHQIIHTREKSYKCEECGKSFNCSSTLTRHKRIHTGEKPYRCEECGKAFSWSASLTKHKRIHTGEKPYTCEERGKVFSRSTLTNYKRIHTGEKPYTCEECGKAFSRSSTLTNHKRIHTGERPYKCEECGKAFSLSSTLKKHKIVHTGEKLYTCEECGKAFTFSSTL [...]
+chr4-04	SwissProt	protein_match	266088	266417	330.000000	-	.	Target=Q9P255.2 45 160 +;percentID=58;Gap=M43 I4 M51 I2 M16 ;sequence=MLENYRNLVFVGIAASKPDLITCLEQGKEPWNVKRHEMVAEPPVVCSYFARDLWPKQGKKNYFQKVILRRYKKCGCENLQLRKYCKSMDECKVHKECYNGLNQCLTTTQNKIFQCDKYVKVFHKFSNSNRHTIRHTGKKSFKCKECEKSFCMLSHLAQHKRIHSGEKPYKCKECGKAYNETSNLSTHKRIHTGKKPYKCEECGKAFNRLSHLTTHKIIHTGKKPYKCEECGKAFNQSANLTTHKRIHTGEKPYKCEECGRAFSQSSTLTAHKIIHAGEKPYKCEECGKAFSQSSTLTTHKIIHTGEKFYKCEECGKAFSQLSHLTTHKRIHSGEKPYKCEECGKAFKQSSTLTTHKRIHAG [...]
+chr4-04	SwissProt	protein_match	266088	266441	330.000000	-	.	Target=Q03936-3.2 39 160 +;percentID=58;Gap=M2 D1 M3 D1 M44 I4 M51 D1 M1 I3 M14 ;sequence=MGPLTFRDVKIEFSLEEWQCLDTAQRNLYRDVMLENYRNLVFLVMCSHFAQDVWPEHSIKDSFQKVILRTYGKYGHENLQLRKDHKSVDACKVYKGGYNGLNQCLTTTDSKIFQCDKYVKVFHKFPNVNRNKIRHTGKKPFKCKNRGKSFCMLSQLTQHKKIHTREYSYKCEECGKAFNWSSTLTKHKIIHTGEKPYKCEECGKAFNRSSNLTKHKIIHTGEKPYKCEECGKAFNRSSTLTKHKRIHTEEKPYKCEECGKAFNQFSILNKHKRIHMEDKPYKCEECGKAFRVFSILKKHKIIHTGEKPYKCEECGKAFNQFSNLTKHKIIHTGEKPYKCDE [...]
+chr4-04	SwissProt	protein_match	266088	266411	330.000000	-	.	Target=Q96JC4.1 91 204 +;percentID=58;Gap=M41 I4 M51 I2 M16 ;sequence=MAKRPGPPGSREMGLLTFRDIAIEFSLEEWQCLDCAQRNLYRDVMLENYRNLVSLGIAVSKPDLITCLEQNKESQNIKRNEMVAKHPVTRSHFTQDLQPEQGIKDSLQKVIPRTYGKCGHEKLQFKKCCKSVGEYEVHKGGYSEVNQCLSTTQNKIFQTHKYVKVFGKFSNSNRDKTRYTGNKHFKCNKYGKSFCMLSHLNQHQVIHTREKSYKCKECGKSFNCSSNHTTHKIIHTGEKPYRCEECGKAFSWSANLTRHKRTHTGEKPYTCEECGQAFRRSSALTNHKRIHTGERPYKCEECGKAFSVSSTLTDHKRIHTGEKPCRCEECGKAFSWSSNLTRHKRIHTREKPYACEECGQA [...]
+chr4-04	SwissProt	protein_match	266088	266420	330.000000	-	.	Target=Q8TF32.2 107 223 +;percentID=56;Gap=M42 I4 M53 I2 M16 ;sequence=MDDLKYGVYPLKEASGCPGAERNLLVYSYFEKETLTFRDVAIEFSLEEWECLNPAQQNLYMNVMLENYKNLVFLGVAVSKQDPVTCLEQEKEPWNMKRHEMVDEPPAMCSYFTKDLWPEQDIKDSFQQVILRRYGKCEHENLQLRKGSASVDEYKVHKEGYNELNQCLTTTQSKIFPCDKYVKVFHKFLNANRHKTRHTGKKPFKCKKCGKSFCMLLHLSQHKRIHIRENSYQCEECGKAFKWFSTLTRHKRIHTGEKPFKCEECGKAFKQSSTLTTHKIIHTGEKPYRCEECGKAFNRSSHLTTHKIIHTGEKPYKCEECGKAFNQSSTLSTHKFIHAGEKPYKCEECDKAFNRFSYLT [...]
+chr4-04	SwissProt	protein_match	266088	266417	333.000000	-	.	Target=A8MXY4.2 98 213 +;percentID=54;Gap=M43 I4 M51 I2 M16 ;sequence=MSFWSEKCTRLILYDLKIALKNGSLTFWDVTIEFALEEWQCLDMAQQNLYRNVMLENYRNLVFLGIAVSKLDLITCLKQGKEPWNMKRHEMVTKPPVISSHFTQDFWPDQSIKDSFQEIILRTYARCGHKNLRLRKDCESVNEGKMHEEAYNKLNQCWTTTQGKIFQCNKYVKVFHKYSNSNRYKIIHTGKKPYKCEECGKAFKQSSHLTRHKAIHTGEKPYKCEECGKAFNHFSALRKHQIIHTGKKPYKCEECGKAFSQSSTLRKHEIIHTEEKPYKYEECGKAFSNLSALRKHEIIHTGQKPYKCEECGKAFKWSSKLTVHKVIHTAEKPCKCEECGKAFKRFSALRKHKIIHTGKQP [...]
+chr4-04	SwissProt	protein_match	266088	266417	333.000000	-	.	Target=Q68DY1-2.2 1 116 +;percentID=55;Gap=M41 I4 M53 I2 M16 ;sequence=MCSHFAQDLWPEQSMKDSFQKVVLRRYEKCEHDNLQLKKGCISVDECKVHKEGYNELNQCLTTTPRKICQCDKYVKVLHQFPNSNGQKRGHTGKKPFKYIECGKAFKQFSTLTTHKKIHTGGKPYKCEECGKAFNHSCSLTRHKKIHTGEKPYKCEECGKAFKHSSTLTTHKRNHTGEKPYKCDKCGKAFMSSSTLSKHEIIHTEKKPYKCEECGKAFNRSSTLTTHKIIHTGEKPYKCEECDKAFKYSYTLTTHKRIHTEDKPYKCEECGKAFKYSSTLTTHKRIHTGEKPYKCEECGKAFKRSSDLTTHKIIHTGEKPYKCEECGKAFKYSSNLTTHKKIHTGERPYKCEECGKAFNQ [...]
+chr4-04	SwissProt	protein_match	266088	266417	333.000000	-	.	Target=Q8N7Q3.2 45 160 +;percentID=56;Gap=M43 I4 M51 I2 M16 ;sequence=MLENYRNLVFLGIAAFKPDLIIFLEQGKEPWNMKRHEMVEEPPVICSHFSQEFWPEQGIEDSFQKMILRRYDKCGHENLHLKISCTNVDECNVHKEGYNKLNQSLTTTQSKVFQCGKYANVFHKCSNSNRHKIRHTGEKGLKCKEYVRSFCMLSHLSQHERIYTRENSYKCEENGKAFNWSSTLTYYKSIHTGEKPYKCEECGKAFSKFSILTKHKVIHTGEKPYKCEECGKAFNRSSILTKHKIIHTGEKPYKCEECGKGFSSVSTLNTHKAIHAEEKPYKCEECGKASNSSSKLMEHKRIHTGEKPYKCEECGKAFSWSSSLTEHKRIHAGEKPYKCEECGKAFNRSSILTKHKIIHTG [...]
+chr4-04	SwissProt	protein_match	266088	266408	334.000000	-	.	Target=Q9UII5.1 11 123 +;percentID=59;Gap=M43 I4 M48 I2 M16 ;sequence=MVAKPPVMSFHFAQDLWPEQNIKDSFQKVTLRRYGKCEYENLQLRKGCKHVDECTGHKGGHNTVNQCLTATPSKIFQCNKYVKVFDKFSNSNRYKRRHTGNKHFKCKECSKSFCVLSQLTQHRRIHTRVNSYKCEECGKAFNWFSTLTKHKRIHTGEKPYKCEECGKAFNQSSQLTRHKIIHTEEKPNKCEECGKAFKQASHLTIHKIIHTGEKPYKYEECGKVFSQSSHLTTQKILHTGENLYKCKECGKAFNLFSNLTNHKRIHAGEKPYKCKECGRAFNISSNLNKQEKIHTGGKLNKCEECDKAFNRSLKLTAHKKILMEEKPYKCEECGKVFNQFSTLTRHKIIHTGEKPYKCKEC [...]
+chr4-04	SwissProt	protein_match	266088	266423	334.000000	-	.	Target=O75373.2 75 192 +;percentID=55;Gap=M45 I4 M51 I2 M16 ;sequence=MGPLQFRDVAIEFSLEEWHCLDTAQRNLYRNVMLENYRNLVFLGIVVSKPDLITCLEQGKKPLTMKKHEMVANPSVTCSHFARDLWPEQSIKDSFQKVTLRRYENYGHDNLQFKKGCESVDECKVHKRGYNGLNQYLTTTQSKIFQCDKYVKVIHKFSNSNRHKIRHTGKKPFKCIECGKAFNQSSTLTTHKKIHTGEKPFKCEECGKAFNWSSHLTTHKRIHTGEKRYKCEDCGKAFSRFSYLTAHKIIHSGEKPYKCEECGKAFKRSSNLTTHKIIHTGEKPYKCEECGKAFKRSSILTAHKIIHSGEKPYKCEECGKAFKHPSVLTTHKRIHTGEKPYKCEECGRAFKYFSSLTTHKI [...]
+chr4-04	SwissProt	protein_match	266088	266417	335.000000	-	.	Target=Q8TD23.2 77 191 +;percentID=56;Gap=M37 D1 M5 I4 M51 I2 M16 ;sequence=MGLLTFRDVAIEFSLEEWQCLDTAQRNLYKNVILENYRNLVFLGIAVSKQDLITCLEQEKEPLTVKRHEMVNEPPVMCSHFAQEFWPEQNIKDSFEKVTLRRYEKCGNDNFQLKGCKSVDECKVHKGGYNGLNQCLPTMQSKMFQCDKYVKVFNKFSHSDRHKIKHMENKPFKCKECGRSFCMLSHLTRHERNYTKVNFCKCEECEKAVNQSSKLTKHKRIYTCEKLYKCQECDRTFNQFSNLTEYKKDYAREKPYKCEECGKAFNQSSHLTTHKIIHTGEKPYKCEECGKAFNQFSNLTTHKKIHTGEQPYICEECGKAFTQSSTLTTHKRIHTGEKPYKCEECGKAFNRSSKL [...]
+chr4-04	SwissProt	protein_match	266088	266450	335.000000	-	.	Target=A6NNF4.3 66 192 +;percentID=53;Gap=M54 I4 M51 I2 M16 ;sequence=MGLLTFRDVAIEFSLEEWQCLDTAQKNLYRNVMLENYRNLAFLGIAVSKPDLIICLEKEKEPWNMKRDEMVDEPPGICPHFAQDIWPEQGVEDSFQKVILRRFEKCGHENLQLRKGCKSVDECKVHKEGYNGLNQCFTTTQGKASQCGKYLKVFYKFINLNRYKIRHTRKKPFKCKNCVKSFCMFSHKTQHKSIYTTEKSYKCKECGKTFNWSSTLTNHKKTHTEEKPYKCEEYGKAFNQSSNYTTHKVTHTGEKPYKCEECGKAFSQSSTLTIHKRIHTGEKPCKCEECGKAFSQPSALTIHKRMHIGEKPYKCEECGKAFVWSSTLTRHKRLHSGEKPYKCEECAKAFSQFGHLTTHRI [...]
+chr4-04	SwissProt	protein_match	266088	266417	338.000000	-	.	Target=Q6ZMV8.1 77 192 +;percentID=57;Gap=M43 I4 M51 I2 M16 ;sequence=MGALTFRDVAIEFSLEEWQCLDTEQQNLYRNVMLDNYRNLVFLGIAVSKPDLITCLEQEKEPWNLKTHDMVAKPPVICSHIAQDLWPEQGIKDYFQEVILRQYKKCRHENLLLRKGCKNVDEFKMHKKGYNRHNQCLTTSHSKIFQCDKYVKVFHKFSNSNRHKIRHTSKKPFKCKECGKLFCILSHLAQHKKIHTGEKSYKCEEYGKAFNESSNCTTHKRITEKKPYKCKECGKAFNWFSHFTTHKRIHTGEKPYQCEKCGKFFNQSTNLTTHKRIHTGEKPYKCEECGKAFNQSSNLTEHKKIHTKEQPYKCEKCGKAFKWSSTLTKHKRIHNGEKPYKCEECGKAFNRSSTLNRHKIT [...]
+chr4-04	SwissProt	protein_match	266088	266450	339.000000	-	.	Target=Q68DY1.2 66 192 +;percentID=51;Gap=M52 I4 M53 I2 M16 ;sequence=MGPLQFRDVAIEFSLEEWHCLDTAQRNLYRNVMLENYSNLVFLGITVSKPDLITCLEQGRKPLTMKRNEMIAKPSVMCSHFAQDLWPEQSMKDSFQKVVLRRYEKCEHDNLQLKKGCISVDECKVHKEGYNELNQCLTTTPRKICQCDKYVKVLHQFPNSNGQKRGHTGKKPFKYIECGKAFKQFSTLTTHKKIHTGGKPYKCEECGKAFNHSCSLTRHKKIHTGEKPYKCEECGKAFKHSSTLTTHKRNHTGEKPYKCDKCGKAFMSSSTLSKHEIIHTEKKPYKCEECGKAFNRSSTLTTHKIIHTGEKPYKCEECDKAFKYSYTLTTHKRIHTEDKPYKCEECGKAFKYSSTLTTHKR [...]
+chr4-04	SwissProt	protein_match	266088	266417	340.000000	-	.	Target=Q96N22.1 8 120 +;percentID=60;Gap=M43 I1 M51 I2 M16 ;sequence=MVAEPPVICSHFAQHFSPEQNIKDSFQKVTPRRYGKCEHENLQLSKSVDECKVQKGGYNGLNQCLPTTQSKIFQCDKYMKIFHKFSNLNGHKVRHTRKKPFKYKEFGKSFCIFSNLTQHKIICTRVNFYKCEDCGKAFNGSSIFTKHKRIHIGEKSYICEECGKACNQFTNLTTHKIIYTRDKLYKREECSKAFNLSSHITTHTIIHTGENPYKREECDKAFNQSSTLTTHKIIHTREKLNEYKECGKAFNQSSHLTRHKIIHTGEKPYKCEECGKAFNQSSHLTRHKIIHTGEKPYKCEECGKAFRQSSHLTTHKIIHTGEKPYKCEECGKAFNKSSHLTRHKSIHTGEKPYQCEKCGKAS [...]
+chr4-04	SwissProt	protein_match	266088	266423	341.000000	-	.	Target=P35789-2.4 75 192 +;percentID=57;Gap=M45 I4 M51 I2 M16 ;sequence=MGPLQFRDVAIEFSLEEWHCLDTAQRNLYRNVMLENYSNLVFLGIVVSKPDLIAHLEQGKKPLTMKRHEMVANPSVICSHFAQDLWPEQNIKDSFQKVILRRYEKRGHGNLQLIKRCESVDECKVHTGGYNGLNQCSTTTQSKVFQCDKYGKVFHKFSNSNRHNIRHTEKKPFKCIECGKAFNQFSTLITHKKIHTGEKPYICEECGKAFKYSSALNTHKRIHTGEKPYKCDKCDKAFIASSTLSKHEIIHTGKKPYKCEECGKAFNQSSTLTKHKKIHTGEKPYKCEECGKAFNQSSTLTKHKKIHTGEKPYVCEECGKAFKYSRILTTHKRIHTGEKPYKCNKCGKAFIASSTLSRH [...]
+chr4-04	SwissProt	protein_match	266088	266423	341.000000	-	.	Target=P35789.4 75 192 +;percentID=57;Gap=M45 I4 M51 I2 M16 ;sequence=MGPLQFRDVAIEFSLEEWHCLDTAQRNLYRNVMLENYSNLVFLGIVVSKPDLIAHLEQGKKPLTMKRHEMVANPSVICSHFAQDLWPEQNIKDSFQKVILRRYEKRGHGNLQLIKRCESVDECKVHTGGYNGLNQCSTTTQSKVFQCDKYGKVFHKFSNSNRHNIRHTEKKPFKCIECGKAFNQFSTLITHKKIHTGEKPYICEECGKAFKYSSALNTHKRIHTGEKPYKCDKCDKAFIASSTLSKHEIIHTGKKPYKCEECGKAFNQSSTLTKHKKIHTGEKPYKCEECGKAFNQSSTLTKHKKIHTGEKPYVCEECGKAFKYSRILTTHKRIHTGEKPYKCNKCGKAFIASSTLSRHEF [...]
+chr4-04	SwissProt	protein_match	266088	266423	341.000000	-	.	Target=P35789-3.4 75 192 +;percentID=57;Gap=M45 I4 M51 I2 M16 ;sequence=MGPLQFRDVAIEFSLEEWHCLDTAQRNLYRNVMLENYSNLVFLGIVVSKPDLIAHLEQGKKPLTMKRHEMVANPSVICSHFAQDLWPEQNIKDSFQKVILRRYEKRGHGNLQLIKRCESVDECKVHTGGYNGLNQCSTTTQSKVFQCDKYGKVFHKFSNSNRHNIRHTEKKPFKCIECGKAFNQFSTLITHKKIHTGEKPYICEECGKAFKYSSALNTHKRIHTGEKPYKCDKCDKAFIASSTLSKHEIIHTGKKPYKCEECGKAFNQSSTLTKHKKIHTGEKPYKCEECGKAFNQSSTLTKHKKIHTGEKPYVCEECGKAFKYSRILTTHKRIHTGEKPYKCNKCGKAFIASSTLSRH [...]
+chr4-04	SwissProt	protein_match	266088	266417	341.000000	-	.	Target=Q86V71.2 77 192 +;percentID=56;Gap=M43 I4 M50 I2 M17 ;sequence=MGPLTFTDVAIEFSLEEWQCLDTAQQNLYRNVMLENYRNLVFLGIAVSKPDLITCLEKEKEPCKMKRHEMVDEPPVVCSHFAEDFWPEQDIKDSFQKVTLRRYDKRGHENLQLRKGYKTVGDCKLYKGGYNGLNQCLTLTQSKMYHCDIYVKVFYAFSNADRYKTRHTGKKPFQCKKCGKSFCMLSQLTQHKKIHIRENTYRCKEFGNAFNQSSALTNHKRIYVGEKHYRCEECGKAFNHYSTLTNHKRIHTGEKPYKCKECGKAFSRYSTLTTHKRIHSGEKPYKCDECGKTFSISSTFTKHKIIHTEEKPYKCKECGKAFNRSSTLTSHKRIHTGEKPYKCEECGKAFNWSSTLTKHKV [...]
+chr4-04	SwissProt	protein_match	266088	266414	342.000000	-	.	Target=P0CB33.1 90 204 +;percentID=60;Gap=M42 I4 M51 I2 M16 ;sequence=MAKRPGPPGSREMGLLTFRDIAIEFSLAEWQCLDHAQQNLYRDVMLENYRNLFSLGMTVSKPDLIACLEQNKEPQNIKRNEMAAKHPVTCSHFNQDLQPEQSIKDSLQKVIPRTYGKCGHENLQLKKCCKRVDECEVHKGGYNDLNQCLSNTQNKIFQTHKCVKVFSKFSNSNRHNARYTGKKHLKCKKYGKSFCMFSHLNQHQIIHTKEKSYKCEECGKSFNHSSSGTTHKRILTGEKPYRCEECGKAFRWPSNLTRHKRIHTGEKPYACEECGQAFRRSSTLTNHKRIHTGERPYKCEECGKAFSVSSALIYHKRIHTGEKPYTCEECGKAFNCSSTLKTHKIIHTGEKPYTCEECGRT [...]
+chr4-04	SwissProt	protein_match	266088	266423	348.000000	-	.	Target=A6NK31.3 137 254 +;percentID=59;Gap=M45 I4 M51 I2 M16 ;sequence=MLSFLRDRECNREYFFVGNYFIGQFWSYQSESVLFTHFILSQFKNSAHGHLKWVCVCFQGLLTFRDVAIEFCLEECQYLDAAQQNLCMDVMLQNYRNPVFLDKTGIVFSKPDLVTCLEQRKKPWNRSIVCPMLSSDSTLCSHFTEDLWLDQNTKNSFQKVMLRRYGKCRHENLQIRKGCKSLNASKVQEGGYNGLNQCLSITQSKILQCNTCVKVLRKFSNSNRLRRRHSGEKPFKCKECGQFFHRFSHLRQHQRIHTKERPYKCEECDKAFKQSSSLTQHNIVHTGDKPYKCKDCGKIFKWSSKLTIHQRIHSGEKPYKCEECGKAFKQSSKLNEHMKAHTGEKFYKCEECGKAFKQPS [...]
+chr4-04	SwissProt	protein_match	266088	266423	349.000000	-	.	Target=Q05481.1 84 201 +;percentID=57;Gap=M45 I4 M51 I2 M16 ;sequence=MPGTPGSLEMGLLTFRDVAIEFSPEEWQCLDTAQQNLYRNVMLENYRNLAFLGIALSKPDLITYLEQGKEPWNMKQHEMVDEPTGICPHFPQDFWPEQSMEDSFQKVLLRKYEKCGHENLQLRKGCKSVDECKVHKEGYNKLNQCLTTAQSKVFQCGKYLKVFYKFLNSNRHTIRHTGKKCFKCKKCVKSFCIRLHKTQHKCVYITEKSCKCKECEKTFHWSSTLTNHKEIHTEDKPYKCEECGKAFKQLSTLTTHKIICAKEKIYKCEECGKAFLWSSTLTRHKRIHTGEKPYKCEECGKAFSHSSTLAKHKRIHTGEKPYKCEECGKAFSHSSALAKHKRIHTGEKPYKCKECGKAFSN [...]
+chr4-04	SwissProt	protein_match	266088	266417	349.000000	-	.	Target=Q14593-2.3 45 160 +;percentID=62;Gap=M42 I4 M52 I2 M16 ;sequence=MLDNYRNLVFLGIAVSKPDLITCLEQGKEPCNMKRHAMVAKPPVVCSHFAQDLWPKQGLKDSFQKVILRRYGKYGHENLQLRKGCKSADEHKVHKRGYNGLNQCLTTTQSKIFQCDKYVKVLHKFSNSNIHKKRQTGKKPFKCKECGKSCCILSQLTQHKKTATRVNFYKCKTCGKAFNQFSNLTKHKIIHPEVNPYKCEECGKAFNQSLTLTKHKKIHTEEKPYKCEDCGKVFSVFSVLTKHKIIHTGTKPYNCEECGKGFSIFSTLTKHKIIHTGEKPYKCNECGKAFNWSSTLTKHKRIHTGEKPYKCEECGKAFNQSSTLTRHKIVHTGEKPYKCEECGKAFKRSTTLTKHKRIY [...]
+chr4-04	SwissProt	protein_match	266088	266417	349.000000	-	.	Target=Q14593.3 110 225 +;percentID=62;Gap=M42 I4 M52 I2 M16 ;sequence=MSSAPRGPPSVAPLPAGIGRSTAKTPGLPGSLEMGPLTFRDVAIEFSLEEWQCLDTSQQNLYRNVMLDNYRNLVFLGIAVSKPDLITCLEQGKEPCNMKRHAMVAKPPVVCSHFAQDLWPKQGLKDSFQKVILRRYGKYGHENLQLRKGCKSADEHKVHKRGYNGLNQCLTTTQSKIFQCDKYVKVLHKFSNSNIHKKRQTGKKPFKCKECGKSCCILSQLTQHKKTATRVNFYKCKTCGKAFNQFSNLTKHKIIHPEVNPYKCEECGKAFNQSLTLTKHKKIHTEEKPYKCEDCGKVFSVFSVLTKHKIIHTGTKPYNCEECGKGFSIFSTLTKHKIIHTGEKPYKCNECGKAFNWSST [...]
+chr4-04	SwissProt	protein_match	266088	266417	353.000000	-	.	Target=A6NGH9.3 45 160 +;percentID=61;Gap=M43 I4 M51 I2 M16 ;sequence=MDVMLQNYRNPVFLGIVFSKPDLVTCLEQRKKPWSMKHPGHVANLCSHFTQDLWLDQNTKNSFQKVMLRRYGKCRHENLQIRKGCKSLNASKVQEGGYNGLNQCLSITQSKILQCNTFVKVLRKFSNSNRLRRRHTGEKPFKCKECGQFFHRFSHLRQHQIIHTEEKPYQCEEYGKDFKQSSGLTIHERIHTKERPYKCEECDKAFKQSSSLTQHNIVHTGDKPYKCKDCGKIFKWSSNLTIHQRIYSGEKPYKCEECGKAFKQFSKLNEHMRAHTGEKFYKCEECGKAFKQPSGLTLHKRIHTGENPYKFKECGKAFYWFLSFTKHMIIHRGEKPYKCQECGKAFKWSSNLTIHKRIHMG [...]
+chr4-04	SwissProt	protein_match	266088	266420	355.000000	-	.	Target=Q3SXZ3-2.1 44 158 +;percentID=64;Gap=M36 D2 M6 I4 M51 I2 M16 ;sequence=MLENYRNLVSLGVTISNPDLVTSLEQRKEPYNLKIHETAARPPAVCSHFTQNLWTVQGIEDSFHKLIPKGHEKRGHENLRKTCKSINECKVQKGGYNRINQCLLTTQKKTIQSNICVKVFHKFSNSNKDKIRYTGDKTFKCKECGKSFHVLSRLTQHKRIHTGENPYTCEECGKAFNWSSILTKHKRIHAREKFYKCEECGKGFTRSSHLTKHKRIHTGEKPYICEKCGKAFNQSSTLNLHKRIHSAQKYYKCEECGKAFKWSSSLNEHKRIHAGEKPFSCEECGNVFTTSSDFAKHKRIHTGEKPYKCEECGKSFNRSTTLTTHKRIHTGEKPYTCEECGKAFNWSSTLNVH [...]
+chr4-04	SwissProt	protein_match	266088	266420	355.000000	-	.	Target=Q3SXZ3.1 76 190 +;percentID=64;Gap=M36 D2 M6 I4 M51 I2 M16 ;sequence=MELLTFKDVAIEFSPEEWKCLDISQQNLYRDVMLENYRNLVSLGVTISNPDLVTSLEQRKEPYNLKIHETAARPPAVCSHFTQNLWTVQGIEDSFHKLIPKGHEKRGHENLRKTCKSINECKVQKGGYNRINQCLLTTQKKTIQSNICVKVFHKFSNSNKDKIRYTGDKTFKCKECGKSFHVLSRLTQHKRIHTGENPYTCEECGKAFNWSSILTKHKRIHAREKFYKCEECGKGFTRSSHLTKHKRIHTGEKPYICEKCGKAFNQSSTLNLHKRIHSAQKYYKCEECGKAFKWSSSLNEHKRIHAGEKPFSCEECGNVFTTSSDFAKHKRIHTGEKPYKCEECGKSFNRSTTLT [...]
+chr4-04	SwissProt	protein_match	266088	266423	357.000000	-	.	Target=Q6ZN08.2 121 238 +;percentID=57;Gap=M43 I4 M50 I2 M19 ;sequence=MLAGKHVALTPLKAYSQDAGVICPENLHLRRNSREGGDQKEKKKGLQGPLQFRDVAIEFSLEEWHCLDMAQRNLYRDVMLENYRNLVFLGIVVSKPDLITHLEQGKKPSTMQRHEMVANPSVLCSHFNQDLWPEQSIKDSFQKLILRRHKKCGHDNLQLKKGCESVDKCKVHKRGYNGLNQCLTTTQSKMFQCDKHGKVFHQFSNTNRHKIRHTGKNPCKFTECGKAFNRSSTFTTHKKIHTGEKPYKCIECGKAFNRSSHLTTHKIIHTGEKRYKCEDCGKAFNRSSNLTTHKKIHTGEKPYKCEECGKAFKRSSILTTHKRIHTGEKPYKCEECGKVFKYLSSLSTHKIIHTGEKPYK [...]
+chr4-04	SwissProt	protein_match	266088	266417	357.000000	-	.	Target=A8MUP4.2 38 153 +;percentID=62;Gap=M43 I4 M51 I2 M16 ;sequence=MLENHRNPVFLVIVFSKPDLVTCLEQRKKPWSMKHPGLCSHFTQDLWLDQNIKNSFQKVILRRYEKSRHENLQIRKGCKSLNASKLQEGGYNGLNQCLSVTQSKILQCNTCVKVFRKFSNSNRLRRRHTGEKPFKCKECGQFFHRFSHLRQHEIIHTEEKPYQHEECGKDFKQSSGLTIHERIHTKERPYKCEECDKAFKQSSKLNKHKKIYTGDTTYKCEECGKAFSYSSTVTQHNIVHTEDKPYKCEDCGKALKWSSNLTIHKRIHTGEKPCKCEECGKACKQSLGLTIQKRIHNEEKPYKCEECDKAFYWSLSFTKHKRIHTGEKPYNCEKCGKAFYCSSHLIQHNIVHTEEKHYKCQ [...]
+chr4-04	SwissProt	protein_match	266088	266420	483.000000	-	.	Target=Q15928.1 76 190 +;percentID=78;Gap=M44 I4 M67 ;sequence=MELLTFRDVAIEFSPEEWKCLDPDQQNLYRDVMLENYRNLVSLGVAISNPDLVTCLEQRKEPYNVKIHKIVARPPAMCSHFTQDHWPVQGIEDSFHKLILRRYEKCGHDNLQLRKGCKSLNECKLQKGGYNEFNECLSTTQSKILQCKASVKVVSKFSNSNKRKTRHTGEKHFKECGKSFQKFSHLTQHKVIHAGEKPYTCEECGKAFKWSLIFNEHKRIHTGEKPFTCEECGSIFTTSSHFAKHKIIHTGEKPYKCEECGKAFNRFTTLTKHKRIHAGEKPITCEECRKIFTSSSNFAKHKRIHTGEKPYKCEECGKAFNRSTTLTKHKRIHTGEKPYTCEECGKAFRQSSKLNEHKKVHTGERPYK [...]
+chr4-04	SwissProt	protein_match	266091	266138	43.000000	-	.	Target=Q96MR9.2 351 366 +;percentID=50;sequence=MAYCLTNCYQYSVTFEDTAVDFTQEEWILLDPVQRNLYRDVMLENYENVAKVGFQLFKPSVISWLEEEELRTLQQGVLQDWAIKHQTSVSALQQEFWKIQTSNGIQMDLVTFDSVAVEFTQEEWTLLDPAQRNLYSDVMLENYKNLSSVGYQLFKPSLISWLEEEEELSTLPRVLQEWKMCLKTKGPALWQDNFCLKTLNGIQLARNQNGEELYDCKQCEDVFCKHPCLKTNMSTQNRGNTSECIQYAKDLLSLYNKTSTIRKVSVFSKHGKSFRLILNVQVQRKCTQDKSFEGTDYGKAFIYQSYLEAHRKTQSGEKLNEWKQCGEAFTHSTSHAVNVETHIIKNPYECKECGKDFRYPTHLNNHMQTHIGIKPYKCKHCGKT [...]
+chr4-04	SwissProt	protein_match	266091	266150	49.000000	-	.	Target=Q8BI67.1 206 227 +;percentID=50;Gap=M5 I2 M15 ;sequence=MERKEDDLKGGCWNQPAVAEEFETLKDLAMDFTVEDWKDLESEWDQRDLFWDVTLNHYQDMFSFTDTSQPSLTSQPDVREELEATSTEVPETKSSPLQSGFVEEDFSQIMEIFSNGQLNFEACIGEDWLNSFLGDPESLPRPDISDKESPADHQSPESKSGLSPGPPLCTREDAVMSASPEKTLTPVILKESRSDLSQEDSVQGHEKPYKCSECGESFSQSHHLIQHWVLHTSGEPPIWREQQRGLSQGAHFPMCPGTPASYESYTCQECGKRFSQNVYLQWHQKIHTGEKLCKTQSDSNLEGLSRSPSVEPGKQRLSKDTDSAKPSTIHGQDQEKPPTGESRDQENLHESQPGDRPSVLHPKPLRHQK [...]
+chr4-04	SwissProt	protein_match	266091	266132	51.000000	-	.	Target=Q3KP31.1 105 118 +;percentID=57;sequence=MDSVAFEDVSVSFSQEEWALLAPSQKKLYRDVMQETFKNLASIGEKWEDPNVEDQHKNQGRNLRSHTGERLCEGKEGSQCAENFSPNLSVTKKTAGVKPYECTICGKAFMRLSSLTRHMRSHTGYELFEKPYKCKECEKAFSYLKSFQRHERSHTGEKPYKCKQCGKTFIYHQPFQRHERTHIGEKPYECKQCGKALSCSSSLRVHERIHTGEKPYECKQCGKAFSCSSSIRVHERTHTGEKPYACKECGKAFISHTSVLTHMITHNGDRPYKCKECGKAFIFPSFLRVHERIHTGEKPYKCKQCGKAFRCSTSIQIHERIHTGEKPYKCKECGKSFSARPAFRVHVRVHTGEKPYKCKECGKAFSRISYFRIHERTHTGEKPY [...]
+chr4-04	SwissProt	protein_match	266091	266159	54.000000	-	.	Target=Q8NDP4.1 180 204 +;percentID=44;Gap=M7 I2 M16 ;sequence=MLSLSPILLYTCEMFQDPVAFKDVAVNFTQEEWALLDISQKNLYREVMLETFWNLTSIGKKWKDQNIEYEYQNPRRNFRSVTEEKVNEIKEDSHCGETFTPVPDDRLNFQKKKASPEVKSCDSFVCEVGLGNSSSNMNIRGDTGHKACECQEYGPKPWKSQQPKKAFRYHPSLRTQERDHTGKKPYACKECGKNIIYHSSIQRHMVVHSGDGPYKCKFCGKAFHCLSLYLIHERTHTGEKPYECKQCGKSFSYSATHRIHERTHIGEKPYECQECGKAFHSPRSCHRHERSHMGEKAYQCKECGKAFMCPRYVRRHERTHSRKKLYECKQCGKALSSLTSFQTHIRMHSGERPYECKTCGKGFYSAKSF [...]
+chr4-04	SwissProt	protein_match	266091	266156	55.000000	-	.	Target=Q96NJ3.2 311 334 +;percentID=45;Gap=M7 I2 M15 ;sequence=MIKFQERVTFKDVAVVFTKEELALLDKAQINLYQDVMLENFRNLMLVRDGIKNNILNLQAKGLSYLSQEVLHCWQIWKQRIRDLTVSQDYIVNLQEECSPHLEDVSLSEEWAGISLQISENENYVVNAIIKNQDITAWQSLTQVLTPESWRKANIMTEPQNSQGRYKGIYMEEKLYRRAQHDDSLSWTSCDHHESQECKGEDPGRHPNCGKNLGMKSTVEKRNAAHVLPQPFPCNNCGVAFADDTDPHVHHSTHLGEKSYKCDQYGKNFSQSQDLIVHCKTHSGKTPYEFHEWPMGCKQSSDLPRYQKVSSGDKPYKCKECGKGFRRSSSLHNHHRVHTGEMPYKCDECGKGFGFRSLLCIHQGVHTGK [...]
+chr4-04	SwissProt	protein_match	266091	266156	55.000000	-	.	Target=Q96NJ3-2.2 156 179 +;percentID=45;Gap=M7 I2 M15 ;sequence=MTEPQNSQGRYKGIYMEEKLYRRAQHDDSLSWTSCDHHESQECKGEDPGRHPNCGKNLGMKSTVEKRNAAHVLPQPFPCNNCGVAFADDTDPHVHHSTHLGEKSYKCDQYGKNFSQSQDLIVHCKTHSGKTPYEFHEWPMGCKQSSDLPRYQKVSSGDKPYKCKECGKGFRRSSSLHNHHRVHTGEMPYKCDECGKGFGFRSLLCIHQGVHTGKKPYKCEECGKGFDQSSNLLVHQRVHTGEKPYKCSECGKCFSSSSVLQVHWRFHTGEKPYRCGECGKGFSQCTHLHIHQRVHTGEKPYKCNVCGKDFAYSSVLHTHQRVHTGEKPYKCEVCGKCFSYSSYFHLHQRDHIREKPYKCDECGKGFS [...]
+chr4-04	SwissProt	protein_match	266091	266159	58.000000	-	.	Target=Q96MU6-2.2 205 229 +;percentID=52;Gap=M5 I2 M18 ;sequence=MAAPDLAHGGHVSRDSVCLHEEQTQAAGMVAGWLINCYQDAVTFDDVAVDFTQEEWTLLDPSQRDLYRDVMLENYENLASVEWRLKTKGPALRQDRSWFRASNETQTARSHNGGQLCDRTQCGEAFSEHSGLSTHVRTQNTGDSCVSNHYERDFFIPCQKTLFKIGEQFSVLGQCGKAFSSTPNVVSQQACTRDRSLDYSSCGEVFLNQSYLQARAGSHNGEETWKWKPCGKALTHSMGCATPVEMHAVRNPHVCRECGKAFRYTAYLTGRVQVHPGEKPCELEECGKASPVSSSLTQHVRIHAAEKPCECKECGKAFTGLSGLSKHVQTDPGQKPYECKDCGKACGGFYLLNEHGKTHTREKPFAC [...]
+chr4-04	SwissProt	protein_match	266091	266159	58.000000	-	.	Target=Q96MU6.2 233 257 +;percentID=52;Gap=M5 I2 M18 ;sequence=MLENYENLASVGHHLFQPSVIYWLEQEEELRAGRRAVLQEWRLKTKGPALRQDRSWFRASNETQTARSHNGGQLCDRTQCGEAFSEHSGLSTHVRTQNTGDSCVSNHYERDFFIPCQKTLFKIGEQFSVLGQCGKAFSSTPNVVSQQACTRDRSLDYSSCGEVFLNQSYLQARAGSHNGEETWKWKPCGKALTHSMGCATPVEMHAVRNPHVCRECGKAFRYTAYLTGRVQVHPGEKPCELEECGKASPVSSSLTQHVRIHAAEKPCECKECGKAFTGLSGLSKHVQTDPGQKPYECKDCGKACGGFYLLNEHGKTHTREKPFACVVCGKYFRNSSCLNNHVRIHTGIKPYTCSYCGKAFTVRCGLTRH [...]
+chr4-04	SwissProt	protein_match	266091	266186	65.000000	-	.	Target=Q96NJ6.1 128 159 +;percentID=52;Gap=M7 D2 M5 I1 M2 I1 M16 ;sequence=MGTENKEVIPKEEISEESEPHGSLLEKFPKVVYQGHEFGAGCEEDMLEGHSRESMEEVIEQMSPQERDFPSGLMIFKKSPSSEKDRENNESERGCSPSPNLVTHQGDTTEGVSAFATSGQNFLEILESNKTQRSSVGEKPHTCKECGKAFNQNSHLIQHMRVHSGEKPFECKECGKTFGTNSSLRRHLRIHAGEKPFACNECGKAFIQSSHLIHHHRIHTGERPYKCEECGKAFSQNSALILHQRIHTGEKPYECNECGKTFRVSSQLIQHQRIHTEERYHECNECGKAFKHSSGLIRHQKIHTGEKPYLCNECGKGFGQSSELIRHQRIHTGDKPYECNECGKTFGQNSEIIRHIR [...]
+chr4-04	SwissProt	protein_match	266091	266204	71.000000	-	.	Target=P52737.1 147 186 +;percentID=40;Gap=M22 I2 M16 ;sequence=MDSVAFEDVDVNFTQEEWALLDPSQKNLYRDVMWETMRNLASIGKKWKDQNIKDHYKHRGRNLRSHMLERLYQTKDGSQRGGIFSQFANQNLSKKIPGVKLCESIVYGEVSMGQSSLNRHIKDHSGHEPKEYQEYGEKPDTRNQCWKPFSSHHSFRTHEIIHTGEKLYDCKECGKTFFSLKRIRRHIITHSGYTPYKCKVCGKAFDYPSRFRTHERSHTGEKPYECQECGKAFTCITSVRRHMIKHTGDGPYKCKVCGKPFHSLSSFQVHERIHTGEKPFKCKQCGKAFSCSPTLRIHERTHTGEKPYECKQCGKAFSYLPSLRLHERIHTGEKPFVCKQCGKAFRSASTFQIHERTHTGEKPYECKE [...]
+chr4-04	SwissProt	protein_match	266091	266204	71.000000	-	.	Target=Q5REK1.1 147 186 +;percentID=40;Gap=M22 I2 M16 ;sequence=MDSVAFEDVDVNFTQEEWALLDPSQKNLYRDVMWETMRNLASVGKKWKDQNIKDHYKHRGRNLRSHMLERLYQTKDSSQRGGIFSQFANQNLSKKIPGVKLCESIVYGEVSMGQSSLNRHIKDHSGHEPKKYQEYGEKPDTRNQCWKPFSSHHSFRTHEIIHTGEKLYDCKECGKTFFSLKRIRRHIITHSGYTPYKCKVCGKAFDYPSRFRTHERSHTGEKPYECKECGKAFTCITSVRRHMIKHTGDGPYKCKVCGKPFHSLSSFQVHERIHTGEKPFKCKQCGKAFSCSPTLRIHERTHTGEKPYECKQCGKAFSYLPSLRLHERIHTGEKPFVCKQCGKAFRSASTFQIHERTHTGEKPYECKE [...]
+chr4-04	SwissProt	protein_match	266091	266156	73.000000	-	.	Target=P51815.2 360 383 +;percentID=66;Gap=M7 I2 M15 ;sequence=MAMRELNADSCSSPQMGAMWETSGSVKENSSQSKKYSTKIENLGPESACRHFWSFRYHEATGPLETISQLQKLCHQWLRPEIHSKEQILEMLVLEQFLSILPKETQNWVQKHHPQNVKQALVLVEFLQREPDGTKNEVTAHELGKEAVLLGGTAVAPGFKWKPAEPQPMGVFQKEYWNTYRVLQEQLGWNTHKETQPVYERAVHDQQMLALSEQKRIKHWKMASKLILPESLSLLTFEDVAVYFSEEEWQLLNPLEKTLYNDVMQDIYETVISLGLKLKNDTGNDHPISVSTSEIQTSGCEVSKKTRMKIAQKTMGRENPGDTHSVQKWHRAFPRKKRKKPATCKQELPKLMDLHGKGPTGEKPFKCQE [...]
+chr4-04	SwissProt	protein_match	266091	266237	76.000000	-	.	Target=Q68EA5.3 444 494 +;percentID=40;Gap=M14 D1 M11 I1 M7 I2 M16 ;sequence=MDSVVFEDVAVDFTLEEWALLDSAQRDLYRDVMLETFRNLASVDDGTQFKANGSVSLQDMYGQEKSKEQTIPNFTGNNSCAYTLEKNCEGYGTEDHHKNLRNHMVDRFCTHNEGNQYGEAIHQMPDLTLHKKVSAGEKPYECTKCRTVFTHLSSLKRHVKSHCGRKAPPGEECKQACICPSHLHSHGRTDTEEKPYKCQACGQTFQHPRYLSHHVKTHTAEKTYKCEQCRMAFNGFASFTRHVRTHTKDRPYKCQECGRAFIYPSTFQRHMTTHTGEKPYKCQHCGKAFTYPQAFQRHEKTHTGEKPYECKQCGKTFSWSETLRVHMRIHTGDKLYKCEHCGKAFTSSRSFQGHL [...]
+chr4-04	SwissProt	protein_match	266091	266231	78.000000	-	.	Target=Q9BUY5.1 362 410 +;percentID=42;Gap=M32 I2 M15 ;sequence=MAAADLSHGHYLSGDPVCLHEEKTPAGRIVADCLTDCYQDSVTFDDVAVDFTQEEWTLLDSTQRSLYSDVMLENYKNLATVGGQIIKPSLISWLEQEESRTVQGGVLQGWEMRLETQWSILQQDFLRGQTSIGIQLEGKHNGRELCDCEQCGEVFSEHSCLKTHVRTQSTGNTHDCNQYGKDFLTLCEKTSTGEKLSEFNQSEKIFSLTPNIVYQRTSTQEKSFECSHCGKSFINESYLQAHMRTHNGEKLYEWRNYGPGFIDSTSLSVLIETLNAKKPYKCKECGKGYRYPAYLSIHMRTHTGEKPYECKECGKAFNYSNSFQIHGRTHTGEKPYVCKECGKAFTQYSGLSMHVRSHSGDKPYECKE [...]
+chr4-04	SwissProt	protein_match	266091	266219	78.000000	-	.	Target=Q8N8J6-2.2 329 373 +;percentID=45;Gap=M10 I1 M9 D1 M7 I2 M16 ;sequence=MMQAQESLTLEDVAVDFTWEEWQFLSPAQKDLYRDVMLENYSNLVAVGYQASKPDALSKLERGEETCTTEDEIYSRICSDSGGASGGAYAEIRKIDDPLQHHLQNQSIQKSVKQCHEQNMFGNIVNQNKGHFLLKQDCDTFDLHEKPLKSNLSFENQKRSSGLKNSAEFNRDGKSLFHANHKQFYTEMKFPAIAKPINKSQFIKQQRTHNIENAHVCSECGKAFLKLSQFIDHQRVHTGEKPHVCSMCGKAFSRKSRLMDHQRTHTELKHYECTECDKTFLKKSQLNIHQKTHMGGKPYTCSQCGKAFIKKCRLIYHQRTHTGEKPHGCSVCGKAFSTKFSLTTHQKTHTGEKP [...]
+chr4-04	SwissProt	protein_match	266091	266219	78.000000	-	.	Target=Q8N8J6.2 318 362 +;percentID=45;Gap=M10 I1 M9 D1 M7 I2 M16 ;sequence=MMQAQESLTLEDVAVDFTWEEWQFLSPAQKDLYRDVMLENYSNLVAVGYQASKPDALSKLERGEETCTTEDEIYSRICSEIRKIDDPLQHHLQNQSIQKSVKQCHEQNMFGNIVNQNKGHFLLKQDCDTFDLHEKPLKSNLSFENQKRSSGLKNSAEFNRDGKSLFHANHKQFYTEMKFPAIAKPINKSQFIKQQRTHNIENAHVCSECGKAFLKLSQFIDHQRVHTGEKPHVCSMCGKAFSRKSRLMDHQRTHTELKHYECTECDKTFLKKSQLNIHQKTHMGGKPYTCSQCGKAFIKKCRLIYHQRTHTGEKPHGCSVCGKAFSTKFSLTTHQKTHTGEKPYICSECGKGFIEK [...]
+chr4-04	SwissProt	protein_match	266091	266219	78.000000	-	.	Target=Q8N8J6-3.2 329 373 +;percentID=45;Gap=M10 I1 M9 D1 M7 I2 M16 ;sequence=MESLTLEDVAVDFTWEEWQFLSPAQKDLYRDVMLENYSNLVAVGYQASKPDALSKLERGEETCTTEDEIYSRICSDSGGASGGAYAEIRKIDDPLQHHLQNQSIQKSVKQCHEQNMFGNIVNQNKGHFLLKQDCDTFDLHEKPLKSNLSFENQKRSSGLKNSAEFNRDGKSLFHANHKQFYTEMKFPAIAKPINKSQFIKQQRTHNIENAHVCSECGKAFLKLSQFIDHQRVHTGEKPHVCSMCGKAFSRKSRLMDHQRTHTELKHYECTECDKTFLKKSQLNIHQKTHMGGKPYTCSQCGKAFIKKCRLIYHQRTHTGEKPHGCSVCGKAFSTKFSLTTHQKTHTGEKPYICS [...]
+chr4-04	SwissProt	protein_match	266091	266225	79.000000	-	.	Target=Q8N823.1 510 556 +;percentID=40;Gap=M30 I2 M15 ;sequence=MLREEAAQKRKGKEPGMALPQGRLTFRDVAIEFSLAEWKCLNPSQRALYREVMLENYRNLEAVDISSKCMMKEVLSTGQGNTEVIHTGTLQRHESHHIGDFCFQEIEKEIHDIEFQCQEDERDGLEAPMTKIKKLTGSTDQHDHRHAGNKPIKDQLGSSFYSHLPELHIFQIKGEIGNQLEKSTNDAPSVSTFQRISCRPQTQISNNYGNNPLNSSLLPQKQEVHMREKSFQCNKSGKAFNCSSLLRKHQIIHLGDKQYKCDVCGKLFNHEQYLACHDRCHTVEKPYKCKECGKTFSQESSLTCHRRLHTGVKRYNCNECGKIFGQNSALLIDKAIDTGENPYKCNECDKAFNQQSQLSHHRIHTGEK [...]
+chr4-04	SwissProt	protein_match	266091	266231	80.000000	-	.	Target=P10076.2 356 404 +;percentID=48;Gap=M12 D1 M11 I1 M7 I2 M16 ;sequence=METQQVDAVTFEDVAVDFTQEEWTSLDPVQRNLYRDVMLENYQNLATVGGQMFKPSLISWLEKKVELTVIEQGILQEWEMHLKTKRTALQQDRFWSDMSNGMQLGREHSGGEPGDPVQVGAVFSEDSCPQTHSSTSNTGNTFACNLDGKDFQPLLKETSTEENIVQLNQCVKPLIFTPDVSQKKCTPEKSVECSDCGETFVNQLELQTHSSSHREKNIHKSEECGQASTHPISHGGHVIPTEKKYYECKKCEKFFTHPVYLNIHMQSHTVEKPYDCKECGKAFTERSSLIVHLRQHTREKSYECKECGKTFIQPSRLTEHMRSHTGEKPYQCDQCGNAFASSSYLTTHLRTHTGE [...]
+chr4-04	SwissProt	protein_match	266091	266168	83.000000	-	.	Target=O88553.1 334 361 +;percentID=60;Gap=M11 I2 M15 ;sequence=MATPEPAESDAEWEQLEPGQRNLYKDTKLETCSNPASMGNQDPKQGLVSKLDGEEERWSSVRANKNSSSSLHRLKKTGTSAKVQQDGAQTEGKQKFQRKLTSEVTFRKKSSNSKKSSECTLLEKKNVHSKHDPSEKRLHKSNLYGKNLNQNLDLPSQIKISAKKKPDTANEYRKSLSHSASDVNRDEISTRKKCDKSPNNKLFGKGDKNQTGKKCEKVCRHTASHTKEDKIHTGEKRKSPCRSPSKSDKAPGSGKPYECNQCGKVLSHKQGLLDHQRTHAGEEPYECYECGIAFSQKSHLVVHQKTPTGEKAPYECVQCGKAHGHKHALTDHLRISHTGEKPYKCNECGKTFRHSSNLMQHIRSHTGE [...]
+chr4-04	SwissProt	protein_match	266091	266231	83.000000	-	.	Target=Q9UK12.2 171 219 +;percentID=42;Gap=M32 I2 M15 ;sequence=MAKLYEAVTFKDVAVIFTEEELGLLDPAQRKLYRDVMLENFRNLLSVGGKIQTEMETVPEAGTHEEFSCKQIWEQIASDLTRSQDTTISNSQLFEQDDNPSQIKARLSTVHTREKPFQGENCKQFFSDVSFFDLPQQLYSGEKSHTCDECGKSFCYISALHIHQRVHMGVKCYKCDVCGKEFSQSSRLQTHQRVHTGEKPFKCEQCGKGFRCRSALKVHCKLHMREKPYNCEKCGKAFMHNFQLQKHHRIHTGEKPFKCEICGKSFCLRSSLNRHCMVHTAEKLYKSEKYGRGFIDRLDLHKHQMIHMGQKPYNCKECGKSFKWSSYLLVHQRVHTGEKPYKCEECGKGYISKSGLDFHHRTHTGERS [...]
+chr4-04	SwissProt	protein_match	266091	266231	84.000000	-	.	Target=Q8N4W9-2.2 188 236 +;percentID=44;Gap=M32 I2 M15 ;sequence=MMKEVLSTGQGNREVIHTGTLQRHQSYHIGDFCFQEIEKEIHNIEFQCQEDERNGHEAPTTKIKKLTGSTDQHDHRHAGNKPIKDQLGSSFYSHLPELHIFQIKGEIANQLEKSTSDASSVSTSQRISCRPQIHISNNYGNNPLNSSLLPQKQEVHMREKSFPCNESGKAFNCSSLLRKHQIPHLGDKQYKCDVCGKLFNHKQYLACHRRCHTGEKPYKCKECGKSFSYKSSLTCHHRLHTGVKPYKCNECGKVFRQNSALVIHKAIHTGEKPYKCNECGKAFNQQSHLSRHQRLHTGVKPYKCKICEKAFACHSYLANHTRIHSGEKTYKCNECGKAFNHQSSLARHHILHTGEKPYKCEECDKV [...]
+chr4-04	SwissProt	protein_match	266091	266231	84.000000	-	.	Target=Q3ZCT1.3 25 73 +;percentID=40;Gap=M32 I2 M15 ;sequence=MIGMLESLQHESDLLQHDQIHTGEKPYECNECRKTFSLKQNLVEHKKMHTGEKSHECTECGKVCSRVSSLTLHLRSHTGKKAYKCNKCGKAFSQKENFLSHQKHHTGEKPYECEKVSIQMPTIIRHQKNHTGTKPYACKECGKAFNGKAYLTEHEKIHTGEKPFECNQCGRAFSQKQYLIKHQNIHTGKKPFKCSECGKAFSQKENLIIHQRIHTGEKPYECKGCGKAFIQKSSLIRHQRSHTGEKPYTCKECGKAFSGKSNLTEHEKIHIGEKPYKCNECGTIFRQKQYLIKHHNIHTGEKPYECNKCGKAFSRITSLIVHVRIHTGDKPYECKVCGKAFCQSSSLTVHMRSHTGEKPYGCNECGKAFS [...]
+chr4-04	SwissProt	protein_match	266091	266231	87.000000	-	.	Target=Q9UK11.1 202 250 +;percentID=42;Gap=M32 I2 M15 ;sequence=MTMSKEAVTFKDVAVVFTEEELGLMDLAQRKLYRDVMLENFRNLLSVGHQPFHRDTFHFLREEKFWMMDIATQREGNSGGKIQPEMKTFPEAGPHEGWSCQQIWEEIASDLTRPQDSTIKSSQFFEQGDAHSQVEEGISIMHTGQKPSNCGKSKQSFSDMSIFDLPQQIRSAEKSHSCDECGKSFCYISALHIHQRVHLGEKLFKCDVCGKEFSQSLHLQTHQRVHTGEKPFKCEQCGRGFRCRSALTVHCKLHMGEKHYNCEACGRAFIHDFQLQKHQRIHTGEKPFKCEICGKSFCLRSSLNRHCMVHTAEKLYKSEKYGRGFIDRLDLHKHQMIHMGQKPYNCKECGKSFKWSSYLLVHQRVHTG [...]
+chr4-04	SwissProt	protein_match	266091	266225	88.000000	-	.	Target=Q86XN6-2.2 466 512 +;percentID=44;Gap=M30 I2 M15 ;sequence=MAFSQGLLTFRDVAIEFSQEEWKCLDPAQRTLYRDVMLENYRNLVSLDISSKCTMKEFLSTAQGNREVFHAGTLQIHESHHNGDFCYQDVDKDIHDYEFQWQEDERNGHEAPMTKIKKLTGSTERYDQSHARNKPIKDQLGSSFHSHLPEMHIFQTEEKIDNQVVKSIHDASLVSTAQRISCRPKTHISNNHGNNFWNSSLLTQKQEVHMREKSFQCNESGKAFNYSSLLRKHQIIHLADKYKCDVCGKLFNQKRNLACHRRCHTGENPYKCNECGKTFSQTSSLTCHRRLHTGEKPYKCEECDKAFHFKSILERHRIIHTEEKPYKCNECGKTFRQKSILTRHHRLHTGEKPYKCNECGKTFSHK [...]
+chr4-04	SwissProt	protein_match	266091	266231	88.000000	-	.	Target=Q96PQ6.2 528 576 +;percentID=42;Gap=M32 I2 M15 ;sequence=MAALSPTFATSTQDSTCLQDSEFPVSSKDHSCPQNLDLFVCSGLEPHTPSVGSQESVTFQDVAVDFTEKEWPLLDSSQRKLYKDVMLENYSNLTSLGYQVGKPSLISHLEQEEEPRTEERGAHQGACADWETPSKTKWSLLMEDIFGKETPSGVTMERAGLGEKSTEYAHLFEVFGMDPHLTQPMGRHAGKRPYHRRDYGVAFKGRPHLTQHMSMYDGRKMHECHQCQKAFTTSASLTRHRRIHTGEKPYECSDCGKAFNDPSALRSHARTHLKEKPFDCSQCGNAFRTLSALKIHMRVHTGERPYKCDQCGKAYGRSCHLIAHKRTHTGERPYECHDCGKAFQHPSHLKEHVRNHTGEKPYACTQCG [...]
+chr4-04	SwissProt	protein_match	266091	266231	88.000000	-	.	Target=Q96PQ6-2.2 496 544 +;percentID=42;Gap=M32 I2 M15 ;sequence=MAALSPTFATSTQDSTCLQDSEFPVSSKDHSCPQNLDLFVCSGLEPHTPSVGSQESVTFQDVAVDFTEKEWPLLDSSQRKLYKDVMLENYSNLTSLDWETPSKTKWSLLMEDIFGKETPSGVTMERAGLGEKSTEYAHLFEVFGMDPHLTQPMGRHAGKRPYHRRDYGVAFKGRPHLTQHMSMYDGRKMHECHQCQKAFTTSASLTRHRRIHTGEKPYECSDCGKAFNDPSALRSHARTHLKEKPFDCSQCGNAFRTLSALKIHMRVHTGERPYKCDQCGKAYGRSCHLIAHKRTHTGERPYECHDCGKAFQHPSHLKEHVRNHTGEKPYACTQCGKAFRWKSNFNLHKKNHMVEKTYECKECGKS [...]
+chr4-04	SwissProt	protein_match	266091	266225	88.000000	-	.	Target=Q86XN6-3.2 412 458 +;percentID=44;Gap=M30 I2 M15 ;sequence=MKEFLSTAQGNREVFHAGTLQIHESHHNGDFCYQDVDKDIHDYEFQWQEDERNGHEAPMTKIKKLTGSTERYDQSHARNKPIKDQLGSSFHSHLPEMHIFQTEEKIDNQVVKSIHDASLVSTAQRISCRPKTHISNNHGNNFWNSSLLTQKQEVHMREKSFQCNESGKAFNYSSLLRKHQIIHLADKYKCDVCGKLFNQKRNLACHRRCHTGENPYKCNECGKTFSQTSSLTCHRRLHTGEKPYKCEECDKAFHFKSILERHRIIHTEEKPYKCNECGKTFRQKSILTRHHRLHTGEKPYKCNECGKTFSHKSSLTCHHRLHTGEKPYKCNECGKTFSHKSSLTCHRRLHTGEKPYKCEECDKAYS [...]
+chr4-04	SwissProt	protein_match	266091	266231	89.000000	-	.	Target=Q14588.3 202 250 +;percentID=44;Gap=M32 I2 M15 ;sequence=MTTFKEGLTFKDVAVVFTEEELGLLDPVQRNLYQDVMLENFRNLLSVGHHPFKHDVFLLEKEKKLDIMKTATQRKGKSADKIQSEVETVPEAGRHEELYWGQIWKQIASDLIKYEDSMISISRFPRQGDLSCQVRAGLYTTHTGQKFYQCDEYKKSFTDVFNFDLHQQLHSGEKSHTCDECGKSFCYISALHIHQRVHMGEKCYKCDVCGKEFSQSSHLQTHQRVHTVEKPFKCVECGKGFSRRSTLTVHCKLHSGEKPYNCEECGRAFIHASHLQEHQRIHTGEKPFKCDTCGKNFRRRSALNNHCMVHTGEKPYKCEDCGKCFTCSSNLRIHQRVHTGEKPYKCEECGKCFIQPSQFQAHRRIHTG [...]
+chr4-04	SwissProt	protein_match	266091	266231	89.000000	-	.	Target=Q86TJ5.1 322 370 +;percentID=46;Gap=M14 I1 M9 D1 M8 I2 M15 ;sequence=MVTCAHLGRRARLPAAQPSACPGTCFSQEERMAAGYLPRWSQELVTFEDVSMDFSQEEWELLEPAQKNLYREVMLENYRNVVSLEALKNQCTDVGIKEGPLSPAQTSQVTSLSSWTGYLLFQPVASSHLEQREALWIEEKGTPQASCSDWMTVLRNQDSTYKKVALQEEPASGINMIKLIREDGGWKQLEDSHEDPQGLLSQKASLHVVAVPQEKATAWHGFGENGNLSPALVLSQGSSKGNHLCGSELDITSLASDSVLNHHQLGYADRRPCESNECGNAIRQNSHFIQHGGKMFVYLENGQSLNHGMALTIHNKINTAEKPFECHQCGKVFNRRHSLSEHQRIHTGEKPYECQE [...]
+chr4-04	SwissProt	protein_match	266091	266231	89.000000	-	.	Target=Q2VY69.1 201 249 +;percentID=42;Gap=M32 I2 M15 ;sequence=MTMFKEAVTFKDVAVVFTEEELGLLDVSQRKLYRDVMLENFRNLLSVGHQLSHRDTFHFQREEKFWIMETATQREGNSGGKIQTELESVPETGPHEEWSCQQIWEQTASELTRPQDSISSSQFSTQGDVPSQVDAGLSIIHIGETPSEHGKCKKFFSDVSILDLHQQLHSGKISHTCNEYRKRFCYSSALCLHQKVHMGEKRYKCDVCSKAFSQNSQLQTHQRIHTGEKPFKCEQCGKSFSRRSGMYVHCKLHTGEKPHICEECGKAFIHNSQLREHQRIHTGEKPFKCYICGKSFHSRSNLNRHSMVHMQEKSFRCDTCSNSFGQRSALNSHCMDHTKEKLYKCEECGRSFTCRQDLCKHQMDHTGD [...]
+chr4-04	SwissProt	protein_match	266091	266231	90.000000	-	.	Target=Q80W31.1 597 645 +;percentID=48;Gap=M14 D1 M9 I1 M7 I2 M16 ;sequence=MTESEGLVTFKDVAIDFTQEEWKQLDPTQRNLYRNVMLENYNNLITVGPPLTKPEVIFKLEQEEEPCVVEREVLWRPCPGEILGIDEHQKIQDGQVFEGIVVTSEASECPEEFASTFFPNADSIPSMHSLFECDGVGECLEPNFGDDDVQYPLPEEQFEYDDAMQPFHTSSPHFVLTPFKCNHCGKGFSQTLDLIRHLRVHTGGKLYECHQCGKGFSHKEKLINHHKLHSREQCYECSECGKTFIKMSNLIRHQRIHTGEKPYVCQECGKSFGQKSNLIDHEKIHTGEKPYKCNECGKSFSQKQSLVAHQKVHTGEKPYACNECGKAFPRVASLALHMRGHTREKPYKCDKCGKAF [...]
+chr4-04	SwissProt	protein_match	266091	266231	91.000000	-	.	Target=Q9NV72.1 408 456 +;percentID=44;Gap=M32 I2 M15 ;sequence=MALPQGLLTFRDVAIEFSQEEWKCLDPAQRTLYRDVMLENYRNLVSLDTSSKCMMKMFSSTGQGNTEVVHTGTLQIHASHHIGDTCFQEIEKDIHDFVFQWQENETNGHEALMTKIKKLMSSTERHDQRHAGNKPIKNELGSSFHSHLPEVHIFHPEGKIGNQVEKAINDAFSVSASQRISCRPKTRISNKYRNNFLQSSLLTQKREVHTREKSFQRNESGKAFNGSSLLKKHQIIHLGDKQYKCDVCGKDFHQKRYLACHRCHTGENPYKCNECGKTFSHNSALLVHKAIHTGEKPYKCNECGKVFNQQSNLARHHRVHTGEKPYKCEECDKVFSRKSHLERHRRIHTGEKPYKCKVCDKAFRRDSH [...]
+chr4-04	SwissProt	protein_match	266091	266231	91.000000	-	.	Target=Q5MCW4.1 604 652 +;percentID=48;Gap=M14 D1 M9 I1 M7 I2 M16 ;sequence=MTESQGTVTFKDVAIDFTQEEWKRLDPAQRKLYRNVMLENYNNLITVGYPFTKPDVIFKLEQEEEPWVMEEEVLRRHWQGEIWGVDEHQKNQDRLLRQVEVKFQKTLTEEKGNECQKKFANVFPLNSDFFPSRHNLYEYDLFGKCLEHNFDCHNNVKCLMRKEHCEYNEPVKSYGNSSSHFVITPFKCNHCGKGFNQTLDLIRHLRIHTGEKPYECSNCRKAFSHKEKLIKHYKIHSREQSYKCNECGKAFIKMSNLIRHQRIHTGEKPYACKECEKSFSQKSNLIDHEKIHTGEKPYECNECGKAFSQKQSLIAHQKVHTGEKPYACNECGKAFPRIASLALHMRSHTGEKPYKC [...]
+chr4-04	SwissProt	protein_match	266091	266231	92.000000	-	.	Target=Q9NZL3.2 202 250 +;percentID=44;Gap=M32 I2 M15 ;sequence=MTTFKEAMTFKDVAVVFTEEELGLLDLAQRKLYRDVMLENFRNLLSVGHQAFHRDTFHFLREEKIWMMKTAIQREGNSGDKIQTEMETVSEAGTHQEWSFQQIWEKIASDLTRSQDLVINSSQFSKEGDFPCQTEAGLSVIHTRQKSSQGNGYKPSFSDVSHFDFHQQLHSGEKSHTCDECGKNFCYISALRIHQRVHMGEKCYKCDVCGKEFSQSSHLQTHQRVHTGEKPFKCVECGKGFSRRSALNVHHKLHTGEKPYNCEECGKAFIHDSQLQEHQRIHTGEKPFKCDICGKSFCGRSRLNRHSMVHTAEKPFRCDTCDKSFRQRSALNSHRMIHTGEKPYKCEECGKGFICRRDLYTHHMVHTG [...]
+chr4-04	SwissProt	protein_match	266091	266231	93.000000	-	.	Target=Q5RER9.1 325 373 +;percentID=46;Gap=M32 I2 M15 ;sequence=MALSQGLLTFRDVAIEFSQEEWKCLDPAQRTLYRDVMLENYRNLVSLDISSKCMMKEFLSTAQGNREVFHTGTLERHESHHIGDFCFQETDKDIHNLEFQWQEDERNGHEVLMTEIKKLTGSTDQYNQSHARNKPIKDQLGSSFYSHLPELHIFQTQGKIDNQVEKSINNASSISTAQRISCRPKTHISNNYGNNFLNSLLLTQKQEVRMREKSFQYNESGKAFNYSSLLRKHQIIHLGEKQYKCDVCGKVFNRKRNLACHRRCHTGEKPYRCNECGKTFSQTYSLTCHRRLHTGEKPYKCEECDKAFSFKSNLKRHRRIHAGEKPYKCNECGKTFSQTSSLTCHRRLHTGEKPYKCNECGKTFSWKS [...]
+chr4-04	SwissProt	protein_match	266091	266231	93.000000	-	.	Target=Q9Y6Q3.3 375 423 +;percentID=46;Gap=M31 I2 M16 ;sequence=MSVSSGVQILTKPETVDRRRSAETTKEAGRPLEMAVSEPEASAAEWKQLDPAQSNLYNDVMLENYCNQASMGCQAPKPDMISKLEKGEAPWLGKGKRPSQGCPSKIARPKQKETDGKVQKDDDQLENIQKSQNKLLREVAVKKKTQAKKNGSDCGSLGKKNNLHKKHVPSKKRLLKFESCGKILKQNLDLPDHSRNCVKRKSDAAKEHKKSFNHSLSDTRKGKKQTGKKHEKLSSHSSSDKCNKTGKKHDKLCCHSSSHIKQDKIQTGEKHEKSPSLSSSTKHEKPQACVKPYECNQCGKVLSHKQGLIDHQRVHTGEKPYECNECGIAFSQKSHLVVHQRTHTGEKPYECIQCGKAHGHKHALTDHL [...]
+chr4-04	SwissProt	protein_match	266091	266231	93.000000	-	.	Target=Q9Y6Q3-2.3 390 438 +;percentID=46;Gap=M31 I2 M16 ;sequence=MSVSSGVQILTKPETVDRRRSAETTKEAGRPLEMAVSEPEASAAVSVTFKHVTMAFTQKEWKQLDPAQSNLYNDVMLENYCNQASMGCQAPKPDMISKLEKGEAPWLGKGKRPSQGCPSKIARPKQKETDGKVQKDDDQLENIQKSQNKLLREVAVKKKTQAKKNGSDCGSLGKKNNLHKKHVPSKKRLLKFESCGKILKQNLDLPDHSRNCVKRKSDAAKEHKKSFNHSLSDTRKGKKQTGKKHEKLSSHSSSDKCNKTGKKHDKLCCHSSSHIKQDKIQTGEKHEKSPSLSSSTKHEKPQACVKPYECNQCGKVLSHKQGLIDHQRVHTGEKPYECNECGIAFSQKSHLVVHQRTHTGEKPYEC [...]
+chr4-04	SwissProt	protein_match	266091	266231	94.000000	-	.	Target=Q8N9Z0.2 258 306 +;percentID=48;Gap=M17 I1 M6 D1 M8 I2 M15 ;sequence=MLCDEEAQKRKAKESGMALPQGRLTFMDVAIEFSQEEWKSLDPGQRALYRDVMLENYRNLVFLGICLPDLSIISMLKQRREPLILQSQVKIVKNTDGRECVRSVNTGRSCVLGSNAENKPIKNQLGLTLEAHLSELQLFQAGRKIYRSNQVEKFTNHRSSVSPLQKISSSFTTHIFNKYRNDLIDFPLLPQEEKAYIRGKSYEYECSEDGEVFRVRASLTNHQVIHTAEKPYKCTECGKVFSRNSHLVEHWRIHTGQKPYKCSECDKVFNRNSNLARHQRIHTGEKPHKCNECGKAFRECSGLTTHLVIHTGEKPYKCNECGKNFRHKFSLTNHQRSHTAEKPYKCNECGKVFSLL [...]
+chr4-04	SwissProt	protein_match	266091	266231	94.000000	-	.	Target=Q8N9Z0-2.2 215 263 +;percentID=48;Gap=M17 I1 M6 D1 M8 I2 M15 ;sequence=MLCDEEAQKRKAKESGMALPQGRLTFMDVAIEFSQEEWKSLDPGQRALYRDVMLENYRNLVFLGRSCVLGSNAENKPIKNQLGLTLEAHLSELQLFQAGRKIYRSNQVEKFTNHRSSVSPLQKISSSFTTHIFNKYRNDLIDFPLLPQEEKAYIRGKSYEYECSEDGEVFRVRASLTNHQVIHTAEKPYKCTECGKVFSRNSHLVEHWRIHTGQKPYKCSECDKVFNRNSNLARHQRIHTGEKPHKCNECGKAFRECSGLTTHLVIHTGEKPYKCNECGKNFRHKFSLTNHQRSHTAEKPYKCNECGKVFSLLSYLARHQIIHSTEKPYKCNECGRAFHKRPGLMAHLLIHTGE [...]
+chr4-04	SwissProt	protein_match	266091	266240	95.000000	-	.	Target=Q12901.3 199 250 +;percentID=42;Gap=M35 I2 M15 ;sequence=MTTFKEAVTFKDVAVVFTEEELGLLDPAQRKLYRDVMLENFRNLLSVGHQPFHQDTCHFLREEKFWMMGTATQREGNSGGKIQTELESVPEAGAHEEWSCQQIWEQIAKDLTRSQDSIINNSQFFENGDVPSQVEAGLPTIHTGQKPSQGGKCKQSFSDVPIFDLPQQLYSEEKSYTCDECGKSICYISALHVHQRVHVGEKLFMCDVCGKEFSQSSHLQTHQRVHTGEKPFKCEQCGKGFSRRSALNVHHKLHTGEKPYICEACGKAFIHDSQLKEHKRIHTGEKPFKCDICGKTFYFRSRLKSHSMVHTGEKPFRCDTCDKSFHQRSALNRHCMVHTGEKPYRCEQCGKGFIGRLDFYKHQVVHTG [...]
+chr4-04	SwissProt	protein_match	266091	266231	95.000000	-	.	Target=Q9BR84.1 323 371 +;percentID=44;Gap=M31 I2 M16 ;sequence=MVAGWLTNYSQDSVTFEDVAVDFTQEEWTLLDQTQRNLYRDVMLENYKNLVAVDWESHINTKWSAPQQNFLQGKTSSVVEMERNHFGEELFDFNQCEKALSEHSCLKTHRRTYFRKKTCECNQCEKAFRKPSIFTLHKKTDIGEELPNCNQCETAFSQHLHLVCKKTSQNLHLVCKKTHTQEKPYKCSDCEKGLPSSSHLRECVRIYGGERPYTHKEYVETFSHSTALFVHMQTQDGEKFYECKACGKPFTESSYLTQHLRTHSRVLPIEHKKFGKAFAFSPDLAKHIRLRTRGKHYVCNECGKEFTCFSKLNIHIRVHTGEKPYECNKCGKAFTDSSGLIKHRRTHTGEKPYECKECGKAFANSSHL [...]
+chr4-04	SwissProt	protein_match	266091	266231	95.000000	-	.	Target=Q6ZMW2.1 476 524 +;percentID=44;Gap=M32 I2 M15 ;sequence=MNTFQASVSFQDVTVEFSQEEWQHMGPVERTLYRDVMLENYSHLVSVGYCFTKPELIFTLEQGEDPWLLEKEKGFLSRNSPEDSQPDEISEKSPENQGKHLLQVLFTNKLLTTEQEISGKPHNRDINIFRARMMPCKCDIAGSACQGLSLMAPHCQYSKEKAHERNVCDKWLISIKDGRTNTQEKSFAYSKIVKTLHHKEEVIQHQTIQTLGQDFEYNESRKAFLEKAALVTSNSTHPKGKSYNFNKFGENKYDKSTFIIPQNMNPEKSHYEFNDTGNCFCRITHKTLTGGKSFSQKSHIREHHRVHIGVKPFEYGKSFNRNSTLPVHQRTHATDKYSDYHPCTETFSYQSTFSVHQKVHIRAKPYEY [...]
+chr4-04	SwissProt	protein_match	266091	266303	95.000000	-	.	Target=Q3KNS6-2.1 31 102 +;percentID=35;Gap=M23 D1 M31 I2 M16 ;sequence=MNKEYGKSFSRGSLVTRHQRIHTGKKPYECKECGKAFSCSSYFSQHQRIHTGEKPYECKECGKAFKYCSNLNDHQRIHTGEKPYECKVCGKAFTKSSQLFLHLRIHTGEKPYECKECGKAFTQHSRLIQHQRMHTGEKPYECKQCGKAFNSASTLTNHHRIHAGEKLYECEECRKAFIQSSELIQHQRIHTDEKPYECNECGKAFNKGSNLTRHQRIHTGEKPYDCKECGKAFGSRSDLIRHEGIHTG
+chr4-04	SwissProt	protein_match	266091	266231	96.000000	-	.	Target=Q9QXT9.1 232 280 +;percentID=42;Gap=M31 I2 M16 ;sequence=MAPEQREGKSQVSVTFEDVAVLFTRDEWKKLVPSQRSLYREVMLENYSNLASLGFPFTKPKMISVLQQGEEPWKSEKESHGCSPLGCHGSLQTTKSTQTKESLFQELKRKQLKRDEAWDFTSGKSCRPDNSFRTQDTNESLEIISINHTKILTIDKSRKNFKFGPSVGLKSIGKQKIAGEKTQRNSLEENSTLLSQPKLKTVEKRYKCSTCEKAFIHNSSLRKHLKNHTGERLFQCKDCLKAFSQSSALIQHQRTHTGEKPYICKECGKAFSHSASLCKHLRTHTLEKSYTCKECGKSFSRRSGLFLHQKIHARENPHKYNPGRKASTSLSGCQRIHSRKKTYLCNECGNTFKSSSSLRYHQRIHTGE [...]
+chr4-04	SwissProt	protein_match	266091	266231	97.000000	-	.	Target=O60765.2 240 288 +;percentID=44;Gap=M31 I2 M16 ;sequence=MAAGQREARPQVSLTFEDVAVLFTRDEWRKLAPSQRNLYRDVMLENYRNLVSLGLPFTKPKVISLLQQGEDPWEVEKDGSGVSSLGSKSSHKTTKSTQTQDSSFQGLILKRSNRNVPWDLKLEKPYIYEGRLEKKQDKKGSFQIVSATHKKIPTIERSHKNTELSQNFSPKSVLIRQQILPREKTPPKCEIQGNSLKQNSQLLNQPKITADKRYKCSLCEKTFINTSSLRKHEKNHSGEKLFKCKECSKAFSQSSALIQHQITHTGEKPYICKECGKAFTLSTSLYKHLRTHTVEKSYRCKECGKSFSRRSGLFIHQKIHAEENPCKYNPGRKASSCSTSLSGCQRIHSRKKSYLCNECGNTFKSSSS [...]
+chr4-04	SwissProt	protein_match	266091	266231	97.000000	-	.	Target=Q61751.1 210 258 +;percentID=44;Gap=M31 I2 M16 ;sequence=MAPEQWEATSQVSLTFEDVAVLFTRDEWKKLVPSQRSLYREVMLENYSNLASLGFPFTKPKVISLLQQGEDPWKVEEEGPGDFSLGLKCSQRTTKSTQTQDSSFRELIMRKSKRKEPWNMKSENLSIHEGKLEEKWDVNASTIERSYKSNELSPKSHREKRSSECEKQISYLSNPLGITPDKRYKCSMCEKTFINTSSLRKHEKNHSGEKLFKCKECSKAFSQSSALIQHQITHTGEKPYVCKECGKAFTLSTSLYKHLRTHTVEKSYRCKECGKSFGRRSGLFIHQKVHAGENPYKYNPGRKASTSLSGCQRIHSRKKTYLCNECGNTFKSSSSLRYHQRIHTGEKPFKCSECGRAFSQSASLIQHE [...]
+chr4-04	SwissProt	protein_match	266091	266231	97.000000	-	.	Target=Q02975.1 214 262 +;percentID=44;Gap=M31 I2 M16 ;sequence=MAPEQREGASQVSVTFEDVAVLFTRDEWKKLDLSQRSLYREVMLENYSNLASMAGFLFTKPKVISLLQQGEDPWQVEKEGPRYFSLGLKCSHRTTKSTQTQDSSFQELIVRKSKRTFAFEPLNMKSENLFIHEGKLEEKWDKNTLTVERSHKNNEFSPKSHREKRSSECKKQISYLSNPPGITPDKRYKCSMCEKTFINTSSLRKHEKNHSGEKLFKCKECSKAFSQSSALIQHQITHTGEKPYVCKECGKAFTLSTSLYKHLRTHTVEKSYRCKECGKSFGQRSGLFIHQKIHARENPHRYNPGRKASASLSGCQRAHSRKKTYLCNECGNTFKSSSSLRYHQRIHTGEKPFRCSECGRAFSQSASL [...]
+chr4-04	SwissProt	protein_match	266091	266231	98.000000	-	.	Target=Q09FC8-4.2 341 389 +;percentID=50;Gap=M13 I1 M10 D1 M8 I2 M15 ;sequence=MWEHRKEPWTIESQVRVARKPKGWEWIKGVKTDLSRNCVIKELAPQQEGNPGEVFHTVTLEQHEKHDIEEFCFREIKKKIHDFDCQWRDDERNCNKVTTAPKENLTCRRDQRDRRGIGNKSIKHQLGLSFLPHPHELQQFQAEGKIYECNHVEKSVNHGSSVSPPQIISSTIKTHVSNKYGTDFICSSLLTQEQKSCIREKPYRYIECDKALNHGSHMTVRQVSHSGEKGYKCDLCGKVFSQKSNLARHWRVHTGEKPYKCNECDRSFSRNSCLALHRRVHTGEKPYKCYECDKVFSRNSCLALHQKTHIGEKPYTCKECGKAFSVRSTLTNHQVIHSGKKPYKCNECGKVFS [...]
+chr4-04	SwissProt	protein_match	266091	266231	98.000000	-	.	Target=Q09FC8-3.2 124 172 +;percentID=50;Gap=M13 I1 M10 D1 M8 I2 M15 ;sequence=MTVRQVSHSGEKGYKCDLCGKVFSQKSNLARHWRVHTGEKPYKCNECDRSFSRNSCLALHRRVHTGEKPYKCYECDKVFSRNSCLALHQKTHIGEKPYTCKECGKAFSVRSTLTNHQVIHSGKKPYKCNECGKVFSQTSSLATHQRIHTGEKPYKCNECGKVFSQTSSLARHWRIHTGEKPYKCNECGKVFSYNSHLASHRRVHTGEKPYKCNECGKAFSVHSNLTTHQVIHTGEKPYKCNQCGKGFSVHSSLTTHQVIHTGEKPYKCNECGKSFSVRPNLTRHQIIHTGKKPYKCSDCGKSFSVRPNLFRHQIIHTKEKPYKRN
+chr4-04	SwissProt	protein_match	266091	266231	100.000000	-	.	Target=P15622.3 225 273 +;percentID=52;Gap=M17 I1 M6 D1 M8 I2 M15 ;sequence=MAAARLLPVPAGPQPLSFQAKLTFEDVAVLLSQDEWDRLCPAQRGLYRNVMMETYGNVVSLGLPGSKPDIISQLERGEDPWVLDRKGAKKSQGLWSDYSDNLKYDHTTACTQQDSLSCPWECETKGESQNTDLSPKPLISEQTVILGKTPLGRIDQENNETKQSFCLSPNSVDHREVQVLSQSMPLTPHQAVPSGERPYMCVECGKCFGRSSHLLQHQRIHTGEKPYVCSVCGKAFSQSSVLSKHRRIHTGEKPYECNECGKAFRVSSDLAQHHKIHTGEKPHECLECRKAFTQLSHLIQHQRIHTGERPYVCPLCGKAFNHSTVLRSHQRVHTGEKPHRCNECGKTFSVKRTLL [...]
+chr4-04	SwissProt	protein_match	266091	266231	100.000000	-	.	Target=P15622-2.3 220 268 +;percentID=52;Gap=M17 I1 M6 D1 M8 I2 M15 ;sequence=MAAARLLPVPAGPQAKLTFEDVAVLLSQDEWDRLCPAQRGLYRNVMMETYGNVVSLGLPGSKPDIISQLERGEDPWVLDRKGAKKSQGLWSDYSDNLKYDHTTACTQQDSLSCPWECETKGESQNTDLSPKPLISEQTVILGKTPLGRIDQENNETKQSFCLSPNSVDHREVQVLSQSMPLTPHQAVPSGERPYMCVECGKCFGRSSHLLQHQRIHTGEKPYVCSVCGKAFSQSSVLSKHRRIHTGEKPYECNECGKAFRVSSDLAQHHKIHTGEKPHECLECRKAFTQLSHLIQHQRIHTGERPYVCPLCGKAFNHSTVLRSHQRVHTGEKPHRCNECGKTFSVKRTLLQHQ [...]
+chr4-04	SwissProt	protein_match	266091	266231	101.000000	-	.	Target=Q6ZN06.2 325 373 +;percentID=48;Gap=M32 I2 M15 ;sequence=MALPQGLLTFRDVAIEFSQEEWKCLDPAQRTLYRDVMLENYRNLVSLDISSKCMMKEFSSTAQGNREVIHTGTLQRHESHHTGDFRFQEIDKDIHNLEFQWQEDERNSHEAPMTEIKKLTGSADRYDQRHAGNKPIKDQLGSSFHSHLPELHMFQTQGKIGNQVEKSINDASSISTSQRISCRPKTHISNNYGNNFRNSSLLTQKQEVHMREKSFQCNESGKAFNYSSLLRKHQIIHLGEKQYKCDVCGKVFNRKRNLVCHRRCHTGEKPYRCNECGKTFSQTYSLTCHRRLHTGEKPYKCEECDKAFSFKSNLKRHRRIHAGEKPYKCNECGKTFSQTSSLTCHRRLHTGEKPFKCNECGKTFSRK [...]
+chr4-04	SwissProt	protein_match	266091	266231	102.000000	-	.	Target=P17141.3 337 385 +;percentID=48;Gap=M31 I2 M16 ;sequence=MATSEPAESDAVRAKEWEQLEPVQRDVYKDTKLENCSNPASMGNQDPKQDIVSVLEEEEPSSGKGKKASPSSLKKIARPKTAGTSAKLQQDDEHREEKQKSQSKLTKEVTLRKKSSNSKKSSEYGLLENKSLHSKHTPSEKKLLKSSSRGKNSNQNSDSLKKKPDTANEHRKSLSHSASDVNKDEIPTRKKCDKLPNNKLSDKGDKNQTSKKCEKVCRHSASHTKEDKIQTGEKRKSHCRTPSKPEKAPGSGKPYECNHCGKVLSHKQGLLDHQRTHTGEKPYECNECGIAFSQKSHLVLHQRTHTGEKPYECEQCGKAHGHKHALTDHLRIHTGEKPYKCNECGKTFRHSSNLMQHLRSHTGEKPY [...]
+chr4-04	SwissProt	protein_match	266091	266231	104.000000	-	.	Target=Q96IR2.2 493 541 +;percentID=46;Gap=M32 I2 M15 ;sequence=MALSQGLLTFRDVAIEFSQEEWKCLDPAQRTLYRDVMLENYRNLVSLDISSKCMMKEFSSTAQGNTEVIHTGTLQRHERHHIGDFCFQEMEKDIHDFEFQWKEDERNSHEAPMTEIKQLTGSTNRHDQRHAGNKPIKDQLGSSFHSHLPELHMFQTQGKIGNQVEKSINSASLVSTSQRISCRPKTHISKNYGNNFLNSSLLTQKQEVHMREKSFQCNESGKAFNYSSVLRKHQIIHLGAKQYKCDVCGKVFNQKRYLACHRRCHTGKKPYKCNDCGKTFSQELTLTCHHRLHTGEKHYKCSECGKTFSRNSALVIHKAIHTGEKSYKCNECGKTFSQTSYLVYHRRLHTGEKPYKCEECDKAFSFK [...]
+chr4-04	SwissProt	protein_match	266091	266231	106.000000	-	.	Target=Q6ZN19.1 507 555 +;percentID=48;Gap=M32 I2 M15 ;sequence=MLEGHESYDTENFYFREIRKNLQEVDFQWKDGEINYKEGPMTHKNNLTGQRVRHSQGDVENKHMENQLILRFQSGLGELQKFQTAEKIYGCNQIERTVNNCFLASPLQRIFPGVQTNISRKYGNDFLQLSLPTQDEKTHIREKPYIGNECGKAFRVSSSLINHQMIHTTEKPYRCNESGKAFHRGSLLTVHQIVHTRGKPYQCDVCGRIFRQNSDLVNHRRSHTGDKPYICNECGKSFSKSSHLAVHQRIHTGEKPYKCNRCGKCFSQSSSLATHQTVHTGDKPYKCNECGKTFKRNSSLTAHHIIHAGKKPYTCDVCGKVFYQNSQLVRHQIIHTGETPYKCNECGKVFFQRSRLAGHRRIHTGEK [...]
+chr4-04	SwissProt	protein_match	266091	266231	110.000000	-	.	Target=Q8WV37.1 378 426 +;percentID=50;Gap=M17 I1 M6 D1 M8 I2 M15 ;sequence=MALPQGHLTFRDVAIEFSQAEWKCLDPAQRALYKDVMLENYRNLVSLGISLPDLNINSMLEQRREPWSGESEVKIAKNSDGRECIKGVNTGSSYALGSNAEDKPIKKQLGVSFHLHLSELELFPDERVINGCNQVENFINHSSSVSCLQEMSSSVKTPIFNRNDFDDSSFLPQEQKVHLREKPYECNEHSKVFRVSSSLTKHQVIHTVEKPYKCNSCGKVFSRNSHLAEHCRIHTGEKPYKCNVCGKVFSYNSNFARHQRIHTREKPYECNECGKVFSNNSYLARHQRIHAEEKPYKCNECGKGFSHKSSLANHWRIYTGEKPYKCDECGKAFYRIALLVRHQKIHTGEKPYKCN [...]
+chr4-04	SwissProt	protein_match	266091	266231	110.000000	-	.	Target=Q99676.3 416 464 +;percentID=48;Gap=M32 I2 M15 ;sequence=MEDLSSPDSTLLQGGHNLLSSASFQESVTFKDVIVDFTQEEWKQLDPGQRDLFRDVTLENYTHLVSIGLQVSKPDVISQLEQGTEPWIMEPSIPVGTCADWETRLENSVSAPEPDISEEELSPEVIVEKHKRDDSWSSNLLESWEYEGSLERQQANQQTLPKEIKVTEKTIPSWEKGPVNNEFGKSVNVSSNLVTQEPSPEETSTKRSIKQNSNPVKKEKSCKCNECGKAFSYCSALIRHQRTHTGEKPYKCNECEKAFSRSENLINHQRIHTGDKPYKCDQCGKGFIEGPSLTQHQRIHTGEKPYKCDECGKAFSQRTHLVQHQRIHTGEKPYTCNECGKAFSQRGHFMEHQKIHTGEKPFKCDEC [...]
+chr4-04	SwissProt	protein_match	266091	266231	110.000000	-	.	Target=A6QLU5.1 417 465 +;percentID=48;Gap=M32 I2 M15 ;sequence=MEDLSAPESALFQGGHTLLPSASFQESVTFKDVIVDFTQEEWKQLDPVQRGLFRDVTLENYTHLVSIGLQVSKPDVISQLEQGTEPWIVEPSIPVGTPGDWVTRPENSITASELDISGEEPSPGAVAEKHKRDDPWSTNFLETCESKGSPERQQANKQTLPREIKITEKTIPTLEQAHVNNDFEKSISVSLDLLTHKQISPKQTSTKTNVKQNLNPVKKEKSCKCNECGKAFTYCSALIRHQRTHTGEKPYKCNECEKAFSRSENLINHQRIHTGDKPYKCDQCGKGFIEGPSLTQHQRIHTGEKPYKCDECGKAFSQRTHLVQHQRIHTGEKPYTCNECGKAFSQRGHFMEHQKIHTGEKPFKCDE [...]
+chr4-04	SwissProt	protein_match	266091	266231	110.000000	-	.	Target=Q8WV37-3.1 228 276 +;percentID=50;Gap=M17 I1 M6 D1 M8 I2 M15 ;sequence=MSSSVKTPIFNRNDFDDSSFLPQEQKVHLREKPYECNEHSKVFRVSSSLTKHQVIHTVEKPYKCNSCGKVFSRNSHLAEHCRIHTGEKPYKCNVCGKVFSYNSNFARHQRIHTREKPYECNECGKVFSNNSYLARHQRIHAEEKPYKCNECGKGFSHKSSLANHWRIYTGEKPYKCDECGKAFYRIALLVRHQKIHTGEKPYKCNECGKVFIQNSHLAQHWRIHTGEKPYKCNECGKVFNQLSNLARHRRIHTGEKPYKCNECGKAFSEYSGLSAHLVIHTGEKPYKCSECGKAFRHKLSLTNHQRIHTGERPYKCNECGKVFNRIAHLARHRKIHTGEKPYKCNECGKAFSR [...]
+chr4-04	SwissProt	protein_match	266091	266423	328.000000	-	.	Target=Q03923.3 76 192 +;percentID=56;Gap=M45 I4 M51 I2 M15 ;sequence=MGPLTFRDVAIEFSLKEWQCLDTAQRNLYRNVMLENYRNLVFLGITVSKPDLITCLEQGKEAWSMKRHEIMVAKPTVMCSHFAQDLWPEQNIKDSFQKVTLKRYGKCRHENLPLRKGCESMDECKMHKGGCNGLNQCLTATQSKIFQCDKYVKVAHKFSNSNRHEIRHTKKKPFKCTKCGKSFGMISCLTEHSRIHTRVNFYKCEECGKAFNWSSTLTKHKRIHTGEKPYKCEECGKAFNQSSNLIKHKKIHTGEKPYKCEECGKTFNRFSTLTTHKIIHTGEKPYKCKECGKAFNRSSTLTTHRKIHTGEKPYKCEECGKAFKQSSNLTTHKIIHTGEKPYKCKKCGKAFNQSAHLTTHE [...]
+chr4-04	SwissProt	protein_match	266091	266441	330.000000	-	.	Target=Q03923-2.3 39 159 +;percentID=56;Gap=M2 D1 M3 D1 M44 I4 M51 I2 M15 ;sequence=MGPLTFRDVAIEFSLKEWQCLDTAQRNLYRNVMLENYRNLVFLVMCSHFAQDLWPEQNIKDSFQKVTLKRYGKCRHENLPLRKGCESMDECKMHKGGCNGLNQCLTATQSKIFQCDKYVKVAHKFSNSNRHEIRHTKKKPFKCTKCGKSFGMISCLTEHSRIHTRVNFYKCEECGKAFNWSSTLTKHKRIHTGEKPYKCEECGKAFNQSSNLIKHKKIHTGEKPYKCEECGKTFNRFSTLTTHKIIHTGEKPYKCKECGKAFNRSSTLTTHRKIHTGEKPYKCEECGKAFKQSSNLTTHKIIHTGEKPYKCKKCGKAFNQSAHLTTHEVIHTGEKPYKCEKCGKAFN [...]
+chr4-04	SwissProt	protein_match	266091	266417	348.000000	-	.	Target=Q8NEM1.2 86 200 +;percentID=62;Gap=M43 I4 M51 I2 M15 ;sequence=MPGPPGSLEMGPLTFRDVAIEFSLEEWQCLDTAQRNLYRKVMFENYRNLVFLGIAVSKPHLITCLEQGKEPWNRKRQEMVAKPPVIYSHFTEDLWPEHSIKDSFQKVILRGYGKCGHENLQLRISCKSVDESKVFKEGYNELNQCLRTTQSKIFQCDKYVKVFHKFSNSNSHKKRNTGKKVFKCKECGKSFCMLSHLTQHIRIHTRENSYKCEECGKVLNWFSELIKHKGIHMGEKPYKCEECGKAFNQSSTLIKHKKIHIEEKPFKCEECGKAFSLFSILSKHKIIHTGDKPYKCDECHKAFNWFATLTNHKRIHTGEKPFKCEECGKDFNQFSNLTKHKKIHTGEKPYKCEECGKAFNQ [...]
+chr4-04	SwissProt	protein_match	266100	266159	60.000000	-	.	Target=Q8N587.2 247 268 +;percentID=59;Gap=M6 I2 M14 ;sequence=MAAIYLSRGFFSREPICPFEEKTKVERMVEDYLASGYQDSVTFDDVAVDFTPEEWALLDTTEKYLYRDVMLENYMNLASVEWEIQPRTKRSSLQQGFLKNQIFSGIQMTRGYSGWKLCDCKNCGEVFREQFCLKTHMRVQNGGNTSEGNCYGKDTLSVHKEASTGQELSKFNPCGKVFTLTPGLAVHLEVLNARQPYKCKECGKGFKYFASLDNHMGIHTDEKLCEFQEYGRAVTASSHLKQCVAVHTGKKSKKTKKCGKSFTNFSQLYAPVKTHKGEKSFECKECGRSFRNSSCLNDHIQIHTGIKPHKCTYCGKAFTRSTQLTEHVRTHTGIKPYECKECGQAFAQYSGLSIHIRSHSGKKPYQCKE [...]
+chr4-04	SwissProt	protein_match	266112	266156	53.000000	-	.	Target=Q9Y2H8.1 304 320 +;percentID=58;Gap=M6 I2 M9 ;sequence=MSPHPEAITDCVTLNTVGQLAEGGYPLRFSTLFQEQQKMNISQASVSFKDVTIEFTQEEWQQMAPVQKNLYRDVMLENYSNLVSVGYCCFKPEVIFKLEQGEEPWFSEEEFSNQSHPKDYRGDDLIKQNKKIKDKHLEQAICINNKTLTTEEEKVLGKPFTLHVAAVASTKMSCKCNSWEVNLQSISEFIINNRNYSTKKIGCGNVCENSPFKINFEKTQTGEKFYEHNKNMKALNYNENLPKHPKFQTLEQAFECNKIGKAFNDKANCVKHNSSHTGETSSKDDEFRKNCDKKTLFDHRRTGTGKKHLHLNQCGKSFEKSTVEEYNKLNMGIKHYELNPSGNNFNRKAHLTDPQTAVIEENPLVSNDRT [...]
+chr4-04	SwissProt	protein_match	266118	266204	53.000000	-	.	Target=Q8IYI8.1 263 293 +;percentID=50;Gap=M3 I1 M11 D1 M7 I2 M7 ;sequence=MDPVAFKDVAVNFTQEEWALLDISQRKLYREVMLETFRNLTSLGKRWKDQNIEYEHQNPRRNFRSLIEEKVNEIKDDSHCGETFTPVPDDRLNFQEKKASPEVKSCESFVCGEVGLGNSSFNMNIRGDIGHKAYEYQEYGPKPCKCQQPKKAFRYRPSFRTQERDHTGEKPNACKVCGKTFISHSSVRRHMVMHSGDGPYKCKFCGKAFHCLRLYLIHERIHTGEKPCECKQCGKSFSYSATHRIHKRTHTGEKPYEYQECGKAFHSPRSYRRHERIHMGEKAYQCKECGKAFTCPRYVRIHERTHSRKNLYECKQCGKALSSLTSFQTHVRLHSGERPYECKICGKDFCSVNSFQR [...]
+chr4-04	SwissProt	protein_match	266118	266231	62.000000	-	.	Target=Q9UC07.2 274 313 +;percentID=43;Gap=M12 I1 M11 D1 M7 I2 M7 ;sequence=MPCCSHRRCREDPGTSESQEMDPVAFDDVAVNFTQEEWALLDISQRKLYKEVMLETFRNLTSVGKSWKDQNIEYEYQNPRRNFRSLIEKKVNEIKDDSHCGETFTQVPDDRLNFQEKKASPEIKSCDSFVCGEVGLGNSSFNMNIRGDIGHKAYEYQEYGPKPCKCQQPKKAFRYHPSFRTPQRDHTGEKPYACKECGKTFISHSSIQRHVVMHSGDGPYKCKFCGKAFHCLSLYLIHERIHTGEKPYECKQCGKSFSYSATLRIHERTHTGEKPYECQQCGKAFHSPRCYRRHERIHTGEKAYQCKECGKAFTCPQYVRIHERTHSRKKPYECTQCGKALSSLTSFQTHIRMHSG [...]
+chr4-04	SwissProt	protein_match	266118	266231	64.000000	-	.	Target=Q5REI6.1 298 337 +;percentID=48;Gap=M14 D1 M9 I1 M8 I2 M6 ;sequence=MDSVAFKDVSVSFSQEEWALLAPSQKKLYRDVMQETFKNLASIGEKWEDPNVEDQHRNQGRNLRSHMGERLCEGKEGSQCAETFSPNLSVTKKTAGVKPYECTICGKVFMRLSSLTRHMRSHTGYELFEKPYKCKECGKAFSYLKSFQRHERSHTGEKPYKCKQCGKTFIYHQPFQRHEQTHIGEKPYECKQCGKALSCSSSLRVHERIHTGEKPYECKQCGKAFSCSSSIRVHERTHTGEKPYACKECGKAFISHTSVLTHMITHNGDRPYKCKECGKAFIFPSFLRVHERIHTGEKPYTCKQCGKAFRCSTSIQIHERIHTGEKPYKCKECGKSFSARPAFRVHVRVHTGEKPYK [...]
+chr4-04	SwissProt	protein_match	266118	266225	74.000000	-	.	Target=Q96BR6.2 250 287 +;percentID=46;Gap=M11 D1 M10 I1 M8 I2 M6 ;sequence=MVSGLRLASRSGEEGWLKPAVARLGPPRHRLRNLRTESPWRSRGSVLFCSGPGRAGRAAEPLHPVCTCGRHFRRPEPCREPLASPIQDSVAFEDVAVNFTQEEWALLDSSQKNLYREVMQETCRNLASVGSQWKDQNIEDHFEKPGKDIRNHIVQRLCESKEDGQYGEVVSQIPNLDLNENISTGLKPCECSICGKVFVRHSLLNRHILAHSGYKPYGEKQYKCEQCGKFFVSVPGVRRHMIMHSGNPAYKCTICGKAFYFLNSVERHQRTHTGEKPYKCKQCGKAFTVSGSCLIHERTHTGEKPYECKECGKTFRFSCSFKTHERTHTGERPYKCTKCDKAFSCSTSLRYHGSIH [...]
+chr4-04	SwissProt	protein_match	266121	266177	49.000000	-	.	Target=Q15935.2 153 170 +;percentID=47;Gap=M4 D1 M14 ;sequence=MDCVIFEEVAVNFTPEEWALLDHAQRSLYRDVMLETCRNLASLDCYIYVRTSGSSSQRDVFGNGISNDEEIVKFTGSDSWSIFGENWRFDNTGDQHQIPQRHLRSQLGRLCESNEGHQCGETLSQTANLLVHKSYPTEAKPSECTKCGKAFENRQRSHTGQRPCKECGQACSCLSCQSPPMKTQTVEKPCNCQDSRTASVTYVKSLSSKKSYECQKCGKAFICPSSFRGHVNSHHGQKTHACKVCGKTFMYYSYLTRHVRTHTGEKPYECKECGKAFSCPSYFREHVRTHTGEKPYECKHCGKSFSCYSSFRDHVRTHTGEKPCQCKHCGKAFTCYSSLREHGRTHSGEKPYECKECGKAFRYPSSLRA [...]
+chr4-04	SwissProt	protein_match	266136	266162	40.000000	-	.	Target=Q13106.3 60 68 +;percentID=66;sequence=MAAATLRTPTQGTVTFEDVAVHFSWEEWGLLDEAQRCLYRDVMLENLALLTSLDVHHQKQHLGEKHFRSNVGRALFVKTCTFHVSGEPSTCREVGKDFLAKLGFLHQQAAHTGEQSNSKSDGGAISHRGKTHYNCGEHTKAFSGKHTLVQQQRTLTTERCYICSECGKSFSKSYSLNDHWRLHTGEKPYECRECGKSFRQSSSLIQHRRVHTAVRPHECDECGKLFSNKSNLIKHRRVHTGERPYECSECGKSFSQRSALLQHRGVHTGERPYECSECGKFFTYHSSLIKHQKVHSGSRPYECSECGKSFSQNSSLIEHHRVHTGERPYKCSECGKSFSQRSALLQHRGVHTGERPYECSECGKFFPYSSSLRKHQRVHTGSRPYE [...]
+chr4-04	SwissProt	protein_match	266145	266231	58.000000	-	.	Target=Q86XN6.2 716 744 +;percentID=48;sequence=MAFSQGLLTFRDVAIEFSQEEWKCLDPAQRTLYRDVMLENYRNLVSLDISSKCTMKEFLSTAQGNREVFHAGTLQIHESHHNGDFCYQDVDKDIHDYEFQWQEDERNGHEAPMTKIKKLTGSTERYDQSHARNKPIKDQLGSSFHSHLPEMHIFQTEEKIDNQVVKSIHDASLVSTAQRISCRPKTHISNNHGNNFWNSSLLTQKQEVHMREKSFQCNESGKAFNYSSLLRKHQIIHLADKYKCDVCGKLFNQKRNLACHRRCHTGENPYKCNECGKTFSQTSSLTCHRRLHTGEKPYKCEECDKAFHFKSILERHRIIHTEEKPYKCNECGKTFRQKSILTRHHRLHTGEKPYKCNECGKTFSHKSSLTCHHRLHTGEKPYKC [...]
+chr4-04	SwissProt	protein_match	266304	266423	110.000000	-	.	Target=Q8IW36.3 86 125 +;percentID=52;sequence=MGLLAFRDVALEFSPEEWECLDPAQRSLYRDVMLENYRNLISLGEDSFNMQFLFHSLAMSKPELIICLEARKEPWNVNTEKTARHSVLSSYLTEDILPEQGLQVSFQKVMLRRYERCCLEKLRLRNDWEIPCEDVLASPLPSAMILSFLRPPQKQKHVKPTEPVQSSTIELL
+chr4-04	SwissProt	protein_match	266304	266423	110.000000	-	.	Target=Q8IW36-2.3 86 125 +;percentID=52;sequence=MGLLAFRDVALEFSPEEWECLDPAQRSLYRDVMLENYRNLISLGEDSFNMQFLFHSLAMSKPELIICLEARKEPWNVNTEKTARHSVLSSYLTEDILPEQGLQVSFQKVMLRRYERCCLEKLRLRNDWEIVAM
+chr4-04	SwissProt	protein_match	269834	269881	40.000000	-	.	Target=Q8WTR7.1 252 267 +;percentID=43;sequence=MAEEFVTLKDVGMDFTLGDWEQLGLEQGDTFWDTALDNCQDLFLLDPPRPNLTSHPDGSEDLEPLAGGSPEATSPDVTETKNSPLMEDFFEEGFSQEIIEMLSKDGFWNSNFGEACIEDTWLDSLLGDPESLLRSDIATNGESPTECKSHELKRGLSPVSTVSTGEDSMVHNVSEKTLTPAKSKEYRGEFFSYSDHSQQDSVQEGEKPYQCSECGKSFSGSYRLTQHWITHTREKPTVHQECEQGFDRNASLSVYPKTHTGYKFYVCNEYGTTFSQSTYLWHQKTHTGEKPCKSQDSDHPPSHDTQPGEHQKTHTDSKSYNCNECGKAFTRIFHLTRHQKIHTRKRYECSKCQATFNLRKHLIQHQKTHAAKTTSECQECGKIF [...]
+chr4-04	SwissProt	protein_match	269888	269941	42.000000	+	.	Target=O75437.3 173 190 +;percentID=55
+chr4-04	SwissProt	protein_match	269888	269941	42.000000	+	.	Target=O75437-2.3 173 190 +;percentID=55
+chr4-04	SwissProt	protein_match	270080	270118	42.000000	-	.	Target=P10751.2 61 73 +;percentID=61;sequence=MSPENLSDCNNSVKDFDQHPELTIRQCVHREKPYKQEECDDSACDQHLRVHKGGMPYECKDCGKAFKYRSVLYQHRIIHTAARPYKCKECGKAFKRSRNLAQHQVTHKREKPHKCEECGRAFSALSVLTQHRITHTGEKPFKCKECGRAFKYNSTLTQHEVIHTEAKPYRCQECGKAFKRSHTLSQHQVIHKGEKPHKCDECGRAFSKHSSLTQHQVIHTGEKPYQCRECGKAFRYQSTLTRHHIVHTGAKPYKCPECDKAFNNSSTLSRHQIIHTGEKPYKCQECGRAFYCSSFLIQHMKIHFEEMPYRCRECGKPFRLSSQLIRHQRIHTGEEPYICRECGKTFKYQSNLTRHQILHTGAKPYKCPECGKAFNNSSTLTRHQII [...]
+chr4-04	SwissProt	protein_match	273594	273620	42.000000	-	.	Target=A2VDP4.1 126 134 +;percentID=88
+chr4-04	SwissProt	protein_match	273707	273730	40.000000	-	.	Target=P52736.2 408 415 +;percentID=75;sequence=MAFRDVAVDFTQDEWRLLSPAQRTLYREVMLENYSNLVSLGISFSKPELITQLEQGKETWREEKKCSPATCPADPEPELYLDPFCPPGFSSQKFPMQHVLCNHPPWIFTCLCAEGNIQPGDPGPGDQEKQQQASEGRPWSDQAEGPEGEGAMPLFGRTKKRTLGAFSRPPQRQPVSSRNGLRGVELEASPAQSGNPEETDKLLKRIEVLGFGTVNCGECGLSFSKMTNLLSHQRIHSGEKPYVCGVCEKGFSLKKSLARHQKAHSGEKPIVCRECGRGFNRKSTLIIHERTHSGEKPYMCSECGRGFSQKSNLIIHQRTHSGEKPYVCRECGKGFSQKSAVVRHQRTHLEEKTIVCSDCGLGFSDRSNLISHQRTHSGEKPYAC [...]
+chr4-04	SwissProt	protein_match	273774	273815	40.000000	+	.	Target=Q8R2V3.2 299 312 +;percentID=57;sequence=MPPGRWHAARSAQVSREQGCLRMVKEEEEDGYISMQTARPQTLNRPGQELFRQLFRQLRYHESSGPLETLSRLQELCRWWMRPDVLSKAQMLELLVLEQFLSILPGELRTWVQLHCPESGAEVVALLEELQRDLDGTPLKDPCLTQNPDVHWIGTSALQPAQIWSPASHLKNSSALEDHLETSHGIGICDVLAEQTDSPAVSVPDYFQLEEGIEYQEALTFQDVEVTFSQEEWGCLNSAQRNLYRDVILENYGNVVSVVGSSPKPALISWLEARKPWGVNICTVQLKRDADAAPEGGKLQIKPNKFILKQKPSEYIEACVKTSVSPETSVSEETGLKESFKQKSRLQTSCGDSIQMKEMKEGADISQRTGRESEVLRNNDILEL [...]
+chr4-04	SwissProt	protein_match	273795	273863	44.000000	+	.	Target=Q2VY69.1 408 431 +;percentID=41;Gap=M12 I1 M11 
+chr4-04	SwissProt	protein_match	273869	273943	55.000000	+	.	Target=Q8N8J6-2.2 135 159 +;percentID=48
+chr4-04	SwissProt	protein_match	273869	273943	55.000000	+	.	Target=Q8N8J6.2 124 148 +;percentID=48
+chr4-04	SwissProt	protein_match	273869	273943	55.000000	+	.	Target=Q8N8J6-3.2 135 159 +;percentID=48
+chr4-04	SwissProt	protein_match	273890	273943	51.000000	+	.	Target=Q5R4K8.2 130 147 +;percentID=55;sequence=MQAQESLTLEDVAVDFTWEEWQFLSPAQKDLYRDVMLENYSNLVAVGFQASKQDALSKLERGEETCTTEDEIYSRICFEIRKIDDPLQHHLQNRSIQKSVKQCHEQNMFGNIVNQNKGHFLLKQDRDTFDLHEKPLKSILSFENQKRSSGLKNSAEFNGDGKSLFHANHKQFYTEMKFPATAKPINKSQFIKQQRTHNIENAHVCSECGKAFLKLSQFIDHQRVHNGEKPHVCSMCGKAFSRKSRLMDHQRTHTELKHYECTECDKTFLKKSQLNIHQKTHMGEKPYTCSECGKAFIKKCRLIYHQRTHTGEKPHGCSVCGKAFSTKFSLTTHQKTHTGEKPYICSECGKGFIEKRRLIAHHRTHTGEKPFICNKCGKGFTLKN [...]
+chr4-04	SwissProt	protein_match	278885	278926	40.000000	-	.	Target=Q5HYK9.2 253 266 +;percentID=57;sequence=MPSARGKSKSKAPITFGDLAIYFSQEEWEWLSPIQKDLYEDVMLENYRNLVSLGLSFRRPNVITLLEKGKAPWMVEPVRRRRAPDSGSKCETKKLPPNQCNKSGQSICQKLVSAQQKAPTRKSGCNKNSVLVKPKKGHSGKKPLKCNDCGKTFSRSFSLKLHQNIHTGEKPFECSNCRKAFRQISSILLHQRIHSGKKSHECNKCGESFNQRTTLILHMRIHDGKEILDCGKALSQCQSFNIHQKIHVVGNVCQCRKCGKAFNQMSSLLLHKKIHNGKKTHKYNKCGRGFKKKSVFVVHKRIHAGEKIPENAKALSQSLQQRSHHLENPFKCRKCGKLFNRISPLMLHQRIHTSEKPYKCDKCDKFFRRLSTLILHLRIHNGEK [...]
+chr4-04	SwissProt	protein_match	278952	278990	41.000000	+	.	Target=Q3KP31.1 67 79 +;percentID=46
+chr4-04	SwissProt	protein_match	279079	279111	48.000000	-	.	Target=P17024.2 176 186 +;percentID=72;sequence=MMFQDSVAFEDVAVSFTQEEWALLDPSQKNLYRDVMQETFKNLTSVGKTWKVQNIEDEYKNPRRNLSLMREKLCESKESHHCGESFNQIADDMLNRKTLPGITPCESSVCGEVGTGHSSLNTHIRADTGHKSSEYQEYGENPYRNKECKKAFSYLDSFQSHDKACTKEKPYDGKECTETFISHSCIQRHRVMHSGDGPYKCKFCGKAFYFLNLCLIHERIHTGVKPYKCKQCGKAFTRSTTLPVHERTHTGVNADECKECGNAFSFPSEIRRHKRSHTGEKPYECKQCGKVFISFSSIQYHKMTHTGEKPYECKQCGKAFRCGSHLQKHGRTHTGEKPYECRQCGKAFRCTSDLQRHEKTHTEDKPYGCKQCGKGFRCASQLQI [...]
+chr4-04	SwissProt	protein_match	279127	279159	42.000000	+	.	Target=Q9Y2L8.1 173 183 +;percentID=81
+chr4-04	SwissProt	protein_match	279127	279159	42.000000	+	.	Target=A2T7D2.1 173 183 +;percentID=81
+chr4-04	SwissProt	protein_match	279213	279242	42.000000	-	.	Target=Q8NC26.1 299 308 +;percentID=60;sequence=MSQDSVTFADVAVNFTKEEWTLLDPAQRNLYRDVMLENSRNLAFIDWATPCKTKDATPQPDILPKRTFPEANRVCLTSISSQHSTLREDWRCPKTEEPHRQGVNNVKPPAVAPEKDESPVSICEDHEMRNHSKPTCRLVPSQGDSIRQCILTRDSSIFKYNPVLNDSQKTHENNEDDGVLGWNIQWVPCGRKTELKSSTWTGSQNTVHHIRDEIDTGANRHQRNPFGKAFREDGSLRAHNTHGREKMYDFTQCENTSRNNSIHAMQMQLYTAETNKKDCQTGATSANAPNSGSHKSHCTGEKTHKCPECGRAFFYQSFLMRHMKIHTGEKPYECGKCGKAFRYSLHLNKHLRKHVVQKKPYECEECGKVIRESSKYTHIRSHTG [...]
+chr4-04	SwissProt	protein_match	279251	279316	40.000000	-	.	Target=Q9NZV7.1 396 415 +;percentID=40;Gap=M18 D2 M2 ;sequence=MYQPEDDNNSDVTSDDDMTRNRRESSPPHSVHSFSGDRDWDRRGRSRDMEPRDRWSHTRNPRSRMPPRDLSLPVVAKTSFEMDREDDRDSRAYESRSQDAESYQNVVDLAEDRKPHNTIQDNMENYRKLLSLGFLAQDSVPAEKRNTEMLDNLPSAGSQFPDFKHLGTFLVFEELVTFEDVLVDFSPEELSSLSAAQRNLYREVMLENYRNLVSLGHQFSKPDIISRLEEEESYAMETDSRHTVICQGESHDDPLEPHQGNQEKLLTPITMNDPKTLTPERSYGSDEFERSSNLSKQSKDPLGKDPQEGTAPGICTSPQSASQENKHNRCEFCKRTFSTQVALRRHERIHTGKKPYECKQCAEAFYLMP [...]
+chr4-04	SwissProt	protein_match	279303	279395	40.000000	+	.	Target=Q9HCX3.1 247 278 +;percentID=40;Gap=M18 I1 M13 ;sequence=MAAAVLMDRVQSCVTFEDVFVYFSREEWELLEEAQRFLYRDVMLENFALVATLGFWCEAEHEAPSEQSVSVEGVSQVRTAESGLFQKAHPCEMCDPLLKDILHLAEHQGSHLTQKLCTRGLCRRRFSFSANFYQHQKQHNGENCFRGDDGGASFVKSCTVHMLGRSFTCREEGMDLPDSSGLFQHQTTYNRVSPCRRTECMESFPHSSSLRQHQGDYDGQMLFSCGDEGKAFLDTFTLLDSQMTHAEVRPFRCLPCGNVFKEKSALINHRKIHSGEISHVCKECGKAFIHLHHLKMHQKFHTGKRHYTCSECGKAFSRKDTLAQHQRVHTGERPYDCSECGKAYSRSSHLVQHQRIHTGERPYKCNEC [...]
+chr4-04	SwissProt	protein_match	279413	279499	40.000000	-	.	Target=P17040-2.3 149 180 +;percentID=36;Gap=M15 I4 M7 D1 M6 
+chr4-04	SwissProt	protein_match	279433	279516	40.000000	-	.	Target=Q16587-4.2 76 103 +;percentID=28
+chr4-04	SwissProt	protein_match	279433	279516	40.000000	-	.	Target=Q16587-2.2 77 104 +;percentID=28
+chr4-04	SwissProt	protein_match	279476	279508	40.000000	-	.	Target=P10078-2.3 261 271 +;percentID=72
+chr4-04	SwissProt	protein_match	279476	279508	40.000000	-	.	Target=P10078.3 261 271 +;percentID=72
+chr4-04	SwissProt	protein_match	279769	279831	40.000000	-	.	Target=Q8N972.1 309 329 +;percentID=42
+chr4-04	SwissProt	protein_match	279801	279875	43.000000	-	.	Target=P18751.1 235 261 +;percentID=42;Gap=M20 I3 M2 D1 M2 
+chr4-04	SwissProt	protein_match	282971	283033	42.000000	-	.	Target=Q8IZ26.2 101 121 +;percentID=42
+chr4-04	SwissProt	protein_match	283014	283082	43.000000	+	.	Target=Q8NDP4.1 126 150 +;percentID=48;Gap=M11 I2 M12 
+chr4-04	SwissProt	protein_match	283060	283107	40.000000	+	.	Target=Q9Y2H8.1 159 174 +;percentID=50
+chr4-04	SwissProt	protein_match	283117	283167	46.000000	+	.	Target=Q5REN4.1 173 189 +;percentID=58
+chr4-04	SwissProt	protein_match	283117	283167	46.000000	+	.	Target=Q8NDW4.1 174 190 +;percentID=58
+chr4-04	SwissProt	protein_match	288271	288321	40.000000	-	.	Target=Q8TB69.1 166 182 +;percentID=47
+chr4-04	SwissProt	protein_match	288792	288824	41.000000	-	.	Target=P17097.1 73 83 +;percentID=72
+chr4-04	SwissProt	protein_match	288792	288824	41.000000	-	.	Target=Q5RBX0.1 73 83 +;percentID=72
+chr4-04	SwissProt	protein_match	288817	288849	40.000000	+	.	Target=Q96RE9.1 225 235 +;percentID=63
+chr4-04	SwissProt	protein_match	288817	288849	40.000000	+	.	Target=Q96RE9-3.1 241 251 +;percentID=63
+chr4-04	SwissProt	protein_match	288817	288849	40.000000	+	.	Target=Q96RE9-2.1 240 250 +;percentID=63
+chr4-04	SwissProt	protein_match	288844	288876	41.000000	+	.	Target=Q60585.2 134 144 +;percentID=63;sequence=MAHSTVMFRDVAVGFSQEEWECLSAYERDLYRDVMLENYSHLVSLAGCSISKPDVITLLEQGKEPWMIVRAEKRRWSRDLESRYSSNGLLPEKNTYEINLSPWEIMGRIQRRGPEDSLLGKDFEYKIYEEQENSHRVYFRHVIKTTSGKRPRYRKRTPVSLYQKTPNGEKPYECGECGKAFKVRQQLTFHQRIHTGEKPYECKECGKAFRQCAHLSRHQRIHASDKLYECKKCAKIFTCSSDLRGHQRSHVGEKPYDCKECGKAFRVRGQLMLHQRIHTGEKPYACTECGKSFRQVAHLTRHQRLNSGSSRHECKECGRAFLCSTGLRLHHKLHTGEKPYDCKECGKAFRVRQQLTLHERIHTGEKPFDCKECGKTFSRGYHLT [...]
+chr4-04	SwissProt	protein_match	289105	289323	108.000000	-	.	Target=A6NP11.3 44 116 +;percentID=40;Gap=M44 I1 M4 I1 M9 D1 M3 D1 M11 
+chr4-04	SwissProt	protein_match	289105	289323	109.000000	-	.	Target=Q8IYB9.1 44 117 +;percentID=46;Gap=M38 I1 M10 I1 M9 D1 M3 D1 M5 I1 M6 ;sequence=MELVTFRDVAIEFSPEEWKCLDPAQQNLYRDVMLENYRNLVSLGFVISNPDLVTCLEQIKEPCNLKIHETAAKPPAICSPFSQDLSPVQGIEDSFHKLILKRYEKCGHENLQLRKGCKRVNECKVQKGVNNGVYQCLSTTQSKIFQCNTCVKVFSKFSNSNKHKIRHTGEKPFKCTECGRSFYMSHLTQHTGIHAGEKPYKCEKCGKAFNRSTSLSKHKRIHTGEKPYTCEECGKAFRRSTVLNEHKKIHTGEKPYKCEECGKAFTRSTTLNEHKKIHTGEKPYKCKECGKAFRWSTSMNEHKNIHTGEKPYKCKECGKAFRQSRSLNEHKNIHTGEKPYTCEK [...]
+chr4-04	SwissProt	protein_match	289195	289251	41.000000	+	.	Target=Q0VAW7.1 98 116 +;percentID=42
+chr4-04	SwissProt	protein_match	289195	289251	41.000000	+	.	Target=Q0VAW7-2.1 92 110 +;percentID=42
+chr4-04	SwissProt	protein_match	289222	289287	42.000000	-	.	Target=Q8WV37-2.1 2 24 +;percentID=43;Gap=M20 I1 M2 ;sequence=MLEQRREPWSGESEVKIAKNSDGRECIKGVNTGSSYALGSNAEDKPIKKQLGVSFHLHLSELELFPDERVINGCNQVENFINHSSSVSCLQEMSSSVKTPIFNRNDFDDSSFLPQEQKVHLREKPYECNEHSKVFRVSSSLTKHQVIHTVEKPYKCNSCGKVFSRNSHLAEHCRIHTGEKPYKCNVCGKVFSYNSNFARHQRIHTREKPYECNECGKVFSNNSYLARHQRIHAEEKPYKCNECGKGFSHKSSLANHWRIYTGEKPYKCDECGKAFYRIALLVRHQKIHTGEKPYKCNECGKVFIQNSHLAQHWRIHTGEKPYKCNECGKVFNQLSNLARHRRIHTGEKPYKCNECGKAFSEYSGLSAHLV [...]
+chr4-04	SwissProt	protein_match	289222	289323	96.000000	-	.	Target=A6NNF4-2.3 44 77 +;percentID=52;sequence=MGLLTFRDVAIEFSLEEWQCLDTAQKNLYRNVMLENYRNLAFLGIAVSKPDLIICLEKEKEPWNMKRDEMVDEPPGR
+chr4-04	SwissProt	protein_match	289225	289323	91.000000	-	.	Target=A6NNF4.3 44 76 +;percentID=51
+chr4-04	SwissProt	protein_match	289225	289323	97.000000	-	.	Target=Q05481.1 53 85 +;percentID=54
+chr4-04	SwissProt	protein_match	289225	289323	97.000000	-	.	Target=O75437.3 53 85 +;percentID=54
+chr4-04	SwissProt	protein_match	289225	289323	97.000000	-	.	Target=O75437-2.3 53 85 +;percentID=54
+chr4-04	SwissProt	protein_match	289225	289323	103.000000	-	.	Target=A8MTY0.2 44 76 +;percentID=57
+chr4-04	SwissProt	protein_match	289228	289284	43.000000	-	.	Target=Q09FC8-4.2 3 21 +;percentID=42
+chr4-04	SwissProt	protein_match	289228	289323	63.000000	-	.	Target=Q6J6I6.1 46 77 +;percentID=43
+chr4-04	SwissProt	protein_match	289228	289323	77.000000	-	.	Target=Q03923.3 44 75 +;percentID=43
+chr4-04	SwissProt	protein_match	289228	289323	79.000000	-	.	Target=O14628.2 44 75 +;percentID=46
+chr4-04	SwissProt	protein_match	289228	289323	79.000000	-	.	Target=O14628-5.2 44 75 +;percentID=46
+chr4-04	SwissProt	protein_match	289228	289323	79.000000	-	.	Target=O14628-6.2 48 79 +;percentID=46
+chr4-04	SwissProt	protein_match	289228	289323	79.000000	-	.	Target=O14628-4.2 44 75 +;percentID=46
+chr4-04	SwissProt	protein_match	289228	289323	79.000000	-	.	Target=O14628-7.2 48 79 +;percentID=46
+chr4-04	SwissProt	protein_match	289228	289347	82.000000	-	.	Target=Q96H40.3 39 75 +;percentID=45;Gap=M5 D3 M32 
+chr4-04	SwissProt	protein_match	289228	289323	82.000000	-	.	Target=O43345.1 44 75 +;percentID=46
+chr4-04	SwissProt	protein_match	289228	289323	85.000000	-	.	Target=Q9H8G1.2 76 107 +;percentID=50
+chr4-04	SwissProt	protein_match	289228	289323	85.000000	-	.	Target=A6NN14.3 53 84 +;percentID=50
+chr4-04	SwissProt	protein_match	289228	289323	85.000000	-	.	Target=O75346.2 44 75 +;percentID=50
+chr4-04	SwissProt	protein_match	289228	289323	89.000000	-	.	Target=A6NF79.3 56 87 +;percentID=53
+chr4-04	SwissProt	protein_match	289228	289323	89.000000	-	.	Target=A6NKZ1.3 56 87 +;percentID=53
+chr4-04	SwissProt	protein_match	289228	289323	90.000000	-	.	Target=Q86V71.2 44 75 +;percentID=53
+chr4-04	SwissProt	protein_match	289228	289323	91.000000	-	.	Target=Q14593-2.3 12 43 +;percentID=56
+chr4-04	SwissProt	protein_match	289228	289323	91.000000	-	.	Target=Q14593.3 77 108 +;percentID=56
+chr4-04	SwissProt	protein_match	289228	289323	92.000000	-	.	Target=A6NK75.3 12 43 +;percentID=56
+chr4-04	SwissProt	protein_match	289228	289323	92.000000	-	.	Target=Q8N7Q3.2 12 43 +;percentID=53
+chr4-04	SwissProt	protein_match	289228	289323	92.000000	-	.	Target=P17038-2.4 38 70 +;percentID=54;Gap=M21 I1 M11 
+chr4-04	SwissProt	protein_match	289228	289323	92.000000	-	.	Target=P17038.4 44 76 +;percentID=54;Gap=M21 I1 M11 
+chr4-04	SwissProt	protein_match	289228	289323	95.000000	-	.	Target=P0CB33.1 56 87 +;percentID=53
+chr4-04	SwissProt	protein_match	289228	289323	96.000000	-	.	Target=Q9P255.2 12 43 +;percentID=59
+chr4-04	SwissProt	protein_match	289228	289347	96.000000	-	.	Target=Q03938.2 39 75 +;percentID=47;Gap=M5 D3 M32 
+chr4-04	SwissProt	protein_match	289228	289323	96.000000	-	.	Target=A6NK21.3 44 75 +;percentID=59
+chr4-04	SwissProt	protein_match	289228	289323	97.000000	-	.	Target=Q9Y2Q1.1 44 75 +;percentID=59
+chr4-04	SwissProt	protein_match	289228	289323	99.000000	-	.	Target=Q03936.2 44 75 +;percentID=56
+chr4-04	SwissProt	protein_match	289228	289323	99.000000	-	.	Target=Q8IYN0.1 76 107 +;percentID=56
+chr4-04	SwissProt	protein_match	289228	289323	101.000000	-	.	Target=O95780.1 44 75 +;percentID=56
+chr4-04	SwissProt	protein_match	289228	289323	102.000000	-	.	Target=Q6ZMV8.1 44 75 +;percentID=56
+chr4-04	SwissProt	protein_match	289228	289323	103.000000	-	.	Target=Q14586.2 44 75 +;percentID=59
+chr4-04	SwissProt	protein_match	289228	289323	104.000000	-	.	Target=Q8IYX0.1 56 87 +;percentID=56
+chr4-04	SwissProt	protein_match	289228	289323	105.000000	-	.	Target=Q7Z2F6.1 44 75 +;percentID=62;sequence=MGLLTFRDVAIEFSREEWEHLDSDQKLLYGDVMLENYGNLVSLGLAVSKPDLITFLEQRKEPWNVKSAETVAIQPDIFSHDTQGLLRKKLIEASFQKVILDGYGSCGPQNLNLRKEWESEGKIILW
+chr4-04	SwissProt	protein_match	289228	289323	110.000000	-	.	Target=A8MUV8.3 44 75 +;percentID=62;sequence=MRVLTFRDVAVEFSPEEWECLDSAQQRLYRDVMLENYGNLFSLGLAIFKPDLITYLEQRKEPWNARRQKTVAKHPAGSLHFTAEILLEHDINDSFQKVILRKSGSCDLNTLRLKKDYQRVGNCKGQKSSYNGIHQCLSATRSKTCQYNKCGKAFGLCSIFTEHKKIFSREKCYKCEECGKDCRLSDFTIQKRIHTADRSYKCEECGKACKKFSNLTEHNRVHTGKKPYKCEECGKTFTCSSALTKHKRNHTGDRPYKCEECHKAFRCCSDLTKHKRIHTGEKPYKCKECHKAFRCCSDLTKHKRIHTGEKPYKCNECGKAFMWISALSQHNRIHTGEKPYICEECGKAFTYSSTLISHKRIHMELRPYKCEECGKTFKWFSDLTN [...]
+chr4-04	SwissProt	protein_match	289228	289323	124.000000	-	.	Target=Q3SXZ3-2.1 12 43 +;percentID=75
+chr4-04	SwissProt	protein_match	289228	289323	124.000000	-	.	Target=Q3SXZ3.1 44 75 +;percentID=75
+chr4-04	SwissProt	protein_match	289228	289323	125.000000	-	.	Target=Q15928.1 44 75 +;percentID=78
+chr4-04	SwissProt	protein_match	289231	289320	70.000000	-	.	Target=A8MUP4.2 13 41 +;percentID=46;Gap=M22 D1 M7 
+chr4-04	SwissProt	protein_match	289231	289320	74.000000	-	.	Target=Q8IW36-3.3 57 85 +;percentID=50;Gap=M26 D1 M3 ;sequence=MGLLAFRDVALEFSPEEWECLDPAQRSLYRDVMLENYRNLISLGEDSFNMQFLFHSLAMSKPELIICLEARKEPWNVNTEKTARHSVM
+chr4-04	SwissProt	protein_match	289231	289320	74.000000	-	.	Target=Q8IW36.3 57 85 +;percentID=50;Gap=M26 D1 M3 
+chr4-04	SwissProt	protein_match	289231	289320	74.000000	-	.	Target=Q8IW36-2.3 57 85 +;percentID=50;Gap=M26 D1 M3 
+chr4-04	SwissProt	protein_match	289231	289323	77.000000	-	.	Target=Q9NSJ1.2 33 62 +;percentID=48;Gap=M23 D1 M7 
+chr4-04	SwissProt	protein_match	289234	289323	73.000000	-	.	Target=Q68DY1.2 44 73 +;percentID=43
+chr4-04	SwissProt	protein_match	289237	289323	78.000000	-	.	Target=Q6ZN08.2 90 118 +;percentID=48
+chr4-04	SwissProt	protein_match	289237	289323	79.000000	-	.	Target=O75373.2 44 72 +;percentID=51
+chr4-04	SwissProt	protein_match	289237	289323	83.000000	-	.	Target=P35789-2.4 44 72 +;percentID=51
+chr4-04	SwissProt	protein_match	289237	289323	83.000000	-	.	Target=P35789.4 44 72 +;percentID=51
+chr4-04	SwissProt	protein_match	289237	289323	83.000000	-	.	Target=P35789-3.4 44 72 +;percentID=51
+chr4-04	SwissProt	protein_match	289243	289341	70.000000	-	.	Target=Q96SK3.3 41 73 +;percentID=42;sequence=MSYGSITFGDVAIDFSHQEWEYLSLVQKTLYQEVMMENYDNLVSLAGHSVSKPDLITLLEQGKEPWMIVREETRGECTDLDSRCEIISDGKMQLYRKHSCVTLHQRIHNGQKPYECKQCQKSFSHLTELMVHQTIHTSEEPDQCEKFRKAFSHLTDLRKHQKINAREKPYECEECGKVFSYPANLAQHGKVHVEKPYECKECGEAFRTSRQLTVHHRFHYGEKPYECKECGKAFSVYGRLSRHQSIHTGEKPFECNKCGKSFRLKAGLKVHQSIHTGEKPHECKECGKAFRQFSHLVGHKRIHTGEKPYECKECGKGFTCRYQLTMHQRIYSGEKHYECKENGEAFSSGHQLTAPHTFESVEKPYKCEECGKAFSVHGRLTRHQGI [...]
+chr4-04	SwissProt	protein_match	289264	289311	43.000000	-	.	Target=P17031.3 58 73 +;percentID=43;sequence=MATSFRTASCWGLLSFKDISMEFTWDEWQLLDSTQKYLYRDVILENYHNLISVGYHGTKPDLIFKLEQGEDPWIINAKISRQSCPDGWEEWYQNNQDELESIERSYACSVLGRLNLSKTHDSSRQRLYNTRGKSLTQNSAPSRSYLRKNPDKFHGYEEPYFLKHQRAHSIEKNCVCSECGKAFRCKSQLIVHLRIHTGERPYECSKCERAFSAKSNLNAHQRVHTGEKPYSCSECEKVFSFRSQLIVHQEIHTGGKPYGCSECGKAYSWKSQLLLHQRSHTGVKPYECSECGKAFSLKSPFVVHQRTHTGVKPHKCSECGKAFRSKSYLLVHIRMHTGEKPYQCSDCGKAFNMKTQLIVHQGVHTGNNPYQCGECGKAFGRKEQLT [...]
+chr4-04	SwissProt	protein_match	289264	289323	52.000000	-	.	Target=A6NFI3.1 198 217 +;percentID=50;sequence=MAALHTTPDSPAAQLERAEDGSECDPDQEEEEEEEEKGEEVQEVEEEEEEIVVEEEEEGVAEVVQDAQVEAVAEVEVEADVEEEDVKEVLAEEECPALGTQERLSRGGDAKSPVLQEKGLQASRAPATPRDEDLEEEEEEEEDEDEDDLLTAGCQELVTFEDVAVYFSLEEWERLEADQRGLYQEVMQENYGILVSLGYPIPKPDLIFRLEQGEEPWVPDSPRPEEGDIVTGVYTGAWFWTDDIEDHEEEDDEDFLAEVAEEENEPPGLWSAAYGVGDVPGTWGPDDSDSAQTPEGWGPDPGGLGVLADGSEAKPFLPGREPGANLLSPWAFPAAVAPPAGRPETTCDVCGKVFPHRSRLAKHQRYHAAVKPFGCEECGKGFVY [...]
+chr4-04	SwissProt	protein_match	289264	289323	60.000000	-	.	Target=Q969W8.1 46 65 +;percentID=55
+chr4-04	SwissProt	protein_match	289480	289509	40.000000	-	.	Target=Q5RES8.1 361 370 +;percentID=80;sequence=MKKFQRPVSFQDLTVNFTQEEWQQLDPTQRLLYRDVMLENYSNLVSVGYHVSKPDVIFKLEQGEAPWIVEEFSNQNYPEVDDALEKNKEIQDKHLTQTVFFSNKTLITERENVFGKTLNLDMNSVPSRKMPYKCNPGGNSLKTNSEVIVAKKSKENRKIPDEYSGFGKHEKSHSGMNKYRCNPMRKASNQNENLILHQNIQILKQPFDYNKCRKTFFKRAILVTQKGRQTERKPNEPCECRKTFSKRSTLVVHQRIHTGEKPYVCNDCRKTFRVKTSLTRHQRIHTGERPYECSECGKTFIDKSALIVHQKIHGGEKSYECNECGKTFFRKSALAEHFRSHTGEKPYECKECGNAFSKKSYLVVHQRTHRGEKPNECKECGKTF [...]
+chr4-04	SwissProt	protein_match	289676	289735	42.000000	+	.	Target=A8MYF4.2 385 404 +;percentID=45;sequence=MPDLLKSAPSSPTTASASERTTHTALEEHVTFEDMVVDFSQEEWRQLEPAQRALYYDVMLDAFRLLVSVGHWLPKPNITSLLEQEAEPWAVDSGVPQGMYPGEVAEISQPTDRQFPIGIRWEEWPVTRVQEEWPMWERVTLGSLHINKTYVKEKPYKCQECRKAFSHSSALTKHQRIHTGEKPYKCTQCEGTFNQIAPLIQHQRTHTGEKPYECSVCGKSFSFMSSFSQHKHQQIHTGEKPYECHECGKAFTQITPLIQHQRTHTGEKPCECSESGKAFSQSTFLTEHQRIYTGEKPYGCNECGKTFSHGSSLSQQERMHTGQKPYKCNDCSKAFSHSLSLTKHQRNHTEEKPYKCNQCGRAFSQLAPLIQHQRIHTGEKPYEC [...]
+chr4-04	SwissProt	protein_match	289681	289938	152.000000	-	.	Target=Q6P1L6.1 62 136 +;percentID=41;Gap=M42 D10 M9 D1 M24 
+chr4-04	SwissProt	protein_match	289691	289735	44.000000	+	.	Target=Q5TYW1.2 452 466 +;percentID=60;sequence=MNMSQASVSFQDVTVEFTREEWQHLGPVERTLYRDVMLENYSHLISVGYCITKPKVISKLEKGEEPWSLEDEFLNQRYPGYFKVDHIKGIREKQEKPLWQEIFISDADKTLSKEGQKVLEKPFNLEIAPELSEKISCKCDSHRMNLPVASQLIISERKYSRKKTEYMNVCEKLQLDIKHEKAHAEEKSYEHGENAKAFSYKKDQHWKFQTLEESFECDGSGQGLYDKTICITPQSFLTGEKSCKDDEFRKNFDKITLFNHMRTDTRGKCSDLNEYGTSCDKTTAVEYNKVHMAMTHYECNERGINFSRKSPLTQSQRTITGWSAFESNKCEENFSQSSAHIVHQKTQAGDKFGEHNECTDALYQKLDFTAHQRIHTEDKFYLSD [...]
+chr4-04	SwissProt	protein_match	289480	289509	40.000000	-	.	Target=Q9HCZ1.2 363 372 +;percentID=80;sequence=MKMKKFQIPVSFQDLTVNFTQEEWQQLDPAQRLLYRDVMLENYSNLVSVGYHVSKPDVIFKLEQGEEPWIVEEFSNQNYPDIDDALEKNKEIQDKHLTQTVFFSNKTLITERENVFGKTLNLGMNSVPSRKMPYKCNPGGNSLKTNSEVIVAKKSKENRKIPDGYSGFGKHEKSHLGMKKYRYNPMRKASNQNENLILHQNIQILKQPFDYNKCGKTFFKRAILITQKGRQTERKPNECNECRKTFSKRSTLIVHQRIHTGEKPYVCSDCRKTFRVKTSLTRHRRIHTGERPYECSECRKTFIDKSALIVHQKIHGGEKSYECNECGKTFFRKSALAEHFRSHTGEKPYECKECGNAFSKKSYLVVHQRTHRGEKPNECKECGK [...]
+chr4-04	SwissProt	protein_match	289691	289735	44.000000	+	.	Target=Q4V348.1 212 226 +;percentID=60;sequence=MMNLEKNFDKTTLFNHMRTDKRGKCSDLNEYGTSCDKTTAVEYNKVHMAMTHYECNERGINFSRKSPLTQSQRTITGWSAFESNKCEENFSQSSAHIVHQKTQAGDKFGEHNECTDALYQKLDFTAHQRIHTDFTAHQKFYLSDEHGKCRKSFYWKAHLIQHERPHSGEKTYQYEECAKSFCSSSHPIQHPGTYVGFKLYECNECGKAFCQNSNLSKHLRIHTKEKPCDNNGCGRSYKSPLIGHQKTDAEMELCGGSEYGKTSHLKGHQRILMGEKPYECIECGKTFSKTSHLRAHQRIHTGEKPYECVECEKTFSHKTHLSVHQRVHTGEKPYECNDCGKSFTYNSALRAHQRIHTGEKPYECSDCEKTFAHNSALRAHHRIH [...]
+chr4-04	SwissProt	protein_match	289691	289735	44.000000	+	.	Target=Q5TYW1-2.2 452 466 +;percentID=60;sequence=MNMSQASVSFQDVTVEFTREEWQHLGPVERTLYRDVMLENYSHLISVGYCITKPKVISKLEKGEEPWSLEDEFLNQRYPGYFKVDHIKGIREKQEKPLWQEIFISDADKTLSKEGQKVLEKPFNLEIAPELSEKISCKCDSHRMNLPVASQLIISERKYSRKKTEYMNVCEKLQLDIKHEKAHAEEKSYEHGENAKAFSYKKDQHWKFQTLEESFECDGSGQGLYDKTICITPQSFLTGEKSCKDDEFRKNFDKITLFNHMRTDTRGKCSDLNEYGTSCDKTTAVEYNKVHMAMTHYECNERGINFSRKSPLTQSQRTITGWSAFESNKCEENFSQSSAHIVHQKTQAGDKFGEHNECTDALYQKLDFTAHQRIHTEDKFYL [...]
+chr4-04	SwissProt	protein_match	289691	289735	40.000000	+	.	Target=Q8TF32.2 524 538 +;percentID=53
+chr4-04	SwissProt	protein_match	289681	289851	61.000000	-	.	Target=Q6P1L6-2.1 1 46 +;percentID=35;Gap=M13 D10 M9 D1 M24 
+chr4-04	SwissProt	protein_match	289264	289323	56.000000	-	.	Target=Q6PGE4.1 194 213 +;percentID=50;sequence=MAALQSAPDSPATQLEPAEDGSECDADPEEEEEEEQQEEEDEEEEEEVVVEEVATPVQEVAEVEVEANSADNGGGDDDDDGGGGDDDVEEVLAEEQTLSLGTQERHSNGGHAKAPVLQGKALQTSRVSPTTQDEDVEEEEEEEDEEHFLTQGLVTFEDVAVYFSLEEWERLGVDQRDLYREVMQENYGILVSLGYPIPKPDLIFHLEQGEEPWVEDGPHPEEGDVVTGVYTGAWFWNDDIEDHEEEDDEDFLAEVAEEENEPPGLWSAAYGVGDVPGTWGPDDSDSVQTPEGWGPNPGSLGILAEEVEAKHFLSGREPGENFLVPWAFPAVAVPIGCPETTCDVCGKVFPHRSRLAKHQRYHAAVKPFGCDECGKGFVYRSHLA [...]
+chr4-04	SwissProt	protein_match	289682	289735	44.000000	+	.	Target=P17019.3 543 558 +;percentID=55;Gap=M4 D2 M12 
+chr4-04	SwissProt	protein_match	289726	289947	162.000000	-	.	Target=Q8N823.1 21 103 +;percentID=49;Gap=M40 I2 M28 I7 M6 
+chr4-04	SwissProt	protein_match	289742	289798	46.000000	+	.	Target=P51815.2 34 52 +;percentID=47
+chr4-04	SwissProt	protein_match	289726	289947	157.000000	-	.	Target=Q8N4W9.2 21 103 +;percentID=49;Gap=M40 I2 M28 I7 M6 
+chr4-04	SwissProt	protein_match	289732	289944	230.000000	-	.	Target=Q8TB69.1 2 71 +;percentID=66;Gap=M61 D1 M9 
+chr4-04	SwissProt	protein_match	289774	289851	58.000000	-	.	Target=Q8N7Q3.2 1 27 +;percentID=55;Gap=M22 I1 M4 
+chr4-04	SwissProt	protein_match	289774	289938	135.000000	-	.	Target=Q96SK3.3 6 62 +;percentID=52;Gap=M51 I2 M4 
+chr4-04	SwissProt	protein_match	289759	289938	140.000000	-	.	Target=Q8WV14.2 29 85 +;percentID=53;Gap=M49 D3 M8 ;sequence=MGPPLAPRPAHVPGEAGPRRTRESRPGAVSFADVAVYFSPEEWECLRPAQRALYRDVMRETFGHLGALGEAGPSGRDPQSVGFSVPKPAFISWVEGEVEAWSPEAQDPDGESSAAFSRGQGQEAGSRDGNEEKERLKKCPKQKEVAHEVAVKEWWPSVACPEFCNPRQSPMNPWLKDTLTRRLPHSCPDCGRNFSYPSLLASHQRVHSGERPFSCGQCQARFSQRRYLLQHQFIHTGEKPYPCPDCGRRFRQRGSLAIHRRAHTGEKPYACSDCKSRFTYPYLLAIHQRKHTGEKPYSCPDCSLRFAYTSLLAIHRRIHTGEKPYPCPDCGRRFTYSSLLLSHRRIHSDSRPFPCVECGKGFKRKTALEA [...]
+chr4-04	SwissProt	protein_match	289774	289932	145.000000	-	.	Target=Q60585.2 8 62 +;percentID=56;Gap=M49 I2 M4 
+chr4-04	SwissProt	protein_match	289774	289938	146.000000	-	.	Target=Q8BQC8-2.1 7 62 +;percentID=53;Gap=M51 I1 M4 
+chr4-04	SwissProt	protein_match	289768	289938	138.000000	-	.	Target=Q8TC21-2.2 7 61 +;percentID=45;Gap=M43 D1 M3 D1 M9 
+chr4-04	SwissProt	protein_match	289774	289902	115.000000	-	.	Target=Q5RDX1.1 7 49 +;percentID=53;sequence=MAAPTREEWRHLDPSQRNLYRDVMLETYSHLLSVGYQVPEAEVVMLEQGKEPWALQGERPRQSCPGKKLWDHNQCRKILSYKQVSSQPQKMYPGEKPYECAEFEKIFTQKSQLKVHLKVLAGEKLYVCIECGKAFVQKPEFIIHQKTHMREKPFKCNECGKSFFQVSSLFRHQRIHTGEKLYECSQCGKGFSYNSDLSIHEKIHTGERHHECTDCGKAFTQKSTLKMHQKIHTGERSYICIECGQAFIQKTHLIAHRRIHTGEKPYECSNCGKSFISKSQLQVHQRVHTRVKPYICTEYGKVFSNNSNLITHKKVQSREKSSICTECGKAFTYRSELIIHQRIHTGEKPYACSDCGKAFTQKSALTVHQRIHTGEKSYICMKCGLA [...]
+chr4-04	SwissProt	protein_match	289774	289938	146.000000	-	.	Target=Q8BQC8.1 8 63 +;percentID=53;Gap=M51 I1 M4 
+chr4-04	SwissProt	protein_match	289774	289950	140.000000	-	.	Target=Q5RB30.1 23 81 +;percentID=49
+chr4-04	SwissProt	protein_match	289774	289947	135.000000	-	.	Target=Q02975.1 11 70 +;percentID=51;Gap=M54 I2 M4 
+chr4-04	SwissProt	protein_match	289774	289947	140.000000	-	.	Target=Q9QXT9.1 11 69 +;percentID=55;Gap=M46 D1 M7 I2 M4 
+chr4-04	SwissProt	protein_match	289774	289938	142.000000	-	.	Target=Q9NYW8.1 8 63 +;percentID=50;Gap=M51 I1 M4 
+chr4-04	SwissProt	protein_match	289774	289947	157.000000	-	.	Target=Q969W8.1 3 61 +;percentID=55;Gap=M45 D1 M8 I2 M4 
+chr4-04	SwissProt	protein_match	289774	289950	147.000000	-	.	Target=Q6ZMW2.1 4 63 +;percentID=52;Gap=M47 D1 M7 I2 M4 
+chr4-04	SwissProt	protein_match	289774	289950	150.000000	-	.	Target=A6NK53.2 4 61 +;percentID=55;Gap=M49 D1 M9 
+chr4-04	SwissProt	protein_match	289774	289965	180.000000	-	.	Target=Q9H8G1.2 25 91 +;percentID=61;Gap=M8 I1 M52 I2 M4 
+chr4-04	SwissProt	protein_match	289774	289947	157.000000	-	.	Target=Q6J6I6.1 3 61 +;percentID=55;Gap=M45 D1 M8 I2 M4 
+chr4-04	SwissProt	protein_match	289774	289938	186.000000	-	.	Target=O43345.1 4 59 +;percentID=69;Gap=M51 I1 M4 
+chr4-04	SwissProt	protein_match	289774	289965	181.000000	-	.	Target=Q96NI8.1 5 69 +;percentID=59;Gap=M52 D1 M4 I2 M7 
+chr4-04	SwissProt	protein_match	289774	289932	156.000000	-	.	Target=Q3KNS6.1 37 90 +;percentID=60;Gap=M42 D1 M6 I2 M4 
+chr4-04	SwissProt	protein_match	289774	289950	157.000000	-	.	Target=Q6P3V2.2 23 81 +;percentID=52;sequence=MPANWTSPQKSSALAPEDHGSSYEGSVSFRDVAIDFSREEWRHLDPSQRNLYRDVMLETYSHLLSVGYQVPEAEVVMLEQGKEPWALQGERPRQSCPGEKLWDHNQCRKILSYKQVSSQPQKMYPGEKAYECAKFEKIFTQKSQLKVHLKVLAGEKLYVCIECGKAFVQKPEFIIHQKTHMREKPFKCNECGKSFFQVSSLFRHQRIHTGEKLYECSQCGKGFSYNSDLSIHEKIHTGERHHECTDCGKAFTQKSTLKMHQKIHTGERSYICIECGQAFIQKTHLIAHRRIHTGEKPYECSNCGKSFISKSQLQVHQRVHTRVKPYICTEYGKVFSNNSNLVTHKKVQSREKSSICTECGKAFTYRSELIIHQRIHTGEKPYECS [...]
+chr4-04	SwissProt	protein_match	289774	289950	147.000000	-	.	Target=Q52M93.1 23 81 +;percentID=50;sequence=MPASWTSPQKSSALAPEDHGSSYEGSVSFRDVAIDFSREEWRHLDLSQRNLYRDVMLETYSHLLSVGYQVPKPEVVMLEQGKEPWALQGERPRHSCPGEKLWDHNQHRKIIGYKPASSQDQKIYSGEKSYECAEFGKSFTWKSQFKVHLKVPTGEKLYVCIECGRAFVQKPEFITHQKTHMREKPYKCNECGKSFFQVSSLFRHHRIHTGEKLYECSECGKGFPYNSDLSIHEKIHTGERHHECTDCGKAFTQKSTLKIHQKIHTGERSYICIECGQAFIQKTQLIAHRRIHSGEKPYECNNCGKSFISKSQLQVHQRVHTRVKPYICTEYGKVFSNNSNLITHEKIQSREKSSICTECGKAFTYRSELIIHQRIHTGEKPYECS [...]
+chr4-04	SwissProt	protein_match	289774	289947	189.000000	-	.	Target=Q96SE7.1 5 63 +;percentID=67;Gap=M53 I1 M5 
+chr4-04	SwissProt	protein_match	289774	289965	182.000000	-	.	Target=Q8IYN0.1 25 91 +;percentID=62;Gap=M8 I1 M52 I2 M4 
+chr4-04	SwissProt	protein_match	289774	289938	161.000000	-	.	Target=P52736.2 1 56 +;percentID=59;Gap=M42 D1 M8 I2 M4 
+chr4-04	SwissProt	protein_match	289774	289965	163.000000	-	.	Target=Q9BX82.1 5 69 +;percentID=51;Gap=M52 D1 M7 I2 M4 
+chr4-04	SwissProt	protein_match	289774	289947	203.000000	-	.	Target=Q5RER9.1 5 64 +;percentID=71;Gap=M47 I2 M11 
+chr4-04	SwissProt	protein_match	289774	289965	182.000000	-	.	Target=Q8NE65.1 25 90 +;percentID=64;Gap=M8 I1 M44 D1 M7 I2 M4 ;sequence=MDDLRYGVYPVKGASGYPGAERNLLEYSYFEKGPLTFRDVVIEFSQEEWQCLDTAQQDLYRKVMLENFRNLVFLGIDVSKPDLITCLEQGKDPWNMKRHSMVATPPESGVLKFPTIIILLSRCFFQSVNICFIYLEP
+chr4-04	SwissProt	protein_match	289774	289953	202.000000	-	.	Target=Q86XN6.2 3 64 +;percentID=69;Gap=M49 I2 M11 
+chr4-04	SwissProt	protein_match	289783	289944	143.000000	-	.	Target=Q2TAN0.1 5 57 +;percentID=53;Gap=M45 D1 M8 ;sequence=MHSLEKVTFEDVAIDFTQEEWDMMDTSKRKLYRDVMLENISHLVSLGYQISKSYIILQLEQGKELWREGRVFLQDQNPDRESALKKKHMISMHPIIRKDASTSMTMENSLILEDPFEYNDSGEDCTHSSTITQCLLTHSGKKPYVSKQCGKSLRNLLSPKPRKQIHTKGKSYQCNLCEKAYTNCFYLRRHKMTHTGERPYACHLCGKAFTQCSHLRRHEKTHTGERPYKCHQCGKAFIQSFNLRRHERTHLGQKCYECDKSGKAFSQSSGFRGNKIIHIGEKPHACLLCGKAFSLSSDLR
+chr4-04	SwissProt	protein_match	289783	289944	143.000000	-	.	Target=A8K971.2 5 57 +;percentID=53;Gap=M45 D1 M8 ;sequence=MHSLEKVTFEDVAIDFTQEEWDMMDTSKRKLYRDVMLENISHLVSLGYQISKSYIILQLEQGKELWWEGRVFLQDQNPDRESALKKKHMISMHPIIRKDTSTSMTMENSLILEDPFEYNDSGEDCTHSSTITQCLLTHSGKKPCVSKQCGKSLRNLLSPKPRKQIHTKGKSYQCNLCEKAYTNCFYLRRHKMTHTGERPYACHLCGKAFTQCSHLRRHEKTHTGERPYKCHQCGKAFIQSFNLRRHERTHLGQKCYECDKSGKAFSQSSGFRGNKIIHIGEKPPACLLCGKAFSLSSDLR
+chr4-04	SwissProt	protein_match	289783	289944	143.000000	-	.	Target=A8MVS1.1 5 57 +;percentID=53;Gap=M45 D1 M8 ;sequence=MHSLEKVTFEDVAIDFTQEEWDMMDTSKRKLYRDVMLENISHLVSLGYQISKSYIILQLEQGKELWREGRVFLQDQNPDRESALKKKHMISMHPIIRKDASTSMTMSKTLILEDPFEYNDSGEDCTHSSTITQCLLTHSRKKPYVSKQCGKSLRNLLSPKPRKQIHTKGKSYQCNLCEKAYTNCFYLRRHKMTHTGERPYACHLCGKAFTQCSHLRRHEKTHTGERPYKCHQCGKAFIQSFNLRRHERTHLGQKCYECDKSGKAFSQSSGFRGNKIIHIGEKPHACLLCGKAFSLSSDLR
+chr4-04	SwissProt	protein_match	289786	289938	134.000000	-	.	Target=Q2M3W8.1 4 54 +;percentID=49
+chr4-04	SwissProt	protein_match	289789	289941	226.000000	-	.	Target=Q8IW36.3 3 53 +;percentID=82
+chr4-04	SwissProt	protein_match	289783	289938	143.000000	-	.	Target=A8MUZ8.2 7 57 +;percentID=55;Gap=M43 D1 M8 ;sequence=MHSLKKLTFEDVAIDFTQEEWAMMDTSKRKLYRDVMLENISHLVSLGYQISKSYIILQLEQGKELWREGRVFLQDQNPNRESALKKTHMISMHPITRKDASTSMTMENSLILEDPFECNDSGEDCTRSSTITQCLLTHSGKKPYVSKQCGKSLRNLLSTEPHKQIHTKGKSYQCNLCEKAYTNCFHLRRHKMTHTGERPYACHLCRKAFTQCSHLRRHEKTHTGQRPYKCHQYGKVFIQSFNLQRHERTHLGKKCYECDKSGKAFSQSSGFRGNKIIHTGEKPHACLLCGKAFSLSSNLR
+chr4-04	SwissProt	protein_match	289789	289941	226.000000	-	.	Target=Q8IW36-2.3 3 53 +;percentID=82
+chr4-04	SwissProt	protein_match	289789	289941	226.000000	-	.	Target=Q8IW36-3.3 3 53 +;percentID=82
+chr4-04	SwissProt	protein_match	289777	289926	101.000000	-	.	Target=A2T7D2.1 222 271 +;percentID=44
+chr4-04	SwissProt	protein_match	289783	289938	131.000000	-	.	Target=A8MWA4.1 7 59 +;percentID=50;Gap=M43 I1 M9 ;sequence=MHSLKKVTFEDVAIDFTQEEWAMMDTSKRKLYRDVMLENISHLVSLVTGYQISKSYIILQLEQGKELWQEGREFLQDQNPDRESALKKTHMISMHPIIRKDAPTSMTMENSLILEDPFECNDSGEDCTHSSTIIQCLLTHSGKKPYVSKQCGKSLSNLLSPKPHKQIHTKGKSYQCNLCEKAYTNCFHLRRPKMTHTGERPYTCHLCRKAFTQCSHLRRHEKTHTGERPYKCHQCGKAFIQSFNLRRHERTHLGEKWYECDNSGKAFSQSSGFRGNKIIHTGEKPHACLLCGKAFSLSSDLR
+chr4-04	SwissProt	protein_match	289774	289953	202.000000	-	.	Target=Q86XN6-2.2 3 64 +;percentID=69;Gap=M49 I2 M11 
+chr4-04	SwissProt	protein_match	289798	289851	46.000000	-	.	Target=Q96PQ6-3.2 1 18 +;percentID=61;sequence=MLENYSNLTSLDWETPSKTKWSLLMEDIFGKETPSGVTMERAGLGEKSTEYAHLFEVFGMDPHLTQPMGRHAGKRPYHRRDYGVAFKGRPHLTQHMSMYDGRKMHECHQCQKAFTTSASLTRHRRIHTGEKPYECSDCGKAFNDPSALRSHARTHLKEKPFDCSQCGNAFRTLSALKIHMRVHTGERPYKCDQCGKAYGRSCHLIAHKRTHTGERPYECHDCGKAFQHPSHLKEHVRNHTGEKPYACTQCGKAFRWKSNFNLHKKNHMVEKTYECKECGKSFGDLVSRRKHMRIHIVKKPVECRQCGKTFRNQSILKTHMNSHTGEKPYGCDLCGKAFSASSNLTAHRKIHTQERRYECAACGKVFGDYLSRRRHMSVHLVKKRV [...]
+chr4-04	SwissProt	protein_match	289783	289938	140.000000	-	.	Target=Q6ZN79.1 7 57 +;percentID=53;Gap=M43 D1 M8 ;sequence=MHSLKKVTFEDVAIDFTQEEWAMMDTSKRKLYRDVMLENISHLVSLGYQISKSYIILQLEQGKELWREGREFLQDQNPDRESALKKKHMISMHPITRKDASTSMTMENSLILEDPFECNDSGEDCTHSSTITQRLLTHSGKKPYVSKQCGKSLRNLFSPKPHKQIHTKGKSYQCNLCEKAYTNCFRLRRHKMTHTGERPYACHLCGKAFTQCSHLRRHEKTHTGERPYKCHQCGKAFIQSFNLRRHERTHLGKKCYECDKSGKAFSQSSGFRGNKIIHTGEKPHACLLCGKAFSLSSDLR
+chr4-04	SwissProt	protein_match	289798	289947	129.000000	-	.	Target=Q92670.2 202 251 +;percentID=50
+chr4-04	SwissProt	protein_match	289798	289857	50.000000	-	.	Target=Q96N38-2.1 2 21 +;percentID=55
+chr4-04	SwissProt	protein_match	289798	289965	100.000000	-	.	Target=P10754.2 115 168 +;percentID=42;Gap=M39 D2 M15 
+chr4-04	SwissProt	protein_match	289798	289968	147.000000	-	.	Target=Q96PQ6-2.2 47 103 +;percentID=50
+chr4-04	SwissProt	protein_match	289798	289950	151.000000	-	.	Target=Q9NZL3.2 4 54 +;percentID=56
+chr4-04	SwissProt	protein_match	289798	289968	147.000000	-	.	Target=A6NK31.3 50 110 +;percentID=59;Gap=M2 I2 M52 I2 M3 
+chr4-04	SwissProt	protein_match	289798	289857	50.000000	-	.	Target=Q96N38.1 2 21 +;percentID=55
+chr4-04	SwissProt	protein_match	289798	289965	100.000000	-	.	Target=P10754-2.2 108 161 +;percentID=42;Gap=M39 D2 M15 
+chr4-04	SwissProt	protein_match	289798	289950	150.000000	-	.	Target=Q9NYT6.2 4 54 +;percentID=54;sequence=MNMFKEAVTFKDVAVAFTEEELGLLGPAQRKLYRDVMVENFRNLLSVGHPPFKQDVSPIERNEQLWIMTTATRRQGNLGEKNQSKLITVQDRESEEELSCWQIWQQIANDLTRCQDSMINNSQCHKQGDFPYQVGTELSIQISEDENYIVNKADGPNNTGNPEFPILRTQDSWRKTFLTESQRLNRDQQISIKNKLCQCKKGVDPIGWISHHDGHRVHKSEKSYRPNDYEKDNMKILTFDHNSMIHTGQKSYQCNECKKPFSDLSSFDLHQQLQSGEKSLTCVERGKGFCYSPVLPVHQKVHVGEKLKCDECGKEFSQGAHLQTHQKVHVIEKPYKCKQCGKGFSRRSALNVHCKVHTAEKPYNCEECGRAFSQASHLQDHQRLHT [...]
+chr4-04	SwissProt	protein_match	289798	289944	145.000000	-	.	Target=Q96GC6.1 12 59 +;percentID=59;Gap=M42 D1 M6 
+chr4-04	SwissProt	protein_match	289798	289947	141.000000	-	.	Target=Q9UK10.2 5 54 +;percentID=52
+chr4-04	SwissProt	protein_match	289792	289965	104.000000	-	.	Target=O95201.2 115 169 +;percentID=46;Gap=M41 D2 M9 D1 M5 
+chr4-04	SwissProt	protein_match	289798	289968	175.000000	-	.	Target=Q9NZV7.1 165 221 +;percentID=62;Gap=M2 I1 M51 D1 M3 
+chr4-04	SwissProt	protein_match	289798	289947	202.000000	-	.	Target=Q9NV72.1 5 52 +;percentID=82;Gap=M43 D2 M5 
+chr4-04	SwissProt	protein_match	289798	289947	142.000000	-	.	Target=Q9UK11.1 5 54 +;percentID=54
+chr4-04	SwissProt	protein_match	289804	289947	122.000000	-	.	Target=Q3KQV3.2 11 58 +;percentID=56
+chr4-04	SwissProt	protein_match	289804	289947	132.000000	-	.	Target=Q9UJU3.1 5 52 +;percentID=52;sequence=MTVSKEMVTFKDVAVVFTEEELGLLDSVQRKLYRDVMLENFRNLLLVAHQPFKPDLISQLEREEKLLMVETETPRDGCSGRKNQQKMESIQEVTVSYFSPKELSSRQTWQQSTGGLIRCQDFLKVFQGKNSQLQEQGNSLGQAWAGIPVQISEDKNYIFTHIGNGSNYIKSQGYPSWRAHHSWRKMYLKESHNYQCRCQQISMKNHFCKCDSVSWLSHHNDELEVHRKENYSCHDCGEDIMKVSLLNQESIQTEEKPYPCSGYRKAFSNDSSSEVHQQFHLEGKPYTYSSCGKGCNYSSLLHIHQNIEREDDIENSHLKSYQRVHTEEKPCKCGEYGENFNHCSPLNTYELIHTGEMSYRHNIYEKAFSHSLDLNSIFRVHTRDEP [...]
+chr4-04	SwissProt	protein_match	289804	289950	146.000000	-	.	Target=A0JNB1.1 19 67 +;percentID=57
+chr4-04	SwissProt	protein_match	289804	289941	127.000000	-	.	Target=Q0VAW7-2.1 1 46 +;percentID=56
+chr4-04	SwissProt	protein_match	289804	289950	156.000000	-	.	Target=Q14588.3 4 52 +;percentID=61
+chr4-04	SwissProt	protein_match	289804	289944	159.000000	-	.	Target=P10076.2 7 53 +;percentID=59
+chr4-04	SwissProt	protein_match	289804	289947	157.000000	-	.	Target=P10755.2 5 53 +;percentID=65;Gap=M44 I1 M4 
+chr4-04	SwissProt	protein_match	289780	289938	148.000000	-	.	Target=Q6ECI4-2.2 23 71 +;percentID=56;Gap=M45 D4 M4 
+chr4-04	SwissProt	protein_match	289798	289950	196.000000	-	.	Target=Q86YE8.3 4 54 +;percentID=72;sequence=MTCFQELVTFRDVAIDFSRQEWEYLDPNQRDLYRDVMLENYRNLVSLGGHSISKPVVVDLLERGKEPWMILREETQFTDLDLQCEIISYIEVPTYETDISSTQLQSIYKREKLYECKKCQKKFSSGYQLILHHRFHVIERPYECKECGKNFRSGYQLTLHQRFHTGEKPYECTECGKNFRSGYQLTVHQRFHTGEKTYECRQCGKAFIYASHIVQHERIHTGGKPYECQECGRAFSQGGHLRIHQRVHTGEKPYKCKECGKTFSRRSNLVEHGQFHTDEKPYICEKCGKAFRRGHQLTVHQRVHTGKKPYECKECGKGYTTASYFLLHQRIHKGGKPYECKECKKTFTLYRNLTRHQNIHTGEKLFECKQCGKTYTTGSKLFQHQK [...]
+chr4-04	SwissProt	protein_match	289801	289938	148.000000	-	.	Target=Q494X3.1 6 50 +;percentID=65;Gap=M40 D1 M5 
+chr4-04	SwissProt	protein_match	289804	289950	159.000000	-	.	Target=Q12901.3 4 52 +;percentID=61
+chr4-04	SwissProt	protein_match	289804	289944	159.000000	-	.	Target=Q96MR9.2 108 154 +;percentID=63
+chr4-04	SwissProt	protein_match	289804	289950	160.000000	-	.	Target=Q14590-2.3 4 52 +;percentID=61
+chr4-04	SwissProt	protein_match	289804	289947	190.000000	-	.	Target=Q9HCG1.2 5 52 +;percentID=79
+chr4-04	SwissProt	protein_match	289804	289947	137.000000	-	.	Target=Q0VAW7.1 5 52 +;percentID=58
+chr4-04	SwissProt	protein_match	289810	289851	55.000000	-	.	Target=Q86YE8-4.3 1 14 +;percentID=78;sequence=MLENYRNLVSLDLDLQCEIISYIEVPTYETDISSTQLQSIYKREKLYECKKCQKKFSSGYQLILHHRFHVIERPYECKECGKNFRSGYQLTLHQRFHTGEKPYECTECGKNFRSGYQLTVHQRFHTGEKTYECRQCGKAFIYASHIVQHERIHTGGKPYECQECGRAFSQGGHLRIHQRVHTGEKPYKCKECGKTFSRRSNLVEHGQFHTDEKPYICEKCGKAFRRGHQLTVHQRVHTGKKPYECKECGKGYTTASYFLLHQRIHKGGKPYECKECKKTFTLYRNLTRHQNIHTGEKLFECKQCGKTYTTGSKLFQHQKTHTGEKPYECKECGKAFSLYGYLKQHQKIHTGMKHFECKECKKTFTLYRNLTRHQNIHTGKKLFEC [...]
+chr4-04	SwissProt	protein_match	289807	289947	202.000000	-	.	Target=Q86XU0.1 5 51 +;percentID=80
+chr4-04	SwissProt	protein_match	289810	289938	127.000000	-	.	Target=Q8N972.1 4 46 +;percentID=53
+chr4-04	SwissProt	protein_match	289813	289926	122.000000	-	.	Target=Q0D2J5.2 8 45 +;percentID=57;sequence=MDPVACEDVAVNFTQEEWALLDISQRKLYREVMLETFRNLTSIGKKWKDQNIEYEYQNPRRNFRSLIEGNVNEIKEDSHCGETFTQVPDDRLNFQEKKASPEAKSCDNFVCGEVGIGNSSFNMNIRGDIGHKAYEYQDYAPKPYKCQQPKKAFRYHPSFRTQERNHTGEKPYACKECGKTFISHSGIRRRMVMHSGDGPYKCKFCGKAVHCLRLYLIHERTHTGEKPYECKQCVKSFSYSATHRIHERTHTGEKPYECQQCGKAFHSSSSFQAHKRTHTGGKPYECKQCGKSFSWCHSFQIHERTHTGEKPCECSKCNKAFRSYRSYLRHKRSHTGEKPYQCKECRKAFTYPSSLRRHERTHSAKKPYECKQCGKALSYKFSNTPK [...]
+chr4-04	SwissProt	protein_match	289813	289926	117.000000	-	.	Target=P10077-2.2 2 39 +;percentID=60;sequence=MDVTIDFSREEWQHLDPAQRSLYRDVVQETYSHLRSVEELQQIGDQKKTYQQIGHKSASDMVFITKTLGAESCHDYSGVRKVIHVNSYIVLPPKRPRHWDPPEDEPKHSSDLQTHDESNGLKRTKRITEYGKISSCINTEHILTGEKLPDHNQCGKVLGYKQIPCQYQKIHTGEKSYECAEFGKIFTQKSQLRVHVTSPTGEKLYVCVECGKACSQTSEFLTHQKTHTREKPYKCGDCGKSFFQVSSLFRHRRIHTGEKLYDCSHCGKGFSYNSDLRIHQKIHTGEKRHGCVDCGKAFTQKSTLRMHQKIHTGERAYVCIECGQAFIQKTHLVAHRRIHSRVRPCVSLDRAKPFSSAPNLLPRKKVQMREKSSICAECGKAFTY [...]
+chr4-04	SwissProt	protein_match	289798	289938	168.000000	-	.	Target=Q9Y6R6.1 6 51 +;percentID=70;Gap=M42 D1 M4 
+chr4-04	SwissProt	protein_match	289804	289950	159.000000	-	.	Target=Q9UK13.2 26 74 +;percentID=61;sequence=MISPSLELLHSGLCKFPEVEGKMTTFKEAVTFKDVAVVFTEEELGLLDPAQRKLYRDVMLENFRNLLSVGNQPFHQDTFHFLGKEKFWKMKTTSQREGNSGGKIQIEMETVPEAGPHEEWSCQQIWEQIASDLTRSQNSIRNSSQFFKEGDVPCQIEARLSISHVQQKPYRCNECKQSISDVSVFDLHQQSHSGEKSHTCGECGKSFCYSPALHIHQRVHMGEKCYKCDVCGKEFNQSSHLQTHQRVHTGEKPFKRGQCGKGFHSRSALNVHCKLHTGEKPYNCEECGKAFIHDSQLQEHQRIHTGEKPFKCDICGKSFRVRSRLNRHSMVHTGEKPFRCDTCGKNFRQRSALNSHSMVHIEEKPYKCEQCGKGFICRRDFCKHQ [...]
+chr4-04	SwissProt	protein_match	289813	289926	117.000000	-	.	Target=P10077.2 2 39 +;percentID=60;sequence=MDVTIDFSREEWQHLDPAQRSLYRDVVQETYSHLRSVEELQQIGDQKKTYQQIGHKSASDMVFITKTLGAESCHDYSGVRKVIHVNSYIVLPPKRPRHWDPPEDEPKHSSDLQTHDESNGLKRTKRITEYGKISSCINTEHILTGEKLPDHNQCGKVLGYKQIPCQYQKIHTGEKSYECAEFGKIFTQKSQLRVHVTSPTGEKLYVCVECGKACSQTSEFLTHQKTHTREKPYKCGDCGKSFFQVSSLFRHRRIHTGEKLYDCSHCGKGFSYNSDLRIHQKIHTGEKRHGCVDCGKAFTQKSTLRMHQKIHTGERAYVCIECGQAFIQKTHLVAHRRIHTGEKPYACDGCGKAFLSKSQLLVHQRIHSRVRPCVSLDRAKPFSSAP [...]
+chr4-04	SwissProt	protein_match	289798	289938	168.000000	-	.	Target=O75290-2.3 22 67 +;percentID=70;Gap=M42 D1 M4 ;sequence=MGRSPRKIDQFCNSSNMVHGSVTFRDVAIDFSQEEWECLQPDQRTLYRDVMLENYSHLISLGSSISKPDVITLLEQEKEPWMVVRKETSRRYPDLELKYGPEKVSPENDTSEVNLPKQISSLASKPSFTAIHIQRRIHCRICIAFGYLSLVYCSLEI
+chr4-04	SwissProt	protein_match	289810	289938	153.000000	-	.	Target=Q6P1L6-3.1 62 104 +;percentID=62;sequence=MMLPYPSALGDQYWEEILLPKNGENVETMKKLTQNHKAKGLPSNDTDCPQKKEGKAQIVVPVTFRDVTVIFTEAEWKRLSPEQRNLYKEVMLENYRNLLSLGQEIETILANIVKSHLY
+chr4-04	SwissProt	protein_match	289777	289926	101.000000	-	.	Target=Q9Y2L8.1 222 271 +;percentID=44
+chr4-04	SwissProt	protein_match	289807	289938	113.000000	-	.	Target=Q8BV42.1 9 50 +;percentID=56;Gap=M40 D2 M2 ;sequence=MAGPARFPLTFEDVAIYFSEQEWQHLEAWQKELYKQVMRTNYETLISLDNGLPKPELISWIELGRELFGSWGEKKKPDKETHCSIDDVHVHLAIEEQLLESSQRAVKSEVTCHSQLNPLESRHSFGLAVGERVDASLRHDQGISLVNAQTRCGEAVVSVVHSSSEAAQRKVLSSHRTLALPGLQRVSSWQSTQNSCPVCRENSWEKNHLVKQQKGHSKSRSYRVWKKFSRQADAKQPWSISCLGCGKSFRLKQYLVRHLDIHTRKRPPQCPKCKMCFHHERTLFSHHLKNSSSQHPTCDTSFRTDSSVDLCQQIQERPAFWREDTNVPSRQKPGPSLDCEDCCHMGSKLKGLQCGCILGEDRPHSHTEYGN [...]
+chr4-04	SwissProt	protein_match	289813	289938	130.000000	-	.	Target=Q3KP31.1 4 45 +;percentID=54
+chr4-04	SwissProt	protein_match	289813	289938	132.000000	-	.	Target=Q5REK1.1 4 45 +;percentID=57
+chr4-04	SwissProt	protein_match	289813	289938	133.000000	-	.	Target=P52737.1 4 45 +;percentID=57
+chr4-04	SwissProt	protein_match	289813	289938	133.000000	-	.	Target=Q8IYI8.1 4 45 +;percentID=57
+chr4-04	SwissProt	protein_match	289813	289950	139.000000	-	.	Target=Q8NDP4.1 15 60 +;percentID=54
+chr4-04	SwissProt	protein_match	289813	289947	154.000000	-	.	Target=Q96JL9.3 200 244 +;percentID=64;sequence=MESVTFEDVAVEFIQEWALLDSARRSLCKYRMLDQCRTLASRGTPPCKPSCVSQLGQRAEPKATERGILRATGVAWESQLKPEELPSMQDLLEEASSRDMQMGPGLFLRMQLVPSIEERETPLTREDRPALQEPPWSLGCTGLKAAMQIQRVVIPVPTLGHRNPWVARDSAVPARDPAWLQEDKVEEEAMAPGLPTACSQEPVTFADVAVVFTPEEWVFLDSTQRSLYRDVMLENYRNLASVADQLCKPNALSYLEERGEQWTTDRGVLSDTCAEPQCQPQEAIPSQDTFTEILSIDVKGEQPQPGEKLYKYNELEKPFNSIEPLFQYQRIHAGEASCECQEIRNSFFQSAHLIVPEKIRSGDKSYACNKCEKSFRYSSDLIR [...]
+chr4-04	SwissProt	protein_match	289816	289851	49.000000	-	.	Target=Q96PQ6-4.2 1 12 +;percentID=83;sequence=MLENYSNLTSLGYQVGKPSLISHLEQEEEPRTEERGAHQGACADWETPSKTKWSLLMEDIFGKETPSGVTMERAGLGEKSTEYAHLFEVFGMDPHLTQPMGRHAGKRPYHRRDYGVAFKGRPHLTQHMSMYDGRKMHECHQCQKAFTTSASLTRHRRIHTGEKPYECSDCGKAFNDPSALRSHARTHLKEKPFDCSQCGNAFRTLSALKIHMRVHTGERPYKCDQCGKAYGRSCHLIAHKRTHTGERPYECHDCGKAFQHPSHLKEHVRNHTGEKPYACTQCGKAFRWKSNFNLHKKNHMVEKTYECKECGKSFGDLVSRRKHMRIHIVKKPVECRQCGKTFRNQSILKTHMNSHTGEKPYGCDLCGKAFSASSNLTAHRKIHTQ [...]
+chr4-04	SwissProt	protein_match	289813	289950	150.000000	-	.	Target=P17024.2 3 48 +;percentID=56
+chr4-04	SwissProt	protein_match	289813	289947	139.000000	-	.	Target=Q6P560.1 5 49 +;percentID=57
+chr4-04	SwissProt	protein_match	289816	289851	51.000000	-	.	Target=Q16587-2.2 1 12 +;percentID=75
+chr4-04	SwissProt	protein_match	289816	289851	45.000000	-	.	Target=P17027.3 1 12 +;percentID=75
+chr4-04	SwissProt	protein_match	289816	289857	53.000000	-	.	Target=A6NGH9.3 2 15 +;percentID=71
+chr4-04	SwissProt	protein_match	289816	289851	50.000000	-	.	Target=Q14593-2.3 1 12 +;percentID=75
+chr4-04	SwissProt	protein_match	289813	289938	124.000000	-	.	Target=Q8TC21.2 7 48 +;percentID=47
+chr4-04	SwissProt	protein_match	289813	289950	144.000000	-	.	Target=Q8N7K0.1 3 48 +;percentID=56
+chr4-04	SwissProt	protein_match	289804	289851	49.000000	-	.	Target=Q96MU6.2 1 16 +;percentID=62
+chr4-04	SwissProt	protein_match	289816	289857	54.000000	-	.	Target=Q8N184-1.3 2 15 +;percentID=78
+chr4-04	SwissProt	protein_match	289807	289947	144.000000	-	.	Target=Q02386.2 5 51 +;percentID=57
+chr4-04	SwissProt	protein_match	289816	289947	107.000000	-	.	Target=Q80YP6.1 11 54 +;percentID=52;sequence=MTAEMDMALMQGCVTFQDVAICFSHEEWRLLDETQRLLYLSVMLQNFALINSQGCGHKTEDEERRVSTRASKGLRSETTPKTNLCEKCVPILQDILCLPGLPGQKHSTEASSKVDQHQDHNSTGKPLEKNADRSSYLFYLSAKSFPSWDVEKDLPDILSLLKSQVCPKTKKYRKSTEGRKETSHESDKSEECQSLSSQKQTLAHHPKTSNGKKLYECSKCGKTFRGKYSLDQHQRVHTGERPWECRDCGKFFSQTSHLNDHRRIHTGERPYECSECGKLFRQNSSLVDHQKTHTGARPYECSQCGKSFSQKATLVKHKRVHTGERPYKCSECGNSFSQSAILNQHRRIHTGVKPYECRECGKSFSQKATLIKHQRVHTGERPYKC [...]
+chr4-04	SwissProt	protein_match	289816	289851	59.000000	-	.	Target=Q3SXZ3-2.1 1 12 +;percentID=91
+chr4-04	SwissProt	protein_match	289816	289938	110.000000	-	.	Target=B2RUI1.2 48 88 +;percentID=58
+chr4-04	SwissProt	protein_match	289816	289947	117.000000	-	.	Target=Q8IVC4.1 14 57 +;percentID=54
+chr4-04	SwissProt	protein_match	289807	289956	141.000000	-	.	Target=Q9UJW7.2 28 77 +;percentID=56;sequence=METLTSRHEKRALHSQASAISQDREEKIMSQEPLSFKDVAVVFTEEELELLDSTQRQLYQDVMQENFRNLLSVGERNPLGDKNGKDTEYIQDEELRFFSHKELSSCKIWEEVAGELPGSQDCRVNLQGKDFQFSEDAAPHQGWEGASTPCFPIENSLDSLQGDGLIGLENQQFPAWRAIRPIPIQGSWAKAFVNQLGDVQERCKNLDTEDTVYKCNWDDDSFCWISCHVDHRFPEIDKPCGCNKCRKDCIKNSVLHRINPGENGLKSNEYRNGFRDDADLPPHPRVPLKEKLCQYDEFSEGLRHSAHLNRHQRVPTGEKSVKSLERGRGVRQNTHIRNHPRAPVGDMPYRCDVCGKGFRYKSVLLIHQGVHTGRRPYKCEECGKA [...]
+chr4-04	SwissProt	protein_match	289816	289947	116.000000	-	.	Target=Q6NX49.1 11 54 +;percentID=50
+chr4-04	SwissProt	protein_match	289816	289947	118.000000	-	.	Target=Q5CZA5.2 8 51 +;percentID=56
+chr4-04	SwissProt	protein_match	289798	289938	168.000000	-	.	Target=O75290.3 6 51 +;percentID=70;Gap=M42 D1 M4 
+chr4-04	SwissProt	protein_match	289816	289938	120.000000	-	.	Target=Q13398.2 33 73 +;percentID=60
+chr4-04	SwissProt	protein_match	289813	289947	124.000000	-	.	Target=Q9UC07.2 19 65 +;percentID=51;Gap=M3 I2 M42 
+chr4-04	SwissProt	protein_match	289816	289947	113.000000	-	.	Target=A6NF35.2 12 55 +;percentID=54
+chr4-04	SwissProt	protein_match	289816	289947	118.000000	-	.	Target=O43296.1 11 54 +;percentID=56;sequence=MAAAVLTDRAQVSVTFDDVAVTFTKEEWGQLDLAQRTLYQEVMLENCGLLVSLGCPVPKAELICHLEHGQEPWTRKEDLSQDTCPGDKGKPKTTEPTTCEPALSEGISLQGQVTQGNSVDSQLGQAEDQDGLSEMQEGHFRPGIDPQEKSPGKMSPECDGLGTADGVCSRIGQEQVSPGDRVRSHNSCESGKDPMIQEEENNFKCSECGKVFNKKHLLAGHEKIHSGVKPYECTECGKTFIKSTHLLQHHMIHTGERPYECMECGKAFNRKSYLTQHQRIHSGEKPYKCNECGKAFTHRSNFVLHNRRHTGEKSFVCTECGQVFRHRPGFLRHYVVHSGENPYECLECGKVFKHRSYLMWHQQTHTGEKPYECSECGKVFLESAA [...]
+chr4-04	SwissProt	protein_match	289816	289914	115.000000	-	.	Target=Q9Y6Q3.3 40 72 +;percentID=69
+chr4-04	SwissProt	protein_match	289816	289947	112.000000	-	.	Target=Q8TF45.2 2 45 +;percentID=52;sequence=MQGTVAFEDVAVNFSQEEWSLLSEVQRCLYHDVMLENWVLISSLGCWCGSEDEEAPSKKSISIQRVSQVSTPGAGVSPKKAHSCEMCGAILGDILHLADHQGTHHKQKLHRCEAWGNKLYDSSNRPHQNQYLGEKPYRSSVEEALFVKRCKFHVSEESSIFIQSGKDFLPSSGLLLQEATHTGEKSNSKPECESPFQWGDTHYSCGECMKHSSTKHVFVQQQRLPSREECYCWECGKSFSKYDSVSNHQRVHTGKRPYECGECGKSFSHKGSLVQHQRVHTGKRPYECGECGKSFSHKGSLVQHQRVHTGERPYECGECGKSFSQNGTLIKHQRVHTGERPYECEECGKCFTQKGNLIQHQRGHTSERPYECEECGKCFSQKGTLT [...]
+chr4-04	SwissProt	protein_match	289813	289938	132.000000	-	.	Target=Q5REI6.1 4 45 +;percentID=54
+chr4-04	SwissProt	protein_match	289816	289938	121.000000	-	.	Target=Q6P9A3-2.1 14 54 +;percentID=56
+chr4-04	SwissProt	protein_match	289804	289950	160.000000	-	.	Target=Q14590.3 4 52 +;percentID=61
+chr4-04	SwissProt	protein_match	289816	289947	121.000000	-	.	Target=Q13398-3.2 42 85 +;percentID=59
+chr4-04	SwissProt	protein_match	289816	289938	118.000000	-	.	Target=Q8TAW3.2 49 89 +;percentID=58;sequence=MLSPVSRDASDALQGRKCLRPRSRRLPLPAAVRAHGPMAELTDSARGCVVFEDVFVYFSREEWELLDDAQRLLYHDVMLENFALLASLGIAFSRSRAVMKLERGEEPWVYDQVDMTSATEREAQRGLRPGCWHGVEDEEVSSEQSIFVAGVSEVRTLMAELESHPCDICGPILKDTLHLAKYHGGKARQKPYLCGACGKQFWFSTDFDQHQNQPNGGKLFPRKEGRDSVKSCRVHVPEKTLTCGKGRRDFSATSGLLQHQASLSSMKPHKSTKLVSGFLMGQRYHRCGECGKAFTRKDTLARHQRIHTGERPYECNECGKFFSQSYDLFKHQTVHTGERPYECSECGKFFRQISGLIEHRRVHTGERLYQCGKCGKFFSSKSNLI [...]
+chr4-04	SwissProt	protein_match	289816	289947	122.000000	-	.	Target=Q96SQ5.1 12 55 +;percentID=59
+chr4-04	SwissProt	protein_match	289816	289947	128.000000	-	.	Target=Q7TNU6.1 14 57 +;percentID=56;sequence=MAAAGLLPLPAAPQAKVTFEDVAVLLSQEEWARLGPAQRGLYRHVMMETYGNVVSLGLPGSKPVVISQLERGEDPWVLDGQGTELSQSLGSDHSECKAKEENQNTDLNVPPLISDEASATLTETPLRKVAEERYKTEPKVCPSPKPIGPQNAHGLNPSVPVARPQTAPSVERPYICIECGKCFGRSSHLLQHQRIHTGEKPYVCHVCGKAFSQSSVLSKHRRIHTGEKPYECNECGKAFRVSSDLAQHHKIHTGEKPHECLECGKAFTQLSHLIQHQRIHTGERPYVCPLCGKAFNHSTVLRSHQRVHTGEKPHGCSECGKTFSVKRTLLQHQRVHTGEKPYTCSECGKAFSDRSVLIQHHNVHTGEKPYECSECGKTFSHRSTL [...]
+chr4-04	SwissProt	protein_match	289816	289938	128.000000	-	.	Target=Q08DG8.1 14 54 +;percentID=56
+chr4-04	SwissProt	protein_match	289816	289947	127.000000	-	.	Target=Q6P9A1.2 11 54 +;percentID=59;sequence=MAAALRAPTQQVFVAFEDVAIYFSQEEWELLDEMQRLLYRDVMLENFAVMASLGCWCGAVDEGTPSAESVSVEELSQGRTPKADTSTDKSHPCEICTPVLRDILQMIELHASPCGQKLYLGGASRDFWMSSNLHQLQKLDNGEKLFKVDGDQASFMMNCRFHVSGKPFTFGEVGRDFSATSGLLQHQVTPTIERPHSRIRHLRVPTGRKPLKYTESRKSFREKSVFIQHQRADSGERPYKCSECGKSFSQSSGFLRHRKAHGRTRTHECSECGKSFSRKTHLTQHQRVHTGERPYDCSECGKSFRQVSVLIQHQRVHTGERPYECSECGKSFSHSTNLYRHRSAHTSTRPYECSECGKSFSHSTNLFRHWRVHTGVRPYECSECG [...]
+chr4-04	SwissProt	protein_match	289816	289947	122.000000	-	.	Target=Q8TAU3.1 12 55 +;percentID=59
+chr4-04	SwissProt	protein_match	289816	289947	121.000000	-	.	Target=Q13398-4.2 34 77 +;percentID=59
+chr4-04	SwissProt	protein_match	289816	289851	50.000000	-	.	Target=Q9P255.2 1 12 +;percentID=75
+chr4-04	SwissProt	protein_match	289816	289938	127.000000	-	.	Target=Q7Z340.3 29 69 +;percentID=60
+chr4-04	SwissProt	protein_match	289816	289938	120.000000	-	.	Target=Q13398-6.2 13 53 +;percentID=60
+chr4-04	SwissProt	protein_match	289816	289941	115.000000	-	.	Target=Q96NL3.1 8 49 +;percentID=54;sequence=MAAPALALVSFEDVVVTFTGEEWGHLDLAQRTLYQEVMLETCRLLVSLGHPVPKPELIYLLEHGQELWTVKRGLSQSTCAGEKAKPKITEPTASQLAFSEESSFQELLAQRSSRDSRLGQARDEEKLIKIQEGNLRPGTNPHKEICPEKLSYKHDDLEPDDSLGLRVLQERVTPQDALHECDSQGPGKDPMTDARNNPYTCTECGKGFSKKWALVRHQQIHAGVKPYECNECGKACRYMADVIRHMRLHTGEKPYKCIECGKAFKRRFHLTEHQRIHTGDKPYECKECGKAFTHRSSFIQHNMTHTREKPFLCKECGKAFYYSSSFAQHMRIHTGKKLYECGECGKAFTHRSTFIQHNVTHTGEKPFLCKECGKTFCLNSSFTQHM [...]
+chr4-04	SwissProt	protein_match	289804	289950	148.000000	-	.	Target=Q9UIE0.3 4 52 +;percentID=57;sequence=MTTFKEAVTFKDVAVFFTEEELGLLDPAQRKLYQDVMLENFTNLLSVGHQPFHPFHFLREEKFWMMETATQREGNSGGKTIAEAGPHEDCPCQQIWEQTASDLTQSQDSIINNSHFFEQGDVPSQVEAGLSIIHTGQKPSQNGKCKQSFSDVAIFDPPQQFHSGEKSHTCNECGKSFCYISALRIHQRVHLREKLSKCDMRGKEFSQSSCLQTRERVHTGEKPFKCEQCGKGFRCRAILQVHCKLHTGEKPYICEKCGRAFIHDFQLQKHQIIHTGEKPFKCEICGKSFCLRSSLNRHCMVHTAEKLYKSEECGKGFTDSLDLHKHQIIHTGQKPYNCKECGKSFRWSSYLLIHQRIHSGEKPYRCEECGKGYISKSGLNLHQRVH [...]
+chr4-04	SwissProt	protein_match	289816	289941	127.000000	-	.	Target=P51815.2 234 275 +;percentID=57
+chr4-04	SwissProt	protein_match	289816	289938	122.000000	-	.	Target=B1APH4.3 37 77 +;percentID=56;sequence=MASRPRPRTPSRGPSDLRFRGEAGLRRVFLKKAGGSVSFSDVAVGFTQEEWQHLDSAQRTPYRDMMLENYSLLLSVGYCITKPEVVCKLEHGQVLWILEEESPSQSHLDCCIDDDLMEKRQENQDQHLQKVDFVNNKTLTMDRNGVLGKTFSLDTNPILSRKIRGNCDSSGMNLNNISELIISNRSSFVRNPAECNVRGKFLLCMKRENPYARGKPLEYDGNGKAVSQNEDLFRHQYIQTLKQCFEYNHRGYTEERNPMNALNVGKLLDIGHALQYIKEHTRDKTYECNECGKNFCEKSNLHVHQRTHTGEKPYGCNECQKAFGDRSALKVHQRIHTGEKPYELHQRTHTGEKPYACSECGKTFYQKSSLTTHQRTHTREQPYEY [...]
+chr4-04	SwissProt	protein_match	289816	289947	131.000000	-	.	Target=Q8N184-2.3 3 46 +;percentID=56
+chr4-04	SwissProt	protein_match	289816	289947	114.000000	-	.	Target=Q08ER8.2 6 49 +;percentID=54
+chr4-04	SwissProt	protein_match	289816	289938	131.000000	-	.	Target=P51508.3 21 61 +;percentID=56
+chr4-04	SwissProt	protein_match	289816	289947	129.000000	-	.	Target=Q96BR6.2 87 130 +;percentID=54
+chr4-04	SwissProt	protein_match	289816	289947	131.000000	-	.	Target=Q96GC6-3.1 179 222 +;percentID=54;sequence=MNIEVVEVLTLNQEVAGPRNAQIQALYAEDGSLSADAPSEQIQQQGKHPGDPEAARQRFRQFRYKDMTGPREALDQLRELCHQWLQPKARSKEQILELLVLEQFLGALPVKLRTWVESQHPENCQEVVALVEGVTWMSEEEVLPAGQPAEGTTCCLEVTAQQEEKQEDAAICPVTVLPEEPVTFQDVAVDFSREEWGLLGPTQRTEYRDVMLETFGHLVSVGWETTLENKELAPNSDIPEEEPAPSLKVQESSRDCALSSTLEDTLQGGVQEVQDTVLKQMESAQEKDLPQKKHFDNRESQANSGALDTNQVSLQKIDNPESQANSGALDTNQVLLHKIPPRKRLRKRDSQVKSMKHNSRVKIHQKSCERQKAKEGNGCRK [...]
+chr4-04	SwissProt	protein_match	289816	289938	134.000000	-	.	Target=Q96CS4.1 29 69 +;percentID=65;sequence=MAPPSAPLPAQGPGKARPSRKRGRRPRALKFVDVAVYFSPEEWGCLRPAQRALYRDVMRETYGHLGALGCAGPKPALISWLERNTDDWEPAALDPQEYPRGLTVQRKSRTRKKNGEKEVFPPKEAPRKGKRGRRPSKPRLIPRQTSGGPICPDCGCTFPDHQALESHKCAQNLKKPYPCPDCGRRFSYPSLLVSHRRAHSGECPYVCDQCGKRFSQRKNLSQHQVIHTGEKPYHCPDCGRCFRRSRSLANHRTTHTGEKPHQCPSCGRRFAYPSLLAIHQRTHTGEKPYTCLECNRRFRQRTALVIHQRIHTGEKPYPCPDCERRFSSSSRLVSHRRVHSGERPYACEHCEARFSQRSTLLQHQLLHTGEKPYPCPDCGRAFRRS [...]
+chr4-04	SwissProt	protein_match	289816	289959	134.000000	-	.	Target=A8MYF4.2 23 70 +;percentID=50
+chr4-04	SwissProt	protein_match	289816	289947	134.000000	-	.	Target=Q9Y3M9.2 9 52 +;percentID=54;sequence=MGPQGARRQAFLAFGDVTVDFTQKEWRLLSPAQRALYREVTLENYSHLVSLGILHSKPELIRRLEQGEVPWGEERRRRPGPCAGIYAEHVLRPKNLGLAHQRQQQLQFSDQSFQSDTAEGQEKEKSTKPMAFSSPPLRHAVSSRRRNSVVEIESSQGQRENPTEIDKVLKGIENSRWGAFKCAERGQDFSRKMMVIIHKKAHSRQKLFTCRECHQGFRDESALLLHQNTHTGEKSYVCSVCGRGFSLKANLLRHQRTHSGEKPFLCKVCGRGYTSKSYLTVHERTHTGEKPYECQECGRRFNDKSSYNKHLKAHSGEKPFVCKECGRGYTNKSYFVVHKRIHSGEKPYRCQECGRGFSNKSHLITHQRTHSGEKPFACRQCKQSFS [...]
+chr4-04	SwissProt	protein_match	289816	289947	134.000000	-	.	Target=Q96GC6-4.1 3 46 +;percentID=56
+chr4-04	SwissProt	protein_match	289816	289947	131.000000	-	.	Target=A6NFI3.1 155 198 +;percentID=59
+chr4-04	SwissProt	protein_match	289816	289938	134.000000	-	.	Target=Q9Y6Q3-2.3 47 87 +;percentID=60
+chr4-04	SwissProt	protein_match	289816	289947	131.000000	-	.	Target=Q8N184.3 3 46 +;percentID=56
+chr4-04	SwissProt	protein_match	289810	289947	146.000000	-	.	Target=P17098.2 22 67 +;percentID=58
+chr4-04	SwissProt	protein_match	289816	289950	133.000000	-	.	Target=P51786.2 23 67 +;percentID=51;sequence=MPANGTSPQRFPALIPGEPGRSFEGSVSFEDVAVDFTRQEWHRLDPAQRTMHKDVMLETYSNLASVGLCVAKPEMIFKLERGEELWILEEESSGHGYSGSLSLLCGNGSVGDNALRHDNDLLHHQKIQTLDQNVEYNGCRKAFHEKTGFVRRKRTPRGDKNFECHECGKAYCRKSNLVEHLRIHTGERPYECGECAKTFSARSYLIAHQKTHTGERPFECNECGKSFGRKSQLILHTRTHTGERPYECTECGKTFSEKATLTIHQRTHTGEKPYECSECGKTFRVKISLTQHHRTHTGEKPYECGECGKNFRAKKSLNQHQRIHTGEKPYECGECGKFFRMKMTLNNHQRTHTGEKPYQCNECGKSFRVHSSLGIHQRIHTGEKP [...]
+chr4-04	SwissProt	protein_match	289816	289938	134.000000	-	.	Target=P51814-8.2 27 67 +;percentID=58
+chr4-04	SwissProt	protein_match	289816	289947	134.000000	-	.	Target=P10078.3 100 143 +;percentID=61
+chr4-04	SwissProt	protein_match	289816	289938	121.000000	-	.	Target=Q6P9A3.1 27 67 +;percentID=56
+chr4-04	SwissProt	protein_match	289816	289956	137.000000	-	.	Target=P51814.2 63 109 +;percentID=53
+chr4-04	SwissProt	protein_match	289816	289956	137.000000	-	.	Target=P51814-3.2 31 77 +;percentID=53
+chr4-04	SwissProt	protein_match	289816	289941	125.000000	-	.	Target=Q02525.2 58 99 +;percentID=54
+chr4-04	SwissProt	protein_match	289816	289938	138.000000	-	.	Target=Q9BS34.1 4 44 +;percentID=60
+chr4-04	SwissProt	protein_match	289816	289947	138.000000	-	.	Target=Q5TYW1-2.2 5 48 +;percentID=56
+chr4-04	SwissProt	protein_match	289816	289959	130.000000	-	.	Target=Q6PGE4.1 147 194 +;percentID=56
+chr4-04	SwissProt	protein_match	289816	289944	141.000000	-	.	Target=Q5JVG2.1 6 48 +;percentID=60
+chr4-04	SwissProt	protein_match	289816	289938	136.000000	-	.	Target=Q6P9Y7.1 6 46 +;percentID=60;sequence=MARVSVVFSDVSIAFSQEEWESLDLEQRNLYKDVMMENYHNVASLGCFISKPDVISLLEQGKEPWKVVRQRKPCPDSETKDETNQVFSENGIYEMNLSQWKIMERIGNSGLKSLLLKNGWESRRKQERQEDPQEGYLSQVRHTSERVSSYEKRALTTRQRIHFVEKPYECNECGKAFRVRQQLTFHHRIHTGEKPYECKECGMAFRQTAHLTRHQRLHSGEKLYECKECGQAFIYGPELRAHQKLHTGEKPYTCRECGKAFRVRGQLTLHQRIHTGEKPYVCQECGKAFRQLAHLTRHQKLNVVDRLYECKECGKDFLCGSGLRVHHKLHTGEKPYECKDCGKAFRVRQQLTLHQRSHTGEKPYECTECGKTFSRGYHLILHHRIH [...]
+chr4-04	SwissProt	protein_match	289816	289938	120.000000	-	.	Target=Q5RBQ3.1 27 67 +;percentID=56
+chr4-04	SwissProt	protein_match	289816	289944	139.000000	-	.	Target=Q8BZW4-2.1 26 68 +;percentID=55
+chr4-04	SwissProt	protein_match	289816	289968	141.000000	-	.	Target=P51814-2.2 19 69 +;percentID=50
+chr4-04	SwissProt	protein_match	289816	289956	137.000000	-	.	Target=P51814-5.2 55 101 +;percentID=53
+chr4-04	SwissProt	protein_match	289816	289938	115.000000	-	.	Target=Q3SY52.1 27 67 +;percentID=56;sequence=MAAAALRAPTQVTVSPETHMDLTKGCVTFEDIAIYFSQDEWGLLDEAQRLLYLEVMLENFALVASLGCGHGTEDEETPSDQNVSVGVSQSKAGSSTQKTQSCEMCVPVLKDILHLADLPGQKPYLVGECTNHHQHQKHHSAKKSLKRDMDRASYVKCCLFCMSLKPFRKWEVGKDLPAMLRLLRSLVFPGGKKPGTITECGEDIRSQKSHYKSGECGKASRHKHTPVYHPRVYTGKKLYECSKCGKAFRGKYSLVQHQRVHTGERPWECNECGKFFSQTSHLNDHRRIHTGERPYECSECGKLFRQNSSLVDHQKIHTGARPYECSQCGKSFSQKATLVKHQRVHTGERPYKCGECGNSFSQSAILNQHRRIHTGAKPYECGQCG [...]
+chr4-04	SwissProt	protein_match	289816	289944	135.000000	-	.	Target=P52742.2 12 54 +;percentID=58
+chr4-04	SwissProt	protein_match	289816	289851	50.000000	-	.	Target=A6NK75.3 1 12 +;percentID=75
+chr4-04	SwissProt	protein_match	289816	289941	141.000000	-	.	Target=P17031.3 13 54 +;percentID=59
+chr4-04	SwissProt	protein_match	289816	289947	138.000000	-	.	Target=Q5TYW1.2 5 48 +;percentID=56
+chr4-04	SwissProt	protein_match	289816	289947	138.000000	-	.	Target=Q8IZ26.2 11 54 +;percentID=63
+chr4-04	SwissProt	protein_match	289816	289938	130.000000	-	.	Target=Q9Y473.1 27 67 +;percentID=58;sequence=MPADVNLSQKPQVLGPEKQDGSCEASVSFEDVTVDFSREEWQQLDPAQRCLYRDVMLELYSHLFAVGYHIPNPEVIFRMLKEKEPRVEEAEVSHQRCQEREFGLEIPQKEISKKASFQKDMVGEFTRDGSWCSILEELRLDADRTKKDEQNQIQPMSHSAFFNKKTLNTESNCEYKDPGKMIRTRPHLASSQKQPQKCCLFTESLKLNLEVNGQNESNDTEQLDDVVGSGQLFSHSSSDACSKNIHTGETFCKGNQCRKVCGHKQSLKQHQIHTQKKPDGCSECGGSFTQKSHLFAQQRIHSVGNLHECGKCGKAFMPQLKLSVYLTDHTGDIPCICKECGKVFIQRSELLTHQKTHTRKKPYKCHDCGKAFFQMLSLFRHQRTH [...]
+chr4-04	SwissProt	protein_match	289816	289947	144.000000	-	.	Target=Q16587.2 40 83 +;percentID=59
+chr4-04	SwissProt	protein_match	289816	289950	146.000000	-	.	Target=A1L1L7.1 36 80 +;percentID=55;sequence=MAAPDSLSHGPSGDSVCLQEEKVSAEMMLVDCLTNYQELVSFDDVIVDFTQEEWTSLNPDQRTLYREVMLENYKNLATVGYQLIKPSVISWLEQEEFSTGQKIVFPEWKIQLETQCSASQQELLRGNISNGMQTQTGSDTGRGLCDGTQYGDFFSELSPLRTVMKTRPAQDNYDSSQCRKDFLMLQRKKCAGEKLSEFNQSEETGAIPGKAYQKMATQEKCFECSDCGKSFMNQSHLQTHQRTHSGDKLYELNECGRSFINSRLAVLIETLNAKKPHRCKECGKGYRYPAYLNIHMRTHTGEKPYECKECGKAFNYSNSFQIHGRTHTGEKPYVCNQCGKAFTQHSGLSIHVRSHNGDKPYACKECGKAFLTSSRLIQHIRTHTG [...]
+chr4-04	SwissProt	protein_match	289816	289947	146.000000	-	.	Target=Q2M218.1 5 48 +;percentID=59
+chr4-04	SwissProt	protein_match	289816	289947	147.000000	-	.	Target=Q86Y25.1 9 52 +;percentID=65
+chr4-04	SwissProt	protein_match	289816	289938	147.000000	-	.	Target=Q2KI58.1 4 44 +;percentID=63
+chr4-04	SwissProt	protein_match	289816	289947	146.000000	-	.	Target=Q61116.1 5 48 +;percentID=63
+chr4-04	SwissProt	protein_match	289816	289947	147.000000	-	.	Target=Q6ZMY9.1 11 54 +;percentID=65
+chr4-04	SwissProt	protein_match	289816	289944	147.000000	-	.	Target=Q9UK12.2 6 48 +;percentID=65
+chr4-04	SwissProt	protein_match	289816	289956	145.000000	-	.	Target=Q9BY31.2 9 55 +;percentID=57;sequence=MLETYNSLVSLQELVSFEEVAVHFTWEEWQDLDDAQRTLYRDVMLETYSSLVSLGHCITKPEMIFKLEQGAEPWIVEETPNLRLSAVQIIDDLIERSHESHDRFFWQIVITNSNTSTQERVELGKTFNLNSNHVLNLIINNGNSSGMKPGQFNDCQNMLFPIKPGETQSGEKPHVCDITRRSHRHHEHLTQHHKIQTLLQTFQCNEQGKTFNTEAMFFIHKRVHIVQTFGKYNEYEKACNNSAVIVQVITQVGQPTCCRKSDFTKHQQTHTGEKPYECVECEKPSISKSDLMLQCKMPTEEKPYACNWCEKLFSYKSSLIIHQRIHTGEKPYGCNECGKTFRRKSFLTLHERTHTGDKPYKCIECGKTFHCKSLLTLHHRTHSGEK [...]
+chr4-04	SwissProt	protein_match	289816	289968	141.000000	-	.	Target=P51814-7.2 19 69 +;percentID=50
+chr4-04	SwissProt	protein_match	289816	289938	141.000000	-	.	Target=Q2TL60.1 14 54 +;percentID=63;sequence=MPAVRGKSKSKAPVTFGDLAIYFSQEEWEWLSPMQKDLYEDVMLENYHNLVSVGLACRRPNIIALLEKGKAPWVIEPSRRRWGPESGSKYETKKLPPNSCHKSGPSICEKPTSSQQKVPTEKAKHNKSSVPSKSKKEHSGKKSLKCNLCGKTFFRSLSLKLHQDFHTGERSYECSTCRHVFRQILSLILHQRVHNWNKSYECDKCGDIFNKKLTLMIHRRIHNGKESFHHEKASDSCPSLSLHRNNHTTDSVHQCRKCGKVFSRMSSLLLHKRSHNRKKIQKYNKYKRGFKKQPVLVHKRVCIGKKTHESKKALIQSARQKTCQSENPFMCGKCGKSFSRISALMLHQRIHTSGNPYKCDKCQKDFGRLSTLILHLRIHSGEKQF [...]
+chr4-04	SwissProt	protein_match	289816	289938	142.000000	-	.	Target=Q6ECI4.2 23 63 +;percentID=63
+chr4-04	SwissProt	protein_match	289816	289950	148.000000	-	.	Target=Q5RES8.1 4 48 +;percentID=57
+chr4-04	SwissProt	protein_match	289816	289938	144.000000	-	.	Target=Q14587.2 81 121 +;percentID=65
+chr4-04	SwissProt	protein_match	289816	289947	145.000000	-	.	Target=A2VDP4.1 3 46 +;percentID=61
+chr4-04	SwissProt	protein_match	289816	289950	143.000000	-	.	Target=Q86WZ6.1 19 63 +;percentID=57
+chr4-04	SwissProt	protein_match	289813	289938	132.000000	-	.	Target=Q68EA5.3 4 45 +;percentID=57
+chr4-04	SwissProt	protein_match	289816	289938	150.000000	-	.	Target=Q5HYK9.2 14 54 +;percentID=68
+chr4-04	SwissProt	protein_match	289816	289947	134.000000	-	.	Target=P10078-2.3 100 143 +;percentID=61
+chr4-04	SwissProt	protein_match	289816	289971	148.000000	-	.	Target=A0JPL0.1 3 52 +;percentID=53;Gap=M6 D2 M44 
+chr4-04	SwissProt	protein_match	289816	289950	151.000000	-	.	Target=Q7TSH9.1 24 68 +;percentID=57
+chr4-04	SwissProt	protein_match	289816	289947	153.000000	-	.	Target=Q8NDW4.1 5 48 +;percentID=61
+chr4-04	SwissProt	protein_match	289816	289947	154.000000	-	.	Target=Q8N8J6.2 5 48 +;percentID=63
+chr4-04	SwissProt	protein_match	289816	289968	150.000000	-	.	Target=Q96PQ6.2 47 97 +;percentID=54
+chr4-04	SwissProt	protein_match	289816	289950	149.000000	-	.	Target=Q9HCZ1.2 6 50 +;percentID=60
+chr4-04	SwissProt	protein_match	289816	289947	150.000000	-	.	Target=A6NDX5.5 39 82 +;percentID=65
+chr4-04	SwissProt	protein_match	289816	289947	151.000000	-	.	Target=Q9Y2H8.1 43 86 +;percentID=61
+chr4-04	SwissProt	protein_match	289816	289950	156.000000	-	.	Target=A6QLU5.1 24 68 +;percentID=60
+chr4-04	SwissProt	protein_match	289816	289947	157.000000	-	.	Target=Q5JUW0.1 5 48 +;percentID=65;sequence=MAMSQESLTFKDVFVDFTLEEWQQLDSAQKNLYRDVMLENYSHLVSVGYLVAKPDVIFRLGPGEESWMADGGTPVRTCAGEDRPEVWQVDEQIDHYKESQDKLPWQAAFIGKETLKDESGQESRTCRKSIYLSTEFDSVRQRLPKYYSWEKAFKTSFKLSWSKWKLCKKER
+chr4-04	SwissProt	protein_match	289816	289950	144.000000	-	.	Target=Q9BUY5.1 38 82 +;percentID=55
+chr4-04	SwissProt	protein_match	289816	289947	157.000000	-	.	Target=Q8N9F8.1 11 54 +;percentID=70
+chr4-04	SwissProt	protein_match	289816	289947	141.000000	-	.	Target=Q9XSR1.1 12 55 +;percentID=65
+chr4-04	SwissProt	protein_match	289816	289947	157.000000	-	.	Target=Q96RE9-3.1 21 64 +;percentID=61
+chr4-04	SwissProt	protein_match	289816	289947	157.000000	-	.	Target=Q96RE9-2.1 20 63 +;percentID=61
+chr4-04	SwissProt	protein_match	289816	289947	159.000000	-	.	Target=O60765.2 11 54 +;percentID=68
+chr4-04	SwissProt	protein_match	289816	289944	157.000000	-	.	Target=Q571J5.2 12 54 +;percentID=69
+chr4-04	SwissProt	protein_match	289816	289947	157.000000	-	.	Target=Q9BS31.1 5 48 +;percentID=65;sequence=MTKAQESLTLEDVAVDFTWEEWQFLSPAQKDLYRDVMLENYSNLVSVGYQAGKPDALTKLEQGEPLWTLEDEIHSPAHPEIEKADDHLQQPLQNQKILKRTGQRYEHGRTLKSYLGLTNQSRRYNRKEPAEFNGDGAFLHDNHEQMPTEIEFPESRKPISTKSQFLKHQQTHNIEKAHECTDCGKAFLKKSQLTEHKRIHTGKKPHVCSLCGKAFYKKYRLTEHERAHRGEKPHGCSLCGKAFYKRYRLTEHERAHKGEKPYGCSECGKAFPRKSELTEHQRIHTGIKPHQCSECGRAFSRKSLLVVHQRTHTGEKPHTCSECGKGFIQKGNLNIHQRTHTGEKPYGCIDCGKAFSQKSCLVAHQRYHTGKTPFVCPECGQPCSQK [...]
+chr4-04	SwissProt	protein_match	289816	289947	157.000000	-	.	Target=Q5JUW0-2.1 5 48 +;percentID=65;sequence=MAMSQESLTFKDVFVDFTLEEWQQLDSAQKNLYRDVMLENYSHLVSVGYLVAKPDVIFRLGPGEESWMADGGTPVRTCAEVWQVDEQIDHYKESQDKLPWQAAFIGKETLKDESGQESRTCRKSIYLSTEFDSVRQRLPKYYSWEKAFKTSFKLSWSKWKLCKKER
+chr4-04	SwissProt	protein_match	289816	289950	157.000000	-	.	Target=Q99676.3 24 68 +;percentID=60
+chr4-04	SwissProt	protein_match	289816	289926	157.000000	-	.	Target=P17038-2.4 2 38 +;percentID=81
+chr4-04	SwissProt	protein_match	289816	289941	155.000000	-	.	Target=Q7Z2F6.1 3 44 +;percentID=76
+chr4-04	SwissProt	protein_match	289816	289938	158.000000	-	.	Target=Q86UE3.2 60 100 +;percentID=68
+chr4-04	SwissProt	protein_match	289816	289938	123.000000	-	.	Target=Q96H86.2 26 66 +;percentID=58;sequence=MAPPLAPLPPRDPNGAGPEWREPGAVSFADVAVYFCREEWGCLRPAQRALYRDVMRETYGHLSALGIGGNKPALISWVEEEAELWGPAAQDPEVAKCQTQTDPADSRNKKKERQREGTGALEKPDPVAAGSPGLKSPQAPSAGPPYGWEQLSKAPHRGRPSLCAHPPVPRADQRHGCYVCGKSFAWRSTLVEHVYSHTGEKPFHCTDCGKGFGHASSLSKHRAIHRGERPHRCLECGRAFTQRSALTSHLRVHTGEKPYGCADCGRRFSQSSALYQHRRVHSGETPFPCPDCGRAFAYPSDLRRHVRTHTGEKPYPCPDCGRCFRQSSEMAAHRRTHSGEKPYPCPQCGRRFGQKSAVAKHQWVHRPGAGGHRGRVAGRLSVTLT [...]
+chr4-04	SwissProt	protein_match	289816	289944	139.000000	-	.	Target=Q8BZW4.1 26 68 +;percentID=55
+chr4-04	SwissProt	protein_match	289816	289941	165.000000	-	.	Target=Q6PG37.1 4 45 +;percentID=69
+chr4-04	SwissProt	protein_match	289816	289947	157.000000	-	.	Target=P52738.2 3 46 +;percentID=70
+chr4-04	SwissProt	protein_match	289816	289938	164.000000	-	.	Target=Q9HCL3.2 6 46 +;percentID=75
+chr4-04	SwissProt	protein_match	289816	289965	166.000000	-	.	Target=Q8N988.2 27 76 +;percentID=64
+chr4-04	SwissProt	protein_match	289816	289947	157.000000	-	.	Target=Q96RE9.1 5 48 +;percentID=61
+chr4-04	SwissProt	protein_match	289816	289941	166.000000	-	.	Target=Q80W31.1 7 48 +;percentID=71
+chr4-04	SwissProt	protein_match	289816	289938	138.000000	-	.	Target=Q6N045.2 14 54 +;percentID=58
+chr4-04	SwissProt	protein_match	289816	289947	157.000000	-	.	Target=Q5JUW0-3.1 5 48 +;percentID=65;sequence=MAMSQESLTFKDVFVDFTLEEWQQLDSAQKNLYRDVMLENYSHLVSVGYLVAKPDVIFRLGPGEESWMADGGTPVRTCAGEDRPDVSIFASCILKCCY
+chr4-04	SwissProt	protein_match	289816	289938	166.000000	-	.	Target=P35789-2.4 4 44 +;percentID=78
+chr4-04	SwissProt	protein_match	289816	289947	162.000000	-	.	Target=Q5MCW4.1 5 48 +;percentID=68
+chr4-04	SwissProt	protein_match	289816	289956	164.000000	-	.	Target=Q5T5D7.1 2 48 +;percentID=65
+chr4-04	SwissProt	protein_match	289816	289938	169.000000	-	.	Target=Q6ZNA1.2 8 48 +;percentID=80
+chr4-04	SwissProt	protein_match	289816	289938	166.000000	-	.	Target=P35789-3.4 4 44 +;percentID=78
+chr4-04	SwissProt	protein_match	289816	290055	169.000000	-	.	Target=Q96NG5.1 4 83 +;percentID=47
+chr4-04	SwissProt	protein_match	289816	289950	151.000000	-	.	Target=Q06732.2 8 52 +;percentID=60
+chr4-04	SwissProt	protein_match	289816	289938	166.000000	-	.	Target=P35789.4 4 44 +;percentID=78
+chr4-04	SwissProt	protein_match	289816	289932	161.000000	-	.	Target=Q4R6C2.1 8 46 +;percentID=71
+chr4-04	SwissProt	protein_match	289816	289938	166.000000	-	.	Target=Q68DY1.2 4 44 +;percentID=78
+chr4-04	SwissProt	protein_match	289816	289947	157.000000	-	.	Target=Q2M3X9.1 5 48 +;percentID=65
+chr4-04	SwissProt	protein_match	289816	289947	155.000000	-	.	Target=Q8R1D1.1 36 79 +;percentID=61;sequence=MAAPASSHGPSEDSGCLQERKIAAEMMLVDCLTDDQELVSFEDVIVDFTQEEWSSLNPDQRNLYRDVMLENYQNLATVGYQLIKPSLISWLEQEEFSKGQKIVFPEWKLQLETKCSAFQQEFLRGNISSRMQMQTGINRGRELCDGTQYGDFFSELSPLRTDMKTQPAQDNYGCSQYRKDFLMLQRKNCAGEKLSEFSQSEETGMTPVKEKIDTQEKGFECSDCGKSFMSQSHLQTHQRTHSGDKLYEWNECGRSFINSRLAVLIETLNAKKPHRCKECGKGYRYPAYLNIHMRTHTGEKPYECKECGKAFNYSNSFQIHGRTHTGEKPYVCSQCGKAFTQHSGLSIHVRSHTGDKPYGCKECGKAFLTSSRLIQHIRTHTGEKP [...]
+chr4-04	SwissProt	protein_match	289816	289947	153.000000	-	.	Target=Q5REN4.1 5 48 +;percentID=61
+chr4-04	SwissProt	protein_match	289816	289947	171.000000	-	.	Target=Q8N859.1 16 59 +;percentID=72;sequence=MEEEEMNDGSQMVRSQESLTFQDVAVDFTREEWDQLYPAQKNLYRDVMLENYRNLVALGYQLCKPEVIAQLELEEEWVIERDSLLDTHPDGENRPEIKKSTTSQNISDENQTHEMIMERLAGDSFWYSILGGLWDFDYHPEFNQENHKRYLGQVTLTHKKITQERSLECNKFAENCNLNSNLMQQRIPSIKIPLNSDTQGNSIKHNSDLIYYQGNYVRETPYEYSECGKIFNQHILLTDHIHTAEKPSECGKAFSHTSSLSQPQMLLTGEKPYKCDECGKRFSQRIHLIQHQRIHTGEKPFICNGCGKAFRQHSSFTQHLRIHTGEKPYKCNQCGKAFSRITSLTEHHRLHTGEKPYECGFCGKAFSQRTHLNQHERTHTGEKPY [...]
+chr4-04	SwissProt	protein_match	289816	289941	172.000000	-	.	Target=Q8NDQ6.1 5 46 +;percentID=73;sequence=MAHALVTFRDVAIDFSQKEWECLDTTQRKLYRDVMLENYNNLVSLGYSGSKPDVITLLEQGKEPCVVARDVTGRQCPGLLSRHKTKKLSSEKDIHEISLSKESIIEKSKTLRLKGSIFRNEWQNKSEFEGQQGLKERSISQKKIVSKKMSTDRKRPSFTLNQRIHNSEKSCDSHLVQHGKIDSDVKHDCKECGSTFNNVYQLTLHQKIHTGEKSCKCEKCGKVFSHSYQLTLHQRFHTGEKPYECQECGKTFTLYPQLNRHQKIHTGKKPYMCKKCDKGFFSRLELTQHKRIHTGKKSYECKECGKVFQLIFYFKEHERIHTGKKPYECKECGKAFSVCGQLTRHQKIHTGVKPYECKECGKTFRLSFYLTEHRRTHAGKKPYECK [...]
+chr4-04	SwissProt	protein_match	289816	289941	172.000000	-	.	Target=Q8NDQ6-2.1 5 46 +;percentID=73;sequence=MAHALVTFRDVAIDFSQKEWECLDTTQRKLYRDVMLENYNNLVSLGLLSRHKTKKLSSEKDIHEISLSKESIIEKSKTLRLKGSIFRNEWQNKSEFEGQQGLKERSISQKKIVSKKMSTDRKRPSFTLNQRIHNSEKSCDSHLVQHGKIDSDVKHDCKECGSTFNNVYQLTLHQKIHTGEKSCKCEKCGKVFSHSYQLTLHQRFHTGEKPYECQECGKTFTLYPQLNRHQKIHTGKKPYMCKKCDKGFFSRLELTQHKRIHTGKKSYECKECGKVFQLIFYFKEHERIHTGKKPYECKECGKAFSVCGQLTRHQKIHTGVKPYECKECGKTFRLSFYLTEHRRTHAGKKPYECKECGKSFNVRGQLNRHKTIHTGIKPFACKVC [...]
+chr4-04	SwissProt	protein_match	289816	289947	172.000000	-	.	Target=Q8N9Z0-2.2 21 64 +;percentID=77
+chr4-04	SwissProt	protein_match	289816	289941	170.000000	-	.	Target=O75437.3 12 53 +;percentID=83
+chr4-04	SwissProt	protein_match	289816	289944	173.000000	-	.	Target=Q8TAF7.2 4 46 +;percentID=72
+chr4-04	SwissProt	protein_match	289816	289938	176.000000	-	.	Target=Q6ZMV8.1 4 44 +;percentID=80
+chr4-04	SwissProt	protein_match	289816	289938	176.000000	-	.	Target=Q03923.3 4 44 +;percentID=80
+chr4-04	SwissProt	protein_match	289816	289938	171.000000	-	.	Target=P17038.4 4 44 +;percentID=80
+chr4-04	SwissProt	protein_match	289816	289941	155.000000	-	.	Target=P21506.3 13 54 +;percentID=66
+chr4-04	SwissProt	protein_match	289816	289941	170.000000	-	.	Target=O75437-2.3 12 53 +;percentID=83
+chr4-04	SwissProt	protein_match	289816	289938	176.000000	-	.	Target=Q6ZN08.2 50 90 +;percentID=82
+chr4-04	SwissProt	protein_match	289816	289947	152.000000	-	.	Target=Q06730.3 9 52 +;percentID=61
+chr4-04	SwissProt	protein_match	289816	289941	168.000000	-	.	Target=Q5R5S6.1 5 46 +;percentID=71
+chr4-04	SwissProt	protein_match	289816	289938	177.000000	-	.	Target=O75346.2 4 44 +;percentID=82
+chr4-04	SwissProt	protein_match	289816	289947	154.000000	-	.	Target=Q5R4K8.2 4 47 +;percentID=63
+chr4-04	SwissProt	protein_match	289816	289947	122.000000	-	.	Target=Q9HCX3.1 11 54 +;percentID=54
+chr4-04	SwissProt	protein_match	289816	289938	178.000000	-	.	Target=P17019.3 4 44 +;percentID=82
+chr4-04	SwissProt	protein_match	289816	289938	176.000000	-	.	Target=Q9Y2Q1.1 4 44 +;percentID=80
+chr4-04	SwissProt	protein_match	289816	289938	180.000000	-	.	Target=Q03936.2 4 44 +;percentID=82
+chr4-04	SwissProt	protein_match	289816	289941	180.000000	-	.	Target=A6NNF4-2.3 3 44 +;percentID=83
+chr4-04	SwissProt	protein_match	289816	289947	142.000000	-	.	Target=Q61751.1 11 54 +;percentID=63
+chr4-04	SwissProt	protein_match	289816	289950	143.000000	-	.	Target=Q2VY69.1 4 48 +;percentID=60
+chr4-04	SwissProt	protein_match	289816	289938	187.000000	-	.	Target=Q3MIS6.1 8 48 +;percentID=85
+chr4-04	SwissProt	protein_match	289816	289941	188.000000	-	.	Target=P0CB33.1 15 56 +;percentID=85
+chr4-04	SwissProt	protein_match	289816	289938	136.000000	-	.	Target=Q6P9Y7-2.1 6 46 +;percentID=60;sequence=MARVSVVFSDVSIAFSQEEWESLDLEQRNLYKDVMMENYHNVASLGCFISKPDVISLLEQGKEPWKVTMGDPGRTNSETKDETNQVFSENGIYEMNLSQWKIMERIGNSGLKSLLLKNGWESRRKQERQEDPQEGYLSQVRHTSERVSSYEKRALTTRQRIHFVEKPYECNECGKAFRVRQQLTFHHRIHTGEKPYECKECGMAFRQTAHLTRHQRLHSGEKLYECKECGQAFIYGPELRAHQKLHTGEKPYTCRECGKAFRVRGQLTLHQRIHTGEKPYVCQECGKAFRQLAHLTRHQKLNVVDRLYECKECGKDFLCGSGLRVHHKLHTGEKPYECKDCGKAFRVRQQLTLHQRSHTGEKPYECTECGKTFSRGYHLILHHR [...]
+chr4-04	SwissProt	protein_match	289816	289938	188.000000	-	.	Target=Q8WV37.1 8 48 +;percentID=85
+chr4-04	SwissProt	protein_match	289816	289941	185.000000	-	.	Target=A6NKZ1.3 15 56 +;percentID=83
+chr4-04	SwissProt	protein_match	289816	289938	181.000000	-	.	Target=A6NN14.3 13 53 +;percentID=82
+chr4-04	SwissProt	protein_match	289816	289941	183.000000	-	.	Target=A6NK21.3 3 44 +;percentID=83
+chr4-04	SwissProt	protein_match	289816	289947	154.000000	-	.	Target=Q8N8J6-2.2 5 48 +;percentID=63
+chr4-04	SwissProt	protein_match	289816	289947	154.000000	-	.	Target=Q8N8J6-3.2 5 48 +;percentID=63
+chr4-04	SwissProt	protein_match	289816	289938	179.000000	-	.	Target=A8MTY0.2 4 44 +;percentID=82
+chr4-04	SwissProt	protein_match	289816	289944	180.000000	-	.	Target=O95780.1 2 44 +;percentID=81
+chr4-04	SwissProt	protein_match	289816	289938	172.000000	-	.	Target=O75373.2 4 44 +;percentID=80
+chr4-04	SwissProt	protein_match	289816	289941	182.000000	-	.	Target=Q14586.2 3 44 +;percentID=80
+chr4-04	SwissProt	protein_match	289816	289938	174.000000	-	.	Target=Q8NEM1.2 13 53 +;percentID=80
+chr4-04	SwissProt	protein_match	289816	289941	195.000000	-	.	Target=O14628-5.2 3 44 +;percentID=90
+chr4-04	SwissProt	protein_match	289816	289941	194.000000	-	.	Target=Q8IYX0.1 15 56 +;percentID=88
+chr4-04	SwissProt	protein_match	289816	289941	177.000000	-	.	Target=Q8TD23.2 3 44 +;percentID=78
+chr4-04	SwissProt	protein_match	289816	289947	199.000000	-	.	Target=O14628-7.2 5 48 +;percentID=88
+chr4-04	SwissProt	protein_match	289817	289891	75.000000	-	.	Target=Q09FC8.2 1 25 +;percentID=60
+chr4-04	SwissProt	protein_match	289819	289851	41.000000	-	.	Target=Q96MU6-2.2 1 11 +;percentID=72
+chr4-04	SwissProt	protein_match	289819	289908	106.000000	-	.	Target=P08042-2.3 4 33 +;percentID=66
+chr4-04	SwissProt	protein_match	289819	289923	110.000000	-	.	Target=Q8BPP0.1 1 35 +;percentID=57
+chr4-04	SwissProt	protein_match	289819	289935	82.000000	-	.	Target=O14978.2 218 256 +;percentID=43;sequence=MASGPGSQEREGLLIVKLEEDCAWSQELPPPDPGPSPEASHLRFRRFRFQEAAGPREALSRLQELCHGWLRPEMRTKEQILELLVLEQFLTILPQEIQSRVQELHPESGEEAVTLVEDMQRELGRLRQQVTNHGRGTEVLLEEPLPLETARESPSFKLEPMETERSPGPRLQELLGPSPQRDPQAVKERALSAPWLSLFPPEGNMEDKEMTGPQLPESLEDVAMYISQEEWGHQDPSKRALSRDTVQESYENVDSLESHIPSQEVPGTQVGQGGKLWDPSVQSCKEGLSPRGPAPGEEKFENLEGVPSVCSENIHPQVLLPDQARGEVPWSPELGRPHDRSQGDWAPPPEGGMEQALAGASSGRELGRPKELQPKKLHLCPLCG [...]
+chr4-04	SwissProt	protein_match	289819	289911	106.000000	-	.	Target=Q96N20.1 3 33 +;percentID=64;sequence=MYFSQEEWELLDPTQKALYNDVMQENYETVISLALFVLPKPKVISCLEQGEEPWVQVSPEFKDSAGKSPTGLKLKNDTENHQPVSLSDLEIQASAGVISKKAKVKVPQKTAGKENHFDMHRVGKWHQDFPVKKRKKLSTWKQELLKLMDRHKKDCAREKPFKCQECGKTFRVSSDLIKHQRIHTEEKPYKCQQCDKRFRWSSDLNKHLTTHQGIKPYKCSWCGKSFSQNTNLHTHQRTHTGEKPFTCHECGKKFSQNSHLIKHRRTHTGEQPYTCSICRRNFSRRSSLLRHQKLHL
+chr4-04	SwissProt	protein_match	289819	289947	123.000000	-	.	Target=Q13106.3 11 53 +;percentID=62
+chr4-04	SwissProt	protein_match	289816	289941	195.000000	-	.	Target=O14628-4.2 3 44 +;percentID=90
+chr4-04	SwissProt	protein_match	289819	289944	134.000000	-	.	Target=Q5REF1.1 46 87 +;percentID=59
+chr4-04	SwissProt	protein_match	289816	289944	220.000000	-	.	Target=Q15928.1 2 44 +;percentID=95
+chr4-04	SwissProt	protein_match	289817	289891	75.000000	-	.	Target=Q09FC8-2.2 1 25 +;percentID=60
+chr4-04	SwissProt	protein_match	289816	289932	160.000000	-	.	Target=Q8NA42.1 8 46 +;percentID=71
+chr4-04	SwissProt	protein_match	289816	289944	210.000000	-	.	Target=Q3SXZ3.1 2 44 +;percentID=90
+chr4-04	SwissProt	protein_match	289816	289947	172.000000	-	.	Target=Q8N9Z0.2 21 64 +;percentID=77
+chr4-04	SwissProt	protein_match	289819	289947	125.000000	-	.	Target=Q9C0F3.2 11 53 +;percentID=55;sequence=MAATLLMAGSQAPVTFEDMAMYLTREEWRPLDAAQRDLYRDVMQENYGNVVSLDFEIRSENEVNPKQEISEDVQFGTTSERPAENAEENPESEEGFESGDRSERQWGDLTAEEWVSYPLQPVTDLLVHKEVHTGIRYHICSHCGKAFSQISDLNRHQKTHTGDRPYKCYECGKGFSRSSHLIQHQRTHTGERPYDCNECGKSFGRSSHLIQHQTIHTGEKPHKCNECGKSFCRLSHLIQHQRTHSGEKPYECEECGKSFSRSSHLAQHQRTHTGEKPYECNECGRGFSERSDLIKHYRVHTGERPYKCDECGKNFSQNSDLVRHRRAHTGEKPYHCNECGENFSRISHLVQHQRTHTGEKPYECNACGKSFSRSSHLITHQKIHT [...]
+chr4-04	SwissProt	protein_match	289816	289947	199.000000	-	.	Target=O14628-6.2 5 48 +;percentID=88
+chr4-04	SwissProt	protein_match	289816	289938	168.000000	-	.	Target=A8MXY4.2 25 65 +;percentID=78
+chr4-04	SwissProt	protein_match	289816	289941	194.000000	-	.	Target=Q05481.1 12 53 +;percentID=88
+chr4-04	SwissProt	protein_match	289816	289938	134.000000	-	.	Target=P51814-6.2 27 67 +;percentID=58
+chr4-04	SwissProt	protein_match	289819	289956	140.000000	-	.	Target=Q9NU63.2 10 55 +;percentID=52;sequence=MAAGEPRSLLFFQKPVTFEDVAVNFTQEEWDCLDASQRVLYQDVMSETFKNLTSVARIFLHKPELITKLEQEEEQWRETRVLQASQAGPPFFCYTCGKCFSRRSYLYSHQFVHNPKLTNSCSQCGKLFRSPKSLSYHRRMHLGERPFCCTLCDKTYCDASGLSRHRRVHLGYRPHSCSVCGKSFRDQSELKRHQKIHQNQEPVDGNQECTLRIPGTQAEFQTPIARSQRSIQGLLDVNHAPVARSQEPIFRTEGPMAQNQASVLKNQAPVTRTQAPITGTLCQDARSNSHPVKPSRLNVFCCPHCSLTFSKKSYLSRHQKAHLTEPPNYCFHCSKSFSSFSRLVRHQQTHWKQKSYLCPICDLSFGEKEGLMDHWRGYKGKDLCQ [...]
+chr4-04	SwissProt	protein_match	289816	289938	178.000000	-	.	Target=Q5JVG8.1 4 44 +;percentID=85
+chr4-04	SwissProt	protein_match	289816	289938	178.000000	-	.	Target=Q86V71.2 4 44 +;percentID=82
+chr4-04	SwissProt	protein_match	289816	289938	178.000000	-	.	Target=Q14593.3 37 77 +;percentID=80
+chr4-04	SwissProt	protein_match	289819	289947	129.000000	-	.	Target=Q6ZNG0.1 8 50 +;percentID=58
+chr4-04	SwissProt	protein_match	289816	290055	167.000000	-	.	Target=Q8N988-2.2 4 83 +;percentID=46
+chr4-04	SwissProt	protein_match	289819	289947	132.000000	-	.	Target=P08042.3 4 46 +;percentID=55
+chr4-04	SwissProt	protein_match	289819	289944	141.000000	-	.	Target=Q5RBX0.1 2 43 +;percentID=59
+chr4-04	SwissProt	protein_match	289819	289944	141.000000	-	.	Target=Q96GC6-2.1 12 53 +;percentID=61
+chr4-04	SwissProt	protein_match	289819	289950	146.000000	-	.	Target=Q8N587.2 37 80 +;percentID=59
+chr4-04	SwissProt	protein_match	289819	289938	141.000000	-	.	Target=P16374.2 14 53 +;percentID=60
+chr4-04	SwissProt	protein_match	289819	289947	146.000000	-	.	Target=Q9UL58.1 161 203 +;percentID=67;sequence=MQPLSKLMAISKPRNLSLREQREVLRADMSWQQETNPVVETHDSEASRQKFRHFQYLKVSGPHEALSQLWELCLQWLRPEIHTKKQIIELLVLEQFLAILPEEVRTWVNLQHPNNSKDMVTLIEDVIEMLEDEDMPCKDSALQMGSIKEKMKAGSRTGKPQEPVTFKDVVVEFSKEEWGQLDSAVKNLYRNVMLENFRNLNSLRKAHLLSKPFESLKLESKKKRWIMEKEIPRKTIFDMKSISGEESSHGVIMTRLTESGHPSSDAWKGENWLYRNQKKWDINLPQEAFIPETIYTEEEDFECSENKKSFDINSVSSICAIQLGIPSRKGSPKCDKFKTYFKFNLDSVGKQHSEYEYGNDLSLSTDIRHQKSHTTMNSYECYQ [...]
+chr4-04	SwissProt	protein_match	289819	289941	153.000000	-	.	Target=Q6JLC9.1 5 45 +;percentID=70
+chr4-04	SwissProt	protein_match	289816	289944	223.000000	-	.	Target=Q8IYB9.1 2 44 +;percentID=95
+chr4-04	SwissProt	protein_match	289819	289953	157.000000	-	.	Target=Q9BR84.1 9 53 +;percentID=60
+chr4-04	SwissProt	protein_match	289819	289947	156.000000	-	.	Target=P59923.1 231 273 +;percentID=67;sequence=MPPGRWHAAYPAQAQSSRERGRLQTVKKEEEDESYTPVQAARPQTLNRPGQELFRQLFRQLRYHESSGPLETLSRLRELCRWWLRPDVLSKAQILELLVLEQFLSILPGELRVWVQLHNPESGEEAVALLEELQRDLDGTSWRDPGPAQSPDVHWMGTGALRSAQIWSLASPLRSSSALGDHLEPPYEIEARDFLAGQSDTPAAQMPALFPREGCPGDQVTPTRSLTAQLQETMTFKDVEVTFSQDEWGWLDSAQRNLYRDVMLENYRNMASLVGPFTKPALISWLEAREPWGLNMQAAQPKGNPVAAPTGDDLQSKTNKFILNQEPLEEAETLAVSSGCPATSVSEGIGLRESFQQKSRQKDQCENPIQVRVKKEETNFSHR [...]
+chr4-04	SwissProt	protein_match	289816	289947	168.000000	-	.	Target=Q9P2J8.3 51 94 +;percentID=65
+chr4-04	SwissProt	protein_match	289819	289956	160.000000	-	.	Target=Q8R2V3.2 213 258 +;percentID=63
+chr4-04	SwissProt	protein_match	289819	289947	156.000000	-	.	Target=Q5REA0.1 3 45 +;percentID=69;sequence=MAQGLVTFADVAIDFSQEEWACLNSAQRDLYWDVMLENYSNLVSLDLESAYENKSLPTEKNIHEIRASKRNSDRRSKSLGRNWICEGMLERPQRSRGRYVNQMIINYVKRPATREGTPPRTHQRHHKENSFECKDCGKAFSRGYQLSQHQKIHTGEKPYECKECKKAFRWGNQLTQHQKIHTGEKPYECKDCGKAFRWGSSLVIHKRIHTGEKPYECKDCGKAFRRGDELTQHQRFHTGEKDYECKDCGKTFSRVYKLIQHKRIHSGEKPYECKDCGKAFICGSSLIQHKRIHTGEKPYECQECGKAFTRVNYLTQHQKIHTGEKPHECKECGKAFRWGSSLVKHERIHTGEKPYKCTECGKAFNCGYHLTQHERIHTGETPYKCK [...]
+chr4-04	SwissProt	protein_match	289816	289941	192.000000	-	.	Target=Q96JC4.1 15 56 +;percentID=85
+chr4-04	SwissProt	protein_match	289819	289947	156.000000	-	.	Target=Q9NQX6.1 3 45 +;percentID=69;sequence=MAQGLVTFADVAIDFSQEEWACLNSAQRDLYWDVMLENYSNLVSLDLESAYENKSLPTEKNIHEIRASKRNSDRRSKSLGRNWICEGTLERPQRSRGRYVNQMIINYVKRPATREGTPPRTHQRHHKENSFECKDCGKAFSRGYQLSQHQKIHTGEKPYECKECKKAFRWGNQLTQHQKIHTGEKPYECKDCGKAFRWGSSLVIHKRIHTGEKPYECKDCGKAFRRGDELTQHQRFHTGEKDYECKDCGKTFSRVYKLIQHKRIHSGEKPYECKDCGKAFICGSSLIQHKRIHTGEKPYECQECGKAFTRVNYLTQHQKIHTGEKPHECKECGKAFRWGSSLVKHERIHTGEKPYKCTECGKAFNCGYHLTQHERIHTGETPYKCK [...]
+chr4-04	SwissProt	protein_match	289816	289938	176.000000	-	.	Target=Q03938.2 4 44 +;percentID=82
+chr4-04	SwissProt	protein_match	289819	289947	138.000000	-	.	Target=Q16587-3.2 40 82 +;percentID=58
+chr4-04	SwissProt	protein_match	289819	289947	161.000000	-	.	Target=Q8NB42.1 11 53 +;percentID=69
+chr4-04	SwissProt	protein_match	289819	289947	170.000000	-	.	Target=Q8TAQ5.1 3 45 +;percentID=72
+chr4-04	SwissProt	protein_match	289819	289938	170.000000	-	.	Target=Q03923-2.3 4 43 +;percentID=80
+chr4-04	SwissProt	protein_match	289819	289998	164.000000	-	.	Target=A8MT65.2 20 82 +;percentID=56;Gap=M3 D1 M13 I4 M43 
+chr4-04	SwissProt	protein_match	289819	289941	174.000000	-	.	Target=Q8N7M2.3 72 112 +;percentID=78
+chr4-04	SwissProt	protein_match	289819	289941	180.000000	-	.	Target=Q5R5Q6.1 5 45 +;percentID=80
+chr4-04	SwissProt	protein_match	289819	289938	174.000000	-	.	Target=Q03936-3.2 4 43 +;percentID=82
+chr4-04	SwissProt	protein_match	289819	289947	171.000000	-	.	Target=Q86TJ5.1 42 84 +;percentID=69
+chr4-04	SwissProt	protein_match	289819	289947	200.000000	-	.	Target=Q96IR2.2 5 47 +;percentID=88
+chr4-04	SwissProt	protein_match	289819	289947	200.000000	-	.	Target=Q5VIY5.1 5 47 +;percentID=88
+chr4-04	SwissProt	protein_match	289819	289938	173.000000	-	.	Target=Q09FC8-5.2 6 45 +;percentID=80
+chr4-04	SwissProt	protein_match	289819	289947	165.000000	-	.	Target=A2VDQ7.1 3 45 +;percentID=72
+chr4-04	SwissProt	protein_match	289819	289947	200.000000	-	.	Target=Q7L2R6.2 5 47 +;percentID=88
+chr4-04	SwissProt	protein_match	289819	289947	200.000000	-	.	Target=A2RRD8.1 5 47 +;percentID=88
+chr4-04	SwissProt	protein_match	289819	289941	174.000000	-	.	Target=Q95K52.1 48 88 +;percentID=78
+chr4-04	SwissProt	protein_match	289819	289953	125.000000	-	.	Target=Q9BWM5.1 23 67 +;percentID=57;sequence=MAAAVLRDSTSVPVTAEAKLMGFTQGCVTFEDVAIYFSQEEWGLLDEAQRLLYRDVMLENFALITALVCWHGMEDEETPEQSVSVEGVPQVRTPEASPSTQKIQSCDMCVPFLTDILHLTDLPGQELYLTGACAVFHQDQKHHSAEKPLESDMDKASFVQCCLFHESGMPFTSSEVGKDFLAPLGILQPQAIANYEKPNKISKCEEAFHVGISHYKWSQCRRESSHKHTFFHPRVCTGKRLYESSKCGKACCCECSLVQLQRVHPGERPYECSECGKSFSQTSHLNDHRRIHTGERPYVCGQCGKSFSQRATLIKHHRVHTGERPYECGECGKSFSQSSNLIEHCRIHTGERPYECDECGKAFGSKSTLVRHQRTHTGEKPYECG [...]
+chr4-04	SwissProt	protein_match	289819	289944	141.000000	-	.	Target=P17097.1 2 43 +;percentID=59
+chr4-04	SwissProt	protein_match	289819	289947	200.000000	-	.	Target=Q6ZN06.2 5 47 +;percentID=88
+chr4-04	SwissProt	protein_match	289816	289941	191.000000	-	.	Target=A6NP11.3 3 44 +;percentID=85
+chr4-04	SwissProt	protein_match	289819	289941	183.000000	-	.	Target=Q7Z3V5.3 5 45 +;percentID=82
+chr4-04	SwissProt	protein_match	289855	289947	76.000000	-	.	Target=Q5R741.1 152 182 +;percentID=41;sequence=MNSSLTVQRRGSDAELGPWVMAARSKDAALSQRDGVLPVKVEEDSPGSWEPSYPAAWPDPETSRLHFRQLRYQEVAGPEEALSRLRELCRRWLRPELLSKEQILELLVLEQFLTILPEELQAWVREHCPESGEEAVAVVRALQRALDGTSPQGMVTFEDMAVSLTWEEWERLDPARRDFCRESAQKDSGSTVPPSLESRVENKELIPMQQILEEVEPQGQLQEAFQGKHPLFSKCGSTHEDRVEKQSGNPLPLKLENSAEAEGLNSISDVNKNGSIEGEDSKNNELQNSARCSNLVLCQHIPKAERPTDGEEHGNKCKQSFHMVAWHVLKPHKSDSGDSFHHSSFFETQRQLHEERPYKCGNCGKSFKQRSDLFRHQRIHTGEK [...]
+chr4-04	SwissProt	protein_match	289870	289947	52.000000	-	.	Target=Q9Z1D9.2 132 157 +;percentID=42;sequence=MAAGSGVVPPPLGAGLCTVKVEEDSPGNQESSGSGDWQNPETSRKQFRQLRYQEVAGPEEALSRLWELCRRWLRPELLSKEQIMELLVLEQFLTILPQELQAYVRDHSPESGEEAAALARTLQRALDRASPQGFMTFKDVAESLTWEEWEQLAAARKGFCEESTKDAGSTVVPGLETRTVNTDVILKQEILKEAEPQAWLQEVSQGMVPALTKCGDPSEDWEEKLPKAAVLLQLQGSEEQGRTAIPLLIGVSREERDSKNNESENSGSSVLGQHIQTAEGLGTNSQCGDDHKQGFHVKCHSVKPHSSVDSAVGLLETQRQFQEDKPYKCDSCEKGFRQRSDLFKHQRIHTGEKPYQCQECGKRFSQSAALVKHQRTHTGEKPYA [...]
+chr4-04	SwissProt	protein_match	289819	289947	125.000000	-	.	Target=Q5R5Y7.1 11 53 +;percentID=55;sequence=MAATLLMAGSQAPVTFEDMAMYLTREEWRPLDAAQRDLYRDVMQENYGNVVSLDFEIRSENEVNPKQEISEDVQFGTTSERPAENAEENPESEEGFESGDRSERQWGDLTAEEWVSYPLQQVTDLLVHKEVHTGIRYHICSHCGKAFSQISDLNRHQKTHTGDRPYKCYECGKGFSRSSHLIQHQRTYTGERPYDCNECGKSFGRSSHLIQHQTIHTGEKPHKCNECGKSFCRLSHLIQHQRTHSGEKPYECEECGKSFSRSSHLAQHQRTHTGEKPYECNECGRGFSERSDLIKHYRVHTGERPYKCDECGKNFSQNSDLVRHRRAHTGEKPYHCNECGENFSRISHLVQHQRTHTGEKPYECNACGKSFSRSSHLITHQKIHT [...]
+chr4-04	SwissProt	protein_match	290099	290131	40.000000	+	.	Target=B2RUI1.2 128 138 +;percentID=54
+chr4-04	SwissProt	protein_match	290085	290165	55.000000	+	.	Target=Q571J5.2 174 200 +;percentID=51
+chr4-04	SwissProt	protein_match	290168	290233	45.000000	+	.	Target=O88553.1 111 132 +;percentID=45
+chr4-04	SwissProt	protein_match	289816	289941	189.000000	-	.	Target=A8MUV8.3 3 44 +;percentID=83
+chr4-04	SwissProt	protein_match	289816	289938	177.000000	-	.	Target=Q08AN1.2 7 47 +;percentID=78
+chr4-04	SwissProt	protein_match	289816	289944	178.000000	-	.	Target=Q96H40.3 2 44 +;percentID=79
+chr4-04	SwissProt	protein_match	290717	290743	41.000000	+	.	Target=Q4R882.1 112 120 +;percentID=55;sequence=MATIDLSHGFFSREPVCPFEEKTKAERMVEDYLANSYQDSVTFDDVAVDFTPEEWALLDTTEKYLYRDVMLENYMNLASVEWEIQPRIKRSSFQQGFLKNQIFSGIQMTRGYSGWKLCDCKNCGEVFSEQFCLKTHMRAHNGGNTSEGNCYGKDVLSVHKEASIGQELSKFNPCGKVFTLTPGLAVHLEVLNARQPYKCKECGKGFKYFASLDNHMGIHTDEKLCEFQECERAITPSSHLKQCVAVHTGKKSKKTKKYGKSFTNFSQLYAHVKTHKGEKSFECKECGRSFRNSSCLNDHIQIHTGIKPHKCTYCGKAFTRSTQLTEHVRTHTGIKPYECKECGQAFAQYSGLSIHIRSHSGKKPYQCKECGKAFTTSTSLIQHI [...]
+chr4-04	SwissProt	protein_match	290184	290228	44.000000	+	.	Target=Q7TSH9.1 95 109 +;percentID=46
+chr4-04	SwissProt	protein_match	297596	297622	40.000000	-	.	Target=P51814-3.2 337 345 +;percentID=66
+chr4-04	SwissProt	protein_match	291510	291557	40.000000	-	.	Target=Q8TAQ5.1 320 335 +;percentID=56
+chr4-04	SwissProt	protein_match	291712	291753	41.000000	+	.	Target=Q2KI58.1 406 419 +;percentID=64
+chr4-04	SwissProt	protein_match	297596	297622	40.000000	-	.	Target=P51814-8.2 291 299 +;percentID=66
+chr4-04	SwissProt	protein_match	297709	297756	44.000000	+	.	Target=Q8TAF7.2 190 205 +;percentID=56
+chr4-04	SwissProt	protein_match	297596	297622	40.000000	-	.	Target=P51814-7.2 293 301 +;percentID=66
+chr4-04	SwissProt	protein_match	297596	297622	41.000000	-	.	Target=O43296.1 315 323 +;percentID=66
+chr4-04	SwissProt	protein_match	291507	291563	52.000000	-	.	Target=O95780-2.1 192 210 +;percentID=52
+chr4-04	SwissProt	protein_match	291712	291768	40.000000	+	.	Target=Q96NG5.1 182 200 +;percentID=47
+chr4-04	SwissProt	protein_match	298121	298144	41.000000	-	.	Target=B2KFW1-2.2 118 125 +;percentID=75
+chr4-04	SwissProt	protein_match	298646	298714	44.000000	+	.	Target=Q0VDQ9.1 42 65 +;percentID=45;Gap=M20 I1 M3 ;sequence=MDSSCLNATTKMLATAPARGNVMSTSKPLAFSIERIMARTPEPKALPVPHFLQGAVPKGDPKHSLHLNSSIPCMIPFVPVAYDTNSKAGVNGSEPRKASLEVPAPPAVAPSAPAFSCSDLLNCALSLKGDLARDALPLQQYKLVRPRVVNHSSFHAMGALCYLNRGDGPCHPAASVNIHPVASYFLSSPLHPQPKTYLAERNKLVVPAVEKLPSGVAFKDLSQAQLQHYMKESAQLLSEKIAFKTSDFSRGSPNAKPKVFTCEVCGKVFNAHYNLTRHMPVHTGARPFVCKVCGKGFRQASTLCRHKIIHTQEKPHKCNQCGKAFNRSSTLNTHTRIHAGYKPFVCEFCGKGFHQKGNYKNHKLTHSGEKQ [...]
+chr4-04	SwissProt	protein_match	298121	298144	41.000000	-	.	Target=B2KFW1.2 547 554 +;percentID=75
+chr4-04	SwissProt	protein_match	298766	298810	40.000000	-	.	Target=Q2M3W8-2.1 11 25 +;percentID=33
+chr4-04	SwissProt	protein_match	297721	297774	40.000000	+	.	Target=Q9NU63-3.2 180 197 +;percentID=44;sequence=MFEQLKPIEPVQKTLPWVGEVAATLQEAMKRDCWREARVKKKPVTFEDVAVNFTQEEWDCLDASQRVLYQDVMSETFKNLTSVARIFLHKPELITKLEQEEEQWREFVHLPNTEGLSEGKKKELREQHPSLRDEGTSDDKVFLACRGAGQCPLSAPAGTMDRTRVLQASQAGPPFFCYTCGKCFSRRSYLYSHQFVHNPKLTNSCSQCGKLFRSPKSLSYHRRMHLGERPFCCTLCDKTYCDASGLSRHRRVHLGYRPHSCSVCGKSFRDQSELKRHQKIHQNQEPVDGNQECTLRIPGTQAEFQTPIARSQRSIQGLLDVNHAPVARSQEPIFRTEGPMAQNQASVLKNQAPVTRTQAPITGTLCQDARSNSHPVKPSRLN [...]
+chr4-04	SwissProt	protein_match	291712	291753	41.000000	+	.	Target=Q5REF1.1 451 464 +;percentID=64
+chr4-04	SwissProt	protein_match	291722	291781	40.000000	-	.	Target=Q8WTR7.1 108 127 +;percentID=45
+chr4-04	SwissProt	protein_match	302526	302555	41.000000	+	.	Target=Q9NZV7.1 125 134 +;percentID=80
+chr4-04	SwissProt	protein_match	298766	298816	46.000000	+	.	Target=O14709.1 146 162 +;percentID=52
+chr4-04	SwissProt	protein_match	297596	297622	40.000000	-	.	Target=P51814-5.2 361 369 +;percentID=66
+chr4-04	SwissProt	protein_match	302547	302576	40.000000	-	.	Target=P52742.2 52 61 +;percentID=70
+chr4-04	SwissProt	protein_match	303086	303127	41.000000	+	.	Target=Q2TL60.1 105 118 +;percentID=50
+chr4-04	SwissProt	protein_match	292226	292291	44.000000	-	.	Target=A2T812.1 207 227 +;percentID=45;Gap=M17 D1 M4 
+chr4-04	SwissProt	protein_match	246579	246674	45.000000	-	.	Target=P16374.2 302 332 +;percentID=40;Gap=M15 D1 M16 
+chr4-04	SwissProt	protein_match	246717	246743	40.000000	+	.	Target=Q8N4W9.2 166 174 +;percentID=66
+chr4-04	SwissProt	protein_match	305561	305620	42.000000	-	.	Target=Q9UJW7.2 374 393 +;percentID=40
+chr4-04	SwissProt	protein_match	246857	246943	42.000000	+	.	Target=Q8WTR7.1 266 295 +;percentID=48;Gap=M5 I1 M7 D1 M7 I1 M9 
+chr4-04	SwissProt	protein_match	247333	247605	306.000000	+	.	Target=Q03923-2.3 40 129 +;percentID=62;Gap=M5 D1 M85 
+chr4-04	SwissProt	protein_match	247333	247605	309.000000	+	.	Target=Q03936-3.2 40 129 +;percentID=64;Gap=M5 D1 M85 
+chr4-04	SwissProt	protein_match	247336	247599	247.000000	+	.	Target=O14628.2 144 230 +;percentID=59;Gap=M57 D1 M30 
+chr4-04	SwissProt	protein_match	247342	247614	324.000000	+	.	Target=A6NGH9.3 42 132 +;percentID=65
+chr4-04	SwissProt	protein_match	247345	247464	101.000000	+	.	Target=Q8IW36.3 86 125 +;percentID=47
+chr4-04	SwissProt	protein_match	247345	247464	101.000000	+	.	Target=Q8IW36-2.3 86 125 +;percentID=47
+chr4-04	SwissProt	protein_match	247345	247599	242.000000	+	.	Target=O14628-5.2 124 207 +;percentID=58;Gap=M54 D1 M30 
+chr4-04	SwissProt	protein_match	247345	247599	242.000000	+	.	Target=O14628-6.2 128 211 +;percentID=58;Gap=M54 D1 M30 
+chr4-04	SwissProt	protein_match	247345	247605	296.000000	+	.	Target=P52744.2 12 98 +;percentID=65
+chr4-04	SwissProt	protein_match	302744	302794	43.000000	+	.	Target=Q6NX49.1 357 373 +;percentID=41
+chr4-04	SwissProt	protein_match	247345	247605	297.000000	+	.	Target=Q68DY1.2 75 161 +;percentID=63
+chr4-04	SwissProt	protein_match	247345	247605	301.000000	+	.	Target=O75373.2 75 161 +;percentID=65
+chr4-04	SwissProt	protein_match	247345	247614	316.000000	+	.	Target=P35789-2.4 75 166 +;percentID=67;Gap=M87 I2 M3 
+chr4-04	SwissProt	protein_match	247345	247614	316.000000	+	.	Target=P35789.4 75 166 +;percentID=67;Gap=M87 I2 M3 
+chr4-04	SwissProt	protein_match	247345	247614	316.000000	+	.	Target=P35789-3.4 75 166 +;percentID=67;Gap=M87 I2 M3 
+chr4-04	SwissProt	protein_match	247345	247605	321.000000	+	.	Target=Q05481.1 84 170 +;percentID=64
+chr4-04	SwissProt	protein_match	247345	247614	322.000000	+	.	Target=A6NK31.3 137 226 +;percentID=66
+chr4-04	SwissProt	protein_match	247345	247605	330.000000	+	.	Target=Q6ZN08.2 121 207 +;percentID=68
+chr4-04	SwissProt	protein_match	247348	247605	292.000000	+	.	Target=A8MTY0.2 76 161 +;percentID=63
+chr4-04	SwissProt	protein_match	247348	247605	308.000000	+	.	Target=O75437.3 85 170 +;percentID=66
+chr4-04	SwissProt	protein_match	247348	247605	308.000000	+	.	Target=O75437-2.3 85 170 +;percentID=66
+chr4-04	SwissProt	protein_match	247348	247614	326.000000	+	.	Target=A6NNF4.3 76 164 +;percentID=64
+chr4-04	SwissProt	protein_match	247348	247614	338.000000	+	.	Target=A8MUP4.2 37 125 +;percentID=70
+chr4-04	SwissProt	protein_match	247351	247602	243.000000	+	.	Target=P17019.3 77 155 +;percentID=55;Gap=M33 D5 M46 
+chr4-04	SwissProt	protein_match	247351	247605	254.000000	+	.	Target=Q8IYX0.1 89 172 +;percentID=62;Gap=M37 D1 M47 
+chr4-04	SwissProt	protein_match	247351	247605	264.000000	+	.	Target=Q03938.2 77 161 +;percentID=60
+chr4-04	SwissProt	protein_match	247351	247605	274.000000	+	.	Target=Q8IYN0.1 109 193 +;percentID=62
+chr4-04	SwissProt	protein_match	247351	247605	283.000000	+	.	Target=Q96N22.1 8 89 +;percentID=64;Gap=M37 D3 M45 
+chr4-04	SwissProt	protein_match	247351	247605	284.000000	+	.	Target=Q6ZMV8.1 77 161 +;percentID=61
+chr4-04	SwissProt	protein_match	247351	247614	284.000000	+	.	Target=A8MXY4.2 98 185 +;percentID=59
+chr4-04	SwissProt	protein_match	247351	247605	285.000000	+	.	Target=P17038-2.4 72 156 +;percentID=61
+chr4-04	SwissProt	protein_match	247351	247605	285.000000	+	.	Target=P17038.4 78 162 +;percentID=61
+chr4-04	SwissProt	protein_match	247351	247605	286.000000	+	.	Target=A6NK75.3 45 129 +;percentID=64
+chr4-04	SwissProt	protein_match	247351	247605	286.000000	+	.	Target=Q8N7Q3.2 45 129 +;percentID=60
+chr4-04	SwissProt	protein_match	247351	247605	287.000000	+	.	Target=Q96N38-2.1 49 133 +;percentID=63
+chr4-04	SwissProt	protein_match	247351	247605	287.000000	+	.	Target=Q96N38.1 49 133 +;percentID=63
+chr4-04	SwissProt	protein_match	247351	247605	290.000000	+	.	Target=Q9Y2Q1.1 77 161 +;percentID=64
+chr4-04	SwissProt	protein_match	247351	247605	293.000000	+	.	Target=O43345.1 77 161 +;percentID=64
+chr4-04	SwissProt	protein_match	247351	247608	294.000000	+	.	Target=Q8NEM1.2 86 171 +;percentID=66
+chr4-04	SwissProt	protein_match	247351	247614	294.000000	+	.	Target=A6NK21.3 77 164 +;percentID=62
+chr4-04	SwissProt	protein_match	247351	247614	294.000000	+	.	Target=Q86V71.2 77 164 +;percentID=60
+chr4-04	SwissProt	protein_match	247351	247605	296.000000	+	.	Target=Q8TF32.2 108 192 +;percentID=65
+chr4-04	SwissProt	protein_match	247351	247605	296.000000	+	.	Target=Q68DY1-2.2 1 85 +;percentID=63
+chr4-04	SwissProt	protein_match	297721	297774	40.000000	+	.	Target=Q9NU63.2 96 113 +;percentID=44
+chr4-04	SwissProt	protein_match	247351	247605	303.000000	+	.	Target=Q8TD23.2 77 160 +;percentID=65;Gap=M37 D1 M47 
+chr4-04	SwissProt	protein_match	247351	247605	303.000000	+	.	Target=Q03923.3 78 162 +;percentID=64
+chr4-04	SwissProt	protein_match	247351	247605	306.000000	+	.	Target=Q9P255.2 45 129 +;percentID=67
+chr4-04	SwissProt	protein_match	247351	247605	306.000000	+	.	Target=Q03936.2 77 161 +;percentID=67
+chr4-04	SwissProt	protein_match	247351	247605	306.000000	+	.	Target=Q03936-2.2 8 92 +;percentID=67
+chr4-04	SwissProt	protein_match	303442	303477	40.000000	+	.	Target=Q9P255.2 30 41 +;percentID=50
+chr4-04	SwissProt	protein_match	247351	247605	311.000000	+	.	Target=Q3SXZ3-2.1 45 127 +;percentID=71;Gap=M35 D2 M48 
+chr4-04	SwissProt	protein_match	247351	247605	311.000000	+	.	Target=Q3SXZ3.1 77 159 +;percentID=71;Gap=M35 D2 M48 
+chr4-04	SwissProt	protein_match	247351	247602	316.000000	+	.	Target=Q96H40.3 77 160 +;percentID=66
+chr4-04	SwissProt	protein_match	247351	247605	323.000000	+	.	Target=Q14593-2.3 45 129 +;percentID=71
+chr4-04	SwissProt	protein_match	247351	247605	323.000000	+	.	Target=Q14593.3 110 194 +;percentID=71
+chr4-04	SwissProt	protein_match	247351	247605	359.000000	+	.	Target=Q8TF20.2 1 85 +;percentID=78;sequence=MCSHFTQDFLPVQGIEDSFHKLILRRYEKCGHDNLQLRKGCKSMNVCKVQKGVYNGINKCLSNTQSKIFQCNARVKVFSKFANSNKDKTRHTGEKHFKCNECGKSFQKFSDLTQHKGIHAGEKPYTCEERGKDFGWYTDLNQHKKIHTGEKPYKCEECGKAFNRSTNLTAHKRIHNREKAYTGEDRDRAFGWSTNLNEYKKIHTGDKPYKCKECGKAFMHSSHLNKHEKIHTGEKPYKCKECGKVISSSSSFAKHKRIHTGEKPFKCLECGKAFNISTTLTKHRRIHTGEKPYTCEVCGKAFRQSANLYVHRRIHTGEKPYTCGECGKTFRQSANLYVHRRIHTGEKPYKCEDCGKAFGRYTALNQHKKIHTGEKPYKCEECGKAF [...]
+chr4-04	SwissProt	protein_match	300956	301000	42.000000	-	.	Target=Q06732.2 450 464 +;percentID=46
+chr4-04	SwissProt	protein_match	247351	247605	366.000000	+	.	Target=Q8IYB9.1 77 161 +;percentID=81
+chr4-04	SwissProt	protein_match	247351	247605	371.000000	+	.	Target=Q15928.1 77 161 +;percentID=80
+chr4-04	SwissProt	protein_match	247354	247605	273.000000	+	.	Target=P0CB33.1 90 173 +;percentID=63
+chr4-04	SwissProt	protein_match	305582	305647	45.000000	+	.	Target=Q7Z3V5.3 503 524 +;percentID=45
+chr4-04	SwissProt	protein_match	305582	305647	45.000000	+	.	Target=Q5R5Q6.1 502 523 +;percentID=45
+chr4-04	SwissProt	protein_match	247357	247614	238.000000	+	.	Target=O95780.1 79 166 +;percentID=57;Gap=M83 I2 M3 
+chr4-04	SwissProt	protein_match	247354	247605	279.000000	+	.	Target=A6NP11.3 78 161 +;percentID=64
+chr4-04	SwissProt	protein_match	247357	247599	241.000000	+	.	Target=O14628-4.2 79 158 +;percentID=61;Gap=M50 D1 M30 
+chr4-04	SwissProt	protein_match	247357	247614	238.000000	+	.	Target=O95780-2.1 3 90 +;percentID=57;Gap=M83 I2 M3 
+chr4-04	SwissProt	protein_match	247357	247605	247.000000	+	.	Target=A6NF79.3 91 172 +;percentID=61;Gap=M50 D1 M32 
+chr4-04	SwissProt	protein_match	247357	247599	241.000000	+	.	Target=O14628-7.2 83 162 +;percentID=61;Gap=M50 D1 M30 
+chr4-04	SwissProt	protein_match	247357	247605	252.000000	+	.	Target=Q96JC4.1 91 173 +;percentID=61
+chr4-04	SwissProt	protein_match	247357	247605	247.000000	+	.	Target=A6NKZ1.3 91 172 +;percentID=61;Gap=M50 D1 M32 
+chr4-04	SwissProt	protein_match	247357	247614	280.000000	+	.	Target=O75346.2 79 163 +;percentID=62;Gap=M9 D1 M76 
+chr4-04	SwissProt	protein_match	247357	247605	266.000000	+	.	Target=Q9H8G1.2 111 193 +;percentID=60
+chr4-04	SwissProt	protein_match	247357	247614	284.000000	+	.	Target=A6NN14.3 88 173 +;percentID=60
+chr4-04	SwissProt	protein_match	247357	247614	280.000000	+	.	Target=O75346-2.2 3 87 +;percentID=62;Gap=M9 D1 M76 
+chr4-04	SwissProt	protein_match	247357	247605	303.000000	+	.	Target=Q5JVG8.1 79 161 +;percentID=68
+chr4-04	SwissProt	protein_match	247360	247584	168.000000	+	.	Target=A8MUV8.3 80 154 +;percentID=45
+chr4-04	SwissProt	protein_match	247360	247614	281.000000	+	.	Target=Q9UII5.1 11 95 +;percentID=62
+chr4-04	SwissProt	protein_match	247360	247605	290.000000	+	.	Target=Q03924-2.3 16 97 +;percentID=67
+chr4-04	SwissProt	protein_match	305582	305650	42.000000	+	.	Target=Q6JLC9.1 385 407 +;percentID=43
+chr4-04	SwissProt	protein_match	247360	247605	290.000000	+	.	Target=Q03924.3 16 97 +;percentID=67
+chr4-04	SwissProt	protein_match	289819	289947	129.000000	-	.	Target=Q5RB33.1 8 50 +;percentID=58
+chr4-04	SwissProt	protein_match	247480	247605	137.000000	+	.	Target=Q6ZR52.3 1 42 +;percentID=64
+chr4-04	SwissProt	protein_match	247540	247605	43.000000	+	.	Target=Q5RB30.1 517 538 +;percentID=45
+chr4-04	SwissProt	protein_match	247540	247605	43.000000	+	.	Target=Q52M93.1 517 538 +;percentID=45
+chr4-04	SwissProt	protein_match	247540	247599	44.000000	+	.	Target=P51522.2 200 219 +;percentID=45
+chr4-04	SwissProt	protein_match	297721	297774	40.000000	+	.	Target=Q9NU63-2.2 160 177 +;percentID=44;sequence=MFEQLKPIEPRDCWREARVKKKPVTFEDVAVNFTQEEWDCLDASQRVLYQDVMSETFKNLTSVARIFLHKPELITKLEQEEEQWREFVHLPNTEGLSEGKKKELREQHPSLRDEGTSDDKVFLACRGAGQCPLSAPAGTMDRTRVLQASQAGPPFFCYTCGKCFSRRSYLYSHQFVHNPKLTNSCSQCGKLFRSPKSLSYHRRMHLGERPFCCTLCDKTYCDASGLSRHRRVHLGYRPHSCSVCGKSFRDQSELKRHQKIHQNQEPVDGNQECTLRIPGTQAEFQTPIARSQRSIQGLLDVNHAPVARSQEPIFRTEGPMAQNQASVLKNQAPVTRTQAPITGTLCQDARSNSHPVKPSRLNVFCCPHCSLTFSKKSYLSRH [...]
+chr4-04	SwissProt	protein_match	247540	247599	44.000000	+	.	Target=P51522-2.2 40 59 +;percentID=45
+chr4-04	SwissProt	protein_match	305582	305650	47.000000	+	.	Target=Q86YE8-3.3 161 183 +;percentID=47;sequence=MESCSVAQAGVQWPDLSSLQPPPPRFKQFSCHSLQVAGITDLDLQCEIISYIEVPTYETDISSTQLQSIYKREKLYECKKCQKKFSSGYQLILHHRFHVIERPYECKECGKNFRSGYQLTLHQRFHTGEKPYECTECGKNFRSGYQLTVHQRFHTGEKTYECRQCGKAFIYASHIVQHERIHTGGKPYECQECGRAFSQGGHLRIHQRVHTGEKPYKCKECGKTFSRRSNLVEHGQFHTDEKPYICEKCGKAFRRGHQLTVHQRVHTGKKPYECKECGKGYTTASYFLLHQRIHKGGKPYECKECKKTFTLYRNLTRHQNIHTGEKLFECKQCGKTYTTGSKLFQHQKTHTGEKPYECKECGKAFSLYGYLKQHQKIHTGMK [...]
+chr4-04	SwissProt	protein_match	249352	249384	45.000000	+	.	Target=Q92670.2 48 58 +;percentID=45
+chr4-04	SwissProt	protein_match	249793	249828	40.000000	-	.	Target=Q96SE7.1 298 309 +;percentID=58
+chr4-04	SwissProt	protein_match	249942	250007	45.000000	-	.	Target=Q5HY98.1 154 175 +;percentID=40;sequence=MAQLRRGHLTFRDVAIEFSQEEWKCLDPVQKALYRDVMLENYRNLVSLGICLPDLSIISMMKQRTEPWTVENEMKVAKNPDRWEGIKDINTGRSCAVRSKAGNKPITNQLGLTFQLPLPELEIFQGEGKIYECNQVQKFISHSSSVSPLQRIYSGVKTHIFNKHRNDFVDFPLLSQEQKAHIRRKPYECNEQGKVFRVSSSLPNHQVIHTADKPNRCHECGKTVRDKSGLAEHWRIRTGEKPYKCKECGKLFNRIAYLARHEKVHTGESPYKCNECGKVFSRITYLVRHQKIHTREKPHKCNKCGKVYSSSSYLAQHWRIHTGEKLYKCNKCGKEFSGHSSLTTHLLIHTGEKPYKCKECDKAFRHKFSLTVHQRNHNGEKPYK [...]
+chr4-04	SwissProt	protein_match	305585	305659	45.000000	+	.	Target=Q6P9A3-2.1 434 459 +;percentID=46;Gap=M22 I1 M3 
+chr4-04	SwissProt	protein_match	249960	250001	43.000000	-	.	Target=Q08AN1.2 85 98 +;percentID=50
+chr4-04	SwissProt	protein_match	250061	250135	43.000000	+	.	Target=P17031.3 227 250 +;percentID=48;Gap=M7 D1 M17 
+chr4-04	SwissProt	protein_match	251286	251354	40.000000	-	.	Target=A8MUP4.2 471 494 +;percentID=45;Gap=M5 I1 M18 
+chr4-04	SwissProt	protein_match	251286	251354	44.000000	-	.	Target=A8MUV8.3 229 252 +;percentID=41;Gap=M5 I1 M18 
+chr4-04	SwissProt	protein_match	251286	251354	45.000000	-	.	Target=Q9NSJ1.2 392 415 +;percentID=45;Gap=M5 I1 M18 
+chr4-04	SwissProt	protein_match	305680	305709	40.000000	-	.	Target=Q9P2J8-2.3 277 286 +;percentID=70
+chr4-04	SwissProt	protein_match	251286	251354	45.000000	-	.	Target=A6NK31.3 519 542 +;percentID=45;Gap=M5 I1 M18 
+chr4-04	SwissProt	protein_match	251286	251354	45.000000	-	.	Target=A6NGH9.3 562 585 +;percentID=45;Gap=M5 I1 M18 
+chr4-04	SwissProt	protein_match	251718	251750	40.000000	-	.	Target=Q6ZN19.1 455 465 +;percentID=63
+chr4-04	SwissProt	protein_match	251316	251360	42.000000	+	.	Target=P18716.1 14 28 +;percentID=46;sequence=TGEKPFTCNECGKFFSCTSWLNVHLRSHTGEKPFTCSECGKFFSCMSRLKVHFRGHTGEKPSACTECEKCFSSISQRNIHIRSHTGDKSYTCTVCGKIFTRISQFNVHVRSHTGEKPFKCTECGKSFICNSQLNLHLRFHTGEKLTTCSECGKCFTHTSHLNVHFRVHTGEKPFTCTECGKCLTRQYQLTEHSYLHKGEKPYTCTECGKCFTRRYHLTEHSYLHTGEKPFTCTECGKGFTRRSHLKAHSHTH
+chr4-04	SwissProt	protein_match	252209	252244	40.000000	-	.	Target=Q5RES8.1 486 497 +;percentID=66
+chr4-04	SwissProt	protein_match	254104	254154	40.000000	+	.	Target=Q6GQR8.2 153 169 +;percentID=52;sequence=MEGFTREAPCFPILGDNWDCENQERNLRQSPLIDEKTEAQEANCGHVNLGEHLSTNPALLPSQRVPGTNGFHVFNSDIKTFDCDQTLHSCPPSYAVKGTADGDACEKATQPSMEATQLVRNQMREKSYKYTESVKSLNHFTTALCDKKIKKRSKRFYKGKDFGDILALSSSLNEKRSHSAEKPYKCAECGKCFKRNSSLVLHHRTHTGEKPYTCNDCGKSFSKNYNLIVHRRIHTGEKPYKCSKCGKAFSDGSALTQHQRIHTGEKPYACLDCGKTFNRNSSLILHQRTHTGEKPYRCNECGKPFTDISHLTVHLRIHTGEKPYECSRCGKAFRDGSYLTQHERTHTGEKPFECVECGKSFSRNSHLIVHQKIHSGEKPYECKE [...]
+chr4-04	SwissProt	protein_match	299029	299091	41.000000	+	.	Target=Q0VAW7-2.1 169 188 +;percentID=47;Gap=M8 D1 M12 
+chr4-04	SwissProt	protein_match	254594	254659	44.000000	+	.	Target=P61555.1 275 296 +;percentID=45;sequence=MGLLLLVLILTPLLAAYRHPDFPLLEKAQQLLQSTGSPYSTNCWLCTSSSTETPGTAYPASPREWTSIEAELHISYQWDPNLKGLMRPANSLLSTVKQDFPDIRQKPPIFGPIFTNINLMGIAPICVTAKRKNGTNVGTLPSTVCNVTFTVDPNQQTYQTYTHNQFRHQPRFPKPPNITFPQGTLLDKSTRFCQGRPSSCSTRNFWFRPADYNQCLQISNLSSTAEWVLLDQTRNSLFWENKTKGANQSQTPCVQVLAGMTIATSYLGISAVSEFFGNSLTPLFHFHISTCLKTQGAFYICGQSIHQCLPSNWTGTCTIGYVTPDIFIAPGNLSLPIPIYGKSQLPRVRRAIHFIPLLAGLGILAGTGTGIAGITKASLTYSQL [...]
+chr4-04	SwissProt	protein_match	289840	289926	65.000000	-	.	Target=Q9Z1D8.1 220 248 +;percentID=48
+chr4-04	SwissProt	protein_match	254646	254681	40.000000	-	.	Target=Q8TAF7.2 479 490 +;percentID=58
+chr4-04	SwissProt	protein_match	254646	254681	40.000000	-	.	Target=Q8TAF7-2.2 352 363 +;percentID=58
+chr4-04	SwissProt	protein_match	291507	291563	52.000000	-	.	Target=O95780.1 268 286 +;percentID=52
+chr4-04	SwissProt	protein_match	254646	254708	40.000000	-	.	Target=Q5EBM4.1 216 234 +;percentID=52;Gap=M8 D2 M11 ;sequence=MTHLTQHQTTHTREKFHECSECGKAFSRVSALIDHQRIHSGEKPYECKECGRAFTQSAQLIRHQKTHSGEKPYECSKCKKSFVHLSSLIEHWRIHTGEKPYQCKDCKKTFCRVMQFTLHRRIHTGEKPYECKECGKSFSAHSSLVTHKRTHSGEKPYKCKECGKAFSAHSSLVTHKRTHSGEKPYTCHACGKAFNTSSTLCQHNRIHTGEKPFQCSQCGKSFSCSSHLTRHCRMCNGKFSK
+chr4-04	SwissProt	protein_match	289819	289947	131.000000	-	.	Target=O14709.1 214 256 +;percentID=58
+chr4-04	SwissProt	protein_match	255656	255694	43.000000	+	.	Target=Q8N184-2.3 67 79 +;percentID=61
+chr4-04	SwissProt	protein_match	255656	255694	43.000000	+	.	Target=Q8N184.3 67 79 +;percentID=61
+chr4-04	SwissProt	protein_match	255661	255711	42.000000	+	.	Target=Q0D2J5.2 294 310 +;percentID=52
+chr4-04	SwissProt	protein_match	255735	255761	42.000000	+	.	Target=A2VDP4.1 225 233 +;percentID=77
+chr4-04	SwissProt	protein_match	255914	255940	40.000000	+	.	Target=Q9BWM5.1 229 237 +;percentID=55
+chr4-04	SwissProt	protein_match	255931	255954	42.000000	+	.	Target=Q6P9A1.2 394 401 +;percentID=75
+chr4-04	SwissProt	protein_match	306740	306805	47.000000	+	.	Target=Q5T5D7.1 119 140 +;percentID=40
+chr4-04	SwissProt	protein_match	256785	256874	48.000000	+	.	Target=Q8IW36.3 140 169 +;percentID=41;Gap=M18 D1 M4 I1 M7 
+chr4-04	SwissProt	protein_match	306815	306916	58.000000	-	.	Target=A6NDX5.5 193 219 +;percentID=44;Gap=M17 D7 M10 
+chr4-04	SwissProt	protein_match	256937	256987	41.000000	+	.	Target=Q8NB42.1 441 457 +;percentID=47
+chr4-04	SwissProt	protein_match	309913	309948	45.000000	-	.	Target=Q96MU6-2.2 156 167 +;percentID=50
+chr4-04	SwissProt	protein_match	257376	257423	40.000000	+	.	Target=Q8TAF7.2 185 200 +;percentID=43
+chr4-04	SwissProt	protein_match	257157	257213	42.000000	-	.	Target=P17035.4 306 323 +;percentID=57;Gap=M7 D1 M11 ;sequence=MALPQGLLTFRDVAIEFSQEEWKCLDPAQRTLYRDVMLENYRNLVSLDISSKCMMKTFFSTGQGNTEAFHTGTLQRQASHHIGDFCFQKIEKDIHGFQFQWKEDETNDHAAPMTEIKELTGSTGQHDQRHAGNKHIKDQLGLSFHSHLPELHIFQPEGKIGNQVEKSINNASSVSTSQRICCRPKTHISNKYGNNSLHSSLLTQKRNVHMREKSFQCIESGKSFNCSSLLKKHQITHLEEKQCKCDVYGKVFNQKRYLACHRRSHIDEKPYKCNECGKIFGHNTSLFLHKALHTADKPYECEECDKVFSRKSHLETHKIIYTGGKPYKCKVCDKAFTCNSYLAKHTIIHTGEKPYKCNECGKVFNRLST [...]
+chr4-04	SwissProt	protein_match	256842	256907	43.000000	+	.	Target=Q9IAJ2.1 102 123 +;percentID=45;sequence=MDSSLQHSTTKILSTQESREALSNRLTMISGAKPLAFSIERIMSRTPEPKCLPVASLLQSSAPKGDQKPGLHINSSSIPRMIPFVPVAYEHCAKIGISGAELRKSHVDSSPPFSCSDLLNCALTLKGDFPREALPLQQYKLVRPRVVNHSSFHAMGAAFCYFNRGDSEWHPPASINIHPMASYFLGSPLHQAPKCYVAAERNKLLAPSVEKFPSGVTFKDLSQAQFQHYMKEGPRSLSDKITFKTSAKFSSASPSSKPKVFTCEVCGKVFNAHYNLTRHMPVHTGARPFVCKICGKGFRQASTLCRHKIIHTQEKPHKCNQCGKAFNRSSTLNTHTRIHAGYKPFVCEFCGKGFHQKGNYKNHKLTHSGEKQFKCNICNKAFHQ [...]
+chr4-04	SwissProt	protein_match	257376	257423	40.000000	+	.	Target=Q8TAF7-2.2 58 73 +;percentID=43
+chr4-04	SwissProt	protein_match	257434	257463	40.000000	+	.	Target=A6NDX5.5 646 657 +;percentID=58;Gap=M7 I2 M3 
+chr4-04	SwissProt	protein_match	257461	257994	289.000000	+	.	Target=P61557.1 320 504 +;percentID=41;Gap=M24 I2 M18 I1 M50 I1 M5 I3 M81 ;sequence=MGLLLLVLILTPSLAAYRHPDFPLLEKAQQLLQSTGSPYSTNCWLCTSSSTETPGTAYPASPREWTSIEAELHISYRWDPNLKGLMRPANSLLSMVKQDFPDIRQKPPIFGPIFTNINLMGIAPICVMAKRKNGTNVGTLPSTVCNVTFTVDSNQQTYQTYTHNQFRHQPRFPKPPNITFPQGTLLDKSSRFCQGRPSSCSTRNFWFRPADYNQCLQISNLSSTAEWVLLDQTRNSLFWENKTKGANQSQTPCVQVLAGMTIATSYLGISAVSEFFGTSLTPLFHFHISTCLKTQGAFYICGQSIHQCLPSNWTGTCTIGYVTPDIFIAPGNLSLPIPIYGNSQLPR [...]
+chr4-04	SwissProt	protein_match	257461	257994	293.000000	+	.	Target=P61558.1 320 504 +;percentID=42;Gap=M24 I2 M18 I1 M50 I1 M5 I3 M81 ;sequence=MGLLLLVLILTPLLAAHRHPDFPLLEKAQQLLQSTGSPYSTNCWLCTSSSTETPGTAYPASPREWTSIEAELHISYHWDPNLKGLMRPANSLLSTVKQDFPDIRQKPPIFGPIFTNINLMGIAPICVTAKRKNGTNVGTLPSTVCNVTFTVDPNQQTYQTYTHKQFLHQPRFPKPPNITFPQGTLLDKSTRFCQGRPSSCSTRNFWFRPADYNQCLQISNLSSTAEWVLLDQTRNSLFWENKTKGANQSQTPCVQVLAGMTIATSYLGISAVSEFFGTSLTPLFHFHISTCLKTQGAFYICGQSIHQCLPSNWTGTCTIGYVTPDIFIAPGNISLPIPIYGNSQLPR [...]
+chr4-04	SwissProt	protein_match	257461	257994	289.000000	+	.	Target=P61554.1 320 504 +;percentID=41;Gap=M24 I2 M18 I1 M50 I1 M5 I3 M81 ;sequence=MGLLLLVLILTPSLAAYRHPDFPLLEKAQQLLQSTGSPYSTNCWLCTSSSTETPGTAYPASPREWTSIEAELHISYRWDPNLKGLMRPANSLLSTVKQDFPDIRQKPPIFGPIFTNINLMGIAPICVTAKRKNGTNVGTLPSTVCNVTFTVDSNQQTYQTYTHNQFRHQPRFPKPPNITFPQGTLLDKSSRFCQGRPSSCSTRNFWFRPADYNQCLQISNLSSTAEWVLLDQTRNSLFWENKTKGANQSQTPCVQVLAGMTIATSYLGISAVSEFFGTSLTPLFHFHISTCLKTQGAFYICGQLIHQCLPSNWTGTCTIGYVTPDIFIAPGNLSLPIPIYGNSQLPR [...]
+chr4-04	SwissProt	protein_match	257461	257994	294.000000	+	.	Target=P61553.1 320 504 +;percentID=42;Gap=M21 I2 M23 I1 M48 I1 M5 I3 M81 ;sequence=MGLLLLLLILTPLLAAYCHPDFRLLEKAQQLLQSTGSPYSTNCWLCTSSSSKTPGRAYPASSREWTTIEAELHISYQWDPNLKGLIRLANSLLSKVKQDFPDIRKEPPIFGPIFTNVNLIGIAPICVTAKRKDGTNVGTLPSTVCNVTLTVDPNQQTYQKYAHNQFHHQPRFPKPPNITFPQGTLLDKSTRFCQGRPSSCSTRNFWFQPADYNQCLQIPNLSSTAEWVLLDQTRNSLFWENKTKGANQSQTPCVQVLAGMTIATSYLSTSAVSEFSGTSVTSLFSFHISTCLKTQGAFYICGQSIHQCLPTNWTGTCTIGYVSPDIFIAPGNLSLPIPIYGNFHFPR [...]
+chr4-04	SwissProt	protein_match	305582	305653	42.000000	+	.	Target=P16374.2 401 424 +;percentID=41
+chr4-04	SwissProt	protein_match	257461	257994	294.000000	+	.	Target=P60508.1 320 504 +;percentID=42;Gap=M25 I1 M4 I1 M13 I1 M50 I1 M5 I3 M81 ;sequence=MGLLLLVLILTPSLAAYRHPDFPLLEKAQQLLQSTGSPYSTNCWLCTSSSTETPGTAYPASPREWTSIEAELHISYRWDPNLKGLMRPANSLLSTVKQDFPDIRQKPPIFGPIFTNINLMGIAPICVMAKRKNGTNVGTLPSTVCNVTFTVDSNQQTYQTYTHNQFRHQPRFPKPPNITFPQGTLLDKSSRFCQGRPSSCSTRNFWFRPADYNQCLQISNLSSTAEWVLLDQTRNSLFWENKTKGANQSQTPCVQVLAGMTIATSYLGISAVSEFFGTSLTPLFHFHISTCLKTQGAFYICGQSIHQCLPSNWTGTCTIGYVTPDIFIAPGNLSLPIPIYG [...]
+chr4-04	SwissProt	protein_match	299447	299506	48.000000	-	.	Target=P08042.3 72 93 +;percentID=54;Gap=M9 I2 M11 
+chr4-04	SwissProt	protein_match	257461	257994	296.000000	+	.	Target=P61555.1 320 504 +;percentID=42;Gap=M24 I2 M18 I1 M50 I1 M5 I3 M81 
+chr4-04	SwissProt	protein_match	257461	257994	299.000000	+	.	Target=P61556.1 320 504 +;percentID=42;Gap=M24 I2 M18 I1 M50 I1 M5 I3 M81 ;sequence=MGLLLLVLILTPLLAAYRHPDFPLLEKAQQLLQSTGSPYSTNCWLCTSSSTETPGTAYPASPREWTSIEAELHISYQWDPNLKGLMTPANSLLSTVKQDFPDIRQKPPIFGPIFTNINLMGKAPICVTAKRKNGTNVGTLPSTVCNVTFTVDPNQQTYQTYTHNQFRHQPRFPKPPNITFPQGTLLDKSTQFCQGRPSSCRTRNFWFRPADYNQCLQIPNLSSPAEWVLLDQTRNSLFWENKTKGANQSQTPCIQVLAGMTIATSYLGISPVSEFFGTSLTPLFHFHISTCLKTQGAFYICGQSIHQCLPTNWTGTCTIGYVTPDIFIAPGNLSLPIPIYGNSQLPR [...]
+chr4-04	SwissProt	protein_match	298029	298103	42.000000	+	.	Target=Q494X3.1 97 119 +;percentID=44;Gap=M20 D2 M3 
+chr4-04	SwissProt	protein_match	257546	257593	40.000000	-	.	Target=Q96MR9.2 422 437 +;percentID=43
+chr4-04	SwissProt	protein_match	257546	257593	41.000000	-	.	Target=Q8R2V3.2 951 966 +;percentID=50
+chr4-04	SwissProt	protein_match	257785	257886	49.000000	+	.	Target=P17035.4 519 548 +;percentID=41;Gap=M4 D1 M13 D3 M13 
+chr4-04	SwissProt	protein_match	257785	257886	58.000000	+	.	Target=Q9NV72.1 406 435 +;percentID=44;Gap=M4 D1 M13 D3 M13 
+chr4-04	SwissProt	protein_match	257818	257883	40.000000	+	.	Target=P51786.2 108 129 +;percentID=40
+chr4-04	SwissProt	protein_match	257839	257886	44.000000	+	.	Target=Q6ZN06.2 502 520 +;percentID=47;Gap=M3 I3 M13 
+chr4-04	SwissProt	protein_match	259105	259167	45.000000	+	.	Target=Q8R2V3.2 791 811 +;percentID=42
+chr4-04	SwissProt	protein_match	259111	259167	41.000000	+	.	Target=Q5CZA5.2 198 216 +;percentID=42
+chr4-04	SwissProt	protein_match	259126	259164	43.000000	+	.	Target=Q9BS34.1 85 97 +;percentID=69
+chr4-04	SwissProt	protein_match	259233	259283	40.000000	+	.	Target=P17035-2.4 197 213 +;percentID=35;sequence=MMKTFFSTGQGNTEAFHTGTLQRQASHHIGDFCFQKIEKDIHGFQFQWKEDETNDHAAPMTEIKELTGSTGQHDQRHAGNKHIKDQLGLSFHSHLPELHIFQPEGKIGNQVEKSINNASSVSTSQRICCRPKTHISNKYGNNSLHSSLLTQKRNVHMREKSFQCIESGKSFNCSSLLKKHQITHLEEKQCKCDVYGKVFNQKRYLACHRRSHIDEKPYKCNECGKIFGHNTSLFLHKALHTADKPYECEECDKVFSRKSHLETHKIIYTGGKPYKCKVCDKAFTCNSYLAKHTIIHTGEKPYKCNECGKVFNRLSTLARHRRLHTGEKPYECEECEKVFSRKSHLERHKRIHTGEKPYKCKVCDKAFAYNSYLAKHSIIHTG [...]
+chr4-04	SwissProt	protein_match	259233	259280	43.000000	+	.	Target=Q8N4W9.2 742 757 +;percentID=50
+chr4-04	SwissProt	protein_match	311311	311382	44.000000	+	.	Target=Q14590.3 229 252 +;percentID=41
+chr4-04	SwissProt	protein_match	260130	260180	47.000000	+	.	Target=A6NDX5.5 300 315 +;percentID=52;Gap=M8 D1 M8 
+chr4-04	SwissProt	protein_match	311382	311414	43.000000	-	.	Target=Q8NDW4.1 138 148 +;percentID=54
+chr4-04	SwissProt	protein_match	311388	311468	50.000000	-	.	Target=Q9BUY5.1 127 152 +;percentID=44;Gap=M11 D1 M15 
+chr4-04	SwissProt	protein_match	311388	311468	59.000000	-	.	Target=Q8R1D1.1 124 150 +;percentID=48
+chr4-04	SwissProt	protein_match	311388	311468	62.000000	-	.	Target=A1L1L7.1 125 151 +;percentID=48
+chr4-04	SwissProt	protein_match	311395	311442	40.000000	+	.	Target=Q96JL9.3 165 180 +;percentID=43
+chr4-04	SwissProt	protein_match	311397	311453	45.000000	-	.	Target=Q6V9R5-2.2 40 58 +;percentID=47;sequence=MSAFDMSHDFFFCLTSEWEIQPRTKRSSLQQGFLKNQIFTGIQMQTRSYSGWKLCENCGEVFSEQFCLKTHMRAQNGGNTFEGNCYGKDSISVHKEASIGQELSKFNPCGKVFTLTPGLAVHLEILNGRQPYKCKECGKGFKYFASLDNHMGIHIGEKLCEFQECERAITTSSHLKQCVAVHTGKKSEKTKNCGKSFTNFSQLSAHAKTHKGEKSFECKECGRSFRNSSSFNVHIQIHTGIKPHKCTECGKAFTRSTHLTQHVRTHTGIKPYECKECGQAFTQYTGLAIHIRNHTGEKPYQCKECGKAFNRSSTLTQHRRIHTGEKPYECVECGKTFITSSHRSKHLKTHSGER
+chr4-04	SwissProt	protein_match	311627	311659	41.000000	-	.	Target=Q86TJ5.1 255 265 +;percentID=63
+chr4-04	SwissProt	protein_match	312017	312049	41.000000	-	.	Target=Q9BS34.1 114 124 +;percentID=63
+chr4-04	SwissProt	protein_match	262289	262351	50.000000	+	.	Target=Q9BX82.1 187 207 +;percentID=47
+chr4-04	SwissProt	protein_match	260537	260587	41.000000	+	.	Target=Q96NI8.1 202 218 +;percentID=47
+chr4-04	SwissProt	protein_match	260565	260621	41.000000	-	.	Target=Q7Z2F6.1 95 111 +;percentID=42;Gap=M3 D2 M14 
+chr4-04	SwissProt	protein_match	262139	262177	41.000000	-	.	Target=Q2M218.1 588 600 +;percentID=61
+chr4-04	SwissProt	protein_match	262764	262838	52.000000	-	.	Target=Q8NDP4.1 468 492 +;percentID=40
+chr4-04	SwissProt	protein_match	262684	262746	48.000000	-	.	Target=Q8IYN0.1 200 220 +;percentID=47
+chr4-04	SwissProt	protein_match	262699	262758	40.000000	-	.	Target=A8MTY0.2 161 180 +;percentID=40
+chr4-04	SwissProt	protein_match	262746	262838	61.000000	-	.	Target=Q3KQV3-2.2 497 527 +;percentID=35
+chr4-04	SwissProt	protein_match	262764	262838	53.000000	-	.	Target=Q5JVG2.1 442 466 +;percentID=44
+chr4-04	SwissProt	protein_match	262755	262841	65.000000	-	.	Target=P51522.2 486 514 +;percentID=41
+chr4-04	SwissProt	protein_match	262755	262841	65.000000	-	.	Target=P51522-2.2 326 354 +;percentID=41
+chr4-04	SwissProt	protein_match	262764	262853	62.000000	-	.	Target=Q03923-2.3 138 167 +;percentID=40
+chr4-04	SwissProt	protein_match	262764	262853	62.000000	-	.	Target=Q03923.3 171 200 +;percentID=40
+chr4-04	SwissProt	protein_match	262764	262841	59.000000	-	.	Target=Q14586.2 268 293 +;percentID=42
+chr4-04	SwissProt	protein_match	262764	262838	60.000000	-	.	Target=Q08ER8.2 537 561 +;percentID=44
+chr4-04	SwissProt	protein_match	262764	262853	64.000000	-	.	Target=Q9H8G1.2 202 231 +;percentID=40
+chr4-04	SwissProt	protein_match	262764	262841	65.000000	-	.	Target=O43296.1 540 565 +;percentID=42
+chr4-04	SwissProt	protein_match	262764	262841	63.000000	-	.	Target=Q16670-2.2 298 322 +;percentID=46;Gap=M20 D1 M5 ;sequence=MAPLKGVQEQQVRHECEVTKPEKEKGEETRIENGKLIVVTDSCGRVESSGKISEPMEAHNEGSNLERHQAKPKEKIEYKCSEREQRFIQHLDLIEHASTHTGKKLCESDVCQSSSLTGHKKVLSREKGHQCHECGKAFQRSSHLVRHQKIHLGEKPYQCNECGKVFSQNAGLLEHLRIHTGEKPYLCIHCGKNFRRSSHLNRHQRIHSQEEPCECKECGKTFSQALLLTHHQRIHSHSKSHQCNECGKAFSLTSDLIRHHRIHTGEKPFKCNICQKAFRLNSHLAQHVRIHNEEKPYQCSECGEAFRQRSGLFQHQRYHHKDKLA
+chr4-04	SwissProt	protein_match	262767	262832	56.000000	-	.	Target=Q8IYN0.1 517 538 +;percentID=45
+chr4-04	SwissProt	protein_match	262767	262853	56.000000	-	.	Target=P51814-4.2 630 658 +;percentID=41
+chr4-04	SwissProt	protein_match	262767	262841	60.000000	-	.	Target=Q9UJW7.2 657 681 +;percentID=48
+chr4-04	SwissProt	protein_match	313873	313911	41.000000	+	.	Target=Q95K52.1 129 140 +;percentID=69;Gap=M2 D1 M10 
+chr4-04	SwissProt	protein_match	262767	262841	58.000000	-	.	Target=Q68DY1-2.2 182 206 +;percentID=40
+chr4-04	SwissProt	protein_match	262767	262841	65.000000	-	.	Target=Q53GI3.2 526 550 +;percentID=48;sequence=MNSSLTAQRRGSDAELGPWVMAARSKDAAPSQRDGLLPVKVEEDSPGSWEPNYPAASPDPETSRLHFRQLRYQEVAGPEEALSRLRELCRRWLRPELLSKEQILELLVLEQFLTILPEELQAWVREHCPESGEEAVAVVRALQRALDGTSSQGMVTFEDTAVSLTWEEWERLDPARRDFCRESAQKDSGSTVPPSLESRVENKELIPMQQILEEAEPQGQLQEAFQGKRPLFSKCGSTHEDRVEKQSGDPLPLKLENSPEAEGLNSISDVNKNGSIEGEDSKNNELQNSARCSNLVLCQHIPKAERPTDSEEHGNKCKQSFHMVTWHVLKPHKSDSGDSFHHSSLFETQRQLHEERPYKCGNCGKSFKQRSDLFRHQRIHTGEK [...]
+chr4-04	SwissProt	protein_match	262767	262841	65.000000	-	.	Target=Q9NV72.1 439 463 +;percentID=40
+chr4-04	SwissProt	protein_match	262767	262841	58.000000	-	.	Target=Q68DY1.2 258 282 +;percentID=40
+chr4-04	SwissProt	protein_match	262764	262853	71.000000	-	.	Target=Q8TF32.2 201 230 +;percentID=43
+chr4-04	SwissProt	protein_match	262767	262841	65.000000	-	.	Target=A1YG48.1 526 550 +;percentID=48;sequence=MNSSLTAQRRGSDAELGPWVMAARSKDAAPSQRDGLLPVKVEEDSLGSWEPSYPAASPDPETSRLHFRQLRYQEVAGPEEALSRLRELCRRWLRPELLSKEQILELLVLEQFLTILPEELQAWVREHCPESGEEAVAVVRALQRALDGTSSQGMVTFEDMAVSLTWEEWERLDPARSDFCRESAQKDSGSTVPPSLESRVENKELIPVQQILEEAEPQGRLQEAFQGKRPLFSKCVSTHEDRVEKQSGDPLPLKLENSPEAEGFNSISDVNKNGSIEGEDSKNNELQNSARCSNLVLCQHIPKAERPTDSEEHGNKCKQSFHMVTWHVLKPHKSDSGDSFHHSSLFETQRQLHEERPYKCGNCGKSFKQRSDLFRHQRIHTGEK [...]
+chr4-04	SwissProt	protein_match	314170	314202	40.000000	+	.	Target=Q95K52.1 290 300 +;percentID=54
+chr4-04	SwissProt	protein_match	314170	314202	40.000000	+	.	Target=Q494X3.1 238 248 +;percentID=54
+chr4-04	SwissProt	protein_match	314170	314202	40.000000	+	.	Target=Q8N7M2.3 314 324 +;percentID=54
+chr4-04	SwissProt	protein_match	262767	262844	70.000000	-	.	Target=A6NF79.3 324 349 +;percentID=42
+chr4-04	SwissProt	protein_match	262767	262844	74.000000	-	.	Target=A6NKZ1.3 324 349 +;percentID=46
+chr4-04	SwissProt	protein_match	262767	262841	67.000000	-	.	Target=Q9HCG1.2 706 730 +;percentID=48
+chr4-04	SwissProt	protein_match	262767	262841	65.000000	-	.	Target=Q5R741.1 526 550 +;percentID=48
+chr4-04	SwissProt	protein_match	262770	262838	56.000000	-	.	Target=Q96GC6-3.1 516 538 +;percentID=47
+chr4-04	SwissProt	protein_match	262770	262838	56.000000	-	.	Target=Q96GC6.1 621 643 +;percentID=47
+chr4-04	SwissProt	protein_match	262767	262841	74.000000	-	.	Target=A6NF35.2 551 575 +;percentID=48
+chr4-04	SwissProt	protein_match	262770	262838	55.000000	-	.	Target=P10077.2 347 369 +;percentID=47
+chr4-04	SwissProt	protein_match	262767	262844	70.000000	-	.	Target=Q96JC4.1 325 350 +;percentID=42
+chr4-04	SwissProt	protein_match	262770	262838	62.000000	-	.	Target=Q13106.3 415 437 +;percentID=52
+chr4-04	SwissProt	protein_match	262770	262838	56.000000	-	.	Target=Q96GC6-2.1 589 611 +;percentID=47
+chr4-04	SwissProt	protein_match	262770	262838	56.000000	-	.	Target=Q96GC6-4.1 340 362 +;percentID=47
+chr4-04	SwissProt	protein_match	262770	262838	58.000000	-	.	Target=Q5RB30.1 300 322 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262841	48.000000	-	.	Target=Q7Z7L9.1 558 579 +;percentID=45;sequence=MMAADIPRVTTPLSSLVQVPQEEDRQEEEVTTMILEDDSWVQEAVLQEDGPESEPFPQSAGKGGPQEEVTRGPQGALGRLRELCRRWLRPEVHTKEQMLTMLPKEIQAWLQEHRPESSEEAAALVEDLTQTLQDNFEIQSENGENCNQDMFENESRKIFSEMPEGESAQHSDGESDFERDAGIQRLQGHSPGEDHGEVVSQDREVGQLIGLQGTYLGEKPYECPQCGKTFSRKSHLITHERTHTGEKYYKCDECGKSFSDGSNFSRHQTTHTGEKPYKCRDCGKSFSRSANLITHQRIHTGEKPFQCAECGKSFSRSPNLIAHQRTHTGEKPYSCPECGKSFGNRSSLNTHQGIHTGEKPYECKECGESFSYNSNLIRHQRIHT [...]
+chr4-04	SwissProt	protein_match	262773	262838	64.000000	-	.	Target=Q9BS34.1 367 389 +;percentID=52;Gap=M21 I1 M1 
+chr4-04	SwissProt	protein_match	262776	262835	47.000000	-	.	Target=Q8TB69.1 212 231 +;percentID=50
+chr4-04	SwissProt	protein_match	262776	262838	47.000000	-	.	Target=Q96NG5.1 210 230 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	48.000000	-	.	Target=Q9UK13.2 284 304 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262838	48.000000	-	.	Target=P52736.2 300 320 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262841	48.000000	-	.	Target=Q7Z7L9-2.1 539 560 +;percentID=45;sequence=MMAADIPRVTTPLSSLVQVPQEEDRQEEEVTTMILEDDSWVQEAVLQEEVTRGPQGALGRLRELCRRWLRPEVHTKEQMLTMLPKEIQAWLQEHRPESSEEAAALVEDLTQTLQDNFEIQSENGENCNQDMFENESRKIFSEMPEGESAQHSDGESDFERDAGIQRLQGHSPGEDHGEVVSQDREVGQLIGLQGTYLGEKPYECPQCGKTFSRKSHLITHERTHTGEKYYKCDECGKSFSDGSNFSRHQTTHTGEKPYKCRDCGKSFSRSANLITHQRIHTGEKPFQCAECGKSFSRSPNLIAHQRTHTGEKPYSCPECGKSFGNRSSLNTHQGIHTGEKPYECKECGESFSYNSNLIRHQRIHTGEKPYKCTDCGQRFSQS [...]
+chr4-04	SwissProt	protein_match	262776	262838	48.000000	-	.	Target=P10078.3 492 512 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	48.000000	-	.	Target=Q96CS4.1 291 311 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262838	49.000000	-	.	Target=A1YF12.1 463 483 +;percentID=47;sequence=MPSLRTRREEAEMELSAPGPSPWTPAAQAHVSDAPAVTHPGSAACGTPCCSDTELEAICPHYQQPDCDTRTEDKEFLHKEDIHEDLESQAEISENYAGDVLQVPELGDLCDDVSERDWGVPEGRRLPQSLSQEGDFTPAAMGLLRGPLGEKDLDCNGFDSRFSLSPNLMACQEIPTEERPHPYDMGGQSFQHSVDLTGHEGVPTAESPLICNECGKTFQGNPDLIQCQIVHTGEASFMCDDCGKTFSQNSVLKNHHRSHMSEKAYQCSECGKAFRGHSDFSRHQSHHSSERPYMCNECGKAFSQNSSLKKHQKSHMSEKPYECNECGKAFRRSSNLIQHQRIHSGEKPYVCSECGKAFRRSSNLIKHHRTHTGEKPFECGECGK [...]
+chr4-04	SwissProt	protein_match	314179	314202	40.000000	+	.	Target=P35789.4 367 374 +;percentID=62
+chr4-04	SwissProt	protein_match	314179	314202	40.000000	+	.	Target=P35789-3.4 367 374 +;percentID=62
+chr4-04	SwissProt	protein_match	314179	314202	40.000000	+	.	Target=Q7Z3V5.3 472 479 +;percentID=62
+chr4-04	SwissProt	protein_match	314179	314202	40.000000	+	.	Target=Q5R5Q6.1 471 478 +;percentID=62
+chr4-04	SwissProt	protein_match	314179	314202	40.000000	+	.	Target=Q9NSJ1.2 289 296 +;percentID=62
+chr4-04	SwissProt	protein_match	314179	314202	42.000000	+	.	Target=Q8TF20.2 95 102 +;percentID=75
+chr4-04	SwissProt	protein_match	314179	314202	47.000000	+	.	Target=Q9UII5.1 102 109 +;percentID=87
+chr4-04	SwissProt	protein_match	314179	314202	47.000000	+	.	Target=Q8TB69.1 430 437 +;percentID=87
+chr4-04	SwissProt	protein_match	314179	314268	50.000000	+	.	Target=Q96NJ6.1 260 286 +;percentID=40;Gap=M7 D1 M7 D2 M13 
+chr4-04	SwissProt	protein_match	314185	314253	43.000000	+	.	Target=Q8NDP4.1 214 236 +;percentID=43
+chr4-04	SwissProt	protein_match	262776	262838	50.000000	-	.	Target=P35789-2.4 567 587 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262838	48.000000	-	.	Target=P10078-2.3 492 512 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	50.000000	-	.	Target=P35789-3.4 511 531 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262838	50.000000	-	.	Target=P17020.3 463 483 +;percentID=47;sequence=MPSLRTRREEAEMELSVPGPSPWTPAAQARVRDAPAVTHPGSAACGTPCCSDTELEAICPHYQQPDCDTRTEDKEFLHKEDIHEDLESQAEISENYAGDVSQVPELGDLCDDVSERDWGVPEGRRLPQSLSQEGDFTPAAMGLLRGPLGEKDLDCNGFDSRFSLSPNLMACQEIPTEERPHPYDMGGQSFQHSVDLTGHEGVPTAESPLICNECGKTFQGNPDLIQRQIVHTGEASFMCDDCGKTFSQNSVLKNRHRSHMSEKAYQCSECGKAFRGHSDFSRHQSHHSSERPYMCNECGKAFSQNSSLKKHQKSHMSEKPYECNECGKAFRRSSNLIQHQRIHSGEKPYVCSECGKAFRRSSNLIKHHRTHTGEKPFECGECGK [...]
+chr4-04	SwissProt	protein_match	262776	262838	50.000000	-	.	Target=Q4V348.1 700 720 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	50.000000	-	.	Target=A2T759.1 463 483 +;percentID=47;sequence=MPSLRTRREEAEMELSAPGPSPWTPAAQARVSDAPAVTHPGSAACGTPCCSDTELEAICPHYQQPDCDTRTEDKEFLHKEDIHEDLESQAEISENYAGDVFQVPKLGDLCDDVSERDWGVPEGRRLPQSLSQEGDFTPAAMGLLRGPLGEKDLDCNGFDSRFSLSPNLMACQEIPXXERPHPYDMGGQSFQHSVDLTGHEGVPTAESPLICNECGKTFRGNPDLIQRQIVHTGEASFMCDDCGKTFSQNSVLKNRHRSHMSEKAYQCSECGKAFRGHSDFSRHQSHHSSERPYTCTECGKAFSQNSSLKKHQKSHMSEKPYECNECGKAFRRSSNLIQHQRIHSGEKPYVCSECGKAFRRSSNLIKHHRTHTGEKPFECGECGK [...]
+chr4-04	SwissProt	protein_match	262776	262838	51.000000	-	.	Target=Q3SXZ3-2.1 225 245 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262838	50.000000	-	.	Target=P35789.4 595 615 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262838	50.000000	-	.	Target=P51508.3 556 576 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	51.000000	-	.	Target=Q7Z3V5.3 281 301 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	51.000000	-	.	Target=Q5R5Q6.1 280 300 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	51.000000	-	.	Target=Q8WTR7.1 816 836 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262838	51.000000	-	.	Target=Q3SXZ3.1 257 277 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262832	50.000000	-	.	Target=A6NN14.3 240 258 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262838	52.000000	-	.	Target=P51814.2 511 531 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262841	51.000000	-	.	Target=Q96NJ3.2 457 478 +;percentID=40
+chr4-04	SwissProt	protein_match	262776	262838	52.000000	-	.	Target=Q96NI8.1 472 492 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	51.000000	-	.	Target=Q9UK11.1 262 282 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	51.000000	-	.	Target=Q6P1L6-2.1 489 509 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262838	51.000000	-	.	Target=Q8IYX0.1 326 346 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262838	52.000000	-	.	Target=P51814-2.2 471 491 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	52.000000	-	.	Target=P51814-3.2 479 499 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	52.000000	-	.	Target=P51814-6.2 469 489 +;percentID=47
+chr4-04	SwissProt	protein_match	314233	314268	40.000000	+	.	Target=Q8TB69.1 175 186 +;percentID=50
+chr4-04	SwissProt	protein_match	314233	314268	40.000000	+	.	Target=Q2TAN0.1 166 177 +;percentID=41
+chr4-04	SwissProt	protein_match	262776	262838	52.000000	-	.	Target=Q8TAW3.2 509 529 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262841	52.000000	-	.	Target=P10076.2 471 492 +;percentID=40
+chr4-04	SwissProt	protein_match	262776	262838	52.000000	-	.	Target=P51814-7.2 435 455 +;percentID=47
+chr4-04	SwissProt	protein_match	314304	314339	46.000000	+	.	Target=P13682.3 208 219 +;percentID=66;sequence=MALAPWGPVKVKKEEEEEENFPGQASSQQVHSENIKVWAPVQGLQTGLDGSEEEEKGQNISWDMAVVLKATQEAPAASTLGSYSLPGTLAKSEILETHGTMNFLGAETKNLQLLVPKTEICEEAEKPLIISERIQKADPQGPELGEACEKGNMLKRQRIKREKKDFRQVIVNDCHLPESFKEEENQKCKKSGGKYSLNSGAVKNPKTQLGQKPFTCSVCGKGFSQSANLVVHQRIHTGEKPFECHECGKAFIQSANLVVHQRIHTGQKPYVCSKCGKAFTQSSNLTVHQKIHSLEKTFKCNECEKAFSYSSQLARHQKVHITEKCYECNECGKTFTRSSNLIVHQRIHTGEKPFACNDCGKAFTQSANLIVHQRSHTGEKPYEC [...]
+chr4-04	SwissProt	protein_match	314310	314339	40.000000	+	.	Target=Q2TAN0.1 196 205 +;percentID=60
+chr4-04	SwissProt	protein_match	314310	314339	40.000000	+	.	Target=A8MUZ8.2 196 205 +;percentID=60
+chr4-04	SwissProt	protein_match	262776	262838	53.000000	-	.	Target=Q5R5Y7.1 336 356 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262841	52.000000	-	.	Target=P51815.2 422 443 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262838	52.000000	-	.	Target=Q9UK10.2 262 282 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	52.000000	-	.	Target=P51814-8.2 433 453 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	52.000000	-	.	Target=Q07230.1 476 496 +;percentID=47;sequence=MAAEVPAVSTPLSPLVQVPQEEDEQAEVTTMILEDDAWVQEAVLQEDGPESEPFPQSAGKGSPQEEDAAEGPQGALVRFRELCRRWLRPEVHTKEQMLTVLPREIQAWLQEHRPESSEEAVALVEDLTQTFRHSDFEIQSENGENSNEDMFEGVESHGMFLNISGGEGGQQSDGDSDFERDCGSGGAQGHAPGEDPRVVPSEGREVGQLIGLQGTYLGEKPYECPQCGKTFSRKSHLITHERTHTGEKYYKCDECGKSFSDGSNFSRHQTTHTGEKPYKCRDCGKSFSRSANLITHQRIHTGEKPFQCAECGKSFSRSPNLIAHQRTHTGEKPYSCPECGKSFGNRSSLNTHQGIHTGEKPYACKECGESFSYNSNLIRHQRIH [...]
+chr4-04	SwissProt	protein_match	262776	262838	53.000000	-	.	Target=Q8BPP0.1 318 338 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	52.000000	-	.	Target=P51814-5.2 503 523 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	53.000000	-	.	Target=P10077-2.2 515 535 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262841	53.000000	-	.	Target=Q9UJU3.1 862 883 +;percentID=40
+chr4-04	SwissProt	protein_match	262776	262838	53.000000	-	.	Target=O75290.3 223 243 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262838	53.000000	-	.	Target=Q9C0F3.2 336 356 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	53.000000	-	.	Target=Q9UIE0.3 338 358 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	53.000000	-	.	Target=Q6P1L6.1 383 403 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262841	54.000000	-	.	Target=Q5VIY5.1 468 489 +;percentID=40
+chr4-04	SwissProt	protein_match	262776	262841	54.000000	-	.	Target=Q86Y25.1 469 490 +;percentID=40
+chr4-04	SwissProt	protein_match	262776	262838	54.000000	-	.	Target=Q4R6C2.1 312 332 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262838	54.000000	-	.	Target=Q8NA42.1 312 332 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262841	54.000000	-	.	Target=Q571J5.2 471 492 +;percentID=40
+chr4-04	SwissProt	protein_match	262776	262841	54.000000	-	.	Target=Q5JVG8.1 342 363 +;percentID=40
+chr4-04	SwissProt	protein_match	262776	262838	54.000000	-	.	Target=Q2KI58.1 490 510 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262841	54.000000	-	.	Target=A0JNB1.1 677 698 +;percentID=40
+chr4-04	SwissProt	protein_match	262776	262841	54.000000	-	.	Target=Q86WZ6.1 689 710 +;percentID=40
+chr4-04	SwissProt	protein_match	262776	262838	54.000000	-	.	Target=Q5REF1.1 535 555 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	54.000000	-	.	Target=Q2M3W8.1 491 511 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	54.000000	-	.	Target=Q96RE9.1 551 571 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	54.000000	-	.	Target=Q96RE9-3.1 567 587 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	54.000000	-	.	Target=Q6N045.2 377 397 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262841	54.000000	-	.	Target=O75373.2 398 419 +;percentID=40
+chr4-04	SwissProt	protein_match	262776	262838	54.000000	-	.	Target=Q2M3W8-2.1 427 447 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	55.000000	-	.	Target=Q7TNU6.1 484 504 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262853	54.000000	-	.	Target=Q3SY52-2.1 405 430 +;percentID=42;sequence=MLENFALVASLGCGHGTEDEETPSDQNVSVGVSQSKAGSSTQKTQSCEMCVPVLKDILHLADLPGQKPYLVGECTNHHQHQKHHSAKKSLKRDMDRASYVKCCLFCMSLKPFRKWEVGKDLPAMLRLLRSLVFPGGKKPGTITECGEDIRSQKSHYKSGECGKASRHKHTPVYHPRVYTGKKLYECSKCGKAFRGKYSLVQHQRVHTGERPWECNECGKFFSQTSHLNDHRRIHTGERPYECSECGKLFRQNSSLVDHQKIHTGARPYECSQCGKSFSQKATLVKHQRVHTGERPYKCGECGNSFSQSAILNQHRRIHTGAKPYECGQCGKSFSQKATLIKHQRVHTGERPYKCGDCGKSFSQSSILIQHRRIHTGARPYEC [...]
+chr4-04	SwissProt	protein_match	262776	262838	54.000000	-	.	Target=Q96RE9-2.1 566 586 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262841	54.000000	-	.	Target=Q3ZCT1.3 389 410 +;percentID=40
+chr4-04	SwissProt	protein_match	262776	262838	55.000000	-	.	Target=Q8N859.1 303 323 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262841	55.000000	-	.	Target=A8MUP4.2 443 464 +;percentID=40
+chr4-04	SwissProt	protein_match	262776	262838	55.000000	-	.	Target=P15622.3 509 529 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	55.000000	-	.	Target=Q5TYW1-2.2 576 596 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	55.000000	-	.	Target=P15622-2.3 392 412 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	55.000000	-	.	Target=Q9HCX3.1 449 469 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	56.000000	-	.	Target=Q86YE8-3.3 582 602 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262841	55.000000	-	.	Target=Q7L2R6.2 467 488 +;percentID=40
+chr4-04	SwissProt	protein_match	262776	262838	55.000000	-	.	Target=Q86UE3.2 695 715 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262841	55.000000	-	.	Target=A8MUV8.3 313 334 +;percentID=40
+chr4-04	SwissProt	protein_match	262776	262838	56.000000	-	.	Target=Q86YE8.3 620 640 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	56.000000	-	.	Target=Q5RDX1.1 352 372 +;percentID=47
+chr4-04	SwissProt	protein_match	315863	315901	43.000000	-	.	Target=Q9HBT8.1 284 296 +;percentID=61
+chr4-04	SwissProt	protein_match	315869	315907	41.000000	-	.	Target=Q06732-2.2 256 268 +;percentID=61
+chr4-04	SwissProt	protein_match	315869	315907	41.000000	-	.	Target=Q06732.2 368 380 +;percentID=61
+chr4-04	SwissProt	protein_match	315869	315907	44.000000	-	.	Target=Q15937.2 260 272 +;percentID=61
+chr4-04	SwissProt	protein_match	315995	316036	42.000000	-	.	Target=Q4R882.1 69 82 +;percentID=42
+chr4-04	SwissProt	protein_match	317323	317361	41.000000	+	.	Target=Q86UE3.2 561 573 +;percentID=46
+chr4-04	SwissProt	protein_match	317771	317803	43.000000	-	.	Target=Q6ZR52.3 62 72 +;percentID=54
+chr4-04	SwissProt	protein_match	327910	327948	41.000000	-	.	Target=Q8N7K0.1 145 157 +;percentID=46
+chr4-04	SwissProt	protein_match	327910	327948	41.000000	-	.	Target=Q8N7K0-2.1 110 122 +;percentID=46
+chr4-04	SwissProt	protein_match	328410	328436	40.000000	+	.	Target=Q5T5D7.1 138 146 +;percentID=66
+chr4-04	SwissProt	protein_match	328440	328514	50.000000	+	.	Target=Q8TAU3.1 115 138 +;percentID=48;Gap=M12 D1 M12 
+chr4-04	SwissProt	protein_match	328440	328514	50.000000	+	.	Target=Q96SQ5.1 115 138 +;percentID=48;Gap=M12 D1 M12 
+chr4-04	SwissProt	protein_match	328459	328500	40.000000	+	.	Target=P13682.3 2 16 +;percentID=53;Gap=M7 I1 M7 
+chr4-04	SwissProt	protein_match	328469	328522	41.000000	+	.	Target=Q08ER8.2 80 97 +;percentID=44
+chr4-04	SwissProt	protein_match	262776	262838	56.000000	-	.	Target=Q12901.3 374 394 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262841	56.000000	-	.	Target=Q8N7K0.1 647 668 +;percentID=40
+chr4-04	SwissProt	protein_match	262776	262838	56.000000	-	.	Target=Q8N988-2.2 350 370 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	56.000000	-	.	Target=Q86YE8-4.3 553 573 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262841	56.000000	-	.	Target=Q8TAU3.1 521 542 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262838	56.000000	-	.	Target=Q96JL9.3 508 528 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262841	56.000000	-	.	Target=Q96SQ5.1 521 542 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262841	56.000000	-	.	Target=Q02386.2 585 606 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262838	56.000000	-	.	Target=Q61116.1 399 419 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	56.000000	-	.	Target=Q8BI67.1 867 887 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	56.000000	-	.	Target=Q86YE8-2.3 552 572 +;percentID=47;sequence=MILREETQFTDLDLQCEIISYIEVPTYETDISSTQLQSIYKREKLYECKKCQKKFSSGYQLILHHRFHVIERPYECKECGKNFRSGYQLTLHQRFHTGEKPYECTECGKNFRSGYQLTVHQRFHTGEKTYECRQCGKAFIYASHIVQHERIHTGGKPYECQECGRAFSQGGHLRIHQRVHTGEKPYKCKECGKTFSRRSNLVEHGQFHTDEKPYICEKCGKAFRRGHQLTVHQRVHTGKKPYECKECGKGYTTASYFLLHQRIHKGGKPYECKECKKTFTLYRNLTRHQNIHTGEKLFECKQCGKTYTTGSKLFQHQKTHTGEKPYECKECGKAFSLYGYLKQHQKIHTGMKHFECKECKKTFTLYRNLTRHQNIHTGKKLF [...]
+chr4-04	SwissProt	protein_match	262776	262838	56.000000	-	.	Target=Q8N988.2 343 363 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262841	56.000000	-	.	Target=Q8N7K0-2.1 612 633 +;percentID=40
+chr4-04	SwissProt	protein_match	262776	262841	56.000000	-	.	Target=Q6P9A3-2.1 377 398 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262841	56.000000	-	.	Target=O75437.3 547 568 +;percentID=40
+chr4-04	SwissProt	protein_match	262776	262838	56.000000	-	.	Target=A0JPL0.1 437 457 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262841	57.000000	-	.	Target=Q9NQZ8.1 439 460 +;percentID=50
+chr4-04	SwissProt	protein_match	262776	262838	57.000000	-	.	Target=Q969W8.1 313 333 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	57.000000	-	.	Target=P21506.3 491 511 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262838	56.000000	-	.	Target=Q9UK12.2 231 251 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	57.000000	-	.	Target=Q9Y473.1 533 553 +;percentID=47
+chr4-04	SwissProt	protein_match	329179	329214	44.000000	+	.	Target=A6NK53.2 365 376 +;percentID=66
+chr4-04	SwissProt	protein_match	329199	329279	47.000000	+	.	Target=Q6V9R5.2 100 130 +;percentID=41;Gap=M13 I4 M14 ;sequence=MSAFDMSHGFFPREPICPFEEKTKIGTMVEDHRSNSYQDSVTFDDVAVEFTPEEWALLDTTQKYLYRDVMLENYMNLASVDFFFCLTSEWEIQPRTKRSSLQQGFLKNQIFTGIQMQTRSYSGWKLCENCGEVFSEQFCLKTHMRAQNGGNTFEGNCYGKDSISVHKEASIGQELSKFNPCGKVFTLTPGLAVHLEILNGRQPYKCKECGKGFKYFASLDNHMGIHIGEKLCEFQECERAITTSSHLKQCVAVHTGKKSEKTKNCGKSFTNFSQLSAHAKTHKGEKSFECKECGRSFRNSSSFNVHIQIHTGIKPHKCTECGKAFTRSTHLTQHVRTHTGIKPYECKECGQAFTQYTGLAIHIRNHTG [...]
+chr4-04	SwissProt	protein_match	329208	329282	46.000000	+	.	Target=Q9BUY5.1 127 150 +;percentID=44;Gap=M11 D1 M13 
+chr4-04	SwissProt	protein_match	329208	329282	54.000000	+	.	Target=Q8R1D1.1 124 148 +;percentID=48
+chr4-04	SwissProt	protein_match	329208	329282	61.000000	+	.	Target=A1L1L7.1 125 149 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262838	57.000000	-	.	Target=Q95K52.1 241 261 +;percentID=47
+chr4-04	SwissProt	protein_match	329247	329288	42.000000	+	.	Target=Q86T29.1 136 149 +;percentID=50
+chr4-04	SwissProt	protein_match	262776	262838	57.000000	-	.	Target=Q6PG37.1 312 332 +;percentID=47
+chr4-04	SwissProt	protein_match	329262	329294	43.000000	+	.	Target=Q8NDW4.1 138 148 +;percentID=54
+chr4-04	SwissProt	protein_match	329268	329327	49.000000	+	.	Target=Q8BV42.1 478 497 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262838	57.000000	-	.	Target=Q8N7M2.3 265 285 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	57.000000	-	.	Target=Q3KQV3.2 452 472 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262841	57.000000	-	.	Target=Q86V71.2 454 475 +;percentID=40
+chr4-04	SwissProt	protein_match	262776	262841	57.000000	-	.	Target=B2KFW1-2.2 546 567 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262838	58.000000	-	.	Target=Q8TAF7-2.2 344 364 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262841	57.000000	-	.	Target=P17040-2.3 922 943 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262841	58.000000	-	.	Target=Q9HBT7.1 670 691 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262841	56.000000	-	.	Target=Q6P9A3.1 390 411 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262838	56.000000	-	.	Target=Q14587-2.2 733 753 +;percentID=47;sequence=MDWHQENKDKLGSTAKSFECTTFGKLCLLSTKYLSRQKPHKCGTHGKSLKYIDFTSDYARNNPNGFQVHGKSFFHSKHEQTVIGIKYCESIESGKTVNKKSQLMCQQMYMGEKPFGCSCCEKAFSSKSYLLVHQQTHAEEKPYGCNECGKDFSSKSYLIVHQRIHTGEKLHECSECRKTFSFHSQLVIHQRIHTGENPYECCECGKVFSRKDQLVSHQKTHSGQKPYVCNECGKAFGLKSQLIIHERIHTGEKPYECNECQKAFNTKSNLMVHQRTHTGEKPYVCSDCGKAFTFKSQLIVHQGIHTGVKPYGCIQCGKGFSLKSQLIVHQRSHTGMKPYVCNECGKAFRSKSYLIIHTRTHTGEKLHECNNCGKAFSFKSQL [...]
+chr4-04	SwissProt	protein_match	262776	262841	58.000000	-	.	Target=O14978.2 604 625 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262838	58.000000	-	.	Target=Q8TAF7.2 471 491 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262838	58.000000	-	.	Target=Q9UJW8.2 635 655 +;percentID=47
+chr4-04	SwissProt	protein_match	330177	330383	79.000000	+	.	Target=Q6ZN55-2.2 758 826 +;percentID=41;Gap=M24 D1 M1 D2 M17 I1 M7 I3 M11 D1 M5 ;sequence=MPRATWANSKERSWAESERGPRDTGNGGSKAERHIQEIETGRGGDRAKAHRRQRMRLRGTERASLGPGRRLGDSRGTDMPGARAQGLAAATEESEETVLYIEHRYVCSECNQLYGSLEEVLMHQNSHVPQQHFELVGVADPGVTVATDTASGTGLYQTLVQESQYQCLECGQLLMSPSQLLEHQELHLKMMAPQEAVPAEPSPKAPPLSSSTIHYECVDCKALFASQELWLNHRQTHLRATPTKAPAPVVLGSPVVLGPPVGQARVAVEHSYRKAEEGGEGATVPSAAATTTEVVTEVELLLYKCSECSQLFQLPADFLEHQATHFPAPVPESQEPALQQE [...]
+chr4-04	SwissProt	protein_match	262776	262838	58.000000	-	.	Target=Q9NYW8.1 375 395 +;percentID=47
+chr4-04	SwissProt	protein_match	330177	330383	79.000000	+	.	Target=Q6ZN55.2 669 737 +;percentID=41;Gap=M24 D1 M1 D2 M17 I1 M7 I3 M11 D1 M5 ;sequence=MTEESEETVLYIEHRYVCSECNQLYGSLEEVLMHQNSHVPQQHFELVGVADPGVTVATDTASGTGLYQTLVQESQYQCLECGQLLMSPSQLLEHQELHLKMMAPQEAVPAEPSPKAPPLSSSTIHYECVDCKALFASQELWLNHRQTHLRATPTKAPAPVVLGSPVVLGPPVGQARVAVEHSYRKAEEGGEGATVPSAAATTTEVVTEVELLLYKCSECSQLFQLPADFLEHQATHFPAPVPESQEPALQQEVQASSPAEVPVSQPDPLPASDHSYELRNGEAIGRDRRGRRARRNNSGEAGGAATQELFCSACDQLFLSPHQLQQHLRSHREGVFKCPLCSR [...]
+chr4-04	SwissProt	protein_match	262776	262838	57.000000	-	.	Target=Q6J6I6.1 313 333 +;percentID=47
+chr4-04	SwissProt	protein_match	330356	330688	137.000000	+	.	Target=P86289.1 1 112 +;percentID=41;Gap=M7 I1 M7 I1 M20 D2 M5 D2 M16 I1 M11 D1 M13 I3 M27 ;sequence=GATGAPGIAGAPGFPGARGPSGPQGPSGAPGPKGVQGPPGPQGPRGLTGPIGPPGPAGAPGDKGEAGPSGPPGPTGARGSAGPPGATGFPGAAGRGETGPAGPAGPPGPAGAR
+chr4-04	SwissProt	protein_match	262776	262841	58.000000	-	.	Target=Q8N823.1 623 644 +;percentID=45
+chr4-04	SwissProt	protein_match	330362	330394	40.000000	-	.	Target=P51814-2.2 3 14 +;percentID=66;Gap=M3 I1 M8 
+chr4-04	SwissProt	protein_match	330362	330394	40.000000	-	.	Target=P51814-3.2 3 14 +;percentID=66;Gap=M3 I1 M8 
+chr4-04	SwissProt	protein_match	330362	330394	40.000000	-	.	Target=P51814-7.2 3 14 +;percentID=66;Gap=M3 I1 M8 
+chr4-04	SwissProt	protein_match	330362	330454	47.000000	-	.	Target=Q96CS4.1 2 30 +;percentID=45;Gap=M16 D1 M3 D1 M10 
+chr4-04	SwissProt	protein_match	262776	262841	58.000000	-	.	Target=Q14591.3 287 308 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262841	58.000000	-	.	Target=Q92670.2 377 398 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262841	58.000000	-	.	Target=Q6ZN19-2.1 426 447 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262838	57.000000	-	.	Target=Q96NJ6.1 311 331 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262841	57.000000	-	.	Target=Q9Y2H8.1 573 594 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262841	59.000000	-	.	Target=Q03936-3.2 338 359 +;percentID=40
+chr4-04	SwissProt	protein_match	262776	262841	59.000000	-	.	Target=Q03936.2 370 391 +;percentID=40
+chr4-04	SwissProt	protein_match	262776	262841	58.000000	-	.	Target=A2T812.1 670 691 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262838	58.000000	-	.	Target=Q7TSH9.1 511 531 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	59.000000	-	.	Target=Q2VY69.1 373 393 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	59.000000	-	.	Target=Q6P3V2.2 496 516 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262841	59.000000	-	.	Target=Q5CZA5.2 258 279 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262841	58.000000	-	.	Target=Q6P560.1 404 425 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262841	59.000000	-	.	Target=Q7Z340.3 420 441 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262838	59.000000	-	.	Target=Q9BS31.1 264 284 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262841	59.000000	-	.	Target=Q03936-2.2 301 322 +;percentID=40
+chr4-04	SwissProt	protein_match	262776	262841	58.000000	-	.	Target=A6NK31.3 292 313 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262838	59.000000	-	.	Target=Q52M93.1 496 516 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	59.000000	-	.	Target=Q6ECI4.2 483 503 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262841	59.000000	-	.	Target=Q8BZW4-2.1 304 325 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262838	59.000000	-	.	Target=Q8NB42.1 496 516 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262841	60.000000	-	.	Target=Q5RER9.1 356 377 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262841	60.000000	-	.	Target=Q86XU0.1 264 285 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262838	59.000000	-	.	Target=Q6ECI4-2.2 365 385 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262853	59.000000	-	.	Target=B2RUI1.2 530 555 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262838	59.000000	-	.	Target=Q80W31.1 433 453 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	60.000000	-	.	Target=Q07231.1 528 548 +;percentID=47;sequence=MTKVVGMATVLGPRPPQESMGPSPIKVEEDEEKDKCCPTLELSHKHFRQSGNQDTLEPMGPSTIKAEEDESKDKCRPNLEISRKSFKQFGYQDTLEQLGPSTIKAEEDDEKDKGHPSPEISRQRFRQFGYHDTPGPREALSQLRVLCCEWLQPEIHTKEQILELLVLEQFLTILPRELQTWVQQHCPESAEETVTLLEDLEQELDEPGLQVSSPPNEQKQSWEKMSTSGTAMESLSSTETQHVDASPKYEFWGPLYIQETGEEEVFTQDPRKRQGFKSNPQKEDSADEHRSSEEESHADGLKRTVIPMIPANKYGSRSERQWANNLERERGTKASLQDTGSRKGAEPASTRPAPGEKRYICAECGKAFSNSSNLTKHRRTHTGE [...]
+chr4-04	SwissProt	protein_match	262776	262838	60.000000	-	.	Target=A2T7L7.1 446 466 +;percentID=47;sequence=MMTKVLGMAPVLGPRPPQEQVGPLMVKVEEKEEKGKYLPSLEMFRQRFRQFGYHDTPGPREALSQLRVLCCEWLRPEIHTKEQILELLVLEQFLTILPQELQAWVQEHCPESAEEAVTLLEDLERELDEPGHQVSTPPNEQKPVWEKISSSGTAKESPSSVQPQPLETSHKYESWGPLYIQESGEEQAFAQDPRKVRDCRLSTQHEESADEQKASEAEGLKGDIISVIIANKPEARLERQCVNLXXEKGTKPPLQESGSKKGRESVPTKPTPGERRYICAECGKAFSNSSNLTKHRRTHTGEKPYVCTKCGKAFSHSSNLTLHYRTHLVDRPYDCKCGKAFGQSSDLLKHQRMHTEEAPYQCKDCGKAFSGKGSLIRHYRIHTG [...]
+chr4-04	SwissProt	protein_match	262776	262841	59.000000	-	.	Target=Q8BZW4.1 325 346 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262838	60.000000	-	.	Target=Q6ZN57.1 328 348 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262841	60.000000	-	.	Target=Q6AZW8.1 247 268 +;percentID=40;sequence=MRRKTRNFKHKTVKDNKVLTEGSDQESEKDNSQCCDPATNERVQAEKRQYVCTECGKAFSQSANLTVHERIHTGEKPYKCKECGKAFSHSSNLVVHRRIHTGLKPYTCSECGKSFSGKSHLIRHQGIHSGEKTYECKECGKAFSRSSGLISHHRVHTGEKPYSCIECGKAFSRSSNLTQHQRMHRGKKVYKCKECGKTCGSNTKIMDHQRIHTGEKPYECDECGKTFILRKTLNEHQRLHRREKPYKCNECGKAFTSNRNLVDHQRVHTGEKPYKCNECGKTFRQTSQVILHLRTHTKEKPYKCSECGKAYRYSSQLIQHQRKHNEEKETS
+chr4-04	SwissProt	protein_match	330368	330736	167.000000	+	.	Target=B8HG54.1 195 306 +;percentID=42;Gap=M12 D2 M16 D4 M18 D1 M10 D1 M13 D1 M4 D5 M11 I2 M8 I1 M17 ;sequence=MAKVRVHELAKELGITSKDAVTKLQELGEFVRSASSTIEAPVVRKLRNAFPDAANKAAAPAAPKAPAPAAESRPAAPAPGPAAPKAPAPKVEAPAPAAPAASAPAAPQASSAAPAAPSTGAKPGARPGPKAETPAPAPRQGGSSQGSSAPRPGGPRPGNNPFATSQGMPRGRGGDGDRAPRPGNNPFATSQGMPRPGRSDGERPGGPRPAAGAGGPRPGGPRPAPGAGGPRPAAGAGGPRPGAPRPGGPRPTPGMMPNRTERPAPAGAGRPGGGGRGPGRPGAPGTGGPGGGGGAPAGGGFGKGGRGRGGTQGAFGKGGA [...]
+chr4-04	SwissProt	protein_match	262776	262838	60.000000	-	.	Target=A2T712.1 446 466 +;percentID=47;sequence=MMTKVLGMAPVLGPRPPQEQVGPLMVKVEEKEEKGKYLPSLEMFRQRFRQFGYHDTPGPREALSQLRVLCCEWLRPEIHTKEQILELLVLEQFLTILPQELQAWVQEHCPESAEEAVTLLEDLERELDEPGHQVSTPPNEQKPVWEKISSSGTAKESPSSMQPQPLETCHKYESWGPLYIQESGEEQEFAQDPRKVRDCRLSTQHEESADEQKGSEAEGLKGDIISVIIANKPEASLERQCVNLENEKGTKPPLQEAGSKKGRESVPTKPTPGERRYICAECGKAFSNSSNLTKHRRTHTGEKPYVCTKCGKAFSHSSNLTLHYRTHLVDRPYDCKCGKAFGQSSDLLKHQRMHTEEAPYQCKDCGKAFSGKGSLIRHYRIHTG [...]
+chr4-04	SwissProt	protein_match	330369	330479	52.000000	+	.	Target=O60304.2 281 319 +;percentID=41;Gap=M17 I2 M20 ;sequence=MATVPGLQPLPTLEQDLEQEEILIVKVEEDFCLEEEPSVETEDPSPETFRQLFRLFCYQEVAGPREALSRLWELCCRWLRPELRTKEQILELLVLEQFLTVLPGEIQARVREQQPESGEEAVVLVEGLQRKPRKHRQRGSELLSDDEVPLGIGGQFLKHQAEAQPEDLSLEEEARFSSQQPPAQLSHRPQRGPLLWPERGPPAPRHQEMASASPFLSAWSQVPVNLEDVAVYLSGEEPRCMDPAQRDAPLENEGPGIQLEDGGDGREDAPLRMEWYRVLSARCQGPGHPLPGQRPAPVRGLVRPDQPRGGPPPGRRASHGADKPYTCPECGKGFSKTSHLTKHQRTHTGERPYKCLVCGKGFSDRSNF [...]
+chr4-04	SwissProt	protein_match	330374	330418	41.000000	-	.	Target=Q8R0T2.1 272 288 +;percentID=52;Gap=M10 I2 M5 ;sequence=MEREASSWGLESRDVHSPNAVGSPEGSLKDPAGNTSENEEGEISQREGNGDYEVEEIPFGLEPQSPEFEPQSPEFESQSPRFEPESPGFESRSPGFVPPSPEFAPRSPESDPQSPEFESQSPKYEPRSPGCHPRSPGCEPGSPRYEPKSPGYGSKSPEFESQSPGYESQSPGYEPQNSGDGVQNSEFKTHSPEFETQSSKFQEGAEMPLSPEEKNPLSISLGVHPLDSFTQGFGEQPTGALPPFDMPSGALLAAPQFEMLQNPLNLTGTLRGPGRRGGRARGGQGPRPNICGICGKSFGRGSTLIQHQRIHTGEKPYKCEVCSKAFSQSSDLIKHQRTHTGERPYKCPRCGKAFADSSYLLRHQRTHSG [...]
+chr4-04	SwissProt	protein_match	330374	330436	42.000000	-	.	Target=Q9H5H4.2 238 260 +;percentID=47;Gap=M16 I2 M5 ;sequence=MEREALPWGLEPQDVQSSDEMRSPEGYLRGNMSENEEEEISQQEGSGDYEVEEIPFGLEPQSPGFEPQSPEFEPQSPRFEPESPGFESRSPGLVPPSPEFAPRSPESDSQSPEFESQSPRYEPQSPGYEPRSPGYEPRSPGYESESSRYESQNTELKTQSPEFEAQSSKFQEGAEMLLNPEEKSPLNISVGVHPLDSFTQGFGEQPTGDLPIGPPFEMPTGALLSTPQFEMLQNPLGLTGALRGPGRRGGRARGGQGPRPNICGICGKSFGRGSTLIQHQRIHTGEKPYKCEVCSKAFSQSSDLIKHQRTHTGERPYKCPRCGKAFADSSYLLRHQRTHSGQKPYKCPHCGKAFGDSSYLLRHQRTHSH [...]
+chr4-04	SwissProt	protein_match	330579	330650	46.000000	-	.	Target=Q7Z340.3 2 25 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262838	60.000000	-	.	Target=Q1LZ87.1 511 531 +;percentID=42;sequence=MAVESRAVSTPVPQNSQEQELILVKVEESRSWGQKLKQSGSARSCQELFRQQFRKFCYQETPGPREALGRLQELCYQWLRPELHTKEQILELLVLEQFLSILPEELQIWVQQHSPKNGEEAVTLLEDLEREFDDPGQQVPATPQGPPMPWKDLTCLGAAQEFTHIQRQPLKKQLKPWEPCLPPKSGCENNESAIKKDISGEKSQRLSQEPSFGGFSEHKSSLEWQQGSAPGETLRRSPSQRASFSPVIFTHKLLANRDHPEPQRNLILSTNSVTYQKVPTEERPYRCDICGHSFKQHSSLTQHQRIHTGEKPYKCNQCGKAFSLRSYLIIHQRIHSGEKAYECSECGKAFNQSSALIRHRKIHTGEKACKCNECGKAFSQSSYL [...]
+chr4-04	SwissProt	protein_match	262776	262841	60.000000	-	.	Target=Q86XN6-3.2 329 350 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262841	60.000000	-	.	Target=Q9Y2L8.1 774 795 +;percentID=50
+chr4-04	SwissProt	protein_match	262776	262841	60.000000	-	.	Target=Q6ZN06.2 356 377 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262841	60.000000	-	.	Target=A2T7D2.1 774 795 +;percentID=50
+chr4-04	SwissProt	protein_match	262776	262838	60.000000	-	.	Target=Q6P9Y7.1 254 274 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	60.000000	-	.	Target=Q6ZMW2.1 648 668 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262841	60.000000	-	.	Target=Q8N972.1 309 330 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262838	61.000000	-	.	Target=Q96MU6.2 605 625 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262838	60.000000	-	.	Target=Q08DG8.1 495 515 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262838	60.000000	-	.	Target=P08042-2.3 255 275 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	60.000000	-	.	Target=Q5TYW1.2 800 820 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262838	60.000000	-	.	Target=Q6P9Y7-2.1 254 274 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	61.000000	-	.	Target=Q96MU6-2.2 577 597 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262838	60.000000	-	.	Target=P08042.3 268 288 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	61.000000	-	.	Target=Q6ZMS4.2 391 411 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	61.000000	-	.	Target=Q5EBM4.1 187 207 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262838	61.000000	-	.	Target=O75123.1 293 313 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	60.000000	-	.	Target=P52738.2 331 351 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262838	60.000000	-	.	Target=Q9NZL3.2 374 394 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262904	60.000000	-	.	Target=Q5VIY5-2.1 417 464 +;percentID=32;Gap=M8 D1 M11 I6 M23 
+chr4-04	SwissProt	protein_match	262776	262838	62.000000	-	.	Target=Q8R2V3.2 636 656 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262838	61.000000	-	.	Target=Q3KNS6-2.1 198 218 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262841	62.000000	-	.	Target=Q02975.1 522 543 +;percentID=50
+chr4-04	SwissProt	protein_match	262776	262838	61.000000	-	.	Target=Q3KNS6.1 382 402 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262841	61.000000	-	.	Target=P17035.4 608 629 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262841	61.000000	-	.	Target=P17035-2.4 555 576 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262838	61.000000	-	.	Target=Q5T5D7.1 357 377 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262841	62.000000	-	.	Target=Q61751.1 518 539 +;percentID=50
+chr4-04	SwissProt	protein_match	262776	262838	62.000000	-	.	Target=A2VDQ7.1 532 552 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262841	62.000000	-	.	Target=Q9Z1D9.2 495 516 +;percentID=50
+chr4-04	SwissProt	protein_match	262776	262838	62.000000	-	.	Target=P17027.3 450 470 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	62.000000	-	.	Target=Q8TAQ5.1 533 553 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262838	62.000000	-	.	Target=Q9HCL3.2 482 502 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262853	62.000000	-	.	Target=Q13398-3.2 546 571 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262838	61.000000	-	.	Target=Q8N184-1.3 476 496 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262841	62.000000	-	.	Target=Q14590-2.3 456 477 +;percentID=40
+chr4-04	SwissProt	protein_match	262776	262841	62.000000	-	.	Target=Q14590.3 460 481 +;percentID=40
+chr4-04	SwissProt	protein_match	262776	262853	62.000000	-	.	Target=Q13398-4.2 538 563 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262838	62.000000	-	.	Target=Q9BY31.2 502 522 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262841	62.000000	-	.	Target=Q8TF39.3 580 601 +;percentID=45;sequence=MQAVVPLNKMTAISPEPQTLASTEQNEVPRVVTSGEQEAILRGNAADAESFRQRFRWFCYSEVAGPRKALSQLWELCNQWLRPDIHTKEQILELLVFEQFLTILPGEIRIWVKSQHPESSEEVVTLIEDLTQMLEEKDPVSQDSTVSQEENSKEDKMVTVCPNTESCESITLKDVAVNFSRGEWKKLEPFQKELYKEVLLENLRNLEFLDFPVSKLELISQLKWVELPWLLEEVSKSSRLDESALDKIIERCLRDDDHGLMEESQQYCGSSEEDHGNQGNSKGRVAQNKTLGSGSRGKKFDPDKSPFGHNFKETSDLIKHLRVYLRKKSRRYNESKKPFSFHSDLVLNRKEKTAGEKSRKSNDGGKVLSHSSALTEHQKRQKIH [...]
+chr4-04	SwissProt	protein_match	331877	331918	48.000000	+	.	Target=P15622.3 185 198 +;percentID=64
+chr4-04	SwissProt	protein_match	331877	331918	48.000000	+	.	Target=P15622-2.3 180 193 +;percentID=64
+chr4-04	SwissProt	protein_match	331981	332115	53.000000	+	.	Target=Q0VAW7.1 291 332 +;percentID=43;Gap=M6 D1 M12 D1 M2 D1 M2 D1 M16 I1 M3 
+chr4-04	SwissProt	protein_match	262776	262853	62.000000	-	.	Target=Q13398-2.2 525 550 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262838	63.000000	-	.	Target=A6NDX5.5 635 655 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262853	62.000000	-	.	Target=Q13398.2 534 559 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262841	63.000000	-	.	Target=P59923.1 791 812 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262853	62.000000	-	.	Target=Q13398-6.2 514 539 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262853	62.000000	-	.	Target=Q13398-5.2 473 498 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262838	63.000000	-	.	Target=Q9UJN7.2 279 299 +;percentID=47;sequence=MESLRGNTAQGPTNEEDYKNEGQLSRQTKCPAQKKSSFENTVVRKVSVTLKEIFTGEEGPESSEFSLSPNLDAQQKIPKGHGSPISRKNSKDNSDLIKHQRLFSQRKPCKCNECEKAFSYQSDLLVHSRIHGGEKPFECNKCGKSFSRSTHLIEHQRTHTGEKPYECNECGKAFSRSTHLSLHQRIHTGEKPYECSECGKAFSRSTNLSQHQRTHTQERPYKCNECGKAFGDRSTIIQHQRIHTGENPYECSKCGKAFSWISSLTEHQRTHTGENPYECSECGKVFSRSSSLTEHQRIHSGEKPHECRVCGKGFSRSSSLIIHQRTHTGEKPYKCNDCGKAFCQSSTLIRHQHLHTKE
+chr4-04	SwissProt	protein_match	262776	262838	63.000000	-	.	Target=Q9NQX6.1 329 349 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262838	63.000000	-	.	Target=Q80YP6.1 357 377 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262841	62.000000	-	.	Target=Q96SK3-2.3 349 370 +;percentID=54
+chr4-04	SwissProt	protein_match	262776	262838	63.000000	-	.	Target=P16374.2 374 394 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262838	63.000000	-	.	Target=Q8N2I2.1 414 434 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262841	63.000000	-	.	Target=Q5MCW4.1 243 264 +;percentID=52;Gap=M9 D1 M4 I1 M8 
+chr4-04	SwissProt	protein_match	262776	262838	64.000000	-	.	Target=Q5RB33.1 366 386 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262838	63.000000	-	.	Target=Q5REA0.1 329 349 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262853	63.000000	-	.	Target=A2T6E3.1 522 547 +;percentID=46;sequence=MASTWAIQAHMDQDERLEVKIEEKKYTTRQDWDLHKNNTHSREVFRQYFRQFCYQETSGPREALSRLRELCHQWLRPETHTKEQILELLVLEQFLTILPEELQAWVQEQHPESGEEVVTVLEDLERELDEPGEQVSAHTGEHEMFLQKMVPLGKEGEPSMPLQSMKAQLKYESPELESQQEQVLDVETGNEYGNLKQEVSEEMKPHGNTSSKFENDMSQSARCGETHEPEEITEEPSACSREDKQPTCDENGVSLTENSDHTEHQRICPGEKSYGCDDCGKTFSQHSHLTEHQRIHTGDRPYKCEECGKAFRGRTVLIRHKIIHTGEKPYKCNECGKAFGRWSALNQHQRLHTGEKHYHCNDCGKAFSQKAGLFHHIKIHTRDK [...]
+chr4-04	SwissProt	protein_match	262776	262853	64.000000	-	.	Target=Q3MIS6.1 574 599 +;percentID=46
+chr4-04	SwissProt	protein_match	262776	262838	63.000000	-	.	Target=Q6JLC9.1 330 350 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262838	63.000000	-	.	Target=Q14587.2 390 410 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262841	64.000000	-	.	Target=Q09FC8-4.2 372 393 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262841	64.000000	-	.	Target=Q9UC06.2 337 358 +;percentID=50
+chr4-04	SwissProt	protein_match	262776	262841	64.000000	-	.	Target=Q8NDW4.1 521 542 +;percentID=50
+chr4-04	SwissProt	protein_match	262776	262838	64.000000	-	.	Target=Q06730.3 610 630 +;percentID=52
+chr4-04	SwissProt	protein_match	331981	332115	53.000000	+	.	Target=Q0VAW7-2.1 285 326 +;percentID=43;Gap=M6 D1 M12 D1 M2 D1 M2 D1 M16 I1 M3 
+chr4-04	SwissProt	protein_match	332046	332189	41.000000	+	.	Target=P17040-2.3 170 209 +;percentID=32;Gap=M8 I2 M13 D9 M12 D1 M5 
+chr4-04	SwissProt	protein_match	332098	332157	42.000000	+	.	Target=Q8TF45.2 115 130 +;percentID=40;Gap=M4 D4 M12 
+chr4-04	SwissProt	protein_match	332171	332236	41.000000	+	.	Target=A8MYF4.2 77 99 +;percentID=43;Gap=M9 I1 M13 
+chr4-04	SwissProt	protein_match	332880	332909	45.000000	-	.	Target=Q14591.3 106 115 +;percentID=60
+chr4-04	SwissProt	protein_match	333184	333246	44.000000	-	.	Target=Q62981.1 53 70 +;percentID=52;Gap=M3 D3 M15 ;sequence=MLESLQPESELLHDEPDPGEKVYECDECRKTFSLEQHFVEHKKTHGGEKSPECTGCGEEFSKASSLTRHLRSRSRRESYKCGNCGRTFSQRGNFLSHQKQHAEERPSESKKTPVPMTTIVRNQRNAGNKPYACKECGKAFNGKSYLKEHEKIHTGEKPFECNQCGRAFSQKQYLIKHQNVHSGKKPFKCNECGKAFSQKENLIIHQRIHTGEKPYECKGCGKAFIQKSSLIRHQRSHTGEKPYTCKECGKAFSGKSNLTEHEKIHIGEKPYKCNECGTIFRQKQYLIKHHNIHTGEKPYECNKCGKAFSRITSLIVHVRIHTGDKPYECKVCGKAFCQSSSLTVHMRSHTGEKPYGCNECGKAFSQFSTLA [...]
+chr4-04	SwissProt	protein_match	333238	333300	40.000000	+	.	Target=B2RUI1.2 263 282 +;percentID=42;Gap=M9 D1 M11 
+chr4-04	SwissProt	protein_match	335372	335422	40.000000	+	.	Target=Q02975.1 48 65 +;percentID=61;Gap=M3 I1 M14 
+chr4-04	SwissProt	protein_match	335442	335471	40.000000	-	.	Target=Q96NL3.1 205 214 +;percentID=60
+chr4-04	SwissProt	protein_match	335738	335800	41.000000	+	.	Target=Q8N7K0.1 131 153 +;percentID=43;Gap=M6 I2 M15 
+chr4-04	SwissProt	protein_match	335738	335800	41.000000	+	.	Target=Q8N7K0-2.1 96 118 +;percentID=43;Gap=M6 I2 M15 
+chr4-04	SwissProt	protein_match	336078	336137	41.000000	-	.	Target=Q14586.2 348 367 +;percentID=50
+chr4-04	SwissProt	protein_match	336437	336484	44.000000	+	.	Target=A6QLU5.1 90 105 +;percentID=43
+chr4-04	SwissProt	protein_match	336440	336511	41.000000	-	.	Target=Q03936-3.2 51 75 +;percentID=44;Gap=M13 I1 M11 
+chr4-04	SwissProt	protein_match	262776	262841	64.000000	-	.	Target=Q16587.2 556 577 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262838	64.000000	-	.	Target=Q6ZNG0.1 366 386 +;percentID=42
+chr4-04	SwissProt	protein_match	262776	262838	64.000000	-	.	Target=Q3SY52.1 325 345 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	64.000000	-	.	Target=Q8N8J6-2.2 385 405 +;percentID=57
+chr4-04	SwissProt	protein_match	262776	262841	64.000000	-	.	Target=Q5REN4.1 520 541 +;percentID=50
+chr4-04	SwissProt	protein_match	262776	262838	63.000000	-	.	Target=Q3SY52-3.1 278 298 +;percentID=47;sequence=MCVPVLKDILHLADLPGQKPYLVGECTNHHQHQKHHSAKKSLKRDMDRASYVKCCLFCMSLKPFRKWEVGKDLPAMLRLLRSLVFPGGKKPGTITECGEDIRSQKSHYKSGECGKASRHKHTPVYHPRVYTGKKLYECSKCGKAFRGKYSLVQHQRVHTGERPWECNECGKFFSQTSHLNDHRRIHTGERPYECSECGKLFRQNSSLVDHQKIHTGARPYECSQCGKSFSQKATLVKHQRVHTGERPYKCGECGNSFSQSAILNQHRRIHTGAKPYECGQCGKSFSQKATLIKHQRVHTGERPYKCGDCGKSFSQSSILIQHRRIHTGARPYECGQCGKSFSQKSGLIQHQVVHTGERPYECNKCGNSFSQCSSLIHHQKCHNT
+chr4-04	SwissProt	protein_match	262776	262838	64.000000	-	.	Target=Q5R4K8.2 373 393 +;percentID=57
+chr4-04	SwissProt	protein_match	262776	262853	64.000000	-	.	Target=Q5RBQ3.1 386 411 +;percentID=46
+chr4-04	SwissProt	protein_match	262776	262841	64.000000	-	.	Target=A6NGH9.3 226 247 +;percentID=50
+chr4-04	SwissProt	protein_match	262776	262841	64.000000	-	.	Target=Q16587-3.2 524 545 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262841	64.000000	-	.	Target=Q96IR2.2 888 909 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262841	64.000000	-	.	Target=Q8N4W9-2.2 443 464 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262838	64.000000	-	.	Target=Q8N8J6.2 374 394 +;percentID=57
+chr4-04	SwissProt	protein_match	262776	262838	64.000000	-	.	Target=Q8N8J6-3.2 385 405 +;percentID=57
+chr4-04	SwissProt	protein_match	262776	262841	64.000000	-	.	Target=Q16587-2.2 485 506 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262841	64.000000	-	.	Target=Q6ZMV8.1 313 334 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262841	64.000000	-	.	Target=Q09FC8-3.2 155 176 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262841	64.000000	-	.	Target=Q8N4W9.2 512 533 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262853	64.000000	-	.	Target=Q3MIS6-2.1 341 366 +;percentID=46
+chr4-04	SwissProt	protein_match	262776	262841	64.000000	-	.	Target=Q14593-2.3 422 443 +;percentID=45
+chr4-04	SwissProt	protein_match	336440	336511	41.000000	-	.	Target=Q03936.2 83 107 +;percentID=44;Gap=M13 I1 M11 
+chr4-04	SwissProt	protein_match	336440	336511	41.000000	-	.	Target=Q03936-2.2 14 38 +;percentID=44;Gap=M13 I1 M11 
+chr4-04	SwissProt	protein_match	336440	336511	41.000000	-	.	Target=Q8NEM1.2 92 116 +;percentID=44;Gap=M13 I1 M11 
+chr4-04	SwissProt	protein_match	336608	336754	223.000000	-	.	Target=P63276.2 87 135 +;percentID=91;sequence=MGRVRTKTVKKAARVIIEKYYTRLGNDFHTNKRVCEEIAIIPSKKLRNKIAGYVTHLMKRIQRGPVRGISIKLQEEERERRDNYVPEVSALDQEIIEVDPDTKEMLKLLDFGSLSNLQVTQPTVGMNFKTPRGAV
+chr4-04	SwissProt	protein_match	262776	262841	65.000000	-	.	Target=Q8BQC8.1 315 336 +;percentID=50
+chr4-04	SwissProt	protein_match	336608	336754	223.000000	-	.	Target=P63275.2 87 135 +;percentID=91;sequence=MGRVRTKTVKKAARVIIEKYYTRLGNDFHTNKRVCEEIAIIPSKKLRNKIAGYVTHLMKRIQRGPVRGISIKLQEEERERRDNYVPEVSALDQEIIEVDPDTKEMLKLLDFGSLSNLQVTQPTVGMNFKTPRGAV
+chr4-04	SwissProt	protein_match	262776	262838	65.000000	-	.	Target=Q8NDQ6.1 609 629 +;percentID=52
+chr4-04	SwissProt	protein_match	336608	336754	223.000000	-	.	Target=P63273.2 87 135 +;percentID=91;sequence=MGRVRTKTVKKAARVIIEKYYTRLGNDFHTNKRVCEEIAIIPSKKLRNKIAGYVTHLMKRIQRGPVRGISIKLQEEERERRDNYVPEVSALDQEIIEVDPDTKEMLKLLDFGSLSNLQVTQPTVGMNFKTPRGAV
+chr4-04	SwissProt	protein_match	262776	262841	64.000000	-	.	Target=Q14593.3 487 508 +;percentID=45
+chr4-04	SwissProt	protein_match	336608	336754	223.000000	-	.	Target=P04644.3 87 135 +;percentID=91;sequence=MGRVRTKTVKKAARVIIEKYYTRLGNDFHTNKRVCEEIAIIPSKNLRNKIAGYVTHLMKRIQRGPVRGISIKLQEEERERRDNYVPEVSALDQEIIEVDPDTKEMLKLLDFGSLSNLQVTQPTVGMNFKTPRGAV
+chr4-04	SwissProt	protein_match	262776	262841	65.000000	-	.	Target=Q86XN6.2 327 348 +;percentID=45
+chr4-04	SwissProt	protein_match	336608	336754	223.000000	-	.	Target=P63274.2 87 135 +;percentID=91;sequence=MGRVRTKTVKKAARVIIEKYYTRLGNDFHTNKRVCEEIAIIPSKKLRNKIAGYVTHLMKRIQRGPVRGISIKLQEEERERRDNYVPEVSALDQEIIEVDPDTKEMLKLLDFGSLSNLQVTQPTVGMNFKTPRGAV
+chr4-04	SwissProt	protein_match	262776	262841	65.000000	-	.	Target=Q8BQC8-2.1 314 335 +;percentID=50
+chr4-04	SwissProt	protein_match	262776	262838	65.000000	-	.	Target=Q8NDQ6-4.1 586 606 +;percentID=52;sequence=MLPNFKLYNFIEIFFKPLTPSKNRFHFVSYFENVNFMLCWLQENNFCLLLCFLSGLLSRHKTKKLSSEKDIHEISLSKESIIEKSKTLRLKGSIFRNEWQNKSEFEGQQGLKERSISQKKIVSKKMSTDRKRPSFTLNQRIHNSEKSCDSHLVQHGKIDSDVKHDCKECGSTFNNVYQLTLHQKIHTGEKSCKCEKCGKVFSHSYQLTLHQRFHTGEKPYECQECGKTFTLYPQLNRHQKIHTGKKPYMCKKCDKGFFSRLELTQHKRIHTGKKSYECKECGKVFQLIFYFKEHERIHTGKKPYECKECGKAFSVCGQLTRHQKIHTGVKPYECKECGKTFRLSFYLTEHRRTHAGKKPYECKECGKSFNVRGQLNRHKTIH [...]
+chr4-04	SwissProt	protein_match	262776	262841	65.000000	-	.	Target=Q5R8X1.1 478 499 +;percentID=50
+chr4-04	SwissProt	protein_match	262776	262838	65.000000	-	.	Target=Q8NDQ6-2.1 577 597 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262838	65.000000	-	.	Target=Q86TJ5.1 326 346 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	65.000000	-	.	Target=Q5R5S6.1 609 629 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262841	65.000000	-	.	Target=Q86XN6-2.2 327 348 +;percentID=45
+chr4-04	SwissProt	protein_match	336614	336754	220.000000	-	.	Target=Q90YQ6.3 87 133 +;percentID=93;sequence=MGRVRTKTVKKAARVIIEKYYTRLGNDFHTNKRVCEEIAIIPSKKLRNKIAGYVTHLMKRIQRGPVRGISIKLQEEERERRDNYVPEVSALDQEIIEVDPDTKEMLKLLDFGSLSNLQVTQPTVGMNFKTPRGV
+chr4-04	SwissProt	protein_match	262776	262838	65.000000	-	.	Target=Q15937.2 447 467 +;percentID=52
+chr4-04	SwissProt	protein_match	336614	336754	220.000000	-	.	Target=P08636.3 87 133 +;percentID=93;sequence=MGRVRTKTVKKAARVIIEKYYTRLGNDFHTNKRVCEEIAIIPSKKLRNKIAGYVTHLMKRIQRGPVRGISIKLQEEERERRDNYVPEVSALDQEIIEVDPDTKEMLKLLDFGSLSNLQVTQPTVGMNFKTPRGAL
+chr4-04	SwissProt	protein_match	262776	262841	67.000000	-	.	Target=Q9QXT9.1 540 561 +;percentID=54
+chr4-04	SwissProt	protein_match	336929	337108	41.000000	-	.	Target=Q8N4W9-2.2 34 96 +;percentID=31;Gap=M16 I1 M10 D1 M5 I1 M11 I2 M17 
+chr4-04	SwissProt	protein_match	337094	337150	43.000000	+	.	Target=A6NK31.3 4 22 +;percentID=52
+chr4-04	SwissProt	protein_match	337116	337175	40.000000	+	.	Target=B1APH4.3 89 108 +;percentID=40
+chr4-04	SwissProt	protein_match	337541	337702	140.000000	+	.	Target=Q8NDP4.1 4 60 +;percentID=50;Gap=M5 D1 M2 I4 M46 
+chr4-04	SwissProt	protein_match	262776	262838	65.000000	-	.	Target=P52742.2 496 516 +;percentID=57
+chr4-04	SwissProt	protein_match	262776	262838	66.000000	-	.	Target=P51786.2 304 324 +;percentID=57
+chr4-04	SwissProt	protein_match	262776	262841	67.000000	-	.	Target=Q9Z1D8.1 765 786 +;percentID=54
+chr4-04	SwissProt	protein_match	262776	262841	64.000000	-	.	Target=Q16587-4.2 484 505 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262838	67.000000	-	.	Target=Q99676.3 728 748 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262841	66.000000	-	.	Target=Q8IYB9.1 201 222 +;percentID=50
+chr4-04	SwissProt	protein_match	262776	262838	66.000000	-	.	Target=Q96JF6.3 626 646 +;percentID=57
+chr4-04	SwissProt	protein_match	262776	262841	68.000000	-	.	Target=O14709.1 511 532 +;percentID=59
+chr4-04	SwissProt	protein_match	262776	262838	66.000000	-	.	Target=Q9BWM5.1 384 404 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262841	66.000000	-	.	Target=Q8IZ26.2 287 308 +;percentID=50
+chr4-04	SwissProt	protein_match	262776	262838	68.000000	-	.	Target=A6QLU5.1 729 749 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262838	69.000000	-	.	Target=Q494X3.1 245 265 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262838	69.000000	-	.	Target=P10755.2 338 358 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262841	65.000000	-	.	Target=P17031.3 483 504 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262838	67.000000	-	.	Target=Q9Y6Q3.3 435 455 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262838	67.000000	-	.	Target=Q9Y6Q3-2.3 450 470 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262853	70.000000	-	.	Target=Q09FC8-5.2 353 378 +;percentID=46
+chr4-04	SwissProt	protein_match	262776	262841	68.000000	-	.	Target=P17097.1 279 300 +;percentID=50
+chr4-04	SwissProt	protein_match	337550	337699	97.000000	+	.	Target=P10754.2 115 162 +;percentID=46;Gap=M39 D2 M9 
+chr4-04	SwissProt	protein_match	337550	337699	97.000000	+	.	Target=P10754-2.2 108 155 +;percentID=46;Gap=M39 D2 M9 
+chr4-04	SwissProt	protein_match	337550	337699	101.000000	+	.	Target=O95201.2 115 162 +;percentID=48;Gap=M41 D2 M7 
+chr4-04	SwissProt	protein_match	337550	337699	116.000000	+	.	Target=Q13398-3.2 36 85 +;percentID=50
+chr4-04	SwissProt	protein_match	337550	337702	125.000000	+	.	Target=Q92670.2 196 246 +;percentID=49
+chr4-04	SwissProt	protein_match	337550	337699	160.000000	+	.	Target=Q96NG5.1 34 83 +;percentID=62
+chr4-04	SwissProt	protein_match	337550	337699	160.000000	+	.	Target=Q8N988-2.2 34 83 +;percentID=62
+chr4-04	SwissProt	protein_match	337550	337699	160.000000	+	.	Target=Q8N988.2 27 76 +;percentID=62
+chr4-04	SwissProt	protein_match	337550	337696	173.000000	+	.	Target=Q8IYN0.1 25 74 +;percentID=72;Gap=M8 I1 M41 
+chr4-04	SwissProt	protein_match	337550	337696	175.000000	+	.	Target=Q9H8G1.2 25 74 +;percentID=70;Gap=M8 I1 M41 
+chr4-04	SwissProt	protein_match	337550	337699	175.000000	+	.	Target=Q96NI8.1 5 54 +;percentID=66
+chr4-04	SwissProt	protein_match	337550	337705	179.000000	+	.	Target=Q8NE65.1 25 77 +;percentID=69;Gap=M8 I1 M44 
+chr4-04	SwissProt	protein_match	337550	337699	195.000000	+	.	Target=Q8TF32.2 25 75 +;percentID=74;Gap=M7 I1 M43 
+chr4-04	SwissProt	protein_match	262776	262838	71.000000	-	.	Target=Q8N184-2.3 311 331 +;percentID=57
+chr4-04	SwissProt	protein_match	262776	262838	69.000000	-	.	Target=Q60585.2 482 502 +;percentID=57
+chr4-04	SwissProt	protein_match	262776	262841	70.000000	-	.	Target=P10751.2 310 331 +;percentID=54
+chr4-04	SwissProt	protein_match	262776	262841	72.000000	-	.	Target=Q9HBT8.1 495 516 +;percentID=50
+chr4-04	SwissProt	protein_match	262776	262838	72.000000	-	.	Target=Q9XSR1.1 514 534 +;percentID=57
+chr4-04	SwissProt	protein_match	262776	262838	70.000000	-	.	Target=Q2TL60.1 202 222 +;percentID=57
+chr4-04	SwissProt	protein_match	262776	262841	70.000000	-	.	Target=Q9H7R5.1 282 303 +;percentID=50
+chr4-04	SwissProt	protein_match	262776	262853	70.000000	-	.	Target=Q09FC8-2.2 365 390 +;percentID=46
+chr4-04	SwissProt	protein_match	262776	262841	68.000000	-	.	Target=Q5RBX0.1 279 300 +;percentID=50
+chr4-04	SwissProt	protein_match	262776	262838	70.000000	-	.	Target=Q96SK3.3 255 275 +;percentID=61
+chr4-04	SwissProt	protein_match	262776	262841	76.000000	-	.	Target=Q8WV37.1 437 458 +;percentID=59
+chr4-04	SwissProt	protein_match	262776	262838	71.000000	-	.	Target=A2VDP4.1 311 331 +;percentID=57
+chr4-04	SwissProt	protein_match	262776	262838	71.000000	-	.	Target=Q8N184.3 311 331 +;percentID=57
+chr4-04	SwissProt	protein_match	262779	262850	67.000000	-	.	Target=Q8N587.2 116 139 +;percentID=41
+chr4-04	SwissProt	protein_match	262776	262844	79.000000	-	.	Target=Q08AN1.2 409 431 +;percentID=52
+chr4-04	SwissProt	protein_match	262776	262838	73.000000	-	.	Target=Q8N9F8.1 358 378 +;percentID=57
+chr4-04	SwissProt	protein_match	262776	262853	73.000000	-	.	Target=O60765.2 491 516 +;percentID=50
+chr4-04	SwissProt	protein_match	337556	337699	168.000000	+	.	Target=Q9NZV7.1 169 216 +;percentID=66
+chr4-04	SwissProt	protein_match	337559	337699	124.000000	+	.	Target=A2T812.1 157 203 +;percentID=46
+chr4-04	SwissProt	protein_match	337559	337699	124.000000	+	.	Target=Q9HBT7.1 157 203 +;percentID=46
+chr4-04	SwissProt	protein_match	337559	337699	131.000000	+	.	Target=P15622.3 16 62 +;percentID=57
+chr4-04	SwissProt	protein_match	337559	337702	145.000000	+	.	Target=Q8N7K0.1 1 48 +;percentID=54
+chr4-04	SwissProt	protein_match	337559	337702	151.000000	+	.	Target=P17024.2 1 48 +;percentID=54
+chr4-04	SwissProt	protein_match	337562	337696	120.000000	+	.	Target=Q9BWM5.1 23 67 +;percentID=55
+chr4-04	SwissProt	protein_match	337562	337696	158.000000	+	.	Target=A8MT65.2 38 82 +;percentID=64
+chr4-04	SwissProt	protein_match	337562	337717	164.000000	+	.	Target=Q9BR84.1 9 61 +;percentID=58;Gap=M46 I1 M6 
+chr4-04	SwissProt	protein_match	337562	337696	196.000000	+	.	Target=Q86XN6-2.2 3 47 +;percentID=84
+chr4-04	SwissProt	protein_match	337562	337696	196.000000	+	.	Target=Q86XN6.2 3 47 +;percentID=84
+chr4-04	SwissProt	protein_match	337565	337699	128.000000	+	.	Target=P51786.2 23 67 +;percentID=48
+chr4-04	SwissProt	protein_match	262779	262841	54.000000	-	.	Target=Q5HY98.1 216 236 +;percentID=47
+chr4-04	SwissProt	protein_match	337565	337696	137.000000	+	.	Target=A6NK31.3 58 101 +;percentID=70
+chr4-04	SwissProt	protein_match	337565	337768	137.000000	+	.	Target=Q96NJ3.2 4 71 +;percentID=45
+chr4-04	SwissProt	protein_match	337565	337699	141.000000	+	.	Target=Q2VY69.1 4 48 +;percentID=60
+chr4-04	SwissProt	protein_match	337565	337711	141.000000	+	.	Target=A0JNB1.1 19 67 +;percentID=57
+chr4-04	SwissProt	protein_match	337565	337711	142.000000	+	.	Target=Q9NYT6.2 4 52 +;percentID=55
+chr4-04	SwissProt	protein_match	262782	262838	49.000000	-	.	Target=Q5REI6.1 386 404 +;percentID=47
+chr4-04	SwissProt	protein_match	262779	262838	48.000000	-	.	Target=Q49A33-2.2 177 196 +;percentID=45
+chr4-04	SwissProt	protein_match	262782	262838	51.000000	-	.	Target=Q9HCZ1.2 658 676 +;percentID=47
+chr4-04	SwissProt	protein_match	262779	262838	48.000000	-	.	Target=Q49A33.3 177 196 +;percentID=45
+chr4-04	SwissProt	protein_match	262782	262838	53.000000	-	.	Target=Q5HYK9.2 557 575 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262838	74.000000	-	.	Target=Q9P2J8-2.3 460 480 +;percentID=61
+chr4-04	SwissProt	protein_match	262779	262844	64.000000	-	.	Target=P17038-2.4 196 217 +;percentID=45
+chr4-04	SwissProt	protein_match	262776	262838	74.000000	-	.	Target=Q9P2J8.3 586 606 +;percentID=61
+chr4-04	SwissProt	protein_match	262782	262841	56.000000	-	.	Target=Q6ZN19.1 594 613 +;percentID=50
+chr4-04	SwissProt	protein_match	262776	262853	70.000000	-	.	Target=Q09FC8.2 401 426 +;percentID=46
+chr4-04	SwissProt	protein_match	262776	262841	76.000000	-	.	Target=Q8WV37-3.1 287 308 +;percentID=59
+chr4-04	SwissProt	protein_match	262782	262853	64.000000	-	.	Target=Q9BX82.1 596 619 +;percentID=54
+chr4-04	SwissProt	protein_match	262782	262838	50.000000	-	.	Target=Q96MR9.2 602 620 +;percentID=47
+chr4-04	SwissProt	protein_match	262782	262841	69.000000	-	.	Target=Q8N9Z0-2.2 274 293 +;percentID=60
+chr4-04	SwissProt	protein_match	262782	262838	51.000000	-	.	Target=Q5RES8.1 656 674 +;percentID=47
+chr4-04	SwissProt	protein_match	262815	262853	40.000000	-	.	Target=O95780.1 478 490 +;percentID=46
+chr4-04	SwissProt	protein_match	262782	262838	54.000000	-	.	Target=Q2M3X9.1 555 573 +;percentID=52
+chr4-04	SwissProt	protein_match	337565	337711	142.000000	+	.	Target=A6NK53.2 4 52 +;percentID=57
+chr4-04	SwissProt	protein_match	337565	337714	142.000000	+	.	Target=Q9UIE0.3 4 53 +;percentID=54
+chr4-04	SwissProt	protein_match	337565	337699	143.000000	+	.	Target=Q6ZMW2.1 4 48 +;percentID=57
+chr4-04	SwissProt	protein_match	337565	337699	143.000000	+	.	Target=Q86WZ6.1 19 63 +;percentID=60
+chr4-04	SwissProt	protein_match	337565	337699	144.000000	+	.	Target=Q9HCZ1.2 6 50 +;percentID=60
+chr4-04	SwissProt	protein_match	337565	337699	144.000000	+	.	Target=Q9BUY5.1 38 82 +;percentID=55
+chr4-04	SwissProt	protein_match	337565	337699	144.000000	+	.	Target=Q52M93.1 23 67 +;percentID=60
+chr4-04	SwissProt	protein_match	337565	337696	146.000000	+	.	Target=Q8N587.2 37 80 +;percentID=59
+chr4-04	SwissProt	protein_match	337565	337696	146.000000	+	.	Target=Q4R882.1 37 80 +;percentID=59
+chr4-04	SwissProt	protein_match	337565	337696	146.000000	+	.	Target=P0C7V5.1 37 80 +;percentID=61
+chr4-04	SwissProt	protein_match	337565	337699	148.000000	+	.	Target=Q5RES8.1 4 48 +;percentID=60
+chr4-04	SwissProt	protein_match	262785	262838	50.000000	-	.	Target=Q9Y3M9.2 602 619 +;percentID=50
+chr4-04	SwissProt	protein_match	337565	337699	150.000000	+	.	Target=Q7TSH9.1 24 68 +;percentID=60
+chr4-04	SwissProt	protein_match	262782	262841	56.000000	-	.	Target=Q02525.2 578 597 +;percentID=50
+chr4-04	SwissProt	protein_match	337565	337711	152.000000	+	.	Target=Q14588.3 4 52 +;percentID=61
+chr4-04	SwissProt	protein_match	337565	337696	152.000000	+	.	Target=Q6V9R5.2 37 80 +;percentID=63
+chr4-04	SwissProt	protein_match	337565	337714	153.000000	+	.	Target=Q9UK13.2 26 75 +;percentID=58
+chr4-04	SwissProt	protein_match	337565	337696	153.000000	+	.	Target=Q8R2V3.2 215 258 +;percentID=63
+chr4-04	SwissProt	protein_match	262782	262838	49.000000	-	.	Target=Q3KP31.1 386 404 +;percentID=47
+chr4-04	SwissProt	protein_match	262776	262841	76.000000	-	.	Target=Q8WV37-2.1 379 400 +;percentID=59
+chr4-04	SwissProt	protein_match	262782	262853	79.000000	-	.	Target=Q06732-2.2 606 629 +;percentID=54
+chr4-04	SwissProt	protein_match	262815	262844	42.000000	-	.	Target=Q03938.2 201 210 +;percentID=50
+chr4-04	SwissProt	protein_match	262782	262853	79.000000	-	.	Target=Q06732.2 718 741 +;percentID=54
+chr4-04	SwissProt	protein_match	262856	263002	93.000000	-	.	Target=Q8N9F8.1 473 519 +;percentID=42;Gap=M9 D2 M38 
+chr4-04	SwissProt	protein_match	262785	262841	54.000000	-	.	Target=Q6ZNA1.2 891 909 +;percentID=47
+chr4-04	SwissProt	protein_match	262782	262838	56.000000	-	.	Target=A2RRD8.1 219 237 +;percentID=47
+chr4-04	SwissProt	protein_match	262785	262841	61.000000	-	.	Target=Q96SE7.1 374 392 +;percentID=52
+chr4-04	SwissProt	protein_match	262788	262838	40.000000	-	.	Target=P52737.1 366 382 +;percentID=41
+chr4-04	SwissProt	protein_match	262782	262853	60.000000	-	.	Target=P17098.2 394 417 +;percentID=50
+chr4-04	SwissProt	protein_match	262779	262844	64.000000	-	.	Target=P17038.4 202 223 +;percentID=45
+chr4-04	SwissProt	protein_match	262812	262841	43.000000	-	.	Target=Q9NYT6.2 504 513 +;percentID=60
+chr4-04	SwissProt	protein_match	262782	262838	42.000000	-	.	Target=A1L1L7.1 335 353 +;percentID=42
+chr4-04	SwissProt	protein_match	262815	262853	40.000000	-	.	Target=O95780-2.1 402 414 +;percentID=46
+chr4-04	SwissProt	protein_match	262856	262972	89.000000	-	.	Target=Q86T29.1 602 640 +;percentID=46
+chr4-04	SwissProt	protein_match	262843	262977	86.000000	-	.	Target=Q8N8C0-2.1 268 312 +;percentID=46;sequence=MQRNAMYLKNVAETACNFQLTQYQISHANQKPYECQICGKPFRKRAHLTQHNRIHTGGKPYECKECGKVFICCSTLIQHKRTHTSEKPYECLECRKTFRRSAHLIRHQRIHTGEKPYKCKQCWKAFASVSDLIDIGKFTLMRDFTNVQNVGRHLTIAQLLFSIREFTLVRSPLNVRNVAKHSIIAQHLLNTRELILMRNLMNVRNVKRLLGKVHILLNIKEFILVRNHMSVSNVGRLSLVFLILIDIREFTLVKNPMNVKNVVELLTIVQLLFNTREFTLVRRLMNISSVGRFLSPVQHLFNIREHILMKNLMNVSNARRPSSIMHI
+chr4-04	SwissProt	protein_match	262859	262984	54.000000	-	.	Target=Q6P1L6-2.1 438 481 +;percentID=29;Gap=M4 I2 M38 
+chr4-04	SwissProt	protein_match	337565	337699	154.000000	+	.	Target=Q6P3V2.2 23 67 +;percentID=62
+chr4-04	SwissProt	protein_match	337565	337699	154.000000	+	.	Target=A6QLU5.1 24 68 +;percentID=62
+chr4-04	SwissProt	protein_match	337565	337699	155.000000	+	.	Target=A1L1L7.1 36 80 +;percentID=57
+chr4-04	SwissProt	protein_match	262859	262957	68.000000	-	.	Target=A2VDP4.1 383 415 +;percentID=42
+chr4-04	SwissProt	protein_match	337565	337711	155.000000	+	.	Target=Q14590-2.3 4 52 +;percentID=61
+chr4-04	SwissProt	protein_match	337565	337711	155.000000	+	.	Target=Q14590.3 4 52 +;percentID=61
+chr4-04	SwissProt	protein_match	337565	337738	157.000000	+	.	Target=Q12901.3 4 61 +;percentID=55
+chr4-04	SwissProt	protein_match	337565	337699	157.000000	+	.	Target=Q99676.3 24 68 +;percentID=62
+chr4-04	SwissProt	protein_match	337565	337699	193.000000	+	.	Target=Q86YE8.3 4 48 +;percentID=80
+chr4-04	SwissProt	protein_match	337568	337699	106.000000	+	.	Target=Q80YP6.1 11 54 +;percentID=52
+chr4-04	SwissProt	protein_match	337568	337699	107.000000	+	.	Target=A6NF35.2 12 55 +;percentID=52
+chr4-04	SwissProt	protein_match	337568	337699	108.000000	+	.	Target=Q08ER8.2 6 49 +;percentID=52
+chr4-04	SwissProt	protein_match	337568	337699	109.000000	+	.	Target=Q8TF45.2 2 45 +;percentID=52
+chr4-04	SwissProt	protein_match	337568	337699	111.000000	+	.	Target=Q6NX49.1 11 54 +;percentID=50
+chr4-04	SwissProt	protein_match	337568	337699	113.000000	+	.	Target=Q5CZA5.2 8 51 +;percentID=56
+chr4-04	SwissProt	protein_match	337568	337699	113.000000	+	.	Target=O43296.1 11 54 +;percentID=56
+chr4-04	SwissProt	protein_match	337568	337699	115.000000	+	.	Target=Q13398-4.2 34 77 +;percentID=56
+chr4-04	SwissProt	protein_match	262847	262993	101.000000	-	.	Target=Q6AZW8.1 252 300 +;percentID=42
+chr4-04	SwissProt	protein_match	262853	262924	53.000000	-	.	Target=Q14586.2 268 291 +;percentID=41
+chr4-04	SwissProt	protein_match	262788	262838	40.000000	-	.	Target=Q5REK1.1 366 382 +;percentID=41
+chr4-04	SwissProt	protein_match	262788	262841	53.000000	-	.	Target=Q14588.3 401 418 +;percentID=44
+chr4-04	SwissProt	protein_match	262853	262972	90.000000	-	.	Target=Q52M93.1 283 322 +;percentID=40
+chr4-04	SwissProt	protein_match	262782	262841	61.000000	-	.	Target=A8MYF4.2 327 346 +;percentID=55
+chr4-04	SwissProt	protein_match	262859	262957	73.000000	-	.	Target=Q7TNU6.1 304 336 +;percentID=42
+chr4-04	SwissProt	protein_match	262782	262841	69.000000	-	.	Target=Q8N9Z0.2 317 336 +;percentID=60
+chr4-04	SwissProt	protein_match	262859	262939	58.000000	-	.	Target=Q9HCG1.2 254 279 +;percentID=40;Gap=M4 D1 M22 
+chr4-04	SwissProt	protein_match	262859	262993	66.000000	-	.	Target=Q96SK3-2.3 186 230 +;percentID=36;Gap=M30 D1 M7 I1 M7 
+chr4-04	SwissProt	protein_match	262843	263190	115.000000	-	.	Target=Q8N8C0.1 101 200 +;percentID=34;Gap=M29 D6 M26 D10 M45 
+chr4-04	SwissProt	protein_match	262844	262981	67.000000	-	.	Target=P59923.1 960 1006 +;percentID=40;Gap=M43 I1 M3 
+chr4-04	SwissProt	protein_match	262847	262981	79.000000	-	.	Target=P24399.2 156 199 +;percentID=40;Gap=M41 D1 M3 
+chr4-04	SwissProt	protein_match	262859	262957	68.000000	-	.	Target=Q8N184-1.3 352 384 +;percentID=42
+chr4-04	SwissProt	protein_match	262785	262838	59.000000	-	.	Target=Q86T29.1 367 384 +;percentID=61
+chr4-04	SwissProt	protein_match	262859	263014	72.000000	-	.	Target=Q2M3W8-2.1 284 335 +;percentID=28
+chr4-04	SwissProt	protein_match	337568	337699	116.000000	+	.	Target=Q8TAU3.1 12 55 +;percentID=56
+chr4-04	SwissProt	protein_match	337568	337699	116.000000	+	.	Target=Q96SQ5.1 12 55 +;percentID=56
+chr4-04	SwissProt	protein_match	337568	337699	116.000000	+	.	Target=Q8IVC4.1 14 57 +;percentID=54
+chr4-04	SwissProt	protein_match	337568	337699	117.000000	+	.	Target=Q9HCX3.1 11 54 +;percentID=52
+chr4-04	SwissProt	protein_match	337568	337696	118.000000	+	.	Target=Q13106.3 11 53 +;percentID=60
+chr4-04	SwissProt	protein_match	337568	337717	118.000000	+	.	Target=Q3KQV3.2 11 60 +;percentID=52
+chr4-04	SwissProt	protein_match	337568	337696	120.000000	+	.	Target=Q9C0F3.2 11 53 +;percentID=55
+chr4-04	SwissProt	protein_match	337568	337696	120.000000	+	.	Target=Q5R5Y7.1 11 53 +;percentID=55
+chr4-04	SwissProt	protein_match	337568	337699	123.000000	+	.	Target=Q7TNU6.1 14 57 +;percentID=56
+chr4-04	SwissProt	protein_match	337568	337699	123.000000	+	.	Target=P15622-2.3 14 57 +;percentID=56
+chr4-04	SwissProt	protein_match	337568	337699	124.000000	+	.	Target=Q9EQB9.1 163 206 +;percentID=47;sequence=MANSSLSQVLLMWKPGKIQKGPCSAEQRTLTSRLLRDTETCRRNFRNFPYPDVAGPRKALCQLRELCLKWLRPEVHSKEQILELLVLEQFLSILPGEVRTWVNSQYPESSEEVVALVEDLTQILEEEEAPQSSALPQDTPEDDPNHDPNPASQAGWLSDVVTKDLVTFNDVAVDITQEDWELMPPVQKELYKTVTLQNYWNMVSLGLTVYRPTVIPVLEEPWMVIKEIVEGPNPGWEPKAQAQCPAKHLPELKQDGTQTVKLEDSYDDDNDDSVESPPVCAFGMIHIDEEGFSVKSELSQEDPTEEYLSKCDIYRVTFEKHTNLGVQFDTQSDDKTALHNESKPPFSNASSGGAVRGKILPGDKPYSCNVCGKQFRKYPSLLA [...]
+chr4-04	SwissProt	protein_match	337568	337699	124.000000	+	.	Target=Q8N184-2.3 3 46 +;percentID=52
+chr4-04	SwissProt	protein_match	337568	337702	124.000000	+	.	Target=Q9UC07.2 19 65 +;percentID=51;Gap=M3 I2 M42 
+chr4-04	SwissProt	protein_match	337568	337699	124.000000	+	.	Target=Q8N184.3 3 46 +;percentID=52
+chr4-04	SwissProt	protein_match	337568	337699	124.000000	+	.	Target=A8MYF4.2 27 70 +;percentID=52
+chr4-04	SwissProt	protein_match	337568	337699	126.000000	+	.	Target=Q6P9A1.2 11 54 +;percentID=59
+chr4-04	SwissProt	protein_match	337568	337696	127.000000	+	.	Target=Q6ZNG0.1 8 50 +;percentID=58
+chr4-04	SwissProt	protein_match	337568	337696	127.000000	+	.	Target=Q5RB33.1 8 50 +;percentID=58
+chr4-04	SwissProt	protein_match	262859	262972	74.000000	-	.	Target=Q12901.3 413 450 +;percentID=42
+chr4-04	SwissProt	protein_match	262859	262960	74.000000	-	.	Target=P51786.2 319 352 +;percentID=41
+chr4-04	SwissProt	protein_match	262859	262957	76.000000	-	.	Target=Q9NZL3.2 194 226 +;percentID=42
+chr4-04	SwissProt	protein_match	262859	262972	77.000000	-	.	Target=Q86Y25.1 257 294 +;percentID=42
+chr4-04	SwissProt	protein_match	262859	262972	77.000000	-	.	Target=Q8NB42.1 423 460 +;percentID=42
+chr4-04	SwissProt	protein_match	262859	262957	68.000000	-	.	Target=Q8N184-2.3 383 415 +;percentID=42
+chr4-04	SwissProt	protein_match	262859	262972	78.000000	-	.	Target=Q6ZN19-2.1 410 447 +;percentID=42
+chr4-04	SwissProt	protein_match	262859	262957	68.000000	-	.	Target=Q8N184.3 383 415 +;percentID=42
+chr4-04	SwissProt	protein_match	262859	262975	78.000000	-	.	Target=Q8BZW4-2.1 370 409 +;percentID=40;Gap=M6 I1 M33 
+chr4-04	SwissProt	protein_match	262859	262993	72.000000	-	.	Target=Q96GC6.1 569 613 +;percentID=37
+chr4-04	SwissProt	protein_match	262859	262981	79.000000	-	.	Target=Q96NG5.1 162 202 +;percentID=40;Gap=M17 I1 M2 D1 M21 
+chr4-04	SwissProt	protein_match	262859	262993	72.000000	-	.	Target=Q96GC6-2.1 537 581 +;percentID=37
+chr4-04	SwissProt	protein_match	262859	263011	72.000000	-	.	Target=Q8N988.2 341 391 +;percentID=33
+chr4-04	SwissProt	protein_match	262853	262993	72.000000	-	.	Target=Q96NJ3-2.2 335 381 +;percentID=38
+chr4-04	SwissProt	protein_match	262859	262978	81.000000	-	.	Target=Q16587-2.2 438 478 +;percentID=39;Gap=M2 I1 M38 
+chr4-04	SwissProt	protein_match	337568	337711	128.000000	+	.	Target=Q9UJU3.1 5 52 +;percentID=52
+chr4-04	SwissProt	protein_match	337568	337699	129.000000	+	.	Target=P51814.2 66 109 +;percentID=54
+chr4-04	SwissProt	protein_match	337568	337699	129.000000	+	.	Target=P51814-5.2 58 101 +;percentID=54
+chr4-04	SwissProt	protein_match	337568	337699	129.000000	+	.	Target=P51814-2.2 26 69 +;percentID=54
+chr4-04	SwissProt	protein_match	337568	337699	129.000000	+	.	Target=P51814-3.2 34 77 +;percentID=54
+chr4-04	SwissProt	protein_match	337568	337699	129.000000	+	.	Target=P51814-7.2 26 69 +;percentID=54
+chr4-04	SwissProt	protein_match	337568	337699	129.000000	+	.	Target=Q96BR6.2 87 130 +;percentID=54
+chr4-04	SwissProt	protein_match	337568	337699	129.000000	+	.	Target=Q9Y3M9.2 9 52 +;percentID=54
+chr4-04	SwissProt	protein_match	337568	337696	130.000000	+	.	Target=O14709.1 214 256 +;percentID=58
+chr4-04	SwissProt	protein_match	337568	337696	130.000000	+	.	Target=Q02975.1 11 53 +;percentID=58
+chr4-04	SwissProt	protein_match	337568	337696	130.000000	+	.	Target=P08042.3 4 46 +;percentID=55
+chr4-04	SwissProt	protein_match	337568	337711	130.000000	+	.	Target=Q0VAW7.1 5 52 +;percentID=56
+chr4-04	SwissProt	protein_match	337568	337699	133.000000	+	.	Target=Q8IZ26.2 11 54 +;percentID=63
+chr4-04	SwissProt	protein_match	337568	337699	134.000000	+	.	Target=Q5TYW1.2 5 48 +;percentID=54
+chr4-04	SwissProt	protein_match	337568	337699	134.000000	+	.	Target=Q5TYW1-2.2 5 48 +;percentID=54
+chr4-04	SwissProt	protein_match	337568	337699	134.000000	+	.	Target=Q9XSR1.1 12 55 +;percentID=61
+chr4-04	SwissProt	protein_match	337568	337699	134.000000	+	.	Target=Q6PGE4.1 151 194 +;percentID=63
+chr4-04	SwissProt	protein_match	262859	262957	82.000000	-	.	Target=Q5TYW1.2 732 764 +;percentID=42
+chr4-04	SwissProt	protein_match	262859	262972	82.000000	-	.	Target=Q02975.1 506 543 +;percentID=44
+chr4-04	SwissProt	protein_match	262859	263011	82.000000	-	.	Target=P17040-2.3 893 943 +;percentID=35
+chr4-04	SwissProt	protein_match	262859	262972	83.000000	-	.	Target=Q8N859.1 314 351 +;percentID=42
+chr4-04	SwissProt	protein_match	262859	262957	77.000000	-	.	Target=P17031.3 472 504 +;percentID=42
+chr4-04	SwissProt	protein_match	262859	262972	86.000000	-	.	Target=Q86XN6-2.2 479 516 +;percentID=44
+chr4-04	SwissProt	protein_match	262859	262957	78.000000	-	.	Target=Q9UK12.2 163 195 +;percentID=42
+chr4-04	SwissProt	protein_match	262859	262978	86.000000	-	.	Target=A2T6E3.1 452 491 +;percentID=40
+chr4-04	SwissProt	protein_match	262859	262975	78.000000	-	.	Target=Q8BZW4.1 391 430 +;percentID=40;Gap=M6 I1 M33 
+chr4-04	SwissProt	protein_match	262859	262981	88.000000	-	.	Target=Q61116.1 547 587 +;percentID=41
+chr4-04	SwissProt	protein_match	262859	262963	80.000000	-	.	Target=Q9QXT9.1 527 561 +;percentID=42
+chr4-04	SwissProt	protein_match	262859	262957	81.000000	-	.	Target=P15622.3 329 361 +;percentID=42
+chr4-04	SwissProt	protein_match	262859	262978	81.000000	-	.	Target=Q16587-4.2 437 477 +;percentID=39;Gap=M2 I1 M38 
+chr4-04	SwissProt	protein_match	262859	262993	89.000000	-	.	Target=Q969W8.1 261 305 +;percentID=40
+chr4-04	SwissProt	protein_match	262859	262993	72.000000	-	.	Target=Q96GC6-4.1 288 332 +;percentID=37
+chr4-04	SwissProt	protein_match	262859	262972	82.000000	-	.	Target=Q61751.1 502 539 +;percentID=44
+chr4-04	SwissProt	protein_match	337568	337699	134.000000	+	.	Target=Q96GC6-4.1 3 46 +;percentID=59
+chr4-04	SwissProt	protein_match	337568	337738	136.000000	+	.	Target=Q9UK10.2 5 61 +;percentID=47
+chr4-04	SwissProt	protein_match	337568	337696	137.000000	+	.	Target=Q16587-3.2 40 82 +;percentID=58
+chr4-04	SwissProt	protein_match	337568	337708	138.000000	+	.	Target=Q9UJW7.2 31 77 +;percentID=57
+chr4-04	SwissProt	protein_match	337568	337699	138.000000	+	.	Target=A2VDP4.1 3 46 +;percentID=56
+chr4-04	SwissProt	protein_match	337568	337699	138.000000	+	.	Target=P10078-2.3 100 143 +;percentID=61
+chr4-04	SwissProt	protein_match	337568	337699	138.000000	+	.	Target=P10078.3 100 143 +;percentID=61
+chr4-04	SwissProt	protein_match	337568	337708	139.000000	+	.	Target=Q02386.2 5 51 +;percentID=57
+chr4-04	SwissProt	protein_match	337568	337699	139.000000	+	.	Target=Q9QXT9.1 11 54 +;percentID=61
+chr4-04	SwissProt	protein_match	337568	337699	139.000000	+	.	Target=Q61116.1 5 48 +;percentID=61
+chr4-04	SwissProt	protein_match	337568	337699	139.000000	+	.	Target=Q9BY31.2 12 55 +;percentID=61
+chr4-04	SwissProt	protein_match	337568	337696	140.000000	+	.	Target=Q9UL58.1 161 203 +;percentID=65
+chr4-04	SwissProt	protein_match	337568	337738	140.000000	+	.	Target=Q9UK11.1 5 61 +;percentID=50
+chr4-04	SwissProt	protein_match	337568	337699	140.000000	+	.	Target=A6NFI3.1 155 198 +;percentID=63
+chr4-04	SwissProt	protein_match	337568	337702	140.000000	+	.	Target=Q6P560.1 5 49 +;percentID=60
+chr4-04	SwissProt	protein_match	337568	337699	141.000000	+	.	Target=Q2M218.1 5 48 +;percentID=59
+chr4-04	SwissProt	protein_match	337568	337699	142.000000	+	.	Target=Q86Y25.1 9 52 +;percentID=65
+chr4-04	SwissProt	protein_match	337568	337699	142.000000	+	.	Target=Q61751.1 11 54 +;percentID=63
+chr4-04	SwissProt	protein_match	262859	262993	91.000000	-	.	Target=A2T712.1 422 466 +;percentID=42
+chr4-04	SwissProt	protein_match	262859	262993	91.000000	-	.	Target=Q07231.1 504 548 +;percentID=42
+chr4-04	SwissProt	protein_match	262859	262993	91.000000	-	.	Target=A2T7L7.1 422 466 +;percentID=42
+chr4-04	SwissProt	protein_match	262859	262957	84.000000	-	.	Target=Q9UK11.1 194 226 +;percentID=45
+chr4-04	SwissProt	protein_match	262865	262969	73.000000	-	.	Target=Q8BQC8.1 328 362 +;percentID=40
+chr4-04	SwissProt	protein_match	262859	262972	86.000000	-	.	Target=Q86XN6.2 479 516 +;percentID=44
+chr4-04	SwissProt	protein_match	262859	262993	93.000000	-	.	Target=Q86XU0.1 269 313 +;percentID=42
+chr4-04	SwissProt	protein_match	262859	262972	86.000000	-	.	Target=Q86XN6-3.2 425 462 +;percentID=44
+chr4-04	SwissProt	protein_match	262859	263011	96.000000	-	.	Target=Q7Z7L9.1 473 523 +;percentID=41
+chr4-04	SwissProt	protein_match	262859	263002	88.000000	-	.	Target=Q3SY52.1 356 401 +;percentID=41;Gap=M12 D2 M34 
+chr4-04	SwissProt	protein_match	262859	263002	88.000000	-	.	Target=Q3SY52-2.1 301 346 +;percentID=41;Gap=M12 D2 M34 
+chr4-04	SwissProt	protein_match	262859	263002	88.000000	-	.	Target=Q3SY52-3.1 253 298 +;percentID=41;Gap=M12 D2 M34 
+chr4-04	SwissProt	protein_match	262859	262984	98.000000	-	.	Target=Q5REN4.1 498 541 +;percentID=45;Gap=M4 I2 M38 
+chr4-04	SwissProt	protein_match	262859	262993	89.000000	-	.	Target=Q14590-2.3 489 533 +;percentID=42
+chr4-04	SwissProt	protein_match	262859	262993	89.000000	-	.	Target=Q14590.3 493 537 +;percentID=42
+chr4-04	SwissProt	protein_match	262859	262972	82.000000	-	.	Target=Q6NX49.1 561 598 +;percentID=48;Gap=M14 I1 M2 D1 M21 
+chr4-04	SwissProt	protein_match	262859	262993	90.000000	-	.	Target=P17035-2.4 616 660 +;percentID=37
+chr4-04	SwissProt	protein_match	262862	262957	66.000000	-	.	Target=Q60585.2 274 305 +;percentID=40
+chr4-04	SwissProt	protein_match	337568	337699	143.000000	+	.	Target=Q16587.2 40 83 +;percentID=59
+chr4-04	SwissProt	protein_match	337568	337696	143.000000	+	.	Target=Q96PQ6-2.2 54 96 +;percentID=60
+chr4-04	SwissProt	protein_match	337568	337696	144.000000	+	.	Target=Q9HBT8.1 42 80 +;percentID=69;Gap=M25 D4 M14 
+chr4-04	SwissProt	protein_match	337568	337705	144.000000	+	.	Target=P17098.2 22 67 +;percentID=58
+chr4-04	SwissProt	protein_match	337568	337687	144.000000	+	.	Target=Q8NC26.1 3 42 +;percentID=67
+chr4-04	SwissProt	protein_match	337568	337696	147.000000	+	.	Target=Q86T29.1 3 45 +;percentID=62
+chr4-04	SwissProt	protein_match	337568	337687	147.000000	+	.	Target=Q8N4W9.2 21 60 +;percentID=75
+chr4-04	SwissProt	protein_match	337568	337699	148.000000	+	.	Target=Q5REN4.1 5 48 +;percentID=61
+chr4-04	SwissProt	protein_match	337568	337699	148.000000	+	.	Target=Q8NDW4.1 5 48 +;percentID=61
+chr4-04	SwissProt	protein_match	337568	337699	149.000000	+	.	Target=Q9Y2H8.1 43 86 +;percentID=63
+chr4-04	SwissProt	protein_match	337568	337699	149.000000	+	.	Target=Q8N8J6-2.2 5 48 +;percentID=63
+chr4-04	SwissProt	protein_match	337568	337699	149.000000	+	.	Target=Q8N8J6.2 5 48 +;percentID=63
+chr4-04	SwissProt	protein_match	337568	337699	149.000000	+	.	Target=Q8N8J6-3.2 5 48 +;percentID=63
+chr4-04	SwissProt	protein_match	337568	337699	149.000000	+	.	Target=Q5R4K8.2 4 47 +;percentID=63
+chr4-04	SwissProt	protein_match	337568	337699	149.000000	+	.	Target=Q96PQ6.2 54 97 +;percentID=61
+chr4-04	SwissProt	protein_match	337568	337696	151.000000	+	.	Target=P59923.1 231 273 +;percentID=65
+chr4-04	SwissProt	protein_match	337568	337696	151.000000	+	.	Target=Q9NQX6.1 3 45 +;percentID=69
+chr4-04	SwissProt	protein_match	262862	263347	95.000000	-	.	Target=Q96N38-3.1 198 347 +;percentID=27;Gap=M7 I1 M8 I1 M33 I1 M21 D5 M2 D2 M26 D8 M50 
+chr4-04	SwissProt	protein_match	262871	262972	76.000000	-	.	Target=Q9UII5.1 145 178 +;percentID=41
+chr4-04	SwissProt	protein_match	262871	263002	77.000000	-	.	Target=Q9C0F3.2 171 212 +;percentID=40;Gap=M9 D2 M13 I1 M2 D1 M17 
+chr4-04	SwissProt	protein_match	262859	262993	91.000000	-	.	Target=Q6ZNG0-2.1 228 272 +;percentID=42;sequence=MVGGLPGNVSQHLDFGSSLEQPQGHWIIKTKSKRRHFTDTSARHHEAYEVKNGEKFEKLGKNISVSTQLTTNQTNPSGQISYECGQCGRYFIQMADFHRHEKCHTGEKSFECKECGKYFRYNSLLIRHQIIHTGKKPFKCKECGKGLSSDTALIQHQRIHTGEKPYECKECGKAFSSSSVFLQHQRFHTGEKLYECNECWKTFSCSSSFTVHQRMHTGEKPYECKECGKRLSSNTALTQHQRIHTGEKPFECKECGKAFNQKITLIQHQRVHTGEKPYECKVCGKTFSWCGRFILHQKLHTQKTPVQA
+chr4-04	SwissProt	protein_match	262865	262993	76.000000	-	.	Target=Q3KP31.1 362 404 +;percentID=41
+chr4-04	SwissProt	protein_match	262859	262993	92.000000	-	.	Target=Q8TF39.3 529 573 +;percentID=40
+chr4-04	SwissProt	protein_match	262865	262981	80.000000	-	.	Target=Q9XSR1.1 606 644 +;percentID=43
+chr4-04	SwissProt	protein_match	262859	263002	94.000000	-	.	Target=Q9HCX3.1 337 385 +;percentID=40;Gap=M3 I1 M45 
+chr4-04	SwissProt	protein_match	262871	262960	59.000000	-	.	Target=Q96PQ6-4.2 322 351 +;percentID=40
+chr4-04	SwissProt	protein_match	262859	263011	96.000000	-	.	Target=Q7Z7L9-2.1 454 504 +;percentID=41
+chr4-04	SwissProt	protein_match	262859	263002	97.000000	-	.	Target=Q96LW9.2 328 373 +;percentID=43;Gap=M10 D2 M36 
+chr4-04	SwissProt	protein_match	262871	262960	59.000000	-	.	Target=Q96PQ6-2.2 375 404 +;percentID=40
+chr4-04	SwissProt	protein_match	262871	262993	61.000000	-	.	Target=Q8TAF7.2 503 540 +;percentID=40;Gap=M21 I1 M1 D4 M15 
+chr4-04	SwissProt	protein_match	262859	262984	98.000000	-	.	Target=Q8NDW4.1 499 542 +;percentID=45;Gap=M4 I2 M38 
+chr4-04	SwissProt	protein_match	262859	262993	99.000000	-	.	Target=Q9HBT8.1 444 488 +;percentID=42
+chr4-04	SwissProt	protein_match	262859	262978	99.000000	-	.	Target=Q8N2I2.1 394 434 +;percentID=48;Gap=M4 I1 M36 
+chr4-04	SwissProt	protein_match	337568	337696	151.000000	+	.	Target=Q5REA0.1 3 45 +;percentID=69
+chr4-04	SwissProt	protein_match	337568	337699	152.000000	+	.	Target=Q8N9F8.1 11 54 +;percentID=70
+chr4-04	SwissProt	protein_match	337568	337699	152.000000	+	.	Target=Q5JUW0.1 5 48 +;percentID=65
+chr4-04	SwissProt	protein_match	337568	337699	152.000000	+	.	Target=Q9BS31.1 5 48 +;percentID=65
+chr4-04	SwissProt	protein_match	337568	337699	152.000000	+	.	Target=Q2M3X9.1 5 48 +;percentID=65
+chr4-04	SwissProt	protein_match	337568	337699	152.000000	+	.	Target=Q5JUW0-2.1 5 48 +;percentID=65
+chr4-04	SwissProt	protein_match	337568	337699	152.000000	+	.	Target=Q06730.3 9 52 +;percentID=63
+chr4-04	SwissProt	protein_match	337568	337699	152.000000	+	.	Target=P52738.2 3 46 +;percentID=70
+chr4-04	SwissProt	protein_match	337568	337699	152.000000	+	.	Target=Q5JUW0-3.1 5 48 +;percentID=65
+chr4-04	SwissProt	protein_match	337568	337702	154.000000	+	.	Target=Q96JL9.3 200 244 +;percentID=64
+chr4-04	SwissProt	protein_match	337568	337699	154.000000	+	.	Target=A6NDX5.5 39 82 +;percentID=65
+chr4-04	SwissProt	protein_match	337568	337699	155.000000	+	.	Target=Q5MCW4.1 5 48 +;percentID=63
+chr4-04	SwissProt	protein_match	337568	337717	155.000000	+	.	Target=P10755.2 5 55 +;percentID=60;Gap=M44 I1 M6 
+chr4-04	SwissProt	protein_match	337568	337699	156.000000	+	.	Target=Q6ZMY9.1 11 54 +;percentID=68
+chr4-04	SwissProt	protein_match	337568	337699	156.000000	+	.	Target=Q9BX82.1 11 54 +;percentID=63
+chr4-04	SwissProt	protein_match	337568	337699	157.000000	+	.	Target=Q96RE9.1 5 48 +;percentID=63
+chr4-04	SwissProt	protein_match	337568	337699	157.000000	+	.	Target=Q96RE9-3.1 21 64 +;percentID=63
+chr4-04	SwissProt	protein_match	262871	262960	65.000000	-	.	Target=Q9HCZ1.2 645 674 +;percentID=43
+chr4-04	SwissProt	protein_match	262871	262960	65.000000	-	.	Target=Q5RES8.1 643 672 +;percentID=43
+chr4-04	SwissProt	protein_match	262859	263002	99.000000	-	.	Target=Q9Y2H8.1 434 482 +;percentID=42;Gap=M3 I1 M45 
+chr4-04	SwissProt	protein_match	262892	262993	83.000000	-	.	Target=O14628.2 250 283 +;percentID=41
+chr4-04	SwissProt	protein_match	262859	262972	90.000000	-	.	Target=Q80W31.1 276 313 +;percentID=42
+chr4-04	SwissProt	protein_match	262871	263002	77.000000	-	.	Target=Q8BPP0.1 153 194 +;percentID=40;Gap=M9 D2 M13 I1 M2 D1 M17 
+chr4-04	SwissProt	protein_match	262871	262972	81.000000	-	.	Target=Q9Y6Q3.3 586 619 +;percentID=47
+chr4-04	SwissProt	protein_match	262865	262969	73.000000	-	.	Target=Q8BQC8-2.1 327 361 +;percentID=40
+chr4-04	SwissProt	protein_match	262871	263002	82.000000	-	.	Target=Q5R5Y7.1 171 212 +;percentID=42;Gap=M9 D2 M13 I1 M2 D1 M17 
+chr4-04	SwissProt	protein_match	262865	262978	77.000000	-	.	Target=P17027.3 542 580 +;percentID=41;Gap=M3 I1 M35 
+chr4-04	SwissProt	protein_match	262871	262984	86.000000	-	.	Target=Q06732.2 476 515 +;percentID=45;Gap=M4 I2 M34 
+chr4-04	SwissProt	protein_match	262871	262957	59.000000	-	.	Target=Q8N8J6-3.2 541 569 +;percentID=41
+chr4-04	SwissProt	protein_match	262871	262993	90.000000	-	.	Target=Q3MIS6.1 499 539 +;percentID=43
+chr4-04	SwissProt	protein_match	262871	262960	59.000000	-	.	Target=Q96PQ6-3.2 290 319 +;percentID=40
+chr4-04	SwissProt	protein_match	262871	262960	59.000000	-	.	Target=Q96PQ6.2 407 436 +;percentID=40
+chr4-04	SwissProt	protein_match	262871	262993	99.000000	-	.	Target=Q06730.3 474 514 +;percentID=48
+chr4-04	SwissProt	protein_match	262880	262969	63.000000	-	.	Target=Q86UE3.2 287 318 +;percentID=40;Gap=M22 I2 M8 
+chr4-04	SwissProt	protein_match	262871	262993	61.000000	-	.	Target=Q8TAF7-2.2 376 413 +;percentID=40;Gap=M21 I1 M1 D4 M15 
+chr4-04	SwissProt	protein_match	262871	262957	62.000000	-	.	Target=P51508.3 600 628 +;percentID=41
+chr4-04	SwissProt	protein_match	337568	337699	157.000000	+	.	Target=Q96RE9-2.1 20 63 +;percentID=63
+chr4-04	SwissProt	protein_match	337568	337699	159.000000	+	.	Target=O60765.2 11 54 +;percentID=70
+chr4-04	SwissProt	protein_match	337568	337687	160.000000	+	.	Target=Q8N823.1 21 60 +;percentID=77
+chr4-04	SwissProt	protein_match	337568	337696	160.000000	+	.	Target=A2VDQ7.1 3 45 +;percentID=72
+chr4-04	SwissProt	protein_match	337568	337696	161.000000	+	.	Target=Q8NB42.1 11 53 +;percentID=72
+chr4-04	SwissProt	protein_match	337568	337699	164.000000	+	.	Target=Q969W8.1 3 46 +;percentID=65
+chr4-04	SwissProt	protein_match	337568	337699	164.000000	+	.	Target=Q8R1D1.1 36 79 +;percentID=63
+chr4-04	SwissProt	protein_match	337568	337699	164.000000	+	.	Target=Q6J6I6.1 3 46 +;percentID=65
+chr4-04	SwissProt	protein_match	337568	337696	165.000000	+	.	Target=Q8TAQ5.1 3 45 +;percentID=72
+chr4-04	SwissProt	protein_match	337568	337699	166.000000	+	.	Target=Q8N859.1 16 59 +;percentID=72
+chr4-04	SwissProt	protein_match	337568	337696	166.000000	+	.	Target=Q86TJ5.1 42 84 +;percentID=69
+chr4-04	SwissProt	protein_match	337568	337699	168.000000	+	.	Target=Q9P2J8.3 51 94 +;percentID=68
+chr4-04	SwissProt	protein_match	337568	337699	172.000000	+	.	Target=Q8N9Z0.2 21 64 +;percentID=79
+chr4-04	SwissProt	protein_match	337568	337699	172.000000	+	.	Target=Q8N9Z0-2.2 21 64 +;percentID=79
+chr4-04	SwissProt	protein_match	337568	337714	183.000000	+	.	Target=Q96SE7.1 5 53 +;percentID=73
+chr4-04	SwissProt	protein_match	337568	337714	186.000000	+	.	Target=Q9HCG1.2 5 53 +;percentID=77
+chr4-04	SwissProt	protein_match	337568	337699	192.000000	+	.	Target=O14628-6.2 5 48 +;percentID=86
+chr4-04	SwissProt	protein_match	337568	337699	192.000000	+	.	Target=O14628-7.2 5 48 +;percentID=86
+chr4-04	SwissProt	protein_match	262889	262972	70.000000	-	.	Target=Q9BY31.2 457 484 +;percentID=50
+chr4-04	SwissProt	protein_match	262892	262972	67.000000	-	.	Target=Q9BWM5.1 535 561 +;percentID=40
+chr4-04	SwissProt	protein_match	262892	262993	81.000000	-	.	Target=Q6ZNA1.2 308 341 +;percentID=50
+chr4-04	SwissProt	protein_match	262901	263011	68.000000	-	.	Target=Q5RBQ3.1 304 340 +;percentID=40
+chr4-04	SwissProt	protein_match	262871	262972	71.000000	-	.	Target=A0JPL0.1 308 341 +;percentID=41
+chr4-04	SwissProt	protein_match	262892	262993	83.000000	-	.	Target=O14628-6.2 231 264 +;percentID=41
+chr4-04	SwissProt	protein_match	262892	262993	83.000000	-	.	Target=O14628-4.2 178 211 +;percentID=41
+chr4-04	SwissProt	protein_match	262892	262993	83.000000	-	.	Target=O14628-7.2 182 215 +;percentID=41
+chr4-04	SwissProt	protein_match	262901	262951	50.000000	-	.	Target=Q9NV72.1 262 278 +;percentID=52
+chr4-04	SwissProt	protein_match	262871	262972	81.000000	-	.	Target=Q9Y6Q3-2.3 601 634 +;percentID=47
+chr4-04	SwissProt	protein_match	262901	262960	51.000000	-	.	Target=Q9UIE0.3 325 344 +;percentID=45
+chr4-04	SwissProt	protein_match	262871	262984	86.000000	-	.	Target=Q06732-2.2 364 403 +;percentID=45;Gap=M4 I2 M34 
+chr4-04	SwissProt	protein_match	262901	262978	56.000000	-	.	Target=Q15935.2 278 304 +;percentID=44;Gap=M2 I1 M24 
+chr4-04	SwissProt	protein_match	262871	262978	88.000000	-	.	Target=Q9Y6R6.1 175 211 +;percentID=45;Gap=M2 I1 M34 
+chr4-04	SwissProt	protein_match	262901	262984	57.000000	-	.	Target=Q96JC4.1 192 221 +;percentID=43;Gap=M4 I2 M24 
+chr4-04	SwissProt	protein_match	262871	263002	90.000000	-	.	Target=P52738.2 247 291 +;percentID=42;Gap=M3 I1 M41 
+chr4-04	SwissProt	protein_match	337568	337696	195.000000	+	.	Target=Q5RER9.1 5 47 +;percentID=88
+chr4-04	SwissProt	protein_match	337568	337696	195.000000	+	.	Target=Q9NV72.1 5 47 +;percentID=88
+chr4-04	SwissProt	protein_match	337568	337708	195.000000	+	.	Target=Q86XU0.1 5 51 +;percentID=78
+chr4-04	SwissProt	protein_match	337568	337696	195.000000	+	.	Target=A2RRD8.1 5 47 +;percentID=88
+chr4-04	SwissProt	protein_match	337568	337696	195.000000	+	.	Target=Q5VIY5.1 5 47 +;percentID=88
+chr4-04	SwissProt	protein_match	337568	337696	195.000000	+	.	Target=Q6ZN06.2 5 47 +;percentID=88
+chr4-04	SwissProt	protein_match	337568	337696	195.000000	+	.	Target=Q7L2R6.2 5 47 +;percentID=88
+chr4-04	SwissProt	protein_match	337568	337696	195.000000	+	.	Target=Q96IR2.2 5 47 +;percentID=88
+chr4-04	SwissProt	protein_match	337568	337696	195.000000	+	.	Target=P17035.4 5 47 +;percentID=88
+chr4-04	SwissProt	protein_match	337568	337696	195.000000	+	.	Target=Q7L2R6-2.2 5 47 +;percentID=88;sequence=MALPQGLLTFRDVAIEFSQEEWKCLDPAQRTLYRDVMLENYRNLVSLELSGECPLAAPAS
+chr4-04	SwissProt	protein_match	337571	337696	127.000000	+	.	Target=Q15935.2 2 43 +;percentID=57
+chr4-04	SwissProt	protein_match	337571	337696	129.000000	+	.	Target=Q5REF1.1 46 87 +;percentID=59
+chr4-04	SwissProt	protein_match	337571	337699	130.000000	+	.	Target=P52742.2 12 54 +;percentID=58
+chr4-04	SwissProt	protein_match	337571	337699	134.000000	+	.	Target=Q5JVG2.1 6 48 +;percentID=55
+chr4-04	SwissProt	protein_match	337571	337699	136.000000	+	.	Target=Q2TAN0.1 5 47 +;percentID=60
+chr4-04	SwissProt	protein_match	337571	337699	136.000000	+	.	Target=A8MVS1.1 5 47 +;percentID=60
+chr4-04	SwissProt	protein_match	337571	337699	136.000000	+	.	Target=A8K971.2 5 47 +;percentID=60
+chr4-04	SwissProt	protein_match	337571	337699	139.000000	+	.	Target=Q8BZW4.1 26 68 +;percentID=55
+chr4-04	SwissProt	protein_match	262904	262972	49.000000	-	.	Target=Q9NYW8.1 524 546 +;percentID=47
+chr4-04	SwissProt	protein_match	262901	262984	57.000000	-	.	Target=A6NF79.3 191 220 +;percentID=43;Gap=M4 I2 M24 
+chr4-04	SwissProt	protein_match	262901	262984	57.000000	-	.	Target=A6NKZ1.3 191 220 +;percentID=43;Gap=M4 I2 M24 
+chr4-04	SwissProt	protein_match	262871	262993	90.000000	-	.	Target=Q3MIS6-2.1 266 306 +;percentID=43
+chr4-04	SwissProt	protein_match	262901	262972	58.000000	-	.	Target=Q6ZMW2.1 351 374 +;percentID=45
+chr4-04	SwissProt	protein_match	262901	262957	61.000000	-	.	Target=Q8N823.1 612 630 +;percentID=52
+chr4-04	SwissProt	protein_match	262880	262972	74.000000	-	.	Target=Q96NJ3.2 385 417 +;percentID=48;Gap=M23 I2 M8 
+chr4-04	SwissProt	protein_match	262901	262963	67.000000	-	.	Target=Q6ZNG0.1 380 400 +;percentID=52
+chr4-04	SwissProt	protein_match	262904	262996	54.000000	-	.	Target=A8MVS1.1 261 291 +;percentID=41
+chr4-04	SwissProt	protein_match	262901	262993	68.000000	-	.	Target=Q9UK10.2 602 632 +;percentID=41
+chr4-04	SwissProt	protein_match	262901	263011	68.000000	-	.	Target=Q6P9A3-2.1 291 327 +;percentID=40
+chr4-04	SwissProt	protein_match	262892	262993	83.000000	-	.	Target=O14628-5.2 227 260 +;percentID=41
+chr4-04	SwissProt	protein_match	262901	262993	70.000000	-	.	Target=Q96IR2.2 669 699 +;percentID=45
+chr4-04	SwissProt	protein_match	262901	263014	76.000000	-	.	Target=Q494X3.1 354 391 +;percentID=42
+chr4-04	SwissProt	protein_match	262901	262993	81.000000	-	.	Target=A2RRD8.1 251 281 +;percentID=48
+chr4-04	SwissProt	protein_match	262901	263002	83.000000	-	.	Target=Q8TAU3.1 522 556 +;percentID=40;Gap=M3 I1 M31 
+chr4-04	SwissProt	protein_match	262901	262957	50.000000	-	.	Target=P16374.2 247 265 +;percentID=42
+chr4-04	SwissProt	protein_match	337571	337699	140.000000	+	.	Target=Q9UK12.2 6 48 +;percentID=62
+chr4-04	SwissProt	protein_match	337571	337762	142.000000	+	.	Target=P17097.1 2 59 +;percentID=46;Gap=M44 D6 M14 
+chr4-04	SwissProt	protein_match	337571	337762	142.000000	+	.	Target=Q5RBX0.1 2 59 +;percentID=46;Gap=M44 D6 M14 
+chr4-04	SwissProt	protein_match	337571	337696	142.000000	+	.	Target=Q96GC6.1 12 53 +;percentID=64
+chr4-04	SwissProt	protein_match	337571	337696	142.000000	+	.	Target=Q96GC6-2.1 12 53 +;percentID=64
+chr4-04	SwissProt	protein_match	337571	337771	143.000000	+	.	Target=Q8BZW4-2.1 26 102 +;percentID=41;Gap=M43 I6 M4 I4 M20 
+chr4-04	SwissProt	protein_match	337571	337699	152.000000	+	.	Target=Q571J5.2 12 54 +;percentID=67
+chr4-04	SwissProt	protein_match	337571	337711	153.000000	+	.	Target=Q96MR9.2 108 154 +;percentID=61
+chr4-04	SwissProt	protein_match	337571	337711	157.000000	+	.	Target=P10076.2 7 53 +;percentID=59
+chr4-04	SwissProt	protein_match	337571	337699	168.000000	+	.	Target=Q8TAF7.2 4 46 +;percentID=72
+chr4-04	SwissProt	protein_match	337571	337699	173.000000	+	.	Target=Q96H40.3 2 44 +;percentID=79
+chr4-04	SwissProt	protein_match	337571	337699	175.000000	+	.	Target=O95780.1 2 44 +;percentID=81
+chr4-04	SwissProt	protein_match	337571	337699	210.000000	+	.	Target=Q3SXZ3.1 2 44 +;percentID=93
+chr4-04	SwissProt	protein_match	337571	337699	218.000000	+	.	Target=Q8IYB9.1 2 44 +;percentID=95
+chr4-04	SwissProt	protein_match	337571	337780	220.000000	+	.	Target=Q8TB69.1 2 71 +;percentID=64
+chr4-04	SwissProt	protein_match	337571	337699	229.000000	+	.	Target=Q15928.1 2 44 +;percentID=100
+chr4-04	SwissProt	protein_match	337574	337699	110.000000	+	.	Target=Q96NL3.1 8 49 +;percentID=54
+chr4-04	SwissProt	protein_match	262904	262993	57.000000	-	.	Target=Q5REI6.1 334 363 +;percentID=40
+chr4-04	SwissProt	protein_match	262904	262993	58.000000	-	.	Target=O43296.1 405 434 +;percentID=40
+chr4-04	SwissProt	protein_match	262904	262972	59.000000	-	.	Target=Q9NQX6.1 172 194 +;percentID=43
+chr4-04	SwissProt	protein_match	262901	263002	83.000000	-	.	Target=A8MYF4.2 272 306 +;percentID=48;Gap=M2 I1 M32 
+chr4-04	SwissProt	protein_match	262901	263002	86.000000	-	.	Target=Q96SQ5.1 522 556 +;percentID=42;Gap=M3 I1 M31 
+chr4-04	SwissProt	protein_match	262904	262957	48.000000	-	.	Target=A1L1L7.1 295 312 +;percentID=44
+chr4-04	SwissProt	protein_match	262901	262963	56.000000	-	.	Target=Q5RB33.1 380 400 +;percentID=50;Gap=M11 I1 M3 D1 M6 
+chr4-04	SwissProt	protein_match	262904	262957	62.000000	-	.	Target=Q2VY69.1 501 518 +;percentID=61
+chr4-04	SwissProt	protein_match	262901	262957	56.000000	-	.	Target=Q96MR9.2 366 384 +;percentID=52
+chr4-04	SwissProt	protein_match	262904	262957	50.000000	-	.	Target=A6NF35.2 400 417 +;percentID=44
+chr4-04	SwissProt	protein_match	262904	262972	52.000000	-	.	Target=Q96H40.3 186 208 +;percentID=43
+chr4-04	SwissProt	protein_match	262904	262993	53.000000	-	.	Target=P17020.3 467 496 +;percentID=40
+chr4-04	SwissProt	protein_match	262901	262984	57.000000	-	.	Target=P0CB33.1 192 221 +;percentID=43;Gap=M4 I2 M24 
+chr4-04	SwissProt	protein_match	262904	262993	53.000000	-	.	Target=A2T759.1 467 496 +;percentID=40
+chr4-04	SwissProt	protein_match	262904	262996	54.000000	-	.	Target=Q2TAN0.1 261 291 +;percentID=41
+chr4-04	SwissProt	protein_match	262901	262984	64.000000	-	.	Target=P52744.2 117 146 +;percentID=40;Gap=M4 I2 M24 
+chr4-04	SwissProt	protein_match	262904	262996	54.000000	-	.	Target=A8K971.2 261 291 +;percentID=41
+chr4-04	SwissProt	protein_match	262904	262960	55.000000	-	.	Target=Q8IYB9.1 497 515 +;percentID=47
+chr4-04	SwissProt	protein_match	337574	337711	120.000000	+	.	Target=Q0VAW7-2.1 1 46 +;percentID=54
+chr4-04	SwissProt	protein_match	337574	337699	123.000000	+	.	Target=P51815.2 234 275 +;percentID=54
+chr4-04	SwissProt	protein_match	337574	337699	125.000000	+	.	Target=Q02525.2 58 99 +;percentID=54
+chr4-04	SwissProt	protein_match	337574	337699	139.000000	+	.	Target=P17031.3 13 54 +;percentID=57
+chr4-04	SwissProt	protein_match	337574	337699	150.000000	+	.	Target=P21506.3 13 54 +;percentID=66
+chr4-04	SwissProt	protein_match	337574	337717	154.000000	+	.	Target=Q6JLC9.1 5 53 +;percentID=65;Gap=M42 I1 M6 
+chr4-04	SwissProt	protein_match	337574	337699	164.000000	+	.	Target=Q80W31.1 7 48 +;percentID=69
+chr4-04	SwissProt	protein_match	337574	337699	164.000000	+	.	Target=Q7Z2F6.1 3 44 +;percentID=80
+chr4-04	SwissProt	protein_match	337574	337699	165.000000	+	.	Target=O75437.3 12 53 +;percentID=80
+chr4-04	SwissProt	protein_match	337574	337699	165.000000	+	.	Target=O75437-2.3 12 53 +;percentID=80
+chr4-04	SwissProt	protein_match	337574	337699	168.000000	+	.	Target=Q5R5S6.1 5 46 +;percentID=73
+chr4-04	SwissProt	protein_match	337574	337696	169.000000	+	.	Target=Q95K52.1 48 88 +;percentID=78
+chr4-04	SwissProt	protein_match	337574	337699	169.000000	+	.	Target=Q6PG37.1 4 45 +;percentID=71
+chr4-04	SwissProt	protein_match	337574	337696	169.000000	+	.	Target=Q8N7M2.3 72 112 +;percentID=78
+chr4-04	SwissProt	protein_match	337574	337699	172.000000	+	.	Target=Q8TD23.2 3 44 +;percentID=78
+chr4-04	SwissProt	protein_match	337574	337699	172.000000	+	.	Target=Q8NDQ6.1 5 46 +;percentID=76
+chr4-04	SwissProt	protein_match	337574	337699	172.000000	+	.	Target=Q8NDQ6-2.1 5 46 +;percentID=76
+chr4-04	SwissProt	protein_match	292426	292476	47.000000	+	.	Target=Q9QXT9.1 317 334 +;percentID=55;Gap=M3 I1 M14 
+chr4-04	SwissProt	protein_match	297619	297732	43.000000	+	.	Target=Q80YP6.1 56 88 +;percentID=42;Gap=M4 D1 M13 D3 M8 D1 M8 
+chr4-04	SwissProt	protein_match	297682	297747	43.000000	-	.	Target=Q5CZA5.2 34 55 +;percentID=40
+chr4-04	SwissProt	protein_match	297695	297769	44.000000	-	.	Target=Q96BR6.2 240 265 +;percentID=46;Gap=M14 I1 M11 
+chr4-04	SwissProt	protein_match	289828	289947	150.000000	-	.	Target=Q8NC26.1 3 42 +;percentID=70
+chr4-04	SwissProt	protein_match	262904	262993	55.000000	-	.	Target=Q2TL60.1 335 364 +;percentID=40
+chr4-04	SwissProt	protein_match	262904	262972	55.000000	-	.	Target=Q9NSJ1.2 248 270 +;percentID=43
+chr4-04	SwissProt	protein_match	262904	262957	56.000000	-	.	Target=P17035.4 261 278 +;percentID=55
+chr4-04	SwissProt	protein_match	262901	263011	68.000000	-	.	Target=Q6P9A3.1 304 340 +;percentID=40
+chr4-04	SwissProt	protein_match	309913	309948	45.000000	-	.	Target=Q96MU6.2 184 195 +;percentID=50
+chr4-04	SwissProt	protein_match	309931	309963	42.000000	-	.	Target=Q9NQZ8.1 50 60 +;percentID=63
+chr4-04	SwissProt	protein_match	262904	262972	59.000000	-	.	Target=Q5REA0.1 172 194 +;percentID=43
+chr4-04	SwissProt	protein_match	262904	262972	60.000000	-	.	Target=Q8N4W9.2 860 882 +;percentID=47
+chr4-04	SwissProt	protein_match	262904	262972	60.000000	-	.	Target=Q8N4W9-2.2 791 813 +;percentID=47
+chr4-04	SwissProt	protein_match	262904	262993	61.000000	-	.	Target=Q8N972.1 146 175 +;percentID=43
+chr4-04	SwissProt	protein_match	290717	290743	41.000000	+	.	Target=Q8N587.2 112 120 +;percentID=55
+chr4-04	SwissProt	protein_match	262904	262957	48.000000	-	.	Target=P0C7V5.1 323 340 +;percentID=44
+chr4-04	SwissProt	protein_match	337574	337696	173.000000	+	.	Target=Q5R5Q6.1 5 45 +;percentID=75
+chr4-04	SwissProt	protein_match	337574	337699	175.000000	+	.	Target=A6NNF4.3 3 44 +;percentID=80
+chr4-04	SwissProt	protein_match	337574	337699	175.000000	+	.	Target=A6NNF4-2.3 3 44 +;percentID=80
+chr4-04	SwissProt	protein_match	337574	337696	176.000000	+	.	Target=Q7Z3V5.3 5 45 +;percentID=78
+chr4-04	SwissProt	protein_match	337574	337699	177.000000	+	.	Target=Q14586.2 3 44 +;percentID=80
+chr4-04	SwissProt	protein_match	262904	262993	53.000000	-	.	Target=A1YF12.1 467 496 +;percentID=40
+chr4-04	SwissProt	protein_match	289816	289941	192.000000	-	.	Target=A6NF79.3 15 56 +;percentID=85
+chr4-04	SwissProt	protein_match	289816	289938	193.000000	-	.	Target=Q5HY98.1 9 49 +;percentID=87
+chr4-04	SwissProt	protein_match	304298	304339	41.000000	-	.	Target=Q9BR84.1 157 170 +;percentID=42
+chr4-04	SwissProt	protein_match	305582	305650	42.000000	+	.	Target=Q9NQX6.1 384 406 +;percentID=43
+chr4-04	SwissProt	protein_match	289816	289965	195.000000	-	.	Target=Q8TF32.2 25 75 +;percentID=72;Gap=M7 I1 M43 
+chr4-04	SwissProt	protein_match	299392	299412	41.000000	+	.	Target=Q7L2R6.2 371 377 +;percentID=85
+chr4-04	SwissProt	protein_match	299447	299506	48.000000	-	.	Target=P08042-2.3 59 80 +;percentID=54;Gap=M9 I2 M11 
+chr4-04	SwissProt	protein_match	314164	314202	43.000000	+	.	Target=Q96N20.1 154 166 +;percentID=53
+chr4-04	SwissProt	protein_match	299526	299576	42.000000	+	.	Target=Q9BY31.2 451 467 +;percentID=47
+chr4-04	SwissProt	protein_match	300802	300843	43.000000	+	.	Target=Q9UNY5.1 21 34 +;percentID=57;sequence=MAVSLTAAETLALQGTQGQEKMMMMGPKEEEQSCEYETRLPGNHSTSQEIFRQRFRHLRYQETPGPREALSQLRVLCCEWLRPEKHTKEQILEFLVLEQFLTILPEELQSWVRGHHPKSGEEAVTVLEDLEKGLEPEPQVPGPAHGPAQEEPWEKKESLGAAQEALSIQLQPKETQPFPKSEQVYLHFLSVVTEDGPEPKDKGSLPQPPITEVESQVFSEKLATDTSTFEATSEGTLELQQRNPKAERLRWSPAQEESFRQMVVIHKEIPTGKKDHECSECGKTFIYNSHLVVHQRVHSGEKPYKCSDCGKTFKQSSNLGQHQRIHTGEKPFECNECGKAFRWGAHLVQHQRIHSGEKPYECNECGKAFSQSSYLSQHRRIHSGEK [...]
+chr4-04	SwissProt	protein_match	305582	305650	46.000000	+	.	Target=Q2KI58.1 349 371 +;percentID=47
+chr4-04	SwissProt	protein_match	305582	305650	46.000000	+	.	Target=Q5REF1.1 394 416 +;percentID=47
+chr4-04	SwissProt	protein_match	305582	305650	46.000000	+	.	Target=Q2M3W8.1 350 372 +;percentID=47
+chr4-04	SwissProt	protein_match	305582	305650	47.000000	+	.	Target=Q86YE8.3 199 221 +;percentID=47
+chr4-04	SwissProt	protein_match	291510	291557	40.000000	-	.	Target=A2VDQ7.1 319 334 +;percentID=56
+chr4-04	SwissProt	protein_match	291510	291566	45.000000	-	.	Target=Q7Z3V5.3 261 279 +;percentID=47
+chr4-04	SwissProt	protein_match	262904	263011	62.000000	-	.	Target=Q9UJW7.2 684 719 +;percentID=41
+chr4-04	SwissProt	protein_match	262904	262993	62.000000	-	.	Target=Q9BUY5.1 482 511 +;percentID=40
+chr4-04	SwissProt	protein_match	262904	262972	62.000000	-	.	Target=Q96N38-2.1 186 208 +;percentID=43
+chr4-04	SwissProt	protein_match	262904	262957	49.000000	-	.	Target=Q96SK3.3 215 232 +;percentID=44
+chr4-04	SwissProt	protein_match	262904	262993	62.000000	-	.	Target=Q6N045.2 465 494 +;percentID=43
+chr4-04	SwissProt	protein_match	298892	298930	40.000000	-	.	Target=Q6AZW8.1 97 109 +;percentID=53
+chr4-04	SwissProt	protein_match	299000	299074	40.000000	-	.	Target=Q96BR6.2 19 39 +;percentID=44;Gap=M13 D4 M8 
+chr4-04	SwissProt	protein_match	299029	299091	41.000000	+	.	Target=Q0VAW7.1 175 194 +;percentID=47;Gap=M8 D1 M12 
+chr4-04	SwissProt	protein_match	292226	292291	44.000000	-	.	Target=Q9HBT7.1 207 227 +;percentID=45;Gap=M17 D1 M4 
+chr4-04	SwissProt	protein_match	292408	292476	42.000000	+	.	Target=Q61751.1 289 312 +;percentID=45;Gap=M9 I1 M14 
+chr4-04	SwissProt	protein_match	306830	306880	48.000000	-	.	Target=Q6ZMV8.1 132 149 +;percentID=50;Gap=M13 I1 M4 
+chr4-04	SwissProt	protein_match	289819	289944	132.000000	-	.	Target=Q15935.2 2 43 +;percentID=59
+chr4-04	SwissProt	protein_match	289819	289947	200.000000	-	.	Target=P17035.4 5 47 +;percentID=88
+chr4-04	SwissProt	protein_match	305158	305232	40.000000	+	.	Target=B2RUI1.2 229 253 +;percentID=40
+chr4-04	SwissProt	protein_match	297709	297756	44.000000	+	.	Target=Q8TAF7-2.2 63 78 +;percentID=56
+chr4-04	SwissProt	protein_match	310059	310121	57.000000	+	.	Target=Q80YP6.1 79 98 +;percentID=52;Gap=M10 D1 M10 
+chr4-04	SwissProt	protein_match	311006	311071	43.000000	-	.	Target=B2RUI1.2 295 315 +;percentID=45;Gap=M2 D1 M19 
+chr4-04	SwissProt	protein_match	311242	311352	45.000000	+	.	Target=Q9BS31.1 153 184 +;percentID=40;Gap=M7 D2 M8 D3 M17 
+chr4-04	SwissProt	protein_match	297778	297837	41.000000	+	.	Target=Q6PGE4.1 280 299 +;percentID=45
+chr4-04	SwissProt	protein_match	297946	297993	44.000000	+	.	Target=Q03936-3.2 473 488 +;percentID=50
+chr4-04	SwissProt	protein_match	297946	297993	44.000000	+	.	Target=Q03936.2 505 520 +;percentID=50
+chr4-04	SwissProt	protein_match	305585	305650	40.000000	+	.	Target=Q96MU6.2 325 346 +;percentID=40
+chr4-04	SwissProt	protein_match	297957	297986	41.000000	+	.	Target=Q6GQR8.2 12 21 +;percentID=60
+chr4-04	SwissProt	protein_match	303265	303324	40.000000	-	.	Target=Q8BQC8.1 249 268 +;percentID=40
+chr4-04	SwissProt	protein_match	303265	303324	40.000000	-	.	Target=Q8BQC8-2.1 248 267 +;percentID=40
+chr4-04	SwissProt	protein_match	290641	290703	40.000000	+	.	Target=Q80W31.1 214 232 +;percentID=47;Gap=M14 D2 M5 
+chr4-04	SwissProt	protein_match	303442	303477	40.000000	+	.	Target=A6NK21.3 62 73 +;percentID=50
+chr4-04	SwissProt	protein_match	262904	262972	62.000000	-	.	Target=Q96N38.1 186 208 +;percentID=43
+chr4-04	SwissProt	protein_match	303772	303813	40.000000	-	.	Target=P15622.3 81 95 +;percentID=53;Gap=M1 I1 M13 
+chr4-04	SwissProt	protein_match	303772	303813	40.000000	-	.	Target=P15622-2.3 76 90 +;percentID=53;Gap=M1 I1 M13 
+chr4-04	SwissProt	protein_match	292789	292818	40.000000	-	.	Target=Q7Z340-2.3 245 254 +;percentID=50
+chr4-04	SwissProt	protein_match	304283	304366	40.000000	-	.	Target=Q5VIY5-2.1 81 112 +;percentID=37;Gap=M15 I4 M13 
+chr4-04	SwissProt	protein_match	297596	297622	40.000000	-	.	Target=P51814-6.2 327 335 +;percentID=66
+chr4-04	SwissProt	protein_match	304914	304952	40.000000	-	.	Target=Q9UL58.1 67 80 +;percentID=57;Gap=M10 I1 M3 
+chr4-04	SwissProt	protein_match	299383	299412	40.000000	+	.	Target=Q6ZN06.2 368 377 +;percentID=60
+chr4-04	SwissProt	protein_match	297596	297622	40.000000	-	.	Target=P51814-2.2 329 337 +;percentID=66
+chr4-04	SwissProt	protein_match	297596	297622	40.000000	-	.	Target=P51814-4.2 241 249 +;percentID=66
+chr4-04	SwissProt	protein_match	305561	305611	45.000000	-	.	Target=P10755.2 168 184 +;percentID=41
+chr4-04	SwissProt	protein_match	305561	305611	50.000000	-	.	Target=Q9HCL3.2 200 216 +;percentID=47
+chr4-04	SwissProt	protein_match	314176	314205	50.000000	+	.	Target=Q86YE8-3.3 381 390 +;percentID=70
+chr4-04	SwissProt	protein_match	330025	330195	40.000000	-	.	Target=Q16587-4.2 149 205 +;percentID=28;Gap=M24 I1 M9 D2 M13 I1 M9 
+chr4-04	SwissProt	protein_match	297596	297643	43.000000	-	.	Target=Q8N9F8.1 171 186 +;percentID=43
+chr4-04	SwissProt	protein_match	300802	300843	43.000000	+	.	Target=Q9UNY5-2.1 21 34 +;percentID=57;sequence=MAVSLTAAETLALQGTQGQEKMMMMGPKEEEQSCEYETRLPGNHSTSQEIFRQRFRHLRYQETPGPREALSQLRVLCCEWLRPEKHTKEQILEFLVLEQFLTILPEELQSWVRGHHPKSGEEAVTVLEDLEKGLEPEPQVPGPAHGPAQEEPWEKKESLGAAQEALSIQLQPKETQPFPKSVVTEDGPEPKDKGSLPQPPITEVESQVFSEKLATDTSTFEATSEGTLELQQRNPKAERLRWSPAQEESFRQMVVIHKEIPTGKKDHECSECGKTFIYNSHLVVHQRVHSGEKPYKCSDCGKTFKQSSNLGQHQRIHTGEKPFECNECGKAFRWGAHLVQHQRIHSGEKPYECNECGKAFSQSSYLSQHRRIHSGEKPFICKEC [...]
+chr4-04	SwissProt	protein_match	298104	298148	40.000000	+	.	Target=Q9UK13.2 250 264 +;percentID=46
+chr4-04	SwissProt	protein_match	300956	301000	42.000000	-	.	Target=Q06732-2.2 338 352 +;percentID=46
+chr4-04	SwissProt	protein_match	305570	305611	41.000000	-	.	Target=Q9H7R5.1 281 294 +;percentID=42
+chr4-04	SwissProt	protein_match	298178	298237	42.000000	+	.	Target=Q61116.1 265 284 +;percentID=45
+chr4-04	SwissProt	protein_match	305570	305611	42.000000	-	.	Target=Q9QXT9.1 206 219 +;percentID=50
+chr4-04	SwissProt	protein_match	305570	305611	42.000000	-	.	Target=Q68DY1.2 229 242 +;percentID=42
+chr4-04	SwissProt	protein_match	305570	305611	42.000000	-	.	Target=Q68DY1-2.2 153 166 +;percentID=42
+chr4-04	SwissProt	protein_match	291510	291566	45.000000	-	.	Target=Q5R5Q6.1 260 278 +;percentID=47
+chr4-04	SwissProt	protein_match	305570	305611	44.000000	-	.	Target=Q03923-2.3 365 378 +;percentID=42
+chr4-04	SwissProt	protein_match	291712	291771	41.000000	+	.	Target=Q6ZN57.1 272 291 +;percentID=50
+chr4-04	SwissProt	protein_match	305570	305611	45.000000	-	.	Target=P10751.2 225 238 +;percentID=50
+chr4-04	SwissProt	protein_match	289819	289950	146.000000	-	.	Target=Q4R882.1 37 80 +;percentID=59
+chr4-04	SwissProt	protein_match	291712	291753	41.000000	+	.	Target=Q2M3W8.1 407 420 +;percentID=64
+chr4-04	SwissProt	protein_match	289819	289947	147.000000	-	.	Target=Q86T29.1 3 45 +;percentID=60
+chr4-04	SwissProt	protein_match	289819	289947	149.000000	-	.	Target=Q9HBT8.1 42 80 +;percentID=69;Gap=M25 D4 M14 
+chr4-04	SwissProt	protein_match	305049	305096	40.000000	-	.	Target=Q8N972.1 318 333 +;percentID=50
+chr4-04	SwissProt	protein_match	331865	331930	49.000000	+	.	Target=Q96H86.2 6 27 +;percentID=40
+chr4-04	SwissProt	protein_match	305477	305536	45.000000	+	.	Target=Q06730.3 88 106 +;percentID=40;Gap=M9 D1 M10 
+chr4-04	SwissProt	protein_match	292426	292476	48.000000	+	.	Target=Q02975.1 299 316 +;percentID=55;Gap=M3 I1 M14 
+chr4-04	SwissProt	protein_match	289816	289941	180.000000	-	.	Target=A6NNF4.3 3 44 +;percentID=83
+chr4-04	SwissProt	protein_match	305558	305611	44.000000	-	.	Target=Q68EA5.3 196 212 +;percentID=50;Gap=M13 D1 M4 
+chr4-04	SwissProt	protein_match	305558	305611	48.000000	-	.	Target=Q5JVG8.1 257 274 +;percentID=44
+chr4-04	SwissProt	protein_match	289825	289956	139.000000	-	.	Target=Q96NJ3.2 2 45 +;percentID=63
+chr4-04	SwissProt	protein_match	329233	329271	44.000000	-	.	Target=O60765.2 332 344 +;percentID=69
+chr4-04	SwissProt	protein_match	315445	315471	40.000000	+	.	Target=Q6GQR8.2 3 11 +;percentID=66
+chr4-04	SwissProt	protein_match	289855	289947	75.000000	-	.	Target=A1YG48.1 152 182 +;percentID=41
+chr4-04	SwissProt	protein_match	289855	289947	75.000000	-	.	Target=Q53GI3.2 152 182 +;percentID=41
+chr4-04	SwissProt	protein_match	313873	313911	41.000000	+	.	Target=Q8N7M2.3 153 164 +;percentID=69;Gap=M2 D1 M10 
+chr4-04	SwissProt	protein_match	305677	305715	40.000000	-	.	Target=P18725-2.2 255 267 +;percentID=46
+chr4-04	SwissProt	protein_match	314111	314146	42.000000	+	.	Target=Q7Z340-3.3 168 179 +;percentID=41;sequence=MPAPVGRRSPPSPRSSMAAVALRDSAQGMTFEDVAIYFSQEEWELLDESQRFLYCDVMLENFAHVTSLGYCHGMENEAIASEQSVSIQVRTSKGNTPTQKTHLSEIKMCVPVLKDILPAAEHQTTSPVQKSYLGSTSMRGFCFSADLHQHQKHYNEEEPWKRKVDEATFVTGCRFHVLNYFTCGEAFPAPTDLLQHEATPSGEEPHSSSSKHIQAFFNAKSYYKWGEYRKASSHKHTLVQHQSVCSEGGLYECSKCEKAFTCKNTLVQHQQIHTGQKMFECSECEESFSKKCHLILHKIIHTGERPYECSDREKAFIHKSEFIHHQRRHTGGVRHECGECRKTFSYKSNLIEHQRVHTGERP
+chr4-04	SwissProt	protein_match	298029	298118	47.000000	+	.	Target=A6NFI3.1 296 323 +;percentID=40;Gap=M2 D2 M26 
+chr4-04	SwissProt	protein_match	303442	303477	45.000000	+	.	Target=A6NK75.3 30 41 +;percentID=58
+chr4-04	SwissProt	protein_match	299049	299129	41.000000	-	.	Target=Q3SY52-2.1 21 43 +;percentID=40;Gap=M3 D4 M20 
+chr4-04	SwissProt	protein_match	299097	299171	49.000000	-	.	Target=Q14593.3 10 34 +;percentID=60
+chr4-04	SwissProt	protein_match	303817	303894	49.000000	-	.	Target=P52738.2 75 100 +;percentID=46
+chr4-04	SwissProt	protein_match	299378	299410	42.000000	-	.	Target=O75123.1 210 220 +;percentID=63
+chr4-04	SwissProt	protein_match	292789	292818	40.000000	-	.	Target=Q7Z340.3 318 327 +;percentID=50
+chr4-04	SwissProt	protein_match	299383	299412	40.000000	+	.	Target=Q86XN6-2.2 367 376 +;percentID=60
+chr4-04	SwissProt	protein_match	297580	297780	56.000000	+	.	Target=Q6ZN19-2.1 211 281 +;percentID=32;Gap=M12 I1 M4 I2 M4 I1 M47 
+chr4-04	SwissProt	protein_match	314176	314205	50.000000	+	.	Target=Q86YE8-4.3 352 361 +;percentID=70
+chr4-04	SwissProt	protein_match	297596	297622	40.000000	-	.	Target=P51814.2 369 377 +;percentID=66
+chr4-04	SwissProt	protein_match	314179	314202	40.000000	+	.	Target=P35789-2.4 367 374 +;percentID=62
+chr4-04	SwissProt	protein_match	305564	305611	42.000000	-	.	Target=Q9BX82.1 290 305 +;percentID=43
+chr4-04	SwissProt	protein_match	305564	305662	42.000000	-	.	Target=Q96SK3-2.3 80 111 +;percentID=27;Gap=M13 D1 M19 
+chr4-04	SwissProt	protein_match	305564	305611	44.000000	-	.	Target=Q15937.2 305 320 +;percentID=43
+chr4-04	SwissProt	protein_match	305582	305650	47.000000	+	.	Target=Q86YE8-4.3 132 154 +;percentID=47
+chr4-04	SwissProt	protein_match	305570	305611	40.000000	-	.	Target=O43296.1 287 300 +;percentID=42
+chr4-04	SwissProt	protein_match	305570	305611	41.000000	-	.	Target=Q9HCG1.2 313 326 +;percentID=42
+chr4-04	SwissProt	protein_match	312139	312174	41.000000	+	.	Target=Q5SXM1.1 159 170 +;percentID=50
+chr4-04	SwissProt	protein_match	305570	305611	41.000000	-	.	Target=Q5R8X1.1 281 294 +;percentID=42
+chr4-04	SwissProt	protein_match	313296	313346	42.000000	+	.	Target=Q0P4W9.1 147 163 +;percentID=47;sequence=MDSSLQHKTTKIFPSQASRDSLSNRVTMISGAKPLAFSIERIMSRTPEPKCLPVPSLLQGSVPKGDQKQALHINSSSIPCMIPFVPVAYDHCPKIGISGAELRKSHLDSSPPFSCNDLLNCALTLKGDFPREALPLQQYKLVRPRVVNHSSFHAMGAAFCYFNRGDSQCHPPASINIHPVASYFLGSPLHQAPKSYLAERNKLVLPSVEKFSSGVTFKDLSQAQFQHYMKEGAHSLSDKITFKTSAKFSSASPSNKPKVFTCEVCGKVFNAHYNLTRHMPVHTGARPFVCKICGKGFRQASTLCRHKIIHTQEKPHKCNQCGKAFNRSSTLNTHTRIHAGYKPFVCEFCGKGFHQKGNYKNHKLTHSGEKQFKCNICNKAFHQI [...]
+chr4-04	SwissProt	protein_match	313336	313389	45.000000	-	.	Target=A8MTY0.2 114 131 +;percentID=55
+chr4-04	SwissProt	protein_match	314233	314268	40.000000	+	.	Target=A8MUZ8.2 166 177 +;percentID=41
+chr4-04	SwissProt	protein_match	289816	289941	195.000000	-	.	Target=O14628.2 3 44 +;percentID=90
+chr4-04	SwissProt	protein_match	314233	314268	40.000000	+	.	Target=A8K971.2 166 177 +;percentID=41
+chr4-04	SwissProt	protein_match	305570	305611	44.000000	-	.	Target=Q03923.3 398 411 +;percentID=42
+chr4-04	SwissProt	protein_match	304914	304952	43.000000	-	.	Target=P17040-3.3 70 83 +;percentID=57;Gap=M10 I1 M3 ;sequence=MAMALELQAQASPQPEPEELLIVKLEEDSWGSESKLWEKDRGSVSGPEASRQRFRQFQYRDAAGPHEAFSQLWALCCRWLRPEIRLKEQILELLVLEQFLTILPREVQTWVQARHPESGEEAVALVEDWHRETRTAGQSGLELHTEETRPLKTGEEAQSFQLQPVDPWPEGQSQKKGVKNTCPDLPNHLNAEVAPQPLKESAVLTPRVPTLPKMGSVGDWEVTAESQEALGPGKHAEKELCKDPPGDDCGNSVCLGVPVSKPSNTSEKEQGPEFWGLSLINSGKRSTADYSLDNEPAQALTWRDSRAWEEQYQWDVEDMKVSGVHWGYEETKTFLAILSESPFSEKLRTCHQNRQVYRAIAEQLRARGF [...]
+chr4-04	SwissProt	protein_match	304914	304952	43.000000	-	.	Target=P17040.3 70 83 +;percentID=57;Gap=M10 I1 M3 ;sequence=MAMALELQAQASPQPEPEELLIVKLEEDSWGSESKLWEKDRGSVSGPEASRQRFRQFQYRDAAGPHEAFSQLWALCCRWLRPEIRLKEQILELLVLEQFLTILPREVQTWVQARHPESGEEAVALVEDWHRETRTAGQSGLELHTEETRPLKTGEEAQSFQLQPVDPWPEGQSQKKGVKNTCPDLPNHLNAEVAPQPLKESAVLTPRVPTLPKMGSVGDWEVTAESQEALGPGKHAEKELCKDPPGDDCGNSVCLGVPVSKPSNTSEKEQGPEFWGLSLINSGKRSTADYSLDNEPAQALTWRDSRAWEEQYQWDVEDMKVSGVHWGYEETKTFLAILSESPFSEKLRTCHQNRQVYRAIAEQLRARGFLR [...]
+chr4-04	SwissProt	protein_match	298816	298857	40.000000	-	.	Target=B2KFW1-2.2 227 240 +;percentID=42
+chr4-04	SwissProt	protein_match	304963	304995	41.000000	-	.	Target=Q9UC07.2 8 18 +;percentID=72
+chr4-04	SwissProt	protein_match	305033	305071	43.000000	+	.	Target=Q9C0F3.2 130 142 +;percentID=61
+chr4-04	SwissProt	protein_match	305033	305071	43.000000	+	.	Target=Q5R5Y7.1 130 142 +;percentID=61
+chr4-04	SwissProt	protein_match	311264	311308	40.000000	+	.	Target=Q86WZ6.1 271 285 +;percentID=46
+chr4-04	SwissProt	protein_match	311305	311382	43.000000	+	.	Target=Q6P9Y7-2.1 411 436 +;percentID=42
+chr4-04	SwissProt	protein_match	311305	311382	43.000000	+	.	Target=Q6P9Y7.1 411 436 +;percentID=42
+chr4-04	SwissProt	protein_match	289819	289950	146.000000	-	.	Target=P0C7V5.1 37 80 +;percentID=61
+chr4-04	SwissProt	protein_match	305558	305611	43.000000	-	.	Target=Q8IYB9.1 312 328 +;percentID=50;Gap=M11 D1 M6 
+chr4-04	SwissProt	protein_match	315625	315663	40.000000	+	.	Target=Q7TNU6.1 424 436 +;percentID=53
+chr4-04	SwissProt	protein_match	289819	289950	152.000000	-	.	Target=Q6V9R5.2 37 80 +;percentID=63
+chr4-04	SwissProt	protein_match	314185	314253	44.000000	+	.	Target=P52737.1 392 414 +;percentID=43
+chr4-04	SwissProt	protein_match	305585	305659	45.000000	+	.	Target=Q6P9A3.1 447 472 +;percentID=46;Gap=M22 I1 M3 
+chr4-04	SwissProt	protein_match	305585	305650	49.000000	+	.	Target=Q14588.3 374 395 +;percentID=40
+chr4-04	SwissProt	protein_match	305677	305715	40.000000	-	.	Target=P18725.2 280 292 +;percentID=46
+chr4-04	SwissProt	protein_match	289819	289947	200.000000	-	.	Target=Q7L2R6-2.2 5 47 +;percentID=88
+chr4-04	SwissProt	protein_match	305680	305781	40.000000	-	.	Target=Q32KN0.1 124 155 +;percentID=41;Gap=M21 D2 M11 
+chr4-04	SwissProt	protein_match	314164	314268	51.000000	+	.	Target=Q5VIY5-2.1 163 195 +;percentID=30;Gap=M3 I1 M10 D1 M6 D2 M13 
+chr4-04	SwissProt	protein_match	305680	305709	40.000000	-	.	Target=Q9P2J8.3 403 412 +;percentID=70
+chr4-04	SwissProt	protein_match	297946	297993	44.000000	+	.	Target=Q03936-2.2 436 451 +;percentID=50
+chr4-04	SwissProt	protein_match	328939	328974	40.000000	+	.	Target=Q6DD87.1 36 47 +;percentID=50;sequence=MELREEAWSPGPLDSEDQQMASHENPVDILIMDDDDVPSWPPTKLSPPQSAPPAGPPPRPRPPAPYICNECGKSFSHWSKLTRHQRTHTGERPNACADCGKTFSQSSHLVQHRRIHTGEKPYACLECGKRFSWSSNLMQHQRIHTGEKPYTCPDCGRSFTQSKSLAKHRRSHSGLKPFVCPRCGRGFSQPKSLARHLRLHPELSGPGVAAKVLAASVRRAKGPEEAVAADGEIAIPVGDGEGIIVVGAPGEGAAAAAAMAGAGAKAAGPRSRRAPAPKPYVCLECGKGFGHGAGLLAHQRAQHGDGLGAAGGEEPAHICVECGEGFVQGAALRRHKKIHAVGAPSVCSSCGQSYYRAGGEEEDDDDEAAGGRCPECRAGEGR
+chr4-04	SwissProt	protein_match	314173	314202	40.000000	+	.	Target=Q6N045.2 343 352 +;percentID=60
+chr4-04	SwissProt	protein_match	299049	299129	41.000000	-	.	Target=Q3SY52.1 76 98 +;percentID=40;Gap=M3 D4 M20 
+chr4-04	SwissProt	protein_match	331425	331475	41.000000	-	.	Target=Q569E7.1 200 216 +;percentID=52
+chr4-04	SwissProt	protein_match	305582	305650	43.000000	+	.	Target=O75346.2 173 195 +;percentID=43
+chr4-04	SwissProt	protein_match	299266	299307	41.000000	+	.	Target=O95201.2 256 269 +;percentID=50
+chr4-04	SwissProt	protein_match	292435	292533	55.000000	+	.	Target=Q99676.3 46 78 +;percentID=45;Gap=M7 D2 M14 I2 M10 
+chr4-04	SwissProt	protein_match	292463	292498	40.000000	+	.	Target=A6NNF4.3 52 63 +;percentID=50
+chr4-04	SwissProt	protein_match	292463	292498	40.000000	+	.	Target=A6NNF4-2.3 52 63 +;percentID=50
+chr4-04	SwissProt	protein_match	299383	299412	40.000000	+	.	Target=Q86XN6.2 367 376 +;percentID=60
+chr4-04	SwissProt	protein_match	290720	290752	43.000000	+	.	Target=Q2VY69.1 378 388 +;percentID=54
+chr4-04	SwissProt	protein_match	291425	291460	40.000000	-	.	Target=O43296.1 92 103 +;percentID=50
+chr4-04	SwissProt	protein_match	330731	330799	41.000000	+	.	Target=P59923.1 907 929 +;percentID=43
+chr4-04	SwissProt	protein_match	330822	330908	47.000000	+	.	Target=P10754.2 80 107 +;percentID=45;Gap=M3 I1 M15 D3 M6 I1 M2 
+chr4-04	SwissProt	protein_match	305564	305611	45.000000	-	.	Target=O75346-2.2 208 223 +;percentID=43
+chr4-04	SwissProt	protein_match	313296	313346	42.000000	+	.	Target=Q9IAJ2.1 147 163 +;percentID=47
+chr4-04	SwissProt	protein_match	305708	305746	42.000000	+	.	Target=P10077.2 253 265 +;percentID=53
+chr4-04	SwissProt	protein_match	314233	314268	40.000000	+	.	Target=A8MVS1.1 166 177 +;percentID=41
+chr4-04	SwissProt	protein_match	313418	313495	41.000000	-	.	Target=Q5RBQ3.1 248 273 +;percentID=42
+chr4-04	SwissProt	protein_match	313477	313524	41.000000	-	.	Target=Q14587.2 114 129 +;percentID=50
+chr4-04	SwissProt	protein_match	298101	298151	43.000000	+	.	Target=Q9EQB9.1 234 249 +;percentID=47;Gap=M13 D1 M3 
+chr4-04	SwissProt	protein_match	337574	337699	187.000000	+	.	Target=A6NF79.3 15 56 +;percentID=85
+chr4-04	SwissProt	protein_match	305570	305617	43.000000	-	.	Target=Q96IR2.2 605 620 +;percentID=43
+chr4-04	SwissProt	protein_match	314310	314339	40.000000	+	.	Target=A8K971.2 196 205 +;percentID=60
+chr4-04	SwissProt	protein_match	315625	315663	40.000000	+	.	Target=P15622.3 449 461 +;percentID=53
+chr4-04	SwissProt	protein_match	310052	310087	41.000000	-	.	Target=Q5REI6.1 66 77 +;percentID=50
+chr4-04	SwissProt	protein_match	314310	314339	40.000000	+	.	Target=Q8TC21-2.2 149 158 +;percentID=60
+chr4-04	SwissProt	protein_match	314310	314339	45.000000	+	.	Target=A8MWA4.1 198 207 +;percentID=70
+chr4-04	SwissProt	protein_match	304923	304952	41.000000	-	.	Target=Q8TF39.3 71 80 +;percentID=70
+chr4-04	SwissProt	protein_match	329319	329369	42.000000	+	.	Target=A1L1L7.1 111 127 +;percentID=41
+chr4-04	SwissProt	protein_match	305582	305650	47.000000	+	.	Target=Q86YE8-2.3 131 153 +;percentID=47
+chr4-04	SwissProt	protein_match	305582	305650	48.000000	+	.	Target=Q9Y2Q1.1 460 482 +;percentID=47
+chr4-04	SwissProt	protein_match	305582	305653	51.000000	+	.	Target=Q4R6C2.1 395 418 +;percentID=50
+chr4-04	SwissProt	protein_match	305582	305653	51.000000	+	.	Target=Q8NA42.1 395 418 +;percentID=50
+chr4-04	SwissProt	protein_match	329627	329665	41.000000	+	.	Target=Q5JUW0-2.1 99 111 +;percentID=53
+chr4-04	SwissProt	protein_match	314185	314253	44.000000	+	.	Target=Q9UC07.2 220 242 +;percentID=43
+chr4-04	SwissProt	protein_match	305585	305659	45.000000	+	.	Target=Q5RBQ3.1 447 472 +;percentID=46;Gap=M22 I1 M3 
+chr4-04	SwissProt	protein_match	314111	314146	42.000000	+	.	Target=Q7Z340.3 168 179 +;percentID=41
+chr4-04	SwissProt	protein_match	314212	314268	42.000000	+	.	Target=Q6ECI4-2.2 296 312 +;percentID=47;Gap=M4 D2 M13 
+chr4-04	SwissProt	protein_match	314126	314185	47.000000	-	.	Target=Q6ZMW2.1 12 31 +;percentID=45
+chr4-04	SwissProt	protein_match	314230	314268	40.000000	+	.	Target=Q9UIE0.3 161 173 +;percentID=46
+chr4-04	SwissProt	protein_match	337574	337699	188.000000	+	.	Target=O14628-5.2 3 44 +;percentID=88
+chr4-04	SwissProt	protein_match	331425	331475	41.000000	-	.	Target=Q5TEC3.2 187 203 +;percentID=52
+chr4-04	SwissProt	protein_match	305576	305611	41.000000	-	.	Target=O75373.2 313 324 +;percentID=50
+chr4-04	SwissProt	protein_match	305582	305650	41.000000	+	.	Target=Q8TAF7.2 470 492 +;percentID=43
+chr4-04	SwissProt	protein_match	305680	305712	42.000000	-	.	Target=Q96SE7.1 387 397 +;percentID=72
+chr4-04	SwissProt	protein_match	314176	314205	50.000000	+	.	Target=Q86YE8.3 419 428 +;percentID=70
+chr4-04	SwissProt	protein_match	331790	331831	44.000000	-	.	Target=Q1LZ87.1 140 153 +;percentID=50
+chr4-04	SwissProt	protein_match	311311	311382	44.000000	+	.	Target=Q14590-2.3 225 248 +;percentID=41
+chr4-04	SwissProt	protein_match	314176	314205	50.000000	+	.	Target=Q86YE8-2.3 351 360 +;percentID=70
+chr4-04	SwissProt	protein_match	311382	311414	43.000000	-	.	Target=Q5REN4.1 137 147 +;percentID=54
+chr4-04	SwissProt	protein_match	337565	337699	137.000000	+	.	Target=Q5RB30.1 23 67 +;percentID=57
+chr4-04	SwissProt	protein_match	305582	305647	43.000000	+	.	Target=A2T6E3.1 415 436 +;percentID=45
+chr4-04	SwissProt	protein_match	330855	330917	42.000000	+	.	Target=Q5RB30.1 1 17 +;percentID=42;Gap=M8 D4 M9 
+chr4-04	SwissProt	protein_match	330862	330906	44.000000	+	.	Target=Q6ZMW2.1 549 561 +;percentID=53;Gap=M6 D2 M7 
+chr4-04	SwissProt	protein_match	330904	330957	42.000000	+	.	Target=Q16587.2 4 21 +;percentID=44
+chr4-04	SwissProt	protein_match	330904	330957	42.000000	+	.	Target=Q16587-3.2 4 21 +;percentID=44
+chr4-04	SwissProt	protein_match	299383	299412	40.000000	+	.	Target=Q5RER9.1 368 377 +;percentID=60
+chr4-04	SwissProt	protein_match	331137	331178	40.000000	+	.	Target=Q8IW36-3.3 62 75 +;percentID=57
+chr4-04	SwissProt	protein_match	337574	337699	188.000000	+	.	Target=O14628.2 3 44 +;percentID=88
+chr4-04	SwissProt	protein_match	337577	337702	124.000000	+	.	Target=Q8TC21.2 7 48 +;percentID=50
+chr4-04	SwissProt	protein_match	299383	299412	40.000000	+	.	Target=Q8N4W9.2 300 309 +;percentID=60
+chr4-04	SwissProt	protein_match	337574	337699	189.000000	+	.	Target=Q8IYX0.1 15 56 +;percentID=88
+chr4-04	SwissProt	protein_match	305708	305746	42.000000	+	.	Target=P10077-2.2 253 265 +;percentID=53
+chr4-04	SwissProt	protein_match	337574	337744	225.000000	+	.	Target=Q8IW36-3.3 3 59 +;percentID=73
+chr4-04	SwissProt	protein_match	314310	314339	40.000000	+	.	Target=A8MVS1.1 196 205 +;percentID=60
+chr4-04	SwissProt	protein_match	337577	337699	113.000000	+	.	Target=Q8TAW3.2 49 89 +;percentID=56
+chr4-04	SwissProt	protein_match	329262	329294	42.000000	+	.	Target=Q5REN4.1 137 147 +;percentID=54
+chr4-04	SwissProt	protein_match	314310	314339	40.000000	+	.	Target=Q8TC21.2 219 228 +;percentID=60
+chr4-04	SwissProt	protein_match	337577	337699	115.000000	+	.	Target=Q5RBQ3.1 27 67 +;percentID=53
+chr4-04	SwissProt	protein_match	298059	298193	56.000000	+	.	Target=Q6PG37.1 54 94 +;percentID=40;Gap=M14 D3 M24 D1 M3 
+chr4-04	SwissProt	protein_match	314417	314455	41.000000	+	.	Target=Q86YE8-3.3 23 35 +;percentID=53
+chr4-04	SwissProt	protein_match	329617	329685	49.000000	+	.	Target=O75290.3 41 62 +;percentID=56;Gap=M12 D1 M10 
+chr4-04	SwissProt	protein_match	304914	304952	40.000000	-	.	Target=Q9Z1D9.2 63 76 +;percentID=50;Gap=M10 I1 M3 
+chr4-04	SwissProt	protein_match	304914	304952	43.000000	-	.	Target=B2KFW1.2 64 77 +;percentID=57;Gap=M10 I1 M3 
+chr4-04	SwissProt	protein_match	337574	337735	183.000000	+	.	Target=A8MUV8.3 3 56 +;percentID=66
+chr4-04	SwissProt	protein_match	298645	298695	43.000000	+	.	Target=Q0RDS4.1 164 181 +;percentID=50;Gap=M13 I1 M4 ;sequence=MAGKARVHELAKELGVDSKTVLAKLKDLGEFVKSASSTVEAPVVRKLKEAFPAEGGSASGGRPGGRPGPGNGARPAPPRPGLAPRPGPRPVPGRPGPAARPGGPAAPSAPAAPSAPAPGAPAASPPASQPRPIAASAAAPPPAATSIPPVSSPAAASGPRPGPRPAGGPAAPGRARPGAPVPPPGGSAPSAPSAGGPRPGPRPGPRPSAPGNNPYTTPSAGPRQSAGQSGSGPASPPRPGAPRPGPRPGGPRPGAPGAGGPRPSPGSMPPRPGSRPGGSGGMPPRPGGSGGPRPNANMFQPRPAGGAPGRPGGGGAPGRPGGGGGGGGARPGGFAGRGGAPGRPGGGGGGGGGAGAPGRPGGGGGGRPA [...]
+chr4-04	SwissProt	protein_match	331137	331178	40.000000	+	.	Target=Q8IW36-2.3 62 75 +;percentID=57
+chr4-04	SwissProt	protein_match	330025	330195	40.000000	-	.	Target=Q16587-2.2 150 206 +;percentID=28;Gap=M24 I1 M9 D2 M13 I1 M9 
+chr4-04	SwissProt	protein_match	330173	330238	40.000000	+	.	Target=Q6ZMY9.1 113 134 +;percentID=40
+chr4-04	SwissProt	protein_match	330177	330359	75.000000	+	.	Target=Q29RK0.1 669 725 +;percentID=41;Gap=M24 D1 M1 D2 M17 I1 M7 D2 M7 ;sequence=MTEESEETVLYIEHRYVCSECNQLYGSLEEVLMHQNSHVPQQHFELVGVADPGVTVAAEAASGTGLYQTLVQESQYQCLECGQLLMSPSQLLEHQELHLKMMAPQEAVPAEPPPKAPALSSSTIHYECVDCKALFASQELWLNHRQTHLRATPTKPPTPVVLGSPVVVGSPVGQTRVAVEHSYRKAEEGGEGAAVPSAAATTTEVVTEVELLLYKCSECSQLFQLPADFLEHQATHFPAPAPESEEPVLQQETLTPAPVEVPVSQPEPVPSSDHSYELRNGEALGRDRRGRRARRNNSGEPGGAATQELFCSACDQLFLSPHQLQQHLRSHREGVFKCPLCSRVFPSPSS [...]
+chr4-04	SwissProt	protein_match	314185	314253	44.000000	+	.	Target=Q0D2J5.2 200 222 +;percentID=43
+chr4-04	SwissProt	protein_match	331467	331490	40.000000	+	.	Target=P17098.2 318 325 +;percentID=75
+chr4-04	SwissProt	protein_match	314212	314268	42.000000	+	.	Target=Q6ECI4.2 414 430 +;percentID=47;Gap=M4 D2 M13 
+chr4-04	SwissProt	protein_match	305477	305536	45.000000	+	.	Target=Q06732.2 89 107 +;percentID=40;Gap=M9 D1 M10 
+chr4-04	SwissProt	protein_match	331769	331837	50.000000	+	.	Target=Q9UJU3.1 163 186 +;percentID=48;Gap=M4 I2 M10 D1 M8 
+chr4-04	SwissProt	protein_match	337577	337699	114.000000	+	.	Target=Q13398-6.2 13 53 +;percentID=58
+chr4-04	SwissProt	protein_match	331810	331863	41.000000	+	.	Target=Q6PGE4.1 64 81 +;percentID=44
+chr4-04	SwissProt	protein_match	330637	330699	42.000000	-	.	Target=Q14593.3 7 27 +;percentID=42
+chr4-04	SwissProt	protein_match	330666	330716	40.000000	-	.	Target=Q9UJW8.2 2 18 +;percentID=47
+chr4-04	SwissProt	protein_match	330681	330737	41.000000	+	.	Target=Q642B9.1 322 341 +;percentID=40;Gap=M15 I1 M4 ;sequence=MPVNLGQALGLLPFLAKAEDATFSGSDVIQQRELANPETARQLFRQFRYQVMSGPQETLRQLRKLCFQWLRPEVHTKEQILEILMLEQFLTILPGEIQMWVRKQCPGSGEEAVTLVESLKGDPQKLWQWISIQVLGQEIPFEKENSARCRGDKVEPALEAEPTVEVVPQDLPLQNTSSAPGELLSHGVKEESDLEPELALAASQLPARPEERPTRDQEVGTALLPSLQEEQWRHLDSTQKEQYWDLMLETYGKMVSGVAGISNSKPDLTNMAEYGEELVGLHLHSAEKMARAPCKEDRQENDKENLNLENHRDQGCLDVFDQAPGEAPPQTALSDFFGESEPHHFGGESVPEALENLQGEGTGAHLFPH [...]
+chr4-04	SwissProt	protein_match	337577	337699	117.000000	+	.	Target=Q96H86.2 26 66 +;percentID=56
+chr4-04	SwissProt	protein_match	337577	337699	123.000000	+	.	Target=Q9Y473.1 27 67 +;percentID=56
+chr4-04	SwissProt	protein_match	305582	305650	41.000000	+	.	Target=Q5JVG2.1 609 631 +;percentID=43
+chr4-04	SwissProt	protein_match	305582	305650	42.000000	+	.	Target=Q05481.1 1135 1157 +;percentID=43
+chr4-04	SwissProt	protein_match	337574	337699	181.000000	+	.	Target=P0CB33.1 15 56 +;percentID=83
+chr4-04	SwissProt	protein_match	337577	337696	125.000000	+	.	Target=Q2M3W8.1 4 43 +;percentID=57
+chr4-04	SwissProt	protein_match	305582	305650	42.000000	+	.	Target=Q5REA0.1 384 406 +;percentID=43
+chr4-04	SwissProt	protein_match	337574	337699	187.000000	+	.	Target=Q96JC4.1 15 56 +;percentID=85
+chr4-04	SwissProt	protein_match	337574	337744	225.000000	+	.	Target=Q8IW36-2.3 3 59 +;percentID=73
+chr4-04	SwissProt	protein_match	337577	337699	105.000000	+	.	Target=B2RUI1.2 48 88 +;percentID=56
+chr4-04	SwissProt	protein_match	337577	337699	110.000000	+	.	Target=Q3SY52.1 27 67 +;percentID=53
+chr4-04	SwissProt	protein_match	337574	337699	188.000000	+	.	Target=O14628-4.2 3 44 +;percentID=88
+chr4-04	SwissProt	protein_match	337577	337705	127.000000	+	.	Target=Q8N972.1 4 46 +;percentID=53
+chr4-04	SwissProt	protein_match	337574	337699	189.000000	+	.	Target=Q05481.1 12 53 +;percentID=85
+chr4-04	SwissProt	protein_match	337577	337696	127.000000	+	.	Target=A8MWA4.1 7 46 +;percentID=60
+chr4-04	SwissProt	protein_match	337577	337699	129.000000	+	.	Target=Q96CS4.1 29 69 +;percentID=63
+chr4-04	SwissProt	protein_match	337577	337699	115.000000	+	.	Target=B1APH4.3 37 77 +;percentID=53
+chr4-04	SwissProt	protein_match	337577	337699	116.000000	+	.	Target=Q6P9A3-2.1 14 54 +;percentID=53
+chr4-04	SwissProt	protein_match	337577	337699	116.000000	+	.	Target=Q6P9A3.1 27 67 +;percentID=53
+chr4-04	SwissProt	protein_match	337577	337702	130.000000	+	.	Target=Q3KP31.1 4 45 +;percentID=54
+chr4-04	SwissProt	protein_match	314310	314339	40.000000	+	.	Target=Q6ZN79.1 196 205 +;percentID=60
+chr4-04	SwissProt	protein_match	306797	306826	41.000000	+	.	Target=Q6V9R5.2 84 93 +;percentID=70
+chr4-04	SwissProt	protein_match	329617	329685	49.000000	+	.	Target=Q9Y6R6.1 41 62 +;percentID=56;Gap=M12 D1 M10 
+chr4-04	SwissProt	protein_match	337577	337702	133.000000	+	.	Target=Q8IYI8.1 4 45 +;percentID=57
+chr4-04	SwissProt	protein_match	329617	329685	49.000000	+	.	Target=O75290-2.3 57 78 +;percentID=56;Gap=M12 D1 M10 
+chr4-04	SwissProt	protein_match	329627	329665	41.000000	+	.	Target=Q5JUW0.1 104 116 +;percentID=53
+chr4-04	SwissProt	protein_match	315604	315663	44.000000	+	.	Target=A6NDX5.5 296 315 +;percentID=40
+chr4-04	SwissProt	protein_match	329633	329671	41.000000	+	.	Target=A6NK31.3 543 555 +;percentID=46
+chr4-04	SwissProt	protein_match	331369	331407	40.000000	+	.	Target=Q6P3V2.2 83 95 +;percentID=46
+chr4-04	SwissProt	protein_match	337565	337738	149.000000	+	.	Target=Q9NZL3.2 4 61 +;percentID=53
+chr4-04	SwissProt	protein_match	337577	337699	127.000000	+	.	Target=Q7Z340.3 29 69 +;percentID=60
+chr4-04	SwissProt	protein_match	337565	337699	151.000000	+	.	Target=Q06732.2 8 52 +;percentID=62
+chr4-04	SwissProt	protein_match	331664	331810	47.000000	-	.	Target=Q96GC6.1 25 81 +;percentID=28;Gap=M4 I3 M14 I1 M11 I2 M1 I1 M9 I1 M10 
+chr4-04	SwissProt	protein_match	328939	328974	40.000000	+	.	Target=Q8BIF9.2 36 47 +;percentID=50;sequence=MELREEAWSPGPLDSEDQQMASHENPVDILIMDDDDVPSWPPTKLSPPQSAPPPGPPPRPRPPAPYICTECGKSFSHWSKLTRHQRTHTGERPNACTDCGKTFSQSSHLVQHRRIHTGEKPYACSECGKRFSWSSNLMQHQRIHTGEKPYTCPDCGRSFTQSKSLAKHRRSHSGLKPFVCPRCGRGFSQPKSMARHLRLHPELSGPGVAAKVLAASVRRAKAPEEATAADGEIAIPVGDGEGIIVVGPPGDGAAAAAALAGVGTRATGTRSRRAPAPKPYVCMECGKGFGHGAGLLAHQRAQHGDGLGVAVGEEPAHICVECGEGFVQGAALRRHKKIHAVGAPSVCSSCGQSFYRAGGEDDGEDQSAGARCAECRGGEAR
+chr4-04	SwissProt	protein_match	314185	314253	44.000000	+	.	Target=Q8IYI8.1 200 222 +;percentID=43
+chr4-04	SwissProt	protein_match	337577	337699	129.000000	+	.	Target=P51508.3 21 61 +;percentID=56
+chr4-04	SwissProt	protein_match	336608	336754	231.000000	-	.	Target=P08708.2 87 135 +;percentID=93;sequence=MGRVRTKTVKKAARVIIEKYYTRLGNDFHTNKRVCEEIAIIPSKKLRNKIAGYVTHLMKRIQRGPVRGISIKLQEEERERRDNYVPEVSALDQEIIEVDPDTKEMLKLLDFGSLSNLQVTQPTVGMNFKTPRGPV
+chr4-04	SwissProt	protein_match	337577	337699	130.000000	+	.	Target=Q8WV14.2 532 572 +;percentID=60
+chr4-04	SwissProt	protein_match	305585	305650	40.000000	+	.	Target=Q96MU6-2.2 297 318 +;percentID=40
+chr4-04	SwissProt	protein_match	337577	337702	132.000000	+	.	Target=Q5REK1.1 4 45 +;percentID=57
+chr4-04	SwissProt	protein_match	337577	337702	132.000000	+	.	Target=Q5REI6.1 4 45 +;percentID=54
+chr4-04	SwissProt	protein_match	337577	337699	123.000000	+	.	Target=Q08DG8.1 14 54 +;percentID=56
+chr4-04	SwissProt	protein_match	337577	337696	123.000000	+	.	Target=Q96SK3.3 6 45 +;percentID=60
+chr4-04	SwissProt	protein_match	337577	337699	133.000000	+	.	Target=Q6ZN79.1 7 47 +;percentID=60
+chr4-04	SwissProt	protein_match	337577	337699	134.000000	+	.	Target=A0JPL0.1 12 52 +;percentID=56
+chr4-04	SwissProt	protein_match	337577	337696	126.000000	+	.	Target=Q9NU63-2.2 24 63 +;percentID=55
+chr4-04	SwissProt	protein_match	337577	337696	126.000000	+	.	Target=Q9NU63-3.2 44 83 +;percentID=55
+chr4-04	SwissProt	protein_match	330924	330980	40.000000	-	.	Target=Q6P9A1.2 54 72 +;percentID=42
+chr4-04	SwissProt	protein_match	337574	337699	180.000000	+	.	Target=A6NKZ1.3 15 56 +;percentID=83
+chr4-04	SwissProt	protein_match	337577	337702	127.000000	+	.	Target=Q68EA5.3 4 45 +;percentID=54
+chr4-04	SwissProt	protein_match	337577	337699	139.000000	+	.	Target=Q14587.2 81 121 +;percentID=65
+chr4-04	SwissProt	protein_match	337574	337699	186.000000	+	.	Target=A6NP11.3 3 44 +;percentID=85
+chr4-04	SwissProt	protein_match	337577	337708	111.000000	+	.	Target=Q8BV42.1 9 50 +;percentID=54;Gap=M40 D2 M2 
+chr4-04	SwissProt	protein_match	337577	337699	140.000000	+	.	Target=Q2TL60.1 14 54 +;percentID=65
+chr4-04	SwissProt	protein_match	337577	337699	114.000000	+	.	Target=Q13398.2 33 73 +;percentID=58
+chr4-04	SwissProt	protein_match	337577	337696	141.000000	+	.	Target=P16374.2 14 53 +;percentID=62
+chr4-04	SwissProt	protein_match	337577	337699	129.000000	+	.	Target=Q9Y6Q3-2.3 47 87 +;percentID=58
+chr4-04	SwissProt	protein_match	337565	337699	155.000000	+	.	Target=Q5T5D7.1 4 48 +;percentID=62
+chr4-04	SwissProt	protein_match	337577	337705	148.000000	+	.	Target=Q9NYW8.1 8 50 +;percentID=60
+chr4-04	SwissProt	protein_match	337577	337705	149.000000	+	.	Target=Q8BQC8.1 8 50 +;percentID=62
+chr4-04	SwissProt	protein_match	337577	337705	149.000000	+	.	Target=Q8BQC8-2.1 7 49 +;percentID=62
+chr4-04	SwissProt	protein_match	337577	337702	133.000000	+	.	Target=P52737.1 4 45 +;percentID=57
+chr4-04	SwissProt	protein_match	337541	337699	140.000000	+	.	Target=Q96GC6-3.1 171 222 +;percentID=52;Gap=M8 D1 M44 
+chr4-04	SwissProt	protein_match	337547	337696	144.000000	+	.	Target=Q9NU63.2 6 55 +;percentID=52
+chr4-04	SwissProt	protein_match	337577	337699	156.000000	+	.	Target=Q86UE3.2 60 100 +;percentID=70
+chr4-04	SwissProt	protein_match	337577	337705	134.000000	+	.	Target=Q8TC21-2.2 7 49 +;percentID=53
+chr4-04	SwissProt	protein_match	331137	331178	40.000000	+	.	Target=Q8IW36.3 62 75 +;percentID=57
+chr4-04	SwissProt	protein_match	337577	337699	137.000000	+	.	Target=Q6ECI4.2 23 63 +;percentID=63
+chr4-04	SwissProt	protein_match	331361	331435	50.000000	-	.	Target=Q6ZNG0-2.1 3 27 +;percentID=40
+chr4-04	SwissProt	protein_match	337577	337699	127.000000	+	.	Target=P51814-8.2 27 67 +;percentID=56
+chr4-04	SwissProt	protein_match	337574	337744	225.000000	+	.	Target=Q8IW36.3 3 59 +;percentID=73
+chr4-04	SwissProt	protein_match	336608	336754	223.000000	-	.	Target=Q6QAP7.3 87 135 +;percentID=91;sequence=MGRVRTKTVKKAARVIIEKYYTRLGNDFHTNKRVCEEIAIIPSKKLRNKIAGYVTHLMKRIQRGPVRGISIKLQEEERERRDNYVPEVSALDQEIIEVDPDTKEMLKLLDFGSLSNLQVTQPTVGMNFKTPRGAV
+chr4-04	SwissProt	protein_match	337577	337699	140.000000	+	.	Target=Q6P9Y7.1 6 46 +;percentID=60
+chr4-04	SwissProt	protein_match	336608	336754	223.000000	-	.	Target=A5PK63.1 87 135 +;percentID=91;sequence=MGRVRTKTVKKAARVIIEKYYTRLDNDFHTNKRVCEEIAIIPSKKLRNKIAGYVTHLMKRIQRGPVRGISIKLQEEERERRDNYVPEVSALDQEIIEVDPDTKEMLKLLDFGSLSNLQVTQPTVGMNFKTPRGAV
+chr4-04	SwissProt	protein_match	331701	331775	48.000000	+	.	Target=Q14593.3 10 34 +;percentID=60
+chr4-04	SwissProt	protein_match	337577	337699	167.000000	+	.	Target=O75373.2 4 44 +;percentID=80
+chr4-04	SwissProt	protein_match	337577	337699	147.000000	+	.	Target=Q2KI58.1 4 44 +;percentID=65
+chr4-04	SwissProt	protein_match	337577	337699	148.000000	+	.	Target=P52736.2 1 41 +;percentID=63
+chr4-04	SwissProt	protein_match	337577	337699	171.000000	+	.	Target=Q6ZN08.2 50 90 +;percentID=82
+chr4-04	SwissProt	protein_match	337577	337699	171.000000	+	.	Target=Q9Y2Q1.1 4 44 +;percentID=80
+chr4-04	SwissProt	protein_match	337577	337699	171.000000	+	.	Target=Q5JVG8.1 4 44 +;percentID=80
+chr4-04	SwissProt	protein_match	337577	337699	149.000000	+	.	Target=Q5HYK9.2 14 54 +;percentID=70
+chr4-04	SwissProt	protein_match	337577	337702	150.000000	+	.	Target=Q6P1L6.1 62 103 +;percentID=64
+chr4-04	SwissProt	protein_match	337577	337705	155.000000	+	.	Target=Q6P1L6-3.1 62 104 +;percentID=62
+chr4-04	SwissProt	protein_match	337577	337696	173.000000	+	.	Target=Q09FC8-5.2 6 45 +;percentID=82
+chr4-04	SwissProt	protein_match	337577	337699	157.000000	+	.	Target=Q9HCL3.2 6 46 +;percentID=70
+chr4-04	SwissProt	protein_match	337577	337699	161.000000	+	.	Target=P35789-2.4 4 44 +;percentID=78
+chr4-04	SwissProt	protein_match	337577	337699	136.000000	+	.	Target=A8MUZ8.2 7 47 +;percentID=63
+chr4-04	SwissProt	protein_match	337577	337699	161.000000	+	.	Target=P35789-3.4 4 44 +;percentID=78
+chr4-04	SwissProt	protein_match	337577	337699	138.000000	+	.	Target=Q9BS34.1 4 44 +;percentID=60
+chr4-04	SwissProt	protein_match	337577	337699	127.000000	+	.	Target=P51814-6.2 27 67 +;percentID=56
+chr4-04	SwissProt	protein_match	337577	337699	163.000000	+	.	Target=A8MXY4.2 25 65 +;percentID=78
+chr4-04	SwissProt	protein_match	337577	337699	140.000000	+	.	Target=Q6P9Y7-2.1 6 46 +;percentID=60
+chr4-04	SwissProt	protein_match	337577	337699	166.000000	+	.	Target=P17038.4 4 44 +;percentID=80
+chr4-04	SwissProt	protein_match	337577	337699	167.000000	+	.	Target=Q6ZNA1.2 8 48 +;percentID=82
+chr4-04	SwissProt	protein_match	337577	337699	127.000000	+	.	Target=Q7Z340-3.3 29 69 +;percentID=60
+chr4-04	SwissProt	protein_match	337574	337699	178.000000	+	.	Target=A6NK21.3 3 44 +;percentID=83
+chr4-04	SwissProt	protein_match	337577	337699	169.000000	+	.	Target=Q8NEM1.2 13 53 +;percentID=80
+chr4-04	SwissProt	protein_match	337577	337735	189.000000	+	.	Target=O43345.1 4 56 +;percentID=73
+chr4-04	SwissProt	protein_match	337577	337699	191.000000	+	.	Target=Q5HY98.1 9 49 +;percentID=90
+chr4-04	SwissProt	protein_match	337580	337696	81.000000	+	.	Target=O14978.2 218 256 +;percentID=43
+chr4-04	SwissProt	protein_match	337577	337699	171.000000	+	.	Target=Q03938.2 4 44 +;percentID=82
+chr4-04	SwissProt	protein_match	337577	337699	171.000000	+	.	Target=Q03923.3 4 44 +;percentID=80
+chr4-04	SwissProt	protein_match	337577	337699	172.000000	+	.	Target=O75346.2 4 44 +;percentID=82
+chr4-04	SwissProt	protein_match	337583	337708	163.000000	+	.	Target=Q3KNS6.1 37 78 +;percentID=69
+chr4-04	SwissProt	protein_match	337577	337699	173.000000	+	.	Target=Q86V71.2 4 44 +;percentID=82
+chr4-04	SwissProt	protein_match	337577	337699	173.000000	+	.	Target=P17019.3 4 44 +;percentID=82
+chr4-04	SwissProt	protein_match	337577	337699	174.000000	+	.	Target=Q9Y6R6.1 6 46 +;percentID=75
+chr4-04	SwissProt	protein_match	337577	337699	161.000000	+	.	Target=P35789.4 4 44 +;percentID=78
+chr4-04	SwissProt	protein_match	337577	337699	174.000000	+	.	Target=O75290.3 6 46 +;percentID=75
+chr4-04	SwissProt	protein_match	337577	337717	161.000000	+	.	Target=Q494X3.1 6 51 +;percentID=70;Gap=M40 D1 M6 
+chr4-04	SwissProt	protein_match	337577	337699	161.000000	+	.	Target=Q68DY1.2 4 44 +;percentID=78
+chr4-04	SwissProt	protein_match	337577	337699	138.000000	+	.	Target=Q6N045.2 14 54 +;percentID=58
+chr4-04	SwissProt	protein_match	337577	337696	165.000000	+	.	Target=Q03923-2.3 4 43 +;percentID=80
+chr4-04	SwissProt	protein_match	337577	337699	179.000000	+	.	Target=A6NN14.3 13 53 +;percentID=85
+chr4-04	SwissProt	protein_match	337577	337699	180.000000	+	.	Target=Q6ZMV8.1 4 44 +;percentID=82
+chr4-04	SwissProt	protein_match	337577	337699	182.000000	+	.	Target=Q3MIS6.1 8 48 +;percentID=85
+chr4-04	SwissProt	protein_match	337577	337711	141.000000	+	.	Target=Q6ECI4-2.2 23 67 +;percentID=60
+chr4-04	SwissProt	protein_match	337658	337696	50.000000	+	.	Target=Q96N38-2.1 2 14 +;percentID=76
+chr4-04	SwissProt	protein_match	337658	337696	50.000000	+	.	Target=Q96N38.1 2 14 +;percentID=76
+chr4-04	SwissProt	protein_match	337658	337699	54.000000	+	.	Target=A6NGH9.3 2 15 +;percentID=78
+chr4-04	SwissProt	protein_match	337583	337696	139.000000	+	.	Target=Q60585.2 8 45 +;percentID=68
+chr4-04	SwissProt	protein_match	337583	337699	158.000000	+	.	Target=Q8NA42.1 8 46 +;percentID=74
+chr4-04	SwissProt	protein_match	337583	337699	159.000000	+	.	Target=Q4R6C2.1 8 46 +;percentID=74
+chr4-04	SwissProt	protein_match	337664	337711	50.000000	+	.	Target=Q96MU6.2 1 16 +;percentID=62
+chr4-04	SwissProt	protein_match	337589	337675	64.000000	+	.	Target=Q9Z1D8.1 220 248 +;percentID=48
+chr4-04	SwissProt	protein_match	337589	337708	98.000000	+	.	Target=Q9Y2L8.1 222 261 +;percentID=47
+chr4-04	SwissProt	protein_match	337589	337708	98.000000	+	.	Target=A2T7D2.1 222 261 +;percentID=47
+chr4-04	SwissProt	protein_match	337589	337702	111.000000	+	.	Target=P10077.2 2 39 +;percentID=57
+chr4-04	SwissProt	protein_match	337577	337699	174.000000	+	.	Target=A8MTY0.2 4 44 +;percentID=82
+chr4-04	SwissProt	protein_match	337589	337702	122.000000	+	.	Target=Q0D2J5.2 8 45 +;percentID=57
+chr4-04	SwissProt	protein_match	337577	337699	174.000000	+	.	Target=O75290-2.3 22 62 +;percentID=75
+chr4-04	SwissProt	protein_match	337577	337699	175.000000	+	.	Target=Q03936.2 4 44 +;percentID=82
+chr4-04	SwissProt	protein_match	337577	337699	175.000000	+	.	Target=Q08AN1.2 7 47 +;percentID=80
+chr4-04	SwissProt	protein_match	337577	337699	178.000000	+	.	Target=Q14593.3 37 77 +;percentID=82
+chr4-04	SwissProt	protein_match	337607	337696	104.000000	+	.	Target=P08042-2.3 4 33 +;percentID=66
+chr4-04	SwissProt	protein_match	337613	337693	69.000000	+	.	Target=Q642B9.1 230 256 +;percentID=48
+chr4-04	SwissProt	protein_match	337613	337699	112.000000	+	.	Target=Q5RDX1.1 7 35 +;percentID=68
+chr4-04	SwissProt	protein_match	337577	337699	183.000000	+	.	Target=Q8WV37.1 8 48 +;percentID=85
+chr4-04	SwissProt	protein_match	337577	337696	169.000000	+	.	Target=Q03936-3.2 4 43 +;percentID=82
+chr4-04	SwissProt	protein_match	338108	338194	102.000000	+	.	Target=A6NK31.3 100 128 +;percentID=65
+chr4-04	SwissProt	protein_match	337664	337696	42.000000	+	.	Target=Q96MU6-2.2 1 11 +;percentID=72
+chr4-04	SwissProt	protein_match	337664	337696	44.000000	+	.	Target=Q96PQ6-3.2 1 11 +;percentID=81
+chr4-04	SwissProt	protein_match	337664	337699	46.000000	+	.	Target=P17027.3 1 12 +;percentID=75
+chr4-04	SwissProt	protein_match	338123	338188	67.000000	+	.	Target=Q96SK3.3 47 68 +;percentID=54
+chr4-04	SwissProt	protein_match	337664	337699	50.000000	+	.	Target=Q16587-2.2 1 12 +;percentID=75
+chr4-04	SwissProt	protein_match	337664	337699	50.000000	+	.	Target=Q96PQ6-4.2 1 12 +;percentID=83
+chr4-04	SwissProt	protein_match	337664	337699	51.000000	+	.	Target=Q9P255.2 1 12 +;percentID=83
+chr4-04	SwissProt	protein_match	337664	337699	51.000000	+	.	Target=A6NK75.3 1 12 +;percentID=83
+chr4-04	SwissProt	protein_match	337664	337699	51.000000	+	.	Target=Q14593-2.3 1 12 +;percentID=83
+chr4-04	SwissProt	protein_match	337589	337702	111.000000	+	.	Target=P10077-2.2 2 39 +;percentID=57
+chr4-04	SwissProt	protein_match	337664	337699	60.000000	+	.	Target=Q3SXZ3-2.1 1 12 +;percentID=100
+chr4-04	SwissProt	protein_match	337589	337699	152.000000	+	.	Target=P17038-2.4 2 38 +;percentID=81
+chr4-04	SwissProt	protein_match	337592	337696	110.000000	+	.	Target=Q8BPP0.1 1 35 +;percentID=60
+chr4-04	SwissProt	protein_match	337601	337699	110.000000	+	.	Target=Q9Y6Q3.3 40 72 +;percentID=66
+chr4-04	SwissProt	protein_match	337604	337696	104.000000	+	.	Target=Q96N20.1 3 33 +;percentID=61
+chr4-04	SwissProt	protein_match	337860	337889	41.000000	-	.	Target=Q13398-6.2 120 129 +;percentID=60
+chr4-04	SwissProt	protein_match	337860	337889	41.000000	-	.	Target=Q13398-5.2 79 88 +;percentID=60
+chr4-04	SwissProt	protein_match	337860	337889	41.000000	-	.	Target=Q13398-2.2 131 140 +;percentID=60
+chr4-04	SwissProt	protein_match	337861	337905	42.000000	+	.	Target=Q8BI67.1 413 427 +;percentID=53
+chr4-04	SwissProt	protein_match	338123	338218	94.000000	+	.	Target=Q8N7Q3.2 12 43 +;percentID=53
+chr4-04	SwissProt	protein_match	338114	338224	53.000000	+	.	Target=Q8WV37.1 43 82 +;percentID=40;Gap=M13 I2 M15 I1 M9 
+chr4-04	SwissProt	protein_match	338123	338182	49.000000	+	.	Target=A6NFI3.1 198 217 +;percentID=50
+chr4-04	SwissProt	protein_match	338123	338182	49.000000	+	.	Target=Q6PGE4.1 194 213 +;percentID=50
+chr4-04	SwissProt	protein_match	338123	338218	99.000000	+	.	Target=Q14586.2 44 75 +;percentID=59
+chr4-04	SwissProt	protein_match	338123	338218	75.000000	+	.	Target=O43345.1 44 75 +;percentID=43
+chr4-04	SwissProt	protein_match	338123	338215	85.000000	+	.	Target=P35789-2.4 44 74 +;percentID=48
+chr4-04	SwissProt	protein_match	338123	338215	85.000000	+	.	Target=P35789.4 44 74 +;percentID=48
+chr4-04	SwissProt	protein_match	338123	338215	85.000000	+	.	Target=P35789-3.4 44 74 +;percentID=48
+chr4-04	SwissProt	protein_match	338123	338215	85.000000	+	.	Target=Q6ZN08.2 90 120 +;percentID=48
+chr4-04	SwissProt	protein_match	338123	338218	85.000000	+	.	Target=Q96N38-2.1 16 47 +;percentID=50
+chr4-04	SwissProt	protein_match	337664	337705	56.000000	+	.	Target=Q86YE8-4.3 1 14 +;percentID=85
+chr4-04	SwissProt	protein_match	338123	338191	89.000000	+	.	Target=Q9NSJ1.2 33 55 +;percentID=65
+chr4-04	SwissProt	protein_match	337664	337735	64.000000	+	.	Target=Q8N7Q3.2 1 24 +;percentID=62
+chr4-04	SwissProt	protein_match	337860	337889	41.000000	-	.	Target=Q13398-4.2 144 153 +;percentID=60
+chr4-04	SwissProt	protein_match	337860	337889	41.000000	-	.	Target=Q13398.2 140 149 +;percentID=60
+chr4-04	SwissProt	protein_match	337860	337889	41.000000	-	.	Target=Q13398-3.2 152 161 +;percentID=60
+chr4-04	SwissProt	protein_match	338123	338191	89.000000	+	.	Target=O14628-4.2 44 66 +;percentID=65
+chr4-04	SwissProt	protein_match	338123	338191	89.000000	+	.	Target=O14628-7.2 48 70 +;percentID=65
+chr4-04	SwissProt	protein_match	338123	338215	93.000000	+	.	Target=Q68DY1.2 44 74 +;percentID=45
+chr4-04	SwissProt	protein_match	338123	338221	109.000000	+	.	Target=A6NNF4.3 44 76 +;percentID=54
+chr4-04	SwissProt	protein_match	338123	338215	98.000000	+	.	Target=Q03923.3 44 75 +;percentID=56;Gap=M27 I1 M4 
+chr4-04	SwissProt	protein_match	338123	338218	98.000000	+	.	Target=P0CB33.1 56 87 +;percentID=50
+chr4-04	SwissProt	protein_match	338123	338218	98.000000	+	.	Target=A8MUV8.3 44 75 +;percentID=59
+chr4-04	SwissProt	protein_match	338123	338218	112.000000	+	.	Target=P17038-2.4 38 70 +;percentID=57;Gap=M21 I1 M11 
+chr4-04	SwissProt	protein_match	338123	338218	101.000000	+	.	Target=Q96H40.3 44 75 +;percentID=50
+chr4-04	SwissProt	protein_match	338123	338218	101.000000	+	.	Target=Q7Z2F6.1 44 75 +;percentID=62
+chr4-04	SwissProt	protein_match	338123	338215	102.000000	+	.	Target=O75373.2 44 74 +;percentID=54
+chr4-04	SwissProt	protein_match	338123	338218	103.000000	+	.	Target=Q03936.2 44 75 +;percentID=56
+chr4-04	SwissProt	protein_match	338123	338218	105.000000	+	.	Target=Q5JVG8.1 44 75 +;percentID=50
+chr4-04	SwissProt	protein_match	338123	338218	105.000000	+	.	Target=Q96JC4.1 56 87 +;percentID=56
+chr4-04	SwissProt	protein_match	338123	338218	105.000000	+	.	Target=A6NF79.3 56 87 +;percentID=56
+chr4-04	SwissProt	protein_match	338123	338218	85.000000	+	.	Target=Q96N38.1 16 47 +;percentID=50
+chr4-04	SwissProt	protein_match	338123	338221	106.000000	+	.	Target=Q05481.1 53 85 +;percentID=57
+chr4-04	SwissProt	protein_match	338123	338191	89.000000	+	.	Target=A6NGH9.3 15 37 +;percentID=65
+chr4-04	SwissProt	protein_match	338123	338191	89.000000	+	.	Target=O14628.2 44 66 +;percentID=65
+chr4-04	SwissProt	protein_match	338123	338191	89.000000	+	.	Target=O14628-5.2 44 66 +;percentID=65
+chr4-04	SwissProt	protein_match	338123	338191	89.000000	+	.	Target=O14628-6.2 48 70 +;percentID=65
+chr4-04	SwissProt	protein_match	338123	338218	109.000000	+	.	Target=Q8NEM1.2 53 84 +;percentID=59
+chr4-04	SwissProt	protein_match	338123	338218	109.000000	+	.	Target=Q8TF32.2 75 106 +;percentID=62
+chr4-04	SwissProt	protein_match	338123	338221	126.000000	+	.	Target=O75437-2.3 53 85 +;percentID=63
+chr4-04	SwissProt	protein_match	338123	338218	110.000000	+	.	Target=A8MXY4.2 65 96 +;percentID=56
+chr4-04	SwissProt	protein_match	338123	338218	112.000000	+	.	Target=Q8IYX0.1 56 87 +;percentID=56
+chr4-04	SwissProt	protein_match	338123	338218	112.000000	+	.	Target=A6NN14.3 53 84 +;percentID=56
+chr4-04	SwissProt	protein_match	338123	338218	139.000000	+	.	Target=Q3SXZ3.1 44 75 +;percentID=81
+chr4-04	SwissProt	protein_match	338123	338218	112.000000	+	.	Target=P17038.4 44 76 +;percentID=57;Gap=M21 I1 M11 
+chr4-04	SwissProt	protein_match	338123	338218	113.000000	+	.	Target=A6NP11.3 44 75 +;percentID=59
+chr4-04	SwissProt	protein_match	338123	338224	114.000000	+	.	Target=A6NNF4-2.3 44 77 +;percentID=55
+chr4-04	SwissProt	protein_match	338123	338218	115.000000	+	.	Target=Q8NE65.1 75 106 +;percentID=59
+chr4-04	SwissProt	protein_match	338123	338218	119.000000	+	.	Target=Q9H8G1.2 76 107 +;percentID=62
+chr4-04	SwissProt	protein_match	338123	338218	121.000000	+	.	Target=A6NK75.3 12 43 +;percentID=65
+chr4-04	SwissProt	protein_match	338123	338218	122.000000	+	.	Target=Q14593-2.3 12 43 +;percentID=65
+chr4-04	SwissProt	protein_match	338123	338218	122.000000	+	.	Target=Q14593.3 77 108 +;percentID=65
+chr4-04	SwissProt	protein_match	338123	338218	105.000000	+	.	Target=A6NKZ1.3 56 87 +;percentID=56
+chr4-04	SwissProt	protein_match	338123	338218	124.000000	+	.	Target=Q9Y2Q1.1 44 75 +;percentID=65
+chr4-04	SwissProt	protein_match	338123	338218	106.000000	+	.	Target=Q03938.2 44 75 +;percentID=50
+chr4-04	SwissProt	protein_match	338123	338218	107.000000	+	.	Target=O75346.2 44 75 +;percentID=53
+chr4-04	SwissProt	protein_match	338123	338218	108.000000	+	.	Target=Q8TD23.2 44 75 +;percentID=59
+chr4-04	SwissProt	protein_match	338123	338218	108.000000	+	.	Target=Q86V71.2 44 75 +;percentID=56
+chr4-04	SwissProt	protein_match	338123	338221	126.000000	+	.	Target=O75437.3 53 85 +;percentID=63
+chr4-04	SwissProt	protein_match	339811	339843	40.000000	+	.	Target=Q96RE9.1 118 128 +;percentID=63
+chr4-04	SwissProt	protein_match	338123	338218	130.000000	+	.	Target=Q6ZMV8.1 44 75 +;percentID=65
+chr4-04	SwissProt	protein_match	338123	338221	130.000000	+	.	Target=A8MTY0.2 44 76 +;percentID=63
+chr4-04	SwissProt	protein_match	338123	338218	139.000000	+	.	Target=Q3SXZ3-2.1 12 43 +;percentID=81
+chr4-04	SwissProt	protein_match	345597	345665	41.000000	-	.	Target=A2T7D2.1 159 180 +;percentID=47;Gap=M5 D1 M17 
+chr4-04	SwissProt	protein_match	338123	338218	169.000000	+	.	Target=Q15928.1 44 75 +;percentID=100
+chr4-04	SwissProt	protein_match	338126	338200	80.000000	+	.	Target=Q8IW36-3.3 57 81 +;percentID=56
+chr4-04	SwissProt	protein_match	338126	338200	80.000000	+	.	Target=Q8IW36.3 57 81 +;percentID=56
+chr4-04	SwissProt	protein_match	338126	338200	80.000000	+	.	Target=Q8IW36-2.3 57 81 +;percentID=56
+chr4-04	SwissProt	protein_match	338126	338191	83.000000	+	.	Target=A8MUP4.2 13 34 +;percentID=63
+chr4-04	SwissProt	protein_match	338132	338182	48.000000	+	.	Target=Q96N20.1 38 54 +;percentID=41
+chr4-04	SwissProt	protein_match	338135	338200	45.000000	+	.	Target=P17031.3 58 81 +;percentID=41;Gap=M16 I2 M6 
+chr4-04	SwissProt	protein_match	338144	338191	40.000000	+	.	Target=Q61751.1 106 121 +;percentID=43
+chr4-04	SwissProt	protein_match	338159	338224	40.000000	+	.	Target=Q8WV37-2.1 2 24 +;percentID=43;Gap=M13 I1 M9 
+chr4-04	SwissProt	protein_match	338123	338218	124.000000	+	.	Target=Q8IYB9.1 44 75 +;percentID=71
+chr4-04	SwissProt	protein_match	338175	338261	47.000000	+	.	Target=Q9Z1D8.1 316 345 +;percentID=43;Gap=M14 I1 M15 
+chr4-04	SwissProt	protein_match	338123	338218	124.000000	+	.	Target=P17019.3 44 75 +;percentID=65
+chr4-04	SwissProt	protein_match	338123	338218	125.000000	+	.	Target=Q9P255.2 12 43 +;percentID=68
+chr4-04	SwissProt	protein_match	338123	338218	125.000000	+	.	Target=A6NK21.3 44 75 +;percentID=68
+chr4-04	SwissProt	protein_match	338123	338218	126.000000	+	.	Target=Q8IYN0.1 76 107 +;percentID=62
+chr4-04	SwissProt	protein_match	347808	347873	40.000000	+	.	Target=A6NK31.3 488 509 +;percentID=40
+chr4-04	SwissProt	protein_match	339811	339843	40.000000	+	.	Target=Q96RE9-3.1 134 144 +;percentID=63
+chr4-04	SwissProt	protein_match	339811	339843	40.000000	+	.	Target=Q96RE9-2.1 133 143 +;percentID=63
+chr4-04	SwissProt	protein_match	345597	345647	40.000000	-	.	Target=Q9Y2L8.1 164 180 +;percentID=52
+chr4-04	SwissProt	protein_match	347814	347870	46.000000	+	.	Target=Q5MCW4.1 550 568 +;percentID=42
+chr4-04	SwissProt	protein_match	347177	347215	40.000000	+	.	Target=Q9UJU3.1 105 117 +;percentID=46
+chr4-04	SwissProt	protein_match	347648	347734	44.000000	-	.	Target=Q8N4W9-2.2 272 300 +;percentID=31
+chr4-04	SwissProt	protein_match	347666	347734	54.000000	-	.	Target=Q8WV37-3.1 200 222 +;percentID=43
+chr4-04	SwissProt	protein_match	347666	347734	59.000000	-	.	Target=Q6P560.1 233 255 +;percentID=43
+chr4-04	SwissProt	protein_match	347675	347734	46.000000	-	.	Target=Q9HCG1.2 535 554 +;percentID=45
+chr4-04	SwissProt	protein_match	347684	347734	40.000000	-	.	Target=Q96SE7.1 343 359 +;percentID=47
+chr4-04	SwissProt	protein_match	347684	347734	40.000000	-	.	Target=Q96JF6.3 265 281 +;percentID=41
+chr4-04	SwissProt	protein_match	347684	347734	40.000000	-	.	Target=Q6ZNA1.2 468 484 +;percentID=47
+chr4-04	SwissProt	protein_match	347684	347737	41.000000	-	.	Target=Q9UC06.2 137 154 +;percentID=44
+chr4-04	SwissProt	protein_match	347684	347734	43.000000	-	.	Target=P17035.4 297 313 +;percentID=47
+chr4-04	SwissProt	protein_match	338162	338218	45.000000	+	.	Target=Q09FC8-4.2 3 21 +;percentID=47
+chr4-04	SwissProt	protein_match	347684	347734	45.000000	-	.	Target=P17141.3 281 297 +;percentID=47
+chr4-04	SwissProt	protein_match	338630	338683	40.000000	-	.	Target=Q05481.1 205 222 +;percentID=44
+chr4-04	SwissProt	protein_match	338711	338773	40.000000	-	.	Target=Q3KNS6.1 107 127 +;percentID=42
+chr4-04	SwissProt	protein_match	338803	338859	45.000000	+	.	Target=A0JNB1.1 314 333 +;percentID=45;Gap=M10 I1 M9 
+chr4-04	SwissProt	protein_match	338825	338875	41.000000	-	.	Target=Q5SXM1.1 84 101 +;percentID=50;Gap=M9 I1 M8 
+chr4-04	SwissProt	protein_match	347808	347873	41.000000	+	.	Target=P51508.3 412 433 +;percentID=40
+chr4-04	SwissProt	protein_match	347814	347873	41.000000	+	.	Target=P10751.2 113 132 +;percentID=40
+chr4-04	SwissProt	protein_match	347814	347870	46.000000	+	.	Target=Q80W31.1 543 561 +;percentID=42
+chr4-04	SwissProt	protein_match	354526	354570	46.000000	-	.	Target=Q5RB33.1 202 218 +;percentID=52;Gap=M6 I2 M9 
+chr4-04	SwissProt	protein_match	347838	347873	44.000000	+	.	Target=Q5HYK9.2 233 244 +;percentID=66
+chr4-04	SwissProt	protein_match	347852	347896	41.000000	-	.	Target=Q8TAF7.2 67 83 +;percentID=41;Gap=M10 I2 M5 
+chr4-04	SwissProt	protein_match	347924	347959	40.000000	-	.	Target=Q14590-2.3 245 256 +;percentID=50
+chr4-04	SwissProt	protein_match	347924	347959	40.000000	-	.	Target=Q14590.3 249 260 +;percentID=50
+chr4-04	SwissProt	protein_match	348081	348137	41.000000	+	.	Target=Q15935.2 314 332 +;percentID=42
+chr4-04	SwissProt	protein_match	348120	348173	40.000000	+	.	Target=P51814-5.2 44 63 +;percentID=50;Gap=M9 I2 M9 
+chr4-04	SwissProt	protein_match	353436	353483	40.000000	-	.	Target=Q7TSH9.1 86 101 +;percentID=43
+chr4-04	SwissProt	protein_match	353438	353500	40.000000	+	.	Target=Q0VAW7.1 483 505 +;percentID=47;Gap=M16 I2 M5 
+chr4-04	SwissProt	protein_match	353438	353500	40.000000	+	.	Target=Q0VAW7-2.1 477 499 +;percentID=47;Gap=M16 I2 M5 
+chr4-04	SwissProt	protein_match	353439	353486	41.000000	+	.	Target=Q2VY69.1 310 326 +;percentID=47;Gap=M7 I1 M9 
+chr4-04	SwissProt	protein_match	353703	353741	42.000000	+	.	Target=Q13106.3 56 68 +;percentID=61
+chr4-04	SwissProt	protein_match	347684	347734	43.000000	-	.	Target=P17035-2.4 244 260 +;percentID=47
+chr4-04	SwissProt	protein_match	354377	354415	41.000000	-	.	Target=Q68DY1.2 188 200 +;percentID=53
+chr4-04	SwissProt	protein_match	347684	347734	45.000000	-	.	Target=Q9Y6Q3.3 319 335 +;percentID=47
+chr4-04	SwissProt	protein_match	347684	347734	45.000000	-	.	Target=Q9Y6Q3-2.3 334 350 +;percentID=47
+chr4-04	SwissProt	protein_match	347687	347740	48.000000	-	.	Target=Q9HCX3.1 247 264 +;percentID=50
+chr4-04	SwissProt	protein_match	354450	354497	46.000000	-	.	Target=Q6ZMS4.2 114 129 +;percentID=43
+chr4-04	SwissProt	protein_match	354526	354570	45.000000	-	.	Target=Q6ZNG0.1 202 218 +;percentID=47;Gap=M6 I2 M9 
+chr4-04	SwissProt	protein_match	354526	354570	45.000000	-	.	Target=Q6ZNG0-2.1 88 104 +;percentID=47;Gap=M6 I2 M9 
+chr4-04	SwissProt	protein_match	354528	354569	41.000000	+	.	Target=P59923.1 970 983 +;percentID=50
+chr4-04	SwissProt	protein_match	354546	354569	40.000000	+	.	Target=A2T812.1 583 590 +;percentID=75
+chr4-04	SwissProt	protein_match	354546	354569	40.000000	+	.	Target=Q9HBT7.1 583 590 +;percentID=75
+chr4-04	SwissProt	protein_match	354546	354584	40.000000	+	.	Target=P52736.2 240 257 +;percentID=50;Gap=M8 I5 M5 
+chr4-04	SwissProt	protein_match	354546	354605	41.000000	+	.	Target=Q9Y3M9.2 234 254 +;percentID=42;Gap=M11 I1 M9 
+chr4-04	SwissProt	protein_match	354546	354611	44.000000	+	.	Target=Q8TAW3.2 190 212 +;percentID=41;Gap=M8 D1 M5 I2 M8 
+chr4-04	SwissProt	protein_match	354341	354397	46.000000	+	.	Target=Q9BX82.1 375 393 +;percentID=47
+chr4-04	SwissProt	protein_match	354377	354415	41.000000	-	.	Target=Q68DY1-2.2 112 124 +;percentID=53
+chr4-04	SwissProt	protein_match	354377	354415	41.000000	-	.	Target=P17038-2.4 603 615 +;percentID=53
+chr4-04	SwissProt	protein_match	354377	354415	41.000000	-	.	Target=P17038.4 609 621 +;percentID=53
+chr4-04	SwissProt	protein_match	262904	262972	63.000000	-	.	Target=Q9BR84.1 450 472 +;percentID=47
+chr4-04	SwissProt	protein_match	262904	262993	63.000000	-	.	Target=Q8NDP4.1 444 473 +;percentID=43
+chr4-04	SwissProt	protein_match	262904	262993	63.000000	-	.	Target=Q0VAW7.1 810 839 +;percentID=43
+chr4-04	SwissProt	protein_match	262904	262993	63.000000	-	.	Target=Q0VAW7-2.1 804 833 +;percentID=43
+chr4-04	SwissProt	protein_match	262904	262993	64.000000	-	.	Target=Q6ZN57.1 332 361 +;percentID=43
+chr4-04	SwissProt	protein_match	262904	262981	64.000000	-	.	Target=Q9UK13.2 406 429 +;percentID=46;Gap=M3 D2 M21 
+chr4-04	SwissProt	protein_match	262904	262993	65.000000	-	.	Target=A0JNB1.1 626 655 +;percentID=43
+chr4-04	SwissProt	protein_match	262904	262993	65.000000	-	.	Target=Q86WZ6.1 638 667 +;percentID=43
+chr4-04	SwissProt	protein_match	262904	262957	65.000000	-	.	Target=Q6ZN19.1 415 432 +;percentID=66
+chr4-04	SwissProt	protein_match	262904	262993	65.000000	-	.	Target=Q8N7Q3.2 455 484 +;percentID=40
+chr4-04	SwissProt	protein_match	262904	262978	67.000000	-	.	Target=Q3KQV3.2 404 429 +;percentID=42;Gap=M2 I1 M23 
+chr4-04	SwissProt	protein_match	262904	262993	67.000000	-	.	Target=Q9P2J8-2.3 324 353 +;percentID=43
+chr4-04	SwissProt	protein_match	262904	262993	67.000000	-	.	Target=Q9P2J8.3 450 479 +;percentID=43
+chr4-04	SwissProt	protein_match	262904	262978	68.000000	-	.	Target=Q02386.2 622 647 +;percentID=50;Gap=M7 I1 M18 
+chr4-04	SwissProt	protein_match	262904	262993	69.000000	-	.	Target=Q14591.3 544 573 +;percentID=43
+chr4-04	SwissProt	protein_match	262904	262993	69.000000	-	.	Target=Q9UJU3.1 839 868 +;percentID=46
+chr4-04	SwissProt	protein_match	262904	262993	70.000000	-	.	Target=P52737.1 258 287 +;percentID=46
+chr4-04	SwissProt	protein_match	262904	262993	70.000000	-	.	Target=Q5REK1.1 258 287 +;percentID=46
+chr4-04	SwissProt	protein_match	262904	262969	70.000000	-	.	Target=Q8IZ26.2 300 321 +;percentID=54
+chr4-04	SwissProt	protein_match	262904	262993	72.000000	-	.	Target=Q09FC8-5.2 446 475 +;percentID=50
+chr4-04	SwissProt	protein_match	262904	262993	72.000000	-	.	Target=Q09FC8-4.2 433 462 +;percentID=50
+chr4-04	SwissProt	protein_match	262904	263002	72.000000	-	.	Target=Q9UJN7.2 279 312 +;percentID=41;Gap=M3 I1 M30 
+chr4-04	SwissProt	protein_match	262904	262993	72.000000	-	.	Target=Q09FC8-2.2 458 487 +;percentID=50
+chr4-04	SwissProt	protein_match	262904	262993	72.000000	-	.	Target=Q09FC8.2 494 523 +;percentID=50
+chr4-04	SwissProt	protein_match	262904	262993	72.000000	-	.	Target=Q09FC8-3.2 216 245 +;percentID=50
+chr4-04	SwissProt	protein_match	262904	262993	72.000000	-	.	Target=Q08AN1.2 191 220 +;percentID=43
+chr4-04	SwissProt	protein_match	262904	262993	73.000000	-	.	Target=A6NN14.3 270 299 +;percentID=43
+chr4-04	SwissProt	protein_match	262904	262972	73.000000	-	.	Target=Q99676.3 375 397 +;percentID=52
+chr4-04	SwissProt	protein_match	262904	262972	73.000000	-	.	Target=A6QLU5.1 376 398 +;percentID=52
+chr4-04	SwissProt	protein_match	262904	262993	75.000000	-	.	Target=Q4R6C2.1 428 457 +;percentID=43
+chr4-04	SwissProt	protein_match	262904	262993	75.000000	-	.	Target=Q8NA42.1 428 457 +;percentID=43
+chr4-04	SwissProt	protein_match	262904	262972	81.000000	-	.	Target=Q8N9Z0.2 273 295 +;percentID=60
+chr4-04	SwissProt	protein_match	262904	262972	81.000000	-	.	Target=Q8N9Z0-2.2 230 252 +;percentID=60
+chr4-04	SwissProt	protein_match	262913	263002	44.000000	-	.	Target=P17098.2 402 429 +;percentID=40;Gap=M4 D1 M4 D1 M20 
+chr4-04	SwissProt	protein_match	262913	262993	54.000000	-	.	Target=Q96SE7.1 771 797 +;percentID=40
+chr4-04	SwissProt	protein_match	262913	262993	68.000000	-	.	Target=Q8TB69.1 215 241 +;percentID=48
+chr4-04	SwissProt	protein_match	262928	262993	58.000000	-	.	Target=A2T812.1 731 752 +;percentID=40
+chr4-04	SwissProt	protein_match	262928	262993	58.000000	-	.	Target=Q9HBT7.1 731 752 +;percentID=40
+chr4-04	SwissProt	protein_match	262931	262972	46.000000	-	.	Target=Q13398-4.2 554 567 +;percentID=57
+chr4-04	SwissProt	protein_match	262931	262972	46.000000	-	.	Target=Q13398.2 550 563 +;percentID=57
+chr4-04	SwissProt	protein_match	262931	262972	46.000000	-	.	Target=Q13398-3.2 562 575 +;percentID=57
+chr4-04	SwissProt	protein_match	262931	262972	46.000000	-	.	Target=Q13398-6.2 530 543 +;percentID=57
+chr4-04	SwissProt	protein_match	262931	262972	46.000000	-	.	Target=Q13398-5.2 489 502 +;percentID=57
+chr4-04	SwissProt	protein_match	262937	262975	43.000000	-	.	Target=Q15937.2 484 497 +;percentID=57;Gap=M3 I1 M10 
+chr4-04	SwissProt	protein_match	262943	262993	41.000000	-	.	Target=Q6ZMY9.1 458 474 +;percentID=41
+chr4-04	SwissProt	protein_match	263002	263076	42.000000	+	.	Target=Q5RDX1.1 105 133 +;percentID=41;Gap=M11 I2 M3 I2 M11 
+chr4-04	SwissProt	protein_match	263002	263076	42.000000	+	.	Target=Q6P3V2.2 137 165 +;percentID=41;Gap=M11 I2 M3 I2 M11 
+chr4-04	SwissProt	protein_match	263068	263166	48.000000	-	.	Target=P0CB33.1 373 404 +;percentID=42;Gap=M18 D1 M14 
+chr4-04	SwissProt	protein_match	263077	263151	45.000000	-	.	Target=Q5HYK9.2 141 165 +;percentID=40
+chr4-04	SwissProt	protein_match	263089	263166	53.000000	-	.	Target=Q5TYW1.2 874 899 +;percentID=46
+chr4-04	SwissProt	protein_match	263089	263166	53.000000	-	.	Target=Q4V348.1 634 659 +;percentID=46
+chr4-04	SwissProt	protein_match	263092	263148	42.000000	-	.	Target=P59923.1 539 557 +;percentID=42
+chr4-04	SwissProt	protein_match	263104	263151	46.000000	-	.	Target=O14709.1 367 382 +;percentID=56
+chr4-04	SwissProt	protein_match	263104	263166	47.000000	-	.	Target=P52742.2 262 282 +;percentID=47
+chr4-04	SwissProt	protein_match	263104	263169	54.000000	-	.	Target=Q8N859.1 320 341 +;percentID=50
+chr4-04	SwissProt	protein_match	263107	263166	42.000000	-	.	Target=Q8TB69.1 284 303 +;percentID=45
+chr4-04	SwissProt	protein_match	263107	263151	42.000000	-	.	Target=Q08AN1.2 266 280 +;percentID=60
+chr4-04	SwissProt	protein_match	263107	263166	43.000000	-	.	Target=A6NF35.2 542 561 +;percentID=45
+chr4-04	SwissProt	protein_match	263107	263148	49.000000	-	.	Target=Q5R4K8.2 257 270 +;percentID=64
+chr4-04	SwissProt	protein_match	263107	263151	51.000000	-	.	Target=Q8N8J6-2.2 632 646 +;percentID=66
+chr4-04	SwissProt	protein_match	263107	263151	51.000000	-	.	Target=Q8N8J6.2 621 635 +;percentID=66
+chr4-04	SwissProt	protein_match	263107	263151	51.000000	-	.	Target=Q8N8J6-3.2 576 590 +;percentID=66
+chr4-04	SwissProt	protein_match	263107	263190	52.000000	-	.	Target=Q2KI58.1 500 527 +;percentID=42
+chr4-04	SwissProt	protein_match	263113	263166	40.000000	-	.	Target=Q8IYX0.1 372 389 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263166	40.000000	-	.	Target=Q03924-2.3 409 426 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263160	40.000000	-	.	Target=Q96JC4.1 179 194 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263151	40.000000	-	.	Target=Q80W31.1 344 356 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263151	40.000000	-	.	Target=Q16587.2 272 284 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263151	40.000000	-	.	Target=Q16587-3.2 240 252 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263151	40.000000	-	.	Target=Q9NSJ1.2 416 428 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263151	40.000000	-	.	Target=A6NGH9.3 586 598 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263151	40.000000	-	.	Target=A6NK31.3 344 356 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263142	40.000000	-	.	Target=Q6ZN19.1 341 350 +;percentID=70
+chr4-04	SwissProt	protein_match	263113	263151	40.000000	-	.	Target=O14628.2 575 587 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263151	40.000000	-	.	Target=O14628-5.2 552 564 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263151	40.000000	-	.	Target=O14628-6.2 556 568 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263151	40.000000	-	.	Target=O14628-4.2 503 515 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263151	40.000000	-	.	Target=O14628-7.2 507 519 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263148	40.000000	-	.	Target=P51815.2 419 430 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263151	40.000000	-	.	Target=Q9UK10.2 341 353 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263148	41.000000	-	.	Target=Q9NV72.1 241 252 +;percentID=58
+chr4-04	SwissProt	protein_match	263113	263166	41.000000	-	.	Target=Q3MIS6.1 233 250 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263151	41.000000	-	.	Target=Q68EA5.3 277 289 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263148	41.000000	-	.	Target=P16374.2 538 549 +;percentID=58
+chr4-04	SwissProt	protein_match	263113	263160	41.000000	-	.	Target=A6NF79.3 178 193 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263160	41.000000	-	.	Target=A6NKZ1.3 178 193 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263166	41.000000	-	.	Target=Q7L2R6.2 486 503 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263151	41.000000	-	.	Target=Q99676.3 415 427 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263151	41.000000	-	.	Target=A6QLU5.1 416 428 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263151	41.000000	-	.	Target=Q8N7Q3.2 502 514 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263151	41.000000	-	.	Target=A6NDX5.5 358 370 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263166	41.000000	-	.	Target=P51786.2 378 395 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263169	41.000000	-	.	Target=Q96NJ3-2.2 376 394 +;percentID=36
+chr4-04	SwissProt	protein_match	263113	263151	42.000000	-	.	Target=Q9UC06.2 416 428 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263160	42.000000	-	.	Target=Q9BS34.1 191 206 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263151	42.000000	-	.	Target=Q06732-2.2 578 590 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263166	42.000000	-	.	Target=Q2VY69.1 503 520 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263151	42.000000	-	.	Target=Q9UJW8.2 462 474 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263151	42.000000	-	.	Target=Q9HCZ1.2 597 609 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263166	42.000000	-	.	Target=Q86T29.1 581 598 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263151	42.000000	-	.	Target=Q9UK11.1 257 269 +;percentID=46
+chr4-04	SwissProt	protein_match	263113	263166	42.000000	-	.	Target=Q16587-4.2 447 464 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263166	42.000000	-	.	Target=Q16587-2.2 448 465 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263166	42.000000	-	.	Target=P52744.2 130 147 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263190	42.000000	-	.	Target=Q6P560.1 304 328 +;percentID=42;Gap=M5 D1 M20 
+chr4-04	SwissProt	protein_match	263113	263148	43.000000	-	.	Target=Q9HCG1.2 255 266 +;percentID=66
+chr4-04	SwissProt	protein_match	263113	263151	43.000000	-	.	Target=P51814-6.2 716 728 +;percentID=46
+chr4-04	SwissProt	protein_match	263113	263151	43.000000	-	.	Target=P51814.2 758 770 +;percentID=46
+chr4-04	SwissProt	protein_match	263113	263151	43.000000	-	.	Target=P51814-5.2 750 762 +;percentID=46
+chr4-04	SwissProt	protein_match	263113	263151	43.000000	-	.	Target=P51814-2.2 718 730 +;percentID=46
+chr4-04	SwissProt	protein_match	263113	263151	43.000000	-	.	Target=P51814-3.2 726 738 +;percentID=46
+chr4-04	SwissProt	protein_match	263113	263151	43.000000	-	.	Target=P51814-7.2 682 694 +;percentID=46
+chr4-04	SwissProt	protein_match	263113	263151	43.000000	-	.	Target=P51814-8.2 680 692 +;percentID=46
+chr4-04	SwissProt	protein_match	263113	263169	43.000000	-	.	Target=Q96NL3.1 554 572 +;percentID=42
+chr4-04	SwissProt	protein_match	263113	263151	43.000000	-	.	Target=Q5JVG2.1 549 561 +;percentID=46
+chr4-04	SwissProt	protein_match	263113	263166	43.000000	-	.	Target=Q9UK13.2 218 235 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263151	43.000000	-	.	Target=Q9QXT9.1 203 215 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263166	43.000000	-	.	Target=Q5RBQ3.1 267 284 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263142	43.000000	-	.	Target=Q8NDP4.1 214 223 +;percentID=70
+chr4-04	SwissProt	protein_match	263113	263151	43.000000	-	.	Target=Q9BY31.2 829 841 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263166	43.000000	-	.	Target=Q0VAW7.1 796 813 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263166	43.000000	-	.	Target=Q0VAW7-2.1 790 807 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263166	43.000000	-	.	Target=Q9NZL3.2 196 213 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263166	44.000000	-	.	Target=Q15928.1 303 320 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263166	44.000000	-	.	Target=O95780.1 221 238 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263166	44.000000	-	.	Target=Q9H8G1.2 253 270 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263166	44.000000	-	.	Target=O95780-2.1 145 162 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263151	44.000000	-	.	Target=Q9NYT6.2 249 261 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263151	44.000000	-	.	Target=Q5RER9.1 240 252 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263151	44.000000	-	.	Target=Q6ZN06.2 240 252 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263166	44.000000	-	.	Target=Q7Z3V5.3 215 232 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263166	44.000000	-	.	Target=O75123.1 255 272 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263166	44.000000	-	.	Target=Q8NDQ6-4.1 492 509 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263166	44.000000	-	.	Target=Q8NDQ6.1 515 532 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263166	44.000000	-	.	Target=Q8NDQ6-2.1 483 500 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263166	44.000000	-	.	Target=Q5R5S6.1 515 532 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263166	44.000000	-	.	Target=Q8N972.1 300 317 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263166	44.000000	-	.	Target=Q9BS31.1 394 411 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263151	44.000000	-	.	Target=Q3KP31.1 157 169 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263151	44.000000	-	.	Target=Q5REI6.1 157 169 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263166	44.000000	-	.	Target=Q6ZTB9.1 114 131 +;percentID=50;sequence=MVMHSEDEPYKCKFCGKAFDNLHLYLTHERTHTGEKPYECNKCGKAFSCSSSIRKHARIHTGEKPYICKQCGKAFRYSSSIRNHENTHTGEKPCECKQCGKAFSYSSYFRIHERIHTGEQVYKCKECGKTFTYPSAFHKHKSTHTSQKLYECKECGKAFDCFSSFHSHEGVHTGEKPYECRTWKSLQ
+chr4-04	SwissProt	protein_match	263113	263166	44.000000	-	.	Target=Q14590-2.3 531 548 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263166	44.000000	-	.	Target=Q14590.3 535 552 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263166	44.000000	-	.	Target=Q3KQV3.2 414 431 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263166	44.000000	-	.	Target=Q6P9A3-2.1 254 271 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263166	44.000000	-	.	Target=Q6P9A3.1 267 284 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263151	44.000000	-	.	Target=Q8TC21.2 444 456 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263151	44.000000	-	.	Target=Q8TC21-2.2 374 386 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263166	45.000000	-	.	Target=Q3SXZ3-2.1 299 316 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263166	45.000000	-	.	Target=Q3SXZ3.1 331 348 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263142	45.000000	-	.	Target=Q86XN6-2.2 438 447 +;percentID=80
+chr4-04	SwissProt	protein_match	263113	263142	45.000000	-	.	Target=Q86XN6.2 438 447 +;percentID=80
+chr4-04	SwissProt	protein_match	263113	263151	45.000000	-	.	Target=A2RRD8.1 298 310 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263151	45.000000	-	.	Target=Q8N7K0.1 643 655 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263166	45.000000	-	.	Target=Q86TJ5.1 400 417 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263151	45.000000	-	.	Target=Q6NX49.1 517 529 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263151	45.000000	-	.	Target=Q6ZMW2.1 531 543 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263166	45.000000	-	.	Target=Q9Y2H8.1 592 609 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263166	45.000000	-	.	Target=Q61116.1 557 574 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263169	45.000000	-	.	Target=Q2TL60.1 433 451 +;percentID=42
+chr4-04	SwissProt	protein_match	263113	263166	45.000000	-	.	Target=A6NP11.3 444 461 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263190	45.000000	-	.	Target=Q08DG8.1 421 446 +;percentID=42
+chr4-04	SwissProt	protein_match	263113	263151	45.000000	-	.	Target=Q96IR2.2 716 728 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263151	45.000000	-	.	Target=Q8N7K0-2.1 608 620 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263166	45.000000	-	.	Target=Q9XSR1.1 784 801 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263151	45.000000	-	.	Target=Q9P2J8-2.3 567 579 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263151	45.000000	-	.	Target=Q8BZW4-2.1 300 312 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263151	45.000000	-	.	Target=Q8BZW4.1 321 333 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263142	45.000000	-	.	Target=Q86XN6-3.2 384 393 +;percentID=80
+chr4-04	SwissProt	protein_match	263113	263151	46.000000	-	.	Target=Q14588.3 397 409 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263151	46.000000	-	.	Target=Q6ZN57.1 295 307 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263148	46.000000	-	.	Target=Q9NZV7.1 326 337 +;percentID=58
+chr4-04	SwissProt	protein_match	263113	263166	46.000000	-	.	Target=P17027.3 412 429 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263151	46.000000	-	.	Target=Q09FC8-5.2 493 505 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263151	46.000000	-	.	Target=Q09FC8-4.2 480 492 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263169	46.000000	-	.	Target=Q15935.2 455 473 +;percentID=42
+chr4-04	SwissProt	protein_match	263113	263166	46.000000	-	.	Target=Q8NB42.1 262 279 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263163	46.000000	-	.	Target=Q8R2V3.2 817 833 +;percentID=41
+chr4-04	SwissProt	protein_match	263113	263166	46.000000	-	.	Target=Q571J5.2 462 479 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263166	46.000000	-	.	Target=Q86WZ6.1 764 781 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263151	46.000000	-	.	Target=Q9NYW8.1 508 520 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263151	46.000000	-	.	Target=Q7TSH9.1 618 630 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263151	46.000000	-	.	Target=Q09FC8-2.2 505 517 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263151	46.000000	-	.	Target=Q09FC8.2 541 553 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263151	46.000000	-	.	Target=Q9P2J8.3 301 313 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263151	46.000000	-	.	Target=Q09FC8-3.2 263 275 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263151	46.000000	-	.	Target=Q9Y6Q3.3 598 610 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263151	46.000000	-	.	Target=Q9Y6Q3-2.3 613 625 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263166	47.000000	-	.	Target=Q96NI8.1 350 367 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263190	47.000000	-	.	Target=Q6ZNG0.1 292 317 +;percentID=42
+chr4-04	SwissProt	protein_match	263113	263190	47.000000	-	.	Target=Q5RB33.1 292 317 +;percentID=42
+chr4-04	SwissProt	protein_match	263113	263190	47.000000	-	.	Target=Q6ZNG0-2.1 178 203 +;percentID=42
+chr4-04	SwissProt	protein_match	263113	263190	47.000000	-	.	Target=Q8N2I2.1 368 393 +;percentID=42
+chr4-04	SwissProt	protein_match	263113	263169	47.000000	-	.	Target=Q96MR9.2 731 749 +;percentID=47
+chr4-04	SwissProt	protein_match	263113	263166	47.000000	-	.	Target=Q9UJW7.2 509 526 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263166	47.000000	-	.	Target=Q2M3X9.1 461 478 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263151	47.000000	-	.	Target=Q06732.2 326 338 +;percentID=53
+chr4-04	SwissProt	protein_match	263113	263166	47.000000	-	.	Target=A6NK53.2 472 489 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263169	47.000000	-	.	Target=Q9UC07.2 469 487 +;percentID=42
+chr4-04	SwissProt	protein_match	263113	263169	47.000000	-	.	Target=P0C7V5.1 324 342 +;percentID=47
+chr4-04	SwissProt	protein_match	263113	263151	48.000000	-	.	Target=Q02525.2 546 558 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263148	48.000000	-	.	Target=O60765.2 212 223 +;percentID=66
+chr4-04	SwissProt	protein_match	263113	263148	48.000000	-	.	Target=Q61751.1 182 193 +;percentID=66
+chr4-04	SwissProt	protein_match	263113	263166	48.000000	-	.	Target=Q5RES8.1 255 272 +;percentID=55
+chr4-04	SwissProt	protein_match	263113	263148	48.000000	-	.	Target=Q02975.1 186 197 +;percentID=66
+chr4-04	SwissProt	protein_match	263113	263229	48.000000	-	.	Target=Q8N184-1.3 477 511 +;percentID=35;Gap=M17 D4 M18 
+chr4-04	SwissProt	protein_match	263113	263184	49.000000	-	.	Target=Q86YE8.3 240 263 +;percentID=41
+chr4-04	SwissProt	protein_match	263113	263166	49.000000	-	.	Target=Q06730.3 488 505 +;percentID=55
+chr4-04	SwissProt	protein_match	263113	263166	49.000000	-	.	Target=Q6ECI4-2.2 299 316 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263166	49.000000	-	.	Target=Q6ECI4.2 417 434 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263190	49.000000	-	.	Target=Q3MIS6-2.1 272 297 +;percentID=38
+chr4-04	SwissProt	protein_match	263113	263166	50.000000	-	.	Target=Q96NG5.1 200 217 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263190	50.000000	-	.	Target=Q96JF6.3 608 633 +;percentID=42
+chr4-04	SwissProt	protein_match	263113	263166	50.000000	-	.	Target=Q8N9F8.1 376 393 +;percentID=55
+chr4-04	SwissProt	protein_match	263113	263169	50.000000	-	.	Target=Q8IYI8.1 449 467 +;percentID=47
+chr4-04	SwissProt	protein_match	263113	263190	50.000000	-	.	Target=Q96MU6-2.2 587 612 +;percentID=42
+chr4-04	SwissProt	protein_match	263113	263190	50.000000	-	.	Target=Q96MU6.2 615 640 +;percentID=42
+chr4-04	SwissProt	protein_match	263113	263166	50.000000	-	.	Target=Q8IZ26.2 334 351 +;percentID=55
+chr4-04	SwissProt	protein_match	263113	263151	50.000000	-	.	Target=Q8BQC8.1 311 323 +;percentID=69
+chr4-04	SwissProt	protein_match	263113	263151	50.000000	-	.	Target=Q8BQC8-2.1 310 322 +;percentID=69
+chr4-04	SwissProt	protein_match	263113	263166	50.000000	-	.	Target=A8MYF4.2 318 335 +;percentID=55
+chr4-04	SwissProt	protein_match	263113	263163	50.000000	-	.	Target=O75437.3 203 219 +;percentID=58
+chr4-04	SwissProt	protein_match	263113	263163	50.000000	-	.	Target=O75437-2.3 203 219 +;percentID=58
+chr4-04	SwissProt	protein_match	263113	263166	50.000000	-	.	Target=Q6ZN19-2.1 445 462 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263166	50.000000	-	.	Target=A8MUV8.3 304 321 +;percentID=55
+chr4-04	SwissProt	protein_match	263113	263166	51.000000	-	.	Target=Q9BX82.1 395 412 +;percentID=55
+chr4-04	SwissProt	protein_match	263113	263166	51.000000	-	.	Target=P10076.2 462 479 +;percentID=55
+chr4-04	SwissProt	protein_match	263113	263166	51.000000	-	.	Target=A0JNB1.1 752 769 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263166	52.000000	-	.	Target=Q02386.2 324 341 +;percentID=55
+chr4-04	SwissProt	protein_match	263113	263190	53.000000	-	.	Target=Q86XU0.1 275 300 +;percentID=42
+chr4-04	SwissProt	protein_match	263113	263166	53.000000	-	.	Target=Q5VIY5.1 487 504 +;percentID=55
+chr4-04	SwissProt	protein_match	263113	263166	53.000000	-	.	Target=Q8N988-2.2 200 217 +;percentID=55
+chr4-04	SwissProt	protein_match	263113	263166	53.000000	-	.	Target=Q5VIY5-2.1 434 451 +;percentID=55
+chr4-04	SwissProt	protein_match	263113	263166	53.000000	-	.	Target=Q9UJU3.1 517 534 +;percentID=55
+chr4-04	SwissProt	protein_match	263113	263166	53.000000	-	.	Target=Q8N988.2 193 210 +;percentID=55
+chr4-04	SwissProt	protein_match	263113	263151	53.000000	-	.	Target=Q6N045.2 344 356 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263166	54.000000	-	.	Target=Q8N823.1 418 435 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263166	55.000000	-	.	Target=Q6ZNA1.2 322 339 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263166	55.000000	-	.	Target=Q8N4W9.2 643 660 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263166	55.000000	-	.	Target=Q8N4W9-2.2 574 591 +;percentID=61
+chr4-04	SwissProt	protein_match	263113	263187	55.000000	-	.	Target=Q96NJ3.2 441 465 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263187	56.000000	-	.	Target=P17097.1 647 671 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263187	56.000000	-	.	Target=Q5RBX0.1 647 671 +;percentID=44
+chr4-04	SwissProt	protein_match	263113	263190	56.000000	-	.	Target=Q8N9Z0.2 244 269 +;percentID=42
+chr4-04	SwissProt	protein_match	263113	263190	56.000000	-	.	Target=Q8N9Z0-2.2 201 226 +;percentID=42
+chr4-04	SwissProt	protein_match	263113	263229	59.000000	-	.	Target=P17035-2.4 613 647 +;percentID=35;Gap=M10 D4 M25 
+chr4-04	SwissProt	protein_match	263113	263223	61.000000	-	.	Target=Q52M93.1 163 195 +;percentID=40;Gap=M20 D4 M13 
+chr4-04	SwissProt	protein_match	263113	263184	62.000000	-	.	Target=Q86Y25.1 230 253 +;percentID=50
+chr4-04	SwissProt	protein_match	263113	263190	66.000000	-	.	Target=Q9HBT8.1 422 447 +;percentID=50
+chr4-04	SwissProt	protein_match	263156	263326	90.000000	-	.	Target=Q03936-3.2 469 527 +;percentID=45;Gap=M7 D1 M3 I2 M30 I1 M16 
+chr4-04	SwissProt	protein_match	263156	263326	90.000000	-	.	Target=Q03936.2 501 559 +;percentID=45;Gap=M7 D1 M3 I2 M30 I1 M16 
+chr4-04	SwissProt	protein_match	263156	263326	90.000000	-	.	Target=Q03936-2.2 432 490 +;percentID=45;Gap=M7 D1 M3 I2 M30 I1 M16 
+chr4-04	SwissProt	protein_match	263159	263314	67.000000	-	.	Target=Q96SK3-2.3 261 313 +;percentID=30;Gap=M37 I1 M15 
+chr4-04	SwissProt	protein_match	263165	263320	65.000000	-	.	Target=P17040-2.3 916 968 +;percentID=38;Gap=M31 D2 M6 I3 M13 
+chr4-04	SwissProt	protein_match	263165	263326	71.000000	-	.	Target=Q8IYN0.1 449 504 +;percentID=42;Gap=M7 D1 M3 I2 M30 I1 M13 
+chr4-04	SwissProt	protein_match	263165	263326	74.000000	-	.	Target=A6NK75.3 441 496 +;percentID=42;Gap=M8 I1 M33 I1 M13 
+chr4-04	SwissProt	protein_match	263165	263326	86.000000	-	.	Target=Q9P255.2 413 468 +;percentID=44;Gap=M8 I1 M33 I1 M13 
+chr4-04	SwissProt	protein_match	263174	263302	59.000000	-	.	Target=O75437.3 603 646 +;percentID=43;Gap=M30 I1 M13 
+chr4-04	SwissProt	protein_match	263174	263302	59.000000	-	.	Target=O75437-2.3 295 338 +;percentID=43;Gap=M30 I1 M13 
+chr4-04	SwissProt	protein_match	263174	263353	68.000000	-	.	Target=Q03938.2 160 217 +;percentID=40;Gap=M7 D3 M40 I1 M10 
+chr4-04	SwissProt	protein_match	263192	263347	64.000000	-	.	Target=P52744.2 206 260 +;percentID=40;Gap=M7 I1 M8 I1 M33 I1 M4 
+chr4-04	SwissProt	protein_match	263195	263320	73.000000	-	.	Target=P17038-2.4 751 792 +;percentID=42
+chr4-04	SwissProt	protein_match	263195	263320	73.000000	-	.	Target=P17038.4 757 798 +;percentID=42
+chr4-04	SwissProt	protein_match	263210	263326	54.000000	-	.	Target=P17019.3 524 563 +;percentID=42;Gap=M8 I1 M31 
+chr4-04	SwissProt	protein_match	263210	263320	54.000000	-	.	Target=Q14593-2.3 444 480 +;percentID=40
+chr4-04	SwissProt	protein_match	263210	263320	54.000000	-	.	Target=Q14593.3 509 545 +;percentID=40
+chr4-04	SwissProt	protein_match	263210	263320	59.000000	-	.	Target=Q8N859.1 380 416 +;percentID=40
+chr4-04	SwissProt	protein_match	263210	263326	83.000000	-	.	Target=A6NN14.3 1124 1163 +;percentID=52;Gap=M8 I1 M31 
+chr4-04	SwissProt	protein_match	263216	263314	60.000000	-	.	Target=Q8NEM1.2 487 519 +;percentID=42
+chr4-04	SwissProt	protein_match	263228	263326	40.000000	-	.	Target=Q09FC8-5.2 516 549 +;percentID=40;Gap=M7 D1 M3 I2 M22 
+chr4-04	SwissProt	protein_match	263228	263326	40.000000	-	.	Target=Q09FC8-4.2 503 536 +;percentID=40;Gap=M7 D1 M3 I2 M22 
+chr4-04	SwissProt	protein_match	263228	263326	40.000000	-	.	Target=Q09FC8-2.2 528 561 +;percentID=40;Gap=M7 D1 M3 I2 M22 
+chr4-04	SwissProt	protein_match	263228	263326	40.000000	-	.	Target=Q09FC8.2 564 597 +;percentID=40;Gap=M7 D1 M3 I2 M22 
+chr4-04	SwissProt	protein_match	263228	263326	40.000000	-	.	Target=Q09FC8-3.2 286 319 +;percentID=40;Gap=M7 D1 M3 I2 M22 
+chr4-04	SwissProt	protein_match	263228	263290	41.000000	-	.	Target=P17020.3 662 682 +;percentID=47
+chr4-04	SwissProt	protein_match	263228	263290	41.000000	-	.	Target=A1YF12.1 662 682 +;percentID=47
+chr4-04	SwissProt	protein_match	263228	263290	41.000000	-	.	Target=A2T759.1 662 682 +;percentID=47
+chr4-04	SwissProt	protein_match	263228	263323	41.000000	-	.	Target=A2VDP4.1 386 418 +;percentID=41;Gap=M6 D1 M2 I2 M23 
+chr4-04	SwissProt	protein_match	263228	263293	42.000000	-	.	Target=Q8N184.3 565 586 +;percentID=40
+chr4-04	SwissProt	protein_match	263228	263320	42.000000	-	.	Target=Q02975.1 460 490 +;percentID=41
+chr4-04	SwissProt	protein_match	263228	263347	43.000000	-	.	Target=Q5JVG2.1 425 465 +;percentID=40;Gap=M14 D1 M3 I2 M22 
+chr4-04	SwissProt	protein_match	263228	263293	44.000000	-	.	Target=Q86TJ5.1 384 405 +;percentID=45
+chr4-04	SwissProt	protein_match	263228	263293	44.000000	-	.	Target=Q6ZMY9.1 209 230 +;percentID=45
+chr4-04	SwissProt	protein_match	263228	263290	44.000000	-	.	Target=Q8R0T2.1 490 510 +;percentID=47
+chr4-04	SwissProt	protein_match	263228	263290	44.000000	-	.	Target=Q9H5H4.2 462 482 +;percentID=47
+chr4-04	SwissProt	protein_match	263228	263293	45.000000	-	.	Target=Q14588.3 600 621 +;percentID=45
+chr4-04	SwissProt	protein_match	263228	263356	45.000000	-	.	Target=P51814-6.2 337 380 +;percentID=42;Gap=M17 D1 M3 I2 M22 
+chr4-04	SwissProt	protein_match	263228	263356	45.000000	-	.	Target=P51814.2 379 422 +;percentID=42;Gap=M17 D1 M3 I2 M22 
+chr4-04	SwissProt	protein_match	263228	263356	45.000000	-	.	Target=P51814-5.2 371 414 +;percentID=42;Gap=M17 D1 M3 I2 M22 
+chr4-04	SwissProt	protein_match	263228	263356	45.000000	-	.	Target=P51814-2.2 339 382 +;percentID=42;Gap=M17 D1 M3 I2 M22 
+chr4-04	SwissProt	protein_match	263228	263356	45.000000	-	.	Target=P51814-3.2 347 390 +;percentID=42;Gap=M17 D1 M3 I2 M22 
+chr4-04	SwissProt	protein_match	263228	263356	45.000000	-	.	Target=P51814-7.2 303 346 +;percentID=42;Gap=M17 D1 M3 I2 M22 
+chr4-04	SwissProt	protein_match	263228	263356	45.000000	-	.	Target=P51814-8.2 301 344 +;percentID=42;Gap=M17 D1 M3 I2 M22 
+chr4-04	SwissProt	protein_match	263228	263293	45.000000	-	.	Target=Q8NB42.1 498 519 +;percentID=50
+chr4-04	SwissProt	protein_match	263228	263302	45.000000	-	.	Target=A8MXY4.2 1010 1034 +;percentID=44
+chr4-04	SwissProt	protein_match	263228	263293	45.000000	-	.	Target=Q9XSR1.1 628 649 +;percentID=45
+chr4-04	SwissProt	protein_match	263228	263326	46.000000	-	.	Target=Q61116.1 558 590 +;percentID=42
+chr4-04	SwissProt	protein_match	263228	263323	46.000000	-	.	Target=Q8BI67.1 802 834 +;percentID=47;Gap=M6 D1 M2 I2 M23 
+chr4-04	SwissProt	protein_match	263228	263293	47.000000	-	.	Target=Q5RDX1.1 634 655 +;percentID=50
+chr4-04	SwissProt	protein_match	263228	263293	47.000000	-	.	Target=Q6P3V2.2 666 687 +;percentID=50
+chr4-04	SwissProt	protein_match	263228	263293	47.000000	-	.	Target=Q14587.2 896 917 +;percentID=50
+chr4-04	SwissProt	protein_match	263228	263293	47.000000	-	.	Target=Q5RB30.1 666 687 +;percentID=50
+chr4-04	SwissProt	protein_match	263228	263293	47.000000	-	.	Target=Q52M93.1 666 687 +;percentID=50
+chr4-04	SwissProt	protein_match	263228	263326	49.000000	-	.	Target=Q8R2V3.2 626 659 +;percentID=44;Gap=M8 I1 M25 
+chr4-04	SwissProt	protein_match	263228	263320	50.000000	-	.	Target=Q6V9R5.2 367 397 +;percentID=41
+chr4-04	SwissProt	protein_match	263228	263326	51.000000	-	.	Target=Q9NYT6.2 692 724 +;percentID=42
+chr4-04	SwissProt	protein_match	263228	263356	51.000000	-	.	Target=Q5HY98.1 393 436 +;percentID=42;Gap=M17 D1 M3 I2 M22 
+chr4-04	SwissProt	protein_match	263228	263353	52.000000	-	.	Target=P21506.3 443 486 +;percentID=40;Gap=M12 I1 M4 D1 M3 I2 M22 
+chr4-04	SwissProt	protein_match	263228	263296	52.000000	-	.	Target=Q9UK11.1 347 369 +;percentID=43
+chr4-04	SwissProt	protein_match	263228	263296	52.000000	-	.	Target=Q9UK12.2 316 338 +;percentID=43
+chr4-04	SwissProt	protein_match	263228	263302	55.000000	-	.	Target=Q14586.2 717 741 +;percentID=48
+chr4-04	SwissProt	protein_match	263228	263320	57.000000	-	.	Target=Q96JF6.3 399 429 +;percentID=45
+chr4-04	SwissProt	protein_match	263228	263356	58.000000	-	.	Target=Q6ZN57.1 364 407 +;percentID=40;Gap=M17 D1 M3 I2 M22 
+chr4-04	SwissProt	protein_match	263228	263320	65.000000	-	.	Target=Q5TYW1.2 765 795 +;percentID=48
+chr4-04	SwissProt	protein_match	263234	263290	40.000000	-	.	Target=O95201.2 509 527 +;percentID=42
+chr4-04	SwissProt	protein_match	263234	263290	40.000000	-	.	Target=Q9BS31.1 351 369 +;percentID=47
+chr4-04	SwissProt	protein_match	263234	263317	41.000000	-	.	Target=Q6P560.1 594 622 +;percentID=43;Gap=M4 D1 M3 I2 M20 
+chr4-04	SwissProt	protein_match	263234	263326	42.000000	-	.	Target=O43345.1 1117 1148 +;percentID=40;Gap=M8 I1 M23 
+chr4-04	SwissProt	protein_match	263234	263320	44.000000	-	.	Target=Q3KNS6-2.1 219 247 +;percentID=37
+chr4-04	SwissProt	protein_match	263234	263326	45.000000	-	.	Target=Q08ER8.2 527 558 +;percentID=42;Gap=M7 D1 M3 I2 M20 
+chr4-04	SwissProt	protein_match	263234	263293	45.000000	-	.	Target=Q2TL60.1 333 352 +;percentID=45
+chr4-04	SwissProt	protein_match	263234	263323	49.000000	-	.	Target=Q96SE7.1 786 813 +;percentID=46;Gap=M6 D1 M3 D1 M19 
+chr4-04	SwissProt	protein_match	263234	263326	50.000000	-	.	Target=Q6ZMV8.1 472 503 +;percentID=40;Gap=M8 I1 M23 
+chr4-04	SwissProt	protein_match	263234	263290	52.000000	-	.	Target=Q8TF20.2 886 904 +;percentID=52
+chr4-04	SwissProt	protein_match	263234	263320	55.000000	-	.	Target=Q8N823.1 282 310 +;percentID=44
+chr4-04	SwissProt	protein_match	263234	263326	55.000000	-	.	Target=A6NK31.3 570 600 +;percentID=45
+chr4-04	SwissProt	protein_match	263234	263341	57.000000	-	.	Target=Q5T5D7.1 341 378 +;percentID=43;Gap=M8 I1 M4 D1 M3 I2 M20 
+chr4-04	SwissProt	protein_match	263234	263356	67.000000	-	.	Target=O14628.2 588 629 +;percentID=45;Gap=M18 I1 M23 
+chr4-04	SwissProt	protein_match	263234	263356	67.000000	-	.	Target=O14628-5.2 565 606 +;percentID=45;Gap=M18 I1 M23 
+chr4-04	SwissProt	protein_match	263234	263356	67.000000	-	.	Target=O14628-6.2 569 610 +;percentID=45;Gap=M18 I1 M23 
+chr4-04	SwissProt	protein_match	263234	263356	67.000000	-	.	Target=O14628-4.2 516 557 +;percentID=45;Gap=M18 I1 M23 
+chr4-04	SwissProt	protein_match	263234	263356	67.000000	-	.	Target=O14628-7.2 520 561 +;percentID=45;Gap=M18 I1 M23 
+chr4-04	SwissProt	protein_match	263237	263296	40.000000	-	.	Target=Q8TF32.2 543 562 +;percentID=40
+chr4-04	SwissProt	protein_match	263249	263299	52.000000	-	.	Target=Q9BR84.1 521 537 +;percentID=52
+chr4-04	SwissProt	protein_match	263249	263320	55.000000	-	.	Target=Q86XN6.2 657 679 +;percentID=50;Gap=M20 D1 M3 
+chr4-04	SwissProt	protein_match	263249	263320	55.000000	-	.	Target=Q86XN6-3.2 603 625 +;percentID=50;Gap=M20 D1 M3 
+chr4-04	SwissProt	protein_match	263255	263296	42.000000	-	.	Target=Q8N7K0.1 509 521 +;percentID=57;Gap=M8 D1 M5 
+chr4-04	SwissProt	protein_match	263255	263296	42.000000	-	.	Target=Q8N7K0-2.1 474 486 +;percentID=57;Gap=M8 D1 M5 
+chr4-04	SwissProt	protein_match	263258	263320	40.000000	-	.	Target=Q86T29.1 192 212 +;percentID=42
+chr4-04	SwissProt	protein_match	263258	263293	40.000000	-	.	Target=P17031.3 402 413 +;percentID=58
+chr4-04	SwissProt	protein_match	263258	263320	40.000000	-	.	Target=Q8BZW4-2.1 382 402 +;percentID=42
+chr4-04	SwissProt	protein_match	263258	263320	40.000000	-	.	Target=Q8BZW4.1 403 423 +;percentID=42
+chr4-04	SwissProt	protein_match	263258	263356	41.000000	-	.	Target=Q9Y473.1 401 434 +;percentID=40;Gap=M17 D1 M2 I2 M13 
+chr4-04	SwissProt	protein_match	263258	263320	41.000000	-	.	Target=Q06732-2.2 492 512 +;percentID=47
+chr4-04	SwissProt	protein_match	263258	263320	41.000000	-	.	Target=Q06732.2 604 624 +;percentID=47
+chr4-04	SwissProt	protein_match	263258	263326	41.000000	-	.	Target=Q9BWM5.1 542 565 +;percentID=48;Gap=M7 D1 M3 I2 M12 
+chr4-04	SwissProt	protein_match	263258	263290	41.000000	-	.	Target=Q9BY31.2 642 652 +;percentID=63
+chr4-04	SwissProt	protein_match	263258	263320	42.000000	-	.	Target=Q14591.3 561 581 +;percentID=42
+chr4-04	SwissProt	protein_match	263258	263326	42.000000	-	.	Target=Q7Z340.3 580 602 +;percentID=43
+chr4-04	SwissProt	protein_match	263258	263326	42.000000	-	.	Target=Q8TF45.2 503 526 +;percentID=45;Gap=M19 I1 M4 
+chr4-04	SwissProt	protein_match	263258	263326	42.000000	-	.	Target=Q7Z340-2.3 507 529 +;percentID=43
+chr4-04	SwissProt	protein_match	263258	263320	42.000000	-	.	Target=Q8N4W9.2 646 666 +;percentID=47
+chr4-04	SwissProt	protein_match	263258	263320	42.000000	-	.	Target=Q8N4W9-2.2 577 597 +;percentID=47
+chr4-04	SwissProt	protein_match	263258	263326	42.000000	-	.	Target=Q8TC21.2 271 294 +;percentID=45;Gap=M10 I1 M13 
+chr4-04	SwissProt	protein_match	263258	263326	42.000000	-	.	Target=Q8TC21-2.2 201 224 +;percentID=45;Gap=M10 I1 M13 
+chr4-04	SwissProt	protein_match	263258	263320	43.000000	-	.	Target=P08042-2.3 332 352 +;percentID=47
+chr4-04	SwissProt	protein_match	263258	263320	43.000000	-	.	Target=P08042.3 345 365 +;percentID=47
+chr4-04	SwissProt	protein_match	263258	263290	44.000000	-	.	Target=Q8N988-2.2 213 223 +;percentID=72
+chr4-04	SwissProt	protein_match	263258	263326	44.000000	-	.	Target=Q80YP6.1 432 454 +;percentID=43
+chr4-04	SwissProt	protein_match	263258	263290	44.000000	-	.	Target=Q8N988.2 206 216 +;percentID=72
+chr4-04	SwissProt	protein_match	263258	263326	45.000000	-	.	Target=Q5JVG8.1 389 412 +;percentID=50;Gap=M8 I1 M15 
+chr4-04	SwissProt	protein_match	263258	263320	45.000000	-	.	Target=Q9UC07.2 529 549 +;percentID=47
+chr4-04	SwissProt	protein_match	263258	263320	45.000000	-	.	Target=Q5REI6.1 463 483 +;percentID=42
+chr4-04	SwissProt	protein_match	263258	263293	45.000000	-	.	Target=Q8BQC8.1 652 663 +;percentID=66
+chr4-04	SwissProt	protein_match	263258	263293	45.000000	-	.	Target=Q9NYW8.1 655 666 +;percentID=66
+chr4-04	SwissProt	protein_match	263258	263293	45.000000	-	.	Target=Q8BQC8-2.1 651 662 +;percentID=66
+chr4-04	SwissProt	protein_match	263258	263314	45.000000	-	.	Target=A8MT65.2 345 363 +;percentID=47
+chr4-04	SwissProt	protein_match	263258	263302	46.000000	-	.	Target=Q494X3.1 524 538 +;percentID=53
+chr4-04	SwissProt	protein_match	263258	263320	46.000000	-	.	Target=P59923.1 1001 1021 +;percentID=52
+chr4-04	SwissProt	protein_match	263258	263350	46.000000	-	.	Target=Q3KQV3.2 494 521 +;percentID=45;Gap=M7 D3 M21 
+chr4-04	SwissProt	protein_match	263258	263350	46.000000	-	.	Target=Q3KQV3-2.2 427 454 +;percentID=45;Gap=M7 D3 M21 
+chr4-04	SwissProt	protein_match	263258	263320	47.000000	-	.	Target=Q96NG5.1 287 307 +;percentID=47
+chr4-04	SwissProt	protein_match	263258	263320	47.000000	-	.	Target=Q96JL9.3 445 465 +;percentID=52
+chr4-04	SwissProt	protein_match	263258	263320	47.000000	-	.	Target=P10076.2 297 317 +;percentID=52
+chr4-04	SwissProt	protein_match	263258	263320	47.000000	-	.	Target=Q9Y2H8.1 623 643 +;percentID=52
+chr4-04	SwissProt	protein_match	263258	263347	47.000000	-	.	Target=Q96GC6.1 603 634 +;percentID=37;Gap=M17 I2 M13 
+chr4-04	SwissProt	protein_match	263258	263347	47.000000	-	.	Target=Q96GC6-2.1 571 602 +;percentID=37;Gap=M17 I2 M13 
+chr4-04	SwissProt	protein_match	263258	263347	47.000000	-	.	Target=Q96GC6-4.1 322 353 +;percentID=37;Gap=M17 I2 M13 
+chr4-04	SwissProt	protein_match	263258	263353	48.000000	-	.	Target=P17141.3 433 466 +;percentID=40;Gap=M12 I1 M4 D1 M3 I2 M12 
+chr4-04	SwissProt	protein_match	263258	263320	48.000000	-	.	Target=Q6ZMW2.1 669 689 +;percentID=52
+chr4-04	SwissProt	protein_match	263258	263317	49.000000	-	.	Target=Q8IZ26.2 253 274 +;percentID=52;Gap=M4 D1 M3 I2 M8 I1 M4 
+chr4-04	SwissProt	protein_match	263258	263320	50.000000	-	.	Target=Q5VIY5.1 490 510 +;percentID=52
+chr4-04	SwissProt	protein_match	263258	263320	51.000000	-	.	Target=Q8N9F8.1 491 511 +;percentID=52
+chr4-04	SwissProt	protein_match	263258	263347	51.000000	-	.	Target=P17097.1 647 677 +;percentID=50;Gap=M14 D1 M3 I2 M12 
+chr4-04	SwissProt	protein_match	263258	263347	51.000000	-	.	Target=Q5RBX0.1 647 677 +;percentID=50;Gap=M14 D1 M3 I2 M12 
+chr4-04	SwissProt	protein_match	263258	263326	51.000000	-	.	Target=Q3SY52.1 456 478 +;percentID=47
+chr4-04	SwissProt	protein_match	263258	263326	51.000000	-	.	Target=Q3SY52-2.1 401 423 +;percentID=47
+chr4-04	SwissProt	protein_match	263258	263326	51.000000	-	.	Target=P17035.4 684 706 +;percentID=52
+chr4-04	SwissProt	protein_match	263258	263326	51.000000	-	.	Target=P17035-2.4 631 653 +;percentID=52
+chr4-04	SwissProt	protein_match	263258	263326	51.000000	-	.	Target=Q3SY52-3.1 353 375 +;percentID=47
+chr4-04	SwissProt	protein_match	263258	263353	52.000000	-	.	Target=O88553.1 437 470 +;percentID=41;Gap=M12 I1 M5 I1 M15 
+chr4-04	SwissProt	protein_match	263258	263356	54.000000	-	.	Target=Q15928.1 237 270 +;percentID=41;Gap=M18 I1 M15 
+chr4-04	SwissProt	protein_match	263258	263320	55.000000	-	.	Target=Q5MCW4.1 545 565 +;percentID=52
+chr4-04	SwissProt	protein_match	263258	263320	57.000000	-	.	Target=Q80W31.1 538 558 +;percentID=52
+chr4-04	SwissProt	protein_match	263258	263314	67.000000	-	.	Target=O95780.1 478 496 +;percentID=63
+chr4-04	SwissProt	protein_match	263258	263314	67.000000	-	.	Target=O95780-2.1 402 420 +;percentID=63
+chr4-04	SwissProt	protein_match	263261	263326	40.000000	-	.	Target=P0C7V5.1 353 375 +;percentID=50;Gap=M7 D1 M3 I2 M11 
+chr4-04	SwissProt	protein_match	263261	263302	42.000000	-	.	Target=Q95K52.1 630 643 +;percentID=50
+chr4-04	SwissProt	protein_match	263264	263326	40.000000	-	.	Target=Q12901.3 449 469 +;percentID=42
+chr4-04	SwissProt	protein_match	263264	263320	40.000000	-	.	Target=Q8N972.1 527 544 +;percentID=47;Gap=M16 D1 M2 
+chr4-04	SwissProt	protein_match	263264	263320	40.000000	-	.	Target=Q9QXT9.1 478 495 +;percentID=47;Gap=M15 D1 M3 
+chr4-04	SwissProt	protein_match	263264	263320	40.000000	-	.	Target=Q61751.1 456 473 +;percentID=47;Gap=M15 D1 M3 
+chr4-04	SwissProt	protein_match	263264	263293	40.000000	-	.	Target=O43296.1 431 440 +;percentID=60
+chr4-04	SwissProt	protein_match	263264	263326	41.000000	-	.	Target=Q9UIE0.3 385 405 +;percentID=42
+chr4-04	SwissProt	protein_match	263264	263347	43.000000	-	.	Target=Q9BUY5.1 460 489 +;percentID=40;Gap=M8 I1 M7 I1 M13 
+chr4-04	SwissProt	protein_match	263264	263320	44.000000	-	.	Target=Q9BS34.1 360 377 +;percentID=52;Gap=M16 D1 M2 
+chr4-04	SwissProt	protein_match	263264	263320	44.000000	-	.	Target=A8MUV8.3 447 464 +;percentID=52;Gap=M16 D1 M2 
+chr4-04	SwissProt	protein_match	263264	263356	48.000000	-	.	Target=Q9UK10.2 606 637 +;percentID=43;Gap=M5 I1 M26 
+chr4-04	SwissProt	protein_match	263267	263296	41.000000	-	.	Target=Q0D2J5.2 287 296 +;percentID=60
+chr4-04	SwissProt	protein_match	263270	263323	40.000000	-	.	Target=Q5RBQ3.1 606 624 +;percentID=55;Gap=M6 D1 M3 I2 M8 
+chr4-04	SwissProt	protein_match	263270	263323	40.000000	-	.	Target=Q6P9A3-2.1 593 611 +;percentID=55;Gap=M6 D1 M3 I2 M8 
+chr4-04	SwissProt	protein_match	263270	263323	40.000000	-	.	Target=Q6P9A3.1 606 624 +;percentID=55;Gap=M6 D1 M3 I2 M8 
+chr4-04	SwissProt	protein_match	263270	263320	40.000000	-	.	Target=Q9Y6Q3.3 596 612 +;percentID=47
+chr4-04	SwissProt	protein_match	263270	263320	40.000000	-	.	Target=Q9Y6Q3-2.3 611 627 +;percentID=47
+chr4-04	SwissProt	protein_match	263270	263353	41.000000	-	.	Target=Q6NX49.1 474 503 +;percentID=40;Gap=M12 I1 M5 I1 M11 
+chr4-04	SwissProt	protein_match	263273	263320	40.000000	-	.	Target=Q03924-2.3 412 427 +;percentID=50
+chr4-04	SwissProt	protein_match	263273	263347	40.000000	-	.	Target=Q8R1D1.1 454 480 +;percentID=40;Gap=M8 I1 M7 I1 M10 
+chr4-04	SwissProt	protein_match	263273	263320	41.000000	-	.	Target=A1L1L7.1 300 315 +;percentID=50
+chr4-04	SwissProt	protein_match	263273	263353	42.000000	-	.	Target=Q3KP31.1 312 338 +;percentID=40
+chr4-04	SwissProt	protein_match	263276	263302	41.000000	-	.	Target=Q5REN4.1 242 250 +;percentID=66
+chr4-04	SwissProt	protein_match	263276	263302	41.000000	-	.	Target=Q8NDW4.1 243 251 +;percentID=66
+chr4-04	SwissProt	protein_match	263276	263353	41.000000	-	.	Target=P16374.2 186 210 +;percentID=44;Gap=M4 I1 M5 D2 M15 
+chr4-04	SwissProt	protein_match	263276	263320	41.000000	-	.	Target=Q6N045.2 426 440 +;percentID=46
+chr4-04	SwissProt	protein_match	263276	263299	43.000000	-	.	Target=Q9HCZ1.2 211 218 +;percentID=87
+chr4-04	SwissProt	protein_match	263285	263353	40.000000	-	.	Target=Q5SXM1.1 501 523 +;percentID=43
+chr4-04	SwissProt	protein_match	263659	263700	41.000000	-	.	Target=Q5T5D7.1 156 169 +;percentID=57
+chr4-04	SwissProt	protein_match	263659	263748	58.000000	-	.	Target=A2VDQ7.1 119 148 +;percentID=40
+chr4-04	SwissProt	protein_match	263659	263754	73.000000	-	.	Target=Q6ZMY9.1 184 215 +;percentID=43
+chr4-04	SwissProt	protein_match	263659	263793	73.000000	-	.	Target=Q5HYK9.2 324 368 +;percentID=40
+chr4-04	SwissProt	protein_match	263659	263790	80.000000	-	.	Target=Q60585.2 167 210 +;percentID=40
+chr4-04	SwissProt	protein_match	263659	263796	86.000000	-	.	Target=Q86YE8.3 107 152 +;percentID=40;Gap=M20 I1 M11 D1 M14 
+chr4-04	SwissProt	protein_match	263659	263787	90.000000	-	.	Target=Q8NC26.1 300 342 +;percentID=44
+chr4-04	SwissProt	protein_match	263659	263796	90.000000	-	.	Target=Q6ZMW2.1 555 600 +;percentID=41
+chr4-04	SwissProt	protein_match	263659	263832	92.000000	-	.	Target=Q8N184-1.3 287 344 +;percentID=32
+chr4-04	SwissProt	protein_match	263659	263796	93.000000	-	.	Target=Q9UK13.2 275 320 +;percentID=41
+chr4-04	SwissProt	protein_match	263659	263793	93.000000	-	.	Target=Q96JL9.3 444 488 +;percentID=42
+chr4-04	SwissProt	protein_match	263659	263793	94.000000	-	.	Target=Q7Z3V5.3 552 596 +;percentID=40
+chr4-04	SwissProt	protein_match	263659	263796	94.000000	-	.	Target=Q6ZNA1.2 323 368 +;percentID=43
+chr4-04	SwissProt	protein_match	263659	263805	94.000000	-	.	Target=A6NK31.3 449 500 +;percentID=46;Gap=M44 I3 M5 
+chr4-04	SwissProt	protein_match	263659	263793	95.000000	-	.	Target=Q8NDP4.1 432 476 +;percentID=44
+chr4-04	SwissProt	protein_match	263659	263796	95.000000	-	.	Target=Q9BWM5.1 347 392 +;percentID=41
+chr4-04	SwissProt	protein_match	263659	263796	95.000000	-	.	Target=Q6JLC9.1 153 198 +;percentID=41
+chr4-04	SwissProt	protein_match	263659	263793	97.000000	-	.	Target=Q5R5Q6.1 551 595 +;percentID=42
+chr4-04	SwissProt	protein_match	263659	263796	99.000000	-	.	Target=Q9BX82.1 480 525 +;percentID=43
+chr4-04	SwissProt	protein_match	263659	263808	99.000000	-	.	Target=Q9UK11.1 304 354 +;percentID=41;Gap=M3 I1 M47 
+chr4-04	SwissProt	protein_match	263659	263796	100.000000	-	.	Target=A2RRD8.1 154 199 +;percentID=47
+chr4-04	SwissProt	protein_match	263659	263823	100.000000	-	.	Target=Q9HCG1.2 270 323 +;percentID=40;Gap=M9 D1 M45 
+chr4-04	SwissProt	protein_match	263659	263832	100.000000	-	.	Target=Q8IVC4.1 242 308 +;percentID=40;Gap=M8 I2 M4 I7 M46 
+chr4-04	SwissProt	protein_match	263659	263811	101.000000	-	.	Target=Q9Y6R6.1 741 791 +;percentID=46;Gap=M26 I1 M9 D1 M15 
+chr4-04	SwissProt	protein_match	263659	263796	101.000000	-	.	Target=Q96IR2.2 796 841 +;percentID=45
+chr4-04	SwissProt	protein_match	263659	263793	102.000000	-	.	Target=Q96BR6.2 272 316 +;percentID=44
+chr4-04	SwissProt	protein_match	263659	263832	102.000000	-	.	Target=P17040-2.3 846 903 +;percentID=39
+chr4-04	SwissProt	protein_match	263659	263802	103.000000	-	.	Target=Q9NSJ1.2 326 373 +;percentID=45
+chr4-04	SwissProt	protein_match	263659	263829	104.000000	-	.	Target=Q9UK10.2 579 634 +;percentID=42;Gap=M6 D1 M50 
+chr4-04	SwissProt	protein_match	263659	263802	108.000000	-	.	Target=O88553.1 334 381 +;percentID=43
+chr4-04	SwissProt	protein_match	263659	263826	109.000000	-	.	Target=Q9UC07.2 370 426 +;percentID=42;Gap=M3 I1 M53 
+chr4-04	SwissProt	protein_match	263659	263832	112.000000	-	.	Target=A6NGH9.3 486 543 +;percentID=43
+chr4-04	SwissProt	protein_match	263659	263832	115.000000	-	.	Target=Q8N2I2.1 393 450 +;percentID=41
+chr4-04	SwissProt	protein_match	263659	263832	124.000000	-	.	Target=P10751.2 178 235 +;percentID=42;Gap=M30 I1 M4 D1 M23 
+chr4-04	SwissProt	protein_match	263659	263832	126.000000	-	.	Target=Q8NB42.1 251 308 +;percentID=43
+chr4-04	SwissProt	protein_match	263659	263832	129.000000	-	.	Target=P52744.2 175 232 +;percentID=48
+chr4-04	SwissProt	protein_match	263659	263832	134.000000	-	.	Target=A8MTY0.2 291 348 +;percentID=50
+chr4-04	SwissProt	protein_match	263659	263832	134.000000	-	.	Target=O75346.2 237 294 +;percentID=50
+chr4-04	SwissProt	protein_match	263659	263832	134.000000	-	.	Target=O75346-2.2 161 218 +;percentID=50
+chr4-04	SwissProt	protein_match	263659	263832	139.000000	-	.	Target=Q6ZR52.3 342 399 +;percentID=51
+chr4-04	SwissProt	protein_match	263659	263832	140.000000	-	.	Target=A8MXY4.2 869 926 +;percentID=51
+chr4-04	SwissProt	protein_match	263659	263832	141.000000	-	.	Target=Q03924.3 258 315 +;percentID=50
+chr4-04	SwissProt	protein_match	263659	263832	141.000000	-	.	Target=Q14593-2.3 290 347 +;percentID=50
+chr4-04	SwissProt	protein_match	263659	263832	141.000000	-	.	Target=Q14593.3 355 412 +;percentID=50
+chr4-04	SwissProt	protein_match	263659	263832	155.000000	-	.	Target=O75437.3 499 556 +;percentID=55
+chr4-04	SwissProt	protein_match	263659	263832	155.000000	-	.	Target=P17019.3 233 290 +;percentID=55
+chr4-04	SwissProt	protein_match	263662	263733	45.000000	-	.	Target=Q06730.3 313 337 +;percentID=44;Gap=M5 I1 M19 
+chr4-04	SwissProt	protein_match	263662	263712	47.000000	-	.	Target=P17098.2 250 266 +;percentID=41
+chr4-04	SwissProt	protein_match	263662	263772	61.000000	-	.	Target=Q5MCW4.1 187 223 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263796	75.000000	-	.	Target=Q96GC6.1 500 544 +;percentID=35
+chr4-04	SwissProt	protein_match	263662	263796	75.000000	-	.	Target=Q96GC6-2.1 468 512 +;percentID=35
+chr4-04	SwissProt	protein_match	263662	263796	75.000000	-	.	Target=Q96GC6-4.1 219 263 +;percentID=35
+chr4-04	SwissProt	protein_match	263662	263796	79.000000	-	.	Target=Q8IZ26.2 307 351 +;percentID=43;Gap=M18 I1 M12 D1 M14 
+chr4-04	SwissProt	protein_match	263662	263796	80.000000	-	.	Target=O75123.1 424 468 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263784	83.000000	-	.	Target=Q0VAW7.1 521 561 +;percentID=41
+chr4-04	SwissProt	protein_match	263662	263784	83.000000	-	.	Target=Q0VAW7-2.1 515 555 +;percentID=41
+chr4-04	SwissProt	protein_match	263662	263796	83.000000	-	.	Target=O75290.3 578 622 +;percentID=41;Gap=M18 I1 M12 D1 M14 
+chr4-04	SwissProt	protein_match	263662	263802	84.000000	-	.	Target=P21506.3 257 302 +;percentID=40;Gap=M5 D1 M41 
+chr4-04	SwissProt	protein_match	263662	263820	84.000000	-	.	Target=P51814-6.2 592 644 +;percentID=42;Gap=M29 I1 M9 D1 M14 
+chr4-04	SwissProt	protein_match	263662	263820	84.000000	-	.	Target=P51814.2 634 686 +;percentID=42;Gap=M29 I1 M9 D1 M14 
+chr4-04	SwissProt	protein_match	263662	263820	84.000000	-	.	Target=P51814-5.2 626 678 +;percentID=42;Gap=M29 I1 M9 D1 M14 
+chr4-04	SwissProt	protein_match	263662	263820	84.000000	-	.	Target=P51814-2.2 594 646 +;percentID=42;Gap=M29 I1 M9 D1 M14 
+chr4-04	SwissProt	protein_match	263662	263820	84.000000	-	.	Target=P51814-4.2 506 558 +;percentID=42;Gap=M29 I1 M9 D1 M14 
+chr4-04	SwissProt	protein_match	263662	263820	84.000000	-	.	Target=P51814-3.2 602 654 +;percentID=42;Gap=M29 I1 M9 D1 M14 
+chr4-04	SwissProt	protein_match	263662	263820	84.000000	-	.	Target=P51814-7.2 558 610 +;percentID=42;Gap=M29 I1 M9 D1 M14 
+chr4-04	SwissProt	protein_match	263662	263820	84.000000	-	.	Target=P51814-8.2 556 608 +;percentID=42;Gap=M29 I1 M9 D1 M14 
+chr4-04	SwissProt	protein_match	263662	263802	85.000000	-	.	Target=Q5JVG2.1 375 421 +;percentID=42
+chr4-04	SwissProt	protein_match	263662	263796	85.000000	-	.	Target=Q9Z1D8.1 390 434 +;percentID=41;Gap=M21 I1 M9 D1 M14 
+chr4-04	SwissProt	protein_match	263662	263811	85.000000	-	.	Target=Q8N9F8.1 205 253 +;percentID=40;Gap=M5 D1 M44 
+chr4-04	SwissProt	protein_match	263662	263793	86.000000	-	.	Target=Q15935.2 430 473 +;percentID=46;Gap=M17 I1 M4 D1 M22 
+chr4-04	SwissProt	protein_match	263662	263796	86.000000	-	.	Target=Q9Y2L8.1 395 439 +;percentID=41;Gap=M21 I1 M9 D1 M14 
+chr4-04	SwissProt	protein_match	263662	263796	86.000000	-	.	Target=A2T7D2.1 395 439 +;percentID=41;Gap=M21 I1 M9 D1 M14 
+chr4-04	SwissProt	protein_match	263662	263784	86.000000	-	.	Target=A8MYF4.2 153 193 +;percentID=41
+chr4-04	SwissProt	protein_match	263662	263820	88.000000	-	.	Target=P10755.2 153 205 +;percentID=40;Gap=M29 I1 M9 D1 M14 
+chr4-04	SwissProt	protein_match	263662	263799	88.000000	-	.	Target=P52737.1 188 233 +;percentID=41
+chr4-04	SwissProt	protein_match	263662	263799	88.000000	-	.	Target=Q5REK1.1 188 233 +;percentID=41
+chr4-04	SwissProt	protein_match	263662	263796	88.000000	-	.	Target=Q9NZL3.2 477 521 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263793	89.000000	-	.	Target=Q8N7M2.3 257 300 +;percentID=43
+chr4-04	SwissProt	protein_match	263662	263793	89.000000	-	.	Target=A6NDX5.5 327 370 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263793	89.000000	-	.	Target=Q96H86.2 197 240 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263796	90.000000	-	.	Target=Q9Y2H8.1 593 637 +;percentID=42
+chr4-04	SwissProt	protein_match	263662	263793	90.000000	-	.	Target=Q96PQ6-4.2 271 314 +;percentID=45
+chr4-04	SwissProt	protein_match	263662	263793	90.000000	-	.	Target=Q96PQ6-3.2 239 282 +;percentID=45
+chr4-04	SwissProt	protein_match	263662	263793	90.000000	-	.	Target=Q96PQ6.2 356 399 +;percentID=45
+chr4-04	SwissProt	protein_match	263662	263793	90.000000	-	.	Target=Q96PQ6-2.2 324 367 +;percentID=45
+chr4-04	SwissProt	protein_match	263662	263820	91.000000	-	.	Target=Q5RBX0.1 619 671 +;percentID=41
+chr4-04	SwissProt	protein_match	263662	263796	91.000000	-	.	Target=A0JNB1.1 417 461 +;percentID=42
+chr4-04	SwissProt	protein_match	263662	263793	92.000000	-	.	Target=Q8N7K0.1 556 599 +;percentID=43
+chr4-04	SwissProt	protein_match	263662	263793	92.000000	-	.	Target=Q6N045.2 453 496 +;percentID=43
+chr4-04	SwissProt	protein_match	263662	263793	92.000000	-	.	Target=Q8N7K0-2.1 521 564 +;percentID=43
+chr4-04	SwissProt	protein_match	263662	263796	93.000000	-	.	Target=Q6P1L6.1 402 446 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263796	93.000000	-	.	Target=A6NK53.2 613 657 +;percentID=44
+chr4-04	SwissProt	protein_match	263662	263793	93.000000	-	.	Target=Q86WZ6.1 346 389 +;percentID=43
+chr4-04	SwissProt	protein_match	263662	263796	93.000000	-	.	Target=Q14587.2 409 453 +;percentID=44
+chr4-04	SwissProt	protein_match	263662	263796	93.000000	-	.	Target=Q6P1L6-2.1 312 356 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263796	93.000000	-	.	Target=Q14587-2.2 248 292 +;percentID=44
+chr4-04	SwissProt	protein_match	263662	263832	94.000000	-	.	Target=Q9UK12.2 182 238 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263796	95.000000	-	.	Target=Q06732-2.2 518 562 +;percentID=44
+chr4-04	SwissProt	protein_match	263662	263820	95.000000	-	.	Target=Q9HCL3.2 185 237 +;percentID=42;Gap=M29 I1 M9 D1 M14 
+chr4-04	SwissProt	protein_match	263662	263832	95.000000	-	.	Target=P10076.2 787 843 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263796	95.000000	-	.	Target=Q06732.2 630 674 +;percentID=44
+chr4-04	SwissProt	protein_match	263662	263835	96.000000	-	.	Target=Q96NI8.1 226 283 +;percentID=41
+chr4-04	SwissProt	protein_match	263662	263832	96.000000	-	.	Target=Q96JF6.3 605 661 +;percentID=43;Gap=M33 I1 M9 D1 M14 
+chr4-04	SwissProt	protein_match	263662	263832	97.000000	-	.	Target=Q9Y6Q3.3 442 498 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263832	97.000000	-	.	Target=Q9Y6Q3-2.3 457 513 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263832	98.000000	-	.	Target=P17020.3 330 386 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263832	98.000000	-	.	Target=A1YF12.1 330 386 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263832	98.000000	-	.	Target=A2T759.1 330 386 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263796	98.000000	-	.	Target=A2T812.1 662 706 +;percentID=42
+chr4-04	SwissProt	protein_match	263662	263796	98.000000	-	.	Target=Q9HBT7.1 662 706 +;percentID=42
+chr4-04	SwissProt	protein_match	263662	263793	98.000000	-	.	Target=Q8BPP0.1 226 269 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263832	99.000000	-	.	Target=Q9C0F3.2 203 259 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263832	99.000000	-	.	Target=Q5R5Y7.1 203 259 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263796	99.000000	-	.	Target=Q02525.2 514 558 +;percentID=42
+chr4-04	SwissProt	protein_match	263662	263832	99.000000	-	.	Target=P10078-2.3 386 442 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263832	99.000000	-	.	Target=P10078.3 386 442 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263823	99.000000	-	.	Target=A1YG48.1 454 506 +;percentID=40;Gap=M9 D1 M44 
+chr4-04	SwissProt	protein_match	263662	263823	99.000000	-	.	Target=Q53GI3.2 454 506 +;percentID=40;Gap=M9 D1 M44 
+chr4-04	SwissProt	protein_match	263662	263832	99.000000	-	.	Target=A8MT65.2 413 469 +;percentID=43
+chr4-04	SwissProt	protein_match	263662	263829	100.000000	-	.	Target=Q8N988-2.2 184 245 +;percentID=40;Gap=M9 I6 M47 
+chr4-04	SwissProt	protein_match	263662	263829	100.000000	-	.	Target=O14709.1 381 435 +;percentID=41;Gap=M11 D1 M44 
+chr4-04	SwissProt	protein_match	263662	263829	100.000000	-	.	Target=Q8N988.2 177 238 +;percentID=40;Gap=M9 I6 M47 
+chr4-04	SwissProt	protein_match	263662	263832	101.000000	-	.	Target=Q96MU6-2.2 388 444 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263832	101.000000	-	.	Target=Q96MU6.2 416 472 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263832	101.000000	-	.	Target=Q14590-2.3 520 576 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263832	101.000000	-	.	Target=Q14590.3 524 580 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263832	102.000000	-	.	Target=Q68EA5.3 373 429 +;percentID=42
+chr4-04	SwissProt	protein_match	263662	263796	102.000000	-	.	Target=Q02386.2 493 537 +;percentID=46
+chr4-04	SwissProt	protein_match	263662	263823	102.000000	-	.	Target=Q9XSR1.1 385 437 +;percentID=40;Gap=M9 D1 M44 
+chr4-04	SwissProt	protein_match	263662	263796	103.000000	-	.	Target=Q8R1D1.1 463 507 +;percentID=44
+chr4-04	SwissProt	protein_match	263662	263796	103.000000	-	.	Target=A1L1L7.1 466 510 +;percentID=44
+chr4-04	SwissProt	protein_match	263662	263832	103.000000	-	.	Target=P08042-2.3 291 346 +;percentID=40;Gap=M12 D1 M44 
+chr4-04	SwissProt	protein_match	263662	263832	103.000000	-	.	Target=P08042.3 304 359 +;percentID=40;Gap=M12 D1 M44 
+chr4-04	SwissProt	protein_match	263662	263832	103.000000	-	.	Target=Q96SK3-2.3 133 189 +;percentID=36
+chr4-04	SwissProt	protein_match	263662	263832	105.000000	-	.	Target=P10075.2 248 304 +;percentID=42;sequence=MAALGDIQESPSVPSPVSLSSPGTPGTQHHEPQLHLHGHQHGSPGSSPKVLSQPSDLDLQDVEEVEIGRDTFWPDSEPKPEQAPRSPGSQAPDEGAGGALRSLLRSLPRRARCSAGFGPESSAERPAGQPPGAVPCAQPRGAWRVTLVQQAAAGPEGAPERAAELGVNFGRSRQGSARGAKPHRCEACGKSFKYNSLLLKHQRIHTGEKPYACHECGKRFRGWSGFIQHHRIHTGEKPYECGQCGRAFSHSSHFTQHLRIHNGEKPYKCGECGQAFSQSSNLVRHQRLHTGEKPYACSQCGKAFIWSSVLIEHQRIHTGEKPYECSDCGKAFRGRSHFFRHLRTHTGEKPFACGACGKAFGQSSQLIQHQRVHYRE
+chr4-04	SwissProt	protein_match	263662	263832	106.000000	-	.	Target=Q969W8.1 236 292 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263832	106.000000	-	.	Target=Q9Y473.1 568 624 +;percentID=42
+chr4-04	SwissProt	protein_match	263662	263832	106.000000	-	.	Target=Q8N859.1 310 366 +;percentID=44;Gap=M31 I1 M11 D1 M14 
+chr4-04	SwissProt	protein_match	263662	263796	106.000000	-	.	Target=Q9BUY5.1 469 513 +;percentID=46
+chr4-04	SwissProt	protein_match	263662	263832	106.000000	-	.	Target=Q6J6I6.1 236 292 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263832	107.000000	-	.	Target=Q4R6C2.1 207 263 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263832	107.000000	-	.	Target=Q9UIE0.3 233 289 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263796	108.000000	-	.	Target=Q8TB69.1 285 329 +;percentID=46
+chr4-04	SwissProt	protein_match	263662	263829	108.000000	-	.	Target=Q09FC8-5.2 447 505 +;percentID=41;Gap=M8 I3 M21 I1 M6 D1 M20 
+chr4-04	SwissProt	protein_match	263662	263829	108.000000	-	.	Target=Q09FC8-4.2 434 492 +;percentID=41;Gap=M8 I3 M21 I1 M6 D1 M20 
+chr4-04	SwissProt	protein_match	263662	263805	108.000000	-	.	Target=A8MUP4.2 292 339 +;percentID=50
+chr4-04	SwissProt	protein_match	263662	263796	108.000000	-	.	Target=Q08DG8.1 346 390 +;percentID=48
+chr4-04	SwissProt	protein_match	263662	263829	108.000000	-	.	Target=Q09FC8-2.2 459 517 +;percentID=41;Gap=M8 I3 M21 I1 M6 D1 M20 
+chr4-04	SwissProt	protein_match	263662	263829	108.000000	-	.	Target=Q09FC8.2 495 553 +;percentID=41;Gap=M8 I3 M21 I1 M6 D1 M20 
+chr4-04	SwissProt	protein_match	263662	263829	108.000000	-	.	Target=Q09FC8-3.2 217 275 +;percentID=41;Gap=M8 I3 M21 I1 M6 D1 M20 
+chr4-04	SwissProt	protein_match	263662	263832	108.000000	-	.	Target=Q8TC21.2 400 456 +;percentID=42
+chr4-04	SwissProt	protein_match	263662	263832	108.000000	-	.	Target=Q8TC21-2.2 330 386 +;percentID=42
+chr4-04	SwissProt	protein_match	263662	263811	109.000000	-	.	Target=A2T712.1 404 453 +;percentID=46
+chr4-04	SwissProt	protein_match	263662	263811	109.000000	-	.	Target=A2T7L7.1 404 453 +;percentID=46
+chr4-04	SwissProt	protein_match	263662	263832	109.000000	-	.	Target=P17097.1 422 478 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263796	109.000000	-	.	Target=P52742.2 347 391 +;percentID=48
+chr4-04	SwissProt	protein_match	263662	263832	109.000000	-	.	Target=Q6ZTB9.1 103 159 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263811	110.000000	-	.	Target=Q07231.1 486 535 +;percentID=46
+chr4-04	SwissProt	protein_match	263662	263823	110.000000	-	.	Target=O60765.2 227 279 +;percentID=44;Gap=M9 D1 M44 
+chr4-04	SwissProt	protein_match	263662	263832	110.000000	-	.	Target=Q49A33-2.2 128 184 +;percentID=42
+chr4-04	SwissProt	protein_match	263662	263796	110.000000	-	.	Target=Q96SK3.3 135 179 +;percentID=52;Gap=M26 I1 M3 D1 M15 
+chr4-04	SwissProt	protein_match	263662	263832	110.000000	-	.	Target=Q49A33.3 128 184 +;percentID=42
+chr4-04	SwissProt	protein_match	263662	263832	111.000000	-	.	Target=Q12901.3 381 437 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263823	111.000000	-	.	Target=Q61751.1 197 249 +;percentID=44;Gap=M9 D1 M44 
+chr4-04	SwissProt	protein_match	263662	263823	111.000000	-	.	Target=Q02975.1 201 253 +;percentID=44;Gap=M9 D1 M44 
+chr4-04	SwissProt	protein_match	263662	263832	112.000000	-	.	Target=Q9UC06.2 177 233 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263832	112.000000	-	.	Target=Q8NA42.1 235 291 +;percentID=42
+chr4-04	SwissProt	protein_match	263662	263832	112.000000	-	.	Target=Q96NL3.1 376 432 +;percentID=42
+chr4-04	SwissProt	protein_match	263662	263835	112.000000	-	.	Target=Q2TL60.1 450 507 +;percentID=41
+chr4-04	SwissProt	protein_match	263662	263832	112.000000	-	.	Target=Q96NJ3-2.2 310 366 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263829	113.000000	-	.	Target=Q8NDQ6.1 191 252 +;percentID=41;Gap=M8 I6 M48 
+chr4-04	SwissProt	protein_match	263662	263829	113.000000	-	.	Target=Q8NDQ6-2.1 159 220 +;percentID=41;Gap=M8 I6 M48 
+chr4-04	SwissProt	protein_match	263662	263829	113.000000	-	.	Target=Q5R5S6.1 191 252 +;percentID=41;Gap=M8 I6 M48 
+chr4-04	SwissProt	protein_match	263662	263805	114.000000	-	.	Target=Q14586.2 312 359 +;percentID=45
+chr4-04	SwissProt	protein_match	263662	263823	115.000000	-	.	Target=Q86Y25.1 257 309 +;percentID=46;Gap=M9 D1 M44 
+chr4-04	SwissProt	protein_match	263662	263826	115.000000	-	.	Target=Q8N823.1 634 687 +;percentID=45;Gap=M10 D1 M44 
+chr4-04	SwissProt	protein_match	263662	263832	115.000000	-	.	Target=Q16587.2 340 396 +;percentID=44;Gap=M31 I1 M11 D1 M14 
+chr4-04	SwissProt	protein_match	263662	263832	115.000000	-	.	Target=Q16587-3.2 308 364 +;percentID=44;Gap=M31 I1 M11 D1 M14 
+chr4-04	SwissProt	protein_match	263662	263832	115.000000	-	.	Target=Q16587-4.2 268 324 +;percentID=44;Gap=M31 I1 M11 D1 M14 
+chr4-04	SwissProt	protein_match	263662	263832	115.000000	-	.	Target=Q16587-2.2 269 325 +;percentID=44;Gap=M31 I1 M11 D1 M14 
+chr4-04	SwissProt	protein_match	263662	263832	116.000000	-	.	Target=Q6PG37.1 291 347 +;percentID=42
+chr4-04	SwissProt	protein_match	263662	263832	116.000000	-	.	Target=Q7TNU6.1 211 267 +;percentID=46;Gap=M33 I1 M9 D1 M14 
+chr4-04	SwissProt	protein_match	263662	263832	117.000000	-	.	Target=Q9BS34.1 178 234 +;percentID=40
+chr4-04	SwissProt	protein_match	263662	263802	118.000000	-	.	Target=Q8NEM1.2 229 275 +;percentID=53
+chr4-04	SwissProt	protein_match	263662	263832	119.000000	-	.	Target=Q5REF1.1 318 374 +;percentID=42
+chr4-04	SwissProt	protein_match	263662	263832	119.000000	-	.	Target=Q2M3W8.1 274 330 +;percentID=42
+chr4-04	SwissProt	protein_match	263662	263832	119.000000	-	.	Target=Q2M3W8-2.1 210 266 +;percentID=42
+chr4-04	SwissProt	protein_match	263662	263832	120.000000	-	.	Target=Q2KI58.1 273 329 +;percentID=42
+chr4-04	SwissProt	protein_match	263662	263832	124.000000	-	.	Target=Q3KNS6.1 221 277 +;percentID=45
+chr4-04	SwissProt	protein_match	263662	263832	124.000000	-	.	Target=Q3KNS6-2.1 37 93 +;percentID=45
+chr4-04	SwissProt	protein_match	263662	263811	125.000000	-	.	Target=Q9Y2Q1.1 391 440 +;percentID=50
+chr4-04	SwissProt	protein_match	263662	263823	125.000000	-	.	Target=Q5JVG8.1 270 322 +;percentID=48;Gap=M9 D1 M44 
+chr4-04	SwissProt	protein_match	263662	263832	126.000000	-	.	Target=P35789-2.4 462 518 +;percentID=49
+chr4-04	SwissProt	protein_match	263662	263832	126.000000	-	.	Target=P35789-3.4 406 462 +;percentID=49
+chr4-04	SwissProt	protein_match	263662	263832	126.000000	-	.	Target=Q86V71.2 210 266 +;percentID=47
+chr4-04	SwissProt	protein_match	263662	263832	129.000000	-	.	Target=A6NF79.3 473 530 +;percentID=49;Gap=M30 I1 M4 D1 M17 I1 M5 
+chr4-04	SwissProt	protein_match	263662	263832	132.000000	-	.	Target=Q8IYX0.1 305 361 +;percentID=50
+chr4-04	SwissProt	protein_match	263662	263832	133.000000	-	.	Target=P35789.4 434 490 +;percentID=49
+chr4-04	SwissProt	protein_match	263662	263832	137.000000	-	.	Target=Q9H8G1.2 326 382 +;percentID=50
+chr4-04	SwissProt	protein_match	263662	263832	140.000000	-	.	Target=O95780.1 350 406 +;percentID=49
+chr4-04	SwissProt	protein_match	263662	263832	140.000000	-	.	Target=O95780-2.1 274 330 +;percentID=49
+chr4-04	SwissProt	protein_match	263662	263832	141.000000	-	.	Target=Q96N38-2.1 350 406 +;percentID=50
+chr4-04	SwissProt	protein_match	263662	263832	141.000000	-	.	Target=Q96N38.1 350 406 +;percentID=50
+chr4-04	SwissProt	protein_match	263662	263832	141.000000	-	.	Target=Q96N38-3.1 195 251 +;percentID=50
+chr4-04	SwissProt	protein_match	263662	263832	142.000000	-	.	Target=A6NNF4.3 546 602 +;percentID=54
+chr4-04	SwissProt	protein_match	263662	263832	147.000000	-	.	Target=Q8N7Q3.2 206 262 +;percentID=50
+chr4-04	SwissProt	protein_match	263662	263832	150.000000	-	.	Target=Q03936-3.2 374 430 +;percentID=52
+chr4-04	SwissProt	protein_match	263662	263832	150.000000	-	.	Target=Q03936.2 406 462 +;percentID=52
+chr4-04	SwissProt	protein_match	263662	263832	150.000000	-	.	Target=Q03936-2.2 337 393 +;percentID=52
+chr4-04	SwissProt	protein_match	263668	263796	87.000000	-	.	Target=Q9P2J8-2.3 619 661 +;percentID=44
+chr4-04	SwissProt	protein_match	263668	263796	87.000000	-	.	Target=Q9P2J8.3 745 787 +;percentID=44
+chr4-04	SwissProt	protein_match	263668	263832	105.000000	-	.	Target=Q9HCZ1.2 386 440 +;percentID=40
+chr4-04	SwissProt	protein_match	263668	263832	105.000000	-	.	Target=Q5RES8.1 384 438 +;percentID=40
+chr4-04	SwissProt	protein_match	263686	263832	121.000000	-	.	Target=P0CB33.1 362 410 +;percentID=54;Gap=M30 I1 M4 D1 M14 
+chr4-04	SwissProt	protein_match	263689	263811	79.000000	-	.	Target=Q8TF20.2 141 181 +;percentID=43
+chr4-04	SwissProt	protein_match	263698	263832	80.000000	-	.	Target=Q9UL58.1 471 516 +;percentID=41;Gap=M38 I1 M7 
+chr4-04	SwissProt	protein_match	263713	263832	75.000000	-	.	Target=O75437-2.3 303 342 +;percentID=45
+chr4-04	SwissProt	protein_match	263715	263792	74.000000	-	.	Target=Q68DY1.2 503 528 +;percentID=57
+chr4-04	SwissProt	protein_match	263715	263792	74.000000	-	.	Target=Q68DY1-2.2 427 452 +;percentID=57
+chr4-04	SwissProt	protein_match	263716	263832	95.000000	-	.	Target=Q8IYB9.1 601 639 +;percentID=51
+chr4-04	SwissProt	protein_match	263716	263832	107.000000	-	.	Target=Q05481.1 1115 1153 +;percentID=56
+chr4-04	SwissProt	protein_match	263734	263832	63.000000	-	.	Target=A8MWA4.1 267 299 +;percentID=48
+chr4-04	SwissProt	protein_match	263734	263832	69.000000	-	.	Target=Q96H40.3 182 214 +;percentID=48
+chr4-04	SwissProt	protein_match	263734	263832	71.000000	-	.	Target=Q03938.2 182 214 +;percentID=48
+chr4-04	SwissProt	protein_match	263735	263770	40.000000	+	.	Target=Q9P255.2 368 379 +;percentID=75
+chr4-04	SwissProt	protein_match	263735	263770	40.000000	+	.	Target=A6NK75.3 368 379 +;percentID=75
+chr4-04	SwissProt	protein_match	263735	263770	40.000000	+	.	Target=A6NN14.3 1051 1062 +;percentID=75
+chr4-04	SwissProt	protein_match	263735	263770	40.000000	+	.	Target=A6NK21.3 374 385 +;percentID=75
+chr4-04	SwissProt	protein_match	263743	263835	84.000000	-	.	Target=Q03924-2.3 397 427 +;percentID=61
+chr4-04	SwissProt	protein_match	263747	263773	42.000000	+	.	Target=Q6ZMV8.1 235 243 +;percentID=77
+chr4-04	SwissProt	protein_match	263764	263832	63.000000	-	.	Target=Q96JC4.1 502 524 +;percentID=56
+chr4-04	SwissProt	protein_match	263764	263832	63.000000	-	.	Target=A6NKZ1.3 500 522 +;percentID=56
+chr4-04	SwissProt	protein_match	263773	263832	67.000000	-	.	Target=Q03923-2.3 542 561 +;percentID=65
+chr4-04	SwissProt	protein_match	263773	263832	67.000000	-	.	Target=Q03923.3 575 594 +;percentID=65
+chr4-04	SwissProt	protein_match	263776	263832	63.000000	-	.	Target=O75373.2 518 536 +;percentID=57
+chr4-04	SwissProt	protein_match	263829	263879	64.000000	-	.	Target=Q8TF32.2 560 576 +;percentID=64
+chr4-04	SwissProt	protein_match	263831	263947	93.000000	-	.	Target=Q5VIY5-2.1 272 310 +;percentID=46
+chr4-04	SwissProt	protein_match	263831	263947	104.000000	-	.	Target=A2RRD8.1 187 225 +;percentID=51
+chr4-04	SwissProt	protein_match	263831	263947	106.000000	-	.	Target=P17035-2.4 440 478 +;percentID=48
+chr4-04	SwissProt	protein_match	263831	263947	106.000000	-	.	Target=P51522.2 175 213 +;percentID=46
+chr4-04	SwissProt	protein_match	263831	263947	106.000000	-	.	Target=P51522-2.2 15 53 +;percentID=46
+chr4-04	SwissProt	protein_match	263831	263947	106.000000	-	.	Target=Q08AN1.2 211 249 +;percentID=51
+chr4-04	SwissProt	protein_match	263831	263947	107.000000	-	.	Target=Q8N8C0.1 31 69 +;percentID=43
+chr4-04	SwissProt	protein_match	263831	263947	108.000000	-	.	Target=Q09FC8-5.2 354 392 +;percentID=48
+chr4-04	SwissProt	protein_match	263831	263947	108.000000	-	.	Target=Q09FC8-4.2 341 379 +;percentID=48
+chr4-04	SwissProt	protein_match	263831	263947	108.000000	-	.	Target=Q09FC8-2.2 366 404 +;percentID=48
+chr4-04	SwissProt	protein_match	263831	263947	108.000000	-	.	Target=Q09FC8.2 402 440 +;percentID=48
+chr4-04	SwissProt	protein_match	263831	263947	108.000000	-	.	Target=Q09FC8-3.2 124 162 +;percentID=48
+chr4-04	SwissProt	protein_match	263831	263947	110.000000	-	.	Target=Q8N4W9-2.2 216 254 +;percentID=51
+chr4-04	SwissProt	protein_match	263831	263944	112.000000	-	.	Target=Q9UJN7.2 248 285 +;percentID=50
+chr4-04	SwissProt	protein_match	263831	263947	112.000000	-	.	Target=Q9BWM5.1 352 390 +;percentID=48
+chr4-04	SwissProt	protein_match	263831	263947	118.000000	-	.	Target=Q6ZN08.2 385 423 +;percentID=56
+chr4-04	SwissProt	protein_match	263834	263947	90.000000	-	.	Target=Q68EA5.3 502 536 +;percentID=50;Gap=M31 D3 M4 
+chr4-04	SwissProt	protein_match	263834	263947	111.000000	-	.	Target=Q49A33-2.2 61 98 +;percentID=52
+chr4-04	SwissProt	protein_match	263834	263947	111.000000	-	.	Target=Q49A33.3 61 98 +;percentID=52
+chr4-04	SwissProt	protein_match	263834	263947	118.000000	-	.	Target=P17027.3 250 287 +;percentID=52
+chr4-04	SwissProt	protein_match	263837	263944	87.000000	-	.	Target=Q96H86.2 286 321 +;percentID=41
+chr4-04	SwissProt	protein_match	263837	263947	88.000000	-	.	Target=A0JNB1.1 534 570 +;percentID=52;Gap=M13 D1 M6 I1 M17 
+chr4-04	SwissProt	protein_match	263837	263947	89.000000	-	.	Target=P17040-3.3 791 827 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	89.000000	-	.	Target=P17040.3 792 828 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	89.000000	-	.	Target=P17040-2.3 726 762 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	89.000000	-	.	Target=Q4V348.1 360 396 +;percentID=43
+chr4-04	SwissProt	protein_match	263837	263947	90.000000	-	.	Target=Q96CS4.1 231 267 +;percentID=40
+chr4-04	SwissProt	protein_match	263837	263947	91.000000	-	.	Target=B2KFW1-2.2 350 386 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	91.000000	-	.	Target=B2KFW1.2 779 815 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	93.000000	-	.	Target=O95201.2 418 454 +;percentID=45
+chr4-04	SwissProt	protein_match	263837	263944	93.000000	-	.	Target=P18725.2 294 329 +;percentID=47
+chr4-04	SwissProt	protein_match	263837	263944	93.000000	-	.	Target=P18725-2.2 269 304 +;percentID=47
+chr4-04	SwissProt	protein_match	263837	263953	93.000000	-	.	Target=A6NFI3.1 827 865 +;percentID=41
+chr4-04	SwissProt	protein_match	263837	263953	93.000000	-	.	Target=Q6PGE4.1 843 881 +;percentID=41
+chr4-04	SwissProt	protein_match	263837	263947	94.000000	-	.	Target=Q2M3W8-2.1 283 319 +;percentID=45
+chr4-04	SwissProt	protein_match	263837	263947	95.000000	-	.	Target=Q9Y3M9.2 262 298 +;percentID=43
+chr4-04	SwissProt	protein_match	263837	263947	96.000000	-	.	Target=Q86WZ6.1 546 582 +;percentID=55;Gap=M13 D1 M6 I1 M17 
+chr4-04	SwissProt	protein_match	263837	263947	96.000000	-	.	Target=Q16587-4.2 285 321 +;percentID=45
+chr4-04	SwissProt	protein_match	263837	263947	96.000000	-	.	Target=Q16587-2.2 286 322 +;percentID=45
+chr4-04	SwissProt	protein_match	263837	263947	96.000000	-	.	Target=P24399.2 88 124 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	97.000000	-	.	Target=Q5T5D7.1 325 361 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	97.000000	-	.	Target=Q8BI67.1 458 494 +;percentID=52;Gap=M13 D1 M6 I1 M17 
+chr4-04	SwissProt	protein_match	263837	263947	98.000000	-	.	Target=Q8TAF7.2 495 528 +;percentID=51;Gap=M32 D3 M2 
+chr4-04	SwissProt	protein_match	263837	263953	98.000000	-	.	Target=Q6P1L6.1 349 387 +;percentID=46
+chr4-04	SwissProt	protein_match	263837	263947	98.000000	-	.	Target=Q8N587.2 419 455 +;percentID=57;Gap=M12 D1 M7 I1 M17 
+chr4-04	SwissProt	protein_match	263837	263947	98.000000	-	.	Target=Q4R882.1 419 455 +;percentID=57;Gap=M12 D1 M7 I1 M17 
+chr4-04	SwissProt	protein_match	263837	263953	98.000000	-	.	Target=Q6P1L6-2.1 259 297 +;percentID=46
+chr4-04	SwissProt	protein_match	263837	263947	99.000000	-	.	Target=Q569E7.1 431 467 +;percentID=45
+chr4-04	SwissProt	protein_match	263837	263947	99.000000	-	.	Target=Q5TEC3.2 407 443 +;percentID=45
+chr4-04	SwissProt	protein_match	263837	263947	100.000000	-	.	Target=Q8R0T2.1 371 407 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	100.000000	-	.	Target=Q9HCZ1.2 570 606 +;percentID=45
+chr4-04	SwissProt	protein_match	263837	263947	100.000000	-	.	Target=Q5RES8.1 568 604 +;percentID=45
+chr4-04	SwissProt	protein_match	263837	263947	100.000000	-	.	Target=Q7L2R6.2 297 333 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	100.000000	-	.	Target=Q9H5H4.2 343 379 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	100.000000	-	.	Target=Q8TC21.2 417 453 +;percentID=52;Gap=M13 D1 M6 I1 M17 
+chr4-04	SwissProt	protein_match	263837	263947	100.000000	-	.	Target=Q8TC21-2.2 347 383 +;percentID=52;Gap=M13 D1 M6 I1 M17 
+chr4-04	SwissProt	protein_match	263837	263947	101.000000	-	.	Target=Q9Y473.1 557 593 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	101.000000	-	.	Target=Q9Z1D8.1 395 431 +;percentID=45
+chr4-04	SwissProt	protein_match	263837	263947	101.000000	-	.	Target=Q9Y2L8.1 400 436 +;percentID=45
+chr4-04	SwissProt	protein_match	263837	263947	101.000000	-	.	Target=A2T7D2.1 400 436 +;percentID=45
+chr4-04	SwissProt	protein_match	263837	263947	101.000000	-	.	Target=Q9Y2H8.1 458 494 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	101.000000	-	.	Target=Q16587.2 497 533 +;percentID=45
+chr4-04	SwissProt	protein_match	263837	263947	101.000000	-	.	Target=Q16587-3.2 465 501 +;percentID=45
+chr4-04	SwissProt	protein_match	263837	263947	101.000000	-	.	Target=Q8TF45.2 564 597 +;percentID=48;Gap=M12 D3 M22 
+chr4-04	SwissProt	protein_match	263837	263947	101.000000	-	.	Target=Q3SY52-2.1 322 358 +;percentID=43
+chr4-04	SwissProt	protein_match	263837	263947	101.000000	-	.	Target=Q9BY31.2 358 394 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	101.000000	-	.	Target=A0JPL0.1 405 441 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	101.000000	-	.	Target=Q8TAW3.2 339 375 +;percentID=43
+chr4-04	SwissProt	protein_match	263837	263947	101.000000	-	.	Target=Q3SY52-3.1 274 310 +;percentID=43
+chr4-04	SwissProt	protein_match	263837	263947	102.000000	-	.	Target=Q86XN6-2.2 352 388 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	102.000000	-	.	Target=Q96NI8.1 328 364 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	102.000000	-	.	Target=P10754.2 264 300 +;percentID=45
+chr4-04	SwissProt	protein_match	263837	263947	102.000000	-	.	Target=P10754-2.2 257 293 +;percentID=45
+chr4-04	SwissProt	protein_match	263837	263947	102.000000	-	.	Target=Q5RDX1.1 600 636 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	102.000000	-	.	Target=Q6P3V2.2 632 668 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	102.000000	-	.	Target=Q8NB42.1 492 528 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	102.000000	-	.	Target=Q3SY52.1 405 441 +;percentID=43
+chr4-04	SwissProt	protein_match	263837	263947	102.000000	-	.	Target=Q86XN6-3.2 298 334 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	103.000000	-	.	Target=P51814-4.2 463 499 +;percentID=50;Gap=M12 D1 M7 I1 M17 
+chr4-04	SwissProt	protein_match	263837	263947	103.000000	-	.	Target=O14978.2 488 524 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	103.000000	-	.	Target=Q5TYW1.2 880 916 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	103.000000	-	.	Target=Q2KI58.1 290 326 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	103.000000	-	.	Target=Q5REF1.1 335 371 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	103.000000	-	.	Target=Q2M3W8.1 291 327 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	103.000000	-	.	Target=Q3KQV3.2 476 512 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	103.000000	-	.	Target=Q96PQ6-4.2 219 255 +;percentID=45
+chr4-04	SwissProt	protein_match	263837	263947	103.000000	-	.	Target=Q96PQ6-3.2 187 223 +;percentID=45
+chr4-04	SwissProt	protein_match	263837	263947	103.000000	-	.	Target=Q3KQV3-2.2 409 445 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	104.000000	-	.	Target=Q86XN6.2 688 724 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	104.000000	-	.	Target=Q86XU0.1 373 409 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	104.000000	-	.	Target=Q62981.1 325 361 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	104.000000	-	.	Target=P15622.3 225 261 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	104.000000	-	.	Target=P10077-2.2 651 687 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	104.000000	-	.	Target=P15622-2.3 220 256 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	104.000000	-	.	Target=Q9UK10.2 566 602 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263950	104.000000	-	.	Target=Q96N20.1 214 251 +;percentID=47
+chr4-04	SwissProt	protein_match	263837	263953	105.000000	-	.	Target=Q8WV37-2.1 234 272 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	105.000000	-	.	Target=Q9NQZ8.1 296 332 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	105.000000	-	.	Target=Q8N988-2.2 374 410 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	105.000000	-	.	Target=Q02386.2 330 366 +;percentID=57;Gap=M13 D1 M6 I1 M17 
+chr4-04	SwissProt	protein_match	263837	263947	105.000000	-	.	Target=Q9HCX3.1 417 453 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	105.000000	-	.	Target=Q8N988.2 367 403 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	105.000000	-	.	Target=P52738.2 215 251 +;percentID=45
+chr4-04	SwissProt	protein_match	263837	263953	105.000000	-	.	Target=Q8WV37-3.1 142 180 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	105.000000	-	.	Target=Q3KNS6-2.1 82 118 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	106.000000	-	.	Target=Q5RER9.1 325 361 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	106.000000	-	.	Target=P51814-6.2 353 389 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	106.000000	-	.	Target=P51814.2 395 431 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	106.000000	-	.	Target=P51814-5.2 387 423 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	106.000000	-	.	Target=P51814-2.2 355 391 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	106.000000	-	.	Target=P51814-3.2 363 399 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	106.000000	-	.	Target=P51814-7.2 319 355 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	106.000000	-	.	Target=P51814-8.2 317 353 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	106.000000	-	.	Target=Q8N184-2.3 475 511 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	106.000000	-	.	Target=Q9UJW7.2 403 439 +;percentID=55;Gap=M13 D1 M6 I1 M17 
+chr4-04	SwissProt	protein_match	263837	263953	106.000000	-	.	Target=Q9UJW8.2 349 387 +;percentID=46
+chr4-04	SwissProt	protein_match	263837	263947	106.000000	-	.	Target=Q5RB30.1 184 220 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	106.000000	-	.	Target=Q6ZMS4.2 247 283 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	106.000000	-	.	Target=Q8TF39.3 549 585 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263953	106.000000	-	.	Target=Q13398-4.2 285 323 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263953	106.000000	-	.	Target=Q13398.2 281 319 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263953	106.000000	-	.	Target=Q13398-3.2 293 331 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263953	106.000000	-	.	Target=Q13398-6.2 261 299 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263953	106.000000	-	.	Target=Q13398-5.2 220 258 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263953	106.000000	-	.	Target=Q13398-2.2 272 310 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	106.000000	-	.	Target=A2T6E3.1 328 364 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	106.000000	-	.	Target=Q8N184-1.3 444 480 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	107.000000	-	.	Target=Q9NYT6.2 417 453 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	107.000000	-	.	Target=Q8N859.1 299 335 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	107.000000	-	.	Target=Q8NDW4.1 518 554 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	107.000000	-	.	Target=Q7Z340.3 389 425 +;percentID=43
+chr4-04	SwissProt	protein_match	263837	263947	107.000000	-	.	Target=Q9QXT9.1 260 296 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	107.000000	-	.	Target=A2VDP4.1 587 623 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	107.000000	-	.	Target=Q06730.3 410 446 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	107.000000	-	.	Target=Q7Z340-2.3 316 352 +;percentID=43
+chr4-04	SwissProt	protein_match	263837	263947	107.000000	-	.	Target=Q6ZTB9.1 36 72 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	107.000000	-	.	Target=B2RUI1.2 587 623 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	107.000000	-	.	Target=Q9P2J8-2.3 400 436 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	107.000000	-	.	Target=P51786.2 272 308 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	108.000000	-	.	Target=Q9HCG1.2 675 711 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	108.000000	-	.	Target=P10751.2 447 483 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	108.000000	-	.	Target=Q80W31.1 345 381 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	108.000000	-	.	Target=Q9BX82.1 569 605 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	108.000000	-	.	Target=Q96RE9.1 323 359 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	108.000000	-	.	Target=Q6ECI4-2.2 417 453 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	108.000000	-	.	Target=Q8N184.3 587 623 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	108.000000	-	.	Target=Q3KNS6.1 210 246 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	108.000000	-	.	Target=Q96RE9-3.1 339 375 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	108.000000	-	.	Target=Q96RE9-2.1 338 374 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	108.000000	-	.	Target=Q52M93.1 184 220 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	108.000000	-	.	Target=Q9UIE0.3 334 370 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	108.000000	-	.	Target=Q6ECI4.2 535 571 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	109.000000	-	.	Target=Q14588.3 314 350 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	109.000000	-	.	Target=Q86Y25.1 466 502 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	109.000000	-	.	Target=Q5MCW4.1 352 388 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	109.000000	-	.	Target=Q96JL9.3 448 484 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	109.000000	-	.	Target=P10078-2.3 403 439 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	109.000000	-	.	Target=P10078.3 403 439 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	109.000000	-	.	Target=O14709.1 424 460 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	109.000000	-	.	Target=Q61116.1 563 599 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	109.000000	-	.	Target=Q9H7R5.1 279 315 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	109.000000	-	.	Target=Q96NJ6.1 223 259 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	110.000000	-	.	Target=Q6ZR52.3 471 507 +;percentID=60;Gap=M14 D1 M5 I1 M17 
+chr4-04	SwissProt	protein_match	263837	263947	110.000000	-	.	Target=Q8TB69.1 318 354 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	110.000000	-	.	Target=Q9UC06.2 222 258 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	110.000000	-	.	Target=P21506.3 291 327 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	110.000000	-	.	Target=Q7Z3V5.3 528 564 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263953	110.000000	-	.	Target=A2T712.1 356 394 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263953	110.000000	-	.	Target=Q07231.1 438 476 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263953	110.000000	-	.	Target=A2T7L7.1 356 394 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263950	110.000000	-	.	Target=Q95K52.1 292 329 +;percentID=55
+chr4-04	SwissProt	protein_match	263837	263947	110.000000	-	.	Target=Q5R5Q6.1 527 563 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	110.000000	-	.	Target=Q07230.1 388 424 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	110.000000	-	.	Target=Q06732-2.2 299 335 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	110.000000	-	.	Target=Q8TAQ5.1 193 229 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	110.000000	-	.	Target=Q8N9F8.1 326 362 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	110.000000	-	.	Target=Q6AZW8.1 76 112 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	110.000000	-	.	Target=P59923.1 760 796 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	110.000000	-	.	Target=Q06732.2 411 447 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263944	110.000000	-	.	Target=Q8NDP4.1 213 248 +;percentID=55
+chr4-04	SwissProt	protein_match	263837	263947	110.000000	-	.	Target=Q8IYI8.1 226 262 +;percentID=55;Gap=M13 D1 M6 I1 M17 
+chr4-04	SwissProt	protein_match	263837	263947	110.000000	-	.	Target=Q6ZN19.1 675 711 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	110.000000	-	.	Target=A2VDQ7.1 192 228 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263953	110.000000	-	.	Target=Q14590-2.3 451 489 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263953	110.000000	-	.	Target=Q14590.3 455 493 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263950	110.000000	-	.	Target=P17031.3 283 320 +;percentID=50
+chr4-04	SwissProt	protein_match	263837	263947	110.000000	-	.	Target=Q6ZN19-2.1 367 403 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	110.000000	-	.	Target=Q5R8X1.1 279 315 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	110.000000	-	.	Target=P51508.3 356 392 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	111.000000	-	.	Target=Q969W8.1 253 289 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	111.000000	-	.	Target=P17020.3 347 383 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	111.000000	-	.	Target=A1YF12.1 347 383 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	111.000000	-	.	Target=A2T759.1 347 383 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	111.000000	-	.	Target=P17098.2 283 319 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263953	111.000000	-	.	Target=O75123.1 287 325 +;percentID=46
+chr4-04	SwissProt	protein_match	263837	263947	111.000000	-	.	Target=Q8R1D1.1 468 504 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	111.000000	-	.	Target=A1L1L7.1 471 507 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	111.000000	-	.	Target=Q6P9Y7-2.1 334 370 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	111.000000	-	.	Target=Q6P9Y7.1 334 370 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	111.000000	-	.	Target=Q99676.3 528 564 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	111.000000	-	.	Target=A6QLU5.1 529 565 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	111.000000	-	.	Target=Q7TSH9.1 507 543 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	111.000000	-	.	Target=P17035.4 605 641 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	111.000000	-	.	Target=Q6J6I6.1 253 289 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263944	111.000000	-	.	Target=Q9NQX6.1 382 417 +;percentID=58
+chr4-04	SwissProt	protein_match	263837	263944	111.000000	-	.	Target=Q5REA0.1 382 417 +;percentID=58
+chr4-04	SwissProt	protein_match	263837	263947	112.000000	-	.	Target=Q96NL3.1 393 429 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	112.000000	-	.	Target=Q15937.2 219 255 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263944	112.000000	-	.	Target=Q8N7K0.1 197 232 +;percentID=58
+chr4-04	SwissProt	protein_match	263837	263947	112.000000	-	.	Target=Q8TAU3.1 518 554 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	112.000000	-	.	Target=P10075.2 181 217 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	112.000000	-	.	Target=P52737.1 474 510 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	112.000000	-	.	Target=Q5REK1.1 474 510 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263959	112.000000	-	.	Target=Q5R741.1 352 392 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263959	112.000000	-	.	Target=A1YG48.1 352 392 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263959	112.000000	-	.	Target=Q53GI3.2 352 392 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	112.000000	-	.	Target=Q0VAW7.1 634 670 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	112.000000	-	.	Target=Q0VAW7-2.1 628 664 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	112.000000	-	.	Target=A6NF35.2 492 528 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263944	112.000000	-	.	Target=Q8N7K0-2.1 162 197 +;percentID=58
+chr4-04	SwissProt	protein_match	263837	263947	112.000000	-	.	Target=Q5HYK9.2 525 561 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	113.000000	-	.	Target=Q8TAF7-2.2 340 376 +;percentID=48
+chr4-04	SwissProt	protein_match	263837	263947	113.000000	-	.	Target=Q4R6C2.1 308 344 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	113.000000	-	.	Target=Q8NA42.1 308 344 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	113.000000	-	.	Target=Q7Z7L9.1 387 423 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	113.000000	-	.	Target=Q7Z7L9-2.1 368 404 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	113.000000	-	.	Target=Q96SQ5.1 518 554 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263950	113.000000	-	.	Target=Q80YP6.1 352 389 +;percentID=44
+chr4-04	SwissProt	protein_match	263837	263950	113.000000	-	.	Target=Q6V9R5.2 341 378 +;percentID=52
+chr4-04	SwissProt	protein_match	263837	263947	113.000000	-	.	Target=Q9UC07.2 414 450 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	113.000000	-	.	Target=A6NK31.3 345 381 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263950	113.000000	-	.	Target=P0C7V5.1 302 339 +;percentID=52
+chr4-04	SwissProt	protein_match	263837	263950	113.000000	-	.	Target=Q6V9R5-2.2 269 306 +;percentID=52
+chr4-04	SwissProt	protein_match	263837	263947	114.000000	-	.	Target=Q12901.3 370 406 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	114.000000	-	.	Target=Q8NDQ6-4.1 414 450 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	114.000000	-	.	Target=Q15935.2 322 358 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	114.000000	-	.	Target=Q8NDQ6.1 437 473 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	114.000000	-	.	Target=Q8NDQ6-2.1 405 441 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	114.000000	-	.	Target=Q5R5S6.1 437 473 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	114.000000	-	.	Target=P10076.2 804 840 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	114.000000	-	.	Target=Q9BUY5.1 474 510 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	114.000000	-	.	Target=Q96MU6-2.2 405 441 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	114.000000	-	.	Target=Q96MU6.2 433 469 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	114.000000	-	.	Target=Q6ZNA1.2 216 252 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	114.000000	-	.	Target=A8MUP4.2 188 224 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	114.000000	-	.	Target=Q9XSR1.1 398 434 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263950	114.000000	-	.	Target=O75437-2.3 291 328 +;percentID=52
+chr4-04	SwissProt	protein_match	263837	263947	114.000000	-	.	Target=Q9NZL3.2 370 406 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	115.000000	-	.	Target=Q9Y2Q1.1 286 322 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	115.000000	-	.	Target=Q8NEM1.2 404 440 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	115.000000	-	.	Target=Q1LZ87.1 451 487 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	115.000000	-	.	Target=Q96N38-3.1 240 276 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	116.000000	-	.	Target=Q6ZN57.1 184 220 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	116.000000	-	.	Target=O60765.2 268 304 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	116.000000	-	.	Target=Q7TNU6.1 480 516 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	116.000000	-	.	Target=Q96GC6-3.1 484 520 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	116.000000	-	.	Target=Q96N38-2.1 451 487 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	116.000000	-	.	Target=Q96N38.1 451 487 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	116.000000	-	.	Target=Q9NSJ1.2 98 134 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	116.000000	-	.	Target=Q96GC6.1 589 625 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	116.000000	-	.	Target=Q96GC6-2.1 557 593 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	116.000000	-	.	Target=Q96GC6-4.1 308 344 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	117.000000	-	.	Target=O95780.1 395 431 +;percentID=63;Gap=M13 D1 M5 I1 M18 
+chr4-04	SwissProt	protein_match	263837	263947	117.000000	-	.	Target=O95780-2.1 319 355 +;percentID=63;Gap=M13 D1 M5 I1 M18 
+chr4-04	SwissProt	protein_match	263837	263947	117.000000	-	.	Target=Q8N972.1 530 566 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	117.000000	-	.	Target=Q61751.1 238 274 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	117.000000	-	.	Target=Q9UK11.1 342 378 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	117.000000	-	.	Target=Q9UJU3.1 663 699 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	117.000000	-	.	Target=Q02975.1 242 278 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	117.000000	-	.	Target=A6NK75.3 167 203 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	117.000000	-	.	Target=Q9UK12.2 311 347 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	118.000000	-	.	Target=Q96SE7.1 651 687 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	118.000000	-	.	Target=O88553.1 369 405 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	118.000000	-	.	Target=Q2VY69.1 453 489 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	118.000000	-	.	Target=Q9BR84.1 323 359 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	118.000000	-	.	Target=Q3KP31.1 214 250 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	118.000000	-	.	Target=O75373.2 311 347 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	118.000000	-	.	Target=Q96LW9.2 321 357 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263944	118.000000	-	.	Target=Q6JLC9.1 383 418 +;percentID=58
+chr4-04	SwissProt	protein_match	263837	263947	118.000000	-	.	Target=Q96SK3.3 559 595 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	118.000000	-	.	Target=Q96SK3-2.3 234 270 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	119.000000	-	.	Target=Q96JC4.1 435 471 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	119.000000	-	.	Target=Q9HBT8.1 380 416 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	119.000000	-	.	Target=Q32KN0.1 269 305 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263950	119.000000	-	.	Target=Q96MR9.2 373 410 +;percentID=57
+chr4-04	SwissProt	protein_match	263837	263947	119.000000	-	.	Target=A6NF79.3 434 470 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	119.000000	-	.	Target=Q8N7M2.3 401 437 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	119.000000	-	.	Target=Q8BZW4-2.1 301 337 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	119.000000	-	.	Target=Q8BZW4.1 322 358 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	120.000000	-	.	Target=Q96N22.1 407 443 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	120.000000	-	.	Target=A2T812.1 359 395 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	120.000000	-	.	Target=Q9HBT7.1 359 395 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	120.000000	-	.	Target=P17141.3 365 401 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	120.000000	-	.	Target=Q6ZMW2.1 504 540 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	120.000000	-	.	Target=P17097.1 276 312 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	120.000000	-	.	Target=Q5RBX0.1 276 312 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	120.000000	-	.	Target=A6NP11.3 366 402 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	120.000000	-	.	Target=Q96NJ3.2 314 350 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	120.000000	-	.	Target=Q96NJ3-2.2 159 195 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	120.000000	-	.	Target=Q9Y6Q3.3 403 439 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	120.000000	-	.	Target=Q9Y6Q3-2.3 418 454 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	121.000000	-	.	Target=Q5EBM4.1 155 191 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	121.000000	-	.	Target=Q0D2J5.2 254 290 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	121.000000	-	.	Target=O75290.3 499 535 +;percentID=51
+chr4-04	SwissProt	protein_match	263837	263947	121.000000	-	.	Target=Q86UE3.2 775 811 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	122.000000	-	.	Target=Q03936-3.2 335 371 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	122.000000	-	.	Target=Q03936.2 367 403 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	122.000000	-	.	Target=Q03936-2.2 298 334 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	122.000000	-	.	Target=Q8IYN0.1 371 407 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	122.000000	-	.	Target=Q96BR6.2 276 312 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	122.000000	-	.	Target=A8MXY4.2 979 1015 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	122.000000	-	.	Target=O14628.2 548 584 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	122.000000	-	.	Target=O14628-5.2 525 561 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	122.000000	-	.	Target=O14628-6.2 529 565 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	122.000000	-	.	Target=O14628-4.2 476 512 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	122.000000	-	.	Target=O14628-7.2 480 516 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	123.000000	-	.	Target=Q05481.1 292 328 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	123.000000	-	.	Target=A8MTY0.2 224 260 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263953	123.000000	-	.	Target=O75437.3 542 580 +;percentID=58
+chr4-04	SwissProt	protein_match	263837	263947	123.000000	-	.	Target=P17019.3 502 538 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	123.000000	-	.	Target=Q14593-2.3 279 315 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	123.000000	-	.	Target=Q14593.3 344 380 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	124.000000	-	.	Target=P35789-2.4 423 459 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	124.000000	-	.	Target=Q9P255.2 419 455 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263944	124.000000	-	.	Target=Q5JVG8.1 340 375 +;percentID=61
+chr4-04	SwissProt	protein_match	263837	263947	124.000000	-	.	Target=O43345.1 227 263 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	124.000000	-	.	Target=Q14586.2 406 442 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	124.000000	-	.	Target=A6NN14.3 1102 1138 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	124.000000	-	.	Target=A6NKZ1.3 349 385 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	124.000000	-	.	Target=Q8N7Q3.2 531 567 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	124.000000	-	.	Target=Q3ZCT1.3 218 254 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	125.000000	-	.	Target=Q8IYB9.1 562 598 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263953	125.000000	-	.	Target=Q86V71.2 309 347 +;percentID=58
+chr4-04	SwissProt	protein_match	263837	263947	125.000000	-	.	Target=P17038-2.4 530 566 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	125.000000	-	.	Target=P17038.4 536 572 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	126.000000	-	.	Target=P35789.4 395 431 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	126.000000	-	.	Target=P35789-3.4 395 431 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	126.000000	-	.	Target=Q6PG37.1 252 288 +;percentID=56
+chr4-04	SwissProt	protein_match	263837	263947	126.000000	-	.	Target=A6NNF4.3 507 543 +;percentID=62
+chr4-04	SwissProt	protein_match	263837	263953	126.000000	-	.	Target=Q68DY1.2 337 375 +;percentID=58
+chr4-04	SwissProt	protein_match	263837	263953	126.000000	-	.	Target=Q68DY1-2.2 261 299 +;percentID=58
+chr4-04	SwissProt	protein_match	263837	263953	128.000000	-	.	Target=Q8TD23.2 392 430 +;percentID=61
+chr4-04	SwissProt	protein_match	263837	263947	129.000000	-	.	Target=Q9UII5.1 466 502 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	129.000000	-	.	Target=Q5SXM1.1 291 327 +;percentID=59
+chr4-04	SwissProt	protein_match	263837	263947	129.000000	-	.	Target=Q86YE8-3.3 522 558 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	129.000000	-	.	Target=Q86YE8-4.3 493 529 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	129.000000	-	.	Target=Q86YE8-2.3 492 528 +;percentID=54
+chr4-04	SwissProt	protein_match	263837	263947	130.000000	-	.	Target=Q6ZMV8.1 338 374 +;percentID=59
+chr4-04	SwissProt	protein_match	263840	263947	88.000000	-	.	Target=Q92670.2 374 409 +;percentID=44
+chr4-04	SwissProt	protein_match	263840	263947	93.000000	-	.	Target=P51815.2 447 482 +;percentID=47
+chr4-04	SwissProt	protein_match	263840	263947	95.000000	-	.	Target=Q8N9Z0.2 230 265 +;percentID=47
+chr4-04	SwissProt	protein_match	263840	263947	95.000000	-	.	Target=Q8N9Z0-2.2 187 222 +;percentID=47
+chr4-04	SwissProt	protein_match	263840	263947	97.000000	-	.	Target=Q8WTR7.1 429 464 +;percentID=44
+chr4-04	SwissProt	protein_match	263840	263947	98.000000	-	.	Target=Q14591.3 284 319 +;percentID=47
+chr4-04	SwissProt	protein_match	263840	263947	101.000000	-	.	Target=Q5VIY5.1 269 304 +;percentID=52
+chr4-04	SwissProt	protein_match	263840	263947	102.000000	-	.	Target=Q9BS31.1 400 435 +;percentID=50
+chr4-04	SwissProt	protein_match	263840	263947	103.000000	-	.	Target=Q8N2I2.1 354 389 +;percentID=52
+chr4-04	SwissProt	protein_match	263840	263947	104.000000	-	.	Target=Q6ZNG0.1 278 313 +;percentID=52
+chr4-04	SwissProt	protein_match	263840	263947	104.000000	-	.	Target=Q5RB33.1 278 313 +;percentID=52
+chr4-04	SwissProt	protein_match	263840	263947	104.000000	-	.	Target=Q6ZNG0-2.1 164 199 +;percentID=52
+chr4-04	SwissProt	protein_match	263840	263947	104.000000	-	.	Target=Q8N8C0-2.1 59 94 +;percentID=50
+chr4-04	SwissProt	protein_match	263840	263947	105.000000	-	.	Target=Q96IR2.2 717 752 +;percentID=55
+chr4-04	SwissProt	protein_match	263840	263947	105.000000	-	.	Target=Q14587-2.2 421 456 +;percentID=50
+chr4-04	SwissProt	protein_match	263840	263947	106.000000	-	.	Target=Q9NV72.1 296 331 +;percentID=50
+chr4-04	SwissProt	protein_match	263840	263947	106.000000	-	.	Target=Q3MIS6.1 351 386 +;percentID=50
+chr4-04	SwissProt	protein_match	263840	263947	106.000000	-	.	Target=Q3MIS6-2.1 118 153 +;percentID=50
+chr4-04	SwissProt	protein_match	263840	263947	108.000000	-	.	Target=Q02525.2 575 610 +;percentID=52
+chr4-04	SwissProt	protein_match	263840	263947	109.000000	-	.	Target=Q8N8J6-2.2 437 472 +;percentID=52
+chr4-04	SwissProt	protein_match	263840	263947	109.000000	-	.	Target=Q8N8J6.2 426 461 +;percentID=52
+chr4-04	SwissProt	protein_match	263840	263947	109.000000	-	.	Target=Q8N8J6-3.2 437 472 +;percentID=52
+chr4-04	SwissProt	protein_match	263840	263950	111.000000	-	.	Target=Q494X3.1 268 304 +;percentID=51
+chr4-04	SwissProt	protein_match	263840	263947	111.000000	-	.	Target=Q86T29.1 447 482 +;percentID=52
+chr4-04	SwissProt	protein_match	263840	263947	112.000000	-	.	Target=Q571J5.2 244 279 +;percentID=55
+chr4-04	SwissProt	protein_match	263840	263947	114.000000	-	.	Target=Q8IYX0.1 350 385 +;percentID=58
+chr4-04	SwissProt	protein_match	263840	263947	116.000000	-	.	Target=Q60585.2 478 513 +;percentID=52
+chr4-04	SwissProt	protein_match	263840	263947	120.000000	-	.	Target=Q9HCL3.2 478 513 +;percentID=55
+chr4-04	SwissProt	protein_match	263840	263947	120.000000	-	.	Target=P10755.2 446 481 +;percentID=55
+chr4-04	SwissProt	protein_match	263840	263947	122.000000	-	.	Target=Q9H8G1.2 483 518 +;percentID=58
+chr4-04	SwissProt	protein_match	263843	263947	93.000000	-	.	Target=B1APH4.3 353 387 +;percentID=48
+chr4-04	SwissProt	protein_match	263852	263947	98.000000	-	.	Target=P0CB33.1 379 410 +;percentID=56
+chr4-04	SwissProt	protein_match	263864	263947	121.000000	-	.	Target=Q3SXZ3-2.1 417 444 +;percentID=75
+chr4-04	SwissProt	protein_match	263864	263947	121.000000	-	.	Target=Q3SXZ3.1 449 476 +;percentID=75
+chr4-04	SwissProt	protein_match	263867	263947	75.000000	-	.	Target=Q9NZV7.1 354 380 +;percentID=44
+chr4-04	SwissProt	protein_match	263867	263950	77.000000	-	.	Target=A6NDX5.5 232 259 +;percentID=50
+chr4-04	SwissProt	protein_match	263867	263947	78.000000	-	.	Target=A8MYF4.2 460 486 +;percentID=51
+chr4-04	SwissProt	protein_match	263867	263947	78.000000	-	.	Target=Q96PQ6.2 556 582 +;percentID=51
+chr4-04	SwissProt	protein_match	263867	263947	78.000000	-	.	Target=Q96PQ6-2.2 524 550 +;percentID=51
+chr4-04	SwissProt	protein_match	263867	263947	79.000000	-	.	Target=Q96JF6.3 514 540 +;percentID=51
+chr4-04	SwissProt	protein_match	263867	263947	79.000000	-	.	Target=Q5TYW1-2.2 572 598 +;percentID=48
+chr4-04	SwissProt	protein_match	263867	263947	83.000000	-	.	Target=Q9UK13.2 560 586 +;percentID=51
+chr4-04	SwissProt	protein_match	263867	263947	84.000000	-	.	Target=Q08ER8.2 533 559 +;percentID=55
+chr4-04	SwissProt	protein_match	263867	263947	84.000000	-	.	Target=Q03923-2.3 531 557 +;percentID=59
+chr4-04	SwissProt	protein_match	263867	263947	84.000000	-	.	Target=Q03923.3 564 590 +;percentID=59
+chr4-04	SwissProt	protein_match	263867	263947	85.000000	-	.	Target=Q8N823.1 676 702 +;percentID=55
+chr4-04	SwissProt	protein_match	263867	263947	87.000000	-	.	Target=Q5CZA5.2 535 561 +;percentID=55
+chr4-04	SwissProt	protein_match	263867	263947	90.000000	-	.	Target=Q6NX49.1 686 712 +;percentID=51
+chr4-04	SwissProt	protein_match	263867	263947	91.000000	-	.	Target=O43296.1 537 563 +;percentID=59
+chr4-04	SwissProt	protein_match	263867	263947	94.000000	-	.	Target=Q2M3X9.1 551 577 +;percentID=55
+chr4-04	SwissProt	protein_match	263867	263947	96.000000	-	.	Target=P52742.2 632 658 +;percentID=62
+chr4-04	SwissProt	protein_match	263867	263947	99.000000	-	.	Target=Q08DG8.1 631 657 +;percentID=62
+chr4-04	SwissProt	protein_match	263867	263947	101.000000	-	.	Target=A8MUV8.3 450 476 +;percentID=62
+chr4-04	SwissProt	protein_match	263870	263947	78.000000	-	.	Target=Q9C0F3.2 444 469 +;percentID=50
+chr4-04	SwissProt	protein_match	263870	263947	78.000000	-	.	Target=Q5R5Y7.1 444 469 +;percentID=50
+chr4-04	SwissProt	protein_match	263870	263947	79.000000	-	.	Target=Q8BPP0.1 426 451 +;percentID=50
+chr4-04	SwissProt	protein_match	263870	263947	80.000000	-	.	Target=Q9UL58.1 488 513 +;percentID=50
+chr4-04	SwissProt	protein_match	263870	263947	81.000000	-	.	Target=A8MT65.2 514 539 +;percentID=57
+chr4-04	SwissProt	protein_match	263870	263965	83.000000	-	.	Target=Q8IVC4.1 374 405 +;percentID=46
+chr4-04	SwissProt	protein_match	263870	263947	84.000000	-	.	Target=Q6P560.1 597 622 +;percentID=57
+chr4-04	SwissProt	protein_match	263870	263947	85.000000	-	.	Target=P17024.2 504 529 +;percentID=61
+chr4-04	SwissProt	protein_match	263870	263947	92.000000	-	.	Target=Q15928.1 449 474 +;percentID=61
+chr4-04	SwissProt	protein_match	263873	263947	74.000000	-	.	Target=Q8R2V3.2 660 685 +;percentID=53;Gap=M21 I1 M4 
+chr4-04	SwissProt	protein_match	263876	263947	70.000000	-	.	Target=Q5HY98.1 437 460 +;percentID=50
+chr4-04	SwissProt	protein_match	263876	263947	70.000000	-	.	Target=Q14587.2 918 941 +;percentID=54
+chr4-04	SwissProt	protein_match	263876	263947	76.000000	-	.	Target=P52736.2 604 627 +;percentID=50
+chr4-04	SwissProt	protein_match	263876	263947	77.000000	-	.	Target=Q8NC26.1 386 409 +;percentID=58
+chr4-04	SwissProt	protein_match	263879	263947	67.000000	-	.	Target=Q96NG5.1 374 396 +;percentID=52
+chr4-04	SwissProt	protein_match	263879	263947	67.000000	-	.	Target=Q6ZMY9.1 315 337 +;percentID=52
+chr4-04	SwissProt	protein_match	263879	263947	67.000000	-	.	Target=P08042-2.3 363 385 +;percentID=52
+chr4-04	SwissProt	protein_match	263879	263947	67.000000	-	.	Target=P08042.3 376 398 +;percentID=52
+chr4-04	SwissProt	protein_match	263879	263947	69.000000	-	.	Target=Q5RBQ3.1 611 633 +;percentID=47
+chr4-04	SwissProt	protein_match	263879	263947	69.000000	-	.	Target=Q6P9A3-2.1 598 620 +;percentID=47
+chr4-04	SwissProt	protein_match	263879	263947	69.000000	-	.	Target=Q6P9A3.1 611 633 +;percentID=47
+chr4-04	SwissProt	protein_match	263879	263947	72.000000	-	.	Target=Q86YE8.3 616 638 +;percentID=62;Gap=M13 D1 M6 I1 M3 
+chr4-04	SwissProt	protein_match	263879	263947	73.000000	-	.	Target=Q5REN4.1 545 567 +;percentID=52
+chr4-04	SwissProt	protein_match	263879	263947	74.000000	-	.	Target=Q6P9A1.2 573 595 +;percentID=47
+chr4-04	SwissProt	protein_match	263879	263947	75.000000	-	.	Target=Q5R4K8.2 705 727 +;percentID=56
+chr4-04	SwissProt	protein_match	263879	263947	77.000000	-	.	Target=Q9Y6R6.1 779 801 +;percentID=52
+chr4-04	SwissProt	protein_match	263879	263947	78.000000	-	.	Target=P10077.2 343 365 +;percentID=60
+chr4-04	SwissProt	protein_match	263879	263947	78.000000	-	.	Target=Q5REI6.1 550 572 +;percentID=60
+chr4-04	SwissProt	protein_match	263879	263947	78.000000	-	.	Target=Q8IZ26.2 508 530 +;percentID=56
+chr4-04	SwissProt	protein_match	263879	263947	79.000000	-	.	Target=Q13106.3 411 433 +;percentID=56
+chr4-04	SwissProt	protein_match	263879	263947	80.000000	-	.	Target=Q9P2J8.3 834 856 +;percentID=60
+chr4-04	SwissProt	protein_match	263879	263947	81.000000	-	.	Target=O75346.2 450 472 +;percentID=60
+chr4-04	SwissProt	protein_match	263879	263947	81.000000	-	.	Target=O75346-2.2 374 396 +;percentID=60
+chr4-04	SwissProt	protein_match	263879	263947	86.000000	-	.	Target=Q9BS34.1 363 385 +;percentID=65
+chr4-04	SwissProt	protein_match	263882	263947	67.000000	-	.	Target=Q03924.3 359 379 +;percentID=59;Gap=M11 D1 M10 
+chr4-04	SwissProt	protein_match	263882	263947	72.000000	-	.	Target=Q8N4W9.2 873 894 +;percentID=54
+chr4-04	SwissProt	protein_match	263882	263947	73.000000	-	.	Target=Q2TL60.1 580 601 +;percentID=50
+chr4-04	SwissProt	protein_match	263885	263947	66.000000	-	.	Target=Q6N045.2 513 533 +;percentID=57
+chr4-04	SwissProt	protein_match	263885	263947	70.000000	-	.	Target=Q8WV37.1 490 510 +;percentID=57
+chr4-04	SwissProt	protein_match	263888	263944	48.000000	-	.	Target=P16374.2 679 696 +;percentID=52;Gap=M12 D1 M6 
+chr4-04	SwissProt	protein_match	263894	263938	44.000000	-	.	Target=Q03938.2 202 216 +;percentID=53
+chr4-04	SwissProt	protein_match	263894	263947	49.000000	-	.	Target=A8K971.2 282 299 +;percentID=55
+chr4-04	SwissProt	protein_match	263894	263947	54.000000	-	.	Target=Q2TAN0.1 282 299 +;percentID=55
+chr4-04	SwissProt	protein_match	263894	263947	54.000000	-	.	Target=A8MVS1.1 282 299 +;percentID=55
+chr4-04	SwissProt	protein_match	263894	263947	54.000000	-	.	Target=Q6ZN79.1 282 299 +;percentID=55
+chr4-04	SwissProt	protein_match	263894	263947	54.000000	-	.	Target=A8MWA4.1 284 301 +;percentID=55
+chr4-04	SwissProt	protein_match	263894	263947	55.000000	-	.	Target=A8MUZ8.2 282 299 +;percentID=55
+chr4-04	SwissProt	protein_match	263894	263947	63.000000	-	.	Target=Q96H40.3 199 216 +;percentID=61
+chr4-04	SwissProt	protein_match	263906	263947	62.000000	-	.	Target=P52744.2 248 261 +;percentID=71
+chr4-04	SwissProt	protein_match	263912	263947	40.000000	-	.	Target=Q9NYW8.1 161 172 +;percentID=50
+chr4-04	SwissProt	protein_match	263912	263947	41.000000	-	.	Target=Q86TJ5.1 518 529 +;percentID=66
+chr4-04	SwissProt	protein_match	263912	263968	48.000000	-	.	Target=Q8BQC8.1 154 171 +;percentID=52;Gap=M6 D1 M12 
+chr4-04	SwissProt	protein_match	263912	263968	48.000000	-	.	Target=Q8BQC8-2.1 153 170 +;percentID=52;Gap=M6 D1 M12 
+chr4-04	SwissProt	protein_match	263912	263947	50.000000	-	.	Target=Q6ZN06.2 605 616 +;percentID=75
+chr4-04	SwissProt	protein_match	263912	263947	50.000000	-	.	Target=Q2M218.1 625 636 +;percentID=66
+chr4-04	SwissProt	protein_match	263912	263947	52.000000	-	.	Target=Q03924-2.3 415 426 +;percentID=75
+chr4-04	SwissProt	protein_match	263912	263947	53.000000	-	.	Target=A6NK53.2 646 657 +;percentID=75
+chr4-04	SwissProt	protein_match	263912	263947	56.000000	-	.	Target=A6NGH9.3 587 598 +;percentID=75
+chr4-04	SwissProt	protein_match	263918	263947	40.000000	-	.	Target=Q5JVG2.1 174 183 +;percentID=50
+chr4-04	SwissProt	protein_match	263918	263941	40.000000	-	.	Target=A6NK21.3 539 546 +;percentID=75
+chr4-04	SwissProt	protein_match	263934	263966	43.000000	-	.	Target=Q8TF20.2 901 911 +;percentID=81
+chr4-04	SwissProt	protein_match	266085	266132	42.000000	-	.	Target=Q9UJW7.2 354 369 +;percentID=56
+chr4-04	SwissProt	protein_match	266085	266138	59.000000	-	.	Target=Q6V9R5.2 207 224 +;percentID=55
+chr4-04	SwissProt	protein_match	266085	266138	59.000000	-	.	Target=Q4R882.1 200 217 +;percentID=55
+chr4-04	SwissProt	protein_match	266085	266156	63.000000	-	.	Target=P59923.1 835 860 +;percentID=50;Gap=M6 I2 M18 
+chr4-04	SwissProt	protein_match	266085	266159	66.000000	-	.	Target=P17031.3 336 362 +;percentID=48;Gap=M8 I2 M17 
+chr4-04	SwissProt	protein_match	266085	266159	73.000000	-	.	Target=Q9BY31.2 742 768 +;percentID=55;Gap=M8 I2 M17 
+chr4-04	SwissProt	protein_match	266085	266231	87.000000	-	.	Target=Q6AZW8.1 76 126 +;percentID=45;Gap=M31 I2 M18 
+chr4-04	SwissProt	protein_match	266085	266231	91.000000	-	.	Target=Q60585.2 366 416 +;percentID=44;Gap=M14 I1 M9 D1 M7 I2 M18 
+chr4-04	SwissProt	protein_match	266085	266231	93.000000	-	.	Target=Q7Z7L9.1 303 353 +;percentID=47;Gap=M32 I2 M17 
+chr4-04	SwissProt	protein_match	266085	266231	93.000000	-	.	Target=Q7Z7L9-2.1 284 334 +;percentID=47;Gap=M32 I2 M17 
+chr4-04	SwissProt	protein_match	266085	266231	93.000000	-	.	Target=Q07230.1 304 354 +;percentID=47;Gap=M32 I2 M17 
+chr4-04	SwissProt	protein_match	266085	266231	95.000000	-	.	Target=Q14587-2.2 253 303 +;percentID=43;Gap=M31 I2 M18 
+chr4-04	SwissProt	protein_match	266085	266219	97.000000	-	.	Target=A1YF12.1 463 509 +;percentID=46;Gap=M28 I2 M17 
+chr4-04	SwissProt	protein_match	266085	266219	98.000000	-	.	Target=P17020.3 463 509 +;percentID=48;Gap=M28 I2 M17 
+chr4-04	SwissProt	protein_match	266085	266219	98.000000	-	.	Target=A2T759.1 463 509 +;percentID=48;Gap=M28 I2 M17 
+chr4-04	SwissProt	protein_match	266085	266420	415.000000	-	.	Target=Q8IYB9.1 76 192 +;percentID=72;Gap=M44 I4 M51 I2 M7 D1 M9 
+chr4-04	SwissProt	protein_match	266085	266417	479.000000	-	.	Target=Q8TF20.2 1 117 +;percentID=77;Gap=M43 I4 M51 I2 M17 
+chr4-04	SwissProt	protein_match	266087	266137	41.000000	-	.	Target=A8MUV8.3 483 499 +;percentID=58
+chr4-04	SwissProt	protein_match	266088	266144	43.000000	-	.	Target=Q8R2V3.2 554 572 +;percentID=42
+chr4-04	SwissProt	protein_match	266088	266132	43.000000	-	.	Target=Q8TAW3.2 197 211 +;percentID=53
+chr4-04	SwissProt	protein_match	266088	266150	44.000000	-	.	Target=O43296.1 200 222 +;percentID=47;Gap=M5 I2 M16 
+chr4-04	SwissProt	protein_match	266088	266135	46.000000	-	.	Target=Q96NL3.1 203 218 +;percentID=56
+chr4-04	SwissProt	protein_match	266088	266132	46.000000	-	.	Target=O14978.2 383 397 +;percentID=53
+chr4-04	SwissProt	protein_match	266088	266153	46.000000	-	.	Target=Q80YP6.1 211 234 +;percentID=48;Gap=M6 I2 M7 I1 M3 D1 M5 
+chr4-04	SwissProt	protein_match	266088	266138	47.000000	-	.	Target=P10751.2 60 76 +;percentID=52
+chr4-04	SwissProt	protein_match	266088	266147	51.000000	-	.	Target=Q8NDQ6-4.1 163 183 +;percentID=52;Gap=M2 I1 M18 
+chr4-04	SwissProt	protein_match	266088	266147	51.000000	-	.	Target=Q8NDQ6.1 186 206 +;percentID=52;Gap=M2 I1 M18 
+chr4-04	SwissProt	protein_match	266088	266147	51.000000	-	.	Target=Q8NDQ6-2.1 154 174 +;percentID=52;Gap=M2 I1 M18 
+chr4-04	SwissProt	protein_match	266088	266135	52.000000	-	.	Target=Q7TNU6.1 178 193 +;percentID=62
+chr4-04	SwissProt	protein_match	266088	266159	53.000000	-	.	Target=Q9Y473.1 329 354 +;percentID=50;Gap=M7 I2 M17 
+chr4-04	SwissProt	protein_match	266088	266156	53.000000	-	.	Target=A1L1L7.1 217 241 +;percentID=52;Gap=M7 I2 M16 
+chr4-04	SwissProt	protein_match	266088	266174	53.000000	-	.	Target=P17035.4 204 234 +;percentID=48;Gap=M13 I2 M16 
+chr4-04	SwissProt	protein_match	266088	266174	53.000000	-	.	Target=P17035-2.4 151 181 +;percentID=48;Gap=M13 I2 M16 
+chr4-04	SwissProt	protein_match	266088	266156	54.000000	-	.	Target=Q8R1D1.1 214 238 +;percentID=52;Gap=M7 I2 M16 
+chr4-04	SwissProt	protein_match	266088	266159	54.000000	-	.	Target=Q3SY52.1 233 258 +;percentID=48;Gap=M8 I2 M7 I1 M3 D1 M5 
+chr4-04	SwissProt	protein_match	266088	266159	54.000000	-	.	Target=Q3SY52-2.1 178 203 +;percentID=48;Gap=M8 I2 M7 I1 M3 D1 M5 
+chr4-04	SwissProt	protein_match	266088	266159	54.000000	-	.	Target=Q3SY52-3.1 130 155 +;percentID=48;Gap=M8 I2 M7 I1 M3 D1 M5 
+chr4-04	SwissProt	protein_match	266088	266159	55.000000	-	.	Target=Q9NYT6.2 302 326 +;percentID=48;Gap=M5 I1 M19 
+chr4-04	SwissProt	protein_match	266088	266159	55.000000	-	.	Target=Q86YE8.3 304 329 +;percentID=46;Gap=M7 I2 M17 
+chr4-04	SwissProt	protein_match	266088	266159	56.000000	-	.	Target=P17024.2 221 246 +;percentID=42;Gap=M8 I2 M16 
+chr4-04	SwissProt	protein_match	266088	266153	58.000000	-	.	Target=A2T712.1 273 296 +;percentID=45;Gap=M5 I2 M17 
+chr4-04	SwissProt	protein_match	266088	266153	58.000000	-	.	Target=A2T7L7.1 273 296 +;percentID=45;Gap=M5 I2 M17 
+chr4-04	SwissProt	protein_match	266088	266159	58.000000	-	.	Target=Q8N859.1 242 264 +;percentID=54;Gap=M6 D1 M17 
+chr4-04	SwissProt	protein_match	266088	266159	58.000000	-	.	Target=Q9UK13.2 220 245 +;percentID=50;Gap=M8 I2 M16 
+chr4-04	SwissProt	protein_match	266088	266159	58.000000	-	.	Target=P10077-2.2 591 616 +;percentID=50;Gap=M5 I1 M2 I1 M17 
+chr4-04	SwissProt	protein_match	266088	266159	58.000000	-	.	Target=Q9UIE0.3 162 187 +;percentID=57;Gap=M5 I1 M2 I1 M17 
+chr4-04	SwissProt	protein_match	266088	266159	59.000000	-	.	Target=P52736.2 292 317 +;percentID=46;Gap=M7 I2 M17 
+chr4-04	SwissProt	protein_match	266088	266159	59.000000	-	.	Target=Q5R4K8.2 365 390 +;percentID=50;Gap=M7 I2 M17 
+chr4-04	SwissProt	protein_match	266088	266168	59.000000	-	.	Target=Q52M93.1 429 457 +;percentID=48;Gap=M11 I2 M16 
+chr4-04	SwissProt	protein_match	266088	266153	60.000000	-	.	Target=Q5TYW1.2 514 537 +;percentID=54;Gap=M6 I2 M16 
+chr4-04	SwissProt	protein_match	266088	266195	60.000000	-	.	Target=Q5R741.1 343 377 +;percentID=42;Gap=M6 D1 M6 D2 M5 I2 M16 
+chr4-04	SwissProt	protein_match	266088	266153	61.000000	-	.	Target=Q07231.1 355 378 +;percentID=50;Gap=M5 I2 M17 
+chr4-04	SwissProt	protein_match	266088	266159	61.000000	-	.	Target=Q8WTR7.1 314 339 +;percentID=46;Gap=M8 I2 M16 
+chr4-04	SwissProt	protein_match	266088	266171	61.000000	-	.	Target=P10077.2 336 364 +;percentID=53;Gap=M3 D1 M8 I2 M16 
+chr4-04	SwissProt	protein_match	266088	266159	61.000000	-	.	Target=Q9BWM5.1 264 289 +;percentID=46;Gap=M8 I2 M16 
+chr4-04	SwissProt	protein_match	266088	266159	61.000000	-	.	Target=Q6PGE4.1 446 471 +;percentID=46;Gap=M8 I2 M16 
+chr4-04	SwissProt	protein_match	266088	266159	62.000000	-	.	Target=A6NFI3.1 451 476 +;percentID=46;Gap=M7 I2 M17 
+chr4-04	SwissProt	protein_match	266088	266162	62.000000	-	.	Target=Q9NQX6.1 124 150 +;percentID=48;Gap=M8 I2 M17 
+chr4-04	SwissProt	protein_match	266088	266162	62.000000	-	.	Target=Q5REA0.1 124 150 +;percentID=48;Gap=M8 I2 M17 
+chr4-04	SwissProt	protein_match	266088	266153	62.000000	-	.	Target=A2T6E3.1 270 293 +;percentID=50;Gap=M5 I2 M17 
+chr4-04	SwissProt	protein_match	266088	266159	64.000000	-	.	Target=Q9C0F3.2 132 157 +;percentID=46;Gap=M7 I2 M17 
+chr4-04	SwissProt	protein_match	266088	266159	64.000000	-	.	Target=Q5R5Y7.1 132 157 +;percentID=46;Gap=M7 I2 M17 
+chr4-04	SwissProt	protein_match	266088	266174	64.000000	-	.	Target=Q5EBM4.1 6 36 +;percentID=45;Gap=M13 I2 M16 
+chr4-04	SwissProt	protein_match	266088	266231	64.000000	-	.	Target=Q5TYW1-2.2 438 485 +;percentID=41;Gap=M17 I1 M6 D1 M9 I2 M6 D2 M7 
+chr4-04	SwissProt	protein_match	266088	266150	64.000000	-	.	Target=Q96N20.1 158 180 +;percentID=60;Gap=M5 I2 M16 
+chr4-04	SwissProt	protein_match	266088	266168	65.000000	-	.	Target=Q5HY98.1 235 262 +;percentID=51;Gap=M3 D1 M7 I2 M16 
+chr4-04	SwissProt	protein_match	266088	266159	65.000000	-	.	Target=Q5RDX1.1 148 173 +;percentID=57;Gap=M8 I2 M16 
+chr4-04	SwissProt	protein_match	266088	266159	65.000000	-	.	Target=Q6P3V2.2 180 205 +;percentID=57;Gap=M8 I2 M16 
+chr4-04	SwissProt	protein_match	266088	266231	65.000000	-	.	Target=Q9BS31.1 288 337 +;percentID=40;Gap=M29 I1 M2 I1 M17 
+chr4-04	known_cds	mRNA	264464	299110	.	-	.	ID=transcript1;Name=Z95704.2-001
+chr4-04	known_cds	exon	264464	266419	.	-	.	Parent=transcript1
+chr4-04	known_cds	CDS	264888	266419	.	-	2	Parent=transcript1
+chr4-04	known_cds	exon	289227	289322	.	-	.	Parent=transcript1
+chr4-04	known_cds	CDS	289227	289322	.	-	2	Parent=transcript1
+chr4-04	known_cds	exon	289818	289944	.	-	.	Parent=transcript1
+chr4-04	known_cds	CDS	289818	289944	.	-	0	Parent=transcript1
+chr4-04	known_cds	exon	299097	299110	.	-	.	Parent=transcript1
+chr4-04	known_cds	CDS	299097	299099	.	-	0	Parent=transcript1
+chr4-04	ensembl_variation	SNP	358038	358038	.	+	.	Name=rs112781035;variant_sequence=T/C;
+chr4-04	ensembl_variation	insertion	263638	263639	.	+	.	Name=rs111682324;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	358053	358053	.	+	.	Name=rs111267637;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	263649	263649	.	+	.	Name=rs115291458;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	358455	358455	.	+	.	Name=rs6831791;variant_sequence=G/A;
+chr4-04	ensembl_variation	deletion	263651	263652	.	+	.	Name=rs71654578;variant_sequence=AG/-;
+chr4-04	ensembl_variation	SNP	358456	358456	.	+	.	Name=rs79147894;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	263652	263652	.	+	.	Name=rs78782155;variant_sequence=G/A;
+chr4-04	ensembl_variation	insertion	358665	358666	.	+	.	Name=rs72598754;variant_sequence=-/G;
+chr4-04	ensembl_variation	SNP	263804	263804	.	+	.	Name=rs114544910;variant_sequence=C/T;
+chr4-04	ensembl_variation	insertion	358666	358667	.	+	.	Name=rs35953653;variant_sequence=-/G;
+chr4-04	ensembl_variation	SNP	263916	263916	.	+	.	Name=rs116247731;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	358879	358879	.	+	.	Name=rs60333530;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	263969	263969	.	+	.	Name=rs115321593;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	358932	358932	.	+	.	Name=rs56733551;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	263970	263970	.	+	.	Name=rs116766523;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	358988	358988	.	+	.	Name=rs59182798;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	264216	264216	.	+	.	Name=rs13110246;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	359013	359013	.	+	.	Name=rs114311518;variant_sequence=G/C;
+chr4-04	ensembl_variation	insertion	264240	264241	.	+	.	Name=rs71654579;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	359201	359201	.	+	.	Name=rs58835461;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	264241	264241	.	+	.	Name=rs118069740;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	359301	359301	.	+	.	Name=rs79360490;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	264558	264558	.	+	.	Name=rs17775145;variant_sequence=G/A;
+chr4-04	ensembl_variation	deletion	359304	359306	.	+	.	Name=rs77588968;variant_sequence=GTT/-;
+chr4-04	ensembl_variation	SNP	264681	264681	.	+	.	Name=rs77776147;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	264832	264832	.	+	.	Name=rs115469042;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	264941	264941	.	+	.	Name=rs11731285;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	265298	265299	.	+	.	Name=rs34590377;variant_sequence=-/C;
+chr4-04	ensembl_variation	insertion	265300	265301	.	+	.	Name=rs34359434;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	265324	265324	.	+	.	Name=rs61792061;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	265339	265339	.	+	.	Name=rs61792062;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	265341	265341	.	+	.	Name=rs61792063;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	265349	265349	.	+	.	Name=rs61792064;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	265355	265355	.	+	.	Name=rs61792065;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	265359	265359	.	+	.	Name=rs61792066;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	265369	265369	.	+	.	Name=rs61792067;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	265380	265380	.	+	.	Name=rs61792068;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	265387	265387	.	+	.	Name=rs61792069;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	265391	265391	.	+	.	Name=rs61792070;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	265397	265397	.	+	.	Name=rs61792071;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	265399	265399	.	+	.	Name=rs61792072;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	265411	265411	.	+	.	Name=rs61792073;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	265414	265414	.	+	.	Name=rs61792074;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	265427	265427	.	+	.	Name=rs61792075;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	265433	265433	.	+	.	Name=rs61792076;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	265435	265435	.	+	.	Name=rs61792077;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	265437	265437	.	+	.	Name=rs61792078;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	265439	265439	.	+	.	Name=rs61792079;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	265441	265441	.	+	.	Name=rs61792080;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	265444	265444	.	+	.	Name=rs61792081;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	265465	265465	.	+	.	Name=rs61792082;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	265469	265469	.	+	.	Name=rs61792083;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	265479	265479	.	+	.	Name=rs61792084;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	265485	265485	.	+	.	Name=rs61792085;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	265495	265495	.	+	.	Name=rs61792086;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	265500	265500	.	+	.	Name=rs61792087;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	265504	265504	.	+	.	Name=rs61792088;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	265514	265514	.	+	.	Name=rs61792089;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	265519	265519	.	+	.	Name=rs61792090;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	265522	265522	.	+	.	Name=rs61792091;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	265527	265527	.	+	.	Name=rs61792092;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	265536	265536	.	+	.	Name=rs79816310;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	265550	265550	.	+	.	Name=rs61792093;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	265558	265558	.	+	.	Name=rs61792094;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	265563	265563	.	+	.	Name=rs114747783;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	265566	265566	.	+	.	Name=rs61792095;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	265637	265637	.	+	.	Name=rs61597111;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	265743	265743	.	+	.	Name=rs114872625;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	265970	265970	.	+	.	Name=rs61730555;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	266047	266047	.	+	.	Name=rs61730554;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	266124	266124	.	+	.	Name=rs114394748;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	266171	266171	.	+	.	Name=rs115069723;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	266491	266491	.	+	.	Name=rs77771572;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	266659	266659	.	+	.	Name=rs79366248;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	266863	266863	.	+	.	Name=rs4629385;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	267075	267075	.	+	.	Name=rs79767202;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	267076	267076	.	+	.	Name=rs2883231;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	267173	267173	.	+	.	Name=rs76052254;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	267230	267230	.	+	.	Name=rs79263269;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	267232	267232	.	+	.	Name=rs117235891;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	267437	267437	.	+	.	Name=rs78343340;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	267442	267442	.	+	.	Name=rs114536727;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	267511	267511	.	+	.	Name=rs75569198;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	267528	267528	.	+	.	Name=rs73795403;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	267621	267621	.	+	.	Name=rs6811431;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	267634	267634	.	+	.	Name=rs79242577;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	267878	267878	.	+	.	Name=rs115102557;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	267963	267963	.	+	.	Name=rs75849171;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	267968	267968	.	+	.	Name=rs75105190;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	268300	268300	.	+	.	Name=rs78676359;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	268371	268371	.	+	.	Name=rs58641957;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	268580	268580	.	+	.	Name=rs13435268;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	268590	268590	.	+	.	Name=rs73791808;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	268623	268624	.	+	.	Name=rs34079698;variant_sequence=-/G;
+chr4-04	ensembl_variation	SNP	268659	268659	.	+	.	Name=rs73791809;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	268771	268771	.	+	.	Name=rs76605095;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	269041	269041	.	+	.	Name=rs73791811;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	269042	269042	.	+	.	Name=rs7694325;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	269457	269457	.	+	.	Name=rs73213596;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	269477	269477	.	+	.	Name=rs75591813;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	269546	269546	.	+	.	Name=rs116839202;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	269629	269629	.	+	.	Name=rs115946034;variant_sequence=G/A;
+chr4-04	ensembl_variation	deletion	269693	269694	.	+	.	Name=rs113923591;variant_sequence=AG/-;
+chr4-04	ensembl_variation	SNP	270046	270046	.	+	.	Name=rs61192761;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	270058	270058	.	+	.	Name=rs13136187;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	270510	270510	.	+	.	Name=rs116611457;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	270574	270574	.	+	.	Name=rs6824022;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	270656	270656	.	+	.	Name=rs6814846;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	270698	270698	.	+	.	Name=rs6824248;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	270742	270743	.	+	.	Name=rs113777886;variant_sequence=-/AAAAAC;
+chr4-04	ensembl_variation	SNP	270880	270880	.	+	.	Name=rs75684666;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	271072	271072	.	+	.	Name=rs56218479;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	271076	271076	.	+	.	Name=rs73213597;variant_sequence=C/T;
+chr4-04	ensembl_variation	insertion	271391	271392	.	+	.	Name=rs111756381;variant_sequence=-/A;
+chr4-04	ensembl_variation	insertion	271400	271401	.	+	.	Name=rs57017607;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	271580	271580	.	+	.	Name=rs113114939;variant_sequence=A/C;
+chr4-04	ensembl_variation	insertion	271717	271718	.	+	.	Name=rs36014294;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	271755	271755	.	+	.	Name=rs115916539;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	271980	271980	.	+	.	Name=rs79879654;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	272177	272177	.	+	.	Name=rs112899466;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	272456	272456	.	+	.	Name=rs74547440;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	272471	272471	.	+	.	Name=rs80057113;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	272494	272494	.	+	.	Name=rs79897974;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	272520	272520	.	+	.	Name=rs76533221;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	272521	272521	.	+	.	Name=rs76333467;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	272522	272522	.	+	.	Name=rs6837796;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	272523	272523	.	+	.	Name=rs79651239;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	272524	272524	.	+	.	Name=rs11729365;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	272526	272526	.	+	.	Name=rs77511484;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	272528	272528	.	+	.	Name=rs74521993;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	272533	272533	.	+	.	Name=rs74358611;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	272535	272535	.	+	.	Name=rs78139614;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	272548	272548	.	+	.	Name=rs77869118;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	272554	272554	.	+	.	Name=rs75349959;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	272563	272563	.	+	.	Name=rs78652590;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	272565	272565	.	+	.	Name=rs75105672;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	272571	272571	.	+	.	Name=rs75824078;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	272579	272579	.	+	.	Name=rs78345290;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	272600	272600	.	+	.	Name=rs78397384;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	272605	272605	.	+	.	Name=rs76198714;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	272606	272606	.	+	.	Name=rs75041583;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	272621	272621	.	+	.	Name=rs76152366;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	272671	272671	.	+	.	Name=rs115038596;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	272743	272743	.	+	.	Name=rs78746414;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	272777	272777	.	+	.	Name=rs79262119;variant_sequence=T/A;
+chr4-04	ensembl_variation	insertion	272925	272926	.	+	.	Name=rs111326176;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	273157	273157	.	+	.	Name=rs11733683;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	273217	273217	.	+	.	Name=rs111551744;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	273246	273247	.	+	.	Name=rs71166804;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	273314	273314	.	+	.	Name=rs113970876;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	273476	273476	.	+	.	Name=rs6815868;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	273576	273576	.	+	.	Name=rs116671481;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	273872	273872	.	+	.	Name=rs114250682;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	273875	273875	.	+	.	Name=rs76980245;variant_sequence=A/T;
+chr4-04	ensembl_variation	insertion	273881	273882	.	+	.	Name=rs35971123;variant_sequence=-/ATAA;
+chr4-04	ensembl_variation	SNP	273882	273882	.	+	.	Name=rs117802913;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	273969	273969	.	+	.	Name=rs79516104;variant_sequence=A/G;
+chr4-04	ensembl_variation	deletion	274008	274009	.	+	.	Name=rs112737400;variant_sequence=AC/-;
+chr4-04	ensembl_variation	insertion	274083	274084	.	+	.	Name=rs112052577;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	274084	274084	.	+	.	Name=rs76583286;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	274097	274098	.	+	.	Name=rs59901961;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	274120	274120	.	+	.	Name=rs56217474;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	274287	274287	.	+	.	Name=rs113652207;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	274394	274394	.	+	.	Name=rs56023157;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	274492	274492	.	+	.	Name=rs114234114;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	274493	274493	.	+	.	Name=rs111711081;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	274728	274728	.	+	.	Name=rs116524627;variant_sequence=G/A;
+chr4-04	ensembl_variation	deletion	274752	274753	.	+	.	Name=rs72495105;variant_sequence=CA/-;
+chr4-04	ensembl_variation	SNP	274910	274910	.	+	.	Name=rs116067225;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	274943	274943	.	+	.	Name=rs77762064;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	275116	275116	.	+	.	Name=rs2353602;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	275207	275207	.	+	.	Name=rs56327123;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	275229	275229	.	+	.	Name=rs79295381;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	275234	275234	.	+	.	Name=rs76166839;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	275238	275238	.	+	.	Name=rs78490597;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	275251	275251	.	+	.	Name=rs79208974;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	275418	275418	.	+	.	Name=rs115129711;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	275599	275599	.	+	.	Name=rs28616744;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	275744	275744	.	+	.	Name=rs115932953;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	275870	275870	.	+	.	Name=rs78697570;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	275902	275902	.	+	.	Name=rs6810785;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	276449	276449	.	+	.	Name=rs74570414;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	276696	276696	.	+	.	Name=rs73791813;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	276765	276765	.	+	.	Name=rs11722521;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	276983	276983	.	+	.	Name=rs11723615;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	277057	277057	.	+	.	Name=rs7665727;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	277173	277173	.	+	.	Name=rs73217569;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	277356	277356	.	+	.	Name=rs79991484;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	277481	277481	.	+	.	Name=rs75314292;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	277739	277739	.	+	.	Name=rs113847214;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	277748	277748	.	+	.	Name=rs6843821;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	277924	277924	.	+	.	Name=rs74675982;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	277955	277955	.	+	.	Name=rs6814967;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	278063	278063	.	+	.	Name=rs73064337;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	278095	278095	.	+	.	Name=rs77279928;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	278196	278196	.	+	.	Name=rs9328738;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	278326	278326	.	+	.	Name=rs13327936;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	278380	278380	.	+	.	Name=rs78833908;variant_sequence=T/C;
+chr4-04	ensembl_variation	insertion	278627	278628	.	+	.	Name=rs71654580;variant_sequence=-/T;
+chr4-04	ensembl_variation	SNP	278680	278680	.	+	.	Name=rs12719767;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	278849	278849	.	+	.	Name=rs76862729;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	278915	278915	.	+	.	Name=rs73791814;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	279086	279086	.	+	.	Name=rs114676750;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	279226	279226	.	+	.	Name=rs118183222;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	279396	279396	.	+	.	Name=rs10002733;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	280006	280006	.	+	.	Name=rs111484673;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	280353	280353	.	+	.	Name=rs7697560;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	280426	280426	.	+	.	Name=rs2353599;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	280496	280496	.	+	.	Name=rs4438712;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	281028	281028	.	+	.	Name=rs116669208;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	281038	281038	.	+	.	Name=rs10023604;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	281408	281408	.	+	.	Name=rs116529450;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	281440	281440	.	+	.	Name=rs73217572;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	281442	281442	.	+	.	Name=rs13112393;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	281649	281649	.	+	.	Name=rs61792096;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	281707	281707	.	+	.	Name=rs11722197;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	281746	281747	.	+	.	Name=rs35663095;variant_sequence=-/T;
+chr4-04	ensembl_variation	SNP	281994	281994	.	+	.	Name=rs114334217;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	282006	282006	.	+	.	Name=rs6820547;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	282046	282046	.	+	.	Name=rs6826459;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	282160	282160	.	+	.	Name=rs66712247;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	282499	282499	.	+	.	Name=rs11723261;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	282528	282528	.	+	.	Name=rs113987817;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	282608	282608	.	+	.	Name=rs10027325;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	282633	282633	.	+	.	Name=rs61792097;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	282668	282668	.	+	.	Name=rs116753444;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	282909	282909	.	+	.	Name=rs114784277;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	283037	283037	.	+	.	Name=rs78207271;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	283041	283041	.	+	.	Name=rs78342895;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	283076	283076	.	+	.	Name=rs113509731;variant_sequence=T/C;
+chr4-04	ensembl_variation	deletion	283084	283085	.	+	.	Name=rs3047214;variant_sequence=CT/-;
+chr4-04	ensembl_variation	SNP	283118	283118	.	+	.	Name=rs1986557;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	283353	283353	.	+	.	Name=rs13120331;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	283355	283355	.	+	.	Name=rs13120332;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	283395	283395	.	+	.	Name=rs13126833;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	283404	283404	.	+	.	Name=rs13120513;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	283538	283538	.	+	.	Name=rs13110510;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	283652	283652	.	+	.	Name=rs58644592;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	283694	283694	.	+	.	Name=rs74325388;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	283767	283767	.	+	.	Name=rs114055282;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	283883	283883	.	+	.	Name=rs13111233;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	284122	284122	.	+	.	Name=rs73791815;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	284201	284201	.	+	.	Name=rs73791816;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	284604	284604	.	+	.	Name=rs75349991;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	284653	284653	.	+	.	Name=rs73791817;variant_sequence=G/A;
+chr4-04	ensembl_variation	insertion	284857	284858	.	+	.	Name=rs34876350;variant_sequence=-/T;
+chr4-04	ensembl_variation	SNP	284884	284884	.	+	.	Name=rs6841950;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	284956	284956	.	+	.	Name=rs6855867;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	285053	285053	.	+	.	Name=rs77807218;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	285548	285548	.	+	.	Name=rs6832556;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	285893	285893	.	+	.	Name=rs73791818;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	285984	285984	.	+	.	Name=rs73791819;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	286344	286344	.	+	.	Name=rs57092574;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	286395	286395	.	+	.	Name=rs59106553;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	286600	286600	.	+	.	Name=rs56229296;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	286676	286676	.	+	.	Name=rs10428380;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	286677	286677	.	+	.	Name=rs61792098;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	286678	286678	.	+	.	Name=rs10428381;variant_sequence=A/C;
+chr4-04	ensembl_variation	deletion	286707	286707	.	+	.	Name=rs34118991;variant_sequence=A/-;
+chr4-04	ensembl_variation	SNP	286709	286709	.	+	.	Name=rs78205493;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	286712	286712	.	+	.	Name=rs61792099;variant_sequence=C/A;
+chr4-04	ensembl_variation	deletion	286768	286768	.	+	.	Name=rs111452322;variant_sequence=A/-;
+chr4-04	ensembl_variation	SNP	286823	286823	.	+	.	Name=rs13133253;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	286824	286824	.	+	.	Name=rs13149604;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	286970	286970	.	+	.	Name=rs28411935;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	287046	287046	.	+	.	Name=rs28784663;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	287141	287141	.	+	.	Name=rs59163505;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	287649	287649	.	+	.	Name=rs12506277;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	287664	287664	.	+	.	Name=rs12505343;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	287846	287846	.	+	.	Name=rs74996354;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	288012	288012	.	+	.	Name=rs79405074;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	288074	288074	.	+	.	Name=rs12501727;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	288284	288284	.	+	.	Name=rs28498753;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	288309	288309	.	+	.	Name=rs116752037;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	288697	288697	.	+	.	Name=rs55711923;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	288786	288786	.	+	.	Name=rs116635147;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	288787	288787	.	+	.	Name=rs118058299;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	288793	288793	.	+	.	Name=rs75532834;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	288799	288799	.	+	.	Name=rs75833793;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	288803	288803	.	+	.	Name=rs79718948;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	288809	288809	.	+	.	Name=rs78732596;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	288816	288816	.	+	.	Name=rs76212162;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	288829	288829	.	+	.	Name=rs76100058;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	288845	288845	.	+	.	Name=rs76162446;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	288853	288853	.	+	.	Name=rs76652139;variant_sequence=G/A;
+chr4-04	ensembl_variation	insertion	288868	288869	.	+	.	Name=rs59264418;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	288870	288870	.	+	.	Name=rs79212688;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	288875	288875	.	+	.	Name=rs79318474;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	288877	288877	.	+	.	Name=rs77194027;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	288893	288893	.	+	.	Name=rs76758124;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	288895	288895	.	+	.	Name=rs80331174;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	288899	288899	.	+	.	Name=rs74338602;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	288922	288922	.	+	.	Name=rs77462754;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	288925	288925	.	+	.	Name=rs78318185;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	288930	288930	.	+	.	Name=rs74906145;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	288932	288932	.	+	.	Name=rs74708111;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	288936	288936	.	+	.	Name=rs77287525;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	288968	288968	.	+	.	Name=rs77927389;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	288974	288974	.	+	.	Name=rs78043905;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	288976	288976	.	+	.	Name=rs79280619;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	288977	288977	.	+	.	Name=rs75233992;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	288981	288981	.	+	.	Name=rs74658891;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	288982	288982	.	+	.	Name=rs79723991;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	288996	288996	.	+	.	Name=rs77103782;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	289001	289001	.	+	.	Name=rs75039624;variant_sequence=T/A;
+chr4-04	ensembl_variation	insertion	289006	289007	.	+	.	Name=rs34182736;variant_sequence=-/C;
+chr4-04	ensembl_variation	insertion	289018	289019	.	+	.	Name=rs35350742;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	289034	289034	.	+	.	Name=rs79931657;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	289040	289040	.	+	.	Name=rs76221862;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	289046	289046	.	+	.	Name=rs111551553;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	289058	289058	.	+	.	Name=rs77014946;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	289068	289068	.	+	.	Name=rs112921104;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	289139	289139	.	+	.	Name=rs61792114;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	289213	289213	.	+	.	Name=rs13118678;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	289244	289244	.	+	.	Name=rs112253195;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	289272	289272	.	+	.	Name=rs112132883;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	289488	289488	.	+	.	Name=rs74686788;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	289490	289490	.	+	.	Name=rs76324531;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	289560	289560	.	+	.	Name=rs78205047;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	289649	289649	.	+	.	Name=rs115426268;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	289835	289835	.	+	.	Name=rs114239297;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	289877	289877	.	+	.	Name=rs62619793;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	290284	290284	.	+	.	Name=rs61792115;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	290322	290322	.	+	.	Name=rs77503766;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	290381	290381	.	+	.	Name=rs7654568;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	290641	290641	.	+	.	Name=rs78355952;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	290914	290914	.	+	.	Name=rs2352936;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	290925	290925	.	+	.	Name=rs113238980;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	291039	291039	.	+	.	Name=rs73217573;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	291053	291053	.	+	.	Name=rs77223069;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	291086	291086	.	+	.	Name=rs77380000;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	291328	291328	.	+	.	Name=rs35130395;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	291397	291397	.	+	.	Name=rs6846655;variant_sequence=A/T;
+chr4-04	ensembl_variation	deletion	291420	291421	.	+	.	Name=rs60725655;variant_sequence=AA/-;
+chr4-04	ensembl_variation	SNP	291421	291421	.	+	.	Name=rs76782413;variant_sequence=A/C;
+chr4-04	ensembl_variation	deletion	291421	291421	.	+	.	Name=rs57681246;variant_sequence=A/-;
+chr4-04	ensembl_variation	SNP	291662	291662	.	+	.	Name=rs2352935;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	291759	291759	.	+	.	Name=rs10003142;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	291950	291950	.	+	.	Name=rs9994510;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	291959	291959	.	+	.	Name=rs116809879;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	291969	291969	.	+	.	Name=rs75991748;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	292000	292000	.	+	.	Name=rs114428980;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	292001	292001	.	+	.	Name=rs10005733;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	292007	292007	.	+	.	Name=rs76099983;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	292067	292067	.	+	.	Name=rs76572209;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	292085	292085	.	+	.	Name=rs75658930;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	292104	292104	.	+	.	Name=rs75819259;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	292127	292127	.	+	.	Name=rs77790028;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	292189	292189	.	+	.	Name=rs113056980;variant_sequence=C/T;
+chr4-04	ensembl_variation	deletion	292203	292203	.	+	.	Name=rs113693845;variant_sequence=C/-;
+chr4-04	ensembl_variation	SNP	292235	292235	.	+	.	Name=rs78686789;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	292242	292242	.	+	.	Name=rs75639235;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	292310	292310	.	+	.	Name=rs74491581;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	292331	292331	.	+	.	Name=rs115789757;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	292369	292369	.	+	.	Name=rs11723803;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	292388	292388	.	+	.	Name=rs73791820;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	292486	292486	.	+	.	Name=rs73791821;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	292668	292668	.	+	.	Name=rs12503543;variant_sequence=C/T;
+chr4-04	ensembl_variation	insertion	292851	292852	.	+	.	Name=rs35105663;variant_sequence=-/G;
+chr4-04	ensembl_variation	SNP	292938	292938	.	+	.	Name=rs76541352;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	293171	293171	.	+	.	Name=rs114109973;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	293226	293226	.	+	.	Name=rs7655058;variant_sequence=A/G;
+chr4-04	ensembl_variation	deletion	293230	293231	.	+	.	Name=rs34906622;variant_sequence=AT/-;
+chr4-04	ensembl_variation	insertion	293251	293252	.	+	.	Name=rs35866088;variant_sequence=-/TA;
+chr4-04	ensembl_variation	insertion	293262	293263	.	+	.	Name=rs61392588;variant_sequence=-/TA;
+chr4-04	ensembl_variation	SNP	293271	293271	.	+	.	Name=rs112663915;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	293417	293417	.	+	.	Name=rs113125124;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	293735	293735	.	+	.	Name=rs113135022;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	293796	293796	.	+	.	Name=rs75049882;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	293865	293865	.	+	.	Name=rs117321689;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	293926	293926	.	+	.	Name=rs74282718;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	294017	294017	.	+	.	Name=rs6856961;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	294018	294018	.	+	.	Name=rs28787332;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	294113	294113	.	+	.	Name=rs4401407;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	294196	294196	.	+	.	Name=rs112043870;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	294263	294263	.	+	.	Name=rs13110091;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	294264	294264	.	+	.	Name=rs77249364;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	294286	294286	.	+	.	Name=rs114659363;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	294335	294335	.	+	.	Name=rs76028337;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	294349	294349	.	+	.	Name=rs77928010;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	294394	294394	.	+	.	Name=rs114696014;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	294397	294397	.	+	.	Name=rs116057011;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	294398	294398	.	+	.	Name=rs115476119;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	294410	294410	.	+	.	Name=rs116128125;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	294422	294422	.	+	.	Name=rs114643969;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	294424	294424	.	+	.	Name=rs115678115;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	294442	294442	.	+	.	Name=rs116157903;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	294444	294444	.	+	.	Name=rs114873384;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	294508	294508	.	+	.	Name=rs112870397;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	294529	294529	.	+	.	Name=rs114001772;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	295525	295526	.	+	.	Name=rs35984540;variant_sequence=-/G;
+chr4-04	ensembl_variation	SNP	295912	295912	.	+	.	Name=rs116435429;variant_sequence=T/C;
+chr4-04	ensembl_variation	insertion	296040	296041	.	+	.	Name=rs113397472;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	296170	296170	.	+	.	Name=rs115869462;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	296274	296274	.	+	.	Name=rs114674955;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	296447	296447	.	+	.	Name=rs112095322;variant_sequence=T/C;
+chr4-04	ensembl_variation	insertion	296943	296944	.	+	.	Name=rs35602170;variant_sequence=-/A;
+chr4-04	ensembl_variation	insertion	296956	296957	.	+	.	Name=rs35409469;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	297077	297077	.	+	.	Name=rs111677123;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	297525	297525	.	+	.	Name=rs12505835;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	297529	297529	.	+	.	Name=rs79627729;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	297547	297547	.	+	.	Name=rs12511388;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	297557	297557	.	+	.	Name=rs112408556;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	297686	297686	.	+	.	Name=rs78153223;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	297812	297813	.	+	.	Name=rs35894346;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	297893	297893	.	+	.	Name=rs74635655;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	297915	297915	.	+	.	Name=rs77149905;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	297932	297932	.	+	.	Name=rs2352927;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	297989	297989	.	+	.	Name=rs2352928;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	298080	298080	.	+	.	Name=rs4373108;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	298094	298094	.	+	.	Name=rs4417915;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	298338	298338	.	+	.	Name=rs11730801;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	298364	298364	.	+	.	Name=rs75390499;variant_sequence=C/T;
+chr4-04	ensembl_variation	insertion	298364	298365	.	+	.	Name=rs71166805;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	298373	298373	.	+	.	Name=rs7660634;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	298772	298772	.	+	.	Name=rs7661412;variant_sequence=G/A;
+chr4-04	ensembl_variation	deletion	298931	298931	.	+	.	Name=rs34512845;variant_sequence=T/-;
+chr4-04	ensembl_variation	SNP	299178	299178	.	+	.	Name=rs10019188;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	299259	299259	.	+	.	Name=rs6852858;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	299261	299261	.	+	.	Name=rs79657896;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	299271	299271	.	+	.	Name=rs116560731;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	299364	299364	.	+	.	Name=rs115951453;variant_sequence=T/C;
+chr4-04	ensembl_variation	deletion	299601	299603	.	+	.	Name=rs35887445;variant_sequence=AAT/-;
+chr4-04	ensembl_variation	SNP	299746	299746	.	+	.	Name=rs76135225;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	299778	299778	.	+	.	Name=rs73791822;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	299964	299964	.	+	.	Name=rs12512676;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	300235	300235	.	+	.	Name=rs114556916;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	300407	300407	.	+	.	Name=rs78640123;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	300442	300442	.	+	.	Name=rs79902242;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	300501	300501	.	+	.	Name=rs115429563;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	300647	300647	.	+	.	Name=rs10014959;variant_sequence=C/A;
+chr4-04	ensembl_variation	deletion	300773	300773	.	+	.	Name=rs34548090;variant_sequence=G/-;
+chr4-04	ensembl_variation	SNP	300795	300795	.	+	.	Name=rs10019453;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	300831	300831	.	+	.	Name=rs115080519;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	301077	301077	.	+	.	Name=rs61792116;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	301272	301272	.	+	.	Name=rs111874231;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	301574	301574	.	+	.	Name=rs115723820;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	301595	301595	.	+	.	Name=rs116821973;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	301720	301720	.	+	.	Name=rs111833408;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	301773	301773	.	+	.	Name=rs61792117;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	301774	301774	.	+	.	Name=rs1986866;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	302008	302008	.	+	.	Name=rs4129956;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	302136	302136	.	+	.	Name=rs28863627;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	302226	302226	.	+	.	Name=rs11729208;variant_sequence=G/A;
+chr4-04	ensembl_variation	deletion	302421	302421	.	+	.	Name=rs112492846;variant_sequence=T/-;
+chr4-04	ensembl_variation	insertion	302434	302435	.	+	.	Name=rs59966100;variant_sequence=-/T;
+chr4-04	ensembl_variation	SNP	302574	302574	.	+	.	Name=rs117549951;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	302664	302664	.	+	.	Name=rs113743932;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	302726	302726	.	+	.	Name=rs10012510;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	302791	302791	.	+	.	Name=rs116734627;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	302820	302820	.	+	.	Name=rs11732707;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	302849	302849	.	+	.	Name=rs114157292;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	302857	302857	.	+	.	Name=rs115119741;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	302934	302934	.	+	.	Name=rs6828802;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	303059	303059	.	+	.	Name=rs79005758;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	303303	303303	.	+	.	Name=rs116439516;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	303443	303443	.	+	.	Name=rs77848190;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	303493	303493	.	+	.	Name=rs114568657;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	303609	303609	.	+	.	Name=rs113641721;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	304003	304003	.	+	.	Name=rs118148467;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	304008	304008	.	+	.	Name=rs116850815;variant_sequence=G/C;
+chr4-04	ensembl_variation	deletion	304262	304264	.	+	.	Name=rs75640186;variant_sequence=CCA/-;
+chr4-04	ensembl_variation	SNP	304388	304388	.	+	.	Name=rs77782115;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	304649	304649	.	+	.	Name=rs7439780;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	305287	305287	.	+	.	Name=rs115791032;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	305291	305291	.	+	.	Name=rs10034550;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	305514	305515	.	+	.	Name=rs35820483;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	305932	305932	.	+	.	Name=rs113109546;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	306092	306092	.	+	.	Name=rs75589822;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	306196	306196	.	+	.	Name=rs112823067;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	306541	306541	.	+	.	Name=rs113283879;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	306661	306661	.	+	.	Name=rs113261074;variant_sequence=G/A;
+chr4-04	ensembl_variation	insertion	306732	306733	.	+	.	Name=rs55700348;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	306855	306855	.	+	.	Name=rs80171987;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	307094	307094	.	+	.	Name=rs6822366;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	307307	307307	.	+	.	Name=rs6828943;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	307369	307369	.	+	.	Name=rs116835805;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	307433	307433	.	+	.	Name=rs13434593;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	307622	307623	.	+	.	Name=rs34524149;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	307707	307707	.	+	.	Name=rs75026280;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	307710	307710	.	+	.	Name=rs79151868;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	307710	307711	.	+	.	Name=rs77347601;variant_sequence=-/AAG;
+chr4-04	ensembl_variation	insertion	307718	307719	.	+	.	Name=rs72598751;variant_sequence=-/AAG;
+chr4-04	ensembl_variation	insertion	307719	307720	.	+	.	Name=rs34024398;variant_sequence=-/AAG;
+chr4-04	ensembl_variation	SNP	307720	307720	.	+	.	Name=rs111794249;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	307721	307721	.	+	.	Name=rs111372533;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	307722	307722	.	+	.	Name=rs114503066;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	307723	307723	.	+	.	Name=rs61792118;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	307725	307725	.	+	.	Name=rs115416518;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	307805	307805	.	+	.	Name=rs80124885;variant_sequence=T/A;
+chr4-04	ensembl_variation	insertion	307854	307855	.	+	.	Name=rs34349366;variant_sequence=-/A;
+chr4-04	ensembl_variation	insertion	307985	307986	.	+	.	Name=rs58082865;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	308010	308010	.	+	.	Name=rs6848983;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	308068	308068	.	+	.	Name=rs76841021;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	308152	308152	.	+	.	Name=rs113058803;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	308154	308154	.	+	.	Name=rs78352775;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	308499	308499	.	+	.	Name=rs13434802;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	308549	308549	.	+	.	Name=rs78627900;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	308596	308596	.	-	.	Name=rs80261151;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	308962	308962	.	+	.	Name=rs78296438;variant_sequence=C/T;
+chr4-04	ensembl_variation	sequence_alteration	309253	309253	.	+	.	Name=rs7669892;variant_sequence=C/A/G;
+chr4-04	ensembl_variation	SNP	309258	309258	.	+	.	Name=rs111456805;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	309558	309558	.	+	.	Name=rs10005699;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	309686	309686	.	+	.	Name=rs7685662;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	309727	309727	.	+	.	Name=rs115057862;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	309800	309800	.	+	.	Name=rs61587838;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	309903	309903	.	+	.	Name=rs11248012;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	310033	310033	.	+	.	Name=rs79743945;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	310044	310044	.	+	.	Name=rs111938627;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	310283	310283	.	+	.	Name=rs4690251;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	310297	310297	.	+	.	Name=rs115915074;variant_sequence=G/A;
+chr4-04	ensembl_variation	insertion	310378	310379	.	+	.	Name=rs35995816;variant_sequence=-/C;
+chr4-04	ensembl_variation	deletion	310384	310384	.	+	.	Name=rs34668634;variant_sequence=G/-;
+chr4-04	ensembl_variation	SNP	310384	310384	.	+	.	Name=rs74921165;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	310488	310488	.	+	.	Name=rs73791826;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	310670	310670	.	+	.	Name=rs115756802;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	310691	310691	.	+	.	Name=rs10021364;variant_sequence=T/C;
+chr4-04	ensembl_variation	insertion	311030	311031	.	+	.	Name=rs34750316;variant_sequence=-/G;
+chr4-04	ensembl_variation	insertion	311038	311039	.	+	.	Name=rs35476693;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	311039	311039	.	+	.	Name=rs56011643;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	311425	311425	.	+	.	Name=rs11248013;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	311487	311487	.	+	.	Name=rs56275185;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	311801	311801	.	+	.	Name=rs113103124;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	311857	311857	.	+	.	Name=rs28372409;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	312061	312061	.	+	.	Name=rs114212536;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	312137	312137	.	+	.	Name=rs116298770;variant_sequence=T/G;
+chr4-04	ensembl_variation	insertion	312178	312179	.	+	.	Name=rs33943278;variant_sequence=-/T;
+chr4-04	ensembl_variation	insertion	312189	312190	.	+	.	Name=rs34195785;variant_sequence=-/T;
+chr4-04	ensembl_variation	insertion	312198	312199	.	+	.	Name=rs58342775;variant_sequence=-/T;
+chr4-04	ensembl_variation	SNP	312665	312665	.	+	.	Name=rs4374577;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	312920	312920	.	+	.	Name=rs76219687;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	312950	312950	.	+	.	Name=rs71602458;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	312953	312953	.	+	.	Name=rs115547082;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	313003	313003	.	+	.	Name=rs111938647;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	313947	313947	.	+	.	Name=rs17718976;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	314108	314108	.	+	.	Name=rs80303103;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	314208	314208	.	+	.	Name=rs77792255;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	314210	314210	.	+	.	Name=rs113601353;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	314362	314362	.	+	.	Name=rs114942228;variant_sequence=C/T;
+chr4-04	ensembl_variation	insertion	314439	314440	.	+	.	Name=rs35701209;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	314539	314539	.	+	.	Name=rs11731415;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	314541	314541	.	+	.	Name=rs111321884;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	314849	314849	.	+	.	Name=rs28441553;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	315279	315279	.	+	.	Name=rs73791827;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	315673	315673	.	+	.	Name=rs6847267;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	315805	315805	.	+	.	Name=rs113858749;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	315890	315890	.	+	.	Name=rs116611682;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	315911	315911	.	+	.	Name=rs79784952;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	316162	316162	.	+	.	Name=rs2001947;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	316377	316377	.	+	.	Name=rs113252687;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	316378	316378	.	+	.	Name=rs112644506;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	316379	316379	.	+	.	Name=rs111893160;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	316729	316729	.	+	.	Name=rs80298182;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	316923	316923	.	+	.	Name=rs78692002;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	316927	316927	.	+	.	Name=rs79600249;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	317690	317690	.	+	.	Name=rs113988940;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	317691	317691	.	+	.	Name=rs28752043;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	317726	317727	.	+	.	Name=rs35042441;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	317756	317756	.	+	.	Name=rs76913492;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	318058	318058	.	+	.	Name=rs79291724;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	318196	318196	.	+	.	Name=rs73217578;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	318269	318269	.	+	.	Name=rs115720072;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	318273	318273	.	+	.	Name=rs7661700;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	318274	318274	.	+	.	Name=rs6847881;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	318275	318275	.	+	.	Name=rs6818538;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	318359	318359	.	+	.	Name=rs61792119;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	318364	318364	.	+	.	Name=rs13110321;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	318532	318532	.	+	.	Name=rs113880905;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	318536	318536	.	+	.	Name=rs77098660;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	318549	318549	.	+	.	Name=rs13120968;variant_sequence=A/C;
+chr4-04	ensembl_variation	deletion	318549	318549	.	+	.	Name=rs59164415;variant_sequence=A/-;
+chr4-04	ensembl_variation	SNP	318550	318550	.	+	.	Name=rs13110777;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	318556	318556	.	+	.	Name=rs113670149;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	318760	318760	.	+	.	Name=rs57380154;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	319105	319105	.	+	.	Name=rs113386709;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	319121	319121	.	+	.	Name=rs113921175;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	319123	319123	.	+	.	Name=rs79056760;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	319125	319125	.	+	.	Name=rs77386963;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	319208	319208	.	+	.	Name=rs10033213;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	319553	319553	.	+	.	Name=rs73217579;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	319689	319689	.	+	.	Name=rs59071324;variant_sequence=A/G;
+chr4-04	ensembl_variation	deletion	319773	319773	.	+	.	Name=rs111444295;variant_sequence=T/-;
+chr4-04	ensembl_variation	SNP	319787	319787	.	+	.	Name=rs77253907;variant_sequence=T/G;
+chr4-04	ensembl_variation	deletion	319788	319788	.	+	.	Name=rs71166806;variant_sequence=T/-;
+chr4-04	ensembl_variation	SNP	320059	320059	.	+	.	Name=rs58102171;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	320411	320411	.	+	.	Name=rs115396080;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	320461	320461	.	+	.	Name=rs73217581;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	320464	320464	.	+	.	Name=rs73217582;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	320481	320481	.	+	.	Name=rs116547041;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	320595	320595	.	+	.	Name=rs115894987;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	320667	320667	.	+	.	Name=rs76112048;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	320696	320696	.	+	.	Name=rs79929361;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	320771	320771	.	+	.	Name=rs60533229;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	320897	320897	.	+	.	Name=rs60869410;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	320934	320934	.	+	.	Name=rs28849156;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	320997	320997	.	+	.	Name=rs113388729;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	321077	321077	.	+	.	Name=rs117139226;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	321415	321415	.	+	.	Name=rs73217583;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	321731	321731	.	+	.	Name=rs113847733;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	321825	321825	.	+	.	Name=rs118076268;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	321902	321902	.	+	.	Name=rs11946825;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	321929	321929	.	+	.	Name=rs73791830;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	321960	321960	.	+	.	Name=rs114639949;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	322026	322026	.	+	.	Name=rs11947752;variant_sequence=C/T;
+chr4-04	ensembl_variation	deletion	322051	322053	.	+	.	Name=rs79443965;variant_sequence=AGC/-;
+chr4-04	ensembl_variation	SNP	322080	322080	.	+	.	Name=rs61792120;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	322223	322223	.	+	.	Name=rs77034783;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	322352	322352	.	+	.	Name=rs114122353;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	322359	322359	.	+	.	Name=rs75081609;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	322515	322515	.	+	.	Name=rs75039103;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	322521	322521	.	+	.	Name=rs76235782;variant_sequence=A/T;
+chr4-04	ensembl_variation	sequence_alteration	322726	322726	.	+	.	Name=rs56182615;variant_sequence=C/T/G;
+chr4-04	ensembl_variation	SNP	322759	322759	.	+	.	Name=rs73217585;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	322787	322787	.	+	.	Name=rs57257197;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	322810	322810	.	+	.	Name=rs73064352;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	322814	322814	.	+	.	Name=rs115106197;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	322931	322931	.	+	.	Name=rs59194971;variant_sequence=C/T;
+chr4-04	ensembl_variation	insertion	322943	322944	.	+	.	Name=rs77039116;variant_sequence=-/TTGAGTCA;
+chr4-04	ensembl_variation	SNP	322946	322946	.	+	.	Name=rs114685629;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	322956	322956	.	+	.	Name=rs11929868;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	322990	322990	.	+	.	Name=rs73064354;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	323003	323003	.	+	.	Name=rs76467771;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	323327	323327	.	+	.	Name=rs59419008;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	323331	323331	.	+	.	Name=rs112256327;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	323335	323335	.	+	.	Name=rs59883453;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	323339	323339	.	+	.	Name=rs61520487;variant_sequence=C/T;
+chr4-04	ensembl_variation	deletion	323339	323340	.	+	.	Name=rs35906781;variant_sequence=CA/-;
+chr4-04	ensembl_variation	deletion	323339	323342	.	+	.	Name=rs60219376;variant_sequence=CATA/-;
+chr4-04	ensembl_variation	deletion	323357	323358	.	+	.	Name=rs35228659;variant_sequence=TA/-;
+chr4-04	ensembl_variation	insertion	323358	323359	.	+	.	Name=rs57380674;variant_sequence=-/TA;
+chr4-04	ensembl_variation	SNP	323404	323404	.	+	.	Name=rs73064356;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	323406	323406	.	+	.	Name=rs79704925;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	323463	323463	.	+	.	Name=rs112448993;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	323474	323474	.	+	.	Name=rs56678228;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	323586	323586	.	+	.	Name=rs114449464;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	323689	323689	.	+	.	Name=rs116533437;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	323746	323746	.	+	.	Name=rs61792122;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	323886	323886	.	+	.	Name=rs12640520;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	323953	323953	.	+	.	Name=rs114158562;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	323954	323954	.	+	.	Name=rs112695261;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	324069	324069	.	+	.	Name=rs75268814;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	324071	324071	.	+	.	Name=rs76585603;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	324242	324243	.	+	.	Name=rs58570103;variant_sequence=-/AAT;
+chr4-04	ensembl_variation	SNP	324335	324335	.	+	.	Name=rs116460974;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	324337	324337	.	+	.	Name=rs6839107;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	324435	324435	.	+	.	Name=rs6853199;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	324719	324719	.	+	.	Name=rs115372345;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	324747	324747	.	+	.	Name=rs116073575;variant_sequence=C/T;
+chr4-04	ensembl_variation	insertion	324766	324767	.	+	.	Name=rs35252169;variant_sequence=-/TTT;
+chr4-04	ensembl_variation	SNP	325036	325036	.	+	.	Name=rs73217587;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	325079	325079	.	+	.	Name=rs7654234;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	325097	325097	.	+	.	Name=rs114779353;variant_sequence=C/T;
+chr4-04	ensembl_variation	deletion	325097	325097	.	+	.	Name=rs34822758;variant_sequence=C/-;
+chr4-04	ensembl_variation	SNP	325127	325127	.	+	.	Name=rs75843656;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	325317	325317	.	+	.	Name=rs115520686;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	325406	325406	.	+	.	Name=rs112979686;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	325470	325470	.	+	.	Name=rs112880788;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	325883	325883	.	+	.	Name=rs61792123;variant_sequence=A/C;
+chr4-04	ensembl_variation	insertion	325944	325945	.	+	.	Name=rs34701336;variant_sequence=-/T;
+chr4-04	ensembl_variation	SNP	325980	325980	.	+	.	Name=rs7655981;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	325992	325992	.	+	.	Name=rs7689416;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	326146	326146	.	+	.	Name=rs13129786;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	326256	326256	.	+	.	Name=rs6846653;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	326475	326475	.	+	.	Name=rs6853198;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	326493	326493	.	+	.	Name=rs6837456;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	326508	326508	.	+	.	Name=rs6847222;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	326803	326803	.	+	.	Name=rs73217589;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	326806	326806	.	+	.	Name=rs13110772;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	326881	326881	.	+	.	Name=rs112983012;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	326904	326904	.	+	.	Name=rs112300904;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	326936	326936	.	+	.	Name=rs112465689;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	326944	326944	.	+	.	Name=rs111641016;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	327198	327198	.	+	.	Name=rs61792124;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	327227	327227	.	+	.	Name=rs115915710;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	327353	327353	.	+	.	Name=rs13137548;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	327380	327380	.	+	.	Name=rs61792125;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	327504	327504	.	+	.	Name=rs7655080;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	327659	327659	.	+	.	Name=rs11936209;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	327804	327804	.	+	.	Name=rs76457459;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	328019	328019	.	+	.	Name=rs76445368;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	328044	328044	.	+	.	Name=rs78730328;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	328421	328421	.	+	.	Name=rs58094550;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	328480	328480	.	+	.	Name=rs61431967;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	328492	328492	.	+	.	Name=rs58361877;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	328509	328509	.	+	.	Name=rs112625818;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	328511	328511	.	+	.	Name=rs58145935;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	328556	328556	.	+	.	Name=rs112101530;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	328697	328697	.	+	.	Name=rs58020250;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	328767	328767	.	+	.	Name=rs59806409;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	328812	328812	.	+	.	Name=rs114353359;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	328821	328821	.	+	.	Name=rs73792140;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	328906	328906	.	+	.	Name=rs61792130;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	329042	329042	.	+	.	Name=rs73217597;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	329062	329062	.	+	.	Name=rs116230769;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	329136	329136	.	+	.	Name=rs115432903;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	329432	329432	.	+	.	Name=rs73792142;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	329501	329501	.	+	.	Name=rs3762866;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	329686	329686	.	+	.	Name=rs3762867;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	329821	329821	.	+	.	Name=rs116873815;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	330114	330114	.	+	.	Name=rs73064371;variant_sequence=C/T;
+chr4-04	ensembl_variation	deletion	330181	330181	.	+	.	Name=rs111227600;variant_sequence=G/-;
+chr4-04	ensembl_variation	SNP	330505	330505	.	+	.	Name=rs13121052;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	330589	330589	.	+	.	Name=rs13131469;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	330684	330684	.	+	.	Name=rs73064374;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	330741	330741	.	+	.	Name=rs13121530;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	330797	330797	.	+	.	Name=rs73064378;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	330849	330849	.	+	.	Name=rs6599327;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	330895	330895	.	+	.	Name=rs116410854;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	330901	330901	.	+	.	Name=rs115618128;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	330950	330950	.	+	.	Name=rs77640350;variant_sequence=T/A;
+chr4-04	ensembl_variation	deletion	331091	331091	.	+	.	Name=rs35724339;variant_sequence=A/-;
+chr4-04	ensembl_variation	SNP	331136	331136	.	+	.	Name=rs77220685;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	331146	331146	.	+	.	Name=rs115073815;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	331229	331229	.	+	.	Name=rs115913393;variant_sequence=G/C;
+chr4-04	ensembl_variation	deletion	331229	331230	.	+	.	Name=rs3834806;variant_sequence=GT/-;
+chr4-04	ensembl_variation	SNP	331349	331349	.	+	.	Name=rs114334322;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	331372	331372	.	+	.	Name=rs7677824;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	331658	331658	.	+	.	Name=rs3749520;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	331666	331666	.	+	.	Name=rs3749521;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	331675	331675	.	+	.	Name=rs3749522;variant_sequence=C/A;
+chr4-04	ensembl_variation	insertion	331693	331694	.	+	.	Name=rs5855672;variant_sequence=-/C;
+chr4-04	ensembl_variation	insertion	331694	331695	.	+	.	Name=rs33917951;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	331696	331696	.	+	.	Name=rs115407293;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	331740	331740	.	+	.	Name=rs3749523;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	331764	331764	.	+	.	Name=rs73064385;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	331866	331866	.	+	.	Name=rs4261927;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	331896	331896	.	+	.	Name=rs4261928;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	331897	331897	.	+	.	Name=rs75145605;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	331907	331907	.	+	.	Name=rs115677187;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	332063	332063	.	+	.	Name=rs116780403;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	332087	332087	.	+	.	Name=rs114871510;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	332128	332128	.	+	.	Name=rs116640416;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	332138	332138	.	+	.	Name=rs114002176;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	332449	332449	.	+	.	Name=rs115050279;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	332542	332542	.	+	.	Name=rs78894128;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	332627	332627	.	+	.	Name=rs115709135;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	332671	332671	.	+	.	Name=rs73064387;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	332781	332781	.	+	.	Name=rs116470367;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	333030	333030	.	+	.	Name=rs115795345;variant_sequence=G/A;
+chr4-04	ensembl_variation	insertion	333288	333289	.	+	.	Name=rs72598752;variant_sequence=-/G;
+chr4-04	ensembl_variation	insertion	333289	333290	.	+	.	Name=rs35185356;variant_sequence=-/G;
+chr4-04	ensembl_variation	SNP	333310	333310	.	+	.	Name=rs11729526;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	333322	333322	.	+	.	Name=rs58500057;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	333384	333384	.	+	.	Name=rs11729532;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	333526	333526	.	+	.	Name=rs73064394;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	333531	333531	.	+	.	Name=rs79051926;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	333596	333596	.	+	.	Name=rs11727981;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	333610	333610	.	+	.	Name=rs77176200;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	333976	333976	.	+	.	Name=rs114724588;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	334213	334213	.	+	.	Name=rs61580954;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	334254	334254	.	+	.	Name=rs73064400;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	334293	334293	.	+	.	Name=rs79034091;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	334304	334304	.	+	.	Name=rs77849020;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	334418	334418	.	+	.	Name=rs115464827;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	334428	334428	.	+	.	Name=rs116126290;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	334497	334497	.	+	.	Name=rs114656131;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	334591	334591	.	+	.	Name=rs78640996;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	334600	334600	.	+	.	Name=rs75091307;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	334613	334613	.	+	.	Name=rs75234965;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	334617	334617	.	+	.	Name=rs79083622;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	334621	334621	.	+	.	Name=rs78396383;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	334647	334647	.	+	.	Name=rs78538668;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	334664	334664	.	+	.	Name=rs79582683;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	334671	334671	.	+	.	Name=rs75793340;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	334696	334696	.	+	.	Name=rs76910478;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	334710	334710	.	+	.	Name=rs79841389;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	334754	334754	.	+	.	Name=rs79300438;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	334764	334764	.	+	.	Name=rs77132186;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	334771	334771	.	+	.	Name=rs80049316;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	334777	334777	.	+	.	Name=rs76813187;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	334797	334797	.	+	.	Name=rs77321155;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	334808	334808	.	+	.	Name=rs77442745;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	334824	334824	.	+	.	Name=rs77506680;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	334835	334835	.	+	.	Name=rs74897519;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	334856	334856	.	+	.	Name=rs74597574;variant_sequence=T/A;
+chr4-04	ensembl_variation	deletion	334862	334862	.	+	.	Name=rs111597104;variant_sequence=T/-;
+chr4-04	ensembl_variation	deletion	334871	334871	.	+	.	Name=rs34755542;variant_sequence=T/-;
+chr4-04	ensembl_variation	deletion	334875	334875	.	+	.	Name=rs56926897;variant_sequence=T/-;
+chr4-04	ensembl_variation	SNP	334876	334876	.	+	.	Name=rs78157142;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	335283	335283	.	+	.	Name=rs115605875;variant_sequence=A/T;
+chr4-04	ensembl_variation	insertion	335301	335302	.	+	.	Name=rs36060329;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	335394	335394	.	+	.	Name=rs116161766;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	335434	335434	.	+	.	Name=rs78313348;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	335438	335438	.	+	.	Name=rs114851193;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	335452	335452	.	+	.	Name=rs116644845;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	335613	335613	.	+	.	Name=rs79021988;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	335932	335932	.	+	.	Name=rs77188978;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	336301	336301	.	+	.	Name=rs116439268;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	336463	336463	.	+	.	Name=rs112100920;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	336494	336494	.	+	.	Name=rs55901060;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	336615	336615	.	-	.	Name=rs14938;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	336658	336658	.	-	.	Name=rs11552842;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	336671	336671	.	-	.	Name=rs11552833;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	336689	336689	.	-	.	Name=rs11552836;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	336704	336704	.	-	.	Name=rs11543161;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	336827	336827	.	+	.	Name=rs77959891;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	337019	337019	.	+	.	Name=rs114171904;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	337084	337084	.	+	.	Name=rs114752580;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	337185	337185	.	+	.	Name=rs117558645;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	337271	337271	.	+	.	Name=rs3762868;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	337376	337376	.	-	.	Name=rs75291536;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	337376	337376	.	+	.	Name=rs61792144;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	337474	337474	.	+	.	Name=rs2352932;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	337501	337501	.	+	.	Name=rs59095927;variant_sequence=G/A;
+chr4-04	ensembl_variation	insertion	337513	337514	.	+	.	Name=rs35268031;variant_sequence=-/A;
+chr4-04	ensembl_variation	insertion	337537	337538	.	+	.	Name=rs71166807;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	337538	337538	.	+	.	Name=rs115220023;variant_sequence=G/A;
+chr4-04	ensembl_variation	deletion	337567	337567	.	+	.	Name=rs60315529;variant_sequence=T/-;
+chr4-04	ensembl_variation	SNP	337613	337613	.	+	.	Name=rs4571280;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	337709	337709	.	+	.	Name=rs75808368;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	337769	337769	.	+	.	Name=rs79176412;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	337794	337794	.	+	.	Name=rs113901747;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	337845	337845	.	+	.	Name=rs116240104;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	337921	337921	.	+	.	Name=rs115461380;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	337926	337926	.	+	.	Name=rs116746268;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	338031	338031	.	+	.	Name=rs76818296;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	338036	338036	.	+	.	Name=rs74606788;variant_sequence=A/T;
+chr4-04	ensembl_variation	deletion	338114	338115	.	+	.	Name=rs3833613;variant_sequence=AA/-;
+chr4-04	ensembl_variation	SNP	338115	338115	.	+	.	Name=rs76078467;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	338129	338129	.	+	.	Name=rs75245145;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	338156	338156	.	+	.	Name=rs79227679;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	338171	338171	.	+	.	Name=rs111369004;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	338186	338186	.	+	.	Name=rs78725891;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	338198	338198	.	+	.	Name=rs78575109;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	338200	338200	.	+	.	Name=rs79869819;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	338202	338202	.	+	.	Name=rs76167181;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	338203	338203	.	+	.	Name=rs75942616;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	338205	338205	.	+	.	Name=rs80052234;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	338213	338213	.	+	.	Name=rs61733103;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	338246	338246	.	+	.	Name=rs79348421;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	338252	338252	.	+	.	Name=rs76962477;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	338258	338258	.	+	.	Name=rs80241916;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	338260	338260	.	+	.	Name=rs76915575;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	338266	338266	.	+	.	Name=rs74323716;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	338289	338289	.	+	.	Name=rs77578216;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	338296	338296	.	+	.	Name=rs77544910;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	338306	338306	.	+	.	Name=rs74908199;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	338308	338308	.	+	.	Name=rs74691923;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	338310	338310	.	+	.	Name=rs75092352;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	338311	338311	.	+	.	Name=rs75382858;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	338313	338313	.	+	.	Name=rs78000808;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	338322	338322	.	+	.	Name=rs78396627;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	338334	338334	.	+	.	Name=rs75796306;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	338337	338337	.	+	.	Name=rs75299168;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	338355	338355	.	+	.	Name=rs79742766;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	338359	338359	.	+	.	Name=rs76521508;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	338364	338364	.	+	.	Name=rs113399189;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	338851	338851	.	+	.	Name=rs34483255;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	338884	338884	.	+	.	Name=rs61792145;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	339385	339385	.	+	.	Name=rs77018968;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	339386	339386	.	+	.	Name=rs80197975;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	339388	339388	.	+	.	Name=rs74471344;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	339557	339557	.	+	.	Name=rs73792145;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	339582	339582	.	+	.	Name=rs73066313;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	339652	339652	.	+	.	Name=rs115731956;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	340019	340019	.	+	.	Name=rs12646983;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	340020	340020	.	+	.	Name=rs12646984;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	340190	340190	.	+	.	Name=rs12647018;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	340684	340684	.	+	.	Name=rs115802431;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	340685	340685	.	+	.	Name=rs116208259;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	340889	340889	.	+	.	Name=rs68126535;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	341215	341215	.	+	.	Name=rs112275142;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	341270	341270	.	+	.	Name=rs61792146;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	341319	341319	.	+	.	Name=rs61792147;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	341361	341361	.	+	.	Name=rs112609182;variant_sequence=C/G;
+chr4-04	ensembl_variation	insertion	341530	341531	.	+	.	Name=rs113198024;variant_sequence=-/A;
+chr4-04	ensembl_variation	insertion	341542	341543	.	+	.	Name=rs57927172;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	341654	341654	.	+	.	Name=rs114945348;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	341656	341656	.	+	.	Name=rs115561965;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	341673	341673	.	+	.	Name=rs117325980;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	341802	341802	.	+	.	Name=rs113620767;variant_sequence=T/G;
+chr4-04	ensembl_variation	deletion	341814	341814	.	+	.	Name=rs35997079;variant_sequence=T/-;
+chr4-04	ensembl_variation	SNP	341959	341959	.	+	.	Name=rs114424096;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	342039	342039	.	+	.	Name=rs76566288;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	342113	342113	.	+	.	Name=rs73217600;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	342377	342377	.	+	.	Name=rs117405395;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	342426	342426	.	+	.	Name=rs79662803;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	342994	342994	.	+	.	Name=rs73066317;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	343020	343021	.	+	.	Name=rs34322430;variant_sequence=-/T;
+chr4-04	ensembl_variation	SNP	343192	343192	.	+	.	Name=rs116803324;variant_sequence=C/A;
+chr4-04	ensembl_variation	insertion	343293	343294	.	+	.	Name=rs34073128;variant_sequence=-/T;
+chr4-04	ensembl_variation	SNP	246640	246640	.	+	.	Name=rs116068146;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	343527	343527	.	+	.	Name=rs76849836;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	246656	246656	.	+	.	Name=rs73793586;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	343528	343528	.	+	.	Name=rs75337215;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	246664	246664	.	+	.	Name=rs116435106;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	343533	343533	.	+	.	Name=rs74666941;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	246700	246700	.	+	.	Name=rs61795003;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	343543	343543	.	+	.	Name=rs60750098;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	247207	247207	.	+	.	Name=rs74848272;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	343652	343652	.	+	.	Name=rs115888797;variant_sequence=G/C;
+chr4-04	ensembl_variation	deletion	247255	247256	.	+	.	Name=rs34738994;variant_sequence=AT/-;
+chr4-04	ensembl_variation	SNP	343734	343734	.	+	.	Name=rs116269826;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	247818	247818	.	+	.	Name=rs74643185;variant_sequence=C/T;
+chr4-04	ensembl_variation	insertion	343795	343796	.	+	.	Name=rs3037605;variant_sequence=-/TGCT;
+chr4-04	ensembl_variation	SNP	247825	247825	.	+	.	Name=rs10028482;variant_sequence=G/A;
+chr4-04	ensembl_variation	insertion	343796	343797	.	+	.	Name=rs59301713;variant_sequence=-/GCTT;
+chr4-04	ensembl_variation	insertion	247876	247877	.	+	.	Name=rs35065588;variant_sequence=-/G;
+chr4-04	ensembl_variation	SNP	344138	344138	.	+	.	Name=rs73217601;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	248055	248055	.	+	.	Name=rs9994989;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	344144	344144	.	+	.	Name=rs115196964;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	248174	248174	.	+	.	Name=rs34951088;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	344236	344236	.	+	.	Name=rs61450142;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	248244	248244	.	+	.	Name=rs35862389;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	344405	344405	.	+	.	Name=rs61481977;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	248328	248328	.	+	.	Name=rs34505342;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	344519	344519	.	+	.	Name=rs7663963;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	248417	248417	.	+	.	Name=rs116639095;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	344606	344606	.	+	.	Name=rs113552584;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	248709	248709	.	+	.	Name=rs6599322;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	344685	344685	.	+	.	Name=rs7697421;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	248744	248744	.	+	.	Name=rs76252400;variant_sequence=A/G;
+chr4-04	ensembl_variation	deletion	344719	344719	.	+	.	Name=rs35754231;variant_sequence=T/-;
+chr4-04	ensembl_variation	SNP	248848	248848	.	+	.	Name=rs10002898;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	344861	344861	.	+	.	Name=rs116839538;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	248893	248893	.	+	.	Name=rs79724879;variant_sequence=G/A;
+chr4-04	ensembl_variation	insertion	344874	344875	.	+	.	Name=rs34984368;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	249303	249303	.	+	.	Name=rs61795004;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	344995	344995	.	+	.	Name=rs73066320;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	249430	249430	.	+	.	Name=rs6857106;variant_sequence=G/T;
+chr4-04	ensembl_variation	deletion	345039	345040	.	+	.	Name=rs78231244;variant_sequence=TT/-;
+chr4-04	ensembl_variation	SNP	249537	249537	.	+	.	Name=rs73793588;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	345252	345252	.	+	.	Name=rs56905415;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	249567	249567	.	+	.	Name=rs73793589;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	345475	345475	.	+	.	Name=rs57731643;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	249661	249661	.	+	.	Name=rs77805970;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	345914	345914	.	+	.	Name=rs4371565;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	250036	250036	.	+	.	Name=rs56985696;variant_sequence=T/C;
+chr4-04	ensembl_variation	insertion	346032	346033	.	+	.	Name=rs34797742;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	250405	250405	.	+	.	Name=rs77219899;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	346689	346689	.	+	.	Name=rs114511550;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	250432	250432	.	+	.	Name=rs116924127;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	346699	346699	.	+	.	Name=rs77114946;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	250434	250434	.	+	.	Name=rs111351468;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	346726	346726	.	+	.	Name=rs115410125;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	250450	250450	.	+	.	Name=rs73793590;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	346758	346758	.	+	.	Name=rs6821220;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	250454	250454	.	-	.	Name=rs76503349;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	346898	346898	.	+	.	Name=rs2352945;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	250522	250522	.	+	.	Name=rs74984113;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	347038	347038	.	+	.	Name=rs73066321;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	250544	250544	.	+	.	Name=rs73793591;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	347120	347120	.	+	.	Name=rs7669794;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	250595	250595	.	+	.	Name=rs113846040;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	347125	347125	.	+	.	Name=rs7682942;variant_sequence=G/C;
+chr4-04	ensembl_variation	insertion	250597	250598	.	+	.	Name=rs34607998;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	347185	347185	.	+	.	Name=rs116749675;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	250641	250641	.	+	.	Name=rs79167157;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	347194	347194	.	+	.	Name=rs17329078;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	250645	250645	.	+	.	Name=rs75984075;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	347203	347203	.	+	.	Name=rs11248014;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	250669	250669	.	+	.	Name=rs112544218;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	347219	347219	.	+	.	Name=rs9715622;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	251416	251416	.	+	.	Name=rs73793592;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	347255	347255	.	+	.	Name=rs6820996;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	251624	251624	.	+	.	Name=rs78148790;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	347262	347262	.	+	.	Name=rs35032247;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	251893	251893	.	+	.	Name=rs73213590;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	347411	347411	.	+	.	Name=rs61792150;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	251896	251896	.	+	.	Name=rs73793593;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	347470	347470	.	+	.	Name=rs7439657;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	252048	252048	.	+	.	Name=rs77078697;variant_sequence=T/C;
+chr4-04	ensembl_variation	insertion	347547	347548	.	+	.	Name=rs71654581;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	252137	252137	.	+	.	Name=rs73213592;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	347714	347714	.	+	.	Name=rs115249188;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	252480	252480	.	+	.	Name=rs28712710;variant_sequence=G/C;
+chr4-04	ensembl_variation	insertion	347747	347748	.	+	.	Name=rs34239724;variant_sequence=-/T;
+chr4-04	ensembl_variation	SNP	252501	252501	.	+	.	Name=rs56147344;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	347918	347918	.	+	.	Name=rs116584319;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	252804	252804	.	+	.	Name=rs12510827;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	348062	348062	.	+	.	Name=rs115321965;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	252836	252836	.	+	.	Name=rs79780296;variant_sequence=A/G;
+chr4-04	ensembl_variation	deletion	348062	348062	.	+	.	Name=rs112852083;variant_sequence=C/-;
+chr4-04	ensembl_variation	SNP	252871	252871	.	+	.	Name=rs12498545;variant_sequence=C/T;
+chr4-04	ensembl_variation	deletion	348066	348066	.	+	.	Name=rs72598753;variant_sequence=C/-;
+chr4-04	ensembl_variation	SNP	252966	252966	.	+	.	Name=rs112158821;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	348096	348096	.	+	.	Name=rs114067128;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	252998	252998	.	+	.	Name=rs77983317;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	348167	348167	.	+	.	Name=rs77495498;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	253008	253008	.	+	.	Name=rs114218307;variant_sequence=G/A;
+chr4-04	ensembl_variation	insertion	348235	348236	.	+	.	Name=rs34379509;variant_sequence=-/G;
+chr4-04	ensembl_variation	SNP	253328	253328	.	+	.	Name=rs111786358;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	348524	348524	.	+	.	Name=rs7690318;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	253491	253491	.	-	.	Name=rs78084122;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	348580	348580	.	+	.	Name=rs73066324;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	253525	253525	.	+	.	Name=rs76336650;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	348946	348946	.	+	.	Name=rs7672205;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	253601	253601	.	+	.	Name=rs61795006;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	349596	349596	.	+	.	Name=rs61792151;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	253766	253766	.	+	.	Name=rs115681450;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	349716	349716	.	+	.	Name=rs73066326;variant_sequence=C/T;
+chr4-04	ensembl_variation	deletion	253821	253824	.	+	.	Name=rs113305604;variant_sequence=TCTT/-;
+chr4-04	ensembl_variation	SNP	349728	349728	.	+	.	Name=rs73066328;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	253847	253847	.	+	.	Name=rs112505624;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	349784	349784	.	+	.	Name=rs7697144;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	253881	253881	.	+	.	Name=rs4518181;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	349847	349847	.	+	.	Name=rs73219204;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	254213	254213	.	+	.	Name=rs117855818;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	349862	349862	.	+	.	Name=rs61140156;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	254419	254419	.	+	.	Name=rs114233186;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	349867	349867	.	+	.	Name=rs59346249;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	254569	254569	.	+	.	Name=rs73064335;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	349874	349874	.	+	.	Name=rs60690562;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	254583	254583	.	+	.	Name=rs73793595;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	349882	349882	.	+	.	Name=rs61237401;variant_sequence=C/T;
+chr4-04	ensembl_variation	insertion	254685	254686	.	+	.	Name=rs112652832;variant_sequence=-/C;
+chr4-04	ensembl_variation	SNP	349889	349889	.	+	.	Name=rs60202579;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	254746	254746	.	+	.	Name=rs114645989;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	349900	349900	.	+	.	Name=rs58672922;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	254807	254807	.	+	.	Name=rs74482758;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	349904	349904	.	+	.	Name=rs58161640;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	254816	254816	.	+	.	Name=rs74852956;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	349912	349912	.	+	.	Name=rs60368971;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	255073	255073	.	+	.	Name=rs78456397;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	349913	349913	.	+	.	Name=rs58597776;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	255102	255102	.	+	.	Name=rs57435500;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	349914	349914	.	+	.	Name=rs13149871;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	255263	255263	.	+	.	Name=rs60229242;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	349923	349923	.	+	.	Name=rs13149881;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	255264	255264	.	+	.	Name=rs61795007;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	349935	349935	.	+	.	Name=rs59747454;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	255429	255429	.	+	.	Name=rs77982137;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	349942	349942	.	+	.	Name=rs60944334;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	255594	255594	.	+	.	Name=rs73793596;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	349968	349968	.	+	.	Name=rs60057712;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	255758	255758	.	+	.	Name=rs114400649;variant_sequence=C/A;
+chr4-04	ensembl_variation	insertion	349977	349978	.	+	.	Name=rs59361684;variant_sequence=-/TACT;
+chr4-04	ensembl_variation	SNP	255905	255905	.	+	.	Name=rs73793597;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	349982	349982	.	+	.	Name=rs57550020;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	255966	255966	.	+	.	Name=rs111626473;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	349984	349984	.	+	.	Name=rs61671519;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	255994	255994	.	+	.	Name=rs112631443;variant_sequence=G/A;
+chr4-04	ensembl_variation	deletion	350020	350020	.	+	.	Name=rs111839333;variant_sequence=A/-;
+chr4-04	ensembl_variation	SNP	256429	256429	.	+	.	Name=rs114007248;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	350044	350044	.	+	.	Name=rs116268551;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	256450	256450	.	+	.	Name=rs61792060;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	350083	350083	.	+	.	Name=rs115799425;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	256598	256598	.	+	.	Name=rs117573143;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	350525	350525	.	+	.	Name=rs78870565;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	256698	256698	.	+	.	Name=rs111929404;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	350579	350579	.	+	.	Name=rs6825544;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	256851	256851	.	+	.	Name=rs73213593;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	350795	350795	.	+	.	Name=rs12647659;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	256975	256975	.	+	.	Name=rs73793599;variant_sequence=C/T;
+chr4-04	ensembl_variation	deletion	350928	350928	.	+	.	Name=rs36000451;variant_sequence=T/-;
+chr4-04	ensembl_variation	SNP	256979	256979	.	+	.	Name=rs11728100;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	351044	351044	.	+	.	Name=rs10212688;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	257048	257048	.	+	.	Name=rs115632218;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	351209	351209	.	+	.	Name=rs74463326;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	257154	257154	.	+	.	Name=rs115337428;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	351489	351489	.	+	.	Name=rs77592170;variant_sequence=C/T;
+chr4-04	ensembl_variation	deletion	257246	257246	.	+	.	Name=rs112220317;variant_sequence=A/-;
+chr4-04	ensembl_variation	SNP	351651	351651	.	+	.	Name=rs112845648;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	257249	257249	.	+	.	Name=rs28517538;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	351661	351661	.	+	.	Name=rs11721823;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	257258	257258	.	+	.	Name=rs74653446;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	351729	351729	.	+	.	Name=rs113082510;variant_sequence=C/T;
+chr4-04	ensembl_variation	insertion	257258	257259	.	+	.	Name=rs35178489;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	351741	351741	.	+	.	Name=rs6819237;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	257259	257259	.	+	.	Name=rs75047593;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	351783	351783	.	+	.	Name=rs78734670;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	257318	257318	.	+	.	Name=rs73793600;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	351853	351853	.	+	.	Name=rs115361560;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	257365	257365	.	+	.	Name=rs112776858;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	351970	351970	.	+	.	Name=rs12499633;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	257384	257384	.	+	.	Name=rs113402102;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	351972	351972	.	+	.	Name=rs115597071;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	257406	257406	.	+	.	Name=rs75759167;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	352394	352394	.	+	.	Name=rs113243205;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	257500	257500	.	+	.	Name=rs77113404;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	352661	352661	.	+	.	Name=rs55718920;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	257553	257553	.	+	.	Name=rs117100792;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	352768	352768	.	+	.	Name=rs74559842;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	257555	257555	.	+	.	Name=rs118023272;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	352890	352890	.	+	.	Name=rs56171831;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	257729	257729	.	+	.	Name=rs75581629;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	352937	352937	.	+	.	Name=rs74437406;variant_sequence=G/A;
+chr4-04	ensembl_variation	deletion	257941	257941	.	+	.	Name=rs35957357;variant_sequence=T/-;
+chr4-04	ensembl_variation	SNP	352955	352955	.	+	.	Name=rs7682616;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	258032	258032	.	+	.	Name=rs79914894;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	352968	352968	.	+	.	Name=rs56048545;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	258294	258294	.	+	.	Name=rs77234191;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	353088	353088	.	+	.	Name=rs78449876;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	258471	258471	.	+	.	Name=rs28565113;variant_sequence=T/A;
+chr4-04	ensembl_variation	insertion	353097	353098	.	+	.	Name=rs59855402;variant_sequence=-/A;
+chr4-04	ensembl_variation	SNP	258512	258512	.	+	.	Name=rs7657860;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	353183	353183	.	+	.	Name=rs75612802;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	258609	258609	.	+	.	Name=rs115761664;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	353271	353271	.	+	.	Name=rs77936062;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	258627	258627	.	+	.	Name=rs7658064;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	353898	353898	.	+	.	Name=rs116976302;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	258692	258692	.	+	.	Name=rs113702774;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	353902	353902	.	+	.	Name=rs60054816;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	258788	258788	.	+	.	Name=rs73213594;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	354013	354013	.	+	.	Name=rs75739380;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	258920	258920	.	+	.	Name=rs78301707;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	354044	354044	.	+	.	Name=rs114751295;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	259525	259525	.	+	.	Name=rs79043901;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	354051	354051	.	+	.	Name=rs17719492;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	259638	259638	.	+	.	Name=rs73793601;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	354238	354238	.	+	.	Name=rs7675459;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	259679	259679	.	+	.	Name=rs76635023;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	354256	354256	.	+	.	Name=rs76886738;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	260121	260121	.	+	.	Name=rs10006781;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	354270	354270	.	+	.	Name=rs115249012;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	260165	260165	.	+	.	Name=rs28703806;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	354274	354274	.	+	.	Name=rs116671819;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	260166	260166	.	+	.	Name=rs28415975;variant_sequence=A/T;
+chr4-04	ensembl_variation	SNP	354589	354589	.	+	.	Name=rs73219209;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	260173	260173	.	+	.	Name=rs28429717;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	354613	354613	.	+	.	Name=rs113178711;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	260176	260176	.	+	.	Name=rs111766204;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	354756	354756	.	+	.	Name=rs76524747;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	260415	260415	.	+	.	Name=rs114500782;variant_sequence=T/G;
+chr4-04	ensembl_variation	SNP	354878	354878	.	+	.	Name=rs61792154;variant_sequence=A/G;
+chr4-04	ensembl_variation	deletion	260415	260417	.	+	.	Name=rs74271677;variant_sequence=TTT/-;
+chr4-04	ensembl_variation	SNP	354955	354955	.	+	.	Name=rs79402412;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	260417	260417	.	+	.	Name=rs77926823;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	354969	354969	.	+	.	Name=rs115388974;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	260441	260441	.	+	.	Name=rs73793602;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	355103	355103	.	+	.	Name=rs79922358;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	260587	260587	.	+	.	Name=rs17164747;variant_sequence=G/T;
+chr4-04	ensembl_variation	insertion	355103	355104	.	+	.	Name=rs111431602;variant_sequence=-/TCTT;
+chr4-04	ensembl_variation	SNP	260810	260810	.	+	.	Name=rs115074177;variant_sequence=G/C;
+chr4-04	ensembl_variation	insertion	355108	355109	.	+	.	Name=rs72490219;variant_sequence=-/CTTT;
+chr4-04	ensembl_variation	SNP	260950	260950	.	+	.	Name=rs60056532;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	355109	355109	.	+	.	Name=rs77399824;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	261095	261095	.	+	.	Name=rs79716987;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	355176	355176	.	+	.	Name=rs75801112;variant_sequence=G/T;
+chr4-04	ensembl_variation	deletion	261104	261106	.	+	.	Name=rs61296103;variant_sequence=GGG/-;
+chr4-04	ensembl_variation	SNP	355177	355177	.	+	.	Name=rs76633695;variant_sequence=T/G;
+chr4-04	ensembl_variation	insertion	261106	261107	.	+	.	Name=rs71164502;variant_sequence=-/GG;
+chr4-04	ensembl_variation	SNP	356081	356081	.	+	.	Name=rs80248324;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	261156	261156	.	+	.	Name=rs7688540;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	357570	357571	.	+	.	Name=rs59300063;variant_sequence=-/G;
+chr4-04	ensembl_variation	SNP	261274	261274	.	+	.	Name=rs76539830;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	357657	357657	.	+	.	Name=rs61792156;variant_sequence=A/T;
+chr4-04	ensembl_variation	insertion	261381	261382	.	+	.	Name=rs34809141;variant_sequence=-/CA;
+chr4-04	ensembl_variation	SNP	357669	357669	.	+	.	Name=rs11937955;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	261601	261601	.	+	.	Name=rs75442577;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	357785	357785	.	+	.	Name=rs2624729;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	262062	262062	.	+	.	Name=rs10010286;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	357793	357793	.	+	.	Name=rs76047999;variant_sequence=T/C;
+chr4-04	ensembl_variation	insertion	262144	262145	.	+	.	Name=rs112945850;variant_sequence=-/TC;
+chr4-04	ensembl_variation	SNP	357793	357793	.	-	.	Name=rs113200034;variant_sequence=A/G;
+chr4-04	ensembl_variation	insertion	262145	262146	.	+	.	Name=rs59995882;variant_sequence=-/CT;
+chr4-04	ensembl_variation	SNP	357806	357806	.	+	.	Name=rs62171238;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	262152	262152	.	+	.	Name=rs75470053;variant_sequence=T/A;
+chr4-04	ensembl_variation	SNP	357817	357817	.	+	.	Name=rs74475438;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	262153	262153	.	+	.	Name=rs77148043;variant_sequence=C/A;
+chr4-04	ensembl_variation	SNP	357818	357818	.	+	.	Name=rs2784390;variant_sequence=C/T;
+chr4-04	ensembl_variation	insertion	262400	262401	.	+	.	Name=rs35751601;variant_sequence=-/T;
+chr4-04	ensembl_variation	SNP	357821	357821	.	+	.	Name=rs55769528;variant_sequence=G/A;
+chr4-04	ensembl_variation	insertion	262448	262449	.	+	.	Name=rs34190666;variant_sequence=-/G;
+chr4-04	ensembl_variation	SNP	357823	357823	.	+	.	Name=rs74482379;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	262572	262572	.	+	.	Name=rs34293116;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	357841	357841	.	+	.	Name=rs28867109;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	262589	262589	.	+	.	Name=rs34181697;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	357856	357856	.	+	.	Name=rs111353602;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	262598	262598	.	+	.	Name=rs34529823;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	357857	357857	.	-	.	Name=rs79712056;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	262617	262617	.	+	.	Name=rs35773246;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	357870	357870	.	-	.	Name=rs75801552;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	262624	262624	.	+	.	Name=rs36116654;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	357884	357884	.	+	.	Name=rs11723986;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	262874	262874	.	+	.	Name=rs115899071;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	357892	357892	.	-	.	Name=rs113296940;variant_sequence=A/G;
+chr4-04	ensembl_variation	SNP	262934	262934	.	+	.	Name=rs17775090;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	357914	357914	.	+	.	Name=rs112521424;variant_sequence=T/C;
+chr4-04	ensembl_variation	SNP	263205	263205	.	+	.	Name=rs80276391;variant_sequence=G/T;
+chr4-04	ensembl_variation	SNP	357918	357918	.	-	.	Name=rs80163004;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	263319	263319	.	+	.	Name=rs7674560;variant_sequence=G/C;
+chr4-04	ensembl_variation	SNP	357918	357918	.	-	.	Name=rs77278650;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	263400	263400	.	+	.	Name=rs112824916;variant_sequence=G/A;
+chr4-04	ensembl_variation	SNP	357926	357926	.	-	.	Name=rs112532717;variant_sequence=A/C;
+chr4-04	ensembl_variation	SNP	263427	263427	.	+	.	Name=rs111314890;variant_sequence=C/T;
+chr4-04	ensembl_variation	SNP	357931	357931	.	+	.	Name=rs77220357;variant_sequence=C/A;
+chr4-04	ensembl_variation	deletion	263482	263482	.	+	.	Name=rs112413297;variant_sequence=A/-;
+chr4-04	ensembl_variation	SNP	357956	357956	.	+	.	Name=rs111411991;variant_sequence=C/G;
+chr4-04	ensembl_variation	SNP	263562	263562	.	+	.	Name=rs112975726;variant_sequence=C/T;
+chr4-04	ensembl_variation	insertion	357956	357957	.	-	.	Name=rs35441996;variant_sequence=-/G;
+chr4-04	ensembl_variation	SNP	263638	263638	.	+	.	Name=rs115344128;variant_sequence=C/A;
+chr4-04	polya_signal	polyA_signal_sequence	249422	249427	.	+	.
+chr4-04	polya_signal	polyA_signal_sequence	249755	249760	.	+	.
+chr4-04	polya_site	polyA_site	249773	249774	.	+	.
+chr4-04	polya_site	polyA_site	249444	249445	.	+	.
+chr4-04	transcript_trunc	mRNA	247349	249774	.	+	.	ID=transcript2;Name=RP11-2H3.4-001
+chr4-04	transcript_trunc	exon	247349	249774	.	+	.	Parent=transcript2
+chr4-04	transcript_trunc	mRNA	331622	352339	.	+	.	ID=transcript3;Name=RP11-2H3.1-003
+chr4-04	transcript_trunc	exon	331622	331775	.	+	.	Parent=transcript3
+chr4-04	transcript_trunc	exon	337571	337697	.	+	.	Parent=transcript3
+chr4-04	transcript_trunc	exon	338124	338219	.	+	.	Parent=transcript3
+chr4-04	transcript_trunc	exon	351997	352339	.	+	.	Parent=transcript3
+chr4-04	transcript_trunc	mRNA	331603	331775	.	+	.	ID=transcript4;Name=RP11-2H3.1-006
+chr4-04	transcript_trunc	exon	331603	331775	.	+	.	Parent=transcript4
+chr4-04	CCDS_Gene	mRNA	264888	299099	.	-	.	ID=transcript5;Name=CCDS46990.1
+chr4-04	CCDS_Gene	exon	299097	299099	.	-	.	Parent=transcript5
+chr4-04	CCDS_Gene	CDS	299097	299099	.	-	0	Parent=transcript5
+chr4-04	CCDS_Gene	exon	289818	289944	.	-	.	Parent=transcript5
+chr4-04	CCDS_Gene	CDS	289818	289944	.	-	1	Parent=transcript5
+chr4-04	CCDS_Gene	exon	289227	289322	.	-	.	Parent=transcript5
+chr4-04	CCDS_Gene	CDS	289227	289322	.	-	1	Parent=transcript5
+chr4-04	CCDS_Gene	exon	264888	266419	.	-	.	Parent=transcript5
+chr4-04	CCDS_Gene	CDS	264888	266419	.	-	0	Parent=transcript5
+chr4-04	CCDS_Gene	mRNA	331773	338219	.	+	.	ID=transcript6;Name=CCDS33931.1
+chr4-04	CCDS_Gene	exon	331773	331775	.	+	.	Parent=transcript6
+chr4-04	CCDS_Gene	exon	337571	337697	.	+	.	Parent=transcript6
+chr4-04	CCDS_Gene	exon	338124	338219	.	+	.	Parent=transcript6
+chr4-04	Augustus	mRNA	330156	330563	.	-	.	ID=transcript7;Name=AUGUSTUS00000051712
+chr4-04	Augustus	exon	330156	330563	.	-	.	Parent=transcript7
+chr4-04	Augustus	CDS	330156	330563	.	-	0	Parent=transcript7
+chr4-04	Genscan	mRNA	330013	333007	.	-	.	ID=transcript8;Name=GENSCAN00000046298
+chr4-04	Genscan	exon	332861	333007	.	-	.	Parent=transcript8
+chr4-04	Genscan	CDS	332861	333007	.	-	0	Parent=transcript8
+chr4-04	Genscan	exon	330841	331098	.	-	.	Parent=transcript8
+chr4-04	Genscan	CDS	330841	331098	.	-	0	Parent=transcript8
+chr4-04	Genscan	exon	330289	330722	.	-	.	Parent=transcript8
+chr4-04	Genscan	CDS	330289	330722	.	-	2	Parent=transcript8
+chr4-04	Genscan	exon	330013	330175	.	-	.	Parent=transcript8
+chr4-04	Genscan	CDS	330013	330175	.	-	0	Parent=transcript8
+chr4-04	Genscan	mRNA	221598	299038	.	-	.	ID=transcript9;Name=GENSCAN00000046296
+chr4-04	Genscan	exon	298963	299038	.	-	.	Parent=transcript9
+chr4-04	Genscan	CDS	298963	299038	.	-	0	Parent=transcript9
+chr4-04	Genscan	exon	289227	289301	.	-	.	Parent=transcript9
+chr4-04	Genscan	CDS	289227	289301	.	-	1	Parent=transcript9
+chr4-04	Genscan	exon	266273	266395	.	-	.	Parent=transcript9
+chr4-04	Genscan	CDS	266273	266395	.	-	1	Parent=transcript9
+chr4-04	Genscan	exon	228521	228666	.	-	.	Parent=transcript9
+chr4-04	Genscan	CDS	228521	228666	.	-	0	Parent=transcript9
+chr4-04	Genscan	exon	221598	221681	.	-	.	Parent=transcript9
+chr4-04	Genscan	CDS	221598	221681	.	-	0	Parent=transcript9
+chr4-04	Halfwise	mRNA	262776	262844	.	-	.	ID=transcript10;Name=zf-C2H2.40836
+chr4-04	Halfwise	exon	262776	262844	.	-	.	Parent=transcript10
+chr4-04	Halfwise	CDS	262776	262844	.	-	0	Parent=transcript10
+chr4-04	Halfwise	mRNA	263873	263941	.	-	.	ID=transcript11;Name=zf-C2H2.40835
+chr4-04	Halfwise	exon	263873	263941	.	-	.	Parent=transcript11
+chr4-04	Halfwise	CDS	263873	263941	.	-	0	Parent=transcript11
+chr4-04	Halfwise	mRNA	211321	251478	.	-	.	ID=transcript12;Name=zf-C2H2.40837
+chr4-04	Halfwise	exon	251454	251478	.	-	.	Parent=transcript12
+chr4-04	Halfwise	CDS	251454	251478	.	-	0	Parent=transcript12
+chr4-04	Halfwise	exon	228409	228425	.	-	.	Parent=transcript12
+chr4-04	Halfwise	CDS	228409	228425	.	-	0	Parent=transcript12
+chr4-04	Halfwise	exon	211321	211350	.	-	.	Parent=transcript12
+chr4-04	Halfwise	CDS	211321	211350	.	-	0	Parent=transcript12
+chr4-04	Halfwise	mRNA	289816	289938	.	-	.	ID=transcript13;Name=KRAB.40832
+chr4-04	Halfwise	exon	289816	289938	.	-	.	Parent=transcript13
+chr4-04	Halfwise	CDS	289816	289938	.	-	0	Parent=transcript13
+chr4-04	Halfwise	mRNA	337577	337699	.	+	.	ID=transcript14;Name=KRAB.40834
+chr4-04	Halfwise	exon	337577	337699	.	+	.	Parent=transcript14
+chr4-04	Halfwise	CDS	337577	337699	.	+	0	Parent=transcript14
+chr4-04	known_cds_trunc	mRNA	331624	338219	.	+	.	ID=transcript15;Name=RP11-2H3.1-001
+chr4-04	known_cds_trunc	exon	331624	331775	.	+	.	Parent=transcript15
+chr4-04	known_cds_trunc	exon	337571	337697	.	+	.	Parent=transcript15
+chr4-04	known_cds_trunc	exon	338124	338219	.	+	.	Parent=transcript15
+chr4-04	Augustus	mRNA	330156	330563	.	-	.	ID=transcript16;Name=AUGUSTUS00000051712
+chr4-04	Augustus	exon	330156	330563	.	-	.	Parent=transcript16
+chr4-04	Augustus	CDS	330156	330563	.	-	0	Parent=transcript16
+chr4-04	Halfwise	mRNA	262776	262844	.	-	.	ID=transcript17;Name=zf-C2H2.40836
+chr4-04	Halfwise	exon	262776	262844	.	-	.	Parent=transcript17
+chr4-04	Halfwise	CDS	262776	262844	.	-	0	Parent=transcript17
+chr4-04	Halfwise	mRNA	263873	263941	.	-	.	ID=transcript18;Name=zf-C2H2.40835
+chr4-04	Halfwise	exon	263873	263941	.	-	.	Parent=transcript18
+chr4-04	Halfwise	CDS	263873	263941	.	-	0	Parent=transcript18
+chr4-04	Halfwise	mRNA	211321	251478	.	-	.	ID=transcript19;Name=zf-C2H2.40837
+chr4-04	Halfwise	exon	251454	251478	.	-	.	Parent=transcript19
+chr4-04	Halfwise	CDS	251454	251478	.	-	0	Parent=transcript19
+chr4-04	Halfwise	exon	228409	228425	.	-	.	Parent=transcript19
+chr4-04	Halfwise	CDS	228409	228425	.	-	0	Parent=transcript19
+chr4-04	Halfwise	exon	211321	211350	.	-	.	Parent=transcript19
+chr4-04	Halfwise	CDS	211321	211350	.	-	0	Parent=transcript19
+chr4-04	Halfwise	mRNA	289816	289938	.	-	.	ID=transcript20;Name=KRAB.40832
+chr4-04	Halfwise	exon	289816	289938	.	-	.	Parent=transcript20
+chr4-04	Halfwise	CDS	289816	289938	.	-	0	Parent=transcript20
+chr4-04	Halfwise	mRNA	337577	337699	.	+	.	ID=transcript21;Name=KRAB.40834
+chr4-04	Halfwise	exon	337577	337699	.	+	.	Parent=transcript21
+chr4-04	Halfwise	CDS	337577	337699	.	+	0	Parent=transcript21
+chr4-04	putative_cds_trunc	mRNA	331623	338219	.	+	.	ID=transcript22;Name=RP11-2H3.1-005
+chr4-04	putative_cds_trunc	exon	331623	331775	.	+	.	Parent=transcript22
+chr4-04	putative_cds_trunc	exon	337571	337697	.	+	.	Parent=transcript22
+chr4-04	putative_cds_trunc	exon	338124	338219	.	+	.	Parent=transcript22
+chr4-04	putative_cds_trunc	mRNA	331609	338219	.	+	.	ID=transcript23;Name=RP11-2H3.1-002
+chr4-04	putative_cds_trunc	exon	331609	331775	.	+	.	Parent=transcript23
+chr4-04	putative_cds_trunc	exon	337571	337697	.	+	.	Parent=transcript23
+chr4-04	putative_cds_trunc	exon	338124	338219	.	+	.	Parent=transcript23
+chr4-04	ensembl_ncRNA	mRNA	343946	344041	.	+	.	ID=transcript24;Name=MIR571.388281
+chr4-04	ensembl_ncRNA	exon	343946	344041	.	+	.	Parent=transcript24
+chr4-04	Genscan	mRNA	330013	333007	.	-	.	ID=transcript25;Name=GENSCAN00000046298
+chr4-04	Genscan	exon	332861	333007	.	-	.	Parent=transcript25
+chr4-04	Genscan	CDS	332861	333007	.	-	0	Parent=transcript25
+chr4-04	Genscan	exon	330841	331098	.	-	.	Parent=transcript25
+chr4-04	Genscan	CDS	330841	331098	.	-	0	Parent=transcript25
+chr4-04	Genscan	exon	330289	330722	.	-	.	Parent=transcript25
+chr4-04	Genscan	CDS	330289	330722	.	-	2	Parent=transcript25
+chr4-04	Genscan	exon	330013	330175	.	-	.	Parent=transcript25
+chr4-04	Genscan	CDS	330013	330175	.	-	0	Parent=transcript25
+chr4-04	Genscan	mRNA	221598	299038	.	-	.	ID=transcript26;Name=GENSCAN00000046296
+chr4-04	Genscan	exon	298963	299038	.	-	.	Parent=transcript26
+chr4-04	Genscan	CDS	298963	299038	.	-	0	Parent=transcript26
+chr4-04	Genscan	exon	289227	289301	.	-	.	Parent=transcript26
+chr4-04	Genscan	CDS	289227	289301	.	-	1	Parent=transcript26
+chr4-04	Genscan	exon	266273	266395	.	-	.	Parent=transcript26
+chr4-04	Genscan	CDS	266273	266395	.	-	1	Parent=transcript26
+chr4-04	Genscan	exon	228521	228666	.	-	.	Parent=transcript26
+chr4-04	Genscan	CDS	228521	228666	.	-	0	Parent=transcript26
+chr4-04	Genscan	exon	221598	221681	.	-	.	Parent=transcript26
+chr4-04	Genscan	CDS	221598	221681	.	-	0	Parent=transcript26
+chr4-04	ensembl_havana_transcripts	mRNA	264464	299110	.	-	.	ID=transcript27;Name=ZNF732.317436
+chr4-04	ensembl_havana_transcripts	exon	299097	299110	.	-	.	Parent=transcript27
+chr4-04	ensembl_havana_transcripts	CDS	299097	299099	.	-	0	Parent=transcript27
+chr4-04	ensembl_havana_transcripts	exon	289818	289944	.	-	.	Parent=transcript27
+chr4-04	ensembl_havana_transcripts	CDS	289818	289944	.	-	1	Parent=transcript27
+chr4-04	ensembl_havana_transcripts	exon	289227	289322	.	-	.	Parent=transcript27
+chr4-04	ensembl_havana_transcripts	CDS	289227	289322	.	-	1	Parent=transcript27
+chr4-04	ensembl_havana_transcripts	exon	264464	266419	.	-	.	Parent=transcript27
+chr4-04	ensembl_havana_transcripts	CDS	264888	266419	.	-	0	Parent=transcript27
+chr4-04	ensembl_havana_transcripts	mRNA	331624	338219	.	+	.	ID=transcript28;Name=ZNF141.317475
+chr4-04	ensembl_havana_transcripts	exon	331624	331775	.	+	.	Parent=transcript28
+chr4-04	ensembl_havana_transcripts	exon	337571	337697	.	+	.	Parent=transcript28
+chr4-04	ensembl_havana_transcripts	exon	338124	338219	.	+	.	Parent=transcript28
+chr4-04	ensembl_EST_genes	mRNA	247349	247934	.	+	.	ID=transcript29;Name=ENSESTT00000087222
+chr4-04	ensembl_EST_genes	exon	247349	247934	.	+	.	Parent=transcript29
+chr4-04	ensembl_EST_genes	mRNA	331603	331775	.	+	.	ID=transcript30;Name=ENSESTT00000087249
+chr4-04	ensembl_EST_genes	exon	331603	331775	.	+	.	Parent=transcript30
+chr4-04	ensembl_EST_genes	mRNA	247725	247760	.	+	.	ID=transcript31;Name=ENSESTT00000087201
+chr4-04	ensembl_EST_genes	exon	247725	247760	.	+	.	Parent=transcript31
+chr4-04	ensembl_EST_genes	mRNA	330936	337660	.	+	.	ID=transcript32;Name=ENSESTT00000087238
+chr4-04	ensembl_EST_genes	exon	330936	331116	.	+	.	Parent=transcript32
+chr4-04	ensembl_EST_genes	CDS	330938	331116	.	+	0	Parent=transcript32
+chr4-04	ensembl_EST_genes	exon	337571	337660	.	+	.	Parent=transcript32
+chr4-04	ensembl_EST_genes	CDS	337571	337580	.	+	1	Parent=transcript32
+chr4-04	ensembl_EST_genes	mRNA	213083	247631	.	+	.	ID=transcript33;Name=ENSESTT00000087219
+chr4-04	ensembl_EST_genes	exon	213083	213178	.	+	.	Parent=transcript33
+chr4-04	ensembl_EST_genes	exon	247349	247631	.	+	.	Parent=transcript33
+chr4-04	ensembl_EST_genes	mRNA	331596	338219	.	+	.	ID=transcript34;Name=ENSESTT00000087246
+chr4-04	ensembl_EST_genes	exon	331596	331775	.	+	.	Parent=transcript34
+chr4-04	ensembl_EST_genes	exon	337571	337697	.	+	.	Parent=transcript34
+chr4-04	ensembl_EST_genes	exon	338124	338219	.	+	.	Parent=transcript34
+chr4-04	polya_signal	polyA_signal_sequence	249422	249427	.	+	.
+chr4-04	polya_signal	polyA_signal_sequence	249755	249760	.	+	.
+chr4-04	polya_site	polyA_site	249773	249774	.	+	.
+chr4-04	polya_site	polyA_site	249444	249445	.	+	.
diff --git a/test/data/chr4_ref_seq.fasta b/test/data/chr4_ref_seq.fasta
new file mode 100644
index 0000000..2b487e4
--- /dev/null
+++ b/test/data/chr4_ref_seq.fasta
@@ -0,0 +1,2256 @@
+>chr4-04 246635 359336
+tcctgacatagtctgaaaccaattgtctttgatagagattatgggagcct
+cccatacatgttttaaggatgtgtcttgtctggaatttcatgtttttcag
+ttaaaagggtttgttcatgtttcttcttaacagtctctaatcacttgccc
+tacctactttctgtatttaacactgcagtctgctcctgaaacatttacat
+tttgtctcagcaatcccaagctgtcctttcaaaatataccactgtttctt
+tcagcactctgtattattggagacagaaaccagtttttgtaaagactacc
+aaaagccagaagtaatgatgtgtgcgttagtatttttcttatttttaaag
+aaagaagccaggaattggcagtttactcctaaagacacaatgctatactg
+gggaggaggaagggctgtgtaaatgtaacaaattttcctttgcattctat
+gtggctcttggcattgttcttacctgaggcattacatacaattaactcat
+ttcgagattttgcacaaaagcattttgatgagtatatgtttgttacatgt
+atatgtctgtgaaggagttatggcctgtggtattttgttgtgccatctta
+ctaatgtactttgtataagtatatatatattagatttgtaaagtaagtat
+attcatatgtaaagtgtattcatatgaatctagtaagtgggataatttgt
+tatttttctttcaggtgtgtgttctcattttacccaagatctttggccag
+tgcagggcatagaagattcattccacaaacttatactgagaagatatgag
+aaatgtggacagaagaatttacaattaaggaaaggctctaaaagtgtgaa
+taagtgtaaggtgcagaaaggaggttataatggactttaccaatgcttat
+caactacccagagcaaaataattcagtgtaatacatctgtcaaagttttt
+cataaattttcaaattcaaacaacataagacatactggagagaaatcatt
+taaatgtaaaaaatgtggcagatcatttcgcaagttcctccaactaactt
+aacataagggaatacatgctggagagataccctacaaataaatgtgaaga
+atgtggcaaagcctttaataggtccacaagcattactaaatataagaaaa
+ttcatgctggagagaaacccctcatgtgaagaacgtgtcagaatctttac
+ctcatcctcaagctttgacaaacataagagaattcatactggagagaaac
+cctacacgtgaagaatgtggcaaagccttgagacaatccacagttctgaa
+tgaacataagaaaattcatactggaaagaaaccctacaaatgtgaagaat
+gtggcaaagcttttagacagtccagaagcctgaatgaacataagaatatg
+catactggagagaaaccctacacgtgtgaagaatgtgtcaagcttttaac
+caatcctcaagccttattatacacaggagcattcattctgaacaaaaact
+ttacaaatgtgaagaatgcagcaaagcctttactcaatcctcatccctta
+ataaacaagagaattcatactggtgagaaaccctacacatgtgaagaatg
+tggcaaagccttttataggtcctcacaccttactgaacataagaatattc
+atactggagagaaatcctacaaatgtgaagaatgtggcaacgccttttat
+agatcttcacaccttactaaacataagagaattcattctgggcaaaaacc
+ctacaaatgtgaagaatgtggcaaagcctttagacagtcctctgcactga
+atgaacataagaaaattcatactgcagagaaaccctacaaatgtaaagaa
+tgtggcaaagcctttagatggtccagaagcctgaatgaacatacgaatat
+tcatattggagagaaaccctacacatgtgaagaatgtggcaaagatttta
+cttggtcctcaacccttactgtacaccagagaattcagacaggtgagaaa
+catagttgataacatagttgaatgacatttctagtaatatgtttcctttg
+gctttaaacagcaaataaagtgaagaatattgttccatgttcttttcttt
+atttcttaaaatttttgtaggcacatagtatatgtacatatttctggcat
+atattagttatttgaatacaggcatacaccatgtaataatccatcagagt
+aggccaggcgcagtggctcatgcctataatcccagcactttgggaggcca
+aggcaggcggatcacaagttcaggaggtcaagaccatcctggctaacatg
+gtgaaaccccatctctactaaaaatacaaaaaaataactgggcatggtgg
+tgagtgcctgtagtcccagctactcaggaggctgaggcaggagaatggtg
+tgaacccaggaggcagagcttgcagtgagcctagatagcgccactgcact
+gcacgccagcctaggcgacagagtgagactccgtctccaaaaaaagaaaa
+aatccatcagagtaaatgagatattcatcaccttaagtatttattctttg
+tattacacaagtccagttatacactttatttttcaatgtacaattatttt
+ttactacagatcgttttgtgattgtaatatatcaaagtataattcatatg
+tttctgagtcctgaatgaatacttaaaaaaaatgtttcatatttgtcttt
+gaacatgtagtgtcttgtcctgcaaacacatacggacttttcatttttat
+ttacatgaagttaaatatataaatgtattgctctaaaaataaaccgttag
+gtgtaagaaaattacagagcaagcaatagtgtttgtgtgagagtttgtac
+ctattttccaaagaaaagatcaatattggaacaaagaagattcttttata
+aggtggataatttactagaaatctagaaacctaaaacattgtgaaatcaa
+atctatatttctttggatttaattactgtaaaatctaattgttgagactc
+tccccatgtaaattgttttcatttgttactcatattacagctataattta
+cttgtttcttcttttgtttttactttattatttacgatgtgagctggtga
+gaaattataagaatgatttttataaaatttagtacacaaatttttagatg
+caagttcacaatttgtgtattgttatatttgatctagttagaaaatttca
+ttttgtggctttaactggagaactctatatgaaccgttttctttagttgt
+tcctttcactttttacttgacataaatgagtttatgtattgtgtgccaat
+ttgttcaggtaagtactgggaaatcttttaagtcatggagatgttttgat
+ataaaattgtagtgaacataagaaagtgctgtgtgtgtaatagatgctcc
+ataattagccataaatattctttctggagtcagtttgtagctgcaagtaa
+gagacagaaaatgtctatagtgaagaaatggcattaattgtgcatgtgga
+gaggacatctgttcccaggctgcaaaactgactcattctgaatttaaaga
+gggttttttttttaatttaaaagtaaactttaatgtcaaaaatgcaaact
+tagggaggacataaagatcacatacaaggctgccacttcacacttggagg
+gttgcacagcatctgggcaaaggctctcctcacttcccagatggtgcagc
+agctggacagagatgctcctcacttcccagatggtggggcagccaggaag
+aggcgctccttactcccagatggtagggccgccgagcagaggcactcctc
+atttcttagtgcggccgccaggcagaggcacacctcgtgtccaagaaggt
+gtggcagccaggcagaggcgctcctcacgtcccaggcggtgcagtggccg
+ggcaaaggcgcttctcattcccagacagggctgggggccagggagaggcg
+ctgctcacttcccagacagtggggcagctgggcagaggtgcttctcactt
+cccagaaagttgggcagctgggcagaggcgctccttaaagaggatttgtt
+ttatgtttatcctcagctatgtatgcctcacagctcttctccttgtgtta
+tggctacggttttctcactgttctcttcatgccatgtaatttcacatgga
+ctttccaggttctgataggttcgactttttttaatatggtaaattgttcc
+taattgggactgtttgaggttatttatagcttctcaatgcagcatttaga
+ttgcttgagaagtcttttagtgttcacaggtaagagaagtcagcattgtt
+tttctgcttatgaaagaaaatttttgagattctaaaactgtcttaagcat
+aacactaagactaggtaaagcattaatatgagtgggttgcatattgtcag
+caccatatgaagaaaatatcagaattttgaaatttcttcagagaaaatgt
+atcttagaggtaaattttttaggagacttaatggtagagaagaattttac
+atttaatattctatgacatacttatagcaaaacttttttcatgcagaatt
+ttctatttttgaatgtgaatcttaagtgttggaaaataatagaatggtct
+ctgtagattcaaaatttggaatgatcttttttgtccagattgatactgca
+atcctgaggaatttctcttatgattttttattttagtggatgcagttcat
+ggtctacagttttcattcttagtcatctaactaactttaaccaagtcctt
+ggtaaccttctctggaaaaattttggagagtatcattttctcagtgattt
+ttaatgcaaatttacttactttggtcacagaatggacaattatgggacct
+ttagcaagttacccttttaatgtcttccctataattaccatcagcattag
+aaactccaggtgcttcaaacttaaagcaaaagccctagagtacatcatct
+tgtcttatatagtgttctgggtctcagagtacatcatcttgtcttatata
+gtgttctgggtctcaaacatgctggcaaatattagagtttctgtggttat
+tatattacaaaaacagcacaaaaactatttttgataatactcaaagacag
+accagcatttgaaacattattcttctgtgatggcttttaaaatgcatttt
+taattgacagataaagtatgtatttatcttgtagaacatggtgttttgaa
+gtatatatatgctgtcaaaggcttacttctaggtaattcacatagtaatt
+atttttgtgatgagagcacataacattgactgtcttagcatttttcaaaa
+atacaattcattattatagtcaccatgctgtaaaatcgatttcttgaact
+tattccacctggacatctgtaattatgtattattttacagacatccctcc
+aaatgcttttttttctaaataaccaagtatctggtaagcagcattctgtt
+gtctggtttattttcatttagcatactgtcctccaaatttgttcatattg
+ttttaagtgacaagatttccttacttttaatcctgaattgtatttccttg
+tgtataccatattttgaaaaaatgaattgaaatatgcatcaatttattga
+acaaatcatgtaatgaaaagatacttcggtgttaaagcatgtattaatga
+aatccagcttttacacattttatttttttgagatggaatctcgctgtcac
+ccagtctggagtgcaatggtgcaatcttggctcactacaacctctgcctc
+ccgggttcaagcaattctcctgcctcagcctcctgagtagctgggactac
+aggcatgagctaccatacccggctaatttttgtatttttagaagagacag
+ggtttcaccatattggctaggctggtctcgaactcctgacctcatgatct
+gcccaccttagtctcccaaactgttaggactacaggcatgagccaccaca
+cccggcctacacattttattaatagttaatttgtactaaacactacccat
+aacactgtgttaataaatttaattttcacagtaattccatagcataggca
+ttattattatccttattttaaagagaaagaaatagagccacagagaaaaa
+ttacttgctcacaacagtggagccagttttaaaacacagggaactttgac
+tccagagaaaacactctttgttaaacaccctcttcaaacagaaaataagt
+gattatcttcaacacccattcttagtaaatatttaacaaaattaaatcaa
+ctgatacattttttgttatatgtgtgtgcaaatgtgtgggcggcaagcca
+cccaggtgcagaggcaagagaccgaggacacgagctgttccagtataaca
+aaatgtaaaacaacaatagttacgccagacatagatcttagatatgatta
+tatatgaatataattaatcagcagtacttattctttattccaatattata
+ataatcctcgctctataatcataacctaggaaaaaccaggccatacagag
+ataggagctgaggggacatagtgaggagtgaccagaagacaagagtgcaa
+gccttctgttatgcccagaaaaggccaccagagggctccttggtctagcg
+gtaacgccagcgtctgggaagacgcccgtttccaggcggactgtggtcca
+gcggtagcgtgtcaaggaaaaacacccactacttagcagaccgggaaggg
+gaatctccctttccccaggggagtttagagaagactctactcctccacct
+cttgtggagggcctgacattagtcaggctcgcctgcagttatccagaggc
+ctaaccgtttccctgtgatgctgtgcttcagtggtcatgctcctagtccg
+ccttcatgttccatcctgtacacctggctctgccttctagatagcagtag
+caaaattagtgaaagtactaaaagtctctgatatgcagaaataatggcat
+aagctgactctctctccctctctctctgcctcggctgccaggcagggaag
+ggccccctgtccagtggacacgtgacccacgtgaccttacctatcattag
+agatgactcacactctttaccctgccccttttgctttgtatccaaaaaac
+agcagcacagccagacattcggggccactacgggtctccatgacttggtg
+gtaggggtcccccaggcccagctgccttcttttatctctttgtcttgtgt
+ctttgtttctacactctctcatctccacacatggggagagacccaccgac
+cctgtggggctggtccctacacaaatgtataaattatgatacataaagga
+gaaatacttcctctaacgaaactatataaactctagaaattgctctttgc
+tactgacatgtacttgggaacaacctttctttcaactgtccttgccaccc
+ctccagcacttcagaatatttatagcatgatttttacgtaaacctgtagt
+cagcaaatgctgtaattaatcaaatatttactacaaaggcaagcagtaca
+ctatgattttattactttcttgatacaaattttgagttaattatttcact
+ctatattagtatcctttgtgcctttttctcagttttgcctaatactagca
+attatcttacttttaaactatttgtttataaaactttatctctgggaacc
+tcagctcagcagagtgcatagccctgaccagagccctagaactagaaaag
+aaccaaggagttaggtactttttatacagattccaaatatgccattttag
+tattccacaattatgccaccatttggaaagaaaggattgttgacagcaaa
+agatacccctactaaatatgggtcacagatattttaccctaccctaggct
+atccacctaccacagaaagctgcagttcattgctggggctaccagaaatg
+ccaagatgagattacctagagaaacaggagggtcggccaagcagcaacgg
+ccaccaccctttccggggaactccttatggcccttatcccaactttgcct
+aacaacctgcccaccctgcaatggggtatcaaatgtgaatatactctagg
+actgaaagattgtataaattgggagaggttctttatttcccccaggttct
+ccagcagaaagcaataagggcactccataattcttgtttctgtaggagag
+gccatctccatcagctataaccaaaaaaaaaacaaaaaactcctcttttt
+gacaagtttgtaaagcctgtccatctgggtctataataatcctccaggcc
+ctatgccactcctctttattcagccagttcagcaacaagaaacctaccca
+gtgggaagaatggtaggtagactttaattaattgccagcctatcgaggct
+agaaatatctcctgatccttgggaatgcctttactgcctgggttgaagcc
+tctcatactagaatagaaaagattcaggtagttgtcaagatcattctgaa
+agaaattatctctttgagcctccacagtcttcacaaagtaacaatggcct
+atattttatttcacaaactacccaaacagtggcaaaagccctagggatat
+aatacttttcacactcctcctgaaagccacaatcttccaggaaggtagaa
+aggactaatcaagctattaaaaggacctcgagcaaatgatgccaggaagc
+ctctttaccatggctaaaacttctacccatggcacttcttcagatcagaa
+cagcccttaaattacgtctatggcttagtttctttgaagtcctatactgg
+agaccctttctacatgcaaacctaatattatacccagaggttacgaaatt
+aacccagtacataaaatccctgacttaatttcaagaggtcgtccaggagt
+ttggacagaattctgagtctaacccccctaacaacccatataaccaggca
+ggaaaacaagtcatcattaaagtctggagagatggatctctcagatctca
+actaaccccgtcacaaaagaacaatgttactatcataatttccaccccaa
+tagctatcaagtttcctggcatccctagctggacacattacttctgaata
+caactggaaacacattaaggaaccaaagattgaaccaacacttacctact
+cctgtgacccacaggaggacttacaaatttctctccaaatgagaagataa
+gtaatgctctccctccttttacctcaaagtagtgtgatcccaataatggc
+aagtaatgctctccctccttttacctcaaagtagagtgatcccaataatg
+gcaatcttatttgcagtggtgctgttgattcttactttcaccctaacttg
+tgcaccaccaggagttccattaagagttttttttttttttttttttgaga
+cggagtctcgctctgtcgcccagcttggagtacagtggcgctatctcagc
+tcactgcaagctccgcctcccgggttcacatcactctcctgcctcagcct
+cctgagtagctgggactacaggcacctgccaccacacccagctaattttt
+tatatctttagtagagacaggtttcactgtgttagcaaggacggtctcga
+tctcctgacctcatgatctgcccacctcagactcccaaactgctggaatt
+acaggcatgagccaccgtgcccagccatctaatactaattttttaaccta
+atttagttattttacttttgactgctttagtccatcagcaatgttagtaa
+tactttggtgtttatattgcaagtcctaatactctttgcaaacttactaa
+taaacctttgttactgtaaaccaacaccctctccagggaagtttcctatg
+tccctcctacatttacacatcaaagccataatctgagtagtgatctctct
+aataatcattgcattaacagttgctcttaacaagcatctcaatttggccc
+tattctgaaccatgcagcctaatgttctctggtcattactcatactcttt
+tgttgttgttgttgcactctgcaggcaactccacaactactaaactctac
+caattcttcctatgcctcaaacctgttagctagtcatgaattcctcttca
+ttcagggtgggaatggcctacttggccacaatacaagaatgggcaacttc
+tcaagcccaacttagcttcacctatcatcaggacctctctatacaaaaac
+cttccctctgctaacataatatttttaatacaacctaaagcagcttttaa
+agattttcttaaacccacccccattgattcaagccccttgttctcccctg
+ctaccctcattggccaggcactcctatacatctgtgctactgtaaattcc
+agatccattgtgggtgctttagacccagcacaatgcaacacaacaagcac
+cattattgatatttctcaaaattttgtttcactaaatattctcaacatca
+aatgagattttctattctccctccaaatgttttaacacctggaccattca
+tccaaaatgatgcctctgagttctgcgtcagtcacccttcttggagtcaa
+cccaacccatggtgttgaccaagccagtataaattatgcaaaaggtttca
+agtctttaatttctttcagaaaatccttttctttgacactactagaaaca
+tgcctatgtttaaaaaaaaaaaaataggacccatgtctggctcccctggc
+agcagcaactttagtggcaggatctcacatgtcgggtagccaacaaggac
+cctggtcaatgtttggaactgacctcaccttctgcatccatttttatcga
+ctacagaactttacttcctgtgtgaaatgcaggcttatctctgtctctct
+ggaaacttgacgagcacaagcactctggcttccttcacccctaacatttc
+cattgtcccggttgatgcttccttgctgttaccctttactacctcacacc
+agatcgactaagcagtttatcttttttttttttttttcctgagtttggca
+tctcaggtgccactataggaatagctggcataattattgcctcctcaact
+taccaaaacctgtctctggaactgactcacaaaataaaaactactgctca
+gactcttacagagtgacaccaacaagttgattatctcgtggctgtagttt
+gaaattgtagaggtcttgctgcagctcaggaaagaatctgccttatgcta
+ggagaaaaatgctgtttctgggttaacagattagggaaagtccaggacca
+tgttagaggttttacaaaccaggcctgtcaccatcagaaacatgccactg
+aaagctagttctcttggggtgccacttggttccaattctcatgacatccc
+actttttggggatccctagcctttgtcttcctttctctcttttgtgagcc
+ttgctcactaaatctagtaaccaggttcgtttcctctcacctagaaactc
+tcagacttcaaatggtcctgcaacaggaatatcgacctattttcccccaa
+tctgcacagccatgtccctacacatttcctctggacaatgcaagttcaac
+cttctgggagaacatggatggaatctttttctgacaaaaagcaagagaat
+gagatactgatgaattctttatctcatattaccaggaagtagttacagaa
+gacccacagtgcccctagactcaaagatttttggagtctcaatctattga
+ggagggaacgttagaggaggcagttagacatgagcaggaaaaagcccctg
+ggggagaaaaatctcatgctccaaagacaacccaagatatgtacgctaaa
+tttgagcagagtggacaggaaatacccatgaagaaagaatacccagaaac
+accccttaagacacccaataattgctcatactgtgattaaactgtcagaa
+tgtagctagctatatgctgacaaaaagagggaaagggcaaaaggaaactt
+cctaagagatatgcaggcgtagtaagtacagatttgactgctatatgact
+ttcctagggtagtggtaataagctattctgccatcaaaactcattgatca
+ctggaactcacacatgtacatcagccgacagtaaggaagcatctcataga
+cctgggaagaaactcagtgaggataaaagaagagatttaccaggaagcag
+gaaactccacaaagacaaaggcagacacttaagacagaggtgggaatttt
+ttttaagtctataataataaaaactgcaacatgtaaatctcagggctgtt
+tccagctgagccaatccactcctcctttggtgtgttctttattttccttt
+aatgaactctctgcttgcttcactaattgtctctgggctgaattgtttct
+ctcaagaaaacaatagctgaggaccttatatatgctgaattacattaatg
+gaattaatgaatgtttgaattcaatagctgccataatcgcctaatttttt
+ctagagaaggtgaccaagaacttggataaagttagatgactaaaaataaa
+aactgtaccccatgaactgcatccaccaaaacaaatttcaaactcaagat
+tgcaatacgaatctcaacaaaaaaagatcattgcagattttgaatctaca
+cagatcattctattatttttgcaacacttaacatttagtcaaaaatagaa
+gattctgcataaaaaataagttttgctatgtcatagaaaattatatgtaa
+aattcttcatctaccattaagtcttaaaaattttatttcaaagatatatt
+ttaagagatttcaaacttctgatgtgtttcttcatatggtgcttacaatc
+tgcaaccaacttatatttatgctttaatatatattaaggtatgttacatt
+taacacactttgtgttagattctcatacaatttttcttttacaaagagaa
+aaacggtgctcacttaatcctcttacatgtggacagtgaattagtcttac
+ctcaattacatgatctgaatgttgcattgataagctataatctcaaacac
+gccagttaaaaacaatatacattaaaaattccaaacttctcatcagagcc
+tagaaagtccaagtgaaattacatggcatgaagagaacagtgaggaaact
+gtagccataacacaaagaagagcagtgaagcatacatagctggggataaa
+cacatgaagacatcagaaaactaaagacaattagaaaataaaaacagagg
+ccaggtgcagtggcggatgcctgtaatcccagcacttttggaggccgagg
+taggtggatcaccaggtcaagagatcaagaccatcctggcaacacggtga
+aaccctgtctctactaaaactacaaaaattagctaggtatggtggtgtgc
+acctgtagtcccacctacttgggaggctggggcaggagaatcgcttcaac
+ccaagaggcggaggttgcgctgagccaagatcatgccattgcacttcagc
+ctggtgacagagtgagactgtctcaaaaaacaaaaaaagaaatataagga
+aaattaaatgttccaataaaatataactatacacattgtaaaattacatc
+taaaaagtattttctgtgcactaactttttaaaaaaattttataatttct
+gaccagcccacatactttatggagttaaaaaaaaagaatgagaaacaaga
+aaattatacctctagcatgagcaccacattaaaacagagactttttacag
+ggagattctcaaaaatgatccattagattttacagtaattacataaaaat
+aagaaaacatagattttaattcaaaatgttttaggtttctagatttccag
+taaattatccacagtattaatagaaacttctttgttccaatattgctatt
+ttcttcggaaaataggtacaaactctcatgcaaacacaattgcttgcttc
+ataattttcttacacccaaggtttatctttagagcacaacatttatatat
+ttaactccatgtaaattaaaactaagtctgtatgtttacaggagaacatg
+atgcatgtccaaagataaatatgaaacatttttgaaaatcattcaggact
+caggaatgtatgaattataattatactctgatatacttattacaatcata
+aaatgacctgtagtagaaaaaattgtacatttaaaaataattgaagtgta
+taattagattgtgggtaatataaaagataaatgctggagaaaccccaact
+ctactaaaaatacaaaattagccaggttgccaggcgcagtggctcacacc
+tgtaatcccagcactttgggaggctgaggcaggcagatcacgaggtcagg
+agatcgagaccatcctggctaacacggtgaaaccccgtctctactaaaaa
+tacaaaaaattagccaggcgaggtggcaggcgcctgtagtcccagctact
+tgggaggctgaggcaggagaatggtgtgaaccctggggggcggagtctgc
+agtgagccaagatcacgccactgcactccagcctgggtgacagcgagact
+ccgtctggggggggggggggggaattagccaggcatggtggcacatgcct
+gtgatcccagctactcaggagactgatttaggagaattgcttgaacctgg
+gaggtggaggttgcagtgagccaagatcgcaccattgcactctggcctgg
+gcaacaagaacgaaactctgtcccaagaaaaagaaaaagaaaaaaaaaag
+ataaatgcttaagataatgaataactcatttactctgtcatttatatatt
+gtatgcctgtatcaaaataacccatatataccataaatatatacatagtt
+atgtacccacaaaaactttttaaaaatttaaataagaataaaaatgcaac
+atgggaacaatattcagtttacttgctgtttaaagccattggaaaaatag
+actagaaatgtcattcagctatgttatcagatagtacattgttagcatct
+cttacctacacccttgagtaaggtggaataggtgaaagttggtggcataa
+cacatcattcaaggcacaataatttctacacattaataattttatttaaa
+aaattaaggccaggcgcgatggctcacgcgtggaatcccagcactttgag
+aaactgaggcgggtagatcaccaggtcaggagctcaagaccagcctggtc
+aatatgctgaaaccctgtctctactaaaaatacaaaatgtggccaggcct
+ggtggtgtgtgtctgtaatcccagctactcaggaggctgaggcaagagaa
+tcacttgaacctgggaggcggaggttgcagtgagccaagattgtgccact
+gcactccaggctgggcaatagattgagactccgtctcaaaaaaaaaaaat
+taagttcacacatgatcttaaaagacaattttaaaatttacagcatttta
+ttattaaataaatgtacaattggtaaaacaatttactactaaaattcaga
+ttgtttctcacaataatgcaaaatgttactctgaacacctacttcatgca
+tcactctaagtcaaccacaaaaatcctctctgcttagattttcctcaggc
+atctttcatttgttttttctctttcatgtaaaagttcatgaatactgccc
+acctaatggaatttctcatatctctggtgcagcaataattcatcacatgc
+tttcacataaatgagaaaactgaaatactataattttggatttgaattat
+ttgcttttcaaaaaatctatactttttttcaagtaaaaaaatatactttg
+aacgaaatctcttcaaaaatctacttcttttcaacttatatacgcagaac
+ctttttttttttttttgaggtggagtcttgctctgttgcccaggctggag
+tgcagtggcacgatctcggctcactgcaagctccgcctcccaggttcaag
+ccattctcctgcctcagcctcctgagtacctgggactacaggcgcccgcc
+accacgcccagctaattttttgtatttttagtagagatggggtttcacca
+tgttggccaggatagtctcgatctcctgacctcgtgatccgcccgcctcg
+gcctcccaaagtgctgggattacaggcgtgagccaccgtgcccggccaac
+aaagaaagtttctaacaggttgaactttggatttttttacacttaatact
+ccgatttcttgtaaggtgttagttccttagttctttctccagtaaatcct
+ctgatgtttacataggcttaattttagcctaaatatttctccacatttat
+tgcatctacaaattctcttctaatataaactctctagtgtttcttaacct
+gcagtttttgaacagatgtttttccacatttattacatttgtcgtatttc
+gctccaatgtaaattctctgatgttgaacaaagtttgagcaactgcttct
+gagtcttccgctagtacaaaatgtgtacagtaagatccaggatacaagta
+caggtactacaccctctttatatttgtattgtctgtcttaagaatactct
+tcttcgctttaatggcctatattttctaaaaggtctttcaacagaaatta
+catttataatgcttttgttaaccataaattctgatatctggtaagatgtg
+agtagaaattaatggcttttgtatttttatatttgtgcaattattctcat
+gtataaatgctatcacatgcaaaaagatatgagcattgattaaaagtttt
+gccacattttttgtatttctacttttcttcagtagtaattacatacagta
+agatgtgatgagaatttgaagtctgccgggcgtggtggctcacgcctgta
+atcccagcacttggggaggctgagatgggcggatcacgaggtcaggagat
+cacgaccatcctggctaacatggtggtaccccgtctctactgaaaataca
+aaaaattagcctagcatggtggcgagcacctgtagtcccagctactcggg
+aggctgaggcaggagaatgaagtgaaccgaggaggcagagcttgcagtga
+gccaagatcgtgccactgcactccagactgggggagagagcaagactctg
+tctcaaaaaaaaaaaaagagagaatttgaagtctttgccacattttaatt
+tttcatatggcttctcatcaatatcatttatcttatgtttagaacacagt
+gaggtgtggttaaaagctttctcatatttttcacatttctggagtttctc
+tccattatgaattatcttacgattagaaaagattgaggaacatttaaaga
+ctgccacattcttcatattggtaagacattcctccagtacgagttctctt
+atgtttaagaatgctggagtacagcttaaaggcttttccacatcctttac
+acttgtatggttttatctccagtaagaattctccctttgggaggccgagg
+cgggcggatcacgaggtcaggagatcgagaccatcccggctaaaacggtg
+aaaccccgtctctactaaaaatacaaaaaaattagccgggcgtggtggcg
+ggcgcctgtagtcccagctactcgggaggctgaggcaggagaatggcgtg
+aacccgggaggcggagcttgcagtgagccgagatcccgccactgcactcc
+agcctgggcgacagagcgagactccgtctcaaaaaaaaaaaaaaaaaaaa
+aaaaaagaattctcctatgtacataaaggtttccggactgtctaaaggct
+ttgccacattcttcacatgtgtagggtttctctccagtatgaatcctatg
+ttcaattagggttttggagctattaaaggttttatgacattctaaacatt
+tatagggtttctcaccagtatggattctcttacgtttagcagaatttgag
+gatgaggtaatgactttgccagattccttacatttgtaggtgttctctcc
+attatgaattttctcatgtttatttatgggtgaggaccgtttataggctt
+tcccacattctttacatttgtaggattcatctcccatatgaattttctta
+tgttcactcagggttgtggaccatctaaaagctttgccacattcttcaca
+tttgtagggttgctctccagcatcaattttcttatgttgattcaggtatg
+cggactgtttgaaggctttcccacattctttacatttgtagggtttttct
+ccagtatgaattcttactttcattcagggttgtggaccatccaaaagctt
+tgccacattcttcacatttgtatagtttatttccagtataaattttctta
+tgttcattcaggtttgtggatcatccaaaggctttgccacattcttcata
+tttctagagtttctctccagtataaattttattatgttgattaaggtatg
+aggaccacttaaaggctttgccacatcctttacatttgggggttttatct
+ccagtatgaattgtcttatatttattcaggactctggaacgtctaaatgc
+tttgccacactcttcacatctataaggtttctctccagtatgaattttct
+tatgtttactcaggtatgtggaccatccaaaggctttgccacactcttca
+cattcgtaaggtttctctccagtatgaattgtcttatgtttattcagggc
+tctggaacataaaaaggctttgccacactcttcacatctataaggtttct
+ctccagtatgaattttcttatgtttactcaggtatgcagaccatccaaag
+gctttgccacactcttcacatttgtaaggtttctctccagtatgaattat
+cttatgtttattcaggtctgtggaccatccaaaggctttgccacactctt
+cacatttgtggggcctctctccagtatgaattctcttatgttcattaagg
+gttgtgaaccgactaaaggcttttccacattcttcacatgtgtagggttt
+ctctccagtatgaatactcttatgtttattaagggttgcggattgtctaa
+aggctttgccacattgttcacatttgtagggcttctctccagtatgaatt
+ctcttatgttcattcagaactgaggacctactaaaggctttgccacattc
+ttcacatgtgtagggtttctctccagtatgaattctgttatgtttagtaa
+gggttgtggacctattaaagactttgccacattcctgacatttgtagagt
+ttctctccggtatgaattttcttatgtttggcaacatttgaggatgaggt
+aatgattttgccacattcttcacatgtgaagggtttctcttcagcatgaa
+ttctcttatgcttagtaagggttgaggacctattaaaggctttgccacat
+tcttcatatttgtaagatttctctccagtatgaactttatgtttagcaaa
+gtttgaggatgtggtaaagatgttgccacattcttcacatgtgaagggtt
+tctctccagtatgaattatctcatattcattaaagattaaataccattta
+aagtctttgccacattcttcacatgtgtagggtttctctccagcatgaat
+tccttgatgttgagttaggtctgagaacttctgaaatgacttgccacatt
+ctttaaagtgtttctctccagtatgtcttatcctacgttggtttgaattt
+gaaaatgtactaaatactttgacatgtacattacactgaaatattttgct
+ctggatagttgacaagcattgattaaattcattataacctcctttctgca
+ccttccttttacagctttttcttaattctaaattctcatgtccacatttc
+tcatatcttcttaatataagtttgtggaacgaatcttctatcccctgcac
+tggcaaaaagtcttgggtgaaatgagaacacacagctgaaagaaataaaa
+ataaattatcctgcttactagattcatacgaatatactttaaaaatctaa
+tatataaacttatacaaagtacattagtaagatggcataacaaaatacca
+caggccataatttcttcacagacatatatatgtaacaaacatatactgat
+caaaatgccttttagtgaaatttataaatgagttacatgcaatgcctcag
+gtaagcacaatgccaagagccacatagaacaggatacaaagtttgttaca
+tttaccaaccacagttcttcctcctccccaatatagcactgtgccattag
+aagtaaactgtcaactcctgtcttcttacttaaaagaaaagaaaaatact
+gacacgtatccttacttctggcttttggggatctttacaaaaactggttt
+ctgcctccaataacaaagagtgctgaaagaaatggtgatatacttaggaa
+ggacaggttgggtctgctaagaccaaatgtacatgtttcaagagcagact
+gaagtgctaaatacagacaacagaccaagtgattaaagactcttaagagg
+aaacatgaacaaacccttttaactaaaaaataaacacaaaattctagaca
+agacacatccttccaacatgtatgagaggttactataatccgtatcaaag
+acaactggcttcagactatgtcaggagaaaacaacattgtaaaggttgtg
+ataaatagcttttggttaatgttcaaataacaagcaaatattataatgta
+tacaaaatattagaacatggtctaattaaacaatttaaaatttttcagaa
+aacaaccataaaaacaaagatgtacaaatttttaaaatgtaacctgaata
+atgctgaatcagctaaatggaaacacgtacaactaaatgtaatcagaaaa
+atgagaacatcaatgaaaacattaaaaacaaaaaacaaatcatgaaggtg
+aaaaatgcaaaataaagacagaaattttcaagttaaaaaaggatataaaa
+acggaagaagctcaacaaacttcaacaaggttacacacacagatttacag
+caaagcacatatataagcaaagtttcaaaaatcaaactcaaaaacgacat
+cttaggagctgcaaaataaaagtgatgtgtcatttataactgtggtctta
+aaagattaccagtgaatctgtcaacaaaactatttcgcaacagaaagaat
+tgggatattgttaaggtgctaggaaaaaaaaaaaaaacttctatgtggga
+atcatataaccagcaaaactgtcctaaaaatgaagaaagaataaagacct
+ttcaagataaccaaatgctgaaaaagtatattagcacaacacgtcttacc
+aaaaaaatgctcaagaaagtatcttccagtgaaaataacataatgtaaga
+aagccaaacataatcatatgaaaatatatagctttctgaaaaagatatgc
+acatccacaaagttctgtaccactatcatattacagaaaatattgtaatt
+attctctaaaattttaaagaggaaagcataaaaatgatcataaactgttc
+atcataatctggtaataatacacaacaacaatatgattactgacatcaat
+aatgaagttgagggcagatgtaatgaggaggaattttcaaattcaatgga
+agttaagtttttaccagtttaaaatatattattttaacttaaagaaattt
+tatgtaattctcaagataccagaaaaaaagtatctgtatagatacaccaa
+aaaataagaattaaaggtgtatcaatacaaaaataaaaaagactaaggaa
+gacagaaaaagaaaataagggacaaagataaaataatccagtaaaacaat
+aagatgagtaagtctatttcagcaaattattcaaatatttatgaagtaaa
+gtttccattcaaaatacatgcaccaaataaggggattgactgcaaaaatt
+aaaaaacaagatccaacttgcttttctacaggagtcacttgagatgtaat
+gatttaaaaagactgaaaaaggcaaaatgaaagaagagatttcatgcaaa
+taaccaaataagaggtccaaattatgtaatacaaagtacatcttaagtca
+aaactgtcctatttcataaaatatactttaaaaagtcataagaaagaagg
+acattaaacaataataataataaaggttcatttactgggaactaatgaca
+aacatgtctatacatacgttaatatgtgtgtgtgtctcccccacattgag
+ttccaaatatacaaagccaatactcacagaattaagacaaagacagcaat
+ataactatagtaggatatttaaataccccagtttctgtaaggaataatga
+aacaagataaaatattcataaggaaacaggagacttgaaaccagtattaa
+actattacgcctaacagaactgtagagaacactgctcagcaacaactaaa
+tacacacccttctcaatacctcatacaatattctccttgatagactacat
+gtcagggcacaaaaaaagtcttaaagttttaaaattgaaattttacagat
+tacttttaatgaccaaactggaatgagagtagaaataaagaaaactaaaa
+aatttacatatttatagaaattaaacaacacacacttaagcatgctcttg
+ttcaaagtttgaaataatgagaatatctagactgctcaatataatctaca
+gattaaatgcaatccctgtcaaatttaattaaattattgtagtaatagaa
+acaacaattcccatattatatggaattaagaaacagtgaagtacccaaca
+atcttcaaaaacagaagcaatctcagaggcttcacagctcctgatttcaa
+aacacatacaaatctaaagaattaaagcaatctgggataggtataaagct
+gaacagctagatcaactaaataaaatctggcaaaaatataaactctcaca
+catggtcacatgaagagtaatttagacactcataattattgcagcactgt
+tcctgaaagcaaataacagcaacgcatatttctctcactaaataaattga
+gaaatataatttcaattattaaaataatgaaatattactcagtttgtaaa
+aagcaaaaaataaacaagtacaataaagataaatcttgatgacattatac
+aacaaaaagtcacgaagagacaaactatatgaatcaacttacacgagata
+tctaaagcagtttgactttaaaataaaaaacagaattgtttgtgtagagt
+gagaaaacagaaaaagtaggtagttatattgagtgttagctttgcaagat
+aaacatattctaaaaatatagtgcataaaattattaataaaatgactaag
+ctgaatatttaaaaatatataagattttaaatgttatgcatttttgaaaa
+caatatataaaagagatggaggtatgagttttggaaattatcttcaaatc
+acaaaagtgttacacacacacaaatatagatttacaaataaatagagggt
+aaaattaggagaatttcaatgactactcacctaggcagggtaaaaccacc
+attgttacacacaaacaaaataagtatacaacttaaaaacaatagggaaa
+caatatgcagagagataaacacagagactcttatattggaaatagatata
+tcactgatccatatttgacttatgctccacagtcttacagtgtacatagc
+tgaatgctgtcatagacaataataatactaaataaaagcatccttgttgt
+gttccagatctcagataaaaagttttctgctccttcctattcagtatgat
+ttcagccattaatctgtcatatacaatctttattgcactgaagtacataa
+tatctatacctaatttgttgagtttcttaaatcacaaagacatgttcaat
+gttgccaaatgctgcttctgcatcaacaataaaaaataaagatttctagt
+agcaaacataattaaaaaggtgaacactctttacactgaaaattgtaaat
+aattaaaaagtgaaaaagacatgaaaatttgaaagatatatattgctcat
+aaaattaaaaaatatgaaagtggctatactactcaaggtgatctatagat
+tcaacgcaatctcttatcaaaataccaatgatttttttcacagaaatgga
+aaaaacaaacttaaacttcacagggaaccaccaaagacccccaaatagca
+aaagtaatcctaagggggggacaaaaaaaaacagctggaagcatcacact
+acctgactccaaaatatactataaagctataataagcaaaacagcatgat
+aatgacatagacagatcaaactatccagtgagcccagtaataaattcctg
+aacctagaaccaagtgattttcaacaaaaatgtcaagaactcacatttgg
+aaaaagacagtcttttcaataaatggtgctatgaaaattatttacatgat
+aatcaaaaaaataaaactaggctcctacctcttacaatataaaaaactca
+atcacaaatacagatttaaatgggaaactcaaacctataaagttatttga
+aataaacatacaggaatgcattaccacatagtacagagaaaagaatctta
+agacctcaaaatcacaggcaaaagaagcaaaaatatgcaaacgggattac
+aagaaactaaaaatgctttgcacagtaaagaaaacaattaacaaagtgaa
+gacgtaatctacacaatgaaataaaatatttgcaaaatgtacatgacaaa
+agataaatttacagtataacaaacttaacaaaaataacacacaatttaaa
+cataggcaagaggccttaagagacatttttcaaaagaaatacagatggcc
+aaaaagtacatgcaaagatgctcaacatcactaattgtcagagaaatgca
+aatcaaaaccacaatataagacttgactccagttagaatgactgtaatta
+gaaagacaaaaaaaaatgttagtgagaatgaatagaaaaggaaacacggt
+aaaactgtaagttagtagagccattatagaaaaaaaacaagtatcacagg
+ataacatatatttaaacaatcaacaaatggtattttaacactgtttcttt
+gactccccacctagacaataaaccatgaactaccacacacacacaaaaaa
+aattcaaattgctggatcacaggttctatttttaattttttaattaaatg
+ggattgctggaacatacgttagtcctattttgtttgtagctaaagaaaac
+aaaatcagtatgtcaaagagaaatctacactccaatgtttattaaaacac
+tatttatagccaaggtattcgatcaatccaagtgtccaaaacttggatga
+ataaagaaaatgtggtatatatacacaacaaaatactattcagctacaaa
+agagaatataattttgatatttgccacaacaggaatgaacctggaggcca
+ttacgttaagtgaaataaaagatacactgagacaaatacaaaagatctta
+cccatatgtgaaatctaatataaacatttatgaggaaggctttatgcaac
+tagtctcaacaataactttttgaatacaacatcaaaggcttaagaaaaaa
+aatatggacacacacatggtaccacatcactgtatccaaaatataccaaa
+aatatccgaggcaggactttacatatttacacatgcatgttaattattat
+ttgcaaaagacaattcctggaaacaacacaaatgtccctttagagatcaa
+tatcagattttttaaatgtgacatacatacaatattttattttaaaacag
+atattctgacacatctttgtggaggaaaagttaaatattaaatttgaact
+caactgaacatgacaaacaatggtcaccaaatcccagaatgggttgtgtg
+agcccccagcactgtttcaaagaaatttctatttcaatctattcctatat
+gttagttattgaaaaacaatagacaatcgcaaacacaatttgaccttttt
+gtgttccttgagtccagtcacaaagggcccttgtgactgggcctcatgcc
+aaacaactcattacaaaaagagctagggtcccagaccatgccgaagctac
+atgagacctctcttcgtctgtgcacggaagggtggcggactctggagccc
+aggctgttgcttcccagtctagtggtgaatcctccacaggctggtgagtg
+tagtgtctgactctggagcccaggctattgcttcctagtctggtggtgaa
+tcctccatagtctggtaaatgtaaatatatatatctccttttccttctcc
+ccttcccattgcaatttgcttattgtatcatttgcttatatatctgcatt
+gccatttacatgggataaaggttgtttacccttaaagatattgtgtgtgt
+gtcttttcttctcccctcacgcgtttcccgcacaggacaatcttacaaaa
+acaaagcctgagaacattatgttaagtaaactgagatagtgaaaaaaaaa
+acagacatgggggccgggtgcagtggctcatgcctataattccagcactt
+tgggaggccgaggcgggcagatcacgaggtcagaagatcaagaccatcct
+ggctaacacggtgaaaccttgtctctactaaaaatacaaaaacaaaaaaa
+attagctgggcgtggtggtgggcgcttgtagtcccagctactctggaggc
+tgaggcaggagaatggcgtgaacccgggaggcagagcttgcagtgagcca
+atatcacgccactgcactccagcgtgggtgacagagcgagactccgtctc
+aaaaaaaaaaaacaacaaccagacattatattatataattacaccaataa
+gaatataaaaatcagtcaaaattatagaaatagtaagtaaaatggtgttc
+ttcaggacctgaagagaaaaaaatggcagtttattgtttatgaggtatga
+actttactttgataaaattaatctagagatccatttcaaaataatgtaaa
+tgtacttaactccactaggctgtacacttgaaaacctttaagcaatgtta
+ggtttttcatcacaactaaatatttacatctacctaaaaaggttacattt
+ttcaaaaatcaccttcaaataaaaagtgtttctctcacagaataacatat
+actcaaacaataaataggtggtaattttttactgtttctttgactactca
+cctataaaagaaaacagtgatgaccaccagaaagaaaaatttataaacca
+ggtaggggcattatttacacaggcaaacaccacatagataacttttatag
+gctatagaaatgtctgaattacacatatattttaaattgctccaagtgaa
+acccaatgatttttatttgaattaaacaccacatggtcataaaaggtaca
+gagttgaaaattaccatacaaatatgaagattaaaaacaaaaaataattg
+aggagaacctacatgaaaaaagactccccagtaaaatagagtttgaaaac
+aataaaaaattctgacctataaaatatagaatatagatgtagatgtatca
+taaaaacaatccttcaaacaactacagttttcaactgtgactatgtactt
+atgaagatccagcattttgaatctttgacatgcaatgtacagcagtaaga
+aaaaaaaaaaaaacggccagctgcagtggctcacacctgtaatcccagca
+ctttggaaggctgaggcaggtggatctcaaggtcaggagttcgagaccag
+cctgaccatctctactaaaaatacaaaacaaaaaaattagccgggtgtgg
+tggctggcgcatgcctgtaatcccacctactcgggaggctgaggcaggag
+aattgcttgaatccgagaggcagaggttgcagtgagctgagatggtacca
+ttgcactccagcctgggcaacaagagcaaaaaattctgccaaaaaaaagc
+agcagttatgtcctgaaaaaggaaatttatgggagctttggaatccatgt
+caagggttgtgaacccaagactgaggagggctgtattgaaaaggcatgcc
+cttgcttgagtggcatgcttgcccatcacagtcccagctacagaataaaa
+tgtgtccaattttcattgtagacttagctgcagaccatttggttttgttc
+ctgctactagcaccatctgcaaagacacctaggagaatttctaatgttct
+atgcctcaggtgaaaggcctttagaagttggttctatctgtgatctctga
+attagccccaaatccactctttacacatgtcagtcatggtgtggaaggaa
+tcctgcccagacacccacagagagaaacatccatctgtgcccgaatgtag
+gcttgccaataattatttgacagtggatcttgacgtggcactataagctg
+gctccaagtccatgcaaccaagtccagaagaagtttttcctaacctggga
+cctgccaaaaagcacacctgtatgtgcccctgtaggcatgctggctgact
+ttattcccactgtgaattgtaaagcagtcctataaccaagctctggtctc
+tgtcatctagagtctggaagaagtcctacccacctagaaatccacaggga
+gaaataccgttaacccagaaaaagacctgaacactttggtctcagctgtg
+tatcctgaagcagccgcatgaatcagtttcataccctctcagctgtgatc
+aagggtcattactgctcatctaggaacctgtccaatgactaggttagagc
+atttccaaacacctcgcaagagcgacacagcaggagccacacctgctcac
+attgattgtatcagcaccttaatctgcatatataactggaggcttttttc
+ctcagtgccagtcatattgatcaacatcttgaagaaagttcagtcttctc
+agaaaatagaatccacaactgtctgatgccctgatgacaggtctgccaag
+caggaatttcactgcaaacccagtagtagctacgtgacccggattccaaa
+gcactttattgcaacctcagtggaaatctcatcagcccagaaatccaatg
+ggagaagatatttacctcctcaaactagtctataatgactgaaagaggta
+tttactccttcagatgcaaggacatcaaaacaaagcctcatgaattatga
+aggatcaggcaaacataacagcatgaaaggaaactaaaaatgctccagga
+agcactaacaataaaacacagatctaaaaaatggctaacagagaatttaa
+aataattatctttaaaaatctcgataagatgcaaaagtacacatattact
+aaattttttgcaacaatgcatgaagaaaaccaatgataataaagaaagat
+aagccattaacaaagaaccaaggcgatatgctggagctgaagtacacaat
+agtagaactaaaatatttaacagaaagctttaacaggagactcagttata
+cagaaggggaaaaatcaacaaacttaaaagtcatttgaaagttcgtaaat
+agactttttttaaaaaagtgaataaagcatatagcttcaataatttgtta
+atggtatataatataaaaagatgtaaagtgtgacataaatagtgtgttga
+aaggagtaaaactgtttaatatttttatacatagaagttcacttttgctt
+gaggccaggagttcaaaaccagcctggtcaatatagcaggaccctgtctc
+taaaataaatacataaataaaataaaataaagatttcagaaagctattta
+ttctttttttaaaaagaagcagttgggcctgataatgcatgcctataaac
+ctagcactctgggaggccaaggcaggtagatttcttgagcccagaagttc
+atgaccagcctgagcaacatggcaaaaccctgtctctacaaaaaatacca
+aaaaaattagctggacatggtggcatgtgcttgtaatcccagctacttgg
+gaggctgatatgggaaaagtgtttgatattggagagttcaaggctgcact
+gagctgtgaacccaccactgcactacatcctgggaaacaaagtaagatcc
+tatgtgggtaaaaaagaagttagattgttaccttaagctagactttttaa
+actatgagatattttatggtcccttggaaattacaaaaaaaaaaatgttg
+aagatacatacacacaaaagaaattaaagcatataacaagaaaaatgaaa
+caaactcaacaccatacaagggaaggcagcatgaaagaaaaaacagaaat
+tactaaatggttagaaaacaatgaacaaaatgatagtaataagttcttat
+caatcagtaattcctttaaatataaaaaaaatttagttagccaataaaat
+cacattgctatggtttgagtgccccctccaaaattcatgttaaaatgtaa
+ctgccattgtgagaaaattaataagtgaggcctttaagaagttataaggt
+catgagaggatcagtatcattattccacgagtgggttagtcatcatgagt
+gggtctatcataaaagtgagctcgtgttgtgatgtggaaatatgattgtc
+atcagatgggaatgacatgctcttggacttcttggcatcccagattgtga
+gctaaggaaacttctattctttataaattaccaactgtaggatattgtta
+ttgatgcaaaaaataaactaaaacactcgcgaaatgtctgaatagattta
+aaaaatcaacaacatgctgcacacaagcgacttactttagatttaaggaa
+atacataggttagtggttcaaggatgaaaaaaaaattccatgccagtaat
+aactaaaagagtatagaagtggctatatttacatcagacaaaatagactt
+ctaaaaaaaatctgccacaaaaaaaaaaacttcatgatatagtgataaga
+ggctaatctgtcaaaagaatataacaattaaaaatatatatatacccaat
+attggagcacataaatatataaacatatattaaaagaaatggagaaacag
+aaaaacataatactgggggactatattgccctacttaatacatcattcag
+actgaaagttagtaagaaaacaattgcttgcatagcactataaaacaact
+gcaccaaaagacatatatatagaacatttcatccaaaagaataatttata
+ttcttctcaaacacacatggaatattctctagcatacatcataaatctgg
+cccacaacaaagacaaacaagtcttttcattttttaaaagactgaaatca
+tatcaacttgtttgtgttttttttagtttttttgagaaggagtcttgctc
+tgtcgcccaggctgtagtgcagtggtgcgatctcggctcactgcaagttc
+cgcctccagggttcacgccattctcctgcctcagcctcctgagtagctgg
+gactacaggcacccgccaccacgcccggctaatttttttgtatttttagt
+agagacaaggtttcaccttgttaactaggatggcctcgatctcctgacct
+cgtgatccacccacctcagcctcccaaagtgctgggattataggcatgag
+ccaccgagcccagcctgaaatcatatcaagtttttaaattacaattttat
+aaatgagaaatcaatagcagagtgaacattgaaaatcttacaaatatgtg
+tatattagacaacatgcttctgaacaactgatgagtcaaagaagaaaaag
+aaaagaaaaatcagaaagtatcttgagacaaatgaaaatagaaataggac
+atatcaaaagtagaatgtaacaaaagcagttccaagacagaatgttatag
+taatataattttatatttaaaaaatctcaaacactgtaactttaattctt
+aaataacttgaaaaacaataatctcaatgttaggataataaagaaaataa
+taaaaaacagaacagaaacaaattagagacttagaagacaacaaatactg
+ggtgcagtggctcatgcctgtaatcccagctctttgggaggctgaggcgg
+gtggatcacgagatcaggcaatcaagaccagcctggccaacatggtgaaa
+ccaagtctctactaaaaatacaaaaattcgccgggcgtggtggcgggcac
+ttgtaaacccagctactcgggaggctgaggcagaagaatcgcttgaaccc
+aggaggcggaggttgtggtgagccaagatcacaccactgcactccagccc
+gggccacagagtgagactctgtctcaaaaaaaaaaaaaaaaaaaaaaaga
+agaagaaaaagaaacaaacaaaaaacaaaaaagataaaaggcagagaaag
+aatttacatataaaagttttctaagtcaaatattttaagaaaaggaagga
+gtaaatacttttccttttttccagctggaggattaagtctgtttctattt
+tacatttatatttacaataaccacatccaacaattttgcctagaactcac
+ggacatctgatttccagcagggcctggattcaggcacctgcagggtgacc
+tgaggcatactatgttcacaggaaagagtgtttgtgagggaaaaaaaaat
+gcagaataagaaaagatgttatcaagaacccaagagtgagggtcagtgca
+caggtggagaaaggactggttactgctatagatactggcccaggcaggca
+gctctgacttatgaatgtgtgtgtgcagggagataagatggtcaggtgat
+ccagaagcctaggctactggaggaaacaggttactggtgcagattgaaga
+tctgagtggtagaaagaacccatgagtcttctgggcacttatgtgtccta
+ttattggaaaactctagaagcagaggtgctctcagtacaattcctgagaa
+tgaagctttgtcatgggagaagtgtggccacaccattgcctagcgtgcat
+gtgtgtgaatgtgcagaaatcactttatagcaaaaggagtcagaactcct
+tccctttgagtactcagtcccctctcacccccggaggatacctagaatca
+caagacgattcacagtgtgacagcttctgtgcaaaattttaaactctcca
+ttctccaacagacccacggtctccctccaactagggctgctgtgatacct
+ttatgtgtttttgagacaatgtctcactttgtcacccaggctacagtaca
+gtgacacaatctcagctcatgccagactcaacctcccagggttcaagcga
+tccttctgcctcagcccccaagtagctggaactacaggtgcatgccacca
+tgcccggctaatgtttatctattttttggtagagatgggatttcaccaca
+ttgcctaggcatggtgcaaccaggaggaactcccaactctatgcttcttc
+ctcagcagagaaagaaagtgggatatgtgtccacatttctggtttttggg
+gaactgtgcgaagatgagttttgtctcccctgacaaaaagtgctgaagga
+aatggtggtatactttaaattgcagcagctatgcatattttgcattaata
+taacaagcaatcctgaaattttatcagaattaaagagaccagaagtgctc
+aagaattgtcaaaaagagaaacatcagaagcatcatacatcattacttta
+aaaactaattatgaagctatagttattgaaacagtttataactagatttt
+aaaaagacaatgacagtgaacagaagaacatgtaaataatcccttgcatg
+tattatcaaatgaagagtaatttacacatccatattcattgtggcatcat
+ctacaaaactgaaaaaaacttttcttaataaagacaattttgaatataca
+aataaatattattcagcttcttaaaagcagaaaagtttttctatatccac
+aatgaggatacatttttaagactttatttaggtggaggaagccaggcaca
+agaagacaagtgctatgtaattccacttatgtaagatatctaaagtagtt
+aaatgcttagaaacagactaaactgtgacaggggttaactgcagaagaaa
+atgagtagctgttgtttaatggacaacctgttagaatgcaaaacaactct
+ttttttaactttattttaggatggggtatatgtgcaagtttgttatacag
+gtaaacttgtgtcataaaggtttgttgtacagattatttctcatcaaggt
+attcagcctggtatgcattaaagattgaattatacaatacctcctttcag
+accacatggaataaaactagaaatcggccaggctctgtggttcacgcctg
+taatcccagcagtttgggaggccaaggtgggcggatcacggggtcaggag
+atcaagaccattctggctaacatggtgaaaccccgtctctactaaaaata
+tgaaaattatctgggcgtggtggtgcacgcctgtagtcccagctactcag
+gaggctgaggcaggagaatggcgtgaacccgggaggcgaagcttgcagtg
+agccaagatggcgccactgcactccagcctgggcgacagagcaagactcc
+gtcgcaaaacaaaactagaaatcaaaagcagaagcaaaattgccaaatcc
+aagaatatgtgaaacttaacatacttttttttttttttaaagacggagtt
+ttggtgttgcccagactgtagtgcaatggcgtgatctcggctcactgcag
+cctccgcccctcgggttgaggtgattctcctgcctcagcctcccgagtgg
+ctgggattagaggtgtgtgccatcacgtccagctaatttttgtattttta
+gtagagacggggtttcgccatgttggccagggtagtctcgaactcctgac
+ctctggtgatccacccgcctcggcctcccaaagtgctaggattacaggcg
+tgagtcatcgcacgtggccaacacactcttgaacatactcttctttatgt
+caggagatttaatattgtcaaatgacaatactacccagtgatattcaaat
+tcaatgtaatcctgatgaaaacacaaatgatactgtttgaaaaatatata
+tatatatttttttttgagatggagtctcgctctgtcaccccaggctggag
+tgcagtgacaaaatcttggctcactgcaagctccgcctcccggtttcaca
+ccattctcctgcctcagcctcctgccttcagatatactttggatattttg
+aataggtgctcagaagtagaattactggctcatataataactgcattttt
+agtttttggaggaacctccatacatttttttcaggtggttgcatcacttt
+ttccccaccaacagtgcacaagagtttcaatttctctacattctttacaa
+cattttttttttgctttatattggccatcctaattaatgcacaacaataa
+ccttattgtggttttgccttacattactctaaaaattagaaattttctca
+ataattgttatatgtatttcatctctggagaaacattttcatctcttgtc
+tatttgttaatcatgttattctttgttgattttttggaattgtttattct
+gaatgttaacttttgtcaaacacataatttttaattttttttgcttttgt
+gcttcttaggtgggactcttaatgtttgttaatgtgcagagataaattta
+atgtagtctcatttttctgtggttttaagtttgttgctcatgtgtttgat
+gttatatgtaagaaaacattgctgagaccaacgtcatagtctctattcct
+atattttcttctaaaaattgtaaagttataattcttacatttcaatattt
+aactcactcaagatagtttttgtacatggttcaggggaaggatccaacct
+caatttttcccatgtggatacagagtattccaacaccatttattaaagag
+actgtctttttcttattgtatggttatagcaaccttgttgaagatcattt
+gagcatatacatgatggttagtttttgagttctctgttctgttctatcat
+ctatttgttttcctgcaaatacctcactgtttttatttatgtagctttgt
+attctgttctaaaaacaagaagtgttgtgcctctagctttgttcttattt
+tctaagattgggccatgatggtccttgaaattctatgtaaatgtaagaat
+ttttaaaaatatttttccaaaaagtaggctgggcgcagtggctcatgtct
+gtaatcccagcactttgggaggcggaagtgggctgatcatgaggtcagga
+gattgagaccatcctggctaacacagtgatgtaacagggttttgaaaccc
+aaaacatccatgttattgcaacaatattcactgtattagtttatcctcgt
+attgctataaatacctgacactggatatcttatttttaaatagagattta
+attcgctcatggatctgcaggctgtacagaaggcatagcagcttctgttt
+ctcaggaggccccaaaaagcttccaatcatggcaggaagccaagcaagag
+tgagtcatctcacatggtagaagcaggagcaagtgtgtggaagaagctgc
+ttttagaaaatgagatctctttagttattaaaagaaaactgcagaactcc
+tcattggttttcctttacctaatgatttctgtgaagtgagacttgggtag
+taggaagaaggaattagacactctacctgccaccctgcatgtgtgtgcgc
+tcgcgcacatgctgtctacatgtaatccactccttttactttcctttgaa
+actggtaaggttaaaataggggagaaatcctacatgttgcaatgatagct
+ttttggaaaatttaagaaatcaaactctccaggctctccatcttgattta
+tgcttgaattgttatgtgccatatttgctttgaactctgattaccagaag
+ttttactaaaatgttgaagaaataattcactttcacctgctttctagatt
+ttgtacatctcagttcataaagcaagcttattgttagcatagttttctaa
+atgctgcagatttgcagccattaccactacaaagaattttgaatgaggga
+ttttttttctttgttaaaatagttcgtgtttctgtagaaatttcactttt
+agattgaactgcaatggataagctatcaaaaataaaaagaaagaaaatga
+gatctcaggagaagtcactcactatggcaaagacagtaccaaaggggatg
+gtactaaacgattcatgagaagccaaccctacgatcccatcacctcccac
+caggcccacctccatgagggcttgtaatttgatgtgagatttgactgcag
+acacagatccaagccatattatttacaaaagccaaaacatgaaaaaactc
+aaacatccttcaacagttgaataatttaaaaggatgtggcttacacatac
+aatgaaaaattatttagactcaaaatgaaaatatcttgtcagatgctaca
+atatggataaatcttaaagccattattttaagtgaaataaaacactaacg
+aagtgacagtgtaagattccacttatataaggtattttacttagtaaact
+cctacaaaacataagtagaaaattgcttgcctatagttagggttgtgaaa
+cctcagtggagtcaaagatcaaggggggttacttggaaaaagcaggccct
+caccaggtggccaactcaagagcccatagacatagctacagacaaggaaa
+ttatgcacagagtttggtcttactgaggattccaaaaatagttctgtaac
+ctctctcaaattcaatctcagctatagtccagaagtggtccttcccatca
+agagacctgcaggaagacacagccagcaatggccctggaggcaggcctgc
+agatcctggcctcagctgtggtccctgaagcagccctgcagatcctggcc
+tcagctgtggtccctgaagcagccctgtgactcagttctagccatatgta
+gtcacagtctgtggccattcgtacacattcagaggctcacagagagacct
+gtaaaaactgttcccaggtagtcagcagaagccaaacccattcatacacc
+tgttatttgggccatcatatacagacaaacttcaaaaccctagcctacaa
+cctgccatatagattaatgtcctcaaggaaatctaatcttttcagggccc
+agaagaatccataactgtccaaatctctggcaacacaaccatcaaagaca
+caatgcacagcagacccagcagcacccttgtgacccagctacaacccttc
+tctgcaaacccagaggtagtctcatcagcctggggacccaacaaaaggag
+atgtttacctgccaaaaaatagattatacaaactgtaaatcattgttaaa
+tccttaaaatatacagacacagggctgcttcagggaccacagctgaggcc
+cagatctacaagcatgcttccaggaccacagcttctatcttaacatatta
+ccaaatgtaccagaacaattaggcaaggaaaaggagaacaaagctctcct
+gcttgcaaaagtagtaaaaatgttactgtttgtagataatatgatcatgc
+atatatatgaaaccctagagtggaataacaaaaactgaactaataaaggc
+actcattaaggtatcaggatacgtaatcaacatacaaatatctgtaggta
+gtttcttggtttgtgtttataaggcaaggtctcactacaaggcccaggcc
+catctcgaactcctgtgctcaagtgatccacatgccttggcctctgaaag
+tgctgaattacaaaaaggaaccaatatacctagcccaacatacaaatatg
+tttcatttccataaagtaacaaaatttccaaaaaaagaaaaaaattcaat
+ttgcaatactataaaaataagaaattaattcaaaataaatttaaccaatg
+aaataaaaaatttacacactaaatacaagatacaaaatctagtgtataac
+aataaatttagacactaaatgatgacagaaactgaagcagacacaaatag
+ataaaaccagattccatcaggataacagatattgtcaaagtatattttcg
+aaagtgatttgtagattcaaatgtgatccctatcaaaattttagtggcgt
+ttttcacagtaatagtaaacacaattgtaaaatttaagtgtaaccttaaa
+caattttaaataacgtaagccatcttgagaaagaacaaagcgaggggcat
+cataccttctaattttaaactttatttaaaggttatagtaagcaaaagag
+tatggtatgtgcataaatacagatataaaaaaaccaatggaacagaatag
+cccagaaacaaatccatgcatacaaggtcaactaattttggcaagggaac
+caagaacacacaatgcagaaattacactcttgtcaatacgtggtgccaga
+aaaactggatatccacaagctaaagaataaaagtagatcattttcttaca
+ccataccccaaaattaactcaaaatgaaacacttcaatataagataaaaa
+accttagaactcccgaagaacatatatggaaaagccctgttgatactggc
+tttggcaataacttttttgatatgccatcaaaagcacagcaacaaaagaa
+aacacaagtgggattgtatcaaagtaaactgcttctgcacagcaaaggaa
+aagaaaacaaaatttctaaaaaccctacaggatataaatatttgcaagca
+atttatctgataaaaaatttgggaggccgaggcgggcagatcacctgagg
+tcaggagtttgagaccagcctgaccaacatgaagaaaccccgtctctatt
+aaaaatacaaaattagctgggcatggtggggcatgcctgtaatctcagct
+atttgggaggctgaggcagaagaatcacttgatcccgggaggcagaggtt
+gcagtgagctgagatcatgccactgcactccagcctgagcaacaagagca
+aaactctgtctcaaaaaaaaaaaaaaaaagttaatatccctatccgaaat
+gtataagaaacttatacaattcaaagcaaaacaataatgatgataagcca
+ttcaaaaataggcaaaaggttagattttttccccccaaagaagacataca
+tacaaggtaagtgctatatgctgttggtgagatgtaaattgataaagtca
+tcataaaaaacaataaaaaggccgggcgcagtggctcacgcctgtaatcc
+caacactttgggaggctcaggtgggcggatcacgagctcaggagatcgag
+accatcctggctaacatggtgaaactctgtctctactaaaaacacaaaaa
+aaaaaaaaaaaaaaaaaaaaaaattagccaggcgtggtgttaggtacctg
+tagtcccagctactcaggaggctgaggcaggagaatggcgtgaacccagg
+tggcggaggttgcagtgagccgagatcgcgccactgcactccagcctggg
+caacagagcaagactccatctcaaaaaaaaaaaaaaaaaaaaaaaaccag
+taagaaataaaaatggaaatattatataatccagcaataccacttctggg
+tacactaccaaaggaaattaagttagcaccttgaagaaatatcttcagcc
+catgtttgctgtagtatatttacaatagccaaaatatggtgtgtgtgtgt
+atatatatatacacatatatatgtatatatgtatgtgtatatatatatat
+atatgtgtgtgtgtgtatatatatatacacacacacacagtagactacta
+ttcagccataaaagaaaaggaaatctagccatttacaacctggatagacc
+tggaggaaatgatgctaaatgaaattagccaaacacagagagacaaagaa
+actgcttcttctcacttagacagggaatctaaaaatgtcaactcataaaa
+gcagaaagtagaatggtggttgttggtgcctaagggtgggaccatgagga
+gatgttttcaaagagtacaaatttttagttataaattgagtaagtctgag
+aaatctaatgtacaatagcattagattagcaaaatagcattgtttatagt
+taatactataatgtatgcttacaatttgctacaacagtaggccttaagtg
+ttcttattaccaaaaaaaatggttagctatttgagtaatagatgtgttga
+tcaacttgactatattttacaataaaatatgtgcatatcaattataaaat
+atgtgcatatcattacattgtaaatattaaatatagttatactattttta
+tttatcagaaaaattcatatcacgcaaacacagatatatagtaagtactc
+aatgtaaaaaacagattcttgaaaactgcaactataaatgaagcaatgtt
+actatataccaaacataactcttgtttacgtcaattaaagtctggtaaaa
+ttagtttggttttggtttttttggagacagagttttgctcatgtcgtcta
+gactggaatgcaatggcatgatctcagctcagtgcaacctctgcctccca
+ggttcaagtgattctccggcctcagcctcccaagtagctggattacaggc
+gccccccaccatgcccagctaactttttgtatttttagtacagatgggat
+tttgccgtgttggccaggctggtctcgaattcttaacctcgtgatccacc
+cacctcagcctcccaaagtgctgggattacaggcgtgaggcaaggcaccc
+agccctaaaatacgctttctaaaatgatacgttgcttcacttcgtttcca
+agaatctatcaacaatgtaagagtttattatacacatatataacttattt
+aggtgtgtgtgagagacacacatttttatatagatacagatacacgtcaa
+tgacagaatctcaggcttcctactaaataagacaaaattataatagttat
+taagaaataaggtaatgattgagcgcttaatattagcaatgttctaagct
+ggttaatgacatagaacatttaagaaatctagaaggtgagtaaacacttt
+aatccagtgggggccaaaactttgaatgagagggcttttttgcttatcta
+aggtggtggatatcacaaaacttattcacgaacctttttctttaagctca
+tcagctatcattagtattaatgtatttcacgtgtggctcaagacaattct
+tccaatgtggcccaaggaagccaaaaggttggaaacctgtgctttaaact
+atattataatttgaaaattttcacatacagagtttaaatcacaaatctca
+gtttatactaaaacgataacattctgaagtaacattacattttttcatat
+ttaggaaaatgcctattgttctgataaaattgctgagtaataatttttgt
+agaattatatttgcaacctctataggattaaaaatcactaagcagaaaag
+acgcaacatctgtccctgatgttcttgggatttctgaaccaaattccaat
+atgtccactactcaccgtgcacattttagacatgtacaaaaagaatattt
+gaaaaaaatacactgacatagagctcctcaatatacacatattcctatgt
+ctccaaatgcaatggaacagcagtcagatcatgcagcccctaataaacga
+taaagtggacattggctctccctgtaaacttgaagggagatcactaaaga
+aaaaagagaattcttagatttaacagcatgggacagaagatgcccctatt
+catgaatatgagaaaaaaatgcagccttttcagaaattattttcactgga
+gcagagcttcccaaactacattttaaggcctagcttccttctggaccttg
+gtcccctggcctgtgtcctctccttcattcactgtcacctacctgggtgt
+ttggctactgtctcatgtatcttcactttgtagggctcctttctttgctc
+cagatagatgaccaggtctgggttagagatagcaacacctgtttatttta
+aaaaattaacatgctactgttagggattctccaattacctacctaatact
+atactaagtagaaaagagaaattatggaagatcctacataattaatccaa
+aaattgtttcctggcagaatctttaaaatatttaagtattttaaatctgt
+gggttctaagttccactaccaagtactactgaatcaaaataagcggtgca
+aattgtattttaagatgtgggaaacaataatttatgtcattgaatttcga
+gaattaccactaacctaaaatggaggacacaaattagctcaagaaaagag
+aaggtttacgtaaagataaaacatcttaatattcttttttacaccagcaa
+actcccaacagtttcttgaagaaagaaactgaaattcacacaaagcagaa
+ggttcccaagagacattctacaaaaatagaaaataaaactccctgaggga
+gtattaggaattatttactgaagttatcctcacccagggagatcaggttc
+ctgtagttctccaacatcacatctctatacaaattctgctgggcagggtc
+caggcatttccactcttctggagagaattctatggccacatccctgaatg
+ttaagagttcctgaaaatatatatgtatcaagtgacagagttcttaattt
+gactacaggtgaaatgagttaagagaactagttctgacatgtgactgact
+gagattatctgataaaataactttcaacacagtaatgttctctaaagtat
+tctatagctctgcagaaaaaggatggcattccaacagtttctgttcctgc
+aataaaaataacgggctacactgacctgcccctaccaaaaccaagcagag
+taggccctgtgacctcctggaaaaaaagatttaactcagctctcatgaaa
+gtatctggaatgcctcacgcttgaccttggcctcgctgtaatatgcgagg
+aacttaatttaaaaatcagaaatgtttccacccagaacaacagacaggat
+ctgtggggagggcacaggtgatgatttctcttcaaattgtccgtgtgatc
+ctactgcaacactgggctgagagtcacttagctaagcgctgcctctcaag
+cttcaatgcgcataaaaattattttatattctcggcctcactgtaacaaa
+attttgcaggtttgaaaagagttcatgaattagcttcttatagcaagtct
+tctgttaatgctgatgttcctccacctagacacattatattaccactcgg
+ctagagaaagcaggcacagcatagagtcccttaccccaacacccttatca
+caacacaaatacttttcatcccaagacaagaccacaaatcatcatcctga
+agcacagcattctctggaggccgtttaaagtttacagaggctggagatgg
+tgtcaatgtctgagtaagtctgcatttgaaaaacaacatgtggtccaggg
+gtggtggctcatgcctgtaatcccagcactttggaaggccgtggtggggg
+gatcacaaggtcaggagtttgagaccaccctggccaatatggtgaaaccc
+tgtctctactaaaaatacaaaaattaaccaggcatagtggcgtgcgcctg
+taatcccagctactcaggaggctgaggcagaaaagtcacttgaatccggg
+agctggaggttgcagtgagccaagaccatgccactgcactccgcctgggc
+gacagcgagactccatctcaaaaaaaaaaaaaacaacaaaaaacaacatg
+tgcgcctgcattaatgcggtatttatggagcatgtactatgtgctcagga
+gtatgtcacagagcactgtgctaagacactcacattatgtgtaaattctt
+aggacatcctgggaggtgggcactaagtgtccaatacttcccaggattta
+aatacagggcccagaattaccatttcctttctattttcctacaattgatt
+tgttttttaaaggtatagaataaccggtcaatataaatagatcacaaaga
+aacaaaggatgtattaaatgcaattcagagaaatttatttttgtgttgta
+tttaagatttgtaaaaaaaaaaaaaaaaaaaaaaaaactgcagggatgga
+gaacaggttgctggatgagatgtctctagaaacactggttttaattttat
+aaaaaagaatttaaggcacaaaagtatattgcttttccccatttatctgc
+ttttgtgtttcaggaaattgggagcaccagctttggagaggcagtaggag
+tagtcactccaaactctgatctcctctaagcagttccgagagatttcagt
+gtggggtcagacctggacaaggttcagtagagggtggatctgggcagggt
+taggacagagagtgggccctagacttctgttctctatgccgctaagtttt
+ttcagttttgtcttttctaagcctccccaagagaaatttgattcccagat
+tttatgaaattttaatctattttagccacttctctgtgtctttaataaca
+tacaacaaggaatttaaccaaatcccttatgtttctctagcacaattata
+ttagaagctaaatatttattcttagcaaggtaaagacaatacaacttctc
+ttctgtcaattaatagtcattcaggtggtggcatcaaaactcacaaaaca
+ataaaagggaagtaacccaaatgaagcttaagtgtcctgtacaatttcca
+tctttgtactgaacatatgatgctgaattcaaccatttattcatgtgctc
+cagactgcaagttccttgagggtagggaccatgactgcatcacctctttt
+tctaatggaccatatgaaatagaagtaattagcttatggattagtttgag
+tctccggatctcacttttcaccaaaaaaaaaaactagaaacctggagcaa
+ctcttatttgggtacaaaccaaggagattctttgaggggagaaacaaacc
+ctgaataagtcatttatcttcctctaaaatgggagcagaattagaccttg
+ctgtcagactgaccccagtctgcacaggacatccgcagatgtctcaaata
+caggtgctggttgagtgtccccagtgaccttgggctgatatccccatagt
+gatccaggcaggagagattcaggctcaattagtgggatgcaaacagaaaa
+tgaaacagccctggtgaagctgcagatcctggatccagacgtgatagccc
+ctgtccctgatcagctaactctgaggcaaggggaaggacaaaactactct
+actccagtaagagtttacggggaggcattgttgtgactttggctctgaat
+attttgtggccctgaactcccactgctaaggtgcttttttacacttaaca
+gattctgccacaggattcttctgttcccaccagaagcctcccacacaact
+atatcaggtcactggacaagatctggaaaactcaaagagctccacctatg
+ttgacctctcatgatgtagaaaatgtcttctatgagttttctgttatgtc
+ttcagcccaaagtctggtcctgtcttgtgaatcctaggcagaagtcagtt
+tttatgtgcatattctaggtgggatcaatgtgcctcagcattcttagggg
+ttacagtaagcagagtaaaaccagaggtaagattctctcatggaggctcc
+ttcaacacattctaaagaatattttgacctaaaaggaaaaacctggggta
+aacacaagtagaaagtttatttgggccaaaacttgaagatgcaacactgg
+aatataaaggtgccctgaatatacgctccaattagaagcagttatgagta
+tatatacacatatatacacatatgtgtatatatatatacacatatgtaca
+catatgtgtatatatatatacacatatatacacatatgtgtatatatata
+tatatacacatatgtgtatatatatatacacatatatacacatatgtgtg
+tatatatacacacatatacgtatatatgtgtatatatacatatatacaca
+tatatatgtatatatatagttttatatatataatttatatataaatatat
+atttataaattatttatatataaataatatatttgtatatatttatatat
+tacatatgtaaattatatatataatttttatatacataaatatatatact
+tttttttttttttttaaagagatggagtttccctcttgttgcccaggctg
+gagtgcaatggcacgatatcagctgaccgcaacctctggctcctggattc
+caatgattctccagcctcagcctcccaagtagctgggattacaggcatgc
+gccaccatgccggctaattttttttttttttttttttaagtagagacggg
+gtttcaccatgttggccagtctggtctcgaactccggacctcaggtgatc
+cgcctgcctcggcctcccaaagtgctaggattacaggcgtgagccaccat
+gcccagctgacgagtatatttttaaaggcaaaaagggaggcagagaggga
+actgatagaaagttgtcagaaattcttattggcttatagaagtaagtggt
+tagtgactggctatatacattaacatataaggtgtgggttatagtgtcaa
+gtatgaaattattaggttaatttatagccatttgtggccaggcatggtgg
+ctcacgccggtaatcccagcactttgggaggccgaggcagagggatcaag
+aggtcaggagattgagaccatcctggctaacacggtgaaaccccgtctca
+gctaaaaaatacaaaaaattagccaggcatggtggtgggtgcctgtagtc
+ccagctactcaggaggctgagacaggagaatcacttgaactcagggggca
+gaggttgtagtgagcaaccactgcactccagcctgggagacagaatgaga
+ctctgtctcaaaaaaaaaaaaaaaaaaaagaaaagaaaagaaaaaattat
+agccatttgtggcaatagcacacaattacaaaagacaaatagttcaaaga
+ggggaacagtacatgactgtggtctcattttaacacatcactgggtctga
+tcattaaaataacttgtatttctcagataaaagttctgtgcttctctcaa
+atcccaggacataaattcagaatttggaactacatatttaagacttggag
+ggctggtgagctatgcacatttgtgggcatttgggcaaagggagaaggga
+gttgaagttctcaggtttaccctagaagaaaacctaagcaatatcattca
+ggacataggcatgggcaaggacttcacgtctaaaacaccaaaagcaatgg
+caacaaaagccaaaattgacaaatgggatctaattaaactaaagagcttc
+tgcacagcaaaagaaactaccatcagagtgaacaggcaacctacagaatg
+ggagaaaatttttgcaatctactcatctgacaaagagctaatatccagaa
+tctacaaagaattcaaacaaatttacaagaaaaaaacaaccccatcaaca
+agtgggcgaaggatatgaatagacacttctcaaaagaagacatttaggta
+gccaagagacacgtgaaaaaatgctcatcatcactggccatcagagaaaa
+tgcaaatcaaaaccacaatgagataccatctcacaccagttagaatggcg
+atcattaaaaagtcaggaaacgacaggtgctggagaggatgtggagaaat
+aggaacacttttacactgttggtgggactgtaaactagttcaaccattgt
+ggaagacagtgtggcgattcctcagggatctagaactagaaataccattt
+gacccagccatctcattactgggtatatatccaaaggattatatatcatg
+ctgctataaagacacatgcacatgtatgtttattgtggcactattcacaa
+tagcaaagacttggaaccaaccaaaatgtccaacaatgatagactagatt
+aagaaaacgtggcacatatacaccatggaatactatgcagccataaaaaa
+tgatgagttcgtgtcctttgtagggacatggatgaagctggaaaccatca
+ttctcagcaaactatcacaaggacaaaaaaccaaacaccgcatgttctca
+ttcataggtgggagttgaacaatgagaacacgtggacacaggatggggaa
+catcacacaccagagcctgttgtggggtgggaggagtggggagggacagc
+attaggagatatacctaatataaatgacgagttaatgggtgcagtacacc
+aacatggcacatgtatacatatgtaacaaacctgcacgttgtgcacatgt
+accctagaacttaatgtataataaaaaatatatagacagatagatataaa
+aaagaagttctcaggtttaatcaatgcacatgtgtgatcctgattgggat
+tatgggccccatgatcacggaatcagtgtcagatttgaagatgccaggca
+cactgacgaaggaggaataactgattgcagtactaaaaagttatttttgt
+agaaatccagtataactgttatagaagcgactgtagatagaaggagagac
+cattctgtttccagatttggggagcactttgctgcactttgtgcaccttg
+ccaccaaattatgggttgtgagtggaatcctgagaaaggtttttctctaa
+agtgaagcctagagggcacttgtgtataatgtctggtgattctggacagt
+gtgaggaaaaatataactaaaagcaaaatcatctccaatcctaaaaaact
+ccacaataatagagaagtaagaaaatgttttgttacataattaaaccaaa
+atgtgatgtgcatcataggcaatctactaagagactacaaacacagaaac
+tcaccataattctcaagtagaagacatgacagcaccatttgtcatatacg
+gcttattgtaatttcacctagtaatctgagaactcatctgggttttctaa
+ttggtaatatttatagaaaaaataaacttccaacatcttcatgacaggag
+gcagatttgcaacgtgaggctaggtacctgctgaaggcagcctattagtc
+gcctacagaaactgtgggataggatgcatgttcttgctattcacttttca
+aagcaatagttttcaggtcctagataaagacaagtttgactcaaaaaaga
+caaatgacttatttaactgacaaaaatgacatataaattttaaagaagca
+gagaaaatacttaaatataaaagttttcgagacaggagcagtggctcacg
+cctgtaatcccagcactttgggaggccgaggtggacaaattgtaacgccc
+aaccttgtttctactaaccctgtttttagactctccctcttcttttaatc
+acctagccttgtttccacctgagttgactctcccttagctaagagccaga
+cagactccatcttggctctttcactggcagccccttcctcaaggacttaa
+cttgtgcaagctgactcccagcacatccaagaatgcaattaactgataaa
+atactgtggcgagcaatatccacagttcccaggaattcgtctgattgata
+acgcccaaaagccccgcgtctatcaccttgtaataatcttaaagcccctg
+cacctggaactgtttactttcctgtaaccatttatccttttaactttttg
+cctactttatttctgtaaaattgttttaactagaccccccctcccctttc
+taaaccaaagtataaaagaaaatctagccccttcttcgggccgagagaac
+tttgagcgttagccgtctcttggccgctggctaaataaacggactcttaa
+ttcatctcaaagtgtggcgttttctctaacttgctcaggtacaacattaa
+cacctgaggtaaggagttcgagaccagcctggccaacatggtgaaactcc
+ctctctactaaaattagaaaaattagctgggcgtggtggcacaggcctgt
+aatccagctactcaggaggctgaggcaggagaattgtttgaactcgggag
+gtggaggttgcagtgagccgatatcacggcactgccctccagcctgggca
+acagagtgagactccggctcaagaaaacaaaacaaaaaatgttttcaaac
+taaatgctttaagaaaagggagaagagcaaaaattattccctcattctaa
+agagagaccattaagccgcgtctaatttgggtttgctcctgcaacagcca
+ggtttaaaggcatggtcttgaagtcactaacgtctgaattctcgcaggca
+agtgagggatggacttgggcacactgtgtgcacaggaaataagatttgtg
+aggaagaaaaaagcagaagagagaaaggagctatcaagagtcatggtggg
+gacagggcaggactgactaaataaaagactagtttgtgctacaagtgcag
+gtctaggcagggttaccatctgactgattcatgtgtccataaaggcagag
+gagattaggatcaggtggtccagaagcctgggtgggggaaggaaacaggt
+tcctgctatagatccagtgtctggggttgaaatgagccaggagtcttcct
+ggcactgtgtgtgttattggcagaataccctaggagcaaagctgtcacgg
+gcacaattcctgagggtagaaccctgtcctgggaggagtgtggcaatgcg
+aatggccagtgagcgtcctcgggagtgggttagcattaagtgggggctgg
+cagcagggtgcagggaagggatgtttctcagaactcctttcctctaagtt
+cccagtcccttctctccccggaaggagacctggaggaaaaggacagtgcc
+cagcgggacagcacatgtgcagaacccggccgcgcctcccgcagacacca
+ggcatctttctccagcccaggctcagccatgtctttcttctgacagaaaa
+cgtgcggagtttgctcaacatcagtcaatgctccaaccccaacgcggtgt
+ccagcaactcactaacgacaccacccagagtcagcgaagaccccacaagc
+tcagcgctcttcccgcagctgccccccccctgcagacggcagtccctgcc
+tctggacacccgtcttcatttctgaacgcctgcctacaaaccaggggcgc
+ccacaccctcctcaagttcaataatgtggcagaactactcacagaactca
+gcgaagcgctgtgcgcgcccacaccagcgtattctaaaagatgccactca
+ggaacagccacgcggaggaggcgcacagggcaaggggactggtgggcaag
+ttggagcgggcgggtgatttgcttcgcttcctcacacacctcacaaaagc
+ttttccttcaagacccgctggcagcccccaaaccacaagccatgcccggg
+gctgtcccattaattagtccccatttgctcacatgaactctatgttttga
+tagggcctcgatcttattccgaacagggtaaagtagggactcgacgaccg
+gaccacagctcctcccaggcgggcacctcgcacgccacgcaggcgttttc
+ccgatgagctcctcctcaccccacagcccagggaaggtgcggggctgcgg
+gcgcagagctgcacaagtagggctgcaggctgggccaaagccgccttgcg
+gggaccgacatgaacccgggtccctcaccggaagggaccaaggactgagg
+gctgagcggcggcagcggagactccgttcgcagactccgtcccgccgccg
+ccatttcccgccggttcggatgaggcctccccagccttgggacgccctgc
+ccccacactcaccatttccccacttcaggggtgtagcggagtctcagcta
+cgaatcatccaatacccgcaggtcacagagcgacggaggctgaggctgtg
+accgaatcaccgacgcctccctgaggggtgaaagcacggccgtggagacc
+ctaaccgagctcacgctggcgcaaaaggcaaaagccgcgccagatcccgg
+atgccgccccctcctctccggctgcgcgcctgattgggcagttctcaatc
+cagcgctctgattggataagataccaagctccccacgctcagaatttgag
+tgacagaacttgccaccacacagtgcacttaatgaggcaagagagacaga
+ctcgtgcctccaggtattttcagtcagggctttctgtgctaggcttggct
+ctgttgggggttcatttttaaccttctggtgtgtaaggttacgcccattt
+ataaattgtgtacgtacgcgcgcgcacacacacagacacacacttgttca
+caaatggaaacaatataatgacaattattttaatattttagatttcataa
+cctctctgtcctctggtcttttgagtaggattttaagggggaagcaatcc
+tttaaaaaataaaatgttagctatttgtgaattttcaattttttattagc
+cacatcaaaaataataaaaagaaacaagtgaaattgtttatattttaacc
+tattgtatccaaaatattgtttcaatatgtgatcaatatataattagaaa
+taaagtatatttctgatttaattcgtctaaactcactgtgtattttatgt
+ttgcagcacattttacctcaaaccagccacattccaggtactcagtagct
+acatatgtctggtggctgccacatcgagtacagccatgagggctctgacc
+tcaagaaagtgagggcctgaacacgtcttttctactggaagtaagggacc
+agcctctctaccaacttttctcctcaggatgaaggatgggtaggacagtg
+cccctagagagagcaggggctgcaagctgagagtgtccacgtgaagatca
+ctgtctcccccttgctgtttggtaccagtgtggtggtctcctcagttcaa
+ccacgtctgggctctcttcccatgaccaggaagaataagacatacagaca
+ccagagagtgagtaaagcagaataggatttattaagcatagggaaagctc
+tcagcagtaagaggggacatgaaagcagggtgccagaaatggggctgagt
+ttatatggcaagaacaaggaagtcttctgtgggctctgcccaaatgggag
+gggtaaagttcccctataacagtgttgcatctgagcatgcctgggattga
+ccacagtgactccgtcttggttattacccatgagtgcccaagcgaaaccc
+acagcaggtggaaagggtgaagctaaaaccaaaatacttatgtcatgtta
+ggtaacattataaggagctgggtcaagttaatgacatttaggttgattta
+ttacacctgggcctaagtggggacagtcccttctgatcaacatcctggca
+taagaggaagttcttaaccacatttcttcccactagctacaagggtggtg
+catgtgcggtcccatgggtgtttttcctctccagagaccctccctcccta
+tcttcctaactagcttctgactgcctcctctctcaggggttcctcttcct
+tttaaatatcagacagtaaacaaggaatgatgggtccacaggaagagaga
+gcaccatgtattcagatctcttcacagccttgccctccagagtttagatg
+tggagggaatagattaaaggcaaatttcttgttttgctatttatctttgg
+acctgtcaggctgtaactgtgtgtttttctcctgtggtgtggggcactgt
+gtgagtttaagcaccaatcacatgcatccacttctacctgcacttctgtt
+cccagaaggaaggccgtgagtgtgagttgtccaggtccttgatattttga
+acaaagaattgaacaaaatgcaaaatggaacgaaacacatgaaggaaaca
+gcaaaagcaggggtttattaaagcaagaaagcactccacgggatgggtgt
+gagccccagcaagcagctcaaggacccggttacaaagttatctgggtttt
+aagtactccttttgaggtccctatcagctaccccttatctggatgaaaga
+tttggtccgtggctaatcaaaggctgaggtgaattggtaccccatgcaga
+tgaaggcatggcctgtgcttggcccacggccactccaagtcactctcctt
+ttctatcagagaactggtgcaaaggagagggttgtagcaacagtcacctt
+tgatcctttgctactcaggtgtagatgaggttttccttttggtttagatg
+taggaagttcacgttaattggccttaggttccctgctcccagaccttggt
+gtttcttctttaggaattcagcacgaattggccttaagttccctgcctcc
+agaccctattctcttgcctcacttctatataagtcaataccatcttacaa
+caaatttaactttaaataaaggaaacacaatatcaatacttacagggtgc
+caagcatttgcaggttatttgtaatcaatctgtcctggaatcctggaatc
+ctgtctttaatgggtgtatatattactaagctataactgcataacaatcc
+tgaaacatactagctcagggttgagctggttagaaatttaggctgggctt
+agctgggccattcttctgggctcagtttggctccttcaggtgtgagtggt
+cagatgctggtgaattaggtggctctgcttctgggagtgagctgtctgta
+aactggcgcactttggctttcctcagcatgctattttatcctccagaaag
+ttaaaatgggcttgttctcatagagatggaagaattctgaaaaagataac
+agaagcatttaagaccttttgaacctgggccccaaactggcacactgtca
+tatgcacagcttcggcctgtgcaaataagtcaagagagattcaagtttgg
+gaaacagaatctgtttcttgataggaacaactataaaagccatttccaag
+aacatgaatacaataagaatttttttaattgctgtttttgcgatcaattt
+tatcatgacttttcttgcagatgtggcttatataactatcccacagctac
+caagcagctggcttggactcaggattgatgcttccctaactctgaagccc
+ctgcacctccatagaccacactactcagccagcttttcgtgtccttcacg
+gggctgaagagtgacacttctgaaatagaagcaagatttttttttttttt
+agaatctcatcccatccaccccttactcttcaccattggaaataattcac
+tccagggaatggttctgaagtctcttggaaaaactggcaacaatttgagg
+aaattgctgagcattgggtttaggaaattaatgcccaacgttacattttt
+aatttatcataggagaaatttgaaaacacctataatgcactcaacatagc
+tgcaaactctttattttttgtatttgtagactatttatgatttttaatat
+agactaaatcaaattactgttcctgaaacaacttttgctctgcaggcaag
+tgacatagcaatagggctgctgatattttttcctgctgcaatttagccaa
+ccagcagagtatgctttgaagggccaagatgttttctaagaccccacatt
+taggagcagctatagggcaaatacctagagcacacatagaaatcacacat
+aaccaattcattccttgccctgaatcaatgcttctcacccttggatgcac
+attagcctgttgtgcatgtaggtggtggtatttaaagttcccaaacccaa
+attgcaagggaataattaagccagaatccctagcttaagacccaggcaaa
+agccagtgtgatttaaagctctccaggtgattacaatatgcaaccatact
+cccaaatgtctgctgtaaaccaacatctttcagagaaccagttgaaaata
+tttctcaaattaatgtaaaaagtgtttgctgttgagttgtggcctttcag
+tcttactcatattacccacattctttcctttgcaaaactgacctctgcta
+cttgttttgttcctgattcaaaccagttccacacacactgagtgcacact
+gtgtgcagcccactgtgctaggtgaatattgttgtggaggaaggactttg
+ctgtaagaaatttacattccccaaaactaaaaccatgctacttactcaat
+tgaaataaaaaatgaaagactgagggggactcccaagggtcaagacatgt
+atgcataccttggaatattagtatccatctcatgatgactgaatgtaaat
+gctccactatttttttttttttgatatgcagtctcactctgttgcccagg
+ttggagtgcagtggaccgcgcctggccaatgccccactttcaaacaaaac
+aatacgaaacattgctattattctgaaatattaagttagtattaaatatg
+taatatttacatttttattgatgtataacatacatacagaaatgcatcca
+caatgaaatattaatgtaatgctcaataatttataacaaagctaatacat
+tcgtgtaactatagaatggaactacccttgtttttccccacaaaccactt
+cttcttttccttccccccaaatctaaccacaatcttgagctaatgttata
+gatggttgtctttttagaaaagtcttttattagagaatattttaaactta
+tacacagtaaccaatatagtataataggctgatgctcagcctcaacatct
+actaattttgtctcatttatgtttaatttcttcttcacttttttttcttt
+ttttttttttcagacagagtcttgctcttgtcgccctggctggagtgctg
+tggcgcgatctgggctcactgcaagctccacctcccgggttcactccatt
+ctcctgcctcagcctcccaggtagctgggactacaggtgcccaccaccac
+acctggctaattttttgtatttttagtagagatggggtttcaccatgtta
+gccaggatggtctcgatctcctgacctcatgatccacctgccttggcctc
+ccaaagtgctaggattacaggtgtgagccaccacacccagcctcccatct
+ccactttattattgtttttagttattttctgtaagataagatgtatatgc
+attgaaacatacagtctttactgtacctttttgacaaatcaatacatcca
+tataaccttttctctttcaatcatagaattactgccacttaacaattatt
+aatatgcatgtgaattacctggaaatatttgaaatccagattttgataca
+atatatctgggttttgcctgaaaatgtgtatttctaacaaagtacagatt
+catagagcacatgataactacaaggtctattttgtctaaagtgtataaaa
+cttgatgaataaaattaagaaaaattgacctcagaggaacaaatcaaaat
+gcatgtgcaatatgctatctgtaggagcatttcatcaacaatgactcaca
+gtcatgtgtgacctttactgaattgcccaaaattcagtcatttataccaa
+gtgcacttaaatttcataatttcctattaaaattatatttaatgccttta
+caaaatctaacagttttcttataaaattaagtaacaatatttgatatgac
+attataagttccatttatattaaacttaaacttacataattttattagac
+tgtgtctatgcatctaccactggatatccttttggcttccagcatttgca
+caggcaccacagctgagaagcacaggacagattcactagacacaggatgt
+tccctgcatctttatctctaaagttcatcagttagccaagtcaggtgaga
+attgaggtcatgtattcgctaccatatagtgtctcatggaccctctcttt
+agagggaaaagagactagaagattcttttagggagcagttcctgggacaa
+gggctaagctgcctaaggagtgagcattctgtccagcaggtacagacttc
+tcagaagagaaagacgaggcagccattctgaacctggagctccattgccc
+cttgtcccatctcattaagacaattctgaggggttgttctggaacatgtc
+tggatgatggcagttaaaagacagtatgagctttgatgggacttgggtaa
+ggtctgtcattggaaggtaggaggccaatgctcagcctctcagtttgtgt
+tcttgaggacaaagggttgccattttaggccctagtccattttcactaaa
+gagtaggctagagagtctgcatggctcccagattccatttatgattattt
+cagggggtggggtcaggaagggtctaagtctcaacatctttgggaaattc
+tggaaagcctgttttggaaacccggaaagaactcttgcctggtgcctgaa
+tgcttgatttgctgttctgcatttatatattcttcgcagccagatagcca
+ggtttgcattcacaccgacagagctgtgagtcacaggttgaagtggccag
+aatgagtgtcttggtggcaggctagggtacattatgatagcaaacttcaa
+gactgtttacatgcagcttggcaatcagggttgagtcctagcccaggtgc
+ttagatgcagcatggggccaatcaataaatcacgtccaatccttcagctg
+tctatgaggtaaaagggagcccagttcatgtcttgactggggggctctac
+caggtgtttagatgacaccctggatttcttgacttctgacttacttataa
+gaacagattcaggacagttgtattcttggatgtgtgaactgtcattaccc
+tgctaggataatgtgagacagattgcattaaaatagaaggtgttagaaac
+ccctgacaatagggagaaaaatcacaaactcaattaaaaaatacacagaa
+cttatttaaaaaattacacattaaaataagttggccgggcgcagtggctc
+acacctgtaatcccagcacttgggaggcgaggtgggtggatcacaaggtc
+aggagattgagaccatcctggctaacatggtgaaaccccatccctactaa
+aaatacaaaaagaaaattagcctggagtggtggcaggtgcctgtagtccc
+agctgctctggaggctgaggtgggaaaatgatgtgaacccgggaggcgga
+gcttgcagtgagccgagatggcaccactgcactccagcctgggcgacgga
+gcaagactccatctcaaaaaaaaaaaaagaagtaaaaatggccattttgc
+tgggcgtggtggctcacgcctgtaatcccagcactttgggaggctgaggt
+gggtggatcacctgaggtcaggagttcgagaccagcctgaccaacatgga
+gaaaccccgtctctattaaaaatacaaaattaaccaggctttgtggcaca
+tgcctgtagtcccagctactcgggaggctgaggcaggagaatcacttgaa
+ccctggaggtggaggttgcagtgagcggagatcgtgccattacactccag
+cctgggcaacaagagggaaactccatctcagaaaaaaaaaaaaaaaaagg
+ccatttttcacaaggcgcccaacttcaatgtggttagaaaaaaaagctcc
+aaaatatatgaattttgtctggcatcactttgggaaattaaatgttttct
+aacattgtctctttttatgagcagtagaaacacactgttcatgcttgtaa
+agtgtataaacggtcaataaccttttgaaagataatttgaaaatatgtat
+caagagttgaaagaagccaagcacgatagctcacacctgtaatttcagca
+ctttgagaggggaaggtgggtgacttgcctgaatccaggagttcaagatc
+aggctgagctacatggcaaaaacccctatttttgcatataaaaaatgcaa
+aaaatggccaagtgtggtggctcacacctgtaatcctagcactttgggag
+gctgaggtgggaagattacaaggtcaggagttcgagaccagtctggccaa
+catggtgaaaccccgtctctactgaagatacaaaaattagtggggcctgg
+tggcacacacctgtagtcccagctactcggaaggctaaggcaggagaatc
+acttgaacccgggaggtggagattgcagtgagcagagattgcaccactgc
+actccagcctgggtgacagagtgagactctgtttcaaaaaaaaaaaatgc
+aaaaactaccgtggtgttgtggtctgagcctgcagttccagctacttgag
+aggctgaggtgagaagatcagttgagtttgggaggtataggtcctaggag
+ctgagattgtgtcattgcacttcagcctgggcaacagagtgaaaccacat
+ttaaaaataaaaaagaagttgagagttacatgttcttgcataaaggattc
+tacctgttgaaggacatttcataagaaacttgagcatctgcacagagatg
+ctcacactagcatgttgttggtgggcatatacataatcaataaataagaa
+gaaacaagtggaagtaaaaaaagaaaaagaagaaggaaaagaaggaggaa
+gaggaggaggagaagaagaaggaggaggaggaggaagaagaagaagaagg
+ggtgcacacatatacgtgaattttttttggtcatgaacacctagaaaata
+tctttcttgacattaggaaagaattgggaaagaatttttggccaagttcc
+caaaagcaattgaaagaaaaacaaacattgacaaacaggacctaattaaa
+ctaaaaagcttctgcacagcaaaagaagctatccacagagtaaacagaaa
+atttatagaatgaaagaaaatctttgaaaactatgcatctgacaaagacc
+taatttccagaatctgtaagaaatgtaaacaaccaaaaaagcaaaccaaa
+acaaaataagcctattttaaaatgagcaaaaacatgaacagatacttatc
+aaaggagaatttacaggcacccaacaaacatgaaaatatgctccacatca
+ctaatcatcagagcaatgcaaatcaaaaccacagtgagataacatctcac
+accagccaaaatggctattattaaaaagtcaaaaaaaggaagatgttggt
+gaggctgtggaaaaaatggaacacttatacactcctggtaagaatgtaaa
+tcagttcagccactgtagaaagcagtatggagatttctcaaagaacttag
+aactaccatttaatctggcaatcccagtactgggtatttattccaaagaa
+acccaattattctaccaaaaagctgtcagtggatctacaattctggggtc
+tggaggatagtggctctcttctcacagctccactaggtggtgctccagtg
+gggactctttgtaggggcttctaaccccacatttgccttccatactgccc
+tagcagaggttctccatgagggccctgcccctgcagcaaacttctgccta
+ggcatccaggaatttccatacatcatctgaaatctaaacggaggttccca
+aaccacaattcccaacttctgtgcacctgcagtctcaacaccaggtagaa
+gatgccaaggcttggggcctccaccctctgaagcaatagcccaagctgtc
+ccttggctcctttaagtcacagctggagtggctaaaacacagggcaccaa
+gtccctaaactgcacacagcagagggacgctgggcctggcccacaaacca
+ttttttattcctaaacctccgggcctgtgatgggacaggctgccacaaaa
+gtctctgacatgcccttgagacattttccccattgtcttggtgattaact
+tttggctcctcattacttatgcaaatttttgcagctggcttcaatttctc
+ctcggaaaatgggattttcttttctatcacattgtcaggctgcatatttt
+ccaaacttctatgctctgtttcccttgtaaaaccgaaagtctttaacagc
+acccaagtcacttcttaaatgctttgctgtttagaaatttcttccaccag
+atactctaaatcatctctctcaagttcaaagtttcacaaatctctaggac
+aggggcagaatgctgccactctcttcgctaaaacataacaagagtcatct
+ttgctccagttgccaacaagttccttatctccatctgagaccaccacagc
+ctggattttattgtccatatcattatcagcattttggtcaaacccattca
+acaagtctctagggagttccaaaactttcccacatttttctgtcttcttc
+tgagccctccaaactattccatcctctgcctgttactcagaacttcattt
+ctggttaccttttgagcagtgtctcactctactggtaccaatttactgta
+ttagaccgttttcattttcacgctgctgataaagacatatccaagactgg
+gcaatttacaaaagaaagaggtttaatggacttacagctccacaatgcta
+gggaggcctcacaatcacggcgcaagctgaaaggcacatctcacatggca
+gtggacaagagaagagagcttgtgcagggaaactctcctttataagcaag
+ccatcagatctcatgagacttactcactatcacgagaacagcatggaaaa
+gacctgcccccatgaatcaatacctcccactgggtccctcccacaacaca
+tgggaattcaaaatgagggttgggtgggacacagccaaaccaagtcaggc
+tcctcctgggcttctgttgttttctgggtgaatgggtgatcccttcccct
+agaggactccaccttaacccagcccctcccagtcagtaatctcccctact
+agtcccccagatgctaattattgctcacttgagtctttctcaccctaatt
+gaaaattaatgtctgattcctctctctcccctgcataacctctgtgaaaa
+atgtcagatgccttagacccaggaggtttcctgcctgtatttcctttccc
+agctctctctcccaggtatgtagactccataaattccttcacacatatgt
+gtccagagcgtaccctgttccagcccctggggatatagcagtgaacaaaa
+aaaaatgcccccatcctgcgggagcttgagttctagttggggagacagat
+aagagtcaagacgaataaataatatgtaagtgtgatcgatagcgataagg
+actgtggagaaaaagagattgagaaaggaagacagtaaatccccgggggg
+aggcagttctgcaactttagaggcagatcagggaagacctcactgtgagg
+gtaacatttaggcaaaggcttgaaggaggtaagggagggagctgtgcagc
+tatctaaaggaagagcagtccaggcaaaaggaacagcaggtgcagggggc
+ctgggaagcccatatgttccaggaacagcacagggccagggtggctgcag
+ggcagcaaatgagaggaggtgcagtgggaggtgagctcaggggggtgacg
+tgcaggcaacatgggccaattctccagggtcctccgggtcatcttaaagc
+ctctggtttttactctgatgagacaggaagccagtccatggttctgtgca
+gagcactgatatgatctcacccagtgttgggttgcaaaggcacttcaggg
+gtcaacaatggaagtggagaccagttagggggagagggatgaaggcaatg
+agtagtcatgggggatgagaagcaattgaaggtggggcccacaggaggtg
+ggtgtgagagaggaggtgaggacagtggcctggatcactaactggaagga
+tggggttttgggaggagcaggtctggggaggaggatgcaatgtgggcagc
+ctgcacacagcacttacagccttctctccagctgtgtgtcagtgggtact
+tgccgctgtgcttttgcacatgctggcctctgtgcctgccagtcattcct
+tgccctgggagaagaactttaactgccctctcaagggtaccttctgtgaa
+tcagtcctgttggcctccacctcctctatccctctctttgcttcatgcac
+atgctggaactcatgcacattgcacaacctcgaccatattgtgccctgga
+aggtgccccagaaataaggacagcgtgccatccatccctgaagcctgtgt
+ttctcagagtgcccacacctcagagtgtccaccacacagtaaaggctcaa
+ccacagactgactgcggacctgactggggtcttgctctccctttaacttt
+aagccccaattggcagcaatcgcagagctttgtccctccctgtgagcctg
+tctggctgtttatgctggatgacatgcaccccctctgccaggagtgcata
+gtctatggcctggccaggcagccattgcagatgagaagagcttcaacctc
+aactttattgtgctgctgggttttttctgctggctcttagcacgtttctc
+atgagccatgattagcctcaggtctatggaaccttctgcagctatgtcat
+ggtgactgaggacatcatctgaagcatgtgccactgctaccccaaggcag
+gtgttggtgaggctgtgtggggataggagggttggagaccatgcctctat
+ctcataaatgaattcttcatccttcaatcatctcctcattctcattttga
+ctctctgtttatttcttactgctctcatgagcattcatccatccatccat
+gtttccatccatactttcatccacccatccattcatctattcatccatca
+cttagcagaggggttgatcagaagcccccaggatctgaaaccatgaaaca
+aataccatggaagggaagaaatgaagcacaacacattactcacgtgctta
+aactaaaagacaatgagtgctttaaagctgaggctgagaaagtgaggttc
+tatagctgagtggcagggtttggattggagctcagatgtgcaaatgtagg
+catcattcttgtttttgatttctccatttcagggtcccagagctttctgg
+ggtgggtcaggtctaatcttggtggaatgcattaagcaattccttttttt
+ttttttttttttttgagatggagtctcactctgtcgccaggctaaagtgc
+agtggcacaatcttggctcacggcaacctctgcctcctgcttacaagcaa
+ttctcctgcctcagcctcccaagtagctgggactacaggtgcacaccacc
+acacctggctaattcttgtatctttagtagagagggagtttcaccacgtt
+ggccaggatggtcttgatctcttgacctcgtgatccgcctgccttggcct
+cccaaagtgctgggattacaggcgtgagccaccgcatgtggcctgagcaa
+ttctttatcttttggagtcttaatgtattcctagccctaggagtgattta
+ggatgggaaaagcactggtatgagagtcttgtgttctattcccagttctg
+tcgcaaactttgtgtgtgatttttgtctttctgagcctcagctttttatc
+tgaaaaatgggactcaagcctctgttttgcacagcctcacagggtataaa
+gatcagagaagagattatagagaagacaattttgtaaactctacagtgtt
+gtaggtaggtgaaaggctgccaggtactgataaccctgagagaaggacat
+gtcagctccaaaatcaaatctgttactttttcatttttatttttaacttt
+agacacaaaaatgtttcctttttcttgaagtacatgcttaagaagctctg
+ataacaacatgaatgtttttctctctctttttttttctgagatggagtct
+cactccattgcccaggccggagtgcaatggcgcaaccttggctcactgta
+acctctgcctcctggattcaagcaattctcctgcctcagcctcccgagta
+gctgggactacaggcgcacaccgccatgcccagctaattttttgtatttt
+agtagagacagggtttcaccatgttgcccaggctggtctcgaactcctcc
+acctgccttggtctcccacagtgctgggattacaggcatgagccactgtg
+cccggccctgtttttcttttgaaaatattttaatttactttttttgttga
+aggtattgcaggtaagtattcatttctagctttaaagataatttatctca
+gattcatttatgtttctttttctggttttcattctatgcagctgtggaaa
+tgttacttccatctttgtacatttttttttctctcactgatttatactgt
+ttttttctactgtggtctcatgcagcttggctatttttcagtatttaatc
+tatttatgttgttgacacactgcatttctgaattcaaagacttatgtctg
+gttttcgattttagaaactataagtcaccaagtctgaatattgactttaa
+ttttgaaaatatattctgtaggccaggcacagtggctcacgctcacgcag
+tgctgtaatcccggcactttgggaggtcgaggcaggtggattacctgaga
+tcaggagttcaggaccagcctggccaatatggggaaaccccatctctact
+gaaaatacaaaaaattagctgggcgtggtgatgagcacctgtaatcccag
+ctacttgggaggctgaggcaggagattcacttgaacctgggaggcggagg
+ttgcagtgagccgagatcatgccattgcactccaacctggacaacaagaa
+cgaaactccaccaaaaaaacacacaaacaaatgaaaatatattctgtaga
+aacaattgggtttgttttagttcctttcatcctacttttcatacatgtat
+atttgaggttatataacttctccttttctgtttttacactgattctgctc
+agtattatagttgactaatctcatcagctaagacaaatgtttcagtgata
+tgttgtaaattaagtagattatttacatttttaattgtttgcttcatatt
+tggctgtttttcaaatatgacttgtcaccctcatatcttcttgttctttc
+cacattattaatatgttgtctattttcctgattgtattgccttgaaacat
+tttaaatgtaaatcctgtaaatgtaggcaacataagttgtaattgtttca
+cattaatgggagataccacaattgcaatgtctgcagttagtttatggttc
+tttccccatttgcctatgtcaacttggtcaacccccaggaacttgtcatc
+tctgtctttacctatatccaagaagagctcttgtttcttagattgatcac
+attctggatagtttatttggtcttcttcactacctagaaagttctcatat
+ttttcttgctactctactcagaattttaaaagttcttgttgctgggcgtg
+gtggctcatgcctgtaatcccaagcactttgggaggccaaggtgggtgga
+tcatgagatcaggagattgagaccatcctggctaacacggtgaaaccccg
+tctctactaaatatacaaaaaattagctgggcatggtggcgggcgcctgt
+aatcccagctactcaggaggctgaggcaggagaatcgcttgaacccagga
+ggcggaggttgcagtgagcccagatggcaccactgcactccagcctgggt
+gacagagagagactctgtctcaaaaaaaaaaaaaaaaaaaaaaaaaaaag
+gccgggcgcggtggctcacgcctgtaatcccaacacttcgggaggctgag
+gtgagtggatcacctgaggtcaggagttcgagaccagcctgaccaacatg
+gagaaccctcatctctactaaaaatacaaaattagtcgggcatggtggtg
+catgcctgtaatcccagcaacttgggaggctaaggcagaagaatcgcttg
+aacccggaaggcggaggttgcggtgagccgagattgcgccattgcactcc
+agcctgggcaacaagagtgaaactctgtctcaaaaaaaaaaaaaaaaaaa
+aggttattgtaacttcctaagaattttagctttctatatttaaagtttct
+agaatatgtattttcccaaacagcaaacatatcaacaaagcatccctgag
+aaaaatatttcacaatttttttggcagagaacagcatctcatgaaaaatt
+tcaagttatttagaatatatctttccctcaattatactacaaagtaacaa
+taattcatagagtgtatttttactacagaaaaactgattttatgtcttca
+caaaattttgaaaactaccccaactggaaggaataatatctaaatatggg
+cagaatgccactttcctctatgattaagataacactcgcaggattattta
+ctgaaattcagggttttggcgtcaatcaccatgcttcatcatgaacactt
+ttctgaatccaaattctatttgaattttctatttaatccagaaattaatt
+ttttaaatcttatagaagttttatgtagatagatattacttgtgaactca
+ctttagtagatgccttcgactgttatttacaatgcctagaaaatactacc
+tgctgggtttttgctctcatgcattcaacgacatatttcggtcctaaaac
+ctttccatttaatgggtattttttgtttactggttaaaaattattcccat
+tggagcgcctctgcccggcgaccccattgtctgggaagtgtggagcgcct
+ctccctgtctgtcgcaccatctgggaagtgagcaacgcctctacccggca
+gctgtgcaaccctccaagtgtgaagcgacagccttgtgtgtgatctttct
+gccttccccaggtttgcattttcgacgttaaagtttacttttaaattaaa
+agttaaaaaaaattcttcccatttatttctatggctatttagtcaaactt
+tcttatacagccatttaacattatttatgttcatgtagttgttgtatacc
+aaaatagttaattgatgcaatggccttaatataacttaataggccgggcg
+cggtggctcatgcctataatcctggcactttgggaggtcaaggcgggagg
+atcacgaggtcaggagttcgagatcagtctgaccaacatggtgaaacccc
+gtttccattaaaaatacaaaaattagctggaagtgctggtgcgtacctgt
+aatcccagctactcagaaggctgaggcaggagaatcgcttgaaccaggga
+ggcggaggttgcagtgagccaagattgtgccattgtactccagcctgggt
+gacagagcaagactctgtctccaaaaaaaaaaaaaaaaaaaatatatata
+tataaaaatcagagtgaaaatgtgagtggctaggagagggagtggatgta
+gaaagcgaaattgtaacaagtttcacttagatgagagaataagtattagt
+gattgattgcacagaatggtgactataataaataataatgtattgtatat
+ttcaaaattgctatgaagtagatttcaaaagttttcaccacaaaaaaatc
+atatgtgagctaaagaatttgtcacttagctcaatgtaatcattttacag
+cataaaaatatcaaaatatgacatcatactcaacaaatatatacaataat
+aatatttcaattaaaagtataatttttaaaggtaccggtttttcttattc
+aataaatgtttaatatattcactttaaactcttaggtgttaagcctataa
+atgtttaatggcttagaataatgtctcacacattgtatgcacaaaatact
+aatgacaataatggtcagattaccttatgctcatagttttctttaaagac
+aatattattttgtatttgttcttattaaaatgtattttctttcttttttt
+ttttttttagacgaagtcttgctctcgtcccccaggctggtgtgcaatgc
+tgtgacctcagctcactgcaacctctgcctcccgggttcacatgattctc
+ctgcctcagcctcccaagcagctgggattacaggtgcgtaccactgcgcc
+tggataattttttgtattttaagtagagatggggtttcaccacgttggcc
+aggctggtcttgaactcctgacctcaagtgatccacccacctcagcctcc
+caaagtgctgggattaccggcatgagccaccgcacccagcccgtattttc
+tgtcttacttaaatattgataaatatagaagggaggctttgttctcctgc
+tttatacattccaaagtcaaattgcaattttattaacttccttcttattc
+agtaattcatttgtctcccacagtaaacgtaagtattaactaacacaatt
+atagtcatattctccatcttaataatgcagtaaaatttgtgttattcatt
+gactgggttatagcctcatatttttatctcatgttatttcatgtgaagta
+cctaagatataaatttttataaaatactatgaactaaaaataaatgtctt
+ttgcttgagctcaggagttcaagaccagtctgggctacatggaaagaccc
+catctctactaaaattacaacagacagccaggaatgatggtgtatgcctg
+tgatcccagctacctgggaggctgaggcaggagggtcccttgaaccaagg
+aggcagaggttgcagtgagccaagatcatgccactgcactccaacctggg
+tgacacagcgaagctttgtctcaaaaaaaaaaatacatacatacataaat
+gtcttaataggcaaaaattatgatagtaatgttatagttacaatgtcata
+gtaatcaaataatgtagtaccaccataggaatagaattatgtaaattaaa
+agaataaaattgaaggtatattaataaacacattaattttaggtaaacat
+aattttgtcagtcatgctaggaaattccaataggagaaattgttcaaaac
+ataatgctgagaaatcagttttcaacatgcaaatataatggatatacata
+catatatgttaaatagaatagagtaaatgaatagccatataacaagtaaa
+aagaaagtattaattaaattattttcacatagaaaagctcagtgtcaaat
+tgcataaattctaaatttcaccaatatttaataatacatagtataatttt
+ttcacaaaaactttcagcaatagcagagataacatttttctattaatcta
+ttagccaggggtactgtggtaccaaaaccgtggctgggcgcggtggctca
+cgcctgtaatccctgcactttgggagggccaaggtgggcagatcacaagg
+tcagaagatcaagaccatcctggctaacacggtgaaacccgtctttacca
+aaaatataaaaaattaaccgggcattttggcgcgtgcctgtcatccccac
+tacttgggaggagaattgcttgaactaggaagtcagaggttgcagtgacc
+caagattgtgtcactgcactccagcctgggcgacagagtgagactctgtc
+aaaaaaaaaaaaaaacaaaaaaacagacaaaataatcacacataaagaac
+actatgaaccaaaattccatataaatatagaattcctgatgaaattatta
+gaaatgttagcaaactaaatccagcaacatgtaaaactgattgcatacca
+tgaccacgtaatagtttgtcataaatgcagtgttggcttaatattttaaa
+aatcaaccaacatattacaaaatgttacctgaagaatagaaaaaggtgat
+aatttaaatagacacaaaaagtatgacagatccagcacccattcattata
+aaacactcagaaatctactagaaaggaacttgttaagacctgctaaaaag
+catctataagaaatcaatacctggccgggcatggtggctcatgcctgtaa
+tcccagcactttgggaggccaaagtgggcggatcaccaggtcaggagatc
+aagaccatcctggctaacacggtgaaaccccatctctactaaaaatacaa
+aaaattagccaggcatggtggcgggcgcctgtagtcccagctattcagga
+ggctgaggcaggagaatggcgcgaacccgggaggcggaggttgcggtgag
+ccaagattgcaccactgcactccagcttgggcgacagagcaagactctgt
+gtcacaaaaaaaaaagaaagaaagaaatcagtagctaatagtatacttaa
+tggtagatgattgcaggctgtatctgtaagtttaaaaatggaacaagaat
+gtacactttttccactctgtttaacattgtactggaagtattagccagaa
+aactatactggataaataaataaaaccctcagattagaaaagaattagaa
+tactattttcttgccacaatgttatataaaaaactataataaatttacca
+aaaatgtacttgagttaataaacaattttattaatgtcacaaaatacaag
+attaataaacaaggttaaataatacttttatataacataatcaacagact
+gaaaatcaaattatgaaaaaaataatgtcataaaaaccatttaggaatat
+attaaaagcaagtacacatgctttacattgaaaattatttaaaatgctga
+aagaaaattttaaaactctataagtaaagatacatctaatattcaaggtt
+atcaatgagaaatattaagatcaaaatacccagcaaatctatctacagat
+tcaatgcaaatttcaaagtaaattattttctttctttctttttttttttt
+ttttgagatgcagtttcgctcctgttgcccaggctgtagtgcaatggtgc
+aatctcggctcaccgcaacctctgcctcccgggttcaagcaattctcctg
+cctcagcctcccaagtagctgggattacatgcatgcctgtaattaaccat
+gcctggctaattttgtatttttagtagagatggggtttctccatgttggt
+caggctggtctcgaactcccgacctcaggtgatccacccgcctcggcctc
+ccaaagtgttgggattactggtgtgagccactgcacctggctattttcat
+agaaattgacaagctgctctttctaaattctatacagacatgcaaaaaaa
+tcaaacacatgagaattttgaaaacaaaaatgaaatttatttctgatatt
+cttactaaaatgttatactaaccaaacaatatggcattaccataagaatt
+gattttgaggtcccacccaggattgatacagagccaaaggaacccccacc
+ccagccaagaaaaatggtgagtgaatgtgcaaccccaggaaaccacactt
+ctctcaaagatctttgcaacccttgcatcaggcgattcagttgtgaaccc
+actccaccagggtcttgggtctgacacacagagctgtgtggagtcttggt
+agaacagctgctcagacacaaacagagtcccaggagctttacatacctca
+gccctgggacatccaacaaagatgactgcaactcaggcaaggtgggagat
+tggtgcatacccctaggaagggggctgaatccaggaggctgagcagcatc
+agtttgtggatcccacttccatggcacttcacaagataagacccacagat
+ttggaattccagctagttactggtaacagtgtagcacctgcctgagatgg
+gtcagagcttctgggtgagggatgggctgccatatttgctgttcggatga
+caaagtcattgcagcctgtgggctttggagagtccaaatgatctgaatga
+ggcagggaccccacagcacagcacagctgctttaccaaaatgttgccaga
+cttcttctttaaatgggaccccaatccatttccctcactgtgtgagttct
+cccagcaggggcctccagctgccccacccatattctatgaacagagttct
+gatttctctctgggatggaatgcccatggtggaggggcgccctgccacct
+tggctgtttgggggactaagccatttaagcctgagggtttggagagtcca
+agcagatttgggcagaggtggttccccagcatgccatggctgttttgttg
+aagcatagtcctactgcttctttaagtgggaccccaattcattccccctt
+gctgggcgggtcctcccagccagggcctccatctacttctgcccaagttc
+taaggccaatagagttctaatttctccgtgggatggagtgcccagggggt
+gcggtgggccaccatttttgctgtttgggcaggtaagttagtgcagactg
+tgggctttggatagcccaaaccatttgagagctgaaggaatccacaacac
+agcacagatgctctaccaaaacacagccagactgcttctttaagtaggct
+gctgaccccattcctcctggttgggtgagacctccaatccaaagccttca
+gccaccttctacaggtgtgttcaggcaggcaacaggtcagtatgcattct
+gacctgacaaaggggcaggctgccatctttgctgtttcacagccttaact
+ggtgatacttccagatactgaaaaagccaagggcaccagggtctggagca
+gacctccagaaaaccacagcagccctacacacagtggtcagactgttaaa
+agaaaaacaataaataacaaaaaataaccacaataaccctatccaaaggt
+cagcaatctcacacattgaaatagataagcccacaaagatgagaagtggc
+acaaaaatgatgaaaactcaaaagtcagagtgtgcccttttctccaactg
+acagcaacacctgtccagcaaaggatcagaaccaggctgaggctgagatg
+gctgaaatgagagaagtaggcttcagaatatgaatacagatgaacttggc
+tgagctaaaagggcacactgtaactcaatgcaacgaagctaagaatcacg
+ataaaacaatgcaggagctggcagccaaaatagccagtaagaagagaaac
+acaaacgacttgatagagctgaaaaacacactacaaggcctccacgatgt
+aatcacaagtattaatagcagaatagaccaagcggaggaaaaaacatccc
+agagcttgaagactgtcttcctgaaatcaaacaggcagacacaaataaag
+aaaaaaaaaaaggaatgaatgaaaccttagaatatgggattgtgtagaga
+gtgaatatacaactgatgggggtagctgaaagaaatggggagaactgaac
+caaattggagaacatatttcaggatatcatccaggagaacttcctcaacc
+tagctagacaggccaacattcaaatgcaggaaatgcagagagccccacta
+agatattccatgagaagattactcccaagacaggtaatcatcagattctc
+caaggtcaaaatgaaataaaaatatcttaagggcagatagagagtaaggc
+aaggccacctacaaagaaaagctcatcagactaacagcagaccttgtggg
+ggttcagacagactggtgaaaaaagttttagttataatagccataaaccc
+tcttggaaggcctgagggttttgcaaaacttcggtaatagatctggctga
+aggcggcctggtcactttaccttaagttattaacttagggcacaaataca
+aacggatgtagagtagtttatctaactaccttgtttactcatgtggtcct
+cagactaacctttgatcttgggtgcttaattgctttctactcgcgaagtc
+ggcaatgtcaattaccttctagtggtgtttactcaaagttttgttactta
+atctttaccaaataaatgcaagtttcgctggctggttggtgtggcggctg
+ctactccctacagcacctctgttagtctgtgaggcagcctggaccctcag
+ttgcactggcaaagcagaatatctgcatcagtatacattgttcatccgtc
+attgagtcagggtcagcgggtcggacccccgcaagacttctcactggaaa
+ccctacaagccagaagagacagaaataacaggctgggcacagtggctcat
+gcctgtaatcccagcactttgggaggctgaggcaggcagatcacttgagg
+tcaggagtttgagaccagcctggccaacatggtgaaaccccgtctataat
+aaaaatacaaaaaattagccaggcatggtggtgcatgcctgtaatcccag
+ctacttgagaggctgacgcaggagaatcgcttgaacctgggaggtggagg
+ttgcagtgagccaagatcatgaatcgcactccagcctgggcaacaagagt
+gaaactctgtctcgaatacatacatacatacatacatacatacatacata
+catacatatatatatatatatatacctatgtagggaccagccccacagag
+tctgtgggtttttctctccgtgtgcggagatgagagatcgtagaaataaa
+gatacgagacaaagagatgaaagaaaagacagctgggcccgggggaccac
+taccaccaagacgcagagaccggtagtggccccgaatgcctggctgccct
+gttatttattggatacaaagcaaaaggggcaaggtaaagagtgcgagtca
+tctccggtgattggtaaggtcacgtgggtcacgtgtccactggacagggg
+gcccttccctgttaggtagccgaagcggagagagagaggacagcttacgt
+cattatttcttttacgctcttttcagaaagatcaaagactttaatacttt
+cactaattttgctactgctgtctagagggcagagccaggtgtacagagtg
+gaacatgaaagtgaaacaggagcgtgaccgctgaagcacagcatcacagg
+gagacggttaggcctccagataactgcgagcaggcctaactgatgtcagg
+ccctccacaagaggtggtggaacagagtcttctctaaactcccctgggaa
+aagggagagtccctttcccggtctgctaagtagcgggtgcttttccttgg
+cactgatgctacagctagaccatggtctgcttggtaatgggcatcttccc
+agacgctggcgttaccgctagaccaagaagccctctagtggccctgtctg
+ggcatgacagaaggctcgcactcttgttttctggtcacttctcaccgtgc
+ccccttcagctcctatctctgtatggcctggtttttcctaggttataatt
+atagagcaaggattattataatgttggaataaagagtaattgctacaaac
+taatgattgatattcatatataatcatatctatgatctatatctagtata
+actcttgttgttttatatattttattacactggaacagctcgtgccctca
+gtttcttgcctcggcacctgggtggcttgctgcccacatacctaaatggt
+ttttatgatattattattacattttgttcttaattttcagtatgttgatt
+gctgttatataaaagatttaaccttgtctattaatcttgtattttgtgac
+attaataaaattttttattaactgaagtatgtttttggtaaatttatcat
+agtttttaacccaatattatggcaagataatagtatcctacttcttttct
+aatctgaagattttatttatttttctagtatacttttctggctaatactt
+ccaggacagtgtaaaaacagagtggaaaaagtgtacattcttgttccatt
+tttaaacttacagatacagcctgcaatcatctaccgttaagtatactatt
+agctattgatttctttttttttttttttttttgagacagagtcttactct
+gttgcctaggctggagtgcagtggctcaatctcggctcactgcaacctct
+gcctcccgggttcaagcgattctcctgcctcagcctcctgagtagctggg
+attacaggcacacaccaccacgcctggctaatttttgtatttttagtaga
+gatggggtttcaccatgttggtcaggctggtctcaaactcctgacctcct
+gatctgcccacctctgcctcccaaagtgctgggattacagatgtgagcca
+ccgtgcccagccagctattgatttcttatagatgctttttagcaggtctt
+acaagttcctttctactagatttctgagtgttttatcatgaacgggtgct
+ggattttttatactttttttgcttatttacattgacacttttttctattg
+ttcaagtaacattttgtaatattttggttgattttaaaaatattaagcca
+acactccatttgtgacaaactattgcttggttatggtatgtaatcagttt
+tacatgttgctggatttagtgtgccaacatttcttttttttttttttttg
+agatggagtcttgctctgtcacccagactggagtgcagtggcacaatctc
+ggctcactgcaacttctgcctcctgggttcatgcgattctcctgcctcag
+ccttccaagtagctgggactacaggtgcgcgccaccacgcccagctaatt
+tttgtatttttagtagagacaaggttccaccatgttggccaggatggcct
+tgatctcttgacctcatgatccgcctgcctcagcctcccaaagtgctgga
+ttacagtcatgagccaccatgcccagccgtgtgctaacatttctaataac
+ttcatcaggaattctatatttatatggaattttagtccatagtcttcttt
+acttgtgattcttttgtctggctttggtatcacagtacccctagctagta
+aattaatagaaaaatgttacctctgccattgatgaaagtttatgtgaaaa
+aattatattacatttttattaaatgtcagtgaaattcagaattaatgcaa
+tttgacactgagcttttatatgtaaaaataatttaattaatactttctat
+tgttatatgggtattcacttactctcatttaatatatatggatgtatatt
+cttcatttttgcacaatgaaaactgatttctcagcattatttgttgaaca
+aacttcctccattggaatttcttggcatctttgacagaattatttttacc
+tcaaattaataccttcaactttattcttttaatctacacaaatcaattcc
+tatggtagtactatattctttgattaccataacattataactatagcatt
+actatcataatctttgcctatcaagagttttttttgttttttttttagac
+agtgtcttgctcttatcgcccagactggagtgcattggcgcgatttcggc
+tcactgcaacctctgcctcataggttcaagtgattctcctgcctcagcct
+cccaagtagctgggattacaagtgcccaccaccacacccagctaattttt
+gtatttttagtagagacggggtatcgccatgttggccaggctggtctcaa
+gctcctgacctcaggtgatgtgcccgctttggcctcccaaagtgctggga
+ttacaggcgtgaaccaccatgcccatctggacatttatttttttattttt
+tgagacaccgtcttgctctgtcaaccagtctgcagtgcagtgtgatgatc
+ttggctcactccaacctctgcctcatgggttcaagggatcctcctgcctc
+agcctcctgagtagcagggaccacaggcatgcaccaccacatatgactga
+cttttgtagttttggtagagatggggtcttgccatgtagcccaggcgggt
+cttgaactcctgagctcaagcaaaagacattttttaattttatactagtt
+tacaaaagtttatatcctagatacttgacatgaaataatatgaaataaaa
+atataaaataggctgggcgcagtggctcacgcctataatcctagcacttt
+gggaggctgaggctggaggatcaccatatcaggagatcagtaccatcctg
+gccaatatggtgaaaccccgtctctactaaaaatacaaaagttagttggg
+cgtggtggcgggtgcctgtaatcccagctactcaggaggctgaggcagga
+gaattgcttgaaccagggaggaggaggttgcagtgagccaagatcatgcc
+actgcactccagcctgggctgtaacttaatcaataaataacacaaatttt
+actccattattaagatggagaatatgactataattgtgttagttaatact
+tatgtttactgtgggagacaaattagttactgagtagttaactgagtagt
+tagaagttaataacattgcaatttgactttcgaatgtataaagctggcaa
+acgaagcctcccttctatatttatcaacatttaagtaagacaaaatgaat
+tttaataagaacaaataaaaaataattatattgtatttaaagaaagctat
+gaacaaaagataatctgaccatcacagtcattagtatttcattcatacaa
+tatgtaagacaatattttaagccattaaacatttttagacttaacaccta
+agagtttaaagtgaatatgttaaatatttattgaattaaaaactggtacc
+tttaaaaattagattttaattgaaatataattattaggccgggcacagtg
+gctcacacctgtaattccagcacttcggaaggccaaggcaggcagatcac
+ctgaggtcatgagttcgaaaccaatctgaccaaaatggtgaaacccaatc
+tccactaaacatacaaaaattaggcgggcgtggtggtgtgtgcctgtaat
+cccagctacttgagaggctgaggcaggagaatcacttgaacctgggaggc
+agaagctgcagtgagccaagatcacaccattgcactccagtctgggcaac
+agagcaagactccctctcaaacaaacaaacaaacaaacaaaagattattc
+acaaaaatggaagtaaaatttccacaaatgtatagagctaaaaccagaga
+aataaatataaatggaactgagagaaattgtccttaaagctggaaatgga
+ttcttacaataccttcaacaaaaaagggtaaattattttcaaaagaaaaa
+cattaatttggttatcaataggagcttcttaagtgtgtagttcaagaaaa
+aagaaacatttttgtgtctaaagttaaaaataaaaatgaaagagtaagag
+acttgacttgggagctgacatgttcttttctcaaggttatcagtacccgg
+cagcctttcaactacaaacaacattctagagttgacaaaatatttgtata
+tcccatctcttctctgatctttatatgctgtttggctgtgcaaaatagag
+gctaaagtcccattttgcagatgaaaaagctgaggctcggaaagacaaac
+atcacacacaaagtttgggtcacaactggcattagaacacaggactctca
+aaccagtgctttcccatcactaaaccactcctagggctaagaatacatta
+agactccaaaagatagagaattgctcaatgcattccaccaagattagacc
+tgacccaccccagaaagctaagccgctctggggccctggggtggaaaact
+caagaaaaagaatgatgcctacattcacacatctgagctccaatccaaac
+tcggccagtcagttatagaacctcatttgctgagcctcagctttttctga
+tataaaatggaactacagaaggctccaaaaagatcaggataagggcagaa
+ctgcactctaaatgcaggagtgcctggcaggtggaaaccactcactgact
+tttagtttaagcacataagtaatatgttgtgtttcactgtgtctcctcca
+tggtgtctgtttcatggctccagatcctgggggcttctgatcaatccttc
+tgctaagtgatggacgaatagatgaatggatgggtggttgaaagggtgga
+tgaaatgatgcatagatggatgaatgctcaggagggcagaaagaagtaaa
+cacagagtcaaaataagaatgaggagatgattgaaggatgaagagttgat
+gcatgagatagagacatggtctccaaccctcctatccccacacagcctca
+ccaacacctgccttggggtagcagtggcacatgcttcagatgatgtcccc
+agtcaccatgacatagctgcggaaggtgccatagacctgaggctaatcat
+ggctcatgagaaacgtgctaagagccagcagaaaaaacccagcagcacaa
+taaagtcgacgttgaaactcttctcatctgcaatggctgcctggccaggc
+catagactatgcactcctggcagagggggtgcatgtcatccagcataaac
+acccagacaggctcacagggagggacgaagctctgcgattgctgccaatt
+gaggcttaaagttaaagggagaacaagaccccctcaggtccagacccagt
+gcctgggcccacaagttcagatggcaagaggcagcacacttcagtgaaca
+attgcacccacccacccactcaccttctctcctcaccatcctgccttctc
+tgcaggctaagcagtcctgcagggcatgtatgaatctgaatgagagagta
+tgcaggaaagagagaagggaagattaccaggactgggccccagccaagga
+tttgacatcaccttatttgcctactatagggatgaactaggtggtcaagt
+ggccgtattatttcactgtattaatacaaatacaccttccagccctggga
+agcagcatacaattgccaagagacgttagaatgctgctggaggattccag
+ggtctcacagtctggattttagagtcctgaattttagacttttcaaggac
+atgtgctcctctggggttcaggcataatagactatatttaccgatggtga
+ctgtgtgcatgacgccataacatgttacactattaactcacttaagggac
+tccatgaggcaggtactgctatcttcactttacagaggacactgagcaca
+ggcaagtaacttccccatggtcacacagctggaaatagcagagcagctgg
+gatgtgcacccagagtctgtgtacttagccacagtgcaatcctgcataac
+tacaaaacaaacttatgtgtgtgagcatctatccgcccaagcagacaagt
+gtcaaactacgcgaatgctgtccaagcactgcgtgagcatacacttctct
+gaaagcgttctgctcatcaacagggccagccagtgacttttctgatcgct
+taatgcacctatccagtctcttcacaggcggctcctggggtctgccgggg
+gtgctggcgtcgggttggccctggcgctgtccccagcccccactccccag
+gccctgcagcgccatgaggtcggactcctgggcgtgtcctgggttctgac
+ccacccgcgacgccagctgcccgcgcccggagcggatgggcctggcccgg
+ctccaccccgcggggctccgcggctcaacgggtcgcccaggggcgcgggc
+ccggcttcgtcctcgacggtgtccgccccggccctggctaggccgacggc
+agccgggtccgggtggggctcgggctcggggcgcgcccctcccatctctc
+cagggtccgcgtcctcgctgccgccaggtcccgccgagatccccggtggc
+cccggctccagcggctgcagcgtcgccatcgccgggcagaccccggccga
+cctcaaagcgaccgcgcggtggggccggcggggactggggctgcgcagcg
+cggcctggggtgggggcggcggggcccccaggagctcctgggaaccgagg
+gtcctggggcggtcccgccccgcacagctccgggtgagcttggggaggga
+gacacactctcagcccacctcgccccgcccgacagcgctccgagtcctga
+gtcccctcacccccattctacagacacgaaggtgaagccaaagacgggac
+gctcacttcctgagaatttgctgcctgctgcgtggacaccaccgacctat
+tgtttacagcggtcagggacccgccccccagacccccaggaccgcgcttc
+cgggggaggagggtgtcctcagcaacggtgacccgcaccaaagccctcct
+caccggggtcaccgccacagccggtgcgaggcccgcagggcgctggggat
+gcgcgaccgactcccgtgaacctgctcctcgcgcgtcagggagagctgtg
+cacccaactaggctctgtgaggacggactgaggtcggcctgcaggctgcg
+gccccgaaggcaggatttgtggagagatgattcgcgagccttggaggaag
+gatgggctgtgcgtgcgtgggtgcgtgcgtgtgtgtgtgtgtgtgtctgt
+gacttttgtatgtttatgtgagactgcgtacgtgcgcgcgtctgtgtgtg
+cgcgcgcgcgtatatgtctgtgtgtgtgcgtgcgtgtataatttctaaat
+ggacgtcaccttacacatcacaaggttaaaaaatgacccctgggctgtgc
+caggccaagcacgaagagaaagccccgcctgaaactgcctggaggccccc
+cggctgtcactctcgccacattccgtggagtatgtggttgcaacttctgt
+cactcaaggtctgatggcggggagattggagccgtatccaatcagcgcac
+tggagtgaaaactgcccaatcaggcacgcagccagagaggaggcggtggc
+ttccgggatgtggcgcgggtctttgcgtctggctactaccagaccgcggg
+ttaggggcttcatctctctgcgttctcagttgtgggaggccttggtgatt
+cggccacagctcagcctccgtcgctctgtgacctgcgggtattggatgat
+tggtagctaagactcccgaatacttcagaagtggggaaatggtgagtgtg
+cggggcagggcgtcccaaggctgaggaggtctcatcggagctggcgggaa
+atggcggcgggaccgagtctgcgaacggagtccccgctgccgccgctcag
+ccctggggcctcagtaccctccggtgagggacctgggctcctgtcggtcc
+ccgcacagcggctctggcccagcctgcagccctccttgtgcagctctgcg
+cccgcagccccgcaccttccccaggctgtggggtgaggagtagcttatct
+ggaagccgcccgcgcggcgtgcgcgatgccggcgtgggaggagctgtggg
+agaagctgtggtctggggatcccgtccctgctttaccctgttcggaatga
+gatcgaggccccatcaaaacagagttcatgtgagcaaatggggactcatt
+aatgggacagcgccggccgtggctcgtggtttgggggctgccagcgggtc
+ttgaaggaaaagcttttgtgaggtgtgtgaggaagcgaagcaaatcaccc
+gcccgctccaacttgcccaccagtctccttgccctgtgcgcctcctccgc
+gtggctgttcctgagtggcatcttttagaatacgctagtgtgggcgcgca
+cagcgcttcgctgagttctgtgagtagttctgtcatattattgaacttga
+ggagggtgtgggcccctggtttgtagacaggtgttcagaaatgaagacgg
+gtgtccagaggcagggactggcgtctgcaggggggcagctgcgggaagag
+cgctgagcttgtggggtctgtgctgactccgggtggtgtcgttagtgagt
+tgttggacagcccgttggggtcggagcattgactggtgttgagcaaactc
+ctcacgtttcctgtcagaagaaagacatggctgagcctgggctggaggga
+gtcgcaggtgtccgcgggagaccagccgggttctgcacatgcactgtcct
+gctgcgcactgttctgttcctccaggtctcctcccggggagagagggcgc
+tgagaacttggaggaaaggagttctgagaaacatcccttccctgcaccct
+gctgccagcccccacccaatgctaacccactcctgagcccgcccattggg
+cattcgcacggccacacttgtcccaggacagggttctaccctcaggaatt
+gtgcccatggcagctttgctcctaggtttttctcccaagaacacacacag
+tgcccagaagactcctggttcattttaaccccagatctgtagcaggaatc
+tgttttcttcacccacccaggcttttggaccacctgatcctaatctcctc
+tgcctttatgggctcaggaatcagttagagcttagccctgcctgggcctg
+aacttgtagcacaaaccagtcctttcgtcaatcctgccttgcccccactc
+aaggctcttgatagcacctttcttctgctcttttcttccccacaaatcct
+ctttcctgtgcacacagtttgctcaagtgcatccctcatgtgctacaaga
+attcaacgttagtgagttcaagaccatgcctttagacctgcctgttgtag
+gaccaaatacaaatcagaagaggcttaatgctttctctttagaatgagga
+aagaatttttactcttctcccttaaagcatttagtttgaaaacttttata
+tttaaatattttctctgcttctttgaaatatatataactcattttaatct
+gttaactaggtgatttgtcttttttgactcaaaattgtctttaggacatg
+gaaactattgctttgaaatgtgcatagcaagaatatataacctattccgc
+aatttctgtagcagagtaggaggctgccttcagcaggtacctgccttcac
+atatcaaatctacctcctgtcctgaagctgtgggaagtttattttccctt
+tgaatattaccaattaggaaacccggatgacctcccaaattactaggtga
+aagtgtaataaactatgtatgatacatggtactgtcaagtcttctacttg
+agagctaattatggtgactttctttgttttggcagtctcttagtagactg
+cctgtaatgcacaccacattttgtttaattctctaacaacacattttctt
+gctgttctattattttggacagtattttaggattgtagatgattttgctg
+ttatattttccacacgctgtcaagaattactagatgttatacacaaagtg
+cccaccaggcttcgttttagagaagaaccttctttctcaggattccagtc
+acaacccacagttgtgcagcaaagtgcacgaagtgcagcaaagtgctccc
+caaagctgcaaacaaaatgatctctctatttgggatctacaatcccttct
+atagcagtttgactagatttctacaaaaatgactttttaggatagcgatc
+agtttttccacctctttcagtgtgccaatgatcttcagatctgacactga
+ttcagaaatcatggggcccataaatccagcgaggttcacacatgtgcatt
+gattaaacctgagaacttccattctctcccttctccccttgcccaaatgc
+ccacaaatgtgcttaccagccctccaagtcttaaatgtgcagttccaaat
+tctgagtttatgtcctgggatttgagagaagaacagaacttttgtttgag
+aaatacaagttcttttaattacgagaccaagtgatgtgttaaaatgagac
+cacagtcctaccgttcccctctttgaactgtttgtcttttgaagttgttt
+gctattgccacaagtggatataaattaacctaataatgccatactggaca
+ctataacccacaccttatagcttaacaacgtacatagccaatcactaacc
+aatgttacttctataaaccaataagaatttctgacagctttctatcagtt
+ccgtctgcctttctttttgcctttaaaaatatacttgtaactgcttctaa
+ttggagtgtatattcagggcagctttatagtccagggttgcaatcttcaa
+gctttggcccaaataaactctcttcttatattatgtttaccccacctttt
+tccttttaggtcaaaaaaacatttttcttttttttttttttgagacagaa
+tctcgctctgtcgccaggctggggtgcagtggtgcgatctcggctcactg
+caacctccgcctcccaggttcaagcaattctcctgcctccgagtagctgg
+gattacaggcgcacgccaccatgcccggcggattttttatattttgtagt
+agagatggggtttcaccatattggccaggctggtcttgaactcctgacct
+tgtgatccacccgcctcagcctcccaaagtgctgagattacaggcgtgag
+ccaccgtgcccagcctgttttgtgagttttgatgccattatgtgaatggc
+tattcattgacagaagagaagttgttattatttgtattgtgtttaccttg
+ctaagaataaatatttagcttctaatataattgttctagagaaacataag
+ggttttggttaaattccttgttactgtatgttatacaaaagacagagaag
+tggctaaaatagattaaaatttcacaaattctgggaatcaaatttctctt
+gggcaggcttagaaaagacaaaaccgaaagtacttagtgacatagagagc
+agaagcctagggcccactttctgtcccatccctgcccagatctaccctct
+tctgatccttgtccaggtctgagccaacactgaaatctctcacagaactg
+attaatagaggagatcagagtttagggtggctactccagtctcctctcca
+gagctggtgcccacaattttctgaaacccaaaagccaataaatagggaaa
+agctatatactttggggccttaaatcttttctataaaattaaaactaatg
+tttctagagacatcccacccagcaacctgttctctatccctgcagtttca
+gtggctttttcttacaagtctcaaagtaaatacaaacacaaaaataaaaa
+aattcctctgaattgtacttaacactttctttggctctctcccatctatt
+tatatttagctattattctatacatttttttaaaaagtcaggggaaacag
+aaaggaaatggaaattctgggccctgcctttaaatctgggaagtatggga
+cacctagtgtctacctcccaggatgttatgagaattaacacacataatat
+gagcttcccatcacagtgctctgtgacatacatctgagcacatattacat
+gccccataaagatggcattaatgcagatgcacatgttgtttttcagatac
+agacttactcagacattgccaccgtctccaacttctgtaaccttataggg
+tctgcagagaatgccatgtttgaagatgatgattggtggtcttgggatga
+aaagtatttgtgttgtgataacggtgttggggtaagggactctgtgtgct
+gtgtctgctttctctaactgagtggtactataatgggtctagagggagga
+gcgtcagcattaacaggagacttgctgtaaaaagctaattcatggaccct
+tttcaaacctgcagaattttgttacttacagtgaggcctacaatatcaaa
+taatgtatatgtacaatgaagcttgagaggcagtgcttagctaagtgact
+ctcagcccagtcttccagtaggatcacatggacagtttgaagagaaacca
+tcagctgtgttctgcccacagatcctgtccattgttctgggtgaaaagtc
+cttatttattttatttttgattgttgttgtcccagatttattgaaaataa
+tacagcactacagaaaaaattcaaacaggtccccgaggcattttgaaatt
+catcccaactgtaggctgagtgacctgaaggttgaacagactgccgaagt
+ccaaaagcttcagcatttccttagtgtcaggatctacttcaattatctcc
+tgatccaaggctgagaccttattttttaaaatcagttccttgcgtggtta
+aaaaagtattaaaaaagttccttgcatgattaaaaaagtattaaaaaagt
+tccttgcatgattaaaaaagtatttaaaaagttccttgcatgattaaaaa
+agtccttatgttttaaaatcagttccttgcatgattctacagcaaggcca
+gggtgaagcatgagggcttccagatactttagtgaaaggtgagttcaccc
+tttgttccaggaggtcacagggcctactctgcttgattttggtaggggaa
+ggtcagtgtagcccattatttttattgcagcaacagaaactcttggaatg
+ccatcctttttctgcagagctatagaatactttagagaatattactgcgt
+tgaaagttattttatcagataatcccagtcagtcacatgtcagaactagc
+gctctcaactcatttcacctgtagtcaaattaagaactatgtcccttcgg
+ctgggcgcagtggctcacgcctgtaatcccagcactgtgggaggccgagg
+agggcggatcacaaggtcaggagatcaagaccatcctggctaatatggtg
+aaaccccgtctctactaaaaatacaaaaaatcagctgggcgtggtggcgg
+gcacatgtagtcccagctacttgggaggctgaggcaggagaatggtgtga
+acctgggaggcggagcttgcagtgagccgagactgcgccgctgcactcca
+gcctgggtgacagagcgagactccgtctcaaaaaaaaaaaaaaaaaaaaa
+aaagaactatgtcccttgatatatttgtattttcaggaactcttaacatt
+cagggatgtggccatagaattctctccagaagagtggaaatgcctggacc
+ctgaccagcagaatttgtatagagatgtgatgttggagaactacaggaac
+ctggtctccctgggtgaggataacttcaatacataattcctaatttttct
+cagagctttattttattcctttgaagaatttctcctgggaacttttatgt
+tttatctttacataaaccttctcttttcttgagctaatttgagtccttca
+ctctaggttagtggtaattctagaaattcaatgacataaaatattgtttc
+ccacatcttaaaatccaatttgcaccacttattttttattcggtagtact
+tggtagtggaacttagaacccgcagatttaaaatacttaaatattctaaa
+gattctgtcaggaaacaatttttggattaattttctagaatcttccataa
+tatctctattctgcttagcgtagtactaggttggtaattggagaatcccc
+atcaatagtcatgttattattttttttaaaataaaacaggtgttgctatc
+tctaacccagacctggtcacctgtctggagcaaagaaaagagccctacaa
+tgtgaagatacataagatcgtagccagacccccaggtaggtgagagtgaa
+tggaggagagggcacaggcaaggggaccaaaggtcaagaaggaagccagg
+ccttaaaatgtggtttggggccgggtgcagtggctcatgcctgtaatcca
+aggactttgggaggccgaggcaggcggatcacgaggtcaagagatcgaga
+tcatcctggccaacatggtgaaaccccgtctctactaaaaatacaaaaat
+tagctgggcatggtggtgcgcacctggagtcccagctactcgggaggctg
+aagcaggagaatcacttgaacccaggaggcggaggttgcagtgagccaag
+atcacaccactgcactccagcctggtgacagagttagactccgtctcaaa
+aaataaaataaaataaaaaataaaccaggtagtttgggaagctctgctcc
+agtgaaaataatttctgaaaaagctgcattttttctcatgttcacaaata
+ggggcatcttctgttccatgctgttaaatccaagaattctcttttttctt
+tagtgatctccctttaagtttacagggagagctaatgtccactttatcgc
+ttataaggggctgcatgatgtgactgctgttccattgcttttggagacac
+tggaatatttgtgttactgaggagctgtatgtcaaagtatttttttcaag
+tattcttttcgtattatgtctaaaatgtgtaacgtgagtagtggacatag
+tgggatttggttcagaaatcccaggaacaccaaggacagatgttgcctct
+tttctacttagtgttttttaatcctatggaggctgcaaatgtaattctac
+aaaaattcttacttagcaattttatcagaacaataagcatttcctaaata
+tgaaaaaaagtaatgttattttacttcaaaattactgttttagtataaac
+tcgtttgtaatgtaaactctatatgtgcaaattttgaaattataatatag
+tttaaagcatggatttccaacattttggcttccctgggccacattggaag
+aagaattgtcttgggccacacataaaatacactaacactaatgatagctg
+atgagctcggatcatctgagatcgggagtacaagactagcctgactaaca
+tggagaaaccctgtctctactaaaaatacaaaattagctgggcgtggtgg
+tgcattcctgtaatcccatctacttgggaggctgaggcaggagaattgct
+tgaacccaggagacggaggttgcggtttgccgagattttgccattgcact
+ccagcctgggcaacaagagtgaaactctgtctccaaaaaaaaaaaaaaaa
+aaaaagtttttgaaaaatttttgtgatatcctccaccacagaagataagc
+aaaaaaagtccttgcattcaaagggttggaaaccactggattaaagtatc
+tactcaccttctatatttcttaaatgcactgtatcattaacaagcataaa
+tgtgctatgtcattaaccagcatagaacattactaagtgtatattaagct
+ctcaattgttctcttatttgttaatagctattataattttgtcttagtag
+gaagtctgttgagattctgtcattgagatgtatctctctgtagctatata
+aaaatgtgtgtctcacacacacacctatataacttatttaagtgtgtagt
+aaattctcacttaacattgttgataggttcttggaaactgagggaagcaa
+catattaagaaaactaattttaccagagtttaattgataaccagagttta
+aaagataacgagttatgtttgaatggcatatagcaacattatttcattta
+acaatgcagtttttaagaacctaatttgaacattaagtgaggacttactg
+tacatctgtgtttgtgtgacatggatttttctgataaataaaaattatgt
+aactttatatttaatgtgtacaatgtaatgatttgatatgcatctacatt
+gtgaaacaatatagtcaagttcatgaagaaatctattacttcacctagat
+aaccattttgtttggtagtaagaacacttaaggcctactgttgtagcaaa
+tttaaagcatacattatagtattaactatgaatacaatgctattttggta
+atctaatgctaatatacattaggtttctcagatttactcaacttataact
+aaaaatttgtgctcttgaacaacatctcatattcccaccctaggcactaa
+caactaccattctgctctctgcttctatgagtttacgcttttagatttcc
+tatctaactgagaaaatttagtttctttgtctttccgtgtttggcttatt
+tcatttagcataatgccctccaggtctatccatgttgtaaatggctagat
+ttccttctcttttatggttgaatagtgtcctgtgtatgtgtgtgtatata
+tatatgtatatacatgtatgtatatatatgtatacacacacacacacacc
+gccccccccatatattggctactgtaaacggtactacaataaacatggag
+gggaagatagttctttgaggtactaattttatttcctttggtagtatgcc
+cagaagtggtattgctggattatatgatacttctagttttattctttttt
+tttttttttgagatggagtttcactcttgttgcccaggctggagtgcagt
+ggcacgctgttggctcaccacagcctctgggtcctgggttcaagcaattc
+tcctgcctcagcctccgaagtagctggaattacaggcatgtaccaccatg
+cctggctaattttgtatttttaatagagacggagtttctccacgttggtc
+aggctagtctcgaactcccgacctcaggtgatccacccgtctcagcctcc
+caaagtgctgggattacaggagtgagacaccacgcccggccaagtttttt
+ttttttttttttgagactgagtctctctctgtcgcccaggctggagtaca
+gtggcaggatctcggctcactgcaagctccgcctcctgggttcacgccat
+tctcctgcctcagcctcccgagtagctgggactacaggcgccttccacca
+cacccagctaattttttgtatttttagtagagacagggtttcgctgtgtt
+agccaggatggtcttggtctcctgatctcatgatccgcctgcctcggcct
+cccaaagtgctgggattacaggcgtgagccaaggagcccggccgcgccca
+gcctagttttattctttactgtatttttgtaagtttatcaatttgcatct
+caccaccagcatacaagatttcccttgtatgtatttcttctttgggaaaa
+aaaaaaaatctaaccttttgcctattttcgaatgggttattcattattat
+tgttttgcttttttgctttgaattgcagaagtttgttacacattttggat
+attaacttttttttttttttggagacagaatttctgtcgcccgagctgaa
+gtgcagtggcacgatctttgctcactgcaacctctgtctctcgggttcaa
+gcgattctcctgcctcagcctcccgagtagctgggattacaggcacgtgc
+caccatgcccagctaattttttgtatttttagtagagacgaggtttcact
+gtgttagccaagatggtctcgatctcctgatctcatgatctgcctgcctc
+ggcctcccaaagtgctgagattacaggcctgagccaccacacccagctgg
+atattaacttatcagatatggcttgcaaatgcttttctattttgtagggt
+ttttaaaaattttgtttttattttttcctttgatgtgcagaggctgttta
+ctttgatgcagtctcacttgtttatattttattttgttgctgtgctgttg
+atgtcatttcaaaaaaagttattgccgagaccaatatcaacaaggttttt
+ccatatgttttcttcatgagttttaagatttcatgtcttaatttcagtct
+ttgttttgaagtctgaaattagaaagcatgatgcctgccagacaaggtgg
+ctcacacctgtaatcccagcaccttgggaggccgaggtgggcggatcact
+tgagatcaggagttcaagactagcctggccaatatggtgaaaccctgtct
+ctactaaaaatatacaaaaactagctaggggtggtagtgggcgcttgtaa
+tcccagctactcgggaagctgaggcaggagaatcacttgaacccaagagg
+cagaggtttcagtgagcctagatcactgaacctagattgtgccactgcac
+tccagcctgggtgacagagctggactccatctcaaaaaaaaaaaaaaaac
+aagtatgatgcccccagctttgttctttctcaagattgattgctcaggtt
+attaaaagtcgtttaaggttacacctaaattttacaattgtgttttctat
+tagtgtgaaaaatgccaataaaattttgatagggatcacattgaatctat
+agatcactttggataatattctttgacaatattagttatcctaatggaat
+atgtttccatttatttgtttctacttcactttctgtcattgatatcttat
+tgtatttagtgtataatactatatgttttttatgtcatttggttaaattt
+attttgattaactttcttatttttatactattgcaaatggaaatggtttc
+tatttttggaaagtttgtttttactctatggaaatgcaagaaatatttgt
+atgtggtgccaggtgcagtggctcatttctgtgatcccagcactttcaga
+gcccaaggcagttgtatcatgtgagtacaggagtttgagataagcctggg
+caatagagtgaggccctgtctcaaaaaaaaaaaaatcccaacaagcatct
+atatgttgattatgtatcctgatactttaatgaatgcatttattagttca
+atcaatttttcttattttactctagggttttatgtatatgcatgatgata
+ttatccacaaacagtaacttttttatttcttttccactctggagagcttt
+attctccttttccttgtctaattgttttgatacaaacttccagtcacatg
+ttaagatagaagctgtggccctggaggcaggcctgcaagtcttgtccccg
+gctgtggtctctgaagcagccctgtgtctgcatttgacaaatttcacagt
+ttgtataaactatttttggcaggtaaagatctccttttgttgagtcccag
+gctgatgagattacctctggggttgcagagaagaagggttgtagctgggt
+cacaagggtgctgctgggtctgctgtggggtctgcctttgatgattgtat
+taccagagatttggacagtcatggattatttctgggccctggagagatta
+gatttccttgaggatattaatctatatggcaggcagtagactagggtttt
+gaagtttgtctgcatatgatgggccaaataccaggtgtatgaatgggttt
+ggcttctactgacaacctgggaacagtttccacacttttctctttgggtc
+cctgattgtgtacaactggccatggactgtgactgtgagggctagaactg
+agtcacagggctcaggagcacagctgaggccaggatatacaggcctgcct
+ccagggccatggctgggtgtgtatctccctgcaggtctcttgatgggaag
+gaccacgtctggactgtagctgagattgaatttgagagaggttacagaac
+tgcttcagaatcctcagtaagaccaagctcagtgtgccatttccttgtct
+gtagccatgtctatgggctcttgagttggccatctgagtgagggcctgct
+tattctaaataaccctcgatctctggctccactgaggtttcacaacccta
+accataggcaagcacctttctacttctgctttctatgtgcttactactta
+aaatattgtataaaaatggaatcatgcattgtcactttgttagcgtctta
+tttcactaaaataatggcctcaggatttatccttattgtagcatctgaca
+agacattttcatttgaagctaaagaatatttcattgcgtgtataagccac
+atcttttaaaatctttcattcattgaaggatgtttgaattttttcacttt
+ttcacttttgtaaattatacggtttggatctatgtccccattcaaatctc
+atgtcaaatgtaatccctattgttggaggtggggccttgagggagatgat
+tggatcgtagggttggcttttcatgaatagtttagtaccagcccctttgg
+tactgtctttgccatagtgagtgagttctcccgagatcttattttttatt
+tatttattttttgagatggagtctcgctctgtggctcaggctggagtgca
+gtggcatgatctcggctcaccgcaagctccacctcacgggttcatgccat
+tctcctgcctcaacctccagagtagctgggattacaggtgcttgccacca
+tgcccggctaattttttgtacttttttttttttttagtagagacggggtt
+tcaccatgttagccaggatggtttggatctcctgacctcatgatccgtcc
+acctcagcctcccaaagtgctgggattacaggcgtgagccaccgcgcccg
+gcctgagatcttattttttaaaagcatgtggcacctcccctctcactctt
+gtcttgctcctgttcccactgtgtgagatgactcactctccctttgcttt
+gtgccgtgactggaagctttctgaggcctccccaaaagtagaagctgctg
+tgcttcctgtacagccttcagaactatgagccagttaaaccttttttttt
+ttttttgagacagagtctcgctctgccactcaggctggagtacagtggcg
+cgatctcggctcactgcaatgtccgcctcccaggttcaacttattctcct
+gcctcagcctcccgagtagctgggactacaggtgcctgccaccaagcctg
+gctaatttttttaatttttagtaggggcggggttttaccatgttagccag
+gtggtctcctgacctcatgatccgcccctcggcctccaaaagtgctgaga
+ttacaggcgtgagcaaccatgcctggccggagaaacatttatacttccat
+atacttgttgaagtataaaatgtaagtgccttacaattttctttcctcct
+aaaacataagcactgagtttgaggcattttcctggatttttcaaccactg
+agttctttttatataaaactaagtgaataaccttgactgggaatccgaga
+cctaagcctgttgactgcagggtaaggtcaatcttgattctgccaaagca
+ggtcatcaatagccccgtaatgtgttgctggtgaacctttctttcaggtg
+tctcagcctgctcaaattagacagggaaggagccctggaaagctgggtat
+ccacaggcagaggcagtgagggtttggatgagaggaggttgtgatatcct
+ctgagagggtgtaattgttattgtcatggggctgtttctacatattgtca
+agtaaaataaattttgatgtaggtaagaagtgagtttattctaaggagta
+ttgcagtggggaaagcatcaagcataagacctgaagtcatctccaaaatg
+aggcagaaaaaggctatttttcatacagaggagcaaacaagattagaaac
+aaggtaggagggccaggcatggtggctcacgcctgtaatcccagcacttt
+gggaggccgagacgggcatatcaggaggtcaagagatggagacaatcctg
+gccaacatggtgaaaccccatctctactaaaaatacaaaaaattagccgg
+gcgtggtggtgggcacctgtagtcccagctactcagaaggctgaggcagg
+agaatcacttgaacccgggaggcggaggctgcagtgagccaagactatac
+cactgcgctccagcctggtgacagagcgagactccgtctcaaaaaaaaag
+aggaaggtgggagagggagaaggcagaatggagaatggcaaaatcagatt
+caggattggagaatgtttcaccctgaagtcagcctgttcttgggaggggc
+atcaagaggggttgtatgctagctcagactgaaggtggagcagagtccag
+gggcctgggggaatgtagagtttgtgaatttgtgatatctaagagggagc
+atcttcaaaatcatagtgaaaagggtatttctttgcaataagcgtttctt
+gcggatcacaaaggattggagagaccttagtcatagctatttaccaagat
+tcactacccacctcatcttttcccccactttcctttgtcctatacatttt
+ttccctttggcttttactgagctgtattcaatataataacctggaaaaca
+tataaatcgtttttgctaagttctgtgagtagttttatcaaattattaaa
+tttgagggagggagttagggaagcccatgatttatagtcagttgctcaga
+agtgtaggtgggcccctggagtttgtgactggcatgtgcagcggaagcag
+tgttgtggaactgggtctgaacttgtggggtctgtgctgaccctgggtgt
+tgtcagaattgagttgttgggcacccagtttgtgttggaggattggttgg
+tgttcagcaaactccatatatttggtgttggaataaagataatcaggctg
+gatgtggtggctcacgcctgtaatcctagcactttggaaggacgaggagt
+gcagatggcttgaggtcaggaattcagcaccagcctgggcaacctggtga
+aatcccacctctaccaaaaatacagaaagttagccaggcatggtggcacg
+aacttgtattcccagctacttgggggactgagtctggaggattgcttgaa
+ccctcagaggtcaaggctgctgtgacctgagatcatgccagtgcactcca
+gcctgagtgacaaagtgagaccctgtctaaaaaaaaaaaaaatcacagca
+gacttggtcagaaggagatggtgggtctgttgaagaatggagagtttatt
+aatttattattattattattatttttttttttttggagacagagtctcac
+tctcgtccaggctggagtgcagtggcgagatctcggctcactgcaacctc
+cacctcctgaattcaagtgattttcctgcctcagcctctcaagtagctgg
+gactacaggtgtgtgccaccatgcctggctaattttttgtatttttagta
+gagacgaggtttcaccatgttggccaggctagtctggaactcctgacctc
+aggtgatccctccaccttggcctcccaaaatgctaggattacaagcatga
+gccaccactccccgctgagagttttacttcttttgcacacaagttgtcac
+agttaggtgtaatgtgattctacgtctcctccataggggactgaggactt
+aaagggaaggacttctgagggcagactcttctctccacctgctgctacaa
+tgtgatttctgctcattcacacacatgcacgctaagcaatggtatggccg
+tgcttctctcatgacaaagcttcactcaggaattgtgctgagagcacctc
+tgcttctagggttttccactaataggctacataagtgcccagaagactca
+tgggctctttctacctgccagatcttgaatctgcaccagtaacctgtttt
+ctccagtagaataggcttctggatcacctgaccatctcatctccctgtat
+gcacacatttataagtcagaggtgccctgcctgggtgaatatctagagca
+ctaaccagtccttttaccaactgtgcactgatcctcacccatggttcttg
+atagcaccttttcttattctgcattttccccccacagaccctctctcatg
+tgaacacagcatgcccaaggtcaccctgcaggtgcctaagtccagggcct
+gctggaaatcaggtttctatgagttcaaggcaaagtttttgggtgtggtt
+attgtaaatgtaaatgcaaaatagaaataagaggcttaatcctcacattg
+gaaaataaagagtatttactctcctcccttttcttaaaacctttgattta
+gaaaacttttatatgtaaattctttctgtgccttttatcttttttgttgt
+cttttaattctctaatttgtttctggtctgatttttgttattttgtttat
+tatgctaacattgggattatttagttatttttcaagtttttgaggattaa
+agttggtttatttgagatttttaaaatataaaatatattactataaaatt
+cccagaactgcttttgttacattcatttttatatattatgattctatttt
+catttttctcaaatactttatgatttccttttaccttctttgacccattg
+gttgttcagaagcatgttgtttaatatccatttatttgtaagttttaaaa
+tttccttccggtgttgatttctagttttataaaattgtgatttaaaaact
+tgatatgatttcagtctgtttaaaaatgaaaagacttgtttatttttgtt
+gtgggccagatttatgacaggtcttggagagtgttccatgtgtgtttgag
+aagaatataaattatactgttactatcatatttgtttttttctccagttt
+agttaacatatgtttatatatttgtgtgctccaatattggatacataaat
+atttttaatcgttatattcttttgacaaattagcctcatcactatataat
+gaagtttttttaatgacgaatttttttctttattttattttatttattta
+tttatttattttttgagacagtctcactccgtcacccaggctggagtgca
+gtggtgcaatcttggttcaccacaacctcggttcaccacaacctctgcct
+cccaggttcaagcaattcacctgcctcagcctccctagtagctgggatta
+caggtgcccaccatcacgtctggctaatttttgtatttttagtagagaca
+gggtttcaccatgttggccaggctggtctcgaactcctgattgcaggtga
+ttctgctgcctgggcctcccaaagtgttgggattacaggtatgagccatc
+gtgcccagctatgacagatttttttctagatgtctatttagtctcatata
+aatataggcattcctacactttttaagttattattggcatggaatattct
+tttcatttttgaatcgttaacctatgtatttccttaaatctacagtaagt
+ctctagtttgcagcatattgttgatttttaaaatcgattcagacattctg
+tgaatgttttagattgttttttgcttaataacaatattctagggttggta
+atttataaagaatagaagtttacttagctcacaatcctggatgctgagat
+gtccgagagcatgtcattcccacctcatgagaatcacatttccacatcac
+aacatgaccaaagtcttgaggatgatggaaggtgtacaccagagctcact
+tttgtaatagacccactctcatgatgactaacgcactcttagaattataa
+tactaggctgggcacagtggcttacacctgtaatcccggcactttgggag
+gctgaggcgggtggatcacaggtcacgagtttgagaccagcctggccaag
+atagtgaaacccccatctctactaaaatgacaaaaactagccgggtgcgg
+tggcggctgcctgtaatcccagctactcaggaggctgaggcaggagaatc
+tcttgaacctgggaggcagaggttgcagtgagccgagatcatgccaccgc
+actccagcctgggtgacacagcaaggctccgtctcaaaaaaaaaaaaaaa
+agaataatactattaatcctttcataaaagtagagccctcatgacctaat
+aacttcttaaaggcctcacttcttatttgtttgtttgttttttgagacag
+agtcttgttctgtcacccaggctggagtacagtggagtacagtgatctca
+gctcactgcaaccttcacctcccagattcaagcgattctcctgcctcagc
+ctccccagtagcttggactacaggcgcgtgccaccacacccggttaattg
+tctgtattttttgtagagttggggtttcactgtgtttcaatctcttgacc
+tcgtgatcctcccgcctcagcctcccaaagtgctggaattagaggtgtga
+gccaccgcacccgaccaaggcctcacttaattttatcacaatggcagtta
+aattttaacacgaattttgaggggacactaaaaccatagcagtgtgtttt
+tattgcatagctaaatctttctatatttaaatgaattaccgattgataag
+aacttattactgccattttattcattgtttactgaccatttagtggtttc
+tgttttttaattccttcatgctgtcatcttttgtgttttcttgaattttt
+gttttgtttttgttgccttctttttcttgtatgtgcatctactagttttt
+tttttgtaatttccaagagacttacatgaaacctctcattttaaaatttt
+gccttcaatttaaccttttgttttgtacagatagggtcttactttgttac
+tcaggctatagttcagtggtgcattcacagttgagtgcagcctcaacctt
+tgtgggctcaagcaatcctcccatctcagcctcttgagtagctggaacta
+caagcacatgccaccatattcagctaattttgtcagtgctttttgtagag
+acggggttttgccatgttgctcaggctggtcttgaactcctgacctcaag
+cacttgatttgacctcccaatgtactaggattacaggcatgagccatcag
+gcccagtcatttctttttttaaaagattgaatagctttctgagatcttta
+ttttatttatgtatttattttagagacagcgtcctgctatattgacccag
+gaggtggaggttgcagtgagccgagatgtcaccactgcactccagcctga
+gtgatagagtgagactctgtctcaaaaaaaaaaaaaaaagaatctctctt
+tgtctttgaattctggcagtttaattataatgtgtcctgagcaattttta
+tgaggttcttgctatagagattttaagcttcataaaactgaatgtctatt
+ttccttccaagattgggaaaatttaagacattatacctttacacaattaa
+aaaaatttttttttctctgtctcctgaacctcttaagagatgtacattcc
+tacagataattatgcagtgtgggacccaaatgcttcagtcactctttctt
+ttttcttttttctttttttttttttttttgagacagagtctcactctgtt
+gcccaggctggagtgcagtggcacgatcttggctcactgcagcttgcgcc
+tcccggattcaagcaattctctaccttagtctcctgagtagctgggacta
+taggcgcgcgccaccacgcccgactaattttttctttttttctttttgta
+tttgtagtagagacaggatttcgccatgttggccaggatggtctcgattt
+cctgacttcgtgattcgcccgcctcagcctcccgaagtgctgggattaca
+ggcatgagccaccatgcctggcctcattctttaagttttaattaggaact
+ttcaaatgacttacttttaagtttgcttatttttttttcctgtagaactg
+agtcttctgttaaagcttgttgttaaattttttagttctattgtgtactc
+cagcatatgtatttggttcttttttaagtttctcgttctttttttttttt
+ttttttttaaagatggagtttcgctcttgtcacccagactggagtgcaat
+ggcacgatcttggctgactgcaacctctacctcccgagttcaagtgattc
+tcctgcctccgcctcccaagtagctgggattagtcatgagccaccacacc
+tggctaatttttatatttttagtagagatggggtttcaccatgttggcca
+ggctggtctcgaactcctgacctcaagtgatccgcctgcctcagcctcct
+gaagtgctgggattacaggtgtgagccattgtgcccagctctccttcttt
+tttataactcattttgttcatgcattgttgcaaaaaaaaattagtaatct
+gtgtacttttgcattttatttttcttttgttgtttttttgtttgattgtt
+tgagatggagtcttgttctgttgccaagctggagttcagtggttcagtct
+cggctcactgcaacctccgcctcccgggttcaagcaattctcctgtctca
+gcctcccaagtagctaagattacaggaatgtgccaccacacctggctaat
+ttttgtatttttagtagagacggtttcaccatgttggccaggatggtcac
+gatctcctgaccttgtgatccatccgcctcggcctcccaaagtgctggga
+ttacaggtgtgagcctcctcgcctggactcttattgagattttttaagat
+aattactttgaattctctgttagacattttctagatctgtgttttattgt
+tagttgttcctggagcatttttagtttctttttgtgctgttaggtttgcc
+tgatccttcataatctgtgaagccttgttttgatgttcttgcatctgaag
+gagtaaatacttctttcagtcattacagactagtttagggaggtaaatat
+cttctattggttttctgggctgatgagattttcactaggatcacagtcaa
+ctgcattggatcctggtcacgtaactactactgggtctacagtgaagtta
+atgcttggcagacctgttatttaagcatcagacagttgaggattccattt
+tctgaggagactgaactttctttaagatcttgatcaataagactggtgct
+gagaaaaaaaaaacccagttaatatctgcaaatggagatgctgatacaat
+aaatatgagtaggtgtggctcctgctgtttggctcttgcgagatgtttgg
+aaatgctctaacctagtcattggacaggtttctagatgaccgttactgag
+cgttgatcacagctgagagggtgtgaaactaattcatagggctgcttcag
+gatacacagctgagaccaaagtcttcaggtttgttctgggttcatgacat
+ttctccctccagatttctaggtgggcaggacttctccctgcctctagctg
+ccagggactggagcttggttataggactgcttcacaattcacggtgggaa
+taaagtcagccagcatgcctacagggacacatgtagctgtgcttttgggc
+aggtcacaggtcaggaaaaactcctcctggattttggttgcatggacttg
+gagccaagttgtagtgccacgtcaagatccaccatcaaataaatattggc
+aagcctacatccaggggcagagatggatatttctgtctgtgggtccctgt
+gtgagtaggatttcttccacatcatgactgacatgtgcaaggggtgcagt
+ttggggtaattcagagatcacagacagaagcaacatctaaaggcctttca
+cctgagacacaggacattatgaatcctcctaagtgtcttggcagatggtg
+ctagtggcataaacaaaaccaaatgatagctatgtttacaatgagaatta
+attacatttcattctgtattgtgggcaagcatgccactcaagcaagggca
+caccctctcaatacagccctcctcagtcttcggttcgcagtcttacacat
+ggattccaaagttgccgtaaaggttgttttgtcagggcttaactgctgca
+tttttgttactgtagaaagtgtgggtagggagcctcctattctgccatct
+tgctatgccatatgttccgatatgttctatgtcaaatttatctgattaca
+gattcagaatttctgaaataaagtactcagatttacacattgtgtaataa
+gtaaatgtattgcaatgcttcattctcattagagcattttattaattatt
+gaaatgcatttgcttttattgcggcgcatggcatgtcaaagattcaaaat
+gccagctcttcataagtcacagttgaaaactagttatttaaaggattgtt
+tttatgatacgtctgtattatattcaatattttataggtcagaattttct
+cttgttttcaactgtattttactggggagtctcttttcatgtaggttctc
+cttgatcatttacttttttgtgtgtttttaatcttcatatttgtatggta
+attttcaactttgtaccttttatgaccatgtattgtttaattccaataaa
+aatcattggagcaagttaaaaaaatatacataaatatatatgtgacattt
+ctgttgcctataaaagttatctatgtggtatttgcctgcaaaaatcactt
+tgggcaaattttaaaaaatatataaatgcgaattttctattgcctataaa
+agttttctatatggtatttgcctgtataaatattgacctactttgtttat
+aaattactcattttcttgggtagtcatcagtatttccttgtgtagatgag
+cagtcaaagaaactgtaaatttaccatctatttattgtttgattatatat
+tattctgtgagagaagcacttgttatttgaaggtgatttttgaaaaatgt
+aaccgttttaggtagatgtaaatatttaattgtgatgaaaaacataaaat
+tgccatcttaaacattttcaagtacagtctagtggagctaagtacattta
+cattattttgcaatggatctttagattaattttatcttacgaaagtaaaa
+tgtaataataaataaactgcccttttcctctcttcagctcttggaaaaca
+ccattttacttactgtttctatacttttggctgatttttatatttgtatc
+actataattatataatgtctctttttgactattttttttaacggaatgat
+ctcaggctttgtttttgtaagatgtgtcagaatatctttctgtttttttt
+tttttttaagttctagggtacatgtgcataacgtgcaggtttgttacata
+tgtatacatgtgccatgttggtgtgctgcacccattaacttgtcatttac
+attaggtatatctcctaatgttatccctctccccgcccaaccccacgaca
+ggccccggtgtgtgacgttccccaccctgtgtttgagtgttctcattgtt
+caattcccacctgtgagtgagaacatgcggtgtttggttttctgtctttg
+tgatagtttgctcagaatgatggtttccatcttcatccatgtccctacaa
+aggacaagaactcatccttttttatggctgcatagtattccatggtgtat
+atgtgccacgttttcttaatccagtctatcattgatggacatttgcgttg
+gttccaagtctttgctattgtgaatagtgccgcagtaaacatacatgtgc
+atgtgtctttatagcagcatgatttatagtcctttgggtatatacccatt
+aataggatggctgggtcaaatggtatttctagttctaaatccttgaggaa
+ttgccacactgtcttccacaatggttgaactagtttacagtcccatcaac
+agtgtaaaagtgttcctatttctccacatcctctccagcacctgttgttt
+cctgactttttaatgattgccattctaactggtgtgagatggtatctcat
+tgtagttttgatttgcatttctctgatggccagtgatgatgagcattttt
+tcatgtgtcttttggttgcctaaatgtcttcttttgagaagtgtctgttc
+atatcctttgcccactttttgatagggttgtttgatttcttcttgtaaat
+ttgtttgaattctttgtagattctggttattagccctttgttggatgggt
+agattgtaaaaattttctcccattctgtaggttgcctgttcactctgatg
+gtagtttcttttgctgtgcagaagctcttttgtttaattagattccattt
+gtcaattttggcttttcttgccattgcttttggtgttttagtcatgaagt
+acttgcccatgcctgtgtcctaaatggtattgcctaggttttcttctagg
+gtttttatggttataggtctaacatttaagtctttaatccatcttgaatt
+aatttttgtataaggcgtaaggaagggatccaatttcagcttttacatat
+ggctagccagttttcccagcaccatttattaaatagggagtccttccccc
+atttcttgtttttgtcacatttgtcaaagatcagatggttgtagatgtgt
+ggtattatttctgagggctctgttctgttccattggtctatatctctgtt
+ttggtaccagtaccatgctgttttggttactgtagccttgtagcatgatt
+tgaagtcaggtagcgtgatgcctccagctttgttcttttggcttaggatt
+gtcttggcaatgcaggctcttttttggttccatatgaactttaaagtagt
+tttttccagttctgtgaagaaagtcattggtagcttgatgaggatggcat
+tgaatctataaattaccttgggcagtatggccattttcatgatattgatt
+cttcctatccatgagcatggaatgttgttccatttgtttgcgtcctcttt
+tatttcattgagcagtggtttgtagttctccttgaagaggtccttcacat
+cccttgtaagttggattcctatgtattttattgtctttgaagcaattgtg
+aataggagttcactcatgatttggctctctgtctgttactggtgttatag
+gaatgctcgtgatttttgcacattgattttgtgtcctgagactttgctga
+agttgcttatcagcttgagattttgggctgagacgatggggttttctaaa
+tacacaatcatgtcatctgcaaacagggacaatttgacttcctcttttcc
+taattgaataccctttatttcttttctcctgcatgattgccctggccaga
+acttccaacactatgttgaataggagtggtgagagaaggcatccctgtct
+tgtgccagttttcaaagggaatgcttcctgcccgggcgcagtgggttacg
+cctgtaatcctagcactttgggaggccaaggcgggcagatcatgaggtca
+ggagatggagaccatcctggctaacaccgtgaaacctcgtctgtactaaa
+aaaatggaaacaactagccgggtgtggtggcaggcacctggagtcccagc
+tacgcgggaggctgaggcaggagaatggcatgaacccgggaggcggagct
+tgcagtgagccaagatcgtgccactgtactccagcctgcacgacacagtg
+agactctgtctccaaaaaaaaaaaaaggcgggggggaatgcttctagttt
+ttgcccatttagtatgatattggctgtgggtttgtcataaatagctctta
+ttattttgagatacgttccatcaatacctagtttattgagagtttttagc
+ttgaagggctgttgaattttgccgaaggccttttctgcatctattgagac
+aatcatgtggtttttgttgatggttctgtttatgtgatggattacgttta
+ttgatttgtgtatgttgaaccagccttgcatccctgggatgaagccgagt
+tgatcatggtagatgagctttttgaagtgctgctggatttggtttgccag
+tattttattgaggattttcacatcgatgttcctcagggatattggtctaa
+aattctctttttttgttgtgtctctgtgaggctttggtatcagaatgatg
+ctggcctcataaaatgagttagggaggagtccctctttttctattgattg
+aaatagtttcagaaggaatgataccagctcttctttgtacctctggtaga
+attcggctgtgaattcatctggtcctggactttttttggttggtaggcta
+ttaattattgcctcaatttcagagcctgttattggtctattcagagattc
+tgtttcttcctgctttagtcttgggagggtgtatgtgtccaggaatttat
+ccatttcttctagattttctactttatttgcatagaggtatttataatat
+tctctgatggtagtttctatttctgtgggatcggtggttatatccccttt
+atcatttcttgttgcatctatttgattcttctctcttttcttctttatta
+gtctttattactcttgctagagtccactccagactctctttgcctgggta
+tcaccagcagagactgcagagcggcaaatattgctgcctgatccttcctc
+tggaagctttgtcccagagggtcacctgcctgtatgaggtgtcagtcgac
+tcctactgggagatgtctcccagttaggctacataggggtcagggaccca
+cttgaggaggcagtctgcccattctcagatctcaaacaccatgctgggag
+aaccacgattctcttcagagccatcatacaggacgattaaatctgcagaa
+gtttctgctgccttttgttcagctatgccctccccccagaggtggaatct
+acagaggcaactggccttgttgagatgcagtgggcttcgcccagttcaag
+cttccctggctgctttgtttacttactcaagcctcagcaatggtggacgc
+tcctccccctgccaggctgctgcctggcaggtcaatctcagactgctgtg
+ctagcagtgagcaaggctctgtgggtgtgggacctggcaagccaggcgtg
+ggatataatctcctggtgtgccgtttgctaagaccattggaaaaacacag
+tatttgggcaggagatcccgattttccagatacagtctgtcacagcttcc
+cttggctaggagagggaaatcccccaaccccttgtgcttcccaggtgagg
+tgatgccccaccctgtttcagcttgccctcagtgggctgcactgcaccca
+ctgtccaaccagtcccaatgagatgaaccaggtacctcagttggaagtgc
+agaaatcacccgtcttttacgtcagtcacgctgtgagctgcaaaccagag
+ccgttcctattcagccatcttggaacgggaggtctctgctctatttttaa
+attgtgtgttatttttgttgttaagtttgttaaatattctataagtttat
+ct
diff --git a/test/data/chr4_ref_seq_short.fasta b/test/data/chr4_ref_seq_short.fasta
new file mode 100644
index 0000000..97347f9
--- /dev/null
+++ b/test/data/chr4_ref_seq_short.fasta
@@ -0,0 +1,95 @@
+>chr4-04 246635 359336
+tcctgacatagtctgaaaccaattgtctttgatagagattatgggagcct
+cccatacatgttttaaggatgtgtcttgtctggaatttcatgtttttcag
+ttaaaagggtttgttcatgtttcttcttaacagtctctaatcacttgccc
+tacctactttctgtatttaacactgcagtctgctcctgaaacatttacat
+tttgtctcagcaatcccaagctgtcctttcaaaatataccactgtttctt
+tcagcactctgtattattggagacagaaaccagtttttgtaaagactacc
+aaaagccagaagtaatgatgtgtgcgttagtatttttcttatttttaaag
+aaagaagccaggaattggcagtttactcctaaagacacaatgctatactg
+gggaggaggaagggctgtgtaaatgtaacaaattttcctttgcattctat
+gtggctcttggcattgttcttacctgaggcattacatacaattaactcat
+ttcgagattttgcacaaaagcattttgatgagtatatgtttgttacatgt
+atatgtctgtgaaggagttatggcctgtggtattttgttgtgccatctta
+ctaatgtactttgtataagtatatatatattagatttgtaaagtaagtat
+attcatatgtaaagtgtattcatatgaatctagtaagtgggataatttgt
+tatttttctttcaggtgtgtgttctcattttacccaagatctttggccag
+tgcagggcatagaagattcattccacaaacttatactgagaagatatgag
+aaatgtggacagaagaatttacaattaaggaaaggctctaaaagtgtgaa
+taagtgtaaggtgcagaaaggaggttataatggactttaccaatgcttat
+caactacccagagcaaaataattcagtgtaatacatctgtcaaagttttt
+cataaattttcaaattcaaacaacataagacatactggagagaaatcatt
+taaatgtaaaaaatgtggcagatcatttcgcaagttcctccaactaactt
+aacataagggaatacatgctggagagataccctacaaataaatgtgaaga
+atgtggcaaagcctttaataggtccacaagcattactaaatataagaaaa
+ttcatgctggagagaaacccctcatgtgaagaacgtgtcagaatctttac
+ctcatcctcaagctttgacaaacataagagaattcatactggagagaaac
+cctacacgtgaagaatgtggcaaagccttgagacaatccacagttctgaa
+tgaacataagaaaattcatactggaaagaaaccctacaaatgtgaagaat
+gtggcaaagcttttagacagtccagaagcctgaatgaacataagaatatg
+catactggagagaaaccctacacgtgtgaagaatgtgtcaagcttttaac
+caatcctcaagccttattatacacaggagcattcattctgaacaaaaact
+ttacaaatgtgaagaatgcagcaaagcctttactcaatcctcatccctta
+ataaacaagagaattcatactggtgagaaaccctacacatgtgaagaatg
+tggcaaagccttttataggtcctcacaccttactgaacataagaatattc
+atactggagagaaatcctacaaatgtgaagaatgtggcaacgccttttat
+agatcttcacaccttactaaacataagagaattcattctgggcaaaaacc
+ctacaaatgtgaagaatgtggcaaagcctttagacagtcctctgcactga
+atgaacataagaaaattcatactgcagagaaaccctacaaatgtaaagaa
+tgtggcaaagcctttagatggtccagaagcctgaatgaacatacgaatat
+tcatattggagagaaaccctacacatgtgaagaatgtggcaaagatttta
+cttggtcctcaacccttactgtacaccagagaattcagacaggtgagaaa
+catagttgataacatagttgaatgacatttctagtaatatgtttcctttg
+gctttaaacagcaaataaagtgaagaatattgttccatgttcttttcttt
+atttcttaaaatttttgtaggcacatagtatatgtacatatttctggcat
+atattagttatttgaatacaggcatacaccatgtaataatccatcagagt
+aggccaggcgcagtggctcatgcctataatcccagcactttgggaggcca
+aggcaggcggatcacaagttcaggaggtcaagaccatcctggctaacatg
+gtgaaaccccatctctactaaaaatacaaaaaaataactgggcatggtgg
+tgagtgcctgtagtcccagctactcaggaggctgaggcaggagaatggtg
+tgaacccaggaggcagagcttgcagtgagcctagatagcgccactgcact
+gcacgccagcctaggcgacagagtgagactccgtctccaaaaaaagaaaa
+aatccatcagagtaaatgagatattcatcaccttaagtatttattctttg
+tattacacaagtccagttatacactttatttttcaatgtacaattatttt
+ttactacagatcgttttgtgattgtaatatatcaaagtataattcatatg
+tttctgagtcctgaatgaatacttaaaaaaaatgtttcatatttgtcttt
+gaacatgtagtgtcttgtcctgcaaacacatacggacttttcatttttat
+ttacatgaagttaaatatataaatgtattgctctaaaaataaaccgttag
+gtgtaagaaaattacagagcaagcaatagtgtttgtgtgagagtttgtac
+ctattttccaaagaaaagatcaatattggaacaaagaagattcttttata
+aggtggataatttactagaaatctagaaacctaaaacattgtgaaatcaa
+atctatatttctttggatttaattactgtaaaatctaattgttgagactc
+tccccatgtaaattgttttcatttgttactcatattacagctataattta
+cttgtttcttcttttgtttttactttattatttacgatgtgagctggtga
+gaaattataagaatgatttttataaaatttagtacacaaatttttagatg
+caagttcacaatttgtgtattgttatatttgatctagttagaaaatttca
+ttttgtggctttaactggagaactctatatgaaccgttttctttagttgt
+tcctttcactttttacttgacataaatgagtttatgtattgtgtgccaat
+ttgttcaggtaagtactgggaaatcttttaagtcatggagatgttttgat
+ataaaattgtagtgaacataagaaagtgctgtgtgtgtaatagatgctcc
+ataattagccataaatattctttctggagtcagtttgtagctgcaagtaa
+gagacagaaaatgtctatagtgaagaaatggcattaattgtgcatgtgga
+gaggacatctgttcccaggctgcaaaactgactcattctgaatttaaaga
+gggttttttttttaatttaaaagtaaactttaatgtcaaaaatgcaaact
+tagggaggacataaagatcacatacaaggctgccacttcacacttggagg
+gttgcacagcatctgggcaaaggctctcctcacttcccagatggtgcagc
+agctggacagagatgctcctcacttcccagatggtggggcagccaggaag
+aggcgctccttactcccagatggtagggccgccgagcagaggcactcctc
+atttcttagtgcggccgccaggcagaggcacacctcgtgtccaagaaggt
+gtggcagccaggcagaggcgctcctcacgtcccaggcggtgcagtggccg
+ggcaaaggcgcttctcattcccagacagggctgggggccagggagaggcg
+ctgctcacttcccagacagtggggcagctgggcagaggtgcttctcactt
+cccagaaagttgggcagctgggcagaggcgctccttaaagaggatttgtt
+ttatgtttatcctcagctatgtatgcctcacagctcttctccttgtgtta
+tggctacggttttctcactgttctcttcatgccatgtaatttcacatgga
+ctttccaggttctgataggttcgactttttttaatatggtaaattgttcc
+taattgggactgtttgaggttatttatagcttctcaatgcagcatttaga
+ttgcttgagaagtcttttagtgttcacaggtaagagaagtcagcattgtt
+tttctgcttatgaaagaaaatttttgagattctaaaactgtcttaagcat
+aacactaagactaggtaaagcattaatatgagtgggttgcatattgtcag
+caccatatgaagaaaatatcagaattttgaaatttcttcagagaaaatgt
+atcttagaggtaaattttttaggagacttaatggtagagaagaattttac
+atttaatattctatgacatacttatagcaaaacttttttcatgcagaatt
+ttctatttttgaatgtgaatcttaagtgttggaaaataatagaatggtct
+ctgtagattcaaaatttggaatgatcttttttgtccagattgatactgca
+atcctgaggaatttctcttatgattttttattttagtggatgcagttcat
diff --git a/test/data/chr4_translation_frame1.fasta b/test/data/chr4_translation_frame1.fasta
new file mode 100644
index 0000000..2dcb120
--- /dev/null
+++ b/test/data/chr4_translation_frame1.fasta
@@ -0,0 +1,5 @@
+>chr4-04
+LYWGGGRAV*M*QIFLCILCGSWHCSYLRHYIQLTHFEILHKSILMSI
+CLLHVYVCEGVMACGILLCHLTNVLCISIYILDL*SKYIHM*SVFI*I**VG*FVIFLSGVCSHFTQDLWPVQGIEDSFHKLILRRYEKCGQKNLQLRKGSKSVNKCKVQKGGYNGLYQCLSTTQSK
+IIQCNTSVKVFHKFSNSNNIRHTGEKSFKCKKCGRSFRKFLQLT*HKGIHAGEIPYK*M*RMWQSL**VHKHY*I*ENSCWRETPHVKNVSESLPHPQALTNIREFILERNPTREECGKALRQSTVL
+NEHKKIHTGKKPYKCEECGKAFRQSRSLNEHKNMHTGEKPYTCEECVKLLTNPQALLYTGAFI
diff --git a/test/data/chr4_vs_DA730641.dot b/test/data/chr4_vs_DA730641.dot
new file mode 100644
index 0000000..b807979
Binary files /dev/null and b/test/data/chr4_vs_DA730641.dot differ
diff --git a/test/data/chr4_vs_chr4.dot b/test/data/chr4_vs_chr4.dot
new file mode 100644
index 0000000..8e8680f
Binary files /dev/null and b/test/data/chr4_vs_chr4.dot differ
diff --git a/test/data/markup.color b/test/data/markup.color
new file mode 100644
index 0000000..3bb9312
--- /dev/null
+++ b/test/data/markup.color
@@ -0,0 +1,20 @@
+A WHITE
+R WHITE
+N WHITE
+D WHITE
+C WHITE
+Q WHITE
+E BLUE
+G WHITE
+H MAGENTA
+I WHITE
+L WHITE
+K WHITE
+M WHITE
+F WHITE
+P WHITE
+S CYAN
+T RED
+W WHITE
+Y WHITE
+V WHITE
diff --git a/test/data/markup2.color b/test/data/markup2.color
new file mode 100644
index 0000000..24e067c
--- /dev/null
+++ b/test/data/markup2.color
@@ -0,0 +1,3 @@
+E BLUE
+H MAGENTA
+T RED
diff --git a/test/data/markup_content.selex b/test/data/markup_content.selex
new file mode 100644
index 0000000..8fb35e2
--- /dev/null
+++ b/test/data/markup_content.selex
@@ -0,0 +1,20 @@
+#=ID r17
+#=AC RNA00001
+#=DE RNA ligands evolved to bind phage R17 coat protein 
+#=GA 0.0 0.0
+#=TC 0.0 0.0
+#=NC 0.0 0.0
+#=AU COVE 2.2.3 Wed Dec  2 08:39:58 1998
+
+#=SQ lig28 1.0 - - 1..29:29 R17 coat protein ligand 28
+#=SQ lig1  1.0 - - 1..17:17 R17 coat protein ligand 1
+#=SQ lig2  1.0 - - 1..29:29 R17 coat protein ligand 2
+
+#=RF         ***A**.loop.*****
+#=CS  .......>>>+>>.++++.<<<<<....... 
+lig28 GGAGUAAGAUAGC.AUCA.GCAUCUUGUUCC
+#=SS   >>>>>>>>>+>>.++++.<<<<<<<<<<<<
+lig1        GUUCACC.AUCA.GGGGAC
+#=SS        >>>>+>>.++++.<<<<<<
+lig2  AUGGAUGCGCACC.AUCA.GGGCGUAUCUAU
+#=SS  >>>>>>>>>>+>>.++++.<<<<<<<<<<<<
diff --git a/test/data/markup_headers.selex b/test/data/markup_headers.selex
new file mode 100644
index 0000000..5c12994
--- /dev/null
+++ b/test/data/markup_headers.selex
@@ -0,0 +1,32 @@
+#=GF ID   Y_phosphatase
+#=GF AC   PF00102
+#=GF DE   Protein-tyrosine phosphatase
+#=GF AU   Sonnhammer ELL
+#=GF AL   Clustalw
+#=GF SE   Swissprot_feature_table
+#=GF GA   -125 -125
+#=GF TC   -123.40 -123.40
+#=GF NC   -126.80 -126.80
+#=GF BM   hmmbuild -F HMM SEED
+#=GF BM   hmmcalibrate --seed 0 HMM
+#=GF DR   PROSITE; PDOC00323;
+#=GF DR   PRINTS; PR00700;
+#=GF DR   SCOP; 1ypt; fa;
+#=GF DC   The following Pfam-B families contain sequences that according to Prodom
+#=GF DC   are members of this Pfam-A family.
+#=GF DR   PFAMB; PB035686;
+#=GF DR   PFAMB; PB036047;
+#=GF DR   PFAMB; PB036157;
+#=GF DR   PFAMB; PB036312;
+#=GF DR   PFAMB; PB036563;
+#=GF CC   The following Prosite members are absent due to lack of
+#=GF CC   homology outside the active site: Swiss:Q05918, Swiss:P34442,
+#=GF CC   Swiss:P40479, Swiss:P24656, Swiss:P43078, Swiss:P38590.
+#=GF SQ   38
+CD45_RAT/628-862        NQNKNRYVDILPYDYNRVELSEINGDA..GSTYINAS......YIDGFKEPRK....YIAAQGPRD....ETVDDFWKMIWE...QKATVIVMVTRCEEGNRNKCAEYWPCMEE.........GTRTFRDVVVTINDHKR...CPDYIIQK..LSIAHK...........KEKATGREVTHIQFTSWPDH..GVPEDPHLLLKLRRRVNAFSN...FFS..........GPIVVHCSAGVGRTGTYIGIDAMLESLEAEG..........KVDVYGYVVNLRRQRC.LMVQVEAQYILIHQALVE
+#=GS CD45_RAT/628-862       AC P04157
+LAR_DROME/1497-1728     NKSKNRYANVTAYDHSRVQLPAVEGVV..GSDYINAN......YCDGYRKHNA....YVATQGPLQ....ETFVDFWRMCWE...LKTATIVMMTRLEERTRIKCDQYWPTRG...........TETYGQIFVTITETQE...LATYSIRT..FQLCRQGFND............RREIKQLQFTAWPDH..GVPDHPAPFLQFLRRCRALTP...PES..........GPVIVHCSAGVGRTGCYIVIDSMLERMKHEK..........IIDIYGHVTCLRAQRN.YMVQTEDQYIFIHDAILE
+#=GS LAR_DROME/1497-1728    AC P16621
+PTN1_MOUSE/40-276       NKNRNRYRDVSPFDHSRIKLHQEDN......DYINAS......LIKMEEAQR....SYILTQGPLP....NTCGHFWEMVWE...QKSRGVVMLNRIMEKGSLKCAQYWPQQEEKE.......MVFDDTGLKLTLISEDV...KSYYTVRQ..LELENLTTK............ETREILHFHYTTWPDF..GVPESPASFLNFLFKVRESGSLSLEHG...........PIVVHCSAGIGRSGTFCLADTCLLLMDKRKDPS.......SVDIKKVLLEMRRFRM.GLIQTADQLRFSYLAVIE
+#=GS PTN1_MOUSE/40-276      AC P35821
+//
diff --git a/test/scripts/Makefile.am b/test/scripts/Makefile.am
new file mode 100644
index 0000000..0fba063
--- /dev/null
+++ b/test/scripts/Makefile.am
@@ -0,0 +1,8 @@
+
+SUBDIRS = automated manual
+
+EXTRA_DIST = 
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/test/scripts/Makefile.in
diff --git a/test/scripts/Makefile.in b/test/scripts/Makefile.in
new file mode 100644
index 0000000..9f89964
--- /dev/null
+++ b/test/scripts/Makefile.in
@@ -0,0 +1,585 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 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@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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 = :
+subdir = test/scripts
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/./seqtools_version.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-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 \
+	tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+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@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPS_CFLAGS = @DEPS_CFLAGS@
+DEPS_LIBS = @DEPS_LIBS@
+DEPS_SQLITE3_CFLAGS = @DEPS_SQLITE3_CFLAGS@
+DEPS_SQLITE3_LIBS = @DEPS_SQLITE3_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+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_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+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_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+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@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = automated manual
+EXTRA_DIST = 
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/test/scripts/Makefile.in
+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 test/scripts/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign test/scripts/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):
+
+# 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.
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	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"
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	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; \
+	$(am__define_uniq_tagged_files); \
+	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-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	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"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+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 \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    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:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+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."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-recursive
+
+clean-am: clean-generic 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
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+	check-am clean clean-generic cscopelist-am ctags ctags-am \
+	distclean distclean-generic 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 pdf \
+	pdf-am ps ps-am tags tags-am 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/test/scripts/automated/Makefile.am b/test/scripts/automated/Makefile.am
new file mode 100644
index 0000000..e5857f7
--- /dev/null
+++ b/test/scripts/automated/Makefile.am
@@ -0,0 +1,8 @@
+
+SUBDIRS = belvu blixem dotter
+
+EXTRA_DIST = 
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/test/scripts/automated/Makefile.in
diff --git a/test/scripts/automated/Makefile.in b/test/scripts/automated/Makefile.in
new file mode 100644
index 0000000..ff4e900
--- /dev/null
+++ b/test/scripts/automated/Makefile.in
@@ -0,0 +1,585 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 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@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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 = :
+subdir = test/scripts/automated
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/./seqtools_version.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-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 \
+	tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+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@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPS_CFLAGS = @DEPS_CFLAGS@
+DEPS_LIBS = @DEPS_LIBS@
+DEPS_SQLITE3_CFLAGS = @DEPS_SQLITE3_CFLAGS@
+DEPS_SQLITE3_LIBS = @DEPS_SQLITE3_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+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_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+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_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+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@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = belvu blixem dotter
+EXTRA_DIST = 
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/test/scripts/automated/Makefile.in
+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 test/scripts/automated/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign test/scripts/automated/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):
+
+# 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.
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	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"
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	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; \
+	$(am__define_uniq_tagged_files); \
+	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-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	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"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+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 \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    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:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+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."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-recursive
+
+clean-am: clean-generic 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
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+	check-am clean clean-generic cscopelist-am ctags ctags-am \
+	distclean distclean-generic 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 pdf \
+	pdf-am ps ps-am tags tags-am 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/test/scripts/automated/belvu/Makefile.am b/test/scripts/automated/belvu/Makefile.am
new file mode 100644
index 0000000..9610ce3
--- /dev/null
+++ b/test/scripts/automated/belvu/Makefile.am
@@ -0,0 +1,111 @@
+
+SUBDIRS = .
+
+EXTRA_DIST = \
+test1 \
+test10 \
+test10_results \
+test11 \
+test11_results \
+test12 \
+test12_results \
+test13 \
+test13_results \
+test14 \
+test14_results \
+test15 \
+test15_results \
+test16 \
+test16_results \
+test17 \
+test17_results \
+test18 \
+test18_results \
+test19 \
+test19_results \
+test1_results \
+test2 \
+test20 \
+test20_results \
+test21 \
+test21_results \
+test22 \
+test22_results \
+test23 \
+test23_results \
+test24 \
+test24_results \
+test25 \
+test25_results \
+test26 \
+test26_results \
+test27 \
+test27_results \
+test28 \
+test28_results \
+test29 \
+test29_results \
+test2_results \
+test3 \
+test30 \
+test30_results \
+test31 \
+test31_results \
+test32 \
+test32_results \
+test33 \
+test33_results \
+test34 \
+test34_results \
+test35 \
+test35_results \
+test36 \
+test36_results \
+test36_results_old \
+test37 \
+test37_results \
+test38 \
+test38_results \
+test39 \
+test39_results \
+test3_results \
+test4 \
+test40 \
+test40_results \
+test41 \
+test41_results \
+test42 \
+test42_results \
+test43 \
+test43_results \
+test44 \
+test44_results \
+test45 \
+test45_results \
+test46 \
+test46_results \
+test47 \
+test47_results \
+test48 \
+test48_results \
+test49 \
+test49_results \
+test4_results \
+test5 \
+test50 \
+test50_results \
+test51 \
+test51_results \
+test5_results \
+test6 \
+test6_results \
+test7 \
+test7_results \
+test8 \
+test8_results \
+test9 \
+test9_results
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/test/scripts/automated/belvu/Makefile.in
diff --git a/test/scripts/automated/belvu/Makefile.in b/test/scripts/automated/belvu/Makefile.in
new file mode 100644
index 0000000..9ca484f
--- /dev/null
+++ b/test/scripts/automated/belvu/Makefile.in
@@ -0,0 +1,689 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 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@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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 = :
+subdir = test/scripts/automated/belvu
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/./seqtools_version.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-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 \
+	tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+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@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPS_CFLAGS = @DEPS_CFLAGS@
+DEPS_LIBS = @DEPS_LIBS@
+DEPS_SQLITE3_CFLAGS = @DEPS_SQLITE3_CFLAGS@
+DEPS_SQLITE3_LIBS = @DEPS_SQLITE3_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+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_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+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_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+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@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = .
+EXTRA_DIST = \
+test1 \
+test10 \
+test10_results \
+test11 \
+test11_results \
+test12 \
+test12_results \
+test13 \
+test13_results \
+test14 \
+test14_results \
+test15 \
+test15_results \
+test16 \
+test16_results \
+test17 \
+test17_results \
+test18 \
+test18_results \
+test19 \
+test19_results \
+test1_results \
+test2 \
+test20 \
+test20_results \
+test21 \
+test21_results \
+test22 \
+test22_results \
+test23 \
+test23_results \
+test24 \
+test24_results \
+test25 \
+test25_results \
+test26 \
+test26_results \
+test27 \
+test27_results \
+test28 \
+test28_results \
+test29 \
+test29_results \
+test2_results \
+test3 \
+test30 \
+test30_results \
+test31 \
+test31_results \
+test32 \
+test32_results \
+test33 \
+test33_results \
+test34 \
+test34_results \
+test35 \
+test35_results \
+test36 \
+test36_results \
+test36_results_old \
+test37 \
+test37_results \
+test38 \
+test38_results \
+test39 \
+test39_results \
+test3_results \
+test4 \
+test40 \
+test40_results \
+test41 \
+test41_results \
+test42 \
+test42_results \
+test43 \
+test43_results \
+test44 \
+test44_results \
+test45 \
+test45_results \
+test46 \
+test46_results \
+test47 \
+test47_results \
+test48 \
+test48_results \
+test49 \
+test49_results \
+test4_results \
+test5 \
+test50 \
+test50_results \
+test51 \
+test51_results \
+test5_results \
+test6 \
+test6_results \
+test7 \
+test7_results \
+test8 \
+test8_results \
+test9 \
+test9_results
+
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/test/scripts/automated/belvu/Makefile.in
+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 test/scripts/automated/belvu/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign test/scripts/automated/belvu/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):
+
+# 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.
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	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"
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	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; \
+	$(am__define_uniq_tagged_files); \
+	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-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	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"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+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 \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    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:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+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."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-recursive
+
+clean-am: clean-generic 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
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+	check-am clean clean-generic cscopelist-am ctags ctags-am \
+	distclean distclean-generic 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 pdf \
+	pdf-am ps ps-am tags tags-am 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/test/scripts/automated/belvu/test1 b/test/scripts/automated/belvu/test1
new file mode 100755
index 0000000..f0ac3af
--- /dev/null
+++ b/test/scripts/automated/belvu/test1
@@ -0,0 +1,23 @@
+#!/bin/ksh
+#
+# Description:
+#   Test saving a file to MSF format
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences in output to the
+diffs=`belvu -o MSF $data_dir/PF02171_seed.stock >&1 | diff "$results_file" -`
+
+# If thre were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then 
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
diff --git a/test/scripts/automated/belvu/test10 b/test/scripts/automated/belvu/test10
new file mode 100755
index 0000000..4a47d8a
--- /dev/null
+++ b/test/scripts/automated/belvu/test10
@@ -0,0 +1,25 @@
+#!/bin/ksh
+#
+# Description:
+#   Test the 'Print UPGMA-based subfamilies at cutoff'
+#   option.
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences to the saved results
+diffs=`belvu -X 0.5 $data_dir/PF02171_seed.stock >&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
+
diff --git a/test/scripts/automated/belvu/test10_results b/test/scripts/automated/belvu/test10_results
new file mode 100644
index 0000000..2ef12a0
--- /dev/null
+++ b/test/scripts/automated/belvu/test10_results
@@ -0,0 +1,45 @@
+
+Group nr 1:
+YQ53_CAEEL/650-977
+Q21691_CAEEL/673-1001
+
+Group nr 2:
+Q21495_CAEEL/52-336
+
+Group nr 3:
+O16386_CAEEL/548-847
+O02095_CAEEL/574-878
+
+Group nr 4:
+Q19645_CAEEL/674-996
+
+Group nr 5:
+Q23415_CAEEL/40-350
+O62275_CAEEL/594-924
+
+Group nr 6:
+O48771_ARATH/542-860
+Q9ZVD5_ARATH/577-885
+
+Group nr 7:
+TAG76_CAEEL/660-966
+O16720_CAEEL/566-867
+PINH_ARATH/625-946
+
+Group nr 8:
+AGO1_SCHPO/500-799
+
+Group nr 9:
+O76922_DROME/555-852
+PIWI_DROME/538-829
+Q17567_CAEEL/397-708
+PIWL1_HUMAN/555-847
+
+Group nr 10:
+PIWI_ARCFU/110-406
+
+Group nr 11:
+Y1321_METJA/426-699
+
+Group nr 12:
+O67434_AQUAE/419-694
diff --git a/test/scripts/automated/belvu/test11 b/test/scripts/automated/belvu/test11
new file mode 100755
index 0000000..b8af1c9
--- /dev/null
+++ b/test/scripts/automated/belvu/test11
@@ -0,0 +1,25 @@
+#!/bin/ksh
+#
+# Description:
+#   Test the 'Print UPGMA-based subfamilies at cutoff'
+#   option (large alignment).
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences to the saved results
+diffs=`belvu -X 0.5 $data_dir/PF02171_full.selex >&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
+
diff --git a/test/scripts/automated/belvu/test11_results b/test/scripts/automated/belvu/test11_results
new file mode 100644
index 0000000..aa9e9db
--- /dev/null
+++ b/test/scripts/automated/belvu/test11_results
@@ -0,0 +1,1110 @@
+
+Group nr 1:
+C4V9J2_NOSCE/489-791
+
+Group nr 2:
+B6K0R2_SCHJY/507-805
+AGO1_SCHPO/500-798
+
+Group nr 3:
+Q0DZI9_ORYSJ/36-107
+B0LJQ7_CULTA/1-148
+B0X641_CULQU/527-832
+B0WRW8_CULQU/638-943
+C5J0H4_AEDAE/655-961
+B0LJQ8_AEDTR/1-254
+Q5TVL2_ANOGA/535-839
+
+Group nr 4:
+B8BT49_THAPS/780-963
+B5DIM9_DROPS/1-71
+B4G6N2_DROPE/1-37
+
+Group nr 5:
+A8PVW7_BRUMA/492-800
+
+Group nr 6:
+C4WWR5_ACYPI/1-266
+A9QW19_TRICA/79-190
+Q59HV7_BOMMO/706-1006
+B4NLX0_DROWI/695-993
+B4N082_DROWI/579-877
+B3NI38_DROER/838-1138
+Q2Q3X0_9MUSC/506-806
+Q2Q3X2_DROYA/506-806
+Q2Q3X7_DROYA/506-806
+Q2Q3X4_DROYA/506-806
+B4PCH3_DROYA/843-1143
+Q2Q3X6_DROYA/506-806
+Q2Q3X8_DROYA/506-806
+B4IU14_DROYA/810-1110
+Q2Q3X1_DROTE/424-724
+B3M505_DROAN/688-988
+B5DY62_DROPS/643-942
+B4GFG0_DROPE/449-748
+B4GUA7_DROPE/624-923
+B5DQH3_DROPS/471-770
+B4HIG2_DROSE/1-224
+B4QL34_DROSI/606-729
+B4G6N7_DROPE/19-133
+B5DIM7_DROPS/517-815
+B4G6N0_DROPE/517-815
+B4IWV1_DROGR/788-1091
+B4LH85_DROVI/152-457
+B4KUJ5_DROMO/715-1017
+C7LAD2_DROME/888-1187
+AGO2_DROME/885-1184
+Q2Q3W2_DROSI/511-810
+Q2Q3W7_DROSI/511-810
+Q2Q3W9_DROSI/511-810
+B4NVX8_DROSI/80-259
+B4GTA7_DROPE/448-747
+B4HDJ4_DROPE/40-339
+B4GTA5_DROPE/448-747
+B5DT30_DROPS/694-993
+B4GTA6_DROPE/448-736
+B5DKZ0_DROPS/2-120
+B4ISF4_DROPE/14-227
+B4GDQ8_DROPE/669-968
+B4GDQ6_DROPE/661-960
+B5DYR9_DROPS/651-950
+B5DYR8_DROPS/41-340
+B5DU45_DROPS/389-589
+B5DWW4_DROPS/3-186
+
+Group nr 7:
+Q5KAT1_CRYNE/560-859
+Q5KAU3_CRYNE/580-879
+
+Group nr 8:
+Q4TF92_TETNG/161-225
+A7SCI6_NEMVE/496-743
+B9ZU55_9TURB/580-893
+
+Group nr 9:
+Q4PLA9_PICGL/597-913
+Q56X15_ARATH/234-541
+Q84VQ0_ARATH/546-853
+Q84YI4_ARATH/550-857
+Q9ZVD5_ARATH/577-885
+AGO4A_ORYSJ/557-865
+B8ACN1_ORYSI/524-832
+A2ZRR6_ORYSJ/650-958
+C0HGZ0_MAIZE/552-859
+B4FL08_MAIZE/45-352
+C5YX36_SORBI/564-870
+B8AUX7_ORYSI/565-872
+AGO4B_ORYSJ/565-872
+Q01MP5_ORYSA/565-872
+B9HK80_POPTR/565-884
+B9SP45_RICCO/574-882
+Q2LFC1_NICBE/558-866
+Q2LFC2_NICBE/565-873
+A5AMR1_VITVI/53-183
+B9HDH5_POPTR/582-891
+B9IHG7_POPTR/573-882
+B9SN14_RICCO/570-878
+B9EV67_ORYSJ/22-172
+B8ACN0_ORYSI/540-670
+AGO15_ORYSJ/546-853
+A9RNH7_PHYPA/593-893
+A9SRY5_PHYPA/573-879
+A9U2A5_PHYPA/597-903
+A9SKW0_PHYPA/722-774
+
+Group nr 10:
+A8JAG8_CHLRE/672-990
+A8J9T3_CHLRE/1058-1164
+Q8H714_PHYIN/1-173
+D0N1C0_PHYIN/587-890
+D0N1B9_PHYIN/587-890
+AGO1_ARATH/676-997
+Q3ECU7_ARATH/678-999
+A1E5M2_PEA/696-1017
+Q2PEW1_TRIPR/1-247
+A1E5M3_PEA/726-1047
+Q2LFC4_NICBE/678-999
+B9SJV6_RICCO/687-1008
+B9I4Y6_POPTR/688-1009
+B9N365_POPTR/308-629
+C5YY05_SORBI/736-1058
+B4FGY3_MAIZE/13-335
+B8AGF0_ORYSI/693-1014
+B9F1L3_ORYSJ/693-1014
+AGO1A_ORYSJ/709-1030
+C5YE15_SORBI/712-1033
+C0HEU9_MAIZE/87-408
+B9FC11_ORYSJ/374-695
+AGO1B_ORYSJ/746-1067
+B8AT34_ORYSI/729-1050
+C7J0V9_ORYSJ/1-271
+A9RG03_PHYPA/598-919
+A9RTW5_PHYPA/744-1065
+A9T6J3_PHYPA/524-842
+B8B2X0_ORYSI/647-968
+AGO1D_ORYSJ/669-990
+B9FR04_ORYSJ/644-965
+C5Z2L1_SORBI/643-964
+C5XWS2_SORBI/656-978
+B8AFI6_ORYSI/637-958
+AGO1C_ORYSJ/638-959
+Q2LFC3_NICBE/604-925
+B1B5A8_DAUCA/736-1057
+PINH_ARATH/625-946
+B0FHH7_BRANA/614-935
+B9RTJ1_RICCO/626-947
+B9HKB5_POPTR/631-952
+B9HUQ6_POPTR/452-776
+PNH1_ORYSJ/620-941
+B9FU05_ORYSJ/458-779
+C0PNQ0_MAIZE/1-267
+C5Z5J6_SORBI/617-938
+B9STN2_RICCO/586-907
+A5ARQ9_VITVI/592-892
+C5WPM0_SORBI/900-1216
+AGO12_ORYSJ/693-1012
+B9FAL8_ORYSJ/438-757
+A2XKQ7_ORYSI/654-972
+C5WPM1_SORBI/697-1047
+C0PMV6_MAIZE/89-412
+B8APJ4_ORYSI/9-101
+B9FEW4_ORYSJ/531-767
+AGO11_ORYSJ/541-848
+B9MTL4_POPTR/505-810
+B9SCN8_RICCO/632-949
+B9HQS2_POPTR/635-955
+B9GEQ1_POPTR/548-869
+AGOL_ARATH/638-958
+B8ALC4_ORYSI/596-877
+B9F6E0_ORYSJ/564-783
+AGO13_ORYSJ/471-770
+MEL1_ORYSJ/696-1016
+B8ALC8_ORYSI/696-1016
+A3ANP6_ORYSJ/644-982
+C5WX38_SORBI/703-1025
+B7ZZW2_MAIZE/663-969
+Q7FS89_MAIZE/11-170
+Q8S478_MAIZE/38-188
+C5XBU2_SORBI/675-995
+B9FVX3_ORYSJ/462-794
+AGO14_ORYSJ/677-1009
+B8B7Y0_ORYSI/653-985
+Q0DZI9_ORYSJ/119-248
+B8AFF9_ORYSI/534-832
+B9F134_ORYSJ/36-347
+D0MT95_PHYIN/497-796
+D0MT54_PHYIN/891-1191
+D0MT94_PHYIN/524-824
+B3SEP3_TRIAD/438-734
+A8NJ50_BRUMA/1-61
+TAG76_CAEEL/660-966
+A8XA10_CAEBR/683-989
+Q7JLZ2_CAEEL/652-958
+Q21079_CAEEL/655-961
+B7QBT5_IXOSC/313-623
+B7Q990_IXOSC/474-787
+B7Q811_IXOSC/611-920
+B7P230_IXOSC/468-776
+C3ZN91_BRAFL/470-771
+C3ZQ22_BRAFL/680-848
+D2XMQ5_SACKO/1-219
+C4Q6D1_SCHMA/608-835
+Q5C3Y0_SCHJA/4-157
+A7RQ46_NEMVE/511-812
+B2RFN1_OIKDI/771-1072
+Q8CGT7_MOUSE/576-634
+C8TEF3_OIKDI/573-874
+B3VCG6_STRPU/599-900
+D4A2P5_RAT/843-954
+Q4R7V5_MACFA/1-211
+AGO4_HUMAN/509-820
+D2H608_AILME/505-816
+A7MD27_HUMAN/509-820
+Q9NXV9_HUMAN/35-346
+AGO4_CHICK/442-753
+AGO4_XENLA/532-843
+Q4SVE6_TETNG/553-864
+Q8CGT8_MOUSE/1000-1102
+B7QCC4_IXOSC/509-810
+A9QW17_TRICA/69-158
+A7BJS5_BOMMO/569-871
+B4LJF3_DROVI/646-948
+B4KTB5_DROMO/643-945
+B4P449_DROYA/624-926
+B4JW20_DROGR/647-949
+Q7KY08_DROME/607-909
+B3NRF4_DROER/624-926
+B4INL3_DROSE/624-926
+B4GGS7_DROPE/642-944
+Q28ZU1_DROPS/642-944
+B3MHG1_DROAN/641-943
+Q32KD4_DROME/641-943
+Q960T1_DROME/258-560
+Q27IQ2_DROSI/554-851
+Q27IR0_DROME/554-851
+Q8T059_DROME/81-383
+B4N5V9_DROWI/642-944
+B0WFU8_CULQU/621-923
+Q7PZ41_ANOGA/638-940
+Q16EE2_AEDAE/482-784
+Q16M62_AEDAE/604-906
+A9NJ58_PENMO/569-898
+D2XYX4_PENJP/572-901
+A9NJ57_PENMO/572-901
+D2DK65_PENJP/572-901
+D2DK66_PENJP/569-898
+A7XZ43_PENMO/569-898
+Q071E1_PENMO/569-898
+A8WKF9_CAEBR/562-864
+A8P168_BRUMA/623-925
+Q86B39_CAEEL/547-848
+O16720_CAEEL/566-867
+B2L7Q3_CAERE/1-268
+B2L7P9_CAERE/1-269
+A8X4Z3_CAEBR/691-992
+Q3LTR7_CAEEL/668-969
+Q20578_CAEEL/660-961
+B6VQ75_CAEEL/681-982
+Q4S7L6_TETNG/228-304
+AGO3_DANRE/518-819
+D4AC38_RAT/515-816
+Q8BJP2_MOUSE/364-665
+A2VDG1_MOUSE/513-814
+D2H607_AILME/507-808
+B2RAD8_HUMAN/515-816
+Q5TA58_HUMAN/440-741
+A1L365_MOUSE/515-816
+AGO1_HUMAN/515-816
+AGO1_MOUSE/515-816
+Q4S7L5_TETNG/517-818
+Q8CGU0_MOUSE/527-843
+B3KME0_HUMAN/440-741
+D2HF39_AILME/511-813
+AGO2_RAT/517-819
+A1A563_MOUSE/517-819
+AGO2_RABIT/497-799
+B0JYP5_BOVIN/517-819
+Q6PHA2_MOUSE/94-396
+AGO2_HUMAN/516-818
+A4FVC0_HUMAN/465-767
+Q8R3Q7_MOUSE/187-489
+AGO2_MOUSE/517-819
+Q8CGT9_MOUSE/501-743
+AGO2_XENLA/519-821
+C0IN02_XENLA/519-821
+AGO2_XENTR/528-830
+AGO2_BOVIN/517-819
+Q6P239_MOUSE/277-579
+Q4RKH3_TETNG/508-822
+C9V4A2_CTEID/306-581
+B0F0Y5_9TELE/526-828
+A3KFX7_MOUSE/1-109
+AGO3_BOVIN/518-820
+D2H606_AILME/513-814
+AGO3_HUMAN/518-819
+B4DY67_HUMAN/154-455
+B1ALI0_HUMAN/284-585
+A8KA05_HUMAN/518-819
+B4E1P5_HUMAN/346-647
+AGO3_CHICK/518-819
+A3KFX6_MOUSE/1-140
+Q7M738_MOUSE/426-707
+Q3TBP7_MOUSE/518-819
+AGO3_MOUSE/518-819
+Q4TBP2_TETNG/578-853
+D4A2P5_RAT/513-742
+AGO4_MOUSE/509-820
+Q8BTF2_MOUSE/35-346
+Q8CGT8_MOUSE/660-885
+Q4SXU1_TETNG/1-206
+Q8CGT7_MOUSE/455-570
+B9FX53_ORYSJ/672-981
+AGO18_ORYSJ/747-1056
+B8B5Y3_ORYSI/745-1054
+C5X8G4_SORBI/699-1002
+C5X8G7_SORBI/41-220
+C5WR49_SORBI/670-825
+Q5DFJ9_SCHJA/2-164
+Q5DG80_SCHJA/3-99
+Q5DCI0_SCHJA/265-566
+C4QPD0_SCHMA/628-928
+C4QPD2_SCHMA/595-831
+C4QPD1_SCHMA/595-896
+
+Group nr 11:
+Q0DZJ0_ORYSJ/35-101
+B9IL53_POPTR/1-160
+A5BG29_VITVI/774-895
+A5BW27_VITVI/926-1238
+B9S921_RICCO/670-981
+B9HXP0_POPTR/520-831
+D3GBV1_LOTJA/669-981
+Q9C793_ARATH/649-950
+A3AJI1_ORYSJ/584-892
+AGO7_ORYSJ/709-1017
+A2YQ96_ORYSI/716-1024
+D0EYF3_MAIZE/683-995
+C5WVP1_SORBI/688-996
+A3AXD9_ORYSJ/720-1023
+A2XXJ0_ORYSI/688-991
+AGO3_ORYSJ/720-1023
+Q00RR5_ORYSA/745-1048
+B9FCH7_ORYSJ/626-928
+AGO2_ORYSJ/687-989
+Q00RR6_ORYSA/693-995
+A2XXI9_ORYSI/693-995
+C5YG12_SORBI/746-1048
+C0PIX4_MAIZE/1-297
+Q9SHF2_ARATH/841-1145
+Q9SHF3_ARATH/665-965
+Q8GX33_ARATH/191-491
+A5AFZ6_VITVI/719-1022
+A5CBU3_VITVI/601-900
+A5B8D3_VITVI/625-924
+B9NA51_POPTR/676-973
+B9S3I1_RICCO/146-445
+
+Group nr 12:
+C1DZY0_9CHLO/572-888
+
+Group nr 13:
+A8PFS7_COPC7/454-749
+A8NXQ6_COPC7/547-849
+B0CXE0_LACBS/567-880
+B0CYG1_LACBS/553-863
+B0D2D0_LACBS/417-738
+A8PFQ6_COPC7/458-767
+A8P6A7_COPC7/477-803
+
+Group nr 14:
+D0U267_CRYPA/639-939
+A4QSM3_MAGGR/672-970
+A6S388_BOTFB/557-866
+A7F377_SCLS1/445-754
+C7YHP8_NECH7/612-917
+C9SSA6_VERA1/19-91
+C9SGB5_VERA1/589-897
+Q8J276_NEUCR/628-929
+D1ZPU0_SORMA/563-867
+B2AKU3_PODAN/441-754
+B6Q5R7_PENMQ/547-853
+B8M5N8_TALSN/546-852
+C8V9S4_EMENI/46-154
+Q5B3I7_EMENI/46-154
+Q0CNV7_ASPTN/543-854
+Q2UKV9_ASPOR/543-849
+B8N3T1_ASPFN/436-742
+A1CKK4_ASPCL/543-849
+A1D6W7_NEOFI/543-849
+B0XXP5_ASPFC/564-870
+Q4WXX3_ASPFU/564-870
+A2QDC5_ASPNC/643-949
+C1G1H6_PARBD/510-817
+C1GU57_PARBA/495-755
+C0S3N8_PARBP/535-823
+C5G7J1_AJEDR/547-854
+C5JJJ6_AJEDS/547-854
+C6HRE3_AJECH/547-854
+C0NUS8_AJECG/547-854
+A6RGK9_AJECN/547-854
+C5FDD8_NANOT/542-847
+D4AMR8_ARTBE/628-933
+D4DBM7_TRIVC/515-807
+C5P9D5_COCP7/668-975
+C4JZ88_UNCRE/552-859
+B6H4L5_PENCW/673-980
+Q0U7V7_PHANO/645-956
+B2W8P0_PYRTR/611-920
+
+Group nr 15:
+A7TMA9_VANPO/888-1209
+A5E477_LODEL/107-430
+C5MCT9_CANTT/554-879
+B9WGS3_CANDC/555-882
+Q5A1B6_CANAL/296-623
+C4YGL4_CANAL/554-881
+
+Group nr 16:
+Q2HHM4_CHAGB/694-1033
+
+Group nr 17:
+B6HRB3_PENCW/625-938
+
+Group nr 18:
+D0U264_CRYPA/482-802
+D1ZJ09_SORMA/711-1030
+Q1K6I6_NEUCR/733-1052
+Q9P8T1_NEUCR/582-901
+B2AR52_PODAN/574-886
+Q2GSQ8_CHAGB/651-969
+C9ST09_VERA1/571-888
+C7YM23_NECH7/666-978
+A4RL50_MAGGR/721-1039
+C5GYE6_AJEDR/653-980
+C5K303_AJEDS/770-890
+C0S8I9_PARBP/1049-1137
+
+Group nr 19:
+C4JIN7_UNCRE/692-1007
+C5P8C9_COCP7/682-993
+C5FBF4_NANOT/570-628
+B2VW51_PYRTR/606-910
+Q0UNU9_PHANO/666-973
+B0D488_LACBS/608-916
+A8P0D4_COPC7/619-925
+A8P2K4_COPC7/589-903
+B0E0C2_LACBS/610-916
+
+Group nr 20:
+A4R6J1_MAGGR/641-908
+B8MQK8_TALSN/682-995
+B6QUK3_PENMQ/689-1001
+B6H0X0_PENCW/641-959
+A1C469_ASPCL/690-1008
+A1DBD4_NEOFI/680-998
+B0Y9U0_ASPFC/686-1004
+Q4WC92_ASPFU/686-1004
+C8VMQ3_EMENI/660-979
+Q5BD61_EMENI/660-979
+Q0CNH1_ASPTN/643-961
+B8MXT2_ASPFN/684-1002
+Q2US02_ASPOR/573-891
+A2R8K3_ASPNC/710-1028
+C7ZR18_NECH7/19-235
+C5PJP0_COCP7/663-977
+C4JG78_UNCRE/651-963
+C5JDT9_AJEDS/671-859
+C5GX22_AJEDR/671-859
+D4ANV6_ARTBE/642-958
+D4CZ86_TRIVC/642-958
+C5FGF6_NANOT/649-965
+C1G7F3_PARBD/674-979
+C0RZ18_PARBP/688-993
+C1GXU8_PARBA/683-1002
+C5JDT9_AJEDS/580-664
+C5GX22_AJEDR/580-664
+C0NMG7_AJECG/678-986
+C6H291_AJECH/678-997
+A6RB60_AJECN/291-610
+Q96UM0_BLUGR/565-886
+A7E4W2_SCLS1/692-1008
+A6RK26_BOTFB/654-970
+D0U265_CRYPA/712-1038
+A2QG96_ASPNC/558-884
+B8N7A8_ASPFN/617-954
+Q2UBS9_ASPOR/578-915
+B2WES9_PYRTR/643-967
+A6QW60_AJECN/639-963
+B6QWK7_PENMQ/644-968
+B8MGF3_TALSN/2-137
+D0U266_CRYPA/635-957
+
+Group nr 21:
+C1GSN8_PARBA/1-191
+C6H5C6_AJECH/26-168
+A6RDB0_AJECN/9-157
+
+Group nr 22:
+D4B128_ARTBE/608-819
+D4D326_TRIVC/587-798
+
+Group nr 23:
+Q0TWJ6_PHANO/160-297
+
+Group nr 24:
+B2WJ98_PYRTR/213-541
+
+Group nr 25:
+A7ISJ0_MYCPJ/514-830
+
+Group nr 26:
+A6S1V9_BOTFB/6-263
+A6SR68_BOTFB/1-284
+
+Group nr 27:
+Q0UCE8_PHANO/551-880
+B2WJ35_PYRTR/419-708
+Q0UCU3_PHANO/737-1044
+Q0UCG8_PHANO/473-701
+Q0UCH0_PHANO/670-999
+
+Group nr 28:
+B8PJA4_POSPM/353-665
+B0DLH7_LACBS/515-821
+A8NFX0_COPC7/514-795
+
+Group nr 29:
+A8NFX5_COPC7/531-721
+
+Group nr 30:
+B9S0P9_RICCO/17-119
+B9SSM8_RICCO/639-934
+
+Group nr 31:
+B2WJ32_PYRTR/383-592
+
+Group nr 32:
+Q4T9Z1_TETNG/519-587
+A9TD99_PHYPA/2-180
+B4G753_DROPE/334-531
+Q4TF92_TETNG/239-305
+Q4TBP2_TETNG/868-934
+
+Group nr 33:
+A8J0N0_CHLRE/619-933
+A8J0M9_CHLRE/675-993
+
+Group nr 34:
+A7T7C9_NEMVE/1-180
+Q70IH5_ARAHA/1-61
+B4H1E3_DROPE/6-68
+
+Group nr 35:
+B2RFN0_OIKDI/550-850
+
+Group nr 36:
+A8WWP9_CAEBR/632-910
+Q9XVI3_CAEEL/574-882
+
+Group nr 37:
+B6VBQ1_CAEBE/1034-1381
+A8XVL1_CAEBR/571-952
+O46002_CAEEL/57-176
+Q9XU82_CAEEL/618-985
+
+Group nr 38:
+A5BG74_VITVI/577-717
+AGO16_ORYSJ/535-844
+B8B4Z4_ORYSI/515-824
+B9FWI9_ORYSJ/515-824
+C0P9X1_MAIZE/1-253
+C5YU43_SORBI/1-285
+B9T7B0_RICCO/516-824
+B9IAL0_POPTR/521-830
+A5CB61_VITVI/15-305
+O48771_ARATH/542-860
+Q3E984_ARATH/528-708
+
+Group nr 39:
+A9SKW0_PHYPA/518-721
+
+Group nr 40:
+AGO17_ORYSJ/514-834
+B8AII3_ORYSI/514-834
+C5WX34_SORBI/1-43
+C0PDS4_MAIZE/580-888
+B7ZXH7_MAIZE/580-736
+C5WR49_SORBI/585-661
+
+Group nr 41:
+C5K8K7_9ALVE/727-977
+
+Group nr 42:
+B9Q8Q1_TOXGO/379-692
+Q1L1E2_TOXGO/161-474
+B6KA84_TOXGO/379-692
+Q1L2C9_TOXGO/379-692
+D2JRZ7_TOXGO/582-895
+B9PJN3_TOXGO/379-693
+Q1L2C8_TOXGO/379-693
+
+Group nr 43:
+O61931_CAEEL/762-1081
+A8WPC9_CAEBR/828-1145
+A8XN44_CAEBR/716-1005
+A8XRY5_CAEBR/161-269
+A8XS10_CAEBR/818-1134
+A8XP19_CAEBR/721-1037
+
+Group nr 44:
+B8PBB9_POSPM/331-616
+B8PFP7_POSPM/371-656
+B8PN24_POSPM/140-415
+
+Group nr 45:
+Q10P03_ORYSJ/678-756
+B9F6T7_ORYSJ/653-731
+B8AK97_ORYSI/622-700
+
+Group nr 46:
+Q0U676_PHANO/647-830
+
+Group nr 47:
+C7SYH3_THAPS/780-1048
+
+Group nr 48:
+A2DPV7_TRIVA/501-794
+
+Group nr 49:
+A2DXK9_TRIVA/462-624
+A1D5I6_NEOFI/71-143
+
+Group nr 50:
+C7SYH3_THAPS/1070-1160
+C7SYH2_PHATR/826-1176
+B7G499_PHATR/1-107
+
+Group nr 51:
+A9T108_PHYPA/1-169
+C6XVE0_PEDHD/320-460
+
+Group nr 52:
+Q86QW7_GIALA/412-736
+A8BCK6_GIALA/555-879
+C6LTG5_GIALA/555-877
+
+Group nr 53:
+C4LVV2_ENTHI/470-756
+B0ET37_ENTDI/470-756
+
+Group nr 54:
+B0ENU6_ENTDI/467-753
+C4LVQ2_ENTHI/467-753
+
+Group nr 55:
+D2V7J4_NAEGR/498-769
+
+Group nr 56:
+C5LD15_9ALVE/718-952
+
+Group nr 57:
+A8VSS4_TETTH/479-774
+
+Group nr 58:
+Q3SD94_PARTE/460-750
+A0D4I7_PARTE/320-610
+Q3SD95_PARTE/471-760
+A0CE33_PARTE/2-210
+
+Group nr 59:
+A0DEE4_PARTE/478-780
+Q3SE57_PARTE/478-788
+Q3SE52_PARTE/466-770
+Q3SE58_PARTE/466-770
+A0CB11_PARTE/463-767
+
+Group nr 60:
+Q0MRE2_TETTH/533-834
+Q239A3_TETTH/603-904
+
+Group nr 61:
+A0CR14_PARTE/559-847
+Q3SE51_PARTE/572-860
+
+Group nr 62:
+Q0Q5B1_9SPIT/472-767
+Q8ISG8_STYLE/475-767
+Q86CV7_STYLE/475-767
+
+Group nr 63:
+Q8MQL1_TETTH/444-756
+Q8MXZ9_TETTH/444-756
+Q23ND1_TETTH/444-756
+Q3SE50_PARTE/446-748
+Q3SE54_PARTE/446-748
+Q3SE55_PARTE/446-748
+
+Group nr 64:
+Q3SE56_PARTE/450-741
+Q3SE59_PARTE/450-741
+Q9U5C9_PARCA/466-759
+Q3SE49_PARTE/467-759
+Q3SE53_PARTE/460-752
+A0E0B0_PARTE/455-747
+
+Group nr 65:
+D2V2M6_NAEGR/28-326
+
+Group nr 66:
+D2VMG4_NAEGR/577-883
+
+Group nr 67:
+B7PDV6_IXOSC/541-835
+B7Q5I1_IXOSC/446-741
+Q0H8V5_9CNID/70-239
+Q3ZUK2_PLADU/35-327
+D1LXB5_SACKO/1-252
+C3XV22_BRAFL/1831-1964
+C3XV20_BRAFL/551-843
+A7RFC2_NEMVE/557-857
+A7T755_NEMVE/2-70
+Q6RSS9_PODCA/561-853
+B2KTD9_9CNID/559-850
+B5BUZ0_9ASCI/567-860
+Q9GPA6_STRPU/114-407
+Q9GPA8_STRPU/547-840
+Q9GPA7_STRPU/547-808
+C3XV23_BRAFL/67-195
+PIWL1_CHICK/561-853
+PIWL1_HUMAN/555-847
+D2HWM8_AILME/555-847
+PIWL1_MOUSE/556-848
+D3ZTP9_RAT/556-848
+PIWL1_DANRE/552-844
+B9U223_ORYLA/549-841
+C3XV22_BRAFL/1173-1299
+C3XV22_BRAFL/2983-3180
+Q4T9Y6_TETNG/521-792
+Q4T9Y9_TETNG/1-228
+B4DYF7_HUMAN/569-859
+PIWL3_HUMAN/578-868
+PIWL4_HUMAN/546-838
+D2I3M6_AILME/487-786
+A6X965_MOUSE/3-172
+PIWL4_RAT/541-834
+PIWL4_MOUSE/541-834
+D3ZDI3_RAT/541-827
+B9ZU52_9TURB/589-885
+A8XEN9_CAEBR/501-812
+Q17567_CAEEL/397-708
+P90786_CAEEL/499-810
+
+Group nr 68:
+C9E0T4_APIME/497-785
+C9E0T3_APIME/525-813
+A7LM14_BOMMO/414-612
+A8D8P8_BOMMO/594-885
+Q7QG53_ANOGA/576-875
+Q16IF2_AEDAE/569-868
+Q16ZS2_AEDAE/361-660
+Q16ZS3_AEDAE/562-861
+B0W5T3_CULQU/510-809
+B0W5P0_CULQU/552-851
+Q171B3_AEDAE/547-846
+B0W5T4_CULQU/546-845
+Q5TW24_ANOGA/530-829
+Q16JS1_AEDAE/576-874
+Q176R2_AEDAE/633-931
+B0XE75_CULQU/501-788
+Q16JS2_AEDAE/571-869
+B0XE74_CULQU/592-891
+B0WYL9_CULQU/560-857
+B4P152_DROYA/546-844
+B3N4Z9_DROER/546-844
+B3MJZ7_DROAN/562-859
+B4G765_DROPE/541-838
+Q29P29_DROPS/540-837
+B4LV39_DROVI/546-843
+B4KHC1_DROMO/539-836
+B4JBE4_DROGR/542-839
+B4MUA1_DROWI/563-860
+B4MUA0_DROWI/539-836
+B4N6U3_DROWI/34-103
+Q95PE5_DROME/1-176
+A8DYZ0_DROME/483-781
+O76922_DROME/554-852
+B4Q9X4_DROSI/545-843
+B4HWZ3_DROSE/549-847
+B4JBE1_DROGR/574-864
+B4KHB7_DROMO/577-867
+B4LV36_DROVI/558-849
+B4MU97_DROWI/591-882
+Q29CN1_DROPS/543-834
+B3N502_DROER/538-829
+B4P149_DROYA/538-829
+Q6NNZ4_DROME/552-843
+C0PTU6_DROME/566-857
+PIWI_DROME/538-829
+Q6NP34_DROME/566-857
+B4Q9X1_DROSI/538-829
+B4HWY9_DROSE/538-829
+B3MJZ4_DROAN/563-854
+
+Group nr 69:
+B9ZU53_9TURB/586-879
+
+Group nr 70:
+B2Z3D6_SCHMD/665-960
+D2Z0E0_DUGJA/657-952
+D2A2S9_TRICA/552-839
+B4N2M0_DROWI/49-131
+B4JP35_DROGR/334-622
+B7FNN2_DROME/566-845
+B6IDV1_DROME/574-861
+Q7PLK0_DROME/566-853
+A4GND8_DROME/566-853
+A7YFW6_DROME/299-494
+A4GUJ7_DROME/566-848
+Q7PWT1_ANOGA/618-916
+Q170R5_AEDAE/637-930
+A9ZSZ2_BOMMO/619-912
+A7BJS3_BOMMO/619-912
+A7LNN5_BOMMO/2-193
+B7QEM1_IXOSC/88-370
+A7SQI3_NEMVE/441-733
+C3Z5S8_BRAFL/570-730
+B0FLQ9_STRPU/653-945
+PIWL2_XENTR/644-935
+D2H044_AILME/665-956
+D3ZRE1_RAT/666-957
+PIWL2_MOUSE/666-957
+PIWL2_HUMAN/668-959
+PIWL2_ONCMY/749-1040
+PIWL2_DANRE/741-1032
+A5PL40_DANRE/7-278
+B9U224_ORYLA/729-1020
+Q4RPK4_TETNG/383-660
+C9E0T2_APIME/1-294
+C9E0S8_APIME/604-898
+C9E0S9_APIME/551-753
+
+Group nr 71:
+C3ZKW1_BRAFL/534-739
+B9ZU54_9TURB/593-893
+
+Group nr 72:
+Q54HL3_DICDI/867-1166
+
+Group nr 73:
+Q7KWS3_DICDI/669-964
+Q54G64_DICDI/590-885
+D3B338_POLPA/992-1287
+D3BMP8_POLPA/633-929
+Q1ZXG9_DICDI/1063-1281
+Q86HF5_DICDI/896-1194
+
+Group nr 74:
+PIWI1_SCHMD/493-790
+D2Z0D8_DUGJA/494-791
+PIWIL_DUGJA/502-800
+PIWI2_SCHMD/516-815
+D2Z0D9_DUGJA/512-810
+
+Group nr 75:
+B0WE96_CULQU/634-782
+A8NGN0_BRUMA/1-135
+
+Group nr 76:
+A4ZYY5_TETTH/495-793
+A4VE06_TETTH/14-183
+Q6UE79_TETTH/497-791
+Q0GM58_TETTH/497-791
+A4VE05_TETTH/347-645
+Q22NE2_TETTH/491-777
+A8VSR3_TETTH/491-787
+
+Group nr 77:
+A4ZYY4_TETTH/474-761
+Q24HU6_TETTH/383-631
+
+Group nr 78:
+A8Q5F0_BRUMA/545-849
+
+Group nr 79:
+Q21691_CAEEL/673-1001
+A8WNJ6_CAEBR/660-987
+A8WS47_CAEBR/435-755
+A8WQA0_CAEBR/671-998
+Q9TXN7_CAEEL/609-935
+C8JQR1_CAEEL/591-918
+YQ53_CAEEL/650-977
+Q9N3L7_CAEEL/585-911
+A8XZY0_CAEBR/665-992
+
+Group nr 80:
+Q27GU1_CAEEL/511-833
+Q19645_CAEEL/674-996
+A8XRG0_CAEBR/648-970
+
+Group nr 81:
+A8QE08_BRUMA/711-1030
+
+Group nr 82:
+Q8MU01_HETGL/745-963
+
+Group nr 83:
+A8XFJ6_CAEBR/595-895
+Q23415_CAEEL/40-350
+GCC7_CAEEL/596-906
+P91085_CAEEL/543-853
+A8WJ71_CAEBR/596-953
+A8X957_CAEBR/565-899
+O62275_CAEEL/594-924
+Q9N585_CAEEL/604-934
+
+Group nr 84:
+A8P7Z4_BRUMA/1-302
+
+Group nr 85:
+Q9XVF1_CAEEL/588-902
+A8WWI1_CAEBR/598-920
+
+Group nr 86:
+A8XUC0_CAEBR/563-774
+
+Group nr 87:
+A8X254_CAEBR/555-701
+
+Group nr 88:
+Q8MU01_HETGL/598-705
+
+Group nr 89:
+A8XEJ5_CAEBR/552-849
+Q86S33_CAEEL/548-852
+Q9GZG4_CAEEL/548-852
+Q86NJ8_CAEEL/548-852
+B3KLZ7_CAEEL/358-662
+O02095_CAEEL/574-878
+O16386_CAEEL/548-847
+A8X254_CAEBR/749-889
+
+Group nr 90:
+A8X023_CAEBR/600-841
+Q21495_CAEEL/61-336
+
+Group nr 91:
+A8X022_CAEBR/492-805
+
+Group nr 92:
+Q2GQS4_CHAGB/345-418
+B0WE95_CULQU/32-179
+
+Group nr 93:
+C5LD15_9ALVE/568-697
+
+Group nr 94:
+A4ZYY6_TETTH/491-831
+Q23AZ6_TETTH/491-831
+
+Group nr 95:
+A0D5D7_PARTE/374-640
+
+Group nr 96:
+C4LY31_ENTHI/438-711
+B0EI01_ENTDI/438-710
+
+Group nr 97:
+B7R785_9THEO/119-333
+
+Group nr 98:
+Q11QW7_CYTH3/390-605
+
+Group nr 99:
+Q9L1X1_STRCO/365-661
+
+Group nr 100:
+D2M4C5_RHOPA/151-447
+A3VQY4_9PROT/445-745
+
+Group nr 101:
+B9MH92_ACIET/439-730
+
+Group nr 102:
+A5D4D9_PELTS/458-756
+A0LL61_SYNFM/455-750
+
+Group nr 103:
+C1F5Q7_ACIC5/440-735
+
+Group nr 104:
+A4WYU7_RHOS5/454-756
+B7K585_CYAP8/439-744
+
+Group nr 105:
+D0BWJ3_9GAMM/401-693
+
+Group nr 106:
+Q1PV30_9BACT/383-655
+
+Group nr 107:
+D2QY15_PIRSD/353-529
+
+Group nr 108:
+D2QGL1_SPILD/333-520
+
+Group nr 109:
+PIWI_ARCFU/110-406
+
+Group nr 110:
+Q96Z85_SULTO/134-346
+
+Group nr 111:
+A3VPN8_9PROT/165-321
+
+Group nr 112:
+D1JFX3_9ARCH/159-437
+
+Group nr 113:
+Q8U3D2_PYRFU/474-756
+
+Group nr 114:
+D3S0S6_FERPL/490-768
+
+Group nr 115:
+Y1321_METJA/426-699
+C7P7E7_METFA/420-692
+
+Group nr 116:
+B6YTQ5_THEON/463-751
+
+Group nr 117:
+D3S7P9_9EURY/531-824
+
+Group nr 118:
+B5IR12_9EURY/528-819
+
+Group nr 119:
+O67434_AQUAE/419-694
+
+Group nr 120:
+B4B3R2_9CHRO/1-219
+A0YYT3_9CYAN/471-752
+A8YDH3_MICAE/463-734
+B0JXD6_MICAN/462-734
+
+Group nr 121:
+B0ADC8_9CLOT/432-721
+
+Group nr 122:
+C4L1M1_EXISA/321-484
+
+Group nr 123:
+C6QUV9_9BACI/2-48
+B7GJX9_ANOFW/423-692
+
+Group nr 124:
+C1V6Q1_9EURY/608-882
+
+Group nr 125:
+B9LVW4_HALLT/464-658
+
+Group nr 126:
+Q53W94_THET8/418-669
+Q746M7_THET2/418-669
+
+Group nr 127:
+B1XJG0_SYNP2/307-599
+
+Group nr 128:
+Q2JSR3_SYNJA/437-712
+Q2JI93_SYNJB/454-728
+Q8DKB1_THEEB/458-739
+Q5MZ10_SYNP6/441-718
+Q31N05_SYNE7/441-718
+
+Group nr 129:
+A4HBN9_LEIBR/872-1190
+A4HZ40_LEIIN/904-1226
+Q4QCH4_LEIMA/899-1221
+
+Group nr 130:
+Q4DYG9_TRYCR/791-1083
+Q6T6J9_9TRYP/784-1082
+D0A1P1_TRYBG/784-1082
+Q38C22_9TRYP/783-1081
+
+Group nr 131:
+C5X6M9_SORBI/1-69
+
+Group nr 132:
+A4HH63_LEIBR/16-225
+A4H6I4_LEIBR/673-882
+
+Group nr 133:
+Q6T6K0_9TRYP/549-877
+D0A4M3_TRYBG/571-899
+Q389P5_9TRYP/560-888
+
+Group nr 134:
+A8WWH9_CAEBR/55-193
+Q17600_CAEEL/19-157
diff --git a/test/scripts/automated/belvu/test12 b/test/scripts/automated/belvu/test12
new file mode 100755
index 0000000..3674ef2
--- /dev/null
+++ b/test/scripts/automated/belvu/test12
@@ -0,0 +1,25 @@
+#!/bin/ksh
+#
+# Description:
+#   Create the tree using the UPGMA method and save it
+#   in new-hampshire format (large alignment)
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences to the saved results
+diffs=`belvu -T u -o tree $data_dir/PF02171_full.selex >&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
+
diff --git a/test/scripts/automated/belvu/test12_results b/test/scripts/automated/belvu/test12_results
new file mode 100644
index 0000000..270a38d
--- /dev/null
+++ b/test/scripts/automated/belvu/test12_results
@@ -0,0 +1,2524 @@
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+C4V9J2_NOSCE/489-791:1.103,
+(
+B6K0R2_SCHJY/507-805:0.308,
+AGO1_SCHPO/500-798:0.308)
+0:0.795)
+0:0.079,
+(
+(
+Q0DZI9_ORYSJ/36-107:-0.000,
+B0LJQ7_CULTA/1-148:-0.000)
+0:0.772,
+(
+B0X641_CULQU/527-832:0.592,
+(
+(
+B0WRW8_CULQU/638-943:0.274,
+(
+C5J0H4_AEDAE/655-961:0.149,
+B0LJQ8_AEDTR/1-254:0.149)
+0:0.125)
+0:0.138,
+Q5TVL2_ANOGA/535-839:0.412)
+0:0.181)
+0:0.180)
+0:0.410)
+0:0.069,
+(
+(
+(
+B8BT49_THAPS/780-963:-0.000,
+B5DIM9_DROPS/1-71:-0.000)
+0:0.000,
+B4G6N2_DROPE/1-37:-0.000)
+0:1.062,
+A8PVW7_BRUMA/492-800:1.062)
+0:0.188)
+0:0.050,
+(
+(
+(
+C4WWR5_ACYPI/1-266:0.774,
+A9QW19_TRICA/79-190:0.774)
+0:0.105,
+Q59HV7_BOMMO/706-1006:0.879)
+0:0.078,
+(
+(
+(
+(
+(
+(
+B4NLX0_DROWI/695-993:0.191,
+B4N082_DROWI/579-877:0.191)
+0:0.029,
+(
+(
+(
+B3NI38_DROER/838-1138:0.044,
+(
+Q2Q3X0_9MUSC/506-806:0.013,
+(
+(
+(
+(
+(
+(
+(
+Q2Q3X2_DROYA/506-806:-0.000,
+Q2Q3X7_DROYA/506-806:-0.000)
+0:0.000,
+Q2Q3X4_DROYA/506-806:-0.000)
+0:0.000,
+B4PCH3_DROYA/843-1143:-0.000)
+0:0.000,
+Q2Q3X6_DROYA/506-806:-0.000)
+0:0.000,
+Q2Q3X8_DROYA/506-806:-0.000)
+0:0.000,
+B4IU14_DROYA/810-1110:-0.000)
+0:0.006,
+Q2Q3X1_DROTE/424-724:0.006)
+0:0.006)
+0:0.032)
+0:0.112,
+B3M505_DROAN/688-988:0.156)
+0:0.030,
+(
+(
+B5DY62_DROPS/643-942:0.006,
+B4GFG0_DROPE/449-748:0.006)
+0:0.093,
+(
+B4GUA7_DROPE/624-923:0.015,
+B5DQH3_DROPS/471-770:0.015)
+0:0.083)
+0:0.088)
+0:0.034)
+0:0.019,
+(
+B4HIG2_DROSE/1-224:0.043,
+B4QL34_DROSI/606-729:0.043)
+0:0.196)
+0:0.028,
+(
+B4G6N7_DROPE/19-133:0.054,
+(
+B5DIM7_DROPS/517-815:0.046,
+B4G6N0_DROPE/517-815:0.046)
+0:0.008)
+0:0.213)
+0:0.011,
+(
+B4IWV1_DROGR/788-1091:0.226,
+(
+B4LH85_DROVI/152-457:0.166,
+B4KUJ5_DROMO/715-1017:0.166)
+0:0.060)
+0:0.052)
+0:0.236,
+(
+(
+(
+(
+C7LAD2_DROME/888-1187:-0.000,
+AGO2_DROME/885-1184:-0.000)
+0:0.077,
+(
+(
+(
+Q2Q3W2_DROSI/511-810:-0.000,
+Q2Q3W7_DROSI/511-810:-0.000)
+0:0.002,
+Q2Q3W9_DROSI/511-810:0.002)
+0:0.009,
+B4NVX8_DROSI/80-259:0.011)
+0:0.066)
+0:0.277,
+(
+(
+(
+(
+(
+(
+(
+B4GTA7_DROPE/448-747:0.001,
+B4HDJ4_DROPE/40-339:0.001)
+0:0.002,
+B4GTA5_DROPE/448-747:0.003)
+0:0.011,
+B5DT30_DROPS/694-993:0.013)
+0:0.011,
+B4GTA6_DROPE/448-736:0.024)
+0:0.086,
+B5DKZ0_DROPS/2-120:0.110)
+0:0.040,
+B4ISF4_DROPE/14-227:0.150)
+0:0.190,
+(
+(
+(
+B4GDQ8_DROPE/669-968:-0.000,
+B4GDQ6_DROPE/661-960:-0.000)
+0:0.041,
+(
+B5DYR9_DROPS/651-950:0.012,
+B5DYR8_DROPS/41-340:0.012)
+0:0.029)
+0:0.093,
+B5DU45_DROPS/389-589:0.134)
+0:0.206)
+0:0.014)
+0:0.076,
+B5DWW4_DROPS/3-186:0.430)
+0:0.083)
+0:0.444)
+0:0.342)
+0:0.044,
+(
+(
+(
+(
+Q5KAT1_CRYNE/560-859:0.378,
+Q5KAU3_CRYNE/580-879:0.378)
+0:0.791,
+(
+(
+Q4TF92_TETNG/161-225:0.451,
+A7SCI6_NEMVE/496-743:0.451)
+0:0.495,
+B9ZU55_9TURB/580-893:0.946)
+0:0.223)
+0:0.063,
+(
+(
+(
+Q4PLA9_PICGL/597-913:0.491,
+(
+(
+(
+(
+(
+Q56X15_ARATH/234-541:0.005,
+Q84VQ0_ARATH/546-853:0.005)
+0:0.005,
+Q84YI4_ARATH/550-857:0.011)
+0:0.251,
+(
+Q9ZVD5_ARATH/577-885:0.240,
+(
+(
+(
+(
+(
+AGO4A_ORYSJ/557-865:-0.000,
+B8ACN1_ORYSI/524-832:-0.000)
+0:0.000,
+A2ZRR6_ORYSJ/650-958:-0.000)
+0:0.102,
+(
+C0HGZ0_MAIZE/552-859:0.022,
+B4FL08_MAIZE/45-352:0.022)
+0:0.080)
+0:0.070,
+(
+C5YX36_SORBI/564-870:0.083,
+(
+(
+B8AUX7_ORYSI/565-872:-0.000,
+AGO4B_ORYSJ/565-872:-0.000)
+0:0.000,
+Q01MP5_ORYSA/565-872:-0.000)
+0:0.083)
+0:0.089)
+0:0.036,
+(
+B9HK80_POPTR/565-884:0.171,
+(
+B9SP45_RICCO/574-882:0.144,
+(
+Q2LFC1_NICBE/558-866:0.087,
+Q2LFC2_NICBE/565-873:0.087)
+0:0.057)
+0:0.027)
+0:0.037)
+0:0.032)
+0:0.022)
+0:0.054,
+(
+(
+A5AMR1_VITVI/53-183:0.160,
+(
+B9HDH5_POPTR/582-891:0.028,
+B9IHG7_POPTR/573-882:0.028)
+0:0.132)
+0:0.026,
+B9SN14_RICCO/570-878:0.186)
+0:0.129)
+0:0.052,
+(
+B9EV67_ORYSJ/22-172:0.056,
+(
+B8ACN0_ORYSI/540-670:0.015,
+AGO15_ORYSJ/546-853:0.015)
+0:0.041)
+0:0.311)
+0:0.124)
+0:0.438,
+(
+(
+A9RNH7_PHYPA/593-893:0.268,
+(
+A9SRY5_PHYPA/573-879:0.183,
+A9U2A5_PHYPA/597-903:0.183)
+0:0.084)
+0:0.219,
+A9SKW0_PHYPA/722-774:0.486)
+0:0.442)
+0:0.209,
+(
+(
+(
+(
+(
+(
+(
+A8JAG8_CHLRE/672-990:0.092,
+A8J9T3_CHLRE/1058-1164:0.092)
+0:0.657,
+(
+(
+(
+Q8H714_PHYIN/1-173:-0.000,
+D0N1C0_PHYIN/587-890:-0.000)
+0:0.021,
+D0N1B9_PHYIN/587-890:0.021)
+0:0.642,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+AGO1_ARATH/676-997:-0.000,
+Q3ECU7_ARATH/678-999:-0.000)
+0:0.087,
+(
+A1E5M2_PEA/696-1017:0.060,
+(
+(
+(
+Q2PEW1_TRIPR/1-247:0.013,
+A1E5M3_PEA/726-1047:0.013)
+0:0.029,
+Q2LFC4_NICBE/678-999:0.042)
+0:0.008,
+(
+B9SJV6_RICCO/687-1008:0.034,
+(
+B9I4Y6_POPTR/688-1009:0.005,
+B9N365_POPTR/308-629:0.005)
+0:0.028)
+0:0.016)
+0:0.010)
+0:0.027)
+0:0.010,
+(
+(
+C5YY05_SORBI/736-1058:0.051,
+B4FGY3_MAIZE/13-335:0.051)
+0:0.022,
+(
+(
+(
+B8AGF0_ORYSI/693-1014:-0.000,
+B9F1L3_ORYSJ/693-1014:-0.000)
+0:0.000,
+AGO1A_ORYSJ/709-1030:-0.000)
+0:0.039,
+(
+(
+C5YE15_SORBI/712-1033:0.006,
+C0HEU9_MAIZE/87-408:0.006)
+0:0.007,
+(
+(
+(
+B9FC11_ORYSJ/374-695:-0.000,
+AGO1B_ORYSJ/746-1067:-0.000)
+0:0.000,
+B8AT34_ORYSI/729-1050:-0.000)
+0:0.000,
+C7J0V9_ORYSJ/1-271:-0.000)
+0:0.012)
+0:0.027)
+0:0.034)
+0:0.024)
+0:0.017,
+(
+A9RG03_PHYPA/598-919:0.034,
+A9RTW5_PHYPA/744-1065:0.034)
+0:0.080)
+0:0.019,
+A9T6J3_PHYPA/524-842:0.133)
+0:0.052,
+(
+(
+(
+(
+(
+B8B2X0_ORYSI/647-968:-0.000,
+AGO1D_ORYSJ/669-990:-0.000)
+0:0.000,
+B9FR04_ORYSJ/644-965:-0.000)
+0:0.032,
+C5Z2L1_SORBI/643-964:0.032)
+0:0.037,
+(
+C5XWS2_SORBI/656-978:0.032,
+(
+B8AFI6_ORYSI/637-958:0.003,
+AGO1C_ORYSJ/638-959:0.003)
+0:0.029)
+0:0.037)
+0:0.078,
+(
+Q2LFC3_NICBE/604-925:0.079,
+B1B5A8_DAUCA/736-1057:0.079)
+0:0.069)
+0:0.038)
+0:0.017,
+(
+(
+(
+(
+(
+PINH_ARATH/625-946:0.011,
+B0FHH7_BRANA/614-935:0.011)
+0:0.014,
+(
+B9RTJ1_RICCO/626-947:0.017,
+(
+B9HKB5_POPTR/631-952:0.008,
+B9HUQ6_POPTR/452-776:0.008)
+0:0.010)
+0:0.008)
+0:0.041,
+(
+(
+PNH1_ORYSJ/620-941:-0.000,
+B9FU05_ORYSJ/458-779:-0.000)
+0:0.018,
+(
+C0PNQ0_MAIZE/1-267:0.013,
+C5Z5J6_SORBI/617-938:0.013)
+0:0.004)
+0:0.048)
+0:0.014,
+B9STN2_RICCO/586-907:0.080)
+0:0.080,
+A5ARQ9_VITVI/592-892:0.160)
+0:0.043)
+0:0.198,
+(
+(
+(
+(
+C5WPM0_SORBI/900-1216:0.188,
+(
+(
+AGO12_ORYSJ/693-1012:-0.000,
+B9FAL8_ORYSJ/438-757:-0.000)
+0:0.012,
+A2XKQ7_ORYSI/654-972:0.012)
+0:0.176)
+0:0.035,
+(
+C5WPM1_SORBI/697-1047:0.096,
+C0PMV6_MAIZE/89-412:0.096)
+0:0.126)
+0:0.039,
+(
+B8APJ4_ORYSI/9-101:0.199,
+(
+B9FEW4_ORYSJ/531-767:0.019,
+AGO11_ORYSJ/541-848:0.019)
+0:0.179)
+0:0.063)
+0:0.133,
+(
+(
+(
+B9MTL4_POPTR/505-810:0.234,
+(
+B9SCN8_RICCO/632-949:0.184,
+(
+B9HQS2_POPTR/635-955:0.090,
+B9GEQ1_POPTR/548-869:0.090)
+0:0.094)
+0:0.050)
+0:0.025,
+AGOL_ARATH/638-958:0.259)
+0:0.100,
+(
+(
+(
+(
+B8ALC4_ORYSI/596-877:-0.000,
+B9F6E0_ORYSJ/564-783:-0.000)
+0:0.047,
+AGO13_ORYSJ/471-770:0.047)
+0:0.130,
+(
+(
+(
+MEL1_ORYSJ/696-1016:-0.000,
+B8ALC8_ORYSI/696-1016:-0.000)
+0:0.004,
+A3ANP6_ORYSJ/644-982:0.004)
+0:0.068,
+C5WX38_SORBI/703-1025:0.073)
+0:0.105)
+0:0.103,
+(
+(
+B7ZZW2_MAIZE/663-969:0.032,
+(
+Q7FS89_MAIZE/11-170:0.023,
+Q8S478_MAIZE/38-188:0.023)
+0:0.009)
+0:0.111,
+C5XBU2_SORBI/675-995:0.143)
+0:0.137)
+0:0.078)
+0:0.035)
+0:0.006)
+0:0.083,
+(
+(
+B9FVX3_ORYSJ/462-794:-0.000,
+AGO14_ORYSJ/677-1009:-0.000)
+0:0.001,
+B8B7Y0_ORYSI/653-985:0.001)
+0:0.483)
+0:0.180)
+0:0.085)
+0:0.076,
+(
+Q0DZI9_ORYSJ/119-248:0.327,
+(
+B8AFF9_ORYSI/534-832:0.225,
+B9F134_ORYSJ/36-347:0.225)
+0:0.102)
+0:0.497)
+0:0.092,
+(
+D0MT95_PHYIN/497-796:0.246,
+(
+D0MT54_PHYIN/891-1191:0.176,
+D0MT94_PHYIN/524-824:0.176)
+0:0.070)
+0:0.671)
+0:0.032,
+(
+(
+B3SEP3_TRIAD/438-734:0.704,
+(
+(
+(
+A8NJ50_BRUMA/1-61:0.192,
+(
+TAG76_CAEEL/660-966:0.016,
+(
+A8XA10_CAEBR/683-989:0.004,
+(
+Q7JLZ2_CAEEL/652-958:-0.000,
+Q21079_CAEEL/655-961:-0.000)
+0:0.004)
+0:0.012)
+0:0.176)
+0:0.446,
+B7QBT5_IXOSC/313-623:0.638)
+0:0.046,
+(
+B7Q990_IXOSC/474-787:0.596,
+(
+B7Q811_IXOSC/611-920:0.365,
+B7P230_IXOSC/468-776:0.365)
+0:0.232)
+0:0.088)
+0:0.020)
+0:0.143,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+C3ZN91_BRAFL/470-771:0.034,
+C3ZQ22_BRAFL/680-848:0.034)
+0:0.082,
+D2XMQ5_SACKO/1-219:0.115)
+0:0.037,
+(
+C4Q6D1_SCHMA/608-835:0.006,
+Q5C3Y0_SCHJA/4-157:0.006)
+0:0.146)
+0:0.054,
+A7RQ46_NEMVE/511-812:0.206)
+0:0.009,
+(
+(
+B2RFN1_OIKDI/771-1072:0.122,
+Q8CGT7_MOUSE/576-634:0.122)
+0:0.042,
+C8TEF3_OIKDI/573-874:0.164)
+0:0.052)
+0:0.012,
+(
+B3VCG6_STRPU/599-900:0.214,
+(
+(
+(
+D4A2P5_RAT/843-954:0.021,
+(
+(
+(
+Q4R7V5_MACFA/1-211:0.003,
+(
+(
+(
+AGO4_HUMAN/509-820:-0.000,
+D2H608_AILME/505-816:-0.000)
+0:0.000,
+A7MD27_HUMAN/509-820:-0.000)
+0:0.000,
+Q9NXV9_HUMAN/35-346:-0.000)
+0:0.003)
+0:0.004,
+AGO4_CHICK/442-753:0.006)
+0:0.012,
+AGO4_XENLA/532-843:0.018)
+0:0.003)
+0:0.020,
+Q4SVE6_TETNG/553-864:0.041)
+0:0.028,
+Q8CGT8_MOUSE/1000-1102:0.069)
+0:0.145)
+0:0.014)
+0:0.074,
+(
+(
+(
+(
+B7QCC4_IXOSC/509-810:0.032,
+A9QW17_TRICA/69-158:0.032)
+0:0.037,
+(
+A7BJS5_BOMMO/569-871:0.046,
+(
+(
+(
+(
+(
+B4LJF3_DROVI/646-948:-0.000,
+B4KTB5_DROMO/643-945:-0.000)
+0:0.002,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+B4P449_DROYA/624-926:-0.000,
+B4JW20_DROGR/647-949:-0.000)
+0:0.000,
+Q7KY08_DROME/607-909:-0.000)
+0:0.000,
+B3NRF4_DROER/624-926:-0.000)
+0:0.000,
+B4INL3_DROSE/624-926:-0.000)
+0:0.000,
+B4GGS7_DROPE/642-944:-0.000)
+0:0.000,
+Q28ZU1_DROPS/642-944:-0.000)
+0:0.000,
+B3MHG1_DROAN/641-943:-0.000)
+0:0.000,
+Q32KD4_DROME/641-943:-0.000)
+0:0.000,
+Q960T1_DROME/258-560:-0.000)
+0:0.000,
+Q27IQ2_DROSI/554-851:-0.000)
+0:0.000,
+Q27IR0_DROME/554-851:-0.000)
+0:0.002)
+0:0.003,
+Q8T059_DROME/81-383:0.005)
+0:0.005,
+B4N5V9_DROWI/642-944:0.010)
+0:0.015,
+(
+(
+(
+B0WFU8_CULQU/621-923:-0.000,
+Q7PZ41_ANOGA/638-940:-0.000)
+0:0.000,
+Q16EE2_AEDAE/482-784:-0.000)
+0:0.000,
+Q16M62_AEDAE/604-906:-0.000)
+0:0.025)
+0:0.021)
+0:0.024)
+0:0.060,
+(
+(
+(
+(
+(
+(
+A9NJ58_PENMO/569-898:-0.000,
+D2XYX4_PENJP/572-901:-0.000)
+0:0.000,
+A9NJ57_PENMO/572-901:-0.000)
+0:0.000,
+D2DK65_PENJP/572-901:-0.000)
+0:0.000,
+D2DK66_PENJP/569-898:-0.000)
+0:0.005,
+A7XZ43_PENMO/569-898:0.005)
+0:0.008,
+Q071E1_PENMO/569-898:0.013)
+0:0.117)
+0:0.133,
+(
+A8WKF9_CAEBR/562-864:0.163,
+(
+A8P168_BRUMA/623-925:0.096,
+(
+(
+Q86B39_CAEEL/547-848:-0.000,
+O16720_CAEEL/566-867:-0.000)
+0:0.046,
+(
+(
+(
+B2L7Q3_CAERE/1-268:-0.000,
+B2L7P9_CAERE/1-269:-0.000)
+0:0.000,
+A8X4Z3_CAEBR/691-992:-0.000)
+0:0.003,
+(
+(
+Q3LTR7_CAEEL/668-969:-0.000,
+Q20578_CAEEL/660-961:-0.000)
+0:0.000,
+B6VQ75_CAEEL/681-982:-0.000)
+0:0.003)
+0:0.043)
+0:0.050)
+0:0.067)
+0:0.100)
+0:0.039)
+0:0.070,
+(
+(
+(
+(
+(
+Q4S7L6_TETNG/228-304:0.027,
+AGO3_DANRE/518-819:0.027)
+0:0.045,
+(
+(
+(
+(
+(
+D4AC38_RAT/515-816:0.002,
+(
+(
+(
+(
+(
+(
+Q8BJP2_MOUSE/364-665:-0.000,
+A2VDG1_MOUSE/513-814:-0.000)
+0:0.000,
+D2H607_AILME/507-808:-0.000)
+0:0.000,
+B2RAD8_HUMAN/515-816:-0.000)
+0:0.000,
+Q5TA58_HUMAN/440-741:-0.000)
+0:0.000,
+A1L365_MOUSE/515-816:-0.000)
+0:0.000,
+AGO1_HUMAN/515-816:-0.000)
+0:0.002)
+0:0.002,
+AGO1_MOUSE/515-816:0.004)
+0:0.004,
+Q4S7L5_TETNG/517-818:0.008)
+0:0.002,
+Q8CGU0_MOUSE/527-843:0.011)
+0:0.015,
+B3KME0_HUMAN/440-741:0.026)
+0:0.047)
+0:0.077,
+(
+(
+(
+(
+D2HF39_AILME/511-813:0.005,
+(
+AGO2_RAT/517-819:0.003,
+(
+(
+(
+(
+(
+(
+(
+(
+A1A563_MOUSE/517-819:-0.000,
+AGO2_RABIT/497-799:-0.000)
+0:0.000,
+B0JYP5_BOVIN/517-819:-0.000)
+0:0.000,
+Q6PHA2_MOUSE/94-396:-0.000)
+0:0.000,
+AGO2_HUMAN/516-818:-0.000)
+0:0.000,
+A4FVC0_HUMAN/465-767:-0.000)
+0:0.000,
+Q8R3Q7_MOUSE/187-489:-0.000)
+0:0.000,
+AGO2_MOUSE/517-819:-0.000)
+0:0.000,
+Q8CGT9_MOUSE/501-743:-0.000)
+0:0.003)
+0:0.002)
+0:0.005,
+(
+(
+AGO2_XENLA/519-821:-0.000,
+C0IN02_XENLA/519-821:-0.000)
+0:0.000,
+AGO2_XENTR/528-830:-0.000)
+0:0.010)
+0:0.005,
+(
+AGO2_BOVIN/517-819:0.008,
+Q6P239_MOUSE/277-579:0.008)
+0:0.007)
+0:0.035,
+(
+Q4RKH3_TETNG/508-822:0.006,
+(
+C9V4A2_CTEID/306-581:-0.000,
+B0F0Y5_9TELE/526-828:-0.000)
+0:0.006)
+0:0.044)
+0:0.099)
+0:0.030,
+(
+(
+(
+(
+A3KFX7_MOUSE/1-109:0.008,
+AGO3_BOVIN/518-820:0.008)
+0:0.004,
+(
+(
+(
+(
+(
+(
+D2H606_AILME/513-814:-0.000,
+AGO3_HUMAN/518-819:-0.000)
+0:0.000,
+B4DY67_HUMAN/154-455:-0.000)
+0:0.000,
+B1ALI0_HUMAN/284-585:-0.000)
+0:0.000,
+A8KA05_HUMAN/518-819:-0.000)
+0:0.000,
+B4E1P5_HUMAN/346-647:-0.000)
+0:0.003,
+AGO3_CHICK/518-819:0.003)
+0:0.009)
+0:0.005,
+(
+(
+A3KFX6_MOUSE/1-140:-0.000,
+Q7M738_MOUSE/426-707:-0.000)
+0:0.006,
+(
+Q3TBP7_MOUSE/518-819:-0.000,
+AGO3_MOUSE/518-819:-0.000)
+0:0.006)
+0:0.011)
+0:0.073,
+Q4TBP2_TETNG/578-853:0.090)
+0:0.089)
+0:0.036,
+(
+D4A2P5_RAT/513-742:0.083,
+(
+(
+AGO4_MOUSE/509-820:-0.000,
+Q8BTF2_MOUSE/35-346:-0.000)
+0:0.003,
+Q8CGT8_MOUSE/660-885:0.003)
+0:0.080)
+0:0.133)
+0:0.156)
+0:0.185,
+(
+Q4SXU1_TETNG/1-206:0.426,
+Q8CGT7_MOUSE/455-570:0.426)
+0:0.131)
+0:0.289)
+0:0.102)
+0:0.044,
+(
+(
+(
+(
+(
+B9FX53_ORYSJ/672-981:-0.000,
+AGO18_ORYSJ/747-1056:-0.000)
+0:0.015,
+B8B5Y3_ORYSI/745-1054:0.015)
+0:0.394,
+C5X8G4_SORBI/699-1002:0.409)
+0:0.187,
+(
+C5X8G7_SORBI/41-220:0.372,
+C5WR49_SORBI/670-825:0.372)
+0:0.224)
+0:0.314,
+(
+(
+Q5DFJ9_SCHJA/2-164:0.208,
+(
+(
+Q5DG80_SCHJA/3-99:0.024,
+Q5DCI0_SCHJA/265-566:0.024)
+0:0.039,
+C4QPD0_SCHMA/628-928:0.063)
+0:0.145)
+0:0.245,
+(
+C4QPD2_SCHMA/595-831:0.070,
+C4QPD1_SCHMA/595-896:0.070)
+0:0.383)
+0:0.456)
+0:0.083)
+0:0.041,
+(
+(
+(
+(
+Q0DZJ0_ORYSJ/35-101:-0.000,
+B9IL53_POPTR/1-160:-0.000)
+0:0.511,
+(
+(
+(
+(
+A5BG29_VITVI/774-895:0.151,
+(
+A5BW27_VITVI/926-1238:0.140,
+(
+B9S921_RICCO/670-981:0.088,
+B9HXP0_POPTR/520-831:0.088)
+0:0.052)
+0:0.011)
+0:0.057,
+D3GBV1_LOTJA/669-981:0.208)
+0:0.036,
+Q9C793_ARATH/649-950:0.244)
+0:0.077,
+(
+(
+(
+A3AJI1_ORYSJ/584-892:-0.000,
+AGO7_ORYSJ/709-1017:-0.000)
+0:0.000,
+A2YQ96_ORYSI/716-1024:-0.000)
+0:0.126,
+(
+D0EYF3_MAIZE/683-995:0.040,
+C5WVP1_SORBI/688-996:0.040)
+0:0.085)
+0:0.196)
+0:0.190)
+0:0.351,
+(
+(
+(
+(
+(
+A3AXD9_ORYSJ/720-1023:-0.000,
+A2XXJ0_ORYSI/688-991:-0.000)
+0:0.000,
+AGO3_ORYSJ/720-1023:-0.000)
+0:0.000,
+Q00RR5_ORYSA/745-1048:-0.000)
+0:0.327,
+(
+(
+(
+B9FCH7_ORYSJ/626-928:-0.000,
+AGO2_ORYSJ/687-989:-0.000)
+0:0.011,
+(
+Q00RR6_ORYSA/693-995:-0.000,
+A2XXI9_ORYSI/693-995:-0.000)
+0:0.011)
+0:0.203,
+(
+C5YG12_SORBI/746-1048:0.102,
+C0PIX4_MAIZE/1-297:0.102)
+0:0.112)
+0:0.113)
+0:0.347,
+(
+(
+Q9SHF2_ARATH/841-1145:0.288,
+(
+Q9SHF3_ARATH/665-965:-0.000,
+Q8GX33_ARATH/191-491:-0.000)
+0:0.288)
+0:0.233,
+(
+(
+A5AFZ6_VITVI/719-1022:0.246,
+(
+A5CBU3_VITVI/601-900:0.045,
+A5B8D3_VITVI/625-924:0.045)
+0:0.200)
+0:0.054,
+(
+B9NA51_POPTR/676-973:0.240,
+B9S3I1_RICCO/146-445:0.240)
+0:0.060)
+0:0.221)
+0:0.153)
+0:0.188)
+0:0.138,
+C1DZY0_9CHLO/572-888:1.000)
+0:0.033)
+0:0.104)
+0:0.095)
+0:0.009,
+(
+A8PFS7_COPC7/454-749:0.939,
+(
+(
+A8NXQ6_COPC7/547-849:0.621,
+(
+(
+B0CXE0_LACBS/567-880:0.445,
+(
+B0CYG1_LACBS/553-863:0.389,
+B0D2D0_LACBS/417-738:0.389)
+0:0.056)
+0:0.035,
+A8PFQ6_COPC7/458-767:0.480)
+0:0.141)
+0:0.159,
+A8P6A7_COPC7/477-803:0.780)
+0:0.159)
+0:0.302)
+0:0.103)
+0:0.083,
+(
+(
+(
+(
+(
+(
+(
+D0U267_CRYPA/639-939:0.525,
+A4QSM3_MAGGR/672-970:0.525)
+0:0.094,
+(
+A6S388_BOTFB/557-866:0.107,
+A7F377_SCLS1/445-754:0.107)
+0:0.512)
+0:0.021,
+(
+C7YHP8_NECH7/612-917:0.555,
+(
+C9SSA6_VERA1/19-91:0.158,
+C9SGB5_VERA1/589-897:0.158)
+0:0.397)
+0:0.086)
+0:0.039,
+(
+Q8J276_NEUCR/628-929:0.252,
+D1ZPU0_SORMA/563-867:0.252)
+0:0.427)
+0:0.035,
+B2AKU3_PODAN/441-754:0.715)
+0:0.177,
+(
+(
+B6Q5R7_PENMQ/547-853:0.218,
+B8M5N8_TALSN/546-852:0.218)
+0:0.463,
+(
+(
+(
+(
+(
+(
+C8V9S4_EMENI/46-154:-0.000,
+Q5B3I7_EMENI/46-154:-0.000)
+0:0.213,
+Q0CNV7_ASPTN/543-854:0.213)
+0:0.021,
+(
+(
+Q2UKV9_ASPOR/543-849:-0.000,
+B8N3T1_ASPFN/436-742:-0.000)
+0:0.187,
+(
+A1CKK4_ASPCL/543-849:0.069,
+(
+A1D6W7_NEOFI/543-849:0.018,
+(
+B0XXP5_ASPFC/564-870:-0.000,
+Q4WXX3_ASPFU/564-870:-0.000)
+0:0.018)
+0:0.051)
+0:0.118)
+0:0.047)
+0:0.058,
+A2QDC5_ASPNC/643-949:0.291)
+0:0.187,
+(
+(
+(
+(
+C1G1H6_PARBD/510-817:0.022,
+C1GU57_PARBA/495-755:0.022)
+0:0.012,
+C0S3N8_PARBP/535-823:0.035)
+0:0.183,
+(
+(
+C5G7J1_AJEDR/547-854:-0.000,
+C5JJJ6_AJEDS/547-854:-0.000)
+0:0.077,
+(
+(
+C6HRE3_AJECH/547-854:-0.000,
+C0NUS8_AJECG/547-854:-0.000)
+0:0.002,
+A6RGK9_AJECN/547-854:0.002)
+0:0.075)
+0:0.140)
+0:0.162,
+(
+(
+C5FDD8_NANOT/542-847:0.090,
+(
+D4AMR8_ARTBE/628-933:0.017,
+D4DBM7_TRIVC/515-807:0.017)
+0:0.073)
+0:0.232,
+(
+C5P9D5_COCP7/668-975:0.126,
+C4JZ88_UNCRE/552-859:0.126)
+0:0.196)
+0:0.058)
+0:0.098)
+0:0.114,
+B6H4L5_PENCW/673-980:0.593)
+0:0.088)
+0:0.211)
+0:0.055,
+(
+Q0U7V7_PHANO/645-956:0.365,
+B2W8P0_PYRTR/611-920:0.365)
+0:0.582)
+0:0.480)
+0:0.054,
+(
+(
+A7TMA9_VANPO/888-1209:0.976,
+(
+A5E477_LODEL/107-430:0.414,
+(
+C5MCT9_CANTT/554-879:0.280,
+(
+B9WGS3_CANDC/555-882:0.040,
+(
+Q5A1B6_CANAL/296-623:0.003,
+C4YGL4_CANAL/554-881:0.003)
+0:0.037)
+0:0.241)
+0:0.134)
+0:0.562)
+0:0.390,
+(
+(
+Q2HHM4_CHAGB/694-1033:1.082,
+(
+(
+(
+B6HRB3_PENCW/625-938:1.009,
+(
+(
+D0U264_CRYPA/482-802:0.782,
+(
+(
+(
+(
+D1ZJ09_SORMA/711-1030:0.151,
+(
+Q1K6I6_NEUCR/733-1052:-0.000,
+Q9P8T1_NEUCR/582-901:-0.000)
+0:0.151)
+0:0.298,
+(
+B2AR52_PODAN/574-886:0.418,
+Q2GSQ8_CHAGB/651-969:0.418)
+0:0.032)
+0:0.127,
+(
+C9ST09_VERA1/571-888:0.434,
+C7YM23_NECH7/666-978:0.434)
+0:0.142)
+0:0.080,
+A4RL50_MAGGR/721-1039:0.656)
+0:0.126)
+0:0.154,
+(
+(
+C5GYE6_AJEDR/653-980:0.261,
+C5K303_AJEDS/770-890:0.261)
+0:0.382,
+C0S8I9_PARBP/1049-1137:0.643)
+0:0.293)
+0:0.073)
+0:0.015,
+(
+(
+(
+(
+C4JIN7_UNCRE/692-1007:0.322,
+C5P8C9_COCP7/682-993:0.322)
+0:0.192,
+C5FBF4_NANOT/570-628:0.514)
+0:0.199,
+(
+B2VW51_PYRTR/606-910:0.332,
+Q0UNU9_PHANO/666-973:0.332)
+0:0.381)
+0:0.161,
+(
+(
+B0D488_LACBS/608-916:0.291,
+A8P0D4_COPC7/619-925:0.291)
+0:0.376,
+(
+A8P2K4_COPC7/589-903:0.304,
+B0E0C2_LACBS/610-916:0.304)
+0:0.363)
+0:0.208)
+0:0.149)
+0:0.008,
+(
+(
+(
+(
+A4R6J1_MAGGR/641-908:0.782,
+(
+(
+(
+B8MQK8_TALSN/682-995:0.188,
+B6QUK3_PENMQ/689-1001:0.188)
+0:0.381,
+(
+(
+B6H0X0_PENCW/641-959:0.427,
+(
+(
+A1C469_ASPCL/690-1008:0.101,
+(
+A1DBD4_NEOFI/680-998:0.041,
+(
+B0Y9U0_ASPFC/686-1004:-0.000,
+Q4WC92_ASPFU/686-1004:-0.000)
+0:0.041)
+0:0.060)
+0:0.231,
+(
+(
+C8VMQ3_EMENI/660-979:-0.000,
+Q5BD61_EMENI/660-979:-0.000)
+0:0.309,
+(
+(
+Q0CNH1_ASPTN/643-961:0.273,
+(
+B8MXT2_ASPFN/684-1002:-0.000,
+Q2US02_ASPOR/573-891:-0.000)
+0:0.273)
+0:0.004,
+A2R8K3_ASPNC/710-1028:0.277)
+0:0.031)
+0:0.023)
+0:0.095)
+0:0.110,
+C7ZR18_NECH7/19-235:0.536)
+0:0.033)
+0:0.125,
+(
+(
+(
+(
+(
+C5PJP0_COCP7/663-977:0.225,
+C4JG78_UNCRE/651-963:0.225)
+0:0.163,
+(
+C5JDT9_AJEDS/671-859:0.005,
+C5GX22_AJEDR/671-859:0.005)
+0:0.383)
+0:0.071,
+(
+(
+D4ANV6_ARTBE/642-958:-0.000,
+D4CZ86_TRIVC/642-958:-0.000)
+0:0.125,
+C5FGF6_NANOT/649-965:0.125)
+0:0.334)
+0:0.124,
+(
+(
+(
+(
+C1G7F3_PARBD/674-979:0.006,
+C0RZ18_PARBP/688-993:0.006)
+0:0.023,
+C1GXU8_PARBA/683-1002:0.029)
+0:0.107,
+(
+(
+C5JDT9_AJEDS/580-664:-0.000,
+C5GX22_AJEDR/580-664:-0.000)
+0:0.120,
+(
+(
+C0NMG7_AJECG/678-986:0.008,
+C6H291_AJECH/678-997:0.008)
+0:0.013,
+A6RB60_AJECN/291-610:0.021)
+0:0.099)
+0:0.017)
+0:0.428,
+(
+Q96UM0_BLUGR/565-886:0.422,
+(
+A7E4W2_SCLS1/692-1008:0.112,
+A6RK26_BOTFB/654-970:0.112)
+0:0.310)
+0:0.143)
+0:0.018)
+0:0.055,
+D0U265_CRYPA/712-1038:0.638)
+0:0.056)
+0:0.088)
+0:0.083,
+A2QG96_ASPNC/558-884:0.865)
+0:0.045,
+(
+(
+B8N7A8_ASPFN/617-954:0.002,
+Q2UBS9_ASPOR/578-915:0.002)
+0:0.625,
+(
+(
+B2WES9_PYRTR/643-967:0.126,
+(
+A6QW60_AJECN/639-963:0.090,
+B6QWK7_PENMQ/644-968:0.090)
+0:0.036)
+0:0.063,
+B8MGF3_TALSN/2-137:0.189)
+0:0.439)
+0:0.282)
+0:0.059,
+D0U266_CRYPA/635-957:0.969)
+0:0.063)
+0:0.051)
+0:0.152,
+(
+(
+C1GSN8_PARBA/1-191:0.617,
+(
+C6H5C6_AJECH/26-168:0.208,
+A6RDB0_AJECN/9-157:0.208)
+0:0.409)
+0:0.588,
+(
+D4B128_ARTBE/608-819:0.060,
+D4D326_TRIVC/587-798:0.060)
+0:1.145)
+0:0.029)
+0:0.131)
+0:0.115)
+0:0.015,
+(
+(
+Q0TWJ6_PHANO/160-297:1.318,
+(
+(
+B2WJ98_PYRTR/213-541:1.142,
+(
+A7ISJ0_MYCPJ/514-830:1.050,
+(
+A6S1V9_BOTFB/6-263:0.975,
+A6SR68_BOTFB/1-284:0.975)
+0:0.075)
+0:0.092)
+0:0.019,
+(
+(
+Q0UCE8_PHANO/551-880:0.700,
+B2WJ35_PYRTR/419-708:0.700)
+0:0.257,
+(
+Q0UCU3_PHANO/737-1044:0.831,
+(
+Q0UCG8_PHANO/473-701:0.824,
+Q0UCH0_PHANO/670-999:0.824)
+0:0.007)
+0:0.127)
+0:0.204)
+0:0.156)
+0:0.098,
+(
+(
+B8PJA4_POSPM/353-665:0.860,
+(
+B0DLH7_LACBS/515-821:0.828,
+A8NFX0_COPC7/514-795:0.828)
+0:0.032)
+0:0.145,
+A8NFX5_COPC7/531-721:1.005)
+0:0.410)
+0:0.080)
+0:0.078,
+(
+(
+B9S0P9_RICCO/17-119:0.442,
+B9SSM8_RICCO/639-934:0.442)
+0:0.647,
+B2WJ32_PYRTR/383-592:1.089)
+0:0.484)
+0:0.124,
+(
+(
+(
+(
+Q4T9Z1_TETNG/519-587:-0.000,
+A9TD99_PHYPA/2-180:-0.000)
+0:0.766,
+(
+(
+B4G753_DROPE/334-531:-0.000,
+Q4TF92_TETNG/239-305:-0.000)
+0:0.000,
+Q4TBP2_TETNG/868-934:-0.000)
+0:0.766)
+0:0.534,
+(
+A8J0N0_CHLRE/619-933:0.123,
+A8J0M9_CHLRE/675-993:0.123)
+0:1.177)
+0:0.315,
+(
+(
+(
+(
+(
+A7T7C9_NEMVE/1-180:-0.000,
+Q70IH5_ARAHA/1-61:-0.000)
+0:0.493,
+B4H1E3_DROPE/6-68:0.493)
+0:0.645,
+B2RFN0_OIKDI/550-850:1.138)
+0:0.226,
+(
+A8WWP9_CAEBR/632-910:0.258,
+Q9XVI3_CAEEL/574-882:0.258)
+0:1.106)
+0:0.224,
+(
+B6VBQ1_CAEBE/1034-1381:0.593,
+(
+A8XVL1_CAEBR/571-952:0.546,
+(
+O46002_CAEEL/57-176:0.375,
+Q9XU82_CAEEL/618-985:0.375)
+0:0.170)
+0:0.047)
+0:0.995)
+0:0.028)
+0:0.081)
+0:0.061,
+(
+(
+(
+(
+A5BG74_VITVI/577-717:0.438,
+(
+(
+(
+(
+(
+AGO16_ORYSJ/535-844:-0.000,
+B8B4Z4_ORYSI/515-824:-0.000)
+0:0.000,
+B9FWI9_ORYSJ/515-824:-0.000)
+0:0.106,
+(
+C0P9X1_MAIZE/1-253:0.007,
+C5YU43_SORBI/1-285:0.007)
+0:0.099)
+0:0.204,
+(
+B9T7B0_RICCO/516-824:0.214,
+(
+B9IAL0_POPTR/521-830:0.113,
+A5CB61_VITVI/15-305:0.113)
+0:0.101)
+0:0.095)
+0:0.046,
+O48771_ARATH/542-860:0.356)
+0:0.082)
+0:0.174,
+Q3E984_ARATH/528-708:0.612)
+0:0.635,
+A9SKW0_PHYPA/518-721:1.247)
+0:0.230,
+(
+(
+(
+AGO17_ORYSJ/514-834:-0.000,
+B8AII3_ORYSI/514-834:-0.000)
+0:0.627,
+C5WX34_SORBI/1-43:0.627)
+0:0.177,
+(
+(
+C0PDS4_MAIZE/580-888:0.008,
+B7ZXH7_MAIZE/580-736:0.008)
+0:0.289,
+C5WR49_SORBI/585-661:0.296)
+0:0.507)
+0:0.674)
+0:0.281)
+0:0.216,
+(
+C5K8K7_9ALVE/727-977:1.519,
+(
+(
+(
+(
+(
+(
+B9Q8Q1_TOXGO/379-692:-0.000,
+Q1L1E2_TOXGO/161-474:-0.000)
+0:0.000,
+B6KA84_TOXGO/379-692:-0.000)
+0:0.000,
+Q1L2C9_TOXGO/379-692:-0.000)
+0:0.000,
+D2JRZ7_TOXGO/582-895:-0.000)
+0:0.000,
+B9PJN3_TOXGO/379-693:-0.000)
+0:0.000,
+Q1L2C8_TOXGO/379-693:-0.000)
+0:1.519)
+0:0.455)
+0:0.015,
+(
+O61931_CAEEL/762-1081:0.689,
+(
+(
+A8WPC9_CAEBR/828-1145:0.235,
+A8XN44_CAEBR/716-1005:0.235)
+0:0.128,
+(
+A8XRY5_CAEBR/161-269:0.286,
+(
+A8XS10_CAEBR/818-1134:0.190,
+A8XP19_CAEBR/721-1037:0.190)
+0:0.096)
+0:0.077)
+0:0.325)
+0:1.301)
+0:0.151,
+(
+(
+B8PBB9_POSPM/331-616:0.062,
+(
+B8PFP7_POSPM/371-656:0.014,
+B8PN24_POSPM/140-415:0.014)
+0:0.048)
+0:1.809,
+(
+(
+Q10P03_ORYSJ/678-756:-0.000,
+B9F6T7_ORYSJ/653-731:-0.000)
+0:0.000,
+B8AK97_ORYSI/622-700:-0.000)
+0:1.871)
+0:0.269)
+0:0.229,
+Q0U676_PHANO/647-830:2.369)
+0:0.134,
+(
+(
+C7SYH3_THAPS/780-1048:2.094,
+(
+A2DPV7_TRIVA/501-794:1.773,
+(
+A2DXK9_TRIVA/462-624:-0.000,
+A1D5I6_NEOFI/71-143:-0.000)
+0:1.773)
+0:0.321)
+0:0.267,
+(
+(
+(
+(
+C7SYH3_THAPS/1070-1160:0.794,
+(
+C7SYH2_PHATR/826-1176:0.286,
+B7G499_PHATR/1-107:0.286)
+0:0.508)
+0:1.081,
+(
+A9T108_PHYPA/1-169:-0.000,
+C6XVE0_PEDHD/320-460:-0.000)
+0:1.875)
+0:0.133,
+(
+(
+Q86QW7_GIALA/412-736:-0.000,
+A8BCK6_GIALA/555-879:-0.000)
+0:0.447,
+C6LTG5_GIALA/555-877:0.447)
+0:1.561)
+0:0.152,
+(
+(
+(
+C4LVV2_ENTHI/470-756:0.041,
+B0ET37_ENTDI/470-756:0.041)
+0:1.267,
+(
+B0ENU6_ENTDI/467-753:0.165,
+C4LVQ2_ENTHI/467-753:0.165)
+0:1.143)
+0:0.650,
+(
+(
+D2V7J4_NAEGR/498-769:1.760,
+(
+C5LD15_9ALVE/718-952:1.599,
+A8VSS4_TETTH/479-774:1.599)
+0:0.162)
+0:0.137,
+(
+(
+(
+(
+(
+(
+Q3SD94_PARTE/460-750:-0.000,
+A0D4I7_PARTE/320-610:-0.000)
+0:0.504,
+Q3SD95_PARTE/471-760:0.504)
+0:0.256,
+A0CE33_PARTE/2-210:0.760)
+0:0.258,
+(
+(
+A0DEE4_PARTE/478-780:0.028,
+Q3SE57_PARTE/478-788:0.028)
+0:0.625,
+(
+Q3SE52_PARTE/466-770:0.092,
+(
+Q3SE58_PARTE/466-770:-0.000,
+A0CB11_PARTE/463-767:-0.000)
+0:0.092)
+0:0.561)
+0:0.365)
+0:0.645,
+(
+(
+(
+Q0MRE2_TETTH/533-834:-0.000,
+Q239A3_TETTH/603-904:-0.000)
+0:1.391,
+(
+A0CR14_PARTE/559-847:-0.000,
+Q3SE51_PARTE/572-860:-0.000)
+0:1.391)
+0:0.244,
+(
+(
+(
+(
+(
+Q0Q5B1_9SPIT/472-767:0.354,
+(
+Q8ISG8_STYLE/475-767:0.021,
+Q86CV7_STYLE/475-767:0.021)
+0:0.332)
+0:0.768,
+(
+(
+(
+(
+Q8MQL1_TETTH/444-756:-0.000,
+Q8MXZ9_TETTH/444-756:-0.000)
+0:0.000,
+Q23ND1_TETTH/444-756:-0.000)
+0:0.923,
+(
+Q3SE50_PARTE/446-748:0.133,
+(
+Q3SE54_PARTE/446-748:0.014,
+Q3SE55_PARTE/446-748:0.014)
+0:0.120)
+0:0.790)
+0:0.098,
+(
+(
+Q3SE56_PARTE/450-741:0.083,
+Q3SE59_PARTE/450-741:0.083)
+0:0.547,
+(
+Q9U5C9_PARCA/466-759:0.334,
+(
+Q3SE49_PARTE/467-759:0.315,
+(
+Q3SE53_PARTE/460-752:0.007,
+A0E0B0_PARTE/455-747:0.007)
+0:0.309)
+0:0.018)
+0:0.297)
+0:0.390)
+0:0.101)
+0:0.211,
+(
+(
+D2V2M6_NAEGR/28-326:1.039,
+D2VMG4_NAEGR/577-883:1.039)
+0:0.221,
+(
+(
+(
+(
+(
+(
+(
+B7PDV6_IXOSC/541-835:0.375,
+B7Q5I1_IXOSC/446-741:0.375)
+0:0.321,
+(
+(
+(
+(
+Q0H8V5_9CNID/70-239:0.422,
+(
+Q3ZUK2_PLADU/35-327:0.376,
+(
+D1LXB5_SACKO/1-252:0.279,
+(
+C3XV22_BRAFL/1831-1964:0.140,
+C3XV20_BRAFL/551-843:0.140)
+0:0.139)
+0:0.097)
+0:0.046)
+0:0.011,
+(
+(
+(
+A7RFC2_NEMVE/557-857:-0.000,
+A7T755_NEMVE/2-70:-0.000)
+0:0.261,
+Q6RSS9_PODCA/561-853:0.261)
+0:0.074,
+B2KTD9_9CNID/559-850:0.335)
+0:0.099)
+0:0.083,
+B5BUZ0_9ASCI/567-860:0.517)
+0:0.129,
+(
+(
+Q9GPA6_STRPU/114-407:0.005,
+Q9GPA8_STRPU/547-840:0.005)
+0:0.006,
+Q9GPA7_STRPU/547-808:0.011)
+0:0.635)
+0:0.051)
+0:0.177,
+(
+(
+(
+(
+(
+(
+C3XV23_BRAFL/67-195:0.247,
+(
+PIWL1_CHICK/561-853:0.192,
+(
+PIWL1_HUMAN/555-847:0.025,
+(
+D2HWM8_AILME/555-847:0.010,
+(
+PIWL1_MOUSE/556-848:-0.000,
+D3ZTP9_RAT/556-848:-0.000)
+0:0.010)
+0:0.015)
+0:0.167)
+0:0.055)
+0:0.058,
+(
+PIWL1_DANRE/552-844:0.180,
+B9U223_ORYLA/549-841:0.180)
+0:0.125)
+0:0.139,
+(
+C3XV22_BRAFL/1173-1299:0.077,
+C3XV22_BRAFL/2983-3180:0.077)
+0:0.367)
+0:0.116,
+(
+Q4T9Y6_TETNG/521-792:0.039,
+Q4T9Y9_TETNG/1-228:0.039)
+0:0.520)
+0:0.179,
+(
+B4DYF7_HUMAN/569-859:-0.000,
+PIWL3_HUMAN/578-868:-0.000)
+0:0.739)
+0:0.078,
+(
+(
+PIWL4_HUMAN/546-838:0.188,
+D2I3M6_AILME/487-786:0.188)
+0:0.194,
+(
+(
+A6X965_MOUSE/3-172:0.146,
+(
+PIWL4_RAT/541-834:0.059,
+PIWL4_MOUSE/541-834:0.059)
+0:0.087)
+0:0.056,
+D3ZDI3_RAT/541-827:0.202)
+0:0.180)
+0:0.435)
+0:0.057)
+0:0.078,
+B9ZU52_9TURB/589-885:0.952)
+0:0.035,
+(
+A8XEN9_CAEBR/501-812:0.119,
+(
+Q17567_CAEEL/397-708:0.031,
+P90786_CAEEL/499-810:0.031)
+0:0.088)
+0:0.867)
+0:0.019,
+(
+(
+(
+C9E0T4_APIME/497-785:-0.000,
+C9E0T3_APIME/525-813:-0.000)
+0:0.580,
+(
+A7LM14_BOMMO/414-612:-0.000,
+A8D8P8_BOMMO/594-885:-0.000)
+0:0.580)
+0:0.246,
+(
+(
+(
+(
+(
+Q7QG53_ANOGA/576-875:0.180,
+(
+(
+(
+Q16IF2_AEDAE/569-868:-0.000,
+Q16ZS2_AEDAE/361-660:-0.000)
+0:0.030,
+Q16ZS3_AEDAE/562-861:0.030)
+0:0.108,
+(
+(
+B0W5T3_CULQU/510-809:-0.000,
+B0W5P0_CULQU/552-851:-0.000)
+0:0.105,
+(
+Q171B3_AEDAE/547-846:0.015,
+B0W5T4_CULQU/546-845:0.015)
+0:0.089)
+0:0.033)
+0:0.042)
+0:0.314,
+Q5TW24_ANOGA/530-829:0.495)
+0:0.041,
+(
+(
+(
+Q16JS1_AEDAE/576-874:0.236,
+(
+Q176R2_AEDAE/633-931:0.201,
+(
+B0XE75_CULQU/501-788:0.167,
+Q16JS2_AEDAE/571-869:0.167)
+0:0.035)
+0:0.034)
+0:0.127,
+B0XE74_CULQU/592-891:0.362)
+0:0.099,
+B0WYL9_CULQU/560-857:0.461)
+0:0.075)
+0:0.169,
+(
+(
+(
+(
+(
+B4P152_DROYA/546-844:0.064,
+B3N4Z9_DROER/546-844:0.064)
+0:0.074,
+(
+B3MJZ7_DROAN/562-859:0.064,
+(
+B4G765_DROPE/541-838:0.015,
+Q29P29_DROPS/540-837:0.015)
+0:0.048)
+0:0.075)
+0:0.023,
+(
+(
+B4LV39_DROVI/546-843:0.098,
+B4KHC1_DROMO/539-836:0.098)
+0:0.025,
+B4JBE4_DROGR/542-839:0.124)
+0:0.038)
+0:0.029,
+(
+(
+B4MUA1_DROWI/563-860:-0.000,
+B4MUA0_DROWI/539-836:-0.000)
+0:0.092,
+B4N6U3_DROWI/34-103:0.092)
+0:0.098)
+0:0.238,
+(
+(
+Q95PE5_DROME/1-176:0.043,
+(
+A8DYZ0_DROME/483-781:-0.000,
+O76922_DROME/554-852:-0.000)
+0:0.043)
+0:0.066,
+(
+B4Q9X4_DROSI/545-843:0.012,
+B4HWZ3_DROSE/549-847:0.012)
+0:0.097)
+0:0.319)
+0:0.277)
+0:0.052,
+(
+(
+B4JBE1_DROGR/574-864:0.198,
+(
+B4KHB7_DROMO/577-867:0.176,
+B4LV36_DROVI/558-849:0.176)
+0:0.022)
+0:0.052,
+(
+B4MU97_DROWI/591-882:0.229,
+(
+(
+Q29CN1_DROPS/543-834:0.185,
+(
+(
+B3N502_DROER/538-829:0.015,
+B4P149_DROYA/538-829:0.015)
+0:0.029,
+(
+(
+(
+(
+Q6NNZ4_DROME/552-843:-0.000,
+C0PTU6_DROME/566-857:-0.000)
+0:0.000,
+PIWI_DROME/538-829:-0.000)
+0:0.006,
+Q6NP34_DROME/566-857:0.006)
+0:0.026,
+(
+B4Q9X1_DROSI/538-829:0.006,
+B4HWY9_DROSE/538-829:0.006)
+0:0.026)
+0:0.011)
+0:0.142)
+0:0.009,
+B3MJZ4_DROAN/563-854:0.194)
+0:0.036)
+0:0.021)
+0:0.507)
+0:0.069)
+0:0.180)
+0:0.090,
+(
+B9ZU53_9TURB/586-879:1.087,
+(
+(
+(
+B2Z3D6_SCHMD/665-960:0.027,
+D2Z0E0_DUGJA/657-952:0.027)
+0:0.851,
+(
+(
+D2A2S9_TRICA/552-839:0.757,
+(
+B4N2M0_DROWI/49-131:0.714,
+(
+(
+B4JP35_DROGR/334-622:0.336,
+(
+(
+(
+B7FNN2_DROME/566-845:0.008,
+(
+(
+B6IDV1_DROME/574-861:-0.000,
+Q7PLK0_DROME/566-853:-0.000)
+0:0.000,
+A4GND8_DROME/566-853:-0.000)
+0:0.008)
+0:0.011,
+A7YFW6_DROME/299-494:0.019)
+0:0.009,
+A4GUJ7_DROME/566-848:0.028)
+0:0.308)
+0:0.179,
+(
+Q7PWT1_ANOGA/618-916:0.384,
+Q170R5_AEDAE/637-930:0.384)
+0:0.130)
+0:0.199)
+0:0.043)
+0:0.050,
+(
+(
+(
+(
+A9ZSZ2_BOMMO/619-912:-0.000,
+A7BJS3_BOMMO/619-912:-0.000)
+0:0.005,
+A7LNN5_BOMMO/2-193:0.005)
+0:0.684,
+(
+(
+B7QEM1_IXOSC/88-370:0.478,
+(
+A7SQI3_NEMVE/441-733:0.399,
+(
+C3Z5S8_BRAFL/570-730:0.322,
+B0FLQ9_STRPU/653-945:0.322)
+0:0.077)
+0:0.079)
+0:0.145,
+(
+(
+PIWL2_XENTR/644-935:0.197,
+(
+(
+D2H044_AILME/665-956:0.035,
+(
+D3ZRE1_RAT/666-957:-0.000,
+PIWL2_MOUSE/666-957:-0.000)
+0:0.035)
+0:0.009,
+PIWL2_HUMAN/668-959:0.044)
+0:0.154)
+0:0.201,
+(
+(
+(
+PIWL2_ONCMY/749-1040:0.115,
+(
+PIWL2_DANRE/741-1032:0.026,
+A5PL40_DANRE/7-278:0.026)
+0:0.089)
+0:0.129,
+B9U224_ORYLA/729-1020:0.245)
+0:0.055,
+Q4RPK4_TETNG/383-660:0.299)
+0:0.099)
+0:0.225)
+0:0.066)
+0:0.033,
+(
+(
+C9E0T2_APIME/1-294:0.007,
+C9E0S8_APIME/604-898:0.007)
+0:0.007,
+C9E0S9_APIME/551-753:0.015)
+0:0.708)
+0:0.085)
+0:0.071)
+0:0.145,
+(
+C3ZKW1_BRAFL/534-739:0.869,
+B9ZU54_9TURB/593-893:0.869)
+0:0.155)
+0:0.063)
+0:0.009)
+0:0.165)
+0:0.072)
+0:0.087,
+(
+(
+Q54HL3_DICDI/867-1166:1.103,
+(
+(
+(
+Q7KWS3_DICDI/669-964:0.242,
+Q54G64_DICDI/590-885:0.242)
+0:0.552,
+(
+D3B338_POLPA/992-1287:0.696,
+D3BMP8_POLPA/633-929:0.696)
+0:0.098)
+0:0.070,
+(
+Q1ZXG9_DICDI/1063-1281:0.472,
+Q86HF5_DICDI/896-1194:0.472)
+0:0.392)
+0:0.239)
+0:0.274,
+(
+(
+PIWI1_SCHMD/493-790:0.069,
+D2Z0D8_DUGJA/494-791:0.069)
+0:0.359,
+(
+PIWIL_DUGJA/502-800:0.237,
+(
+PIWI2_SCHMD/516-815:0.069,
+D2Z0D9_DUGJA/512-810:0.069)
+0:0.168)
+0:0.191)
+0:0.949)
+0:0.043)
+0:0.101,
+(
+B0WE96_CULQU/634-782:-0.000,
+A8NGN0_BRUMA/1-135:-0.000)
+0:1.521)
+0:0.115)
+0:0.027)
+0:0.084,
+(
+(
+(
+A4ZYY5_TETTH/495-793:0.388,
+(
+(
+A4VE06_TETTH/14-183:0.056,
+(
+Q6UE79_TETTH/497-791:0.003,
+Q0GM58_TETTH/497-791:0.003)
+0:0.053)
+0:0.075,
+A4VE05_TETTH/347-645:0.131)
+0:0.257)
+0:0.501,
+(
+Q22NE2_TETTH/491-777:0.014,
+A8VSR3_TETTH/491-787:0.014)
+0:0.875)
+0:0.400,
+(
+A4ZYY4_TETTH/474-761:0.042,
+Q24HU6_TETTH/383-631:0.042)
+0:1.247)
+0:0.458)
+0:0.151)
+0:0.061)
+0:0.202)
+0:0.201)
+0:0.143)
+0:0.093,
+(
+(
+(
+(
+A8Q5F0_BRUMA/545-849:1.394,
+(
+(
+Q21691_CAEEL/673-1001:0.506,
+(
+A8WNJ6_CAEBR/660-987:0.134,
+A8WS47_CAEBR/435-755:0.134)
+0:0.372)
+0:0.249,
+(
+(
+A8WQA0_CAEBR/671-998:0.378,
+(
+Q9TXN7_CAEEL/609-935:0.312,
+(
+C8JQR1_CAEEL/591-918:0.139,
+YQ53_CAEEL/650-977:0.139)
+0:0.174)
+0:0.066)
+0:0.301,
+(
+Q9N3L7_CAEEL/585-911:0.528,
+A8XZY0_CAEBR/665-992:0.528)
+0:0.151)
+0:0.075)
+0:0.640)
+0:0.378,
+(
+(
+(
+(
+Q27GU1_CAEEL/511-833:-0.000,
+Q19645_CAEEL/674-996:-0.000)
+0:0.104,
+A8XRG0_CAEBR/648-970:0.104)
+0:1.412,
+(
+A8QE08_BRUMA/711-1030:1.434,
+(
+(
+Q8MU01_HETGL/745-963:1.155,
+(
+(
+A8XFJ6_CAEBR/595-895:0.320,
+(
+Q23415_CAEEL/40-350:0.100,
+(
+GCC7_CAEEL/596-906:0.067,
+P91085_CAEEL/543-853:0.067)
+0:0.033)
+0:0.221)
+0:0.313,
+(
+(
+A8WJ71_CAEBR/596-953:0.108,
+A8X957_CAEBR/565-899:0.108)
+0:0.433,
+(
+O62275_CAEEL/594-924:0.399,
+Q9N585_CAEEL/604-934:0.399)
+0:0.142)
+0:0.093)
+0:0.522)
+0:0.178,
+A8P7Z4_BRUMA/1-302:1.334)
+0:0.100)
+0:0.083)
+0:0.124,
+(
+Q9XVF1_CAEEL/588-902:0.705,
+A8WWI1_CAEBR/598-920:0.705)
+0:0.935)
+0:0.132)
+0:0.242,
+(
+(
+A8XUC0_CAEBR/563-774:1.154,
+A8X254_CAEBR/555-701:1.154)
+0:0.311,
+Q8MU01_HETGL/598-705:1.464)
+0:0.550)
+0:0.116,
+(
+(
+(
+(
+(
+A8XEJ5_CAEBR/552-849:0.277,
+(
+(
+Q86S33_CAEEL/548-852:-0.000,
+Q9GZG4_CAEEL/548-852:-0.000)
+0:0.003,
+(
+(
+Q86NJ8_CAEEL/548-852:-0.000,
+B3KLZ7_CAEEL/358-662:-0.000)
+0:0.000,
+O02095_CAEEL/574-878:-0.000)
+0:0.003)
+0:0.273)
+0:0.332,
+O16386_CAEEL/548-847:0.608)
+0:0.120,
+A8X254_CAEBR/749-889:0.728)
+0:0.285,
+(
+A8X023_CAEBR/600-841:0.944,
+Q21495_CAEEL/61-336:0.944)
+0:0.069)
+0:0.380,
+A8X022_CAEBR/492-805:1.393)
+0:0.737)
+0:0.466)
+0:0.107,
+(
+(
+(
+(
+Q2GQS4_CHAGB/345-418:-0.000,
+B0WE95_CULQU/32-179:-0.000)
+0:1.613,
+C5LD15_9ALVE/568-697:1.613)
+0:0.528,
+(
+A4ZYY6_TETTH/491-831:-0.000,
+Q23AZ6_TETTH/491-831:-0.000)
+0:2.141)
+0:0.348,
+A0D5D7_PARTE/374-640:2.489)
+0:0.215)
+0:0.063,
+(
+C4LY31_ENTHI/438-711:0.048,
+B0EI01_ENTDI/438-710:0.048)
+0:2.718)
+0:0.150,
+(
+(
+(
+(
+(
+B7R785_9THEO/119-333:1.851,
+(
+Q11QW7_CYTH3/390-605:1.709,
+(
+(
+(
+(
+Q9L1X1_STRCO/365-661:1.148,
+(
+D2M4C5_RHOPA/151-447:0.904,
+A3VQY4_9PROT/445-745:0.904)
+0:0.244)
+0:0.075,
+(
+(
+B9MH92_ACIET/439-730:1.065,
+(
+A5D4D9_PELTS/458-756:0.900,
+A0LL61_SYNFM/455-750:0.900)
+0:0.165)
+0:0.128,
+C1F5Q7_ACIC5/440-735:1.193)
+0:0.031)
+0:0.108,
+(
+A4WYU7_RHOS5/454-756:0.757,
+B7K585_CYAP8/439-744:0.757)
+0:0.575)
+0:0.137,
+D0BWJ3_9GAMM/401-693:1.469)
+0:0.240)
+0:0.142)
+0:0.160,
+Q1PV30_9BACT/383-655:2.011)
+0:0.151,
+(
+(
+D2QY15_PIRSD/353-529:1.607,
+D2QGL1_SPILD/333-520:1.607)
+0:0.459,
+PIWI_ARCFU/110-406:2.066)
+0:0.096)
+0:0.457,
+(
+Q96Z85_SULTO/134-346:2.517,
+(
+A3VPN8_9PROT/165-321:1.753,
+D1JFX3_9ARCH/159-437:1.753)
+0:0.764)
+0:0.102)
+0:0.181,
+(
+(
+(
+(
+Q8U3D2_PYRFU/474-756:1.602,
+(
+D3S0S6_FERPL/490-768:1.172,
+(
+Y1321_METJA/426-699:0.231,
+C7P7E7_METFA/420-692:0.231)
+0:0.941)
+0:0.430)
+0:0.462,
+(
+B6YTQ5_THEON/463-751:1.528,
+D3S7P9_9EURY/531-824:1.528)
+0:0.536)
+0:0.333,
+B5IR12_9EURY/528-819:2.398)
+0:0.226,
+(
+(
+O67434_AQUAE/419-694:2.008,
+(
+B4B3R2_9CHRO/1-219:0.976,
+(
+A0YYT3_9CYAN/471-752:0.753,
+(
+A8YDH3_MICAE/463-734:0.071,
+B0JXD6_MICAN/462-734:0.071)
+0:0.682)
+0:0.223)
+0:1.031)
+0:0.263,
+(
+(
+(
+(
+B0ADC8_9CLOT/432-721:1.023,
+C4L1M1_EXISA/321-484:1.023)
+0:0.468,
+(
+C6QUV9_9BACI/2-48:0.302,
+B7GJX9_ANOFW/423-692:0.302)
+0:1.189)
+0:0.482,
+(
+C1V6Q1_9EURY/608-882:1.434,
+B9LVW4_HALLT/464-658:1.434)
+0:0.539)
+0:0.173,
+(
+(
+(
+Q53W94_THET8/418-669:-0.000,
+Q746M7_THET2/418-669:-0.000)
+0:1.304,
+B1XJG0_SYNP2/307-599:1.304)
+0:0.204,
+(
+(
+Q2JSR3_SYNJA/437-712:0.483,
+Q2JI93_SYNJB/454-728:0.483)
+0:0.222,
+(
+Q8DKB1_THEEB/458-739:0.555,
+(
+Q5MZ10_SYNP6/441-718:0.006,
+Q31N05_SYNE7/441-718:0.006)
+0:0.549)
+0:0.149)
+0:0.803)
+0:0.638)
+0:0.125)
+0:0.353)
+0:0.175)
+0:0.117)
+0:0.028,
+(
+(
+(
+(
+A4HBN9_LEIBR/872-1190:0.372,
+(
+A4HZ40_LEIIN/904-1226:0.089,
+Q4QCH4_LEIMA/899-1221:0.089)
+0:0.283)
+0:0.721,
+(
+Q4DYG9_TRYCR/791-1083:0.531,
+(
+(
+Q6T6J9_9TRYP/784-1082:-0.000,
+D0A1P1_TRYBG/784-1082:-0.000)
+0:0.000,
+Q38C22_9TRYP/783-1081:-0.000)
+0:0.531)
+0:0.562)
+0:1.484,
+C5X6M9_SORBI/1-69:2.577)
+0:0.070,
+(
+(
+A4HH63_LEIBR/16-225:-0.000,
+A4H6I4_LEIBR/673-882:-0.000)
+0:1.507,
+(
+Q6T6K0_9TRYP/549-877:0.027,
+(
+D0A4M3_TRYBG/571-899:0.004,
+Q389P5_9TRYP/560-888:0.004)
+0:0.023)
+0:1.479)
+0:1.140)
+0:0.298)
+0:0.023,
+(
+A8WWH9_CAEBR/55-193:0.580,
+Q17600_CAEEL/19-157:0.580)
+0:2.389)
+;
diff --git a/test/scripts/automated/belvu/test13 b/test/scripts/automated/belvu/test13
new file mode 100755
index 0000000..b5b4d76
--- /dev/null
+++ b/test/scripts/automated/belvu/test13
@@ -0,0 +1,25 @@
+#!/bin/ksh
+#
+# Description:
+#   Create the tree using the UPGMA method and save it
+#   in new-hampshire format (small alignment)
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences to the saved results
+diffs=`belvu -T u -o tree $data_dir/PF02171_seed.selex >&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
+
diff --git a/test/scripts/automated/belvu/test13_results b/test/scripts/automated/belvu/test13_results
new file mode 100644
index 0000000..b421d67
--- /dev/null
+++ b/test/scripts/automated/belvu/test13_results
@@ -0,0 +1,61 @@
+(
+(
+(
+(
+YQ53_CAEEL/650-977:0.746,
+Q21691_CAEEL/673-1001:0.746)
+0:1.149,
+(
+(
+Q21495_CAEEL/52-336:1.168,
+(
+O16386_CAEEL/548-847:0.639,
+O02095_CAEEL/574-878:0.639)
+0:0.529)
+0:0.586,
+(
+Q19645_CAEEL/674-996:1.450,
+(
+Q23415_CAEEL/40-350:0.467,
+O62275_CAEEL/594-924:0.467)
+0:0.982)
+0:0.304)
+0:0.141)
+0:0.284,
+(
+(
+(
+O48771_ARATH/542-860:0.527,
+Q9ZVD5_ARATH/577-885:0.527)
+0:0.652,
+(
+(
+TAG76_CAEEL/660-966:0.840,
+(
+O16720_CAEEL/566-867:0.669,
+PINH_ARATH/625-946:0.669)
+0:0.172)
+0:0.260,
+AGO1_SCHPO/500-799:1.101)
+0:0.078)
+0:0.497,
+(
+(
+O76922_DROME/555-852:0.781,
+PIWI_DROME/538-829:0.781)
+0:0.204,
+(
+Q17567_CAEEL/397-708:0.895,
+PIWL1_HUMAN/555-847:0.895)
+0:0.090)
+0:0.690)
+0:0.503)
+0:0.561,
+(
+PIWI_ARCFU/110-406:2.596,
+(
+Y1321_METJA/426-699:2.154,
+O67434_AQUAE/419-694:2.154)
+0:0.442)
+0:0.144)
+;
diff --git a/test/scripts/automated/belvu/test14 b/test/scripts/automated/belvu/test14
new file mode 100755
index 0000000..270dfea
--- /dev/null
+++ b/test/scripts/automated/belvu/test14
@@ -0,0 +1,26 @@
+#!/bin/ksh
+#
+# Description:
+#   Create the tree using the Jukes-Cantor distance
+#   correction and save the tree in new-hampshire format
+#   (large alignment)
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences to the saved results
+diffs=`belvu -T j -o tree $data_dir/PF02171_full.selex >&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
+
diff --git a/test/scripts/automated/belvu/test14_results b/test/scripts/automated/belvu/test14_results
new file mode 100644
index 0000000..3b27d03
--- /dev/null
+++ b/test/scripts/automated/belvu/test14_results
@@ -0,0 +1,2524 @@
+(
+(
+C5JDT9_AJEDS/580-664:0.000,
+C5GX22_AJEDR/580-664:-0.000)
+0:0.120,
+(
+C1GXU8_PARBA/683-1002:-0.136,
+(
+C1G7F3_PARBD/674-979:-0.050,
+(
+(
+(
+(
+C5PJP0_COCP7/663-977:0.119,
+C4JG78_UNCRE/651-963:0.083)
+0:0.084,
+(
+(
+(
+(
+C1GSN8_PARBA/1-191:0.247,
+(
+C6H5C6_AJECH/26-168:0.064,
+A6RDB0_AJECN/9-157:0.099)
+0:0.253)
+0:0.236,
+(
+B2WES9_PYRTR/643-967:0.027,
+(
+(
+A6QW60_AJECN/639-963:-0.094,
+B8MGF3_TALSN/2-137:0.233)
+0:0.077,
+B6QWK7_PENMQ/644-968:-0.027)
+0:0.073)
+0:0.108)
+0:0.040,
+(
+(
+D4ANV6_ARTBE/642-958:0.000,
+D4CZ86_TRIVC/642-958:-0.000)
+0:0.059,
+C5FGF6_NANOT/649-965:0.063)
+0:0.130)
+0:0.022,
+(
+(
+(
+(
+(
+(
+(
+B8MQK8_TALSN/682-995:0.073,
+B6QUK3_PENMQ/689-1001:0.100)
+0:0.148,
+(
+(
+C5GYE6_AJEDR/653-980:-0.004,
+C5K303_AJEDS/770-890:0.185)
+0:0.161,
+C0S8I9_PARBP/1049-1137:0.253)
+0:0.116)
+0:0.024,
+C7ZR18_NECH7/19-235:0.275)
+0:0.013,
+(
+(
+A4R6J1_MAGGR/641-908:0.401,
+(
+D0U265_CRYPA/712-1038:0.273,
+D0U266_CRYPA/635-957:0.367)
+0:0.022)
+0:0.011,
+(
+(
+(
+D0U264_CRYPA/482-802:0.359,
+(
+(
+(
+(
+D1ZJ09_SORMA/711-1030:0.068,
+(
+Q1K6I6_NEUCR/733-1052:0.000,
+Q9P8T1_NEUCR/582-901:-0.000)
+0:0.075)
+0:0.131,
+(
+B2AR52_PODAN/574-886:0.178,
+Q2GSQ8_CHAGB/651-969:0.174)
+0:0.024)
+0:0.069,
+(
+C9ST09_VERA1/571-888:0.189,
+C7YM23_NECH7/666-978:0.211)
+0:0.066)
+0:0.015,
+A4RL50_MAGGR/721-1039:0.266)
+0:0.057)
+0:0.064,
+(
+(
+(
+B6HRB3_PENCW/625-938:0.410,
+A2QG96_ASPNC/558-884:0.377)
+0:0.053,
+(
+D4B128_ARTBE/608-819:0.023,
+D4D326_TRIVC/587-798:0.020)
+0:0.442)
+0:0.005,
+(
+(
+(
+Q0TWJ6_PHANO/160-297:0.586,
+Q2HHM4_CHAGB/694-1033:0.442)
+0:0.085,
+(
+(
+(
+(
+(
+(
+C4V9J2_NOSCE/489-791:0.476,
+(
+(
+C7SYH3_THAPS/1070-1160:0.365,
+(
+C7SYH2_PHATR/826-1176:0.138,
+B7G499_PHATR/1-107:0.073)
+0:0.204)
+0:0.426,
+(
+Q5KAT1_CRYNE/560-859:0.135,
+Q5KAU3_CRYNE/580-879:0.182)
+0:0.227)
+0:0.083)
+0:0.030,
+(
+(
+(
+(
+B6K0R2_SCHJY/507-805:0.169,
+AGO1_SCHPO/500-798:0.164)
+0:0.246,
+(
+(
+(
+(
+(
+(
+(
+D0U267_CRYPA/639-939:0.243,
+A4QSM3_MAGGR/672-970:0.207)
+0:0.043,
+(
+(
+C7YHP8_NECH7/612-917:0.238,
+(
+C9SSA6_VERA1/19-91:0.062,
+C9SGB5_VERA1/589-897:0.072)
+0:0.159)
+0:0.024,
+(
+A6S388_BOTFB/557-866:0.066,
+A7F377_SCLS1/445-754:0.037)
+0:0.232)
+0:0.017)
+0:0.016,
+(
+Q8J276_NEUCR/628-929:0.108,
+D1ZPU0_SORMA/563-867:0.129)
+0:0.187)
+0:0.016,
+B2AKU3_PODAN/441-754:0.287)
+0:0.027,
+(
+(
+(
+B6Q5R7_PENMQ/547-853:0.092,
+B8M5N8_TALSN/546-852:0.105)
+0:0.187,
+(
+(
+(
+(
+C8V9S4_EMENI/46-154:0.000,
+Q5B3I7_EMENI/46-154:-0.000)
+0:0.070,
+(
+(
+(
+Q2UKV9_ASPOR/543-849:0.000,
+B8N3T1_ASPFN/436-742:-0.000)
+0:0.099,
+(
+A1CKK4_ASPCL/543-849:0.049,
+(
+A1D6W7_NEOFI/543-849:0.015,
+(
+B0XXP5_ASPFC/564-870:0.000,
+Q4WXX3_ASPFU/564-870:-0.000)
+0:0.002)
+0:0.016)
+0:0.060)
+0:0.007,
+Q0CNV7_ASPTN/543-854:0.107)
+0:0.041)
+0:0.010,
+A2QDC5_ASPNC/643-949:0.147)
+0:0.038,
+B6H4L5_PENCW/673-980:0.253)
+0:0.060)
+0:0.028,
+(
+(
+(
+C1G1H6_PARBD/510-817:0.015,
+C1GU57_PARBA/495-755:0.009)
+0:0.012,
+C0S3N8_PARBP/535-823:0.008)
+0:0.095,
+(
+(
+(
+C5G7J1_AJEDR/547-854:0.000,
+C5JJJ6_AJEDS/547-854:-0.000)
+0:0.039,
+(
+(
+C6HRE3_AJECH/547-854:0.000,
+C0NUS8_AJECG/547-854:-0.000)
+0:0.001,
+A6RGK9_AJECN/547-854:0.003)
+0:0.050)
+0:0.101,
+(
+(
+C5FDD8_NANOT/542-847:0.039,
+(
+D4AMR8_ARTBE/628-933:-0.006,
+D4DBM7_TRIVC/515-807:0.020)
+0:0.041)
+0:0.108,
+(
+C5P9D5_COCP7/668-975:0.072,
+C4JZ88_UNCRE/552-859:0.055)
+0:0.077)
+0:0.028)
+0:0.043)
+0:0.080)
+0:0.118)
+0:0.007,
+(
+Q0U7V7_PHANO/645-956:0.164,
+B2W8P0_PYRTR/611-920:0.113)
+0:0.260)
+0:0.148,
+(
+(
+B8PBB9_POSPM/331-616:0.022,
+(
+B8PFP7_POSPM/371-656:0.001,
+B8PN24_POSPM/140-415:0.006)
+0:0.022)
+0:0.679,
+(
+A2DXK9_TRIVA/462-624:0.243,
+A1D5I6_NEOFI/71-143:-0.243)
+0:0.800)
+0:0.176)
+0:0.039)
+0:0.034,
+(
+(
+(
+(
+Q2GQS4_CHAGB/345-418:0.261,
+B0WE95_CULQU/32-179:-0.261)
+0:0.425,
+C3ZKW1_BRAFL/534-739:0.314)
+0:0.284,
+(
+(
+(
+(
+(
+(
+(
+C4LVV2_ENTHI/470-756:0.027,
+B0ET37_ENTDI/470-756:0.012)
+0:0.511,
+(
+B0ENU6_ENTDI/467-753:0.061,
+C4LVQ2_ENTHI/467-753:0.072)
+0:0.563)
+0:0.165,
+(
+(
+C4LY31_ENTHI/438-711:0.002,
+B0EI01_ENTDI/438-710:0.055)
+0:0.959,
+D2V7J4_NAEGR/498-769:0.681)
+0:0.063)
+0:0.055,
+(
+A4ZYY6_TETTH/491-831:0.000,
+Q23AZ6_TETTH/491-831:-0.000)
+0:1.025)
+0:0.031,
+(
+(
+(
+(
+(
+(
+B7R785_9THEO/119-333:0.656,
+(
+Q11QW7_CYTH3/390-605:0.633,
+(
+(
+(
+(
+Q9L1X1_STRCO/365-661:0.411,
+(
+(
+D2M4C5_RHOPA/151-447:0.361,
+A3VQY4_9PROT/445-745:0.323)
+0:0.146,
+(
+A5D4D9_PELTS/458-756:0.311,
+A0LL61_SYNFM/455-750:0.454)
+0:0.125)
+0:0.012)
+0:0.057,
+C1F5Q7_ACIC5/440-735:0.479)
+0:0.034,
+(
+B9MH92_ACIET/439-730:0.446,
+D0BWJ3_9GAMM/401-693:0.586)
+0:0.027)
+0:0.019,
+(
+A4WYU7_RHOS5/454-756:0.462,
+B7K585_CYAP8/439-744:0.245)
+0:0.218)
+0:0.266)
+0:0.025)
+0:0.087,
+(
+Q1PV30_9BACT/383-655:0.805,
+(
+A3VPN8_9PROT/165-321:0.809,
+D1JFX3_9ARCH/159-437:0.540)
+0:0.273)
+0:0.062)
+0:0.051,
+(
+(
+D2QY15_PIRSD/353-529:0.605,
+D2QGL1_SPILD/333-520:0.642)
+0:0.251,
+PIWI_ARCFU/110-406:0.940)
+0:0.031)
+0:0.084,
+(
+Q96Z85_SULTO/134-346:0.973,
+O67434_AQUAE/419-694:0.692)
+0:0.214)
+0:0.077,
+(
+(
+(
+Q8U3D2_PYRFU/474-756:0.694,
+(
+B6YTQ5_THEON/463-751:0.625,
+D3S7P9_9EURY/531-824:0.648)
+0:0.170)
+0:0.056,
+(
+D3S0S6_FERPL/490-768:0.455,
+(
+Y1321_METJA/426-699:0.088,
+C7P7E7_METFA/420-692:0.118)
+0:0.384)
+0:0.209)
+0:0.097,
+B5IR12_9EURY/528-819:0.832)
+0:0.137)
+0:0.030,
+(
+(
+(
+(
+B4B3R2_9CHRO/1-219:0.444,
+(
+A0YYT3_9CYAN/471-752:0.305,
+(
+A8YDH3_MICAE/463-734:0.042,
+B0JXD6_MICAN/462-734:0.015)
+0:0.263)
+0:0.016)
+0:0.511,
+(
+B1XJG0_SYNP2/307-599:0.461,
+(
+(
+Q2JSR3_SYNJA/437-712:0.128,
+Q2JI93_SYNJB/454-728:0.224)
+0:0.071,
+(
+Q8DKB1_THEEB/458-739:0.198,
+(
+Q5MZ10_SYNP6/441-718:0.002,
+Q31N05_SYNE7/441-718:0.002)
+0:0.264)
+0:0.074)
+0:0.326)
+0:0.211)
+0:0.061,
+(
+B0ADC8_9CLOT/432-721:0.327,
+(
+C6QUV9_9BACI/2-48:0.143,
+B7GJX9_ANOFW/423-692:0.049)
+0:0.453)
+0:0.386)
+0:0.018,
+(
+C1V6Q1_9EURY/608-882:0.605,
+B9LVW4_HALLT/464-658:0.641)
+0:0.098)
+0:0.060)
+0:0.197)
+0:0.053,
+(
+(
+(
+A4HBN9_LEIBR/872-1190:0.108,
+(
+A4HZ40_LEIIN/904-1226:0.025,
+Q4QCH4_LEIMA/899-1221:0.044)
+0:0.161)
+0:0.309,
+(
+Q4DYG9_TRYCR/791-1083:0.238,
+(
+(
+Q6T6J9_9TRYP/784-1082:0.000,
+D0A1P1_TRYBG/784-1082:-0.000)
+0:0.000,
+Q38C22_9TRYP/783-1081:0.000)
+0:0.212)
+0:0.184)
+0:0.607,
+(
+(
+A4HH63_LEIBR/16-225:0.000,
+A4H6I4_LEIBR/673-882:-0.000)
+0:0.553,
+(
+Q6T6K0_9TRYP/549-877:0.006,
+(
+D0A4M3_TRYBG/571-899:0.002,
+Q389P5_9TRYP/560-888:0.001)
+0:0.013)
+0:0.593)
+0:0.420)
+0:0.117)
+0:0.042,
+(
+(
+(
+A2DPV7_TRIVA/501-794:0.692,
+(
+(
+Q86QW7_GIALA/412-736:0.000,
+A8BCK6_GIALA/555-879:-0.000)
+0:0.225,
+C6LTG5_GIALA/555-877:0.153)
+0:0.617)
+0:0.068,
+(
+(
+(
+(
+(
+Q3SD94_PARTE/460-750:0.000,
+A0D4I7_PARTE/320-610:-0.000)
+0:0.238,
+(
+Q3SD95_PARTE/471-760:0.168,
+A0CE33_PARTE/2-210:0.403)
+0:0.084)
+0:0.194,
+(
+(
+A0DEE4_PARTE/478-780:0.007,
+Q3SE57_PARTE/478-788:0.013)
+0:0.253,
+(
+Q3SE52_PARTE/466-770:0.036,
+(
+Q3SE58_PARTE/466-770:0.000,
+A0CB11_PARTE/463-767:-0.000)
+0:0.050)
+0:0.290)
+0:0.069)
+0:0.163,
+(
+(
+(
+A4ZYY5_TETTH/495-793:0.184,
+(
+A4VE06_TETTH/14-183:-0.008,
+(
+A4VE05_TETTH/347-645:0.071,
+(
+Q6UE79_TETTH/497-791:0.003,
+Q0GM58_TETTH/497-791:0.000)
+0:0.039)
+0:0.024)
+0:0.115)
+0:0.175,
+(
+(
+Q22NE2_TETTH/491-777:0.016,
+A8VSR3_TETTH/491-787:-0.006)
+0:0.444,
+(
+A4ZYY4_TETTH/474-761:-0.075,
+Q24HU6_TETTH/383-631:0.105)
+0:0.588)
+0:0.043)
+0:0.246,
+(
+Q0MRE2_TETTH/533-834:0.000,
+Q239A3_TETTH/603-904:-0.000)
+0:0.573)
+0:0.058)
+0:0.135,
+(
+A0CR14_PARTE/559-847:0.000,
+Q3SE51_PARTE/572-860:-0.000)
+0:0.695)
+0:0.061)
+0:0.049,
+(
+(
+(
+(
+C5LD15_9ALVE/718-952:0.615,
+B9ZU54_9TURB/593-893:0.416)
+0:0.061,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+B7PDV6_IXOSC/541-835:0.117,
+B7Q5I1_IXOSC/446-741:0.239)
+0:0.145,
+(
+(
+(
+(
+(
+A7RFC2_NEMVE/557-857:0.136,
+(
+A7T755_NEMVE/2-70:0.124,
+A0D5D7_PARTE/374-640:0.586)
+0:0.339)
+0:0.051,
+(
+Q6RSS9_PODCA/561-853:0.114,
+B2KTD9_9CNID/559-850:0.145)
+0:0.042)
+0:0.052,
+(
+Q9GPA6_STRPU/114-407:-0.005,
+(
+Q9GPA7_STRPU/547-808:0.010,
+Q9GPA8_STRPU/547-840:-0.006)
+0:0.009)
+0:0.320)
+0:0.017,
+Q3ZUK2_PLADU/35-327:0.193)
+0:0.018,
+B5BUZ0_9ASCI/567-860:0.277)
+0:0.016)
+0:0.017,
+(
+(
+(
+C3XV23_BRAFL/67-195:0.071,
+(
+B4DYF7_HUMAN/569-859:-0.002,
+PIWL3_HUMAN/578-868:0.002)
+0:0.275)
+0:0.030,
+(
+(
+PIWL1_CHICK/561-853:0.079,
+(
+PIWL1_HUMAN/555-847:0.009,
+(
+D2HWM8_AILME/555-847:0.003,
+(
+PIWL1_MOUSE/556-848:0.000,
+D3ZTP9_RAT/556-848:-0.000)
+0:0.011)
+0:0.019)
+0:0.098)
+0:0.066,
+(
+PIWL1_DANRE/552-844:0.080,
+(
+(
+(
+Q4T9Z1_TETNG/519-587:0.155,
+Q4T9Y6_TETNG/521-792:-0.140)
+0:0.097,
+Q4T9Y9_TETNG/1-228:-0.058)
+0:0.164,
+B9U223_ORYLA/549-841:0.059)
+0:0.027)
+0:0.073)
+0:0.095)
+0:0.019,
+(
+D1LXB5_SACKO/1-252:0.159,
+(
+C3XV22_BRAFL/1173-1299:0.104,
+C3XV22_BRAFL/2983-3180:-0.051)
+0:0.149)
+0:0.064)
+0:0.007)
+0:0.026,
+(
+A8XEN9_CAEBR/501-812:0.076,
+(
+Q17567_CAEEL/397-708:0.017,
+P90786_CAEEL/499-810:0.013)
+0:0.034)
+0:0.410)
+0:0.016,
+(
+(
+PIWL4_HUMAN/546-838:0.093,
+D2I3M6_AILME/487-786:0.067)
+0:0.095,
+(
+A6X965_MOUSE/3-172:0.001,
+(
+(
+D3ZDI3_RAT/541-827:0.138,
+PIWL4_RAT/541-834:0.023)
+0:0.022,
+PIWL4_MOUSE/541-834:0.047)
+0:0.042)
+0:0.064)
+0:0.237)
+0:0.034,
+(
+(
+(
+C9E0T4_APIME/497-785:0.000,
+C9E0T3_APIME/525-813:-0.000)
+0:0.213,
+(
+A7LM14_BOMMO/414-612:0.075,
+A8D8P8_BOMMO/594-885:-0.075)
+0:0.319)
+0:0.098,
+(
+(
+(
+(
+Q7QG53_ANOGA/576-875:0.097,
+(
+(
+(
+(
+Q16IF2_AEDAE/569-868:0.000,
+Q16ZS2_AEDAE/361-660:-0.000)
+0:0.015,
+Q16ZS3_AEDAE/562-861:0.023)
+0:0.057,
+(
+Q171B3_AEDAE/547-846:0.005,
+B0W5T4_CULQU/546-845:0.019)
+0:0.046)
+0:0.015,
+(
+B0W5T3_CULQU/510-809:0.000,
+B0W5P0_CULQU/552-851:-0.000)
+0:0.052)
+0:0.017)
+0:0.150,
+(
+Q5TW24_ANOGA/530-829:0.218,
+(
+(
+(
+Q16JS1_AEDAE/576-874:0.130,
+Q176R2_AEDAE/633-931:0.097)
+0:0.011,
+(
+B0XE75_CULQU/501-788:0.078,
+Q16JS2_AEDAE/571-869:0.077)
+0:0.026)
+0:0.072,
+(
+B0XE74_CULQU/592-891:0.177,
+B0WYL9_CULQU/560-857:0.178)
+0:0.058)
+0:0.024)
+0:0.012)
+0:0.036,
+(
+(
+(
+B4P152_DROYA/546-844:0.038,
+B3N4Z9_DROER/546-844:0.024)
+0:0.026,
+(
+(
+(
+Q95PE5_DROME/1-176:0.116,
+A8DYZ0_DROME/483-781:-0.086)
+0:0.043,
+O76922_DROME/554-852:-0.043)
+0:0.067,
+(
+B4Q9X4_DROSI/545-843:0.005,
+B4HWZ3_DROSE/549-847:0.008)
+0:0.008)
+0:0.059)
+0:0.036,
+(
+(
+(
+B4LV39_DROVI/546-843:0.057,
+B4KHC1_DROMO/539-836:0.046)
+0:0.016,
+(
+(
+(
+B4MUA1_DROWI/563-860:0.000,
+B4MUA0_DROWI/539-836:-0.000)
+0:0.002,
+B4N6U3_DROWI/34-103:0.089)
+0:0.053,
+(
+B3MJZ7_DROAN/562-859:0.046,
+(
+B4G765_DROPE/541-838:0.007,
+Q29P29_DROPS/540-837:0.007)
+0:0.023)
+0:0.012)
+0:0.010)
+0:0.009,
+B4JBE4_DROGR/542-839:0.071)
+0:0.028)
+0:0.222)
+0:0.018,
+(
+(
+B4JBE1_DROGR/574-864:0.083,
+(
+B4KHB7_DROMO/577-867:0.107,
+B4LV36_DROVI/558-849:0.057)
+0:0.025)
+0:0.023,
+(
+B4MU97_DROWI/591-882:0.091,
+(
+(
+(
+B4G753_DROPE/334-531:0.094,
+Q29CN1_DROPS/543-834:-0.083)
+0:0.108,
+(
+(
+(
+B3N502_DROER/538-829:0.009,
+B4P149_DROYA/538-829:0.011)
+0:0.012,
+(
+(
+(
+Q6NNZ4_DROME/552-843:-0.006,
+Q6NP34_DROME/566-857:0.009)
+0:0.003,
+C0PTU6_DROME/566-857:-0.003)
+0:0.001,
+PIWI_DROME/538-829:-0.001)
+0:0.020)
+0:0.006,
+(
+B4Q9X1_DROSI/538-829:-0.001,
+B4HWY9_DROSE/538-829:0.008)
+0:0.005)
+0:0.044)
+0:0.033,
+B3MJZ4_DROAN/563-854:0.066)
+0:0.039)
+0:0.014)
+0:0.218)
+0:0.039)
+0:0.067)
+0:0.046,
+(
+(
+(
+PIWI1_SCHMD/493-790:0.025,
+D2Z0D8_DUGJA/494-791:0.042)
+0:0.195,
+(
+PIWIL_DUGJA/502-800:0.122,
+(
+PIWI2_SCHMD/516-815:0.032,
+D2Z0D9_DUGJA/512-810:0.016)
+0:0.082)
+0:0.096)
+0:0.240,
+B9ZU52_9TURB/589-885:0.437)
+0:0.080)
+0:0.016,
+B9ZU53_9TURB/586-879:0.470)
+0:0.009,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+Q0H8V5_9CNID/70-239:0.217,
+(
+C3XV22_BRAFL/1831-1964:0.244,
+C3XV20_BRAFL/551-843:-0.087)
+0:0.142)
+0:0.042,
+C3Z5S8_BRAFL/570-730:0.237)
+0:0.066,
+B0FLQ9_STRPU/653-945:0.138)
+0:0.034,
+(
+A7SQI3_NEMVE/441-733:-0.038,
+A7T7C9_NEMVE/1-180:0.062)
+0:0.196)
+0:0.027,
+B7QEM1_IXOSC/88-370:0.257)
+0:0.059,
+(
+(
+PIWL2_XENTR/644-935:0.108,
+(
+(
+D2H044_AILME/665-956:0.012,
+(
+D3ZRE1_RAT/666-957:0.000,
+PIWL2_MOUSE/666-957:-0.000)
+0:0.027)
+0:0.004,
+PIWL2_HUMAN/668-959:0.017)
+0:0.088)
+0:0.087,
+(
+(
+(
+PIWL2_ONCMY/749-1040:0.067,
+(
+PIWL2_DANRE/741-1032:0.008,
+A5PL40_DANRE/7-278:0.011)
+0:0.026)
+0:0.068,
+B9U224_ORYLA/729-1020:0.123)
+0:0.024,
+Q4RPK4_TETNG/383-660:0.139)
+0:0.055)
+0:0.095)
+0:0.066,
+(
+(
+C9E0T2_APIME/1-294:-0.044,
+C9E0S9_APIME/551-753:0.055)
+0:0.026,
+C9E0S8_APIME/604-898:-0.019)
+0:0.276)
+0:0.020,
+(
+(
+A9ZSZ2_BOMMO/619-912:0.000,
+A7BJS3_BOMMO/619-912:-0.000)
+0:0.035,
+A7LNN5_BOMMO/2-193:-0.030)
+0:0.294)
+0:0.013,
+(
+D2A2S9_TRICA/552-839:0.361,
+(
+(
+(
+B4JP35_DROGR/334-622:0.168,
+(
+B0WE96_CULQU/634-782:0.192,
+Q170R5_AEDAE/637-930:-0.099)
+0:0.235)
+0:0.033,
+(
+(
+(
+(
+B7FNN2_DROME/566-845:-0.023,
+(
+A4GUJ7_DROME/566-848:-0.049,
+A7YFW6_DROME/299-494:0.069)
+0:0.033)
+0:0.017,
+B6IDV1_DROME/574-861:-0.017)
+0:0.009,
+Q7PLK0_DROME/566-853:-0.009)
+0:0.004,
+A4GND8_DROME/566-853:-0.004)
+0:0.133)
+0:0.098,
+Q7PWT1_ANOGA/618-916:0.190)
+0:0.091)
+0:0.010)
+0:0.029,
+(
+B2Z3D6_SCHMD/665-960:0.014,
+D2Z0E0_DUGJA/657-952:0.014)
+0:0.343)
+0:0.061)
+0:0.027)
+0:0.034,
+(
+Q54HL3_DICDI/867-1166:0.525,
+(
+(
+(
+Q7KWS3_DICDI/669-964:0.126,
+Q54G64_DICDI/590-885:0.091)
+0:0.245,
+(
+D3B338_POLPA/992-1287:0.302,
+D3BMP8_POLPA/633-929:0.340)
+0:0.040)
+0:0.062,
+(
+Q1ZXG9_DICDI/1063-1281:0.219,
+Q86HF5_DICDI/896-1194:0.245)
+0:0.165)
+0:0.044)
+0:0.125)
+0:0.011,
+(
+(
+(
+Q0Q5B1_9SPIT/472-767:0.154,
+(
+Q8ISG8_STYLE/475-767:0.002,
+Q86CV7_STYLE/475-767:0.015)
+0:0.173)
+0:0.248,
+(
+(
+(
+(
+Q8MQL1_TETTH/444-756:0.000,
+Q8MXZ9_TETTH/444-756:-0.000)
+0:0.000,
+Q23ND1_TETTH/444-756:0.000)
+0:0.392,
+(
+A8VSS4_TETTH/479-774:0.485,
+C5LD15_9ALVE/568-697:0.747)
+0:0.206)
+0:0.046,
+(
+(
+(
+Q3SE56_PARTE/450-741:0.048,
+Q3SE59_PARTE/450-741:0.028)
+0:0.319,
+(
+(
+Q9U5C9_PARCA/466-759:0.154,
+(
+Q3SE53_PARTE/460-752:0.008,
+A0E0B0_PARTE/455-747:0.003)
+0:0.142)
+0:0.017,
+Q3SE49_PARTE/467-759:0.154)
+0:0.102)
+0:0.152,
+(
+Q3SE50_PARTE/446-748:0.072,
+(
+Q3SE54_PARTE/446-748:0.007,
+Q3SE55_PARTE/446-748:0.010)
+0:0.045)
+0:0.365)
+0:0.014)
+0:0.092)
+0:0.085,
+(
+D2V2M6_NAEGR/28-326:0.483,
+D2VMG4_NAEGR/577-883:0.473)
+0:0.056)
+0:0.034)
+0:0.013)
+0:0.029)
+0:0.042)
+0:0.130,
+(
+O61931_CAEEL/762-1081:0.285,
+(
+(
+A8WPC9_CAEBR/828-1145:0.095,
+A8XN44_CAEBR/716-1005:0.083)
+0:0.042,
+(
+(
+A8XRY5_CAEBR/161-269:0.067,
+A8XS10_CAEBR/818-1134:0.077)
+0:0.041,
+A8XP19_CAEBR/721-1037:0.116)
+0:0.019)
+0:0.149)
+0:0.417)
+0:0.024)
+0:0.014,
+(
+(
+(
+A8Q5F0_BRUMA/545-849:0.527,
+(
+(
+Q21691_CAEEL/673-1001:0.278,
+(
+A8WNJ6_CAEBR/660-987:0.074,
+A8WS47_CAEBR/435-755:0.055)
+0:0.144)
+0:0.128,
+(
+(
+A8WQA0_CAEBR/671-998:0.164,
+(
+Q9TXN7_CAEEL/609-935:0.150,
+(
+C8JQR1_CAEEL/591-918:0.062,
+YQ53_CAEEL/650-977:0.072)
+0:0.082)
+0:0.051)
+0:0.112,
+(
+Q9N3L7_CAEEL/585-911:0.270,
+A8XZY0_CAEBR/665-992:0.254)
+0:0.068)
+0:0.011)
+0:0.340)
+0:0.093,
+(
+(
+(
+(
+(
+Q27GU1_CAEEL/511-833:0.000,
+Q19645_CAEEL/674-996:-0.000)
+0:0.068,
+A8XRG0_CAEBR/648-970:0.055)
+0:0.582,
+(
+A8QE08_BRUMA/711-1030:0.464,
+(
+(
+A8WWH9_CAEBR/55-193:0.188,
+Q17600_CAEEL/19-157:0.271)
+0:0.651,
+(
+Q9XVF1_CAEEL/588-902:0.246,
+A8WWI1_CAEBR/598-920:0.324)
+0:0.204)
+0:0.120)
+0:0.071)
+0:0.036,
+(
+(
+A8P7Z4_BRUMA/1-302:0.409,
+(
+(
+(
+(
+A8XEJ5_CAEBR/552-849:0.106,
+(
+(
+(
+Q86S33_CAEEL/548-852:0.000,
+Q9GZG4_CAEEL/548-852:-0.000)
+0:0.002,
+(
+(
+Q86NJ8_CAEEL/548-852:0.000,
+B3KLZ7_CAEEL/358-662:-0.000)
+0:0.000,
+O02095_CAEEL/574-878:0.000)
+0:0.001)
+0:0.105,
+A8X254_CAEBR/555-701:0.541)
+0:0.030)
+0:0.110,
+O16386_CAEEL/548-847:0.273)
+0:0.062,
+A8XUC0_CAEBR/563-774:0.457)
+0:0.127,
+Q8MU01_HETGL/598-705:0.701)
+0:0.170)
+0:0.104,
+(
+(
+A8X254_CAEBR/749-889:0.406,
+(
+A8X023_CAEBR/600-841:0.414,
+Q21495_CAEEL/61-336:0.409)
+0:0.071)
+0:0.057,
+A8X022_CAEBR/492-805:0.702)
+0:0.192)
+0:0.057)
+0:0.039,
+(
+Q8MU01_HETGL/745-963:0.404,
+(
+(
+A8XFJ6_CAEBR/595-895:0.164,
+(
+Q23415_CAEEL/40-350:0.060,
+(
+GCC7_CAEEL/596-906:0.033,
+P91085_CAEEL/543-853:0.037)
+0:0.011)
+0:0.078)
+0:0.129,
+(
+(
+A8WJ71_CAEBR/596-953:0.059,
+A8X957_CAEBR/565-899:0.035)
+0:0.228,
+(
+O62275_CAEEL/594-924:0.188,
+Q9N585_CAEEL/604-934:0.202)
+0:0.029)
+0:0.037)
+0:0.310)
+0:0.124)
+0:0.035)
+0:0.155,
+(
+(
+B4N2M0_DROWI/49-131:0.349,
+C5WX34_SORBI/1-43:0.360)
+0:0.252,
+B2WJ32_PYRTR/383-592:0.528)
+0:0.133)
+0:0.103)
+0:0.013)
+0:0.016,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+B4P449_DROYA/624-926:-0.000,
+(
+Q27IQ2_DROSI/554-851:0.000,
+Q27IR0_DROME/554-851:-0.000)
+0:0.000)
+0:0.000,
+Q960T1_DROME/258-560:-0.000)
+0:0.000,
+Q32KD4_DROME/641-943:-0.000)
+0:0.000,
+B3MHG1_DROAN/641-943:-0.000)
+0:0.000,
+Q28ZU1_DROPS/642-944:-0.000)
+0:0.000,
+B4GGS7_DROPE/642-944:-0.000)
+0:0.000,
+B4INL3_DROSE/624-926:-0.000)
+0:0.000,
+B3NRF4_DROER/624-926:-0.000)
+0:0.000,
+Q7KY08_DROME/607-909:-0.000)
+0:0.000,
+B4JW20_DROGR/647-949:-0.000)
+0:0.000,
+Q8T059_DROME/81-383:0.003)
+0:0.001,
+(
+(
+B4LJF3_DROVI/646-948:0.000,
+B4KTB5_DROMO/643-945:-0.000)
+0:0.000,
+B4N5V9_DROWI/642-944:0.006)
+0:0.002)
+0:0.014,
+(
+(
+(
+B0WFU8_CULQU/621-923:0.000,
+Q7PZ41_ANOGA/638-940:-0.000)
+0:0.000,
+Q16EE2_AEDAE/482-784:0.000)
+0:0.000,
+Q16M62_AEDAE/604-906:0.000)
+0:0.008)
+0:0.008,
+A7BJS5_BOMMO/569-871:0.031)
+0:0.018,
+(
+(
+(
+(
+(
+A9NJ58_PENMO/569-898:-0.001,
+(
+Q071E1_PENMO/569-898:0.007,
+A7XZ43_PENMO/569-898:0.002)
+0:0.001)
+0:0.001,
+D2XYX4_PENJP/572-901:-0.001)
+0:0.000,
+A9NJ57_PENMO/572-901:-0.000)
+0:0.000,
+D2DK65_PENJP/572-901:-0.000)
+0:0.000,
+D2DK66_PENJP/569-898:-0.000)
+0:0.053)
+0:0.009,
+B7QCC4_IXOSC/509-810:0.038)
+0:0.006,
+Q8CGT7_MOUSE/576-634:0.057)
+0:0.019,
+(
+(
+(
+C3ZN91_BRAFL/470-771:0.011,
+C3ZQ22_BRAFL/680-848:0.025)
+0:0.036,
+D2XMQ5_SACKO/1-219:0.054)
+0:0.009,
+(
+(
+(
+A8WKF9_CAEBR/562-864:0.115,
+(
+(
+Q86B39_CAEEL/547-848:0.000,
+O16720_CAEEL/566-867:-0.000)
+0:0.028,
+(
+(
+(
+(
+(
+B2L7Q3_CAERE/1-268:0.001,
+B2L7P9_CAERE/1-269:-0.001)
+0:0.009,
+A8X4Z3_CAEBR/691-992:-0.009)
+0:0.008,
+Q3LTR7_CAEEL/668-969:-0.004)
+0:0.002,
+Q20578_CAEEL/660-961:-0.002)
+0:0.001,
+B6VQ75_CAEEL/681-982:-0.001)
+0:0.019)
+0:0.020)
+0:0.014,
+A8P168_BRUMA/623-925:0.054)
+0:0.059,
+(
+C4Q6D1_SCHMA/608-835:0.012,
+Q5C3Y0_SCHJA/4-157:-0.006)
+0:0.078)
+0:0.006)
+0:0.016)
+0:0.007,
+(
+(
+(
+(
+D2HF39_AILME/511-813:0.002,
+(
+(
+(
+(
+(
+(
+(
+(
+A1A563_MOUSE/517-819:-0.015,
+(
+(
+(
+Q8CGT9_MOUSE/501-743:-0.067,
+Q8CGT7_MOUSE/455-570:0.248)
+0:0.054,
+Q6P239_MOUSE/277-579:-0.050)
+0:0.029,
+AGO2_BOVIN/517-819:-0.027)
+0:0.016)
+0:0.008,
+AGO2_RABIT/497-799:-0.008)
+0:0.004,
+B0JYP5_BOVIN/517-819:-0.004)
+0:0.002,
+Q6PHA2_MOUSE/94-396:-0.002)
+0:0.001,
+AGO2_HUMAN/516-818:-0.001)
+0:0.001,
+A4FVC0_HUMAN/465-767:-0.001)
+0:0.000,
+Q8R3Q7_MOUSE/187-489:-0.000)
+0:0.000,
+AGO2_MOUSE/517-819:-0.000)
+0:0.002)
+0:0.001,
+AGO2_RAT/517-819:0.002)
+0:0.002,
+(
+(
+AGO2_XENLA/519-821:0.000,
+C0IN02_XENLA/519-821:-0.000)
+0:0.000,
+AGO2_XENTR/528-830:0.000)
+0:0.008)
+0:0.016,
+(
+Q4RKH3_TETNG/508-822:-0.002,
+(
+C9V4A2_CTEID/306-581:0.009,
+B0F0Y5_9TELE/526-828:-0.009)
+0:0.009)
+0:0.027)
+0:0.044)
+0:0.011,
+(
+(
+(
+(
+(
+(
+A8NJ50_BRUMA/1-61:0.015,
+A8NGN0_BRUMA/1-135:-0.015)
+0:0.019,
+(
+TAG76_CAEEL/660-966:0.009,
+(
+A8XA10_CAEBR/683-989:0.005,
+(
+Q7JLZ2_CAEEL/652-958:0.000,
+Q21079_CAEEL/655-961:-0.000)
+0:0.005)
+0:0.004)
+0:0.176)
+0:0.292,
+D4A2P5_RAT/843-954:-0.005)
+0:0.014,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+A9QW17_TRICA/69-158:0.172,
+D4A2P5_RAT/513-742:-0.012)
+0:0.030,
+Q8CGT8_MOUSE/660-885:0.016)
+0:0.026,
+AGO4_MOUSE/509-820:-0.033)
+0:0.016,
+Q8BTF2_MOUSE/35-346:-0.016)
+0:0.024,
+A7MD27_HUMAN/509-820:-0.005)
+0:0.002,
+AGO4_CHICK/442-753:0.001)
+0:0.002,
+(
+(
+(
+Q4R7V5_MACFA/1-211:0.018,
+AGO4_HUMAN/509-820:-0.013)
+0:0.007,
+D2H608_AILME/505-816:-0.007)
+0:0.003,
+Q9NXV9_HUMAN/35-346:-0.003)
+0:0.003)
+0:0.003,
+AGO4_XENLA/532-843:0.009)
+0:0.012,
+Q4SVE6_TETNG/553-864:0.020)
+0:0.011,
+Q8CGT8_MOUSE/1000-1102:0.022)
+0:0.037)
+0:0.012,
+(
+(
+(
+(
+D4AC38_RAT/515-816:0.003,
+(
+(
+(
+(
+(
+(
+(
+(
+Q8BJP2_MOUSE/364-665:-0.000,
+AGO1_MOUSE/515-816:0.003)
+0:0.000,
+A2VDG1_MOUSE/513-814:-0.000)
+0:0.000,
+D2H607_AILME/507-808:-0.000)
+0:0.000,
+B2RAD8_HUMAN/515-816:-0.000)
+0:0.000,
+Q5TA58_HUMAN/440-741:-0.000)
+0:0.000,
+A1L365_MOUSE/515-816:-0.000)
+0:0.000,
+AGO1_HUMAN/515-816:-0.000)
+0:0.000,
+B3KME0_HUMAN/440-741:0.010)
+0:0.001)
+0:0.000,
+Q8CGU0_MOUSE/527-843:0.011)
+0:0.002,
+Q4S7L5_TETNG/517-818:0.004)
+0:0.046,
+(
+AGO3_DANRE/518-819:0.022,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+A3KFX7_MOUSE/1-109:0.059,
+Q7M738_MOUSE/426-707:-0.049)
+0:0.031,
+AGO3_BOVIN/518-820:-0.020)
+0:0.017,
+AGO3_CHICK/518-819:-0.013)
+0:0.005,
+(
+A3KFX6_MOUSE/1-140:-0.037,
+(
+Q4TBP2_TETNG/578-853:-0.004,
+Q4TF92_TETNG/161-225:0.134)
+0:0.048)
+0:0.023)
+0:0.004,
+Q3TBP7_MOUSE/518-819:-0.008)
+0:0.004,
+AGO3_MOUSE/518-819:-0.004)
+0:0.004,
+D2H606_AILME/513-814:-0.001)
+0:0.001,
+AGO3_HUMAN/518-819:-0.001)
+0:0.000,
+B4DY67_HUMAN/154-455:-0.000)
+0:0.000,
+B1ALI0_HUMAN/284-585:-0.000)
+0:0.000,
+A8KA05_HUMAN/518-819:-0.000)
+0:0.000,
+B4E1P5_HUMAN/346-647:-0.000)
+0:0.005)
+0:0.023)
+0:0.026)
+0:0.014,
+(
+(
+B3VCG6_STRPU/599-900:0.101,
+(
+(
+Q4SXU1_TETNG/1-206:0.151,
+Q4TF92_TETNG/239-305:-0.037)
+0:0.026,
+Q4TBP2_TETNG/868-934:-0.026)
+0:0.019)
+0:0.011,
+(
+B2RFN1_OIKDI/771-1072:0.054,
+C8TEF3_OIKDI/573-874:0.116)
+0:0.028)
+0:0.006)
+0:0.002)
+0:0.024,
+A7RQ46_NEMVE/511-812:0.102)
+0:0.058,
+(
+(
+(
+(
+Q53W94_THET8/418-669:0.000,
+Q746M7_THET2/418-669:-0.000)
+0:0.437,
+Q4S7L6_TETNG/228-304:-0.026)
+0:0.505,
+(
+A8J0N0_CHLRE/619-933:0.037,
+A8J0M9_CHLRE/675-993:0.054)
+0:0.434)
+0:0.168,
+(
+A8WWP9_CAEBR/632-910:0.169,
+Q9XVI3_CAEEL/574-882:0.107)
+0:0.365)
+0:0.033)
+0:0.045,
+(
+A7SCI6_NEMVE/496-743:0.263,
+Q5DG80_SCHJA/3-99:0.116)
+0:0.145)
+0:0.028,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+B8BT49_THAPS/780-963:0.096,
+C7SYH3_THAPS/780-1048:0.027)
+0:0.404,
+B5DIM9_DROPS/1-71:-0.111)
+0:0.061,
+B4G6N2_DROPE/1-37:-0.061)
+0:0.131,
+B4G6N7_DROPE/19-133:0.083)
+0:0.113,
+(
+(
+(
+(
+B4NLX0_DROWI/695-993:0.094,
+B4N082_DROWI/579-877:0.075)
+0:0.014,
+(
+(
+(
+(
+B3NI38_DROER/838-1138:0.022,
+(
+(
+Q2Q3X0_9MUSC/506-806:0.003,
+(
+(
+(
+(
+(
+(
+Q2Q3X2_DROYA/506-806:0.000,
+Q2Q3X7_DROYA/506-806:-0.000)
+0:0.000,
+Q2Q3X4_DROYA/506-806:0.000)
+0:0.000,
+B4PCH3_DROYA/843-1143:0.000)
+0:0.000,
+Q2Q3X6_DROYA/506-806:0.000)
+0:0.000,
+Q2Q3X8_DROYA/506-806:0.000)
+0:0.000,
+B4IU14_DROYA/810-1110:0.000)
+0:0.003)
+0:0.006,
+Q2Q3X1_DROTE/424-724:0.001)
+0:0.017)
+0:0.053,
+B3M505_DROAN/688-988:0.065)
+0:0.019,
+(
+(
+(
+(
+(
+(
+B4GTA7_DROPE/448-747:-0.015,
+(
+B4GTA5_DROPE/448-747:-0.030,
+(
+B4ISF4_DROPE/14-227:0.029,
+B5DKZ0_DROPS/2-120:0.067)
+0:0.071)
+0:0.018)
+0:0.008,
+B4HDJ4_DROPE/40-339:-0.006)
+0:0.012,
+B5DT30_DROPS/694-993:-0.001)
+0:0.015,
+B4GTA6_DROPE/448-736:-0.002)
+0:0.052,
+B5DWW4_DROPS/3-186:0.179)
+0:0.008,
+(
+(
+(
+B4GDQ8_DROPE/669-968:-0.019,
+(
+(
+B5DYR9_DROPS/651-950:-0.076,
+B5DU45_DROPS/389-589:0.169)
+0:0.048,
+B5DYR8_DROPS/41-340:-0.051)
+0:0.048)
+0:0.010,
+B4GDQ6_DROPE/661-960:-0.010)
+0:0.078,
+(
+(
+B5DY62_DROPS/643-942:0.004,
+B4GFG0_DROPE/449-748:0.002)
+0:0.040,
+(
+B4GUA7_DROPE/624-923:0.009,
+B5DQH3_DROPS/471-770:0.005)
+0:0.026)
+0:0.017)
+0:0.012)
+0:0.016)
+0:0.020,
+(
+(
+C7LAD2_DROME/888-1187:0.000,
+AGO2_DROME/885-1184:-0.000)
+0:0.036,
+(
+(
+(
+Q2Q3W2_DROSI/511-810:-0.047,
+(
+Q2Q3W9_DROSI/511-810:-0.090,
+B4NVX8_DROSI/80-259:0.101)
+0:0.049)
+0:0.024,
+Q2Q3W7_DROSI/511-810:-0.024)
+0:0.047,
+B4HIG2_DROSE/1-224:0.056)
+0:0.022)
+0:0.046)
+0:0.019)
+0:0.021,
+(
+B4QL34_DROSI/606-729:0.022,
+(
+B4IWV1_DROGR/788-1091:0.102,
+(
+B4LH85_DROVI/152-457:0.080,
+B4KUJ5_DROMO/715-1017:0.066)
+0:0.027)
+0:0.028)
+0:0.005)
+0:0.074,
+(
+(
+B5DIM7_DROPS/517-815:-0.038,
+B4H1E3_DROPE/6-68:0.321)
+0:0.027,
+B4G6N0_DROPE/517-815:0.006)
+0:0.242)
+0:0.081)
+0:0.059,
+Q59HV7_BOMMO/706-1006:0.369)
+0:0.067,
+(
+B0X641_CULQU/527-832:0.295,
+(
+(
+(
+B0LJQ7_CULTA/1-148:-0.029,
+B0WRW8_CULQU/638-943:0.136)
+0:0.056,
+(
+C5J0H4_AEDAE/655-961:0.100,
+B0LJQ8_AEDTR/1-254:0.031)
+0:0.075)
+0:0.024,
+Q5TVL2_ANOGA/535-839:0.170)
+0:0.048)
+0:0.111)
+0:0.070,
+C4WWR5_ACYPI/1-266:0.249)
+0:0.091,
+(
+(
+Q0DZJ0_ORYSJ/35-101:-0.058,
+B9IL53_POPTR/1-160:0.058)
+0:0.302,
+(
+A5BG29_VITVI/774-895:0.050,
+(
+(
+(
+(
+A5BW27_VITVI/926-1238:0.077,
+(
+B9S921_RICCO/670-981:0.042,
+B9HXP0_POPTR/520-831:0.038)
+0:0.014)
+0:0.006,
+D3GBV1_LOTJA/669-981:0.094)
+0:0.038,
+Q9C793_ARATH/649-950:0.101)
+0:0.022,
+(
+(
+(
+A3AJI1_ORYSJ/584-892:0.000,
+AGO7_ORYSJ/709-1017:-0.000)
+0:0.000,
+A2YQ96_ORYSI/716-1024:0.000)
+0:0.055,
+(
+D0EYF3_MAIZE/683-995:0.022,
+C5WVP1_SORBI/688-996:0.014)
+0:0.056)
+0:0.113)
+0:0.014)
+0:0.040)
+0:0.110)
+0:0.035,
+(
+B2RFN0_OIKDI/550-850:0.502,
+(
+C5K8K7_9ALVE/727-977:0.608,
+(
+(
+(
+(
+(
+B9Q8Q1_TOXGO/379-692:-0.000,
+(
+B9PJN3_TOXGO/379-693:0.000,
+Q1L2C8_TOXGO/379-693:-0.000)
+0:0.000)
+0:0.000,
+Q1L1E2_TOXGO/161-474:-0.000)
+0:0.000,
+B6KA84_TOXGO/379-692:-0.000)
+0:0.000,
+Q1L2C9_TOXGO/379-692:-0.000)
+0:0.000,
+D2JRZ7_TOXGO/582-895:-0.000)
+0:0.664)
+0:0.131)
+0:0.068)
+0:0.013,
+(
+(
+(
+C5X8G7_SORBI/41-220:0.200,
+C5WR49_SORBI/670-825:0.119)
+0:0.183,
+(
+(
+Q10P03_ORYSJ/678-756:0.000,
+B9F6T7_ORYSJ/653-731:-0.000)
+0:0.000,
+B8AK97_ORYSI/622-700:0.000)
+0:0.657)
+0:0.070,
+B9ZU55_9TURB/580-893:0.433)
+0:0.048)
+0:0.014,
+(
+B7QBT5_IXOSC/313-623:0.308,
+(
+B7Q990_IXOSC/474-787:0.278,
+(
+B7Q811_IXOSC/611-920:0.170,
+B7P230_IXOSC/468-776:0.178)
+0:0.071)
+0:0.034)
+0:0.027)
+0:0.008)
+0:0.021,
+(
+(
+(
+A8JAG8_CHLRE/672-990:0.077,
+A8J9T3_CHLRE/1058-1164:0.017)
+0:0.271,
+(
+Q8H714_PHYIN/1-173:-0.061,
+(
+D0N1C0_PHYIN/587-890:0.011,
+D0N1B9_PHYIN/587-890:0.013)
+0:0.049)
+0:0.203)
+0:0.056,
+(
+B3SEP3_TRIAD/438-734:0.284,
+(
+Q5DFJ9_SCHJA/2-164:0.022,
+(
+(
+C4QPD2_SCHMA/595-831:0.120,
+C4QPD1_SCHMA/595-896:-0.074)
+0:0.142,
+(
+Q5DCI0_SCHJA/265-566:0.037,
+C4QPD0_SCHMA/628-928:0.025)
+0:0.058)
+0:0.080)
+0:0.215)
+0:0.033)
+0:0.005)
+0:0.028,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+AGO1_ARATH/676-997:0.000,
+Q3ECU7_ARATH/678-999:-0.000)
+0:0.037,
+(
+(
+(
+A1E5M2_PEA/696-1017:0.020,
+A1E5M3_PEA/726-1047:0.014)
+0:0.011,
+Q2LFC4_NICBE/678-999:0.023)
+0:0.004,
+(
+B9SJV6_RICCO/687-1008:0.018,
+(
+B9I4Y6_POPTR/688-1009:0.003,
+B9N365_POPTR/308-629:0.003)
+0:0.013)
+0:0.006)
+0:0.011)
+0:0.008,
+(
+Q2LFC3_NICBE/604-925:0.036,
+B1B5A8_DAUCA/736-1057:0.041)
+0:0.012)
+0:0.011,
+(
+A9T6J3_PHYPA/524-842:0.044,
+(
+A9RG03_PHYPA/598-919:0.014,
+A9RTW5_PHYPA/744-1065:0.011)
+0:0.032)
+0:0.019)
+0:0.004,
+(
+(
+C5YY05_SORBI/736-1058:0.022,
+B4FGY3_MAIZE/13-335:0.029)
+0:0.014,
+(
+(
+(
+(
+B8AGF0_ORYSI/693-1014:0.000,
+B9F1L3_ORYSJ/693-1014:-0.000)
+0:0.000,
+AGO1A_ORYSJ/709-1030:0.000)
+0:0.018,
+(
+(
+C5YE15_SORBI/712-1033:0.001,
+C0HEU9_MAIZE/87-408:0.002)
+0:0.003,
+(
+(
+B9FC11_ORYSJ/374-695:0.000,
+AGO1B_ORYSJ/746-1067:-0.000)
+0:0.000,
+B8AT34_ORYSI/729-1050:0.000)
+0:0.004)
+0:0.010)
+0:0.014,
+C7J0V9_ORYSJ/1-271:-0.012)
+0:0.014)
+0:0.014)
+0:0.007,
+(
+(
+(
+(
+PINH_ARATH/625-946:0.001,
+B0FHH7_BRANA/614-935:0.015)
+0:0.009,
+(
+B9RTJ1_RICCO/626-947:0.015,
+(
+B9HKB5_POPTR/631-952:0.003,
+B9HUQ6_POPTR/452-776:0.006)
+0:0.003)
+0:0.005)
+0:0.027,
+(
+(
+(
+PNH1_ORYSJ/620-941:0.000,
+B9FU05_ORYSJ/458-779:-0.000)
+0:0.010,
+C5Z5J6_SORBI/617-938:0.003)
+0:0.011,
+C0PNQ0_MAIZE/1-267:-0.002)
+0:0.017)
+0:0.008,
+(
+B9STN2_RICCO/586-907:0.048,
+A5ARQ9_VITVI/592-892:0.076)
+0:0.012)
+0:0.030)
+0:0.003,
+Q2PEW1_TRIPR/1-247:0.026)
+0:0.013,
+(
+(
+(
+(
+B8B2X0_ORYSI/647-968:0.000,
+AGO1D_ORYSJ/669-990:-0.000)
+0:0.000,
+B9FR04_ORYSJ/644-965:0.000)
+0:0.017,
+C5Z2L1_SORBI/643-964:0.022)
+0:0.023,
+(
+C5XWS2_SORBI/656-978:0.020,
+(
+B8AFI6_ORYSI/637-958:0.001,
+AGO1C_ORYSJ/638-959:0.002)
+0:0.015)
+0:0.013)
+0:0.053)
+0:0.054,
+(
+(
+AGO17_ORYSJ/514-834:0.000,
+B8AII3_ORYSI/514-834:-0.000)
+0:0.361,
+(
+(
+(
+B9FX53_ORYSJ/672-981:0.000,
+AGO18_ORYSJ/747-1056:-0.000)
+0:0.008,
+B8B5Y3_ORYSI/745-1054:0.008)
+0:0.144,
+(
+C5X8G4_SORBI/699-1002:0.073,
+(
+C0PDS4_MAIZE/580-888:-0.101,
+(
+C5WR49_SORBI/585-661:0.125,
+B7ZXH7_MAIZE/580-736:0.078)
+0:0.113)
+0:0.374)
+0:0.065)
+0:0.103)
+0:0.030)
+0:0.021,
+(
+(
+(
+C5WPM0_SORBI/900-1216:0.080,
+(
+(
+AGO12_ORYSJ/693-1012:0.000,
+B9FAL8_ORYSJ/438-757:-0.000)
+0:0.016,
+A2XKQ7_ORYSI/654-972:-0.003)
+0:0.098)
+0:0.020,
+(
+(
+C5WPM1_SORBI/697-1047:0.046,
+C0PMV6_MAIZE/89-412:0.032)
+0:0.025,
+(
+(
+B8APJ4_ORYSI/9-101:0.134,
+AGO11_ORYSJ/541-848:-0.004)
+0:0.036,
+B9FEW4_ORYSJ/531-767:0.030)
+0:0.078)
+0:0.016)
+0:0.058,
+(
+(
+(
+B9MTL4_POPTR/505-810:0.100,
+(
+(
+B9SCN8_RICCO/632-949:0.092,
+(
+B9HQS2_POPTR/635-955:0.047,
+B9GEQ1_POPTR/548-869:0.044)
+0:0.027)
+0:0.016,
+AGOL_ARATH/638-958:0.116)
+0:0.012)
+0:0.016,
+(
+Q0DZI9_ORYSJ/119-248:0.381,
+(
+B8AFF9_ORYSI/534-832:-0.050,
+(
+B9F134_ORYSJ/36-347:-0.118,
+Q0DZI9_ORYSJ/36-107:0.171)
+0:0.133)
+0:0.308)
+0:0.032)
+0:0.021,
+(
+(
+(
+(
+(
+B8ALC4_ORYSI/596-877:0.023,
+(
+AGO13_ORYSJ/471-770:0.034,
+B9F6E0_ORYSJ/564-783:-0.034)
+0:0.013)
+0:0.054,
+(
+(
+MEL1_ORYSJ/696-1016:0.000,
+B8ALC8_ORYSI/696-1016:-0.000)
+0:0.000,
+A3ANP6_ORYSJ/644-982:0.003)
+0:0.017)
+0:0.018,
+C5WX38_SORBI/703-1025:0.043)
+0:0.042,
+(
+(
+B7ZZW2_MAIZE/663-969:-0.013,
+Q7FS89_MAIZE/11-170:0.040)
+0:0.020,
+(
+C5XBU2_SORBI/675-995:-0.096,
+C5X6M9_SORBI/1-69:0.433)
+0:0.087)
+0:0.099)
+0:0.038,
+(
+(
+B9FVX3_ORYSJ/462-794:-0.002,
+B8B7Y0_ORYSI/653-985:0.005)
+0:0.001,
+AGO14_ORYSJ/677-1009:-0.001)
+0:0.142)
+0:0.031)
+0:0.014)
+0:0.027)
+0:0.016,
+(
+Q8S478_MAIZE/38-188:-0.019,
+(
+A9T108_PHYPA/1-169:-0.507,
+C6XVE0_PEDHD/320-460:0.507)
+0:0.729)
+0:0.279)
+0:0.046)
+0:0.015,
+(
+(
+(
+(
+Q4PLA9_PICGL/597-913:0.199,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+A5BG74_VITVI/577-717:0.271,
+Q3E984_ARATH/528-708:0.199)
+0:0.064,
+Q2LFC2_NICBE/565-873:0.045)
+0:0.007,
+Q2LFC1_NICBE/558-866:0.056)
+0:0.016,
+B9SP45_RICCO/574-882:0.054)
+0:0.014,
+B9HK80_POPTR/565-884:0.083)
+0:0.023,
+(
+(
+(
+(
+AGO4A_ORYSJ/557-865:0.000,
+B8ACN1_ORYSI/524-832:-0.000)
+0:0.000,
+A2ZRR6_ORYSJ/650-958:0.000)
+0:0.052,
+(
+C0HGZ0_MAIZE/552-859:0.015,
+B4FL08_MAIZE/45-352:0.015)
+0:0.041)
+0:0.031,
+(
+C5YX36_SORBI/564-870:0.051,
+(
+(
+B8AUX7_ORYSI/565-872:0.000,
+AGO4B_ORYSJ/565-872:-0.000)
+0:0.000,
+Q01MP5_ORYSA/565-872:0.000)
+0:0.038)
+0:0.046)
+0:0.019)
+0:0.020,
+Q9ZVD5_ARATH/577-885:0.125)
+0:0.011,
+(
+(
+Q56X15_ARATH/234-541:0.003,
+Q84VQ0_ARATH/546-853:0.000)
+0:0.003,
+Q84YI4_ARATH/550-857:0.004)
+0:0.124)
+0:0.020,
+(
+(
+A5AMR1_VITVI/53-183:0.086,
+(
+B9HDH5_POPTR/582-891:0.015,
+B9IHG7_POPTR/573-882:0.011)
+0:0.056)
+0:0.015,
+B9SN14_RICCO/570-878:0.091)
+0:0.067)
+0:0.014,
+(
+B9EV67_ORYSJ/22-172:0.013,
+(
+B8ACN0_ORYSI/540-670:0.005,
+AGO15_ORYSJ/546-853:0.003)
+0:0.018)
+0:0.144)
+0:0.022,
+(
+(
+(
+(
+AGO16_ORYSJ/535-844:0.000,
+B8B4Z4_ORYSI/515-824:-0.000)
+0:0.000,
+B9FWI9_ORYSJ/515-824:0.000)
+0:0.066,
+(
+C0P9X1_MAIZE/1-253:0.016,
+C5YU43_SORBI/1-285:-0.012)
+0:0.024)
+0:0.104,
+(
+O48771_ARATH/542-860:0.145,
+(
+B9T7B0_RICCO/516-824:0.095,
+(
+B9IAL0_POPTR/521-830:0.055,
+A5CB61_VITVI/15-305:0.059)
+0:0.025)
+0:0.048)
+0:0.022)
+0:0.034)
+0:0.034)
+0:0.173,
+(
+(
+(
+(
+A9SKW0_PHYPA/518-721:0.475,
+A9RNH7_PHYPA/593-893:0.089)
+0:0.012,
+A9U2A5_PHYPA/597-903:0.084)
+0:0.020,
+A9SRY5_PHYPA/573-879:0.142)
+0:0.118,
+(
+A9SKW0_PHYPA/722-774:0.258,
+A9TD99_PHYPA/2-180:0.092)
+0:0.133)
+0:0.134)
+0:0.074,
+C1DZY0_9CHLO/572-888:0.412)
+0:0.028,
+(
+D0MT95_PHYIN/497-796:0.120,
+(
+D0MT54_PHYIN/891-1191:0.095,
+D0MT94_PHYIN/524-824:0.085)
+0:0.046)
+0:0.304)
+0:0.015)
+0:0.011,
+(
+(
+(
+(
+C4L1M1_EXISA/321-484:0.404,
+Q70IH5_ARAHA/1-61:-0.404)
+0:0.392,
+A8NFX5_COPC7/531-721:0.497)
+0:0.236,
+(
+B8PJA4_POSPM/353-665:0.347,
+(
+B0DLH7_LACBS/515-821:0.312,
+A8NFX0_COPC7/514-795:0.346)
+0:0.046)
+0:0.069)
+0:0.092,
+(
+A8PFS7_COPC7/454-749:0.400,
+(
+A8NXQ6_COPC7/547-849:0.304,
+(
+A8P6A7_COPC7/477-803:0.375,
+(
+(
+(
+B0CXE0_LACBS/567-880:0.195,
+A8PFQ6_COPC7/458-767:0.218)
+0:0.024,
+B0CYG1_LACBS/553-863:0.170)
+0:0.016,
+B0D2D0_LACBS/417-738:0.196)
+0:0.039)
+0:0.012)
+0:0.056)
+0:0.021)
+0:0.043)
+0:0.026,
+(
+A8PVW7_BRUMA/492-800:0.368,
+(
+B6VBQ1_CAEBE/1034-1381:0.238,
+(
+A8XVL1_CAEBR/571-952:0.261,
+(
+O46002_CAEEL/57-176:0.117,
+Q9XU82_CAEEL/618-985:0.181)
+0:0.061)
+0:0.023)
+0:0.360)
+0:0.095)
+0:0.009,
+(
+(
+(
+(
+B9S0P9_RICCO/17-119:0.259,
+Q0U676_PHANO/647-830:0.536)
+0:0.302,
+A9QW19_TRICA/79-190:0.385)
+0:0.144,
+B9SSM8_RICCO/639-934:0.214)
+0:0.113,
+(
+(
+(
+(
+(
+A3AXD9_ORYSJ/720-1023:0.000,
+A2XXJ0_ORYSI/688-991:-0.000)
+0:0.000,
+AGO3_ORYSJ/720-1023:0.000)
+0:0.000,
+Q00RR5_ORYSA/745-1048:0.000)
+0:0.144,
+(
+(
+(
+B9FCH7_ORYSJ/626-928:0.000,
+AGO2_ORYSJ/687-989:-0.000)
+0:0.001,
+(
+Q00RR6_ORYSA/693-995:0.000,
+A2XXI9_ORYSI/693-995:-0.000)
+0:0.009)
+0:0.086,
+(
+C5YG12_SORBI/746-1048:0.053,
+C0PIX4_MAIZE/1-297:0.039)
+0:0.056)
+0:0.021)
+0:0.140,
+(
+(
+Q9SHF2_ARATH/841-1145:0.124,
+(
+Q9SHF3_ARATH/665-965:0.000,
+Q8GX33_ARATH/191-491:-0.000)
+0:0.110)
+0:0.154,
+(
+(
+A5AFZ6_VITVI/719-1022:0.105,
+(
+A5CBU3_VITVI/601-900:0.026,
+A5B8D3_VITVI/625-924:0.026)
+0:0.093)
+0:0.033,
+(
+B9NA51_POPTR/676-973:0.099,
+B9S3I1_RICCO/146-445:0.111)
+0:0.020)
+0:0.053)
+0:0.063)
+0:0.027)
+0:0.143)
+0:0.013)
+0:0.091,
+(
+(
+(
+C4JIN7_UNCRE/692-1007:0.148,
+C5P8C9_COCP7/682-993:0.125)
+0:0.083,
+C5FBF4_NANOT/570-628:0.220)
+0:0.103,
+(
+B2VW51_PYRTR/606-910:0.158,
+Q0UNU9_PHANO/666-973:0.142)
+0:0.142)
+0:0.082)
+0:0.005,
+(
+A7TMA9_VANPO/888-1209:0.489,
+(
+A5E477_LODEL/107-430:0.185,
+(
+C5MCT9_CANTT/554-879:0.133,
+(
+B9WGS3_CANDC/555-882:0.018,
+(
+Q5A1B6_CANAL/296-623:-0.002,
+C4YGL4_CANAL/554-881:0.005)
+0:0.023)
+0:0.105)
+0:0.050)
+0:0.155)
+0:0.117)
+0:0.018,
+(
+(
+B2WJ98_PYRTR/213-541:0.469,
+(
+A7ISJ0_MYCPJ/514-830:0.397,
+(
+A6S1V9_BOTFB/6-263:0.408,
+A6SR68_BOTFB/1-284:0.374)
+0:0.034)
+0:0.016)
+0:0.022,
+(
+(
+(
+Q0UCE8_PHANO/551-880:0.277,
+B2WJ35_PYRTR/419-708:0.295)
+0:0.107,
+(
+Q0UCG8_PHANO/473-701:0.335,
+Q0UCH0_PHANO/670-999:0.352)
+0:0.032)
+0:0.024,
+Q0UCU3_PHANO/737-1044:0.344)
+0:0.089)
+0:0.028)
+0:0.027)
+0:0.013,
+(
+(
+B0D488_LACBS/608-916:0.133,
+A8P0D4_COPC7/619-925:0.130)
+0:0.142,
+(
+A8P2K4_COPC7/589-903:0.098,
+B0E0C2_LACBS/610-916:0.158)
+0:0.190)
+0:0.102)
+0:0.041)
+0:0.015)
+0:0.031,
+(
+B8N7A8_ASPFN/617-954:0.002,
+Q2UBS9_ASPOR/578-915:0.001)
+0:0.398)
+0:0.017)
+0:0.016)
+0:0.027,
+(
+Q96UM0_BLUGR/565-886:0.186,
+(
+A7E4W2_SCLS1/692-1008:0.052,
+A6RK26_BOTFB/654-970:0.060)
+0:0.127)
+0:0.079)
+0:0.017,
+(
+C5JDT9_AJEDS/671-859:0.007,
+C5GX22_AJEDR/671-859:-0.002)
+0:0.182)
+0:0.016,
+(
+B6H0X0_PENCW/641-959:0.212,
+(
+(
+A1C469_ASPCL/690-1008:0.058,
+(
+A1DBD4_NEOFI/680-998:0.017,
+(
+B0Y9U0_ASPFC/686-1004:0.000,
+Q4WC92_ASPFU/686-1004:-0.000)
+0:0.022)
+0:0.023)
+0:0.102,
+(
+(
+(
+(
+C8VMQ3_EMENI/660-979:0.000,
+Q5BD61_EMENI/660-979:-0.000)
+0:0.150,
+A2R8K3_ASPNC/710-1028:0.141)
+0:0.010,
+Q0CNH1_ASPTN/643-961:0.109)
+0:0.011,
+(
+B8MXT2_ASPFN/684-1002:0.000,
+Q2US02_ASPOR/573-891:-0.000)
+0:0.130)
+0:0.008)
+0:0.047)
+0:0.039)
+0:0.019)
+0:0.020)
+0:0.117,
+(
+C0NMG7_AJECG/678-986:-0.006,
+(
+C6H291_AJECH/678-997:0.004,
+A6RB60_AJECN/291-610:0.008)
+0:0.011)
+0:0.030)
+0:0.075,
+C0RZ18_PARBP/688-993:-0.028)
+0:0.029)
+0:0.078)
+0:0.123)
+;
diff --git a/test/scripts/automated/belvu/test15 b/test/scripts/automated/belvu/test15
new file mode 100755
index 0000000..74fb361
--- /dev/null
+++ b/test/scripts/automated/belvu/test15
@@ -0,0 +1,25 @@
+#!/bin/ksh
+#
+# Description:
+#   Create the tree using the Kimura distance
+#   correction and save the tree in new-hampshire format
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences to the saved results
+diffs=`belvu -T k -o tree $data_dir/PF02171_seed.selex >&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
+
diff --git a/test/scripts/automated/belvu/test15_results b/test/scripts/automated/belvu/test15_results
new file mode 100644
index 0000000..5846ec0
--- /dev/null
+++ b/test/scripts/automated/belvu/test15_results
@@ -0,0 +1,61 @@
+(
+(
+PIWI_ARCFU/110-406:1.475,
+(
+Y1321_METJA/426-699:1.288,
+O67434_AQUAE/419-694:1.233)
+0:0.137)
+0:0.057,
+(
+(
+(
+YQ53_CAEEL/650-977:0.311,
+Q21691_CAEEL/673-1001:0.436)
+0:0.739,
+(
+(
+(
+Q21495_CAEEL/52-336:0.588,
+(
+O16386_CAEEL/548-847:0.326,
+O02095_CAEEL/574-878:0.310)
+0:0.325)
+0:0.358,
+(
+Q23415_CAEEL/40-350:0.256,
+O62275_CAEEL/594-924:0.224)
+0:0.512)
+0:0.128,
+Q19645_CAEEL/674-996:0.863)
+0:0.028)
+0:0.112,
+(
+(
+(
+(
+O48771_ARATH/542-860:0.265,
+Q9ZVD5_ARATH/577-885:0.232)
+0:0.314,
+(
+PINH_ARATH/625-946:0.318,
+AGO1_SCHPO/500-799:0.569)
+0:0.030)
+0:0.057,
+(
+TAG76_CAEEL/660-966:0.459,
+O16720_CAEEL/566-867:0.288)
+0:0.070)
+0:0.304,
+(
+(
+(
+O76922_DROME/555-852:0.419,
+PIWI_DROME/538-829:0.365)
+0:0.134,
+Q17567_CAEEL/397-708:0.574)
+0:0.014,
+PIWL1_HUMAN/555-847:0.357)
+0:0.425)
+0:0.276)
+0:0.358)
+;
diff --git a/test/scripts/automated/belvu/test16 b/test/scripts/automated/belvu/test16
new file mode 100755
index 0000000..a8bcd45
--- /dev/null
+++ b/test/scripts/automated/belvu/test16
@@ -0,0 +1,26 @@
+#!/bin/ksh
+#
+# Description:
+#   Create the tree using the Kimura distance
+#   correction and save the tree in new-hampshire format
+#   (large alignment)
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences to the saved results
+diffs=`belvu -T k -o tree $data_dir/PF02171_full.selex >&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
+
diff --git a/test/scripts/automated/belvu/test16_results b/test/scripts/automated/belvu/test16_results
new file mode 100644
index 0000000..f405ec3
--- /dev/null
+++ b/test/scripts/automated/belvu/test16_results
@@ -0,0 +1,2524 @@
+(
+(
+A8WWP9_CAEBR/632-910:0.193,
+Q9XVI3_CAEEL/574-882:0.097)
+0:0.251,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+C4V9J2_NOSCE/489-791:0.569,
+(
+(
+(
+Q2GQS4_CHAGB/345-418:0.383,
+B0WE95_CULQU/32-179:-0.383)
+0:0.467,
+C3ZKW1_BRAFL/534-739:0.369)
+0:0.371,
+(
+(
+(
+(
+(
+(
+(
+C4LVV2_ENTHI/470-756:0.035,
+B0ET37_ENTDI/470-756:0.004)
+0:0.583,
+(
+B0ENU6_ENTDI/467-753:0.059,
+C4LVQ2_ENTHI/467-753:0.077)
+0:0.754)
+0:0.307,
+(
+(
+C4LY31_ENTHI/438-711:0.011,
+B0EI01_ENTDI/438-710:0.047)
+0:1.441,
+D2V7J4_NAEGR/498-769:0.933)
+0:0.139)
+0:0.135,
+(
+(
+A4ZYY6_TETTH/491-831:0.000,
+Q23AZ6_TETTH/491-831:-0.000)
+0:1.474,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+B7R785_9THEO/119-333:0.827,
+Q11QW7_CYTH3/390-605:0.858)
+0:0.133,
+(
+(
+(
+(
+(
+Q9L1X1_STRCO/365-661:0.507,
+(
+D2M4C5_RHOPA/151-447:0.381,
+A3VQY4_9PROT/445-745:0.386)
+0:0.141)
+0:0.079,
+C1F5Q7_ACIC5/440-735:0.589)
+0:0.008,
+(
+B9MH92_ACIET/439-730:0.508,
+(
+A5D4D9_PELTS/458-756:0.433,
+A0LL61_SYNFM/455-750:0.436)
+0:0.088)
+0:0.084)
+0:0.065,
+D0BWJ3_9GAMM/401-693:0.676)
+0:0.059,
+(
+A4WYU7_RHOS5/454-756:0.407,
+B7K585_CYAP8/439-744:0.387)
+0:0.322)
+0:0.352)
+0:0.028,
+(
+Q1PV30_9BACT/383-655:0.968,
+C6XVE0_PEDHD/320-460:0.789)
+0:0.122)
+0:0.164,
+PIWI_ARCFU/110-406:1.263)
+0:0.094,
+(
+D2QY15_PIRSD/353-529:0.770,
+D2QGL1_SPILD/333-520:0.794)
+0:0.502)
+0:0.145,
+(
+(
+Q96Z85_SULTO/134-346:1.232,
+O67434_AQUAE/419-694:1.161)
+0:0.229,
+(
+(
+(
+Q8U3D2_PYRFU/474-756:0.878,
+(
+D3S0S6_FERPL/490-768:0.543,
+(
+Y1321_METJA/426-699:0.100,
+C7P7E7_METFA/420-692:0.113)
+0:0.456)
+0:0.299)
+0:0.190,
+(
+B6YTQ5_THEON/463-751:0.800,
+D3S7P9_9EURY/531-824:0.807)
+0:0.321)
+0:0.208,
+B5IR12_9EURY/528-819:1.278)
+0:0.119)
+0:0.055)
+0:0.057,
+(
+(
+(
+A3VPN8_9PROT/165-321:0.862,
+D1JFX3_9ARCH/159-437:0.875)
+0:0.473,
+(
+C1V6Q1_9EURY/608-882:0.773,
+B9LVW4_HALLT/464-658:0.790)
+0:0.221)
+0:0.112,
+(
+(
+(
+B4B3R2_9CHRO/1-219:0.451,
+(
+A0YYT3_9CYAN/471-752:0.334,
+(
+A8YDH3_MICAE/463-734:0.041,
+B0JXD6_MICAN/462-734:0.016)
+0:0.295)
+0:0.081)
+0:0.756,
+(
+(
+Q53W94_THET8/418-669:0.000,
+Q746M7_THET2/418-669:-0.000)
+0:0.508,
+(
+B1XJG0_SYNP2/307-599:0.564,
+(
+(
+Q2JSR3_SYNJA/437-712:0.136,
+Q2JI93_SYNJB/454-728:0.237)
+0:0.089,
+(
+Q8DKB1_THEEB/458-739:0.239,
+(
+Q5MZ10_SYNP6/441-718:0.002,
+Q31N05_SYNE7/441-718:0.001)
+0:0.259)
+0:0.079)
+0:0.415)
+0:0.189)
+0:0.249)
+0:0.205,
+(
+(
+B0ADC8_9CLOT/432-721:0.425,
+(
+C6QUV9_9BACI/2-48:0.039,
+B7GJX9_ANOFW/423-692:0.160)
+0:0.496)
+0:0.387,
+C4L1M1_EXISA/321-484:0.662)
+0:0.305)
+0:0.044)
+0:0.096)
+0:0.059,
+(
+(
+A4HBN9_LEIBR/872-1190:0.128,
+(
+A4HZ40_LEIIN/904-1226:0.029,
+Q4QCH4_LEIMA/899-1221:0.040)
+0:0.157)
+0:0.370,
+(
+Q4DYG9_TRYCR/791-1083:0.257,
+(
+(
+Q6T6J9_9TRYP/784-1082:0.000,
+D0A1P1_TRYBG/784-1082:-0.000)
+0:0.000,
+Q38C22_9TRYP/783-1081:0.000)
+0:0.228)
+0:0.236)
+0:0.999)
+0:0.023,
+(
+(
+A4HH63_LEIBR/16-225:0.000,
+A4H6I4_LEIBR/673-882:-0.000)
+0:0.645,
+(
+Q6T6K0_9TRYP/549-877:0.008,
+(
+D0A4M3_TRYBG/571-899:0.003,
+Q389P5_9TRYP/560-888:0.000)
+0:0.011)
+0:0.764)
+0:0.733)
+0:0.040)
+0:0.128)
+0:0.116,
+(
+(
+A2DPV7_TRIVA/501-794:0.888,
+(
+(
+Q86QW7_GIALA/412-736:0.000,
+A8BCK6_GIALA/555-879:-0.000)
+0:0.279,
+C6LTG5_GIALA/555-877:0.123)
+0:0.934)
+0:0.149,
+(
+(
+(
+(
+(
+Q3SD94_PARTE/460-750:0.000,
+A0D4I7_PARTE/320-610:-0.000)
+0:0.209,
+(
+Q3SD95_PARTE/471-760:0.094,
+A0CE33_PARTE/2-210:0.533)
+0:0.152)
+0:0.297,
+(
+(
+A0DEE4_PARTE/478-780:0.003,
+Q3SE57_PARTE/478-788:0.017)
+0:0.249,
+(
+Q3SE52_PARTE/466-770:0.029,
+(
+Q3SE58_PARTE/466-770:0.000,
+A0CB11_PARTE/463-767:-0.000)
+0:0.059)
+0:0.355)
+0:0.039)
+0:0.218,
+(
+(
+(
+A4ZYY5_TETTH/495-793:0.220,
+(
+A4VE06_TETTH/14-183:-0.070,
+(
+A4VE05_TETTH/347-645:0.075,
+(
+Q6UE79_TETTH/497-791:0.005,
+Q0GM58_TETTH/497-791:-0.001)
+0:0.036)
+0:0.086)
+0:0.098)
+0:0.144,
+(
+(
+Q22NE2_TETTH/491-777:0.024,
+A8VSR3_TETTH/491-787:-0.014)
+0:0.516,
+(
+A4ZYY4_TETTH/474-761:-0.084,
+Q24HU6_TETTH/383-631:0.114)
+0:0.728)
+0:0.118)
+0:0.409,
+(
+Q0MRE2_TETTH/533-834:0.000,
+Q239A3_TETTH/603-904:-0.000)
+0:0.679)
+0:0.119)
+0:0.237,
+(
+A0CR14_PARTE/559-847:0.000,
+Q3SE51_PARTE/572-860:-0.000)
+0:0.928)
+0:0.121)
+0:0.045)
+0:0.085,
+(
+(
+(
+(
+C5LD15_9ALVE/718-952:0.808,
+B9ZU54_9TURB/593-893:0.424)
+0:0.118,
+(
+(
+(
+(
+(
+(
+(
+(
+B7PDV6_IXOSC/541-835:0.082,
+B7Q5I1_IXOSC/446-741:0.296)
+0:0.140,
+(
+(
+A7RFC2_NEMVE/557-857:0.211,
+(
+(
+(
+A7T755_NEMVE/2-70:-0.025,
+A0D5D7_PARTE/374-640:0.824)
+0:0.633,
+Q6RSS9_PODCA/561-853:0.062)
+0:0.044,
+B2KTD9_9CNID/559-850:0.157)
+0:0.059)
+0:0.021,
+(
+Q9GPA6_STRPU/114-407:-0.011,
+(
+Q9GPA7_STRPU/547-808:0.013,
+Q9GPA8_STRPU/547-840:-0.009)
+0:0.014)
+0:0.374)
+0:0.037)
+0:0.034,
+(
+Q3ZUK2_PLADU/35-327:0.199,
+B5BUZ0_9ASCI/567-860:0.313)
+0:0.004)
+0:0.035,
+(
+D1LXB5_SACKO/1-252:0.178,
+(
+C3XV22_BRAFL/1173-1299:0.141,
+C3XV22_BRAFL/2983-3180:-0.087)
+0:0.149)
+0:0.039)
+0:0.020,
+(
+(
+C3XV23_BRAFL/67-195:-0.005,
+(
+A8XEN9_CAEBR/501-812:0.090,
+(
+Q17567_CAEEL/397-708:0.019,
+P90786_CAEEL/499-810:0.011)
+0:0.023)
+0:0.495)
+0:0.035,
+(
+(
+B4DYF7_HUMAN/569-859:-0.004,
+PIWL3_HUMAN/578-868:0.004)
+0:0.335,
+(
+(
+PIWL1_CHICK/561-853:0.069,
+(
+PIWL1_HUMAN/555-847:0.004,
+(
+D2HWM8_AILME/555-847:-0.000,
+(
+PIWL1_MOUSE/556-848:0.000,
+D3ZTP9_RAT/556-848:-0.000)
+0:0.014)
+0:0.024)
+0:0.113)
+0:0.068,
+(
+PIWL1_DANRE/552-844:0.065,
+(
+(
+(
+Q4T9Z1_TETNG/519-587:0.224,
+Q4T9Y6_TETNG/521-792:-0.209)
+0:0.142,
+Q4T9Y9_TETNG/1-228:-0.103)
+0:0.201,
+B9U223_ORYLA/549-841:0.031)
+0:0.047)
+0:0.086)
+0:0.092)
+0:0.054)
+0:0.016)
+0:0.055,
+(
+(
+(
+C9E0T4_APIME/497-785:0.000,
+C9E0T3_APIME/525-813:-0.000)
+0:0.206,
+(
+A7LM14_BOMMO/414-612:0.114,
+A8D8P8_BOMMO/594-885:-0.114)
+0:0.376)
+0:0.093,
+(
+(
+(
+(
+Q7QG53_ANOGA/576-875:0.089,
+(
+(
+(
+Q16IF2_AEDAE/569-868:0.000,
+Q16ZS2_AEDAE/361-660:-0.000)
+0:0.011,
+Q16ZS3_AEDAE/562-861:0.026)
+0:0.065,
+(
+Q171B3_AEDAE/547-846:0.000,
+B0W5T4_CULQU/546-845:0.024)
+0:0.041)
+0:0.024)
+0:0.015,
+(
+B0W5T3_CULQU/510-809:0.000,
+B0W5P0_CULQU/552-851:-0.000)
+0:0.058)
+0:0.171,
+(
+Q5TW24_ANOGA/530-829:0.230,
+(
+(
+(
+Q16JS1_AEDAE/576-874:0.134,
+B0XE74_CULQU/592-891:0.173)
+0:0.052,
+(
+Q176R2_AEDAE/633-931:0.105,
+(
+B0XE75_CULQU/501-788:0.080,
+Q16JS2_AEDAE/571-869:0.080)
+0:0.018)
+0:0.021)
+0:0.045,
+B0WYL9_CULQU/560-857:0.269)
+0:0.040)
+0:0.014)
+0:0.048,
+(
+(
+(
+(
+B4P152_DROYA/546-844:0.044,
+B3N4Z9_DROER/546-844:0.019)
+0:0.023,
+(
+(
+(
+(
+Q95PE5_DROME/1-176:0.165,
+A8DYZ0_DROME/483-781:-0.135)
+0:0.069,
+O76922_DROME/554-852:-0.069)
+0:0.085,
+B4Q9X4_DROSI/545-843:-0.005)
+0:0.005,
+B4HWZ3_DROSE/549-847:0.005)
+0:0.080)
+0:0.029,
+(
+(
+(
+B4LV39_DROVI/546-843:0.060,
+B4KHC1_DROMO/539-836:0.044)
+0:0.019,
+B4JBE4_DROGR/542-839:0.063)
+0:0.013,
+(
+(
+(
+(
+B4MUA1_DROWI/563-860:0.000,
+B4MUA0_DROWI/539-836:-0.000)
+0:0.000,
+B4N6U3_DROWI/34-103:0.092)
+0:0.046,
+B3MJZ7_DROAN/562-859:0.050)
+0:0.013,
+(
+B4G765_DROPE/541-838:0.007,
+Q29P29_DROPS/540-837:0.006)
+0:0.028)
+0:0.022)
+0:0.019)
+0:0.268,
+(
+(
+(
+B4JBE1_DROGR/574-864:0.081,
+(
+(
+B4KHB7_DROMO/577-867:0.108,
+(
+(
+B4G753_DROPE/334-531:0.151,
+Q29CN1_DROPS/543-834:-0.141)
+0:0.129,
+(
+(
+(
+(
+B3N502_DROER/538-829:0.009,
+B4P149_DROYA/538-829:0.012)
+0:0.014,
+(
+(
+(
+Q6NNZ4_DROME/552-843:-0.011,
+Q6NP34_DROME/566-857:0.015)
+0:0.006,
+C0PTU6_DROME/566-857:-0.006)
+0:0.003,
+PIWI_DROME/538-829:-0.003)
+0:0.018)
+0:0.008,
+B4HWY9_DROSE/538-829:0.004)
+0:0.010,
+B4Q9X1_DROSI/538-829:-0.004)
+0:0.033)
+0:0.040)
+0:0.031,
+B4LV36_DROVI/558-849:0.049)
+0:0.031)
+0:0.021,
+B3MJZ4_DROAN/563-854:0.129)
+0:0.011,
+B4MU97_DROWI/591-882:0.108)
+0:0.235)
+0:0.025)
+0:0.033)
+0:0.108)
+0:0.043,
+(
+(
+(
+PIWL4_HUMAN/546-838:0.105,
+D2I3M6_AILME/487-786:0.059)
+0:0.048,
+(
+(
+D3ZDI3_RAT/541-827:0.180,
+PIWL4_RAT/541-834:-0.014)
+0:0.041,
+PIWL4_MOUSE/541-834:0.030)
+0:0.071)
+0:0.093,
+A6X965_MOUSE/3-172:0.003)
+0:0.336)
+0:0.067,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+Q0H8V5_9CNID/70-239:0.227,
+(
+C3XV22_BRAFL/1831-1964:0.334,
+C3XV20_BRAFL/551-843:-0.172)
+0:0.164)
+0:0.064,
+C3Z5S8_BRAFL/570-730:0.241)
+0:0.094,
+B7QEM1_IXOSC/88-370:0.212)
+0:0.049,
+B0FLQ9_STRPU/653-945:0.157)
+0:0.041,
+(
+A7SQI3_NEMVE/441-733:-0.038,
+A7T7C9_NEMVE/1-180:0.062)
+0:0.220)
+0:0.075,
+(
+(
+PIWL2_XENTR/644-935:0.111,
+(
+(
+D2H044_AILME/665-956:0.005,
+(
+D3ZRE1_RAT/666-957:0.000,
+PIWL2_MOUSE/666-957:-0.000)
+0:0.033)
+0:0.007,
+PIWL2_HUMAN/668-959:0.014)
+0:0.092)
+0:0.094,
+(
+(
+(
+PIWL2_ONCMY/749-1040:0.081,
+(
+PIWL2_DANRE/741-1032:0.008,
+A5PL40_DANRE/7-278:0.011)
+0:0.014)
+0:0.071,
+B9U224_ORYLA/729-1020:0.129)
+0:0.027,
+Q4RPK4_TETNG/383-660:0.144)
+0:0.064)
+0:0.122)
+0:0.099,
+(
+(
+C9E0T2_APIME/1-294:-0.064,
+C9E0S9_APIME/551-753:0.074)
+0:0.037,
+C9E0S8_APIME/604-898:-0.030)
+0:0.301)
+0:0.041,
+(
+(
+D2A2S9_TRICA/552-839:0.410,
+(
+(
+(
+B4JP35_DROGR/334-622:0.156,
+(
+B0WE96_CULQU/634-782:0.277,
+Q170R5_AEDAE/637-930:-0.182)
+0:0.281)
+0:0.068,
+(
+(
+(
+(
+B7FNN2_DROME/566-845:-0.039,
+(
+A4GUJ7_DROME/566-848:-0.076,
+A7YFW6_DROME/299-494:0.097)
+0:0.049)
+0:0.027,
+B6IDV1_DROME/574-861:-0.028)
+0:0.014,
+Q7PLK0_DROME/566-853:-0.014)
+0:0.007,
+A4GND8_DROME/566-853:-0.007)
+0:0.108)
+0:0.138,
+Q7PWT1_ANOGA/618-916:0.177)
+0:0.107)
+0:0.003,
+(
+(
+(
+A9ZSZ2_BOMMO/619-912:0.000,
+A7BJS3_BOMMO/619-912:-0.000)
+0:0.069,
+A7LNN5_BOMMO/2-193:-0.064)
+0:0.272,
+B4N2M0_DROWI/49-131:0.423)
+0:0.039)
+0:0.028)
+0:0.040,
+(
+B2Z3D6_SCHMD/665-960:0.013,
+D2Z0E0_DUGJA/657-952:0.014)
+0:0.401)
+0:0.054)
+0:0.039)
+0:0.011,
+(
+(
+(
+Q0Q5B1_9SPIT/472-767:0.155,
+(
+Q8ISG8_STYLE/475-767:-0.003,
+Q86CV7_STYLE/475-767:0.020)
+0:0.191)
+0:0.266,
+(
+(
+(
+(
+Q8MQL1_TETTH/444-756:0.000,
+Q8MXZ9_TETTH/444-756:-0.000)
+0:0.000,
+Q23ND1_TETTH/444-756:0.000)
+0:0.375,
+(
+A8VSS4_TETTH/479-774:0.630,
+C5LD15_9ALVE/568-697:0.910)
+0:0.369)
+0:0.102,
+(
+(
+(
+Q3SE56_PARTE/450-741:0.058,
+Q3SE59_PARTE/450-741:0.019)
+0:0.392,
+(
+(
+Q9U5C9_PARCA/466-759:0.166,
+(
+Q3SE53_PARTE/460-752:0.010,
+A0E0B0_PARTE/455-747:0.001)
+0:0.146)
+0:0.024,
+Q3SE49_PARTE/467-759:0.157)
+0:0.086)
+0:0.196,
+(
+Q3SE50_PARTE/446-748:0.080,
+(
+Q3SE54_PARTE/446-748:0.005,
+Q3SE55_PARTE/446-748:0.011)
+0:0.039)
+0:0.430)
+0:0.013)
+0:0.150)
+0:0.120,
+(
+(
+D2VMG4_NAEGR/577-883:0.534,
+(
+(
+(
+PIWI1_SCHMD/493-790:0.018,
+D2Z0D8_DUGJA/494-791:0.049)
+0:0.220,
+(
+PIWIL_DUGJA/502-800:0.133,
+(
+PIWI2_SCHMD/516-815:0.041,
+D2Z0D9_DUGJA/512-810:0.008)
+0:0.079)
+0:0.100)
+0:0.311,
+B9ZU52_9TURB/589-885:0.496)
+0:0.142)
+0:0.028,
+B9ZU53_9TURB/586-879:0.556)
+0:0.029)
+0:0.035)
+0:0.037,
+(
+(
+Q54HL3_DICDI/867-1166:0.604,
+(
+(
+Q7KWS3_DICDI/669-964:0.142,
+Q54G64_DICDI/590-885:0.083)
+0:0.276,
+(
+D3B338_POLPA/992-1287:0.329,
+D3BMP8_POLPA/633-929:0.385)
+0:0.060)
+0:0.084)
+0:0.046,
+(
+Q1ZXG9_DICDI/1063-1281:0.217,
+Q86HF5_DICDI/896-1194:0.284)
+0:0.237)
+0:0.197)
+0:0.043)
+0:0.043,
+D2V2M6_NAEGR/28-326:0.771)
+0:0.045)
+0:0.263)
+0:0.012,
+(
+(
+(
+B6K0R2_SCHJY/507-805:0.178,
+AGO1_SCHPO/500-798:0.173)
+0:0.291,
+(
+(
+(
+(
+(
+(
+D0U267_CRYPA/639-939:0.268,
+A4QSM3_MAGGR/672-970:0.216)
+0:0.050,
+(
+(
+C7YHP8_NECH7/612-917:0.270,
+(
+C9SSA6_VERA1/19-91:0.033,
+C9SGB5_VERA1/589-897:0.104)
+0:0.162)
+0:0.019,
+(
+A6S388_BOTFB/557-866:0.076,
+A7F377_SCLS1/445-754:0.029)
+0:0.268)
+0:0.021)
+0:0.017,
+(
+Q8J276_NEUCR/628-929:0.107,
+D1ZPU0_SORMA/563-867:0.139)
+0:0.217)
+0:0.020,
+B2AKU3_PODAN/441-754:0.315)
+0:0.024,
+(
+(
+(
+B6Q5R7_PENMQ/547-853:0.091,
+B8M5N8_TALSN/546-852:0.113)
+0:0.207,
+(
+(
+(
+C8V9S4_EMENI/46-154:0.000,
+Q5B3I7_EMENI/46-154:-0.000)
+0:0.045,
+(
+A2QDC5_ASPNC/643-949:0.148,
+(
+(
+(
+Q2UKV9_ASPOR/543-849:0.000,
+B8N3T1_ASPFN/436-742:-0.000)
+0:0.103,
+(
+A1CKK4_ASPCL/543-849:0.061,
+(
+(
+A1D6W7_NEOFI/543-849:0.019,
+B0XXP5_ASPFC/564-870:-0.002)
+0:0.001,
+Q4WXX3_ASPFU/564-870:-0.001)
+0:0.011)
+0:0.060)
+0:0.007,
+Q0CNV7_ASPTN/543-854:0.112)
+0:0.055)
+0:0.034)
+0:0.008,
+B6H4L5_PENCW/673-980:0.292)
+0:0.064)
+0:0.053,
+(
+(
+(
+C1G1H6_PARBD/510-817:0.017,
+C1GU57_PARBA/495-755:0.007)
+0:0.019,
+C0S3N8_PARBP/535-823:0.002)
+0:0.080,
+(
+(
+(
+C5G7J1_AJEDR/547-854:0.000,
+C5JJJ6_AJEDS/547-854:-0.000)
+0:0.036,
+(
+(
+C6HRE3_AJECH/547-854:0.000,
+C0NUS8_AJECG/547-854:-0.000)
+0:0.000,
+A6RGK9_AJECN/547-854:0.003)
+0:0.054)
+0:0.100,
+(
+(
+C5FDD8_NANOT/542-847:0.036,
+(
+D4AMR8_ARTBE/628-933:-0.014,
+D4DBM7_TRIVC/515-807:0.028)
+0:0.044)
+0:0.117,
+(
+C5P9D5_COCP7/668-975:0.076,
+C4JZ88_UNCRE/552-859:0.053)
+0:0.081)
+0:0.039)
+0:0.068)
+0:0.077)
+0:0.150)
+0:0.006,
+(
+Q0U7V7_PHANO/645-956:0.186,
+B2W8P0_PYRTR/611-920:0.103)
+0:0.315)
+0:0.263)
+0:0.046,
+(
+(
+C7SYH3_THAPS/1070-1160:0.408,
+(
+C7SYH2_PHATR/826-1176:0.194,
+B7G499_PHATR/1-107:0.023)
+0:0.237)
+0:0.612,
+(
+Q5KAT1_CRYNE/560-859:0.133,
+Q5KAU3_CRYNE/580-879:0.201)
+0:0.263)
+0:0.136)
+0:0.021)
+0:0.036,
+(
+(
+(
+(
+A8Q5F0_BRUMA/545-849:0.619,
+(
+(
+(
+Q21691_CAEEL/673-1001:0.346,
+(
+A8WNJ6_CAEBR/660-987:0.086,
+A8WS47_CAEBR/435-755:0.046)
+0:0.115)
+0:0.174,
+(
+Q9N3L7_CAEEL/585-911:0.315,
+A8XZY0_CAEBR/665-992:0.257)
+0:0.064)
+0:0.027,
+(
+A8WQA0_CAEBR/671-998:0.156,
+(
+Q9TXN7_CAEEL/609-935:0.160,
+(
+C8JQR1_CAEEL/591-918:0.059,
+YQ53_CAEEL/650-977:0.078)
+0:0.086)
+0:0.076)
+0:0.118)
+0:0.548)
+0:0.143,
+(
+(
+(
+(
+Q27GU1_CAEEL/511-833:0.000,
+Q19645_CAEEL/674-996:-0.000)
+0:0.080,
+A8XRG0_CAEBR/648-970:0.046)
+0:0.771,
+(
+A8QE08_BRUMA/711-1030:0.492,
+(
+(
+A8WWH9_CAEBR/55-193:0.198,
+Q17600_CAEEL/19-157:0.297)
+0:0.957,
+(
+Q9XVF1_CAEEL/588-902:0.233,
+A8WWI1_CAEBR/598-920:0.393)
+0:0.265)
+0:0.223)
+0:0.131)
+0:0.094,
+(
+(
+Q8MU01_HETGL/745-963:0.412,
+(
+(
+A8XFJ6_CAEBR/595-895:0.179,
+(
+(
+Q23415_CAEEL/40-350:0.066,
+P91085_CAEEL/543-853:0.038)
+0:0.004,
+GCC7_CAEEL/596-906:0.035)
+0:0.078)
+0:0.141,
+(
+(
+A8WJ71_CAEBR/596-953:0.077,
+A8X957_CAEBR/565-899:0.019)
+0:0.278,
+(
+O62275_CAEEL/594-924:0.190,
+Q9N585_CAEEL/604-934:0.227)
+0:0.008)
+0:0.057)
+0:0.458)
+0:0.145,
+(
+(
+A8P7Z4_BRUMA/1-302:0.423,
+(
+(
+(
+(
+A8XEJ5_CAEBR/552-849:0.092,
+(
+(
+(
+Q86S33_CAEEL/548-852:0.000,
+Q9GZG4_CAEEL/548-852:-0.000)
+0:0.002,
+(
+(
+Q86NJ8_CAEEL/548-852:0.000,
+B3KLZ7_CAEEL/358-662:-0.000)
+0:0.000,
+O02095_CAEEL/574-878:0.000)
+0:0.001)
+0:0.104,
+A8X254_CAEBR/555-701:0.615)
+0:0.054)
+0:0.104,
+O16386_CAEEL/548-847:0.322)
+0:0.063,
+A8XUC0_CAEBR/563-774:0.548)
+0:0.247,
+Q8MU01_HETGL/598-705:0.833)
+0:0.288)
+0:0.085,
+(
+A8X254_CAEBR/749-889:0.447,
+(
+A8X022_CAEBR/492-805:0.937,
+(
+A8X023_CAEBR/600-841:0.472,
+Q21495_CAEEL/61-336:0.472)
+0:0.123)
+0:0.034)
+0:0.314)
+0:0.182)
+0:0.030)
+0:0.094)
+0:0.312,
+(
+B2WJ32_PYRTR/383-592:0.382,
+C5WX34_SORBI/1-43:0.417)
+0:0.475)
+0:0.110,
+(
+(
+(
+(
+B9S0P9_RICCO/17-119:0.185,
+Q0U676_PHANO/647-830:0.723)
+0:0.513,
+A9QW19_TRICA/79-190:0.375)
+0:0.212,
+B9SSM8_RICCO/639-934:0.205)
+0:0.168,
+(
+(
+(
+(
+(
+A3AXD9_ORYSJ/720-1023:0.000,
+A2XXJ0_ORYSI/688-991:-0.000)
+0:0.000,
+AGO3_ORYSJ/720-1023:0.000)
+0:0.000,
+Q00RR5_ORYSA/745-1048:0.000)
+0:0.155,
+(
+(
+(
+B9FCH7_ORYSJ/626-928:-0.001,
+(
+Q00RR6_ORYSA/693-995:0.000,
+A2XXI9_ORYSI/693-995:-0.000)
+0:0.011)
+0:0.000,
+AGO2_ORYSJ/687-989:-0.000)
+0:0.087,
+(
+C5YG12_SORBI/746-1048:0.057,
+C0PIX4_MAIZE/1-297:0.036)
+0:0.061)
+0:0.020)
+0:0.157,
+(
+(
+Q9SHF2_ARATH/841-1145:0.133,
+(
+Q9SHF3_ARATH/665-965:0.000,
+Q8GX33_ARATH/191-491:-0.000)
+0:0.110)
+0:0.183,
+(
+(
+A5AFZ6_VITVI/719-1022:0.107,
+(
+A5CBU3_VITVI/601-900:0.026,
+A5B8D3_VITVI/625-924:0.026)
+0:0.099)
+0:0.039,
+(
+B9NA51_POPTR/676-973:0.101,
+B9S3I1_RICCO/146-445:0.117)
+0:0.019)
+0:0.049)
+0:0.076)
+0:0.035)
+0:0.116)
+0:0.053)
+0:0.031,
+(
+(
+(
+(
+(
+Q0TWJ6_PHANO/160-297:0.720,
+Q2HHM4_CHAGB/694-1033:0.508)
+0:0.143,
+(
+(
+(
+(
+B6HRB3_PENCW/625-938:0.473,
+A2QG96_ASPNC/558-884:0.425)
+0:0.061,
+(
+(
+D0U264_CRYPA/482-802:0.407,
+(
+(
+(
+(
+D1ZJ09_SORMA/711-1030:0.068,
+(
+Q1K6I6_NEUCR/733-1052:0.000,
+Q9P8T1_NEUCR/582-901:-0.000)
+0:0.078)
+0:0.141,
+(
+B2AR52_PODAN/574-886:0.191,
+Q2GSQ8_CHAGB/651-969:0.182)
+0:0.029)
+0:0.080,
+(
+C9ST09_VERA1/571-888:0.200,
+C7YM23_NECH7/666-978:0.229)
+0:0.077)
+0:0.022,
+A4RL50_MAGGR/721-1039:0.286)
+0:0.066)
+0:0.065,
+(
+(
+(
+A4R6J1_MAGGR/641-908:0.462,
+(
+D0U265_CRYPA/712-1038:0.287,
+D0U266_CRYPA/635-957:0.424)
+0:0.024)
+0:0.023,
+(
+(
+B8N7A8_ASPFN/617-954:0.002,
+Q2UBS9_ASPOR/578-915:0.001)
+0:0.363,
+(
+B2WES9_PYRTR/643-967:0.010,
+(
+(
+A6QW60_AJECN/639-963:-0.153,
+B8MGF3_TALSN/2-137:0.295)
+0:0.108,
+B6QWK7_PENMQ/644-968:-0.058)
+0:0.093)
+0:0.216)
+0:0.076)
+0:0.001,
+(
+(
+(
+B8MQK8_TALSN/682-995:0.069,
+B6QUK3_PENMQ/689-1001:0.109)
+0:0.177,
+C7ZR18_NECH7/19-235:0.285)
+0:0.033,
+(
+(
+(
+(
+(
+C5GYE6_AJEDR/653-980:-0.035,
+C5K303_AJEDS/770-890:0.222)
+0:0.182,
+C0S8I9_PARBP/1049-1137:0.275)
+0:0.133,
+(
+(
+(
+(
+(
+(
+(
+C1GSN8_PARBA/1-191:0.270,
+(
+C6H5C6_AJECH/26-168:0.053,
+A6RDB0_AJECN/9-157:0.115)
+0:0.287)
+0:0.330,
+A2R8K3_ASPNC/710-1028:0.135)
+0:0.021,
+Q0CNH1_ASPTN/643-961:0.092)
+0:0.010,
+(
+C8VMQ3_EMENI/660-979:0.000,
+Q5BD61_EMENI/660-979:-0.000)
+0:0.175)
+0:0.009,
+(
+A1C469_ASPCL/690-1008:0.063,
+(
+A1DBD4_NEOFI/680-998:0.015,
+(
+B0Y9U0_ASPFC/686-1004:0.000,
+Q4WC92_ASPFU/686-1004:-0.000)
+0:0.024)
+0:0.020)
+0:0.094)
+0:0.016,
+(
+B8MXT2_ASPFN/684-1002:0.000,
+Q2US02_ASPOR/573-891:-0.000)
+0:0.141)
+0:0.062,
+B6H0X0_PENCW/641-959:0.240)
+0:0.041)
+0:0.014,
+(
+(
+(
+(
+C5PJP0_COCP7/663-977:0.130,
+C4JG78_UNCRE/651-963:0.079)
+0:0.096,
+(
+(
+(
+C1G7F3_PARBD/674-979:-0.061,
+(
+C1GXU8_PARBA/683-1002:-0.175,
+(
+C5JDT9_AJEDS/580-664:0.000,
+C5GX22_AJEDR/580-664:-0.000)
+0:0.284)
+0:0.090)
+0:0.035,
+C0RZ18_PARBP/688-993:-0.035)
+0:0.083,
+(
+C0NMG7_AJECG/678-986:-0.011,
+(
+C6H291_AJECH/678-997:0.003,
+A6RB60_AJECN/291-610:0.009)
+0:0.016)
+0:0.024)
+0:0.124)
+0:0.020,
+(
+(
+D4ANV6_ARTBE/642-958:0.000,
+D4CZ86_TRIVC/642-958:-0.000)
+0:0.059,
+C5FGF6_NANOT/649-965:0.065)
+0:0.166)
+0:0.011,
+(
+C5JDT9_AJEDS/671-859:0.004,
+C5GX22_AJEDR/671-859:0.001)
+0:0.141)
+0:0.028)
+0:0.028,
+(
+Q96UM0_BLUGR/565-886:0.199,
+(
+A7E4W2_SCLS1/692-1008:0.051,
+A6RK26_BOTFB/654-970:0.063)
+0:0.136)
+0:0.099)
+0:0.032)
+0:0.004)
+0:0.042)
+0:0.017)
+0:0.026,
+(
+D4B128_ARTBE/608-819:0.024,
+D4D326_TRIVC/587-798:0.020)
+0:0.512)
+0:0.057,
+(
+(
+B0D488_LACBS/608-916:0.138,
+A8P0D4_COPC7/619-925:0.136)
+0:0.156,
+(
+A8P2K4_COPC7/589-903:0.088,
+B0E0C2_LACBS/610-916:0.179)
+0:0.225)
+0:0.128)
+0:0.024)
+0:0.025,
+(
+(
+B2WJ98_PYRTR/213-541:0.553,
+(
+A7ISJ0_MYCPJ/514-830:0.450,
+(
+A6S1V9_BOTFB/6-263:0.473,
+A6SR68_BOTFB/1-284:0.418)
+0:0.048)
+0:0.017)
+0:0.033,
+(
+(
+(
+Q0UCE8_PHANO/551-880:0.300,
+B2WJ35_PYRTR/419-708:0.329)
+0:0.136,
+(
+Q0UCG8_PHANO/473-701:0.366,
+Q0UCH0_PHANO/670-999:0.403)
+0:0.040)
+0:0.036,
+Q0UCU3_PHANO/737-1044:0.379)
+0:0.117)
+0:0.040)
+0:0.023,
+(
+A7TMA9_VANPO/888-1209:0.585,
+(
+A5E477_LODEL/107-430:0.198,
+(
+C5MCT9_CANTT/554-879:0.140,
+(
+B9WGS3_CANDC/555-882:0.017,
+(
+Q5A1B6_CANAL/296-623:-0.004,
+C4YGL4_CANAL/554-881:0.007)
+0:0.024)
+0:0.110)
+0:0.054)
+0:0.171)
+0:0.164)
+0:0.019,
+(
+(
+(
+C4JIN7_UNCRE/692-1007:0.159,
+C5P8C9_COCP7/682-993:0.127)
+0:0.107,
+C5FBF4_NANOT/570-628:0.223)
+0:0.122,
+(
+B2VW51_PYRTR/606-910:0.169,
+Q0UNU9_PHANO/666-973:0.147)
+0:0.170)
+0:0.099)
+0:0.149)
+0:0.014,
+(
+D0MT95_PHYIN/497-796:0.122,
+(
+D0MT54_PHYIN/891-1191:0.100,
+D0MT94_PHYIN/524-824:0.085)
+0:0.052)
+0:0.357)
+0:0.019,
+(
+(
+(
+(
+(
+Q4PLA9_PICGL/597-913:0.211,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+A5BG74_VITVI/577-717:0.292,
+Q3E984_ARATH/528-708:0.216)
+0:0.083,
+Q2LFC2_NICBE/565-873:0.027)
+0:0.015,
+Q2LFC1_NICBE/558-866:0.051)
+0:0.024,
+B9SP45_RICCO/574-882:0.047)
+0:0.016,
+B9HK80_POPTR/565-884:0.083)
+0:0.024,
+(
+(
+(
+(
+AGO4A_ORYSJ/557-865:0.000,
+B8ACN1_ORYSI/524-832:-0.000)
+0:0.000,
+A2ZRR6_ORYSJ/650-958:0.000)
+0:0.052,
+(
+C0HGZ0_MAIZE/552-859:0.015,
+B4FL08_MAIZE/45-352:0.015)
+0:0.043)
+0:0.031,
+(
+C5YX36_SORBI/564-870:0.054,
+(
+(
+B8AUX7_ORYSI/565-872:0.000,
+AGO4B_ORYSJ/565-872:-0.000)
+0:0.000,
+Q01MP5_ORYSA/565-872:0.000)
+0:0.036)
+0:0.050)
+0:0.021)
+0:0.022,
+Q9ZVD5_ARATH/577-885:0.130)
+0:0.013,
+(
+(
+Q56X15_ARATH/234-541:0.003,
+Q84VQ0_ARATH/546-853:0.000)
+0:0.003,
+Q84YI4_ARATH/550-857:0.004)
+0:0.128)
+0:0.023,
+(
+(
+A5AMR1_VITVI/53-183:0.079,
+(
+B9HDH5_POPTR/582-891:0.015,
+B9IHG7_POPTR/573-882:0.011)
+0:0.066)
+0:0.013,
+B9SN14_RICCO/570-878:0.098)
+0:0.071)
+0:0.020,
+(
+B9EV67_ORYSJ/22-172:0.006,
+(
+B8ACN0_ORYSI/540-670:-0.007,
+AGO15_ORYSJ/546-853:0.015)
+0:0.026)
+0:0.148)
+0:0.023,
+(
+(
+(
+(
+AGO16_ORYSJ/535-844:0.000,
+B8B4Z4_ORYSI/515-824:-0.000)
+0:0.000,
+B9FWI9_ORYSJ/515-824:0.000)
+0:0.077,
+(
+C0P9X1_MAIZE/1-253:0.019,
+C5YU43_SORBI/1-285:-0.014)
+0:0.015)
+0:0.109,
+(
+O48771_ARATH/542-860:0.153,
+(
+B9T7B0_RICCO/516-824:0.101,
+(
+B9IAL0_POPTR/521-830:0.057,
+A5CB61_VITVI/15-305:0.059)
+0:0.023)
+0:0.050)
+0:0.027)
+0:0.040)
+0:0.041)
+0:0.217,
+(
+(
+(
+(
+A9SKW0_PHYPA/518-721:0.580,
+A9RNH7_PHYPA/593-893:0.039)
+0:0.043,
+A9U2A5_PHYPA/597-903:0.056)
+0:0.033,
+A9SRY5_PHYPA/573-879:0.143)
+0:0.137,
+(
+A9SKW0_PHYPA/722-774:0.282,
+A9TD99_PHYPA/2-180:0.089)
+0:0.135)
+0:0.175)
+0:0.049,
+A9T108_PHYPA/1-169:0.287)
+0:0.029,
+(
+C1DZY0_9CHLO/572-888:0.408,
+(
+O61931_CAEEL/762-1081:0.313,
+(
+(
+A8WPC9_CAEBR/828-1145:0.109,
+A8XN44_CAEBR/716-1005:0.075)
+0:0.063,
+(
+A8XRY5_CAEBR/161-269:0.076,
+(
+A8XS10_CAEBR/818-1134:0.097,
+A8XP19_CAEBR/721-1037:0.105)
+0:0.033)
+0:0.035)
+0:0.144)
+0:0.648)
+0:0.050)
+0:0.046,
+(
+A8PVW7_BRUMA/492-800:0.393,
+(
+B6VBQ1_CAEBE/1034-1381:0.270,
+(
+(
+A8XVL1_CAEBR/571-952:0.248,
+Q9XU82_CAEEL/618-985:0.224)
+0:0.055,
+O46002_CAEEL/57-176:0.140)
+0:0.034)
+0:0.453)
+0:0.176)
+0:0.013)
+0:0.030,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+B8BT49_THAPS/780-963:0.120,
+C7SYH3_THAPS/780-1048:0.006)
+0:0.618,
+B5DIM9_DROPS/1-71:-0.281)
+0:0.177,
+B4G6N2_DROPE/1-37:-0.177)
+0:0.173,
+B4G6N7_DROPE/19-133:0.073)
+0:0.067,
+(
+(
+(
+(
+B4NLX0_DROWI/695-993:0.100,
+B4N082_DROWI/579-877:0.073)
+0:0.009,
+(
+(
+(
+(
+B3NI38_DROER/838-1138:0.023,
+(
+(
+Q2Q3X0_9MUSC/506-806:0.003,
+(
+(
+(
+(
+(
+(
+Q2Q3X2_DROYA/506-806:0.000,
+Q2Q3X7_DROYA/506-806:-0.000)
+0:0.000,
+Q2Q3X4_DROYA/506-806:0.000)
+0:0.000,
+B4PCH3_DROYA/843-1143:0.000)
+0:0.000,
+Q2Q3X6_DROYA/506-806:0.000)
+0:0.000,
+Q2Q3X8_DROYA/506-806:0.000)
+0:0.000,
+B4IU14_DROYA/810-1110:0.000)
+0:0.004)
+0:0.009,
+Q2Q3X1_DROTE/424-724:-0.002)
+0:0.017)
+0:0.058,
+B3M505_DROAN/688-988:0.063)
+0:0.026,
+(
+(
+(
+(
+(
+(
+B4GTA7_DROPE/448-747:-0.026,
+(
+B4GTA5_DROPE/448-747:-0.052,
+(
+B4ISF4_DROPE/14-227:0.036,
+B5DKZ0_DROPS/2-120:0.061)
+0:0.095)
+0:0.029)
+0:0.014,
+B4HDJ4_DROPE/40-339:-0.012)
+0:0.017,
+B5DT30_DROPS/694-993:-0.005)
+0:0.021,
+B4GTA6_DROPE/448-736:-0.008)
+0:0.048,
+(
+(
+B5DWW4_DROPS/3-186:0.198,
+(
+B5DY62_DROPS/643-942:0.005,
+B4GFG0_DROPE/449-748:0.002)
+0:0.018)
+0:0.022,
+(
+(
+B4GDQ8_DROPE/669-968:-0.040,
+(
+(
+B5DYR9_DROPS/651-950:-0.133,
+B5DU45_DROPS/389-589:0.226)
+0:0.081,
+B5DYR8_DROPS/41-340:-0.084)
+0:0.070)
+0:0.020,
+B4GDQ6_DROPE/661-960:-0.020)
+0:0.076)
+0:0.012)
+0:0.021,
+(
+B4GUA7_DROPE/624-923:0.010,
+B5DQH3_DROPS/471-770:0.004)
+0:0.056)
+0:0.014)
+0:0.017,
+(
+(
+C7LAD2_DROME/888-1187:0.000,
+AGO2_DROME/885-1184:-0.000)
+0:0.031,
+(
+(
+(
+Q2Q3W2_DROSI/511-810:-0.066,
+(
+Q2Q3W9_DROSI/511-810:-0.124,
+B4NVX8_DROSI/80-259:0.135)
+0:0.068)
+0:0.033,
+Q2Q3W7_DROSI/511-810:-0.033)
+0:0.046,
+B4HIG2_DROSE/1-224:0.059)
+0:0.028)
+0:0.046)
+0:0.026)
+0:0.019,
+(
+(
+B4IWV1_DROGR/788-1091:0.105,
+(
+B4LH85_DROVI/152-457:0.085,
+B4KUJ5_DROMO/715-1017:0.064)
+0:0.029)
+0:0.024,
+(
+(
+B5DIM7_DROPS/517-815:-0.070,
+B4H1E3_DROPE/6-68:0.367)
+0:0.039,
+B4G6N0_DROPE/517-815:-0.004)
+0:0.178)
+0:0.010)
+0:0.110,
+B4QL34_DROSI/606-729:0.064)
+0:0.035)
+0:0.141,
+Q59HV7_BOMMO/706-1006:0.453)
+0:0.077,
+(
+B0X641_CULQU/527-832:0.339,
+(
+B0LJQ7_CULTA/1-148:0.026,
+(
+(
+B0WRW8_CULQU/638-943:0.162,
+(
+C5J0H4_AEDAE/655-961:0.116,
+B0LJQ8_AEDTR/1-254:0.017)
+0:0.016)
+0:0.072,
+Q5TVL2_ANOGA/535-839:0.165)
+0:0.043)
+0:0.023)
+0:0.147)
+0:0.093,
+C4WWR5_ACYPI/1-266:0.278)
+0:0.113,
+(
+(
+Q0DZJ0_ORYSJ/35-101:-0.081,
+B9IL53_POPTR/1-160:0.081)
+0:0.334,
+(
+A5BG29_VITVI/774-895:0.038,
+(
+(
+(
+(
+A5BW27_VITVI/926-1238:0.081,
+(
+B9S921_RICCO/670-981:0.043,
+B9HXP0_POPTR/520-831:0.038)
+0:0.011)
+0:0.004,
+D3GBV1_LOTJA/669-981:0.099)
+0:0.039,
+(
+(
+(
+A3AJI1_ORYSJ/584-892:0.000,
+AGO7_ORYSJ/709-1017:-0.000)
+0:0.000,
+A2YQ96_ORYSI/716-1024:0.000)
+0:0.053,
+(
+D0EYF3_MAIZE/683-995:0.024,
+C5WVP1_SORBI/688-996:0.012)
+0:0.061)
+0:0.102)
+0:0.025,
+Q9C793_ARATH/649-950:0.124)
+0:0.034)
+0:0.043)
+0:0.123)
+0:0.017)
+0:0.008,
+B9ZU55_9TURB/580-893:0.539)
+0:0.016,
+(
+B3SEP3_TRIAD/438-734:0.314,
+(
+Q5DFJ9_SCHJA/2-164:-0.003,
+(
+(
+C4QPD2_SCHMA/595-831:0.155,
+C4QPD1_SCHMA/595-896:-0.108)
+0:0.158,
+(
+Q5DCI0_SCHJA/265-566:0.039,
+C4QPD0_SCHMA/628-928:0.023)
+0:0.053)
+0:0.109)
+0:0.247)
+0:0.039)
+0:0.014,
+(
+(
+(
+A8JAG8_CHLRE/672-990:0.094,
+A8J9T3_CHLRE/1058-1164:0.001)
+0:0.225,
+(
+A8J0N0_CHLRE/619-933:0.032,
+A8J0M9_CHLRE/675-993:0.060)
+0:0.536)
+0:0.132,
+(
+Q8H714_PHYIN/1-173:-0.079,
+(
+D0N1C0_PHYIN/587-890:0.010,
+D0N1B9_PHYIN/587-890:0.013)
+0:0.068)
+0:0.259)
+0:0.033)
+0:0.008,
+(
+(
+(
+(
+(
+B8PBB9_POSPM/331-616:0.020,
+(
+B8PFP7_POSPM/371-656:-0.000,
+B8PN24_POSPM/140-415:0.007)
+0:0.024)
+0:0.954,
+(
+A2DXK9_TRIVA/462-624:0.401,
+A1D5I6_NEOFI/71-143:-0.401)
+0:1.051)
+0:0.296,
+(
+(
+Q10P03_ORYSJ/678-756:0.000,
+B9F6T7_ORYSJ/653-731:-0.000)
+0:0.000,
+B8AK97_ORYSI/622-700:0.000)
+0:0.728)
+0:0.117,
+(
+C5X8G7_SORBI/41-220:0.221,
+C5WR49_SORBI/670-825:0.115)
+0:0.247)
+0:0.072,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+AGO1_ARATH/676-997:0.000,
+Q3ECU7_ARATH/678-999:-0.000)
+0:0.041,
+(
+(
+(
+(
+A1E5M2_PEA/696-1017:0.021,
+A1E5M3_PEA/726-1047:0.014)
+0:0.011,
+Q2LFC4_NICBE/678-999:0.023)
+0:0.005,
+(
+B9SJV6_RICCO/687-1008:0.018,
+(
+B9I4Y6_POPTR/688-1009:0.003,
+B9N365_POPTR/308-629:0.003)
+0:0.013)
+0:0.005)
+0:0.008,
+(
+(
+(
+B8AGF0_ORYSI/693-1014:0.000,
+B9F1L3_ORYSJ/693-1014:-0.000)
+0:0.000,
+AGO1A_ORYSJ/709-1030:0.000)
+0:0.018,
+(
+(
+C5YE15_SORBI/712-1033:0.001,
+C0HEU9_MAIZE/87-408:0.002)
+0:0.003,
+(
+(
+B9FC11_ORYSJ/374-695:0.000,
+AGO1B_ORYSJ/746-1067:-0.000)
+0:0.000,
+B8AT34_ORYSI/729-1050:0.000)
+0:0.004)
+0:0.010)
+0:0.016)
+0:0.006)
+0:0.008,
+(
+Q2LFC3_NICBE/604-925:0.036,
+B1B5A8_DAUCA/736-1057:0.042)
+0:0.015)
+0:0.009,
+(
+A9T6J3_PHYPA/524-842:0.045,
+(
+A9RG03_PHYPA/598-919:0.014,
+A9RTW5_PHYPA/744-1065:0.011)
+0:0.032)
+0:0.020)
+0:0.010,
+(
+(
+(
+(
+PINH_ARATH/625-946:0.006,
+(
+B0FHH7_BRANA/614-935:0.015,
+B9RTJ1_RICCO/626-947:0.010)
+0:0.007)
+0:0.006,
+(
+B9HKB5_POPTR/631-952:0.003,
+B9HUQ6_POPTR/452-776:0.006)
+0:0.009)
+0:0.027,
+(
+(
+(
+PNH1_ORYSJ/620-941:0.000,
+B9FU05_ORYSJ/458-779:-0.000)
+0:0.010,
+C5Z5J6_SORBI/617-938:0.002)
+0:0.014,
+C0PNQ0_MAIZE/1-267:-0.005)
+0:0.017)
+0:0.006,
+(
+B9STN2_RICCO/586-907:0.046,
+A5ARQ9_VITVI/592-892:0.081)
+0:0.017)
+0:0.030)
+0:0.006,
+(
+(
+C5YY05_SORBI/736-1058:0.021,
+B4FGY3_MAIZE/13-335:0.031)
+0:0.029,
+C7J0V9_ORYSJ/1-271:0.008)
+0:0.009)
+0:0.010,
+Q2PEW1_TRIPR/1-247:0.023)
+0:0.006,
+(
+(
+(
+(
+B8B2X0_ORYSI/647-968:0.000,
+AGO1D_ORYSJ/669-990:-0.000)
+0:0.000,
+B9FR04_ORYSJ/644-965:0.000)
+0:0.016,
+C5Z2L1_SORBI/643-964:0.022)
+0:0.025,
+(
+C5XWS2_SORBI/656-978:0.020,
+(
+B8AFI6_ORYSI/637-958:0.001,
+AGO1C_ORYSJ/638-959:0.002)
+0:0.015)
+0:0.012)
+0:0.058)
+0:0.066,
+(
+(
+(
+AGO17_ORYSJ/514-834:0.000,
+B8AII3_ORYSI/514-834:-0.000)
+0:0.359,
+(
+B8AFF9_ORYSI/534-832:-0.074,
+(
+B9F134_ORYSJ/36-347:-0.148,
+Q0DZI9_ORYSJ/36-107:0.202)
+0:0.159)
+0:0.357)
+0:0.051,
+(
+(
+(
+B9FX53_ORYSJ/672-981:0.000,
+AGO18_ORYSJ/747-1056:-0.000)
+0:0.008,
+B8B5Y3_ORYSI/745-1054:0.008)
+0:0.141,
+(
+C5X8G4_SORBI/699-1002:0.044,
+(
+C0PDS4_MAIZE/580-888:-0.147,
+(
+C5WR49_SORBI/585-661:0.109,
+B7ZXH7_MAIZE/580-736:0.101)
+0:0.160)
+0:0.445)
+0:0.086)
+0:0.124)
+0:0.065)
+0:0.007,
+(
+(
+(
+(
+C5WPM0_SORBI/900-1216:0.080,
+(
+(
+AGO12_ORYSJ/693-1012:0.000,
+B9FAL8_ORYSJ/438-757:-0.000)
+0:0.018,
+A2XKQ7_ORYSI/654-972:-0.005)
+0:0.104)
+0:0.021,
+(
+(
+C5WPM1_SORBI/697-1047:0.048,
+C0PMV6_MAIZE/89-412:0.030)
+0:0.023,
+(
+(
+B8APJ4_ORYSI/9-101:0.149,
+AGO11_ORYSJ/541-848:-0.016)
+0:0.045,
+B9FEW4_ORYSJ/531-767:0.026)
+0:0.084)
+0:0.017)
+0:0.051,
+(
+(
+B9MTL4_POPTR/505-810:0.103,
+(
+(
+B9SCN8_RICCO/632-949:0.096,
+(
+B9HQS2_POPTR/635-955:0.049,
+B9GEQ1_POPTR/548-869:0.044)
+0:0.027)
+0:0.015,
+AGOL_ARATH/638-958:0.122)
+0:0.014)
+0:0.020,
+(
+(
+(
+(
+(
+B8ALC4_ORYSI/596-877:0.026,
+(
+AGO13_ORYSJ/471-770:0.045,
+B9F6E0_ORYSJ/564-783:-0.045)
+0:0.010)
+0:0.059,
+(
+(
+MEL1_ORYSJ/696-1016:0.000,
+B8ALC8_ORYSI/696-1016:-0.000)
+0:0.000,
+A3ANP6_ORYSJ/644-982:0.003)
+0:0.014)
+0:0.020,
+C5WX38_SORBI/703-1025:0.043)
+0:0.046,
+(
+(
+B7ZZW2_MAIZE/663-969:-0.033,
+(
+C5XBU2_SORBI/675-995:-0.139,
+C5X6M9_SORBI/1-69:0.495)
+0:0.103)
+0:0.015,
+(
+Q7FS89_MAIZE/11-170:0.008,
+Q8S478_MAIZE/38-188:0.005)
+0:0.038)
+0:0.123)
+0:0.038,
+Q0DZI9_ORYSJ/119-248:0.454)
+0:0.012)
+0:0.023)
+0:0.021,
+(
+(
+B9FVX3_ORYSJ/462-794:-0.002,
+B8B7Y0_ORYSI/653-985:0.006)
+0:0.001,
+AGO14_ORYSJ/677-1009:-0.001)
+0:0.214)
+0:0.020)
+0:0.051)
+0:0.069)
+0:0.021,
+(
+(
+(
+(
+B8PJA4_POSPM/353-665:0.386,
+(
+B0DLH7_LACBS/515-821:0.342,
+A8NFX0_COPC7/514-795:0.390)
+0:0.061)
+0:0.104,
+(
+A8NFX5_COPC7/531-721:0.422,
+Q70IH5_ARAHA/1-61:-0.422)
+0:0.447)
+0:0.099,
+(
+A8NXQ6_COPC7/547-849:0.333,
+(
+(
+(
+(
+A8P6A7_COPC7/477-803:0.346,
+B0CXE0_LACBS/567-880:0.201)
+0:0.038,
+A8PFQ6_COPC7/458-767:0.269)
+0:0.018,
+B0CYG1_LACBS/553-863:0.191)
+0:0.010,
+B0D2D0_LACBS/417-738:0.213)
+0:0.045)
+0:0.082)
+0:0.024,
+A8PFS7_COPC7/454-749:0.488)
+0:0.151)
+0:0.015,
+(
+(
+(
+B2RFN0_OIKDI/550-850:0.618,
+(
+C5K8K7_9ALVE/727-977:0.759,
+(
+(
+(
+(
+(
+B9Q8Q1_TOXGO/379-692:-0.000,
+(
+B9PJN3_TOXGO/379-693:0.000,
+Q1L2C8_TOXGO/379-693:-0.000)
+0:0.000)
+0:0.000,
+Q1L1E2_TOXGO/161-474:-0.000)
+0:0.000,
+B6KA84_TOXGO/379-692:-0.000)
+0:0.000,
+Q1L2C9_TOXGO/379-692:-0.000)
+0:0.000,
+D2JRZ7_TOXGO/582-895:-0.000)
+0:0.847)
+0:0.197)
+0:0.087,
+(
+(
+A8NJ50_BRUMA/1-61:-0.011,
+(
+TAG76_CAEEL/660-966:0.009,
+(
+A8XA10_CAEBR/683-989:0.005,
+(
+Q7JLZ2_CAEEL/652-958:0.000,
+Q21079_CAEEL/655-961:-0.000)
+0:0.005)
+0:0.005)
+0:0.198)
+0:0.018,
+A8NGN0_BRUMA/1-135:-0.003)
+0:0.191)
+0:0.025,
+(
+B7QBT5_IXOSC/313-623:0.341,
+(
+B7Q990_IXOSC/474-787:0.305,
+(
+B7Q811_IXOSC/611-920:0.183,
+B7P230_IXOSC/468-776:0.185)
+0:0.081)
+0:0.041)
+0:0.053)
+0:0.013)
+0:0.054,
+(
+A7SCI6_NEMVE/496-743:0.303,
+Q5DG80_SCHJA/3-99:0.100)
+0:0.208)
+0:0.032,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+Q27IQ2_DROSI/554-851:0.000,
+Q27IR0_DROME/554-851:-0.000)
+0:0.000,
+Q960T1_DROME/258-560:-0.000)
+0:0.000,
+Q32KD4_DROME/641-943:-0.000)
+0:0.000,
+B3MHG1_DROAN/641-943:-0.000)
+0:0.000,
+Q28ZU1_DROPS/642-944:-0.000)
+0:0.000,
+B4GGS7_DROPE/642-944:-0.000)
+0:0.000,
+B4INL3_DROSE/624-926:-0.000)
+0:0.000,
+B3NRF4_DROER/624-926:-0.000)
+0:0.000,
+Q7KY08_DROME/607-909:-0.000)
+0:0.000,
+B4JW20_DROGR/647-949:-0.000)
+0:0.000,
+B4P449_DROYA/624-926:-0.000)
+0:0.000,
+Q8T059_DROME/81-383:0.003)
+0:0.001,
+(
+(
+B4LJF3_DROVI/646-948:0.000,
+B4KTB5_DROMO/643-945:-0.000)
+0:0.000,
+B4N5V9_DROWI/642-944:0.006)
+0:0.002)
+0:0.014,
+(
+(
+(
+B0WFU8_CULQU/621-923:0.000,
+Q7PZ41_ANOGA/638-940:-0.000)
+0:0.000,
+Q16EE2_AEDAE/482-784:0.000)
+0:0.000,
+Q16M62_AEDAE/604-906:0.000)
+0:0.008)
+0:0.007,
+A7BJS5_BOMMO/569-871:0.033)
+0:0.018,
+(
+(
+(
+(
+(
+A9NJ58_PENMO/569-898:-0.001,
+(
+Q071E1_PENMO/569-898:0.007,
+A7XZ43_PENMO/569-898:0.002)
+0:0.001)
+0:0.001,
+D2XYX4_PENJP/572-901:-0.001)
+0:0.000,
+A9NJ57_PENMO/572-901:-0.000)
+0:0.000,
+D2DK65_PENJP/572-901:-0.000)
+0:0.000,
+D2DK66_PENJP/569-898:-0.000)
+0:0.056)
+0:0.016,
+B7QCC4_IXOSC/509-810:0.034)
+0:0.025,
+(
+(
+(
+(
+C3ZN91_BRAFL/470-771:0.011,
+C3ZQ22_BRAFL/680-848:0.025)
+0:0.037,
+D2XMQ5_SACKO/1-219:0.054)
+0:0.009,
+(
+(
+(
+A8WKF9_CAEBR/562-864:0.121,
+(
+(
+Q86B39_CAEEL/547-848:0.000,
+O16720_CAEEL/566-867:-0.000)
+0:0.029,
+(
+(
+(
+(
+(
+B2L7Q3_CAERE/1-268:0.001,
+B2L7P9_CAERE/1-269:-0.001)
+0:0.010,
+A8X4Z3_CAEBR/691-992:-0.010)
+0:0.008,
+Q3LTR7_CAEEL/668-969:-0.005)
+0:0.002,
+Q20578_CAEEL/660-961:-0.002)
+0:0.001,
+B6VQ75_CAEEL/681-982:-0.001)
+0:0.019)
+0:0.019)
+0:0.016,
+A8P168_BRUMA/623-925:0.054)
+0:0.064,
+(
+C4Q6D1_SCHMA/608-835:0.014,
+Q5C3Y0_SCHJA/4-157:-0.008)
+0:0.078)
+0:0.007)
+0:0.013,
+(
+Q8CGT7_MOUSE/576-634:0.023,
+A7RQ46_NEMVE/511-812:0.136)
+0:0.013)
+0:0.003)
+0:0.008,
+(
+(
+(
+(
+D2HF39_AILME/511-813:0.002,
+(
+(
+(
+(
+(
+(
+(
+(
+A1A563_MOUSE/517-819:-0.015,
+(
+(
+(
+Q8CGT9_MOUSE/501-743:-0.076,
+Q8CGT7_MOUSE/455-570:0.263)
+0:0.058,
+Q6P239_MOUSE/277-579:-0.054)
+0:0.025,
+AGO2_BOVIN/517-819:-0.023)
+0:0.016)
+0:0.008,
+AGO2_RABIT/497-799:-0.008)
+0:0.004,
+B0JYP5_BOVIN/517-819:-0.004)
+0:0.002,
+Q6PHA2_MOUSE/94-396:-0.002)
+0:0.001,
+AGO2_HUMAN/516-818:-0.001)
+0:0.001,
+A4FVC0_HUMAN/465-767:-0.001)
+0:0.000,
+Q8R3Q7_MOUSE/187-489:-0.000)
+0:0.000,
+AGO2_MOUSE/517-819:-0.000)
+0:0.002)
+0:0.001,
+AGO2_RAT/517-819:0.002)
+0:0.001,
+(
+(
+AGO2_XENLA/519-821:0.000,
+C0IN02_XENLA/519-821:-0.000)
+0:0.000,
+AGO2_XENTR/528-830:0.000)
+0:0.009)
+0:0.016,
+(
+Q4RKH3_TETNG/508-822:-0.002,
+(
+C9V4A2_CTEID/306-581:0.009,
+B0F0Y5_9TELE/526-828:-0.009)
+0:0.009)
+0:0.028)
+0:0.043)
+0:0.011,
+(
+(
+B3VCG6_STRPU/599-900:0.106,
+(
+(
+Q4SXU1_TETNG/1-206:0.163,
+Q4TF92_TETNG/239-305:-0.046)
+0:0.028,
+Q4TBP2_TETNG/868-934:-0.028)
+0:0.020)
+0:0.011,
+(
+B2RFN1_OIKDI/771-1072:0.057,
+C8TEF3_OIKDI/573-874:0.118)
+0:0.031)
+0:0.006)
+0:0.015,
+(
+(
+(
+D4AC38_RAT/515-816:0.003,
+(
+(
+(
+(
+(
+(
+(
+(
+Q8BJP2_MOUSE/364-665:-0.000,
+(
+B3KME0_HUMAN/440-741:0.010,
+AGO1_MOUSE/515-816:0.003)
+0:0.000)
+0:0.000,
+A2VDG1_MOUSE/513-814:-0.000)
+0:0.000,
+D2H607_AILME/507-808:-0.000)
+0:0.000,
+B2RAD8_HUMAN/515-816:-0.000)
+0:0.000,
+Q5TA58_HUMAN/440-741:-0.000)
+0:0.000,
+A1L365_MOUSE/515-816:-0.000)
+0:0.000,
+AGO1_HUMAN/515-816:-0.000)
+0:0.000,
+Q8CGU0_MOUSE/527-843:0.010)
+0:0.001)
+0:0.002,
+Q4S7L5_TETNG/517-818:0.004)
+0:0.046,
+(
+AGO3_DANRE/518-819:0.022,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+A3KFX7_MOUSE/1-109:0.060,
+Q7M738_MOUSE/426-707:-0.050)
+0:0.031,
+AGO3_BOVIN/518-820:-0.020)
+0:0.017,
+(
+A3KFX6_MOUSE/1-140:-0.036,
+(
+Q4TBP2_TETNG/578-853:-0.008,
+Q4TF92_TETNG/161-225:0.142)
+0:0.047)
+0:0.021)
+0:0.005,
+Q3TBP7_MOUSE/518-819:-0.014)
+0:0.007,
+AGO3_MOUSE/518-819:-0.007)
+0:0.005,
+AGO3_CHICK/518-819:0.000)
+0:0.002,
+D2H606_AILME/513-814:-0.001)
+0:0.001,
+AGO3_HUMAN/518-819:-0.001)
+0:0.000,
+B4DY67_HUMAN/154-455:-0.000)
+0:0.000,
+B1ALI0_HUMAN/284-585:-0.000)
+0:0.000,
+A8KA05_HUMAN/518-819:-0.000)
+0:0.000,
+B4E1P5_HUMAN/346-647:-0.000)
+0:0.005)
+0:0.024)
+0:0.029)
+0:0.015,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+A9QW17_TRICA/69-158:0.046,
+Q4S7L6_TETNG/228-304:0.121)
+0:0.117,
+D4A2P5_RAT/513-742:-0.022)
+0:0.037,
+Q8CGT8_MOUSE/660-885:0.004)
+0:0.064,
+AGO4_MOUSE/509-820:-0.084)
+0:0.025,
+Q8BTF2_MOUSE/35-346:-0.025)
+0:0.026,
+A7MD27_HUMAN/509-820:-0.006)
+0:0.003,
+AGO4_CHICK/442-753:0.000)
+0:0.003,
+(
+(
+(
+Q4R7V5_MACFA/1-211:0.019,
+AGO4_HUMAN/509-820:-0.014)
+0:0.007,
+D2H608_AILME/505-816:-0.007)
+0:0.003,
+Q9NXV9_HUMAN/35-346:-0.003)
+0:0.003)
+0:0.003,
+AGO4_XENLA/532-843:0.009)
+0:0.012,
+Q4SVE6_TETNG/553-864:0.020)
+0:0.010,
+Q8CGT8_MOUSE/1000-1102:0.024)
+0:0.036)
+0:0.037)
+0:0.013,
+D4A2P5_RAT/843-954:-0.039)
+0:0.241)
+;
diff --git a/test/scripts/automated/belvu/test17 b/test/scripts/automated/belvu/test17
new file mode 100755
index 0000000..fdf68c5
--- /dev/null
+++ b/test/scripts/automated/belvu/test17
@@ -0,0 +1,26 @@
+#!/bin/ksh
+#
+# Description:
+#   Create the tree using the Storm and Sonnhammer distance
+#   correction and save the tree in new-hampshire format
+#   (large alignment)
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences to the saved results
+diffs=`belvu -T s -o tree $data_dir/PF02171_full.selex >&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
+
diff --git a/test/scripts/automated/belvu/test17_results b/test/scripts/automated/belvu/test17_results
new file mode 100644
index 0000000..21805b9
--- /dev/null
+++ b/test/scripts/automated/belvu/test17_results
@@ -0,0 +1,2524 @@
+(
+(
+Q0U676_PHANO/647-830:0.646,
+A9QW19_TRICA/79-190:0.272)
+0:0.357,
+(
+(
+(
+(
+(
+B2WJ98_PYRTR/213-541:0.553,
+(
+(
+(
+(
+(
+Q0TWJ6_PHANO/160-297:0.727,
+Q2HHM4_CHAGB/694-1033:0.500)
+0:0.110,
+(
+B2VW51_PYRTR/606-910:0.168,
+Q0UNU9_PHANO/666-973:0.144)
+0:0.164)
+0:0.026,
+(
+(
+D0U264_CRYPA/482-802:0.402,
+(
+(
+(
+(
+D1ZJ09_SORMA/711-1030:0.068,
+(
+Q1K6I6_NEUCR/733-1052:0.000,
+Q9P8T1_NEUCR/582-901:-0.000)
+0:0.077)
+0:0.138,
+(
+B2AR52_PODAN/574-886:0.188,
+Q2GSQ8_CHAGB/651-969:0.179)
+0:0.028)
+0:0.076,
+(
+C9ST09_VERA1/571-888:0.196,
+C7YM23_NECH7/666-978:0.225)
+0:0.077)
+0:0.020,
+A4RL50_MAGGR/721-1039:0.281)
+0:0.065)
+0:0.086,
+(
+(
+(
+(
+(
+A4R6J1_MAGGR/641-908:0.457,
+(
+(
+(
+(
+(
+(
+(
+C6H5C6_AJECH/26-168:0.032,
+A6RDB0_AJECN/9-157:0.134)
+0:0.139,
+(
+C5JDT9_AJEDS/580-664:0.000,
+C5GX22_AJEDR/580-664:-0.000)
+0:0.533)
+0:0.141,
+B8MGF3_TALSN/2-137:0.348)
+0:0.261,
+A6QW60_AJECN/639-963:-0.224)
+0:0.142,
+B6QWK7_PENMQ/644-968:-0.098)
+0:0.116,
+B2WES9_PYRTR/643-967:-0.011)
+0:0.215,
+(
+B8N7A8_ASPFN/617-954:0.002,
+Q2UBS9_ASPOR/578-915:0.001)
+0:0.343)
+0:0.067)
+0:0.014,
+(
+D0U265_CRYPA/712-1038:0.277,
+D0U266_CRYPA/635-957:0.420)
+0:0.031)
+0:0.010,
+(
+Q96UM0_BLUGR/565-886:0.195,
+(
+A7E4W2_SCLS1/692-1008:0.049,
+A6RK26_BOTFB/654-970:0.063)
+0:0.135)
+0:0.125)
+0:0.012,
+(
+(
+B8MQK8_TALSN/682-995:0.069,
+B6QUK3_PENMQ/689-1001:0.108)
+0:0.167,
+(
+(
+(
+(
+(
+(
+(
+(
+C5GYE6_AJEDR/653-980:-0.078,
+C5K303_AJEDS/770-890:0.264)
+0:0.086,
+C1GSN8_PARBA/1-191:0.507)
+0:0.054,
+C0S8I9_PARBP/1049-1137:0.258)
+0:0.147,
+(
+(
+D4ANV6_ARTBE/642-958:0.000,
+D4CZ86_TRIVC/642-958:-0.000)
+0:0.058,
+C5FGF6_NANOT/649-965:0.065)
+0:0.129)
+0:0.029,
+(
+(
+C5JDT9_AJEDS/671-859:0.012,
+C5GX22_AJEDR/671-859:-0.007)
+0:0.081,
+(
+(
+(
+C1G7F3_PARBD/674-979:0.007,
+C0RZ18_PARBP/688-993:-0.004)
+0:0.017,
+C1GXU8_PARBA/683-1002:0.009)
+0:0.063,
+(
+C0NMG7_AJECG/678-986:-0.012,
+(
+C6H291_AJECH/678-997:0.003,
+A6RB60_AJECN/291-610:0.009)
+0:0.017)
+0:0.053)
+0:0.055)
+0:0.048)
+0:0.017,
+(
+C5PJP0_COCP7/663-977:0.129,
+C4JG78_UNCRE/651-963:0.078)
+0:0.121)
+0:0.019,
+(
+B6H0X0_PENCW/641-959:0.242,
+(
+(
+(
+A1C469_ASPCL/690-1008:0.062,
+(
+A1DBD4_NEOFI/680-998:0.014,
+(
+B0Y9U0_ASPFC/686-1004:0.000,
+Q4WC92_ASPFU/686-1004:-0.000)
+0:0.024)
+0:0.020)
+0:0.101,
+(
+(
+(
+C8VMQ3_EMENI/660-979:0.000,
+Q5BD61_EMENI/660-979:-0.000)
+0:0.157,
+A2R8K3_ASPNC/710-1028:0.144)
+0:0.022,
+Q0CNH1_ASPTN/643-961:0.101)
+0:0.015)
+0:0.009,
+(
+B8MXT2_ASPFN/684-1002:0.000,
+Q2US02_ASPOR/573-891:-0.000)
+0:0.139)
+0:0.061)
+0:0.039)
+0:0.027,
+C7ZR18_NECH7/19-235:0.280)
+0:0.006)
+0:0.046)
+0:0.032,
+A2QG96_ASPNC/558-884:0.460)
+0:0.022)
+0:0.097)
+0:0.054,
+(
+(
+(
+(
+(
+(
+Q53W94_THET8/418-669:0.000,
+Q746M7_THET2/418-669:-0.000)
+0:0.338,
+Q4S7L6_TETNG/228-304:0.093)
+0:0.781,
+(
+B8PBB9_POSPM/331-616:0.021,
+(
+B8PFP7_POSPM/371-656:-0.000,
+B8PN24_POSPM/140-415:0.007)
+0:0.023)
+0:0.681)
+0:0.347,
+(
+(
+B0D488_LACBS/608-916:0.137,
+A8P0D4_COPC7/619-925:0.135)
+0:0.153,
+(
+A8P2K4_COPC7/589-903:0.086,
+B0E0C2_LACBS/610-916:0.179)
+0:0.218)
+0:0.087)
+0:0.136,
+(
+(
+(
+B6K0R2_SCHJY/507-805:0.177,
+AGO1_SCHPO/500-798:0.169)
+0:0.292,
+(
+(
+(
+(
+(
+(
+D0U267_CRYPA/639-939:0.264,
+A4QSM3_MAGGR/672-970:0.211)
+0:0.042,
+(
+(
+C7YHP8_NECH7/612-917:0.234,
+(
+C9SSA6_VERA1/19-91:0.136,
+C9SGB5_VERA1/589-897:0.000)
+0:0.190)
+0:0.030,
+(
+A6S388_BOTFB/557-866:0.075,
+A7F377_SCLS1/445-754:0.029)
+0:0.250)
+0:0.028)
+0:0.019,
+(
+Q8J276_NEUCR/628-929:0.104,
+D1ZPU0_SORMA/563-867:0.139)
+0:0.209)
+0:0.024,
+B2AKU3_PODAN/441-754:0.305)
+0:0.026,
+(
+(
+(
+B6Q5R7_PENMQ/547-853:0.090,
+B8M5N8_TALSN/546-852:0.112)
+0:0.211,
+(
+(
+(
+(
+(
+C8V9S4_EMENI/46-154:0.000,
+Q5B3I7_EMENI/46-154:-0.000)
+0:0.106,
+(
+(
+A1CKK4_ASPCL/543-849:0.049,
+A1D6W7_NEOFI/543-849:0.018)
+0:0.008,
+(
+B0XXP5_ASPFC/564-870:0.000,
+Q4WXX3_ASPFU/564-870:-0.000)
+0:0.005)
+0:0.068)
+0:0.008,
+(
+(
+Q2UKV9_ASPOR/543-849:0.000,
+B8N3T1_ASPFN/436-742:-0.000)
+0:0.109,
+Q0CNV7_ASPTN/543-854:0.109)
+0:0.007)
+0:0.036,
+A2QDC5_ASPNC/643-949:0.140)
+0:0.040,
+B6H4L5_PENCW/673-980:0.281)
+0:0.074)
+0:0.046,
+(
+(
+(
+C1G1H6_PARBD/510-817:0.017,
+C1GU57_PARBA/495-755:0.006)
+0:0.020,
+C0S3N8_PARBP/535-823:0.001)
+0:0.075,
+(
+(
+(
+C5G7J1_AJEDR/547-854:0.000,
+C5JJJ6_AJEDS/547-854:-0.000)
+0:0.034,
+(
+(
+C6HRE3_AJECH/547-854:0.000,
+C0NUS8_AJECG/547-854:-0.000)
+0:0.000,
+A6RGK9_AJECN/547-854:0.003)
+0:0.055)
+0:0.100,
+(
+(
+C5FDD8_NANOT/542-847:0.036,
+(
+D4AMR8_ARTBE/628-933:-0.014,
+D4DBM7_TRIVC/515-807:0.027)
+0:0.043)
+0:0.117,
+(
+C5P9D5_COCP7/668-975:0.077,
+C4JZ88_UNCRE/552-859:0.051)
+0:0.078)
+0:0.036)
+0:0.070)
+0:0.070)
+0:0.155)
+0:0.005,
+(
+Q0U7V7_PHANO/645-956:0.185,
+B2W8P0_PYRTR/611-920:0.101)
+0:0.311)
+0:0.270)
+0:0.068,
+(
+(
+(
+(
+C4V9J2_NOSCE/489-791:0.574,
+(
+(
+C7SYH3_THAPS/1070-1160:0.458,
+(
+C7SYH2_PHATR/826-1176:0.112,
+B7G499_PHATR/1-107:0.104)
+0:0.174)
+0:0.629,
+(
+Q5KAT1_CRYNE/560-859:0.130,
+Q5KAU3_CRYNE/580-879:0.199)
+0:0.253)
+0:0.107)
+0:0.069,
+(
+(
+(
+Q4PLA9_PICGL/597-913:0.209,
+(
+(
+(
+(
+(
+Q56X15_ARATH/234-541:0.003,
+Q84VQ0_ARATH/546-853:-0.000)
+0:0.003,
+Q84YI4_ARATH/550-857:0.003)
+0:0.128,
+(
+Q9ZVD5_ARATH/577-885:0.131,
+(
+(
+(
+(
+(
+AGO4A_ORYSJ/557-865:0.000,
+B8ACN1_ORYSI/524-832:-0.000)
+0:0.000,
+A2ZRR6_ORYSJ/650-958:0.000)
+0:0.051,
+(
+C0HGZ0_MAIZE/552-859:0.014,
+B4FL08_MAIZE/45-352:0.015)
+0:0.043)
+0:0.030,
+(
+C5YX36_SORBI/564-870:0.053,
+(
+(
+B8AUX7_ORYSI/565-872:0.000,
+AGO4B_ORYSJ/565-872:-0.000)
+0:0.000,
+Q01MP5_ORYSA/565-872:0.000)
+0:0.036)
+0:0.050)
+0:0.023,
+(
+B9HK80_POPTR/565-884:0.091,
+(
+B9SP45_RICCO/574-882:0.060,
+(
+Q2LFC1_NICBE/558-866:0.060,
+Q2LFC2_NICBE/565-873:0.051)
+0:0.029)
+0:0.011)
+0:0.021)
+0:0.021)
+0:0.012)
+0:0.016,
+(
+(
+A5AMR1_VITVI/53-183:0.093,
+(
+B9HDH5_POPTR/582-891:0.015,
+B9IHG7_POPTR/573-882:0.010)
+0:0.051)
+0:0.021,
+B9SN14_RICCO/570-878:0.088)
+0:0.071)
+0:0.015,
+(
+B9EV67_ORYSJ/22-172:0.010,
+(
+B8ACN0_ORYSI/540-670:0.013,
+AGO15_ORYSJ/546-853:-0.005)
+0:0.021)
+0:0.147)
+0:0.071)
+0:0.011,
+(
+(
+(
+(
+(
+(
+A5BG74_VITVI/577-717:0.351,
+Q3E984_ARATH/528-708:0.147)
+0:0.288,
+C0P9X1_MAIZE/1-253:-0.180)
+0:0.125,
+C5YU43_SORBI/1-285:-0.115)
+0:0.060,
+(
+(
+AGO16_ORYSJ/535-844:0.000,
+B8B4Z4_ORYSI/515-824:-0.000)
+0:0.000,
+B9FWI9_ORYSJ/515-824:0.000)
+0:0.027)
+0:0.108,
+(
+B9T7B0_RICCO/516-824:0.102,
+(
+B9IAL0_POPTR/521-830:0.058,
+A5CB61_VITVI/15-305:0.057)
+0:0.021)
+0:0.026)
+0:0.025,
+O48771_ARATH/542-860:0.153)
+0:0.119)
+0:0.192,
+(
+(
+(
+A9SKW0_PHYPA/518-721:0.669,
+A9TD99_PHYPA/2-180:-0.044)
+0:0.155,
+A9SRY5_PHYPA/573-879:0.127)
+0:0.283,
+(
+A9RNH7_PHYPA/593-893:0.051,
+(
+A9U2A5_PHYPA/597-903:-0.042,
+A9SKW0_PHYPA/722-774:0.419)
+0:0.070)
+0:0.282)
+0:0.050)
+0:0.083)
+0:0.016,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+Q27IQ2_DROSI/554-851:0.000,
+Q27IR0_DROME/554-851:-0.000)
+0:0.000,
+Q960T1_DROME/258-560:-0.000)
+0:0.000,
+Q32KD4_DROME/641-943:-0.000)
+0:0.000,
+B3MHG1_DROAN/641-943:-0.000)
+0:0.000,
+Q28ZU1_DROPS/642-944:-0.000)
+0:0.000,
+B4GGS7_DROPE/642-944:-0.000)
+0:0.000,
+B4INL3_DROSE/624-926:-0.000)
+0:0.000,
+B3NRF4_DROER/624-926:-0.000)
+0:0.000,
+Q7KY08_DROME/607-909:-0.000)
+0:0.000,
+B4JW20_DROGR/647-949:-0.000)
+0:0.000,
+B4P449_DROYA/624-926:-0.000)
+0:0.000,
+Q8T059_DROME/81-383:0.003)
+0:0.001,
+(
+(
+B4LJF3_DROVI/646-948:0.000,
+B4KTB5_DROMO/643-945:-0.000)
+0:0.000,
+B4N5V9_DROWI/642-944:0.006)
+0:0.002)
+0:0.014,
+(
+(
+(
+B0WFU8_CULQU/621-923:0.000,
+Q7PZ41_ANOGA/638-940:-0.000)
+0:0.000,
+Q16EE2_AEDAE/482-784:0.000)
+0:0.000,
+Q16M62_AEDAE/604-906:0.000)
+0:0.008)
+0:0.008,
+A7BJS5_BOMMO/569-871:0.031)
+0:0.018,
+(
+(
+(
+(
+(
+A9NJ58_PENMO/569-898:-0.001,
+(
+Q071E1_PENMO/569-898:0.007,
+A7XZ43_PENMO/569-898:0.002)
+0:0.001)
+0:0.001,
+D2XYX4_PENJP/572-901:-0.001)
+0:0.000,
+A9NJ57_PENMO/572-901:-0.000)
+0:0.000,
+D2DK65_PENJP/572-901:-0.000)
+0:0.000,
+D2DK66_PENJP/569-898:-0.000)
+0:0.054)
+0:0.010,
+B7QCC4_IXOSC/509-810:0.038)
+0:0.023,
+Q8CGT7_MOUSE/576-634:0.040)
+0:0.005,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+C5X6M9_SORBI/1-69:0.464,
+A9QW17_TRICA/69-158:0.254)
+0:0.413,
+D4A2P5_RAT/513-742:-0.049)
+0:0.066,
+Q8CGT8_MOUSE/660-885:-0.029)
+0:0.089,
+Q8CGT7_MOUSE/455-570:0.315)
+0:0.053,
+Q8CGT9_MOUSE/501-743:-0.109)
+0:0.089,
+Q6P239_MOUSE/277-579:-0.083)
+0:0.043,
+AGO2_BOVIN/517-819:-0.041)
+0:0.022,
+A1A563_MOUSE/517-819:-0.021)
+0:0.011,
+AGO2_RABIT/497-799:-0.011)
+0:0.006,
+B0JYP5_BOVIN/517-819:-0.006)
+0:0.003,
+Q6PHA2_MOUSE/94-396:-0.003)
+0:0.002,
+AGO2_HUMAN/516-818:-0.002)
+0:0.001,
+A4FVC0_HUMAN/465-767:-0.001)
+0:0.000,
+Q8R3Q7_MOUSE/187-489:-0.000)
+0:0.000,
+AGO2_MOUSE/517-819:-0.000)
+0:0.002,
+D2HF39_AILME/511-813:0.002)
+0:0.001,
+AGO2_RAT/517-819:0.002)
+0:0.002,
+(
+(
+AGO2_XENLA/519-821:0.000,
+C0IN02_XENLA/519-821:-0.000)
+0:0.000,
+AGO2_XENTR/528-830:0.000)
+0:0.008)
+0:0.015,
+(
+Q4RKH3_TETNG/508-822:-0.002,
+(
+C9V4A2_CTEID/306-581:0.009,
+B0F0Y5_9TELE/526-828:-0.009)
+0:0.009)
+0:0.028)
+0:0.032,
+(
+(
+(
+(
+D4AC38_RAT/515-816:0.003,
+(
+(
+(
+(
+(
+(
+Q8BJP2_MOUSE/364-665:-0.000,
+(
+B3KME0_HUMAN/440-741:0.010,
+AGO1_MOUSE/515-816:0.003)
+0:0.000)
+0:0.000,
+A2VDG1_MOUSE/513-814:-0.000)
+0:0.000,
+D2H607_AILME/507-808:-0.000)
+0:0.000,
+Q5TA58_HUMAN/440-741:-0.000)
+0:0.000,
+AGO1_HUMAN/515-816:-0.000)
+0:0.000,
+(
+(
+B2RAD8_HUMAN/515-816:-0.000,
+Q8CGU0_MOUSE/527-843:0.010)
+0:0.000,
+A1L365_MOUSE/515-816:-0.000)
+0:0.000)
+0:0.001)
+0:0.002,
+Q4S7L5_TETNG/517-818:0.004)
+0:0.047,
+(
+AGO3_DANRE/518-819:0.022,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+A3KFX7_MOUSE/1-109:0.071,
+(
+Q4TF92_TETNG/161-225:0.040,
+A7SCI6_NEMVE/496-743:0.333)
+0:0.122)
+0:0.038,
+Q4TBP2_TETNG/578-853:0.009)
+0:0.028,
+A3KFX6_MOUSE/1-140:-0.054)
+0:0.043,
+Q3TBP7_MOUSE/518-819:-0.018)
+0:0.010,
+AGO3_MOUSE/518-819:-0.010)
+0:0.004,
+Q7M738_MOUSE/426-707:0.006)
+0:0.003,
+AGO3_BOVIN/518-820:0.010)
+0:0.002,
+AGO3_CHICK/518-819:0.000)
+0:0.002,
+D2H606_AILME/513-814:-0.001)
+0:0.001,
+AGO3_HUMAN/518-819:-0.001)
+0:0.000,
+B4DY67_HUMAN/154-455:-0.000)
+0:0.000,
+B1ALI0_HUMAN/284-585:-0.000)
+0:0.000,
+A8KA05_HUMAN/518-819:-0.000)
+0:0.000,
+B4E1P5_HUMAN/346-647:-0.000)
+0:0.005)
+0:0.022)
+0:0.014,
+(
+(
+Q8CGT8_MOUSE/1000-1102:0.014,
+(
+(
+(
+(
+(
+(
+(
+Q4R7V5_MACFA/1-211:0.018,
+AGO4_HUMAN/509-820:-0.013)
+0:0.006,
+D2H608_AILME/505-816:-0.006)
+0:0.003,
+A7MD27_HUMAN/509-820:-0.003)
+0:0.002,
+AGO4_CHICK/442-753:0.002)
+0:0.001,
+Q9NXV9_HUMAN/35-346:-0.001)
+0:0.005,
+AGO4_XENLA/532-843:0.010)
+0:0.002,
+(
+AGO4_MOUSE/509-820:0.000,
+Q8BTF2_MOUSE/35-346:-0.000)
+0:0.018)
+0:0.009)
+0:0.006,
+Q4SVE6_TETNG/553-864:0.025)
+0:0.047)
+0:0.027)
+0:0.020)
+0:0.013,
+(
+(
+C3ZN91_BRAFL/470-771:0.010,
+C3ZQ22_BRAFL/680-848:0.025)
+0:0.037,
+D2XMQ5_SACKO/1-219:0.054)
+0:0.012)
+0:0.002,
+(
+(
+(
+B3VCG6_STRPU/599-900:0.105,
+(
+(
+Q4SXU1_TETNG/1-206:0.158,
+Q4TF92_TETNG/239-305:-0.043)
+0:0.028,
+Q4TBP2_TETNG/868-934:-0.028)
+0:0.019)
+0:0.010,
+(
+B2RFN1_OIKDI/771-1072:0.056,
+C8TEF3_OIKDI/573-874:0.117)
+0:0.031)
+0:0.008,
+A7RQ46_NEMVE/511-812:0.132)
+0:0.004)
+0:0.011,
+(
+(
+A8WKF9_CAEBR/562-864:0.119,
+(
+(
+Q86B39_CAEEL/547-848:0.000,
+O16720_CAEEL/566-867:-0.000)
+0:0.028,
+(
+(
+(
+(
+(
+B2L7Q3_CAERE/1-268:0.001,
+B2L7P9_CAERE/1-269:-0.001)
+0:0.010,
+A8X4Z3_CAEBR/691-992:-0.010)
+0:0.008,
+Q3LTR7_CAEEL/668-969:-0.005)
+0:0.002,
+Q20578_CAEEL/660-961:-0.002)
+0:0.001,
+B6VQ75_CAEEL/681-982:-0.001)
+0:0.019)
+0:0.019)
+0:0.015,
+A8P168_BRUMA/623-925:0.054)
+0:0.061)
+0:0.008,
+(
+C4Q6D1_SCHMA/608-835:0.013,
+Q5C3Y0_SCHJA/4-157:-0.007)
+0:0.067)
+0:0.026,
+(
+(
+A8WWP9_CAEBR/632-910:0.192,
+Q9XVI3_CAEEL/574-882:0.094)
+0:0.483,
+D4A2P5_RAT/843-954:-0.039)
+0:0.034)
+0:0.091,
+(
+(
+TAG76_CAEEL/660-966:0.008,
+(
+A8XA10_CAEBR/683-989:0.005,
+(
+Q7JLZ2_CAEEL/652-958:0.000,
+Q21079_CAEEL/655-961:-0.000)
+0:0.004)
+0:0.004)
+0:0.217,
+A8NGN0_BRUMA/1-135:-0.001)
+0:0.249)
+0:0.029,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+B8BT49_THAPS/780-963:0.178,
+C7SYH3_THAPS/780-1048:-0.054)
+0:0.385,
+B4G6N2_DROPE/1-37:-0.055)
+0:0.169,
+B5DIM9_DROPS/1-71:-0.169)
+0:0.251,
+(
+B4G6N7_DROPE/19-133:-0.041,
+(
+B5DIM7_DROPS/517-815:0.006,
+B4G6N0_DROPE/517-815:0.030)
+0:0.073)
+0:0.025)
+0:0.088,
+(
+(
+(
+(
+B4NLX0_DROWI/695-993:0.099,
+B4N082_DROWI/579-877:0.072)
+0:0.004,
+(
+(
+(
+(
+B3NI38_DROER/838-1138:0.022,
+(
+(
+Q2Q3X0_9MUSC/506-806:0.003,
+(
+(
+(
+(
+(
+(
+Q2Q3X2_DROYA/506-806:0.000,
+Q2Q3X7_DROYA/506-806:-0.000)
+0:0.000,
+Q2Q3X4_DROYA/506-806:0.000)
+0:0.000,
+B4PCH3_DROYA/843-1143:0.000)
+0:0.000,
+Q2Q3X6_DROYA/506-806:0.000)
+0:0.000,
+Q2Q3X8_DROYA/506-806:0.000)
+0:0.000,
+B4IU14_DROYA/810-1110:0.000)
+0:0.003)
+0:0.009,
+Q2Q3X1_DROTE/424-724:-0.002)
+0:0.016)
+0:0.054,
+(
+(
+C7LAD2_DROME/888-1187:-0.005,
+(
+(
+Q2Q3W2_DROSI/511-810:-0.116,
+(
+Q2Q3W9_DROSI/511-810:-0.224,
+(
+B4NVX8_DROSI/80-259:0.006,
+(
+B5DU45_DROPS/389-589:0.090,
+B4H1E3_DROPE/6-68:0.602)
+0:0.084)
+0:0.259)
+0:0.117)
+0:0.056,
+Q2Q3W7_DROSI/511-810:-0.056)
+0:0.065)
+0:0.002,
+AGO2_DROME/885-1184:-0.002)
+0:0.035)
+0:0.024,
+B3M505_DROAN/688-988:0.085)
+0:0.012,
+(
+(
+(
+(
+(
+(
+(
+B4GTA7_DROPE/448-747:-0.064,
+(
+B4GTA5_DROPE/448-747:-0.130,
+(
+B4ISF4_DROPE/14-227:-0.033,
+B5DKZ0_DROPS/2-120:0.129)
+0:0.172)
+0:0.067)
+0:0.032,
+B4HDJ4_DROPE/40-339:-0.030)
+0:0.026,
+B5DT30_DROPS/694-993:-0.015)
+0:0.027,
+B4GTA6_DROPE/448-736:-0.014)
+0:0.040,
+(
+B5DWW4_DROPS/3-186:0.200,
+(
+B5DY62_DROPS/643-942:0.005,
+B4GFG0_DROPE/449-748:0.002)
+0:0.013)
+0:0.028)
+0:0.015,
+(
+(
+B4GDQ8_DROPE/669-968:-0.007,
+(
+B5DYR9_DROPS/651-950:0.019,
+B5DYR8_DROPS/41-340:-0.012)
+0:0.033)
+0:0.004,
+B4GDQ6_DROPE/661-960:-0.004)
+0:0.074)
+0:0.015,
+(
+B4GUA7_DROPE/624-923:0.010,
+B5DQH3_DROPS/471-770:0.003)
+0:0.053)
+0:0.025)
+0:0.029)
+0:0.022,
+(
+B4HIG2_DROSE/1-224:0.101,
+B4QL34_DROSI/606-729:-0.067)
+0:0.071)
+0:0.004,
+(
+B4IWV1_DROGR/788-1091:0.105,
+(
+B4LH85_DROVI/152-457:0.084,
+B4KUJ5_DROMO/715-1017:0.063)
+0:0.028)
+0:0.035)
+0:0.032)
+0:0.227,
+Q59HV7_BOMMO/706-1006:0.441)
+0:0.145,
+C4WWR5_ACYPI/1-266:0.240)
+0:0.043,
+(
+(
+(
+(
+C4L1M1_EXISA/321-484:0.507,
+Q70IH5_ARAHA/1-61:-0.507)
+0:0.617,
+A8NFX5_COPC7/531-721:0.643)
+0:0.300,
+B0LJQ7_CULTA/1-148:0.003)
+0:0.121,
+(
+B0X641_CULQU/527-832:0.322,
+(
+(
+B0WRW8_CULQU/638-943:0.161,
+(
+C5J0H4_AEDAE/655-961:0.115,
+B0LJQ8_AEDTR/1-254:0.017)
+0:0.015)
+0:0.072,
+Q5TVL2_ANOGA/535-839:0.161)
+0:0.049)
+0:0.098)
+0:0.191)
+0:0.083,
+(
+Q5DFJ9_SCHJA/2-164:-0.023,
+(
+(
+C4QPD2_SCHMA/595-831:0.216,
+C4QPD1_SCHMA/595-896:-0.171)
+0:0.187,
+(
+Q5DCI0_SCHJA/265-566:0.039,
+C4QPD0_SCHMA/628-928:0.023)
+0:0.022)
+0:0.128)
+0:0.241)
+0:0.032,
+B3SEP3_TRIAD/438-734:0.312)
+0:0.032,
+(
+B7QBT5_IXOSC/313-623:0.335,
+(
+B7Q990_IXOSC/474-787:0.299,
+(
+B7Q811_IXOSC/611-920:0.181,
+B7P230_IXOSC/468-776:0.181)
+0:0.079)
+0:0.041)
+0:0.013)
+0:0.033,
+(
+(
+(
+(
+B8PJA4_POSPM/353-665:0.379,
+(
+B0DLH7_LACBS/515-821:0.336,
+A8NFX0_COPC7/514-795:0.383)
+0:0.062)
+0:0.151,
+(
+A8NXQ6_COPC7/547-849:0.328,
+(
+(
+(
+(
+A8P6A7_COPC7/477-803:0.341,
+B0CXE0_LACBS/567-880:0.195)
+0:0.039,
+A8PFQ6_COPC7/458-767:0.263)
+0:0.019,
+B0CYG1_LACBS/553-863:0.186)
+0:0.010,
+B0D2D0_LACBS/417-738:0.209)
+0:0.043)
+0:0.067)
+0:0.048,
+A8PFS7_COPC7/454-749:0.482)
+0:0.130,
+(
+(
+B2RFN0_OIKDI/550-850:0.587,
+(
+C5K8K7_9ALVE/727-977:0.753,
+(
+(
+(
+(
+(
+(
+B9Q8Q1_TOXGO/379-692:-0.000,
+(
+B9PJN3_TOXGO/379-693:0.000,
+Q1L2C8_TOXGO/379-693:-0.000)
+0:0.000)
+0:0.000,
+Q1L1E2_TOXGO/161-474:-0.000)
+0:0.000,
+B6KA84_TOXGO/379-692:-0.000)
+0:0.000,
+Q1L2C9_TOXGO/379-692:-0.000)
+0:0.000,
+D2JRZ7_TOXGO/582-895:-0.000)
+0:0.700,
+A8NJ50_BRUMA/1-61:0.132)
+0:0.103)
+0:0.150)
+0:0.086,
+(
+Q5DG80_SCHJA/3-99:0.147,
+B9ZU55_9TURB/580-893:0.467)
+0:0.070)
+0:0.033)
+0:0.012)
+0:0.008)
+0:0.034,
+(
+Q8H714_PHYIN/1-173:-0.080,
+(
+D0N1C0_PHYIN/587-890:0.010,
+D0N1B9_PHYIN/587-890:0.013)
+0:0.069)
+0:0.282)
+0:0.014,
+(
+(
+(
+A8JAG8_CHLRE/672-990:0.085,
+A8J9T3_CHLRE/1058-1164:0.009)
+0:0.219,
+(
+A8J0N0_CHLRE/619-933:0.032,
+A8J0M9_CHLRE/675-993:0.059)
+0:0.533)
+0:0.114,
+(
+C5X8G7_SORBI/41-220:0.221,
+C5WR49_SORBI/670-825:0.111)
+0:0.322)
+0:0.035)
+0:0.015,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+AGO1_ARATH/676-997:0.000,
+Q3ECU7_ARATH/678-999:-0.000)
+0:0.040,
+(
+(
+(
+(
+A1E5M2_PEA/696-1017:0.020,
+A1E5M3_PEA/726-1047:0.014)
+0:0.011,
+Q2LFC4_NICBE/678-999:0.022)
+0:0.005,
+(
+B9SJV6_RICCO/687-1008:0.018,
+(
+B9I4Y6_POPTR/688-1009:0.003,
+B9N365_POPTR/308-629:0.003)
+0:0.013)
+0:0.005)
+0:0.008,
+(
+(
+(
+B8AGF0_ORYSI/693-1014:0.000,
+B9F1L3_ORYSJ/693-1014:-0.000)
+0:0.000,
+AGO1A_ORYSJ/709-1030:0.000)
+0:0.018,
+(
+(
+C5YE15_SORBI/712-1033:0.001,
+C0HEU9_MAIZE/87-408:0.002)
+0:0.003,
+(
+(
+B9FC11_ORYSJ/374-695:0.000,
+AGO1B_ORYSJ/746-1067:-0.000)
+0:0.000,
+B8AT34_ORYSI/729-1050:0.000)
+0:0.003)
+0:0.010)
+0:0.015)
+0:0.006)
+0:0.008,
+(
+Q2LFC3_NICBE/604-925:0.035,
+B1B5A8_DAUCA/736-1057:0.042)
+0:0.015)
+0:0.009,
+(
+A9T6J3_PHYPA/524-842:0.044,
+(
+A9RG03_PHYPA/598-919:0.014,
+A9RTW5_PHYPA/744-1065:0.011)
+0:0.032)
+0:0.020)
+0:0.007,
+(
+C5YY05_SORBI/736-1058:0.020,
+B4FGY3_MAIZE/13-335:0.030)
+0:0.029)
+0:0.006,
+C7J0V9_ORYSJ/1-271:0.012)
+0:0.008,
+(
+(
+(
+(
+PINH_ARATH/625-946:0.006,
+(
+B0FHH7_BRANA/614-935:0.015,
+B9RTJ1_RICCO/626-947:0.009)
+0:0.007)
+0:0.006,
+(
+B9HKB5_POPTR/631-952:0.003,
+B9HUQ6_POPTR/452-776:0.006)
+0:0.008)
+0:0.028,
+(
+(
+(
+PNH1_ORYSJ/620-941:0.000,
+B9FU05_ORYSJ/458-779:-0.000)
+0:0.010,
+C5Z5J6_SORBI/617-938:0.002)
+0:0.015,
+C0PNQ0_MAIZE/1-267:-0.006)
+0:0.016)
+0:0.004,
+(
+B9STN2_RICCO/586-907:0.046,
+A5ARQ9_VITVI/592-892:0.080)
+0:0.018)
+0:0.039)
+0:0.006,
+Q2PEW1_TRIPR/1-247:0.021)
+0:0.008,
+(
+(
+(
+(
+B8B2X0_ORYSI/647-968:0.000,
+AGO1D_ORYSJ/669-990:-0.000)
+0:0.000,
+B9FR04_ORYSJ/644-965:0.000)
+0:0.016,
+C5Z2L1_SORBI/643-964:0.022)
+0:0.024,
+(
+C5XWS2_SORBI/656-978:0.019,
+(
+B8AFI6_ORYSI/637-958:0.001,
+AGO1C_ORYSJ/638-959:0.002)
+0:0.015)
+0:0.013)
+0:0.060)
+0:0.061,
+(
+(
+(
+AGO17_ORYSJ/514-834:0.000,
+B8AII3_ORYSI/514-834:-0.000)
+0:0.353,
+(
+(
+(
+(
+(
+C5WX34_SORBI/1-43:0.419,
+Q0DZI9_ORYSJ/36-107:0.195)
+0:0.142,
+(
+C5WR49_SORBI/585-661:0.302,
+B7ZXH7_MAIZE/580-736:-0.093)
+0:0.213)
+0:0.343,
+C0PDS4_MAIZE/580-888:-0.309)
+0:0.496,
+C5X8G4_SORBI/699-1002:-0.101)
+0:0.160,
+(
+(
+B9FX53_ORYSJ/672-981:0.000,
+AGO18_ORYSJ/747-1056:-0.000)
+0:0.008,
+B8B5Y3_ORYSI/745-1054:0.008)
+0:0.071)
+0:0.145)
+0:0.111,
+(
+(
+(
+(
+C5WPM0_SORBI/900-1216:0.079,
+(
+(
+AGO12_ORYSJ/693-1012:0.000,
+B9FAL8_ORYSJ/438-757:-0.000)
+0:0.017,
+A2XKQ7_ORYSI/654-972:-0.005)
+0:0.105)
+0:0.019,
+(
+(
+C5WPM1_SORBI/697-1047:0.048,
+C0PMV6_MAIZE/89-412:0.030)
+0:0.019,
+(
+(
+B8APJ4_ORYSI/9-101:0.163,
+AGO11_ORYSJ/541-848:-0.031)
+0:0.054,
+B9FEW4_ORYSJ/531-767:0.016)
+0:0.087)
+0:0.019)
+0:0.047,
+(
+B9MTL4_POPTR/505-810:0.101,
+(
+(
+B9SCN8_RICCO/632-949:0.096,
+(
+B9HQS2_POPTR/635-955:0.048,
+B9GEQ1_POPTR/548-869:0.043)
+0:0.026)
+0:0.014,
+AGOL_ARATH/638-958:0.122)
+0:0.015)
+0:0.038)
+0:0.008,
+(
+(
+(
+(
+(
+(
+B8ALC4_ORYSI/596-877:0.021,
+(
+AGO13_ORYSJ/471-770:0.046,
+B9F6E0_ORYSJ/564-783:-0.046)
+0:0.014)
+0:0.056,
+(
+(
+MEL1_ORYSJ/696-1016:0.000,
+B8ALC8_ORYSI/696-1016:-0.000)
+0:0.000,
+A3ANP6_ORYSJ/644-982:0.003)
+0:0.015)
+0:0.019,
+C5WX38_SORBI/703-1025:0.043)
+0:0.045,
+(
+(
+Q0DZI9_ORYSJ/119-248:0.229,
+B9F134_ORYSJ/36-347:0.002)
+0:0.083,
+B8AFF9_ORYSI/534-832:-0.001)
+0:0.305)
+0:0.011,
+(
+(
+B7ZZW2_MAIZE/663-969:-0.034,
+(
+Q7FS89_MAIZE/11-170:-0.002,
+Q8S478_MAIZE/38-188:0.015)
+0:0.054)
+0:0.079,
+C5XBU2_SORBI/675-995:0.047)
+0:0.068)
+0:0.042,
+(
+(
+B9FVX3_ORYSJ/462-794:-0.002,
+B8B7Y0_ORYSI/653-985:0.005)
+0:0.001,
+AGO14_ORYSJ/677-1009:-0.001)
+0:0.163)
+0:0.028)
+0:0.026)
+0:0.004)
+0:0.085)
+0:0.025,
+(
+(
+(
+(
+(
+A7LM14_BOMMO/414-612:0.056,
+C5FBF4_NANOT/570-628:-0.056)
+0:0.648,
+(
+(
+Q10P03_ORYSJ/678-756:0.000,
+B9F6T7_ORYSJ/653-731:-0.000)
+0:0.000,
+B8AK97_ORYSI/622-700:0.000)
+0:0.553)
+0:0.317,
+A9T108_PHYPA/1-169:0.210)
+0:0.118,
+C1DZY0_9CHLO/572-888:0.440)
+0:0.047,
+(
+D0MT95_PHYIN/497-796:0.122,
+(
+D0MT54_PHYIN/891-1191:0.100,
+D0MT94_PHYIN/524-824:0.084)
+0:0.051)
+0:0.348)
+0:0.033)
+0:0.009,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+Q0DZJ0_ORYSJ/35-101:-0.048,
+B9IL53_POPTR/1-160:0.048)
+0:0.291,
+B9HXP0_POPTR/520-831:0.018)
+0:0.018,
+B9S921_RICCO/670-981:0.040)
+0:0.016,
+A5BW27_VITVI/926-1238:0.081)
+0:0.002,
+D3GBV1_LOTJA/669-981:0.099)
+0:0.037,
+(
+(
+(
+A3AJI1_ORYSJ/584-892:0.000,
+AGO7_ORYSJ/709-1017:-0.000)
+0:0.000,
+A2YQ96_ORYSI/716-1024:0.000)
+0:0.052,
+(
+D0EYF3_MAIZE/683-995:0.024,
+C5WVP1_SORBI/688-996:0.012)
+0:0.061)
+0:0.098)
+0:0.027,
+Q9C793_ARATH/649-950:0.122)
+0:0.037,
+A5BG29_VITVI/774-895:0.037)
+0:0.061,
+(
+(
+(
+(
+(
+A3AXD9_ORYSJ/720-1023:0.000,
+A2XXJ0_ORYSI/688-991:-0.000)
+0:0.000,
+AGO3_ORYSJ/720-1023:0.000)
+0:0.000,
+Q00RR5_ORYSA/745-1048:0.000)
+0:0.154,
+(
+(
+(
+B9FCH7_ORYSJ/626-928:-0.001,
+(
+Q00RR6_ORYSA/693-995:0.000,
+A2XXI9_ORYSI/693-995:-0.000)
+0:0.011)
+0:0.001,
+AGO2_ORYSJ/687-989:-0.001)
+0:0.086,
+(
+C5YG12_SORBI/746-1048:0.057,
+C0PIX4_MAIZE/1-297:0.035)
+0:0.060)
+0:0.019)
+0:0.174,
+(
+(
+(
+Q9SHF2_ARATH/841-1145:0.134,
+(
+Q9SHF3_ARATH/665-965:0.000,
+Q8GX33_ARATH/191-491:-0.000)
+0:0.107)
+0:0.179,
+(
+(
+(
+A5AFZ6_VITVI/719-1022:0.106,
+(
+A5CBU3_VITVI/601-900:0.026,
+A5B8D3_VITVI/625-924:0.025)
+0:0.098)
+0:0.021,
+B9S3I1_RICCO/146-445:0.116)
+0:0.018,
+B9NA51_POPTR/676-973:0.116)
+0:0.043)
+0:0.023,
+B9SSM8_RICCO/639-934:0.280)
+0:0.076)
+0:0.150)
+0:0.089)
+0:0.024,
+(
+A8PVW7_BRUMA/492-800:0.398,
+(
+B6VBQ1_CAEBE/1034-1381:0.240,
+(
+A8XVL1_CAEBR/571-952:0.260,
+(
+O46002_CAEEL/57-176:0.165,
+Q9XU82_CAEEL/618-985:0.144)
+0:0.085)
+0:0.038)
+0:0.490)
+0:0.153)
+0:0.030)
+0:0.035,
+(
+(
+(
+(
+(
+(
+Q2GQS4_CHAGB/345-418:0.660,
+B0WE95_CULQU/32-179:-0.660)
+0:0.623,
+(
+A0D5D7_PARTE/374-640:0.553,
+B9S0P9_RICCO/17-119:0.233)
+0:0.717)
+0:0.493,
+(
+A8Q5F0_BRUMA/545-849:0.639,
+(
+(
+(
+Q21691_CAEEL/673-1001:0.323,
+(
+A8WNJ6_CAEBR/660-987:0.081,
+A8WS47_CAEBR/435-755:0.049)
+0:0.128)
+0:0.164,
+(
+Q9N3L7_CAEEL/585-911:0.301,
+A8XZY0_CAEBR/665-992:0.260)
+0:0.072)
+0:0.018,
+(
+A8WQA0_CAEBR/671-998:0.158,
+(
+Q9TXN7_CAEEL/609-935:0.157,
+(
+C8JQR1_CAEEL/591-918:0.059,
+YQ53_CAEEL/650-977:0.077)
+0:0.086)
+0:0.070)
+0:0.124)
+0:0.539)
+0:0.124)
+0:0.205,
+(
+(
+(
+(
+Q27GU1_CAEEL/511-833:0.000,
+Q19645_CAEEL/674-996:-0.000)
+0:0.077,
+A8XRG0_CAEBR/648-970:0.047)
+0:0.740,
+(
+A8QE08_BRUMA/711-1030:0.468,
+(
+(
+A8WWH9_CAEBR/55-193:0.143,
+Q17600_CAEEL/19-157:0.342)
+0:1.054,
+(
+Q9XVF1_CAEEL/588-902:0.236,
+A8WWI1_CAEBR/598-920:0.377)
+0:0.173)
+0:0.251)
+0:0.142)
+0:0.119,
+(
+(
+Q8MU01_HETGL/745-963:0.438,
+(
+(
+A8XFJ6_CAEBR/595-895:0.179,
+(
+Q23415_CAEEL/40-350:0.066,
+(
+GCC7_CAEEL/596-906:0.031,
+P91085_CAEEL/543-853:0.038)
+0:0.006)
+0:0.073)
+0:0.139,
+(
+(
+A8WJ71_CAEBR/596-953:0.071,
+A8X957_CAEBR/565-899:0.023)
+0:0.266,
+(
+O62275_CAEEL/594-924:0.190,
+Q9N585_CAEEL/604-934:0.219)
+0:0.014)
+0:0.050)
+0:0.438)
+0:0.152,
+(
+(
+A8P7Z4_BRUMA/1-302:0.513,
+(
+(
+(
+A8XEJ5_CAEBR/552-849:0.085,
+(
+(
+Q86S33_CAEEL/548-852:0.000,
+Q9GZG4_CAEEL/548-852:-0.000)
+0:0.002,
+(
+(
+Q86NJ8_CAEEL/548-852:0.000,
+B3KLZ7_CAEEL/358-662:-0.000)
+0:0.000,
+O02095_CAEEL/574-878:0.000)
+0:0.001)
+0:0.146)
+0:0.104,
+(
+O16386_CAEEL/548-847:0.177,
+(
+A8XUC0_CAEBR/563-774:0.432,
+(
+Q8MU01_HETGL/598-705:0.654,
+A8X254_CAEBR/555-701:0.825)
+0:0.231)
+0:0.099)
+0:0.133)
+0:0.425,
+(
+A8X254_CAEBR/749-889:0.268,
+C5LD15_9ALVE/568-697:1.144)
+0:0.366)
+0:0.251)
+0:0.119,
+(
+A8X022_CAEBR/492-805:0.902,
+(
+A8X023_CAEBR/600-841:0.486,
+Q21495_CAEEL/61-336:0.448)
+0:0.166)
+0:0.388)
+0:0.082)
+0:0.027)
+0:0.268)
+0:0.016,
+(
+(
+(
+(
+(
+(
+C4LVV2_ENTHI/470-756:0.033,
+B0ET37_ENTDI/470-756:0.006)
+0:0.603,
+(
+B0ENU6_ENTDI/467-753:0.057,
+C4LVQ2_ENTHI/467-753:0.077)
+0:0.739)
+0:0.270,
+(
+(
+C4LY31_ENTHI/438-711:-0.002,
+B0EI01_ENTDI/438-710:0.059)
+0:1.383,
+D2V7J4_NAEGR/498-769:0.898)
+0:0.123)
+0:0.152,
+(
+(
+(
+A4ZYY6_TETTH/491-831:0.000,
+Q23AZ6_TETTH/491-831:-0.000)
+0:1.365,
+(
+(
+(
+(
+(
+(
+(
+B7R785_9THEO/119-333:0.853,
+Q11QW7_CYTH3/390-605:0.834)
+0:0.159,
+(
+(
+(
+(
+(
+(
+(
+Q9L1X1_STRCO/365-661:0.470,
+(
+D2M4C5_RHOPA/151-447:0.422,
+A3VQY4_9PROT/445-745:0.331)
+0:0.177)
+0:0.096,
+(
+B9MH92_ACIET/439-730:0.469,
+(
+A5D4D9_PELTS/458-756:0.383,
+A0LL61_SYNFM/455-750:0.474)
+0:0.125)
+0:0.070)
+0:0.020,
+C1F5Q7_ACIC5/440-735:0.577)
+0:0.070,
+(
+A4WYU7_RHOS5/454-756:0.449,
+B7K585_CYAP8/439-744:0.331)
+0:0.290)
+0:0.103,
+(
+D0BWJ3_9GAMM/401-693:0.632,
+C6XVE0_PEDHD/320-460:0.866)
+0:0.192)
+0:0.096,
+(
+D2QY15_PIRSD/353-529:0.786,
+D2QGL1_SPILD/333-520:0.783)
+0:0.448)
+0:0.162,
+Q1PV30_9BACT/383-655:0.973)
+0:0.072)
+0:0.111,
+PIWI_ARCFU/110-406:1.241)
+0:0.141,
+(
+Q96Z85_SULTO/134-346:1.333,
+O67434_AQUAE/419-694:0.968)
+0:0.255)
+0:0.071,
+(
+(
+A3VPN8_9PROT/165-321:1.065,
+D1JFX3_9ARCH/159-437:0.672)
+0:0.542,
+(
+C1V6Q1_9EURY/608-882:0.698,
+B9LVW4_HALLT/464-658:0.870)
+0:0.065)
+0:0.172)
+0:0.079,
+(
+(
+(
+(
+B4B3R2_9CHRO/1-219:0.527,
+(
+A8YDH3_MICAE/463-734:0.046,
+B0JXD6_MICAN/462-734:0.011)
+0:0.280)
+0:0.001,
+A0YYT3_9CYAN/471-752:0.335)
+0:0.844,
+(
+B1XJG0_SYNP2/307-599:0.534,
+(
+(
+Q2JSR3_SYNJA/437-712:0.111,
+Q2JI93_SYNJB/454-728:0.257)
+0:0.080,
+(
+Q8DKB1_THEEB/458-739:0.214,
+(
+Q5MZ10_SYNP6/441-718:0.001,
+Q31N05_SYNE7/441-718:0.002)
+0:0.274)
+0:0.083)
+0:0.451)
+0:0.405)
+0:0.064,
+(
+B0ADC8_9CLOT/432-721:0.258,
+(
+C6QUV9_9BACI/2-48:0.355,
+B7GJX9_ANOFW/423-692:-0.158)
+0:0.657)
+0:0.652)
+0:0.095)
+0:0.142,
+(
+(
+(
+Q8U3D2_PYRFU/474-756:0.904,
+(
+D3S0S6_FERPL/490-768:0.530,
+(
+Y1321_METJA/426-699:0.085,
+C7P7E7_METFA/420-692:0.127)
+0:0.464)
+0:0.273)
+0:0.114,
+(
+B6YTQ5_THEON/463-751:0.786,
+D3S7P9_9EURY/531-824:0.825)
+0:0.340)
+0:0.175,
+B5IR12_9EURY/528-819:1.255)
+0:0.313)
+0:0.091)
+0:0.064,
+(
+(
+(
+A4HBN9_LEIBR/872-1190:0.078,
+(
+A4HZ40_LEIIN/904-1226:0.028,
+Q4QCH4_LEIMA/899-1221:0.040)
+0:0.203)
+0:0.389,
+(
+Q4DYG9_TRYCR/791-1083:0.272,
+(
+(
+Q6T6J9_9TRYP/784-1082:0.000,
+D0A1P1_TRYBG/784-1082:-0.000)
+0:0.000,
+Q38C22_9TRYP/783-1081:0.000)
+0:0.203)
+0:0.215)
+0:0.948,
+(
+(
+A4HH63_LEIBR/16-225:0.000,
+A4H6I4_LEIBR/673-882:-0.000)
+0:0.706,
+(
+Q6T6K0_9TRYP/549-877:0.005,
+(
+D0A4M3_TRYBG/571-899:0.003,
+Q389P5_9TRYP/560-888:-0.000)
+0:0.013)
+0:0.706)
+0:0.670)
+0:0.073)
+0:0.101)
+0:0.087,
+(
+(
+A2DPV7_TRIVA/501-794:0.899,
+(
+(
+Q86QW7_GIALA/412-736:0.000,
+A8BCK6_GIALA/555-879:-0.000)
+0:0.264,
+C6LTG5_GIALA/555-877:0.132)
+0:0.901)
+0:0.125,
+(
+(
+(
+(
+(
+Q3SD94_PARTE/460-750:0.000,
+A0D4I7_PARTE/320-610:-0.000)
+0:0.211,
+(
+Q3SD95_PARTE/471-760:0.097,
+A0CE33_PARTE/2-210:0.518)
+0:0.144)
+0:0.283,
+(
+(
+A0DEE4_PARTE/478-780:0.004,
+Q3SE57_PARTE/478-788:0.016)
+0:0.251,
+(
+Q3SE52_PARTE/466-770:0.030,
+(
+Q3SE58_PARTE/466-770:0.000,
+A0CB11_PARTE/463-767:-0.000)
+0:0.056)
+0:0.341)
+0:0.057)
+0:0.227,
+(
+(
+(
+A4ZYY5_TETTH/495-793:0.195,
+(
+A4VE06_TETTH/14-183:-0.017,
+(
+A4VE05_TETTH/347-645:0.080,
+(
+Q6UE79_TETTH/497-791:0.004,
+Q0GM58_TETTH/497-791:-0.001)
+0:0.031)
+0:0.033)
+0:0.119)
+0:0.141,
+(
+(
+Q22NE2_TETTH/491-777:0.023,
+A8VSR3_TETTH/491-787:-0.012)
+0:0.462,
+(
+A4ZYY4_TETTH/474-761:-0.222,
+Q24HU6_TETTH/383-631:0.251)
+0:0.782)
+0:0.117)
+0:0.416,
+(
+Q0MRE2_TETTH/533-834:0.000,
+Q239A3_TETTH/603-904:-0.000)
+0:0.671)
+0:0.112)
+0:0.233,
+(
+A0CR14_PARTE/559-847:0.000,
+Q3SE51_PARTE/572-860:-0.000)
+0:0.905)
+0:0.106)
+0:0.045)
+0:0.060,
+(
+(
+(
+(
+(
+C5LD15_9ALVE/718-952:0.830,
+(
+C3ZKW1_BRAFL/534-739:0.411,
+B9ZU54_9TURB/593-893:0.389)
+0:0.069)
+0:0.035,
+(
+(
+(
+(
+(
+(
+(
+(
+B7PDV6_IXOSC/541-835:0.083,
+B7Q5I1_IXOSC/446-741:0.289)
+0:0.170,
+(
+(
+(
+(
+A7RFC2_NEMVE/557-857:0.214,
+(
+Q9GPA6_STRPU/114-407:-0.010,
+(
+Q9GPA7_STRPU/547-808:0.013,
+Q9GPA8_STRPU/547-840:-0.010)
+0:0.014)
+0:0.350)
+0:0.026,
+(
+Q6RSS9_PODCA/561-853:0.110,
+B2KTD9_9CNID/559-850:0.158)
+0:0.080)
+0:0.025,
+(
+C3XV23_BRAFL/67-195:0.010,
+(
+(
+C3XV22_BRAFL/1173-1299:0.178,
+C3XV22_BRAFL/2983-3180:-0.126)
+0:0.085,
+C3XV20_BRAFL/551-843:0.150)
+0:0.084)
+0:0.038)
+0:0.021,
+D1LXB5_SACKO/1-252:0.170)
+0:0.012)
+0:0.011,
+(
+Q3ZUK2_PLADU/35-327:0.196,
+B5BUZ0_9ASCI/567-860:0.307)
+0:0.018)
+0:0.036,
+(
+A8XEN9_CAEBR/501-812:0.087,
+(
+Q17567_CAEEL/397-708:0.018,
+P90786_CAEEL/499-810:0.011)
+0:0.025)
+0:0.516)
+0:0.013,
+(
+(
+B4DYF7_HUMAN/569-859:-0.003,
+PIWL3_HUMAN/578-868:0.003)
+0:0.348,
+(
+(
+PIWL1_CHICK/561-853:0.070,
+(
+PIWL1_HUMAN/555-847:0.003,
+(
+D2HWM8_AILME/555-847:-0.000,
+(
+PIWL1_MOUSE/556-848:0.000,
+D3ZTP9_RAT/556-848:-0.000)
+0:0.014)
+0:0.024)
+0:0.111)
+0:0.096,
+(
+(
+PIWL1_DANRE/552-844:0.089,
+B9U223_ORYLA/549-841:0.099)
+0:0.018,
+(
+Q4T9Y6_TETNG/521-792:0.031,
+Q4T9Y9_TETNG/1-228:-0.004)
+0:0.167)
+0:0.072)
+0:0.078)
+0:0.059)
+0:0.026,
+(
+(
+(
+PIWL4_HUMAN/546-838:0.103,
+D2I3M6_AILME/487-786:0.060)
+0:0.050,
+(
+(
+D3ZDI3_RAT/541-827:0.171,
+PIWL4_RAT/541-834:-0.006)
+0:0.037,
+PIWL4_MOUSE/541-834:0.033)
+0:0.067)
+0:0.077,
+A6X965_MOUSE/3-172:0.017)
+0:0.286)
+0:0.054,
+(
+(
+(
+C9E0T4_APIME/497-785:0.000,
+C9E0T3_APIME/525-813:-0.000)
+0:0.255,
+A8D8P8_BOMMO/594-885:0.304)
+0:0.049,
+(
+(
+(
+(
+Q7QG53_ANOGA/576-875:0.089,
+(
+(
+(
+Q16IF2_AEDAE/569-868:0.000,
+Q16ZS2_AEDAE/361-660:-0.000)
+0:0.011,
+Q16ZS3_AEDAE/562-861:0.025)
+0:0.064,
+(
+Q171B3_AEDAE/547-846:0.000,
+B0W5T4_CULQU/546-845:0.023)
+0:0.041)
+0:0.023)
+0:0.015,
+(
+B0W5T3_CULQU/510-809:0.000,
+B0W5P0_CULQU/552-851:-0.000)
+0:0.057)
+0:0.166,
+(
+Q5TW24_ANOGA/530-829:0.227,
+(
+(
+(
+Q16JS1_AEDAE/576-874:0.133,
+B0XE74_CULQU/592-891:0.170)
+0:0.049,
+(
+Q176R2_AEDAE/633-931:0.103,
+(
+B0XE75_CULQU/501-788:0.080,
+Q16JS2_AEDAE/571-869:0.078)
+0:0.018)
+0:0.022)
+0:0.045,
+B0WYL9_CULQU/560-857:0.263)
+0:0.037)
+0:0.014)
+0:0.045,
+(
+(
+(
+(
+B4P152_DROYA/546-844:0.043,
+B3N4Z9_DROER/546-844:0.019)
+0:0.014,
+(
+(
+(
+(
+Q95PE5_DROME/1-176:0.298,
+A8DYZ0_DROME/483-781:-0.268)
+0:0.136,
+O76922_DROME/554-852:-0.136)
+0:0.116,
+B4Q9X4_DROSI/545-843:-0.038)
+0:0.021,
+B4HWZ3_DROSE/549-847:-0.011)
+0:0.089)
+0:0.036,
+(
+(
+(
+B4LV39_DROVI/546-843:0.060,
+B4KHC1_DROMO/539-836:0.043)
+0:0.016,
+(
+(
+(
+(
+B4MUA1_DROWI/563-860:-0.147,
+B4N6U3_DROWI/34-103:0.238)
+0:0.073,
+B4MUA0_DROWI/539-836:-0.073)
+0:0.077,
+B3MJZ7_DROAN/562-859:0.023)
+0:0.027,
+(
+B4G765_DROPE/541-838:0.007,
+Q29P29_DROPS/540-837:0.006)
+0:0.014)
+0:0.018)
+0:0.013,
+B4JBE4_DROGR/542-839:0.070)
+0:0.021)
+0:0.256,
+(
+(
+B4JBE1_DROGR/574-864:0.078,
+(
+B4KHB7_DROMO/577-867:0.126,
+B4LV36_DROVI/558-849:0.042)
+0:0.033)
+0:0.028,
+(
+B4MU97_DROWI/591-882:0.093,
+(
+(
+(
+(
+(
+(
+B4G753_DROPE/334-531:0.226,
+Q29CN1_DROPS/543-834:-0.216)
+0:0.149,
+(
+B3N502_DROER/538-829:0.009,
+B4P149_DROYA/538-829:0.011)
+0:0.006)
+0:0.009,
+(
+(
+(
+Q6NNZ4_DROME/552-843:-0.011,
+Q6NP34_DROME/566-857:0.014)
+0:0.005,
+C0PTU6_DROME/566-857:-0.005)
+0:0.003,
+PIWI_DROME/538-829:-0.003)
+0:0.020)
+0:0.006,
+B4HWY9_DROSE/538-829:0.005)
+0:0.008,
+B4Q9X1_DROSI/538-829:-0.004)
+0:0.099,
+B3MJZ4_DROAN/563-854:0.074)
+0:0.046)
+0:0.012)
+0:0.233)
+0:0.026)
+0:0.042)
+0:0.134)
+0:0.035,
+(
+(
+(
+PIWI1_SCHMD/493-790:0.018,
+D2Z0D8_DUGJA/494-791:0.048)
+0:0.215,
+(
+PIWIL_DUGJA/502-800:0.131,
+(
+PIWI2_SCHMD/516-815:0.039,
+D2Z0D9_DUGJA/512-810:0.008)
+0:0.080)
+0:0.098)
+0:0.308,
+B9ZU52_9TURB/589-885:0.496)
+0:0.135)
+0:0.019)
+0:0.044,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+Q0H8V5_9CNID/70-239:-0.055,
+(
+(
+A7T755_NEMVE/2-70:0.206,
+C3XV22_BRAFL/1831-1964:0.089)
+0:0.033,
+Q4T9Z1_TETNG/519-587:0.324)
+0:0.251)
+0:0.211,
+C3Z5S8_BRAFL/570-730:0.132)
+0:0.248,
+(
+B0WE96_CULQU/634-782:0.426,
+Q170R5_AEDAE/637-930:-0.333)
+0:0.234)
+0:0.154,
+B4JP35_DROGR/334-622:0.087)
+0:0.089,
+(
+(
+(
+(
+B7FNN2_DROME/566-845:-0.081,
+(
+A4GUJ7_DROME/566-848:-0.157,
+A7YFW6_DROME/299-494:0.178)
+0:0.090)
+0:0.049,
+B6IDV1_DROME/574-861:-0.049)
+0:0.025,
+Q7PLK0_DROME/566-853:-0.025)
+0:0.012,
+A4GND8_DROME/566-853:-0.012)
+0:0.072)
+0:0.167,
+Q7PWT1_ANOGA/618-916:0.167)
+0:0.121,
+(
+(
+D2A2S9_TRICA/552-839:0.358,
+(
+(
+(
+A9ZSZ2_BOMMO/619-912:0.000,
+A7BJS3_BOMMO/619-912:-0.000)
+0:0.057,
+A7LNN5_BOMMO/2-193:-0.052)
+0:0.179,
+B4N2M0_DROWI/49-131:0.503)
+0:0.083)
+0:0.031,
+(
+(
+(
+B7QEM1_IXOSC/88-370:0.283,
+(
+(
+A7SQI3_NEMVE/441-733:-0.140,
+A7T7C9_NEMVE/1-180:0.163)
+0:0.285,
+B0FLQ9_STRPU/653-945:0.166)
+0:0.020)
+0:0.079,
+(
+(
+PIWL2_XENTR/644-935:0.110,
+(
+(
+D2H044_AILME/665-956:0.006,
+(
+D3ZRE1_RAT/666-957:0.000,
+PIWL2_MOUSE/666-957:-0.000)
+0:0.032)
+0:0.007,
+PIWL2_HUMAN/668-959:0.014)
+0:0.091)
+0:0.092,
+(
+(
+(
+PIWL2_ONCMY/749-1040:0.079,
+(
+PIWL2_DANRE/741-1032:0.009,
+A5PL40_DANRE/7-278:0.009)
+0:0.016)
+0:0.070,
+B9U224_ORYLA/729-1020:0.128)
+0:0.029,
+Q4RPK4_TETNG/383-660:0.140)
+0:0.061)
+0:0.112)
+0:0.077,
+(
+(
+C9E0T2_APIME/1-294:-0.128,
+C9E0S9_APIME/551-753:0.138)
+0:0.068,
+C9E0S8_APIME/604-898:-0.061)
+0:0.296)
+0:0.021)
+0:0.019)
+0:0.038,
+(
+B2Z3D6_SCHMD/665-960:0.013,
+D2Z0E0_DUGJA/657-952:0.014)
+0:0.374)
+0:0.079,
+B9ZU53_9TURB/586-879:0.564)
+0:0.028)
+0:0.059,
+(
+Q54HL3_DICDI/867-1166:0.636,
+(
+(
+(
+Q7KWS3_DICDI/669-964:0.141,
+Q54G64_DICDI/590-885:0.082)
+0:0.273,
+(
+D3B338_POLPA/992-1287:0.323,
+D3BMP8_POLPA/633-929:0.378)
+0:0.059)
+0:0.082,
+(
+Q1ZXG9_DICDI/1063-1281:0.224,
+Q86HF5_DICDI/896-1194:0.267)
+0:0.203)
+0:0.052)
+0:0.196)
+0:0.032,
+(
+(
+(
+Q0Q5B1_9SPIT/472-767:0.153,
+(
+Q8ISG8_STYLE/475-767:-0.002,
+Q86CV7_STYLE/475-767:0.019)
+0:0.188)
+0:0.321,
+(
+(
+(
+(
+(
+Q8MQL1_TETTH/444-756:0.000,
+Q8MXZ9_TETTH/444-756:-0.000)
+0:0.000,
+Q23ND1_TETTH/444-756:0.000)
+0:0.454,
+(
+Q3SE50_PARTE/446-748:0.080,
+(
+Q3SE54_PARTE/446-748:0.005,
+Q3SE55_PARTE/446-748:0.011)
+0:0.039)
+0:0.420)
+0:0.012,
+(
+(
+Q3SE56_PARTE/450-741:0.054,
+Q3SE59_PARTE/450-741:0.021)
+0:0.378,
+(
+(
+Q9U5C9_PARCA/466-759:0.162,
+(
+Q3SE53_PARTE/460-752:0.009,
+A0E0B0_PARTE/455-747:0.001)
+0:0.146)
+0:0.025,
+Q3SE49_PARTE/467-759:0.153)
+0:0.090)
+0:0.202)
+0:0.122,
+(
+A8VSS4_TETTH/479-774:0.929,
+(
+A2DXK9_TRIVA/462-624:0.504,
+A1D5I6_NEOFI/71-143:-0.504)
+0:1.025)
+0:0.158)
+0:0.072)
+0:0.115,
+(
+D2V2M6_NAEGR/28-326:0.577,
+D2VMG4_NAEGR/577-883:0.544)
+0:0.100)
+0:0.052)
+0:0.020)
+0:0.184)
+0:0.163,
+(
+O61931_CAEEL/762-1081:0.305,
+(
+(
+A8WPC9_CAEBR/828-1145:0.103,
+A8XN44_CAEBR/716-1005:0.079)
+0:0.033,
+(
+(
+A8XRY5_CAEBR/161-269:0.115,
+A8XS10_CAEBR/818-1134:0.030)
+0:0.061,
+A8XP19_CAEBR/721-1037:0.101)
+0:0.032)
+0:0.167)
+0:0.632)
+0:0.041)
+0:0.009)
+0:0.056)
+0:0.038,
+(
+A7TMA9_VANPO/888-1209:0.582,
+(
+A5E477_LODEL/107-430:0.195,
+(
+C5MCT9_CANTT/554-879:0.139,
+(
+B9WGS3_CANDC/555-882:0.016,
+(
+Q5A1B6_CANAL/296-623:-0.004,
+C4YGL4_CANAL/554-881:0.007)
+0:0.024)
+0:0.108)
+0:0.052)
+0:0.167)
+0:0.171)
+0:0.010)
+0:0.047,
+(
+(
+(
+Q0UCE8_PHANO/551-880:0.293,
+B2WJ35_PYRTR/419-708:0.323)
+0:0.105,
+Q0UCG8_PHANO/473-701:0.371)
+0:0.070,
+(
+Q0UCU3_PHANO/737-1044:0.366,
+(
+Q0UCH0_PHANO/670-999:0.378,
+B2WJ32_PYRTR/383-592:0.633)
+0:0.098)
+0:0.008)
+0:0.125)
+0:0.043)
+0:0.040,
+(
+A6S1V9_BOTFB/6-263:0.463,
+A6SR68_BOTFB/1-284:0.417)
+0:0.026)
+0:0.019,
+(
+(
+D4B128_ARTBE/608-819:0.024,
+D4D326_TRIVC/587-798:0.019)
+0:0.499,
+(
+C4JIN7_UNCRE/692-1007:0.157,
+C5P8C9_COCP7/682-993:0.125)
+0:0.017)
+0:0.183)
+0:0.077,
+A7ISJ0_MYCPJ/514-830:0.333)
+0:0.174,
+B6HRB3_PENCW/625-938:0.283)
+0:0.347)
+;
diff --git a/test/scripts/automated/belvu/test18 b/test/scripts/automated/belvu/test18
new file mode 100755
index 0000000..ac2bbd8
--- /dev/null
+++ b/test/scripts/automated/belvu/test18
@@ -0,0 +1,25 @@
+#!/bin/ksh
+#
+# Description:
+#   Create the tree using uncorrected distances and save
+#   the tree in new-hampshire format (large alignment)
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences to the saved results
+diffs=`belvu -T r -o tree $data_dir/PF02171_full.selex >&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
+
diff --git a/test/scripts/automated/belvu/test18_results b/test/scripts/automated/belvu/test18_results
new file mode 100644
index 0000000..1a5eada
--- /dev/null
+++ b/test/scripts/automated/belvu/test18_results
@@ -0,0 +1,2524 @@
+(
+(
+C7SYH3_THAPS/1070-1160:0.250,
+(
+C7SYH2_PHATR/826-1176:0.105,
+B7G499_PHATR/1-107:0.084)
+0:0.138)
+0:0.117,
+(
+C4V9J2_NOSCE/489-791:0.297,
+(
+(
+(
+(
+(
+(
+(
+B6K0R2_SCHJY/507-805:0.141,
+AGO1_SCHPO/500-798:0.140)
+0:0.147,
+(
+(
+(
+(
+(
+(
+D0U267_CRYPA/639-939:0.182,
+A4QSM3_MAGGR/672-970:0.176)
+0:0.026,
+(
+(
+C7YHP8_NECH7/612-917:0.178,
+(
+C9SSA6_VERA1/19-91:0.057,
+C9SGB5_VERA1/589-897:0.068)
+0:0.126)
+0:0.020,
+(
+A6S388_BOTFB/557-866:0.053,
+A7F377_SCLS1/445-754:0.045)
+0:0.159)
+0:0.009)
+0:0.008,
+B2AKU3_PODAN/441-754:0.215)
+0:0.011,
+(
+Q8J276_NEUCR/628-929:0.101,
+D1ZPU0_SORMA/563-867:0.108)
+0:0.119)
+0:0.025,
+(
+(
+(
+B6Q5R7_PENMQ/547-853:0.087,
+B8M5N8_TALSN/546-852:0.091)
+0:0.125,
+(
+(
+(
+(
+(
+C8V9S4_EMENI/46-154:0.000,
+Q5B3I7_EMENI/46-154:0.000)
+0:0.083,
+(
+(
+(
+Q2UKV9_ASPOR/543-849:0.000,
+B8N3T1_ASPFN/436-742:0.000)
+0:0.089,
+(
+A1CKK4_ASPCL/543-849:0.038,
+(
+A1D6W7_NEOFI/543-849:0.010,
+(
+B0XXP5_ASPFC/564-870:0.000,
+Q4WXX3_ASPFU/564-870:0.000)
+0:0.006)
+0:0.023)
+0:0.053)
+0:0.006,
+Q0CNV7_ASPTN/543-854:0.095)
+0:0.016)
+0:0.013,
+A2QDC5_ASPNC/643-949:0.121)
+0:0.043,
+B6H4L5_PENCW/673-980:0.182)
+0:0.031,
+(
+(
+(
+(
+C1G1H6_PARBD/510-817:0.012,
+C1GU57_PARBA/495-755:0.011)
+0:0.006,
+C0S3N8_PARBP/535-823:0.014)
+0:0.076,
+(
+(
+C5G7J1_AJEDR/547-854:0.000,
+C5JJJ6_AJEDS/547-854:0.000)
+0:0.041,
+(
+(
+C6HRE3_AJECH/547-854:0.000,
+C0NUS8_AJECG/547-854:0.000)
+0:0.001,
+A6RGK9_AJECN/547-854:0.002)
+0:0.043)
+0:0.070)
+0:0.037,
+(
+(
+C5FDD8_NANOT/542-847:0.040,
+(
+D4AMR8_ARTBE/628-933:0.003,
+D4DBM7_TRIVC/515-807:0.011)
+0:0.036)
+0:0.086,
+(
+C5P9D5_COCP7/668-975:0.062,
+C4JZ88_UNCRE/552-859:0.057)
+0:0.065)
+0:0.033)
+0:0.043)
+0:0.017)
+0:0.048,
+(
+Q0U7V7_PHANO/645-956:0.126,
+B2W8P0_PYRTR/611-920:0.114)
+0:0.146)
+0:0.002)
+0:0.043,
+(
+A2DXK9_TRIVA/462-624:0.050,
+A1D5I6_NEOFI/71-143:-0.050)
+0:0.374)
+0:0.028)
+0:0.015,
+(
+(
+(
+(
+(
+(
+C4L1M1_EXISA/321-484:0.136,
+Q70IH5_ARAHA/1-61:-0.136)
+0:0.164,
+B4H1E3_DROPE/6-68:0.238)
+0:0.078,
+A8NFX5_COPC7/531-721:0.273)
+0:0.072,
+(
+B8PJA4_POSPM/353-665:0.243,
+(
+B0DLH7_LACBS/515-821:0.229,
+A8NFX0_COPC7/514-795:0.245)
+0:0.025)
+0:0.040)
+0:0.015,
+(
+A8PFS7_COPC7/454-749:0.273,
+(
+A8NXQ6_COPC7/547-849:0.219,
+(
+A8P6A7_COPC7/477-803:0.238,
+(
+(
+B0CXE0_LACBS/567-880:0.166,
+A8PFQ6_COPC7/458-767:0.169)
+0:0.013,
+(
+B0CYG1_LACBS/553-863:0.148,
+B0D2D0_LACBS/417-738:0.161)
+0:0.008)
+0:0.037)
+0:0.015)
+0:0.028)
+0:0.027)
+0:0.014,
+(
+(
+Q0TWJ6_PHANO/160-297:0.345,
+(
+Q5KAT1_CRYNE/560-859:0.128,
+Q5KAU3_CRYNE/580-879:0.141)
+0:0.140)
+0:0.018,
+(
+(
+(
+A7TMA9_VANPO/888-1209:0.287,
+(
+A5E477_LODEL/107-430:0.150,
+(
+C5MCT9_CANTT/554-879:0.115,
+(
+B9WGS3_CANDC/555-882:0.020,
+(
+Q5A1B6_CANAL/296-623:0.000,
+C4YGL4_CANAL/554-881:0.003)
+0:0.020)
+0:0.091)
+0:0.039)
+0:0.114)
+0:0.041,
+(
+(
+(
+Q2HHM4_CHAGB/694-1033:0.287,
+(
+(
+D0U264_CRYPA/482-802:0.248,
+(
+(
+(
+D1ZJ09_SORMA/711-1030:0.065,
+(
+Q1K6I6_NEUCR/733-1052:0.000,
+Q9P8T1_NEUCR/582-901:0.000)
+0:0.067)
+0:0.099,
+(
+B2AR52_PODAN/574-886:0.147,
+Q2GSQ8_CHAGB/651-969:0.147)
+0:0.015)
+0:0.048,
+(
+A4RL50_MAGGR/721-1039:0.202,
+(
+C9ST09_VERA1/571-888:0.163,
+C7YM23_NECH7/666-978:0.164)
+0:0.039)
+0:0.006)
+0:0.032)
+0:0.019,
+(
+(
+C5GYE6_AJEDR/653-980:0.056,
+C5K303_AJEDS/770-890:0.110)
+0:0.118,
+C0S8I9_PARBP/1049-1137:0.189)
+0:0.078)
+0:0.015)
+0:0.011,
+(
+(
+(
+(
+B6HRB3_PENCW/625-938:0.270,
+A2QG96_ASPNC/558-884:0.266)
+0:0.004,
+(
+C1GSN8_PARBA/1-191:0.212,
+(
+C6H5C6_AJECH/26-168:0.071,
+A6RDB0_AJECN/9-157:0.079)
+0:0.149)
+0:0.108)
+0:0.008,
+(
+D4B128_ARTBE/608-819:0.022,
+D4D326_TRIVC/587-798:0.021)
+0:0.269)
+0:0.007,
+(
+(
+A4R6J1_MAGGR/641-908:0.260,
+(
+(
+(
+(
+(
+(
+B8MQK8_TALSN/682-995:0.075,
+B6QUK3_PENMQ/689-1001:0.083)
+0:0.117,
+C7ZR18_NECH7/19-235:0.197)
+0:0.006,
+(
+(
+(
+B6H0X0_PENCW/641-959:0.164,
+(
+(
+A1C469_ASPCL/690-1008:0.050,
+(
+A1DBD4_NEOFI/680-998:0.018,
+(
+B0Y9U0_ASPFC/686-1004:0.000,
+Q4WC92_ASPFU/686-1004:0.000)
+0:0.020)
+0:0.026)
+0:0.080,
+(
+(
+C8VMQ3_EMENI/660-979:0.000,
+Q5BD61_EMENI/660-979:0.000)
+0:0.134,
+(
+(
+Q0CNH1_ASPTN/643-961:0.103,
+A2R8K3_ASPNC/710-1028:0.116)
+0:0.006,
+(
+B8MXT2_ASPFN/684-1002:0.000,
+Q2US02_ASPOR/573-891:0.000)
+0:0.112)
+0:0.010)
+0:0.002)
+0:0.036)
+0:0.030,
+(
+(
+(
+C5PJP0_COCP7/663-977:0.096,
+C4JG78_UNCRE/651-963:0.086)
+0:0.062,
+(
+(
+C5JDT9_AJEDS/671-859:0.003,
+C5GX22_AJEDR/671-859:0.002)
+0:0.129,
+(
+(
+(
+C1G7F3_PARBD/674-979:0.003,
+C0RZ18_PARBP/688-993:0.000)
+0:0.016,
+(
+C1GXU8_PARBA/683-1002:0.008,
+(
+C5JDT9_AJEDS/580-664:0.000,
+C5GX22_AJEDR/580-664:0.000)
+0:0.094)
+0:0.008)
+0:0.036,
+(
+C0NMG7_AJECG/678-986:0.002,
+(
+C6H291_AJECH/678-997:0.006,
+A6RB60_AJECN/291-610:0.007)
+0:0.003)
+0:0.043)
+0:0.089)
+0:0.006)
+0:0.015,
+(
+(
+D4ANV6_ARTBE/642-958:0.000,
+D4CZ86_TRIVC/642-958:0.000)
+0:0.056,
+C5FGF6_NANOT/649-965:0.058)
+0:0.112)
+0:0.020)
+0:0.006,
+(
+B2WES9_PYRTR/643-967:0.061,
+(
+(
+A6QW60_AJECN/639-963:0.026,
+B8MGF3_TALSN/2-137:0.104)
+0:0.012,
+B6QWK7_PENMQ/644-968:0.035)
+0:0.030)
+0:0.132)
+0:0.005)
+0:0.013,
+(
+Q96UM0_BLUGR/565-886:0.151,
+(
+A7E4W2_SCLS1/692-1008:0.052,
+A6RK26_BOTFB/654-970:0.053)
+0:0.102)
+0:0.063)
+0:0.003,
+D0U265_CRYPA/712-1038:0.224)
+0:0.011,
+D0U266_CRYPA/635-957:0.251)
+0:0.016)
+0:0.007,
+(
+B8N7A8_ASPFN/617-954:0.002,
+Q2UBS9_ASPOR/578-915:0.001)
+0:0.274)
+0:0.014)
+0:0.008)
+0:0.004,
+(
+(
+(
+(
+C4JIN7_UNCRE/692-1007:0.122,
+C5P8C9_COCP7/682-993:0.115)
+0:0.047,
+C5FBF4_NANOT/570-628:0.186)
+0:0.059,
+(
+B2VW51_PYRTR/606-910:0.131,
+Q0UNU9_PHANO/666-973:0.126)
+0:0.083)
+0:0.039,
+(
+(
+B0D488_LACBS/608-916:0.115,
+A8P0D4_COPC7/619-925:0.114)
+0:0.096,
+(
+A8P2K4_COPC7/589-903:0.103,
+B0E0C2_LACBS/610-916:0.121)
+0:0.117)
+0:0.040)
+0:0.015)
+0:0.014)
+0:0.006,
+(
+(
+B2WJ98_PYRTR/213-541:0.297,
+(
+A7ISJ0_MYCPJ/514-830:0.270,
+(
+A6S1V9_BOTFB/6-263:0.272,
+A6SR68_BOTFB/1-284:0.261)
+0:0.014)
+0:0.008)
+0:0.019,
+(
+(
+(
+Q0UCE8_PHANO/551-880:0.210,
+B2WJ35_PYRTR/419-708:0.220)
+0:0.056,
+(
+Q0UCU3_PHANO/737-1044:0.245,
+(
+Q0UCG8_PHANO/473-701:0.246,
+Q0UCH0_PHANO/670-999:0.243)
+0:0.009)
+0:0.013)
+0:0.034,
+B2WJ32_PYRTR/383-592:0.324)
+0:0.016)
+0:0.010)
+0:0.001)
+0:0.018)
+0:0.004)
+0:0.006,
+(
+(
+(
+(
+(
+(
+B9S0P9_RICCO/17-119:0.199,
+B9SSM8_RICCO/639-934:0.093)
+0:0.107,
+(
+(
+Q9SHF2_ARATH/841-1145:0.106,
+(
+Q9SHF3_ARATH/665-965:0.000,
+Q8GX33_ARATH/191-491:0.000)
+0:0.102)
+0:0.087,
+(
+(
+A5AFZ6_VITVI/719-1022:0.097,
+(
+A5CBU3_VITVI/601-900:0.025,
+A5B8D3_VITVI/625-924:0.025)
+0:0.077)
+0:0.020,
+(
+B9NA51_POPTR/676-973:0.091,
+B9S3I1_RICCO/146-445:0.097)
+0:0.020)
+0:0.055)
+0:0.034)
+0:0.018,
+(
+(
+(
+(
+A3AXD9_ORYSJ/720-1023:0.000,
+A2XXJ0_ORYSI/688-991:0.000)
+0:0.000,
+AGO3_ORYSJ/720-1023:0.000)
+0:0.000,
+Q00RR5_ORYSA/745-1048:0.000)
+0:0.118,
+(
+(
+(
+B9FCH7_ORYSJ/626-928:0.000,
+AGO2_ORYSJ/687-989:0.000)
+0:0.003,
+(
+Q00RR6_ORYSA/693-995:0.000,
+A2XXI9_ORYSI/693-995:0.000)
+0:0.006)
+0:0.081,
+(
+C5YG12_SORBI/746-1048:0.046,
+C0PIX4_MAIZE/1-297:0.042)
+0:0.045)
+0:0.023)
+0:0.108)
+0:0.063,
+(
+(
+Q4PLA9_PICGL/597-913:0.168,
+(
+(
+(
+A5BG74_VITVI/577-717:0.183,
+O48771_ARATH/542-860:0.119)
+0:0.013,
+(
+(
+(
+(
+AGO16_ORYSJ/535-844:0.000,
+B8B4Z4_ORYSI/515-824:0.000)
+0:0.000,
+B9FWI9_ORYSJ/515-824:0.000)
+0:0.050,
+(
+C0P9X1_MAIZE/1-253:0.007,
+C5YU43_SORBI/1-285:-0.003)
+0:0.036)
+0:0.076,
+(
+B9T7B0_RICCO/516-824:0.082,
+(
+B9IAL0_POPTR/521-830:0.053,
+A5CB61_VITVI/15-305:0.055)
+0:0.025)
+0:0.040)
+0:0.008)
+0:0.026,
+(
+Q3E984_ARATH/528-708:0.160,
+(
+(
+Q56X15_ARATH/234-541:0.002,
+Q84VQ0_ARATH/546-853:0.001)
+0:0.003,
+Q84YI4_ARATH/550-857:0.004)
+0:0.101)
+0:0.046)
+0:0.006)
+0:0.020,
+(
+(
+(
+Q9ZVD5_ARATH/577-885:0.111,
+(
+(
+(
+(
+(
+AGO4A_ORYSJ/557-865:0.000,
+B8ACN1_ORYSI/524-832:0.000)
+0:0.000,
+A2ZRR6_ORYSJ/650-958:0.000)
+0:0.051,
+(
+C0HGZ0_MAIZE/552-859:0.015,
+B4FL08_MAIZE/45-352:0.015)
+0:0.037)
+0:0.028,
+(
+C5YX36_SORBI/564-870:0.045,
+(
+(
+B8AUX7_ORYSI/565-872:0.000,
+AGO4B_ORYSJ/565-872:0.000)
+0:0.000,
+Q01MP5_ORYSA/565-872:0.000)
+0:0.040)
+0:0.039)
+0:0.017,
+(
+B9HK80_POPTR/565-884:0.079,
+(
+B9SP45_RICCO/574-882:0.063,
+(
+Q2LFC1_NICBE/558-866:0.052,
+Q2LFC2_NICBE/565-873:0.051)
+0:0.017)
+0:0.011)
+0:0.017)
+0:0.015)
+0:0.011,
+(
+(
+A5AMR1_VITVI/53-183:0.074,
+(
+B9HDH5_POPTR/582-891:0.013,
+B9IHG7_POPTR/573-882:0.012)
+0:0.056)
+0:0.012,
+B9SN14_RICCO/570-878:0.083)
+0:0.042)
+0:0.013,
+(
+B9EV67_ORYSJ/22-172:0.015,
+(
+B8ACN0_ORYSI/540-670:0.002,
+AGO15_ORYSJ/546-853:0.006)
+0:0.015)
+0:0.119)
+0:0.052)
+0:0.105)
+0:0.006,
+(
+(
+(
+A9SKW0_PHYPA/518-721:0.320,
+(
+(
+(
+A9RNH7_PHYPA/593-893:0.091,
+A9U2A5_PHYPA/597-903:0.086)
+0:0.020,
+A9SRY5_PHYPA/573-879:0.119)
+0:0.046,
+(
+A9SKW0_PHYPA/722-774:0.170,
+A9TD99_PHYPA/2-180:0.123)
+0:0.039)
+0:0.093)
+0:0.026,
+(
+(
+AGO17_ORYSJ/514-834:0.000,
+B8AII3_ORYSI/514-834:0.000)
+0:0.201,
+(
+C5WX34_SORBI/1-43:0.239,
+(
+(
+C0PDS4_MAIZE/580-888:-0.032,
+B7ZXH7_MAIZE/580-736:0.038)
+0:0.073,
+C5WR49_SORBI/585-661:0.114)
+0:0.131)
+0:0.028)
+0:0.093)
+0:0.015,
+(
+D0MT95_PHYIN/497-796:0.109,
+(
+D0MT54_PHYIN/891-1191:0.084,
+D0MT94_PHYIN/524-824:0.080)
+0:0.033)
+0:0.168)
+0:0.009)
+0:0.003,
+(
+(
+B2RFN0_OIKDI/550-850:0.314,
+C1DZY0_9CHLO/572-888:0.274)
+0:0.010,
+(
+(
+(
+(
+(
+(
+A8JAG8_CHLRE/672-990:0.061,
+A8J9T3_CHLRE/1058-1164:0.028)
+0:0.158,
+(
+Q8H714_PHYIN/1-173:-0.024,
+(
+D0N1C0_PHYIN/587-890:0.011,
+D0N1B9_PHYIN/587-890:0.012)
+0:0.012)
+0:0.197)
+0:0.034,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+C3ZN91_BRAFL/470-771:0.026,
+C3ZQ22_BRAFL/680-848:0.009)
+0:0.033,
+D2XMQ5_SACKO/1-219:0.051)
+0:0.012,
+(
+(
+B7QCC4_IXOSC/509-810:0.037,
+(
+(
+(
+(
+(
+(
+(
+A9NJ58_PENMO/569-898:-0.000,
+A7XZ43_PENMO/569-898:0.003)
+0:0.000,
+D2XYX4_PENJP/572-901:-0.000)
+0:0.000,
+A9NJ57_PENMO/572-901:-0.000)
+0:0.000,
+D2DK65_PENJP/572-901:-0.000)
+0:0.000,
+D2DK66_PENJP/569-898:-0.000)
+0:0.001,
+Q071E1_PENMO/569-898:0.005)
+0:0.053,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+A9QW17_TRICA/69-158:0.056,
+Q27IQ2_DROSI/554-851:-0.034)
+0:0.017,
+Q27IR0_DROME/554-851:-0.017)
+0:0.010,
+B4P449_DROYA/624-926:-0.007)
+0:0.004,
+B4JW20_DROGR/647-949:-0.004)
+0:0.002,
+Q7KY08_DROME/607-909:-0.002)
+0:0.001,
+B3NRF4_DROER/624-926:-0.001)
+0:0.000,
+B4INL3_DROSE/624-926:-0.000)
+0:0.000,
+B4GGS7_DROPE/642-944:-0.000)
+0:0.000,
+Q28ZU1_DROPS/642-944:-0.000)
+0:0.000,
+B3MHG1_DROAN/641-943:-0.000)
+0:0.000,
+Q32KD4_DROME/641-943:-0.000)
+0:0.000,
+Q960T1_DROME/258-560:-0.000)
+0:0.002,
+Q8T059_DROME/81-383:0.002)
+0:0.001,
+(
+B4LJF3_DROVI/646-948:0.000,
+B4KTB5_DROMO/643-945:0.000)
+0:0.002)
+0:0.002,
+B4N5V9_DROWI/642-944:0.004)
+0:0.009,
+(
+(
+(
+B0WFU8_CULQU/621-923:0.000,
+Q7PZ41_ANOGA/638-940:0.000)
+0:0.000,
+Q16EE2_AEDAE/482-784:0.000)
+0:0.000,
+Q16M62_AEDAE/604-906:0.000)
+0:0.013)
+0:0.009,
+A7BJS5_BOMMO/569-871:0.031)
+0:0.015)
+0:0.003)
+0:0.026,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+Q4S7L6_TETNG/228-304:0.055,
+Q8CGU0_MOUSE/527-843:-0.040)
+0:0.023,
+Q8BJP2_MOUSE/364-665:-0.018)
+0:0.009,
+A2VDG1_MOUSE/513-814:-0.009)
+0:0.005,
+D2H607_AILME/507-808:-0.005)
+0:0.002,
+B2RAD8_HUMAN/515-816:-0.002)
+0:0.001,
+Q5TA58_HUMAN/440-741:-0.001)
+0:0.001,
+A1L365_MOUSE/515-816:-0.001)
+0:0.000,
+AGO1_HUMAN/515-816:-0.000)
+0:0.001,
+AGO1_MOUSE/515-816:0.002)
+0:0.001,
+D4AC38_RAT/515-816:0.003)
+0:0.002,
+B3KME0_HUMAN/440-741:0.008)
+0:0.001,
+Q4S7L5_TETNG/517-818:0.005)
+0:0.054,
+(
+Q8CGT7_MOUSE/576-634:0.062,
+(
+(
+(
+D2HF39_AILME/511-813:0.003,
+(
+(
+AGO2_RAT/517-819:0.002,
+(
+(
+(
+(
+(
+(
+(
+(
+A1A563_MOUSE/517-819:-0.013,
+Q8CGT9_MOUSE/501-743:0.013)
+0:0.006,
+AGO2_RABIT/497-799:-0.006)
+0:0.003,
+B0JYP5_BOVIN/517-819:-0.003)
+0:0.002,
+Q6PHA2_MOUSE/94-396:-0.002)
+0:0.001,
+AGO2_HUMAN/516-818:-0.001)
+0:0.000,
+A4FVC0_HUMAN/465-767:-0.000)
+0:0.000,
+Q8R3Q7_MOUSE/187-489:-0.000)
+0:0.000,
+AGO2_MOUSE/517-819:-0.000)
+0:0.001)
+0:0.001,
+(
+AGO2_BOVIN/517-819:0.002,
+Q6P239_MOUSE/277-579:0.005)
+0:0.001)
+0:0.001)
+0:0.003,
+(
+(
+AGO2_XENLA/519-821:0.000,
+C0IN02_XENLA/519-821:0.000)
+0:0.000,
+AGO2_XENTR/528-830:0.000)
+0:0.006)
+0:0.016,
+(
+Q4RKH3_TETNG/508-822:0.002,
+(
+C9V4A2_CTEID/306-581:0.005,
+B0F0Y5_9TELE/526-828:-0.005)
+0:0.005)
+0:0.025)
+0:0.017)
+0:0.012)
+0:0.015)
+0:0.007)
+0:0.006,
+(
+(
+D4A2P5_RAT/843-954:-0.004,
+(
+(
+(
+(
+(
+(
+Q4R7V5_MACFA/1-211:0.006,
+AGO4_HUMAN/509-820:-0.001)
+0:0.001,
+A7MD27_HUMAN/509-820:-0.001)
+0:0.001,
+(
+(
+D2H608_AILME/505-816:-0.001,
+(
+D4A2P5_RAT/513-742:0.044,
+(
+(
+AGO4_MOUSE/509-820:-0.022,
+Q8CGT8_MOUSE/660-885:0.026)
+0:0.011,
+Q8BTF2_MOUSE/35-346:-0.011)
+0:0.005)
+0:0.009)
+0:0.000,
+Q9NXV9_HUMAN/35-346:-0.000)
+0:0.001)
+0:0.001,
+AGO4_CHICK/442-753:0.002)
+0:0.005,
+AGO4_XENLA/532-843:0.008)
+0:0.012,
+Q4SVE6_TETNG/553-864:0.020)
+0:0.009)
+0:0.032,
+Q8CGT8_MOUSE/1000-1102:0.027)
+0:0.031)
+0:0.006,
+B3VCG6_STRPU/599-900:0.088)
+0:0.007,
+(
+Q4SXU1_TETNG/1-206:0.094,
+(
+Q4TF92_TETNG/239-305:0.000,
+Q4TBP2_TETNG/868-934:0.000)
+0:0.013)
+0:0.049)
+0:0.001,
+(
+B2RFN1_OIKDI/771-1072:0.072,
+C8TEF3_OIKDI/573-874:0.084)
+0:0.020)
+0:0.007,
+(
+C4Q6D1_SCHMA/608-835:0.013,
+Q5C3Y0_SCHJA/4-157:-0.007)
+0:0.080)
+0:0.005,
+A7RQ46_NEMVE/511-812:0.101)
+0:0.011,
+(
+A8WKF9_CAEBR/562-864:0.085,
+(
+A8P168_BRUMA/623-925:0.049,
+(
+(
+Q86B39_CAEEL/547-848:0.000,
+O16720_CAEEL/566-867:0.000)
+0:0.026,
+(
+(
+(
+B2L7Q3_CAERE/1-268:-0.000,
+A8X4Z3_CAEBR/691-992:0.000)
+0:0.001,
+B2L7P9_CAERE/1-269:-0.001)
+0:0.002,
+(
+(
+Q3LTR7_CAEEL/668-969:0.000,
+Q20578_CAEEL/660-961:0.000)
+0:0.000,
+B6VQ75_CAEEL/681-982:0.000)
+0:0.002)
+0:0.020)
+0:0.019)
+0:0.032)
+0:0.044)
+0:0.014,
+(
+(
+(
+AGO3_DANRE/518-819:0.019,
+(
+A3KFX7_MOUSE/1-109:0.004,
+(
+(
+Q7M738_MOUSE/426-707:0.005,
+(
+Q3TBP7_MOUSE/518-819:0.000,
+AGO3_MOUSE/518-819:0.000)
+0:0.002)
+0:0.001,
+(
+(
+AGO3_BOVIN/518-820:0.009,
+(
+(
+(
+(
+(
+D2H606_AILME/513-814:0.000,
+AGO3_HUMAN/518-819:0.000)
+0:0.000,
+B4DY67_HUMAN/154-455:0.000)
+0:0.000,
+B1ALI0_HUMAN/284-585:0.000)
+0:0.000,
+A8KA05_HUMAN/518-819:0.000)
+0:0.000,
+B4E1P5_HUMAN/346-647:0.000)
+0:0.001)
+0:0.001,
+AGO3_CHICK/518-819:0.002)
+0:0.001)
+0:0.002)
+0:0.008)
+0:0.006,
+(
+A3KFX6_MOUSE/1-140:-0.008,
+Q4TBP2_TETNG/578-853:0.045)
+0:0.010)
+0:0.021,
+Q4TF92_TETNG/161-225:0.093)
+0:0.082)
+0:0.041,
+A7SCI6_NEMVE/496-743:0.226)
+0:0.031,
+Q8CGT7_MOUSE/455-570:0.277)
+0:0.021)
+0:0.016,
+(
+(
+B3SEP3_TRIAD/438-734:0.226,
+(
+(
+Q5DFJ9_SCHJA/2-164:0.080,
+(
+Q5DG80_SCHJA/3-99:-0.006,
+(
+Q5DCI0_SCHJA/265-566:0.032,
+C4QPD0_SCHMA/628-928:0.028)
+0:0.024)
+0:0.074)
+0:0.035,
+(
+C4QPD2_SCHMA/595-831:0.051,
+C4QPD1_SCHMA/595-896:-0.006)
+0:0.137)
+0:0.101)
+0:0.009,
+(
+(
+(
+A8NJ50_BRUMA/1-61:-0.007,
+A8NGN0_BRUMA/1-135:0.007)
+0:0.079,
+(
+TAG76_CAEEL/660-966:0.009,
+(
+A8XA10_CAEBR/683-989:0.005,
+(
+Q7JLZ2_CAEEL/652-958:0.000,
+Q21079_CAEEL/655-961:0.000)
+0:0.005)
+0:0.004)
+0:0.096)
+0:0.134,
+(
+B7QBT5_IXOSC/313-623:0.223,
+(
+B7Q990_IXOSC/474-787:0.205,
+(
+B7Q811_IXOSC/611-920:0.145,
+B7P230_IXOSC/468-776:0.146)
+0:0.051)
+0:0.023)
+0:0.005)
+0:0.016)
+0:0.014)
+0:0.001,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+AGO1_ARATH/676-997:0.000,
+Q3ECU7_ARATH/678-999:0.000)
+0:0.039,
+(
+(
+A1E5M2_PEA/696-1017:0.026,
+(
+Q2PEW1_TRIPR/1-247:-0.003,
+A1E5M3_PEA/726-1047:0.015)
+0:0.009)
+0:0.007,
+(
+Q2LFC4_NICBE/678-999:0.023,
+(
+B9SJV6_RICCO/687-1008:0.017,
+(
+B9I4Y6_POPTR/688-1009:0.003,
+B9N365_POPTR/308-629:0.003)
+0:0.014)
+0:0.004)
+0:0.007)
+0:0.009)
+0:0.006,
+(
+(
+C5YY05_SORBI/736-1058:0.024,
+B4FGY3_MAIZE/13-335:0.026)
+0:0.007,
+(
+(
+(
+B8AGF0_ORYSI/693-1014:0.000,
+B9F1L3_ORYSJ/693-1014:0.000)
+0:0.000,
+AGO1A_ORYSJ/709-1030:0.000)
+0:0.021,
+(
+(
+(
+C5YE15_SORBI/712-1033:0.001,
+C0HEU9_MAIZE/87-408:0.002)
+0:0.002,
+(
+(
+B9FC11_ORYSJ/374-695:0.000,
+AGO1B_ORYSJ/746-1067:0.000)
+0:0.000,
+B8AT34_ORYSI/729-1050:0.000)
+0:0.004)
+0:0.006,
+C7J0V9_ORYSJ/1-271:-0.006)
+0:0.009)
+0:0.012)
+0:0.012)
+0:0.007,
+(
+Q2LFC3_NICBE/604-925:0.036,
+B1B5A8_DAUCA/736-1057:0.038)
+0:0.015)
+0:0.006,
+(
+A9T6J3_PHYPA/524-842:0.042,
+(
+A9RG03_PHYPA/598-919:0.013,
+A9RTW5_PHYPA/744-1065:0.012)
+0:0.030)
+0:0.018)
+0:0.015,
+(
+(
+(
+(
+(
+PINH_ARATH/625-946:0.006,
+B0FHH7_BRANA/614-935:0.010)
+0:0.009,
+(
+B9RTJ1_RICCO/626-947:0.012,
+(
+B9HKB5_POPTR/631-952:0.004,
+B9HUQ6_POPTR/452-776:0.005)
+0:0.005)
+0:0.005)
+0:0.020,
+(
+(
+(
+PNH1_ORYSJ/620-941:0.000,
+B9FU05_ORYSJ/458-779:0.000)
+0:0.007,
+C5Z5J6_SORBI/617-938:0.005)
+0:0.005,
+C0PNQ0_MAIZE/1-267:0.004)
+0:0.022)
+0:0.007,
+B9STN2_RICCO/586-907:0.045)
+0:0.013,
+A5ARQ9_VITVI/592-892:0.069)
+0:0.020)
+0:0.007,
+(
+(
+(
+(
+B8B2X0_ORYSI/647-968:0.000,
+AGO1D_ORYSJ/669-990:0.000)
+0:0.000,
+B9FR04_ORYSJ/644-965:0.000)
+0:0.018,
+C5Z2L1_SORBI/643-964:0.019)
+0:0.019,
+(
+C5XWS2_SORBI/656-978:0.018,
+(
+B8AFI6_ORYSI/637-958:0.001,
+AGO1C_ORYSJ/638-959:0.002)
+0:0.016)
+0:0.015)
+0:0.047)
+0:0.053,
+(
+(
+(
+B9MTL4_POPTR/505-810:0.090,
+(
+B9SCN8_RICCO/632-949:0.077,
+(
+B9HQS2_POPTR/635-955:0.044,
+B9GEQ1_POPTR/548-869:0.044)
+0:0.030)
+0:0.013)
+0:0.012,
+AGOL_ARATH/638-958:0.101)
+0:0.026,
+(
+(
+B8ALC4_ORYSI/596-877:0.019,
+(
+AGO13_ORYSJ/471-770:0.013,
+B9F6E0_ORYSJ/564-783:-0.013)
+0:0.015)
+0:0.050,
+(
+(
+(
+MEL1_ORYSJ/696-1016:0.000,
+B8ALC8_ORYSI/696-1016:0.000)
+0:0.001,
+A3ANP6_ORYSJ/644-982:0.002)
+0:0.025,
+C5WX38_SORBI/703-1025:0.031)
+0:0.018)
+0:0.073)
+0:0.013)
+0:0.003,
+(
+(
+C5WPM0_SORBI/900-1216:0.084,
+(
+(
+AGO12_ORYSJ/693-1012:0.000,
+B9FAL8_ORYSJ/438-757:0.000)
+0:0.010,
+A2XKQ7_ORYSI/654-972:0.002)
+0:0.078)
+0:0.013,
+(
+(
+C5WPM1_SORBI/697-1047:0.039,
+C0PMV6_MAIZE/89-412:0.035)
+0:0.043,
+(
+B8APJ4_ORYSI/9-101:0.111,
+(
+B9FEW4_ORYSJ/531-767:0.005,
+AGO11_ORYSJ/541-848:0.009)
+0:0.053)
+0:0.029)
+0:0.011)
+0:0.044)
+0:0.014,
+(
+(
+(
+(
+B7ZZW2_MAIZE/663-969:0.004,
+(
+Q7FS89_MAIZE/11-170:0.008,
+Q8S478_MAIZE/38-188:0.005)
+0:0.016)
+0:0.056,
+C5XBU2_SORBI/675-995:0.059)
+0:0.024,
+C5X6M9_SORBI/1-69:0.222)
+0:0.049,
+(
+(
+B9FVX3_ORYSJ/462-794:0.000,
+AGO14_ORYSJ/677-1009:0.000)
+0:0.000,
+B8B7Y0_ORYSI/653-985:0.003)
+0:0.134)
+0:0.021)
+0:0.046,
+(
+Q0DZI9_ORYSJ/119-248:0.112,
+(
+B8AFF9_ORYSI/534-832:0.066,
+B9F134_ORYSJ/36-347:0.087)
+0:0.009)
+0:0.147)
+0:0.023,
+(
+(
+Q0DZJ0_ORYSJ/35-101:-0.028,
+B9IL53_POPTR/1-160:0.028)
+0:0.178,
+(
+(
+(
+A5BG29_VITVI/774-895:0.061,
+(
+(
+A5BW27_VITVI/926-1238:0.066,
+(
+B9S921_RICCO/670-981:0.039,
+B9HXP0_POPTR/520-831:0.038)
+0:0.018)
+0:0.012,
+D3GBV1_LOTJA/669-981:0.079)
+0:0.016)
+0:0.016,
+Q9C793_ARATH/649-950:0.104)
+0:0.027,
+(
+(
+(
+A3AJI1_ORYSJ/584-892:0.000,
+AGO7_ORYSJ/709-1017:0.000)
+0:0.000,
+A2YQ96_ORYSI/716-1024:0.000)
+0:0.057,
+(
+D0EYF3_MAIZE/683-995:0.019,
+C5WVP1_SORBI/688-996:0.017)
+0:0.046)
+0:0.072)
+0:0.041)
+0:0.070)
+0:0.012,
+(
+(
+(
+(
+B9FX53_ORYSJ/672-981:0.000,
+AGO18_ORYSJ/747-1056:0.000)
+0:0.008,
+B8B5Y3_ORYSI/745-1054:0.008)
+0:0.142,
+C5X8G4_SORBI/699-1002:0.144)
+0:0.024,
+(
+C5X8G7_SORBI/41-220:0.146,
+C5WR49_SORBI/670-825:0.125)
+0:0.062)
+0:0.074)
+0:0.011)
+0:0.009,
+B9ZU55_9TURB/580-893:0.297)
+0:0.009)
+0:0.003)
+0:0.002)
+0:0.006,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+Q2GQS4_CHAGB/345-418:0.059,
+B0WE95_CULQU/32-179:-0.059)
+0:0.271,
+C3ZKW1_BRAFL/534-739:0.242)
+0:0.047,
+(
+(
+(
+B2Z3D6_SCHMD/665-960:0.013,
+D2Z0E0_DUGJA/657-952:0.014)
+0:0.242,
+(
+(
+D2A2S9_TRICA/552-839:0.246,
+(
+(
+(
+(
+A9ZSZ2_BOMMO/619-912:0.000,
+A7BJS3_BOMMO/619-912:0.000)
+0:0.010,
+A7LNN5_BOMMO/2-193:-0.005)
+0:0.208,
+(
+B4N2M0_DROWI/49-131:0.199,
+(
+B4JP35_DROGR/334-622:0.149,
+(
+(
+B7FNN2_DROME/566-845:0.005,
+(
+(
+(
+A7YFW6_DROME/299-494:0.019,
+B6IDV1_DROME/574-861:-0.013)
+0:0.007,
+Q7PLK0_DROME/566-853:-0.007)
+0:0.003,
+A4GND8_DROME/566-853:-0.003)
+0:0.004)
+0:0.003,
+A4GUJ7_DROME/566-848:0.009)
+0:0.128)
+0:0.040)
+0:0.043)
+0:0.018,
+(
+Q7PWT1_ANOGA/618-916:0.136,
+(
+B0WE96_CULQU/634-782:0.076,
+Q170R5_AEDAE/637-930:0.013)
+0:0.138)
+0:0.087)
+0:0.009)
+0:0.004,
+(
+(
+(
+B7QEM1_IXOSC/88-370:0.192,
+(
+(
+A7SQI3_NEMVE/441-733:0.001,
+A7T7C9_NEMVE/1-180:0.023)
+0:0.154,
+(
+C3Z5S8_BRAFL/570-730:0.160,
+B0FLQ9_STRPU/653-945:0.127)
+0:0.032)
+0:0.018)
+0:0.029,
+(
+(
+PIWL2_XENTR/644-935:0.096,
+(
+(
+D2H044_AILME/665-956:0.017,
+(
+D3ZRE1_RAT/666-957:0.000,
+PIWL2_MOUSE/666-957:0.000)
+0:0.021)
+0:0.002,
+PIWL2_HUMAN/668-959:0.019)
+0:0.077)
+0:0.063,
+(
+(
+(
+PIWL2_ONCMY/749-1040:0.052,
+(
+PIWL2_DANRE/741-1032:0.009,
+A5PL40_DANRE/7-278:0.010)
+0:0.036)
+0:0.058,
+B9U224_ORYLA/729-1020:0.107)
+0:0.016,
+Q4RPK4_TETNG/383-660:0.122)
+0:0.038)
+0:0.064)
+0:0.019,
+(
+(
+C9E0T2_APIME/1-294:-0.008,
+C9E0S9_APIME/551-753:0.018)
+0:0.008,
+C9E0S8_APIME/604-898:0.000)
+0:0.222)
+0:0.014)
+0:0.009)
+0:0.017,
+B9ZU54_9TURB/593-893:0.275)
+0:0.011)
+0:0.013,
+(
+(
+(
+(
+(
+(
+B7PDV6_IXOSC/541-835:0.134,
+B7Q5I1_IXOSC/446-741:0.163)
+0:0.093,
+(
+(
+(
+(
+(
+(
+(
+(
+Q0H8V5_9CNID/70-239:0.127,
+(
+A7RFC2_NEMVE/557-857:-0.030,
+A7T755_NEMVE/2-70:0.030)
+0:0.120)
+0:0.043,
+(
+Q6RSS9_PODCA/561-853:0.109,
+B2KTD9_9CNID/559-850:0.118)
+0:0.015)
+0:0.019,
+(
+D1LXB5_SACKO/1-252:0.089,
+(
+C3XV22_BRAFL/1831-1964:0.108,
+C3XV20_BRAFL/551-843:0.038)
+0:0.073)
+0:0.043)
+0:0.020,
+Q3ZUK2_PLADU/35-327:0.154)
+0:0.023,
+(
+Q9GPA6_STRPU/114-407:0.000,
+(
+Q9GPA7_STRPU/547-808:0.005,
+Q9GPA8_STRPU/547-840:-0.001)
+0:0.003)
+0:0.211)
+0:0.005,
+(
+(
+PIWL1_DANRE/552-844:0.083,
+B9U223_ORYLA/549-841:0.085)
+0:0.016,
+(
+(
+Q4T9Z1_TETNG/519-587:0.030,
+Q4T9Y6_TETNG/521-792:-0.015)
+0:0.028,
+Q4T9Y9_TETNG/1-228:0.009)
+0:0.104)
+0:0.101)
+0:0.017,
+B5BUZ0_9ASCI/567-860:0.221)
+0:0.001,
+(
+(
+(
+C3XV23_BRAFL/67-195:0.090,
+(
+PIWL1_CHICK/561-853:0.083,
+(
+PIWL1_HUMAN/555-847:0.015,
+(
+D2HWM8_AILME/555-847:0.006,
+(
+PIWL1_MOUSE/556-848:0.000,
+D3ZTP9_RAT/556-848:0.000)
+0:0.008)
+0:0.012)
+0:0.075)
+0:0.051)
+0:0.027,
+(
+C3XV22_BRAFL/1173-1299:0.049,
+C3XV22_BRAFL/2983-3180:0.003)
+0:0.129)
+0:0.039,
+(
+B4DYF7_HUMAN/569-859:-0.001,
+PIWL3_HUMAN/578-868:0.001)
+0:0.208)
+0:0.022)
+0:0.011)
+0:0.020,
+(
+(
+PIWL4_HUMAN/546-838:0.076,
+D2I3M6_AILME/487-786:0.071)
+0:0.067,
+(
+(
+A6X965_MOUSE/3-172:0.043,
+(
+PIWL4_RAT/541-834:0.032,
+PIWL4_MOUSE/541-834:0.033)
+0:0.034)
+0:0.006,
+D3ZDI3_RAT/541-827:0.100)
+0:0.061)
+0:0.131)
+0:0.012,
+(
+A8XEN9_CAEBR/501-812:0.062,
+(
+Q17567_CAEEL/397-708:0.015,
+P90786_CAEEL/499-810:0.014)
+0:0.041)
+0:0.231)
+0:0.003,
+(
+(
+(
+C9E0T4_APIME/497-785:0.000,
+C9E0T3_APIME/525-813:0.000)
+0:0.192,
+(
+A7LM14_BOMMO/414-612:0.017,
+A8D8P8_BOMMO/594-885:-0.017)
+0:0.216)
+0:0.049,
+(
+(
+(
+(
+Q7QG53_ANOGA/576-875:0.086,
+(
+(
+(
+Q16IF2_AEDAE/569-868:0.000,
+Q16ZS2_AEDAE/361-660:0.000)
+0:0.017,
+Q16ZS3_AEDAE/562-861:0.019)
+0:0.052,
+(
+(
+B0W5T3_CULQU/510-809:0.000,
+B0W5P0_CULQU/552-851:0.000)
+0:0.051,
+(
+Q171B3_AEDAE/547-846:0.010,
+B0W5T4_CULQU/546-845:0.014)
+0:0.044)
+0:0.010)
+0:0.016)
+0:0.109,
+(
+Q5TW24_ANOGA/530-829:0.185,
+(
+(
+(
+Q16JS1_AEDAE/576-874:0.112,
+(
+Q176R2_AEDAE/633-931:0.089,
+(
+B0XE75_CULQU/501-788:0.072,
+Q16JS2_AEDAE/571-869:0.071)
+0:0.016)
+0:0.015)
+0:0.029,
+B0XE74_CULQU/592-891:0.145)
+0:0.023,
+B0WYL9_CULQU/560-857:0.169)
+0:0.024)
+0:0.005)
+0:0.023,
+(
+(
+(
+B4P152_DROYA/546-844:0.032,
+B3N4Z9_DROER/546-844:0.028)
+0:0.038,
+(
+(
+(
+Q95PE5_DROME/1-176:0.037,
+A8DYZ0_DROME/483-781:-0.007)
+0:0.004,
+O76922_DROME/554-852:-0.004)
+0:0.041,
+(
+B4Q9X4_DROSI/545-843:0.006,
+B4HWZ3_DROSE/549-847:0.007)
+0:0.029)
+0:0.037)
+0:0.031,
+(
+(
+(
+(
+B4LV39_DROVI/546-843:0.050,
+B4KHC1_DROMO/539-836:0.047)
+0:0.012,
+(
+B3MJZ7_DROAN/562-859:0.038,
+(
+B4G765_DROPE/541-838:0.007,
+Q29P29_DROPS/540-837:0.007)
+0:0.028)
+0:0.022)
+0:0.009,
+B4JBE4_DROGR/542-839:0.068)
+0:0.011,
+(
+(
+B4MUA1_DROWI/563-860:0.000,
+B4MUA0_DROWI/539-836:0.000)
+0:0.039,
+B4N6U3_DROWI/34-103:0.048)
+0:0.040)
+0:0.022)
+0:0.124)
+0:0.012,
+(
+(
+B4JBE1_DROGR/574-864:0.083,
+(
+B4KHB7_DROMO/577-867:0.081,
+B4LV36_DROVI/558-849:0.069)
+0:0.013)
+0:0.021,
+(
+B4MU97_DROWI/591-882:0.095,
+(
+(
+(
+B4G753_DROPE/334-531:0.025,
+Q29CN1_DROPS/543-834:-0.014)
+0:0.078,
+(
+(
+B3N502_DROER/538-829:0.010,
+B4P149_DROYA/538-829:0.010)
+0:0.011,
+(
+(
+(
+(
+Q6NNZ4_DROME/552-843:0.000,
+C0PTU6_DROME/566-857:0.000)
+0:0.000,
+PIWI_DROME/538-829:0.000)
+0:0.000,
+Q6NP34_DROME/566-857:0.003)
+0:0.017,
+(
+B4Q9X1_DROSI/538-829:0.002,
+B4HWY9_DROSE/538-829:0.005)
+0:0.010)
+0:0.003)
+0:0.055)
+0:0.012,
+B3MJZ4_DROAN/563-854:0.078)
+0:0.019)
+0:0.009)
+0:0.132)
+0:0.021)
+0:0.027)
+0:0.017,
+B9ZU53_9TURB/586-879:0.298)
+0:0.009)
+0:0.003,
+(
+(
+(
+PIWI1_SCHMD/493-790:0.030,
+D2Z0D8_DUGJA/494-791:0.034)
+0:0.146,
+(
+PIWIL_DUGJA/502-800:0.103,
+(
+PIWI2_SCHMD/516-815:0.025,
+D2Z0D9_DUGJA/512-810:0.021)
+0:0.076)
+0:0.072)
+0:0.120,
+B9ZU52_9TURB/589-885:0.284)
+0:0.028)
+0:0.012,
+(
+D2V2M6_NAEGR/28-326:0.308,
+D2VMG4_NAEGR/577-883:0.295)
+0:0.021)
+0:0.014,
+(
+Q54HL3_DICDI/867-1166:0.309,
+(
+(
+(
+Q7KWS3_DICDI/669-964:0.102,
+Q54G64_DICDI/590-885:0.092)
+0:0.154,
+(
+D3B338_POLPA/992-1287:0.232,
+D3BMP8_POLPA/633-929:0.235)
+0:0.018)
+0:0.022,
+(
+Q1ZXG9_DICDI/1063-1281:0.182,
+Q86HF5_DICDI/896-1194:0.185)
+0:0.090)
+0:0.027)
+0:0.039)
+0:0.004,
+(
+D2V7J4_NAEGR/498-769:0.378,
+C5LD15_9ALVE/718-952:0.353)
+0:0.018)
+0:0.001,
+(
+(
+(
+(
+C4LVV2_ENTHI/470-756:0.021,
+B0ET37_ENTDI/470-756:0.018)
+0:0.310,
+(
+B0ENU6_ENTDI/467-753:0.061,
+C4LVQ2_ENTHI/467-753:0.063)
+0:0.278)
+0:0.041,
+(
+(
+(
+Q0Q5B1_9SPIT/472-767:0.137,
+(
+Q8ISG8_STYLE/475-767:0.007,
+Q86CV7_STYLE/475-767:0.010)
+0:0.137)
+0:0.155,
+(
+(
+(
+(
+Q8MQL1_TETTH/444-756:0.000,
+Q8MXZ9_TETTH/444-756:0.000)
+0:0.000,
+Q23ND1_TETTH/444-756:0.000)
+0:0.271,
+(
+Q3SE50_PARTE/446-748:0.061,
+(
+Q3SE54_PARTE/446-748:0.008,
+Q3SE55_PARTE/446-748:0.009)
+0:0.048)
+0:0.222)
+0:0.010,
+(
+(
+Q3SE56_PARTE/450-741:0.038,
+Q3SE59_PARTE/450-741:0.034)
+0:0.201,
+(
+(
+Q9U5C9_PARCA/466-759:0.130,
+(
+Q3SE53_PARTE/460-752:0.006,
+A0E0B0_PARTE/455-747:0.005)
+0:0.123)
+0:0.009,
+Q3SE49_PARTE/467-759:0.134)
+0:0.081)
+0:0.062)
+0:0.029)
+0:0.015,
+(
+A8VSS4_TETTH/479-774:0.323,
+C5LD15_9ALVE/568-697:0.367)
+0:0.043)
+0:0.017)
+0:0.007,
+(
+(
+(
+(
+(
+(
+Q3SD94_PARTE/460-750:0.000,
+A0D4I7_PARTE/320-610:0.000)
+0:0.191,
+Q3SD95_PARTE/471-760:0.194)
+0:0.021,
+A0CE33_PARTE/2-210:0.254)
+0:0.074,
+(
+(
+A0DEE4_PARTE/478-780:0.009,
+Q3SE57_PARTE/478-788:0.011)
+0:0.202,
+(
+Q3SE52_PARTE/466-770:0.040,
+(
+Q3SE58_PARTE/466-770:0.000,
+A0CB11_PARTE/463-767:0.000)
+0:0.043)
+0:0.189)
+0:0.053)
+0:0.063,
+(
+(
+(
+(
+A4ZYY5_TETTH/495-793:0.150,
+(
+(
+A4VE06_TETTH/14-183:0.020,
+(
+Q6UE79_TETTH/497-791:0.002,
+Q0GM58_TETTH/497-791:0.001)
+0:0.034)
+0:0.012,
+A4VE05_TETTH/347-645:0.053)
+0:0.102)
+0:0.105,
+(
+Q22NE2_TETTH/491-777:0.007,
+A8VSR3_TETTH/491-787:0.004)
+0:0.272)
+0:0.034,
+(
+A4ZYY4_TETTH/474-761:0.002,
+Q24HU6_TETTH/383-631:0.027)
+0:0.321)
+0:0.056,
+(
+Q0MRE2_TETTH/533-834:0.000,
+Q239A3_TETTH/603-904:0.000)
+0:0.344)
+0:0.008)
+0:0.017,
+(
+A0CR14_PARTE/559-847:0.000,
+Q3SE51_PARTE/572-860:0.000)
+0:0.375)
+0:0.008)
+0:0.008)
+0:0.003,
+(
+A2DPV7_TRIVA/501-794:0.364,
+(
+(
+Q86QW7_GIALA/412-736:0.000,
+A8BCK6_GIALA/555-879:0.000)
+0:0.163,
+C6LTG5_GIALA/555-877:0.149)
+0:0.233)
+0:0.015)
+0:0.006,
+(
+(
+(
+(
+(
+C4LY31_ENTHI/438-711:0.025,
+B0EI01_ENTDI/438-710:0.031)
+0:0.373,
+A0D5D7_PARTE/374-640:0.411)
+0:0.021,
+(
+A4ZYY6_TETTH/491-831:0.000,
+Q23AZ6_TETTH/491-831:0.000)
+0:0.413)
+0:0.005,
+(
+(
+(
+(
+(
+(
+(
+(
+B7R785_9THEO/119-333:0.353,
+Q11QW7_CYTH3/390-605:0.360)
+0:0.012,
+(
+(
+(
+(
+(
+Q9L1X1_STRCO/365-661:0.283,
+(
+D2M4C5_RHOPA/151-447:0.247,
+A3VQY4_9PROT/445-745:0.241)
+0:0.050)
+0:0.022,
+C1F5Q7_ACIC5/440-735:0.307)
+0:0.003,
+(
+B9MH92_ACIET/439-730:0.283,
+(
+A5D4D9_PELTS/458-756:0.256,
+A0LL61_SYNFM/455-750:0.269)
+0:0.031)
+0:0.021)
+0:0.012,
+D0BWJ3_9GAMM/401-693:0.329)
+0:0.011,
+(
+A4WYU7_RHOS5/454-756:0.261,
+B7K585_CYAP8/439-744:0.237)
+0:0.086)
+0:0.051)
+0:0.008,
+Q1PV30_9BACT/383-655:0.385)
+0:0.006,
+(
+D2QY15_PIRSD/353-529:0.345,
+D2QGL1_SPILD/333-520:0.350)
+0:0.053)
+0:0.005,
+PIWI_ARCFU/110-406:0.402)
+0:0.019,
+(
+(
+Q96Z85_SULTO/134-346:0.410,
+O67434_AQUAE/419-694:0.376)
+0:0.022,
+(
+A3VPN8_9PROT/165-321:0.370,
+D1JFX3_9ARCH/159-437:0.350)
+0:0.061)
+0:0.003)
+0:0.008,
+(
+(
+(
+Q8U3D2_PYRFU/474-756:0.360,
+(
+D3S0S6_FERPL/490-768:0.298,
+(
+Y1321_METJA/426-699:0.091,
+C7P7E7_METFA/420-692:0.094)
+0:0.207)
+0:0.058)
+0:0.016,
+(
+B6YTQ5_THEON/463-751:0.347,
+D3S7P9_9EURY/531-824:0.355)
+0:0.041)
+0:0.016,
+B5IR12_9EURY/528-819:0.400)
+0:0.020)
+0:0.003,
+(
+(
+(
+B4B3R2_9CHRO/1-219:0.269,
+(
+A0YYT3_9CYAN/471-752:0.222,
+(
+A8YDH3_MICAE/463-734:0.030,
+B0JXD6_MICAN/462-734:0.026)
+0:0.193)
+0:0.032)
+0:0.129,
+(
+(
+Q53W94_THET8/418-669:0.000,
+Q746M7_THET2/418-669:0.000)
+0:0.314,
+(
+B1XJG0_SYNP2/307-599:0.310,
+(
+(
+Q2JSR3_SYNJA/437-712:0.140,
+Q2JI93_SYNJB/454-728:0.154)
+0:0.058,
+(
+Q8DKB1_THEEB/458-739:0.179,
+(
+Q5MZ10_SYNP6/441-718:0.002,
+Q31N05_SYNE7/441-718:0.002)
+0:0.186)
+0:0.030)
+0:0.119)
+0:0.016)
+0:0.041)
+0:0.015,
+(
+(
+B0ADC8_9CLOT/432-721:0.269,
+(
+C6QUV9_9BACI/2-48:0.093,
+B7GJX9_ANOFW/423-692:0.081)
+0:0.212)
+0:0.097,
+(
+C1V6Q1_9EURY/608-882:0.345,
+B9LVW4_HALLT/464-658:0.349)
+0:0.022)
+0:0.013)
+0:0.013)
+0:0.018)
+0:0.006,
+(
+(
+(
+A4HBN9_LEIBR/872-1190:0.124,
+(
+A4HZ40_LEIIN/904-1226:0.032,
+Q4QCH4_LEIMA/899-1221:0.034)
+0:0.103)
+0:0.157,
+(
+Q4DYG9_TRYCR/791-1083:0.181,
+(
+(
+Q6T6J9_9TRYP/784-1082:0.000,
+D0A1P1_TRYBG/784-1082:0.000)
+0:0.000,
+Q38C22_9TRYP/783-1081:0.000)
+0:0.177)
+0:0.103)
+0:0.133,
+(
+(
+A4HH63_LEIBR/16-225:0.000,
+A4H6I4_LEIBR/673-882:0.000)
+0:0.334,
+(
+Q6T6K0_9TRYP/549-877:0.009,
+(
+D0A4M3_TRYBG/571-899:0.002,
+Q389P5_9TRYP/560-888:0.001)
+0:0.009)
+0:0.324)
+0:0.085)
+0:0.011)
+0:0.011)
+0:0.013,
+(
+(
+A8Q5F0_BRUMA/545-849:0.332,
+(
+(
+Q21691_CAEEL/673-1001:0.198,
+(
+A8WNJ6_CAEBR/660-987:0.062,
+A8WS47_CAEBR/435-755:0.059)
+0:0.123)
+0:0.061,
+(
+(
+A8WQA0_CAEBR/671-998:0.148,
+(
+Q9TXN7_CAEEL/609-935:0.128,
+(
+C8JQR1_CAEEL/591-918:0.061,
+YQ53_CAEEL/650-977:0.064)
+0:0.066)
+0:0.026)
+0:0.074,
+(
+Q9N3L7_CAEEL/585-911:0.201,
+A8XZY0_CAEBR/665-992:0.202)
+0:0.032)
+0:0.012)
+0:0.108)
+0:0.022,
+(
+(
+(
+(
+(
+Q27GU1_CAEEL/511-833:0.000,
+Q19645_CAEEL/674-996:0.000)
+0:0.059,
+A8XRG0_CAEBR/648-970:0.056)
+0:0.297,
+(
+A8P7Z4_BRUMA/1-302:0.308,
+(
+(
+(
+(
+(
+A8XEJ5_CAEBR/552-849:0.098,
+(
+(
+Q86S33_CAEEL/548-852:0.000,
+Q9GZG4_CAEEL/548-852:0.000)
+0:0.002,
+(
+(
+Q86NJ8_CAEEL/548-852:0.000,
+B3KLZ7_CAEEL/358-662:0.000)
+0:0.000,
+O02095_CAEEL/574-878:0.000)
+0:0.002)
+0:0.102)
+0:0.106,
+A8X254_CAEBR/555-701:0.275)
+0:0.009,
+O16386_CAEEL/548-847:0.224)
+0:0.039,
+A8XUC0_CAEBR/563-774:0.277)
+0:0.056,
+Q8MU01_HETGL/598-705:0.358)
+0:0.028)
+0:0.023)
+0:0.004,
+(
+A8QE08_BRUMA/711-1030:0.324,
+(
+(
+A8WWH9_CAEBR/55-193:0.175,
+Q17600_CAEEL/19-157:0.188)
+0:0.205,
+(
+Q9XVF1_CAEEL/588-902:0.205,
+A8WWI1_CAEBR/598-920:0.223)
+0:0.123)
+0:0.013)
+0:0.014)
+0:0.014,
+(
+(
+Q8MU01_HETGL/745-963:0.297,
+(
+(
+A8XFJ6_CAEBR/595-895:0.130,
+(
+Q23415_CAEEL/40-350:0.052,
+(
+GCC7_CAEEL/596-906:0.033,
+P91085_CAEEL/543-853:0.034)
+0:0.015)
+0:0.073)
+0:0.085,
+(
+(
+A8WJ71_CAEBR/596-953:0.047,
+A8X957_CAEBR/565-899:0.043)
+0:0.155,
+(
+O62275_CAEEL/594-924:0.160,
+Q9N585_CAEEL/604-934:0.161)
+0:0.029)
+0:0.018)
+0:0.107)
+0:0.044,
+(
+(
+A8X254_CAEBR/749-889:0.278,
+(
+A8X023_CAEBR/600-841:0.274,
+Q21495_CAEEL/61-336:0.277)
+0:0.023)
+0:0.040,
+A8X022_CAEBR/492-805:0.354)
+0:0.045)
+0:0.002)
+0:0.009)
+0:0.020)
+0:0.005,
+(
+B8BT49_THAPS/780-963:0.063,
+C7SYH3_THAPS/780-1048:0.052)
+0:0.343)
+0:0.016,
+(
+(
+Q0U676_PHANO/647-830:0.302,
+A9QW19_TRICA/79-190:0.244)
+0:0.115,
+(
+(
+(
+(
+Q0DZI9_ORYSJ/36-107:0.049,
+B0LJQ7_CULTA/1-148:-0.049)
+0:0.208,
+(
+(
+B0WRW8_CULQU/638-943:0.113,
+(
+C5J0H4_AEDAE/655-961:0.072,
+B0LJQ8_AEDTR/1-254:0.050)
+0:0.034)
+0:0.040,
+Q5TVL2_ANOGA/535-839:0.141)
+0:0.046)
+0:0.022,
+B0X641_CULQU/527-832:0.223)
+0:0.048,
+(
+(
+C4WWR5_ACYPI/1-266:0.232,
+Q59HV7_BOMMO/706-1006:0.258)
+0:0.008,
+(
+(
+(
+(
+(
+B5DIM9_DROPS/1-71:0.001,
+(
+B5DIM7_DROPS/517-815:0.016,
+B4G6N0_DROPE/517-815:0.021)
+0:0.017)
+0:0.014,
+B4G6N2_DROPE/1-37:-0.005)
+0:0.027,
+B4G6N7_DROPE/19-133:0.042)
+0:0.037,
+(
+B4IWV1_DROGR/788-1091:0.091,
+(
+B4LH85_DROVI/152-457:0.070,
+B4KUJ5_DROMO/715-1017:0.065)
+0:0.022)
+0:0.017)
+0:0.036,
+(
+(
+(
+B4NLX0_DROWI/695-993:0.080,
+B4N082_DROWI/579-877:0.074)
+0:0.016,
+(
+(
+(
+(
+B3NI38_DROER/838-1138:0.022,
+(
+(
+Q2Q3X0_9MUSC/506-806:0.003,
+(
+(
+(
+(
+(
+(
+Q2Q3X2_DROYA/506-806:0.000,
+Q2Q3X7_DROYA/506-806:0.000)
+0:0.000,
+Q2Q3X4_DROYA/506-806:0.000)
+0:0.000,
+B4PCH3_DROYA/843-1143:0.000)
+0:0.000,
+Q2Q3X6_DROYA/506-806:0.000)
+0:0.000,
+Q2Q3X8_DROYA/506-806:0.000)
+0:0.000,
+B4IU14_DROYA/810-1110:0.000)
+0:0.003)
+0:0.003,
+Q2Q3X1_DROTE/424-724:0.004)
+0:0.016)
+0:0.041,
+(
+(
+C7LAD2_DROME/888-1187:0.000,
+AGO2_DROME/885-1184:0.000)
+0:0.028,
+(
+(
+Q2Q3W2_DROSI/511-810:-0.010,
+(
+Q2Q3W9_DROSI/511-810:-0.019,
+B4NVX8_DROSI/80-259:0.030)
+0:0.011)
+0:0.005,
+Q2Q3W7_DROSI/511-810:-0.005)
+0:0.037)
+0:0.025)
+0:0.013,
+(
+B4HIG2_DROSE/1-224:0.040,
+B4QL34_DROSI/606-729:-0.006)
+0:0.040)
+0:0.014,
+B3M505_DROAN/688-988:0.087)
+0:0.012)
+0:0.016,
+(
+(
+(
+(
+(
+(
+(
+B4GTA7_DROPE/448-747:0.001,
+B4GTA5_DROPE/448-747:0.002)
+0:0.001,
+B4HDJ4_DROPE/40-339:0.002)
+0:0.006,
+B5DT30_DROPS/694-993:0.006)
+0:0.005,
+B4GTA6_DROPE/448-736:0.007)
+0:0.019,
+(
+B4ISF4_DROPE/14-227:0.044,
+B5DKZ0_DROPS/2-120:0.047)
+0:0.027)
+0:0.048,
+(
+(
+(
+B4GDQ8_DROPE/669-968:0.000,
+B4GDQ6_DROPE/661-960:0.000)
+0:0.015,
+(
+(
+B5DYR9_DROPS/651-950:0.006,
+B5DYR8_DROPS/41-340:0.000)
+0:0.006,
+B5DU45_DROPS/389-589:0.073)
+0:0.013)
+0:0.053,
+(
+(
+B5DY62_DROPS/643-942:0.004,
+B4GFG0_DROPE/449-748:0.003)
+0:0.034,
+(
+B4GUA7_DROPE/624-923:0.007,
+B5DQH3_DROPS/471-770:0.006)
+0:0.028)
+0:0.026)
+0:0.015)
+0:0.017,
+B5DWW4_DROPS/3-186:0.130)
+0:0.021)
+0:0.030)
+0:0.120)
+0:0.012)
+0:0.015)
+0:0.023)
+0:0.006,
+(
+(
+(
+(
+(
+B8PBB9_POSPM/331-616:0.023,
+(
+B8PFP7_POSPM/371-656:0.003,
+B8PN24_POSPM/140-415:0.004)
+0:0.020)
+0:0.350,
+(
+(
+Q10P03_ORYSJ/678-756:0.000,
+B9F6T7_ORYSJ/653-731:0.000)
+0:0.000,
+B8AK97_ORYSI/622-700:0.000)
+0:0.365)
+0:0.017,
+(
+C5K8K7_9ALVE/727-977:0.347,
+(
+(
+(
+(
+(
+B9Q8Q1_TOXGO/379-692:-0.000,
+(
+B9PJN3_TOXGO/379-693:0.000,
+Q1L2C8_TOXGO/379-693:0.000)
+0:0.000)
+0:0.000,
+Q1L1E2_TOXGO/161-474:-0.000)
+0:0.000,
+B6KA84_TOXGO/379-692:-0.000)
+0:0.000,
+Q1L2C9_TOXGO/379-692:-0.000)
+0:0.000,
+D2JRZ7_TOXGO/582-895:-0.000)
+0:0.354)
+0:0.024)
+0:0.009,
+(
+A8J0N0_CHLRE/619-933:0.041,
+A8J0M9_CHLRE/675-993:0.045)
+0:0.280)
+0:0.008,
+(
+O61931_CAEEL/762-1081:0.214,
+(
+(
+A8WPC9_CAEBR/828-1145:0.084,
+A8XN44_CAEBR/716-1005:0.079)
+0:0.034,
+(
+(
+A8XRY5_CAEBR/161-269:0.064,
+A8XS10_CAEBR/818-1134:0.070)
+0:0.033,
+A8XP19_CAEBR/721-1037:0.103)
+0:0.013)
+0:0.097)
+0:0.156)
+0:0.004)
+0:0.007)
+0:0.004,
+(
+(
+A9T108_PHYPA/1-169:-0.117,
+C6XVE0_PEDHD/320-460:0.117)
+0:0.370,
+(
+A8PVW7_BRUMA/492-800:0.284,
+(
+B6VBQ1_CAEBE/1034-1381:0.191,
+(
+A8XVL1_CAEBR/571-952:0.192,
+(
+O46002_CAEEL/57-176:0.118,
+Q9XU82_CAEEL/618-985:0.138)
+0:0.052)
+0:0.009)
+0:0.132)
+0:0.017)
+0:0.014)
+0:0.004,
+(
+A8WWP9_CAEBR/632-910:0.130,
+Q9XVI3_CAEEL/574-882:0.110)
+0:0.225)
+0:0.017)
+0:0.023)
+;
diff --git a/test/scripts/automated/belvu/test19 b/test/scripts/automated/belvu/test19
new file mode 100755
index 0000000..f41716d
--- /dev/null
+++ b/test/scripts/automated/belvu/test19
@@ -0,0 +1,24 @@
+#!/bin/ksh
+#
+# Description:
+#   Print the distance matrix
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences to the saved results
+diffs=`belvu -p $data_dir/PF02171_full.selex >&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
+
diff --git a/test/scripts/automated/belvu/test19_results b/test/scripts/automated/belvu/test19_results
new file mode 100644
index 0000000..1f2029a
--- /dev/null
+++ b/test/scripts/automated/belvu/test19_results
@@ -0,0 +1,2 @@
+Amino
+0.066611 0.023377 0.048324 0.041934 0.039061 0.059998 0.033464 0.064728 0.059290 0.082839 0.021297 0.045031 0.051180 0.048569 0.056190 0.063069 0.059432 0.083770 0.007218 0.044619 
diff --git a/test/scripts/automated/belvu/test1_results b/test/scripts/automated/belvu/test1_results
new file mode 100644
index 0000000..51cd3c6
--- /dev/null
+++ b/test/scripts/automated/belvu/test1_results
@@ -0,0 +1,226 @@
+PileUp
+
+ automated/belvu/../../../data/PF02171_seed.stock  MSF: 412  Type: X  Check: 4875  ..
+
+  Name: YQ53_CAEEL/650-977        Len:    412  Check:   5009  Weight: 1.0000
+  Name: Q21691_CAEEL/673-1001     Len:    412  Check:   9881  Weight: 1.0000
+  Name: O48771_ARATH/542-860      Len:    412  Check:    634  Weight: 1.0000
+  Name: Q9ZVD5_ARATH/577-885      Len:    412  Check:   2274  Weight: 1.0000
+  Name: TAG76_CAEEL/660-966       Len:    412  Check:   8804  Weight: 1.0000
+  Name: O16720_CAEEL/566-867      Len:    412  Check:   7433  Weight: 1.0000
+  Name: PINH_ARATH/625-946        Len:    412  Check:   7730  Weight: 1.0000
+  Name: AGO1_SCHPO/500-799        Len:    412  Check:   1021  Weight: 1.0000
+  Name: O76922_DROME/555-852      Len:    412  Check:   4289  Weight: 1.0000
+  Name: PIWI_DROME/538-829        Len:    412  Check:   7323  Weight: 1.0000
+  Name: Q17567_CAEEL/397-708      Len:    412  Check:   4176  Weight: 1.0000
+  Name: PIWL1_HUMAN/555-847       Len:    412  Check:   9105  Weight: 1.0000
+  Name: PIWI_ARCFU/110-406        Len:    412  Check:   5661  Weight: 1.0000
+  Name: Y1321_METJA/426-699       Len:    412  Check:   5582  Weight: 1.0000
+  Name: O67434_AQUAE/419-694      Len:    412  Check:   5245  Weight: 1.0000
+  Name: Q21495_CAEEL/52-336       Len:    412  Check:   8897  Weight: 1.0000
+  Name: O16386_CAEEL/548-847      Len:    412  Check:   7301  Weight: 1.0000
+  Name: O02095_CAEEL/574-878      Len:    412  Check:   5686  Weight: 1.0000
+  Name: Q19645_CAEEL/674-996      Len:    412  Check:   5696  Weight: 1.0000
+  Name: Q23415_CAEEL/40-350       Len:    412  Check:   7766  Weight: 1.0000
+  Name: O62275_CAEEL/594-924      Len:    412  Check:   2375  Weight: 1.0000
+
+//
+
+YQ53_CAEEL/650-977        DILVGIAR.E KKPD.VHDIL KYFEESIGLQ TIQLCQQTVD KM.....MG. 
+Q21691_CAEEL/673-1001     TIVFGIIA.E KRPD.MHDIL KYFEEKLGQQ TIQISSETAD KF.....MR. 
+O48771_ARATH/542-860      FILCILPERK TSDI.YGPWK KICLTEEGIH TQCICPIKI. .......... 
+Q9ZVD5_ARATH/577-885      FILCVLPDKK NSDL.YGPWK KKNLTEFGIV TQCMAPTRQP ND........ 
+TAG76_CAEEL/660-966       CIIVVLQS.K NSDI.YMTVK EQSDIVHGIM SQCVLMKNVS RP........ 
+O16720_CAEEL/566-867      LIVVVLPG.. KTPI.YAEVK RVGDTVLGIA TQCVQAKNAI RT........ 
+PINH_ARATH/625-946        LLLAILPD.N NGSL.YGDLK RICETELGLI SQCCLTKHVF KI........ 
+AGO1_SCHPO/500-799        YLFFILDK.N SPEP.YGSIK RVCNTMLGVP SQCAISKHIL QS........ 
+O76922_DROME/555-852      IVMVVMRS.P NEEK.YSCIK KRTCVDRPVP SQVVTLKVIA PR.....QQ. 
+PIWI_DROME/538-829        LILCLVPN.D NAER.YSSIK KRGYVDRAVP TQVVTLKTTK NR.....SL. 
+Q17567_CAEEL/397-708      MLVVMLAD.D NKTR.YDSLK KYLCVECPIP NQCVNLRTLA GK.....SKD 
+PIWL1_HUMAN/555-847       IVVCLLSS.N RKDK.YDAIK KYLCTDCPTP SQCVVARTLG KQ.....QT. 
+PIWI_ARCFU/110-406        GIMLVLPE.Y NTPL.YYKLK SYLINS..IP SQFMRYDILS NR.....NL. 
+Y1321_METJA/426-699       CFALIIGKEK YKDNDYYEIL KKQLFDLKII SQNILWENWR KD.....DK. 
+O67434_AQUAE/419-694      LVIVFLEEYP KVDP.YKSFL LYDFVKRELL KKMIPSQVIL NR.....TL. 
+Q21495_CAEEL/52-336       GIVLPTPRIF FRDG...... ....QETSLN NQSFRNPT.. .......... 
+O16386_CAEEL/548-847      QLIMFITK.. SMNN.YHTEI KCLEQEFDLL TQDIRFETAV KL.....AQ. 
+O02095_CAEEL/574-878      QLLFFVVK.. SRYN.YHQQI KALEQKYDVL TQEIRAETAE KV.....FR. 
+Q19645_CAEEL/674-996      PFVLFISD.. DVPN.IHECL KFEERMSDIP TQHVLLKNVK KMRDNIEKKS 
+Q23415_CAEEL/40-350       KFAFVITD.D SITH.LHKKY KALEQKSMMV IQDMKISKAN SV.....VK. 
+O62275_CAEEL/594-924      TFVFIITD.D SITT.LHQRY KMIEKDTKMI VQDMKLSKAL SV........ 
+
+YQ53_CAEEL/650-977        ...GQGGRQT IDNVMRKFNL KCGGTNFFVE IPNAVRGKAV CSNNETLRKK 
+Q21691_CAEEL/673-1001     ...DHGGKQT IDNVIRKLNP KCGGTNFLID VPESVGHRVV CNNSAEMRAK 
+O48771_ARATH/542-860      ......SDQY LTNVLLKINS KLGGINS.LL GIEYSYNIPL INKIPTL... 
+Q9ZVD5_ARATH/577-885      ........QY LTNLLLKINA KLGGLNS.ML SVERTPAFTV ISKVPTI... 
+TAG76_CAEEL/660-966       ......TPAT CANIVLKLNM KMGGIN..SR IVADKITNKY LVDQPTM... 
+O16720_CAEEL/566-867      ......TPQT LSNLCLKMNV KLGGVNS.IL LPNVRPR... IFNEPVI... 
+PINH_ARATH/625-946        ......SKQY LANVSLKINV KMGGRNT.VL VDAISCRIPL VSDIPTI... 
+AGO1_SCHPO/500-799        ......KPQY CANLGMKINV KVGGINC.SL IPKSNP.... LGNVPTL... 
+O76922_DROME/555-852      ..KPTGLMSI ATKVVIQMNA KLMGA...PW QVVIPL.... ...HGLM... 
+PIWI_DROME/538-829        .......MSI ATKIAIQLNC KLGYT...PW MIELPL.... ...SGLM... 
+Q17567_CAEEL/397-708      GGENKNLGSI VLKIVLQMIC KTGGA...LW KVNIPL.... ...KSTM... 
+PIWL1_HUMAN/555-847       ......VMAI ATKIALQMNC KMGGE...LW RVDIPL.... ...KLVM... 
+PIWI_ARCFU/110-406        .......TFY VDNLLVQFVS KLGGK...PW ILNVDPEK.. .......... 
+Y1321_METJA/426-699       .......GYM TNNLLIQIMG KLGIK...YF ILDSKTPYDY .......... 
+O67434_AQUAE/419-694      ..KNENLKFV LLNVAEQVLA KTGNIP..YK LKEIEGKVDA .......... 
+Q21495_CAEEL/52-336       .......DFA QTGFFVDAKQ QLGGLN..YV VNS.....ET WNDSGLL... 
+O16386_CAEEL/548-847      ......QQNT RKNIIYKTNM KLGGLN..YE LRS.....GV FSNSKRL... 
+O02095_CAEEL/574-878      ......QPQT RLNIINKTNM KLGGLN..YA IGS.....EA FNKPNRL... 
+Q19645_CAEEL/674-996      QGGRRAYDLT LDNIVMKANI KCGGLN..YT .ADIPRDLAC WNEVSTF... 
+Q23415_CAEEL/40-350       ....DGKRLT LENVINKTNM KLGGLN..YT VSDAKKSMT. ...DEQL... 
+O62275_CAEEL/594-924      ..INAGKRLT LENVINKTNV KLGGSN..YV FVDAKKQL.. ...DSHL... 
+
+YQ53_CAEEL/650-977        LLEHVQFIGF EISHGASRTL FDRSRSQMDG EPSVVGVSYS LT...NSTQL 
+Q21691_CAEEL/673-1001     LYAKTQFIGF EMSHTGARTR FDIQKVMFDG DPTVVGVAYS L..KHSAQLG 
+O48771_ARATH/542-860      ......ILGM DVSHGPPGR. ........AD VPSVAAVVGS KCWPLISRYR 
+Q9ZVD5_ARATH/577-885      ......ILGM DVSHGSPGQ. ........SD VPSIAAVVSS REWPLISKYR 
+TAG76_CAEEL/660-966       ......VVGI DVTHPTQAE. ......MRMN MPSVAAIVAN VD.LLPQSYG 
+O16720_CAEEL/566-867      ......FLGC DITHPAAGD. ........TR KPSIAAVVGS MD.AHPSRYA 
+PINH_ARATH/625-946        ......IFGA DVTHPENGE. ........ES SPSIAAVVAS QDWPEVTKYA 
+AGO1_SCHPO/500-799        ......ILGG DVYHPGVGA. .........T GVSIASIVAS VD.LNGCKYT 
+O76922_DROME/555-852      ......TVGF DVCHSPKNK. .......... NKSYGAFVAT MDQKESFRYF 
+PIWI_DROME/538-829        ......TIGF DIAKSTRDR. .......... KRAYGALIAS MDLQQNSTYF 
+Q17567_CAEEL/397-708      ......IVGY DLYHDSTLK. .......... GKTVGACVST TS.NDFTQFY 
+PIWL1_HUMAN/555-847       ......IVGI DCYHDMTAG. .......... RRSIAGFVAS IN.EGMTRWF 
+PIWI_ARCFU/110-406        ........GS DIIIGTGAT. .......RID NVNLFCFAMV FK.KDGTMLW 
+Y1321_METJA/426-699       ......IMGL DTGLGIFGN. .......... .HRVGGCTVV YDSEGKIRRI 
+O67434_AQUAE/419-694      ......FVGI DISRITRDG. .........K TVNAVAFTKI FNSKGELVRY 
+Q21495_CAEEL/52-336       ......LIGL STAPYLNSY. .......SSE NVTTIGFVSN TM.DHPQKFA 
+O16386_CAEEL/548-847      ......IIGF ETSQRGGLG. .........D APIAIGFAAN MM.SHSQQFA 
+O02095_CAEEL/574-878      ......IVGF VTSQRVGGN. ........PD YPISVGFAAN ML.KHHQKFA 
+Q19645_CAEEL/674-996      ......VIGM DVAHPDRNA. ......AREG NPSTVGLSCN SA.ENPYSFI 
+Q23415_CAEEL/40-350       ......IIGV GVSAPPAGT. KYMMDNKGHL NPQIIGFASN A..VANHEFV 
+O62275_CAEEL/594-924      ......IIGV GISAPPAGT. KYAMENKGVL NPNVIGYAYN A..QHNQEFS 
+
+YQ53_CAEEL/650-977        GGFTYLQTQK EYKLQKLDE. .......... .FFPKCVRSY KEHSKT.LPT 
+Q21691_CAEEL/673-1001     GFSYFQESRL HKLTN.LQE. .......... .KMQICLNAY EQSSSY.LPE 
+O48771_ARATH/542-860      AAVRTQSPRL EMIDSLFQP. .IENTEKGDN GIMNELFVEF YRTSRARKPK 
+Q9ZVD5_ARATH/577-885      ASVRTQPSKA EMIESLVKK. ....NGTEDD GIIKELLVDF YTSSNKRKPE 
+TAG76_CAEEL/660-966       ANVKVQKKCR ESVVY.LLD. .......... .AIRERIITF YRHTKQ.KPA 
+O16720_CAEEL/566-867      ATVRVQQHRQ EIITD.LTY. .......... .MVRELLVQF YRNTRF.KPA 
+PINH_ARATH/625-946        GLVCAQAHRQ ELIQDLYKTW QDPVRGTVSG GMIRDLLISF RKATGQ.KPL 
+AGO1_SCHPO/500-799        AVSRSQPRHQ EVIEG.MKD. .......... .IVVYLLQGF RAMTKQ.QPQ 
+O76922_DROME/555-852      STVNEHIKGQ ELSEQ.MSV. .......... .NMACALRSY QEQHRS.LPE 
+PIWI_DROME/538-829        STV.TECSAF DVLANTLWP. .......... .MIAKALRQY QHEHRK.LPS 
+Q17567_CAEEL/397-708      SQTRPHENPT QLGNN.LTH. .......... .FVRKSLKQY YDNNDKTLPS 
+PIWL1_HUMAN/555-847       SRCIFQDRGQ ELVDG.LKV. .......... .CLQAALRAW .NSCNEYMPS 
+PIWI_ARCFU/110-406        NEISPIVTSS EYLTY.LKS. .......... .TIKKVVYGF KKSNPDWDVE 
+Y1321_METJA/426-699       QPIETPAPGE RLHLP..... .......... .YVIEYLEN. .KANIDMENK 
+O67434_AQUAE/419-694      YLTSYPAFGE KLTEK..... .......... .AIGDVFSLL EKLGF.KKGS 
+Q21495_CAEEL/52-336       GGYKYVKSGS DVFGQVMPE. .......... .ILLNSLRSA RKARKI.KPM 
+O16386_CAEEL/548-847      GGYMFVKKSA DNYGPVIPE. .......... .ILLTILKQA KANRPNDRPD 
+O02095_CAEEL/574-878      GGYVYVHRDR DVFGSIIKD. .......... .TLLAIFKTC TEQRG..RPD 
+Q19645_CAEEL/674-996      GDFLYTDPRR EAIQDEILR. .......... KFTDQSVRNF AEIRG..FPK 
+Q23415_CAEEL/40-350       GDFVLAPSGQ DTMAS.IED. .......... .VLKSSIDLF EMNRNT.LPK 
+O62275_CAEEL/594-924      GDFVLNSASQ DTLAP.IED. .......... .IVMHSLNEY QKFHDGGLPR 
+
+YQ53_CAEEL/650-977        RIVIYRVGAG EGNFNRVKE. EVEEMRRTFD .......KIQ .PGYR..PHL 
+Q21691_CAEEL/673-1001     TVVVYRVGSG EGDYPQIVN. EVNEMKLAAR .......KKK .HGYN..PKF 
+O48771_ARATH/542-860      QIIIFRDGVS ESQFEQVLKI EVDQIIKAYQ .......RLG .ESDV..PKF 
+Q9ZVD5_ARATH/577-885      HIIIFRDGVS ESQFNQVLNI ELDQIIEACK .......LLD .ANWN..PKF 
+TAG76_CAEEL/660-966       RIIVYRDGVS EGQFSEVLRE EIQSIRTACL .......AIA .EDFR..PPI 
+O16720_CAEEL/566-867      RIVVYRDGVS EGQLFNVLQY ELRAIREACV .......MLE .SGYQ..PGI 
+PINH_ARATH/625-946        RIIFYRDGVS EGQFYQVLLY ELDAIRKACA .......SLE .PNYQ..PPV 
+AGO1_SCHPO/500-799        RIIYFRDGTS EGQFLSVIND ELSQIKEACH .......SLS .PKYN..PKI 
+O76922_DROME/555-852      RILFFRDGVG DGQLYQVVNS EVNTLKDRLD EI...YKSAG .KQEG..CRM 
+PIWI_DROME/538-829        RIVFYRDGVS SGSLKQLFEF EVKDIIEKLK TE...YARVQ .LSP...PQL 
+Q17567_CAEEL/397-708      RLILYRDGAG DGQIPYIKNT EVKLVRDACD AVTDKAAELS .NKVQEKIKL 
+PIWL1_HUMAN/555-847       RIIVYRDGVG DGQLKTLVNY EVPQFLDCLK .......SIG .RGYN..PRL 
+PIWI_ARCFU/110-406        KLTLHVSG.. ..KRPKMKDG ETKILKETVE .......ELK .KQEMVSRDV 
+Y1321_METJA/426-699       NILFLRDG.. .....FIQNS ERNDLKEISK .......ELN .......SNI 
+O67434_AQUAE/419-694      KIVVHRDG.. .....RLYRD EVAAFK.... .......KYG .ELYG..YSL 
+Q21495_CAEEL/52-336       NIVIYLCGMS ESRFSIVKEE YVRNCHSVFK .......TLG .EKYS..PQL 
+O16386_CAEEL/548-847      ELLIYFSGVS EGQHALVNEY YANQVKAACG .......LFN .ESFR..PHI 
+O02095_CAEEL/574-878      DILLYFNGVS EGQFSMINEE FSARVKEACM AF...QKEGT .PPFR..PHI 
+Q19645_CAEEL/674-996      KVIIFRDGVS FGEETAALK. EVEIIEQTIK TA...AKSMG HSDYA..PKV 
+Q23415_CAEEL/40-350       RIIIYRSGAS DGSHASILAY EIPLARATIQ .......GYS .KDIN....L 
+O62275_CAEEL/594-924      RVIVYRTGTS EGNHGSIMAY EIPLARAAMR .......DFS .PDIQ....L 
+
+YQ53_CAEEL/650-977        VVIIAQRASH ARVFPSCISG .......... .......... .NRATDQNIP 
+Q21691_CAEEL/673-1001     LVICTQRNSH IRVFPEHINE .......... .......... RGKSMEQNVK 
+O48771_ARATH/542-860      TVIVAQKNHH TKLFQAKGPE .......... .......... .......NVP 
+Q9ZVD5_ARATH/577-885      LLLVAQKNHH TKFFQPTSPE .......... .......... .......NVP 
+TAG76_CAEEL/660-966       TYIVVQKRHH ARIFCKYQND .......... .......... .MVGKAKNVP 
+O16720_CAEEL/566-867      TFIAVQKRHH TRLFAADKAD .......... .......... .QVGKAFNIP 
+PINH_ARATH/625-946        TFIVVQKRHH TRLFANNHRD .......... .........K NSTDRSGNIL 
+AGO1_SCHPO/500-799        LVCTTQKRHH ARFFIKNKSD .......... .......... ..GDRNGNPL 
+O76922_DROME/555-852      TFIIVSKRIN SRYFT..... .......... .......... ....GHRNPV 
+PIWI_DROME/538-829        AYIVVTRSMN TRFFLN.... .......... .......... .....GQNPP 
+Q17567_CAEEL/397-708      AFIIVTKRVN MRILKQGSSS .......... .......... ...KSAINPQ 
+PIWL1_HUMAN/555-847       TVIVVKKRVN TRFFAQSGGR .......... .......... .....LQNPL 
+PIWI_ARCFU/110-406        KYAILHLNET HPFWVMGDPN .......... .......... ....NRFHPY 
+Y1321_METJA/426-699       EVISIRKNNK YKVFTSDYRI .......... .......... ....GSVFGN 
+O67434_AQUAE/419-694      ELLEIIKRNN PRFFSNEKFI .......... .......... .......... 
+Q21495_CAEEL/52-336       TIIVGSKGHS TRLYARGERD .......... .......... ....QISNLQ 
+O16386_CAEEL/548-847      TLILASKVHN TRVYKSENGG .......... .......... ....GVCNVE 
+O02095_CAEEL/574-878      TIIASSKAHN ERLYKSDKGR .......... .......... .....IVNLE 
+Q19645_CAEEL/674-996      LAIVVKKRHH TRFYAKGGHH .......... .......... ..GNMPINPL 
+Q23415_CAEEL/40-350       IYIIVTKEHS YRFFRDQLRS .......... .......... GGKATEMNIP 
+O62275_CAEEL/594-924      VYIVVSKDHS FRFFKPDLAS LASRPQATSS TASRHSAMPA APKAWDLNIA 
+
+YQ53_CAEEL/650-977        SGTCV...EN VLTSYGYDEF ILSSQTPLIG TVRPCKYTIL VNDA...KWS 
+Q21691_CAEEL/673-1001     SGTCV...DV PGASHGYEEF ILCCQTPLIG TVKPTKYTII VNDC...RWS 
+O48771_ARATH/542-860      AGTVV...DT KIVHPTNYDF YMCAHAGKIG TSRPAHYHVL LDEI...GFS 
+Q9ZVD5_ARATH/577-885      PGTII...DN KICHPKNNDF YLCAHAGMIG TTRPTHYHVL YDEI...GFS 
+TAG76_CAEEL/660-966       PGTTV...DT GIVSPEGFDF YLCSHYGVQG TSRPARYHVL LDEC...KFT 
+O16720_CAEEL/566-867      PGTTV...DV GITHPTEFDF FLCSHAGIQG TSRPSHYHVL WDDN...DLT 
+PINH_ARATH/625-946        PGTVV...DT KICHPTEFDF YLCSHAGIQG TSRPAHYHVL WDEN...NFT 
+AGO1_SCHPO/500-799        PGTII...EK HVTHPYQYDF YLISHPSLQG VSVPVHYTVL HDEI...QMP 
+O76922_DROME/555-852      PGTVV...DD VITLPERYDF FLVSQAVRIG TVSPTSYNVI SDNM...GLN 
+PIWI_DROME/538-829        PGTIV...DD VITLPERYDF YLVSQQVRQG TVSPTSYNVL YSSM...GLS 
+Q17567_CAEEL/397-708      PGTVV...DT TVTRPERMDF YLVPQFVNQG TVTPVSYNII HDDT...GLG 
+PIWL1_HUMAN/555-847       PGTVI...DV EVTRPEWYDF FIVSQAVRSG SVSPTHYNVI YDNS...GLK 
+PIWI_ARCFU/110-406        EGTKVKLSSK RYLLTLLQPY LKRNGLEMVT PIKPLSVEIV SDN.....WT 
+Y1321_METJA/426-699       DGIFLPHKTP FGSNPVKLST WLRFNCGNEE GLK...IN.. .......... 
+O67434_AQUAE/419-694      KGYFYKLSED SVILATYNQV Y.......EG THQPIKVRKV YGE.....LP 
+Q21495_CAEEL/52-336       PGTIV...DS VIVSPDYNKF FHCGAVARQG TCKATKYTVL YPE....SPK 
+O16386_CAEEL/548-847      PGTVI...DH TIVSPVLSEW YHAGSLARQG TSKLVKYSLI FNTK...KNE 
+O02095_CAEEL/574-878      PGTVV...DH TIVSNVYTEW YHASAVARQG TAKATKFTLI FTTKAGPQAE 
+Q19645_CAEEL/674-996      PDTSV...GG DIAEYGKRQI FIQAFRPVQG TAKVPSFLVI RDDE...EVS 
+Q23415_CAEEL/40-350       PGIVL...DS AVTNPACKQF FLNGHTTLQG TAKTPLYTIL ADDC...NAP 
+O62275_CAEEL/594-924      PGILV...DS IVTNPACKQF FLNSHITLQG TAKTPLYTVL ADDA...KVS 
+
+YQ53_CAEEL/650-977        KNEL.MHL.. ....TYFRAF GHQVSY.... QPPSV..... ...PDVLYAA 
+Q21691_CAEEL/673-1001     KNEI.MNV.. ....TYHLAF AHQVSY.... APPAI..... ...PNVSYAA 
+O48771_ARATH/542-860      PDDL.QNL.. ....IHSLSY KLLNSI.... FNVSSLLCVF VLSVAPVRYA 
+Q9ZVD5_ARATH/577-885      ADEL.QEL.. ....VHSLSY VYQRST.... SAISV..... ...VAPICYA 
+TAG76_CAEEL/660-966       ADEI.QSI.. ....TYGMCH TYGRCT.... RSVSI..... ...PTPVYYA 
+O16720_CAEEL/566-867      ADEL.QQL.. ....TYQMCH TYVRCT.... RSVSI..... ...PAPAYYA 
+PINH_ARATH/625-946        ADGI.QSL.. ....TNNLCY TYARCT.... RSVSI..... ...VPPAYYA 
+AGO1_SCHPO/500-799        PDQF.QTL.. ....CYNLCY VYARAT.... SAVSL..... ...VPPVYYA 
+O76922_DROME/555-852      ADKL.QML.. ....SYKMTH MYYNYS.... GTIRV..... ...PAVCHYA 
+PIWI_DROME/538-829        PEKM.QKL.. ....TYKMCH LYYNWS.... GTTRV..... ...PAVCQYA 
+Q17567_CAEEL/397-708      PDKH.QQL.. ....AFKLCH LYYNWQ.... GTVRV..... ...PAPCQYA 
+PIWL1_HUMAN/555-847       PDHI.QRL.. ....TYKLCH IYYNWP.... GVIRV..... ...PAPCQYA 
+PIWI_ARCFU/110-406        SEEYYHNVHE ILDEIYYLSK MNWRGF.... RSRNL..... ...PVTVNYP 
+Y1321_METJA/426-699       .ESI.MQL.. ....LYDLTK MNYSALYGEG RYLRI..... ...PAPIHYA 
+O67434_AQUAE/419-694      VEVL.CSQ.. ....ILSLTL MNYSSF.... QPIKL..... ...PATVHYS 
+Q21495_CAEEL/52-336       MEWI.QRM.. ....TNDLCY MHEIVF.... HPVSL..... ...PAPLYLT 
+O16386_CAEEL/548-847      KLSVYERL.. ....TNELCY EMQIVF.... HPTSL..... ...PIPLHIA 
+O02095_CAEEL/574-878      PLWHLEQL.. ....TNDLCY DHQIVF.... HPVGL..... ...PVPLYIA 
+Q19645_CAEEL/674-996      DEHV.AKM.. ....VCAVCS LHQLVN.... SPTSI..... ...PTPVYVA 
+Q23415_CAEEL/40-350       MDRL.EEL.. ....TYTLCH HHQIVA.... LSTSI..... ...PTPLYVA 
+O62275_CAEEL/594-924      MTAL.EDI.. ....TYKLCH LHQIVG.... LPTSL..... ...PTPLYVA 
+
+YQ53_CAEEL/650-977        ENLAKRGRNN YK
+Q21691_CAEEL/673-1001     QNLAKRGHNN YK
+O48771_ARATH/542-860      HLAAAQVAQF TK
+Q9ZVD5_ARATH/577-885      HLAAAQLGTF MK
+TAG76_CAEEL/660-966       DLVATRARCH VK
+O16720_CAEEL/566-867      HLVAFRARYH LV
+PINH_ARATH/625-946        HLAAFRARFY LE
+AGO1_SCHPO/500-799        HLVSNLARYQ DV
+O76922_DROME/555-852      HKLAFLVAES IN
+PIWI_DROME/538-829        KKLATLVGTN LH
+Q17567_CAEEL/397-708      HKLAFLTAQS LH
+PIWL1_HUMAN/555-847       HKLAFLVGQS IH
+PIWI_ARCFU/110-406        KLVAGIIANV NR
+Y1321_METJA/426-699       DKFVKALGKN WK
+O67434_AQUAE/419-694      DKITKLMLRG IE
+Q21495_CAEEL/52-336       AEMAERGTKN LA
+O16386_CAEEL/548-847      GTYSERGSQM LA
+O02095_CAEEL/574-878      DRYSQRGAMV LA
+Q19645_CAEEL/674-996      HELAKRGTGL YK
+Q23415_CAEEL/40-350       NEYAKRGRDL WS
+O62275_CAEEL/594-924      NEYAKRGRNL WN
+
diff --git a/test/scripts/automated/belvu/test2 b/test/scripts/automated/belvu/test2
new file mode 100755
index 0000000..bd64615
--- /dev/null
+++ b/test/scripts/automated/belvu/test2
@@ -0,0 +1,23 @@
+#!/bin/ksh
+#
+# Description:
+#   Test saving a file to Mul format
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences in output to the
+diffs=`belvu -o Mul $data_dir/PF02171_seed.stock >&1 | diff "$results_file" -`
+
+# If thre were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then 
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
diff --git a/test/scripts/automated/belvu/test20 b/test/scripts/automated/belvu/test20
new file mode 100755
index 0000000..73b8843
--- /dev/null
+++ b/test/scripts/automated/belvu/test20
@@ -0,0 +1,25 @@
+#!/bin/ksh
+#
+# Description:
+#   Make the alignment non-redundanct and save
+#   in stockholm format
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences to the saved results
+diffs=`belvu -n 80 -o Mul $data_dir/PF02171_full.selex >&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
+
diff --git a/test/scripts/automated/belvu/test20_results b/test/scripts/automated/belvu/test20_results
new file mode 100644
index 0000000..d8cca52
--- /dev/null
+++ b/test/scripts/automated/belvu/test20_results
@@ -0,0 +1,380 @@
+C4V9J2_NOSCE/489-791   ...........................................................................................is--LVVLPD..KSTAR..YEEIKRK.TE...TR..S..RMVTQCVLE.K..N.FSRLDN................-PQFAGNLLL.......KINSKLGGV.N.....FKV.DK--.-E........F......S..V....V...KG..KA..T.L................VIGIDVNHPGIGD...............LNSP..SVVAIVGGMN...N...E.L.TS....F.K.....T.II..K...QQ.....D..........R.......R.H...EI......VEN....LKD...................................................DIIVLLKS.F........Y..... [...]
+B6K0R2_SCHJY/507-805   ............................................................................................y-LFFILDS..NSPEP..YATIKRL.CN...TK..F..GIPSQCALR.K..H.IEGA--................KPQYCANLGM.......KVNAKLGGV.N.....VHL.EPKS.--........F......P..-....L...GN..IP..T.I................ILGGDVYHPARGG...............-SGA..SIGSMVGSID...L...H.G.CK....Y.T.....A.MS..R...AQ.....N..........R.......N.Q...EM......IQG....MKD...................................................MVVYFLQG.F........R..... [...]
+AGO1_SCHPO/500-798     ............................................................................................y-LFFILDK..NSPEP..YGSIKRV.CN...TM..L..GVPSQCAIS.K..H.ILQS--................KPQYCANLGM.......KINVKVGGI.N....cSLI.PKSN.P-........-......-..-....L...GN..VP..T.L................ILGGDVYHPGVGA...............-TGV..SIASIVASVD...L...N.G.CK....Y.T.....A.VS..R...SQ.....P..........R.......H.Q...EV......IEG....MKD...................................................IVVYLLQG.F........R..... [...]
+D0U267_CRYPA/639-939   ............................................................................................l-IFYIMPS..KDIVA..YERLKKS.MD...VR..V..GTLSQIVLA.P..H.VMKA--................APQYCSNVAT.......KVNAKLGGY.T.....SKL.KE--.--........-......G..G....F...FK..VP..T.M................ILGADISHGSFGQt.............gNLQA..SLAAITMSMD...P...D.A.IT....Y.A.....A.GC..E...TN.....G..........Y.......R.V...EI......MTKd..tVRR...................................................ILPPMVTR.W........C..... [...]
+A4QSM3_MAGGR/672-970   ............................................................................................l-IFFILPN..KSSIN..YERIKKS.AD...CR..Y..ALVTQCMQA.A..H.VRKN--................QAQYCSNVAM.......KVNAKLGGQ.T.....CKV.A---.--........-......-..T....A...FK..KP..T.M................MIGCDVSHAAPGA...............-QQA..SMAAITVSMD...K...D.C.AR....Y.A.....A.AV..E...TN.....G..........Y.......R.C...EI......LLPq..nVRG...................................................MFGPLVER.W........C..... [...]
+C7YHP8_NECH7/612-917   ............................................................................................l-LFVVVSK..KNSGT..YERLKKS.AD...CR..F..GILTQVVLG.S..H.VQKN--................NGQYHSNVCM.......KVNAKLGGA.T....aCTP.PLWK.TP........T......F..F....P...ET..RP..T.I................MIGVDVSHTAPGG...............-TSP..STAAMTMSVD...K...D.A.TR....Y.A.....A.LV..E...TN.....G..........Y.......R.V...EM......LTPg..nMRM...................................................MFGSLLEQ.W........K..... [...]
+C9SSA6_VERA1/19-91     ............................................................................................p--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....-.--..-...--.....-..........-.......-.-...--......---....---...................................................--------.-........-..... [...]
+Q8J276_NEUCR/628-929   ...........................................................................................qi-VFVAVPD..KSAHV..YERLKKI.FE...CR..Y..GIVTQVLQA.D..H.VKKA--................QGQYISNVCM.......KVNAKLGGQ.T.....SSL.TATK.AK........S......H..N....F...FI..RP..T.M................MIGVDVTHASPGS...............-DMP..SIAAMCASVD...V...E.G.YQ....Y.R.....A.AV..Q...TN.....G..........W.......H.N...EI......LTDe..nIST...................................................WIPTFLKA.Y........K..... [...]
+D1ZPU0_SORMA/563-867   ...........................................................................................qi-IFIVVPD..KTAHV..YERIKKI.FD...CR..Y..GVVTQVVQA.Q..H.VQKA--................NGQYLSNVCM.......KVNAKLGGQ.T.....SSL.TANK.TK........P......H..G....F...FT..RP..T.M................MIGVDVSHASPGS...............-EMP..SIAAMCATVD...R...D.G.YQ....Y.R.....A.AV..Q...TN.....G..........W.......R.S...EV......LTNe..nIEA...................................................MLPTFLKA.Y........K..... [...]
+A6S388_BOTFB/557-866   ............................................................................................i-LFFILPD..RNSFM..YERFKKN.NE...CR..F..AMMSQMMNV.A..H.VAKA--................QPQYCSNVCM.......KVNAKLGGT.T.....CKV.ADSK.PP........K......P..-....F...FP..RA..T.M................VIGADVSHATPGS...............-PQS..SMACLTMSMD...S...T.A.CR....Y.A.....A.AV..Q...TN.....G..........K.......R.V...EM......ISPd..nINS...................................................MLIPLFKE.W........V..... [...]
+Q2GQS4_CHAGB/345-418   ...........................................................................................qi-IFYILRD..KTAFV..YDRFKQA.ND...CG..V..ACLSQMLQA.Q..H.VRKA--................QGQYCSNVCM.......KVNSKLGGQ.T.....SKI.ASRA.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....-.--..-...--.....-..........-.......-.-...--......---....---...................................................--------.-........-..... [...]
+B2AKU3_PODAN/441-754   ...........................................................................................qi-IFFILKD..KSAWY..YERLKRS.SD...CR..Y..AMPTQMLNL.Q..Q.VRKG--................QAQYCSNVCL.......KVNAKLGGC.T....aVA-.VKTQ.AGqplkpnsvA......P..H....F...DN..TP..T.M................FIGADVSHGAAGH...............-LSP..SVAAMTVSMD...K...A.A.TK....Y.A.....A.GA..Q...TN.....G..........W.......R.V...EI......IQPy..nMMQ...................................................MLQPMIKQ.W........R..... [...]
+B6Q5R7_PENMQ/547-853   ............................................................................................l-LLFIVPN..KDTLV..YHRIKKS.CD...CR..F..GVASQVLQR.A..H.VERK--................QPQYMSNVAM.......KVNAKLGGV.-.....-TC.KVAP.-R........Q......D..S....L...NR..AG..C.M................IIGADVSHAAPGS...............-TAA..SLTAISVSAD...Q...N.C.VK....Y.M.....G.SC..Q...TG.....Y..........S.......R.V...EM......IDEd..nMKN...................................................MLTPLVDE.W........T..... [...]
+C8V9S4_EMENI/46-154    ................................................................................feiyihlppgdhn--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....-.--..-...--.....-..........-.......-.-...--......---....---...................................................--------.-........-..... [...]
+C0S3N8_PARBP/535-823   .............................................................................fnlrpellifvvlqat--------..-----..-------.--...--..-..---------.-..-.-QVV-K...............cNGQYISNVLM.......KVNAKLGGT.-.....TAR.VSSK.IT........K......G..L....-...-L..PF..T.M................IIGADVSHSAPGS...............-PAP..SMAAVSVSMD...Q...F.G.GR....Y.A.....G.AC..Q...TN.....G..........D.......H.V...EM......ISEa..nVES...................................................MLTPLFKA.W........Y..... [...]
+D4DBM7_TRIVC/515-807   ............................................................................................l-MIFVVAD..KQSFH..YLRIKKS.CD...CR..F..GVPSQVLQG.Q..Q.VGKC--................NGQYISNVLM.......KINAKLGGT.T.....ARA.VSKQ.CS........-......-..-....G...LP..PF..T.M................IIGADVSHSSPGS...............-FSP..SMAAMTVSMD...T...F.G.GR....Y.T.....A.GC..E...TN.....G..........E.......R.V...EL......ISQa..nIRS...................................................ILSPLIRE.W........V..... [...]
+C5P9D5_COCP7/668-975   ............................................................................................l-LILIVQD..RHSFH..YLRIKKS.CD...CR..F..GVPSQVLQG.R..Q.VVKG--................SGQYISNVLM.......KINAKLGGT.-.....TAR.SHSR.Y-........-......N..T....S...LP..PF..T.M................IIGADVSHSSPGS...............-YAP..SMASFTVCMD...T...F.G.GR....Y.T.....A.GC..E...TN.....G..........E.......R.R...EI......ISPl..nIKE...................................................ILSPLIRE.W........V..... [...]
+B6H4L5_PENCW/673-980   ............................................................................................l-MVFIVPD..KDSFV..YLRIKKS.SD...CR..Y..GTPSQVLQA.A..H.CINN--................RPQYHANVLM.......KVNAKLGGI.-.....-TA.RAVP.KS........K......S..S....G...LR..PG..S.M................IIGADVTHPMMGV...............-WTP..SLAAMSVSAN...S...T.A.TR....Y.M.....G.GC..E...TN.....G..........D.......R.I...EI......IRDk..vVEY...................................................ILHPMVAE.W........K..... [...]
+A2QDC5_ASPNC/643-949   ............................................................................................l-LLVIVPD..KNSFT..YTRIKKS.CD...CR..W..GVPSQVMQS.T..H.VIKG--................NAQYISNVLM.......KVNAKLGGV.T.....SRA.VSKV.Q-........-......G..A....S...LR..PG..S.I................IIGADVTHPPMGV...............-WSP..SMAALSVSKD...P...Y.G.SS....Y.F.....G.SC..E...AN.....M..........D.......R.V...EI......ISRt..sMEF...................................................MLAPLVRE.W........M..... [...]
+Q2UKV9_ASPOR/543-849   ............................................................................................l-LLIIVPD..KNSFT..YLRIKKS.CD...CR..W..GVPSQVLQS.A..H.VAKA--................NPQYISNVLM.......KVNAKLGGT.T.....A--.RIIP.KV........N......D..A....S...LK..PM..T.M................IIGADVTHPTIGV...............-WSP..SMAAVSVCMD...T...F.G.GR....Y.W.....G.AC..E...TN.....G..........D.......R.V...EV......IARa..nMEH...................................................MLTPLVRE.W........M..... [...]
+Q0U7V7_PHANO/645-956   ............................................................................................f-LFFVVND..RNVDV..YRRIKKS.CD...IR..F..GVASQVLQA.K..H.VMSA--................SPQYISNVCM.......KVNAKLGGC.T....sVAK.SNVI.PK........V.....aP..K....S...PS..IP..T.M................VVGADVSHPAPGAg.............sSEAA..SFAAITVSAD...P...F.F.AK....Y.W.....A.EV..Q...TN.....G..........N.......R.V...EM......VTTs..nIDE...................................................HFGSMAKN.W........M..... [...]
+B2W8P0_PYRTR/611-920   ............................................................................................n-FMFFIVN.dRNVEV..YRRIKKS.CD...IR..F..GVASQCLQA.K..H.VLSA--................SPQYISNVCM.......KVNAKLGGC.TsvaksQLI.PKIA.--........-......P..K....S...AS..IP..T.M................VVGADVSHPAPGAa.............sGEAA..SFAAITVSAD...A...Y.F.VK....Y.W.....A.EC..N...TN.....G..........N.......R.V...EM......VTTt..nIYE...................................................HFGNMARV.W.......mQ..... [...]
+C7SYH3_THAPS/780-1048  ............................................................................................i-MLVVLPD..KGKAL..YDHVKFV.SN...QC..S..GVQTQCASL.D..T.FNRQRN................KEQYSTALAT.......KMNAKLSTV.E.....DGA.IAWR.GA........V......D..W....V...NQ..CH..T.L................VIGIGMAHGMGRVl............lvMSVPpyHLIAISLVF-...F...V.L.LK....V.P.....K.RA..Y...VQ.....K..........K.......A.D...TL......SKD...aMID...................................................LFTESWKG.Y........C..... [...]
+C7SYH3_THAPS/1070-1160 .......................................................................................sssass--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....-.--..-...--.....-..........-.......-.-...--......---....---...................................................--------.-........-..... [...]
+C7SYH2_PHATR/826-1176  ...........................................................................................lm--FAVIPT..KDVST..YAFVKYL.SH...VE..F..GIPSQVMVE.E..S.YQNQRS...............kTEAYCAGIAL.......KLNTKLSNSlNr..stAWS.IYSG.TA........R......Q..W....L...MD..TP..T.M................IMGYCVASGPGQD...............--SK..SIVVGTASLD...V...G.G.TH....C.C.....H.DK..R...VQ.....S..........K.......S.H...IV......DSD...vLEE...................................................ITESLAMQ.F........F..... [...]
+A8Q5F0_BRUMA/545-849   .............................................................................itkdrydpvhaisnrg--------..-----..-------.--...--..-..---------.-..-.------................AEMTLDNLVM.......KMNLKLGGI.Nh...aLTS.SAAFlSK........N......R..L....T...NN..VM..D.Mewlr........hsrmFFGLDMSHAAPQSlyer......qaqvpPSEP..TIVAMTFSC-...G...E.P.FA....M.Q.....G.EY..W...MQ.....E..........P.......R.L...HV......VKF....LKE...................................................HVERAVRS.F........R..... [...]
+Q21691_CAEEL/673-1001  .............................................................................................TIVFGIIA..EKRPD..MHDILKY.FE...EK..L..GQQTIQISS.E..T.ADKFMRd.............hgGKQTIDNVIR.......KLNPKCGGT.Nf...lIDV.PESV.GH........R......V..V....C...NN..SA..E.Mrakl.......yaktqFIGFEMSHTGARTrfdi......qkvmfDGDP..TVVGVAYSL-...K...H.S.AQ....L.G.....G.FS..Y...FQ.....E..........S.......R.L...HK......LTN....LQE...................................................KMQICLNA.Y........E..... [...]
+A8WS47_CAEBR/435-755   ......................................................................................trverss--------..-----..-NHILKY.YE...EK..I..GQQTLQLCA.E..T.VMKMARc.............ggNKTTVDNVLR.......KLNLKCGGT.Nf...yVGV.PDAV.NN........R......Q..V....C...IN..PE..E.Mrkkl.......ykntqFIGFELSHTGAQSkfdk......lkedaEIDP..TIVGVAYSL-...K...H.A.TQ....L.G.....G.FS..Y...FQ.....D..........G.......R.V...HK......LTH....VQE...................................................KFGECLQG.Y........K..... [...]
+A8WQA0_CAEBR/671-998   ............................................................................................d-IFVGIAR..DKKPD..VHDIMKY.YE...ES..V..GMQTIQLCK.Q..T.VDKMMNp.............qgGRQTIDNVMR.......KFNLKCGGT.Nf...yVDI.PSNI.RG........R......S..I....C...SN..TE..T.Lhkkl.......lekvqFIGFEISHGAARTlydr......srnqmDGEP..SIVGVSYSL-...K...Q.S.TQ....L.G.....G.FS..Y...MQ.....T..........Q.......R.E...YK......IQK....LDD...................................................AFPKCVKA.Y........A..... [...]
+Q9TXN7_CAEEL/609-935   ............................................................................................n-ILVAIAK..EKKPD..VHDVLKY.YE...AS..V..GLQTIQVCK.Q..T.VDMMLSs..............gGRQTADNVMR.......KFNLKCGGT.Nf...fVQI.PRSV.NG........R......T..V....C...AD..AH..L.Lnekl.......fervqFIGFDISHGASRTlfdr......stgkmDGEV..SIVGVSYSL-...S...H.S.TH....-.L.....G.GF..A...YM.....Q..........T.......Q.K...EY......KLQ...kLDE...................................................VFPKCVDS.Y........R..... [...]
+C8JQR1_CAEEL/591-918   ............................................................................................d-ILFAITR..EKKPD..VHDILKY.YE...ES..I..GLQTIQVCQ.Q..T.VDKMMGg.............ggGRQTIDNVMR.......KFNLKCGGT.Nf...fDEI.PSSV.RG........R......A..V....C...SN..SE..T.Lskkl.......fehvqFIGFEISHGAARTlfdr......srsqlDGEP..SVVGVSYSLT...-...-.N.ST....Q.L.....G.GF..T...YL.....Q..........T.......Q.K...EY......KLQ...kLGE...................................................VFPKCVQS.Y........K..... [...]
+Q9N3L7_CAEEL/585-911   ............................................................................................s-IIIGITE..EKKPE..VHDVLKY.FE...AA..V..GLQTMQIHS.K..T.AGFIIS...............gNGQTAGNVIK.......KLNLKCGGI.Ny...iVEV.PQSF.NR........T......V..V....C...SN..NS..F.Vqkkl.......fdgtqFIGFEMTHGAARTlfdk......sngtfDGEP..TIVGCAYSL-...Q...K.A.TD....L.G.....G.FN..W...FQ.....E..........Q.......N.E...YR......LKN....LGT...................................................HIPKCLQY.Y........K..... [...]
+A8XZY0_CAEBR/665-992   ............................................................................................s-IVIGITS..EKKPD..VHDVMKY.FE...AG..I..GLQTLQIHD.R..T.AECFMRe.............qgGAQTVDNVMR.......KLNLKLGGI.Nf...nVDP.VNMY.EH........K......V..I....C...NN..IG..G.Mkkkl.......fekvqFVGFEMTHGSSRTlydk......aqgqfDGEP..TIVGCGYSL-...S...S.P.TE....L.G.....G.YN..F...LQ.....E..........R.......N.E...YK......LKN....LDS...................................................HFKTCLDQ.Y........K..... [...]
+A8XRG0_CAEBR/648-970   ............................................................................................p-FVLFVSD..-DVPN..IHECLKF.EE...RM..S..DIPTQHILL.K..N.IRKIRDniekks....qggrraYDLTLDNIVM.......KANVKCGGL.N.....YT-.ADIP.RD........I......G..S....W...RE..VS..T.F................VMGMDVAHPDKMAt.............rEGSP..STVGLSCNSA...E...S.P.YS....F.V.....G.DF..L...YT.....D..........P.......R.R...EA......IQDe..iLRK...................................................FTDQNVRN.F........A..... [...]
+A8QE08_BRUMA/711-1030  ..........................................................................................afv-----MYI..DSRDD..THDDLKL.YE...AL..H..RIVTQHIHG.S..R.AREAPK................KVATLENIVN.......KLNCKNFGQ.C....yGII.PESF.AT........N......K..W....I...ST..GK..T.L................IIGYDVCHPEPQPrher......rmrmpPTQP..SVLGISFNGA...S...C.P.ET....F.I.....G.DY..S...FQ.....E..........P.......R.K...EQ......VTSs..iLEE...................................................RIYWILSL.F........Y..... [...]
+A8WWH9_CAEBR/55-193    ..................................................................................hqymqnlrgah--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..TN..T.L................FIAYTVNHGTVDPnt..........pgvYNNP..STAVFTFNGT...T...R.P.EH....F.I.....D.YF..H...FQ.....K..........A.......S.I...QH......IDPq..vIQR...................................................VTQWILED.F........R..... [...]
+Q17600_CAEEL/19-157    ....................................................................................qymrslrgp--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...-E..TN..T.L................FIGYAINHGTVDPst..........pgvYNNP..STVVFTFNGT...S...C.P.DH....F.T.....E.YF..H...FQ.....K..........A.......T.I...PH......VDPa..lIRR...................................................VTRWIIED.F........R..... [...]
+Q9XVF1_CAEEL/588-902   ...........................................................................................pi---VIYAD..HTSEG..THSTLKL.QE...RL..C..EVITQQVAL.D..K.SLKRTP................GKVTANNLLM.......KLNLKYGGV.Nh...kVRV.DN-S.I-........S......H..L....W...GD.tSN..T.L................IISYDVCHSSGKVykk.........deiCDEP..SCVGFGFNGT...A...C.P.EA....F.I.....G.DF..H...YQ.....L..........P.......R.H...EQ......VDEh..lLKL...................................................RARFMLNH.Y........I..... [...]
+A8WWI1_CAEBR/598-920   .........................................................................................yviy------VD..HSSEP..YHQLLKY.LE...RK..F..EVMTQHLNF.D..K.ALQIRSgs...........pllGKSTMTNILM.......KINLKNGGL.N....hKVL.PDPS.ID........H......L..W....G...DK..SN..T.L................IISYDVCHSSGKVykk.........getCFEP..SCVGFGYNGT...S...V.P.EA....I.I.....G.DF..H...YQ.....L..........P.......R.N...EQ......VDP...sVLT...................................................LRAKLMTN.A........Y..... [...]
+Q8MU01_HETGL/745-963   .....................................................................................rvgsslpp--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............---P..SCIGWAATIG..kR...H.K.DE....Y.I.....G.DF..V...YQ.....A..........P.......R.R...EE......KID...iIAS...................................................VVRRCIES.F........K..... [...]
+A8XFJ6_CAEBR/595-895   ...........................................................................................ky--VFIITD..DNITH..LHRE--F.NQ...TR..L..AVYNIFREM.S..K.ATSVCKd..............gKRLTLENVIN.......KTNIKLGGL.N.....YTV.SDTK.RS........M......-..-....-...-T..DD..Q.L................IIGVGISAPPPGTkfll.......egkgHLNP..QIVGFASNA-...V...S.N.HE....F.V.....G.DF..V...LA.....S..........V.......G.Q...DT......MSS....IED...................................................VLKNSMEM.Y........E..... [...]
+GCC7_CAEEL/596-906     ...........................................................................................ky--VLMITD..DAIVH..LHKQYKA.LE...QR..T..MMIVQDMKI.S..K.ANAVVKd..............gKRLTLENIIN.......KTNVKLGGL.N.....YTV.SDAK.KS........M......-..-....-...-T..DE..Q.L................IIGVGVSAPPAGTkymm.......dnkgHLNP..QIIGFASNA-...V...A.N.HE....F.V.....G.DF..V...LA.....P..........S.......G.Q...DT......MAS....IED...................................................VLQNSIDL.F........E..... [...]
+A8WJ71_CAEBR/596-953   ............................................................................................e-FVFIITD..DTITN..LHQKYKM.IE...SL..Q..SIVVQDMKM.S..K.ALSVIDs..............gKRLTLENVIN.......KTNVKLGGS.N.....YIF.TDTK.KY........L......-..-....-...--..DR..V.L................VIGIGISQPPPGTkfiv.......egkgFLNP..QIIGFAYNG-...K...Q.K.QE....F.A.....G.DF..V...LC.....P..........A.......G.Q...DV......SGF...sASKivisfq......................................tlspiedIMKESILG.Y........K..... [...]
+O62275_CAEEL/594-924   .............................................................................................TFVFIITD..DSITT..LHQRYKM.IE...KD..T..KMIVQDMKL.S..K.ALSVINa..............gKRLTLENVIN.......KTNVKLGGS.N.....YVF.VDAK.KQ........L......-..-....-...--..DS..H.L................IIGVGISAPPAGTkyam.......enkgVLNP..NVIGYAYNA-...Q...H.N.QE....F.S.....G.DF..V...LN.....S..........A.......S.Q...DT......LAP....IED...................................................IVMHSLNE.Y........Q..... [...]
+Q9N585_CAEEL/604-934   .............................................................................................TFVLCITE..DNITC..LHQKYKF.IE...HH..T..QMIVQDMKL.S..K.ALSVVNa..............sKKLTLENVIN.......KTNVKLGGS.N.....YVY.LDTK.NF........L......-..-....-...--..QE..H.L................IIGVGISSPPPGTkyim.......esrgILNP..TIVGFAYNG-...N...G.K.QE....F.S.....G.DF..V...LN.....A..........A.......G.Q...ET......IAP....IED...................................................IVSYSIKG.Y........K..... [...]
+A8P7Z4_BRUMA/1-302     ............................................................................................m--------..-----..-----KY.IE...SQ..E..QILTQDLKA.S..T.ALGIVMk..............rQYQTLDNIVN.......KTNIKMGGL.N.....YSVhLEEN.CD........-......R..W....L...GR..PG..F.L................IVGLDIAHPSYSRvpn.........kdrNTVL..SVVGYSANIK...K...H.P.LD....F.I.....G.GY..R...FA.....K..........A.......QmE...EL......MDD...aIQQ...................................................IFSDLLRY.F........N..... [...]
+A8XEJ5_CAEBR/552-849   ............................................................................................q-LLFFVVK..-SRYN..YHQNIKC.LE...QK..Y..DLLTQEVRA.E..T.AEKVFR................QPQTRLNIVN.......KTNMKLGGL.N.....YQI.GS--.--........-......E..T....F...RR..PD..Y.L................IVGFETSQRSGGN...............PDYP..ISVGYAANML...D...H.H.QK....F.A.....G.GY..V...YV.....K..........R.......S.N...DV......FGP...iIKD...................................................TLIKILQT.T........K..... [...]
+Q86S33_CAEEL/548-852   ............................................................................................q-LLFFVVK..-SRYN..YHQQIKA.LE...QK..Y..DVLTQEIRA.E..T.AEKVFR................QPQTRLNIIN.......KTNMKLGGL.N.....YAI.GS--.--........-......E..A....F...NK..PN..R.L................IVGFVTSQRVGGN...............PDYP..ISVGFAANML...K...H.H.QK....F.A.....G.GY..V...YV.....H..........R.......D.R...DV......FGS...iIKD...................................................TLLTIFKT.C........T..... [...]
+O16386_CAEEL/548-847   ............................................................................................q-LIMFITK..-SMNN..YHTEIKC.LE...QE..F..DLLTQDIRF.E..T.AVKLAQ................QQNTRKNIIY.......KTNMKLGGL.N.....YEL.RS--.--........-......G..V....F...SN..SK..R.L................IIGFETSQRGGLG...............-DAP..IAIGFAANMM...S...H.S.QQ....F.A.....G.GY..M...FV.....K..........K.......S.A...DN......YGP...vIPE...................................................ILLTILKQ.A........K..... [...]
+A8XUC0_CAEBR/563-774   ............................................................................................e-LLMFITK..-SNRE..YHKEIKV.LE...HE..F..DIRTQDIRF.E..T.ALKFER................QQNTRRNLVN.......KINVKLGGI.N.....YEV.ES-P.T-........-......-..-....-...FT..KD..R.I................IIGLETSQNSTMG...............-DGL..ICVGFSANMM...A...K.E.TQ....F.C.....G.GY..M...FT.....Q..........R.......S.N...DI......YGS...vLKD...................................................IVRDVIKQ.T........C..... [...]
+Q8MU01_HETGL/598-705   ....................................................................................lighakgfe--------..--GDD..VHVTIKA.FE...QQ..T..EIVTQAITF.D..V.LKEVLDk..............gSPLTVTNCIH.......KTNVKMGGL.N.....YAL.HMDD.PS........V......A..Q....L...FD..GQ..T.L................FLGFAMNFP----...............----..----------...-...-.-.--....-.-.....-.--..-...--.....-..........-.......-.-...--......---....---...................................................--------.-........-..... [...]
+A8X254_CAEBR/555-701   ..........................................................................................qll---MFVFR..-RSVP..LHAQIKS.LE...QK..F..DILTQEITL.E..T.AEKIFR................QPQTLQNIVN.......KTNMKLGGL.N.....YRI.DSTV.L-........-......-..-....-...-N..PN..I.L................FIGFETSSKGGAGdvg........iinlKFGP..VSIGFAANMM...Q...N.H.QQ....F.A.....G.GY..I...YA.....P..........Q.......A.R...DV......GKN...qYFQ...................................................IFQQKVNI.F........-..... [...]
+A8X254_CAEBR/749-889   ...........................................................................................nl--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....-.--..-...--.....-..........-.......-.-...--......---....---...................................................--------.-........-..... [...]
+A8X022_CAEBR/492-805   .....................................................................................qllpfvth--------..-SRYA..LRKDIEW.ME...HK..Y..RIPSLAIDL.K..I.ARKMVE................DKAVKLDLAD.......QVNKKTQGV.N.....YAI.YS--.--........-......D..V....F...RN..GN..D.L................VISISFSEPSPKYakvrililfshmifcFQYP..FTVGFAANTS...N...H.P.LV....F.T.....S.EF..L...YS.....N..........S.......D.N...MD......SGA...vLTE...................................................IFYKCLTG.T........R..... [...]
+A8X023_CAEBR/600-841   ..................................................................................hgilalqnael--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................------------G...............DSEV..TTVGYASNFM...D...H.P.QK....F.A.....G.SY..K...FV.....E..........R.......T.D...EA......SLD...sIIEllqymitl..................................qtfstiiheTLRHSLQK.A........R..... [...]
+Q21495_CAEEL/61-336    ...................................................................................ffrdgqetsl--------..-----..-------.--...--..-..---------.N..N.QSFRNP................TDFAQTGFFV.......DAKQQLGGL.N.....YVV.NS--.--........-......E..T....W...ND..SG..L.L................LIGLSTAPYLNSY..............sSENV..TTIGFVSNTM...D...H.P.QK....F.A.....G.GY..K...YV.....K..........S.......G.S...DV......FGQ...vMPE...................................................ILLNSLRS.A........R..... [...]
+C4LVV2_ENTHI/470-756   ......................................................................................mvlavsv--------..--TDS..IYEQIKK.FC...VD..E..NVPTQCIKP.N..T.LRRQPP................-TPVIQMITL.......QMQSKMGGI.-.....PWK.TEID.SS........F......-..-....-...--..AD..G.M................TVGIDVISAGKDR...............----..EIVAIVSSVD...K...D.F.TV....Y.K.....K.SS..V...VE.....K..........K.......G.L...HT......AGI...hIGE...................................................FMKKALES.Y........T..... [...]
+B0ENU6_ENTDI/467-753   ..........................................................................................kiv---FVVLL..-NDSL..YEDIKRK.C-...FD..R..EIITQCILP.D..T.LKKQNL................-FPIVSQITY.......QIQSKLGGI.P.....-WD.VLTN.NK........L......-..-....-...--..FK..T.M................IIGISVIPYDDNK...............----..ECISLVSSMK...S...N.S.LA....T.R.....K.KY..S...TI.....E..........K.......K.G...CG......NEG....YNSq.................................................iLIQKALDD.W........Y..... [...]
+B0EI01_ENTDI/438-710   ............................................................................................q-IVFSVFD..-SIEQ..MVEIKDY.FM...IY..G..NIPTQIIDL.N..E.RYDDKK................----ITSLCL.......RTGIKIGCS.R.....LKL.DQNT.--........-......-..-....-...--..SD..I.C................VIGI--TSREFFV...............--NK..TLITLCISKD...E...N.L.NV....F.D.....T.DS..Y...FV.....S..........N.......D.N...WH......SGI...gLEQ...................................................ILKPRLYG.-........-..... [...]
+A2DPV7_TRIVA/501-794   ............................................................................................f-VICVVPD..TQKDR..YDSIKSV.LS...SD..L..GIPSQIAIE.G..S.L-NPKL................LMSVATNLVI.......QIGTKLNGA.-.....LVK.LS-R.KS........I......-..S....A...EM..KG..T.M................LIGLSIASGKGRD...............--PS..SYVSGVATTD...F...D.L.SM....Y.H.....S.KS..F...GP.....H..........N.......E.K...II......PEN...fITD...................................................FIQSALQE.Y........R..... [...]
+D2V7J4_NAEGR/498-769   ............................................................................................y-VFFLMAN..ENKHI..YSALKQF.YN...CT..V..GIPSQCIVC.N.gD.WFKR--................----LPNCLI.......QMSAKIGGL.-.....IWS.VERS.YQ........E......-..-....-...--..-F..V.S................VCGIDIQRKGRNF...............---K..GSISLSLNT-...-...-.S.TT....L.Y.....Y.TV..P...FR.....E..........S.......D.E...TN......IRN...kLLS...................................................SIKEALQA.F........R..... [...]
+C5LD15_9ALVE/718-952   ....................................................................................vsgttpsts--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....-.--..S...MK.....E..........R.......R.S...AG......VAR...aIKE...................................................CMKEALLY.F........G..... [...]
+Q3SD94_PARTE/460-750   ...........................................................................................qi-VVSILDR.hEDSKL..YNELKKF.LI...SV..Q..GVLHQNVSI.Q..T.VDSKKF................-SKIAQQIVK.......QVHSKIGKQ.-.....LWN.IQKI.TE........I......-..-....-...-S..EK..I.M................IIGIDVYHKTLAN...............--NK..SCVGFNAQFG...Q...Q.S.EK....H.F.....T.KT..I...IV.....E..........K.......G.K...EL......NKG....VGQ...................................................LLNLSLQQ.Y........Q..... [...]
+Q3SD95_PARTE/471-760   ...........................................................................................lv--VSLIDQ.eKDKQI..YQQLKQY.LI...AE..E..GVSHQNVTL.Q..L.IENQKF................-GAIVPKIIQ.......QIHSKLGNQ.T.....WNI.QKIQ.E-........I......-..-....-...-S..DN..I.M................IVGIDVYHKTVLG...............--LD..SCVGFNAQFG...Q...Q.G.YA....N.F.....T.KT..I...IV.....R..........K.......G.K...EI......NKD....VAM...................................................LLEQSLEE.Y........Q..... [...]
+A0CE33_PARTE/2-210     .........................................................................................keis--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..DE..I.M................IIGIDVYHKTEKK...............--IN..SCVGFNAQFG..qQ...G.D.TN....F.T.....-.KT..I...IV.....D..........Q.......G.K...EI......NKD....IAN...................................................LLEQSLEE.Y........Q..... [...]
+A0DEE4_PARTE/478-780   ............................................................................................s-LVVSLTD..KNRDTslYIGLKDF.LL...SQggA..GVIHQNVTT.K..S.CKNKNK................-QSIASKIAQ.......QISVKLGNP.-.....LWV.IPKV.KG........I......-..-....-...-S..EK..I.M................IIGMDIYHKLVTG...............--KQ..SCMGFVAHFD..lE...C.K.TS....F.S.....K.TI..-...IM.....K..........S.......G.Q...EF......NQA....VGQ...................................................TFKEALQA.Y........F..... [...]
+Q3SE52_PARTE/466-770   ............................................................................................l-IVTFVNE.rDKDRI..YGHIKKY.CF...QD..Q..GISHQNILS.K..F.LKTKNP................-SSVASKIAQ.......QMSMKLGNP.-.....LWA.IPKP.NG........I......-..-....-...-S..DK..T.M................VVGIDIYHKLLTN...............--RK..SCMGFVAYLE...S...E.C.LN....T.F.....A.KP..I...IM.....R..........E.......G.Q...EM......SQE....VGR...................................................VIVEAISA.Y.......fE..... [...]
+A4ZYY5_TETTH/495-793   ......................................................................................qfivtfs------NA.eKNPSL..YREMKKF.FS...SEggV..GIESQHVTP.R..A.LQKN--................GKSVASKIAL.......QIASKLGKR.-.....IWS.VETP.VG........I......-..-....-...-N..QN..T.M................IVGIETSMKKIRN...............---Q..QVIGVVASIN...K...D.F.NK....F.Y.....S.QV..D...FR.....N..........G.......-.N...DI......KLP...tLSK...................................................IISSAIEA.Y........S..... [...]
+A4VE05_TETTH/347-645   ...........................................vndesaqnkdktsvnfkkgnqvtqllniilksimrdekfqeigknskfyd--------..-----..-------.--...--..-..---------.-..-.------................-----VNSKS.......DIIIKSRRI.-.....-WQ.VETP.TG........I......-..-....-...-D..KN..T.M................IIGIETSMKKINK...............---Q..QVIGVVASID...K...D.F.TK....Y.F.....S.DV..E...IR.....K..........E.......N.D...TT......FPT....LSK...................................................IVTKAIQA.Y........I..... [...]
+Q22NE2_TETTH/491-777   ............................................................................................s-FIVTFGD..LNTNF..YQQIKHF.FC...IL..A..NVESQHISP.Q..S.LKNKNK................-YKICLNIVL.......QILQKTGNQ.-.....IWN.VEMP.MQ........I......T..-....S...QT..IN..T.M................IVGIETSRNIIKG...............---K..QIIAVVCSIN...R...N.F.SR....Y.L.....S.QV..Y...FR.....E..........K.......G.C...KQ......LHQ....LQK...................................................IIKDGILI.Y........Q..... [...]
+Q24HU6_TETTH/383-631   ......................................................................................nfnhprq--------..--QTF..YQELKLY.LY...AT..V..AIEHQHFND.D..F.SCHKNK................-NAAISSLII.......QIASKLGYP.-.....LWQ.THIP.NQ........I......-..-....-...-F..NK..T.M................IIAIAVEQKTLHL...............NKQQ..QMIAVVTTIS...K...D.F.TQ....M.H.....S.EI..F...FN.....E..........I.......Q.N...GP......ISI....LSK...................................................IILSSIKN.Y........V..... [...]
+Q0MRE2_TETTH/533-834   ...................................................................................ivaivapnkf--------..STVQN..YSKIKKL.CT...IT..Q..QIKSQYIRQ.Q..S.LDSKQS................-YNVCSAILS.......QMAAKCGTT.-.....LWV.VNPP.NG........I......-..-....-...-P..DN..T.M................IIGTSVQKVFING...............-QPQ..FVIGFVASQD...K...N.V.SR....F.Y.....S.RA..T...FQ.....K..........L.......N.K...DN......IEK....IST...................................................FIVDAIKQ.Y........F..... [...]
+A0CR14_PARTE/559-847   .............................................................................................MIVIVLNR..YMKNC..YAPLKKM.CM..sEK..F..GVLTQMVSS.D..S.ISKQKK...............gLFSIIQKLAI.......QMMDKVGNC.-.....LWT.VQLP.QK........W......P..-....-...--..DN..I.M................IVSVIIE---KG-...............----..KFAGMLSSLD...K...T.Y.SR....Y.Y.....S.QM..S...TK.....I..........V.......E.K...CL......IKD....IGD...................................................MMKQSFLQ.F........K..... [...]
+Q0Q5B1_9SPIT/472-767   ...........................................................................................av--VLLLPGqkGKCNL..YDEVKKY.LL...TD..V..PVPSQAVLT.G..T.IQKGKN................LRSIVNKILI.......QINVKIGGI.-.....PWA.VDSL.PL........-......-..-....-...LT..KP..S.M................ICGMDVFHSTSLG...............--KK..SVLALTASMN...Q...T.A.TK....Y.W.....S.TN..V...IQ.....S..........E......lG.Q...EA......SHA....LNQ...................................................GMTKACEA.F........K..... [...]
+Q8ISG8_STYLE/475-767   .....................................................................................vlllpgak--------..GKTSL..YDDIKRF.LL...AE..F..PVPSQVVLC.N..T.ISKGKN................LRSIVNKILI.......QITAKIGGI.-.....PWT.VDAL.P-........-......-..-....F...MD..KP..T.M................ICGMDVFHSTSLG...............--KK..SVLGLTASIN...V...S.A.TK....Y.F.....S.SC..V...IQ....gE..........L.......G.L...EA......SHS....LQN...................................................GMVKGLEA.F........K..... [...]
+Q8MQL1_TETTH/444-756   ...........................................................................................ma--VFLLPG..KKKAGmyYDEIKRY.FT...NV..K..PIPTQVILA.S..T.AMKDKG................LRSVVNKLLM.......QICAKTGGV.-.....PWV.MDNL.P-........-......-..-....F...QN..LP..T.M................VVGMDVFHNTPGK...............--KE..SIFGFVSTVD...R...N.F.SK....Y.Y.....S.HS..H...VL.....P..........T.......G.Q...EI......TPF....LQQ...................................................VYEQALKE.F........K..... [...]
+Q3SE59_PARTE/450-741   ............................................................................................f-IIFLLPGqkKNSRL..YRCAKFI.SL...QK..I..GCPSQVVLE.D..T.LAKN--................TRSIVNKIMV.......QICAKLGGV.-.....PWA.IDKL.P-........-......K..L....F...QQ..QH..T.M................ICAAECYDRLHQI...............----..KHLAFCSTVD...K...N.M.TK....Y.H.....S.QI..-...--.....L..........K.......G.A...DY......KGD...nLKK...................................................SLITAMEV.Y........K..... [...]
+Q9U5C9_PARCA/466-759   ............................................................................................f-LIFLLPGqkKKAKL..YKTAKKI.SM...QS..F..GCPSQVIIE.K..T.LQKN--................TRSIVNKILI.......QLNAKVGGI.-.....PWA.LDGF.PQ........Q......-..-....F...QA..KP..T.M................ICGVDIFSKHGKK...............----..NQLAFCSTTD...K...Y.F.SR....Y.Y.....S.QV..-...--.....I..........S.......S.G...EF......SIH....LQQ...................................................ALKASLQA.F........K..... [...]
+Q3SE49_PARTE/467-759   ............................................................................................f-LIFLLPGqkKKARL..YKACKVI.SM...AT..F..GCASQVIVE.K..T.LQRN--................TRSIVNKILI.......QLNAKIGGT.-.....PWA.LDGM.P-........-......D..M....F...TN..QP..T.M................ICGVDIFTKAGRK...............----..SQLAFCSTIN...R...Q.F.SR....Y.Y.....S.QV..-...--.....I..........T.......S.G...EF......CSH....LQL...................................................CLKAALLA.F........K..... [...]
+Q3SE53_PARTE/460-752   ............................................................................................f-LLFLLPGqkKKARL..YKTAKKI.SM...QK..F..GCASQVVVE.K..T.LAKN--................TRSIVNKILI.......QLNAKVGGT.-.....PWA.IDSL.P-........L......-..T....F...QN..QP..T.M................ICGTDCFVKSGRK...............----..NQLAFCSTVD...R...N.L.SR....Y.Y.....S.QV..V...T-.....-..........-.......S.G...EF......SQH....LQS...................................................VFKASLLA.F........K..... [...]
+Q3SE50_PARTE/446-748   .....................................................................................llllilng------PK..KNAPL..YTDLKRY.LI...ND..C..PIASQVILS.S..T.LNQPKG...............kVKTICNKLLV.......QICAKVGGT.-.....PWG.ISDL.P-........-......-..-....F...TD..QP..T.M................ICGMDVYHSTAKG...............--RK..SMLSFVSTED...E...F.F.SK....Y.M.....T.QS..I...EM.....D..........S.......G.V...EF......SFS....LCP...................................................ILVKSLES.F........T..... [...]
+Q54HL3_DICDI/867-1166  ............................................................................................l-FIIILPE.nDHSFI..YKSIKNLsLL...RN..R..AVITQCIKS.S..K.IKDR--................LNLISKPIAS.......QIIAKMGKF.-.....PWS.ID--.PT........I......-..-....F...SNipEN..T.M................VIGIDVTHNPEIS...............---Y..SVAAFVASTN...N...C.H.TQ....F.Y.....H.KI..N...IQ.....P..........F.......L.K...EI......LDSd..fIFT...................................................AMKDSMNA.Y........R..... [...]
+Q7KWS3_DICDI/669-964   ............................................................................................f-FLIIIPQ..NNAEV..YKGIKMK.SL...IQ..F..RVLTQCIFS.R..T.FDKG--................-RPVSVKLKQ.......QVVAKLGLA.-.....PWG.LGQD.IY........K......G..V....-...-P..KK..T.M................VIGVDVGHNSDMK...............--GH..SVVGFVATID...D...K.F.QK....F.F.....S.RA..Y...AQ.....E.........rP.......G.K...EI......IHS....LED...................................................ATKEAMKS.Y........F..... [...]
+Q1ZXG9_DICDI/1063-1281 ......................................................................................nqskiht--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................------------Q...............KDAR..SVAAFCATTN...N...A.F.TN...cY.V.....S.AT..I...QK.....Q..........S.......S.K...EV......INS....LGA...................................................SMGNALKA.Y........H..... [...]
+Q86HF5_DICDI/896-1194  .............................................................................................FIVVVVNG..VKTDL..YNSIKRT.AI...LE..C..KVITQVLTV.K..T.ITNQKI................-SSIFSKITN.......QINAKIDIP.-.....PWT.LKEN.SN........F......G..I....-...-P..NY..T.M................VVGIDVGHNTDKE...............--SR..SVAAFCASVN...H...S.F.TN....F.F.....V.AC..S...IQ.....K..........Q......nT.K...EV......IHS....LGN...................................................SMNCALRS.Y........Y..... [...]
+D3B338_POLPA/992-1287  ............................................................................................f-FLCAIQQ..-KPDF..YNLIKKY.TL...IT..A..RVITQCILA.K..T.MDKDNI................-GSVVSKVIL.......QVIAKLGKD.-.....PWV.LKNP.G-........Y......-..-....N...IP..EH..T.M................VVGIDVGHNAATR...............--GK..SIVAITATLN...R...S.L.TR....Y.F.....S.TA..I..iQQ.....T..........P.......G.K...DI......IDS....LQT...................................................SMKECIQA.F........H..... [...]
+D3BMP8_POLPA/633-929   ............................................................................................f-FFCLIPF..GKADV..YAAIKKS.TL...TQ..F..KAITQCAYA.K..T.LGIT--................GMAVAKKILH.......QLIAKLGRS.P.....WSI.SNPV.YK........M......-..-....-...-P..KH..T.M................IVGIDVGHNSDQR...............--GK..SVVGFCASID..sE...Y.S.LY....H.T.....T.AI..V...QS.....T..........P.......G.K...EI......VES....LRP...................................................SMKGALQA.Y........L..... [...]
+D2V2M6_NAEGR/28-326    ............................................................................................s-FILMITK.nKTSTE..YHTLKEK.TI...VD..M..GIPSQCITE.R..N.IAISEK................KSSILKNITI.......EMNAKLGGI.-.....PWM.TSIP.M-........-......-..-....-...-K..PH..T.M................IVGMDVNHSGEVY..............hRSKS..SLVGFVSSYD...S...K.V.CA....Y.Y.....S.QI..Q...VQ.....K..........P.......G.V...EL......VEN....IKN...................................................LMRNAIEN.F........M..... [...]
+D2VMG4_NAEGR/577-883   ...........................................................................................fa--LVVLFN..DQKQR..YSRVKEV.LC...NQ..V..GIISQCVKL.S..T.ITNEKG................LASKATKVIV.......QICSKMGGA.-.....PWT.VP--.L-........-......A..F....P...NK..EP..T.M................IIGMDVYHSGEIY..............kRKKA..SVAGFVASID...A...K.I.ST....Y.F.....T.KC..I...IQ.....E..........A.......G.K...EI......VDE....LEE...................................................CMTAALNK.F........K..... [...]
+B7PDV6_IXOSC/541-835   ...........................................................................................la--LVILPN..NRKDR..YDMIKKH.AC...VD..L..GLQTQVLLS.R..T.IGNRKN................VRSVATKVAI.......QLNCKLGGQ.-.....AWC.LEIP.L-........-......-..-....-...--..AS..T.M................VIGYDTYHDSSQR...............--GR..SAGAFVASLN...R...T.F.TR....W.F.....S.RA..S...FH.....A..........S.......H.Q...EL......GNS....LAI...................................................HLQDALRQ.Y........G..... [...]
+B7Q5I1_IXOSC/446-741   ............................................................................................l-LMTIFPN..NRKDR..YDSLKKV.AC...VD..M..GLHTQVMLG.R..T.ISNKKN................LKSVATKVAI.......QMNCKLGGE.-.....AWA.LDIP.L-........-......-..-....-...--..TK..M.M................CVGYDTYHDSRQK...............--GL..SAGGFVASLN...R...T.L.TR....W.Y.....S.RV..S...FH.....Q..........T.......H.Q...EL......GSA....LKT...................................................HMALSMKQ.Y........Q..... [...]
+Q0H8V5_9CNID/70-239    ............................................................................................m-VVTILTT..NRKDR..YDAIKKL.CC...LE..K..PVPSQVIVG.R..T.ISKKQM................LMSVSTKIAI.......QLNCKLGGE.-.....AWA.LEIP.L-........-......-..-....-...--..KK..T.M................VIGIDTYHDSSAK...............--GR..SVGGFVASVN...Q...T.L.TK....Y.Y.....S.RV..S...FQ.....H..........T.......G.M...EF......IDA....LKT...................................................NMTAALRR.Y........Q..... [...]
+A7T755_NEMVE/2-70      ............................................................................................i-VVTIVPS..NRKDR..YDSIKKL.CC...LE..K..GVPSQVVVS.R..T.LSKKQM................LMSVCTKIGI.......QLNCKLGGE.-.....AWA.VDIP.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....-.--..-...--.....-..........-.......-.-...--......---....---...................................................--------.-........-..... [...]
+B2KTD9_9CNID/559-850   ............................................................................................i-VVCIVPN..NRKDR..YDAIKKI.TC...VE..N..PVPSQVVVS.R..T.LSKQQM................LMSVCTKIAI.......QLNCKLGGE.-.....VWA.TEIP.V-........-......-..-....-...--..KK..L.M................VIGFDVYHDSMNK...............--GQ..SIGGFIASTN...D...S.L.TR....Y.Y.....S.RI..T...KQ.....R..........S.......H.N...EI......CSQ....LKI...................................................CMTGALKK.Y........R..... [...]
+Q3ZUK2_PLADU/35-327    ............................................................................................l-VLCILPS..NKKDR..YDAIKKL.CC...IN..C..PVPSQMVLA.K..T.LSKAKM................LMSVATKIAI.......QINCKLGGE.-.....VWA.LEIP.L-........-......-..-....-...--..KG..L.M................VVGVDSYHDSKQK...............--GR..SVGAFVASMN...Q...S.L.TR....Y.Y.....S.RC..C...FQ.....H..........Q.......H.Q...EL......LDG....LRV...................................................CATGALKE.Y........H..... [...]
+B5BUZ0_9ASCI/567-860   ............................................................................................m-ILSLMPS..NRKDR..YDGIKRL.CC...VD..I..PIPTQVVLT.K..T.LSKPQR................VMSIATKIAI.......QINCKLGGE.-.....AWA.AHIP.L-........-......-..-....-...--..KG..T.M................VIGIDTYHDTARK...............--GQ..SVGGFVANIN...Q...E.Y.TR....W.Y.....S.NT..T...FQ.....Q..........N.......S.T...EL......IDG....LKK...................................................CMIGALKK.F........Q..... [...]
+PIWL3_HUMAN/578-868    ............................................................................................k-VICILPN..DDKRR..YDSIKRY.LC...TK..C..PIPSQCVVK.K..T.LEKVQA................-RTIVTKIAQ.......QMNCKMGGA.-.....LWK.VETD.V-........-......-..-....-...--..QR..T.M................FVGIDCFHDIVNR...............--QK..SIAGFVASTN...A...E.L.TK....W.Y.....S.QC..V...IQ.....K..........T.......G.E...EL......VKE....LEI...................................................CLKAALDV.W........C..... [...]
+PIWL1_CHICK/561-853    ............................................................................................i-VVCILSS..TRKDK..YDAIKKY.LC...TD..C..PIPSQCVVA.R..T.LSKPQT................ALAIVTKIAL.......QMNCKMGGE.-.....LWS.VEIP.L-........-......-..-....-...--..KQ..L.M................IVGIDCYHDTLSG...............--KQ..SIAGFVASLN...E...K.M.TR....W.F.....S.RC..V...VQ.....S..........R.......G.Q...EI......VDG....LKA...................................................CLQTALRE.W........F..... [...]
+Q4T9Y6_TETNG/521-792   .............................................................................................MVVVILPT..NRKDK..YDSIKKY.LC...VD..C..PVPSQCVVA.Q..T.LSRPQT................LLNVATKIAL.......QMACKMGGE.-.....LWS.VEIP.L-........-......-..-....-...--..KH..L.M................VVGIDCYHDISAG...............--KR..SVGALVASMN...Q...T.M.SR....W.F.....S.RC..V...LQ.....Q..........K.......G.Q...EI......MDG....LKR...................................................PFIDALKE.Y........L..... [...]
+Q4T9Y9_TETNG/1-228     .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-MACKMGGE.-.....LWS.VEIP.L-........-......-..-....-...--..KH..L.M................VVGIDCYHDISAG...............--KR..SIGALVASMN...Q...T.M.SR....W.F.....S.RC..V...LQ.....Q..........K.......G.Q...EI......MDG....LKR...................................................PFIDALKE.Y........L..... [...]
+PIWL4_HUMAN/546-838    ............................................................................................l-VMCILPS..NQKTY..YDSIKKY.LS...SD..C..PVPSQCVLA.R..T.LNKQGM................MMSIATKIAM.......QMTCKLGGE.-.....LWA.VEIP.L-........-......-..-....-...--..KS..L.M................VVGIDVCKDALSK...............--DV..MVVGCVASVN...P...R.I.TR....W.F.....S.RC..I...LQ.....R..........T.......M.T...DV......ADC....LKV...................................................FMTGALNK.W........Y..... [...]
+A6X965_MOUSE/3-172     ...........................................................................................pg--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....-.--..-...--.....-..........-.......-.-...--......---....---...................................................----ALNR.W........Y..... [...]
+C3XV22_BRAFL/1173-1299 ........................................................................................lqapr--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.HS....W.Y.....S.GC..T...FQ.....H..........S.......G.Q...EL......IDG....LKV...................................................CLQAALKK.Y........Y..... [...]
+C3XV22_BRAFL/2983-3180 ............................................................saeaapkkkmqkkkkranqktstiklttepvpv--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....-.--..-...--.....-..........-.......-.-...--......---....---...................................................-----TKK.Y........Y..... [...]
+C3XV22_BRAFL/1831-1964 .........................................................................................ktqm--------..-RKDR..YDAIKKF.CC...VD..H..PVPSQVIVS.R..T.LNKKQM................LMSVATKIAM.......QLNCKLGGE.-.....LWA.VEIP.L-........-......-..-....-...--..KS..M.M................VVGIDCYHDSATK...............--GQ..SIGGVIASMN...S...S.L.TR....W.Y.....S.RC..T...FQ.....H..........S.......G.Q...EL......IDG....LKV...................................................CLQ-----.-........-..... [...]
+Q9GPA7_STRPU/547-808   ............................................................................................i-VVVILPT..NRKDR..YDAIKKT.CV...VT..H..PCPSQVIVS.R..T.LSKQQM................LMSVATKIAM.......QMNCKMGGD.-.....LWR.VEIP.L-........-......-..-....-...--..SN..L.M................IIGIDSYHDSLTK...............--GR..SVLGFVASMN...K...S.Q.TS....F.F.....S.SC..A...FQ.....H..........A.......Q.G...EF......GAN....LST...................................................LMNNALKR.Y........Y..... [...]
+B9ZU53_9TURB/586-879   ...........................................................................................la--IVVLPD..NRADR..YNAIKRQ.CY...VE..T..PVPSQCVLN.R..T.LNNEKG................FMSVVSKLAL.......QINVKMGGE.-.....PWM.CKLP.V-........-......-..-....-...-D..PG..A.M................IIGMDVHHVGKGG...............-KGP..SQLGFVSSLN...V...E.L.TR....F.Y.....S.RV..-...YN.....N..........E.......S.N...EI......SGT....IKV...................................................AFVAALQR.F........H..... [...]
+B2Z3D6_SCHMD/665-960   ............................................................................................l-VVTILSA..VREDR..YNAIKKF.CY...VD..C..PVPSQVVLA.Q..T.LKEGPK................LNSVAVNIAL.......QINAKLGGE.-.....LWA.VKIP.I-........-......-..-....-...--..KK..F.M................VVGLDVWHDTKGR...............--SR..SVGAVVGSTN...A...L.C.TR....W.F.....S.KS..H...LQ.....E..........Q.......D.K...EI......MYV....LQS...................................................CMLSLLKA.Y........F..... [...]
+D2A2S9_TRICA/552-839   ...........................................................................................va--VFICPT..LRADR..YSIIKKM.CC...VN..I..PVASQVILS.K..T.LSNPQK................VRTIIHKIAM.......QITCKLGGT.-.....LWS.VKIP.V-........-......-..-....-...--..SG..W.M................VCGIDVYHGANNQ...............----..SVCGFVASIN...G...S.M.TK....Y.F.....S.KA..M...FQ.....D..........-.......-.G...EI......GDY....FKM...................................................PFRQMLQA.A........K..... [...]
+A9ZSZ2_BOMMO/619-912   ............................................................................................q-LVVAICS.tKRDDR..YAAIKKV.CC...AD..N..PVPSQVINA.R..T.LMNTNK................IRSITQKILL.......QLNCKLGGT.-.....LWS.ISIP.F-........-......-..-....-...--..KS..A.M................IVGIDSYHDPSRR...............--NR..SVCSFVASYN...Q...S.M.TL....W.Y.....S.KV..I...FQ.....E..........K.......G.Q...EI......VDG....LKC...................................................CLVDALTH.Y........L..... [...]
+A7LNN5_BOMMO/2-193     ...........................................................................................ls--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..A.M................IVGIDSYHDPSRR...............--NR..SVCSFVASYN...Q...S.M.TL....W.Y.....S.KV..I...FQ.....E..........K.......G.Q...EI......VDG....LKC...................................................CLVDALTH.Y........L..... [...]
+B4N2M0_DROWI/49-131    ........................................................................................fhlsg--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....-.--..-...--.....-..........-.......-.-...--......---....---...................................................--------.-........-..... [...]
+B4JP35_DROGR/334-622   ...........................................................................................qi-VVCICSS..RRDDR..YSAIKKI.CC...AE..R..PVASQVINS.R..T.LSNETR................NRSIVQKIIL.......QMNCKMGGS.-.....LWT.VKIP.F-........-......-..-....-...--..KN..V.M................ICGIDSYHDPSQK...............--SH..SVAAFVASLN...S...T.Y.TH....W.F.....S.KA..V...IQ.....T..........K.......K.E...EL......VNG....LTS...................................................SFESALEC.Y........K..... [...]
+B7FNN2_DROME/566-845   ............................................................................................m-VVCICHN..RRDDR..YAAIKKI.CC...SE..I..PIPSQVINA.K..T.LQNDLK................IRSVVQKIVL.......QMNCKLGGS.-.....LWT.VKIP.F-........-......-..-....-...--..KN..V.M................ICGIDSYHDPSNR...............--GN..SVAAFVASIN...S...S.Y.SQ....W.Y.....S.KA..V...VQ.....T..........K.......R.E...EI......VNG....LSA...................................................SFEIALKM.Y........R..... [...]
+Q7PWT1_ANOGA/618-916   ............................................................................................q-IVVIICP.tSRDDR..YAAIKRI.LC...TE..V..PIPSQVINA.R..T.LANEKR................NRSVVLKVLL.......QMNCKLGGS.-.....LWG.VRVP.I-........-......-..-....-...--..KR..T.M................ICGIDTYHEAKQR...............--SN..SVAAFVGSLD...A...A.F.TH....W.Y.....S.RA..T...VQ.....E..........R.......K.E...EI......LNG....LCV...................................................SLEKTLQA.Y........Q..... [...]
+B0WE96_CULQU/634-782   ............................................................................................q-IVVIICP.tSRDDR..YAAIKRI.CC...SE..I..PVPSQVINA.R..T.LANEAK................NRAIVQKILL.......QMNCKLGGT.-.....LWS.IKIP.F-........-......-..-....-...--..QN..V.M................IAGIDTYHDPKQK...............--SN..SVSAFVASLN...G...E.Y.TR....W.Y.....S.RA..C...IQ.....S..........K.......K.E...EF......MNG....LCA...................................................SLEKSLRA.Y........E..... [...]
+B7QEM1_IXOSC/88-370    ............................................................................................v-IVLIFPT..SRDDR..YSAVKRL.CC...VD..M..PVPSQVIIS.N..T.IGQQQK................LRSVTQKVAL.......QINCKLGGE.-.....LWK.VEIP.M-........-......-..-....-...--..HN..V.M................VIGIDVYHDITRG...............--RQ..SVMGFVASMN...Q...S.L.TR....W.F.....S.KC..A...FQ.....E..........P.......G.K...EL......VNC....IKI...................................................AMLEAIVK.Y........Y..... [...]
+PIWL2_XENTR/644-935    ............................................................................................l-LVCLISG..TRDDL..YGAIKKL.CC...VQ..N..PVPSQVINT.R..T.ISQPQK................LRSIAQKILL.......QINCKLGGE.-.....LWG.VDIP.L-........-......-..-....-...--..KS..V.M................VIGMDVYHDPSRG...............--MR..SVLGFVASIN...S...C.L.TA....W.Y.....S.RV..V...FQ.....L..........P.......N.Q...EI......MDS....LKL...................................................CLVAALQK.F........F..... [...]
+PIWL2_HUMAN/668-959    .............................................................................................MVVCIIMG..PRDDL..YGAIKKL.CC...VQ..S..PVPSQVVNV.R..T.IGQPTR................LRSVAQKILL.......QINCKLGGE.-.....LWG.VDIP.L-........-......-..-....-...--..KQ..L.M................VIGMDVYHDPSRG...............--MR..SVVGFVASIN...L...T.L.TK....W.Y.....S.RV..V...FQ.....M..........P.......H.Q...EI......VDS....LKL...................................................CLVGSLKK.F........Y..... [...]
+A5PL40_DANRE/7-278     .........................................................................................ssra--------..-----..-------.--...--..F..TLNSQAINV.R..T.ISQPQK................LRSVAQKILL.......QINCKLGGE.-.....LWT.VNVP.LK........Y......-..-....-...--..--..L.M................VIGVDVHHDTSKK...............--SR..SVMGFVASLN...S...M.L.TK....W.Y.....S.RV..T...FQ.....M..........P.......N.E...EI......ING....FRV...................................................CLLAALQK.Y........Y..... [...]
+B9U224_ORYLA/729-1020  ............................................................................................l-VVCVIEG..NRDDL..YSAIKKL.CC...LK..C..PVPSQVINV.R..T.ISQQQK................LRGIAQKILL.......QLNSKLGGE.-.....LWT.VGIP.L-........-......-..-....-...--..KS..L.M................VVGVDVHHDTSKK...............--HQ..SVMGFVASVN...S...S.L.TH....W.Y.....S.RV..T...FQ.....T..........P.......T.E...EL......ISG....FRA...................................................CFLSTLQK.Y........Y..... [...]
+Q4RPK4_TETNG/383-660   ................................................................................plvlnafkyicmf--------..-----..-------.--...--..-..--CPQAINV.R..T.ISNQAK................LKSIAQKILL.......QINCKLGGE.-.....LWT.VSIP.M-........-......-..-....-...--..KN..F.M................VVGVDVYHDTKKK...............--YH..SVMGFVASVN...S...T.L.TR....W.Y.....S.RV..I...FQ.....T..........P.......N.E...EL......IGG....FRI...................................................CFVAALQK.Y........Y..... [...]
+A7SQI3_NEMVE/441-733   ...........................................................................................qv-VVVIFPT..SRDDR..YAAVKKL.CC...VE..S..PVPSQVIIS.K..T.ISNPTK................LRSVVQKIAL.......QINVKLGGE.-.....LWA.LDIP.S-........-......-..-....-...--..RS..L.M................VCGIDVYHDKARG...............--GR..SVGGLVCSMN...R...S.L.TR....W.Y.....S.DV..C...FQ.....S..........P.......G.Q...EL......IDG....LKM...................................................LLIKGIRK.W........H..... [...]
+A7T7C9_NEMVE/1-180     ............................................................................................r--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..-S..L.M................VCGIDVYHDKARG...............--GR..SVGGLVCSMN...R...S.L.TR....W.Y.....S.DV..C...FQ.....S..........P.......G.Q...EL......IDG....LKMllikgirkwhdairkwhdvcyltmfvslsrpsgsgmmpsgsgmmyvifnvcVLIKAIRK.W........H..... [...]
+C3Z5S8_BRAFL/570-730   .............................................................................................MVVCIFPT..PRDDR..YSAIKKL.CC...VD..S..PVPSQVINA.K..T.IGSQQK................LRSVTQKIAL.......QINAKLGGE.-.....LWA.LEIP.L-........-......-..-....-...--..KN..I.M................VVGIDVYHEIKKG...............--VR..SVAGFVASTN...R...E.L.TR....W.Y.....S.RT..C...FQ.....M..........P.......G.Q...EL......MDG....LKL...................................................CLTSALKK.Y........H..... [...]
+B0FLQ9_STRPU/653-945   ............................................................................................l-VIAIFPT..SRDDR..YSAFKKL.CC...IE..A..PVPSQVING.R..T.ISQKQK................LRSVTQKIAL.......QINCKLGGE.-.....LWA.LDVP.L-........-......-..-....-...--..SK..L.M................VIGIDVYHDPNRG...............--KK..SIGAFVASMN...R...D.L.TS....W.F.....S.RV..C...IQ.....T..........P.......H.Q...EL......IGG....LKL...................................................CFTSSLKK.Y........H..... [...]
+C9E0S9_APIME/551-753   ............................................................................................l-MVIVFPT..NRTDR..YSAVKRV.CC...VE..M..PVPSQVIMS.R..T.ISRGDK................LKSITEKIAL.......QINCKLGGA.-.....LWA.LAIP.M-........-......-..-....-...--..DH..C.M................ICGIDVYHAGVGQ...............SMKG..SVAGFVASLD...K...L.L.TS....W.H.....S.KI..C...LQ.....G..........K.......H.Q...EL......VDI....LQI...................................................CLISAIKA.Y........Y..... [...]
+C3ZKW1_BRAFL/534-739   ..........................................................................................cqk--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....-.--..-...-Q.....G..........Q.......G.E...EV......IPS....IGK...................................................LFYAALKR.W........Y..... [...]
+B9ZU54_9TURB/593-893   ............................................................................................i-VVCLLPT..KVEQK..YNAIKRQ.CC...IS..T..PVASQVIIS.R..T.LSNDSK................RKRIVQNIGL.......QMVAKMGGE.-.....LWG.VQLP.TV........Q......Q..V....-...--..GR..L.M................VVGIDVYHEAKKR...............--SE..SWLGVCCSLN...Q...H.A.TR....Y.K.....S.SV..H...KQ.....T..........P.......G.V...EL......GGF....YNV...................................................LFQKSLYK.Y........R..... [...]
+C9E0T4_APIME/497-785   ............................................................................................l-IFCVVSN..NRADR..YSAIKKK.CT...HD..R..PVASQVFLA.K..N.LTNKGI................-RSIATKVAI.......QLNCKLGGA.-.....PWS.VELP.P-........-......-..-....-...--..IN..L.M................VVGYDVCHDPADK...............--SR..DFGAMVASLD...R...S.L.TR....Y.Y.....S.AV..A...AH.....T..........T.......G.E...EL......SDE....FGE...................................................SLEKAVLC.Y........R..... [...]
+Q171B3_AEDAE/547-846   ............................................................................................l-VMCVVTN..NKADR..YTAIKKK.CC...VD..R..AIPTQVMVQ.K..T.ITPKGGnv............rtLMSVATKVVI.......QMNCKLGGV.-.....PWK.VKIP.L-........-......-..-....-...--..NG..L.M................TIGFDVCHDGKDK...............--SK..SFGAMVATLDhdnK...G.T.PK....F.F.....S.TV..S...QH.....T..........H.......G.E...EI......SNY....LPI...................................................NTVKALNE.Y........R..... [...]
+Q5TW24_ANOGA/530-829   ............................................................................................l-VMCIVPN..DRADR..YKAIKKK.CC...VD..R..PLPCQVIKA.R..T.ITPKNQnl............raLLTIATKVMI.......QLNCKLGGI.-.....PWI.VKNP.L-........-......-..-....-...--..SS..V.M................VVGFDVCHDASDK...............--SL..SYGALVATMYa.aK...HiE.PK....Y.F.....S.VI..E...RH.....Q..........R.......G.E...EL......SSF....LSS...................................................NIVKALRK.Y........Q..... [...]
+Q16JS1_AEDAE/576-874   .............................................................................................LIMCLVTN..DKADR..YSAIKKK.CC...VD..R..AVPTQVLKT.R..T.ITPKGGnv............rtLMSVATKVAI.......QMNCKLGGI.-.....PWV.IKSP.L-........-......-..-....-...--..AS..V.M................VIGYDVCKDSKDR...............--SK..GYGALVASMYgggV...K.H.PK....Y.Y.....S.TV..N...QH.....A..........Y.......G.E...EL......SNY....LAL...................................................NVIKAIRA.Y........Q..... [...]
+Q16JS2_AEDAE/571-869   ............................................................................................l-VMCLVSN..DKADR..YAAIKKK.SC...VD..R..AVATQVIKA.R..T.ITPKGGnv............rtLMSVATKVAI.......QLNCKLGGI.-.....PWV.LKNP.L-........-......-..-....-...--..TS..V.M................VIGFDVCHDTRDK...............--SK..SFGAMVASMYgggC...K.H.PK....F.F.....S.TV..N...PH.....T..........S.......G.E...EL......SNF....MAQ...................................................NVIKALHS.Y........R..... [...]
+B0XE74_CULQU/592-891   .............................................................................................LIMCIVTN..DKVDR..YAAIKKK.CC...VD..R..AVPTQVIKC.K..T.ITPKGGnp............rtLMSVATKVAI.......QLNCKLGGI.-.....PWI.VKSP.L-........-......-..-....-...--..LS..V.M................CLGFDVCRDTKDR...............--NK..TYGALVAAMY...H...G.K.HRyhpnF.Y.....S.TV..N...QH.....A..........N.......G.A...EL......SDS....LAL...................................................NVVKALRA.Y........Q..... [...]
+B0WYL9_CULQU/560-857   .............................................................................................LIMCVVTD..DKADR..YAAIKKK.CC...VN..R..AIPTQVIKS.R..T.ITPRHGn..............mMLSVATKVAI.......QLNSKLGGI.-.....PWV.VKVL.M-........-......-..-....-...--..ES..V.M................CVGFDVCRDTKDK...............--NI..CYGALVAAMN...H...G.K.HR....Q.H.....S.EF..Y...ST.....V..........N.......Q.H...SY......GAD....LSDsl...............................................glNIVKALRS.F........Q..... [...]
+B4P152_DROYA/546-844   ...........................................................................................qi-VMVVMRS..QNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.R..V.IAPRQEks............agLMSIATKVVI.......QMNAKLMGA.-.....PWM.IDLP.L-........-......-..-....-...--..RG..L.M................TVGFDVCHSSKDK...............--NK..SYGALVATMD..qR...E.S.SR....Y.F.....S.TV..T...EH.....M..........K.......G.Q...EL......SEH....MSL...................................................NMTCALKT.Y........R..... [...]
+Q95PE5_DROME/1-176     .............................................................................................--------..-----..YSCIKKR.TC...VD..R..PVPSQVVTL.K..V.IAPRQQkp............tgLMSIATKVVI.......QMNAKLMGA.-.....PWQ.VVIP.L-........-......-..-....-...--..HG..L.M................TVGFDVCHSPKNK...............--NK..SYGAFVATMD..qK...E.S.FR....Y.F.....S.TV..N...EH.....I..........K.......G.Q...EL......SEQ....MSV...................................................NMACALRS.Y........Q..... [...]
+B4N6U3_DROWI/34-103    ...........................................................................................nh--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....-.--..-...--.....-..........-.......-.-...--......---....---...................................................--------.-........-..... [...]
+Q29CN1_DROPS/543-834   ............................................................................................l-ILCLVPN..NNVER..YSSIKKR.GC...VD..R..AVPTQVVTI.K..T.SKNRGL................-LSIATKIAI.......QLNCKLGYT.-.....PWM.IELP.L-........-......-..-....-...--..SG..L.M................TIGFDIAKSARDR...............--RK..AYGALVASMD..lQ...Q.N.ST....Y.F.....S.TV..-...SE.....C..........S.......A.F...DV......LAN...nLWP...................................................MMAKALRQ.Y........Q..... [...]
+A8XEN9_CAEBR/501-812   .............................................................................................MLVVMLAD..DNKTR..YDSLKKY.LC...VE..C..PIPNQCINL.R..T.LAGKSSdgg.........enknFGSIVLKIVL.......QMVCKTGGA.-.....LWR.VNIP.M-........-......-..-....-...--..QD..T.M................IVGYDLYHDSTLK...............--GK..TVGACVSTTS...S...E.F.TK....F.Y.....S.QT..R...PH.....E..........N.......P.T...QL......GNN....LTH...................................................FVRKALKK.Y........Y..... [...]
+PIWI1_SCHMD/493-790    ...........................................................................................ma--LVFIPD..---DK..VYAKVKN.FT...MS..T..GLLTQCVTQ.R..N.GSNRDDr..............rRKTVADKSVM.......QMFSKLGYD.-.....PWG.INLK.M-........-......-..-....-...--..AP..T.M................IVGLDTFHSKTGK...............---R..SVQASVFSIS...A...K.F.SQ....Y.I.....S.FV..N...SS.....K..........G.......K.N...EF......HEN....LGK...................................................NFLTALTT.F........Q..... [...]
+PIWIL_DUGJA/502-800    ..........................................................................................ial---VFVPD..---DR..VYAKVKS.FT...IS..T..GLLTQCVTT.R..N.GTNRNDk..............rRQVVSSKTVM.......QIFSKFGYD.-.....PWT.IDIK.M-........-......-..-....-...--..RP..T.M................IVGMDTFHNKGSK...............---K..SIHASVFSIN...S...T.F.SQ....Y.M.....S.FA..N...SP.....K..........G.......K.Q...EF......HDT....LSG...................................................NFKAALTE.F........K..... [...]
+PIWI2_SCHMD/516-815    ..........................................................................................mal---VFVPD..---DR..VYAKVKS.FT...MS..T..GLLTQCVTT.R..N.GTNRNDk..............rRKVVSSKTVM.......QIFAKFGYD.-.....PWT.VEIK.L-........-......-..-....-...--..RP..T.M................IVGMDTYHNKSSK...............---K..SIQASVFSIN...S...T.F.TQ....Y.M.....S.FV..V...NS.....P..........K.......G.R...QE......FHE...tLGK...................................................NFNLALED.F........K..... [...]
+B9ZU52_9TURB/589-885   ............................................................................................l-VFCLLPS..NKKQR..YDSIKRL.CY...VN..K..PVPSQCVLT.K..T.IRNPAK................VMSVATKVAL.......QISCKLGDV.-.....AWA.VSIP.M-........-......-..-....-...--..RR..T.M................IVGMDTYHDKRQS...............---V..SVQGIVFSLN...E...T.F.TQ....Y.Y.....S.YS..P...IV.....K..........G.......G.K...AE......LHN...rLEV...................................................GFNLALQK.F........R..... [...]
+A8VSS4_TETTH/479-774   ............................................................................................f-IVFILQGakGKGKN..YQYLKSF.LL...KE..K..PIPSQMILQ.G..T.IKSSKD...............gCQVICNKICN.......QICIKVGGI.P.....YII.KDLP.F-........-......-..-....-...SN..LP..T.M................LVGIDYIRKENQK...............----..SVYSFVASVD...S...T.F.CK....F.F.....S.GA..Q...LL.....D..........A.......Q.D...QN......NKF....VDK...................................................LLQASLTQ.F........K..... [...]
+A4ZYY6_TETTH/491-831   .............................................................................tfaliimnselehyhf--------..-----..YKTCKQA.IT...VD..K..GICCSLIKA.S..T.LQQYVPtqqypq....ippgnsIEAFASRFLS.......QMQAKLGES.P.....WLM.QELP.Y-........-......-..-....-...NQ..NP..C.T................MIGFSVLRQRNAR...............---K..IIVAGAASIN...K...Q.Y.SK....Y.L.....P.DY..R...VI.....S..........E.......V.S...TK......IK-....--Edgtleivelseq...........................einnsitnsmkdILQGFLSQ.F........A..... [...]
+C5LD15_9ALVE/568-697   ............................................................................................l-VMLFTPV..KDCKR.vYQIFKQV.CT...VE..R..PCITQVVRS.E..T.MRKKTS................IVAIVTRIIM.......QISAKFLGP.-.....LWH.IDLH.TS........L......T..P....M...MN..EP..C.M................LVGIDTAVAKETR...............---R..AVLGFVCSLD...S...A.S.SQ....Y.F.....S.KA..V...PL.....D..........-.......-.-...--......---....---...................................................--------.-........-..... [...]
+A0D5D7_PARTE/374-640   vlfvgdqktdftsarntllskaipnqlinlpiqdqeinrllaimtanlgsvpwsikeingqinnkksavlgiwksdnsfsaclsinkylnkyi--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....-.--..-...--.....-..........-.......-.-...SS......FGD....LDQ...................................................ILTLLLST.Y........Y..... [...]
+B9S0P9_RICCO/17-119    ............................................................................................i-LICVLAK..-KDHS..YNNLKLI.SE...TK..V..GIVAQCCSF.K..N.APRT--................KTQFLTNLAL.......KINVRLGGS.N.....MEL.FKQP.QC........-......-..L....R...SK..GH..V.M................FIGTEVNHLVSYN...............STCP..SIVDVVVIT-...-...-.-.--....-.-.....-.--..-...--.....-..........-.......-.-...--......---....---...................................................--------.-........-..... [...]
+B7R785_9THEO/119-333   ............................................................................................d-IVIMTTT.vRNELI..YAKVKSL.LL...GN..-..GIPSQVVTA.E..K.LRNTKG................LPWILENIAL.......QIYAKIGGT.P.....WTV.MSSS.P-........-......-..-....-...--..KG..E.L................VIGVSRAIDKRRN...............----..YIIGFITLFS..yD...G.D.YL....L.F.....Y.SL..A...PR.....P..........I.......E.W...QK......LDEyrnaLSQ...................................................LIVDAYRE.Y........E..... [...]
+Q11QW7_CYTH3/390-605   .........................................................................................tlpv--------..-KKSP..YHTCKAK.LI...GS..-..GIPTQDIQV.V..N.LKNA--................NQFTINNIAL.......NIYAKIGGT.-.....AWT.IEKE.DK........R......-..-....-...--..ME..E.L................VIGVGSSLSSDGK...............----..LVLGIAQIFH...S...D.G.RY....L.V.....G.DC..T...PL.....S..........T.......F.D...NY......AKN....LED...................................................YLYSAISNeI........D..... [...]
+Q9L1X1_STRCO/365-661   ...............................................................................dsspylvaksafmg--------..-----..-------.--...--..Q..GVPVQEVRI.E..T.VRQSKL................-AYPLNSIAL.......ACYAKLGGI.-.....PFV.IAAP.RT........L......-..-....-...--..AH..E.L................VIGIGSAHVKESR..............lTEPE..RVVGITTVFS..aD...G.N.YL....L.W.....N.TS..ReadYD.....D..........Y.......P.R...EL......LLS....LRD...................................................CIDTIKNR.-........N..... [...]
+D2M4C5_RHOPA/151-447   ...........................................................................................fd--------..DESNP..YYATKSV.FL...KR..-..DVPVQSVRL.E..T.MAQADS...............qLIFSMNHMSL.......ATYAKLGGT.-.....PWL.LASQ.QT........V......-..-....-...--..AH..E.L................VIGLGSHSVANSR..............iGSQQ..RFVGITTVFS...S...D.G.SY....L.L.....S.DR..T...AV.....V..........P.......Y.E...EY......ATA....LYD...................................................TLKRSITT.V........R..... [...]
+A3VQY4_9PROT/445-745   ........................................................................................lpgpq--------..---NP..YYATKAM.LL...RN..-..NVAVQNVRI.E..T.MSEPDK...............sLVYTMNQVSL.......ACYAKLGGR.-.....PWL.LAAQ.QS........V......-..-....-...--..AH..E.L................VIGLGSHTEQKSR..............fDQSV..RYVGITTVFS..sDggyH.L.SE....R.T.....G.VV..L...FE.....D..........Y.......A.T...EL......TDT....LTR...................................................TIERVRRE.-........D..... [...]
+B9MH92_ACIET/439-730   ...................................................................................apqknpylva--------..-----..-----KA.AF...LS..N..QIPTQFIAF.E..T.FSMAPA...............sLAYTLSNLAL.......AVYAKLGGI.-.....PWL.IKSD.KG........I......-..-....-...--..AH..E.V................VIGLGSAAIGESR..............fSRKE..RIVGITSVFR...G...D.G.GY....L.L.....S.NL..S...NA.....V..........P.......M.S...KY......GEA....LTE...................................................SLQGTLQR.V........R..... [...]
+A5D4D9_PELTS/458-756   ...................................................................................qlfgnknpyl--------..-----..---VTKC.FF...LQ..Q..QVPVQEVEI.E..N.IVKDDR...............qLIYILNNISL.......ASYAKMGGT.-.....PWL.LKAD.SP........I......-..-....-...--..AH..E.L................VFGLGSCQVSRSR..............lGSKE..RVVGITTVFT..gD...G.N.YL....L.-.....T.NK..S...AA.....V..........P.......F.K...EY......PKA....LLR...................................................SLRKTVAT.V........K..... [...]
+A0LL61_SYNFM/455-750   ................................................................................sqnpyfitkgsfl--------..-----..-------.--...-A..H..QIPVQEFEI.E..T.AQKNDR...............eLQYSLNNMAL.......ATYAKMNGI.-.....PWL.LKAN.PT........I......-..-....-...--..AH..E.L................IIGLGSANIADGR..............lGDSE..RYVGITTVFS..gD...G.N.YH....L.T.....N.VS..-...-R.....A..........V.......T.I...DC......YQK...aFLE...................................................ALRKAVSK.V........Q..... [...]
+D0BWJ3_9GAMM/401-693   ...................................................................................klkveenpyy--------..-----..---LGKS.LF...FM..H..QVPVQDFTI.E..L.LSQSDY...............nLSFSLNNMAL.......ACYAKMGGV.-.....PWL.LKSS.PT........L......-..-....-...--..SH..E.L................VIGIGSANIGQER..............gINGQ..RVMGITTVFS...G...D.G.SY....I.V.....S.NT..S...KA.....V..........V.......P.K...AY......CEA....LTS...................................................ILDETIEK.I........Q..... [...]
+A4WYU7_RHOS5/454-756   .......................................................................................arlpdd--------..--RNP..YIHTKSL.LL...-T..L..GVPTQQVRM.P..T.VLLEPK...............sLQYTLQNFSI.......ATYAKLNGT.-.....PWT.VNHD.KA........I......-..-....-...--..ND..E.L................VVGMGLAELSGSR..............tEKRQ..RFVGITTVFA...G...D.G.SY....L.L.....G.NV..S...KE.....C..........E.......Y.E...GY......SDA....IRE...................................................SMTGILRE.L........K..... [...]
+B7K585_CYAP8/439-744   ...............................................................................aiviildehsnlpd--------..-SINP..YLHSKSL.LL...TH..-..GIPVQEIRY.S..N.IQKDKK...............sLQYILQNFSL.......AMYAKLTGQ.-.....PWT.VDQD.QT........I......-..-....-...--..SD..E.L................VIGIGTSELSNSR..............fETRQ..RFVGITTVFR...G...D.G.NY....L.L.....S.SL..S...KE.....C..........S.......Y.D...EY......PDV....LRE...................................................STISILQE.F........K..... [...]
+C1F5Q7_ACIC5/440-735   .........................................................................................glpd--------..-ASNP..YYTTKAR.LM...AQ..-..GVPVQLLNI.E..T.IRRKSL................-DYILNNIGL.......AMYAKLGGI.-.....PWT.LTQN.SD........M......-..-....-...--..AH..E.I................IVGIGSARLNESR..............rGAGE..RVIGITTVFS...G...D.G.QY....L.L.....A.NN..T...QE.....V..........P.......S.E...EY......VDA....LTQ...................................................SLSETVSE.L........R..... [...]
+Q1PV30_9BACT/383-655   ..........................................................................................sde--------..EEEKT..YYEIKKL.LL...DK..-..GITSQFIAN.K..T.VRSGNF................-NYCLPNIAI.......AILAKLGGI.-.....PWK.LNTK.K-........-......-..-....-...--..YN..D.L................VIGYNYKKLQDQK...............----..-WIGSAVFFD..nE...G.R.LG....R.I.....Y.GF..S...EE.....R..........A.......G.E...DL......ISH....---...................................................-LKIAIDD.Y........S..... [...]
+D2QY15_PIRSD/353-529   ...........................................................................................dt-------E..DFSDQ..YYVTKHA.FL...KA..-..GLPSQFVST.K..T.IRNKAS................FKWTVSNIGM.......AVFAKLGGK.-.....PWK.VVSE.--........-......-..-....-...-N..DD..C.L................IVGIGQSHRCGED...............KTIS..RYYSYCVL--...T...D.S.SG....L.Y.....E.DV..R...VL.....G..........K.......D.T...DE......RSY....LTR...................................................FADNLLEI.F........R..... [...]
+D2QGL1_SPILD/333-520   .....................................................................................snideegv--------..---SD..TYYYLKY.HL...TK..L..GVPLQVLSH.E..K.INVEKT................LKWSTSNIGL.......ALFSKLGGI.-.....PWV.VKPS.T-........-......-..-....-...--..AD..C.L................ILGIGSAHQSNAQ...............NEIE..RFFAYSV--C...V...D.S.SG....L.Y.....K.KL..E...VL.....A..........D.......D.Q...SE......VSY....LDA...................................................L-------.-........-..... [...]
+PIWI_ARCFU/110-406     ............................................................................................g-IMLVLPE..YNTPL..YYKLKSY.LI...NS..-..-IPSQFMRY.D..I.LSNRNL................-TFYVDNLLV.......QFVSKLGGK.-.....PWI.LNVD.PE........K......-..-....-...--..--..-.-................--GSDIIIGTGAT..............rIDNV..NLFCFAMVFK...K...D.G.TM....L.W.....N.EI..S...PI.....V..........T.......S.S...EY......LTY....LKS...................................................TIKKVVYG.F........K..... [...]
+Q96Z85_SULTO/134-346   ..........................................................................aksqidsiyyrvkasflds--------..-----..-------.GL...EE..R..ATPTQIVTV.D..L.LKQRDEnk...........ntnYSWSLLPIAV.......QMFTKMGGI.P.....YAL.KQSC.IN........I......-..-....G...SE..FN..V.H................FIGLGLTSDPRNK...............---L..KRVGFVTIFN..dN...G.S.LS....Y.M.....D.SN..I...LE.....D..........N.......K.T...ES......YGR...iIYN...................................................AINRIVNL.S........N..... [...]
+A3VPN8_9PROT/165-321   .......................................................................................afverd--------..EEDFD..LHDYLKA.VG...AS..M..GVSVQLIRS.D..K.ALDYHC................RASVMWRLSI.......ALYTKAGGV.P.....WVL.EDIH.P-........-......-..-....-...--..-Q..T.A................FIGIDYAMRRVQD...............DGPR..FAICCAQVFD..aE...G.SgLE....F.IaykadG.VS..V...YG.....D..........N.......P.Y...LN......HAQ....MLK...................................................IIARSLTI.Y........Q..... [...]
+D1JFX3_9ARCH/159-437   ........................................................................................yfkfn--------..--YED..LRAHIKA.LC...VK..K..HVYTQILTK.T..S.FRPFDM................-SDNMWNLSL.......GLYVKAGGV.-.....PWK.LESG.E-........-......-..-....-...--..EN..T.C................FIGIAFGIKKGED...............-GQE..ILVGLAEVFD...V...F.G.ES....V.T.....I.KV..V...ED.....E..........F.......K.S...EV......GLH....LSEek..............................................asrLIKTAITG.Y........E..... [...]
+Q8U3D2_PYRFU/474-756   ..................................................................................lafiaarnkls--------..--SEK..FEEIKRR.LF...-N..L..NVISQVVNE.D..T.LKNKRDkyd.........rnrlDLFVRHNLLF.......QVLSKLGVK.-.....YYV.LDYR.FN........Y......D..Y....-...--..--..-.-................IIGIDVAPMKRSE...............---G..YIGGSAVMF-...-...D.S.QG....Y.I.....R.KI..V...PI.....K..........I.......G.E...QR......GESv..dMNE...................................................FFKEMVDK.F........K..... [...]
+D3S0S6_FERPL/490-768   .......................................................................................egedsf--------..----D..YYNPLKS.AL...FR..N..NILSQNFDV.T..N.YVRGDGkin..........kntIKYAVSNIIY.......NIFGKLGVK.-.....FFV.LEED.VP........Y......D..Y....-...--..--..-.-................ILGIDVGYGEAYT...............---G..KVAGCTTVHD..sE...G.R.LR....N.L.....I.PI..E...KQ.....N..........Y.......P.S...KE......TAR....IKA...................................................LLEEIEQK.K........K..... [...]
+C7P7E7_METFA/420-692   ............................................................................................g-FALIIGN.rYYEND..YYETLKM.QL...FN..L..NIISQNILW.E..N.WSKDDN................-NFMTNNLLI.......QIMGKLGIK.-.....YFA.LDAK.VN........Y......D..Y....-...--..--..-.-................IMGLDSGLGAFKS...............---N..RVSGCTVIYD..sE...G.K.IR....R.I.....Q.PI..D...VP.....S..........P.......G.E...RI......PIH....---...................................................LVVEFLET.K........T..... [...]
+B6YTQ5_THEON/463-751   ..........................................................................................lai---TLIPD..MRQEQ..FDKIKGF.FF...NN..-..GILHKAINI.N..N.LRDPSK...............dQKKLIESMIL.......QALYAFGIY.F.....YSL.DNLN.Y-........-......-..-....-...--..--..D.F................IIGLDVTREMDKS...............GRYY..GISGAAVVQN...K...N.G.QV....L.K.....I.IP..I...TS.....P..........Q.......S.S...SE......TAN....INY...................................................LIGNIQQE.A........A..... [...]
+D3S7P9_9EURY/531-824   ......................................................................licispklpnnefdelkshlfsy--------..-----..-------.QQ...TT..F..HQFMYPFNL.K..R.CLNDDD...............fKKPFINSILS.......QFFHKMGMY.-.....LFS.FSEE.L-........-......-..-....-...-G..DY..D.F................IIGYDITKEKDEN...............DKIK..GIGGSAIIYN...S...H.G.HV....I.T.....TvTF..E...DV.....H..........T.......S.S...EI......ARY....-EKlf...............................................akVYSELVPH.L........-..... [...]
+B5IR12_9EURY/528-819   ..................................................................................dlelrefynwl--------..-----..----KKE.FY...DE.tK..PLVFQGARV.E..S.VFGMYK................-RYAVPNIVL.......QMAAKLGVY.P.....YSL.ETSS.G-........Y......D..Y....-...--..--..-.-................IIGIDYTYWHERD...............--AV..SVGGGAVVVS..pS...G.L.IE....G.I.....Y.PI..A...IP.....S..........K.......R.E...SL......DMKe..iLQE...................................................WFLKTVQN.N........P..... [...]
+O67434_AQUAE/419-694   ............................................................................................l-VIVFLEE.yPKVDP..YKSFLLY.DF...VK..R..ELLKKMIPS.Q..V.ILNRTLkn............enLKFVLLNVAE.......QVLAKTGNI.P.....YKL.KEIE.GK........V......D..A....-...--..--..-.-................FVGIDISRITRDG...............-KTV..NAVAFTKIFN..sK...G.E.LV....R.Y.....Y.LT..S...YP.....A..........F.......G.E...KL......TEK....---...................................................AIGDVFSL.L........E..... [...]
+B4B3R2_9CHRO/1-219     ...............................................................................mgnlpfilaeplei--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..-A..D.Y................FIGLDISRERKRN...............SRGS..NNACGSVRL-...-...-.Y.GK....Q.G.....E.FI..Q...YQ.....L..........D.......D.Q...PI......EGE....--E...................................................ISGKFLER.F........F..... [...]
+A0YYT3_9CYAN/471-752   .............................................................................tddtedgsfysfvssr--------..-----..-------.-L...LR..R..GISSQVIYE.D..T.LKNPNN................YSYILNQVIP.......GILAKLGNL.-.....PFI.LAKP.LE........I......-..-....-...--..-A..D.Y................FIGLDISRTPKKR..............kSGSL..NVCASVR---...-...L.Y.GK....Y.G.....E.FI..R...YR.....-..........-.......L.E...DA......LTQ....GEE...................................................IDKRTLER.F........L..... [...]
+B0JXD6_MICAN/462-734   ....................................................................................rnadnteeg--------..----S..LYSWIKR.KF...LG..R..GVITQMIYE.K..T.LNDKSN................YKNILNQVVP.......GILAKLGNL.P.....YVL.AE-P.LE........-......-..-....-...--..IA..D.Y................FIGLDVGRMPKKN..............lPGSL..NVCASVRLY-...-...G.K.QG....E.F.....V.RC..R...VE.....-..........-.......-.-...DS......LTE....GEE...................................................IPQRILEN.C........L..... [...]
+B0ADC8_9CLOT/432-721   ............................................................................................p-VLVILEK..ENIDK.yYETLKKI.FG...GR..N..NIPTQFVDL.D..T.IKKCDPkid.........nkrgKESIFLNILL.......GIYCKSGIQ.-.....PWV.LANG.LS........A......D..C....-...--..--..-.-................YIGLDVCREN---...............--NM..STAGLIQVIG...K...D.G.RV....LkS.....K.TI..S...SH.....Q..........S.......G.E...KI......QIN...iLKD...................................................IIFEAKQA.Y........K..... [...]
+C4L1M1_EXISA/321-484   ............................................................................................g-VVVVIAE.eASLQH.sYQAIKRQ.FG...GK..Q..DVVTQCVEL.H..D.RVLN--................SEDTLYNILL.......GIYVKAGLQ.-.....PWI.LGEP.LH........S......D..C....-...--..--..-.-................FVGLDVSHENGKH...............----..-AAGIIQIIG...K...D.G.AM....I.K.....Q.KA..L..sTS.....E..........A.......G.E...KI......SSE...tMRE...................................................IVYDTLHA.F........E..... [...]
+C6QUV9_9BACI/2-48      ............................................................................................c--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....-.--..-...--.....-..........-.......-.-...--......---....---...................................................--------.-........-..... [...]
+C1V6Q1_9EURY/608-882   ........................................................................................aaaad--------..-YDDP..YPEFKRR.LG...-Q..L..GVPSQMITI.D..N.LGND--................--SYLGNISS.......SLIGKAGGV.P.....WRI.DDVP.GD........V......D..A....-...--..--..-.-................FVGLDVTYDHATK...............---Q..HLGAAANVIM...A...D.G.TI....L.A.....S.EA..V...TK.....Q..........A.......G.E...TF......DED...dVAN...................................................VIKHVLEI.F........A..... [...]
+B9LVW4_HALLT/464-658   .......................................................................................fsmges--------..SASDI..YHEMKKA.LR...QR..-..RVDSQMAHI.D..T.LATS--................--YALPNVAL.......GLVAAAGGI.P.....FTT.EDAM.P-........-......-..-....-...-G..ET..D.L................FIGIDVSHRYPRD..............tDERV..HIAASTTSIY...G...D.G.TI....L.G.....Y.TS..A...KP.....Q..........T.......G.E...KV......PPK...eLKN...................................................LTRQSIAG.Y........K..... [...]
+Q53W94_THET8/418-669   ....rnrlkalllreglpsqilnvplreeerhrwenallgllakaglqvvalsgaypaelavgfdaggresfrfggaacavggdgghllwtlp--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....-.--..-...EA.....Q..........A.......G.E...RI......PQE...vVWD...................................................LLEETLWA.F........R..... [...]
+B1XJG0_SYNP2/307-599   ...........................................................................................ti---LVISE..WLDNK..YKTKLTR.DA...LE..H..GITLQFMLP.L..K.ENVR-RiesnkgveskitcftsDQYRANNILL.......GLLAKAGWQ.A.....VGL.PLLN.NE........Y......-..-....-...--..AA..D.L................VIGFDAGRNETLS...............-YGT..SSFAVLADG-...-...-.-.-Q....I.L.....G.WE..L...PE.....A..........Q.......K.G...EI......LDPd..hVRR...................................................TVRRIISQ.F........Q..... [...]
+Q2JSR3_SYNJA/437-712   ...........................................................................................tv--LVVMPW..-SPNE..RKQRIRM.EA...LE..A..GIATQFMIP.G..A.------................DPYKALNVVL.......GLLCKAAWQ.P.....VLL.EPLD.D-........-......P..V....-...--..GP..E.L................IIGFDVGTNRRLY...............----..-YGASAFAVL...A...D.G.QS....L.G.....W.EL..P...AV.....Q..........R.......G.E...TF......SGD...aIYQ...................................................TVSKLVDR.F........Y..... [...]
+Q2JI93_SYNJB/454-728   ...................................................................................vlvvmplspn--------..-----..-------.-E...HK..Q..KIRLQALRA.G..I.ATQFMIp.............gaDPYKALNVVL.......GLLCKAAWQ.P.....VLL.EPLD.H-........-......-..-....-...PE..CS..E.L................TIGFDVGTNRELY...............-YGT..SAFAVLANG-...-...-.-.QS....L.G.....W.EL..P...DI.....Q..........R.......G.E...TF......SGE...aIYQ...................................................TVSKLVNR.F........Y..... [...]
+Q8DKB1_THEEB/458-739   .................................................................................tvlvvmpwsphe--------..-----..EKTRLRI.QA...LK..A..GIATQFMIP.T..P.QDNP--................--YKALNVAL.......GLLCKAKWQ.P....vYLK.PLDD.PQ........-......-..-....-...--..AA..D.L................IIGFDTSTNRRLY...............-YGT..SAFAILAN--...-...-.G.QS....L.G.....W.EL..P...DI.....Q..........R.......G.E...TF......SGQ...sIWQ...................................................VVSKLVLK.F........Q..... [...]
+Q5MZ10_SYNP6/441-718   ............................................................................................t-VLVVMPW..DSHHD..-KQKIRI.QA...IQ..A..GIATQFMVPlP..K.AD----................-KYKALNVTL.......GLLCKAGWQ.P.....IQL.ESVD.HP........-......-..-....-...-E..VA..D.L................IIGFDTGTNRELY...............---Y..GTSAFAVLA-...-...D.G.QS....L.G.....W.EL..P...AV.....Q..........G.......G.E...TF......SGQ...aIWQ...................................................TVSKLIIK.F........Y..... [...]
+A4HBN9_LEIBR/872-1190  .......................................................................................svilvt-------N..EMGTR..ATRWLKV.EC...MC..R..GVHFIAIPA.S..S.NPKRLNl..............vGAQLRQRIAT.......QFE-----L.N....pLRG.IDLR.GE........L......P..V....L...GR..RH..V.L................ILGVDSCHTNTH-...............----..SVGAIVGILS..tP...A.G.NS....L.L.....S.FF..W...RH.....D..........A.......R.G...RE......AQH....VAK...................................................HFRGILAN.A........V..... [...]
+A4HZ40_LEIIN/904-1226  ........................................................................................svili------TN..EIDTR..ATRWLKV.EC...MC..R..GAHFIAIPA.S..S.SPKK--................LNLAGAQLRM.......RIASQFELN.P.....LRG.VDLR.GE........L......P..V....L...GH..RH..V.L................VIGVDSCHTNTHS...............--VG..TIVGILST--...P...T.E.SK....L.L.....S.YF..W...RH.....D..........A.......R.G...RE......TQH....VAK...................................................HFRGILAG.A........V..... [...]
+Q4DYG9_TRYCR/791-1083  ...........................................................................................ta--AVIISA..ERETR..ASRWILA.EC...LT..R..GILGMFIPP.A..T.TPKR--................QNLLCENVRI.......QLRTKFETD.P.....AHG.VNLP.RE........V......P..A....L...AQ..RR..V.L................VVGVDACHTTTFS...............--TG..SVVGILCAPE..rN...H.L.LP....F.F.....W.KH..E...MR.....G..........Q.......E.A...DR......VTE....---...................................................HFRLVLQR.A........C..... [...]
+Q6T6J9_9TRYP/784-1082  ..........................................................................................taa---VIVTN..ERETR..LVRWMQA.EC...LT..R..GILPLFVPP.C..A.SPKQ--................QQLRCENIRL.......RLRTVFATD.P.....LRG.VDLQ.RE........V......P..A....V...AQ..RR..V.L................LVGVDSCHTPTVS...............--TG..SVVGILCTAE..rN...H.L.LP....F.F.....W.KH..E...RR.....G..........Q.......E.V...EL......VSE...hFEV...................................................LISRAMEL.Y........D..... [...]
+A4HH63_LEIBR/16-225    ...............................................................................sdaasshmssttlt--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....-.--..V...RR.....Q..........N.......A.N...EV......LNN...rFPD...................................................FLKEVTAH.F........K..... [...]
+Q6T6K0_9TRYP/549-877   ...........................................................................................vt----FLRR..PEREP..YAEWKAS.WS...GG..-..GALSQVVAK.D..L.TGGR--................ESSIVMAVAQ.......QICAKTGRL.Nw...tLDV.NQVC.PK........L......-..A....K...SD..PSggI.L................IIAADVGRDQRSVate........ssavRQEF..FAVAFVSFYVk.gT...Q.W.ST....Y.C.....N.HY..Q...VN.....G..........R.......K.E...TL......YAD....GSDcdttsmsegg...............................pptpseviskKMGEFVQE.A........K..... [...]
+Q86QW7_GIALA/412-736   ............................................................................................l-VVIVIPG..PKQDRgdLYKGIKQ.FY...TH..M..GIVTQCLLA.P..K.SSQNELq.............wyDQAVLRSVCQ.......QIYAKAGGA.-.....VWA.PVLP.PQ........N......-..-....V...YS..KS..T.M................LCALDISRPKKTVgr...........paEVPI..STAGFISTYD..gS...F.E.YI....Y.S.....Q.KK..T...LV.....P..........N.......R.L...NH......GGE....LQQqtl.............................................meaFIKNSCNV.Y........L..... [...]
+C6LTG5_GIALA/555-877   ............................................................................................l-VVVVIPG..PKQYSggLYKEVKR.FY...TD..K..GIVTQCLLT.P..R.LSRDGPe.............wyDQAILNGLCQ.......QIYAKAGGA.-.....VWA.PALP.KD........N......A..Y....-...-S..TS..T.M................LCALDVSRPKKTVgr...........ptEVPA..STAGFISTY-...E...G.S.FE....Y.I.....Y.SQkkN...LMpn.rlN..........Q.......G.G...EV......QQQt..lMKT...................................................FIKNSCEV.Y........S..... [...]
+Q0TWJ6_PHANO/160-297   .......................................................................................rgssit--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....-.--..-...--.....-..........-.......-.-...--......---....---...................................................--------.-........-..... [...]
+Q5KAT1_CRYNE/560-859   ............................................................................................i-ILCILPR..KEASI..YQTIKSV.GA...EG..LfkPVVTQCLQS.A..K.IKSDRG................IDQYCGNVAM.......KVHCKLGGV.-.....TH-.-QVK.HN........V......-..-....-...-D..KT..T.M................LCGADVTHPPSRG..............rVLYP..SIAATVASIN...G...E.N.NY....F.A.....G.CV..T...EQ.....G..........G.......R.V...EI......IQL....LDE...................................................MITHHIKT.F........E..... [...]
+Q5KAU3_CRYNE/580-879   ............................................................................................i-IFCILPK..KDPSI..YQAIKAC.AA...EQ..LfkPVVTQCLQS.L..K.IKSDRG................IEQYCGNVAM.......KVHAKLGGL.-.....THQ.VSHQ.L-........-......-..-....-...-E..RT..T.M................MVGADTGHPPAKG..............gALPP..SIAVTVAAVN...G...E.N.NR....F.V.....S.GV..R...LQ.....E..........G.......R.V...EI......IQD....LEN...................................................MMATHIQT.F........E..... [...]
+A7TMA9_VANPO/888-1209  ............................................................................................y-ILYVLRR.gNDSAV..YDRLKYI.TD...LK..F..GALNSCVVW.D..N.FKKNS-................-IQYNSNVVM.......KMNLKLLGS.Nh...sLSI.ENNK.LL........I......D..K....E...SN..LP..I.L................VLGSDVTHYPEKD...............--QN..SIASLVGSYD...D...K.F.TQ....F.P.....G.DY..M...LQ.....D.........gP.......G.E...EI......ITN....VGS...................................................LMLNRLKI.Y........Q..... [...]
+A5E477_LODEL/107-430   ............................................................................................f-LLVVLPS..KDARF..YRAVKRA.GD...LK..V..GINNSCVIV.D..T.FTKRKFd.............kfDMTLFAQVGM.......KVNLKLGGS.N.....HKL.SDAN.SK........G.....lV..D....E...KK..VP..V.F................ILGADVTHPTGES..............nEESV..SIASVVGSED...A...I.F.NS....F.P.....G.SL..R...VQ.....G..........G.......G.Q...EV......IAE....IKD...................................................MVYERLEN.F........H..... [...]
+C5MCT9_CANTT/554-879   ............................................................................................y-LLVLLPR..SDTTY..YLSVKRV.CD...LK..V..GILNSCSIL.S..V.FIKQRRg.............sfDTMTYAQMAM.......KVNIKLGGS.N....hKLS.HQDS.AS........L......V..D....K...NG..VP..I.M................ILGADVTHPTGQI..............nHESV..SIAACVASED...G...I.F.NK....F.P.....G.SI..R...IQ.....S..........G.......G.Q...EV......IKD....IKG...................................................MVLERLEN.F........H..... [...]
+B9WGS3_CANDC/555-882   ............................................................................................y-LLFILPR..QDTQL..YSAIKRA.CD...LK..I..GILNSCSVL.N..T.FTKKRRgs...........dnfDTMTYAQMAM.......KINIKLGGS.Nh...kLSK.KDSQ.GL........F......D..-....K...NN..VP..I.F................ILGADVTHPTGEI..............nSESV..SIASIVGSED...G...I.F.NK....F.P.....G.SV..R...IQ.....T..........G.......G.Q...EV......IAD....VKS...................................................MVLERLEN.F........H..... [...]
+B2WJ98_PYRTR/213-541   ...........................................................................................ct--FFLLRE..KDFDI..YAKIKRD.GD...FS..-..GNHTICAVA.S..R.IKDRNEqdnr........rsgpRWQHFSNLAL.......KMNMKLGGD.N.....HWL.DENE.LE........K......V..L....GgkdKK..QN..T.M................ILGADVIHPGSSS..............kIGAP..SIACVVGTID...S...R.F.MS....Y.R.....G.SM..R...LQ.....A..........G.......G.Q...EQ......IEDf..nFRS...................................................MIKERLEV.W........K..... [...]
+Q0U676_PHANO/647-830   ........................................................................................nvldv--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............--GP..SIAAVVASTD...S...T.A.LQ....F.P.....G.SV..T...IQ.....Q..........T.......F.D...EY......TTR...gAEDkttltapv..................................lprvlslrsMMEKRFEA.W........S..... [...]
+A7ISJ0_MYCPJ/514-830   ............................................................................................t-VLVVLPS..KDAND..YAAVKTW.GE...LH..D..GVNTICVTA.G..K.QHRL-I................DYDFQANLAL.......KFNAKLRGQ.N.....HKL.DKSF.FE........Y......L..C....H...GQ..SA..T.M................VVGADVTHPGPSS..............vDYCP..SIAAVVASTD...S...G.A.CK....Y.S.....G.SI..R...LQ.....A..........S.......R.E...EI......ITD....LQG...................................................MMTERLKV.W........Y..... [...]
+A6S1V9_BOTFB/6-263     .......................................................................................eivsva--------..-----..-------.--...--..-..-CPTVCVST.D..G.VERGAR...............pDLGVLANIAL.......KINFKLGGI.N.....HKI.ENIP.L-........-......-..-....-...-K..DR..T.M................IMGADVTHVGKGQ..............dDACP..SQAGVVATRD...S...N.Y.VH....Y.L.....A.SA..R...LQ.....P..........H.......N.T...EF......IED....LQG...................................................MVEERLEA.Y........H..... [...]
+A6SR68_BOTFB/1-284     ............................................................................................m--------..-----..-------.--...--..-..---------.-..-.------................--------CL.......KFNLKLGGV.N.....QEV.SE-G.C-........-......-..-....G...IK..AR..T.M................VVGADVTHPGDEE...............-VCP..SIAAVVATDD...N...S.Q.FK....Y.L.....G.SA..R...LQ.....E..........G.......K.Q...EY......ISD....LRG...................................................MMRERLLV.W........A..... [...]
+Q0UCE8_PHANO/551-880   ............................................................................................l-VVFLLNK..SSTPF..YAHLKDL.AD...RT..H..GIHSLCLVE.Q.yK.LIKQ-Yger..........ahlFQEYMTNVVM.......KINLKMGGI.-.....TQS.VT--.TV........S......D..Y....L...AK..NR..V.M................VLGADVVHAGPGA..............yPGTP..SIAAIVGSVD...F...S.A.GK....C.L.....G.SM..R...LQr..idT..........T.......D.R...ET......IVE....VED...................................................MVRERLEA.W........A..... [...]
+B2WJ35_PYRTR/419-708   ............................................................................................l-FILVVEK..YDTTI..YRELKNL.AD...RV..V..GIQSLCVVE.Q..M.-KKTDR...............wFDDMMRNVMM.......KLNLKLGGI.N.....HVV.DAVQ.TR........L......-..-....-...-K..SH..T.V................VLGADLVHPSGNL...............PGVP..SIASIVGSVD...N...H.A.GK....C.L.....G.SM..R...LQ.....G..........I.......D.T...TD......REL....IIE...................................................MVTERLHA.W........A..... [...]
+Q0UCU3_PHANO/737-1044  ............................................................................................l-VVLLLKT..QSIPV..YSAFKAA.AD...TE..A..GLQSICMTQ.ApnY.ISAKQKck............enIDQYMANIMM.......KANLKFGGG.Nh...tVQF.AAKP.LT........H......I..A....T...TL..QD..T.L................VLGADITHPSPGS..............lVGCP..SIAAVVGSVN...S...M.S.TK....Y.L.....G.SM..R...LQ.....E..........T.......C.K..kEI......IDD....LQA...................................................MVYERIVA.Y........E..... [...]
+Q0UCG8_PHANO/473-701   .............................................................................ekentpaysvfkylad--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............SGTP..SIAAIVGSVD...A...K.G.GK....F.L.....G.SM..R...LQ.....P..........Rl.....iA.C...ED......IQD....VES...................................................MVVERLMA.W........F..... [...]
+Q0UCH0_PHANO/670-999   ............................................................................................l-VILVLRS..KDQEV..YSNFKYL.AD...RV..F..GIPSIVMVT.A..S.NFR--Ggaw.........nvtgLDQYIGNIMM.......KANLKLGGI.N.....HSA.ESDR.GN........I......K..N....-...HL..EN..T.L................VLGSDVTHPSNGS..............lFGCP..SVAALVGSVD...N...T.G.GC....F.L.....G.SL..R...LQ.....D..........Q.......G.SkehQM......IDD....LKS...................................................MVVDRLWD.W........F..... [...]
+Q2HHM4_CHAGB/694-1033  ............................................................................................l-VFVLLPD..KGAEL..YNAIKAA.AD...IK..V..GIHTVCMVE.S..K.AAKKFNkhtk........kmqfDLQFFDNILL.......KANLKQGGI.N.....HT-.LEFP.TS........-......K..I....L...ST..WQ..A.M................VLGLDVTHSPPGAn............kaKATP..SIIGMVANAD...E...H.L.AQ....W.P.....A.TI..A...FQ.....D..........R.......EnQ...EI......VTS....MQSf................................................qtLLQPHLDR.Y........Y..... [...]
+B2WJ32_PYRTR/383-592   .......................................................hrdasgnvitgdtvtvtvkqyqrlqygrtlrhgelsav--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....-.--..-...--.....-..........-.......-.-...NI......ITG....LAT...................................................LLQTHFND.W........Y..... [...]
+B6HRB3_PENCW/625-938   ............................................................................................f-LVVVLPT..TEGKN..FDYVKYA.GD...LK..T..GILTHCILY.D..K.VLRS--................NEQYWSNNAM.......KVNLKMGGC.N.....QLL.QPAN.AR........F......-..I....G...AG..KS..T.M................VVGLDVTHPSSAD..............pEVFP..SVASIVASID...Y...R.M.GQ....W.P.....G.EV..R...AQ.....M..........R.......R.Q...EH......VVH....LKD...................................................MMLGRLHL.W........Q..... [...]
+D0U264_CRYPA/482-802   ................................................................................lalivfpyqqpsg--------..----V..YNKIKFL.GD...VV..H..GLHTVCVIG.R..K.FVKNGQ...............tQREYFANVSL.......KINLKLGGT.N.....HQL.TH-P.PE........L......-..-....-...-F..RG..T.M................VVGYDAVHPTAVE..............kEDLP..SHMALVASVD...E...G.L.GQ....W.S.....G.CY..W...TQ.....K..........R.......R.Q...EI......ADAt..nLKQ...................................................HMKSRLEL.W........M..... [...]
+Q1K6I6_NEUCR/733-1052  ............................................................................................f-VVVLLPR..KDVAI..YNMVKRA.AD...IT..F..GVHTVCCVA.E..K.FLSTKG................QLGYFANVGL.......KVNLKFGGT.N.....HN-.--IK.TP........I......P..L....L...AK..GK..T.M................VVGYDVTHPTNLAag..........qspASAP..SIVGLVSTID...Q...H.L.GQ....W.P.....A.MV..W...NN.....P..........H.......G.Q...ES......MTE...qFTD...................................................KFKTRLEL.W........R..... [...]
+B2AR52_PODAN/574-886   ............................................................................................l-VIVVLGD..QDANV..YNTVKKL.GD...VE..F..GIQTVCVVR.N..K.ITNN--................-KGYFTNVAL.......KVNLKFGGV.N.....HKL.QNAH.P-........-......-..L....L...KG..GK..T.M................VVGYDVTHPTNLPtg...........agENAP..SLVGLVASID...S...D.L.GQ....W.P.....A.IA..W...QN.....P..........A.......R.V...EQ......LDV...kLAE...................................................NFKSRLRL.W........Q..... [...]
+Q2GSQ8_CHAGB/651-969   ............................................................................................f-LLVLIPN..KDAVT..YSNIKKC.GD...CL..F..GIPTVCCRE.E..K.ITDPKG................QKGYFANVGL.......KVNLKFGGV.N.....HRV.QDTT.GL........V......-..-....-...--..AK..T.M................FVGYDVTHPTNLSag...........aaENAP..SLVGLVASVD...K...D.L.AQ....W.P.....A.VT..W...AN.....K..........A.......R.V...EK......VGQ....NDDgq..............................................fvrHFKDRLRL.W........Q..... [...]
+A4RL50_MAGGR/721-1039  ............................................................................................m-VFVILPD.sKDAAV..YNAVKRI.AD...ID..L..GVHTVCMVR.K..N.LFKNGPg..............qNPQYYANVGL.......KVNLKAGGI.N....hKLS.QDIP.V-........-......-..-....S...KG..GK..A.M................FVGWDVIHPTNLGvd...........kdSGLP..SVVGLVSSID...E...H.L.AQ....W.P.....A.VA..W...AQ.....K..........G.......G.Q...EM......ADS...rLEE...................................................RFGSRLVL.W........Q..... [...]
+C9ST09_VERA1/571-888   ............................................................................................f-VLVILPR..QDTTL..YSVIKTL.GD...CQ..F..GFHTICAVE.K..T.FTKE--................NPMTFANIGL.......KWNLKNGGI.N.....HRV.KD--.-P........I......G..I....V...AQ..GK..T.M................VVGYDVTHPTNMGlqp.........gekDVPP..SIVGLVASVD...K...D.L.GQ....W.P.....A.VA..W...EQ.....K..........A.......G.Q...EM......LDS...kLLE...................................................SFKSRLEL.W........R..... [...]
+C7YM23_NECH7/666-978   ............................................................................................f-ILIALGS..TDTAM..YSAVKLL.GD...VT..W..GIHTSCVQG.K..K.LANA--................NPGYYANVAL.......KWNLKAGGV.N.....HKL.RN--.-E........F......G..I....I...KE..GK..T.M................VVGYDVTHPTNMPtg...........asDDLP..SLVGLVATID...R...N.M.GQ....W.P.....A.VS..W...EQ.....S..........S.......K.Q...EM......LDE...vLTE...................................................AFKSRLEL.W........K..... [...]
+A4R6J1_MAGGR/641-908   ............................................................................................f-VLIILPD..KDVSR..YNMIKYL.GD...VC..Y..GVPTVCVAS.R..T.FFPARG................ADQMFGNLGL.......KINLKLGGV.N.....HKI.EDSL.LG........I......-..-....V...AQ..GK..T.M................IVGIDVAHPPAGA...............AVTA..SIAAMVASID...S...N.L.AQ....W.P.....G.EI..G...IQ.....S..........Q.......A.R...KE......QVD...aLTS...................................................MLQSRLRI.W........K..... [...]
+A2QG96_ASPNC/558-884   ............................................................................................f-LLIILPQ..AAEGL..YSRIKFL.CD...VQ..F..GIRNVCVVA.D..K.FLRS--................NDQFLSNVAL.......KLNLKLGGV.N.....QKL.LTRS.L-........-......D..M....I...SE..GK..T.M................VIGVDVTHPNSGNl.............pARAP..SVAAMVASVD...R...Y.L.AQ....W.P.....A.EI..C...TQ.....P..........A.......R.Q...EL......VTQ....LGV...................................................LLTSRLHA.W........Q..... [...]
+B6QUK3_PENMQ/689-1001  ............................................................................................f-VLVVLPR..RETFL..YNTIKYL.CD...VK..Y..GLLHACVVA.D..K.FARG--................GPQYDANVAL.......KVNLKLNGT.N.....HIV.GGT-.-Q........L......G..L....I...SK..GK..T.M................LVGIDVTHPSPGS..............vKNAP..SIAAIVASVG...K...D.L.SQ....F.P.....A.QL..H...VQ.....P..........G.......K.Q...EQ......VDA....LDV...................................................LLKSRLKI.W........H..... [...]
+C5K303_AJEDS/770-890   .................................................................................psriiirrprrq--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....-.--..-...--.....-..........-.......-.-...--......---....---...................................................--------.-........-..... [...]
+C1GSN8_PARBA/1-191     .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.M................VVATDVTHPSPGS..............aSNTP..SIAGIIASIN...S...Q.L.AQ....W.P.....A.DL..R...IQ.....T..........Y.......R.Q...EM......VSA....LDD...................................................LLETRLKL.W........A..... [...]
+C6H5C6_AJECH/26-168    ..........................................................................msnlaftafapspanspkd--------..-----..-------.--...--..-..---------.-..-.-----R................NHTYFANVAL.......ETNRKLGGA.S.....HTL.DAHK.--........L......G..F....I...PG..CK..T.M................VVCVDVTHPSPGS..............sTNAS..SGAAIVASID...Q...N.L.TQ....W.P.....A.EF..R...IQ.....A..........T.......F.Q...KM......MIS...rLDE...................................................LLKSRLRL.W........A..... [...]
+A6RDB0_AJECN/9-157     ........................................................................................lkpyv--------..-----..-------.CD...VK..F..GVHSFRAIA.S..K.FAKDRN................-HTYFANVAL.......EANRKLGGA.S.....HTL.DAHK.--........L......G..F....I...PG..CK..T.V................VVCVDVTHPSPGS..............sTNAS..SGAAIVASID...Q...N.L.TQ....W.P.....A.EL..C...TQ.....A..........V.......F.Q...KM......ISR....LDE...................................................LLKSRLKL.W........A..... [...]
+C0S8I9_PARBP/1049-1137 ............................................................................................p--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....-.--..-...--.....-..........-.......-.-...--......---....---...................................................--------.-........-..... [...]
+B6H0X0_PENCW/641-959   ...........................................................................................vf-ILGILYT..KDTGV..YNCVKQV.CD...VR..V..GIRNVNVLA.E..K.LANS--................NDQYNANVGL.......KINLKLGGA.N.....QAL.RTQD.L-........-......G..I....I...SE..GK..T.M................LVGIDVTHPSPGS..............aSTAP..SVAGIVASVD...G...T.L.AQ....W.P.....A.EI..R...VQ.....G..........A.......R.Q...EM......VAD....LET...................................................LLAGRLQH.W........R..... [...]
+A1C469_ASPCL/690-1008  ............................................................................................l-ILSIMYG..SDTEA..YNSLKKV.CD...VH..C..GVRNINVLA.E..K.LRGA--................NDQYYANVGL.......KFNLKLGGA.N.....QSL.KTSE.LG........I......-..-....V...AE..GK..T.M................LVGIDVTHPSPGS..............sATAP..SVAGMVASID...S...S.L.SQ....W.P.....A.DI..R...IQ.....T..........S.......R.Q...EM......VSD....LDA...................................................MLKARLQR.W........A..... [...]
+C8VMQ3_EMENI/660-979   ............................................................................................l-ILTILPF..NDTAL..YNCIKRA.CD...VR..H..GVRNINVLA.E..Q.FCKR--................NEQYFANVGL.......KFNLKLGGV.N.....QVV.RPSQ.L-........-......G..I....I...GE..GK..T.M................LIGIDVTHPSPGS..............aKGAP..SVAAMVASVD...S...S.L.GQ....W.P.....A.EI..R...IQ.....K..........E.......A.R..kEM......VDA....LDS...................................................MLKAHLRR.W........A..... [...]
+Q0CNH1_ASPTN/643-961   ............................................................................................l-ILGILPF..NDADY..YNAIKRA.CD...VK..F..GVRNINVLA.E..K.FLEA--................KDQYIANVGL.......KFNLKLGGV.N....qVL-.HP--.KE........L......G..I....I...GQ..GK..T.M................LVGIDVTHPSPGS..............sSHAP..SVAGMVASTD...A...T.L.GQ....W.P.....A.EL..R...IQ.....A..........S.......R.Q...EM......VED....LDT...................................................MLKVHLAR.W........A..... [...]
+B8MXT2_ASPFN/684-1002  ............................................................................................l-ILSVLPF..SDADY..YNCIKRA.CD...LT..Y..GVRNINVLA.D..K.FRDA--................NPQYFANVGL.......KVNLKLGGA.N.....QLL.DA--.KE........L......G..L....I...GQ..NK..T.M................LVGMDVTHPSPGS..............sANAP..SVAGMVASVD...S...T.L.SQ....W.P.....A.EI..R...VQ.....R..........S.......R.E...EM......IQD....LSD...................................................MLKAHLKR.W........A..... [...]
+A2R8K3_ASPNC/710-1028  ............................................................................................l-ILTILPS..NDADI..YNIVKRA.CD...LT..H..GVRNVNVVA.D..K.FRKPNN................-DQYWANVGL.......KFNLKLGGN.N.....QLI.DP--.KE........L......G..L....I...GQ..NK..T.M................LVGVDVTHPSPGS..............sSAAP..SVAGMVASID...S...T.L.GQ....W.P.....A.EL..R...IQ.....K..........P.......R.E...EM......VAE....LDA...................................................MLKAHLRR.W........V..... [...]
+B8N7A8_ASPFN/617-954   ...........................................................................................ll--YIVLPK..KESRW..YLVIKRL.CD...VE..Y..GLQTICSVG.P..K.LVAKKGqtme.......qydksLDQYMRNVAM.......KFNLKLGGT.N.....HVV.DNLR.L-........-......S..I....I...NE..DK..T.M................IVGLDVTHPTGSSqv...........ssATAP..SVAAMVASID...K...T.L.GQ....W.P.....A.TI..Q...VQ.....S..........H.......GgK...EE......IDS....LDG...................................................MFKRHLRL.W........K..... [...]
+B8MGF3_TALSN/2-137     ..........................................................................................lad--------..-----..-------.--...KD..F..GIHTICSVG.S..K.LVKDRG................RDQYMANVAL.......KFNLKLGGI.N.....QIV.ENRN.L-........-......G..I....V...DE..NK..T.M................VVGTDVTHPSPSS..............sSNAP..SVSAMVASID...K...F.L.GQ....W.P.....A.TL..R...IQ.....H..........A.......R.Q...EN......VTD....LTE...................................................MFKSRLNL.W........K..... [...]
+C7ZR18_NECH7/19-235    ...............................................................lcqgsirynapltprtstlreesyirmtii--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....-.--..-...--.....-..........-.......-.-...--......---....---...................................................-IPAVTKG.Y........-..... [...]
+C5PJP0_COCP7/663-977   ............................................................................................f-VLVILPL..EDSSI..YNRVKYR.GD...IQ..N..GIHTVCVLA.N..K.FRGI--................--QYCANVAL.......KFNLKLGGT.N.....HVL.DSSK.L-........-......G..V....V...GE..GK..T.M................LVGIDVTHPSPGS..............sSQAP..SVAAMVANVD...K...H.L.AQ....W.P.....A.SI..R...LQ.....Q.........eP.......K.A...EM......VDK....LQE...................................................MLESRLRL.W........Q..... [...]
+D4ANV6_ARTBE/642-958   ............................................................................................l-LLVILPN..DNPTV..YKRIKLN.GE...VF..H..GIQTVCVIM.S..K.FTKSSN................-VQYHANVAM.......KFNLKLGGT.N.....HVL.DDSK.MG........-......-..I....I...AG..GK..T.M................VVGIDVTHPAPGS..............sETAP..SVAGMVASID...K...T.L.GQ....W.P.....A.IL..R...LQ....rE..........A.......K.Q...EM......VDD....LTD...................................................MLKSRLRL.W........H..... [...]
+C5JDT9_AJEDS/671-859   .....................................................................................rlqqqara--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....-.--..-...--.....-..........-.......-.-...--......---....---...................................................-------E.M........K..... [...]
+C1G7F3_PARBD/674-979   .....................................................................................qqsrvrgd--------..-----..-------.--...VK..D..GIHTICVVA.E..K.FAKN--................QVQYFANVAL.......KFNLKLGGV.N.....HRL.QPSK.L-........-......G..T....L...SE..GK..T.M................VVGIDVTHPSPGS..............aPTAP..SIAGMVASVD...N...V.L.GQ....W.P.....A.SI..R...LQ.....H.........qA.......R.A...EM......VND....LDP...................................................MLQSRLQL.W........Q..... [...]
+C5JDT9_AJEDS/580-664   ............................................................................................l-VLVILPF..ASPQI..YSQVKYR.GD...IK..D..GIHTICVVA.E..K.FRKN--................QPQYFANVAL.......KFNLKLGGV.N.....HKL.QPSK.L-........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....-.--..-...--.....-..........-.......-.-...--......---....---...................................................--------.-........-..... [...]
+Q96UM0_BLUGR/565-886   ............................................................................................f-VLCILPK..NDPAI..YNSIKTV.AD...TK..A..GIHTVCCVS.S..K.FTKQQR................QEQYFGNVAL.......KFNLKAGGI.N.....HIL.EPAK.L-........-......G..I....V...SE..GK..T.M................VVGVDVTHPSPGS..............rEGAP..SVAGIVASVD...K...H.L.GQ....W.P.....S.QF..S...IQ.....A..........K.......SrT...EM......VSD....LES...................................................LFVSRLNM.W........Q..... [...]
+A7E4W2_SCLS1/692-1008  ............................................................................................f-VLCILPV..NDVML..YNTIKRH.AD...TR..A..GIHTVCVQY.S..K.FVKGDL................--QYFGNVAL.......KFNLKAGGI.N.....QTI.DK--.--........L......G..V....I...NE..GK..T.M................VVGIDVTHPSPGS..............kETAP..SVAAMVTSTD...K...L.L.GQ....W.S.....G.IC..R...LQ.....N.........qA.......R.Q...EM......VSD....LES...................................................MFMRLLDI.W........S..... [...]
+D0U265_CRYPA/712-1038  ...................................................................................lllvilpgrd-------K.gDNTEL..YNWVKTL.GD...VK..H..GVHTICVVG.Q..K.FTAA--................QDQFFANVAL.......KFNLKLGGN.N.....QSV.DPSR.L-........-......S..F....I...NE..DK..T.M................LVGIDVTHPSPGS..............rSNAP..SVAGMVASTD...K...H.L.GQ....W.P.....G.IL..S...IQ.....N..........K......aR.A...EM......VSD....LTE...................................................MLKQHLKN.W........L..... [...]
+D0U266_CRYPA/635-957   ...........................................................................................lv--WVIVPA..GSKLL..YDRIKYL.SD...VK..L..GVMTVVSVD.K..T.LKERDPr..............yQSQYLGNEAL.......KVNLKLGGM.N.....QRI.TS--.-G........L......H..F....I...SE..GK..T.M................LVGIDVIHPSTDQt.............rGGMP..SVAGMVATVD...R...H.V.AQ....W.P.....G.VL..Q...VQ.....Q..........K.......R.Q...EM......VSD....LEP...................................................MLIACLNK.W........K..... [...]
+D4B128_ARTBE/608-819   ...........................................................................................ft--LIVLPR..YDAEI..YSKVKYS.AD...VK..H..GCHTLCVVP.K..P.PKNGRPgepl........qiniQPSYLANLAL.......KINLKLGGV.N.....HQL.EPLK.KY........-......-..-....-...QS..CP..I.M................YLGIDVTHPTGTDs.............iPNAP..SIAGVVANCD...P...M.L.GQ....W.P.....A.SI..R...TQ.....A..........H.......C.V...EM......VEN....LGE...................................................MVIERLKS.W........K..... [...]
+C4JIN7_UNCRE/692-1007  ............................................................................................f-VVALLPK..YDQQI..YSLVKHQ.GD...IK..T..GIPTVCVVE.K..P.IKDKQTntsy.......vglkdDEGTLRNISL.......KVNLKLGGI.N.....HEI.TSRQ.EI........R......N..I....-...-M..QT..T.M................FIGIDVTHPTGTEs.............qSDAP..SIAAVVANTD...P...T.L.SQ....W.P.....A.SI..T...TQ.....G..........H.......R.K...EM......VED...dLYS...................................................MVLARLRV.W........K..... [...]
+C5FBF4_NANOT/570-628   ..........................................................................................pda--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....-.--..-...--.....-..........-.......-.-...--......---....---...................................................--------.-........-..... [...]
+C5P8C9_COCP7/682-993   ............................................................................................y-VIVLLPK..FDQQV..YSYVKYY.GD...IV..T..GIPNTCVTE.K..Y.VKKEKRit...........fktDGGAVENIAL.......KINLKLGGI.N.....HEI.QSDG.RI........H......D..I....-...-I..RT..T.M................FIGIDVTHPTGTDs.............qSGAP..SISAVVANND...P...T.L.AQ....W.P.....A.SI..T...TQ.....E..........H.......R.K...EM......VES...vLER...................................................MVTDRLRA.W........K..... [...]
+B0D488_LACBS/608-916   ...........................................................................................ti-VLVILSN..GDKHV..YSGLKHL.CD...CY..L..DLATVCVHS.S..K.IRKEKG................QLQYFANVAL.......KFNMKLGGV.N.....HAL.NAAN.M-........-......A..W....L...KK..AP..T.M................LVGIDVTHPGPGS..............vKGTP..SIAAVVASCE...S...D.F.AQ....Y.P.....A.SM..E...IQ.....E..........T.......K.K...EM......VTN....LAK...................................................MMWERLTL.F........K..... [...]
+A8P0D4_COPC7/619-925   ............................................................................................i-VLVILSS..GDKHV..YNGIKKL.CD...TQ..L..DLPTVCVQT.A..K.FRKEKG................QPQYFANVAL.......KVNMKLGGV.N.....HVL.DK--.DN........M......T..W....L...KQ..KP..T.M................LVGMDVTHPGPGS..............rLGTP..SVAAVVASCD...P...D.F.AQ....F.P.....C.SM..E...IQ.....E..........S.......K.K...EM......ITN....LEK...................................................MMIERLDL.F........V..... [...]
+A8P2K4_COPC7/589-903   ...........................................................................................sf-MLVLLEQ..KEKYI..YPGIKRI.GD...VE..L..GLLTLHMQL.P..R.VFGDSLgg............tkRDQYLSNVAL.......KVNTKLGGV.N.....HML.EDSA.M-........-......A..W....L...RK..KK..T.M................MVGIDVTHPSPLS..............kEGTP..SIAAVVASVD...D...N.F.VQ....F.P.....A.SL..R...IQ.....T..........S.......K.K...EM......LDE....LSD...................................................MFVERLLL.Y........E..... [...]
+B0E0C2_LACBS/610-916   ...........................................................................................sf-VLVLLEN..RDNYI..YPGIKRI.CD...VE..L..GIHTVHMQL.G..K.ALTDER...............kQDQYFSNVAL.......KVNTKLGGM.N....hLLE.PN--.-A........M......N..W....L...TK..KK..T.M................MVGIDVTHPGPNS..............rEGTP..SIAAVVANVD...D...N.F.VQ....F.P.....A.SL..R...IQ.....Q..........H.......S.K...KE......MLD...eLRD...................................................MLVERLIV.Y........E..... [...]
+B8PBB9_POSPM/331-616   ............................................................................................l-LIVMLPW..RKRQL..YAAIKYY.TD...VV..L..GIHTAHILL.P..K.AHGD--................--GYLSSLAL.......KLNAKLGGI.N.....YYL.DDQS.I-........-......R..W....L...SD..RA..N.M................IVGLHVRHSLPSM...............NMAW..TTAAMVSNVD...G...F.F.HN....F.P.....A.HL..E...VT.....V..........D.......F.Q...K-......--P...dVGR...................................................LFGQCLAL.Y........R..... [...]
+A2DXK9_TRIVA/462-624   .............................................................................................FIICVLPD..GNSQL..YSTLKIF.LT...SS..L..GIPSSFVTD.E..S.LVANKQ...............sMDQIATDMCL.......SIICKTGGV.P....fY-V.SPVS.LP........L......-..-....-...--..RN..T.V................FAGFEVSQTNVAAva..........sydN---..----------...-...-.-.--....-.-.....-.--..-...--.....-..........-.......-.-...--......---....---...................................................--------.-........-..... [...]
+A1D5I6_NEOFI/71-143    ..........................................................................................iey--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....-.--..-...--.....-..........-.......-.-...--......---....---...................................................--------.-........-..... [...]
+B2VW51_PYRTR/606-910   ............................................................................................f-LFALLPS..DNTVL..YDSIKLL.FD...CK..L..GLPSVCCIG.S..K.FAKL--................DPHYFANVAM.......KFNQKLGGV.N.....HTV.PLAK.LA........-......-..-....P...LD..AQ..T.I................IFGIDVTHPSPGS..............sQTAP..SIAGVVASVD...A...K.F.SQ....Y.A.....A.SM..R...TQ.....A..........R.......R.V...EM......VAE....LEE...................................................MIVERLEL.W........K..... [...]
+Q0UNU9_PHANO/666-973   ............................................................................................f-LFVILPS..DNAVL..YDCIKFV.CD...CK..L..GVPNICNIG.S..K.FSKEKG................QMQYFANVAM.......KFNQKLGGV.N.....HT-.VELK.RM........A......P..-....-...LD..PQ..T.I................LFGIDVTHPSPGS..............sDSAP..SVAGVVASVD...S...L.F.SQ....F.P.....A.SM..R...TQ.....R..........G.......R.Q...EM......VEE....LEE...................................................MIVERLKL.W........Q..... [...]
+B8PJA4_POSPM/353-665   ............................................................................................l-ILAFLPV..NAPDI..RRRIKHW.GD...VD..K..GVPTQCLRA.G..K.WERA--................RDQYINNVALnsrpqitRINAKLGGV.N.....SAI.NA-K.LL........-......-..-....-...-P..QC..T.M................VIGADVGHPGPGI...............MNRP..SVTSLVASVD...P...D.A.TK....Y.T.....T.YA..S...VQ.....A..........P.......R.V...EI......IQD....LEQ...................................................MVTRAISD.F........R..... [...]
+B0DLH7_LACBS/515-821   ............................................................................................i-LVVILPD..EAATI..LHTVKFW.GD...VK..Y..GILTQCVRA.D..K.LLKA--................NDQYWNNVAL.......KLNARLGGL.N.....YHA.SGSR.T-........I......N..D....L...KK..EP..Y.I................IMGADVGHPGPRV...............-RKP..SVTSLVFSLD...M...H.A.TK....Y.A.....S.MC..R...IQ.....N..........P.......R.Q...EV......IQD....LRE...................................................MVVSALKG.F........I..... [...]
+A8NFX5_COPC7/531-721   .............................................................................................MLVVILPE..DALNL..KAKVKYF.GD...IT..H..GVPTQCLRV.S..K.LLDPKSrrlk........qprqLNQYFNNVAL.......KINARLRGV.N....vMLE.SKIP.GG........S......P..LailsT...QG..RK..T.M................IIGVDVSHPGPGV...............TNRP..SVASLVFSLY...Q...G.G.AQ....Y.A.....A.TT..T...IQ.....K..........P.......R.L...EK......VEQ....LAS...................................................MFTYALNS.Y........S..... [...]
+A8NFX0_COPC7/514-795   ............................................................................................m-LIVLLPS..EAAHL..RTEVKYW.GD...AV..N..GVKTQCLRF.G..K.TMN---................-NQYCNNVAL.......KVES--GKA.L.....REF.ANDD.R-........-......-..-....-...--..--..-.-................---ADIGHPGAGI...............RNKP..SVSGLVFSIS...Q...F.A.TE....Y.A.....A.IT..R...IQ.....P..........P.......R.V...EA......IVD....LEE...................................................MFRYAMDK.F........R..... [...]
+A8PFS7_COPC7/454-749   ....................................................................fvvvlpqggdeirigvkhfgnfinp--------..-----..-------.--...--..-..GIATQCLKG.F..Q.CRGA--................RPQYWANVMI.......QVNGKLGGI.-.....HAV.PNST.TS........G......S..L....V...DE.aIA..T.M................LIGADVTHPPPGDq.............sKHKP..SFAAIVWSWD...R...H.Y.AR....Y.R.....A.RD..S...IQ.....R..........G.......R.E...EI......IQH....MKP...................................................MAKEAFDD.F........K..... [...]
+A8NXQ6_COPC7/547-849   ............................................................................................l-IVVVLPDgpVANEI..YSQVKFF.GD...VK..M..GVHTQCMRA.M..R.CFGG--................NNQYFANIAL.......KLNARLGGV.Nv...aPDL.SDGV.SR........N......L..L....S...PP..NK..T.L................VMGADVIHPSPGS...............EGRP..SFTAVVGSTD...C...N.M.TR....F.V.....S.ST..R...AQ.....T..........S.......R.E...EI......IDD....LKD...................................................MSMEVLGQ.Y........K..... [...]
+A8P6A7_COPC7/477-803   ............................................................................................l-IFAVLPP..NSGDI..YTGVKRF.GD...VT..M..GIATQCLLS.N..K.CKKG--................NHQYWANVTL.......KVNVKLGGI.N....fY--.PELR.GD........I......-..L....D...PA..KP..T.I................IMGADAIHPPPGV...............RDKP..SVTALVSSID...S...K.L.AR....Y.V.....A.TS..R...VQ.....K..........Gsds.gkgG.R...EI......ILD....MED...................................................MCVELFEK.W........Kdyqsr [...]
+B0CXE0_LACBS/567-880   .............................................................................................LIVVILPD..GGDDI..YTAVKHF.GD...VT..M..GVATQCLLA.K..K.CYRA--................NAQYWANVML.......KVNVKLDGI.Ns...vPDL.PSLT.DP........-......-..-....-...-A..HP..T.I................IMGADVIHPAPGT...............EGRP..SFTALVASVD...T...T.V.SK....Y.V.....A.MS..R...VQ.....T..........G.......R.Q...EM......IDD....LED...................................................MCKEGLTK.W........Qayraa [...]
+A8PFQ6_COPC7/458-767   ............................................................................................l-VVVILPE..GGDEI..YTSVKHF.GD...IV..R..GVATQCLIG.R..K.CSRA--................RPQYWANVLL.......KVNVKLGGI.N.....SII.DPSG.SP........L......-..A....D...PA..NP..T.V................VMGADVIHPAPGS...............EGRP..SFTALVSSVD...T...H.A.TK....Y.I.....A.CN..N...VQ.....E..........G.......R.T...EI......IED....LEA...................................................MVENGLTN.Yidy.rrevE..... [...]
+B0CYG1_LACBS/553-863   .............................................................................................LIVVVLPE..GGNDI..YTAVKHF.GD...IT..M..GVATQCMKS.S..K.CFRA--................KPQYYANISL.......KINVKLGGI.N.....TI-.PD-P.SS........V......S..V....L...TDphQP..T.I................VMGADVIHPAPGS...............DGRP..SFTALVANVD...S...D.T.AK....Y.I.....A.DS..R...VQ.....T..........S.......R.Q...EM......IEE....LQA...................................................MSKHVLSM.Y........M..... [...]
+B0D2D0_LACBS/417-738   ............................................................................................l-IVAVLPD..NVGDL..YSTIKHH.GD...IR..F..GVATQCLKS.H..K.CSRA--................KEQYWKNVML.......KVNVKLGGI.N.....VVP.SSTE.LS........D......P..A....-...--..NP..T.IvigtpsaiiasiltfcLSGADTAHPAPGA...............HDRP..SFTSVVANVD...S...N.V.AK....Y.V.....A.ST..R...VQ.....K..........G.......R.Q...EI......ITD....LKE...................................................MCKDVLKL.YgnyqekmeK..... [...]
+B2RFN0_OIKDI/550-850   ...........................................................................................fa--LVILPR..RDSHI..YSIVKEK.AE...LV..F..GVVTQCVQS.R..N.VERA--................NAMFYGNLLQ.......KINVKLGGV.N.....TKV.VNRI.Q-........-......-..-....L...FT..KP..I.M................IVGLSFSHPAPGS...............-RNP..SIVTASFSCD...A...S.G.TK....Y.F.....V.GK..R...LQ.....S..........S.......R.F...SL......ATG....IKD...................................................LFLEGLKG.F........Y..... [...]
+C5K8K7_9ALVE/727-977   ...............................................................................aftlerseavggfw--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............----..-IASAVGSVD...N...D.V.NL....Y.A.....T.AS..S...VQ.....D..........T.......G.T...RI......LD-....IET...................................................LTFRLLER.F........Y..... [...]
+B9Q8Q1_TOXGO/379-692   ............................................................................................l-LFVILNE..RVSLD..IYQIVKS.-C...TD..V..NFPSQCLNG.R..H.KCIDAIfrg..........dnpNPQYFANVMS.......KVNMKLQGV.N.....QTL.EADI.IK........Q......E..I....G...TD..KS..T.L................VLAVETSFFANPTkt..........sppPTAP..IVCACTGNMD...D...D.L.GA....F.G.....H.AV..C...VE.....S..........R.......K.H...PI......VTD....IGS...................................................MFKTILS-.Y........R..... [...]
+Q4PLA9_PICGL/597-913   ............................................................................................f-LLCILPE.rKNSDL..YGPWKRK.FL...AD..L..GVINQCIAP.P..N.MRKV--................NDQYLTNVAL.......KINAKVGGL.N....sVLS.VEFA.HK........I......P..K....I...ST..KP..T.I................IIGMDVSHGSPGH...............ADSP..SISAVVSSRE..wP...L.I.SR....Y.R.....A.SV..R...TQ.....S..........P.......K.V...EM......IEA...lYKPlpsg...........................................kdagMISELLVD.F........Y..... [...]
+A5BG74_VITVI/577-717   .............................................................................................FILCILPQ.kKNCDI..YGPWKRQ.CL...SG..C..GVPTQCIAP.S..T.PVV---................NDQYLTNLLL.......KINAKLGGL.N....sLLT.MGYC.PS........L......R..L....I...ST..IP..T.L................ILGMDVSHGSPGR...............ADVP..SIAAVVSSRH..wP...S.I.SQ....Y.R.....A.TV..R...TQ.....S..........P.......K.L...EM......IDS....L--...................................................--------.-........-..... [...]
+C0P9X1_MAIZE/1-253     .....................................................................................mnsklale--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.--HR.QM........I......P..V....V...TQ..IP..T.L................ILGMDVSHGSPGR...............ADIP..SIAAVVGSRC..wP...L.I.SR....Y.R.....A.SV..R...TQ.....S..........P.......K.V...EM......IDS...lFKPlddg...........................................kddgIMRELLLD.F........Y..... [...]
+O48771_ARATH/542-860   .............................................................................................FILCILPE.rKTSDI..YGPWKKI.CL...TE..E..GIHTQCICP.I..K.I-----................SDQYLTNVLL.......KINSKLGGI.N....sLLG.IEYS.YN........I......P..L....I...NK..IP..T.L................ILGMDVSHGPPGR...............ADVP..SVAAVVGSKC..wP...L.I.SR....Y.R.....A.AV..R...TQ.....S..........P.......R.L...EM......IDS...lFQPiente.........................................kgdngIMNELFVE.F........Y..... [...]
+A5CB61_VITVI/15-305    ............................................................................................f-LLCVLPE.kKNSEI..YGPWKKR.SL...SD..F..GIVTQCISP.T..K.I-----................NDQYLTNVLL.......KINTKLGGT.N....sLLA.IEHT.SR........I......P..L....I...KD..TP..T.M................ILGMDVSHGSPGQ...............ADVP..SIAAVVGSRC..wP...L.I.SR....Y.R.....A.SV..R...TQ.....S..........P.......K.V...EM......IDA...lYKPlang...........................................nddgMIRELLVD.F........F..... [...]
+Q3E984_ARATH/528-708   ............................................................................................f-LLCILEK..KNSDV..YEKSCSM.WN...CE..C..IVPPQNL--.-..-.------................NDQYLTNLLL.......KINAKLGGL.N....sVLD.MELS.GT........M......P..L....V...MR..VP..T.I................IIGMDVSHGSPGQ..............sDHIP..SIAAVVSSRE..wP...L.I.SK....Y.R.....A.CV..R...TQ.....S..........P.......K.V...EM......IDS...lFKPvsdk...........................................ddqgIMRELLLD.F........H..... [...]
+Q56X15_ARATH/234-541   ............................................................................................f-LLCILAE.rKNSDV..YGPWKKK.NL...VD..L..GIVTQCIAP.T..R.L-----................NDQYLTNVLL.......KINAKLGGL.N....sLLA.MERS.TA........M......P..K....V...TQ..VP..T.I................IVGMDVSHGSPGQ...............SDIP..SIAAVVSSRQ..wP...L.I.SK....Y.K.....A.CV..R...TQ.....S..........R.......K.M...EM......IDN...lFKPvng............................................kdegMFRELLLD.F........Y..... [...]
+Q9ZVD5_ARATH/577-885   .............................................................................................FILCVLPD.kKNSDL..YGPWKKK.NL...TE..F..GIVTQCMAP.T..R.QPND--................--QYLTNLLL.......KINAKLGGL.N....sMLS.VERT.PA........F......T..V....I...SK..VP..T.I................ILGMDVSHGSPGQ...............SDVP..SIAAVVSSRE..wP...L.I.SK....Y.R.....A.SV..R...TQ.....P..........S.......K.A...EM......IES...lVKKngt............................................eddgIIKELLVD.F........Y..... [...]
+B9EV67_ORYSJ/22-172    .........................................................................cgisiaqeftqvaarvlpap--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....-.--..-...--.....-..........-.......-.-...--......---....---...................................................--------.-........-..... [...]
+Q2LFC1_NICBE/558-866   ............................................................................................f-LLCLLPE.rKNCDI..YGPWKRK.NL...AE..F..GIVTQCIAP.T..R.V-----................NDQYITNVLL.......KINAKLGGL.N....sMLT.VEHA.PA........I......P..M....V...SK..VP..T.I................ILGMDVSHGSPGQ...............SDVP..SIAAVVSSRQ..wP...S.I.SR....Y.R.....A.SV..R...TQ.....S..........P.......K.V...EM......IDN...lFKRasdt...........................................edegIMREALLD.F........Y..... [...]
+A5AMR1_VITVI/53-183    .......................................................................................lptllh--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....-.--..-...--.....-..........-.......-.-...--......---....---...................................................--------.-........-..... [...]
+B9SN14_RICCO/570-878   ............................................................................................f-LLSIFPD.rKNSDI..YGPWKRK.NL...AE..F..GIFNQCLCS.P..N.RL----................SEMYVTNVLM.......KINAKLGGL.N....tFLA.VEQS.RN........V......P..F....V...SK..VP..T.I................IFGMDVSHGSPGQ...............SDVP..SIAAVVSSRN..wP...L.L.SR....Y.R.....A.SV..H...SQ.....S..........P.......K.V...EM......IDS...lFKPegk............................................dddgIIRELLLD.F........Y..... [...]
+A9SKW0_PHYPA/518-721   ............................................................................................f-ILVALPTdsSSSNL..YVAFKRY.FE...MR..I..GVISQCMIK.P..R.QF----................NPQYLWNLVL.......KINQKMEGF.N....sPLT.SKIT.S-........-......-..C....L...GG..AP..T.I................IFGIDVSHGSIGE...............-NFP..SVAAVVATKN..wP...D.V.FH....F.A.....T.RA..G...TQ.....Q..........S.......K.L...KL......IEG....LWEpksamvn.....................................itksddvFFRDLLLE.F........H..... [...]
+A9RNH7_PHYPA/593-893   .............................................................................................FILVILPD..KDSPI..YVPFKRF.CE...MK..I..GVVSQCMVK.P..R.QLND--................--QYLGNLAL.......KINLKMGGF.N....sPLS.PR--.--........M......V..S....C...LG..PS..T.I................IFGMDVSHGSPGE...............SSVP..SIAAVVATKN..wP...D.V.FH....Y.S.....T.QV..R...IQ.....P..........A.......K.T...EM......IEG....LHDsk...............................................ggMVKECLKA.Y........Y..... [...]
+A9SRY5_PHYPA/573-879   .............................................................................................FILAILAE..KDSPI..YVPFKRL.CE...IR..L..GIISQCMVK.P..R.TLND--................--QFLGNLAL.......KINLKMGGL.N.....SPL.SQRM.L-........-......-..H....C...LG..QS..T.I................IFGMDVTHGSPGD...............VEIP..SIAAVVATKN..wP...E.V.FH....Y.S.....T.QV..K...VQ.....P..........A.......R.M...EM......IQG....LYEpe...............................................ggMVRELLMS.F........Y..... [...]
+A9SKW0_PHYPA/722-774   .........................................................................................ttts--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....-.--..-...--.....-..........-.......-.-...--......---....---...................................................--------.-........-..... [...]
+A9TD99_PHYPA/2-180     ................................................................................emieglhiegkgg--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....-.--..-...--.....-..........-.......-.-...--......---....---...................................................MVKDLLLE.Y........H..... [...]
+A8J9T3_CHLRE/1058-1164 .......................................................................................fmvlga--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....-.--..-...--.....-..........-.......-.-...--......---....---...................................................--------.-........-..... [...]
+A8J0N0_CHLRE/619-933   .............................................................................................MVMVVLPD.rGGVGL..YDAIKAA.GD...GK..L..GVATQCVNP.A..K.AGLVGPkas..........sgpSFSYAAQLAL.......SVNAKLGGA.-.....TTR.PAGR.PNd......wL......P..L....L...GG..RR..L.Mvggrgpg..rlearlgLSGALLSRGYRGAa............qvSAGV..EYAAVVGSAD...S...H.A.VD....Y.R.....V.QL..S...AQ.....V..........A.......G.N...R-......---....---...................................................---DIVVS.M........-..... [...]
+D0MT95_PHYIN/497-796   ............................................................................................f-LLVILPA..KNSPV..YGDVKRM.SD...TV..L..GLPSQCIAS.Q..N.LPRA--................NPQFCANVCL.......KINMKLNGK.N.....AVL.RD--.-P........L......P..L....I...SS..EP..T.I................IIGADVEHPRSGM...............GGRP..SIAAVVASMD...R...Y.S.AQ....Y.A.....A.RV..A...AQ.....K..........A.......S.S...D-......IQQ....LPN...................................................MLRELFLA.Y........Y..... [...]
+D0MT94_PHYIN/524-824   ............................................................................................q-LILVIKQ.dKGSVS..YGRIKRM.SD...TV..L..GIPSQCIVA.T..N.LRKA--................NPQVCANVCL.......KMNMKLSGK.N.....SVL.RE--.-P........L......P..L....I...ST..CP..T.I................VIGADVEHPRSGM...............GSRP..SIASVVASMD...A...Y.S.AK....Y.I.....G.RV..A...AQ.....K..........A.......A.N...D-......IQQ....LPH...................................................MLRDLFLA.F........Y..... [...]
+D0N1C0_PHYIN/587-890   ....................................................................................qiiwminvr--------..MDAHA..YGELKLM.SD...SEagV..GILSQCMLS.K..H.IPKC--................NPQYIANILM.......KVNTKLGGR.N.....GVI.S---.GQ........L......P..L....V...SA..SR..T.I................IFGADVTHPSPMD...............RSRP..SIAAVTASMD...A...N.F.IR....H.A.....S.AI..R...AQ.....G..........H.......R.V...EQ......IMN....LKD...................................................MVVELLKQ.F........Y..... [...]
+A9T6J3_PHYPA/524-842   ............................................................................................l-LIAILPD..NNGSL..YGDLKKQ.CE...TV..L..GVVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVKVGGR.N....tVLV.DALS.RR........I......P..L....V...SD..KP..T.I................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.TK....Y.A.....G.LV..C...AQ.....T..........H.......R.Q...EL......IAD...lFKEytdpmk.......................................gkmfggMIRELLIS.F........R..... [...]
+B8B2X0_ORYSI/647-968   ...........................................................................................ll--IGLLPD..NNGSL..YGDLKRI.CE...ID..L..GLVSQCCCT.K..Q.VFKM--................NKQILANLAL.......KINVKVGGR.N....tVLV.DAVS.RR........I......P..L....V...TD..RP..T.I................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.TK....Y.A.....G.LV..S...AQ.....S..........H.......R.Q...EL......IDD....LYNithdph......................................rgpicggMVRELLIS.F........K..... [...]
+AGO17_ORYSJ/514-834    ............................................................................................l-LIVILPN..NNGSL..YGDVKRI.CE...TD..I..GLISQCCLA.K..H.VLKM--................NKWYLASVAL.......KINAKMGGR.N....tVLV.DALE.MR........L......P..H....V...RD..TP..T.I................VFGAHVTHPHPGK...............ANSS..SIAAVVASQD..wP...E.V.TK....Y.A.....G.LI..S...VQ.....A..........C.......H.Q...ES......IQG...lFKVqddper.......................................gtttsgMIKEHLMS.F........Y..... [...]
+AGO12_ORYSJ/693-1012   ...........................................................................................ql-LIVILTE..-ISGS..YGRIKRI.CE...TE..V..GVITQCCAP.K..S.LQKG--................GKQYLENLAL.......KMNVKVGGR.N....tVLE.DALH.KK........I......P..I....L...TD..RP..T.I................VFGADVTHPSPGE...............DASP..SIAAVVASMD..wP...E.V.TK....Y.K.....C.LV..S...TQ.....S..........H.......R.E...EI......ISN...lYTEvkdplk.......................................giirggMIRELLRS.F........Y..... [...]
+C0PMV6_MAIZE/89-412    ............................................................................................l-LIVVLPD.aNASVF..YGRIKRL.CE...TE..L..GLVTQCCQP.K..N.VFKG--................GRQYLQNLAL.......KINVKVGGR.N....tVLE.DALN.RR........I......H..L....L...TD..LP..T.I................IFGADVTHPAPGE...............DASP..SIAAVVASMD..wP...Q.V.AK....Y.R.....C.LV..S...SQ.....G..........H.......R.E...EI......ITD...lFTQvkdpqk.......................................glinggMIRELLVS.F........Y..... [...]
+B8APJ4_ORYSI/9-101     ..................................................................................ykcsvssqshr--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....-.--..-...--.....-..........-.......-.-...--......---....---...................................................--------.-........-..... [...]
+B9FEW4_ORYSJ/531-767   .............................................................................anatvfygrikrlcet--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....E...LD..MP..T.M................IFGADVTHPPAGE...............DSSP..SIAAVVASMD..wP...E.V.SK....Y.K.....C.SV..S...SQ.....S..........H.......R.E...EI......IAD...lFTEvkdsqn.......................................rlvyggMIRELIES.F........R..... [...]
+B9MTL4_POPTR/505-810   ...........................................................................................qi-LIIILPD..-VSGS..YGTIKRV.CE...TE..L..GIVSQCCQP.K..Q.ARKC--................SPQYLENVAL.......KINVKAGGR.N....tVLE.DALN.RR........I......P..L....L...SD..TP..T.I................IFGADVTHPQPGE...............DSSP..SIAAIVASMD..wP...E.V.TT....Y.R.....G.LV..S...AQ.....K..........H.......R.Q...EI......IQD....CAG...................................................MIRELMIA.F........R..... [...]
+AGOL_ARATH/638-958     ............................................................................................l-LIVILPD..-VTGS..YGKIKRI.CE...TE..L..GIVSQCCQP.R..Q.VNKL--................NKQYMENVAL.......KINVKTGGR.N....tVLN.DAIR.RN........I......P..L....I...TD..RP..T.I................IMGADVTHPQPGE...............DSSP..SIAAVVASMD..wP...E.I.NK....Y.R.....G.LV..S...AQ.....A..........H.......R.E...EI......IQD....LYKlvqdpq......................................rglvhsgLIREHFIA.F........R..... [...]
+B8ALC4_ORYSI/596-877   ................................................................................yvfsprnmtilch--------..-----..-------.--...--..-..---------.-..-.------................----------.......---NQVGGR.Nt...vLER.AFIR.NG........I......P..F....V...SE..VP..T.I................IFGADVTHSPPGE...............DSAS..SIAAVVASMD..wP...E.I.TK....Y.R.....G.LV..S...AQ.....S..........H.......R.Q...EI......IED....LFSvgkdpv.......................................kvvnggMIREFLIA.F........R..... [...]
+C5WX34_SORBI/1-43      ............................................................................................g--------..-----..--KIKRV.CE...TD..I..GIVSQCCLM.K..H.DCRP--................NKIFLENISL.......KNNAKV---.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....-.--..-...--.....-..........-.......-.-...--......---....---...................................................--------.-........-..... [...]
+Q7FS89_MAIZE/11-170    ..................................................................................crgmalaagtv--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............----..----VVASMD..wP...Q.V.TT....Y.K.....A.LV..S...AQ.....A..........H.......R.E...EI......IQN....LGG...................................................MIRELMIS.F........Y..... [...]
+C5XBU2_SORBI/675-995   ............................................................................................l-LIVVLPD..-VSGH..YGKIKRI.CE...TD..L..GIVSQCINP.K..K.NKN---................-KQYFENVAL.......KINVKVGGR.Nt...vLER.AFVP.NG........I......P..F....V...SD..VP..T.I................IFGADVTHPTAGE...............DSSA..SIAAVVASMD..wP...Q.V.TT....Y.K.....A.LV..S...AQ.....A..........H.......R.E...EI......IQN...lFWTgtdpek......................................gtpvnggMIRELLTS.F........F..... [...]
+C5X6M9_SORBI/1-69      ........................................................................................ntfcl--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..KP..T.I................IFGADAIHPTAGE...............DSSA..FITAVVESME..rP...Q.V.MT....Y.K.....A.LA..S...AQ.....K..........H.......R.E...EM......IHN...lL--...................................................--------.-........-..... [...]
+B9FVX3_ORYSJ/462-794   ............................................................................................l-LIVILPD..-VNGY..YGRIKRV.CE...TE..L..GIVSQCLKP.G..RkLLSL--................DRQFLENVSL.......KINVKAGGR.Ns...vLQR.PLVP.G-........-......-..-....G...LE..NT..T.I................IFGADVTHPASGE...............DSSA..SIAAVVASMD..wP...E.I.TK....Y.K.....A.LV..S...AQ.....P..........P.......R.Q...EI......IQD....LFTmtevaqnadapaq.........................kaegskknficggMFRELLMS.F........Y..... [...]
+Q0DZI9_ORYSJ/119-248   ...................................................................................qstgqksphi--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....E.LI..S...AQ.....L..........E.......R.Q...EI......IGG....LFHstrdpk......................................gclkpdgMIRELMMN.F........Y..... [...]
+Q0DZI9_ORYSJ/36-107    ............................................................................................l-LIVILPE..-ERGN..YGKIKRV.CE...TK..L..GLVSQCCLP.K..N.VKTDTN................-IKYLENIAL.......KINVKT---.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....-.--..-...--.....-..........-.......-.-...--......---....---...................................................--------.-........-..... [...]
+Q0DZJ0_ORYSJ/35-101    ........................................................................................rakre--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....-.--..-...--.....-..........-.......-.-...--......---....---...................................................--------.-........-..... [...]
+B9FX53_ORYSJ/672-981   ...........................................................................................ll-LVVMTDD.kNNASL..YGDVKRI.CE...TE..I..GVLSQCCRA.K..Q.VYKERN................-VQYCANVAL.......KINAKAGGR.N.....SVF.LNVE.AS........L......P..V....V...SK..SP..T.I................IFGADVTHPGSFD...............ESTP..SIASVVASAD..wP...E.V.TK....Y.N.....S.VV..R...MQ.....A..........S.......R.K...EI......IQD....LDS...................................................IVRELLNA.F........K..... [...]
+C5X8G4_SORBI/699-1002  ............................................................................................l-LLAILPE..KNGNL..YGNFKRI.CE...TE..I..GIMSQCCLD.K..N.VRSA--................GPPYFANVAI.......KINAKFGGR.N.....LEF.ANPK.ES........L......P..V....V...SI..EP..T.I................IFGADVTHPAALD...............DTAP..SIASVVASQD..wP...T.V.AN....Y.N.....G.IA..R...AQ.....G..........H.......R.K...EL......IDG....LED...................................................IVKELLLA.F........Q..... [...]
+C5X8G7_SORBI/41-220    ..........................................................................................ivk--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....-.--..-...--.....-..........-.......-.-...--......---....---...................................................--------.-........-..... [...]
+C5WR49_SORBI/670-825   ..........................................................................................div--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....-.--..-...--.....-..........-.......-.-...--......---....---...................................................--------.-........-..... [...]
+C5WR49_SORBI/585-661   ............................................................................................l-LLAILPD..KNGSL..YGNIKRI.CE...TD..I..GLVSQCCRR.S..N.VFTE--................NSQILANIAI.......KINAKVVAS.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....-.--..-...--.....-..........-.......-.-...--......---....---...................................................--------.-........-..... [...]
+A5BG29_VITVI/774-895   ........................................................................................dlgam--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....-.--..-...--.....-..........-.......-.-...--......---....---...................................................--------.-........-..... [...]
+B9IL53_POPTR/1-160     .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.M................FMGADVTHPCPLE...............DISP..SAAAVVGSMN..wP...A.A.NK....Y.V.....S.RM..R...SQ.....T..........H.......R.Q...EI......IWD....LGA...................................................MVKGLLDD.F........Y..... [...]
+Q9C793_ARATH/649-950   ............................................................................................l-IICVMEK..-KHKG..YGDLKRI.SE...TR..I..GVVTQCCLY.P..N.ITKL--................SSQFVSNLAL.......KINAKIGGS.M....tELY.NSIP.SH........I......PrlL....R...PD..EP..V.I................FMGADVTHPHPFD...............DCSP..SVAAVVGSIN..wP...E.A.NR....Y.V.....S.RM..R...SQ.....T..........H.......R.Q...EI......IQD....LDL...................................................MVKELLDD.F........Y..... [...]
+D0EYF3_MAIZE/683-995   ............................................................................................l-LICVMER..-RHRG..YADLKRI.AE...TS..I..GVLTQCCLY.S..N.LSKL--................SFQFLANLAL.......KINAKLGGC.N....vALY.NSLP.CQ........I......P..R....Vf.sDE..EP..A.M................FMGADVTHPHPLD...............DSSP..SVVAVVASMN..wP...S.A.NK....Y.I.....S.RM..R...SQ.....T..........H.......R.K...EI......IER....LDV...................................................MTGELLDE.F........V..... [...]
+A3AXD9_ORYSJ/720-1023  ....................................................................................llfcpmlnr--------..--CHG..YKTLKLM.CE...TE..L..GIQTQCFLS.T..A.AKLDEK...............rQDQYITNLAL.......KINGKIGGS.N.....MQL.DP--.DS........I......P..V....V...SA..KD..F.M................FIGADVNHPPPGNv.............sKDIP..SIAAVVASVD...K...G.A.SK....Y.V.....T.RI..R...AQ.....Y..........H.......R.C...EM......IQN....LGD...................................................ICKELIGA.Y........E..... [...]
+B9FCH7_ORYSJ/626-928   ..........................................................................................qll--FCPMSD..-QHPG..YKTLKLI.CE...TQ..L..GIQTQCFLS.F..L.ANKQQG................QDQYMSNLAL.......KINGKIGGS.N....iQLF.GESL.P-........-......-..R....I...SG..AP..Y.M................FIGADVNHPSPGN...............VESP..SIAAVVASVD...Q...G.A.SK....Y.V.....P.RI..R...AQ.....P..........H.......R.C...EV......IQH....LGD...................................................MCKELIGV.F........E..... [...]
+Q9SHF2_ARATH/841-1145  ............................................................................................l-VLCAMTG..-KHDG..YKTLKWI.AE...TK..L..GLVTQCFLT.I..S.AIKGET...............vSDQYLANLAL.......KINAKVGGT.N.....VEL.VDNI.FS........F......-..F....K...KE..DK..V.M................FIGADVNHPAAHD...............NMSP..SIVAVVGTLN..wP...E.A.NR....Y.A.....A.RV..K...AQ.....S..........H.......R.K...EE......IQG....FGE...................................................TCWELIEA.H........S..... [...]
+Q9SHF3_ARATH/665-965   ...........................................................................................tl-VLCAMSR..-KDDG..YKTLKWI.AE...TK..L..GLVTQCFLT.G..P.ATKG--................GDQYRANLAL.......KMNAKVGGS.N.....VEL.MDTF.SF........-......-..F....K...KE..DE..V.M................FIGADVNHPAARD...............KMSP..SIVAVVGTLN..wP...E.A.NR....Y.A.....A.RV..I...AQ.....P..........H.......R.K...EE......IQG....FGD...................................................ACLELVKA.H........V..... [...]
+B9SSM8_RICCO/639-934   ............................................................................................i-LVCVLPK..-EDPG..YSNLKWI.CE...TK..V..GIVTQCCLS.E..N.AFRP--................KAQFLANLAL.......KINAKLGGS.N.....VEL.FKQP.QC........-......-..L....Q...SK..GH..V.M................FIGADVNHPSSYN...............STSP..SIAAVVATMN..wP...A.A.NQ....Y.G.....A.LI..C...PQ.....D..........H.......R.A...EK......ILK....FGD...................................................MCLELVNA.Y........A..... [...]
+A5AFZ6_VITVI/719-1022  ...........................................................................................qi-LVCVMAR..-KDPG..YNYLKWF.CE...TN..I..GIVTQCCLS.S..P.ANKA--................NDQYLANLAL.......KMNAKLGGS.N.....VEL.IDRL.PH........F......-..-....E...NE..GY..V.M................FVGADVNHPGAWN...............SASP..SIAAVVATVN..wP...A.V.NR....Y.A.....A.RV..R...PQ.....L..........H.......R.T...EK......ILN....FGD...................................................MCLELIET.Y........A..... [...]
+A5B8D3_VITVI/625-924   ...........................................................................................qi-LVCVMAR..-KDAG..YGYLKWF.AE...TK..L..GMVTQCCLS.R..P.ANKV--................SDHHLANLAL.......KLNAKLGGS.N.....VEL.IXRL.PR........F......E..-....-...GE..GH..V.M................FIGADVNHPGSQN...............TTSP..SIAAVVATXN..wP...A.A.NR....Y.A.....A.RI..R...PQ.....A..........H.......R.M...EK......IQN....FGA...................................................MCLELVEX.Y........V..... [...]
+B9NA51_POPTR/676-973   ...........................................................................................qf-LLCVMSK..-KDPG..YKYLKWI.CE...TK..V..GIVTQCCLS.R..S.ANKV--................NDQYLANIGL.......KINAKLGGS.N.....AEL.SD--.-R........L......P..Y....F...GD..EN..HiM................FIGADVNHPAARN...............TTSP..SIAAVVGTTN..wP...A.A.NR....Y.A.....A.RV..R...PQ.....D..........H.......R.C...EK......ILN....FGD...................................................MCLELVEF.Y........S..... [...]
+Q10P03_ORYSJ/678-756   ........................................................................................gtead--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....-.--..-...--.....-..........-.......-.-...--......---....---...................................................--------.-........-..... [...]
+C6XVE0_PEDHD/320-460   .....................................................................................viitnskk-------E..ESDDK..LYFSLKH.RF...TN..E..GIPCQVVTK.D..L.IINDNA................LKFSLGNIAL.......QMFAKAGGI.-.....PWK.MK--.PA........T......-..-....-...--..TE..Y.L................IIGIGQSYNIEIT..............eD---..----------...-...-.-.--....-.-.....-.--..-...--.....-..........-.......-.-...--......---....---...................................................--------.-........-..... [...]
+B3SEP3_TRIAD/438-734   ....................................................................rkvevlisklkkstadcgieginek--------..-----..-------.--...--..-..---NLCMQI.K..N.IDKA--................NHQFLANLAL.......KINAKLGGT.N.....NTI.NQSE.L-........-......-..-....-...LK..KP..T.I................IFGADVTHPGIGD...............QTSP..SVAAIVGSAN...I...D.L.SH....Y.F.....H.AI..R...IQ.....E..........H.......R.K...EI......IQD....LQS...................................................VVKTMMLS.F........Y..... [...]
+A8NGN0_BRUMA/1-135     ...........................................................................................mq--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....-.--..-...--.....-..........-.......-.-...--......---....---...................................................--------.-........-..... [...]
+A3KFX7_MOUSE/1-109     .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....-.--..-...--.....-..........-.......-.-...--......---....---...................................................--------.-........-..... [...]
+Q4TF92_TETNG/161-225   .....................................................................ragerqcvcvcvregaqqvtfrcs--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....-.--..-...--.....-..........-.......-.-...--......---....---...................................................--------.-........-..... [...]
+Q8CGT7_MOUSE/455-570   .......................................................................................vlgmat--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......Q..A....V...FQ..QP..V.I................FLGANVTYPPVGD...............GKKP..SIAAVMGSMD...A...H.P.NR....Y.C.....V.TV..C...VQ.....Q..........H.......Q.Q...EI......IQD....---...................................................-----LAA.-........-..... [...]
+A8WKF9_CAEBR/562-864   ...........................................................................................ql-VVIVLPG..-KTPV..YAEIKRV.GD...TV..L..GIATQCIQS.K..N.VTRT--................TPQTLSNICM.......KMNMKLGGV.N....cVLA.PNVR.PK........I......-..-....-...FS..ES..V.I................FLGCDITHPPAGD...............SRKP..SVAAIVGSMD...A...H.P.SK....Y.A.....A.TV..R...VQ.....P..........N.......R.Q...EI......ITE....MAS...................................................MVKELLQQ.F........Y..... [...]
+A8WWP9_CAEBR/632-910   ...........................................................................................ql-VICIVSG..-KSTV..YGDLKRK.GD...L-..L..GLTTQCIRT.N..N.VARV--................SPHTLSNLCM.......KINSKLGGV.N.....VVL.SAPP.PS........T......A..-....-...-T..TP..T.L................FIGCHLSRNSVASsses......ssslnYSDT..SIACLVGSMD...G...H.P.TR....F.A.....P.IF..R...LQ.....P..........R.......N.A...NT......IID....MSE...................................................MMKEAILN.F........R..... [...]
+Q9XVI3_CAEEL/574-882   ............................................................................................l-VLCIVPG..-KSVV..YGELKRK.GE...L-..L..GLTTQCVRS.Q..N.VSKA--................SPHTLSNLCM.......KINSKLGGI.N.....VIL.SS-P.PQ........-......-..S....L...NS..EP..V.L................FIGCHLTRSSLASssds......tssiaHCDS..SIACLVGSMD...G...H.P.TQ....F.S.....P.IF..R...TQ.....P..........R.......H.Q...RT......IVD....MCE...................................................MTREAIIN.F........R..... [...]
+D4A2P5_RAT/843-954     ..........................................................................vrhcshdnflcssivfivg--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....-.--..-...--.....-..........-.......-.-...--......---....---...................................................--------.-........-..... [...]
+D4A2P5_RAT/513-742     ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINAKLGGI.N....nVLV.PHQR.P-........-......-..S....V...FQ..QP..V.I................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.SR....Y.C.....A.TV..R...VQ.....T..........S.......R.Q...EI......AQE...lLFSqevv..........................................qdltsMARELLIQ.F........Y..... [...]
+B7QBT5_IXOSC/313-623   ............................................................................................q-VIFVVVV..NKSPI..YNELKST.AE...TE..I..GVMTQCVTD.K..S.IMNKCN................-PMLVNNILQ.......KVNAKLGGV.N.....NTI.PKSV.K-........-......S..V....I...FS..KP..V.I................VMGADVTHPGAKE...............FNRP..SIAAVVASTD...P...F.A.FR....Y.I.....T.AF..R...IQ.....K..........Q.......N.M...EVkarveiIED....MKS...................................................IAKELLLG.F........Y..... [...]
+B7Q990_IXOSC/474-787   ............................................................................................k-FLLIILN..PMIDN..HDAIKLI.CE...RD..L..GLATQCCME.K..N.VFNVVDkml..........hqpLPALLVNLCH.......KVNAKCGGD.A.....NTI.SK--.--........R......P..A....I...FE..EP..V.I................ILGADVNHPAPGR...............SNHP..SYAALVGSLD...S...C.P.SK....Y.H.....A.SV..R...IQrtsanS..........N.......E.R...EI......IKD....LKG...................................................MVKEALRA.Y........Y..... [...]
+B7Q811_IXOSC/611-920   ............................................................................................e-IMVIVLA..-KNSN..YAEIKQV.AE...TD..L..GLRTQCIMD.N..N.VIKKCN................-AALVTNLCQ.......KLNAKMGGT.N....nSLL.AQ-E.K-........-......P..A....I...FQ..KP..V.I................IIGADVTHPAPGD...............KLRP..SIAACVGSLD...S...I.P.SK....F.H.....A.SI..R...IQ.....Meds....aamS.......R.V...EI......IKD....LKD...................................................MMKDMLKA.F........Y..... [...]
+B7P230_IXOSC/468-776   ............................................................................................l-VIVVLGR..--NSS..YADIKQT.AE...TS..L..GIRTQCILE.Q..N.FTRNCK................-PQLMVNLCQ.......KINAKMGGI.N....nGLL.LAQK.PE........-......-..-....I...FR..KP..V.I................IIGADVSHPAPGD...............RIRP..SIAACVGSLD...S...I.P.SK....Y.R.....A.SI..R...VQ.....L..........E.......D.Q...EA......VAR....VEMikd.............................................lsgMVIELLKA.F........R..... [...]
+Q5DG80_SCHJA/3-99      ........................................................................................hclyr--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....-.--..-...--.....-..........-.......-.-...--......---....---...................................................--------.-........-..... [...]
+C4QPD2_SCHMA/595-831   ............................................................................................f-IMLILYD..--DLA..YGTIKRL.SD...LK..M..GIRTQCVRG.S..T.LRKP--................--NVFPNLLL.......KLNGKLGGV.N.....WIV.PDLT.E-........-......-..-....Y...SK..DL..I.M................VFGADVTHPAPTQt.............hQVLK..SVAAVVGSVS...P...E.L.MR....Y.G.....A.IV..R...QQ.....A..........TtergnktT.R...EI......IDN....LHL...................................................SVGELLTL.Y........L..... [...]
+C4WWR5_ACYPI/1-266     .........................................................................................mfrm--------..-----..-------.--...--..-..---------.-..-.------................NTSTSSNILL.......KINSKLNGI.Nh...tLAI.RSSP.PS........M......-..-....-...--..EG..A.I................IFGADVTHPSPEQ...............TTIP..SVAAVAASHD...T...Y.G.SQ....Y.N.....M.EW..R...LQ.....S..........P.......K.V...EI......IQD....LED...................................................IVHIQLLK.Y........K..... [...]
+Q59HV7_BOMMO/706-1006  ............................................................................................f-LVVVVSG..RGRDY..YHKLKQI.AE...LK..V..GILTHVFKE.D..T.ATRRMN................-PQTARNILL.......KVNSKLMGI.N.....QAL.ENRS.IP........-......Q..C....L...KG..GA..V.M................IVGADVTHPSPDQ...............SNIP..SIAAVTASMD...T...K.C.YI....Y.N.....I.EL..S...IQ.....T..........P.......K.K...EM......IVQ....FED...................................................IMVDHFHA.F........K..... [...]
+B3NI38_DROER/838-1138  ..........................................................................................dla---FVIIP..QFGTS..YDIIKQK.AE...LQ..H..GILTQCIKQ.F..T.VERK-L................NPQTIGNILL.......KVNSKLNGI.N.....HKI.KDDP.R-........L......P..M....-...-L..KN..T.M................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.AA....Y.N.....M.QY..R...LQ.....R..........G.......A.L...EE......IED....MYS...................................................ITLEHLRV.Y........H..... [...]
+B4QL34_DROSI/606-729   .........................................................................................nvgc--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....-.--..-...--.....-..........-.......-.-...--......---....---...................................................--------.-........-..... [...]
+B5DKZ0_DROPS/2-120     ...................................................................................tytvcqrrpc--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................FXGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.AS....Y.N.....M.QY..R...LQ.....R..........S.......A.L...EE......IED....MES...................................................ITLEHLRV.Y........H..... [...]
+B5DWW4_DROPS/3-186     ..........................................................................................rll--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..KN..T.M................FLGADVSHPSPDQ...............REIP..SVVGVAATHD...P...F.G.AS....Y.N.....M.QY..R...LQ.....R..........S.......A.L...EE......IED....MES...................................................VALEHLRV.Y........H..... [...]
+B5DU45_DROPS/389-589   ............................................................................................d-LVFVIIP..NVGRS..YDVVKQK.AE...LK..H..GILTQCLKQ.I..T.VERKCN................-PQCIGNVLL.......KVNSKLNGI.N.....HKL.RDDP.R-........-......-..-....C...LL..KN..A.M................FLGADVTHPSPDQ...............WEMP..SVVGVAASHD...P...F.G.AS....Y.N.....M.QY..R...LQ.....R..........S.......T.L...EE......IED....MES...................................................ITLEHLRV.Y........Y..... [...]
+B4KUJ5_DROMO/715-1017  ...........................................................................................dl-VFVIIPS..-RGAT..YEVIKQK.AE...LQ..H..GILTQCIKH.N..N.VDRR-L................NAQLVGNILL.......KVNSKLNGI.N.....HKL.KDDP.R-........T......Q..L....-...--..TN..V.M................YLGADVTHPSPDQ...............RDIP..SVVGVAASHD...A...Y.G.GS....F.N.....M.QY..R...LQ.....Cga......ggR.......A.A...EE......ILD....MES...................................................IVTEHLRV.Y........K..... [...]
+B4G6N7_DROPE/19-133    ........................................................................................vrrei--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....-.--..-...--.....-..........-.......-.-...--......---....---...................................................--------.-........-..... [...]
+B5DIM7_DROPS/517-815   ............................................................................................l-VLVVIPN..-SGNF..YDKLKQK.AE...LE..Y..GILTQCIKQ.A..T.VERRCN................-GQVVGNLLL.......KMNSKLNGI.N.....HTL.KADT.AA........L......-..-....-...-P..KN..V.M................FVGADVTHPSPEQ...............REIP..SVVGVAASHD...A...F.G.AS....Y.N.....M.QY..R...LQ.....R..........G.......A.L...EE......IED....MES...................................................ILTEHLRV.Y........R..... [...]
+A9QW19_TRICA/79-190    ............................................................................................l-IIVVVPN..-SGPQ..YSFVKQA.AE...LN..V..GCLTQCIKE.R..T.IGRL--................NPQTVGNILL.......KINSKMNGT.N....hRLS.PNSR.--........-......P..L....I...MK..RP..C.M................IMGADVTHPSPDA...............RDIP..SVAAVTASHD...P...N.A.FQ....Y.-.....-.--..-...--.....-..........-.......-.-...--......---....---...................................................--------.-........-..... [...]
+B0X641_CULQU/527-832   ............................................................................................f-VIVVIPG..-IGDH..YSRLKQK.AE...LV..V..GVLTSCVKG.N..T.VKNTRS................PLTVVNNILL.......KINGKTNGT.N.....HVV.QSPD.PK........I......P..L....-...IK..KR..I.M................FVGADVTHPSPEQ...............STIP..SVVGVVASFD...R...N.G.FR....Y.K.....P.HF..Q...LQ.....D..........P.......K.K...EM......IHG....LEA...................................................IMQAMLNN.Y........K..... [...]
+B0WRW8_CULQU/638-943   ...........................................................................................df-VIVVISG..-MGDQ..YSKVKQR.AE...LV..T..GLLTQCIKG.D..T.VFKKAG................DMSTINNIWL.......KINAKTNGT.N....hVLK.PESK.PP........L......-..-....-...IR..KR..V.M................YVGADVTHPSPEQ...............TNIP..SVVGVAASYD...L...E.G.FR....Y.N.....C.CY..R...LQ.....N..........P.......K.D...EM......IRD....LEN...................................................IIKKQLLQ.F........K..... [...]
+C5J0H4_AEDAE/655-961   ............................................................................................l-VFVVIPSpgRDGDV..YAKVKQK.AE...LC..V..GLLTQCIKS.F..T.LDKKRG................DMSTISNIWL.......KINAKTNGS.N....hVLA.KNFK.PP........I......-..-....-...AR..KT..V.M................YVGADVTHPSPEQ...............TNIP..SVVGVAASYD...L...E.G.FR....Y.N.....C.CY..R...LQ.....G..........P.......K.D...EM......IRD....LQN...................................................IVIKQLRQ.F........K..... [...]
+Q5TVL2_ANOGA/535-839   ...........................................................................................vt--IVVLPS..-RGDA..YAKVKQK.AElasER..I..GLLTQCVKG.M..T.VAKKGT................DMSTLNNIML.......KINAKTNGT.N.....HCI.SQVA.V-........-......P..P....L...GR..GK..V.M................YIGADVTHPLSEN...............--EP..SVVGVAALYD...L...T.G.FR....Y.N.....C.SV..R...LQ.....G..........A.......R.D...EM......IRD....LEN...................................................IVQRQLLL.Y........K..... [...]
+B4H1E3_DROPE/6-68      ...................................................................................sistdtenqa--------..-----..-------.-E...LE..H..GILTQCIIQ.A..T.GERRFN................-GQVMSNLLL.......KMNSKLNGI.N.....PTL.KR--.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....-.--..-...--.....-..........-.......-.-...--......---....---...................................................--------.-........-..... [...]
+B9ZU55_9TURB/580-893   ............................................................................................i-LFFALPR..KDSGY..YARVKVA.AD...QL..L..IVPSQVVVA.G..G.-KG---................ITQKVDLLLQ.......KVNAKLGGQ.N.....TDL.VPMK.QD........-......P..A....M...EN..VA..R.Llge..........pimFIGADVTHPDSHD..............eDGRP..SIAAVIGSSH...R...D.I.FS....Y.A.....A.QV..R...AQ.....K..........Pia..krrA.K...ES......IDD....MQT...................................................MVRNLLRK.Y........R..... [...]
+C1DZY0_9CHLO/572-888   ............................................................................................i-VFCVLPK.fDNKHI..YNSIKEC.AE...IE..I..GVRTQCIMN.K..V.GGGGGG...............lNDQTLANIMQ.......KVNAKLGGI.N.....MLV.SPVT.SP........NaaprspT..Q....L...FS..KA..T.I................IFGGDVSHASPGS...............-QAS..SIAALVGNIN...R...S.C.TQ....Y.V.....A.RL..S...AQ.....A..........N.......R.K...EM......IDD....LKS...................................................MAREIMIE.Y........F..... [...]
+O61931_CAEEL/762-1081  .....................................................................................vysgnnne--------..--YND..YNVLKYL.AD...NK..Y..GIHTQGILE.K..S.LGVVGPs..............pKNCALTRLMV......eKVLGKVGTT.Hr...kLER.GGAH.KT........W......T..I....F...TDpaKP..T.L................VLGIDVSHPSTRDret.........gnvLQKM..SAATVVGNID...L...D.V.TE....F.R.....A.SS..R...IQ.....D..........T.......G.V...EC......LID....FSK...................................................EIDERIGE.F........I..... [...]
+A8XN44_CAEBR/716-1005  ..............................................................pgtildwfislkknldeykqsedevivplvf--------..-----..-------.--...--..-..---------.-..-.------................---------V.......IFEVRFTTL.N.....LER.QDFQ.ND........Y......-..-....-...-T..EP..T.L................LLGVDVSHPSTRDlkg.........edhVKRL..SIATVVGNID...L...D.C.TE....Y.R.....A.SS..K...IQ.....D..........V.......G.E...ER......IVR....FEN...................................................EILERICN.F........V..... [...]
+A8XRY5_CAEBR/161-269   ....................................................................................tstivnlnk--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....-.--..-...--.....-..........-.......-.-...--......---....---...................................................--------.-........-..... [...]
+A8PVW7_BRUMA/492-800   ............................................................................................l-MIFITPE..KNDDI..YGRIKVT.CD...KE..E..GVACQVILV.E..T.FLKMLGn.............peRNAVSHNICL.......KINVKLDGI.N....nEVA.RNQN.YW........K......K..F....T..dKE..SP..T.L................FMGIDVTHPPSGD...............TSAP..SIASIIGSLN...I...S.A.TK....Y.A.....A.SL..K...IQ.....Q..........P.......G.V...EV......MTY....AVD...................................................AFRTCIIK.F........G..... [...]
+B6VBQ1_CAEBE/1034-1381 ..........................................................................................lvf-IVVSGPH..KDQDA..YGYVKHH.CD...VN..L..GVVSQYVRA.E..T.AKLT--................ERNIYNTIAL.......KINAKLGGV.Nq...eLNF.SE-N.AE........M......S..L....A...EK..EErkK.Lpl............kmFVGIDVTHPTTGS...............GIDF..SIAAVVASVN...A...S.G.TK....Y.Q.....N.MI..V...TQ.....EecvpgerpgaH.......G.R...ER......TDI....LEG...................................................KFVHLLRI.F........A..... [...]
+A8XVL1_CAEBR/571-952   ...........................................................................................ki-LLFIVFS..KRRWN.fYGFVKQF.CD...VE..L..GVASQHVTA.H..V.AKRALQdms.........shkpSKRIFYQIAL.......KINGKLGGV.Nq..elDWS.ENAE.MT........V......E..E....K...EK..RK..N.Mpl............rmYVGIDVTHPTNGS...............GIDY..SIAAIVASMN...P...G.G.TV....Y.R.....N.MI..V...TQ.....E..........E.......N.R...PG......ERP....VAHgrertdilegk............................fvkllrifaeatI-VLFLFV.L........Q..... [...]
+O46002_CAEEL/57-176    ...........................................................ieymaseynytikiknhfvyslapelskknpkvk--------..-----..-------.--...--..-..---------.-..-.------................----------.......---------.-.....---.----.--........-......-..-....-...--..--..-.-................-------------...............----..----------...-...-.-.--....-.-.....-.--..-...--.....-..........-.......-.-...--......---....---...................................................--------.-........-..... [...]
+Q9XU82_CAEEL/618-985   ............................................................................................v-LMFIIIS.kRQLNA..YGFVKHY.CD...HT..I..GVANQHITS.E..T.VTKALAslr.........hekgSKRIFYQIAL.......KINAKLGGI.NqeldwSEI.AEIS.PE........E......K..E....-...-R..RK..T.Mpl............tmYVGIDVTHPTSYS...............GIDY..SIAAVVASIN...P...G.G.TI....Y.R.....N.MI..V...TQ.....E..........E.......C.R...PG......ERA....VAHgrert.........................................dileaKFVKLLRE.F........A..... [...]
+//
diff --git a/test/scripts/automated/belvu/test21 b/test/scripts/automated/belvu/test21
new file mode 100755
index 0000000..0baa847
--- /dev/null
+++ b/test/scripts/automated/belvu/test21
@@ -0,0 +1,25 @@
+#!/bin/ksh
+#
+# Description:
+#   Remove gappy columns and save the alignment
+#   in MSF format
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences to the saved results
+diffs=`belvu -Q 60 -o MSF $data_dir/ALIGN.selex >&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
+
diff --git a/test/scripts/automated/belvu/test21_results b/test/scripts/automated/belvu/test21_results
new file mode 100644
index 0000000..1596605
--- /dev/null
+++ b/test/scripts/automated/belvu/test21_results
@@ -0,0 +1,1119 @@
+PileUp
+
+ automated/belvu/../../../data/ALIGN.selex  MSF: 65  Type: X  Check: 8382  ..
+
+  Name: Q9UPQ9.4/2-1714     Len:     65  Check:   7685  Weight: 1.0000
+  Name: A8MYY3.2/16-949     Len:     65  Check:   6005  Weight: 1.0000
+  Name: A8MYY3.2/946-1098   Len:     65  Check:   6005  Weight: 1.0000
+  Name: A8MYY3.2/1098-1618  Len:     65  Check:   7685  Weight: 1.0000
+  Name: B0QY77.1/1-879      Len:     65  Check:   6005  Weight: 1.0000
+  Name: B0QY77.1/879-1390   Len:     65  Check:   5245  Weight: 1.0000
+  Name: B1ATC3.1/2-1028     Len:     65  Check:   6005  Weight: 1.0000
+  Name: B1ATC3.1/1015-1647  Len:     65  Check:   6005  Weight: 1.0000
+  Name: B1ATC3.1/1646-1790  Len:     65  Check:   8255  Weight: 1.0000
+  Name: B3N1G0.1/6-1168     Len:     65  Check:   6834  Weight: 1.0000
+  Name: B3P9S0.1/6-1187     Len:     65  Check:   7576  Weight: 1.0000
+  Name: B4E231.1/1-251      Len:     65  Check:   6005  Weight: 1.0000
+  Name: B4E231.1/251-762    Len:     65  Check:   5245  Weight: 1.0000
+  Name: B4IIY1.1/6-1184     Len:     65  Check:   7548  Weight: 1.0000
+  Name: B4PW21.1/6-1181     Len:     65  Check:   7713  Weight: 1.0000
+  Name: B4R2G2.1/6-1123     Len:     65  Check:   7548  Weight: 1.0000
+  Name: B5ME23.2/16-165     Len:     65  Check:   6005  Weight: 1.0000
+  Name: B5ME23.2/165-368    Len:     65  Check:   6005  Weight: 1.0000
+  Name: B5ME23.2/368-888    Len:     65  Check:   7685  Weight: 1.0000
+  Name: B7ZC94.1/2-868      Len:     65  Check:   6005  Weight: 1.0000
+  Name: B7ZC94.1/855-1477   Len:     65  Check:   6005  Weight: 1.0000
+  Name: B7ZC94.1/1478-1622  Len:     65  Check:   8255  Weight: 1.0000
+  Name: C9J5L7.1/16-949     Len:     65  Check:   6005  Weight: 1.0000
+  Name: C9J5L7.1/946-1098   Len:     65  Check:   6005  Weight: 1.0000
+  Name: C9J5L7.1/1098-1618  Len:     65  Check:   7685  Weight: 1.0000
+  Name: C9JA83.1/3-471      Len:     65  Check:   6005  Weight: 1.0000
+  Name: C9JA83.1/468-986    Len:     65  Check:   9424  Weight: 1.0000
+  Name: C9JAR8.1/20-121     Len:     65  Check:   6005  Weight: 1.0000
+  Name: C9JAR8.1/119-1283   Len:     65  Check:   6005  Weight: 1.0000
+  Name: C9JAR8.1/1280-1798  Len:     65  Check:   9424  Weight: 1.0000
+  Name: D2GZL8.1/5-902      Len:     65  Check:   6005  Weight: 1.0000
+  Name: D2GZL8.1/900-1051   Len:     65  Check:   6005  Weight: 1.0000
+  Name: D2GZL8.1/1051-1571  Len:     65  Check:   7475  Weight: 1.0000
+  Name: D2H997.1/2-866      Len:     65  Check:   6005  Weight: 1.0000
+  Name: D2H997.1/853-1477   Len:     65  Check:   6005  Weight: 1.0000
+  Name: D2H997.1/1476-1620  Len:     65  Check:   8593  Weight: 1.0000
+  Name: D2I222.1/1-1790     Len:     65  Check:   9424  Weight: 1.0000
+  Name: D3ZRA6.1/2-1000     Len:     65  Check:   6005  Weight: 1.0000
+  Name: D4A372.1/1-97       Len:     65  Check:   6005  Weight: 1.0000
+  Name: D4A372.1/95-1822    Len:     65  Check:   9424  Weight: 1.0000
+  Name: Q05CE3.1/20-1014    Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q29CP6.2/6-1206     Len:     65  Check:   7686  Weight: 1.0000
+  Name: Q3TRH0.1/1-49       Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q3TRH0.1/46-194     Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q3TRH0.1/194-719    Len:     65  Check:   7685  Weight: 1.0000
+  Name: Q3UHC0.2/4-818      Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q3UHC0.2/805-1437   Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q3UHC0.2/1436-1580  Len:     65  Check:   8255  Weight: 1.0000
+  Name: Q3UHK8.1/20-1269    Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q3UHK8.1/1266-1782  Len:     65  Check:   9424  Weight: 1.0000
+  Name: Q4S9I4.1/33-1574    Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q4S9I4.1/1569-1729  Len:     65  Check:   7052  Weight: 1.0000
+  Name: Q4T574.1/1-220      Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q4T574.1/239-596    Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q4T574.1/639-850    Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q4T574.1/894-1324   Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q4T574.1/1322-1473  Len:     65  Check:   8230  Weight: 1.0000
+  Name: Q8BKI2.2/38-1167    Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q8BKI2.2/1167-1691  Len:     65  Check:   7685  Weight: 1.0000
+  Name: Q8BWL0.1/2-169      Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q8BWL0.1/169-693    Len:     65  Check:   7685  Weight: 1.0000
+  Name: Q8NDV7.2/20-121     Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q8NDV7.2/119-1847   Len:     65  Check:   9424  Weight: 1.0000
+  Name: Q8SY33.1/6-1183     Len:     65  Check:   7548  Weight: 1.0000
+  Name: Q9HCJ0.3/4-822      Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q9HCJ0.3/810-1437   Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q9HCJ0.3/1434-1580  Len:     65  Check:   8255  Weight: 1.0000
+  Name: Q9UPQ9.4/2-1714     Len:     65  Check:   7685  Weight: 1.0000
+  Name: B4H887.1/32-1036    Len:     65  Check:   7686  Weight: 1.0000
+  Name: Q3TRK2.1/1-88       Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q3TRK2.1/88-612     Len:     65  Check:   7685  Weight: 1.0000
+  Name: Q8BNF0.2/9-877      Len:     65  Check:   6005  Weight: 1.0000
+  Name: B4MF11.1/6-1186     Len:     65  Check:   7563  Weight: 1.0000
+  Name: B4NHM7.1/6-1235     Len:     65  Check:   8501  Weight: 1.0000
+  Name: D0Z7B2.1/6-1203     Len:     65  Check:   7563  Weight: 1.0000
+  Name: B4JZV3.1/6-1211     Len:     65  Check:   6726  Weight: 1.0000
+  Name: Q1LZM4.1/2-292      Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q1LZM4.1/292-736    Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q4S4D3.1/1-379      Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q4S4D3.1/395-556    Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q4S4D3.1/557-654    Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q4S4D3.1/651-825    Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q4S4D3.1/823-1014   Len:     65  Check:   6991  Weight: 1.0000
+  Name: Q4S4D3.1/1091-1092  Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q3UUG8.1/1-613      Len:     65  Check:   9424  Weight: 1.0000
+  Name: C3ZJT1.1/159-315    Len:     65  Check:   6005  Weight: 1.0000
+  Name: C3ZJT1.1/328-369    Len:     65  Check:   6005  Weight: 1.0000
+  Name: C3ZJT1.1/371-689    Len:     65  Check:   6005  Weight: 1.0000
+  Name: C3ZJT1.1/730-1268   Len:     65  Check:   7030  Weight: 1.0000
+  Name: B0WTJ5.1/228-1292   Len:     65  Check:   6979  Weight: 1.0000
+  Name: Q8BXM6.1/4-513      Len:     65  Check:   9424  Weight: 1.0000
+  Name: Q99JR3.2/24-541     Len:     65  Check:   9424  Weight: 1.0000
+  Name: Q172C6.1/6-1041     Len:     65  Check:   7039  Weight: 1.0000
+  Name: B4L7C4.1/6-1178     Len:     65  Check:   2117  Weight: 1.0000
+  Name: Q172C7.1/363-538    Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q172C7.1/573-1399   Len:     65  Check:   7539  Weight: 1.0000
+  Name: Q6P7B1.1/2-313      Len:     65  Check:   7685  Weight: 1.0000
+  Name: Q3UQ45.1/7-386      Len:     65  Check:   9424  Weight: 1.0000
+  Name: Q4T0A8.1/27-228     Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q4T0A8.1/329-402    Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q4T0A8.1/405-529    Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q4T0A8.1/526-678    Len:     65  Check:   8410  Weight: 1.0000
+  Name: B7ZB91.1/13-478     Len:     65  Check:   7547  Weight: 1.0000
+  Name: Q7Q3B9.4/7-766      Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q7Q3B9.4/781-1165   Len:     65  Check:   6502  Weight: 1.0000
+  Name: Q8BX83.2/38-410     Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q172C8.1/192-646    Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q172C8.1/672-1173   Len:     65  Check:   6249  Weight: 1.0000
+  Name: B0WXH0.1/311-1189   Len:     65  Check:   6005  Weight: 1.0000
+  Name: B0WXH0.1/1191-1389  Len:     65  Check:   7973  Weight: 1.0000
+  Name: B0R1E2.1/1-289      Len:     65  Check:   6005  Weight: 1.0000
+  Name: B0R1E2.1/290-439    Len:     65  Check:   8275  Weight: 1.0000
+  Name: B1H1W1.1/13-388     Len:     65  Check:   6005  Weight: 1.0000
+  Name: A7UUT0.1/13-626     Len:     65  Check:   6005  Weight: 1.0000
+  Name: A7UUT0.1/686-771    Len:     65  Check:   6005  Weight: 1.0000
+  Name: A7UUT0.1/838-1165   Len:     65  Check:   7183  Weight: 1.0000
+  Name: Q66JU9.1/2-193      Len:     65  Check:   7685  Weight: 1.0000
+  Name: B4DKJ5.1/2-276      Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q8BWM2.1/1-223      Len:     65  Check:   9424  Weight: 1.0000
+  Name: A0NFA3.2/8-516      Len:     65  Check:   6005  Weight: 1.0000
+  Name: A0NFA3.2/687-1082   Len:     65  Check:   6107  Weight: 1.0000
+  Name: B7PWH5.1/252-389    Len:     65  Check:   6005  Weight: 1.0000
+  Name: B7PWH5.1/349-695    Len:     65  Check:   6005  Weight: 1.0000
+  Name: B7PWH5.1/720-969    Len:     65  Check:   5086  Weight: 1.0000
+  Name: Q8VD67.1/1-130      Len:     65  Check:   7685  Weight: 1.0000
+  Name: Q148P0.1/1-130      Len:     65  Check:   7685  Weight: 1.0000
+  Name: Q9JHZ1.1/1-130      Len:     65  Check:   7685  Weight: 1.0000
+  Name: B0WXG8.1/386-1198   Len:     65  Check:   6005  Weight: 1.0000
+  Name: B0WXG8.1/1199-1242  Len:     65  Check:   9217  Weight: 1.0000
+  Name: Q4TA89.1/1-282      Len:     65  Check:   8009  Weight: 1.0000
+  Name: Q4T0A9.1/1-255      Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q4T0A9.1/370-579    Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q6ZPQ4.1/1-243      Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q4TA88.1/5-275      Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q4TA88.1/319-457    Len:     65  Check:   6005  Weight: 1.0000
+  Name: B3KSX2.1/4-277      Len:     65  Check:   6005  Weight: 1.0000
+  Name: B8RJB3.1/9-266      Len:     65  Check:   6005  Weight: 1.0000
+  Name: A7SDW4.1/430-1260   Len:     65  Check:   6005  Weight: 1.0000
+  Name: A7SDW4.1/1319-1584  Len:     65  Check:   9340  Weight: 1.0000
+  Name: A8PU70.1/566-908    Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q4T5V2.1/1-136      Len:     65  Check:   6005  Weight: 1.0000
+  Name: B4DST4.1/1-168      Len:     65  Check:   6005  Weight: 1.0000
+  Name: B3RQ20.1/1143-1332  Len:     65  Check:   9945  Weight: 1.0000
+  Name: Q8BXV9.1/2-142      Len:     65  Check:   6005  Weight: 1.0000
+  Name: A7T6Q0.1/2-56       Len:     65  Check:   7556  Weight: 1.0000
+  Name: C1K8B6.1/4-244      Len:     65  Check:   6005  Weight: 1.0000
+  Name: C1K890.1/4-244      Len:     65  Check:   6005  Weight: 1.0000
+  Name: A5BE57.1/246-278    Len:     65  Check:   8909  Weight: 1.0000
+  Name: A5BE57.1/307-381    Len:     65  Check:   7622  Weight: 1.0000
+  Name: C1K8V5.1/4-177      Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q2GV87.1/66-278     Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q8MSF0.1/1-14       Len:     65  Check:   6440  Weight: 1.0000
+  Name: B4H886.1/6-148      Len:     65  Check:   6005  Weight: 1.0000
+  Name: A9USE7.1/720-774    Len:     65  Check:   4611  Weight: 1.0000
+  Name: A9USE7.1/997-1077   Len:     65  Check:   7394  Weight: 1.0000
+  Name: C5WVW4.1/223-289    Len:     65  Check:   7564  Weight: 1.0000
+  Name: P20105.2/153-385    Len:     65  Check:   6005  Weight: 1.0000
+  Name: P20105.2/537-654    Len:     65  Check:   6005  Weight: 1.0000
+  Name: C4IYK3.1/223-290    Len:     65  Check:   7563  Weight: 1.0000
+  Name: B6UA93.1/223-290    Len:     65  Check:   7563  Weight: 1.0000
+  Name: B9RQB9.1/109-178    Len:     65  Check:   6302  Weight: 1.0000
+  Name: B9RQB9.1/236-270    Len:     65  Check:   1677  Weight: 1.0000
+  Name: B9RQB9.1/300-374    Len:     65  Check:   5147  Weight: 1.0000
+  Name: B8APB9.1/226-292    Len:     65  Check:   7461  Weight: 1.0000
+  Name: Q10R21.1/226-292    Len:     65  Check:   7461  Weight: 1.0000
+  Name: Q0DUQ0.1/248-314    Len:     65  Check:   7461  Weight: 1.0000
+  Name: Q8BZH2.1/5-63       Len:     65  Check:   6005  Weight: 1.0000
+  Name: B4PJL3.1/173-393    Len:     65  Check:   6005  Weight: 1.0000
+  Name: B4PJL3.1/533-654    Len:     65  Check:   6005  Weight: 1.0000
+  Name: B5DF80.1/306-375    Len:     65  Check:   8088  Weight: 1.0000
+  Name: C1GEW9.1/11-129     Len:     65  Check:   6005  Weight: 1.0000
+  Name: C1GVG2.1/279-439    Len:     65  Check:   6005  Weight: 1.0000
+  Name: B2GUY3.1/194-262    Len:     65  Check:   6555  Weight: 1.0000
+  Name: B2GUY3.1/296-365    Len:     65  Check:   7809  Weight: 1.0000
+  Name: B3M4K4.1/89-378     Len:     65  Check:   6005  Weight: 1.0000
+  Name: B3M4K4.1/533-691    Len:     65  Check:   6005  Weight: 1.0000
+  Name: D4AC14.1/194-262    Len:     65  Check:   6555  Weight: 1.0000
+  Name: D4AC14.1/296-365    Len:     65  Check:   7809  Weight: 1.0000
+  Name: Q4T1P6.1/6-46       Len:     65  Check:   6005  Weight: 1.0000
+  Name: D4AC21.1/123-191    Len:     65  Check:   6555  Weight: 1.0000
+  Name: D4AC21.1/225-294    Len:     65  Check:   7809  Weight: 1.0000
+  Name: C5WPD4.1/242-292    Len:     65  Check:   1616  Weight: 1.0000
+  Name: B9GH32.1/107-174    Len:     65  Check:   7680  Weight: 1.0000
+  Name: B9GH32.1/295-362    Len:     65  Check:   5303  Weight: 1.0000
+  Name: A5B3Z9.1/212-283    Len:     65  Check:   4932  Weight: 1.0000
+  Name: Q6IQ30.1/296-365    Len:     65  Check:   7809  Weight: 1.0000
+  Name: O04319.1/114-183    Len:     65  Check:   8288  Weight: 1.0000
+  Name: O04319.1/304-375    Len:     65  Check:   7501  Weight: 1.0000
+  Name: P31209.2/366-435    Len:     65  Check:   8326  Weight: 1.0000
+  Name: B2RXY9.1/193-253    Len:     65  Check:   3890  Weight: 1.0000
+  Name: B2RXY9.1/296-365    Len:     65  Check:   8775  Weight: 1.0000
+  Name: A2A5N3.1/193-253    Len:     65  Check:   3890  Weight: 1.0000
+  Name: A2A5N3.1/296-365    Len:     65  Check:   8775  Weight: 1.0000
+  Name: Q9D4E6.1/307-375    Len:     65  Check:   7658  Weight: 1.0000
+  Name: Q4VC03.1/296-365    Len:     65  Check:   7809  Weight: 1.0000
+  Name: Q13310.1/296-365    Len:     65  Check:   7809  Weight: 1.0000
+  Name: D3Z5M2.1/296-365    Len:     65  Check:   7809  Weight: 1.0000
+  Name: A4IFC3.1/296-365    Len:     65  Check:   7809  Weight: 1.0000
+  Name: B1ANR0.1/296-365    Len:     65  Check:   7809  Weight: 1.0000
+  Name: B4NNJ8.1/320-445    Len:     65  Check:   6005  Weight: 1.0000
+  Name: D2I596.1/309-378    Len:     65  Check:   7809  Weight: 1.0000
+  Name: B4JL62.1/290-395    Len:     65  Check:   6005  Weight: 1.0000
+  Name: C5YBU9.1/128-201    Len:     65  Check:   5798  Weight: 1.0000
+  Name: C5YBU9.1/329-399    Len:     65  Check:   8035  Weight: 1.0000
+  Name: Q99LF8.1/296-365    Len:     65  Check:   7809  Weight: 1.0000
+  Name: C0PPV9.1/259-363    Len:     65  Check:   7544  Weight: 1.0000
+  Name: Q91YZ8.1/296-365    Len:     65  Check:   7928  Weight: 1.0000
+  Name: B9GNX9.1/266-364    Len:     65  Check:   7797  Weight: 1.0000
+  Name: A3KFU8.1/296-365    Len:     65  Check:   7928  Weight: 1.0000
+  Name: B9N4W3.1/235-341    Len:     65  Check:   7352  Weight: 1.0000
+  Name: Q6PHQ9.1/296-365    Len:     65  Check:   7928  Weight: 1.0000
+  Name: B9MVK8.1/264-361    Len:     65  Check:   6951  Weight: 1.0000
+  Name: D3AVQ3.1/284-354    Len:     65  Check:   8547  Weight: 1.0000
+  Name: A3KFU5.1/296-365    Len:     65  Check:   7928  Weight: 1.0000
+  Name: A5BPW5.1/140-241    Len:     65  Check:   7453  Weight: 1.0000
+  Name: Q3UX16.1/225-294    Len:     65  Check:   7928  Weight: 1.0000
+  Name: C0PT30.1/259-364    Len:     65  Check:   7544  Weight: 1.0000
+  Name: B4K3C6.1/67-191     Len:     65  Check:   6005  Weight: 1.0000
+  Name: C4Q4K6.1/224-340    Len:     65  Check:   8129  Weight: 1.0000
+  Name: B9H7X8.1/113-180    Len:     65  Check:   6585  Weight: 1.0000
+  Name: B9H7X8.1/304-377    Len:     65  Check:   7031  Weight: 1.0000
+  Name: B3S2W8.1/76-163     Len:     65  Check:   7814  Weight: 1.0000
+  Name: B3S2W8.1/165-267    Len:     65  Check:   7944  Weight: 1.0000
+  Name: Q6CDH3.1/332-401    Len:     65  Check:   8450  Weight: 1.0000
+  Name: B9R7H3.1/281-377    Len:     65  Check:   7841  Weight: 1.0000
+  Name: Q7T3G5.1/297-366    Len:     65  Check:   7809  Weight: 1.0000
+  Name: Q3UTA6.1/197-266    Len:     65  Check:   7771  Weight: 1.0000
+  Name: B3NHT3.1/152-330    Len:     65  Check:   6005  Weight: 1.0000
+  Name: B4MHJ9.1/106-306    Len:     65  Check:   6005  Weight: 1.0000
+  Name: A5BF74.1/281-378    Len:     65  Check:   7969  Weight: 1.0000
+  Name: Q8QGJ7.1/296-365    Len:     65  Check:   7809  Weight: 1.0000
+  Name: B4J985.1/306-430    Len:     65  Check:   6005  Weight: 1.0000
+  Name: B8LRZ2.1/277-352    Len:     65  Check:   7245  Weight: 1.0000
+  Name: A5E351.1/72-416     Len:     65  Check:   6005  Weight: 1.0000
+  Name: D2H6M0.1/296-365    Len:     65  Check:   8589  Weight: 1.0000
+  Name: O42323.1/299-489    Len:     65  Check:   6005  Weight: 1.0000
+  Name: A9NX92.1/275-351    Len:     65  Check:   7245  Weight: 1.0000
+  Name: B9GT62.1/311-387    Len:     65  Check:   7397  Weight: 1.0000
+  Name: Q5KBW2.1/367-401    Len:     65  Check:   4130  Weight: 1.0000
+  Name: Q2PEV8.1/238-322    Len:     65  Check:   8488  Weight: 1.0000
+  Name: B6U4M0.1/324-393    Len:     65  Check:   7419  Weight: 1.0000
+  Name: A8NF86.1/337-404    Len:     65  Check:   6240  Weight: 1.0000
+  Name: B4N2I1.1/44-159     Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q2I2V8.1/539-606    Len:     65  Check:   5583  Weight: 1.0000
+  Name: B3MYX8.1/14-153     Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q4RNX8.1/296-365    Len:     65  Check:   7809  Weight: 1.0000
+  Name: D1ZFW1.1/794-871    Len:     65  Check:   6005  Weight: 1.0000
+  Name: B9RIB9.1/231-294    Len:     65  Check:   6252  Weight: 1.0000
+  Name: C0SAP5.1/281-410    Len:     65  Check:   6005  Weight: 1.0000
+  Name: B9HRX8.1/250-356    Len:     65  Check:   7408  Weight: 1.0000
+  Name: Q7SGG0.1/13-167     Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q9FPJ8.1/236-325    Len:     65  Check:   7081  Weight: 1.0000
+  Name: Q9FFU0.1/236-325    Len:     65  Check:   7081  Weight: 1.0000
+  Name: A5E1Y8.1/358-537    Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q15164.1/107-176    Len:     65  Check:   7809  Weight: 1.0000
+  Name: D3ZAS7.1/296-365    Len:     65  Check:   8762  Weight: 1.0000
+  Name: B6K033.1/364-434    Len:     65  Check:   7638  Weight: 1.0000
+  Name: Q5TST0.3/683-841    Len:     65  Check:   6005  Weight: 1.0000
+  Name: B6K6T8.1/356-424    Len:     65  Check:   6980  Weight: 1.0000
+  Name: C1GDP1.1/281-415    Len:     65  Check:   6005  Weight: 1.0000
+  Name: B9H7X9.1/314-387    Len:     65  Check:   7031  Weight: 1.0000
+  Name: Q7Q9F7.4/282-381    Len:     65  Check:   8971  Weight: 1.0000
+  Name: Q10N87.1/216-288    Len:     65  Check:   8444  Weight: 1.0000
+  Name: A3F293.1/10-109     Len:     65  Check:   6005  Weight: 1.0000
+  Name: B4JPX4.1/284-409    Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q8RXR5.1/110-177    Len:     65  Check:   6752  Weight: 1.0000
+  Name: P42731.1/126-193    Len:     65  Check:   6752  Weight: 1.0000
+  Name: Q2VIP3.1/296-365    Len:     65  Check:   7799  Weight: 1.0000
+  Name: A3F295.1/6-117      Len:     65  Check:   6005  Weight: 1.0000
+  Name: A9S4M3.1/42-65      Len:     65  Check:   8023  Weight: 1.0000
+  Name: Q54BM2.1/286-356    Len:     65  Check:   8332  Weight: 1.0000
+  Name: Q3ZCS4.1/296-365    Len:     65  Check:   7799  Weight: 1.0000
+  Name: A3F290.1/9-110      Len:     65  Check:   6005  Weight: 1.0000
+  Name: A9TLC5.1/312-382    Len:     65  Check:   8406  Weight: 1.0000
+  Name: A5E7X5.1/33-235     Len:     65  Check:   6005  Weight: 1.0000
+  Name: A3F299.1/12-111     Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q5VX58.1/296-365    Len:     65  Check:   7799  Weight: 1.0000
+  Name: Q9H361.2/296-365    Len:     65  Check:   7799  Weight: 1.0000
+  Name: Q2VIN9.1/296-365    Len:     65  Check:   7715  Weight: 1.0000
+  Name: A9T3C5.1/56-79      Len:     65  Check:   8071  Weight: 1.0000
+  Name: Q4PF35.1/18-283     Len:     65  Check:   6005  Weight: 1.0000
+  Name: C5WUD2.1/243-339    Len:     65  Check:   9000  Weight: 1.0000
+  Name: Q4P8R9.1/368-401    Len:     65  Check:   2315  Weight: 1.0000
+  Name: Q55F37.1/112-343    Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q54LR6.1/53-262     Len:     65  Check:   6005  Weight: 1.0000
+  Name: B4NBP3.1/171-277    Len:     65  Check:   6491  Weight: 1.0000
+  Name: D3B9K1.1/622-823    Len:     65  Check:   6005  Weight: 1.0000
+  Name: B8AL31.1/216-288    Len:     65  Check:   8444  Weight: 1.0000
+  Name: Q4P3Y1.1/128-184    Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q4VXU2.1/296-365    Len:     65  Check:   8576  Weight: 1.0000
+  Name: Q9VYA6.1/174-225    Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q25AW7.1/146-228    Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q2VIN7.1/296-365    Len:     65  Check:   7799  Weight: 1.0000
+  Name: D0N277.1/201-234    Len:     65  Check:     79  Weight: 1.0000
+  Name: Q6R969.1/253-362    Len:     65  Check:   6414  Weight: 1.0000
+  Name: B4KT28.1/222-266    Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q98SP8.2/296-365    Len:     65  Check:   8414  Weight: 1.0000
+  Name: B9RY32.1/285-382    Len:     65  Check:   6561  Weight: 1.0000
+  Name: B4NP54.1/2-69       Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q86KE5.1/77-311     Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q2V9C2.1/258-357    Len:     65  Check:   6481  Weight: 1.0000
+  Name: Q9LEB4.1/261-347    Len:     65  Check:   8349  Weight: 1.0000
+  Name: Q4P2T9.1/335-396    Len:     65  Check:   6005  Weight: 1.0000
+  Name: A5C5B3.1/256-335    Len:     65  Check:   6406  Weight: 1.0000
+  Name: B3MKU5.1/256-639    Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q86NT0.1/173-270    Len:     65  Check:   6005  Weight: 1.0000
+  Name: A8NN12.1/68-136     Len:     65  Check:   6005  Weight: 1.0000
+  Name: A3CUY7.1/2-69       Len:     65  Check:   6142  Weight: 1.0000
+  Name: B0X8C2.1/150-263    Len:     65  Check:   6005  Weight: 1.0000
+  Name: A5E3S9.1/278-450    Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q9FX88.1/338-415    Len:     65  Check:   6705  Weight: 1.0000
+  Name: Q54X31.1/100-217    Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q10HZ8.1/240-333    Len:     65  Check:   9058  Weight: 1.0000
+  Name: Q9AY92.1/240-333    Len:     65  Check:   9058  Weight: 1.0000
+  Name: Q10HZ7.1/240-333    Len:     65  Check:   9058  Weight: 1.0000
+  Name: B8AKU6.1/240-333    Len:     65  Check:   9058  Weight: 1.0000
+  Name: Q2V9A1.1/201-306    Len:     65  Check:   6452  Weight: 1.0000
+  Name: A2YEJ5.1/343-416    Len:     65  Check:   5574  Weight: 1.0000
+  Name: B4KQM5.1/242-419    Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q69X94.1/342-415    Len:     65  Check:   5574  Weight: 1.0000
+  Name: Q8LBV8.1/233-325    Len:     65  Check:   6907  Weight: 1.0000
+  Name: C0P488.1/242-336    Len:     65  Check:   9477  Weight: 1.0000
+  Name: B3M300.1/220-284    Len:     65  Check:   4430  Weight: 1.0000
+  Name: Q9SAB3.1/234-326    Len:     65  Check:   6907  Weight: 1.0000
+  Name: Q0DQQ8.1/284-377    Len:     65  Check:   9058  Weight: 1.0000
+  Name: C0PFW8.1/269-336    Len:     65  Check:   8794  Weight: 1.0000
+  Name: C0HHH3.1/270-337    Len:     65  Check:   8794  Weight: 1.0000
+  Name: Q9M6E6.1/117-184    Len:     65  Check:   5513  Weight: 1.0000
+  Name: Q2FSR7.1/6-69       Len:     65  Check:   6714  Weight: 1.0000
+  Name: C0SUE2.1/77-175     Len:     65  Check:   6005  Weight: 1.0000
+  Name: A0CJW3.1/434-742    Len:     65  Check:   6005  Weight: 1.0000
+  Name: B4ME65.1/311-417    Len:     65  Check:   6005  Weight: 1.0000
+  Name: B9I0E1.1/253-334    Len:     65  Check:   8072  Weight: 1.0000
+  Name: Q8LFI9.1/244-343    Len:     65  Check:   6439  Weight: 1.0000
+  Name: B4PH83.1/181-247    Len:     65  Check:   6005  Weight: 1.0000
+  Name: B9FTY9.1/365-439    Len:     65  Check:   5574  Weight: 1.0000
+  Name: B3M562.1/702-895    Len:     65  Check:   6005  Weight: 1.0000
+  Name: C4QZM5.1/235-294    Len:     65  Check:   1116  Weight: 1.0000
+  Name: D3BFK6.1/320-381    Len:     65  Check:   5659  Weight: 1.0000
+  Name: A3GHN7.2/350-468    Len:     65  Check:   5518  Weight: 1.0000
+  Name: Q54C48.1/271-342    Len:     65  Check:   6503  Weight: 1.0000
+  Name: Q0WW84.1/287-386    Len:     65  Check:   6439  Weight: 1.0000
+  Name: Q54FL0.1/951-1244   Len:     65  Check:   6005  Weight: 1.0000
+  Name: B4MC02.1/171-283    Len:     65  Check:   4057  Weight: 1.0000
+  Name: A7AT74.1/621-689    Len:     65  Check:    524  Weight: 1.0000
+  Name: Q9LJL7.1/287-386    Len:     65  Check:   6439  Weight: 1.0000
+  Name: B4NE44.1/470-686    Len:     65  Check:   6005  Weight: 1.0000
+  Name: A0BQD1.1/165-319    Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q05196.2/328-400    Len:     65  Check:   7276  Weight: 1.0000
+  Name: A9TFH5.1/223-287    Len:     65  Check:   5602  Weight: 1.0000
+  Name: A1C5H3.1/188-267    Len:     65  Check:   6005  Weight: 1.0000
+  Name: A9NWA0.1/248-328    Len:     65  Check:   7731  Weight: 1.0000
+  Name: B4JY35.1/15-92      Len:     65  Check:   6005  Weight: 1.0000
+  Name: D0H0K7.1/432-591    Len:     65  Check:   6005  Weight: 1.0000
+  Name: Q6DGV1.1/174-209    Len:     65  Check:   9921  Weight: 1.0000
+  Name: B4KN27.1/225-337    Len:     65  Check:   6005  Weight: 1.0000
+  Name: B3NV15.1/1200-1273  Len:     65  Check:   6005  Weight: 1.0000
+  Name: B5LEQ5.1/179-214    Len:     65  Check:   9618  Weight: 1.0000
+  Name: Q6C9A9.1/660-764    Len:     65  Check:   6005  Weight: 1.0000
+  Name: B4JIH9.1/171-286    Len:     65  Check:   3456  Weight: 1.0000
+  Name: Q5TSQ4.3/457-676    Len:     65  Check:   6005  Weight: 1.0000
+  Name: A9TZW4.1/245-319    Len:     65  Check:   5602  Weight: 1.0000
+  Name: B4PZT3.1/1188-1272  Len:     65  Check:   6005  Weight: 1.0000
+  Name: D4APH2.1/480-541    Len:     65  Check:   9770  Weight: 1.0000
+  Name: D3BH34.1/115-236    Len:     65  Check:   6005  Weight: 1.0000
+  Name: C4XVP0.1/46-78      Len:     65  Check:   2963  Weight: 1.0000
+  Name: C5GQY8.1/409-612    Len:     65  Check:   6005  Weight: 1.0000
+  Name: B4L803.1/240-323    Len:     65  Check:   6005  Weight: 1.0000
+  Name: C5DIP1.1/2-75       Len:     65  Check:   6913  Weight: 1.0000
+  Name: D3B7T2.1/209-345    Len:     65  Check:   6005  Weight: 1.0000
+
+//
+
+Q9UPQ9.4/2-1714     LVLHNLTPQI DGSTLRTICM QHGPLLTFHL NLTQGTALIR YSTKQEAAKA 
+A8MYY3.2/16-949     ---------- ---------- ---------- ---------- ---------- 
+A8MYY3.2/946-1098   ---------- ---------- ---------- ---------- ---------- 
+A8MYY3.2/1098-1618  LVLHNLTPQI DGSTLRTICM QHGPLLTFHL NLTQGTALIR YSTKQEAAKA 
+B0QY77.1/1-879      ---------- ---------- ---------- ---------- ---------- 
+B0QY77.1/879-1390   LVLHNLTPQI DGSTLRTICM QHGPLLTFHL NLTQGTALIR YSTKQEAAKA 
+B1ATC3.1/2-1028     ---------- ---------- ---------- ---------- ---------- 
+B1ATC3.1/1015-1647  ---------- ---------- ---------- ---------- ---------- 
+B1ATC3.1/1646-1790  LVLRNLTPQI DGSTLRTLCL QHGPLITFHL NLTQGNAVVR YSSKEEAAKA 
+B3N1G0.1/6-1168     LLLKNLTAQI DGSTLRTLCM QHGPLVSFHL YLSQGIALCK YATREEANKA 
+B3P9S0.1/6-1187     LLLRNLTAQI DGPTLRTLCM QHGPLVSFHP YLNQGIALCK YTTREEANKA 
+B4E231.1/1-251      ---------- ---------- ---------- ---------- ---------- 
+B4E231.1/251-762    LVLHNLTPQI DGSTLRTICM QHGPLLTFHL NLTQGTALIR YSTKQEAAKA 
+B4IIY1.1/6-1184     LLLKNLTAQI DGPTLRTLCM QHGPLVSFHP YLNQGIALCK YTTREEANKA 
+B4PW21.1/6-1181     LLLKNLTAQI DGPTLRTLCM QHGPLVSFHP YLSQGIALCK YTTREEANKA 
+B4R2G2.1/6-1123     LLLKNLTAQI DGPTLRTLCM QHGPLVSFHP YLNQGIALCK YTTREEANKA 
+B5ME23.2/16-165     ---------- ---------- ---------- ---------- ---------- 
+B5ME23.2/165-368    ---------- ---------- ---------- ---------- ---------- 
+B5ME23.2/368-888    LVLHNLTPQI DGSTLRTICM QHGPLLTFHL NLTQGTALIR YSTKQEAAKA 
+B7ZC94.1/2-868      ---------- ---------- ---------- ---------- ---------- 
+B7ZC94.1/855-1477   ---------- ---------- ---------- ---------- ---------- 
+B7ZC94.1/1478-1622  LVLRNLTPQI DGSTLRTLCL QHGPLITFHL NLTQGNAVVR YSSKEEAAKA 
+C9J5L7.1/16-949     ---------- ---------- ---------- ---------- ---------- 
+C9J5L7.1/946-1098   ---------- ---------- ---------- ---------- ---------- 
+C9J5L7.1/1098-1618  LVLHNLTPQI DGSTLRTICM QHGPLLTFHL NLTQGTALIR YSTKQEAAKA 
+C9JA83.1/3-471      ---------- ---------- ---------- ---------- ---------- 
+C9JA83.1/468-986    LVLKNLTPQI DGSTLRTLCM QHGPLITFHL NLPHGNALVR YSSKEEVVKA 
+C9JAR8.1/20-121     ---------- ---------- ---------- ---------- ---------- 
+C9JAR8.1/119-1283   ---------- ---------- ---------- ---------- ---------- 
+C9JAR8.1/1280-1798  LVLKNLTPQI DGSTLRTLCM QHGPLITFHL NLPHGNALVR YSSKEEVVKA 
+D2GZL8.1/5-902      ---------- ---------- ---------- ---------- ---------- 
+D2GZL8.1/900-1051   ---------- ---------- ---------- ---------- ---------- 
+D2GZL8.1/1051-1571  LVLHNLTPQI DGSTLRTICM QHGPLLTFHL NLTQGTALIR YNTKQEAAKA 
+D2H997.1/2-866      ---------- ---------- ---------- ---------- ---------- 
+D2H997.1/853-1477   ---------- ---------- ---------- ---------- ---------- 
+D2H997.1/1476-1620  LVLRNLTPQI DGSTLRTLCL QHGPLVTFHL NLTQGNAVVR YSSKEEAAKA 
+D2I222.1/1-1790     LVLKNLTPQI DGSTLRTLCM QHGPLITFHL NLPHGNALVR YSSKEEVVKA 
+D3ZRA6.1/2-1000     ---------- ---------- ---------- ---------- ---------- 
+D4A372.1/1-97       ---------- ---------- ---------- ---------- ---------- 
+D4A372.1/95-1822    LVLKNLTPQI DGSTLRTLCM QHGPLITFHL NLPHGNALVR YSSKEEVVKA 
+Q05CE3.1/20-1014    ---------- ---------- ---------- ---------- ---------- 
+Q29CP6.2/6-1206     LLLKNLTAQI DGPTLRTLCM QHGPLVSFHL YLNQGIALCK YTTREEASKA 
+Q3TRH0.1/1-49       ---------- ---------- ---------- ---------- ---------- 
+Q3TRH0.1/46-194     ---------- ---------- ---------- ---------- ---------- 
+Q3TRH0.1/194-719    LVLHNLTPQI DGSTLRTICM QHGPLLTFHL NLTQGTALIR YSTKQEAAKA 
+Q3UHC0.2/4-818      ---------- ---------- ---------- ---------- ---------- 
+Q3UHC0.2/805-1437   ---------- ---------- ---------- ---------- ---------- 
+Q3UHC0.2/1436-1580  LVLRNLTPQI DGSTLRTLCL QHGPLITFHL NLTQGNAVVR YSSKEEAAKA 
+Q3UHK8.1/20-1269    ---------- ---------- ---------- ---------- ---------- 
+Q3UHK8.1/1266-1782  LVLKNLTPQI DGSTLRTLCM QHGPLITFHL NLPHGNALVR YSSKEEVVKA 
+Q4S9I4.1/33-1574    ---------- ---------- ---------- ---------- ---------- 
+Q4S9I4.1/1569-1729  LVLKNLTPQI DGSTLKTLCM QHGPLITFHL NLPHGNAVVC YSSKDEAAKA 
+Q4T574.1/1-220      ---------- ---------- ---------- ---------- ---------- 
+Q4T574.1/239-596    ---------- ---------- ---------- ---------- ---------- 
+Q4T574.1/639-850    ---------- ---------- ---------- ---------- ---------- 
+Q4T574.1/894-1324   ---------- ---------- ---------- ---------- ---------- 
+Q4T574.1/1322-1473  LVLRNLTPQI DGSTLRTLCM QHGPLITFHL NLTQGNAVVR YSSKDEAAKA 
+Q8BKI2.2/38-1167    ---------- ---------- ---------- ---------- ---------- 
+Q8BKI2.2/1167-1691  LVLHNLTPQI DGSTLRTICM QHGPLLTFHL NLTQGTALIR YSTKQEAAKA 
+Q8BWL0.1/2-169      ---------- ---------- ---------- ---------- ---------- 
+Q8BWL0.1/169-693    LVLHNLTPQI DGSTLRTICM QHGPLLTFHL NLTQGTALIR YSTKQEAAKA 
+Q8NDV7.2/20-121     ---------- ---------- ---------- ---------- ---------- 
+Q8NDV7.2/119-1847   LVLKNLTPQI DGSTLRTLCM QHGPLITFHL NLPHGNALVR YSSKEEVVKA 
+Q8SY33.1/6-1183     LLLKNLTAQI DGPTLRTLCM QHGPLVSFHP YLNQGIALCK YTTREEANKA 
+Q9HCJ0.3/4-822      ---------- ---------- ---------- ---------- ---------- 
+Q9HCJ0.3/810-1437   ---------- ---------- ---------- ---------- ---------- 
+Q9HCJ0.3/1434-1580  LVLRNLTPQI DGSTLRTLCL QHGPLITFHL NLTQGNAVVR YSSKEEAAKA 
+Q9UPQ9.4/2-1714     LVLHNLTPQI DGSTLRTICM QHGPLLTFHL NLTQGTALIR YSTKQEAAKA 
+B4H887.1/32-1036    LLLKNLTAQI DGPTLRTLCM QHGPLVSFHL YLNQGIALCK YTTREEASKA 
+Q3TRK2.1/1-88       ---------- ---------- ---------- ---------- ---------- 
+Q3TRK2.1/88-612     LVLHNLTPQI DGSTLRTICM QHGPLLTFHL NLTQGTALIR YSTKQEAAKA 
+Q8BNF0.2/9-877      ---------- ---------- ---------- ---------- ---------- 
+B4MF11.1/6-1186     LLLKNLNAQI DGSTLRTLCM QHGPLVSFHP YLNQGIALCK YTTREEANKA 
+B4NHM7.1/6-1235     LLLKNLTAQI DGPTLRTLCM QHGPLVSFHL YLNQGIALCK YATREESNKA 
+D0Z7B2.1/6-1203     LLLKNLNAQI DGSTLRTLCM QHGPLVSFHP YLNQGIALCK YTTREEANKA 
+B4JZV3.1/6-1211     LLLKNLNAQI DGPTLRTLCM QHGPLVSFHP YLNQGIALCK YATREEANKA 
+Q1LZM4.1/2-292      ---------- ---------- ---------- ---------- ---------- 
+Q1LZM4.1/292-736    ---------- ---------- ---------- ---------- ---------- 
+Q4S4D3.1/1-379      ---------- ---------- ---------- ---------- ---------- 
+Q4S4D3.1/395-556    ---------- ---------- ---------- ---------- ---------- 
+Q4S4D3.1/557-654    ---------- ---------- ---------- ---------- ---------- 
+Q4S4D3.1/651-825    ---------- ---------- ---------- ---------- ---------- 
+Q4S4D3.1/823-1014   LVLSNLTPQI DGSTLRTICM QHGPLLTFHL GLTQGNALIR YNSKQEAAKA 
+Q4S4D3.1/1091-1092  ---------- ---------- ---------- ---------- ---------- 
+Q3UUG8.1/1-613      LVLKNLTPQI DGSTLRTLCM QHGPLITFHL NLPHGNALVR YSSKEEVVKA 
+C3ZJT1.1/159-315    ---------- ---------- ---------- ---------- ---------- 
+C3ZJT1.1/328-369    ---------- ---------- ---------- ---------- ---------- 
+C3ZJT1.1/371-689    ---------- ---------- ---------- ---------- ---------- 
+C3ZJT1.1/730-1268   LILKNLTPQI DGSTLRTLCM QHGPLLTFHL NLSQGCALVC YMSKEEAAKA 
+B0WTJ5.1/228-1292   VLLKNLTAQI DGSTLRTLCM QHGPVQNFHL YLNHGIALCK YLSREEANKA 
+Q8BXM6.1/4-513      LVLKNLTPQI DGSTLRTLCM QHGPLITFHL NLPHGNALVR YSSKEEVVKA 
+Q99JR3.2/24-541     LVLKNLTPQI DGSTLRTLCM QHGPLITFHL NLPHGNALVR YSSKEEVVKA 
+Q172C6.1/6-1041     ILLKNLTTQI DGPTLRTLCM QHGPLQNFHL YLNHGIALCK YQSREEANKA 
+B4L7C4.1/6-1178     LLLKNLTAQV CEKLFLLLCI ---------- ---------- ---------- 
+Q172C7.1/363-538    ---------- ---------- ---------- ---------- ---------- 
+Q172C7.1/573-1399   LLLKNLTPQI DVATLRTLCM QHGPLQNLQL YANHGLALIK YSSREEANKA 
+Q6P7B1.1/2-313      LVLHNLTPQI DGSTLRTICM QHGPLLTFHL NLTQGTALIR YSTKQEAAKA 
+Q3UQ45.1/7-386      LVLKNLTPQI DGSTLRTLCM QHGPLITFHL NLPHGNALVR YSSKEEVVKA 
+Q4T0A8.1/27-228     ---------- ---------- ---------- ---------- ---------- 
+Q4T0A8.1/329-402    ---------- ---------- ---------- ---------- ---------- 
+Q4T0A8.1/405-529    ---------- ---------- ---------- ---------- ---------- 
+Q4T0A8.1/526-678    LVLRNLTPQI DGSTLRTLCM QHGPLITFHL NLTQGSAVVR YSSKDEAAKA 
+B7ZB91.1/13-478     LVLHNLTPQ- ---------- ---------- ---------- ---------- 
+Q7Q3B9.4/7-766      ---------- ---------- ---------- ---------- ---------- 
+Q7Q3B9.4/781-1165   LLLKNLTAQI DGSTLRTLCM QHGPLQNFHL YLNHGIALCK YLTREEANKA 
+Q8BX83.2/38-410     ---------- ---------- ---------- ---------- ---------- 
+Q172C8.1/192-646    ---------- ---------- ---------- ---------- ---------- 
+Q172C8.1/672-1173   ILLKNLSAQI DGPTLRTLCI QHGPLLAFHL YLNHGIALCK YSTREEANKA 
+B0WXH0.1/311-1189   ---------- ---------- ---------- ---------- ---------- 
+B0WXH0.1/1191-1389  LLLKNLTSQI DGATLRTLCM QHGPLQSLQL YPNHGLALCK YSSREEASKA 
+B0R1E2.1/1-289      ---------- ---------- ---------- ---------- ---------- 
+B0R1E2.1/290-439    LVLRNLTPQI DGSTLRTLCM QHGPLITFHL NLTQGNAVVR YSSKEEAAKA 
+B1H1W1.1/13-388     ---------- ---------- ---------- ---------- ---------- 
+A7UUT0.1/13-626     ---------- ---------- ---------- ---------- ---------- 
+A7UUT0.1/686-771    ---------- ---------- ---------- ---------- ---------- 
+A7UUT0.1/838-1165   IMLRNLTAQI EGSTLRTLCL QHGPVVNFHL YLNQGIALCK YGTREEAQKA 
+Q66JU9.1/2-193      LVLHNLTPQI DGSTLRTICM QHGPLLTFHL NLTQGTALIR YSTKQEAAKA 
+B4DKJ5.1/2-276      ---------- ---------- ---------- ---------- ---------- 
+Q8BWM2.1/1-223      LVLKNLTPQI DGSTLRTLCM QHGPLITFHL NLPHGNALVR YSSKEEVVKA 
+A0NFA3.2/8-516      ---------- ---------- ---------- ---------- ---------- 
+A0NFA3.2/687-1082   LLLKNFTSQI DASTLRTLCM QHGPILTFHS YPAHGLALCR YATREEAAKA 
+B7PWH5.1/252-389    ---------- ---------- ---------- ---------- ---------- 
+B7PWH5.1/349-695    ---------- ---------- ---------- ---------- ---------- 
+B7PWH5.1/720-969    LAKQ---ARI DGSTLKTLCM QHGPLQLFHL FLKHGLALAQ YSSREEAAKA 
+Q8VD67.1/1-130      LVLHNLTPQI DGSTLRTICM QHGPLLTFHL NLTQGTALIR YSTKQEAAKA 
+Q148P0.1/1-130      LVLHNLTPQI DGSTLRTICM QHGPLLTFHL NLTQGTALIR YSTKQEAAKA 
+Q9JHZ1.1/1-130      LVLHNLTPQI DGSTLRTICM QHGPLLTFHL NLTQGTALIR YSTKQEAAKA 
+B0WXG8.1/386-1198   ---------- ---------- ---------- ---------- ---------- 
+B0WXG8.1/1199-1242  ---------- ---------- -HGPLLAFHV YLHHGIALCK YSSRDEATKA 
+Q4TA89.1/1-282      LLLSNLTPQI DGSTLRTICM QHGPLLTFHL GLTQGSALIR YSSQQEAVKA 
+Q4T0A9.1/1-255      ---------- ---------- ---------- ---------- ---------- 
+Q4T0A9.1/370-579    ---------- ---------- ---------- ---------- ---------- 
+Q6ZPQ4.1/1-243      ---------- ---------- ---------- ---------- ---------- 
+Q4TA88.1/5-275      ---------- ---------- ---------- ---------- ---------- 
+Q4TA88.1/319-457    ---------- ---------- ---------- ---------- ---------- 
+B3KSX2.1/4-277      ---------- ---------- ---------- ---------- ---------- 
+B8RJB3.1/9-266      ---------- ---------- ---------- ---------- ---------- 
+A7SDW4.1/430-1260   ---------- ---------- ---------- ---------- ---------- 
+A7SDW4.1/1319-1584  LVLRNLSPRA DPTAMRAVCQ QYGPLLTFTL NLRHGNSLIR YSNKDQAASA 
+A8PU70.1/566-908    ---------- ---------- ---------- ---------- ---------- 
+Q4T5V2.1/1-136      ---------- ---------- ---------- ---------- ---------- 
+B4DST4.1/1-168      ---------- ---------- ---------- ---------- ---------- 
+B3RQ20.1/1143-1332  ILIKGFSSQV DENLLQALCL QHGRITEFVF DPRKRAVFVS YSSVDEAVRA 
+Q8BXV9.1/2-142      ---------- ---------- ---------- ---------- ---------- 
+A7T6Q0.1/2-56       ---------- DPTAMRAVCQ QYGPLLTFTL NLRHGNSLIR YSNKDQAASA 
+C1K8B6.1/4-244      ---------- ---------- ---------- ---------- ---------- 
+C1K890.1/4-244      ---------- ---------- ---------- ---------- ---------- 
+A5BE57.1/246-278    ---------- ---------- ---------- --SRGFGFVN FESPDEAKKA 
+A5BE57.1/307-381    LYVKNLDASV DDDKLQESCG QIAKVMRHDS GLSKGFGFVC FSTSEEAQKA 
+C1K8V5.1/4-177      ---------- ---------- ---------- ---------- ---------- 
+Q2GV87.1/66-278     ---------- ---------- ---------- ---------- ---------- 
+Q8MSF0.1/1-14       ---------- ---------- ---------- ---------- ---------- 
+B4H886.1/6-148      ---------- ---------- ---------- ---------- ---------- 
+A9USE7.1/720-774    LLVKNLPFAA EEKTLRPLFE AHGDLSNFVM PPSRTMALVE YMEPSEARR- 
+A9USE7.1/997-1077   LVVRNIAFEA TPKEVQQLFS PHGNIVSVRL PRKQGFAFIE FSTKQEARDA 
+C5WVW4.1/223-289    IFIGNLDPNV TEDELRQICV QFGELIYVKI PVGKGCGFVQ YASRASAEEA 
+P20105.2/153-385    ---------- ---------- ---------- ---------- ---------- 
+P20105.2/537-654    ---------- ---------- ---------- ---------- ---------- 
+C4IYK3.1/223-290    IFIGNLDPNV IEDELRQICV QFGELIYVKI PVGKGCGFVQ YASRASAEEA 
+B6UA93.1/223-290    IFIGNLDPNV IEDELRQICV QFGELIYVKI PVGKGCGFVQ YASRASAEEA 
+B9RQB9.1/109-178    LYVKNLDASI DSAGLQSLFS KFGTILSCKV VEEHGYGFVQ FDSEDSALAA 
+B9RQB9.1/236-270    ---------- ---------- ---------- GKSRGFGFVD FESPEDAKKA 
+B9RQB9.1/300-374    LYVKNLALCI DNDKLQELFS CSGKIVSYDN GASRGFGFVC FSSPEEAKKA 
+B8APB9.1/226-292    IFIGNLDQNV TEDELRQICV QFGELIYVKI PANKACGFVQ YASRASAEEA 
+Q10R21.1/226-292    IFIGNLDQNV TEDELRQICV QFGELIYVKI PANKACGFVQ YASRASAEEA 
+Q0DUQ0.1/248-314    IFIGNLDQNV TEDELRQICV QFGELIYVKI PANKACGFVQ YASRASAEEA 
+Q8BZH2.1/5-63       ---------- ---------- ---------- ---------- ---------- 
+B4PJL3.1/173-393    ---------- ---------- ---------- ---------- ---------- 
+B4PJL3.1/533-654    ---------- ---------- ---------- ---------- ---------- 
+B5DF80.1/306-375    LYVKNLDDGI DDERLRKEFS PFGTITSAKV TMSKGFGFVC FSSPEEATKA 
+C1GEW9.1/11-129     ---------- ---------- ---------- ---------- ---------- 
+C1GVG2.1/279-439    ---------- ---------- ---------- ---------- ---------- 
+B2GUY3.1/194-262    -YIKNFGEEV DDENLRELFS QFGKTLSVKV GKSKGFGFVS YEKHEDANKA 
+B2GUY3.1/296-365    LYIKNLDDTI DDEKLRKEFS PFGSITSAKV MLSKGFGFVC FSSPEEATKA 
+B3M4K4.1/89-378     ---------- ---------- ---------- ---------- ---------- 
+B3M4K4.1/533-691    ---------- ---------- ---------- ---------- ---------- 
+D4AC14.1/194-262    -YIKNFGEEV DDENLRELFS QFGKTLSVKV GKSKGFGFVS YEKHEDANKA 
+D4AC14.1/296-365    LYIKNLDDTI DDEKLRKEFS PFGSITSAKV MLSKGFGFVC FSSPEEATKA 
+Q4T1P6.1/6-46       ---------- ---------- ---------- ---------- ---------- 
+D4AC21.1/123-191    -YIKNFGEEV DDENLRELFS QFGKTLSVKV GKSKGFGFVS YEKHEDANKA 
+D4AC21.1/225-294    LYIKNLDDTI DDEKLRKEFS PFGSITSAKV MLSKGFGFVC FSSPEEATKA 
+C5WPD4.1/242-292    ---------- ---------- QFGPIVSVKI MSSLGFGFVS FQNPESAIKA 
+B9GH32.1/107-174    LFVKNLDFSI SSSCLESIFS KYGTILSCKV ARSKGFGFVQ FESQDSALVA 
+B9GH32.1/295-362    LYVKNLNVDI DDKKLKEVFS AYGKILSVKV GTSKQFGFVC FASPEEANKA 
+A5B3Z9.1/212-283    LYIKNLDPDV TEEALREKFF EFGKIASLVI GMSRGFGFVN FESPEDAKRA 
+Q6IQ30.1/296-365    LYIKNLDDTI DDEKLRKEFS PFGSITSAKV MLSKGFGFVC FSSPEEATKA 
+O04319.1/114-183    LYVKNLDSSI TSSCLERMFC PFGSILSCKV GQSKGFGFVQ FDTEQSAVSA 
+O04319.1/304-375    LYVKNLSESM NETRLREIFG CYGQIVSAKV MCSKGFGFVC FSNCEESKQA 
+P31209.2/366-435    LFIKNLQDEV DDERLKAEFS AFGTITSAKI MTSKGFGFVC YTTPEEANKA 
+B2RXY9.1/193-253    IYVKNLHANV DEQRLQDLFS QFGNMQSVKV GQSRGFGFVN FEKHEEAQKA 
+B2RXY9.1/296-365    LYVKNLDDSI NDERLKEVFS TYGVITSAKV SHSKGFGFVC FSSPEEATKA 
+A2A5N3.1/193-253    IYVKNLHANV DEQRLQDLFS QFGNMQSVKV GQSRGFGFVN FEKHEEAQKA 
+A2A5N3.1/296-365    LYVKNLDDSI NDERLKEVFS TYGVITSAKV SHSKGFGFVC FSSPEEATKA 
+Q9D4E6.1/307-375    -YVKNLDDGI DDERLRKEFS PFGTITSAKV TMSKGFGFVC FSSPEEATKA 
+Q4VC03.1/296-365    LYIKNLDDTI DDEKLRKEFS PFGSITSAKV MLSKGFGFVC FSSPEEATKA 
+Q13310.1/296-365    LYIKNLDDTI DDEKLRKEFS PFGSITSAKV MLSKGFGFVC FSSPEEATKA 
+D3Z5M2.1/296-365    LYIKNLDDTI DDEKLRKEFS PFGSITSAKV MLSKGFGFVC FSSPEEATKA 
+A4IFC3.1/296-365    LYIKNLDDTI DDEKLRKEFS PFGSITSAKV MLSKGFGFVC FSSPEEATKA 
+B1ANR0.1/296-365    LYIKNLDDTI DDEKLRKEFS PFGSITSAKV MLSKGFGFVC FSSPEEATKA 
+B4NNJ8.1/320-445    ---------- ---------- ---------- ---------- ---------- 
+D2I596.1/309-378    LYIKNLDDTI DDEKLRKEFS PFGSITSAKV MLSKGFGFVC FSSPEEATKA 
+B4JL62.1/290-395    ---------- ---------- ---------- ---------- ---------- 
+C5YBU9.1/128-201    IFIKNLDKTI DNKTLHETFS SFGTILSCKV AMSKGFGFVQ YEKEEAAQNA 
+C5YBU9.1/329-399    LYLKNLDDSI GDDQLRELFS NFGKITSYKV GLSKGSGFVA FSTREEASQA 
+Q99LF8.1/296-365    LYIKNLDDTI DDEKLRKEFS PFGSITSAKV MLSKGFGFVC FSSPEEATKA 
+C0PPV9.1/259-363    IFVGRLDPNA TDEDLRQVFG QYGELVSVKI PVGKGCGFVQ FGNRASAEEA 
+Q91YZ8.1/296-365    LYIKNLDDTI DDEKLRREFS PFGSITSAKV MLSKGFGFVC FSSPEEATKA 
+B9GNX9.1/266-364    IFVGGLDPNV TDEDLKQPFS QYGEIVSVKI PVSKGCGFVQ FANRNNAEEA 
+A3KFU8.1/296-365    LYIKNLDDTI DDEKLRREFS PFGSITSAKV MLSKGFGFVC FSSPEEATKA 
+B9N4W3.1/235-341    IFVGGIDSDV TDEDLRQPFS QFGEVVSVKI PVGKGCAFVQ FANRKNAEDA 
+Q6PHQ9.1/296-365    LYIKNLDDTI DDEKLRREFS PFGSITSAKV MLSKGFGFVC FSSPEEATKA 
+B9MVK8.1/264-361    IFVGGLDPNV TDEDLKQPFS QYGEIVSVKI PVGKGCGFVQ FANRDNAEEA 
+D3AVQ3.1/284-354    LYIKNLDDSI DSDKLRATFS AYGTITSSKV SSSKGFGFVC YSTPDEASKA 
+A3KFU5.1/296-365    LYIKNLDDTI DDEKLRREFS PFGSITSAKV MLSKGFGFVC FSSPEEATKA 
+A5BPW5.1/140-241    IFVGGLDPNV SDEDLRQPFS QYGEIVSVKI PVGKGCGFVQ FANRNNAEDA 
+Q3UX16.1/225-294    LYIKNLDDTI DDEKLRREFS PFGSITSAKV MLSKGFGFVC FSSPEEATKA 
+C0PT30.1/259-364    IFVGRLDPNA TDEDLRQVFG QYGELVSVKI PVGKGCGFVQ FGNRASAEEA 
+B4K3C6.1/67-191     ---------- ---------- ---------- ---------- ---------- 
+C4Q4K6.1/224-340    IFVYNLSPEV EESNLWHLFG PFGAVQSIKI NKCKGFAFVT MSNYEEAVLA 
+B9H7X8.1/113-180    VFIKNLDTSI DNKALQETFA SFGPVLSCKV AVSKGYGFVQ FENEEAAQSA 
+B9H7X8.1/304-377    LYLKNLDDKI DDEKLKELFS EFGSITSCKV MLSKGSGFVA FSTPEEASRA 
+B3S2W8.1/76-163     IFVGDLSPDI DTTLLRSAFN QFGHVSDARV GKPRGYGFVS YQFKHEAENA 
+B3S2W8.1/165-267    VYVGNLSAGT TEETLRRIFI PFGPIADIRV FPDKNYAFIR YMSHDHATNA 
+Q6CDH3.1/332-401    LYIKNLDDTI DDDKLRAEFA PHGTITSAKV MVSKGFGFVC YSSPEEATKA 
+B9R7H3.1/281-377    IFVGGLDPNV TDEDLKQPFS QYGEIVSVKI PVGKGCGFVQ FASRSNAEEA 
+Q7T3G5.1/297-366    LYIKNLDDTI DDEKLRKEFS PFGSITSAKV MLSKGFGFVC FSSPEEATKA 
+Q3UTA6.1/197-266    LYIKNLDDTI DDEKLRKEFS PFGSITSAKV MLSKGFGFVC FPSREEATKA 
+B3NHT3.1/152-330    ---------- ---------- ---------- ---------- ---------- 
+B4MHJ9.1/106-306    ---------- ---------- ---------- ---------- ---------- 
+A5BF74.1/281-378    IFVGGLDSEV TDEDLRQSFS QFGEVVSVKI PVGKGCGFVQ FANRNSAEDA 
+Q8QGJ7.1/296-365    LYIKNLDDTI DDEKLRKEFS PFGSITSAKV MLSKGFGFVC FSSPEEATKA 
+B4J985.1/306-430    ---------- ---------- ---------- ---------- ---------- 
+B8LRZ2.1/277-352    IFVGGLDPSV TDEMLRQLFG QFGELVHVKI PVGKRCGFVQ FNNRASAEEA 
+A5E351.1/72-416     ---------- ---------- ---------- ---------- ---------- 
+D2H6M0.1/296-365    LYVKNLDDSI DDEKLRKEFS PYGVITSAKV MTSKGFGFVC FSSPEEATKA 
+O42323.1/299-489    ---------- ---------- ---------- ---------- ---------- 
+A9NX92.1/275-351    IFVGGLDPSV TDEMLRQLFG QFGELVHVKI PVGKRCGFVQ FNNRASAEEA 
+B9GT62.1/311-387    LYLKNLGDTI DEERLKELFS EFGSITSCKV MLSKGSGFVA FSTPEEASRA 
+Q5KBW2.1/367-401    ---------- ---------- ---------- GVSRGFGFVC YSSPDEATKA 
+Q2PEV8.1/238-322    IFVGNLDPNV TDDHLRQVFS QYGELVHVKI PSGKRCGFVQ FSDRSSAEEA 
+B6U4M0.1/324-393    LYLKNLDDSI GDDQLRELFS NFGKITSCKV GLSKGSGFVA FSTREEASQA 
+A8NF86.1/337-404    --IKNLEDDV DDDKLRAEFE PFGTITSCKV GQSKGFGFVC FSSPDEATKA 
+B4N2I1.1/44-159     ---------- ---------- ---------- ---------- ---------- 
+Q2I2V8.1/539-606    LHLSNIPPTV DEDTLKEAFS QHGTVANFKF FPKRKMALLQ MGSVEEAIHA 
+B3MYX8.1/14-153     ---------- ---------- ---------- ---------- ---------- 
+Q4RNX8.1/296-365    LYIKNLDDTI DDEKLRKEFS PFGSITSAKV MLSKGFGFVC FSSPEEATKA 
+D1ZFW1.1/794-871    ---------- ---------- ---------- ---------- ---------- 
+B9RIB9.1/231-294    IFVGNLDPNV TEEELRPIFL QFGEIVYVKI PVGRGCGFVQ FATRASAEEA 
+C0SAP5.1/281-410    ---------- ---------- ---------- ---------- ---------- 
+B9HRX8.1/250-356    IFVGGIDSDV TDEDLRQPFS QFGEVVSVKM PTGKGCAFVQ FANRKNAEDA 
+Q7SGG0.1/13-167     ---------- ---------- ---------- ---------- ---------- 
+Q9FPJ8.1/236-325    IFVGGLDANV TDDELKSIFG QFGELLHVKI PPGKRCGFVQ YANKASAEHA 
+Q9FFU0.1/236-325    IFVGGLDANV TDDELKSIFG QFGELLHVKI PPGKRCGFVQ YANKASAEHA 
+A5E1Y8.1/358-537    ---------- ---------- ---------- ---------- ---------- 
+Q15164.1/107-176    LYIKNLDDTI DDEKLRKEFS PFGSITSAKV MLSKGFGFVC FSSPEEATKA 
+D3ZAS7.1/296-365    LYVKNLDDSI NDDRLKEVFS TYGVITSAKV SHSKGFGFVC FSSPEEATKA 
+B6K033.1/364-434    LFIKNLSDEV DDNLLKTEFS AFGTITSAKV MTSKGFGFVC YSSPEEATKA 
+Q5TST0.3/683-841    ---------- ---------- ---------- ---------- ---------- 
+B6K6T8.1/356-424    -FVKNLQDEI DDERLKSEFS AFGTITSAKV NKSKGFGFVC YSNPEEATKA 
+C1GDP1.1/281-415    ---------- ---------- ---------- ---------- ---------- 
+B9H7X9.1/314-387    LYLKNLDDKI DDEKLKELFS EFGSITSCKV MLSKGSGFVA FSTPEEASRA 
+Q7Q9F7.4/282-381    LFFRNLAYSV QESDIRTLFE QYGPVAEVDV PIDKGFGTVT FMIPEHAVTA 
+Q10N87.1/216-288    LYMKNLDDDI TEELIKLKFS QYGLVISVKI GTSKGFGFVS FQNPESAKRA 
+A3F293.1/10-109     ---------- ---------- ---------- ---------- ---------- 
+B4JPX4.1/284-409    ---------- ---------- ---------- ---------- ---------- 
+Q8RXR5.1/110-177    IFIKNLDESI DHKALHDTFS SFGNIVSCKV AVSKGYGFVQ YANEESAQKA 
+P42731.1/126-193    IFIKNLDESI DHKALHDTFS SFGNIVSCKV AVSKGYGFVQ YANEESAQKA 
+Q2VIP3.1/296-365    LYVKNLDDGI DDERLRKAFS PFGTITSAKV MMSKGFGFVC FSSPEEATKA 
+A3F295.1/6-117      ---------- ---------- ---------- ---------- ---------- 
+A9S4M3.1/42-65      ---------- ---------- ---------- --QQGCCFVK YSTVEEADRA 
+Q54BM2.1/286-356    LYIKNIDDSI DNDKLREVFS QFGTITSAKA TTSKGFGFVC YTAPDEATRA 
+Q3ZCS4.1/296-365    LYVKNLDDGI DDERLRKAFS PFGTITSAKV MMSKGFGFVC FSSPEEATKA 
+A3F290.1/9-110      ---------- ---------- ---------- ---------- ---------- 
+A9TLC5.1/312-382    LYLKNLDDTV DDEKLRELFA DYGTITSCKV GQSRGSGFVA FSSPEEATRA 
+A5E7X5.1/33-235     ---------- ---------- ---------- ---------- ---------- 
+A3F299.1/12-111     ---------- ---------- ---------- ---------- ---------- 
+Q5VX58.1/296-365    LYVKNLDDGI DDERLRKAFS PFGTITSAKV MMSKGFGFVC FSSPEEATKA 
+Q9H361.2/296-365    LYVKNLDDGI DDERLRKAFS PFGTITSAKV MMSKGFGFVC FSSPEEATKA 
+Q2VIN9.1/296-365    LYVKNLDDAI DDERLRKAFS PFGTITSAKV MMSKGFGFVC FSSPEEATKA 
+A9T3C5.1/56-79      ---------- ---------- ---------- --QQGCCFVK YSTVEEAERA 
+Q4PF35.1/18-283     ---------- ---------- ---------- ---------- ---------- 
+C5WUD2.1/243-339    VFVGGLDPSV TDELLKQTFS PYGELLYVKI PVGKRCGFVQ YSNRASAEEA 
+Q4P8R9.1/368-401    ---------- ---------- ---------- -VSRGFGFVC YSAPEEANKA 
+Q55F37.1/112-343    ---------- ---------- ---------- ---------- ---------- 
+Q54LR6.1/53-262     ---------- ---------- ---------- ---------- ---------- 
+B4NBP3.1/171-277    VYCGGFPPNI SDDLMHKHFM QFGPIQDVRV FKEKGFAFIK FVTKEAAARA 
+D3B9K1.1/622-823    ---------- ---------- ---------- ---------- ---------- 
+B8AL31.1/216-288    LYMKNLDDDI TEELIKLKFS QYGLVISVKI GTSKGFGFVS FQNPESAKRA 
+Q4P3Y1.1/128-184    ---------- ---------- ---------- ---------- ---------- 
+Q4VXU2.1/296-365    LYVKNLDDSI DDDKLRKEFS PYGVITSAKV MTSKGFGFVC FSSPEEATKA 
+Q9VYA6.1/174-225    ---------- ---------- ---------- ---------- ---------- 
+Q25AW7.1/146-228    ---------- ---------- ---------- ---------- ---------- 
+Q2VIN7.1/296-365    LYVKNLDDGI DDERLRKAFS PFGTITSAKV MMSKGFGFVC FSSPEEATKA 
+D0N277.1/201-234    ---------- ---------- ---------- -RSKGCGLVE YATEDEAAKA 
+Q6R969.1/253-362    VFVGGLDSEV TDEELRQSFS QFGNVVSVKI PAGKGCGFVQ FSERSAAEDA 
+B4KT28.1/222-266    ---------- ---------- ---------- ---------- ---------- 
+Q98SP8.2/296-365    LYVKNLDDGI DDDRLRKEFL PYGTITSAKV MTSKGFGFVC FSSPEEATKA 
+B9RY32.1/285-382    IFVGGIDSDI SDEDLRQPFS QFGEVVSVKI PAGKGCGFVQ FADRKSAEDA 
+B4NP54.1/2-69       ---------- ---------- ---------- ---------- ---------- 
+Q86KE5.1/77-311     ---------- ---------- ---------- ---------- ---------- 
+Q2V9C2.1/258-357    VFVGGLDSDV TDEELRQSFS QFGNVVSVKI PAGKGCGFVQ FSERSAAEDA 
+Q9LEB4.1/261-347    IFVGGLDPTV AEEHLRQVFS PYGELVHVKI VAGKRCGFVQ FGTRASAEQA 
+Q4P2T9.1/335-396    ---------- ---------- ---------- ---------- ---------- 
+A5C5B3.1/256-335    IFVGGLDSNV TDDYLRQVFS QYGELVHVKI PVGKRCGFVQ FANRACAEQA 
+B3MKU5.1/256-639    ---------- ---------- ---------- ---------- ---------- 
+Q86NT0.1/173-270    ---------- ---------- ---------- ---------- ---------- 
+A8NN12.1/68-136     ---------- ---------- ---------- ---------- ---------- 
+A3CUY7.1/2-69       LYVGNLTYSV NEEQLKELFS QYGTVNDVRV IERKGFGFVE MSSPEEAEAA 
+B0X8C2.1/150-263    ---------- ---------- ---------- ---------- ---------- 
+A5E3S9.1/278-450    ---------- ---------- ---------- ---------- ---------- 
+Q9FX88.1/338-415    IFVGGLDADV TEEDLMQPFS DFGEVVSVKI PVGKGCGFVQ FANRQSAEEA 
+Q54X31.1/100-217    ---------- ---------- ---------- ---------- ---------- 
+Q10HZ8.1/240-333    VFVGGLDPSV TDEVLKQAFS PYGELVYVKI PVGKRCGFVQ YSNRASAEEA 
+Q9AY92.1/240-333    VFVGGLDPSV TDEVLKQAFS PYGELVYVKI PVGKRCGFVQ YSNRASAEEA 
+Q10HZ7.1/240-333    VFVGGLDPSV TDEVLKQAFS PYGELVYVKI PVGKRCGFVQ YSNRASAEEA 
+B8AKU6.1/240-333    VFVGGLDPSV TDEVLKQAFS PYGELVYVKI PVGKRCGFVQ YSNRASAEEA 
+Q2V9A1.1/201-306    IFVGGLDSDV TDEELRQSFT QFGEVVSVKI PAGKGCGFVQ FSDRSSAQEA 
+A2YEJ5.1/343-416    LYLKNLDDDI NDEHLRKLFE CFGEVASCKV MLSKGCGFVS FATVEDANNA 
+B4KQM5.1/242-419    ---------- ---------- ---------- ---------- ---------- 
+Q69X94.1/342-415    LYLKNLDDDI NDEHLRKLFE CFGEVASCKV MLSKGCGFVS FATVEDANNA 
+Q8LBV8.1/233-325    VFVGGLDASV TDDHLKNVFS QYGEIVHVKI PAGKRCGFVQ FSEKSCAEEA 
+C0P488.1/242-336    VFVGGLDPSV TDELLKQTFS PYGELLYVKI PVGKRCGFVQ YSNRASAEEA 
+B3M300.1/220-284    VYCGGFPPNI SDDLMHKHFV QFGPIQDVRV FKDKGFAFIK FVTKEAAARA 
+Q9SAB3.1/234-326    VFVGGLDASV TDDHLKNVFS QYGEIVHVKI PAGKRCGFVQ FSEKSCAEEA 
+Q0DQQ8.1/284-377    VFVGGLDPSV TDEVLKQAFS PYGELVYVKI PVGKRCGFVQ YSNRASAEEA 
+C0PFW8.1/269-336    LIVKNINPGI EGSDLRALFQ QYGDVQTFDT SCSHGIVTVS YYDIRAAQDA 
+C0HHH3.1/270-337    LIVKNINPGI EGSDLRALFQ QYGDVQTFDT SCSHGIVTVS YYDIRAAQDA 
+Q9M6E6.1/117-184    IFIKNLDKAI DHKALHDTFS AFGNILSCKV AVSKGYGFVQ YDSEEAAQKA 
+Q2FSR7.1/6-69       LYVGNLTYSV KEDQLKDLFS QYGDVVSVKI IEQKGFGFVE MGTSEEAQAA 
+C0SUE2.1/77-175     ---------- ---------- ---------- ---------- ---------- 
+A0CJW3.1/434-742    ---------- ---------- ---------- ---------- ---------- 
+B4ME65.1/311-417    ---------- ---------- ---------- ---------- ---------- 
+B9I0E1.1/253-334    IFVGALDPSV TDDTLRAVFS KYGELVHVKI PAGKRCGFVQ FANRTSAEQA 
+Q8LFI9.1/244-343    IFVGGIDPDV IDEDLRQPFS QFGEVVSVKI PVGKGCGFVQ FADRKSAEDA 
+B4PH83.1/181-247    ---------- ---------- ---------- ---------- ---------- 
+B9FTY9.1/365-439    LYLKNLDDDI NDEHLRKLFE CFGEVASCKV MLSKGCGFVS FATVEDANNA 
+B3M562.1/702-895    ---------- ---------- ---------- ---------- ---------- 
+C4QZM5.1/235-294    VFVKNFDTES TEDELRELFE SYGPITSIHL QVNKGFGFVN FAEHDDAVKA 
+D3BFK6.1/320-381    ------NLSI TEDQIRTIFS QHGDLEFVKL HVKPGLAFVQ FKASESAQKA 
+A3GHN7.2/350-468    VFVGGLSSEV TESTLFTLFK PFGIIQQVKI PPGKNCGFIK YSTREEAEEA 
+Q54C48.1/271-342    LWLGNVNSNV SYELLKQIFD QFGNVDTIRI LHGRGCAFVN FFTVESAAAA 
+Q0WW84.1/287-386    IFVGGIDPDV IDEDLRQPFS QFGEVVSVKI PVGKGCGFVQ FADRKSAEDA 
+Q54FL0.1/951-1244   ---------- ---------- ---------- ---------- ---------- 
+B4MC02.1/171-283    VYCGGFPPNI SDELMHKHFM QFGPIQDVRV FKDKGFAFIK FVSKEAAARA 
+A7AT74.1/621-689    -IVKNLAFQA TKQDLYKLFS FYGNVKSVRI SNNRGFAFVE YSSKQESARA 
+Q9LJL7.1/287-386    IFVGGIDPDV IDEDLRQPFS QFGEVVSVKI PVGKGCGFVQ FADRKSAEDA 
+B4NE44.1/470-686    ---------- ---------- ---------- ---------- ---------- 
+A0BQD1.1/165-319    ---------- ---------- ---------- ---------- ---------- 
+Q05196.2/328-400    LYLKNLDDSV NDEKLKEMFS EYGNVTSCKV GLSRGFGFVA YSNPEEALLA 
+A9TFH5.1/223-287    IFVGGLDPAV GDEDLRNVFG QFGELVYVKI PAGKGCGFVQ FTHRACAEEA 
+A1C5H3.1/188-267    ---------- ---------- ---------- ---------- ---------- 
+A9NWA0.1/248-328    IFVGGLDPNA TDEDLRQVFG PFGEIVYVKI PVGKGCGFVQ FTNRSSAEEA 
+B4JY35.1/15-92      ---------- ---------- ---------- ---------- ---------- 
+D0H0K7.1/432-591    ---------- ---------- ---------- ---------- ---------- 
+Q6DGV1.1/174-209    ---------- ---------- ---------- --SKGCAFVK YSTHAEAQAA 
+B4KN27.1/225-337    ---------- ---------- ---------- ---------- ---------- 
+B3NV15.1/1200-1273  ---------- ---------- ---------- ---------- ---------- 
+B5LEQ5.1/179-214    ---------- ---------- ---------- --SKGCAFVK YSSHAEAQAA 
+Q6C9A9.1/660-764    ---------- ---------- ---------- ---------- ---------- 
+B4JIH9.1/171-286    VYCGGFQPHI SDELMHKHFM QFGPIQDVRV FKDKGFAFIK FVAKEAAARA 
+Q5TSQ4.3/457-676    ---------- ---------- ---------- ---------- ---------- 
+A9TZW4.1/245-319    IFVGGLDPAV GDEDLRNVFG QFGELVYVKI PAGKGCGFVQ FTHRACAEEA 
+B4PZT3.1/1188-1272  ---------- ---------- ---------- ---------- ---------- 
+D4APH2.1/480-541    LLLKNFTYGV SSEDIRKLCE PFGQLTRLLM PPSGTIAIVE FAMPDEALRA 
+D3BH34.1/115-236    ---------- ---------- ---------- ---------- ---------- 
+C4XVP0.1/46-78      ---------- ---------- ---------- --SKGSAFVR YADRETALSA 
+C5GQY8.1/409-612    ---------- ---------- ---------- ---------- ---------- 
+B4L803.1/240-323    ---------- ---------- ---------- ---------- ---------- 
+C5DIP1.1/2-75       VYVGNVDPKV SKELLYELFL QIGPVAKIRL QTHQGFAFVE FNSPQDAEYA 
+D3B7T2.1/209-345    ---------- ---------- ---------- ---------- ---------- 
+
+Q9UPQ9.4/2-1714     QTALHMCVLG NTTIL
+A8MYY3.2/16-949     ---------- -----
+A8MYY3.2/946-1098   ---------- -----
+A8MYY3.2/1098-1618  QTALHMCVLG NTTIL
+B0QY77.1/1-879      ---------- -----
+B0QY77.1/879-1390   QTALHM---- -----
+B1ATC3.1/2-1028     ---------- -----
+B1ATC3.1/1015-1647  ---------- -----
+B1ATC3.1/1646-1790  QKSLHMCVLG NTTIL
+B3N1G0.1/6-1168     QMALNNCVLA NTTIF
+B3P9S0.1/6-1187     QMALNNCVLA NTTIF
+B4E231.1/1-251      ---------- -----
+B4E231.1/251-762    QTALHM---- -----
+B4IIY1.1/6-1184     QMALNNCVLA NTTIF
+B4PW21.1/6-1181     QMALNNCVLA NTTIF
+B4R2G2.1/6-1123     QMALNNCVLA NTTIF
+B5ME23.2/16-165     ---------- -----
+B5ME23.2/165-368    ---------- -----
+B5ME23.2/368-888    QTALHMCVLG NTTIL
+B7ZC94.1/2-868      ---------- -----
+B7ZC94.1/855-1477   ---------- -----
+B7ZC94.1/1478-1622  QKSLHMCVLG NTTIL
+C9J5L7.1/16-949     ---------- -----
+C9J5L7.1/946-1098   ---------- -----
+C9J5L7.1/1098-1618  QTALHMCVLG NTTIL
+C9JA83.1/3-471      ---------- -----
+C9JA83.1/468-986    QKSLHMCVLG NTTIL
+C9JAR8.1/20-121     ---------- -----
+C9JAR8.1/119-1283   ---------- -----
+C9JAR8.1/1280-1798  QKSLHMCVLG NTTIL
+D2GZL8.1/5-902      ---------- -----
+D2GZL8.1/900-1051   ---------- -----
+D2GZL8.1/1051-1571  QTALHMCVLG NTTIL
+D2H997.1/2-866      ---------- -----
+D2H997.1/853-1477   ---------- -----
+D2H997.1/1476-1620  QKSLHMCVLG NTTIL
+D2I222.1/1-1790     QKSLHMCVLG NTTIL
+D3ZRA6.1/2-1000     ---------- -----
+D4A372.1/1-97       ---------- -----
+D4A372.1/95-1822    QKSLHMCVLG NTTIL
+Q05CE3.1/20-1014    ---------- -----
+Q29CP6.2/6-1206     QMALNNCVLG NTTIF
+Q3TRH0.1/1-49       ---------- -----
+Q3TRH0.1/46-194     ---------- -----
+Q3TRH0.1/194-719    QTALHMCVLG NTTIL
+Q3UHC0.2/4-818      ---------- -----
+Q3UHC0.2/805-1437   ---------- -----
+Q3UHC0.2/1436-1580  QKSLHMCVLG NTTIL
+Q3UHK8.1/20-1269    ---------- -----
+Q3UHK8.1/1266-1782  QKSLHMCVLG NTTIL
+Q4S9I4.1/33-1574    ---------- -----
+Q4S9I4.1/1569-1729  QKSLHMCVLG NTTIL
+Q4T574.1/1-220      ---------- -----
+Q4T574.1/239-596    ---------- -----
+Q4T574.1/639-850    ---------- -----
+Q4T574.1/894-1324   ---------- -----
+Q4T574.1/1322-1473  QKSLHMCVLG NTTIL
+Q8BKI2.2/38-1167    ---------- -----
+Q8BKI2.2/1167-1691  QTALHMCVLG NTTIL
+Q8BWL0.1/2-169      ---------- -----
+Q8BWL0.1/169-693    QTALHMCVLG NTTIL
+Q8NDV7.2/20-121     ---------- -----
+Q8NDV7.2/119-1847   QKSLHMCVLG NTTIL
+Q8SY33.1/6-1183     QMALNNCVLA NTTIF
+Q9HCJ0.3/4-822      ---------- -----
+Q9HCJ0.3/810-1437   ---------- -----
+Q9HCJ0.3/1434-1580  QKSLHMCVLG NTTIL
+Q9UPQ9.4/2-1714     QTALHMCVLG NTTIL
+B4H887.1/32-1036    QMALNNCVLG NTTIF
+Q3TRK2.1/1-88       ---------- -----
+Q3TRK2.1/88-612     QTALHMCVLG NTTIL
+Q8BNF0.2/9-877      ---------- -----
+B4MF11.1/6-1186     QMALNNCVLG NTTIF
+B4NHM7.1/6-1235     QMTLNNCVLG NTTIF
+D0Z7B2.1/6-1203     QMALNNCVLG NTTIF
+B4JZV3.1/6-1211     QMALNNCVLG NTTIF
+Q1LZM4.1/2-292      ---------- -----
+Q1LZM4.1/292-736    ---------- -----
+Q4S4D3.1/1-379      ---------- -----
+Q4S4D3.1/395-556    ---------- -----
+Q4S4D3.1/557-654    ---------- -----
+Q4S4D3.1/651-825    ---------- -----
+Q4S4D3.1/823-1014   QSALHMCVLG NTTIL
+Q4S4D3.1/1091-1092  ---------- -----
+Q3UUG8.1/1-613      QKSLHMCVLG NTTIL
+C3ZJT1.1/159-315    ---------- -----
+C3ZJT1.1/328-369    ---------- -----
+C3ZJT1.1/371-689    ---------- -----
+C3ZJT1.1/730-1268   QKSLHTCVLG NTTIL
+B0WTJ5.1/228-1292   QQALNNCVLG NTTIC
+Q8BXM6.1/4-513      QKSLHMCVLG NTTIL
+Q99JR3.2/24-541     QKSLHMCVLG NTTIL
+Q172C6.1/6-1041     QQALNNCVLG NTTIC
+B4L7C4.1/6-1178     ---------- -----
+Q172C7.1/363-538    ---------- -----
+Q172C7.1/573-1399   QQALNNCPLG SSTIG
+Q6P7B1.1/2-313      QTALHMCVLG NTTIL
+Q3UQ45.1/7-386      QKSLHMCVLG NTTIL
+Q4T0A8.1/27-228     ---------- -----
+Q4T0A8.1/329-402    ---------- -----
+Q4T0A8.1/405-529    ---------- -----
+Q4T0A8.1/526-678    QKSLHMCVLG NTTIL
+B7ZB91.1/13-478     ---------- -----
+Q7Q3B9.4/7-766      ---------- -----
+Q7Q3B9.4/781-1165   QLALNNCVLG NTTIC
+Q8BX83.2/38-410     ---------- -----
+Q172C8.1/192-646    ---------- -----
+Q172C8.1/672-1173   QMALNNCMLG STTIC
+B0WXH0.1/311-1189   ---------- -----
+B0WXH0.1/1191-1389  QQALNNCPLG STNIG
+B0R1E2.1/1-289      ---------- -----
+B0R1E2.1/290-439    QKSLHMCVLG NTTIL
+B1H1W1.1/13-388     ---------- -----
+A7UUT0.1/13-626     ---------- -----
+A7UUT0.1/686-771    ---------- -----
+A7UUT0.1/838-1165   QLALNNCQLG NTTII
+Q66JU9.1/2-193      QTALHMCVLG NTTIL
+B4DKJ5.1/2-276      ---------- -----
+Q8BWM2.1/1-223      QKSLHMCVLG NTTIL
+A0NFA3.2/8-516      ---------- -----
+A0NFA3.2/687-1082   QQALNNCTLG SSTIS
+B7PWH5.1/252-389    ---------- -----
+B7PWH5.1/349-695    ---------- -----
+B7PWH5.1/720-969    QSALHNCILS NTTML
+Q8VD67.1/1-130      QTALHMCVLG NTTIL
+Q148P0.1/1-130      QTALHMCVLG NTTIL
+Q9JHZ1.1/1-130      QTALHMCVLG NTTIL
+B0WXG8.1/386-1198   ---------- -----
+B0WXG8.1/1199-1242  QLALNNCMLG NTTIC
+Q4TA89.1/1-282      QGALHMCVLG NTTIL
+Q4T0A9.1/1-255      ---------- -----
+Q4T0A9.1/370-579    ---------- -----
+Q6ZPQ4.1/1-243      ---------- -----
+Q4TA88.1/5-275      ---------- -----
+Q4TA88.1/319-457    ---------- -----
+B3KSX2.1/4-277      ---------- -----
+B8RJB3.1/9-266      ---------- -----
+A7SDW4.1/430-1260   ---------- -----
+A7SDW4.1/1319-1584  RNNLNGMMVK GMQLI
+A8PU70.1/566-908    ---------- -----
+Q4T5V2.1/1-136      ---------- -----
+B4DST4.1/1-168      ---------- -----
+B3RQ20.1/1143-1332  QSRLNNCKIM DSTLE
+Q8BXV9.1/2-142      ---------- -----
+A7T6Q0.1/2-56       RNNLNGMMVK GMQLI
+C1K8B6.1/4-244      ---------- -----
+C1K890.1/4-244      ---------- -----
+A5BE57.1/246-278    VEALNGAMLG SKKLF
+A5BE57.1/307-381    LTTLNGTLLH GRSLI
+C1K8V5.1/4-177      ---------- -----
+Q2GV87.1/66-278     ---------- -----
+Q8MSF0.1/1-14       -MALNNCVLA NTTIF
+B4H886.1/6-148      ---------- -----
+A9USE7.1/720-774    ---------- -----
+A9USE7.1/997-1077   FSALSGTHLY GRRLA
+C5WVW4.1/223-289    VQRLHGTMIG QQ---
+P20105.2/153-385    ---------- -----
+P20105.2/537-654    ---------- -----
+C4IYK3.1/223-290    VQRLHGTMIG QQA--
+B6UA93.1/223-290    VQRLHGTMIG QQA--
+B9RQB9.1/109-178    RTALHDTMLK EKKLV
+B9RQB9.1/236-270    VDALNGYQLE SRTLF
+B9RQB9.1/300-374    LNALNGAVFQ GKSLV
+B8APB9.1/226-292    VQRLHGTTIG QQVV-
+Q10R21.1/226-292    VQRLHGTTIG QQVV-
+Q0DUQ0.1/248-314    VQRLHGTTIG QQVV-
+Q8BZH2.1/5-63       ---------- -----
+B4PJL3.1/173-393    ---------- -----
+B4PJL3.1/533-654    ---------- -----
+B5DF80.1/306-375    VTEMNGRIVA TKPLV
+C1GEW9.1/11-129     ---------- -----
+C1GVG2.1/279-439    ---------- -----
+B2GUY3.1/194-262    VEEMNGKEMS GKSIF
+B2GUY3.1/296-365    VTEMNGRIVG SKPLV
+B3M4K4.1/89-378     ---------- -----
+B3M4K4.1/533-691    ---------- -----
+D4AC14.1/194-262    VEEMNGKEMS GKSIF
+D4AC14.1/296-365    VTEMNGRIVG SKPLV
+Q4T1P6.1/6-46       ---------- -----
+D4AC21.1/123-191    VEEMNGKEMS GKSIF
+D4AC21.1/225-294    VTEMNGRIVG SKPLV
+C5WPD4.1/242-292    QETMHGMLLG SKALV
+B9GH32.1/107-174    QTALHDTMLG GKKL-
+B9GH32.1/295-362    LVALNGHP-- -----
+A5B3Z9.1/212-283    LEALNGLQLG SKVLV
+Q6IQ30.1/296-365    VTEMNGRIVG SKPLV
+O04319.1/114-183    RSALHGSMVY GKKLV
+O04319.1/304-375    KRYLNGFLVD GKPIV
+P31209.2/366-435    VTEMNQRMLA GKPLY
+B2RXY9.1/193-253    VDHMNG---- -----
+B2RXY9.1/296-365    VTEMNGRIVG TKPLV
+A2A5N3.1/193-253    VDHMNG---- -----
+A2A5N3.1/296-365    VTEMNGRIVG TKPLV
+Q9D4E6.1/307-375    VTEMNGKIVA TKPLV
+Q4VC03.1/296-365    VTEMNGRIVG SKPLV
+Q13310.1/296-365    VTEMNGRIVG SKPLV
+D3Z5M2.1/296-365    VTEMNGRIVG SKPLV
+A4IFC3.1/296-365    VTEMNGRIVG SKPLV
+B1ANR0.1/296-365    VTEMNGRIVG SKPLV
+B4NNJ8.1/320-445    ---------- -----
+D2I596.1/309-378    VTEMNGRIVG SKPLV
+B4JL62.1/290-395    ---------- -----
+C5YBU9.1/128-201    IKSLNGMLIN D----
+C5YBU9.1/329-399    LTEMNGKMIS GKPLY
+Q99LF8.1/296-365    VTEMNGRIVG SKPLV
+C0PPV9.1/259-363    LQRLHGTVIR QQTVL
+Q91YZ8.1/296-365    VTEMNGRIVG SKPLV
+B9GNX9.1/266-364    LQKLNGTVIG KQTV-
+A3KFU8.1/296-365    VTEMNGRIVG SKPLV
+B9N4W3.1/235-341    LQSLNGTTIG KQTV-
+Q6PHQ9.1/296-365    VTEMNGRIVG SKPLV
+B9MVK8.1/264-361    LQKLNGTVIG KQTV-
+D3AVQ3.1/284-354    VAEMHGRMVG SKPLY
+A3KFU5.1/296-365    VTEMNGRIVG SKPLV
+A5BPW5.1/140-241    LQKLNGTVIG KQTV-
+Q3UX16.1/225-294    VTEMNGRIVG SKPLV
+C0PT30.1/259-364    LQRLHGTVIR QQTVL
+B4K3C6.1/67-191     ---------- -----
+C4Q4K6.1/224-340    IHSLNGYVLD NRILQ
+B9H7X8.1/113-180    INRLNGMLIN DKE--
+B9H7X8.1/304-377    LNGMNGKMIG KKPLV
+B3S2W8.1/76-163     MQSMNGAWLG GRNIR
+B3S2W8.1/165-267    IVVIHGTAVE GSQV-
+Q6CDH3.1/332-401    VTEMNHRLVA GKPLY
+B9R7H3.1/281-377    LQKLNGTVIG KQTV-
+Q7T3G5.1/297-366    VTEMNGRIVG SKPLV
+Q3UTA6.1/197-266    VTEMNGRIVG SKPLV
+B3NHT3.1/152-330    ---------- -----
+B4MHJ9.1/106-306    ---------- -----
+A5BF74.1/281-378    LQRLNGTVIG KQTV-
+Q8QGJ7.1/296-365    VTEMNGRIVG SKPLV
+B4J985.1/306-430    ---------- -----
+B8LRZ2.1/277-352    LQMLHGTVLG QQAIW
+A5E351.1/72-416     ---------- -----
+D2H6M0.1/296-365    VTEMNGRIVG TKPLV
+O42323.1/299-489    ---------- -----
+A9NX92.1/275-351    LQMLHGTVLG QQAIW
+B9GT62.1/311-387    LSEMNGKMIG KKPLV
+Q5KBW2.1/367-401    VSEMNGKMIG TKPLY
+Q2PEV8.1/238-322    IRVLNGTLLG GQ---
+B6U4M0.1/324-393    LTEMNGKMIS GKPLY
+A8NF86.1/337-404    VAEMNNKMIG TKPLY
+B4N2I1.1/44-159     ---------- -----
+Q2I2V8.1/539-606    LIAMHNYQLA ES---
+B3MYX8.1/14-153     ---------- -----
+Q4RNX8.1/296-365    VTEMNGRIVG SKPLV
+D1ZFW1.1/794-871    ---------- -----
+B9RIB9.1/231-294    IQRMQGHVIG Q----
+C0SAP5.1/281-410    ---------- -----
+B9HRX8.1/250-356    LQSLNGTTIG KQTV-
+Q7SGG0.1/13-167     ---------- -----
+Q9FPJ8.1/236-325    LSVLNGTQLG GQSI-
+Q9FFU0.1/236-325    LSVLNGTQLG GQSI-
+A5E1Y8.1/358-537    ---------- -----
+Q15164.1/107-176    VTEMNGRIVG SKPLV
+D3ZAS7.1/296-365    VTEMNGRIVG TKPLV
+B6K033.1/364-434    IAEMNQRMLA GKPLY
+Q5TST0.3/683-841    ---------- -----
+B6K6T8.1/356-424    IAEMNQRMLA GKPLY
+C1GDP1.1/281-415    ---------- -----
+B9H7X9.1/314-387    LNGMNGKMIG KKPLV
+Q7Q9F7.4/282-381    YNELNGTFLQ GRMIP
+Q10N87.1/216-288    KESMNGMLLG SKTLV
+A3F293.1/10-109     ---------- -----
+B4JPX4.1/284-409    ---------- -----
+Q8RXR5.1/110-177    IEKLNGMLLN DKQ--
+P42731.1/126-193    IEKLNGMLLN DKQ--
+Q2VIP3.1/296-365    VTEMNGRIVA TKPLV
+A3F295.1/6-117      ---------- -----
+A9S4M3.1/42-65      IRALHN---- -----
+Q54BM2.1/286-356    VTEMNGRMIG TKPLY
+Q3ZCS4.1/296-365    VTEMNGRIVA TKPLV
+A3F290.1/9-110      ---------- -----
+A9TLC5.1/312-382    VTEMNGKMVG SKPLV
+A5E7X5.1/33-235     ---------- -----
+A3F299.1/12-111     ---------- -----
+Q5VX58.1/296-365    VTEMNGRIVA TKPLV
+Q9H361.2/296-365    VTEMNGRIVA TKPLV
+Q2VIN9.1/296-365    VTEMNGRIVA TEPLV
+A9T3C5.1/56-79      IRALHN---- -----
+Q4PF35.1/18-283     ---------- -----
+C5WUD2.1/243-339    IRMLNGSQLG GQSI-
+Q4P8R9.1/368-401    VSEMNGKMLD NRPLY
+Q55F37.1/112-343    ---------- -----
+Q54LR6.1/53-262     ---------- -----
+B4NBP3.1/171-277    IEH------- -----
+D3B9K1.1/622-823    ---------- -----
+B8AL31.1/216-288    KESMNGMLLG SKTLV
+Q4P3Y1.1/128-184    ---------- -----
+Q4VXU2.1/296-365    VTEMNGRIVG TKPLV
+Q9VYA6.1/174-225    ---------- -----
+Q25AW7.1/146-228    ---------- -----
+Q2VIN7.1/296-365    VTEMNGRIVA TKPLV
+D0N277.1/201-234    IAELNNTELE GRLIF
+Q6R969.1/253-362    IEKLNGTVIG AQTVR
+B4KT28.1/222-266    ---------- -----
+Q98SP8.2/296-365    VTEMNGRIVS TKPLV
+B9RY32.1/285-382    LQSLNGTTIG KQTV-
+B4NP54.1/2-69       ---------- -----
+Q86KE5.1/77-311     ---------- -----
+Q2V9C2.1/258-357    IEKLNGTVIG TQTVR
+Q9LEB4.1/261-347    LSSLNGTQLG GQSI-
+Q4P2T9.1/335-396    ---------- -----
+A5C5B3.1/256-335    LAGLNGTQLG AQSI-
+B3MKU5.1/256-639    ---------- -----
+Q86NT0.1/173-270    ---------- -----
+A8NN12.1/68-136     ---------- -----
+A3CUY7.1/2-69       KEALNDTVFE GRTL-
+B0X8C2.1/150-263    ---------- -----
+A5E3S9.1/278-450    ---------- -----
+Q9FX88.1/338-415    IGNLNGTVIG KNTV-
+Q54X31.1/100-217    ---------- -----
+Q10HZ8.1/240-333    IRMLNGSQLG GQSI-
+Q9AY92.1/240-333    IRMLNGSQLG GQSI-
+Q10HZ7.1/240-333    IRMLNGSQLG GQSI-
+B8AKU6.1/240-333    IRMLNGSQLG GQSI-
+Q2V9A1.1/201-306    IQKLSGAIIG K----
+A2YEJ5.1/343-416    ILKMNGKMVG KKPLV
+B4KQM5.1/242-419    ---------- -----
+Q69X94.1/342-415    ILKMNGKMVG KKPLV
+Q8LBV8.1/233-325    LRMLNGVQLG GTTV-
+C0P488.1/242-336    IRVLNGSQLG GQSI-
+B3M300.1/220-284    IEHTHNSEVH -----
+Q9SAB3.1/234-326    LRMLNGVQLG GTTV-
+Q0DQQ8.1/284-377    IRMLNGSQLG GQSI-
+C0PFW8.1/269-336    VRAVHNKPLG LM---
+C0HHH3.1/270-337    VRAVHNKPLG LM---
+Q9M6E6.1/117-184    IEKLNGMLLN DKQ--
+Q2FSR7.1/6-69       MDALNQTVFE GRTM-
+C0SUE2.1/77-175     ---------- -----
+A0CJW3.1/434-742    ---------- -----
+B4ME65.1/311-417    ---------- -----
+B9I0E1.1/253-334    LSMLNGTQIA GQNI-
+Q8LFI9.1/244-343    IESLNGTVIG KNTV-
+B4PH83.1/181-247    ---------- -----
+B9FTY9.1/365-439    ILKMNGKMVG KKPLV
+B3M562.1/702-895    ---------- -----
+C4QZM5.1/235-294    VEALN----- -----
+D3BFK6.1/320-381    LDALNGVEVM GKNLK
+A3GHN7.2/350-468    IAAMQGFIIG GNRVR
+Q54C48.1/271-342    RNGLNGTMVC GMPLK
+Q0WW84.1/287-386    IESLNGTVIG KNTV-
+Q54FL0.1/951-1244   ---------- -----
+B4MC02.1/171-283    IEHTHNSE-- -----
+A7AT74.1/621-689    VESLQHSHLY GRHLV
+Q9LJL7.1/287-386    IESLNGTVIG KNTV-
+B4NE44.1/470-686    ---------- -----
+A0BQD1.1/165-319    ---------- -----
+Q05196.2/328-400    MKEMNGKMIG RKPLV
+A9TFH5.1/223-287    LQRLHQTVIG T----
+A1C5H3.1/188-267    ---------- -----
+A9NWA0.1/248-328    LQKLHGTIIG QQSI-
+B4JY35.1/15-92      ---------- -----
+D0H0K7.1/432-591    ---------- -----
+Q6DGV1.1/174-209    ISALHGSQTA SSSLV
+B4KN27.1/225-337    ---------- -----
+B3NV15.1/1200-1273  ---------- -----
+B5LEQ5.1/179-214    INALHGSQTA SSSLV
+Q6C9A9.1/660-764    ---------- -----
+B4JIH9.1/171-286    IEHTHNTEVH -----
+Q5TSQ4.3/457-676    ---------- -----
+A9TZW4.1/245-319    LQRLHQTVIG T----
+B4PZT3.1/1188-1272  ---------- -----
+D4APH2.1/480-541    FKGL------ -----
+D3BH34.1/115-236    ---------- -----
+C4XVP0.1/46-78      VRNLNNMNVG NRYLR
+C5GQY8.1/409-612    ---------- -----
+B4L803.1/240-323    ---------- -----
+C5DIP1.1/2-75       SKCLNNTV-- -----
+D3B7T2.1/209-345    ---------- -----
+
diff --git a/test/scripts/automated/belvu/test22 b/test/scripts/automated/belvu/test22
new file mode 100755
index 0000000..34b36f6
--- /dev/null
+++ b/test/scripts/automated/belvu/test22
@@ -0,0 +1,25 @@
+#!/bin/ksh
+#
+# Description:
+#   Remove gappy sequences and save the alignment in
+#   in Selex format
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences to the saved results
+diffs=`belvu -q 80 -o Selex $data_dir/ALIGN.selex >&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
+
diff --git a/test/scripts/automated/belvu/test22_results b/test/scripts/automated/belvu/test22_results
new file mode 100644
index 0000000..2a71196
--- /dev/null
+++ b/test/scripts/automated/belvu/test22_results
@@ -0,0 +1,43 @@
+Q9UPQ9.4/1-1833   MREKEQEREEQLMEDKKRKKEDKKKKEATQ-KVTEQKTKVPEVTKPSLSQPTAASPIGSSPSPPVNGGNNAKRVAVPNGQPP----------SAA-----------------------------RYMPREVPPRFRCQQDHKVLLKRGQPPPPSCMLLGGGAGPPPCTAP-GANPNNA--QVTGALLQSESGTAPDSTLGGAAASNYANSTWGSGASSNN-----GTSPNPIHIWDKVIVDG-SDMEEWPCIASKDTESSSENTTDNNSASNPGSEKS-TL------------PGSTTSNK------------GKGSQCQS----ASS----------------GNECNLGVWK------SDPKA------K--------------SVQSSNSTTE-NNNGLGNW-------RNVSGQDR---------IGPGSGFSNFNPNSNPSAWPALVQEGTSRKG-------ALETDNS [...]
+A8MYY3.2/16-949   -QEKEQEREEQLMEDKKRKKEDKKKKEATQ-KVTEQKTKVPEVTKPSLSQPTAASPIGSSPSPPVNGGNNAKRVAVPNGQPP----------SAA-----------------------------RYMPREVPPRFRCQQDHKVLLKRGQPPPPSCMLLGGGAGPPPCTAP-GANPNNA--QVTGALLQSESGTAPDSTLGGAAASNYANSTWGSGASSNN-----GTSPNPIHIWDKVIVDG-SDMEEWPCIASKDTESSSENTTDNNSASNPGSEKS-TL------------PGSTTSNK------------GKGSQCQS----ASS----------------GNECNLGVWK------SDPKA------K--------------SVQSSNSTTE-NNNGLGNW-------RNVSGQDR---------IGPGSGFSNFNPNSNPSAWPALVQEGTSRKG-------ALETDNS [...]
+B0QY77.1/1-879    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------WK------SDPKA------K--------------SVQSSNSTTE-NNNGLGNW-------RNVSGQDR---------IGPGSGFSNFNPNSNPSAWPALVQEGTSRKG-------ALETDNS [...]
+B1ATC3.1/2-1028   ------------EEKKKKKQEDKKKKEGAQKKAADQKTKVPELTKTCSSQPQPAGTSPSTSTSTISSGSNGKR-ASACGQQP----------AAS-----------------------------RYLPREVPPRFR-QQEQKQLLKRGQPLPTGGLT---SLNSAQAAGPAGASPPPL--PGAGA-QQHPSKLQQDLGHSG-LVDHYENSHWGQHPSYRS-----EAN----CSWDKVIIDR-TEPEVWPSIPVTETESASECPTDTDSASNCGSENS-SM-----------ATGSAQSSFPSHLKKTNGSHGTNGALVQS----PSNQSALG------AGGTNGNGGVARVWGVATSSSSGLAH------C--------------SVGGGDGKMD-NMIGDGRS-------QNCWGASN---------SNAGINL-NLNPNANPAAWPVLGHEGTVATGNPSSICSPVSAIGQ [...]
+B3N1G0.1/6-1260   ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+B3P9S0.1/6-1293   ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+B4IIY1.1/6-1290   ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+B4PW21.1/6-1287   ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+B4R2G2.1/6-1156   ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+B7ZC94.1/2-868    -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------EANCSWDKVIIDR-TEPEVWPSIPVTETESASECPTDTDSASNCGSENS-SM-----------ATGSAQSSFPSHLKKTNGSHGTNGALVQS----PSNQSALG------AGGTNGNGGVARVWGVATSSSSGLAH------C--------------SVGGGDGKMD-NMIGDGRS-------QNCWGASN---------SNAGINL-NLNPNANPAAWPVLGHEGTVATGNPSSICSPVSAIGQ [...]
+C9J5L7.1/16-949   -QEKEQEREEQLMEDKKRKKEDKKKKEATQ-KVTEQKTKVPEVTKPSLSQPTAASPIGSSPSPPVNGGNNAKRVAVPNGQPP----------SAA-----------------------------RYMPREVPPRFRCQQDHKVLLKRGQPPPPSCMLLGGGAGPPPCTAP-GANPNNA--QVTGALLQSESGTAPDSTLGGAAASNYANSTWGSGASSNN-----GTSPNPIHIWDKVIVDG-SDMEEWPCIASKDTESSSENTTDNNSASNPGSEKS-TL------------PGSTTSNK------------GKGSQCQS----ASS----------------GNECNLGVWK------SDPKA------K--------------SVQSSNSTTE-NNNGLGNW-------RNVSGQDR---------IGPGSGFSNFNPNSNPSAWPALVQEGTSRKG-------ALETDNS [...]
+C9JAR8.1/119-1283 -------------------------------------------------------------------------QQQPQQQPQ----------ALP-----------------------------RY-PREVPPRFRH-QEHKQLLKRGQHFPVIAANLGSAVKVLNSQSE-SSALTNQQPQNNGEVQNSKNQSDINH---STSGSHYENSQRGPVSST-S-----DSSTN---CKNAVVSDL-SEKEAWPSAPGSDPELASEC-MDADSASSSESERNITIM----------ASGNTGGEKDGL-----RNSTGLGSQNKFVVGSSSNN--------------VGHGSSTGPWG------FSHGAIISTCQV--------------SVDAPESKSESSNNRMNAW-------GTVSSSSN---------G--GLNPSTLNSASNHGAWPVLENNGLALKG-------PVGSGSS [...]
+D2GZL8.1/5-902    --------------------------------------SVPEVTKPSLSQPTAASPIGSSPSPPVNGGNNAKRVAVPNGQPP----------SAA-----------------------------RYMPREVPPRFRCQQDHKVLLKRGQPPPPSCMLLGGGAGPPPSTAP-GANSNNA--QVTGTPLQSDSGTAPESTLGGAAASNYANSTWGPGASSNN-----GASPNPIHIWDKVIVDG-SDTEEWPCIASKDTESSSENTTDNNSASNPGSEKS-TL------------PGSTTSNK------------GKGSQCQS----ASS----------------GNECNLGVWK------SDPKT------K--------------SVQSSNSTTE-SNNGLGNW-------RNVSGQDR---------IGPGSGFSNFNPNSNPSAWPALVQEGNSRKG-------ALETDTS [...]
+D2H997.1/2-866    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ASSSWDKVIIDR-TDKEAWPSITGAETESASECTTDTDSASNCGSENS-SMATGSAQGTFTGHT------KKTN-----GNNGTNGALVQS----PSNQSALG------AGGANGNGNGARVWGVATGSSSGPAH------C--------------SLSGGDGKMD-NMIGDGRS-------QNCWGASN---------SNAGINL-NLNPNANPAAWPVLGHEGTVATGNPSSICSPVSAIGQ [...]
+D2I222.1/1-1905   ---------------------------------------VPEQIKPSVSQPQPANSN-NGTSTATSTNNNAKRATANNPQQQ----------QQQQPQPPQQPQPPQPPQQPPQQPPQPAQALPRY-PREVPPRFRH-QEHKQLLKRGQHFPVIAANLGSAVKVLSSQSE-SSALTNQQPQNNGEVQNSKNQSDINH---NTSGSHYENSQRGPVSS-PS-----DSSTN---CKNAVVNDS-PEKEAWPSTPGSDPELASEC-MDADSASSSESERNITIM----------ASGSTGGEKDGLRNSTGLGSQSKFVVGSS----SNN---------------VGHGSSTGPWG------FSHGAIISTCQV--------------SVDAPESKSESSNNRMNAW-------GTVSSSSN---------G--GLNPSTLNSASNHGAWPVLDNNGLALKG-------PVGSGSS [...]
+D3ZRA6.1/2-1000   ------------EEKKKKKQEDKKKKEGAQKKAADQKTKVPELTKTCSSQPQPAGTSPSTSTSTISSGSNGKR-ASACGQQP----------AAS-----------------------------RYLPREVPPRFR-QQEQKQLLKRGQPLPTGSLT---SVSPAQAAGPAGASPPPL--PGAGA-QQHPSKLQPDLGHSG-LAGHYENCHWGQHPSYRS-----EAD----CSWDKVIIDR-TDQELWPSTPVTETESASECPTDTDSASNCGSENS-SM-----------ATGSTQSSFPGHPKKTNGSHGTNGTLVQS----PSNPSALG------AGAANGNGGMARVWGVATGSSSGLAH------C--------------SVGGGDGKMD-NMIGDGRS-------QNCWGASN---------SNAGINL-SLNPNANPAAWPVLGHEGTVATGNPSSICSPVSAIGQ [...]
+D4A372.1/95-1931  -------------------------------------------------------------------------QQQQQQQPQ----------ALP-----------------------------RY-PREVPPRFRH-QEHKQLLKRGQHFPVIAANLGSAVKVLNSQSE-SSAVTNQQPQNNGEVQNSKSQSDINH---NTSGSHYENCQRGPVSST-S-----DCSTS---C-KNAVNDL-LEKEAWPSAPGSDPELASEC-IDADSASNSESERNITVM----------ASGNTGGEKDGLRNSTGLGPQSKFVVGSS----SNN---------------VGHGSSTGPWG------FPHGAIISTCQV--------------SVDAPESKPESSNSRMNAW-------GTVSSSSN---------G--GLNPSTLNSASNHGAWPVLENNGLALKG-------PVGSGNS [...]
+Q05CE3.1/20-1014  ----LVQEEEQLMEEKKKKKDDKKKKEAAQKKATEQKIKVPEQIKPSVSQPQPANSD-NGTSTATSTNNNAKRATASNQQPPPPQQQQPQQEQ-QQQQP---------------------QALPRY-PREVPPRFRH-QEHKQLLKRGQHFPVIAANLGSAVKVLNSQSE-SSAVTNQQPQNNGEVQNSKSQSDINH---NTSGSHYENCQRGPVSST-S-----DCSTS---C-KNAVNDL-LEKEAWPSAPGSDPELAPEC-IDADSASNSESERNITVM----------ASGNTGGEKDGLRNSTGLGSQSKFVVGSS----SNN---------------VGHGSSTGPWG------FPHGALISTCQV--------------SVDAPESKPESSNNRMNAW-------GTVSSSSN---------G--GLNPSTLNSASNHGAWPVLENNGLALKG-------PVGSGSS [...]
+Q29CP6.2/6-1291   ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+Q3UHC0.2/4-818    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------GSAQS-SFPS--------HLKKTNGSHG------------TNGALVQS----PSNQSALG------AGGTNGNGGVARVWGVATSSSSGLAH------C--------------SVGGGDGKMD-NMIGDGRS-------QNCWGASN---------SNAGINL-NLNPNANPAAWPVLGHEGTVATGNPSSICSPVSAIGQ [...]
+Q3UHK8.1/20-1269  ----LVQEEEQLMEEKKKKKDDKKKKEAAQKKATEQKIKVPEQIKPSVSQPQPANSD-NGTSTATSTNNNAKRATASNQQPPPPQQQQPQQEQ-QQQQP---------------------QALPRY-PREVPPRFRH-QEHKQLLKRGQHFPVIAANLGSAVKVLNSQSE-SSAVTNQQPQNNGEVQNSKSQSDINH---NTSGSHYENCQRGPVSST-S-----DCSTS---C-KNAVNDL-LEKEAWPSAPGSDPELAPEC-IDADSASNSESERNITVM----------ASGNTGGEKDGLRNSTGLGSQSKFVVGSS----SNN---------------VGHGSSTGPWG------FPHGALISTCQV--------------SVDAPESKPESSNNRMNAW-------GTVSSSSN---------G--GLNPSTLNSASNHGAWPVLENNGLALKG-------PVGSGSS [...]
+Q4S9I4.1/33-1574  -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------TGSPCTGDGNSNWGKVLVDGSTDKSNNTS-TSSAVWPPSSFSCSSSSSSSGCGSGSDPELASEC-MDADSSSLNGSEKH-LAAV-------TPVMMSSNASS------------SVSSTASS----PSSSMVTSAVMIGVAVNGDGNGNSRHMLG------GGMGT------VSGSNSGNVTGPPHFSVAGSSNIGSNNMGNHNNKPINSSVWGTQSGSNVITTSGNTPCINGGMNPNTLNPNANHGAWPQNLTPGPGPQG-------QRPSQAQ [...]
+Q8BKI2.2/38-1167  -QEKEQEREEQLMEDKKRKKEDKKKKEATQ-KVTEQKTKVPEVTKPSLSQPTAASPIGSSPSPPVNGGNNAKRVAVPNGQPP----------SAA-----------------------------RYMPREVPPRFRCQQDHKVLLKRGQPPPPSCMLLGGGAGPPPCTAP-GANPNNN-AQVTGALLQSESGTAPESTLGGAAASNYANSTWGPGASSNS-----GASPNPIHIWDKVIVDG-SDMEEWPCIASKDTESSSENTTDNNSASNPGSEKS-SL------------PGSTTSNK------------GKGSQCQA----ASS----------------GNECNLGVWK------SDPKA------K--------------SVQPPNSTSD-SNNGLGNW-------RSTSGQDR---------IGPGSGFSNFNPNSNPSAWPALVQEGTSRKG-------ALETESS [...]
+Q8NDV7.2/119-1962 -------------------------------------------------------------------------QQQPQQQPQ----------ALP-----------------------------RY-PREVPPRFRH-QEHKQLLKRGQHFPVIAANLGSAVKVLNSQSE-SSALTNQQPQNNGEVQNSKNQSDINH---STSGSHYENSQRGPVSST-S-----DSSTN---CKNAVVSDL-SEKEAWPSAPGSDPELASEC-MDADSASSSESERNITIM----------ASGNTGGEKDGL-----RNSTGLGSQNKFVVGSSSNN--------------VGHGSSTGPWG------FSHGAIISTCQV--------------SVDAPESKSESSNNRMNAW-------GTVSSSSN---------G--GLNPSTLNSASNHGAWPVLENNGLALKG-------PVGSGSS [...]
+Q8SY33.1/6-1289   ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+Q9HCJ0.3/4-822    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------GSAQG-NF------------TGHTKKTNGN--------NGTNGALVQS----PSNQSALG------AGGANSNGSAARVWGVATGSSSGLAH------C--------------SVSGGDGKMD-TMIGDGRS-------QNCWGASN---------SNAGINL-NLNPNANPAAWPVLGHEGTVATGNPSSICSPVSAIGQ [...]
+Q9UPQ9.4/1-1833   MREKEQEREEQLMEDKKRKKEDKKKKEATQ-KVTEQKTKVPEVTKPSLSQPTAASPIGSSPSPPVNGGNNAKRVAVPNGQPP----------SAA-----------------------------RYMPREVPPRFRCQQDHKVLLKRGQPPPPSCMLLGGGAGPPPCTAP-GANPNNA--QVTGALLQSESGTAPDSTLGGAAASNYANSTWGSGASSNN-----GTSPNPIHIWDKVIVDG-SDMEEWPCIASKDTESSSENTTDNNSASNPGSEKS-TL------------PGSTTSNK------------GKGSQCQS----ASS----------------GNECNLGVWK------SDPKA------K--------------SVQSSNSTTE-NNNGLGNW-------RNVSGQDR---------IGPGSGFSNFNPNSNPSAWPALVQEGTSRKG-------ALETDNS [...]
+B4H887.1/32-1121  ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+Q8BNF0.2/9-877    -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------VVNRMNAW-------GTVSSSSN---------G--GLNPSTLNSASNHGAWPVLENNGLALKG-------PVGSGSS [...]
+B4MF11.1/6-1287   ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+B4NHM7.1/6-1344   ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+D0Z7B2.1/6-1290   ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+B4JZV3.1/6-1310   ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+Q3UUG8.1/1-727    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+B0WTJ5.1/228-1404 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+Q172C6.1/6-1080   ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+B4L7C4.1/6-1178   ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+Q172C7.1/573-1487 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+Q7Q3B9.4/7-766    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+B0WXH0.1/311-1189 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+B0WXG8.1/386-1198 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+A7SDW4.1/430-1260 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ [...]
+//
diff --git a/test/scripts/automated/belvu/test23 b/test/scripts/automated/belvu/test23
new file mode 100755
index 0000000..10ae707
--- /dev/null
+++ b/test/scripts/automated/belvu/test23
@@ -0,0 +1,25 @@
+#!/bin/ksh
+#
+# Description:
+#   Ignore gaps in conservation calculation and print
+#   conservation table
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences to the saved results
+diffs=`belvu -i -c $data_dir/ALIGN.selex >&1 | diff "$results_file" -` 
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
+
diff --git a/test/scripts/automated/belvu/test23_results b/test/scripts/automated/belvu/test23_results
new file mode 100644
index 0000000..f76d0b0
--- /dev/null
+++ b/test/scripts/automated/belvu/test23_results
@@ -0,0 +1,3544 @@
+
+Column Consensus        Identity       Conservation
+------ ---------  -------------------  ------------
+   1       M         3/370  =   0.8 %   5.0
+   2       R         5/370  =   1.4 %   1.4
+   3       E         9/370  =   2.4 %   3.7
+   4       K         9/370  =   2.4 %   4.1
+   5       E         9/370  =   2.4 %   1.3
+   6       Q         9/370  =   2.4 %   1.7
+   7       E        10/370  =   2.7 %   2.9
+   8       R         9/370  =   2.4 %   2.0
+   9       E        14/370  =   3.8 %   5.0
+  10       E        14/370  =   3.8 %   5.0
+  11       Q        14/370  =   3.8 %   5.0
+  12       L        13/370  =   3.5 %   3.3
+  13       M        16/370  =   4.3 %   3.3
+  14       E        19/370  =   5.1 %   5.0
+  15       D        11/370  =   3.0 %   2.3
+  16       K        18/370  =   4.9 %   4.5
+  17       K        18/370  =   4.9 %   4.6
+  18       R        12/370  =   3.2 %   2.4
+  19       K        19/370  =   5.1 %   5.0
+  20       K        16/370  =   4.3 %   3.7
+  21       E        12/370  =   3.2 %   2.4
+  22       D        18/370  =   4.9 %   5.5
+  23       K        19/370  =   5.1 %   5.0
+  24       K        18/370  =   4.9 %   4.6
+  25       K        19/370  =   5.1 %   5.0
+  26       K        18/370  =   4.9 %   4.6
+  27       E        18/370  =   4.9 %   4.6
+  28       A        14/370  =   3.8 %   2.0
+  29       A         8/370  =   2.2 %   0.8
+  30       Q        18/370  =   4.9 %   4.4
+  31       K         7/370  =   1.9 %   5.0
+  32       K        19/370  =   5.1 %   5.0
+  33       V        11/370  =   3.0 %   1.3
+  34       T        15/370  =   4.1 %   3.1
+  35       E        16/370  =   4.3 %   3.6
+  36       Q        19/370  =   5.1 %   5.0
+  37       K        18/370  =   4.9 %   4.5
+  38       T        11/370  =   3.0 %   1.4
+  39       K        19/370  =   5.1 %   4.5
+  40       V        19/370  =   5.1 %   3.1
+  41       P        19/370  =   5.1 %   5.6
+  42       E        20/370  =   5.4 %   4.5
+  43       V        10/370  =   2.7 %   0.6
+  44       T        13/370  =   3.5 %   1.7
+  45       K        19/370  =   5.1 %   4.5
+  46       P        18/370  =   4.9 %   5.0
+  47       L         1/370  =   0.3 %   0.0
+  48       A         1/370  =   0.3 %   0.0
+  49       T         1/370  =   0.3 %   0.0
+  50       P         1/370  =   0.3 %   0.0
+  51       G         1/370  =   0.3 %   0.0
+  52       S        17/370  =   4.6 %   2.6
+  53       L         9/370  =   2.4 %   0.6
+  54       S        20/370  =   5.4 %   3.7
+  55       P         1/370  =   0.3 %   0.0
+  56       Q        20/370  =   5.4 %   4.5
+  57       P        20/370  =   5.4 %   6.3
+  58       T        10/370  =   2.7 %   0.9
+  59       A        11/370  =   3.0 %   0.9
+  60       A        20/370  =   5.4 %   3.6
+  61       S        10/370  =   2.7 %   1.0
+  62       P        11/370  =   3.0 %   1.5
+  63       S         1/370  =   0.3 %   0.0
+  64       S         1/370  =   0.3 %   0.0
+  65       P         1/370  =   0.3 %   0.0
+  66       T         1/370  =   0.3 %   0.0
+  67       P         1/370  =   0.3 %   0.0
+  68       G         1/370  =   0.3 %   0.0
+  69       A         1/370  =   0.3 %   0.0
+  70       I         9/370  =   2.4 %   0.1
+  71       G        11/370  =   3.0 %   2.8
+  72       S        12/370  =   3.2 %   1.4
+  73       S        12/370  =   3.2 %   1.5
+  74       P        10/370  =   2.7 %   1.4
+  75       S        17/370  =   4.6 %   3.0
+  76       P        11/370  =   3.0 %   1.7
+  77       G         1/370  =   0.3 %   0.0
+  78       P         1/370  =   0.3 %   0.0
+  79       T         1/370  =   0.3 %   0.0
+  80       P         1/370  =   0.3 %   0.0
+  81       S         1/370  =   0.3 %   0.0
+  82       A         1/370  =   0.3 %   0.0
+  83       S         1/370  =   0.3 %   0.0
+  84       P         1/370  =   0.3 %   0.0
+  85       S         1/370  =   0.3 %   0.0
+  86       P         1/370  =   0.3 %   0.0
+  87       A         1/370  =   0.3 %   0.0
+  88       T         1/370  =   0.3 %   0.0
+  89       L         1/370  =   0.3 %   0.0
+  90       G         1/370  =   0.3 %   0.0
+  91       P         1/370  =   0.3 %   0.0
+  92       G         1/370  =   0.3 %   0.0
+  93       S         1/370  =   0.3 %   0.0
+  94       A         1/370  =   0.3 %   0.0
+  95       A         1/370  =   0.3 %   0.0
+  96       A         1/370  =   0.3 %   0.0
+  97       P        12/370  =   3.2 %   2.2
+  98       V        10/370  =   2.7 %   1.0
+  99       N        10/370  =   2.7 %   1.6
+ 100       G        12/370  =   3.2 %   1.7
+ 101       G        14/370  =   3.8 %   2.9
+ 102       N        18/370  =   4.9 %   4.9
+ 103       N        20/370  =   5.4 %   5.3
+ 104       A        19/370  =   5.1 %   3.3
+ 105       K        21/370  =   5.7 %   5.0
+ 106       R        20/370  =   5.4 %   4.6
+ 107       W         1/370  =   0.3 %   0.0
+ 108       V        10/370  =   2.7 %   0.6
+ 109       A        14/370  =   3.8 %   1.3
+ 110       V        11/370  =   3.0 %   0.5
+ 111       P        13/370  =   3.5 %   1.5
+ 112       N        18/370  =   4.9 %   2.8
+ 113       G        15/370  =   4.1 %   1.6
+ 114       Q        25/370  =   6.8 %   5.0
+ 115       P        20/370  =   5.4 %   4.3
+ 116       P        16/370  =   4.3 %   2.5
+ 117       P         2/370  =   0.5 %   0.8
+ 118       P         2/370  =   0.5 %   0.7
+ 119       Q         2/370  =   0.5 %   0.5
+ 120       Q         2/370  =   0.5 %   0.5
+ 121       Q         3/370  =   0.8 %   2.5
+ 122       P         1/370  =   0.3 %   0.0
+ 123       P         1/370  =   0.3 %   0.0
+ 124       A         1/370  =   0.3 %   0.0
+ 125       A         1/370  =   0.3 %   0.0
+ 126       S         1/370  =   0.3 %   0.0
+ 127       G         1/370  =   0.3 %   0.0
+ 128       P         1/370  =   0.3 %   0.0
+ 129       S         1/370  =   0.3 %   0.0
+ 130       P         1/370  =   0.3 %   0.0
+ 131       A         1/370  =   0.3 %   0.0
+ 132       G         1/370  =   0.3 %   0.0
+ 133       N         1/370  =   0.3 %   0.0
+ 134       G         1/370  =   0.3 %   0.0
+ 135       S         1/370  =   0.3 %   0.0
+ 136       A         1/370  =   0.3 %   0.0
+ 137       N         1/370  =   0.3 %   0.0
+ 138       S         1/370  =   0.3 %   0.0
+ 139       G         1/370  =   0.3 %   0.0
+ 140       Q         3/370  =   0.8 %   2.0
+ 141       Q         2/370  =   0.5 %   0.8
+ 142       Q         3/370  =   0.8 %   2.2
+ 143       Q         3/370  =   0.8 %   2.2
+ 144       Q         2/370  =   0.5 %   1.5
+ 145       S        10/370  =   2.7 %   0.7
+ 146       A        11/370  =   3.0 %   0.7
+ 147       A        10/370  =   2.7 %   0.5
+ 148       Q         3/370  =   0.8 %   2.5
+ 149       Q         2/370  =   0.5 %   0.5
+ 150       Q         3/370  =   0.8 %   5.0
+ 151       P         3/370  =   0.8 %   7.0
+ 152       P         1/370  =   0.3 %   0.0
+ 153       Q         1/370  =   0.3 %   0.0
+ 154       Q         1/370  =   0.3 %   0.0
+ 155       P         1/370  =   0.3 %   0.0
+ 156       Q         1/370  =   0.3 %   0.0
+ 157       P         1/370  =   0.3 %   0.0
+ 158       P         1/370  =   0.3 %   0.0
+ 159       Q         1/370  =   0.3 %   0.0
+ 160       P         1/370  =   0.3 %   0.0
+ 161       P         1/370  =   0.3 %   0.0
+ 162       Q         1/370  =   0.3 %   0.0
+ 163       Q         1/370  =   0.3 %   0.0
+ 164       P         1/370  =   0.3 %   0.0
+ 165       P         1/370  =   0.3 %   0.0
+ 166       Q         1/370  =   0.3 %   0.0
+ 167       Q         1/370  =   0.3 %   0.0
+ 168       P         1/370  =   0.3 %   0.0
+ 169       P         1/370  =   0.3 %   0.0
+ 170       Q         1/370  =   0.3 %   0.0
+ 171       P         1/370  =   0.3 %   0.0
+ 172       A         1/370  =   0.3 %   0.0
+ 173       Q         3/370  =   0.8 %   5.0
+ 174       A         3/370  =   0.8 %   4.0
+ 175       L         3/370  =   0.8 %   1.5
+ 176       P         3/370  =   0.8 %   1.1
+ 177       R        22/370  =   5.9 %   4.0
+ 178       Y        22/370  =   5.9 %   5.3
+ 179       M        12/370  =   3.2 %   2.5
+ 180       P        24/370  =   6.5 %   6.4
+ 181       R        22/370  =   5.9 %   4.0
+ 182       E        22/370  =   5.9 %   4.1
+ 183       V        22/370  =   5.9 %   2.9
+ 184       P        22/370  =   5.9 %   5.3
+ 185       P        24/370  =   6.5 %   6.4
+ 186       R        22/370  =   5.9 %   4.0
+ 187       F        22/370  =   5.9 %   4.3
+ 188       R        21/370  =   5.7 %   3.6
+ 189       C        11/370  =   3.0 %   1.4
+ 190       Q        19/370  =   5.1 %   5.0
+ 191       A         1/370  =   0.3 %   0.0
+ 192       Q         1/370  =   0.3 %   0.0
+ 193       K         1/370  =   0.3 %   0.0
+ 194       P         2/370  =   0.5 %   2.0
+ 195       Q        25/370  =   6.8 %   5.0
+ 196       D        12/370  =   3.2 %   1.7
+ 197       H        20/370  =   5.4 %   5.1
+ 198       K        22/370  =   5.9 %   4.0
+ 199       Q        13/370  =   3.5 %   0.8
+ 200       L        21/370  =   5.7 %   2.5
+ 201       L        21/370  =   5.7 %   3.2
+ 202       K        21/370  =   5.7 %   4.2
+ 203       R        21/370  =   5.7 %   4.1
+ 204       G        22/370  =   5.9 %   5.4
+ 205       Q        23/370  =   6.2 %   5.0
+ 206       P        15/370  =   4.1 %   2.5
+ 207       P        12/370  =   3.2 %   1.1
+ 208       P        19/370  =   5.1 %   5.4
+ 209       P         9/370  =   2.4 %   1.2
+ 210       S        12/370  =   3.2 %   1.0
+ 211       C        10/370  =   2.7 %   1.7
+ 212       M        12/370  =   3.2 %   1.5
+ 213       L        12/370  =   3.2 %   0.6
+ 214       L        17/370  =   4.6 %   2.8
+ 215       G        19/370  =   5.1 %   6.0
+ 216       G        12/370  =   3.2 %   2.3
+ 217       G        13/370  =   3.5 %   2.2
+ 218       A        10/370  =   2.7 %   0.8
+ 219       G        12/370  =   3.2 %   1.5
+ 220       P        10/370  =   2.7 %   1.2
+ 221       P        11/370  =   3.0 %   1.6
+ 222       P        11/370  =   3.0 %   1.8
+ 223       S         1/370  =   0.3 %   0.0
+ 224       C         8/370  =   2.2 %   1.2
+ 225       T        10/370  =   2.7 %   1.1
+ 226       A        10/370  =   2.7 %   1.2
+ 227       P        13/370  =   3.5 %   2.6
+ 228       A         2/370  =   0.5 %   4.0
+ 229       G        13/370  =   3.5 %   2.5
+ 230       A        13/370  =   3.5 %   1.8
+ 231       N        10/370  =   2.7 %   1.0
+ 232       P        12/370  =   3.2 %   1.9
+ 233       N        10/370  =   2.7 %   1.3
+ 234       N        16/370  =   4.3 %   3.4
+ 235       A         9/370  =   2.4 %   0.5
+ 236       Q         6/370  =   1.6 %   5.0
+ 237       P         7/370  =   1.9 %   3.0
+ 238       Q        15/370  =   4.1 %   2.6
+ 239       V         9/370  =   2.4 %   0.0
+ 240       T         9/370  =   2.4 %   0.9
+ 241       G        19/370  =   5.1 %   5.3
+ 242       D         1/370  =   0.3 %   0.0
+ 243       A        11/370  =   3.0 %   1.0
+ 244       L         9/370  =   2.4 %   1.0
+ 245       L        10/370  =   2.7 %   0.4
+ 246       Q        12/370  =   3.2 %   1.7
+ 247       S        17/370  =   4.6 %   2.8
+ 248       E         9/370  =   2.4 %   1.1
+ 249       S        16/370  =   4.3 %   2.7
+ 250       G        10/370  =   2.7 %   0.9
+ 251       T         9/370  =   2.4 %   1.0
+ 252       A         9/370  =   2.4 %   0.3
+ 253       P         9/370  =   2.4 %   0.9
+ 254       D         8/370  =   2.2 %   1.3
+ 255       S        10/370  =   2.7 %   0.8
+ 256       T         8/370  =   2.2 %   1.7
+ 257       L         8/370  =   2.2 %   1.0
+ 258       G         9/370  =   2.4 %   2.2
+ 259       G        12/370  =   3.2 %   2.1
+ 260       A        10/370  =   2.7 %   1.2
+ 261       S         1/370  =   0.3 %   0.0
+ 262       A        10/370  =   2.7 %   1.0
+ 263       A         9/370  =   2.4 %   0.7
+ 264       S        16/370  =   4.3 %   2.6
+ 265       N        11/370  =   3.0 %   2.0
+ 266       Y        18/370  =   4.9 %   5.6
+ 267       A        10/370  =   2.7 %   0.7
+ 268       N        20/370  =   5.4 %   6.0
+ 269       S        15/370  =   4.1 %   2.1
+ 270       T         9/370  =   2.4 %   0.7
+ 271       W        13/370  =   3.5 %   3.8
+ 272       G        19/370  =   5.1 %   6.0
+ 273       P         9/370  =   2.4 %   1.2
+ 274       G         9/370  =   2.4 %   0.6
+ 275       A         8/370  =   2.2 %   0.7
+ 276       S        16/370  =   4.3 %   3.0
+ 277       S         8/370  =   2.2 %   0.9
+ 278       N         8/370  =   2.2 %   1.8
+ 279       S        13/370  =   3.5 %   2.1
+ 280       T         1/370  =   0.3 %   0.0
+ 281       D         1/370  =   0.3 %   0.0
+ 282       K         1/370  =   0.3 %   0.0
+ 283       S         1/370  =   0.3 %   0.0
+ 284       N         1/370  =   0.3 %   0.0
+ 285       G         9/370  =   2.4 %   0.9
+ 286       T         7/370  =   1.9 %   0.6
+ 287       S        16/370  =   4.3 %   2.9
+ 288       P         8/370  =   2.2 %   1.4
+ 289       N        12/370  =   3.2 %   2.7
+ 290       P         9/370  =   2.4 %   3.6
+ 291       I         8/370  =   2.2 %   1.1
+ 292       H         9/370  =   2.4 %   2.6
+ 293       I         8/370  =   2.2 %   0.4
+ 294       W        16/370  =   4.3 %   6.4
+ 295       D        15/370  =   4.1 %   2.5
+ 296       K        15/370  =   4.1 %   2.0
+ 297       V        18/370  =   4.9 %   2.4
+ 298       I        16/370  =   4.3 %   2.4
+ 299       V        10/370  =   2.7 %   0.7
+ 300       D        22/370  =   5.9 %   5.5
+ 301       G        10/370  =   2.7 %   0.4
+ 302       S         1/370  =   0.3 %   0.0
+ 303       S        13/370  =   3.5 %   1.2
+ 304       D        14/370  =   3.8 %   2.6
+ 305       M         8/370  =   2.2 %   0.3
+ 306       E        22/370  =   5.9 %   4.6
+ 307       E        10/370  =   2.7 %   0.6
+ 308       W        22/370  =   5.9 %   9.9
+ 309       P        22/370  =   5.9 %   6.3
+ 310       S        12/370  =   3.2 %   1.3
+ 311       I        15/370  =   4.1 %   1.3
+ 312       A        10/370  =   2.7 %   0.7
+ 313       G        10/370  =   2.7 %   0.8
+ 314       S         1/370  =   0.3 %   0.0
+ 315       S         9/370  =   2.4 %   0.6
+ 316       D        18/370  =   4.9 %   3.9
+ 317       S         1/370  =   0.3 %   0.0
+ 318       T        12/370  =   3.2 %   1.0
+ 319       E        20/370  =   5.4 %   3.7
+ 320       S        13/370  =   3.5 %   0.8
+ 321       A        12/370  =   3.2 %   1.2
+ 322       S        18/370  =   4.9 %   2.2
+ 323       E        19/370  =   5.1 %   3.6
+ 324       C        12/370  =   3.2 %   1.8
+ 325       T         9/370  =   2.4 %   1.5
+ 326       T        13/370  =   3.5 %   1.3
+ 327       D        21/370  =   5.7 %   4.9
+ 328       N         9/370  =   2.4 %   0.6
+ 329       D        12/370  =   3.2 %   1.7
+ 330       S        21/370  =   5.7 %   3.2
+ 331       G         1/370  =   0.3 %   0.0
+ 332       P         1/370  =   0.3 %   0.0
+ 333       A        19/370  =   5.1 %   3.0
+ 334       S        20/370  =   5.4 %   3.1
+ 335       N        17/370  =   4.6 %   3.3
+ 336       S         9/370  =   2.4 %   0.4
+ 337       G        17/370  =   4.6 %   2.4
+ 338       S        24/370  =   6.5 %   3.7
+ 339       E        20/370  =   5.4 %   3.0
+ 340       K        10/370  =   2.7 %   1.0
+ 341       S        13/370  =   3.5 %   1.2
+ 342       I         6/370  =   1.6 %   4.0
+ 343       T        13/370  =   3.5 %   1.5
+ 344       L         8/370  =   2.2 %   0.5
+ 345       M         6/370  =   1.6 %   1.0
+ 346       A         2/370  =   0.5 %   0.5
+ 347       G         1/370  =   0.3 %   0.0
+ 348       N         1/370  =   0.3 %   0.5
+ 349       A         1/370  =   0.3 %   0.0
+ 350       Q         1/370  =   0.3 %   0.0
+ 351       G         1/370  =   0.3 %   0.0
+ 352       T         1/370  =   0.3 %   0.0
+ 353       M         1/370  =   0.3 %   0.0
+ 354       T         2/370  =   0.5 %   1.0
+ 355       G         2/370  =   0.5 %   0.0
+ 356       A         9/370  =   2.4 %   1.3
+ 357       P         8/370  =   2.2 %   0.4
+ 358       G        19/370  =   5.1 %   3.4
+ 359       S        16/370  =   4.3 %   1.9
+ 360       T        18/370  =   4.9 %   2.7
+ 361       T        12/370  =   3.2 %   0.8
+ 362       S        14/370  =   3.8 %   1.3
+ 363       H         1/370  =   0.3 %   0.0
+ 364       F         1/370  =   0.3 %   0.0
+ 365       P         1/370  =   0.3 %   0.0
+ 366       A         1/370  =   0.3 %   0.0
+ 367       N         1/370  =   0.3 %   0.0
+ 368       H         1/370  =   0.3 %   0.0
+ 369       L         1/370  =   0.3 %   0.0
+ 370       S         1/370  =   0.3 %   0.0
+ 371       N         9/370  =   2.4 %   0.9
+ 372       K        17/370  =   4.6 %   1.9
+ 373       D         6/370  =   1.6 %   1.4
+ 374       G         7/370  =   1.9 %   2.2
+ 375       L         6/370  =   1.6 %   0.5
+ 376       R         4/370  =   1.1 %   0.9
+ 377       N         4/370  =   1.1 %   1.7
+ 378       S         4/370  =   1.1 %   1.1
+ 379       T         7/370  =   1.9 %   5.0
+ 380       G         4/370  =   1.1 %   1.7
+ 381       G         4/370  =   1.1 %   0.0
+ 382       G         4/370  =   1.1 %   0.8
+ 383       S         5/370  =   1.4 %   0.6
+ 384       G         5/370  =   1.4 %   0.5
+ 385       G        11/370  =   3.0 %   0.9
+ 386       K        12/370  =   3.2 %   1.0
+ 387       G        17/370  =   4.6 %   2.2
+ 388       S        12/370  =   3.2 %   0.9
+ 389       Q        11/370  =   3.0 %   0.5
+ 390       C         9/370  =   2.4 %   0.6
+ 391       Q        15/370  =   4.1 %   1.9
+ 392       S        17/370  =   4.6 %   1.8
+ 393       V         2/370  =   0.5 %   4.0
+ 394       V         2/370  =   0.5 %   4.0
+ 395       G         2/370  =   0.5 %   6.0
+ 396       S         2/370  =   0.5 %   4.0
+ 397       A         8/370  =   2.2 %   0.3
+ 398       S        18/370  =   4.9 %   2.2
+ 399       N        13/370  =   3.5 %   1.8
+ 400       Q         5/370  =   1.4 %   0.9
+ 401       S         6/370  =   1.6 %   2.1
+ 402       A         6/370  =   1.6 %   2.2
+ 403       L         6/370  =   1.6 %   2.7
+ 404       G         6/370  =   1.6 %   4.3
+ 405       A         1/370  =   0.3 %   0.0
+ 406       V         1/370  =   0.3 %   0.0
+ 407       M         1/370  =   0.3 %   0.0
+ 408       I         1/370  =   0.3 %   0.0
+ 409       G         1/370  =   0.3 %   0.0
+ 410       V         1/370  =   0.3 %   0.0
+ 411       A         7/370  =   1.9 %   4.0
+ 412       G         6/370  =   1.6 %   3.9
+ 413       G         5/370  =   1.4 %   1.9
+ 414       A         3/370  =   0.8 %   0.4
+ 415       N         6/370  =   1.6 %   0.3
+ 416       G        23/370  =   6.2 %   5.1
+ 417       N        15/370  =   4.1 %   2.2
+ 418       G        13/370  =   3.5 %   1.1
+ 419       C         9/370  =   2.4 %   0.7
+ 420       N         8/370  =   2.2 %   0.4
+ 421       L         8/370  =   2.2 %   0.1
+ 422       G        15/370  =   4.1 %   1.7
+ 423       V        15/370  =   4.1 %   1.0
+ 424       W        23/370  =   6.2 %   8.3
+ 425       G        14/370  =   3.8 %   1.2
+ 426       V         6/370  =   1.6 %   4.0
+ 427       A         6/370  =   1.6 %   4.0
+ 428       T         6/370  =   1.6 %   5.0
+ 429       G         3/370  =   0.8 %   1.2
+ 430       S         6/370  =   1.6 %   4.0
+ 431       S         6/370  =   1.6 %   4.0
+ 432       S        17/370  =   4.6 %   1.4
+ 433       D        10/370  =   2.7 %   0.7
+ 434       P        12/370  =   3.2 %   0.8
+ 435       K        10/370  =   2.7 %   0.4
+ 436       G         1/370  =   0.3 %   0.0
+ 437       A        15/370  =   4.1 %   1.0
+ 438       I         4/370  =   1.1 %   1.3
+ 439       I         6/370  =   1.6 %   4.0
+ 440       S         6/370  =   1.6 %   4.0
+ 441       T         6/370  =   1.6 %   5.0
+ 442       C         6/370  =   1.6 %   9.0
+ 443       Q         6/370  =   1.6 %   3.6
+ 444       K        10/370  =   2.7 %   0.1
+ 445       P         1/370  =   0.3 %   0.0
+ 446       G         1/370  =   0.3 %   0.0
+ 447       S         1/370  =   0.3 %   0.0
+ 448       N         1/370  =   0.3 %   0.0
+ 449       S         1/370  =   0.3 %   0.0
+ 450       G         1/370  =   0.3 %   0.0
+ 451       N         1/370  =   0.3 %   0.0
+ 452       V         1/370  =   0.3 %   0.0
+ 453       T         1/370  =   0.3 %   0.0
+ 454       G         1/370  =   0.3 %   0.0
+ 455       P         1/370  =   0.3 %   0.0
+ 456       P         1/370  =   0.3 %   0.0
+ 457       H         1/370  =   0.3 %   0.0
+ 458       Q         1/370  =   0.3 %   0.0
+ 459       S        23/370  =   6.2 %   3.1
+ 460       V        23/370  =   6.2 %   3.0
+ 461       Q         9/370  =   2.4 %   0.3
+ 462       S         9/370  =   2.4 %   0.5
+ 463       S        10/370  =   2.7 %   0.5
+ 464       N        10/370  =   2.7 %   0.9
+ 465       S        14/370  =   3.8 %   1.0
+ 466       K        14/370  =   3.8 %   1.1
+ 467       T         7/370  =   1.9 %   0.2
+ 468       E        13/370  =   3.5 %   1.6
+ 469       S         6/370  =   1.6 %   3.0
+ 470       N        12/370  =   3.2 %   1.3
+ 471       N        14/370  =   3.8 %   1.3
+ 472       N        15/370  =   4.1 %   1.5
+ 473       G        16/370  =   4.3 %   1.8
+ 474       L         9/370  =   2.4 %   0.3
+ 475       G        17/370  =   4.6 %   2.5
+ 476       N        10/370  =   2.7 %   0.6
+ 477       W        16/370  =   4.3 %   3.3
+ 478       P         1/370  =   0.3 %   0.0
+ 479       A         1/370  =   0.3 %   0.0
+ 480       N         1/370  =   0.3 %   0.0
+ 481       S         1/370  =   0.3 %   0.0
+ 482       P         1/370  =   0.3 %   0.0
+ 483       P         1/370  =   0.3 %   0.0
+ 484       S         1/370  =   0.3 %   0.0
+ 485       R        10/370  =   2.7 %   0.5
+ 486       N        13/370  =   3.5 %   1.5
+ 487       V        14/370  =   3.8 %   1.0
+ 488       S        17/370  =   4.6 %   1.1
+ 489       G        19/370  =   5.1 %   3.2
+ 490       V         1/370  =   0.3 %   0.0
+ 491       N         1/370  =   0.3 %   0.0
+ 492       S        11/370  =   3.0 %   0.8
+ 493       S        15/370  =   4.1 %   1.3
+ 494       N        13/370  =   3.5 %   1.4
+ 495       I         1/370  =   0.3 %   0.0
+ 496       T         1/370  =   0.3 %   0.0
+ 497       T         1/370  =   0.3 %   0.0
+ 498       S         1/370  =   0.3 %   0.0
+ 499       G         1/370  =   0.3 %   0.0
+ 500       N         1/370  =   0.3 %   0.0
+ 501       T         1/370  =   0.3 %   0.0
+ 502       P         1/370  =   0.3 %   0.0
+ 503       C         1/370  =   0.3 %   0.0
+ 504       I         9/370  =   2.4 %   0.1
+ 505       G        10/370  =   2.7 %   1.6
+ 506       P         8/370  =   2.2 %   0.9
+ 507       G        22/370  =   5.9 %   4.3
+ 508       S         9/370  =   2.4 %   0.2
+ 509       N        16/370  =   4.3 %   2.2
+ 510       F        10/370  =   2.7 %   0.3
+ 511       S        16/370  =   4.3 %   2.7
+ 512       S         1/370  =   0.3 %   0.0
+ 513       P         1/370  =   0.3 %   0.0
+ 514       N         1/370  =   0.3 %   0.0
+ 515       F         1/370  =   0.3 %   0.0
+ 516       N         1/370  =   0.3 %   0.0
+ 517       L         2/370  =   0.5 %   4.0
+ 518       N        17/370  =   4.6 %   2.5
+ 519       L        16/370  =   4.3 %   1.5
+ 520       N        26/370  =   7.0 %   6.0
+ 521       P        19/370  =   5.1 %   3.5
+ 522       N        19/370  =   5.1 %   2.7
+ 523       S        15/370  =   4.1 %   1.5
+ 524       N        26/370  =   7.0 %   6.0
+ 525       P        18/370  =   4.9 %   2.9
+ 526       S        12/370  =   3.2 %   0.9
+ 527       A        26/370  =   7.0 %   4.0
+ 528       W        26/370  =   7.0 %  11.0
+ 529       P        26/370  =   7.0 %   7.0
+ 530       V        13/370  =   3.5 %   0.9
+ 531       L        25/370  =   6.8 %   3.6
+ 532       V        10/370  =   2.7 %   0.0
+ 533       Q        10/370  =   2.7 %   0.8
+ 534       E        17/370  =   4.6 %   2.1
+ 535       G        24/370  =   6.5 %   4.9
+ 536       T        13/370  =   3.5 %   1.2
+ 537       S         8/370  =   2.2 %   0.3
+ 538       R         9/370  =   2.4 %   0.2
+ 539       K        16/370  =   4.3 %   1.8
+ 540       G        26/370  =   7.0 %   6.0
+ 541       N         6/370  =   1.6 %   2.9
+ 542       P         6/370  =   1.6 %   3.4
+ 543       S         7/370  =   1.9 %   3.0
+ 544       G         1/370  =   0.3 %   0.0
+ 545       N         1/370  =   0.3 %   0.0
+ 546       A         1/370  =   0.3 %   0.5
+ 547       N         1/370  =   0.3 %   0.0
+ 548       S         1/370  =   0.3 %   0.0
+ 549       I         1/370  =   0.3 %   0.0
+ 550       S         1/370  =   0.3 %   0.0
+ 551       P         1/370  =   0.3 %   0.0
+ 552       P         1/370  =   0.3 %   0.0
+ 553       Q         1/370  =   0.3 %   0.0
+ 554       S         1/370  =   0.3 %   0.0
+ 555       T         1/370  =   0.3 %   0.0
+ 556       S         1/370  =   0.3 %   0.0
+ 557       N         1/370  =   0.3 %   0.0
+ 558       S         1/370  =   0.3 %   0.0
+ 559       C         1/370  =   0.3 %   0.0
+ 560       N         1/370  =   0.3 %   0.0
+ 561       Q         1/370  =   0.3 %   0.0
+ 562       I         1/370  =   0.3 %   0.0
+ 563       G         1/370  =   0.3 %   0.0
+ 564       P         1/370  =   0.3 %   0.0
+ 565       S         6/370  =   1.6 %   2.1
+ 566       I         6/370  =   1.6 %   1.5
+ 567       C         6/370  =   1.6 %   4.7
+ 568       S         6/370  =   1.6 %   1.9
+ 569       P        15/370  =   4.1 %   2.0
+ 570       V        14/370  =   3.8 %   1.2
+ 571       E         9/370  =   2.4 %   0.3
+ 572       S        10/370  =   2.7 %   0.8
+ 573       D         7/370  =   1.9 %   0.1
+ 574       S         9/370  =   2.4 %   0.6
+ 575       S        16/370  =   4.3 %   1.5
+ 576       N        13/370  =   3.5 %   1.5
+ 577       S        10/370  =   2.7 %   0.3
+ 578       N         9/370  =   2.4 %   0.7
+ 579       I         9/370  =   2.4 %   0.2
+ 580       Q        22/370  =   5.9 %   3.5
+ 581       N         6/370  =   1.6 %   3.9
+ 582       G         7/370  =   1.9 %   6.0
+ 583       V         1/370  =   0.3 %   0.0
+ 584       A         1/370  =   0.3 %   0.0
+ 585       S         1/370  =   0.3 %   0.0
+ 586       P         1/370  =   0.3 %   0.0
+ 587       Q         1/370  =   0.3 %   0.0
+ 588       N         6/370  =   1.6 %   4.3
+ 589       P         7/370  =   1.9 %   7.0
+ 590       V        12/370  =   3.2 %   0.6
+ 591       S        16/370  =   4.3 %   1.4
+ 592       T        18/370  =   4.9 %   2.3
+ 593       V         9/370  =   2.4 %   0.8
+ 594       G        26/370  =   7.0 %   6.0
+ 595       S         1/370  =   0.3 %   0.0
+ 596       Q        15/370  =   4.1 %   1.4
+ 597       M         8/370  =   2.2 %   0.3
+ 598       S        10/370  =   2.7 %   0.5
+ 599       N        15/370  =   4.1 %   1.8
+ 600       L         6/370  =   1.6 %   1.9
+ 601       A         1/370  =   0.3 %   0.0
+ 602       G         1/370  =   0.3 %   0.0
+ 603       D         1/370  =   0.3 %   0.0
+ 604       W         1/370  =   0.3 %   0.0
+ 605       V         1/370  =   0.3 %   0.0
+ 606       G         1/370  =   0.3 %   0.0
+ 607       L         1/370  =   0.3 %   0.0
+ 608       V         1/370  =   0.3 %   0.0
+ 609       L         6/370  =   1.6 %   2.0
+ 610       E         9/370  =   2.4 %   0.4
+ 611       Q        22/370  =   5.9 %   3.6
+ 612       Q         9/370  =   2.4 %   0.8
+ 613       I         7/370  =   1.9 %   4.0
+ 614       N         7/370  =   1.9 %   6.0
+ 615       S        23/370  =   6.2 %   3.5
+ 616       K        16/370  =   4.3 %   1.7
+ 617       M        10/370  =   2.7 %   0.6
+ 618       E        10/370  =   2.7 %   0.6
+ 619       N         8/370  =   2.2 %   0.6
+ 620       A         9/370  =   2.4 %   0.6
+ 621       S        15/370  =   4.1 %   1.4
+ 622       T        14/370  =   3.8 %   1.5
+ 623       N         9/370  =   2.4 %   1.0
+ 624       F         9/370  =   2.4 %   0.0
+ 625       N         8/370  =   2.2 %   0.3
+ 626       W         7/370  =   1.9 %   8.0
+ 627       G         7/370  =   1.9 %   4.5
+ 628       S         8/370  =   2.2 %   4.0
+ 629       L         7/370  =   1.9 %   2.6
+ 630       Q         7/370  =   1.9 %   3.9
+ 631       E         7/370  =   1.9 %   3.5
+ 632       T         7/370  =   1.9 %   5.0
+ 633       C         7/370  =   1.9 %   9.0
+ 634       E         7/370  =   1.9 %   5.0
+ 635       P         4/370  =   1.1 %   1.7
+ 636       E         7/370  =   1.9 %   5.0
+ 637       V         7/370  =   1.9 %   4.0
+ 638       S         7/370  =   1.9 %   4.0
+ 639       G         7/370  =   1.9 %   4.0
+ 640       T         6/370  =   1.6 %   2.6
+ 641       Q         7/370  =   1.9 %   3.8
+ 642       K         7/370  =   1.9 %   3.8
+ 643       V         7/370  =   1.9 %   2.6
+ 644       S         8/370  =   2.2 %   4.0
+ 645       V        15/370  =   4.1 %   1.1
+ 646       S        24/370  =   6.5 %   3.7
+ 647       G        17/370  =   4.6 %   2.0
+ 648       R         9/370  =   2.4 %   0.6
+ 649       E         9/370  =   2.4 %   0.3
+ 650       Q        22/370  =   5.9 %   4.0
+ 651       A         9/370  =   2.4 %   0.5
+ 652       Q        15/370  =   4.1 %   1.1
+ 653       N         9/370  =   2.4 %   0.4
+ 654       H         9/370  =   2.4 %   0.3
+ 655       N        16/370  =   4.3 %   2.4
+ 656       T         1/370  =   0.3 %   0.0
+ 657       E         1/370  =   0.3 %   0.0
+ 658       T        21/370  =   5.7 %   3.4
+ 659       D        17/370  =   4.6 %   2.5
+ 660       G        25/370  =   6.8 %   6.0
+ 661       P        25/370  =   6.8 %   7.0
+ 662       N        16/370  =   4.3 %   2.6
+ 663       N        21/370  =   5.7 %   4.6
+ 664       T         9/370  =   2.4 %   1.0
+ 665       N        14/370  =   3.8 %   2.1
+ 666       T        14/370  =   3.8 %   1.5
+ 667       M         6/370  =   1.6 %   3.9
+ 668       N         7/370  =   1.9 %   6.0
+ 669       N         1/370  =   0.3 %   0.0
+ 670       T         1/370  =   0.3 %   0.0
+ 671       T         1/370  =   0.3 %   0.0
+ 672       S         6/370  =   1.6 %   3.0
+ 673       S         6/370  =   1.6 %   3.0
+ 674       P         6/370  =   1.6 %   4.7
+ 675       N        20/370  =   5.4 %   4.4
+ 676       F         7/370  =   1.9 %   0.1
+ 677       M         8/370  =   2.2 %   1.0
+ 678       N        13/370  =   3.5 %   2.2
+ 679       S         8/370  =   2.2 %   0.4
+ 680       S        15/370  =   4.1 %   1.8
+ 681       S         8/370  =   2.2 %   0.3
+ 682       P        15/370  =   4.1 %   3.3
+ 683       N        21/370  =   5.7 %   6.0
+ 684       S         8/370  =   2.2 %   0.4
+ 685       G         7/370  =   1.9 %   6.0
+ 686       S         7/370  =   1.9 %   4.0
+ 687       M         7/370  =   1.9 %   0.8
+ 688       Q         7/370  =   1.9 %   0.6
+ 689       N        20/370  =   5.4 %   5.5
+ 690       N         7/370  =   1.9 %   0.2
+ 691       G        13/370  =   3.5 %   1.7
+ 692       M        13/370  =   3.5 %   2.4
+ 693       P        14/370  =   3.8 %   2.8
+ 694       F         7/370  =   1.9 %   0.2
+ 695       S         6/370  =   1.6 %   4.0
+ 696       G        13/370  =   3.5 %   2.2
+ 697       M        13/370  =   3.5 %   1.5
+ 698       G        20/370  =   5.4 %   5.4
+ 699       A        13/370  =   3.5 %   1.2
+ 700       G         8/370  =   2.2 %   0.5
+ 701       R         7/370  =   1.9 %   0.3
+ 702       V         8/370  =   2.2 %   0.3
+ 703       S        14/370  =   3.8 %   1.5
+ 704       R         7/370  =   1.9 %   0.3
+ 705       M         7/370  =   1.9 %   5.0
+ 706       N         7/370  =   1.9 %   6.0
+ 707       H         7/370  =   1.9 %   8.0
+ 708       P         7/370  =   1.9 %   7.0
+ 709       Q         7/370  =   1.9 %   0.3
+ 710       T         7/370  =   1.9 %   0.3
+ 711       D         7/370  =   1.9 %   0.5
+ 712       A        14/370  =   3.8 %   1.5
+ 713       P        21/370  =   5.7 %   7.0
+ 714       S        14/370  =   3.8 %   1.7
+ 715       A         7/370  =   1.9 %   0.3
+ 716       N         7/370  =   1.9 %   0.5
+ 717       N         7/370  =   1.9 %   0.6
+ 718       G        14/370  =   3.8 %   2.6
+ 719       S         6/370  =   1.6 %   2.6
+ 720       V         4/370  =   1.1 %   2.0
+ 721       T         1/370  =   0.3 %   0.0
+ 722       P         1/370  =   0.3 %   0.0
+ 723       Q         1/370  =   0.3 %   0.0
+ 724       S         4/370  =   1.1 %   2.4
+ 725       Q         4/370  =   1.1 %   1.0
+ 726       D         7/370  =   1.9 %   0.4
+ 727       S        11/370  =   3.0 %   0.9
+ 728       L         7/370  =   1.9 %   3.1
+ 729       S         7/370  =   1.9 %   4.0
+ 730       H         7/370  =   1.9 %   8.0
+ 731       L         7/370  =   1.9 %   4.0
+ 732       S         7/370  =   1.9 %   4.0
+ 733       N         7/370  =   1.9 %   6.0
+ 734       G         7/370  =   1.9 %   4.5
+ 735       E         8/370  =   2.2 %   0.6
+ 736       S        12/370  =   3.2 %   1.4
+ 737       G        14/370  =   3.8 %   2.1
+ 738       S        10/370  =   2.7 %   1.0
+ 739       S         1/370  =   0.3 %   0.0
+ 740       A         1/370  =   0.3 %   0.0
+ 741       G         7/370  =   1.9 %   0.0
+ 742       G        21/370  =   5.7 %   6.0
+ 743       S        14/370  =   3.8 %   1.5
+ 744       W         7/370  =   1.9 %   1.1
+ 745       G        15/370  =   4.1 %   3.0
+ 746       T         8/370  =   2.2 %   0.8
+ 747       A         7/370  =   1.9 %   0.5
+ 748       W        14/370  =   3.8 %   4.1
+ 749       G        20/370  =   5.4 %   5.4
+ 750       A         8/370  =   2.2 %   0.3
+ 751       S        13/370  =   3.5 %   1.1
+ 752       G        14/370  =   3.8 %   2.1
+ 753       S         7/370  =   1.9 %   0.6
+ 754       N        13/370  =   3.5 %   2.7
+ 755       T         7/370  =   1.9 %   1.1
+ 756       A         7/370  =   1.9 %   0.4
+ 757       S        14/370  =   3.8 %   2.1
+ 758       G        20/370  =   5.4 %   6.0
+ 759       D         7/370  =   1.9 %   0.7
+ 760       S         9/370  =   2.4 %   0.9
+ 761       N        13/370  =   3.5 %   1.7
+ 762       S        12/370  =   3.2 %   1.4
+ 763       G        19/370  =   5.1 %   5.4
+ 764       N         7/370  =   1.9 %   0.6
+ 765       N         8/370  =   2.2 %   2.0
+ 766       G         8/370  =   2.2 %   1.3
+ 767       N         7/370  =   1.9 %   0.4
+ 768       N        20/370  =   5.4 %   5.4
+ 769       G        21/370  =   5.7 %   6.0
+ 770       Q         7/370  =   1.9 %   1.2
+ 771       A         7/370  =   1.9 %   0.5
+ 772       N         8/370  =   2.2 %   1.6
+ 773       G         8/370  =   2.2 %   0.9
+ 774       D        21/370  =   5.7 %   6.0
+ 775       T        14/370  =   3.8 %   2.4
+ 776       V        14/370  =   3.8 %   1.0
+ 777       N        14/370  =   3.8 %   2.6
+ 778       A         7/370  =   1.9 %   0.6
+ 779       P         1/370  =   0.3 %   0.0
+ 780       N         1/370  =   0.3 %   0.0
+ 781       P         1/370  =   0.3 %   0.0
+ 782       A        14/370  =   3.8 %   1.7
+ 783       L        14/370  =   3.8 %   1.3
+ 784       M         8/370  =   2.2 %   0.7
+ 785       Q        14/370  =   3.8 %   1.9
+ 786       K        13/370  =   3.5 %   1.6
+ 787       G         8/370  =   2.2 %   0.5
+ 788       I         5/370  =   1.4 %   2.6
+ 789       N        14/370  =   3.8 %   2.4
+ 790       G        20/370  =   5.4 %   4.8
+ 791       K         1/370  =   0.3 %   0.0
+ 792       I         1/370  =   0.3 %   0.0
+ 793       S        14/370  =   3.8 %   1.3
+ 794       K         7/370  =   1.9 %   0.3
+ 795       G         7/370  =   1.9 %   0.5
+ 796       A         7/370  =   1.9 %   0.4
+ 797       S         8/370  =   2.2 %   0.5
+ 798       Q         7/370  =   1.9 %   0.9
+ 799       D         7/370  =   1.9 %   0.5
+ 800       N         8/370  =   2.2 %   0.4
+ 801       N        14/370  =   3.8 %   2.4
+ 802       N         8/370  =   2.2 %   1.4
+ 803       D         1/370  =   0.3 %   0.0
+ 804       Q         1/370  =   0.3 %   0.0
+ 805       N         1/370  =   0.3 %   0.0
+ 806       N         9/370  =   2.4 %   1.6
+ 807       S         9/370  =   2.4 %   0.7
+ 808       G        15/370  =   4.1 %   2.0
+ 809       G        20/370  =   5.4 %   4.4
+ 810       G        14/370  =   3.8 %   2.1
+ 811       V         8/370  =   2.2 %   0.4
+ 812       W        23/370  =   6.2 %  11.0
+ 813       N         7/370  =   1.9 %   0.8
+ 814       S         9/370  =   2.4 %   0.2
+ 815       G        22/370  =   5.9 %   6.0
+ 816       P        13/370  =   3.5 %   2.1
+ 817       Q         7/370  =   1.9 %   0.3
+ 818       N         7/370  =   1.9 %   0.4
+ 819       S        13/370  =   3.5 %   1.3
+ 820       P         1/370  =   0.3 %   0.0
+ 821       N         1/370  =   0.3 %   0.0
+ 822       Q         1/370  =   0.3 %   0.0
+ 823       P         1/370  =   0.3 %   0.0
+ 824       P         6/370  =   1.6 %   4.9
+ 825       N         8/370  =   2.2 %   0.6
+ 826       D         8/370  =   2.2 %   0.4
+ 827       N         8/370  =   2.2 %   0.4
+ 828       K         7/370  =   1.9 %   0.2
+ 829       W        21/370  =   5.7 %   8.9
+ 830       G        22/370  =   5.9 %   5.4
+ 831       S         9/370  =   2.4 %   0.4
+ 832       G        21/370  =   5.7 %   4.9
+ 833       N        15/370  =   4.1 %   2.4
+ 834       G        14/370  =   3.8 %   1.7
+ 835       A         7/370  =   1.9 %   0.1
+ 836       G         1/370  =   0.3 %   0.0
+ 837       N        12/370  =   3.2 %   1.3
+ 838       G         4/370  =   1.1 %   2.1
+ 839       Y         1/370  =   0.3 %   0.0
+ 840       S         1/370  =   0.3 %   0.0
+ 841       A         1/370  =   0.3 %   0.0
+ 842       G         1/370  =   0.3 %   0.0
+ 843       Q         1/370  =   0.3 %   0.0
+ 844       A         1/370  =   0.3 %   0.0
+ 845       P         1/370  =   0.3 %   0.0
+ 846       E         1/370  =   0.3 %   0.0
+ 847       N         1/370  =   0.3 %   0.0
+ 848       D         1/370  =   0.3 %   0.0
+ 849       A         1/370  =   0.3 %   0.0
+ 850       Q         1/370  =   0.3 %   0.0
+ 851       T         1/370  =   0.3 %   0.0
+ 852       T         1/370  =   0.3 %   0.0
+ 853       M         1/370  =   0.3 %   0.0
+ 854       G         1/370  =   0.3 %   0.0
+ 855       N         1/370  =   0.3 %   0.0
+ 856       I         3/370  =   0.8 %   1.1
+ 857       S        16/370  =   4.3 %   1.9
+ 858       G        15/370  =   4.1 %   2.4
+ 859       G        10/370  =   2.7 %   0.2
+ 860       S        14/370  =   3.8 %   1.2
+ 861       R         7/370  =   1.9 %   0.4
+ 862       G        13/370  =   3.5 %   1.4
+ 863       A         8/370  =   2.2 %   0.3
+ 864       W        22/370  =   5.9 %  10.0
+ 865       G        14/370  =   3.8 %   1.7
+ 866       Q         7/370  =   1.9 %   0.4
+ 867       P        20/370  =   5.4 %   5.7
+ 868       A         8/370  =   2.2 %   0.6
+ 869       G         8/370  =   2.2 %   0.3
+ 870       S        14/370  =   3.8 %   1.7
+ 871       T         9/370  =   2.4 %   0.7
+ 872       G         8/370  =   2.2 %   4.7
+ 873       S         2/370  =   0.5 %   4.0
+ 874       S         1/370  =   0.3 %   0.0
+ 875       S         1/370  =   0.3 %   0.0
+ 876       S         1/370  =   0.3 %   0.0
+ 877       S         1/370  =   0.3 %   0.0
+ 878       S         1/370  =   0.3 %   0.0
+ 879       S         1/370  =   0.3 %   0.0
+ 880       T         1/370  =   0.3 %   0.0
+ 881       S         1/370  =   0.3 %   0.0
+ 882       N         1/370  =   0.3 %   0.0
+ 883       T         8/370  =   2.2 %   3.7
+ 884       S         8/370  =   2.2 %   0.5
+ 885       L        13/370  =   3.5 %   0.7
+ 886       G         7/370  =   1.9 %   0.2
+ 887       S         8/370  =   2.2 %   0.3
+ 888       N         5/370  =   1.4 %   6.0
+ 889       G        14/370  =   3.8 %   1.6
+ 890       E        22/370  =   5.9 %   4.6
+ 891       W        22/370  =   5.9 %   9.9
+ 892       S         8/370  =   2.2 %   0.6
+ 893       K        14/370  =   3.8 %   1.4
+ 894       A         1/370  =   0.3 %   0.0
+ 895       L         7/370  =   1.9 %   0.4
+ 896       P        23/370  =   6.2 %   7.0
+ 897       N        13/370  =   3.5 %   2.1
+ 898       Q        13/370  =   3.5 %   1.5
+ 899       Q         7/370  =   1.9 %   0.3
+ 900       N         8/370  =   2.2 %   0.8
+ 901       S        20/370  =   5.4 %   3.1
+ 902       S        13/370  =   3.5 %   1.5
+ 903       D         6/370  =   1.6 %   6.0
+ 904       I         6/370  =   1.6 %   4.0
+ 905       N         3/370  =   0.8 %   1.5
+ 906       G         6/370  =   1.6 %   6.0
+ 907       K         6/370  =   1.6 %   5.0
+ 908       G         6/370  =   1.6 %   6.0
+ 909       D         7/370  =   1.9 %   0.4
+ 910       G         9/370  =   2.4 %   0.6
+ 911       A        15/370  =   4.1 %   1.6
+ 912       W        15/370  =   4.1 %   3.7
+ 913       D        13/370  =   3.5 %   1.7
+ 914       N        14/370  =   3.8 %   2.2
+ 915       G         9/370  =   2.4 %   0.5
+ 916       K        13/370  =   3.5 %   1.5
+ 917       K         5/370  =   1.4 %   1.2
+ 918       L         3/370  =   0.8 %   0.6
+ 919       L         1/370  =   0.3 %   0.0
+ 920       T         7/370  =   1.9 %   2.8
+ 921       N         9/370  =   2.4 %   1.5
+ 922       G        16/370  =   4.3 %   2.8
+ 923       W         8/370  =   2.2 %   0.6
+ 924       P         8/370  =   2.2 %   0.5
+ 925       S         9/370  =   2.4 %   0.4
+ 926       P        13/370  =   3.5 %   1.8
+ 927       E        15/370  =   4.1 %   2.0
+ 928       N         9/370  =   2.4 %   0.5
+ 929       Q        14/370  =   3.8 %   2.0
+ 930       A         1/370  =   0.3 %   0.0
+ 931       P         6/370  =   1.6 %   3.3
+ 932       G        14/370  =   3.8 %   1.9
+ 933       N         7/370  =   1.9 %   0.6
+ 934       A         8/370  =   2.2 %   0.3
+ 935       Q         8/370  =   2.2 %   0.5
+ 936       A        14/370  =   3.8 %   1.2
+ 937       N         7/370  =   1.9 %   0.3
+ 938       S        15/370  =   4.1 %   1.4
+ 939       W        14/370  =   3.8 %   3.4
+ 940       G         8/370  =   2.2 %   0.4
+ 941       R         7/370  =   1.9 %   0.6
+ 942       S         8/370  =   2.2 %   0.6
+ 943       Q         7/370  =   1.9 %   0.4
+ 944       S        16/370  =   4.3 %   2.3
+ 945       S        20/370  =   5.4 %   3.3
+ 946       V         9/370  =   2.4 %   0.3
+ 947       T         8/370  =   2.2 %   0.5
+ 948       A         8/370  =   2.2 %   0.6
+ 949       G         1/370  =   0.3 %   0.0
+ 950       W         1/370  =   0.3 %   0.0
+ 951       E         7/370  =   1.9 %   0.5
+ 952       V         7/370  =   1.9 %   0.2
+ 953       G        14/370  =   3.8 %   2.0
+ 954       G        22/370  =   5.9 %   6.0
+ 955       T         7/370  =   1.9 %   5.0
+ 956       V         7/370  =   1.9 %   4.0
+ 957       Q         8/370  =   2.2 %   0.7
+ 958       S        22/370  =   5.9 %   3.7
+ 959       D        11/370  =   3.0 %   1.2
+ 960       G        23/370  =   6.2 %   6.0
+ 961       S        22/370  =   5.9 %   3.4
+ 962       G         8/370  =   2.2 %   4.7
+ 963       N        11/370  =   3.0 %   1.0
+ 964       H        13/370  =   3.5 %   2.1
+ 965       S        10/370  =   2.7 %   0.8
+ 966       A         8/370  =   2.2 %   0.3
+ 967       G        24/370  =   6.5 %   6.0
+ 968       S        15/370  =   4.1 %   1.3
+ 969       S        10/370  =   2.7 %   0.4
+ 970       D         9/370  =   2.4 %   0.9
+ 971       S        10/370  =   2.7 %   0.5
+ 972       H         7/370  =   1.9 %   0.4
+ 973       G         8/370  =   2.2 %   0.4
+ 974       T        11/370  =   3.0 %   1.2
+ 975       G        21/370  =   5.7 %   4.3
+ 976       E        12/370  =   3.2 %   1.2
+ 977       R         8/370  =   2.2 %   0.2
+ 978       S         8/370  =   2.2 %   0.4
+ 979       S         7/370  =   1.9 %   0.2
+ 980       R        22/370  =   5.9 %   4.0
+ 981       D        15/370  =   4.1 %   2.0
+ 982       R         8/370  =   2.2 %   0.6
+ 983       R         8/370  =   2.2 %   0.4
+ 984       K         7/370  =   1.9 %   5.0
+ 985       I         8/370  =   2.2 %   0.2
+ 986       D        14/370  =   3.8 %   1.6
+ 987       Q         8/370  =   2.2 %   0.2
+ 988       Q        13/370  =   3.5 %   1.4
+ 989       A         8/370  =   2.2 %   0.3
+ 990       H         7/370  =   1.9 %   0.1
+ 991       L        16/370  =   4.3 %   2.0
+ 992       Q        20/370  =   5.4 %   3.3
+ 993       S         9/370  =   2.4 %   1.1
+ 994       L        10/370  =   2.7 %   1.6
+ 995       L        15/370  =   4.1 %   1.9
+ 996       P         8/370  =   2.2 %   0.4
+ 997       R        23/370  =   6.2 %   4.5
+ 998       T        14/370  =   3.8 %   1.6
+ 999       D        23/370  =   6.2 %   6.0
+1000       L        23/370  =   6.2 %   4.0
+1001       D        23/370  =   6.2 %   6.0
+1002       P        23/370  =   6.2 %   6.4
+1003       R        23/370  =   6.2 %   4.3
+1004       V        23/370  =   6.2 %   3.5
+1005       L        23/370  =   6.2 %   1.1
+1006       S        40/370  =  10.8 %   3.5
+1007       N        23/370  =   6.2 %   1.7
+1008       D        22/370  =   5.9 %   1.2
+1009       G        45/370  =  12.2 %   5.7
+1010       W        46/370  =  12.4 %  11.0
+1011       G        46/370  =  12.4 %   6.0
+1012       Q        23/370  =   6.2 %   0.8
+1013       T        24/370  =   6.5 %   1.1
+1014       H        17/370  =   4.6 %   0.8
+1015       V        30/370  =   8.1 %   2.4
+1016       N        21/370  =   5.7 %   1.2
+1017       Q        46/370  =  12.4 %   5.0
+1018       D        30/370  =   8.1 %   2.7
+1019       T        45/370  =  12.2 %   4.8
+1020       N        16/370  =   4.3 %   0.3
+1021       W        46/370  =  12.4 %  11.0
+1022       E        23/370  =   6.2 %   1.8
+1023       V        24/370  =   6.5 %   1.3
+1024       P        22/370  =   5.9 %   1.3
+1025       E        14/370  =   3.8 %   0.4
+1026       S        36/370  =   9.7 %   2.2
+1027       P        43/370  =  11.6 %   6.3
+1028       E        23/370  =   6.2 %   1.3
+1029       P        29/370  =   7.8 %   2.7
+1030       E        21/370  =   5.7 %   0.9
+1031       N        14/370  =   3.8 %   0.6
+1032       P         1/370  =   0.3 %   0.0
+1033       E         1/370  =   0.3 %   0.0
+1034       P         1/370  =   0.3 %   0.0
+1035       K        40/370  =  10.8 %   4.0
+1036       D        14/370  =   3.8 %   0.5
+1037       D        26/370  =   7.0 %   1.6
+1038       N        15/370  =   4.1 %   0.6
+1039       G         1/370  =   0.3 %   0.0
+1040       G        35/370  =   9.5 %   3.7
+1041       G         1/370  =   0.3 %   0.0
+1042       G         1/370  =   0.3 %   0.0
+1043       N         1/370  =   0.3 %   0.0
+1044       G         1/370  =   0.3 %   0.0
+1045       G         1/370  =   0.3 %   0.0
+1046       P         1/370  =   0.3 %   0.0
+1047       G         2/370  =   0.5 %   2.0
+1048       T        22/370  =   5.9 %   1.1
+1049       E        22/370  =   5.9 %   1.0
+1050       A        15/370  =   4.1 %   0.3
+1051       A         1/370  =   0.3 %   0.0
+1052       S         1/370  =   0.3 %   0.0
+1053       G         1/370  =   0.3 %   0.0
+1054       G         1/370  =   0.3 %   0.0
+1055       G         1/370  =   0.3 %   0.0
+1056       N         1/370  =   0.3 %   0.0
+1057       G         1/370  =   0.3 %   0.0
+1058       W        35/370  =   9.5 %   5.8
+1059       G        19/370  =   5.1 %   0.5
+1060       S        19/370  =   5.1 %   1.5
+1061       A         9/370  =   2.4 %   0.3
+1062       A        25/370  =   6.8 %   3.0
+1063       T        22/370  =   5.9 %   2.9
+1064       G         1/370  =   0.3 %   0.0
+1065       W         1/370  =   0.3 %   0.0
+1066       K         1/370  =   0.3 %   0.0
+1067       P         1/370  =   0.3 %   0.0
+1068       Q        20/370  =   5.4 %   0.7
+1069       T        15/370  =   4.1 %   0.5
+1070       M         3/370  =   0.8 %   5.0
+1071       W         3/370  =   0.8 %  11.0
+1072       K         3/370  =   0.8 %   5.0
+1073       I        13/370  =   3.5 %   0.1
+1074       N        41/370  =  11.1 %   4.9
+1075       S        21/370  =   5.7 %   1.1
+1076       G        42/370  =  11.4 %   5.2
+1077       T        23/370  =   6.2 %   0.9
+1078       D        14/370  =   3.8 %   0.2
+1079       L        19/370  =   5.1 %   0.3
+1080       W        21/370  =   5.7 %   1.4
+1081       E        21/370  =   5.7 %   0.9
+1082       S        20/370  =   5.4 %   0.8
+1083       N        23/370  =   6.2 %   1.4
+1084       L        22/370  =   5.9 %   0.6
+1085       N         7/370  =   1.9 %   2.3
+1086       N         4/370  =   1.1 %   6.0
+1087       G         3/370  =   0.8 %   6.0
+1088       G         3/370  =   0.8 %   6.0
+1089       Q         3/370  =   0.8 %   2.0
+1090       N         6/370  =   1.6 %   0.6
+1091       R        17/370  =   4.6 %   0.4
+1092       N        37/370  =  10.0 %   3.8
+1093       D         7/370  =   1.9 %   1.3
+1094       G         5/370  =   1.4 %   6.0
+1095       Q         5/370  =   1.4 %   5.0
+1096       P         5/370  =   1.4 %   7.0
+1097       P         4/370  =   1.1 %   4.0
+1098       T        13/370  =   3.5 %   1.6
+1099       Q        16/370  =   4.3 %   0.4
+1100       Q        13/370  =   3.5 %   0.3
+1101       V        22/370  =   5.9 %   0.5
+1102       P         8/370  =   2.2 %   4.0
+1103       G         1/370  =   0.3 %   0.0
+1104       K         9/370  =   2.4 %   3.8
+1105       S        21/370  =   5.7 %   1.1
+1106       G        23/370  =   6.2 %   1.5
+1107       W        30/370  =   8.1 %   4.5
+1108       V         5/370  =   1.4 %   1.9
+1109       S         5/370  =   1.4 %   2.8
+1110       S         4/370  =   1.1 %   1.9
+1111       P         6/370  =   1.6 %   4.7
+1112       P         6/370  =   1.6 %   4.7
+1113       G        25/370  =   6.8 %   1.6
+1114       A         9/370  =   2.4 %   0.3
+1115       P        16/370  =   4.3 %   0.4
+1116       P        17/370  =   4.6 %   0.7
+1117       A        13/370  =   3.5 %   0.2
+1118       S        18/370  =   4.9 %   0.7
+1119       T        19/370  =   5.1 %   0.8
+1120       L         9/370  =   2.4 %   4.0
+1121       G         9/370  =   2.4 %   6.0
+1122       G         9/370  =   2.4 %   6.0
+1123       S         9/370  =   2.4 %   0.1
+1124       W        42/370  =  11.4 %   9.9
+1125       G        34/370  =   9.2 %   3.2
+1126       D        20/370  =   5.4 %   1.2
+1127       D         9/370  =   2.4 %   1.1
+1128       D         9/370  =   2.4 %   2.0
+1129       N         1/370  =   0.3 %   0.0
+1130       G         1/370  =   0.3 %   0.0
+1131       N         1/370  =   0.3 %   0.0
+1132       V         1/370  =   0.3 %   0.0
+1133       V         1/370  =   0.3 %   0.0
+1134       P         1/370  =   0.3 %   0.0
+1135       A         1/370  =   0.3 %   0.0
+1136       N         6/370  =   1.6 %   4.0
+1137       D         9/370  =   2.4 %   1.5
+1138       G         9/370  =   2.4 %   0.9
+1139       S        15/370  =   4.1 %   0.4
+1140       K        14/370  =   3.8 %   0.4
+1141       N        17/370  =   4.6 %   1.0
+1142       S        13/370  =   3.5 %   0.3
+1143       N         6/370  =   1.6 %   2.7
+1144       V         1/370  =   0.3 %   0.0
+1145       C         7/370  =   1.9 %   5.0
+1146       G        11/370  =   3.0 %   1.4
+1147       G        32/370  =   8.6 %   3.1
+1148       G        16/370  =   4.3 %   0.2
+1149       W        44/370  =  11.9 %  11.0
+1150       G        19/370  =   5.1 %   0.7
+1151       D        21/370  =   5.7 %   1.3
+1152       G         1/370  =   0.3 %   0.0
+1153       S         1/370  =   0.3 %   0.0
+1154       G         1/370  =   0.3 %   0.0
+1155       Y         1/370  =   0.3 %   0.0
+1156       K         1/370  =   0.3 %   0.0
+1157       D        18/370  =   4.9 %   0.7
+1158       S        17/370  =   4.6 %   0.4
+1159       V         4/370  =   1.1 %   4.0
+1160       S        13/370  =   3.5 %   0.4
+1161       A         1/370  =   0.3 %   0.2
+1162       P         1/370  =   0.3 %   0.0
+1163       A         1/370  =   0.3 %   0.0
+1164       G         2/370  =   0.5 %   0.2
+1165       N        20/370  =   5.4 %   1.1
+1166       T         7/370  =   1.9 %   2.9
+1167       G         7/370  =   1.9 %   6.0
+1168       M         7/370  =   1.9 %   2.6
+1169       I         4/370  =   1.1 %   0.8
+1170       N        13/370  =   3.5 %   0.4
+1171       E         2/370  =   0.5 %   2.3
+1172       P         2/370  =   0.5 %   2.0
+1173       S        20/370  =   5.4 %   0.9
+1174       S        19/370  =   5.1 %   0.7
+1175       N        13/370  =   3.5 %   0.3
+1176       N         6/370  =   1.6 %   0.4
+1177       A        11/370  =   3.0 %   1.4
+1178       A         8/370  =   2.2 %   0.8
+1179       A         6/370  =   1.6 %   0.4
+1180       G         6/370  =   1.6 %   0.2
+1181       N         4/370  =   1.1 %   0.2
+1182       N         5/370  =   1.4 %   0.9
+1183       A         5/370  =   1.4 %   0.8
+1184       G         5/370  =   1.4 %   0.8
+1185       G         5/370  =   1.4 %   0.7
+1186       N         4/370  =   1.1 %   0.1
+1187       G         3/370  =   0.8 %   0.0
+1188       A         1/370  =   0.3 %   0.2
+1189       A         2/370  =   0.5 %   1.0
+1190       A         2/370  =   0.5 %   0.8
+1191       A         2/370  =   0.5 %   1.0
+1192       G         1/370  =   0.3 %   0.0
+1193       A         1/370  =   0.3 %   0.2
+1194       G         2/370  =   0.5 %   1.3
+1195       A         1/370  =   0.3 %   0.0
+1196       Q         1/370  =   0.3 %   0.0
+1197       A         2/370  =   0.5 %   4.0
+1198       A         1/370  =   0.3 %   0.0
+1199       I         1/370  =   0.3 %   0.0
+1200       A         1/370  =   0.3 %   0.0
+1201       G         2/370  =   0.5 %   6.0
+1202       V         1/370  =   0.3 %   0.0
+1203       N         1/370  =   0.3 %   0.0
+1204       P         1/370  =   0.3 %   0.0
+1205       S         1/370  =   0.3 %   0.0
+1206       G         1/370  =   0.3 %   0.0
+1207       V         1/370  =   0.3 %   0.0
+1208       N         1/370  =   0.3 %   0.0
+1209       V         1/370  =   0.3 %   0.0
+1210       G         2/370  =   0.5 %   6.0
+1211       I         1/370  =   0.3 %   0.0
+1212       G         1/370  =   0.3 %   0.0
+1213       G         1/370  =   0.3 %   0.0
+1214       S         1/370  =   0.3 %   0.0
+1215       G         1/370  =   0.3 %   0.0
+1216       G         3/370  =   0.8 %   6.0
+1217       A         1/370  =   0.3 %   0.0
+1218       G         1/370  =   0.3 %   0.0
+1219       G         2/370  =   0.5 %   1.0
+1220       G         2/370  =   0.5 %   2.0
+1221       G         2/370  =   0.5 %   0.0
+1222       P         2/370  =   0.5 %   0.5
+1223       Q         2/370  =   0.5 %   0.3
+1224       G         2/370  =   0.5 %   0.4
+1225       G         7/370  =   1.9 %   2.2
+1226       P         5/370  =   1.4 %   1.1
+1227       G         6/370  =   1.6 %   1.5
+1228       G         5/370  =   1.4 %   0.7
+1229       V         7/370  =   1.9 %   1.3
+1230       V         6/370  =   1.6 %   0.5
+1231       S         5/370  =   1.4 %   0.7
+1232       K         6/370  =   1.6 %   0.5
+1233       S         8/370  =   2.2 %   0.9
+1234       G        13/370  =   3.5 %   3.2
+1235       P         7/370  =   1.9 %   0.6
+1236       A         6/370  =   1.6 %   0.3
+1237       W        43/370  =  11.6 %   9.0
+1238       G        24/370  =   6.5 %   1.4
+1239       G        29/370  =   7.8 %   2.2
+1240       A         1/370  =   0.3 %   0.0
+1241       A         1/370  =   0.3 %   0.0
+1242       G         1/370  =   0.3 %   0.0
+1243       G        22/370  =   5.9 %   1.1
+1244       V        12/370  =   3.2 %   0.1
+1245       A         1/370  =   0.3 %   0.0
+1246       V         1/370  =   0.3 %   0.0
+1247       G         1/370  =   0.3 %   0.0
+1248       A         1/370  =   0.3 %   0.0
+1249       G         2/370  =   0.5 %   0.5
+1250       P        11/370  =   3.0 %   0.1
+1251       D        13/370  =   3.5 %   0.4
+1252       E        13/370  =   3.5 %   0.2
+1253       G         1/370  =   0.3 %   0.0
+1254       V         1/370  =   0.3 %   0.0
+1255       K         8/370  =   2.2 %   0.1
+1256       P         1/370  =   0.3 %   0.0
+1257       G         1/370  =   0.3 %   0.0
+1258       G         1/370  =   0.3 %   0.0
+1259       V         1/370  =   0.3 %   0.0
+1260       L         9/370  =   2.4 %   0.1
+1261       P        11/370  =   3.0 %   0.3
+1262       S        20/370  =   5.4 %   0.7
+1263       T        20/370  =   5.4 %   0.9
+1264       W        26/370  =   7.0 %   3.1
+1265       N        23/370  =   6.2 %   1.5
+1266       E        13/370  =   3.5 %   0.4
+1267       I         1/370  =   0.3 %   0.0
+1268       P         6/370  =   1.6 %   2.6
+1269       N        14/370  =   3.8 %   0.5
+1270       Q        11/370  =   3.0 %   0.2
+1271       S        17/370  =   4.6 %   0.4
+1272       N         1/370  =   0.3 %   0.0
+1273       G         2/370  =   0.5 %   0.7
+1274       K        16/370  =   4.3 %   0.4
+1275       D         9/370  =   2.4 %   0.0
+1276       Q        24/370  =   6.5 %   1.0
+1277       G        33/370  =   8.9 %   2.6
+1278       W        32/370  =   8.6 %   4.2
+1279       G        31/370  =   8.4 %   2.3
+1280       G        18/370  =   4.9 %   0.6
+1281       G        28/370  =   7.6 %   1.7
+1282       Q        15/370  =   4.1 %   0.3
+1283       P         1/370  =   0.3 %   0.0
+1284       G         3/370  =   0.8 %   0.9
+1285       K        10/370  =   2.7 %   0.2
+1286       G        16/370  =   4.3 %   0.4
+1287       N        20/370  =   5.4 %   1.2
+1288       Q        17/370  =   4.6 %   0.5
+1289       G        27/370  =   7.3 %   1.8
+1290       W        29/370  =   7.8 %   3.3
+1291       S        29/370  =   7.8 %   1.5
+1292       G         1/370  =   0.3 %   0.0
+1293       P         1/370  =   0.3 %   0.0
+1294       S         5/370  =   1.4 %   0.0
+1295       S        17/370  =   4.6 %   0.7
+1296       G         1/370  =   0.3 %   0.0
+1297       G        23/370  =   6.2 %   1.1
+1298       A         3/370  =   0.8 %   0.7
+1299       A         1/370  =   0.3 %   0.0
+1300       A         2/370  =   0.5 %   0.4
+1301       A         1/370  =   0.3 %   0.0
+1302       G         1/370  =   0.3 %   0.0
+1303       T         1/370  =   0.3 %   0.0
+1304       V         1/370  =   0.3 %   0.0
+1305       G         1/370  =   0.3 %   0.0
+1306       G         1/370  =   0.3 %   0.0
+1307       A         1/370  =   0.3 %   0.0
+1308       G         1/370  =   0.3 %   0.0
+1309       G         1/370  =   0.3 %   0.0
+1310       S         1/370  =   0.3 %   0.0
+1311       N         1/370  =   0.3 %   0.0
+1312       A         2/370  =   0.5 %   0.2
+1313       G         2/370  =   0.5 %   0.0
+1314       K         3/370  =   0.8 %   0.8
+1315       K         3/370  =   0.8 %   0.7
+1316       G        20/370  =   5.4 %   0.8
+1317       N        23/370  =   6.2 %   1.3
+1318       G        21/370  =   5.7 %   0.9
+1319       W        45/370  =  12.2 %   9.5
+1320       G        39/370  =  10.5 %   3.9
+1321       E        19/370  =   5.1 %   0.9
+1322       P        14/370  =   3.8 %   0.3
+1323       S        15/370  =   4.1 %   0.2
+1324       S         6/370  =   1.6 %   2.9
+1325       V         6/370  =   1.6 %   2.4
+1326       L         6/370  =   1.6 %   4.0
+1327       G         6/370  =   1.6 %   6.0
+1328       H         6/370  =   1.6 %   5.3
+1329       L         6/370  =   1.6 %   2.3
+1330       G         7/370  =   1.9 %   6.0
+1331       D        17/370  =   4.6 %   0.7
+1332       S         7/370  =   1.9 %   1.0
+1333       N         9/370  =   2.4 %   3.1
+1334       H         9/370  =   2.4 %   3.9
+1335       W         9/370  =   2.4 %  11.0
+1336       G        10/370  =   2.7 %   3.8
+1337       E         9/370  =   2.4 %   1.9
+1338       A        10/370  =   2.7 %   1.5
+1339       G        15/370  =   4.1 %   0.2
+1340       K        16/370  =   4.3 %   0.5
+1341       K        25/370  =   6.8 %   1.1
+1342       N        15/370  =   4.1 %   0.4
+1343       A         1/370  =   0.3 %   0.0
+1344       G        10/370  =   2.7 %   3.3
+1345       S        21/370  =   5.7 %   0.8
+1346       G        23/370  =   6.2 %   1.4
+1347       G        22/370  =   5.9 %   1.4
+1348       G        16/370  =   4.3 %   0.4
+1349       G         2/370  =   0.5 %   6.0
+1350       G         1/370  =   0.3 %   0.0
+1351       P         5/370  =   1.4 %   4.5
+1352       S        19/370  =   5.1 %   0.6
+1353       D        29/370  =   7.8 %   2.0
+1354       V         1/370  =   0.3 %   0.0
+1355       I        11/370  =   3.0 %   3.6
+1356       S        12/370  =   3.2 %   0.1
+1357       N        20/370  =   5.4 %   1.1
+1358       V         4/370  =   1.1 %   4.0
+1359       D         4/370  =   1.1 %   6.0
+1360       H         2/370  =   0.5 %   0.7
+1361       R         4/370  =   1.1 %   5.0
+1362       R        16/370  =   4.3 %   0.3
+1363       D         2/370  =   0.5 %   6.0
+1364       P         2/370  =   0.5 %   7.0
+1365       R         2/370  =   0.5 %   5.0
+1366       E         2/370  =   0.5 %   5.0
+1367       S        17/370  =   4.6 %   0.5
+1368       V        13/370  =   3.5 %   0.2
+1369       S        26/370  =   7.0 %   1.1
+1370       G        38/370  =  10.3 %   3.5
+1371       C         1/370  =   0.3 %   0.0
+1372       W        28/370  =   7.6 %   3.2
+1373       N        22/370  =   5.9 %   1.2
+1374       E        17/370  =   4.6 %   0.6
+1375       G        11/370  =   3.0 %   0.0
+1376       G        28/370  =   7.6 %   1.7
+1377       A        11/370  =   3.0 %   0.2
+1378       T        20/370  =   5.4 %   0.8
+1379       S        20/370  =   5.4 %   0.7
+1380       S        16/370  =   4.3 %   0.4
+1381       N         1/370  =   0.3 %   0.0
+1382       A         1/370  =   0.3 %   0.5
+1383       P         1/370  =   0.3 %   0.0
+1384       P         1/370  =   0.3 %   0.0
+1385       P         1/370  =   0.3 %   0.0
+1386       P         1/370  =   0.3 %   0.0
+1387       P         1/370  =   0.3 %   0.0
+1388       H         1/370  =   0.3 %   0.0
+1389       G         1/370  =   0.3 %   0.0
+1390       R         1/370  =   0.3 %   0.0
+1391       D        11/370  =   3.0 %   0.1
+1392       T        20/370  =   5.4 %   0.6
+1393       W        24/370  =   6.5 %   2.2
+1394       D        12/370  =   3.2 %   3.4
+1395       G        25/370  =   6.8 %   1.0
+1396       N        19/370  =   5.1 %   0.9
+1397       I         1/370  =   0.3 %   0.0
+1398       M        16/370  =   4.3 %   0.3
+1399       I        24/370  =   6.5 %   0.5
+1400       N        25/370  =   6.8 %   1.7
+1401       N         1/370  =   0.3 %   0.0
+1402       T         1/370  =   0.3 %   0.0
+1403       P         1/370  =   0.3 %   0.0
+1404       D         2/370  =   0.5 %   6.0
+1405       Q         1/370  =   0.3 %   0.2
+1406       P        24/370  =   6.5 %   1.4
+1407       R        16/370  =   4.3 %   0.6
+1408       D        14/370  =   3.8 %   0.2
+1409       P        15/370  =   4.1 %   0.7
+1410       I        17/370  =   4.6 %   0.0
+1411       R        17/370  =   4.6 %   0.4
+1412       G        30/370  =   8.1 %   1.9
+1413       R         1/370  =   0.3 %   0.0
+1414       G        21/370  =   5.7 %   0.9
+1415       W        25/370  =   6.8 %   1.7
+1416       R        17/370  =   4.6 %   5.0
+1417       G        27/370  =   7.3 %   1.3
+1418       E        19/370  =   5.1 %   0.4
+1419       R         1/370  =   0.3 %   0.0
+1420       S        36/370  =   9.7 %   2.1
+1421       G        17/370  =   4.6 %   0.3
+1422       R        28/370  =   7.6 %   1.9
+1423       L        17/370  =   4.6 %   0.7
+1424       N        15/370  =   4.1 %   3.6
+1425       R         1/370  =   0.3 %   0.0
+1426       D         1/370  =   0.3 %   0.0
+1427       I         1/370  =   0.3 %   0.0
+1428       R         1/370  =   0.3 %   0.0
+1429       M         1/370  =   0.3 %   0.0
+1430       I         2/370  =   0.5 %   4.0
+1431       A         1/370  =   0.3 %   0.2
+1432       G        16/370  =   4.3 %   1.7
+1433       T        14/370  =   3.8 %   1.2
+1434       S        31/370  =   8.4 %   2.3
+1435       E        19/370  =   5.1 %   1.2
+1436       M        15/370  =   4.1 %   0.4
+1437       W        32/370  =   8.6 %   6.5
+1438       G        32/370  =   8.6 %   3.6
+1439       D        16/370  =   4.3 %   0.9
+1440       P        23/370  =   6.2 %   1.1
+1441       P        25/370  =   6.8 %   1.3
+1442       Q        15/370  =   4.1 %   0.4
+1443       C         5/370  =   1.4 %   1.4
+1444       S         2/370  =   0.5 %   4.0
+1445       G         2/370  =   0.5 %   6.0
+1446       R         2/370  =   0.5 %   5.0
+1447       L         2/370  =   0.5 %   4.0
+1448       N         2/370  =   0.5 %   6.0
+1449       N         9/370  =   2.4 %   3.9
+1450       Q        22/370  =   5.9 %   0.6
+1451       S        26/370  =   7.0 %   1.1
+1452       H        17/370  =   4.6 %   0.7
+1453       G         9/370  =   2.4 %   0.4
+1454       W        29/370  =   7.8 %   6.9
+1455       N        28/370  =   7.6 %   1.6
+1456       Q        16/370  =   4.3 %   0.7
+1457       Q         7/370  =   1.9 %   0.0
+1458       Q        15/370  =   4.1 %   0.8
+1459       N        12/370  =   3.2 %   0.8
+1460       I        12/370  =   3.2 %   0.1
+1461       N        14/370  =   3.8 %   0.6
+1462       H         1/370  =   0.3 %   0.0
+1463       K        23/370  =   6.2 %   1.6
+1464       M        16/370  =   4.3 %   0.3
+1465       V        24/370  =   6.5 %   0.7
+1466       L         1/370  =   0.3 %   0.0
+1467       S         1/370  =   0.3 %   0.0
+1468       G        16/370  =   4.3 %   0.4
+1469       Q        17/370  =   4.6 %   0.5
+1470       P        18/370  =   4.9 %   0.6
+1471       V        13/370  =   3.5 %   0.0
+1472       W         9/370  =   2.4 %   6.8
+1473       N        11/370  =   3.0 %   0.1
+1474       P        18/370  =   4.9 %   0.6
+1475       Q        24/370  =   6.5 %   0.8
+1476       G        10/370  =   2.7 %   0.0
+1477       A         1/370  =   0.3 %   0.5
+1478       I         1/370  =   0.3 %   0.0
+1479       G         1/370  =   0.3 %   0.0
+1480       S         2/370  =   0.5 %   0.2
+1481       D         9/370  =   2.4 %   0.2
+1482       N        16/370  =   4.3 %   0.3
+1483       V        21/370  =   5.7 %   0.6
+1484       G        25/370  =   6.8 %   1.4
+1485       S        22/370  =   5.9 %   0.9
+1486       A         1/370  =   0.3 %   0.5
+1487       S         1/370  =   0.3 %   0.0
+1488       W        27/370  =   7.3 %   2.3
+1489       G         3/370  =   0.8 %   2.5
+1490       P         2/370  =   0.5 %   0.2
+1491       G        43/370  =  11.6 %   4.1
+1492       I        22/370  =   5.9 %   0.0
+1493       P        21/370  =   5.7 %   0.6
+1494       P        33/370  =   8.9 %   3.8
+1495       G         9/370  =   2.4 %   0.2
+1496       G         4/370  =   1.1 %   6.0
+1497       G        15/370  =   4.1 %   0.7
+1498       P        13/370  =   3.5 %   0.5
+1499       G        11/370  =   3.0 %   0.4
+1500       A        17/370  =   4.6 %   0.6
+1501       T        14/370  =   3.8 %   0.4
+1502       V        20/370  =   5.4 %   0.1
+1503       K        15/370  =   4.1 %   0.3
+1504       P        21/370  =   5.7 %   0.7
+1505       P        10/370  =   2.7 %   0.0
+1506       G        28/370  =   7.6 %   1.4
+1507       T        16/370  =   4.3 %   0.4
+1508       G        24/370  =   6.5 %   0.9
+1509       W        34/370  =   9.2 %   4.2
+1510       L        10/370  =   2.7 %   0.0
+1511       G        28/370  =   7.6 %   1.7
+1512       I         1/370  =   0.3 %   0.0
+1513       G        33/370  =   8.9 %   2.1
+1514       P        33/370  =   8.9 %   2.6
+1515       Q        16/370  =   4.3 %   0.0
+1516       V         1/370  =   0.3 %   0.0
+1517       G         1/370  =   0.3 %   0.0
+1518       G         2/370  =   0.5 %   6.0
+1519       P        35/370  =   9.5 %   2.9
+1520       V        19/370  =   5.1 %   0.5
+1521       P        11/370  =   3.0 %   0.1
+1522       G         1/370  =   0.3 %   0.0
+1523       G         7/370  =   1.9 %   4.2
+1524       P        19/370  =   5.1 %   0.5
+1525       G         9/370  =   2.4 %   3.6
+1526       V         4/370  =   1.1 %   0.2
+1527       T         2/370  =   0.5 %   0.2
+1528       Q         3/370  =   0.8 %   0.9
+1529       T         3/370  =   0.8 %   1.1
+1530       V         4/370  =   1.1 %   2.0
+1531       A         1/370  =   0.3 %   0.0
+1532       Q         1/370  =   0.3 %   0.0
+1533       G         2/370  =   0.5 %   0.0
+1534       V         3/370  =   0.8 %   0.3
+1535       G         3/370  =   0.8 %   0.9
+1536       S         6/370  =   1.6 %   1.6
+1537       G         7/370  =   1.9 %   1.9
+1538       P         5/370  =   1.4 %   0.8
+1539       K        35/370  =   9.5 %   2.4
+1540       D        27/370  =   7.3 %   1.9
+1541       E        16/370  =   4.3 %   0.3
+1542       S        11/370  =   3.0 %   4.0
+1543       K        11/370  =   3.0 %   1.7
+1544       E        25/370  =   6.8 %   1.3
+1545       P        26/370  =   7.0 %   1.2
+1546       T        23/370  =   6.2 %   1.2
+1547       G        50/370  =  13.5 %   5.8
+1548       W        52/370  =  14.1 %  11.0
+1549       E        45/370  =  12.2 %   4.0
+1550       E        46/370  =  12.4 %   4.2
+1551       P        46/370  =  12.4 %   5.6
+1552       S        50/370  =  13.5 %   3.7
+1553       A         1/370  =   0.3 %   0.0
+1554       G         1/370  =   0.3 %   0.0
+1555       G         1/370  =   0.3 %   0.0
+1556       G         1/370  =   0.3 %   0.0
+1557       P        49/370  =  13.2 %   6.4
+1558       P        29/370  =   7.8 %   2.0
+1559       V         1/370  =   0.3 %   0.0
+1560       V         1/370  =   0.3 %   0.0
+1561       G         1/370  =   0.3 %   0.0
+1562       S        25/370  =   6.8 %   0.8
+1563       I        25/370  =   6.8 %   0.6
+1564       R        40/370  =  10.8 %   2.9
+1565       R        49/370  =  13.2 %   4.6
+1566       K        24/370  =   6.5 %   1.2
+1567       M        29/370  =   7.8 %   1.8
+1568       V         1/370  =   0.3 %   0.0
+1569       P        16/370  =   4.3 %   4.8
+1570       N        22/370  =   5.9 %   1.1
+1571       I        28/370  =   7.6 %   1.1
+1572       D        54/370  =  14.6 %   6.0
+1573       D        51/370  =  13.8 %   5.4
+1574       G        52/370  =  14.1 %   5.7
+1575       T        50/370  =  13.5 %   4.4
+1576       S        46/370  =  12.4 %   3.0
+1577       G         1/370  =   0.3 %   0.0
+1578       A        28/370  =   7.6 %   0.8
+1579       W        53/370  =  14.3 %  10.5
+1580       A         1/370  =   0.3 %   0.0
+1581       Q         1/370  =   0.3 %   0.0
+1582       G        54/370  =  14.6 %   6.0
+1583       D        28/370  =   7.6 %   1.5
+1584       G         2/370  =   0.5 %   2.0
+1585       N         1/370  =   0.3 %   0.0
+1586       A         1/370  =   0.3 %   0.0
+1587       V         1/370  =   0.3 %   0.0
+1588       G         1/370  =   0.3 %   0.0
+1589       A         1/370  =   0.3 %   0.0
+1590       G         1/370  =   0.3 %   0.0
+1591       A         1/370  =   0.3 %   0.0
+1592       P        34/370  =   9.2 %   2.4
+1593       S        22/370  =   5.9 %   0.8
+1594       R        20/370  =   5.4 %   0.6
+1595       G         1/370  =   0.3 %   0.0
+1596       Y        25/370  =   6.8 %   1.2
+1597       R         1/370  =   0.3 %   0.0
+1598       N        33/370  =   8.9 %   1.9
+1599       Y        19/370  =   5.1 %   0.4
+1600       K        27/370  =   7.3 %   1.1
+1601       G         1/370  =   0.3 %   0.0
+1602       G         1/370  =   0.3 %   0.0
+1603       G         1/370  =   0.3 %   0.0
+1604       N        25/370  =   6.8 %   1.3
+1605       G         1/370  =   0.3 %   0.0
+1606       G         1/370  =   0.3 %   0.0
+1607       V        32/370  =   8.6 %   1.0
+1608       N        27/370  =   7.3 %   1.7
+1609       M        17/370  =   4.6 %   0.6
+1610       W        35/370  =   9.5 %   4.0
+1611       D        34/370  =   9.2 %   2.4
+1612       K        23/370  =   6.2 %   0.8
+1613       P         1/370  =   0.3 %   0.0
+1614       N        30/370  =   8.1 %   1.8
+1615       S        16/370  =   4.3 %   0.2
+1616       P        19/370  =   5.1 %   0.6
+1617       G        13/370  =   3.5 %   0.0
+1618       S         2/370  =   0.5 %   0.3
+1619       R         1/370  =   0.3 %   0.0
+1620       N         1/370  =   0.3 %   0.1
+1621       S         2/370  =   0.5 %   0.7
+1622       Q         1/370  =   0.3 %   0.0
+1623       I         1/370  =   0.3 %   0.5
+1624       R         1/370  =   0.3 %   0.0
+1625       G         3/370  =   0.8 %   6.0
+1626       Q         1/370  =   0.3 %   0.0
+1627       N         1/370  =   0.3 %   0.0
+1628       A         1/370  =   0.3 %   0.0
+1629       G         1/370  =   0.3 %   0.0
+1630       G         1/370  =   0.3 %   0.0
+1631       G         1/370  =   0.3 %   0.0
+1632       I         1/370  =   0.3 %   0.0
+1633       G         1/370  =   0.3 %   0.0
+1634       H         1/370  =   0.3 %   0.0
+1635       A         1/370  =   0.3 %   0.0
+1636       G         2/370  =   0.5 %   1.3
+1637       N         1/370  =   0.3 %   0.0
+1638       G         2/370  =   0.5 %   1.3
+1639       P         1/370  =   0.3 %   0.0
+1640       A         2/370  =   0.5 %   1.3
+1641       N         1/370  =   0.3 %   0.2
+1642       T         2/370  =   0.5 %   2.0
+1643       N         1/370  =   0.3 %   0.3
+1644       Q         1/370  =   0.3 %   0.0
+1645       A         1/370  =   0.3 %   0.0
+1646       L         1/370  =   0.3 %   0.0
+1647       Q         1/370  =   0.3 %   0.0
+1648       G        28/370  =   7.6 %   1.0
+1649       R        13/370  =   3.5 %   0.1
+1650       N         1/370  =   0.3 %   0.0
+1651       S        29/370  =   7.8 %   1.2
+1652       P        12/370  =   3.2 %   0.1
+1653       L         1/370  =   0.3 %   0.0
+1654       Q         1/370  =   0.3 %   0.0
+1655       N         1/370  =   0.3 %   0.0
+1656       T         1/370  =   0.3 %   0.0
+1657       L         6/370  =   1.6 %   0.8
+1658       R        10/370  =   2.7 %   0.1
+1659       E        11/370  =   3.0 %   0.1
+1660       G         1/370  =   0.3 %   0.0
+1661       P        16/370  =   4.3 %   0.3
+1662       Q        17/370  =   4.6 %   0.5
+1663       G         1/370  =   0.3 %   0.0
+1664       G         2/370  =   0.5 %   6.0
+1665       G         1/370  =   0.3 %   0.0
+1666       G        14/370  =   3.8 %   0.1
+1667       P        28/370  =   7.6 %   1.4
+1668       T        21/370  =   5.7 %   0.7
+1669       P        15/370  =   4.1 %   0.2
+1670       T         2/370  =   0.5 %   5.0
+1671       M        13/370  =   3.5 %   0.1
+1672       L        11/370  =   3.0 %   0.2
+1673       G        11/370  =   3.0 %   0.0
+1674       I         8/370  =   2.2 %   0.0
+1675       G         7/370  =   1.9 %   0.2
+1676       G         3/370  =   0.8 %   0.0
+1677       I         3/370  =   0.8 %   0.0
+1678       V         4/370  =   1.1 %   0.0
+1679       P         2/370  =   0.5 %   0.1
+1680       G         2/370  =   0.5 %   0.0
+1681       A         1/370  =   0.3 %   0.0
+1682       S         1/370  =   0.3 %   0.0
+1683       N         1/370  =   0.3 %   0.0
+1684       V         1/370  =   0.3 %   0.0
+1685       P         1/370  =   0.3 %   0.0
+1686       V         1/370  =   0.3 %   0.0
+1687       G         1/370  =   0.3 %   0.0
+1688       A         1/370  =   0.3 %   0.0
+1689       N         1/370  =   0.3 %   0.0
+1690       P         1/370  =   0.3 %   0.0
+1691       N         1/370  =   0.3 %   0.0
+1692       N         1/370  =   0.3 %   0.0
+1693       P         1/370  =   0.3 %   0.0
+1694       N         1/370  =   0.3 %   0.0
+1695       G         1/370  =   0.3 %   0.0
+1696       G         3/370  =   0.8 %   1.8
+1697       S         3/370  =   0.8 %   0.5
+1698       G         3/370  =   0.8 %   0.1
+1699       V         3/370  =   0.8 %   0.0
+1700       G         3/370  =   0.8 %   0.2
+1701       P         3/370  =   0.8 %   0.0
+1702       A         9/370  =   2.4 %   0.2
+1703       S        10/370  =   2.7 %   0.5
+1704       A         9/370  =   2.4 %   0.2
+1705       V        11/370  =   3.0 %   0.5
+1706       T        18/370  =   4.9 %   0.2
+1707       S        25/370  =   6.8 %   0.9
+1708       K        26/370  =   7.0 %   0.9
+1709       L         1/370  =   0.3 %   0.0
+1710       S        21/370  =   5.7 %   0.6
+1711       A        16/370  =   4.3 %   0.2
+1712       S        25/370  =   6.8 %   0.9
+1713       S        16/370  =   4.3 %   0.2
+1714       G         7/370  =   1.9 %   4.4
+1715       S         8/370  =   2.2 %   4.0
+1716       G         8/370  =   2.2 %   6.0
+1717       W         8/370  =   2.2 %  11.0
+1718       G         8/370  =   2.2 %   6.0
+1719       E         8/370  =   2.2 %   5.0
+1720       P         8/370  =   2.2 %   7.0
+1721       W        26/370  =   7.0 %   2.0
+1722       G        26/370  =   7.0 %   1.2
+1723       A         1/370  =   0.3 %   0.0
+1724       P         1/370  =   0.3 %   0.0
+1725       G         1/370  =   0.3 %   0.0
+1726       P         2/370  =   0.5 %   7.0
+1727       N         1/370  =   0.3 %   0.0
+1728       K         1/370  =   0.3 %   0.0
+1729       L         1/370  =   0.3 %   0.0
+1730       P         1/370  =   0.3 %   0.0
+1731       G         1/370  =   0.3 %   0.0
+1732       A         1/370  =   0.3 %   0.0
+1733       S         1/370  =   0.3 %   0.0
+1734       R         1/370  =   0.3 %   0.0
+1735       D         1/370  =   0.3 %   0.0
+1736       S         2/370  =   0.5 %   4.0
+1737       E        15/370  =   4.1 %   0.3
+1738       D         2/370  =   0.5 %   0.0
+1739       G         1/370  =   0.3 %   0.0
+1740       P         1/370  =   0.3 %   0.0
+1741       G         1/370  =   0.3 %   0.0
+1742       P        21/370  =   5.7 %   2.9
+1743       S        26/370  =   7.0 %   0.9
+1744       T        23/370  =   6.2 %   0.8
+1745       P        45/370  =  12.2 %   4.2
+1746       S         1/370  =   0.3 %   0.0
+1747       L         1/370  =   0.3 %   0.0
+1748       N         1/370  =   0.3 %   0.0
+1749       T         1/370  =   0.3 %   0.0
+1750       R         1/370  =   0.3 %   0.0
+1751       P        21/370  =   5.7 %   0.4
+1752       T        17/370  =   4.6 %   0.4
+1753       G         3/370  =   0.8 %   3.0
+1754       G         1/370  =   0.3 %   0.0
+1755       T         8/370  =   2.2 %   0.6
+1756       V        22/370  =   5.9 %   0.0
+1757       D        28/370  =   7.6 %   0.9
+1758       N        27/370  =   7.3 %   0.9
+1759       L         1/370  =   0.3 %   0.0
+1760       F         1/370  =   0.3 %   0.5
+1761       G        48/370  =  13.0 %   4.0
+1762       T        32/370  =   8.6 %   1.3
+1763       S        22/370  =   5.9 %   0.6
+1764       A        32/370  =   8.6 %   1.1
+1765       R        10/370  =   2.7 %   2.0
+1766       I         5/370  =   1.4 %   0.5
+1767       P         4/370  =   1.1 %   0.3
+1768       N         3/370  =   0.8 %   3.2
+1769       T         2/370  =   0.5 %   0.7
+1770       P         2/370  =   0.5 %   0.3
+1771       G         1/370  =   0.3 %   0.0
+1772       G         1/370  =   0.3 %   0.0
+1773       P         1/370  =   0.3 %   0.0
+1774       S         1/370  =   0.3 %   0.0
+1775       G         1/370  =   0.3 %   0.0
+1776       V         1/370  =   0.3 %   0.0
+1777       G         1/370  =   0.3 %   0.0
+1778       V         1/370  =   0.3 %   0.0
+1779       A         1/370  =   0.3 %   0.0
+1780       G         2/370  =   0.5 %   0.2
+1781       G         2/370  =   0.5 %   0.2
+1782       S         6/370  =   1.6 %   1.3
+1783       V        12/370  =   3.2 %   3.2
+1784       G         8/370  =   2.2 %   1.5
+1785       G        11/370  =   3.0 %   2.5
+1786       W        27/370  =   7.3 %   1.8
+1787       G        33/370  =   8.9 %   1.9
+1788       K        16/370  =   4.3 %   0.4
+1789       P        34/370  =   9.2 %   2.1
+1790       H         5/370  =   1.4 %   0.3
+1791       L         2/370  =   0.5 %   4.0
+1792       G         1/370  =   0.3 %   0.0
+1793       G         5/370  =   1.4 %   2.4
+1794       K         6/370  =   1.6 %   0.5
+1795       P        19/370  =   5.1 %   0.3
+1796       D        24/370  =   6.5 %   1.0
+1797       S        25/370  =   6.8 %   0.8
+1798       G        26/370  =   7.0 %   1.1
+1799       P        16/370  =   4.3 %   0.3
+1800       G        20/370  =   5.4 %   0.3
+1801       P         1/370  =   0.3 %   0.0
+1802       M         1/370  =   0.3 %   0.0
+1803       D         1/370  =   0.3 %   0.0
+1804       G         1/370  =   0.3 %   0.0
+1805       H         1/370  =   0.3 %   0.0
+1806       G         1/370  =   0.3 %   0.0
+1807       A         1/370  =   0.3 %   0.0
+1808       G         1/370  =   0.3 %   0.0
+1809       V         1/370  =   0.3 %   0.0
+1810       G         1/370  =   0.3 %   0.0
+1811       G         1/370  =   0.3 %   0.0
+1812       S         1/370  =   0.3 %   0.0
+1813       R         1/370  =   0.3 %   0.0
+1814       N         1/370  =   0.3 %   0.0
+1815       G         1/370  =   0.3 %   0.0
+1816       I         1/370  =   0.3 %   0.0
+1817       W        56/370  =  15.1 %  11.0
+1818       G        36/370  =   9.7 %   1.9
+1819       E        24/370  =   6.5 %   1.1
+1820       P        18/370  =   4.9 %   0.4
+1821       S         1/370  =   0.3 %   0.0
+1822       N         9/370  =   2.4 %   0.0
+1823       N        15/370  =   4.1 %   0.4
+1824       A        12/370  =   3.2 %   0.2
+1825       G        11/370  =   3.0 %   2.5
+1826       G        13/370  =   3.5 %   3.9
+1827       G         3/370  =   0.8 %   1.4
+1828       V         2/370  =   0.5 %   0.7
+1829       G         1/370  =   0.3 %   0.0
+1830       G         3/370  =   0.8 %   2.5
+1831       R         7/370  =   1.9 %   1.0
+1832       N         7/370  =   1.9 %   0.9
+1833       N         7/370  =   1.9 %   1.0
+1834       A        12/370  =   3.2 %   0.1
+1835       A        17/370  =   4.6 %   0.4
+1836       R         1/370  =   0.3 %   0.0
+1837       N         1/370  =   0.3 %   0.0
+1838       S         1/370  =   0.3 %   0.0
+1839       V         1/370  =   0.3 %   0.0
+1840       S        16/370  =   4.3 %   0.3
+1841       A         4/370  =   1.1 %   1.1
+1842       T        16/370  =   4.3 %   0.3
+1843       S        17/370  =   4.6 %   0.4
+1844       G        17/370  =   4.6 %   0.5
+1845       W        48/370  =  13.0 %   7.7
+1846       G        42/370  =  11.4 %   3.2
+1847       D        20/370  =   5.4 %   0.8
+1848       G         1/370  =   0.3 %   0.0
+1849       D        16/370  =   4.3 %   0.3
+1850       S        24/370  =   6.5 %   0.6
+1851       A        14/370  =   3.8 %   0.1
+1852       G         1/370  =   0.3 %   0.0
+1853       G         1/370  =   0.3 %   0.0
+1854       G         1/370  =   0.3 %   0.0
+1855       W         1/370  =   0.3 %   0.0
+1856       G         1/370  =   0.3 %   0.0
+1857       D         1/370  =   0.3 %   0.0
+1858       E         1/370  =   0.3 %   0.0
+1859       K         1/370  =   0.3 %   0.0
+1860       G         1/370  =   0.3 %   0.0
+1861       N        19/370  =   5.1 %   0.8
+1862       A        17/370  =   4.6 %   0.4
+1863       P        17/370  =   4.6 %   0.5
+1864       V         3/370  =   0.8 %   0.9
+1865       A         1/370  =   0.3 %   0.0
+1866       R         1/370  =   0.3 %   0.0
+1867       G         1/370  =   0.3 %   0.0
+1868       M         1/370  =   0.3 %   0.0
+1869       R         1/370  =   0.3 %   0.0
+1870       L         2/370  =   0.5 %   0.6
+1871       N        11/370  =   3.0 %   0.1
+1872       L        14/370  =   3.8 %   0.0
+1873       S        14/370  =   3.8 %   0.2
+1874       K        26/370  =   7.0 %   0.8
+1875       S        24/370  =   6.5 %   0.5
+1876       G        26/370  =   7.0 %   1.1
+1877       S        22/370  =   5.9 %   0.6
+1878       G         1/370  =   0.3 %   0.0
+1879       K        34/370  =   9.2 %   1.8
+1880       S        32/370  =   8.6 %   1.0
+1881       M        31/370  =   8.4 %   1.5
+1882       Q        32/370  =   8.6 %   1.8
+1883       D        26/370  =   7.0 %   1.6
+1884       G        35/370  =   9.5 %   2.5
+1885       W        48/370  =  13.0 %   8.4
+1886       G        27/370  =   7.3 %   0.8
+1887       D        13/370  =   3.5 %   0.4
+1888       A         2/370  =   0.5 %   4.0
+1889       G         1/370  =   0.3 %   0.0
+1890       S         1/370  =   0.3 %   0.0
+1891       V         1/370  =   0.3 %   0.0
+1892       G         1/370  =   0.3 %   0.0
+1893       V         1/370  =   0.3 %   0.0
+1894       S         1/370  =   0.3 %   0.0
+1895       W         1/370  =   0.3 %   0.0
+1896       A         1/370  =   0.3 %   0.0
+1897       G         1/370  =   0.3 %   0.0
+1898       D        19/370  =   5.1 %   0.6
+1899       D        23/370  =   6.2 %   1.8
+1900       G         1/370  =   0.3 %   0.0
+1901       G        20/370  =   5.4 %   0.4
+1902       P        23/370  =   6.2 %   1.4
+1903       V        14/370  =   3.8 %   0.1
+1904       T        12/370  =   3.2 %   0.2
+1905       L         3/370  =   0.8 %   4.0
+1906       A         3/370  =   0.8 %   4.0
+1907       Q         3/370  =   0.8 %   5.0
+1908       I         3/370  =   0.8 %   4.0
+1909       G        31/370  =   8.4 %   1.8
+1910       L         1/370  =   0.3 %   0.0
+1911       A         1/370  =   0.3 %   0.0
+1912       Q         1/370  =   0.3 %   0.0
+1913       I         1/370  =   0.3 %   0.0
+1914       A         1/370  =   0.3 %   0.0
+1915       A        18/370  =   4.9 %   0.3
+1916       W         1/370  =   0.3 %   0.0
+1917       R        22/370  =   5.9 %   0.6
+1918       H        14/370  =   3.8 %   0.2
+1919       P        16/370  =   4.3 %   0.3
+1920       S        27/370  =   7.3 %   0.9
+1921       W        55/370  =  14.9 %  10.6
+1922       E        27/370  =   7.3 %   1.2
+1923       E        25/370  =   6.8 %   1.3
+1924       E        30/370  =   8.1 %   1.3
+1925       E        19/370  =   5.1 %   0.7
+1926       D        25/370  =   6.8 %   1.1
+1927       P         3/370  =   0.8 %   7.0
+1928       L         1/370  =   0.3 %   0.2
+1929       G        30/370  =   8.1 %   1.0
+1930       E         9/370  =   2.4 %   0.9
+1931       G         3/370  =   0.8 %   6.0
+1932       G         1/370  =   0.3 %   0.0
+1933       G         1/370  =   0.3 %   0.0
+1934       G         1/370  =   0.3 %   0.0
+1935       G         4/370  =   1.1 %   3.4
+1936       I         9/370  =   2.4 %   0.0
+1937       G        42/370  =  11.4 %   3.3
+1938       V        27/370  =   7.3 %   0.9
+1939       G         1/370  =   0.3 %   0.0
+1940       A         1/370  =   0.3 %   0.0
+1941       G         3/370  =   0.8 %   0.2
+1942       W        50/370  =  13.5 %   8.9
+1943       N        33/370  =   8.9 %   2.2
+1944       G         1/370  =   0.3 %   0.0
+1945       D         1/370  =   0.3 %   0.0
+1946       N        14/370  =   3.8 %   0.4
+1947       A        12/370  =   3.2 %   0.1
+1948       G        17/370  =   4.6 %   0.4
+1949       S        40/370  =  10.8 %   2.4
+1950       I         1/370  =   0.3 %   0.0
+1951       V         1/370  =   0.3 %   0.0
+1952       P         1/370  =   0.3 %   0.0
+1953       G         1/370  =   0.3 %   0.0
+1954       G         1/370  =   0.3 %   0.0
+1955       N         1/370  =   0.3 %   0.0
+1956       V         1/370  =   0.3 %   0.0
+1957       Q        31/370  =   8.4 %   1.8
+1958       E        17/370  =   4.6 %   0.3
+1959       S        24/370  =   6.5 %   0.5
+1960       A        12/370  =   3.2 %   0.2
+1961       S        39/370  =  10.5 %   2.4
+1962       S        37/370  =  10.0 %   1.9
+1963       H        12/370  =   3.2 %   0.0
+1964       N        29/370  =   7.8 %   1.9
+1965       S         8/370  =   2.2 %   0.5
+1966       G         7/370  =   1.9 %   0.4
+1967       P         7/370  =   1.9 %   0.2
+1968       S         6/370  =   1.6 %   0.6
+1969       T         5/370  =   1.4 %   0.6
+1970       A         5/370  =   1.4 %   0.6
+1971       A         5/370  =   1.4 %   0.5
+1972       A         3/370  =   0.8 %   0.8
+1973       N         3/370  =   0.8 %   0.6
+1974       T         3/370  =   0.8 %   0.7
+1975       V         2/370  =   0.5 %   0.3
+1976       G         2/370  =   0.5 %   6.0
+1977       N         1/370  =   0.3 %   0.0
+1978       G         1/370  =   0.3 %   0.0
+1979       A         1/370  =   0.3 %   0.0
+1980       G         2/370  =   0.5 %   6.0
+1981       N         1/370  =   0.3 %   0.0
+1982       V         1/370  =   0.3 %   0.0
+1983       E         1/370  =   0.3 %   0.0
+1984       G         1/370  =   0.3 %   0.0
+1985       G         1/370  =   0.3 %   0.0
+1986       N         1/370  =   0.3 %   0.5
+1987       D         1/370  =   0.3 %   0.0
+1988       I         1/370  =   0.3 %   0.0
+1989       S         2/370  =   0.5 %   4.0
+1990       D         1/370  =   0.3 %   0.0
+1991       D         1/370  =   0.3 %   0.0
+1992       S         1/370  =   0.3 %   0.0
+1993       V         3/370  =   0.8 %   0.0
+1994       D         2/370  =   0.5 %   0.2
+1995       G         7/370  =   1.9 %   2.1
+1996       V         5/370  =   1.4 %   0.2
+1997       V         8/370  =   2.2 %   1.5
+1998       D         6/370  =   1.6 %   1.1
+1999       Y         7/370  =   1.9 %   0.4
+2000       T         8/370  =   2.2 %   0.6
+2001       D         8/370  =   2.2 %   0.6
+2002       L         7/370  =   1.9 %   0.2
+2003       S        17/370  =   4.6 %   0.4
+2004       S        22/370  =   5.9 %   0.9
+2005       S        27/370  =   7.3 %   1.0
+2006       W        35/370  =   9.5 %   4.4
+2007       G        39/370  =  10.5 %   2.8
+2008       Q        15/370  =   4.1 %   0.1
+2009       H         5/370  =   1.4 %   1.0
+2010       G         7/370  =   1.9 %   6.0
+2011       I         2/370  =   0.5 %   4.0
+2012       V         2/370  =   0.5 %   4.0
+2013       G         7/370  =   1.9 %   2.9
+2014       I         5/370  =   1.4 %   0.0
+2015       G        18/370  =   4.9 %   0.2
+2016       G        39/370  =  10.5 %   2.7
+2017       K        40/370  =  10.8 %   2.5
+2018       K        32/370  =   8.6 %   1.5
+2019       Q         1/370  =   0.3 %   0.0
+2020       Q         2/370  =   0.5 %   0.0
+2021       Q        25/370  =   6.8 %   1.1
+2022       M        17/370  =   4.6 %   0.4
+2023       R         7/370  =   1.9 %   3.4
+2024       G         1/370  =   0.3 %   0.0
+2025       G         1/370  =   0.3 %   0.0
+2026       E         6/370  =   1.6 %   2.8
+2027       K        19/370  =   5.1 %   0.7
+2028       C        13/370  =   3.5 %   0.0
+2029       K        18/370  =   4.9 %   0.3
+2030       L        25/370  =   6.8 %   0.8
+2031       S         1/370  =   0.3 %   0.0
+2032       K        28/370  =   7.6 %   1.2
+2033       T         5/370  =   1.4 %   3.3
+2034       P         3/370  =   0.8 %   1.1
+2035       G        41/370  =  11.1 %   3.4
+2036       G        23/370  =   6.2 %   0.3
+2037       N        38/370  =  10.3 %   2.7
+2038       N        15/370  =   4.1 %   0.2
+2039       G        12/370  =   3.2 %   1.2
+2040       V         4/370  =   1.1 %   1.4
+2041       V         2/370  =   0.5 %   0.3
+2042       V         1/370  =   0.3 %   0.0
+2043       G         1/370  =   0.3 %   0.0
+2044       V         1/370  =   0.3 %   0.0
+2045       G         1/370  =   0.3 %   0.0
+2046       G         1/370  =   0.3 %   0.0
+2047       M         1/370  =   0.3 %   0.0
+2048       V         1/370  =   0.3 %   0.0
+2049       N         1/370  =   0.3 %   0.0
+2050       M         1/370  =   0.3 %   0.0
+2051       N         3/370  =   0.8 %   1.3
+2052       M         5/370  =   1.4 %   0.9
+2053       E         9/370  =   2.4 %   0.1
+2054       D        20/370  =   5.4 %   0.9
+2055       A        15/370  =   4.1 %   0.3
+2056       W        33/370  =   8.9 %   2.9
+2057       I         7/370  =   1.9 %   0.6
+2058       M        31/370  =   8.4 %   1.2
+2059       N        26/370  =   7.0 %   1.1
+2060       P        22/370  =   5.9 %   0.6
+2061       L        21/370  =   5.7 %   0.3
+2062       A        13/370  =   3.5 %   0.2
+2063       D         1/370  =   0.3 %   0.0
+2064       K        44/370  =  11.9 %   3.1
+2065       Q        47/370  =  12.7 %   3.0
+2066       Y         7/370  =   1.9 %   1.3
+2067       K         6/370  =   1.6 %   5.0
+2068       Q         6/370  =   1.6 %   5.0
+2069       Y         6/370  =   1.6 %   7.0
+2070       R        13/370  =   3.5 %   5.0
+2071       I        11/370  =   3.0 %   2.6
+2072       L        34/370  =   9.2 %   1.3
+2073       S        25/370  =   6.8 %   0.5
+2074       N        24/370  =   6.5 %   1.0
+2075       M        30/370  =   8.1 %   1.1
+2076       G        47/370  =  12.7 %   3.7
+2077       F        40/370  =  10.8 %   2.8
+2078       K        23/370  =   6.2 %   0.4
+2079       K        24/370  =   6.5 %   1.1
+2080       E        32/370  =   8.6 %   2.0
+2081       D        24/370  =   6.5 %   0.9
+2082       V        20/370  =   5.4 %   0.2
+2083       E        39/370  =  10.5 %   2.7
+2084       N        16/370  =   4.3 %   0.5
+2085       A        29/370  =   7.8 %   1.8
+2086       L        30/370  =   8.1 %   3.2
+2087       G         1/370  =   0.3 %   0.0
+2088       A         1/370  =   0.3 %   0.0
+2089       C         1/370  =   0.3 %   0.0
+2090       R         9/370  =   2.4 %   0.2
+2091       S        13/370  =   3.5 %   0.2
+2092       A        13/370  =   3.5 %   0.1
+2093       N        25/370  =   6.8 %   1.3
+2094       M        29/370  =   7.8 %   1.0
+2095       N        30/370  =   8.1 %   1.8
+2096       M        21/370  =   5.7 %   1.0
+2097       D        29/370  =   7.8 %   2.0
+2098       L        22/370  =   5.9 %   0.2
+2099       A        28/370  =   7.6 %   1.3
+2100       V        15/370  =   4.1 %   0.3
+2101       G        15/370  =   4.1 %   0.3
+2102       M        22/370  =   5.9 %   0.8
+2103       L        49/370  =  13.2 %   3.6
+2104       R        16/370  =   4.3 %   0.4
+2105       A         2/370  =   0.5 %   1.3
+2106       N         3/370  =   0.8 %   6.0
+2107       A         9/370  =   2.4 %   1.5
+2108       D        21/370  =   5.7 %   0.8
+2109       K        30/370  =   8.1 %   1.3
+2110       K        21/370  =   5.7 %   0.7
+2111       F        13/370  =   3.5 %   0.3
+2112       D        21/370  =   5.7 %   1.0
+2113       V        16/370  =   4.3 %   0.5
+2114       D        39/370  =  10.5 %   3.4
+2115       G        11/370  =   3.0 %   2.4
+2116       A         1/370  =   0.3 %   0.0
+2117       D         1/370  =   0.3 %   0.3
+2118       R         1/370  =   0.3 %   0.0
+2119       A         1/370  =   0.3 %   0.0
+2120       S         1/370  =   0.3 %   0.0
+2121       S         1/370  =   0.3 %   0.0
+2122       A         1/370  =   0.3 %   0.0
+2123       N         1/370  =   0.3 %   0.0
+2124       T         1/370  =   0.3 %   0.0
+2125       G         1/370  =   0.3 %   0.0
+2126       E         1/370  =   0.3 %   0.0
+2127       G         2/370  =   0.5 %   1.3
+2128       W        13/370  =   3.5 %   6.7
+2129       R        13/370  =   3.5 %   2.6
+2130       K        30/370  =   8.1 %   2.1
+2131       R        22/370  =   5.9 %   1.2
+2132       D        10/370  =   2.7 %   0.2
+2133       M        17/370  =   4.6 %   0.5
+2134       N        22/370  =   5.9 %   0.9
+2135       G         1/370  =   0.3 %   0.0
+2136       L        28/370  =   7.6 %   1.4
+2137       G        36/370  =   9.7 %   2.3
+2138       G         1/370  =   0.3 %   0.0
+2139       D         1/370  =   0.3 %   0.0
+2140       D        35/370  =   9.5 %   2.6
+2141       Y        28/370  =   7.6 %   2.8
+2142       N        27/370  =   7.3 %   1.5
+2143       D        27/370  =   7.3 %   1.3
+2144       H        17/370  =   4.6 %   0.3
+2145       M        14/370  =   3.8 %   0.2
+2146       R        14/370  =   3.8 %   0.1
+2147       K        29/370  =   7.8 %   1.4
+2148       D        13/370  =   3.5 %   0.1
+2149       R        13/370  =   3.5 %   0.4
+2150       S        18/370  =   4.9 %   0.2
+2151       G        47/370  =  12.7 %   4.1
+2152       G        10/370  =   2.7 %   3.9
+2153       N         1/370  =   0.3 %   0.0
+2154       F         7/370  =   1.9 %   2.0
+2155       A         7/370  =   1.9 %   1.1
+2156       G        16/370  =   4.3 %   0.0
+2157       R        41/370  =  11.1 %   2.4
+2158       P        40/370  =  10.8 %   3.1
+2159       P        28/370  =   7.6 %   1.4
+2160       N        13/370  =   3.5 %   0.1
+2161       N         5/370  =   1.4 %   2.3
+2162       S        34/370  =   9.2 %   1.2
+2163       K        32/370  =   8.6 %   1.2
+2164       D        18/370  =   4.9 %   0.6
+2165       A         1/370  =   0.3 %   0.0
+2166       Q         1/370  =   0.3 %   0.0
+2167       P         7/370  =   1.9 %   5.1
+2168       S        27/370  =   7.3 %   0.7
+2169       P         2/370  =   0.5 %   7.0
+2170       S         2/370  =   0.5 %   4.0
+2171       G        15/370  =   4.1 %   0.4
+2172       S        24/370  =   6.5 %   1.0
+2173       T        15/370  =   4.1 %   0.1
+2174       D        23/370  =   6.2 %   0.9
+2175       S        18/370  =   4.9 %   0.2
+2176       G        18/370  =   4.9 %   0.4
+2177       P        23/370  =   6.2 %   0.6
+2178       Y        22/370  =   5.9 %   0.9
+2179       F        24/370  =   6.5 %   0.6
+2180       D        20/370  =   5.4 %   0.8
+2181       K        31/370  =   8.4 %   1.5
+2182       N         9/370  =   2.4 %   0.1
+2183       G         8/370  =   2.2 %   0.0
+2184       G        10/370  =   2.7 %   0.0
+2185       T        11/370  =   3.0 %   0.2
+2186       F        11/370  =   3.0 %   0.0
+2187       V         3/370  =   0.8 %   4.0
+2188       T         2/370  =   0.5 %   5.0
+2189       G         4/370  =   1.1 %   0.8
+2190       S        11/370  =   3.0 %   0.3
+2191       G        10/370  =   2.7 %   0.3
+2192       G        11/370  =   3.0 %   0.2
+2193       D        18/370  =   4.9 %   0.8
+2194       G        20/370  =   5.4 %   0.8
+2195       G         1/370  =   0.3 %   0.0
+2196       G        13/370  =   3.5 %   0.1
+2197       N        14/370  =   3.8 %   0.4
+2198       A         9/370  =   2.4 %   0.0
+2199       G         1/370  =   0.3 %   0.0
+2200       D        10/370  =   2.7 %   0.2
+2201       E        13/370  =   3.5 %   0.3
+2202       Q         7/370  =   1.9 %   0.0
+2203       Q        12/370  =   3.2 %   0.2
+2204       N        11/370  =   3.0 %   0.0
+2205       L        10/370  =   2.7 %   0.1
+2206       Q        10/370  =   2.7 %   0.2
+2207       V         3/370  =   0.8 %   0.0
+2208       G         1/370  =   0.3 %   0.0
+2209       G         1/370  =   0.3 %   0.0
+2210       Q         3/370  =   0.8 %   0.9
+2211       K         3/370  =   0.8 %   0.0
+2212       F        19/370  =   5.1 %   0.9
+2213       L        20/370  =   5.4 %   0.1
+2214       S        12/370  =   3.2 %   0.2
+2215       S        20/370  =   5.4 %   0.6
+2216       Q        11/370  =   3.0 %   0.1
+2217       G         1/370  =   0.3 %   0.0
+2218       G         1/370  =   0.3 %   0.0
+2219       P         1/370  =   0.3 %   0.0
+2220       S        19/370  =   5.1 %   0.5
+2221       H        12/370  =   3.2 %   0.2
+2222       G        13/370  =   3.5 %   0.1
+2223       S         4/370  =   1.1 %   0.9
+2224       E         1/370  =   0.3 %   0.0
+2225       D         1/370  =   0.3 %   0.0
+2226       S         1/370  =   0.3 %   0.0
+2227       T         1/370  =   0.3 %   0.0
+2228       V         1/370  =   0.3 %   0.0
+2229       K         1/370  =   0.3 %   0.0
+2230       D         1/370  =   0.3 %   0.0
+2231       P         1/370  =   0.3 %   0.0
+2232       K         1/370  =   0.3 %   0.0
+2233       S         1/370  =   0.3 %   0.0
+2234       E         1/370  =   0.3 %   0.0
+2235       A         1/370  =   0.3 %   0.2
+2236       A         4/370  =   1.1 %   0.4
+2237       L        16/370  =   4.3 %   0.2
+2238       P        15/370  =   4.1 %   0.3
+2239       L        10/370  =   2.7 %   0.0
+2240       S        15/370  =   4.1 %   0.3
+2241       P        15/370  =   4.1 %   0.2
+2242       S        12/370  =   3.2 %   0.2
+2243       A        22/370  =   5.9 %   0.5
+2244       L        21/370  =   5.7 %   0.4
+2245       A         3/370  =   0.8 %   4.0
+2246       I         1/370  =   0.3 %   0.0
+2247       G         1/370  =   0.3 %   0.0
+2248       I         2/370  =   0.5 %   0.0
+2249       P        19/370  =   5.1 %   0.5
+2250       N        25/370  =   6.8 %   1.3
+2251       Q        12/370  =   3.2 %   0.1
+2252       S        15/370  =   4.1 %   0.3
+2253       L        14/370  =   3.8 %   0.1
+2254       G        14/370  =   3.8 %   0.1
+2255       S        16/370  =   4.3 %   0.4
+2256       V        16/370  =   4.3 %   0.2
+2257       G        15/370  =   4.1 %   0.3
+2258       S         1/370  =   0.3 %   0.0
+2259       N         1/370  =   0.3 %   0.0
+2260       S         1/370  =   0.3 %   0.0
+2261       L         1/370  =   0.3 %   0.0
+2262       P         1/370  =   0.3 %   0.0
+2263       D         1/370  =   0.3 %   0.0
+2264       F        14/370  =   3.8 %   0.1
+2265       G        31/370  =   8.4 %   1.8
+2266       L        14/370  =   3.8 %   0.1
+2267       G        15/370  =   4.1 %   0.4
+2268       D         1/370  =   0.3 %   0.0
+2269       Y         1/370  =   0.3 %   0.0
+2270       Y         1/370  =   0.3 %   0.0
+2271       N         1/370  =   0.3 %   0.0
+2272       M        10/370  =   2.7 %   0.0
+2273       Q        16/370  =   4.3 %   0.3
+2274       N        37/370  =  10.0 %   2.7
+2275       L        14/370  =   3.8 %   0.0
+2276       N         9/370  =   2.4 %   4.8
+2277       A        16/370  =   4.3 %   0.4
+2278       V        15/370  =   4.1 %   0.0
+2279       R        14/370  =   3.8 %   0.2
+2280       Q        15/370  =   4.1 %   0.2
+2281       I         4/370  =   1.1 %   0.9
+2282       G         1/370  =   0.3 %   0.0
+2283       E         1/370  =   0.3 %   0.0
+2284       P         5/370  =   1.4 %   1.5
+2285       G        23/370  =   6.2 %   0.5
+2286       G        41/370  =  11.1 %   1.5
+2287       S        28/370  =   7.6 %   0.6
+2288       H        22/370  =   5.9 %   0.4
+2289       G         1/370  =   0.3 %   0.0
+2290       G        33/370  =   8.9 %   1.3
+2291       L        17/370  =   4.6 %   0.2
+2292       F        30/370  =   8.1 %   0.4
+2293       G        47/370  =  12.7 %   2.2
+2294       V         8/370  =   2.2 %   2.0
+2295       G        10/370  =   2.7 %   3.1
+2296       N        48/370  =  13.0 %   2.4
+2297       S        24/370  =   6.5 %   0.4
+2298       N         1/370  =   0.3 %   0.0
+2299       G         5/370  =   1.4 %   1.5
+2300       A        24/370  =   6.5 %   0.2
+2301       A        39/370  =  10.5 %   0.7
+2302       Q        48/370  =  13.0 %   1.6
+2303       P        26/370  =   7.0 %   0.5
+2304       R        32/370  =   8.6 %   0.6
+2305       G        53/370  =  14.3 %   2.5
+2306       A         1/370  =   0.3 %   0.0
+2307       G         2/370  =   0.5 %   6.0
+2308       M        19/370  =   5.1 %   0.3
+2309       Q        30/370  =   8.1 %   0.7
+2310       N         1/370  =   0.3 %   0.2
+2311       Q         1/370  =   0.3 %   0.3
+2312       E         1/370  =   0.3 %   0.0
+2313       Q         1/370  =   0.3 %   0.0
+2314       P         2/370  =   0.5 %   1.7
+2315       P         2/370  =   0.5 %   0.7
+2316       Q        20/370  =   5.4 %   0.3
+2317       P         2/370  =   0.5 %   0.0
+2318       P         2/370  =   0.5 %   7.0
+2319       Q         2/370  =   0.5 %   5.0
+2320       P        18/370  =   4.9 %   2.5
+2321       P        34/370  =   9.2 %   1.5
+2322       V        24/370  =   6.5 %   0.4
+2323       Q        41/370  =  11.1 %   1.3
+2324       P        36/370  =   9.7 %   1.0
+2325       L        56/370  =  15.1 %   1.9
+2326       A         1/370  =   0.3 %   0.0
+2327       S        22/370  =   5.9 %   0.4
+2328       S        37/370  =  10.0 %   0.8
+2329       S        36/370  =   9.7 %   1.2
+2330       L         4/370  =   1.1 %   0.6
+2331       D         1/370  =   0.3 %   0.0
+2332       Q        16/370  =   4.3 %   1.4
+2333       P        43/370  =  11.6 %   2.5
+2334       S        23/370  =   6.2 %   0.4
+2335       L        33/370  =   8.9 %   0.6
+2336       R        34/370  =   9.2 %   0.9
+2337       A        34/370  =   9.2 %   0.5
+2338       Q        39/370  =  10.5 %   1.3
+2339       V        38/370  =  10.3 %   1.2
+2340       P         1/370  =   0.3 %   0.0
+2341       S         1/370  =   0.3 %   0.0
+2342       T         1/370  =   0.3 %   0.0
+2343       Q         1/370  =   0.3 %   0.0
+2344       P        33/370  =   8.9 %   1.4
+2345       E         1/370  =   0.3 %   0.0
+2346       I         1/370  =   0.3 %   0.0
+2347       P        38/370  =  10.3 %   1.1
+2348       F         1/370  =   0.3 %   0.0
+2349       G         1/370  =   0.3 %   0.0
+2350       S         1/370  =   0.3 %   0.0
+2351       A         1/370  =   0.3 %   0.0
+2352       Q        22/370  =   5.9 %   0.2
+2353       F        39/370  =  10.5 %   1.2
+2354       G         1/370  =   0.3 %   0.0
+2355       G         1/370  =   0.3 %   0.0
+2356       S         1/370  =   0.3 %   0.0
+2357       M         1/370  =   0.3 %   0.0
+2358       D         1/370  =   0.3 %   0.0
+2359       L        36/370  =   9.7 %   1.1
+2360       S        47/370  =  12.7 %   1.1
+2361       L         1/370  =   0.3 %   0.0
+2362       P        36/370  =   9.7 %   1.0
+2363       Q        69/370  =  18.6 %   3.5
+2364       V        36/370  =   9.7 %   1.1
+2365       Q        23/370  =   6.2 %   0.2
+2366       A        25/370  =   6.8 %   0.2
+2367       S        32/370  =   8.6 %   0.5
+2368       L        27/370  =   7.3 %   0.3
+2369       L        53/370  =  14.3 %   1.2
+2370       K        27/370  =   7.3 %   0.4
+2371       Q        31/370  =   8.4 %   0.6
+2372       A        22/370  =   5.9 %   0.1
+2373       A         7/370  =   1.9 %   2.9
+2374       P        31/370  =   8.4 %   0.8
+2375       N        37/370  =  10.0 %   0.8
+2376       N        27/370  =   7.3 %   0.5
+2377       G        37/370  =  10.0 %   0.4
+2378       L        49/370  =  13.2 %   1.7
+2379       N        37/370  =  10.0 %   1.4
+2380       P        27/370  =   7.3 %   0.5
+2381       G         1/370  =   0.3 %   0.0
+2382       P         1/370  =   0.3 %   0.0
+2383       V         1/370  =   0.3 %   0.0
+2384       P         2/370  =   0.5 %   7.0
+2385       A         2/370  =   0.5 %   0.8
+2386       G        32/370  =   8.6 %   0.3
+2387       L        37/370  =  10.0 %   0.9
+2388       L        22/370  =   5.9 %   0.1
+2389       N        39/370  =  10.5 %   1.7
+2390       V        17/370  =   4.6 %   0.4
+2391       G        16/370  =   4.3 %   0.1
+2392       Q         2/370  =   0.5 %   0.1
+2393       A         1/370  =   0.3 %   0.0
+2394       A         1/370  =   0.3 %   0.0
+2395       G         2/370  =   0.5 %   0.7
+2396       L         1/370  =   0.3 %   0.0
+2397       G         2/370  =   0.5 %   0.7
+2398       A         1/370  =   0.3 %   0.3
+2399       T         1/370  =   0.3 %   0.0
+2400       P         2/370  =   0.5 %   7.0
+2401       V         2/370  =   0.5 %   4.0
+2402       P         1/370  =   0.3 %   0.0
+2403       G         1/370  =   0.3 %   0.0
+2404       S         1/370  =   0.3 %   0.0
+2405       G         1/370  =   0.3 %   0.0
+2406       G         1/370  =   0.3 %   0.0
+2407       G         1/370  =   0.3 %   0.0
+2408       R         1/370  =   0.3 %   0.0
+2409       A         1/370  =   0.3 %   0.0
+2410       S         1/370  =   0.3 %   0.0
+2411       A         1/370  =   0.3 %   0.0
+2412       S         1/370  =   0.3 %   0.5
+2413       P         2/370  =   0.5 %   7.0
+2414       A         1/370  =   0.3 %   0.5
+2415       L         2/370  =   0.5 %   4.0
+2416       L         1/370  =   0.3 %   0.0
+2417       T         2/370  =   0.5 %   0.7
+2418       G         2/370  =   0.5 %   0.2
+2419       A         1/370  =   0.3 %   0.1
+2420       G         2/370  =   0.5 %   0.0
+2421       P         2/370  =   0.5 %   0.0
+2422       R         2/370  =   0.5 %   0.4
+2423       P        37/370  =  10.0 %   0.8
+2424       P        30/370  =   8.1 %   0.3
+2425       L        39/370  =  10.5 %   0.5
+2426       A        29/370  =   7.8 %   0.4
+2427       P        58/370  =  15.7 %   2.0
+2428       Q        73/370  =  19.7 %   2.5
+2429       Q        54/370  =  14.6 %   1.3
+2430       A         1/370  =   0.3 %   0.0
+2431       S        11/370  =   3.0 %   1.0
+2432       L        27/370  =   7.3 %   0.4
+2433       A        44/370  =  11.9 %   0.6
+2434       M        32/370  =   8.6 %   0.5
+2435       L        54/370  =  14.6 %   0.7
+2436       Q         1/370  =   0.3 %   0.0
+2437       R         2/370  =   0.5 %   0.6
+2438       N        30/370  =   8.1 %   0.5
+2439       Q        65/370  =  17.6 %   2.1
+2440       L        61/370  =  16.5 %   1.2
+2441       A         2/370  =   0.5 %   0.0
+2442       L        11/370  =   3.0 %   0.2
+2443       P        20/370  =   5.4 %   0.1
+2444       Q        47/370  =  12.7 %   1.4
+2445       I        32/370  =   8.6 %   0.6
+2446       P        20/370  =   5.4 %   0.2
+2447       Q        71/370  =  19.2 %   2.0
+2448       L        48/370  =  13.0 %   0.7
+2449       H         2/370  =   0.5 %   8.0
+2450       A         1/370  =   0.3 %   0.0
+2451       L         1/370  =   0.3 %   0.0
+2452       Q        68/370  =  18.4 %   1.7
+2453       Q        40/370  =  10.8 %   0.3
+2454       A        30/370  =   8.1 %   0.1
+2455       Q        55/370  =  14.9 %   0.8
+2456       S         1/370  =   0.3 %   0.0
+2457       P         1/370  =   0.3 %   0.0
+2458       G         1/370  =   0.3 %   0.0
+2459       G         1/370  =   0.3 %   0.0
+2460       L         1/370  =   0.3 %   0.0
+2461       S         1/370  =   0.3 %   0.0
+2462       L         1/370  =   0.3 %   0.0
+2463       Q        70/370  =  18.9 %   1.7
+2464       Q        23/370  =   6.2 %   0.2
+2465       L        50/370  =  13.5 %   0.7
+2466       Q        41/370  =  11.1 %   0.7
+2467       H         1/370  =   0.3 %   0.0
+2468       Q        65/370  =  17.6 %   2.1
+2469       Q        62/370  =  16.8 %   1.4
+2470       Q        71/370  =  19.2 %   1.7
+2471       G         5/370  =   1.4 %   0.6
+2472       G         3/370  =   0.8 %   0.7
+2473       G         1/370  =   0.3 %   0.0
+2474       P         1/370  =   0.3 %   0.0
+2475       T         2/370  =   0.5 %   0.5
+2476       G         5/370  =   1.4 %   2.1
+2477       Q         7/370  =   1.9 %   0.1
+2478       Q        72/370  =  19.5 %   1.5
+2479       G         1/370  =   0.3 %   0.0
+2480       Q        98/370  =  26.5 %   3.1
+2481       Q        89/370  =  24.1 %   2.4
+2482       Q       109/370  =  29.5 %   3.9
+2483       Q        43/370  =  11.6 %   0.4
+2484       Q        40/370  =  10.8 %   0.2
+2485       Q        93/370  =  25.1 %   2.6
+2486       Q        46/370  =  12.4 %   0.6
+2487       S         3/370  =   0.8 %   0.2
+2488       Q         1/370  =   0.3 %   0.0
+2489       A         2/370  =   0.5 %   0.0
+2490       Q        95/370  =  25.7 %   2.6
+2491       Q        45/370  =  12.2 %   0.6
+2492       Q        41/370  =  11.1 %   0.6
+2493       Q         1/370  =   0.3 %   0.0
+2494       R         1/370  =   0.3 %   0.0
+2495       Q        37/370  =  10.0 %   0.1
+2496       Q        59/370  =  15.9 %   1.1
+2497       Q        88/370  =  23.8 %   2.3
+2498       Q        59/370  =  15.9 %   0.9
+2499       Q        31/370  =   8.4 %   0.1
+2500       Q        46/370  =  12.4 %   0.7
+2501       Q         1/370  =   0.3 %   0.0
+2502       Q         1/370  =   0.3 %   0.0
+2503       Q        87/370  =  23.5 %   2.3
+2504       Q        81/370  =  21.9 %   2.5
+2505       Q       121/370  =  32.7 %   4.6
+2506       Q        72/370  =  19.5 %   1.8
+2507       Q       109/370  =  29.5 %   3.7
+2508       Q        75/370  =  20.3 %   1.6
+2509       Q        25/370  =   6.8 %   0.1
+2510       Q         1/370  =   0.3 %   0.0
+2511       Q         1/370  =   0.3 %   0.0
+2512       Q         1/370  =   0.3 %   0.0
+2513       Q         1/370  =   0.3 %   0.0
+2514       Q         1/370  =   0.3 %   0.0
+2515       Q         1/370  =   0.3 %   0.0
+2516       Q         1/370  =   0.3 %   0.0
+2517       Q         1/370  =   0.3 %   1.0
+2518       A        40/370  =  10.8 %   0.4
+2519       Q        70/370  =  18.9 %   1.8
+2520       Q        63/370  =  17.0 %   1.1
+2521       A         1/370  =   0.3 %   0.0
+2522       H         1/370  =   0.3 %   0.0
+2523       L         1/370  =   0.3 %   0.0
+2524       G         1/370  =   0.3 %   0.0
+2525       Q        44/370  =  11.9 %   0.2
+2526       Q        41/370  =  11.1 %   0.4
+2527       Q         1/370  =   0.3 %   0.0
+2528       Q        50/370  =  13.5 %   0.8
+2529       Q        65/370  =  17.6 %   1.0
+2530       L         1/370  =   0.3 %   0.0
+2531       P         1/370  =   0.3 %   0.0
+2532       Q       107/370  =  28.9 %   3.7
+2533       Q       120/370  =  32.4 %   4.4
+2534       Q       109/370  =  29.5 %   3.6
+2535       L         1/370  =   0.3 %   0.0
+2536       P         1/370  =   0.3 %   0.0
+2537       Q        98/370  =  26.5 %   2.7
+2538       Q       117/370  =  31.6 %   4.0
+2539       Q       112/370  =  30.3 %   3.6
+2540       S        10/370  =   2.7 %   2.7
+2541       Q        94/370  =  25.4 %   2.7
+2542       Q       111/370  =  30.0 %   3.6
+2543       Q        70/370  =  18.9 %   1.4
+2544       Q        89/370  =  24.1 %   2.2
+2545       L        10/370  =   2.7 %   0.0
+2546       A         9/370  =   2.4 %   0.3
+2547       Q         7/370  =   1.9 %   0.6
+2548       A         9/370  =   2.4 %   1.5
+2549       L         5/370  =   1.4 %   0.2
+2550       L         4/370  =   1.1 %   0.6
+2551       P         1/370  =   0.3 %   0.0
+2552       S         1/370  =   0.3 %   0.0
+2553       P         1/370  =   0.3 %   0.0
+2554       V         4/370  =   1.1 %   0.8
+2555       K         4/370  =   1.1 %   0.7
+2556       Q         5/370  =   1.4 %   0.4
+2557       P         5/370  =   1.4 %   0.2
+2558       L         7/370  =   1.9 %   0.0
+2559       R         6/370  =   1.6 %   0.0
+2560       Q         7/370  =   1.9 %   0.0
+2561       P        47/370  =  12.7 %   0.6
+2562       Q        44/370  =  11.9 %   0.6
+2563       Q        42/370  =  11.4 %   0.5
+2564       L         5/370  =   1.4 %   0.6
+2565       V         5/370  =   1.4 %   1.3
+2566       A         1/370  =   0.3 %   0.5
+2567       K         6/370  =   1.6 %   2.5
+2568       Q         7/370  =   1.9 %   1.2
+2569       Q        42/370  =  11.4 %   0.6
+2570       Q         1/370  =   0.3 %   0.0
+2571       L         1/370  =   0.3 %   0.0
+2572       P         1/370  =   0.3 %   0.0
+2573       S         1/370  =   0.3 %   0.0
+2574       H         1/370  =   0.3 %   0.0
+2575       S         1/370  =   0.3 %   0.0
+2576       S         1/370  =   0.3 %   0.0
+2577       S         1/370  =   0.3 %   0.0
+2578       S         1/370  =   0.3 %   0.0
+2579       S         1/370  =   0.3 %   0.0
+2580       S         1/370  =   0.3 %   0.0
+2581       S         1/370  =   0.3 %   0.0
+2582       A         1/370  =   0.3 %   0.0
+2583       G         1/370  =   0.3 %   0.0
+2584       L         1/370  =   0.3 %   0.0
+2585       H        45/370  =  12.2 %   0.9
+2586       Q        37/370  =  10.0 %   0.4
+2587       P        45/370  =  12.2 %   0.8
+2588       Q        30/370  =   8.1 %   0.3
+2589       Q        45/370  =  12.2 %   0.7
+2590       L         2/370  =   0.5 %   0.0
+2591       G         1/370  =   0.3 %   0.0
+2592       G         1/370  =   0.3 %   0.0
+2593       G         1/370  =   0.3 %   0.0
+2594       Q         1/370  =   0.3 %   0.0
+2595       G         3/370  =   0.8 %   0.3
+2596       L         2/370  =   0.5 %   0.0
+2597       P        34/370  =   9.2 %   0.4
+2598       V        24/370  =   6.5 %   0.0
+2599       G        31/370  =   8.4 %   0.1
+2600       A         2/370  =   0.5 %   0.0
+2601       D         2/370  =   0.5 %   0.1
+2602       A         1/370  =   0.3 %   0.0
+2603       D         1/370  =   0.3 %   0.0
+2604       G         2/370  =   0.5 %   0.0
+2605       G         2/370  =   0.5 %   0.0
+2606       Q         2/370  =   0.5 %   0.0
+2607       P        26/370  =   7.0 %   0.1
+2608       K        25/370  =   6.8 %   0.2
+2609       I         1/370  =   0.3 %   0.0
+2610       P        49/370  =  13.2 %   1.0
+2611       H        44/370  =  11.9 %   1.0
+2612       L        41/370  =  11.1 %   0.3
+2613       D        29/370  =   7.8 %   0.3
+2614       F         1/370  =   0.3 %   0.0
+2615       N        34/370  =   9.2 %   0.6
+2616       G         1/370  =   0.3 %   0.0
+2617       S         1/370  =   0.3 %   0.0
+2618       T         1/370  =   0.3 %   0.0
+2619       E         1/370  =   0.3 %   0.0
+2620       F        26/370  =   7.0 %   0.0
+2621       N         1/370  =   0.3 %   0.0
+2622       V        21/370  =   5.7 %   0.1
+2623       P        21/370  =   5.7 %   0.1
+2624       N        37/370  =  10.0 %   0.9
+2625       A        20/370  =   5.4 %   0.1
+2626       L        26/370  =   7.0 %   0.2
+2627       N        24/370  =   6.5 %   0.3
+2628       V        17/370  =   4.6 %   0.0
+2629       G        46/370  =  12.4 %   0.8
+2630       L        32/370  =   8.6 %   0.0
+2631       P         1/370  =   0.3 %   0.0
+2632       P        43/370  =  11.6 %   1.0
+2633       D        29/370  =   7.8 %   0.4
+2634       S         1/370  =   0.3 %   0.0
+2635       L        56/370  =  15.1 %   1.2
+2636       G         1/370  =   0.3 %   0.0
+2637       G         1/370  =   0.3 %   0.0
+2638       Q        29/370  =   7.8 %   0.5
+2639       T        30/370  =   8.1 %   0.4
+2640       G         1/370  =   0.3 %   0.0
+2641       K        39/370  =  10.5 %   0.7
+2642       S         2/370  =   0.5 %   0.3
+2643       K         1/370  =   0.3 %   0.0
+2644       E         4/370  =   1.1 %   0.4
+2645       G        37/370  =  10.0 %   0.6
+2646       P        42/370  =  11.4 %   1.1
+2647       Q         5/370  =   1.4 %   2.0
+2648       S         6/370  =   1.6 %   2.9
+2649       S         6/370  =   1.6 %   2.6
+2650       P         6/370  =   1.6 %   4.9
+2651       N         5/370  =   1.4 %   2.6
+2652       T         5/370  =   1.4 %   3.3
+2653       F         5/370  =   1.4 %   2.9
+2654       A         5/370  =   1.4 %   1.7
+2655       P         5/370  =   1.4 %   3.1
+2656       Y         6/370  =   1.6 %   4.9
+2657       P         6/370  =   1.6 %   4.9
+2658       I        33/370  =   8.9 %   0.3
+2659       P        30/370  =   8.1 %   0.4
+2660       G        29/370  =   7.8 %   0.2
+2661       L        31/370  =   8.4 %   0.1
+2662       S         1/370  =   0.3 %   0.0
+2663       P         1/370  =   0.3 %   0.0
+2664       A        12/370  =   3.2 %   2.8
+2665       G        22/370  =   5.9 %   0.0
+2666       S        44/370  =  11.9 %   0.9
+2667       N        41/370  =  11.1 %   1.3
+2668       F        42/370  =  11.4 %   1.1
+2669       S        35/370  =   9.5 %   0.7
+2670       S        24/370  =   6.5 %   0.1
+2671       G        32/370  =   8.6 %   0.5
+2672       L        11/370  =   3.0 %   2.3
+2673       A         1/370  =   0.3 %   0.0
+2674       N        11/370  =   3.0 %   4.1
+2675       S        13/370  =   3.5 %   3.0
+2676       N        28/370  =   7.6 %   0.8
+2677       L        29/370  =   7.8 %   0.6
+2678       N        31/370  =   8.4 %   1.0
+2679       V        19/370  =   5.1 %   0.0
+2680       G        23/370  =   6.2 %   0.3
+2681       M        26/370  =   7.0 %   0.3
+2682       G        21/370  =   5.7 %   0.1
+2683       G        18/370  =   4.9 %   0.0
+2684       G        19/370  =   5.1 %   0.1
+2685       V         5/370  =   1.4 %   0.6
+2686       M         1/370  =   0.3 %   0.0
+2687       K         9/370  =   2.4 %   1.4
+2688       G        24/370  =   6.5 %   0.3
+2689       E        16/370  =   4.3 %   0.0
+2690       T         1/370  =   0.3 %   0.0
+2691       A        19/370  =   5.1 %   0.2
+2692       G         1/370  =   0.3 %   0.0
+2693       G        17/370  =   4.6 %   0.2
+2694       Q        26/370  =   7.0 %   0.4
+2695       Q        54/370  =  14.6 %   2.8
+2696       S        66/370  =  17.8 %   3.1
+2697       R        63/370  =  17.0 %   3.6
+2698       L        46/370  =  12.4 %   1.5
+2699       N        23/370  =   6.2 %   0.5
+2700       S         1/370  =   0.3 %   0.0
+2701       E         1/370  =   0.3 %   0.0
+2702       Q         1/370  =   0.3 %   0.0
+2703       Q        51/370  =  13.8 %   2.9
+2704       W        60/370  =  16.2 %   7.3
+2705       T        32/370  =   8.6 %   0.7
+2706       H         8/370  =   2.2 %   8.0
+2707       P         6/370  =   1.6 %   3.2
+2708       L        28/370  =   7.6 %   0.2
+2709       P        29/370  =   7.8 %   1.1
+2710       M        21/370  =   5.7 %   1.0
+2711       D        16/370  =   4.3 %   0.9
+2712       S        20/370  =   5.4 %   0.7
+2713       L        28/370  =   7.6 %   1.3
+2714       P        21/370  =   5.7 %   0.8
+2715       S        26/370  =   7.0 %   0.7
+2716       V        24/370  =   6.5 %   0.1
+2717       A        25/370  =   6.8 %   0.3
+2718       S        28/370  =   7.6 %   0.6
+2719       Q        17/370  =   4.6 %   0.1
+2720       L         6/370  =   1.6 %   1.4
+2721       E        31/370  =   8.4 %   1.1
+2722       A        19/370  =   5.1 %   0.1
+2723       N        40/370  =  10.8 %   1.8
+2724       Q         1/370  =   0.3 %   0.0
+2725       S        28/370  =   7.6 %   0.5
+2726       D        24/370  =   6.5 %   0.7
+2727       K        40/370  =  10.8 %   1.4
+2728       T        22/370  =   5.9 %   0.4
+2729       G        41/370  =  11.1 %   1.6
+2730       A        37/370  =  10.0 %   0.7
+2731       N         1/370  =   0.3 %   0.0
+2732       I        38/370  =  10.3 %   0.9
+2733       R        24/370  =   6.5 %   0.1
+2734       A        40/370  =  10.8 %   2.2
+2735       G         5/370  =   1.4 %   2.4
+2736       L         5/370  =   1.4 %   2.3
+2737       S         6/370  =   1.6 %   4.0
+2738       I         5/370  =   1.4 %   2.2
+2739       G         6/370  =   1.6 %   3.9
+2740       P         7/370  =   1.9 %   7.0
+2741       P        52/370  =  14.1 %   3.9
+2742       R         1/370  =   0.3 %   0.0
+2743       S         1/370  =   0.3 %   0.0
+2744       Q         1/370  =   0.3 %   0.0
+2745       G        60/370  =  16.2 %   4.5
+2746       K        24/370  =   6.5 %   0.3
+2747       T        35/370  =   9.5 %   1.3
+2748       A         3/370  =   0.8 %   0.3
+2749       K         2/370  =   0.5 %   0.2
+2750       S         2/370  =   0.5 %   0.3
+2751       S         1/370  =   0.3 %   0.5
+2752       G         1/370  =   0.3 %   0.0
+2753       T         1/370  =   0.3 %   0.0
+2754       Q         1/370  =   0.3 %   0.0
+2755       L         1/370  =   0.3 %   0.0
+2756       A         1/370  =   0.3 %   0.0
+2757       L         1/370  =   0.3 %   0.0
+2758       T         2/370  =   0.5 %   0.8
+2759       L         2/370  =   0.5 %   0.1
+2760       A         2/370  =   0.5 %   0.1
+2761       R        16/370  =   4.3 %   0.3
+2762       G        17/370  =   4.6 %   0.1
+2763       L         1/370  =   0.3 %   0.0
+2764       G        19/370  =   5.1 %   0.3
+2765       S        31/370  =   8.4 %   0.6
+2766       P        30/370  =   8.1 %   1.1
+2767       Y        23/370  =   6.2 %   0.8
+2768       N        29/370  =   7.8 %   0.9
+2769       Q        17/370  =   4.6 %   0.2
+2770       Y        24/370  =   6.5 %   0.9
+2771       D        37/370  =  10.0 %   2.0
+2772       I        26/370  =   7.0 %   0.7
+2773       G         9/370  =   2.4 %   1.1
+2774       S         9/370  =   2.4 %   0.7
+2775       A         1/370  =   0.3 %   0.0
+2776       D         1/370  =   0.3 %   0.0
+2777       L        15/370  =   4.1 %   1.8
+2778       G        17/370  =   4.6 %   4.5
+2779       I        22/370  =   5.9 %   0.6
+2780       Q        27/370  =   7.3 %   0.7
+2781       D         1/370  =   0.3 %   0.0
+2782       G         2/370  =   0.5 %   6.0
+2783       Y         1/370  =   0.3 %   0.0
+2784       V         1/370  =   0.3 %   0.0
+2785       I         1/370  =   0.3 %   0.0
+2786       L         1/370  =   0.3 %   0.0
+2787       G         1/370  =   0.3 %   0.0
+2788       R         1/370  =   0.3 %   0.0
+2789       D         1/370  =   0.3 %   0.0
+2790       R         1/370  =   0.3 %   0.0
+2791       E         1/370  =   0.3 %   0.0
+2792       I         1/370  =   0.3 %   0.0
+2793       D         1/370  =   0.3 %   0.0
+2794       W         1/370  =   0.3 %   0.0
+2795       S         1/370  =   0.3 %   0.0
+2796       F         1/370  =   0.3 %   0.0
+2797       F         1/370  =   0.3 %   0.0
+2798       S         1/370  =   0.3 %   0.0
+2799       F         1/370  =   0.3 %   0.0
+2800       R         1/370  =   0.3 %   0.0
+2801       L         1/370  =   0.3 %   0.0
+2802       Y         1/370  =   0.3 %   0.0
+2803       V         1/370  =   0.3 %   0.0
+2804       P         1/370  =   0.3 %   0.0
+2805       S         2/370  =   0.5 %   4.0
+2806       P         2/370  =   0.5 %   1.3
+2807       N        18/370  =   4.9 %   0.5
+2808       D        36/370  =   9.7 %   1.7
+2809       T        33/370  =   8.9 %   1.0
+2810       S        20/370  =   5.4 %   0.4
+2811       P        19/370  =   5.1 %   0.2
+2812       S        24/370  =   6.5 %   0.7
+2813       S        17/370  =   4.6 %   2.6
+2814       P        16/370  =   4.3 %   0.1
+2815       P        19/370  =   5.1 %   0.3
+2816       G        29/370  =   7.8 %   0.8
+2817       S        19/370  =   5.1 %   0.3
+2818       I        28/370  =   7.6 %   0.8
+2819       G        45/370  =  12.2 %   2.5
+2820       D        55/370  =  14.9 %   4.3
+2821       G        36/370  =   9.7 %   1.7
+2822       W        61/370  =  16.5 %   9.5
+2823       P        37/370  =  10.0 %   1.7
+2824       D        22/370  =   5.9 %   0.4
+2825       R         1/370  =   0.3 %   0.0
+2826       A        35/370  =   9.5 %   1.2
+2827       K        34/370  =   9.2 %   1.4
+2828       S        47/370  =  12.7 %   2.1
+2829       G         1/370  =   0.3 %   0.0
+2830       A         1/370  =   0.3 %   0.0
+2831       V         1/370  =   0.3 %   0.0
+2832       G         1/370  =   0.3 %   0.0
+2833       G         2/370  =   0.5 %   6.0
+2834       A         1/370  =   0.3 %   0.2
+2835       P        29/370  =   7.8 %   1.1
+2836       N        24/370  =   6.5 %   0.8
+2837       T        17/370  =   4.6 %   0.4
+2838       N        35/370  =   9.5 %   2.8
+2839       K        48/370  =  13.0 %   4.2
+2840       I        23/370  =   6.2 %   0.4
+2841       G        30/370  =   8.1 %   1.0
+2842       P         3/370  =   0.8 %   1.8
+2843       S         3/370  =   0.8 %   1.1
+2844       S        32/370  =   8.6 %   2.0
+2845       V         5/370  =   1.4 %   0.6
+2846       A         6/370  =   1.6 %   2.1
+2847       P         1/370  =   0.3 %   0.0
+2848       N         1/370  =   0.3 %   0.0
+2849       A         1/370  =   0.3 %   0.0
+2850       A         1/370  =   0.3 %   0.0
+2851       S         2/370  =   0.5 %   4.0
+2852       P         4/370  =   1.1 %   1.2
+2853       T         4/370  =   1.1 %   0.6
+2854       K        17/370  =   4.6 %   0.3
+2855       L         1/370  =   0.3 %   0.0
+2856       S        32/370  =   8.6 %   1.0
+2857       S        38/370  =  10.3 %   1.5
+2858       N        18/370  =   4.9 %   0.3
+2859       A        16/370  =   4.3 %   0.2
+2860       T         2/370  =   0.5 %   5.0
+2861       A         2/370  =   0.5 %   4.0
+2862       A         2/370  =   0.5 %   4.0
+2863       P         2/370  =   0.5 %   7.0
+2864       A         2/370  =   0.5 %   4.0
+2865       Y         2/370  =   0.5 %   7.0
+2866       T         2/370  =   0.5 %   5.0
+2867       S        26/370  =   7.0 %   0.7
+2868       A         6/370  =   1.6 %   4.0
+2869       A         5/370  =   1.4 %   2.8
+2870       T         5/370  =   1.4 %   3.3
+2871       S         1/370  =   0.3 %   0.0
+2872       S         1/370  =   0.3 %   0.0
+2873       A         1/370  =   0.3 %   0.0
+2874       A         1/370  =   0.3 %   0.0
+2875       A         1/370  =   0.3 %   0.0
+2876       T         1/370  =   0.3 %   0.0
+2877       A         6/370  =   1.6 %   4.0
+2878       Y         6/370  =   1.6 %   7.0
+2879       T         6/370  =   1.6 %   5.0
+2880       D         6/370  =   1.6 %   6.0
+2881       W        38/370  =  10.3 %   3.2
+2882       S         2/370  =   0.5 %   1.0
+2883       N         1/370  =   0.3 %   0.5
+2884       A         1/370  =   0.3 %   0.0
+2885       I         1/370  =   0.3 %   0.0
+2886       D         1/370  =   0.3 %   0.0
+2887       A         1/370  =   0.3 %   0.0
+2888       P         1/370  =   0.3 %   0.0
+2889       Q         1/370  =   0.3 %   0.0
+2890       Q         1/370  =   0.3 %   0.0
+2891       S         1/370  =   0.3 %   0.0
+2892       Q         1/370  =   0.3 %   0.0
+2893       T         1/370  =   0.3 %   0.0
+2894       Q         1/370  =   0.3 %   0.0
+2895       A         1/370  =   0.3 %   0.0
+2896       Q         1/370  =   0.3 %   0.0
+2897       M         1/370  =   0.3 %   0.0
+2898       A         1/370  =   0.3 %   0.0
+2899       L         1/370  =   0.3 %   0.0
+2900       S         1/370  =   0.3 %   0.0
+2901       D         1/370  =   0.3 %   0.0
+2902       A         1/370  =   0.3 %   0.0
+2903       D         1/370  =   0.3 %   0.0
+2904       P        40/370  =  10.8 %   2.2
+2905       P        49/370  =  13.2 %   3.9
+2906       E        62/370  =  16.8 %   4.9
+2907       F        62/370  =  16.8 %   5.8
+2908       E        24/370  =   6.5 %   0.8
+2909       P        63/370  =  17.0 %   7.0
+2910       G        62/370  =  16.8 %   6.0
+2911       K        25/370  =   6.8 %   0.5
+2912       P        62/370  =  16.8 %   6.8
+2913       W        63/370  =  17.0 %  11.0
+2914       K        60/370  =  16.2 %   4.6
+2915       G        56/370  =  15.1 %   5.1
+2916       K         1/370  =   0.3 %   0.0
+2917       V         1/370  =   0.3 %   0.0
+2918       I        17/370  =   4.6 %   0.1
+2919       Q        43/370  =  11.6 %   2.5
+2920       G         1/370  =   0.3 %   0.0
+2921       K         1/370  =   0.3 %   0.0
+2922       G         1/370  =   0.3 %   0.0
+2923       T         1/370  =   0.3 %   0.0
+2924       N        34/370  =   9.2 %   1.8
+2925       I        34/370  =   9.2 %   0.9
+2926       G         1/370  =   0.3 %   0.0
+2927       D        38/370  =  10.3 %   2.1
+2928       P        36/370  =   9.7 %   1.7
+2929       E        55/370  =  14.9 %   3.9
+2930       D        19/370  =   5.1 %   0.6
+2931       D        60/370  =  16.2 %   5.6
+2932       P        60/370  =  16.2 %   6.5
+2933       Y        28/370  =   7.6 %   0.9
+2934       V        34/370  =   9.2 %   1.8
+2935       T        60/370  =  16.2 %   4.7
+2936       P        61/370  =  16.5 %   6.8
+2937       G        60/370  =  16.2 %   5.6
+2938       S        61/370  =  16.5 %   3.9
+2939       V        56/370  =  15.1 %   3.4
+2940       A        22/370  =   5.9 %   0.3
+2941       R        23/370  =   6.2 %   0.4
+2942       S        31/370  =   8.4 %   1.0
+2943       P         8/370  =   2.2 %   7.0
+2944       P        25/370  =   6.8 %   0.7
+2945       L        20/370  =   5.4 %   0.3
+2946       S        19/370  =   5.1 %   0.4
+2947       I        18/370  =   4.9 %   0.3
+2948       T        20/370  =   5.4 %   0.4
+2949       I        23/370  =   6.2 %   0.7
+2950       I         2/370  =   0.5 %   2.3
+2951       G         3/370  =   0.8 %   6.0
+2952       T        17/370  =   4.6 %   0.3
+2953       D        26/370  =   7.0 %   1.0
+2954       K        22/370  =   5.9 %   0.3
+2955       D        46/370  =  12.4 %   3.6
+2956       H        28/370  =   7.6 %   1.4
+2957       D        17/370  =   4.6 %   0.5
+2958       L        34/370  =   9.2 %   2.1
+2959       L        37/370  =  10.0 %   1.4
+2960       R        32/370  =   8.6 %   1.1
+2961       D        31/370  =   8.4 %   2.9
+2962       N        19/370  =   5.1 %   1.3
+2963       N        25/370  =   6.8 %   1.1
+2964       T        29/370  =   7.8 %   1.0
+2965       G        49/370  =  13.2 %   3.5
+2966       S        35/370  =   9.5 %   1.2
+2967       V         1/370  =   0.3 %   0.0
+2968       P         1/370  =   0.3 %   0.0
+2969       R         1/370  =   0.3 %   0.0
+2970       P         1/370  =   0.3 %   0.0
+2971       N        30/370  =   8.1 %   1.5
+2972       K         1/370  =   0.3 %   0.0
+2973       D         1/370  =   0.3 %   0.0
+2974       D         1/370  =   0.3 %   0.0
+2975       P         1/370  =   0.3 %   0.0
+2976       S        49/370  =  13.2 %   2.8
+2977       E         1/370  =   0.3 %   0.0
+2978       S        29/370  =   7.8 %   0.9
+2979       L        29/370  =   7.8 %   1.6
+2980       N        30/370  =   8.1 %   3.1
+2981       T        42/370  =  11.4 %   2.9
+2982       S        18/370  =   4.9 %   0.4
+2983       L        45/370  =  12.2 %   2.5
+2984       P        43/370  =  11.6 %   3.8
+2985       S        35/370  =   9.5 %   3.1
+2986       P        18/370  =   4.9 %   1.0
+2987       G        20/370  =   5.4 %   1.3
+2988       A        30/370  =   8.1 %   2.0
+2989       W        35/370  =   9.5 %   7.6
+2990       P        30/370  =   8.1 %   1.9
+2991       Y        18/370  =   4.9 %   0.6
+2992       S        33/370  =   8.9 %   1.3
+2993       A        20/370  =   5.4 %   0.3
+2994       S        38/370  =  10.3 %   2.2
+2995       S        26/370  =   7.0 %   1.0
+2996       N        30/370  =   8.1 %   1.9
+2997       S        18/370  =   4.9 %   0.4
+2998       F        20/370  =   5.4 %   0.6
+2999       V        11/370  =   3.0 %   4.0
+3000       P        11/370  =   3.0 %   7.0
+3001       L        11/370  =   3.0 %   4.0
+3002       S        11/370  =   3.0 %   4.0
+3003       S        29/370  =   7.8 %   1.3
+3004       Y         1/370  =   0.3 %   0.0
+3005       N        21/370  =   5.7 %   1.7
+3006       V        16/370  =   4.3 %   0.7
+3007       H        18/370  =   4.9 %   0.8
+3008       S        29/370  =   7.8 %   1.3
+3009       T        31/370  =   8.4 %   1.5
+3010       S        29/370  =   7.8 %   1.3
+3011       A        31/370  =   8.4 %   0.9
+3012       A         1/370  =   0.3 %   0.0
+3013       S         1/370  =   0.3 %   0.0
+3014       G         1/370  =   0.3 %   0.0
+3015       N         1/370  =   0.3 %   0.0
+3016       G         1/370  =   0.3 %   0.0
+3017       G         1/370  =   0.3 %   0.0
+3018       G         1/370  =   0.3 %   0.0
+3019       S         1/370  =   0.3 %   0.0
+3020       G         1/370  =   0.3 %   0.0
+3021       G         1/370  =   0.3 %   0.0
+3022       K        27/370  =   7.3 %   1.1
+3023       F        28/370  =   7.6 %   0.9
+3024       P        30/370  =   8.1 %   1.2
+3025       L         1/370  =   0.3 %   0.0
+3026       D        34/370  =   9.2 %   1.6
+3027       Y        17/370  =   4.6 %   0.4
+3028       K        45/370  =  12.2 %   4.0
+3029       S        28/370  =   7.6 %   0.9
+3030       T        39/370  =  10.5 %   2.6
+3031       W        61/370  =  16.5 %   9.9
+3032       S        56/370  =  15.1 %   3.0
+3033       P        33/370  =   8.9 %   1.5
+3034       S         1/370  =   0.3 %   0.0
+3035       S         1/370  =   0.3 %   0.0
+3036       P         1/370  =   0.3 %   0.0
+3037       Q         1/370  =   0.3 %   0.0
+3038       G        22/370  =   5.9 %   0.5
+3039       P        29/370  =   7.8 %   1.7
+3040       I        22/370  =   5.9 %   1.0
+3041       G         1/370  =   0.3 %   0.0
+3042       S         1/370  =   0.3 %   0.0
+3043       G         1/370  =   0.3 %   0.0
+3044       A         1/370  =   0.3 %   0.0
+3045       G         2/370  =   0.5 %   6.0
+3046       G        21/370  =   5.7 %   0.9
+3047       H        23/370  =   6.2 %   3.1
+3048       N        16/370  =   4.3 %   0.7
+3049       Q        22/370  =   5.9 %   0.5
+3050       T        28/370  =   7.6 %   1.0
+3051       S        21/370  =   5.7 %   0.4
+3052       L        36/370  =   9.7 %   1.1
+3053       S        26/370  =   7.0 %   0.9
+3054       S        21/370  =   5.7 %   0.7
+3055       E        33/370  =   8.9 %   1.7
+3056       L        40/370  =  10.8 %   1.8
+3057       W        65/370  =  17.6 %  10.6
+3058       K        40/370  =  10.8 %   1.6
+3059       N        20/370  =   5.4 %   0.3
+3060       P        39/370  =  10.5 %   2.0
+3061       L        30/370  =   8.1 %   0.9
+3062       S        21/370  =   5.7 %   0.5
+3063       S        24/370  =   6.5 %   0.5
+3064       G         1/370  =   0.3 %   0.0
+3065       G         1/370  =   0.3 %   0.0
+3066       G         1/370  =   0.3 %   0.0
+3067       G         1/370  =   0.3 %   0.0
+3068       G         1/370  =   0.3 %   0.0
+3069       A         1/370  =   0.3 %   0.0
+3070       G         1/370  =   0.3 %   0.0
+3071       R        22/370  =   5.9 %   1.6
+3072       N        32/370  =   8.6 %   3.2
+3073       L         1/370  =   0.3 %   0.0
+3074       S         1/370  =   0.3 %   0.0
+3075       T        19/370  =   5.1 %   0.8
+3076       G         1/370  =   0.3 %   0.0
+3077       N         1/370  =   0.3 %   0.0
+3078       T        38/370  =  10.3 %   1.7
+3079       A        23/370  =   6.2 %   0.4
+3080       P        26/370  =   7.0 %   0.4
+3081       R        23/370  =   6.2 %   0.3
+3082       A         1/370  =   0.3 %   0.0
+3083       R        43/370  =  11.6 %   1.3
+3084       P        66/370  =  17.8 %   6.1
+3085       P        69/370  =  18.6 %   6.8
+3086       P        66/370  =  17.8 %   6.0
+3087       G        68/370  =  18.4 %   5.1
+3088       L        64/370  =  17.3 %   2.9
+3089       T        47/370  =  12.7 %   2.1
+3090       N        28/370  =   7.6 %   0.7
+3091       P        31/370  =   8.4 %   0.8
+3092       K        56/370  =  15.1 %   2.5
+3093       N         1/370  =   0.3 %   0.0
+3094       S         1/370  =   0.3 %   0.0
+3095       I         1/370  =   0.3 %   0.0
+3096       P        39/370  =  10.5 %   1.4
+3097       P        20/370  =   5.4 %   0.2
+3098       S         7/370  =   1.9 %   2.1
+3099       A         2/370  =   0.5 %   1.0
+3100       N         2/370  =   0.5 %   6.0
+3101       G         2/370  =   0.5 %   6.0
+3102       V         2/370  =   0.5 %   4.0
+3103       S         2/370  =   0.5 %   4.0
+3104       G         2/370  =   0.5 %   0.0
+3105       L        11/370  =   3.0 %   0.5
+3106       S        52/370  =  14.1 %   1.7
+3107       P        23/370  =   6.2 %   0.3
+3108       W        45/370  =  12.2 %   2.7
+3109       G         1/370  =   0.3 %   0.0
+3110       G         1/370  =   0.3 %   0.0
+3111       P         1/370  =   0.3 %   0.0
+3112       T         1/370  =   0.3 %   0.0
+3113       G         1/370  =   0.3 %   0.0
+3114       P         1/370  =   0.3 %   0.0
+3115       G         1/370  =   0.3 %   0.0
+3116       S         1/370  =   0.3 %   0.0
+3117       G         1/370  =   0.3 %   0.0
+3118       T         1/370  =   0.3 %   0.0
+3119       A         1/370  =   0.3 %   0.0
+3120       T         1/370  =   0.3 %   0.0
+3121       S         1/370  =   0.3 %   0.0
+3122       S        42/370  =  11.4 %   1.1
+3123       S        35/370  =   9.5 %   0.8
+3124       T        30/370  =   8.1 %   0.6
+3125       A        29/370  =   7.8 %   0.4
+3126       T         5/370  =   1.4 %   0.7
+3127       P         6/370  =   1.6 %   1.3
+3128       S         2/370  =   0.5 %   0.5
+3129       T         2/370  =   0.5 %   1.3
+3130       V         1/370  =   0.3 %   0.0
+3131       L         1/370  =   0.3 %   0.0
+3132       P         2/370  =   0.5 %   2.0
+3133       T         6/370  =   1.6 %   1.9
+3134       T         9/370  =   2.4 %   2.6
+3135       I         5/370  =   1.4 %   0.9
+3136       P        35/370  =   9.5 %   0.6
+3137       R        37/370  =  10.0 %   0.6
+3138       G         1/370  =   0.3 %   0.0
+3139       R         1/370  =   0.3 %   0.5
+3140       G         1/370  =   0.3 %   0.0
+3141       S         1/370  =   0.3 %   0.0
+3142       S         1/370  =   0.3 %   0.0
+3143       G         1/370  =   0.3 %   0.0
+3144       D         1/370  =   0.3 %   1.0
+3145       E         1/370  =   0.3 %   0.2
+3146       S        24/370  =   6.5 %   0.2
+3147       V        22/370  =   5.9 %   0.2
+3148       G        23/370  =   6.2 %   0.2
+3149       G        90/370  =  24.3 %   4.8
+3150       W        61/370  =  16.5 %   3.7
+3151       T         2/370  =   0.5 %   5.0
+3152       G        48/370  =  13.0 %   0.9
+3153       N         1/370  =   0.3 %   0.0
+3154       N         1/370  =   0.3 %   0.0
+3155       Q         1/370  =   0.3 %   0.0
+3156       P         1/370  =   0.3 %   0.0
+3157       I         1/370  =   0.3 %   0.0
+3158       P         1/370  =   0.3 %   0.0
+3159       S         1/370  =   0.3 %   0.0
+3160       A         1/370  =   0.3 %   0.0
+3161       A         1/370  =   0.3 %   0.0
+3162       G         2/370  =   0.5 %   1.3
+3163       I         2/370  =   0.5 %   0.0
+3164       T        24/370  =   6.5 %   0.2
+3165       Q        36/370  =   9.7 %   0.6
+3166       D        34/370  =   9.2 %   0.5
+3167       G         4/370  =   1.1 %   3.2
+3168       Y         1/370  =   0.3 %   0.0
+3169       V         3/370  =   0.8 %   0.3
+3170       S        64/370  =  17.3 %   1.9
+3171       R        36/370  =   9.7 %   0.4
+3172       G         3/370  =   0.8 %   1.0
+3173       G         1/370  =   0.3 %   0.0
+3174       V         7/370  =   1.9 %   1.8
+3175       Y        23/370  =   6.2 %   0.2
+3176       A        30/370  =   8.1 %   0.3
+3177       S        35/370  =   9.5 %   0.4
+3178       V         1/370  =   0.3 %   0.0
+3179       G        42/370  =  11.4 %   0.8
+3180       S        49/370  =  13.2 %   0.9
+3181       T        31/370  =   8.4 %   0.3
+3182       W        62/370  =  16.8 %   3.3
+3183       S        38/370  =  10.3 %   0.6
+3184       D        30/370  =   8.1 %   0.4
+3185       G        52/370  =  14.1 %   1.2
+3186       F         4/370  =   1.1 %   0.3
+3187       A         1/370  =   0.3 %   0.0
+3188       N         1/370  =   0.3 %   0.0
+3189       A         2/370  =   0.5 %   4.0
+3190       P         3/370  =   0.8 %   0.6
+3191       S         3/370  =   0.8 %   0.2
+3192       S        27/370  =   7.3 %   0.3
+3193       S        55/370  =  14.9 %   1.5
+3194       D        27/370  =   7.3 %   0.1
+3195       R        40/370  =  10.8 %   0.1
+3196       N        34/370  =   9.2 %   0.3
+3197       S         1/370  =   0.3 %   0.0
+3198       S         1/370  =   0.3 %   0.0
+3199       S         1/370  =   0.3 %   0.0
+3200       G         1/370  =   0.3 %   0.0
+3201       R         1/370  =   0.3 %   0.0
+3202       S        59/370  =  15.9 %   1.0
+3203       N         1/370  =   0.3 %   0.0
+3204       T        54/370  =  14.6 %   0.7
+3205       W        64/370  =  17.3 %   1.5
+3206       L       129/370  =  34.9 %   2.1
+3207       Y        70/370  =  18.9 %   1.0
+3208       L        76/370  =  20.5 %   0.9
+3209       K       111/370  =  30.0 %   1.2
+3210       N       158/370  =  42.7 %   3.7
+3211       L       177/370  =  47.8 %   3.2
+3212       D       105/370  =  28.4 %   1.4
+3213       P        82/370  =  22.2 %   0.8
+3214       Q        64/370  =  17.3 %   0.4
+3215       A         1/370  =   0.3 %   0.0
+3216       D         1/370  =   0.3 %   0.0
+3217       C         1/370  =   0.3 %   0.0
+3218       D         1/370  =   0.3 %   0.0
+3219       G         1/370  =   0.3 %   0.0
+3220       L         1/370  =   0.3 %   0.5
+3221       S         1/370  =   0.3 %   0.5
+3222       L         1/370  =   0.3 %   0.0
+3223       R         1/370  =   0.3 %   0.0
+3224       L         1/370  =   0.3 %   0.0
+3225       S         1/370  =   0.3 %   0.0
+3226       A         1/370  =   0.3 %   0.5
+3227       T         2/370  =   0.5 %   5.0
+3228       E         1/370  =   0.3 %   0.0
+3229       A         1/370  =   0.3 %   0.5
+3230       D         1/370  =   0.3 %   1.0
+3231       F         1/370  =   0.3 %   0.0
+3232       D         1/370  =   0.3 %   0.0
+3233       V         4/370  =   1.1 %   1.3
+3234       I       129/370  =  34.9 %   2.2
+3235       D       122/370  =  33.0 %   2.0
+3236       D        93/370  =  25.1 %   1.2
+3237       E        86/370  =  23.2 %   1.0
+3238       T        67/370  =  18.1 %   0.3
+3239       L       190/370  =  51.4 %   3.6
+3240       R       146/370  =  39.5 %   2.8
+3241       T        65/370  =  17.6 %   0.3
+3242       H         1/370  =   0.3 %   0.0
+3243       F         1/370  =   0.3 %   0.0
+3244       S         1/370  =   0.3 %   0.0
+3245       L        75/370  =  20.3 %   0.4
+3246       F       130/370  =  35.1 %   2.0
+3247       S        93/370  =  25.1 %   0.6
+3248       Q       121/370  =  32.7 %   1.6
+3249       F        91/370  =  24.6 %   1.3
+3250       T         1/370  =   0.3 %   0.0
+3251       S         1/370  =   0.3 %   0.0
+3252       G       203/370  =  54.9 %   5.9
+3253       P        74/370  =  20.0 %   0.6
+3254       L        89/370  =  24.1 %   1.2
+3255       V        55/370  =  14.9 %   0.4
+3256       S       107/370  =  28.9 %   1.1
+3257       A         1/370  =   0.3 %   0.0
+3258       K         1/370  =   0.3 %   0.0
+3259       V         1/370  =   0.3 %   0.0
+3260       M         1/370  =   0.3 %   0.0
+3261       R         1/370  =   0.3 %   0.0
+3262       F        67/370  =  18.1 %   0.3
+3263       I         1/370  =   0.3 %   0.0
+3264       V         1/370  =   0.3 %   0.0
+3265       M         1/370  =   0.3 %   0.0
+3266       K         1/370  =   0.3 %   0.0
+3267       D         1/370  =   0.3 %   0.0
+3268       D         1/370  =   0.3 %   0.0
+3269       K       119/370  =  32.2 %   1.5
+3270       Y         1/370  =   0.3 %   0.0
+3271       P         1/370  =   0.3 %   0.0
+3272       K         1/370  =   0.3 %   0.0
+3273       D         1/370  =   0.3 %   0.0
+3274       K         1/370  =   0.3 %   0.0
+3275       V         1/370  =   0.3 %   0.0
+3276       V        74/370  =  20.0 %   0.9
+3277       M        17/370  =   4.6 %   2.7
+3278       R        10/370  =   2.7 %   0.9
+3279       D         3/370  =   0.8 %   6.0
+3280       D        12/370  =   3.2 %   2.1
+3281       E         7/370  =   1.9 %   0.3
+3282       N         8/370  =   2.2 %   0.8
+3283       P        48/370  =  13.0 %   0.0
+3284       L         3/370  =   0.8 %   0.3
+3285       D         3/370  =   0.8 %   1.8
+3286       Q         3/370  =   0.8 %   2.2
+3287       Q         3/370  =   0.8 %   1.5
+3288       G         5/370  =   1.4 %   6.0
+3289       L        92/370  =  24.9 %   0.6
+3290       E        32/370  =   8.6 %   2.9
+3291       D        18/370  =   4.9 %   1.0
+3292       N         3/370  =   0.8 %   0.3
+3293       G        45/370  =  12.2 %   6.0
+3294       R        33/370  =   8.9 %   2.7
+3295       S        88/370  =  23.8 %   0.7
+3296       S         1/370  =   0.3 %   0.0
+3297       N         1/370  =   0.3 %   0.0
+3298       T         1/370  =   0.3 %   0.0
+3299       R         1/370  =   0.3 %   0.0
+3300       K         1/370  =   0.3 %   0.0
+3301       D         1/370  =   0.3 %   0.0
+3302       K       124/370  =  33.5 %   1.8
+3303       G         1/370  =   0.3 %   0.0
+3304       D         1/370  =   0.3 %   0.0
+3305       G         1/370  =   0.3 %   0.0
+3306       T         1/370  =   0.3 %   0.0
+3307       H         1/370  =   0.3 %   0.0
+3308       R         1/370  =   0.3 %   1.0
+3309       G       187/370  =  50.5 %   4.4
+3310       F        75/370  =  20.3 %   0.4
+3311       Y         1/370  =   0.3 %   0.0
+3312       K         1/370  =   0.3 %   0.0
+3313       Y         1/370  =   0.3 %   0.0
+3314       G       126/370  =  34.1 %   2.0
+3315       F       143/370  =  38.6 %   2.6
+3316       V       163/370  =  44.1 %   2.6
+3317       Q        55/370  =  14.9 %   0.2
+3318       Y       109/370  =  29.5 %   2.5
+3319       S       118/370  =  31.9 %   1.3
+3320       S        92/370  =  24.9 %   0.9
+3321       R        67/370  =  18.1 %   0.4
+3322       E       123/370  =  33.2 %   1.8
+3323       E       136/370  =  36.8 %   2.0
+3324       A       200/370  =  54.1 %   3.5
+3325       E        48/370  =  13.0 %   0.1
+3326       K       122/370  =  33.0 %   1.7
+3327       A       213/370  =  57.6 %   4.0
+3328       Q        65/370  =  17.6 %   0.3
+3329       T        61/370  =  16.5 %   0.3
+3330       A        62/370  =  16.8 %   0.2
+3331       L       141/370  =  38.1 %   2.2
+3332       N       137/370  =  37.0 %   2.7
+3333       G       124/370  =  33.5 %   1.7
+3334       C        62/370  =  16.8 %   0.4
+3335       V        77/370  =  20.8 %   0.7
+3336       L       102/370  =  27.6 %   1.4
+3337       M         2/370  =   0.5 %   5.0
+3338       P         2/370  =   0.5 %   7.0
+3339       G         2/370  =   0.5 %   6.0
+3340       G       143/370  =  38.6 %   2.8
+3341       N        60/370  =  16.2 %   0.6
+3342       K        70/370  =  18.9 %   0.6
+3343       T        84/370  =  22.7 %   0.8
+3344       F         1/370  =   0.3 %   0.0
+3345       H         1/370  =   0.3 %   0.0
+3346       I        82/370  =  22.2 %   1.3
+3347       R         2/370  =   0.5 %   5.0
+3348       L         2/370  =   0.5 %   4.0
+3349       Y        50/370  =  13.5 %   5.5
+3350       V        54/370  =  14.6 %   0.5
+3351       V         2/370  =   0.5 %   4.0
+3352       A       115/370  =  31.1 %   2.5
+3353       E        61/370  =  16.5 %   0.5
+3354       F        54/370  =  14.6 %   0.4
+3355       A         2/370  =   0.5 %   1.0
+3356       Q        53/370  =  14.3 %   0.4
+3357       R        49/370  =  13.2 %   0.4
+3358       E        57/370  =  15.4 %   1.0
+3359       E        70/370  =  18.9 %   1.3
+3360       A         1/370  =   0.3 %   0.0
+3361       A         1/370  =   0.3 %   0.0
+3362       D         1/370  =   0.3 %   0.0
+3363       D         1/370  =   0.3 %   0.0
+3364       E       112/370  =  30.3 %   3.4
+3365       D         1/370  =   0.3 %   0.0
+3366       R         1/370  =   0.3 %   0.0
+3367       I         1/370  =   0.3 %   0.0
+3368       K         1/370  =   0.3 %   0.0
+3369       R         1/370  =   0.3 %   0.0
+3370       V        56/370  =  15.1 %   0.3
+3371       Q        39/370  =  10.5 %   0.5
+3372       R         1/370  =   0.3 %   0.0
+3373       T         1/370  =   0.3 %   0.0
+3374       M         1/370  =   0.3 %   0.0
+3375       R        50/370  =  13.5 %   0.5
+3376       F        43/370  =  11.6 %   0.5
+3377       L        89/370  =  24.1 %   1.7
+3378       A        41/370  =  11.1 %   0.3
+3379       Q        61/370  =  16.5 %   1.4
+3380       A        23/370  =   6.2 %   0.1
+3381       Q        54/370  =  14.6 %   0.8
+3382       P        29/370  =   7.8 %   0.2
+3383       Q        39/370  =  10.5 %   0.4
+3384       T        36/370  =   9.7 %   0.4
+3385       P        49/370  =  13.2 %   1.1
+3386       A        31/370  =   8.4 %   0.4
+3387       S        28/370  =   7.6 %   0.4
+3388       T        35/370  =   9.5 %   0.7
+3389       P        20/370  =   5.4 %   0.1
+3390       S        35/370  =   9.5 %   0.7
+3391       A        31/370  =   8.4 %   0.6
+3392       L         1/370  =   0.3 %   0.0
+3393       P        26/370  =   7.0 %   1.0
+3394       G         1/370  =   0.3 %   0.0
+3395       A         1/370  =   0.3 %   0.0
+3396       P         1/370  =   0.3 %   0.0
+3397       P         2/370  =   0.5 %   7.0
+3398       G         4/370  =   1.1 %   0.9
+3399       S        34/370  =   9.2 %   0.8
+3400       S        23/370  =   6.2 %   0.2
+3401       G        57/370  =  15.4 %   2.7
+3402       D         1/370  =   0.3 %   0.0
+3403       R         1/370  =   0.3 %   0.0
+3404       Y         1/370  =   0.3 %   0.0
+3405       W        35/370  =   9.5 %   1.5
+3406       Q        39/370  =  10.5 %   1.0
+3407       S        43/370  =  11.6 %   1.0
+3408       L        32/370  =   8.6 %   0.3
+3409       G        26/370  =   7.0 %   0.3
+3410       G         2/370  =   0.5 %   1.0
+3411       G         1/370  =   0.3 %   0.0
+3412       G         5/370  =   1.4 %   2.1
+3413       S        19/370  =   5.1 %   0.3
+3414       S        34/370  =   9.2 %   0.8
+3415       G         2/370  =   0.5 %   1.0
+3416       G         1/370  =   0.3 %   0.0
+3417       I         1/370  =   0.3 %   0.0
+3418       V         1/370  =   0.3 %   0.0
+3419       G         1/370  =   0.3 %   0.0
+3420       G         1/370  =   0.3 %   0.0
+3421       V         1/370  =   0.3 %   0.0
+3422       D         1/370  =   0.3 %   0.0
+3423       T         2/370  =   0.5 %   1.3
+3424       Q        40/370  =  10.8 %   1.2
+3425       S         2/370  =   0.5 %   0.4
+3426       N         1/370  =   0.3 %   0.0
+3427       P         2/370  =   0.5 %   1.7
+3428       A         1/370  =   0.3 %   0.0
+3429       S        25/370  =   6.8 %   0.4
+3430       R        20/370  =   5.4 %   0.3
+3431       S        19/370  =   5.1 %   0.2
+3432       G        22/370  =   5.9 %   0.4
+3433       R         1/370  =   0.3 %   0.0
+3434       A         3/370  =   0.8 %   0.4
+3435       P        24/370  =   6.5 %   0.5
+3436       V        18/370  =   4.9 %   0.2
+3437       G        37/370  =  10.0 %   1.6
+3438       P        20/370  =   5.4 %   0.6
+3439       A        23/370  =   6.2 %   0.5
+3440       L        17/370  =   4.6 %   0.1
+3441       N        16/370  =   4.3 %   0.3
+3442       L        28/370  =   7.6 %   0.4
+3443       F        28/370  =   7.6 %   0.5
+3444       G        30/370  =   8.1 %   1.0
+3445       Q         1/370  =   0.3 %   0.0
+3446       W         1/370  =   0.3 %   0.0
+3447       G         2/370  =   0.5 %   0.7
+3448       S        24/370  =   6.5 %   0.6
+3449       S        26/370  =   7.0 %   0.6
+3450       T        29/370  =   7.8 %   1.0
+3451       G        32/370  =   8.6 %   1.2
+3452       L        21/370  =   5.7 %   0.1
+3453       G        33/370  =   8.9 %   1.5
+3454       Y         1/370  =   0.3 %   0.0
+3455       C         1/370  =   0.3 %   0.0
+3456       A         1/370  =   0.3 %   0.0
+3457       P         1/370  =   0.3 %   0.0
+3458       Q        18/370  =   4.9 %   0.4
+3459       W        34/370  =   9.2 %   2.8
+3460       G         1/370  =   0.3 %   0.0
+3461       S        25/370  =   6.8 %   0.8
+3462       S        26/370  =   7.0 %   0.7
+3463       S        27/370  =   7.3 %   0.8
+3464       M         2/370  =   0.5 %   1.0
+3465       G        11/370  =   3.0 %   3.3
+3466       A        18/370  =   4.9 %   0.3
+3467       G        29/370  =   7.8 %   1.1
+3468       G        48/370  =  13.0 %   3.5
+3469       S        27/370  =   7.3 %   0.8
+3470       S        21/370  =   5.7 %   0.5
+3471       G        27/370  =   7.3 %   0.7
+3472       G         2/370  =   0.5 %   0.7
+3473       N         2/370  =   0.5 %   6.0
+3474       N         2/370  =   0.5 %   0.0
+3475       A        22/370  =   5.9 %   0.9
+3476       D        27/370  =   7.3 %   1.2
+3477       L        29/370  =   7.8 %   0.7
+3478       P         1/370  =   0.3 %   0.0
+3479       R         1/370  =   0.3 %   0.0
+3480       A        20/370  =   5.4 %   0.4
+3481       G        41/370  =  11.1 %   2.5
+3482       L         2/370  =   0.5 %   4.0
+3483       P         2/370  =   0.5 %   7.0
+3484       T        21/370  =   5.7 %   0.4
+3485       S        28/370  =   7.6 %   0.8
+3486       L        40/370  =  10.8 %   1.2
+3487       W        40/370  =  10.8 %   4.2
+3488       G        45/370  =  12.2 %   3.2
+3489       S         1/370  =   0.3 %   0.0
+3490       G         1/370  =   0.3 %   0.0
+3491       W         1/370  =   0.3 %   0.0
+3492       G         5/370  =   1.4 %   3.7
+3493       P        18/370  =   4.9 %   0.3
+3494       P        37/370  =  10.0 %   2.2
+3495       N        18/370  =   4.9 %   0.6
+3496       Y        33/370  =   8.9 %   1.7
+3497       S         1/370  =   0.3 %   0.0
+3498       S         1/370  =   0.3 %   0.0
+3499       S         1/370  =   0.3 %   0.0
+3500       S        41/370  =  11.1 %   1.9
+3501       S        35/370  =   9.5 %   1.7
+3502       G         1/370  =   0.3 %   0.0
+3503       S        47/370  =  12.7 %   2.8
+3504       L        37/370  =  10.0 %   1.5
+3505       G         1/370  =   0.3 %   0.0
+3506       W        39/370  =  10.5 %   5.1
+3507       G        37/370  =  10.0 %   2.5
+3508       P        24/370  =   6.5 %   0.9
+3509       P        36/370  =   9.7 %   3.0
+3510       S        20/370  =   5.4 %   0.8
+3511       V        21/370  =   5.7 %   0.8
+3512       E        21/370  =   5.7 %   0.8
+3513       D        34/370  =   9.2 %   3.0
+3514       P        28/370  =   7.6 %   2.1
+3515       R        19/370  =   5.1 %   0.9
+3516       R        16/370  =   4.3 %   0.1
+3517       I        19/370  =   5.1 %   0.9
+3518       G        31/370  =   8.4 %   2.8
+3519       S        43/370  =  11.6 %   3.6
+3520       P        38/370  =  10.3 %   4.8
+3521       A        16/370  =   4.3 %   0.6
+3522       P        36/370  =   9.7 %   5.0
+3523       L        22/370  =   5.9 %   1.5
+3524       N        19/370  =   5.1 %   4.9
+3525       A        11/370  =   3.0 %   1.1
+3526       F        13/370  =   3.5 %   2.2
+3527       L        38/370  =  10.3 %   4.0
+3528       P        27/370  =   7.3 %   3.3
+3529       G        25/370  =   6.8 %   1.9
+3530       D        37/370  =  10.0 %   5.7
+3531       L        26/370  =   7.0 %   1.2
+3532       L        38/370  =  10.3 %   4.0
+3533       G        26/370  =   7.0 %   2.9
+3534       G        36/370  =   9.7 %   6.0
+3535       G        26/370  =   7.0 %   2.7
+3536       S        24/370  =   6.5 %   1.9
+3537       D        17/370  =   4.6 %   3.0
+3538       S        26/370  =   7.0 %   4.0
+3539       I        16/370  =   4.3 %   1.7
+
+Average conservation = 1.4
diff --git a/test/scripts/automated/belvu/test24 b/test/scripts/automated/belvu/test24
new file mode 100755
index 0000000..4026d83
--- /dev/null
+++ b/test/scripts/automated/belvu/test24
@@ -0,0 +1,24 @@
+#!/bin/ksh
+#
+# Description:
+#   Remove partial sequences and save in aligned-fasta format
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences to the saved results
+diffs=`belvu -P -o FastaAlign $data_dir/ALIGN.selex >&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
+
diff --git a/test/scripts/automated/belvu/test24_results b/test/scripts/automated/belvu/test24_results
new file mode 100644
index 0000000..2f8c7b7
--- /dev/null
+++ b/test/scripts/automated/belvu/test24_results
@@ -0,0 +1,48 @@
+>Q9UPQ9.4/1-1833
+MREKEQEREEQLMEDKKRKKEDKKKKEATQKVTEQKTKVPEVTKPSLSQPTAASPIGSSPSPPVNGGNNAKRVAVPNGQP
+PSAARYMPREVPPRFRCQQDHKVLLKRGQPPPPSCMLLGGGAGPPPCTAPGANPNNAQVTGALLQSESGTAPDSTLGGAA
+ASNYANSTWGSGASSNNGTSPNPIHIWDKVIVDGSDMEEWPCIASKDTESSSENTTDNNSASNPGSEKSTLPGSTTSNKG
+KGSQCQSASSGNECNLGVWKSDPKAKSVQSSNSTTENNNGLGNWRNVSGQDRIGPGSGFSNFNPNSNPSAWPALVQEGTS
+RKGALETDNSNSSAQVSTVGQTSREQQSKMENAGVNFVVSGREQAQIHNTDGPKNGNTNSLNLSSPNPMENKGMPFGMGL
+GNTSRSTDAPSQSTGDRKTGSVGSWGAARGPSGTDTVSGQSNSGNNGNNGKEREDSWKGASVQKSTGSKNDSWDNNNRST
+GGSWNFGPQDSNDNKWGEGNKMTSGVSQGEWKQPTGSDELKIGEWSGPNQPNSSTGAWDNQKGHPLPENQGNAQAPCWGR
+SSSSTGSEVGGQSTGSNHKAGSSDSHNSGRRSYRPTHPDCQAVLQTLLSRTDLDPRVLSNTGWGQTQIKQDTVWDIEEVP
+RPEGKSDKGTEGWESAATQTKNSGGWGDAPSQSNQMKSGWGELSASTEWKDPKNTGGWNDYKNNNSSNWGGGRPDEKTPS
+SWNENPSKDQGWGGGRQPNQGWSSGKNGWGEEVDQTKNSNWESSASKPVSGWGEGGQNEIGTWGNGGNASLASKGGWEDC
+KRSPAWNETGRQPNSWNKQHQQQQPPQQPPPPQPEASGSWGGPPPPPPGNVRPSNSSWSSGPQPATPKDEEPSGWEEPSP
+QSISRKMDIDDGTSAWGDPNSYNYKNVNLWDKNSQGGPAPREPNLPTPMTSKSASVWSKSTPPAPDNGTSAWGEPNESSP
+GWGEMDDTGASTTGWGNTPANAPNAMKPNSKSMQDGWGESDGPVTGARHPSWEEEEDGGVWNTTGSQGSASSHNSASWGQ
+GGKKQMKCSLKGGNNDSWMNPLAKQFSNMGLLSQTEDNPSSKMDLSVGSLSDKKFDVDKRAMNLGDFNDIMRKDRSGFRP
+PNSKDMGTTDSGPYFEKLTLPFSNQDGCLGDEAPCSPFSPSPSYKLSPSGSTLPNVSLGAIGTGLNPQNFAARQGGSHGL
+FGNSTAQSRGLHTPVQPLNSSPSLRAQVPPQFISPQVSASMLKQFPNSGLSPGLFNVGPQLSPQQIAMLSQLPQIPQFQL
+ACQLLLQQQQQQQLLQNQRKISQAVRQQQEQQLARMVSALQQQQQQQQRQPGMKHSPSHPVGPKPHLDNMVPNALNVGLP
+DLQTKGPIPGYGSGFSSGGMDYGMVGGKEAGTESRFKQWTSMMEGLPSVATQEANMHKNGAIVAPGKTRGGSPYNQFDII
+PGDTLGGHTGPAGDSWLPAKSPPTNKIGSKSSNASWPPEFQPGVPWKGIQNIDPESDPYVTPGSVLGGTATSPIVDTDHQ
+LLRDNTTGSNSSLNTSLPSPGAWPYSASDNSFTNVHSTSAKFPDYKSTWSPDPIGHNPTHLSNKMWKNHISSRNTTPLPR
+PPPGLTNPKPSSPWSSTAPRSVRGWGTQDSRLASASTWSDGGSVRPSYWLVLHNLTPQIDGSTLRTICMQHGPLLTFHLN
+LTQGTALIRYSTKQEAAKAQTALHMCVLGNTTILAEFATDDEVSRFLAQAQPPTPAATPSAPAAGWQSLETGQNQSDPVG
+PALNLFGGSTGLGQWSSSAGGSSGADLAGASLWGPPNYSSSLWGVPTVEDPHRMGSPAPLLPGDLLGGGSDSI
+>Q9UPQ9.4/1-1833
+MREKEQEREEQLMEDKKRKKEDKKKKEATQKVTEQKTKVPEVTKPSLSQPTAASPIGSSPSPPVNGGNNAKRVAVPNGQP
+PSAARYMPREVPPRFRCQQDHKVLLKRGQPPPPSCMLLGGGAGPPPCTAPGANPNNAQVTGALLQSESGTAPDSTLGGAA
+ASNYANSTWGSGASSNNGTSPNPIHIWDKVIVDGSDMEEWPCIASKDTESSSENTTDNNSASNPGSEKSTLPGSTTSNKG
+KGSQCQSASSGNECNLGVWKSDPKAKSVQSSNSTTENNNGLGNWRNVSGQDRIGPGSGFSNFNPNSNPSAWPALVQEGTS
+RKGALETDNSNSSAQVSTVGQTSREQQSKMENAGVNFVVSGREQAQIHNTDGPKNGNTNSLNLSSPNPMENKGMPFGMGL
+GNTSRSTDAPSQSTGDRKTGSVGSWGAARGPSGTDTVSGQSNSGNNGNNGKEREDSWKGASVQKSTGSKNDSWDNNNRST
+GGSWNFGPQDSNDNKWGEGNKMTSGVSQGEWKQPTGSDELKIGEWSGPNQPNSSTGAWDNQKGHPLPENQGNAQAPCWGR
+SSSSTGSEVGGQSTGSNHKAGSSDSHNSGRRSYRPTHPDCQAVLQTLLSRTDLDPRVLSNTGWGQTQIKQDTVWDIEEVP
+RPEGKSDKGTEGWESAATQTKNSGGWGDAPSQSNQMKSGWGELSASTEWKDPKNTGGWNDYKNNNSSNWGGGRPDEKTPS
+SWNENPSKDQGWGGGRQPNQGWSSGKNGWGEEVDQTKNSNWESSASKPVSGWGEGGQNEIGTWGNGGNASLASKGGWEDC
+KRSPAWNETGRQPNSWNKQHQQQQPPQQPPPPQPEASGSWGGPPPPPPGNVRPSNSSWSSGPQPATPKDEEPSGWEEPSP
+QSISRKMDIDDGTSAWGDPNSYNYKNVNLWDKNSQGGPAPREPNLPTPMTSKSASVWSKSTPPAPDNGTSAWGEPNESSP
+GWGEMDDTGASTTGWGNTPANAPNAMKPNSKSMQDGWGESDGPVTGARHPSWEEEEDGGVWNTTGSQGSASSHNSASWGQ
+GGKKQMKCSLKGGNNDSWMNPLAKQFSNMGLLSQTEDNPSSKMDLSVGSLSDKKFDVDKRAMNLGDFNDIMRKDRSGFRP
+PNSKDMGTTDSGPYFEKLTLPFSNQDGCLGDEAPCSPFSPSPSYKLSPSGSTLPNVSLGAIGTGLNPQNFAARQGGSHGL
+FGNSTAQSRGLHTPVQPLNSSPSLRAQVPPQFISPQVSASMLKQFPNSGLSPGLFNVGPQLSPQQIAMLSQLPQIPQFQL
+ACQLLLQQQQQQQLLQNQRKISQAVRQQQEQQLARMVSALQQQQQQQQRQPGMKHSPSHPVGPKPHLDNMVPNALNVGLP
+DLQTKGPIPGYGSGFSSGGMDYGMVGGKEAGTESRFKQWTSMMEGLPSVATQEANMHKNGAIVAPGKTRGGSPYNQFDII
+PGDTLGGHTGPAGDSWLPAKSPPTNKIGSKSSNASWPPEFQPGVPWKGIQNIDPESDPYVTPGSVLGGTATSPIVDTDHQ
+LLRDNTTGSNSSLNTSLPSPGAWPYSASDNSFTNVHSTSAKFPDYKSTWSPDPIGHNPTHLSNKMWKNHISSRNTTPLPR
+PPPGLTNPKPSSPWSSTAPRSVRGWGTQDSRLASASTWSDGGSVRPSYWLVLHNLTPQIDGSTLRTICMQHGPLLTFHLN
+LTQGTALIRYSTKQEAAKAQTALHMCVLGNTTILAEFATDDEVSRFLAQAQPPTPAATPSAPAAGWQSLETGQNQSDPVG
+PALNLFGGSTGLGQWSSSAGGSSGADLAGASLWGPPNYSSSLWGVPTVEDPHRMGSPAPLLPGDLLGGGSDSI
diff --git a/test/scripts/automated/belvu/test25 b/test/scripts/automated/belvu/test25
new file mode 100755
index 0000000..aaab4cb
--- /dev/null
+++ b/test/scripts/automated/belvu/test25
@@ -0,0 +1,25 @@
+#!/bin/ksh
+#
+# Description:
+#   Tests saving alignment without coordinates in Mul
+#   format.
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences to the saved results
+diffs=`belvu -C -o Mul $data_dir/PF02171_seed.stock >&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
+
diff --git a/test/scripts/automated/belvu/test25_results b/test/scripts/automated/belvu/test25_results
new file mode 100644
index 0000000..2c036bd
--- /dev/null
+++ b/test/scripts/automated/belvu/test25_results
@@ -0,0 +1,58 @@
+#=GS YQ53_CAEEL/650-977     AC Q09249.1
+#=GS Q21691_CAEEL/673-1001  AC Q21691.1
+#=GS O48771_ARATH/542-860   AC O48771.1
+#=GS Q9ZVD5_ARATH/577-885   AC Q9ZVD5.2
+#=GS TAG76_CAEEL/660-966    AC P34681.2
+#=GS O16720_CAEEL/566-867   AC O16720.2
+#=GS PINH_ARATH/625-946     AC Q9XGW1.1
+#=GS AGO1_SCHPO/500-799     AC O74957.1
+#=GS O76922_DROME/555-852   AC O76922.1
+#=GS PIWI_DROME/538-829     AC Q9VKM1.1
+#=GS Q17567_CAEEL/397-708   AC Q17567.1
+#=GS PIWL1_HUMAN/555-847    AC Q96J94.1
+#=GS PIWI_ARCFU/110-406     AC O28951.1
+#=GS PIWI_ARCFU/110-406     DR PDB; 1w9h A; 110-406;
+#=GS PIWI_ARCFU/110-406     DR PDB; 2bgg A; 110-406;
+#=GS PIWI_ARCFU/110-406     DR PDB; 2bgg B; 110-406;
+#=GS PIWI_ARCFU/110-406     DR PDB; 1ytu A; 110-406;
+#=GS PIWI_ARCFU/110-406     DR PDB; 2w42 A; 110-406;
+#=GS PIWI_ARCFU/110-406     DR PDB; 2w42 B; 110-406;
+#=GS PIWI_ARCFU/110-406     DR PDB; 1ytu B; 110-406;
+#=GS Y1321_METJA/426-699    AC Q58717.1
+#=GS O67434_AQUAE/419-694   AC O67434.1
+#=GS O67434_AQUAE/419-694   DR PDB; 2nub A; 419-694;
+#=GS O67434_AQUAE/419-694   DR PDB; 1yvu A; 419-694;
+#=GS O67434_AQUAE/419-694   DR PDB; 2f8s A; 419-694;
+#=GS O67434_AQUAE/419-694   DR PDB; 2f8s B; 419-694;
+#=GS Q21495_CAEEL/52-336    AC Q21495.4
+#=GS O16386_CAEEL/548-847   AC O16386.1
+#=GS O02095_CAEEL/574-878   AC O02095.2
+#=GS Q19645_CAEEL/674-996   AC Q19645.1
+#=GS Q23415_CAEEL/40-350    AC Q23415.1
+#=GS O62275_CAEEL/594-924   AC O62275.1
+YQ53_CAEEL           DILVGIAR.EKKPD.VHDILKYFEESIGLQTIQLCQQTVDKM.....MG....GQGGRQTIDNVMRKFNLKCGGTNFFVEIPNAVRGKAVCSNNETLRKKLLEHVQFIGFEISHGASRTLFDRSRSQMDGEPSVVGVSYSLT...NSTQLGGFTYLQTQKEYKLQKLDE............FFPKCVRSYKEHSKT.LPTRIVIYRVGAGEGNFNRVKE.EVEEMRRTFD.......KIQ.PGYR..PHLVVIIAQRASHARVFPSCISG.....................NRATDQNIPSGTCV...ENVLTSYGYDEFILSSQTPLIGTVRPCKYTILVNDA...KWSKNEL.MHL......TYFRAFGHQVSY....QPPSV........PDVLYAAENLAKRGRNNYK
+Q21691_CAEEL         TIVFGIIA.EKRPD.MHDILKYFEEKLGQQTIQISSETADKF.....MR....DHGGKQTIDNVIRKLNPKCGGTNFLIDVPESVGHRVVCNNSAEMRAKLYAKTQFIGFEMSHTGARTRFDIQKVMFDGDPTVVGVAYSL..KHSAQLGGFSYFQESRLHKLTN.LQE............KMQICLNAYEQSSSY.LPETVVVYRVGSGEGDYPQIVN.EVNEMKLAAR.......KKK.HGYN..PKFLVICTQRNSHIRVFPEHINE....................RGKSMEQNVKSGTCV...DVPGASHGYEEFILCCQTPLIGTVKPTKYTIIVNDC...RWSKNEI.MNV......TYHLAFAHQVSY....APPAI........PNVSYAAQNLAKRGHNNYK
+O48771_ARATH         FILCILPERKTSDI.YGPWKKICLTEEGIHTQCICPIKI.................SDQYLTNVLLKINSKLGGINS.LLGIEYSYNIPLINKIPTL.........ILGMDVSHGPPGR.........ADVPSVAAVVGSKCWPLISRYRAAVRTQSPRLEMIDSLFQP..IENTEKGDNGIMNELFVEFYRTSRARKPKQIIIFRDGVSESQFEQVLKIEVDQIIKAYQ.......RLG.ESDV..PKFTVIVAQKNHHTKLFQAKGPE...........................NVPAGTVV...DTKIVHPTNYDFYMCAHAGKIGTSRPAHYHVLLDEI...GFSPDDL.QNL......IHSLSYKLLNSI....FNVSSLLCVFVLSVAPVRYAHLAAAQVAQFTK
+Q9ZVD5_ARATH         FILCVLPDKKNSDL.YGPWKKKNLTEFGIVTQCMAPTRQPND................QYLTNLLLKINAKLGGLNS.MLSVERTPAFTVISKVPTI.........ILGMDVSHGSPGQ.........SDVPSIAAVVSSREWPLISKYRASVRTQPSKAEMIESLVKK.....NGTEDDGIIKELLVDFYTSSNKRKPEHIIIFRDGVSESQFNQVLNIELDQIIEACK.......LLD.ANWN..PKFLLLVAQKNHHTKFFQPTSPE...........................NVPPGTII...DNKICHPKNNDFYLCAHAGMIGTTRPTHYHVLYDEI...GFSADEL.QEL......VHSLSYVYQRST....SAISV........VAPICYAHLAAAQLGTFMK
+TAG76_CAEEL          CIIVVLQS.KNSDI.YMTVKEQSDIVHGIMSQCVLMKNVSRP..............TPATCANIVLKLNMKMGGIN..SRIVADKITNKYLVDQPTM.........VVGIDVTHPTQAE.......MRMNMPSVAAIVANVD.LLPQSYGANVKVQKKCRESVVY.LLD............AIRERIITFYRHTKQ.KPARIIVYRDGVSEGQFSEVLREEIQSIRTACL.......AIA.EDFR..PPITYIVVQKRHHARIFCKYQND.....................MVGKAKNVPPGTTV...DTGIVSPEGFDFYLCSHYGVQGTSRPARYHVLLDEC...KFTADEI.QSI......TYGMCHTYGRCT....RSVSI........PTPVYYADLVATRARCHVK
+O16720_CAEEL         LIVVVLPG..KTPI.YAEVKRVGDTVLGIATQCVQAKNAIRT..............TPQTLSNLCLKMNVKLGGVNS.ILLPNVRPR...IFNEPVI.........FLGCDITHPAAGD.........TRKPSIAAVVGSMD.AHPSRYAATVRVQQHRQEIITD.LTY............MVRELLVQFYRNTRF.KPARIVVYRDGVSEGQLFNVLQYELRAIREACV.......MLE.SGYQ..PGITFIAVQKRHHTRLFAADKAD.....................QVGKAFNIPPGTTV...DVGITHPTEFDFFLCSHAGIQGTSRPSHYHVLWDDN...DLTADEL.QQL......TYQMCHTYVRCT....RSVSI........PAPAYYAHLVAFRARYHLV
+PINH_ARATH           LLLAILPD.NNGSL.YGDLKRICETELGLISQCCLTKHVFKI..............SKQYLANVSLKINVKMGGRNT.VLVDAISCRIPLVSDIPTI.........IFGADVTHPENGE.........ESSPSIAAVVASQDWPEVTKYAGLVCAQAHRQELIQDLYKTWQDPVRGTVSGGMIRDLLISFRKATGQ.KPLRIIFYRDGVSEGQFYQVLLYELDAIRKACA.......SLE.PNYQ..PPVTFIVVQKRHHTRLFANNHRD...................KNSTDRSGNILPGTVV...DTKICHPTEFDFYLCSHAGIQGTSRPAHYHVLWDEN...NFTADGI.QSL......TNNLCYTYARCT....RSVSI........VPPAYYAHLAAFRARFYLE
+AGO1_SCHPO           YLFFILDK.NSPEP.YGSIKRVCNTMLGVPSQCAISKHILQS..............KPQYCANLGMKINVKVGGINC.SLIPKSNP....LGNVPTL.........ILGGDVYHPGVGA..........TGVSIASIVASVD.LNGCKYTAVSRSQPRHQEVIEG.MKD............IVVYLLQGFRAMTKQ.QPQRIIYFRDGTSEGQFLSVINDELSQIKEACH.......SLS.PKYN..PKILVCTTQKRHHARFFIKNKSD......................GDRNGNPLPGTII...EKHVTHPYQYDFYLISHPSLQGVSVPVHYTVLHDEI...QMPPDQF.QTL......CYNLCYVYARAT....SAVSL........VPPVYYAHLVSNLARYQDV
+O76922_DROME         IVMVVMRS.PNEEK.YSCIKKRTCVDRPVPSQVVTLKVIAPR.....QQ...KPTGLMSIATKVVIQMNAKLMGA...PWQVVIPL.......HGLM.........TVGFDVCHSPKNK...........NKSYGAFVATMDQKESFRYFSTVNEHIKGQELSEQ.MSV............NMACALRSYQEQHRS.LPERILFFRDGVGDGQLYQVVNSEVNTLKDRLDEI...YKSAG.KQEG..CRMTFIIVSKRINSRYFT.............................GHRNPVPGTVV...DDVITLPERYDFFLVSQAVRIGTVSPTSYNVISDNM...GLNADKL.QML......SYKMTHMYYNYS....GTIRV........PAVCHYAHKLAFLVAESIN
+PIWI_DROME           LILCLVPN.DNAER.YSSIKKRGYVDRAVPTQVVTLKTTKNR.....SL........MSIATKIAIQLNCKLGYT...PWMIELPL.......SGLM.........TIGFDIAKSTRDR...........KRAYGALIASMDLQQNSTYFSTV.TECSAFDVLANTLWP............MIAKALRQYQHEHRK.LPSRIVFYRDGVSSGSLKQLFEFEVKDIIEKLKTE...YARVQ.LSP...PQLAYIVVTRSMNTRFFLN.............................GQNPPPGTIV...DDVITLPERYDFYLVSQQVRQGTVSPTSYNVLYSSM...GLSPEKM.QKL......TYKMCHLYYNWS....GTTRV........PAVCQYAKKLATLVGTNLH
+Q17567_CAEEL         MLVVMLAD.DNKTR.YDSLKKYLCVECPIPNQCVNLRTLAGK.....SKDGGENKNLGSIVLKIVLQMICKTGGA...LWKVNIPL.......KSTM.........IVGYDLYHDSTLK...........GKTVGACVSTTS.NDFTQFYSQTRPHENPTQLGNN.LTH............FVRKSLKQYYDNNDKTLPSRLILYRDGAGDGQIPYIKNTEVKLVRDACDAVTDKAAELS.NKVQEKIKLAFIIVTKRVNMRILKQGSSS.......................KSAINPQPGTVV...DTTVTRPERMDFYLVPQFVNQGTVTPVSYNIIHDDT...GLGPDKH.QQL......AFKLCHLYYNWQ....GTVRV........PAPCQYAHKLAFLTAQSLH
+PIWL1_HUMAN          IVVCLLSS.NRKDK.YDAIKKYLCTDCPTPSQCVVARTLGKQ.....QT.......VMAIATKIALQMNCKMGGE...LWRVDIPL.......KLVM.........IVGIDCYHDMTAG...........RRSIAGFVASIN.EGMTRWFSRCIFQDRGQELVDG.LKV............CLQAALRAW.NSCNEYMPSRIIVYRDGVGDGQLKTLVNYEVPQFLDCLK.......SIG.RGYN..PRLTVIVVKKRVNTRFFAQSGGR.........................LQNPLPGTVI...DVEVTRPEWYDFFIVSQAVRSGSVSPTHYNVIYDNS...GLKPDHI.QRL......TYKLCHIYYNWP....GVIRV........PAPCQYAHKLAFLVGQSIH
+PIWI_ARCFU           GIMLVLPE.YNTPL.YYKLKSYLINS..IPSQFMRYDILSNR.....NL........TFYVDNLLVQFVSKLGGK...PWILNVDPEK....................GSDIIIGTGAT........RIDNVNLFCFAMVFK.KDGTMLWNEISPIVTSSEYLTY.LKS............TIKKVVYGFKKSNPDWDVEKLTLHVSG....KRPKMKDGETKILKETVE.......ELK.KQEMVSRDVKYAILHLNETHPFWVMGDPN........................NRFHPYEGTKVKLSSKRYLLTLLQPYLKRNGLEMVTPIKPLSVEIVSDN.....WTSEEYYHNVHEILDEIYYLSKMNWRGF....RSRNL........PVTVNYPKLVAGIIANVNR
+#=GR PIWI_ARCFU SS   --EEEESS.S-HHH.HHHHHHHHHTT..S--EEEEHHHHCTS.....TH........HHHHHHHHHHHHHH----...--EE---TT-....................---EEE----E........ESSSSEEE-EEEEEE.----EEEEEE--SEEGGGHHHH.HHH............HHHHHH---TTTSTT---SEEEEEE--....---S-----HHHHHHHHH.......HHH.HTTSS-TT-EEEEEEEEE---EEEE--TT........................TT-------EEESSSSEEEEEEE-TCEE----EEEEEEEEEEEEEEEE-.....--TTTHHHHHHHHHHHHHHHTT------....---SS........-HHHHHHHHH---HHHHHH
+Y1321_METJA          CFALIIGKEKYKDNDYYEILKKQLFDLKIISQNILWENWRKD.....DK........GYMTNNLLIQIMGKLGIK...YFILDSKTPYDY................IMGLDTGLGIFGN............HRVGGCTVVYDSEGKIRRIQPIETPAPGERLHLP................YVIEYLEN..KANIDMENKNILFLRDG.......FIQNSERNDLKEISK.......ELN.......SNIEVISIRKNNKYKVFTSDYRI........................GSVFGNDGIFLPHKTPFGSNPVKLSTWLRFNCGNEEGLK...IN.............ESI.MQL......LYDLTKMNYSALYGEGRYLRI........PAPIHYADKFVKALGKNWK
+O67434_AQUAE         LVIVFLEEYPKVDP.YKSFLLYDFVKRELLKKMIPSQVILNR.....TL...KNENLKFVLLNVAEQVLAKTGNIP..YKLKEIEGKVDA................FVGIDISRITRDG..........KTVNAVAFTKIFNSKGELVRYYLTSYPAFGEKLTEK................AIGDVFSLLEKLGF.KKGSKIVVHRDG.......RLYRDEVAAFK...........KYG.ELYG..YSLELLEIIKRNNPRFFSNEKFI..............................KGYFYKLSEDSVILATYNQVY.......EGTHQPIKVRKVYGE.....LPVEVL.CSQ......ILSLTLMNYSSF....QPIKL........PATVHYSDKITKLMLRGIE
+#=GR O67434_AQUAE SS EEEEEE---S---S.SS--HHHHHHHHHHHHTT--EEEEEHH.....HH...HHS-HHHHHHHHHHHHHHH---BS..-EES------SE................EE--EEEEEE---..........-ECEEEEEEEEEE----EEEEEEEEETT---HHHHH................H---HHHHHHH---.----EEEEEE--.......---HHHHHHHH...........H--.----..-EEEEEEEE-SS---EEES-S--..............................---EEEETTTEEEE--S----.......---B--EEEEEEE--.....--HHHH.HHH......HHHHGGGG--TT....S--SS........-TTTTTHHHHHHHHH----
+Q21495_CAEEL         GIVLPTPRIFFRDG..........QETSLNNQSFRNPT...................DFAQTGFFVDAKQQLGGLN..YVVNS.....ETWNDSGLL.........LIGLSTAPYLNSY........SSENVTTIGFVSNTM.DHPQKFAGGYKYVKSGSDVFGQVMPE............ILLNSLRSARKARKI.KPMNIVIYLCGMSESRFSIVKEEYVRNCHSVFK.......TLG.EKYS..PQLTIIVGSKGHSTRLYARGERD........................QISNLQPGTIV...DSVIVSPDYNKFFHCGAVARQGTCKATKYTVLYPE....SPKMEWI.QRM......TNDLCYMHEIVF....HPVSL........PAPLYLTAEMAERGTKNLA
+O16386_CAEEL         QLIMFITK..SMNN.YHTEIKCLEQEFDLLTQDIRFETAVKL.....AQ.......QQNTRKNIIYKTNMKLGGLN..YELRS.....GVFSNSKRL.........IIGFETSQRGGLG..........DAPIAIGFAANMM.SHSQQFAGGYMFVKKSADNYGPVIPE............ILLTILKQAKANRPNDRPDELLIYFSGVSEGQHALVNEYYANQVKAACG.......LFN.ESFR..PHITLILASKVHNTRVYKSENGG........................GVCNVEPGTVI...DHTIVSPVLSEWYHAGSLARQGTSKLVKYSLIFNTK...KNEKLSVYERL......TNELCYEMQIVF....HPTSL........PIPLHIAGTYSERGSQMLA
+O02095_CAEEL         QLLFFVVK..SRYN.YHQQIKALEQKYDVLTQEIRAETAEKV.....FR.......QPQTRLNIINKTNMKLGGLN..YAIGS.....EAFNKPNRL.........IVGFVTSQRVGGN.........PDYPISVGFAANML.KHHQKFAGGYVYVHRDRDVFGSIIKD............TLLAIFKTCTEQRG..RPDDILLYFNGVSEGQFSMINEEFSARVKEACMAF...QKEGT.PPFR..PHITIIASSKAHNERLYKSDKGR.........................IVNLEPGTVV...DHTIVSNVYTEWYHASAVARQGTAKATKFTLIFTTKAGPQAEPLWHLEQL......TNDLCYDHQIVF....HPVGL........PVPLYIADRYSQRGAMVLA
+Q19645_CAEEL         PFVLFISD..DVPN.IHECLKFEERMSDIPTQHVLLKNVKKMRDNIEKKSQGGRRAYDLTLDNIVMKANIKCGGLN..YT.ADIPRDLACWNEVSTF.........VIGMDVAHPDRNA.......AREGNPSTVGLSCNSA.ENPYSFIGDFLYTDPRREAIQDEILR...........KFTDQSVRNFAEIRG..FPKKVIIFRDGVSFGEETAALK.EVEIIEQTIKTA...AKSMGHSDYA..PKVLAIVVKKRHHTRFYAKGGHH......................GNMPINPLPDTSV...GGDIAEYGKRQIFIQAFRPVQGTAKVPSFLVIRDDE...EVSDEHV.AKM......VCAVCSLHQLVN....SPTSI........PTPVYVAHELAKRGTGLYK
+Q23415_CAEEL         KFAFVITD.DSITH.LHKKYKALEQKSMMVIQDMKISKANSV.....VK.....DGKRLTLENVINKTNMKLGGLN..YTVSDAKKSMT....DEQL.........IIGVGVSAPPAGT.KYMMDNKGHLNPQIIGFASNA..VANHEFVGDFVLAPSGQDTMAS.IED............VLKSSIDLFEMNRNT.LPKRIIIYRSGASDGSHASILAYEIPLARATIQ.......GYS.KDIN....LIYIIVTKEHSYRFFRDQLRS....................GGKATEMNIPPGIVL...DSAVTNPACKQFFLNGHTTLQGTAKTPLYTILADDC...NAPMDRL.EEL......TYTLCHHHQIVA....LSTSI........PTPLYVANEYAKRGRDLWS
+O62275_CAEEL         TFVFIITD.DSITT.LHQRYKMIEKDTKMIVQDMKLSKALSV..........INAGKRLTLENVINKTNVKLGGSN..YVFVDAKKQL.....DSHL.........IIGVGISAPPAGT.KYAMENKGVLNPNVIGYAYNA..QHNQEFSGDFVLNSASQDTLAP.IED............IVMHSLNEYQKFHDGGLPRRVIVYRTGTSEGNHGSIMAYEIPLARAAMR.......DFS.PDIQ....LVYIVVSKDHSFRFFKPDLASLASRPQATSSTASRHSAMPAAPKAWDLNIAPGILV...DSIVTNPACKQFFLNSHITLQGTAKTPLYTVLADDA...KVSMTAL.EDI......TYKLCHLHQIVG....LPTSL........PTPLYVANEYAKRGRNLWN
+#=GC SS_cons         EEEEEESS-S-HHC.CCHHHHHHHCCHHCHHCCEECCCCCCC.....CH...HHS-HHHHHHHHHHHHHHH---BS..-EEC---TT-SE................EE--EEEEEE--E........ESSCCEEEEEEEEEE----EEEEEEEEETCEGGHHHHH.HHH............HHHHHHHHHCCTSTT---SEEEEEE--.......S--HHHHHHHHHHHH.......HHH.HTTSS.TCEEEEEEEECC---EEEC-STT........................TT....---EEECTTTEEEEEEC-TCEE....EEEEEEEEEEEEEEEE-.....--CCCHHHHHHHHHHHHHHHCCGG--TT....S--SS........-CCCCCHHHHHHHHHHHHH
+#=GC seq_cons        hllhllsc.pspst.YtshhKhhppchsl.oQslphcsh.ph...............tthhsNllhKhNsKlGGhN..hhlssh.h........sph.........llGhDlu+sssus..........tssolsuhsushs.ppsppahushphpppsp-hhss.lpp............hltphLpsapcpspp.hPp+IllYRDGsS-Gph.plhp.Elspl+cshc.......pls.psap..PplshIllpKpcpsRhFtpstsp.........................thNs.PGTlV...DsslspPsth-FaLsupsshpGTs+Ps+YsllhD-h...thss-cl.ppL......oapLCaha.psh....pslul........PsPlaYAcphAppstp.hc
+//
diff --git a/test/scripts/automated/belvu/test26 b/test/scripts/automated/belvu/test26
new file mode 100755
index 0000000..a50305f
--- /dev/null
+++ b/test/scripts/automated/belvu/test26
@@ -0,0 +1,29 @@
+#!/bin/ksh
+#
+# Description:
+#   Read in an alignment that has a separator of '='
+#   between the sequence name and coords. Save the 
+#   alignment without saving coords so that we know
+#   the coords have been stripped from the name correctly
+#   Also tests saving without coords in MSF format.
+
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences to the saved results
+diffs=`belvu -z '=' -C -o MSF $data_dir/PF02171_seed_separator.stock >&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
+
diff --git a/test/scripts/automated/belvu/test26_results b/test/scripts/automated/belvu/test26_results
new file mode 100644
index 0000000..3a7ee09
--- /dev/null
+++ b/test/scripts/automated/belvu/test26_results
@@ -0,0 +1,226 @@
+PileUp
+
+ automated/belvu/../../../data/PF02171_seed_separator.stock  MSF: 412  Type: X  Check: 4875  ..
+
+  Name: YQ53_CAEEL       Len:    412  Check:   5009  Weight: 1.0000
+  Name: Q21691_CAEEL     Len:    412  Check:   9881  Weight: 1.0000
+  Name: O48771_ARATH     Len:    412  Check:    634  Weight: 1.0000
+  Name: Q9ZVD5_ARATH     Len:    412  Check:   2274  Weight: 1.0000
+  Name: TAG76_CAEEL      Len:    412  Check:   8804  Weight: 1.0000
+  Name: O16720_CAEEL     Len:    412  Check:   7433  Weight: 1.0000
+  Name: PINH_ARATH       Len:    412  Check:   7730  Weight: 1.0000
+  Name: AGO1_SCHPO       Len:    412  Check:   1021  Weight: 1.0000
+  Name: O76922_DROME     Len:    412  Check:   4289  Weight: 1.0000
+  Name: PIWI_DROME       Len:    412  Check:   7323  Weight: 1.0000
+  Name: Q17567_CAEEL     Len:    412  Check:   4176  Weight: 1.0000
+  Name: PIWL1_HUMAN      Len:    412  Check:   9105  Weight: 1.0000
+  Name: PIWI_ARCFU       Len:    412  Check:   5661  Weight: 1.0000
+  Name: Y1321_METJA      Len:    412  Check:   5582  Weight: 1.0000
+  Name: O67434_AQUAE     Len:    412  Check:   5245  Weight: 1.0000
+  Name: Q21495_CAEEL     Len:    412  Check:   8897  Weight: 1.0000
+  Name: O16386_CAEEL     Len:    412  Check:   7301  Weight: 1.0000
+  Name: O02095_CAEEL     Len:    412  Check:   5686  Weight: 1.0000
+  Name: Q19645_CAEEL     Len:    412  Check:   5696  Weight: 1.0000
+  Name: Q23415_CAEEL     Len:    412  Check:   7766  Weight: 1.0000
+  Name: O62275_CAEEL     Len:    412  Check:   2375  Weight: 1.0000
+
+//
+
+YQ53_CAEEL       DILVGIAR.E KKPD.VHDIL KYFEESIGLQ TIQLCQQTVD KM.....MG. 
+Q21691_CAEEL     TIVFGIIA.E KRPD.MHDIL KYFEEKLGQQ TIQISSETAD KF.....MR. 
+O48771_ARATH     FILCILPERK TSDI.YGPWK KICLTEEGIH TQCICPIKI. .......... 
+Q9ZVD5_ARATH     FILCVLPDKK NSDL.YGPWK KKNLTEFGIV TQCMAPTRQP ND........ 
+TAG76_CAEEL      CIIVVLQS.K NSDI.YMTVK EQSDIVHGIM SQCVLMKNVS RP........ 
+O16720_CAEEL     LIVVVLPG.. KTPI.YAEVK RVGDTVLGIA TQCVQAKNAI RT........ 
+PINH_ARATH       LLLAILPD.N NGSL.YGDLK RICETELGLI SQCCLTKHVF KI........ 
+AGO1_SCHPO       YLFFILDK.N SPEP.YGSIK RVCNTMLGVP SQCAISKHIL QS........ 
+O76922_DROME     IVMVVMRS.P NEEK.YSCIK KRTCVDRPVP SQVVTLKVIA PR.....QQ. 
+PIWI_DROME       LILCLVPN.D NAER.YSSIK KRGYVDRAVP TQVVTLKTTK NR.....SL. 
+Q17567_CAEEL     MLVVMLAD.D NKTR.YDSLK KYLCVECPIP NQCVNLRTLA GK.....SKD 
+PIWL1_HUMAN      IVVCLLSS.N RKDK.YDAIK KYLCTDCPTP SQCVVARTLG KQ.....QT. 
+PIWI_ARCFU       GIMLVLPE.Y NTPL.YYKLK SYLINS..IP SQFMRYDILS NR.....NL. 
+Y1321_METJA      CFALIIGKEK YKDNDYYEIL KKQLFDLKII SQNILWENWR KD.....DK. 
+O67434_AQUAE     LVIVFLEEYP KVDP.YKSFL LYDFVKRELL KKMIPSQVIL NR.....TL. 
+Q21495_CAEEL     GIVLPTPRIF FRDG...... ....QETSLN NQSFRNPT.. .......... 
+O16386_CAEEL     QLIMFITK.. SMNN.YHTEI KCLEQEFDLL TQDIRFETAV KL.....AQ. 
+O02095_CAEEL     QLLFFVVK.. SRYN.YHQQI KALEQKYDVL TQEIRAETAE KV.....FR. 
+Q19645_CAEEL     PFVLFISD.. DVPN.IHECL KFEERMSDIP TQHVLLKNVK KMRDNIEKKS 
+Q23415_CAEEL     KFAFVITD.D SITH.LHKKY KALEQKSMMV IQDMKISKAN SV.....VK. 
+O62275_CAEEL     TFVFIITD.D SITT.LHQRY KMIEKDTKMI VQDMKLSKAL SV........ 
+
+YQ53_CAEEL       ...GQGGRQT IDNVMRKFNL KCGGTNFFVE IPNAVRGKAV CSNNETLRKK 
+Q21691_CAEEL     ...DHGGKQT IDNVIRKLNP KCGGTNFLID VPESVGHRVV CNNSAEMRAK 
+O48771_ARATH     ......SDQY LTNVLLKINS KLGGINS.LL GIEYSYNIPL INKIPTL... 
+Q9ZVD5_ARATH     ........QY LTNLLLKINA KLGGLNS.ML SVERTPAFTV ISKVPTI... 
+TAG76_CAEEL      ......TPAT CANIVLKLNM KMGGIN..SR IVADKITNKY LVDQPTM... 
+O16720_CAEEL     ......TPQT LSNLCLKMNV KLGGVNS.IL LPNVRPR... IFNEPVI... 
+PINH_ARATH       ......SKQY LANVSLKINV KMGGRNT.VL VDAISCRIPL VSDIPTI... 
+AGO1_SCHPO       ......KPQY CANLGMKINV KVGGINC.SL IPKSNP.... LGNVPTL... 
+O76922_DROME     ..KPTGLMSI ATKVVIQMNA KLMGA...PW QVVIPL.... ...HGLM... 
+PIWI_DROME       .......MSI ATKIAIQLNC KLGYT...PW MIELPL.... ...SGLM... 
+Q17567_CAEEL     GGENKNLGSI VLKIVLQMIC KTGGA...LW KVNIPL.... ...KSTM... 
+PIWL1_HUMAN      ......VMAI ATKIALQMNC KMGGE...LW RVDIPL.... ...KLVM... 
+PIWI_ARCFU       .......TFY VDNLLVQFVS KLGGK...PW ILNVDPEK.. .......... 
+Y1321_METJA      .......GYM TNNLLIQIMG KLGIK...YF ILDSKTPYDY .......... 
+O67434_AQUAE     ..KNENLKFV LLNVAEQVLA KTGNIP..YK LKEIEGKVDA .......... 
+Q21495_CAEEL     .......DFA QTGFFVDAKQ QLGGLN..YV VNS.....ET WNDSGLL... 
+O16386_CAEEL     ......QQNT RKNIIYKTNM KLGGLN..YE LRS.....GV FSNSKRL... 
+O02095_CAEEL     ......QPQT RLNIINKTNM KLGGLN..YA IGS.....EA FNKPNRL... 
+Q19645_CAEEL     QGGRRAYDLT LDNIVMKANI KCGGLN..YT .ADIPRDLAC WNEVSTF... 
+Q23415_CAEEL     ....DGKRLT LENVINKTNM KLGGLN..YT VSDAKKSMT. ...DEQL... 
+O62275_CAEEL     ..INAGKRLT LENVINKTNV KLGGSN..YV FVDAKKQL.. ...DSHL... 
+
+YQ53_CAEEL       LLEHVQFIGF EISHGASRTL FDRSRSQMDG EPSVVGVSYS LT...NSTQL 
+Q21691_CAEEL     LYAKTQFIGF EMSHTGARTR FDIQKVMFDG DPTVVGVAYS L..KHSAQLG 
+O48771_ARATH     ......ILGM DVSHGPPGR. ........AD VPSVAAVVGS KCWPLISRYR 
+Q9ZVD5_ARATH     ......ILGM DVSHGSPGQ. ........SD VPSIAAVVSS REWPLISKYR 
+TAG76_CAEEL      ......VVGI DVTHPTQAE. ......MRMN MPSVAAIVAN VD.LLPQSYG 
+O16720_CAEEL     ......FLGC DITHPAAGD. ........TR KPSIAAVVGS MD.AHPSRYA 
+PINH_ARATH       ......IFGA DVTHPENGE. ........ES SPSIAAVVAS QDWPEVTKYA 
+AGO1_SCHPO       ......ILGG DVYHPGVGA. .........T GVSIASIVAS VD.LNGCKYT 
+O76922_DROME     ......TVGF DVCHSPKNK. .......... NKSYGAFVAT MDQKESFRYF 
+PIWI_DROME       ......TIGF DIAKSTRDR. .......... KRAYGALIAS MDLQQNSTYF 
+Q17567_CAEEL     ......IVGY DLYHDSTLK. .......... GKTVGACVST TS.NDFTQFY 
+PIWL1_HUMAN      ......IVGI DCYHDMTAG. .......... RRSIAGFVAS IN.EGMTRWF 
+PIWI_ARCFU       ........GS DIIIGTGAT. .......RID NVNLFCFAMV FK.KDGTMLW 
+Y1321_METJA      ......IMGL DTGLGIFGN. .......... .HRVGGCTVV YDSEGKIRRI 
+O67434_AQUAE     ......FVGI DISRITRDG. .........K TVNAVAFTKI FNSKGELVRY 
+Q21495_CAEEL     ......LIGL STAPYLNSY. .......SSE NVTTIGFVSN TM.DHPQKFA 
+O16386_CAEEL     ......IIGF ETSQRGGLG. .........D APIAIGFAAN MM.SHSQQFA 
+O02095_CAEEL     ......IVGF VTSQRVGGN. ........PD YPISVGFAAN ML.KHHQKFA 
+Q19645_CAEEL     ......VIGM DVAHPDRNA. ......AREG NPSTVGLSCN SA.ENPYSFI 
+Q23415_CAEEL     ......IIGV GVSAPPAGT. KYMMDNKGHL NPQIIGFASN A..VANHEFV 
+O62275_CAEEL     ......IIGV GISAPPAGT. KYAMENKGVL NPNVIGYAYN A..QHNQEFS 
+
+YQ53_CAEEL       GGFTYLQTQK EYKLQKLDE. .......... .FFPKCVRSY KEHSKT.LPT 
+Q21691_CAEEL     GFSYFQESRL HKLTN.LQE. .......... .KMQICLNAY EQSSSY.LPE 
+O48771_ARATH     AAVRTQSPRL EMIDSLFQP. .IENTEKGDN GIMNELFVEF YRTSRARKPK 
+Q9ZVD5_ARATH     ASVRTQPSKA EMIESLVKK. ....NGTEDD GIIKELLVDF YTSSNKRKPE 
+TAG76_CAEEL      ANVKVQKKCR ESVVY.LLD. .......... .AIRERIITF YRHTKQ.KPA 
+O16720_CAEEL     ATVRVQQHRQ EIITD.LTY. .......... .MVRELLVQF YRNTRF.KPA 
+PINH_ARATH       GLVCAQAHRQ ELIQDLYKTW QDPVRGTVSG GMIRDLLISF RKATGQ.KPL 
+AGO1_SCHPO       AVSRSQPRHQ EVIEG.MKD. .......... .IVVYLLQGF RAMTKQ.QPQ 
+O76922_DROME     STVNEHIKGQ ELSEQ.MSV. .......... .NMACALRSY QEQHRS.LPE 
+PIWI_DROME       STV.TECSAF DVLANTLWP. .......... .MIAKALRQY QHEHRK.LPS 
+Q17567_CAEEL     SQTRPHENPT QLGNN.LTH. .......... .FVRKSLKQY YDNNDKTLPS 
+PIWL1_HUMAN      SRCIFQDRGQ ELVDG.LKV. .......... .CLQAALRAW .NSCNEYMPS 
+PIWI_ARCFU       NEISPIVTSS EYLTY.LKS. .......... .TIKKVVYGF KKSNPDWDVE 
+Y1321_METJA      QPIETPAPGE RLHLP..... .......... .YVIEYLEN. .KANIDMENK 
+O67434_AQUAE     YLTSYPAFGE KLTEK..... .......... .AIGDVFSLL EKLGF.KKGS 
+Q21495_CAEEL     GGYKYVKSGS DVFGQVMPE. .......... .ILLNSLRSA RKARKI.KPM 
+O16386_CAEEL     GGYMFVKKSA DNYGPVIPE. .......... .ILLTILKQA KANRPNDRPD 
+O02095_CAEEL     GGYVYVHRDR DVFGSIIKD. .......... .TLLAIFKTC TEQRG..RPD 
+Q19645_CAEEL     GDFLYTDPRR EAIQDEILR. .......... KFTDQSVRNF AEIRG..FPK 
+Q23415_CAEEL     GDFVLAPSGQ DTMAS.IED. .......... .VLKSSIDLF EMNRNT.LPK 
+O62275_CAEEL     GDFVLNSASQ DTLAP.IED. .......... .IVMHSLNEY QKFHDGGLPR 
+
+YQ53_CAEEL       RIVIYRVGAG EGNFNRVKE. EVEEMRRTFD .......KIQ .PGYR..PHL 
+Q21691_CAEEL     TVVVYRVGSG EGDYPQIVN. EVNEMKLAAR .......KKK .HGYN..PKF 
+O48771_ARATH     QIIIFRDGVS ESQFEQVLKI EVDQIIKAYQ .......RLG .ESDV..PKF 
+Q9ZVD5_ARATH     HIIIFRDGVS ESQFNQVLNI ELDQIIEACK .......LLD .ANWN..PKF 
+TAG76_CAEEL      RIIVYRDGVS EGQFSEVLRE EIQSIRTACL .......AIA .EDFR..PPI 
+O16720_CAEEL     RIVVYRDGVS EGQLFNVLQY ELRAIREACV .......MLE .SGYQ..PGI 
+PINH_ARATH       RIIFYRDGVS EGQFYQVLLY ELDAIRKACA .......SLE .PNYQ..PPV 
+AGO1_SCHPO       RIIYFRDGTS EGQFLSVIND ELSQIKEACH .......SLS .PKYN..PKI 
+O76922_DROME     RILFFRDGVG DGQLYQVVNS EVNTLKDRLD EI...YKSAG .KQEG..CRM 
+PIWI_DROME       RIVFYRDGVS SGSLKQLFEF EVKDIIEKLK TE...YARVQ .LSP...PQL 
+Q17567_CAEEL     RLILYRDGAG DGQIPYIKNT EVKLVRDACD AVTDKAAELS .NKVQEKIKL 
+PIWL1_HUMAN      RIIVYRDGVG DGQLKTLVNY EVPQFLDCLK .......SIG .RGYN..PRL 
+PIWI_ARCFU       KLTLHVSG.. ..KRPKMKDG ETKILKETVE .......ELK .KQEMVSRDV 
+Y1321_METJA      NILFLRDG.. .....FIQNS ERNDLKEISK .......ELN .......SNI 
+O67434_AQUAE     KIVVHRDG.. .....RLYRD EVAAFK.... .......KYG .ELYG..YSL 
+Q21495_CAEEL     NIVIYLCGMS ESRFSIVKEE YVRNCHSVFK .......TLG .EKYS..PQL 
+O16386_CAEEL     ELLIYFSGVS EGQHALVNEY YANQVKAACG .......LFN .ESFR..PHI 
+O02095_CAEEL     DILLYFNGVS EGQFSMINEE FSARVKEACM AF...QKEGT .PPFR..PHI 
+Q19645_CAEEL     KVIIFRDGVS FGEETAALK. EVEIIEQTIK TA...AKSMG HSDYA..PKV 
+Q23415_CAEEL     RIIIYRSGAS DGSHASILAY EIPLARATIQ .......GYS .KDIN....L 
+O62275_CAEEL     RVIVYRTGTS EGNHGSIMAY EIPLARAAMR .......DFS .PDIQ....L 
+
+YQ53_CAEEL       VVIIAQRASH ARVFPSCISG .......... .......... .NRATDQNIP 
+Q21691_CAEEL     LVICTQRNSH IRVFPEHINE .......... .......... RGKSMEQNVK 
+O48771_ARATH     TVIVAQKNHH TKLFQAKGPE .......... .......... .......NVP 
+Q9ZVD5_ARATH     LLLVAQKNHH TKFFQPTSPE .......... .......... .......NVP 
+TAG76_CAEEL      TYIVVQKRHH ARIFCKYQND .......... .......... .MVGKAKNVP 
+O16720_CAEEL     TFIAVQKRHH TRLFAADKAD .......... .......... .QVGKAFNIP 
+PINH_ARATH       TFIVVQKRHH TRLFANNHRD .......... .........K NSTDRSGNIL 
+AGO1_SCHPO       LVCTTQKRHH ARFFIKNKSD .......... .......... ..GDRNGNPL 
+O76922_DROME     TFIIVSKRIN SRYFT..... .......... .......... ....GHRNPV 
+PIWI_DROME       AYIVVTRSMN TRFFLN.... .......... .......... .....GQNPP 
+Q17567_CAEEL     AFIIVTKRVN MRILKQGSSS .......... .......... ...KSAINPQ 
+PIWL1_HUMAN      TVIVVKKRVN TRFFAQSGGR .......... .......... .....LQNPL 
+PIWI_ARCFU       KYAILHLNET HPFWVMGDPN .......... .......... ....NRFHPY 
+Y1321_METJA      EVISIRKNNK YKVFTSDYRI .......... .......... ....GSVFGN 
+O67434_AQUAE     ELLEIIKRNN PRFFSNEKFI .......... .......... .......... 
+Q21495_CAEEL     TIIVGSKGHS TRLYARGERD .......... .......... ....QISNLQ 
+O16386_CAEEL     TLILASKVHN TRVYKSENGG .......... .......... ....GVCNVE 
+O02095_CAEEL     TIIASSKAHN ERLYKSDKGR .......... .......... .....IVNLE 
+Q19645_CAEEL     LAIVVKKRHH TRFYAKGGHH .......... .......... ..GNMPINPL 
+Q23415_CAEEL     IYIIVTKEHS YRFFRDQLRS .......... .......... GGKATEMNIP 
+O62275_CAEEL     VYIVVSKDHS FRFFKPDLAS LASRPQATSS TASRHSAMPA APKAWDLNIA 
+
+YQ53_CAEEL       SGTCV...EN VLTSYGYDEF ILSSQTPLIG TVRPCKYTIL VNDA...KWS 
+Q21691_CAEEL     SGTCV...DV PGASHGYEEF ILCCQTPLIG TVKPTKYTII VNDC...RWS 
+O48771_ARATH     AGTVV...DT KIVHPTNYDF YMCAHAGKIG TSRPAHYHVL LDEI...GFS 
+Q9ZVD5_ARATH     PGTII...DN KICHPKNNDF YLCAHAGMIG TTRPTHYHVL YDEI...GFS 
+TAG76_CAEEL      PGTTV...DT GIVSPEGFDF YLCSHYGVQG TSRPARYHVL LDEC...KFT 
+O16720_CAEEL     PGTTV...DV GITHPTEFDF FLCSHAGIQG TSRPSHYHVL WDDN...DLT 
+PINH_ARATH       PGTVV...DT KICHPTEFDF YLCSHAGIQG TSRPAHYHVL WDEN...NFT 
+AGO1_SCHPO       PGTII...EK HVTHPYQYDF YLISHPSLQG VSVPVHYTVL HDEI...QMP 
+O76922_DROME     PGTVV...DD VITLPERYDF FLVSQAVRIG TVSPTSYNVI SDNM...GLN 
+PIWI_DROME       PGTIV...DD VITLPERYDF YLVSQQVRQG TVSPTSYNVL YSSM...GLS 
+Q17567_CAEEL     PGTVV...DT TVTRPERMDF YLVPQFVNQG TVTPVSYNII HDDT...GLG 
+PIWL1_HUMAN      PGTVI...DV EVTRPEWYDF FIVSQAVRSG SVSPTHYNVI YDNS...GLK 
+PIWI_ARCFU       EGTKVKLSSK RYLLTLLQPY LKRNGLEMVT PIKPLSVEIV SDN.....WT 
+Y1321_METJA      DGIFLPHKTP FGSNPVKLST WLRFNCGNEE GLK...IN.. .......... 
+O67434_AQUAE     KGYFYKLSED SVILATYNQV Y.......EG THQPIKVRKV YGE.....LP 
+Q21495_CAEEL     PGTIV...DS VIVSPDYNKF FHCGAVARQG TCKATKYTVL YPE....SPK 
+O16386_CAEEL     PGTVI...DH TIVSPVLSEW YHAGSLARQG TSKLVKYSLI FNTK...KNE 
+O02095_CAEEL     PGTVV...DH TIVSNVYTEW YHASAVARQG TAKATKFTLI FTTKAGPQAE 
+Q19645_CAEEL     PDTSV...GG DIAEYGKRQI FIQAFRPVQG TAKVPSFLVI RDDE...EVS 
+Q23415_CAEEL     PGIVL...DS AVTNPACKQF FLNGHTTLQG TAKTPLYTIL ADDC...NAP 
+O62275_CAEEL     PGILV...DS IVTNPACKQF FLNSHITLQG TAKTPLYTVL ADDA...KVS 
+
+YQ53_CAEEL       KNEL.MHL.. ....TYFRAF GHQVSY.... QPPSV..... ...PDVLYAA 
+Q21691_CAEEL     KNEI.MNV.. ....TYHLAF AHQVSY.... APPAI..... ...PNVSYAA 
+O48771_ARATH     PDDL.QNL.. ....IHSLSY KLLNSI.... FNVSSLLCVF VLSVAPVRYA 
+Q9ZVD5_ARATH     ADEL.QEL.. ....VHSLSY VYQRST.... SAISV..... ...VAPICYA 
+TAG76_CAEEL      ADEI.QSI.. ....TYGMCH TYGRCT.... RSVSI..... ...PTPVYYA 
+O16720_CAEEL     ADEL.QQL.. ....TYQMCH TYVRCT.... RSVSI..... ...PAPAYYA 
+PINH_ARATH       ADGI.QSL.. ....TNNLCY TYARCT.... RSVSI..... ...VPPAYYA 
+AGO1_SCHPO       PDQF.QTL.. ....CYNLCY VYARAT.... SAVSL..... ...VPPVYYA 
+O76922_DROME     ADKL.QML.. ....SYKMTH MYYNYS.... GTIRV..... ...PAVCHYA 
+PIWI_DROME       PEKM.QKL.. ....TYKMCH LYYNWS.... GTTRV..... ...PAVCQYA 
+Q17567_CAEEL     PDKH.QQL.. ....AFKLCH LYYNWQ.... GTVRV..... ...PAPCQYA 
+PIWL1_HUMAN      PDHI.QRL.. ....TYKLCH IYYNWP.... GVIRV..... ...PAPCQYA 
+PIWI_ARCFU       SEEYYHNVHE ILDEIYYLSK MNWRGF.... RSRNL..... ...PVTVNYP 
+Y1321_METJA      .ESI.MQL.. ....LYDLTK MNYSALYGEG RYLRI..... ...PAPIHYA 
+O67434_AQUAE     VEVL.CSQ.. ....ILSLTL MNYSSF.... QPIKL..... ...PATVHYS 
+Q21495_CAEEL     MEWI.QRM.. ....TNDLCY MHEIVF.... HPVSL..... ...PAPLYLT 
+O16386_CAEEL     KLSVYERL.. ....TNELCY EMQIVF.... HPTSL..... ...PIPLHIA 
+O02095_CAEEL     PLWHLEQL.. ....TNDLCY DHQIVF.... HPVGL..... ...PVPLYIA 
+Q19645_CAEEL     DEHV.AKM.. ....VCAVCS LHQLVN.... SPTSI..... ...PTPVYVA 
+Q23415_CAEEL     MDRL.EEL.. ....TYTLCH HHQIVA.... LSTSI..... ...PTPLYVA 
+O62275_CAEEL     MTAL.EDI.. ....TYKLCH LHQIVG.... LPTSL..... ...PTPLYVA 
+
+YQ53_CAEEL       ENLAKRGRNN YK
+Q21691_CAEEL     QNLAKRGHNN YK
+O48771_ARATH     HLAAAQVAQF TK
+Q9ZVD5_ARATH     HLAAAQLGTF MK
+TAG76_CAEEL      DLVATRARCH VK
+O16720_CAEEL     HLVAFRARYH LV
+PINH_ARATH       HLAAFRARFY LE
+AGO1_SCHPO       HLVSNLARYQ DV
+O76922_DROME     HKLAFLVAES IN
+PIWI_DROME       KKLATLVGTN LH
+Q17567_CAEEL     HKLAFLTAQS LH
+PIWL1_HUMAN      HKLAFLVGQS IH
+PIWI_ARCFU       KLVAGIIANV NR
+Y1321_METJA      DKFVKALGKN WK
+O67434_AQUAE     DKITKLMLRG IE
+Q21495_CAEEL     AEMAERGTKN LA
+O16386_CAEEL     GTYSERGSQM LA
+O02095_CAEEL     DRYSQRGAMV LA
+Q19645_CAEEL     HELAKRGTGL YK
+Q23415_CAEEL     NEYAKRGRDL WS
+O62275_CAEEL     NEYAKRGRNL WN
+
diff --git a/test/scripts/automated/belvu/test27 b/test/scripts/automated/belvu/test27
new file mode 100755
index 0000000..7920c9e
--- /dev/null
+++ b/test/scripts/automated/belvu/test27
@@ -0,0 +1,29 @@
+#!/bin/ksh
+#
+# Description:
+#   Read in an alignment that has a separator of '='
+#   between the sequence name and coords but don't strip. 
+#   the coords from the alignment name. Save without saving
+#   coords; the coords should still appear in the saved
+#   output because they were part of the name.
+
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences to the saved results
+diffs=`belvu -z '=' -R -C -o MSF $data_dir/PF02171_seed_separator.stock >&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
+
diff --git a/test/scripts/automated/belvu/test27_results b/test/scripts/automated/belvu/test27_results
new file mode 100644
index 0000000..facc1f2
--- /dev/null
+++ b/test/scripts/automated/belvu/test27_results
@@ -0,0 +1,226 @@
+PileUp
+
+ automated/belvu/../../../data/PF02171_seed_separator.stock  MSF: 412  Type: X  Check: 4875  ..
+
+  Name: YQ53_CAEEL=650-977     Len:    412  Check:   5009  Weight: 1.0000
+  Name: Q21691_CAEEL=673-1001  Len:    412  Check:   9881  Weight: 1.0000
+  Name: O48771_ARATH=542-860   Len:    412  Check:    634  Weight: 1.0000
+  Name: Q9ZVD5_ARATH=577-885   Len:    412  Check:   2274  Weight: 1.0000
+  Name: TAG76_CAEEL=660-966    Len:    412  Check:   8804  Weight: 1.0000
+  Name: O16720_CAEEL=566-867   Len:    412  Check:   7433  Weight: 1.0000
+  Name: PINH_ARATH=625-946     Len:    412  Check:   7730  Weight: 1.0000
+  Name: AGO1_SCHPO=500-799     Len:    412  Check:   1021  Weight: 1.0000
+  Name: O76922_DROME=555-852   Len:    412  Check:   4289  Weight: 1.0000
+  Name: PIWI_DROME=538-829     Len:    412  Check:   7323  Weight: 1.0000
+  Name: Q17567_CAEEL=397-708   Len:    412  Check:   4176  Weight: 1.0000
+  Name: PIWL1_HUMAN=555-847    Len:    412  Check:   9105  Weight: 1.0000
+  Name: PIWI_ARCFU=110-406     Len:    412  Check:   5661  Weight: 1.0000
+  Name: Y1321_METJA=426-699    Len:    412  Check:   5582  Weight: 1.0000
+  Name: O67434_AQUAE=419-694   Len:    412  Check:   5245  Weight: 1.0000
+  Name: Q21495_CAEEL=52-336    Len:    412  Check:   8897  Weight: 1.0000
+  Name: O16386_CAEEL=548-847   Len:    412  Check:   7301  Weight: 1.0000
+  Name: O02095_CAEEL=574-878   Len:    412  Check:   5686  Weight: 1.0000
+  Name: Q19645_CAEEL=674-996   Len:    412  Check:   5696  Weight: 1.0000
+  Name: Q23415_CAEEL=40-350    Len:    412  Check:   7766  Weight: 1.0000
+  Name: O62275_CAEEL=594-924   Len:    412  Check:   2375  Weight: 1.0000
+
+//
+
+YQ53_CAEEL=650-977     DILVGIAR.E KKPD.VHDIL KYFEESIGLQ TIQLCQQTVD KM.....MG. 
+Q21691_CAEEL=673-1001  TIVFGIIA.E KRPD.MHDIL KYFEEKLGQQ TIQISSETAD KF.....MR. 
+O48771_ARATH=542-860   FILCILPERK TSDI.YGPWK KICLTEEGIH TQCICPIKI. .......... 
+Q9ZVD5_ARATH=577-885   FILCVLPDKK NSDL.YGPWK KKNLTEFGIV TQCMAPTRQP ND........ 
+TAG76_CAEEL=660-966    CIIVVLQS.K NSDI.YMTVK EQSDIVHGIM SQCVLMKNVS RP........ 
+O16720_CAEEL=566-867   LIVVVLPG.. KTPI.YAEVK RVGDTVLGIA TQCVQAKNAI RT........ 
+PINH_ARATH=625-946     LLLAILPD.N NGSL.YGDLK RICETELGLI SQCCLTKHVF KI........ 
+AGO1_SCHPO=500-799     YLFFILDK.N SPEP.YGSIK RVCNTMLGVP SQCAISKHIL QS........ 
+O76922_DROME=555-852   IVMVVMRS.P NEEK.YSCIK KRTCVDRPVP SQVVTLKVIA PR.....QQ. 
+PIWI_DROME=538-829     LILCLVPN.D NAER.YSSIK KRGYVDRAVP TQVVTLKTTK NR.....SL. 
+Q17567_CAEEL=397-708   MLVVMLAD.D NKTR.YDSLK KYLCVECPIP NQCVNLRTLA GK.....SKD 
+PIWL1_HUMAN=555-847    IVVCLLSS.N RKDK.YDAIK KYLCTDCPTP SQCVVARTLG KQ.....QT. 
+PIWI_ARCFU=110-406     GIMLVLPE.Y NTPL.YYKLK SYLINS..IP SQFMRYDILS NR.....NL. 
+Y1321_METJA=426-699    CFALIIGKEK YKDNDYYEIL KKQLFDLKII SQNILWENWR KD.....DK. 
+O67434_AQUAE=419-694   LVIVFLEEYP KVDP.YKSFL LYDFVKRELL KKMIPSQVIL NR.....TL. 
+Q21495_CAEEL=52-336    GIVLPTPRIF FRDG...... ....QETSLN NQSFRNPT.. .......... 
+O16386_CAEEL=548-847   QLIMFITK.. SMNN.YHTEI KCLEQEFDLL TQDIRFETAV KL.....AQ. 
+O02095_CAEEL=574-878   QLLFFVVK.. SRYN.YHQQI KALEQKYDVL TQEIRAETAE KV.....FR. 
+Q19645_CAEEL=674-996   PFVLFISD.. DVPN.IHECL KFEERMSDIP TQHVLLKNVK KMRDNIEKKS 
+Q23415_CAEEL=40-350    KFAFVITD.D SITH.LHKKY KALEQKSMMV IQDMKISKAN SV.....VK. 
+O62275_CAEEL=594-924   TFVFIITD.D SITT.LHQRY KMIEKDTKMI VQDMKLSKAL SV........ 
+
+YQ53_CAEEL=650-977     ...GQGGRQT IDNVMRKFNL KCGGTNFFVE IPNAVRGKAV CSNNETLRKK 
+Q21691_CAEEL=673-1001  ...DHGGKQT IDNVIRKLNP KCGGTNFLID VPESVGHRVV CNNSAEMRAK 
+O48771_ARATH=542-860   ......SDQY LTNVLLKINS KLGGINS.LL GIEYSYNIPL INKIPTL... 
+Q9ZVD5_ARATH=577-885   ........QY LTNLLLKINA KLGGLNS.ML SVERTPAFTV ISKVPTI... 
+TAG76_CAEEL=660-966    ......TPAT CANIVLKLNM KMGGIN..SR IVADKITNKY LVDQPTM... 
+O16720_CAEEL=566-867   ......TPQT LSNLCLKMNV KLGGVNS.IL LPNVRPR... IFNEPVI... 
+PINH_ARATH=625-946     ......SKQY LANVSLKINV KMGGRNT.VL VDAISCRIPL VSDIPTI... 
+AGO1_SCHPO=500-799     ......KPQY CANLGMKINV KVGGINC.SL IPKSNP.... LGNVPTL... 
+O76922_DROME=555-852   ..KPTGLMSI ATKVVIQMNA KLMGA...PW QVVIPL.... ...HGLM... 
+PIWI_DROME=538-829     .......MSI ATKIAIQLNC KLGYT...PW MIELPL.... ...SGLM... 
+Q17567_CAEEL=397-708   GGENKNLGSI VLKIVLQMIC KTGGA...LW KVNIPL.... ...KSTM... 
+PIWL1_HUMAN=555-847    ......VMAI ATKIALQMNC KMGGE...LW RVDIPL.... ...KLVM... 
+PIWI_ARCFU=110-406     .......TFY VDNLLVQFVS KLGGK...PW ILNVDPEK.. .......... 
+Y1321_METJA=426-699    .......GYM TNNLLIQIMG KLGIK...YF ILDSKTPYDY .......... 
+O67434_AQUAE=419-694   ..KNENLKFV LLNVAEQVLA KTGNIP..YK LKEIEGKVDA .......... 
+Q21495_CAEEL=52-336    .......DFA QTGFFVDAKQ QLGGLN..YV VNS.....ET WNDSGLL... 
+O16386_CAEEL=548-847   ......QQNT RKNIIYKTNM KLGGLN..YE LRS.....GV FSNSKRL... 
+O02095_CAEEL=574-878   ......QPQT RLNIINKTNM KLGGLN..YA IGS.....EA FNKPNRL... 
+Q19645_CAEEL=674-996   QGGRRAYDLT LDNIVMKANI KCGGLN..YT .ADIPRDLAC WNEVSTF... 
+Q23415_CAEEL=40-350    ....DGKRLT LENVINKTNM KLGGLN..YT VSDAKKSMT. ...DEQL... 
+O62275_CAEEL=594-924   ..INAGKRLT LENVINKTNV KLGGSN..YV FVDAKKQL.. ...DSHL... 
+
+YQ53_CAEEL=650-977     LLEHVQFIGF EISHGASRTL FDRSRSQMDG EPSVVGVSYS LT...NSTQL 
+Q21691_CAEEL=673-1001  LYAKTQFIGF EMSHTGARTR FDIQKVMFDG DPTVVGVAYS L..KHSAQLG 
+O48771_ARATH=542-860   ......ILGM DVSHGPPGR. ........AD VPSVAAVVGS KCWPLISRYR 
+Q9ZVD5_ARATH=577-885   ......ILGM DVSHGSPGQ. ........SD VPSIAAVVSS REWPLISKYR 
+TAG76_CAEEL=660-966    ......VVGI DVTHPTQAE. ......MRMN MPSVAAIVAN VD.LLPQSYG 
+O16720_CAEEL=566-867   ......FLGC DITHPAAGD. ........TR KPSIAAVVGS MD.AHPSRYA 
+PINH_ARATH=625-946     ......IFGA DVTHPENGE. ........ES SPSIAAVVAS QDWPEVTKYA 
+AGO1_SCHPO=500-799     ......ILGG DVYHPGVGA. .........T GVSIASIVAS VD.LNGCKYT 
+O76922_DROME=555-852   ......TVGF DVCHSPKNK. .......... NKSYGAFVAT MDQKESFRYF 
+PIWI_DROME=538-829     ......TIGF DIAKSTRDR. .......... KRAYGALIAS MDLQQNSTYF 
+Q17567_CAEEL=397-708   ......IVGY DLYHDSTLK. .......... GKTVGACVST TS.NDFTQFY 
+PIWL1_HUMAN=555-847    ......IVGI DCYHDMTAG. .......... RRSIAGFVAS IN.EGMTRWF 
+PIWI_ARCFU=110-406     ........GS DIIIGTGAT. .......RID NVNLFCFAMV FK.KDGTMLW 
+Y1321_METJA=426-699    ......IMGL DTGLGIFGN. .......... .HRVGGCTVV YDSEGKIRRI 
+O67434_AQUAE=419-694   ......FVGI DISRITRDG. .........K TVNAVAFTKI FNSKGELVRY 
+Q21495_CAEEL=52-336    ......LIGL STAPYLNSY. .......SSE NVTTIGFVSN TM.DHPQKFA 
+O16386_CAEEL=548-847   ......IIGF ETSQRGGLG. .........D APIAIGFAAN MM.SHSQQFA 
+O02095_CAEEL=574-878   ......IVGF VTSQRVGGN. ........PD YPISVGFAAN ML.KHHQKFA 
+Q19645_CAEEL=674-996   ......VIGM DVAHPDRNA. ......AREG NPSTVGLSCN SA.ENPYSFI 
+Q23415_CAEEL=40-350    ......IIGV GVSAPPAGT. KYMMDNKGHL NPQIIGFASN A..VANHEFV 
+O62275_CAEEL=594-924   ......IIGV GISAPPAGT. KYAMENKGVL NPNVIGYAYN A..QHNQEFS 
+
+YQ53_CAEEL=650-977     GGFTYLQTQK EYKLQKLDE. .......... .FFPKCVRSY KEHSKT.LPT 
+Q21691_CAEEL=673-1001  GFSYFQESRL HKLTN.LQE. .......... .KMQICLNAY EQSSSY.LPE 
+O48771_ARATH=542-860   AAVRTQSPRL EMIDSLFQP. .IENTEKGDN GIMNELFVEF YRTSRARKPK 
+Q9ZVD5_ARATH=577-885   ASVRTQPSKA EMIESLVKK. ....NGTEDD GIIKELLVDF YTSSNKRKPE 
+TAG76_CAEEL=660-966    ANVKVQKKCR ESVVY.LLD. .......... .AIRERIITF YRHTKQ.KPA 
+O16720_CAEEL=566-867   ATVRVQQHRQ EIITD.LTY. .......... .MVRELLVQF YRNTRF.KPA 
+PINH_ARATH=625-946     GLVCAQAHRQ ELIQDLYKTW QDPVRGTVSG GMIRDLLISF RKATGQ.KPL 
+AGO1_SCHPO=500-799     AVSRSQPRHQ EVIEG.MKD. .......... .IVVYLLQGF RAMTKQ.QPQ 
+O76922_DROME=555-852   STVNEHIKGQ ELSEQ.MSV. .......... .NMACALRSY QEQHRS.LPE 
+PIWI_DROME=538-829     STV.TECSAF DVLANTLWP. .......... .MIAKALRQY QHEHRK.LPS 
+Q17567_CAEEL=397-708   SQTRPHENPT QLGNN.LTH. .......... .FVRKSLKQY YDNNDKTLPS 
+PIWL1_HUMAN=555-847    SRCIFQDRGQ ELVDG.LKV. .......... .CLQAALRAW .NSCNEYMPS 
+PIWI_ARCFU=110-406     NEISPIVTSS EYLTY.LKS. .......... .TIKKVVYGF KKSNPDWDVE 
+Y1321_METJA=426-699    QPIETPAPGE RLHLP..... .......... .YVIEYLEN. .KANIDMENK 
+O67434_AQUAE=419-694   YLTSYPAFGE KLTEK..... .......... .AIGDVFSLL EKLGF.KKGS 
+Q21495_CAEEL=52-336    GGYKYVKSGS DVFGQVMPE. .......... .ILLNSLRSA RKARKI.KPM 
+O16386_CAEEL=548-847   GGYMFVKKSA DNYGPVIPE. .......... .ILLTILKQA KANRPNDRPD 
+O02095_CAEEL=574-878   GGYVYVHRDR DVFGSIIKD. .......... .TLLAIFKTC TEQRG..RPD 
+Q19645_CAEEL=674-996   GDFLYTDPRR EAIQDEILR. .......... KFTDQSVRNF AEIRG..FPK 
+Q23415_CAEEL=40-350    GDFVLAPSGQ DTMAS.IED. .......... .VLKSSIDLF EMNRNT.LPK 
+O62275_CAEEL=594-924   GDFVLNSASQ DTLAP.IED. .......... .IVMHSLNEY QKFHDGGLPR 
+
+YQ53_CAEEL=650-977     RIVIYRVGAG EGNFNRVKE. EVEEMRRTFD .......KIQ .PGYR..PHL 
+Q21691_CAEEL=673-1001  TVVVYRVGSG EGDYPQIVN. EVNEMKLAAR .......KKK .HGYN..PKF 
+O48771_ARATH=542-860   QIIIFRDGVS ESQFEQVLKI EVDQIIKAYQ .......RLG .ESDV..PKF 
+Q9ZVD5_ARATH=577-885   HIIIFRDGVS ESQFNQVLNI ELDQIIEACK .......LLD .ANWN..PKF 
+TAG76_CAEEL=660-966    RIIVYRDGVS EGQFSEVLRE EIQSIRTACL .......AIA .EDFR..PPI 
+O16720_CAEEL=566-867   RIVVYRDGVS EGQLFNVLQY ELRAIREACV .......MLE .SGYQ..PGI 
+PINH_ARATH=625-946     RIIFYRDGVS EGQFYQVLLY ELDAIRKACA .......SLE .PNYQ..PPV 
+AGO1_SCHPO=500-799     RIIYFRDGTS EGQFLSVIND ELSQIKEACH .......SLS .PKYN..PKI 
+O76922_DROME=555-852   RILFFRDGVG DGQLYQVVNS EVNTLKDRLD EI...YKSAG .KQEG..CRM 
+PIWI_DROME=538-829     RIVFYRDGVS SGSLKQLFEF EVKDIIEKLK TE...YARVQ .LSP...PQL 
+Q17567_CAEEL=397-708   RLILYRDGAG DGQIPYIKNT EVKLVRDACD AVTDKAAELS .NKVQEKIKL 
+PIWL1_HUMAN=555-847    RIIVYRDGVG DGQLKTLVNY EVPQFLDCLK .......SIG .RGYN..PRL 
+PIWI_ARCFU=110-406     KLTLHVSG.. ..KRPKMKDG ETKILKETVE .......ELK .KQEMVSRDV 
+Y1321_METJA=426-699    NILFLRDG.. .....FIQNS ERNDLKEISK .......ELN .......SNI 
+O67434_AQUAE=419-694   KIVVHRDG.. .....RLYRD EVAAFK.... .......KYG .ELYG..YSL 
+Q21495_CAEEL=52-336    NIVIYLCGMS ESRFSIVKEE YVRNCHSVFK .......TLG .EKYS..PQL 
+O16386_CAEEL=548-847   ELLIYFSGVS EGQHALVNEY YANQVKAACG .......LFN .ESFR..PHI 
+O02095_CAEEL=574-878   DILLYFNGVS EGQFSMINEE FSARVKEACM AF...QKEGT .PPFR..PHI 
+Q19645_CAEEL=674-996   KVIIFRDGVS FGEETAALK. EVEIIEQTIK TA...AKSMG HSDYA..PKV 
+Q23415_CAEEL=40-350    RIIIYRSGAS DGSHASILAY EIPLARATIQ .......GYS .KDIN....L 
+O62275_CAEEL=594-924   RVIVYRTGTS EGNHGSIMAY EIPLARAAMR .......DFS .PDIQ....L 
+
+YQ53_CAEEL=650-977     VVIIAQRASH ARVFPSCISG .......... .......... .NRATDQNIP 
+Q21691_CAEEL=673-1001  LVICTQRNSH IRVFPEHINE .......... .......... RGKSMEQNVK 
+O48771_ARATH=542-860   TVIVAQKNHH TKLFQAKGPE .......... .......... .......NVP 
+Q9ZVD5_ARATH=577-885   LLLVAQKNHH TKFFQPTSPE .......... .......... .......NVP 
+TAG76_CAEEL=660-966    TYIVVQKRHH ARIFCKYQND .......... .......... .MVGKAKNVP 
+O16720_CAEEL=566-867   TFIAVQKRHH TRLFAADKAD .......... .......... .QVGKAFNIP 
+PINH_ARATH=625-946     TFIVVQKRHH TRLFANNHRD .......... .........K NSTDRSGNIL 
+AGO1_SCHPO=500-799     LVCTTQKRHH ARFFIKNKSD .......... .......... ..GDRNGNPL 
+O76922_DROME=555-852   TFIIVSKRIN SRYFT..... .......... .......... ....GHRNPV 
+PIWI_DROME=538-829     AYIVVTRSMN TRFFLN.... .......... .......... .....GQNPP 
+Q17567_CAEEL=397-708   AFIIVTKRVN MRILKQGSSS .......... .......... ...KSAINPQ 
+PIWL1_HUMAN=555-847    TVIVVKKRVN TRFFAQSGGR .......... .......... .....LQNPL 
+PIWI_ARCFU=110-406     KYAILHLNET HPFWVMGDPN .......... .......... ....NRFHPY 
+Y1321_METJA=426-699    EVISIRKNNK YKVFTSDYRI .......... .......... ....GSVFGN 
+O67434_AQUAE=419-694   ELLEIIKRNN PRFFSNEKFI .......... .......... .......... 
+Q21495_CAEEL=52-336    TIIVGSKGHS TRLYARGERD .......... .......... ....QISNLQ 
+O16386_CAEEL=548-847   TLILASKVHN TRVYKSENGG .......... .......... ....GVCNVE 
+O02095_CAEEL=574-878   TIIASSKAHN ERLYKSDKGR .......... .......... .....IVNLE 
+Q19645_CAEEL=674-996   LAIVVKKRHH TRFYAKGGHH .......... .......... ..GNMPINPL 
+Q23415_CAEEL=40-350    IYIIVTKEHS YRFFRDQLRS .......... .......... GGKATEMNIP 
+O62275_CAEEL=594-924   VYIVVSKDHS FRFFKPDLAS LASRPQATSS TASRHSAMPA APKAWDLNIA 
+
+YQ53_CAEEL=650-977     SGTCV...EN VLTSYGYDEF ILSSQTPLIG TVRPCKYTIL VNDA...KWS 
+Q21691_CAEEL=673-1001  SGTCV...DV PGASHGYEEF ILCCQTPLIG TVKPTKYTII VNDC...RWS 
+O48771_ARATH=542-860   AGTVV...DT KIVHPTNYDF YMCAHAGKIG TSRPAHYHVL LDEI...GFS 
+Q9ZVD5_ARATH=577-885   PGTII...DN KICHPKNNDF YLCAHAGMIG TTRPTHYHVL YDEI...GFS 
+TAG76_CAEEL=660-966    PGTTV...DT GIVSPEGFDF YLCSHYGVQG TSRPARYHVL LDEC...KFT 
+O16720_CAEEL=566-867   PGTTV...DV GITHPTEFDF FLCSHAGIQG TSRPSHYHVL WDDN...DLT 
+PINH_ARATH=625-946     PGTVV...DT KICHPTEFDF YLCSHAGIQG TSRPAHYHVL WDEN...NFT 
+AGO1_SCHPO=500-799     PGTII...EK HVTHPYQYDF YLISHPSLQG VSVPVHYTVL HDEI...QMP 
+O76922_DROME=555-852   PGTVV...DD VITLPERYDF FLVSQAVRIG TVSPTSYNVI SDNM...GLN 
+PIWI_DROME=538-829     PGTIV...DD VITLPERYDF YLVSQQVRQG TVSPTSYNVL YSSM...GLS 
+Q17567_CAEEL=397-708   PGTVV...DT TVTRPERMDF YLVPQFVNQG TVTPVSYNII HDDT...GLG 
+PIWL1_HUMAN=555-847    PGTVI...DV EVTRPEWYDF FIVSQAVRSG SVSPTHYNVI YDNS...GLK 
+PIWI_ARCFU=110-406     EGTKVKLSSK RYLLTLLQPY LKRNGLEMVT PIKPLSVEIV SDN.....WT 
+Y1321_METJA=426-699    DGIFLPHKTP FGSNPVKLST WLRFNCGNEE GLK...IN.. .......... 
+O67434_AQUAE=419-694   KGYFYKLSED SVILATYNQV Y.......EG THQPIKVRKV YGE.....LP 
+Q21495_CAEEL=52-336    PGTIV...DS VIVSPDYNKF FHCGAVARQG TCKATKYTVL YPE....SPK 
+O16386_CAEEL=548-847   PGTVI...DH TIVSPVLSEW YHAGSLARQG TSKLVKYSLI FNTK...KNE 
+O02095_CAEEL=574-878   PGTVV...DH TIVSNVYTEW YHASAVARQG TAKATKFTLI FTTKAGPQAE 
+Q19645_CAEEL=674-996   PDTSV...GG DIAEYGKRQI FIQAFRPVQG TAKVPSFLVI RDDE...EVS 
+Q23415_CAEEL=40-350    PGIVL...DS AVTNPACKQF FLNGHTTLQG TAKTPLYTIL ADDC...NAP 
+O62275_CAEEL=594-924   PGILV...DS IVTNPACKQF FLNSHITLQG TAKTPLYTVL ADDA...KVS 
+
+YQ53_CAEEL=650-977     KNEL.MHL.. ....TYFRAF GHQVSY.... QPPSV..... ...PDVLYAA 
+Q21691_CAEEL=673-1001  KNEI.MNV.. ....TYHLAF AHQVSY.... APPAI..... ...PNVSYAA 
+O48771_ARATH=542-860   PDDL.QNL.. ....IHSLSY KLLNSI.... FNVSSLLCVF VLSVAPVRYA 
+Q9ZVD5_ARATH=577-885   ADEL.QEL.. ....VHSLSY VYQRST.... SAISV..... ...VAPICYA 
+TAG76_CAEEL=660-966    ADEI.QSI.. ....TYGMCH TYGRCT.... RSVSI..... ...PTPVYYA 
+O16720_CAEEL=566-867   ADEL.QQL.. ....TYQMCH TYVRCT.... RSVSI..... ...PAPAYYA 
+PINH_ARATH=625-946     ADGI.QSL.. ....TNNLCY TYARCT.... RSVSI..... ...VPPAYYA 
+AGO1_SCHPO=500-799     PDQF.QTL.. ....CYNLCY VYARAT.... SAVSL..... ...VPPVYYA 
+O76922_DROME=555-852   ADKL.QML.. ....SYKMTH MYYNYS.... GTIRV..... ...PAVCHYA 
+PIWI_DROME=538-829     PEKM.QKL.. ....TYKMCH LYYNWS.... GTTRV..... ...PAVCQYA 
+Q17567_CAEEL=397-708   PDKH.QQL.. ....AFKLCH LYYNWQ.... GTVRV..... ...PAPCQYA 
+PIWL1_HUMAN=555-847    PDHI.QRL.. ....TYKLCH IYYNWP.... GVIRV..... ...PAPCQYA 
+PIWI_ARCFU=110-406     SEEYYHNVHE ILDEIYYLSK MNWRGF.... RSRNL..... ...PVTVNYP 
+Y1321_METJA=426-699    .ESI.MQL.. ....LYDLTK MNYSALYGEG RYLRI..... ...PAPIHYA 
+O67434_AQUAE=419-694   VEVL.CSQ.. ....ILSLTL MNYSSF.... QPIKL..... ...PATVHYS 
+Q21495_CAEEL=52-336    MEWI.QRM.. ....TNDLCY MHEIVF.... HPVSL..... ...PAPLYLT 
+O16386_CAEEL=548-847   KLSVYERL.. ....TNELCY EMQIVF.... HPTSL..... ...PIPLHIA 
+O02095_CAEEL=574-878   PLWHLEQL.. ....TNDLCY DHQIVF.... HPVGL..... ...PVPLYIA 
+Q19645_CAEEL=674-996   DEHV.AKM.. ....VCAVCS LHQLVN.... SPTSI..... ...PTPVYVA 
+Q23415_CAEEL=40-350    MDRL.EEL.. ....TYTLCH HHQIVA.... LSTSI..... ...PTPLYVA 
+O62275_CAEEL=594-924   MTAL.EDI.. ....TYKLCH LHQIVG.... LPTSL..... ...PTPLYVA 
+
+YQ53_CAEEL=650-977     ENLAKRGRNN YK
+Q21691_CAEEL=673-1001  QNLAKRGHNN YK
+O48771_ARATH=542-860   HLAAAQVAQF TK
+Q9ZVD5_ARATH=577-885   HLAAAQLGTF MK
+TAG76_CAEEL=660-966    DLVATRARCH VK
+O16720_CAEEL=566-867   HLVAFRARYH LV
+PINH_ARATH=625-946     HLAAFRARFY LE
+AGO1_SCHPO=500-799     HLVSNLARYQ DV
+O76922_DROME=555-852   HKLAFLVAES IN
+PIWI_DROME=538-829     KKLATLVGTN LH
+Q17567_CAEEL=397-708   HKLAFLTAQS LH
+PIWL1_HUMAN=555-847    HKLAFLVGQS IH
+PIWI_ARCFU=110-406     KLVAGIIANV NR
+Y1321_METJA=426-699    DKFVKALGKN WK
+O67434_AQUAE=419-694   DKITKLMLRG IE
+Q21495_CAEEL=52-336    AEMAERGTKN LA
+O16386_CAEEL=548-847   GTYSERGSQM LA
+O02095_CAEEL=574-878   DRYSQRGAMV LA
+Q19645_CAEEL=674-996   HELAKRGTGL YK
+Q23415_CAEEL=40-350    NEYAKRGRDL WS
+O62275_CAEEL=594-924   NEYAKRGRNL WN
+
diff --git a/test/scripts/automated/belvu/test28 b/test/scripts/automated/belvu/test28
new file mode 100755
index 0000000..04df372
--- /dev/null
+++ b/test/scripts/automated/belvu/test28
@@ -0,0 +1,25 @@
+#!/bin/ksh
+#
+# Description:
+#   Output random model probabilities for HMMER
+
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences to the saved results
+diffs=`belvu -p $data_dir/PF02171_seed.stock >&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
+
diff --git a/test/scripts/automated/belvu/test28_results b/test/scripts/automated/belvu/test28_results
new file mode 100644
index 0000000..1509f5d
--- /dev/null
+++ b/test/scripts/automated/belvu/test28_results
@@ -0,0 +1,2 @@
+Amino
+0.052911 0.024137 0.040911 0.073094 0.034502 0.056321 0.065730 0.062594 0.060139 0.079913 0.020455 0.046229 0.051002 0.037911 0.043638 0.072276 0.061639 0.069549 0.005591 0.041456 
diff --git a/test/scripts/automated/belvu/test29 b/test/scripts/automated/belvu/test29
new file mode 100755
index 0000000..950ffce
--- /dev/null
+++ b/test/scripts/automated/belvu/test29
@@ -0,0 +1,26 @@
+#!/bin/ksh
+#
+# Description:
+#   Output random model probabilities for HMMER
+#   (large alignment)
+
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences to the saved results
+diffs=`belvu -p $data_dir/ALIGN.selex >&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
+
diff --git a/test/scripts/automated/belvu/test29_results b/test/scripts/automated/belvu/test29_results
new file mode 100644
index 0000000..c54ed5c
--- /dev/null
+++ b/test/scripts/automated/belvu/test29_results
@@ -0,0 +1,2 @@
+Amino
+0.068517 0.007300 0.041795 0.038400 0.018811 0.111537 0.020656 0.029338 0.043409 0.061524 0.020972 0.074973 0.077700 0.092003 0.032677 0.121397 0.058120 0.044540 0.024264 0.012067 
diff --git a/test/scripts/automated/belvu/test2_results b/test/scripts/automated/belvu/test2_results
new file mode 100644
index 0000000..a27a7e2
--- /dev/null
+++ b/test/scripts/automated/belvu/test2_results
@@ -0,0 +1,58 @@
+#=GS YQ53_CAEEL/650-977     AC Q09249.1
+#=GS Q21691_CAEEL/673-1001  AC Q21691.1
+#=GS O48771_ARATH/542-860   AC O48771.1
+#=GS Q9ZVD5_ARATH/577-885   AC Q9ZVD5.2
+#=GS TAG76_CAEEL/660-966    AC P34681.2
+#=GS O16720_CAEEL/566-867   AC O16720.2
+#=GS PINH_ARATH/625-946     AC Q9XGW1.1
+#=GS AGO1_SCHPO/500-799     AC O74957.1
+#=GS O76922_DROME/555-852   AC O76922.1
+#=GS PIWI_DROME/538-829     AC Q9VKM1.1
+#=GS Q17567_CAEEL/397-708   AC Q17567.1
+#=GS PIWL1_HUMAN/555-847    AC Q96J94.1
+#=GS PIWI_ARCFU/110-406     AC O28951.1
+#=GS PIWI_ARCFU/110-406     DR PDB; 1w9h A; 110-406;
+#=GS PIWI_ARCFU/110-406     DR PDB; 2bgg A; 110-406;
+#=GS PIWI_ARCFU/110-406     DR PDB; 2bgg B; 110-406;
+#=GS PIWI_ARCFU/110-406     DR PDB; 1ytu A; 110-406;
+#=GS PIWI_ARCFU/110-406     DR PDB; 2w42 A; 110-406;
+#=GS PIWI_ARCFU/110-406     DR PDB; 2w42 B; 110-406;
+#=GS PIWI_ARCFU/110-406     DR PDB; 1ytu B; 110-406;
+#=GS Y1321_METJA/426-699    AC Q58717.1
+#=GS O67434_AQUAE/419-694   AC O67434.1
+#=GS O67434_AQUAE/419-694   DR PDB; 2nub A; 419-694;
+#=GS O67434_AQUAE/419-694   DR PDB; 1yvu A; 419-694;
+#=GS O67434_AQUAE/419-694   DR PDB; 2f8s A; 419-694;
+#=GS O67434_AQUAE/419-694   DR PDB; 2f8s B; 419-694;
+#=GS Q21495_CAEEL/52-336    AC Q21495.4
+#=GS O16386_CAEEL/548-847   AC O16386.1
+#=GS O02095_CAEEL/574-878   AC O02095.2
+#=GS Q19645_CAEEL/674-996   AC Q19645.1
+#=GS Q23415_CAEEL/40-350    AC Q23415.1
+#=GS O62275_CAEEL/594-924   AC O62275.1
+YQ53_CAEEL/650-977           DILVGIAR.EKKPD.VHDILKYFEESIGLQTIQLCQQTVDKM.....MG....GQGGRQTIDNVMRKFNLKCGGTNFFVEIPNAVRGKAVCSNNETLRKKLLEHVQFIGFEISHGASRTLFDRSRSQMDGEPSVVGVSYSLT...NSTQLGGFTYLQTQKEYKLQKLDE............FFPKCVRSYKEHSKT.LPTRIVIYRVGAGEGNFNRVKE.EVEEMRRTFD.......KIQ.PGYR..PHLVVIIAQRASHARVFPSCISG.....................NRATDQNIPSGTCV...ENVLTSYGYDEFILSSQTPLIGTVRPCKYTILVNDA...KWSKNEL.MHL......TYFRAFGHQVSY....QPPSV........PDVLYAAENLAKRGRNNYK
+Q21691_CAEEL/673-1001        TIVFGIIA.EKRPD.MHDILKYFEEKLGQQTIQISSETADKF.....MR....DHGGKQTIDNVIRKLNPKCGGTNFLIDVPESVGHRVVCNNSAEMRAKLYAKTQFIGFEMSHTGARTRFDIQKVMFDGDPTVVGVAYSL..KHSAQLGGFSYFQESRLHKLTN.LQE............KMQICLNAYEQSSSY.LPETVVVYRVGSGEGDYPQIVN.EVNEMKLAAR.......KKK.HGYN..PKFLVICTQRNSHIRVFPEHINE....................RGKSMEQNVKSGTCV...DVPGASHGYEEFILCCQTPLIGTVKPTKYTIIVNDC...RWSKNEI.MNV......TYHLAFAHQVSY....APPAI........PNVSYAAQNLAKRGHNNYK
+O48771_ARATH/542-860         FILCILPERKTSDI.YGPWKKICLTEEGIHTQCICPIKI.................SDQYLTNVLLKINSKLGGINS.LLGIEYSYNIPLINKIPTL.........ILGMDVSHGPPGR.........ADVPSVAAVVGSKCWPLISRYRAAVRTQSPRLEMIDSLFQP..IENTEKGDNGIMNELFVEFYRTSRARKPKQIIIFRDGVSESQFEQVLKIEVDQIIKAYQ.......RLG.ESDV..PKFTVIVAQKNHHTKLFQAKGPE...........................NVPAGTVV...DTKIVHPTNYDFYMCAHAGKIGTSRPAHYHVLLDEI...GFSPDDL.QNL......IHSLSYKLLNSI....FNVSSLLCVFVLSVAPVRYAHLAAAQVAQFTK
+Q9ZVD5_ARATH/577-885         FILCVLPDKKNSDL.YGPWKKKNLTEFGIVTQCMAPTRQPND................QYLTNLLLKINAKLGGLNS.MLSVERTPAFTVISKVPTI.........ILGMDVSHGSPGQ.........SDVPSIAAVVSSREWPLISKYRASVRTQPSKAEMIESLVKK.....NGTEDDGIIKELLVDFYTSSNKRKPEHIIIFRDGVSESQFNQVLNIELDQIIEACK.......LLD.ANWN..PKFLLLVAQKNHHTKFFQPTSPE...........................NVPPGTII...DNKICHPKNNDFYLCAHAGMIGTTRPTHYHVLYDEI...GFSADEL.QEL......VHSLSYVYQRST....SAISV........VAPICYAHLAAAQLGTFMK
+TAG76_CAEEL/660-966          CIIVVLQS.KNSDI.YMTVKEQSDIVHGIMSQCVLMKNVSRP..............TPATCANIVLKLNMKMGGIN..SRIVADKITNKYLVDQPTM.........VVGIDVTHPTQAE.......MRMNMPSVAAIVANVD.LLPQSYGANVKVQKKCRESVVY.LLD............AIRERIITFYRHTKQ.KPARIIVYRDGVSEGQFSEVLREEIQSIRTACL.......AIA.EDFR..PPITYIVVQKRHHARIFCKYQND.....................MVGKAKNVPPGTTV...DTGIVSPEGFDFYLCSHYGVQGTSRPARYHVLLDEC...KFTADEI.QSI......TYGMCHTYGRCT....RSVSI........PTPVYYADLVATRARCHVK
+O16720_CAEEL/566-867         LIVVVLPG..KTPI.YAEVKRVGDTVLGIATQCVQAKNAIRT..............TPQTLSNLCLKMNVKLGGVNS.ILLPNVRPR...IFNEPVI.........FLGCDITHPAAGD.........TRKPSIAAVVGSMD.AHPSRYAATVRVQQHRQEIITD.LTY............MVRELLVQFYRNTRF.KPARIVVYRDGVSEGQLFNVLQYELRAIREACV.......MLE.SGYQ..PGITFIAVQKRHHTRLFAADKAD.....................QVGKAFNIPPGTTV...DVGITHPTEFDFFLCSHAGIQGTSRPSHYHVLWDDN...DLTADEL.QQL......TYQMCHTYVRCT....RSVSI........PAPAYYAHLVAFRARYHLV
+PINH_ARATH/625-946           LLLAILPD.NNGSL.YGDLKRICETELGLISQCCLTKHVFKI..............SKQYLANVSLKINVKMGGRNT.VLVDAISCRIPLVSDIPTI.........IFGADVTHPENGE.........ESSPSIAAVVASQDWPEVTKYAGLVCAQAHRQELIQDLYKTWQDPVRGTVSGGMIRDLLISFRKATGQ.KPLRIIFYRDGVSEGQFYQVLLYELDAIRKACA.......SLE.PNYQ..PPVTFIVVQKRHHTRLFANNHRD...................KNSTDRSGNILPGTVV...DTKICHPTEFDFYLCSHAGIQGTSRPAHYHVLWDEN...NFTADGI.QSL......TNNLCYTYARCT....RSVSI........VPPAYYAHLAAFRARFYLE
+AGO1_SCHPO/500-799           YLFFILDK.NSPEP.YGSIKRVCNTMLGVPSQCAISKHILQS..............KPQYCANLGMKINVKVGGINC.SLIPKSNP....LGNVPTL.........ILGGDVYHPGVGA..........TGVSIASIVASVD.LNGCKYTAVSRSQPRHQEVIEG.MKD............IVVYLLQGFRAMTKQ.QPQRIIYFRDGTSEGQFLSVINDELSQIKEACH.......SLS.PKYN..PKILVCTTQKRHHARFFIKNKSD......................GDRNGNPLPGTII...EKHVTHPYQYDFYLISHPSLQGVSVPVHYTVLHDEI...QMPPDQF.QTL......CYNLCYVYARAT....SAVSL........VPPVYYAHLVSNLARYQDV
+O76922_DROME/555-852         IVMVVMRS.PNEEK.YSCIKKRTCVDRPVPSQVVTLKVIAPR.....QQ...KPTGLMSIATKVVIQMNAKLMGA...PWQVVIPL.......HGLM.........TVGFDVCHSPKNK...........NKSYGAFVATMDQKESFRYFSTVNEHIKGQELSEQ.MSV............NMACALRSYQEQHRS.LPERILFFRDGVGDGQLYQVVNSEVNTLKDRLDEI...YKSAG.KQEG..CRMTFIIVSKRINSRYFT.............................GHRNPVPGTVV...DDVITLPERYDFFLVSQAVRIGTVSPTSYNVISDNM...GLNADKL.QML......SYKMTHMYYNYS....GTIRV........PAVCHYAHKLAFLVAESIN
+PIWI_DROME/538-829           LILCLVPN.DNAER.YSSIKKRGYVDRAVPTQVVTLKTTKNR.....SL........MSIATKIAIQLNCKLGYT...PWMIELPL.......SGLM.........TIGFDIAKSTRDR...........KRAYGALIASMDLQQNSTYFSTV.TECSAFDVLANTLWP............MIAKALRQYQHEHRK.LPSRIVFYRDGVSSGSLKQLFEFEVKDIIEKLKTE...YARVQ.LSP...PQLAYIVVTRSMNTRFFLN.............................GQNPPPGTIV...DDVITLPERYDFYLVSQQVRQGTVSPTSYNVLYSSM...GLSPEKM.QKL......TYKMCHLYYNWS....GTTRV........PAVCQYAKKLATLVGTNLH
+Q17567_CAEEL/397-708         MLVVMLAD.DNKTR.YDSLKKYLCVECPIPNQCVNLRTLAGK.....SKDGGENKNLGSIVLKIVLQMICKTGGA...LWKVNIPL.......KSTM.........IVGYDLYHDSTLK...........GKTVGACVSTTS.NDFTQFYSQTRPHENPTQLGNN.LTH............FVRKSLKQYYDNNDKTLPSRLILYRDGAGDGQIPYIKNTEVKLVRDACDAVTDKAAELS.NKVQEKIKLAFIIVTKRVNMRILKQGSSS.......................KSAINPQPGTVV...DTTVTRPERMDFYLVPQFVNQGTVTPVSYNIIHDDT...GLGPDKH.QQL......AFKLCHLYYNWQ....GTVRV........PAPCQYAHKLAFLTAQSLH
+PIWL1_HUMAN/555-847          IVVCLLSS.NRKDK.YDAIKKYLCTDCPTPSQCVVARTLGKQ.....QT.......VMAIATKIALQMNCKMGGE...LWRVDIPL.......KLVM.........IVGIDCYHDMTAG...........RRSIAGFVASIN.EGMTRWFSRCIFQDRGQELVDG.LKV............CLQAALRAW.NSCNEYMPSRIIVYRDGVGDGQLKTLVNYEVPQFLDCLK.......SIG.RGYN..PRLTVIVVKKRVNTRFFAQSGGR.........................LQNPLPGTVI...DVEVTRPEWYDFFIVSQAVRSGSVSPTHYNVIYDNS...GLKPDHI.QRL......TYKLCHIYYNWP....GVIRV........PAPCQYAHKLAFLVGQSIH
+PIWI_ARCFU/110-406           GIMLVLPE.YNTPL.YYKLKSYLINS..IPSQFMRYDILSNR.....NL........TFYVDNLLVQFVSKLGGK...PWILNVDPEK....................GSDIIIGTGAT........RIDNVNLFCFAMVFK.KDGTMLWNEISPIVTSSEYLTY.LKS............TIKKVVYGFKKSNPDWDVEKLTLHVSG....KRPKMKDGETKILKETVE.......ELK.KQEMVSRDVKYAILHLNETHPFWVMGDPN........................NRFHPYEGTKVKLSSKRYLLTLLQPYLKRNGLEMVTPIKPLSVEIVSDN.....WTSEEYYHNVHEILDEIYYLSKMNWRGF....RSRNL........PVTVNYPKLVAGIIANVNR
+#=GR PIWI_ARCFU/110-406 SS   --EEEESS.S-HHH.HHHHHHHHHTT..S--EEEEHHHHCTS.....TH........HHHHHHHHHHHHHH----...--EE---TT-....................---EEE----E........ESSSSEEE-EEEEEE.----EEEEEE--SEEGGGHHHH.HHH............HHHHHH---TTTSTT---SEEEEEE--....---S-----HHHHHHHHH.......HHH.HTTSS-TT-EEEEEEEEE---EEEE--TT........................TT-------EEESSSSEEEEEEE-TCEE----EEEEEEEEEEEEEEEE-.....--TTTHHHHHHHHHHHHHHHTT------....---SS........-HHHHHHHHH---HHHHHH
+Y1321_METJA/426-699          CFALIIGKEKYKDNDYYEILKKQLFDLKIISQNILWENWRKD.....DK........GYMTNNLLIQIMGKLGIK...YFILDSKTPYDY................IMGLDTGLGIFGN............HRVGGCTVVYDSEGKIRRIQPIETPAPGERLHLP................YVIEYLEN..KANIDMENKNILFLRDG.......FIQNSERNDLKEISK.......ELN.......SNIEVISIRKNNKYKVFTSDYRI........................GSVFGNDGIFLPHKTPFGSNPVKLSTWLRFNCGNEEGLK...IN.............ESI.MQL......LYDLTKMNYSALYGEGRYLRI........PAPIHYADKFVKALGKNWK
+O67434_AQUAE/419-694         LVIVFLEEYPKVDP.YKSFLLYDFVKRELLKKMIPSQVILNR.....TL...KNENLKFVLLNVAEQVLAKTGNIP..YKLKEIEGKVDA................FVGIDISRITRDG..........KTVNAVAFTKIFNSKGELVRYYLTSYPAFGEKLTEK................AIGDVFSLLEKLGF.KKGSKIVVHRDG.......RLYRDEVAAFK...........KYG.ELYG..YSLELLEIIKRNNPRFFSNEKFI..............................KGYFYKLSEDSVILATYNQVY.......EGTHQPIKVRKVYGE.....LPVEVL.CSQ......ILSLTLMNYSSF....QPIKL........PATVHYSDKITKLMLRGIE
+#=GR O67434_AQUAE/419-694 SS EEEEEE---S---S.SS--HHHHHHHHHHHHTT--EEEEEHH.....HH...HHS-HHHHHHHHHHHHHHH---BS..-EES------SE................EE--EEEEEE---..........-ECEEEEEEEEEE----EEEEEEEEETT---HHHHH................H---HHHHHHH---.----EEEEEE--.......---HHHHHHHH...........H--.----..-EEEEEEEE-SS---EEES-S--..............................---EEEETTTEEEE--S----.......---B--EEEEEEE--.....--HHHH.HHH......HHHHGGGG--TT....S--SS........-TTTTTHHHHHHHHH----
+Q21495_CAEEL/52-336          GIVLPTPRIFFRDG..........QETSLNNQSFRNPT...................DFAQTGFFVDAKQQLGGLN..YVVNS.....ETWNDSGLL.........LIGLSTAPYLNSY........SSENVTTIGFVSNTM.DHPQKFAGGYKYVKSGSDVFGQVMPE............ILLNSLRSARKARKI.KPMNIVIYLCGMSESRFSIVKEEYVRNCHSVFK.......TLG.EKYS..PQLTIIVGSKGHSTRLYARGERD........................QISNLQPGTIV...DSVIVSPDYNKFFHCGAVARQGTCKATKYTVLYPE....SPKMEWI.QRM......TNDLCYMHEIVF....HPVSL........PAPLYLTAEMAERGTKNLA
+O16386_CAEEL/548-847         QLIMFITK..SMNN.YHTEIKCLEQEFDLLTQDIRFETAVKL.....AQ.......QQNTRKNIIYKTNMKLGGLN..YELRS.....GVFSNSKRL.........IIGFETSQRGGLG..........DAPIAIGFAANMM.SHSQQFAGGYMFVKKSADNYGPVIPE............ILLTILKQAKANRPNDRPDELLIYFSGVSEGQHALVNEYYANQVKAACG.......LFN.ESFR..PHITLILASKVHNTRVYKSENGG........................GVCNVEPGTVI...DHTIVSPVLSEWYHAGSLARQGTSKLVKYSLIFNTK...KNEKLSVYERL......TNELCYEMQIVF....HPTSL........PIPLHIAGTYSERGSQMLA
+O02095_CAEEL/574-878         QLLFFVVK..SRYN.YHQQIKALEQKYDVLTQEIRAETAEKV.....FR.......QPQTRLNIINKTNMKLGGLN..YAIGS.....EAFNKPNRL.........IVGFVTSQRVGGN.........PDYPISVGFAANML.KHHQKFAGGYVYVHRDRDVFGSIIKD............TLLAIFKTCTEQRG..RPDDILLYFNGVSEGQFSMINEEFSARVKEACMAF...QKEGT.PPFR..PHITIIASSKAHNERLYKSDKGR.........................IVNLEPGTVV...DHTIVSNVYTEWYHASAVARQGTAKATKFTLIFTTKAGPQAEPLWHLEQL......TNDLCYDHQIVF....HPVGL........PVPLYIADRYSQRGAMVLA
+Q19645_CAEEL/674-996         PFVLFISD..DVPN.IHECLKFEERMSDIPTQHVLLKNVKKMRDNIEKKSQGGRRAYDLTLDNIVMKANIKCGGLN..YT.ADIPRDLACWNEVSTF.........VIGMDVAHPDRNA.......AREGNPSTVGLSCNSA.ENPYSFIGDFLYTDPRREAIQDEILR...........KFTDQSVRNFAEIRG..FPKKVIIFRDGVSFGEETAALK.EVEIIEQTIKTA...AKSMGHSDYA..PKVLAIVVKKRHHTRFYAKGGHH......................GNMPINPLPDTSV...GGDIAEYGKRQIFIQAFRPVQGTAKVPSFLVIRDDE...EVSDEHV.AKM......VCAVCSLHQLVN....SPTSI........PTPVYVAHELAKRGTGLYK
+Q23415_CAEEL/40-350          KFAFVITD.DSITH.LHKKYKALEQKSMMVIQDMKISKANSV.....VK.....DGKRLTLENVINKTNMKLGGLN..YTVSDAKKSMT....DEQL.........IIGVGVSAPPAGT.KYMMDNKGHLNPQIIGFASNA..VANHEFVGDFVLAPSGQDTMAS.IED............VLKSSIDLFEMNRNT.LPKRIIIYRSGASDGSHASILAYEIPLARATIQ.......GYS.KDIN....LIYIIVTKEHSYRFFRDQLRS....................GGKATEMNIPPGIVL...DSAVTNPACKQFFLNGHTTLQGTAKTPLYTILADDC...NAPMDRL.EEL......TYTLCHHHQIVA....LSTSI........PTPLYVANEYAKRGRDLWS
+O62275_CAEEL/594-924         TFVFIITD.DSITT.LHQRYKMIEKDTKMIVQDMKLSKALSV..........INAGKRLTLENVINKTNVKLGGSN..YVFVDAKKQL.....DSHL.........IIGVGISAPPAGT.KYAMENKGVLNPNVIGYAYNA..QHNQEFSGDFVLNSASQDTLAP.IED............IVMHSLNEYQKFHDGGLPRRVIVYRTGTSEGNHGSIMAYEIPLARAAMR.......DFS.PDIQ....LVYIVVSKDHSFRFFKPDLASLASRPQATSSTASRHSAMPAAPKAWDLNIAPGILV...DSIVTNPACKQFFLNSHITLQGTAKTPLYTVLADDA...KVSMTAL.EDI......TYKLCHLHQIVG....LPTSL........PTPLYVANEYAKRGRNLWN
+#=GC SS_cons                 EEEEEESS-S-HHC.CCHHHHHHHCCHHCHHCCEECCCCCCC.....CH...HHS-HHHHHHHHHHHHHHH---BS..-EEC---TT-SE................EE--EEEEEE--E........ESSCCEEEEEEEEEE----EEEEEEEEETCEGGHHHHH.HHH............HHHHHHHHHCCTSTT---SEEEEEE--.......S--HHHHHHHHHHHH.......HHH.HTTSS.TCEEEEEEEECC---EEEC-STT........................TT....---EEECTTTEEEEEEC-TCEE....EEEEEEEEEEEEEEEE-.....--CCCHHHHHHHHHHHHHHHCCGG--TT....S--SS........-CCCCCHHHHHHHHHHHHH
+#=GC seq_cons                hllhllsc.pspst.YtshhKhhppchsl.oQslphcsh.ph...............tthhsNllhKhNsKlGGhN..hhlssh.h........sph.........llGhDlu+sssus..........tssolsuhsushs.ppsppahushphpppsp-hhss.lpp............hltphLpsapcpspp.hPp+IllYRDGsS-Gph.plhp.Elspl+cshc.......pls.psap..PplshIllpKpcpsRhFtpstsp.........................thNs.PGTlV...DsslspPsth-FaLsupsshpGTs+Ps+YsllhD-h...thss-cl.ppL......oapLCaha.psh....pslul........PsPlaYAcphAppstp.hc
+//
diff --git a/test/scripts/automated/belvu/test3 b/test/scripts/automated/belvu/test3
new file mode 100755
index 0000000..d0d8379
--- /dev/null
+++ b/test/scripts/automated/belvu/test3
@@ -0,0 +1,23 @@
+#!/bin/ksh
+#
+# Description:
+#   Test saving an alignment as Selex format
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences to the saved results
+diffs=`belvu -o Selex $data_dir/PF02171_seed.stock >&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
diff --git a/test/scripts/automated/belvu/test30 b/test/scripts/automated/belvu/test30
new file mode 100755
index 0000000..55d506f
--- /dev/null
+++ b/test/scripts/automated/belvu/test30
@@ -0,0 +1,26 @@
+#!/bin/ksh
+#
+# Description:
+#   Output random model probabilities for HMMER
+#   (large alignment)
+
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences to the saved results
+diffs=`belvu -p $data_dir/PF02171_full.selex >&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
+
diff --git a/test/scripts/automated/belvu/test30_results b/test/scripts/automated/belvu/test30_results
new file mode 100644
index 0000000..1f2029a
--- /dev/null
+++ b/test/scripts/automated/belvu/test30_results
@@ -0,0 +1,2 @@
+Amino
+0.066611 0.023377 0.048324 0.041934 0.039061 0.059998 0.033464 0.064728 0.059290 0.082839 0.021297 0.045031 0.051180 0.048569 0.056190 0.063069 0.059432 0.083770 0.007218 0.044619 
diff --git a/test/scripts/automated/belvu/test31 b/test/scripts/automated/belvu/test31
new file mode 100755
index 0000000..de7ae6c
--- /dev/null
+++ b/test/scripts/automated/belvu/test31
@@ -0,0 +1,26 @@
+#!/bin/ksh
+#
+# Description:
+#   Sort alphabetically on start up. Also tests saving
+#   without coords in unaligned fasta format.
+
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences to the saved results
+diffs=`belvu -o Fasta -S a -C $data_dir/PF02171_seed.selex >&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
+
diff --git a/test/scripts/automated/belvu/test31_results b/test/scripts/automated/belvu/test31_results
new file mode 100644
index 0000000..cc2dd07
--- /dev/null
+++ b/test/scripts/automated/belvu/test31_results
@@ -0,0 +1,110 @@
+>AGO1_SCHPO
+YLFFILDKNSPEPYGSIKRVCNTMLGVPSQCAISKHILQSKPQYCANLGMKINVKVGGINCSLIPKSNPLGNVPTLILG 
+GDVYHPGVGATGVSIASIVASVDLNGCKYTAVSRSQPRHQEVIEGMKDIVVYLLQGFRAMTKQQPQRIIYFRDGTSEGQF
+LSVINDELSQIKEACHSLSPKYNPKILVCTTQKRHHARFFIKNKSDGDRNGNPLPGTIIEKHVTHPYQYDFYLISHPSLQ
+GVSVPVHYTVLHDEIQMPPDQFQTLCYNLCYVYARATSAVSLVPPVYYAHLVSNLARYQDV
+>O02095_CAEEL
+QLLFFVVKSRYNYHQQIKALEQKYDVLTQEIRAETAEKVFRQPQTRLNIINKTNMKLGGLNYAIGSEAFNKPNRLIVG F
+VTSQRVGGNPDYPISVGFAANMLKHHQKFAGGYVYVHRDRDVFGSIIKDTLLAIFKTCTEQRGRPDDILLYFNGVSEGQF
+SMINEEFSARVKEACMAFQKEGTPPFRPHITIIASSKAHNERLYKSDKGRIVNLEPGTVVDHTIVSNVYTEWYHASAVAR
+QGTAKATKFTLIFTTKAGPQAEPLWHLEQLTNDLCYDHQIVFHPVGLPVPLYIADRYSQRGAMVLA
+>O16386_CAEEL
+QLIMFITKSMNNYHTEIKCLEQEFDLLTQDIRFETAVKLAQQQNTRKNIIYKTNMKLGGLNYELRSGVFSNSKRLIIG F
+ETSQRGGLGDAPIAIGFAANMMSHSQQFAGGYMFVKKSADNYGPVIPEILLTILKQAKANRPNDRPDELLIYFSGVSEGQ
+HALVNEYYANQVKAACGLFNESFRPHITLILASKVHNTRVYKSENGGGVCNVEPGTVIDHTIVSPVLSEWYHAGSLARQG
+TSKLVKYSLIFNTKKNEKLSVYERLTNELCYEMQIVFHPTSLPIPLHIAGTYSERGSQMLA
+>O16720_CAEEL
+LIVVVLPGKTPIYAEVKRVGDTVLGIATQCVQAKNAIRTTPQTLSNLCLKMNVKLGGVNSILLPNVRPRIFNEPVIFLG 
+CDITHPAAGDTRKPSIAAVVGSMDAHPSRYAATVRVQQHRQEIITDLTYMVRELLVQFYRNTRFKPARIVVYRDGVSEGQ
+LFNVLQYELRAIREACVMLESGYQPGITFIAVQKRHHTRLFAADKADQVGKAFNIPPGTTVDVGITHPTEFDFFLCSHAG
+IQGTSRPSHYHVLWDDNDLTADELQQLTYQMCHTYVRCTRSVSIPAPAYYAHLVAFRARYHLV
+>O48771_ARATH
+FILCILPERKTSDIYGPWKKICLTEEGIHTQCICPIKISDQYLTNVLLKINSKLGGINSLLGIEYSYNIPLINKIPTLIL
+G MDVSHGPPGRADVPSVAAVVGSKCWPLISRYRAAVRTQSPRLEMIDSLFQPIENTEKGDNGIMNELFVEFYRTSRARK
+PKQIIIFRDGVSESQFEQVLKIEVDQIIKAYQRLGESDVPKFTVIVAQKNHHTKLFQAKGPENVPAGTVVDTKIVHPTNY
+DFYMCAHAGKIGTSRPAHYHVLLDEIGFSPDDLQNLIHSLSYKLLNSIFNVSSLLCVFVLSVAPVRYAHLAAAQVAQFTK
+>O62275_CAEEL
+TFVFIITDDSITTLHQRYKMIEKDTKMIVQDMKLSKALSVINAGKRLTLENVINKTNVKLGGSNYVFVDAKKQLDSHLII
+G VGISAPPAGTKYAMENKGVLNPNVIGYAYNAQHNQEFSGDFVLNSASQDTLAPIEDIVMHSLNEYQKFHDGGLPRRVI
+VYRTGTSEGNHGSIMAYEIPLARAAMRDFSPDIQLVYIVVSKDHSFRFFKPDLASLASRPQATSSTASRHSAMPAAPKAW
+DLNIAPGILVDSIVTNPACKQFFLNSHITLQGTAKTPLYTVLADDAKVSMTALEDITYKLCHLHQIVGLPTSLPTPLYVA
+NEYAKRGRNLWN
+>O67434_AQUAE
+LVIVFLEEYPKVDPYKSFLLYDFVKRELLKKMIPSQVILNRTLKNENLKFVLLNVAEQVLAKTGNIPYKLKEIEGKVDAF
+VG IDISRITRDGKTVNAVAFTKIFNSKGELVRYYLTSYPAFGEKLTEKAIGDVFSLLEKLGFKKGSKIVVHRDGRLYRD
+EVAAFKKYGELYGYSLELLEIIKRNNPRFFSNEKFIKGYFYKLSEDSVILATYNQVYEGTHQPIKVRKVYGELPVEVLCS
+QILSLTLMNYSSFQPIKLPATVHYSDKITKLMLRGIE
+>O76922_DROME
+IVMVVMRSPNEEKYSCIKKRTCVDRPVPSQVVTLKVIAPRQQKPTGLMSIATKVVIQMNAKLMGAPWQVVIPLHGLMTVG
+ FDVCHSPKNKNKSYGAFVATMDQKESFRYFSTVNEHIKGQELSEQMSVNMACALRSYQEQHRSLPERILFFRDGVGDGQ
+LYQVVNSEVNTLKDRLDEIYKSAGKQEGCRMTFIIVSKRINSRYFTGHRNPVPGTVVDDVITLPERYDFFLVSQAVRIGT
+VSPTSYNVISDNMGLNADKLQMLSYKMTHMYYNYSGTIRVPAVCHYAHKLAFLVAESIN
+>PINH_ARATH
+LLLAILPDNNGSLYGDLKRICETELGLISQCCLTKHVFKISKQYLANVSLKINVKMGGRNTVLVDAISCRIPLVSDIPTI
+IFG ADVTHPENGEESSPSIAAVVASQDWPEVTKYAGLVCAQAHRQELIQDLYKTWQDPVRGTVSGGMIRDLLISFRKAT
+GQKPLRIIFYRDGVSEGQFYQVLLYELDAIRKACASLEPNYQPPVTFIVVQKRHHTRLFANNHRDKNSTDRSGNILPGTV
+VDTKICHPTEFDFYLCSHAGIQGTSRPAHYHVLWDENNFTADGIQSLTNNLCYTYARCTRSVSIVPPAYYAHLAAFRARF
+YLE
+>PIWI_ARCFU
+GIMLVLPEYNTPLYYKLKSYLINSIPSQFMRYDILSNRNLTFYVDNLLVQFVSKLGGKPWILNVDPEKG SDIIIGTGAT
+RIDNVNLFCFAMVFKKDGTMLWNEISPIVTSSEYLTYLKSTIKKVVYGFKKSNPDWDVEKLTLHVSGKRPKMKDGETKIL
+KETVEELKKQEMVSRDVKYAILHLNETHPFWVMGDPNNRFHPYEGTKVKLSSKRYLLTLLQPYLKRNGLEMVTPIKPLSV
+EIVSDNWTSEEYYHNVHEILDEIYYLSKMNWRGFRSRNLPVTVNYPKLVAGIIANVNR
+>PIWI_DROME
+LILCLVPNDNAERYSSIKKRGYVDRAVPTQVVTLKTTKNRSLMSIATKIAIQLNCKLGYTPWMIELPLSGLMTIG FDIA
+KSTRDRKRAYGALIASMDLQQNSTYFSTVTECSAFDVLANTLWPMIAKALRQYQHEHRKLPSRIVFYRDGVSSGSLKQLF
+EFEVKDIIEKLKTEYARVQLSPPQLAYIVVTRSMNTRFFLNGQNPPPGTIVDDVITLPERYDFYLVSQQVRQGTVSPTSY
+NVLYSSMGLSPEKMQKLTYKMCHLYYNWSGTTRVPAVCQYAKKLATLVGTNLH
+>PIWL1_HUMAN
+IVVCLLSSNRKDKYDAIKKYLCTDCPTPSQCVVARTLGKQQTVMAIATKIALQMNCKMGGELWRVDIPLKLVMIVG IDC
+YHDMTAGRRSIAGFVASINEGMTRWFSRCIFQDRGQELVDGLKVCLQAALRAWNSCNEYMPSRIIVYRDGVGDGQLKTLV
+NYEVPQFLDCLKSIGRGYNPRLTVIVVKKRVNTRFFAQSGGRLQNPLPGTVIDVEVTRPEWYDFFIVSQAVRSGSVSPTH
+YNVIYDNSGLKPDHIQRLTYKLCHIYYNWPGVIRVPAPCQYAHKLAFLVGQSIH
+>Q17567_CAEEL
+MLVVMLADDNKTRYDSLKKYLCVECPIPNQCVNLRTLAGKSKDGGENKNLGSIVLKIVLQMICKTGGALWKVNIPLKSTM
+IVG YDLYHDSTLKGKTVGACVSTTSNDFTQFYSQTRPHENPTQLGNNLTHFVRKSLKQYYDNNDKTLPSRLILYRDGAG
+DGQIPYIKNTEVKLVRDACDAVTDKAAELSNKVQEKIKLAFIIVTKRVNMRILKQGSSSKSAINPQPGTVVDTTVTRPER
+MDFYLVPQFVNQGTVTPVSYNIIHDDTGLGPDKHQQLAFKLCHLYYNWQGTVRVPAPCQYAHKLAFLTAQSLH
+>Q19645_CAEEL
+PFVLFISDDVPNIHECLKFEERMSDIPTQHVLLKNVKKMRDNIEKKSQGGRRAYDLTLDNIVMKANIKCGGLNYTADIPR
+DLACWNEVSTFVIG MDVAHPDRNAAREGNPSTVGLSCNSAENPYSFIGDFLYTDPRREAIQDEILRKFTDQSVRNFAEI
+RGFPKKVIIFRDGVSFGEETAALKEVEIIEQTIKTAAKSMGHSDYAPKVLAIVVKKRHHTRFYAKGGHHGNMPINPLPDT
+SVGGDIAEYGKRQIFIQAFRPVQGTAKVPSFLVIRDDEEVSDEHVAKMVCAVCSLHQLVNSPTSIPTPVYVAHELAKRGT
+GLYK
+>Q21495_CAEEL
+GIVLPTPRIFFRDGQETSLNNQSFRNPTDFAQTGFFVDAKQQLGGLNYVVNSETWNDSGLLLIG LSTAPYLNSYSSENV
+TTIGFVSNTMDHPQKFAGGYKYVKSGSDVFGQVMPEILLNSLRSARKARKIKPMNIVIYLCGMSESRFSIVKEEYVRNCH
+SVFKTLGEKYSPQLTIIVGSKGHSTRLYARGERDQISNLQPGTIVDSVIVSPDYNKFFHCGAVARQGTCKATKYTVLYPE
+SPKMEWIQRMTNDLCYMHEIVFHPVSLPAPLYLTAEMAERGTKNLA
+>Q21691_CAEEL
+TIVFGIIAEKRPDMHDILKYFEEKLGQQTIQISSETADKFMRDHGGKQTIDNVIRKLNPKCGGTNFLIDVPESVGHRVVC
+NNSAEMRAKLYAKTQFIG FEMSHTGARTRFDIQKVMFDGDPTVVGVAYSLKHSAQLGGFSYFQESRLHKLTNLQEKMQI
+CLNAYEQSSSYLPETVVVYRVGSGEGDYPQIVNEVNEMKLAARKKKHGYNPKFLVICTQRNSHIRVFPEHINERGKSMEQ
+NVKSGTCVDVPGASHGYEEFILCCQTPLIGTVKPTKYTIIVNDCRWSKNEIMNVTYHLAFAHQVSYAPPAIPNVSYAAQN
+LAKRGHNNYK
+>Q23415_CAEEL
+KFAFVITDDSITHLHKKYKALEQKSMMVIQDMKISKANSVVKDGKRLTLENVINKTNMKLGGLNYTVSDAKKSMTDEQLI
+IG VGVSAPPAGTKYMMDNKGHLNPQIIGFASNAVANHEFVGDFVLAPSGQDTMASIEDVLKSSIDLFEMNRNTLPKRII
+IYRSGASDGSHASILAYEIPLARATIQGYSKDINLIYIIVTKEHSYRFFRDQLRSGGKATEMNIPPGIVLDSAVTNPACK
+QFFLNGHTTLQGTAKTPLYTILADDCNAPMDRLEELTYTLCHHHQIVALSTSIPTPLYVANEYAKRGRDLWS
+>Q9ZVD5_ARATH
+FILCVLPDKKNSDLYGPWKKKNLTEFGIVTQCMAPTRQPNDQYLTNLLLKINAKLGGLNSMLSVERTPAFTVISKVPTII
+LG MDVSHGSPGQSDVPSIAAVVSSREWPLISKYRASVRTQPSKAEMIESLVKKNGTEDDGIIKELLVDFYTSSNKRKPE
+HIIIFRDGVSESQFNQVLNIELDQIIEACKLLDANWNPKFLLLVAQKNHHTKFFQPTSPENVPPGTIIDNKICHPKNNDF
+YLCAHAGMIGTTRPTHYHVLYDEIGFSADELQELVHSLSYVYQRSTSAISVVAPICYAHLAAAQLGTFMK
+>TAG76_CAEEL
+CIIVVLQSKNSDIYMTVKEQSDIVHGIMSQCVLMKNVSRPTPATCANIVLKLNMKMGGINSRIVADKITNKYLVDQPTMV
+VG IDVTHPTQAEMRMNMPSVAAIVANVDLLPQSYGANVKVQKKCRESVVYLLDAIRERIITFYRHTKQKPARIIVYRDG
+VSEGQFSEVLREEIQSIRTACLAIAEDFRPPITYIVVQKRHHARIFCKYQNDMVGKAKNVPPGTTVDTGIVSPEGFDFYL
+CSHYGVQGTSRPARYHVLLDECKFTADEIQSITYGMCHTYGRCTRSVSIPTPVYYADLVATRARCHVK
+>Y1321_METJA
+CFALIIGKEKYKDNDYYEILKKQLFDLKIISQNILWENWRKDDKGYMTNNLLIQIMGKLGIKYFILDSKTPYDYIMG LD
+TGLGIFGNHRVGGCTVVYDSEGKIRRIQPIETPAPGERLHLPYVIEYLENKANIDMENKNILFLRDGFIQNSERNDLKEI
+SKELNSNIEVISIRKNNKYKVFTSDYRIGSVFGNDGIFLPHKTPFGSNPVKLSTWLRFNCGNEEGLKINESIMQLLYDLT
+KMNYSALYGEGRYLRIPAPIHYADKFVKALGKNWK
+>YQ53_CAEEL
+   vgiAREKKPDVHDILKYFEESIGLQTIQLCQQTVDKMMGGQGGRQTIDNVMRKFNLKCGGTNFFVEIPNAVRGKAVC
+SNNETLRKKLLEHVQFIG FEISHGASRTLFDRSRSQMDGEPSVVGVSYSLTNSTQLGGFTYLQTQKEYKLQKLDEFFPK
+CVRSYKEHSKTLPTRIVIYRVGAGEGNFNRVKEEVEEMRRTFDKIQPGYRPHLVVIIAQRASHARVFPSCISGNRATDQN
+IPSGTCVENVLTSYGYDEFILSSQTPLIGTVRPCKYTILVNDAKWSKNELMHLTYFRAFGHQVSYQPPSVPDVLYAAENL
+AKRGRNNYK
diff --git a/test/scripts/automated/belvu/test32 b/test/scripts/automated/belvu/test32
new file mode 100755
index 0000000..047f0c6
--- /dev/null
+++ b/test/scripts/automated/belvu/test32
@@ -0,0 +1,26 @@
+#!/bin/ksh
+#
+# Description:
+#   Sort by organism on start up. Also tests saving
+#   without coords in aligned fasta format.
+
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences to the saved results
+diffs=`belvu -o FastaAlign -S o -C $data_dir/PF02171_seed.selex >&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
+
diff --git a/test/scripts/automated/belvu/test32_results b/test/scripts/automated/belvu/test32_results
new file mode 100644
index 0000000..d1b0178
--- /dev/null
+++ b/test/scripts/automated/belvu/test32_results
@@ -0,0 +1,147 @@
+>O67434_AQUAE
+LVIVFLEEYPKVDP.YKSFLLYDFVKRELLKKMIPSQVILNR.....TL...KNENLKFVLLNVAEQVLAKTGNIP..YK
+LKEIEGKVDA................FVG IDISRITRDG..........KTVNAVAFTKIFNSKGELVRYYLTSYPAFG
+EKLTEK................AIGDVFSLLEKLGF.KKGSKIVVHRDG.......RLYRDEVAAFK...........KY
+G.ELYG..YSLELLEIIKRNNPRFFSNEKFI..............................KGYFYKLSEDSVILATYNQ
+VY.......EGTHQPIKVRKVYGE.....LPVEVL.CSQ......ILSLTLMNYSSF....QPIKL........PATVHY
+SDKITKLMLRGIE
+>O48771_ARATH
+FILCILPERKTSDI.YGPWKKICLTEEGIHTQCICPIKI.................SDQYLTNVLLKINSKLGGINS.LL
+GIEYSYNIPLINKIPTL.........ILG MDVSHGPPGR.........ADVPSVAAVVGSKCWPLISRYRAAVRTQSPR
+LEMIDSLFQP..IENTEKGDNGIMNELFVEFYRTSRARKPKQIIIFRDGVSESQFEQVLKIEVDQIIKAYQ.......RL
+G.ESDV..PKFTVIVAQKNHHTKLFQAKGPE...........................NVPAGTVV...DTKIVHPTNYD
+FYMCAHAGKIGTSRPAHYHVLLDEI...GFSPDDL.QNL......IHSLSYKLLNSI....FNVSSLLCVFVLSVAPVRY
+AHLAAAQVAQFTK
+>PINH_ARATH
+LLLAILPD.NNGSL.YGDLKRICETELGLISQCCLTKHVFKI..............SKQYLANVSLKINVKMGGRNT.VL
+VDAISCRIPLVSDIPTI.........IFG ADVTHPENGE.........ESSPSIAAVVASQDWPEVTKYAGLVCAQAHR
+QELIQDLYKTWQDPVRGTVSGGMIRDLLISFRKATGQ.KPLRIIFYRDGVSEGQFYQVLLYELDAIRKACA.......SL
+E.PNYQ..PPVTFIVVQKRHHTRLFANNHRD...................KNSTDRSGNILPGTVV...DTKICHPTEFD
+FYLCSHAGIQGTSRPAHYHVLWDEN...NFTADGI.QSL......TNNLCYTYARCT....RSVSI........VPPAYY
+AHLAAFRARFYLE
+>Q9ZVD5_ARATH
+FILCVLPDKKNSDL.YGPWKKKNLTEFGIVTQCMAPTRQPND................QYLTNLLLKINAKLGGLNS.ML
+SVERTPAFTVISKVPTI.........ILG MDVSHGSPGQ.........SDVPSIAAVVSSREWPLISKYRASVRTQPSK
+AEMIESLVKK.....NGTEDDGIIKELLVDFYTSSNKRKPEHIIIFRDGVSESQFNQVLNIELDQIIEACK.......LL
+D.ANWN..PKFLLLVAQKNHHTKFFQPTSPE...........................NVPPGTII...DNKICHPKNND
+FYLCAHAGMIGTTRPTHYHVLYDEI...GFSADEL.QEL......VHSLSYVYQRST....SAISV........VAPICY
+AHLAAAQLGTFMK
+>PIWI_ARCFU
+GIMLVLPE.YNTPL.YYKLKSYLINS..IPSQFMRYDILSNR.....NL........TFYVDNLLVQFVSKLGGK...PW
+ILNVDPEK....................G SDIIIGTGAT........RIDNVNLFCFAMVFK.KDGTMLWNEISPIVTS
+SEYLTY.LKS............TIKKVVYGFKKSNPDWDVEKLTLHVSG....KRPKMKDGETKILKETVE.......EL
+K.KQEMVSRDVKYAILHLNETHPFWVMGDPN........................NRFHPYEGTKVKLSSKRYLLTLLQP
+YLKRNGLEMVTPIKPLSVEIVSDN.....WTSEEYYHNVHEILDEIYYLSKMNWRGF....RSRNL........PVTVNY
+PKLVAGIIANVNR
+>O02095_CAEEL
+QLLFFVVK..SRYN.YHQQIKALEQKYDVLTQEIRAETAEKV.....FR.......QPQTRLNIINKTNMKLGGLN..YA
+IGS.....EAFNKPNRL.........IVG FVTSQRVGGN.........PDYPISVGFAANML.KHHQKFAGGYVYVHRD
+RDVFGSIIKD............TLLAIFKTCTEQRG..RPDDILLYFNGVSEGQFSMINEEFSARVKEACMAF...QKEG
+T.PPFR..PHITIIASSKAHNERLYKSDKGR.........................IVNLEPGTVV...DHTIVSNVYTE
+WYHASAVARQGTAKATKFTLIFTTKAGPQAEPLWHLEQL......TNDLCYDHQIVF....HPVGL........PVPLYI
+ADRYSQRGAMVLA
+>O16386_CAEEL
+QLIMFITK..SMNN.YHTEIKCLEQEFDLLTQDIRFETAVKL.....AQ.......QQNTRKNIIYKTNMKLGGLN..YE
+LRS.....GVFSNSKRL.........IIG FETSQRGGLG..........DAPIAIGFAANMM.SHSQQFAGGYMFVKKS
+ADNYGPVIPE............ILLTILKQAKANRPNDRPDELLIYFSGVSEGQHALVNEYYANQVKAACG.......LF
+N.ESFR..PHITLILASKVHNTRVYKSENGG........................GVCNVEPGTVI...DHTIVSPVLSE
+WYHAGSLARQGTSKLVKYSLIFNTK...KNEKLSVYERL......TNELCYEMQIVF....HPTSL........PIPLHI
+AGTYSERGSQMLA
+>O16720_CAEEL
+LIVVVLPG..KTPI.YAEVKRVGDTVLGIATQCVQAKNAIRT..............TPQTLSNLCLKMNVKLGGVNS.IL
+LPNVRPR...IFNEPVI.........FLG CDITHPAAGD.........TRKPSIAAVVGSMD.AHPSRYAATVRVQQHR
+QEIITD.LTY............MVRELLVQFYRNTRF.KPARIVVYRDGVSEGQLFNVLQYELRAIREACV.......ML
+E.SGYQ..PGITFIAVQKRHHTRLFAADKAD.....................QVGKAFNIPPGTTV...DVGITHPTEFD
+FFLCSHAGIQGTSRPSHYHVLWDDN...DLTADEL.QQL......TYQMCHTYVRCT....RSVSI........PAPAYY
+AHLVAFRARYHLV
+>O62275_CAEEL
+TFVFIITD.DSITT.LHQRYKMIEKDTKMIVQDMKLSKALSV..........INAGKRLTLENVINKTNVKLGGSN..YV
+FVDAKKQL.....DSHL.........IIG VGISAPPAGT.KYAMENKGVLNPNVIGYAYNA..QHNQEFSGDFVLNSAS
+QDTLAP.IED............IVMHSLNEYQKFHDGGLPRRVIVYRTGTSEGNHGSIMAYEIPLARAAMR.......DF
+S.PDIQ....LVYIVVSKDHSFRFFKPDLASLASRPQATSSTASRHSAMPAAPKAWDLNIAPGILV...DSIVTNPACKQ
+FFLNSHITLQGTAKTPLYTVLADDA...KVSMTAL.EDI......TYKLCHLHQIVG....LPTSL........PTPLYV
+ANEYAKRGRNLWN
+>Q17567_CAEEL
+MLVVMLAD.DNKTR.YDSLKKYLCVECPIPNQCVNLRTLAGK.....SKDGGENKNLGSIVLKIVLQMICKTGGA...LW
+KVNIPL.......KSTM.........IVG YDLYHDSTLK...........GKTVGACVSTTS.NDFTQFYSQTRPHENP
+TQLGNN.LTH............FVRKSLKQYYDNNDKTLPSRLILYRDGAGDGQIPYIKNTEVKLVRDACDAVTDKAAEL
+S.NKVQEKIKLAFIIVTKRVNMRILKQGSSS.......................KSAINPQPGTVV...DTTVTRPERMD
+FYLVPQFVNQGTVTPVSYNIIHDDT...GLGPDKH.QQL......AFKLCHLYYNWQ....GTVRV........PAPCQY
+AHKLAFLTAQSLH
+>Q19645_CAEEL
+PFVLFISD..DVPN.IHECLKFEERMSDIPTQHVLLKNVKKMRDNIEKKSQGGRRAYDLTLDNIVMKANIKCGGLN..YT
+.ADIPRDLACWNEVSTF.........VIG MDVAHPDRNA.......AREGNPSTVGLSCNSA.ENPYSFIGDFLYTDPR
+REAIQDEILR...........KFTDQSVRNFAEIRG..FPKKVIIFRDGVSFGEETAALK.EVEIIEQTIKTA...AKSM
+GHSDYA..PKVLAIVVKKRHHTRFYAKGGHH......................GNMPINPLPDTSV...GGDIAEYGKRQ
+IFIQAFRPVQGTAKVPSFLVIRDDE...EVSDEHV.AKM......VCAVCSLHQLVN....SPTSI........PTPVYV
+AHELAKRGTGLYK
+>Q21495_CAEEL
+GIVLPTPRIFFRDG..........QETSLNNQSFRNPT...................DFAQTGFFVDAKQQLGGLN..YV
+VNS.....ETWNDSGLL.........LIG LSTAPYLNSY........SSENVTTIGFVSNTM.DHPQKFAGGYKYVKSG
+SDVFGQVMPE............ILLNSLRSARKARKI.KPMNIVIYLCGMSESRFSIVKEEYVRNCHSVFK.......TL
+G.EKYS..PQLTIIVGSKGHSTRLYARGERD........................QISNLQPGTIV...DSVIVSPDYNK
+FFHCGAVARQGTCKATKYTVLYPE....SPKMEWI.QRM......TNDLCYMHEIVF....HPVSL........PAPLYL
+TAEMAERGTKNLA
+>Q21691_CAEEL
+TIVFGIIA.EKRPD.MHDILKYFEEKLGQQTIQISSETADKF.....MR....DHGGKQTIDNVIRKLNPKCGGTNFLID
+VPESVGHRVVCNNSAEMRAKLYAKTQFIG FEMSHTGARTRFDIQKVMFDGDPTVVGVAYSL..KHSAQLGGFSYFQESR
+LHKLTN.LQE............KMQICLNAYEQSSSY.LPETVVVYRVGSGEGDYPQIVN.EVNEMKLAAR.......KK
+K.HGYN..PKFLVICTQRNSHIRVFPEHINE....................RGKSMEQNVKSGTCV...DVPGASHGYEE
+FILCCQTPLIGTVKPTKYTIIVNDC...RWSKNEI.MNV......TYHLAFAHQVSY....APPAI........PNVSYA
+AQNLAKRGHNNYK
+>Q23415_CAEEL
+KFAFVITD.DSITH.LHKKYKALEQKSMMVIQDMKISKANSV.....VK.....DGKRLTLENVINKTNMKLGGLN..YT
+VSDAKKSMT....DEQL.........IIG VGVSAPPAGT.KYMMDNKGHLNPQIIGFASNA..VANHEFVGDFVLAPSG
+QDTMAS.IED............VLKSSIDLFEMNRNT.LPKRIIIYRSGASDGSHASILAYEIPLARATIQ.......GY
+S.KDIN....LIYIIVTKEHSYRFFRDQLRS....................GGKATEMNIPPGIVL...DSAVTNPACKQ
+FFLNGHTTLQGTAKTPLYTILADDC...NAPMDRL.EEL......TYTLCHHHQIVA....LSTSI........PTPLYV
+ANEYAKRGRDLWS
+>TAG76_CAEEL
+CIIVVLQS.KNSDI.YMTVKEQSDIVHGIMSQCVLMKNVSRP..............TPATCANIVLKLNMKMGGIN..SR
+IVADKITNKYLVDQPTM.........VVG IDVTHPTQAE.......MRMNMPSVAAIVANVD.LLPQSYGANVKVQKKC
+RESVVY.LLD............AIRERIITFYRHTKQ.KPARIIVYRDGVSEGQFSEVLREEIQSIRTACL.......AI
+A.EDFR..PPITYIVVQKRHHARIFCKYQND.....................MVGKAKNVPPGTTV...DTGIVSPEGFD
+FYLCSHYGVQGTSRPARYHVLLDEC...KFTADEI.QSI......TYGMCHTYGRCT....RSVSI........PTPVYY
+ADLVATRARCHVK
+>YQ53_CAEEL
+   vgiAR.EKKPD.VHDILKYFEESIGLQTIQLCQQTVDKM.....MG....GQGGRQTIDNVMRKFNLKCGGTNFFVE
+IPNAVRGKAVCSNNETLRKKLLEHVQFIG FEISHGASRTLFDRSRSQMDGEPSVVGVSYSLT...NSTQLGGFTYLQTQ
+KEYKLQKLDE............FFPKCVRSYKEHSKT.LPTRIVIYRVGAGEGNFNRVKE.EVEEMRRTFD.......KI
+Q.PGYR..PHLVVIIAQRASHARVFPSCISG.....................NRATDQNIPSGTCV...ENVLTSYGYDE
+FILSSQTPLIGTVRPCKYTILVNDA...KWSKNEL.MHL......TYFRAFGHQVSY....QPPSV........PDVLYA
+AENLAKRGRNNYK
+>O76922_DROME
+IVMVVMRS.PNEEK.YSCIKKRTCVDRPVPSQVVTLKVIAPR.....QQ...KPTGLMSIATKVVIQMNAKLMGA...PW
+QVVIPL.......HGLM.........TVG FDVCHSPKNK...........NKSYGAFVATMDQKESFRYFSTVNEHIKG
+QELSEQ.MSV............NMACALRSYQEQHRS.LPERILFFRDGVGDGQLYQVVNSEVNTLKDRLDEI...YKSA
+G.KQEG..CRMTFIIVSKRINSRYFT.............................GHRNPVPGTVV...DDVITLPERYD
+FFLVSQAVRIGTVSPTSYNVISDNM...GLNADKL.QML......SYKMTHMYYNYS....GTIRV........PAVCHY
+AHKLAFLVAESIN
+>PIWI_DROME
+LILCLVPN.DNAER.YSSIKKRGYVDRAVPTQVVTLKTTKNR.....SL........MSIATKIAIQLNCKLGYT...PW
+MIELPL.......SGLM.........TIG FDIAKSTRDR...........KRAYGALIASMDLQQNSTYFSTV.TECSA
+FDVLANTLWP............MIAKALRQYQHEHRK.LPSRIVFYRDGVSSGSLKQLFEFEVKDIIEKLKTE...YARV
+Q.LSP...PQLAYIVVTRSMNTRFFLN.............................GQNPPPGTIV...DDVITLPERYD
+FYLVSQQVRQGTVSPTSYNVLYSSM...GLSPEKM.QKL......TYKMCHLYYNWS....GTTRV........PAVCQY
+AKKLATLVGTNLH
+>PIWL1_HUMAN
+IVVCLLSS.NRKDK.YDAIKKYLCTDCPTPSQCVVARTLGKQ.....QT.......VMAIATKIALQMNCKMGGE...LW
+RVDIPL.......KLVM.........IVG IDCYHDMTAG...........RRSIAGFVASIN.EGMTRWFSRCIFQDRG
+QELVDG.LKV............CLQAALRAW.NSCNEYMPSRIIVYRDGVGDGQLKTLVNYEVPQFLDCLK.......SI
+G.RGYN..PRLTVIVVKKRVNTRFFAQSGGR.........................LQNPLPGTVI...DVEVTRPEWYD
+FFIVSQAVRSGSVSPTHYNVIYDNS...GLKPDHI.QRL......TYKLCHIYYNWP....GVIRV........PAPCQY
+AHKLAFLVGQSIH
+>Y1321_METJA
+CFALIIGKEKYKDNDYYEILKKQLFDLKIISQNILWENWRKD.....DK........GYMTNNLLIQIMGKLGIK...YF
+ILDSKTPYDY................IMG LDTGLGIFGN............HRVGGCTVVYDSEGKIRRIQPIETPAPG
+ERLHLP................YVIEYLEN..KANIDMENKNILFLRDG.......FIQNSERNDLKEISK.......EL
+N.......SNIEVISIRKNNKYKVFTSDYRI........................GSVFGNDGIFLPHKTPFGSNPVKLS
+TWLRFNCGNEEGLK...IN.............ESI.MQL......LYDLTKMNYSALYGEGRYLRI........PAPIHY
+ADKFVKALGKNWK
+>AGO1_SCHPO
+YLFFILDK.NSPEP.YGSIKRVCNTMLGVPSQCAISKHILQS..............KPQYCANLGMKINVKVGGINC.SL
+IPKSNP....LGNVPTL.........ILG GDVYHPGVGA..........TGVSIASIVASVD.LNGCKYTAVSRSQPRH
+QEVIEG.MKD............IVVYLLQGFRAMTKQ.QPQRIIYFRDGTSEGQFLSVINDELSQIKEACH.......SL
+S.PKYN..PKILVCTTQKRHHARFFIKNKSD......................GDRNGNPLPGTII...EKHVTHPYQYD
+FYLISHPSLQGVSVPVHYTVLHDEI...QMPPDQF.QTL......CYNLCYVYARAT....SAVSL........VPPVYY
+AHLVSNLARYQDV
diff --git a/test/scripts/automated/belvu/test33 b/test/scripts/automated/belvu/test33
new file mode 100755
index 0000000..625f2da
--- /dev/null
+++ b/test/scripts/automated/belvu/test33
@@ -0,0 +1,26 @@
+#!/bin/ksh
+#
+
+# Description:
+#   Sort by score on start up. Also tests saving
+#   without coords in Selex format.
+
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences to the saved results
+diffs=`belvu -o Selex -S s -C -s $data_dir/PF02171_seed.scores $data_dir/PF02171_seed.selex >&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
diff --git a/test/scripts/automated/belvu/test33_results b/test/scripts/automated/belvu/test33_results
new file mode 100644
index 0000000..a047c56
--- /dev/null
+++ b/test/scripts/automated/belvu/test33_results
@@ -0,0 +1,23 @@
+#=GC #=RF                         **********Q********** 
+PINH_ARATH   LLLAILPD.NNGSL.YGDLKRICETELGLISQCCLTKHVFKI..............SKQYLANVSLKINVKMGGRNT.VLVDAISCRIPLVSDIPTI.........IFG ADVTHPENGE.........ESSPSIAAVVASQDWPEVTKYAGLVCAQAHRQELIQDLYKTWQDPVRGTVSGGMIRDLLISFRKATGQ.KPLRIIFYRDGVSEGQFYQVLLYELDAIRKACA.......SLE.PNYQ..PPVTFIVVQKRHHTRLFANNHRD...................KNSTDRSGNILPGTVV...DTKICHPTEFDFYLCSHAGIQGTSRPAHYHVLWDEN...NFTADGI.QSL......TNNLCYTYARCT....RSVSI........VPPAYYAHLAAFRARFYLE
+O62275_CAEEL TFVFIITD.DSITT.LHQRYKMIEKDTKMIVQDMKLSKALSV..........INAGKRLTLENVINKTNVKLGGSN..YVFVDAKKQL.....DSHL.........IIG VGISAPPAGT.KYAMENKGVLNPNVIGYAYNA..QHNQEFSGDFVLNSASQDTLAP.IED............IVMHSLNEYQKFHDGGLPRRVIVYRTGTSEGNHGSIMAYEIPLARAAMR.......DFS.PDIQ....LVYIVVSKDHSFRFFKPDLASLASRPQATSSTASRHSAMPAAPKAWDLNIAPGILV...DSIVTNPACKQFFLNSHITLQGTAKTPLYTVLADDA...KVSMTAL.EDI......TYKLCHLHQIVG....LPTSL........PTPLYVANEYAKRGRNLWN
+PIWL1_HUMAN  IVVCLLSS.NRKDK.YDAIKKYLCTDCPTPSQCVVARTLGKQ.....QT.......VMAIATKIALQMNCKMGGE...LWRVDIPL.......KLVM.........IVG IDCYHDMTAG...........RRSIAGFVASIN.EGMTRWFSRCIFQDRGQELVDG.LKV............CLQAALRAW.NSCNEYMPSRIIVYRDGVGDGQLKTLVNYEVPQFLDCLK.......SIG.RGYN..PRLTVIVVKKRVNTRFFAQSGGR.........................LQNPLPGTVI...DVEVTRPEWYDFFIVSQAVRSGSVSPTHYNVIYDNS...GLKPDHI.QRL......TYKLCHIYYNWP....GVIRV........PAPCQYAHKLAFLVGQSIH
+PIWI_ARCFU   GIMLVLPE.YNTPL.YYKLKSYLINS..IPSQFMRYDILSNR.....NL........TFYVDNLLVQFVSKLGGK...PWILNVDPEK....................G SDIIIGTGAT........RIDNVNLFCFAMVFK.KDGTMLWNEISPIVTSSEYLTY.LKS............TIKKVVYGFKKSNPDWDVEKLTLHVSG....KRPKMKDGETKILKETVE.......ELK.KQEMVSRDVKYAILHLNETHPFWVMGDPN........................NRFHPYEGTKVKLSSKRYLLTLLQPYLKRNGLEMVTPIKPLSVEIVSDN.....WTSEEYYHNVHEILDEIYYLSKMNWRGF....RSRNL........PVTVNYPKLVAGIIANVNR
+Y1321_METJA  CFALIIGKEKYKDNDYYEILKKQLFDLKIISQNILWENWRKD.....DK........GYMTNNLLIQIMGKLGIK...YFILDSKTPYDY................IMG LDTGLGIFGN............HRVGGCTVVYDSEGKIRRIQPIETPAPGERLHLP................YVIEYLEN..KANIDMENKNILFLRDG.......FIQNSERNDLKEISK.......ELN.......SNIEVISIRKNNKYKVFTSDYRI........................GSVFGNDGIFLPHKTPFGSNPVKLSTWLRFNCGNEEGLK...IN.............ESI.MQL......LYDLTKMNYSALYGEGRYLRI........PAPIHYADKFVKALGKNWK
+O67434_AQUAE LVIVFLEEYPKVDP.YKSFLLYDFVKRELLKKMIPSQVILNR.....TL...KNENLKFVLLNVAEQVLAKTGNIP..YKLKEIEGKVDA................FVG IDISRITRDG..........KTVNAVAFTKIFNSKGELVRYYLTSYPAFGEKLTEK................AIGDVFSLLEKLGF.KKGSKIVVHRDG.......RLYRDEVAAFK...........KYG.ELYG..YSLELLEIIKRNNPRFFSNEKFI..............................KGYFYKLSEDSVILATYNQVY.......EGTHQPIKVRKVYGE.....LPVEVL.CSQ......ILSLTLMNYSSF....QPIKL........PATVHYSDKITKLMLRGIE
+Q21495_CAEEL GIVLPTPRIFFRDG..........QETSLNNQSFRNPT...................DFAQTGFFVDAKQQLGGLN..YVVNS.....ETWNDSGLL.........LIG LSTAPYLNSY........SSENVTTIGFVSNTM.DHPQKFAGGYKYVKSGSDVFGQVMPE............ILLNSLRSARKARKI.KPMNIVIYLCGMSESRFSIVKEEYVRNCHSVFK.......TLG.EKYS..PQLTIIVGSKGHSTRLYARGERD........................QISNLQPGTIV...DSVIVSPDYNKFFHCGAVARQGTCKATKYTVLYPE....SPKMEWI.QRM......TNDLCYMHEIVF....HPVSL........PAPLYLTAEMAERGTKNLA
+O16386_CAEEL QLIMFITK..SMNN.YHTEIKCLEQEFDLLTQDIRFETAVKL.....AQ.......QQNTRKNIIYKTNMKLGGLN..YELRS.....GVFSNSKRL.........IIG FETSQRGGLG..........DAPIAIGFAANMM.SHSQQFAGGYMFVKKSADNYGPVIPE............ILLTILKQAKANRPNDRPDELLIYFSGVSEGQHALVNEYYANQVKAACG.......LFN.ESFR..PHITLILASKVHNTRVYKSENGG........................GVCNVEPGTVI...DHTIVSPVLSEWYHAGSLARQGTSKLVKYSLIFNTK...KNEKLSVYERL......TNELCYEMQIVF....HPTSL........PIPLHIAGTYSERGSQMLA
+O02095_CAEEL QLLFFVVK..SRYN.YHQQIKALEQKYDVLTQEIRAETAEKV.....FR.......QPQTRLNIINKTNMKLGGLN..YAIGS.....EAFNKPNRL.........IVG FVTSQRVGGN.........PDYPISVGFAANML.KHHQKFAGGYVYVHRDRDVFGSIIKD............TLLAIFKTCTEQRG..RPDDILLYFNGVSEGQFSMINEEFSARVKEACMAF...QKEGT.PPFR..PHITIIASSKAHNERLYKSDKGR.........................IVNLEPGTVV...DHTIVSNVYTEWYHASAVARQGTAKATKFTLIFTTKAGPQAEPLWHLEQL......TNDLCYDHQIVF....HPVGL........PVPLYIADRYSQRGAMVLA
+Q19645_CAEEL PFVLFISD..DVPN.IHECLKFEERMSDIPTQHVLLKNVKKMRDNIEKKSQGGRRAYDLTLDNIVMKANIKCGGLN..YT.ADIPRDLACWNEVSTF.........VIG MDVAHPDRNA.......AREGNPSTVGLSCNSA.ENPYSFIGDFLYTDPRREAIQDEILR...........KFTDQSVRNFAEIRG..FPKKVIIFRDGVSFGEETAALK.EVEIIEQTIKTA...AKSMGHSDYA..PKVLAIVVKKRHHTRFYAKGGHH......................GNMPINPLPDTSV...GGDIAEYGKRQIFIQAFRPVQGTAKVPSFLVIRDDE...EVSDEHV.AKM......VCAVCSLHQLVN....SPTSI........PTPVYVAHELAKRGTGLYK
+Q23415_CAEEL KFAFVITD.DSITH.LHKKYKALEQKSMMVIQDMKISKANSV.....VK.....DGKRLTLENVINKTNMKLGGLN..YTVSDAKKSMT....DEQL.........IIG VGVSAPPAGT.KYMMDNKGHLNPQIIGFASNA..VANHEFVGDFVLAPSGQDTMAS.IED............VLKSSIDLFEMNRNT.LPKRIIIYRSGASDGSHASILAYEIPLARATIQ.......GYS.KDIN....LIYIIVTKEHSYRFFRDQLRS....................GGKATEMNIPPGIVL...DSAVTNPACKQFFLNGHTTLQGTAKTPLYTILADDC...NAPMDRL.EEL......TYTLCHHHQIVA....LSTSI........PTPLYVANEYAKRGRDLWS
+Q9ZVD5_ARATH FILCVLPDKKNSDL.YGPWKKKNLTEFGIVTQCMAPTRQPND................QYLTNLLLKINAKLGGLNS.MLSVERTPAFTVISKVPTI.........ILG MDVSHGSPGQ.........SDVPSIAAVVSSREWPLISKYRASVRTQPSKAEMIESLVKK.....NGTEDDGIIKELLVDFYTSSNKRKPEHIIIFRDGVSESQFNQVLNIELDQIIEACK.......LLD.ANWN..PKFLLLVAQKNHHTKFFQPTSPE...........................NVPPGTII...DNKICHPKNNDFYLCAHAGMIGTTRPTHYHVLYDEI...GFSADEL.QEL......VHSLSYVYQRST....SAISV........VAPICYAHLAAAQLGTFMK
+O48771_ARATH FILCILPERKTSDI.YGPWKKICLTEEGIHTQCICPIKI.................SDQYLTNVLLKINSKLGGINS.LLGIEYSYNIPLINKIPTL.........ILG MDVSHGPPGR.........ADVPSVAAVVGSKCWPLISRYRAAVRTQSPRLEMIDSLFQP..IENTEKGDNGIMNELFVEFYRTSRARKPKQIIIFRDGVSESQFEQVLKIEVDQIIKAYQ.......RLG.ESDV..PKFTVIVAQKNHHTKLFQAKGPE...........................NVPAGTVV...DTKIVHPTNYDFYMCAHAGKIGTSRPAHYHVLLDEI...GFSPDDL.QNL......IHSLSYKLLNSI....FNVSSLLCVFVLSVAPVRYAHLAAAQVAQFTK
+TAG76_CAEEL  CIIVVLQS.KNSDI.YMTVKEQSDIVHGIMSQCVLMKNVSRP..............TPATCANIVLKLNMKMGGIN..SRIVADKITNKYLVDQPTM.........VVG IDVTHPTQAE.......MRMNMPSVAAIVANVD.LLPQSYGANVKVQKKCRESVVY.LLD............AIRERIITFYRHTKQ.KPARIIVYRDGVSEGQFSEVLREEIQSIRTACL.......AIA.EDFR..PPITYIVVQKRHHARIFCKYQND.....................MVGKAKNVPPGTTV...DTGIVSPEGFDFYLCSHYGVQGTSRPARYHVLLDEC...KFTADEI.QSI......TYGMCHTYGRCT....RSVSI........PTPVYYADLVATRARCHVK
+O16720_CAEEL LIVVVLPG..KTPI.YAEVKRVGDTVLGIATQCVQAKNAIRT..............TPQTLSNLCLKMNVKLGGVNS.ILLPNVRPR...IFNEPVI.........FLG CDITHPAAGD.........TRKPSIAAVVGSMD.AHPSRYAATVRVQQHRQEIITD.LTY............MVRELLVQFYRNTRF.KPARIVVYRDGVSEGQLFNVLQYELRAIREACV.......MLE.SGYQ..PGITFIAVQKRHHTRLFAADKAD.....................QVGKAFNIPPGTTV...DVGITHPTEFDFFLCSHAGIQGTSRPSHYHVLWDDN...DLTADEL.QQL......TYQMCHTYVRCT....RSVSI........PAPAYYAHLVAFRARYHLV
+Q21691_CAEEL TIVFGIIA.EKRPD.MHDILKYFEEKLGQQTIQISSETADKF.....MR....DHGGKQTIDNVIRKLNPKCGGTNFLIDVPESVGHRVVCNNSAEMRAKLYAKTQFIG FEMSHTGARTRFDIQKVMFDGDPTVVGVAYSL..KHSAQLGGFSYFQESRLHKLTN.LQE............KMQICLNAYEQSSSY.LPETVVVYRVGSGEGDYPQIVN.EVNEMKLAAR.......KKK.HGYN..PKFLVICTQRNSHIRVFPEHINE....................RGKSMEQNVKSGTCV...DVPGASHGYEEFILCCQTPLIGTVKPTKYTIIVNDC...RWSKNEI.MNV......TYHLAFAHQVSY....APPAI........PNVSYAAQNLAKRGHNNYK
+AGO1_SCHPO   YLFFILDK.NSPEP.YGSIKRVCNTMLGVPSQCAISKHILQS..............KPQYCANLGMKINVKVGGINC.SLIPKSNP....LGNVPTL.........ILG GDVYHPGVGA..........TGVSIASIVASVD.LNGCKYTAVSRSQPRHQEVIEG.MKD............IVVYLLQGFRAMTKQ.QPQRIIYFRDGTSEGQFLSVINDELSQIKEACH.......SLS.PKYN..PKILVCTTQKRHHARFFIKNKSD......................GDRNGNPLPGTII...EKHVTHPYQYDFYLISHPSLQGVSVPVHYTVLHDEI...QMPPDQF.QTL......CYNLCYVYARAT....SAVSL........VPPVYYAHLVSNLARYQDV
+O76922_DROME IVMVVMRS.PNEEK.YSCIKKRTCVDRPVPSQVVTLKVIAPR.....QQ...KPTGLMSIATKVVIQMNAKLMGA...PWQVVIPL.......HGLM.........TVG FDVCHSPKNK...........NKSYGAFVATMDQKESFRYFSTVNEHIKGQELSEQ.MSV............NMACALRSYQEQHRS.LPERILFFRDGVGDGQLYQVVNSEVNTLKDRLDEI...YKSAG.KQEG..CRMTFIIVSKRINSRYFT.............................GHRNPVPGTVV...DDVITLPERYDFFLVSQAVRIGTVSPTSYNVISDNM...GLNADKL.QML......SYKMTHMYYNYS....GTIRV........PAVCHYAHKLAFLVAESIN
+PIWI_DROME   LILCLVPN.DNAER.YSSIKKRGYVDRAVPTQVVTLKTTKNR.....SL........MSIATKIAIQLNCKLGYT...PWMIELPL.......SGLM.........TIG FDIAKSTRDR...........KRAYGALIASMDLQQNSTYFSTV.TECSAFDVLANTLWP............MIAKALRQYQHEHRK.LPSRIVFYRDGVSSGSLKQLFEFEVKDIIEKLKTE...YARVQ.LSP...PQLAYIVVTRSMNTRFFLN.............................GQNPPPGTIV...DDVITLPERYDFYLVSQQVRQGTVSPTSYNVLYSSM...GLSPEKM.QKL......TYKMCHLYYNWS....GTTRV........PAVCQYAKKLATLVGTNLH
+YQ53_CAEEL      vgiAR.EKKPD.VHDILKYFEESIGLQTIQLCQQTVDKM.....MG....GQGGRQTIDNVMRKFNLKCGGTNFFVEIPNAVRGKAVCSNNETLRKKLLEHVQFIG FEISHGASRTLFDRSRSQMDGEPSVVGVSYSLT...NSTQLGGFTYLQTQKEYKLQKLDE............FFPKCVRSYKEHSKT.LPTRIVIYRVGAGEGNFNRVKE.EVEEMRRTFD.......KIQ.PGYR..PHLVVIIAQRASHARVFPSCISG.....................NRATDQNIPSGTCV...ENVLTSYGYDEFILSSQTPLIGTVRPCKYTILVNDA...KWSKNEL.MHL......TYFRAFGHQVSY....QPPSV........PDVLYAAENLAKRGRNNYK
+Q17567_CAEEL MLVVMLAD.DNKTR.YDSLKKYLCVECPIPNQCVNLRTLAGK.....SKDGGENKNLGSIVLKIVLQMICKTGGA...LWKVNIPL.......KSTM.........IVG YDLYHDSTLK...........GKTVGACVSTTS.NDFTQFYSQTRPHENPTQLGNN.LTH............FVRKSLKQYYDNNDKTLPSRLILYRDGAGDGQIPYIKNTEVKLVRDACDAVTDKAAELS.NKVQEKIKLAFIIVTKRVNMRILKQGSSS.......................KSAINPQPGTVV...DTTVTRPERMDFYLVPQFVNQGTVTPVSYNIIHDDT...GLGPDKH.QQL......AFKLCHLYYNWQ....GTVRV........PAPCQYAHKLAFLTAQSLH
+//
diff --git a/test/scripts/automated/belvu/test34 b/test/scripts/automated/belvu/test34
new file mode 100755
index 0000000..8a558ae
--- /dev/null
+++ b/test/scripts/automated/belvu/test34
@@ -0,0 +1,25 @@
+#!/bin/ksh
+#
+
+# Description:
+#   Sort by neighbour-joinging tree on start up.
+
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences to the saved results
+diffs=`belvu -o Selex -S n -s $data_dir/PF02171_seed.scores $data_dir/PF02171_seed.selex >&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
diff --git a/test/scripts/automated/belvu/test34_results b/test/scripts/automated/belvu/test34_results
new file mode 100644
index 0000000..85b22e4
--- /dev/null
+++ b/test/scripts/automated/belvu/test34_results
@@ -0,0 +1,23 @@
+YQ53_CAEEL/650-977       vgiAR.EKKPD.VHDILKYFEESIGLQTIQLCQQTVDKM.....MG....GQGGRQTIDNVMRKFNLKCGGTNFFVEIPNAVRGKAVCSNNETLRKKLLEHVQFIG FEISHGASRTLFDRSRSQMDGEPSVVGVSYSLT...NSTQLGGFTYLQTQKEYKLQKLDE............FFPKCVRSYKEHSKT.LPTRIVIYRVGAGEGNFNRVKE.EVEEMRRTFD.......KIQ.PGYR..PHLVVIIAQRASHARVFPSCISG.....................NRATDQNIPSGTCV...ENVLTSYGYDEFILSSQTPLIGTVRPCKYTILVNDA...KWSKNEL.MHL......TYFRAFGHQVSY....QPPSV........PDVLYAAENLAKRGRNNYK
+Q21691_CAEEL/673-1001 TIVFGIIA.EKRPD.MHDILKYFEEKLGQQTIQISSETADKF.....MR....DHGGKQTIDNVIRKLNPKCGGTNFLIDVPESVGHRVVCNNSAEMRAKLYAKTQFIG FEMSHTGARTRFDIQKVMFDGDPTVVGVAYSL..KHSAQLGGFSYFQESRLHKLTN.LQE............KMQICLNAYEQSSSY.LPETVVVYRVGSGEGDYPQIVN.EVNEMKLAAR.......KKK.HGYN..PKFLVICTQRNSHIRVFPEHINE....................RGKSMEQNVKSGTCV...DVPGASHGYEEFILCCQTPLIGTVKPTKYTIIVNDC...RWSKNEI.MNV......TYHLAFAHQVSY....APPAI........PNVSYAAQNLAKRGHNNYK
+Q21495_CAEEL/52-336   GIVLPTPRIFFRDG..........QETSLNNQSFRNPT...................DFAQTGFFVDAKQQLGGLN..YVVNS.....ETWNDSGLL.........LIG LSTAPYLNSY........SSENVTTIGFVSNTM.DHPQKFAGGYKYVKSGSDVFGQVMPE............ILLNSLRSARKARKI.KPMNIVIYLCGMSESRFSIVKEEYVRNCHSVFK.......TLG.EKYS..PQLTIIVGSKGHSTRLYARGERD........................QISNLQPGTIV...DSVIVSPDYNKFFHCGAVARQGTCKATKYTVLYPE....SPKMEWI.QRM......TNDLCYMHEIVF....HPVSL........PAPLYLTAEMAERGTKNLA
+O16386_CAEEL/548-847  QLIMFITK..SMNN.YHTEIKCLEQEFDLLTQDIRFETAVKL.....AQ.......QQNTRKNIIYKTNMKLGGLN..YELRS.....GVFSNSKRL.........IIG FETSQRGGLG..........DAPIAIGFAANMM.SHSQQFAGGYMFVKKSADNYGPVIPE............ILLTILKQAKANRPNDRPDELLIYFSGVSEGQHALVNEYYANQVKAACG.......LFN.ESFR..PHITLILASKVHNTRVYKSENGG........................GVCNVEPGTVI...DHTIVSPVLSEWYHAGSLARQGTSKLVKYSLIFNTK...KNEKLSVYERL......TNELCYEMQIVF....HPTSL........PIPLHIAGTYSERGSQMLA
+O02095_CAEEL/574-878  QLLFFVVK..SRYN.YHQQIKALEQKYDVLTQEIRAETAEKV.....FR.......QPQTRLNIINKTNMKLGGLN..YAIGS.....EAFNKPNRL.........IVG FVTSQRVGGN.........PDYPISVGFAANML.KHHQKFAGGYVYVHRDRDVFGSIIKD............TLLAIFKTCTEQRG..RPDDILLYFNGVSEGQFSMINEEFSARVKEACMAF...QKEGT.PPFR..PHITIIASSKAHNERLYKSDKGR.........................IVNLEPGTVV...DHTIVSNVYTEWYHASAVARQGTAKATKFTLIFTTKAGPQAEPLWHLEQL......TNDLCYDHQIVF....HPVGL........PVPLYIADRYSQRGAMVLA
+Q19645_CAEEL/674-996  PFVLFISD..DVPN.IHECLKFEERMSDIPTQHVLLKNVKKMRDNIEKKSQGGRRAYDLTLDNIVMKANIKCGGLN..YT.ADIPRDLACWNEVSTF.........VIG MDVAHPDRNA.......AREGNPSTVGLSCNSA.ENPYSFIGDFLYTDPRREAIQDEILR...........KFTDQSVRNFAEIRG..FPKKVIIFRDGVSFGEETAALK.EVEIIEQTIKTA...AKSMGHSDYA..PKVLAIVVKKRHHTRFYAKGGHH......................GNMPINPLPDTSV...GGDIAEYGKRQIFIQAFRPVQGTAKVPSFLVIRDDE...EVSDEHV.AKM......VCAVCSLHQLVN....SPTSI........PTPVYVAHELAKRGTGLYK
+Q23415_CAEEL/40-350   KFAFVITD.DSITH.LHKKYKALEQKSMMVIQDMKISKANSV.....VK.....DGKRLTLENVINKTNMKLGGLN..YTVSDAKKSMT....DEQL.........IIG VGVSAPPAGT.KYMMDNKGHLNPQIIGFASNA..VANHEFVGDFVLAPSGQDTMAS.IED............VLKSSIDLFEMNRNT.LPKRIIIYRSGASDGSHASILAYEIPLARATIQ.......GYS.KDIN....LIYIIVTKEHSYRFFRDQLRS....................GGKATEMNIPPGIVL...DSAVTNPACKQFFLNGHTTLQGTAKTPLYTILADDC...NAPMDRL.EEL......TYTLCHHHQIVA....LSTSI........PTPLYVANEYAKRGRDLWS
+O62275_CAEEL/594-924  TFVFIITD.DSITT.LHQRYKMIEKDTKMIVQDMKLSKALSV..........INAGKRLTLENVINKTNVKLGGSN..YVFVDAKKQL.....DSHL.........IIG VGISAPPAGT.KYAMENKGVLNPNVIGYAYNA..QHNQEFSGDFVLNSASQDTLAP.IED............IVMHSLNEYQKFHDGGLPRRVIVYRTGTSEGNHGSIMAYEIPLARAAMR.......DFS.PDIQ....LVYIVVSKDHSFRFFKPDLASLASRPQATSSTASRHSAMPAAPKAWDLNIAPGILV...DSIVTNPACKQFFLNSHITLQGTAKTPLYTVLADDA...KVSMTAL.EDI......TYKLCHLHQIVG....LPTSL........PTPLYVANEYAKRGRNLWN
+O48771_ARATH/542-860  FILCILPERKTSDI.YGPWKKICLTEEGIHTQCICPIKI.................SDQYLTNVLLKINSKLGGINS.LLGIEYSYNIPLINKIPTL.........ILG MDVSHGPPGR.........ADVPSVAAVVGSKCWPLISRYRAAVRTQSPRLEMIDSLFQP..IENTEKGDNGIMNELFVEFYRTSRARKPKQIIIFRDGVSESQFEQVLKIEVDQIIKAYQ.......RLG.ESDV..PKFTVIVAQKNHHTKLFQAKGPE...........................NVPAGTVV...DTKIVHPTNYDFYMCAHAGKIGTSRPAHYHVLLDEI...GFSPDDL.QNL......IHSLSYKLLNSI....FNVSSLLCVFVLSVAPVRYAHLAAAQVAQFTK
+Q9ZVD5_ARATH/577-885  FILCVLPDKKNSDL.YGPWKKKNLTEFGIVTQCMAPTRQPND................QYLTNLLLKINAKLGGLNS.MLSVERTPAFTVISKVPTI.........ILG MDVSHGSPGQ.........SDVPSIAAVVSSREWPLISKYRASVRTQPSKAEMIESLVKK.....NGTEDDGIIKELLVDFYTSSNKRKPEHIIIFRDGVSESQFNQVLNIELDQIIEACK.......LLD.ANWN..PKFLLLVAQKNHHTKFFQPTSPE...........................NVPPGTII...DNKICHPKNNDFYLCAHAGMIGTTRPTHYHVLYDEI...GFSADEL.QEL......VHSLSYVYQRST....SAISV........VAPICYAHLAAAQLGTFMK
+PINH_ARATH/625-946    LLLAILPD.NNGSL.YGDLKRICETELGLISQCCLTKHVFKI..............SKQYLANVSLKINVKMGGRNT.VLVDAISCRIPLVSDIPTI.........IFG ADVTHPENGE.........ESSPSIAAVVASQDWPEVTKYAGLVCAQAHRQELIQDLYKTWQDPVRGTVSGGMIRDLLISFRKATGQ.KPLRIIFYRDGVSEGQFYQVLLYELDAIRKACA.......SLE.PNYQ..PPVTFIVVQKRHHTRLFANNHRD...................KNSTDRSGNILPGTVV...DTKICHPTEFDFYLCSHAGIQGTSRPAHYHVLWDEN...NFTADGI.QSL......TNNLCYTYARCT....RSVSI........VPPAYYAHLAAFRARFYLE
+AGO1_SCHPO/500-799    YLFFILDK.NSPEP.YGSIKRVCNTMLGVPSQCAISKHILQS..............KPQYCANLGMKINVKVGGINC.SLIPKSNP....LGNVPTL.........ILG GDVYHPGVGA..........TGVSIASIVASVD.LNGCKYTAVSRSQPRHQEVIEG.MKD............IVVYLLQGFRAMTKQ.QPQRIIYFRDGTSEGQFLSVINDELSQIKEACH.......SLS.PKYN..PKILVCTTQKRHHARFFIKNKSD......................GDRNGNPLPGTII...EKHVTHPYQYDFYLISHPSLQGVSVPVHYTVLHDEI...QMPPDQF.QTL......CYNLCYVYARAT....SAVSL........VPPVYYAHLVSNLARYQDV
+TAG76_CAEEL/660-966   CIIVVLQS.KNSDI.YMTVKEQSDIVHGIMSQCVLMKNVSRP..............TPATCANIVLKLNMKMGGIN..SRIVADKITNKYLVDQPTM.........VVG IDVTHPTQAE.......MRMNMPSVAAIVANVD.LLPQSYGANVKVQKKCRESVVY.LLD............AIRERIITFYRHTKQ.KPARIIVYRDGVSEGQFSEVLREEIQSIRTACL.......AIA.EDFR..PPITYIVVQKRHHARIFCKYQND.....................MVGKAKNVPPGTTV...DTGIVSPEGFDFYLCSHYGVQGTSRPARYHVLLDEC...KFTADEI.QSI......TYGMCHTYGRCT....RSVSI........PTPVYYADLVATRARCHVK
+O16720_CAEEL/566-867  LIVVVLPG..KTPI.YAEVKRVGDTVLGIATQCVQAKNAIRT..............TPQTLSNLCLKMNVKLGGVNS.ILLPNVRPR...IFNEPVI.........FLG CDITHPAAGD.........TRKPSIAAVVGSMD.AHPSRYAATVRVQQHRQEIITD.LTY............MVRELLVQFYRNTRF.KPARIVVYRDGVSEGQLFNVLQYELRAIREACV.......MLE.SGYQ..PGITFIAVQKRHHTRLFAADKAD.....................QVGKAFNIPPGTTV...DVGITHPTEFDFFLCSHAGIQGTSRPSHYHVLWDDN...DLTADEL.QQL......TYQMCHTYVRCT....RSVSI........PAPAYYAHLVAFRARYHLV
+O76922_DROME/555-852  IVMVVMRS.PNEEK.YSCIKKRTCVDRPVPSQVVTLKVIAPR.....QQ...KPTGLMSIATKVVIQMNAKLMGA...PWQVVIPL.......HGLM.........TVG FDVCHSPKNK...........NKSYGAFVATMDQKESFRYFSTVNEHIKGQELSEQ.MSV............NMACALRSYQEQHRS.LPERILFFRDGVGDGQLYQVVNSEVNTLKDRLDEI...YKSAG.KQEG..CRMTFIIVSKRINSRYFT.............................GHRNPVPGTVV...DDVITLPERYDFFLVSQAVRIGTVSPTSYNVISDNM...GLNADKL.QML......SYKMTHMYYNYS....GTIRV........PAVCHYAHKLAFLVAESIN
+PIWI_DROME/538-829    LILCLVPN.DNAER.YSSIKKRGYVDRAVPTQVVTLKTTKNR.....SL........MSIATKIAIQLNCKLGYT...PWMIELPL.......SGLM.........TIG FDIAKSTRDR...........KRAYGALIASMDLQQNSTYFSTV.TECSAFDVLANTLWP............MIAKALRQYQHEHRK.LPSRIVFYRDGVSSGSLKQLFEFEVKDIIEKLKTE...YARVQ.LSP...PQLAYIVVTRSMNTRFFLN.............................GQNPPPGTIV...DDVITLPERYDFYLVSQQVRQGTVSPTSYNVLYSSM...GLSPEKM.QKL......TYKMCHLYYNWS....GTTRV........PAVCQYAKKLATLVGTNLH
+Q17567_CAEEL/397-708  MLVVMLAD.DNKTR.YDSLKKYLCVECPIPNQCVNLRTLAGK.....SKDGGENKNLGSIVLKIVLQMICKTGGA...LWKVNIPL.......KSTM.........IVG YDLYHDSTLK...........GKTVGACVSTTS.NDFTQFYSQTRPHENPTQLGNN.LTH............FVRKSLKQYYDNNDKTLPSRLILYRDGAGDGQIPYIKNTEVKLVRDACDAVTDKAAELS.NKVQEKIKLAFIIVTKRVNMRILKQGSSS.......................KSAINPQPGTVV...DTTVTRPERMDFYLVPQFVNQGTVTPVSYNIIHDDT...GLGPDKH.QQL......AFKLCHLYYNWQ....GTVRV........PAPCQYAHKLAFLTAQSLH
+PIWL1_HUMAN/555-847   IVVCLLSS.NRKDK.YDAIKKYLCTDCPTPSQCVVARTLGKQ.....QT.......VMAIATKIALQMNCKMGGE...LWRVDIPL.......KLVM.........IVG IDCYHDMTAG...........RRSIAGFVASIN.EGMTRWFSRCIFQDRGQELVDG.LKV............CLQAALRAW.NSCNEYMPSRIIVYRDGVGDGQLKTLVNYEVPQFLDCLK.......SIG.RGYN..PRLTVIVVKKRVNTRFFAQSGGR.........................LQNPLPGTVI...DVEVTRPEWYDFFIVSQAVRSGSVSPTHYNVIYDNS...GLKPDHI.QRL......TYKLCHIYYNWP....GVIRV........PAPCQYAHKLAFLVGQSIH
+PIWI_ARCFU/110-406    GIMLVLPE.YNTPL.YYKLKSYLINS..IPSQFMRYDILSNR.....NL........TFYVDNLLVQFVSKLGGK...PWILNVDPEK....................G SDIIIGTGAT........RIDNVNLFCFAMVFK.KDGTMLWNEISPIVTSSEYLTY.LKS............TIKKVVYGFKKSNPDWDVEKLTLHVSG....KRPKMKDGETKILKETVE.......ELK.KQEMVSRDVKYAILHLNETHPFWVMGDPN........................NRFHPYEGTKVKLSSKRYLLTLLQPYLKRNGLEMVTPIKPLSVEIVSDN.....WTSEEYYHNVHEILDEIYYLSKMNWRGF....RSRNL........PVTVNYPKLVAGIIANVNR
+Y1321_METJA/426-699   CFALIIGKEKYKDNDYYEILKKQLFDLKIISQNILWENWRKD.....DK........GYMTNNLLIQIMGKLGIK...YFILDSKTPYDY................IMG LDTGLGIFGN............HRVGGCTVVYDSEGKIRRIQPIETPAPGERLHLP................YVIEYLEN..KANIDMENKNILFLRDG.......FIQNSERNDLKEISK.......ELN.......SNIEVISIRKNNKYKVFTSDYRI........................GSVFGNDGIFLPHKTPFGSNPVKLSTWLRFNCGNEEGLK...IN.............ESI.MQL......LYDLTKMNYSALYGEGRYLRI........PAPIHYADKFVKALGKNWK
+O67434_AQUAE/419-694  LVIVFLEEYPKVDP.YKSFLLYDFVKRELLKKMIPSQVILNR.....TL...KNENLKFVLLNVAEQVLAKTGNIP..YKLKEIEGKVDA................FVG IDISRITRDG..........KTVNAVAFTKIFNSKGELVRYYLTSYPAFGEKLTEK................AIGDVFSLLEKLGF.KKGSKIVVHRDG.......RLYRDEVAAFK...........KYG.ELYG..YSLELLEIIKRNNPRFFSNEKFI..............................KGYFYKLSEDSVILATYNQVY.......EGTHQPIKVRKVYGE.....LPVEVL.CSQ......ILSLTLMNYSSF....QPIKL........PATVHYSDKITKLMLRGIE
+#=GC #=RF                                  **********Q********** 
+//
diff --git a/test/scripts/automated/belvu/test35 b/test/scripts/automated/belvu/test35
new file mode 100755
index 0000000..48628ca
--- /dev/null
+++ b/test/scripts/automated/belvu/test35
@@ -0,0 +1,25 @@
+#!/bin/ksh
+#
+# Description:
+#   Sort by neighbour-joinging tree on start up (large alignment).
+
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences to the saved results
+diffs=`belvu -o Selex -S n $data_dir/ALIGN.selex >&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
+
diff --git a/test/scripts/automated/belvu/test35_results b/test/scripts/automated/belvu/test35_results
new file mode 100644
index 0000000..2b4ab09
--- /dev/null
+++ b/test/scripts/automated/belvu/test35_results
@@ -0,0 +1,371 @@
+A8PU70.1/566-908   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9UPQ9.4/1-1833    MREKEQEREEQLMEDKKRKKEDKKKKEATQ-KVTEQKTKVPEVTKP-----SLS-QPTAASP-------IGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------SAA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPPSCMLLGGGAGPPP-CTAP-GANPNNA--QVTG-ALLQSESGTAPDSTLGGA-AASNYANSTWGSGASSNN-----GTSPNPIHIWDKVIVDG-SDMEEWPCIAS-KD-TESSSENTTDNNS--ASNPGSEKS-TL------------PGSTTS--------NK------------GKGSQCQS----ASS----------------GNECNLGVWK------SDPK-A------K--------------SVQSSNSTTE-NNNG [...]
+A8MYY3.2/16-949    -QEKEQEREEQLMEDKKRKKEDKKKKEATQ-KVTEQKTKVPEVTKP-----SLS-QPTAASP-------IGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------SAA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPPSCMLLGGGAGPPP-CTAP-GANPNNA--QVTG-ALLQSESGTAPDSTLGGA-AASNYANSTWGSGASSNN-----GTSPNPIHIWDKVIVDG-SDMEEWPCIAS-KD-TESSSENTTDNNS--ASNPGSEKS-TL------------PGSTTS--------NK------------GKGSQCQS----ASS----------------GNECNLGVWK------SDPK-A------K--------------SVQSSNSTTE-NNNG [...]
+B5ME23.2/16-165    -QEKEQEREEQLMEDKKRKKEDKKKKEATQ-KVTEQKTKVPEVTKP-----SLS-QPTAASP-------IGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------SAA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPPSCMLLGGGAGPPP-CTAP-GANPNNA--QVTG-ALLQSESGTA----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4DKJ5.1/1-276     MREKEQEREEQLMEDKKRKKEDKKKKEATQ-KVTEQKTKVPEVTKP-----SLS-QPTAASP-------IGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------SAA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPPSCMLLGGGAGPPP-CTAP-GANPNNA--QVTG-ALLQSESGTAPDSTLGGA-AASNYANSTWGSGASSNN-----GTSPNPIHIWDKVIVDG-SDMEEWPCIAS-KD-TESSSENTTDNNS--ASNPGSEKS-TL------------PGSTTS--------NK------------GKGSQCQS----ASS----------------GNECNLGVWK------SDPK-A------K--------------SVQSSKPKGQ----- [...]
+Q8BX83.2/38-410    -QEKEQEREEQLMEDKKRKKEDKKKKEATQ-KVTEQKTKVPEVTKP-----SLS-QPTAASP-------IGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------SAA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPPSCMLLGGGAGPPP-CTAP-GANPNNN-AQVTG-ALLQSESGTAPESTLGGA-AASNYANSTWGPGASSNS-----GASPNPIHIWDKVIVDG-SDMEEWPCIAS-KD-TESSSENTTDNNS--ASNPGSEKS-SL------------PGSTTS--------NK------------GKGSQCQA----ASS----------------GNECNLGVWK------SDPK-A------K--------------SVQPPNSTSD-SNNG [...]
+C9J5L7.1/16-949    -QEKEQEREEQLMEDKKRKKEDKKKKEATQ-KVTEQKTKVPEVTKP-----SLS-QPTAASP-------IGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------SAA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPPSCMLLGGGAGPPP-CTAP-GANPNNA--QVTG-ALLQSESGTAPDSTLGGA-AASNYANSTWGSGASSNN-----GTSPNPIHIWDKVIVDG-SDMEEWPCIAS-KD-TESSSENTTDNNS--ASNPGSEKS-TL------------PGSTTS--------NK------------GKGSQCQS----ASS----------------GNECNLGVWK------SDPK-A------K--------------SVQSSNSTTE-NNNG [...]
+D2GZL8.1/5-902     --------------------------------------SVPEVTKP-----SLS-QPTAASP-------IGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------SAA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPPSCMLLGGGAGPPP-STAP-GANSNNA--QVTG-TPLQSDSGTAPESTLGGA-AASNYANSTWGPGASSNN-----GASPNPIHIWDKVIVDG-SDTEEWPCIAS-KD-TESSSENTTDNNS--ASNPGSEKS-TL------------PGSTTS--------NK------------GKGSQCQS----ASS----------------GNECNLGVWK------SDPK-T------K--------------SVQSSNSTTE-SNNG [...]
+Q3TRH0.1/1-49      ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q1LZM4.1/2-292     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8BKI2.2/38-1167   -QEKEQEREEQLMEDKKRKKEDKKKKEATQ-KVTEQKTKVPEVTKP-----SLS-QPTAASP-------IGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------SAA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPPSCMLLGGGAGPPP-CTAP-GANPNNN-AQVTG-ALLQSESGTAPESTLGGA-AASNYANSTWGPGASSNS-----GASPNPIHIWDKVIVDG-SDMEEWPCIAS-KD-TESSSENTTDNNS--ASNPGSEKS-SL------------PGSTTS--------NK------------GKGSQCQA----ASS----------------GNECNLGVWK------SDPK-A------K--------------SVQPPNSTSD-SNNG [...]
+C9JAR8.1/20-121    ----LVQEEEQLMEEKKKKKDDKKKKEAAQKKATEQKIKVPEQIKP-----SVS-QPQPANS-------N-NGTST--------------------ATSTNNNAKR-ATANNQQPQ----------------------------QQQ----------------------------QQQQPQQQQPQQQPQ---PQPQQQQ--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8NDV7.2/20-121    ----LVQEEEQLMEEKKKKKDDKKKKEAAQKKATEQKIKVPEQIKP-----SVS-QPQPANS-------N-NGTST--------------------ATSTNNNAKR-ATANNQQPQ----------------------------QQQ----------------------------QQQQPQQQQPQQQPQ---PQPQQQQ--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D4A372.1/1-97      ------------MEEKKRKKDDKKKKEAAQKKATEQKIKVPEQIKP-----SVS-QPQPANS-------D-NGTST--------------------ATSTNNNAKR-ATASNQQPP----------------------------PPP-----------------------------QQ-PQQQQQQQQQQ----QEQQQQQQQQQQ--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4S4D3.1/1-379     ------------MEDKKRKKDDKRKRETSQ-KVTEQKNKVPELTKP-----ASA-QPSAPQI-------SSASHSPGPTPSASPSPATLGPGSAAAPPQGGNNAKR-LAGANGQPCSNTVSPPAASGPSPAGNGSANSGGQTPQQQP-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPL-SSMLLGGGGGG------D-GPNANMA--ATCD-SVAASSSTALTSSSVAAASTTSNYANSMWGVSS--GS-----QTSSQ---GREKVIVDG-NDLEEWPSIAG-ND-GARAPFTGLGGGS---ANSGKPVN-SISA-------SGNQSSPTS--------SF------------SMPNECIQ----SSN----------------GVAWGVAASQ------GHLSGG------N--------------AVAASGPLLQ-QPSS [...]
+Q4T5V2.1/1-136     ------------MEDKKKKKDDKKKKEISQ-KVSEQKIKDTSCSQPLATPGSVSPSPGPATPSSPTPGAAGVSAQV--------------------PPCGGNNAKQWTAVANGQPSSQTSQT----------------SQQQQQQQQ-----------------------------RYMSREVPPRFRSQ----QDHKVLLKRGQPPL-SSMLLGGGGE-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B1H1W1.1/13-388    -REKEQEREEQLMEDKKRKKEDKKKKEAAQ-KVTEQKTKVPEVTKP-----SSS-QATAASL-------PGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------STA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPASCMLPGGGAGAPPSTTAP-GACPGNA-QPGVG-ALLQGESGPTTDSSSGAA-ATSNYANSTWGSGGPASS-----GPTTNPPHAWDKVIVDG-SDMEEWPCIAG-VD-AEPPSDNATDNNS--ASNSASEKG-PP------------QGSTTS--------HK------------GRGGQGQQ----QQQ---------------PGSECIQGVWK------SDPK-A------K--------------PVPSSNPAAE-GVNR [...]
+Q4T1P6.1/6-46      -------------------------------------------------------------------------------------------------------------TPPQQQC----------------------------QLSSA-------------------------SARYPPREVPPRFR-Q----QEHKQLLKRGQPLP------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C3ZJT1.1/159-315   -RLQMEEEEEQRQEEERRKREEKKKKQQQL-KAKAQELKAKEAE-S-----AKS-QPSQAQP-------AQQ------------------------------AAKR-PSSAQGQQP----------------------------P-------------------------------RY-PREVPPRFQQQAQKQQHHKQKQQGGQGK---KQQGGSGWGSPP-PQMP-SAAPQVG-PSGWGDSNPRSQENSWANAAKKGM-APENFTNGAK---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9UPQ9.4/1-1833    MREKEQEREEQLMEDKKRKKEDKKKKEATQ-KVTEQKTKVPEVTKP-----SLS-QPTAASP-------IGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------SAA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPPSCMLLGGGAGPPP-CTAP-GANPNNA--QVTG-ALLQSESGTAPDSTLGGA-AASNYANSTWGSGASSNN-----GTSPNPIHIWDKVIVDG-SDMEEWPCIAS-KD-TESSSENTTDNNS--ASNPGSEKS-TL------------PGSTTS--------NK------------GKGSQCQS----ASS----------------GNECNLGVWK------SDPK-A------K--------------SVQSSNSTTE-NNNG [...]
+A8MYY3.2/946-1098  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C9J5L7.1/946-1098  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D2GZL8.1/900-1051  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q3TRH0.1/46-194    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q3TRK2.1/1-88      ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8BWL0.1/2-169     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B5ME23.2/165-368   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4E231.1/1-251     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B0QY77.1/1-879     ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------WK------SDPK-A------K--------------SVQSSNSTTE-NNNG [...]
+A0CJW3.1/434-742   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4S4D3.1/395-556   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4TA88.1/5-275     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B1ATC3.1/1015-1647 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B7ZC94.1/855-1477  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q3UHC0.2/805-1437  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9HCJ0.3/810-1437  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D2H997.1/853-1477  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4T574.1/639-850   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4T0A8.1/27-228    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C3ZJT1.1/371-689   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B1ATC3.1/2-1028    ------------EEKKKKKQEDKKKKEGAQKKAADQKTKVPELTKT-----CSS-QPQPAGT-------SPSTSTS--------------------TISSGSNGKR--ASACGQQP----------------------------AAS-----------------------------RYLPREVPPRFR-Q----QEQKQLLKRGQPLPTGGLT---SLNSAQ-AAGPAGASPPPL--PGAG-A-QQHPSKLQQDLGHSG--LVDHYENSHWGQHPSYRS-----EAN----CSWDKVIIDR-TEPEVWPSIPV-TE-TESASECPTDTDS--ASNCGSENS-SM-----------ATGSAQS--------SFPSHLKKTNGSHGTNGALVQS----PSNQSALG------AGGTNGNGGVARVWGVATSSSSGLA-H------C--------------SVGGGDGKMD-NMIG [...]
+B7ZC94.1/2-868     ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------EANCSWDKVIIDR-TEPEVWPSIPV-TE-TESASECPTDTDS--ASNCGSENS-SM-----------ATGSAQS--------SFPSHLKKTNGSHGTNGALVQS----PSNQSALG------AGGTNGNGGVARVWGVATSSSSGLA-H------C--------------SVGGGDGKMD-NMIG [...]
+Q3UHC0.2/4-818     ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------GSAQS-SFPS--------HLKKTNGS--------HG------------TNGALVQS----PSNQSALG------AGGTNGNGGVARVWGVATSSSSGLA-H------C--------------SVGGGDGKMD-NMIG [...]
+D3ZRA6.1/2-1000    ------------EEKKKKKQEDKKKKEGAQKKAADQKTKVPELTKT-----CSS-QPQPAGT-------SPSTSTS--------------------TISSGSNGKR--ASACGQQP----------------------------AAS-----------------------------RYLPREVPPRFR-Q----QEQKQLLKRGQPLPTGSLT---SVSPAQ-AAGPAGASPPPL--PGAG-A-QQHPSKLQPDLGHSG--LAGHYENCHWGQHPSYRS-----EAD----CSWDKVIIDR-TDQELWPSTPV-TE-TESASECPTDTDS--ASNCGSENS-SM-----------ATGSTQS--------SFPGHPKKTNGSHGTNGTLVQS----PSNPSALG------AGAANGNGGMARVWGVATGSSSGLA-H------C--------------SVGGGDGKMD-NMIG [...]
+D2H997.1/2-866     -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ASSSWDKVIIDR-TDKEAWPSITG-AE-TESASECTTDTDS--ASNCGSENS-SMATGSAQGTFTGHT--------------KKTN-----GNNGTNGALVQS----PSNQSALG------AGGANGNGNGARVWGVATGSSSGPA-H------C--------------SLSGGDGKMD-NMIG [...]
+Q9HCJ0.3/4-822     ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------GSAQG-NF------------TGHTKK--------TNGN--------NGTNGALVQS----PSNQSALG------AGGANSNGSAARVWGVATGSSSGLA-H------C--------------SVSGGDGKMD-TMIG [...]
+C3ZJT1.1/328-369   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4T574.1/239-596   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4T0A9.1/370-579   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B7PWH5.1/252-389   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4T574.1/1-220     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------SWDKVIIDR-SDTEAWPSISCSSD-LNHPV---VPECP--VGSASSNQD-TS------------AVTTTC--------SS------------SSLSMA-T----GAT----------------GQQAHYASLK------ANNN-M------T--------------GPGSANILTS-N-RG [...]
+Q4T0A9.1/1-255     -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------WDQLIIDQ-RDTEAWPLIKL-SPSQASPGGCSLDTDPGPLTSSGSTSN-SCSAVN----MATGANSQTGHFPANHLSNK------------ANSGLNHT----NHTGTS----------MLSNQVAANRSWG------SGPG-PS----HCP-----------SQSSVGTEVKND-SPVG [...]
+A8MYY3.2/1098-1737 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D2GZL8.1/1051-1690 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q1LZM4.1/292-736   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8BXV9.1/2-142     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8BZH2.1/5-63      ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B7ZB91.1/13-478    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4S4D3.1/557-654   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B5ME23.2/368-1007  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C9J5L7.1/1098-1737 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q3TRH0.1/194-838   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8BWL0.1/169-812   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8BKI2.2/1167-1810 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4S4D3.1/1091-1191 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q66JU9.1/2-312     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8VD67.1/1-249     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q6P7B1.1/2-432     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q148P0.1/1-249     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9JHZ1.1/1-249     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q3TRK2.1/88-731    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B0QY77.1/879-1390  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4E231.1/251-762   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4S4D3.1/651-825   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4TA88.1/319-457   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4T0A8.1/329-402   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3M562.1/702-895   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q2GV87.1/66-278    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+P20105.2/537-654   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4PJL3.1/533-654   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3M4K4.1/533-691   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C1GEW9.1/11-129    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A5E7X5.1/33-235    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4NNJ8.1/320-445   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4J985.1/306-430   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4ME65.1/311-417   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4JL62.1/290-395   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q25AW7.1/146-228   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4K3C6.1/67-191    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4MHJ9.1/106-306   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4NP54.1/2-69      ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D1ZFW1.1/794-871   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4P2T9.1/335-396   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q5TST0.3/683-841   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D3BH34.1/115-236   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A5E1Y8.1/358-537   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A0BQD1.1/165-319   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4P3Y1.1/128-184   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D3B7T2.1/209-345   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C0SUE2.1/77-175    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4JY35.1/15-92     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9VYA6.1/174-225   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q86NT0.1/173-270   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A5E351.1/72-416    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4KT28.1/222-266   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4PH83.1/181-247   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q54FL0.1/951-1244  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A1C5H3.1/188-267   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+O42323.1/299-489   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A8NN12.1/68-136    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D0H0K7.1/432-591   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C5GQY8.1/409-612   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q54X31.1/100-217   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4NE44.1/470-686   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4L803.1/240-323   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4PF35.1/18-283    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4KN27.1/225-337   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q6C9A9.1/660-764   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A3F293.1/10-109    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A3F299.1/12-111    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B0X8C2.1/150-263   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4JPX4.1/284-409   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C1GVG2.1/279-439   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C0SAP5.1/281-410   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C1GDP1.1/281-415   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q54LR6.1/53-262    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A3F295.1/6-117     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A3F290.1/9-110     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q7SGG0.1/13-167    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q86KE5.1/77-311    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3NV15.1/1200-1273 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4PZT3.1/1188-1272 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4N2I1.1/44-159    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3MYX8.1/14-153    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D3B9K1.1/622-823   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3MKU5.1/256-639   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A5E3S9.1/278-450   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q5TSQ4.3/457-676   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q55F37.1/112-343   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+P20105.2/153-385   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4PJL3.1/173-393   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3NHT3.1/152-330   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3M4K4.1/89-378    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3N1G0.1/6-1260    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3P9S0.1/6-1293    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4IIY1.1/6-1290    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8SY33.1/6-1289    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8MSF0.1/1-120     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4R2G2.1/6-1156    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4PW21.1/6-1287    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q29CP6.2/6-1291    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4H887.1/32-1121   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4MF11.1/6-1287    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4L7C4.1/6-1178    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C1K8B6.1/4-244     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C1K890.1/4-244     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C1K8V5.1/4-177     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D0Z7B2.1/6-1290    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4JZV3.1/6-1310    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4NHM7.1/6-1344    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B0WTJ5.1/228-1404  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q172C6.1/6-1080    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q7Q3B9.4/7-766     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A7UUT0.1/686-771   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B0WXG8.1/386-1198  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B8RJB3.1/9-266     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q172C8.1/672-1244  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q172C7.1/363-538   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B0WXH0.1/311-1189  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4H886.1/6-148     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q172C8.1/192-646   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A7UUT0.1/13-626    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A0NFA3.2/8-516     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B7PWH5.1/349-695   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q172C7.1/573-1487  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B0WXH0.1/1191-1443 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q7Q3B9.4/781-1217  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B0WXG8.1/1199-1287 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A7UUT0.1/838-1208  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B7PWH5.1/720-1088  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A0NFA3.2/687-1175  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4KQM5.1/242-419   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A7SDW4.1/430-1260  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A7SDW4.1/1319-1671 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A7T6Q0.1/2-144     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B1ATC3.1/1646-1899 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B7ZC94.1/1478-1731 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q3UHC0.2/1436-1689 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9HCJ0.3/1434-1689 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D2H997.1/1476-1729 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4T574.1/1322-1578 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4T0A8.1/526-801   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B0R1E2.1/290-554   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4S9I4.1/1569-1835 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4S4D3.1/823-1099  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4TA89.1/1-316     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C9JA83.1/3-471     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4DST4.1/1-168     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C9JAR8.1/119-1283  -----------------------------------------------------------------------------------------------------------QQQPQQQPQ----------------------------ALP-----------------------------RY-PREVPPRFRH-----QEHKQLLKRGQHFPVIAANLGSAVKVLN-SQSE-SSALTNQQPQNNG-EVQNSKNQSDINH---ST-SGSHYENSQRGPVSST-S-----DSSTN---CKNAVVSDL-SEKEAWPSAPG-SD-PELASEC-MDADS--ASSSESERNITIM----------ASGNTGG--------EKDGL-----RNSTGLGSQNKFVVGSSSNN--------------VGHGSSTGPWG------FSHG-AIISTCQV--------------SVDAPESKSESSNNR [...]
+Q05CE3.1/20-1014   ----LVQEEEQLMEEKKKKKDDKKKKEAAQKKATEQKIKVPEQIKP-----SVS-QPQPANS-------D-NGTST--------------------ATSTNNNAKR-ATASNQQPPPPQQQ------------------QPQQEQ-QQQQP---------------------QALPRY-PREVPPRFRH-----QEHKQLLKRGQHFPVIAANLGSAVKVLN-SQSE-SSAVTNQQPQNNG-EVQNSKSQSDINH---NT-SGSHYENCQRGPVSST-S-----DCSTS---C-KNAVNDL-LEKEAWPSAPG-SD-PELAPEC-IDADS--ASNSESERNITVM----------ASGNTGG--------EKDGLRNSTGLGSQSKFVVGSS----SNN---------------VGHGSSTGPWG------FPHG-ALISTCQV--------------SVDAPESKPESSNNR [...]
+Q6ZPQ4.1/1-243     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8BNF0.2/9-877     -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------VVNR [...]
+Q3UHK8.1/20-1269   ----LVQEEEQLMEEKKKKKDDKKKKEAAQKKATEQKIKVPEQIKP-----SVS-QPQPANS-------D-NGTST--------------------ATSTNNNAKR-ATASNQQPPPPQQQ------------------QPQQEQ-QQQQP---------------------QALPRY-PREVPPRFRH-----QEHKQLLKRGQHFPVIAANLGSAVKVLN-SQSE-SSAVTNQQPQNNG-EVQNSKSQSDINH---NT-SGSHYENCQRGPVSST-S-----DCSTS---C-KNAVNDL-LEKEAWPSAPG-SD-PELAPEC-IDADS--ASNSESERNITVM----------ASGNTGG--------EKDGLRNSTGLGSQSKFVVGSS----SNN---------------VGHGSSTGPWG------FPHG-ALISTCQV--------------SVDAPESKPESSNNR [...]
+Q8NDV7.2/119-1962  -----------------------------------------------------------------------------------------------------------QQQPQQQPQ----------------------------ALP-----------------------------RY-PREVPPRFRH-----QEHKQLLKRGQHFPVIAANLGSAVKVLN-SQSE-SSALTNQQPQNNG-EVQNSKNQSDINH---ST-SGSHYENSQRGPVSST-S-----DSSTN---CKNAVVSDL-SEKEAWPSAPG-SD-PELASEC-MDADS--ASSSESERNITIM----------ASGNTGG--------EKDGL-----RNSTGLGSQNKFVVGSSSNN--------------VGHGSSTGPWG------FSHG-AIISTCQV--------------SVDAPESKSESSNNR [...]
+D2I222.1/1-1905    ---------------------------------------VPEQIKP-----SVS-QPQPANS-------N-NGTST--------------------ATSTNNNAKR-ATANNPQQQ----------------------------QQQQPQPPQQPQPPQPPQQPPQQPPQPAQALPRY-PREVPPRFRH-----QEHKQLLKRGQHFPVIAANLGSAVKVLS-SQSE-SSALTNQQPQNNG-EVQNSKNQSDINH---NT-SGSHYENSQRGPVSS-PS-----DSSTN---CKNAVVNDS-PEKEAWPSTPG-SD-PELASEC-MDADS--ASSSESERNITIM----------ASGSTGG--------EKDGLRNSTGLGSQSKFVVGSS----SNN---------------VGHGSSTGPWG------FSHG-AIISTCQV--------------SVDAPESKSESSNNR [...]
+D4A372.1/95-1931   -----------------------------------------------------------------------------------------------------------QQQQQQQPQ----------------------------ALP-----------------------------RY-PREVPPRFRH-----QEHKQLLKRGQHFPVIAANLGSAVKVLN-SQSE-SSAVTNQQPQNNG-EVQNSKSQSDINH---NT-SGSHYENCQRGPVSST-S-----DCSTS---C-KNAVNDL-LEKEAWPSAPG-SD-PELASEC-IDADS--ASNSESERNITVM----------ASGNTGG--------EKDGLRNSTGLGPQSKFVVGSS----SNN---------------VGHGSSTGPWG------FPHG-AIISTCQV--------------SVDAPESKPESSNSR [...]
+C9JA83.1/468-1101  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q3UQ45.1/7-500     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3KSX2.1/4-277     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C9JAR8.1/1280-1913 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q99JR3.2/24-648    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q3UHK8.1/1266-1896 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8BXM6.1/4-627     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q3UUG8.1/1-727     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4S9I4.1/33-1574   -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------TGS-PCTGDGNSNWGKVLVDGSTDKSNNTS-TSSAVWPPSSFSCSSSSSSSGCGSG-SD-PELASEC-MDADS--SSLNGSEKH-LAAV-------TPVMMSSNA--------SS------------SVSSTASS----PSSSMVTSAVMIGVAVNGDGNGNSRHMLG------GGMG-T------VSGSNSGNVTGPPHFSVAGSSNIGSNNMGN [...]
+Q8BWM2.1/1-337     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4T574.1/894-1324  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4T0A8.1/405-529   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B0R1E2.1/1-289     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C3ZJT1.1/730-1350  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C0PFW8.1/269-336   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C0HHH3.1/270-337   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3RQ20.1/1143-1394 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q2I2V8.1/539-606   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A9USE7.1/720-774   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D4APH2.1/480-541   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A9USE7.1/997-1101  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A7AT74.1/621-697   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D3BFK6.1/320-440   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A3CUY7.1/2-69      ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q2FSR7.1/6-69      ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q7Q9F7.4/282-427   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3S2W8.1/165-267   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A9S4M3.1/42-65     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A9T3C5.1/56-79     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q6DGV1.1/174-212   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B5LEQ5.1/179-323   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A3GHN7.2/350-469   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4NBP3.1/171-277   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3M300.1/220-284   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4MC02.1/171-283   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4JIH9.1/171-286   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C4XVP0.1/46-94     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D0N277.1/201-240   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q54C48.1/271-412   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C5DIP1.1/2-75      ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C4Q4K6.1/224-436   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C4QZM5.1/235-294   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B5DF80.1/306-473   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q2VIP3.1/296-392   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q3ZCS4.1/296-393   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q2VIN7.1/296-392   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q5VX58.1/296-390   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9H361.2/296-390   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q2VIN9.1/296-390   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D3Z5M2.1/296-380   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q99LF8.1/296-380   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q91YZ8.1/296-380   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A3KFU8.1/296-380   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q6PHQ9.1/296-380   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A3KFU5.1/296-380   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q3UX16.1/225-309   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4VC03.1/296-379   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B1ANR0.1/296-379   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D4AC21.1/225-308   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9D4E6.1/307-466   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q7T3G5.1/297-380   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8QGJ7.1/296-379   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4RNX8.1/296-379   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q3UTA6.1/197-279   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q13310.1/296-379   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D2I596.1/309-392   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A4IFC3.1/296-379   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q6IQ30.1/296-379   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D4AC14.1/296-379   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B2GUY3.1/296-379   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B2RXY9.1/296-394   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A2A5N3.1/296-393   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D3ZAS7.1/296-399   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D2H6M0.1/296-405   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4VXU2.1/296-404   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q98SP8.2/296-391   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q15164.1/107-185   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C5YBU9.1/329-416   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B6U4M0.1/324-410   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9H7X8.1/304-412   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9H7X9.1/314-422   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9GT62.1/311-412   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A2YEJ5.1/343-442   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q69X94.1/342-443   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9FTY9.1/365-463   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q05196.2/328-430   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A9TLC5.1/312-407   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+P31209.2/366-455   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B6K033.1/364-457   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B6K6T8.1/356-444   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q5KBW2.1/367-420   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4P8R9.1/368-413   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q6CDH3.1/332-428   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D3AVQ3.1/284-366   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q54BM2.1/286-375   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A8NF86.1/337-425   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A5BE57.1/307-474   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9RQB9.1/300-388   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9GH32.1/295-362   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+O04319.1/304-419   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C5WPD4.1/242-318   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q10N87.1/216-320   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B8AL31.1/216-320   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9RQB9.1/109-183   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9GH32.1/107-174   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+O04319.1/114-194   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C5YBU9.1/128-201   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9H7X8.1/113-180   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8RXR5.1/110-177   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+P42731.1/126-193   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9M6E6.1/117-184   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A5BE57.1/246-300   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9RQB9.1/236-287   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A5B3Z9.1/212-306   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B2RXY9.1/193-253   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A2A5N3.1/193-253   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3S2W8.1/76-163    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B2GUY3.1/194-262   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D4AC14.1/194-262   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D4AC21.1/123-191   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9N4W3.1/235-341   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9HRX8.1/250-356   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9RY32.1/285-382   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8LFI9.1/244-343   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q0WW84.1/287-386   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9LJL7.1/287-386   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A5BF74.1/281-378   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q2V9A1.1/201-306   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C5WVW4.1/223-289   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C4IYK3.1/223-290   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B6UA93.1/223-290   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B8APB9.1/226-292   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q10R21.1/226-292   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q0DUQ0.1/248-314   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C0PPV9.1/259-392   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C0PT30.1/259-393   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A9TFH5.1/223-287   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A9TZW4.1/245-319   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A9NWA0.1/248-328   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9RIB9.1/231-294   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q6R969.1/253-422   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q2V9C2.1/258-417   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B8LRZ2.1/277-363   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A9NX92.1/275-362   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9FPJ8.1/236-325   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9FFU0.1/236-325   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A5C5B3.1/256-335   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9I0E1.1/253-334   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C5WUD2.1/243-339   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C0P488.1/242-336   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q10HZ8.1/240-333   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9AY92.1/240-333   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q10HZ7.1/240-333   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B8AKU6.1/240-333   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q0DQQ8.1/284-377   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9LEB4.1/261-347   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q2PEV8.1/238-322   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8LBV8.1/233-325   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9SAB3.1/234-326   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9FX88.1/338-415   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A5BPW5.1/140-241   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9GNX9.1/266-364   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9MVK8.1/264-361   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9R7H3.1/281-377   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+//
diff --git a/test/scripts/automated/belvu/test36 b/test/scripts/automated/belvu/test36
new file mode 100755
index 0000000..b766378
--- /dev/null
+++ b/test/scripts/automated/belvu/test36
@@ -0,0 +1,25 @@
+#!/bin/ksh
+#
+# Description:
+#   Sort by neighbour-joinging tree on start up (large alignment).
+
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences to the saved results
+diffs=`belvu -o Selex -S n $data_dir/PF02171_full.selex >&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
+
diff --git a/test/scripts/automated/belvu/test36_results b/test/scripts/automated/belvu/test36_results
new file mode 100644
index 0000000..60a2f92
--- /dev/null
+++ b/test/scripts/automated/belvu/test36_results
@@ -0,0 +1,843 @@
+Q0U676_PHANO/647-830   ........................................................................................nvldv--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............--GP..SIAAVVASTD...S...T.A.L...Q....F.P.....G.SV..T...IQ.....Q..........T.......F....D...EY......TTR...gAEDkttltapv...................... [...]
+A9QW19_TRICA/79-190    ............................................................................................l-IIVVVPN..-SGPQ..YSFVKQA.AE...LN..V..GCLTQCIKE.R..T.IGRL--................NPQTVGNILL.......KINSK..........MNGT.N....hRLS.P....NSR.--........-......P..L....I...M...K.....R.P..C.M..................................IMGADVTHPSPDA...............RDIP..SVAAVTASHD...P...N.A.F...Q....Y.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+A7TMA9_VANPO/888-1209  ............................................................................................y-ILYVLRR.gNDSAV..YDRLKYI.TD...LK..F..GALNSCVVW.D..N.FKKNS-................-IQYNSNVVM.......KMNLK..........LLGS.Nh...sLSI.E....NNK.LL........I......D..K....E...S...N.....L.P..I.L..................................VLGSDVTHYPEKD...............--QN..SIASLVGSYD...D...K.F.T...Q....F.P.....G.DY..M...LQ.....D.........gP.......G....E...EI......ITN....VGS.............................. [...]
+A5E477_LODEL/107-430   ............................................................................................f-LLVVLPS..KDARF..YRAVKRA.GD...LK..V..GINNSCVIV.D..T.FTKRKFd.............kfDMTLFAQVGM.......KVNLK..........LGGS.N.....HKL.S....DAN.SK........G.....lV..D....E...K...K.....V.P..V.F..................................ILGADVTHPTGES..............nEESV..SIASVVGSED...A...I.F.N...S....F.P.....G.SL..R...VQ.....G..........G.......G....Q...EV......IAE....IKD.............................. [...]
+C5MCT9_CANTT/554-879   ............................................................................................y-LLVLLPR..SDTTY..YLSVKRV.CD...LK..V..GILNSCSIL.S..V.FIKQRRg.............sfDTMTYAQMAM.......KVNIK..........LGGS.N....hKLS.H....QDS.AS........L......V..D....K...N...G.....V.P..I.M..................................ILGADVTHPTGQI..............nHESV..SIAACVASED...G...I.F.N...K....F.P.....G.SI..R...IQ.....S..........G.......G....Q...EV......IKD....IKG.............................. [...]
+B9WGS3_CANDC/555-882   ............................................................................................y-LLFILPR..QDTQL..YSAIKRA.CD...LK..I..GILNSCSVL.N..T.FTKKRRgs...........dnfDTMTYAQMAM.......KINIK..........LGGS.Nh...kLSK.K....DSQ.GL........F......D..-....K...N...N.....V.P..I.F..................................ILGADVTHPTGEI..............nSESV..SIASIVGSED...G...I.F.N...K....F.P.....G.SV..R...IQ.....T..........G.......G....Q...EV......IAD....VKS.............................. [...]
+Q5A1B6_CANAL/296-623   ............................................................................................f-LLFILPR..QDTPL..YSAIKRA.CD...LK..V..GILNSCSIL.N..T.FTKKRRgt...........enfDAMTYAQMAM.......KINIK..........LGGS.Nh...kLSK.K....DSQ.GL........F......D..-....K...N...N.....V.P..I.F..................................ILGADVTHPTGEI..............nSESV..SIASIVGSED...G...I.F.N...K....F.P.....G.SV..R...IQ.....T..........G.......G....Q...EV......IAD....VKS.............................. [...]
+C4YGL4_CANAL/554-881   ............................................................................................f-LLFILPR..QDTPL..YSAIKRA.CD...LK..V..GILNSCSIL.N..T.FTKKRRgt...........enfDAMTYAQMAM.......KINIK..........LGGS.Nh...kLSK.K....DSQ.GL........F......D..-....K...N...N.....V.P..I.F..................................ILGADVTHPTGEI..............nSESV..SIASIVGNED...G...I.F.N...K....F.P.....G.SV..R...IQ.....T..........G.......G....Q...EV......IAD....VKS.............................. [...]
+C4JIN7_UNCRE/692-1007  ............................................................................................f-VVALLPK..YDQQI..YSLVKHQ.GD...IK..T..GIPTVCVVE.K..P.IKDKQTntsy.......vglkdDEGTLRNISL.......KVNLK..........LGGI.N.....HEI.T....SRQ.EI........R......N..I....-...-...M.....Q.T..T.M..................................FIGIDVTHPTGTEs.............qSDAP..SIAAVVANTD...P...T.L.S...Q....W.P.....A.SI..T...TQ.....G..........H.......R....K...EM......VED...dLYS.............................. [...]
+C5P8C9_COCP7/682-993   ............................................................................................y-VIVLLPK..FDQQV..YSYVKYY.GD...IV..T..GIPNTCVTE.K..Y.VKKEKRit...........fktDGGAVENIAL.......KINLK..........LGGI.N.....HEI.Q....SDG.RI........H......D..I....-...-...I.....R.T..T.M..................................FIGIDVTHPTGTDs.............qSGAP..SISAVVANND...P...T.L.A...Q....W.P.....A.SI..T...TQ.....E..........H.......R....K...EM......VES...vLER.............................. [...]
+C5FBF4_NANOT/570-628   ..........................................................................................pda--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B2VW51_PYRTR/606-910   ............................................................................................f-LFALLPS..DNTVL..YDSIKLL.FD...CK..L..GLPSVCCIG.S..K.FAKL--................DPHYFANVAM.......KFNQK..........LGGV.N.....HTV.P....LAK.LA........-......-..-....P...L...D.....A.Q..T.I..................................IFGIDVTHPSPGS..............sQTAP..SIAGVVASVD...A...K.F.S...Q....Y.A.....A.SM..R...TQ.....A..........R.......R....V...EM......VAE....LEE.............................. [...]
+Q0UNU9_PHANO/666-973   ............................................................................................f-LFVILPS..DNAVL..YDCIKFV.CD...CK..L..GVPNICNIG.S..K.FSKEKG................QMQYFANVAM.......KFNQK..........LGGV.N.....HT-.V....ELK.RM........A......P..-....-...L...D.....P.Q..T.I..................................LFGIDVTHPSPGS..............sDSAP..SVAGVVASVD...S...L.F.S...Q....F.P.....A.SM..R...TQ.....R..........G.......R....Q...EM......VEE....LEE.............................. [...]
+Q0TWJ6_PHANO/160-297   .......................................................................................rgssit--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B2WJ98_PYRTR/213-541   ...........................................................................................ct--FFLLRE..KDFDI..YAKIKRD.GD...FS..-..GNHTICAVA.S..R.IKDRNEqdnr........rsgpRWQHFSNLAL.......KMNMK..........LGGD.N.....HWL.D....ENE.LE........K......V..L....GgkdK...K.....Q.N..T.M..................................ILGADVIHPGSSS..............kIGAP..SIACVVGTID...S...R.F.M...S....Y.R.....G.SM..R...LQ.....A..........G.......G....Q...EQ......IEDf..nFRS.............................. [...]
+Q0UCE8_PHANO/551-880   ............................................................................................l-VVFLLNK..SSTPF..YAHLKDL.AD...RT..H..GIHSLCLVE.Q.yK.LIKQ-Yger..........ahlFQEYMTNVVM.......KINLK..........MGGI.-.....TQS.V....T--.TV........S......D..Y....L...A...K.....N.R..V.M..................................VLGADVVHAGPGA..............yPGTP..SIAAIVGSVD...F...S.A.G...K....C.L.....G.SM..R...LQr..idT..........T.......D....R...ET......IVE....VED.............................. [...]
+B2WJ35_PYRTR/419-708   ............................................................................................l-FILVVEK..YDTTI..YRELKNL.AD...RV..V..GIQSLCVVE.Q..M.-KKTDR...............wFDDMMRNVMM.......KLNLK..........LGGI.N.....HVV.D....AVQ.TR........L......-..-....-...-...K.....S.H..T.V..................................VLGADLVHPSGNL...............PGVP..SIASIVGSVD...N...H.A.G...K....C.L.....G.SM..R...LQ.....G..........I.......D....T...TD......REL....IIE.............................. [...]
+Q0UCU3_PHANO/737-1044  ............................................................................................l-VVLLLKT..QSIPV..YSAFKAA.AD...TE..A..GLQSICMTQ.ApnY.ISAKQKck............enIDQYMANIMM.......KANLK..........FGGG.Nh...tVQF.A....AKP.LT........H......I..A....T...T...L.....Q.D..T.L..................................VLGADITHPSPGS..............lVGCP..SIAAVVGSVN...S...M.S.T...K....Y.L.....G.SM..R...LQ.....E..........T.......C....K..kEI......IDD....LQA.............................. [...]
+Q0UCG8_PHANO/473-701   .............................................................................ekentpaysvfkylad--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............SGTP..SIAAIVGSVD...A...K.G.G...K....F.L.....G.SM..R...LQ.....P..........Rl.....iA....C...ED......IQD....VES.............................. [...]
+Q0UCH0_PHANO/670-999   ............................................................................................l-VILVLRS..KDQEV..YSNFKYL.AD...RV..F..GIPSIVMVT.A..S.NFR--Ggaw.........nvtgLDQYIGNIMM.......KANLK..........LGGI.N.....HSA.E....SDR.GN........I......K..N....-...H...L.....E.N..T.L..................................VLGSDVTHPSNGS..............lFGCP..SVAALVGSVD...N...T.G.G...C....F.L.....G.SL..R...LQ.....D..........Q.......G....SkehQM......IDD....LKS.............................. [...]
+Q2HHM4_CHAGB/694-1033  ............................................................................................l-VFVLLPD..KGAEL..YNAIKAA.AD...IK..V..GIHTVCMVE.S..K.AAKKFNkhtk........kmqfDLQFFDNILL.......KANLK..........QGGI.N.....HT-.L....EFP.TS........-......K..I....L...S...T.....W.Q..A.M..................................VLGLDVTHSPPGAn............kaKATP..SIIGMVANAD...E...H.L.A...Q....W.P.....A.TI..A...FQ.....D..........R.......E...nQ...EI......VTS....MQSf............................. [...]
+B2WJ32_PYRTR/383-592   .......................................................hrdasgnvitgdtvtvtvkqyqrlqygrtlrhgelsav--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...NI......ITG....LAT.............................. [...]
+B8PJA4_POSPM/353-665   ............................................................................................l-ILAFLPV..NAPDI..RRRIKHW.GD...VD..K..GVPTQCLRA.G..K.WERA--................RDQYINNVALnsrpqitRINAK..........LGGV.N.....SAI.N....A-K.LL........-......-..-....-...-...P.....Q.C..T.M..................................VIGADVGHPGPGI...............MNRP..SVTSLVASVD...P...D.A.T...K....Y.T.....T.YA..S...VQ.....A..........P.......R....V...EI......IQD....LEQ.............................. [...]
+B0DLH7_LACBS/515-821   ............................................................................................i-LVVILPD..EAATI..LHTVKFW.GD...VK..Y..GILTQCVRA.D..K.LLKA--................NDQYWNNVAL.......KLNAR..........LGGL.N.....YHA.S....GSR.T-........I......N..D....L...K...K.....E.P..Y.I..................................IMGADVGHPGPRV...............-RKP..SVTSLVFSLD...M...H.A.T...K....Y.A.....S.MC..R...IQ.....N..........P.......R....Q...EV......IQD....LRE.............................. [...]
+A8NFX5_COPC7/531-721   .............................................................................................MLVVILPE..DALNL..KAKVKYF.GD...IT..H..GVPTQCLRV.S..K.LLDPKSrrlk........qprqLNQYFNNVAL.......KINAR..........LRGV.N....vMLE.S....KIP.GG........S......P..LailsT...Q...G.....R.K..T.M..................................IIGVDVSHPGPGV...............TNRP..SVASLVFSLY...Q...G.G.A...Q....Y.A.....A.TT..T...IQ.....K..........P.......R....L...EK......VEQ....LAS.............................. [...]
+A8NFX0_COPC7/514-795   ............................................................................................m-LIVLLPS..EAAHL..RTEVKYW.GD...AV..N..GVKTQCLRF.G..K.TMN---................-NQYCNNVAL.......KVES-..........-GKA.L.....REF.A....NDD.R-........-......-..-....-...-...-.....-.-..-.-..................................---ADIGHPGAGI...............RNKP..SVSGLVFSIS...Q...F.A.T...E....Y.A.....A.IT..R...IQ.....P..........P.......R....V...EA......IVD....LEE.............................. [...]
+Q2GQS4_CHAGB/345-418   ...........................................................................................qi-IFYILRD..KTAFV..YDRFKQA.ND...CG..V..ACLSQMLQA.Q..H.VRKA--................QGQYCSNVCM.......KVNSK..........LGGQ.T.....SKI.A....SRA.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B0WE95_CULQU/32-179    ............................................................................................i--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+A0D5D7_PARTE/374-640   vlfvgdqktdftsarntllskaipnqlinlpiqdqeinrllaimtanlgsvpwsikeingqinnkksavlgiwksdnsfsaclsinkylnkyi--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...SS......FGD....LDQ.............................. [...]
+B9S0P9_RICCO/17-119    ............................................................................................i-LICVLAK..-KDHS..YNNLKLI.SE...TK..V..GIVAQCCSF.K..N.APRT--................KTQFLTNLAL.......KINVR..........LGGS.N.....MEL.F....KQP.QC........-......-..L....R...S...K.....G.H..V.M..................................FIGTEVNHLVSYN...............STCP..SIVDVVVIT-...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+C4LVV2_ENTHI/470-756   ......................................................................................mvlavsv--------..--TDS..IYEQIKK.FC...VD..E..NVPTQCIKP.N..T.LRRQPP................-TPVIQMITL.......QMQSK..........MGGI.-.....PWK.T....EID.SS........F......-..-....-...-...-.....A.D..G.M..................................TVGIDVISAGKDR...............----..EIVAIVSSVD...K...D.F.T...V....Y.K.....K.SS..V...VE.....K..........K.......G....L...HT......AGI...hIGE.............................. [...]
+B0ET37_ENTDI/470-756   ......................................................................................mvlavsv--------..--TDS..IYEQIKK.FC...VD..E..NVPTQCIKP.N..T.LRRQSL................-TPIIQMITL.......QMQSK..........MGGI.-.....PWK.T....EID.SG........F......-..-....-...-...-.....S.D..G.M..................................TVGIDVISAGKDR...............----..EIVAIVSSVD...K...S.F.T...V....Y.K.....K.SS..V...VE.....K..........K.......G....L...HT......AGI...hIGE.............................. [...]
+B0ENU6_ENTDI/467-753   ..........................................................................................kiv---FVVLL..-NDSL..YEDIKRK.C-...FD..R..EIITQCILP.D..T.LKKQNL................-FPIVSQITY.......QIQSK..........LGGI.P.....-WD.V....LTN.NK........L......-..-....-...-...-.....F.K..T.M..................................IIGISVIPYDDNK...............----..ECISLVSSMK...S...N.S.L...A....T.R.....K.KY..S...TI.....E..........K.......K....G...CG......NEG....YNSq............................. [...]
+C4LVQ2_ENTHI/467-753   ...........................................................................................ki--VFVVIL..-NDSL..YEDIKRK.CF...DK..-..EIITQCIHP.D..T.LKKQNL................-FPIVSQITY.......QIQSK..........IGGI.-.....PWD.V....LTN.NK........F......-..-....-...-...-.....I.K..T.M..................................IIGIAVTPYDDNK...............----..ECISLVSSMK...Y...N.S.F...A....T.R.....K.KY..S...AI.....E.........tK.......G....S...GN......AGY...nSQI.............................. [...]
+C4LY31_ENTHI/438-711   ............................................................................................q-IVFSVFD..-SIEQ..MVEIKEY.FM...IY..G..NIPTQIIDL.N..E.RYDDKK................----ITNLCL.......RTGIK..........LGCS.R.....MKL.D....QNT.S-........-......-..-....-...-...-.....-.D..I.C..................................VIGI--TSREFFV...............--NK..TLITLCISKD...E...N.L.N...V....F.D.....T.ES..Y...FV.....S..........N.......D....N...WH......SGI...gLEQ.............................. [...]
+B0EI01_ENTDI/438-710   ............................................................................................q-IVFSVFD..-SIEQ..MVEIKDY.FM...IY..G..NIPTQIIDL.N..E.RYDDKK................----ITSLCL.......RTGIK..........IGCS.R.....LKL.D....QNT.--........-......-..-....-...-...-.....S.D..I.C..................................VIGI--TSREFFV...............--NK..TLITLCISKD...E...N.L.N...V....F.D.....T.DS..Y...FV.....S..........N.......D....N...WH......SGI...gLEQ.............................. [...]
+D2V7J4_NAEGR/498-769   ............................................................................................y-VFFLMAN..ENKHI..YSALKQF.YN...CT..V..GIPSQCIVC.N.gD.WFKR--................----LPNCLI.......QMSAK..........IGGL.-.....IWS.V....ERS.YQ........E......-..-....-...-...-.....-.F..V.S..................................VCGIDIQRKGRNF...............---K..GSISLSLNT-...-...-.S.T...T....L.Y.....Y.TV..P...FR.....E..........S.......D....E...TN......IRN...kLLS.............................. [...]
+B7R785_9THEO/119-333   ............................................................................................d-IVIMTTT.vRNELI..YAKVKSL.LL...GN..-..GIPSQVVTA.E..K.LRNTKG................LPWILENIAL.......QIYAK..........IGGT.P.....WTV.M....SSS.P-........-......-..-....-...-...-.....K.G..E.L..................................VIGVSRAIDKRRN...............----..YIIGFITLFS..yD...G.D.Y...L....L.F.....Y.SL..A...PR.....P..........I.......E....W...QK......LDEyrnaLSQ.............................. [...]
+Q11QW7_CYTH3/390-605   .........................................................................................tlpv--------..-KKSP..YHTCKAK.LI...GS..-..GIPTQDIQV.V..N.LKNA--................NQFTINNIAL.......NIYAK..........IGGT.-.....AWT.I....EKE.DK........R......-..-....-...-...-.....M.E..E.L..................................VIGVGSSLSSDGK...............----..LVLGIAQIFH...S...D.G.R...Y....L.V.....G.DC..T...PL.....S..........T.......F....D...NY......AKN....LED.............................. [...]
+Q9L1X1_STRCO/365-661   ...............................................................................dsspylvaksafmg--------..-----..-------.--...--..Q..GVPVQEVRI.E..T.VRQSKL................-AYPLNSIAL.......ACYAK..........LGGI.-.....PFV.I....AAP.RT........L......-..-....-...-...-.....A.H..E.L..................................VIGIGSAHVKESR..............lTEPE..RVVGITTVFS..aD...G.N.Y...L....L.W.....N.TS..ReadYD.....D..........Y.......P....R...EL......LLS....LRD.............................. [...]
+D2M4C5_RHOPA/151-447   ...........................................................................................fd--------..DESNP..YYATKSV.FL...KR..-..DVPVQSVRL.E..T.MAQADS...............qLIFSMNHMSL.......ATYAK..........LGGT.-.....PWL.L....ASQ.QT........V......-..-....-...-...-.....A.H..E.L..................................VIGLGSHSVANSR..............iGSQQ..RFVGITTVFS...S...D.G.S...Y....L.L.....S.DR..T...AV.....V..........P.......Y....E...EY......ATA....LYD.............................. [...]
+A3VQY4_9PROT/445-745   ........................................................................................lpgpq--------..---NP..YYATKAM.LL...RN..-..NVAVQNVRI.E..T.MSEPDK...............sLVYTMNQVSL.......ACYAK..........LGGR.-.....PWL.L....AAQ.QS........V......-..-....-...-...-.....A.H..E.L..................................VIGLGSHTEQKSR..............fDQSV..RYVGITTVFS..sDggyH.L.S...E....R.T.....G.VV..L...FE.....D..........Y.......A....T...EL......TDT....LTR.............................. [...]
+C1F5Q7_ACIC5/440-735   .........................................................................................glpd--------..-ASNP..YYTTKAR.LM...AQ..-..GVPVQLLNI.E..T.IRRKSL................-DYILNNIGL.......AMYAK..........LGGI.-.....PWT.L....TQN.SD........M......-..-....-...-...-.....A.H..E.I..................................IVGIGSARLNESR..............rGAGE..RVIGITTVFS...G...D.G.Q...Y....L.L.....A.NN..T...QE.....V..........P.......S....E...EY......VDA....LTQ.............................. [...]
+B9MH92_ACIET/439-730   ...................................................................................apqknpylva--------..-----..-----KA.AF...LS..N..QIPTQFIAF.E..T.FSMAPA...............sLAYTLSNLAL.......AVYAK..........LGGI.-.....PWL.I....KSD.KG........I......-..-....-...-...-.....A.H..E.V..................................VIGLGSAAIGESR..............fSRKE..RIVGITSVFR...G...D.G.G...Y....L.L.....S.NL..S...NA.....V..........P.......M....S...KY......GEA....LTE.............................. [...]
+A5D4D9_PELTS/458-756   ...................................................................................qlfgnknpyl--------..-----..---VTKC.FF...LQ..Q..QVPVQEVEI.E..N.IVKDDR...............qLIYILNNISL.......ASYAK..........MGGT.-.....PWL.L....KAD.SP........I......-..-....-...-...-.....A.H..E.L..................................VFGLGSCQVSRSR..............lGSKE..RVVGITTVFT..gD...G.N.Y...L....L.-.....T.NK..S...AA.....V..........P.......F....K...EY......PKA....LLR.............................. [...]
+A0LL61_SYNFM/455-750   ................................................................................sqnpyfitkgsfl--------..-----..-------.--...-A..H..QIPVQEFEI.E..T.AQKNDR...............eLQYSLNNMAL.......ATYAK..........MNGI.-.....PWL.L....KAN.PT........I......-..-....-...-...-.....A.H..E.L..................................IIGLGSANIADGR..............lGDSE..RYVGITTVFS..gD...G.N.Y...H....L.T.....N.VS..-...-R.....A..........V.......T....I...DC......YQK...aFLE.............................. [...]
+D0BWJ3_9GAMM/401-693   ...................................................................................klkveenpyy--------..-----..---LGKS.LF...FM..H..QVPVQDFTI.E..L.LSQSDY...............nLSFSLNNMAL.......ACYAK..........MGGV.-.....PWL.L....KSS.PT........L......-..-....-...-...-.....S.H..E.L..................................VIGIGSANIGQER..............gINGQ..RVMGITTVFS...G...D.G.S...Y....I.V.....S.NT..S...KA.....V..........V.......P....K...AY......CEA....LTS.............................. [...]
+A4WYU7_RHOS5/454-756   .......................................................................................arlpdd--------..--RNP..YIHTKSL.LL...-T..L..GVPTQQVRM.P..T.VLLEPK...............sLQYTLQNFSI.......ATYAK..........LNGT.-.....PWT.V....NHD.KA........I......-..-....-...-...-.....N.D..E.L..................................VVGMGLAELSGSR..............tEKRQ..RFVGITTVFA...G...D.G.S...Y....L.L.....G.NV..S...KE.....C..........E.......Y....E...GY......SDA....IRE.............................. [...]
+B7K585_CYAP8/439-744   ...............................................................................aiviildehsnlpd--------..-SINP..YLHSKSL.LL...TH..-..GIPVQEIRY.S..N.IQKDKK...............sLQYILQNFSL.......AMYAK..........LTGQ.-.....PWT.V....DQD.QT........I......-..-....-...-...-.....S.D..E.L..................................VIGIGTSELSNSR..............fETRQ..RFVGITTVFR...G...D.G.N...Y....L.L.....S.SL..S...KE.....C..........S.......Y....D...EY......PDV....LRE.............................. [...]
+Q1PV30_9BACT/383-655   ..........................................................................................sde--------..EEEKT..YYEIKKL.LL...DK..-..GITSQFIAN.K..T.VRSGNF................-NYCLPNIAI.......AILAK..........LGGI.-.....PWK.L....NTK.K-........-......-..-....-...-...-.....Y.N..D.L..................................VIGYNYKKLQDQK...............----..-WIGSAVFFD..nE...G.R.L...G....R.I.....Y.GF..S...EE.....R..........A.......G....E...DL......ISH....---.............................. [...]
+D2QY15_PIRSD/353-529   ...........................................................................................dt-------E..DFSDQ..YYVTKHA.FL...KA..-..GLPSQFVST.K..T.IRNKAS................FKWTVSNIGM.......AVFAK..........LGGK.-.....PWK.V....VSE.--........-......-..-....-...-...N.....D.D..C.L..................................IVGIGQSHRCGED...............KTIS..RYYSYCVL--...T...D.S.S...G....L.Y.....E.DV..R...VL.....G..........K.......D....T...DE......RSY....LTR.............................. [...]
+D2QGL1_SPILD/333-520   .....................................................................................snideegv--------..---SD..TYYYLKY.HL...TK..L..GVPLQVLSH.E..K.INVEKT................LKWSTSNIGL.......ALFSK..........LGGI.-.....PWV.V....KPS.T-........-......-..-....-...-...-.....A.D..C.L..................................ILGIGSAHQSNAQ...............NEIE..RFFAYSV--C...V...D.S.S...G....L.Y.....K.KL..E...VL.....A..........D.......D....Q...SE......VSY....LDA.............................. [...]
+PIWI_ARCFU/110-406     ............................................................................................g-IMLVLPE..YNTPL..YYKLKSY.LI...NS..-..-IPSQFMRY.D..I.LSNRNL................-TFYVDNLLV.......QFVSK..........LGGK.-.....PWI.L....NVD.PE........K......-..-....-...-...-.....-.-..-.-..................................--GSDIIIGTGAT..............rIDNV..NLFCFAMVFK...K...D.G.T...M....L.W.....N.EI..S...PI.....V..........T.......S....S...EY......LTY....LKS.............................. [...]
+Q96Z85_SULTO/134-346   ..........................................................................aksqidsiyyrvkasflds--------..-----..-------.GL...EE..R..ATPTQIVTV.D..L.LKQRDEnk...........ntnYSWSLLPIAV.......QMFTK..........MGGI.P.....YAL.K....QSC.IN........I......-..-....G...S...E.....F.N..V.H..................................FIGLGLTSDPRNK...............---L..KRVGFVTIFN..dN...G.S.L...S....Y.M.....D.SN..I...LE.....D..........N.......K....T...ES......YGR...iIYN.............................. [...]
+O67434_AQUAE/419-694   ............................................................................................l-VIVFLEE.yPKVDP..YKSFLLY.DF...VK..R..ELLKKMIPS.Q..V.ILNRTLkn............enLKFVLLNVAE.......QVLAK..........TGNI.P.....YKL.K....EIE.GK........V......D..A....-...-...-.....-.-..-.-..................................FVGIDISRITRDG...............-KTV..NAVAFTKIFN..sK...G.E.L...V....R.Y.....Y.LT..S...YP.....A..........F.......G....E...KL......TEK....---.............................. [...]
+A3VPN8_9PROT/165-321   .......................................................................................afverd--------..EEDFD..LHDYLKA.VG...AS..M..GVSVQLIRS.D..K.ALDYHC................RASVMWRLSI.......ALYTK..........AGGV.P.....WVL.E....DIH.P-........-......-..-....-...-...-.....-.Q..T.A..................................FIGIDYAMRRVQD...............DGPR..FAICCAQVFD..aE...G.SgL...E....F.IaykadG.VS..V...YG.....D..........N.......P....Y...LN......HAQ....MLK.............................. [...]
+D1JFX3_9ARCH/159-437   ........................................................................................yfkfn--------..--YED..LRAHIKA.LC...VK..K..HVYTQILTK.T..S.FRPFDM................-SDNMWNLSL.......GLYVK..........AGGV.-.....PWK.L....ESG.E-........-......-..-....-...-...-.....E.N..T.C..................................FIGIAFGIKKGED...............-GQE..ILVGLAEVFD...V...F.G.E...S....V.T.....I.KV..V...ED.....E..........F.......K....S...EV......GLH....LSEek............................ [...]
+Q8U3D2_PYRFU/474-756   ..................................................................................lafiaarnkls--------..--SEK..FEEIKRR.LF...-N..L..NVISQVVNE.D..T.LKNKRDkyd.........rnrlDLFVRHNLLF.......QVLSK..........LGVK.-.....YYV.L....DYR.FN........Y......D..Y....-...-...-.....-.-..-.-..................................IIGIDVAPMKRSE...............---G..YIGGSAVMF-...-...D.S.Q...G....Y.I.....R.KI..V...PI.....K..........I.......G....E...QR......GESv..dMNE.............................. [...]
+D3S0S6_FERPL/490-768   .......................................................................................egedsf--------..----D..YYNPLKS.AL...FR..N..NILSQNFDV.T..N.YVRGDGkin..........kntIKYAVSNIIY.......NIFGK..........LGVK.-.....FFV.L....EED.VP........Y......D..Y....-...-...-.....-.-..-.-..................................ILGIDVGYGEAYT...............---G..KVAGCTTVHD..sE...G.R.L...R....N.L.....I.PI..E...KQ.....N..........Y.......P....S...KE......TAR....IKA.............................. [...]
+Y1321_METJA/426-699    .............................................................................................CFALIIGK.eKYKDN.dYYEILKK.QL...FD..L..KIISQNILW.E..N.WRKDDK................-GYMTNNLLI.......QIMGK..........LGIK.-.....YFI.L....DSK.TP........Y......D..Y....-...-...-.....-.-..-.-..................................IMGLDTGLGIFGN...............---H..RVGGCTVVYD..sE...G.K.I...R....R.I.....Q.PI..E...TP.....A..........P.......G....E...RL......HLP....---.............................. [...]
+C7P7E7_METFA/420-692   ............................................................................................g-FALIIGN.rYYEND..YYETLKM.QL...FN..L..NIISQNILW.E..N.WSKDDN................-NFMTNNLLI.......QIMGK..........LGIK.-.....YFA.L....DAK.VN........Y......D..Y....-...-...-.....-.-..-.-..................................IMGLDSGLGAFKS...............---N..RVSGCTVIYD..sE...G.K.I...R....R.I.....Q.PI..D...VP.....S..........P.......G....E...RI......PIH....---.............................. [...]
+B6YTQ5_THEON/463-751   ..........................................................................................lai---TLIPD..MRQEQ..FDKIKGF.FF...NN..-..GILHKAINI.N..N.LRDPSK...............dQKKLIESMIL.......QALYA..........FGIY.F.....YSL.D....NLN.Y-........-......-..-....-...-...-.....-.-..D.F..................................IIGLDVTREMDKS...............GRYY..GISGAAVVQN...K...N.G.Q...V....L.K.....I.IP..I...TS.....P..........Q.......S....S...SE......TAN....INY.............................. [...]
+D3S7P9_9EURY/531-824   ......................................................................licispklpnnefdelkshlfsy--------..-----..-------.QQ...TT..F..HQFMYPFNL.K..R.CLNDDD...............fKKPFINSILS.......QFFHK..........MGMY.-.....LFS.F....SEE.L-........-......-..-....-...-...G.....D.Y..D.F..................................IIGYDITKEKDEN...............DKIK..GIGGSAIIYN...S...H.G.H...V....I.T.....TvTF..E...DV.....H..........T.......S....S...EI......ARY....-EKlf............................ [...]
+B5IR12_9EURY/528-819   ..................................................................................dlelrefynwl--------..-----..----KKE.FY...DE.tK..PLVFQGARV.E..S.VFGMYK................-RYAVPNIVL.......QMAAK..........LGVY.P.....YSL.E....TSS.G-........Y......D..Y....-...-...-.....-.-..-.-..................................IIGIDYTYWHERD...............--AV..SVGGGAVVVS..pS...G.L.I...E....G.I.....Y.PI..A...IP.....S..........K.......R....E...SL......DMKe..iLQE.............................. [...]
+B4B3R2_9CHRO/1-219     ...............................................................................mgnlpfilaeplei--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.A..D.Y..................................FIGLDISRERKRN...............SRGS..NNACGSVRL-...-...-.Y.G...K....Q.G.....E.FI..Q...YQ.....L..........D.......D....Q...PI......EGE....--E.............................. [...]
+A0YYT3_9CYAN/471-752   .............................................................................tddtedgsfysfvssr--------..-----..-------.-L...LR..R..GISSQVIYE.D..T.LKNPNN................YSYILNQVIP.......GILAK..........LGNL.-.....PFI.L....AKP.LE........I......-..-....-...-...-.....-.A..D.Y..................................FIGLDISRTPKKR..............kSGSL..NVCASVR---...-...L.Y.G...K....Y.G.....E.FI..R...YR.....-..........-.......L....E...DA......LTQ....GEE.............................. [...]
+A8YDH3_MICAE/463-734   .....................................................................................nadnteeg--------..----S..LYSWIKK.KF...LE..R..RVMTQMIYE.K..T.LNDKSN................YKNILNQVVP.......GILAK..........LGNL.P.....YVL.A....ESL.E-........-......-..-....-...-...-.....I.A..D.Y..................................FIGLDVGRMPKKN..............lPGSL..NVCASVRLY-...-...G.K.Q...G....E.F.....V.RC..R...VE.....-..........-.......-....-...DS......LTE....GEE.............................. [...]
+B0JXD6_MICAN/462-734   ....................................................................................rnadnteeg--------..----S..LYSWIKR.KF...LG..R..GVITQMIYE.K..T.LNDKSN................YKNILNQVVP.......GILAK..........LGNL.P.....YVL.A....E-P.LE........-......-..-....-...-...-.....I.A..D.Y..................................FIGLDVGRMPKKN..............lPGSL..NVCASVRLY-...-...G.K.Q...G....E.F.....V.RC..R...VE.....-..........-.......-....-...DS......LTE....GEE.............................. [...]
+Q53W94_THET8/418-669   ....rnrlkalllreglpsqilnvplreeerhrwenallgllakaglqvvalsgaypaelavgfdaggresfrfggaacavggdgghllwtlp--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...EA.....Q..........A.......G....E...RI......PQE...vVWD.............................. [...]
+Q746M7_THET2/418-669   ....rnrlkalllreglpsqilnvplreeerhrwenallgllakaglqvvalsgaypaelavgfdaggresfrfggaacavggdgghllwtlp--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...EA.....Q..........A.......G....E...RI......PQE...vVWD.............................. [...]
+B1XJG0_SYNP2/307-599   ...........................................................................................ti---LVISE..WLDNK..YKTKLTR.DA...LE..H..GITLQFMLP.L..K.ENVR-RiesnkgveskitcftsDQYRANNILL.......GLLAK..........AGWQ.A.....VGL.P....LLN.NE........Y......-..-....-...-...-.....A.A..D.L..................................VIGFDAGRNETLS...............-YGT..SSFAVLADG-...-...-.-.-...Q....I.L.....G.WE..L...PE.....A..........Q.......K....G...EI......LDPd..hVRR.............................. [...]
+Q2JSR3_SYNJA/437-712   ...........................................................................................tv--LVVMPW..-SPNE..RKQRIRM.EA...LE..A..GIATQFMIP.G..A.------................DPYKALNVVL.......GLLCK..........AAWQ.P.....VLL.E....PLD.D-........-......P..V....-...-...-.....G.P..E.L..................................IIGFDVGTNRRLY...............----..-YGASAFAVL...A...D.G.Q...S....L.G.....W.EL..P...AV.....Q..........R.......G....E...TF......SGD...aIYQ.............................. [...]
+Q2JI93_SYNJB/454-728   ...................................................................................vlvvmplspn--------..-----..-------.-E...HK..Q..KIRLQALRA.G..I.ATQFMIp.............gaDPYKALNVVL.......GLLCK..........AAWQ.P.....VLL.E....PLD.H-........-......-..-....-...P...E.....C.S..E.L..................................TIGFDVGTNRELY...............-YGT..SAFAVLANG-...-...-.-.Q...S....L.G.....W.EL..P...DI.....Q..........R.......G....E...TF......SGE...aIYQ.............................. [...]
+Q8DKB1_THEEB/458-739   .................................................................................tvlvvmpwsphe--------..-----..EKTRLRI.QA...LK..A..GIATQFMIP.T..P.QDNP--................--YKALNVAL.......GLLCK..........AKWQ.P....vYLK.P....LDD.PQ........-......-..-....-...-...-.....A.A..D.L..................................IIGFDTSTNRRLY...............-YGT..SAFAILAN--...-...-.G.Q...S....L.G.....W.EL..P...DI.....Q..........R.......G....E...TF......SGQ...sIWQ.............................. [...]
+Q5MZ10_SYNP6/441-718   ............................................................................................t-VLVVMPW..DSHHD..-KQKIRI.QA...IQ..A..GIATQFMVPlP..K.AD----................-KYKALNVTL.......GLLCK..........AGWQ.P.....IQL.E....SVD.HP........-......-..-....-...-...E.....V.A..D.L..................................IIGFDTGTNRELY...............---Y..GTSAFAVLA-...-...D.G.Q...S....L.G.....W.EL..P...AV.....Q..........G.......G....E...TF......SGQ...aIWQ.............................. [...]
+Q31N05_SYNE7/441-718   ............................................................................................t-VLVVMPW..DSHHD..-KQKIRI.QA...IQ..A..GIATQFMVPlP..K.AD----................-KYKALNVTL.......GLLCK..........AGWQ.P.....IQL.E....SVD.HP........-......-..-....-...-...E.....V.A..D.L..................................IIGFDTGTNRELY...............---Y..GTSAFAVLA-...-...D.G.Q...S....L.G.....W.EL..P...AV.....Q..........R.......G....E...TF......SGQ...aIWQ.............................. [...]
+C1V6Q1_9EURY/608-882   ........................................................................................aaaad--------..-YDDP..YPEFKRR.LG...-Q..L..GVPSQMITI.D..N.LGND--................--SYLGNISS.......SLIGK..........AGGV.P.....WRI.D....DVP.GD........V......D..A....-...-...-.....-.-..-.-..................................FVGLDVTYDHATK...............---Q..HLGAAANVIM...A...D.G.T...I....L.A.....S.EA..V...TK.....Q..........A.......G....E...TF......DED...dVAN.............................. [...]
+B9LVW4_HALLT/464-658   .......................................................................................fsmges--------..SASDI..YHEMKKA.LR...QR..-..RVDSQMAHI.D..T.LATS--................--YALPNVAL.......GLVAA..........AGGI.P.....FTT.E....DAM.P-........-......-..-....-...-...G.....E.T..D.L..................................FIGIDVSHRYPRD..............tDERV..HIAASTTSIY...G...D.G.T...I....L.G.....Y.TS..A...KP.....Q..........T.......G....E...KV......PPK...eLKN.............................. [...]
+B0ADC8_9CLOT/432-721   ............................................................................................p-VLVILEK..ENIDK.yYETLKKI.FG...GR..N..NIPTQFVDL.D..T.IKKCDPkid.........nkrgKESIFLNILL.......GIYCK..........SGIQ.-.....PWV.L....ANG.LS........A......D..C....-...-...-.....-.-..-.-..................................YIGLDVCREN---...............--NM..STAGLIQVIG...K...D.G.R...V....LkS.....K.TI..S...SH.....Q..........S.......G....E...KI......QIN...iLKD.............................. [...]
+C6QUV9_9BACI/2-48      ............................................................................................c--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B7GJX9_ANOFW/423-692   ............................................................................................t-IVVIGTE..ENIER.aYMAIKKE.FG...AK..A..DIMTQFVIF.D..S.SIVN--................NSFYYYNVLL.......GIYAK..........SGVQ.-.....PWI.L....LDH.MN........S......D..C....-...-...-.....-.-..-.-..................................FIGLDVSHEQGKH...............----..-ASGIIQVIG...K...D.G.R...I....I.K.....Q.KS..V...MA.....T..........E.......A....G...ET......IARc..tMEE.............................. [...]
+Q3SD94_PARTE/460-750   ...........................................................................................qi-VVSILDR.hEDSKL..YNELKKF.LI...SV..Q..GVLHQNVSI.Q..T.VDSKKF................-SKIAQQIVK.......QVHSK..........IGKQ.-.....LWN.I....QKI.TE........I......-..-....-...-...S.....E.K..I.M..................................IIGIDVYHKTLAN...............--NK..SCVGFNAQFG...Q...Q.S.E...K....H.F.....T.KT..I...IV.....E..........K.......G....K...EL......NKG....VGQ.............................. [...]
+A0D4I7_PARTE/320-610   ...........................................................................................qi-VVSILDR.hEDSKL..YNELKKF.LI...SV..Q..GVLHQNVSI.Q..T.VDSKKF................-SKIAQQIVK.......QVHSK..........IGKQ.-.....LWN.I....QKI.TE........I......-..-....-...-...S.....E.K..I.M..................................IIGIDVYHKTLAN...............--NK..SCVGFNAQFG...Q...Q.S.E...K....H.F.....T.KT..I...IV.....E..........K.......G....K...EL......NKG....VGQ.............................. [...]
+Q3SD95_PARTE/471-760   ...........................................................................................lv--VSLIDQ.eKDKQI..YQQLKQY.LI...AE..E..GVSHQNVTL.Q..L.IENQKF................-GAIVPKIIQ.......QIHSK..........LGNQ.T.....WNI.Q....KIQ.E-........I......-..-....-...-...S.....D.N..I.M..................................IVGIDVYHKTVLG...............--LD..SCVGFNAQFG...Q...Q.G.Y...A....N.F.....T.KT..I...IV.....R..........K.......G....K...EI......NKD....VAM.............................. [...]
+A0CE33_PARTE/2-210     .........................................................................................keis--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....D.E..I.M..................................IIGIDVYHKTEKK...............--IN..SCVGFNAQFG..qQ...G.D.T...N....F.T.....-.KT..I...IV.....D..........Q.......G....K...EI......NKD....IAN.............................. [...]
+A0DEE4_PARTE/478-780   ............................................................................................s-LVVSLTD..KNRDTslYIGLKDF.LL...SQggA..GVIHQNVTT.K..S.CKNKNK................-QSIASKIAQ.......QISVK..........LGNP.-.....LWV.I....PKV.KG........I......-..-....-...-...S.....E.K..I.M..................................IIGMDIYHKLVTG...............--KQ..SCMGFVAHFD..lE...C.K.T...S....F.S.....K.TI..-...IM.....K..........S.......G....Q...EF......NQA....VGQ.............................. [...]
+Q3SE57_PARTE/478-788   ............................................................................................s-LVVSLTD..KNRDTslYIGLKDF.LL...SQggA..GVIHQNVTT.K..S.CKNKNK................-QSIASKIAQ.......QISVK..........LGNP.-.....LWV.I....PKV.KG........I......-..-....-...-...S.....E.K..I.M..................................IIGMDIYHKLVTG...............--KQ..SCMGFVAHFD..lE...C.K.T...S....F.S.....K.TI..-...IM.....K..........S.......G....Q...EF......NQA....VGQ.............................. [...]
+Q3SE52_PARTE/466-770   ............................................................................................l-IVTFVNE.rDKDRI..YGHIKKY.CF...QD..Q..GISHQNILS.K..F.LKTKNP................-SSVASKIAQ.......QMSMK..........LGNP.-.....LWA.I....PKP.NG........I......-..-....-...-...S.....D.K..T.M..................................VVGIDIYHKLLTN...............--RK..SCMGFVAYLE...S...E.C.L...N....T.F.....A.KP..I...IM.....R..........E.......G....Q...EM......SQE....VGR.............................. [...]
+Q3SE58_PARTE/466-770   ............................................................................................l-IVTFINE..KDKDR.iYGQMKKY.CF...QE..H..GISHQNILS.K..F.LKSKNP................-SSVASKIAQ.......QMSMK..........LGNP.-.....LWA.I....PKP.NG........I......-..-....-...-...S.....D.K..T.M..................................VIGIDIYHKLLTN...............--RR..SCMGFVAYLE...S...E.C.L...N....T.F.....A.RP..I...IM.....K..........E.......G....Q...EM......CHE....VGR.............................. [...]
+A0CB11_PARTE/463-767   ............................................................................................l-IVTFINE..KDKDR.iYGQMKKY.CF...QE..H..GISHQNILS.K..F.LKSKNP................-SSVASKIAQ.......QMSMK..........LGNP.-.....LWA.I....PKP.NG........I......-..-....-...-...S.....D.K..T.M..................................VIGIDIYHKLLTN...............--RR..SCMGFVAYLE...S...E.C.L...N....T.F.....A.RP..I...IM.....K..........E.......G....Q...EM......CHE....VGR.............................. [...]
+A4ZYY5_TETTH/495-793   ......................................................................................qfivtfs------NA.eKNPSL..YREMKKF.FS...SEggV..GIESQHVTP.R..A.LQKN--................GKSVASKIAL.......QIASK..........LGKR.-.....IWS.V....ETP.VG........I......-..-....-...-...N.....Q.N..T.M..................................IVGIETSMKKIRN...............---Q..QVIGVVASIN...K...D.F.N...K....F.Y.....S.QV..D...FR.....N..........G.......-....N...DI......KLP...tLSK.............................. [...]
+A4VE06_TETTH/14-183    ................................................................................lslrllpkpyrli--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+A4VE05_TETTH/347-645   ...........................................vndesaqnkdktsvnfkkgnqvtqllniilksimrdekfqeigknskfyd--------..-----..-------.--...--..-..---------.-..-.------................-----VNSKS.......DIIIK..........SRRI.-.....-WQ.V....ETP.TG........I......-..-....-...-...D.....K.N..T.M..................................IIGIETSMKKINK...............---Q..QVIGVVASID...K...D.F.T...K....Y.F.....S.DV..E...IR.....K..........E.......N....D...TT......FPT....LSK.............................. [...]
+Q6UE79_TETTH/497-791   ..........................................................................................qfv---LSFGQ..AQSGL..YSGLKKF.LT...SE..A..GIESQHVNP.R..S.LQKN--................GMSVASKIAL.......QIASK..........LGRR.-.....IWQ.V....ETP.TG........I......-..-....-...-...D.....K.N..T.M..................................IIGIETSMKKIKQ...............---Q..QVVGVVASID...K...D.F.T...K....Y.F.....S.DV..E...IR.....K..........D.......N....D...TT......LPT....LSK.............................. [...]
+Q0GM58_TETTH/497-791   ..........................................................................................qfv---LSFGQ..AQSGL..YSGLKKF.LT...SE..A..GIESQHVNP.R..S.LQKN--................GMSVASKIAL.......QIASK..........LGRR.-.....IWQ.V....ETP.TG........I......-..-....-...-...D.....K.N..T.M..................................IIGIETSMKKIKQ...............---Q..QVVGVVASID...K...D.F.T...K....Y.F.....S.DV..E...IR.....K..........D.......N....D...TT......LPT....LSK.............................. [...]
+Q22NE2_TETTH/491-777   ............................................................................................s-FIVTFGD..LNTNF..YQQIKHF.FC...IL..A..NVESQHISP.Q..S.LKNKNK................-YKICLNIVL.......QILQK..........TGNQ.-.....IWN.V....EMP.MQ........I......T..-....S...Q...T.....I.N..T.M..................................IVGIETSRNIIKG...............---K..QIIAVVCSIN...R...N.F.S...R....Y.L.....S.QV..Y...FR.....E..........K.......G....C...KQ......LHQ....LQK.............................. [...]
+A8VSR3_TETTH/491-787   ............................................................................................s-FIVTFGD..LNTNF..YQQIKHF.FC...IL..A..NVESQHISP.Q..S.LKNKNK................-YKICLNIVL.......QILQK..........TGNQ.-.....IWN.V....EMP.MQ........I......T..-....S...Q...T.....I.N..T.M..................................IVGIETSRNIIKG...............---K..QIIAVVCSIN...R...N.F.S...R....Y.L.....S.QV..Y...FR.....E..........K.......G....C...KQ......LHQ....LQK.............................. [...]
+A4ZYY4_TETTH/474-761   ......................................................................................nfnhprq--------..--QTF..YQELKLY.LY...AT..V..AIEHQHFND.D..F.SCHKNK................-NAAISSLII.......QIASK..........LGYP.-.....LWQ.T....HIP.NQ........I......-..-....-...-...F.....N.K..T.M..................................IIAIAVEQKTLHL...............NKQQ..QMIAVVTTIS...K...D.F.T...Q....M.H.....S.EI..F...FN.....E..........I.......Q....N...GP......ISI....LSK.............................. [...]
+Q24HU6_TETTH/383-631   ......................................................................................nfnhprq--------..--QTF..YQELKLY.LY...AT..V..AIEHQHFND.D..F.SCHKNK................-NAAISSLII.......QIASK..........LGYP.-.....LWQ.T....HIP.NQ........I......-..-....-...-...F.....N.K..T.M..................................IIAIAVEQKTLHL...............NKQQ..QMIAVVTTIS...K...D.F.T...Q....M.H.....S.EI..F...FN.....E..........I.......Q....N...GP......ISI....LSK.............................. [...]
+Q0MRE2_TETTH/533-834   ...................................................................................ivaivapnkf--------..STVQN..YSKIKKL.CT...IT..Q..QIKSQYIRQ.Q..S.LDSKQS................-YNVCSAILS.......QMAAK..........CGTT.-.....LWV.V....NPP.NG........I......-..-....-...-...P.....D.N..T.M..................................IIGTSVQKVFING...............-QPQ..FVIGFVASQD...K...N.V.S...R....F.Y.....S.RA..T...FQ.....K..........L.......N....K...DN......IEK....IST.............................. [...]
+Q239A3_TETTH/603-904   ...................................................................................ivaivapnkf--------..STVQN..YSKIKKL.CT...IT..Q..QIKSQYIRQ.Q..S.LDSKQS................-YNVCSAILS.......QMAAK..........CGTT.-.....LWV.V....NPP.NG........I......-..-....-...-...P.....D.N..T.M..................................IIGTSVQKVFING...............-QPQ..FVIGFVASQD...K...N.V.S...R....F.Y.....S.RA..T...FQ.....K..........L.......N....K...DN......IEK....IST.............................. [...]
+A0CR14_PARTE/559-847   .............................................................................................MIVIVLNR..YMKNC..YAPLKKM.CM..sEK..F..GVLTQMVSS.D..S.ISKQKK...............gLFSIIQKLAI.......QMMDK..........VGNC.-.....LWT.V....QLP.QK........W......P..-....-...-...-.....D.N..I.M..................................IVSVIIE---KG-...............----..KFAGMLSSLD...K...T.Y.S...R....Y.Y.....S.QM..S...TK.....I..........V.......E....K...CL......IKD....IGD.............................. [...]
+Q3SE51_PARTE/572-860   .............................................................................................MIVIVLNR..YMKNC..YAPLKKM.CM..sEK..F..GVLTQMVSS.D..S.ISKQKK...............gLFSIIQKLAI.......QMMDK..........VGNC.-.....LWT.V....QLP.QK........W......P..-....-...-...-.....D.N..I.M..................................IVSVIIE---KG-...............----..KFAGMLSSLD...K...T.Y.S...R....Y.Y.....S.QM..S...TK.....I..........V.......E....K...CL......IKD....IGD.............................. [...]
+Q0Q5B1_9SPIT/472-767   ...........................................................................................av--VLLLPGqkGKCNL..YDEVKKY.LL...TD..V..PVPSQAVLT.G..T.IQKGKN................LRSIVNKILI.......QINVK..........IGGI.-.....PWA.V....DSL.PL........-......-..-....-...L...T.....K.P..S.M..................................ICGMDVFHSTSLG...............--KK..SVLALTASMN...Q...T.A.T...K....Y.W.....S.TN..V...IQ.....S..........E......lG....Q...EA......SHA....LNQ.............................. [...]
+Q8ISG8_STYLE/475-767   .....................................................................................vlllpgak--------..GKTSL..YDDIKRF.LL...AE..F..PVPSQVVLC.N..T.ISKGKN................LRSIVNKILI.......QITAK..........IGGI.-.....PWT.V....DAL.P-........-......-..-....F...M...D.....K.P..T.M..................................ICGMDVFHSTSLG...............--KK..SVLGLTASIN...V...S.A.T...K....Y.F.....S.SC..V...IQ....gE..........L.......G....L...EA......SHS....LQN.............................. [...]
+Q86CV7_STYLE/475-767   .....................................................................................vlllpgak--------..GKTSL..YDDIKRF.LL...AE..F..PVPSQVVLC.N..T.ISKGKN................PRSIVNKILI.......QITAK..........IGGI.-.....PWT.V....GAL.P-........-......-..-....F...M...D.....K.P..T.M..................................ICGMDVFHSTSLG...............--KK..SVLGLTASIN...V...S.A.T...K....Y.F.....S.SC..V...IQ....gE..........L.......G....L...EA......SHS....LQN.............................. [...]
+Q8MQL1_TETTH/444-756   ...........................................................................................ma--VFLLPG..KKKAGmyYDEIKRY.FT...NV..K..PIPTQVILA.S..T.AMKDKG................LRSVVNKLLM.......QICAK..........TGGV.-.....PWV.M....DNL.P-........-......-..-....F...Q...N.....L.P..T.M..................................VVGMDVFHNTPGK...............--KE..SIFGFVSTVD...R...N.F.S...K....Y.Y.....S.HS..H...VL.....P..........T.......G....Q...EI......TPF....LQQ.............................. [...]
+Q8MXZ9_TETTH/444-756   ...........................................................................................ma--VFLLPG..KKKAGmyYDEIKRY.FT...NV..K..PIPTQVILA.S..T.AMKDKG................LRSVVNKLLM.......QICAK..........TGGV.-.....PWV.M....DNL.P-........-......-..-....F...Q...N.....L.P..T.M..................................VVGMDVFHNTPGK...............--KE..SIFGFVSTVD...R...N.F.S...K....Y.Y.....S.HS..H...VL.....P..........T.......G....Q...EI......TPF....LQQ.............................. [...]
+Q23ND1_TETTH/444-756   ...........................................................................................ma--VFLLPG..KKKAGmyYDEIKRY.FT...NV..K..PIPTQVILA.S..T.AMKDKG................LRSVVNKLLM.......QICAK..........TGGV.-.....PWV.M....DNL.P-........-......-..-....F...Q...N.....L.P..T.M..................................VVGMDVFHNTPGK...............--KE..SIFGFVSTVD...R...N.F.S...K....Y.Y.....S.HS..H...VL.....P..........T.......G....Q...EI......TPF....LQQ.............................. [...]
+Q3SE50_PARTE/446-748   .....................................................................................llllilng------PK..KNAPL..YTDLKRY.LI...ND..C..PIASQVILS.S..T.LNQPKG...............kVKTICNKLLV.......QICAK..........VGGT.-.....PWG.I....SDL.P-........-......-..-....F...T...D.....Q.P..T.M..................................ICGMDVYHSTAKG...............--RK..SMLSFVSTED...E...F.F.S...K....Y.M.....T.QS..I...EM.....D..........S.......G....V...EF......SFS....LCP.............................. [...]
+Q3SE54_PARTE/446-748   .....................................................................................llllilng------PK..KNAPL..YTDIKRY.LI...ND..C..PIASQVILS.S..T.LNQPKG...............kVKTICNKLLV.......QICAK..........VGGT.-.....PWG.V....SEL.P-........-......-..-....F...T...D.....Q.P..T.M..................................ICGMDVYHSTGKA...............--KK..SMLSFVSTED...E...F.F.S...K....Y.M.....T.QS..I...EM.....E..........T.......G....V...EF......SFS....LCP.............................. [...]
+Q3SE55_PARTE/446-748   .....................................................................................llllilng------PK..KSAPL..YTDIKRY.LI...ND..C..PIASQVILS.S..T.LNQPKG...............kVKTICNKLLV.......QICAK..........VGGT.-.....PWG.V....SEL.P-........-......-..-....F...T...D.....Q.P..T.M..................................ICGMDVYHSTGKA...............--KK..SMLSFVSTED...E...F.F.S...K....Y.M.....T.QS..V...EM.....E..........T.......G....V...EF......SFS....LCP.............................. [...]
+Q3SE56_PARTE/450-741   ............................................................................................f-IIFLLPGqkKNSRL..YRCAKFI.SL...QK..I..ACPSQVVLE.D..T.LTKN--................TRSIVNKIMV.......QICAK..........LGGV.-.....PWA.I....DKL.P-........-......K..L....F...Q...Q.....Q.H..T.M..................................ICAAECYDRIHQI...............----..KHLAFCSTVD...K...N.M.T...K....Y.H.....S.QI..-...--.....L..........K.......G....A...DY......KGD...nLKK.............................. [...]
+Q3SE59_PARTE/450-741   ............................................................................................f-IIFLLPGqkKNSRL..YRCAKFI.SL...QK..I..GCPSQVVLE.D..T.LAKN--................TRSIVNKIMV.......QICAK..........LGGV.-.....PWA.I....DKL.P-........-......K..L....F...Q...Q.....Q.H..T.M..................................ICAAECYDRLHQI...............----..KHLAFCSTVD...K...N.M.T...K....Y.H.....S.QI..-...--.....L..........K.......G....A...DY......KGD...nLKK.............................. [...]
+Q9U5C9_PARCA/466-759   ............................................................................................f-LIFLLPGqkKKAKL..YKTAKKI.SM...QS..F..GCPSQVIIE.K..T.LQKN--................TRSIVNKILI.......QLNAK..........VGGI.-.....PWA.L....DGF.PQ........Q......-..-....F...Q...A.....K.P..T.M..................................ICGVDIFSKHGKK...............----..NQLAFCSTTD...K...Y.F.S...R....Y.Y.....S.QV..-...--.....I..........S.......S....G...EF......SIH....LQQ.............................. [...]
+Q3SE53_PARTE/460-752   ............................................................................................f-LLFLLPGqkKKARL..YKTAKKI.SM...QK..F..GCASQVVVE.K..T.LAKN--................TRSIVNKILI.......QLNAK..........VGGT.-.....PWA.I....DSL.P-........L......-..T....F...Q...N.....Q.P..T.M..................................ICGTDCFVKSGRK...............----..NQLAFCSTVD...R...N.L.S...R....Y.Y.....S.QV..V...T-.....-..........-.......S....G...EF......SQH....LQS.............................. [...]
+A0E0B0_PARTE/455-747   ............................................................................................f-LLFLLPGqkKKARL..YKTAKKI.SM...QK..F..GCASQVVVE.K..T.LAKN--................TRSIVNKILI.......QLNAK..........VGGT.-.....PWA.I....DSL.P-........-......T..T....F...Q...N.....Q.P..T.M..................................ICGTDCFVKSGRK...............----..NQLAFCSTVD...R...N.L.S...R....Y.Y.....S.QV..V...TS.....-..........-.......-....G...EF......SQH....LQQ.............................. [...]
+Q3SE49_PARTE/467-759   ............................................................................................f-LIFLLPGqkKKARL..YKACKVI.SM...AT..F..GCASQVIVE.K..T.LQRN--................TRSIVNKILI.......QLNAK..........IGGT.-.....PWA.L....DGM.P-........-......D..M....F...T...N.....Q.P..T.M..................................ICGVDIFTKAGRK...............----..SQLAFCSTIN...R...Q.F.S...R....Y.Y.....S.QV..-...--.....I..........T.......S....G...EF......CSH....LQL.............................. [...]
+A8VSS4_TETTH/479-774   ............................................................................................f-IVFILQGakGKGKN..YQYLKSF.LL...KE..K..PIPSQMILQ.G..T.IKSSKD...............gCQVICNKICN.......QICIK..........VGGI.P.....YII.K....DLP.F-........-......-..-....-...S...N.....L.P..T.M..................................LVGIDYIRKENQK...............----..SVYSFVASVD...S...T.F.C...K....F.F.....S.GA..Q...LL.....D..........A.......Q....D...QN......NKF....VDK.............................. [...]
+A4ZYY6_TETTH/491-831   .............................................................................tfaliimnselehyhf--------..-----..YKTCKQA.IT...VD..K..GICCSLIKA.S..T.LQQYVPtqqypq....ippgnsIEAFASRFLS.......QMQAK..........LGES.P.....WLM.Q....ELP.Y-........-......-..-....-...N...Q.....N.P..C.T..................................MIGFSVLRQRNAR...............---K..IIVAGAASIN...K...Q.Y.S...K....Y.L.....P.DY..R...VI.....S..........E.......V....S...TK......IK-....--Edgtleivelseq.................. [...]
+Q23AZ6_TETTH/491-831   .............................................................................tfaliimnselehyhf--------..-----..YKTCKQA.IT...VD..K..GICCSLIKA.S..T.LQQYVPtqqypq....ippgnsIEAFASRFLS.......QMQAK..........LGES.P.....WLM.Q....ELP.Y-........-......-..-....-...N...Q.....N.P..C.T..................................MIGFSVLRQRNAR...............---K..IIVAGAASIN...K...Q.Y.S...K....Y.L.....P.DY..R...VI.....S..........E.......V....S...TK......IK-....--Edgtleivelseq.................. [...]
+C5LD15_9ALVE/568-697   ............................................................................................l-VMLFTPV..KDCKR.vYQIFKQV.CT...VE..R..PCITQVVRS.E..T.MRKKTS................IVAIVTRIIM.......QISAK..........FLGP.-.....LWH.I....DLH.TS........L......T..P....M...M...N.....E.P..C.M..................................LVGIDTAVAKETR...............---R..AVLGFVCSLD...S...A.S.S...Q....Y.F.....S.KA..V...PL.....D..........-.......-....-...--......---....---.............................. [...]
+A2DPV7_TRIVA/501-794   ............................................................................................f-VICVVPD..TQKDR..YDSIKSV.LS...SD..L..GIPSQIAIE.G..S.L-NPKL................LMSVATNLVI.......QIGTK..........LNGA.-.....LVK.L....S-R.KS........I......-..S....A...E...M.....K.G..T.M..................................LIGLSIASGKGRD...............--PS..SYVSGVATTD...F...D.L.S...M....Y.H.....S.KS..F...GP.....H..........N.......E....K...II......PEN...fITD.............................. [...]
+C5LD15_9ALVE/718-952   ....................................................................................vsgttpsts--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..S...MK.....E..........R.......R....S...AG......VAR...aIKE.............................. [...]
+Q54HL3_DICDI/867-1166  ............................................................................................l-FIIILPE.nDHSFI..YKSIKNLsLL...RN..R..AVITQCIKS.S..K.IKDR--................LNLISKPIAS.......QIIAK..........MGKF.-.....PWS.I....D--.PT........I......-..-....F...S...Ni...pE.N..T.M..................................VIGIDVTHNPEIS...............---Y..SVAAFVASTN...N...C.H.T...Q....F.Y.....H.KI..N...IQ.....P..........F.......L....K...EI......LDSd..fIFT.............................. [...]
+Q7KWS3_DICDI/669-964   ............................................................................................f-FLIIIPQ..NNAEV..YKGIKMK.SL...IQ..F..RVLTQCIFS.R..T.FDKG--................-RPVSVKLKQ.......QVVAK..........LGLA.-.....PWG.L....GQD.IY........K......G..V....-...-...P.....K.K..T.M..................................VIGVDVGHNSDMK...............--GH..SVVGFVATID...D...K.F.Q...K....F.F.....S.RA..Y...AQ.....E.........rP.......G....K...EI......IHS....LED.............................. [...]
+Q54G64_DICDI/590-885   ............................................................................................f-FLMLIPQ..NQPEI..YKEIKRK.SL...VQ..F..KVLTQCIFP.R..T.FYKG--................-RSVTNKLKQ.......QVIAK..........LGYA.-.....PWG.L....NQQ.I-........F......N..G....V...I...P.....K.K..T.M..................................IIGIDVGHNSDMR...............--GH..SVVGFVATID...D...K.F.Q...K....Y.F.....S.RS..F...VQ.....K.........rP.......G....K...EI......IDS....LEE.............................. [...]
+D3B338_POLPA/992-1287  ............................................................................................f-FLCAIQQ..-KPDF..YNLIKKY.TL...IT..A..RVITQCILA.K..T.MDKDNI................-GSVVSKVIL.......QVIAK..........LGKD.-.....PWV.L....KNP.G-........Y......-..-....N...I...P.....E.H..T.M..................................VVGIDVGHNAATR...............--GK..SIVAITATLN...R...S.L.T...R....Y.F.....S.TA..I..iQQ.....T..........P.......G....K...DI......IDS....LQT.............................. [...]
+D3BMP8_POLPA/633-929   ............................................................................................f-FFCLIPF..GKADV..YAAIKKS.TL...TQ..F..KAITQCAYA.K..T.LGIT--................GMAVAKKILH.......QLIAK..........LGRS.P.....WSI.S....NPV.YK........M......-..-....-...-...P.....K.H..T.M..................................IVGIDVGHNSDQR...............--GK..SVVGFCASID..sE...Y.S.L...Y....H.T.....T.AI..V...QS.....T..........P.......G....K...EI......VES....LRP.............................. [...]
+Q1ZXG9_DICDI/1063-1281 ......................................................................................nqskiht--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................------------Q...............KDAR..SVAAFCATTN...N...A.F.T...N...cY.V.....S.AT..I...QK.....Q..........S.......S....K...EV......INS....LGA.............................. [...]
+Q86HF5_DICDI/896-1194  .............................................................................................FIVVVVNG..VKTDL..YNSIKRT.AI...LE..C..KVITQVLTV.K..T.ITNQKI................-SSIFSKITN.......QINAK..........IDIP.-.....PWT.L....KEN.SN........F......G..I....-...-...P.....N.Y..T.M..................................VVGIDVGHNTDKE...............--SR..SVAAFCASVN...H...S.F.T...N....F.F.....V.AC..S...IQ.....K..........Q......nT....K...EV......IHS....LGN.............................. [...]
+B7PDV6_IXOSC/541-835   ...........................................................................................la--LVILPN..NRKDR..YDMIKKH.AC...VD..L..GLQTQVLLS.R..T.IGNRKN................VRSVATKVAI.......QLNCK..........LGGQ.-.....AWC.L....EIP.L-........-......-..-....-...-...-.....A.S..T.M..................................VIGYDTYHDSSQR...............--GR..SAGAFVASLN...R...T.F.T...R....W.F.....S.RA..S...FH.....A..........S.......H....Q...EL......GNS....LAI.............................. [...]
+B7Q5I1_IXOSC/446-741   ............................................................................................l-LMTIFPN..NRKDR..YDSLKKV.AC...VD..M..GLHTQVMLG.R..T.ISNKKN................LKSVATKVAI.......QMNCK..........LGGE.-.....AWA.L....DIP.L-........-......-..-....-...-...-.....T.K..M.M..................................CVGYDTYHDSRQK...............--GL..SAGGFVASLN...R...T.L.T...R....W.Y.....S.RV..S...FH.....Q..........T.......H....Q...EL......GSA....LKT.............................. [...]
+C3XV23_BRAFL/67-195    ................................................................................lsnlcacfrfplr--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B5BUZ0_9ASCI/567-860   ............................................................................................m-ILSLMPS..NRKDR..YDGIKRL.CC...VD..I..PIPTQVVLT.K..T.LSKPQR................VMSIATKIAI.......QINCK..........LGGE.-.....AWA.A....HIP.L-........-......-..-....-...-...-.....K.G..T.M..................................VIGIDTYHDTARK...............--GQ..SVGGFVANIN...Q...E.Y.T...R....W.Y.....S.NT..T...FQ.....Q..........N.......S....T...EL......IDG....LKK.............................. [...]
+Q0H8V5_9CNID/70-239    ............................................................................................m-VVTILTT..NRKDR..YDAIKKL.CC...LE..K..PVPSQVIVG.R..T.ISKKQM................LMSVSTKIAI.......QLNCK..........LGGE.-.....AWA.L....EIP.L-........-......-..-....-...-...-.....K.K..T.M..................................VIGIDTYHDSSAK...............--GR..SVGGFVASVN...Q...T.L.T...K....Y.Y.....S.RV..S...FQ.....H..........T.......G....M...EF......IDA....LKT.............................. [...]
+A7RFC2_NEMVE/557-857   ............................................................................................i-VVTIVPS..NRKDR..YDSIKKL.CC...LE..K..GVPSQVVVS.R..T.LSKKQM................LMSVCTKIGI.......QLNCK..........LGGE.-.....AWA.V....DIP.L-........-......-..-....-...-...-.....K.N..L.M..................................IVGIDTYHDSSQK...............--GR..SVGGFVASLNkpcT...R.Q.R...E....Y.Y.....S.RC..T...FQ.....H..........S.......G....Q...EL......VDG....LKV.............................. [...]
+A7T755_NEMVE/2-70      ............................................................................................i-VVTIVPS..NRKDR..YDSIKKL.CC...LE..K..GVPSQVVVS.R..T.LSKKQM................LMSVCTKIGI.......QLNCK..........LGGE.-.....AWA.V....DIP.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+C3XV22_BRAFL/1831-1964 .........................................................................................ktqm--------..-RKDR..YDAIKKF.CC...VD..H..PVPSQVIVS.R..T.LNKKQM................LMSVATKIAM.......QLNCK..........LGGE.-.....LWA.V....EIP.L-........-......-..-....-...-...-.....K.S..M.M..................................VVGIDCYHDSATK...............--GQ..SIGGVIASMN...S...S.L.T...R....W.Y.....S.RC..T...FQ.....H..........S.......G....Q...EL......IDG....LKV.............................. [...]
+C3XV20_BRAFL/551-843   .............................................................................................MVVCIVSN..NRKDR..YDAIKKF.CC...VD..R..PVPSQVIVS.R..T.LSKKQM................LMSVCTKVAL.......QMNCK..........LGGE.-.....LWA.L....EIP.I-........-......-..-....-...-...-.....K.N..L.M..................................VVGINCYQDSLTK...............--GQ..SVGGVIASIN...S...S.L.T...R....W.Y.....S.RC..T...FQ.....R..........S.......S....Q...EL......IDG....LKV.............................. [...]
+Q6RSS9_PODCA/561-853   ............................................................................................i-VVCIVPN..NRKDR..YDVIKKL.CC...VE..R..PVPSQVVVS.R..T.LSKKQM................LMSVCTKIGI.......QLNCK..........LGGE.-.....VWA.V....DIP.L-........-......-..-....-...-...-.....K.N..V.M..................................VVGFDVYHDSATK...............--GK..SIGGFVASTN...R...Y.L.T...R....Y.Y.....S.RI..T...SQ.....T..........S.......H....Q...EI......CNQ....LKV.............................. [...]
+B2KTD9_9CNID/559-850   ............................................................................................i-VVCIVPN..NRKDR..YDAIKKI.TC...VE..N..PVPSQVVVS.R..T.LSKQQM................LMSVCTKIAI.......QLNCK..........LGGE.-.....VWA.T....EIP.V-........-......-..-....-...-...-.....K.K..L.M..................................VIGFDVYHDSMNK...............--GQ..SIGGFIASTN...D...S.L.T...R....Y.Y.....S.RI..T...KQ.....R..........S.......H....N...EI......CSQ....LKI.............................. [...]
+Q9GPA6_STRPU/114-407   ............................................................................................i-VVVILPT..NRKDR..YDAIKKT.CV...VT..H..PCPSQVIVS.R..T.LSKQQM................LMSVATKIAM.......QMNCK..........MGGD.-.....LWR.V....EIP.L-........-......-..-....-...-...-.....S.N..L.M..................................IIGIDSYHDSLTK...............--GR..SVLGFVASMN...K...S.Q.T...S....F.F.....S.SC..A...FQ.....H..........A.......Q....G...EF......GAN....LST.............................. [...]
+Q9GPA7_STRPU/547-808   ............................................................................................i-VVVILPT..NRKDR..YDAIKKT.CV...VT..H..PCPSQVIVS.R..T.LSKQQM................LMSVATKIAM.......QMNCK..........MGGD.-.....LWR.V....EIP.L-........-......-..-....-...-...-.....S.N..L.M..................................IIGIDSYHDSLTK...............--GR..SVLGFVASMN...K...S.Q.T...S....F.F.....S.SC..A...FQ.....H..........A.......Q....G...EF......GAN....LST.............................. [...]
+Q9GPA8_STRPU/547-840   ............................................................................................i-VVVILPT..NRKDR..YDAIKKT.CV...VT..H..PCPSQVIVS.R..T.LSKQQM................LMSVATKIAM.......QMNCK..........MGGD.-.....LWR.V....EIP.L-........-......-..-....-...-...-.....S.N..L.M..................................IIGIDSYHDSLTK...............--GR..SVLGFVASMN...K...S.Q.T...S....F.F.....S.SC..A...FQ.....H..........A.......Q....G...EF......GAN....LST.............................. [...]
+Q3ZUK2_PLADU/35-327    ............................................................................................l-VLCILPS..NKKDR..YDAIKKL.CC...IN..C..PVPSQMVLA.K..T.LSKAKM................LMSVATKIAI.......QINCK..........LGGE.-.....VWA.L....EIP.L-........-......-..-....-...-...-.....K.G..L.M..................................VVGVDSYHDSKQK...............--GR..SVGAFVASMN...Q...S.L.T...R....Y.Y.....S.RC..C...FQ.....H..........Q.......H....Q...EL......LDG....LRV.............................. [...]
+D1LXB5_SACKO/1-252     ...........................................................................................ml--------..-----..-------.--...--..-..---------.-..-.------................-MSVATKIAM.......QLNCK..........LGGE.-.....LWA.L....EIP.I-........-......-..-....-...-...-.....K.N..M.M..................................IVGIDCYHDSATK...............--GQ..SIGAFIASTN...R...T.I.T...R....F.Y.....S.RV..T...FQ.....H..........T.......G....Q...EL......IDG....LKV.............................. [...]
+PIWL1_CHICK/561-853    ............................................................................................i-VVCILSS..TRKDK..YDAIKKY.LC...TD..C..PIPSQCVVA.R..T.LSKPQT................ALAIVTKIAL.......QMNCK..........MGGE.-.....LWS.V....EIP.L-........-......-..-....-...-...-.....K.Q..L.M..................................IVGIDCYHDTLSG...............--KQ..SIAGFVASLN...E...K.M.T...R....W.F.....S.RC..V...VQ.....S..........R.......G....Q...EI......VDG....LKA.............................. [...]
+PIWL1_HUMAN/555-847    ............................................................................................i-VVCLLSS..NRKDK..YDAIKKY.LC...TD..C..PTPSQCVVA.R..T.LGKQQT................VMAIATKIAL.......QMNCK..........MGGE.-.....LWR.V....DIP.LK........L......-..-....-...-...-.....-.-..V.M..................................IVGIDCYHDMTAG...............--RR..SIAGFVASIN...E...G.M.T...R....W.F.....S.RC..I...FQ.....D..........R.......G....Q...EL......VDG....LKV.............................. [...]
+D2HWM8_AILME/555-847   ............................................................................................i-VVCLLSS..NRKDK..YDAIKKY.LC...TD..C..PTPSQCVVA.R..T.LGKQQT................VMAIATKIAL.......QMNCK..........MGGE.-.....LWR.V....DMP.LK........L......-..-....-...-...-.....-.-..A.M..................................IVGIDCYHDTTAG...............--RR..SIAGFVASIN...E...G.M.T...R....W.F.....S.RC..V...FQ.....D..........R.......G....Q...EL......VDG....LKV.............................. [...]
+PIWL1_MOUSE/556-848    ............................................................................................i-VVCLLSS..NRKDK..YDAIKKY.LC...TD..C..PTPSQCVVA.R..T.LGKQQT................VMAIATKIAL.......QMNCK..........MGGE.-.....LWR.V....DMP.LK........L......-..-....-...-...-.....-.-..A.M..................................IVGIDCYHDTTAG...............--RR..SIAGFVASIN...E...G.M.T...R....W.F.....S.RC..V...FQ.....D..........R.......G....Q...EL......VDG....LKV.............................. [...]
+D3ZTP9_RAT/556-848     ............................................................................................i-VVCLLSS..NRKDK..YDAIKKY.LC...TD..C..PTPSQCVVA.R..T.LGKQQT................VMAIATKIAL.......QMNCK..........MGGE.-.....LWR.V....DMP.LK........L......-..-....-...-...-.....-.-..A.M..................................IVGIDCYHDTTAG...............--RR..SIAGFVASIN...E...G.M.T...R....W.F.....S.RC..V...FQ.....D..........R.......G....Q...EL......VDG....LKV.............................. [...]
+PIWL1_DANRE/552-844    .............................................................................................MVVVILPT..NRKDK..YDCVKKY.LC...VD..C..PTPSQCVVS.R..T.ISKPQA................LMTVATKIAL.......QMNCK..........MGGE.-.....LWS.V....EIP.L-........-......-..-....-...-...-.....R.Q..L.M..................................IVGIDCYHDTAAG...............--KR..SIGAMVASLN...Q...G.M.S...R....W.F.....S.KC..V...LQ.....N..........R.......G....Q...EI......IDA....LKG.............................. [...]
+Q4T9Z1_TETNG/519-587   .............................................................................................MVVVILPT..NRKDK..YDSIKKY.LC...VD..C..PVPSQCVVA.Q..T.LSRPQT................LLNVATKIAL.......QMACK..........MGGE.-.....LWS.V....EIP.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+Q4T9Y6_TETNG/521-792   .............................................................................................MVVVILPT..NRKDK..YDSIKKY.LC...VD..C..PVPSQCVVA.Q..T.LSRPQT................LLNVATKIAL.......QMACK..........MGGE.-.....LWS.V....EIP.L-........-......-..-....-...-...-.....K.H..L.M..................................VVGIDCYHDISAG...............--KR..SVGALVASMN...Q...T.M.S...R....W.F.....S.RC..V...LQ.....Q..........K.......G....Q...EI......MDG....LKR.............................. [...]
+Q4T9Y9_TETNG/1-228     .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-MACK..........MGGE.-.....LWS.V....EIP.L-........-......-..-....-...-...-.....K.H..L.M..................................VVGIDCYHDISAG...............--KR..SIGALVASMN...Q...T.M.S...R....W.F.....S.RC..V...LQ.....Q..........K.......G....Q...EI......MDG....LKR.............................. [...]
+B9U223_ORYLA/549-841   .............................................................................................MVVVVLPS..NRKDK..YDSVKKY.LC...VD..C..PTPSQCVLS.R..T.LSRPQA................LMTVATKIAL.......QMSCK..........MGGE.-.....LWS.V....EIP.L-........-......-..-....-...-...-.....K.Q..L.M..................................IVGIDCYHDISAG...............--KR..SIGAMVASLN...Q...S.M.S...R....W.Y.....S.KC..V...LQ.....H..........K.......G....Q...EL......MDG....LKM.............................. [...]
+C3XV22_BRAFL/1173-1299 ........................................................................................lqapr--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.H...S....W.Y.....S.GC..T...FQ.....H..........S.......G....Q...EL......IDG....LKV.............................. [...]
+C3XV22_BRAFL/2983-3180 ............................................................saeaapkkkmqkkkkranqktstiklttepvpv--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B4DYF7_HUMAN/569-859   .............................................................................................MVICILPN..DDKRR..YDSIKRY.LC...TK..C..PIPSQCVVK.K..T.LEKVQA................-RTIVTKIAQ.......QMNCK..........MGGA.-.....LWK.V....ETD.V-........-......-..-....-...-...-.....Q.R..T.M..................................FVGIDCFHDIVNR...............--QK..SIAGFVASTN...A...E.L.T...K....W.Y.....S.QC..V...IQ.....K..........T.......G....E...EL......VKE....LEI.............................. [...]
+PIWL3_HUMAN/578-868    ............................................................................................k-VICILPN..DDKRR..YDSIKRY.LC...TK..C..PIPSQCVVK.K..T.LEKVQA................-RTIVTKIAQ.......QMNCK..........MGGA.-.....LWK.V....ETD.V-........-......-..-....-...-...-.....Q.R..T.M..................................FVGIDCFHDIVNR...............--QK..SIAGFVASTN...A...E.L.T...K....W.Y.....S.QC..V...IQ.....K..........T.......G....E...EL......VKE....LEI.............................. [...]
+PIWL4_HUMAN/546-838    ............................................................................................l-VMCILPS..NQKTY..YDSIKKY.LS...SD..C..PVPSQCVLA.R..T.LNKQGM................MMSIATKIAM.......QMTCK..........LGGE.-.....LWA.V....EIP.L-........-......-..-....-...-...-.....K.S..L.M..................................VVGIDVCKDALSK...............--DV..MVVGCVASVN...P...R.I.T...R....W.F.....S.RC..I...LQ.....R..........T.......M....T...DV......ADC....LKV.............................. [...]
+D2I3M6_AILME/487-786   ............................................................................................l-VMCILPS..NQKSY..YDCIKKY.LS...CV..F..PVPSQCVLA.R..T.LTRQGM................MMSIATKIAM.......QMACK..........LGGE.-.....LWA.V....EIP.L-........-......-..-....-...-...-.....K.S..L.M..................................VVGIDVCKHEFSK...............--GM..VVVGFVASIN...P...G.I.T...R....W.F.....S.RC..T...LQ.....R..........T.......T....T...DV......ADC....LKV.............................. [...]
+A6X965_MOUSE/3-172     ...........................................................................................pg--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+D3ZDI3_RAT/541-827     ............................................................................................l-VMCILPS..NQKNY..YDSIKRY.LS...SD..X..PTPVSCTLQ.D..A.LSKDVA................VVGFVASINS.......RITRR..........IKGL.-.....--L.P....SLS.QP........L......-..-....-...-...L.....K.S..L.M..................................VVGIDICRDALSK...............--DV..AVVGFVASIN...S...R.I.T...R....W.F.....S.RC..V...LQ.....R..........T.......A....A...DI......ADC....LKV.............................. [...]
+PIWL4_RAT/541-834      ............................................................................................l-VMCILPS..NQKNY..YDSIKRY.LS...SD..C..PVPSQCVLT.R..T.LNKQGM................MLSVATKIAM.......QMTCK..........LGGE.-.....LWA.V....EIP.L-........-......-..-....-...-...-.....K.S..L.M..................................VVGIDICRDALSK...............--DV..AVVGFVASIN...S...R.I.T...R....W.F.....S.RC..V...LQ.....R..........T.......A....A...DI......ADC....LKV.............................. [...]
+PIWL4_MOUSE/541-834    ............................................................................................l-VMCILPS..NQKNY..YDSIKKY.LS...SD..C..PVPSQCVLT.R..T.LNKQGT................MLSVATKIAM.......QMTCK..........LGGE.-.....LWS.V....EIP.L-........-......-..-....-...-...-.....K.S..L.M..................................VVGIDICRDALNK...............--NV..VVVGFVASIN...S...R.I.T...R....W.F.....S.RC..V...LQ.....R..........T.......A....A...DI......ADC....LKV.............................. [...]
+B9ZU53_9TURB/586-879   ...........................................................................................la--IVVLPD..NRADR..YNAIKRQ.CY...VE..T..PVPSQCVLN.R..T.LNNEKG................FMSVVSKLAL.......QINVK..........MGGE.-.....PWM.C....KLP.V-........-......-..-....-...-...D.....P.G..A.M..................................IIGMDVHHVGKGG...............-KGP..SQLGFVSSLN...V...E.L.T...R....F.Y.....S.RV..-...YN.....N..........E.......S....N...EI......SGT....IKV.............................. [...]
+C9E0T4_APIME/497-785   ............................................................................................l-IFCVVSN..NRADR..YSAIKKK.CT...HD..R..PVASQVFLA.K..N.LTNKGI................-RSIATKVAI.......QLNCK..........LGGA.-.....PWS.V....ELP.P-........-......-..-....-...-...-.....I.N..L.M..................................VVGYDVCHDPADK...............--SR..DFGAMVASLD...R...S.L.T...R....Y.Y.....S.AV..A...AH.....T..........T.......G....E...EL......SDE....FGE.............................. [...]
+C9E0T3_APIME/525-813   ............................................................................................l-IFCVVSN..NRADR..YSAIKKK.CT...HD..R..PVASQVFLA.K..N.LTNKGI................-RSIATKVAI.......QLNCK..........LGGA.-.....PWS.V....ELP.P-........-......-..-....-...-...-.....I.N..L.M..................................VVGYDVCHDPADK...............--SR..DFGAMVASLD...R...S.L.T...R....Y.Y.....S.AV..A...AH.....T..........T.......G....E...EL......SDE....FGE.............................. [...]
+A7LM14_BOMMO/414-612   .............................................................................................LILCVLAR..NYADR..YEAIKKK.CT...VD..R..AVPTQVVCA.R..N.MSSKSA................-MSIATKVAI.......QINCK..........LGGS.-.....PWT.V....DIP.L-........-......-..-....-...-...-.....P.S..L.M..................................VVGYDVCHDTRSK...............--EK..SFGAFVATLD...K...Q.M.T...Q....Y.Y.....S.IV..N...AH.....T..........S.......G....E...EL......SSH....MGF.............................. [...]
+A8D8P8_BOMMO/594-885   .............................................................................................LILCVLAR..NYADR..YEAIKKK.CT...VD..R..AVPTQVVCA.R..N.MSSKSA................-MSIATKVAI.......QINCK..........LGGS.-.....PWT.V....DIP.L-........-......-..-....-...-...-.....P.S..L.M..................................VVGYDVCHDTRSK...............--EK..SFGAFVATLD...K...Q.M.T...Q....Y.Y.....S.IV..N...AH.....T..........S.......G....E...EL......SSH....MGF.............................. [...]
+Q7QG53_ANOGA/576-875   .............................................................................................MIMCVVSN..SKSDR..YTAIKKK.CC...VE..R..AIPTQIMVQ.K..T.ITPKSGnv............rtLMSVATKVVI.......QMNCK..........LGGV.-.....PWK.V....KIP.L-........-......-..-....-...-...-.....N.G..L.M..................................TIGFDVCHDSKDK...............--SK..SFGAMVATLD...H...D.N.RgtpK....F.F.....S.TV..S...HH.....S..........S.......G....E...EI......SNY....LPL.............................. [...]
+Q16IF2_AEDAE/569-868   .............................................................................................LIMCVVTN..QKADR..YTAIKKK.CC...VD..R..AVPTQVICQ.K..T.ITPKGGnv............rtLMSVATKVVI.......QMNCK..........LGGV.-.....PWK.V....KIP.L-........-......-..-....-...-...-.....S.G..M.M..................................TIGFDVCHDTNDK...............--SK..SYGAMVATFD...H...D.N.RgtpK....F.F.....S.TV..S...QH.....R..........H.......G....E...EI......CNY....LPL.............................. [...]
+Q16ZS2_AEDAE/361-660   .............................................................................................LIMCVVTN..QKADR..YTAIKKK.CC...VD..R..AVPTQVICQ.K..T.ITPKGGnv............rtLMSVATKVVI.......QMNCK..........LGGV.-.....PWK.V....KIP.L-........-......-..-....-...-...-.....S.G..M.M..................................TIGFDVCHDTNDK...............--SK..SYGAMVATFD...H...D.N.RgtpK....F.F.....S.TV..S...QH.....R..........H.......G....E...EI......CNY....LPL.............................. [...]
+Q16ZS3_AEDAE/562-861   .............................................................................................LIMCVVTN..QKADR..YTAIKKK.CC...VD..R..AVPTQVICQ.K..T.ITPKGGnv............rtLMSVATKVVI.......QMNCK..........LGGV.-.....PWK.V....KIP.L-........-......-..-....-...-...-.....N.G..L.M..................................TVGFDVCHDTNDK...............--SK..SYGAMVATFD...H...D.N.RgtpK....F.F.....S.TV..S...QH.....G..........H.......G....E...EI......CNY....LPL.............................. [...]
+Q171B3_AEDAE/547-846   ............................................................................................l-VMCVVTN..NKADR..YTAIKKK.CC...VD..R..AIPTQVMVQ.K..T.ITPKGGnv............rtLMSVATKVVI.......QMNCK..........LGGV.-.....PWK.V....KIP.L-........-......-..-....-...-...-.....N.G..L.M..................................TIGFDVCHDGKDK...............--SK..SFGAMVATLDhdnK...G.T.P...K....F.F.....S.TV..S...QH.....T..........H.......G....E...EI......SNY....LPI.............................. [...]
+B0W5T4_CULQU/546-845   .............................................................................................LIMCVVTN..NKADR..YTAIKKK.CC...VD..R..AIPTQVMVQ.K..T.ITPKGGnv............rtLMSVATKVVI.......QMNCK..........LGGV.-.....PWK.V....KIP.L-........-......-..-....-...-...-.....N.G..L.M..................................TIGFDVCHDAKDK...............--SK..SFGAMVATLDhdnK...G.T.P...K....F.F.....S.TV..S...QH.....T..........H.......G....E...EI......SNY....LPI.............................. [...]
+B0W5T3_CULQU/510-809   .............................................................................................MIMCVVSN..NKADR..YTAIKKK.CC...VD..R..AIPTQVMVQ.R..T.ITPKGGnv............rtLMSVATKVVI.......QMNCK..........LGGV.-.....PWK.V....KIP.L-........-......-..-....-...-...-.....S.G..L.M..................................TVGFDVCHDTKDK...............--SK..SFGAMVATFDyenK...G.V.P...K....Y.F.....S.TV..S...QH.....T..........H.......G....E...EI......SNY....LPL.............................. [...]
+B0W5P0_CULQU/552-851   .............................................................................................MIMCVVSN..NKADR..YTAIKKK.CC...VD..R..AIPTQVMVQ.R..T.ITPKGGnv............rtLMSVATKVVI.......QMNCK..........LGGV.-.....PWK.V....KIP.L-........-......-..-....-...-...-.....S.G..L.M..................................TVGFDVCHDTKDK...............--SK..SFGAMVATFDyenK...G.V.P...K....Y.F.....S.TV..S...QH.....T..........H.......G....E...EI......SNY....LPL.............................. [...]
+Q5TW24_ANOGA/530-829   ............................................................................................l-VMCIVPN..DRADR..YKAIKKK.CC...VD..R..PLPCQVIKA.R..T.ITPKNQnl............raLLTIATKVMI.......QLNCK..........LGGI.-.....PWI.V....KNP.L-........-......-..-....-...-...-.....S.S..V.M..................................VVGFDVCHDASDK...............--SL..SYGALVATMYa.aK...HiE.P...K....Y.F.....S.VI..E...RH.....Q..........R.......G....E...EL......SSF....LSS.............................. [...]
+Q16JS1_AEDAE/576-874   .............................................................................................LIMCLVTN..DKADR..YSAIKKK.CC...VD..R..AVPTQVLKT.R..T.ITPKGGnv............rtLMSVATKVAI.......QMNCK..........LGGI.-.....PWV.I....KSP.L-........-......-..-....-...-...-.....A.S..V.M..................................VIGYDVCKDSKDR...............--SK..GYGALVASMYgggV...K.H.P...K....Y.Y.....S.TV..N...QH.....A..........Y.......G....E...EL......SNY....LAL.............................. [...]
+Q176R2_AEDAE/633-931   .............................................................................................MIMCVVTN..DKADR..YAAIKKK.CC...VD..R..AVATQVIKT.R..T.ITPKGGnv............rtLMSVATKVAI.......QVNCK..........LGGI.-.....PWI.L....KNP.L-........-......-..-....-...-...-.....S.S..I.M..................................VIGFDVCHDTRDK...............--SK..SYGALVASMYgagC...R.H.P...K....Y.F.....S.TV..N...HH.....S..........N.......G....E...EL......SNF....MAQ.............................. [...]
+B0XE75_CULQU/501-788   .............................................................................................MIFCVVSN..DKADR..YAAIKKK.TC...VE..R..AIPTQVIKA.R..T.ITPKGGnv............rtLMSVATKVAI.......QMNCK..........LGGI.-.....PWV.L....RNP.L-........-......-..-....-...-...-.....T.S..V.M..................................VIGFDVCHDTRDK...............----..-----SKSYG...Q...K.H.P...K....F.F.....S.TV..N...HH.....S..........S.......G....E...EL......SNF....MAQ.............................. [...]
+Q16JS2_AEDAE/571-869   ............................................................................................l-VMCLVSN..DKADR..YAAIKKK.SC...VD..R..AVATQVIKA.R..T.ITPKGGnv............rtLMSVATKVAI.......QLNCK..........LGGI.-.....PWV.L....KNP.L-........-......-..-....-...-...-.....T.S..V.M..................................VIGFDVCHDTRDK...............--SK..SFGAMVASMYgggC...K.H.P...K....F.F.....S.TV..N...PH.....T..........S.......G....E...EL......SNF....MAQ.............................. [...]
+B0XE74_CULQU/592-891   .............................................................................................LIMCIVTN..DKVDR..YAAIKKK.CC...VD..R..AVPTQVIKC.K..T.ITPKGGnp............rtLMSVATKVAI.......QLNCK..........LGGI.-.....PWI.V....KSP.L-........-......-..-....-...-...-.....L.S..V.M..................................CLGFDVCRDTKDR...............--NK..TYGALVAAMY...H...G.K.H...RyhpnF.Y.....S.TV..N...QH.....A..........N.......G....A...EL......SDS....LAL.............................. [...]
+B0WYL9_CULQU/560-857   .............................................................................................LIMCVVTD..DKADR..YAAIKKK.CC...VN..R..AIPTQVIKS.R..T.ITPRHGn..............mMLSVATKVAI.......QLNSK..........LGGI.-.....PWV.V....KVL.M-........-......-..-....-...-...-.....E.S..V.M..................................CVGFDVCRDTKDK...............--NI..CYGALVAAMN...H...G.K.H...R....Q.H.....S.EF..Y...ST.....V..........N.......Q....H...SY......GAD....LSDsl............................ [...]
+B4P152_DROYA/546-844   ...........................................................................................qi-VMVVMRS..QNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.R..V.IAPRQEks............agLMSIATKVVI.......QMNAK..........LMGA.-.....PWM.I....DLP.L-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSSKDK...............--NK..SYGALVATMD..qR...E.S.S...R....Y.F.....S.TV..T...EH.....M..........K.......G....Q...EL......SEH....MSL.............................. [...]
+B3N4Z9_DROER/546-844   ...........................................................................................qi-VMVVMRS..PNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.K..V.IAPRQEka............tgLMSIATKVVI.......QMNAK..........LMGA.-.....PWM.I....SLP.L-........-......-..-....-...-...-.....H.G..L.M..................................TVGFDVCHSSKDK...............--NK..SYGALVATMD..qK...E.S.N...R....Y.F.....S.SV..N...EH.....M..........K.......G....Q...EL......SEH....MSL.............................. [...]
+Q95PE5_DROME/1-176     .............................................................................................--------..-----..YSCIKKR.TC...VD..R..PVPSQVVTL.K..V.IAPRQQkp............tgLMSIATKVVI.......QMNAK..........LMGA.-.....PWQ.V....VIP.L-........-......-..-....-...-...-.....H.G..L.M..................................TVGFDVCHSPKNK...............--NK..SYGAFVATMD..qK...E.S.F...R....Y.F.....S.TV..N...EH.....I..........K.......G....Q...EL......SEQ....MSV.............................. [...]
+A8DYZ0_DROME/483-781   ...........................................................................................qi-VMVVMRS..PNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.K..V.IAPRQQkp............tgLMSIATKVVI.......QMNAK..........LMGA.-.....PWQ.V....VIP.L-........-......-..-....-...-...-.....H.G..L.M..................................TVGFDVCHSPKNK...............--NK..SYGAFVATMD..qK...E.S.F...R....Y.F.....S.TV..N...EH.....I..........K.......G....Q...EL......SEQ....MSV.............................. [...]
+O76922_DROME/554-852   ...........................................................................................qi-VMVVMRS..PNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.K..V.IAPRQQkp............tgLMSIATKVVI.......QMNAK..........LMGA.-.....PWQ.V....VIP.L-........-......-..-....-...-...-.....H.G..L.M..................................TVGFDVCHSPKNK...............--NK..SYGAFVATMD..qK...E.S.F...R....Y.F.....S.TV..N...EH.....I..........K.......G....Q...EL......SEQ....MSV.............................. [...]
+B4Q9X4_DROSI/545-843   ...........................................................................................qi-VMVVIRT..PNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.K..V.IAPRQQkp............agLSSIATKVVI.......QMNAK..........LMGA.-.....PWK.I....EIP.L-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSPKNK...............--NK..SYGALVATMD..qK...E.S.F...R....Y.F.....S.TV..N...EH.....S..........K.......G....Q...EL......SEQ....MSL.............................. [...]
+B4HWZ3_DROSE/549-847   ...........................................................................................qi-VMVVIRT..PNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.K..V.IAPRQQks............agLSSVATKVVI.......QMNAK..........LMGA.-.....PWK.I....EIP.L-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSPKNK...............--NK..SYGALVATMD..qK...E.S.F...R....Y.F.....S.TV..N...EH.....T..........K.......G....Q...EL......SEQ....MSL.............................. [...]
+B4LV39_DROVI/546-843   ............................................................................................i-IMLVMKS..PNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.R..T.IAPRPEks............ggLMSIATKVVI.......QMNAK..........LMGA.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....K.G..L.M..................................TVGFDVCHSSKNK...............--NK..SYGALVASLD..mK...Y.S.E...R....Y.Y.....S.SV..T...EH.....M..........K.......G....Q...EL......SDQ....MSL.............................. [...]
+B4KHC1_DROMO/539-836   ............................................................................................i-IMLVLKT..NNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.R..T.IAPRPEra............sgLMSVATKVVI.......QMNAK..........LMGA.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSSKNK...............--NK..SYGALVATMD..mK...S.S.T...R....Y.F.....S.SV..S...EH.....M..........K.......G....Q...EL......SDQ....MSL.............................. [...]
+B4JBE4_DROGR/542-839   ............................................................................................i-IMLVLRS..PNEEK..YSCIKKR.AC...VD..R..PVPSQVVTL.R..T.IAPRPDra............sgLMSIATKVVI.......QMNAK..........IMGA.-.....PWI.I....ELP.L-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSSKDK...............--NK..SYGALVATMD..mK...L.S.T...R....Y.Y.....S.SV..T...EH.....L..........K.......G....Q...EL......SNQ....MSV.............................. [...]
+B4MUA1_DROWI/563-860   ............................................................................................i-VMLVLKT..PNEEK..YSCIKKR.AC...VD..R..PVPSQVVTL.K..T.IAPRQEra............ggLMSIATKVVI.......QMNAK..........LMGA.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSPKSK...............--NK..SYGALVATMD..mK...E.S.Q...R....Y.Y.....S.SV..T...EH.....M..........K.......G....Q...EL......SNQ....MSM.............................. [...]
+B4N6U3_DROWI/34-103    ...........................................................................................nh--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B4MUA0_DROWI/539-836   ............................................................................................i-VMLVLKT..PNEEK..YSCIKKR.AC...VD..R..PVPSQVVTL.K..T.IAPRQEra............ggLMSIATKVVI.......QMNAK..........LMGA.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSPKSK...............--NK..SYGALVATMD..mK...E.S.Q...R....Y.Y.....S.SV..T...EH.....M..........K.......G....Q...EL......SNQ....MSM.............................. [...]
+B3MJZ7_DROAN/562-859   ............................................................................................i-VMLVLKA..PNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.K..T.IAPRQEks............agLMSIATKVVI.......QMNAK..........LMGA.-.....PWM.I....ELP.V-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSSKNK...............--NK..SYGALVATMD..mK...T.S.T...R....Y.F.....S.SV..T...EH.....M..........K.......G....Q...EL......SDQ....MSM.............................. [...]
+B4G765_DROPE/541-838   ............................................................................................i-IMLVLKA..PNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.K..T.IAPRKEks............agLMSIATKVVI.......QMNAK..........LMGA.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSSKNK...............--NK..SYGALVATMD..mK...S.S.N...R....Y.F.....S.SV..N...EH.....M..........K.......G....Q...EL......SDQ....MSM.............................. [...]
+Q29P29_DROPS/540-837   ............................................................................................i-IMLVLKA..PNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.K..T.IAPRKEks............agLMSIATKVVI.......QMNAK..........LMGA.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSSKNK...............--NK..SYGALVATMD..mK...L.S.N...R....Y.F.....S.SV..N...EH.....M..........K.......G....Q...EL......SEQ....MSM.............................. [...]
+B4JBE1_DROGR/574-864   ............................................................................................l-VLCIVPS..NNVER..YSSIKKR.GC...VD..R..SVPTQVVTT.R..A.NQK---................GMSVATKIAI.......QINCK..........LGYT.-.....PWM.I....AVP.M-........-......-..-....-...-...-.....A.G..L.M..................................TMGFDIAKCTRDR...............--NK..AYGALVASMD..lQ...R.N.A...T....F.F.....S.TV..-...AE.....C..........S.......A....Y...DV......LAN...nLWP.............................. [...]
+B4KHB7_DROMO/577-867   .............................................................................................LILCFVPS..DSPER..YSAIKKR.GC...VD..R..AVPTQVVTK.R..C.-NKN--................GLSVATKIAI.......QMNCK..........IGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TMGFDIAKCSSNR...............--NK..AYGALVASMD..lQ...R.N.A...T....F.F.....S.TV..-...AE.....C..........S.......A....Y...DV......LAN...nLWP.............................. [...]
+B4LV36_DROVI/558-849   ............................................................................................l-ILCFFAR..NNPER..YAAIKKR.GY...VD..R..AIPTQVVTT.N..A.NRNG--................-LSVATKIAI.......QINCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKCSRNR...............--SK..AYGALVASMD..lQ...Q.N.S...T....F.F.....S.TV..-...AE.....C..........S.......A....Y...DV......LAN...nLWP.............................. [...]
+B4G753_DROPE/334-531   ............................................................................................l-ILCLVPN..NNVER..YSSIKKR.GC...VD..R..AVPTQVVTI.K..T.SKNRGL................-LSIATKIAI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSARDR...............--RK..AYGALVASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...SE.....C..........S.......A....F...DV......LAN...nLWP.............................. [...]
+Q29CN1_DROPS/543-834   ............................................................................................l-ILCLVPN..NNVER..YSSIKKR.GC...VD..R..AVPTQVVTI.K..T.SKNRGL................-LSIATKIAI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSARDR...............--RK..AYGALVASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...SE.....C..........S.......A....F...DV......LAN...nLWP.............................. [...]
+B3N502_DROER/538-829   ............................................................................................l-ILCLVPN..DNVER..YSSIKKR.GY...VD..R..AVPTQVVTI.K..T.TKNRSL................-MSIATKIAI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSTRDR...............--KR..AYGALIASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...TE.....C..........S.......A....F...DV......LAN...tLWP.............................. [...]
+B4P149_DROYA/538-829   ............................................................................................l-ILCLVPN..DNAER..YSSIKKR.GY...VD..R..AVPTQVVTI.K..T.TKNRSL................-MSIATKIGI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSTRDR...............--KR..AYGALIASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...TE.....C..........S.......A....F...DV......LAN...tLWP.............................. [...]
+Q6NNZ4_DROME/552-843   ............................................................................................l-ILCLVPN..DNAER..YSSIKKR.GY...VD..R..AVPTQVVTL.K..T.TKNRSL................-MSIATKIAI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSTRDR...............--KR..AYGALIASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...TE.....C..........S.......A....F...DV......LAN...tLWP.............................. [...]
+Q6NP34_DROME/566-857   ............................................................................................l-ILCLVPN..DNAER..YSSIKKR.GY...VD..R..AVPTQVVTL.K..T.TKNRSL................-MSIATKIAI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSTRDR...............--KR..AYGALIASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...TE.....C..........S.......A....F...DV......LAN...tLWP.............................. [...]
+C0PTU6_DROME/566-857   ............................................................................................l-ILCLVPN..DNAER..YSSIKKR.GY...VD..R..AVPTQVVTL.K..T.TKNRSL................-MSIATKIAI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSTRDR...............--KR..AYGALIASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...TE.....C..........S.......A....F...DV......LAN...tLWP.............................. [...]
+PIWI_DROME/538-829     ............................................................................................l-ILCLVPN..DNAER..YSSIKKR.GY...VD..R..AVPTQVVTL.K..T.TKNRSL................-MSIATKIAI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSTRDR...............--KR..AYGALIASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...TE.....C..........S.......A....F...DV......LAN...tLWP.............................. [...]
+B4Q9X1_DROSI/538-829   ............................................................................................l-ILCLVPN..DNVER..YSSIKKR.GY...VD..R..AVPTQVVTM.K..T.AKNRSL................-MSIATKIAI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSTRDR...............--KR..AYGALIASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...TE.....C..........S.......A....F...DV......LAN...tLWP.............................. [...]
+B4HWY9_DROSE/538-829   ............................................................................................l-ILCLVPN..DNAER..YSSIKKR.GY...VD..R..AVPTQVVTM.K..T.AKNRSL................-MSIATKIAI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSTRDR...............--KR..AYGALIASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...TE.....C..........S.......A....F...DV......LAN...tLWP.............................. [...]
+B3MJZ4_DROAN/563-854   ............................................................................................l-ILCLVPN..NNADR..YSAIKKR.GY...VD..R..AVPTQVVTI.K..T.AKNRGL................-MSIATKIAI.......QINCK..........LGYT.-.....PWM.V....EVP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSTRDR...............--KK..AYGALVASMD..lQ...Q.N.S...T....Y.F.....S.TV..S...EC.....S..........A.......F....D...SL......SNN....LWP.............................. [...]
+B4MU97_DROWI/591-882   ............................................................................................l-ILCLVPN..NNVER..YSSIKKI.GC...ID..K..GIPTQVVTS.K..T.VSNRSL................-MSIATKIAV.......QLNCK..........MGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TLGFDIAKSSRDR...............--SK..AFGALVASMD..lQ...E.N.S...T....Y.F.....S.TV..-...AE.....C..........S.......A....Y...DV......LAN...hLWP.............................. [...]
+A8XEN9_CAEBR/501-812   .............................................................................................MLVVMLAD..DNKTR..YDSLKKY.LC...VE..C..PIPNQCINL.R..T.LAGKSSdgg.........enknFGSIVLKIVL.......QMVCK..........TGGA.-.....LWR.V....NIP.M-........-......-..-....-...-...-.....Q.D..T.M..................................IVGYDLYHDSTLK...............--GK..TVGACVSTTS...S...E.F.T...K....F.Y.....S.QT..R...PH.....E..........N.......P....T...QL......GNN....LTH.............................. [...]
+Q17567_CAEEL/397-708   .............................................................................................MLVVMLAD..DNKTR..YDSLKKY.LC...VE..C..PIPNQCVNL.R..T.LAGKSKdgg.........enknLGSIVLKIVL.......QMICK..........TGGA.-.....LWK.V....NIP.L-........-......-..-....-...-...-.....K.S..T.M..................................IVGYDLYHDSTLK...............--GK..TVGACVSTTS...N...D.F.T...Q....F.Y.....S.QT..R...PH.....E..........N.......P....T...QL......GNN....LTH.............................. [...]
+P90786_CAEEL/499-810   .............................................................................................MLVVMLAD..DNKTR..YDSLKKF.LC...VE..C..PIPNQCVNL.R..T.LAGKSKdgg.........enknLGSIVLKIVL.......QMICK..........TGGA.-.....LWK.V....NIP.L-........-......-..-....-...-...-.....K.N..T.M..................................IVGYDLYHDSTLK...............--GK..TVGACVSTTS...N...D.F.T...Q....F.Y.....S.QT..R...PH.....E..........N.......P....T...QL......GNN....LTH.............................. [...]
+B9ZU52_9TURB/589-885   ............................................................................................l-VFCLLPS..NKKQR..YDSIKRL.CY...VN..K..PVPSQCVLT.K..T.IRNPAK................VMSVATKVAL.......QISCK..........LGDV.-.....AWA.V....SIP.M-........-......-..-....-...-...-.....R.R..T.M..................................IVGMDTYHDKRQS...............---V..SVQGIVFSLN...E...T.F.T...Q....Y.Y.....S.YS..P...IV.....K..........G.......G....K...AE......LHN...rLEV.............................. [...]
+B2Z3D6_SCHMD/665-960   ............................................................................................l-VVTILSA..VREDR..YNAIKKF.CY...VD..C..PVPSQVVLA.Q..T.LKEGPK................LNSVAVNIAL.......QINAK..........LGGE.-.....LWA.V....KIP.I-........-......-..-....-...-...-.....K.K..F.M..................................VVGLDVWHDTKGR...............--SR..SVGAVVGSTN...A...L.C.T...R....W.F.....S.KS..H...LQ.....E..........Q.......D....K...EI......MYV....LQS.............................. [...]
+D2Z0E0_DUGJA/657-952   ............................................................................................l-VVTILSA..VREDR..YNAIKKH.CY...VD..C..PVPSQVVLA.Q..T.LKEGPK................LNSVAVNIAL.......QINAK..........LGGE.-.....LWA.V....KIP.I-........-......-..-....-...-...-.....K.K..F.M..................................VVGLDVWHDAKGR...............--GR..SVGAVVGSTN...A...L.C.T...R....W.F.....S.KS..H...LQ.....E..........H.......D....K...EI......VYV....LQS.............................. [...]
+D2A2S9_TRICA/552-839   ...........................................................................................va--VFICPT..LRADR..YSIIKKM.CC...VN..I..PVASQVILS.K..T.LSNPQK................VRTIIHKIAM.......QITCK..........LGGT.-.....LWS.V....KIP.V-........-......-..-....-...-...-.....S.G..W.M..................................VCGIDVYHGANNQ...............----..SVCGFVASIN...G...S.M.T...K....Y.F.....S.KA..M...FQ.....D..........-.......-....G...EI......GDY....FKM.............................. [...]
+B4N2M0_DROWI/49-131    ........................................................................................fhlsg--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+A9ZSZ2_BOMMO/619-912   ............................................................................................q-LVVAICS.tKRDDR..YAAIKKV.CC...AD..N..PVPSQVINA.R..T.LMNTNK................IRSITQKILL.......QLNCK..........LGGT.-.....LWS.I....SIP.F-........-......-..-....-...-...-.....K.S..A.M..................................IVGIDSYHDPSRR...............--NR..SVCSFVASYN...Q...S.M.T...L....W.Y.....S.KV..I...FQ.....E..........K.......G....Q...EI......VDG....LKC.............................. [...]
+A7BJS3_BOMMO/619-912   ............................................................................................q-LVVAICS.tKRDDR..YAAIKKV.CC...AD..N..PVPSQVINA.R..T.LMNTNK................IRSITQKILL.......QLNCK..........LGGT.-.....LWS.I....SIP.F-........-......-..-....-...-...-.....K.S..A.M..................................IVGIDSYHDPSRR...............--NR..SVCSFVASYN...Q...S.M.T...L....W.Y.....S.KV..I...FQ.....E..........K.......G....Q...EI......VDG....LKC.............................. [...]
+A7LNN5_BOMMO/2-193     ...........................................................................................ls--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..A.M..................................IVGIDSYHDPSRR...............--NR..SVCSFVASYN...Q...S.M.T...L....W.Y.....S.KV..I...FQ.....E..........K.......G....Q...EI......VDG....LKC.............................. [...]
+B7QEM1_IXOSC/88-370    ............................................................................................v-IVLIFPT..SRDDR..YSAVKRL.CC...VD..M..PVPSQVIIS.N..T.IGQQQK................LRSVTQKVAL.......QINCK..........LGGE.-.....LWK.V....EIP.M-........-......-..-....-...-...-.....H.N..V.M..................................VIGIDVYHDITRG...............--RQ..SVMGFVASMN...Q...S.L.T...R....W.F.....S.KC..A...FQ.....E..........P.......G....K...EL......VNC....IKI.............................. [...]
+A7SQI3_NEMVE/441-733   ...........................................................................................qv-VVVIFPT..SRDDR..YAAVKKL.CC...VE..S..PVPSQVIIS.K..T.ISNPTK................LRSVVQKIAL.......QINVK..........LGGE.-.....LWA.L....DIP.S-........-......-..-....-...-...-.....R.S..L.M..................................VCGIDVYHDKARG...............--GR..SVGGLVCSMN...R...S.L.T...R....W.Y.....S.DV..C...FQ.....S..........P.......G....Q...EL......IDG....LKM.............................. [...]
+A7T7C9_NEMVE/1-180     ............................................................................................r--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.S..L.M..................................VCGIDVYHDKARG...............--GR..SVGGLVCSMN...R...S.L.T...R....W.Y.....S.DV..C...FQ.....S..........P.......G....Q...EL......IDG....LKMllikgirkwhdairkwhdvcyltmfvslsr [...]
+C3Z5S8_BRAFL/570-730   .............................................................................................MVVCIFPT..PRDDR..YSAIKKL.CC...VD..S..PVPSQVINA.K..T.IGSQQK................LRSVTQKIAL.......QINAK..........LGGE.-.....LWA.L....EIP.L-........-......-..-....-...-...-.....K.N..I.M..................................VVGIDVYHEIKKG...............--VR..SVAGFVASTN...R...E.L.T...R....W.Y.....S.RT..C...FQ.....M..........P.......G....Q...EL......MDG....LKL.............................. [...]
+B0FLQ9_STRPU/653-945   ............................................................................................l-VIAIFPT..SRDDR..YSAFKKL.CC...IE..A..PVPSQVING.R..T.ISQKQK................LRSVTQKIAL.......QINCK..........LGGE.-.....LWA.L....DVP.L-........-......-..-....-...-...-.....S.K..L.M..................................VIGIDVYHDPNRG...............--KK..SIGAFVASMN...R...D.L.T...S....W.F.....S.RV..C...IQ.....T..........P.......H....Q...EL......IGG....LKL.............................. [...]
+PIWL2_XENTR/644-935    ............................................................................................l-LVCLISG..TRDDL..YGAIKKL.CC...VQ..N..PVPSQVINT.R..T.ISQPQK................LRSIAQKILL.......QINCK..........LGGE.-.....LWG.V....DIP.L-........-......-..-....-...-...-.....K.S..V.M..................................VIGMDVYHDPSRG...............--MR..SVLGFVASIN...S...C.L.T...A....W.Y.....S.RV..V...FQ.....L..........P.......N....Q...EI......MDS....LKL.............................. [...]
+D2H044_AILME/665-956   .............................................................................................MVVCIIMG..ARDDL..YGAIKKL.CC...VQ..A..PVPSQVINV.R..T.IGQPTR................LRSVAQKILL.......QINCK..........LGGE.-.....LWG.V....DIP.L-........-......-..-....-...-...-.....K.Q..L.M..................................VIGMDVYHDPSRG...............--MR..SVVGFVASIN...L...T.L.T...K....W.Y.....S.RV..V...FQ.....M..........P.......H....Q...EI......VDS....LKL.............................. [...]
+D3ZRE1_RAT/666-957     .............................................................................................MVVCIIMG..TRDDL..YGAIKKL.CC...VQ..S..PVPSQVINV.R..T.IGQPTR................LRSVAQKILL.......QMNCK..........LGGE.-.....LWG.V....DIP.L-........-......-..-....-...-...-.....K.Q..L.M..................................VIGMDVYHDPSRG...............--MR..SVVGFVASIN...L...T.L.T...K....W.Y.....S.RV..V...FQ.....M..........P.......H....Q...EI......VDS....LKL.............................. [...]
+PIWL2_MOUSE/666-957    .............................................................................................MVVCIIMG..TRDDL..YGAIKKL.CC...VQ..S..PVPSQVINV.R..T.IGQPTR................LRSVAQKILL.......QMNCK..........LGGE.-.....LWG.V....DIP.L-........-......-..-....-...-...-.....K.Q..L.M..................................VIGMDVYHDPSRG...............--MR..SVVGFVASIN...L...T.L.T...K....W.Y.....S.RV..V...FQ.....M..........P.......H....Q...EI......VDS....LKL.............................. [...]
+PIWL2_HUMAN/668-959    .............................................................................................MVVCIIMG..PRDDL..YGAIKKL.CC...VQ..S..PVPSQVVNV.R..T.IGQPTR................LRSVAQKILL.......QINCK..........LGGE.-.....LWG.V....DIP.L-........-......-..-....-...-...-.....K.Q..L.M..................................VIGMDVYHDPSRG...............--MR..SVVGFVASIN...L...T.L.T...K....W.Y.....S.RV..V...FQ.....M..........P.......H....Q...EI......VDS....LKL.............................. [...]
+PIWL2_ONCMY/749-1040   ............................................................................................l-VVCIMTG..NRDDL..YSAIKKL.CC...VQ..S..PVPSQAINV.R..T.ISQPQK................LRSVAQKILL.......QMNCK..........LGGE.-.....LWT.V....NVP.L-........-......-..-....-...-...-.....K.H..L.M..................................VIGVDVHHDTSKK...............--NR..SVMGFVASLN...S...L.L.T...R....W.Y.....S.RV..T...FQ.....M..........P.......N....E...EI......ING....FRV.............................. [...]
+PIWL2_DANRE/741-1032   ............................................................................................l-VVCIMTG..NRDDL..YSAIKKL.CC...IQ..S..PVPSQAINV.R..T.ISQPQK................LRSVAQKILL.......QINCK..........LGGE.-.....LWT.V....NVP.LK........Y......-..-....-...-...-.....-.-..L.M..................................VIGVDVHHDTSKK...............--SR..SVMGFVASLN...S...M.L.T...K....W.Y.....S.RV..T...FQ.....M..........P.......N....E...EI......ING....FRV.............................. [...]
+A5PL40_DANRE/7-278     .........................................................................................ssra--------..-----..-------.--...--..F..TLNSQAINV.R..T.ISQPQK................LRSVAQKILL.......QINCK..........LGGE.-.....LWT.V....NVP.LK........Y......-..-....-...-...-.....-.-..L.M..................................VIGVDVHHDTSKK...............--SR..SVMGFVASLN...S...M.L.T...K....W.Y.....S.RV..T...FQ.....M..........P.......N....E...EI......ING....FRV.............................. [...]
+Q4RPK4_TETNG/383-660   ................................................................................plvlnafkyicmf--------..-----..-------.--...--..-..--CPQAINV.R..T.ISNQAK................LKSIAQKILL.......QINCK..........LGGE.-.....LWT.V....SIP.M-........-......-..-....-...-...-.....K.N..F.M..................................VVGVDVYHDTKKK...............--YH..SVMGFVASVN...S...T.L.T...R....W.Y.....S.RV..I...FQ.....T..........P.......N....E...EL......IGG....FRI.............................. [...]
+B9U224_ORYLA/729-1020  ............................................................................................l-VVCVIEG..NRDDL..YSAIKKL.CC...LK..C..PVPSQVINV.R..T.ISQQQK................LRGIAQKILL.......QLNSK..........LGGE.-.....LWT.V....GIP.L-........-......-..-....-...-...-.....K.S..L.M..................................VVGVDVHHDTSKK...............--HQ..SVMGFVASVN...S...S.L.T...H....W.Y.....S.RV..T...FQ.....T..........P.......T....E...EL......ISG....FRA.............................. [...]
+B4JP35_DROGR/334-622   ...........................................................................................qi-VVCICSS..RRDDR..YSAIKKI.CC...AE..R..PVASQVINS.R..T.LSNETR................NRSIVQKIIL.......QMNCK..........MGGS.-.....LWT.V....KIP.F-........-......-..-....-...-...-.....K.N..V.M..................................ICGIDSYHDPSQK...............--SH..SVAAFVASLN...S...T.Y.T...H....W.F.....S.KA..V...IQ.....T..........K.......K....E...EL......VNG....LTS.............................. [...]
+B7FNN2_DROME/566-845   ............................................................................................m-VVCICHN..RRDDR..YAAIKKI.CC...SE..I..PIPSQVINA.K..T.LQNDLK................IRSVVQKIVL.......QMNCK..........LGGS.-.....LWT.V....KIP.F-........-......-..-....-...-...-.....K.N..V.M..................................ICGIDSYHDPSNR...............--GN..SVAAFVASIN...S...S.Y.S...Q....W.Y.....S.KA..V...VQ.....T..........K.......R....E...EI......VNG....LSA.............................. [...]
+A7YFW6_DROME/299-494   ............................................................................................m-VVCICHN..RRDDR..YAAIKKI.CC...SE..I..PIPSQVINA.K..T.LQNDLK................IRSVVQKIVL.......QMNCK..........LGGS.-.....LWT.V....KIP.F-........-......-..-....-...-...-.....K.N..V.M..................................ICGIDSYHDPSNR...............--GN..SVAAFVASIN...S...S.Y.S...Q....W.Y.....S.KA..V...VQ.....T..........K.......R....E...EI......VNG....LSA.............................. [...]
+B6IDV1_DROME/574-861   ............................................................................................m-VVCICHN..RRDDR..YAAIKKI.CC...SE..I..PIPSQVINA.K..T.LQNDLK................IRSVVQKIVL.......QMNCK..........LGGS.-.....LWT.V....KIP.F-........-......-..-....-...-...-.....K.N..V.M..................................ICGIDSYHDPSNR...............--GN..SVAAFVASIN...S...S.Y.S...Q....W.Y.....S.KA..V...VQ.....T..........K.......R....E...EI......VNG....LSA.............................. [...]
+Q7PLK0_DROME/566-853   ............................................................................................m-VVCICHN..RRDDR..YAAIKKI.CC...SE..I..PIPSQVINA.K..T.LQNDLK................IRSVVQKIVL.......QMNCK..........LGGS.-.....LWT.V....KIP.F-........-......-..-....-...-...-.....K.N..V.M..................................ICGIDSYHDPSNR...............--GN..SVAAFVASIN...S...S.Y.S...Q....W.Y.....S.KA..V...VQ.....T..........K.......R....E...EI......VNG....LSA.............................. [...]
+A4GND8_DROME/566-853   ............................................................................................m-VVCICHN..RRDDR..YAAIKKI.CC...SE..I..PIPSQVINA.K..T.LQNDLK................IRSVVQKIVL.......QMNCK..........LGGS.-.....LWT.V....KIP.F-........-......-..-....-...-...-.....K.N..V.M..................................ICGIDSYHDPSNR...............--GN..SVAAFVASIN...S...S.Y.S...Q....W.Y.....S.KA..V...VQ.....T..........K.......R....E...EI......VNG....LSA.............................. [...]
+A4GUJ7_DROME/566-848   ............................................................................................m-VVCICHN..RRDDR..YAAIKKI.CC...SE..I..PIPSQVINA.K..T.LQNDLK................IRSVVQKIVL.......QMNCK..........LGGS.-.....LWT.V....KIP.F-........-......-..-....-...-...-.....K.N..V.M..................................ICGIDSYHDPSNR...............--GN..SVAAFVASIN...S...S.Y.S...Q....W.Y.....S.KA..V...VQ.....T..........K.......R....E...EI......VNG....LSA.............................. [...]
+Q7PWT1_ANOGA/618-916   ............................................................................................q-IVVIICP.tSRDDR..YAAIKRI.LC...TE..V..PIPSQVINA.R..T.LANEKR................NRSVVLKVLL.......QMNCK..........LGGS.-.....LWG.V....RVP.I-........-......-..-....-...-...-.....K.R..T.M..................................ICGIDTYHEAKQR...............--SN..SVAAFVGSLD...A...A.F.T...H....W.Y.....S.RA..T...VQ.....E..........R.......K....E...EI......LNG....LCV.............................. [...]
+B0WE96_CULQU/634-782   ............................................................................................q-IVVIICP.tSRDDR..YAAIKRI.CC...SE..I..PVPSQVINA.R..T.LANEAK................NRAIVQKILL.......QMNCK..........LGGT.-.....LWS.I....KIP.F-........-......-..-....-...-...-.....Q.N..V.M..................................IAGIDTYHDPKQK...............--SN..SVSAFVASLN...G...E.Y.T...R....W.Y.....S.RA..C...IQ.....S..........K.......K....E...EF......MNG....LCA.............................. [...]
+Q170R5_AEDAE/637-930   ............................................................................................q-IVVIICP.tSRDDR..YAAIKRI.CC...SE..I..PVPSQVINA.R..T.LSNEAK................NRAIVQKIIL.......QMNCK..........LGGT.-.....LWS.I....RIP.F-........-......-..-....-...-...-.....D.N..V.M..................................IAGIDTYHDPKQK...............--SN..SVSAFVASLN...G...D.Y.T...R....W.Y.....S.RA..C...IQ.....S..........K.......K....E...EF......ING....LCA.............................. [...]
+C9E0T2_APIME/1-294     ............................................................................................m--VIVFPT..NRTDR..YSAVKRV.CC...VE..M..PVPSQVIMS.R..T.ISRGDK................LKSITEKIAL.......QINCK..........LGGA.-.....LWA.L....AIP.M-........-......-..-....-...-...-.....D.H..C.M..................................ICGIDVYHAGVGQ...............SMKG..SVAGFVASLD...K...L.L.T...S....W.H.....S.KI..C...LQ.....G..........K.......H....Q...EL......VDI....LQI.............................. [...]
+C9E0S9_APIME/551-753   ............................................................................................l-MVIVFPT..NRTDR..YSAVKRV.CC...VE..M..PVPSQVIMS.R..T.ISRGDK................LKSITEKIAL.......QINCK..........LGGA.-.....LWA.L....AIP.M-........-......-..-....-...-...-.....D.H..C.M..................................ICGIDVYHAGVGQ...............SMKG..SVAGFVASLD...K...L.L.T...S....W.H.....S.KI..C...LQ.....G..........K.......H....Q...EL......VDI....LQI.............................. [...]
+C9E0S8_APIME/604-898   ............................................................................................l-MVIVFPT..NRTDR..YSAVKRV.CC...VE..M..PAPSQVIMS.R..T.ISRGDK................LKSITEKIAL.......QINCK..........LGGA.-.....LWA.L....AIP.M-........-......-..-....-...-...-.....D.H..C.M..................................ICGIDVYHAGVGQ...............SMKG..SVAGFVASLD...K...L.L.T...S....W.H.....S.KI..C...LQ.....G..........K.......H....Q...EL......VDI....LQI.............................. [...]
+C3ZKW1_BRAFL/534-739   ..........................................................................................cqk--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...-Q.....G..........Q.......G....E...EV......IPS....IGK.............................. [...]
+B9ZU54_9TURB/593-893   ............................................................................................i-VVCLLPT..KVEQK..YNAIKRQ.CC...IS..T..PVASQVIIS.R..T.LSNDSK................RKRIVQNIGL.......QMVAK..........MGGE.-.....LWG.V....QLP.TV........Q......Q..V....-...-...-.....G.R..L.M..................................VVGIDVYHEAKKR...............--SE..SWLGVCCSLN...Q...H.A.T...R....Y.K.....S.SV..H...KQ.....T..........P.......G....V...EL......GGF....YNV.............................. [...]
+PIWI1_SCHMD/493-790    ...........................................................................................ma--LVFIPD..---DK..VYAKVKN.FT...MS..T..GLLTQCVTQ.R..N.GSNRDDr..............rRKTVADKSVM.......QMFSK..........LGYD.-.....PWG.I....NLK.M-........-......-..-....-...-...-.....A.P..T.M..................................IVGLDTFHSKTGK...............---R..SVQASVFSIS...A...K.F.S...Q....Y.I.....S.FV..N...SS.....K..........G.......K....N...EF......HEN....LGK.............................. [...]
+D2Z0D8_DUGJA/494-791   ...........................................................................................la--LVFIPD..---DK..IYAKVKN.FT...MS..T..GLLTQCVTQ.R..N.GSNRDDr..............rRKTVADKSVM.......QMFSK..........LGYD.-.....PWG.I....NLK.M-........-......-..-....-...-...-.....A.P..T.M..................................IVGLDTFHSKTGK...............---R..SVQASVFSIS...S...K.F.S...Q....Y.I.....S.FV..N...SS.....K..........G.......K....N...EF......HEN....LGK.............................. [...]
+PIWIL_DUGJA/502-800    ..........................................................................................ial---VFVPD..---DR..VYAKVKS.FT...IS..T..GLLTQCVTT.R..N.GTNRNDk..............rRQVVSSKTVM.......QIFSK..........FGYD.-.....PWT.I....DIK.M-........-......-..-....-...-...-.....R.P..T.M..................................IVGMDTFHNKGSK...............---K..SIHASVFSIN...S...T.F.S...Q....Y.M.....S.FA..N...SP.....K..........G.......K....Q...EF......HDT....LSG.............................. [...]
+PIWI2_SCHMD/516-815    ..........................................................................................mal---VFVPD..---DR..VYAKVKS.FT...MS..T..GLLTQCVTT.R..N.GTNRNDk..............rRKVVSSKTVM.......QIFAK..........FGYD.-.....PWT.V....EIK.L-........-......-..-....-...-...-.....R.P..T.M..................................IVGMDTYHNKSSK...............---K..SIQASVFSIN...S...T.F.T...Q....Y.M.....S.FV..V...NS.....P..........K.......G....R...QE......FHE...tLGK.............................. [...]
+D2Z0D9_DUGJA/512-810   ..........................................................................................mal---VFVPD..---DR..VYAKVKS.FT...MS..T..GLLTQCVTT.R..N.GTNRNDk..............rRKVVSNKTVM.......QIFAK..........FGYD.-.....PWT.V....EIK.L-........-......-..-....-...-...-.....R.P..T.M..................................IVGMDTYHNKSSK...............---K..SIQASVFSIN...S...T.F.T...Q....Y.M.....S.FV..N...QP.....K..........G.......R....Q...EF......HET....LGK.............................. [...]
+D2V2M6_NAEGR/28-326    ............................................................................................s-FILMITK.nKTSTE..YHTLKEK.TI...VD..M..GIPSQCITE.R..N.IAISEK................KSSILKNITI.......EMNAK..........LGGI.-.....PWM.T....SIP.M-........-......-..-....-...-...K.....P.H..T.M..................................IVGMDVNHSGEVY..............hRSKS..SLVGFVSSYD...S...K.V.C...A....Y.Y.....S.QI..Q...VQ.....K..........P.......G....V...EL......VEN....IKN.............................. [...]
+D2VMG4_NAEGR/577-883   ...........................................................................................fa--LVVLFN..DQKQR..YSRVKEV.LC...NQ..V..GIISQCVKL.S..T.ITNEKG................LASKATKVIV.......QICSK..........MGGA.-.....PWT.V....P--.L-........-......A..F....P...N...K.....E.P..T.M..................................IIGMDVYHSGEIY..............kRKKA..SVAGFVASID...A...K.I.S...T....Y.F.....T.KC..I...IQ.....E..........A.......G....K...EI......VDE....LEE.............................. [...]
+A4HBN9_LEIBR/872-1190  .......................................................................................svilvt-------N..EMGTR..ATRWLKV.EC...MC..R..GVHFIAIPA.S..S.NPKRLNl..............vGAQLRQRIAT.......QFE--..........---L.N....pLRG.I....DLR.GE........L......P..V....L...G...R.....R.H..V.L..................................ILGVDSCHTNTH-...............----..SVGAIVGILS..tP...A.G.N...S....L.L.....S.FF..W...RH.....D..........A.......R....G...RE......AQH....VAK.............................. [...]
+A4HZ40_LEIIN/904-1226  ........................................................................................svili------TN..EIDTR..ATRWLKV.EC...MC..R..GAHFIAIPA.S..S.SPKK--................LNLAGAQLRM.......RIASQ..........FELN.P.....LRG.V....DLR.GE........L......P..V....L...G...H.....R.H..V.L..................................VIGVDSCHTNTHS...............--VG..TIVGILST--...P...T.E.S...K....L.L.....S.YF..W...RH.....D..........A.......R....G...RE......TQH....VAK.............................. [...]
+Q4QCH4_LEIMA/899-1221  ..........................................................................................svi----LITN..EMDTR..ATRWLKV.EC...MC..R..GAHFIAIPA.S..S.NPKK--................LNLVGAQLRM.......RIATQ..........FELN.P.....LRG.V....DLR.GE........L......P..V....L...G...H.....R.H..V.L..................................VIGVDSCHTNTHS...............--VG..TIVGILST--...P...T.E.S...K....L.L.....S.YF..W...RH.....D..........A.......R....G...RE......AQH....VAK.............................. [...]
+Q4DYG9_TRYCR/791-1083  ...........................................................................................ta--AVIISA..ERETR..ASRWILA.EC...LT..R..GILGMFIPP.A..T.TPKR--................QNLLCENVRI.......QLRTK..........FETD.P.....AHG.V....NLP.RE........V......P..A....L...A...Q.....R.R..V.L..................................VVGVDACHTTTFS...............--TG..SVVGILCAPE..rN...H.L.L...P....F.F.....W.KH..E...MR.....G..........Q.......E....A...DR......VTE....---.............................. [...]
+Q6T6J9_9TRYP/784-1082  ..........................................................................................taa---VIVTN..ERETR..LVRWMQA.EC...LT..R..GILPLFVPP.C..A.SPKQ--................QQLRCENIRL.......RLRTV..........FATD.P.....LRG.V....DLQ.RE........V......P..A....V...A...Q.....R.R..V.L..................................LVGVDSCHTPTVS...............--TG..SVVGILCTAE..rN...H.L.L...P....F.F.....W.KH..E...RR.....G..........Q.......E....V...EL......VSE...hFEV.............................. [...]
+D0A1P1_TRYBG/784-1082  ..........................................................................................taa---VIVTN..ERETR..LVRWMQA.EC...LT..R..GILPLFVPP.C..A.SPKQ--................QQLRCENIRL.......RLRTV..........FATD.P.....LRG.V....DLQ.RE........V......P..A....V...A...Q.....R.R..V.L..................................LVGVDSCHTPTVS...............--TG..SVVGILCTAE..rN...H.L.L...P....F.F.....W.KH..E...RR.....G..........Q.......E....V...EL......VSE...hFEV.............................. [...]
+Q38C22_9TRYP/783-1081  ..........................................................................................taa---VIVTN..ERETR..LVRWMQA.EC...LT..R..GILPLFVPP.C..A.SPKQ--................QQLRCENIRL.......RLRTV..........FATD.P.....LRG.V....DLQ.RE........V......P..A....V...A...Q.....R.R..V.L..................................LVGVDSCHTPTVS...............--TG..SVVGILCTAE..rN...H.L.L...P....F.F.....W.KH..E...RR.....G..........Q.......E....V...EL......VSE...hFEV.............................. [...]
+A4HH63_LEIBR/16-225    ...............................................................................sdaasshmssttlt--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..V...RR.....Q..........N.......A....N...EV......LNN...rFPD.............................. [...]
+A4H6I4_LEIBR/673-882   ...............................................................................sdaasshmssttlt--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..V...RR.....Q..........N.......A....N...EV......LNN...rFPD.............................. [...]
+Q6T6K0_9TRYP/549-877   ...........................................................................................vt----FLRR..PEREP..YAEWKAS.WS...GG..-..GALSQVVAK.D..L.TGGR--................ESSIVMAVAQ.......QICAK..........TGRL.Nw...tLDV.N....QVC.PK........L......-..A....K...S...D.....P.SggI.L..................................IIAADVGRDQRSVate........ssavRQEF..FAVAFVSFYVk.gT...Q.W.S...T....Y.C.....N.HY..Q...VN.....G..........R.......K....E...TL......YAD....GSDcdttsmsegg.................... [...]
+D0A4M3_TRYBG/571-899   ...........................................................................................vt----FLRR..PEREP..YAEWKAS.WS...GG..-..GALSQVVAK.D..L.TGGR--................ESSIVMAVAQ.......QICAK..........TGRL.Nw...tLDV.N....QVC.PK........L......A..K....A...D...P.....SgG..I.L..................................IIAADVGRDQRSVate........ssavRQEF..FAVAFVSFYVk.gT...Q.W.S...T....Y.C.....N.HY..Q...VN.....G..........R.......K....E...TL......YAD....GSDcdttsmsegg.................... [...]
+Q389P5_9TRYP/560-888   ...........................................................................................vt----FLRR..PEREP..YAEWKAS.WS...GG..-..GALSQVVAK.D..L.TGGRE-................-LSIVMAVAQ.......QICAK..........TGRL.Nw...tLDV.N....QVC.PK........L......A..K....A...D...P.....SgG..I.L..................................IIAADVGRDQRSVate........ssavRQEF..FAVAFVSFYVk.gT...Q.W.S...T....Y.C.....N.HY..Q...VN.....G..........R.......K....E...TL......YAD....GSDcdttsmsegg.................... [...]
+Q86QW7_GIALA/412-736   ............................................................................................l-VVIVIPG..PKQDRgdLYKGIKQ.FY...TH..M..GIVTQCLLA.P..K.SSQNELq.............wyDQAVLRSVCQ.......QIYAK..........AGGA.-.....VWA.P....VLP.PQ........N......-..-....V...Y...S.....K.S..T.M..................................LCALDISRPKKTVgr...........paEVPI..STAGFISTYD..gS...F.E.Y...I....Y.S.....Q.KK..T...LV.....P..........N.......R....L...NH......GGE....LQQqtl........................... [...]
+A8BCK6_GIALA/555-879   ............................................................................................l-VVIVIPG..PKQDRgdLYKGIKQ.FY...TH..M..GIVTQCLLA.P..K.SSQNELq.............wyDQAVLRSVCQ.......QIYAK..........AGGA.-.....VWA.P....VLP.PQ........N......-..-....V...Y...S.....K.S..T.M..................................LCALDISRPKKTVgr...........paEVPI..STAGFISTYD..gS...F.E.Y...I....Y.S.....Q.KK..T...LV.....P..........N.......R....L...NH......GGE....LQQqtl........................... [...]
+C6LTG5_GIALA/555-877   ............................................................................................l-VVVVIPG..PKQYSggLYKEVKR.FY...TD..K..GIVTQCLLT.P..R.LSRDGPe.............wyDQAILNGLCQ.......QIYAK..........AGGA.-.....VWA.P....ALP.KD........N......A..Y....-...-...S.....T.S..T.M..................................LCALDVSRPKKTVgr...........ptEVPA..STAGFISTY-...E...G.S.F...E....Y.I.....Y.SQkkN...LMpn.rlN..........Q.......G....G...EV......QQQt..lMKT.............................. [...]
+A9T108_PHYPA/1-169     ............................................................................................k--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+C6XVE0_PEDHD/320-460   .....................................................................................viitnskk-------E..ESDDK..LYFSLKH.RF...TN..E..GIPCQVVTK.D..L.IINDNA................LKFSLGNIAL.......QMFAK..........AGGI.-.....PWK.M....K--.PA........T......-..-....-...-...-.....T.E..Y.L..................................IIGIGQSYNIEIT..............eD---..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+A8Q5F0_BRUMA/545-849   .............................................................................itkdrydpvhaisnrg--------..-----..-------.--...--..-..---------.-..-.------................AEMTLDNLVM.......KMNLK..........LGGI.Nh...aLTS.S....AAFlSK........N......R..L....T...N...N.....V.M..D.Mewlr..........................hsrmFFGLDMSHAAPQSlyer......qaqvpPSEP..TIVAMTFSC-...G...E.P.F...A....M.Q.....G.EY..W...MQ.....E..........P.......R....L...HV......VKF....LKE.............................. [...]
+Q21691_CAEEL/673-1001  .............................................................................................TIVFGIIA..EKRPD..MHDILKY.FE...EK..L..GQQTIQISS.E..T.ADKFMRd.............hgGKQTIDNVIR.......KLNPK..........CGGT.Nf...lIDV.P....ESV.GH........R......V..V....C...N...N.....S.A..E.Mrakl.........................yaktqFIGFEMSHTGARTrfdi......qkvmfDGDP..TVVGVAYSL-...K...H.S.A...Q....L.G.....G.FS..Y...FQ.....E..........S.......R....L...HK......LTN....LQE.............................. [...]
+A8WNJ6_CAEBR/660-987   ............................................................................................s-LVIGIAL..EKMPH..IHDVLKY.YE...EK..I..GQQTLQLCA.E..T.VRKMGQg.............ggNKTTVDNVIR.......KLNAK..........CGGT.Nf...yVEV.P....NAV.KN........R......Q..V....C...I...N.....P.E..E.Mrkkl.........................ykytqFIGFELSHTGARSkfdk......qkqtvEIDP..TIVGVSYTL-...K...H.A.T...Q....L.G.....G.FS..Y...FQ.....D..........S.......R....V...HK......LTR....VKE.............................. [...]
+A8WS47_CAEBR/435-755   ......................................................................................trverss--------..-----..-NHILKY.YE...EK..I..GQQTLQLCA.E..T.VMKMARc.............ggNKTTVDNVLR.......KLNLK..........CGGT.Nf...yVGV.P....DAV.NN........R......Q..V....C...I...N.....P.E..E.Mrkkl.........................ykntqFIGFELSHTGAQSkfdk......lkedaEIDP..TIVGVAYSL-...K...H.A.T...Q....L.G.....G.FS..Y...FQ.....D..........G.......R....V...HK......LTH....VQE.............................. [...]
+A8WQA0_CAEBR/671-998   ............................................................................................d-IFVGIAR..DKKPD..VHDIMKY.YE...ES..V..GMQTIQLCK.Q..T.VDKMMNp.............qgGRQTIDNVMR.......KFNLK..........CGGT.Nf...yVDI.P....SNI.RG........R......S..I....C...S...N.....T.E..T.Lhkkl.........................lekvqFIGFEISHGAARTlydr......srnqmDGEP..SIVGVSYSL-...K...Q.S.T...Q....L.G.....G.FS..Y...MQ.....T..........Q.......R....E...YK......IQK....LDD.............................. [...]
+Q9TXN7_CAEEL/609-935   ............................................................................................n-ILVAIAK..EKKPD..VHDVLKY.YE...AS..V..GLQTIQVCK.Q..T.VDMMLSs..............gGRQTADNVMR.......KFNLK..........CGGT.Nf...fVQI.P....RSV.NG........R......T..V....C...A...D.....A.H..L.Lnekl.........................fervqFIGFDISHGASRTlfdr......stgkmDGEV..SIVGVSYSL-...S...H.S.T...H....-.L.....G.GF..A...YM.....Q..........T.......Q....K...EY......KLQ...kLDE.............................. [...]
+C8JQR1_CAEEL/591-918   ............................................................................................d-ILFAITR..EKKPD..VHDILKY.YE...ES..I..GLQTIQVCQ.Q..T.VDKMMGg.............ggGRQTIDNVMR.......KFNLK..........CGGT.Nf...fDEI.P....SSV.RG........R......A..V....C...S...N.....S.E..T.Lskkl.........................fehvqFIGFEISHGAARTlfdr......srsqlDGEP..SVVGVSYSLT...-...-.N.S...T....Q.L.....G.GF..T...YL.....Q..........T.......Q....K...EY......KLQ...kLGE.............................. [...]
+YQ53_CAEEL/650-977     ............................................................................................d-ILVGIAR..EKKPD..VHDILKY.FE...ES..I..GLQTIQLCQ.Q..T.VDKMMGg.............qgGRQTIDNVMR.......KFNLK..........CGGT.Nf...fVEI.P....NAV.RG........K......A..V....C...S...N.....N.E..T.Lrkkl.........................lehvqFIGFEISHGASRTlfdr......srsqmDGEP..SVVGVSYSLT...-...-.N.S...T....Q.L.....G.GF..T...YL.....Q..........T.......Q....K...EY......KLQ...kLDE.............................. [...]
+Q9N3L7_CAEEL/585-911   ............................................................................................s-IIIGITE..EKKPE..VHDVLKY.FE...AA..V..GLQTMQIHS.K..T.AGFIIS...............gNGQTAGNVIK.......KLNLK..........CGGI.Ny...iVEV.P....QSF.NR........T......V..V....C...S...N.....N.S..F.Vqkkl.........................fdgtqFIGFEMTHGAARTlfdk......sngtfDGEP..TIVGCAYSL-...Q...K.A.T...D....L.G.....G.FN..W...FQ.....E..........Q.......N....E...YR......LKN....LGT.............................. [...]
+A8XZY0_CAEBR/665-992   ............................................................................................s-IVIGITS..EKKPD..VHDVMKY.FE...AG..I..GLQTLQIHD.R..T.AECFMRe.............qgGAQTVDNVMR.......KLNLK..........LGGI.Nf...nVDP.V....NMY.EH........K......V..I....C...N...N.....I.G..G.Mkkkl.........................fekvqFVGFEMTHGSSRTlydk......aqgqfDGEP..TIVGCGYSL-...S...S.P.T...E....L.G.....G.YN..F...LQ.....E..........R.......N....E...YK......LKN....LDS.............................. [...]
+Q27GU1_CAEEL/511-833   ............................................................................................p-FVLFISD..-DVPN..IHECLKF.EE...RM..S..DIPTQHVLL.K..N.VKKMRDniekks....qggrraYDLTLDNIVM.......KANIK..........CGGL.N.....YT-.A....DIP.RD........L......A..C....W...N...E.....V.S..T.F..................................VIGMDVAHPDRNAa.............rEGNP..STVGLSCNSA...E...N.P.Y...S....F.I.....G.DF..L...YT.....D..........P.......R....R...EA......IQDe..iLRK.............................. [...]
+Q19645_CAEEL/674-996   ............................................................................................p-FVLFISD..-DVPN..IHECLKF.EE...RM..S..DIPTQHVLL.K..N.VKKMRDniekks....qggrraYDLTLDNIVM.......KANIK..........CGGL.N.....YT-.A....DIP.RD........L......A..C....W...N...E.....V.S..T.F..................................VIGMDVAHPDRNAa.............rEGNP..STVGLSCNSA...E...N.P.Y...S....F.I.....G.DF..L...YT.....D..........P.......R....R...EA......IQDe..iLRK.............................. [...]
+A8XRG0_CAEBR/648-970   ............................................................................................p-FVLFVSD..-DVPN..IHECLKF.EE...RM..S..DIPTQHILL.K..N.IRKIRDniekks....qggrraYDLTLDNIVM.......KANVK..........CGGL.N.....YT-.A....DIP.RD........I......G..S....W...R...E.....V.S..T.F..................................VMGMDVAHPDKMAt.............rEGSP..STVGLSCNSA...E...S.P.Y...S....F.V.....G.DF..L...YT.....D..........P.......R....R...EA......IQDe..iLRK.............................. [...]
+A8XFJ6_CAEBR/595-895   ...........................................................................................ky--VFIITD..DNITH..LHRE--F.NQ...TR..L..AVYNIFREM.S..K.ATSVCKd..............gKRLTLENVIN.......KTNIK..........LGGL.N.....YTV.S....DTK.RS........M......-..-....-...-...T.....D.D..Q.L..................................IIGVGISAPPPGTkfll.......egkgHLNP..QIVGFASNA-...V...S.N.H...E....F.V.....G.DF..V...LA.....S..........V.......G....Q...DT......MSS....IED.............................. [...]
+Q23415_CAEEL/40-350    ............................................................................................k-FAFVITD..DSITH..LHKKYKA.LE...QK..S..MMVIQDMKI.S..K.ANSVVKd..............gKRLTLENVIN.......KTNMK..........LGGL.N.....YTV.S....DAK.KS........M......-..-....-...-...T.....D.E..Q.L..................................IIGVGVSAPPAGTkymm.......dnkgHLNP..QIIGFASNA-...V...A.N.H...E....F.V.....G.DF..V...LA.....P..........S.......G....Q...DT......MAS....IED.............................. [...]
+GCC7_CAEEL/596-906     ...........................................................................................ky--VLMITD..DAIVH..LHKQYKA.LE...QR..T..MMIVQDMKI.S..K.ANAVVKd..............gKRLTLENIIN.......KTNVK..........LGGL.N.....YTV.S....DAK.KS........M......-..-....-...-...T.....D.E..Q.L..................................IIGVGVSAPPAGTkymm.......dnkgHLNP..QIIGFASNA-...V...A.N.H...E....F.V.....G.DF..V...LA.....P..........S.......G....Q...DT......MAS....IED.............................. [...]
+P91085_CAEEL/543-853   ...........................................................................................ky--VLVITD..DAITH..LHKRYKA.LE...QK..S..RMTIQDMKI.S..K.ANAVVKd..............gKRLTLENIIN.......KTNLK..........LGGL.N.....YTV.S....DSK.KS........M......-..-....-...-...T.....D.E..Q.L..................................IIGVGVSAPPAGTkfmm.......dnkgHLNP..QIIGFASNA-...V...A.N.H...E....F.V.....G.DF..V...LA.....P..........S.......T....Q...DT......MAS....IED.............................. [...]
+A8WJ71_CAEBR/596-953   ............................................................................................e-FVFIITD..DTITN..LHQKYKM.IE...SL..Q..SIVVQDMKM.S..K.ALSVIDs..............gKRLTLENVIN.......KTNVK..........LGGS.N.....YIF.T....DTK.KY........L......-..-....-...-...-.....D.R..V.L..................................VIGIGISQPPPGTkfiv.......egkgFLNP..QIIGFAYNG-...K...Q.K.Q...E....F.A.....G.DF..V...LC.....P..........A.......G....Q...DV......SGF...sASKivisfq........................ [...]
+A8X957_CAEBR/565-899   ............................................................................................e-FVFIITD..DAITN..LHQKYKM.IE...SL..Q..SIVIQDMKM.T..K.ALSVIDs..............gKRLTLENVIN.......KTNVK..........LGGS.N.....YIF.T....DTK.KY........L......-..-....-...-...-.....D.R..V.L..................................VIGIGISQPPPVTkfiv.......egkgFLSP..QIISFSYNG-...K...Q.K.Q...E....F.A.....G.DF..V...LC.....P..........A.......G....Q...DV......NGF...sASKliislq........................ [...]
+O62275_CAEEL/594-924   .............................................................................................TFVFIITD..DSITT..LHQRYKM.IE...KD..T..KMIVQDMKL.S..K.ALSVINa..............gKRLTLENVIN.......KTNVK..........LGGS.N.....YVF.V....DAK.KQ........L......-..-....-...-...-.....D.S..H.L..................................IIGVGISAPPAGTkyam.......enkgVLNP..NVIGYAYNA-...Q...H.N.Q...E....F.S.....G.DF..V...LN.....S..........A.......S....Q...DT......LAP....IED.............................. [...]
+Q9N585_CAEEL/604-934   .............................................................................................TFVLCITE..DNITC..LHQKYKF.IE...HH..T..QMIVQDMKL.S..K.ALSVVNa..............sKKLTLENVIN.......KTNVK..........LGGS.N.....YVY.L....DTK.NF........L......-..-....-...-...-.....Q.E..H.L..................................IIGVGISSPPPGTkyim.......esrgILNP..TIVGFAYNG-...N...G.K.Q...E....F.S.....G.DF..V...LN.....A..........A.......G....Q...ET......IAP....IED.............................. [...]
+A8XEJ5_CAEBR/552-849   ............................................................................................q-LLFFVVK..-SRYN..YHQNIKC.LE...QK..Y..DLLTQEVRA.E..T.AEKVFR................QPQTRLNIVN.......KTNMK..........LGGL.N.....YQI.G....S--.--........-......E..T....F...R...R.....P.D..Y.L..................................IVGFETSQRSGGN...............PDYP..ISVGYAANML...D...H.H.Q...K....F.A.....G.GY..V...YV.....K..........R.......S....N...DV......FGP...iIKD.............................. [...]
+Q86S33_CAEEL/548-852   ............................................................................................q-LLFFVVK..-SRYN..YHQQIKA.LE...QK..Y..DVLTQEIRA.E..T.AEKVFR................QPQTRLNIIN.......KTNMK..........LGGL.N.....YAI.G....S--.--........-......E..A....F...N...K.....P.N..R.L..................................IVGFVTSQRVGGN...............PDYP..ISVGFAANML...K...H.H.Q...K....F.A.....G.GY..V...YV.....H..........R.......D....R...DV......FGS...iIKD.............................. [...]
+Q9GZG4_CAEEL/548-852   ............................................................................................q-LLFFVVK..-SRYN..YHQQIKA.LE...QK..Y..DVLTQEIRA.E..T.AEKVFR................QPQTRLNIIN.......KTNMK..........LGGL.N.....YAI.G....S--.--........-......E..A....F...N...K.....P.N..R.L..................................IVGFVTSQRVGGN...............PDYP..ISVGFAANML...K...H.H.Q...K....F.A.....G.GY..V...YV.....H..........R.......D....R...DV......FGS...iIKD.............................. [...]
+Q86NJ8_CAEEL/548-852   ............................................................................................q-LLFFVVK..-SRYN..YHQQIKA.LE...QK..Y..DVLTQEIRA.E..T.AEKVFR................QPQTRLNIIN.......KTNMK..........LGGL.N.....YAI.G....S--.--........-......E..A....F...N...K.....P.N..R.L..................................IVGFVTSQRVGGN...............PDYP..ISVGFAANML...K...H.H.Q...K....F.A.....G.GY..V...YV.....H..........R.......D....R...DV......FGS...iIKD.............................. [...]
+B3KLZ7_CAEEL/358-662   ............................................................................................q-LLFFVVK..-SRYN..YHQQIKA.LE...QK..Y..DVLTQEIRA.E..T.AEKVFR................QPQTRLNIIN.......KTNMK..........LGGL.N.....YAI.G....S--.--........-......E..A....F...N...K.....P.N..R.L..................................IVGFVTSQRVGGN...............PDYP..ISVGFAANML...K...H.H.Q...K....F.A.....G.GY..V...YV.....H..........R.......D....R...DV......FGS...iIKD.............................. [...]
+O02095_CAEEL/574-878   ............................................................................................q-LLFFVVK..-SRYN..YHQQIKA.LE...QK..Y..DVLTQEIRA.E..T.AEKVFR................QPQTRLNIIN.......KTNMK..........LGGL.N.....YAI.G....S--.--........-......E..A....F...N...K.....P.N..R.L..................................IVGFVTSQRVGGN...............PDYP..ISVGFAANML...K...H.H.Q...K....F.A.....G.GY..V...YV.....H..........R.......D....R...DV......FGS...iIKD.............................. [...]
+A8X254_CAEBR/555-701   ..........................................................................................qll---MFVFR..-RSVP..LHAQIKS.LE...QK..F..DILTQEITL.E..T.AEKIFR................QPQTLQNIVN.......KTNMK..........LGGL.N.....YRI.D....STV.L-........-......-..-....-...-...N.....P.N..I.L..................................FIGFETSSKGGAGdvg........iinlKFGP..VSIGFAANMM...Q...N.H.Q...Q....F.A.....G.GY..I...YA.....P..........Q.......A....R...DV......GKN...qYFQ.............................. [...]
+O16386_CAEEL/548-847   ............................................................................................q-LIMFITK..-SMNN..YHTEIKC.LE...QE..F..DLLTQDIRF.E..T.AVKLAQ................QQNTRKNIIY.......KTNMK..........LGGL.N.....YEL.R....S--.--........-......G..V....F...S...N.....S.K..R.L..................................IIGFETSQRGGLG...............-DAP..IAIGFAANMM...S...H.S.Q...Q....F.A.....G.GY..M...FV.....K..........K.......S....A...DN......YGP...vIPE.............................. [...]
+A8XUC0_CAEBR/563-774   ............................................................................................e-LLMFITK..-SNRE..YHKEIKV.LE...HE..F..DIRTQDIRF.E..T.ALKFER................QQNTRRNLVN.......KINVK..........LGGI.N.....YEV.E....S-P.T-........-......-..-....-...F...T.....K.D..R.I..................................IIGLETSQNSTMG...............-DGL..ICVGFSANMM...A...K.E.T...Q....F.C.....G.GY..M...FT.....Q..........R.......S....N...DI......YGS...vLKD.............................. [...]
+Q8MU01_HETGL/598-705   ....................................................................................lighakgfe--------..--GDD..VHVTIKA.FE...QQ..T..EIVTQAITF.D..V.LKEVLDk..............gSPLTVTNCIH.......KTNVK..........MGGL.N.....YAL.H....MDD.PS........V......A..Q....L...F...D.....G.Q..T.L..................................FLGFAMNFP----...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+A8QE08_BRUMA/711-1030  ..........................................................................................afv-----MYI..DSRDD..THDDLKL.YE...AL..H..RIVTQHIHG.S..R.AREAPK................KVATLENIVN.......KLNCK..........NFGQ.C....yGII.P....ESF.AT........N......K..W....I...S...T.....G.K..T.L..................................IIGYDVCHPEPQPrher......rmrmpPTQP..SVLGISFNGA...S...C.P.E...T....F.I.....G.DY..S...FQ.....E..........P.......R....K...EQ......VTSs..iLEE.............................. [...]
+A8WWH9_CAEBR/55-193    ..................................................................................hqymqnlrgah--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....T.N..T.L..................................FIAYTVNHGTVDPnt..........pgvYNNP..STAVFTFNGT...T...R.P.E...H....F.I.....D.YF..H...FQ.....K..........A.......S....I...QH......IDPq..vIQR.............................. [...]
+Q17600_CAEEL/19-157    ....................................................................................qymrslrgp--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...E.....T.N..T.L..................................FIGYAINHGTVDPst..........pgvYNNP..STVVFTFNGT...S...C.P.D...H....F.T.....E.YF..H...FQ.....K..........A.......T....I...PH......VDPa..lIRR.............................. [...]
+Q9XVF1_CAEEL/588-902   ...........................................................................................pi---VIYAD..HTSEG..THSTLKL.QE...RL..C..EVITQQVAL.D..K.SLKRTP................GKVTANNLLM.......KLNLK..........YGGV.Nh...kVRV.D....N-S.I-........S......H..L....W...G...D....tS.N..T.L..................................IISYDVCHSSGKVykk.........deiCDEP..SCVGFGFNGT...A...C.P.E...A....F.I.....G.DF..H...YQ.....L..........P.......R....H...EQ......VDEh..lLKL.............................. [...]
+A8WWI1_CAEBR/598-920   .........................................................................................yviy------VD..HSSEP..YHQLLKY.LE...RK..F..EVMTQHLNF.D..K.ALQIRSgs...........pllGKSTMTNILM.......KINLK..........NGGL.N....hKVL.P....DPS.ID........H......L..W....G...D...K.....S.N..T.L..................................IISYDVCHSSGKVykk.........getCFEP..SCVGFGYNGT...S...V.P.E...A....I.I.....G.DF..H...YQ.....L..........P.......R....N...EQ......VDP...sVLT.............................. [...]
+A8P7Z4_BRUMA/1-302     ............................................................................................m--------..-----..-----KY.IE...SQ..E..QILTQDLKA.S..T.ALGIVMk..............rQYQTLDNIVN.......KTNIK..........MGGL.N.....YSVhL....EEN.CD........-......R..W....L...G...R.....P.G..F.L..................................IVGLDIAHPSYSRvpn.........kdrNTVL..SVVGYSANIK...K...H.P.L...D....F.I.....G.GY..R...FA.....K..........A.......Q...mE...EL......MDD...aIQQ.............................. [...]
+A8X254_CAEBR/749-889   ...........................................................................................nl--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+A8X023_CAEBR/600-841   ..................................................................................hgilalqnael--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................------------G...............DSEV..TTVGYASNFM...D...H.P.Q...K....F.A.....G.SY..K...FV.....E..........R.......T....D...EA......SLD...sIIEllqymitl...................... [...]
+Q21495_CAEEL/61-336    ...................................................................................ffrdgqetsl--------..-----..-------.--...--..-..---------.N..N.QSFRNP................TDFAQTGFFV.......DAKQQ..........LGGL.N.....YVV.N....S--.--........-......E..T....W...N...D.....S.G..L.L..................................LIGLSTAPYLNSY..............sSENV..TTIGFVSNTM...D...H.P.Q...K....F.A.....G.GY..K...YV.....K..........S.......G....S...DV......FGQ...vMPE.............................. [...]
+A8X022_CAEBR/492-805   .....................................................................................qllpfvth--------..-SRYA..LRKDIEW.ME...HK..Y..RIPSLAIDL.K..I.ARKMVE................DKAVKLDLAD.......QVNKK..........TQGV.N.....YAI.Y....S--.--........-......D..V....F...R...N.....G.N..D.L..................................VISISFSEPSPKYakvrililfshmifcFQYP..FTVGFAANTS...N...H.P.L...V....F.T.....S.EF..L...YS.....N..........S.......D....N...MD......SGA...vLTE.............................. [...]
+Q8MU01_HETGL/745-963   .....................................................................................rvgsslpp--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............---P..SCIGWAATIG..kR...H.K.D...E....Y.I.....G.DF..V...YQ.....A..........P.......R....R...EE......KID...iIAS.............................. [...]
+B6K0R2_SCHJY/507-805   ............................................................................................y-LFFILDS..NSPEP..YATIKRL.CN...TK..F..GIPSQCALR.K..H.IEGA--................KPQYCANLGM.......KVNAK..........LGGV.N.....VHL.E....PKS.--........F......P..-....L...G...N.....I.P..T.I..................................ILGGDVYHPARGG...............-SGA..SIGSMVGSID...L...H.G.C...K....Y.T.....A.MS..R...AQ.....N..........R.......N....Q...EM......IQG....MKD.............................. [...]
+AGO1_SCHPO/500-798     ............................................................................................y-LFFILDK..NSPEP..YGSIKRV.CN...TM..L..GVPSQCAIS.K..H.ILQS--................KPQYCANLGM.......KINVK..........VGGI.N....cSLI.P....KSN.P-........-......-..-....L...G...N.....V.P..T.L..................................ILGGDVYHPGVGA...............-TGV..SIASIVASVD...L...N.G.C...K....Y.T.....A.VS..R...SQ.....P..........R.......H....Q...EV......IEG....MKD.............................. [...]
+D0U267_CRYPA/639-939   ............................................................................................l-IFYIMPS..KDIVA..YERLKKS.MD...VR..V..GTLSQIVLA.P..H.VMKA--................APQYCSNVAT.......KVNAK..........LGGY.T.....SKL.K....E--.--........-......G..G....F...F...K.....V.P..T.M..................................ILGADISHGSFGQt.............gNLQA..SLAAITMSMD...P...D.A.I...T....Y.A.....A.GC..E...TN.....G..........Y.......R....V...EI......MTKd..tVRR.............................. [...]
+A4QSM3_MAGGR/672-970   ............................................................................................l-IFFILPN..KSSIN..YERIKKS.AD...CR..Y..ALVTQCMQA.A..H.VRKN--................QAQYCSNVAM.......KVNAK..........LGGQ.T.....CKV.A....---.--........-......-..T....A...F...K.....K.P..T.M..................................MIGCDVSHAAPGA...............-QQA..SMAAITVSMD...K...D.C.A...R....Y.A.....A.AV..E...TN.....G..........Y.......R....C...EI......LLPq..nVRG.............................. [...]
+C7YHP8_NECH7/612-917   ............................................................................................l-LFVVVSK..KNSGT..YERLKKS.AD...CR..F..GILTQVVLG.S..H.VQKN--................NGQYHSNVCM.......KVNAK..........LGGA.T....aCTP.P....LWK.TP........T......F..F....P...E...T.....R.P..T.I..................................MIGVDVSHTAPGG...............-TSP..STAAMTMSVD...K...D.A.T...R....Y.A.....A.LV..E...TN.....G..........Y.......R....V...EM......LTPg..nMRM.............................. [...]
+C9SSA6_VERA1/19-91     ............................................................................................p--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+C9SGB5_VERA1/589-897   ............................................................................................m-LFVIIRH..ANSGN..YERVKKS.AD...CR..F..GVLTQVVLS.R..H.VEKN--................QGQYHSNVAM.......KVNAK..........LGGT.T.....CRV.PhpnaKAP.RG........Q......P..P....F...F...S.....E.P..T.M..................................IMGLDVSHAGAGI...............-NSP..SMAAMTMSMD...K...D.A.C...R....Y.A.....A.VC..Q...TN.....G..........Y.......R....V...EM......LSPs..nTNE.............................. [...]
+A6S388_BOTFB/557-866   ............................................................................................i-LFFILPD..RNSFM..YERFKKN.NE...CR..F..AMMSQMMNV.A..H.VAKA--................QPQYCSNVCM.......KVNAK..........LGGT.T.....CKV.A....DSK.PP........K......P..-....F...F...P.....R.A..T.M..................................VIGADVSHATPGS...............-PQS..SMACLTMSMD...S...T.A.C...R....Y.A.....A.AV..Q...TN.....G..........K.......R....V...EM......ISPd..nINS.............................. [...]
+A7F377_SCLS1/445-754   ............................................................................................i-LFFIMPD..RNSFL..YERLKKN.NE...CR..F..GMMSQMMNI.A..H.VLKA--................QPQYCSNVCM.......KVNAK..........LGGT.T.....CKV.A....DVK.P-........L......K..P....F...F...P.....R.P..T.M..................................VIGADVSHASPGS...............-PQS..SMACLTMSMD...S...T.A.C...R....Y.A.....A.AV..Q...TN.....G..........N.......R....V...EM......ISKd..nINS.............................. [...]
+Q8J276_NEUCR/628-929   ...........................................................................................qi-VFVAVPD..KSAHV..YERLKKI.FE...CR..Y..GIVTQVLQA.D..H.VKKA--................QGQYISNVCM.......KVNAK..........LGGQ.T.....SSL.T....ATK.AK........S......H..N....F...F...I.....R.P..T.M..................................MIGVDVTHASPGS...............-DMP..SIAAMCASVD...V...E.G.Y...Q....Y.R.....A.AV..Q...TN.....G..........W.......H....N...EI......LTDe..nIST.............................. [...]
+D1ZPU0_SORMA/563-867   ...........................................................................................qi-IFIVVPD..KTAHV..YERIKKI.FD...CR..Y..GVVTQVVQA.Q..H.VQKA--................NGQYLSNVCM.......KVNAK..........LGGQ.T.....SSL.T....ANK.TK........P......H..G....F...F...T.....R.P..T.M..................................MIGVDVSHASPGS...............-EMP..SIAAMCATVD...R...D.G.Y...Q....Y.R.....A.AV..Q...TN.....G..........W.......R....S...EV......LTNe..nIEA.............................. [...]
+B2AKU3_PODAN/441-754   ...........................................................................................qi-IFFILKD..KSAWY..YERLKRS.SD...CR..Y..AMPTQMLNL.Q..Q.VRKG--................QAQYCSNVCL.......KVNAK..........LGGC.T....aVA-.V....KTQ.AGqplkpnsvA......P..H....F...D...N.....T.P..T.M..................................FIGADVSHGAAGH...............-LSP..SVAAMTVSMD...K...A.A.T...K....Y.A.....A.GA..Q...TN.....G..........W.......R....V...EI......IQPy..nMMQ.............................. [...]
+B6Q5R7_PENMQ/547-853   ............................................................................................l-LLFIVPN..KDTLV..YHRIKKS.CD...CR..F..GVASQVLQR.A..H.VERK--................QPQYMSNVAM.......KVNAK..........LGGV.-.....-TC.K....VAP.-R........Q......D..S....L...N...R.....A.G..C.M..................................IIGADVSHAAPGS...............-TAA..SLTAISVSAD...Q...N.C.V...K....Y.M.....G.SC..Q...TG.....Y..........S.......R....V...EM......IDEd..nMKN.............................. [...]
+B8M5N8_TALSN/546-852   ............................................................................................l-LLFVVPN..KDVLV..YHKIKKS.CD...SR..F..GVASQVLQS.A..H.VFKKQL................--QYMSNVAM.......KVNAK..........LGGV.-.....-TC.K....AAP.RQ........A......-..S....M...N...R.....P.G..C.M..................................IIGADVSHAAPGS...............-IAA..SLTAISVSAD...L...D.C.V...K....Y.M.....G.SA..Q...TG.....Y..........S.......R....V...EM......IDEh..nMKS.............................. [...]
+C8V9S4_EMENI/46-154    ................................................................................feiyihlppgdhn--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+Q5B3I7_EMENI/46-154    ................................................................................feiyihlppgdhn--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+A2QDC5_ASPNC/643-949   ............................................................................................l-LLVIVPD..KNSFT..YTRIKKS.CD...CR..W..GVPSQVMQS.T..H.VIKG--................NAQYISNVLM.......KVNAK..........LGGV.T.....SRA.V....SKV.Q-........-......G..A....S...L...R.....P.G..S.I..................................IIGADVTHPPMGV...............-WSP..SMAALSVSKD...P...Y.G.S...S....Y.F.....G.SC..E...AN.....M..........D.......R....V...EI......ISRt..sMEF.............................. [...]
+Q2UKV9_ASPOR/543-849   ............................................................................................l-LLIIVPD..KNSFT..YLRIKKS.CD...CR..W..GVPSQVLQS.A..H.VAKA--................NPQYISNVLM.......KVNAK..........LGGT.T.....A--.R....IIP.KV........N......D..A....S...L...K.....P.M..T.M..................................IIGADVTHPTIGV...............-WSP..SMAAVSVCMD...T...F.G.G...R....Y.W.....G.AC..E...TN.....G..........D.......R....V...EV......IARa..nMEH.............................. [...]
+B8N3T1_ASPFN/436-742   ............................................................................................l-LLIIVPD..KNSFT..YLRIKKS.CD...CR..W..GVPSQVLQS.A..H.VAKA--................NPQYISNVLM.......KVNAK..........LGGT.T.....A--.R....IIP.KV........N......D..A....S...L...K.....P.M..T.M..................................IIGADVTHPTIGV...............-WSP..SMAAVSVCMD...T...F.G.G...R....Y.W.....G.AC..E...TN.....G..........D.......R....V...EV......IARa..nMEH.............................. [...]
+A1CKK4_ASPCL/543-849   ............................................................................................l-LLIIVPD..KNSFT..YTRIKKS.CD...CR..W..GVPSQVLQS.G..H.VIKM--................NPQYASNVLM.......KVNAK..........LGGT.-.....-TA.R....AMP.KI........T......E..A....S...L...R.....P.R..S.M..................................IIGADVTHSPLGV...............-WSP..SMAAMSVCMD...T...F.G.G...R....Y.W.....G.AC..E...AN.....G..........D.......R....N...EI......IASs..nIEV.............................. [...]
+A1D6W7_NEOFI/543-849   ............................................................................................l-LLIIVPD..KNSFT..YTRIKKS.CD...CR..W..GVPSQVLQS.G..H.CVKL--................NPQYASNVLM.......KVNAK..........LGGT.-.....-TA.R....AVP.KV........T......E..A....T...L...R.....P.R..S.M..................................IIGADVTHSPLGV...............-WSP..SMAAMSVCMD...A...F.G.G...R....Y.W.....G.AC..E...AN.....G..........D.......R....L...EI......IATs..nIEV.............................. [...]
+B0XXP5_ASPFC/564-870   ............................................................................................l-LLIIVPD..KNSFT..YTRIKKS.CD...CR..W..GVPSQVLQS.G..H.CVKL--................NPQYASNVLM.......KVNAK..........LGGT.-.....-TA.R....AVP.KV........T......D..A....T...L...R.....P.R..S.M..................................IIGADVTHPSLGV...............-WSP..SMAAMSVCMD...T...F.G.G...R....Y.W.....G.AC..E...AN.....G..........D.......R....L...EI......IATs..nIEV.............................. [...]
+Q4WXX3_ASPFU/564-870   ............................................................................................l-LLIIVPD..KNSFT..YTRIKKS.CD...CR..W..GVPSQVLQS.G..H.CVKL--................NPQYASNVLM.......KVNAK..........LGGT.-.....-TA.R....AVP.KV........T......D..A....T...L...R.....P.R..S.M..................................IIGADVTHPSLGV...............-WSP..SMAAMSVCMD...T...F.G.G...R....Y.W.....G.AC..E...AN.....G..........D.......R....L...EI......IATs..nIEV.............................. [...]
+Q0CNV7_ASPTN/543-854   ............................................................................................l-LVVIVAD..KNSFN..YTRIKKS.CD...CR..W..GVPSQLLQA.A..Q.VAKN--................NPQYISNVLM.......KVNAK..........LGGT.T.....AKI.I....PKT.P-........-......D..A....T...L...K.....P.M..S.M..................................IIGADVTHSPLGV...............-WSP..SMAAISVCAD...T...F.G.G...R....Y.W.....G.AC..E...AN.....G..........E.......R....N...EI......INRa..nMEH.............................. [...]
+B6H4L5_PENCW/673-980   ............................................................................................l-MVFIVPD..KDSFV..YLRIKKS.SD...CR..Y..GTPSQVLQA.A..H.CINN--................RPQYHANVLM.......KVNAK..........LGGI.-.....-TA.R....AVP.KS........K......S..S....G...L...R.....P.G..S.M..................................IIGADVTHPMMGV...............-WTP..SLAAMSVSAN...S...T.A.T...R....Y.M.....G.GC..E...TN.....G..........D.......R....I...EI......IRDk..vVEY.............................. [...]
+C1G1H6_PARBD/510-817   ............................................................................................l-LIFVVSE..KNAFH..YSRIKKS.CD...CR..F..GVPSQVLQA.T..Q.VVKC--................NGQYISNVLM.......KVNAK..........LGGT.-.....TAR.V....SSK.IT........K......G..L....-...-...L.....P.F..T.M..................................IIGADVSHSAPGS...............-PAP..SMAAVSVSMD...Q...F.G.G...R....Y.A.....G.AC..Q...TN.....G..........D.......H....V...EM......ISEa..nVES.............................. [...]
+C1GU57_PARBA/495-755   .........................................................................................vdtf--------..-----..-------.--...--..-..---------.-..-.------................----------.......-VNAK..........LGGT.-.....TAR.V....SSK.IT........K......G..L....-...-...L.....P.F..T.M..................................IIGADVSHSAPGS...............-PAP..SMAAVSVSMD...Q...F.G.G...R....Y.A.....G.AC..Q...TN.....G..........D.......H....V...EM......ISEa..nVES.............................. [...]
+C0S3N8_PARBP/535-823   .............................................................................fnlrpellifvvlqat--------..-----..-------.--...--..-..---------.-..-.-QVV-K...............cNGQYISNVLM.......KVNAK..........LGGT.-.....TAR.V....SSK.IT........K......G..L....-...-...L.....P.F..T.M..................................IIGADVSHSAPGS...............-PAP..SMAAVSVSMD...Q...F.G.G...R....Y.A.....G.AC..Q...TN.....G..........D.......H....V...EM......ISEa..nVES.............................. [...]
+C5G7J1_AJEDR/547-854   ............................................................................................l-LIFIVMD..KNAFH..YTRIKKS.CD...CR..F..GVVSQVLQA.S..Q.VAKC--................NGQYISNVLM.......KVNAK..........LGGT.T.....-AR.I....ASK.IT........K......G..L....-...-...A.....P.F..S.M..................................IIGADISHSAPGS...............-FAP..SMAAMTVSMD...Q...F.G.G...R....Y.T.....G.AC..E...TN.....G..........D.......R....V...EM......ISQa..nIKS.............................. [...]
+C5JJJ6_AJEDS/547-854   ............................................................................................l-LIFIVMD..KNAFH..YTRIKKS.CD...CR..F..GVVSQVLQA.S..Q.VAKC--................NGQYISNVLM.......KVNAK..........LGGT.T.....-AR.I....ASK.IT........K......G..L....-...-...A.....P.F..S.M..................................IIGADISHSAPGS...............-FAP..SMAAMTVSMD...Q...F.G.G...R....Y.T.....G.AC..E...TN.....G..........D.......R....V...EM......ISQa..nIKS.............................. [...]
+C6HRE3_AJECH/547-854   ............................................................................................l-LIFIVMD..KNAFH..YTRVKKS.CD...CR..F..GVPSQVLQA.S..Q.VAKC--................NGQYISNVLM.......KVNAK..........LGGT.-.....TAR.I....SSK.IT........K......G..L....-...-...P.....P.Y..T.M..................................IIGADISHSSPGS...............-VAP..SMAAMTVSMD...Q...F.G.G...R....Y.T.....A.AC..E...TN.....G..........D.......H....V...EM......ISQa..nIKS.............................. [...]
+C0NUS8_AJECG/547-854   ............................................................................................l-LIFIVMD..KNAFH..YTRVKKS.CD...CR..F..GVPSQVLQA.S..Q.VAKC--................NGQYISNVLM.......KVNAK..........LGGT.-.....TAR.I....SSK.IT........K......G..L....-...-...P.....P.Y..T.M..................................IIGADISHSSPGS...............-VAP..SMAAMTVSMD...Q...F.G.G...R....Y.T.....A.AC..E...TN.....G..........D.......H....V...EM......ISQa..nIKS.............................. [...]
+A6RGK9_AJECN/547-854   ............................................................................................l-LIFIVMD..KNAFH..YTRVKKS.CD...CR..F..GVPSQVLQA.S..Q.VAKC--................NGQYISNVLM.......KVNAK..........LGGT.-.....TAR.I....SSK.IT........K......G..L....-...-...P.....P.Y..T.M..................................IIGADISHSSPGS...............-VAP..SMAAMTVSMD...Q...F.G.G...R....Y.T.....A.AC..E...TN.....G..........D.......H....V...EM......ISQa..nIRS.............................. [...]
+C5FDD8_NANOT/542-847   ............................................................................................l-MIFVVAD..RQSFH..YLRIKKS.CD...CR..F..GVPSQVLQG.Q..Q.VAKC--................NGQYISNVLM.......KINAK..........LGGT.T.....-AR.A....VSK.HS........S......-..-....G...L...P.....P.Y..T.M..................................IIGSDVSHSSPGS...............-FSP..SMAAMTVSMD...T...F.G.G...R....Y.T.....A.GC..E...TN.....G..........E.......R....V...EL......ISQa..nIKS.............................. [...]
+D4AMR8_ARTBE/628-933   ............................................................................................l-MIFVVAD..KQSFH..YLRIKKS.CD...CR..F..GVPSQVLQG.Q..Q.VVKC--................NGQYISNVLM.......KINAK..........LGGT.T.....ARA.V....SKQ.CS........-......-..-....G...L...P.....P.F..T.M..................................IIGADVSHSSPGS...............-FSP..SMAAMTVSMD...T...F.G.G...R....Y.T.....A.GC..E...TN.....G..........E.......R....V...EL......ISQa..nIKS.............................. [...]
+D4DBM7_TRIVC/515-807   ............................................................................................l-MIFVVAD..KQSFH..YLRIKKS.CD...CR..F..GVPSQVLQG.Q..Q.VGKC--................NGQYISNVLM.......KINAK..........LGGT.T.....ARA.V....SKQ.CS........-......-..-....G...L...P.....P.F..T.M..................................IIGADVSHSSPGS...............-FSP..SMAAMTVSMD...T...F.G.G...R....Y.T.....A.GC..E...TN.....G..........E.......R....V...EL......ISQa..nIRS.............................. [...]
+C5P9D5_COCP7/668-975   ............................................................................................l-LILIVQD..RHSFH..YLRIKKS.CD...CR..F..GVPSQVLQG.R..Q.VVKG--................SGQYISNVLM.......KINAK..........LGGT.-.....TAR.S....HSR.Y-........-......N..T....S...L...P.....P.F..T.M..................................IIGADVSHSSPGS...............-YAP..SMASFTVCMD...T...F.G.G...R....Y.T.....A.GC..E...TN.....G..........E.......R....R...EI......ISPl..nIKE.............................. [...]
+C4JZ88_UNCRE/552-859   ............................................................................................i-LILVVQD..KQSFH..YLRIKKS.CD...CR..F..GVPSQVLQG.Q..Q.VVKG--................SPQYISNVLM.......KVNAK..........LGGT.T....aRAI.S....KYN.PS........L......P..-....-...-...-.....P.Y..T.M..................................VIGADVSHASPGS...............-HAP..SMASFTVCMD...T...F.G.G...R....Y.N.....A.GC..E...TN.....G..........E.......R....R...EI......ISPa..nIRD.............................. [...]
+Q0U7V7_PHANO/645-956   ............................................................................................f-LFFVVND..RNVDV..YRRIKKS.CD...IR..F..GVASQVLQA.K..H.VMSA--................SPQYISNVCM.......KVNAK..........LGGC.T....sVAK.S....NVI.PK........V.....aP..K....S...P...S.....I.P..T.M..................................VVGADVSHPAPGAg.............sSEAA..SFAAITVSAD...P...F.F.A...K....Y.W.....A.EV..Q...TN.....G..........N.......R....V...EM......VTTs..nIDE.............................. [...]
+B2W8P0_PYRTR/611-920   ............................................................................................n-FMFFIVN.dRNVEV..YRRIKKS.CD...IR..F..GVASQCLQA.K..H.VLSA--................SPQYISNVCM.......KVNAK..........LGGC.TsvaksQLI.P....KIA.--........-......P..K....S...A...S.....I.P..T.M..................................VVGADVSHPAPGAa.............sGEAA..SFAAITVSAD...A...Y.F.V...K....Y.W.....A.EC..N...TN.....G..........N.......R....V...EM......VTTt..nIYE.............................. [...]
+A2DXK9_TRIVA/462-624   .............................................................................................FIICVLPD..GNSQL..YSTLKIF.LT...SS..L..GIPSSFVTD.E..S.LVANKQ...............sMDQIATDMCL.......SIICK..........TGGV.P....fY-V.S....PVS.LP........L......-..-....-...-...-.....R.N..T.V..................................FAGFEVSQTNVAAva..........sydN---..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+A1D5I6_NEOFI/71-143    ..........................................................................................iey--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+C4V9J2_NOSCE/489-791   ...........................................................................................is--LVVLPD..KSTAR..YEEIKRK.TE...TR..S..RMVTQCVLE.K..N.FSRLDN................-PQFAGNLLL.......KINSK..........LGGV.N.....FKV.D....K--.-E........F......S..V....V...K...G.....K.A..T.L..................................VIGIDVNHPGIGD...............LNSP..SVVAIVGGMN...N...E.L.T...S....F.K.....T.II..K...QQ.....D..........R.......R....H...EI......VEN....LKD.............................. [...]
+C4L1M1_EXISA/321-484   ............................................................................................g-VVVVIAE.eASLQH.sYQAIKRQ.FG...GK..Q..DVVTQCVEL.H..D.RVLN--................SEDTLYNILL.......GIYVK..........AGLQ.-.....PWI.L....GEP.LH........S......D..C....-...-...-.....-.-..-.-..................................FVGLDVSHENGKH...............----..-AAGIIQIIG...K...D.G.A...M....I.K.....Q.KA..L..sTS.....E..........A.......G....E...KI......SSE...tMRE.............................. [...]
+Q70IH5_ARAHA/1-61      .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+O61931_CAEEL/762-1081  .....................................................................................vysgnnne--------..--YND..YNVLKYL.AD...NK..Y..GIHTQGILE.K..S.LGVVGPs..............pKNCALTRLMV......eKVLGK..........VGTT.Hr...kLER.G....GAH.KT........W......T..I....F...T...Dp...aK.P..T.L..................................VLGIDVSHPSTRDret.........gnvLQKM..SAATVVGNID...L...D.V.T...E....F.R.....A.SS..R...IQ.....D..........T.......G....V...EC......LID....FSK.............................. [...]
+A8WPC9_CAEBR/828-1145  ......................................................................................tlnlqrq--------..DFQND..YNLFKWL.AD...NH..V..GIFTQGMLY.K..T.FNGIGSt.............paTCKYTSQIVE.......KVLGK..........VGTT.-.....HRR.L....ERN.GE........H......K..S....W...K...Ki..vvE.P..T.L..................................LLGVDVSHPSTRDlmg.........edqVKRL..SVATVVGNID...L...D.C.T...E....Y.R.....A.SS..K...IQ.....D..........V.......G....E...ER......IVR....FEN.............................. [...]
+A8XS10_CAEBR/818-1134  ........................................................................................cerse--------..-FQND..YNLFKWM.AD...NE..V..GVFTQGLLY.K..T.FNSIGNt.............paSCRFTRLIVE.......KILGK..........IGTT.-.....HRR.L....ERD.GD........H......K..S....W...K...KlvnpaE.P..T.L..................................FLGVDVSHPSARDlkg.........ddpVKRL..SVATVVGNID...L...D.C.T...E....Y.R.....A.SS..K...LQ.....D..........V.......G....E...ER......IVR....FQE.............................. [...]
+A8XP19_CAEBR/721-1037  ........................................................................................cerpd--------..-FQND..YNLFKWM.SD...NE..V..GVFTQGILY.K..T.FNSIGLs.............paPCKYTSQLVE.......KILGK..........VGTT.-.....HRR.L....ERD.GE........H......K..S....W...K...KlvnpaE.P..T.L..................................LLGVDVSHPSTRDlkg.........edpVKRL..SVATVVGNID...F...D.C.T...E....F.R.....A.SS..K...IQ.....D..........V.......G....E...ER......IVR....FDE.............................. [...]
+A8XRY5_CAEBR/161-269   ....................................................................................tstivnlnk--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+A8XN44_CAEBR/716-1005  ..............................................................pgtildwfislkknldeykqsedevivplvf--------..-----..-------.--...--..-..---------.-..-.------................---------V.......IFEVR..........FTTL.N.....LER.Q....DFQ.ND........Y......-..-....-...-...T.....E.P..T.L..................................LLGVDVSHPSTRDlkg.........edhVKRL..SIATVVGNID...L...D.C.T...E....Y.R.....A.SS..K...IQ.....D..........V.......G....E...ER......IVR....FEN.............................. [...]
+A8PVW7_BRUMA/492-800   ............................................................................................l-MIFITPE..KNDDI..YGRIKVT.CD...KE..E..GVACQVILV.E..T.FLKMLGn.............peRNAVSHNICL.......KINVK..........LDGI.N....nEVA.R....NQN.YW........K......K..F....T..dK...E.....S.P..T.L..................................FMGIDVTHPPSGD...............TSAP..SIASIIGSLN...I...S.A.T...K....Y.A.....A.SL..K...IQ.....Q..........P.......G....V...EV......MTY....AVD.............................. [...]
+B6VBQ1_CAEBE/1034-1381 ..........................................................................................lvf-IVVSGPH..KDQDA..YGYVKHH.CD...VN..L..GVVSQYVRA.E..T.AKLT--................ERNIYNTIAL.......KINAK..........LGGV.Nq...eLNF.S....E-N.AE........M......S..L....A...E...K.....E.ErkK.Lpl..............................kmFVGIDVTHPTTGS...............GIDF..SIAAVVASVN...A...S.G.T...K....Y.Q.....N.MI..V...TQ.....EecvpgerpgaH.......G....R...ER......TDI....LEG.............................. [...]
+A8XVL1_CAEBR/571-952   ...........................................................................................ki-LLFIVFS..KRRWN.fYGFVKQF.CD...VE..L..GVASQHVTA.H..V.AKRALQdms.........shkpSKRIFYQIAL.......KINGK..........LGGV.Nq..elDWS.E....NAE.MT........V......E..E....K...E...K.....R.K..N.Mpl..............................rmYVGIDVTHPTNGS...............GIDY..SIAAIVASMN...P...G.G.T...V....Y.R.....N.MI..V...TQ.....E..........E.......N....R...PG......ERP....VAHgrertdilegk................... [...]
+Q9XU82_CAEEL/618-985   ............................................................................................v-LMFIIIS.kRQLNA..YGFVKHY.CD...HT..I..GVANQHITS.E..T.VTKALAslr.........hekgSKRIFYQIAL.......KINAK..........LGGI.NqeldwSEI.A....EIS.PE........E......K..E....-...-...R.....R.K..T.Mpl..............................tmYVGIDVTHPTSYS...............GIDY..SIAAVVASIN...P...G.G.T...I....Y.R.....N.MI..V...TQ.....E..........E.......C....R...PG......ERA....VAHgrert......................... [...]
+O46002_CAEEL/57-176    ...........................................................ieymaseynytikiknhfvyslapelskknpkvk--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+Q8BJP2_MOUSE/364-665   ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY.............................. [...]
+Q8CGU0_MOUSE/527-843   ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.YE........R......-..-....-...-...-.....-.-..L.Lalsrgppge...............ssavfqqpviFLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY.............................. [...]
+A2VDG1_MOUSE/513-814   ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY.............................. [...]
+D2H607_AILME/507-808   ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY.............................. [...]
+B2RAD8_HUMAN/515-816   ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY.............................. [...]
+Q5TA58_HUMAN/440-741   ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY.............................. [...]
+A1L365_MOUSE/515-816   ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY.............................. [...]
+AGO1_HUMAN/515-816     ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY.............................. [...]
+D4AC38_RAT/515-816     ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY.............................. [...]
+AGO1_MOUSE/515-816     ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.AVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY.............................. [...]
+B3KME0_HUMAN/440-741   ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....H-Q.R-........-......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY.............................. [...]
+Q4S7L5_TETNG/517-818   ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY.............................. [...]
+A9QW17_TRICA/69-158    ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PR........I......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+Q4S7L6_TETNG/228-304   ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQ-.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+D4A2P5_RAT/513-742     ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...EI......AQE...lLFSqevv.......................... [...]
+Q8CGT8_MOUSE/660-885   ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KMNAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...EI......TQE....LLYsqevv......................... [...]
+AGO4_MOUSE/509-820     ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KMNAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...EI......TQE....LLYsqevv......................... [...]
+Q8BTF2_MOUSE/35-346    ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KMNAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...EI......TQE....LLYsqevv......................... [...]
+A7MD27_HUMAN/509-820   ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...EI......SQE....LLYsqevi......................... [...]
+AGO4_CHICK/442-753     ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...ET......SQE....LLYsqevi......................... [...]
+Q4R7V5_MACFA/1-211     ............................................................................................m--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..---------D...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...EI......SQE....LLYsqevi......................... [...]
+AGO4_HUMAN/509-820     ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...EI......SQE....LLYsqevi......................... [...]
+D2H608_AILME/505-816   ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...EI......SQE....LLYsqevi......................... [...]
+Q9NXV9_HUMAN/35-346    ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...EI......SQE....LLYsqevi......................... [...]
+AGO4_XENLA/532-843     ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...ET......TQE....LLYsqevi......................... [...]
+Q4SVE6_TETNG/553-864   ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...DM......SQE...qLFSqevi.......................... [...]
+Q8CGT8_MOUSE/1000-1102 .....................................................................................lcsfmffl--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+D4A2P5_RAT/843-954     ..........................................................................vrhcshdnflcssivfivg--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+AGO3_DANRE/518-819     ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EV......IQD....LAS.............................. [...]
+A3KFX7_MOUSE/1-109     .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+Q4TBP2_TETNG/578-853   ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCV--.-..-.------................--QTLSNLCL.......KINVK..........LGGI.N....nILV.P....QQR.YQ........P......-..-....-...-...-.....H.P..G.LgcsglssgvcvcvcvcetltsrprrpsvfqqpviFLGADVTHPPAGDgkkp......siaavRAPR..SRCSVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EV......IQD....LAS.............................. [...]
+A3KFX6_MOUSE/1-140     .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+Q4TF92_TETNG/161-225   .....................................................................ragerqcvcvcvregaqqvtfrcs--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+A7SCI6_NEMVE/496-743   ............................................................................................l-IVVALPD.rGNKDV..YNEVKRV.GD...TV..L..GIPTQCVQM.K..Q.FTMA--................KPQVCSNIAM.......KINGK..........LGGT.N.....HVI.A....DSL.KA........TitddkgN..G....I...F...N.....S.P..V.I..................................IFGADVTHPAPGD...............NGIP..SIAAVVASLN...R...N.A.S...R....Y.C.....A.RV..R...PQthmkcK..........Q.......A....Q...EI......IVD....LAD.............................. [...]
+AGO3_BOVIN/518-820     ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS.............................. [...]
+AGO3_CHICK/518-819     ............................................................................................l-IIVILPG..-KTPV..YAEVKRA.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS.............................. [...]
+D2H606_AILME/513-814   ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS.............................. [...]
+AGO3_HUMAN/518-819     ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS.............................. [...]
+B4DY67_HUMAN/154-455   ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS.............................. [...]
+B1ALI0_HUMAN/284-585   ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS.............................. [...]
+A8KA05_HUMAN/518-819   ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS.............................. [...]
+B4E1P5_HUMAN/346-647   ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS.............................. [...]
+Q7M738_MOUSE/426-707   .....................................................................................rytfgygh--------..-----..-------.--...--..-..----TCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS.............................. [...]
+Q3TBP7_MOUSE/518-819   ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS.............................. [...]
+AGO3_MOUSE/518-819     ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS.............................. [...]
+D2HF39_AILME/511-813   ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAT.............................. [...]
+AGO2_RAT/517-819       ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA.............................. [...]
+A1A563_MOUSE/517-819   ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA.............................. [...]
+Q8CGT9_MOUSE/501-743   ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA.............................. [...]
+Q8CGT7_MOUSE/455-570   .......................................................................................vlgmat--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......Q..A....V...F...Q.....Q.P..V.I..................................FLGANVTYPPVGD...............GKKP..SIAAVMGSMD...A...H.P.N...R....Y.C.....V.TV..C...VQ.....Q..........H.......Q....Q...EI......IQD....---.............................. [...]
+Q6P239_MOUSE/277-579   ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLYL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA.............................. [...]
+AGO2_BOVIN/517-819     ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLWL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA.............................. [...]
+AGO2_RABIT/497-799     ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA.............................. [...]
+B0JYP5_BOVIN/517-819   ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA.............................. [...]
+Q6PHA2_MOUSE/94-396    ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA.............................. [...]
+AGO2_HUMAN/516-818     ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA.............................. [...]
+A4FVC0_HUMAN/465-767   ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA.............................. [...]
+Q8R3Q7_MOUSE/187-489   ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA.............................. [...]
+AGO2_MOUSE/517-819     ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA.............................. [...]
+AGO2_XENLA/519-821     ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LSA.............................. [...]
+C0IN02_XENLA/519-821   ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LSA.............................. [...]
+AGO2_XENTR/528-830     ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LSA.............................. [...]
+Q4RKH3_TETNG/508-822   ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQV.K..N.VQKT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.--........-......P..L....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...DI......IQD....LAT.............................. [...]
+C9V4A2_CTEID/306-581   ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQV.K..N.VQKT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.--........-......P..L....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...DI......IQD....LAT.............................. [...]
+B0F0Y5_9TELE/526-828   ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQV.K..N.VQKT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.--........-......P..L....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...DI......IQD....LAT.............................. [...]
+Q8CGT7_MOUSE/576-634   ..........................................................................................kls--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+Q4SXU1_TETNG/1-206     ...........................................................................................sf--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..--IQVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EV......IQD....LAS.............................. [...]
+B7QCC4_IXOSC/509-810   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAS.............................. [...]
+A9NJ58_PENMO/569-898   ...........................................................................................ql--VCVVLP..GKTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....GIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...NG......STT...qGQSasdgsrprqltfa................. [...]
+Q071E1_PENMO/569-898   ...........................................................................................ql--VCVVLP..GKTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....GIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...NG......STT...qGQSasdgsrprqltfa................. [...]
+A7XZ43_PENMO/569-898   ...........................................................................................ql--VCVVLP..GKTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....GIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...NG......STT...qGQSasdgsrprqltfa................. [...]
+D2XYX4_PENJP/572-901   ...........................................................................................ql--VCVVLP..GKTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....GIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...NG......STT...qGQSasdgsrprqltfa................. [...]
+A9NJ57_PENMO/572-901   ...........................................................................................ql--VCVVLP..GKTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....GIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...NG......STT...qGQSasdgsrprqltfa................. [...]
+D2DK65_PENJP/572-901   ...........................................................................................ql--VCVVLP..GKTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....GIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...NG......STT...qGQSasdgsrprqltfa................. [...]
+D2DK66_PENJP/569-898   ...........................................................................................ql--VCVVLP..GKTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....GIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...NG......STT...qGQSasdgsrprqltfa................. [...]
+A7BJS5_BOMMO/569-871   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SLR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGVDVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......VHE....MSS.............................. [...]
+B4LJF3_DROVI/646-948   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+B4KTB5_DROMO/643-945   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+B4P449_DROYA/624-926   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+Q27IQ2_DROSI/554-851   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+Q27IR0_DROME/554-851   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+B4JW20_DROGR/647-949   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+Q7KY08_DROME/607-909   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+B3NRF4_DROER/624-926   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+B4INL3_DROSE/624-926   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+B4GGS7_DROPE/642-944   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+Q28ZU1_DROPS/642-944   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+B3MHG1_DROAN/641-943   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+Q32KD4_DROME/641-943   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+Q960T1_DROME/258-560   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+B4N5V9_DROWI/642-944   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...G...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+Q8T059_DROME/81-383    ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....STR.PK........-......-..-....V...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+B0WFU8_CULQU/621-923   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...D.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+Q7PZ41_ANOGA/638-940   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...D.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+Q16EE2_AEDAE/482-784   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...D.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+Q16M62_AEDAE/604-906   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...D.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+B3VCG6_STRPU/599-900   ............................................................................................l-IIVVLPG..-KTPV..YAEVKRV.GD...IL..L..GIATQCVQV.K..N.VNRT--................TAQTLSNLCL.......KIKVK..........LGGV.N....nILA.P....NIR.PR........I......-..-....-...F...S.....E.P..V.I..................................FCGADVTHPPAGD...............DKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.SV..R...IQ.....T..........H.......R....V...EI......IQD....LQA.............................. [...]
+Q4TBP2_TETNG/868-934   .........................................................................................alll--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+A7RQ46_NEMVE/511-812   .............................................................................................MILVVLPG..-KTPV..YAEVKRV.GD...TM..L..GVITQCIQG.K..N.VTKP--................SPQTLSNLCL.......KINAK..........LGGV.N....nILA.P....EIR.PP........V......-..-....-...F...R.....E.P..V.I..................................FLGADVTHPAAGD...............DKRP..SVAAVVGSMD...A...H.P.S...R....Y.Y.....A.SV..R...VQ.....T..........H.......R....Q...EI......IAE....LAA.............................. [...]
+Q4TF92_TETNG/239-305   .........................................................................................alll--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B2RFN1_OIKDI/771-1072  ............................................................................................l-IVVVLPG..-KTPV..YAEVKRV.GD...TC..L..GIATQCVQV.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....NMR.PK........I......-..-....-...F...Q.....E.P..V.I..................................FIGADVTHPPAGD...............KRKP..SIAAVVASMD...G...H.P.S...R....Y.C.....A.AV..R...VQ.....K..........H.......R....Q...EV......IDD....LSN.............................. [...]
+C8TEF3_OIKDI/573-874   ............................................................................................l-IMVILPG..-RTPV..YAEVKRV.GD...TL..L..GVATQCVQV.K..N.VTKV--................TTQTLSNLCL.......KINVK..........LGGI.N....nILL.P....NAR.PR........V......-..-....-...F...N.....E.P..V.I..................................FIGADVTHPPAGD...............RRKP..SIAAVVASID...A...H.P.S...R....Y.C.....A.SV..R...VQ.....R..........H.......R....Q...EA......IED....LTN.............................. [...]
+C3ZN91_BRAFL/470-771   ............................................................................................l-ILVVLPG..-KTPV..YAEVKRV.GD...TM..L..GVATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGV.N....nILV.P....HIR.PR........V......F..L....-...-...-.....E.P..V.I..................................FIGADVTHPPAGD...............GRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....T..........H.......R....Q...EI......IAD....LAS.............................. [...]
+C3ZQ22_BRAFL/680-848   .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+D2XMQ5_SACKO/1-219     .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------HPPAGD...............MKKP..SIAAVVASMD...A...H.P.S...R....Y.A.....A.SV..R...VQ.....S..........H.......R....Q...EL......IEE....LSH.............................. [...]
+C4Q6D1_SCHMA/608-835   ..........................................................................................xxx--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-LGADVTHPPAGD...............KTKP..SIAAVVASMD...A...H.P.S...R....Y.S.....A.TV..R...VQ.....S..........H.......R....Q...EI......IHD....LYP.............................. [...]
+Q5C3Y0_SCHJA/4-157     ............................................................................................y--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+A8WKF9_CAEBR/562-864   ...........................................................................................ql-VVIVLPG..-KTPV..YAEIKRV.GD...TV..L..GIATQCIQS.K..N.VTRT--................TPQTLSNICM.......KMNMK..........LGGV.N....cVLA.P....NVR.PK........I......-..-....-...F...S.....E.S..V.I..................................FLGCDITHPPAGD...............SRKP..SVAAIVGSMD...A...H.P.S...K....Y.A.....A.TV..R...VQ.....P..........N.......R....Q...EI......ITE....MAS.............................. [...]
+Q86B39_CAEEL/547-848   ............................................................................................l-IVVVLPG..-KTPI..YAEVKRV.GD...TV..L..GIATQCVQA.K..N.AIRT--................TPQTLSNLCL.......KMNVK..........LGGV.N....sILL.P....NVR.PR........I......-..-....-...F...N.....E.P..V.I..................................FLGCDITHPAAGD...............TRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......ITD....LTY.............................. [...]
+O16720_CAEEL/566-867   ............................................................................................l-IVVVLPG..-KTPI..YAEVKRV.GD...TV..L..GIATQCVQA.K..N.AIRT--................TPQTLSNLCL.......KMNVK..........LGGV.N....sILL.P....NVR.PR........I......-..-....-...F...N.....E.P..V.I..................................FLGCDITHPAAGD...............TRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......ITD....LTY.............................. [...]
+B2L7Q3_CAERE/1-268     .............................................................................................--------..-----..-------.--...--..-..-IATQCVQA.K..N.AIRT--................TPQTLSNLCL.......KMNVK..........LGGV.N....sILL.P....NVR.PR........I......-..-....-...F...N.....E.P..V.I..................................FFGCDITHPPAGD...............SRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......ISD....LTY.............................. [...]
+B2L7P9_CAERE/1-269     .............................................................................................--------..-----..-------.--...--..-..GIATQCVQA.K..N.AIRT--................TPQTLSNLCL.......KMNVK..........LGGV.N....sILL.P....NVR.PR........I......-..-....-...F...N.....E.P..V.I..................................FFGCDITHPPAGD...............SRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......ISD....LTY.............................. [...]
+A8X4Z3_CAEBR/691-992   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GIATQCVQA.K..N.AIRT--................TPQTLSNLCL.......KMNVK..........LGGV.N....sILL.P....NVR.PR........I......-..-....-...F...N.....E.P..V.I..................................FFGCDITHPPAGD...............SRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......ISD....LTY.............................. [...]
+Q3LTR7_CAEEL/668-969   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GIATQCVQA.K..N.AIRT--................TPQTLSNLCL.......KMNVK..........LGGV.N....sILL.P....NVR.PR........I......-..-....-...F...N.....E.P..V.I..................................FFGCDITHPPAGD...............SRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......ISD....LTY.............................. [...]
+Q20578_CAEEL/660-961   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GIATQCVQA.K..N.AIRT--................TPQTLSNLCL.......KMNVK..........LGGV.N....sILL.P....NVR.PR........I......-..-....-...F...N.....E.P..V.I..................................FFGCDITHPPAGD...............SRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......ISD....LTY.............................. [...]
+B6VQ75_CAEEL/681-982   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GIATQCVQA.K..N.AIRT--................TPQTLSNLCL.......KMNVK..........LGGV.N....sILL.P....NVR.PR........I......-..-....-...F...N.....E.P..V.I..................................FFGCDITHPPAGD...............SRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......ISD....LTY.............................. [...]
+A8P168_BRUMA/623-925   ...........................................................................................ql--VCVVLP..GKTPV..YAEVKRV.GD...TV..L..GIATQCVQA.K..N.VIKT--................TPQTLSNLCL.......KMNVK..........LGGV.N....sILL.P....AVR.PR........I......-..-....-...F...T.....E.P..V.I..................................FLGCDITHPPAGD...............SRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....A..........H.......R....Q...EI......ISD....LTY.............................. [...]
+A8WWP9_CAEBR/632-910   ...........................................................................................ql-VICIVSG..-KSTV..YGDLKRK.GD...L-..L..GLTTQCIRT.N..N.VARV--................SPHTLSNLCM.......KINSK..........LGGV.N.....VVL.S....APP.PS........T......A..-....-...-...T.....T.P..T.L..................................FIGCHLSRNSVASsses......ssslnYSDT..SIACLVGSMD...G...H.P.T...R....F.A.....P.IF..R...LQ.....P..........R.......N....A...NT......IID....MSE.............................. [...]
+Q9XVI3_CAEEL/574-882   ............................................................................................l-VLCIVPG..-KSVV..YGELKRK.GE...L-..L..GLTTQCVRS.Q..N.VSKA--................SPHTLSNLCM.......KINSK..........LGGI.N.....VIL.S....S-P.PQ........-......-..S....L...N...S.....E.P..V.L..................................FIGCHLTRSSLASssds......tssiaHCDS..SIACLVGSMD...G...H.P.T...Q....F.S.....P.IF..R...TQ.....P..........R.......H....Q...RT......IVD....MCE.............................. [...]
+C5K8K7_9ALVE/727-977   ...............................................................................aftlerseavggfw--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..-IASAVGSVD...N...D.V.N...L....Y.A.....T.AS..S...VQ.....D..........T.......G....T...RI......LD-....IET.............................. [...]
+B9Q8Q1_TOXGO/379-692   ............................................................................................l-LFVILNE..RVSLD..IYQIVKS.-C...TD..V..NFPSQCLNG.R..H.KCIDAIfrg..........dnpNPQYFANVMS.......KVNMK..........LQGV.N.....QTL.E....ADI.IK........Q......E..I....G...T...D.....K.S..T.L..................................VLAVETSFFANPTkt..........sppPTAP..IVCACTGNMD...D...D.L.G...A....F.G.....H.AV..C...VE.....S..........R.......K....H...PI......VTD....IGS.............................. [...]
+B9PJN3_TOXGO/379-693   ............................................................................................l-LFVILNE..RVSLD..IYQIVKS.-C...TD..V..NFPSQCLNG.R..H.KCIDAIfrg.........adnpNPQYFANVMS.......KVNMK..........LQGV.N.....QTL.E....ADI.IK........Q......E..I....G...T...D.....K.S..T.L..................................VLAVETSFFANPTkt..........sppPTAP..IVCACTGNMD...D...D.L.G...A....F.G.....H.AV..C...VE.....S..........R.......K....H...PI......VTD....IGS.............................. [...]
+Q1L2C8_TOXGO/379-693   ............................................................................................l-LFVILNE..RVSLD..IYQIVKS.-C...TD..V..NFPSQCLNG.R..H.KCIDAIfrg.........adnpNPQYFANVMS.......KVNMK..........LQGV.N.....QTL.E....ADI.IK........Q......E..I....G...T...D.....K.S..T.L..................................VLAVETSFFANPTkt..........sppPTAP..IVCACTGNMD...D...D.L.G...A....F.G.....H.AV..C...VE.....S..........R.......K....H...PI......VTD....IGS.............................. [...]
+Q1L1E2_TOXGO/161-474   ............................................................................................l-LFVILNE..RVSLD..IYQIVKS.-C...TD..V..NFPSQCLNG.R..H.KCIDAIfrg..........dnpNPQYFANVMS.......KVNMK..........LQGV.N.....QTL.E....ADI.IK........Q......E..I....G...T...D.....K.S..T.L..................................VLAVETSFFANPTkt..........sppPTAP..IVCACTGNMD...D...D.L.G...A....F.G.....H.AV..C...VE.....S..........R.......K....H...PI......VTD....IGS.............................. [...]
+B6KA84_TOXGO/379-692   ............................................................................................l-LFVILNE..RVSLD..IYQIVKS.-C...TD..V..NFPSQCLNG.R..H.KCIDAIfrg..........dnpNPQYFANVMS.......KVNMK..........LQGV.N.....QTL.E....ADI.IK........Q......E..I....G...T...D.....K.S..T.L..................................VLAVETSFFANPTkt..........sppPTAP..IVCACTGNMD...D...D.L.G...A....F.G.....H.AV..C...VE.....S..........R.......K....H...PI......VTD....IGS.............................. [...]
+Q1L2C9_TOXGO/379-692   ............................................................................................l-LFVILNE..RVSLD..IYQIVKS.-C...TD..V..NFPSQCLNG.R..H.KCIDAIfrg..........dnpNPQYFANVMS.......KVNMK..........LQGV.N.....QTL.E....ADI.IK........Q......E..I....G...T...D.....K.S..T.L..................................VLAVETSFFANPTkt..........sppPTAP..IVCACTGNMD...D...D.L.G...A....F.G.....H.AV..C...VE.....S..........R.......K....H...PI......VTD....IGS.............................. [...]
+D2JRZ7_TOXGO/582-895   ............................................................................................l-LFVILNE..RVSLD..IYQIVKS.-C...TD..V..NFPSQCLNG.R..H.KCIDAIfrg..........dnpNPQYFANVMS.......KVNMK..........LQGV.N.....QTL.E....ADI.IK........Q......E..I....G...T...D.....K.S..T.L..................................VLAVETSFFANPTkt..........sppPTAP..IVCACTGNMD...D...D.L.G...A....F.G.....H.AV..C...VE.....S..........R.......K....H...PI......VTD....IGS.............................. [...]
+A8NJ50_BRUMA/1-61      .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+TAG76_CAEEL/660-966    .............................................................................................CIIVVLQS..KNSDI..YMTVKEQ.SD...IV..H..GIMSQCVLM.K..N.VSRP--................TPATCANIVL.......KLNMK..........MGGI.N.....SRI.V....ADK.IT........N......K..Y....L...V...D.....Q.P..T.M..................................VVGIDVTHPTQAEm.............rMNMP..SVAAIVANVD...L...L.P.Q...S....Y.G.....A.NV..K...VQ.....K..........K.......C....R...ES......VVY....LLD.............................. [...]
+A8XA10_CAEBR/683-989   .............................................................................................CIIVVLQA..KNSDI..YMTVKEQ.SD...IV..H..GIMSQCVLM.K..N.VSRP--................TPATCANIVL.......KLNMK..........MGGI.N.....SRI.V....ADQ.IT........N......K..Y....L...V...D.....Q.P..T.M..................................VVGIDVTHPTQAEm.............rMNMP..SVAAIVANVD...L...L.P.Q...S....Y.G.....A.NV..K...VQ.....K..........K.......C....R...ES......VVY....LLD.............................. [...]
+Q7JLZ2_CAEEL/652-958   .............................................................................................CIIVVLQS..KNSDI..YMTVKEQ.SD...IV..H..GIMSQCVLM.K..N.VSRP--................TPATCANIIL.......KLNMK..........MGGI.N.....SRI.V....ADQ.IT........N......K..Y....L...V...D.....Q.P..T.M..................................VVGIDVTHPTQAEm.............rMNMP..SVAAIVANVD...L...L.P.Q...S....Y.G.....A.NV..K...VQ.....K..........K.......C....R...ES......VVY....LLD.............................. [...]
+Q21079_CAEEL/655-961   .............................................................................................CIIVVLQS..KNSDI..YMTVKEQ.SD...IV..H..GIMSQCVLM.K..N.VSRP--................TPATCANIIL.......KLNMK..........MGGI.N.....SRI.V....ADQ.IT........N......K..Y....L...V...D.....Q.P..T.M..................................VVGIDVTHPTQAEm.............rMNMP..SVAAIVANVD...L...L.P.Q...S....Y.G.....A.NV..K...VQ.....K..........K.......C....R...ES......VVY....LLD.............................. [...]
+A8NGN0_BRUMA/1-135     ...........................................................................................mq--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B7QBT5_IXOSC/313-623   ............................................................................................q-VIFVVVV..NKSPI..YNELKST.AE...TE..I..GVMTQCVTD.K..S.IMNKCN................-PMLVNNILQ.......KVNAK..........LGGV.N.....NTI.P....KSV.K-........-......S..V....I...F...S.....K.P..V.I..................................VMGADVTHPGAKE...............FNRP..SIAAVVASTD...P...F.A.F...R....Y.I.....T.AF..R...IQ.....K..........Q.......N....M...EVkarveiIED....MKS.............................. [...]
+B7Q990_IXOSC/474-787   ............................................................................................k-FLLIILN..PMIDN..HDAIKLI.CE...RD..L..GLATQCCME.K..N.VFNVVDkml..........hqpLPALLVNLCH.......KVNAK..........CGGD.A.....NTI.S....K--.--........R......P..A....I...F...E.....E.P..V.I..................................ILGADVNHPAPGR...............SNHP..SYAALVGSLD...S...C.P.S...K....Y.H.....A.SV..R...IQrtsanS..........N.......E....R...EI......IKD....LKG.............................. [...]
+B7Q811_IXOSC/611-920   ............................................................................................e-IMVIVLA..-KNSN..YAEIKQV.AE...TD..L..GLRTQCIMD.N..N.VIKKCN................-AALVTNLCQ.......KLNAK..........MGGT.N....nSLL.A....Q-E.K-........-......P..A....I...F...Q.....K.P..V.I..................................IIGADVTHPAPGD...............KLRP..SIAACVGSLD...S...I.P.S...K....F.H.....A.SI..R...IQ.....Meds....aamS.......R....V...EI......IKD....LKD.............................. [...]
+B7P230_IXOSC/468-776   ............................................................................................l-VIVVLGR..--NSS..YADIKQT.AE...TS..L..GIRTQCILE.Q..N.FTRNCK................-PQLMVNLCQ.......KINAK..........MGGI.N....nGLL.L....AQK.PE........-......-..-....I...F...R.....K.P..V.I..................................IIGADVSHPAPGD...............RIRP..SIAACVGSLD...S...I.P.S...K....Y.R.....A.SI..R...VQ.....L..........E.......D....Q...EA......VAR....VEMikd........................... [...]
+A8JAG8_CHLRE/672-990   ............................................................................................l-VLVVLPE..KTADE..YREVKRV.SD...IE..L..GIPSQVVVA.S..K.ARVGYRah...........kggGPQYCANVAM.......KINNK..........LGGV.N.....VQL.S....GGL.RN........M......P..V....L...GgagA.....V.P..F.M..................................VLGADVTHPTGAAar...........adSRDP..SVAAVVASLD...A...S.L.G...R....W.A.....S.RV..L...LQ.....A..........G.......R....Q...EV......ITG....MCG.............................. [...]
+A8J9T3_CHLRE/1058-1164 .......................................................................................fmvlga--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+A8J0N0_CHLRE/619-933   .............................................................................................MVMVVLPD.rGGVGL..YDAIKAA.GD...GK..L..GVATQCVNP.A..K.AGLVGPkas..........sgpSFSYAAQLAL.......SVNAK..........LGGA.-.....TTR.P....AGR.PNd......wL......P..L....L...G...G.....R.R..L.Mvggrgpg....................rlearlgLSGALLSRGYRGAa............qvSAGV..EYAAVVGSAD...S...H.A.V...D....Y.R.....V.QL..S...AQ.....V..........A.......G....N...R-......---....---.............................. [...]
+A8J0M9_CHLRE/675-993   .............................................................................................MVMVVLPD.rGGVGL..YDAIKAA.GD...GK..L..GVATQCVNP.A..K.AGLVGPkas..........sgpSFSYAAQLAL.......SVNAK..........LGGA.-.....TTR.P....AGR.P-........-......-..-....-...-...-.....N.G..E.L..................................ALALPRTRRTRVQ..............vSAGV..EYAAVVGSAD...S...H.A.V...D....Y.R.....V.QL..S...AQ.....V..........A.......G....N..rDI......VVS....MRE.............................. [...]
+Q0DZI9_ORYSJ/119-248   ...................................................................................qstgqksphi--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....E.LI..S...AQ.....L..........E.......R....Q...EI......IGG....LFHstrdpk........................ [...]
+Q8H714_PHYIN/1-173     .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+D0N1C0_PHYIN/587-890   ....................................................................................qiiwminvr--------..MDAHA..YGELKLM.SD...SEagV..GILSQCMLS.K..H.IPKC--................NPQYIANILM.......KVNTK..........LGGR.N.....GVI.S....---.GQ........L......P..L....V...S...A.....S.R..T.I..................................IFGADVTHPSPMD...............RSRP..SIAAVTASMD...A...N.F.I...R....H.A.....S.AI..R...AQ.....G..........H.......R....V...EQ......IMN....LKD.............................. [...]
+D0N1B9_PHYIN/587-890   .....................................................................................qiiwminp-------R..MDAHA..YGELKLM.SD...SEagV..GILSQCMLS.K..H.IPKC--................NPQYIANILM.......KVNTK..........LGGR.N.....GVI.S....---.GQ........L......P..L....V...S...A.....S.R..T.I..................................IFGADVTHPSPMD...............RSRP..SIAAVTASMD...A...N.F.I...R....H.A.....S.AI..R...AQ.....G..........H.......R....V...EQ......IMN....LKD.............................. [...]
+D0MT95_PHYIN/497-796   ............................................................................................f-LLVILPA..KNSPV..YGDVKRM.SD...TV..L..GLPSQCIAS.Q..N.LPRA--................NPQFCANVCL.......KINMK..........LNGK.N.....AVL.R....D--.-P........L......P..L....I...S...S.....E.P..T.I..................................IIGADVEHPRSGM...............GGRP..SIAAVVASMD...R...Y.S.A...Q....Y.A.....A.RV..A...AQ.....K..........A.......S....S...D-......IQQ....LPN.............................. [...]
+D0MT54_PHYIN/891-1191  ............................................................................................q-LIMVIKQ.dKSVGS..YSDIKRM.SD...TV..L..GIPSQCIVS.Q..N.VRSA--................KPQYCANVCL.......KINMK..........LSGK.N.....SIL.R....E--.-P........L......P..L....V...S...T.....A.P..T.I..................................IIGADVEHPRSGM...............GSRP..SIASVVASLD...R...Y.S.A...K....Y.V.....A.RV..A...AQ.....K..........A.......S....S...DI......-QL....LPH.............................. [...]
+D0MT94_PHYIN/524-824   ............................................................................................q-LILVIKQ.dKGSVS..YGRIKRM.SD...TV..L..GIPSQCIVA.T..N.LRKA--................NPQVCANVCL.......KMNMK..........LSGK.N.....SVL.R....E--.-P........L......P..L....I...S...T.....C.P..T.I..................................VIGADVEHPRSGM...............GSRP..SIASVVASMD...A...Y.S.A...K....Y.I.....G.RV..A...AQ.....K..........A.......A....N...D-......IQQ....LPH.............................. [...]
+B3SEP3_TRIAD/438-734   ....................................................................rkvevlisklkkstadcgieginek--------..-----..-------.--...--..-..---NLCMQI.K..N.IDKA--................NHQFLANLAL.......KINAK..........LGGT.N.....NTI.N....QSE.L-........-......-..-....-...L...K.....K.P..T.I..................................IFGADVTHPGIGD...............QTSP..SVAAIVGSAN...I...D.L.S...H....Y.F.....H.AI..R...IQ.....E..........H.......R....K...EI......IQD....LQS.............................. [...]
+B8BT49_THAPS/780-963   ............................................................................................i-MLVVLPD..KGKAL..YDHVKFV.SN...QC..S..GVQTQCASL.D..T.FNRQRN................KEQYSTALAT.......KMNAK..........LSTV.E.....DGA.I....AWR.GA........V......D..W....V...N...Q.....C.H..T.L..................................VIGIGMAHGMGRG...............--AE..TIVGISTCLD...G...Q.C.F...R....L.L.....H.SA..Y...VQ.....K..........K.......A....D...TL......SKD...aMID.............................. [...]
+C7SYH3_THAPS/780-1048  ............................................................................................i-MLVVLPD..KGKAL..YDHVKFV.SN...QC..S..GVQTQCASL.D..T.FNRQRN................KEQYSTALAT.......KMNAK..........LSTV.E.....DGA.I....AWR.GA........V......D..W....V...N...Q.....C.H..T.L..................................VIGIGMAHGMGRVl............lvMSVPpyHLIAISLVF-...F...V.L.L...K....V.P.....K.RA..Y...VQ.....K..........K.......A....D...TL......SKD...aMID.............................. [...]
+B5DIM9_DROPS/1-71      .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B4G6N2_DROPE/1-37      .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B4NLX0_DROWI/695-993   ............................................................................................l-VIVIIPN..-RGTT..YDTIKQK.AE...LT..H..GILTQCIKQ.F..T.VQRK-L................NAQLIGNLLL.......KVNSK..........LNGI.N.....HKL.K....DDP.LT........R......-..L....-...-...-.....V.N..T.M..................................YLGADVTHPSPDQ...............RDIP..SVVGVAASHD...L...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........S.......T....A...EE......IED....MEG.............................. [...]
+B4N082_DROWI/579-877   ............................................................................................l-VIVIIPQ..-IGVS..YDIIKQK.AE...LK..H..GILTQCLKQ.L..T.VERK-L................NPQLIGNVLL.......KINSK..........LNGI.N.....HKL.K....DEP.NR........L......-..L....-...-...-.....S.N..V.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MET.............................. [...]
+B3NI38_DROER/838-1138  ..........................................................................................dla---FVIIP..QFGTS..YDIIKQK.AE...LQ..H..GILTQCIKQ.F..T.VERK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..T.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MYS.............................. [...]
+Q2Q3X0_9MUSC/506-806   ..........................................................................................dla---FVIIP..QSGSS..YDIIKQK.AE...LQ..H..GILTQCIKQ.Y..T.FDRK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..A.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......T....L...EE......IED....MYA.............................. [...]
+Q2Q3X2_DROYA/506-806   ..........................................................................................dla---FVIIP..QSGSS..YDIIKQK.AE...LQ..H..GILTQCIKQ.Y..T.FDRK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..A.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MYA.............................. [...]
+Q2Q3X7_DROYA/506-806   ..........................................................................................dla---FVIIP..QSGSS..YDIIKQK.AE...LQ..H..GILTQCIKQ.Y..T.FDRK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..A.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MYA.............................. [...]
+Q2Q3X4_DROYA/506-806   ..........................................................................................dla---FVIIP..QSGSS..YDIIKQK.AE...LQ..H..GILTQCIKQ.Y..T.FDRK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..A.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MYA.............................. [...]
+B4PCH3_DROYA/843-1143  ..........................................................................................dla---FVIIP..QSGSS..YDIIKQK.AE...LQ..H..GILTQCIKQ.Y..T.FDRK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..A.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MYA.............................. [...]
+Q2Q3X6_DROYA/506-806   ..........................................................................................dla---FVIIP..QSGSS..YDIIKQK.AE...LQ..H..GILTQCIKQ.Y..T.FDRK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..A.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MYA.............................. [...]
+Q2Q3X8_DROYA/506-806   ..........................................................................................dla---FVIIP..QSGSS..YDIIKQK.AE...LQ..H..GILTQCIKQ.Y..T.FDRK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..A.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MYA.............................. [...]
+B4IU14_DROYA/810-1110  ..........................................................................................dla---FVIIP..QSGSS..YDIIKQK.AE...LQ..H..GILTQCIKQ.Y..T.FDRK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..A.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MYA.............................. [...]
+Q2Q3X1_DROTE/424-724   ..........................................................................................dla---FVIIP..QSGSS..YDIIKQK.AE...LQ..H..GILTQCIKQ.Y..T.FDRK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..A.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MYS.............................. [...]
+C7LAD2_DROME/888-1187  ...........................................................................................la--IVIIPQ..-FRIS..YDTIKQK.AE...LQ..H..GILTQCIKQ.F..T.VERKCN................-NQTIGNILL.......KINSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...M.....K.N..T.M..................................YIGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...S....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MFS.............................. [...]
+AGO2_DROME/885-1184    ...........................................................................................la--IVIIPQ..-FRIS..YDTIKQK.AE...LQ..H..GILTQCIKQ.F..T.VERKCN................-NQTIGNILL.......KINSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...M.....K.N..T.M..................................YIGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...S....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MFS.............................. [...]
+Q2Q3W2_DROSI/511-810   ...........................................................................................la--IVIIPQ..-SRIS..YDTIKQK.AE...LQ..H..GILTQCVKQ.F..T.VERKCN................-DQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....V.N..T.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...S....Y.N.....M.QY..R...LQ.....R..........G.......T....L...EE......IED....MYT.............................. [...]
+Q2Q3W9_DROSI/511-810   ...........................................................................................la--IVIIPQ..-SRIS..YDTIKQK.AE...LQ..H..GILTQCVKQ.F..T.VERKCN................-DQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....V.N..T.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...S....Y.N.....M.QY..R...LQ.....R..........G.......T....L...EE......IED....MYT.............................. [...]
+B4NVX8_DROSI/80-259    ...........................................................................................la--IVIIPQ..-SRIS..YDTIKQK.AE...LQ..H..GILTQCVKQ.F..T.VERKCN................-DQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....V.N..T.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...S....Y.N.....M.QY..R...LQ.....R..........G.......T....L...EE......IED....MYT.............................. [...]
+Q2Q3W7_DROSI/511-810   ...........................................................................................la--IVIIPQ..-SRIS..YDTIKQK.AE...LQ..H..GILTQCVKQ.F..T.VERKCN................-DQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....V.N..T.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...S....Y.N.....M.QY..R...LQ.....R..........G.......T....L...EE......IED....MYT.............................. [...]
+B4HIG2_DROSE/1-224     .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.M..................................YMGADVTILSRSA...............-RDS..QCGRVAASHD...P...Y.G.A...S....Y.N.....M.QY..R...LQ.....R..........G.......T....L...EE......IED....MYT.............................. [...]
+B3M505_DROAN/688-988   ...........................................................................................dl--AFVIIP..NYGAS..YETIKQK.AE...LK..H..GILTQCIKQ.F..T.FERK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKL.K....E-D.TR........L......P..V....-...-...P.....K.N..A.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........A.......A....L...EE......IED....MES.............................. [...]
+B4GTA7_DROPE/448-747   ............................................................................................d-VVFVIIP..NFGHL..YDVVKQK.AE...LQ..H..GILTQCIKR.V..T.VERKCN................-AQVIGSILL.......KVNAK..........LNGT.N.....HKL.R....D-D.L-........-......-..H....C...L...P.....K.K..T.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MES.............................. [...]
+B4GTA5_DROPE/448-747   ............................................................................................d-VVFVIIP..NFGHL..YDVVKQK.AE...LQ..H..GILTQCIKR.V..T.VERKCN................-AQVIGSILL.......KVNSK..........LNGT.N.....HKL.R....D-D.L-........-......-..H....C...L...P.....K.K..T.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MES.............................. [...]
+B4ISF4_DROPE/14-227    .........................................................................................tdvv--------..-----..----KQK.AE...LQ..H..GILTQCIKR.I..T.VERKCN................-AQVIGSILL.......KVNSK..........LNGT.N.....HKL.R....D-D.L-........-......-..H....C...L...P.....K.K..T.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MES.............................. [...]
+B5DKZ0_DROPS/2-120     ...................................................................................tytvcqrrpc--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................FXGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MES.............................. [...]
+B4HDJ4_DROPE/40-339    ............................................................................................d-VVFVIIP..NFGHL..YDVVKQK.AE...LQ..H..GILTQCIKR.I..T.VERKCN................-AQVIGSILL.......KVNAK..........LNGT.N.....HKL.R....D-D.L-........-......-..H....C...L...P.....K.K..T.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MES.............................. [...]
+B5DT30_DROPS/694-993   ............................................................................................d-VVFVIIP..NSGHL..YDVVKQK.AE...LQ..H..GILTQCIKQ.I..T.VERKCN................-AQVIGNILL.......KVNSK..........LNGT.N.....HKL.R....D-D.L-........-......-..H....C...L...P.....K.K..T.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MES.............................. [...]
+B4GTA6_DROPE/448-736   ............................................................................................d-VVFVIIP..NFGHL..YDVVKQK.AE...LQ..H..GILTQCIKR.I..T.VERKCN................-AQVIGSILL.......KVNAK..........LNGT.N.....HKL.R....D-D.L-........-......-..H....C...L...P.....K.K..T.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......V....L...EE......IED....MES.............................. [...]
+B4GDQ8_DROPE/669-968   ............................................................................................d-LVFVIIP..NVGRS..YDVVKQK.AE...LK..Y..GILTQCLKQ.I..T.VERKCN................-PQCIGNVLL.......KVNSK..........LNGI.N.....HKL.R....DDP.R-........-......-..-....C...L...L.....K.N..T.M..................................FLGADVTHPSPDQ...............WEMP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......T....L...EE......IED....MES.............................. [...]
+B5DYR9_DROPS/651-950   ............................................................................................d-LVFVIIP..NVGRS..YDVVKQK.AE...LK..H..GILTQCLKQ.I..T.VERKCN................-PQCIGNVLL.......KVNSK..........LNGI.N.....HKL.R....DDP.R-........-......-..-....C...L...L.....K.N..A.M..................................FLGADVTHPSPDQ...............WEMP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......T....L...EE......IED....MES.............................. [...]
+B5DU45_DROPS/389-589   ............................................................................................d-LVFVIIP..NVGRS..YDVVKQK.AE...LK..H..GILTQCLKQ.I..T.VERKCN................-PQCIGNVLL.......KVNSK..........LNGI.N.....HKL.R....DDP.R-........-......-..-....C...L...L.....K.N..A.M..................................FLGADVTHPSPDQ...............WEMP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......T....L...EE......IED....MES.............................. [...]
+B5DYR8_DROPS/41-340    ............................................................................................d-LVFVIIP..NVGRS..YDVVKQK.AE...LK..H..GILTQCLKQ.I..T.VERKCN................-PQCIGNVLL.......KVNSK..........LNGI.N.....HKL.R....DDP.R-........-......-..-....C...L...L.....K.N..A.M..................................FLGADVTHPSPDQ...............WEMP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......T....L...EE......IED....MES.............................. [...]
+B4GDQ6_DROPE/661-960   ............................................................................................d-LVFVIIP..NVGRS..YDVVKQK.AE...LK..Y..GILTQCLKQ.I..T.VERKCN................-PQCIGNVLL.......KVNSK..........LNGI.N.....HKL.R....DDP.R-........-......-..-....C...L...L.....K.N..T.M..................................FLGADVTHPSPDQ...............WEMP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......T....L...EE......IED....MES.............................. [...]
+B5DY62_DROPS/643-942   ............................................................................................d-LVFVIIP..NSGPF..YDVVKQK.AE...LQ..H..GILTQCIKE.I..T.VLRKCN................-LQCIGNVLL.......KVNSK..........LNGI.N.....HKL.K....DDP.R-........F......-..-....-...L...L.....K.N..A.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MES.............................. [...]
+B4GFG0_DROPE/449-748   ............................................................................................d-LVFVIIP..NSGPF..YDVVKQK.AE...LQ..H..GILTQCIKE.I..T.VLRKCN................-LQCIGNVLL.......KVNSK..........LNGI.N.....HKL.K....DDP.R-........F......-..-....-...L...L.....K.N..A.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MES.............................. [...]
+B5DWW4_DROPS/3-186     ..........................................................................................rll--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....K.N..T.M..................................FLGADVSHPSPDQ...............REIP..SVVGVAATHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MES.............................. [...]
+B4GUA7_DROPE/624-923   ..........................................................................................dlv--YVIIPN..-SGSV..YDVVKQK.AE...LE..H..GILTQCIKE.N..T.VLRKCN................-LQCIGNVLL.......KVNSK..........LNGI.N.....HKL.K....DDP.L-........-......-..-....C...L...L.....K.N..A.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......D....L...EE......IQD....MES.............................. [...]
+B5DQH3_DROPS/471-770   ..........................................................................................dlv--YVIIPN..-SGSV..YDVVKQK.AE...LE..H..GILTQCIKE.N..T.VLHKCN................-LQCIGNVLL.......KVNSK..........LNGI.N.....HKL.K....DDP.L-........-......-..-....C...L...L.....K.N..A.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......D....L...EE......IQD....MES.............................. [...]
+B4IWV1_DROGR/788-1091  ............................................................................................l-VFVIIPS..RGGAS..YEMIKQR.AE...LH..C..GILTQCIKQ.N..N.VERR-L................DDQLVGNLLL.......KVNSK..........LNGI.N.....HKI.K....DDV.R-........I......K..L....-...-...-.....P.N..V.M..................................YLGADVTHPSPDQ...............RDIP..SVVGVAASHD...L...Y.G.G...S....Y.N.....M.QF..R...MQ.....S..........N.......SggrpR...EE......IDD....MQS.............................. [...]
+B4LH85_DROVI/152-457   ............................................................................................d-LVFVILA..SRGPS..YDIIKQK.AE...LQ..Y..GILTQCIKQ.N..N.VERR-L................NGQLVGNILL.......KVNSK..........LNGV.N.....HKL.K....DDP.RT........M......L..-....-...-...-.....A.N..V.M..................................YLGADVTHPSPDQ...............RDIP..SVVGVAASHD...M...H.G.G...S....Y.N.....M.QY..R...LQ.....C..........G.......GgggaR...EE......IED....MES.............................. [...]
+B4KUJ5_DROMO/715-1017  ...........................................................................................dl-VFVIIPS..-RGAT..YEVIKQK.AE...LQ..H..GILTQCIKH.N..N.VDRR-L................NAQLVGNILL.......KVNSK..........LNGI.N.....HKL.K....DDP.R-........T......Q..L....-...-...-.....T.N..V.M..................................YLGADVTHPSPDQ...............RDIP..SVVGVAASHD...A...Y.G.G...S....F.N.....M.QY..R...LQ.....Cga......ggR.......A....A...EE......ILD....MES.............................. [...]
+B4QL34_DROSI/606-729   .........................................................................................nvgc--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B4G6N7_DROPE/19-133    ........................................................................................vrrei--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B5DIM7_DROPS/517-815   ............................................................................................l-VLVVIPN..-SGNF..YDKLKQK.AE...LE..Y..GILTQCIKQ.A..T.VERRCN................-GQVVGNLLL.......KMNSK..........LNGI.N.....HTL.K....ADT.AA........L......-..-....-...-...P.....K.N..V.M..................................FVGADVTHPSPEQ...............REIP..SVVGVAASHD...A...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MES.............................. [...]
+B4H1E3_DROPE/6-68      ...................................................................................sistdtenqa--------..-----..-------.-E...LE..H..GILTQCIIQ.A..T.GERRFN................-GQVMSNLLL.......KMNSK..........LNGI.N.....PTL.K....R--.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B4G6N0_DROPE/517-815   ............................................................................................l-VLVVIPN..-SGNF..YDKLKQK.AE...LE..Y..GILTQCIKQ.A..T.VERRCN................-GQMVGNLLL.......KMNSK..........LNGI.N.....HTL.K....ADT.AA........L......-..-....-...-...P.....K.N..V.M..................................FVGADVTHPTPEQ...............REIP..SVVGVAASHD...A...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MES.............................. [...]
+Q59HV7_BOMMO/706-1006  ............................................................................................f-LVVVVSG..RGRDY..YHKLKQI.AE...LK..V..GILTHVFKE.D..T.ATRRMN................-PQTARNILL.......KVNSK..........LMGI.N.....QAL.E....NRS.IP........-......Q..C....L...K...G.....G.A..V.M..................................IVGADVTHPSPDQ...............SNIP..SIAAVTASMD...T...K.C.Y...I....Y.N.....I.EL..S...IQ.....T..........P.......K....K...EM......IVQ....FED.............................. [...]
+B0X641_CULQU/527-832   ............................................................................................f-VIVVIPG..-IGDH..YSRLKQK.AE...LV..V..GVLTSCVKG.N..T.VKNTRS................PLTVVNNILL.......KINGK..........TNGT.N.....HVV.Q....SPD.PK........I......P..L....-...I...K.....K.R..I.M..................................FVGADVTHPSPEQ...............STIP..SVVGVVASFD...R...N.G.F...R....Y.K.....P.HF..Q...LQ.....D..........P.......K....K...EM......IHG....LEA.............................. [...]
+B0LJQ7_CULTA/1-148     .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B0WRW8_CULQU/638-943   ...........................................................................................df-VIVVISG..-MGDQ..YSKVKQR.AE...LV..T..GLLTQCIKG.D..T.VFKKAG................DMSTINNIWL.......KINAK..........TNGT.N....hVLK.P....ESK.PP........L......-..-....-...I...R.....K.R..V.M..................................YVGADVTHPSPEQ...............TNIP..SVVGVAASYD...L...E.G.F...R....Y.N.....C.CY..R...LQ.....N..........P.......K....D...EM......IRD....LEN.............................. [...]
+C5J0H4_AEDAE/655-961   ............................................................................................l-VFVVIPSpgRDGDV..YAKVKQK.AE...LC..V..GLLTQCIKS.F..T.LDKKRG................DMSTISNIWL.......KINAK..........TNGS.N....hVLA.K....NFK.PP........I......-..-....-...A...R.....K.T..V.M..................................YVGADVTHPSPEQ...............TNIP..SVVGVAASYD...L...E.G.F...R....Y.N.....C.CY..R...LQ.....G..........P.......K....D...EM......IRD....LQN.............................. [...]
+B0LJQ8_AEDTR/1-254     .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................---------L.......KINAK..........TNGT.N....hLLA.P....GSK.PP........M......-..-....-...S...R.....K.D..V.M..................................YIGADVTHPSPEQ...............TNIP..SVVGVAASYD...L...E.G.F...R....Y.N.....C.CY..R...LQ.....N..........A.......K....D...EM......IRD....LEN.............................. [...]
+Q5TVL2_ANOGA/535-839   ...........................................................................................vt--IVVLPS..-RGDA..YAKVKQK.AElasER..I..GLLTQCVKG.M..T.VAKKGT................DMSTLNNIML.......KINAK..........TNGT.N.....HCI.S....QVA.V-........-......P..P....L...G...R.....G.K..V.M..................................YIGADVTHPLSEN...............--EP..SVVGVAALYD...L...T.G.F...R....Y.N.....C.SV..R...LQ.....G..........A.......R....D...EM......IRD....LEN.............................. [...]
+C4WWR5_ACYPI/1-266     .........................................................................................mfrm--------..-----..-------.--...--..-..---------.-..-.------................NTSTSSNILL.......KINSK..........LNGI.Nh...tLAI.R....SSP.PS........M......-..-....-...-...-.....E.G..A.I..................................IFGADVTHPSPEQ...............TTIP..SVAAVAASHD...T...Y.G.S...Q....Y.N.....M.EW..R...LQ.....S..........P.......K....V...EI......IQD....LED.............................. [...]
+Q5DFJ9_SCHJA/2-164     .........................................................................................lylr--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+C4QPD2_SCHMA/595-831   ............................................................................................f-IMLILYD..--DLA..YGTIKRL.SD...LK..M..GIRTQCVRG.S..T.LRKP--................--NVFPNLLL.......KLNGK..........LGGV.N.....WIV.P....DLT.E-........-......-..-....Y...S...K.....D.L..I.M..................................VFGADVTHPAPTQt.............hQVLK..SVAAVVGSVS...P...E.L.M...R....Y.G.....A.IV..R...QQ.....A..........TtergnktT....R...EI......IDN....LHL.............................. [...]
+C4QPD1_SCHMA/595-896   ............................................................................................f-IMLILYD..--DLA..YGTIKRL.SD...LK..M..GIRTQCVRG.S..T.LRKP--................--NVFPNLLL.......KLNGK..........LGGV.N.....WIV.P....DLT.E-........-......-..-....Y...S...K.....D.L..I.M..................................VFGADVTHPAPTQt.............hQVLK..SVAAVVGSVS...P...E.L.M...R....Y.G.....A.IV..R...QQ.....A..........TtergnktT....R...EI......IDN....LHL.............................. [...]
+Q5DCI0_SCHJA/265-566   ...........................................................................................fl--LLILYD..--EYS..YPTIKRL.SD...LQ..M..GIRTQCVRG.R..T.LDKP--................--NVFPNLLL.......KLNGK..........LGGV.N.....WQI.P....DLI.KN........-......-..-....-...G...N.....E.L..I.M..................................VFGADVTHPAPTQn.............qQIRK..SVAAVIGSVS...P...D.L.M...R....Y.G.....V.VI..R...QQ.....A..........TtekgnktA....R...EI......IDD....MRL.............................. [...]
+C4QPD0_SCHMA/628-928   ..........................................................................................afl--LLILYD..--EHA..YPAIKRL.SD...LQ..I..GIRTQCVRS.R..T.LDKP--................--NVFPNLLL.......KINGK..........LGGV.N.....WQI.P....DLI.KN........-......-..-....-...S...D.....E.L..I.M..................................VFGADVTHPAQTQ...............QVRK..SVAAVLGSVS...P...D.L.M...R....Y.G.....V.VI..R...QQ.....A..........TtekgnkaA....R...EI......IDD....MRL.............................. [...]
+Q5DG80_SCHJA/3-99      ........................................................................................hclyr--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+AGO1_ARATH/676-997     ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TE..L..GIVSQCCLT.K..H.VFKM--................SKQYMANVAL.......KINVK..........VGGR.N....tVLV.D....ALS.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.I.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lFKEwkdpqk........................ [...]
+Q3ECU7_ARATH/678-999   ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TE..L..GIVSQCCLT.K..H.VFKM--................SKQYMANVAL.......KINVK..........VGGR.N....tVLV.D....ALS.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.I.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lFKEwkdpqk........................ [...]
+A1E5M2_PEA/696-1017    ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TD..L..GVVSQCCLT.K..H.VFKM--................NKQYLANVSL.......KINVK..........VGGR.N....tVLV.D....ALS.RR........I......P..I....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.I.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lFKQwqdpvr........................ [...]
+A1E5M3_PEA/726-1047    ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TD..L..GVVSQCCLT.K..H.VFKM--................SKQYLANVSL.......KINVK..........VGGR.N....tVLV.D....ALS.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.I.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lFKQwqdpvr........................ [...]
+Q2LFC4_NICBE/678-999   ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TE..L..GIVSQCCLT.K..H.VFKM--................SKQYLANVSL.......KINVK..........VGGR.N....tVLV.D....ALS.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.I.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lYKTwqdpvr........................ [...]
+B9SJV6_RICCO/687-1008  ............................................................................................l-LIVILPD..NNGSL..YGELKRI.CE...TD..L..GLVSQCCLT.K..H.VFRM--................NKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALS.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lFKEwqdpvr........................ [...]
+B9I4Y6_POPTR/688-1009  ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....AIS.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwqdpvr........................ [...]
+B9N365_POPTR/308-629   ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALS.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwqdpvr........................ [...]
+B8AGF0_ORYSI/693-1014  ............................................................................................l-LIAILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwkdpqr........................ [...]
+B9F1L3_ORYSJ/693-1014  ............................................................................................l-LIAILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwkdpqr........................ [...]
+AGO1A_ORYSJ/709-1030   ............................................................................................l-LIAILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwkdpqr........................ [...]
+C5YE15_SORBI/712-1033  ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwqdpqr........................ [...]
+C0HEU9_MAIZE/87-408    ............................................................................................l-LIVILPD..INGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwqdpqr........................ [...]
+B9FC11_ORYSJ/374-695   ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwqdphr........................ [...]
+AGO1B_ORYSJ/746-1067   ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwqdphr........................ [...]
+B8AT34_ORYSI/729-1050  ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwqdphr........................ [...]
+A9RG03_PHYPA/598-919   ............................................................................................l-LIAILPD..NNGPL..YGDLKKQ.CE...TV..L..GVVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALS.RK........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPHPGE...............DFSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKEwkdpqk........................ [...]
+A9RTW5_PHYPA/744-1065  ............................................................................................l-LIAILPD..NNGPL..YGDLKKQ.CE...TV..L..GVVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RK........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKEwrdpqk........................ [...]
+C5YY05_SORBI/736-1058  ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKANK................-QQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....V.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....T..........H.......R....Q...EL......IQD...lFKVyqdpqr........................ [...]
+B4FGY3_MAIZE/13-335    ............................................................................................l-LIVILPD..NNGSL..YGDVKRI.CE...TN..L..GLVSQCCLT.K..H.VFKVNK................-QQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALA.RR........I......P..L....V...S...D.....I.A..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwqdper........................ [...]
+C7J0V9_ORYSJ/1-271     .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-INVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwqdphr........................ [...]
+PINH_ARATH/625-946     ............................................................................................l-LLAILPD..NNGSL..YGDLKRI.CE...TE..L..GLISQCCLT.K..H.VFKI--................SKQYLANVSL.......KINVK..........MGGR.N....tVLV.D....AIS.CR........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPENGE...............ESSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwqdpvr........................ [...]
+B0FHH7_BRANA/614-935   ............................................................................................l-LLAILPD..NNGSL..YGDLKRI.CE...TE..L..GLISQCCLT.K..H.VFKI--................SKQYLANVSL.......KINVK..........MGGR.N....tVLL.D....AIS.CR........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPENGE...............ESSP..SIGAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwqdpvr........................ [...]
+B9RTJ1_RICCO/626-947   ............................................................................................l-LLAILPD..NNGTL..YGDLKRI.CE...TD..L..GLISQCCLT.K..H.VFKI--................SKQYLANVSL.......KINVK..........MGGR.N....tVLL.D....AIS.CR........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPENGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwqdpvr........................ [...]
+B9HKB5_POPTR/631-952   ............................................................................................l-LLAILPD..NNGSL..YGDLKRI.CE...TD..L..GLITQCCLS.K..H.VFKI--................SKQYLANLSL.......KINVK..........MGGR.N....tVLL.D....AIS.CR........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPENGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwqdpvr........................ [...]
+B9HUQ6_POPTR/452-776   ............................................................................................l-LLAILPD..NNGSL..YGDLKRI.CE...TD..L..GLLTQCCLS.K..H.VFKI--................SKQYLANVSL.......KINVK..........MGGR.N....tVLL.D....AIS.CR........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPENGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwqdpvr........................ [...]
+B9STN2_RICCO/586-907   ............................................................................................l-LIAILPD..SNGSL..YGDLKRI.CE...TD..L..GLISQCCLT.K..H.VFKI--................NRQYLANVSL.......KINVK..........MGGR.N....tVLL.D....AIS.WR........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPESGE...............DISP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....P..........H.......R....Q...EL......IQD...lFKTwqdpqq........................ [...]
+PNH1_ORYSJ/620-941     ............................................................................................l-LLAILPD..NNGSL..YGDIKRI.CE...TD..L..GLISQCCLT.K..H.VFKI--................SKQYLANVSL.......KINVK..........MGGR.N....tVLL.D....AIS.WR........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPETGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwhdpqr........................ [...]
+B9FU05_ORYSJ/458-779   ............................................................................................l-LLAILPD..NNGSL..YGDIKRI.CE...TD..L..GLISQCCLT.K..H.VFKI--................SKQYLANVSL.......KINVK..........MGGR.N....tVLL.D....AIS.WR........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPETGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwhdpqr........................ [...]
+C5Z5J6_SORBI/617-938   ............................................................................................l-LLAILPD..NNGPL..YGDIKRI.CE...TD..L..GLITQCCLT.K..H.VFKI--................SKQYLANVSL.......KINVK..........MGGR.N....tVLL.D....AIS.WR........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPETGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwhdpqr........................ [...]
+C0PNQ0_MAIZE/1-267     .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........MGGR.N....tVLL.D....AIS.WS........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPETGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....H.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwhdpqr........................ [...]
+A5ARQ9_VITVI/592-892   ............................................................................................l-LIAILPD..NNGSL..YGDLKRI.CD...TD..L..GLISQCCLT.K..N.VYKI--................SNQYLANVSL.......KINVK..........MGGR.N....tVLL.D....ALS.SG........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPETGD...............DSCP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD....---.............................. [...]
+B8B2X0_ORYSI/647-968   ...........................................................................................ll--IGLLPD..NNGSL..YGDLKRI.CE...ID..L..GLVSQCCCT.K..Q.VFKM--................NKQILANLAL.......KINVK..........VGGR.N....tVLV.D....AVS.RR........I......P..L....V...T...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....S..........H.......R....Q...EL......IDD....LYNithdph........................ [...]
+AGO1D_ORYSJ/669-990    ...........................................................................................ll--IGLLPD..NNGSL..YGDLKRI.CE...ID..L..GLVSQCCCT.K..Q.VFKM--................NKQILANLAL.......KINVK..........VGGR.N....tVLV.D....AVS.RR........I......P..L....V...T...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....S..........H.......R....Q...EL......IDD....LYNithdph........................ [...]
+B9FR04_ORYSJ/644-965   ...........................................................................................ll--IGLLPD..NNGSL..YGDLKRI.CE...ID..L..GLVSQCCCT.K..Q.VFKM--................NKQILANLAL.......KINVK..........VGGR.N....tVLV.D....AVS.RR........I......P..L....V...T...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....S..........H.......R....Q...EL......IDD....LYNithdph........................ [...]
+C5Z2L1_SORBI/643-964   ............................................................................................l-LIGILPD..NNGSL..YGDLKRI.CE...ID..L..GLVSQCCCA.K..Q.VFKM--................NKQILANLAL.......KINVK..........VGGR.N....tVLA.D....AVS.RR........I......P..L....V...T...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....S..........H.......R....Q...EL......IED....LYKvvhdpq........................ [...]
+C5XWS2_SORBI/656-978   ............................................................................................l-LIGILPD..NNGSL..YGDLKRV.CE...ID..L..GIVSQCCCT.K..Q.VFKMNN................-KQILANLAL.......KINVK..........VGGR.N....tVLV.D....AVS.RG........I......P..L....V...T...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IED....LYKvwqdpq........................ [...]
+B8AFI6_ORYSI/637-958   ............................................................................................l-LIGILPD..NNGSL..YGDLKRV.CE...ID..L..GIVSQCCCT.K..Q.VFKM--................NKQILANLAL.......KINVK..........VGGR.N....tVLV.D....AVS.RR........I......P..L....V...T...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IED....LYKiwqdpq........................ [...]
+AGO1C_ORYSJ/638-959    ............................................................................................l-LIGILPD..NNGSL..YGDLKRV.CE...ID..L..GIVSQCCCT.K..Q.VFKM--................NKQILANLAL.......KINVK..........VGGR.N....tVLV.D....AVS.RR........I......P..L....V...T...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IED....LYKiwqdpq........................ [...]
+Q2LFC3_NICBE/604-925   ............................................................................................l-LVVILPD..NNGSL..YGDLKRI.CE...TE..L..GVVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....AIS.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.I.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD....LYTtrqdpv........................ [...]
+B1B5A8_DAUCA/736-1057  ............................................................................................l-LIAILPD..NNGSL..YGDLKRI.CE...TD..L..GVISQCCLA.K..H.VFRM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALS.WR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.S.....G.LV..C...AQ.....A..........H.......R....Q...EI......IQD....LYTtwqdpn........................ [...]
+Q2PEW1_TRIPR/1-247     ............................................................................................d--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lFKQwqdpar........................ [...]
+A9T6J3_PHYPA/524-842   ............................................................................................l-LIAILPD..NNGSL..YGDLKKQ.CE...TV..L..GVVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALS.RR........I......P..L....V...S...D.....K.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....T..........H.......R....Q...EL......IAD...lFKEytdpmk........................ [...]
+AGO17_ORYSJ/514-834    ............................................................................................l-LIVILPN..NNGSL..YGDVKRI.CE...TD..I..GLISQCCLA.K..H.VLKM--................NKWYLASVAL.......KINAK..........MGGR.N....tVLV.D....ALE.MR........L......P..H....V...R...D.....T.P..T.I..................................VFGAHVTHPHPGK...............ANSS..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LI..S...VQ.....A..........C.......H....Q...ES......IQG...lFKVqddper........................ [...]
+B8AII3_ORYSI/514-834   ............................................................................................l-LIVILPN..NNGSL..YGDVKRI.CE...TD..I..GLISQCCLA.K..H.VLKM--................NKWYLASVAL.......KINAK..........MGGR.N....tVLV.D....ALE.MR........L......P..H....V...R...D.....T.P..T.I..................................VFGAHVTHPHPGK...............ANSS..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LI..S...VQ.....A..........C.......H....Q...ES......IQG...lFKVqddper........................ [...]
+C5WX34_SORBI/1-43      ............................................................................................g--------..-----..--KIKRV.CE...TD..I..GIVSQCCLM.K..H.DCRP--................NKIFLENISL.......KNNAK..........V---.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+C0PDS4_MAIZE/580-888   ............................................................................................l-LLAILPD..KKDSL..YGNIKRI.CE...TD..I..GLVSQCCRR.S..R.VLVN--................NNQILANIAI.......KINAK..........VGGR.I.....SVF.D....DVQ.KS........L......P..V....V...S...N.....K.P..T.I..................................IFGAHVSHPSVVD..............gSTGP..SIASVVASQD...W...H.E.V...S....K.Y.....N.GV..V...RA.....Q..........G.......H....T...EE......IGG....LED.............................. [...]
+B7ZXH7_MAIZE/580-736   ............................................................................................l-LLAILPD..KKDSL..YGNIKRI.CE...TD..I..GLVSQCCRR.S..R.VLVN--................NNQILANIAI.......KINAK..........VGGR.I.....SVF.D....DVQ.KS........L......P..V....V...S...N.....K.P..T.I..................................IFGAHVSHPSVVD..............gSTGP..SIASVVASQD...W...H.E.V...S....K.Y.....N.GV..V...RA.....Q..........G.......H....T...EE......IGG....LED.............................. [...]
+C5WR49_SORBI/585-661   ............................................................................................l-LLAILPD..KNGSL..YGNIKRI.CE...TD..I..GLVSQCCRR.S..N.VFTE--................NSQILANIAI.......KINAK..........VVAS.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B8AFF9_ORYSI/534-832   ............................................................................................l-LIVILPE..-ERGN..YGKIKRV.CE...TK..L..GLVSQCCLP.K..N.VKTDTN................-IKYLENIAL.......KINVK..........VGGR.Nt...vLQQ.A....FVH.NG........I......P..F....V...S...D.....I.P..T.I..................................IFGADVSHPPPGM...............-YSS..SIAGVVGSID..wP...E.V.T...T....Y.R.....A.VI..S...AQ.....L..........E.......R....Q...EI......IGG....---.............................. [...]
+B9F134_ORYSJ/36-347    ............................................................................................l-LIVILPE..-ERGN..YGKIKRV.CE...TK..L..GLVSQCCLP.K..N.VKTDTN................-IKYLENIAL.......KINVK..........VGGQ.Nt...vLQQ.A....FVH.NG........I......P..F....V...S...D.....I.P..T.I..................................IFGADVSHPPPGMwld........qstgQKSP..HIELISAQL-...-...E.R.Q...E....I.I.....G.GL.fH...ST.....R..........D.......P....K...GC......LKP....-DG.............................. [...]
+Q0DZI9_ORYSJ/36-107    ............................................................................................l-LIVILPE..-ERGN..YGKIKRV.CE...TK..L..GLVSQCCLP.K..N.VKTDTN................-IKYLENIAL.......KINVK..........T---.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B9SCN8_RICCO/632-949   ............................................................................................l-LIIILPD..-ISGS..YGIIKRV.CE...TE..L..GIVSQCCQP.R..Q.AAKL--................SKQYFENVAL.......KINVK..........VGGR.N....tVLN.D....AVQ.RR........I......P..L....V...T...D.....C.P..T.I..................................IFGADVTHPPPGE...............DSSP..SIAAVVASMD..wP...E.V.T...K....Y.R.....G.IV..S...AQ.....A..........H.......R....E...EI......IQD...lYKSfqdpqg........................ [...]
+B9HQS2_POPTR/635-955   ............................................................................................l-LIIILPD..-VTGS..YGKIKRV.CE...TE..L..GIVSQCCQP.Q..Q.AKKL--................SKQYMENVAL.......KINVK..........AGGR.N....tVLN.D....AFH.RR........I......P..L....L...T...D.....V.P..T.I..................................VFGADVTHPQAGE...............DAGP..SIAAVVASMD..wP...E.V.T...K....Y.R.....G.LV..S...AQ.....A..........H.......R....E...EI......IED...lYKKyqdpkk........................ [...]
+B9GEQ1_POPTR/548-869   ...........................................................................................ql-LIIILPD..-FSGS..YGKIKRI.CE...TE..L..GIVSQCCQP.Q..Q.AKKL--................SKQYLENVAL.......KINVK..........AGGR.N....tVLN.D....AIQ.RR........I......P..N....V...T...D.....L.P..T.I..................................IFGADVTHPQPGE...............DSSP..SIAAVVASMD..wP...E.V.T...K....Y.R.....G.LV..S...AQ.....A..........H.......R....E...EI......IQD...lYKKyqdpqk........................ [...]
+AGOL_ARATH/638-958     ............................................................................................l-LIVILPD..-VTGS..YGKIKRI.CE...TE..L..GIVSQCCQP.R..Q.VNKL--................NKQYMENVAL.......KINVK..........TGGR.N....tVLN.D....AIR.RN........I......P..L....I...T...D.....R.P..T.I..................................IMGADVTHPQPGE...............DSSP..SIAAVVASMD..wP...E.I.N...K....Y.R.....G.LV..S...AQ.....A..........H.......R....E...EI......IQD....LYKlvqdpq........................ [...]
+B9MTL4_POPTR/505-810   ...........................................................................................qi-LIIILPD..-VSGS..YGTIKRV.CE...TE..L..GIVSQCCQP.K..Q.ARKC--................SPQYLENVAL.......KINVK..........AGGR.N....tVLE.D....ALN.RR........I......P..L....L...S...D.....T.P..T.I..................................IFGADVTHPQPGE...............DSSP..SIAAIVASMD..wP...E.V.T...T....Y.R.....G.LV..S...AQ.....K..........H.......R....Q...EI......IQD....CAG.............................. [...]
+B8ALC4_ORYSI/596-877   ................................................................................yvfsprnmtilch--------..-----..-------.--...--..-..---------.-..-.------................----------.......---NQ..........VGGR.Nt...vLER.A....FIR.NG........I......P..F....V...S...E.....V.P..T.I..................................IFGADVTHSPPGE...............DSAS..SIAAVVASMD..wP...E.I.T...K....Y.R.....G.LV..S...AQ.....S..........H.......R....Q...EI......IED....LFSvgkdpv........................ [...]
+AGO13_ORYSJ/471-770    ..........................................................................................qll--IVILLE..-VSGS..YGKIKRV.CE...ND..L..GIVSQCCLP.R..H.ASRP--................NKQYLENVAL.......KINVK..........KSQQ.-.....---.S....S--.L-........-......-..-....-...-...-.....-.-..-.-..................................---VLMSHTPPGE...............DSAS..SIAAVVASMD..wP...E.I.T...K....Y.R.....G.LV..S...AQ.....S..........H.......R....Q...EI......IED....LFSvgkdpv........................ [...]
+B9F6E0_ORYSJ/564-783   .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----VVASMD..wP...E.I.T...K....Y.R.....G.LV..S...AQ.....S..........H.......R....Q...EI......IED....LFSvgkdpv........................ [...]
+MEL1_ORYSJ/696-1016    ............................................................................................l-LIVILPE..-VSGS..YGKIKRV.CE...TD..L..GIVSQCCLP.R..H.ASRP--................NKQYLENVAL.......KINVK..........VGGR.Nt...vLER.A....FIR.NG........I......P..F....V...S...E.....V.P..T.I..................................IFGADVTHPPPGE...............DSAS..SIAAVVASMD..wP...E.I.T...K....Y.R.....G.LV..S...AQ.....P..........H.......R....Q...EI......IED....LFSvgkdpv........................ [...]
+A3ANP6_ORYSJ/644-982   ............................................................................................l-LIVILPE..-VSGS..YGKIKRV.CE...TD..L..GIVSQCCLP.R..H.ASRP--................NKQYLENVAL.......KINVK..........VGGR.Nt...vLER.A....FIR.NG........I......P..F....V...S...E.....V.P..T.I..................................IFGADVTHPPPGE...............DSAS..SIAAVVASMD..wP...E.I.T...K....Y.R.....G.LV..S...AQ.....P..........H.......R....Q...EI......IED....LFSvgkdpv........................ [...]
+B8ALC8_ORYSI/696-1016  ............................................................................................l-LIVILPE..-VSGS..YGKIKRV.CE...TD..L..GIVSQCCLP.R..H.ASRP--................NKQYLENVAL.......KINVK..........VGGR.Nt...vLER.A....FIR.NG........I......P..F....V...S...E.....V.P..T.I..................................IFGADVTHPPPGE...............DSAS..SIAAVVASMD..wP...E.I.T...K....Y.R.....G.LV..S...AQ.....P..........H.......R....Q...EI......IED....LFSvgkdpv........................ [...]
+C5WX38_SORBI/703-1025  ............................................................................................l-LIVILPD..-VSGS..YGKIKRV.CE...TD..I..GIVSQCCLP.K..H.ASRP--................NKQYLENVAL.......KINVK..........VGGR.Nt...vLER.A....FVR.NG........I......P..F....V...S...E.....V.P..T.I..................................IFGADVTHPPPGE...............DSAS..SIAAVVASMD..wP...E.I.T...K....Y.R.....G.LV..S...AQ.....P..........H.......R....Q...EI......IED...lFTVtkdlqk........................ [...]
+B7ZZW2_MAIZE/663-969   ............................................................................................l-LIVILPD..-VTGY..YGEIKRM.CE...TD..L..GIVSQCINP.K..K.N--R--................NKQYFENLAL.......KINVK..........AGGR.Nt...vLER.A....SVP.NG........I......P..F....V...S...D.....V.P..T.I..................................IFGADVTHPTAGE...............ESSA..SVGAVVASMD..wP...Q.V.T...T....Y.K.....A.LV..S...AQ.....A..........H.......R....E...EI......IQN....LGG.............................. [...]
+C5XBU2_SORBI/675-995   ............................................................................................l-LIVVLPD..-VSGH..YGKIKRI.CE...TD..L..GIVSQCINP.K..K.NKN---................-KQYFENVAL.......KINVK..........VGGR.Nt...vLER.A....FVP.NG........I......P..F....V...S...D.....V.P..T.I..................................IFGADVTHPTAGE...............DSSA..SIAAVVASMD..wP...Q.V.T...T....Y.K.....A.LV..S...AQ.....A..........H.......R....E...EI......IQN...lFWTgtdpek........................ [...]
+C5X6M9_SORBI/1-69      ........................................................................................ntfcl--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....K.P..T.I..................................IFGADAIHPTAGE...............DSSA..FITAVVESME..rP...Q.V.M...T....Y.K.....A.LA..S...AQ.....K..........H.......R....E...EM......IHN...lL--.............................. [...]
+Q7FS89_MAIZE/11-170    ..................................................................................crgmalaagtv--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----VVASMD..wP...Q.V.T...T....Y.K.....A.LV..S...AQ.....A..........H.......R....E...EI......IQN....LGG.............................. [...]
+Q8S478_MAIZE/38-188    ...........................................................................................hk--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----VVASMD..wP...Q.V.T...T....Y.K.....A.LV..S...AQ.....A..........H.......R....E...EI......IQN....LGG.............................. [...]
+B9FVX3_ORYSJ/462-794   ............................................................................................l-LIVILPD..-VNGY..YGRIKRV.CE...TE..L..GIVSQCLKP.G..RkLLSL--................DRQFLENVSL.......KINVK..........AGGR.Ns...vLQR.P....LVP.G-........-......-..-....G...L...E.....N.T..T.I..................................IFGADVTHPASGE...............DSSA..SIAAVVASMD..wP...E.I.T...K....Y.K.....A.LV..S...AQ.....P..........P.......R....Q...EI......IQD....LFTmtevaqnadapaq................. [...]
+B8B7Y0_ORYSI/653-985   ............................................................................................l-LIVILPD..-VNGY..YGRIKRV.CE...TE..L..GIVSQCLKP.G..RkLLSL--................DRQFLENVSL.......KINVK..........AGGR.Ns...vLQR.P....LVP.G-........-......-..-....G...L...E.....N.T..T.I..................................IFGADVTHPASGE...............DSSA..SIAAVVASMD..wP...E.I.T...K....Y.K.....A.LV..S...AQ.....P..........P.......R....Q...EI......IQD....LFTmtevaqnadapaq................. [...]
+AGO14_ORYSJ/677-1009   ............................................................................................l-LIVILPD..-VNGY..YGRIKRV.CE...TE..L..GIVSQCLKP.G..RkLLSL--................DRQFLENVSL.......KINVK..........AGGR.Ns...vLQR.P....LVP.G-........-......-..-....G...L...E.....N.T..T.I..................................IFGADVTHPASGE...............DSSA..SIAAVVASMD..wP...E.I.T...K....Y.K.....A.LV..S...AQ.....P..........P.......R....Q...EI......IQD....LFTmtevaqnadapaq................. [...]
+C5WPM0_SORBI/900-1216  ............................................................................................l-LIIILPD..-MSGF..YGRIKRL.CE...TE..L..GLITQCCAP.K..N.VRKG--................GNQYLENLSL.......KINVK..........VGGR.N....tVLD.D....ALN.RR........I......P..L....L...T...D.....C.P..T.I..................................VFGADVTHPSPGE...............SSSP..SIAAVVASMD..wP...Q.V.T...K....Y.K.....C.LV..S...SQ.....G..........H.......R....V...EI......ING...lYTEvrdpqk........................ [...]
+AGO12_ORYSJ/693-1012   ...........................................................................................ql-LIVILTE..-ISGS..YGRIKRI.CE...TE..V..GVITQCCAP.K..S.LQKG--................GKQYLENLAL.......KMNVK..........VGGR.N....tVLE.D....ALH.KK........I......P..I....L...T...D.....R.P..T.I..................................VFGADVTHPSPGE...............DASP..SIAAVVASMD..wP...E.V.T...K....Y.K.....C.LV..S...TQ.....S..........H.......R....E...EI......ISN...lYTEvkdplk........................ [...]
+B9FAL8_ORYSJ/438-757   ...........................................................................................ql-LIVILTE..-ISGS..YGRIKRI.CE...TE..V..GVITQCCAP.K..S.LQKG--................GKQYLENLAL.......KMNVK..........VGGR.N....tVLE.D....ALH.KK........I......P..I....L...T...D.....R.P..T.I..................................VFGADVTHPSPGE...............DASP..SIAAVVASMD..wP...E.V.T...K....Y.K.....C.LV..S...TQ.....S..........H.......R....E...EI......ISN...lYTEvkdplk........................ [...]
+A2XKQ7_ORYSI/654-972   ............................................................................................l-LIVILPE..-ISGS..YGRIKRI.CE...TE..V..GVITQCCAP.K..S.LQKG--................GKQYLENLAL.......KMNVK..........VGGR.N....tVLE.D....ALH.KK........I......P..I....L...T...D.....R.P..T.I..................................VFGADVTHPSPGE...............DASP..SIAAVVASMD..wP...E.V.T...K....Y.K.....C.LV..S...TQ.....S..........H.......R....E...EI......ISN...lYTEvkdplk........................ [...]
+C5WPM1_SORBI/697-1047  ............................................................................................l-LIVVLPD.aNASFF..YGRIKRL.CE...TE..L..GIITQCCIP.K..N.VHKG--................GRQYLQNLAL.......KINVK..........VGGR.N....tVLE.D....ALN.RR........I......H..L....L...T...D.....L.P..T.I..................................IFGADVTHPAPGE...............DASP..SIAAVVASMD..wP...E.V.S...K....Y.R.....C.LV..S...SQ.....G..........H.......R....E...EI......IAD...lFTQvkdpqkgllhggmirhaeh........... [...]
+C0PMV6_MAIZE/89-412    ............................................................................................l-LIVVLPD.aNASVF..YGRIKRL.CE...TE..L..GLVTQCCQP.K..N.VFKG--................GRQYLQNLAL.......KINVK..........VGGR.N....tVLE.D....ALN.RR........I......H..L....L...T...D.....L.P..T.I..................................IFGADVTHPAPGE...............DASP..SIAAVVASMD..wP...Q.V.A...K....Y.R.....C.LV..S...SQ.....G..........H.......R....E...EI......ITD...lFTQvkdpqk........................ [...]
+B8APJ4_ORYSI/9-101     ..................................................................................ykcsvssqshr--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+AGO11_ORYSJ/541-848    ............................................................................................l-LVIVLPD..ANATV.fYGRIKRL.CE...TE..L..GVITQCCLA.R..N.VQNV--................----------.......-----..........-GGR.N....tVLE.D....ALH.RR........I......P..L....L...T...D.....M.P..T.M..................................IFGADVTHPPAGE...............DSSP..SIAAVVASMD..wP...E.V.S...K....Y.K.....C.SV..S...SQ.....S..........H.......R....E...EI......IAD...lFTEvkdsqn........................ [...]
+B9FEW4_ORYSJ/531-767   .............................................................................anatvfygrikrlcet--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....E...L...D.....M.P..T.M..................................IFGADVTHPPAGE...............DSSP..SIAAVVASMD..wP...E.V.S...K....Y.K.....C.SV..S...SQ.....S..........H.......R....E...EI......IAD...lFTEvkdsqn........................ [...]
+B9FX53_ORYSJ/672-981   ...........................................................................................ll-LVVMTDD.kNNASL..YGDVKRI.CE...TE..I..GVLSQCCRA.K..Q.VYKERN................-VQYCANVAL.......KINAK..........AGGR.N.....SVF.L....NVE.AS........L......P..V....V...S...K.....S.P..T.I..................................IFGADVTHPGSFD...............ESTP..SIASVVASAD..wP...E.V.T...K....Y.N.....S.VV..R...MQ.....A..........S.......R....K...EI......IQD....LDS.............................. [...]
+AGO18_ORYSJ/747-1056   ...........................................................................................ll-LVVMTDD.kNNASL..YGDVKRI.CE...TE..I..GVLSQCCRA.K..Q.VYKERN................-VQYCANVAL.......KINAK..........AGGR.N.....SVF.L....NVE.AS........L......P..V....V...S...K.....S.P..T.I..................................IFGADVTHPGSFD...............ESTP..SIASVVASAD..wP...E.V.T...K....Y.N.....S.VV..R...MQ.....A..........S.......R....K...EI......IQD....LDS.............................. [...]
+B8B5Y3_ORYSI/745-1054  ...........................................................................................ll-LVVMTDD.kNNASL..YGDVKRI.CE...TE..I..GVLSQCCRA.K..Q.VYKERN................-VQYCANVAI.......KINAK..........AGGR.N.....SVF.L....NVE.AS........L......P..V....V...S...K.....S.P..T.I..................................IFGADVTHPGSFD...............ESTP..SIASVVASAD..wP...E.V.T...K....Y.N.....S.LV..R...MQ.....A..........S.......R....K...EI......IQD....LDS.............................. [...]
+C5X8G4_SORBI/699-1002  ............................................................................................l-LLAILPE..KNGNL..YGNFKRI.CE...TE..I..GIMSQCCLD.K..N.VRSA--................GPPYFANVAI.......KINAK..........FGGR.N.....LEF.A....NPK.ES........L......P..V....V...S...I.....E.P..T.I..................................IFGADVTHPAALD...............DTAP..SIASVVASQD..wP...T.V.A...N....Y.N.....G.IA..R...AQ.....G..........H.......R....K...EL......IDG....LED.............................. [...]
+C5X8G7_SORBI/41-220    ..........................................................................................ivk--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+C5WR49_SORBI/670-825   ..........................................................................................div--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+Q10P03_ORYSJ/678-756   ........................................................................................gtead--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B9F6T7_ORYSJ/653-731   ........................................................................................gtead--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B8AK97_ORYSI/622-700   ........................................................................................gtead--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B9ZU55_9TURB/580-893   ............................................................................................i-LFFALPR..KDSGY..YARVKVA.AD...QL..L..IVPSQVVVA.G..G.-KG---................ITQKVDLLLQ.......KVNAK..........LGGQ.N.....TDL.V....PMK.QD........-......P..A....M...E...N.....V.A..R.Llge............................pimFIGADVTHPDSHD..............eDGRP..SIAAVIGSSH...R...D.I.F...S....Y.A.....A.QV..R...AQ.....K..........Pia..krrA....K...ES......IDD....MQT.............................. [...]
+Q0DZJ0_ORYSJ/35-101    ........................................................................................rakre--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B9IL53_POPTR/1-160     .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.M..................................FMGADVTHPCPLE...............DISP..SAAAVVGSMN..wP...A.A.N...K....Y.V.....S.RM..R...SQ.....T..........H.......R....Q...EI......IWD....LGA.............................. [...]
+A5BG29_VITVI/774-895   ........................................................................................dlgam--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+A5BW27_VITVI/926-1238  ...........................................................................................ql-LICIMER..-KHKG..YADLKRI.AE...TS..I..GVVSQCCLY.Q..N.LGKS--................SSQFLANLAL.......KINAK..........MGGC.T....vALY.N....SLP.SQ........I......PrlL....R...P...D.....E.P..V.I..................................FMGADVTHPHPLD...............DFSP..SIAAVVGSMN..wP...A.A.N...K....Y.V.....S.RM..R...SQ.....T..........H.......R....Q...EI......IQD....LGA.............................. [...]
+B9S921_RICCO/670-981   ...........................................................................................ql-LICIMEK..-RHKG..YADLKRI.AE...TS..V..GVVSQCCLF.P..N.LGKL--................SSQFLANLAL.......KINAK..........VGGC.T....vALF.N....SLP.SQ........I......PrlL....H...S...D.....D.P..V.I..................................FMGADVTHPHPLD...............DFSP..SVAAVVGSMN..wP...A.A.N...K....Y.A.....S.RM..R...SQ.....T..........H.......R....Q...EI......IQD....LGA.............................. [...]
+B9HXP0_POPTR/520-831   ...........................................................................................ql-LICVMEK..-KHKG..YADLKRI.AE...TS..V..GVVTQCCLY.L..N.LGKL--................SSQFLANLAL.......KINAK..........VGGC.T....vALY.N....SLP.SQ........I......PrlL....R...S...N.....E.P..V.I..................................FMGADVTHPHPLD...............DISP..SVAAVVGSMN..wP...A.A.N...K....Y.V.....S.RM..R...SQ.....T..........H.......R....Q...EI......IQD....LGE.............................. [...]
+D3GBV1_LOTJA/669-981   ............................................................................................l-LICVMER..-KHKG..YADLKRI.AE...TS..I..GLISQCCLY.P..N.LCKL--................SSQFLANLAL.......KINAK..........VGGC.T....vALY.N....SLP.SQ........L......PrlF....H...I...D.....E.P..V.I..................................FMGADVTHPHPLD...............DSSP..SVAAVVGSMN..wP...T.A.N...K....Y.I.....S.RI..R...SQ.....T..........H.......R....Q...EI......IQD....LGP.............................. [...]
+A3AJI1_ORYSJ/584-892   ............................................................................................l-LICVMER..-RHQG..YADLKRI.AE...TS..I..GVVTQCCLY.S..N.LSKL--................TSQFLTNLAL.......KINAK..........LGGC.N....iALY.S....SFP.CQ........I......PriF....L...S...E.....E.P..V.M..................................FMGADVTHPHPLD...............DSSP..SVVAVVASMN..wP...S.A.N...K....Y.I.....S.RM..R...SQ.....T..........H.......R....K...EI......IEQ....LDV.............................. [...]
+AGO7_ORYSJ/709-1017    ............................................................................................l-LICVMER..-RHQG..YADLKRI.AE...TS..I..GVVTQCCLY.S..N.LSKL--................TSQFLTNLAL.......KINAK..........LGGC.N....iALY.S....SFP.CQ........I......PriF....L...S...E.....E.P..V.M..................................FMGADVTHPHPLD...............DSSP..SVVAVVASMN..wP...S.A.N...K....Y.I.....S.RM..R...SQ.....T..........H.......R....K...EI......IEQ....LDV.............................. [...]
+A2YQ96_ORYSI/716-1024  ............................................................................................l-LICVMER..-RHQG..YADLKRI.AE...TS..I..GVVTQCCLY.S..N.LSKL--................TSQFLTNLAL.......KINAK..........LGGC.N....iALY.S....SFP.CQ........I......PriF....L...S...E.....E.P..V.M..................................FMGADVTHPHPLD...............DSSP..SVVAVVASMN..wP...S.A.N...K....Y.I.....S.RM..R...SQ.....T..........H.......R....K...EI......IEQ....LDV.............................. [...]
+D0EYF3_MAIZE/683-995   ............................................................................................l-LICVMER..-RHRG..YADLKRI.AE...TS..I..GVLTQCCLY.S..N.LSKL--................SFQFLANLAL.......KINAK..........LGGC.N....vALY.N....SLP.CQ........I......P..R....Vf.sD...E.....E.P..A.M..................................FMGADVTHPHPLD...............DSSP..SVVAVVASMN..wP...S.A.N...K....Y.I.....S.RM..R...SQ.....T..........H.......R....K...EI......IER....LDV.............................. [...]
+C5WVP1_SORBI/688-996   ............................................................................................l-LICVMER..-RHRG..YADLKRI.AE...TS..I..GVLTQCCLY.S..N.LSKL--................SFQFLANLAL.......KINAK..........VGGS.N....vALY.N....SLP.CQ........I......P..R....Vf.sD...K.....E.P..V.M..................................FMGADVTHPHPLD...............DSSP..SVVAVVASMN..wP...S.A.N...K....Y.I.....S.RM..R...SQ.....T..........H.......R....K...EI......IER....LDV.............................. [...]
+Q9C793_ARATH/649-950   ............................................................................................l-IICVMEK..-KHKG..YGDLKRI.SE...TR..I..GVVTQCCLY.P..N.ITKL--................SSQFVSNLAL.......KINAK..........IGGS.M....tELY.N....SIP.SH........I......PrlL....R...P...D.....E.P..V.I..................................FMGADVTHPHPFD...............DCSP..SVAAVVGSIN..wP...E.A.N...R....Y.V.....S.RM..R...SQ.....T..........H.......R....Q...EI......IQD....LDL.............................. [...]
+A3AXD9_ORYSJ/720-1023  ....................................................................................llfcpmlnr--------..--CHG..YKTLKLM.CE...TE..L..GIQTQCFLS.T..A.AKLDEK...............rQDQYITNLAL.......KINGK..........IGGS.N.....MQL.D....P--.DS........I......P..V....V...S...A.....K.D..F.M..................................FIGADVNHPPPGNv.............sKDIP..SIAAVVASVD...K...G.A.S...K....Y.V.....T.RI..R...AQ.....Y..........H.......R....C...EM......IQN....LGD.............................. [...]
+A2XXJ0_ORYSI/688-991   ....................................................................................llfcpmlnr--------..--CHG..YKTLKLM.CE...TE..L..GIQTQCFLS.T..A.AKLDEK...............rQDQYITNLAL.......KINGK..........IGGS.N.....MQL.D....P--.DS........I......P..V....V...S...A.....K.D..F.M..................................FIGADVNHPPPGNv.............sKDIP..SIAAVVASVD...K...G.A.S...K....Y.V.....T.RI..R...AQ.....Y..........H.......R....C...EM......IQN....LGD.............................. [...]
+AGO3_ORYSJ/720-1023    ....................................................................................llfcpmlnr--------..--CHG..YKTLKLM.CE...TE..L..GIQTQCFLS.T..A.AKLDEK...............rQDQYITNLAL.......KINGK..........IGGS.N.....MQL.D....P--.DS........I......P..V....V...S...A.....K.D..F.M..................................FIGADVNHPPPGNv.............sKDIP..SIAAVVASVD...K...G.A.S...K....Y.V.....T.RI..R...AQ.....Y..........H.......R....C...EM......IQN....LGD.............................. [...]
+Q00RR5_ORYSA/745-1048  ....................................................................................llfcpmlnr--------..--CHG..YKTLKLM.CE...TE..L..GIQTQCFLS.T..A.AKLDEK...............rQDQYITNLAL.......KINGK..........IGGS.N.....MQL.D....P--.DS........I......P..V....V...S...A.....K.D..F.M..................................FIGADVNHPPPGNv.............sKDIP..SIAAVVASVD...K...G.A.S...K....Y.V.....T.RI..R...AQ.....Y..........H.......R....C...EM......IQN....LGD.............................. [...]
+B9FCH7_ORYSJ/626-928   ..........................................................................................qll--FCPMSD..-QHPG..YKTLKLI.CE...TQ..L..GIQTQCFLS.F..L.ANKQQG................QDQYMSNLAL.......KINGK..........IGGS.N....iQLF.G....ESL.P-........-......-..R....I...S...G.....A.P..Y.M..................................FIGADVNHPSPGN...............VESP..SIAAVVASVD...Q...G.A.S...K....Y.V.....P.RI..R...AQ.....P..........H.......R....C...EV......IQH....LGD.............................. [...]
+AGO2_ORYSJ/687-989     ..........................................................................................qll--FCPMSD..-QHPG..YKTLKLI.CE...TQ..L..GIQTQCFLS.F..L.ANKQQG................QDQYMSNLAL.......KINGK..........IGGS.N....iQLF.G....ESL.P-........-......-..R....I...S...G.....A.P..Y.M..................................FIGADVNHPSPGN...............VESP..SIAAVVASVD...Q...G.A.S...K....Y.V.....P.RI..R...AQ.....P..........H.......R....C...EV......IQH....LGD.............................. [...]
+Q00RR6_ORYSA/693-995   ..........................................................................................qll--FCPMSD..-QHPG..YKTLKLI.CE...TQ..L..GIQTQCFLS.F..L.ANKQQG................QDQYMSNLAL.......KINGK..........IGGS.N....iQLF.G....ESL.P-........-......-..R....I...S...G.....A.P..Y.M..................................FIGADVNHPSPGN...............VESP..SIAAVVASVD...Q...G.A.S...K....Y.V.....P.RI..R...AQ.....P..........H.......R....C...EV......IQH....LGD.............................. [...]
+A2XXI9_ORYSI/693-995   ..........................................................................................qll--FCPMSD..-QHPG..YKTLKLI.CE...TQ..L..GIQTQCFLS.F..L.ANKQQG................QDQYMSNLAL.......KINGK..........IGGS.N....iQLF.G....ESL.P-........-......-..R....I...S...G.....A.P..Y.M..................................FIGADVNHPSPGN...............VESP..SIAAVVASVD...Q...G.A.S...K....Y.V.....P.RI..R...AQ.....P..........H.......R....C...EV......IQH....LGD.............................. [...]
+C5YG12_SORBI/746-1048  ..........................................................................................qll--FCPMSE..-QHPG..YKTLKLI.CD...TQ..L..GILTQCFLS.D..R.ANKPNG................QDQYMTNLAL.......KINGK..........LGGS.N.....VQL.F....DSL.PR........-......-..V....G...G...G.....A.P..F.M..................................FIGADVNHPSPGN...............VESP..SIAGVVASIN...S...G.A.N...K....Y.V.....S.RI..R...AQ.....P..........H.......R....C...EV......IQQ....LGE.............................. [...]
+C0PIX4_MAIZE/1-297     ..........................................................................................mse--------..-QHSG..YKTLKLI.CD...TQ..L..GILTQCLLS.D..R.ANNRKG................QDQYMTNLAL.......KINGK..........LGGS.N.....VQL.F....DSL.PR........-......-..V....G...G...G.....V.P..F.M..................................FIGADVNHPSPGN...............VESP..SIAAVVASVN...S...G.V.N...K....Y.V.....T.RI..R...AQ.....P..........H.......R....C...EV......IQQ....LGE.............................. [...]
+Q9SHF2_ARATH/841-1145  ............................................................................................l-VLCAMTG..-KHDG..YKTLKWI.AE...TK..L..GLVTQCFLT.I..S.AIKGET...............vSDQYLANLAL.......KINAK..........VGGT.N.....VEL.V....DNI.FS........F......-..F....K...K...E.....D.K..V.M..................................FIGADVNHPAAHD...............NMSP..SIVAVVGTLN..wP...E.A.N...R....Y.A.....A.RV..K...AQ.....S..........H.......R....K...EE......IQG....FGE.............................. [...]
+Q9SHF3_ARATH/665-965   ...........................................................................................tl-VLCAMSR..-KDDG..YKTLKWI.AE...TK..L..GLVTQCFLT.G..P.ATKG--................GDQYRANLAL.......KMNAK..........VGGS.N.....VEL.M....DTF.SF........-......-..F....K...K...E.....D.E..V.M..................................FIGADVNHPAARD...............KMSP..SIVAVVGTLN..wP...E.A.N...R....Y.A.....A.RV..I...AQ.....P..........H.......R....K...EE......IQG....FGD.............................. [...]
+Q8GX33_ARATH/191-491   ...........................................................................................tl-VLCAMSR..-KDDG..YKTLKWI.AE...TK..L..GLVTQCFLT.G..P.ATKG--................GDQYRANLAL.......KMNAK..........VGGS.N.....VEL.M....DTF.SF........-......-..F....K...K...E.....D.E..V.M..................................FIGADVNHPAARD...............KMSP..SIVAVVGTLN..wP...E.A.N...R....Y.A.....A.RV..I...AQ.....P..........H.......R....K...EE......IQG....FGD.............................. [...]
+B9SSM8_RICCO/639-934   ............................................................................................i-LVCVLPK..-EDPG..YSNLKWI.CE...TK..V..GIVTQCCLS.E..N.AFRP--................KAQFLANLAL.......KINAK..........LGGS.N.....VEL.F....KQP.QC........-......-..L....Q...S...K.....G.H..V.M..................................FIGADVNHPSSYN...............STSP..SIAAVVATMN..wP...A.A.N...Q....Y.G.....A.LI..C...PQ.....D..........H.......R....A...EK......ILK....FGD.............................. [...]
+A5AFZ6_VITVI/719-1022  ...........................................................................................qi-LVCVMAR..-KDPG..YNYLKWF.CE...TN..I..GIVTQCCLS.S..P.ANKA--................NDQYLANLAL.......KMNAK..........LGGS.N.....VEL.I....DRL.PH........F......-..-....E...N...E.....G.Y..V.M..................................FVGADVNHPGAWN...............SASP..SIAAVVATVN..wP...A.V.N...R....Y.A.....A.RV..R...PQ.....L..........H.......R....T...EK......ILN....FGD.............................. [...]
+A5CBU3_VITVI/601-900   ...........................................................................................qi-LVCVMAR..-RDAG..YGYLKWF.SE...TR..L..GMVTQCCLS.S..P.ANKA--................SDQYLANLAL.......KLNAK..........LGGS.N.....VEL.I....ERL.PR........F......E..-....-...G...E.....G.H..V.M..................................FIGADVNHPGSQN...............TTSP..SIAAVVATVN..wP...A.A.N...R....Y.A.....A.RI..R...PQ.....A..........H.......R....M...EK......IQN....FGA.............................. [...]
+A5B8D3_VITVI/625-924   ...........................................................................................qi-LVCVMAR..-KDAG..YGYLKWF.AE...TK..L..GMVTQCCLS.R..P.ANKV--................SDHHLANLAL.......KLNAK..........LGGS.N.....VEL.I....XRL.PR........F......E..-....-...G...E.....G.H..V.M..................................FIGADVNHPGSQN...............TTSP..SIAAVVATXN..wP...A.A.N...R....Y.A.....A.RI..R...PQ.....A..........H.......R....M...EK......IQN....FGA.............................. [...]
+B9S3I1_RICCO/146-445   ...........................................................................................qi-LICVMSR..-KDPG..YKYLKWI.SE...TK..V..GVVTQCCLS.D..Y.ANKG--................HDQYFANLAL.......KINAK..........LGGN.N.....VEL.N....DRL.PY........F......-..-....E...G...E.....D.H..V.M..................................FLGADVNHPGSRN...............TTSP..SIAAVVATVN..wP...A.A.N...R....Y.A.....A.RV..R...PQ.....D..........H.......R....K...EK......ILN....FGD.............................. [...]
+B9NA51_POPTR/676-973   ...........................................................................................qf-LLCVMSK..-KDPG..YKYLKWI.CE...TK..V..GIVTQCCLS.R..S.ANKV--................NDQYLANIGL.......KINAK..........LGGS.N.....AEL.S....D--.-R........L......P..Y....F...G...D.....E.N..HiM..................................FIGADVNHPAARN...............TTSP..SIAAVVGTTN..wP...A.A.N...R....Y.A.....A.RV..R...PQ.....D..........H.......R....C...EK......ILN....FGD.............................. [...]
+A8PFS7_COPC7/454-749   ....................................................................fvvvlpqggdeirigvkhfgnfinp--------..-----..-------.--...--..-..GIATQCLKG.F..Q.CRGA--................RPQYWANVMI.......QVNGK..........LGGI.-.....HAV.P....NST.TS........G......S..L....V...D...E....aI.A..T.M..................................LIGADVTHPPPGDq.............sKHKP..SFAAIVWSWD...R...H.Y.A...R....Y.R.....A.RD..S...IQ.....R..........G.......R....E...EI......IQH....MKP.............................. [...]
+A8NXQ6_COPC7/547-849   ............................................................................................l-IVVVLPDgpVANEI..YSQVKFF.GD...VK..M..GVHTQCMRA.M..R.CFGG--................NNQYFANIAL.......KLNAR..........LGGV.Nv...aPDL.S....DGV.SR........N......L..L....S...P...P.....N.K..T.L..................................VMGADVIHPSPGS...............EGRP..SFTAVVGSTD...C...N.M.T...R....F.V.....S.ST..R...AQ.....T..........S.......R....E...EI......IDD....LKD.............................. [...]
+A8P6A7_COPC7/477-803   ............................................................................................l-IFAVLPP..NSGDI..YTGVKRF.GD...VT..M..GIATQCLLS.N..K.CKKG--................NHQYWANVTL.......KVNVK..........LGGI.N....fY--.P....ELR.GD........I......-..L....D...P...A.....K.P..T.I..................................IMGADAIHPPPGV...............RDKP..SVTALVSSID...S...K.L.A...R....Y.V.....A.TS..R...VQ.....K..........Gsds.gkgG....R...EI......ILD....MED.............................. [...]
+B0CXE0_LACBS/567-880   .............................................................................................LIVVILPD..GGDDI..YTAVKHF.GD...VT..M..GVATQCLLA.K..K.CYRA--................NAQYWANVML.......KVNVK..........LDGI.Ns...vPDL.P....SLT.DP........-......-..-....-...-...A.....H.P..T.I..................................IMGADVIHPAPGT...............EGRP..SFTALVASVD...T...T.V.S...K....Y.V.....A.MS..R...VQ.....T..........G.......R....Q...EM......IDD....LED.............................. [...]
+A8PFQ6_COPC7/458-767   ............................................................................................l-VVVILPE..GGDEI..YTSVKHF.GD...IV..R..GVATQCLIG.R..K.CSRA--................RPQYWANVLL.......KVNVK..........LGGI.N.....SII.D....PSG.SP........L......-..A....D...P...A.....N.P..T.V..................................VMGADVIHPAPGS...............EGRP..SFTALVSSVD...T...H.A.T...K....Y.I.....A.CN..N...VQ.....E..........G.......R....T...EI......IED....LEA.............................. [...]
+B0CYG1_LACBS/553-863   .............................................................................................LIVVVLPE..GGNDI..YTAVKHF.GD...IT..M..GVATQCMKS.S..K.CFRA--................KPQYYANISL.......KINVK..........LGGI.N.....TI-.P....D-P.SS........V......S..V....L...T...Dp...hQ.P..T.I..................................VMGADVIHPAPGS...............DGRP..SFTALVANVD...S...D.T.A...K....Y.I.....A.DS..R...VQ.....T..........S.......R....Q...EM......IEE....LQA.............................. [...]
+B0D2D0_LACBS/417-738   ............................................................................................l-IVAVLPD..NVGDL..YSTIKHH.GD...IR..F..GVATQCLKS.H..K.CSRA--................KEQYWKNVML.......KVNVK..........LGGI.N.....VVP.S....STE.LS........D......P..A....-...-...-.....N.P..T.Ivigtpsai..................iasiltfcLSGADTAHPAPGA...............HDRP..SFTSVVANVD...S...N.V.A...K....Y.V.....A.ST..R...VQ.....K..........G.......R....Q...EI......ITD....LKE.............................. [...]
+B2RFN0_OIKDI/550-850   ...........................................................................................fa--LVILPR..RDSHI..YSIVKEK.AE...LV..F..GVVTQCVQS.R..N.VERA--................NAMFYGNLLQ.......KINVK..........LGGV.N.....TKV.V....NRI.Q-........-......-..-....L...F...T.....K.P..I.M..................................IVGLSFSHPAPGS...............-RNP..SIVTASFSCD...A...S.G.T...K....Y.F.....V.GK..R...LQ.....S..........S.......R....F...SL......ATG....IKD.............................. [...]
+C1DZY0_9CHLO/572-888   ............................................................................................i-VFCVLPK.fDNKHI..YNSIKEC.AE...IE..I..GVRTQCIMN.K..V.GGGGGG...............lNDQTLANIMQ.......KVNAK..........LGGI.N.....MLV.S....PVT.SP........NaaprspT..Q....L...F...S.....K.A..T.I..................................IFGGDVSHASPGS...............-QAS..SIAALVGNIN...R...S.C.T...Q....Y.V.....A.RL..S...AQ.....A..........N.......R....K...EM......IDD....LKS.............................. [...]
+Q4PLA9_PICGL/597-913   ............................................................................................f-LLCILPE.rKNSDL..YGPWKRK.FL...AD..L..GVINQCIAP.P..N.MRKV--................NDQYLTNVAL.......KINAK..........VGGL.N....sVLS.V....EFA.HK........I......P..K....I...S...T.....K.P..T.I..................................IIGMDVSHGSPGH...............ADSP..SISAVVSSRE..wP...L.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IEA...lYKPlpsg.......................... [...]
+A5BG74_VITVI/577-717   .............................................................................................FILCILPQ.kKNCDI..YGPWKRQ.CL...SG..C..GVPTQCIAP.S..T.PVV---................NDQYLTNLLL.......KINAK..........LGGL.N....sLLT.M....GYC.PS........L......R..L....I...S...T.....I.P..T.L..................................ILGMDVSHGSPGR...............ADVP..SIAAVVSSRH..wP...S.I.S...Q....Y.R.....A.TV..R...TQ.....S..........P.......K....L...EM......IDS....L--.............................. [...]
+Q3E984_ARATH/528-708   ............................................................................................f-LLCILEK..KNSDV..YEKSCSM.WN...CE..C..IVPPQNL--.-..-.------................NDQYLTNLLL.......KINAK..........LGGL.N....sVLD.M....ELS.GT........M......P..L....V...M...R.....V.P..T.I..................................IIGMDVSHGSPGQ..............sDHIP..SIAAVVSSRE..wP...L.I.S...K....Y.R.....A.CV..R...TQ.....S..........P.......K....V...EM......IDS...lFKPvsdk.......................... [...]
+Q2LFC2_NICBE/565-873   ............................................................................................f-LLCLLPE.rKNCDI..YGPWKRK.NL...AD..Y..GIVTQCLAP.G..R.V-----................NDQYLTNLLL.......KINAK..........LGGL.N....sVLA.I....EHS.PS........I......P..M....V...S...K.....V.P..T.M..................................ILGMDVSHGSPGQ...............SDVP..SIAAVVSSRQ..wP...S.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IDN...lFKKvsdt.......................... [...]
+Q2LFC1_NICBE/558-866   ............................................................................................f-LLCLLPE.rKNCDI..YGPWKRK.NL...AE..F..GIVTQCIAP.T..R.V-----................NDQYITNVLL.......KINAK..........LGGL.N....sMLT.V....EHA.PA........I......P..M....V...S...K.....V.P..T.I..................................ILGMDVSHGSPGQ...............SDVP..SIAAVVSSRQ..wP...S.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IDN...lFKRasdt.......................... [...]
+B9SP45_RICCO/574-882   ............................................................................................f-LLCLLPE.rKNSDL..YGPWKKK.NL...SD..F..GIVTQCIAP.Q..R.V-----................NDQYLTNVLL.......KINAK..........LGGL.N....sMLA.V....EHS.PS........I......P..L....V...S...K.....V.P..T.I..................................IIGMDVSHGSPGH...............SDVP..SIAAVVSSRQ..wP...L.I.S...R....Y.R.....A.CV..R...TQ.....S..........P.......K....V...EM......IDS...lYKPvsdt.......................... [...]
+B9HK80_POPTR/565-884   ............................................................................................f-LLCILPE.rKNSDI..YGPWKRK.NL...SD..L..GIVTQCIAP.T..K.V-----................NDQYLTNVLL.......KINAKvefcnvipfeLGGM.N....sLLS.I....EHA.PS........I......P..L....V...S...K.....L.P..T.L..................................ILGMDVSHGSPGH...............SDVP..SIAAVVSSRH..wP...L.I.S...R....Y.R.....A.SV..R...TQ.....S..........Q.......K....V...EM......IAN...lFKPvagt.......................... [...]
+AGO4A_ORYSJ/557-865    ............................................................................................f-LLCVLAE.rKNSDI..YGPWKRK.CL...AE..F..GIITQCVAP.T..R.V-----................NDQYITNVLL.......KINAK..........LGGL.N....sLLQ.I....ETS.PS........I......P..L....V...S...K.....V.P..T.I..................................ILGMDVSHGSPGQ...............SDIP..SIAAVVSSRE..wP...L.V.S...K....Y.R.....A.SV..R...SQ.....S..........P.......K....L...EM......IDG...lFKPqgaq.......................... [...]
+B8ACN1_ORYSI/524-832   ............................................................................................f-LLCVLAE.rKNSDI..YGPWKRK.CL...AE..F..GIITQCVAP.T..R.V-----................NDQYITNVLL.......KINAK..........LGGL.N....sLLQ.I....ETS.PS........I......P..L....V...S...K.....V.P..T.I..................................ILGMDVSHGSPGQ...............SDIP..SIAAVVSSRE..wP...L.V.S...K....Y.R.....A.SV..R...SQ.....S..........P.......K....L...EM......IDG...lFKPqgaq.......................... [...]
+A2ZRR6_ORYSJ/650-958   ............................................................................................f-LLCVLAE.rKNSDI..YGPWKRK.CL...AE..F..GIITQCVAP.T..R.V-----................NDQYITNVLL.......KINAK..........LGGL.N....sLLQ.I....ETS.PS........I......P..L....V...S...K.....V.P..T.I..................................ILGMDVSHGSPGQ...............SDIP..SIAAVVSSRE..wP...L.V.S...K....Y.R.....A.SV..R...SQ.....S..........P.......K....L...EM......IDG...lFKPqgaq.......................... [...]
+C0HGZ0_MAIZE/552-859   ............................................................................................f-LLCVLAE.rKNSDI..YGPWKKK.CL...AE..F..GIVTQCVAP.T..R.V-----................NDQYLTNVLL.......KINAK..........LGGL.N....sLLQ.I....ETS.PA........I......P..L....V...S...K.....V.P..T.I..................................ILGMDVSHGSPGH...............SDIP..SVAAVVSSRE..wP...L.I.S...K....Y.R.....A.SV..R...TQ.....S..........P.......K....M...EM......IDS...lFKPret........................... [...]
+B4FL08_MAIZE/45-352    ............................................................................................f-LLCVLAE.rKNSDI..YGPWKKK.CL...AE..F..GIVTQCVAP.T..R.V-----................NDQYLTNVLL.......KINAK..........LGGM.N....sLLQ.I....ETS.PA........I......P..L....V...S...K.....V.P..T.I..................................ILGMDVSHGSPGH...............SDVP..SIAAVVSSRE..wP...L.I.S...K....Y.R.....A.SV..R...TQ.....S..........P.......K....M...EM......IDS...lFKPrea........................... [...]
+C5YX36_SORBI/564-870   ............................................................................................f-LMCLLPE.rKNCEV..YGPWKRK.CL...AE..F..GIVTQCLAP.T..R.VN----................-DPYLLNLLM.......KINAK..........LGGL.N....sLLQ.V....EAS.PS........I......P..H....V...S...E.....V.P..T.I..................................ILGMDVSHGHPGQ...............-DRP..SVAAVVSSRQ..wP...L.I.S...K....Y.R.....A.SV..H...TQ.....S..........A.......R....L...EM......MSS...lFKPrgt........................... [...]
+B8AUX7_ORYSI/565-872   ............................................................................................f-LLCLLPE.rKNCEV..YGPWKRK.CL...AE..F..GIVTQCLAP.Q..R.V-----................NDQYLLNLLL.......KINAK..........LGGI.N....sLLQ.I....EAS.PS........I......P..L....V...S...K.....T.P..T.I..................................ILGMDVSHGQPGQ...............SDRP..SIAAVVSSRQ..wP...L.I.S...K....Y.R.....A.SV..H...TQ.....S..........P.......K....L...EM......MSS...lFKPrgt........................... [...]
+AGO4B_ORYSJ/565-872    ............................................................................................f-LLCLLPE.rKNCEV..YGPWKRK.CL...AE..F..GIVTQCLAP.Q..R.V-----................NDQYLLNLLL.......KINAK..........LGGI.N....sLLQ.I....EAS.PS........I......P..L....V...S...K.....T.P..T.I..................................ILGMDVSHGQPGQ...............SDRP..SIAAVVSSRQ..wP...L.I.S...K....Y.R.....A.SV..H...TQ.....S..........P.......K....L...EM......MSS...lFKPrgt........................... [...]
+Q01MP5_ORYSA/565-872   ............................................................................................f-LLCLLPE.rKNCEV..YGPWKRK.CL...AE..F..GIVTQCLAP.Q..R.V-----................NDQYLLNLLL.......KINAK..........LGGI.N....sLLQ.I....EAS.PS........I......P..L....V...S...K.....T.P..T.I..................................ILGMDVSHGQPGQ...............SDRP..SIAAVVSSRQ..wP...L.I.S...K....Y.R.....A.SV..H...TQ.....S..........P.......K....L...EM......MSS...lFKPrgt........................... [...]
+Q9ZVD5_ARATH/577-885   .............................................................................................FILCVLPD.kKNSDL..YGPWKKK.NL...TE..F..GIVTQCMAP.T..R.QPND--................--QYLTNLLL.......KINAK..........LGGL.N....sMLS.V....ERT.PA........F......T..V....I...S...K.....V.P..T.I..................................ILGMDVSHGSPGQ...............SDVP..SIAAVVSSRE..wP...L.I.S...K....Y.R.....A.SV..R...TQ.....P..........S.......K....A...EM......IES...lVKKngt........................... [...]
+Q56X15_ARATH/234-541   ............................................................................................f-LLCILAE.rKNSDV..YGPWKKK.NL...VD..L..GIVTQCIAP.T..R.L-----................NDQYLTNVLL.......KINAK..........LGGL.N....sLLA.M....ERS.TA........M......P..K....V...T...Q.....V.P..T.I..................................IVGMDVSHGSPGQ...............SDIP..SIAAVVSSRQ..wP...L.I.S...K....Y.K.....A.CV..R...TQ.....S..........R.......K....M...EM......IDN...lFKPvng........................... [...]
+Q84VQ0_ARATH/546-853   ............................................................................................f-LLCILAE.rKNSDV..YGPWKKK.NL...VD..L..GIVTQCIAP.T..R.L-----................NDQYLTNVLL.......KINAK..........LGGL.N....sLLA.M....ERS.PA........M......P..K....V...T...Q.....V.P..T.I..................................IVGMDVSHGSPGQ...............SDIP..SIAAVVSSRQ..wP...L.I.S...K....Y.K.....A.CV..R...TQ.....S..........R.......K....M...EM......IDN...lFKPvng........................... [...]
+Q84YI4_ARATH/550-857   ............................................................................................f-LLCILAE.rKNSDV..YGPWKKK.DL...VD..L..GIVTQCIAP.T..R.L-----................NDQYLTNVLL.......KINAK..........LGGL.N....sLLA.M....ERS.PA........M......P..K....V...T...Q.....V.P..T.I..................................IVGMDVSHGSPGQ...............SDIP..SIAAVVSSRQ..wP...L.I.S...K....Y.K.....A.CV..R...TQ.....S..........R.......K....M...EM......IDN...lFKPvng........................... [...]
+A5AMR1_VITVI/53-183    .......................................................................................lptllh--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B9SN14_RICCO/570-878   ............................................................................................f-LLSIFPD.rKNSDI..YGPWKRK.NL...AE..F..GIFNQCLCS.P..N.RL----................SEMYVTNVLM.......KINAK..........LGGL.N....tFLA.V....EQS.RN........V......P..F....V...S...K.....V.P..T.I..................................IFGMDVSHGSPGQ...............SDVP..SIAAVVSSRN..wP...L.L.S...R....Y.R.....A.SV..H...SQ.....S..........P.......K....V...EM......IDS...lFKPegk........................... [...]
+B9HDH5_POPTR/582-891   ............................................................................................f-LVCLLPD.rKNSDI..YGPWKRK.NL...AE..Y..GIFNQCLAP.T..R.V-----................NEQYILNVLL.......KINAK..........LGGL.N....sLLA.M....EQS.RN........I......P..F....V...S...K.....V.P..T.I..................................IFGMDVSHGSPGQ...............SDMP..SIAAVVSSRN..wP...L.L.S...R....Y.R.....A.SV..R...SQ.....S..........P.......K....V...EM......VDS....LFTltpdk......................... [...]
+B9IHG7_POPTR/573-882   ............................................................................................f-LVCLLPD.rKNSDI..YGPWKRK.NL...AE..Y..GIFNQCLAP.T..R.V-----................NDQYILNVLL.......KINAK..........LGGL.N....sLLA.M....EQS.RN........I......P..F....V...S...K.....V.P..T.I..................................IFGMDVSHGSPGQ...............SDIP..SIAAVVSSRN..wP...L.L.S...R....Y.R.....A.SV..R...SQ.....S..........P.......K....V...EM......VDS....LFKltadk......................... [...]
+AGO16_ORYSJ/535-844    ............................................................................................f-LLCVLPE.rKNCDL..YGPWKKK.NL...HE..M..GIITQCIVP.S..V.--KM--................NDQYYTNVLL.......KINAK..........LGGM.N....sKLS.L....EHR.HM........I......P..I....V...N...Q.....T.P..T.L..................................ILGMDVSHGSPGR...............ADVP..SIAAVVGSRC..wP...L.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IDS...lFKPlddg.......................... [...]
+B8B4Z4_ORYSI/515-824   ............................................................................................f-LLCVLPE.rKNCDL..YGPWKKK.NL...HE..M..GIITQCIVP.S..V.--KM--................NDQYYTNVLL.......KINAK..........LGGM.N....sKLS.L....EHR.HM........I......P..I....V...N...Q.....T.P..T.L..................................ILGMDVSHGSPGR...............ADVP..SIAAVVGSRC..wP...L.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IDS...lFKPlddg.......................... [...]
+B9FWI9_ORYSJ/515-824   ............................................................................................f-LLCVLPE.rKNCDL..YGPWKKK.NL...HE..M..GIITQCIVP.S..V.--KM--................NDQYYTNVLL.......KINAK..........LGGM.N....sKLS.L....EHR.HM........I......P..I....V...N...Q.....T.P..T.L..................................ILGMDVSHGSPGR...............ADVP..SIAAVVGSRC..wP...L.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IDS...lFKPlddg.......................... [...]
+C0P9X1_MAIZE/1-253     .....................................................................................mnsklale--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....-HR.QM........I......P..V....V...T...Q.....I.P..T.L..................................ILGMDVSHGSPGR...............ADIP..SIAAVVGSRC..wP...L.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IDS...lFKPlddg.......................... [...]
+C5YU43_SORBI/1-285     ............................................................................................m--------..-----..-------.--...--..-..GIVTQCIAP.S..N.--KM--................NDQYFTNVLL.......KINAK..........LGGM.N....sKLA.L....EHR.QM........I......P..V....V...T...Q.....I.P..T.L..................................ILGMDVSHGSPGR...............ADIP..SIAAVVGSRC..wP...L.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IDS...lFKPlddg.......................... [...]
+O48771_ARATH/542-860   .............................................................................................FILCILPE.rKTSDI..YGPWKKI.CL...TE..E..GIHTQCICP.I..K.I-----................SDQYLTNVLL.......KINSK..........LGGI.N....sLLG.I....EYS.YN........I......P..L....I...N...K.....I.P..T.L..................................ILGMDVSHGPPGR...............ADVP..SVAAVVGSKC..wP...L.I.S...R....Y.R.....A.AV..R...TQ.....S..........P.......R....L...EM......IDS...lFQPiente......................... [...]
+B9T7B0_RICCO/516-824   .............................................................................................FILCVLPE.rKNSDI..YGPWKKK.CL...SD..F..GIVTQCISP.F..K.I-----................NDQYLTNVLL.......KINSK..........LGGI.N....sLLE.I....EHS.KQ........I......R..L....I...M...D.....T.P..T.M..................................ILGMDVSHGARGC...............SDIP..SVAAVVGSRY..wP...L.I.S...R....Y.R.....A.CV..R...TQ.....S..........P.......K....V...EM......IDA....LFKltdd.......................... [...]
+B9IAL0_POPTR/521-830   .............................................................................................FILCVLAE.rKNSDI..YGPWKKT.SL...SD..F..GIVTQCISP.T..K.I-----................NDQYLTNVLL.......KINSK..........LGGI.N....sLLA.I....EHS.SH........I......P..L....I...M...D.....T.P..T.M..................................ILGMDVSHGSPGR...............SDMP..SVAAVVGSRC..wP...L.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IDA...lYKPlang.......................... [...]
+A5CB61_VITVI/15-305    ............................................................................................f-LLCVLPE.kKNSEI..YGPWKKR.SL...SD..F..GIVTQCISP.T..K.I-----................NDQYLTNVLL.......KINTK..........LGGT.N....sLLA.I....EHT.SR........I......P..L....I...K...D.....T.P..T.M..................................ILGMDVSHGSPGQ...............ADVP..SIAAVVGSRC..wP...L.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IDA...lYKPlang.......................... [...]
+B9EV67_ORYSJ/22-172    .........................................................................cgisiaqeftqvaarvlpap--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B8ACN0_ORYSI/540-670   .....................................................................................aceflane--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+AGO15_ORYSJ/546-853    ............................................................................................f-VLCVLPE.rKNCDI..YGPWKRM.CL...VK..Y..GIVTQCLAP.T..K.I-----................NDQYLTNVLL.......KINAK..........LGGL.N....sLLQ.I....ERN.QA........I......P..L....L...S...K.....T.P..T.I..................................ILGMDVSHGSPGR...............DDVP..SVAAVVSSLE..wP...L.I.S...K....Y.K.....A.SV..C...TQ.....S..........P.......R....L...EM......IDS....LFKlvgn.......................... [...]
+A9SKW0_PHYPA/518-721   ............................................................................................f-ILVALPTdsSSSNL..YVAFKRY.FE...MR..I..GVISQCMIK.P..R.QF----................NPQYLWNLVL.......KINQK..........MEGF.N....sPLT.S....KIT.S-........-......-..C....L...G...G.....A.P..T.I..................................IFGIDVSHGSIGE...............-NFP..SVAAVVATKN..wP...D.V.F...H....F.A.....T.RA..G...TQ.....Q..........S.......K....L...KL......IEG....LWEpksamvn....................... [...]
+A9RNH7_PHYPA/593-893   .............................................................................................FILVILPD..KDSPI..YVPFKRF.CE...MK..I..GVVSQCMVK.P..R.QLND--................--QYLGNLAL.......KINLK..........MGGF.N....sPLS.P....R--.--........M......V..S....C...L...G.....P.S..T.I..................................IFGMDVSHGSPGE...............SSVP..SIAAVVATKN..wP...D.V.F...H....Y.S.....T.QV..R...IQ.....P..........A.......K....T...EM......IEG....LHDsk............................ [...]
+A9SRY5_PHYPA/573-879   .............................................................................................FILAILAE..KDSPI..YVPFKRL.CE...IR..L..GIISQCMVK.P..R.TLND--................--QFLGNLAL.......KINLK..........MGGL.N.....SPL.S....QRM.L-........-......-..H....C...L...G.....Q.S..T.I..................................IFGMDVTHGSPGD...............VEIP..SIAAVVATKN..wP...E.V.F...H....Y.S.....T.QV..K...VQ.....P..........A.......R....M...EM......IQG....LYEpe............................ [...]
+A9U2A5_PHYPA/597-903   .............................................................................................FILVILSD..KDSPI..YAPFKRF.CE...MK..I..GIISQCMVK.P..R.QI----................NDQYLGNLAL.......KINLK..........MGGF.N.....SPL.S....R--.-R........M......L..T....C...L...G.....E.S..T.I..................................IFGMDVSHGSPGD...............LSVP..SIAAVVATKN..wP...E.V.F...H....Y.S.....T.QV..R...TQ.....P..........P.......K....M...EM......ITG....LYEpk............................ [...]
+A9SKW0_PHYPA/722-774   .........................................................................................ttts--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+A9TD99_PHYPA/2-180     ................................................................................emieglhiegkgg--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+C7SYH3_THAPS/1070-1160 .......................................................................................sssass--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+C7SYH2_PHATR/826-1176  ...........................................................................................lm--FAVIPT..KDVST..YAFVKYL.SH...VE..F..GIPSQVMVE.E..S.YQNQRS...............kTEAYCAGIAL.......KLNTK..........LSNSlNr..stAWS.I....YSG.TA........R......Q..W....L...M...D.....T.P..T.M..................................IMGYCVASGPGQD...............--SK..SIVVGTASLD...V...G.G.T...H....C.C.....H.DK..R...VQ.....S..........K.......S....H...IV......DSD...vLEE.............................. [...]
+B7G499_PHATR/1-107     .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+Q5KAT1_CRYNE/560-859   ............................................................................................i-ILCILPR..KEASI..YQTIKSV.GA...EG..LfkPVVTQCLQS.A..K.IKSDRG................IDQYCGNVAM.......KVHCK..........LGGV.-.....TH-.-....QVK.HN........V......-..-....-...-...D.....K.T..T.M..................................LCGADVTHPPSRG..............rVLYP..SIAATVASIN...G...E.N.N...Y....F.A.....G.CV..T...EQ.....G..........G.......R....V...EI......IQL....LDE.............................. [...]
+Q5KAU3_CRYNE/580-879   ............................................................................................i-IFCILPK..KDPSI..YQAIKAC.AA...EQ..LfkPVVTQCLQS.L..K.IKSDRG................IEQYCGNVAM.......KVHAK..........LGGL.-.....THQ.V....SHQ.L-........-......-..-....-...-...E.....R.T..T.M..................................MVGADTGHPPAKG..............gALPP..SIAVTVAAVN...G...E.N.N...R....F.V.....S.GV..R...LQ.....E..........G.......R....V...EI......IQD....LEN.............................. [...]
+B6HRB3_PENCW/625-938   ............................................................................................f-LVVVLPT..TEGKN..FDYVKYA.GD...LK..T..GILTHCILY.D..K.VLRS--................NEQYWSNNAM.......KVNLK..........MGGC.N.....QLL.Q....PAN.AR........F......-..I....G...A...G.....K.S..T.M..................................VVGLDVTHPSSAD..............pEVFP..SVASIVASID...Y...R.M.G...Q....W.P.....G.EV..R...AQ.....M..........R.......R....Q...EH......VVH....LKD.............................. [...]
+A2QG96_ASPNC/558-884   ............................................................................................f-LLIILPQ..AAEGL..YSRIKFL.CD...VQ..F..GIRNVCVVA.D..K.FLRS--................NDQFLSNVAL.......KLNLK..........LGGV.N.....QKL.L....TRS.L-........-......D..M....I...S...E.....G.K..T.M..................................VIGVDVTHPNSGNl.............pARAP..SVAAMVASVD...R...Y.L.A...Q....W.P.....A.EI..C...TQ.....P..........A.......R....Q...EL......VTQ....LGV.............................. [...]
+D0U264_CRYPA/482-802   ................................................................................lalivfpyqqpsg--------..----V..YNKIKFL.GD...VV..H..GLHTVCVIG.R..K.FVKNGQ...............tQREYFANVSL.......KINLK..........LGGT.N.....HQL.T....H-P.PE........L......-..-....-...-...F.....R.G..T.M..................................VVGYDAVHPTAVE..............kEDLP..SHMALVASVD...E...G.L.G...Q....W.S.....G.CY..W...TQ.....K..........R.......R....Q...EI......ADAt..nLKQ.............................. [...]
+D1ZJ09_SORMA/711-1030  ............................................................................................f-LVVVLPD..KDSTT..YSWVKRA.AD...MK..Y..GIHTVCVQG.E..K.LVEEKG................QAGYYANVGL.......KVNLK..........FGGT.N.....HN-.-....-IK.TP........I......P..L....L...A...K.....G.K..T.M..................................VVGYDVTHPTNLTag..........qspSTAP..SIVGLVSTID...Q...H.L.G...Q....W.P.....G.MV..W...NN.....P..........R.......G....Q...ES......MTK...qFTD.............................. [...]
+Q1K6I6_NEUCR/733-1052  ............................................................................................f-VVVLLPR..KDVAI..YNMVKRA.AD...IT..F..GVHTVCCVA.E..K.FLSTKG................QLGYFANVGL.......KVNLK..........FGGT.N.....HN-.-....-IK.TP........I......P..L....L...A...K.....G.K..T.M..................................VVGYDVTHPTNLAag..........qspASAP..SIVGLVSTID...Q...H.L.G...Q....W.P.....A.MV..W...NN.....P..........H.......G....Q...ES......MTE...qFTD.............................. [...]
+Q9P8T1_NEUCR/582-901   ............................................................................................f-VVVLLPR..KDVAI..YNMVKRA.AD...IT..F..GVHTVCCVA.E..K.FLSTKG................QLGYFANVGL.......KVNLK..........FGGT.N.....HN-.-....-IK.TP........I......P..L....L...A...K.....G.K..T.M..................................VVGYDVTHPTNLAag..........qspASAP..SIVGLVSTID...Q...H.L.G...Q....W.P.....A.MV..W...NN.....P..........H.......G....Q...ES......MTE...qFTD.............................. [...]
+B2AR52_PODAN/574-886   ............................................................................................l-VIVVLGD..QDANV..YNTVKKL.GD...VE..F..GIQTVCVVR.N..K.ITNN--................-KGYFTNVAL.......KVNLK..........FGGV.N.....HKL.Q....NAH.P-........-......-..L....L...K...G.....G.K..T.M..................................VVGYDVTHPTNLPtg...........agENAP..SLVGLVASID...S...D.L.G...Q....W.P.....A.IA..W...QN.....P..........A.......R....V...EQ......LDV...kLAE.............................. [...]
+Q2GSQ8_CHAGB/651-969   ............................................................................................f-LLVLIPN..KDAVT..YSNIKKC.GD...CL..F..GIPTVCCRE.E..K.ITDPKG................QKGYFANVGL.......KVNLK..........FGGV.N.....HRV.Q....DTT.GL........V......-..-....-...-...-.....A.K..T.M..................................FVGYDVTHPTNLSag...........aaENAP..SLVGLVASVD...K...D.L.A...Q....W.P.....A.VT..W...AN.....K..........A.......R....V...EK......VGQ....NDDgq............................ [...]
+C9ST09_VERA1/571-888   ............................................................................................f-VLVILPR..QDTTL..YSVIKTL.GD...CQ..F..GFHTICAVE.K..T.FTKE--................NPMTFANIGL.......KWNLK..........NGGI.N.....HRV.K....D--.-P........I......G..I....V...A...Q.....G.K..T.M..................................VVGYDVTHPTNMGlqp.........gekDVPP..SIVGLVASVD...K...D.L.G...Q....W.P.....A.VA..W...EQ.....K..........A.......G....Q...EM......LDS...kLLE.............................. [...]
+C7YM23_NECH7/666-978   ............................................................................................f-ILIALGS..TDTAM..YSAVKLL.GD...VT..W..GIHTSCVQG.K..K.LANA--................NPGYYANVAL.......KWNLK..........AGGV.N.....HKL.R....N--.-E........F......G..I....I...K...E.....G.K..T.M..................................VVGYDVTHPTNMPtg...........asDDLP..SLVGLVATID...R...N.M.G...Q....W.P.....A.VS..W...EQ.....S..........S.......K....Q...EM......LDE...vLTE.............................. [...]
+A4RL50_MAGGR/721-1039  ............................................................................................m-VFVILPD.sKDAAV..YNAVKRI.AD...ID..L..GVHTVCMVR.K..N.LFKNGPg..............qNPQYYANVGL.......KVNLK..........AGGI.N....hKLS.Q....DIP.V-........-......-..-....S...K...G.....G.K..A.M..................................FVGWDVIHPTNLGvd...........kdSGLP..SVVGLVSSID...E...H.L.A...Q....W.P.....A.VA..W...AQ.....K..........G.......G....Q...EM......ADS...rLEE.............................. [...]
+A4R6J1_MAGGR/641-908   ............................................................................................f-VLIILPD..KDVSR..YNMIKYL.GD...VC..Y..GVPTVCVAS.R..T.FFPARG................ADQMFGNLGL.......KINLK..........LGGV.N.....HKI.E....DSL.LG........I......-..-....V...A...Q.....G.K..T.M..................................IVGIDVAHPPAGA...............AVTA..SIAAMVASID...S...N.L.A...Q....W.P.....G.EI..G...IQ.....S..........Q.......A....R...KE......QVD...aLTS.............................. [...]
+C7ZR18_NECH7/19-235    ...............................................................lcqgsirynapltprtstlreesyirmtii--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B8MQK8_TALSN/682-995   .............................................................................................FILVILPS..RDTLL..YNTVKYL.CD...VK..H..GLLHACVTA.N..K.FAKP--................SAQYDANVAL.......KVNLK..........LGGT.N.....HRV.G....GTQ.L-........-......G..I....I...S...E.....G.K..T.M..................................LVGIDVTHPSPGS..............aKSAP..SIAAIVASVG...T...N.L.S...Q....F.P.....A.QL..R...VQ.....T..........E.......K....Q...EK......VDA....LDV.............................. [...]
+B6QUK3_PENMQ/689-1001  ............................................................................................f-VLVVLPR..RETFL..YNTIKYL.CD...VK..Y..GLLHACVVA.D..K.FARG--................GPQYDANVAL.......KVNLK..........LNGT.N.....HIV.G....GT-.-Q........L......G..L....I...S...K.....G.K..T.M..................................LVGIDVTHPSPGS..............vKNAP..SIAAIVASVG...K...D.L.S...Q....F.P.....A.QL..H...VQ.....P..........G.......K....Q...EQ......VDA....LDV.............................. [...]
+C1GSN8_PARBA/1-191     .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.M..................................VVATDVTHPSPGS..............aSNTP..SIAGIIASIN...S...Q.L.A...Q....W.P.....A.DL..R...IQ.....T..........Y.......R....Q...EM......VSA....LDD.............................. [...]
+C6H5C6_AJECH/26-168    ..........................................................................msnlaftafapspanspkd--------..-----..-------.--...--..-..---------.-..-.-----R................NHTYFANVAL.......ETNRK..........LGGA.S.....HTL.D....AHK.--........L......G..F....I...P...G.....C.K..T.M..................................VVCVDVTHPSPGS..............sTNAS..SGAAIVASID...Q...N.L.T...Q....W.P.....A.EF..R...IQ.....A..........T.......F....Q...KM......MIS...rLDE.............................. [...]
+A6RDB0_AJECN/9-157     ........................................................................................lkpyv--------..-----..-------.CD...VK..F..GVHSFRAIA.S..K.FAKDRN................-HTYFANVAL.......EANRK..........LGGA.S.....HTL.D....AHK.--........L......G..F....I...P...G.....C.K..T.V..................................VVCVDVTHPSPGS..............sTNAS..SGAAIVASID...Q...N.L.T...Q....W.P.....A.EL..C...TQ.....A..........V.......F....Q...KM......ISR....LDE.............................. [...]
+A1C469_ASPCL/690-1008  ............................................................................................l-ILSIMYG..SDTEA..YNSLKKV.CD...VH..C..GVRNINVLA.E..K.LRGA--................NDQYYANVGL.......KFNLK..........LGGA.N.....QSL.K....TSE.LG........I......-..-....V...A...E.....G.K..T.M..................................LVGIDVTHPSPGS..............sATAP..SVAGMVASID...S...S.L.S...Q....W.P.....A.DI..R...IQ.....T..........S.......R....Q...EM......VSD....LDA.............................. [...]
+A1DBD4_NEOFI/680-998   ............................................................................................l-ILTILYS..SDAEA..YNCIKQI.CD...VR..R..GVRNINVLA.E..K.LRGA--................NDQYYANVGL.......KFNLK..........LGGA.N.....QTL.K....ASE.LG........I......-..-....V...A...E.....G.K..T.M..................................LVGIDVTHPSPGS..............sAEAP..SVAGMVASVN...S...S.L.S...Q....W.P.....A.DI..R...IQ.....T..........S.......R....Q...EM......VSD....LDE.............................. [...]
+B0Y9U0_ASPFC/686-1004  ............................................................................................l-ILTILYS..SDVEA..YNCIKKI.CD...VR..R..GVRNVNVLA.E..K.LRGA--................NDQYYANVGL.......KFNLK..........LGGA.N.....QIL.K....ASE.LG........-......-..I....V...A...E.....G.K..T.M..................................LVGIDVTHPSPGS..............sAEAP..SVAGMVASID...S...S.L.S...Q....W.P.....A.DI..R...IQ.....T..........S.......R....Q...EM......VSN....LDE.............................. [...]
+Q4WC92_ASPFU/686-1004  ............................................................................................l-ILTILYS..SDVEA..YNCIKKI.CD...VR..R..GVRNVNVLA.E..K.LRGA--................NDQYYANVGL.......KFNLK..........LGGA.N.....QIL.K....ASE.LG........-......-..I....V...A...E.....G.K..T.M..................................LVGIDVTHPSPGS..............sAEAP..SVAGMVASID...S...S.L.S...Q....W.P.....A.DI..R...IQ.....T..........S.......R....Q...EM......VSN....LDE.............................. [...]
+C8VMQ3_EMENI/660-979   ............................................................................................l-ILTILPF..NDTAL..YNCIKRA.CD...VR..H..GVRNINVLA.E..Q.FCKR--................NEQYFANVGL.......KFNLK..........LGGV.N.....QVV.R....PSQ.L-........-......G..I....I...G...E.....G.K..T.M..................................LIGIDVTHPSPGS..............aKGAP..SVAAMVASVD...S...S.L.G...Q....W.P.....A.EI..R...IQ.....K..........E.......A....R..kEM......VDA....LDS.............................. [...]
+Q5BD61_EMENI/660-979   ............................................................................................l-ILTILPF..NDTAL..YNCIKRA.CD...VR..H..GVRNINVLA.E..Q.FCKR--................NEQYFANVGL.......KFNLK..........LGGV.N.....QVV.R....PSQ.L-........-......G..I....I...G...E.....G.K..T.M..................................LIGIDVTHPSPGS..............aKGAP..SVAAMVASVD...S...S.L.G...Q....W.P.....A.EI..R...IQ.....K..........E.......A....R..kEM......VDA....LDS.............................. [...]
+A2R8K3_ASPNC/710-1028  ............................................................................................l-ILTILPS..NDADI..YNIVKRA.CD...LT..H..GVRNVNVVA.D..K.FRKPNN................-DQYWANVGL.......KFNLK..........LGGN.N.....QLI.D....P--.KE........L......G..L....I...G...Q.....N.K..T.M..................................LVGVDVTHPSPGS..............sSAAP..SVAGMVASID...S...T.L.G...Q....W.P.....A.EL..R...IQ.....K..........P.......R....E...EM......VAE....LDA.............................. [...]
+Q0CNH1_ASPTN/643-961   ............................................................................................l-ILGILPF..NDADY..YNAIKRA.CD...VK..F..GVRNINVLA.E..K.FLEA--................KDQYIANVGL.......KFNLK..........LGGV.N....qVL-.H....P--.KE........L......G..I....I...G...Q.....G.K..T.M..................................LVGIDVTHPSPGS..............sSHAP..SVAGMVASTD...A...T.L.G...Q....W.P.....A.EL..R...IQ.....A..........S.......R....Q...EM......VED....LDT.............................. [...]
+B8MXT2_ASPFN/684-1002  ............................................................................................l-ILSVLPF..SDADY..YNCIKRA.CD...LT..Y..GVRNINVLA.D..K.FRDA--................NPQYFANVGL.......KVNLK..........LGGA.N.....QLL.D....A--.KE........L......G..L....I...G...Q.....N.K..T.M..................................LVGMDVTHPSPGS..............sANAP..SVAGMVASVD...S...T.L.S...Q....W.P.....A.EI..R...VQ.....R..........S.......R....E...EM......IQD....LSD.............................. [...]
+Q2US02_ASPOR/573-891   ............................................................................................l-ILSVLPF..SDADY..YNCIKRA.CD...LT..Y..GVRNINVLA.D..K.FRDA--................NPQYFANVGL.......KVNLK..........LGGA.N.....QLL.D....A--.KE........L......G..L....I...G...Q.....N.K..T.M..................................LVGMDVTHPSPGS..............sANAP..SVAGMVASVD...S...T.L.S...Q....W.P.....A.EI..R...VQ.....R..........S.......R....E...EM......IQD....LSD.............................. [...]
+B6H0X0_PENCW/641-959   ...........................................................................................vf-ILGILYT..KDTGV..YNCVKQV.CD...VR..V..GIRNVNVLA.E..K.LANS--................NDQYNANVGL.......KINLK..........LGGA.N.....QAL.R....TQD.L-........-......G..I....I...S...E.....G.K..T.M..................................LVGIDVTHPSPGS..............aSTAP..SVAGIVASVD...G...T.L.A...Q....W.P.....A.EI..R...VQ.....G..........A.......R....Q...EM......VAD....LET.............................. [...]
+C5GYE6_AJEDR/653-980   ...........................................................................................ql-IFFILPV..-VSSI..YSRIKYL.CD...VK..W..GVHSICVVA.G..K.FAKERN................-CQYFSNVAL.......KFNLK..........LGGT.N.....HTL.D....PSK.L-........-......G..F....I...S...E.....G.K..T.M..................................VVGLDVTHPSPGS..............sSNAP..SIAAIVASID...Q...D.L.T...Q....W.P.....A.DV..R...IQ.....P..........S.......R....Q...EM......VSG....LDE.............................. [...]
+C5K303_AJEDS/770-890   .................................................................................psriiirrprrq--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+C0S8I9_PARBP/1049-1137 ............................................................................................p--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+C5PJP0_COCP7/663-977   ............................................................................................f-VLVILPL..EDSSI..YNRVKYR.GD...IQ..N..GIHTVCVLA.N..K.FRGI--................--QYCANVAL.......KFNLK..........LGGT.N.....HVL.D....SSK.L-........-......G..V....V...G...E.....G.K..T.M..................................LVGIDVTHPSPGS..............sSQAP..SVAAMVANVD...K...H.L.A...Q....W.P.....A.SI..R...LQ.....Q.........eP.......K....A...EM......VDK....LQE.............................. [...]
+C4JG78_UNCRE/651-963   ............................................................................................f-LLVMLPF..EDSAI..YNRVKFR.GD...IQ..N..GIHTVCVGD.R..T.G-----................GIQSLANIAL.......KFNLK..........LGGA.N.....HVL.-....D-P.PK........L......G..L....I...G...E.....G.K..T.M..................................LVGIDVTHPSPGS..............sSQAP..SVAAMVASVD...K...D.L.A...Q....W.P.....A.SI..R...LQ.....R..........E......aK....A...EM......VDE....LEE.............................. [...]
+D4ANV6_ARTBE/642-958   ............................................................................................l-LLVILPN..DNPTV..YKRIKLN.GE...VF..H..GIQTVCVIM.S..K.FTKSSN................-VQYHANVAM.......KFNLK..........LGGT.N.....HVL.D....DSK.MG........-......-..I....I...A...G.....G.K..T.M..................................VVGIDVTHPAPGS..............sETAP..SVAGMVASID...K...T.L.G...Q....W.P.....A.IL..R...LQ....rE..........A.......K....Q...EM......VDD....LTD.............................. [...]
+D4CZ86_TRIVC/642-958   ............................................................................................l-LLVILPN..DNPTV..YKRIKLN.GE...VF..H..GIQTVCVIM.S..K.FTKSSN................-VQYHANVAM.......KFNLK..........LGGT.N.....HVL.D....DSK.MG........-......-..I....I...A...G.....G.K..T.M..................................VVGIDVTHPAPGS..............sETAP..SVAGMVASID...K...T.L.G...Q....W.P.....A.IL..R...LQ....rE..........A.......K....Q...EM......VDD....LTD.............................. [...]
+C5FGF6_NANOT/649-965   ............................................................................................l-LLMILPN..DNPTV..YKRIKLN.GE...VM..H..GIQTICVIR.S..K.FDKQYN................-VQYHANVAM.......KFNLK..........LGGI.N.....HVV.D....DTK.L-........-......G..I....I...A...A.....G.K..T.M..................................VVGIDVTHPAPGS..............sVTAP..SVAGMVASVD...K...Y.L.G...Q....W.P.....A.VL..R...LQ.....H.........eA.......K....Q...EM......VDD....LTD.............................. [...]
+C1G7F3_PARBD/674-979   .....................................................................................qqsrvrgd--------..-----..-------.--...VK..D..GIHTICVVA.E..K.FAKN--................QVQYFANVAL.......KFNLK..........LGGV.N.....HRL.Q....PSK.L-........-......G..T....L...S...E.....G.K..T.M..................................VVGIDVTHPSPGS..............aPTAP..SIAGMVASVD...N...V.L.G...Q....W.P.....A.SI..R...LQ.....H.........qA.......R....A...EM......VND....LDP.............................. [...]
+C1GXU8_PARBA/683-1002  ............................................................................................l-VLVILPF..ASPPI..YNQVKYR.GD...VK..D..GIHTICVVA.E..K.FAKN--................QAQYFANVAL.......KFNLK..........LGGV.N.....HRL.Q....PSK.L-........-......G..T....L...S...E.....G.K..T.M..................................VVGIDVTHPSPGS..............aPTAP..SIAGMVASVD...N...V.L.G...Q....W.P.....A.SI..R...LQ.....H.........qA.......R....A...EM......VND....LDP.............................. [...]
+C5JDT9_AJEDS/580-664   ............................................................................................l-VLVILPF..ASPQI..YSQVKYR.GD...IK..D..GIHTICVVA.E..K.FRKN--................QPQYFANVAL.......KFNLK..........LGGV.N.....HKL.Q....PSK.L-........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+C5GX22_AJEDR/580-664   ............................................................................................l-VLVILPF..ASPQI..YSQVKYR.GD...IK..D..GIHTICVVA.E..K.FRKN--................QPQYFANVAL.......KFNLK..........LGGV.N.....HKL.Q....PSK.L-........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+C0RZ18_PARBP/688-993   .....................................................................................qqsrvrgd--------..-----..-------.--...VK..D..GIHTICVVA.E..K.FAKN--................QVQYFANVAL.......KFNLK..........LGGV.N.....HRL.Q....PSK.L-........-......G..T....L...S...E.....G.K..T.M..................................VVGIDVTHPSPGS..............aPTAP..SIAGMVASVD...N...V.L.G...Q....W.P.....A.SI..R...LQ.....H.........qA.......R....A...EM......VND....LDP.............................. [...]
+C0NMG7_AJECG/678-986   ............................................................................................l-VLVILPF..ESPQM..YNHIKYR.GD...IK..D..GIHTICVVA.E..K.FGKN--................QPQYFANVAL.......KFNLK..........LGGI.N.....HKL.Q....PSK.L-........-......G..I....I...S...E.....G.K..T.M..................................VVGIDVTHPAPGS..............lPTAP..SIAGMVASVD...K...F.L.A...Q....W.P.....A.SI..R...LQ.....H..........Q......aR....A...EM......VDD....LDP.............................. [...]
+C6H291_AJECH/678-997   ............................................................................................l-VLVILPF..ESPQM..YNHIKYR.GD...IK..D..GIHTICVVA.E..K.FGKN--................QPQYFANVAL.......KFNLK..........LGGI.N.....HKL.Q....PSK.L-........-......G..I....I...S...E.....G.K..T.M..................................VVGIDVTHPAPGS..............lPTAP..SIAGMVASVD...K...F.L.A...Q....W.P.....A.SI..R...LQ.....H..........Q......aR....A...EM......VDD....LDP.............................. [...]
+A6RB60_AJECN/291-610   ............................................................................................l-VLVILPF..ESPQM..YNHIKYR.GD...IK..D..GIHTICVVA.E..K.FGKN--................QPQYFANVAL.......KFNLK..........LGGI.N.....HKL.Q....PSK.L-........-......G..I....I...S...E.....G.K..T.M..................................VVGIDVTHPAPGS..............lPTAP..SIAGMVASVD...K...F.L.A...Q....W.P.....A.SI..R...LQ.....H..........Q......aH....A...EM......VDD....LDP.............................. [...]
+C5JDT9_AJEDS/671-859   .....................................................................................rlqqqara--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+C5GX22_AJEDR/671-859   .....................................................................................rlqqqara--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B8N7A8_ASPFN/617-954   ...........................................................................................ll--YIVLPK..KESRW..YLVIKRL.CD...VE..Y..GLQTICSVG.P..K.LVAKKGqtme.......qydksLDQYMRNVAM.......KFNLK..........LGGT.N.....HVV.D....NLR.L-........-......S..I....I...N...E.....D.K..T.M..................................IVGLDVTHPTGSSqv...........ssATAP..SVAAMVASID...K...T.L.G...Q....W.P.....A.TI..Q...VQ.....S..........H.......G...gK...EE......IDS....LDG.............................. [...]
+Q2UBS9_ASPOR/578-915   ...........................................................................................ll--YIVLPK..KDSRW..YLVIKRL.CD...VE..Y..GLQTICSVG.P..K.LVAKKGqtme.......qydksLDQYMRNVAM.......KFNLK..........LGGT.N.....HVV.D....NLR.L-........-......S..I....I...N...E.....D.K..T.M..................................IVGLDVTHPTGSSqv...........ssATAP..SVAAMVASID...K...T.L.G...Q....W.P.....A.TI..Q...VQ.....S..........H.......G...gK...EE......IDS....LDG.............................. [...]
+B2WES9_PYRTR/643-967   ............................................................................................l-LFIVLPE..ANIPL..YKRIKSI.AD...KE..Y..GLHTICSVG.S..K.LAKDRG................RDQYIANVAL.......KINLK..........LGGI.N.....QIV.E....N--.KN........L......G..I....I...D...Q.....N.K..T.M..................................VVGIDVTHPSPGS..............aSNAP..SVSAMVASVD...R...F.L.G...Q....W.P.....A.TL..R...IQ.....R..........G.......R....Q...EN......VDA....LGE.............................. [...]
+A6QW60_AJECN/639-963   ............................................................................................l-LFIILPE..ANIPL..YKRIKTL.AD...KD..Y..GIHTICSVG.S..K.LAKDRG................RDQYMANIAL.......KFNLK..........LGGI.N.....QIV.E....N--.KN........L......G..I....I...D...Q.....N.K..T.M..................................VVGIDVTHPSPGS..............sSNAP..SVSAMVASID...K...F.L.G...Q....W.P.....A.TL..R...KQ.....R..........A.......R....Q...EN......VDD....LTE.............................. [...]
+B8MGF3_TALSN/2-137     ..........................................................................................lad--------..-----..-------.--...KD..F..GIHTICSVG.S..K.LVKDRG................RDQYMANVAL.......KFNLK..........LGGI.N.....QIV.E....NRN.L-........-......G..I....V...D...E.....N.K..T.M..................................VVGTDVTHPSPSS..............sSNAP..SVSAMVASID...K...F.L.G...Q....W.P.....A.TL..R...IQ.....H..........A.......R....Q...EN......VTD....LTE.............................. [...]
+B6QWK7_PENMQ/644-968   ............................................................................................l-LYVILPQ..ANTTL..YKRIKTL.TD...KD..F..GIHTICSVA.S..K.LAKERG................RDQYMANIAL.......KFNLK..........LGGI.N.....QIV.E....NRN.L-........-......G..I....V...D...Q.....N.K..T.M..................................VVGIDVTHPSPGS..............sSNAP..SISAMVASID...R...S.L.G...Q....W.P.....A.TL..R...IQ.....R..........A.......R....Q...EN......VDD....LTE.............................. [...]
+Q96UM0_BLUGR/565-886   ............................................................................................f-VLCILPK..NDPAI..YNSIKTV.AD...TK..A..GIHTVCCVS.S..K.FTKQQR................QEQYFGNVAL.......KFNLK..........AGGI.N.....HIL.E....PAK.L-........-......G..I....V...S...E.....G.K..T.M..................................VVGVDVTHPSPGS..............rEGAP..SVAGIVASVD...K...H.L.G...Q....W.P.....S.QF..S...IQ.....A..........K.......S...rT...EM......VSD....LES.............................. [...]
+A7E4W2_SCLS1/692-1008  ............................................................................................f-VLCILPV..NDVML..YNTIKRH.AD...TR..A..GIHTVCVQY.S..K.FVKGDL................--QYFGNVAL.......KFNLK..........AGGI.N.....QTI.D....K--.--........L......G..V....I...N...E.....G.K..T.M..................................VVGIDVTHPSPGS..............kETAP..SVAAMVTSTD...K...L.L.G...Q....W.S.....G.IC..R...LQ.....N.........qA.......R....Q...EM......VSD....LES.............................. [...]
+A6RK26_BOTFB/654-970   ............................................................................................f-LLCILPV..DDVML..YNTIKRF.GD...TK..A..GIHTVCVQY.S..K.FTKG--................DPQYFGNVAL.......KFNLK..........AGGI.N.....QTI.D....K--.--........L......G..I....I...N...E.....G.K..T.M..................................VVGIDVTHPSPGS..............kDTAP..SVAAMVTSTD...K...L.L.G...Q....W.S.....G.VC..R...LQ.....D..........K......aR....Q...EM......VSD....LEP.............................. [...]
+D0U265_CRYPA/712-1038  ...................................................................................lllvilpgrd-------K.gDNTEL..YNWVKTL.GD...VK..H..GVHTICVVG.Q..K.FTAA--................QDQFFANVAL.......KFNLK..........LGGN.N.....QSV.D....PSR.L-........-......S..F....I...N...E.....D.K..T.M..................................LVGIDVTHPSPGS..............rSNAP..SVAGMVASTD...K...H.L.G...Q....W.P.....G.IL..S...IQ.....N..........K......aR....A...EM......VSD....LTE.............................. [...]
+D0U266_CRYPA/635-957   ...........................................................................................lv--WVIVPA..GSKLL..YDRIKYL.SD...VK..L..GVMTVVSVD.K..T.LKERDPr..............yQSQYLGNEAL.......KVNLK..........LGGM.N.....QRI.T....S--.-G........L......H..F....I...S...E.....G.K..T.M..................................LVGIDVIHPSTDQt.............rGGMP..SVAGMVATVD...R...H.V.A...Q....W.P.....G.VL..Q...VQ.....Q..........K.......R....Q...EM......VSD....LEP.............................. [...]
+D4B128_ARTBE/608-819   ...........................................................................................ft--LIVLPR..YDAEI..YSKVKYS.AD...VK..H..GCHTLCVVP.K..P.PKNGRPgepl........qiniQPSYLANLAL.......KINLK..........LGGV.N.....HQL.E....PLK.KY........-......-..-....-...Q...S.....C.P..I.M..................................YLGIDVTHPTGTDs.............iPNAP..SIAGVVANCD...P...M.L.G...Q....W.P.....A.SI..R...TQ.....A..........H.......C....V...EM......VEN....LGE.............................. [...]
+D4D326_TRIVC/587-798   ...........................................................................................ft--LIVLPR..YDAEI..YSKVKYS.AD...VK..H..GCHTLCVVP.K..P.PKNGRPgepl........qvniQPSYLANLAL.......KINLK..........LGGV.N.....HQL.E....PLK.KY........-......-..-....-...Q...S.....C.P..I.M..................................YLGIDVTHPTGTDs.............iPNAP..SIAGVVANCD...P...M.L.G...Q....W.P.....A.SI..R...TQ.....A..........H.......C....V...EM......VEN....LGE.............................. [...]
+B0D488_LACBS/608-916   ...........................................................................................ti-VLVILSN..GDKHV..YSGLKHL.CD...CY..L..DLATVCVHS.S..K.IRKEKG................QLQYFANVAL.......KFNMK..........LGGV.N.....HAL.N....AAN.M-........-......A..W....L...K...K.....A.P..T.M..................................LVGIDVTHPGPGS..............vKGTP..SIAAVVASCE...S...D.F.A...Q....Y.P.....A.SM..E...IQ.....E..........T.......K....K...EM......VTN....LAK.............................. [...]
+A8P0D4_COPC7/619-925   ............................................................................................i-VLVILSS..GDKHV..YNGIKKL.CD...TQ..L..DLPTVCVQT.A..K.FRKEKG................QPQYFANVAL.......KVNMK..........LGGV.N.....HVL.D....K--.DN........M......T..W....L...K...Q.....K.P..T.M..................................LVGMDVTHPGPGS..............rLGTP..SVAAVVASCD...P...D.F.A...Q....F.P.....C.SM..E...IQ.....E..........S.......K....K...EM......ITN....LEK.............................. [...]
+A8P2K4_COPC7/589-903   ...........................................................................................sf-MLVLLEQ..KEKYI..YPGIKRI.GD...VE..L..GLLTLHMQL.P..R.VFGDSLgg............tkRDQYLSNVAL.......KVNTK..........LGGV.N.....HML.E....DSA.M-........-......A..W....L...R...K.....K.K..T.M..................................MVGIDVTHPSPLS..............kEGTP..SIAAVVASVD...D...N.F.V...Q....F.P.....A.SL..R...IQ.....T..........S.......K....K...EM......LDE....LSD.............................. [...]
+B0E0C2_LACBS/610-916   ...........................................................................................sf-VLVLLEN..RDNYI..YPGIKRI.CD...VE..L..GIHTVHMQL.G..K.ALTDER...............kQDQYFSNVAL.......KVNTK..........LGGM.N....hLLE.P....N--.-A........M......N..W....L...T...K.....K.K..T.M..................................MVGIDVTHPGPNS..............rEGTP..SIAAVVANVD...D...N.F.V...Q....F.P.....A.SL..R...IQ.....Q..........H.......S....K...KE......MLD...eLRD.............................. [...]
+B8PBB9_POSPM/331-616   ............................................................................................l-LIVMLPW..RKRQL..YAAIKYY.TD...VV..L..GIHTAHILL.P..K.AHGD--................--GYLSSLAL.......KLNAK..........LGGI.N.....YYL.D....DQS.I-........-......R..W....L...S...D.....R.A..N.M..................................IVGLHVRHSLPSM...............NMAW..TTAAMVSNVD...G...F.F.H...N....F.P.....A.HL..E...VT.....V..........D.......F....Q...K-......--P...dVGR.............................. [...]
+B8PFP7_POSPM/371-656   ............................................................................................l-LIVMLPW..RKRQL..YAAIKYY.TD...VV..L..GIHTAHILL.P..K.AHGD--................--GYLSSLAL.......KLNAK..........LGGV.N.....YYL.D....DQS.I-........-......R..W....L...S...D.....R.A..D.M..................................IVGLHVRHSPPST...............EMVW..TTAATVSNVD...G...F.F.H...N....F.P.....A.RL..K...VA.....V..........E.......F....Q...K-......--P...dVGR.............................. [...]
+B8PN24_POSPM/140-415   ............................................................................................l-LIVMLPW..RKRQL..YAAIKYY.TD...VV..L..GIHTAHILL.P..K.AHGD--................--GYLSSLAL.......KLNAK..........LGGV.N.....YYL.D....DQS.I-........-......R..W....L...S...D.....R.A..D.M..................................IVGLHVRHSPPST...............EMVW..TTAAMVSNVD...G...F.F.H...N....F.P.....A.RL..K...VA.....V..........E.......F....Q...K-......--P...dVGR.............................. [...]
+A6S1V9_BOTFB/6-263     .......................................................................................eivsva--------..-----..-------.--...--..-..-CPTVCVST.D..G.VERGAR...............pDLGVLANIAL.......KINFK..........LGGI.N.....HKI.E....NIP.L-........-......-..-....-...-...K.....D.R..T.M..................................IMGADVTHVGKGQ..............dDACP..SQAGVVATRD...S...N.Y.V...H....Y.L.....A.SA..R...LQ.....P..........H.......N....T...EF......IED....LQG.............................. [...]
+A6SR68_BOTFB/1-284     ............................................................................................m--------..-----..-------.--...--..-..---------.-..-.------................--------CL.......KFNLK..........LGGV.N.....QEV.S....E-G.C-........-......-..-....G...I...K.....A.R..T.M..................................VVGADVTHPGDEE...............-VCP..SIAAVVATDD...N...S.Q.F...K....Y.L.....G.SA..R...LQ.....E..........G.......K....Q...EY......ISD....LRG.............................. [...]
+A7ISJ0_MYCPJ/514-830   ............................................................................................t-VLVVLPS..KDAND..YAAVKTW.GE...LH..D..GVNTICVTA.G..K.QHRL-I................DYDFQANLAL.......KFNAK..........LRGQ.N.....HKL.D....KSF.FE........Y......L..C....H...G...Q.....S.A..T.M..................................VVGADVTHPGPSS..............vDYCP..SIAAVVASTD...S...G.A.C...K....Y.S.....G.SI..R...LQ.....A..........S.......R....E...EI......ITD....LQG.............................. [...]
+//
diff --git a/test/scripts/automated/belvu/test36_results_old b/test/scripts/automated/belvu/test36_results_old
new file mode 100644
index 0000000..51ae310
--- /dev/null
+++ b/test/scripts/automated/belvu/test36_results_old
@@ -0,0 +1,843 @@
+Q0U676_PHANO/647-830   ........................................................................................nvldv--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............--GP..SIAAVVASTD...S...T.A.L...Q....F.P.....G.SV..T...IQ.....Q..........T.......F....D...EY......TTR...gAEDkttltapv...................... [...]
+A9QW19_TRICA/79-190    ............................................................................................l-IIVVVPN..-SGPQ..YSFVKQA.AE...LN..V..GCLTQCIKE.R..T.IGRL--................NPQTVGNILL.......KINSK..........MNGT.N....hRLS.P....NSR.--........-......P..L....I...M...K.....R.P..C.M..................................IMGADVTHPSPDA...............RDIP..SVAAVTASHD...P...N.A.F...Q....Y.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+A7TMA9_VANPO/888-1209  ............................................................................................y-ILYVLRR.gNDSAV..YDRLKYI.TD...LK..F..GALNSCVVW.D..N.FKKNS-................-IQYNSNVVM.......KMNLK..........LLGS.Nh...sLSI.E....NNK.LL........I......D..K....E...S...N.....L.P..I.L..................................VLGSDVTHYPEKD...............--QN..SIASLVGSYD...D...K.F.T...Q....F.P.....G.DY..M...LQ.....D.........gP.......G....E...EI......ITN....VGS.............................. [...]
+A5E477_LODEL/107-430   ............................................................................................f-LLVVLPS..KDARF..YRAVKRA.GD...LK..V..GINNSCVIV.D..T.FTKRKFd.............kfDMTLFAQVGM.......KVNLK..........LGGS.N.....HKL.S....DAN.SK........G.....lV..D....E...K...K.....V.P..V.F..................................ILGADVTHPTGES..............nEESV..SIASVVGSED...A...I.F.N...S....F.P.....G.SL..R...VQ.....G..........G.......G....Q...EV......IAE....IKD.............................. [...]
+C5MCT9_CANTT/554-879   ............................................................................................y-LLVLLPR..SDTTY..YLSVKRV.CD...LK..V..GILNSCSIL.S..V.FIKQRRg.............sfDTMTYAQMAM.......KVNIK..........LGGS.N....hKLS.H....QDS.AS........L......V..D....K...N...G.....V.P..I.M..................................ILGADVTHPTGQI..............nHESV..SIAACVASED...G...I.F.N...K....F.P.....G.SI..R...IQ.....S..........G.......G....Q...EV......IKD....IKG.............................. [...]
+B9WGS3_CANDC/555-882   ............................................................................................y-LLFILPR..QDTQL..YSAIKRA.CD...LK..I..GILNSCSVL.N..T.FTKKRRgs...........dnfDTMTYAQMAM.......KINIK..........LGGS.Nh...kLSK.K....DSQ.GL........F......D..-....K...N...N.....V.P..I.F..................................ILGADVTHPTGEI..............nSESV..SIASIVGSED...G...I.F.N...K....F.P.....G.SV..R...IQ.....T..........G.......G....Q...EV......IAD....VKS.............................. [...]
+Q5A1B6_CANAL/296-623   ............................................................................................f-LLFILPR..QDTPL..YSAIKRA.CD...LK..V..GILNSCSIL.N..T.FTKKRRgt...........enfDAMTYAQMAM.......KINIK..........LGGS.Nh...kLSK.K....DSQ.GL........F......D..-....K...N...N.....V.P..I.F..................................ILGADVTHPTGEI..............nSESV..SIASIVGSED...G...I.F.N...K....F.P.....G.SV..R...IQ.....T..........G.......G....Q...EV......IAD....VKS.............................. [...]
+C4YGL4_CANAL/554-881   ............................................................................................f-LLFILPR..QDTPL..YSAIKRA.CD...LK..V..GILNSCSIL.N..T.FTKKRRgt...........enfDAMTYAQMAM.......KINIK..........LGGS.Nh...kLSK.K....DSQ.GL........F......D..-....K...N...N.....V.P..I.F..................................ILGADVTHPTGEI..............nSESV..SIASIVGNED...G...I.F.N...K....F.P.....G.SV..R...IQ.....T..........G.......G....Q...EV......IAD....VKS.............................. [...]
+C4JIN7_UNCRE/692-1007  ............................................................................................f-VVALLPK..YDQQI..YSLVKHQ.GD...IK..T..GIPTVCVVE.K..P.IKDKQTntsy.......vglkdDEGTLRNISL.......KVNLK..........LGGI.N.....HEI.T....SRQ.EI........R......N..I....-...-...M.....Q.T..T.M..................................FIGIDVTHPTGTEs.............qSDAP..SIAAVVANTD...P...T.L.S...Q....W.P.....A.SI..T...TQ.....G..........H.......R....K...EM......VED...dLYS.............................. [...]
+C5P8C9_COCP7/682-993   ............................................................................................y-VIVLLPK..FDQQV..YSYVKYY.GD...IV..T..GIPNTCVTE.K..Y.VKKEKRit...........fktDGGAVENIAL.......KINLK..........LGGI.N.....HEI.Q....SDG.RI........H......D..I....-...-...I.....R.T..T.M..................................FIGIDVTHPTGTDs.............qSGAP..SISAVVANND...P...T.L.A...Q....W.P.....A.SI..T...TQ.....E..........H.......R....K...EM......VES...vLER.............................. [...]
+C5FBF4_NANOT/570-628   ..........................................................................................pda--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B2VW51_PYRTR/606-910   ............................................................................................f-LFALLPS..DNTVL..YDSIKLL.FD...CK..L..GLPSVCCIG.S..K.FAKL--................DPHYFANVAM.......KFNQK..........LGGV.N.....HTV.P....LAK.LA........-......-..-....P...L...D.....A.Q..T.I..................................IFGIDVTHPSPGS..............sQTAP..SIAGVVASVD...A...K.F.S...Q....Y.A.....A.SM..R...TQ.....A..........R.......R....V...EM......VAE....LEE.............................. [...]
+Q0UNU9_PHANO/666-973   ............................................................................................f-LFVILPS..DNAVL..YDCIKFV.CD...CK..L..GVPNICNIG.S..K.FSKEKG................QMQYFANVAM.......KFNQK..........LGGV.N.....HT-.V....ELK.RM........A......P..-....-...L...D.....P.Q..T.I..................................LFGIDVTHPSPGS..............sDSAP..SVAGVVASVD...S...L.F.S...Q....F.P.....A.SM..R...TQ.....R..........G.......R....Q...EM......VEE....LEE.............................. [...]
+Q0TWJ6_PHANO/160-297   .......................................................................................rgssit--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B2WJ98_PYRTR/213-541   ...........................................................................................ct--FFLLRE..KDFDI..YAKIKRD.GD...FS..-..GNHTICAVA.S..R.IKDRNEqdnr........rsgpRWQHFSNLAL.......KMNMK..........LGGD.N.....HWL.D....ENE.LE........K......V..L....GgkdK...K.....Q.N..T.M..................................ILGADVIHPGSSS..............kIGAP..SIACVVGTID...S...R.F.M...S....Y.R.....G.SM..R...LQ.....A..........G.......G....Q...EQ......IEDf..nFRS.............................. [...]
+Q0UCE8_PHANO/551-880   ............................................................................................l-VVFLLNK..SSTPF..YAHLKDL.AD...RT..H..GIHSLCLVE.Q.yK.LIKQ-Yger..........ahlFQEYMTNVVM.......KINLK..........MGGI.-.....TQS.V....T--.TV........S......D..Y....L...A...K.....N.R..V.M..................................VLGADVVHAGPGA..............yPGTP..SIAAIVGSVD...F...S.A.G...K....C.L.....G.SM..R...LQr..idT..........T.......D....R...ET......IVE....VED.............................. [...]
+B2WJ35_PYRTR/419-708   ............................................................................................l-FILVVEK..YDTTI..YRELKNL.AD...RV..V..GIQSLCVVE.Q..M.-KKTDR...............wFDDMMRNVMM.......KLNLK..........LGGI.N.....HVV.D....AVQ.TR........L......-..-....-...-...K.....S.H..T.V..................................VLGADLVHPSGNL...............PGVP..SIASIVGSVD...N...H.A.G...K....C.L.....G.SM..R...LQ.....G..........I.......D....T...TD......REL....IIE.............................. [...]
+Q0UCU3_PHANO/737-1044  ............................................................................................l-VVLLLKT..QSIPV..YSAFKAA.AD...TE..A..GLQSICMTQ.ApnY.ISAKQKck............enIDQYMANIMM.......KANLK..........FGGG.Nh...tVQF.A....AKP.LT........H......I..A....T...T...L.....Q.D..T.L..................................VLGADITHPSPGS..............lVGCP..SIAAVVGSVN...S...M.S.T...K....Y.L.....G.SM..R...LQ.....E..........T.......C....K..kEI......IDD....LQA.............................. [...]
+Q0UCG8_PHANO/473-701   .............................................................................ekentpaysvfkylad--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............SGTP..SIAAIVGSVD...A...K.G.G...K....F.L.....G.SM..R...LQ.....P..........Rl.....iA....C...ED......IQD....VES.............................. [...]
+Q0UCH0_PHANO/670-999   ............................................................................................l-VILVLRS..KDQEV..YSNFKYL.AD...RV..F..GIPSIVMVT.A..S.NFR--Ggaw.........nvtgLDQYIGNIMM.......KANLK..........LGGI.N.....HSA.E....SDR.GN........I......K..N....-...H...L.....E.N..T.L..................................VLGSDVTHPSNGS..............lFGCP..SVAALVGSVD...N...T.G.G...C....F.L.....G.SL..R...LQ.....D..........Q.......G....SkehQM......IDD....LKS.............................. [...]
+Q2HHM4_CHAGB/694-1033  ............................................................................................l-VFVLLPD..KGAEL..YNAIKAA.AD...IK..V..GIHTVCMVE.S..K.AAKKFNkhtk........kmqfDLQFFDNILL.......KANLK..........QGGI.N.....HT-.L....EFP.TS........-......K..I....L...S...T.....W.Q..A.M..................................VLGLDVTHSPPGAn............kaKATP..SIIGMVANAD...E...H.L.A...Q....W.P.....A.TI..A...FQ.....D..........R.......E...nQ...EI......VTS....MQSf............................. [...]
+B2WJ32_PYRTR/383-592   .......................................................hrdasgnvitgdtvtvtvkqyqrlqygrtlrhgelsav--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...NI......ITG....LAT.............................. [...]
+B8PJA4_POSPM/353-665   ............................................................................................l-ILAFLPV..NAPDI..RRRIKHW.GD...VD..K..GVPTQCLRA.G..K.WERA--................RDQYINNVALnsrpqitRINAK..........LGGV.N.....SAI.N....A-K.LL........-......-..-....-...-...P.....Q.C..T.M..................................VIGADVGHPGPGI...............MNRP..SVTSLVASVD...P...D.A.T...K....Y.T.....T.YA..S...VQ.....A..........P.......R....V...EI......IQD....LEQ.............................. [...]
+B0DLH7_LACBS/515-821   ............................................................................................i-LVVILPD..EAATI..LHTVKFW.GD...VK..Y..GILTQCVRA.D..K.LLKA--................NDQYWNNVAL.......KLNAR..........LGGL.N.....YHA.S....GSR.T-........I......N..D....L...K...K.....E.P..Y.I..................................IMGADVGHPGPRV...............-RKP..SVTSLVFSLD...M...H.A.T...K....Y.A.....S.MC..R...IQ.....N..........P.......R....Q...EV......IQD....LRE.............................. [...]
+A8NFX5_COPC7/531-721   .............................................................................................MLVVILPE..DALNL..KAKVKYF.GD...IT..H..GVPTQCLRV.S..K.LLDPKSrrlk........qprqLNQYFNNVAL.......KINAR..........LRGV.N....vMLE.S....KIP.GG........S......P..LailsT...Q...G.....R.K..T.M..................................IIGVDVSHPGPGV...............TNRP..SVASLVFSLY...Q...G.G.A...Q....Y.A.....A.TT..T...IQ.....K..........P.......R....L...EK......VEQ....LAS.............................. [...]
+A8NFX0_COPC7/514-795   ............................................................................................m-LIVLLPS..EAAHL..RTEVKYW.GD...AV..N..GVKTQCLRF.G..K.TMN---................-NQYCNNVAL.......KVES-..........-GKA.L.....REF.A....NDD.R-........-......-..-....-...-...-.....-.-..-.-..................................---ADIGHPGAGI...............RNKP..SVSGLVFSIS...Q...F.A.T...E....Y.A.....A.IT..R...IQ.....P..........P.......R....V...EA......IVD....LEE.............................. [...]
+Q2GQS4_CHAGB/345-418   ...........................................................................................qi-IFYILRD..KTAFV..YDRFKQA.ND...CG..V..ACLSQMLQA.Q..H.VRKA--................QGQYCSNVCM.......KVNSK..........LGGQ.T.....SKI.A....SRA.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B0WE95_CULQU/32-179    ............................................................................................i--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+A0D5D7_PARTE/374-640   vlfvgdqktdftsarntllskaipnqlinlpiqdqeinrllaimtanlgsvpwsikeingqinnkksavlgiwksdnsfsaclsinkylnkyi--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...SS......FGD....LDQ.............................. [...]
+B9S0P9_RICCO/17-119    ............................................................................................i-LICVLAK..-KDHS..YNNLKLI.SE...TK..V..GIVAQCCSF.K..N.APRT--................KTQFLTNLAL.......KINVR..........LGGS.N.....MEL.F....KQP.QC........-......-..L....R...S...K.....G.H..V.M..................................FIGTEVNHLVSYN...............STCP..SIVDVVVIT-...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+C4LVV2_ENTHI/470-756   ......................................................................................mvlavsv--------..--TDS..IYEQIKK.FC...VD..E..NVPTQCIKP.N..T.LRRQPP................-TPVIQMITL.......QMQSK..........MGGI.-.....PWK.T....EID.SS........F......-..-....-...-...-.....A.D..G.M..................................TVGIDVISAGKDR...............----..EIVAIVSSVD...K...D.F.T...V....Y.K.....K.SS..V...VE.....K..........K.......G....L...HT......AGI...hIGE.............................. [...]
+B0ET37_ENTDI/470-756   ......................................................................................mvlavsv--------..--TDS..IYEQIKK.FC...VD..E..NVPTQCIKP.N..T.LRRQSL................-TPIIQMITL.......QMQSK..........MGGI.-.....PWK.T....EID.SG........F......-..-....-...-...-.....S.D..G.M..................................TVGIDVISAGKDR...............----..EIVAIVSSVD...K...S.F.T...V....Y.K.....K.SS..V...VE.....K..........K.......G....L...HT......AGI...hIGE.............................. [...]
+B0ENU6_ENTDI/467-753   ..........................................................................................kiv---FVVLL..-NDSL..YEDIKRK.C-...FD..R..EIITQCILP.D..T.LKKQNL................-FPIVSQITY.......QIQSK..........LGGI.P.....-WD.V....LTN.NK........L......-..-....-...-...-.....F.K..T.M..................................IIGISVIPYDDNK...............----..ECISLVSSMK...S...N.S.L...A....T.R.....K.KY..S...TI.....E..........K.......K....G...CG......NEG....YNSq............................. [...]
+C4LVQ2_ENTHI/467-753   ...........................................................................................ki--VFVVIL..-NDSL..YEDIKRK.CF...DK..-..EIITQCIHP.D..T.LKKQNL................-FPIVSQITY.......QIQSK..........IGGI.-.....PWD.V....LTN.NK........F......-..-....-...-...-.....I.K..T.M..................................IIGIAVTPYDDNK...............----..ECISLVSSMK...Y...N.S.F...A....T.R.....K.KY..S...AI.....E.........tK.......G....S...GN......AGY...nSQI.............................. [...]
+C4LY31_ENTHI/438-711   ............................................................................................q-IVFSVFD..-SIEQ..MVEIKEY.FM...IY..G..NIPTQIIDL.N..E.RYDDKK................----ITNLCL.......RTGIK..........LGCS.R.....MKL.D....QNT.S-........-......-..-....-...-...-.....-.D..I.C..................................VIGI--TSREFFV...............--NK..TLITLCISKD...E...N.L.N...V....F.D.....T.ES..Y...FV.....S..........N.......D....N...WH......SGI...gLEQ.............................. [...]
+B0EI01_ENTDI/438-710   ............................................................................................q-IVFSVFD..-SIEQ..MVEIKDY.FM...IY..G..NIPTQIIDL.N..E.RYDDKK................----ITSLCL.......RTGIK..........IGCS.R.....LKL.D....QNT.--........-......-..-....-...-...-.....S.D..I.C..................................VIGI--TSREFFV...............--NK..TLITLCISKD...E...N.L.N...V....F.D.....T.DS..Y...FV.....S..........N.......D....N...WH......SGI...gLEQ.............................. [...]
+D2V7J4_NAEGR/498-769   ............................................................................................y-VFFLMAN..ENKHI..YSALKQF.YN...CT..V..GIPSQCIVC.N.gD.WFKR--................----LPNCLI.......QMSAK..........IGGL.-.....IWS.V....ERS.YQ........E......-..-....-...-...-.....-.F..V.S..................................VCGIDIQRKGRNF...............---K..GSISLSLNT-...-...-.S.T...T....L.Y.....Y.TV..P...FR.....E..........S.......D....E...TN......IRN...kLLS.............................. [...]
+B7R785_9THEO/119-333   ............................................................................................d-IVIMTTT.vRNELI..YAKVKSL.LL...GN..-..GIPSQVVTA.E..K.LRNTKG................LPWILENIAL.......QIYAK..........IGGT.P.....WTV.M....SSS.P-........-......-..-....-...-...-.....K.G..E.L..................................VIGVSRAIDKRRN...............----..YIIGFITLFS..yD...G.D.Y...L....L.F.....Y.SL..A...PR.....P..........I.......E....W...QK......LDEyrnaLSQ.............................. [...]
+Q11QW7_CYTH3/390-605   .........................................................................................tlpv--------..-KKSP..YHTCKAK.LI...GS..-..GIPTQDIQV.V..N.LKNA--................NQFTINNIAL.......NIYAK..........IGGT.-.....AWT.I....EKE.DK........R......-..-....-...-...-.....M.E..E.L..................................VIGVGSSLSSDGK...............----..LVLGIAQIFH...S...D.G.R...Y....L.V.....G.DC..T...PL.....S..........T.......F....D...NY......AKN....LED.............................. [...]
+Q9L1X1_STRCO/365-661   ...............................................................................dsspylvaksafmg--------..-----..-------.--...--..Q..GVPVQEVRI.E..T.VRQSKL................-AYPLNSIAL.......ACYAK..........LGGI.-.....PFV.I....AAP.RT........L......-..-....-...-...-.....A.H..E.L..................................VIGIGSAHVKESR..............lTEPE..RVVGITTVFS..aD...G.N.Y...L....L.W.....N.TS..ReadYD.....D..........Y.......P....R...EL......LLS....LRD.............................. [...]
+D2M4C5_RHOPA/151-447   ...........................................................................................fd--------..DESNP..YYATKSV.FL...KR..-..DVPVQSVRL.E..T.MAQADS...............qLIFSMNHMSL.......ATYAK..........LGGT.-.....PWL.L....ASQ.QT........V......-..-....-...-...-.....A.H..E.L..................................VIGLGSHSVANSR..............iGSQQ..RFVGITTVFS...S...D.G.S...Y....L.L.....S.DR..T...AV.....V..........P.......Y....E...EY......ATA....LYD.............................. [...]
+A3VQY4_9PROT/445-745   ........................................................................................lpgpq--------..---NP..YYATKAM.LL...RN..-..NVAVQNVRI.E..T.MSEPDK...............sLVYTMNQVSL.......ACYAK..........LGGR.-.....PWL.L....AAQ.QS........V......-..-....-...-...-.....A.H..E.L..................................VIGLGSHTEQKSR..............fDQSV..RYVGITTVFS..sDggyH.L.S...E....R.T.....G.VV..L...FE.....D..........Y.......A....T...EL......TDT....LTR.............................. [...]
+C1F5Q7_ACIC5/440-735   .........................................................................................glpd--------..-ASNP..YYTTKAR.LM...AQ..-..GVPVQLLNI.E..T.IRRKSL................-DYILNNIGL.......AMYAK..........LGGI.-.....PWT.L....TQN.SD........M......-..-....-...-...-.....A.H..E.I..................................IVGIGSARLNESR..............rGAGE..RVIGITTVFS...G...D.G.Q...Y....L.L.....A.NN..T...QE.....V..........P.......S....E...EY......VDA....LTQ.............................. [...]
+B9MH92_ACIET/439-730   ...................................................................................apqknpylva--------..-----..-----KA.AF...LS..N..QIPTQFIAF.E..T.FSMAPA...............sLAYTLSNLAL.......AVYAK..........LGGI.-.....PWL.I....KSD.KG........I......-..-....-...-...-.....A.H..E.V..................................VIGLGSAAIGESR..............fSRKE..RIVGITSVFR...G...D.G.G...Y....L.L.....S.NL..S...NA.....V..........P.......M....S...KY......GEA....LTE.............................. [...]
+A5D4D9_PELTS/458-756   ...................................................................................qlfgnknpyl--------..-----..---VTKC.FF...LQ..Q..QVPVQEVEI.E..N.IVKDDR...............qLIYILNNISL.......ASYAK..........MGGT.-.....PWL.L....KAD.SP........I......-..-....-...-...-.....A.H..E.L..................................VFGLGSCQVSRSR..............lGSKE..RVVGITTVFT..gD...G.N.Y...L....L.-.....T.NK..S...AA.....V..........P.......F....K...EY......PKA....LLR.............................. [...]
+A0LL61_SYNFM/455-750   ................................................................................sqnpyfitkgsfl--------..-----..-------.--...-A..H..QIPVQEFEI.E..T.AQKNDR...............eLQYSLNNMAL.......ATYAK..........MNGI.-.....PWL.L....KAN.PT........I......-..-....-...-...-.....A.H..E.L..................................IIGLGSANIADGR..............lGDSE..RYVGITTVFS..gD...G.N.Y...H....L.T.....N.VS..-...-R.....A..........V.......T....I...DC......YQK...aFLE.............................. [...]
+D0BWJ3_9GAMM/401-693   ...................................................................................klkveenpyy--------..-----..---LGKS.LF...FM..H..QVPVQDFTI.E..L.LSQSDY...............nLSFSLNNMAL.......ACYAK..........MGGV.-.....PWL.L....KSS.PT........L......-..-....-...-...-.....S.H..E.L..................................VIGIGSANIGQER..............gINGQ..RVMGITTVFS...G...D.G.S...Y....I.V.....S.NT..S...KA.....V..........V.......P....K...AY......CEA....LTS.............................. [...]
+A4WYU7_RHOS5/454-756   .......................................................................................arlpdd--------..--RNP..YIHTKSL.LL...-T..L..GVPTQQVRM.P..T.VLLEPK...............sLQYTLQNFSI.......ATYAK..........LNGT.-.....PWT.V....NHD.KA........I......-..-....-...-...-.....N.D..E.L..................................VVGMGLAELSGSR..............tEKRQ..RFVGITTVFA...G...D.G.S...Y....L.L.....G.NV..S...KE.....C..........E.......Y....E...GY......SDA....IRE.............................. [...]
+B7K585_CYAP8/439-744   ...............................................................................aiviildehsnlpd--------..-SINP..YLHSKSL.LL...TH..-..GIPVQEIRY.S..N.IQKDKK...............sLQYILQNFSL.......AMYAK..........LTGQ.-.....PWT.V....DQD.QT........I......-..-....-...-...-.....S.D..E.L..................................VIGIGTSELSNSR..............fETRQ..RFVGITTVFR...G...D.G.N...Y....L.L.....S.SL..S...KE.....C..........S.......Y....D...EY......PDV....LRE.............................. [...]
+Q1PV30_9BACT/383-655   ..........................................................................................sde--------..EEEKT..YYEIKKL.LL...DK..-..GITSQFIAN.K..T.VRSGNF................-NYCLPNIAI.......AILAK..........LGGI.-.....PWK.L....NTK.K-........-......-..-....-...-...-.....Y.N..D.L..................................VIGYNYKKLQDQK...............----..-WIGSAVFFD..nE...G.R.L...G....R.I.....Y.GF..S...EE.....R..........A.......G....E...DL......ISH....---.............................. [...]
+D2QY15_PIRSD/353-529   ...........................................................................................dt-------E..DFSDQ..YYVTKHA.FL...KA..-..GLPSQFVST.K..T.IRNKAS................FKWTVSNIGM.......AVFAK..........LGGK.-.....PWK.V....VSE.--........-......-..-....-...-...N.....D.D..C.L..................................IVGIGQSHRCGED...............KTIS..RYYSYCVL--...T...D.S.S...G....L.Y.....E.DV..R...VL.....G..........K.......D....T...DE......RSY....LTR.............................. [...]
+D2QGL1_SPILD/333-520   .....................................................................................snideegv--------..---SD..TYYYLKY.HL...TK..L..GVPLQVLSH.E..K.INVEKT................LKWSTSNIGL.......ALFSK..........LGGI.-.....PWV.V....KPS.T-........-......-..-....-...-...-.....A.D..C.L..................................ILGIGSAHQSNAQ...............NEIE..RFFAYSV--C...V...D.S.S...G....L.Y.....K.KL..E...VL.....A..........D.......D....Q...SE......VSY....LDA.............................. [...]
+PIWI_ARCFU/110-406     ............................................................................................g-IMLVLPE..YNTPL..YYKLKSY.LI...NS..-..-IPSQFMRY.D..I.LSNRNL................-TFYVDNLLV.......QFVSK..........LGGK.-.....PWI.L....NVD.PE........K......-..-....-...-...-.....-.-..-.-..................................--GSDIIIGTGAT..............rIDNV..NLFCFAMVFK...K...D.G.T...M....L.W.....N.EI..S...PI.....V..........T.......S....S...EY......LTY....LKS.............................. [...]
+Q96Z85_SULTO/134-346   ..........................................................................aksqidsiyyrvkasflds--------..-----..-------.GL...EE..R..ATPTQIVTV.D..L.LKQRDEnk...........ntnYSWSLLPIAV.......QMFTK..........MGGI.P.....YAL.K....QSC.IN........I......-..-....G...S...E.....F.N..V.H..................................FIGLGLTSDPRNK...............---L..KRVGFVTIFN..dN...G.S.L...S....Y.M.....D.SN..I...LE.....D..........N.......K....T...ES......YGR...iIYN.............................. [...]
+O67434_AQUAE/419-694   ............................................................................................l-VIVFLEE.yPKVDP..YKSFLLY.DF...VK..R..ELLKKMIPS.Q..V.ILNRTLkn............enLKFVLLNVAE.......QVLAK..........TGNI.P.....YKL.K....EIE.GK........V......D..A....-...-...-.....-.-..-.-..................................FVGIDISRITRDG...............-KTV..NAVAFTKIFN..sK...G.E.L...V....R.Y.....Y.LT..S...YP.....A..........F.......G....E...KL......TEK....---.............................. [...]
+A3VPN8_9PROT/165-321   .......................................................................................afverd--------..EEDFD..LHDYLKA.VG...AS..M..GVSVQLIRS.D..K.ALDYHC................RASVMWRLSI.......ALYTK..........AGGV.P.....WVL.E....DIH.P-........-......-..-....-...-...-.....-.Q..T.A..................................FIGIDYAMRRVQD...............DGPR..FAICCAQVFD..aE...G.SgL...E....F.IaykadG.VS..V...YG.....D..........N.......P....Y...LN......HAQ....MLK.............................. [...]
+D1JFX3_9ARCH/159-437   ........................................................................................yfkfn--------..--YED..LRAHIKA.LC...VK..K..HVYTQILTK.T..S.FRPFDM................-SDNMWNLSL.......GLYVK..........AGGV.-.....PWK.L....ESG.E-........-......-..-....-...-...-.....E.N..T.C..................................FIGIAFGIKKGED...............-GQE..ILVGLAEVFD...V...F.G.E...S....V.T.....I.KV..V...ED.....E..........F.......K....S...EV......GLH....LSEek............................ [...]
+Q8U3D2_PYRFU/474-756   ..................................................................................lafiaarnkls--------..--SEK..FEEIKRR.LF...-N..L..NVISQVVNE.D..T.LKNKRDkyd.........rnrlDLFVRHNLLF.......QVLSK..........LGVK.-.....YYV.L....DYR.FN........Y......D..Y....-...-...-.....-.-..-.-..................................IIGIDVAPMKRSE...............---G..YIGGSAVMF-...-...D.S.Q...G....Y.I.....R.KI..V...PI.....K..........I.......G....E...QR......GESv..dMNE.............................. [...]
+D3S0S6_FERPL/490-768   .......................................................................................egedsf--------..----D..YYNPLKS.AL...FR..N..NILSQNFDV.T..N.YVRGDGkin..........kntIKYAVSNIIY.......NIFGK..........LGVK.-.....FFV.L....EED.VP........Y......D..Y....-...-...-.....-.-..-.-..................................ILGIDVGYGEAYT...............---G..KVAGCTTVHD..sE...G.R.L...R....N.L.....I.PI..E...KQ.....N..........Y.......P....S...KE......TAR....IKA.............................. [...]
+Y1321_METJA/426-699    .............................................................................................CFALIIGK.eKYKDN.dYYEILKK.QL...FD..L..KIISQNILW.E..N.WRKDDK................-GYMTNNLLI.......QIMGK..........LGIK.-.....YFI.L....DSK.TP........Y......D..Y....-...-...-.....-.-..-.-..................................IMGLDTGLGIFGN...............---H..RVGGCTVVYD..sE...G.K.I...R....R.I.....Q.PI..E...TP.....A..........P.......G....E...RL......HLP....---.............................. [...]
+C7P7E7_METFA/420-692   ............................................................................................g-FALIIGN.rYYEND..YYETLKM.QL...FN..L..NIISQNILW.E..N.WSKDDN................-NFMTNNLLI.......QIMGK..........LGIK.-.....YFA.L....DAK.VN........Y......D..Y....-...-...-.....-.-..-.-..................................IMGLDSGLGAFKS...............---N..RVSGCTVIYD..sE...G.K.I...R....R.I.....Q.PI..D...VP.....S..........P.......G....E...RI......PIH....---.............................. [...]
+B6YTQ5_THEON/463-751   ..........................................................................................lai---TLIPD..MRQEQ..FDKIKGF.FF...NN..-..GILHKAINI.N..N.LRDPSK...............dQKKLIESMIL.......QALYA..........FGIY.F.....YSL.D....NLN.Y-........-......-..-....-...-...-.....-.-..D.F..................................IIGLDVTREMDKS...............GRYY..GISGAAVVQN...K...N.G.Q...V....L.K.....I.IP..I...TS.....P..........Q.......S....S...SE......TAN....INY.............................. [...]
+D3S7P9_9EURY/531-824   ......................................................................licispklpnnefdelkshlfsy--------..-----..-------.QQ...TT..F..HQFMYPFNL.K..R.CLNDDD...............fKKPFINSILS.......QFFHK..........MGMY.-.....LFS.F....SEE.L-........-......-..-....-...-...G.....D.Y..D.F..................................IIGYDITKEKDEN...............DKIK..GIGGSAIIYN...S...H.G.H...V....I.T.....TvTF..E...DV.....H..........T.......S....S...EI......ARY....-EKlf............................ [...]
+B5IR12_9EURY/528-819   ..................................................................................dlelrefynwl--------..-----..----KKE.FY...DE.tK..PLVFQGARV.E..S.VFGMYK................-RYAVPNIVL.......QMAAK..........LGVY.P.....YSL.E....TSS.G-........Y......D..Y....-...-...-.....-.-..-.-..................................IIGIDYTYWHERD...............--AV..SVGGGAVVVS..pS...G.L.I...E....G.I.....Y.PI..A...IP.....S..........K.......R....E...SL......DMKe..iLQE.............................. [...]
+B4B3R2_9CHRO/1-219     ...............................................................................mgnlpfilaeplei--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.A..D.Y..................................FIGLDISRERKRN...............SRGS..NNACGSVRL-...-...-.Y.G...K....Q.G.....E.FI..Q...YQ.....L..........D.......D....Q...PI......EGE....--E.............................. [...]
+A0YYT3_9CYAN/471-752   .............................................................................tddtedgsfysfvssr--------..-----..-------.-L...LR..R..GISSQVIYE.D..T.LKNPNN................YSYILNQVIP.......GILAK..........LGNL.-.....PFI.L....AKP.LE........I......-..-....-...-...-.....-.A..D.Y..................................FIGLDISRTPKKR..............kSGSL..NVCASVR---...-...L.Y.G...K....Y.G.....E.FI..R...YR.....-..........-.......L....E...DA......LTQ....GEE.............................. [...]
+A8YDH3_MICAE/463-734   .....................................................................................nadnteeg--------..----S..LYSWIKK.KF...LE..R..RVMTQMIYE.K..T.LNDKSN................YKNILNQVVP.......GILAK..........LGNL.P.....YVL.A....ESL.E-........-......-..-....-...-...-.....I.A..D.Y..................................FIGLDVGRMPKKN..............lPGSL..NVCASVRLY-...-...G.K.Q...G....E.F.....V.RC..R...VE.....-..........-.......-....-...DS......LTE....GEE.............................. [...]
+B0JXD6_MICAN/462-734   ....................................................................................rnadnteeg--------..----S..LYSWIKR.KF...LG..R..GVITQMIYE.K..T.LNDKSN................YKNILNQVVP.......GILAK..........LGNL.P.....YVL.A....E-P.LE........-......-..-....-...-...-.....I.A..D.Y..................................FIGLDVGRMPKKN..............lPGSL..NVCASVRLY-...-...G.K.Q...G....E.F.....V.RC..R...VE.....-..........-.......-....-...DS......LTE....GEE.............................. [...]
+Q53W94_THET8/418-669   ....rnrlkalllreglpsqilnvplreeerhrwenallgllakaglqvvalsgaypaelavgfdaggresfrfggaacavggdgghllwtlp--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...EA.....Q..........A.......G....E...RI......PQE...vVWD.............................. [...]
+Q746M7_THET2/418-669   ....rnrlkalllreglpsqilnvplreeerhrwenallgllakaglqvvalsgaypaelavgfdaggresfrfggaacavggdgghllwtlp--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...EA.....Q..........A.......G....E...RI......PQE...vVWD.............................. [...]
+B1XJG0_SYNP2/307-599   ...........................................................................................ti---LVISE..WLDNK..YKTKLTR.DA...LE..H..GITLQFMLP.L..K.ENVR-RiesnkgveskitcftsDQYRANNILL.......GLLAK..........AGWQ.A.....VGL.P....LLN.NE........Y......-..-....-...-...-.....A.A..D.L..................................VIGFDAGRNETLS...............-YGT..SSFAVLADG-...-...-.-.-...Q....I.L.....G.WE..L...PE.....A..........Q.......K....G...EI......LDPd..hVRR.............................. [...]
+Q2JSR3_SYNJA/437-712   ...........................................................................................tv--LVVMPW..-SPNE..RKQRIRM.EA...LE..A..GIATQFMIP.G..A.------................DPYKALNVVL.......GLLCK..........AAWQ.P.....VLL.E....PLD.D-........-......P..V....-...-...-.....G.P..E.L..................................IIGFDVGTNRRLY...............----..-YGASAFAVL...A...D.G.Q...S....L.G.....W.EL..P...AV.....Q..........R.......G....E...TF......SGD...aIYQ.............................. [...]
+Q2JI93_SYNJB/454-728   ...................................................................................vlvvmplspn--------..-----..-------.-E...HK..Q..KIRLQALRA.G..I.ATQFMIp.............gaDPYKALNVVL.......GLLCK..........AAWQ.P.....VLL.E....PLD.H-........-......-..-....-...P...E.....C.S..E.L..................................TIGFDVGTNRELY...............-YGT..SAFAVLANG-...-...-.-.Q...S....L.G.....W.EL..P...DI.....Q..........R.......G....E...TF......SGE...aIYQ.............................. [...]
+Q8DKB1_THEEB/458-739   .................................................................................tvlvvmpwsphe--------..-----..EKTRLRI.QA...LK..A..GIATQFMIP.T..P.QDNP--................--YKALNVAL.......GLLCK..........AKWQ.P....vYLK.P....LDD.PQ........-......-..-....-...-...-.....A.A..D.L..................................IIGFDTSTNRRLY...............-YGT..SAFAILAN--...-...-.G.Q...S....L.G.....W.EL..P...DI.....Q..........R.......G....E...TF......SGQ...sIWQ.............................. [...]
+Q5MZ10_SYNP6/441-718   ............................................................................................t-VLVVMPW..DSHHD..-KQKIRI.QA...IQ..A..GIATQFMVPlP..K.AD----................-KYKALNVTL.......GLLCK..........AGWQ.P.....IQL.E....SVD.HP........-......-..-....-...-...E.....V.A..D.L..................................IIGFDTGTNRELY...............---Y..GTSAFAVLA-...-...D.G.Q...S....L.G.....W.EL..P...AV.....Q..........G.......G....E...TF......SGQ...aIWQ.............................. [...]
+Q31N05_SYNE7/441-718   ............................................................................................t-VLVVMPW..DSHHD..-KQKIRI.QA...IQ..A..GIATQFMVPlP..K.AD----................-KYKALNVTL.......GLLCK..........AGWQ.P.....IQL.E....SVD.HP........-......-..-....-...-...E.....V.A..D.L..................................IIGFDTGTNRELY...............---Y..GTSAFAVLA-...-...D.G.Q...S....L.G.....W.EL..P...AV.....Q..........R.......G....E...TF......SGQ...aIWQ.............................. [...]
+C1V6Q1_9EURY/608-882   ........................................................................................aaaad--------..-YDDP..YPEFKRR.LG...-Q..L..GVPSQMITI.D..N.LGND--................--SYLGNISS.......SLIGK..........AGGV.P.....WRI.D....DVP.GD........V......D..A....-...-...-.....-.-..-.-..................................FVGLDVTYDHATK...............---Q..HLGAAANVIM...A...D.G.T...I....L.A.....S.EA..V...TK.....Q..........A.......G....E...TF......DED...dVAN.............................. [...]
+B9LVW4_HALLT/464-658   .......................................................................................fsmges--------..SASDI..YHEMKKA.LR...QR..-..RVDSQMAHI.D..T.LATS--................--YALPNVAL.......GLVAA..........AGGI.P.....FTT.E....DAM.P-........-......-..-....-...-...G.....E.T..D.L..................................FIGIDVSHRYPRD..............tDERV..HIAASTTSIY...G...D.G.T...I....L.G.....Y.TS..A...KP.....Q..........T.......G....E...KV......PPK...eLKN.............................. [...]
+B0ADC8_9CLOT/432-721   ............................................................................................p-VLVILEK..ENIDK.yYETLKKI.FG...GR..N..NIPTQFVDL.D..T.IKKCDPkid.........nkrgKESIFLNILL.......GIYCK..........SGIQ.-.....PWV.L....ANG.LS........A......D..C....-...-...-.....-.-..-.-..................................YIGLDVCREN---...............--NM..STAGLIQVIG...K...D.G.R...V....LkS.....K.TI..S...SH.....Q..........S.......G....E...KI......QIN...iLKD.............................. [...]
+C6QUV9_9BACI/2-48      ............................................................................................c--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B7GJX9_ANOFW/423-692   ............................................................................................t-IVVIGTE..ENIER.aYMAIKKE.FG...AK..A..DIMTQFVIF.D..S.SIVN--................NSFYYYNVLL.......GIYAK..........SGVQ.-.....PWI.L....LDH.MN........S......D..C....-...-...-.....-.-..-.-..................................FIGLDVSHEQGKH...............----..-ASGIIQVIG...K...D.G.R...I....I.K.....Q.KS..V...MA.....T..........E.......A....G...ET......IARc..tMEE.............................. [...]
+Q3SD94_PARTE/460-750   ...........................................................................................qi-VVSILDR.hEDSKL..YNELKKF.LI...SV..Q..GVLHQNVSI.Q..T.VDSKKF................-SKIAQQIVK.......QVHSK..........IGKQ.-.....LWN.I....QKI.TE........I......-..-....-...-...S.....E.K..I.M..................................IIGIDVYHKTLAN...............--NK..SCVGFNAQFG...Q...Q.S.E...K....H.F.....T.KT..I...IV.....E..........K.......G....K...EL......NKG....VGQ.............................. [...]
+A0D4I7_PARTE/320-610   ...........................................................................................qi-VVSILDR.hEDSKL..YNELKKF.LI...SV..Q..GVLHQNVSI.Q..T.VDSKKF................-SKIAQQIVK.......QVHSK..........IGKQ.-.....LWN.I....QKI.TE........I......-..-....-...-...S.....E.K..I.M..................................IIGIDVYHKTLAN...............--NK..SCVGFNAQFG...Q...Q.S.E...K....H.F.....T.KT..I...IV.....E..........K.......G....K...EL......NKG....VGQ.............................. [...]
+Q3SD95_PARTE/471-760   ...........................................................................................lv--VSLIDQ.eKDKQI..YQQLKQY.LI...AE..E..GVSHQNVTL.Q..L.IENQKF................-GAIVPKIIQ.......QIHSK..........LGNQ.T.....WNI.Q....KIQ.E-........I......-..-....-...-...S.....D.N..I.M..................................IVGIDVYHKTVLG...............--LD..SCVGFNAQFG...Q...Q.G.Y...A....N.F.....T.KT..I...IV.....R..........K.......G....K...EI......NKD....VAM.............................. [...]
+A0CE33_PARTE/2-210     .........................................................................................keis--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....D.E..I.M..................................IIGIDVYHKTEKK...............--IN..SCVGFNAQFG..qQ...G.D.T...N....F.T.....-.KT..I...IV.....D..........Q.......G....K...EI......NKD....IAN.............................. [...]
+A0DEE4_PARTE/478-780   ............................................................................................s-LVVSLTD..KNRDTslYIGLKDF.LL...SQggA..GVIHQNVTT.K..S.CKNKNK................-QSIASKIAQ.......QISVK..........LGNP.-.....LWV.I....PKV.KG........I......-..-....-...-...S.....E.K..I.M..................................IIGMDIYHKLVTG...............--KQ..SCMGFVAHFD..lE...C.K.T...S....F.S.....K.TI..-...IM.....K..........S.......G....Q...EF......NQA....VGQ.............................. [...]
+Q3SE57_PARTE/478-788   ............................................................................................s-LVVSLTD..KNRDTslYIGLKDF.LL...SQggA..GVIHQNVTT.K..S.CKNKNK................-QSIASKIAQ.......QISVK..........LGNP.-.....LWV.I....PKV.KG........I......-..-....-...-...S.....E.K..I.M..................................IIGMDIYHKLVTG...............--KQ..SCMGFVAHFD..lE...C.K.T...S....F.S.....K.TI..-...IM.....K..........S.......G....Q...EF......NQA....VGQ.............................. [...]
+Q3SE52_PARTE/466-770   ............................................................................................l-IVTFVNE.rDKDRI..YGHIKKY.CF...QD..Q..GISHQNILS.K..F.LKTKNP................-SSVASKIAQ.......QMSMK..........LGNP.-.....LWA.I....PKP.NG........I......-..-....-...-...S.....D.K..T.M..................................VVGIDIYHKLLTN...............--RK..SCMGFVAYLE...S...E.C.L...N....T.F.....A.KP..I...IM.....R..........E.......G....Q...EM......SQE....VGR.............................. [...]
+Q3SE58_PARTE/466-770   ............................................................................................l-IVTFINE..KDKDR.iYGQMKKY.CF...QE..H..GISHQNILS.K..F.LKSKNP................-SSVASKIAQ.......QMSMK..........LGNP.-.....LWA.I....PKP.NG........I......-..-....-...-...S.....D.K..T.M..................................VIGIDIYHKLLTN...............--RR..SCMGFVAYLE...S...E.C.L...N....T.F.....A.RP..I...IM.....K..........E.......G....Q...EM......CHE....VGR.............................. [...]
+A0CB11_PARTE/463-767   ............................................................................................l-IVTFINE..KDKDR.iYGQMKKY.CF...QE..H..GISHQNILS.K..F.LKSKNP................-SSVASKIAQ.......QMSMK..........LGNP.-.....LWA.I....PKP.NG........I......-..-....-...-...S.....D.K..T.M..................................VIGIDIYHKLLTN...............--RR..SCMGFVAYLE...S...E.C.L...N....T.F.....A.RP..I...IM.....K..........E.......G....Q...EM......CHE....VGR.............................. [...]
+A4ZYY5_TETTH/495-793   ......................................................................................qfivtfs------NA.eKNPSL..YREMKKF.FS...SEggV..GIESQHVTP.R..A.LQKN--................GKSVASKIAL.......QIASK..........LGKR.-.....IWS.V....ETP.VG........I......-..-....-...-...N.....Q.N..T.M..................................IVGIETSMKKIRN...............---Q..QVIGVVASIN...K...D.F.N...K....F.Y.....S.QV..D...FR.....N..........G.......-....N...DI......KLP...tLSK.............................. [...]
+A4VE06_TETTH/14-183    ................................................................................lslrllpkpyrli--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+A4VE05_TETTH/347-645   ...........................................vndesaqnkdktsvnfkkgnqvtqllniilksimrdekfqeigknskfyd--------..-----..-------.--...--..-..---------.-..-.------................-----VNSKS.......DIIIK..........SRRI.-.....-WQ.V....ETP.TG........I......-..-....-...-...D.....K.N..T.M..................................IIGIETSMKKINK...............---Q..QVIGVVASID...K...D.F.T...K....Y.F.....S.DV..E...IR.....K..........E.......N....D...TT......FPT....LSK.............................. [...]
+Q6UE79_TETTH/497-791   ..........................................................................................qfv---LSFGQ..AQSGL..YSGLKKF.LT...SE..A..GIESQHVNP.R..S.LQKN--................GMSVASKIAL.......QIASK..........LGRR.-.....IWQ.V....ETP.TG........I......-..-....-...-...D.....K.N..T.M..................................IIGIETSMKKIKQ...............---Q..QVVGVVASID...K...D.F.T...K....Y.F.....S.DV..E...IR.....K..........D.......N....D...TT......LPT....LSK.............................. [...]
+Q0GM58_TETTH/497-791   ..........................................................................................qfv---LSFGQ..AQSGL..YSGLKKF.LT...SE..A..GIESQHVNP.R..S.LQKN--................GMSVASKIAL.......QIASK..........LGRR.-.....IWQ.V....ETP.TG........I......-..-....-...-...D.....K.N..T.M..................................IIGIETSMKKIKQ...............---Q..QVVGVVASID...K...D.F.T...K....Y.F.....S.DV..E...IR.....K..........D.......N....D...TT......LPT....LSK.............................. [...]
+Q22NE2_TETTH/491-777   ............................................................................................s-FIVTFGD..LNTNF..YQQIKHF.FC...IL..A..NVESQHISP.Q..S.LKNKNK................-YKICLNIVL.......QILQK..........TGNQ.-.....IWN.V....EMP.MQ........I......T..-....S...Q...T.....I.N..T.M..................................IVGIETSRNIIKG...............---K..QIIAVVCSIN...R...N.F.S...R....Y.L.....S.QV..Y...FR.....E..........K.......G....C...KQ......LHQ....LQK.............................. [...]
+A8VSR3_TETTH/491-787   ............................................................................................s-FIVTFGD..LNTNF..YQQIKHF.FC...IL..A..NVESQHISP.Q..S.LKNKNK................-YKICLNIVL.......QILQK..........TGNQ.-.....IWN.V....EMP.MQ........I......T..-....S...Q...T.....I.N..T.M..................................IVGIETSRNIIKG...............---K..QIIAVVCSIN...R...N.F.S...R....Y.L.....S.QV..Y...FR.....E..........K.......G....C...KQ......LHQ....LQK.............................. [...]
+A4ZYY4_TETTH/474-761   ......................................................................................nfnhprq--------..--QTF..YQELKLY.LY...AT..V..AIEHQHFND.D..F.SCHKNK................-NAAISSLII.......QIASK..........LGYP.-.....LWQ.T....HIP.NQ........I......-..-....-...-...F.....N.K..T.M..................................IIAIAVEQKTLHL...............NKQQ..QMIAVVTTIS...K...D.F.T...Q....M.H.....S.EI..F...FN.....E..........I.......Q....N...GP......ISI....LSK.............................. [...]
+Q24HU6_TETTH/383-631   ......................................................................................nfnhprq--------..--QTF..YQELKLY.LY...AT..V..AIEHQHFND.D..F.SCHKNK................-NAAISSLII.......QIASK..........LGYP.-.....LWQ.T....HIP.NQ........I......-..-....-...-...F.....N.K..T.M..................................IIAIAVEQKTLHL...............NKQQ..QMIAVVTTIS...K...D.F.T...Q....M.H.....S.EI..F...FN.....E..........I.......Q....N...GP......ISI....LSK.............................. [...]
+Q0MRE2_TETTH/533-834   ...................................................................................ivaivapnkf--------..STVQN..YSKIKKL.CT...IT..Q..QIKSQYIRQ.Q..S.LDSKQS................-YNVCSAILS.......QMAAK..........CGTT.-.....LWV.V....NPP.NG........I......-..-....-...-...P.....D.N..T.M..................................IIGTSVQKVFING...............-QPQ..FVIGFVASQD...K...N.V.S...R....F.Y.....S.RA..T...FQ.....K..........L.......N....K...DN......IEK....IST.............................. [...]
+Q239A3_TETTH/603-904   ...................................................................................ivaivapnkf--------..STVQN..YSKIKKL.CT...IT..Q..QIKSQYIRQ.Q..S.LDSKQS................-YNVCSAILS.......QMAAK..........CGTT.-.....LWV.V....NPP.NG........I......-..-....-...-...P.....D.N..T.M..................................IIGTSVQKVFING...............-QPQ..FVIGFVASQD...K...N.V.S...R....F.Y.....S.RA..T...FQ.....K..........L.......N....K...DN......IEK....IST.............................. [...]
+A0CR14_PARTE/559-847   .............................................................................................MIVIVLNR..YMKNC..YAPLKKM.CM..sEK..F..GVLTQMVSS.D..S.ISKQKK...............gLFSIIQKLAI.......QMMDK..........VGNC.-.....LWT.V....QLP.QK........W......P..-....-...-...-.....D.N..I.M..................................IVSVIIE---KG-...............----..KFAGMLSSLD...K...T.Y.S...R....Y.Y.....S.QM..S...TK.....I..........V.......E....K...CL......IKD....IGD.............................. [...]
+Q3SE51_PARTE/572-860   .............................................................................................MIVIVLNR..YMKNC..YAPLKKM.CM..sEK..F..GVLTQMVSS.D..S.ISKQKK...............gLFSIIQKLAI.......QMMDK..........VGNC.-.....LWT.V....QLP.QK........W......P..-....-...-...-.....D.N..I.M..................................IVSVIIE---KG-...............----..KFAGMLSSLD...K...T.Y.S...R....Y.Y.....S.QM..S...TK.....I..........V.......E....K...CL......IKD....IGD.............................. [...]
+Q0Q5B1_9SPIT/472-767   ...........................................................................................av--VLLLPGqkGKCNL..YDEVKKY.LL...TD..V..PVPSQAVLT.G..T.IQKGKN................LRSIVNKILI.......QINVK..........IGGI.-.....PWA.V....DSL.PL........-......-..-....-...L...T.....K.P..S.M..................................ICGMDVFHSTSLG...............--KK..SVLALTASMN...Q...T.A.T...K....Y.W.....S.TN..V...IQ.....S..........E......lG....Q...EA......SHA....LNQ.............................. [...]
+Q8ISG8_STYLE/475-767   .....................................................................................vlllpgak--------..GKTSL..YDDIKRF.LL...AE..F..PVPSQVVLC.N..T.ISKGKN................LRSIVNKILI.......QITAK..........IGGI.-.....PWT.V....DAL.P-........-......-..-....F...M...D.....K.P..T.M..................................ICGMDVFHSTSLG...............--KK..SVLGLTASIN...V...S.A.T...K....Y.F.....S.SC..V...IQ....gE..........L.......G....L...EA......SHS....LQN.............................. [...]
+Q86CV7_STYLE/475-767   .....................................................................................vlllpgak--------..GKTSL..YDDIKRF.LL...AE..F..PVPSQVVLC.N..T.ISKGKN................PRSIVNKILI.......QITAK..........IGGI.-.....PWT.V....GAL.P-........-......-..-....F...M...D.....K.P..T.M..................................ICGMDVFHSTSLG...............--KK..SVLGLTASIN...V...S.A.T...K....Y.F.....S.SC..V...IQ....gE..........L.......G....L...EA......SHS....LQN.............................. [...]
+Q8MQL1_TETTH/444-756   ...........................................................................................ma--VFLLPG..KKKAGmyYDEIKRY.FT...NV..K..PIPTQVILA.S..T.AMKDKG................LRSVVNKLLM.......QICAK..........TGGV.-.....PWV.M....DNL.P-........-......-..-....F...Q...N.....L.P..T.M..................................VVGMDVFHNTPGK...............--KE..SIFGFVSTVD...R...N.F.S...K....Y.Y.....S.HS..H...VL.....P..........T.......G....Q...EI......TPF....LQQ.............................. [...]
+Q8MXZ9_TETTH/444-756   ...........................................................................................ma--VFLLPG..KKKAGmyYDEIKRY.FT...NV..K..PIPTQVILA.S..T.AMKDKG................LRSVVNKLLM.......QICAK..........TGGV.-.....PWV.M....DNL.P-........-......-..-....F...Q...N.....L.P..T.M..................................VVGMDVFHNTPGK...............--KE..SIFGFVSTVD...R...N.F.S...K....Y.Y.....S.HS..H...VL.....P..........T.......G....Q...EI......TPF....LQQ.............................. [...]
+Q23ND1_TETTH/444-756   ...........................................................................................ma--VFLLPG..KKKAGmyYDEIKRY.FT...NV..K..PIPTQVILA.S..T.AMKDKG................LRSVVNKLLM.......QICAK..........TGGV.-.....PWV.M....DNL.P-........-......-..-....F...Q...N.....L.P..T.M..................................VVGMDVFHNTPGK...............--KE..SIFGFVSTVD...R...N.F.S...K....Y.Y.....S.HS..H...VL.....P..........T.......G....Q...EI......TPF....LQQ.............................. [...]
+Q3SE50_PARTE/446-748   .....................................................................................llllilng------PK..KNAPL..YTDLKRY.LI...ND..C..PIASQVILS.S..T.LNQPKG...............kVKTICNKLLV.......QICAK..........VGGT.-.....PWG.I....SDL.P-........-......-..-....F...T...D.....Q.P..T.M..................................ICGMDVYHSTAKG...............--RK..SMLSFVSTED...E...F.F.S...K....Y.M.....T.QS..I...EM.....D..........S.......G....V...EF......SFS....LCP.............................. [...]
+Q3SE54_PARTE/446-748   .....................................................................................llllilng------PK..KNAPL..YTDIKRY.LI...ND..C..PIASQVILS.S..T.LNQPKG...............kVKTICNKLLV.......QICAK..........VGGT.-.....PWG.V....SEL.P-........-......-..-....F...T...D.....Q.P..T.M..................................ICGMDVYHSTGKA...............--KK..SMLSFVSTED...E...F.F.S...K....Y.M.....T.QS..I...EM.....E..........T.......G....V...EF......SFS....LCP.............................. [...]
+Q3SE55_PARTE/446-748   .....................................................................................llllilng------PK..KSAPL..YTDIKRY.LI...ND..C..PIASQVILS.S..T.LNQPKG...............kVKTICNKLLV.......QICAK..........VGGT.-.....PWG.V....SEL.P-........-......-..-....F...T...D.....Q.P..T.M..................................ICGMDVYHSTGKA...............--KK..SMLSFVSTED...E...F.F.S...K....Y.M.....T.QS..V...EM.....E..........T.......G....V...EF......SFS....LCP.............................. [...]
+Q3SE56_PARTE/450-741   ............................................................................................f-IIFLLPGqkKNSRL..YRCAKFI.SL...QK..I..ACPSQVVLE.D..T.LTKN--................TRSIVNKIMV.......QICAK..........LGGV.-.....PWA.I....DKL.P-........-......K..L....F...Q...Q.....Q.H..T.M..................................ICAAECYDRIHQI...............----..KHLAFCSTVD...K...N.M.T...K....Y.H.....S.QI..-...--.....L..........K.......G....A...DY......KGD...nLKK.............................. [...]
+Q3SE59_PARTE/450-741   ............................................................................................f-IIFLLPGqkKNSRL..YRCAKFI.SL...QK..I..GCPSQVVLE.D..T.LAKN--................TRSIVNKIMV.......QICAK..........LGGV.-.....PWA.I....DKL.P-........-......K..L....F...Q...Q.....Q.H..T.M..................................ICAAECYDRLHQI...............----..KHLAFCSTVD...K...N.M.T...K....Y.H.....S.QI..-...--.....L..........K.......G....A...DY......KGD...nLKK.............................. [...]
+Q9U5C9_PARCA/466-759   ............................................................................................f-LIFLLPGqkKKAKL..YKTAKKI.SM...QS..F..GCPSQVIIE.K..T.LQKN--................TRSIVNKILI.......QLNAK..........VGGI.-.....PWA.L....DGF.PQ........Q......-..-....F...Q...A.....K.P..T.M..................................ICGVDIFSKHGKK...............----..NQLAFCSTTD...K...Y.F.S...R....Y.Y.....S.QV..-...--.....I..........S.......S....G...EF......SIH....LQQ.............................. [...]
+Q3SE53_PARTE/460-752   ............................................................................................f-LLFLLPGqkKKARL..YKTAKKI.SM...QK..F..GCASQVVVE.K..T.LAKN--................TRSIVNKILI.......QLNAK..........VGGT.-.....PWA.I....DSL.P-........L......-..T....F...Q...N.....Q.P..T.M..................................ICGTDCFVKSGRK...............----..NQLAFCSTVD...R...N.L.S...R....Y.Y.....S.QV..V...T-.....-..........-.......S....G...EF......SQH....LQS.............................. [...]
+A0E0B0_PARTE/455-747   ............................................................................................f-LLFLLPGqkKKARL..YKTAKKI.SM...QK..F..GCASQVVVE.K..T.LAKN--................TRSIVNKILI.......QLNAK..........VGGT.-.....PWA.I....DSL.P-........-......T..T....F...Q...N.....Q.P..T.M..................................ICGTDCFVKSGRK...............----..NQLAFCSTVD...R...N.L.S...R....Y.Y.....S.QV..V...TS.....-..........-.......-....G...EF......SQH....LQQ.............................. [...]
+Q3SE49_PARTE/467-759   ............................................................................................f-LIFLLPGqkKKARL..YKACKVI.SM...AT..F..GCASQVIVE.K..T.LQRN--................TRSIVNKILI.......QLNAK..........IGGT.-.....PWA.L....DGM.P-........-......D..M....F...T...N.....Q.P..T.M..................................ICGVDIFTKAGRK...............----..SQLAFCSTIN...R...Q.F.S...R....Y.Y.....S.QV..-...--.....I..........T.......S....G...EF......CSH....LQL.............................. [...]
+A8VSS4_TETTH/479-774   ............................................................................................f-IVFILQGakGKGKN..YQYLKSF.LL...KE..K..PIPSQMILQ.G..T.IKSSKD...............gCQVICNKICN.......QICIK..........VGGI.P.....YII.K....DLP.F-........-......-..-....-...S...N.....L.P..T.M..................................LVGIDYIRKENQK...............----..SVYSFVASVD...S...T.F.C...K....F.F.....S.GA..Q...LL.....D..........A.......Q....D...QN......NKF....VDK.............................. [...]
+A4ZYY6_TETTH/491-831   .............................................................................tfaliimnselehyhf--------..-----..YKTCKQA.IT...VD..K..GICCSLIKA.S..T.LQQYVPtqqypq....ippgnsIEAFASRFLS.......QMQAK..........LGES.P.....WLM.Q....ELP.Y-........-......-..-....-...N...Q.....N.P..C.T..................................MIGFSVLRQRNAR...............---K..IIVAGAASIN...K...Q.Y.S...K....Y.L.....P.DY..R...VI.....S..........E.......V....S...TK......IK-....--Edgtleivelseq.................. [...]
+Q23AZ6_TETTH/491-831   .............................................................................tfaliimnselehyhf--------..-----..YKTCKQA.IT...VD..K..GICCSLIKA.S..T.LQQYVPtqqypq....ippgnsIEAFASRFLS.......QMQAK..........LGES.P.....WLM.Q....ELP.Y-........-......-..-....-...N...Q.....N.P..C.T..................................MIGFSVLRQRNAR...............---K..IIVAGAASIN...K...Q.Y.S...K....Y.L.....P.DY..R...VI.....S..........E.......V....S...TK......IK-....--Edgtleivelseq.................. [...]
+C5LD15_9ALVE/568-697   ............................................................................................l-VMLFTPV..KDCKR.vYQIFKQV.CT...VE..R..PCITQVVRS.E..T.MRKKTS................IVAIVTRIIM.......QISAK..........FLGP.-.....LWH.I....DLH.TS........L......T..P....M...M...N.....E.P..C.M..................................LVGIDTAVAKETR...............---R..AVLGFVCSLD...S...A.S.S...Q....Y.F.....S.KA..V...PL.....D..........-.......-....-...--......---....---.............................. [...]
+A2DPV7_TRIVA/501-794   ............................................................................................f-VICVVPD..TQKDR..YDSIKSV.LS...SD..L..GIPSQIAIE.G..S.L-NPKL................LMSVATNLVI.......QIGTK..........LNGA.-.....LVK.L....S-R.KS........I......-..S....A...E...M.....K.G..T.M..................................LIGLSIASGKGRD...............--PS..SYVSGVATTD...F...D.L.S...M....Y.H.....S.KS..F...GP.....H..........N.......E....K...II......PEN...fITD.............................. [...]
+C5LD15_9ALVE/718-952   ....................................................................................vsgttpsts--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..S...MK.....E..........R.......R....S...AG......VAR...aIKE.............................. [...]
+Q54HL3_DICDI/867-1166  ............................................................................................l-FIIILPE.nDHSFI..YKSIKNLsLL...RN..R..AVITQCIKS.S..K.IKDR--................LNLISKPIAS.......QIIAK..........MGKF.-.....PWS.I....D--.PT........I......-..-....F...S...Ni...pE.N..T.M..................................VIGIDVTHNPEIS...............---Y..SVAAFVASTN...N...C.H.T...Q....F.Y.....H.KI..N...IQ.....P..........F.......L....K...EI......LDSd..fIFT.............................. [...]
+Q7KWS3_DICDI/669-964   ............................................................................................f-FLIIIPQ..NNAEV..YKGIKMK.SL...IQ..F..RVLTQCIFS.R..T.FDKG--................-RPVSVKLKQ.......QVVAK..........LGLA.-.....PWG.L....GQD.IY........K......G..V....-...-...P.....K.K..T.M..................................VIGVDVGHNSDMK...............--GH..SVVGFVATID...D...K.F.Q...K....F.F.....S.RA..Y...AQ.....E.........rP.......G....K...EI......IHS....LED.............................. [...]
+Q54G64_DICDI/590-885   ............................................................................................f-FLMLIPQ..NQPEI..YKEIKRK.SL...VQ..F..KVLTQCIFP.R..T.FYKG--................-RSVTNKLKQ.......QVIAK..........LGYA.-.....PWG.L....NQQ.I-........F......N..G....V...I...P.....K.K..T.M..................................IIGIDVGHNSDMR...............--GH..SVVGFVATID...D...K.F.Q...K....Y.F.....S.RS..F...VQ.....K.........rP.......G....K...EI......IDS....LEE.............................. [...]
+D3B338_POLPA/992-1287  ............................................................................................f-FLCAIQQ..-KPDF..YNLIKKY.TL...IT..A..RVITQCILA.K..T.MDKDNI................-GSVVSKVIL.......QVIAK..........LGKD.-.....PWV.L....KNP.G-........Y......-..-....N...I...P.....E.H..T.M..................................VVGIDVGHNAATR...............--GK..SIVAITATLN...R...S.L.T...R....Y.F.....S.TA..I..iQQ.....T..........P.......G....K...DI......IDS....LQT.............................. [...]
+D3BMP8_POLPA/633-929   ............................................................................................f-FFCLIPF..GKADV..YAAIKKS.TL...TQ..F..KAITQCAYA.K..T.LGIT--................GMAVAKKILH.......QLIAK..........LGRS.P.....WSI.S....NPV.YK........M......-..-....-...-...P.....K.H..T.M..................................IVGIDVGHNSDQR...............--GK..SVVGFCASID..sE...Y.S.L...Y....H.T.....T.AI..V...QS.....T..........P.......G....K...EI......VES....LRP.............................. [...]
+Q1ZXG9_DICDI/1063-1281 ......................................................................................nqskiht--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................------------Q...............KDAR..SVAAFCATTN...N...A.F.T...N...cY.V.....S.AT..I...QK.....Q..........S.......S....K...EV......INS....LGA.............................. [...]
+Q86HF5_DICDI/896-1194  .............................................................................................FIVVVVNG..VKTDL..YNSIKRT.AI...LE..C..KVITQVLTV.K..T.ITNQKI................-SSIFSKITN.......QINAK..........IDIP.-.....PWT.L....KEN.SN........F......G..I....-...-...P.....N.Y..T.M..................................VVGIDVGHNTDKE...............--SR..SVAAFCASVN...H...S.F.T...N....F.F.....V.AC..S...IQ.....K..........Q......nT....K...EV......IHS....LGN.............................. [...]
+B7PDV6_IXOSC/541-835   ...........................................................................................la--LVILPN..NRKDR..YDMIKKH.AC...VD..L..GLQTQVLLS.R..T.IGNRKN................VRSVATKVAI.......QLNCK..........LGGQ.-.....AWC.L....EIP.L-........-......-..-....-...-...-.....A.S..T.M..................................VIGYDTYHDSSQR...............--GR..SAGAFVASLN...R...T.F.T...R....W.F.....S.RA..S...FH.....A..........S.......H....Q...EL......GNS....LAI.............................. [...]
+B7Q5I1_IXOSC/446-741   ............................................................................................l-LMTIFPN..NRKDR..YDSLKKV.AC...VD..M..GLHTQVMLG.R..T.ISNKKN................LKSVATKVAI.......QMNCK..........LGGE.-.....AWA.L....DIP.L-........-......-..-....-...-...-.....T.K..M.M..................................CVGYDTYHDSRQK...............--GL..SAGGFVASLN...R...T.L.T...R....W.Y.....S.RV..S...FH.....Q..........T.......H....Q...EL......GSA....LKT.............................. [...]
+C3XV23_BRAFL/67-195    ................................................................................lsnlcacfrfplr--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B5BUZ0_9ASCI/567-860   ............................................................................................m-ILSLMPS..NRKDR..YDGIKRL.CC...VD..I..PIPTQVVLT.K..T.LSKPQR................VMSIATKIAI.......QINCK..........LGGE.-.....AWA.A....HIP.L-........-......-..-....-...-...-.....K.G..T.M..................................VIGIDTYHDTARK...............--GQ..SVGGFVANIN...Q...E.Y.T...R....W.Y.....S.NT..T...FQ.....Q..........N.......S....T...EL......IDG....LKK.............................. [...]
+Q0H8V5_9CNID/70-239    ............................................................................................m-VVTILTT..NRKDR..YDAIKKL.CC...LE..K..PVPSQVIVG.R..T.ISKKQM................LMSVSTKIAI.......QLNCK..........LGGE.-.....AWA.L....EIP.L-........-......-..-....-...-...-.....K.K..T.M..................................VIGIDTYHDSSAK...............--GR..SVGGFVASVN...Q...T.L.T...K....Y.Y.....S.RV..S...FQ.....H..........T.......G....M...EF......IDA....LKT.............................. [...]
+A7RFC2_NEMVE/557-857   ............................................................................................i-VVTIVPS..NRKDR..YDSIKKL.CC...LE..K..GVPSQVVVS.R..T.LSKKQM................LMSVCTKIGI.......QLNCK..........LGGE.-.....AWA.V....DIP.L-........-......-..-....-...-...-.....K.N..L.M..................................IVGIDTYHDSSQK...............--GR..SVGGFVASLNkpcT...R.Q.R...E....Y.Y.....S.RC..T...FQ.....H..........S.......G....Q...EL......VDG....LKV.............................. [...]
+A7T755_NEMVE/2-70      ............................................................................................i-VVTIVPS..NRKDR..YDSIKKL.CC...LE..K..GVPSQVVVS.R..T.LSKKQM................LMSVCTKIGI.......QLNCK..........LGGE.-.....AWA.V....DIP.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+C3XV22_BRAFL/1831-1964 .........................................................................................ktqm--------..-RKDR..YDAIKKF.CC...VD..H..PVPSQVIVS.R..T.LNKKQM................LMSVATKIAM.......QLNCK..........LGGE.-.....LWA.V....EIP.L-........-......-..-....-...-...-.....K.S..M.M..................................VVGIDCYHDSATK...............--GQ..SIGGVIASMN...S...S.L.T...R....W.Y.....S.RC..T...FQ.....H..........S.......G....Q...EL......IDG....LKV.............................. [...]
+C3XV20_BRAFL/551-843   .............................................................................................MVVCIVSN..NRKDR..YDAIKKF.CC...VD..R..PVPSQVIVS.R..T.LSKKQM................LMSVCTKVAL.......QMNCK..........LGGE.-.....LWA.L....EIP.I-........-......-..-....-...-...-.....K.N..L.M..................................VVGINCYQDSLTK...............--GQ..SVGGVIASIN...S...S.L.T...R....W.Y.....S.RC..T...FQ.....R..........S.......S....Q...EL......IDG....LKV.............................. [...]
+Q6RSS9_PODCA/561-853   ............................................................................................i-VVCIVPN..NRKDR..YDVIKKL.CC...VE..R..PVPSQVVVS.R..T.LSKKQM................LMSVCTKIGI.......QLNCK..........LGGE.-.....VWA.V....DIP.L-........-......-..-....-...-...-.....K.N..V.M..................................VVGFDVYHDSATK...............--GK..SIGGFVASTN...R...Y.L.T...R....Y.Y.....S.RI..T...SQ.....T..........S.......H....Q...EI......CNQ....LKV.............................. [...]
+B2KTD9_9CNID/559-850   ............................................................................................i-VVCIVPN..NRKDR..YDAIKKI.TC...VE..N..PVPSQVVVS.R..T.LSKQQM................LMSVCTKIAI.......QLNCK..........LGGE.-.....VWA.T....EIP.V-........-......-..-....-...-...-.....K.K..L.M..................................VIGFDVYHDSMNK...............--GQ..SIGGFIASTN...D...S.L.T...R....Y.Y.....S.RI..T...KQ.....R..........S.......H....N...EI......CSQ....LKI.............................. [...]
+Q9GPA6_STRPU/114-407   ............................................................................................i-VVVILPT..NRKDR..YDAIKKT.CV...VT..H..PCPSQVIVS.R..T.LSKQQM................LMSVATKIAM.......QMNCK..........MGGD.-.....LWR.V....EIP.L-........-......-..-....-...-...-.....S.N..L.M..................................IIGIDSYHDSLTK...............--GR..SVLGFVASMN...K...S.Q.T...S....F.F.....S.SC..A...FQ.....H..........A.......Q....G...EF......GAN....LST.............................. [...]
+Q9GPA7_STRPU/547-808   ............................................................................................i-VVVILPT..NRKDR..YDAIKKT.CV...VT..H..PCPSQVIVS.R..T.LSKQQM................LMSVATKIAM.......QMNCK..........MGGD.-.....LWR.V....EIP.L-........-......-..-....-...-...-.....S.N..L.M..................................IIGIDSYHDSLTK...............--GR..SVLGFVASMN...K...S.Q.T...S....F.F.....S.SC..A...FQ.....H..........A.......Q....G...EF......GAN....LST.............................. [...]
+Q9GPA8_STRPU/547-840   ............................................................................................i-VVVILPT..NRKDR..YDAIKKT.CV...VT..H..PCPSQVIVS.R..T.LSKQQM................LMSVATKIAM.......QMNCK..........MGGD.-.....LWR.V....EIP.L-........-......-..-....-...-...-.....S.N..L.M..................................IIGIDSYHDSLTK...............--GR..SVLGFVASMN...K...S.Q.T...S....F.F.....S.SC..A...FQ.....H..........A.......Q....G...EF......GAN....LST.............................. [...]
+Q3ZUK2_PLADU/35-327    ............................................................................................l-VLCILPS..NKKDR..YDAIKKL.CC...IN..C..PVPSQMVLA.K..T.LSKAKM................LMSVATKIAI.......QINCK..........LGGE.-.....VWA.L....EIP.L-........-......-..-....-...-...-.....K.G..L.M..................................VVGVDSYHDSKQK...............--GR..SVGAFVASMN...Q...S.L.T...R....Y.Y.....S.RC..C...FQ.....H..........Q.......H....Q...EL......LDG....LRV.............................. [...]
+D1LXB5_SACKO/1-252     ...........................................................................................ml--------..-----..-------.--...--..-..---------.-..-.------................-MSVATKIAM.......QLNCK..........LGGE.-.....LWA.L....EIP.I-........-......-..-....-...-...-.....K.N..M.M..................................IVGIDCYHDSATK...............--GQ..SIGAFIASTN...R...T.I.T...R....F.Y.....S.RV..T...FQ.....H..........T.......G....Q...EL......IDG....LKV.............................. [...]
+PIWL1_CHICK/561-853    ............................................................................................i-VVCILSS..TRKDK..YDAIKKY.LC...TD..C..PIPSQCVVA.R..T.LSKPQT................ALAIVTKIAL.......QMNCK..........MGGE.-.....LWS.V....EIP.L-........-......-..-....-...-...-.....K.Q..L.M..................................IVGIDCYHDTLSG...............--KQ..SIAGFVASLN...E...K.M.T...R....W.F.....S.RC..V...VQ.....S..........R.......G....Q...EI......VDG....LKA.............................. [...]
+PIWL1_HUMAN/555-847    ............................................................................................i-VVCLLSS..NRKDK..YDAIKKY.LC...TD..C..PTPSQCVVA.R..T.LGKQQT................VMAIATKIAL.......QMNCK..........MGGE.-.....LWR.V....DIP.LK........L......-..-....-...-...-.....-.-..V.M..................................IVGIDCYHDMTAG...............--RR..SIAGFVASIN...E...G.M.T...R....W.F.....S.RC..I...FQ.....D..........R.......G....Q...EL......VDG....LKV.............................. [...]
+D2HWM8_AILME/555-847   ............................................................................................i-VVCLLSS..NRKDK..YDAIKKY.LC...TD..C..PTPSQCVVA.R..T.LGKQQT................VMAIATKIAL.......QMNCK..........MGGE.-.....LWR.V....DMP.LK........L......-..-....-...-...-.....-.-..A.M..................................IVGIDCYHDTTAG...............--RR..SIAGFVASIN...E...G.M.T...R....W.F.....S.RC..V...FQ.....D..........R.......G....Q...EL......VDG....LKV.............................. [...]
+PIWL1_MOUSE/556-848    ............................................................................................i-VVCLLSS..NRKDK..YDAIKKY.LC...TD..C..PTPSQCVVA.R..T.LGKQQT................VMAIATKIAL.......QMNCK..........MGGE.-.....LWR.V....DMP.LK........L......-..-....-...-...-.....-.-..A.M..................................IVGIDCYHDTTAG...............--RR..SIAGFVASIN...E...G.M.T...R....W.F.....S.RC..V...FQ.....D..........R.......G....Q...EL......VDG....LKV.............................. [...]
+D3ZTP9_RAT/556-848     ............................................................................................i-VVCLLSS..NRKDK..YDAIKKY.LC...TD..C..PTPSQCVVA.R..T.LGKQQT................VMAIATKIAL.......QMNCK..........MGGE.-.....LWR.V....DMP.LK........L......-..-....-...-...-.....-.-..A.M..................................IVGIDCYHDTTAG...............--RR..SIAGFVASIN...E...G.M.T...R....W.F.....S.RC..V...FQ.....D..........R.......G....Q...EL......VDG....LKV.............................. [...]
+PIWL1_DANRE/552-844    .............................................................................................MVVVILPT..NRKDK..YDCVKKY.LC...VD..C..PTPSQCVVS.R..T.ISKPQA................LMTVATKIAL.......QMNCK..........MGGE.-.....LWS.V....EIP.L-........-......-..-....-...-...-.....R.Q..L.M..................................IVGIDCYHDTAAG...............--KR..SIGAMVASLN...Q...G.M.S...R....W.F.....S.KC..V...LQ.....N..........R.......G....Q...EI......IDA....LKG.............................. [...]
+Q4T9Z1_TETNG/519-587   .............................................................................................MVVVILPT..NRKDK..YDSIKKY.LC...VD..C..PVPSQCVVA.Q..T.LSRPQT................LLNVATKIAL.......QMACK..........MGGE.-.....LWS.V....EIP.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+Q4T9Y6_TETNG/521-792   .............................................................................................MVVVILPT..NRKDK..YDSIKKY.LC...VD..C..PVPSQCVVA.Q..T.LSRPQT................LLNVATKIAL.......QMACK..........MGGE.-.....LWS.V....EIP.L-........-......-..-....-...-...-.....K.H..L.M..................................VVGIDCYHDISAG...............--KR..SVGALVASMN...Q...T.M.S...R....W.F.....S.RC..V...LQ.....Q..........K.......G....Q...EI......MDG....LKR.............................. [...]
+Q4T9Y9_TETNG/1-228     .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-MACK..........MGGE.-.....LWS.V....EIP.L-........-......-..-....-...-...-.....K.H..L.M..................................VVGIDCYHDISAG...............--KR..SIGALVASMN...Q...T.M.S...R....W.F.....S.RC..V...LQ.....Q..........K.......G....Q...EI......MDG....LKR.............................. [...]
+B9U223_ORYLA/549-841   .............................................................................................MVVVVLPS..NRKDK..YDSVKKY.LC...VD..C..PTPSQCVLS.R..T.LSRPQA................LMTVATKIAL.......QMSCK..........MGGE.-.....LWS.V....EIP.L-........-......-..-....-...-...-.....K.Q..L.M..................................IVGIDCYHDISAG...............--KR..SIGAMVASLN...Q...S.M.S...R....W.Y.....S.KC..V...LQ.....H..........K.......G....Q...EL......MDG....LKM.............................. [...]
+C3XV22_BRAFL/1173-1299 ........................................................................................lqapr--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.H...S....W.Y.....S.GC..T...FQ.....H..........S.......G....Q...EL......IDG....LKV.............................. [...]
+C3XV22_BRAFL/2983-3180 ............................................................saeaapkkkmqkkkkranqktstiklttepvpv--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B4DYF7_HUMAN/569-859   .............................................................................................MVICILPN..DDKRR..YDSIKRY.LC...TK..C..PIPSQCVVK.K..T.LEKVQA................-RTIVTKIAQ.......QMNCK..........MGGA.-.....LWK.V....ETD.V-........-......-..-....-...-...-.....Q.R..T.M..................................FVGIDCFHDIVNR...............--QK..SIAGFVASTN...A...E.L.T...K....W.Y.....S.QC..V...IQ.....K..........T.......G....E...EL......VKE....LEI.............................. [...]
+PIWL3_HUMAN/578-868    ............................................................................................k-VICILPN..DDKRR..YDSIKRY.LC...TK..C..PIPSQCVVK.K..T.LEKVQA................-RTIVTKIAQ.......QMNCK..........MGGA.-.....LWK.V....ETD.V-........-......-..-....-...-...-.....Q.R..T.M..................................FVGIDCFHDIVNR...............--QK..SIAGFVASTN...A...E.L.T...K....W.Y.....S.QC..V...IQ.....K..........T.......G....E...EL......VKE....LEI.............................. [...]
+PIWL4_HUMAN/546-838    ............................................................................................l-VMCILPS..NQKTY..YDSIKKY.LS...SD..C..PVPSQCVLA.R..T.LNKQGM................MMSIATKIAM.......QMTCK..........LGGE.-.....LWA.V....EIP.L-........-......-..-....-...-...-.....K.S..L.M..................................VVGIDVCKDALSK...............--DV..MVVGCVASVN...P...R.I.T...R....W.F.....S.RC..I...LQ.....R..........T.......M....T...DV......ADC....LKV.............................. [...]
+D2I3M6_AILME/487-786   ............................................................................................l-VMCILPS..NQKSY..YDCIKKY.LS...CV..F..PVPSQCVLA.R..T.LTRQGM................MMSIATKIAM.......QMACK..........LGGE.-.....LWA.V....EIP.L-........-......-..-....-...-...-.....K.S..L.M..................................VVGIDVCKHEFSK...............--GM..VVVGFVASIN...P...G.I.T...R....W.F.....S.RC..T...LQ.....R..........T.......T....T...DV......ADC....LKV.............................. [...]
+A6X965_MOUSE/3-172     ...........................................................................................pg--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+D3ZDI3_RAT/541-827     ............................................................................................l-VMCILPS..NQKNY..YDSIKRY.LS...SD..X..PTPVSCTLQ.D..A.LSKDVA................VVGFVASINS.......RITRR..........IKGL.-.....--L.P....SLS.QP........L......-..-....-...-...L.....K.S..L.M..................................VVGIDICRDALSK...............--DV..AVVGFVASIN...S...R.I.T...R....W.F.....S.RC..V...LQ.....R..........T.......A....A...DI......ADC....LKV.............................. [...]
+PIWL4_RAT/541-834      ............................................................................................l-VMCILPS..NQKNY..YDSIKRY.LS...SD..C..PVPSQCVLT.R..T.LNKQGM................MLSVATKIAM.......QMTCK..........LGGE.-.....LWA.V....EIP.L-........-......-..-....-...-...-.....K.S..L.M..................................VVGIDICRDALSK...............--DV..AVVGFVASIN...S...R.I.T...R....W.F.....S.RC..V...LQ.....R..........T.......A....A...DI......ADC....LKV.............................. [...]
+PIWL4_MOUSE/541-834    ............................................................................................l-VMCILPS..NQKNY..YDSIKKY.LS...SD..C..PVPSQCVLT.R..T.LNKQGT................MLSVATKIAM.......QMTCK..........LGGE.-.....LWS.V....EIP.L-........-......-..-....-...-...-.....K.S..L.M..................................VVGIDICRDALNK...............--NV..VVVGFVASIN...S...R.I.T...R....W.F.....S.RC..V...LQ.....R..........T.......A....A...DI......ADC....LKV.............................. [...]
+B9ZU53_9TURB/586-879   ...........................................................................................la--IVVLPD..NRADR..YNAIKRQ.CY...VE..T..PVPSQCVLN.R..T.LNNEKG................FMSVVSKLAL.......QINVK..........MGGE.-.....PWM.C....KLP.V-........-......-..-....-...-...D.....P.G..A.M..................................IIGMDVHHVGKGG...............-KGP..SQLGFVSSLN...V...E.L.T...R....F.Y.....S.RV..-...YN.....N..........E.......S....N...EI......SGT....IKV.............................. [...]
+C9E0T4_APIME/497-785   ............................................................................................l-IFCVVSN..NRADR..YSAIKKK.CT...HD..R..PVASQVFLA.K..N.LTNKGI................-RSIATKVAI.......QLNCK..........LGGA.-.....PWS.V....ELP.P-........-......-..-....-...-...-.....I.N..L.M..................................VVGYDVCHDPADK...............--SR..DFGAMVASLD...R...S.L.T...R....Y.Y.....S.AV..A...AH.....T..........T.......G....E...EL......SDE....FGE.............................. [...]
+C9E0T3_APIME/525-813   ............................................................................................l-IFCVVSN..NRADR..YSAIKKK.CT...HD..R..PVASQVFLA.K..N.LTNKGI................-RSIATKVAI.......QLNCK..........LGGA.-.....PWS.V....ELP.P-........-......-..-....-...-...-.....I.N..L.M..................................VVGYDVCHDPADK...............--SR..DFGAMVASLD...R...S.L.T...R....Y.Y.....S.AV..A...AH.....T..........T.......G....E...EL......SDE....FGE.............................. [...]
+A7LM14_BOMMO/414-612   .............................................................................................LILCVLAR..NYADR..YEAIKKK.CT...VD..R..AVPTQVVCA.R..N.MSSKSA................-MSIATKVAI.......QINCK..........LGGS.-.....PWT.V....DIP.L-........-......-..-....-...-...-.....P.S..L.M..................................VVGYDVCHDTRSK...............--EK..SFGAFVATLD...K...Q.M.T...Q....Y.Y.....S.IV..N...AH.....T..........S.......G....E...EL......SSH....MGF.............................. [...]
+A8D8P8_BOMMO/594-885   .............................................................................................LILCVLAR..NYADR..YEAIKKK.CT...VD..R..AVPTQVVCA.R..N.MSSKSA................-MSIATKVAI.......QINCK..........LGGS.-.....PWT.V....DIP.L-........-......-..-....-...-...-.....P.S..L.M..................................VVGYDVCHDTRSK...............--EK..SFGAFVATLD...K...Q.M.T...Q....Y.Y.....S.IV..N...AH.....T..........S.......G....E...EL......SSH....MGF.............................. [...]
+Q7QG53_ANOGA/576-875   .............................................................................................MIMCVVSN..SKSDR..YTAIKKK.CC...VE..R..AIPTQIMVQ.K..T.ITPKSGnv............rtLMSVATKVVI.......QMNCK..........LGGV.-.....PWK.V....KIP.L-........-......-..-....-...-...-.....N.G..L.M..................................TIGFDVCHDSKDK...............--SK..SFGAMVATLD...H...D.N.RgtpK....F.F.....S.TV..S...HH.....S..........S.......G....E...EI......SNY....LPL.............................. [...]
+Q16IF2_AEDAE/569-868   .............................................................................................LIMCVVTN..QKADR..YTAIKKK.CC...VD..R..AVPTQVICQ.K..T.ITPKGGnv............rtLMSVATKVVI.......QMNCK..........LGGV.-.....PWK.V....KIP.L-........-......-..-....-...-...-.....S.G..M.M..................................TIGFDVCHDTNDK...............--SK..SYGAMVATFD...H...D.N.RgtpK....F.F.....S.TV..S...QH.....R..........H.......G....E...EI......CNY....LPL.............................. [...]
+Q16ZS2_AEDAE/361-660   .............................................................................................LIMCVVTN..QKADR..YTAIKKK.CC...VD..R..AVPTQVICQ.K..T.ITPKGGnv............rtLMSVATKVVI.......QMNCK..........LGGV.-.....PWK.V....KIP.L-........-......-..-....-...-...-.....S.G..M.M..................................TIGFDVCHDTNDK...............--SK..SYGAMVATFD...H...D.N.RgtpK....F.F.....S.TV..S...QH.....R..........H.......G....E...EI......CNY....LPL.............................. [...]
+Q16ZS3_AEDAE/562-861   .............................................................................................LIMCVVTN..QKADR..YTAIKKK.CC...VD..R..AVPTQVICQ.K..T.ITPKGGnv............rtLMSVATKVVI.......QMNCK..........LGGV.-.....PWK.V....KIP.L-........-......-..-....-...-...-.....N.G..L.M..................................TVGFDVCHDTNDK...............--SK..SYGAMVATFD...H...D.N.RgtpK....F.F.....S.TV..S...QH.....G..........H.......G....E...EI......CNY....LPL.............................. [...]
+Q171B3_AEDAE/547-846   ............................................................................................l-VMCVVTN..NKADR..YTAIKKK.CC...VD..R..AIPTQVMVQ.K..T.ITPKGGnv............rtLMSVATKVVI.......QMNCK..........LGGV.-.....PWK.V....KIP.L-........-......-..-....-...-...-.....N.G..L.M..................................TIGFDVCHDGKDK...............--SK..SFGAMVATLDhdnK...G.T.P...K....F.F.....S.TV..S...QH.....T..........H.......G....E...EI......SNY....LPI.............................. [...]
+B0W5T4_CULQU/546-845   .............................................................................................LIMCVVTN..NKADR..YTAIKKK.CC...VD..R..AIPTQVMVQ.K..T.ITPKGGnv............rtLMSVATKVVI.......QMNCK..........LGGV.-.....PWK.V....KIP.L-........-......-..-....-...-...-.....N.G..L.M..................................TIGFDVCHDAKDK...............--SK..SFGAMVATLDhdnK...G.T.P...K....F.F.....S.TV..S...QH.....T..........H.......G....E...EI......SNY....LPI.............................. [...]
+B0W5T3_CULQU/510-809   .............................................................................................MIMCVVSN..NKADR..YTAIKKK.CC...VD..R..AIPTQVMVQ.R..T.ITPKGGnv............rtLMSVATKVVI.......QMNCK..........LGGV.-.....PWK.V....KIP.L-........-......-..-....-...-...-.....S.G..L.M..................................TVGFDVCHDTKDK...............--SK..SFGAMVATFDyenK...G.V.P...K....Y.F.....S.TV..S...QH.....T..........H.......G....E...EI......SNY....LPL.............................. [...]
+B0W5P0_CULQU/552-851   .............................................................................................MIMCVVSN..NKADR..YTAIKKK.CC...VD..R..AIPTQVMVQ.R..T.ITPKGGnv............rtLMSVATKVVI.......QMNCK..........LGGV.-.....PWK.V....KIP.L-........-......-..-....-...-...-.....S.G..L.M..................................TVGFDVCHDTKDK...............--SK..SFGAMVATFDyenK...G.V.P...K....Y.F.....S.TV..S...QH.....T..........H.......G....E...EI......SNY....LPL.............................. [...]
+Q5TW24_ANOGA/530-829   ............................................................................................l-VMCIVPN..DRADR..YKAIKKK.CC...VD..R..PLPCQVIKA.R..T.ITPKNQnl............raLLTIATKVMI.......QLNCK..........LGGI.-.....PWI.V....KNP.L-........-......-..-....-...-...-.....S.S..V.M..................................VVGFDVCHDASDK...............--SL..SYGALVATMYa.aK...HiE.P...K....Y.F.....S.VI..E...RH.....Q..........R.......G....E...EL......SSF....LSS.............................. [...]
+Q16JS1_AEDAE/576-874   .............................................................................................LIMCLVTN..DKADR..YSAIKKK.CC...VD..R..AVPTQVLKT.R..T.ITPKGGnv............rtLMSVATKVAI.......QMNCK..........LGGI.-.....PWV.I....KSP.L-........-......-..-....-...-...-.....A.S..V.M..................................VIGYDVCKDSKDR...............--SK..GYGALVASMYgggV...K.H.P...K....Y.Y.....S.TV..N...QH.....A..........Y.......G....E...EL......SNY....LAL.............................. [...]
+Q176R2_AEDAE/633-931   .............................................................................................MIMCVVTN..DKADR..YAAIKKK.CC...VD..R..AVATQVIKT.R..T.ITPKGGnv............rtLMSVATKVAI.......QVNCK..........LGGI.-.....PWI.L....KNP.L-........-......-..-....-...-...-.....S.S..I.M..................................VIGFDVCHDTRDK...............--SK..SYGALVASMYgagC...R.H.P...K....Y.F.....S.TV..N...HH.....S..........N.......G....E...EL......SNF....MAQ.............................. [...]
+B0XE75_CULQU/501-788   .............................................................................................MIFCVVSN..DKADR..YAAIKKK.TC...VE..R..AIPTQVIKA.R..T.ITPKGGnv............rtLMSVATKVAI.......QMNCK..........LGGI.-.....PWV.L....RNP.L-........-......-..-....-...-...-.....T.S..V.M..................................VIGFDVCHDTRDK...............----..-----SKSYG...Q...K.H.P...K....F.F.....S.TV..N...HH.....S..........S.......G....E...EL......SNF....MAQ.............................. [...]
+Q16JS2_AEDAE/571-869   ............................................................................................l-VMCLVSN..DKADR..YAAIKKK.SC...VD..R..AVATQVIKA.R..T.ITPKGGnv............rtLMSVATKVAI.......QLNCK..........LGGI.-.....PWV.L....KNP.L-........-......-..-....-...-...-.....T.S..V.M..................................VIGFDVCHDTRDK...............--SK..SFGAMVASMYgggC...K.H.P...K....F.F.....S.TV..N...PH.....T..........S.......G....E...EL......SNF....MAQ.............................. [...]
+B0XE74_CULQU/592-891   .............................................................................................LIMCIVTN..DKVDR..YAAIKKK.CC...VD..R..AVPTQVIKC.K..T.ITPKGGnp............rtLMSVATKVAI.......QLNCK..........LGGI.-.....PWI.V....KSP.L-........-......-..-....-...-...-.....L.S..V.M..................................CLGFDVCRDTKDR...............--NK..TYGALVAAMY...H...G.K.H...RyhpnF.Y.....S.TV..N...QH.....A..........N.......G....A...EL......SDS....LAL.............................. [...]
+B0WYL9_CULQU/560-857   .............................................................................................LIMCVVTD..DKADR..YAAIKKK.CC...VN..R..AIPTQVIKS.R..T.ITPRHGn..............mMLSVATKVAI.......QLNSK..........LGGI.-.....PWV.V....KVL.M-........-......-..-....-...-...-.....E.S..V.M..................................CVGFDVCRDTKDK...............--NI..CYGALVAAMN...H...G.K.H...R....Q.H.....S.EF..Y...ST.....V..........N.......Q....H...SY......GAD....LSDsl............................ [...]
+B4P152_DROYA/546-844   ...........................................................................................qi-VMVVMRS..QNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.R..V.IAPRQEks............agLMSIATKVVI.......QMNAK..........LMGA.-.....PWM.I....DLP.L-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSSKDK...............--NK..SYGALVATMD..qR...E.S.S...R....Y.F.....S.TV..T...EH.....M..........K.......G....Q...EL......SEH....MSL.............................. [...]
+B3N4Z9_DROER/546-844   ...........................................................................................qi-VMVVMRS..PNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.K..V.IAPRQEka............tgLMSIATKVVI.......QMNAK..........LMGA.-.....PWM.I....SLP.L-........-......-..-....-...-...-.....H.G..L.M..................................TVGFDVCHSSKDK...............--NK..SYGALVATMD..qK...E.S.N...R....Y.F.....S.SV..N...EH.....M..........K.......G....Q...EL......SEH....MSL.............................. [...]
+Q95PE5_DROME/1-176     .............................................................................................--------..-----..YSCIKKR.TC...VD..R..PVPSQVVTL.K..V.IAPRQQkp............tgLMSIATKVVI.......QMNAK..........LMGA.-.....PWQ.V....VIP.L-........-......-..-....-...-...-.....H.G..L.M..................................TVGFDVCHSPKNK...............--NK..SYGAFVATMD..qK...E.S.F...R....Y.F.....S.TV..N...EH.....I..........K.......G....Q...EL......SEQ....MSV.............................. [...]
+A8DYZ0_DROME/483-781   ...........................................................................................qi-VMVVMRS..PNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.K..V.IAPRQQkp............tgLMSIATKVVI.......QMNAK..........LMGA.-.....PWQ.V....VIP.L-........-......-..-....-...-...-.....H.G..L.M..................................TVGFDVCHSPKNK...............--NK..SYGAFVATMD..qK...E.S.F...R....Y.F.....S.TV..N...EH.....I..........K.......G....Q...EL......SEQ....MSV.............................. [...]
+O76922_DROME/554-852   ...........................................................................................qi-VMVVMRS..PNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.K..V.IAPRQQkp............tgLMSIATKVVI.......QMNAK..........LMGA.-.....PWQ.V....VIP.L-........-......-..-....-...-...-.....H.G..L.M..................................TVGFDVCHSPKNK...............--NK..SYGAFVATMD..qK...E.S.F...R....Y.F.....S.TV..N...EH.....I..........K.......G....Q...EL......SEQ....MSV.............................. [...]
+B4Q9X4_DROSI/545-843   ...........................................................................................qi-VMVVIRT..PNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.K..V.IAPRQQkp............agLSSIATKVVI.......QMNAK..........LMGA.-.....PWK.I....EIP.L-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSPKNK...............--NK..SYGALVATMD..qK...E.S.F...R....Y.F.....S.TV..N...EH.....S..........K.......G....Q...EL......SEQ....MSL.............................. [...]
+B4HWZ3_DROSE/549-847   ...........................................................................................qi-VMVVIRT..PNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.K..V.IAPRQQks............agLSSVATKVVI.......QMNAK..........LMGA.-.....PWK.I....EIP.L-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSPKNK...............--NK..SYGALVATMD..qK...E.S.F...R....Y.F.....S.TV..N...EH.....T..........K.......G....Q...EL......SEQ....MSL.............................. [...]
+B4LV39_DROVI/546-843   ............................................................................................i-IMLVMKS..PNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.R..T.IAPRPEks............ggLMSIATKVVI.......QMNAK..........LMGA.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....K.G..L.M..................................TVGFDVCHSSKNK...............--NK..SYGALVASLD..mK...Y.S.E...R....Y.Y.....S.SV..T...EH.....M..........K.......G....Q...EL......SDQ....MSL.............................. [...]
+B4KHC1_DROMO/539-836   ............................................................................................i-IMLVLKT..NNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.R..T.IAPRPEra............sgLMSVATKVVI.......QMNAK..........LMGA.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSSKNK...............--NK..SYGALVATMD..mK...S.S.T...R....Y.F.....S.SV..S...EH.....M..........K.......G....Q...EL......SDQ....MSL.............................. [...]
+B4JBE4_DROGR/542-839   ............................................................................................i-IMLVLRS..PNEEK..YSCIKKR.AC...VD..R..PVPSQVVTL.R..T.IAPRPDra............sgLMSIATKVVI.......QMNAK..........IMGA.-.....PWI.I....ELP.L-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSSKDK...............--NK..SYGALVATMD..mK...L.S.T...R....Y.Y.....S.SV..T...EH.....L..........K.......G....Q...EL......SNQ....MSV.............................. [...]
+B4MUA1_DROWI/563-860   ............................................................................................i-VMLVLKT..PNEEK..YSCIKKR.AC...VD..R..PVPSQVVTL.K..T.IAPRQEra............ggLMSIATKVVI.......QMNAK..........LMGA.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSPKSK...............--NK..SYGALVATMD..mK...E.S.Q...R....Y.Y.....S.SV..T...EH.....M..........K.......G....Q...EL......SNQ....MSM.............................. [...]
+B4N6U3_DROWI/34-103    ...........................................................................................nh--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B4MUA0_DROWI/539-836   ............................................................................................i-VMLVLKT..PNEEK..YSCIKKR.AC...VD..R..PVPSQVVTL.K..T.IAPRQEra............ggLMSIATKVVI.......QMNAK..........LMGA.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSPKSK...............--NK..SYGALVATMD..mK...E.S.Q...R....Y.Y.....S.SV..T...EH.....M..........K.......G....Q...EL......SNQ....MSM.............................. [...]
+B3MJZ7_DROAN/562-859   ............................................................................................i-VMLVLKA..PNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.K..T.IAPRQEks............agLMSIATKVVI.......QMNAK..........LMGA.-.....PWM.I....ELP.V-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSSKNK...............--NK..SYGALVATMD..mK...T.S.T...R....Y.F.....S.SV..T...EH.....M..........K.......G....Q...EL......SDQ....MSM.............................. [...]
+B4G765_DROPE/541-838   ............................................................................................i-IMLVLKA..PNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.K..T.IAPRKEks............agLMSIATKVVI.......QMNAK..........LMGA.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSSKNK...............--NK..SYGALVATMD..mK...S.S.N...R....Y.F.....S.SV..N...EH.....M..........K.......G....Q...EL......SDQ....MSM.............................. [...]
+Q29P29_DROPS/540-837   ............................................................................................i-IMLVLKA..PNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.K..T.IAPRKEks............agLMSIATKVVI.......QMNAK..........LMGA.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSSKNK...............--NK..SYGALVATMD..mK...L.S.N...R....Y.F.....S.SV..N...EH.....M..........K.......G....Q...EL......SEQ....MSM.............................. [...]
+B4JBE1_DROGR/574-864   ............................................................................................l-VLCIVPS..NNVER..YSSIKKR.GC...VD..R..SVPTQVVTT.R..A.NQK---................GMSVATKIAI.......QINCK..........LGYT.-.....PWM.I....AVP.M-........-......-..-....-...-...-.....A.G..L.M..................................TMGFDIAKCTRDR...............--NK..AYGALVASMD..lQ...R.N.A...T....F.F.....S.TV..-...AE.....C..........S.......A....Y...DV......LAN...nLWP.............................. [...]
+B4KHB7_DROMO/577-867   .............................................................................................LILCFVPS..DSPER..YSAIKKR.GC...VD..R..AVPTQVVTK.R..C.-NKN--................GLSVATKIAI.......QMNCK..........IGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TMGFDIAKCSSNR...............--NK..AYGALVASMD..lQ...R.N.A...T....F.F.....S.TV..-...AE.....C..........S.......A....Y...DV......LAN...nLWP.............................. [...]
+B4LV36_DROVI/558-849   ............................................................................................l-ILCFFAR..NNPER..YAAIKKR.GY...VD..R..AIPTQVVTT.N..A.NRNG--................-LSVATKIAI.......QINCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKCSRNR...............--SK..AYGALVASMD..lQ...Q.N.S...T....F.F.....S.TV..-...AE.....C..........S.......A....Y...DV......LAN...nLWP.............................. [...]
+B4G753_DROPE/334-531   ............................................................................................l-ILCLVPN..NNVER..YSSIKKR.GC...VD..R..AVPTQVVTI.K..T.SKNRGL................-LSIATKIAI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSARDR...............--RK..AYGALVASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...SE.....C..........S.......A....F...DV......LAN...nLWP.............................. [...]
+Q29CN1_DROPS/543-834   ............................................................................................l-ILCLVPN..NNVER..YSSIKKR.GC...VD..R..AVPTQVVTI.K..T.SKNRGL................-LSIATKIAI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSARDR...............--RK..AYGALVASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...SE.....C..........S.......A....F...DV......LAN...nLWP.............................. [...]
+B3N502_DROER/538-829   ............................................................................................l-ILCLVPN..DNVER..YSSIKKR.GY...VD..R..AVPTQVVTI.K..T.TKNRSL................-MSIATKIAI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSTRDR...............--KR..AYGALIASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...TE.....C..........S.......A....F...DV......LAN...tLWP.............................. [...]
+B4P149_DROYA/538-829   ............................................................................................l-ILCLVPN..DNAER..YSSIKKR.GY...VD..R..AVPTQVVTI.K..T.TKNRSL................-MSIATKIGI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSTRDR...............--KR..AYGALIASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...TE.....C..........S.......A....F...DV......LAN...tLWP.............................. [...]
+Q6NNZ4_DROME/552-843   ............................................................................................l-ILCLVPN..DNAER..YSSIKKR.GY...VD..R..AVPTQVVTL.K..T.TKNRSL................-MSIATKIAI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSTRDR...............--KR..AYGALIASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...TE.....C..........S.......A....F...DV......LAN...tLWP.............................. [...]
+Q6NP34_DROME/566-857   ............................................................................................l-ILCLVPN..DNAER..YSSIKKR.GY...VD..R..AVPTQVVTL.K..T.TKNRSL................-MSIATKIAI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSTRDR...............--KR..AYGALIASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...TE.....C..........S.......A....F...DV......LAN...tLWP.............................. [...]
+C0PTU6_DROME/566-857   ............................................................................................l-ILCLVPN..DNAER..YSSIKKR.GY...VD..R..AVPTQVVTL.K..T.TKNRSL................-MSIATKIAI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSTRDR...............--KR..AYGALIASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...TE.....C..........S.......A....F...DV......LAN...tLWP.............................. [...]
+PIWI_DROME/538-829     ............................................................................................l-ILCLVPN..DNAER..YSSIKKR.GY...VD..R..AVPTQVVTL.K..T.TKNRSL................-MSIATKIAI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSTRDR...............--KR..AYGALIASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...TE.....C..........S.......A....F...DV......LAN...tLWP.............................. [...]
+B4Q9X1_DROSI/538-829   ............................................................................................l-ILCLVPN..DNVER..YSSIKKR.GY...VD..R..AVPTQVVTM.K..T.AKNRSL................-MSIATKIAI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSTRDR...............--KR..AYGALIASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...TE.....C..........S.......A....F...DV......LAN...tLWP.............................. [...]
+B4HWY9_DROSE/538-829   ............................................................................................l-ILCLVPN..DNAER..YSSIKKR.GY...VD..R..AVPTQVVTM.K..T.AKNRSL................-MSIATKIAI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSTRDR...............--KR..AYGALIASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...TE.....C..........S.......A....F...DV......LAN...tLWP.............................. [...]
+B3MJZ4_DROAN/563-854   ............................................................................................l-ILCLVPN..NNADR..YSAIKKR.GY...VD..R..AVPTQVVTI.K..T.AKNRGL................-MSIATKIAI.......QINCK..........LGYT.-.....PWM.V....EVP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSTRDR...............--KK..AYGALVASMD..lQ...Q.N.S...T....Y.F.....S.TV..S...EC.....S..........A.......F....D...SL......SNN....LWP.............................. [...]
+B4MU97_DROWI/591-882   ............................................................................................l-ILCLVPN..NNVER..YSSIKKI.GC...ID..K..GIPTQVVTS.K..T.VSNRSL................-MSIATKIAV.......QLNCK..........MGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TLGFDIAKSSRDR...............--SK..AFGALVASMD..lQ...E.N.S...T....Y.F.....S.TV..-...AE.....C..........S.......A....Y...DV......LAN...hLWP.............................. [...]
+A8XEN9_CAEBR/501-812   .............................................................................................MLVVMLAD..DNKTR..YDSLKKY.LC...VE..C..PIPNQCINL.R..T.LAGKSSdgg.........enknFGSIVLKIVL.......QMVCK..........TGGA.-.....LWR.V....NIP.M-........-......-..-....-...-...-.....Q.D..T.M..................................IVGYDLYHDSTLK...............--GK..TVGACVSTTS...S...E.F.T...K....F.Y.....S.QT..R...PH.....E..........N.......P....T...QL......GNN....LTH.............................. [...]
+Q17567_CAEEL/397-708   .............................................................................................MLVVMLAD..DNKTR..YDSLKKY.LC...VE..C..PIPNQCVNL.R..T.LAGKSKdgg.........enknLGSIVLKIVL.......QMICK..........TGGA.-.....LWK.V....NIP.L-........-......-..-....-...-...-.....K.S..T.M..................................IVGYDLYHDSTLK...............--GK..TVGACVSTTS...N...D.F.T...Q....F.Y.....S.QT..R...PH.....E..........N.......P....T...QL......GNN....LTH.............................. [...]
+P90786_CAEEL/499-810   .............................................................................................MLVVMLAD..DNKTR..YDSLKKF.LC...VE..C..PIPNQCVNL.R..T.LAGKSKdgg.........enknLGSIVLKIVL.......QMICK..........TGGA.-.....LWK.V....NIP.L-........-......-..-....-...-...-.....K.N..T.M..................................IVGYDLYHDSTLK...............--GK..TVGACVSTTS...N...D.F.T...Q....F.Y.....S.QT..R...PH.....E..........N.......P....T...QL......GNN....LTH.............................. [...]
+B9ZU52_9TURB/589-885   ............................................................................................l-VFCLLPS..NKKQR..YDSIKRL.CY...VN..K..PVPSQCVLT.K..T.IRNPAK................VMSVATKVAL.......QISCK..........LGDV.-.....AWA.V....SIP.M-........-......-..-....-...-...-.....R.R..T.M..................................IVGMDTYHDKRQS...............---V..SVQGIVFSLN...E...T.F.T...Q....Y.Y.....S.YS..P...IV.....K..........G.......G....K...AE......LHN...rLEV.............................. [...]
+B2Z3D6_SCHMD/665-960   ............................................................................................l-VVTILSA..VREDR..YNAIKKF.CY...VD..C..PVPSQVVLA.Q..T.LKEGPK................LNSVAVNIAL.......QINAK..........LGGE.-.....LWA.V....KIP.I-........-......-..-....-...-...-.....K.K..F.M..................................VVGLDVWHDTKGR...............--SR..SVGAVVGSTN...A...L.C.T...R....W.F.....S.KS..H...LQ.....E..........Q.......D....K...EI......MYV....LQS.............................. [...]
+D2Z0E0_DUGJA/657-952   ............................................................................................l-VVTILSA..VREDR..YNAIKKH.CY...VD..C..PVPSQVVLA.Q..T.LKEGPK................LNSVAVNIAL.......QINAK..........LGGE.-.....LWA.V....KIP.I-........-......-..-....-...-...-.....K.K..F.M..................................VVGLDVWHDAKGR...............--GR..SVGAVVGSTN...A...L.C.T...R....W.F.....S.KS..H...LQ.....E..........H.......D....K...EI......VYV....LQS.............................. [...]
+D2A2S9_TRICA/552-839   ...........................................................................................va--VFICPT..LRADR..YSIIKKM.CC...VN..I..PVASQVILS.K..T.LSNPQK................VRTIIHKIAM.......QITCK..........LGGT.-.....LWS.V....KIP.V-........-......-..-....-...-...-.....S.G..W.M..................................VCGIDVYHGANNQ...............----..SVCGFVASIN...G...S.M.T...K....Y.F.....S.KA..M...FQ.....D..........-.......-....G...EI......GDY....FKM.............................. [...]
+B4N2M0_DROWI/49-131    ........................................................................................fhlsg--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+A9ZSZ2_BOMMO/619-912   ............................................................................................q-LVVAICS.tKRDDR..YAAIKKV.CC...AD..N..PVPSQVINA.R..T.LMNTNK................IRSITQKILL.......QLNCK..........LGGT.-.....LWS.I....SIP.F-........-......-..-....-...-...-.....K.S..A.M..................................IVGIDSYHDPSRR...............--NR..SVCSFVASYN...Q...S.M.T...L....W.Y.....S.KV..I...FQ.....E..........K.......G....Q...EI......VDG....LKC.............................. [...]
+A7BJS3_BOMMO/619-912   ............................................................................................q-LVVAICS.tKRDDR..YAAIKKV.CC...AD..N..PVPSQVINA.R..T.LMNTNK................IRSITQKILL.......QLNCK..........LGGT.-.....LWS.I....SIP.F-........-......-..-....-...-...-.....K.S..A.M..................................IVGIDSYHDPSRR...............--NR..SVCSFVASYN...Q...S.M.T...L....W.Y.....S.KV..I...FQ.....E..........K.......G....Q...EI......VDG....LKC.............................. [...]
+A7LNN5_BOMMO/2-193     ...........................................................................................ls--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..A.M..................................IVGIDSYHDPSRR...............--NR..SVCSFVASYN...Q...S.M.T...L....W.Y.....S.KV..I...FQ.....E..........K.......G....Q...EI......VDG....LKC.............................. [...]
+B7QEM1_IXOSC/88-370    ............................................................................................v-IVLIFPT..SRDDR..YSAVKRL.CC...VD..M..PVPSQVIIS.N..T.IGQQQK................LRSVTQKVAL.......QINCK..........LGGE.-.....LWK.V....EIP.M-........-......-..-....-...-...-.....H.N..V.M..................................VIGIDVYHDITRG...............--RQ..SVMGFVASMN...Q...S.L.T...R....W.F.....S.KC..A...FQ.....E..........P.......G....K...EL......VNC....IKI.............................. [...]
+A7SQI3_NEMVE/441-733   ...........................................................................................qv-VVVIFPT..SRDDR..YAAVKKL.CC...VE..S..PVPSQVIIS.K..T.ISNPTK................LRSVVQKIAL.......QINVK..........LGGE.-.....LWA.L....DIP.S-........-......-..-....-...-...-.....R.S..L.M..................................VCGIDVYHDKARG...............--GR..SVGGLVCSMN...R...S.L.T...R....W.Y.....S.DV..C...FQ.....S..........P.......G....Q...EL......IDG....LKM.............................. [...]
+A7T7C9_NEMVE/1-180     ............................................................................................r--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.S..L.M..................................VCGIDVYHDKARG...............--GR..SVGGLVCSMN...R...S.L.T...R....W.Y.....S.DV..C...FQ.....S..........P.......G....Q...EL......IDG....LKMllikgirkwhdairkwhdvcyltmfvslsr [...]
+C3Z5S8_BRAFL/570-730   .............................................................................................MVVCIFPT..PRDDR..YSAIKKL.CC...VD..S..PVPSQVINA.K..T.IGSQQK................LRSVTQKIAL.......QINAK..........LGGE.-.....LWA.L....EIP.L-........-......-..-....-...-...-.....K.N..I.M..................................VVGIDVYHEIKKG...............--VR..SVAGFVASTN...R...E.L.T...R....W.Y.....S.RT..C...FQ.....M..........P.......G....Q...EL......MDG....LKL.............................. [...]
+B0FLQ9_STRPU/653-945   ............................................................................................l-VIAIFPT..SRDDR..YSAFKKL.CC...IE..A..PVPSQVING.R..T.ISQKQK................LRSVTQKIAL.......QINCK..........LGGE.-.....LWA.L....DVP.L-........-......-..-....-...-...-.....S.K..L.M..................................VIGIDVYHDPNRG...............--KK..SIGAFVASMN...R...D.L.T...S....W.F.....S.RV..C...IQ.....T..........P.......H....Q...EL......IGG....LKL.............................. [...]
+PIWL2_XENTR/644-935    ............................................................................................l-LVCLISG..TRDDL..YGAIKKL.CC...VQ..N..PVPSQVINT.R..T.ISQPQK................LRSIAQKILL.......QINCK..........LGGE.-.....LWG.V....DIP.L-........-......-..-....-...-...-.....K.S..V.M..................................VIGMDVYHDPSRG...............--MR..SVLGFVASIN...S...C.L.T...A....W.Y.....S.RV..V...FQ.....L..........P.......N....Q...EI......MDS....LKL.............................. [...]
+D2H044_AILME/665-956   .............................................................................................MVVCIIMG..ARDDL..YGAIKKL.CC...VQ..A..PVPSQVINV.R..T.IGQPTR................LRSVAQKILL.......QINCK..........LGGE.-.....LWG.V....DIP.L-........-......-..-....-...-...-.....K.Q..L.M..................................VIGMDVYHDPSRG...............--MR..SVVGFVASIN...L...T.L.T...K....W.Y.....S.RV..V...FQ.....M..........P.......H....Q...EI......VDS....LKL.............................. [...]
+D3ZRE1_RAT/666-957     .............................................................................................MVVCIIMG..TRDDL..YGAIKKL.CC...VQ..S..PVPSQVINV.R..T.IGQPTR................LRSVAQKILL.......QMNCK..........LGGE.-.....LWG.V....DIP.L-........-......-..-....-...-...-.....K.Q..L.M..................................VIGMDVYHDPSRG...............--MR..SVVGFVASIN...L...T.L.T...K....W.Y.....S.RV..V...FQ.....M..........P.......H....Q...EI......VDS....LKL.............................. [...]
+PIWL2_MOUSE/666-957    .............................................................................................MVVCIIMG..TRDDL..YGAIKKL.CC...VQ..S..PVPSQVINV.R..T.IGQPTR................LRSVAQKILL.......QMNCK..........LGGE.-.....LWG.V....DIP.L-........-......-..-....-...-...-.....K.Q..L.M..................................VIGMDVYHDPSRG...............--MR..SVVGFVASIN...L...T.L.T...K....W.Y.....S.RV..V...FQ.....M..........P.......H....Q...EI......VDS....LKL.............................. [...]
+PIWL2_HUMAN/668-959    .............................................................................................MVVCIIMG..PRDDL..YGAIKKL.CC...VQ..S..PVPSQVVNV.R..T.IGQPTR................LRSVAQKILL.......QINCK..........LGGE.-.....LWG.V....DIP.L-........-......-..-....-...-...-.....K.Q..L.M..................................VIGMDVYHDPSRG...............--MR..SVVGFVASIN...L...T.L.T...K....W.Y.....S.RV..V...FQ.....M..........P.......H....Q...EI......VDS....LKL.............................. [...]
+PIWL2_ONCMY/749-1040   ............................................................................................l-VVCIMTG..NRDDL..YSAIKKL.CC...VQ..S..PVPSQAINV.R..T.ISQPQK................LRSVAQKILL.......QMNCK..........LGGE.-.....LWT.V....NVP.L-........-......-..-....-...-...-.....K.H..L.M..................................VIGVDVHHDTSKK...............--NR..SVMGFVASLN...S...L.L.T...R....W.Y.....S.RV..T...FQ.....M..........P.......N....E...EI......ING....FRV.............................. [...]
+PIWL2_DANRE/741-1032   ............................................................................................l-VVCIMTG..NRDDL..YSAIKKL.CC...IQ..S..PVPSQAINV.R..T.ISQPQK................LRSVAQKILL.......QINCK..........LGGE.-.....LWT.V....NVP.LK........Y......-..-....-...-...-.....-.-..L.M..................................VIGVDVHHDTSKK...............--SR..SVMGFVASLN...S...M.L.T...K....W.Y.....S.RV..T...FQ.....M..........P.......N....E...EI......ING....FRV.............................. [...]
+A5PL40_DANRE/7-278     .........................................................................................ssra--------..-----..-------.--...--..F..TLNSQAINV.R..T.ISQPQK................LRSVAQKILL.......QINCK..........LGGE.-.....LWT.V....NVP.LK........Y......-..-....-...-...-.....-.-..L.M..................................VIGVDVHHDTSKK...............--SR..SVMGFVASLN...S...M.L.T...K....W.Y.....S.RV..T...FQ.....M..........P.......N....E...EI......ING....FRV.............................. [...]
+Q4RPK4_TETNG/383-660   ................................................................................plvlnafkyicmf--------..-----..-------.--...--..-..--CPQAINV.R..T.ISNQAK................LKSIAQKILL.......QINCK..........LGGE.-.....LWT.V....SIP.M-........-......-..-....-...-...-.....K.N..F.M..................................VVGVDVYHDTKKK...............--YH..SVMGFVASVN...S...T.L.T...R....W.Y.....S.RV..I...FQ.....T..........P.......N....E...EL......IGG....FRI.............................. [...]
+B9U224_ORYLA/729-1020  ............................................................................................l-VVCVIEG..NRDDL..YSAIKKL.CC...LK..C..PVPSQVINV.R..T.ISQQQK................LRGIAQKILL.......QLNSK..........LGGE.-.....LWT.V....GIP.L-........-......-..-....-...-...-.....K.S..L.M..................................VVGVDVHHDTSKK...............--HQ..SVMGFVASVN...S...S.L.T...H....W.Y.....S.RV..T...FQ.....T..........P.......T....E...EL......ISG....FRA.............................. [...]
+B4JP35_DROGR/334-622   ...........................................................................................qi-VVCICSS..RRDDR..YSAIKKI.CC...AE..R..PVASQVINS.R..T.LSNETR................NRSIVQKIIL.......QMNCK..........MGGS.-.....LWT.V....KIP.F-........-......-..-....-...-...-.....K.N..V.M..................................ICGIDSYHDPSQK...............--SH..SVAAFVASLN...S...T.Y.T...H....W.F.....S.KA..V...IQ.....T..........K.......K....E...EL......VNG....LTS.............................. [...]
+B7FNN2_DROME/566-845   ............................................................................................m-VVCICHN..RRDDR..YAAIKKI.CC...SE..I..PIPSQVINA.K..T.LQNDLK................IRSVVQKIVL.......QMNCK..........LGGS.-.....LWT.V....KIP.F-........-......-..-....-...-...-.....K.N..V.M..................................ICGIDSYHDPSNR...............--GN..SVAAFVASIN...S...S.Y.S...Q....W.Y.....S.KA..V...VQ.....T..........K.......R....E...EI......VNG....LSA.............................. [...]
+A7YFW6_DROME/299-494   ............................................................................................m-VVCICHN..RRDDR..YAAIKKI.CC...SE..I..PIPSQVINA.K..T.LQNDLK................IRSVVQKIVL.......QMNCK..........LGGS.-.....LWT.V....KIP.F-........-......-..-....-...-...-.....K.N..V.M..................................ICGIDSYHDPSNR...............--GN..SVAAFVASIN...S...S.Y.S...Q....W.Y.....S.KA..V...VQ.....T..........K.......R....E...EI......VNG....LSA.............................. [...]
+B6IDV1_DROME/574-861   ............................................................................................m-VVCICHN..RRDDR..YAAIKKI.CC...SE..I..PIPSQVINA.K..T.LQNDLK................IRSVVQKIVL.......QMNCK..........LGGS.-.....LWT.V....KIP.F-........-......-..-....-...-...-.....K.N..V.M..................................ICGIDSYHDPSNR...............--GN..SVAAFVASIN...S...S.Y.S...Q....W.Y.....S.KA..V...VQ.....T..........K.......R....E...EI......VNG....LSA.............................. [...]
+Q7PLK0_DROME/566-853   ............................................................................................m-VVCICHN..RRDDR..YAAIKKI.CC...SE..I..PIPSQVINA.K..T.LQNDLK................IRSVVQKIVL.......QMNCK..........LGGS.-.....LWT.V....KIP.F-........-......-..-....-...-...-.....K.N..V.M..................................ICGIDSYHDPSNR...............--GN..SVAAFVASIN...S...S.Y.S...Q....W.Y.....S.KA..V...VQ.....T..........K.......R....E...EI......VNG....LSA.............................. [...]
+A4GND8_DROME/566-853   ............................................................................................m-VVCICHN..RRDDR..YAAIKKI.CC...SE..I..PIPSQVINA.K..T.LQNDLK................IRSVVQKIVL.......QMNCK..........LGGS.-.....LWT.V....KIP.F-........-......-..-....-...-...-.....K.N..V.M..................................ICGIDSYHDPSNR...............--GN..SVAAFVASIN...S...S.Y.S...Q....W.Y.....S.KA..V...VQ.....T..........K.......R....E...EI......VNG....LSA.............................. [...]
+A4GUJ7_DROME/566-848   ............................................................................................m-VVCICHN..RRDDR..YAAIKKI.CC...SE..I..PIPSQVINA.K..T.LQNDLK................IRSVVQKIVL.......QMNCK..........LGGS.-.....LWT.V....KIP.F-........-......-..-....-...-...-.....K.N..V.M..................................ICGIDSYHDPSNR...............--GN..SVAAFVASIN...S...S.Y.S...Q....W.Y.....S.KA..V...VQ.....T..........K.......R....E...EI......VNG....LSA.............................. [...]
+Q7PWT1_ANOGA/618-916   ............................................................................................q-IVVIICP.tSRDDR..YAAIKRI.LC...TE..V..PIPSQVINA.R..T.LANEKR................NRSVVLKVLL.......QMNCK..........LGGS.-.....LWG.V....RVP.I-........-......-..-....-...-...-.....K.R..T.M..................................ICGIDTYHEAKQR...............--SN..SVAAFVGSLD...A...A.F.T...H....W.Y.....S.RA..T...VQ.....E..........R.......K....E...EI......LNG....LCV.............................. [...]
+B0WE96_CULQU/634-782   ............................................................................................q-IVVIICP.tSRDDR..YAAIKRI.CC...SE..I..PVPSQVINA.R..T.LANEAK................NRAIVQKILL.......QMNCK..........LGGT.-.....LWS.I....KIP.F-........-......-..-....-...-...-.....Q.N..V.M..................................IAGIDTYHDPKQK...............--SN..SVSAFVASLN...G...E.Y.T...R....W.Y.....S.RA..C...IQ.....S..........K.......K....E...EF......MNG....LCA.............................. [...]
+Q170R5_AEDAE/637-930   ............................................................................................q-IVVIICP.tSRDDR..YAAIKRI.CC...SE..I..PVPSQVINA.R..T.LSNEAK................NRAIVQKIIL.......QMNCK..........LGGT.-.....LWS.I....RIP.F-........-......-..-....-...-...-.....D.N..V.M..................................IAGIDTYHDPKQK...............--SN..SVSAFVASLN...G...D.Y.T...R....W.Y.....S.RA..C...IQ.....S..........K.......K....E...EF......ING....LCA.............................. [...]
+C9E0T2_APIME/1-294     ............................................................................................m--VIVFPT..NRTDR..YSAVKRV.CC...VE..M..PVPSQVIMS.R..T.ISRGDK................LKSITEKIAL.......QINCK..........LGGA.-.....LWA.L....AIP.M-........-......-..-....-...-...-.....D.H..C.M..................................ICGIDVYHAGVGQ...............SMKG..SVAGFVASLD...K...L.L.T...S....W.H.....S.KI..C...LQ.....G..........K.......H....Q...EL......VDI....LQI.............................. [...]
+C9E0S9_APIME/551-753   ............................................................................................l-MVIVFPT..NRTDR..YSAVKRV.CC...VE..M..PVPSQVIMS.R..T.ISRGDK................LKSITEKIAL.......QINCK..........LGGA.-.....LWA.L....AIP.M-........-......-..-....-...-...-.....D.H..C.M..................................ICGIDVYHAGVGQ...............SMKG..SVAGFVASLD...K...L.L.T...S....W.H.....S.KI..C...LQ.....G..........K.......H....Q...EL......VDI....LQI.............................. [...]
+C9E0S8_APIME/604-898   ............................................................................................l-MVIVFPT..NRTDR..YSAVKRV.CC...VE..M..PAPSQVIMS.R..T.ISRGDK................LKSITEKIAL.......QINCK..........LGGA.-.....LWA.L....AIP.M-........-......-..-....-...-...-.....D.H..C.M..................................ICGIDVYHAGVGQ...............SMKG..SVAGFVASLD...K...L.L.T...S....W.H.....S.KI..C...LQ.....G..........K.......H....Q...EL......VDI....LQI.............................. [...]
+C3ZKW1_BRAFL/534-739   ..........................................................................................cqk--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...-Q.....G..........Q.......G....E...EV......IPS....IGK.............................. [...]
+B9ZU54_9TURB/593-893   ............................................................................................i-VVCLLPT..KVEQK..YNAIKRQ.CC...IS..T..PVASQVIIS.R..T.LSNDSK................RKRIVQNIGL.......QMVAK..........MGGE.-.....LWG.V....QLP.TV........Q......Q..V....-...-...-.....G.R..L.M..................................VVGIDVYHEAKKR...............--SE..SWLGVCCSLN...Q...H.A.T...R....Y.K.....S.SV..H...KQ.....T..........P.......G....V...EL......GGF....YNV.............................. [...]
+PIWI1_SCHMD/493-790    ...........................................................................................ma--LVFIPD..---DK..VYAKVKN.FT...MS..T..GLLTQCVTQ.R..N.GSNRDDr..............rRKTVADKSVM.......QMFSK..........LGYD.-.....PWG.I....NLK.M-........-......-..-....-...-...-.....A.P..T.M..................................IVGLDTFHSKTGK...............---R..SVQASVFSIS...A...K.F.S...Q....Y.I.....S.FV..N...SS.....K..........G.......K....N...EF......HEN....LGK.............................. [...]
+D2Z0D8_DUGJA/494-791   ...........................................................................................la--LVFIPD..---DK..IYAKVKN.FT...MS..T..GLLTQCVTQ.R..N.GSNRDDr..............rRKTVADKSVM.......QMFSK..........LGYD.-.....PWG.I....NLK.M-........-......-..-....-...-...-.....A.P..T.M..................................IVGLDTFHSKTGK...............---R..SVQASVFSIS...S...K.F.S...Q....Y.I.....S.FV..N...SS.....K..........G.......K....N...EF......HEN....LGK.............................. [...]
+PIWIL_DUGJA/502-800    ..........................................................................................ial---VFVPD..---DR..VYAKVKS.FT...IS..T..GLLTQCVTT.R..N.GTNRNDk..............rRQVVSSKTVM.......QIFSK..........FGYD.-.....PWT.I....DIK.M-........-......-..-....-...-...-.....R.P..T.M..................................IVGMDTFHNKGSK...............---K..SIHASVFSIN...S...T.F.S...Q....Y.M.....S.FA..N...SP.....K..........G.......K....Q...EF......HDT....LSG.............................. [...]
+PIWI2_SCHMD/516-815    ..........................................................................................mal---VFVPD..---DR..VYAKVKS.FT...MS..T..GLLTQCVTT.R..N.GTNRNDk..............rRKVVSSKTVM.......QIFAK..........FGYD.-.....PWT.V....EIK.L-........-......-..-....-...-...-.....R.P..T.M..................................IVGMDTYHNKSSK...............---K..SIQASVFSIN...S...T.F.T...Q....Y.M.....S.FV..V...NS.....P..........K.......G....R...QE......FHE...tLGK.............................. [...]
+D2Z0D9_DUGJA/512-810   ..........................................................................................mal---VFVPD..---DR..VYAKVKS.FT...MS..T..GLLTQCVTT.R..N.GTNRNDk..............rRKVVSNKTVM.......QIFAK..........FGYD.-.....PWT.V....EIK.L-........-......-..-....-...-...-.....R.P..T.M..................................IVGMDTYHNKSSK...............---K..SIQASVFSIN...S...T.F.T...Q....Y.M.....S.FV..N...QP.....K..........G.......R....Q...EF......HET....LGK.............................. [...]
+D2V2M6_NAEGR/28-326    ............................................................................................s-FILMITK.nKTSTE..YHTLKEK.TI...VD..M..GIPSQCITE.R..N.IAISEK................KSSILKNITI.......EMNAK..........LGGI.-.....PWM.T....SIP.M-........-......-..-....-...-...K.....P.H..T.M..................................IVGMDVNHSGEVY..............hRSKS..SLVGFVSSYD...S...K.V.C...A....Y.Y.....S.QI..Q...VQ.....K..........P.......G....V...EL......VEN....IKN.............................. [...]
+D2VMG4_NAEGR/577-883   ...........................................................................................fa--LVVLFN..DQKQR..YSRVKEV.LC...NQ..V..GIISQCVKL.S..T.ITNEKG................LASKATKVIV.......QICSK..........MGGA.-.....PWT.V....P--.L-........-......A..F....P...N...K.....E.P..T.M..................................IIGMDVYHSGEIY..............kRKKA..SVAGFVASID...A...K.I.S...T....Y.F.....T.KC..I...IQ.....E..........A.......G....K...EI......VDE....LEE.............................. [...]
+A4HBN9_LEIBR/872-1190  .......................................................................................svilvt-------N..EMGTR..ATRWLKV.EC...MC..R..GVHFIAIPA.S..S.NPKRLNl..............vGAQLRQRIAT.......QFE--..........---L.N....pLRG.I....DLR.GE........L......P..V....L...G...R.....R.H..V.L..................................ILGVDSCHTNTH-...............----..SVGAIVGILS..tP...A.G.N...S....L.L.....S.FF..W...RH.....D..........A.......R....G...RE......AQH....VAK.............................. [...]
+A4HZ40_LEIIN/904-1226  ........................................................................................svili------TN..EIDTR..ATRWLKV.EC...MC..R..GAHFIAIPA.S..S.SPKK--................LNLAGAQLRM.......RIASQ..........FELN.P.....LRG.V....DLR.GE........L......P..V....L...G...H.....R.H..V.L..................................VIGVDSCHTNTHS...............--VG..TIVGILST--...P...T.E.S...K....L.L.....S.YF..W...RH.....D..........A.......R....G...RE......TQH....VAK.............................. [...]
+Q4QCH4_LEIMA/899-1221  ..........................................................................................svi----LITN..EMDTR..ATRWLKV.EC...MC..R..GAHFIAIPA.S..S.NPKK--................LNLVGAQLRM.......RIATQ..........FELN.P.....LRG.V....DLR.GE........L......P..V....L...G...H.....R.H..V.L..................................VIGVDSCHTNTHS...............--VG..TIVGILST--...P...T.E.S...K....L.L.....S.YF..W...RH.....D..........A.......R....G...RE......AQH....VAK.............................. [...]
+Q4DYG9_TRYCR/791-1083  ...........................................................................................ta--AVIISA..ERETR..ASRWILA.EC...LT..R..GILGMFIPP.A..T.TPKR--................QNLLCENVRI.......QLRTK..........FETD.P.....AHG.V....NLP.RE........V......P..A....L...A...Q.....R.R..V.L..................................VVGVDACHTTTFS...............--TG..SVVGILCAPE..rN...H.L.L...P....F.F.....W.KH..E...MR.....G..........Q.......E....A...DR......VTE....---.............................. [...]
+Q6T6J9_9TRYP/784-1082  ..........................................................................................taa---VIVTN..ERETR..LVRWMQA.EC...LT..R..GILPLFVPP.C..A.SPKQ--................QQLRCENIRL.......RLRTV..........FATD.P.....LRG.V....DLQ.RE........V......P..A....V...A...Q.....R.R..V.L..................................LVGVDSCHTPTVS...............--TG..SVVGILCTAE..rN...H.L.L...P....F.F.....W.KH..E...RR.....G..........Q.......E....V...EL......VSE...hFEV.............................. [...]
+D0A1P1_TRYBG/784-1082  ..........................................................................................taa---VIVTN..ERETR..LVRWMQA.EC...LT..R..GILPLFVPP.C..A.SPKQ--................QQLRCENIRL.......RLRTV..........FATD.P.....LRG.V....DLQ.RE........V......P..A....V...A...Q.....R.R..V.L..................................LVGVDSCHTPTVS...............--TG..SVVGILCTAE..rN...H.L.L...P....F.F.....W.KH..E...RR.....G..........Q.......E....V...EL......VSE...hFEV.............................. [...]
+Q38C22_9TRYP/783-1081  ..........................................................................................taa---VIVTN..ERETR..LVRWMQA.EC...LT..R..GILPLFVPP.C..A.SPKQ--................QQLRCENIRL.......RLRTV..........FATD.P.....LRG.V....DLQ.RE........V......P..A....V...A...Q.....R.R..V.L..................................LVGVDSCHTPTVS...............--TG..SVVGILCTAE..rN...H.L.L...P....F.F.....W.KH..E...RR.....G..........Q.......E....V...EL......VSE...hFEV.............................. [...]
+A4HH63_LEIBR/16-225    ...............................................................................sdaasshmssttlt--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..V...RR.....Q..........N.......A....N...EV......LNN...rFPD.............................. [...]
+A4H6I4_LEIBR/673-882   ...............................................................................sdaasshmssttlt--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..V...RR.....Q..........N.......A....N...EV......LNN...rFPD.............................. [...]
+Q6T6K0_9TRYP/549-877   ...........................................................................................vt----FLRR..PEREP..YAEWKAS.WS...GG..-..GALSQVVAK.D..L.TGGR--................ESSIVMAVAQ.......QICAK..........TGRL.Nw...tLDV.N....QVC.PK........L......-..A....K...S...D.....P.SggI.L..................................IIAADVGRDQRSVate........ssavRQEF..FAVAFVSFYVk.gT...Q.W.S...T....Y.C.....N.HY..Q...VN.....G..........R.......K....E...TL......YAD....GSDcdttsmsegg.................... [...]
+D0A4M3_TRYBG/571-899   ...........................................................................................vt----FLRR..PEREP..YAEWKAS.WS...GG..-..GALSQVVAK.D..L.TGGR--................ESSIVMAVAQ.......QICAK..........TGRL.Nw...tLDV.N....QVC.PK........L......A..K....A...D...P.....SgG..I.L..................................IIAADVGRDQRSVate........ssavRQEF..FAVAFVSFYVk.gT...Q.W.S...T....Y.C.....N.HY..Q...VN.....G..........R.......K....E...TL......YAD....GSDcdttsmsegg.................... [...]
+Q389P5_9TRYP/560-888   ...........................................................................................vt----FLRR..PEREP..YAEWKAS.WS...GG..-..GALSQVVAK.D..L.TGGRE-................-LSIVMAVAQ.......QICAK..........TGRL.Nw...tLDV.N....QVC.PK........L......A..K....A...D...P.....SgG..I.L..................................IIAADVGRDQRSVate........ssavRQEF..FAVAFVSFYVk.gT...Q.W.S...T....Y.C.....N.HY..Q...VN.....G..........R.......K....E...TL......YAD....GSDcdttsmsegg.................... [...]
+Q86QW7_GIALA/412-736   ............................................................................................l-VVIVIPG..PKQDRgdLYKGIKQ.FY...TH..M..GIVTQCLLA.P..K.SSQNELq.............wyDQAVLRSVCQ.......QIYAK..........AGGA.-.....VWA.P....VLP.PQ........N......-..-....V...Y...S.....K.S..T.M..................................LCALDISRPKKTVgr...........paEVPI..STAGFISTYD..gS...F.E.Y...I....Y.S.....Q.KK..T...LV.....P..........N.......R....L...NH......GGE....LQQqtl........................... [...]
+A8BCK6_GIALA/555-879   ............................................................................................l-VVIVIPG..PKQDRgdLYKGIKQ.FY...TH..M..GIVTQCLLA.P..K.SSQNELq.............wyDQAVLRSVCQ.......QIYAK..........AGGA.-.....VWA.P....VLP.PQ........N......-..-....V...Y...S.....K.S..T.M..................................LCALDISRPKKTVgr...........paEVPI..STAGFISTYD..gS...F.E.Y...I....Y.S.....Q.KK..T...LV.....P..........N.......R....L...NH......GGE....LQQqtl........................... [...]
+C6LTG5_GIALA/555-877   ............................................................................................l-VVVVIPG..PKQYSggLYKEVKR.FY...TD..K..GIVTQCLLT.P..R.LSRDGPe.............wyDQAILNGLCQ.......QIYAK..........AGGA.-.....VWA.P....ALP.KD........N......A..Y....-...-...S.....T.S..T.M..................................LCALDVSRPKKTVgr...........ptEVPA..STAGFISTY-...E...G.S.F...E....Y.I.....Y.SQkkN...LMpn.rlN..........Q.......G....G...EV......QQQt..lMKT.............................. [...]
+A9T108_PHYPA/1-169     ............................................................................................k--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+C6XVE0_PEDHD/320-460   .....................................................................................viitnskk-------E..ESDDK..LYFSLKH.RF...TN..E..GIPCQVVTK.D..L.IINDNA................LKFSLGNIAL.......QMFAK..........AGGI.-.....PWK.M....K--.PA........T......-..-....-...-...-.....T.E..Y.L..................................IIGIGQSYNIEIT..............eD---..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+A8Q5F0_BRUMA/545-849   .............................................................................itkdrydpvhaisnrg--------..-----..-------.--...--..-..---------.-..-.------................AEMTLDNLVM.......KMNLK..........LGGI.Nh...aLTS.S....AAFlSK........N......R..L....T...N...N.....V.M..D.Mewlr..........................hsrmFFGLDMSHAAPQSlyer......qaqvpPSEP..TIVAMTFSC-...G...E.P.F...A....M.Q.....G.EY..W...MQ.....E..........P.......R....L...HV......VKF....LKE.............................. [...]
+Q21691_CAEEL/673-1001  .............................................................................................TIVFGIIA..EKRPD..MHDILKY.FE...EK..L..GQQTIQISS.E..T.ADKFMRd.............hgGKQTIDNVIR.......KLNPK..........CGGT.Nf...lIDV.P....ESV.GH........R......V..V....C...N...N.....S.A..E.Mrakl.........................yaktqFIGFEMSHTGARTrfdi......qkvmfDGDP..TVVGVAYSL-...K...H.S.A...Q....L.G.....G.FS..Y...FQ.....E..........S.......R....L...HK......LTN....LQE.............................. [...]
+A8WNJ6_CAEBR/660-987   ............................................................................................s-LVIGIAL..EKMPH..IHDVLKY.YE...EK..I..GQQTLQLCA.E..T.VRKMGQg.............ggNKTTVDNVIR.......KLNAK..........CGGT.Nf...yVEV.P....NAV.KN........R......Q..V....C...I...N.....P.E..E.Mrkkl.........................ykytqFIGFELSHTGARSkfdk......qkqtvEIDP..TIVGVSYTL-...K...H.A.T...Q....L.G.....G.FS..Y...FQ.....D..........S.......R....V...HK......LTR....VKE.............................. [...]
+A8WS47_CAEBR/435-755   ......................................................................................trverss--------..-----..-NHILKY.YE...EK..I..GQQTLQLCA.E..T.VMKMARc.............ggNKTTVDNVLR.......KLNLK..........CGGT.Nf...yVGV.P....DAV.NN........R......Q..V....C...I...N.....P.E..E.Mrkkl.........................ykntqFIGFELSHTGAQSkfdk......lkedaEIDP..TIVGVAYSL-...K...H.A.T...Q....L.G.....G.FS..Y...FQ.....D..........G.......R....V...HK......LTH....VQE.............................. [...]
+A8WQA0_CAEBR/671-998   ............................................................................................d-IFVGIAR..DKKPD..VHDIMKY.YE...ES..V..GMQTIQLCK.Q..T.VDKMMNp.............qgGRQTIDNVMR.......KFNLK..........CGGT.Nf...yVDI.P....SNI.RG........R......S..I....C...S...N.....T.E..T.Lhkkl.........................lekvqFIGFEISHGAARTlydr......srnqmDGEP..SIVGVSYSL-...K...Q.S.T...Q....L.G.....G.FS..Y...MQ.....T..........Q.......R....E...YK......IQK....LDD.............................. [...]
+Q9TXN7_CAEEL/609-935   ............................................................................................n-ILVAIAK..EKKPD..VHDVLKY.YE...AS..V..GLQTIQVCK.Q..T.VDMMLSs..............gGRQTADNVMR.......KFNLK..........CGGT.Nf...fVQI.P....RSV.NG........R......T..V....C...A...D.....A.H..L.Lnekl.........................fervqFIGFDISHGASRTlfdr......stgkmDGEV..SIVGVSYSL-...S...H.S.T...H....-.L.....G.GF..A...YM.....Q..........T.......Q....K...EY......KLQ...kLDE.............................. [...]
+C8JQR1_CAEEL/591-918   ............................................................................................d-ILFAITR..EKKPD..VHDILKY.YE...ES..I..GLQTIQVCQ.Q..T.VDKMMGg.............ggGRQTIDNVMR.......KFNLK..........CGGT.Nf...fDEI.P....SSV.RG........R......A..V....C...S...N.....S.E..T.Lskkl.........................fehvqFIGFEISHGAARTlfdr......srsqlDGEP..SVVGVSYSLT...-...-.N.S...T....Q.L.....G.GF..T...YL.....Q..........T.......Q....K...EY......KLQ...kLGE.............................. [...]
+YQ53_CAEEL/650-977     ............................................................................................d-ILVGIAR..EKKPD..VHDILKY.FE...ES..I..GLQTIQLCQ.Q..T.VDKMMGg.............qgGRQTIDNVMR.......KFNLK..........CGGT.Nf...fVEI.P....NAV.RG........K......A..V....C...S...N.....N.E..T.Lrkkl.........................lehvqFIGFEISHGASRTlfdr......srsqmDGEP..SVVGVSYSLT...-...-.N.S...T....Q.L.....G.GF..T...YL.....Q..........T.......Q....K...EY......KLQ...kLDE.............................. [...]
+Q9N3L7_CAEEL/585-911   ............................................................................................s-IIIGITE..EKKPE..VHDVLKY.FE...AA..V..GLQTMQIHS.K..T.AGFIIS...............gNGQTAGNVIK.......KLNLK..........CGGI.Ny...iVEV.P....QSF.NR........T......V..V....C...S...N.....N.S..F.Vqkkl.........................fdgtqFIGFEMTHGAARTlfdk......sngtfDGEP..TIVGCAYSL-...Q...K.A.T...D....L.G.....G.FN..W...FQ.....E..........Q.......N....E...YR......LKN....LGT.............................. [...]
+A8XZY0_CAEBR/665-992   ............................................................................................s-IVIGITS..EKKPD..VHDVMKY.FE...AG..I..GLQTLQIHD.R..T.AECFMRe.............qgGAQTVDNVMR.......KLNLK..........LGGI.Nf...nVDP.V....NMY.EH........K......V..I....C...N...N.....I.G..G.Mkkkl.........................fekvqFVGFEMTHGSSRTlydk......aqgqfDGEP..TIVGCGYSL-...S...S.P.T...E....L.G.....G.YN..F...LQ.....E..........R.......N....E...YK......LKN....LDS.............................. [...]
+Q27GU1_CAEEL/511-833   ............................................................................................p-FVLFISD..-DVPN..IHECLKF.EE...RM..S..DIPTQHVLL.K..N.VKKMRDniekks....qggrraYDLTLDNIVM.......KANIK..........CGGL.N.....YT-.A....DIP.RD........L......A..C....W...N...E.....V.S..T.F..................................VIGMDVAHPDRNAa.............rEGNP..STVGLSCNSA...E...N.P.Y...S....F.I.....G.DF..L...YT.....D..........P.......R....R...EA......IQDe..iLRK.............................. [...]
+Q19645_CAEEL/674-996   ............................................................................................p-FVLFISD..-DVPN..IHECLKF.EE...RM..S..DIPTQHVLL.K..N.VKKMRDniekks....qggrraYDLTLDNIVM.......KANIK..........CGGL.N.....YT-.A....DIP.RD........L......A..C....W...N...E.....V.S..T.F..................................VIGMDVAHPDRNAa.............rEGNP..STVGLSCNSA...E...N.P.Y...S....F.I.....G.DF..L...YT.....D..........P.......R....R...EA......IQDe..iLRK.............................. [...]
+A8XRG0_CAEBR/648-970   ............................................................................................p-FVLFVSD..-DVPN..IHECLKF.EE...RM..S..DIPTQHILL.K..N.IRKIRDniekks....qggrraYDLTLDNIVM.......KANVK..........CGGL.N.....YT-.A....DIP.RD........I......G..S....W...R...E.....V.S..T.F..................................VMGMDVAHPDKMAt.............rEGSP..STVGLSCNSA...E...S.P.Y...S....F.V.....G.DF..L...YT.....D..........P.......R....R...EA......IQDe..iLRK.............................. [...]
+A8XFJ6_CAEBR/595-895   ...........................................................................................ky--VFIITD..DNITH..LHRE--F.NQ...TR..L..AVYNIFREM.S..K.ATSVCKd..............gKRLTLENVIN.......KTNIK..........LGGL.N.....YTV.S....DTK.RS........M......-..-....-...-...T.....D.D..Q.L..................................IIGVGISAPPPGTkfll.......egkgHLNP..QIVGFASNA-...V...S.N.H...E....F.V.....G.DF..V...LA.....S..........V.......G....Q...DT......MSS....IED.............................. [...]
+Q23415_CAEEL/40-350    ............................................................................................k-FAFVITD..DSITH..LHKKYKA.LE...QK..S..MMVIQDMKI.S..K.ANSVVKd..............gKRLTLENVIN.......KTNMK..........LGGL.N.....YTV.S....DAK.KS........M......-..-....-...-...T.....D.E..Q.L..................................IIGVGVSAPPAGTkymm.......dnkgHLNP..QIIGFASNA-...V...A.N.H...E....F.V.....G.DF..V...LA.....P..........S.......G....Q...DT......MAS....IED.............................. [...]
+GCC7_CAEEL/596-906     ...........................................................................................ky--VLMITD..DAIVH..LHKQYKA.LE...QR..T..MMIVQDMKI.S..K.ANAVVKd..............gKRLTLENIIN.......KTNVK..........LGGL.N.....YTV.S....DAK.KS........M......-..-....-...-...T.....D.E..Q.L..................................IIGVGVSAPPAGTkymm.......dnkgHLNP..QIIGFASNA-...V...A.N.H...E....F.V.....G.DF..V...LA.....P..........S.......G....Q...DT......MAS....IED.............................. [...]
+P91085_CAEEL/543-853   ...........................................................................................ky--VLVITD..DAITH..LHKRYKA.LE...QK..S..RMTIQDMKI.S..K.ANAVVKd..............gKRLTLENIIN.......KTNLK..........LGGL.N.....YTV.S....DSK.KS........M......-..-....-...-...T.....D.E..Q.L..................................IIGVGVSAPPAGTkfmm.......dnkgHLNP..QIIGFASNA-...V...A.N.H...E....F.V.....G.DF..V...LA.....P..........S.......T....Q...DT......MAS....IED.............................. [...]
+A8WJ71_CAEBR/596-953   ............................................................................................e-FVFIITD..DTITN..LHQKYKM.IE...SL..Q..SIVVQDMKM.S..K.ALSVIDs..............gKRLTLENVIN.......KTNVK..........LGGS.N.....YIF.T....DTK.KY........L......-..-....-...-...-.....D.R..V.L..................................VIGIGISQPPPGTkfiv.......egkgFLNP..QIIGFAYNG-...K...Q.K.Q...E....F.A.....G.DF..V...LC.....P..........A.......G....Q...DV......SGF...sASKivisfq........................ [...]
+A8X957_CAEBR/565-899   ............................................................................................e-FVFIITD..DAITN..LHQKYKM.IE...SL..Q..SIVIQDMKM.T..K.ALSVIDs..............gKRLTLENVIN.......KTNVK..........LGGS.N.....YIF.T....DTK.KY........L......-..-....-...-...-.....D.R..V.L..................................VIGIGISQPPPVTkfiv.......egkgFLSP..QIISFSYNG-...K...Q.K.Q...E....F.A.....G.DF..V...LC.....P..........A.......G....Q...DV......NGF...sASKliislq........................ [...]
+O62275_CAEEL/594-924   .............................................................................................TFVFIITD..DSITT..LHQRYKM.IE...KD..T..KMIVQDMKL.S..K.ALSVINa..............gKRLTLENVIN.......KTNVK..........LGGS.N.....YVF.V....DAK.KQ........L......-..-....-...-...-.....D.S..H.L..................................IIGVGISAPPAGTkyam.......enkgVLNP..NVIGYAYNA-...Q...H.N.Q...E....F.S.....G.DF..V...LN.....S..........A.......S....Q...DT......LAP....IED.............................. [...]
+Q9N585_CAEEL/604-934   .............................................................................................TFVLCITE..DNITC..LHQKYKF.IE...HH..T..QMIVQDMKL.S..K.ALSVVNa..............sKKLTLENVIN.......KTNVK..........LGGS.N.....YVY.L....DTK.NF........L......-..-....-...-...-.....Q.E..H.L..................................IIGVGISSPPPGTkyim.......esrgILNP..TIVGFAYNG-...N...G.K.Q...E....F.S.....G.DF..V...LN.....A..........A.......G....Q...ET......IAP....IED.............................. [...]
+A8XEJ5_CAEBR/552-849   ............................................................................................q-LLFFVVK..-SRYN..YHQNIKC.LE...QK..Y..DLLTQEVRA.E..T.AEKVFR................QPQTRLNIVN.......KTNMK..........LGGL.N.....YQI.G....S--.--........-......E..T....F...R...R.....P.D..Y.L..................................IVGFETSQRSGGN...............PDYP..ISVGYAANML...D...H.H.Q...K....F.A.....G.GY..V...YV.....K..........R.......S....N...DV......FGP...iIKD.............................. [...]
+Q86S33_CAEEL/548-852   ............................................................................................q-LLFFVVK..-SRYN..YHQQIKA.LE...QK..Y..DVLTQEIRA.E..T.AEKVFR................QPQTRLNIIN.......KTNMK..........LGGL.N.....YAI.G....S--.--........-......E..A....F...N...K.....P.N..R.L..................................IVGFVTSQRVGGN...............PDYP..ISVGFAANML...K...H.H.Q...K....F.A.....G.GY..V...YV.....H..........R.......D....R...DV......FGS...iIKD.............................. [...]
+Q9GZG4_CAEEL/548-852   ............................................................................................q-LLFFVVK..-SRYN..YHQQIKA.LE...QK..Y..DVLTQEIRA.E..T.AEKVFR................QPQTRLNIIN.......KTNMK..........LGGL.N.....YAI.G....S--.--........-......E..A....F...N...K.....P.N..R.L..................................IVGFVTSQRVGGN...............PDYP..ISVGFAANML...K...H.H.Q...K....F.A.....G.GY..V...YV.....H..........R.......D....R...DV......FGS...iIKD.............................. [...]
+Q86NJ8_CAEEL/548-852   ............................................................................................q-LLFFVVK..-SRYN..YHQQIKA.LE...QK..Y..DVLTQEIRA.E..T.AEKVFR................QPQTRLNIIN.......KTNMK..........LGGL.N.....YAI.G....S--.--........-......E..A....F...N...K.....P.N..R.L..................................IVGFVTSQRVGGN...............PDYP..ISVGFAANML...K...H.H.Q...K....F.A.....G.GY..V...YV.....H..........R.......D....R...DV......FGS...iIKD.............................. [...]
+B3KLZ7_CAEEL/358-662   ............................................................................................q-LLFFVVK..-SRYN..YHQQIKA.LE...QK..Y..DVLTQEIRA.E..T.AEKVFR................QPQTRLNIIN.......KTNMK..........LGGL.N.....YAI.G....S--.--........-......E..A....F...N...K.....P.N..R.L..................................IVGFVTSQRVGGN...............PDYP..ISVGFAANML...K...H.H.Q...K....F.A.....G.GY..V...YV.....H..........R.......D....R...DV......FGS...iIKD.............................. [...]
+O02095_CAEEL/574-878   ............................................................................................q-LLFFVVK..-SRYN..YHQQIKA.LE...QK..Y..DVLTQEIRA.E..T.AEKVFR................QPQTRLNIIN.......KTNMK..........LGGL.N.....YAI.G....S--.--........-......E..A....F...N...K.....P.N..R.L..................................IVGFVTSQRVGGN...............PDYP..ISVGFAANML...K...H.H.Q...K....F.A.....G.GY..V...YV.....H..........R.......D....R...DV......FGS...iIKD.............................. [...]
+A8X254_CAEBR/555-701   ..........................................................................................qll---MFVFR..-RSVP..LHAQIKS.LE...QK..F..DILTQEITL.E..T.AEKIFR................QPQTLQNIVN.......KTNMK..........LGGL.N.....YRI.D....STV.L-........-......-..-....-...-...N.....P.N..I.L..................................FIGFETSSKGGAGdvg........iinlKFGP..VSIGFAANMM...Q...N.H.Q...Q....F.A.....G.GY..I...YA.....P..........Q.......A....R...DV......GKN...qYFQ.............................. [...]
+O16386_CAEEL/548-847   ............................................................................................q-LIMFITK..-SMNN..YHTEIKC.LE...QE..F..DLLTQDIRF.E..T.AVKLAQ................QQNTRKNIIY.......KTNMK..........LGGL.N.....YEL.R....S--.--........-......G..V....F...S...N.....S.K..R.L..................................IIGFETSQRGGLG...............-DAP..IAIGFAANMM...S...H.S.Q...Q....F.A.....G.GY..M...FV.....K..........K.......S....A...DN......YGP...vIPE.............................. [...]
+A8XUC0_CAEBR/563-774   ............................................................................................e-LLMFITK..-SNRE..YHKEIKV.LE...HE..F..DIRTQDIRF.E..T.ALKFER................QQNTRRNLVN.......KINVK..........LGGI.N.....YEV.E....S-P.T-........-......-..-....-...F...T.....K.D..R.I..................................IIGLETSQNSTMG...............-DGL..ICVGFSANMM...A...K.E.T...Q....F.C.....G.GY..M...FT.....Q..........R.......S....N...DI......YGS...vLKD.............................. [...]
+Q8MU01_HETGL/598-705   ....................................................................................lighakgfe--------..--GDD..VHVTIKA.FE...QQ..T..EIVTQAITF.D..V.LKEVLDk..............gSPLTVTNCIH.......KTNVK..........MGGL.N.....YAL.H....MDD.PS........V......A..Q....L...F...D.....G.Q..T.L..................................FLGFAMNFP----...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+A8QE08_BRUMA/711-1030  ..........................................................................................afv-----MYI..DSRDD..THDDLKL.YE...AL..H..RIVTQHIHG.S..R.AREAPK................KVATLENIVN.......KLNCK..........NFGQ.C....yGII.P....ESF.AT........N......K..W....I...S...T.....G.K..T.L..................................IIGYDVCHPEPQPrher......rmrmpPTQP..SVLGISFNGA...S...C.P.E...T....F.I.....G.DY..S...FQ.....E..........P.......R....K...EQ......VTSs..iLEE.............................. [...]
+A8WWH9_CAEBR/55-193    ..................................................................................hqymqnlrgah--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....T.N..T.L..................................FIAYTVNHGTVDPnt..........pgvYNNP..STAVFTFNGT...T...R.P.E...H....F.I.....D.YF..H...FQ.....K..........A.......S....I...QH......IDPq..vIQR.............................. [...]
+Q17600_CAEEL/19-157    ....................................................................................qymrslrgp--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...E.....T.N..T.L..................................FIGYAINHGTVDPst..........pgvYNNP..STVVFTFNGT...S...C.P.D...H....F.T.....E.YF..H...FQ.....K..........A.......T....I...PH......VDPa..lIRR.............................. [...]
+Q9XVF1_CAEEL/588-902   ...........................................................................................pi---VIYAD..HTSEG..THSTLKL.QE...RL..C..EVITQQVAL.D..K.SLKRTP................GKVTANNLLM.......KLNLK..........YGGV.Nh...kVRV.D....N-S.I-........S......H..L....W...G...D....tS.N..T.L..................................IISYDVCHSSGKVykk.........deiCDEP..SCVGFGFNGT...A...C.P.E...A....F.I.....G.DF..H...YQ.....L..........P.......R....H...EQ......VDEh..lLKL.............................. [...]
+A8WWI1_CAEBR/598-920   .........................................................................................yviy------VD..HSSEP..YHQLLKY.LE...RK..F..EVMTQHLNF.D..K.ALQIRSgs...........pllGKSTMTNILM.......KINLK..........NGGL.N....hKVL.P....DPS.ID........H......L..W....G...D...K.....S.N..T.L..................................IISYDVCHSSGKVykk.........getCFEP..SCVGFGYNGT...S...V.P.E...A....I.I.....G.DF..H...YQ.....L..........P.......R....N...EQ......VDP...sVLT.............................. [...]
+A8P7Z4_BRUMA/1-302     ............................................................................................m--------..-----..-----KY.IE...SQ..E..QILTQDLKA.S..T.ALGIVMk..............rQYQTLDNIVN.......KTNIK..........MGGL.N.....YSVhL....EEN.CD........-......R..W....L...G...R.....P.G..F.L..................................IVGLDIAHPSYSRvpn.........kdrNTVL..SVVGYSANIK...K...H.P.L...D....F.I.....G.GY..R...FA.....K..........A.......Q...mE...EL......MDD...aIQQ.............................. [...]
+A8X254_CAEBR/749-889   ...........................................................................................nl--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+A8X023_CAEBR/600-841   ..................................................................................hgilalqnael--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................------------G...............DSEV..TTVGYASNFM...D...H.P.Q...K....F.A.....G.SY..K...FV.....E..........R.......T....D...EA......SLD...sIIEllqymitl...................... [...]
+Q21495_CAEEL/61-336    ...................................................................................ffrdgqetsl--------..-----..-------.--...--..-..---------.N..N.QSFRNP................TDFAQTGFFV.......DAKQQ..........LGGL.N.....YVV.N....S--.--........-......E..T....W...N...D.....S.G..L.L..................................LIGLSTAPYLNSY..............sSENV..TTIGFVSNTM...D...H.P.Q...K....F.A.....G.GY..K...YV.....K..........S.......G....S...DV......FGQ...vMPE.............................. [...]
+A8X022_CAEBR/492-805   .....................................................................................qllpfvth--------..-SRYA..LRKDIEW.ME...HK..Y..RIPSLAIDL.K..I.ARKMVE................DKAVKLDLAD.......QVNKK..........TQGV.N.....YAI.Y....S--.--........-......D..V....F...R...N.....G.N..D.L..................................VISISFSEPSPKYakvrililfshmifcFQYP..FTVGFAANTS...N...H.P.L...V....F.T.....S.EF..L...YS.....N..........S.......D....N...MD......SGA...vLTE.............................. [...]
+Q8MU01_HETGL/745-963   .....................................................................................rvgsslpp--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............---P..SCIGWAATIG..kR...H.K.D...E....Y.I.....G.DF..V...YQ.....A..........P.......R....R...EE......KID...iIAS.............................. [...]
+B6K0R2_SCHJY/507-805   ............................................................................................y-LFFILDS..NSPEP..YATIKRL.CN...TK..F..GIPSQCALR.K..H.IEGA--................KPQYCANLGM.......KVNAK..........LGGV.N.....VHL.E....PKS.--........F......P..-....L...G...N.....I.P..T.I..................................ILGGDVYHPARGG...............-SGA..SIGSMVGSID...L...H.G.C...K....Y.T.....A.MS..R...AQ.....N..........R.......N....Q...EM......IQG....MKD.............................. [...]
+AGO1_SCHPO/500-798     ............................................................................................y-LFFILDK..NSPEP..YGSIKRV.CN...TM..L..GVPSQCAIS.K..H.ILQS--................KPQYCANLGM.......KINVK..........VGGI.N....cSLI.P....KSN.P-........-......-..-....L...G...N.....V.P..T.L..................................ILGGDVYHPGVGA...............-TGV..SIASIVASVD...L...N.G.C...K....Y.T.....A.VS..R...SQ.....P..........R.......H....Q...EV......IEG....MKD.............................. [...]
+D0U267_CRYPA/639-939   ............................................................................................l-IFYIMPS..KDIVA..YERLKKS.MD...VR..V..GTLSQIVLA.P..H.VMKA--................APQYCSNVAT.......KVNAK..........LGGY.T.....SKL.K....E--.--........-......G..G....F...F...K.....V.P..T.M..................................ILGADISHGSFGQt.............gNLQA..SLAAITMSMD...P...D.A.I...T....Y.A.....A.GC..E...TN.....G..........Y.......R....V...EI......MTKd..tVRR.............................. [...]
+A4QSM3_MAGGR/672-970   ............................................................................................l-IFFILPN..KSSIN..YERIKKS.AD...CR..Y..ALVTQCMQA.A..H.VRKN--................QAQYCSNVAM.......KVNAK..........LGGQ.T.....CKV.A....---.--........-......-..T....A...F...K.....K.P..T.M..................................MIGCDVSHAAPGA...............-QQA..SMAAITVSMD...K...D.C.A...R....Y.A.....A.AV..E...TN.....G..........Y.......R....C...EI......LLPq..nVRG.............................. [...]
+C7YHP8_NECH7/612-917   ............................................................................................l-LFVVVSK..KNSGT..YERLKKS.AD...CR..F..GILTQVVLG.S..H.VQKN--................NGQYHSNVCM.......KVNAK..........LGGA.T....aCTP.P....LWK.TP........T......F..F....P...E...T.....R.P..T.I..................................MIGVDVSHTAPGG...............-TSP..STAAMTMSVD...K...D.A.T...R....Y.A.....A.LV..E...TN.....G..........Y.......R....V...EM......LTPg..nMRM.............................. [...]
+C9SSA6_VERA1/19-91     ............................................................................................p--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+C9SGB5_VERA1/589-897   ............................................................................................m-LFVIIRH..ANSGN..YERVKKS.AD...CR..F..GVLTQVVLS.R..H.VEKN--................QGQYHSNVAM.......KVNAK..........LGGT.T.....CRV.PhpnaKAP.RG........Q......P..P....F...F...S.....E.P..T.M..................................IMGLDVSHAGAGI...............-NSP..SMAAMTMSMD...K...D.A.C...R....Y.A.....A.VC..Q...TN.....G..........Y.......R....V...EM......LSPs..nTNE.............................. [...]
+A6S388_BOTFB/557-866   ............................................................................................i-LFFILPD..RNSFM..YERFKKN.NE...CR..F..AMMSQMMNV.A..H.VAKA--................QPQYCSNVCM.......KVNAK..........LGGT.T.....CKV.A....DSK.PP........K......P..-....F...F...P.....R.A..T.M..................................VIGADVSHATPGS...............-PQS..SMACLTMSMD...S...T.A.C...R....Y.A.....A.AV..Q...TN.....G..........K.......R....V...EM......ISPd..nINS.............................. [...]
+A7F377_SCLS1/445-754   ............................................................................................i-LFFIMPD..RNSFL..YERLKKN.NE...CR..F..GMMSQMMNI.A..H.VLKA--................QPQYCSNVCM.......KVNAK..........LGGT.T.....CKV.A....DVK.P-........L......K..P....F...F...P.....R.P..T.M..................................VIGADVSHASPGS...............-PQS..SMACLTMSMD...S...T.A.C...R....Y.A.....A.AV..Q...TN.....G..........N.......R....V...EM......ISKd..nINS.............................. [...]
+Q8J276_NEUCR/628-929   ...........................................................................................qi-VFVAVPD..KSAHV..YERLKKI.FE...CR..Y..GIVTQVLQA.D..H.VKKA--................QGQYISNVCM.......KVNAK..........LGGQ.T.....SSL.T....ATK.AK........S......H..N....F...F...I.....R.P..T.M..................................MIGVDVTHASPGS...............-DMP..SIAAMCASVD...V...E.G.Y...Q....Y.R.....A.AV..Q...TN.....G..........W.......H....N...EI......LTDe..nIST.............................. [...]
+D1ZPU0_SORMA/563-867   ...........................................................................................qi-IFIVVPD..KTAHV..YERIKKI.FD...CR..Y..GVVTQVVQA.Q..H.VQKA--................NGQYLSNVCM.......KVNAK..........LGGQ.T.....SSL.T....ANK.TK........P......H..G....F...F...T.....R.P..T.M..................................MIGVDVSHASPGS...............-EMP..SIAAMCATVD...R...D.G.Y...Q....Y.R.....A.AV..Q...TN.....G..........W.......R....S...EV......LTNe..nIEA.............................. [...]
+B2AKU3_PODAN/441-754   ...........................................................................................qi-IFFILKD..KSAWY..YERLKRS.SD...CR..Y..AMPTQMLNL.Q..Q.VRKG--................QAQYCSNVCL.......KVNAK..........LGGC.T....aVA-.V....KTQ.AGqplkpnsvA......P..H....F...D...N.....T.P..T.M..................................FIGADVSHGAAGH...............-LSP..SVAAMTVSMD...K...A.A.T...K....Y.A.....A.GA..Q...TN.....G..........W.......R....V...EI......IQPy..nMMQ.............................. [...]
+B6Q5R7_PENMQ/547-853   ............................................................................................l-LLFIVPN..KDTLV..YHRIKKS.CD...CR..F..GVASQVLQR.A..H.VERK--................QPQYMSNVAM.......KVNAK..........LGGV.-.....-TC.K....VAP.-R........Q......D..S....L...N...R.....A.G..C.M..................................IIGADVSHAAPGS...............-TAA..SLTAISVSAD...Q...N.C.V...K....Y.M.....G.SC..Q...TG.....Y..........S.......R....V...EM......IDEd..nMKN.............................. [...]
+B8M5N8_TALSN/546-852   ............................................................................................l-LLFVVPN..KDVLV..YHKIKKS.CD...SR..F..GVASQVLQS.A..H.VFKKQL................--QYMSNVAM.......KVNAK..........LGGV.-.....-TC.K....AAP.RQ........A......-..S....M...N...R.....P.G..C.M..................................IIGADVSHAAPGS...............-IAA..SLTAISVSAD...L...D.C.V...K....Y.M.....G.SA..Q...TG.....Y..........S.......R....V...EM......IDEh..nMKS.............................. [...]
+C8V9S4_EMENI/46-154    ................................................................................feiyihlppgdhn--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+Q5B3I7_EMENI/46-154    ................................................................................feiyihlppgdhn--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+A2QDC5_ASPNC/643-949   ............................................................................................l-LLVIVPD..KNSFT..YTRIKKS.CD...CR..W..GVPSQVMQS.T..H.VIKG--................NAQYISNVLM.......KVNAK..........LGGV.T.....SRA.V....SKV.Q-........-......G..A....S...L...R.....P.G..S.I..................................IIGADVTHPPMGV...............-WSP..SMAALSVSKD...P...Y.G.S...S....Y.F.....G.SC..E...AN.....M..........D.......R....V...EI......ISRt..sMEF.............................. [...]
+Q2UKV9_ASPOR/543-849   ............................................................................................l-LLIIVPD..KNSFT..YLRIKKS.CD...CR..W..GVPSQVLQS.A..H.VAKA--................NPQYISNVLM.......KVNAK..........LGGT.T.....A--.R....IIP.KV........N......D..A....S...L...K.....P.M..T.M..................................IIGADVTHPTIGV...............-WSP..SMAAVSVCMD...T...F.G.G...R....Y.W.....G.AC..E...TN.....G..........D.......R....V...EV......IARa..nMEH.............................. [...]
+B8N3T1_ASPFN/436-742   ............................................................................................l-LLIIVPD..KNSFT..YLRIKKS.CD...CR..W..GVPSQVLQS.A..H.VAKA--................NPQYISNVLM.......KVNAK..........LGGT.T.....A--.R....IIP.KV........N......D..A....S...L...K.....P.M..T.M..................................IIGADVTHPTIGV...............-WSP..SMAAVSVCMD...T...F.G.G...R....Y.W.....G.AC..E...TN.....G..........D.......R....V...EV......IARa..nMEH.............................. [...]
+A1CKK4_ASPCL/543-849   ............................................................................................l-LLIIVPD..KNSFT..YTRIKKS.CD...CR..W..GVPSQVLQS.G..H.VIKM--................NPQYASNVLM.......KVNAK..........LGGT.-.....-TA.R....AMP.KI........T......E..A....S...L...R.....P.R..S.M..................................IIGADVTHSPLGV...............-WSP..SMAAMSVCMD...T...F.G.G...R....Y.W.....G.AC..E...AN.....G..........D.......R....N...EI......IASs..nIEV.............................. [...]
+A1D6W7_NEOFI/543-849   ............................................................................................l-LLIIVPD..KNSFT..YTRIKKS.CD...CR..W..GVPSQVLQS.G..H.CVKL--................NPQYASNVLM.......KVNAK..........LGGT.-.....-TA.R....AVP.KV........T......E..A....T...L...R.....P.R..S.M..................................IIGADVTHSPLGV...............-WSP..SMAAMSVCMD...A...F.G.G...R....Y.W.....G.AC..E...AN.....G..........D.......R....L...EI......IATs..nIEV.............................. [...]
+B0XXP5_ASPFC/564-870   ............................................................................................l-LLIIVPD..KNSFT..YTRIKKS.CD...CR..W..GVPSQVLQS.G..H.CVKL--................NPQYASNVLM.......KVNAK..........LGGT.-.....-TA.R....AVP.KV........T......D..A....T...L...R.....P.R..S.M..................................IIGADVTHPSLGV...............-WSP..SMAAMSVCMD...T...F.G.G...R....Y.W.....G.AC..E...AN.....G..........D.......R....L...EI......IATs..nIEV.............................. [...]
+Q4WXX3_ASPFU/564-870   ............................................................................................l-LLIIVPD..KNSFT..YTRIKKS.CD...CR..W..GVPSQVLQS.G..H.CVKL--................NPQYASNVLM.......KVNAK..........LGGT.-.....-TA.R....AVP.KV........T......D..A....T...L...R.....P.R..S.M..................................IIGADVTHPSLGV...............-WSP..SMAAMSVCMD...T...F.G.G...R....Y.W.....G.AC..E...AN.....G..........D.......R....L...EI......IATs..nIEV.............................. [...]
+Q0CNV7_ASPTN/543-854   ............................................................................................l-LVVIVAD..KNSFN..YTRIKKS.CD...CR..W..GVPSQLLQA.A..Q.VAKN--................NPQYISNVLM.......KVNAK..........LGGT.T.....AKI.I....PKT.P-........-......D..A....T...L...K.....P.M..S.M..................................IIGADVTHSPLGV...............-WSP..SMAAISVCAD...T...F.G.G...R....Y.W.....G.AC..E...AN.....G..........E.......R....N...EI......INRa..nMEH.............................. [...]
+B6H4L5_PENCW/673-980   ............................................................................................l-MVFIVPD..KDSFV..YLRIKKS.SD...CR..Y..GTPSQVLQA.A..H.CINN--................RPQYHANVLM.......KVNAK..........LGGI.-.....-TA.R....AVP.KS........K......S..S....G...L...R.....P.G..S.M..................................IIGADVTHPMMGV...............-WTP..SLAAMSVSAN...S...T.A.T...R....Y.M.....G.GC..E...TN.....G..........D.......R....I...EI......IRDk..vVEY.............................. [...]
+C1G1H6_PARBD/510-817   ............................................................................................l-LIFVVSE..KNAFH..YSRIKKS.CD...CR..F..GVPSQVLQA.T..Q.VVKC--................NGQYISNVLM.......KVNAK..........LGGT.-.....TAR.V....SSK.IT........K......G..L....-...-...L.....P.F..T.M..................................IIGADVSHSAPGS...............-PAP..SMAAVSVSMD...Q...F.G.G...R....Y.A.....G.AC..Q...TN.....G..........D.......H....V...EM......ISEa..nVES.............................. [...]
+C1GU57_PARBA/495-755   .........................................................................................vdtf--------..-----..-------.--...--..-..---------.-..-.------................----------.......-VNAK..........LGGT.-.....TAR.V....SSK.IT........K......G..L....-...-...L.....P.F..T.M..................................IIGADVSHSAPGS...............-PAP..SMAAVSVSMD...Q...F.G.G...R....Y.A.....G.AC..Q...TN.....G..........D.......H....V...EM......ISEa..nVES.............................. [...]
+C0S3N8_PARBP/535-823   .............................................................................fnlrpellifvvlqat--------..-----..-------.--...--..-..---------.-..-.-QVV-K...............cNGQYISNVLM.......KVNAK..........LGGT.-.....TAR.V....SSK.IT........K......G..L....-...-...L.....P.F..T.M..................................IIGADVSHSAPGS...............-PAP..SMAAVSVSMD...Q...F.G.G...R....Y.A.....G.AC..Q...TN.....G..........D.......H....V...EM......ISEa..nVES.............................. [...]
+C5G7J1_AJEDR/547-854   ............................................................................................l-LIFIVMD..KNAFH..YTRIKKS.CD...CR..F..GVVSQVLQA.S..Q.VAKC--................NGQYISNVLM.......KVNAK..........LGGT.T.....-AR.I....ASK.IT........K......G..L....-...-...A.....P.F..S.M..................................IIGADISHSAPGS...............-FAP..SMAAMTVSMD...Q...F.G.G...R....Y.T.....G.AC..E...TN.....G..........D.......R....V...EM......ISQa..nIKS.............................. [...]
+C5JJJ6_AJEDS/547-854   ............................................................................................l-LIFIVMD..KNAFH..YTRIKKS.CD...CR..F..GVVSQVLQA.S..Q.VAKC--................NGQYISNVLM.......KVNAK..........LGGT.T.....-AR.I....ASK.IT........K......G..L....-...-...A.....P.F..S.M..................................IIGADISHSAPGS...............-FAP..SMAAMTVSMD...Q...F.G.G...R....Y.T.....G.AC..E...TN.....G..........D.......R....V...EM......ISQa..nIKS.............................. [...]
+C6HRE3_AJECH/547-854   ............................................................................................l-LIFIVMD..KNAFH..YTRVKKS.CD...CR..F..GVPSQVLQA.S..Q.VAKC--................NGQYISNVLM.......KVNAK..........LGGT.-.....TAR.I....SSK.IT........K......G..L....-...-...P.....P.Y..T.M..................................IIGADISHSSPGS...............-VAP..SMAAMTVSMD...Q...F.G.G...R....Y.T.....A.AC..E...TN.....G..........D.......H....V...EM......ISQa..nIKS.............................. [...]
+C0NUS8_AJECG/547-854   ............................................................................................l-LIFIVMD..KNAFH..YTRVKKS.CD...CR..F..GVPSQVLQA.S..Q.VAKC--................NGQYISNVLM.......KVNAK..........LGGT.-.....TAR.I....SSK.IT........K......G..L....-...-...P.....P.Y..T.M..................................IIGADISHSSPGS...............-VAP..SMAAMTVSMD...Q...F.G.G...R....Y.T.....A.AC..E...TN.....G..........D.......H....V...EM......ISQa..nIKS.............................. [...]
+A6RGK9_AJECN/547-854   ............................................................................................l-LIFIVMD..KNAFH..YTRVKKS.CD...CR..F..GVPSQVLQA.S..Q.VAKC--................NGQYISNVLM.......KVNAK..........LGGT.-.....TAR.I....SSK.IT........K......G..L....-...-...P.....P.Y..T.M..................................IIGADISHSSPGS...............-VAP..SMAAMTVSMD...Q...F.G.G...R....Y.T.....A.AC..E...TN.....G..........D.......H....V...EM......ISQa..nIRS.............................. [...]
+C5FDD8_NANOT/542-847   ............................................................................................l-MIFVVAD..RQSFH..YLRIKKS.CD...CR..F..GVPSQVLQG.Q..Q.VAKC--................NGQYISNVLM.......KINAK..........LGGT.T.....-AR.A....VSK.HS........S......-..-....G...L...P.....P.Y..T.M..................................IIGSDVSHSSPGS...............-FSP..SMAAMTVSMD...T...F.G.G...R....Y.T.....A.GC..E...TN.....G..........E.......R....V...EL......ISQa..nIKS.............................. [...]
+D4AMR8_ARTBE/628-933   ............................................................................................l-MIFVVAD..KQSFH..YLRIKKS.CD...CR..F..GVPSQVLQG.Q..Q.VVKC--................NGQYISNVLM.......KINAK..........LGGT.T.....ARA.V....SKQ.CS........-......-..-....G...L...P.....P.F..T.M..................................IIGADVSHSSPGS...............-FSP..SMAAMTVSMD...T...F.G.G...R....Y.T.....A.GC..E...TN.....G..........E.......R....V...EL......ISQa..nIKS.............................. [...]
+D4DBM7_TRIVC/515-807   ............................................................................................l-MIFVVAD..KQSFH..YLRIKKS.CD...CR..F..GVPSQVLQG.Q..Q.VGKC--................NGQYISNVLM.......KINAK..........LGGT.T.....ARA.V....SKQ.CS........-......-..-....G...L...P.....P.F..T.M..................................IIGADVSHSSPGS...............-FSP..SMAAMTVSMD...T...F.G.G...R....Y.T.....A.GC..E...TN.....G..........E.......R....V...EL......ISQa..nIRS.............................. [...]
+C5P9D5_COCP7/668-975   ............................................................................................l-LILIVQD..RHSFH..YLRIKKS.CD...CR..F..GVPSQVLQG.R..Q.VVKG--................SGQYISNVLM.......KINAK..........LGGT.-.....TAR.S....HSR.Y-........-......N..T....S...L...P.....P.F..T.M..................................IIGADVSHSSPGS...............-YAP..SMASFTVCMD...T...F.G.G...R....Y.T.....A.GC..E...TN.....G..........E.......R....R...EI......ISPl..nIKE.............................. [...]
+C4JZ88_UNCRE/552-859   ............................................................................................i-LILVVQD..KQSFH..YLRIKKS.CD...CR..F..GVPSQVLQG.Q..Q.VVKG--................SPQYISNVLM.......KVNAK..........LGGT.T....aRAI.S....KYN.PS........L......P..-....-...-...-.....P.Y..T.M..................................VIGADVSHASPGS...............-HAP..SMASFTVCMD...T...F.G.G...R....Y.N.....A.GC..E...TN.....G..........E.......R....R...EI......ISPa..nIRD.............................. [...]
+Q0U7V7_PHANO/645-956   ............................................................................................f-LFFVVND..RNVDV..YRRIKKS.CD...IR..F..GVASQVLQA.K..H.VMSA--................SPQYISNVCM.......KVNAK..........LGGC.T....sVAK.S....NVI.PK........V.....aP..K....S...P...S.....I.P..T.M..................................VVGADVSHPAPGAg.............sSEAA..SFAAITVSAD...P...F.F.A...K....Y.W.....A.EV..Q...TN.....G..........N.......R....V...EM......VTTs..nIDE.............................. [...]
+B2W8P0_PYRTR/611-920   ............................................................................................n-FMFFIVN.dRNVEV..YRRIKKS.CD...IR..F..GVASQCLQA.K..H.VLSA--................SPQYISNVCM.......KVNAK..........LGGC.TsvaksQLI.P....KIA.--........-......P..K....S...A...S.....I.P..T.M..................................VVGADVSHPAPGAa.............sGEAA..SFAAITVSAD...A...Y.F.V...K....Y.W.....A.EC..N...TN.....G..........N.......R....V...EM......VTTt..nIYE.............................. [...]
+A2DXK9_TRIVA/462-624   .............................................................................................FIICVLPD..GNSQL..YSTLKIF.LT...SS..L..GIPSSFVTD.E..S.LVANKQ...............sMDQIATDMCL.......SIICK..........TGGV.P....fY-V.S....PVS.LP........L......-..-....-...-...-.....R.N..T.V..................................FAGFEVSQTNVAAva..........sydN---..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+A1D5I6_NEOFI/71-143    ..........................................................................................iey--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+C4V9J2_NOSCE/489-791   ...........................................................................................is--LVVLPD..KSTAR..YEEIKRK.TE...TR..S..RMVTQCVLE.K..N.FSRLDN................-PQFAGNLLL.......KINSK..........LGGV.N.....FKV.D....K--.-E........F......S..V....V...K...G.....K.A..T.L..................................VIGIDVNHPGIGD...............LNSP..SVVAIVGGMN...N...E.L.T...S....F.K.....T.II..K...QQ.....D..........R.......R....H...EI......VEN....LKD.............................. [...]
+C4L1M1_EXISA/321-484   ............................................................................................g-VVVVIAE.eASLQH.sYQAIKRQ.FG...GK..Q..DVVTQCVEL.H..D.RVLN--................SEDTLYNILL.......GIYVK..........AGLQ.-.....PWI.L....GEP.LH........S......D..C....-...-...-.....-.-..-.-..................................FVGLDVSHENGKH...............----..-AAGIIQIIG...K...D.G.A...M....I.K.....Q.KA..L..sTS.....E..........A.......G....E...KI......SSE...tMRE.............................. [...]
+Q70IH5_ARAHA/1-61      .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+O61931_CAEEL/762-1081  .....................................................................................vysgnnne--------..--YND..YNVLKYL.AD...NK..Y..GIHTQGILE.K..S.LGVVGPs..............pKNCALTRLMV......eKVLGK..........VGTT.Hr...kLER.G....GAH.KT........W......T..I....F...T...Dp...aK.P..T.L..................................VLGIDVSHPSTRDret.........gnvLQKM..SAATVVGNID...L...D.V.T...E....F.R.....A.SS..R...IQ.....D..........T.......G....V...EC......LID....FSK.............................. [...]
+A8WPC9_CAEBR/828-1145  ......................................................................................tlnlqrq--------..DFQND..YNLFKWL.AD...NH..V..GIFTQGMLY.K..T.FNGIGSt.............paTCKYTSQIVE.......KVLGK..........VGTT.-.....HRR.L....ERN.GE........H......K..S....W...K...Ki..vvE.P..T.L..................................LLGVDVSHPSTRDlmg.........edqVKRL..SVATVVGNID...L...D.C.T...E....Y.R.....A.SS..K...IQ.....D..........V.......G....E...ER......IVR....FEN.............................. [...]
+A8XS10_CAEBR/818-1134  ........................................................................................cerse--------..-FQND..YNLFKWM.AD...NE..V..GVFTQGLLY.K..T.FNSIGNt.............paSCRFTRLIVE.......KILGK..........IGTT.-.....HRR.L....ERD.GD........H......K..S....W...K...KlvnpaE.P..T.L..................................FLGVDVSHPSARDlkg.........ddpVKRL..SVATVVGNID...L...D.C.T...E....Y.R.....A.SS..K...LQ.....D..........V.......G....E...ER......IVR....FQE.............................. [...]
+A8XP19_CAEBR/721-1037  ........................................................................................cerpd--------..-FQND..YNLFKWM.SD...NE..V..GVFTQGILY.K..T.FNSIGLs.............paPCKYTSQLVE.......KILGK..........VGTT.-.....HRR.L....ERD.GE........H......K..S....W...K...KlvnpaE.P..T.L..................................LLGVDVSHPSTRDlkg.........edpVKRL..SVATVVGNID...F...D.C.T...E....F.R.....A.SS..K...IQ.....D..........V.......G....E...ER......IVR....FDE.............................. [...]
+A8XRY5_CAEBR/161-269   ....................................................................................tstivnlnk--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+A8XN44_CAEBR/716-1005  ..............................................................pgtildwfislkknldeykqsedevivplvf--------..-----..-------.--...--..-..---------.-..-.------................---------V.......IFEVR..........FTTL.N.....LER.Q....DFQ.ND........Y......-..-....-...-...T.....E.P..T.L..................................LLGVDVSHPSTRDlkg.........edhVKRL..SIATVVGNID...L...D.C.T...E....Y.R.....A.SS..K...IQ.....D..........V.......G....E...ER......IVR....FEN.............................. [...]
+A8PVW7_BRUMA/492-800   ............................................................................................l-MIFITPE..KNDDI..YGRIKVT.CD...KE..E..GVACQVILV.E..T.FLKMLGn.............peRNAVSHNICL.......KINVK..........LDGI.N....nEVA.R....NQN.YW........K......K..F....T..dK...E.....S.P..T.L..................................FMGIDVTHPPSGD...............TSAP..SIASIIGSLN...I...S.A.T...K....Y.A.....A.SL..K...IQ.....Q..........P.......G....V...EV......MTY....AVD.............................. [...]
+B6VBQ1_CAEBE/1034-1381 ..........................................................................................lvf-IVVSGPH..KDQDA..YGYVKHH.CD...VN..L..GVVSQYVRA.E..T.AKLT--................ERNIYNTIAL.......KINAK..........LGGV.Nq...eLNF.S....E-N.AE........M......S..L....A...E...K.....E.ErkK.Lpl..............................kmFVGIDVTHPTTGS...............GIDF..SIAAVVASVN...A...S.G.T...K....Y.Q.....N.MI..V...TQ.....EecvpgerpgaH.......G....R...ER......TDI....LEG.............................. [...]
+A8XVL1_CAEBR/571-952   ...........................................................................................ki-LLFIVFS..KRRWN.fYGFVKQF.CD...VE..L..GVASQHVTA.H..V.AKRALQdms.........shkpSKRIFYQIAL.......KINGK..........LGGV.Nq..elDWS.E....NAE.MT........V......E..E....K...E...K.....R.K..N.Mpl..............................rmYVGIDVTHPTNGS...............GIDY..SIAAIVASMN...P...G.G.T...V....Y.R.....N.MI..V...TQ.....E..........E.......N....R...PG......ERP....VAHgrertdilegk................... [...]
+Q9XU82_CAEEL/618-985   ............................................................................................v-LMFIIIS.kRQLNA..YGFVKHY.CD...HT..I..GVANQHITS.E..T.VTKALAslr.........hekgSKRIFYQIAL.......KINAK..........LGGI.NqeldwSEI.A....EIS.PE........E......K..E....-...-...R.....R.K..T.Mpl..............................tmYVGIDVTHPTSYS...............GIDY..SIAAVVASIN...P...G.G.T...I....Y.R.....N.MI..V...TQ.....E..........E.......C....R...PG......ERA....VAHgrert......................... [...]
+O46002_CAEEL/57-176    ...........................................................ieymaseynytikiknhfvyslapelskknpkvk--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+Q8CGU0_MOUSE/527-843   ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.YE........R......-..-....-...-...-.....-.-..L.Lalsrgppge...............ssavfqqpviFLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY.............................. [...]
+AGO1_HUMAN/515-816     ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY.............................. [...]
+A1L365_MOUSE/515-816   ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY.............................. [...]
+Q5TA58_HUMAN/440-741   ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY.............................. [...]
+B2RAD8_HUMAN/515-816   ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY.............................. [...]
+D2H607_AILME/507-808   ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY.............................. [...]
+A2VDG1_MOUSE/513-814   ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY.............................. [...]
+Q8BJP2_MOUSE/364-665   ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY.............................. [...]
+D4AC38_RAT/515-816     ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY.............................. [...]
+AGO1_MOUSE/515-816     ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.AVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY.............................. [...]
+B3KME0_HUMAN/440-741   ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....H-Q.R-........-......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY.............................. [...]
+Q4S7L5_TETNG/517-818   ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY.............................. [...]
+A9QW17_TRICA/69-158    ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PR........I......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+Q4S7L6_TETNG/228-304   ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQ-.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+D4A2P5_RAT/513-742     ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...EI......AQE...lLFSqevv.......................... [...]
+Q8CGT8_MOUSE/660-885   ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KMNAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...EI......TQE....LLYsqevv......................... [...]
+AGO4_MOUSE/509-820     ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KMNAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...EI......TQE....LLYsqevv......................... [...]
+Q8BTF2_MOUSE/35-346    ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KMNAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...EI......TQE....LLYsqevv......................... [...]
+A7MD27_HUMAN/509-820   ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...EI......SQE....LLYsqevi......................... [...]
+AGO4_CHICK/442-753     ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...ET......SQE....LLYsqevi......................... [...]
+Q4R7V5_MACFA/1-211     ............................................................................................m--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..---------D...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...EI......SQE....LLYsqevi......................... [...]
+AGO4_HUMAN/509-820     ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...EI......SQE....LLYsqevi......................... [...]
+D2H608_AILME/505-816   ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...EI......SQE....LLYsqevi......................... [...]
+Q9NXV9_HUMAN/35-346    ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...EI......SQE....LLYsqevi......................... [...]
+AGO4_XENLA/532-843     ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...ET......TQE....LLYsqevi......................... [...]
+Q4SVE6_TETNG/553-864   ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...DM......SQE...qLFSqevi.......................... [...]
+Q8CGT8_MOUSE/1000-1102 .....................................................................................lcsfmffl--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+D4A2P5_RAT/843-954     ..........................................................................vrhcshdnflcssivfivg--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+AGO3_DANRE/518-819     ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EV......IQD....LAS.............................. [...]
+A3KFX7_MOUSE/1-109     .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+Q4TBP2_TETNG/578-853   ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCV--.-..-.------................--QTLSNLCL.......KINVK..........LGGI.N....nILV.P....QQR.YQ........P......-..-....-...-...-.....H.P..G.LgcsglssgvcvcvcvcetltsrprrpsvfqqpviFLGADVTHPPAGDgkkp......siaavRAPR..SRCSVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EV......IQD....LAS.............................. [...]
+A3KFX6_MOUSE/1-140     .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+Q4TF92_TETNG/161-225   .....................................................................ragerqcvcvcvregaqqvtfrcs--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+A7SCI6_NEMVE/496-743   ............................................................................................l-IVVALPD.rGNKDV..YNEVKRV.GD...TV..L..GIPTQCVQM.K..Q.FTMA--................KPQVCSNIAM.......KINGK..........LGGT.N.....HVI.A....DSL.KA........TitddkgN..G....I...F...N.....S.P..V.I..................................IFGADVTHPAPGD...............NGIP..SIAAVVASLN...R...N.A.S...R....Y.C.....A.RV..R...PQthmkcK..........Q.......A....Q...EI......IVD....LAD.............................. [...]
+AGO3_BOVIN/518-820     ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS.............................. [...]
+AGO3_CHICK/518-819     ............................................................................................l-IIVILPG..-KTPV..YAEVKRA.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS.............................. [...]
+D2H606_AILME/513-814   ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS.............................. [...]
+AGO3_HUMAN/518-819     ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS.............................. [...]
+B4DY67_HUMAN/154-455   ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS.............................. [...]
+B1ALI0_HUMAN/284-585   ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS.............................. [...]
+A8KA05_HUMAN/518-819   ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS.............................. [...]
+B4E1P5_HUMAN/346-647   ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS.............................. [...]
+Q7M738_MOUSE/426-707   .....................................................................................rytfgygh--------..-----..-------.--...--..-..----TCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS.............................. [...]
+Q3TBP7_MOUSE/518-819   ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS.............................. [...]
+AGO3_MOUSE/518-819     ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS.............................. [...]
+D2HF39_AILME/511-813   ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAT.............................. [...]
+AGO2_RAT/517-819       ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA.............................. [...]
+A1A563_MOUSE/517-819   ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA.............................. [...]
+Q8CGT9_MOUSE/501-743   ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA.............................. [...]
+Q8CGT7_MOUSE/455-570   .......................................................................................vlgmat--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......Q..A....V...F...Q.....Q.P..V.I..................................FLGANVTYPPVGD...............GKKP..SIAAVMGSMD...A...H.P.N...R....Y.C.....V.TV..C...VQ.....Q..........H.......Q....Q...EI......IQD....---.............................. [...]
+Q6P239_MOUSE/277-579   ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLYL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA.............................. [...]
+AGO2_BOVIN/517-819     ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLWL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA.............................. [...]
+AGO2_RABIT/497-799     ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA.............................. [...]
+B0JYP5_BOVIN/517-819   ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA.............................. [...]
+Q6PHA2_MOUSE/94-396    ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA.............................. [...]
+AGO2_HUMAN/516-818     ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA.............................. [...]
+A4FVC0_HUMAN/465-767   ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA.............................. [...]
+Q8R3Q7_MOUSE/187-489   ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA.............................. [...]
+AGO2_MOUSE/517-819     ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA.............................. [...]
+AGO2_XENLA/519-821     ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LSA.............................. [...]
+C0IN02_XENLA/519-821   ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LSA.............................. [...]
+AGO2_XENTR/528-830     ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LSA.............................. [...]
+Q4RKH3_TETNG/508-822   ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQV.K..N.VQKT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.--........-......P..L....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...DI......IQD....LAT.............................. [...]
+C9V4A2_CTEID/306-581   ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQV.K..N.VQKT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.--........-......P..L....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...DI......IQD....LAT.............................. [...]
+B0F0Y5_9TELE/526-828   ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQV.K..N.VQKT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.--........-......P..L....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...DI......IQD....LAT.............................. [...]
+Q8CGT7_MOUSE/576-634   ..........................................................................................kls--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+Q4SXU1_TETNG/1-206     ...........................................................................................sf--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..--IQVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EV......IQD....LAS.............................. [...]
+B7QCC4_IXOSC/509-810   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAS.............................. [...]
+A9NJ58_PENMO/569-898   ...........................................................................................ql--VCVVLP..GKTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....GIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...NG......STT...qGQSasdgsrprqltfa................. [...]
+Q071E1_PENMO/569-898   ...........................................................................................ql--VCVVLP..GKTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....GIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...NG......STT...qGQSasdgsrprqltfa................. [...]
+A7XZ43_PENMO/569-898   ...........................................................................................ql--VCVVLP..GKTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....GIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...NG......STT...qGQSasdgsrprqltfa................. [...]
+D2XYX4_PENJP/572-901   ...........................................................................................ql--VCVVLP..GKTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....GIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...NG......STT...qGQSasdgsrprqltfa................. [...]
+A9NJ57_PENMO/572-901   ...........................................................................................ql--VCVVLP..GKTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....GIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...NG......STT...qGQSasdgsrprqltfa................. [...]
+D2DK65_PENJP/572-901   ...........................................................................................ql--VCVVLP..GKTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....GIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...NG......STT...qGQSasdgsrprqltfa................. [...]
+D2DK66_PENJP/569-898   ...........................................................................................ql--VCVVLP..GKTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....GIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...NG......STT...qGQSasdgsrprqltfa................. [...]
+A7BJS5_BOMMO/569-871   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SLR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGVDVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......VHE....MSS.............................. [...]
+B4LJF3_DROVI/646-948   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+B4KTB5_DROMO/643-945   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+B4P449_DROYA/624-926   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+Q27IQ2_DROSI/554-851   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+Q27IR0_DROME/554-851   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+B4JW20_DROGR/647-949   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+Q7KY08_DROME/607-909   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+B3NRF4_DROER/624-926   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+B4INL3_DROSE/624-926   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+B4GGS7_DROPE/642-944   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+Q28ZU1_DROPS/642-944   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+B3MHG1_DROAN/641-943   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+Q32KD4_DROME/641-943   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+Q960T1_DROME/258-560   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+B4N5V9_DROWI/642-944   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...G...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+Q8T059_DROME/81-383    ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....STR.PK........-......-..-....V...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+B0WFU8_CULQU/621-923   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...D.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+Q7PZ41_ANOGA/638-940   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...D.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+Q16EE2_AEDAE/482-784   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...D.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+Q16M62_AEDAE/604-906   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...D.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+B3VCG6_STRPU/599-900   ............................................................................................l-IIVVLPG..-KTPV..YAEVKRV.GD...IL..L..GIATQCVQV.K..N.VNRT--................TAQTLSNLCL.......KIKVK..........LGGV.N....nILA.P....NIR.PR........I......-..-....-...F...S.....E.P..V.I..................................FCGADVTHPPAGD...............DKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.SV..R...IQ.....T..........H.......R....V...EI......IQD....LQA.............................. [...]
+Q4TBP2_TETNG/868-934   .........................................................................................alll--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+A7RQ46_NEMVE/511-812   .............................................................................................MILVVLPG..-KTPV..YAEVKRV.GD...TM..L..GVITQCIQG.K..N.VTKP--................SPQTLSNLCL.......KINAK..........LGGV.N....nILA.P....EIR.PP........V......-..-....-...F...R.....E.P..V.I..................................FLGADVTHPAAGD...............DKRP..SVAAVVGSMD...A...H.P.S...R....Y.Y.....A.SV..R...VQ.....T..........H.......R....Q...EI......IAE....LAA.............................. [...]
+Q4TF92_TETNG/239-305   .........................................................................................alll--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B2RFN1_OIKDI/771-1072  ............................................................................................l-IVVVLPG..-KTPV..YAEVKRV.GD...TC..L..GIATQCVQV.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....NMR.PK........I......-..-....-...F...Q.....E.P..V.I..................................FIGADVTHPPAGD...............KRKP..SIAAVVASMD...G...H.P.S...R....Y.C.....A.AV..R...VQ.....K..........H.......R....Q...EV......IDD....LSN.............................. [...]
+C8TEF3_OIKDI/573-874   ............................................................................................l-IMVILPG..-RTPV..YAEVKRV.GD...TL..L..GVATQCVQV.K..N.VTKV--................TTQTLSNLCL.......KINVK..........LGGI.N....nILL.P....NAR.PR........V......-..-....-...F...N.....E.P..V.I..................................FIGADVTHPPAGD...............RRKP..SIAAVVASID...A...H.P.S...R....Y.C.....A.SV..R...VQ.....R..........H.......R....Q...EA......IED....LTN.............................. [...]
+C3ZN91_BRAFL/470-771   ............................................................................................l-ILVVLPG..-KTPV..YAEVKRV.GD...TM..L..GVATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGV.N....nILV.P....HIR.PR........V......F..L....-...-...-.....E.P..V.I..................................FIGADVTHPPAGD...............GRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....T..........H.......R....Q...EI......IAD....LAS.............................. [...]
+C3ZQ22_BRAFL/680-848   .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+D2XMQ5_SACKO/1-219     .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------HPPAGD...............MKKP..SIAAVVASMD...A...H.P.S...R....Y.A.....A.SV..R...VQ.....S..........H.......R....Q...EL......IEE....LSH.............................. [...]
+C4Q6D1_SCHMA/608-835   ..........................................................................................xxx--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-LGADVTHPPAGD...............KTKP..SIAAVVASMD...A...H.P.S...R....Y.S.....A.TV..R...VQ.....S..........H.......R....Q...EI......IHD....LYP.............................. [...]
+Q5C3Y0_SCHJA/4-157     ............................................................................................y--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+A8WKF9_CAEBR/562-864   ...........................................................................................ql-VVIVLPG..-KTPV..YAEIKRV.GD...TV..L..GIATQCIQS.K..N.VTRT--................TPQTLSNICM.......KMNMK..........LGGV.N....cVLA.P....NVR.PK........I......-..-....-...F...S.....E.S..V.I..................................FLGCDITHPPAGD...............SRKP..SVAAIVGSMD...A...H.P.S...K....Y.A.....A.TV..R...VQ.....P..........N.......R....Q...EI......ITE....MAS.............................. [...]
+Q86B39_CAEEL/547-848   ............................................................................................l-IVVVLPG..-KTPI..YAEVKRV.GD...TV..L..GIATQCVQA.K..N.AIRT--................TPQTLSNLCL.......KMNVK..........LGGV.N....sILL.P....NVR.PR........I......-..-....-...F...N.....E.P..V.I..................................FLGCDITHPAAGD...............TRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......ITD....LTY.............................. [...]
+O16720_CAEEL/566-867   ............................................................................................l-IVVVLPG..-KTPI..YAEVKRV.GD...TV..L..GIATQCVQA.K..N.AIRT--................TPQTLSNLCL.......KMNVK..........LGGV.N....sILL.P....NVR.PR........I......-..-....-...F...N.....E.P..V.I..................................FLGCDITHPAAGD...............TRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......ITD....LTY.............................. [...]
+B2L7Q3_CAERE/1-268     .............................................................................................--------..-----..-------.--...--..-..-IATQCVQA.K..N.AIRT--................TPQTLSNLCL.......KMNVK..........LGGV.N....sILL.P....NVR.PR........I......-..-....-...F...N.....E.P..V.I..................................FFGCDITHPPAGD...............SRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......ISD....LTY.............................. [...]
+B2L7P9_CAERE/1-269     .............................................................................................--------..-----..-------.--...--..-..GIATQCVQA.K..N.AIRT--................TPQTLSNLCL.......KMNVK..........LGGV.N....sILL.P....NVR.PR........I......-..-....-...F...N.....E.P..V.I..................................FFGCDITHPPAGD...............SRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......ISD....LTY.............................. [...]
+A8X4Z3_CAEBR/691-992   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GIATQCVQA.K..N.AIRT--................TPQTLSNLCL.......KMNVK..........LGGV.N....sILL.P....NVR.PR........I......-..-....-...F...N.....E.P..V.I..................................FFGCDITHPPAGD...............SRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......ISD....LTY.............................. [...]
+Q3LTR7_CAEEL/668-969   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GIATQCVQA.K..N.AIRT--................TPQTLSNLCL.......KMNVK..........LGGV.N....sILL.P....NVR.PR........I......-..-....-...F...N.....E.P..V.I..................................FFGCDITHPPAGD...............SRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......ISD....LTY.............................. [...]
+Q20578_CAEEL/660-961   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GIATQCVQA.K..N.AIRT--................TPQTLSNLCL.......KMNVK..........LGGV.N....sILL.P....NVR.PR........I......-..-....-...F...N.....E.P..V.I..................................FFGCDITHPPAGD...............SRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......ISD....LTY.............................. [...]
+B6VQ75_CAEEL/681-982   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GIATQCVQA.K..N.AIRT--................TPQTLSNLCL.......KMNVK..........LGGV.N....sILL.P....NVR.PR........I......-..-....-...F...N.....E.P..V.I..................................FFGCDITHPPAGD...............SRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......ISD....LTY.............................. [...]
+A8P168_BRUMA/623-925   ...........................................................................................ql--VCVVLP..GKTPV..YAEVKRV.GD...TV..L..GIATQCVQA.K..N.VIKT--................TPQTLSNLCL.......KMNVK..........LGGV.N....sILL.P....AVR.PR........I......-..-....-...F...T.....E.P..V.I..................................FLGCDITHPPAGD...............SRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....A..........H.......R....Q...EI......ISD....LTY.............................. [...]
+A8WWP9_CAEBR/632-910   ...........................................................................................ql-VICIVSG..-KSTV..YGDLKRK.GD...L-..L..GLTTQCIRT.N..N.VARV--................SPHTLSNLCM.......KINSK..........LGGV.N.....VVL.S....APP.PS........T......A..-....-...-...T.....T.P..T.L..................................FIGCHLSRNSVASsses......ssslnYSDT..SIACLVGSMD...G...H.P.T...R....F.A.....P.IF..R...LQ.....P..........R.......N....A...NT......IID....MSE.............................. [...]
+Q9XVI3_CAEEL/574-882   ............................................................................................l-VLCIVPG..-KSVV..YGELKRK.GE...L-..L..GLTTQCVRS.Q..N.VSKA--................SPHTLSNLCM.......KINSK..........LGGI.N.....VIL.S....S-P.PQ........-......-..S....L...N...S.....E.P..V.L..................................FIGCHLTRSSLASssds......tssiaHCDS..SIACLVGSMD...G...H.P.T...Q....F.S.....P.IF..R...TQ.....P..........R.......H....Q...RT......IVD....MCE.............................. [...]
+C5K8K7_9ALVE/727-977   ...............................................................................aftlerseavggfw--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..-IASAVGSVD...N...D.V.N...L....Y.A.....T.AS..S...VQ.....D..........T.......G....T...RI......LD-....IET.............................. [...]
+B9Q8Q1_TOXGO/379-692   ............................................................................................l-LFVILNE..RVSLD..IYQIVKS.-C...TD..V..NFPSQCLNG.R..H.KCIDAIfrg..........dnpNPQYFANVMS.......KVNMK..........LQGV.N.....QTL.E....ADI.IK........Q......E..I....G...T...D.....K.S..T.L..................................VLAVETSFFANPTkt..........sppPTAP..IVCACTGNMD...D...D.L.G...A....F.G.....H.AV..C...VE.....S..........R.......K....H...PI......VTD....IGS.............................. [...]
+B9PJN3_TOXGO/379-693   ............................................................................................l-LFVILNE..RVSLD..IYQIVKS.-C...TD..V..NFPSQCLNG.R..H.KCIDAIfrg.........adnpNPQYFANVMS.......KVNMK..........LQGV.N.....QTL.E....ADI.IK........Q......E..I....G...T...D.....K.S..T.L..................................VLAVETSFFANPTkt..........sppPTAP..IVCACTGNMD...D...D.L.G...A....F.G.....H.AV..C...VE.....S..........R.......K....H...PI......VTD....IGS.............................. [...]
+Q1L2C8_TOXGO/379-693   ............................................................................................l-LFVILNE..RVSLD..IYQIVKS.-C...TD..V..NFPSQCLNG.R..H.KCIDAIfrg.........adnpNPQYFANVMS.......KVNMK..........LQGV.N.....QTL.E....ADI.IK........Q......E..I....G...T...D.....K.S..T.L..................................VLAVETSFFANPTkt..........sppPTAP..IVCACTGNMD...D...D.L.G...A....F.G.....H.AV..C...VE.....S..........R.......K....H...PI......VTD....IGS.............................. [...]
+Q1L1E2_TOXGO/161-474   ............................................................................................l-LFVILNE..RVSLD..IYQIVKS.-C...TD..V..NFPSQCLNG.R..H.KCIDAIfrg..........dnpNPQYFANVMS.......KVNMK..........LQGV.N.....QTL.E....ADI.IK........Q......E..I....G...T...D.....K.S..T.L..................................VLAVETSFFANPTkt..........sppPTAP..IVCACTGNMD...D...D.L.G...A....F.G.....H.AV..C...VE.....S..........R.......K....H...PI......VTD....IGS.............................. [...]
+B6KA84_TOXGO/379-692   ............................................................................................l-LFVILNE..RVSLD..IYQIVKS.-C...TD..V..NFPSQCLNG.R..H.KCIDAIfrg..........dnpNPQYFANVMS.......KVNMK..........LQGV.N.....QTL.E....ADI.IK........Q......E..I....G...T...D.....K.S..T.L..................................VLAVETSFFANPTkt..........sppPTAP..IVCACTGNMD...D...D.L.G...A....F.G.....H.AV..C...VE.....S..........R.......K....H...PI......VTD....IGS.............................. [...]
+Q1L2C9_TOXGO/379-692   ............................................................................................l-LFVILNE..RVSLD..IYQIVKS.-C...TD..V..NFPSQCLNG.R..H.KCIDAIfrg..........dnpNPQYFANVMS.......KVNMK..........LQGV.N.....QTL.E....ADI.IK........Q......E..I....G...T...D.....K.S..T.L..................................VLAVETSFFANPTkt..........sppPTAP..IVCACTGNMD...D...D.L.G...A....F.G.....H.AV..C...VE.....S..........R.......K....H...PI......VTD....IGS.............................. [...]
+D2JRZ7_TOXGO/582-895   ............................................................................................l-LFVILNE..RVSLD..IYQIVKS.-C...TD..V..NFPSQCLNG.R..H.KCIDAIfrg..........dnpNPQYFANVMS.......KVNMK..........LQGV.N.....QTL.E....ADI.IK........Q......E..I....G...T...D.....K.S..T.L..................................VLAVETSFFANPTkt..........sppPTAP..IVCACTGNMD...D...D.L.G...A....F.G.....H.AV..C...VE.....S..........R.......K....H...PI......VTD....IGS.............................. [...]
+A8NJ50_BRUMA/1-61      .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+TAG76_CAEEL/660-966    .............................................................................................CIIVVLQS..KNSDI..YMTVKEQ.SD...IV..H..GIMSQCVLM.K..N.VSRP--................TPATCANIVL.......KLNMK..........MGGI.N.....SRI.V....ADK.IT........N......K..Y....L...V...D.....Q.P..T.M..................................VVGIDVTHPTQAEm.............rMNMP..SVAAIVANVD...L...L.P.Q...S....Y.G.....A.NV..K...VQ.....K..........K.......C....R...ES......VVY....LLD.............................. [...]
+A8XA10_CAEBR/683-989   .............................................................................................CIIVVLQA..KNSDI..YMTVKEQ.SD...IV..H..GIMSQCVLM.K..N.VSRP--................TPATCANIVL.......KLNMK..........MGGI.N.....SRI.V....ADQ.IT........N......K..Y....L...V...D.....Q.P..T.M..................................VVGIDVTHPTQAEm.............rMNMP..SVAAIVANVD...L...L.P.Q...S....Y.G.....A.NV..K...VQ.....K..........K.......C....R...ES......VVY....LLD.............................. [...]
+Q7JLZ2_CAEEL/652-958   .............................................................................................CIIVVLQS..KNSDI..YMTVKEQ.SD...IV..H..GIMSQCVLM.K..N.VSRP--................TPATCANIIL.......KLNMK..........MGGI.N.....SRI.V....ADQ.IT........N......K..Y....L...V...D.....Q.P..T.M..................................VVGIDVTHPTQAEm.............rMNMP..SVAAIVANVD...L...L.P.Q...S....Y.G.....A.NV..K...VQ.....K..........K.......C....R...ES......VVY....LLD.............................. [...]
+Q21079_CAEEL/655-961   .............................................................................................CIIVVLQS..KNSDI..YMTVKEQ.SD...IV..H..GIMSQCVLM.K..N.VSRP--................TPATCANIIL.......KLNMK..........MGGI.N.....SRI.V....ADQ.IT........N......K..Y....L...V...D.....Q.P..T.M..................................VVGIDVTHPTQAEm.............rMNMP..SVAAIVANVD...L...L.P.Q...S....Y.G.....A.NV..K...VQ.....K..........K.......C....R...ES......VVY....LLD.............................. [...]
+A8NGN0_BRUMA/1-135     ...........................................................................................mq--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B7QBT5_IXOSC/313-623   ............................................................................................q-VIFVVVV..NKSPI..YNELKST.AE...TE..I..GVMTQCVTD.K..S.IMNKCN................-PMLVNNILQ.......KVNAK..........LGGV.N.....NTI.P....KSV.K-........-......S..V....I...F...S.....K.P..V.I..................................VMGADVTHPGAKE...............FNRP..SIAAVVASTD...P...F.A.F...R....Y.I.....T.AF..R...IQ.....K..........Q.......N....M...EVkarveiIED....MKS.............................. [...]
+B7Q990_IXOSC/474-787   ............................................................................................k-FLLIILN..PMIDN..HDAIKLI.CE...RD..L..GLATQCCME.K..N.VFNVVDkml..........hqpLPALLVNLCH.......KVNAK..........CGGD.A.....NTI.S....K--.--........R......P..A....I...F...E.....E.P..V.I..................................ILGADVNHPAPGR...............SNHP..SYAALVGSLD...S...C.P.S...K....Y.H.....A.SV..R...IQrtsanS..........N.......E....R...EI......IKD....LKG.............................. [...]
+B7Q811_IXOSC/611-920   ............................................................................................e-IMVIVLA..-KNSN..YAEIKQV.AE...TD..L..GLRTQCIMD.N..N.VIKKCN................-AALVTNLCQ.......KLNAK..........MGGT.N....nSLL.A....Q-E.K-........-......P..A....I...F...Q.....K.P..V.I..................................IIGADVTHPAPGD...............KLRP..SIAACVGSLD...S...I.P.S...K....F.H.....A.SI..R...IQ.....Meds....aamS.......R....V...EI......IKD....LKD.............................. [...]
+B7P230_IXOSC/468-776   ............................................................................................l-VIVVLGR..--NSS..YADIKQT.AE...TS..L..GIRTQCILE.Q..N.FTRNCK................-PQLMVNLCQ.......KINAK..........MGGI.N....nGLL.L....AQK.PE........-......-..-....I...F...R.....K.P..V.I..................................IIGADVSHPAPGD...............RIRP..SIAACVGSLD...S...I.P.S...K....Y.R.....A.SI..R...VQ.....L..........E.......D....Q...EA......VAR....VEMikd........................... [...]
+A8JAG8_CHLRE/672-990   ............................................................................................l-VLVVLPE..KTADE..YREVKRV.SD...IE..L..GIPSQVVVA.S..K.ARVGYRah...........kggGPQYCANVAM.......KINNK..........LGGV.N.....VQL.S....GGL.RN........M......P..V....L...GgagA.....V.P..F.M..................................VLGADVTHPTGAAar...........adSRDP..SVAAVVASLD...A...S.L.G...R....W.A.....S.RV..L...LQ.....A..........G.......R....Q...EV......ITG....MCG.............................. [...]
+A8J9T3_CHLRE/1058-1164 .......................................................................................fmvlga--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+A8J0N0_CHLRE/619-933   .............................................................................................MVMVVLPD.rGGVGL..YDAIKAA.GD...GK..L..GVATQCVNP.A..K.AGLVGPkas..........sgpSFSYAAQLAL.......SVNAK..........LGGA.-.....TTR.P....AGR.PNd......wL......P..L....L...G...G.....R.R..L.Mvggrgpg....................rlearlgLSGALLSRGYRGAa............qvSAGV..EYAAVVGSAD...S...H.A.V...D....Y.R.....V.QL..S...AQ.....V..........A.......G....N...R-......---....---.............................. [...]
+A8J0M9_CHLRE/675-993   .............................................................................................MVMVVLPD.rGGVGL..YDAIKAA.GD...GK..L..GVATQCVNP.A..K.AGLVGPkas..........sgpSFSYAAQLAL.......SVNAK..........LGGA.-.....TTR.P....AGR.P-........-......-..-....-...-...-.....N.G..E.L..................................ALALPRTRRTRVQ..............vSAGV..EYAAVVGSAD...S...H.A.V...D....Y.R.....V.QL..S...AQ.....V..........A.......G....N..rDI......VVS....MRE.............................. [...]
+Q0DZI9_ORYSJ/119-248   ...................................................................................qstgqksphi--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....E.LI..S...AQ.....L..........E.......R....Q...EI......IGG....LFHstrdpk........................ [...]
+Q8H714_PHYIN/1-173     .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+D0N1C0_PHYIN/587-890   ....................................................................................qiiwminvr--------..MDAHA..YGELKLM.SD...SEagV..GILSQCMLS.K..H.IPKC--................NPQYIANILM.......KVNTK..........LGGR.N.....GVI.S....---.GQ........L......P..L....V...S...A.....S.R..T.I..................................IFGADVTHPSPMD...............RSRP..SIAAVTASMD...A...N.F.I...R....H.A.....S.AI..R...AQ.....G..........H.......R....V...EQ......IMN....LKD.............................. [...]
+D0N1B9_PHYIN/587-890   .....................................................................................qiiwminp-------R..MDAHA..YGELKLM.SD...SEagV..GILSQCMLS.K..H.IPKC--................NPQYIANILM.......KVNTK..........LGGR.N.....GVI.S....---.GQ........L......P..L....V...S...A.....S.R..T.I..................................IFGADVTHPSPMD...............RSRP..SIAAVTASMD...A...N.F.I...R....H.A.....S.AI..R...AQ.....G..........H.......R....V...EQ......IMN....LKD.............................. [...]
+D0MT95_PHYIN/497-796   ............................................................................................f-LLVILPA..KNSPV..YGDVKRM.SD...TV..L..GLPSQCIAS.Q..N.LPRA--................NPQFCANVCL.......KINMK..........LNGK.N.....AVL.R....D--.-P........L......P..L....I...S...S.....E.P..T.I..................................IIGADVEHPRSGM...............GGRP..SIAAVVASMD...R...Y.S.A...Q....Y.A.....A.RV..A...AQ.....K..........A.......S....S...D-......IQQ....LPN.............................. [...]
+D0MT54_PHYIN/891-1191  ............................................................................................q-LIMVIKQ.dKSVGS..YSDIKRM.SD...TV..L..GIPSQCIVS.Q..N.VRSA--................KPQYCANVCL.......KINMK..........LSGK.N.....SIL.R....E--.-P........L......P..L....V...S...T.....A.P..T.I..................................IIGADVEHPRSGM...............GSRP..SIASVVASLD...R...Y.S.A...K....Y.V.....A.RV..A...AQ.....K..........A.......S....S...DI......-QL....LPH.............................. [...]
+D0MT94_PHYIN/524-824   ............................................................................................q-LILVIKQ.dKGSVS..YGRIKRM.SD...TV..L..GIPSQCIVA.T..N.LRKA--................NPQVCANVCL.......KMNMK..........LSGK.N.....SVL.R....E--.-P........L......P..L....I...S...T.....C.P..T.I..................................VIGADVEHPRSGM...............GSRP..SIASVVASMD...A...Y.S.A...K....Y.I.....G.RV..A...AQ.....K..........A.......A....N...D-......IQQ....LPH.............................. [...]
+B3SEP3_TRIAD/438-734   ....................................................................rkvevlisklkkstadcgieginek--------..-----..-------.--...--..-..---NLCMQI.K..N.IDKA--................NHQFLANLAL.......KINAK..........LGGT.N.....NTI.N....QSE.L-........-......-..-....-...L...K.....K.P..T.I..................................IFGADVTHPGIGD...............QTSP..SVAAIVGSAN...I...D.L.S...H....Y.F.....H.AI..R...IQ.....E..........H.......R....K...EI......IQD....LQS.............................. [...]
+B8BT49_THAPS/780-963   ............................................................................................i-MLVVLPD..KGKAL..YDHVKFV.SN...QC..S..GVQTQCASL.D..T.FNRQRN................KEQYSTALAT.......KMNAK..........LSTV.E.....DGA.I....AWR.GA........V......D..W....V...N...Q.....C.H..T.L..................................VIGIGMAHGMGRG...............--AE..TIVGISTCLD...G...Q.C.F...R....L.L.....H.SA..Y...VQ.....K..........K.......A....D...TL......SKD...aMID.............................. [...]
+C7SYH3_THAPS/780-1048  ............................................................................................i-MLVVLPD..KGKAL..YDHVKFV.SN...QC..S..GVQTQCASL.D..T.FNRQRN................KEQYSTALAT.......KMNAK..........LSTV.E.....DGA.I....AWR.GA........V......D..W....V...N...Q.....C.H..T.L..................................VIGIGMAHGMGRVl............lvMSVPpyHLIAISLVF-...F...V.L.L...K....V.P.....K.RA..Y...VQ.....K..........K.......A....D...TL......SKD...aMID.............................. [...]
+B5DIM9_DROPS/1-71      .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B4G6N2_DROPE/1-37      .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B4NLX0_DROWI/695-993   ............................................................................................l-VIVIIPN..-RGTT..YDTIKQK.AE...LT..H..GILTQCIKQ.F..T.VQRK-L................NAQLIGNLLL.......KVNSK..........LNGI.N.....HKL.K....DDP.LT........R......-..L....-...-...-.....V.N..T.M..................................YLGADVTHPSPDQ...............RDIP..SVVGVAASHD...L...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........S.......T....A...EE......IED....MEG.............................. [...]
+B4N082_DROWI/579-877   ............................................................................................l-VIVIIPQ..-IGVS..YDIIKQK.AE...LK..H..GILTQCLKQ.L..T.VERK-L................NPQLIGNVLL.......KINSK..........LNGI.N.....HKL.K....DEP.NR........L......-..L....-...-...-.....S.N..V.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MET.............................. [...]
+B3NI38_DROER/838-1138  ..........................................................................................dla---FVIIP..QFGTS..YDIIKQK.AE...LQ..H..GILTQCIKQ.F..T.VERK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..T.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MYS.............................. [...]
+Q2Q3X0_9MUSC/506-806   ..........................................................................................dla---FVIIP..QSGSS..YDIIKQK.AE...LQ..H..GILTQCIKQ.Y..T.FDRK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..A.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......T....L...EE......IED....MYA.............................. [...]
+Q2Q3X2_DROYA/506-806   ..........................................................................................dla---FVIIP..QSGSS..YDIIKQK.AE...LQ..H..GILTQCIKQ.Y..T.FDRK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..A.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MYA.............................. [...]
+Q2Q3X7_DROYA/506-806   ..........................................................................................dla---FVIIP..QSGSS..YDIIKQK.AE...LQ..H..GILTQCIKQ.Y..T.FDRK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..A.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MYA.............................. [...]
+Q2Q3X4_DROYA/506-806   ..........................................................................................dla---FVIIP..QSGSS..YDIIKQK.AE...LQ..H..GILTQCIKQ.Y..T.FDRK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..A.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MYA.............................. [...]
+B4PCH3_DROYA/843-1143  ..........................................................................................dla---FVIIP..QSGSS..YDIIKQK.AE...LQ..H..GILTQCIKQ.Y..T.FDRK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..A.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MYA.............................. [...]
+Q2Q3X6_DROYA/506-806   ..........................................................................................dla---FVIIP..QSGSS..YDIIKQK.AE...LQ..H..GILTQCIKQ.Y..T.FDRK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..A.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MYA.............................. [...]
+Q2Q3X8_DROYA/506-806   ..........................................................................................dla---FVIIP..QSGSS..YDIIKQK.AE...LQ..H..GILTQCIKQ.Y..T.FDRK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..A.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MYA.............................. [...]
+B4IU14_DROYA/810-1110  ..........................................................................................dla---FVIIP..QSGSS..YDIIKQK.AE...LQ..H..GILTQCIKQ.Y..T.FDRK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..A.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MYA.............................. [...]
+Q2Q3X1_DROTE/424-724   ..........................................................................................dla---FVIIP..QSGSS..YDIIKQK.AE...LQ..H..GILTQCIKQ.Y..T.FDRK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..A.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MYS.............................. [...]
+C7LAD2_DROME/888-1187  ...........................................................................................la--IVIIPQ..-FRIS..YDTIKQK.AE...LQ..H..GILTQCIKQ.F..T.VERKCN................-NQTIGNILL.......KINSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...M.....K.N..T.M..................................YIGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...S....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MFS.............................. [...]
+AGO2_DROME/885-1184    ...........................................................................................la--IVIIPQ..-FRIS..YDTIKQK.AE...LQ..H..GILTQCIKQ.F..T.VERKCN................-NQTIGNILL.......KINSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...M.....K.N..T.M..................................YIGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...S....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MFS.............................. [...]
+Q2Q3W2_DROSI/511-810   ...........................................................................................la--IVIIPQ..-SRIS..YDTIKQK.AE...LQ..H..GILTQCVKQ.F..T.VERKCN................-DQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....V.N..T.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...S....Y.N.....M.QY..R...LQ.....R..........G.......T....L...EE......IED....MYT.............................. [...]
+Q2Q3W9_DROSI/511-810   ...........................................................................................la--IVIIPQ..-SRIS..YDTIKQK.AE...LQ..H..GILTQCVKQ.F..T.VERKCN................-DQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....V.N..T.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...S....Y.N.....M.QY..R...LQ.....R..........G.......T....L...EE......IED....MYT.............................. [...]
+B4NVX8_DROSI/80-259    ...........................................................................................la--IVIIPQ..-SRIS..YDTIKQK.AE...LQ..H..GILTQCVKQ.F..T.VERKCN................-DQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....V.N..T.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...S....Y.N.....M.QY..R...LQ.....R..........G.......T....L...EE......IED....MYT.............................. [...]
+Q2Q3W7_DROSI/511-810   ...........................................................................................la--IVIIPQ..-SRIS..YDTIKQK.AE...LQ..H..GILTQCVKQ.F..T.VERKCN................-DQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....V.N..T.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...S....Y.N.....M.QY..R...LQ.....R..........G.......T....L...EE......IED....MYT.............................. [...]
+B4HIG2_DROSE/1-224     .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.M..................................YMGADVTILSRSA...............-RDS..QCGRVAASHD...P...Y.G.A...S....Y.N.....M.QY..R...LQ.....R..........G.......T....L...EE......IED....MYT.............................. [...]
+B3M505_DROAN/688-988   ...........................................................................................dl--AFVIIP..NYGAS..YETIKQK.AE...LK..H..GILTQCIKQ.F..T.FERK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKL.K....E-D.TR........L......P..V....-...-...P.....K.N..A.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........A.......A....L...EE......IED....MES.............................. [...]
+B4GTA7_DROPE/448-747   ............................................................................................d-VVFVIIP..NFGHL..YDVVKQK.AE...LQ..H..GILTQCIKR.V..T.VERKCN................-AQVIGSILL.......KVNAK..........LNGT.N.....HKL.R....D-D.L-........-......-..H....C...L...P.....K.K..T.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MES.............................. [...]
+B4GTA5_DROPE/448-747   ............................................................................................d-VVFVIIP..NFGHL..YDVVKQK.AE...LQ..H..GILTQCIKR.V..T.VERKCN................-AQVIGSILL.......KVNSK..........LNGT.N.....HKL.R....D-D.L-........-......-..H....C...L...P.....K.K..T.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MES.............................. [...]
+B4ISF4_DROPE/14-227    .........................................................................................tdvv--------..-----..----KQK.AE...LQ..H..GILTQCIKR.I..T.VERKCN................-AQVIGSILL.......KVNSK..........LNGT.N.....HKL.R....D-D.L-........-......-..H....C...L...P.....K.K..T.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MES.............................. [...]
+B5DKZ0_DROPS/2-120     ...................................................................................tytvcqrrpc--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................FXGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MES.............................. [...]
+B4HDJ4_DROPE/40-339    ............................................................................................d-VVFVIIP..NFGHL..YDVVKQK.AE...LQ..H..GILTQCIKR.I..T.VERKCN................-AQVIGSILL.......KVNAK..........LNGT.N.....HKL.R....D-D.L-........-......-..H....C...L...P.....K.K..T.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MES.............................. [...]
+B5DT30_DROPS/694-993   ............................................................................................d-VVFVIIP..NSGHL..YDVVKQK.AE...LQ..H..GILTQCIKQ.I..T.VERKCN................-AQVIGNILL.......KVNSK..........LNGT.N.....HKL.R....D-D.L-........-......-..H....C...L...P.....K.K..T.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MES.............................. [...]
+B4GTA6_DROPE/448-736   ............................................................................................d-VVFVIIP..NFGHL..YDVVKQK.AE...LQ..H..GILTQCIKR.I..T.VERKCN................-AQVIGSILL.......KVNAK..........LNGT.N.....HKL.R....D-D.L-........-......-..H....C...L...P.....K.K..T.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......V....L...EE......IED....MES.............................. [...]
+B4GDQ8_DROPE/669-968   ............................................................................................d-LVFVIIP..NVGRS..YDVVKQK.AE...LK..Y..GILTQCLKQ.I..T.VERKCN................-PQCIGNVLL.......KVNSK..........LNGI.N.....HKL.R....DDP.R-........-......-..-....C...L...L.....K.N..T.M..................................FLGADVTHPSPDQ...............WEMP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......T....L...EE......IED....MES.............................. [...]
+B5DYR9_DROPS/651-950   ............................................................................................d-LVFVIIP..NVGRS..YDVVKQK.AE...LK..H..GILTQCLKQ.I..T.VERKCN................-PQCIGNVLL.......KVNSK..........LNGI.N.....HKL.R....DDP.R-........-......-..-....C...L...L.....K.N..A.M..................................FLGADVTHPSPDQ...............WEMP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......T....L...EE......IED....MES.............................. [...]
+B5DU45_DROPS/389-589   ............................................................................................d-LVFVIIP..NVGRS..YDVVKQK.AE...LK..H..GILTQCLKQ.I..T.VERKCN................-PQCIGNVLL.......KVNSK..........LNGI.N.....HKL.R....DDP.R-........-......-..-....C...L...L.....K.N..A.M..................................FLGADVTHPSPDQ...............WEMP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......T....L...EE......IED....MES.............................. [...]
+B5DYR8_DROPS/41-340    ............................................................................................d-LVFVIIP..NVGRS..YDVVKQK.AE...LK..H..GILTQCLKQ.I..T.VERKCN................-PQCIGNVLL.......KVNSK..........LNGI.N.....HKL.R....DDP.R-........-......-..-....C...L...L.....K.N..A.M..................................FLGADVTHPSPDQ...............WEMP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......T....L...EE......IED....MES.............................. [...]
+B4GDQ6_DROPE/661-960   ............................................................................................d-LVFVIIP..NVGRS..YDVVKQK.AE...LK..Y..GILTQCLKQ.I..T.VERKCN................-PQCIGNVLL.......KVNSK..........LNGI.N.....HKL.R....DDP.R-........-......-..-....C...L...L.....K.N..T.M..................................FLGADVTHPSPDQ...............WEMP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......T....L...EE......IED....MES.............................. [...]
+B5DY62_DROPS/643-942   ............................................................................................d-LVFVIIP..NSGPF..YDVVKQK.AE...LQ..H..GILTQCIKE.I..T.VLRKCN................-LQCIGNVLL.......KVNSK..........LNGI.N.....HKL.K....DDP.R-........F......-..-....-...L...L.....K.N..A.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MES.............................. [...]
+B4GFG0_DROPE/449-748   ............................................................................................d-LVFVIIP..NSGPF..YDVVKQK.AE...LQ..H..GILTQCIKE.I..T.VLRKCN................-LQCIGNVLL.......KVNSK..........LNGI.N.....HKL.K....DDP.R-........F......-..-....-...L...L.....K.N..A.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MES.............................. [...]
+B5DWW4_DROPS/3-186     ..........................................................................................rll--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....K.N..T.M..................................FLGADVSHPSPDQ...............REIP..SVVGVAATHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MES.............................. [...]
+B4GUA7_DROPE/624-923   ..........................................................................................dlv--YVIIPN..-SGSV..YDVVKQK.AE...LE..H..GILTQCIKE.N..T.VLRKCN................-LQCIGNVLL.......KVNSK..........LNGI.N.....HKL.K....DDP.L-........-......-..-....C...L...L.....K.N..A.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......D....L...EE......IQD....MES.............................. [...]
+B5DQH3_DROPS/471-770   ..........................................................................................dlv--YVIIPN..-SGSV..YDVVKQK.AE...LE..H..GILTQCIKE.N..T.VLHKCN................-LQCIGNVLL.......KVNSK..........LNGI.N.....HKL.K....DDP.L-........-......-..-....C...L...L.....K.N..A.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......D....L...EE......IQD....MES.............................. [...]
+B4IWV1_DROGR/788-1091  ............................................................................................l-VFVIIPS..RGGAS..YEMIKQR.AE...LH..C..GILTQCIKQ.N..N.VERR-L................DDQLVGNLLL.......KVNSK..........LNGI.N.....HKI.K....DDV.R-........I......K..L....-...-...-.....P.N..V.M..................................YLGADVTHPSPDQ...............RDIP..SVVGVAASHD...L...Y.G.G...S....Y.N.....M.QF..R...MQ.....S..........N.......SggrpR...EE......IDD....MQS.............................. [...]
+B4LH85_DROVI/152-457   ............................................................................................d-LVFVILA..SRGPS..YDIIKQK.AE...LQ..Y..GILTQCIKQ.N..N.VERR-L................NGQLVGNILL.......KVNSK..........LNGV.N.....HKL.K....DDP.RT........M......L..-....-...-...-.....A.N..V.M..................................YLGADVTHPSPDQ...............RDIP..SVVGVAASHD...M...H.G.G...S....Y.N.....M.QY..R...LQ.....C..........G.......GgggaR...EE......IED....MES.............................. [...]
+B4KUJ5_DROMO/715-1017  ...........................................................................................dl-VFVIIPS..-RGAT..YEVIKQK.AE...LQ..H..GILTQCIKH.N..N.VDRR-L................NAQLVGNILL.......KVNSK..........LNGI.N.....HKL.K....DDP.R-........T......Q..L....-...-...-.....T.N..V.M..................................YLGADVTHPSPDQ...............RDIP..SVVGVAASHD...A...Y.G.G...S....F.N.....M.QY..R...LQ.....Cga......ggR.......A....A...EE......ILD....MES.............................. [...]
+B4QL34_DROSI/606-729   .........................................................................................nvgc--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B4G6N7_DROPE/19-133    ........................................................................................vrrei--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B5DIM7_DROPS/517-815   ............................................................................................l-VLVVIPN..-SGNF..YDKLKQK.AE...LE..Y..GILTQCIKQ.A..T.VERRCN................-GQVVGNLLL.......KMNSK..........LNGI.N.....HTL.K....ADT.AA........L......-..-....-...-...P.....K.N..V.M..................................FVGADVTHPSPEQ...............REIP..SVVGVAASHD...A...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MES.............................. [...]
+B4H1E3_DROPE/6-68      ...................................................................................sistdtenqa--------..-----..-------.-E...LE..H..GILTQCIIQ.A..T.GERRFN................-GQVMSNLLL.......KMNSK..........LNGI.N.....PTL.K....R--.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B4G6N0_DROPE/517-815   ............................................................................................l-VLVVIPN..-SGNF..YDKLKQK.AE...LE..Y..GILTQCIKQ.A..T.VERRCN................-GQMVGNLLL.......KMNSK..........LNGI.N.....HTL.K....ADT.AA........L......-..-....-...-...P.....K.N..V.M..................................FVGADVTHPTPEQ...............REIP..SVVGVAASHD...A...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MES.............................. [...]
+Q59HV7_BOMMO/706-1006  ............................................................................................f-LVVVVSG..RGRDY..YHKLKQI.AE...LK..V..GILTHVFKE.D..T.ATRRMN................-PQTARNILL.......KVNSK..........LMGI.N.....QAL.E....NRS.IP........-......Q..C....L...K...G.....G.A..V.M..................................IVGADVTHPSPDQ...............SNIP..SIAAVTASMD...T...K.C.Y...I....Y.N.....I.EL..S...IQ.....T..........P.......K....K...EM......IVQ....FED.............................. [...]
+B0X641_CULQU/527-832   ............................................................................................f-VIVVIPG..-IGDH..YSRLKQK.AE...LV..V..GVLTSCVKG.N..T.VKNTRS................PLTVVNNILL.......KINGK..........TNGT.N.....HVV.Q....SPD.PK........I......P..L....-...I...K.....K.R..I.M..................................FVGADVTHPSPEQ...............STIP..SVVGVVASFD...R...N.G.F...R....Y.K.....P.HF..Q...LQ.....D..........P.......K....K...EM......IHG....LEA.............................. [...]
+B0LJQ7_CULTA/1-148     .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B0WRW8_CULQU/638-943   ...........................................................................................df-VIVVISG..-MGDQ..YSKVKQR.AE...LV..T..GLLTQCIKG.D..T.VFKKAG................DMSTINNIWL.......KINAK..........TNGT.N....hVLK.P....ESK.PP........L......-..-....-...I...R.....K.R..V.M..................................YVGADVTHPSPEQ...............TNIP..SVVGVAASYD...L...E.G.F...R....Y.N.....C.CY..R...LQ.....N..........P.......K....D...EM......IRD....LEN.............................. [...]
+C5J0H4_AEDAE/655-961   ............................................................................................l-VFVVIPSpgRDGDV..YAKVKQK.AE...LC..V..GLLTQCIKS.F..T.LDKKRG................DMSTISNIWL.......KINAK..........TNGS.N....hVLA.K....NFK.PP........I......-..-....-...A...R.....K.T..V.M..................................YVGADVTHPSPEQ...............TNIP..SVVGVAASYD...L...E.G.F...R....Y.N.....C.CY..R...LQ.....G..........P.......K....D...EM......IRD....LQN.............................. [...]
+B0LJQ8_AEDTR/1-254     .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................---------L.......KINAK..........TNGT.N....hLLA.P....GSK.PP........M......-..-....-...S...R.....K.D..V.M..................................YIGADVTHPSPEQ...............TNIP..SVVGVAASYD...L...E.G.F...R....Y.N.....C.CY..R...LQ.....N..........A.......K....D...EM......IRD....LEN.............................. [...]
+Q5TVL2_ANOGA/535-839   ...........................................................................................vt--IVVLPS..-RGDA..YAKVKQK.AElasER..I..GLLTQCVKG.M..T.VAKKGT................DMSTLNNIML.......KINAK..........TNGT.N.....HCI.S....QVA.V-........-......P..P....L...G...R.....G.K..V.M..................................YIGADVTHPLSEN...............--EP..SVVGVAALYD...L...T.G.F...R....Y.N.....C.SV..R...LQ.....G..........A.......R....D...EM......IRD....LEN.............................. [...]
+C4WWR5_ACYPI/1-266     .........................................................................................mfrm--------..-----..-------.--...--..-..---------.-..-.------................NTSTSSNILL.......KINSK..........LNGI.Nh...tLAI.R....SSP.PS........M......-..-....-...-...-.....E.G..A.I..................................IFGADVTHPSPEQ...............TTIP..SVAAVAASHD...T...Y.G.S...Q....Y.N.....M.EW..R...LQ.....S..........P.......K....V...EI......IQD....LED.............................. [...]
+Q5DFJ9_SCHJA/2-164     .........................................................................................lylr--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+C4QPD2_SCHMA/595-831   ............................................................................................f-IMLILYD..--DLA..YGTIKRL.SD...LK..M..GIRTQCVRG.S..T.LRKP--................--NVFPNLLL.......KLNGK..........LGGV.N.....WIV.P....DLT.E-........-......-..-....Y...S...K.....D.L..I.M..................................VFGADVTHPAPTQt.............hQVLK..SVAAVVGSVS...P...E.L.M...R....Y.G.....A.IV..R...QQ.....A..........TtergnktT....R...EI......IDN....LHL.............................. [...]
+C4QPD1_SCHMA/595-896   ............................................................................................f-IMLILYD..--DLA..YGTIKRL.SD...LK..M..GIRTQCVRG.S..T.LRKP--................--NVFPNLLL.......KLNGK..........LGGV.N.....WIV.P....DLT.E-........-......-..-....Y...S...K.....D.L..I.M..................................VFGADVTHPAPTQt.............hQVLK..SVAAVVGSVS...P...E.L.M...R....Y.G.....A.IV..R...QQ.....A..........TtergnktT....R...EI......IDN....LHL.............................. [...]
+Q5DCI0_SCHJA/265-566   ...........................................................................................fl--LLILYD..--EYS..YPTIKRL.SD...LQ..M..GIRTQCVRG.R..T.LDKP--................--NVFPNLLL.......KLNGK..........LGGV.N.....WQI.P....DLI.KN........-......-..-....-...G...N.....E.L..I.M..................................VFGADVTHPAPTQn.............qQIRK..SVAAVIGSVS...P...D.L.M...R....Y.G.....V.VI..R...QQ.....A..........TtekgnktA....R...EI......IDD....MRL.............................. [...]
+C4QPD0_SCHMA/628-928   ..........................................................................................afl--LLILYD..--EHA..YPAIKRL.SD...LQ..I..GIRTQCVRS.R..T.LDKP--................--NVFPNLLL.......KINGK..........LGGV.N.....WQI.P....DLI.KN........-......-..-....-...S...D.....E.L..I.M..................................VFGADVTHPAQTQ...............QVRK..SVAAVLGSVS...P...D.L.M...R....Y.G.....V.VI..R...QQ.....A..........TtekgnkaA....R...EI......IDD....MRL.............................. [...]
+Q5DG80_SCHJA/3-99      ........................................................................................hclyr--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+AGO1_ARATH/676-997     ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TE..L..GIVSQCCLT.K..H.VFKM--................SKQYMANVAL.......KINVK..........VGGR.N....tVLV.D....ALS.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.I.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lFKEwkdpqk........................ [...]
+Q3ECU7_ARATH/678-999   ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TE..L..GIVSQCCLT.K..H.VFKM--................SKQYMANVAL.......KINVK..........VGGR.N....tVLV.D....ALS.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.I.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lFKEwkdpqk........................ [...]
+A1E5M2_PEA/696-1017    ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TD..L..GVVSQCCLT.K..H.VFKM--................NKQYLANVSL.......KINVK..........VGGR.N....tVLV.D....ALS.RR........I......P..I....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.I.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lFKQwqdpvr........................ [...]
+A1E5M3_PEA/726-1047    ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TD..L..GVVSQCCLT.K..H.VFKM--................SKQYLANVSL.......KINVK..........VGGR.N....tVLV.D....ALS.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.I.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lFKQwqdpvr........................ [...]
+Q2LFC4_NICBE/678-999   ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TE..L..GIVSQCCLT.K..H.VFKM--................SKQYLANVSL.......KINVK..........VGGR.N....tVLV.D....ALS.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.I.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lYKTwqdpvr........................ [...]
+B9SJV6_RICCO/687-1008  ............................................................................................l-LIVILPD..NNGSL..YGELKRI.CE...TD..L..GLVSQCCLT.K..H.VFRM--................NKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALS.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lFKEwqdpvr........................ [...]
+B9I4Y6_POPTR/688-1009  ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....AIS.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwqdpvr........................ [...]
+B9N365_POPTR/308-629   ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALS.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwqdpvr........................ [...]
+B8AGF0_ORYSI/693-1014  ............................................................................................l-LIAILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwkdpqr........................ [...]
+B9F1L3_ORYSJ/693-1014  ............................................................................................l-LIAILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwkdpqr........................ [...]
+AGO1A_ORYSJ/709-1030   ............................................................................................l-LIAILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwkdpqr........................ [...]
+C5YE15_SORBI/712-1033  ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwqdpqr........................ [...]
+C0HEU9_MAIZE/87-408    ............................................................................................l-LIVILPD..INGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwqdpqr........................ [...]
+B9FC11_ORYSJ/374-695   ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwqdphr........................ [...]
+AGO1B_ORYSJ/746-1067   ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwqdphr........................ [...]
+B8AT34_ORYSI/729-1050  ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwqdphr........................ [...]
+A9RG03_PHYPA/598-919   ............................................................................................l-LIAILPD..NNGPL..YGDLKKQ.CE...TV..L..GVVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALS.RK........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPHPGE...............DFSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKEwkdpqk........................ [...]
+A9RTW5_PHYPA/744-1065  ............................................................................................l-LIAILPD..NNGPL..YGDLKKQ.CE...TV..L..GVVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RK........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKEwrdpqk........................ [...]
+C5YY05_SORBI/736-1058  ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKANK................-QQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....V.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....T..........H.......R....Q...EL......IQD...lFKVyqdpqr........................ [...]
+B4FGY3_MAIZE/13-335    ............................................................................................l-LIVILPD..NNGSL..YGDVKRI.CE...TN..L..GLVSQCCLT.K..H.VFKVNK................-QQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALA.RR........I......P..L....V...S...D.....I.A..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwqdper........................ [...]
+C7J0V9_ORYSJ/1-271     .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-INVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwqdphr........................ [...]
+PINH_ARATH/625-946     ............................................................................................l-LLAILPD..NNGSL..YGDLKRI.CE...TE..L..GLISQCCLT.K..H.VFKI--................SKQYLANVSL.......KINVK..........MGGR.N....tVLV.D....AIS.CR........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPENGE...............ESSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwqdpvr........................ [...]
+B0FHH7_BRANA/614-935   ............................................................................................l-LLAILPD..NNGSL..YGDLKRI.CE...TE..L..GLISQCCLT.K..H.VFKI--................SKQYLANVSL.......KINVK..........MGGR.N....tVLL.D....AIS.CR........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPENGE...............ESSP..SIGAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwqdpvr........................ [...]
+B9RTJ1_RICCO/626-947   ............................................................................................l-LLAILPD..NNGTL..YGDLKRI.CE...TD..L..GLISQCCLT.K..H.VFKI--................SKQYLANVSL.......KINVK..........MGGR.N....tVLL.D....AIS.CR........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPENGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwqdpvr........................ [...]
+B9HKB5_POPTR/631-952   ............................................................................................l-LLAILPD..NNGSL..YGDLKRI.CE...TD..L..GLITQCCLS.K..H.VFKI--................SKQYLANLSL.......KINVK..........MGGR.N....tVLL.D....AIS.CR........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPENGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwqdpvr........................ [...]
+B9HUQ6_POPTR/452-776   ............................................................................................l-LLAILPD..NNGSL..YGDLKRI.CE...TD..L..GLLTQCCLS.K..H.VFKI--................SKQYLANVSL.......KINVK..........MGGR.N....tVLL.D....AIS.CR........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPENGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwqdpvr........................ [...]
+B9STN2_RICCO/586-907   ............................................................................................l-LIAILPD..SNGSL..YGDLKRI.CE...TD..L..GLISQCCLT.K..H.VFKI--................NRQYLANVSL.......KINVK..........MGGR.N....tVLL.D....AIS.WR........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPESGE...............DISP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....P..........H.......R....Q...EL......IQD...lFKTwqdpqq........................ [...]
+PNH1_ORYSJ/620-941     ............................................................................................l-LLAILPD..NNGSL..YGDIKRI.CE...TD..L..GLISQCCLT.K..H.VFKI--................SKQYLANVSL.......KINVK..........MGGR.N....tVLL.D....AIS.WR........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPETGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwhdpqr........................ [...]
+B9FU05_ORYSJ/458-779   ............................................................................................l-LLAILPD..NNGSL..YGDIKRI.CE...TD..L..GLISQCCLT.K..H.VFKI--................SKQYLANVSL.......KINVK..........MGGR.N....tVLL.D....AIS.WR........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPETGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwhdpqr........................ [...]
+C5Z5J6_SORBI/617-938   ............................................................................................l-LLAILPD..NNGPL..YGDIKRI.CE...TD..L..GLITQCCLT.K..H.VFKI--................SKQYLANVSL.......KINVK..........MGGR.N....tVLL.D....AIS.WR........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPETGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwhdpqr........................ [...]
+C0PNQ0_MAIZE/1-267     .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........MGGR.N....tVLL.D....AIS.WS........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPETGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....H.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwhdpqr........................ [...]
+A5ARQ9_VITVI/592-892   ............................................................................................l-LIAILPD..NNGSL..YGDLKRI.CD...TD..L..GLISQCCLT.K..N.VYKI--................SNQYLANVSL.......KINVK..........MGGR.N....tVLL.D....ALS.SG........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPETGD...............DSCP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD....---.............................. [...]
+B8B2X0_ORYSI/647-968   ...........................................................................................ll--IGLLPD..NNGSL..YGDLKRI.CE...ID..L..GLVSQCCCT.K..Q.VFKM--................NKQILANLAL.......KINVK..........VGGR.N....tVLV.D....AVS.RR........I......P..L....V...T...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....S..........H.......R....Q...EL......IDD....LYNithdph........................ [...]
+AGO1D_ORYSJ/669-990    ...........................................................................................ll--IGLLPD..NNGSL..YGDLKRI.CE...ID..L..GLVSQCCCT.K..Q.VFKM--................NKQILANLAL.......KINVK..........VGGR.N....tVLV.D....AVS.RR........I......P..L....V...T...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....S..........H.......R....Q...EL......IDD....LYNithdph........................ [...]
+B9FR04_ORYSJ/644-965   ...........................................................................................ll--IGLLPD..NNGSL..YGDLKRI.CE...ID..L..GLVSQCCCT.K..Q.VFKM--................NKQILANLAL.......KINVK..........VGGR.N....tVLV.D....AVS.RR........I......P..L....V...T...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....S..........H.......R....Q...EL......IDD....LYNithdph........................ [...]
+C5Z2L1_SORBI/643-964   ............................................................................................l-LIGILPD..NNGSL..YGDLKRI.CE...ID..L..GLVSQCCCA.K..Q.VFKM--................NKQILANLAL.......KINVK..........VGGR.N....tVLA.D....AVS.RR........I......P..L....V...T...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....S..........H.......R....Q...EL......IED....LYKvvhdpq........................ [...]
+C5XWS2_SORBI/656-978   ............................................................................................l-LIGILPD..NNGSL..YGDLKRV.CE...ID..L..GIVSQCCCT.K..Q.VFKMNN................-KQILANLAL.......KINVK..........VGGR.N....tVLV.D....AVS.RG........I......P..L....V...T...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IED....LYKvwqdpq........................ [...]
+B8AFI6_ORYSI/637-958   ............................................................................................l-LIGILPD..NNGSL..YGDLKRV.CE...ID..L..GIVSQCCCT.K..Q.VFKM--................NKQILANLAL.......KINVK..........VGGR.N....tVLV.D....AVS.RR........I......P..L....V...T...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IED....LYKiwqdpq........................ [...]
+AGO1C_ORYSJ/638-959    ............................................................................................l-LIGILPD..NNGSL..YGDLKRV.CE...ID..L..GIVSQCCCT.K..Q.VFKM--................NKQILANLAL.......KINVK..........VGGR.N....tVLV.D....AVS.RR........I......P..L....V...T...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IED....LYKiwqdpq........................ [...]
+Q2LFC3_NICBE/604-925   ............................................................................................l-LVVILPD..NNGSL..YGDLKRI.CE...TE..L..GVVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....AIS.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.I.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD....LYTtrqdpv........................ [...]
+B1B5A8_DAUCA/736-1057  ............................................................................................l-LIAILPD..NNGSL..YGDLKRI.CE...TD..L..GVISQCCLA.K..H.VFRM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALS.WR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.S.....G.LV..C...AQ.....A..........H.......R....Q...EI......IQD....LYTtwqdpn........................ [...]
+Q2PEW1_TRIPR/1-247     ............................................................................................d--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lFKQwqdpar........................ [...]
+A9T6J3_PHYPA/524-842   ............................................................................................l-LIAILPD..NNGSL..YGDLKKQ.CE...TV..L..GVVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALS.RR........I......P..L....V...S...D.....K.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....T..........H.......R....Q...EL......IAD...lFKEytdpmk........................ [...]
+AGO17_ORYSJ/514-834    ............................................................................................l-LIVILPN..NNGSL..YGDVKRI.CE...TD..I..GLISQCCLA.K..H.VLKM--................NKWYLASVAL.......KINAK..........MGGR.N....tVLV.D....ALE.MR........L......P..H....V...R...D.....T.P..T.I..................................VFGAHVTHPHPGK...............ANSS..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LI..S...VQ.....A..........C.......H....Q...ES......IQG...lFKVqddper........................ [...]
+B8AII3_ORYSI/514-834   ............................................................................................l-LIVILPN..NNGSL..YGDVKRI.CE...TD..I..GLISQCCLA.K..H.VLKM--................NKWYLASVAL.......KINAK..........MGGR.N....tVLV.D....ALE.MR........L......P..H....V...R...D.....T.P..T.I..................................VFGAHVTHPHPGK...............ANSS..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LI..S...VQ.....A..........C.......H....Q...ES......IQG...lFKVqddper........................ [...]
+C5WX34_SORBI/1-43      ............................................................................................g--------..-----..--KIKRV.CE...TD..I..GIVSQCCLM.K..H.DCRP--................NKIFLENISL.......KNNAK..........V---.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+C0PDS4_MAIZE/580-888   ............................................................................................l-LLAILPD..KKDSL..YGNIKRI.CE...TD..I..GLVSQCCRR.S..R.VLVN--................NNQILANIAI.......KINAK..........VGGR.I.....SVF.D....DVQ.KS........L......P..V....V...S...N.....K.P..T.I..................................IFGAHVSHPSVVD..............gSTGP..SIASVVASQD...W...H.E.V...S....K.Y.....N.GV..V...RA.....Q..........G.......H....T...EE......IGG....LED.............................. [...]
+B7ZXH7_MAIZE/580-736   ............................................................................................l-LLAILPD..KKDSL..YGNIKRI.CE...TD..I..GLVSQCCRR.S..R.VLVN--................NNQILANIAI.......KINAK..........VGGR.I.....SVF.D....DVQ.KS........L......P..V....V...S...N.....K.P..T.I..................................IFGAHVSHPSVVD..............gSTGP..SIASVVASQD...W...H.E.V...S....K.Y.....N.GV..V...RA.....Q..........G.......H....T...EE......IGG....LED.............................. [...]
+C5WR49_SORBI/585-661   ............................................................................................l-LLAILPD..KNGSL..YGNIKRI.CE...TD..I..GLVSQCCRR.S..N.VFTE--................NSQILANIAI.......KINAK..........VVAS.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B8AFF9_ORYSI/534-832   ............................................................................................l-LIVILPE..-ERGN..YGKIKRV.CE...TK..L..GLVSQCCLP.K..N.VKTDTN................-IKYLENIAL.......KINVK..........VGGR.Nt...vLQQ.A....FVH.NG........I......P..F....V...S...D.....I.P..T.I..................................IFGADVSHPPPGM...............-YSS..SIAGVVGSID..wP...E.V.T...T....Y.R.....A.VI..S...AQ.....L..........E.......R....Q...EI......IGG....---.............................. [...]
+B9F134_ORYSJ/36-347    ............................................................................................l-LIVILPE..-ERGN..YGKIKRV.CE...TK..L..GLVSQCCLP.K..N.VKTDTN................-IKYLENIAL.......KINVK..........VGGQ.Nt...vLQQ.A....FVH.NG........I......P..F....V...S...D.....I.P..T.I..................................IFGADVSHPPPGMwld........qstgQKSP..HIELISAQL-...-...E.R.Q...E....I.I.....G.GL.fH...ST.....R..........D.......P....K...GC......LKP....-DG.............................. [...]
+Q0DZI9_ORYSJ/36-107    ............................................................................................l-LIVILPE..-ERGN..YGKIKRV.CE...TK..L..GLVSQCCLP.K..N.VKTDTN................-IKYLENIAL.......KINVK..........T---.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B9SCN8_RICCO/632-949   ............................................................................................l-LIIILPD..-ISGS..YGIIKRV.CE...TE..L..GIVSQCCQP.R..Q.AAKL--................SKQYFENVAL.......KINVK..........VGGR.N....tVLN.D....AVQ.RR........I......P..L....V...T...D.....C.P..T.I..................................IFGADVTHPPPGE...............DSSP..SIAAVVASMD..wP...E.V.T...K....Y.R.....G.IV..S...AQ.....A..........H.......R....E...EI......IQD...lYKSfqdpqg........................ [...]
+B9HQS2_POPTR/635-955   ............................................................................................l-LIIILPD..-VTGS..YGKIKRV.CE...TE..L..GIVSQCCQP.Q..Q.AKKL--................SKQYMENVAL.......KINVK..........AGGR.N....tVLN.D....AFH.RR........I......P..L....L...T...D.....V.P..T.I..................................VFGADVTHPQAGE...............DAGP..SIAAVVASMD..wP...E.V.T...K....Y.R.....G.LV..S...AQ.....A..........H.......R....E...EI......IED...lYKKyqdpkk........................ [...]
+B9GEQ1_POPTR/548-869   ...........................................................................................ql-LIIILPD..-FSGS..YGKIKRI.CE...TE..L..GIVSQCCQP.Q..Q.AKKL--................SKQYLENVAL.......KINVK..........AGGR.N....tVLN.D....AIQ.RR........I......P..N....V...T...D.....L.P..T.I..................................IFGADVTHPQPGE...............DSSP..SIAAVVASMD..wP...E.V.T...K....Y.R.....G.LV..S...AQ.....A..........H.......R....E...EI......IQD...lYKKyqdpqk........................ [...]
+AGOL_ARATH/638-958     ............................................................................................l-LIVILPD..-VTGS..YGKIKRI.CE...TE..L..GIVSQCCQP.R..Q.VNKL--................NKQYMENVAL.......KINVK..........TGGR.N....tVLN.D....AIR.RN........I......P..L....I...T...D.....R.P..T.I..................................IMGADVTHPQPGE...............DSSP..SIAAVVASMD..wP...E.I.N...K....Y.R.....G.LV..S...AQ.....A..........H.......R....E...EI......IQD....LYKlvqdpq........................ [...]
+B9MTL4_POPTR/505-810   ...........................................................................................qi-LIIILPD..-VSGS..YGTIKRV.CE...TE..L..GIVSQCCQP.K..Q.ARKC--................SPQYLENVAL.......KINVK..........AGGR.N....tVLE.D....ALN.RR........I......P..L....L...S...D.....T.P..T.I..................................IFGADVTHPQPGE...............DSSP..SIAAIVASMD..wP...E.V.T...T....Y.R.....G.LV..S...AQ.....K..........H.......R....Q...EI......IQD....CAG.............................. [...]
+B8ALC4_ORYSI/596-877   ................................................................................yvfsprnmtilch--------..-----..-------.--...--..-..---------.-..-.------................----------.......---NQ..........VGGR.Nt...vLER.A....FIR.NG........I......P..F....V...S...E.....V.P..T.I..................................IFGADVTHSPPGE...............DSAS..SIAAVVASMD..wP...E.I.T...K....Y.R.....G.LV..S...AQ.....S..........H.......R....Q...EI......IED....LFSvgkdpv........................ [...]
+AGO13_ORYSJ/471-770    ..........................................................................................qll--IVILLE..-VSGS..YGKIKRV.CE...ND..L..GIVSQCCLP.R..H.ASRP--................NKQYLENVAL.......KINVK..........KSQQ.-.....---.S....S--.L-........-......-..-....-...-...-.....-.-..-.-..................................---VLMSHTPPGE...............DSAS..SIAAVVASMD..wP...E.I.T...K....Y.R.....G.LV..S...AQ.....S..........H.......R....Q...EI......IED....LFSvgkdpv........................ [...]
+B9F6E0_ORYSJ/564-783   .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----VVASMD..wP...E.I.T...K....Y.R.....G.LV..S...AQ.....S..........H.......R....Q...EI......IED....LFSvgkdpv........................ [...]
+MEL1_ORYSJ/696-1016    ............................................................................................l-LIVILPE..-VSGS..YGKIKRV.CE...TD..L..GIVSQCCLP.R..H.ASRP--................NKQYLENVAL.......KINVK..........VGGR.Nt...vLER.A....FIR.NG........I......P..F....V...S...E.....V.P..T.I..................................IFGADVTHPPPGE...............DSAS..SIAAVVASMD..wP...E.I.T...K....Y.R.....G.LV..S...AQ.....P..........H.......R....Q...EI......IED....LFSvgkdpv........................ [...]
+A3ANP6_ORYSJ/644-982   ............................................................................................l-LIVILPE..-VSGS..YGKIKRV.CE...TD..L..GIVSQCCLP.R..H.ASRP--................NKQYLENVAL.......KINVK..........VGGR.Nt...vLER.A....FIR.NG........I......P..F....V...S...E.....V.P..T.I..................................IFGADVTHPPPGE...............DSAS..SIAAVVASMD..wP...E.I.T...K....Y.R.....G.LV..S...AQ.....P..........H.......R....Q...EI......IED....LFSvgkdpv........................ [...]
+B8ALC8_ORYSI/696-1016  ............................................................................................l-LIVILPE..-VSGS..YGKIKRV.CE...TD..L..GIVSQCCLP.R..H.ASRP--................NKQYLENVAL.......KINVK..........VGGR.Nt...vLER.A....FIR.NG........I......P..F....V...S...E.....V.P..T.I..................................IFGADVTHPPPGE...............DSAS..SIAAVVASMD..wP...E.I.T...K....Y.R.....G.LV..S...AQ.....P..........H.......R....Q...EI......IED....LFSvgkdpv........................ [...]
+C5WX38_SORBI/703-1025  ............................................................................................l-LIVILPD..-VSGS..YGKIKRV.CE...TD..I..GIVSQCCLP.K..H.ASRP--................NKQYLENVAL.......KINVK..........VGGR.Nt...vLER.A....FVR.NG........I......P..F....V...S...E.....V.P..T.I..................................IFGADVTHPPPGE...............DSAS..SIAAVVASMD..wP...E.I.T...K....Y.R.....G.LV..S...AQ.....P..........H.......R....Q...EI......IED...lFTVtkdlqk........................ [...]
+B7ZZW2_MAIZE/663-969   ............................................................................................l-LIVILPD..-VTGY..YGEIKRM.CE...TD..L..GIVSQCINP.K..K.N--R--................NKQYFENLAL.......KINVK..........AGGR.Nt...vLER.A....SVP.NG........I......P..F....V...S...D.....V.P..T.I..................................IFGADVTHPTAGE...............ESSA..SVGAVVASMD..wP...Q.V.T...T....Y.K.....A.LV..S...AQ.....A..........H.......R....E...EI......IQN....LGG.............................. [...]
+C5XBU2_SORBI/675-995   ............................................................................................l-LIVVLPD..-VSGH..YGKIKRI.CE...TD..L..GIVSQCINP.K..K.NKN---................-KQYFENVAL.......KINVK..........VGGR.Nt...vLER.A....FVP.NG........I......P..F....V...S...D.....V.P..T.I..................................IFGADVTHPTAGE...............DSSA..SIAAVVASMD..wP...Q.V.T...T....Y.K.....A.LV..S...AQ.....A..........H.......R....E...EI......IQN...lFWTgtdpek........................ [...]
+C5X6M9_SORBI/1-69      ........................................................................................ntfcl--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....K.P..T.I..................................IFGADAIHPTAGE...............DSSA..FITAVVESME..rP...Q.V.M...T....Y.K.....A.LA..S...AQ.....K..........H.......R....E...EM......IHN...lL--.............................. [...]
+Q7FS89_MAIZE/11-170    ..................................................................................crgmalaagtv--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----VVASMD..wP...Q.V.T...T....Y.K.....A.LV..S...AQ.....A..........H.......R....E...EI......IQN....LGG.............................. [...]
+Q8S478_MAIZE/38-188    ...........................................................................................hk--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----VVASMD..wP...Q.V.T...T....Y.K.....A.LV..S...AQ.....A..........H.......R....E...EI......IQN....LGG.............................. [...]
+B9FVX3_ORYSJ/462-794   ............................................................................................l-LIVILPD..-VNGY..YGRIKRV.CE...TE..L..GIVSQCLKP.G..RkLLSL--................DRQFLENVSL.......KINVK..........AGGR.Ns...vLQR.P....LVP.G-........-......-..-....G...L...E.....N.T..T.I..................................IFGADVTHPASGE...............DSSA..SIAAVVASMD..wP...E.I.T...K....Y.K.....A.LV..S...AQ.....P..........P.......R....Q...EI......IQD....LFTmtevaqnadapaq................. [...]
+B8B7Y0_ORYSI/653-985   ............................................................................................l-LIVILPD..-VNGY..YGRIKRV.CE...TE..L..GIVSQCLKP.G..RkLLSL--................DRQFLENVSL.......KINVK..........AGGR.Ns...vLQR.P....LVP.G-........-......-..-....G...L...E.....N.T..T.I..................................IFGADVTHPASGE...............DSSA..SIAAVVASMD..wP...E.I.T...K....Y.K.....A.LV..S...AQ.....P..........P.......R....Q...EI......IQD....LFTmtevaqnadapaq................. [...]
+AGO14_ORYSJ/677-1009   ............................................................................................l-LIVILPD..-VNGY..YGRIKRV.CE...TE..L..GIVSQCLKP.G..RkLLSL--................DRQFLENVSL.......KINVK..........AGGR.Ns...vLQR.P....LVP.G-........-......-..-....G...L...E.....N.T..T.I..................................IFGADVTHPASGE...............DSSA..SIAAVVASMD..wP...E.I.T...K....Y.K.....A.LV..S...AQ.....P..........P.......R....Q...EI......IQD....LFTmtevaqnadapaq................. [...]
+C5WPM0_SORBI/900-1216  ............................................................................................l-LIIILPD..-MSGF..YGRIKRL.CE...TE..L..GLITQCCAP.K..N.VRKG--................GNQYLENLSL.......KINVK..........VGGR.N....tVLD.D....ALN.RR........I......P..L....L...T...D.....C.P..T.I..................................VFGADVTHPSPGE...............SSSP..SIAAVVASMD..wP...Q.V.T...K....Y.K.....C.LV..S...SQ.....G..........H.......R....V...EI......ING...lYTEvrdpqk........................ [...]
+AGO12_ORYSJ/693-1012   ...........................................................................................ql-LIVILTE..-ISGS..YGRIKRI.CE...TE..V..GVITQCCAP.K..S.LQKG--................GKQYLENLAL.......KMNVK..........VGGR.N....tVLE.D....ALH.KK........I......P..I....L...T...D.....R.P..T.I..................................VFGADVTHPSPGE...............DASP..SIAAVVASMD..wP...E.V.T...K....Y.K.....C.LV..S...TQ.....S..........H.......R....E...EI......ISN...lYTEvkdplk........................ [...]
+B9FAL8_ORYSJ/438-757   ...........................................................................................ql-LIVILTE..-ISGS..YGRIKRI.CE...TE..V..GVITQCCAP.K..S.LQKG--................GKQYLENLAL.......KMNVK..........VGGR.N....tVLE.D....ALH.KK........I......P..I....L...T...D.....R.P..T.I..................................VFGADVTHPSPGE...............DASP..SIAAVVASMD..wP...E.V.T...K....Y.K.....C.LV..S...TQ.....S..........H.......R....E...EI......ISN...lYTEvkdplk........................ [...]
+A2XKQ7_ORYSI/654-972   ............................................................................................l-LIVILPE..-ISGS..YGRIKRI.CE...TE..V..GVITQCCAP.K..S.LQKG--................GKQYLENLAL.......KMNVK..........VGGR.N....tVLE.D....ALH.KK........I......P..I....L...T...D.....R.P..T.I..................................VFGADVTHPSPGE...............DASP..SIAAVVASMD..wP...E.V.T...K....Y.K.....C.LV..S...TQ.....S..........H.......R....E...EI......ISN...lYTEvkdplk........................ [...]
+C5WPM1_SORBI/697-1047  ............................................................................................l-LIVVLPD.aNASFF..YGRIKRL.CE...TE..L..GIITQCCIP.K..N.VHKG--................GRQYLQNLAL.......KINVK..........VGGR.N....tVLE.D....ALN.RR........I......H..L....L...T...D.....L.P..T.I..................................IFGADVTHPAPGE...............DASP..SIAAVVASMD..wP...E.V.S...K....Y.R.....C.LV..S...SQ.....G..........H.......R....E...EI......IAD...lFTQvkdpqkgllhggmirhaeh........... [...]
+C0PMV6_MAIZE/89-412    ............................................................................................l-LIVVLPD.aNASVF..YGRIKRL.CE...TE..L..GLVTQCCQP.K..N.VFKG--................GRQYLQNLAL.......KINVK..........VGGR.N....tVLE.D....ALN.RR........I......H..L....L...T...D.....L.P..T.I..................................IFGADVTHPAPGE...............DASP..SIAAVVASMD..wP...Q.V.A...K....Y.R.....C.LV..S...SQ.....G..........H.......R....E...EI......ITD...lFTQvkdpqk........................ [...]
+B8APJ4_ORYSI/9-101     ..................................................................................ykcsvssqshr--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+AGO11_ORYSJ/541-848    ............................................................................................l-LVIVLPD..ANATV.fYGRIKRL.CE...TE..L..GVITQCCLA.R..N.VQNV--................----------.......-----..........-GGR.N....tVLE.D....ALH.RR........I......P..L....L...T...D.....M.P..T.M..................................IFGADVTHPPAGE...............DSSP..SIAAVVASMD..wP...E.V.S...K....Y.K.....C.SV..S...SQ.....S..........H.......R....E...EI......IAD...lFTEvkdsqn........................ [...]
+B9FEW4_ORYSJ/531-767   .............................................................................anatvfygrikrlcet--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....E...L...D.....M.P..T.M..................................IFGADVTHPPAGE...............DSSP..SIAAVVASMD..wP...E.V.S...K....Y.K.....C.SV..S...SQ.....S..........H.......R....E...EI......IAD...lFTEvkdsqn........................ [...]
+B9FX53_ORYSJ/672-981   ...........................................................................................ll-LVVMTDD.kNNASL..YGDVKRI.CE...TE..I..GVLSQCCRA.K..Q.VYKERN................-VQYCANVAL.......KINAK..........AGGR.N.....SVF.L....NVE.AS........L......P..V....V...S...K.....S.P..T.I..................................IFGADVTHPGSFD...............ESTP..SIASVVASAD..wP...E.V.T...K....Y.N.....S.VV..R...MQ.....A..........S.......R....K...EI......IQD....LDS.............................. [...]
+AGO18_ORYSJ/747-1056   ...........................................................................................ll-LVVMTDD.kNNASL..YGDVKRI.CE...TE..I..GVLSQCCRA.K..Q.VYKERN................-VQYCANVAL.......KINAK..........AGGR.N.....SVF.L....NVE.AS........L......P..V....V...S...K.....S.P..T.I..................................IFGADVTHPGSFD...............ESTP..SIASVVASAD..wP...E.V.T...K....Y.N.....S.VV..R...MQ.....A..........S.......R....K...EI......IQD....LDS.............................. [...]
+B8B5Y3_ORYSI/745-1054  ...........................................................................................ll-LVVMTDD.kNNASL..YGDVKRI.CE...TE..I..GVLSQCCRA.K..Q.VYKERN................-VQYCANVAI.......KINAK..........AGGR.N.....SVF.L....NVE.AS........L......P..V....V...S...K.....S.P..T.I..................................IFGADVTHPGSFD...............ESTP..SIASVVASAD..wP...E.V.T...K....Y.N.....S.LV..R...MQ.....A..........S.......R....K...EI......IQD....LDS.............................. [...]
+C5X8G4_SORBI/699-1002  ............................................................................................l-LLAILPE..KNGNL..YGNFKRI.CE...TE..I..GIMSQCCLD.K..N.VRSA--................GPPYFANVAI.......KINAK..........FGGR.N.....LEF.A....NPK.ES........L......P..V....V...S...I.....E.P..T.I..................................IFGADVTHPAALD...............DTAP..SIASVVASQD..wP...T.V.A...N....Y.N.....G.IA..R...AQ.....G..........H.......R....K...EL......IDG....LED.............................. [...]
+C5X8G7_SORBI/41-220    ..........................................................................................ivk--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+C5WR49_SORBI/670-825   ..........................................................................................div--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+Q10P03_ORYSJ/678-756   ........................................................................................gtead--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B9F6T7_ORYSJ/653-731   ........................................................................................gtead--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B8AK97_ORYSI/622-700   ........................................................................................gtead--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B9ZU55_9TURB/580-893   ............................................................................................i-LFFALPR..KDSGY..YARVKVA.AD...QL..L..IVPSQVVVA.G..G.-KG---................ITQKVDLLLQ.......KVNAK..........LGGQ.N.....TDL.V....PMK.QD........-......P..A....M...E...N.....V.A..R.Llge............................pimFIGADVTHPDSHD..............eDGRP..SIAAVIGSSH...R...D.I.F...S....Y.A.....A.QV..R...AQ.....K..........Pia..krrA....K...ES......IDD....MQT.............................. [...]
+Q0DZJ0_ORYSJ/35-101    ........................................................................................rakre--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B9IL53_POPTR/1-160     .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.M..................................FMGADVTHPCPLE...............DISP..SAAAVVGSMN..wP...A.A.N...K....Y.V.....S.RM..R...SQ.....T..........H.......R....Q...EI......IWD....LGA.............................. [...]
+A5BG29_VITVI/774-895   ........................................................................................dlgam--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+A5BW27_VITVI/926-1238  ...........................................................................................ql-LICIMER..-KHKG..YADLKRI.AE...TS..I..GVVSQCCLY.Q..N.LGKS--................SSQFLANLAL.......KINAK..........MGGC.T....vALY.N....SLP.SQ........I......PrlL....R...P...D.....E.P..V.I..................................FMGADVTHPHPLD...............DFSP..SIAAVVGSMN..wP...A.A.N...K....Y.V.....S.RM..R...SQ.....T..........H.......R....Q...EI......IQD....LGA.............................. [...]
+B9S921_RICCO/670-981   ...........................................................................................ql-LICIMEK..-RHKG..YADLKRI.AE...TS..V..GVVSQCCLF.P..N.LGKL--................SSQFLANLAL.......KINAK..........VGGC.T....vALF.N....SLP.SQ........I......PrlL....H...S...D.....D.P..V.I..................................FMGADVTHPHPLD...............DFSP..SVAAVVGSMN..wP...A.A.N...K....Y.A.....S.RM..R...SQ.....T..........H.......R....Q...EI......IQD....LGA.............................. [...]
+B9HXP0_POPTR/520-831   ...........................................................................................ql-LICVMEK..-KHKG..YADLKRI.AE...TS..V..GVVTQCCLY.L..N.LGKL--................SSQFLANLAL.......KINAK..........VGGC.T....vALY.N....SLP.SQ........I......PrlL....R...S...N.....E.P..V.I..................................FMGADVTHPHPLD...............DISP..SVAAVVGSMN..wP...A.A.N...K....Y.V.....S.RM..R...SQ.....T..........H.......R....Q...EI......IQD....LGE.............................. [...]
+D3GBV1_LOTJA/669-981   ............................................................................................l-LICVMER..-KHKG..YADLKRI.AE...TS..I..GLISQCCLY.P..N.LCKL--................SSQFLANLAL.......KINAK..........VGGC.T....vALY.N....SLP.SQ........L......PrlF....H...I...D.....E.P..V.I..................................FMGADVTHPHPLD...............DSSP..SVAAVVGSMN..wP...T.A.N...K....Y.I.....S.RI..R...SQ.....T..........H.......R....Q...EI......IQD....LGP.............................. [...]
+A3AJI1_ORYSJ/584-892   ............................................................................................l-LICVMER..-RHQG..YADLKRI.AE...TS..I..GVVTQCCLY.S..N.LSKL--................TSQFLTNLAL.......KINAK..........LGGC.N....iALY.S....SFP.CQ........I......PriF....L...S...E.....E.P..V.M..................................FMGADVTHPHPLD...............DSSP..SVVAVVASMN..wP...S.A.N...K....Y.I.....S.RM..R...SQ.....T..........H.......R....K...EI......IEQ....LDV.............................. [...]
+AGO7_ORYSJ/709-1017    ............................................................................................l-LICVMER..-RHQG..YADLKRI.AE...TS..I..GVVTQCCLY.S..N.LSKL--................TSQFLTNLAL.......KINAK..........LGGC.N....iALY.S....SFP.CQ........I......PriF....L...S...E.....E.P..V.M..................................FMGADVTHPHPLD...............DSSP..SVVAVVASMN..wP...S.A.N...K....Y.I.....S.RM..R...SQ.....T..........H.......R....K...EI......IEQ....LDV.............................. [...]
+A2YQ96_ORYSI/716-1024  ............................................................................................l-LICVMER..-RHQG..YADLKRI.AE...TS..I..GVVTQCCLY.S..N.LSKL--................TSQFLTNLAL.......KINAK..........LGGC.N....iALY.S....SFP.CQ........I......PriF....L...S...E.....E.P..V.M..................................FMGADVTHPHPLD...............DSSP..SVVAVVASMN..wP...S.A.N...K....Y.I.....S.RM..R...SQ.....T..........H.......R....K...EI......IEQ....LDV.............................. [...]
+D0EYF3_MAIZE/683-995   ............................................................................................l-LICVMER..-RHRG..YADLKRI.AE...TS..I..GVLTQCCLY.S..N.LSKL--................SFQFLANLAL.......KINAK..........LGGC.N....vALY.N....SLP.CQ........I......P..R....Vf.sD...E.....E.P..A.M..................................FMGADVTHPHPLD...............DSSP..SVVAVVASMN..wP...S.A.N...K....Y.I.....S.RM..R...SQ.....T..........H.......R....K...EI......IER....LDV.............................. [...]
+C5WVP1_SORBI/688-996   ............................................................................................l-LICVMER..-RHRG..YADLKRI.AE...TS..I..GVLTQCCLY.S..N.LSKL--................SFQFLANLAL.......KINAK..........VGGS.N....vALY.N....SLP.CQ........I......P..R....Vf.sD...K.....E.P..V.M..................................FMGADVTHPHPLD...............DSSP..SVVAVVASMN..wP...S.A.N...K....Y.I.....S.RM..R...SQ.....T..........H.......R....K...EI......IER....LDV.............................. [...]
+Q9C793_ARATH/649-950   ............................................................................................l-IICVMEK..-KHKG..YGDLKRI.SE...TR..I..GVVTQCCLY.P..N.ITKL--................SSQFVSNLAL.......KINAK..........IGGS.M....tELY.N....SIP.SH........I......PrlL....R...P...D.....E.P..V.I..................................FMGADVTHPHPFD...............DCSP..SVAAVVGSIN..wP...E.A.N...R....Y.V.....S.RM..R...SQ.....T..........H.......R....Q...EI......IQD....LDL.............................. [...]
+A3AXD9_ORYSJ/720-1023  ....................................................................................llfcpmlnr--------..--CHG..YKTLKLM.CE...TE..L..GIQTQCFLS.T..A.AKLDEK...............rQDQYITNLAL.......KINGK..........IGGS.N.....MQL.D....P--.DS........I......P..V....V...S...A.....K.D..F.M..................................FIGADVNHPPPGNv.............sKDIP..SIAAVVASVD...K...G.A.S...K....Y.V.....T.RI..R...AQ.....Y..........H.......R....C...EM......IQN....LGD.............................. [...]
+A2XXJ0_ORYSI/688-991   ....................................................................................llfcpmlnr--------..--CHG..YKTLKLM.CE...TE..L..GIQTQCFLS.T..A.AKLDEK...............rQDQYITNLAL.......KINGK..........IGGS.N.....MQL.D....P--.DS........I......P..V....V...S...A.....K.D..F.M..................................FIGADVNHPPPGNv.............sKDIP..SIAAVVASVD...K...G.A.S...K....Y.V.....T.RI..R...AQ.....Y..........H.......R....C...EM......IQN....LGD.............................. [...]
+AGO3_ORYSJ/720-1023    ....................................................................................llfcpmlnr--------..--CHG..YKTLKLM.CE...TE..L..GIQTQCFLS.T..A.AKLDEK...............rQDQYITNLAL.......KINGK..........IGGS.N.....MQL.D....P--.DS........I......P..V....V...S...A.....K.D..F.M..................................FIGADVNHPPPGNv.............sKDIP..SIAAVVASVD...K...G.A.S...K....Y.V.....T.RI..R...AQ.....Y..........H.......R....C...EM......IQN....LGD.............................. [...]
+Q00RR5_ORYSA/745-1048  ....................................................................................llfcpmlnr--------..--CHG..YKTLKLM.CE...TE..L..GIQTQCFLS.T..A.AKLDEK...............rQDQYITNLAL.......KINGK..........IGGS.N.....MQL.D....P--.DS........I......P..V....V...S...A.....K.D..F.M..................................FIGADVNHPPPGNv.............sKDIP..SIAAVVASVD...K...G.A.S...K....Y.V.....T.RI..R...AQ.....Y..........H.......R....C...EM......IQN....LGD.............................. [...]
+B9FCH7_ORYSJ/626-928   ..........................................................................................qll--FCPMSD..-QHPG..YKTLKLI.CE...TQ..L..GIQTQCFLS.F..L.ANKQQG................QDQYMSNLAL.......KINGK..........IGGS.N....iQLF.G....ESL.P-........-......-..R....I...S...G.....A.P..Y.M..................................FIGADVNHPSPGN...............VESP..SIAAVVASVD...Q...G.A.S...K....Y.V.....P.RI..R...AQ.....P..........H.......R....C...EV......IQH....LGD.............................. [...]
+AGO2_ORYSJ/687-989     ..........................................................................................qll--FCPMSD..-QHPG..YKTLKLI.CE...TQ..L..GIQTQCFLS.F..L.ANKQQG................QDQYMSNLAL.......KINGK..........IGGS.N....iQLF.G....ESL.P-........-......-..R....I...S...G.....A.P..Y.M..................................FIGADVNHPSPGN...............VESP..SIAAVVASVD...Q...G.A.S...K....Y.V.....P.RI..R...AQ.....P..........H.......R....C...EV......IQH....LGD.............................. [...]
+Q00RR6_ORYSA/693-995   ..........................................................................................qll--FCPMSD..-QHPG..YKTLKLI.CE...TQ..L..GIQTQCFLS.F..L.ANKQQG................QDQYMSNLAL.......KINGK..........IGGS.N....iQLF.G....ESL.P-........-......-..R....I...S...G.....A.P..Y.M..................................FIGADVNHPSPGN...............VESP..SIAAVVASVD...Q...G.A.S...K....Y.V.....P.RI..R...AQ.....P..........H.......R....C...EV......IQH....LGD.............................. [...]
+A2XXI9_ORYSI/693-995   ..........................................................................................qll--FCPMSD..-QHPG..YKTLKLI.CE...TQ..L..GIQTQCFLS.F..L.ANKQQG................QDQYMSNLAL.......KINGK..........IGGS.N....iQLF.G....ESL.P-........-......-..R....I...S...G.....A.P..Y.M..................................FIGADVNHPSPGN...............VESP..SIAAVVASVD...Q...G.A.S...K....Y.V.....P.RI..R...AQ.....P..........H.......R....C...EV......IQH....LGD.............................. [...]
+C5YG12_SORBI/746-1048  ..........................................................................................qll--FCPMSE..-QHPG..YKTLKLI.CD...TQ..L..GILTQCFLS.D..R.ANKPNG................QDQYMTNLAL.......KINGK..........LGGS.N.....VQL.F....DSL.PR........-......-..V....G...G...G.....A.P..F.M..................................FIGADVNHPSPGN...............VESP..SIAGVVASIN...S...G.A.N...K....Y.V.....S.RI..R...AQ.....P..........H.......R....C...EV......IQQ....LGE.............................. [...]
+C0PIX4_MAIZE/1-297     ..........................................................................................mse--------..-QHSG..YKTLKLI.CD...TQ..L..GILTQCLLS.D..R.ANNRKG................QDQYMTNLAL.......KINGK..........LGGS.N.....VQL.F....DSL.PR........-......-..V....G...G...G.....V.P..F.M..................................FIGADVNHPSPGN...............VESP..SIAAVVASVN...S...G.V.N...K....Y.V.....T.RI..R...AQ.....P..........H.......R....C...EV......IQQ....LGE.............................. [...]
+Q9SHF2_ARATH/841-1145  ............................................................................................l-VLCAMTG..-KHDG..YKTLKWI.AE...TK..L..GLVTQCFLT.I..S.AIKGET...............vSDQYLANLAL.......KINAK..........VGGT.N.....VEL.V....DNI.FS........F......-..F....K...K...E.....D.K..V.M..................................FIGADVNHPAAHD...............NMSP..SIVAVVGTLN..wP...E.A.N...R....Y.A.....A.RV..K...AQ.....S..........H.......R....K...EE......IQG....FGE.............................. [...]
+Q9SHF3_ARATH/665-965   ...........................................................................................tl-VLCAMSR..-KDDG..YKTLKWI.AE...TK..L..GLVTQCFLT.G..P.ATKG--................GDQYRANLAL.......KMNAK..........VGGS.N.....VEL.M....DTF.SF........-......-..F....K...K...E.....D.E..V.M..................................FIGADVNHPAARD...............KMSP..SIVAVVGTLN..wP...E.A.N...R....Y.A.....A.RV..I...AQ.....P..........H.......R....K...EE......IQG....FGD.............................. [...]
+Q8GX33_ARATH/191-491   ...........................................................................................tl-VLCAMSR..-KDDG..YKTLKWI.AE...TK..L..GLVTQCFLT.G..P.ATKG--................GDQYRANLAL.......KMNAK..........VGGS.N.....VEL.M....DTF.SF........-......-..F....K...K...E.....D.E..V.M..................................FIGADVNHPAARD...............KMSP..SIVAVVGTLN..wP...E.A.N...R....Y.A.....A.RV..I...AQ.....P..........H.......R....K...EE......IQG....FGD.............................. [...]
+B9SSM8_RICCO/639-934   ............................................................................................i-LVCVLPK..-EDPG..YSNLKWI.CE...TK..V..GIVTQCCLS.E..N.AFRP--................KAQFLANLAL.......KINAK..........LGGS.N.....VEL.F....KQP.QC........-......-..L....Q...S...K.....G.H..V.M..................................FIGADVNHPSSYN...............STSP..SIAAVVATMN..wP...A.A.N...Q....Y.G.....A.LI..C...PQ.....D..........H.......R....A...EK......ILK....FGD.............................. [...]
+A5AFZ6_VITVI/719-1022  ...........................................................................................qi-LVCVMAR..-KDPG..YNYLKWF.CE...TN..I..GIVTQCCLS.S..P.ANKA--................NDQYLANLAL.......KMNAK..........LGGS.N.....VEL.I....DRL.PH........F......-..-....E...N...E.....G.Y..V.M..................................FVGADVNHPGAWN...............SASP..SIAAVVATVN..wP...A.V.N...R....Y.A.....A.RV..R...PQ.....L..........H.......R....T...EK......ILN....FGD.............................. [...]
+A5CBU3_VITVI/601-900   ...........................................................................................qi-LVCVMAR..-RDAG..YGYLKWF.SE...TR..L..GMVTQCCLS.S..P.ANKA--................SDQYLANLAL.......KLNAK..........LGGS.N.....VEL.I....ERL.PR........F......E..-....-...G...E.....G.H..V.M..................................FIGADVNHPGSQN...............TTSP..SIAAVVATVN..wP...A.A.N...R....Y.A.....A.RI..R...PQ.....A..........H.......R....M...EK......IQN....FGA.............................. [...]
+A5B8D3_VITVI/625-924   ...........................................................................................qi-LVCVMAR..-KDAG..YGYLKWF.AE...TK..L..GMVTQCCLS.R..P.ANKV--................SDHHLANLAL.......KLNAK..........LGGS.N.....VEL.I....XRL.PR........F......E..-....-...G...E.....G.H..V.M..................................FIGADVNHPGSQN...............TTSP..SIAAVVATXN..wP...A.A.N...R....Y.A.....A.RI..R...PQ.....A..........H.......R....M...EK......IQN....FGA.............................. [...]
+B9S3I1_RICCO/146-445   ...........................................................................................qi-LICVMSR..-KDPG..YKYLKWI.SE...TK..V..GVVTQCCLS.D..Y.ANKG--................HDQYFANLAL.......KINAK..........LGGN.N.....VEL.N....DRL.PY........F......-..-....E...G...E.....D.H..V.M..................................FLGADVNHPGSRN...............TTSP..SIAAVVATVN..wP...A.A.N...R....Y.A.....A.RV..R...PQ.....D..........H.......R....K...EK......ILN....FGD.............................. [...]
+B9NA51_POPTR/676-973   ...........................................................................................qf-LLCVMSK..-KDPG..YKYLKWI.CE...TK..V..GIVTQCCLS.R..S.ANKV--................NDQYLANIGL.......KINAK..........LGGS.N.....AEL.S....D--.-R........L......P..Y....F...G...D.....E.N..HiM..................................FIGADVNHPAARN...............TTSP..SIAAVVGTTN..wP...A.A.N...R....Y.A.....A.RV..R...PQ.....D..........H.......R....C...EK......ILN....FGD.............................. [...]
+A8PFS7_COPC7/454-749   ....................................................................fvvvlpqggdeirigvkhfgnfinp--------..-----..-------.--...--..-..GIATQCLKG.F..Q.CRGA--................RPQYWANVMI.......QVNGK..........LGGI.-.....HAV.P....NST.TS........G......S..L....V...D...E....aI.A..T.M..................................LIGADVTHPPPGDq.............sKHKP..SFAAIVWSWD...R...H.Y.A...R....Y.R.....A.RD..S...IQ.....R..........G.......R....E...EI......IQH....MKP.............................. [...]
+A8NXQ6_COPC7/547-849   ............................................................................................l-IVVVLPDgpVANEI..YSQVKFF.GD...VK..M..GVHTQCMRA.M..R.CFGG--................NNQYFANIAL.......KLNAR..........LGGV.Nv...aPDL.S....DGV.SR........N......L..L....S...P...P.....N.K..T.L..................................VMGADVIHPSPGS...............EGRP..SFTAVVGSTD...C...N.M.T...R....F.V.....S.ST..R...AQ.....T..........S.......R....E...EI......IDD....LKD.............................. [...]
+A8P6A7_COPC7/477-803   ............................................................................................l-IFAVLPP..NSGDI..YTGVKRF.GD...VT..M..GIATQCLLS.N..K.CKKG--................NHQYWANVTL.......KVNVK..........LGGI.N....fY--.P....ELR.GD........I......-..L....D...P...A.....K.P..T.I..................................IMGADAIHPPPGV...............RDKP..SVTALVSSID...S...K.L.A...R....Y.V.....A.TS..R...VQ.....K..........Gsds.gkgG....R...EI......ILD....MED.............................. [...]
+B0CXE0_LACBS/567-880   .............................................................................................LIVVILPD..GGDDI..YTAVKHF.GD...VT..M..GVATQCLLA.K..K.CYRA--................NAQYWANVML.......KVNVK..........LDGI.Ns...vPDL.P....SLT.DP........-......-..-....-...-...A.....H.P..T.I..................................IMGADVIHPAPGT...............EGRP..SFTALVASVD...T...T.V.S...K....Y.V.....A.MS..R...VQ.....T..........G.......R....Q...EM......IDD....LED.............................. [...]
+A8PFQ6_COPC7/458-767   ............................................................................................l-VVVILPE..GGDEI..YTSVKHF.GD...IV..R..GVATQCLIG.R..K.CSRA--................RPQYWANVLL.......KVNVK..........LGGI.N.....SII.D....PSG.SP........L......-..A....D...P...A.....N.P..T.V..................................VMGADVIHPAPGS...............EGRP..SFTALVSSVD...T...H.A.T...K....Y.I.....A.CN..N...VQ.....E..........G.......R....T...EI......IED....LEA.............................. [...]
+B0CYG1_LACBS/553-863   .............................................................................................LIVVVLPE..GGNDI..YTAVKHF.GD...IT..M..GVATQCMKS.S..K.CFRA--................KPQYYANISL.......KINVK..........LGGI.N.....TI-.P....D-P.SS........V......S..V....L...T...Dp...hQ.P..T.I..................................VMGADVIHPAPGS...............DGRP..SFTALVANVD...S...D.T.A...K....Y.I.....A.DS..R...VQ.....T..........S.......R....Q...EM......IEE....LQA.............................. [...]
+B0D2D0_LACBS/417-738   ............................................................................................l-IVAVLPD..NVGDL..YSTIKHH.GD...IR..F..GVATQCLKS.H..K.CSRA--................KEQYWKNVML.......KVNVK..........LGGI.N.....VVP.S....STE.LS........D......P..A....-...-...-.....N.P..T.Ivigtpsai..................iasiltfcLSGADTAHPAPGA...............HDRP..SFTSVVANVD...S...N.V.A...K....Y.V.....A.ST..R...VQ.....K..........G.......R....Q...EI......ITD....LKE.............................. [...]
+B2RFN0_OIKDI/550-850   ...........................................................................................fa--LVILPR..RDSHI..YSIVKEK.AE...LV..F..GVVTQCVQS.R..N.VERA--................NAMFYGNLLQ.......KINVK..........LGGV.N.....TKV.V....NRI.Q-........-......-..-....L...F...T.....K.P..I.M..................................IVGLSFSHPAPGS...............-RNP..SIVTASFSCD...A...S.G.T...K....Y.F.....V.GK..R...LQ.....S..........S.......R....F...SL......ATG....IKD.............................. [...]
+C1DZY0_9CHLO/572-888   ............................................................................................i-VFCVLPK.fDNKHI..YNSIKEC.AE...IE..I..GVRTQCIMN.K..V.GGGGGG...............lNDQTLANIMQ.......KVNAK..........LGGI.N.....MLV.S....PVT.SP........NaaprspT..Q....L...F...S.....K.A..T.I..................................IFGGDVSHASPGS...............-QAS..SIAALVGNIN...R...S.C.T...Q....Y.V.....A.RL..S...AQ.....A..........N.......R....K...EM......IDD....LKS.............................. [...]
+Q4PLA9_PICGL/597-913   ............................................................................................f-LLCILPE.rKNSDL..YGPWKRK.FL...AD..L..GVINQCIAP.P..N.MRKV--................NDQYLTNVAL.......KINAK..........VGGL.N....sVLS.V....EFA.HK........I......P..K....I...S...T.....K.P..T.I..................................IIGMDVSHGSPGH...............ADSP..SISAVVSSRE..wP...L.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IEA...lYKPlpsg.......................... [...]
+A5BG74_VITVI/577-717   .............................................................................................FILCILPQ.kKNCDI..YGPWKRQ.CL...SG..C..GVPTQCIAP.S..T.PVV---................NDQYLTNLLL.......KINAK..........LGGL.N....sLLT.M....GYC.PS........L......R..L....I...S...T.....I.P..T.L..................................ILGMDVSHGSPGR...............ADVP..SIAAVVSSRH..wP...S.I.S...Q....Y.R.....A.TV..R...TQ.....S..........P.......K....L...EM......IDS....L--.............................. [...]
+Q3E984_ARATH/528-708   ............................................................................................f-LLCILEK..KNSDV..YEKSCSM.WN...CE..C..IVPPQNL--.-..-.------................NDQYLTNLLL.......KINAK..........LGGL.N....sVLD.M....ELS.GT........M......P..L....V...M...R.....V.P..T.I..................................IIGMDVSHGSPGQ..............sDHIP..SIAAVVSSRE..wP...L.I.S...K....Y.R.....A.CV..R...TQ.....S..........P.......K....V...EM......IDS...lFKPvsdk.......................... [...]
+Q2LFC2_NICBE/565-873   ............................................................................................f-LLCLLPE.rKNCDI..YGPWKRK.NL...AD..Y..GIVTQCLAP.G..R.V-----................NDQYLTNLLL.......KINAK..........LGGL.N....sVLA.I....EHS.PS........I......P..M....V...S...K.....V.P..T.M..................................ILGMDVSHGSPGQ...............SDVP..SIAAVVSSRQ..wP...S.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IDN...lFKKvsdt.......................... [...]
+Q2LFC1_NICBE/558-866   ............................................................................................f-LLCLLPE.rKNCDI..YGPWKRK.NL...AE..F..GIVTQCIAP.T..R.V-----................NDQYITNVLL.......KINAK..........LGGL.N....sMLT.V....EHA.PA........I......P..M....V...S...K.....V.P..T.I..................................ILGMDVSHGSPGQ...............SDVP..SIAAVVSSRQ..wP...S.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IDN...lFKRasdt.......................... [...]
+B9SP45_RICCO/574-882   ............................................................................................f-LLCLLPE.rKNSDL..YGPWKKK.NL...SD..F..GIVTQCIAP.Q..R.V-----................NDQYLTNVLL.......KINAK..........LGGL.N....sMLA.V....EHS.PS........I......P..L....V...S...K.....V.P..T.I..................................IIGMDVSHGSPGH...............SDVP..SIAAVVSSRQ..wP...L.I.S...R....Y.R.....A.CV..R...TQ.....S..........P.......K....V...EM......IDS...lYKPvsdt.......................... [...]
+B9HK80_POPTR/565-884   ............................................................................................f-LLCILPE.rKNSDI..YGPWKRK.NL...SD..L..GIVTQCIAP.T..K.V-----................NDQYLTNVLL.......KINAKvefcnvipfeLGGM.N....sLLS.I....EHA.PS........I......P..L....V...S...K.....L.P..T.L..................................ILGMDVSHGSPGH...............SDVP..SIAAVVSSRH..wP...L.I.S...R....Y.R.....A.SV..R...TQ.....S..........Q.......K....V...EM......IAN...lFKPvagt.......................... [...]
+AGO4A_ORYSJ/557-865    ............................................................................................f-LLCVLAE.rKNSDI..YGPWKRK.CL...AE..F..GIITQCVAP.T..R.V-----................NDQYITNVLL.......KINAK..........LGGL.N....sLLQ.I....ETS.PS........I......P..L....V...S...K.....V.P..T.I..................................ILGMDVSHGSPGQ...............SDIP..SIAAVVSSRE..wP...L.V.S...K....Y.R.....A.SV..R...SQ.....S..........P.......K....L...EM......IDG...lFKPqgaq.......................... [...]
+B8ACN1_ORYSI/524-832   ............................................................................................f-LLCVLAE.rKNSDI..YGPWKRK.CL...AE..F..GIITQCVAP.T..R.V-----................NDQYITNVLL.......KINAK..........LGGL.N....sLLQ.I....ETS.PS........I......P..L....V...S...K.....V.P..T.I..................................ILGMDVSHGSPGQ...............SDIP..SIAAVVSSRE..wP...L.V.S...K....Y.R.....A.SV..R...SQ.....S..........P.......K....L...EM......IDG...lFKPqgaq.......................... [...]
+A2ZRR6_ORYSJ/650-958   ............................................................................................f-LLCVLAE.rKNSDI..YGPWKRK.CL...AE..F..GIITQCVAP.T..R.V-----................NDQYITNVLL.......KINAK..........LGGL.N....sLLQ.I....ETS.PS........I......P..L....V...S...K.....V.P..T.I..................................ILGMDVSHGSPGQ...............SDIP..SIAAVVSSRE..wP...L.V.S...K....Y.R.....A.SV..R...SQ.....S..........P.......K....L...EM......IDG...lFKPqgaq.......................... [...]
+C0HGZ0_MAIZE/552-859   ............................................................................................f-LLCVLAE.rKNSDI..YGPWKKK.CL...AE..F..GIVTQCVAP.T..R.V-----................NDQYLTNVLL.......KINAK..........LGGL.N....sLLQ.I....ETS.PA........I......P..L....V...S...K.....V.P..T.I..................................ILGMDVSHGSPGH...............SDIP..SVAAVVSSRE..wP...L.I.S...K....Y.R.....A.SV..R...TQ.....S..........P.......K....M...EM......IDS...lFKPret........................... [...]
+B4FL08_MAIZE/45-352    ............................................................................................f-LLCVLAE.rKNSDI..YGPWKKK.CL...AE..F..GIVTQCVAP.T..R.V-----................NDQYLTNVLL.......KINAK..........LGGM.N....sLLQ.I....ETS.PA........I......P..L....V...S...K.....V.P..T.I..................................ILGMDVSHGSPGH...............SDVP..SIAAVVSSRE..wP...L.I.S...K....Y.R.....A.SV..R...TQ.....S..........P.......K....M...EM......IDS...lFKPrea........................... [...]
+C5YX36_SORBI/564-870   ............................................................................................f-LMCLLPE.rKNCEV..YGPWKRK.CL...AE..F..GIVTQCLAP.T..R.VN----................-DPYLLNLLM.......KINAK..........LGGL.N....sLLQ.V....EAS.PS........I......P..H....V...S...E.....V.P..T.I..................................ILGMDVSHGHPGQ...............-DRP..SVAAVVSSRQ..wP...L.I.S...K....Y.R.....A.SV..H...TQ.....S..........A.......R....L...EM......MSS...lFKPrgt........................... [...]
+B8AUX7_ORYSI/565-872   ............................................................................................f-LLCLLPE.rKNCEV..YGPWKRK.CL...AE..F..GIVTQCLAP.Q..R.V-----................NDQYLLNLLL.......KINAK..........LGGI.N....sLLQ.I....EAS.PS........I......P..L....V...S...K.....T.P..T.I..................................ILGMDVSHGQPGQ...............SDRP..SIAAVVSSRQ..wP...L.I.S...K....Y.R.....A.SV..H...TQ.....S..........P.......K....L...EM......MSS...lFKPrgt........................... [...]
+AGO4B_ORYSJ/565-872    ............................................................................................f-LLCLLPE.rKNCEV..YGPWKRK.CL...AE..F..GIVTQCLAP.Q..R.V-----................NDQYLLNLLL.......KINAK..........LGGI.N....sLLQ.I....EAS.PS........I......P..L....V...S...K.....T.P..T.I..................................ILGMDVSHGQPGQ...............SDRP..SIAAVVSSRQ..wP...L.I.S...K....Y.R.....A.SV..H...TQ.....S..........P.......K....L...EM......MSS...lFKPrgt........................... [...]
+Q01MP5_ORYSA/565-872   ............................................................................................f-LLCLLPE.rKNCEV..YGPWKRK.CL...AE..F..GIVTQCLAP.Q..R.V-----................NDQYLLNLLL.......KINAK..........LGGI.N....sLLQ.I....EAS.PS........I......P..L....V...S...K.....T.P..T.I..................................ILGMDVSHGQPGQ...............SDRP..SIAAVVSSRQ..wP...L.I.S...K....Y.R.....A.SV..H...TQ.....S..........P.......K....L...EM......MSS...lFKPrgt........................... [...]
+Q9ZVD5_ARATH/577-885   .............................................................................................FILCVLPD.kKNSDL..YGPWKKK.NL...TE..F..GIVTQCMAP.T..R.QPND--................--QYLTNLLL.......KINAK..........LGGL.N....sMLS.V....ERT.PA........F......T..V....I...S...K.....V.P..T.I..................................ILGMDVSHGSPGQ...............SDVP..SIAAVVSSRE..wP...L.I.S...K....Y.R.....A.SV..R...TQ.....P..........S.......K....A...EM......IES...lVKKngt........................... [...]
+Q56X15_ARATH/234-541   ............................................................................................f-LLCILAE.rKNSDV..YGPWKKK.NL...VD..L..GIVTQCIAP.T..R.L-----................NDQYLTNVLL.......KINAK..........LGGL.N....sLLA.M....ERS.TA........M......P..K....V...T...Q.....V.P..T.I..................................IVGMDVSHGSPGQ...............SDIP..SIAAVVSSRQ..wP...L.I.S...K....Y.K.....A.CV..R...TQ.....S..........R.......K....M...EM......IDN...lFKPvng........................... [...]
+Q84VQ0_ARATH/546-853   ............................................................................................f-LLCILAE.rKNSDV..YGPWKKK.NL...VD..L..GIVTQCIAP.T..R.L-----................NDQYLTNVLL.......KINAK..........LGGL.N....sLLA.M....ERS.PA........M......P..K....V...T...Q.....V.P..T.I..................................IVGMDVSHGSPGQ...............SDIP..SIAAVVSSRQ..wP...L.I.S...K....Y.K.....A.CV..R...TQ.....S..........R.......K....M...EM......IDN...lFKPvng........................... [...]
+Q84YI4_ARATH/550-857   ............................................................................................f-LLCILAE.rKNSDV..YGPWKKK.DL...VD..L..GIVTQCIAP.T..R.L-----................NDQYLTNVLL.......KINAK..........LGGL.N....sLLA.M....ERS.PA........M......P..K....V...T...Q.....V.P..T.I..................................IVGMDVSHGSPGQ...............SDIP..SIAAVVSSRQ..wP...L.I.S...K....Y.K.....A.CV..R...TQ.....S..........R.......K....M...EM......IDN...lFKPvng........................... [...]
+A5AMR1_VITVI/53-183    .......................................................................................lptllh--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B9SN14_RICCO/570-878   ............................................................................................f-LLSIFPD.rKNSDI..YGPWKRK.NL...AE..F..GIFNQCLCS.P..N.RL----................SEMYVTNVLM.......KINAK..........LGGL.N....tFLA.V....EQS.RN........V......P..F....V...S...K.....V.P..T.I..................................IFGMDVSHGSPGQ...............SDVP..SIAAVVSSRN..wP...L.L.S...R....Y.R.....A.SV..H...SQ.....S..........P.......K....V...EM......IDS...lFKPegk........................... [...]
+B9HDH5_POPTR/582-891   ............................................................................................f-LVCLLPD.rKNSDI..YGPWKRK.NL...AE..Y..GIFNQCLAP.T..R.V-----................NEQYILNVLL.......KINAK..........LGGL.N....sLLA.M....EQS.RN........I......P..F....V...S...K.....V.P..T.I..................................IFGMDVSHGSPGQ...............SDMP..SIAAVVSSRN..wP...L.L.S...R....Y.R.....A.SV..R...SQ.....S..........P.......K....V...EM......VDS....LFTltpdk......................... [...]
+B9IHG7_POPTR/573-882   ............................................................................................f-LVCLLPD.rKNSDI..YGPWKRK.NL...AE..Y..GIFNQCLAP.T..R.V-----................NDQYILNVLL.......KINAK..........LGGL.N....sLLA.M....EQS.RN........I......P..F....V...S...K.....V.P..T.I..................................IFGMDVSHGSPGQ...............SDIP..SIAAVVSSRN..wP...L.L.S...R....Y.R.....A.SV..R...SQ.....S..........P.......K....V...EM......VDS....LFKltadk......................... [...]
+AGO16_ORYSJ/535-844    ............................................................................................f-LLCVLPE.rKNCDL..YGPWKKK.NL...HE..M..GIITQCIVP.S..V.--KM--................NDQYYTNVLL.......KINAK..........LGGM.N....sKLS.L....EHR.HM........I......P..I....V...N...Q.....T.P..T.L..................................ILGMDVSHGSPGR...............ADVP..SIAAVVGSRC..wP...L.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IDS...lFKPlddg.......................... [...]
+B8B4Z4_ORYSI/515-824   ............................................................................................f-LLCVLPE.rKNCDL..YGPWKKK.NL...HE..M..GIITQCIVP.S..V.--KM--................NDQYYTNVLL.......KINAK..........LGGM.N....sKLS.L....EHR.HM........I......P..I....V...N...Q.....T.P..T.L..................................ILGMDVSHGSPGR...............ADVP..SIAAVVGSRC..wP...L.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IDS...lFKPlddg.......................... [...]
+B9FWI9_ORYSJ/515-824   ............................................................................................f-LLCVLPE.rKNCDL..YGPWKKK.NL...HE..M..GIITQCIVP.S..V.--KM--................NDQYYTNVLL.......KINAK..........LGGM.N....sKLS.L....EHR.HM........I......P..I....V...N...Q.....T.P..T.L..................................ILGMDVSHGSPGR...............ADVP..SIAAVVGSRC..wP...L.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IDS...lFKPlddg.......................... [...]
+C0P9X1_MAIZE/1-253     .....................................................................................mnsklale--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....-HR.QM........I......P..V....V...T...Q.....I.P..T.L..................................ILGMDVSHGSPGR...............ADIP..SIAAVVGSRC..wP...L.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IDS...lFKPlddg.......................... [...]
+C5YU43_SORBI/1-285     ............................................................................................m--------..-----..-------.--...--..-..GIVTQCIAP.S..N.--KM--................NDQYFTNVLL.......KINAK..........LGGM.N....sKLA.L....EHR.QM........I......P..V....V...T...Q.....I.P..T.L..................................ILGMDVSHGSPGR...............ADIP..SIAAVVGSRC..wP...L.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IDS...lFKPlddg.......................... [...]
+O48771_ARATH/542-860   .............................................................................................FILCILPE.rKTSDI..YGPWKKI.CL...TE..E..GIHTQCICP.I..K.I-----................SDQYLTNVLL.......KINSK..........LGGI.N....sLLG.I....EYS.YN........I......P..L....I...N...K.....I.P..T.L..................................ILGMDVSHGPPGR...............ADVP..SVAAVVGSKC..wP...L.I.S...R....Y.R.....A.AV..R...TQ.....S..........P.......R....L...EM......IDS...lFQPiente......................... [...]
+B9T7B0_RICCO/516-824   .............................................................................................FILCVLPE.rKNSDI..YGPWKKK.CL...SD..F..GIVTQCISP.F..K.I-----................NDQYLTNVLL.......KINSK..........LGGI.N....sLLE.I....EHS.KQ........I......R..L....I...M...D.....T.P..T.M..................................ILGMDVSHGARGC...............SDIP..SVAAVVGSRY..wP...L.I.S...R....Y.R.....A.CV..R...TQ.....S..........P.......K....V...EM......IDA....LFKltdd.......................... [...]
+B9IAL0_POPTR/521-830   .............................................................................................FILCVLAE.rKNSDI..YGPWKKT.SL...SD..F..GIVTQCISP.T..K.I-----................NDQYLTNVLL.......KINSK..........LGGI.N....sLLA.I....EHS.SH........I......P..L....I...M...D.....T.P..T.M..................................ILGMDVSHGSPGR...............SDMP..SVAAVVGSRC..wP...L.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IDA...lYKPlang.......................... [...]
+A5CB61_VITVI/15-305    ............................................................................................f-LLCVLPE.kKNSEI..YGPWKKR.SL...SD..F..GIVTQCISP.T..K.I-----................NDQYLTNVLL.......KINTK..........LGGT.N....sLLA.I....EHT.SR........I......P..L....I...K...D.....T.P..T.M..................................ILGMDVSHGSPGQ...............ADVP..SIAAVVGSRC..wP...L.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IDA...lYKPlang.......................... [...]
+B9EV67_ORYSJ/22-172    .........................................................................cgisiaqeftqvaarvlpap--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B8ACN0_ORYSI/540-670   .....................................................................................aceflane--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+AGO15_ORYSJ/546-853    ............................................................................................f-VLCVLPE.rKNCDI..YGPWKRM.CL...VK..Y..GIVTQCLAP.T..K.I-----................NDQYLTNVLL.......KINAK..........LGGL.N....sLLQ.I....ERN.QA........I......P..L....L...S...K.....T.P..T.I..................................ILGMDVSHGSPGR...............DDVP..SVAAVVSSLE..wP...L.I.S...K....Y.K.....A.SV..C...TQ.....S..........P.......R....L...EM......IDS....LFKlvgn.......................... [...]
+A9SKW0_PHYPA/518-721   ............................................................................................f-ILVALPTdsSSSNL..YVAFKRY.FE...MR..I..GVISQCMIK.P..R.QF----................NPQYLWNLVL.......KINQK..........MEGF.N....sPLT.S....KIT.S-........-......-..C....L...G...G.....A.P..T.I..................................IFGIDVSHGSIGE...............-NFP..SVAAVVATKN..wP...D.V.F...H....F.A.....T.RA..G...TQ.....Q..........S.......K....L...KL......IEG....LWEpksamvn....................... [...]
+A9RNH7_PHYPA/593-893   .............................................................................................FILVILPD..KDSPI..YVPFKRF.CE...MK..I..GVVSQCMVK.P..R.QLND--................--QYLGNLAL.......KINLK..........MGGF.N....sPLS.P....R--.--........M......V..S....C...L...G.....P.S..T.I..................................IFGMDVSHGSPGE...............SSVP..SIAAVVATKN..wP...D.V.F...H....Y.S.....T.QV..R...IQ.....P..........A.......K....T...EM......IEG....LHDsk............................ [...]
+A9SRY5_PHYPA/573-879   .............................................................................................FILAILAE..KDSPI..YVPFKRL.CE...IR..L..GIISQCMVK.P..R.TLND--................--QFLGNLAL.......KINLK..........MGGL.N.....SPL.S....QRM.L-........-......-..H....C...L...G.....Q.S..T.I..................................IFGMDVTHGSPGD...............VEIP..SIAAVVATKN..wP...E.V.F...H....Y.S.....T.QV..K...VQ.....P..........A.......R....M...EM......IQG....LYEpe............................ [...]
+A9U2A5_PHYPA/597-903   .............................................................................................FILVILSD..KDSPI..YAPFKRF.CE...MK..I..GIISQCMVK.P..R.QI----................NDQYLGNLAL.......KINLK..........MGGF.N.....SPL.S....R--.-R........M......L..T....C...L...G.....E.S..T.I..................................IFGMDVSHGSPGD...............LSVP..SIAAVVATKN..wP...E.V.F...H....Y.S.....T.QV..R...TQ.....P..........P.......K....M...EM......ITG....LYEpk............................ [...]
+A9SKW0_PHYPA/722-774   .........................................................................................ttts--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+A9TD99_PHYPA/2-180     ................................................................................emieglhiegkgg--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+C7SYH3_THAPS/1070-1160 .......................................................................................sssass--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+C7SYH2_PHATR/826-1176  ...........................................................................................lm--FAVIPT..KDVST..YAFVKYL.SH...VE..F..GIPSQVMVE.E..S.YQNQRS...............kTEAYCAGIAL.......KLNTK..........LSNSlNr..stAWS.I....YSG.TA........R......Q..W....L...M...D.....T.P..T.M..................................IMGYCVASGPGQD...............--SK..SIVVGTASLD...V...G.G.T...H....C.C.....H.DK..R...VQ.....S..........K.......S....H...IV......DSD...vLEE.............................. [...]
+B7G499_PHATR/1-107     .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+Q5KAT1_CRYNE/560-859   ............................................................................................i-ILCILPR..KEASI..YQTIKSV.GA...EG..LfkPVVTQCLQS.A..K.IKSDRG................IDQYCGNVAM.......KVHCK..........LGGV.-.....TH-.-....QVK.HN........V......-..-....-...-...D.....K.T..T.M..................................LCGADVTHPPSRG..............rVLYP..SIAATVASIN...G...E.N.N...Y....F.A.....G.CV..T...EQ.....G..........G.......R....V...EI......IQL....LDE.............................. [...]
+Q5KAU3_CRYNE/580-879   ............................................................................................i-IFCILPK..KDPSI..YQAIKAC.AA...EQ..LfkPVVTQCLQS.L..K.IKSDRG................IEQYCGNVAM.......KVHAK..........LGGL.-.....THQ.V....SHQ.L-........-......-..-....-...-...E.....R.T..T.M..................................MVGADTGHPPAKG..............gALPP..SIAVTVAAVN...G...E.N.N...R....F.V.....S.GV..R...LQ.....E..........G.......R....V...EI......IQD....LEN.............................. [...]
+B6HRB3_PENCW/625-938   ............................................................................................f-LVVVLPT..TEGKN..FDYVKYA.GD...LK..T..GILTHCILY.D..K.VLRS--................NEQYWSNNAM.......KVNLK..........MGGC.N.....QLL.Q....PAN.AR........F......-..I....G...A...G.....K.S..T.M..................................VVGLDVTHPSSAD..............pEVFP..SVASIVASID...Y...R.M.G...Q....W.P.....G.EV..R...AQ.....M..........R.......R....Q...EH......VVH....LKD.............................. [...]
+A2QG96_ASPNC/558-884   ............................................................................................f-LLIILPQ..AAEGL..YSRIKFL.CD...VQ..F..GIRNVCVVA.D..K.FLRS--................NDQFLSNVAL.......KLNLK..........LGGV.N.....QKL.L....TRS.L-........-......D..M....I...S...E.....G.K..T.M..................................VIGVDVTHPNSGNl.............pARAP..SVAAMVASVD...R...Y.L.A...Q....W.P.....A.EI..C...TQ.....P..........A.......R....Q...EL......VTQ....LGV.............................. [...]
+D0U264_CRYPA/482-802   ................................................................................lalivfpyqqpsg--------..----V..YNKIKFL.GD...VV..H..GLHTVCVIG.R..K.FVKNGQ...............tQREYFANVSL.......KINLK..........LGGT.N.....HQL.T....H-P.PE........L......-..-....-...-...F.....R.G..T.M..................................VVGYDAVHPTAVE..............kEDLP..SHMALVASVD...E...G.L.G...Q....W.S.....G.CY..W...TQ.....K..........R.......R....Q...EI......ADAt..nLKQ.............................. [...]
+D1ZJ09_SORMA/711-1030  ............................................................................................f-LVVVLPD..KDSTT..YSWVKRA.AD...MK..Y..GIHTVCVQG.E..K.LVEEKG................QAGYYANVGL.......KVNLK..........FGGT.N.....HN-.-....-IK.TP........I......P..L....L...A...K.....G.K..T.M..................................VVGYDVTHPTNLTag..........qspSTAP..SIVGLVSTID...Q...H.L.G...Q....W.P.....G.MV..W...NN.....P..........R.......G....Q...ES......MTK...qFTD.............................. [...]
+Q1K6I6_NEUCR/733-1052  ............................................................................................f-VVVLLPR..KDVAI..YNMVKRA.AD...IT..F..GVHTVCCVA.E..K.FLSTKG................QLGYFANVGL.......KVNLK..........FGGT.N.....HN-.-....-IK.TP........I......P..L....L...A...K.....G.K..T.M..................................VVGYDVTHPTNLAag..........qspASAP..SIVGLVSTID...Q...H.L.G...Q....W.P.....A.MV..W...NN.....P..........H.......G....Q...ES......MTE...qFTD.............................. [...]
+Q9P8T1_NEUCR/582-901   ............................................................................................f-VVVLLPR..KDVAI..YNMVKRA.AD...IT..F..GVHTVCCVA.E..K.FLSTKG................QLGYFANVGL.......KVNLK..........FGGT.N.....HN-.-....-IK.TP........I......P..L....L...A...K.....G.K..T.M..................................VVGYDVTHPTNLAag..........qspASAP..SIVGLVSTID...Q...H.L.G...Q....W.P.....A.MV..W...NN.....P..........H.......G....Q...ES......MTE...qFTD.............................. [...]
+B2AR52_PODAN/574-886   ............................................................................................l-VIVVLGD..QDANV..YNTVKKL.GD...VE..F..GIQTVCVVR.N..K.ITNN--................-KGYFTNVAL.......KVNLK..........FGGV.N.....HKL.Q....NAH.P-........-......-..L....L...K...G.....G.K..T.M..................................VVGYDVTHPTNLPtg...........agENAP..SLVGLVASID...S...D.L.G...Q....W.P.....A.IA..W...QN.....P..........A.......R....V...EQ......LDV...kLAE.............................. [...]
+Q2GSQ8_CHAGB/651-969   ............................................................................................f-LLVLIPN..KDAVT..YSNIKKC.GD...CL..F..GIPTVCCRE.E..K.ITDPKG................QKGYFANVGL.......KVNLK..........FGGV.N.....HRV.Q....DTT.GL........V......-..-....-...-...-.....A.K..T.M..................................FVGYDVTHPTNLSag...........aaENAP..SLVGLVASVD...K...D.L.A...Q....W.P.....A.VT..W...AN.....K..........A.......R....V...EK......VGQ....NDDgq............................ [...]
+C9ST09_VERA1/571-888   ............................................................................................f-VLVILPR..QDTTL..YSVIKTL.GD...CQ..F..GFHTICAVE.K..T.FTKE--................NPMTFANIGL.......KWNLK..........NGGI.N.....HRV.K....D--.-P........I......G..I....V...A...Q.....G.K..T.M..................................VVGYDVTHPTNMGlqp.........gekDVPP..SIVGLVASVD...K...D.L.G...Q....W.P.....A.VA..W...EQ.....K..........A.......G....Q...EM......LDS...kLLE.............................. [...]
+C7YM23_NECH7/666-978   ............................................................................................f-ILIALGS..TDTAM..YSAVKLL.GD...VT..W..GIHTSCVQG.K..K.LANA--................NPGYYANVAL.......KWNLK..........AGGV.N.....HKL.R....N--.-E........F......G..I....I...K...E.....G.K..T.M..................................VVGYDVTHPTNMPtg...........asDDLP..SLVGLVATID...R...N.M.G...Q....W.P.....A.VS..W...EQ.....S..........S.......K....Q...EM......LDE...vLTE.............................. [...]
+A4RL50_MAGGR/721-1039  ............................................................................................m-VFVILPD.sKDAAV..YNAVKRI.AD...ID..L..GVHTVCMVR.K..N.LFKNGPg..............qNPQYYANVGL.......KVNLK..........AGGI.N....hKLS.Q....DIP.V-........-......-..-....S...K...G.....G.K..A.M..................................FVGWDVIHPTNLGvd...........kdSGLP..SVVGLVSSID...E...H.L.A...Q....W.P.....A.VA..W...AQ.....K..........G.......G....Q...EM......ADS...rLEE.............................. [...]
+A4R6J1_MAGGR/641-908   ............................................................................................f-VLIILPD..KDVSR..YNMIKYL.GD...VC..Y..GVPTVCVAS.R..T.FFPARG................ADQMFGNLGL.......KINLK..........LGGV.N.....HKI.E....DSL.LG........I......-..-....V...A...Q.....G.K..T.M..................................IVGIDVAHPPAGA...............AVTA..SIAAMVASID...S...N.L.A...Q....W.P.....G.EI..G...IQ.....S..........Q.......A....R...KE......QVD...aLTS.............................. [...]
+C7ZR18_NECH7/19-235    ...............................................................lcqgsirynapltprtstlreesyirmtii--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B8MQK8_TALSN/682-995   .............................................................................................FILVILPS..RDTLL..YNTVKYL.CD...VK..H..GLLHACVTA.N..K.FAKP--................SAQYDANVAL.......KVNLK..........LGGT.N.....HRV.G....GTQ.L-........-......G..I....I...S...E.....G.K..T.M..................................LVGIDVTHPSPGS..............aKSAP..SIAAIVASVG...T...N.L.S...Q....F.P.....A.QL..R...VQ.....T..........E.......K....Q...EK......VDA....LDV.............................. [...]
+B6QUK3_PENMQ/689-1001  ............................................................................................f-VLVVLPR..RETFL..YNTIKYL.CD...VK..Y..GLLHACVVA.D..K.FARG--................GPQYDANVAL.......KVNLK..........LNGT.N.....HIV.G....GT-.-Q........L......G..L....I...S...K.....G.K..T.M..................................LVGIDVTHPSPGS..............vKNAP..SIAAIVASVG...K...D.L.S...Q....F.P.....A.QL..H...VQ.....P..........G.......K....Q...EQ......VDA....LDV.............................. [...]
+C1GSN8_PARBA/1-191     .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.M..................................VVATDVTHPSPGS..............aSNTP..SIAGIIASIN...S...Q.L.A...Q....W.P.....A.DL..R...IQ.....T..........Y.......R....Q...EM......VSA....LDD.............................. [...]
+C6H5C6_AJECH/26-168    ..........................................................................msnlaftafapspanspkd--------..-----..-------.--...--..-..---------.-..-.-----R................NHTYFANVAL.......ETNRK..........LGGA.S.....HTL.D....AHK.--........L......G..F....I...P...G.....C.K..T.M..................................VVCVDVTHPSPGS..............sTNAS..SGAAIVASID...Q...N.L.T...Q....W.P.....A.EF..R...IQ.....A..........T.......F....Q...KM......MIS...rLDE.............................. [...]
+A6RDB0_AJECN/9-157     ........................................................................................lkpyv--------..-----..-------.CD...VK..F..GVHSFRAIA.S..K.FAKDRN................-HTYFANVAL.......EANRK..........LGGA.S.....HTL.D....AHK.--........L......G..F....I...P...G.....C.K..T.V..................................VVCVDVTHPSPGS..............sTNAS..SGAAIVASID...Q...N.L.T...Q....W.P.....A.EL..C...TQ.....A..........V.......F....Q...KM......ISR....LDE.............................. [...]
+A1C469_ASPCL/690-1008  ............................................................................................l-ILSIMYG..SDTEA..YNSLKKV.CD...VH..C..GVRNINVLA.E..K.LRGA--................NDQYYANVGL.......KFNLK..........LGGA.N.....QSL.K....TSE.LG........I......-..-....V...A...E.....G.K..T.M..................................LVGIDVTHPSPGS..............sATAP..SVAGMVASID...S...S.L.S...Q....W.P.....A.DI..R...IQ.....T..........S.......R....Q...EM......VSD....LDA.............................. [...]
+A1DBD4_NEOFI/680-998   ............................................................................................l-ILTILYS..SDAEA..YNCIKQI.CD...VR..R..GVRNINVLA.E..K.LRGA--................NDQYYANVGL.......KFNLK..........LGGA.N.....QTL.K....ASE.LG........I......-..-....V...A...E.....G.K..T.M..................................LVGIDVTHPSPGS..............sAEAP..SVAGMVASVN...S...S.L.S...Q....W.P.....A.DI..R...IQ.....T..........S.......R....Q...EM......VSD....LDE.............................. [...]
+B0Y9U0_ASPFC/686-1004  ............................................................................................l-ILTILYS..SDVEA..YNCIKKI.CD...VR..R..GVRNVNVLA.E..K.LRGA--................NDQYYANVGL.......KFNLK..........LGGA.N.....QIL.K....ASE.LG........-......-..I....V...A...E.....G.K..T.M..................................LVGIDVTHPSPGS..............sAEAP..SVAGMVASID...S...S.L.S...Q....W.P.....A.DI..R...IQ.....T..........S.......R....Q...EM......VSN....LDE.............................. [...]
+Q4WC92_ASPFU/686-1004  ............................................................................................l-ILTILYS..SDVEA..YNCIKKI.CD...VR..R..GVRNVNVLA.E..K.LRGA--................NDQYYANVGL.......KFNLK..........LGGA.N.....QIL.K....ASE.LG........-......-..I....V...A...E.....G.K..T.M..................................LVGIDVTHPSPGS..............sAEAP..SVAGMVASID...S...S.L.S...Q....W.P.....A.DI..R...IQ.....T..........S.......R....Q...EM......VSN....LDE.............................. [...]
+C8VMQ3_EMENI/660-979   ............................................................................................l-ILTILPF..NDTAL..YNCIKRA.CD...VR..H..GVRNINVLA.E..Q.FCKR--................NEQYFANVGL.......KFNLK..........LGGV.N.....QVV.R....PSQ.L-........-......G..I....I...G...E.....G.K..T.M..................................LIGIDVTHPSPGS..............aKGAP..SVAAMVASVD...S...S.L.G...Q....W.P.....A.EI..R...IQ.....K..........E.......A....R..kEM......VDA....LDS.............................. [...]
+Q5BD61_EMENI/660-979   ............................................................................................l-ILTILPF..NDTAL..YNCIKRA.CD...VR..H..GVRNINVLA.E..Q.FCKR--................NEQYFANVGL.......KFNLK..........LGGV.N.....QVV.R....PSQ.L-........-......G..I....I...G...E.....G.K..T.M..................................LIGIDVTHPSPGS..............aKGAP..SVAAMVASVD...S...S.L.G...Q....W.P.....A.EI..R...IQ.....K..........E.......A....R..kEM......VDA....LDS.............................. [...]
+A2R8K3_ASPNC/710-1028  ............................................................................................l-ILTILPS..NDADI..YNIVKRA.CD...LT..H..GVRNVNVVA.D..K.FRKPNN................-DQYWANVGL.......KFNLK..........LGGN.N.....QLI.D....P--.KE........L......G..L....I...G...Q.....N.K..T.M..................................LVGVDVTHPSPGS..............sSAAP..SVAGMVASID...S...T.L.G...Q....W.P.....A.EL..R...IQ.....K..........P.......R....E...EM......VAE....LDA.............................. [...]
+Q0CNH1_ASPTN/643-961   ............................................................................................l-ILGILPF..NDADY..YNAIKRA.CD...VK..F..GVRNINVLA.E..K.FLEA--................KDQYIANVGL.......KFNLK..........LGGV.N....qVL-.H....P--.KE........L......G..I....I...G...Q.....G.K..T.M..................................LVGIDVTHPSPGS..............sSHAP..SVAGMVASTD...A...T.L.G...Q....W.P.....A.EL..R...IQ.....A..........S.......R....Q...EM......VED....LDT.............................. [...]
+B8MXT2_ASPFN/684-1002  ............................................................................................l-ILSVLPF..SDADY..YNCIKRA.CD...LT..Y..GVRNINVLA.D..K.FRDA--................NPQYFANVGL.......KVNLK..........LGGA.N.....QLL.D....A--.KE........L......G..L....I...G...Q.....N.K..T.M..................................LVGMDVTHPSPGS..............sANAP..SVAGMVASVD...S...T.L.S...Q....W.P.....A.EI..R...VQ.....R..........S.......R....E...EM......IQD....LSD.............................. [...]
+Q2US02_ASPOR/573-891   ............................................................................................l-ILSVLPF..SDADY..YNCIKRA.CD...LT..Y..GVRNINVLA.D..K.FRDA--................NPQYFANVGL.......KVNLK..........LGGA.N.....QLL.D....A--.KE........L......G..L....I...G...Q.....N.K..T.M..................................LVGMDVTHPSPGS..............sANAP..SVAGMVASVD...S...T.L.S...Q....W.P.....A.EI..R...VQ.....R..........S.......R....E...EM......IQD....LSD.............................. [...]
+B6H0X0_PENCW/641-959   ...........................................................................................vf-ILGILYT..KDTGV..YNCVKQV.CD...VR..V..GIRNVNVLA.E..K.LANS--................NDQYNANVGL.......KINLK..........LGGA.N.....QAL.R....TQD.L-........-......G..I....I...S...E.....G.K..T.M..................................LVGIDVTHPSPGS..............aSTAP..SVAGIVASVD...G...T.L.A...Q....W.P.....A.EI..R...VQ.....G..........A.......R....Q...EM......VAD....LET.............................. [...]
+C5GYE6_AJEDR/653-980   ...........................................................................................ql-IFFILPV..-VSSI..YSRIKYL.CD...VK..W..GVHSICVVA.G..K.FAKERN................-CQYFSNVAL.......KFNLK..........LGGT.N.....HTL.D....PSK.L-........-......G..F....I...S...E.....G.K..T.M..................................VVGLDVTHPSPGS..............sSNAP..SIAAIVASID...Q...D.L.T...Q....W.P.....A.DV..R...IQ.....P..........S.......R....Q...EM......VSG....LDE.............................. [...]
+C5K303_AJEDS/770-890   .................................................................................psriiirrprrq--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+C0S8I9_PARBP/1049-1137 ............................................................................................p--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+C5PJP0_COCP7/663-977   ............................................................................................f-VLVILPL..EDSSI..YNRVKYR.GD...IQ..N..GIHTVCVLA.N..K.FRGI--................--QYCANVAL.......KFNLK..........LGGT.N.....HVL.D....SSK.L-........-......G..V....V...G...E.....G.K..T.M..................................LVGIDVTHPSPGS..............sSQAP..SVAAMVANVD...K...H.L.A...Q....W.P.....A.SI..R...LQ.....Q.........eP.......K....A...EM......VDK....LQE.............................. [...]
+C4JG78_UNCRE/651-963   ............................................................................................f-LLVMLPF..EDSAI..YNRVKFR.GD...IQ..N..GIHTVCVGD.R..T.G-----................GIQSLANIAL.......KFNLK..........LGGA.N.....HVL.-....D-P.PK........L......G..L....I...G...E.....G.K..T.M..................................LVGIDVTHPSPGS..............sSQAP..SVAAMVASVD...K...D.L.A...Q....W.P.....A.SI..R...LQ.....R..........E......aK....A...EM......VDE....LEE.............................. [...]
+D4ANV6_ARTBE/642-958   ............................................................................................l-LLVILPN..DNPTV..YKRIKLN.GE...VF..H..GIQTVCVIM.S..K.FTKSSN................-VQYHANVAM.......KFNLK..........LGGT.N.....HVL.D....DSK.MG........-......-..I....I...A...G.....G.K..T.M..................................VVGIDVTHPAPGS..............sETAP..SVAGMVASID...K...T.L.G...Q....W.P.....A.IL..R...LQ....rE..........A.......K....Q...EM......VDD....LTD.............................. [...]
+D4CZ86_TRIVC/642-958   ............................................................................................l-LLVILPN..DNPTV..YKRIKLN.GE...VF..H..GIQTVCVIM.S..K.FTKSSN................-VQYHANVAM.......KFNLK..........LGGT.N.....HVL.D....DSK.MG........-......-..I....I...A...G.....G.K..T.M..................................VVGIDVTHPAPGS..............sETAP..SVAGMVASID...K...T.L.G...Q....W.P.....A.IL..R...LQ....rE..........A.......K....Q...EM......VDD....LTD.............................. [...]
+C5FGF6_NANOT/649-965   ............................................................................................l-LLMILPN..DNPTV..YKRIKLN.GE...VM..H..GIQTICVIR.S..K.FDKQYN................-VQYHANVAM.......KFNLK..........LGGI.N.....HVV.D....DTK.L-........-......G..I....I...A...A.....G.K..T.M..................................VVGIDVTHPAPGS..............sVTAP..SVAGMVASVD...K...Y.L.G...Q....W.P.....A.VL..R...LQ.....H.........eA.......K....Q...EM......VDD....LTD.............................. [...]
+C1G7F3_PARBD/674-979   .....................................................................................qqsrvrgd--------..-----..-------.--...VK..D..GIHTICVVA.E..K.FAKN--................QVQYFANVAL.......KFNLK..........LGGV.N.....HRL.Q....PSK.L-........-......G..T....L...S...E.....G.K..T.M..................................VVGIDVTHPSPGS..............aPTAP..SIAGMVASVD...N...V.L.G...Q....W.P.....A.SI..R...LQ.....H.........qA.......R....A...EM......VND....LDP.............................. [...]
+C1GXU8_PARBA/683-1002  ............................................................................................l-VLVILPF..ASPPI..YNQVKYR.GD...VK..D..GIHTICVVA.E..K.FAKN--................QAQYFANVAL.......KFNLK..........LGGV.N.....HRL.Q....PSK.L-........-......G..T....L...S...E.....G.K..T.M..................................VVGIDVTHPSPGS..............aPTAP..SIAGMVASVD...N...V.L.G...Q....W.P.....A.SI..R...LQ.....H.........qA.......R....A...EM......VND....LDP.............................. [...]
+C5JDT9_AJEDS/580-664   ............................................................................................l-VLVILPF..ASPQI..YSQVKYR.GD...IK..D..GIHTICVVA.E..K.FRKN--................QPQYFANVAL.......KFNLK..........LGGV.N.....HKL.Q....PSK.L-........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+C5GX22_AJEDR/580-664   ............................................................................................l-VLVILPF..ASPQI..YSQVKYR.GD...IK..D..GIHTICVVA.E..K.FRKN--................QPQYFANVAL.......KFNLK..........LGGV.N.....HKL.Q....PSK.L-........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+C0RZ18_PARBP/688-993   .....................................................................................qqsrvrgd--------..-----..-------.--...VK..D..GIHTICVVA.E..K.FAKN--................QVQYFANVAL.......KFNLK..........LGGV.N.....HRL.Q....PSK.L-........-......G..T....L...S...E.....G.K..T.M..................................VVGIDVTHPSPGS..............aPTAP..SIAGMVASVD...N...V.L.G...Q....W.P.....A.SI..R...LQ.....H.........qA.......R....A...EM......VND....LDP.............................. [...]
+C0NMG7_AJECG/678-986   ............................................................................................l-VLVILPF..ESPQM..YNHIKYR.GD...IK..D..GIHTICVVA.E..K.FGKN--................QPQYFANVAL.......KFNLK..........LGGI.N.....HKL.Q....PSK.L-........-......G..I....I...S...E.....G.K..T.M..................................VVGIDVTHPAPGS..............lPTAP..SIAGMVASVD...K...F.L.A...Q....W.P.....A.SI..R...LQ.....H..........Q......aR....A...EM......VDD....LDP.............................. [...]
+C6H291_AJECH/678-997   ............................................................................................l-VLVILPF..ESPQM..YNHIKYR.GD...IK..D..GIHTICVVA.E..K.FGKN--................QPQYFANVAL.......KFNLK..........LGGI.N.....HKL.Q....PSK.L-........-......G..I....I...S...E.....G.K..T.M..................................VVGIDVTHPAPGS..............lPTAP..SIAGMVASVD...K...F.L.A...Q....W.P.....A.SI..R...LQ.....H..........Q......aR....A...EM......VDD....LDP.............................. [...]
+A6RB60_AJECN/291-610   ............................................................................................l-VLVILPF..ESPQM..YNHIKYR.GD...IK..D..GIHTICVVA.E..K.FGKN--................QPQYFANVAL.......KFNLK..........LGGI.N.....HKL.Q....PSK.L-........-......G..I....I...S...E.....G.K..T.M..................................VVGIDVTHPAPGS..............lPTAP..SIAGMVASVD...K...F.L.A...Q....W.P.....A.SI..R...LQ.....H..........Q......aH....A...EM......VDD....LDP.............................. [...]
+C5JDT9_AJEDS/671-859   .....................................................................................rlqqqara--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+C5GX22_AJEDR/671-859   .....................................................................................rlqqqara--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B8N7A8_ASPFN/617-954   ...........................................................................................ll--YIVLPK..KESRW..YLVIKRL.CD...VE..Y..GLQTICSVG.P..K.LVAKKGqtme.......qydksLDQYMRNVAM.......KFNLK..........LGGT.N.....HVV.D....NLR.L-........-......S..I....I...N...E.....D.K..T.M..................................IVGLDVTHPTGSSqv...........ssATAP..SVAAMVASID...K...T.L.G...Q....W.P.....A.TI..Q...VQ.....S..........H.......G...gK...EE......IDS....LDG.............................. [...]
+Q2UBS9_ASPOR/578-915   ...........................................................................................ll--YIVLPK..KDSRW..YLVIKRL.CD...VE..Y..GLQTICSVG.P..K.LVAKKGqtme.......qydksLDQYMRNVAM.......KFNLK..........LGGT.N.....HVV.D....NLR.L-........-......S..I....I...N...E.....D.K..T.M..................................IVGLDVTHPTGSSqv...........ssATAP..SVAAMVASID...K...T.L.G...Q....W.P.....A.TI..Q...VQ.....S..........H.......G...gK...EE......IDS....LDG.............................. [...]
+B2WES9_PYRTR/643-967   ............................................................................................l-LFIVLPE..ANIPL..YKRIKSI.AD...KE..Y..GLHTICSVG.S..K.LAKDRG................RDQYIANVAL.......KINLK..........LGGI.N.....QIV.E....N--.KN........L......G..I....I...D...Q.....N.K..T.M..................................VVGIDVTHPSPGS..............aSNAP..SVSAMVASVD...R...F.L.G...Q....W.P.....A.TL..R...IQ.....R..........G.......R....Q...EN......VDA....LGE.............................. [...]
+A6QW60_AJECN/639-963   ............................................................................................l-LFIILPE..ANIPL..YKRIKTL.AD...KD..Y..GIHTICSVG.S..K.LAKDRG................RDQYMANIAL.......KFNLK..........LGGI.N.....QIV.E....N--.KN........L......G..I....I...D...Q.....N.K..T.M..................................VVGIDVTHPSPGS..............sSNAP..SVSAMVASID...K...F.L.G...Q....W.P.....A.TL..R...KQ.....R..........A.......R....Q...EN......VDD....LTE.............................. [...]
+B8MGF3_TALSN/2-137     ..........................................................................................lad--------..-----..-------.--...KD..F..GIHTICSVG.S..K.LVKDRG................RDQYMANVAL.......KFNLK..........LGGI.N.....QIV.E....NRN.L-........-......G..I....V...D...E.....N.K..T.M..................................VVGTDVTHPSPSS..............sSNAP..SVSAMVASID...K...F.L.G...Q....W.P.....A.TL..R...IQ.....H..........A.......R....Q...EN......VTD....LTE.............................. [...]
+B6QWK7_PENMQ/644-968   ............................................................................................l-LYVILPQ..ANTTL..YKRIKTL.TD...KD..F..GIHTICSVA.S..K.LAKERG................RDQYMANIAL.......KFNLK..........LGGI.N.....QIV.E....NRN.L-........-......G..I....V...D...Q.....N.K..T.M..................................VVGIDVTHPSPGS..............sSNAP..SISAMVASID...R...S.L.G...Q....W.P.....A.TL..R...IQ.....R..........A.......R....Q...EN......VDD....LTE.............................. [...]
+Q96UM0_BLUGR/565-886   ............................................................................................f-VLCILPK..NDPAI..YNSIKTV.AD...TK..A..GIHTVCCVS.S..K.FTKQQR................QEQYFGNVAL.......KFNLK..........AGGI.N.....HIL.E....PAK.L-........-......G..I....V...S...E.....G.K..T.M..................................VVGVDVTHPSPGS..............rEGAP..SVAGIVASVD...K...H.L.G...Q....W.P.....S.QF..S...IQ.....A..........K.......S...rT...EM......VSD....LES.............................. [...]
+A7E4W2_SCLS1/692-1008  ............................................................................................f-VLCILPV..NDVML..YNTIKRH.AD...TR..A..GIHTVCVQY.S..K.FVKGDL................--QYFGNVAL.......KFNLK..........AGGI.N.....QTI.D....K--.--........L......G..V....I...N...E.....G.K..T.M..................................VVGIDVTHPSPGS..............kETAP..SVAAMVTSTD...K...L.L.G...Q....W.S.....G.IC..R...LQ.....N.........qA.......R....Q...EM......VSD....LES.............................. [...]
+A6RK26_BOTFB/654-970   ............................................................................................f-LLCILPV..DDVML..YNTIKRF.GD...TK..A..GIHTVCVQY.S..K.FTKG--................DPQYFGNVAL.......KFNLK..........AGGI.N.....QTI.D....K--.--........L......G..I....I...N...E.....G.K..T.M..................................VVGIDVTHPSPGS..............kDTAP..SVAAMVTSTD...K...L.L.G...Q....W.S.....G.VC..R...LQ.....D..........K......aR....Q...EM......VSD....LEP.............................. [...]
+D0U265_CRYPA/712-1038  ...................................................................................lllvilpgrd-------K.gDNTEL..YNWVKTL.GD...VK..H..GVHTICVVG.Q..K.FTAA--................QDQFFANVAL.......KFNLK..........LGGN.N.....QSV.D....PSR.L-........-......S..F....I...N...E.....D.K..T.M..................................LVGIDVTHPSPGS..............rSNAP..SVAGMVASTD...K...H.L.G...Q....W.P.....G.IL..S...IQ.....N..........K......aR....A...EM......VSD....LTE.............................. [...]
+D0U266_CRYPA/635-957   ...........................................................................................lv--WVIVPA..GSKLL..YDRIKYL.SD...VK..L..GVMTVVSVD.K..T.LKERDPr..............yQSQYLGNEAL.......KVNLK..........LGGM.N.....QRI.T....S--.-G........L......H..F....I...S...E.....G.K..T.M..................................LVGIDVIHPSTDQt.............rGGMP..SVAGMVATVD...R...H.V.A...Q....W.P.....G.VL..Q...VQ.....Q..........K.......R....Q...EM......VSD....LEP.............................. [...]
+D4B128_ARTBE/608-819   ...........................................................................................ft--LIVLPR..YDAEI..YSKVKYS.AD...VK..H..GCHTLCVVP.K..P.PKNGRPgepl........qiniQPSYLANLAL.......KINLK..........LGGV.N.....HQL.E....PLK.KY........-......-..-....-...Q...S.....C.P..I.M..................................YLGIDVTHPTGTDs.............iPNAP..SIAGVVANCD...P...M.L.G...Q....W.P.....A.SI..R...TQ.....A..........H.......C....V...EM......VEN....LGE.............................. [...]
+D4D326_TRIVC/587-798   ...........................................................................................ft--LIVLPR..YDAEI..YSKVKYS.AD...VK..H..GCHTLCVVP.K..P.PKNGRPgepl........qvniQPSYLANLAL.......KINLK..........LGGV.N.....HQL.E....PLK.KY........-......-..-....-...Q...S.....C.P..I.M..................................YLGIDVTHPTGTDs.............iPNAP..SIAGVVANCD...P...M.L.G...Q....W.P.....A.SI..R...TQ.....A..........H.......C....V...EM......VEN....LGE.............................. [...]
+B0D488_LACBS/608-916   ...........................................................................................ti-VLVILSN..GDKHV..YSGLKHL.CD...CY..L..DLATVCVHS.S..K.IRKEKG................QLQYFANVAL.......KFNMK..........LGGV.N.....HAL.N....AAN.M-........-......A..W....L...K...K.....A.P..T.M..................................LVGIDVTHPGPGS..............vKGTP..SIAAVVASCE...S...D.F.A...Q....Y.P.....A.SM..E...IQ.....E..........T.......K....K...EM......VTN....LAK.............................. [...]
+A8P0D4_COPC7/619-925   ............................................................................................i-VLVILSS..GDKHV..YNGIKKL.CD...TQ..L..DLPTVCVQT.A..K.FRKEKG................QPQYFANVAL.......KVNMK..........LGGV.N.....HVL.D....K--.DN........M......T..W....L...K...Q.....K.P..T.M..................................LVGMDVTHPGPGS..............rLGTP..SVAAVVASCD...P...D.F.A...Q....F.P.....C.SM..E...IQ.....E..........S.......K....K...EM......ITN....LEK.............................. [...]
+A8P2K4_COPC7/589-903   ...........................................................................................sf-MLVLLEQ..KEKYI..YPGIKRI.GD...VE..L..GLLTLHMQL.P..R.VFGDSLgg............tkRDQYLSNVAL.......KVNTK..........LGGV.N.....HML.E....DSA.M-........-......A..W....L...R...K.....K.K..T.M..................................MVGIDVTHPSPLS..............kEGTP..SIAAVVASVD...D...N.F.V...Q....F.P.....A.SL..R...IQ.....T..........S.......K....K...EM......LDE....LSD.............................. [...]
+B0E0C2_LACBS/610-916   ...........................................................................................sf-VLVLLEN..RDNYI..YPGIKRI.CD...VE..L..GIHTVHMQL.G..K.ALTDER...............kQDQYFSNVAL.......KVNTK..........LGGM.N....hLLE.P....N--.-A........M......N..W....L...T...K.....K.K..T.M..................................MVGIDVTHPGPNS..............rEGTP..SIAAVVANVD...D...N.F.V...Q....F.P.....A.SL..R...IQ.....Q..........H.......S....K...KE......MLD...eLRD.............................. [...]
+B8PBB9_POSPM/331-616   ............................................................................................l-LIVMLPW..RKRQL..YAAIKYY.TD...VV..L..GIHTAHILL.P..K.AHGD--................--GYLSSLAL.......KLNAK..........LGGI.N.....YYL.D....DQS.I-........-......R..W....L...S...D.....R.A..N.M..................................IVGLHVRHSLPSM...............NMAW..TTAAMVSNVD...G...F.F.H...N....F.P.....A.HL..E...VT.....V..........D.......F....Q...K-......--P...dVGR.............................. [...]
+B8PFP7_POSPM/371-656   ............................................................................................l-LIVMLPW..RKRQL..YAAIKYY.TD...VV..L..GIHTAHILL.P..K.AHGD--................--GYLSSLAL.......KLNAK..........LGGV.N.....YYL.D....DQS.I-........-......R..W....L...S...D.....R.A..D.M..................................IVGLHVRHSPPST...............EMVW..TTAATVSNVD...G...F.F.H...N....F.P.....A.RL..K...VA.....V..........E.......F....Q...K-......--P...dVGR.............................. [...]
+B8PN24_POSPM/140-415   ............................................................................................l-LIVMLPW..RKRQL..YAAIKYY.TD...VV..L..GIHTAHILL.P..K.AHGD--................--GYLSSLAL.......KLNAK..........LGGV.N.....YYL.D....DQS.I-........-......R..W....L...S...D.....R.A..D.M..................................IVGLHVRHSPPST...............EMVW..TTAAMVSNVD...G...F.F.H...N....F.P.....A.RL..K...VA.....V..........E.......F....Q...K-......--P...dVGR.............................. [...]
+A6S1V9_BOTFB/6-263     .......................................................................................eivsva--------..-----..-------.--...--..-..-CPTVCVST.D..G.VERGAR...............pDLGVLANIAL.......KINFK..........LGGI.N.....HKI.E....NIP.L-........-......-..-....-...-...K.....D.R..T.M..................................IMGADVTHVGKGQ..............dDACP..SQAGVVATRD...S...N.Y.V...H....Y.L.....A.SA..R...LQ.....P..........H.......N....T...EF......IED....LQG.............................. [...]
+A6SR68_BOTFB/1-284     ............................................................................................m--------..-----..-------.--...--..-..---------.-..-.------................--------CL.......KFNLK..........LGGV.N.....QEV.S....E-G.C-........-......-..-....G...I...K.....A.R..T.M..................................VVGADVTHPGDEE...............-VCP..SIAAVVATDD...N...S.Q.F...K....Y.L.....G.SA..R...LQ.....E..........G.......K....Q...EY......ISD....LRG.............................. [...]
+A7ISJ0_MYCPJ/514-830   ............................................................................................t-VLVVLPS..KDAND..YAAVKTW.GE...LH..D..GVNTICVTA.G..K.QHRL-I................DYDFQANLAL.......KFNAK..........LRGQ.N.....HKL.D....KSF.FE........Y......L..C....H...G...Q.....S.A..T.M..................................VVGADVTHPGPSS..............vDYCP..SIAAVVASTD...S...G.A.C...K....Y.S.....G.SI..R...LQ.....A..........S.......R....E...EI......ITD....LQG.............................. [...]
+//
diff --git a/test/scripts/automated/belvu/test37 b/test/scripts/automated/belvu/test37
new file mode 100755
index 0000000..1bab44d
--- /dev/null
+++ b/test/scripts/automated/belvu/test37
@@ -0,0 +1,25 @@
+#!/bin/ksh
+#
+# Description:
+#   Sort by UPGMA tree on start up (large alignment).
+
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences to the saved results
+diffs=`belvu -o Selex -S u $data_dir/PF02171_full.selex >&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
+
diff --git a/test/scripts/automated/belvu/test37_results b/test/scripts/automated/belvu/test37_results
new file mode 100644
index 0000000..b08a340
--- /dev/null
+++ b/test/scripts/automated/belvu/test37_results
@@ -0,0 +1,843 @@
+C4V9J2_NOSCE/489-791   ...........................................................................................is--LVVLPD..KSTAR..YEEIKRK.TE...TR..S..RMVTQCVLE.K..N.FSRLDN................-PQFAGNLLL.......KINSK..........LGGV.N.....FKV.D....K--.-E........F......S..V....V...K...G.....K.A..T.L..................................VIGIDVNHPGIGD...............LNSP..SVVAIVGGMN...N...E.L.T...S....F.K.....T.II..K...QQ.....D..........R.......R....H...EI......VEN....LKD.............................. [...]
+B6K0R2_SCHJY/507-805   ............................................................................................y-LFFILDS..NSPEP..YATIKRL.CN...TK..F..GIPSQCALR.K..H.IEGA--................KPQYCANLGM.......KVNAK..........LGGV.N.....VHL.E....PKS.--........F......P..-....L...G...N.....I.P..T.I..................................ILGGDVYHPARGG...............-SGA..SIGSMVGSID...L...H.G.C...K....Y.T.....A.MS..R...AQ.....N..........R.......N....Q...EM......IQG....MKD.............................. [...]
+AGO1_SCHPO/500-798     ............................................................................................y-LFFILDK..NSPEP..YGSIKRV.CN...TM..L..GVPSQCAIS.K..H.ILQS--................KPQYCANLGM.......KINVK..........VGGI.N....cSLI.P....KSN.P-........-......-..-....L...G...N.....V.P..T.L..................................ILGGDVYHPGVGA...............-TGV..SIASIVASVD...L...N.G.C...K....Y.T.....A.VS..R...SQ.....P..........R.......H....Q...EV......IEG....MKD.............................. [...]
+Q0DZI9_ORYSJ/36-107    ............................................................................................l-LIVILPE..-ERGN..YGKIKRV.CE...TK..L..GLVSQCCLP.K..N.VKTDTN................-IKYLENIAL.......KINVK..........T---.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B0LJQ7_CULTA/1-148     .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B0X641_CULQU/527-832   ............................................................................................f-VIVVIPG..-IGDH..YSRLKQK.AE...LV..V..GVLTSCVKG.N..T.VKNTRS................PLTVVNNILL.......KINGK..........TNGT.N.....HVV.Q....SPD.PK........I......P..L....-...I...K.....K.R..I.M..................................FVGADVTHPSPEQ...............STIP..SVVGVVASFD...R...N.G.F...R....Y.K.....P.HF..Q...LQ.....D..........P.......K....K...EM......IHG....LEA.............................. [...]
+B0WRW8_CULQU/638-943   ...........................................................................................df-VIVVISG..-MGDQ..YSKVKQR.AE...LV..T..GLLTQCIKG.D..T.VFKKAG................DMSTINNIWL.......KINAK..........TNGT.N....hVLK.P....ESK.PP........L......-..-....-...I...R.....K.R..V.M..................................YVGADVTHPSPEQ...............TNIP..SVVGVAASYD...L...E.G.F...R....Y.N.....C.CY..R...LQ.....N..........P.......K....D...EM......IRD....LEN.............................. [...]
+C5J0H4_AEDAE/655-961   ............................................................................................l-VFVVIPSpgRDGDV..YAKVKQK.AE...LC..V..GLLTQCIKS.F..T.LDKKRG................DMSTISNIWL.......KINAK..........TNGS.N....hVLA.K....NFK.PP........I......-..-....-...A...R.....K.T..V.M..................................YVGADVTHPSPEQ...............TNIP..SVVGVAASYD...L...E.G.F...R....Y.N.....C.CY..R...LQ.....G..........P.......K....D...EM......IRD....LQN.............................. [...]
+B0LJQ8_AEDTR/1-254     .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................---------L.......KINAK..........TNGT.N....hLLA.P....GSK.PP........M......-..-....-...S...R.....K.D..V.M..................................YIGADVTHPSPEQ...............TNIP..SVVGVAASYD...L...E.G.F...R....Y.N.....C.CY..R...LQ.....N..........A.......K....D...EM......IRD....LEN.............................. [...]
+Q5TVL2_ANOGA/535-839   ...........................................................................................vt--IVVLPS..-RGDA..YAKVKQK.AElasER..I..GLLTQCVKG.M..T.VAKKGT................DMSTLNNIML.......KINAK..........TNGT.N.....HCI.S....QVA.V-........-......P..P....L...G...R.....G.K..V.M..................................YIGADVTHPLSEN...............--EP..SVVGVAALYD...L...T.G.F...R....Y.N.....C.SV..R...LQ.....G..........A.......R....D...EM......IRD....LEN.............................. [...]
+B8BT49_THAPS/780-963   ............................................................................................i-MLVVLPD..KGKAL..YDHVKFV.SN...QC..S..GVQTQCASL.D..T.FNRQRN................KEQYSTALAT.......KMNAK..........LSTV.E.....DGA.I....AWR.GA........V......D..W....V...N...Q.....C.H..T.L..................................VIGIGMAHGMGRG...............--AE..TIVGISTCLD...G...Q.C.F...R....L.L.....H.SA..Y...VQ.....K..........K.......A....D...TL......SKD...aMID.............................. [...]
+B5DIM9_DROPS/1-71      .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B4G6N2_DROPE/1-37      .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+A8PVW7_BRUMA/492-800   ............................................................................................l-MIFITPE..KNDDI..YGRIKVT.CD...KE..E..GVACQVILV.E..T.FLKMLGn.............peRNAVSHNICL.......KINVK..........LDGI.N....nEVA.R....NQN.YW........K......K..F....T..dK...E.....S.P..T.L..................................FMGIDVTHPPSGD...............TSAP..SIASIIGSLN...I...S.A.T...K....Y.A.....A.SL..K...IQ.....Q..........P.......G....V...EV......MTY....AVD.............................. [...]
+C4WWR5_ACYPI/1-266     .........................................................................................mfrm--------..-----..-------.--...--..-..---------.-..-.------................NTSTSSNILL.......KINSK..........LNGI.Nh...tLAI.R....SSP.PS........M......-..-....-...-...-.....E.G..A.I..................................IFGADVTHPSPEQ...............TTIP..SVAAVAASHD...T...Y.G.S...Q....Y.N.....M.EW..R...LQ.....S..........P.......K....V...EI......IQD....LED.............................. [...]
+A9QW19_TRICA/79-190    ............................................................................................l-IIVVVPN..-SGPQ..YSFVKQA.AE...LN..V..GCLTQCIKE.R..T.IGRL--................NPQTVGNILL.......KINSK..........MNGT.N....hRLS.P....NSR.--........-......P..L....I...M...K.....R.P..C.M..................................IMGADVTHPSPDA...............RDIP..SVAAVTASHD...P...N.A.F...Q....Y.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+Q59HV7_BOMMO/706-1006  ............................................................................................f-LVVVVSG..RGRDY..YHKLKQI.AE...LK..V..GILTHVFKE.D..T.ATRRMN................-PQTARNILL.......KVNSK..........LMGI.N.....QAL.E....NRS.IP........-......Q..C....L...K...G.....G.A..V.M..................................IVGADVTHPSPDQ...............SNIP..SIAAVTASMD...T...K.C.Y...I....Y.N.....I.EL..S...IQ.....T..........P.......K....K...EM......IVQ....FED.............................. [...]
+B4NLX0_DROWI/695-993   ............................................................................................l-VIVIIPN..-RGTT..YDTIKQK.AE...LT..H..GILTQCIKQ.F..T.VQRK-L................NAQLIGNLLL.......KVNSK..........LNGI.N.....HKL.K....DDP.LT........R......-..L....-...-...-.....V.N..T.M..................................YLGADVTHPSPDQ...............RDIP..SVVGVAASHD...L...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........S.......T....A...EE......IED....MEG.............................. [...]
+B4N082_DROWI/579-877   ............................................................................................l-VIVIIPQ..-IGVS..YDIIKQK.AE...LK..H..GILTQCLKQ.L..T.VERK-L................NPQLIGNVLL.......KINSK..........LNGI.N.....HKL.K....DEP.NR........L......-..L....-...-...-.....S.N..V.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MET.............................. [...]
+B3NI38_DROER/838-1138  ..........................................................................................dla---FVIIP..QFGTS..YDIIKQK.AE...LQ..H..GILTQCIKQ.F..T.VERK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..T.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MYS.............................. [...]
+Q2Q3X0_9MUSC/506-806   ..........................................................................................dla---FVIIP..QSGSS..YDIIKQK.AE...LQ..H..GILTQCIKQ.Y..T.FDRK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..A.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......T....L...EE......IED....MYA.............................. [...]
+Q2Q3X2_DROYA/506-806   ..........................................................................................dla---FVIIP..QSGSS..YDIIKQK.AE...LQ..H..GILTQCIKQ.Y..T.FDRK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..A.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MYA.............................. [...]
+Q2Q3X7_DROYA/506-806   ..........................................................................................dla---FVIIP..QSGSS..YDIIKQK.AE...LQ..H..GILTQCIKQ.Y..T.FDRK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..A.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MYA.............................. [...]
+Q2Q3X4_DROYA/506-806   ..........................................................................................dla---FVIIP..QSGSS..YDIIKQK.AE...LQ..H..GILTQCIKQ.Y..T.FDRK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..A.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MYA.............................. [...]
+B4PCH3_DROYA/843-1143  ..........................................................................................dla---FVIIP..QSGSS..YDIIKQK.AE...LQ..H..GILTQCIKQ.Y..T.FDRK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..A.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MYA.............................. [...]
+Q2Q3X6_DROYA/506-806   ..........................................................................................dla---FVIIP..QSGSS..YDIIKQK.AE...LQ..H..GILTQCIKQ.Y..T.FDRK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..A.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MYA.............................. [...]
+Q2Q3X8_DROYA/506-806   ..........................................................................................dla---FVIIP..QSGSS..YDIIKQK.AE...LQ..H..GILTQCIKQ.Y..T.FDRK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..A.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MYA.............................. [...]
+B4IU14_DROYA/810-1110  ..........................................................................................dla---FVIIP..QSGSS..YDIIKQK.AE...LQ..H..GILTQCIKQ.Y..T.FDRK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..A.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MYA.............................. [...]
+Q2Q3X1_DROTE/424-724   ..........................................................................................dla---FVIIP..QSGSS..YDIIKQK.AE...LQ..H..GILTQCIKQ.Y..T.FDRK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....K.N..A.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MYS.............................. [...]
+B3M505_DROAN/688-988   ...........................................................................................dl--AFVIIP..NYGAS..YETIKQK.AE...LK..H..GILTQCIKQ.F..T.FERK-L................NPQTIGNILL.......KVNSK..........LNGI.N.....HKL.K....E-D.TR........L......P..V....-...-...P.....K.N..A.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...A....Y.N.....M.QY..R...LQ.....R..........A.......A....L...EE......IED....MES.............................. [...]
+B5DY62_DROPS/643-942   ............................................................................................d-LVFVIIP..NSGPF..YDVVKQK.AE...LQ..H..GILTQCIKE.I..T.VLRKCN................-LQCIGNVLL.......KVNSK..........LNGI.N.....HKL.K....DDP.R-........F......-..-....-...L...L.....K.N..A.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MES.............................. [...]
+B4GFG0_DROPE/449-748   ............................................................................................d-LVFVIIP..NSGPF..YDVVKQK.AE...LQ..H..GILTQCIKE.I..T.VLRKCN................-LQCIGNVLL.......KVNSK..........LNGI.N.....HKL.K....DDP.R-........F......-..-....-...L...L.....K.N..A.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MES.............................. [...]
+B4GUA7_DROPE/624-923   ..........................................................................................dlv--YVIIPN..-SGSV..YDVVKQK.AE...LE..H..GILTQCIKE.N..T.VLRKCN................-LQCIGNVLL.......KVNSK..........LNGI.N.....HKL.K....DDP.L-........-......-..-....C...L...L.....K.N..A.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......D....L...EE......IQD....MES.............................. [...]
+B5DQH3_DROPS/471-770   ..........................................................................................dlv--YVIIPN..-SGSV..YDVVKQK.AE...LE..H..GILTQCIKE.N..T.VLHKCN................-LQCIGNVLL.......KVNSK..........LNGI.N.....HKL.K....DDP.L-........-......-..-....C...L...L.....K.N..A.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......D....L...EE......IQD....MES.............................. [...]
+B4HIG2_DROSE/1-224     .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.M..................................YMGADVTILSRSA...............-RDS..QCGRVAASHD...P...Y.G.A...S....Y.N.....M.QY..R...LQ.....R..........G.......T....L...EE......IED....MYT.............................. [...]
+B4QL34_DROSI/606-729   .........................................................................................nvgc--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B4G6N7_DROPE/19-133    ........................................................................................vrrei--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B5DIM7_DROPS/517-815   ............................................................................................l-VLVVIPN..-SGNF..YDKLKQK.AE...LE..Y..GILTQCIKQ.A..T.VERRCN................-GQVVGNLLL.......KMNSK..........LNGI.N.....HTL.K....ADT.AA........L......-..-....-...-...P.....K.N..V.M..................................FVGADVTHPSPEQ...............REIP..SVVGVAASHD...A...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MES.............................. [...]
+B4G6N0_DROPE/517-815   ............................................................................................l-VLVVIPN..-SGNF..YDKLKQK.AE...LE..Y..GILTQCIKQ.A..T.VERRCN................-GQMVGNLLL.......KMNSK..........LNGI.N.....HTL.K....ADT.AA........L......-..-....-...-...P.....K.N..V.M..................................FVGADVTHPTPEQ...............REIP..SVVGVAASHD...A...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MES.............................. [...]
+B4IWV1_DROGR/788-1091  ............................................................................................l-VFVIIPS..RGGAS..YEMIKQR.AE...LH..C..GILTQCIKQ.N..N.VERR-L................DDQLVGNLLL.......KVNSK..........LNGI.N.....HKI.K....DDV.R-........I......K..L....-...-...-.....P.N..V.M..................................YLGADVTHPSPDQ...............RDIP..SVVGVAASHD...L...Y.G.G...S....Y.N.....M.QF..R...MQ.....S..........N.......SggrpR...EE......IDD....MQS.............................. [...]
+B4LH85_DROVI/152-457   ............................................................................................d-LVFVILA..SRGPS..YDIIKQK.AE...LQ..Y..GILTQCIKQ.N..N.VERR-L................NGQLVGNILL.......KVNSK..........LNGV.N.....HKL.K....DDP.RT........M......L..-....-...-...-.....A.N..V.M..................................YLGADVTHPSPDQ...............RDIP..SVVGVAASHD...M...H.G.G...S....Y.N.....M.QY..R...LQ.....C..........G.......GgggaR...EE......IED....MES.............................. [...]
+B4KUJ5_DROMO/715-1017  ...........................................................................................dl-VFVIIPS..-RGAT..YEVIKQK.AE...LQ..H..GILTQCIKH.N..N.VDRR-L................NAQLVGNILL.......KVNSK..........LNGI.N.....HKL.K....DDP.R-........T......Q..L....-...-...-.....T.N..V.M..................................YLGADVTHPSPDQ...............RDIP..SVVGVAASHD...A...Y.G.G...S....F.N.....M.QY..R...LQ.....Cga......ggR.......A....A...EE......ILD....MES.............................. [...]
+C7LAD2_DROME/888-1187  ...........................................................................................la--IVIIPQ..-FRIS..YDTIKQK.AE...LQ..H..GILTQCIKQ.F..T.VERKCN................-NQTIGNILL.......KINSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...M.....K.N..T.M..................................YIGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...S....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MFS.............................. [...]
+AGO2_DROME/885-1184    ...........................................................................................la--IVIIPQ..-FRIS..YDTIKQK.AE...LQ..H..GILTQCIKQ.F..T.VERKCN................-NQTIGNILL.......KINSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...M.....K.N..T.M..................................YIGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...S....Y.N.....M.QY..R...LQ.....R..........G.......A....L...EE......IED....MFS.............................. [...]
+Q2Q3W2_DROSI/511-810   ...........................................................................................la--IVIIPQ..-SRIS..YDTIKQK.AE...LQ..H..GILTQCVKQ.F..T.VERKCN................-DQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....V.N..T.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...S....Y.N.....M.QY..R...LQ.....R..........G.......T....L...EE......IED....MYT.............................. [...]
+Q2Q3W7_DROSI/511-810   ...........................................................................................la--IVIIPQ..-SRIS..YDTIKQK.AE...LQ..H..GILTQCVKQ.F..T.VERKCN................-DQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....V.N..T.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...S....Y.N.....M.QY..R...LQ.....R..........G.......T....L...EE......IED....MYT.............................. [...]
+Q2Q3W9_DROSI/511-810   ...........................................................................................la--IVIIPQ..-SRIS..YDTIKQK.AE...LQ..H..GILTQCVKQ.F..T.VERKCN................-DQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....V.N..T.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...S....Y.N.....M.QY..R...LQ.....R..........G.......T....L...EE......IED....MYT.............................. [...]
+B4NVX8_DROSI/80-259    ...........................................................................................la--IVIIPQ..-SRIS..YDTIKQK.AE...LQ..H..GILTQCVKQ.F..T.VERKCN................-DQTIGNILL.......KVNSK..........LNGI.N.....HKI.K....DDP.R-........L......P..M....-...-...L.....V.N..T.M..................................YMGADVTHPSPDQ...............REIP..SVVGVAASHD...P...Y.G.A...S....Y.N.....M.QY..R...LQ.....R..........G.......T....L...EE......IED....MYT.............................. [...]
+B4GTA7_DROPE/448-747   ............................................................................................d-VVFVIIP..NFGHL..YDVVKQK.AE...LQ..H..GILTQCIKR.V..T.VERKCN................-AQVIGSILL.......KVNAK..........LNGT.N.....HKL.R....D-D.L-........-......-..H....C...L...P.....K.K..T.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MES.............................. [...]
+B4HDJ4_DROPE/40-339    ............................................................................................d-VVFVIIP..NFGHL..YDVVKQK.AE...LQ..H..GILTQCIKR.I..T.VERKCN................-AQVIGSILL.......KVNAK..........LNGT.N.....HKL.R....D-D.L-........-......-..H....C...L...P.....K.K..T.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MES.............................. [...]
+B4GTA5_DROPE/448-747   ............................................................................................d-VVFVIIP..NFGHL..YDVVKQK.AE...LQ..H..GILTQCIKR.V..T.VERKCN................-AQVIGSILL.......KVNSK..........LNGT.N.....HKL.R....D-D.L-........-......-..H....C...L...P.....K.K..T.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MES.............................. [...]
+B5DT30_DROPS/694-993   ............................................................................................d-VVFVIIP..NSGHL..YDVVKQK.AE...LQ..H..GILTQCIKQ.I..T.VERKCN................-AQVIGNILL.......KVNSK..........LNGT.N.....HKL.R....D-D.L-........-......-..H....C...L...P.....K.K..T.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MES.............................. [...]
+B4GTA6_DROPE/448-736   ............................................................................................d-VVFVIIP..NFGHL..YDVVKQK.AE...LQ..H..GILTQCIKR.I..T.VERKCN................-AQVIGSILL.......KVNAK..........LNGT.N.....HKL.R....D-D.L-........-......-..H....C...L...P.....K.K..T.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......V....L...EE......IED....MES.............................. [...]
+B5DKZ0_DROPS/2-120     ...................................................................................tytvcqrrpc--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................FXGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MES.............................. [...]
+B4ISF4_DROPE/14-227    .........................................................................................tdvv--------..-----..----KQK.AE...LQ..H..GILTQCIKR.I..T.VERKCN................-AQVIGSILL.......KVNSK..........LNGT.N.....HKL.R....D-D.L-........-......-..H....C...L...P.....K.K..T.M..................................FLGADVTHPSPDQ...............REIP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MES.............................. [...]
+B4GDQ8_DROPE/669-968   ............................................................................................d-LVFVIIP..NVGRS..YDVVKQK.AE...LK..Y..GILTQCLKQ.I..T.VERKCN................-PQCIGNVLL.......KVNSK..........LNGI.N.....HKL.R....DDP.R-........-......-..-....C...L...L.....K.N..T.M..................................FLGADVTHPSPDQ...............WEMP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......T....L...EE......IED....MES.............................. [...]
+B4GDQ6_DROPE/661-960   ............................................................................................d-LVFVIIP..NVGRS..YDVVKQK.AE...LK..Y..GILTQCLKQ.I..T.VERKCN................-PQCIGNVLL.......KVNSK..........LNGI.N.....HKL.R....DDP.R-........-......-..-....C...L...L.....K.N..T.M..................................FLGADVTHPSPDQ...............WEMP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......T....L...EE......IED....MES.............................. [...]
+B5DYR9_DROPS/651-950   ............................................................................................d-LVFVIIP..NVGRS..YDVVKQK.AE...LK..H..GILTQCLKQ.I..T.VERKCN................-PQCIGNVLL.......KVNSK..........LNGI.N.....HKL.R....DDP.R-........-......-..-....C...L...L.....K.N..A.M..................................FLGADVTHPSPDQ...............WEMP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......T....L...EE......IED....MES.............................. [...]
+B5DYR8_DROPS/41-340    ............................................................................................d-LVFVIIP..NVGRS..YDVVKQK.AE...LK..H..GILTQCLKQ.I..T.VERKCN................-PQCIGNVLL.......KVNSK..........LNGI.N.....HKL.R....DDP.R-........-......-..-....C...L...L.....K.N..A.M..................................FLGADVTHPSPDQ...............WEMP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......T....L...EE......IED....MES.............................. [...]
+B5DU45_DROPS/389-589   ............................................................................................d-LVFVIIP..NVGRS..YDVVKQK.AE...LK..H..GILTQCLKQ.I..T.VERKCN................-PQCIGNVLL.......KVNSK..........LNGI.N.....HKL.R....DDP.R-........-......-..-....C...L...L.....K.N..A.M..................................FLGADVTHPSPDQ...............WEMP..SVVGVAASHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......T....L...EE......IED....MES.............................. [...]
+B5DWW4_DROPS/3-186     ..........................................................................................rll--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....K.N..T.M..................................FLGADVSHPSPDQ...............REIP..SVVGVAATHD...P...F.G.A...S....Y.N.....M.QY..R...LQ.....R..........S.......A....L...EE......IED....MES.............................. [...]
+Q5KAT1_CRYNE/560-859   ............................................................................................i-ILCILPR..KEASI..YQTIKSV.GA...EG..LfkPVVTQCLQS.A..K.IKSDRG................IDQYCGNVAM.......KVHCK..........LGGV.-.....TH-.-....QVK.HN........V......-..-....-...-...D.....K.T..T.M..................................LCGADVTHPPSRG..............rVLYP..SIAATVASIN...G...E.N.N...Y....F.A.....G.CV..T...EQ.....G..........G.......R....V...EI......IQL....LDE.............................. [...]
+Q5KAU3_CRYNE/580-879   ............................................................................................i-IFCILPK..KDPSI..YQAIKAC.AA...EQ..LfkPVVTQCLQS.L..K.IKSDRG................IEQYCGNVAM.......KVHAK..........LGGL.-.....THQ.V....SHQ.L-........-......-..-....-...-...E.....R.T..T.M..................................MVGADTGHPPAKG..............gALPP..SIAVTVAAVN...G...E.N.N...R....F.V.....S.GV..R...LQ.....E..........G.......R....V...EI......IQD....LEN.............................. [...]
+Q4TF92_TETNG/161-225   .....................................................................ragerqcvcvcvregaqqvtfrcs--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+A7SCI6_NEMVE/496-743   ............................................................................................l-IVVALPD.rGNKDV..YNEVKRV.GD...TV..L..GIPTQCVQM.K..Q.FTMA--................KPQVCSNIAM.......KINGK..........LGGT.N.....HVI.A....DSL.KA........TitddkgN..G....I...F...N.....S.P..V.I..................................IFGADVTHPAPGD...............NGIP..SIAAVVASLN...R...N.A.S...R....Y.C.....A.RV..R...PQthmkcK..........Q.......A....Q...EI......IVD....LAD.............................. [...]
+B9ZU55_9TURB/580-893   ............................................................................................i-LFFALPR..KDSGY..YARVKVA.AD...QL..L..IVPSQVVVA.G..G.-KG---................ITQKVDLLLQ.......KVNAK..........LGGQ.N.....TDL.V....PMK.QD........-......P..A....M...E...N.....V.A..R.Llge............................pimFIGADVTHPDSHD..............eDGRP..SIAAVIGSSH...R...D.I.F...S....Y.A.....A.QV..R...AQ.....K..........Pia..krrA....K...ES......IDD....MQT.............................. [...]
+Q4PLA9_PICGL/597-913   ............................................................................................f-LLCILPE.rKNSDL..YGPWKRK.FL...AD..L..GVINQCIAP.P..N.MRKV--................NDQYLTNVAL.......KINAK..........VGGL.N....sVLS.V....EFA.HK........I......P..K....I...S...T.....K.P..T.I..................................IIGMDVSHGSPGH...............ADSP..SISAVVSSRE..wP...L.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IEA...lYKPlpsg.......................... [...]
+Q56X15_ARATH/234-541   ............................................................................................f-LLCILAE.rKNSDV..YGPWKKK.NL...VD..L..GIVTQCIAP.T..R.L-----................NDQYLTNVLL.......KINAK..........LGGL.N....sLLA.M....ERS.TA........M......P..K....V...T...Q.....V.P..T.I..................................IVGMDVSHGSPGQ...............SDIP..SIAAVVSSRQ..wP...L.I.S...K....Y.K.....A.CV..R...TQ.....S..........R.......K....M...EM......IDN...lFKPvng........................... [...]
+Q84VQ0_ARATH/546-853   ............................................................................................f-LLCILAE.rKNSDV..YGPWKKK.NL...VD..L..GIVTQCIAP.T..R.L-----................NDQYLTNVLL.......KINAK..........LGGL.N....sLLA.M....ERS.PA........M......P..K....V...T...Q.....V.P..T.I..................................IVGMDVSHGSPGQ...............SDIP..SIAAVVSSRQ..wP...L.I.S...K....Y.K.....A.CV..R...TQ.....S..........R.......K....M...EM......IDN...lFKPvng........................... [...]
+Q84YI4_ARATH/550-857   ............................................................................................f-LLCILAE.rKNSDV..YGPWKKK.DL...VD..L..GIVTQCIAP.T..R.L-----................NDQYLTNVLL.......KINAK..........LGGL.N....sLLA.M....ERS.PA........M......P..K....V...T...Q.....V.P..T.I..................................IVGMDVSHGSPGQ...............SDIP..SIAAVVSSRQ..wP...L.I.S...K....Y.K.....A.CV..R...TQ.....S..........R.......K....M...EM......IDN...lFKPvng........................... [...]
+Q9ZVD5_ARATH/577-885   .............................................................................................FILCVLPD.kKNSDL..YGPWKKK.NL...TE..F..GIVTQCMAP.T..R.QPND--................--QYLTNLLL.......KINAK..........LGGL.N....sMLS.V....ERT.PA........F......T..V....I...S...K.....V.P..T.I..................................ILGMDVSHGSPGQ...............SDVP..SIAAVVSSRE..wP...L.I.S...K....Y.R.....A.SV..R...TQ.....P..........S.......K....A...EM......IES...lVKKngt........................... [...]
+AGO4A_ORYSJ/557-865    ............................................................................................f-LLCVLAE.rKNSDI..YGPWKRK.CL...AE..F..GIITQCVAP.T..R.V-----................NDQYITNVLL.......KINAK..........LGGL.N....sLLQ.I....ETS.PS........I......P..L....V...S...K.....V.P..T.I..................................ILGMDVSHGSPGQ...............SDIP..SIAAVVSSRE..wP...L.V.S...K....Y.R.....A.SV..R...SQ.....S..........P.......K....L...EM......IDG...lFKPqgaq.......................... [...]
+B8ACN1_ORYSI/524-832   ............................................................................................f-LLCVLAE.rKNSDI..YGPWKRK.CL...AE..F..GIITQCVAP.T..R.V-----................NDQYITNVLL.......KINAK..........LGGL.N....sLLQ.I....ETS.PS........I......P..L....V...S...K.....V.P..T.I..................................ILGMDVSHGSPGQ...............SDIP..SIAAVVSSRE..wP...L.V.S...K....Y.R.....A.SV..R...SQ.....S..........P.......K....L...EM......IDG...lFKPqgaq.......................... [...]
+A2ZRR6_ORYSJ/650-958   ............................................................................................f-LLCVLAE.rKNSDI..YGPWKRK.CL...AE..F..GIITQCVAP.T..R.V-----................NDQYITNVLL.......KINAK..........LGGL.N....sLLQ.I....ETS.PS........I......P..L....V...S...K.....V.P..T.I..................................ILGMDVSHGSPGQ...............SDIP..SIAAVVSSRE..wP...L.V.S...K....Y.R.....A.SV..R...SQ.....S..........P.......K....L...EM......IDG...lFKPqgaq.......................... [...]
+C0HGZ0_MAIZE/552-859   ............................................................................................f-LLCVLAE.rKNSDI..YGPWKKK.CL...AE..F..GIVTQCVAP.T..R.V-----................NDQYLTNVLL.......KINAK..........LGGL.N....sLLQ.I....ETS.PA........I......P..L....V...S...K.....V.P..T.I..................................ILGMDVSHGSPGH...............SDIP..SVAAVVSSRE..wP...L.I.S...K....Y.R.....A.SV..R...TQ.....S..........P.......K....M...EM......IDS...lFKPret........................... [...]
+B4FL08_MAIZE/45-352    ............................................................................................f-LLCVLAE.rKNSDI..YGPWKKK.CL...AE..F..GIVTQCVAP.T..R.V-----................NDQYLTNVLL.......KINAK..........LGGM.N....sLLQ.I....ETS.PA........I......P..L....V...S...K.....V.P..T.I..................................ILGMDVSHGSPGH...............SDVP..SIAAVVSSRE..wP...L.I.S...K....Y.R.....A.SV..R...TQ.....S..........P.......K....M...EM......IDS...lFKPrea........................... [...]
+C5YX36_SORBI/564-870   ............................................................................................f-LMCLLPE.rKNCEV..YGPWKRK.CL...AE..F..GIVTQCLAP.T..R.VN----................-DPYLLNLLM.......KINAK..........LGGL.N....sLLQ.V....EAS.PS........I......P..H....V...S...E.....V.P..T.I..................................ILGMDVSHGHPGQ...............-DRP..SVAAVVSSRQ..wP...L.I.S...K....Y.R.....A.SV..H...TQ.....S..........A.......R....L...EM......MSS...lFKPrgt........................... [...]
+B8AUX7_ORYSI/565-872   ............................................................................................f-LLCLLPE.rKNCEV..YGPWKRK.CL...AE..F..GIVTQCLAP.Q..R.V-----................NDQYLLNLLL.......KINAK..........LGGI.N....sLLQ.I....EAS.PS........I......P..L....V...S...K.....T.P..T.I..................................ILGMDVSHGQPGQ...............SDRP..SIAAVVSSRQ..wP...L.I.S...K....Y.R.....A.SV..H...TQ.....S..........P.......K....L...EM......MSS...lFKPrgt........................... [...]
+AGO4B_ORYSJ/565-872    ............................................................................................f-LLCLLPE.rKNCEV..YGPWKRK.CL...AE..F..GIVTQCLAP.Q..R.V-----................NDQYLLNLLL.......KINAK..........LGGI.N....sLLQ.I....EAS.PS........I......P..L....V...S...K.....T.P..T.I..................................ILGMDVSHGQPGQ...............SDRP..SIAAVVSSRQ..wP...L.I.S...K....Y.R.....A.SV..H...TQ.....S..........P.......K....L...EM......MSS...lFKPrgt........................... [...]
+Q01MP5_ORYSA/565-872   ............................................................................................f-LLCLLPE.rKNCEV..YGPWKRK.CL...AE..F..GIVTQCLAP.Q..R.V-----................NDQYLLNLLL.......KINAK..........LGGI.N....sLLQ.I....EAS.PS........I......P..L....V...S...K.....T.P..T.I..................................ILGMDVSHGQPGQ...............SDRP..SIAAVVSSRQ..wP...L.I.S...K....Y.R.....A.SV..H...TQ.....S..........P.......K....L...EM......MSS...lFKPrgt........................... [...]
+B9HK80_POPTR/565-884   ............................................................................................f-LLCILPE.rKNSDI..YGPWKRK.NL...SD..L..GIVTQCIAP.T..K.V-----................NDQYLTNVLL.......KINAKvefcnvipfeLGGM.N....sLLS.I....EHA.PS........I......P..L....V...S...K.....L.P..T.L..................................ILGMDVSHGSPGH...............SDVP..SIAAVVSSRH..wP...L.I.S...R....Y.R.....A.SV..R...TQ.....S..........Q.......K....V...EM......IAN...lFKPvagt.......................... [...]
+B9SP45_RICCO/574-882   ............................................................................................f-LLCLLPE.rKNSDL..YGPWKKK.NL...SD..F..GIVTQCIAP.Q..R.V-----................NDQYLTNVLL.......KINAK..........LGGL.N....sMLA.V....EHS.PS........I......P..L....V...S...K.....V.P..T.I..................................IIGMDVSHGSPGH...............SDVP..SIAAVVSSRQ..wP...L.I.S...R....Y.R.....A.CV..R...TQ.....S..........P.......K....V...EM......IDS...lYKPvsdt.......................... [...]
+Q2LFC1_NICBE/558-866   ............................................................................................f-LLCLLPE.rKNCDI..YGPWKRK.NL...AE..F..GIVTQCIAP.T..R.V-----................NDQYITNVLL.......KINAK..........LGGL.N....sMLT.V....EHA.PA........I......P..M....V...S...K.....V.P..T.I..................................ILGMDVSHGSPGQ...............SDVP..SIAAVVSSRQ..wP...S.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IDN...lFKRasdt.......................... [...]
+Q2LFC2_NICBE/565-873   ............................................................................................f-LLCLLPE.rKNCDI..YGPWKRK.NL...AD..Y..GIVTQCLAP.G..R.V-----................NDQYLTNLLL.......KINAK..........LGGL.N....sVLA.I....EHS.PS........I......P..M....V...S...K.....V.P..T.M..................................ILGMDVSHGSPGQ...............SDVP..SIAAVVSSRQ..wP...S.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IDN...lFKKvsdt.......................... [...]
+A5AMR1_VITVI/53-183    .......................................................................................lptllh--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B9HDH5_POPTR/582-891   ............................................................................................f-LVCLLPD.rKNSDI..YGPWKRK.NL...AE..Y..GIFNQCLAP.T..R.V-----................NEQYILNVLL.......KINAK..........LGGL.N....sLLA.M....EQS.RN........I......P..F....V...S...K.....V.P..T.I..................................IFGMDVSHGSPGQ...............SDMP..SIAAVVSSRN..wP...L.L.S...R....Y.R.....A.SV..R...SQ.....S..........P.......K....V...EM......VDS....LFTltpdk......................... [...]
+B9IHG7_POPTR/573-882   ............................................................................................f-LVCLLPD.rKNSDI..YGPWKRK.NL...AE..Y..GIFNQCLAP.T..R.V-----................NDQYILNVLL.......KINAK..........LGGL.N....sLLA.M....EQS.RN........I......P..F....V...S...K.....V.P..T.I..................................IFGMDVSHGSPGQ...............SDIP..SIAAVVSSRN..wP...L.L.S...R....Y.R.....A.SV..R...SQ.....S..........P.......K....V...EM......VDS....LFKltadk......................... [...]
+B9SN14_RICCO/570-878   ............................................................................................f-LLSIFPD.rKNSDI..YGPWKRK.NL...AE..F..GIFNQCLCS.P..N.RL----................SEMYVTNVLM.......KINAK..........LGGL.N....tFLA.V....EQS.RN........V......P..F....V...S...K.....V.P..T.I..................................IFGMDVSHGSPGQ...............SDVP..SIAAVVSSRN..wP...L.L.S...R....Y.R.....A.SV..H...SQ.....S..........P.......K....V...EM......IDS...lFKPegk........................... [...]
+B9EV67_ORYSJ/22-172    .........................................................................cgisiaqeftqvaarvlpap--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B8ACN0_ORYSI/540-670   .....................................................................................aceflane--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+AGO15_ORYSJ/546-853    ............................................................................................f-VLCVLPE.rKNCDI..YGPWKRM.CL...VK..Y..GIVTQCLAP.T..K.I-----................NDQYLTNVLL.......KINAK..........LGGL.N....sLLQ.I....ERN.QA........I......P..L....L...S...K.....T.P..T.I..................................ILGMDVSHGSPGR...............DDVP..SVAAVVSSLE..wP...L.I.S...K....Y.K.....A.SV..C...TQ.....S..........P.......R....L...EM......IDS....LFKlvgn.......................... [...]
+A9RNH7_PHYPA/593-893   .............................................................................................FILVILPD..KDSPI..YVPFKRF.CE...MK..I..GVVSQCMVK.P..R.QLND--................--QYLGNLAL.......KINLK..........MGGF.N....sPLS.P....R--.--........M......V..S....C...L...G.....P.S..T.I..................................IFGMDVSHGSPGE...............SSVP..SIAAVVATKN..wP...D.V.F...H....Y.S.....T.QV..R...IQ.....P..........A.......K....T...EM......IEG....LHDsk............................ [...]
+A9SRY5_PHYPA/573-879   .............................................................................................FILAILAE..KDSPI..YVPFKRL.CE...IR..L..GIISQCMVK.P..R.TLND--................--QFLGNLAL.......KINLK..........MGGL.N.....SPL.S....QRM.L-........-......-..H....C...L...G.....Q.S..T.I..................................IFGMDVTHGSPGD...............VEIP..SIAAVVATKN..wP...E.V.F...H....Y.S.....T.QV..K...VQ.....P..........A.......R....M...EM......IQG....LYEpe............................ [...]
+A9U2A5_PHYPA/597-903   .............................................................................................FILVILSD..KDSPI..YAPFKRF.CE...MK..I..GIISQCMVK.P..R.QI----................NDQYLGNLAL.......KINLK..........MGGF.N.....SPL.S....R--.-R........M......L..T....C...L...G.....E.S..T.I..................................IFGMDVSHGSPGD...............LSVP..SIAAVVATKN..wP...E.V.F...H....Y.S.....T.QV..R...TQ.....P..........P.......K....M...EM......ITG....LYEpk............................ [...]
+A9SKW0_PHYPA/722-774   .........................................................................................ttts--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+A8JAG8_CHLRE/672-990   ............................................................................................l-VLVVLPE..KTADE..YREVKRV.SD...IE..L..GIPSQVVVA.S..K.ARVGYRah...........kggGPQYCANVAM.......KINNK..........LGGV.N.....VQL.S....GGL.RN........M......P..V....L...GgagA.....V.P..F.M..................................VLGADVTHPTGAAar...........adSRDP..SVAAVVASLD...A...S.L.G...R....W.A.....S.RV..L...LQ.....A..........G.......R....Q...EV......ITG....MCG.............................. [...]
+A8J9T3_CHLRE/1058-1164 .......................................................................................fmvlga--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+Q8H714_PHYIN/1-173     .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+D0N1C0_PHYIN/587-890   ....................................................................................qiiwminvr--------..MDAHA..YGELKLM.SD...SEagV..GILSQCMLS.K..H.IPKC--................NPQYIANILM.......KVNTK..........LGGR.N.....GVI.S....---.GQ........L......P..L....V...S...A.....S.R..T.I..................................IFGADVTHPSPMD...............RSRP..SIAAVTASMD...A...N.F.I...R....H.A.....S.AI..R...AQ.....G..........H.......R....V...EQ......IMN....LKD.............................. [...]
+D0N1B9_PHYIN/587-890   .....................................................................................qiiwminp-------R..MDAHA..YGELKLM.SD...SEagV..GILSQCMLS.K..H.IPKC--................NPQYIANILM.......KVNTK..........LGGR.N.....GVI.S....---.GQ........L......P..L....V...S...A.....S.R..T.I..................................IFGADVTHPSPMD...............RSRP..SIAAVTASMD...A...N.F.I...R....H.A.....S.AI..R...AQ.....G..........H.......R....V...EQ......IMN....LKD.............................. [...]
+AGO1_ARATH/676-997     ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TE..L..GIVSQCCLT.K..H.VFKM--................SKQYMANVAL.......KINVK..........VGGR.N....tVLV.D....ALS.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.I.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lFKEwkdpqk........................ [...]
+Q3ECU7_ARATH/678-999   ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TE..L..GIVSQCCLT.K..H.VFKM--................SKQYMANVAL.......KINVK..........VGGR.N....tVLV.D....ALS.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.I.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lFKEwkdpqk........................ [...]
+A1E5M2_PEA/696-1017    ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TD..L..GVVSQCCLT.K..H.VFKM--................NKQYLANVSL.......KINVK..........VGGR.N....tVLV.D....ALS.RR........I......P..I....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.I.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lFKQwqdpvr........................ [...]
+Q2PEW1_TRIPR/1-247     ............................................................................................d--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lFKQwqdpar........................ [...]
+A1E5M3_PEA/726-1047    ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TD..L..GVVSQCCLT.K..H.VFKM--................SKQYLANVSL.......KINVK..........VGGR.N....tVLV.D....ALS.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.I.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lFKQwqdpvr........................ [...]
+Q2LFC4_NICBE/678-999   ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TE..L..GIVSQCCLT.K..H.VFKM--................SKQYLANVSL.......KINVK..........VGGR.N....tVLV.D....ALS.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.I.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lYKTwqdpvr........................ [...]
+B9SJV6_RICCO/687-1008  ............................................................................................l-LIVILPD..NNGSL..YGELKRI.CE...TD..L..GLVSQCCLT.K..H.VFRM--................NKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALS.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lFKEwqdpvr........................ [...]
+B9I4Y6_POPTR/688-1009  ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....AIS.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwqdpvr........................ [...]
+B9N365_POPTR/308-629   ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALS.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwqdpvr........................ [...]
+C5YY05_SORBI/736-1058  ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKANK................-QQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....V.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....T..........H.......R....Q...EL......IQD...lFKVyqdpqr........................ [...]
+B4FGY3_MAIZE/13-335    ............................................................................................l-LIVILPD..NNGSL..YGDVKRI.CE...TN..L..GLVSQCCLT.K..H.VFKVNK................-QQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALA.RR........I......P..L....V...S...D.....I.A..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwqdper........................ [...]
+B8AGF0_ORYSI/693-1014  ............................................................................................l-LIAILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwkdpqr........................ [...]
+B9F1L3_ORYSJ/693-1014  ............................................................................................l-LIAILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwkdpqr........................ [...]
+AGO1A_ORYSJ/709-1030   ............................................................................................l-LIAILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwkdpqr........................ [...]
+C5YE15_SORBI/712-1033  ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwqdpqr........................ [...]
+C0HEU9_MAIZE/87-408    ............................................................................................l-LIVILPD..INGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwqdpqr........................ [...]
+B9FC11_ORYSJ/374-695   ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwqdphr........................ [...]
+AGO1B_ORYSJ/746-1067   ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwqdphr........................ [...]
+B8AT34_ORYSI/729-1050  ............................................................................................l-LIVILPD..NNGSL..YGDLKRI.CE...TD..L..GLVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwqdphr........................ [...]
+C7J0V9_ORYSJ/1-271     .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-INVK..........VGGR.N....tVLV.D....ALT.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD...lFKVwqdphr........................ [...]
+A9RG03_PHYPA/598-919   ............................................................................................l-LIAILPD..NNGPL..YGDLKKQ.CE...TV..L..GVVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALS.RK........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPHPGE...............DFSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKEwkdpqk........................ [...]
+A9RTW5_PHYPA/744-1065  ............................................................................................l-LIAILPD..NNGPL..YGDLKKQ.CE...TV..L..GVVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALT.RK........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKEwrdpqk........................ [...]
+A9T6J3_PHYPA/524-842   ............................................................................................l-LIAILPD..NNGSL..YGDLKKQ.CE...TV..L..GVVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALS.RR........I......P..L....V...S...D.....K.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....T..........H.......R....Q...EL......IAD...lFKEytdpmk........................ [...]
+B8B2X0_ORYSI/647-968   ...........................................................................................ll--IGLLPD..NNGSL..YGDLKRI.CE...ID..L..GLVSQCCCT.K..Q.VFKM--................NKQILANLAL.......KINVK..........VGGR.N....tVLV.D....AVS.RR........I......P..L....V...T...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....S..........H.......R....Q...EL......IDD....LYNithdph........................ [...]
+AGO1D_ORYSJ/669-990    ...........................................................................................ll--IGLLPD..NNGSL..YGDLKRI.CE...ID..L..GLVSQCCCT.K..Q.VFKM--................NKQILANLAL.......KINVK..........VGGR.N....tVLV.D....AVS.RR........I......P..L....V...T...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....S..........H.......R....Q...EL......IDD....LYNithdph........................ [...]
+B9FR04_ORYSJ/644-965   ...........................................................................................ll--IGLLPD..NNGSL..YGDLKRI.CE...ID..L..GLVSQCCCT.K..Q.VFKM--................NKQILANLAL.......KINVK..........VGGR.N....tVLV.D....AVS.RR........I......P..L....V...T...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....S..........H.......R....Q...EL......IDD....LYNithdph........................ [...]
+C5Z2L1_SORBI/643-964   ............................................................................................l-LIGILPD..NNGSL..YGDLKRI.CE...ID..L..GLVSQCCCA.K..Q.VFKM--................NKQILANLAL.......KINVK..........VGGR.N....tVLA.D....AVS.RR........I......P..L....V...T...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....S..........H.......R....Q...EL......IED....LYKvvhdpq........................ [...]
+C5XWS2_SORBI/656-978   ............................................................................................l-LIGILPD..NNGSL..YGDLKRV.CE...ID..L..GIVSQCCCT.K..Q.VFKMNN................-KQILANLAL.......KINVK..........VGGR.N....tVLV.D....AVS.RG........I......P..L....V...T...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IED....LYKvwqdpq........................ [...]
+B8AFI6_ORYSI/637-958   ............................................................................................l-LIGILPD..NNGSL..YGDLKRV.CE...ID..L..GIVSQCCCT.K..Q.VFKM--................NKQILANLAL.......KINVK..........VGGR.N....tVLV.D....AVS.RR........I......P..L....V...T...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IED....LYKiwqdpq........................ [...]
+AGO1C_ORYSJ/638-959    ............................................................................................l-LIGILPD..NNGSL..YGDLKRV.CE...ID..L..GIVSQCCCT.K..Q.VFKM--................NKQILANLAL.......KINVK..........VGGR.N....tVLV.D....AVS.RR........I......P..L....V...T...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IED....LYKiwqdpq........................ [...]
+Q2LFC3_NICBE/604-925   ............................................................................................l-LVVILPD..NNGSL..YGDLKRI.CE...TE..L..GVVSQCCLT.K..H.VFKM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....AIS.RR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.I.T...K....Y.A.....G.LV..S...AQ.....A..........H.......R....Q...EL......IQD....LYTtrqdpv........................ [...]
+B1B5A8_DAUCA/736-1057  ............................................................................................l-LIAILPD..NNGSL..YGDLKRI.CE...TD..L..GVISQCCLA.K..H.VFRM--................SKQYLANVAL.......KINVK..........VGGR.N....tVLV.D....ALS.WR........I......P..L....V...S...D.....R.P..T.I..................................IFGADVTHPHPGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.S.....G.LV..C...AQ.....A..........H.......R....Q...EI......IQD....LYTtwqdpn........................ [...]
+PINH_ARATH/625-946     ............................................................................................l-LLAILPD..NNGSL..YGDLKRI.CE...TE..L..GLISQCCLT.K..H.VFKI--................SKQYLANVSL.......KINVK..........MGGR.N....tVLV.D....AIS.CR........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPENGE...............ESSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwqdpvr........................ [...]
+B0FHH7_BRANA/614-935   ............................................................................................l-LLAILPD..NNGSL..YGDLKRI.CE...TE..L..GLISQCCLT.K..H.VFKI--................SKQYLANVSL.......KINVK..........MGGR.N....tVLL.D....AIS.CR........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPENGE...............ESSP..SIGAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwqdpvr........................ [...]
+B9RTJ1_RICCO/626-947   ............................................................................................l-LLAILPD..NNGTL..YGDLKRI.CE...TD..L..GLISQCCLT.K..H.VFKI--................SKQYLANVSL.......KINVK..........MGGR.N....tVLL.D....AIS.CR........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPENGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwqdpvr........................ [...]
+B9HKB5_POPTR/631-952   ............................................................................................l-LLAILPD..NNGSL..YGDLKRI.CE...TD..L..GLITQCCLS.K..H.VFKI--................SKQYLANLSL.......KINVK..........MGGR.N....tVLL.D....AIS.CR........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPENGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwqdpvr........................ [...]
+B9HUQ6_POPTR/452-776   ............................................................................................l-LLAILPD..NNGSL..YGDLKRI.CE...TD..L..GLLTQCCLS.K..H.VFKI--................SKQYLANVSL.......KINVK..........MGGR.N....tVLL.D....AIS.CR........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPENGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwqdpvr........................ [...]
+PNH1_ORYSJ/620-941     ............................................................................................l-LLAILPD..NNGSL..YGDIKRI.CE...TD..L..GLISQCCLT.K..H.VFKI--................SKQYLANVSL.......KINVK..........MGGR.N....tVLL.D....AIS.WR........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPETGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwhdpqr........................ [...]
+B9FU05_ORYSJ/458-779   ............................................................................................l-LLAILPD..NNGSL..YGDIKRI.CE...TD..L..GLISQCCLT.K..H.VFKI--................SKQYLANVSL.......KINVK..........MGGR.N....tVLL.D....AIS.WR........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPETGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwhdpqr........................ [...]
+C0PNQ0_MAIZE/1-267     .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........MGGR.N....tVLL.D....AIS.WS........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPETGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....H.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwhdpqr........................ [...]
+C5Z5J6_SORBI/617-938   ............................................................................................l-LLAILPD..NNGPL..YGDIKRI.CE...TD..L..GLITQCCLT.K..H.VFKI--................SKQYLANVSL.......KINVK..........MGGR.N....tVLL.D....AIS.WR........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPETGE...............DSSP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD...lYKTwhdpqr........................ [...]
+B9STN2_RICCO/586-907   ............................................................................................l-LIAILPD..SNGSL..YGDLKRI.CE...TD..L..GLISQCCLT.K..H.VFKI--................NRQYLANVSL.......KINVK..........MGGR.N....tVLL.D....AIS.WR........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPESGE...............DISP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....P..........H.......R....Q...EL......IQD...lFKTwqdpqq........................ [...]
+A5ARQ9_VITVI/592-892   ............................................................................................l-LIAILPD..NNGSL..YGDLKRI.CD...TD..L..GLISQCCLT.K..N.VYKI--................SNQYLANVSL.......KINVK..........MGGR.N....tVLL.D....ALS.SG........I......P..L....V...S...D.....I.P..T.I..................................IFGADVTHPETGD...............DSCP..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LV..C...AQ.....A..........H.......R....Q...EL......IQD....---.............................. [...]
+C5WPM0_SORBI/900-1216  ............................................................................................l-LIIILPD..-MSGF..YGRIKRL.CE...TE..L..GLITQCCAP.K..N.VRKG--................GNQYLENLSL.......KINVK..........VGGR.N....tVLD.D....ALN.RR........I......P..L....L...T...D.....C.P..T.I..................................VFGADVTHPSPGE...............SSSP..SIAAVVASMD..wP...Q.V.T...K....Y.K.....C.LV..S...SQ.....G..........H.......R....V...EI......ING...lYTEvrdpqk........................ [...]
+AGO12_ORYSJ/693-1012   ...........................................................................................ql-LIVILTE..-ISGS..YGRIKRI.CE...TE..V..GVITQCCAP.K..S.LQKG--................GKQYLENLAL.......KMNVK..........VGGR.N....tVLE.D....ALH.KK........I......P..I....L...T...D.....R.P..T.I..................................VFGADVTHPSPGE...............DASP..SIAAVVASMD..wP...E.V.T...K....Y.K.....C.LV..S...TQ.....S..........H.......R....E...EI......ISN...lYTEvkdplk........................ [...]
+B9FAL8_ORYSJ/438-757   ...........................................................................................ql-LIVILTE..-ISGS..YGRIKRI.CE...TE..V..GVITQCCAP.K..S.LQKG--................GKQYLENLAL.......KMNVK..........VGGR.N....tVLE.D....ALH.KK........I......P..I....L...T...D.....R.P..T.I..................................VFGADVTHPSPGE...............DASP..SIAAVVASMD..wP...E.V.T...K....Y.K.....C.LV..S...TQ.....S..........H.......R....E...EI......ISN...lYTEvkdplk........................ [...]
+A2XKQ7_ORYSI/654-972   ............................................................................................l-LIVILPE..-ISGS..YGRIKRI.CE...TE..V..GVITQCCAP.K..S.LQKG--................GKQYLENLAL.......KMNVK..........VGGR.N....tVLE.D....ALH.KK........I......P..I....L...T...D.....R.P..T.I..................................VFGADVTHPSPGE...............DASP..SIAAVVASMD..wP...E.V.T...K....Y.K.....C.LV..S...TQ.....S..........H.......R....E...EI......ISN...lYTEvkdplk........................ [...]
+C5WPM1_SORBI/697-1047  ............................................................................................l-LIVVLPD.aNASFF..YGRIKRL.CE...TE..L..GIITQCCIP.K..N.VHKG--................GRQYLQNLAL.......KINVK..........VGGR.N....tVLE.D....ALN.RR........I......H..L....L...T...D.....L.P..T.I..................................IFGADVTHPAPGE...............DASP..SIAAVVASMD..wP...E.V.S...K....Y.R.....C.LV..S...SQ.....G..........H.......R....E...EI......IAD...lFTQvkdpqkgllhggmirhaeh........... [...]
+C0PMV6_MAIZE/89-412    ............................................................................................l-LIVVLPD.aNASVF..YGRIKRL.CE...TE..L..GLVTQCCQP.K..N.VFKG--................GRQYLQNLAL.......KINVK..........VGGR.N....tVLE.D....ALN.RR........I......H..L....L...T...D.....L.P..T.I..................................IFGADVTHPAPGE...............DASP..SIAAVVASMD..wP...Q.V.A...K....Y.R.....C.LV..S...SQ.....G..........H.......R....E...EI......ITD...lFTQvkdpqk........................ [...]
+B8APJ4_ORYSI/9-101     ..................................................................................ykcsvssqshr--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B9FEW4_ORYSJ/531-767   .............................................................................anatvfygrikrlcet--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....E...L...D.....M.P..T.M..................................IFGADVTHPPAGE...............DSSP..SIAAVVASMD..wP...E.V.S...K....Y.K.....C.SV..S...SQ.....S..........H.......R....E...EI......IAD...lFTEvkdsqn........................ [...]
+AGO11_ORYSJ/541-848    ............................................................................................l-LVIVLPD..ANATV.fYGRIKRL.CE...TE..L..GVITQCCLA.R..N.VQNV--................----------.......-----..........-GGR.N....tVLE.D....ALH.RR........I......P..L....L...T...D.....M.P..T.M..................................IFGADVTHPPAGE...............DSSP..SIAAVVASMD..wP...E.V.S...K....Y.K.....C.SV..S...SQ.....S..........H.......R....E...EI......IAD...lFTEvkdsqn........................ [...]
+B9MTL4_POPTR/505-810   ...........................................................................................qi-LIIILPD..-VSGS..YGTIKRV.CE...TE..L..GIVSQCCQP.K..Q.ARKC--................SPQYLENVAL.......KINVK..........AGGR.N....tVLE.D....ALN.RR........I......P..L....L...S...D.....T.P..T.I..................................IFGADVTHPQPGE...............DSSP..SIAAIVASMD..wP...E.V.T...T....Y.R.....G.LV..S...AQ.....K..........H.......R....Q...EI......IQD....CAG.............................. [...]
+B9SCN8_RICCO/632-949   ............................................................................................l-LIIILPD..-ISGS..YGIIKRV.CE...TE..L..GIVSQCCQP.R..Q.AAKL--................SKQYFENVAL.......KINVK..........VGGR.N....tVLN.D....AVQ.RR........I......P..L....V...T...D.....C.P..T.I..................................IFGADVTHPPPGE...............DSSP..SIAAVVASMD..wP...E.V.T...K....Y.R.....G.IV..S...AQ.....A..........H.......R....E...EI......IQD...lYKSfqdpqg........................ [...]
+B9HQS2_POPTR/635-955   ............................................................................................l-LIIILPD..-VTGS..YGKIKRV.CE...TE..L..GIVSQCCQP.Q..Q.AKKL--................SKQYMENVAL.......KINVK..........AGGR.N....tVLN.D....AFH.RR........I......P..L....L...T...D.....V.P..T.I..................................VFGADVTHPQAGE...............DAGP..SIAAVVASMD..wP...E.V.T...K....Y.R.....G.LV..S...AQ.....A..........H.......R....E...EI......IED...lYKKyqdpkk........................ [...]
+B9GEQ1_POPTR/548-869   ...........................................................................................ql-LIIILPD..-FSGS..YGKIKRI.CE...TE..L..GIVSQCCQP.Q..Q.AKKL--................SKQYLENVAL.......KINVK..........AGGR.N....tVLN.D....AIQ.RR........I......P..N....V...T...D.....L.P..T.I..................................IFGADVTHPQPGE...............DSSP..SIAAVVASMD..wP...E.V.T...K....Y.R.....G.LV..S...AQ.....A..........H.......R....E...EI......IQD...lYKKyqdpqk........................ [...]
+AGOL_ARATH/638-958     ............................................................................................l-LIVILPD..-VTGS..YGKIKRI.CE...TE..L..GIVSQCCQP.R..Q.VNKL--................NKQYMENVAL.......KINVK..........TGGR.N....tVLN.D....AIR.RN........I......P..L....I...T...D.....R.P..T.I..................................IMGADVTHPQPGE...............DSSP..SIAAVVASMD..wP...E.I.N...K....Y.R.....G.LV..S...AQ.....A..........H.......R....E...EI......IQD....LYKlvqdpq........................ [...]
+B8ALC4_ORYSI/596-877   ................................................................................yvfsprnmtilch--------..-----..-------.--...--..-..---------.-..-.------................----------.......---NQ..........VGGR.Nt...vLER.A....FIR.NG........I......P..F....V...S...E.....V.P..T.I..................................IFGADVTHSPPGE...............DSAS..SIAAVVASMD..wP...E.I.T...K....Y.R.....G.LV..S...AQ.....S..........H.......R....Q...EI......IED....LFSvgkdpv........................ [...]
+B9F6E0_ORYSJ/564-783   .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----VVASMD..wP...E.I.T...K....Y.R.....G.LV..S...AQ.....S..........H.......R....Q...EI......IED....LFSvgkdpv........................ [...]
+AGO13_ORYSJ/471-770    ..........................................................................................qll--IVILLE..-VSGS..YGKIKRV.CE...ND..L..GIVSQCCLP.R..H.ASRP--................NKQYLENVAL.......KINVK..........KSQQ.-.....---.S....S--.L-........-......-..-....-...-...-.....-.-..-.-..................................---VLMSHTPPGE...............DSAS..SIAAVVASMD..wP...E.I.T...K....Y.R.....G.LV..S...AQ.....S..........H.......R....Q...EI......IED....LFSvgkdpv........................ [...]
+MEL1_ORYSJ/696-1016    ............................................................................................l-LIVILPE..-VSGS..YGKIKRV.CE...TD..L..GIVSQCCLP.R..H.ASRP--................NKQYLENVAL.......KINVK..........VGGR.Nt...vLER.A....FIR.NG........I......P..F....V...S...E.....V.P..T.I..................................IFGADVTHPPPGE...............DSAS..SIAAVVASMD..wP...E.I.T...K....Y.R.....G.LV..S...AQ.....P..........H.......R....Q...EI......IED....LFSvgkdpv........................ [...]
+B8ALC8_ORYSI/696-1016  ............................................................................................l-LIVILPE..-VSGS..YGKIKRV.CE...TD..L..GIVSQCCLP.R..H.ASRP--................NKQYLENVAL.......KINVK..........VGGR.Nt...vLER.A....FIR.NG........I......P..F....V...S...E.....V.P..T.I..................................IFGADVTHPPPGE...............DSAS..SIAAVVASMD..wP...E.I.T...K....Y.R.....G.LV..S...AQ.....P..........H.......R....Q...EI......IED....LFSvgkdpv........................ [...]
+A3ANP6_ORYSJ/644-982   ............................................................................................l-LIVILPE..-VSGS..YGKIKRV.CE...TD..L..GIVSQCCLP.R..H.ASRP--................NKQYLENVAL.......KINVK..........VGGR.Nt...vLER.A....FIR.NG........I......P..F....V...S...E.....V.P..T.I..................................IFGADVTHPPPGE...............DSAS..SIAAVVASMD..wP...E.I.T...K....Y.R.....G.LV..S...AQ.....P..........H.......R....Q...EI......IED....LFSvgkdpv........................ [...]
+C5WX38_SORBI/703-1025  ............................................................................................l-LIVILPD..-VSGS..YGKIKRV.CE...TD..I..GIVSQCCLP.K..H.ASRP--................NKQYLENVAL.......KINVK..........VGGR.Nt...vLER.A....FVR.NG........I......P..F....V...S...E.....V.P..T.I..................................IFGADVTHPPPGE...............DSAS..SIAAVVASMD..wP...E.I.T...K....Y.R.....G.LV..S...AQ.....P..........H.......R....Q...EI......IED...lFTVtkdlqk........................ [...]
+B7ZZW2_MAIZE/663-969   ............................................................................................l-LIVILPD..-VTGY..YGEIKRM.CE...TD..L..GIVSQCINP.K..K.N--R--................NKQYFENLAL.......KINVK..........AGGR.Nt...vLER.A....SVP.NG........I......P..F....V...S...D.....V.P..T.I..................................IFGADVTHPTAGE...............ESSA..SVGAVVASMD..wP...Q.V.T...T....Y.K.....A.LV..S...AQ.....A..........H.......R....E...EI......IQN....LGG.............................. [...]
+Q7FS89_MAIZE/11-170    ..................................................................................crgmalaagtv--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----VVASMD..wP...Q.V.T...T....Y.K.....A.LV..S...AQ.....A..........H.......R....E...EI......IQN....LGG.............................. [...]
+Q8S478_MAIZE/38-188    ...........................................................................................hk--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----VVASMD..wP...Q.V.T...T....Y.K.....A.LV..S...AQ.....A..........H.......R....E...EI......IQN....LGG.............................. [...]
+C5XBU2_SORBI/675-995   ............................................................................................l-LIVVLPD..-VSGH..YGKIKRI.CE...TD..L..GIVSQCINP.K..K.NKN---................-KQYFENVAL.......KINVK..........VGGR.Nt...vLER.A....FVP.NG........I......P..F....V...S...D.....V.P..T.I..................................IFGADVTHPTAGE...............DSSA..SIAAVVASMD..wP...Q.V.T...T....Y.K.....A.LV..S...AQ.....A..........H.......R....E...EI......IQN...lFWTgtdpek........................ [...]
+B9FVX3_ORYSJ/462-794   ............................................................................................l-LIVILPD..-VNGY..YGRIKRV.CE...TE..L..GIVSQCLKP.G..RkLLSL--................DRQFLENVSL.......KINVK..........AGGR.Ns...vLQR.P....LVP.G-........-......-..-....G...L...E.....N.T..T.I..................................IFGADVTHPASGE...............DSSA..SIAAVVASMD..wP...E.I.T...K....Y.K.....A.LV..S...AQ.....P..........P.......R....Q...EI......IQD....LFTmtevaqnadapaq................. [...]
+AGO14_ORYSJ/677-1009   ............................................................................................l-LIVILPD..-VNGY..YGRIKRV.CE...TE..L..GIVSQCLKP.G..RkLLSL--................DRQFLENVSL.......KINVK..........AGGR.Ns...vLQR.P....LVP.G-........-......-..-....G...L...E.....N.T..T.I..................................IFGADVTHPASGE...............DSSA..SIAAVVASMD..wP...E.I.T...K....Y.K.....A.LV..S...AQ.....P..........P.......R....Q...EI......IQD....LFTmtevaqnadapaq................. [...]
+B8B7Y0_ORYSI/653-985   ............................................................................................l-LIVILPD..-VNGY..YGRIKRV.CE...TE..L..GIVSQCLKP.G..RkLLSL--................DRQFLENVSL.......KINVK..........AGGR.Ns...vLQR.P....LVP.G-........-......-..-....G...L...E.....N.T..T.I..................................IFGADVTHPASGE...............DSSA..SIAAVVASMD..wP...E.I.T...K....Y.K.....A.LV..S...AQ.....P..........P.......R....Q...EI......IQD....LFTmtevaqnadapaq................. [...]
+Q0DZI9_ORYSJ/119-248   ...................................................................................qstgqksphi--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....E.LI..S...AQ.....L..........E.......R....Q...EI......IGG....LFHstrdpk........................ [...]
+B8AFF9_ORYSI/534-832   ............................................................................................l-LIVILPE..-ERGN..YGKIKRV.CE...TK..L..GLVSQCCLP.K..N.VKTDTN................-IKYLENIAL.......KINVK..........VGGR.Nt...vLQQ.A....FVH.NG........I......P..F....V...S...D.....I.P..T.I..................................IFGADVSHPPPGM...............-YSS..SIAGVVGSID..wP...E.V.T...T....Y.R.....A.VI..S...AQ.....L..........E.......R....Q...EI......IGG....---.............................. [...]
+B9F134_ORYSJ/36-347    ............................................................................................l-LIVILPE..-ERGN..YGKIKRV.CE...TK..L..GLVSQCCLP.K..N.VKTDTN................-IKYLENIAL.......KINVK..........VGGQ.Nt...vLQQ.A....FVH.NG........I......P..F....V...S...D.....I.P..T.I..................................IFGADVSHPPPGMwld........qstgQKSP..HIELISAQL-...-...E.R.Q...E....I.I.....G.GL.fH...ST.....R..........D.......P....K...GC......LKP....-DG.............................. [...]
+D0MT95_PHYIN/497-796   ............................................................................................f-LLVILPA..KNSPV..YGDVKRM.SD...TV..L..GLPSQCIAS.Q..N.LPRA--................NPQFCANVCL.......KINMK..........LNGK.N.....AVL.R....D--.-P........L......P..L....I...S...S.....E.P..T.I..................................IIGADVEHPRSGM...............GGRP..SIAAVVASMD...R...Y.S.A...Q....Y.A.....A.RV..A...AQ.....K..........A.......S....S...D-......IQQ....LPN.............................. [...]
+D0MT54_PHYIN/891-1191  ............................................................................................q-LIMVIKQ.dKSVGS..YSDIKRM.SD...TV..L..GIPSQCIVS.Q..N.VRSA--................KPQYCANVCL.......KINMK..........LSGK.N.....SIL.R....E--.-P........L......P..L....V...S...T.....A.P..T.I..................................IIGADVEHPRSGM...............GSRP..SIASVVASLD...R...Y.S.A...K....Y.V.....A.RV..A...AQ.....K..........A.......S....S...DI......-QL....LPH.............................. [...]
+D0MT94_PHYIN/524-824   ............................................................................................q-LILVIKQ.dKGSVS..YGRIKRM.SD...TV..L..GIPSQCIVA.T..N.LRKA--................NPQVCANVCL.......KMNMK..........LSGK.N.....SVL.R....E--.-P........L......P..L....I...S...T.....C.P..T.I..................................VIGADVEHPRSGM...............GSRP..SIASVVASMD...A...Y.S.A...K....Y.I.....G.RV..A...AQ.....K..........A.......A....N...D-......IQQ....LPH.............................. [...]
+B3SEP3_TRIAD/438-734   ....................................................................rkvevlisklkkstadcgieginek--------..-----..-------.--...--..-..---NLCMQI.K..N.IDKA--................NHQFLANLAL.......KINAK..........LGGT.N.....NTI.N....QSE.L-........-......-..-....-...L...K.....K.P..T.I..................................IFGADVTHPGIGD...............QTSP..SVAAIVGSAN...I...D.L.S...H....Y.F.....H.AI..R...IQ.....E..........H.......R....K...EI......IQD....LQS.............................. [...]
+A8NJ50_BRUMA/1-61      .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+TAG76_CAEEL/660-966    .............................................................................................CIIVVLQS..KNSDI..YMTVKEQ.SD...IV..H..GIMSQCVLM.K..N.VSRP--................TPATCANIVL.......KLNMK..........MGGI.N.....SRI.V....ADK.IT........N......K..Y....L...V...D.....Q.P..T.M..................................VVGIDVTHPTQAEm.............rMNMP..SVAAIVANVD...L...L.P.Q...S....Y.G.....A.NV..K...VQ.....K..........K.......C....R...ES......VVY....LLD.............................. [...]
+A8XA10_CAEBR/683-989   .............................................................................................CIIVVLQA..KNSDI..YMTVKEQ.SD...IV..H..GIMSQCVLM.K..N.VSRP--................TPATCANIVL.......KLNMK..........MGGI.N.....SRI.V....ADQ.IT........N......K..Y....L...V...D.....Q.P..T.M..................................VVGIDVTHPTQAEm.............rMNMP..SVAAIVANVD...L...L.P.Q...S....Y.G.....A.NV..K...VQ.....K..........K.......C....R...ES......VVY....LLD.............................. [...]
+Q7JLZ2_CAEEL/652-958   .............................................................................................CIIVVLQS..KNSDI..YMTVKEQ.SD...IV..H..GIMSQCVLM.K..N.VSRP--................TPATCANIIL.......KLNMK..........MGGI.N.....SRI.V....ADQ.IT........N......K..Y....L...V...D.....Q.P..T.M..................................VVGIDVTHPTQAEm.............rMNMP..SVAAIVANVD...L...L.P.Q...S....Y.G.....A.NV..K...VQ.....K..........K.......C....R...ES......VVY....LLD.............................. [...]
+Q21079_CAEEL/655-961   .............................................................................................CIIVVLQS..KNSDI..YMTVKEQ.SD...IV..H..GIMSQCVLM.K..N.VSRP--................TPATCANIIL.......KLNMK..........MGGI.N.....SRI.V....ADQ.IT........N......K..Y....L...V...D.....Q.P..T.M..................................VVGIDVTHPTQAEm.............rMNMP..SVAAIVANVD...L...L.P.Q...S....Y.G.....A.NV..K...VQ.....K..........K.......C....R...ES......VVY....LLD.............................. [...]
+B7QBT5_IXOSC/313-623   ............................................................................................q-VIFVVVV..NKSPI..YNELKST.AE...TE..I..GVMTQCVTD.K..S.IMNKCN................-PMLVNNILQ.......KVNAK..........LGGV.N.....NTI.P....KSV.K-........-......S..V....I...F...S.....K.P..V.I..................................VMGADVTHPGAKE...............FNRP..SIAAVVASTD...P...F.A.F...R....Y.I.....T.AF..R...IQ.....K..........Q.......N....M...EVkarveiIED....MKS.............................. [...]
+B7Q990_IXOSC/474-787   ............................................................................................k-FLLIILN..PMIDN..HDAIKLI.CE...RD..L..GLATQCCME.K..N.VFNVVDkml..........hqpLPALLVNLCH.......KVNAK..........CGGD.A.....NTI.S....K--.--........R......P..A....I...F...E.....E.P..V.I..................................ILGADVNHPAPGR...............SNHP..SYAALVGSLD...S...C.P.S...K....Y.H.....A.SV..R...IQrtsanS..........N.......E....R...EI......IKD....LKG.............................. [...]
+B7Q811_IXOSC/611-920   ............................................................................................e-IMVIVLA..-KNSN..YAEIKQV.AE...TD..L..GLRTQCIMD.N..N.VIKKCN................-AALVTNLCQ.......KLNAK..........MGGT.N....nSLL.A....Q-E.K-........-......P..A....I...F...Q.....K.P..V.I..................................IIGADVTHPAPGD...............KLRP..SIAACVGSLD...S...I.P.S...K....F.H.....A.SI..R...IQ.....Meds....aamS.......R....V...EI......IKD....LKD.............................. [...]
+B7P230_IXOSC/468-776   ............................................................................................l-VIVVLGR..--NSS..YADIKQT.AE...TS..L..GIRTQCILE.Q..N.FTRNCK................-PQLMVNLCQ.......KINAK..........MGGI.N....nGLL.L....AQK.PE........-......-..-....I...F...R.....K.P..V.I..................................IIGADVSHPAPGD...............RIRP..SIAACVGSLD...S...I.P.S...K....Y.R.....A.SI..R...VQ.....L..........E.......D....Q...EA......VAR....VEMikd........................... [...]
+C3ZN91_BRAFL/470-771   ............................................................................................l-ILVVLPG..-KTPV..YAEVKRV.GD...TM..L..GVATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGV.N....nILV.P....HIR.PR........V......F..L....-...-...-.....E.P..V.I..................................FIGADVTHPPAGD...............GRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....T..........H.......R....Q...EI......IAD....LAS.............................. [...]
+C3ZQ22_BRAFL/680-848   .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+D2XMQ5_SACKO/1-219     .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------HPPAGD...............MKKP..SIAAVVASMD...A...H.P.S...R....Y.A.....A.SV..R...VQ.....S..........H.......R....Q...EL......IEE....LSH.............................. [...]
+C4Q6D1_SCHMA/608-835   ..........................................................................................xxx--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-LGADVTHPPAGD...............KTKP..SIAAVVASMD...A...H.P.S...R....Y.S.....A.TV..R...VQ.....S..........H.......R....Q...EI......IHD....LYP.............................. [...]
+Q5C3Y0_SCHJA/4-157     ............................................................................................y--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+A7RQ46_NEMVE/511-812   .............................................................................................MILVVLPG..-KTPV..YAEVKRV.GD...TM..L..GVITQCIQG.K..N.VTKP--................SPQTLSNLCL.......KINAK..........LGGV.N....nILA.P....EIR.PP........V......-..-....-...F...R.....E.P..V.I..................................FLGADVTHPAAGD...............DKRP..SVAAVVGSMD...A...H.P.S...R....Y.Y.....A.SV..R...VQ.....T..........H.......R....Q...EI......IAE....LAA.............................. [...]
+B2RFN1_OIKDI/771-1072  ............................................................................................l-IVVVLPG..-KTPV..YAEVKRV.GD...TC..L..GIATQCVQV.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....NMR.PK........I......-..-....-...F...Q.....E.P..V.I..................................FIGADVTHPPAGD...............KRKP..SIAAVVASMD...G...H.P.S...R....Y.C.....A.AV..R...VQ.....K..........H.......R....Q...EV......IDD....LSN.............................. [...]
+Q8CGT7_MOUSE/576-634   ..........................................................................................kls--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+C8TEF3_OIKDI/573-874   ............................................................................................l-IMVILPG..-RTPV..YAEVKRV.GD...TL..L..GVATQCVQV.K..N.VTKV--................TTQTLSNLCL.......KINVK..........LGGI.N....nILL.P....NAR.PR........V......-..-....-...F...N.....E.P..V.I..................................FIGADVTHPPAGD...............RRKP..SIAAVVASID...A...H.P.S...R....Y.C.....A.SV..R...VQ.....R..........H.......R....Q...EA......IED....LTN.............................. [...]
+B3VCG6_STRPU/599-900   ............................................................................................l-IIVVLPG..-KTPV..YAEVKRV.GD...IL..L..GIATQCVQV.K..N.VNRT--................TAQTLSNLCL.......KIKVK..........LGGV.N....nILA.P....NIR.PR........I......-..-....-...F...S.....E.P..V.I..................................FCGADVTHPPAGD...............DKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.SV..R...IQ.....T..........H.......R....V...EI......IQD....LQA.............................. [...]
+D4A2P5_RAT/843-954     ..........................................................................vrhcshdnflcssivfivg--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+Q4R7V5_MACFA/1-211     ............................................................................................m--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..---------D...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...EI......SQE....LLYsqevi......................... [...]
+AGO4_HUMAN/509-820     ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...EI......SQE....LLYsqevi......................... [...]
+D2H608_AILME/505-816   ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...EI......SQE....LLYsqevi......................... [...]
+A7MD27_HUMAN/509-820   ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...EI......SQE....LLYsqevi......................... [...]
+Q9NXV9_HUMAN/35-346    ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...EI......SQE....LLYsqevi......................... [...]
+AGO4_CHICK/442-753     ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...ET......SQE....LLYsqevi......................... [...]
+AGO4_XENLA/532-843     ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...ET......TQE....LLYsqevi......................... [...]
+Q4SVE6_TETNG/553-864   ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...DM......SQE...qLFSqevi.......................... [...]
+Q8CGT8_MOUSE/1000-1102 .....................................................................................lcsfmffl--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B7QCC4_IXOSC/509-810   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAS.............................. [...]
+A9QW17_TRICA/69-158    ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PR........I......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+A7BJS5_BOMMO/569-871   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SLR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGVDVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......VHE....MSS.............................. [...]
+B4LJF3_DROVI/646-948   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+B4KTB5_DROMO/643-945   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+B4P449_DROYA/624-926   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+B4JW20_DROGR/647-949   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+Q7KY08_DROME/607-909   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+B3NRF4_DROER/624-926   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+B4INL3_DROSE/624-926   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+B4GGS7_DROPE/642-944   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+Q28ZU1_DROPS/642-944   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+B3MHG1_DROAN/641-943   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+Q32KD4_DROME/641-943   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+Q960T1_DROME/258-560   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+Q27IQ2_DROSI/554-851   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+Q27IR0_DROME/554-851   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+Q8T059_DROME/81-383    ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....STR.PK........-......-..-....V...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+B4N5V9_DROWI/642-944   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...G...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+B0WFU8_CULQU/621-923   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...D.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+Q7PZ41_ANOGA/638-940   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...D.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+Q16EE2_AEDAE/482-784   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...D.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+Q16M62_AEDAE/604-906   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....SIR.PK........V......-..-....-...F...D.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQE....LSS.............................. [...]
+A9NJ58_PENMO/569-898   ...........................................................................................ql--VCVVLP..GKTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....GIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...NG......STT...qGQSasdgsrprqltfa................. [...]
+D2XYX4_PENJP/572-901   ...........................................................................................ql--VCVVLP..GKTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....GIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...NG......STT...qGQSasdgsrprqltfa................. [...]
+A9NJ57_PENMO/572-901   ...........................................................................................ql--VCVVLP..GKTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....GIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...NG......STT...qGQSasdgsrprqltfa................. [...]
+D2DK65_PENJP/572-901   ...........................................................................................ql--VCVVLP..GKTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....GIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...NG......STT...qGQSasdgsrprqltfa................. [...]
+D2DK66_PENJP/569-898   ...........................................................................................ql--VCVVLP..GKTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....GIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...NG......STT...qGQSasdgsrprqltfa................. [...]
+A7XZ43_PENMO/569-898   ...........................................................................................ql--VCVVLP..GKTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....GIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...NG......STT...qGQSasdgsrprqltfa................. [...]
+Q071E1_PENMO/569-898   ...........................................................................................ql--VCVVLP..GKTPV..YAEVKRV.GD...TV..L..GMATQCVQA.K..N.VNKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....GIR.PK........V......-..-....-...F...N.....E.P..V.I..................................FLGADVTHPPAGD...............NKKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...NG......STT...qGQSasdgsrprqltfa................. [...]
+A8WKF9_CAEBR/562-864   ...........................................................................................ql-VVIVLPG..-KTPV..YAEIKRV.GD...TV..L..GIATQCIQS.K..N.VTRT--................TPQTLSNICM.......KMNMK..........LGGV.N....cVLA.P....NVR.PK........I......-..-....-...F...S.....E.S..V.I..................................FLGCDITHPPAGD...............SRKP..SVAAIVGSMD...A...H.P.S...K....Y.A.....A.TV..R...VQ.....P..........N.......R....Q...EI......ITE....MAS.............................. [...]
+A8P168_BRUMA/623-925   ...........................................................................................ql--VCVVLP..GKTPV..YAEVKRV.GD...TV..L..GIATQCVQA.K..N.VIKT--................TPQTLSNLCL.......KMNVK..........LGGV.N....sILL.P....AVR.PR........I......-..-....-...F...T.....E.P..V.I..................................FLGCDITHPPAGD...............SRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....A..........H.......R....Q...EI......ISD....LTY.............................. [...]
+Q86B39_CAEEL/547-848   ............................................................................................l-IVVVLPG..-KTPI..YAEVKRV.GD...TV..L..GIATQCVQA.K..N.AIRT--................TPQTLSNLCL.......KMNVK..........LGGV.N....sILL.P....NVR.PR........I......-..-....-...F...N.....E.P..V.I..................................FLGCDITHPAAGD...............TRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......ITD....LTY.............................. [...]
+O16720_CAEEL/566-867   ............................................................................................l-IVVVLPG..-KTPI..YAEVKRV.GD...TV..L..GIATQCVQA.K..N.AIRT--................TPQTLSNLCL.......KMNVK..........LGGV.N....sILL.P....NVR.PR........I......-..-....-...F...N.....E.P..V.I..................................FLGCDITHPAAGD...............TRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......ITD....LTY.............................. [...]
+B2L7Q3_CAERE/1-268     .............................................................................................--------..-----..-------.--...--..-..-IATQCVQA.K..N.AIRT--................TPQTLSNLCL.......KMNVK..........LGGV.N....sILL.P....NVR.PR........I......-..-....-...F...N.....E.P..V.I..................................FFGCDITHPPAGD...............SRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......ISD....LTY.............................. [...]
+B2L7P9_CAERE/1-269     .............................................................................................--------..-----..-------.--...--..-..GIATQCVQA.K..N.AIRT--................TPQTLSNLCL.......KMNVK..........LGGV.N....sILL.P....NVR.PR........I......-..-....-...F...N.....E.P..V.I..................................FFGCDITHPPAGD...............SRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......ISD....LTY.............................. [...]
+A8X4Z3_CAEBR/691-992   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GIATQCVQA.K..N.AIRT--................TPQTLSNLCL.......KMNVK..........LGGV.N....sILL.P....NVR.PR........I......-..-....-...F...N.....E.P..V.I..................................FFGCDITHPPAGD...............SRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......ISD....LTY.............................. [...]
+Q3LTR7_CAEEL/668-969   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GIATQCVQA.K..N.AIRT--................TPQTLSNLCL.......KMNVK..........LGGV.N....sILL.P....NVR.PR........I......-..-....-...F...N.....E.P..V.I..................................FFGCDITHPPAGD...............SRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......ISD....LTY.............................. [...]
+Q20578_CAEEL/660-961   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GIATQCVQA.K..N.AIRT--................TPQTLSNLCL.......KMNVK..........LGGV.N....sILL.P....NVR.PR........I......-..-....-...F...N.....E.P..V.I..................................FFGCDITHPPAGD...............SRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......ISD....LTY.............................. [...]
+B6VQ75_CAEEL/681-982   ............................................................................................l-VVVVLPG..-KTPV..YAEVKRV.GD...TV..L..GIATQCVQA.K..N.AIRT--................TPQTLSNLCL.......KMNVK..........LGGV.N....sILL.P....NVR.PR........I......-..-....-...F...N.....E.P..V.I..................................FFGCDITHPPAGD...............SRKP..SIAAVVGSMD...A...H.P.S...R....Y.A.....A.TV..R...VQ.....Q..........H.......R....Q...EI......ISD....LTY.............................. [...]
+Q4S7L6_TETNG/228-304   ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQ-.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+AGO3_DANRE/518-819     ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EV......IQD....LAS.............................. [...]
+D4AC38_RAT/515-816     ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY.............................. [...]
+Q8BJP2_MOUSE/364-665   ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY.............................. [...]
+A2VDG1_MOUSE/513-814   ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY.............................. [...]
+D2H607_AILME/507-808   ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY.............................. [...]
+B2RAD8_HUMAN/515-816   ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY.............................. [...]
+Q5TA58_HUMAN/440-741   ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY.............................. [...]
+A1L365_MOUSE/515-816   ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY.............................. [...]
+AGO1_HUMAN/515-816     ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY.............................. [...]
+AGO1_MOUSE/515-816     ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.AVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY.............................. [...]
+Q4S7L5_TETNG/517-818   ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....H--.-Q........R......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY.............................. [...]
+Q8CGU0_MOUSE/527-843   ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.YE........R......-..-....-...-...-.....-.-..L.Lalsrgppge...............ssavfqqpviFLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY.............................. [...]
+B3KME0_HUMAN/440-741   ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINVK..........LGGI.N....sILV.P....H-Q.R-........-......S..A....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SITAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IED....LSY.............................. [...]
+D2HF39_AILME/511-813   ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAT.............................. [...]
+AGO2_RAT/517-819       ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA.............................. [...]
+A1A563_MOUSE/517-819   ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA.............................. [...]
+AGO2_RABIT/497-799     ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA.............................. [...]
+B0JYP5_BOVIN/517-819   ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA.............................. [...]
+Q6PHA2_MOUSE/94-396    ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA.............................. [...]
+AGO2_HUMAN/516-818     ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA.............................. [...]
+A4FVC0_HUMAN/465-767   ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA.............................. [...]
+Q8R3Q7_MOUSE/187-489   ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA.............................. [...]
+AGO2_MOUSE/517-819     ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA.............................. [...]
+Q8CGT9_MOUSE/501-743   ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA.............................. [...]
+AGO2_XENLA/519-821     ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LSA.............................. [...]
+C0IN02_XENLA/519-821   ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LSA.............................. [...]
+AGO2_XENTR/528-830     ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LSA.............................. [...]
+AGO2_BOVIN/517-819     ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLWL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA.............................. [...]
+Q6P239_MOUSE/277-579   ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQM.K..N.VQRT--................TPQTLSNLYL.......KINVK..........LGGV.N....nILL.P....QGR.PP........-......-..-....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.N...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...EI......IQD....LAA.............................. [...]
+Q4RKH3_TETNG/508-822   ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQV.K..N.VQKT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.--........-......P..L....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...DI......IQD....LAT.............................. [...]
+C9V4A2_CTEID/306-581   ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQV.K..N.VQKT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.--........-......P..L....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...DI......IQD....LAT.............................. [...]
+B0F0Y5_9TELE/526-828   ...........................................................................................ql-VVVILPG..-KTPV..YAEVKRV.GD...TV..L..GMATQCVQV.K..N.VQKT--................TPQTLSNLCL.......KINVK..........LGGV.N....nILL.P....QGR.--........-......P..L....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....Q..........H.......R....Q...DI......IQD....LAT.............................. [...]
+A3KFX7_MOUSE/1-109     .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+AGO3_BOVIN/518-820     ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS.............................. [...]
+D2H606_AILME/513-814   ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS.............................. [...]
+AGO3_HUMAN/518-819     ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS.............................. [...]
+B4DY67_HUMAN/154-455   ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS.............................. [...]
+B1ALI0_HUMAN/284-585   ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS.............................. [...]
+A8KA05_HUMAN/518-819   ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS.............................. [...]
+B4E1P5_HUMAN/346-647   ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS.............................. [...]
+AGO3_CHICK/518-819     ............................................................................................l-IIVILPG..-KTPV..YAEVKRA.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS.............................. [...]
+A3KFX6_MOUSE/1-140     .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+Q7M738_MOUSE/426-707   .....................................................................................rytfgygh--------..-----..-------.--...--..-..----TCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS.............................. [...]
+Q3TBP7_MOUSE/518-819   ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS.............................. [...]
+AGO3_MOUSE/518-819     ............................................................................................l-IIVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VIKT--................SPQTLSNLCL.......KINVK..........LGGI.N....nILV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EI......IQD....LAS.............................. [...]
+Q4TBP2_TETNG/578-853   ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCV--.-..-.------................--QTLSNLCL.......KINVK..........LGGI.N....nILV.P....QQR.YQ........P......-..-....-...-...-.....H.P..G.LgcsglssgvcvcvcvcetltsrprrpsvfqqpviFLGADVTHPPAGDgkkp......siaavRAPR..SRCSVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EV......IQD....LAS.............................. [...]
+D4A2P5_RAT/513-742     ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KINAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...EI......AQE...lLFSqevv.......................... [...]
+AGO4_MOUSE/509-820     ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KMNAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...EI......TQE....LLYsqevv......................... [...]
+Q8BTF2_MOUSE/35-346    ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KMNAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...EI......TQE....LLYsqevv......................... [...]
+Q8CGT8_MOUSE/660-885   ............................................................................................l-IVVILPG..-KTPV..YAEVKRV.GD...TL..L..GMATQCVQV.K..N.VVKT--................SPQTLSNLCL.......KMNAK..........LGGI.N....nVLV.P....HQR.P-........-......-..S....V...F...Q.....Q.P..V.I..................................FLGADVTHPPAGD...............GKKP..SIAAVVGSMD...G...H.P.S...R....Y.C.....A.TV..R...VQ.....T..........S.......R....Q...EI......TQE....LLYsqevv......................... [...]
+Q4SXU1_TETNG/1-206     ...........................................................................................sf--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..--IQVVGSMD...A...H.P.S...R....Y.C.....A.TV..R...VQ.....R..........P.......R....Q...EV......IQD....LAS.............................. [...]
+Q8CGT7_MOUSE/455-570   .......................................................................................vlgmat--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......Q..A....V...F...Q.....Q.P..V.I..................................FLGANVTYPPVGD...............GKKP..SIAAVMGSMD...A...H.P.N...R....Y.C.....V.TV..C...VQ.....Q..........H.......Q....Q...EI......IQD....---.............................. [...]
+B9FX53_ORYSJ/672-981   ...........................................................................................ll-LVVMTDD.kNNASL..YGDVKRI.CE...TE..I..GVLSQCCRA.K..Q.VYKERN................-VQYCANVAL.......KINAK..........AGGR.N.....SVF.L....NVE.AS........L......P..V....V...S...K.....S.P..T.I..................................IFGADVTHPGSFD...............ESTP..SIASVVASAD..wP...E.V.T...K....Y.N.....S.VV..R...MQ.....A..........S.......R....K...EI......IQD....LDS.............................. [...]
+AGO18_ORYSJ/747-1056   ...........................................................................................ll-LVVMTDD.kNNASL..YGDVKRI.CE...TE..I..GVLSQCCRA.K..Q.VYKERN................-VQYCANVAL.......KINAK..........AGGR.N.....SVF.L....NVE.AS........L......P..V....V...S...K.....S.P..T.I..................................IFGADVTHPGSFD...............ESTP..SIASVVASAD..wP...E.V.T...K....Y.N.....S.VV..R...MQ.....A..........S.......R....K...EI......IQD....LDS.............................. [...]
+B8B5Y3_ORYSI/745-1054  ...........................................................................................ll-LVVMTDD.kNNASL..YGDVKRI.CE...TE..I..GVLSQCCRA.K..Q.VYKERN................-VQYCANVAI.......KINAK..........AGGR.N.....SVF.L....NVE.AS........L......P..V....V...S...K.....S.P..T.I..................................IFGADVTHPGSFD...............ESTP..SIASVVASAD..wP...E.V.T...K....Y.N.....S.LV..R...MQ.....A..........S.......R....K...EI......IQD....LDS.............................. [...]
+C5X8G4_SORBI/699-1002  ............................................................................................l-LLAILPE..KNGNL..YGNFKRI.CE...TE..I..GIMSQCCLD.K..N.VRSA--................GPPYFANVAI.......KINAK..........FGGR.N.....LEF.A....NPK.ES........L......P..V....V...S...I.....E.P..T.I..................................IFGADVTHPAALD...............DTAP..SIASVVASQD..wP...T.V.A...N....Y.N.....G.IA..R...AQ.....G..........H.......R....K...EL......IDG....LED.............................. [...]
+C5X8G7_SORBI/41-220    ..........................................................................................ivk--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+C5WR49_SORBI/670-825   ..........................................................................................div--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+Q5DFJ9_SCHJA/2-164     .........................................................................................lylr--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+Q5DG80_SCHJA/3-99      ........................................................................................hclyr--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+Q5DCI0_SCHJA/265-566   ...........................................................................................fl--LLILYD..--EYS..YPTIKRL.SD...LQ..M..GIRTQCVRG.R..T.LDKP--................--NVFPNLLL.......KLNGK..........LGGV.N.....WQI.P....DLI.KN........-......-..-....-...G...N.....E.L..I.M..................................VFGADVTHPAPTQn.............qQIRK..SVAAVIGSVS...P...D.L.M...R....Y.G.....V.VI..R...QQ.....A..........TtekgnktA....R...EI......IDD....MRL.............................. [...]
+C4QPD0_SCHMA/628-928   ..........................................................................................afl--LLILYD..--EHA..YPAIKRL.SD...LQ..I..GIRTQCVRS.R..T.LDKP--................--NVFPNLLL.......KINGK..........LGGV.N.....WQI.P....DLI.KN........-......-..-....-...S...D.....E.L..I.M..................................VFGADVTHPAQTQ...............QVRK..SVAAVLGSVS...P...D.L.M...R....Y.G.....V.VI..R...QQ.....A..........TtekgnkaA....R...EI......IDD....MRL.............................. [...]
+C4QPD2_SCHMA/595-831   ............................................................................................f-IMLILYD..--DLA..YGTIKRL.SD...LK..M..GIRTQCVRG.S..T.LRKP--................--NVFPNLLL.......KLNGK..........LGGV.N.....WIV.P....DLT.E-........-......-..-....Y...S...K.....D.L..I.M..................................VFGADVTHPAPTQt.............hQVLK..SVAAVVGSVS...P...E.L.M...R....Y.G.....A.IV..R...QQ.....A..........TtergnktT....R...EI......IDN....LHL.............................. [...]
+C4QPD1_SCHMA/595-896   ............................................................................................f-IMLILYD..--DLA..YGTIKRL.SD...LK..M..GIRTQCVRG.S..T.LRKP--................--NVFPNLLL.......KLNGK..........LGGV.N.....WIV.P....DLT.E-........-......-..-....Y...S...K.....D.L..I.M..................................VFGADVTHPAPTQt.............hQVLK..SVAAVVGSVS...P...E.L.M...R....Y.G.....A.IV..R...QQ.....A..........TtergnktT....R...EI......IDN....LHL.............................. [...]
+Q0DZJ0_ORYSJ/35-101    ........................................................................................rakre--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B9IL53_POPTR/1-160     .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.M..................................FMGADVTHPCPLE...............DISP..SAAAVVGSMN..wP...A.A.N...K....Y.V.....S.RM..R...SQ.....T..........H.......R....Q...EI......IWD....LGA.............................. [...]
+A5BG29_VITVI/774-895   ........................................................................................dlgam--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+A5BW27_VITVI/926-1238  ...........................................................................................ql-LICIMER..-KHKG..YADLKRI.AE...TS..I..GVVSQCCLY.Q..N.LGKS--................SSQFLANLAL.......KINAK..........MGGC.T....vALY.N....SLP.SQ........I......PrlL....R...P...D.....E.P..V.I..................................FMGADVTHPHPLD...............DFSP..SIAAVVGSMN..wP...A.A.N...K....Y.V.....S.RM..R...SQ.....T..........H.......R....Q...EI......IQD....LGA.............................. [...]
+B9S921_RICCO/670-981   ...........................................................................................ql-LICIMEK..-RHKG..YADLKRI.AE...TS..V..GVVSQCCLF.P..N.LGKL--................SSQFLANLAL.......KINAK..........VGGC.T....vALF.N....SLP.SQ........I......PrlL....H...S...D.....D.P..V.I..................................FMGADVTHPHPLD...............DFSP..SVAAVVGSMN..wP...A.A.N...K....Y.A.....S.RM..R...SQ.....T..........H.......R....Q...EI......IQD....LGA.............................. [...]
+B9HXP0_POPTR/520-831   ...........................................................................................ql-LICVMEK..-KHKG..YADLKRI.AE...TS..V..GVVTQCCLY.L..N.LGKL--................SSQFLANLAL.......KINAK..........VGGC.T....vALY.N....SLP.SQ........I......PrlL....R...S...N.....E.P..V.I..................................FMGADVTHPHPLD...............DISP..SVAAVVGSMN..wP...A.A.N...K....Y.V.....S.RM..R...SQ.....T..........H.......R....Q...EI......IQD....LGE.............................. [...]
+D3GBV1_LOTJA/669-981   ............................................................................................l-LICVMER..-KHKG..YADLKRI.AE...TS..I..GLISQCCLY.P..N.LCKL--................SSQFLANLAL.......KINAK..........VGGC.T....vALY.N....SLP.SQ........L......PrlF....H...I...D.....E.P..V.I..................................FMGADVTHPHPLD...............DSSP..SVAAVVGSMN..wP...T.A.N...K....Y.I.....S.RI..R...SQ.....T..........H.......R....Q...EI......IQD....LGP.............................. [...]
+Q9C793_ARATH/649-950   ............................................................................................l-IICVMEK..-KHKG..YGDLKRI.SE...TR..I..GVVTQCCLY.P..N.ITKL--................SSQFVSNLAL.......KINAK..........IGGS.M....tELY.N....SIP.SH........I......PrlL....R...P...D.....E.P..V.I..................................FMGADVTHPHPFD...............DCSP..SVAAVVGSIN..wP...E.A.N...R....Y.V.....S.RM..R...SQ.....T..........H.......R....Q...EI......IQD....LDL.............................. [...]
+A3AJI1_ORYSJ/584-892   ............................................................................................l-LICVMER..-RHQG..YADLKRI.AE...TS..I..GVVTQCCLY.S..N.LSKL--................TSQFLTNLAL.......KINAK..........LGGC.N....iALY.S....SFP.CQ........I......PriF....L...S...E.....E.P..V.M..................................FMGADVTHPHPLD...............DSSP..SVVAVVASMN..wP...S.A.N...K....Y.I.....S.RM..R...SQ.....T..........H.......R....K...EI......IEQ....LDV.............................. [...]
+AGO7_ORYSJ/709-1017    ............................................................................................l-LICVMER..-RHQG..YADLKRI.AE...TS..I..GVVTQCCLY.S..N.LSKL--................TSQFLTNLAL.......KINAK..........LGGC.N....iALY.S....SFP.CQ........I......PriF....L...S...E.....E.P..V.M..................................FMGADVTHPHPLD...............DSSP..SVVAVVASMN..wP...S.A.N...K....Y.I.....S.RM..R...SQ.....T..........H.......R....K...EI......IEQ....LDV.............................. [...]
+A2YQ96_ORYSI/716-1024  ............................................................................................l-LICVMER..-RHQG..YADLKRI.AE...TS..I..GVVTQCCLY.S..N.LSKL--................TSQFLTNLAL.......KINAK..........LGGC.N....iALY.S....SFP.CQ........I......PriF....L...S...E.....E.P..V.M..................................FMGADVTHPHPLD...............DSSP..SVVAVVASMN..wP...S.A.N...K....Y.I.....S.RM..R...SQ.....T..........H.......R....K...EI......IEQ....LDV.............................. [...]
+D0EYF3_MAIZE/683-995   ............................................................................................l-LICVMER..-RHRG..YADLKRI.AE...TS..I..GVLTQCCLY.S..N.LSKL--................SFQFLANLAL.......KINAK..........LGGC.N....vALY.N....SLP.CQ........I......P..R....Vf.sD...E.....E.P..A.M..................................FMGADVTHPHPLD...............DSSP..SVVAVVASMN..wP...S.A.N...K....Y.I.....S.RM..R...SQ.....T..........H.......R....K...EI......IER....LDV.............................. [...]
+C5WVP1_SORBI/688-996   ............................................................................................l-LICVMER..-RHRG..YADLKRI.AE...TS..I..GVLTQCCLY.S..N.LSKL--................SFQFLANLAL.......KINAK..........VGGS.N....vALY.N....SLP.CQ........I......P..R....Vf.sD...K.....E.P..V.M..................................FMGADVTHPHPLD...............DSSP..SVVAVVASMN..wP...S.A.N...K....Y.I.....S.RM..R...SQ.....T..........H.......R....K...EI......IER....LDV.............................. [...]
+A3AXD9_ORYSJ/720-1023  ....................................................................................llfcpmlnr--------..--CHG..YKTLKLM.CE...TE..L..GIQTQCFLS.T..A.AKLDEK...............rQDQYITNLAL.......KINGK..........IGGS.N.....MQL.D....P--.DS........I......P..V....V...S...A.....K.D..F.M..................................FIGADVNHPPPGNv.............sKDIP..SIAAVVASVD...K...G.A.S...K....Y.V.....T.RI..R...AQ.....Y..........H.......R....C...EM......IQN....LGD.............................. [...]
+A2XXJ0_ORYSI/688-991   ....................................................................................llfcpmlnr--------..--CHG..YKTLKLM.CE...TE..L..GIQTQCFLS.T..A.AKLDEK...............rQDQYITNLAL.......KINGK..........IGGS.N.....MQL.D....P--.DS........I......P..V....V...S...A.....K.D..F.M..................................FIGADVNHPPPGNv.............sKDIP..SIAAVVASVD...K...G.A.S...K....Y.V.....T.RI..R...AQ.....Y..........H.......R....C...EM......IQN....LGD.............................. [...]
+AGO3_ORYSJ/720-1023    ....................................................................................llfcpmlnr--------..--CHG..YKTLKLM.CE...TE..L..GIQTQCFLS.T..A.AKLDEK...............rQDQYITNLAL.......KINGK..........IGGS.N.....MQL.D....P--.DS........I......P..V....V...S...A.....K.D..F.M..................................FIGADVNHPPPGNv.............sKDIP..SIAAVVASVD...K...G.A.S...K....Y.V.....T.RI..R...AQ.....Y..........H.......R....C...EM......IQN....LGD.............................. [...]
+Q00RR5_ORYSA/745-1048  ....................................................................................llfcpmlnr--------..--CHG..YKTLKLM.CE...TE..L..GIQTQCFLS.T..A.AKLDEK...............rQDQYITNLAL.......KINGK..........IGGS.N.....MQL.D....P--.DS........I......P..V....V...S...A.....K.D..F.M..................................FIGADVNHPPPGNv.............sKDIP..SIAAVVASVD...K...G.A.S...K....Y.V.....T.RI..R...AQ.....Y..........H.......R....C...EM......IQN....LGD.............................. [...]
+B9FCH7_ORYSJ/626-928   ..........................................................................................qll--FCPMSD..-QHPG..YKTLKLI.CE...TQ..L..GIQTQCFLS.F..L.ANKQQG................QDQYMSNLAL.......KINGK..........IGGS.N....iQLF.G....ESL.P-........-......-..R....I...S...G.....A.P..Y.M..................................FIGADVNHPSPGN...............VESP..SIAAVVASVD...Q...G.A.S...K....Y.V.....P.RI..R...AQ.....P..........H.......R....C...EV......IQH....LGD.............................. [...]
+AGO2_ORYSJ/687-989     ..........................................................................................qll--FCPMSD..-QHPG..YKTLKLI.CE...TQ..L..GIQTQCFLS.F..L.ANKQQG................QDQYMSNLAL.......KINGK..........IGGS.N....iQLF.G....ESL.P-........-......-..R....I...S...G.....A.P..Y.M..................................FIGADVNHPSPGN...............VESP..SIAAVVASVD...Q...G.A.S...K....Y.V.....P.RI..R...AQ.....P..........H.......R....C...EV......IQH....LGD.............................. [...]
+Q00RR6_ORYSA/693-995   ..........................................................................................qll--FCPMSD..-QHPG..YKTLKLI.CE...TQ..L..GIQTQCFLS.F..L.ANKQQG................QDQYMSNLAL.......KINGK..........IGGS.N....iQLF.G....ESL.P-........-......-..R....I...S...G.....A.P..Y.M..................................FIGADVNHPSPGN...............VESP..SIAAVVASVD...Q...G.A.S...K....Y.V.....P.RI..R...AQ.....P..........H.......R....C...EV......IQH....LGD.............................. [...]
+A2XXI9_ORYSI/693-995   ..........................................................................................qll--FCPMSD..-QHPG..YKTLKLI.CE...TQ..L..GIQTQCFLS.F..L.ANKQQG................QDQYMSNLAL.......KINGK..........IGGS.N....iQLF.G....ESL.P-........-......-..R....I...S...G.....A.P..Y.M..................................FIGADVNHPSPGN...............VESP..SIAAVVASVD...Q...G.A.S...K....Y.V.....P.RI..R...AQ.....P..........H.......R....C...EV......IQH....LGD.............................. [...]
+C5YG12_SORBI/746-1048  ..........................................................................................qll--FCPMSE..-QHPG..YKTLKLI.CD...TQ..L..GILTQCFLS.D..R.ANKPNG................QDQYMTNLAL.......KINGK..........LGGS.N.....VQL.F....DSL.PR........-......-..V....G...G...G.....A.P..F.M..................................FIGADVNHPSPGN...............VESP..SIAGVVASIN...S...G.A.N...K....Y.V.....S.RI..R...AQ.....P..........H.......R....C...EV......IQQ....LGE.............................. [...]
+C0PIX4_MAIZE/1-297     ..........................................................................................mse--------..-QHSG..YKTLKLI.CD...TQ..L..GILTQCLLS.D..R.ANNRKG................QDQYMTNLAL.......KINGK..........LGGS.N.....VQL.F....DSL.PR........-......-..V....G...G...G.....V.P..F.M..................................FIGADVNHPSPGN...............VESP..SIAAVVASVN...S...G.V.N...K....Y.V.....T.RI..R...AQ.....P..........H.......R....C...EV......IQQ....LGE.............................. [...]
+Q9SHF2_ARATH/841-1145  ............................................................................................l-VLCAMTG..-KHDG..YKTLKWI.AE...TK..L..GLVTQCFLT.I..S.AIKGET...............vSDQYLANLAL.......KINAK..........VGGT.N.....VEL.V....DNI.FS........F......-..F....K...K...E.....D.K..V.M..................................FIGADVNHPAAHD...............NMSP..SIVAVVGTLN..wP...E.A.N...R....Y.A.....A.RV..K...AQ.....S..........H.......R....K...EE......IQG....FGE.............................. [...]
+Q9SHF3_ARATH/665-965   ...........................................................................................tl-VLCAMSR..-KDDG..YKTLKWI.AE...TK..L..GLVTQCFLT.G..P.ATKG--................GDQYRANLAL.......KMNAK..........VGGS.N.....VEL.M....DTF.SF........-......-..F....K...K...E.....D.E..V.M..................................FIGADVNHPAARD...............KMSP..SIVAVVGTLN..wP...E.A.N...R....Y.A.....A.RV..I...AQ.....P..........H.......R....K...EE......IQG....FGD.............................. [...]
+Q8GX33_ARATH/191-491   ...........................................................................................tl-VLCAMSR..-KDDG..YKTLKWI.AE...TK..L..GLVTQCFLT.G..P.ATKG--................GDQYRANLAL.......KMNAK..........VGGS.N.....VEL.M....DTF.SF........-......-..F....K...K...E.....D.E..V.M..................................FIGADVNHPAARD...............KMSP..SIVAVVGTLN..wP...E.A.N...R....Y.A.....A.RV..I...AQ.....P..........H.......R....K...EE......IQG....FGD.............................. [...]
+A5AFZ6_VITVI/719-1022  ...........................................................................................qi-LVCVMAR..-KDPG..YNYLKWF.CE...TN..I..GIVTQCCLS.S..P.ANKA--................NDQYLANLAL.......KMNAK..........LGGS.N.....VEL.I....DRL.PH........F......-..-....E...N...E.....G.Y..V.M..................................FVGADVNHPGAWN...............SASP..SIAAVVATVN..wP...A.V.N...R....Y.A.....A.RV..R...PQ.....L..........H.......R....T...EK......ILN....FGD.............................. [...]
+A5CBU3_VITVI/601-900   ...........................................................................................qi-LVCVMAR..-RDAG..YGYLKWF.SE...TR..L..GMVTQCCLS.S..P.ANKA--................SDQYLANLAL.......KLNAK..........LGGS.N.....VEL.I....ERL.PR........F......E..-....-...G...E.....G.H..V.M..................................FIGADVNHPGSQN...............TTSP..SIAAVVATVN..wP...A.A.N...R....Y.A.....A.RI..R...PQ.....A..........H.......R....M...EK......IQN....FGA.............................. [...]
+A5B8D3_VITVI/625-924   ...........................................................................................qi-LVCVMAR..-KDAG..YGYLKWF.AE...TK..L..GMVTQCCLS.R..P.ANKV--................SDHHLANLAL.......KLNAK..........LGGS.N.....VEL.I....XRL.PR........F......E..-....-...G...E.....G.H..V.M..................................FIGADVNHPGSQN...............TTSP..SIAAVVATXN..wP...A.A.N...R....Y.A.....A.RI..R...PQ.....A..........H.......R....M...EK......IQN....FGA.............................. [...]
+B9NA51_POPTR/676-973   ...........................................................................................qf-LLCVMSK..-KDPG..YKYLKWI.CE...TK..V..GIVTQCCLS.R..S.ANKV--................NDQYLANIGL.......KINAK..........LGGS.N.....AEL.S....D--.-R........L......P..Y....F...G...D.....E.N..HiM..................................FIGADVNHPAARN...............TTSP..SIAAVVGTTN..wP...A.A.N...R....Y.A.....A.RV..R...PQ.....D..........H.......R....C...EK......ILN....FGD.............................. [...]
+B9S3I1_RICCO/146-445   ...........................................................................................qi-LICVMSR..-KDPG..YKYLKWI.SE...TK..V..GVVTQCCLS.D..Y.ANKG--................HDQYFANLAL.......KINAK..........LGGN.N.....VEL.N....DRL.PY........F......-..-....E...G...E.....D.H..V.M..................................FLGADVNHPGSRN...............TTSP..SIAAVVATVN..wP...A.A.N...R....Y.A.....A.RV..R...PQ.....D..........H.......R....K...EK......ILN....FGD.............................. [...]
+C1DZY0_9CHLO/572-888   ............................................................................................i-VFCVLPK.fDNKHI..YNSIKEC.AE...IE..I..GVRTQCIMN.K..V.GGGGGG...............lNDQTLANIMQ.......KVNAK..........LGGI.N.....MLV.S....PVT.SP........NaaprspT..Q....L...F...S.....K.A..T.I..................................IFGGDVSHASPGS...............-QAS..SIAALVGNIN...R...S.C.T...Q....Y.V.....A.RL..S...AQ.....A..........N.......R....K...EM......IDD....LKS.............................. [...]
+A8PFS7_COPC7/454-749   ....................................................................fvvvlpqggdeirigvkhfgnfinp--------..-----..-------.--...--..-..GIATQCLKG.F..Q.CRGA--................RPQYWANVMI.......QVNGK..........LGGI.-.....HAV.P....NST.TS........G......S..L....V...D...E....aI.A..T.M..................................LIGADVTHPPPGDq.............sKHKP..SFAAIVWSWD...R...H.Y.A...R....Y.R.....A.RD..S...IQ.....R..........G.......R....E...EI......IQH....MKP.............................. [...]
+A8NXQ6_COPC7/547-849   ............................................................................................l-IVVVLPDgpVANEI..YSQVKFF.GD...VK..M..GVHTQCMRA.M..R.CFGG--................NNQYFANIAL.......KLNAR..........LGGV.Nv...aPDL.S....DGV.SR........N......L..L....S...P...P.....N.K..T.L..................................VMGADVIHPSPGS...............EGRP..SFTAVVGSTD...C...N.M.T...R....F.V.....S.ST..R...AQ.....T..........S.......R....E...EI......IDD....LKD.............................. [...]
+B0CXE0_LACBS/567-880   .............................................................................................LIVVILPD..GGDDI..YTAVKHF.GD...VT..M..GVATQCLLA.K..K.CYRA--................NAQYWANVML.......KVNVK..........LDGI.Ns...vPDL.P....SLT.DP........-......-..-....-...-...A.....H.P..T.I..................................IMGADVIHPAPGT...............EGRP..SFTALVASVD...T...T.V.S...K....Y.V.....A.MS..R...VQ.....T..........G.......R....Q...EM......IDD....LED.............................. [...]
+B0CYG1_LACBS/553-863   .............................................................................................LIVVVLPE..GGNDI..YTAVKHF.GD...IT..M..GVATQCMKS.S..K.CFRA--................KPQYYANISL.......KINVK..........LGGI.N.....TI-.P....D-P.SS........V......S..V....L...T...Dp...hQ.P..T.I..................................VMGADVIHPAPGS...............DGRP..SFTALVANVD...S...D.T.A...K....Y.I.....A.DS..R...VQ.....T..........S.......R....Q...EM......IEE....LQA.............................. [...]
+B0D2D0_LACBS/417-738   ............................................................................................l-IVAVLPD..NVGDL..YSTIKHH.GD...IR..F..GVATQCLKS.H..K.CSRA--................KEQYWKNVML.......KVNVK..........LGGI.N.....VVP.S....STE.LS........D......P..A....-...-...-.....N.P..T.Ivigtpsai..................iasiltfcLSGADTAHPAPGA...............HDRP..SFTSVVANVD...S...N.V.A...K....Y.V.....A.ST..R...VQ.....K..........G.......R....Q...EI......ITD....LKE.............................. [...]
+A8PFQ6_COPC7/458-767   ............................................................................................l-VVVILPE..GGDEI..YTSVKHF.GD...IV..R..GVATQCLIG.R..K.CSRA--................RPQYWANVLL.......KVNVK..........LGGI.N.....SII.D....PSG.SP........L......-..A....D...P...A.....N.P..T.V..................................VMGADVIHPAPGS...............EGRP..SFTALVSSVD...T...H.A.T...K....Y.I.....A.CN..N...VQ.....E..........G.......R....T...EI......IED....LEA.............................. [...]
+A8P6A7_COPC7/477-803   ............................................................................................l-IFAVLPP..NSGDI..YTGVKRF.GD...VT..M..GIATQCLLS.N..K.CKKG--................NHQYWANVTL.......KVNVK..........LGGI.N....fY--.P....ELR.GD........I......-..L....D...P...A.....K.P..T.I..................................IMGADAIHPPPGV...............RDKP..SVTALVSSID...S...K.L.A...R....Y.V.....A.TS..R...VQ.....K..........Gsds.gkgG....R...EI......ILD....MED.............................. [...]
+D0U267_CRYPA/639-939   ............................................................................................l-IFYIMPS..KDIVA..YERLKKS.MD...VR..V..GTLSQIVLA.P..H.VMKA--................APQYCSNVAT.......KVNAK..........LGGY.T.....SKL.K....E--.--........-......G..G....F...F...K.....V.P..T.M..................................ILGADISHGSFGQt.............gNLQA..SLAAITMSMD...P...D.A.I...T....Y.A.....A.GC..E...TN.....G..........Y.......R....V...EI......MTKd..tVRR.............................. [...]
+A4QSM3_MAGGR/672-970   ............................................................................................l-IFFILPN..KSSIN..YERIKKS.AD...CR..Y..ALVTQCMQA.A..H.VRKN--................QAQYCSNVAM.......KVNAK..........LGGQ.T.....CKV.A....---.--........-......-..T....A...F...K.....K.P..T.M..................................MIGCDVSHAAPGA...............-QQA..SMAAITVSMD...K...D.C.A...R....Y.A.....A.AV..E...TN.....G..........Y.......R....C...EI......LLPq..nVRG.............................. [...]
+A6S388_BOTFB/557-866   ............................................................................................i-LFFILPD..RNSFM..YERFKKN.NE...CR..F..AMMSQMMNV.A..H.VAKA--................QPQYCSNVCM.......KVNAK..........LGGT.T.....CKV.A....DSK.PP........K......P..-....F...F...P.....R.A..T.M..................................VIGADVSHATPGS...............-PQS..SMACLTMSMD...S...T.A.C...R....Y.A.....A.AV..Q...TN.....G..........K.......R....V...EM......ISPd..nINS.............................. [...]
+A7F377_SCLS1/445-754   ............................................................................................i-LFFIMPD..RNSFL..YERLKKN.NE...CR..F..GMMSQMMNI.A..H.VLKA--................QPQYCSNVCM.......KVNAK..........LGGT.T.....CKV.A....DVK.P-........L......K..P....F...F...P.....R.P..T.M..................................VIGADVSHASPGS...............-PQS..SMACLTMSMD...S...T.A.C...R....Y.A.....A.AV..Q...TN.....G..........N.......R....V...EM......ISKd..nINS.............................. [...]
+C7YHP8_NECH7/612-917   ............................................................................................l-LFVVVSK..KNSGT..YERLKKS.AD...CR..F..GILTQVVLG.S..H.VQKN--................NGQYHSNVCM.......KVNAK..........LGGA.T....aCTP.P....LWK.TP........T......F..F....P...E...T.....R.P..T.I..................................MIGVDVSHTAPGG...............-TSP..STAAMTMSVD...K...D.A.T...R....Y.A.....A.LV..E...TN.....G..........Y.......R....V...EM......LTPg..nMRM.............................. [...]
+C9SSA6_VERA1/19-91     ............................................................................................p--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+C9SGB5_VERA1/589-897   ............................................................................................m-LFVIIRH..ANSGN..YERVKKS.AD...CR..F..GVLTQVVLS.R..H.VEKN--................QGQYHSNVAM.......KVNAK..........LGGT.T.....CRV.PhpnaKAP.RG........Q......P..P....F...F...S.....E.P..T.M..................................IMGLDVSHAGAGI...............-NSP..SMAAMTMSMD...K...D.A.C...R....Y.A.....A.VC..Q...TN.....G..........Y.......R....V...EM......LSPs..nTNE.............................. [...]
+Q8J276_NEUCR/628-929   ...........................................................................................qi-VFVAVPD..KSAHV..YERLKKI.FE...CR..Y..GIVTQVLQA.D..H.VKKA--................QGQYISNVCM.......KVNAK..........LGGQ.T.....SSL.T....ATK.AK........S......H..N....F...F...I.....R.P..T.M..................................MIGVDVTHASPGS...............-DMP..SIAAMCASVD...V...E.G.Y...Q....Y.R.....A.AV..Q...TN.....G..........W.......H....N...EI......LTDe..nIST.............................. [...]
+D1ZPU0_SORMA/563-867   ...........................................................................................qi-IFIVVPD..KTAHV..YERIKKI.FD...CR..Y..GVVTQVVQA.Q..H.VQKA--................NGQYLSNVCM.......KVNAK..........LGGQ.T.....SSL.T....ANK.TK........P......H..G....F...F...T.....R.P..T.M..................................MIGVDVSHASPGS...............-EMP..SIAAMCATVD...R...D.G.Y...Q....Y.R.....A.AV..Q...TN.....G..........W.......R....S...EV......LTNe..nIEA.............................. [...]
+B2AKU3_PODAN/441-754   ...........................................................................................qi-IFFILKD..KSAWY..YERLKRS.SD...CR..Y..AMPTQMLNL.Q..Q.VRKG--................QAQYCSNVCL.......KVNAK..........LGGC.T....aVA-.V....KTQ.AGqplkpnsvA......P..H....F...D...N.....T.P..T.M..................................FIGADVSHGAAGH...............-LSP..SVAAMTVSMD...K...A.A.T...K....Y.A.....A.GA..Q...TN.....G..........W.......R....V...EI......IQPy..nMMQ.............................. [...]
+B6Q5R7_PENMQ/547-853   ............................................................................................l-LLFIVPN..KDTLV..YHRIKKS.CD...CR..F..GVASQVLQR.A..H.VERK--................QPQYMSNVAM.......KVNAK..........LGGV.-.....-TC.K....VAP.-R........Q......D..S....L...N...R.....A.G..C.M..................................IIGADVSHAAPGS...............-TAA..SLTAISVSAD...Q...N.C.V...K....Y.M.....G.SC..Q...TG.....Y..........S.......R....V...EM......IDEd..nMKN.............................. [...]
+B8M5N8_TALSN/546-852   ............................................................................................l-LLFVVPN..KDVLV..YHKIKKS.CD...SR..F..GVASQVLQS.A..H.VFKKQL................--QYMSNVAM.......KVNAK..........LGGV.-.....-TC.K....AAP.RQ........A......-..S....M...N...R.....P.G..C.M..................................IIGADVSHAAPGS...............-IAA..SLTAISVSAD...L...D.C.V...K....Y.M.....G.SA..Q...TG.....Y..........S.......R....V...EM......IDEh..nMKS.............................. [...]
+C8V9S4_EMENI/46-154    ................................................................................feiyihlppgdhn--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+Q5B3I7_EMENI/46-154    ................................................................................feiyihlppgdhn--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+Q0CNV7_ASPTN/543-854   ............................................................................................l-LVVIVAD..KNSFN..YTRIKKS.CD...CR..W..GVPSQLLQA.A..Q.VAKN--................NPQYISNVLM.......KVNAK..........LGGT.T.....AKI.I....PKT.P-........-......D..A....T...L...K.....P.M..S.M..................................IIGADVTHSPLGV...............-WSP..SMAAISVCAD...T...F.G.G...R....Y.W.....G.AC..E...AN.....G..........E.......R....N...EI......INRa..nMEH.............................. [...]
+Q2UKV9_ASPOR/543-849   ............................................................................................l-LLIIVPD..KNSFT..YLRIKKS.CD...CR..W..GVPSQVLQS.A..H.VAKA--................NPQYISNVLM.......KVNAK..........LGGT.T.....A--.R....IIP.KV........N......D..A....S...L...K.....P.M..T.M..................................IIGADVTHPTIGV...............-WSP..SMAAVSVCMD...T...F.G.G...R....Y.W.....G.AC..E...TN.....G..........D.......R....V...EV......IARa..nMEH.............................. [...]
+B8N3T1_ASPFN/436-742   ............................................................................................l-LLIIVPD..KNSFT..YLRIKKS.CD...CR..W..GVPSQVLQS.A..H.VAKA--................NPQYISNVLM.......KVNAK..........LGGT.T.....A--.R....IIP.KV........N......D..A....S...L...K.....P.M..T.M..................................IIGADVTHPTIGV...............-WSP..SMAAVSVCMD...T...F.G.G...R....Y.W.....G.AC..E...TN.....G..........D.......R....V...EV......IARa..nMEH.............................. [...]
+A1CKK4_ASPCL/543-849   ............................................................................................l-LLIIVPD..KNSFT..YTRIKKS.CD...CR..W..GVPSQVLQS.G..H.VIKM--................NPQYASNVLM.......KVNAK..........LGGT.-.....-TA.R....AMP.KI........T......E..A....S...L...R.....P.R..S.M..................................IIGADVTHSPLGV...............-WSP..SMAAMSVCMD...T...F.G.G...R....Y.W.....G.AC..E...AN.....G..........D.......R....N...EI......IASs..nIEV.............................. [...]
+A1D6W7_NEOFI/543-849   ............................................................................................l-LLIIVPD..KNSFT..YTRIKKS.CD...CR..W..GVPSQVLQS.G..H.CVKL--................NPQYASNVLM.......KVNAK..........LGGT.-.....-TA.R....AVP.KV........T......E..A....T...L...R.....P.R..S.M..................................IIGADVTHSPLGV...............-WSP..SMAAMSVCMD...A...F.G.G...R....Y.W.....G.AC..E...AN.....G..........D.......R....L...EI......IATs..nIEV.............................. [...]
+B0XXP5_ASPFC/564-870   ............................................................................................l-LLIIVPD..KNSFT..YTRIKKS.CD...CR..W..GVPSQVLQS.G..H.CVKL--................NPQYASNVLM.......KVNAK..........LGGT.-.....-TA.R....AVP.KV........T......D..A....T...L...R.....P.R..S.M..................................IIGADVTHPSLGV...............-WSP..SMAAMSVCMD...T...F.G.G...R....Y.W.....G.AC..E...AN.....G..........D.......R....L...EI......IATs..nIEV.............................. [...]
+Q4WXX3_ASPFU/564-870   ............................................................................................l-LLIIVPD..KNSFT..YTRIKKS.CD...CR..W..GVPSQVLQS.G..H.CVKL--................NPQYASNVLM.......KVNAK..........LGGT.-.....-TA.R....AVP.KV........T......D..A....T...L...R.....P.R..S.M..................................IIGADVTHPSLGV...............-WSP..SMAAMSVCMD...T...F.G.G...R....Y.W.....G.AC..E...AN.....G..........D.......R....L...EI......IATs..nIEV.............................. [...]
+A2QDC5_ASPNC/643-949   ............................................................................................l-LLVIVPD..KNSFT..YTRIKKS.CD...CR..W..GVPSQVMQS.T..H.VIKG--................NAQYISNVLM.......KVNAK..........LGGV.T.....SRA.V....SKV.Q-........-......G..A....S...L...R.....P.G..S.I..................................IIGADVTHPPMGV...............-WSP..SMAALSVSKD...P...Y.G.S...S....Y.F.....G.SC..E...AN.....M..........D.......R....V...EI......ISRt..sMEF.............................. [...]
+C1G1H6_PARBD/510-817   ............................................................................................l-LIFVVSE..KNAFH..YSRIKKS.CD...CR..F..GVPSQVLQA.T..Q.VVKC--................NGQYISNVLM.......KVNAK..........LGGT.-.....TAR.V....SSK.IT........K......G..L....-...-...L.....P.F..T.M..................................IIGADVSHSAPGS...............-PAP..SMAAVSVSMD...Q...F.G.G...R....Y.A.....G.AC..Q...TN.....G..........D.......H....V...EM......ISEa..nVES.............................. [...]
+C1GU57_PARBA/495-755   .........................................................................................vdtf--------..-----..-------.--...--..-..---------.-..-.------................----------.......-VNAK..........LGGT.-.....TAR.V....SSK.IT........K......G..L....-...-...L.....P.F..T.M..................................IIGADVSHSAPGS...............-PAP..SMAAVSVSMD...Q...F.G.G...R....Y.A.....G.AC..Q...TN.....G..........D.......H....V...EM......ISEa..nVES.............................. [...]
+C0S3N8_PARBP/535-823   .............................................................................fnlrpellifvvlqat--------..-----..-------.--...--..-..---------.-..-.-QVV-K...............cNGQYISNVLM.......KVNAK..........LGGT.-.....TAR.V....SSK.IT........K......G..L....-...-...L.....P.F..T.M..................................IIGADVSHSAPGS...............-PAP..SMAAVSVSMD...Q...F.G.G...R....Y.A.....G.AC..Q...TN.....G..........D.......H....V...EM......ISEa..nVES.............................. [...]
+C5G7J1_AJEDR/547-854   ............................................................................................l-LIFIVMD..KNAFH..YTRIKKS.CD...CR..F..GVVSQVLQA.S..Q.VAKC--................NGQYISNVLM.......KVNAK..........LGGT.T.....-AR.I....ASK.IT........K......G..L....-...-...A.....P.F..S.M..................................IIGADISHSAPGS...............-FAP..SMAAMTVSMD...Q...F.G.G...R....Y.T.....G.AC..E...TN.....G..........D.......R....V...EM......ISQa..nIKS.............................. [...]
+C5JJJ6_AJEDS/547-854   ............................................................................................l-LIFIVMD..KNAFH..YTRIKKS.CD...CR..F..GVVSQVLQA.S..Q.VAKC--................NGQYISNVLM.......KVNAK..........LGGT.T.....-AR.I....ASK.IT........K......G..L....-...-...A.....P.F..S.M..................................IIGADISHSAPGS...............-FAP..SMAAMTVSMD...Q...F.G.G...R....Y.T.....G.AC..E...TN.....G..........D.......R....V...EM......ISQa..nIKS.............................. [...]
+C6HRE3_AJECH/547-854   ............................................................................................l-LIFIVMD..KNAFH..YTRVKKS.CD...CR..F..GVPSQVLQA.S..Q.VAKC--................NGQYISNVLM.......KVNAK..........LGGT.-.....TAR.I....SSK.IT........K......G..L....-...-...P.....P.Y..T.M..................................IIGADISHSSPGS...............-VAP..SMAAMTVSMD...Q...F.G.G...R....Y.T.....A.AC..E...TN.....G..........D.......H....V...EM......ISQa..nIKS.............................. [...]
+C0NUS8_AJECG/547-854   ............................................................................................l-LIFIVMD..KNAFH..YTRVKKS.CD...CR..F..GVPSQVLQA.S..Q.VAKC--................NGQYISNVLM.......KVNAK..........LGGT.-.....TAR.I....SSK.IT........K......G..L....-...-...P.....P.Y..T.M..................................IIGADISHSSPGS...............-VAP..SMAAMTVSMD...Q...F.G.G...R....Y.T.....A.AC..E...TN.....G..........D.......H....V...EM......ISQa..nIKS.............................. [...]
+A6RGK9_AJECN/547-854   ............................................................................................l-LIFIVMD..KNAFH..YTRVKKS.CD...CR..F..GVPSQVLQA.S..Q.VAKC--................NGQYISNVLM.......KVNAK..........LGGT.-.....TAR.I....SSK.IT........K......G..L....-...-...P.....P.Y..T.M..................................IIGADISHSSPGS...............-VAP..SMAAMTVSMD...Q...F.G.G...R....Y.T.....A.AC..E...TN.....G..........D.......H....V...EM......ISQa..nIRS.............................. [...]
+C5FDD8_NANOT/542-847   ............................................................................................l-MIFVVAD..RQSFH..YLRIKKS.CD...CR..F..GVPSQVLQG.Q..Q.VAKC--................NGQYISNVLM.......KINAK..........LGGT.T.....-AR.A....VSK.HS........S......-..-....G...L...P.....P.Y..T.M..................................IIGSDVSHSSPGS...............-FSP..SMAAMTVSMD...T...F.G.G...R....Y.T.....A.GC..E...TN.....G..........E.......R....V...EL......ISQa..nIKS.............................. [...]
+D4AMR8_ARTBE/628-933   ............................................................................................l-MIFVVAD..KQSFH..YLRIKKS.CD...CR..F..GVPSQVLQG.Q..Q.VVKC--................NGQYISNVLM.......KINAK..........LGGT.T.....ARA.V....SKQ.CS........-......-..-....G...L...P.....P.F..T.M..................................IIGADVSHSSPGS...............-FSP..SMAAMTVSMD...T...F.G.G...R....Y.T.....A.GC..E...TN.....G..........E.......R....V...EL......ISQa..nIKS.............................. [...]
+D4DBM7_TRIVC/515-807   ............................................................................................l-MIFVVAD..KQSFH..YLRIKKS.CD...CR..F..GVPSQVLQG.Q..Q.VGKC--................NGQYISNVLM.......KINAK..........LGGT.T.....ARA.V....SKQ.CS........-......-..-....G...L...P.....P.F..T.M..................................IIGADVSHSSPGS...............-FSP..SMAAMTVSMD...T...F.G.G...R....Y.T.....A.GC..E...TN.....G..........E.......R....V...EL......ISQa..nIRS.............................. [...]
+C5P9D5_COCP7/668-975   ............................................................................................l-LILIVQD..RHSFH..YLRIKKS.CD...CR..F..GVPSQVLQG.R..Q.VVKG--................SGQYISNVLM.......KINAK..........LGGT.-.....TAR.S....HSR.Y-........-......N..T....S...L...P.....P.F..T.M..................................IIGADVSHSSPGS...............-YAP..SMASFTVCMD...T...F.G.G...R....Y.T.....A.GC..E...TN.....G..........E.......R....R...EI......ISPl..nIKE.............................. [...]
+C4JZ88_UNCRE/552-859   ............................................................................................i-LILVVQD..KQSFH..YLRIKKS.CD...CR..F..GVPSQVLQG.Q..Q.VVKG--................SPQYISNVLM.......KVNAK..........LGGT.T....aRAI.S....KYN.PS........L......P..-....-...-...-.....P.Y..T.M..................................VIGADVSHASPGS...............-HAP..SMASFTVCMD...T...F.G.G...R....Y.N.....A.GC..E...TN.....G..........E.......R....R...EI......ISPa..nIRD.............................. [...]
+B6H4L5_PENCW/673-980   ............................................................................................l-MVFIVPD..KDSFV..YLRIKKS.SD...CR..Y..GTPSQVLQA.A..H.CINN--................RPQYHANVLM.......KVNAK..........LGGI.-.....-TA.R....AVP.KS........K......S..S....G...L...R.....P.G..S.M..................................IIGADVTHPMMGV...............-WTP..SLAAMSVSAN...S...T.A.T...R....Y.M.....G.GC..E...TN.....G..........D.......R....I...EI......IRDk..vVEY.............................. [...]
+Q0U7V7_PHANO/645-956   ............................................................................................f-LFFVVND..RNVDV..YRRIKKS.CD...IR..F..GVASQVLQA.K..H.VMSA--................SPQYISNVCM.......KVNAK..........LGGC.T....sVAK.S....NVI.PK........V.....aP..K....S...P...S.....I.P..T.M..................................VVGADVSHPAPGAg.............sSEAA..SFAAITVSAD...P...F.F.A...K....Y.W.....A.EV..Q...TN.....G..........N.......R....V...EM......VTTs..nIDE.............................. [...]
+B2W8P0_PYRTR/611-920   ............................................................................................n-FMFFIVN.dRNVEV..YRRIKKS.CD...IR..F..GVASQCLQA.K..H.VLSA--................SPQYISNVCM.......KVNAK..........LGGC.TsvaksQLI.P....KIA.--........-......P..K....S...A...S.....I.P..T.M..................................VVGADVSHPAPGAa.............sGEAA..SFAAITVSAD...A...Y.F.V...K....Y.W.....A.EC..N...TN.....G..........N.......R....V...EM......VTTt..nIYE.............................. [...]
+A7TMA9_VANPO/888-1209  ............................................................................................y-ILYVLRR.gNDSAV..YDRLKYI.TD...LK..F..GALNSCVVW.D..N.FKKNS-................-IQYNSNVVM.......KMNLK..........LLGS.Nh...sLSI.E....NNK.LL........I......D..K....E...S...N.....L.P..I.L..................................VLGSDVTHYPEKD...............--QN..SIASLVGSYD...D...K.F.T...Q....F.P.....G.DY..M...LQ.....D.........gP.......G....E...EI......ITN....VGS.............................. [...]
+A5E477_LODEL/107-430   ............................................................................................f-LLVVLPS..KDARF..YRAVKRA.GD...LK..V..GINNSCVIV.D..T.FTKRKFd.............kfDMTLFAQVGM.......KVNLK..........LGGS.N.....HKL.S....DAN.SK........G.....lV..D....E...K...K.....V.P..V.F..................................ILGADVTHPTGES..............nEESV..SIASVVGSED...A...I.F.N...S....F.P.....G.SL..R...VQ.....G..........G.......G....Q...EV......IAE....IKD.............................. [...]
+C5MCT9_CANTT/554-879   ............................................................................................y-LLVLLPR..SDTTY..YLSVKRV.CD...LK..V..GILNSCSIL.S..V.FIKQRRg.............sfDTMTYAQMAM.......KVNIK..........LGGS.N....hKLS.H....QDS.AS........L......V..D....K...N...G.....V.P..I.M..................................ILGADVTHPTGQI..............nHESV..SIAACVASED...G...I.F.N...K....F.P.....G.SI..R...IQ.....S..........G.......G....Q...EV......IKD....IKG.............................. [...]
+B9WGS3_CANDC/555-882   ............................................................................................y-LLFILPR..QDTQL..YSAIKRA.CD...LK..I..GILNSCSVL.N..T.FTKKRRgs...........dnfDTMTYAQMAM.......KINIK..........LGGS.Nh...kLSK.K....DSQ.GL........F......D..-....K...N...N.....V.P..I.F..................................ILGADVTHPTGEI..............nSESV..SIASIVGSED...G...I.F.N...K....F.P.....G.SV..R...IQ.....T..........G.......G....Q...EV......IAD....VKS.............................. [...]
+Q5A1B6_CANAL/296-623   ............................................................................................f-LLFILPR..QDTPL..YSAIKRA.CD...LK..V..GILNSCSIL.N..T.FTKKRRgt...........enfDAMTYAQMAM.......KINIK..........LGGS.Nh...kLSK.K....DSQ.GL........F......D..-....K...N...N.....V.P..I.F..................................ILGADVTHPTGEI..............nSESV..SIASIVGSED...G...I.F.N...K....F.P.....G.SV..R...IQ.....T..........G.......G....Q...EV......IAD....VKS.............................. [...]
+C4YGL4_CANAL/554-881   ............................................................................................f-LLFILPR..QDTPL..YSAIKRA.CD...LK..V..GILNSCSIL.N..T.FTKKRRgt...........enfDAMTYAQMAM.......KINIK..........LGGS.Nh...kLSK.K....DSQ.GL........F......D..-....K...N...N.....V.P..I.F..................................ILGADVTHPTGEI..............nSESV..SIASIVGNED...G...I.F.N...K....F.P.....G.SV..R...IQ.....T..........G.......G....Q...EV......IAD....VKS.............................. [...]
+Q2HHM4_CHAGB/694-1033  ............................................................................................l-VFVLLPD..KGAEL..YNAIKAA.AD...IK..V..GIHTVCMVE.S..K.AAKKFNkhtk........kmqfDLQFFDNILL.......KANLK..........QGGI.N.....HT-.L....EFP.TS........-......K..I....L...S...T.....W.Q..A.M..................................VLGLDVTHSPPGAn............kaKATP..SIIGMVANAD...E...H.L.A...Q....W.P.....A.TI..A...FQ.....D..........R.......E...nQ...EI......VTS....MQSf............................. [...]
+B6HRB3_PENCW/625-938   ............................................................................................f-LVVVLPT..TEGKN..FDYVKYA.GD...LK..T..GILTHCILY.D..K.VLRS--................NEQYWSNNAM.......KVNLK..........MGGC.N.....QLL.Q....PAN.AR........F......-..I....G...A...G.....K.S..T.M..................................VVGLDVTHPSSAD..............pEVFP..SVASIVASID...Y...R.M.G...Q....W.P.....G.EV..R...AQ.....M..........R.......R....Q...EH......VVH....LKD.............................. [...]
+D0U264_CRYPA/482-802   ................................................................................lalivfpyqqpsg--------..----V..YNKIKFL.GD...VV..H..GLHTVCVIG.R..K.FVKNGQ...............tQREYFANVSL.......KINLK..........LGGT.N.....HQL.T....H-P.PE........L......-..-....-...-...F.....R.G..T.M..................................VVGYDAVHPTAVE..............kEDLP..SHMALVASVD...E...G.L.G...Q....W.S.....G.CY..W...TQ.....K..........R.......R....Q...EI......ADAt..nLKQ.............................. [...]
+D1ZJ09_SORMA/711-1030  ............................................................................................f-LVVVLPD..KDSTT..YSWVKRA.AD...MK..Y..GIHTVCVQG.E..K.LVEEKG................QAGYYANVGL.......KVNLK..........FGGT.N.....HN-.-....-IK.TP........I......P..L....L...A...K.....G.K..T.M..................................VVGYDVTHPTNLTag..........qspSTAP..SIVGLVSTID...Q...H.L.G...Q....W.P.....G.MV..W...NN.....P..........R.......G....Q...ES......MTK...qFTD.............................. [...]
+Q1K6I6_NEUCR/733-1052  ............................................................................................f-VVVLLPR..KDVAI..YNMVKRA.AD...IT..F..GVHTVCCVA.E..K.FLSTKG................QLGYFANVGL.......KVNLK..........FGGT.N.....HN-.-....-IK.TP........I......P..L....L...A...K.....G.K..T.M..................................VVGYDVTHPTNLAag..........qspASAP..SIVGLVSTID...Q...H.L.G...Q....W.P.....A.MV..W...NN.....P..........H.......G....Q...ES......MTE...qFTD.............................. [...]
+Q9P8T1_NEUCR/582-901   ............................................................................................f-VVVLLPR..KDVAI..YNMVKRA.AD...IT..F..GVHTVCCVA.E..K.FLSTKG................QLGYFANVGL.......KVNLK..........FGGT.N.....HN-.-....-IK.TP........I......P..L....L...A...K.....G.K..T.M..................................VVGYDVTHPTNLAag..........qspASAP..SIVGLVSTID...Q...H.L.G...Q....W.P.....A.MV..W...NN.....P..........H.......G....Q...ES......MTE...qFTD.............................. [...]
+B2AR52_PODAN/574-886   ............................................................................................l-VIVVLGD..QDANV..YNTVKKL.GD...VE..F..GIQTVCVVR.N..K.ITNN--................-KGYFTNVAL.......KVNLK..........FGGV.N.....HKL.Q....NAH.P-........-......-..L....L...K...G.....G.K..T.M..................................VVGYDVTHPTNLPtg...........agENAP..SLVGLVASID...S...D.L.G...Q....W.P.....A.IA..W...QN.....P..........A.......R....V...EQ......LDV...kLAE.............................. [...]
+Q2GSQ8_CHAGB/651-969   ............................................................................................f-LLVLIPN..KDAVT..YSNIKKC.GD...CL..F..GIPTVCCRE.E..K.ITDPKG................QKGYFANVGL.......KVNLK..........FGGV.N.....HRV.Q....DTT.GL........V......-..-....-...-...-.....A.K..T.M..................................FVGYDVTHPTNLSag...........aaENAP..SLVGLVASVD...K...D.L.A...Q....W.P.....A.VT..W...AN.....K..........A.......R....V...EK......VGQ....NDDgq............................ [...]
+C9ST09_VERA1/571-888   ............................................................................................f-VLVILPR..QDTTL..YSVIKTL.GD...CQ..F..GFHTICAVE.K..T.FTKE--................NPMTFANIGL.......KWNLK..........NGGI.N.....HRV.K....D--.-P........I......G..I....V...A...Q.....G.K..T.M..................................VVGYDVTHPTNMGlqp.........gekDVPP..SIVGLVASVD...K...D.L.G...Q....W.P.....A.VA..W...EQ.....K..........A.......G....Q...EM......LDS...kLLE.............................. [...]
+C7YM23_NECH7/666-978   ............................................................................................f-ILIALGS..TDTAM..YSAVKLL.GD...VT..W..GIHTSCVQG.K..K.LANA--................NPGYYANVAL.......KWNLK..........AGGV.N.....HKL.R....N--.-E........F......G..I....I...K...E.....G.K..T.M..................................VVGYDVTHPTNMPtg...........asDDLP..SLVGLVATID...R...N.M.G...Q....W.P.....A.VS..W...EQ.....S..........S.......K....Q...EM......LDE...vLTE.............................. [...]
+A4RL50_MAGGR/721-1039  ............................................................................................m-VFVILPD.sKDAAV..YNAVKRI.AD...ID..L..GVHTVCMVR.K..N.LFKNGPg..............qNPQYYANVGL.......KVNLK..........AGGI.N....hKLS.Q....DIP.V-........-......-..-....S...K...G.....G.K..A.M..................................FVGWDVIHPTNLGvd...........kdSGLP..SVVGLVSSID...E...H.L.A...Q....W.P.....A.VA..W...AQ.....K..........G.......G....Q...EM......ADS...rLEE.............................. [...]
+C5GYE6_AJEDR/653-980   ...........................................................................................ql-IFFILPV..-VSSI..YSRIKYL.CD...VK..W..GVHSICVVA.G..K.FAKERN................-CQYFSNVAL.......KFNLK..........LGGT.N.....HTL.D....PSK.L-........-......G..F....I...S...E.....G.K..T.M..................................VVGLDVTHPSPGS..............sSNAP..SIAAIVASID...Q...D.L.T...Q....W.P.....A.DV..R...IQ.....P..........S.......R....Q...EM......VSG....LDE.............................. [...]
+C5K303_AJEDS/770-890   .................................................................................psriiirrprrq--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+C0S8I9_PARBP/1049-1137 ............................................................................................p--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+C4JIN7_UNCRE/692-1007  ............................................................................................f-VVALLPK..YDQQI..YSLVKHQ.GD...IK..T..GIPTVCVVE.K..P.IKDKQTntsy.......vglkdDEGTLRNISL.......KVNLK..........LGGI.N.....HEI.T....SRQ.EI........R......N..I....-...-...M.....Q.T..T.M..................................FIGIDVTHPTGTEs.............qSDAP..SIAAVVANTD...P...T.L.S...Q....W.P.....A.SI..T...TQ.....G..........H.......R....K...EM......VED...dLYS.............................. [...]
+C5P8C9_COCP7/682-993   ............................................................................................y-VIVLLPK..FDQQV..YSYVKYY.GD...IV..T..GIPNTCVTE.K..Y.VKKEKRit...........fktDGGAVENIAL.......KINLK..........LGGI.N.....HEI.Q....SDG.RI........H......D..I....-...-...I.....R.T..T.M..................................FIGIDVTHPTGTDs.............qSGAP..SISAVVANND...P...T.L.A...Q....W.P.....A.SI..T...TQ.....E..........H.......R....K...EM......VES...vLER.............................. [...]
+C5FBF4_NANOT/570-628   ..........................................................................................pda--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B2VW51_PYRTR/606-910   ............................................................................................f-LFALLPS..DNTVL..YDSIKLL.FD...CK..L..GLPSVCCIG.S..K.FAKL--................DPHYFANVAM.......KFNQK..........LGGV.N.....HTV.P....LAK.LA........-......-..-....P...L...D.....A.Q..T.I..................................IFGIDVTHPSPGS..............sQTAP..SIAGVVASVD...A...K.F.S...Q....Y.A.....A.SM..R...TQ.....A..........R.......R....V...EM......VAE....LEE.............................. [...]
+Q0UNU9_PHANO/666-973   ............................................................................................f-LFVILPS..DNAVL..YDCIKFV.CD...CK..L..GVPNICNIG.S..K.FSKEKG................QMQYFANVAM.......KFNQK..........LGGV.N.....HT-.V....ELK.RM........A......P..-....-...L...D.....P.Q..T.I..................................LFGIDVTHPSPGS..............sDSAP..SVAGVVASVD...S...L.F.S...Q....F.P.....A.SM..R...TQ.....R..........G.......R....Q...EM......VEE....LEE.............................. [...]
+B0D488_LACBS/608-916   ...........................................................................................ti-VLVILSN..GDKHV..YSGLKHL.CD...CY..L..DLATVCVHS.S..K.IRKEKG................QLQYFANVAL.......KFNMK..........LGGV.N.....HAL.N....AAN.M-........-......A..W....L...K...K.....A.P..T.M..................................LVGIDVTHPGPGS..............vKGTP..SIAAVVASCE...S...D.F.A...Q....Y.P.....A.SM..E...IQ.....E..........T.......K....K...EM......VTN....LAK.............................. [...]
+A8P0D4_COPC7/619-925   ............................................................................................i-VLVILSS..GDKHV..YNGIKKL.CD...TQ..L..DLPTVCVQT.A..K.FRKEKG................QPQYFANVAL.......KVNMK..........LGGV.N.....HVL.D....K--.DN........M......T..W....L...K...Q.....K.P..T.M..................................LVGMDVTHPGPGS..............rLGTP..SVAAVVASCD...P...D.F.A...Q....F.P.....C.SM..E...IQ.....E..........S.......K....K...EM......ITN....LEK.............................. [...]
+A8P2K4_COPC7/589-903   ...........................................................................................sf-MLVLLEQ..KEKYI..YPGIKRI.GD...VE..L..GLLTLHMQL.P..R.VFGDSLgg............tkRDQYLSNVAL.......KVNTK..........LGGV.N.....HML.E....DSA.M-........-......A..W....L...R...K.....K.K..T.M..................................MVGIDVTHPSPLS..............kEGTP..SIAAVVASVD...D...N.F.V...Q....F.P.....A.SL..R...IQ.....T..........S.......K....K...EM......LDE....LSD.............................. [...]
+B0E0C2_LACBS/610-916   ...........................................................................................sf-VLVLLEN..RDNYI..YPGIKRI.CD...VE..L..GIHTVHMQL.G..K.ALTDER...............kQDQYFSNVAL.......KVNTK..........LGGM.N....hLLE.P....N--.-A........M......N..W....L...T...K.....K.K..T.M..................................MVGIDVTHPGPNS..............rEGTP..SIAAVVANVD...D...N.F.V...Q....F.P.....A.SL..R...IQ.....Q..........H.......S....K...KE......MLD...eLRD.............................. [...]
+A4R6J1_MAGGR/641-908   ............................................................................................f-VLIILPD..KDVSR..YNMIKYL.GD...VC..Y..GVPTVCVAS.R..T.FFPARG................ADQMFGNLGL.......KINLK..........LGGV.N.....HKI.E....DSL.LG........I......-..-....V...A...Q.....G.K..T.M..................................IVGIDVAHPPAGA...............AVTA..SIAAMVASID...S...N.L.A...Q....W.P.....G.EI..G...IQ.....S..........Q.......A....R...KE......QVD...aLTS.............................. [...]
+B8MQK8_TALSN/682-995   .............................................................................................FILVILPS..RDTLL..YNTVKYL.CD...VK..H..GLLHACVTA.N..K.FAKP--................SAQYDANVAL.......KVNLK..........LGGT.N.....HRV.G....GTQ.L-........-......G..I....I...S...E.....G.K..T.M..................................LVGIDVTHPSPGS..............aKSAP..SIAAIVASVG...T...N.L.S...Q....F.P.....A.QL..R...VQ.....T..........E.......K....Q...EK......VDA....LDV.............................. [...]
+B6QUK3_PENMQ/689-1001  ............................................................................................f-VLVVLPR..RETFL..YNTIKYL.CD...VK..Y..GLLHACVVA.D..K.FARG--................GPQYDANVAL.......KVNLK..........LNGT.N.....HIV.G....GT-.-Q........L......G..L....I...S...K.....G.K..T.M..................................LVGIDVTHPSPGS..............vKNAP..SIAAIVASVG...K...D.L.S...Q....F.P.....A.QL..H...VQ.....P..........G.......K....Q...EQ......VDA....LDV.............................. [...]
+B6H0X0_PENCW/641-959   ...........................................................................................vf-ILGILYT..KDTGV..YNCVKQV.CD...VR..V..GIRNVNVLA.E..K.LANS--................NDQYNANVGL.......KINLK..........LGGA.N.....QAL.R....TQD.L-........-......G..I....I...S...E.....G.K..T.M..................................LVGIDVTHPSPGS..............aSTAP..SVAGIVASVD...G...T.L.A...Q....W.P.....A.EI..R...VQ.....G..........A.......R....Q...EM......VAD....LET.............................. [...]
+A1C469_ASPCL/690-1008  ............................................................................................l-ILSIMYG..SDTEA..YNSLKKV.CD...VH..C..GVRNINVLA.E..K.LRGA--................NDQYYANVGL.......KFNLK..........LGGA.N.....QSL.K....TSE.LG........I......-..-....V...A...E.....G.K..T.M..................................LVGIDVTHPSPGS..............sATAP..SVAGMVASID...S...S.L.S...Q....W.P.....A.DI..R...IQ.....T..........S.......R....Q...EM......VSD....LDA.............................. [...]
+A1DBD4_NEOFI/680-998   ............................................................................................l-ILTILYS..SDAEA..YNCIKQI.CD...VR..R..GVRNINVLA.E..K.LRGA--................NDQYYANVGL.......KFNLK..........LGGA.N.....QTL.K....ASE.LG........I......-..-....V...A...E.....G.K..T.M..................................LVGIDVTHPSPGS..............sAEAP..SVAGMVASVN...S...S.L.S...Q....W.P.....A.DI..R...IQ.....T..........S.......R....Q...EM......VSD....LDE.............................. [...]
+B0Y9U0_ASPFC/686-1004  ............................................................................................l-ILTILYS..SDVEA..YNCIKKI.CD...VR..R..GVRNVNVLA.E..K.LRGA--................NDQYYANVGL.......KFNLK..........LGGA.N.....QIL.K....ASE.LG........-......-..I....V...A...E.....G.K..T.M..................................LVGIDVTHPSPGS..............sAEAP..SVAGMVASID...S...S.L.S...Q....W.P.....A.DI..R...IQ.....T..........S.......R....Q...EM......VSN....LDE.............................. [...]
+Q4WC92_ASPFU/686-1004  ............................................................................................l-ILTILYS..SDVEA..YNCIKKI.CD...VR..R..GVRNVNVLA.E..K.LRGA--................NDQYYANVGL.......KFNLK..........LGGA.N.....QIL.K....ASE.LG........-......-..I....V...A...E.....G.K..T.M..................................LVGIDVTHPSPGS..............sAEAP..SVAGMVASID...S...S.L.S...Q....W.P.....A.DI..R...IQ.....T..........S.......R....Q...EM......VSN....LDE.............................. [...]
+C8VMQ3_EMENI/660-979   ............................................................................................l-ILTILPF..NDTAL..YNCIKRA.CD...VR..H..GVRNINVLA.E..Q.FCKR--................NEQYFANVGL.......KFNLK..........LGGV.N.....QVV.R....PSQ.L-........-......G..I....I...G...E.....G.K..T.M..................................LIGIDVTHPSPGS..............aKGAP..SVAAMVASVD...S...S.L.G...Q....W.P.....A.EI..R...IQ.....K..........E.......A....R..kEM......VDA....LDS.............................. [...]
+Q5BD61_EMENI/660-979   ............................................................................................l-ILTILPF..NDTAL..YNCIKRA.CD...VR..H..GVRNINVLA.E..Q.FCKR--................NEQYFANVGL.......KFNLK..........LGGV.N.....QVV.R....PSQ.L-........-......G..I....I...G...E.....G.K..T.M..................................LIGIDVTHPSPGS..............aKGAP..SVAAMVASVD...S...S.L.G...Q....W.P.....A.EI..R...IQ.....K..........E.......A....R..kEM......VDA....LDS.............................. [...]
+Q0CNH1_ASPTN/643-961   ............................................................................................l-ILGILPF..NDADY..YNAIKRA.CD...VK..F..GVRNINVLA.E..K.FLEA--................KDQYIANVGL.......KFNLK..........LGGV.N....qVL-.H....P--.KE........L......G..I....I...G...Q.....G.K..T.M..................................LVGIDVTHPSPGS..............sSHAP..SVAGMVASTD...A...T.L.G...Q....W.P.....A.EL..R...IQ.....A..........S.......R....Q...EM......VED....LDT.............................. [...]
+B8MXT2_ASPFN/684-1002  ............................................................................................l-ILSVLPF..SDADY..YNCIKRA.CD...LT..Y..GVRNINVLA.D..K.FRDA--................NPQYFANVGL.......KVNLK..........LGGA.N.....QLL.D....A--.KE........L......G..L....I...G...Q.....N.K..T.M..................................LVGMDVTHPSPGS..............sANAP..SVAGMVASVD...S...T.L.S...Q....W.P.....A.EI..R...VQ.....R..........S.......R....E...EM......IQD....LSD.............................. [...]
+Q2US02_ASPOR/573-891   ............................................................................................l-ILSVLPF..SDADY..YNCIKRA.CD...LT..Y..GVRNINVLA.D..K.FRDA--................NPQYFANVGL.......KVNLK..........LGGA.N.....QLL.D....A--.KE........L......G..L....I...G...Q.....N.K..T.M..................................LVGMDVTHPSPGS..............sANAP..SVAGMVASVD...S...T.L.S...Q....W.P.....A.EI..R...VQ.....R..........S.......R....E...EM......IQD....LSD.............................. [...]
+A2R8K3_ASPNC/710-1028  ............................................................................................l-ILTILPS..NDADI..YNIVKRA.CD...LT..H..GVRNVNVVA.D..K.FRKPNN................-DQYWANVGL.......KFNLK..........LGGN.N.....QLI.D....P--.KE........L......G..L....I...G...Q.....N.K..T.M..................................LVGVDVTHPSPGS..............sSAAP..SVAGMVASID...S...T.L.G...Q....W.P.....A.EL..R...IQ.....K..........P.......R....E...EM......VAE....LDA.............................. [...]
+C7ZR18_NECH7/19-235    ...............................................................lcqgsirynapltprtstlreesyirmtii--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+C5PJP0_COCP7/663-977   ............................................................................................f-VLVILPL..EDSSI..YNRVKYR.GD...IQ..N..GIHTVCVLA.N..K.FRGI--................--QYCANVAL.......KFNLK..........LGGT.N.....HVL.D....SSK.L-........-......G..V....V...G...E.....G.K..T.M..................................LVGIDVTHPSPGS..............sSQAP..SVAAMVANVD...K...H.L.A...Q....W.P.....A.SI..R...LQ.....Q.........eP.......K....A...EM......VDK....LQE.............................. [...]
+C4JG78_UNCRE/651-963   ............................................................................................f-LLVMLPF..EDSAI..YNRVKFR.GD...IQ..N..GIHTVCVGD.R..T.G-----................GIQSLANIAL.......KFNLK..........LGGA.N.....HVL.-....D-P.PK........L......G..L....I...G...E.....G.K..T.M..................................LVGIDVTHPSPGS..............sSQAP..SVAAMVASVD...K...D.L.A...Q....W.P.....A.SI..R...LQ.....R..........E......aK....A...EM......VDE....LEE.............................. [...]
+C5JDT9_AJEDS/671-859   .....................................................................................rlqqqara--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+C5GX22_AJEDR/671-859   .....................................................................................rlqqqara--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+D4ANV6_ARTBE/642-958   ............................................................................................l-LLVILPN..DNPTV..YKRIKLN.GE...VF..H..GIQTVCVIM.S..K.FTKSSN................-VQYHANVAM.......KFNLK..........LGGT.N.....HVL.D....DSK.MG........-......-..I....I...A...G.....G.K..T.M..................................VVGIDVTHPAPGS..............sETAP..SVAGMVASID...K...T.L.G...Q....W.P.....A.IL..R...LQ....rE..........A.......K....Q...EM......VDD....LTD.............................. [...]
+D4CZ86_TRIVC/642-958   ............................................................................................l-LLVILPN..DNPTV..YKRIKLN.GE...VF..H..GIQTVCVIM.S..K.FTKSSN................-VQYHANVAM.......KFNLK..........LGGT.N.....HVL.D....DSK.MG........-......-..I....I...A...G.....G.K..T.M..................................VVGIDVTHPAPGS..............sETAP..SVAGMVASID...K...T.L.G...Q....W.P.....A.IL..R...LQ....rE..........A.......K....Q...EM......VDD....LTD.............................. [...]
+C5FGF6_NANOT/649-965   ............................................................................................l-LLMILPN..DNPTV..YKRIKLN.GE...VM..H..GIQTICVIR.S..K.FDKQYN................-VQYHANVAM.......KFNLK..........LGGI.N.....HVV.D....DTK.L-........-......G..I....I...A...A.....G.K..T.M..................................VVGIDVTHPAPGS..............sVTAP..SVAGMVASVD...K...Y.L.G...Q....W.P.....A.VL..R...LQ.....H.........eA.......K....Q...EM......VDD....LTD.............................. [...]
+C1G7F3_PARBD/674-979   .....................................................................................qqsrvrgd--------..-----..-------.--...VK..D..GIHTICVVA.E..K.FAKN--................QVQYFANVAL.......KFNLK..........LGGV.N.....HRL.Q....PSK.L-........-......G..T....L...S...E.....G.K..T.M..................................VVGIDVTHPSPGS..............aPTAP..SIAGMVASVD...N...V.L.G...Q....W.P.....A.SI..R...LQ.....H.........qA.......R....A...EM......VND....LDP.............................. [...]
+C0RZ18_PARBP/688-993   .....................................................................................qqsrvrgd--------..-----..-------.--...VK..D..GIHTICVVA.E..K.FAKN--................QVQYFANVAL.......KFNLK..........LGGV.N.....HRL.Q....PSK.L-........-......G..T....L...S...E.....G.K..T.M..................................VVGIDVTHPSPGS..............aPTAP..SIAGMVASVD...N...V.L.G...Q....W.P.....A.SI..R...LQ.....H.........qA.......R....A...EM......VND....LDP.............................. [...]
+C1GXU8_PARBA/683-1002  ............................................................................................l-VLVILPF..ASPPI..YNQVKYR.GD...VK..D..GIHTICVVA.E..K.FAKN--................QAQYFANVAL.......KFNLK..........LGGV.N.....HRL.Q....PSK.L-........-......G..T....L...S...E.....G.K..T.M..................................VVGIDVTHPSPGS..............aPTAP..SIAGMVASVD...N...V.L.G...Q....W.P.....A.SI..R...LQ.....H.........qA.......R....A...EM......VND....LDP.............................. [...]
+C5JDT9_AJEDS/580-664   ............................................................................................l-VLVILPF..ASPQI..YSQVKYR.GD...IK..D..GIHTICVVA.E..K.FRKN--................QPQYFANVAL.......KFNLK..........LGGV.N.....HKL.Q....PSK.L-........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+C5GX22_AJEDR/580-664   ............................................................................................l-VLVILPF..ASPQI..YSQVKYR.GD...IK..D..GIHTICVVA.E..K.FRKN--................QPQYFANVAL.......KFNLK..........LGGV.N.....HKL.Q....PSK.L-........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+C0NMG7_AJECG/678-986   ............................................................................................l-VLVILPF..ESPQM..YNHIKYR.GD...IK..D..GIHTICVVA.E..K.FGKN--................QPQYFANVAL.......KFNLK..........LGGI.N.....HKL.Q....PSK.L-........-......G..I....I...S...E.....G.K..T.M..................................VVGIDVTHPAPGS..............lPTAP..SIAGMVASVD...K...F.L.A...Q....W.P.....A.SI..R...LQ.....H..........Q......aR....A...EM......VDD....LDP.............................. [...]
+C6H291_AJECH/678-997   ............................................................................................l-VLVILPF..ESPQM..YNHIKYR.GD...IK..D..GIHTICVVA.E..K.FGKN--................QPQYFANVAL.......KFNLK..........LGGI.N.....HKL.Q....PSK.L-........-......G..I....I...S...E.....G.K..T.M..................................VVGIDVTHPAPGS..............lPTAP..SIAGMVASVD...K...F.L.A...Q....W.P.....A.SI..R...LQ.....H..........Q......aR....A...EM......VDD....LDP.............................. [...]
+A6RB60_AJECN/291-610   ............................................................................................l-VLVILPF..ESPQM..YNHIKYR.GD...IK..D..GIHTICVVA.E..K.FGKN--................QPQYFANVAL.......KFNLK..........LGGI.N.....HKL.Q....PSK.L-........-......G..I....I...S...E.....G.K..T.M..................................VVGIDVTHPAPGS..............lPTAP..SIAGMVASVD...K...F.L.A...Q....W.P.....A.SI..R...LQ.....H..........Q......aH....A...EM......VDD....LDP.............................. [...]
+Q96UM0_BLUGR/565-886   ............................................................................................f-VLCILPK..NDPAI..YNSIKTV.AD...TK..A..GIHTVCCVS.S..K.FTKQQR................QEQYFGNVAL.......KFNLK..........AGGI.N.....HIL.E....PAK.L-........-......G..I....V...S...E.....G.K..T.M..................................VVGVDVTHPSPGS..............rEGAP..SVAGIVASVD...K...H.L.G...Q....W.P.....S.QF..S...IQ.....A..........K.......S...rT...EM......VSD....LES.............................. [...]
+A7E4W2_SCLS1/692-1008  ............................................................................................f-VLCILPV..NDVML..YNTIKRH.AD...TR..A..GIHTVCVQY.S..K.FVKGDL................--QYFGNVAL.......KFNLK..........AGGI.N.....QTI.D....K--.--........L......G..V....I...N...E.....G.K..T.M..................................VVGIDVTHPSPGS..............kETAP..SVAAMVTSTD...K...L.L.G...Q....W.S.....G.IC..R...LQ.....N.........qA.......R....Q...EM......VSD....LES.............................. [...]
+A6RK26_BOTFB/654-970   ............................................................................................f-LLCILPV..DDVML..YNTIKRF.GD...TK..A..GIHTVCVQY.S..K.FTKG--................DPQYFGNVAL.......KFNLK..........AGGI.N.....QTI.D....K--.--........L......G..I....I...N...E.....G.K..T.M..................................VVGIDVTHPSPGS..............kDTAP..SVAAMVTSTD...K...L.L.G...Q....W.S.....G.VC..R...LQ.....D..........K......aR....Q...EM......VSD....LEP.............................. [...]
+D0U265_CRYPA/712-1038  ...................................................................................lllvilpgrd-------K.gDNTEL..YNWVKTL.GD...VK..H..GVHTICVVG.Q..K.FTAA--................QDQFFANVAL.......KFNLK..........LGGN.N.....QSV.D....PSR.L-........-......S..F....I...N...E.....D.K..T.M..................................LVGIDVTHPSPGS..............rSNAP..SVAGMVASTD...K...H.L.G...Q....W.P.....G.IL..S...IQ.....N..........K......aR....A...EM......VSD....LTE.............................. [...]
+A2QG96_ASPNC/558-884   ............................................................................................f-LLIILPQ..AAEGL..YSRIKFL.CD...VQ..F..GIRNVCVVA.D..K.FLRS--................NDQFLSNVAL.......KLNLK..........LGGV.N.....QKL.L....TRS.L-........-......D..M....I...S...E.....G.K..T.M..................................VIGVDVTHPNSGNl.............pARAP..SVAAMVASVD...R...Y.L.A...Q....W.P.....A.EI..C...TQ.....P..........A.......R....Q...EL......VTQ....LGV.............................. [...]
+B8N7A8_ASPFN/617-954   ...........................................................................................ll--YIVLPK..KESRW..YLVIKRL.CD...VE..Y..GLQTICSVG.P..K.LVAKKGqtme.......qydksLDQYMRNVAM.......KFNLK..........LGGT.N.....HVV.D....NLR.L-........-......S..I....I...N...E.....D.K..T.M..................................IVGLDVTHPTGSSqv...........ssATAP..SVAAMVASID...K...T.L.G...Q....W.P.....A.TI..Q...VQ.....S..........H.......G...gK...EE......IDS....LDG.............................. [...]
+Q2UBS9_ASPOR/578-915   ...........................................................................................ll--YIVLPK..KDSRW..YLVIKRL.CD...VE..Y..GLQTICSVG.P..K.LVAKKGqtme.......qydksLDQYMRNVAM.......KFNLK..........LGGT.N.....HVV.D....NLR.L-........-......S..I....I...N...E.....D.K..T.M..................................IVGLDVTHPTGSSqv...........ssATAP..SVAAMVASID...K...T.L.G...Q....W.P.....A.TI..Q...VQ.....S..........H.......G...gK...EE......IDS....LDG.............................. [...]
+B2WES9_PYRTR/643-967   ............................................................................................l-LFIVLPE..ANIPL..YKRIKSI.AD...KE..Y..GLHTICSVG.S..K.LAKDRG................RDQYIANVAL.......KINLK..........LGGI.N.....QIV.E....N--.KN........L......G..I....I...D...Q.....N.K..T.M..................................VVGIDVTHPSPGS..............aSNAP..SVSAMVASVD...R...F.L.G...Q....W.P.....A.TL..R...IQ.....R..........G.......R....Q...EN......VDA....LGE.............................. [...]
+A6QW60_AJECN/639-963   ............................................................................................l-LFIILPE..ANIPL..YKRIKTL.AD...KD..Y..GIHTICSVG.S..K.LAKDRG................RDQYMANIAL.......KFNLK..........LGGI.N.....QIV.E....N--.KN........L......G..I....I...D...Q.....N.K..T.M..................................VVGIDVTHPSPGS..............sSNAP..SVSAMVASID...K...F.L.G...Q....W.P.....A.TL..R...KQ.....R..........A.......R....Q...EN......VDD....LTE.............................. [...]
+B6QWK7_PENMQ/644-968   ............................................................................................l-LYVILPQ..ANTTL..YKRIKTL.TD...KD..F..GIHTICSVA.S..K.LAKERG................RDQYMANIAL.......KFNLK..........LGGI.N.....QIV.E....NRN.L-........-......G..I....V...D...Q.....N.K..T.M..................................VVGIDVTHPSPGS..............sSNAP..SISAMVASID...R...S.L.G...Q....W.P.....A.TL..R...IQ.....R..........A.......R....Q...EN......VDD....LTE.............................. [...]
+B8MGF3_TALSN/2-137     ..........................................................................................lad--------..-----..-------.--...KD..F..GIHTICSVG.S..K.LVKDRG................RDQYMANVAL.......KFNLK..........LGGI.N.....QIV.E....NRN.L-........-......G..I....V...D...E.....N.K..T.M..................................VVGTDVTHPSPSS..............sSNAP..SVSAMVASID...K...F.L.G...Q....W.P.....A.TL..R...IQ.....H..........A.......R....Q...EN......VTD....LTE.............................. [...]
+D0U266_CRYPA/635-957   ...........................................................................................lv--WVIVPA..GSKLL..YDRIKYL.SD...VK..L..GVMTVVSVD.K..T.LKERDPr..............yQSQYLGNEAL.......KVNLK..........LGGM.N.....QRI.T....S--.-G........L......H..F....I...S...E.....G.K..T.M..................................LVGIDVIHPSTDQt.............rGGMP..SVAGMVATVD...R...H.V.A...Q....W.P.....G.VL..Q...VQ.....Q..........K.......R....Q...EM......VSD....LEP.............................. [...]
+C1GSN8_PARBA/1-191     .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.M..................................VVATDVTHPSPGS..............aSNTP..SIAGIIASIN...S...Q.L.A...Q....W.P.....A.DL..R...IQ.....T..........Y.......R....Q...EM......VSA....LDD.............................. [...]
+C6H5C6_AJECH/26-168    ..........................................................................msnlaftafapspanspkd--------..-----..-------.--...--..-..---------.-..-.-----R................NHTYFANVAL.......ETNRK..........LGGA.S.....HTL.D....AHK.--........L......G..F....I...P...G.....C.K..T.M..................................VVCVDVTHPSPGS..............sTNAS..SGAAIVASID...Q...N.L.T...Q....W.P.....A.EF..R...IQ.....A..........T.......F....Q...KM......MIS...rLDE.............................. [...]
+A6RDB0_AJECN/9-157     ........................................................................................lkpyv--------..-----..-------.CD...VK..F..GVHSFRAIA.S..K.FAKDRN................-HTYFANVAL.......EANRK..........LGGA.S.....HTL.D....AHK.--........L......G..F....I...P...G.....C.K..T.V..................................VVCVDVTHPSPGS..............sTNAS..SGAAIVASID...Q...N.L.T...Q....W.P.....A.EL..C...TQ.....A..........V.......F....Q...KM......ISR....LDE.............................. [...]
+D4B128_ARTBE/608-819   ...........................................................................................ft--LIVLPR..YDAEI..YSKVKYS.AD...VK..H..GCHTLCVVP.K..P.PKNGRPgepl........qiniQPSYLANLAL.......KINLK..........LGGV.N.....HQL.E....PLK.KY........-......-..-....-...Q...S.....C.P..I.M..................................YLGIDVTHPTGTDs.............iPNAP..SIAGVVANCD...P...M.L.G...Q....W.P.....A.SI..R...TQ.....A..........H.......C....V...EM......VEN....LGE.............................. [...]
+D4D326_TRIVC/587-798   ...........................................................................................ft--LIVLPR..YDAEI..YSKVKYS.AD...VK..H..GCHTLCVVP.K..P.PKNGRPgepl........qvniQPSYLANLAL.......KINLK..........LGGV.N.....HQL.E....PLK.KY........-......-..-....-...Q...S.....C.P..I.M..................................YLGIDVTHPTGTDs.............iPNAP..SIAGVVANCD...P...M.L.G...Q....W.P.....A.SI..R...TQ.....A..........H.......C....V...EM......VEN....LGE.............................. [...]
+Q0TWJ6_PHANO/160-297   .......................................................................................rgssit--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B2WJ98_PYRTR/213-541   ...........................................................................................ct--FFLLRE..KDFDI..YAKIKRD.GD...FS..-..GNHTICAVA.S..R.IKDRNEqdnr........rsgpRWQHFSNLAL.......KMNMK..........LGGD.N.....HWL.D....ENE.LE........K......V..L....GgkdK...K.....Q.N..T.M..................................ILGADVIHPGSSS..............kIGAP..SIACVVGTID...S...R.F.M...S....Y.R.....G.SM..R...LQ.....A..........G.......G....Q...EQ......IEDf..nFRS.............................. [...]
+A7ISJ0_MYCPJ/514-830   ............................................................................................t-VLVVLPS..KDAND..YAAVKTW.GE...LH..D..GVNTICVTA.G..K.QHRL-I................DYDFQANLAL.......KFNAK..........LRGQ.N.....HKL.D....KSF.FE........Y......L..C....H...G...Q.....S.A..T.M..................................VVGADVTHPGPSS..............vDYCP..SIAAVVASTD...S...G.A.C...K....Y.S.....G.SI..R...LQ.....A..........S.......R....E...EI......ITD....LQG.............................. [...]
+A6S1V9_BOTFB/6-263     .......................................................................................eivsva--------..-----..-------.--...--..-..-CPTVCVST.D..G.VERGAR...............pDLGVLANIAL.......KINFK..........LGGI.N.....HKI.E....NIP.L-........-......-..-....-...-...K.....D.R..T.M..................................IMGADVTHVGKGQ..............dDACP..SQAGVVATRD...S...N.Y.V...H....Y.L.....A.SA..R...LQ.....P..........H.......N....T...EF......IED....LQG.............................. [...]
+A6SR68_BOTFB/1-284     ............................................................................................m--------..-----..-------.--...--..-..---------.-..-.------................--------CL.......KFNLK..........LGGV.N.....QEV.S....E-G.C-........-......-..-....G...I...K.....A.R..T.M..................................VVGADVTHPGDEE...............-VCP..SIAAVVATDD...N...S.Q.F...K....Y.L.....G.SA..R...LQ.....E..........G.......K....Q...EY......ISD....LRG.............................. [...]
+Q0UCE8_PHANO/551-880   ............................................................................................l-VVFLLNK..SSTPF..YAHLKDL.AD...RT..H..GIHSLCLVE.Q.yK.LIKQ-Yger..........ahlFQEYMTNVVM.......KINLK..........MGGI.-.....TQS.V....T--.TV........S......D..Y....L...A...K.....N.R..V.M..................................VLGADVVHAGPGA..............yPGTP..SIAAIVGSVD...F...S.A.G...K....C.L.....G.SM..R...LQr..idT..........T.......D....R...ET......IVE....VED.............................. [...]
+B2WJ35_PYRTR/419-708   ............................................................................................l-FILVVEK..YDTTI..YRELKNL.AD...RV..V..GIQSLCVVE.Q..M.-KKTDR...............wFDDMMRNVMM.......KLNLK..........LGGI.N.....HVV.D....AVQ.TR........L......-..-....-...-...K.....S.H..T.V..................................VLGADLVHPSGNL...............PGVP..SIASIVGSVD...N...H.A.G...K....C.L.....G.SM..R...LQ.....G..........I.......D....T...TD......REL....IIE.............................. [...]
+Q0UCU3_PHANO/737-1044  ............................................................................................l-VVLLLKT..QSIPV..YSAFKAA.AD...TE..A..GLQSICMTQ.ApnY.ISAKQKck............enIDQYMANIMM.......KANLK..........FGGG.Nh...tVQF.A....AKP.LT........H......I..A....T...T...L.....Q.D..T.L..................................VLGADITHPSPGS..............lVGCP..SIAAVVGSVN...S...M.S.T...K....Y.L.....G.SM..R...LQ.....E..........T.......C....K..kEI......IDD....LQA.............................. [...]
+Q0UCG8_PHANO/473-701   .............................................................................ekentpaysvfkylad--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............SGTP..SIAAIVGSVD...A...K.G.G...K....F.L.....G.SM..R...LQ.....P..........Rl.....iA....C...ED......IQD....VES.............................. [...]
+Q0UCH0_PHANO/670-999   ............................................................................................l-VILVLRS..KDQEV..YSNFKYL.AD...RV..F..GIPSIVMVT.A..S.NFR--Ggaw.........nvtgLDQYIGNIMM.......KANLK..........LGGI.N.....HSA.E....SDR.GN........I......K..N....-...H...L.....E.N..T.L..................................VLGSDVTHPSNGS..............lFGCP..SVAALVGSVD...N...T.G.G...C....F.L.....G.SL..R...LQ.....D..........Q.......G....SkehQM......IDD....LKS.............................. [...]
+B8PJA4_POSPM/353-665   ............................................................................................l-ILAFLPV..NAPDI..RRRIKHW.GD...VD..K..GVPTQCLRA.G..K.WERA--................RDQYINNVALnsrpqitRINAK..........LGGV.N.....SAI.N....A-K.LL........-......-..-....-...-...P.....Q.C..T.M..................................VIGADVGHPGPGI...............MNRP..SVTSLVASVD...P...D.A.T...K....Y.T.....T.YA..S...VQ.....A..........P.......R....V...EI......IQD....LEQ.............................. [...]
+B0DLH7_LACBS/515-821   ............................................................................................i-LVVILPD..EAATI..LHTVKFW.GD...VK..Y..GILTQCVRA.D..K.LLKA--................NDQYWNNVAL.......KLNAR..........LGGL.N.....YHA.S....GSR.T-........I......N..D....L...K...K.....E.P..Y.I..................................IMGADVGHPGPRV...............-RKP..SVTSLVFSLD...M...H.A.T...K....Y.A.....S.MC..R...IQ.....N..........P.......R....Q...EV......IQD....LRE.............................. [...]
+A8NFX0_COPC7/514-795   ............................................................................................m-LIVLLPS..EAAHL..RTEVKYW.GD...AV..N..GVKTQCLRF.G..K.TMN---................-NQYCNNVAL.......KVES-..........-GKA.L.....REF.A....NDD.R-........-......-..-....-...-...-.....-.-..-.-..................................---ADIGHPGAGI...............RNKP..SVSGLVFSIS...Q...F.A.T...E....Y.A.....A.IT..R...IQ.....P..........P.......R....V...EA......IVD....LEE.............................. [...]
+A8NFX5_COPC7/531-721   .............................................................................................MLVVILPE..DALNL..KAKVKYF.GD...IT..H..GVPTQCLRV.S..K.LLDPKSrrlk........qprqLNQYFNNVAL.......KINAR..........LRGV.N....vMLE.S....KIP.GG........S......P..LailsT...Q...G.....R.K..T.M..................................IIGVDVSHPGPGV...............TNRP..SVASLVFSLY...Q...G.G.A...Q....Y.A.....A.TT..T...IQ.....K..........P.......R....L...EK......VEQ....LAS.............................. [...]
+B9S0P9_RICCO/17-119    ............................................................................................i-LICVLAK..-KDHS..YNNLKLI.SE...TK..V..GIVAQCCSF.K..N.APRT--................KTQFLTNLAL.......KINVR..........LGGS.N.....MEL.F....KQP.QC........-......-..L....R...S...K.....G.H..V.M..................................FIGTEVNHLVSYN...............STCP..SIVDVVVIT-...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B9SSM8_RICCO/639-934   ............................................................................................i-LVCVLPK..-EDPG..YSNLKWI.CE...TK..V..GIVTQCCLS.E..N.AFRP--................KAQFLANLAL.......KINAK..........LGGS.N.....VEL.F....KQP.QC........-......-..L....Q...S...K.....G.H..V.M..................................FIGADVNHPSSYN...............STSP..SIAAVVATMN..wP...A.A.N...Q....Y.G.....A.LI..C...PQ.....D..........H.......R....A...EK......ILK....FGD.............................. [...]
+B2WJ32_PYRTR/383-592   .......................................................hrdasgnvitgdtvtvtvkqyqrlqygrtlrhgelsav--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...NI......ITG....LAT.............................. [...]
+Q4T9Z1_TETNG/519-587   .............................................................................................MVVVILPT..NRKDK..YDSIKKY.LC...VD..C..PVPSQCVVA.Q..T.LSRPQT................LLNVATKIAL.......QMACK..........MGGE.-.....LWS.V....EIP.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+A9TD99_PHYPA/2-180     ................................................................................emieglhiegkgg--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B4G753_DROPE/334-531   ............................................................................................l-ILCLVPN..NNVER..YSSIKKR.GC...VD..R..AVPTQVVTI.K..T.SKNRGL................-LSIATKIAI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSARDR...............--RK..AYGALVASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...SE.....C..........S.......A....F...DV......LAN...nLWP.............................. [...]
+Q4TF92_TETNG/239-305   .........................................................................................alll--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+Q4TBP2_TETNG/868-934   .........................................................................................alll--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+A8J0N0_CHLRE/619-933   .............................................................................................MVMVVLPD.rGGVGL..YDAIKAA.GD...GK..L..GVATQCVNP.A..K.AGLVGPkas..........sgpSFSYAAQLAL.......SVNAK..........LGGA.-.....TTR.P....AGR.PNd......wL......P..L....L...G...G.....R.R..L.Mvggrgpg....................rlearlgLSGALLSRGYRGAa............qvSAGV..EYAAVVGSAD...S...H.A.V...D....Y.R.....V.QL..S...AQ.....V..........A.......G....N...R-......---....---.............................. [...]
+A8J0M9_CHLRE/675-993   .............................................................................................MVMVVLPD.rGGVGL..YDAIKAA.GD...GK..L..GVATQCVNP.A..K.AGLVGPkas..........sgpSFSYAAQLAL.......SVNAK..........LGGA.-.....TTR.P....AGR.P-........-......-..-....-...-...-.....N.G..E.L..................................ALALPRTRRTRVQ..............vSAGV..EYAAVVGSAD...S...H.A.V...D....Y.R.....V.QL..S...AQ.....V..........A.......G....N..rDI......VVS....MRE.............................. [...]
+A7T7C9_NEMVE/1-180     ............................................................................................r--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.S..L.M..................................VCGIDVYHDKARG...............--GR..SVGGLVCSMN...R...S.L.T...R....W.Y.....S.DV..C...FQ.....S..........P.......G....Q...EL......IDG....LKMllikgirkwhdairkwhdvcyltmfvslsr [...]
+Q70IH5_ARAHA/1-61      .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B4H1E3_DROPE/6-68      ...................................................................................sistdtenqa--------..-----..-------.-E...LE..H..GILTQCIIQ.A..T.GERRFN................-GQVMSNLLL.......KMNSK..........LNGI.N.....PTL.K....R--.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B2RFN0_OIKDI/550-850   ...........................................................................................fa--LVILPR..RDSHI..YSIVKEK.AE...LV..F..GVVTQCVQS.R..N.VERA--................NAMFYGNLLQ.......KINVK..........LGGV.N.....TKV.V....NRI.Q-........-......-..-....L...F...T.....K.P..I.M..................................IVGLSFSHPAPGS...............-RNP..SIVTASFSCD...A...S.G.T...K....Y.F.....V.GK..R...LQ.....S..........S.......R....F...SL......ATG....IKD.............................. [...]
+A8WWP9_CAEBR/632-910   ...........................................................................................ql-VICIVSG..-KSTV..YGDLKRK.GD...L-..L..GLTTQCIRT.N..N.VARV--................SPHTLSNLCM.......KINSK..........LGGV.N.....VVL.S....APP.PS........T......A..-....-...-...T.....T.P..T.L..................................FIGCHLSRNSVASsses......ssslnYSDT..SIACLVGSMD...G...H.P.T...R....F.A.....P.IF..R...LQ.....P..........R.......N....A...NT......IID....MSE.............................. [...]
+Q9XVI3_CAEEL/574-882   ............................................................................................l-VLCIVPG..-KSVV..YGELKRK.GE...L-..L..GLTTQCVRS.Q..N.VSKA--................SPHTLSNLCM.......KINSK..........LGGI.N.....VIL.S....S-P.PQ........-......-..S....L...N...S.....E.P..V.L..................................FIGCHLTRSSLASssds......tssiaHCDS..SIACLVGSMD...G...H.P.T...Q....F.S.....P.IF..R...TQ.....P..........R.......H....Q...RT......IVD....MCE.............................. [...]
+B6VBQ1_CAEBE/1034-1381 ..........................................................................................lvf-IVVSGPH..KDQDA..YGYVKHH.CD...VN..L..GVVSQYVRA.E..T.AKLT--................ERNIYNTIAL.......KINAK..........LGGV.Nq...eLNF.S....E-N.AE........M......S..L....A...E...K.....E.ErkK.Lpl..............................kmFVGIDVTHPTTGS...............GIDF..SIAAVVASVN...A...S.G.T...K....Y.Q.....N.MI..V...TQ.....EecvpgerpgaH.......G....R...ER......TDI....LEG.............................. [...]
+A8XVL1_CAEBR/571-952   ...........................................................................................ki-LLFIVFS..KRRWN.fYGFVKQF.CD...VE..L..GVASQHVTA.H..V.AKRALQdms.........shkpSKRIFYQIAL.......KINGK..........LGGV.Nq..elDWS.E....NAE.MT........V......E..E....K...E...K.....R.K..N.Mpl..............................rmYVGIDVTHPTNGS...............GIDY..SIAAIVASMN...P...G.G.T...V....Y.R.....N.MI..V...TQ.....E..........E.......N....R...PG......ERP....VAHgrertdilegk................... [...]
+O46002_CAEEL/57-176    ...........................................................ieymaseynytikiknhfvyslapelskknpkvk--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+Q9XU82_CAEEL/618-985   ............................................................................................v-LMFIIIS.kRQLNA..YGFVKHY.CD...HT..I..GVANQHITS.E..T.VTKALAslr.........hekgSKRIFYQIAL.......KINAK..........LGGI.NqeldwSEI.A....EIS.PE........E......K..E....-...-...R.....R.K..T.Mpl..............................tmYVGIDVTHPTSYS...............GIDY..SIAAVVASIN...P...G.G.T...I....Y.R.....N.MI..V...TQ.....E..........E.......C....R...PG......ERA....VAHgrert......................... [...]
+A5BG74_VITVI/577-717   .............................................................................................FILCILPQ.kKNCDI..YGPWKRQ.CL...SG..C..GVPTQCIAP.S..T.PVV---................NDQYLTNLLL.......KINAK..........LGGL.N....sLLT.M....GYC.PS........L......R..L....I...S...T.....I.P..T.L..................................ILGMDVSHGSPGR...............ADVP..SIAAVVSSRH..wP...S.I.S...Q....Y.R.....A.TV..R...TQ.....S..........P.......K....L...EM......IDS....L--.............................. [...]
+AGO16_ORYSJ/535-844    ............................................................................................f-LLCVLPE.rKNCDL..YGPWKKK.NL...HE..M..GIITQCIVP.S..V.--KM--................NDQYYTNVLL.......KINAK..........LGGM.N....sKLS.L....EHR.HM........I......P..I....V...N...Q.....T.P..T.L..................................ILGMDVSHGSPGR...............ADVP..SIAAVVGSRC..wP...L.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IDS...lFKPlddg.......................... [...]
+B8B4Z4_ORYSI/515-824   ............................................................................................f-LLCVLPE.rKNCDL..YGPWKKK.NL...HE..M..GIITQCIVP.S..V.--KM--................NDQYYTNVLL.......KINAK..........LGGM.N....sKLS.L....EHR.HM........I......P..I....V...N...Q.....T.P..T.L..................................ILGMDVSHGSPGR...............ADVP..SIAAVVGSRC..wP...L.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IDS...lFKPlddg.......................... [...]
+B9FWI9_ORYSJ/515-824   ............................................................................................f-LLCVLPE.rKNCDL..YGPWKKK.NL...HE..M..GIITQCIVP.S..V.--KM--................NDQYYTNVLL.......KINAK..........LGGM.N....sKLS.L....EHR.HM........I......P..I....V...N...Q.....T.P..T.L..................................ILGMDVSHGSPGR...............ADVP..SIAAVVGSRC..wP...L.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IDS...lFKPlddg.......................... [...]
+C0P9X1_MAIZE/1-253     .....................................................................................mnsklale--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....-HR.QM........I......P..V....V...T...Q.....I.P..T.L..................................ILGMDVSHGSPGR...............ADIP..SIAAVVGSRC..wP...L.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IDS...lFKPlddg.......................... [...]
+C5YU43_SORBI/1-285     ............................................................................................m--------..-----..-------.--...--..-..GIVTQCIAP.S..N.--KM--................NDQYFTNVLL.......KINAK..........LGGM.N....sKLA.L....EHR.QM........I......P..V....V...T...Q.....I.P..T.L..................................ILGMDVSHGSPGR...............ADIP..SIAAVVGSRC..wP...L.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IDS...lFKPlddg.......................... [...]
+B9T7B0_RICCO/516-824   .............................................................................................FILCVLPE.rKNSDI..YGPWKKK.CL...SD..F..GIVTQCISP.F..K.I-----................NDQYLTNVLL.......KINSK..........LGGI.N....sLLE.I....EHS.KQ........I......R..L....I...M...D.....T.P..T.M..................................ILGMDVSHGARGC...............SDIP..SVAAVVGSRY..wP...L.I.S...R....Y.R.....A.CV..R...TQ.....S..........P.......K....V...EM......IDA....LFKltdd.......................... [...]
+B9IAL0_POPTR/521-830   .............................................................................................FILCVLAE.rKNSDI..YGPWKKT.SL...SD..F..GIVTQCISP.T..K.I-----................NDQYLTNVLL.......KINSK..........LGGI.N....sLLA.I....EHS.SH........I......P..L....I...M...D.....T.P..T.M..................................ILGMDVSHGSPGR...............SDMP..SVAAVVGSRC..wP...L.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IDA...lYKPlang.......................... [...]
+A5CB61_VITVI/15-305    ............................................................................................f-LLCVLPE.kKNSEI..YGPWKKR.SL...SD..F..GIVTQCISP.T..K.I-----................NDQYLTNVLL.......KINTK..........LGGT.N....sLLA.I....EHT.SR........I......P..L....I...K...D.....T.P..T.M..................................ILGMDVSHGSPGQ...............ADVP..SIAAVVGSRC..wP...L.I.S...R....Y.R.....A.SV..R...TQ.....S..........P.......K....V...EM......IDA...lYKPlang.......................... [...]
+O48771_ARATH/542-860   .............................................................................................FILCILPE.rKTSDI..YGPWKKI.CL...TE..E..GIHTQCICP.I..K.I-----................SDQYLTNVLL.......KINSK..........LGGI.N....sLLG.I....EYS.YN........I......P..L....I...N...K.....I.P..T.L..................................ILGMDVSHGPPGR...............ADVP..SVAAVVGSKC..wP...L.I.S...R....Y.R.....A.AV..R...TQ.....S..........P.......R....L...EM......IDS...lFQPiente......................... [...]
+Q3E984_ARATH/528-708   ............................................................................................f-LLCILEK..KNSDV..YEKSCSM.WN...CE..C..IVPPQNL--.-..-.------................NDQYLTNLLL.......KINAK..........LGGL.N....sVLD.M....ELS.GT........M......P..L....V...M...R.....V.P..T.I..................................IIGMDVSHGSPGQ..............sDHIP..SIAAVVSSRE..wP...L.I.S...K....Y.R.....A.CV..R...TQ.....S..........P.......K....V...EM......IDS...lFKPvsdk.......................... [...]
+A9SKW0_PHYPA/518-721   ............................................................................................f-ILVALPTdsSSSNL..YVAFKRY.FE...MR..I..GVISQCMIK.P..R.QF----................NPQYLWNLVL.......KINQK..........MEGF.N....sPLT.S....KIT.S-........-......-..C....L...G...G.....A.P..T.I..................................IFGIDVSHGSIGE...............-NFP..SVAAVVATKN..wP...D.V.F...H....F.A.....T.RA..G...TQ.....Q..........S.......K....L...KL......IEG....LWEpksamvn....................... [...]
+AGO17_ORYSJ/514-834    ............................................................................................l-LIVILPN..NNGSL..YGDVKRI.CE...TD..I..GLISQCCLA.K..H.VLKM--................NKWYLASVAL.......KINAK..........MGGR.N....tVLV.D....ALE.MR........L......P..H....V...R...D.....T.P..T.I..................................VFGAHVTHPHPGK...............ANSS..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LI..S...VQ.....A..........C.......H....Q...ES......IQG...lFKVqddper........................ [...]
+B8AII3_ORYSI/514-834   ............................................................................................l-LIVILPN..NNGSL..YGDVKRI.CE...TD..I..GLISQCCLA.K..H.VLKM--................NKWYLASVAL.......KINAK..........MGGR.N....tVLV.D....ALE.MR........L......P..H....V...R...D.....T.P..T.I..................................VFGAHVTHPHPGK...............ANSS..SIAAVVASQD..wP...E.V.T...K....Y.A.....G.LI..S...VQ.....A..........C.......H....Q...ES......IQG...lFKVqddper........................ [...]
+C5WX34_SORBI/1-43      ............................................................................................g--------..-----..--KIKRV.CE...TD..I..GIVSQCCLM.K..H.DCRP--................NKIFLENISL.......KNNAK..........V---.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+C0PDS4_MAIZE/580-888   ............................................................................................l-LLAILPD..KKDSL..YGNIKRI.CE...TD..I..GLVSQCCRR.S..R.VLVN--................NNQILANIAI.......KINAK..........VGGR.I.....SVF.D....DVQ.KS........L......P..V....V...S...N.....K.P..T.I..................................IFGAHVSHPSVVD..............gSTGP..SIASVVASQD...W...H.E.V...S....K.Y.....N.GV..V...RA.....Q..........G.......H....T...EE......IGG....LED.............................. [...]
+B7ZXH7_MAIZE/580-736   ............................................................................................l-LLAILPD..KKDSL..YGNIKRI.CE...TD..I..GLVSQCCRR.S..R.VLVN--................NNQILANIAI.......KINAK..........VGGR.I.....SVF.D....DVQ.KS........L......P..V....V...S...N.....K.P..T.I..................................IFGAHVSHPSVVD..............gSTGP..SIASVVASQD...W...H.E.V...S....K.Y.....N.GV..V...RA.....Q..........G.......H....T...EE......IGG....LED.............................. [...]
+C5WR49_SORBI/585-661   ............................................................................................l-LLAILPD..KNGSL..YGNIKRI.CE...TD..I..GLVSQCCRR.S..N.VFTE--................NSQILANIAI.......KINAK..........VVAS.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+C5K8K7_9ALVE/727-977   ...............................................................................aftlerseavggfw--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..-IASAVGSVD...N...D.V.N...L....Y.A.....T.AS..S...VQ.....D..........T.......G....T...RI......LD-....IET.............................. [...]
+B9Q8Q1_TOXGO/379-692   ............................................................................................l-LFVILNE..RVSLD..IYQIVKS.-C...TD..V..NFPSQCLNG.R..H.KCIDAIfrg..........dnpNPQYFANVMS.......KVNMK..........LQGV.N.....QTL.E....ADI.IK........Q......E..I....G...T...D.....K.S..T.L..................................VLAVETSFFANPTkt..........sppPTAP..IVCACTGNMD...D...D.L.G...A....F.G.....H.AV..C...VE.....S..........R.......K....H...PI......VTD....IGS.............................. [...]
+Q1L1E2_TOXGO/161-474   ............................................................................................l-LFVILNE..RVSLD..IYQIVKS.-C...TD..V..NFPSQCLNG.R..H.KCIDAIfrg..........dnpNPQYFANVMS.......KVNMK..........LQGV.N.....QTL.E....ADI.IK........Q......E..I....G...T...D.....K.S..T.L..................................VLAVETSFFANPTkt..........sppPTAP..IVCACTGNMD...D...D.L.G...A....F.G.....H.AV..C...VE.....S..........R.......K....H...PI......VTD....IGS.............................. [...]
+B6KA84_TOXGO/379-692   ............................................................................................l-LFVILNE..RVSLD..IYQIVKS.-C...TD..V..NFPSQCLNG.R..H.KCIDAIfrg..........dnpNPQYFANVMS.......KVNMK..........LQGV.N.....QTL.E....ADI.IK........Q......E..I....G...T...D.....K.S..T.L..................................VLAVETSFFANPTkt..........sppPTAP..IVCACTGNMD...D...D.L.G...A....F.G.....H.AV..C...VE.....S..........R.......K....H...PI......VTD....IGS.............................. [...]
+Q1L2C9_TOXGO/379-692   ............................................................................................l-LFVILNE..RVSLD..IYQIVKS.-C...TD..V..NFPSQCLNG.R..H.KCIDAIfrg..........dnpNPQYFANVMS.......KVNMK..........LQGV.N.....QTL.E....ADI.IK........Q......E..I....G...T...D.....K.S..T.L..................................VLAVETSFFANPTkt..........sppPTAP..IVCACTGNMD...D...D.L.G...A....F.G.....H.AV..C...VE.....S..........R.......K....H...PI......VTD....IGS.............................. [...]
+D2JRZ7_TOXGO/582-895   ............................................................................................l-LFVILNE..RVSLD..IYQIVKS.-C...TD..V..NFPSQCLNG.R..H.KCIDAIfrg..........dnpNPQYFANVMS.......KVNMK..........LQGV.N.....QTL.E....ADI.IK........Q......E..I....G...T...D.....K.S..T.L..................................VLAVETSFFANPTkt..........sppPTAP..IVCACTGNMD...D...D.L.G...A....F.G.....H.AV..C...VE.....S..........R.......K....H...PI......VTD....IGS.............................. [...]
+B9PJN3_TOXGO/379-693   ............................................................................................l-LFVILNE..RVSLD..IYQIVKS.-C...TD..V..NFPSQCLNG.R..H.KCIDAIfrg.........adnpNPQYFANVMS.......KVNMK..........LQGV.N.....QTL.E....ADI.IK........Q......E..I....G...T...D.....K.S..T.L..................................VLAVETSFFANPTkt..........sppPTAP..IVCACTGNMD...D...D.L.G...A....F.G.....H.AV..C...VE.....S..........R.......K....H...PI......VTD....IGS.............................. [...]
+Q1L2C8_TOXGO/379-693   ............................................................................................l-LFVILNE..RVSLD..IYQIVKS.-C...TD..V..NFPSQCLNG.R..H.KCIDAIfrg.........adnpNPQYFANVMS.......KVNMK..........LQGV.N.....QTL.E....ADI.IK........Q......E..I....G...T...D.....K.S..T.L..................................VLAVETSFFANPTkt..........sppPTAP..IVCACTGNMD...D...D.L.G...A....F.G.....H.AV..C...VE.....S..........R.......K....H...PI......VTD....IGS.............................. [...]
+O61931_CAEEL/762-1081  .....................................................................................vysgnnne--------..--YND..YNVLKYL.AD...NK..Y..GIHTQGILE.K..S.LGVVGPs..............pKNCALTRLMV......eKVLGK..........VGTT.Hr...kLER.G....GAH.KT........W......T..I....F...T...Dp...aK.P..T.L..................................VLGIDVSHPSTRDret.........gnvLQKM..SAATVVGNID...L...D.V.T...E....F.R.....A.SS..R...IQ.....D..........T.......G....V...EC......LID....FSK.............................. [...]
+A8WPC9_CAEBR/828-1145  ......................................................................................tlnlqrq--------..DFQND..YNLFKWL.AD...NH..V..GIFTQGMLY.K..T.FNGIGSt.............paTCKYTSQIVE.......KVLGK..........VGTT.-.....HRR.L....ERN.GE........H......K..S....W...K...Ki..vvE.P..T.L..................................LLGVDVSHPSTRDlmg.........edqVKRL..SVATVVGNID...L...D.C.T...E....Y.R.....A.SS..K...IQ.....D..........V.......G....E...ER......IVR....FEN.............................. [...]
+A8XN44_CAEBR/716-1005  ..............................................................pgtildwfislkknldeykqsedevivplvf--------..-----..-------.--...--..-..---------.-..-.------................---------V.......IFEVR..........FTTL.N.....LER.Q....DFQ.ND........Y......-..-....-...-...T.....E.P..T.L..................................LLGVDVSHPSTRDlkg.........edhVKRL..SIATVVGNID...L...D.C.T...E....Y.R.....A.SS..K...IQ.....D..........V.......G....E...ER......IVR....FEN.............................. [...]
+A8XRY5_CAEBR/161-269   ....................................................................................tstivnlnk--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+A8XS10_CAEBR/818-1134  ........................................................................................cerse--------..-FQND..YNLFKWM.AD...NE..V..GVFTQGLLY.K..T.FNSIGNt.............paSCRFTRLIVE.......KILGK..........IGTT.-.....HRR.L....ERD.GD........H......K..S....W...K...KlvnpaE.P..T.L..................................FLGVDVSHPSARDlkg.........ddpVKRL..SVATVVGNID...L...D.C.T...E....Y.R.....A.SS..K...LQ.....D..........V.......G....E...ER......IVR....FQE.............................. [...]
+A8XP19_CAEBR/721-1037  ........................................................................................cerpd--------..-FQND..YNLFKWM.SD...NE..V..GVFTQGILY.K..T.FNSIGLs.............paPCKYTSQLVE.......KILGK..........VGTT.-.....HRR.L....ERD.GE........H......K..S....W...K...KlvnpaE.P..T.L..................................LLGVDVSHPSTRDlkg.........edpVKRL..SVATVVGNID...F...D.C.T...E....F.R.....A.SS..K...IQ.....D..........V.......G....E...ER......IVR....FDE.............................. [...]
+B8PBB9_POSPM/331-616   ............................................................................................l-LIVMLPW..RKRQL..YAAIKYY.TD...VV..L..GIHTAHILL.P..K.AHGD--................--GYLSSLAL.......KLNAK..........LGGI.N.....YYL.D....DQS.I-........-......R..W....L...S...D.....R.A..N.M..................................IVGLHVRHSLPSM...............NMAW..TTAAMVSNVD...G...F.F.H...N....F.P.....A.HL..E...VT.....V..........D.......F....Q...K-......--P...dVGR.............................. [...]
+B8PFP7_POSPM/371-656   ............................................................................................l-LIVMLPW..RKRQL..YAAIKYY.TD...VV..L..GIHTAHILL.P..K.AHGD--................--GYLSSLAL.......KLNAK..........LGGV.N.....YYL.D....DQS.I-........-......R..W....L...S...D.....R.A..D.M..................................IVGLHVRHSPPST...............EMVW..TTAATVSNVD...G...F.F.H...N....F.P.....A.RL..K...VA.....V..........E.......F....Q...K-......--P...dVGR.............................. [...]
+B8PN24_POSPM/140-415   ............................................................................................l-LIVMLPW..RKRQL..YAAIKYY.TD...VV..L..GIHTAHILL.P..K.AHGD--................--GYLSSLAL.......KLNAK..........LGGV.N.....YYL.D....DQS.I-........-......R..W....L...S...D.....R.A..D.M..................................IVGLHVRHSPPST...............EMVW..TTAAMVSNVD...G...F.F.H...N....F.P.....A.RL..K...VA.....V..........E.......F....Q...K-......--P...dVGR.............................. [...]
+Q10P03_ORYSJ/678-756   ........................................................................................gtead--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B9F6T7_ORYSJ/653-731   ........................................................................................gtead--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B8AK97_ORYSI/622-700   ........................................................................................gtead--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+Q0U676_PHANO/647-830   ........................................................................................nvldv--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............--GP..SIAAVVASTD...S...T.A.L...Q....F.P.....G.SV..T...IQ.....Q..........T.......F....D...EY......TTR...gAEDkttltapv...................... [...]
+C7SYH3_THAPS/780-1048  ............................................................................................i-MLVVLPD..KGKAL..YDHVKFV.SN...QC..S..GVQTQCASL.D..T.FNRQRN................KEQYSTALAT.......KMNAK..........LSTV.E.....DGA.I....AWR.GA........V......D..W....V...N...Q.....C.H..T.L..................................VIGIGMAHGMGRVl............lvMSVPpyHLIAISLVF-...F...V.L.L...K....V.P.....K.RA..Y...VQ.....K..........K.......A....D...TL......SKD...aMID.............................. [...]
+A2DPV7_TRIVA/501-794   ............................................................................................f-VICVVPD..TQKDR..YDSIKSV.LS...SD..L..GIPSQIAIE.G..S.L-NPKL................LMSVATNLVI.......QIGTK..........LNGA.-.....LVK.L....S-R.KS........I......-..S....A...E...M.....K.G..T.M..................................LIGLSIASGKGRD...............--PS..SYVSGVATTD...F...D.L.S...M....Y.H.....S.KS..F...GP.....H..........N.......E....K...II......PEN...fITD.............................. [...]
+A2DXK9_TRIVA/462-624   .............................................................................................FIICVLPD..GNSQL..YSTLKIF.LT...SS..L..GIPSSFVTD.E..S.LVANKQ...............sMDQIATDMCL.......SIICK..........TGGV.P....fY-V.S....PVS.LP........L......-..-....-...-...-.....R.N..T.V..................................FAGFEVSQTNVAAva..........sydN---..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+A1D5I6_NEOFI/71-143    ..........................................................................................iey--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+C7SYH3_THAPS/1070-1160 .......................................................................................sssass--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+C7SYH2_PHATR/826-1176  ...........................................................................................lm--FAVIPT..KDVST..YAFVKYL.SH...VE..F..GIPSQVMVE.E..S.YQNQRS...............kTEAYCAGIAL.......KLNTK..........LSNSlNr..stAWS.I....YSG.TA........R......Q..W....L...M...D.....T.P..T.M..................................IMGYCVASGPGQD...............--SK..SIVVGTASLD...V...G.G.T...H....C.C.....H.DK..R...VQ.....S..........K.......S....H...IV......DSD...vLEE.............................. [...]
+B7G499_PHATR/1-107     .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+A9T108_PHYPA/1-169     ............................................................................................k--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+C6XVE0_PEDHD/320-460   .....................................................................................viitnskk-------E..ESDDK..LYFSLKH.RF...TN..E..GIPCQVVTK.D..L.IINDNA................LKFSLGNIAL.......QMFAK..........AGGI.-.....PWK.M....K--.PA........T......-..-....-...-...-.....T.E..Y.L..................................IIGIGQSYNIEIT..............eD---..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+Q86QW7_GIALA/412-736   ............................................................................................l-VVIVIPG..PKQDRgdLYKGIKQ.FY...TH..M..GIVTQCLLA.P..K.SSQNELq.............wyDQAVLRSVCQ.......QIYAK..........AGGA.-.....VWA.P....VLP.PQ........N......-..-....V...Y...S.....K.S..T.M..................................LCALDISRPKKTVgr...........paEVPI..STAGFISTYD..gS...F.E.Y...I....Y.S.....Q.KK..T...LV.....P..........N.......R....L...NH......GGE....LQQqtl........................... [...]
+A8BCK6_GIALA/555-879   ............................................................................................l-VVIVIPG..PKQDRgdLYKGIKQ.FY...TH..M..GIVTQCLLA.P..K.SSQNELq.............wyDQAVLRSVCQ.......QIYAK..........AGGA.-.....VWA.P....VLP.PQ........N......-..-....V...Y...S.....K.S..T.M..................................LCALDISRPKKTVgr...........paEVPI..STAGFISTYD..gS...F.E.Y...I....Y.S.....Q.KK..T...LV.....P..........N.......R....L...NH......GGE....LQQqtl........................... [...]
+C6LTG5_GIALA/555-877   ............................................................................................l-VVVVIPG..PKQYSggLYKEVKR.FY...TD..K..GIVTQCLLT.P..R.LSRDGPe.............wyDQAILNGLCQ.......QIYAK..........AGGA.-.....VWA.P....ALP.KD........N......A..Y....-...-...S.....T.S..T.M..................................LCALDVSRPKKTVgr...........ptEVPA..STAGFISTY-...E...G.S.F...E....Y.I.....Y.SQkkN...LMpn.rlN..........Q.......G....G...EV......QQQt..lMKT.............................. [...]
+C4LVV2_ENTHI/470-756   ......................................................................................mvlavsv--------..--TDS..IYEQIKK.FC...VD..E..NVPTQCIKP.N..T.LRRQPP................-TPVIQMITL.......QMQSK..........MGGI.-.....PWK.T....EID.SS........F......-..-....-...-...-.....A.D..G.M..................................TVGIDVISAGKDR...............----..EIVAIVSSVD...K...D.F.T...V....Y.K.....K.SS..V...VE.....K..........K.......G....L...HT......AGI...hIGE.............................. [...]
+B0ET37_ENTDI/470-756   ......................................................................................mvlavsv--------..--TDS..IYEQIKK.FC...VD..E..NVPTQCIKP.N..T.LRRQSL................-TPIIQMITL.......QMQSK..........MGGI.-.....PWK.T....EID.SG........F......-..-....-...-...-.....S.D..G.M..................................TVGIDVISAGKDR...............----..EIVAIVSSVD...K...S.F.T...V....Y.K.....K.SS..V...VE.....K..........K.......G....L...HT......AGI...hIGE.............................. [...]
+B0ENU6_ENTDI/467-753   ..........................................................................................kiv---FVVLL..-NDSL..YEDIKRK.C-...FD..R..EIITQCILP.D..T.LKKQNL................-FPIVSQITY.......QIQSK..........LGGI.P.....-WD.V....LTN.NK........L......-..-....-...-...-.....F.K..T.M..................................IIGISVIPYDDNK...............----..ECISLVSSMK...S...N.S.L...A....T.R.....K.KY..S...TI.....E..........K.......K....G...CG......NEG....YNSq............................. [...]
+C4LVQ2_ENTHI/467-753   ...........................................................................................ki--VFVVIL..-NDSL..YEDIKRK.CF...DK..-..EIITQCIHP.D..T.LKKQNL................-FPIVSQITY.......QIQSK..........IGGI.-.....PWD.V....LTN.NK........F......-..-....-...-...-.....I.K..T.M..................................IIGIAVTPYDDNK...............----..ECISLVSSMK...Y...N.S.F...A....T.R.....K.KY..S...AI.....E.........tK.......G....S...GN......AGY...nSQI.............................. [...]
+D2V7J4_NAEGR/498-769   ............................................................................................y-VFFLMAN..ENKHI..YSALKQF.YN...CT..V..GIPSQCIVC.N.gD.WFKR--................----LPNCLI.......QMSAK..........IGGL.-.....IWS.V....ERS.YQ........E......-..-....-...-...-.....-.F..V.S..................................VCGIDIQRKGRNF...............---K..GSISLSLNT-...-...-.S.T...T....L.Y.....Y.TV..P...FR.....E..........S.......D....E...TN......IRN...kLLS.............................. [...]
+C5LD15_9ALVE/718-952   ....................................................................................vsgttpsts--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..S...MK.....E..........R.......R....S...AG......VAR...aIKE.............................. [...]
+A8VSS4_TETTH/479-774   ............................................................................................f-IVFILQGakGKGKN..YQYLKSF.LL...KE..K..PIPSQMILQ.G..T.IKSSKD...............gCQVICNKICN.......QICIK..........VGGI.P.....YII.K....DLP.F-........-......-..-....-...S...N.....L.P..T.M..................................LVGIDYIRKENQK...............----..SVYSFVASVD...S...T.F.C...K....F.F.....S.GA..Q...LL.....D..........A.......Q....D...QN......NKF....VDK.............................. [...]
+Q3SD94_PARTE/460-750   ...........................................................................................qi-VVSILDR.hEDSKL..YNELKKF.LI...SV..Q..GVLHQNVSI.Q..T.VDSKKF................-SKIAQQIVK.......QVHSK..........IGKQ.-.....LWN.I....QKI.TE........I......-..-....-...-...S.....E.K..I.M..................................IIGIDVYHKTLAN...............--NK..SCVGFNAQFG...Q...Q.S.E...K....H.F.....T.KT..I...IV.....E..........K.......G....K...EL......NKG....VGQ.............................. [...]
+A0D4I7_PARTE/320-610   ...........................................................................................qi-VVSILDR.hEDSKL..YNELKKF.LI...SV..Q..GVLHQNVSI.Q..T.VDSKKF................-SKIAQQIVK.......QVHSK..........IGKQ.-.....LWN.I....QKI.TE........I......-..-....-...-...S.....E.K..I.M..................................IIGIDVYHKTLAN...............--NK..SCVGFNAQFG...Q...Q.S.E...K....H.F.....T.KT..I...IV.....E..........K.......G....K...EL......NKG....VGQ.............................. [...]
+Q3SD95_PARTE/471-760   ...........................................................................................lv--VSLIDQ.eKDKQI..YQQLKQY.LI...AE..E..GVSHQNVTL.Q..L.IENQKF................-GAIVPKIIQ.......QIHSK..........LGNQ.T.....WNI.Q....KIQ.E-........I......-..-....-...-...S.....D.N..I.M..................................IVGIDVYHKTVLG...............--LD..SCVGFNAQFG...Q...Q.G.Y...A....N.F.....T.KT..I...IV.....R..........K.......G....K...EI......NKD....VAM.............................. [...]
+A0CE33_PARTE/2-210     .........................................................................................keis--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....D.E..I.M..................................IIGIDVYHKTEKK...............--IN..SCVGFNAQFG..qQ...G.D.T...N....F.T.....-.KT..I...IV.....D..........Q.......G....K...EI......NKD....IAN.............................. [...]
+A0DEE4_PARTE/478-780   ............................................................................................s-LVVSLTD..KNRDTslYIGLKDF.LL...SQggA..GVIHQNVTT.K..S.CKNKNK................-QSIASKIAQ.......QISVK..........LGNP.-.....LWV.I....PKV.KG........I......-..-....-...-...S.....E.K..I.M..................................IIGMDIYHKLVTG...............--KQ..SCMGFVAHFD..lE...C.K.T...S....F.S.....K.TI..-...IM.....K..........S.......G....Q...EF......NQA....VGQ.............................. [...]
+Q3SE57_PARTE/478-788   ............................................................................................s-LVVSLTD..KNRDTslYIGLKDF.LL...SQggA..GVIHQNVTT.K..S.CKNKNK................-QSIASKIAQ.......QISVK..........LGNP.-.....LWV.I....PKV.KG........I......-..-....-...-...S.....E.K..I.M..................................IIGMDIYHKLVTG...............--KQ..SCMGFVAHFD..lE...C.K.T...S....F.S.....K.TI..-...IM.....K..........S.......G....Q...EF......NQA....VGQ.............................. [...]
+Q3SE52_PARTE/466-770   ............................................................................................l-IVTFVNE.rDKDRI..YGHIKKY.CF...QD..Q..GISHQNILS.K..F.LKTKNP................-SSVASKIAQ.......QMSMK..........LGNP.-.....LWA.I....PKP.NG........I......-..-....-...-...S.....D.K..T.M..................................VVGIDIYHKLLTN...............--RK..SCMGFVAYLE...S...E.C.L...N....T.F.....A.KP..I...IM.....R..........E.......G....Q...EM......SQE....VGR.............................. [...]
+Q3SE58_PARTE/466-770   ............................................................................................l-IVTFINE..KDKDR.iYGQMKKY.CF...QE..H..GISHQNILS.K..F.LKSKNP................-SSVASKIAQ.......QMSMK..........LGNP.-.....LWA.I....PKP.NG........I......-..-....-...-...S.....D.K..T.M..................................VIGIDIYHKLLTN...............--RR..SCMGFVAYLE...S...E.C.L...N....T.F.....A.RP..I...IM.....K..........E.......G....Q...EM......CHE....VGR.............................. [...]
+A0CB11_PARTE/463-767   ............................................................................................l-IVTFINE..KDKDR.iYGQMKKY.CF...QE..H..GISHQNILS.K..F.LKSKNP................-SSVASKIAQ.......QMSMK..........LGNP.-.....LWA.I....PKP.NG........I......-..-....-...-...S.....D.K..T.M..................................VIGIDIYHKLLTN...............--RR..SCMGFVAYLE...S...E.C.L...N....T.F.....A.RP..I...IM.....K..........E.......G....Q...EM......CHE....VGR.............................. [...]
+Q0MRE2_TETTH/533-834   ...................................................................................ivaivapnkf--------..STVQN..YSKIKKL.CT...IT..Q..QIKSQYIRQ.Q..S.LDSKQS................-YNVCSAILS.......QMAAK..........CGTT.-.....LWV.V....NPP.NG........I......-..-....-...-...P.....D.N..T.M..................................IIGTSVQKVFING...............-QPQ..FVIGFVASQD...K...N.V.S...R....F.Y.....S.RA..T...FQ.....K..........L.......N....K...DN......IEK....IST.............................. [...]
+Q239A3_TETTH/603-904   ...................................................................................ivaivapnkf--------..STVQN..YSKIKKL.CT...IT..Q..QIKSQYIRQ.Q..S.LDSKQS................-YNVCSAILS.......QMAAK..........CGTT.-.....LWV.V....NPP.NG........I......-..-....-...-...P.....D.N..T.M..................................IIGTSVQKVFING...............-QPQ..FVIGFVASQD...K...N.V.S...R....F.Y.....S.RA..T...FQ.....K..........L.......N....K...DN......IEK....IST.............................. [...]
+A0CR14_PARTE/559-847   .............................................................................................MIVIVLNR..YMKNC..YAPLKKM.CM..sEK..F..GVLTQMVSS.D..S.ISKQKK...............gLFSIIQKLAI.......QMMDK..........VGNC.-.....LWT.V....QLP.QK........W......P..-....-...-...-.....D.N..I.M..................................IVSVIIE---KG-...............----..KFAGMLSSLD...K...T.Y.S...R....Y.Y.....S.QM..S...TK.....I..........V.......E....K...CL......IKD....IGD.............................. [...]
+Q3SE51_PARTE/572-860   .............................................................................................MIVIVLNR..YMKNC..YAPLKKM.CM..sEK..F..GVLTQMVSS.D..S.ISKQKK...............gLFSIIQKLAI.......QMMDK..........VGNC.-.....LWT.V....QLP.QK........W......P..-....-...-...-.....D.N..I.M..................................IVSVIIE---KG-...............----..KFAGMLSSLD...K...T.Y.S...R....Y.Y.....S.QM..S...TK.....I..........V.......E....K...CL......IKD....IGD.............................. [...]
+Q0Q5B1_9SPIT/472-767   ...........................................................................................av--VLLLPGqkGKCNL..YDEVKKY.LL...TD..V..PVPSQAVLT.G..T.IQKGKN................LRSIVNKILI.......QINVK..........IGGI.-.....PWA.V....DSL.PL........-......-..-....-...L...T.....K.P..S.M..................................ICGMDVFHSTSLG...............--KK..SVLALTASMN...Q...T.A.T...K....Y.W.....S.TN..V...IQ.....S..........E......lG....Q...EA......SHA....LNQ.............................. [...]
+Q8ISG8_STYLE/475-767   .....................................................................................vlllpgak--------..GKTSL..YDDIKRF.LL...AE..F..PVPSQVVLC.N..T.ISKGKN................LRSIVNKILI.......QITAK..........IGGI.-.....PWT.V....DAL.P-........-......-..-....F...M...D.....K.P..T.M..................................ICGMDVFHSTSLG...............--KK..SVLGLTASIN...V...S.A.T...K....Y.F.....S.SC..V...IQ....gE..........L.......G....L...EA......SHS....LQN.............................. [...]
+Q86CV7_STYLE/475-767   .....................................................................................vlllpgak--------..GKTSL..YDDIKRF.LL...AE..F..PVPSQVVLC.N..T.ISKGKN................PRSIVNKILI.......QITAK..........IGGI.-.....PWT.V....GAL.P-........-......-..-....F...M...D.....K.P..T.M..................................ICGMDVFHSTSLG...............--KK..SVLGLTASIN...V...S.A.T...K....Y.F.....S.SC..V...IQ....gE..........L.......G....L...EA......SHS....LQN.............................. [...]
+Q8MQL1_TETTH/444-756   ...........................................................................................ma--VFLLPG..KKKAGmyYDEIKRY.FT...NV..K..PIPTQVILA.S..T.AMKDKG................LRSVVNKLLM.......QICAK..........TGGV.-.....PWV.M....DNL.P-........-......-..-....F...Q...N.....L.P..T.M..................................VVGMDVFHNTPGK...............--KE..SIFGFVSTVD...R...N.F.S...K....Y.Y.....S.HS..H...VL.....P..........T.......G....Q...EI......TPF....LQQ.............................. [...]
+Q8MXZ9_TETTH/444-756   ...........................................................................................ma--VFLLPG..KKKAGmyYDEIKRY.FT...NV..K..PIPTQVILA.S..T.AMKDKG................LRSVVNKLLM.......QICAK..........TGGV.-.....PWV.M....DNL.P-........-......-..-....F...Q...N.....L.P..T.M..................................VVGMDVFHNTPGK...............--KE..SIFGFVSTVD...R...N.F.S...K....Y.Y.....S.HS..H...VL.....P..........T.......G....Q...EI......TPF....LQQ.............................. [...]
+Q23ND1_TETTH/444-756   ...........................................................................................ma--VFLLPG..KKKAGmyYDEIKRY.FT...NV..K..PIPTQVILA.S..T.AMKDKG................LRSVVNKLLM.......QICAK..........TGGV.-.....PWV.M....DNL.P-........-......-..-....F...Q...N.....L.P..T.M..................................VVGMDVFHNTPGK...............--KE..SIFGFVSTVD...R...N.F.S...K....Y.Y.....S.HS..H...VL.....P..........T.......G....Q...EI......TPF....LQQ.............................. [...]
+Q3SE50_PARTE/446-748   .....................................................................................llllilng------PK..KNAPL..YTDLKRY.LI...ND..C..PIASQVILS.S..T.LNQPKG...............kVKTICNKLLV.......QICAK..........VGGT.-.....PWG.I....SDL.P-........-......-..-....F...T...D.....Q.P..T.M..................................ICGMDVYHSTAKG...............--RK..SMLSFVSTED...E...F.F.S...K....Y.M.....T.QS..I...EM.....D..........S.......G....V...EF......SFS....LCP.............................. [...]
+Q3SE54_PARTE/446-748   .....................................................................................llllilng------PK..KNAPL..YTDIKRY.LI...ND..C..PIASQVILS.S..T.LNQPKG...............kVKTICNKLLV.......QICAK..........VGGT.-.....PWG.V....SEL.P-........-......-..-....F...T...D.....Q.P..T.M..................................ICGMDVYHSTGKA...............--KK..SMLSFVSTED...E...F.F.S...K....Y.M.....T.QS..I...EM.....E..........T.......G....V...EF......SFS....LCP.............................. [...]
+Q3SE55_PARTE/446-748   .....................................................................................llllilng------PK..KSAPL..YTDIKRY.LI...ND..C..PIASQVILS.S..T.LNQPKG...............kVKTICNKLLV.......QICAK..........VGGT.-.....PWG.V....SEL.P-........-......-..-....F...T...D.....Q.P..T.M..................................ICGMDVYHSTGKA...............--KK..SMLSFVSTED...E...F.F.S...K....Y.M.....T.QS..V...EM.....E..........T.......G....V...EF......SFS....LCP.............................. [...]
+Q3SE56_PARTE/450-741   ............................................................................................f-IIFLLPGqkKNSRL..YRCAKFI.SL...QK..I..ACPSQVVLE.D..T.LTKN--................TRSIVNKIMV.......QICAK..........LGGV.-.....PWA.I....DKL.P-........-......K..L....F...Q...Q.....Q.H..T.M..................................ICAAECYDRIHQI...............----..KHLAFCSTVD...K...N.M.T...K....Y.H.....S.QI..-...--.....L..........K.......G....A...DY......KGD...nLKK.............................. [...]
+Q3SE59_PARTE/450-741   ............................................................................................f-IIFLLPGqkKNSRL..YRCAKFI.SL...QK..I..GCPSQVVLE.D..T.LAKN--................TRSIVNKIMV.......QICAK..........LGGV.-.....PWA.I....DKL.P-........-......K..L....F...Q...Q.....Q.H..T.M..................................ICAAECYDRLHQI...............----..KHLAFCSTVD...K...N.M.T...K....Y.H.....S.QI..-...--.....L..........K.......G....A...DY......KGD...nLKK.............................. [...]
+Q9U5C9_PARCA/466-759   ............................................................................................f-LIFLLPGqkKKAKL..YKTAKKI.SM...QS..F..GCPSQVIIE.K..T.LQKN--................TRSIVNKILI.......QLNAK..........VGGI.-.....PWA.L....DGF.PQ........Q......-..-....F...Q...A.....K.P..T.M..................................ICGVDIFSKHGKK...............----..NQLAFCSTTD...K...Y.F.S...R....Y.Y.....S.QV..-...--.....I..........S.......S....G...EF......SIH....LQQ.............................. [...]
+Q3SE49_PARTE/467-759   ............................................................................................f-LIFLLPGqkKKARL..YKACKVI.SM...AT..F..GCASQVIVE.K..T.LQRN--................TRSIVNKILI.......QLNAK..........IGGT.-.....PWA.L....DGM.P-........-......D..M....F...T...N.....Q.P..T.M..................................ICGVDIFTKAGRK...............----..SQLAFCSTIN...R...Q.F.S...R....Y.Y.....S.QV..-...--.....I..........T.......S....G...EF......CSH....LQL.............................. [...]
+Q3SE53_PARTE/460-752   ............................................................................................f-LLFLLPGqkKKARL..YKTAKKI.SM...QK..F..GCASQVVVE.K..T.LAKN--................TRSIVNKILI.......QLNAK..........VGGT.-.....PWA.I....DSL.P-........L......-..T....F...Q...N.....Q.P..T.M..................................ICGTDCFVKSGRK...............----..NQLAFCSTVD...R...N.L.S...R....Y.Y.....S.QV..V...T-.....-..........-.......S....G...EF......SQH....LQS.............................. [...]
+A0E0B0_PARTE/455-747   ............................................................................................f-LLFLLPGqkKKARL..YKTAKKI.SM...QK..F..GCASQVVVE.K..T.LAKN--................TRSIVNKILI.......QLNAK..........VGGT.-.....PWA.I....DSL.P-........-......T..T....F...Q...N.....Q.P..T.M..................................ICGTDCFVKSGRK...............----..NQLAFCSTVD...R...N.L.S...R....Y.Y.....S.QV..V...TS.....-..........-.......-....G...EF......SQH....LQQ.............................. [...]
+D2V2M6_NAEGR/28-326    ............................................................................................s-FILMITK.nKTSTE..YHTLKEK.TI...VD..M..GIPSQCITE.R..N.IAISEK................KSSILKNITI.......EMNAK..........LGGI.-.....PWM.T....SIP.M-........-......-..-....-...-...K.....P.H..T.M..................................IVGMDVNHSGEVY..............hRSKS..SLVGFVSSYD...S...K.V.C...A....Y.Y.....S.QI..Q...VQ.....K..........P.......G....V...EL......VEN....IKN.............................. [...]
+D2VMG4_NAEGR/577-883   ...........................................................................................fa--LVVLFN..DQKQR..YSRVKEV.LC...NQ..V..GIISQCVKL.S..T.ITNEKG................LASKATKVIV.......QICSK..........MGGA.-.....PWT.V....P--.L-........-......A..F....P...N...K.....E.P..T.M..................................IIGMDVYHSGEIY..............kRKKA..SVAGFVASID...A...K.I.S...T....Y.F.....T.KC..I...IQ.....E..........A.......G....K...EI......VDE....LEE.............................. [...]
+B7PDV6_IXOSC/541-835   ...........................................................................................la--LVILPN..NRKDR..YDMIKKH.AC...VD..L..GLQTQVLLS.R..T.IGNRKN................VRSVATKVAI.......QLNCK..........LGGQ.-.....AWC.L....EIP.L-........-......-..-....-...-...-.....A.S..T.M..................................VIGYDTYHDSSQR...............--GR..SAGAFVASLN...R...T.F.T...R....W.F.....S.RA..S...FH.....A..........S.......H....Q...EL......GNS....LAI.............................. [...]
+B7Q5I1_IXOSC/446-741   ............................................................................................l-LMTIFPN..NRKDR..YDSLKKV.AC...VD..M..GLHTQVMLG.R..T.ISNKKN................LKSVATKVAI.......QMNCK..........LGGE.-.....AWA.L....DIP.L-........-......-..-....-...-...-.....T.K..M.M..................................CVGYDTYHDSRQK...............--GL..SAGGFVASLN...R...T.L.T...R....W.Y.....S.RV..S...FH.....Q..........T.......H....Q...EL......GSA....LKT.............................. [...]
+Q0H8V5_9CNID/70-239    ............................................................................................m-VVTILTT..NRKDR..YDAIKKL.CC...LE..K..PVPSQVIVG.R..T.ISKKQM................LMSVSTKIAI.......QLNCK..........LGGE.-.....AWA.L....EIP.L-........-......-..-....-...-...-.....K.K..T.M..................................VIGIDTYHDSSAK...............--GR..SVGGFVASVN...Q...T.L.T...K....Y.Y.....S.RV..S...FQ.....H..........T.......G....M...EF......IDA....LKT.............................. [...]
+Q3ZUK2_PLADU/35-327    ............................................................................................l-VLCILPS..NKKDR..YDAIKKL.CC...IN..C..PVPSQMVLA.K..T.LSKAKM................LMSVATKIAI.......QINCK..........LGGE.-.....VWA.L....EIP.L-........-......-..-....-...-...-.....K.G..L.M..................................VVGVDSYHDSKQK...............--GR..SVGAFVASMN...Q...S.L.T...R....Y.Y.....S.RC..C...FQ.....H..........Q.......H....Q...EL......LDG....LRV.............................. [...]
+D1LXB5_SACKO/1-252     ...........................................................................................ml--------..-----..-------.--...--..-..---------.-..-.------................-MSVATKIAM.......QLNCK..........LGGE.-.....LWA.L....EIP.I-........-......-..-....-...-...-.....K.N..M.M..................................IVGIDCYHDSATK...............--GQ..SIGAFIASTN...R...T.I.T...R....F.Y.....S.RV..T...FQ.....H..........T.......G....Q...EL......IDG....LKV.............................. [...]
+C3XV22_BRAFL/1831-1964 .........................................................................................ktqm--------..-RKDR..YDAIKKF.CC...VD..H..PVPSQVIVS.R..T.LNKKQM................LMSVATKIAM.......QLNCK..........LGGE.-.....LWA.V....EIP.L-........-......-..-....-...-...-.....K.S..M.M..................................VVGIDCYHDSATK...............--GQ..SIGGVIASMN...S...S.L.T...R....W.Y.....S.RC..T...FQ.....H..........S.......G....Q...EL......IDG....LKV.............................. [...]
+C3XV20_BRAFL/551-843   .............................................................................................MVVCIVSN..NRKDR..YDAIKKF.CC...VD..R..PVPSQVIVS.R..T.LSKKQM................LMSVCTKVAL.......QMNCK..........LGGE.-.....LWA.L....EIP.I-........-......-..-....-...-...-.....K.N..L.M..................................VVGINCYQDSLTK...............--GQ..SVGGVIASIN...S...S.L.T...R....W.Y.....S.RC..T...FQ.....R..........S.......S....Q...EL......IDG....LKV.............................. [...]
+A7RFC2_NEMVE/557-857   ............................................................................................i-VVTIVPS..NRKDR..YDSIKKL.CC...LE..K..GVPSQVVVS.R..T.LSKKQM................LMSVCTKIGI.......QLNCK..........LGGE.-.....AWA.V....DIP.L-........-......-..-....-...-...-.....K.N..L.M..................................IVGIDTYHDSSQK...............--GR..SVGGFVASLNkpcT...R.Q.R...E....Y.Y.....S.RC..T...FQ.....H..........S.......G....Q...EL......VDG....LKV.............................. [...]
+A7T755_NEMVE/2-70      ............................................................................................i-VVTIVPS..NRKDR..YDSIKKL.CC...LE..K..GVPSQVVVS.R..T.LSKKQM................LMSVCTKIGI.......QLNCK..........LGGE.-.....AWA.V....DIP.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+Q6RSS9_PODCA/561-853   ............................................................................................i-VVCIVPN..NRKDR..YDVIKKL.CC...VE..R..PVPSQVVVS.R..T.LSKKQM................LMSVCTKIGI.......QLNCK..........LGGE.-.....VWA.V....DIP.L-........-......-..-....-...-...-.....K.N..V.M..................................VVGFDVYHDSATK...............--GK..SIGGFVASTN...R...Y.L.T...R....Y.Y.....S.RI..T...SQ.....T..........S.......H....Q...EI......CNQ....LKV.............................. [...]
+B2KTD9_9CNID/559-850   ............................................................................................i-VVCIVPN..NRKDR..YDAIKKI.TC...VE..N..PVPSQVVVS.R..T.LSKQQM................LMSVCTKIAI.......QLNCK..........LGGE.-.....VWA.T....EIP.V-........-......-..-....-...-...-.....K.K..L.M..................................VIGFDVYHDSMNK...............--GQ..SIGGFIASTN...D...S.L.T...R....Y.Y.....S.RI..T...KQ.....R..........S.......H....N...EI......CSQ....LKI.............................. [...]
+B5BUZ0_9ASCI/567-860   ............................................................................................m-ILSLMPS..NRKDR..YDGIKRL.CC...VD..I..PIPTQVVLT.K..T.LSKPQR................VMSIATKIAI.......QINCK..........LGGE.-.....AWA.A....HIP.L-........-......-..-....-...-...-.....K.G..T.M..................................VIGIDTYHDTARK...............--GQ..SVGGFVANIN...Q...E.Y.T...R....W.Y.....S.NT..T...FQ.....Q..........N.......S....T...EL......IDG....LKK.............................. [...]
+Q9GPA6_STRPU/114-407   ............................................................................................i-VVVILPT..NRKDR..YDAIKKT.CV...VT..H..PCPSQVIVS.R..T.LSKQQM................LMSVATKIAM.......QMNCK..........MGGD.-.....LWR.V....EIP.L-........-......-..-....-...-...-.....S.N..L.M..................................IIGIDSYHDSLTK...............--GR..SVLGFVASMN...K...S.Q.T...S....F.F.....S.SC..A...FQ.....H..........A.......Q....G...EF......GAN....LST.............................. [...]
+Q9GPA8_STRPU/547-840   ............................................................................................i-VVVILPT..NRKDR..YDAIKKT.CV...VT..H..PCPSQVIVS.R..T.LSKQQM................LMSVATKIAM.......QMNCK..........MGGD.-.....LWR.V....EIP.L-........-......-..-....-...-...-.....S.N..L.M..................................IIGIDSYHDSLTK...............--GR..SVLGFVASMN...K...S.Q.T...S....F.F.....S.SC..A...FQ.....H..........A.......Q....G...EF......GAN....LST.............................. [...]
+Q9GPA7_STRPU/547-808   ............................................................................................i-VVVILPT..NRKDR..YDAIKKT.CV...VT..H..PCPSQVIVS.R..T.LSKQQM................LMSVATKIAM.......QMNCK..........MGGD.-.....LWR.V....EIP.L-........-......-..-....-...-...-.....S.N..L.M..................................IIGIDSYHDSLTK...............--GR..SVLGFVASMN...K...S.Q.T...S....F.F.....S.SC..A...FQ.....H..........A.......Q....G...EF......GAN....LST.............................. [...]
+C3XV23_BRAFL/67-195    ................................................................................lsnlcacfrfplr--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+PIWL1_CHICK/561-853    ............................................................................................i-VVCILSS..TRKDK..YDAIKKY.LC...TD..C..PIPSQCVVA.R..T.LSKPQT................ALAIVTKIAL.......QMNCK..........MGGE.-.....LWS.V....EIP.L-........-......-..-....-...-...-.....K.Q..L.M..................................IVGIDCYHDTLSG...............--KQ..SIAGFVASLN...E...K.M.T...R....W.F.....S.RC..V...VQ.....S..........R.......G....Q...EI......VDG....LKA.............................. [...]
+PIWL1_HUMAN/555-847    ............................................................................................i-VVCLLSS..NRKDK..YDAIKKY.LC...TD..C..PTPSQCVVA.R..T.LGKQQT................VMAIATKIAL.......QMNCK..........MGGE.-.....LWR.V....DIP.LK........L......-..-....-...-...-.....-.-..V.M..................................IVGIDCYHDMTAG...............--RR..SIAGFVASIN...E...G.M.T...R....W.F.....S.RC..I...FQ.....D..........R.......G....Q...EL......VDG....LKV.............................. [...]
+D2HWM8_AILME/555-847   ............................................................................................i-VVCLLSS..NRKDK..YDAIKKY.LC...TD..C..PTPSQCVVA.R..T.LGKQQT................VMAIATKIAL.......QMNCK..........MGGE.-.....LWR.V....DMP.LK........L......-..-....-...-...-.....-.-..A.M..................................IVGIDCYHDTTAG...............--RR..SIAGFVASIN...E...G.M.T...R....W.F.....S.RC..V...FQ.....D..........R.......G....Q...EL......VDG....LKV.............................. [...]
+PIWL1_MOUSE/556-848    ............................................................................................i-VVCLLSS..NRKDK..YDAIKKY.LC...TD..C..PTPSQCVVA.R..T.LGKQQT................VMAIATKIAL.......QMNCK..........MGGE.-.....LWR.V....DMP.LK........L......-..-....-...-...-.....-.-..A.M..................................IVGIDCYHDTTAG...............--RR..SIAGFVASIN...E...G.M.T...R....W.F.....S.RC..V...FQ.....D..........R.......G....Q...EL......VDG....LKV.............................. [...]
+D3ZTP9_RAT/556-848     ............................................................................................i-VVCLLSS..NRKDK..YDAIKKY.LC...TD..C..PTPSQCVVA.R..T.LGKQQT................VMAIATKIAL.......QMNCK..........MGGE.-.....LWR.V....DMP.LK........L......-..-....-...-...-.....-.-..A.M..................................IVGIDCYHDTTAG...............--RR..SIAGFVASIN...E...G.M.T...R....W.F.....S.RC..V...FQ.....D..........R.......G....Q...EL......VDG....LKV.............................. [...]
+PIWL1_DANRE/552-844    .............................................................................................MVVVILPT..NRKDK..YDCVKKY.LC...VD..C..PTPSQCVVS.R..T.ISKPQA................LMTVATKIAL.......QMNCK..........MGGE.-.....LWS.V....EIP.L-........-......-..-....-...-...-.....R.Q..L.M..................................IVGIDCYHDTAAG...............--KR..SIGAMVASLN...Q...G.M.S...R....W.F.....S.KC..V...LQ.....N..........R.......G....Q...EI......IDA....LKG.............................. [...]
+B9U223_ORYLA/549-841   .............................................................................................MVVVVLPS..NRKDK..YDSVKKY.LC...VD..C..PTPSQCVLS.R..T.LSRPQA................LMTVATKIAL.......QMSCK..........MGGE.-.....LWS.V....EIP.L-........-......-..-....-...-...-.....K.Q..L.M..................................IVGIDCYHDISAG...............--KR..SIGAMVASLN...Q...S.M.S...R....W.Y.....S.KC..V...LQ.....H..........K.......G....Q...EL......MDG....LKM.............................. [...]
+C3XV22_BRAFL/1173-1299 ........................................................................................lqapr--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.H...S....W.Y.....S.GC..T...FQ.....H..........S.......G....Q...EL......IDG....LKV.............................. [...]
+C3XV22_BRAFL/2983-3180 ............................................................saeaapkkkmqkkkkranqktstiklttepvpv--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+Q4T9Y6_TETNG/521-792   .............................................................................................MVVVILPT..NRKDK..YDSIKKY.LC...VD..C..PVPSQCVVA.Q..T.LSRPQT................LLNVATKIAL.......QMACK..........MGGE.-.....LWS.V....EIP.L-........-......-..-....-...-...-.....K.H..L.M..................................VVGIDCYHDISAG...............--KR..SVGALVASMN...Q...T.M.S...R....W.F.....S.RC..V...LQ.....Q..........K.......G....Q...EI......MDG....LKR.............................. [...]
+Q4T9Y9_TETNG/1-228     .............................................................................................--------..-----..-------.--...--..-..---------.-..-.------................----------.......-MACK..........MGGE.-.....LWS.V....EIP.L-........-......-..-....-...-...-.....K.H..L.M..................................VVGIDCYHDISAG...............--KR..SIGALVASMN...Q...T.M.S...R....W.F.....S.RC..V...LQ.....Q..........K.......G....Q...EI......MDG....LKR.............................. [...]
+B4DYF7_HUMAN/569-859   .............................................................................................MVICILPN..DDKRR..YDSIKRY.LC...TK..C..PIPSQCVVK.K..T.LEKVQA................-RTIVTKIAQ.......QMNCK..........MGGA.-.....LWK.V....ETD.V-........-......-..-....-...-...-.....Q.R..T.M..................................FVGIDCFHDIVNR...............--QK..SIAGFVASTN...A...E.L.T...K....W.Y.....S.QC..V...IQ.....K..........T.......G....E...EL......VKE....LEI.............................. [...]
+PIWL3_HUMAN/578-868    ............................................................................................k-VICILPN..DDKRR..YDSIKRY.LC...TK..C..PIPSQCVVK.K..T.LEKVQA................-RTIVTKIAQ.......QMNCK..........MGGA.-.....LWK.V....ETD.V-........-......-..-....-...-...-.....Q.R..T.M..................................FVGIDCFHDIVNR...............--QK..SIAGFVASTN...A...E.L.T...K....W.Y.....S.QC..V...IQ.....K..........T.......G....E...EL......VKE....LEI.............................. [...]
+PIWL4_HUMAN/546-838    ............................................................................................l-VMCILPS..NQKTY..YDSIKKY.LS...SD..C..PVPSQCVLA.R..T.LNKQGM................MMSIATKIAM.......QMTCK..........LGGE.-.....LWA.V....EIP.L-........-......-..-....-...-...-.....K.S..L.M..................................VVGIDVCKDALSK...............--DV..MVVGCVASVN...P...R.I.T...R....W.F.....S.RC..I...LQ.....R..........T.......M....T...DV......ADC....LKV.............................. [...]
+D2I3M6_AILME/487-786   ............................................................................................l-VMCILPS..NQKSY..YDCIKKY.LS...CV..F..PVPSQCVLA.R..T.LTRQGM................MMSIATKIAM.......QMACK..........LGGE.-.....LWA.V....EIP.L-........-......-..-....-...-...-.....K.S..L.M..................................VVGIDVCKHEFSK...............--GM..VVVGFVASIN...P...G.I.T...R....W.F.....S.RC..T...LQ.....R..........T.......T....T...DV......ADC....LKV.............................. [...]
+A6X965_MOUSE/3-172     ...........................................................................................pg--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+PIWL4_RAT/541-834      ............................................................................................l-VMCILPS..NQKNY..YDSIKRY.LS...SD..C..PVPSQCVLT.R..T.LNKQGM................MLSVATKIAM.......QMTCK..........LGGE.-.....LWA.V....EIP.L-........-......-..-....-...-...-.....K.S..L.M..................................VVGIDICRDALSK...............--DV..AVVGFVASIN...S...R.I.T...R....W.F.....S.RC..V...LQ.....R..........T.......A....A...DI......ADC....LKV.............................. [...]
+PIWL4_MOUSE/541-834    ............................................................................................l-VMCILPS..NQKNY..YDSIKKY.LS...SD..C..PVPSQCVLT.R..T.LNKQGT................MLSVATKIAM.......QMTCK..........LGGE.-.....LWS.V....EIP.L-........-......-..-....-...-...-.....K.S..L.M..................................VVGIDICRDALNK...............--NV..VVVGFVASIN...S...R.I.T...R....W.F.....S.RC..V...LQ.....R..........T.......A....A...DI......ADC....LKV.............................. [...]
+D3ZDI3_RAT/541-827     ............................................................................................l-VMCILPS..NQKNY..YDSIKRY.LS...SD..X..PTPVSCTLQ.D..A.LSKDVA................VVGFVASINS.......RITRR..........IKGL.-.....--L.P....SLS.QP........L......-..-....-...-...L.....K.S..L.M..................................VVGIDICRDALSK...............--DV..AVVGFVASIN...S...R.I.T...R....W.F.....S.RC..V...LQ.....R..........T.......A....A...DI......ADC....LKV.............................. [...]
+B9ZU52_9TURB/589-885   ............................................................................................l-VFCLLPS..NKKQR..YDSIKRL.CY...VN..K..PVPSQCVLT.K..T.IRNPAK................VMSVATKVAL.......QISCK..........LGDV.-.....AWA.V....SIP.M-........-......-..-....-...-...-.....R.R..T.M..................................IVGMDTYHDKRQS...............---V..SVQGIVFSLN...E...T.F.T...Q....Y.Y.....S.YS..P...IV.....K..........G.......G....K...AE......LHN...rLEV.............................. [...]
+A8XEN9_CAEBR/501-812   .............................................................................................MLVVMLAD..DNKTR..YDSLKKY.LC...VE..C..PIPNQCINL.R..T.LAGKSSdgg.........enknFGSIVLKIVL.......QMVCK..........TGGA.-.....LWR.V....NIP.M-........-......-..-....-...-...-.....Q.D..T.M..................................IVGYDLYHDSTLK...............--GK..TVGACVSTTS...S...E.F.T...K....F.Y.....S.QT..R...PH.....E..........N.......P....T...QL......GNN....LTH.............................. [...]
+Q17567_CAEEL/397-708   .............................................................................................MLVVMLAD..DNKTR..YDSLKKY.LC...VE..C..PIPNQCVNL.R..T.LAGKSKdgg.........enknLGSIVLKIVL.......QMICK..........TGGA.-.....LWK.V....NIP.L-........-......-..-....-...-...-.....K.S..T.M..................................IVGYDLYHDSTLK...............--GK..TVGACVSTTS...N...D.F.T...Q....F.Y.....S.QT..R...PH.....E..........N.......P....T...QL......GNN....LTH.............................. [...]
+P90786_CAEEL/499-810   .............................................................................................MLVVMLAD..DNKTR..YDSLKKF.LC...VE..C..PIPNQCVNL.R..T.LAGKSKdgg.........enknLGSIVLKIVL.......QMICK..........TGGA.-.....LWK.V....NIP.L-........-......-..-....-...-...-.....K.N..T.M..................................IVGYDLYHDSTLK...............--GK..TVGACVSTTS...N...D.F.T...Q....F.Y.....S.QT..R...PH.....E..........N.......P....T...QL......GNN....LTH.............................. [...]
+C9E0T4_APIME/497-785   ............................................................................................l-IFCVVSN..NRADR..YSAIKKK.CT...HD..R..PVASQVFLA.K..N.LTNKGI................-RSIATKVAI.......QLNCK..........LGGA.-.....PWS.V....ELP.P-........-......-..-....-...-...-.....I.N..L.M..................................VVGYDVCHDPADK...............--SR..DFGAMVASLD...R...S.L.T...R....Y.Y.....S.AV..A...AH.....T..........T.......G....E...EL......SDE....FGE.............................. [...]
+C9E0T3_APIME/525-813   ............................................................................................l-IFCVVSN..NRADR..YSAIKKK.CT...HD..R..PVASQVFLA.K..N.LTNKGI................-RSIATKVAI.......QLNCK..........LGGA.-.....PWS.V....ELP.P-........-......-..-....-...-...-.....I.N..L.M..................................VVGYDVCHDPADK...............--SR..DFGAMVASLD...R...S.L.T...R....Y.Y.....S.AV..A...AH.....T..........T.......G....E...EL......SDE....FGE.............................. [...]
+A7LM14_BOMMO/414-612   .............................................................................................LILCVLAR..NYADR..YEAIKKK.CT...VD..R..AVPTQVVCA.R..N.MSSKSA................-MSIATKVAI.......QINCK..........LGGS.-.....PWT.V....DIP.L-........-......-..-....-...-...-.....P.S..L.M..................................VVGYDVCHDTRSK...............--EK..SFGAFVATLD...K...Q.M.T...Q....Y.Y.....S.IV..N...AH.....T..........S.......G....E...EL......SSH....MGF.............................. [...]
+A8D8P8_BOMMO/594-885   .............................................................................................LILCVLAR..NYADR..YEAIKKK.CT...VD..R..AVPTQVVCA.R..N.MSSKSA................-MSIATKVAI.......QINCK..........LGGS.-.....PWT.V....DIP.L-........-......-..-....-...-...-.....P.S..L.M..................................VVGYDVCHDTRSK...............--EK..SFGAFVATLD...K...Q.M.T...Q....Y.Y.....S.IV..N...AH.....T..........S.......G....E...EL......SSH....MGF.............................. [...]
+Q7QG53_ANOGA/576-875   .............................................................................................MIMCVVSN..SKSDR..YTAIKKK.CC...VE..R..AIPTQIMVQ.K..T.ITPKSGnv............rtLMSVATKVVI.......QMNCK..........LGGV.-.....PWK.V....KIP.L-........-......-..-....-...-...-.....N.G..L.M..................................TIGFDVCHDSKDK...............--SK..SFGAMVATLD...H...D.N.RgtpK....F.F.....S.TV..S...HH.....S..........S.......G....E...EI......SNY....LPL.............................. [...]
+Q16IF2_AEDAE/569-868   .............................................................................................LIMCVVTN..QKADR..YTAIKKK.CC...VD..R..AVPTQVICQ.K..T.ITPKGGnv............rtLMSVATKVVI.......QMNCK..........LGGV.-.....PWK.V....KIP.L-........-......-..-....-...-...-.....S.G..M.M..................................TIGFDVCHDTNDK...............--SK..SYGAMVATFD...H...D.N.RgtpK....F.F.....S.TV..S...QH.....R..........H.......G....E...EI......CNY....LPL.............................. [...]
+Q16ZS2_AEDAE/361-660   .............................................................................................LIMCVVTN..QKADR..YTAIKKK.CC...VD..R..AVPTQVICQ.K..T.ITPKGGnv............rtLMSVATKVVI.......QMNCK..........LGGV.-.....PWK.V....KIP.L-........-......-..-....-...-...-.....S.G..M.M..................................TIGFDVCHDTNDK...............--SK..SYGAMVATFD...H...D.N.RgtpK....F.F.....S.TV..S...QH.....R..........H.......G....E...EI......CNY....LPL.............................. [...]
+Q16ZS3_AEDAE/562-861   .............................................................................................LIMCVVTN..QKADR..YTAIKKK.CC...VD..R..AVPTQVICQ.K..T.ITPKGGnv............rtLMSVATKVVI.......QMNCK..........LGGV.-.....PWK.V....KIP.L-........-......-..-....-...-...-.....N.G..L.M..................................TVGFDVCHDTNDK...............--SK..SYGAMVATFD...H...D.N.RgtpK....F.F.....S.TV..S...QH.....G..........H.......G....E...EI......CNY....LPL.............................. [...]
+B0W5T3_CULQU/510-809   .............................................................................................MIMCVVSN..NKADR..YTAIKKK.CC...VD..R..AIPTQVMVQ.R..T.ITPKGGnv............rtLMSVATKVVI.......QMNCK..........LGGV.-.....PWK.V....KIP.L-........-......-..-....-...-...-.....S.G..L.M..................................TVGFDVCHDTKDK...............--SK..SFGAMVATFDyenK...G.V.P...K....Y.F.....S.TV..S...QH.....T..........H.......G....E...EI......SNY....LPL.............................. [...]
+B0W5P0_CULQU/552-851   .............................................................................................MIMCVVSN..NKADR..YTAIKKK.CC...VD..R..AIPTQVMVQ.R..T.ITPKGGnv............rtLMSVATKVVI.......QMNCK..........LGGV.-.....PWK.V....KIP.L-........-......-..-....-...-...-.....S.G..L.M..................................TVGFDVCHDTKDK...............--SK..SFGAMVATFDyenK...G.V.P...K....Y.F.....S.TV..S...QH.....T..........H.......G....E...EI......SNY....LPL.............................. [...]
+Q171B3_AEDAE/547-846   ............................................................................................l-VMCVVTN..NKADR..YTAIKKK.CC...VD..R..AIPTQVMVQ.K..T.ITPKGGnv............rtLMSVATKVVI.......QMNCK..........LGGV.-.....PWK.V....KIP.L-........-......-..-....-...-...-.....N.G..L.M..................................TIGFDVCHDGKDK...............--SK..SFGAMVATLDhdnK...G.T.P...K....F.F.....S.TV..S...QH.....T..........H.......G....E...EI......SNY....LPI.............................. [...]
+B0W5T4_CULQU/546-845   .............................................................................................LIMCVVTN..NKADR..YTAIKKK.CC...VD..R..AIPTQVMVQ.K..T.ITPKGGnv............rtLMSVATKVVI.......QMNCK..........LGGV.-.....PWK.V....KIP.L-........-......-..-....-...-...-.....N.G..L.M..................................TIGFDVCHDAKDK...............--SK..SFGAMVATLDhdnK...G.T.P...K....F.F.....S.TV..S...QH.....T..........H.......G....E...EI......SNY....LPI.............................. [...]
+Q5TW24_ANOGA/530-829   ............................................................................................l-VMCIVPN..DRADR..YKAIKKK.CC...VD..R..PLPCQVIKA.R..T.ITPKNQnl............raLLTIATKVMI.......QLNCK..........LGGI.-.....PWI.V....KNP.L-........-......-..-....-...-...-.....S.S..V.M..................................VVGFDVCHDASDK...............--SL..SYGALVATMYa.aK...HiE.P...K....Y.F.....S.VI..E...RH.....Q..........R.......G....E...EL......SSF....LSS.............................. [...]
+Q16JS1_AEDAE/576-874   .............................................................................................LIMCLVTN..DKADR..YSAIKKK.CC...VD..R..AVPTQVLKT.R..T.ITPKGGnv............rtLMSVATKVAI.......QMNCK..........LGGI.-.....PWV.I....KSP.L-........-......-..-....-...-...-.....A.S..V.M..................................VIGYDVCKDSKDR...............--SK..GYGALVASMYgggV...K.H.P...K....Y.Y.....S.TV..N...QH.....A..........Y.......G....E...EL......SNY....LAL.............................. [...]
+Q176R2_AEDAE/633-931   .............................................................................................MIMCVVTN..DKADR..YAAIKKK.CC...VD..R..AVATQVIKT.R..T.ITPKGGnv............rtLMSVATKVAI.......QVNCK..........LGGI.-.....PWI.L....KNP.L-........-......-..-....-...-...-.....S.S..I.M..................................VIGFDVCHDTRDK...............--SK..SYGALVASMYgagC...R.H.P...K....Y.F.....S.TV..N...HH.....S..........N.......G....E...EL......SNF....MAQ.............................. [...]
+B0XE75_CULQU/501-788   .............................................................................................MIFCVVSN..DKADR..YAAIKKK.TC...VE..R..AIPTQVIKA.R..T.ITPKGGnv............rtLMSVATKVAI.......QMNCK..........LGGI.-.....PWV.L....RNP.L-........-......-..-....-...-...-.....T.S..V.M..................................VIGFDVCHDTRDK...............----..-----SKSYG...Q...K.H.P...K....F.F.....S.TV..N...HH.....S..........S.......G....E...EL......SNF....MAQ.............................. [...]
+Q16JS2_AEDAE/571-869   ............................................................................................l-VMCLVSN..DKADR..YAAIKKK.SC...VD..R..AVATQVIKA.R..T.ITPKGGnv............rtLMSVATKVAI.......QLNCK..........LGGI.-.....PWV.L....KNP.L-........-......-..-....-...-...-.....T.S..V.M..................................VIGFDVCHDTRDK...............--SK..SFGAMVASMYgggC...K.H.P...K....F.F.....S.TV..N...PH.....T..........S.......G....E...EL......SNF....MAQ.............................. [...]
+B0XE74_CULQU/592-891   .............................................................................................LIMCIVTN..DKVDR..YAAIKKK.CC...VD..R..AVPTQVIKC.K..T.ITPKGGnp............rtLMSVATKVAI.......QLNCK..........LGGI.-.....PWI.V....KSP.L-........-......-..-....-...-...-.....L.S..V.M..................................CLGFDVCRDTKDR...............--NK..TYGALVAAMY...H...G.K.H...RyhpnF.Y.....S.TV..N...QH.....A..........N.......G....A...EL......SDS....LAL.............................. [...]
+B0WYL9_CULQU/560-857   .............................................................................................LIMCVVTD..DKADR..YAAIKKK.CC...VN..R..AIPTQVIKS.R..T.ITPRHGn..............mMLSVATKVAI.......QLNSK..........LGGI.-.....PWV.V....KVL.M-........-......-..-....-...-...-.....E.S..V.M..................................CVGFDVCRDTKDK...............--NI..CYGALVAAMN...H...G.K.H...R....Q.H.....S.EF..Y...ST.....V..........N.......Q....H...SY......GAD....LSDsl............................ [...]
+B4P152_DROYA/546-844   ...........................................................................................qi-VMVVMRS..QNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.R..V.IAPRQEks............agLMSIATKVVI.......QMNAK..........LMGA.-.....PWM.I....DLP.L-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSSKDK...............--NK..SYGALVATMD..qR...E.S.S...R....Y.F.....S.TV..T...EH.....M..........K.......G....Q...EL......SEH....MSL.............................. [...]
+B3N4Z9_DROER/546-844   ...........................................................................................qi-VMVVMRS..PNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.K..V.IAPRQEka............tgLMSIATKVVI.......QMNAK..........LMGA.-.....PWM.I....SLP.L-........-......-..-....-...-...-.....H.G..L.M..................................TVGFDVCHSSKDK...............--NK..SYGALVATMD..qK...E.S.N...R....Y.F.....S.SV..N...EH.....M..........K.......G....Q...EL......SEH....MSL.............................. [...]
+B3MJZ7_DROAN/562-859   ............................................................................................i-VMLVLKA..PNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.K..T.IAPRQEks............agLMSIATKVVI.......QMNAK..........LMGA.-.....PWM.I....ELP.V-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSSKNK...............--NK..SYGALVATMD..mK...T.S.T...R....Y.F.....S.SV..T...EH.....M..........K.......G....Q...EL......SDQ....MSM.............................. [...]
+B4G765_DROPE/541-838   ............................................................................................i-IMLVLKA..PNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.K..T.IAPRKEks............agLMSIATKVVI.......QMNAK..........LMGA.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSSKNK...............--NK..SYGALVATMD..mK...S.S.N...R....Y.F.....S.SV..N...EH.....M..........K.......G....Q...EL......SDQ....MSM.............................. [...]
+Q29P29_DROPS/540-837   ............................................................................................i-IMLVLKA..PNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.K..T.IAPRKEks............agLMSIATKVVI.......QMNAK..........LMGA.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSSKNK...............--NK..SYGALVATMD..mK...L.S.N...R....Y.F.....S.SV..N...EH.....M..........K.......G....Q...EL......SEQ....MSM.............................. [...]
+B4LV39_DROVI/546-843   ............................................................................................i-IMLVMKS..PNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.R..T.IAPRPEks............ggLMSIATKVVI.......QMNAK..........LMGA.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....K.G..L.M..................................TVGFDVCHSSKNK...............--NK..SYGALVASLD..mK...Y.S.E...R....Y.Y.....S.SV..T...EH.....M..........K.......G....Q...EL......SDQ....MSL.............................. [...]
+B4KHC1_DROMO/539-836   ............................................................................................i-IMLVLKT..NNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.R..T.IAPRPEra............sgLMSVATKVVI.......QMNAK..........LMGA.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSSKNK...............--NK..SYGALVATMD..mK...S.S.T...R....Y.F.....S.SV..S...EH.....M..........K.......G....Q...EL......SDQ....MSL.............................. [...]
+B4JBE4_DROGR/542-839   ............................................................................................i-IMLVLRS..PNEEK..YSCIKKR.AC...VD..R..PVPSQVVTL.R..T.IAPRPDra............sgLMSIATKVVI.......QMNAK..........IMGA.-.....PWI.I....ELP.L-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSSKDK...............--NK..SYGALVATMD..mK...L.S.T...R....Y.Y.....S.SV..T...EH.....L..........K.......G....Q...EL......SNQ....MSV.............................. [...]
+B4MUA1_DROWI/563-860   ............................................................................................i-VMLVLKT..PNEEK..YSCIKKR.AC...VD..R..PVPSQVVTL.K..T.IAPRQEra............ggLMSIATKVVI.......QMNAK..........LMGA.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSPKSK...............--NK..SYGALVATMD..mK...E.S.Q...R....Y.Y.....S.SV..T...EH.....M..........K.......G....Q...EL......SNQ....MSM.............................. [...]
+B4MUA0_DROWI/539-836   ............................................................................................i-VMLVLKT..PNEEK..YSCIKKR.AC...VD..R..PVPSQVVTL.K..T.IAPRQEra............ggLMSIATKVVI.......QMNAK..........LMGA.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSPKSK...............--NK..SYGALVATMD..mK...E.S.Q...R....Y.Y.....S.SV..T...EH.....M..........K.......G....Q...EL......SNQ....MSM.............................. [...]
+B4N6U3_DROWI/34-103    ...........................................................................................nh--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+Q95PE5_DROME/1-176     .............................................................................................--------..-----..YSCIKKR.TC...VD..R..PVPSQVVTL.K..V.IAPRQQkp............tgLMSIATKVVI.......QMNAK..........LMGA.-.....PWQ.V....VIP.L-........-......-..-....-...-...-.....H.G..L.M..................................TVGFDVCHSPKNK...............--NK..SYGAFVATMD..qK...E.S.F...R....Y.F.....S.TV..N...EH.....I..........K.......G....Q...EL......SEQ....MSV.............................. [...]
+A8DYZ0_DROME/483-781   ...........................................................................................qi-VMVVMRS..PNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.K..V.IAPRQQkp............tgLMSIATKVVI.......QMNAK..........LMGA.-.....PWQ.V....VIP.L-........-......-..-....-...-...-.....H.G..L.M..................................TVGFDVCHSPKNK...............--NK..SYGAFVATMD..qK...E.S.F...R....Y.F.....S.TV..N...EH.....I..........K.......G....Q...EL......SEQ....MSV.............................. [...]
+O76922_DROME/554-852   ...........................................................................................qi-VMVVMRS..PNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.K..V.IAPRQQkp............tgLMSIATKVVI.......QMNAK..........LMGA.-.....PWQ.V....VIP.L-........-......-..-....-...-...-.....H.G..L.M..................................TVGFDVCHSPKNK...............--NK..SYGAFVATMD..qK...E.S.F...R....Y.F.....S.TV..N...EH.....I..........K.......G....Q...EL......SEQ....MSV.............................. [...]
+B4Q9X4_DROSI/545-843   ...........................................................................................qi-VMVVIRT..PNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.K..V.IAPRQQkp............agLSSIATKVVI.......QMNAK..........LMGA.-.....PWK.I....EIP.L-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSPKNK...............--NK..SYGALVATMD..qK...E.S.F...R....Y.F.....S.TV..N...EH.....S..........K.......G....Q...EL......SEQ....MSL.............................. [...]
+B4HWZ3_DROSE/549-847   ...........................................................................................qi-VMVVIRT..PNEEK..YSCIKKR.TC...VD..R..PVPSQVVTL.K..V.IAPRQQks............agLSSVATKVVI.......QMNAK..........LMGA.-.....PWK.I....EIP.L-........-......-..-....-...-...-.....R.G..L.M..................................TVGFDVCHSPKNK...............--NK..SYGALVATMD..qK...E.S.F...R....Y.F.....S.TV..N...EH.....T..........K.......G....Q...EL......SEQ....MSL.............................. [...]
+B4JBE1_DROGR/574-864   ............................................................................................l-VLCIVPS..NNVER..YSSIKKR.GC...VD..R..SVPTQVVTT.R..A.NQK---................GMSVATKIAI.......QINCK..........LGYT.-.....PWM.I....AVP.M-........-......-..-....-...-...-.....A.G..L.M..................................TMGFDIAKCTRDR...............--NK..AYGALVASMD..lQ...R.N.A...T....F.F.....S.TV..-...AE.....C..........S.......A....Y...DV......LAN...nLWP.............................. [...]
+B4KHB7_DROMO/577-867   .............................................................................................LILCFVPS..DSPER..YSAIKKR.GC...VD..R..AVPTQVVTK.R..C.-NKN--................GLSVATKIAI.......QMNCK..........IGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TMGFDIAKCSSNR...............--NK..AYGALVASMD..lQ...R.N.A...T....F.F.....S.TV..-...AE.....C..........S.......A....Y...DV......LAN...nLWP.............................. [...]
+B4LV36_DROVI/558-849   ............................................................................................l-ILCFFAR..NNPER..YAAIKKR.GY...VD..R..AIPTQVVTT.N..A.NRNG--................-LSVATKIAI.......QINCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKCSRNR...............--SK..AYGALVASMD..lQ...Q.N.S...T....F.F.....S.TV..-...AE.....C..........S.......A....Y...DV......LAN...nLWP.............................. [...]
+B4MU97_DROWI/591-882   ............................................................................................l-ILCLVPN..NNVER..YSSIKKI.GC...ID..K..GIPTQVVTS.K..T.VSNRSL................-MSIATKIAV.......QLNCK..........MGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TLGFDIAKSSRDR...............--SK..AFGALVASMD..lQ...E.N.S...T....Y.F.....S.TV..-...AE.....C..........S.......A....Y...DV......LAN...hLWP.............................. [...]
+Q29CN1_DROPS/543-834   ............................................................................................l-ILCLVPN..NNVER..YSSIKKR.GC...VD..R..AVPTQVVTI.K..T.SKNRGL................-LSIATKIAI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSARDR...............--RK..AYGALVASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...SE.....C..........S.......A....F...DV......LAN...nLWP.............................. [...]
+B3N502_DROER/538-829   ............................................................................................l-ILCLVPN..DNVER..YSSIKKR.GY...VD..R..AVPTQVVTI.K..T.TKNRSL................-MSIATKIAI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSTRDR...............--KR..AYGALIASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...TE.....C..........S.......A....F...DV......LAN...tLWP.............................. [...]
+B4P149_DROYA/538-829   ............................................................................................l-ILCLVPN..DNAER..YSSIKKR.GY...VD..R..AVPTQVVTI.K..T.TKNRSL................-MSIATKIGI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSTRDR...............--KR..AYGALIASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...TE.....C..........S.......A....F...DV......LAN...tLWP.............................. [...]
+Q6NNZ4_DROME/552-843   ............................................................................................l-ILCLVPN..DNAER..YSSIKKR.GY...VD..R..AVPTQVVTL.K..T.TKNRSL................-MSIATKIAI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSTRDR...............--KR..AYGALIASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...TE.....C..........S.......A....F...DV......LAN...tLWP.............................. [...]
+C0PTU6_DROME/566-857   ............................................................................................l-ILCLVPN..DNAER..YSSIKKR.GY...VD..R..AVPTQVVTL.K..T.TKNRSL................-MSIATKIAI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSTRDR...............--KR..AYGALIASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...TE.....C..........S.......A....F...DV......LAN...tLWP.............................. [...]
+PIWI_DROME/538-829     ............................................................................................l-ILCLVPN..DNAER..YSSIKKR.GY...VD..R..AVPTQVVTL.K..T.TKNRSL................-MSIATKIAI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSTRDR...............--KR..AYGALIASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...TE.....C..........S.......A....F...DV......LAN...tLWP.............................. [...]
+Q6NP34_DROME/566-857   ............................................................................................l-ILCLVPN..DNAER..YSSIKKR.GY...VD..R..AVPTQVVTL.K..T.TKNRSL................-MSIATKIAI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSTRDR...............--KR..AYGALIASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...TE.....C..........S.......A....F...DV......LAN...tLWP.............................. [...]
+B4Q9X1_DROSI/538-829   ............................................................................................l-ILCLVPN..DNVER..YSSIKKR.GY...VD..R..AVPTQVVTM.K..T.AKNRSL................-MSIATKIAI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSTRDR...............--KR..AYGALIASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...TE.....C..........S.......A....F...DV......LAN...tLWP.............................. [...]
+B4HWY9_DROSE/538-829   ............................................................................................l-ILCLVPN..DNAER..YSSIKKR.GY...VD..R..AVPTQVVTM.K..T.AKNRSL................-MSIATKIAI.......QLNCK..........LGYT.-.....PWM.I....ELP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSTRDR...............--KR..AYGALIASMD..lQ...Q.N.S...T....Y.F.....S.TV..-...TE.....C..........S.......A....F...DV......LAN...tLWP.............................. [...]
+B3MJZ4_DROAN/563-854   ............................................................................................l-ILCLVPN..NNADR..YSAIKKR.GY...VD..R..AVPTQVVTI.K..T.AKNRGL................-MSIATKIAI.......QINCK..........LGYT.-.....PWM.V....EVP.L-........-......-..-....-...-...-.....S.G..L.M..................................TIGFDIAKSTRDR...............--KK..AYGALVASMD..lQ...Q.N.S...T....Y.F.....S.TV..S...EC.....S..........A.......F....D...SL......SNN....LWP.............................. [...]
+B9ZU53_9TURB/586-879   ...........................................................................................la--IVVLPD..NRADR..YNAIKRQ.CY...VE..T..PVPSQCVLN.R..T.LNNEKG................FMSVVSKLAL.......QINVK..........MGGE.-.....PWM.C....KLP.V-........-......-..-....-...-...D.....P.G..A.M..................................IIGMDVHHVGKGG...............-KGP..SQLGFVSSLN...V...E.L.T...R....F.Y.....S.RV..-...YN.....N..........E.......S....N...EI......SGT....IKV.............................. [...]
+B2Z3D6_SCHMD/665-960   ............................................................................................l-VVTILSA..VREDR..YNAIKKF.CY...VD..C..PVPSQVVLA.Q..T.LKEGPK................LNSVAVNIAL.......QINAK..........LGGE.-.....LWA.V....KIP.I-........-......-..-....-...-...-.....K.K..F.M..................................VVGLDVWHDTKGR...............--SR..SVGAVVGSTN...A...L.C.T...R....W.F.....S.KS..H...LQ.....E..........Q.......D....K...EI......MYV....LQS.............................. [...]
+D2Z0E0_DUGJA/657-952   ............................................................................................l-VVTILSA..VREDR..YNAIKKH.CY...VD..C..PVPSQVVLA.Q..T.LKEGPK................LNSVAVNIAL.......QINAK..........LGGE.-.....LWA.V....KIP.I-........-......-..-....-...-...-.....K.K..F.M..................................VVGLDVWHDAKGR...............--GR..SVGAVVGSTN...A...L.C.T...R....W.F.....S.KS..H...LQ.....E..........H.......D....K...EI......VYV....LQS.............................. [...]
+D2A2S9_TRICA/552-839   ...........................................................................................va--VFICPT..LRADR..YSIIKKM.CC...VN..I..PVASQVILS.K..T.LSNPQK................VRTIIHKIAM.......QITCK..........LGGT.-.....LWS.V....KIP.V-........-......-..-....-...-...-.....S.G..W.M..................................VCGIDVYHGANNQ...............----..SVCGFVASIN...G...S.M.T...K....Y.F.....S.KA..M...FQ.....D..........-.......-....G...EI......GDY....FKM.............................. [...]
+B4N2M0_DROWI/49-131    ........................................................................................fhlsg--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B4JP35_DROGR/334-622   ...........................................................................................qi-VVCICSS..RRDDR..YSAIKKI.CC...AE..R..PVASQVINS.R..T.LSNETR................NRSIVQKIIL.......QMNCK..........MGGS.-.....LWT.V....KIP.F-........-......-..-....-...-...-.....K.N..V.M..................................ICGIDSYHDPSQK...............--SH..SVAAFVASLN...S...T.Y.T...H....W.F.....S.KA..V...IQ.....T..........K.......K....E...EL......VNG....LTS.............................. [...]
+B7FNN2_DROME/566-845   ............................................................................................m-VVCICHN..RRDDR..YAAIKKI.CC...SE..I..PIPSQVINA.K..T.LQNDLK................IRSVVQKIVL.......QMNCK..........LGGS.-.....LWT.V....KIP.F-........-......-..-....-...-...-.....K.N..V.M..................................ICGIDSYHDPSNR...............--GN..SVAAFVASIN...S...S.Y.S...Q....W.Y.....S.KA..V...VQ.....T..........K.......R....E...EI......VNG....LSA.............................. [...]
+B6IDV1_DROME/574-861   ............................................................................................m-VVCICHN..RRDDR..YAAIKKI.CC...SE..I..PIPSQVINA.K..T.LQNDLK................IRSVVQKIVL.......QMNCK..........LGGS.-.....LWT.V....KIP.F-........-......-..-....-...-...-.....K.N..V.M..................................ICGIDSYHDPSNR...............--GN..SVAAFVASIN...S...S.Y.S...Q....W.Y.....S.KA..V...VQ.....T..........K.......R....E...EI......VNG....LSA.............................. [...]
+Q7PLK0_DROME/566-853   ............................................................................................m-VVCICHN..RRDDR..YAAIKKI.CC...SE..I..PIPSQVINA.K..T.LQNDLK................IRSVVQKIVL.......QMNCK..........LGGS.-.....LWT.V....KIP.F-........-......-..-....-...-...-.....K.N..V.M..................................ICGIDSYHDPSNR...............--GN..SVAAFVASIN...S...S.Y.S...Q....W.Y.....S.KA..V...VQ.....T..........K.......R....E...EI......VNG....LSA.............................. [...]
+A4GND8_DROME/566-853   ............................................................................................m-VVCICHN..RRDDR..YAAIKKI.CC...SE..I..PIPSQVINA.K..T.LQNDLK................IRSVVQKIVL.......QMNCK..........LGGS.-.....LWT.V....KIP.F-........-......-..-....-...-...-.....K.N..V.M..................................ICGIDSYHDPSNR...............--GN..SVAAFVASIN...S...S.Y.S...Q....W.Y.....S.KA..V...VQ.....T..........K.......R....E...EI......VNG....LSA.............................. [...]
+A7YFW6_DROME/299-494   ............................................................................................m-VVCICHN..RRDDR..YAAIKKI.CC...SE..I..PIPSQVINA.K..T.LQNDLK................IRSVVQKIVL.......QMNCK..........LGGS.-.....LWT.V....KIP.F-........-......-..-....-...-...-.....K.N..V.M..................................ICGIDSYHDPSNR...............--GN..SVAAFVASIN...S...S.Y.S...Q....W.Y.....S.KA..V...VQ.....T..........K.......R....E...EI......VNG....LSA.............................. [...]
+A4GUJ7_DROME/566-848   ............................................................................................m-VVCICHN..RRDDR..YAAIKKI.CC...SE..I..PIPSQVINA.K..T.LQNDLK................IRSVVQKIVL.......QMNCK..........LGGS.-.....LWT.V....KIP.F-........-......-..-....-...-...-.....K.N..V.M..................................ICGIDSYHDPSNR...............--GN..SVAAFVASIN...S...S.Y.S...Q....W.Y.....S.KA..V...VQ.....T..........K.......R....E...EI......VNG....LSA.............................. [...]
+Q7PWT1_ANOGA/618-916   ............................................................................................q-IVVIICP.tSRDDR..YAAIKRI.LC...TE..V..PIPSQVINA.R..T.LANEKR................NRSVVLKVLL.......QMNCK..........LGGS.-.....LWG.V....RVP.I-........-......-..-....-...-...-.....K.R..T.M..................................ICGIDTYHEAKQR...............--SN..SVAAFVGSLD...A...A.F.T...H....W.Y.....S.RA..T...VQ.....E..........R.......K....E...EI......LNG....LCV.............................. [...]
+Q170R5_AEDAE/637-930   ............................................................................................q-IVVIICP.tSRDDR..YAAIKRI.CC...SE..I..PVPSQVINA.R..T.LSNEAK................NRAIVQKIIL.......QMNCK..........LGGT.-.....LWS.I....RIP.F-........-......-..-....-...-...-.....D.N..V.M..................................IAGIDTYHDPKQK...............--SN..SVSAFVASLN...G...D.Y.T...R....W.Y.....S.RA..C...IQ.....S..........K.......K....E...EF......ING....LCA.............................. [...]
+A9ZSZ2_BOMMO/619-912   ............................................................................................q-LVVAICS.tKRDDR..YAAIKKV.CC...AD..N..PVPSQVINA.R..T.LMNTNK................IRSITQKILL.......QLNCK..........LGGT.-.....LWS.I....SIP.F-........-......-..-....-...-...-.....K.S..A.M..................................IVGIDSYHDPSRR...............--NR..SVCSFVASYN...Q...S.M.T...L....W.Y.....S.KV..I...FQ.....E..........K.......G....Q...EI......VDG....LKC.............................. [...]
+A7BJS3_BOMMO/619-912   ............................................................................................q-LVVAICS.tKRDDR..YAAIKKV.CC...AD..N..PVPSQVINA.R..T.LMNTNK................IRSITQKILL.......QLNCK..........LGGT.-.....LWS.I....SIP.F-........-......-..-....-...-...-.....K.S..A.M..................................IVGIDSYHDPSRR...............--NR..SVCSFVASYN...Q...S.M.T...L....W.Y.....S.KV..I...FQ.....E..........K.......G....Q...EI......VDG....LKC.............................. [...]
+A7LNN5_BOMMO/2-193     ...........................................................................................ls--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..A.M..................................IVGIDSYHDPSRR...............--NR..SVCSFVASYN...Q...S.M.T...L....W.Y.....S.KV..I...FQ.....E..........K.......G....Q...EI......VDG....LKC.............................. [...]
+B7QEM1_IXOSC/88-370    ............................................................................................v-IVLIFPT..SRDDR..YSAVKRL.CC...VD..M..PVPSQVIIS.N..T.IGQQQK................LRSVTQKVAL.......QINCK..........LGGE.-.....LWK.V....EIP.M-........-......-..-....-...-...-.....H.N..V.M..................................VIGIDVYHDITRG...............--RQ..SVMGFVASMN...Q...S.L.T...R....W.F.....S.KC..A...FQ.....E..........P.......G....K...EL......VNC....IKI.............................. [...]
+A7SQI3_NEMVE/441-733   ...........................................................................................qv-VVVIFPT..SRDDR..YAAVKKL.CC...VE..S..PVPSQVIIS.K..T.ISNPTK................LRSVVQKIAL.......QINVK..........LGGE.-.....LWA.L....DIP.S-........-......-..-....-...-...-.....R.S..L.M..................................VCGIDVYHDKARG...............--GR..SVGGLVCSMN...R...S.L.T...R....W.Y.....S.DV..C...FQ.....S..........P.......G....Q...EL......IDG....LKM.............................. [...]
+C3Z5S8_BRAFL/570-730   .............................................................................................MVVCIFPT..PRDDR..YSAIKKL.CC...VD..S..PVPSQVINA.K..T.IGSQQK................LRSVTQKIAL.......QINAK..........LGGE.-.....LWA.L....EIP.L-........-......-..-....-...-...-.....K.N..I.M..................................VVGIDVYHEIKKG...............--VR..SVAGFVASTN...R...E.L.T...R....W.Y.....S.RT..C...FQ.....M..........P.......G....Q...EL......MDG....LKL.............................. [...]
+B0FLQ9_STRPU/653-945   ............................................................................................l-VIAIFPT..SRDDR..YSAFKKL.CC...IE..A..PVPSQVING.R..T.ISQKQK................LRSVTQKIAL.......QINCK..........LGGE.-.....LWA.L....DVP.L-........-......-..-....-...-...-.....S.K..L.M..................................VIGIDVYHDPNRG...............--KK..SIGAFVASMN...R...D.L.T...S....W.F.....S.RV..C...IQ.....T..........P.......H....Q...EL......IGG....LKL.............................. [...]
+PIWL2_XENTR/644-935    ............................................................................................l-LVCLISG..TRDDL..YGAIKKL.CC...VQ..N..PVPSQVINT.R..T.ISQPQK................LRSIAQKILL.......QINCK..........LGGE.-.....LWG.V....DIP.L-........-......-..-....-...-...-.....K.S..V.M..................................VIGMDVYHDPSRG...............--MR..SVLGFVASIN...S...C.L.T...A....W.Y.....S.RV..V...FQ.....L..........P.......N....Q...EI......MDS....LKL.............................. [...]
+D2H044_AILME/665-956   .............................................................................................MVVCIIMG..ARDDL..YGAIKKL.CC...VQ..A..PVPSQVINV.R..T.IGQPTR................LRSVAQKILL.......QINCK..........LGGE.-.....LWG.V....DIP.L-........-......-..-....-...-...-.....K.Q..L.M..................................VIGMDVYHDPSRG...............--MR..SVVGFVASIN...L...T.L.T...K....W.Y.....S.RV..V...FQ.....M..........P.......H....Q...EI......VDS....LKL.............................. [...]
+D3ZRE1_RAT/666-957     .............................................................................................MVVCIIMG..TRDDL..YGAIKKL.CC...VQ..S..PVPSQVINV.R..T.IGQPTR................LRSVAQKILL.......QMNCK..........LGGE.-.....LWG.V....DIP.L-........-......-..-....-...-...-.....K.Q..L.M..................................VIGMDVYHDPSRG...............--MR..SVVGFVASIN...L...T.L.T...K....W.Y.....S.RV..V...FQ.....M..........P.......H....Q...EI......VDS....LKL.............................. [...]
+PIWL2_MOUSE/666-957    .............................................................................................MVVCIIMG..TRDDL..YGAIKKL.CC...VQ..S..PVPSQVINV.R..T.IGQPTR................LRSVAQKILL.......QMNCK..........LGGE.-.....LWG.V....DIP.L-........-......-..-....-...-...-.....K.Q..L.M..................................VIGMDVYHDPSRG...............--MR..SVVGFVASIN...L...T.L.T...K....W.Y.....S.RV..V...FQ.....M..........P.......H....Q...EI......VDS....LKL.............................. [...]
+PIWL2_HUMAN/668-959    .............................................................................................MVVCIIMG..PRDDL..YGAIKKL.CC...VQ..S..PVPSQVVNV.R..T.IGQPTR................LRSVAQKILL.......QINCK..........LGGE.-.....LWG.V....DIP.L-........-......-..-....-...-...-.....K.Q..L.M..................................VIGMDVYHDPSRG...............--MR..SVVGFVASIN...L...T.L.T...K....W.Y.....S.RV..V...FQ.....M..........P.......H....Q...EI......VDS....LKL.............................. [...]
+PIWL2_ONCMY/749-1040   ............................................................................................l-VVCIMTG..NRDDL..YSAIKKL.CC...VQ..S..PVPSQAINV.R..T.ISQPQK................LRSVAQKILL.......QMNCK..........LGGE.-.....LWT.V....NVP.L-........-......-..-....-...-...-.....K.H..L.M..................................VIGVDVHHDTSKK...............--NR..SVMGFVASLN...S...L.L.T...R....W.Y.....S.RV..T...FQ.....M..........P.......N....E...EI......ING....FRV.............................. [...]
+PIWL2_DANRE/741-1032   ............................................................................................l-VVCIMTG..NRDDL..YSAIKKL.CC...IQ..S..PVPSQAINV.R..T.ISQPQK................LRSVAQKILL.......QINCK..........LGGE.-.....LWT.V....NVP.LK........Y......-..-....-...-...-.....-.-..L.M..................................VIGVDVHHDTSKK...............--SR..SVMGFVASLN...S...M.L.T...K....W.Y.....S.RV..T...FQ.....M..........P.......N....E...EI......ING....FRV.............................. [...]
+A5PL40_DANRE/7-278     .........................................................................................ssra--------..-----..-------.--...--..F..TLNSQAINV.R..T.ISQPQK................LRSVAQKILL.......QINCK..........LGGE.-.....LWT.V....NVP.LK........Y......-..-....-...-...-.....-.-..L.M..................................VIGVDVHHDTSKK...............--SR..SVMGFVASLN...S...M.L.T...K....W.Y.....S.RV..T...FQ.....M..........P.......N....E...EI......ING....FRV.............................. [...]
+B9U224_ORYLA/729-1020  ............................................................................................l-VVCVIEG..NRDDL..YSAIKKL.CC...LK..C..PVPSQVINV.R..T.ISQQQK................LRGIAQKILL.......QLNSK..........LGGE.-.....LWT.V....GIP.L-........-......-..-....-...-...-.....K.S..L.M..................................VVGVDVHHDTSKK...............--HQ..SVMGFVASVN...S...S.L.T...H....W.Y.....S.RV..T...FQ.....T..........P.......T....E...EL......ISG....FRA.............................. [...]
+Q4RPK4_TETNG/383-660   ................................................................................plvlnafkyicmf--------..-----..-------.--...--..-..--CPQAINV.R..T.ISNQAK................LKSIAQKILL.......QINCK..........LGGE.-.....LWT.V....SIP.M-........-......-..-....-...-...-.....K.N..F.M..................................VVGVDVYHDTKKK...............--YH..SVMGFVASVN...S...T.L.T...R....W.Y.....S.RV..I...FQ.....T..........P.......N....E...EL......IGG....FRI.............................. [...]
+C9E0T2_APIME/1-294     ............................................................................................m--VIVFPT..NRTDR..YSAVKRV.CC...VE..M..PVPSQVIMS.R..T.ISRGDK................LKSITEKIAL.......QINCK..........LGGA.-.....LWA.L....AIP.M-........-......-..-....-...-...-.....D.H..C.M..................................ICGIDVYHAGVGQ...............SMKG..SVAGFVASLD...K...L.L.T...S....W.H.....S.KI..C...LQ.....G..........K.......H....Q...EL......VDI....LQI.............................. [...]
+C9E0S8_APIME/604-898   ............................................................................................l-MVIVFPT..NRTDR..YSAVKRV.CC...VE..M..PAPSQVIMS.R..T.ISRGDK................LKSITEKIAL.......QINCK..........LGGA.-.....LWA.L....AIP.M-........-......-..-....-...-...-.....D.H..C.M..................................ICGIDVYHAGVGQ...............SMKG..SVAGFVASLD...K...L.L.T...S....W.H.....S.KI..C...LQ.....G..........K.......H....Q...EL......VDI....LQI.............................. [...]
+C9E0S9_APIME/551-753   ............................................................................................l-MVIVFPT..NRTDR..YSAVKRV.CC...VE..M..PVPSQVIMS.R..T.ISRGDK................LKSITEKIAL.......QINCK..........LGGA.-.....LWA.L....AIP.M-........-......-..-....-...-...-.....D.H..C.M..................................ICGIDVYHAGVGQ...............SMKG..SVAGFVASLD...K...L.L.T...S....W.H.....S.KI..C...LQ.....G..........K.......H....Q...EL......VDI....LQI.............................. [...]
+C3ZKW1_BRAFL/534-739   ..........................................................................................cqk--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...-Q.....G..........Q.......G....E...EV......IPS....IGK.............................. [...]
+B9ZU54_9TURB/593-893   ............................................................................................i-VVCLLPT..KVEQK..YNAIKRQ.CC...IS..T..PVASQVIIS.R..T.LSNDSK................RKRIVQNIGL.......QMVAK..........MGGE.-.....LWG.V....QLP.TV........Q......Q..V....-...-...-.....G.R..L.M..................................VVGIDVYHEAKKR...............--SE..SWLGVCCSLN...Q...H.A.T...R....Y.K.....S.SV..H...KQ.....T..........P.......G....V...EL......GGF....YNV.............................. [...]
+Q54HL3_DICDI/867-1166  ............................................................................................l-FIIILPE.nDHSFI..YKSIKNLsLL...RN..R..AVITQCIKS.S..K.IKDR--................LNLISKPIAS.......QIIAK..........MGKF.-.....PWS.I....D--.PT........I......-..-....F...S...Ni...pE.N..T.M..................................VIGIDVTHNPEIS...............---Y..SVAAFVASTN...N...C.H.T...Q....F.Y.....H.KI..N...IQ.....P..........F.......L....K...EI......LDSd..fIFT.............................. [...]
+Q7KWS3_DICDI/669-964   ............................................................................................f-FLIIIPQ..NNAEV..YKGIKMK.SL...IQ..F..RVLTQCIFS.R..T.FDKG--................-RPVSVKLKQ.......QVVAK..........LGLA.-.....PWG.L....GQD.IY........K......G..V....-...-...P.....K.K..T.M..................................VIGVDVGHNSDMK...............--GH..SVVGFVATID...D...K.F.Q...K....F.F.....S.RA..Y...AQ.....E.........rP.......G....K...EI......IHS....LED.............................. [...]
+Q54G64_DICDI/590-885   ............................................................................................f-FLMLIPQ..NQPEI..YKEIKRK.SL...VQ..F..KVLTQCIFP.R..T.FYKG--................-RSVTNKLKQ.......QVIAK..........LGYA.-.....PWG.L....NQQ.I-........F......N..G....V...I...P.....K.K..T.M..................................IIGIDVGHNSDMR...............--GH..SVVGFVATID...D...K.F.Q...K....Y.F.....S.RS..F...VQ.....K.........rP.......G....K...EI......IDS....LEE.............................. [...]
+D3B338_POLPA/992-1287  ............................................................................................f-FLCAIQQ..-KPDF..YNLIKKY.TL...IT..A..RVITQCILA.K..T.MDKDNI................-GSVVSKVIL.......QVIAK..........LGKD.-.....PWV.L....KNP.G-........Y......-..-....N...I...P.....E.H..T.M..................................VVGIDVGHNAATR...............--GK..SIVAITATLN...R...S.L.T...R....Y.F.....S.TA..I..iQQ.....T..........P.......G....K...DI......IDS....LQT.............................. [...]
+D3BMP8_POLPA/633-929   ............................................................................................f-FFCLIPF..GKADV..YAAIKKS.TL...TQ..F..KAITQCAYA.K..T.LGIT--................GMAVAKKILH.......QLIAK..........LGRS.P.....WSI.S....NPV.YK........M......-..-....-...-...P.....K.H..T.M..................................IVGIDVGHNSDQR...............--GK..SVVGFCASID..sE...Y.S.L...Y....H.T.....T.AI..V...QS.....T..........P.......G....K...EI......VES....LRP.............................. [...]
+Q1ZXG9_DICDI/1063-1281 ......................................................................................nqskiht--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................------------Q...............KDAR..SVAAFCATTN...N...A.F.T...N...cY.V.....S.AT..I...QK.....Q..........S.......S....K...EV......INS....LGA.............................. [...]
+Q86HF5_DICDI/896-1194  .............................................................................................FIVVVVNG..VKTDL..YNSIKRT.AI...LE..C..KVITQVLTV.K..T.ITNQKI................-SSIFSKITN.......QINAK..........IDIP.-.....PWT.L....KEN.SN........F......G..I....-...-...P.....N.Y..T.M..................................VVGIDVGHNTDKE...............--SR..SVAAFCASVN...H...S.F.T...N....F.F.....V.AC..S...IQ.....K..........Q......nT....K...EV......IHS....LGN.............................. [...]
+PIWI1_SCHMD/493-790    ...........................................................................................ma--LVFIPD..---DK..VYAKVKN.FT...MS..T..GLLTQCVTQ.R..N.GSNRDDr..............rRKTVADKSVM.......QMFSK..........LGYD.-.....PWG.I....NLK.M-........-......-..-....-...-...-.....A.P..T.M..................................IVGLDTFHSKTGK...............---R..SVQASVFSIS...A...K.F.S...Q....Y.I.....S.FV..N...SS.....K..........G.......K....N...EF......HEN....LGK.............................. [...]
+D2Z0D8_DUGJA/494-791   ...........................................................................................la--LVFIPD..---DK..IYAKVKN.FT...MS..T..GLLTQCVTQ.R..N.GSNRDDr..............rRKTVADKSVM.......QMFSK..........LGYD.-.....PWG.I....NLK.M-........-......-..-....-...-...-.....A.P..T.M..................................IVGLDTFHSKTGK...............---R..SVQASVFSIS...S...K.F.S...Q....Y.I.....S.FV..N...SS.....K..........G.......K....N...EF......HEN....LGK.............................. [...]
+PIWIL_DUGJA/502-800    ..........................................................................................ial---VFVPD..---DR..VYAKVKS.FT...IS..T..GLLTQCVTT.R..N.GTNRNDk..............rRQVVSSKTVM.......QIFSK..........FGYD.-.....PWT.I....DIK.M-........-......-..-....-...-...-.....R.P..T.M..................................IVGMDTFHNKGSK...............---K..SIHASVFSIN...S...T.F.S...Q....Y.M.....S.FA..N...SP.....K..........G.......K....Q...EF......HDT....LSG.............................. [...]
+PIWI2_SCHMD/516-815    ..........................................................................................mal---VFVPD..---DR..VYAKVKS.FT...MS..T..GLLTQCVTT.R..N.GTNRNDk..............rRKVVSSKTVM.......QIFAK..........FGYD.-.....PWT.V....EIK.L-........-......-..-....-...-...-.....R.P..T.M..................................IVGMDTYHNKSSK...............---K..SIQASVFSIN...S...T.F.T...Q....Y.M.....S.FV..V...NS.....P..........K.......G....R...QE......FHE...tLGK.............................. [...]
+D2Z0D9_DUGJA/512-810   ..........................................................................................mal---VFVPD..---DR..VYAKVKS.FT...MS..T..GLLTQCVTT.R..N.GTNRNDk..............rRKVVSNKTVM.......QIFAK..........FGYD.-.....PWT.V....EIK.L-........-......-..-....-...-...-.....R.P..T.M..................................IVGMDTYHNKSSK...............---K..SIQASVFSIN...S...T.F.T...Q....Y.M.....S.FV..N...QP.....K..........G.......R....Q...EF......HET....LGK.............................. [...]
+B0WE96_CULQU/634-782   ............................................................................................q-IVVIICP.tSRDDR..YAAIKRI.CC...SE..I..PVPSQVINA.R..T.LANEAK................NRAIVQKILL.......QMNCK..........LGGT.-.....LWS.I....KIP.F-........-......-..-....-...-...-.....Q.N..V.M..................................IAGIDTYHDPKQK...............--SN..SVSAFVASLN...G...E.Y.T...R....W.Y.....S.RA..C...IQ.....S..........K.......K....E...EF......MNG....LCA.............................. [...]
+A8NGN0_BRUMA/1-135     ...........................................................................................mq--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+A4ZYY5_TETTH/495-793   ......................................................................................qfivtfs------NA.eKNPSL..YREMKKF.FS...SEggV..GIESQHVTP.R..A.LQKN--................GKSVASKIAL.......QIASK..........LGKR.-.....IWS.V....ETP.VG........I......-..-....-...-...N.....Q.N..T.M..................................IVGIETSMKKIRN...............---Q..QVIGVVASIN...K...D.F.N...K....F.Y.....S.QV..D...FR.....N..........G.......-....N...DI......KLP...tLSK.............................. [...]
+A4VE06_TETTH/14-183    ................................................................................lslrllpkpyrli--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+Q6UE79_TETTH/497-791   ..........................................................................................qfv---LSFGQ..AQSGL..YSGLKKF.LT...SE..A..GIESQHVNP.R..S.LQKN--................GMSVASKIAL.......QIASK..........LGRR.-.....IWQ.V....ETP.TG........I......-..-....-...-...D.....K.N..T.M..................................IIGIETSMKKIKQ...............---Q..QVVGVVASID...K...D.F.T...K....Y.F.....S.DV..E...IR.....K..........D.......N....D...TT......LPT....LSK.............................. [...]
+Q0GM58_TETTH/497-791   ..........................................................................................qfv---LSFGQ..AQSGL..YSGLKKF.LT...SE..A..GIESQHVNP.R..S.LQKN--................GMSVASKIAL.......QIASK..........LGRR.-.....IWQ.V....ETP.TG........I......-..-....-...-...D.....K.N..T.M..................................IIGIETSMKKIKQ...............---Q..QVVGVVASID...K...D.F.T...K....Y.F.....S.DV..E...IR.....K..........D.......N....D...TT......LPT....LSK.............................. [...]
+A4VE05_TETTH/347-645   ...........................................vndesaqnkdktsvnfkkgnqvtqllniilksimrdekfqeigknskfyd--------..-----..-------.--...--..-..---------.-..-.------................-----VNSKS.......DIIIK..........SRRI.-.....-WQ.V....ETP.TG........I......-..-....-...-...D.....K.N..T.M..................................IIGIETSMKKINK...............---Q..QVIGVVASID...K...D.F.T...K....Y.F.....S.DV..E...IR.....K..........E.......N....D...TT......FPT....LSK.............................. [...]
+Q22NE2_TETTH/491-777   ............................................................................................s-FIVTFGD..LNTNF..YQQIKHF.FC...IL..A..NVESQHISP.Q..S.LKNKNK................-YKICLNIVL.......QILQK..........TGNQ.-.....IWN.V....EMP.MQ........I......T..-....S...Q...T.....I.N..T.M..................................IVGIETSRNIIKG...............---K..QIIAVVCSIN...R...N.F.S...R....Y.L.....S.QV..Y...FR.....E..........K.......G....C...KQ......LHQ....LQK.............................. [...]
+A8VSR3_TETTH/491-787   ............................................................................................s-FIVTFGD..LNTNF..YQQIKHF.FC...IL..A..NVESQHISP.Q..S.LKNKNK................-YKICLNIVL.......QILQK..........TGNQ.-.....IWN.V....EMP.MQ........I......T..-....S...Q...T.....I.N..T.M..................................IVGIETSRNIIKG...............---K..QIIAVVCSIN...R...N.F.S...R....Y.L.....S.QV..Y...FR.....E..........K.......G....C...KQ......LHQ....LQK.............................. [...]
+A4ZYY4_TETTH/474-761   ......................................................................................nfnhprq--------..--QTF..YQELKLY.LY...AT..V..AIEHQHFND.D..F.SCHKNK................-NAAISSLII.......QIASK..........LGYP.-.....LWQ.T....HIP.NQ........I......-..-....-...-...F.....N.K..T.M..................................IIAIAVEQKTLHL...............NKQQ..QMIAVVTTIS...K...D.F.T...Q....M.H.....S.EI..F...FN.....E..........I.......Q....N...GP......ISI....LSK.............................. [...]
+Q24HU6_TETTH/383-631   ......................................................................................nfnhprq--------..--QTF..YQELKLY.LY...AT..V..AIEHQHFND.D..F.SCHKNK................-NAAISSLII.......QIASK..........LGYP.-.....LWQ.T....HIP.NQ........I......-..-....-...-...F.....N.K..T.M..................................IIAIAVEQKTLHL...............NKQQ..QMIAVVTTIS...K...D.F.T...Q....M.H.....S.EI..F...FN.....E..........I.......Q....N...GP......ISI....LSK.............................. [...]
+A8Q5F0_BRUMA/545-849   .............................................................................itkdrydpvhaisnrg--------..-----..-------.--...--..-..---------.-..-.------................AEMTLDNLVM.......KMNLK..........LGGI.Nh...aLTS.S....AAFlSK........N......R..L....T...N...N.....V.M..D.Mewlr..........................hsrmFFGLDMSHAAPQSlyer......qaqvpPSEP..TIVAMTFSC-...G...E.P.F...A....M.Q.....G.EY..W...MQ.....E..........P.......R....L...HV......VKF....LKE.............................. [...]
+Q21691_CAEEL/673-1001  .............................................................................................TIVFGIIA..EKRPD..MHDILKY.FE...EK..L..GQQTIQISS.E..T.ADKFMRd.............hgGKQTIDNVIR.......KLNPK..........CGGT.Nf...lIDV.P....ESV.GH........R......V..V....C...N...N.....S.A..E.Mrakl.........................yaktqFIGFEMSHTGARTrfdi......qkvmfDGDP..TVVGVAYSL-...K...H.S.A...Q....L.G.....G.FS..Y...FQ.....E..........S.......R....L...HK......LTN....LQE.............................. [...]
+A8WNJ6_CAEBR/660-987   ............................................................................................s-LVIGIAL..EKMPH..IHDVLKY.YE...EK..I..GQQTLQLCA.E..T.VRKMGQg.............ggNKTTVDNVIR.......KLNAK..........CGGT.Nf...yVEV.P....NAV.KN........R......Q..V....C...I...N.....P.E..E.Mrkkl.........................ykytqFIGFELSHTGARSkfdk......qkqtvEIDP..TIVGVSYTL-...K...H.A.T...Q....L.G.....G.FS..Y...FQ.....D..........S.......R....V...HK......LTR....VKE.............................. [...]
+A8WS47_CAEBR/435-755   ......................................................................................trverss--------..-----..-NHILKY.YE...EK..I..GQQTLQLCA.E..T.VMKMARc.............ggNKTTVDNVLR.......KLNLK..........CGGT.Nf...yVGV.P....DAV.NN........R......Q..V....C...I...N.....P.E..E.Mrkkl.........................ykntqFIGFELSHTGAQSkfdk......lkedaEIDP..TIVGVAYSL-...K...H.A.T...Q....L.G.....G.FS..Y...FQ.....D..........G.......R....V...HK......LTH....VQE.............................. [...]
+A8WQA0_CAEBR/671-998   ............................................................................................d-IFVGIAR..DKKPD..VHDIMKY.YE...ES..V..GMQTIQLCK.Q..T.VDKMMNp.............qgGRQTIDNVMR.......KFNLK..........CGGT.Nf...yVDI.P....SNI.RG........R......S..I....C...S...N.....T.E..T.Lhkkl.........................lekvqFIGFEISHGAARTlydr......srnqmDGEP..SIVGVSYSL-...K...Q.S.T...Q....L.G.....G.FS..Y...MQ.....T..........Q.......R....E...YK......IQK....LDD.............................. [...]
+Q9TXN7_CAEEL/609-935   ............................................................................................n-ILVAIAK..EKKPD..VHDVLKY.YE...AS..V..GLQTIQVCK.Q..T.VDMMLSs..............gGRQTADNVMR.......KFNLK..........CGGT.Nf...fVQI.P....RSV.NG........R......T..V....C...A...D.....A.H..L.Lnekl.........................fervqFIGFDISHGASRTlfdr......stgkmDGEV..SIVGVSYSL-...S...H.S.T...H....-.L.....G.GF..A...YM.....Q..........T.......Q....K...EY......KLQ...kLDE.............................. [...]
+C8JQR1_CAEEL/591-918   ............................................................................................d-ILFAITR..EKKPD..VHDILKY.YE...ES..I..GLQTIQVCQ.Q..T.VDKMMGg.............ggGRQTIDNVMR.......KFNLK..........CGGT.Nf...fDEI.P....SSV.RG........R......A..V....C...S...N.....S.E..T.Lskkl.........................fehvqFIGFEISHGAARTlfdr......srsqlDGEP..SVVGVSYSLT...-...-.N.S...T....Q.L.....G.GF..T...YL.....Q..........T.......Q....K...EY......KLQ...kLGE.............................. [...]
+YQ53_CAEEL/650-977     ............................................................................................d-ILVGIAR..EKKPD..VHDILKY.FE...ES..I..GLQTIQLCQ.Q..T.VDKMMGg.............qgGRQTIDNVMR.......KFNLK..........CGGT.Nf...fVEI.P....NAV.RG........K......A..V....C...S...N.....N.E..T.Lrkkl.........................lehvqFIGFEISHGASRTlfdr......srsqmDGEP..SVVGVSYSLT...-...-.N.S...T....Q.L.....G.GF..T...YL.....Q..........T.......Q....K...EY......KLQ...kLDE.............................. [...]
+Q9N3L7_CAEEL/585-911   ............................................................................................s-IIIGITE..EKKPE..VHDVLKY.FE...AA..V..GLQTMQIHS.K..T.AGFIIS...............gNGQTAGNVIK.......KLNLK..........CGGI.Ny...iVEV.P....QSF.NR........T......V..V....C...S...N.....N.S..F.Vqkkl.........................fdgtqFIGFEMTHGAARTlfdk......sngtfDGEP..TIVGCAYSL-...Q...K.A.T...D....L.G.....G.FN..W...FQ.....E..........Q.......N....E...YR......LKN....LGT.............................. [...]
+A8XZY0_CAEBR/665-992   ............................................................................................s-IVIGITS..EKKPD..VHDVMKY.FE...AG..I..GLQTLQIHD.R..T.AECFMRe.............qgGAQTVDNVMR.......KLNLK..........LGGI.Nf...nVDP.V....NMY.EH........K......V..I....C...N...N.....I.G..G.Mkkkl.........................fekvqFVGFEMTHGSSRTlydk......aqgqfDGEP..TIVGCGYSL-...S...S.P.T...E....L.G.....G.YN..F...LQ.....E..........R.......N....E...YK......LKN....LDS.............................. [...]
+Q27GU1_CAEEL/511-833   ............................................................................................p-FVLFISD..-DVPN..IHECLKF.EE...RM..S..DIPTQHVLL.K..N.VKKMRDniekks....qggrraYDLTLDNIVM.......KANIK..........CGGL.N.....YT-.A....DIP.RD........L......A..C....W...N...E.....V.S..T.F..................................VIGMDVAHPDRNAa.............rEGNP..STVGLSCNSA...E...N.P.Y...S....F.I.....G.DF..L...YT.....D..........P.......R....R...EA......IQDe..iLRK.............................. [...]
+Q19645_CAEEL/674-996   ............................................................................................p-FVLFISD..-DVPN..IHECLKF.EE...RM..S..DIPTQHVLL.K..N.VKKMRDniekks....qggrraYDLTLDNIVM.......KANIK..........CGGL.N.....YT-.A....DIP.RD........L......A..C....W...N...E.....V.S..T.F..................................VIGMDVAHPDRNAa.............rEGNP..STVGLSCNSA...E...N.P.Y...S....F.I.....G.DF..L...YT.....D..........P.......R....R...EA......IQDe..iLRK.............................. [...]
+A8XRG0_CAEBR/648-970   ............................................................................................p-FVLFVSD..-DVPN..IHECLKF.EE...RM..S..DIPTQHILL.K..N.IRKIRDniekks....qggrraYDLTLDNIVM.......KANVK..........CGGL.N.....YT-.A....DIP.RD........I......G..S....W...R...E.....V.S..T.F..................................VMGMDVAHPDKMAt.............rEGSP..STVGLSCNSA...E...S.P.Y...S....F.V.....G.DF..L...YT.....D..........P.......R....R...EA......IQDe..iLRK.............................. [...]
+A8QE08_BRUMA/711-1030  ..........................................................................................afv-----MYI..DSRDD..THDDLKL.YE...AL..H..RIVTQHIHG.S..R.AREAPK................KVATLENIVN.......KLNCK..........NFGQ.C....yGII.P....ESF.AT........N......K..W....I...S...T.....G.K..T.L..................................IIGYDVCHPEPQPrher......rmrmpPTQP..SVLGISFNGA...S...C.P.E...T....F.I.....G.DY..S...FQ.....E..........P.......R....K...EQ......VTSs..iLEE.............................. [...]
+Q8MU01_HETGL/745-963   .....................................................................................rvgsslpp--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............---P..SCIGWAATIG..kR...H.K.D...E....Y.I.....G.DF..V...YQ.....A..........P.......R....R...EE......KID...iIAS.............................. [...]
+A8XFJ6_CAEBR/595-895   ...........................................................................................ky--VFIITD..DNITH..LHRE--F.NQ...TR..L..AVYNIFREM.S..K.ATSVCKd..............gKRLTLENVIN.......KTNIK..........LGGL.N.....YTV.S....DTK.RS........M......-..-....-...-...T.....D.D..Q.L..................................IIGVGISAPPPGTkfll.......egkgHLNP..QIVGFASNA-...V...S.N.H...E....F.V.....G.DF..V...LA.....S..........V.......G....Q...DT......MSS....IED.............................. [...]
+Q23415_CAEEL/40-350    ............................................................................................k-FAFVITD..DSITH..LHKKYKA.LE...QK..S..MMVIQDMKI.S..K.ANSVVKd..............gKRLTLENVIN.......KTNMK..........LGGL.N.....YTV.S....DAK.KS........M......-..-....-...-...T.....D.E..Q.L..................................IIGVGVSAPPAGTkymm.......dnkgHLNP..QIIGFASNA-...V...A.N.H...E....F.V.....G.DF..V...LA.....P..........S.......G....Q...DT......MAS....IED.............................. [...]
+GCC7_CAEEL/596-906     ...........................................................................................ky--VLMITD..DAIVH..LHKQYKA.LE...QR..T..MMIVQDMKI.S..K.ANAVVKd..............gKRLTLENIIN.......KTNVK..........LGGL.N.....YTV.S....DAK.KS........M......-..-....-...-...T.....D.E..Q.L..................................IIGVGVSAPPAGTkymm.......dnkgHLNP..QIIGFASNA-...V...A.N.H...E....F.V.....G.DF..V...LA.....P..........S.......G....Q...DT......MAS....IED.............................. [...]
+P91085_CAEEL/543-853   ...........................................................................................ky--VLVITD..DAITH..LHKRYKA.LE...QK..S..RMTIQDMKI.S..K.ANAVVKd..............gKRLTLENIIN.......KTNLK..........LGGL.N.....YTV.S....DSK.KS........M......-..-....-...-...T.....D.E..Q.L..................................IIGVGVSAPPAGTkfmm.......dnkgHLNP..QIIGFASNA-...V...A.N.H...E....F.V.....G.DF..V...LA.....P..........S.......T....Q...DT......MAS....IED.............................. [...]
+A8WJ71_CAEBR/596-953   ............................................................................................e-FVFIITD..DTITN..LHQKYKM.IE...SL..Q..SIVVQDMKM.S..K.ALSVIDs..............gKRLTLENVIN.......KTNVK..........LGGS.N.....YIF.T....DTK.KY........L......-..-....-...-...-.....D.R..V.L..................................VIGIGISQPPPGTkfiv.......egkgFLNP..QIIGFAYNG-...K...Q.K.Q...E....F.A.....G.DF..V...LC.....P..........A.......G....Q...DV......SGF...sASKivisfq........................ [...]
+A8X957_CAEBR/565-899   ............................................................................................e-FVFIITD..DAITN..LHQKYKM.IE...SL..Q..SIVIQDMKM.T..K.ALSVIDs..............gKRLTLENVIN.......KTNVK..........LGGS.N.....YIF.T....DTK.KY........L......-..-....-...-...-.....D.R..V.L..................................VIGIGISQPPPVTkfiv.......egkgFLSP..QIISFSYNG-...K...Q.K.Q...E....F.A.....G.DF..V...LC.....P..........A.......G....Q...DV......NGF...sASKliislq........................ [...]
+O62275_CAEEL/594-924   .............................................................................................TFVFIITD..DSITT..LHQRYKM.IE...KD..T..KMIVQDMKL.S..K.ALSVINa..............gKRLTLENVIN.......KTNVK..........LGGS.N.....YVF.V....DAK.KQ........L......-..-....-...-...-.....D.S..H.L..................................IIGVGISAPPAGTkyam.......enkgVLNP..NVIGYAYNA-...Q...H.N.Q...E....F.S.....G.DF..V...LN.....S..........A.......S....Q...DT......LAP....IED.............................. [...]
+Q9N585_CAEEL/604-934   .............................................................................................TFVLCITE..DNITC..LHQKYKF.IE...HH..T..QMIVQDMKL.S..K.ALSVVNa..............sKKLTLENVIN.......KTNVK..........LGGS.N.....YVY.L....DTK.NF........L......-..-....-...-...-.....Q.E..H.L..................................IIGVGISSPPPGTkyim.......esrgILNP..TIVGFAYNG-...N...G.K.Q...E....F.S.....G.DF..V...LN.....A..........A.......G....Q...ET......IAP....IED.............................. [...]
+A8P7Z4_BRUMA/1-302     ............................................................................................m--------..-----..-----KY.IE...SQ..E..QILTQDLKA.S..T.ALGIVMk..............rQYQTLDNIVN.......KTNIK..........MGGL.N.....YSVhL....EEN.CD........-......R..W....L...G...R.....P.G..F.L..................................IVGLDIAHPSYSRvpn.........kdrNTVL..SVVGYSANIK...K...H.P.L...D....F.I.....G.GY..R...FA.....K..........A.......Q...mE...EL......MDD...aIQQ.............................. [...]
+Q9XVF1_CAEEL/588-902   ...........................................................................................pi---VIYAD..HTSEG..THSTLKL.QE...RL..C..EVITQQVAL.D..K.SLKRTP................GKVTANNLLM.......KLNLK..........YGGV.Nh...kVRV.D....N-S.I-........S......H..L....W...G...D....tS.N..T.L..................................IISYDVCHSSGKVykk.........deiCDEP..SCVGFGFNGT...A...C.P.E...A....F.I.....G.DF..H...YQ.....L..........P.......R....H...EQ......VDEh..lLKL.............................. [...]
+A8WWI1_CAEBR/598-920   .........................................................................................yviy------VD..HSSEP..YHQLLKY.LE...RK..F..EVMTQHLNF.D..K.ALQIRSgs...........pllGKSTMTNILM.......KINLK..........NGGL.N....hKVL.P....DPS.ID........H......L..W....G...D...K.....S.N..T.L..................................IISYDVCHSSGKVykk.........getCFEP..SCVGFGYNGT...S...V.P.E...A....I.I.....G.DF..H...YQ.....L..........P.......R....N...EQ......VDP...sVLT.............................. [...]
+A8XUC0_CAEBR/563-774   ............................................................................................e-LLMFITK..-SNRE..YHKEIKV.LE...HE..F..DIRTQDIRF.E..T.ALKFER................QQNTRRNLVN.......KINVK..........LGGI.N.....YEV.E....S-P.T-........-......-..-....-...F...T.....K.D..R.I..................................IIGLETSQNSTMG...............-DGL..ICVGFSANMM...A...K.E.T...Q....F.C.....G.GY..M...FT.....Q..........R.......S....N...DI......YGS...vLKD.............................. [...]
+A8X254_CAEBR/555-701   ..........................................................................................qll---MFVFR..-RSVP..LHAQIKS.LE...QK..F..DILTQEITL.E..T.AEKIFR................QPQTLQNIVN.......KTNMK..........LGGL.N.....YRI.D....STV.L-........-......-..-....-...-...N.....P.N..I.L..................................FIGFETSSKGGAGdvg........iinlKFGP..VSIGFAANMM...Q...N.H.Q...Q....F.A.....G.GY..I...YA.....P..........Q.......A....R...DV......GKN...qYFQ.............................. [...]
+Q8MU01_HETGL/598-705   ....................................................................................lighakgfe--------..--GDD..VHVTIKA.FE...QQ..T..EIVTQAITF.D..V.LKEVLDk..............gSPLTVTNCIH.......KTNVK..........MGGL.N.....YAL.H....MDD.PS........V......A..Q....L...F...D.....G.Q..T.L..................................FLGFAMNFP----...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+A8XEJ5_CAEBR/552-849   ............................................................................................q-LLFFVVK..-SRYN..YHQNIKC.LE...QK..Y..DLLTQEVRA.E..T.AEKVFR................QPQTRLNIVN.......KTNMK..........LGGL.N.....YQI.G....S--.--........-......E..T....F...R...R.....P.D..Y.L..................................IVGFETSQRSGGN...............PDYP..ISVGYAANML...D...H.H.Q...K....F.A.....G.GY..V...YV.....K..........R.......S....N...DV......FGP...iIKD.............................. [...]
+Q86S33_CAEEL/548-852   ............................................................................................q-LLFFVVK..-SRYN..YHQQIKA.LE...QK..Y..DVLTQEIRA.E..T.AEKVFR................QPQTRLNIIN.......KTNMK..........LGGL.N.....YAI.G....S--.--........-......E..A....F...N...K.....P.N..R.L..................................IVGFVTSQRVGGN...............PDYP..ISVGFAANML...K...H.H.Q...K....F.A.....G.GY..V...YV.....H..........R.......D....R...DV......FGS...iIKD.............................. [...]
+Q9GZG4_CAEEL/548-852   ............................................................................................q-LLFFVVK..-SRYN..YHQQIKA.LE...QK..Y..DVLTQEIRA.E..T.AEKVFR................QPQTRLNIIN.......KTNMK..........LGGL.N.....YAI.G....S--.--........-......E..A....F...N...K.....P.N..R.L..................................IVGFVTSQRVGGN...............PDYP..ISVGFAANML...K...H.H.Q...K....F.A.....G.GY..V...YV.....H..........R.......D....R...DV......FGS...iIKD.............................. [...]
+Q86NJ8_CAEEL/548-852   ............................................................................................q-LLFFVVK..-SRYN..YHQQIKA.LE...QK..Y..DVLTQEIRA.E..T.AEKVFR................QPQTRLNIIN.......KTNMK..........LGGL.N.....YAI.G....S--.--........-......E..A....F...N...K.....P.N..R.L..................................IVGFVTSQRVGGN...............PDYP..ISVGFAANML...K...H.H.Q...K....F.A.....G.GY..V...YV.....H..........R.......D....R...DV......FGS...iIKD.............................. [...]
+B3KLZ7_CAEEL/358-662   ............................................................................................q-LLFFVVK..-SRYN..YHQQIKA.LE...QK..Y..DVLTQEIRA.E..T.AEKVFR................QPQTRLNIIN.......KTNMK..........LGGL.N.....YAI.G....S--.--........-......E..A....F...N...K.....P.N..R.L..................................IVGFVTSQRVGGN...............PDYP..ISVGFAANML...K...H.H.Q...K....F.A.....G.GY..V...YV.....H..........R.......D....R...DV......FGS...iIKD.............................. [...]
+O02095_CAEEL/574-878   ............................................................................................q-LLFFVVK..-SRYN..YHQQIKA.LE...QK..Y..DVLTQEIRA.E..T.AEKVFR................QPQTRLNIIN.......KTNMK..........LGGL.N.....YAI.G....S--.--........-......E..A....F...N...K.....P.N..R.L..................................IVGFVTSQRVGGN...............PDYP..ISVGFAANML...K...H.H.Q...K....F.A.....G.GY..V...YV.....H..........R.......D....R...DV......FGS...iIKD.............................. [...]
+O16386_CAEEL/548-847   ............................................................................................q-LIMFITK..-SMNN..YHTEIKC.LE...QE..F..DLLTQDIRF.E..T.AVKLAQ................QQNTRKNIIY.......KTNMK..........LGGL.N.....YEL.R....S--.--........-......G..V....F...S...N.....S.K..R.L..................................IIGFETSQRGGLG...............-DAP..IAIGFAANMM...S...H.S.Q...Q....F.A.....G.GY..M...FV.....K..........K.......S....A...DN......YGP...vIPE.............................. [...]
+A8X254_CAEBR/749-889   ...........................................................................................nl--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+A8X023_CAEBR/600-841   ..................................................................................hgilalqnael--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................------------G...............DSEV..TTVGYASNFM...D...H.P.Q...K....F.A.....G.SY..K...FV.....E..........R.......T....D...EA......SLD...sIIEllqymitl...................... [...]
+Q21495_CAEEL/61-336    ...................................................................................ffrdgqetsl--------..-----..-------.--...--..-..---------.N..N.QSFRNP................TDFAQTGFFV.......DAKQQ..........LGGL.N.....YVV.N....S--.--........-......E..T....W...N...D.....S.G..L.L..................................LIGLSTAPYLNSY..............sSENV..TTIGFVSNTM...D...H.P.Q...K....F.A.....G.GY..K...YV.....K..........S.......G....S...DV......FGQ...vMPE.............................. [...]
+A8X022_CAEBR/492-805   .....................................................................................qllpfvth--------..-SRYA..LRKDIEW.ME...HK..Y..RIPSLAIDL.K..I.ARKMVE................DKAVKLDLAD.......QVNKK..........TQGV.N.....YAI.Y....S--.--........-......D..V....F...R...N.....G.N..D.L..................................VISISFSEPSPKYakvrililfshmifcFQYP..FTVGFAANTS...N...H.P.L...V....F.T.....S.EF..L...YS.....N..........S.......D....N...MD......SGA...vLTE.............................. [...]
+Q2GQS4_CHAGB/345-418   ...........................................................................................qi-IFYILRD..KTAFV..YDRFKQA.ND...CG..V..ACLSQMLQA.Q..H.VRKA--................QGQYCSNVCM.......KVNSK..........LGGQ.T.....SKI.A....SRA.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B0WE95_CULQU/32-179    ............................................................................................i--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+C5LD15_9ALVE/568-697   ............................................................................................l-VMLFTPV..KDCKR.vYQIFKQV.CT...VE..R..PCITQVVRS.E..T.MRKKTS................IVAIVTRIIM.......QISAK..........FLGP.-.....LWH.I....DLH.TS........L......T..P....M...M...N.....E.P..C.M..................................LVGIDTAVAKETR...............---R..AVLGFVCSLD...S...A.S.S...Q....Y.F.....S.KA..V...PL.....D..........-.......-....-...--......---....---.............................. [...]
+A4ZYY6_TETTH/491-831   .............................................................................tfaliimnselehyhf--------..-----..YKTCKQA.IT...VD..K..GICCSLIKA.S..T.LQQYVPtqqypq....ippgnsIEAFASRFLS.......QMQAK..........LGES.P.....WLM.Q....ELP.Y-........-......-..-....-...N...Q.....N.P..C.T..................................MIGFSVLRQRNAR...............---K..IIVAGAASIN...K...Q.Y.S...K....Y.L.....P.DY..R...VI.....S..........E.......V....S...TK......IK-....--Edgtleivelseq.................. [...]
+Q23AZ6_TETTH/491-831   .............................................................................tfaliimnselehyhf--------..-----..YKTCKQA.IT...VD..K..GICCSLIKA.S..T.LQQYVPtqqypq....ippgnsIEAFASRFLS.......QMQAK..........LGES.P.....WLM.Q....ELP.Y-........-......-..-....-...N...Q.....N.P..C.T..................................MIGFSVLRQRNAR...............---K..IIVAGAASIN...K...Q.Y.S...K....Y.L.....P.DY..R...VI.....S..........E.......V....S...TK......IK-....--Edgtleivelseq.................. [...]
+A0D5D7_PARTE/374-640   vlfvgdqktdftsarntllskaipnqlinlpiqdqeinrllaimtanlgsvpwsikeingqinnkksavlgiwksdnsfsaclsinkylnkyi--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...SS......FGD....LDQ.............................. [...]
+C4LY31_ENTHI/438-711   ............................................................................................q-IVFSVFD..-SIEQ..MVEIKEY.FM...IY..G..NIPTQIIDL.N..E.RYDDKK................----ITNLCL.......RTGIK..........LGCS.R.....MKL.D....QNT.S-........-......-..-....-...-...-.....-.D..I.C..................................VIGI--TSREFFV...............--NK..TLITLCISKD...E...N.L.N...V....F.D.....T.ES..Y...FV.....S..........N.......D....N...WH......SGI...gLEQ.............................. [...]
+B0EI01_ENTDI/438-710   ............................................................................................q-IVFSVFD..-SIEQ..MVEIKDY.FM...IY..G..NIPTQIIDL.N..E.RYDDKK................----ITSLCL.......RTGIK..........IGCS.R.....LKL.D....QNT.--........-......-..-....-...-...-.....S.D..I.C..................................VIGI--TSREFFV...............--NK..TLITLCISKD...E...N.L.N...V....F.D.....T.DS..Y...FV.....S..........N.......D....N...WH......SGI...gLEQ.............................. [...]
+B7R785_9THEO/119-333   ............................................................................................d-IVIMTTT.vRNELI..YAKVKSL.LL...GN..-..GIPSQVVTA.E..K.LRNTKG................LPWILENIAL.......QIYAK..........IGGT.P.....WTV.M....SSS.P-........-......-..-....-...-...-.....K.G..E.L..................................VIGVSRAIDKRRN...............----..YIIGFITLFS..yD...G.D.Y...L....L.F.....Y.SL..A...PR.....P..........I.......E....W...QK......LDEyrnaLSQ.............................. [...]
+Q11QW7_CYTH3/390-605   .........................................................................................tlpv--------..-KKSP..YHTCKAK.LI...GS..-..GIPTQDIQV.V..N.LKNA--................NQFTINNIAL.......NIYAK..........IGGT.-.....AWT.I....EKE.DK........R......-..-....-...-...-.....M.E..E.L..................................VIGVGSSLSSDGK...............----..LVLGIAQIFH...S...D.G.R...Y....L.V.....G.DC..T...PL.....S..........T.......F....D...NY......AKN....LED.............................. [...]
+Q9L1X1_STRCO/365-661   ...............................................................................dsspylvaksafmg--------..-----..-------.--...--..Q..GVPVQEVRI.E..T.VRQSKL................-AYPLNSIAL.......ACYAK..........LGGI.-.....PFV.I....AAP.RT........L......-..-....-...-...-.....A.H..E.L..................................VIGIGSAHVKESR..............lTEPE..RVVGITTVFS..aD...G.N.Y...L....L.W.....N.TS..ReadYD.....D..........Y.......P....R...EL......LLS....LRD.............................. [...]
+D2M4C5_RHOPA/151-447   ...........................................................................................fd--------..DESNP..YYATKSV.FL...KR..-..DVPVQSVRL.E..T.MAQADS...............qLIFSMNHMSL.......ATYAK..........LGGT.-.....PWL.L....ASQ.QT........V......-..-....-...-...-.....A.H..E.L..................................VIGLGSHSVANSR..............iGSQQ..RFVGITTVFS...S...D.G.S...Y....L.L.....S.DR..T...AV.....V..........P.......Y....E...EY......ATA....LYD.............................. [...]
+A3VQY4_9PROT/445-745   ........................................................................................lpgpq--------..---NP..YYATKAM.LL...RN..-..NVAVQNVRI.E..T.MSEPDK...............sLVYTMNQVSL.......ACYAK..........LGGR.-.....PWL.L....AAQ.QS........V......-..-....-...-...-.....A.H..E.L..................................VIGLGSHTEQKSR..............fDQSV..RYVGITTVFS..sDggyH.L.S...E....R.T.....G.VV..L...FE.....D..........Y.......A....T...EL......TDT....LTR.............................. [...]
+B9MH92_ACIET/439-730   ...................................................................................apqknpylva--------..-----..-----KA.AF...LS..N..QIPTQFIAF.E..T.FSMAPA...............sLAYTLSNLAL.......AVYAK..........LGGI.-.....PWL.I....KSD.KG........I......-..-....-...-...-.....A.H..E.V..................................VIGLGSAAIGESR..............fSRKE..RIVGITSVFR...G...D.G.G...Y....L.L.....S.NL..S...NA.....V..........P.......M....S...KY......GEA....LTE.............................. [...]
+A5D4D9_PELTS/458-756   ...................................................................................qlfgnknpyl--------..-----..---VTKC.FF...LQ..Q..QVPVQEVEI.E..N.IVKDDR...............qLIYILNNISL.......ASYAK..........MGGT.-.....PWL.L....KAD.SP........I......-..-....-...-...-.....A.H..E.L..................................VFGLGSCQVSRSR..............lGSKE..RVVGITTVFT..gD...G.N.Y...L....L.-.....T.NK..S...AA.....V..........P.......F....K...EY......PKA....LLR.............................. [...]
+A0LL61_SYNFM/455-750   ................................................................................sqnpyfitkgsfl--------..-----..-------.--...-A..H..QIPVQEFEI.E..T.AQKNDR...............eLQYSLNNMAL.......ATYAK..........MNGI.-.....PWL.L....KAN.PT........I......-..-....-...-...-.....A.H..E.L..................................IIGLGSANIADGR..............lGDSE..RYVGITTVFS..gD...G.N.Y...H....L.T.....N.VS..-...-R.....A..........V.......T....I...DC......YQK...aFLE.............................. [...]
+C1F5Q7_ACIC5/440-735   .........................................................................................glpd--------..-ASNP..YYTTKAR.LM...AQ..-..GVPVQLLNI.E..T.IRRKSL................-DYILNNIGL.......AMYAK..........LGGI.-.....PWT.L....TQN.SD........M......-..-....-...-...-.....A.H..E.I..................................IVGIGSARLNESR..............rGAGE..RVIGITTVFS...G...D.G.Q...Y....L.L.....A.NN..T...QE.....V..........P.......S....E...EY......VDA....LTQ.............................. [...]
+A4WYU7_RHOS5/454-756   .......................................................................................arlpdd--------..--RNP..YIHTKSL.LL...-T..L..GVPTQQVRM.P..T.VLLEPK...............sLQYTLQNFSI.......ATYAK..........LNGT.-.....PWT.V....NHD.KA........I......-..-....-...-...-.....N.D..E.L..................................VVGMGLAELSGSR..............tEKRQ..RFVGITTVFA...G...D.G.S...Y....L.L.....G.NV..S...KE.....C..........E.......Y....E...GY......SDA....IRE.............................. [...]
+B7K585_CYAP8/439-744   ...............................................................................aiviildehsnlpd--------..-SINP..YLHSKSL.LL...TH..-..GIPVQEIRY.S..N.IQKDKK...............sLQYILQNFSL.......AMYAK..........LTGQ.-.....PWT.V....DQD.QT........I......-..-....-...-...-.....S.D..E.L..................................VIGIGTSELSNSR..............fETRQ..RFVGITTVFR...G...D.G.N...Y....L.L.....S.SL..S...KE.....C..........S.......Y....D...EY......PDV....LRE.............................. [...]
+D0BWJ3_9GAMM/401-693   ...................................................................................klkveenpyy--------..-----..---LGKS.LF...FM..H..QVPVQDFTI.E..L.LSQSDY...............nLSFSLNNMAL.......ACYAK..........MGGV.-.....PWL.L....KSS.PT........L......-..-....-...-...-.....S.H..E.L..................................VIGIGSANIGQER..............gINGQ..RVMGITTVFS...G...D.G.S...Y....I.V.....S.NT..S...KA.....V..........V.......P....K...AY......CEA....LTS.............................. [...]
+Q1PV30_9BACT/383-655   ..........................................................................................sde--------..EEEKT..YYEIKKL.LL...DK..-..GITSQFIAN.K..T.VRSGNF................-NYCLPNIAI.......AILAK..........LGGI.-.....PWK.L....NTK.K-........-......-..-....-...-...-.....Y.N..D.L..................................VIGYNYKKLQDQK...............----..-WIGSAVFFD..nE...G.R.L...G....R.I.....Y.GF..S...EE.....R..........A.......G....E...DL......ISH....---.............................. [...]
+D2QY15_PIRSD/353-529   ...........................................................................................dt-------E..DFSDQ..YYVTKHA.FL...KA..-..GLPSQFVST.K..T.IRNKAS................FKWTVSNIGM.......AVFAK..........LGGK.-.....PWK.V....VSE.--........-......-..-....-...-...N.....D.D..C.L..................................IVGIGQSHRCGED...............KTIS..RYYSYCVL--...T...D.S.S...G....L.Y.....E.DV..R...VL.....G..........K.......D....T...DE......RSY....LTR.............................. [...]
+D2QGL1_SPILD/333-520   .....................................................................................snideegv--------..---SD..TYYYLKY.HL...TK..L..GVPLQVLSH.E..K.INVEKT................LKWSTSNIGL.......ALFSK..........LGGI.-.....PWV.V....KPS.T-........-......-..-....-...-...-.....A.D..C.L..................................ILGIGSAHQSNAQ...............NEIE..RFFAYSV--C...V...D.S.S...G....L.Y.....K.KL..E...VL.....A..........D.......D....Q...SE......VSY....LDA.............................. [...]
+PIWI_ARCFU/110-406     ............................................................................................g-IMLVLPE..YNTPL..YYKLKSY.LI...NS..-..-IPSQFMRY.D..I.LSNRNL................-TFYVDNLLV.......QFVSK..........LGGK.-.....PWI.L....NVD.PE........K......-..-....-...-...-.....-.-..-.-..................................--GSDIIIGTGAT..............rIDNV..NLFCFAMVFK...K...D.G.T...M....L.W.....N.EI..S...PI.....V..........T.......S....S...EY......LTY....LKS.............................. [...]
+Q96Z85_SULTO/134-346   ..........................................................................aksqidsiyyrvkasflds--------..-----..-------.GL...EE..R..ATPTQIVTV.D..L.LKQRDEnk...........ntnYSWSLLPIAV.......QMFTK..........MGGI.P.....YAL.K....QSC.IN........I......-..-....G...S...E.....F.N..V.H..................................FIGLGLTSDPRNK...............---L..KRVGFVTIFN..dN...G.S.L...S....Y.M.....D.SN..I...LE.....D..........N.......K....T...ES......YGR...iIYN.............................. [...]
+A3VPN8_9PROT/165-321   .......................................................................................afverd--------..EEDFD..LHDYLKA.VG...AS..M..GVSVQLIRS.D..K.ALDYHC................RASVMWRLSI.......ALYTK..........AGGV.P.....WVL.E....DIH.P-........-......-..-....-...-...-.....-.Q..T.A..................................FIGIDYAMRRVQD...............DGPR..FAICCAQVFD..aE...G.SgL...E....F.IaykadG.VS..V...YG.....D..........N.......P....Y...LN......HAQ....MLK.............................. [...]
+D1JFX3_9ARCH/159-437   ........................................................................................yfkfn--------..--YED..LRAHIKA.LC...VK..K..HVYTQILTK.T..S.FRPFDM................-SDNMWNLSL.......GLYVK..........AGGV.-.....PWK.L....ESG.E-........-......-..-....-...-...-.....E.N..T.C..................................FIGIAFGIKKGED...............-GQE..ILVGLAEVFD...V...F.G.E...S....V.T.....I.KV..V...ED.....E..........F.......K....S...EV......GLH....LSEek............................ [...]
+Q8U3D2_PYRFU/474-756   ..................................................................................lafiaarnkls--------..--SEK..FEEIKRR.LF...-N..L..NVISQVVNE.D..T.LKNKRDkyd.........rnrlDLFVRHNLLF.......QVLSK..........LGVK.-.....YYV.L....DYR.FN........Y......D..Y....-...-...-.....-.-..-.-..................................IIGIDVAPMKRSE...............---G..YIGGSAVMF-...-...D.S.Q...G....Y.I.....R.KI..V...PI.....K..........I.......G....E...QR......GESv..dMNE.............................. [...]
+D3S0S6_FERPL/490-768   .......................................................................................egedsf--------..----D..YYNPLKS.AL...FR..N..NILSQNFDV.T..N.YVRGDGkin..........kntIKYAVSNIIY.......NIFGK..........LGVK.-.....FFV.L....EED.VP........Y......D..Y....-...-...-.....-.-..-.-..................................ILGIDVGYGEAYT...............---G..KVAGCTTVHD..sE...G.R.L...R....N.L.....I.PI..E...KQ.....N..........Y.......P....S...KE......TAR....IKA.............................. [...]
+Y1321_METJA/426-699    .............................................................................................CFALIIGK.eKYKDN.dYYEILKK.QL...FD..L..KIISQNILW.E..N.WRKDDK................-GYMTNNLLI.......QIMGK..........LGIK.-.....YFI.L....DSK.TP........Y......D..Y....-...-...-.....-.-..-.-..................................IMGLDTGLGIFGN...............---H..RVGGCTVVYD..sE...G.K.I...R....R.I.....Q.PI..E...TP.....A..........P.......G....E...RL......HLP....---.............................. [...]
+C7P7E7_METFA/420-692   ............................................................................................g-FALIIGN.rYYEND..YYETLKM.QL...FN..L..NIISQNILW.E..N.WSKDDN................-NFMTNNLLI.......QIMGK..........LGIK.-.....YFA.L....DAK.VN........Y......D..Y....-...-...-.....-.-..-.-..................................IMGLDSGLGAFKS...............---N..RVSGCTVIYD..sE...G.K.I...R....R.I.....Q.PI..D...VP.....S..........P.......G....E...RI......PIH....---.............................. [...]
+B6YTQ5_THEON/463-751   ..........................................................................................lai---TLIPD..MRQEQ..FDKIKGF.FF...NN..-..GILHKAINI.N..N.LRDPSK...............dQKKLIESMIL.......QALYA..........FGIY.F.....YSL.D....NLN.Y-........-......-..-....-...-...-.....-.-..D.F..................................IIGLDVTREMDKS...............GRYY..GISGAAVVQN...K...N.G.Q...V....L.K.....I.IP..I...TS.....P..........Q.......S....S...SE......TAN....INY.............................. [...]
+D3S7P9_9EURY/531-824   ......................................................................licispklpnnefdelkshlfsy--------..-----..-------.QQ...TT..F..HQFMYPFNL.K..R.CLNDDD...............fKKPFINSILS.......QFFHK..........MGMY.-.....LFS.F....SEE.L-........-......-..-....-...-...G.....D.Y..D.F..................................IIGYDITKEKDEN...............DKIK..GIGGSAIIYN...S...H.G.H...V....I.T.....TvTF..E...DV.....H..........T.......S....S...EI......ARY....-EKlf............................ [...]
+B5IR12_9EURY/528-819   ..................................................................................dlelrefynwl--------..-----..----KKE.FY...DE.tK..PLVFQGARV.E..S.VFGMYK................-RYAVPNIVL.......QMAAK..........LGVY.P.....YSL.E....TSS.G-........Y......D..Y....-...-...-.....-.-..-.-..................................IIGIDYTYWHERD...............--AV..SVGGGAVVVS..pS...G.L.I...E....G.I.....Y.PI..A...IP.....S..........K.......R....E...SL......DMKe..iLQE.............................. [...]
+O67434_AQUAE/419-694   ............................................................................................l-VIVFLEE.yPKVDP..YKSFLLY.DF...VK..R..ELLKKMIPS.Q..V.ILNRTLkn............enLKFVLLNVAE.......QVLAK..........TGNI.P.....YKL.K....EIE.GK........V......D..A....-...-...-.....-.-..-.-..................................FVGIDISRITRDG...............-KTV..NAVAFTKIFN..sK...G.E.L...V....R.Y.....Y.LT..S...YP.....A..........F.......G....E...KL......TEK....---.............................. [...]
+B4B3R2_9CHRO/1-219     ...............................................................................mgnlpfilaeplei--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.A..D.Y..................................FIGLDISRERKRN...............SRGS..NNACGSVRL-...-...-.Y.G...K....Q.G.....E.FI..Q...YQ.....L..........D.......D....Q...PI......EGE....--E.............................. [...]
+A0YYT3_9CYAN/471-752   .............................................................................tddtedgsfysfvssr--------..-----..-------.-L...LR..R..GISSQVIYE.D..T.LKNPNN................YSYILNQVIP.......GILAK..........LGNL.-.....PFI.L....AKP.LE........I......-..-....-...-...-.....-.A..D.Y..................................FIGLDISRTPKKR..............kSGSL..NVCASVR---...-...L.Y.G...K....Y.G.....E.FI..R...YR.....-..........-.......L....E...DA......LTQ....GEE.............................. [...]
+A8YDH3_MICAE/463-734   .....................................................................................nadnteeg--------..----S..LYSWIKK.KF...LE..R..RVMTQMIYE.K..T.LNDKSN................YKNILNQVVP.......GILAK..........LGNL.P.....YVL.A....ESL.E-........-......-..-....-...-...-.....I.A..D.Y..................................FIGLDVGRMPKKN..............lPGSL..NVCASVRLY-...-...G.K.Q...G....E.F.....V.RC..R...VE.....-..........-.......-....-...DS......LTE....GEE.............................. [...]
+B0JXD6_MICAN/462-734   ....................................................................................rnadnteeg--------..----S..LYSWIKR.KF...LG..R..GVITQMIYE.K..T.LNDKSN................YKNILNQVVP.......GILAK..........LGNL.P.....YVL.A....E-P.LE........-......-..-....-...-...-.....I.A..D.Y..................................FIGLDVGRMPKKN..............lPGSL..NVCASVRLY-...-...G.K.Q...G....E.F.....V.RC..R...VE.....-..........-.......-....-...DS......LTE....GEE.............................. [...]
+B0ADC8_9CLOT/432-721   ............................................................................................p-VLVILEK..ENIDK.yYETLKKI.FG...GR..N..NIPTQFVDL.D..T.IKKCDPkid.........nkrgKESIFLNILL.......GIYCK..........SGIQ.-.....PWV.L....ANG.LS........A......D..C....-...-...-.....-.-..-.-..................................YIGLDVCREN---...............--NM..STAGLIQVIG...K...D.G.R...V....LkS.....K.TI..S...SH.....Q..........S.......G....E...KI......QIN...iLKD.............................. [...]
+C4L1M1_EXISA/321-484   ............................................................................................g-VVVVIAE.eASLQH.sYQAIKRQ.FG...GK..Q..DVVTQCVEL.H..D.RVLN--................SEDTLYNILL.......GIYVK..........AGLQ.-.....PWI.L....GEP.LH........S......D..C....-...-...-.....-.-..-.-..................................FVGLDVSHENGKH...............----..-AAGIIQIIG...K...D.G.A...M....I.K.....Q.KA..L..sTS.....E..........A.......G....E...KI......SSE...tMRE.............................. [...]
+C6QUV9_9BACI/2-48      ............................................................................................c--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...--.....-..........-.......-....-...--......---....---.............................. [...]
+B7GJX9_ANOFW/423-692   ............................................................................................t-IVVIGTE..ENIER.aYMAIKKE.FG...AK..A..DIMTQFVIF.D..S.SIVN--................NSFYYYNVLL.......GIYAK..........SGVQ.-.....PWI.L....LDH.MN........S......D..C....-...-...-.....-.-..-.-..................................FIGLDVSHEQGKH...............----..-ASGIIQVIG...K...D.G.R...I....I.K.....Q.KS..V...MA.....T..........E.......A....G...ET......IARc..tMEE.............................. [...]
+C1V6Q1_9EURY/608-882   ........................................................................................aaaad--------..-YDDP..YPEFKRR.LG...-Q..L..GVPSQMITI.D..N.LGND--................--SYLGNISS.......SLIGK..........AGGV.P.....WRI.D....DVP.GD........V......D..A....-...-...-.....-.-..-.-..................................FVGLDVTYDHATK...............---Q..HLGAAANVIM...A...D.G.T...I....L.A.....S.EA..V...TK.....Q..........A.......G....E...TF......DED...dVAN.............................. [...]
+B9LVW4_HALLT/464-658   .......................................................................................fsmges--------..SASDI..YHEMKKA.LR...QR..-..RVDSQMAHI.D..T.LATS--................--YALPNVAL.......GLVAA..........AGGI.P.....FTT.E....DAM.P-........-......-..-....-...-...G.....E.T..D.L..................................FIGIDVSHRYPRD..............tDERV..HIAASTTSIY...G...D.G.T...I....L.G.....Y.TS..A...KP.....Q..........T.......G....E...KV......PPK...eLKN.............................. [...]
+Q53W94_THET8/418-669   ....rnrlkalllreglpsqilnvplreeerhrwenallgllakaglqvvalsgaypaelavgfdaggresfrfggaacavggdgghllwtlp--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...EA.....Q..........A.......G....E...RI......PQE...vVWD.............................. [...]
+Q746M7_THET2/418-669   ....rnrlkalllreglpsqilnvplreeerhrwenallgllakaglqvvalsgaypaelavgfdaggresfrfggaacavggdgghllwtlp--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..-...EA.....Q..........A.......G....E...RI......PQE...vVWD.............................. [...]
+B1XJG0_SYNP2/307-599   ...........................................................................................ti---LVISE..WLDNK..YKTKLTR.DA...LE..H..GITLQFMLP.L..K.ENVR-RiesnkgveskitcftsDQYRANNILL.......GLLAK..........AGWQ.A.....VGL.P....LLN.NE........Y......-..-....-...-...-.....A.A..D.L..................................VIGFDAGRNETLS...............-YGT..SSFAVLADG-...-...-.-.-...Q....I.L.....G.WE..L...PE.....A..........Q.......K....G...EI......LDPd..hVRR.............................. [...]
+Q2JSR3_SYNJA/437-712   ...........................................................................................tv--LVVMPW..-SPNE..RKQRIRM.EA...LE..A..GIATQFMIP.G..A.------................DPYKALNVVL.......GLLCK..........AAWQ.P.....VLL.E....PLD.D-........-......P..V....-...-...-.....G.P..E.L..................................IIGFDVGTNRRLY...............----..-YGASAFAVL...A...D.G.Q...S....L.G.....W.EL..P...AV.....Q..........R.......G....E...TF......SGD...aIYQ.............................. [...]
+Q2JI93_SYNJB/454-728   ...................................................................................vlvvmplspn--------..-----..-------.-E...HK..Q..KIRLQALRA.G..I.ATQFMIp.............gaDPYKALNVVL.......GLLCK..........AAWQ.P.....VLL.E....PLD.H-........-......-..-....-...P...E.....C.S..E.L..................................TIGFDVGTNRELY...............-YGT..SAFAVLANG-...-...-.-.Q...S....L.G.....W.EL..P...DI.....Q..........R.......G....E...TF......SGE...aIYQ.............................. [...]
+Q8DKB1_THEEB/458-739   .................................................................................tvlvvmpwsphe--------..-----..EKTRLRI.QA...LK..A..GIATQFMIP.T..P.QDNP--................--YKALNVAL.......GLLCK..........AKWQ.P....vYLK.P....LDD.PQ........-......-..-....-...-...-.....A.A..D.L..................................IIGFDTSTNRRLY...............-YGT..SAFAILAN--...-...-.G.Q...S....L.G.....W.EL..P...DI.....Q..........R.......G....E...TF......SGQ...sIWQ.............................. [...]
+Q5MZ10_SYNP6/441-718   ............................................................................................t-VLVVMPW..DSHHD..-KQKIRI.QA...IQ..A..GIATQFMVPlP..K.AD----................-KYKALNVTL.......GLLCK..........AGWQ.P.....IQL.E....SVD.HP........-......-..-....-...-...E.....V.A..D.L..................................IIGFDTGTNRELY...............---Y..GTSAFAVLA-...-...D.G.Q...S....L.G.....W.EL..P...AV.....Q..........G.......G....E...TF......SGQ...aIWQ.............................. [...]
+Q31N05_SYNE7/441-718   ............................................................................................t-VLVVMPW..DSHHD..-KQKIRI.QA...IQ..A..GIATQFMVPlP..K.AD----................-KYKALNVTL.......GLLCK..........AGWQ.P.....IQL.E....SVD.HP........-......-..-....-...-...E.....V.A..D.L..................................IIGFDTGTNRELY...............---Y..GTSAFAVLA-...-...D.G.Q...S....L.G.....W.EL..P...AV.....Q..........R.......G....E...TF......SGQ...aIWQ.............................. [...]
+A4HBN9_LEIBR/872-1190  .......................................................................................svilvt-------N..EMGTR..ATRWLKV.EC...MC..R..GVHFIAIPA.S..S.NPKRLNl..............vGAQLRQRIAT.......QFE--..........---L.N....pLRG.I....DLR.GE........L......P..V....L...G...R.....R.H..V.L..................................ILGVDSCHTNTH-...............----..SVGAIVGILS..tP...A.G.N...S....L.L.....S.FF..W...RH.....D..........A.......R....G...RE......AQH....VAK.............................. [...]
+A4HZ40_LEIIN/904-1226  ........................................................................................svili------TN..EIDTR..ATRWLKV.EC...MC..R..GAHFIAIPA.S..S.SPKK--................LNLAGAQLRM.......RIASQ..........FELN.P.....LRG.V....DLR.GE........L......P..V....L...G...H.....R.H..V.L..................................VIGVDSCHTNTHS...............--VG..TIVGILST--...P...T.E.S...K....L.L.....S.YF..W...RH.....D..........A.......R....G...RE......TQH....VAK.............................. [...]
+Q4QCH4_LEIMA/899-1221  ..........................................................................................svi----LITN..EMDTR..ATRWLKV.EC...MC..R..GAHFIAIPA.S..S.NPKK--................LNLVGAQLRM.......RIATQ..........FELN.P.....LRG.V....DLR.GE........L......P..V....L...G...H.....R.H..V.L..................................VIGVDSCHTNTHS...............--VG..TIVGILST--...P...T.E.S...K....L.L.....S.YF..W...RH.....D..........A.......R....G...RE......AQH....VAK.............................. [...]
+Q4DYG9_TRYCR/791-1083  ...........................................................................................ta--AVIISA..ERETR..ASRWILA.EC...LT..R..GILGMFIPP.A..T.TPKR--................QNLLCENVRI.......QLRTK..........FETD.P.....AHG.V....NLP.RE........V......P..A....L...A...Q.....R.R..V.L..................................VVGVDACHTTTFS...............--TG..SVVGILCAPE..rN...H.L.L...P....F.F.....W.KH..E...MR.....G..........Q.......E....A...DR......VTE....---.............................. [...]
+Q6T6J9_9TRYP/784-1082  ..........................................................................................taa---VIVTN..ERETR..LVRWMQA.EC...LT..R..GILPLFVPP.C..A.SPKQ--................QQLRCENIRL.......RLRTV..........FATD.P.....LRG.V....DLQ.RE........V......P..A....V...A...Q.....R.R..V.L..................................LVGVDSCHTPTVS...............--TG..SVVGILCTAE..rN...H.L.L...P....F.F.....W.KH..E...RR.....G..........Q.......E....V...EL......VSE...hFEV.............................. [...]
+D0A1P1_TRYBG/784-1082  ..........................................................................................taa---VIVTN..ERETR..LVRWMQA.EC...LT..R..GILPLFVPP.C..A.SPKQ--................QQLRCENIRL.......RLRTV..........FATD.P.....LRG.V....DLQ.RE........V......P..A....V...A...Q.....R.R..V.L..................................LVGVDSCHTPTVS...............--TG..SVVGILCTAE..rN...H.L.L...P....F.F.....W.KH..E...RR.....G..........Q.......E....V...EL......VSE...hFEV.............................. [...]
+Q38C22_9TRYP/783-1081  ..........................................................................................taa---VIVTN..ERETR..LVRWMQA.EC...LT..R..GILPLFVPP.C..A.SPKQ--................QQLRCENIRL.......RLRTV..........FATD.P.....LRG.V....DLQ.RE........V......P..A....V...A...Q.....R.R..V.L..................................LVGVDSCHTPTVS...............--TG..SVVGILCTAE..rN...H.L.L...P....F.F.....W.KH..E...RR.....G..........Q.......E....V...EL......VSE...hFEV.............................. [...]
+C5X6M9_SORBI/1-69      ........................................................................................ntfcl--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....K.P..T.I..................................IFGADAIHPTAGE...............DSSA..FITAVVESME..rP...Q.V.M...T....Y.K.....A.LA..S...AQ.....K..........H.......R....E...EM......IHN...lL--.............................. [...]
+A4HH63_LEIBR/16-225    ...............................................................................sdaasshmssttlt--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..V...RR.....Q..........N.......A....N...EV......LNN...rFPD.............................. [...]
+A4H6I4_LEIBR/673-882   ...............................................................................sdaasshmssttlt--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....-.-..-.-..................................-------------...............----..----------...-...-.-.-...-....-.-.....-.--..V...RR.....Q..........N.......A....N...EV......LNN...rFPD.............................. [...]
+Q6T6K0_9TRYP/549-877   ...........................................................................................vt----FLRR..PEREP..YAEWKAS.WS...GG..-..GALSQVVAK.D..L.TGGR--................ESSIVMAVAQ.......QICAK..........TGRL.Nw...tLDV.N....QVC.PK........L......-..A....K...S...D.....P.SggI.L..................................IIAADVGRDQRSVate........ssavRQEF..FAVAFVSFYVk.gT...Q.W.S...T....Y.C.....N.HY..Q...VN.....G..........R.......K....E...TL......YAD....GSDcdttsmsegg.................... [...]
+D0A4M3_TRYBG/571-899   ...........................................................................................vt----FLRR..PEREP..YAEWKAS.WS...GG..-..GALSQVVAK.D..L.TGGR--................ESSIVMAVAQ.......QICAK..........TGRL.Nw...tLDV.N....QVC.PK........L......A..K....A...D...P.....SgG..I.L..................................IIAADVGRDQRSVate........ssavRQEF..FAVAFVSFYVk.gT...Q.W.S...T....Y.C.....N.HY..Q...VN.....G..........R.......K....E...TL......YAD....GSDcdttsmsegg.................... [...]
+Q389P5_9TRYP/560-888   ...........................................................................................vt----FLRR..PEREP..YAEWKAS.WS...GG..-..GALSQVVAK.D..L.TGGRE-................-LSIVMAVAQ.......QICAK..........TGRL.Nw...tLDV.N....QVC.PK........L......A..K....A...D...P.....SgG..I.L..................................IIAADVGRDQRSVate........ssavRQEF..FAVAFVSFYVk.gT...Q.W.S...T....Y.C.....N.HY..Q...VN.....G..........R.......K....E...TL......YAD....GSDcdttsmsegg.................... [...]
+A8WWH9_CAEBR/55-193    ..................................................................................hqymqnlrgah--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...-.....T.N..T.L..................................FIAYTVNHGTVDPnt..........pgvYNNP..STAVFTFNGT...T...R.P.E...H....F.I.....D.YF..H...FQ.....K..........A.......S....I...QH......IDPq..vIQR.............................. [...]
+Q17600_CAEEL/19-157    ....................................................................................qymrslrgp--------..-----..-------.--...--..-..---------.-..-.------................----------.......-----..........----.-.....---.-....---.--........-......-..-....-...-...E.....T.N..T.L..................................FIGYAINHGTVDPst..........pgvYNNP..STVVFTFNGT...S...C.P.D...H....F.T.....E.YF..H...FQ.....K..........A.......T....I...PH......VDPa..lIRR.............................. [...]
+//
diff --git a/test/scripts/automated/belvu/test38 b/test/scripts/automated/belvu/test38
new file mode 100755
index 0000000..34e8591
--- /dev/null
+++ b/test/scripts/automated/belvu/test38
@@ -0,0 +1,25 @@
+#!/bin/ksh
+#
+# Description:
+#   Sort by UPGMA tree on start up (large alignment).
+
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences to the saved results
+diffs=`belvu -o Selex -S u $data_dir/ALIGN.selex >&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
+
diff --git a/test/scripts/automated/belvu/test38_results b/test/scripts/automated/belvu/test38_results
new file mode 100644
index 0000000..24d2734
--- /dev/null
+++ b/test/scripts/automated/belvu/test38_results
@@ -0,0 +1,371 @@
+Q9UPQ9.4/1-1833    MREKEQEREEQLMEDKKRKKEDKKKKEATQ-KVTEQKTKVPEVTKP-----SLS-QPTAASP-------IGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------SAA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPPSCMLLGGGAGPPP-CTAP-GANPNNA--QVTG-ALLQSESGTAPDSTLGGA-AASNYANSTWGSGASSNN-----GTSPNPIHIWDKVIVDG-SDMEEWPCIAS-KD-TESSSENTTDNNS--ASNPGSEKS-TL------------PGSTTS--------NK------------GKGSQCQS----ASS----------------GNECNLGVWK------SDPK-A------K--------------SVQSSNSTTE-NNNG [...]
+B0QY77.1/1-879     ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------WK------SDPK-A------K--------------SVQSSNSTTE-NNNG [...]
+B4E231.1/1-251     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9UPQ9.4/1-1833    MREKEQEREEQLMEDKKRKKEDKKKKEATQ-KVTEQKTKVPEVTKP-----SLS-QPTAASP-------IGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------SAA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPPSCMLLGGGAGPPP-CTAP-GANPNNA--QVTG-ALLQSESGTAPDSTLGGA-AASNYANSTWGSGASSNN-----GTSPNPIHIWDKVIVDG-SDMEEWPCIAS-KD-TESSSENTTDNNS--ASNPGSEKS-TL------------PGSTTS--------NK------------GKGSQCQS----ASS----------------GNECNLGVWK------SDPK-A------K--------------SVQSSNSTTE-NNNG [...]
+B5ME23.2/165-368   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q3TRH0.1/46-194    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q3TRK2.1/1-88      ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8BWL0.1/2-169     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q1LZM4.1/2-292     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A8MYY3.2/946-1098  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A0CJW3.1/434-742   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C9J5L7.1/946-1098  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D2GZL8.1/900-1051  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4S4D3.1/395-556   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4T574.1/639-850   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4T0A8.1/27-228    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C3ZJT1.1/371-689   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C9JA83.1/3-471     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C9JAR8.1/119-1283  -----------------------------------------------------------------------------------------------------------QQQPQQQPQ----------------------------ALP-----------------------------RY-PREVPPRFRH-----QEHKQLLKRGQHFPVIAANLGSAVKVLN-SQSE-SSALTNQQPQNNG-EVQNSKNQSDINH---ST-SGSHYENSQRGPVSST-S-----DSSTN---CKNAVVSDL-SEKEAWPSAPG-SD-PELASEC-MDADS--ASSSESERNITIM----------ASGNTGG--------EKDGL-----RNSTGLGSQNKFVVGSSSNN--------------VGHGSSTGPWG------FSHG-AIISTCQV--------------SVDAPESKSESSNNR [...]
+Q8NDV7.2/119-1962  -----------------------------------------------------------------------------------------------------------QQQPQQQPQ----------------------------ALP-----------------------------RY-PREVPPRFRH-----QEHKQLLKRGQHFPVIAANLGSAVKVLN-SQSE-SSALTNQQPQNNG-EVQNSKNQSDINH---ST-SGSHYENSQRGPVSST-S-----DSSTN---CKNAVVSDL-SEKEAWPSAPG-SD-PELASEC-MDADS--ASSSESERNITIM----------ASGNTGG--------EKDGL-----RNSTGLGSQNKFVVGSSSNN--------------VGHGSSTGPWG------FSHG-AIISTCQV--------------SVDAPESKSESSNNR [...]
+B4DST4.1/1-168     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q05CE3.1/20-1014   ----LVQEEEQLMEEKKKKKDDKKKKEAAQKKATEQKIKVPEQIKP-----SVS-QPQPANS-------D-NGTST--------------------ATSTNNNAKR-ATASNQQPPPPQQQ------------------QPQQEQ-QQQQP---------------------QALPRY-PREVPPRFRH-----QEHKQLLKRGQHFPVIAANLGSAVKVLN-SQSE-SSAVTNQQPQNNG-EVQNSKSQSDINH---NT-SGSHYENCQRGPVSST-S-----DCSTS---C-KNAVNDL-LEKEAWPSAPG-SD-PELAPEC-IDADS--ASNSESERNITVM----------ASGNTGG--------EKDGLRNSTGLGSQSKFVVGSS----SNN---------------VGHGSSTGPWG------FPHG-ALISTCQV--------------SVDAPESKPESSNNR [...]
+Q8BNF0.2/9-877     -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------VVNR [...]
+Q6ZPQ4.1/1-243     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D2GZL8.1/5-902     --------------------------------------SVPEVTKP-----SLS-QPTAASP-------IGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------SAA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPPSCMLLGGGAGPPP-STAP-GANSNNA--QVTG-TPLQSDSGTAPESTLGGA-AASNYANSTWGPGASSNN-----GASPNPIHIWDKVIVDG-SDTEEWPCIAS-KD-TESSSENTTDNNS--ASNPGSEKS-TL------------PGSTTS--------NK------------GKGSQCQS----ASS----------------GNECNLGVWK------SDPK-T------K--------------SVQSSNSTTE-SNNG [...]
+Q3TRH0.1/1-49      ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8BKI2.2/38-1167   -QEKEQEREEQLMEDKKRKKEDKKKKEATQ-KVTEQKTKVPEVTKP-----SLS-QPTAASP-------IGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------SAA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPPSCMLLGGGAGPPP-CTAP-GANPNNN-AQVTG-ALLQSESGTAPESTLGGA-AASNYANSTWGPGASSNS-----GASPNPIHIWDKVIVDG-SDMEEWPCIAS-KD-TESSSENTTDNNS--ASNPGSEKS-SL------------PGSTTS--------NK------------GKGSQCQA----ASS----------------GNECNLGVWK------SDPK-A------K--------------SVQPPNSTSD-SNNG [...]
+Q4TA88.1/5-275     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B1ATC3.1/2-1028    ------------EEKKKKKQEDKKKKEGAQKKAADQKTKVPELTKT-----CSS-QPQPAGT-------SPSTSTS--------------------TISSGSNGKR--ASACGQQP----------------------------AAS-----------------------------RYLPREVPPRFR-Q----QEQKQLLKRGQPLPTGGLT---SLNSAQ-AAGPAGASPPPL--PGAG-A-QQHPSKLQQDLGHSG--LVDHYENSHWGQHPSYRS-----EAN----CSWDKVIIDR-TEPEVWPSIPV-TE-TESASECPTDTDS--ASNCGSENS-SM-----------ATGSAQS--------SFPSHLKKTNGSHGTNGALVQS----PSNQSALG------AGGTNGNGGVARVWGVATSSSSGLA-H------C--------------SVGGGDGKMD-NMIG [...]
+B7ZC94.1/2-868     ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------EANCSWDKVIIDR-TEPEVWPSIPV-TE-TESASECPTDTDS--ASNCGSENS-SM-----------ATGSAQS--------SFPSHLKKTNGSHGTNGALVQS----PSNQSALG------AGGTNGNGGVARVWGVATSSSSGLA-H------C--------------SVGGGDGKMD-NMIG [...]
+Q3UHC0.2/4-818     ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------GSAQS-SFPS--------HLKKTNGS--------HG------------TNGALVQS----PSNQSALG------AGGTNGNGGVARVWGVATSSSSGLA-H------C--------------SVGGGDGKMD-NMIG [...]
+D3ZRA6.1/2-1000    ------------EEKKKKKQEDKKKKEGAQKKAADQKTKVPELTKT-----CSS-QPQPAGT-------SPSTSTS--------------------TISSGSNGKR--ASACGQQP----------------------------AAS-----------------------------RYLPREVPPRFR-Q----QEQKQLLKRGQPLPTGSLT---SVSPAQ-AAGPAGASPPPL--PGAG-A-QQHPSKLQPDLGHSG--LAGHYENCHWGQHPSYRS-----EAD----CSWDKVIIDR-TDQELWPSTPV-TE-TESASECPTDTDS--ASNCGSENS-SM-----------ATGSTQS--------SFPGHPKKTNGSHGTNGTLVQS----PSNPSALG------AGAANGNGGMARVWGVATGSSSGLA-H------C--------------SVGGGDGKMD-NMIG [...]
+D2H997.1/2-866     -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ASSSWDKVIIDR-TDKEAWPSITG-AE-TESASECTTDTDS--ASNCGSENS-SMATGSAQGTFTGHT--------------KKTN-----GNNGTNGALVQS----PSNQSALG------AGGANGNGNGARVWGVATGSSSGPA-H------C--------------SLSGGDGKMD-NMIG [...]
+Q9HCJ0.3/4-822     ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------GSAQG-NF------------TGHTKK--------TNGN--------NGTNGALVQS----PSNQSALG------AGGANSNGSAARVWGVATGSSSGLA-H------C--------------SVSGGDGKMD-TMIG [...]
+C3ZJT1.1/328-369   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4T0A9.1/370-579   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4T574.1/239-596   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B7PWH5.1/252-389   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3N1G0.1/6-1260    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4H886.1/6-148     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3P9S0.1/6-1293    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4PW21.1/6-1287    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4IIY1.1/6-1290    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4R2G2.1/6-1156    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8SY33.1/6-1289    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8MSF0.1/1-120     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q29CP6.2/6-1291    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4H887.1/32-1121   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4NHM7.1/6-1344    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4MF11.1/6-1287    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D0Z7B2.1/6-1290    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C1K8B6.1/4-244     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C1K890.1/4-244     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C1K8V5.1/4-177     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4L7C4.1/6-1178    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4JZV3.1/6-1310    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q172C7.1/363-538   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B0WXH0.1/311-1189  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q172C8.1/192-646   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A7UUT0.1/13-626    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A0NFA3.2/8-516     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B1ATC3.1/1015-1647 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B7ZC94.1/855-1477  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q3UHC0.2/805-1437  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D2H997.1/853-1477  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9HCJ0.3/810-1437  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4T574.1/894-1324  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4T0A8.1/405-529   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B0R1E2.1/1-289     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C9JA83.1/468-1101  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C9JAR8.1/1280-1913 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D2I222.1/1-1905    ---------------------------------------VPEQIKP-----SVS-QPQPANS-------N-NGTST--------------------ATSTNNNAKR-ATANNPQQQ----------------------------QQQQPQPPQQPQPPQPPQQPPQQPPQPAQALPRY-PREVPPRFRH-----QEHKQLLKRGQHFPVIAANLGSAVKVLS-SQSE-SSALTNQQPQNNG-EVQNSKNQSDINH---NT-SGSHYENSQRGPVSS-PS-----DSSTN---CKNAVVNDS-PEKEAWPSTPG-SD-PELASEC-MDADS--ASSSESERNITIM----------ASGSTGG--------EKDGLRNSTGLGSQSKFVVGSS----SNN---------------VGHGSSTGPWG------FSHG-AIISTCQV--------------SVDAPESKSESSNNR [...]
+B3KSX2.1/4-277     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D4A372.1/95-1931   -----------------------------------------------------------------------------------------------------------QQQQQQQPQ----------------------------ALP-----------------------------RY-PREVPPRFRH-----QEHKQLLKRGQHFPVIAANLGSAVKVLN-SQSE-SSAVTNQQPQNNG-EVQNSKSQSDINH---NT-SGSHYENCQRGPVSST-S-----DCSTS---C-KNAVNDL-LEKEAWPSAPG-SD-PELASEC-IDADS--ASNSESERNITVM----------ASGNTGG--------EKDGLRNSTGLGPQSKFVVGSS----SNN---------------VGHGSSTGPWG------FPHG-AIISTCQV--------------SVDAPESKPESSNSR [...]
+Q3UHK8.1/1266-1896 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q99JR3.2/24-648    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8BWM2.1/1-337     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8BXM6.1/4-627     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q3UQ45.1/7-500     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q3UHK8.1/20-1269   ----LVQEEEQLMEEKKKKKDDKKKKEAAQKKATEQKIKVPEQIKP-----SVS-QPQPANS-------D-NGTST--------------------ATSTNNNAKR-ATASNQQPPPPQQQ------------------QPQQEQ-QQQQP---------------------QALPRY-PREVPPRFRH-----QEHKQLLKRGQHFPVIAANLGSAVKVLN-SQSE-SSAVTNQQPQNNG-EVQNSKSQSDINH---NT-SGSHYENCQRGPVSST-S-----DCSTS---C-KNAVNDL-LEKEAWPSAPG-SD-PELAPEC-IDADS--ASNSESERNITVM----------ASGNTGG--------EKDGLRNSTGLGSQSKFVVGSS----SNN---------------VGHGSSTGPWG------FPHG-ALISTCQV--------------SVDAPESKPESSNNR [...]
+Q3UUG8.1/1-727     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4S9I4.1/33-1574   -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------TGS-PCTGDGNSNWGKVLVDGSTDKSNNTS-TSSAVWPPSSFSCSSSSSSSGCGSG-SD-PELASEC-MDADS--SSLNGSEKH-LAAV-------TPVMMSSNA--------SS------------SVSSTASS----PSSSMVTSAVMIGVAVNGDGNGNSRHMLG------GGMG-T------VSGSNSGNVTGPPHFSVAGSSNIGSNNMGN [...]
+Q4S4D3.1/557-654   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q1LZM4.1/292-736   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8BXV9.1/2-142     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8BZH2.1/5-63      ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4S4D3.1/651-825   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4TA88.1/319-457   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4T0A8.1/329-402   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B7PWH5.1/349-695   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q7Q3B9.4/7-766     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A7UUT0.1/686-771   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D3B9K1.1/622-823   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3M562.1/702-895   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q2GV87.1/66-278    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A5E351.1/72-416    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+P20105.2/537-654   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4PJL3.1/533-654   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3M4K4.1/533-691   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C1GVG2.1/279-439   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C0SAP5.1/281-410   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C1GDP1.1/281-415   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q54LR6.1/53-262    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A3F295.1/6-117     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A3F290.1/9-110     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4NNJ8.1/320-445   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4J985.1/306-430   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4ME65.1/311-417   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4JL62.1/290-395   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q25AW7.1/146-228   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D1ZFW1.1/794-871   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4P3Y1.1/128-184   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4P2T9.1/335-396   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q5TST0.3/683-841   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D3BH34.1/115-236   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4NP54.1/2-69      ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C0SUE2.1/77-175    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4JY35.1/15-92     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4KT28.1/222-266   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A8NN12.1/68-136    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D0H0K7.1/432-591   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A5E1Y8.1/358-537   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A0BQD1.1/165-319   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4K3C6.1/67-191    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4MHJ9.1/106-306   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9VYA6.1/174-225   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q86NT0.1/173-270   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D3B7T2.1/209-345   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4PH83.1/181-247   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q54FL0.1/951-1244  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A1C5H3.1/188-267   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q54X31.1/100-217   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C5GQY8.1/409-612   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4NE44.1/470-686   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4L803.1/240-323   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+O42323.1/299-489   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q7SGG0.1/13-167    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q86KE5.1/77-311    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3NV15.1/1200-1273 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4PZT3.1/1188-1272 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C1GEW9.1/11-129    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A5E7X5.1/33-235    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4N2I1.1/44-159    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3MYX8.1/14-153    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4PF35.1/18-283    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4KN27.1/225-337   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q6C9A9.1/660-764   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A3F293.1/10-109    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A3F299.1/12-111    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B0X8C2.1/150-263   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4JPX4.1/284-409   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A5E3S9.1/278-450   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q5TSQ4.3/457-676   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3MKU5.1/256-639   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q55F37.1/112-343   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+P20105.2/153-385   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4PJL3.1/173-393   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3NHT3.1/152-330   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3M4K4.1/89-378    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A8MYY3.2/1098-1737 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B0QY77.1/879-1390  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4E231.1/251-762   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B5ME23.2/368-1007  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C9J5L7.1/1098-1737 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B7ZB91.1/13-478    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D2GZL8.1/1051-1690 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q3TRH0.1/194-838   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8BKI2.2/1167-1810 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8BWL0.1/169-812   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q3TRK2.1/88-731    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q66JU9.1/2-312     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8VD67.1/1-249     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q6P7B1.1/2-432     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q148P0.1/1-249     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9JHZ1.1/1-249     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4S4D3.1/823-1099  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4TA89.1/1-316     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B1ATC3.1/1646-1899 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B7ZC94.1/1478-1731 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q3UHC0.2/1436-1689 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D2H997.1/1476-1729 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9HCJ0.3/1434-1689 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4T574.1/1322-1578 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4T0A8.1/526-801   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B0R1E2.1/290-554   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4S9I4.1/1569-1835 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C3ZJT1.1/730-1350  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C0PFW8.1/269-336   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C0HHH3.1/270-337   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B0WTJ5.1/228-1404  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q172C6.1/6-1080    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q7Q3B9.4/781-1217  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q172C8.1/672-1244  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B0WXG8.1/1199-1287 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q172C7.1/573-1487  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B0WXH0.1/1191-1443 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A7UUT0.1/838-1208  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B0WXG8.1/386-1198  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B8RJB3.1/9-266     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B7PWH5.1/720-1088  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A0NFA3.2/687-1175  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4KQM5.1/242-419   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A7SDW4.1/430-1260  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A7SDW4.1/1319-1671 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A7T6Q0.1/2-144     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3RQ20.1/1143-1394 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q2I2V8.1/539-606   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A5BE57.1/246-300   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9RQB9.1/236-287   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B2RXY9.1/193-253   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A2A5N3.1/193-253   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B2GUY3.1/194-262   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D4AC14.1/194-262   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D4AC21.1/123-191   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C4QZM5.1/235-294   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C5WPD4.1/242-318   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q10N87.1/216-320   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B8AL31.1/216-320   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A5B3Z9.1/212-306   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9RQB9.1/109-183   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9GH32.1/107-174   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+O04319.1/114-194   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C5YBU9.1/128-201   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8RXR5.1/110-177   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+P42731.1/126-193   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9M6E6.1/117-184   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9H7X8.1/113-180   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B5DF80.1/306-473   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q2VIP3.1/296-392   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q3ZCS4.1/296-393   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q5VX58.1/296-390   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9H361.2/296-390   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q2VIN7.1/296-392   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q2VIN9.1/296-390   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B2GUY3.1/296-379   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D4AC14.1/296-379   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D4AC21.1/225-308   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q6IQ30.1/296-379   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4VC03.1/296-379   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q13310.1/296-379   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D3Z5M2.1/296-380   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A4IFC3.1/296-379   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B1ANR0.1/296-379   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D2I596.1/309-392   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q99LF8.1/296-380   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q15164.1/107-185   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q91YZ8.1/296-380   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A3KFU8.1/296-380   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q6PHQ9.1/296-380   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A3KFU5.1/296-380   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q3UX16.1/225-309   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q7T3G5.1/297-380   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8QGJ7.1/296-379   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4RNX8.1/296-379   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q3UTA6.1/197-279   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9D4E6.1/307-466   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D2H6M0.1/296-405   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4VXU2.1/296-404   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q98SP8.2/296-391   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B2RXY9.1/296-394   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A2A5N3.1/296-393   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D3ZAS7.1/296-399   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C5YBU9.1/329-416   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B6U4M0.1/324-410   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9H7X8.1/304-412   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9H7X9.1/314-422   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9GT62.1/311-412   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A9TLC5.1/312-407   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q05196.2/328-430   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A2YEJ5.1/343-442   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q69X94.1/342-443   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9FTY9.1/365-463   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+P31209.2/366-455   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B6K6T8.1/356-444   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B6K033.1/364-457   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q6CDH3.1/332-428   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D3AVQ3.1/284-366   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q54BM2.1/286-375   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q5KBW2.1/367-420   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4P8R9.1/368-413   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A8NF86.1/337-425   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A5BE57.1/307-474   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9RQB9.1/300-388   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9GH32.1/295-362   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+O04319.1/304-419   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3S2W8.1/76-163    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C4Q4K6.1/224-436   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A9USE7.1/720-774   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D4APH2.1/480-541   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A9USE7.1/997-1101  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A7AT74.1/621-697   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q7Q9F7.4/282-427   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C5WVW4.1/223-289   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C4IYK3.1/223-290   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B6UA93.1/223-290   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B8APB9.1/226-292   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q10R21.1/226-292   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q0DUQ0.1/248-314   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9RIB9.1/231-294   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C0PPV9.1/259-392   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C0PT30.1/259-393   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B8LRZ2.1/277-363   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A9NX92.1/275-362   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A9NWA0.1/248-328   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A9TFH5.1/223-287   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A9TZW4.1/245-319   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9GNX9.1/266-364   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9MVK8.1/264-361   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A5BPW5.1/140-241   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9R7H3.1/281-377   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9FX88.1/338-415   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9N4W3.1/235-341   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9HRX8.1/250-356   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9RY32.1/285-382   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8LFI9.1/244-343   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q0WW84.1/287-386   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9LJL7.1/287-386   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q2V9A1.1/201-306   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A5BF74.1/281-378   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q6R969.1/253-422   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q2V9C2.1/258-417   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q2PEV8.1/238-322   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C5WUD2.1/243-339   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C0P488.1/242-336   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q10HZ8.1/240-333   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9AY92.1/240-333   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q10HZ7.1/240-333   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B8AKU6.1/240-333   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q0DQQ8.1/284-377   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9LEB4.1/261-347   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A5C5B3.1/256-335   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9I0E1.1/253-334   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9FPJ8.1/236-325   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9FFU0.1/236-325   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8LBV8.1/233-325   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9SAB3.1/234-326   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A9S4M3.1/42-65     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A9T3C5.1/56-79     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q6DGV1.1/174-212   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B5LEQ5.1/179-323   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A3GHN7.2/350-469   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D0N277.1/201-240   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4NBP3.1/171-277   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3M300.1/220-284   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4MC02.1/171-283   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4JIH9.1/171-286   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C4XVP0.1/46-94     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A3CUY7.1/2-69      ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q2FSR7.1/6-69      ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C5DIP1.1/2-75      ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q54C48.1/271-412   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3S2W8.1/165-267   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D3BFK6.1/320-440   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A8PU70.1/566-908   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4S4D3.1/1091-1191 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A8MYY3.2/16-949    -QEKEQEREEQLMEDKKRKKEDKKKKEATQ-KVTEQKTKVPEVTKP-----SLS-QPTAASP-------IGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------SAA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPPSCMLLGGGAGPPP-CTAP-GANPNNA--QVTG-ALLQSESGTAPDSTLGGA-AASNYANSTWGSGASSNN-----GTSPNPIHIWDKVIVDG-SDMEEWPCIAS-KD-TESSSENTTDNNS--ASNPGSEKS-TL------------PGSTTS--------NK------------GKGSQCQS----ASS----------------GNECNLGVWK------SDPK-A------K--------------SVQSSNSTTE-NNNG [...]
+B5ME23.2/16-165    -QEKEQEREEQLMEDKKRKKEDKKKKEATQ-KVTEQKTKVPEVTKP-----SLS-QPTAASP-------IGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------SAA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPPSCMLLGGGAGPPP-CTAP-GANPNNA--QVTG-ALLQSESGTA----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C9J5L7.1/16-949    -QEKEQEREEQLMEDKKRKKEDKKKKEATQ-KVTEQKTKVPEVTKP-----SLS-QPTAASP-------IGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------SAA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPPSCMLLGGGAGPPP-CTAP-GANPNNA--QVTG-ALLQSESGTAPDSTLGGA-AASNYANSTWGSGASSNN-----GTSPNPIHIWDKVIVDG-SDMEEWPCIAS-KD-TESSSENTTDNNS--ASNPGSEKS-TL------------PGSTTS--------NK------------GKGSQCQS----ASS----------------GNECNLGVWK------SDPK-A------K--------------SVQSSNSTTE-NNNG [...]
+B4DKJ5.1/1-276     MREKEQEREEQLMEDKKRKKEDKKKKEATQ-KVTEQKTKVPEVTKP-----SLS-QPTAASP-------IGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------SAA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPPSCMLLGGGAGPPP-CTAP-GANPNNA--QVTG-ALLQSESGTAPDSTLGGA-AASNYANSTWGSGASSNN-----GTSPNPIHIWDKVIVDG-SDMEEWPCIAS-KD-TESSSENTTDNNS--ASNPGSEKS-TL------------PGSTTS--------NK------------GKGSQCQS----ASS----------------GNECNLGVWK------SDPK-A------K--------------SVQSSKPKGQ----- [...]
+Q8BX83.2/38-410    -QEKEQEREEQLMEDKKRKKEDKKKKEATQ-KVTEQKTKVPEVTKP-----SLS-QPTAASP-------IGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------SAA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPPSCMLLGGGAGPPP-CTAP-GANPNNN-AQVTG-ALLQSESGTAPESTLGGA-AASNYANSTWGPGASSNS-----GASPNPIHIWDKVIVDG-SDMEEWPCIAS-KD-TESSSENTTDNNS--ASNPGSEKS-SL------------PGSTTS--------NK------------GKGSQCQA----ASS----------------GNECNLGVWK------SDPK-A------K--------------SVQPPNSTSD-SNNG [...]
+B1H1W1.1/13-388    -REKEQEREEQLMEDKKRKKEDKKKKEAAQ-KVTEQKTKVPEVTKP-----SSS-QATAASL-------PGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------STA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPASCMLPGGGAGAPPSTTAP-GACPGNA-QPGVG-ALLQGESGPTTDSSSGAA-ATSNYANSTWGSGGPASS-----GPTTNPPHAWDKVIVDG-SDMEEWPCIAG-VD-AEPPSDNATDNNS--ASNSASEKG-PP------------QGSTTS--------HK------------GRGGQGQQ----QQQ---------------PGSECIQGVWK------SDPK-A------K--------------PVPSSNPAAE-GVNR [...]
+Q4T1P6.1/6-46      -------------------------------------------------------------------------------------------------------------TPPQQQC----------------------------QLSSA-------------------------SARYPPREVPPRFR-Q----QEHKQLLKRGQPLP------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4S4D3.1/1-379     ------------MEDKKRKKDDKRKRETSQ-KVTEQKNKVPELTKP-----ASA-QPSAPQI-------SSASHSPGPTPSASPSPATLGPGSAAAPPQGGNNAKR-LAGANGQPCSNTVSPPAASGPSPAGNGSANSGGQTPQQQP-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPL-SSMLLGGGGGG------D-GPNANMA--ATCD-SVAASSSTALTSSSVAAASTTSNYANSMWGVSS--GS-----QTSSQ---GREKVIVDG-NDLEEWPSIAG-ND-GARAPFTGLGGGS---ANSGKPVN-SISA-------SGNQSSPTS--------SF------------SMPNECIQ----SSN----------------GVAWGVAASQ------GHLSGG------N--------------AVAASGPLLQ-QPSS [...]
+Q4T5V2.1/1-136     ------------MEDKKKKKDDKKKKEISQ-KVSEQKIKDTSCSQPLATPGSVSPSPGPATPSSPTPGAAGVSAQV--------------------PPCGGNNAKQWTAVANGQPSSQTSQT----------------SQQQQQQQQ-----------------------------RYMSREVPPRFRSQ----QDHKVLLKRGQPPL-SSMLLGGGGE-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C3ZJT1.1/159-315   -RLQMEEEEEQRQEEERRKREEKKKKQQQL-KAKAQELKAKEAE-S-----AKS-QPSQAQP-------AQQ------------------------------AAKR-PSSAQGQQP----------------------------P-------------------------------RY-PREVPPRFQQQAQKQQHHKQKQQGGQGK---KQQGGSGWGSPP-PQMP-SAAPQVG-PSGWGDSNPRSQENSWANAAKKGM-APENFTNGAK---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C9JAR8.1/20-121    ----LVQEEEQLMEEKKKKKDDKKKKEAAQKKATEQKIKVPEQIKP-----SVS-QPQPANS-------N-NGTST--------------------ATSTNNNAKR-ATANNQQPQ----------------------------QQQ----------------------------QQQQPQQQQPQQQPQ---PQPQQQQ--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8NDV7.2/20-121    ----LVQEEEQLMEEKKKKKDDKKKKEAAQKKATEQKIKVPEQIKP-----SVS-QPQPANS-------N-NGTST--------------------ATSTNNNAKR-ATANNQQPQ----------------------------QQQ----------------------------QQQQPQQQQPQQQPQ---PQPQQQQ--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D4A372.1/1-97      ------------MEEKKRKKDDKKKKEAAQKKATEQKIKVPEQIKP-----SVS-QPQPANS-------D-NGTST--------------------ATSTNNNAKR-ATASNQQPP----------------------------PPP-----------------------------QQ-PQQQQQQQQQQ----QEQQQQQQQQQQ--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4T574.1/1-220     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------SWDKVIIDR-SDTEAWPSISCSSD-LNHPV---VPECP--VGSASSNQD-TS------------AVTTTC--------SS------------SSLSMA-T----GAT----------------GQQAHYASLK------ANNN-M------T--------------GPGSANILTS-N-RG [...]
+Q4T0A9.1/1-255     -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------WDQLIIDQ-RDTEAWPLIKL-SPSQASPGGCSLDTDPGPLTSSGSTSN-SCSAVN----MATGANSQTGHFPANHLSNK------------ANSGLNHT----NHTGTS----------MLSNQVAANRSWG------SGPG-PS----HCP-----------SQSSVGTEVKND-SPVG [...]
+//
diff --git a/test/scripts/automated/belvu/test39 b/test/scripts/automated/belvu/test39
new file mode 100755
index 0000000..f30a703
--- /dev/null
+++ b/test/scripts/automated/belvu/test39
@@ -0,0 +1,25 @@
+#!/bin/ksh
+#
+# Description:
+#   Sort by similarity to first sequence (large alignment).
+
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences to the saved results
+diffs=`belvu -o Selex -S S $data_dir/ALIGN.selex >&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
+
diff --git a/test/scripts/automated/belvu/test39_results b/test/scripts/automated/belvu/test39_results
new file mode 100644
index 0000000..b990064
--- /dev/null
+++ b/test/scripts/automated/belvu/test39_results
@@ -0,0 +1,371 @@
+Q9UPQ9.4/1-1833    MREKEQEREEQLMEDKKRKKEDKKKKEATQ-KVTEQKTKVPEVTKP-----SLS-QPTAASP-------IGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------SAA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPPSCMLLGGGAGPPP-CTAP-GANPNNA--QVTG-ALLQSESGTAPDSTLGGA-AASNYANSTWGSGASSNN-----GTSPNPIHIWDKVIVDG-SDMEEWPCIAS-KD-TESSSENTTDNNS--ASNPGSEKS-TL------------PGSTTS--------NK------------GKGSQCQS----ASS----------------GNECNLGVWK------SDPK-A------K--------------SVQSSNSTTE-NNNG [...]
+Q9UPQ9.4/1-1833    MREKEQEREEQLMEDKKRKKEDKKKKEATQ-KVTEQKTKVPEVTKP-----SLS-QPTAASP-------IGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------SAA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPPSCMLLGGGAGPPP-CTAP-GANPNNA--QVTG-ALLQSESGTAPDSTLGGA-AASNYANSTWGSGASSNN-----GTSPNPIHIWDKVIVDG-SDMEEWPCIAS-KD-TESSSENTTDNNS--ASNPGSEKS-TL------------PGSTTS--------NK------------GKGSQCQS----ASS----------------GNECNLGVWK------SDPK-A------K--------------SVQSSNSTTE-NNNG [...]
+Q8BKI2.2/38-1167   -QEKEQEREEQLMEDKKRKKEDKKKKEATQ-KVTEQKTKVPEVTKP-----SLS-QPTAASP-------IGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------SAA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPPSCMLLGGGAGPPP-CTAP-GANPNNN-AQVTG-ALLQSESGTAPESTLGGA-AASNYANSTWGPGASSNS-----GASPNPIHIWDKVIVDG-SDMEEWPCIAS-KD-TESSSENTTDNNS--ASNPGSEKS-SL------------PGSTTS--------NK------------GKGSQCQA----ASS----------------GNECNLGVWK------SDPK-A------K--------------SVQPPNSTSD-SNNG [...]
+A8MYY3.2/16-949    -QEKEQEREEQLMEDKKRKKEDKKKKEATQ-KVTEQKTKVPEVTKP-----SLS-QPTAASP-------IGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------SAA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPPSCMLLGGGAGPPP-CTAP-GANPNNA--QVTG-ALLQSESGTAPDSTLGGA-AASNYANSTWGSGASSNN-----GTSPNPIHIWDKVIVDG-SDMEEWPCIAS-KD-TESSSENTTDNNS--ASNPGSEKS-TL------------PGSTTS--------NK------------GKGSQCQS----ASS----------------GNECNLGVWK------SDPK-A------K--------------SVQSSNSTTE-NNNG [...]
+C9J5L7.1/16-949    -QEKEQEREEQLMEDKKRKKEDKKKKEATQ-KVTEQKTKVPEVTKP-----SLS-QPTAASP-------IGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------SAA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPPSCMLLGGGAGPPP-CTAP-GANPNNA--QVTG-ALLQSESGTAPDSTLGGA-AASNYANSTWGSGASSNN-----GTSPNPIHIWDKVIVDG-SDMEEWPCIAS-KD-TESSSENTTDNNS--ASNPGSEKS-TL------------PGSTTS--------NK------------GKGSQCQS----ASS----------------GNECNLGVWK------SDPK-A------K--------------SVQSSNSTTE-NNNG [...]
+B0QY77.1/1-879     ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------WK------SDPK-A------K--------------SVQSSNSTTE-NNNG [...]
+D2GZL8.1/5-902     --------------------------------------SVPEVTKP-----SLS-QPTAASP-------IGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------SAA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPPSCMLLGGGAGPPP-STAP-GANSNNA--QVTG-TPLQSDSGTAPESTLGGA-AASNYANSTWGPGASSNN-----GASPNPIHIWDKVIVDG-SDTEEWPCIAS-KD-TESSSENTTDNNS--ASNPGSEKS-TL------------PGSTTS--------NK------------GKGSQCQS----ASS----------------GNECNLGVWK------SDPK-T------K--------------SVQSSNSTTE-SNNG [...]
+D2I222.1/1-1905    ---------------------------------------VPEQIKP-----SVS-QPQPANS-------N-NGTST--------------------ATSTNNNAKR-ATANNPQQQ----------------------------QQQQPQPPQQPQPPQPPQQPPQQPPQPAQALPRY-PREVPPRFRH-----QEHKQLLKRGQHFPVIAANLGSAVKVLS-SQSE-SSALTNQQPQNNG-EVQNSKNQSDINH---NT-SGSHYENSQRGPVSS-PS-----DSSTN---CKNAVVNDS-PEKEAWPSTPG-SD-PELASEC-MDADS--ASSSESERNITIM----------ASGSTGG--------EKDGLRNSTGLGSQSKFVVGSS----SNN---------------VGHGSSTGPWG------FSHG-AIISTCQV--------------SVDAPESKSESSNNR [...]
+Q8NDV7.2/119-1962  -----------------------------------------------------------------------------------------------------------QQQPQQQPQ----------------------------ALP-----------------------------RY-PREVPPRFRH-----QEHKQLLKRGQHFPVIAANLGSAVKVLN-SQSE-SSALTNQQPQNNG-EVQNSKNQSDINH---ST-SGSHYENSQRGPVSST-S-----DSSTN---CKNAVVSDL-SEKEAWPSAPG-SD-PELASEC-MDADS--ASSSESERNITIM----------ASGNTGG--------EKDGL-----RNSTGLGSQNKFVVGSSSNN--------------VGHGSSTGPWG------FSHG-AIISTCQV--------------SVDAPESKSESSNNR [...]
+D4A372.1/95-1931   -----------------------------------------------------------------------------------------------------------QQQQQQQPQ----------------------------ALP-----------------------------RY-PREVPPRFRH-----QEHKQLLKRGQHFPVIAANLGSAVKVLN-SQSE-SSAVTNQQPQNNG-EVQNSKSQSDINH---NT-SGSHYENCQRGPVSST-S-----DCSTS---C-KNAVNDL-LEKEAWPSAPG-SD-PELASEC-IDADS--ASNSESERNITVM----------ASGNTGG--------EKDGLRNSTGLGPQSKFVVGSS----SNN---------------VGHGSSTGPWG------FPHG-AIISTCQV--------------SVDAPESKPESSNSR [...]
+B5ME23.2/368-1007  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A8MYY3.2/1098-1737 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C9J5L7.1/1098-1737 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D2GZL8.1/1051-1690 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q3TRH0.1/194-838   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8BKI2.2/1167-1810 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8BWL0.1/169-812   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q3TRK2.1/88-731    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B0QY77.1/879-1390  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4E231.1/251-762   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B7ZB91.1/13-478    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q1LZM4.1/292-736   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q6P7B1.1/2-432     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q3UHK8.1/20-1269   ----LVQEEEQLMEEKKKKKDDKKKKEAAQKKATEQKIKVPEQIKP-----SVS-QPQPANS-------D-NGTST--------------------ATSTNNNAKR-ATASNQQPPPPQQQ------------------QPQQEQ-QQQQP---------------------QALPRY-PREVPPRFRH-----QEHKQLLKRGQHFPVIAANLGSAVKVLN-SQSE-SSAVTNQQPQNNG-EVQNSKSQSDINH---NT-SGSHYENCQRGPVSST-S-----DCSTS---C-KNAVNDL-LEKEAWPSAPG-SD-PELAPEC-IDADS--ASNSESERNITVM----------ASGNTGG--------EKDGLRNSTGLGSQSKFVVGSS----SNN---------------VGHGSSTGPWG------FPHG-ALISTCQV--------------SVDAPESKPESSNNR [...]
+C9JAR8.1/119-1283  -----------------------------------------------------------------------------------------------------------QQQPQQQPQ----------------------------ALP-----------------------------RY-PREVPPRFRH-----QEHKQLLKRGQHFPVIAANLGSAVKVLN-SQSE-SSALTNQQPQNNG-EVQNSKNQSDINH---ST-SGSHYENSQRGPVSST-S-----DSSTN---CKNAVVSDL-SEKEAWPSAPG-SD-PELASEC-MDADS--ASSSESERNITIM----------ASGNTGG--------EKDGL-----RNSTGLGSQNKFVVGSSSNN--------------VGHGSSTGPWG------FSHG-AIISTCQV--------------SVDAPESKSESSNNR [...]
+Q8BX83.2/38-410    -QEKEQEREEQLMEDKKRKKEDKKKKEATQ-KVTEQKTKVPEVTKP-----SLS-QPTAASP-------IGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------SAA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPPSCMLLGGGAGPPP-CTAP-GANPNNN-AQVTG-ALLQSESGTAPESTLGGA-AASNYANSTWGPGASSNS-----GASPNPIHIWDKVIVDG-SDMEEWPCIAS-KD-TESSSENTTDNNS--ASNPGSEKS-SL------------PGSTTS--------NK------------GKGSQCQA----ASS----------------GNECNLGVWK------SDPK-A------K--------------SVQPPNSTSD-SNNG [...]
+Q4S9I4.1/33-1574   -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------TGS-PCTGDGNSNWGKVLVDGSTDKSNNTS-TSSAVWPPSSFSCSSSSSSSGCGSG-SD-PELASEC-MDADS--SSLNGSEKH-LAAV-------TPVMMSSNA--------SS------------SVSSTASS----PSSSMVTSAVMIGVAVNGDGNGNSRHMLG------GGMG-T------VSGSNSGNVTGPPHFSVAGSSNIGSNNMGN [...]
+B1ATC3.1/2-1028    ------------EEKKKKKQEDKKKKEGAQKKAADQKTKVPELTKT-----CSS-QPQPAGT-------SPSTSTS--------------------TISSGSNGKR--ASACGQQP----------------------------AAS-----------------------------RYLPREVPPRFR-Q----QEQKQLLKRGQPLPTGGLT---SLNSAQ-AAGPAGASPPPL--PGAG-A-QQHPSKLQQDLGHSG--LVDHYENSHWGQHPSYRS-----EAN----CSWDKVIIDR-TEPEVWPSIPV-TE-TESASECPTDTDS--ASNCGSENS-SM-----------ATGSAQS--------SFPSHLKKTNGSHGTNGALVQS----PSNQSALG------AGGTNGNGGVARVWGVATSSSSGLA-H------C--------------SVGGGDGKMD-NMIG [...]
+Q3UUG8.1/1-727     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D3ZRA6.1/2-1000    ------------EEKKKKKQEDKKKKEGAQKKAADQKTKVPELTKT-----CSS-QPQPAGT-------SPSTSTS--------------------TISSGSNGKR--ASACGQQP----------------------------AAS-----------------------------RYLPREVPPRFR-Q----QEQKQLLKRGQPLPTGSLT---SVSPAQ-AAGPAGASPPPL--PGAG-A-QQHPSKLQPDLGHSG--LAGHYENCHWGQHPSYRS-----EAD----CSWDKVIIDR-TDQELWPSTPV-TE-TESASECPTDTDS--ASNCGSENS-SM-----------ATGSTQS--------SFPGHPKKTNGSHGTNGTLVQS----PSNPSALG------AGAANGNGGMARVWGVATGSSSGLA-H------C--------------SVGGGDGKMD-NMIG [...]
+Q05CE3.1/20-1014   ----LVQEEEQLMEEKKKKKDDKKKKEAAQKKATEQKIKVPEQIKP-----SVS-QPQPANS-------D-NGTST--------------------ATSTNNNAKR-ATASNQQPPPPQQQ------------------QPQQEQ-QQQQP---------------------QALPRY-PREVPPRFRH-----QEHKQLLKRGQHFPVIAANLGSAVKVLN-SQSE-SSAVTNQQPQNNG-EVQNSKSQSDINH---NT-SGSHYENCQRGPVSST-S-----DCSTS---C-KNAVNDL-LEKEAWPSAPG-SD-PELAPEC-IDADS--ASNSESERNITVM----------ASGNTGG--------EKDGLRNSTGLGSQSKFVVGSS----SNN---------------VGHGSSTGPWG------FPHG-ALISTCQV--------------SVDAPESKPESSNNR [...]
+Q66JU9.1/2-312     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8BNF0.2/9-877     -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------VVNR [...]
+Q1LZM4.1/2-292     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q3UHK8.1/1266-1896 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8BXM6.1/4-627     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q99JR3.2/24-648    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C9JAR8.1/1280-1913 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C9JA83.1/468-1101  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D2H997.1/2-866     -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ASSSWDKVIIDR-TDKEAWPSITG-AE-TESASECTTDTDS--ASNCGSENS-SMATGSAQGTFTGHT--------------KKTN-----GNNGTNGALVQS----PSNQSALG------AGGANGNGNGARVWGVATGSSSGPA-H------C--------------SLSGGDGKMD-NMIG [...]
+B4DKJ5.1/1-276     MREKEQEREEQLMEDKKRKKEDKKKKEATQ-KVTEQKTKVPEVTKP-----SLS-QPTAASP-------IGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------SAA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPPSCMLLGGGAGPPP-CTAP-GANPNNA--QVTG-ALLQSESGTAPDSTLGGA-AASNYANSTWGSGASSNN-----GTSPNPIHIWDKVIVDG-SDMEEWPCIAS-KD-TESSSENTTDNNS--ASNPGSEKS-TL------------PGSTTS--------NK------------GKGSQCQS----ASS----------------GNECNLGVWK------SDPK-A------K--------------SVQSSKPKGQ----- [...]
+B1H1W1.1/13-388    -REKEQEREEQLMEDKKRKKEDKKKKEAAQ-KVTEQKTKVPEVTKP-----SSS-QATAASL-------PGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------STA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPASCMLPGGGAGAPPSTTAP-GACPGNA-QPGVG-ALLQGESGPTTDSSSGAA-ATSNYANSTWGSGGPASS-----GPTTNPPHAWDKVIVDG-SDMEEWPCIAG-VD-AEPPSDNATDNNS--ASNSASEKG-PP------------QGSTTS--------HK------------GRGGQGQQ----QQQ---------------PGSECIQGVWK------SDPK-A------K--------------PVPSSNPAAE-GVNR [...]
+B7ZC94.1/2-868     ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------EANCSWDKVIIDR-TEPEVWPSIPV-TE-TESASECPTDTDS--ASNCGSENS-SM-----------ATGSAQS--------SFPSHLKKTNGSHGTNGALVQS----PSNQSALG------AGGTNGNGGVARVWGVATSSSSGLA-H------C--------------SVGGGDGKMD-NMIG [...]
+B4E231.1/1-251     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9JHZ1.1/1-249     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q148P0.1/1-249     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q3UHC0.2/4-818     ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------GSAQS-SFPS--------HLKKTNGS--------HG------------TNGALVQS----PSNQSALG------AGGTNGNGGVARVWGVATSSSSGLA-H------C--------------SVGGGDGKMD-NMIG [...]
+Q3UHC0.2/805-1437  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B1ATC3.1/1015-1647 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8VD67.1/1-249     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D2H997.1/853-1477  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9HCJ0.3/4-822     ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------GSAQG-NF------------TGHTKK--------TNGN--------NGTNGALVQS----PSNQSALG------AGGANSNGSAARVWGVATGSSSGLA-H------C--------------SVSGGDGKMD-TMIG [...]
+Q9HCJ0.3/810-1437  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B7ZC94.1/855-1477  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q3UQ45.1/7-500     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B5ME23.2/165-368   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8SY33.1/6-1289    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4PW21.1/6-1287    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q29CP6.2/6-1291    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4IIY1.1/6-1290    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C9JA83.1/3-471     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3P9S0.1/6-1293    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4TA89.1/1-316     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3N1G0.1/6-1260    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4NHM7.1/6-1344    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B0WTJ5.1/228-1404  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4R2G2.1/6-1156    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q172C6.1/6-1080    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4MF11.1/6-1287    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D0Z7B2.1/6-1290    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8BWM2.1/1-337     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4JZV3.1/6-1310    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q172C7.1/573-1487  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8BWL0.1/2-169     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4H887.1/32-1121   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C3ZJT1.1/730-1350  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4T574.1/894-1324  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A8MYY3.2/946-1098  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C9J5L7.1/946-1098  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B5ME23.2/16-165    -QEKEQEREEQLMEDKKRKKEDKKKKEATQ-KVTEQKTKVPEVTKP-----SLS-QPTAASP-------IGSSPSP--------------------PVNGGNNAKR-VAVPNGQPP----------------------------SAA-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPPPSCMLLGGGAGPPP-CTAP-GANPNNA--QVTG-ALLQSESGTA----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D2GZL8.1/900-1051  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q3TRH0.1/46-194    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9HCJ0.3/1434-1689 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D2H997.1/1476-1729 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4S4D3.1/823-1099  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B7ZC94.1/1478-1731 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B1ATC3.1/1646-1899 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q3UHC0.2/1436-1689 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4T0A8.1/526-801   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4TA88.1/5-275     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4S4D3.1/1-379     ------------MEDKKRKKDDKRKRETSQ-KVTEQKNKVPELTKP-----ASA-QPSAPQI-------SSASHSPGPTPSASPSPATLGPGSAAAPPQGGNNAKR-LAGANGQPCSNTVSPPAASGPSPAGNGSANSGGQTPQQQP-----------------------------RYMPREVPPRFRCQ----QDHKVLLKRGQPPL-SSMLLGGGGGG------D-GPNANMA--ATCD-SVAASSSTALTSSSVAAASTTSNYANSMWGVSS--GS-----QTSSQ---GREKVIVDG-NDLEEWPSIAG-ND-GARAPFTGLGGGS---ANSGKPVN-SISA-------SGNQSSPTS--------SF------------SMPNECIQ----SSN----------------GVAWGVAASQ------GHLSGG------N--------------AVAASGPLLQ-QPSS [...]
+Q4T574.1/1322-1578 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4S9I4.1/1569-1835 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4L7C4.1/6-1178    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8BXV9.1/2-142     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B0R1E2.1/290-554   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B0WXG8.1/386-1198  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q172C8.1/672-1244  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q6ZPQ4.1/1-243     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B0WXH0.1/311-1189  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B0R1E2.1/1-289     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q7Q3B9.4/781-1217  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A0NFA3.2/687-1175  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C3ZJT1.1/371-689   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B7PWH5.1/720-1088  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3KSX2.1/4-277     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A7UUT0.1/838-1208  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q3TRK2.1/1-88      ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4T574.1/239-596   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4S4D3.1/395-556   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A7SDW4.1/430-1260  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4T574.1/639-850   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4T5V2.1/1-136     ------------MEDKKKKKDDKKKKEISQ-KVSEQKIKDTSCSQPLATPGSVSPSPGPATPSSPTPGAAGVSAQV--------------------PPCGGNNAKQWTAVANGQPSSQTSQT----------------SQQQQQQQQ-----------------------------RYMSREVPPRFRSQ----QDHKVLLKRGQPPL-SSMLLGGGGE-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q7Q3B9.4/7-766     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4S4D3.1/651-825   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4T0A8.1/27-228    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B0WXH0.1/1191-1443 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q172C8.1/192-646   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4DST4.1/1-168     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A7UUT0.1/13-626    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8BZH2.1/5-63      ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4T0A8.1/405-529   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q3TRH0.1/1-49      ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A7SDW4.1/1319-1671 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C3ZJT1.1/159-315   -RLQMEEEEEQRQEEERRKREEKKKKQQQL-KAKAQELKAKEAE-S-----AKS-QPSQAQP-------AQQ------------------------------AAKR-PSSAQGQQP----------------------------P-------------------------------RY-PREVPPRFQQQAQKQQHHKQKQQGGQGK---KQQGGSGWGSPP-PQMP-SAAPQVG-PSGWGDSNPRSQENSWANAAKKGM-APENFTNGAK---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4T0A9.1/370-579   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4T574.1/1-220     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------SWDKVIIDR-SDTEAWPSISCSSD-LNHPV---VPECP--VGSASSNQD-TS------------AVTTTC--------SS------------SSLSMA-T----GAT----------------GQQAHYASLK------ANNN-M------T--------------GPGSANILTS-N-RG [...]
+Q4S4D3.1/1091-1191 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4S4D3.1/557-654   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C9JAR8.1/20-121    ----LVQEEEQLMEEKKKKKDDKKKKEAAQKKATEQKIKVPEQIKP-----SVS-QPQPANS-------N-NGTST--------------------ATSTNNNAKR-ATANNQQPQ----------------------------QQQ----------------------------QQQQPQQQQPQQQPQ---PQPQQQQ--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8NDV7.2/20-121    ----LVQEEEQLMEEKKKKKDDKKKKEAAQKKATEQKIKVPEQIKP-----SVS-QPQPANS-------N-NGTST--------------------ATSTNNNAKR-ATANNQQPQ----------------------------QQQ----------------------------QQQQPQQQQPQQQPQ---PQPQQQQ--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D4A372.1/1-97      ------------MEEKKRKKDDKKKKEAAQKKATEQKIKVPEQIKP-----SVS-QPQPANS-------D-NGTST--------------------ATSTNNNAKR-ATASNQQPP----------------------------PPP-----------------------------QQ-PQQQQQQQQQQ----QEQQQQQQQQQQ--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4T0A9.1/1-255     -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------WDQLIIDQ-RDTEAWPLIKL-SPSQASPGGCSLDTDPGPLTSSGSTSN-SCSAVN----MATGANSQTGHFPANHLSNK------------ANSGLNHT----NHTGTS----------MLSNQVAANRSWG------SGPG-PS----HCP-----------SQSSVGTEVKND-SPVG [...]
+B0WXG8.1/1199-1287 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B8RJB3.1/9-266     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3RQ20.1/1143-1394 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A0NFA3.2/8-516     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A7T6Q0.1/2-144     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B7PWH5.1/252-389   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4TA88.1/319-457   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A0BQD1.1/165-319   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q5TST0.3/683-841   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q2GV87.1/66-278    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4H886.1/6-148     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q172C7.1/363-538   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8MSF0.1/1-120     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4T1P6.1/6-46      -------------------------------------------------------------------------------------------------------------TPPQQQC----------------------------QLSSA-------------------------SARYPPREVPPRFR-Q----QEHKQLLKRGQPLP------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4PJL3.1/173-393   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B0X8C2.1/150-263   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4JL62.1/290-395   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B7PWH5.1/349-695   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4JPX4.1/284-409   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4NP54.1/2-69      ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C1GVG2.1/279-439   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q7SGG0.1/13-167    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A8PU70.1/566-908   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4KN27.1/225-337   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A8NN12.1/68-136    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4T0A8.1/329-402   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4P3Y1.1/128-184   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4PF35.1/18-283    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A5E1Y8.1/358-537   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D3B7T2.1/209-345   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4P2T9.1/335-396   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3MYX8.1/14-153    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C4Q4K6.1/224-436   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+P20105.2/537-654   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D1ZFW1.1/794-871   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+P20105.2/153-385   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C3ZJT1.1/328-369   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A5E351.1/72-416    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A3F290.1/9-110     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3M562.1/702-895   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q54LR6.1/53-262    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A5E7X5.1/33-235    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A1C5H3.1/188-267   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q7Q9F7.4/282-427   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D3AVQ3.1/284-366   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+O42323.1/299-489   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A3F295.1/6-117     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C1GEW9.1/11-129    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4N2I1.1/44-159    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4NNJ8.1/320-445   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q54FL0.1/951-1244  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C0SUE2.1/77-175    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q55F37.1/112-343   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C5YBU9.1/329-416   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3NV15.1/1200-1273 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B6U4M0.1/324-410   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D3BH34.1/115-236   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+O04319.1/114-194   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q25AW7.1/146-228   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C5GQY8.1/409-612   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4L803.1/240-323   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3M4K4.1/533-691   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C5DIP1.1/2-75      ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4J985.1/306-430   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C1K8V5.1/4-177     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A9USE7.1/997-1101  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4PJL3.1/533-654   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9R7H3.1/281-377   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C0PFW8.1/269-336   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C0HHH3.1/270-337   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4ME65.1/311-417   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A7AT74.1/621-697   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D0H0K7.1/432-591   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A5E3S9.1/278-450   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9GH32.1/107-174   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C5WVW4.1/223-289   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q2I2V8.1/539-606   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+O04319.1/304-419   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9MVK8.1/264-361   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B6UA93.1/223-290   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C4IYK3.1/223-290   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C1K890.1/4-244     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9GNX9.1/266-364   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q6R969.1/253-422   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A3F299.1/12-111    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+P31209.2/366-455   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4JY35.1/15-92     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q6C9A9.1/660-764   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4NE44.1/470-686   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C1K8B6.1/4-244     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4KT28.1/222-266   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9VYA6.1/174-225   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9RQB9.1/109-183   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B6K6T8.1/356-444   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D2H6M0.1/296-405   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q54BM2.1/286-375   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A5BPW5.1/140-241   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A7UUT0.1/686-771   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A0CJW3.1/434-742   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q10R21.1/226-292   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q0DUQ0.1/248-314   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B8APB9.1/226-292   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C0SAP5.1/281-410   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q2VIN9.1/296-390   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q91YZ8.1/296-380   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A3KFU8.1/296-380   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q6PHQ9.1/296-380   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D3Z5M2.1/296-380   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A3KFU5.1/296-380   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q3UX16.1/225-309   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q13310.1/296-379   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q7T3G5.1/297-380   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8QGJ7.1/296-379   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4VC03.1/296-379   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4RNX8.1/296-379   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q6IQ30.1/296-379   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D4AC21.1/225-308   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D4AC14.1/296-379   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B2GUY3.1/296-379   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D2I596.1/309-392   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B1ANR0.1/296-379   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A4IFC3.1/296-379   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q99LF8.1/296-380   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3MKU5.1/256-639   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q15164.1/107-185   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q3UTA6.1/197-279   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q3ZCS4.1/296-393   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A5BE57.1/307-474   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C0PT30.1/259-393   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q98SP8.2/296-391   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q6CDH3.1/332-428   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A9TLC5.1/312-407   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B6K033.1/364-457   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C0PPV9.1/259-392   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q54X31.1/100-217   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C4QZM5.1/235-294   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9N4W3.1/235-341   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A3F293.1/10-109    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9HRX8.1/250-356   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4VXU2.1/296-404   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q2V9A1.1/201-306   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9H7X9.1/314-422   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A5BF74.1/281-378   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9H7X8.1/304-412   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3S2W8.1/76-163    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A2A5N3.1/296-393   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A8NF86.1/337-425   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q2FSR7.1/6-69      ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q2VIN7.1/296-392   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q2VIP3.1/296-392   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B5LEQ5.1/179-323   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3NHT3.1/152-330   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9RIB9.1/231-294   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q5VX58.1/296-390   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9H361.2/296-390   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B2RXY9.1/296-394   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9SAB3.1/234-326   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8LBV8.1/233-325   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q69X94.1/342-443   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q6DGV1.1/174-212   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4KQM5.1/242-419   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C5WPD4.1/242-318   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3S2W8.1/165-267   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9LJL7.1/287-386   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8LFI9.1/244-343   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4K3C6.1/67-191    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A5B3Z9.1/212-306   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q0WW84.1/287-386   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D3BFK6.1/320-440   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A3CUY7.1/2-69      ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C1GDP1.1/281-415   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4MHJ9.1/106-306   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A9USE7.1/720-774   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3M4K4.1/89-378    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D4AC21.1/123-191   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D4AC14.1/194-262   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B2GUY3.1/194-262   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B5DF80.1/306-473   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9H7X8.1/113-180   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q5TSQ4.3/457-676   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q8RXR5.1/110-177   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q05196.2/328-430   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9M6E6.1/117-184   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A9TFH5.1/223-287   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+P42731.1/126-193   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q86NT0.1/173-270   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A9T3C5.1/56-79     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9AY92.1/240-333   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q10HZ7.1/240-333   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B8AKU6.1/240-333   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q0DQQ8.1/284-377   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A9S4M3.1/42-65     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q10HZ8.1/240-333   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4NBP3.1/171-277   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4PZT3.1/1188-1272 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q2V9C2.1/258-417   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9FTY9.1/365-463   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q10N87.1/216-320   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9GT62.1/311-412   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9RY32.1/285-382   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C4XVP0.1/46-94     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4JIH9.1/171-286   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A2YEJ5.1/343-442   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4PH83.1/181-247   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9RQB9.1/300-388   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A9NX92.1/275-362   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B8LRZ2.1/277-363   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D3ZAS7.1/296-399   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C5YBU9.1/128-201   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9FX88.1/338-415   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A3GHN7.2/350-469   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q2PEV8.1/238-322   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B8AL31.1/216-320   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C5WUD2.1/243-339   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q5KBW2.1/367-420   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B2RXY9.1/193-253   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A2A5N3.1/193-253   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A9TZW4.1/245-319   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9D4E6.1/307-466   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+C0P488.1/242-336   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B4MC02.1/171-283   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q4P8R9.1/368-413   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9GH32.1/295-362   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D4APH2.1/480-541   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A9NWA0.1/248-328   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D0N277.1/201-240   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B3M300.1/220-284   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q54C48.1/271-412   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9LEB4.1/261-347   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A5BE57.1/246-300   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9FPJ8.1/236-325   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q9FFU0.1/236-325   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9I0E1.1/253-334   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+B9RQB9.1/236-287   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+A5C5B3.1/256-335   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+Q86KE5.1/77-311    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+D3B9K1.1/622-823   ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+//
diff --git a/test/scripts/automated/belvu/test3_results b/test/scripts/automated/belvu/test3_results
new file mode 100644
index 0000000..a27a7e2
--- /dev/null
+++ b/test/scripts/automated/belvu/test3_results
@@ -0,0 +1,58 @@
+#=GS YQ53_CAEEL/650-977     AC Q09249.1
+#=GS Q21691_CAEEL/673-1001  AC Q21691.1
+#=GS O48771_ARATH/542-860   AC O48771.1
+#=GS Q9ZVD5_ARATH/577-885   AC Q9ZVD5.2
+#=GS TAG76_CAEEL/660-966    AC P34681.2
+#=GS O16720_CAEEL/566-867   AC O16720.2
+#=GS PINH_ARATH/625-946     AC Q9XGW1.1
+#=GS AGO1_SCHPO/500-799     AC O74957.1
+#=GS O76922_DROME/555-852   AC O76922.1
+#=GS PIWI_DROME/538-829     AC Q9VKM1.1
+#=GS Q17567_CAEEL/397-708   AC Q17567.1
+#=GS PIWL1_HUMAN/555-847    AC Q96J94.1
+#=GS PIWI_ARCFU/110-406     AC O28951.1
+#=GS PIWI_ARCFU/110-406     DR PDB; 1w9h A; 110-406;
+#=GS PIWI_ARCFU/110-406     DR PDB; 2bgg A; 110-406;
+#=GS PIWI_ARCFU/110-406     DR PDB; 2bgg B; 110-406;
+#=GS PIWI_ARCFU/110-406     DR PDB; 1ytu A; 110-406;
+#=GS PIWI_ARCFU/110-406     DR PDB; 2w42 A; 110-406;
+#=GS PIWI_ARCFU/110-406     DR PDB; 2w42 B; 110-406;
+#=GS PIWI_ARCFU/110-406     DR PDB; 1ytu B; 110-406;
+#=GS Y1321_METJA/426-699    AC Q58717.1
+#=GS O67434_AQUAE/419-694   AC O67434.1
+#=GS O67434_AQUAE/419-694   DR PDB; 2nub A; 419-694;
+#=GS O67434_AQUAE/419-694   DR PDB; 1yvu A; 419-694;
+#=GS O67434_AQUAE/419-694   DR PDB; 2f8s A; 419-694;
+#=GS O67434_AQUAE/419-694   DR PDB; 2f8s B; 419-694;
+#=GS Q21495_CAEEL/52-336    AC Q21495.4
+#=GS O16386_CAEEL/548-847   AC O16386.1
+#=GS O02095_CAEEL/574-878   AC O02095.2
+#=GS Q19645_CAEEL/674-996   AC Q19645.1
+#=GS Q23415_CAEEL/40-350    AC Q23415.1
+#=GS O62275_CAEEL/594-924   AC O62275.1
+YQ53_CAEEL/650-977           DILVGIAR.EKKPD.VHDILKYFEESIGLQTIQLCQQTVDKM.....MG....GQGGRQTIDNVMRKFNLKCGGTNFFVEIPNAVRGKAVCSNNETLRKKLLEHVQFIGFEISHGASRTLFDRSRSQMDGEPSVVGVSYSLT...NSTQLGGFTYLQTQKEYKLQKLDE............FFPKCVRSYKEHSKT.LPTRIVIYRVGAGEGNFNRVKE.EVEEMRRTFD.......KIQ.PGYR..PHLVVIIAQRASHARVFPSCISG.....................NRATDQNIPSGTCV...ENVLTSYGYDEFILSSQTPLIGTVRPCKYTILVNDA...KWSKNEL.MHL......TYFRAFGHQVSY....QPPSV........PDVLYAAENLAKRGRNNYK
+Q21691_CAEEL/673-1001        TIVFGIIA.EKRPD.MHDILKYFEEKLGQQTIQISSETADKF.....MR....DHGGKQTIDNVIRKLNPKCGGTNFLIDVPESVGHRVVCNNSAEMRAKLYAKTQFIGFEMSHTGARTRFDIQKVMFDGDPTVVGVAYSL..KHSAQLGGFSYFQESRLHKLTN.LQE............KMQICLNAYEQSSSY.LPETVVVYRVGSGEGDYPQIVN.EVNEMKLAAR.......KKK.HGYN..PKFLVICTQRNSHIRVFPEHINE....................RGKSMEQNVKSGTCV...DVPGASHGYEEFILCCQTPLIGTVKPTKYTIIVNDC...RWSKNEI.MNV......TYHLAFAHQVSY....APPAI........PNVSYAAQNLAKRGHNNYK
+O48771_ARATH/542-860         FILCILPERKTSDI.YGPWKKICLTEEGIHTQCICPIKI.................SDQYLTNVLLKINSKLGGINS.LLGIEYSYNIPLINKIPTL.........ILGMDVSHGPPGR.........ADVPSVAAVVGSKCWPLISRYRAAVRTQSPRLEMIDSLFQP..IENTEKGDNGIMNELFVEFYRTSRARKPKQIIIFRDGVSESQFEQVLKIEVDQIIKAYQ.......RLG.ESDV..PKFTVIVAQKNHHTKLFQAKGPE...........................NVPAGTVV...DTKIVHPTNYDFYMCAHAGKIGTSRPAHYHVLLDEI...GFSPDDL.QNL......IHSLSYKLLNSI....FNVSSLLCVFVLSVAPVRYAHLAAAQVAQFTK
+Q9ZVD5_ARATH/577-885         FILCVLPDKKNSDL.YGPWKKKNLTEFGIVTQCMAPTRQPND................QYLTNLLLKINAKLGGLNS.MLSVERTPAFTVISKVPTI.........ILGMDVSHGSPGQ.........SDVPSIAAVVSSREWPLISKYRASVRTQPSKAEMIESLVKK.....NGTEDDGIIKELLVDFYTSSNKRKPEHIIIFRDGVSESQFNQVLNIELDQIIEACK.......LLD.ANWN..PKFLLLVAQKNHHTKFFQPTSPE...........................NVPPGTII...DNKICHPKNNDFYLCAHAGMIGTTRPTHYHVLYDEI...GFSADEL.QEL......VHSLSYVYQRST....SAISV........VAPICYAHLAAAQLGTFMK
+TAG76_CAEEL/660-966          CIIVVLQS.KNSDI.YMTVKEQSDIVHGIMSQCVLMKNVSRP..............TPATCANIVLKLNMKMGGIN..SRIVADKITNKYLVDQPTM.........VVGIDVTHPTQAE.......MRMNMPSVAAIVANVD.LLPQSYGANVKVQKKCRESVVY.LLD............AIRERIITFYRHTKQ.KPARIIVYRDGVSEGQFSEVLREEIQSIRTACL.......AIA.EDFR..PPITYIVVQKRHHARIFCKYQND.....................MVGKAKNVPPGTTV...DTGIVSPEGFDFYLCSHYGVQGTSRPARYHVLLDEC...KFTADEI.QSI......TYGMCHTYGRCT....RSVSI........PTPVYYADLVATRARCHVK
+O16720_CAEEL/566-867         LIVVVLPG..KTPI.YAEVKRVGDTVLGIATQCVQAKNAIRT..............TPQTLSNLCLKMNVKLGGVNS.ILLPNVRPR...IFNEPVI.........FLGCDITHPAAGD.........TRKPSIAAVVGSMD.AHPSRYAATVRVQQHRQEIITD.LTY............MVRELLVQFYRNTRF.KPARIVVYRDGVSEGQLFNVLQYELRAIREACV.......MLE.SGYQ..PGITFIAVQKRHHTRLFAADKAD.....................QVGKAFNIPPGTTV...DVGITHPTEFDFFLCSHAGIQGTSRPSHYHVLWDDN...DLTADEL.QQL......TYQMCHTYVRCT....RSVSI........PAPAYYAHLVAFRARYHLV
+PINH_ARATH/625-946           LLLAILPD.NNGSL.YGDLKRICETELGLISQCCLTKHVFKI..............SKQYLANVSLKINVKMGGRNT.VLVDAISCRIPLVSDIPTI.........IFGADVTHPENGE.........ESSPSIAAVVASQDWPEVTKYAGLVCAQAHRQELIQDLYKTWQDPVRGTVSGGMIRDLLISFRKATGQ.KPLRIIFYRDGVSEGQFYQVLLYELDAIRKACA.......SLE.PNYQ..PPVTFIVVQKRHHTRLFANNHRD...................KNSTDRSGNILPGTVV...DTKICHPTEFDFYLCSHAGIQGTSRPAHYHVLWDEN...NFTADGI.QSL......TNNLCYTYARCT....RSVSI........VPPAYYAHLAAFRARFYLE
+AGO1_SCHPO/500-799           YLFFILDK.NSPEP.YGSIKRVCNTMLGVPSQCAISKHILQS..............KPQYCANLGMKINVKVGGINC.SLIPKSNP....LGNVPTL.........ILGGDVYHPGVGA..........TGVSIASIVASVD.LNGCKYTAVSRSQPRHQEVIEG.MKD............IVVYLLQGFRAMTKQ.QPQRIIYFRDGTSEGQFLSVINDELSQIKEACH.......SLS.PKYN..PKILVCTTQKRHHARFFIKNKSD......................GDRNGNPLPGTII...EKHVTHPYQYDFYLISHPSLQGVSVPVHYTVLHDEI...QMPPDQF.QTL......CYNLCYVYARAT....SAVSL........VPPVYYAHLVSNLARYQDV
+O76922_DROME/555-852         IVMVVMRS.PNEEK.YSCIKKRTCVDRPVPSQVVTLKVIAPR.....QQ...KPTGLMSIATKVVIQMNAKLMGA...PWQVVIPL.......HGLM.........TVGFDVCHSPKNK...........NKSYGAFVATMDQKESFRYFSTVNEHIKGQELSEQ.MSV............NMACALRSYQEQHRS.LPERILFFRDGVGDGQLYQVVNSEVNTLKDRLDEI...YKSAG.KQEG..CRMTFIIVSKRINSRYFT.............................GHRNPVPGTVV...DDVITLPERYDFFLVSQAVRIGTVSPTSYNVISDNM...GLNADKL.QML......SYKMTHMYYNYS....GTIRV........PAVCHYAHKLAFLVAESIN
+PIWI_DROME/538-829           LILCLVPN.DNAER.YSSIKKRGYVDRAVPTQVVTLKTTKNR.....SL........MSIATKIAIQLNCKLGYT...PWMIELPL.......SGLM.........TIGFDIAKSTRDR...........KRAYGALIASMDLQQNSTYFSTV.TECSAFDVLANTLWP............MIAKALRQYQHEHRK.LPSRIVFYRDGVSSGSLKQLFEFEVKDIIEKLKTE...YARVQ.LSP...PQLAYIVVTRSMNTRFFLN.............................GQNPPPGTIV...DDVITLPERYDFYLVSQQVRQGTVSPTSYNVLYSSM...GLSPEKM.QKL......TYKMCHLYYNWS....GTTRV........PAVCQYAKKLATLVGTNLH
+Q17567_CAEEL/397-708         MLVVMLAD.DNKTR.YDSLKKYLCVECPIPNQCVNLRTLAGK.....SKDGGENKNLGSIVLKIVLQMICKTGGA...LWKVNIPL.......KSTM.........IVGYDLYHDSTLK...........GKTVGACVSTTS.NDFTQFYSQTRPHENPTQLGNN.LTH............FVRKSLKQYYDNNDKTLPSRLILYRDGAGDGQIPYIKNTEVKLVRDACDAVTDKAAELS.NKVQEKIKLAFIIVTKRVNMRILKQGSSS.......................KSAINPQPGTVV...DTTVTRPERMDFYLVPQFVNQGTVTPVSYNIIHDDT...GLGPDKH.QQL......AFKLCHLYYNWQ....GTVRV........PAPCQYAHKLAFLTAQSLH
+PIWL1_HUMAN/555-847          IVVCLLSS.NRKDK.YDAIKKYLCTDCPTPSQCVVARTLGKQ.....QT.......VMAIATKIALQMNCKMGGE...LWRVDIPL.......KLVM.........IVGIDCYHDMTAG...........RRSIAGFVASIN.EGMTRWFSRCIFQDRGQELVDG.LKV............CLQAALRAW.NSCNEYMPSRIIVYRDGVGDGQLKTLVNYEVPQFLDCLK.......SIG.RGYN..PRLTVIVVKKRVNTRFFAQSGGR.........................LQNPLPGTVI...DVEVTRPEWYDFFIVSQAVRSGSVSPTHYNVIYDNS...GLKPDHI.QRL......TYKLCHIYYNWP....GVIRV........PAPCQYAHKLAFLVGQSIH
+PIWI_ARCFU/110-406           GIMLVLPE.YNTPL.YYKLKSYLINS..IPSQFMRYDILSNR.....NL........TFYVDNLLVQFVSKLGGK...PWILNVDPEK....................GSDIIIGTGAT........RIDNVNLFCFAMVFK.KDGTMLWNEISPIVTSSEYLTY.LKS............TIKKVVYGFKKSNPDWDVEKLTLHVSG....KRPKMKDGETKILKETVE.......ELK.KQEMVSRDVKYAILHLNETHPFWVMGDPN........................NRFHPYEGTKVKLSSKRYLLTLLQPYLKRNGLEMVTPIKPLSVEIVSDN.....WTSEEYYHNVHEILDEIYYLSKMNWRGF....RSRNL........PVTVNYPKLVAGIIANVNR
+#=GR PIWI_ARCFU/110-406 SS   --EEEESS.S-HHH.HHHHHHHHHTT..S--EEEEHHHHCTS.....TH........HHHHHHHHHHHHHH----...--EE---TT-....................---EEE----E........ESSSSEEE-EEEEEE.----EEEEEE--SEEGGGHHHH.HHH............HHHHHH---TTTSTT---SEEEEEE--....---S-----HHHHHHHHH.......HHH.HTTSS-TT-EEEEEEEEE---EEEE--TT........................TT-------EEESSSSEEEEEEE-TCEE----EEEEEEEEEEEEEEEE-.....--TTTHHHHHHHHHHHHHHHTT------....---SS........-HHHHHHHHH---HHHHHH
+Y1321_METJA/426-699          CFALIIGKEKYKDNDYYEILKKQLFDLKIISQNILWENWRKD.....DK........GYMTNNLLIQIMGKLGIK...YFILDSKTPYDY................IMGLDTGLGIFGN............HRVGGCTVVYDSEGKIRRIQPIETPAPGERLHLP................YVIEYLEN..KANIDMENKNILFLRDG.......FIQNSERNDLKEISK.......ELN.......SNIEVISIRKNNKYKVFTSDYRI........................GSVFGNDGIFLPHKTPFGSNPVKLSTWLRFNCGNEEGLK...IN.............ESI.MQL......LYDLTKMNYSALYGEGRYLRI........PAPIHYADKFVKALGKNWK
+O67434_AQUAE/419-694         LVIVFLEEYPKVDP.YKSFLLYDFVKRELLKKMIPSQVILNR.....TL...KNENLKFVLLNVAEQVLAKTGNIP..YKLKEIEGKVDA................FVGIDISRITRDG..........KTVNAVAFTKIFNSKGELVRYYLTSYPAFGEKLTEK................AIGDVFSLLEKLGF.KKGSKIVVHRDG.......RLYRDEVAAFK...........KYG.ELYG..YSLELLEIIKRNNPRFFSNEKFI..............................KGYFYKLSEDSVILATYNQVY.......EGTHQPIKVRKVYGE.....LPVEVL.CSQ......ILSLTLMNYSSF....QPIKL........PATVHYSDKITKLMLRGIE
+#=GR O67434_AQUAE/419-694 SS EEEEEE---S---S.SS--HHHHHHHHHHHHTT--EEEEEHH.....HH...HHS-HHHHHHHHHHHHHHH---BS..-EES------SE................EE--EEEEEE---..........-ECEEEEEEEEEE----EEEEEEEEETT---HHHHH................H---HHHHHHH---.----EEEEEE--.......---HHHHHHHH...........H--.----..-EEEEEEEE-SS---EEES-S--..............................---EEEETTTEEEE--S----.......---B--EEEEEEE--.....--HHHH.HHH......HHHHGGGG--TT....S--SS........-TTTTTHHHHHHHHH----
+Q21495_CAEEL/52-336          GIVLPTPRIFFRDG..........QETSLNNQSFRNPT...................DFAQTGFFVDAKQQLGGLN..YVVNS.....ETWNDSGLL.........LIGLSTAPYLNSY........SSENVTTIGFVSNTM.DHPQKFAGGYKYVKSGSDVFGQVMPE............ILLNSLRSARKARKI.KPMNIVIYLCGMSESRFSIVKEEYVRNCHSVFK.......TLG.EKYS..PQLTIIVGSKGHSTRLYARGERD........................QISNLQPGTIV...DSVIVSPDYNKFFHCGAVARQGTCKATKYTVLYPE....SPKMEWI.QRM......TNDLCYMHEIVF....HPVSL........PAPLYLTAEMAERGTKNLA
+O16386_CAEEL/548-847         QLIMFITK..SMNN.YHTEIKCLEQEFDLLTQDIRFETAVKL.....AQ.......QQNTRKNIIYKTNMKLGGLN..YELRS.....GVFSNSKRL.........IIGFETSQRGGLG..........DAPIAIGFAANMM.SHSQQFAGGYMFVKKSADNYGPVIPE............ILLTILKQAKANRPNDRPDELLIYFSGVSEGQHALVNEYYANQVKAACG.......LFN.ESFR..PHITLILASKVHNTRVYKSENGG........................GVCNVEPGTVI...DHTIVSPVLSEWYHAGSLARQGTSKLVKYSLIFNTK...KNEKLSVYERL......TNELCYEMQIVF....HPTSL........PIPLHIAGTYSERGSQMLA
+O02095_CAEEL/574-878         QLLFFVVK..SRYN.YHQQIKALEQKYDVLTQEIRAETAEKV.....FR.......QPQTRLNIINKTNMKLGGLN..YAIGS.....EAFNKPNRL.........IVGFVTSQRVGGN.........PDYPISVGFAANML.KHHQKFAGGYVYVHRDRDVFGSIIKD............TLLAIFKTCTEQRG..RPDDILLYFNGVSEGQFSMINEEFSARVKEACMAF...QKEGT.PPFR..PHITIIASSKAHNERLYKSDKGR.........................IVNLEPGTVV...DHTIVSNVYTEWYHASAVARQGTAKATKFTLIFTTKAGPQAEPLWHLEQL......TNDLCYDHQIVF....HPVGL........PVPLYIADRYSQRGAMVLA
+Q19645_CAEEL/674-996         PFVLFISD..DVPN.IHECLKFEERMSDIPTQHVLLKNVKKMRDNIEKKSQGGRRAYDLTLDNIVMKANIKCGGLN..YT.ADIPRDLACWNEVSTF.........VIGMDVAHPDRNA.......AREGNPSTVGLSCNSA.ENPYSFIGDFLYTDPRREAIQDEILR...........KFTDQSVRNFAEIRG..FPKKVIIFRDGVSFGEETAALK.EVEIIEQTIKTA...AKSMGHSDYA..PKVLAIVVKKRHHTRFYAKGGHH......................GNMPINPLPDTSV...GGDIAEYGKRQIFIQAFRPVQGTAKVPSFLVIRDDE...EVSDEHV.AKM......VCAVCSLHQLVN....SPTSI........PTPVYVAHELAKRGTGLYK
+Q23415_CAEEL/40-350          KFAFVITD.DSITH.LHKKYKALEQKSMMVIQDMKISKANSV.....VK.....DGKRLTLENVINKTNMKLGGLN..YTVSDAKKSMT....DEQL.........IIGVGVSAPPAGT.KYMMDNKGHLNPQIIGFASNA..VANHEFVGDFVLAPSGQDTMAS.IED............VLKSSIDLFEMNRNT.LPKRIIIYRSGASDGSHASILAYEIPLARATIQ.......GYS.KDIN....LIYIIVTKEHSYRFFRDQLRS....................GGKATEMNIPPGIVL...DSAVTNPACKQFFLNGHTTLQGTAKTPLYTILADDC...NAPMDRL.EEL......TYTLCHHHQIVA....LSTSI........PTPLYVANEYAKRGRDLWS
+O62275_CAEEL/594-924         TFVFIITD.DSITT.LHQRYKMIEKDTKMIVQDMKLSKALSV..........INAGKRLTLENVINKTNVKLGGSN..YVFVDAKKQL.....DSHL.........IIGVGISAPPAGT.KYAMENKGVLNPNVIGYAYNA..QHNQEFSGDFVLNSASQDTLAP.IED............IVMHSLNEYQKFHDGGLPRRVIVYRTGTSEGNHGSIMAYEIPLARAAMR.......DFS.PDIQ....LVYIVVSKDHSFRFFKPDLASLASRPQATSSTASRHSAMPAAPKAWDLNIAPGILV...DSIVTNPACKQFFLNSHITLQGTAKTPLYTVLADDA...KVSMTAL.EDI......TYKLCHLHQIVG....LPTSL........PTPLYVANEYAKRGRNLWN
+#=GC SS_cons                 EEEEEESS-S-HHC.CCHHHHHHHCCHHCHHCCEECCCCCCC.....CH...HHS-HHHHHHHHHHHHHHH---BS..-EEC---TT-SE................EE--EEEEEE--E........ESSCCEEEEEEEEEE----EEEEEEEEETCEGGHHHHH.HHH............HHHHHHHHHCCTSTT---SEEEEEE--.......S--HHHHHHHHHHHH.......HHH.HTTSS.TCEEEEEEEECC---EEEC-STT........................TT....---EEECTTTEEEEEEC-TCEE....EEEEEEEEEEEEEEEE-.....--CCCHHHHHHHHHHHHHHHCCGG--TT....S--SS........-CCCCCHHHHHHHHHHHHH
+#=GC seq_cons                hllhllsc.pspst.YtshhKhhppchsl.oQslphcsh.ph...............tthhsNllhKhNsKlGGhN..hhlssh.h........sph.........llGhDlu+sssus..........tssolsuhsushs.ppsppahushphpppsp-hhss.lpp............hltphLpsapcpspp.hPp+IllYRDGsS-Gph.plhp.Elspl+cshc.......pls.psap..PplshIllpKpcpsRhFtpstsp.........................thNs.PGTlV...DsslspPsth-FaLsupsshpGTs+Ps+YsllhD-h...thss-cl.ppL......oapLCaha.psh....pslul........PsPlaYAcphAppstp.hc
+//
diff --git a/test/scripts/automated/belvu/test4 b/test/scripts/automated/belvu/test4
new file mode 100755
index 0000000..496e0cf
--- /dev/null
+++ b/test/scripts/automated/belvu/test4
@@ -0,0 +1,24 @@
+#!/bin/ksh
+#
+# Description:
+#   Test saving an alignment in aligned-fasta format
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences to the saved results
+diffs=`belvu -o FastaAlign $data_dir/PF02171_seed.stock >&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
+
diff --git a/test/scripts/automated/belvu/test40 b/test/scripts/automated/belvu/test40
new file mode 100755
index 0000000..d3028fd
--- /dev/null
+++ b/test/scripts/automated/belvu/test40
@@ -0,0 +1,25 @@
+#!/bin/ksh
+#
+# Description:
+#   Sort by similarity to first sequence
+
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences to the saved results
+diffs=`belvu -o Selex -S S $data_dir/PF02171_seed.selex >&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
+
diff --git a/test/scripts/automated/belvu/test40_results b/test/scripts/automated/belvu/test40_results
new file mode 100644
index 0000000..255df5e
--- /dev/null
+++ b/test/scripts/automated/belvu/test40_results
@@ -0,0 +1,24 @@
+// Please do not highlight a markup line
+#=GC #=RF                                  **********Q********** 
+YQ53_CAEEL/650-977       vgiAR.EKKPD.VHDILKYFEESIGLQTIQLCQQTVDKM.....MG....GQGGRQTIDNVMRKFNLKCGGTNFFVEIPNAVRGKAVCSNNETLRKKLLEHVQFIG FEISHGASRTLFDRSRSQMDGEPSVVGVSYSLT...NSTQLGGFTYLQTQKEYKLQKLDE............FFPKCVRSYKEHSKT.LPTRIVIYRVGAGEGNFNRVKE.EVEEMRRTFD.......KIQ.PGYR..PHLVVIIAQRASHARVFPSCISG.....................NRATDQNIPSGTCV...ENVLTSYGYDEFILSSQTPLIGTVRPCKYTILVNDA...KWSKNEL.MHL......TYFRAFGHQVSY....QPPSV........PDVLYAAENLAKRGRNNYK
+Q21691_CAEEL/673-1001 TIVFGIIA.EKRPD.MHDILKYFEEKLGQQTIQISSETADKF.....MR....DHGGKQTIDNVIRKLNPKCGGTNFLIDVPESVGHRVVCNNSAEMRAKLYAKTQFIG FEMSHTGARTRFDIQKVMFDGDPTVVGVAYSL..KHSAQLGGFSYFQESRLHKLTN.LQE............KMQICLNAYEQSSSY.LPETVVVYRVGSGEGDYPQIVN.EVNEMKLAAR.......KKK.HGYN..PKFLVICTQRNSHIRVFPEHINE....................RGKSMEQNVKSGTCV...DVPGASHGYEEFILCCQTPLIGTVKPTKYTIIVNDC...RWSKNEI.MNV......TYHLAFAHQVSY....APPAI........PNVSYAAQNLAKRGHNNYK
+O48771_ARATH/542-860  FILCILPERKTSDI.YGPWKKICLTEEGIHTQCICPIKI.................SDQYLTNVLLKINSKLGGINS.LLGIEYSYNIPLINKIPTL.........ILG MDVSHGPPGR.........ADVPSVAAVVGSKCWPLISRYRAAVRTQSPRLEMIDSLFQP..IENTEKGDNGIMNELFVEFYRTSRARKPKQIIIFRDGVSESQFEQVLKIEVDQIIKAYQ.......RLG.ESDV..PKFTVIVAQKNHHTKLFQAKGPE...........................NVPAGTVV...DTKIVHPTNYDFYMCAHAGKIGTSRPAHYHVLLDEI...GFSPDDL.QNL......IHSLSYKLLNSI....FNVSSLLCVFVLSVAPVRYAHLAAAQVAQFTK
+Q9ZVD5_ARATH/577-885  FILCVLPDKKNSDL.YGPWKKKNLTEFGIVTQCMAPTRQPND................QYLTNLLLKINAKLGGLNS.MLSVERTPAFTVISKVPTI.........ILG MDVSHGSPGQ.........SDVPSIAAVVSSREWPLISKYRASVRTQPSKAEMIESLVKK.....NGTEDDGIIKELLVDFYTSSNKRKPEHIIIFRDGVSESQFNQVLNIELDQIIEACK.......LLD.ANWN..PKFLLLVAQKNHHTKFFQPTSPE...........................NVPPGTII...DNKICHPKNNDFYLCAHAGMIGTTRPTHYHVLYDEI...GFSADEL.QEL......VHSLSYVYQRST....SAISV........VAPICYAHLAAAQLGTFMK
+TAG76_CAEEL/660-966   CIIVVLQS.KNSDI.YMTVKEQSDIVHGIMSQCVLMKNVSRP..............TPATCANIVLKLNMKMGGIN..SRIVADKITNKYLVDQPTM.........VVG IDVTHPTQAE.......MRMNMPSVAAIVANVD.LLPQSYGANVKVQKKCRESVVY.LLD............AIRERIITFYRHTKQ.KPARIIVYRDGVSEGQFSEVLREEIQSIRTACL.......AIA.EDFR..PPITYIVVQKRHHARIFCKYQND.....................MVGKAKNVPPGTTV...DTGIVSPEGFDFYLCSHYGVQGTSRPARYHVLLDEC...KFTADEI.QSI......TYGMCHTYGRCT....RSVSI........PTPVYYADLVATRARCHVK
+O16720_CAEEL/566-867  LIVVVLPG..KTPI.YAEVKRVGDTVLGIATQCVQAKNAIRT..............TPQTLSNLCLKMNVKLGGVNS.ILLPNVRPR...IFNEPVI.........FLG CDITHPAAGD.........TRKPSIAAVVGSMD.AHPSRYAATVRVQQHRQEIITD.LTY............MVRELLVQFYRNTRF.KPARIVVYRDGVSEGQLFNVLQYELRAIREACV.......MLE.SGYQ..PGITFIAVQKRHHTRLFAADKAD.....................QVGKAFNIPPGTTV...DVGITHPTEFDFFLCSHAGIQGTSRPSHYHVLWDDN...DLTADEL.QQL......TYQMCHTYVRCT....RSVSI........PAPAYYAHLVAFRARYHLV
+PINH_ARATH/625-946    LLLAILPD.NNGSL.YGDLKRICETELGLISQCCLTKHVFKI..............SKQYLANVSLKINVKMGGRNT.VLVDAISCRIPLVSDIPTI.........IFG ADVTHPENGE.........ESSPSIAAVVASQDWPEVTKYAGLVCAQAHRQELIQDLYKTWQDPVRGTVSGGMIRDLLISFRKATGQ.KPLRIIFYRDGVSEGQFYQVLLYELDAIRKACA.......SLE.PNYQ..PPVTFIVVQKRHHTRLFANNHRD...................KNSTDRSGNILPGTVV...DTKICHPTEFDFYLCSHAGIQGTSRPAHYHVLWDEN...NFTADGI.QSL......TNNLCYTYARCT....RSVSI........VPPAYYAHLAAFRARFYLE
+AGO1_SCHPO/500-799    YLFFILDK.NSPEP.YGSIKRVCNTMLGVPSQCAISKHILQS..............KPQYCANLGMKINVKVGGINC.SLIPKSNP....LGNVPTL.........ILG GDVYHPGVGA..........TGVSIASIVASVD.LNGCKYTAVSRSQPRHQEVIEG.MKD............IVVYLLQGFRAMTKQ.QPQRIIYFRDGTSEGQFLSVINDELSQIKEACH.......SLS.PKYN..PKILVCTTQKRHHARFFIKNKSD......................GDRNGNPLPGTII...EKHVTHPYQYDFYLISHPSLQGVSVPVHYTVLHDEI...QMPPDQF.QTL......CYNLCYVYARAT....SAVSL........VPPVYYAHLVSNLARYQDV
+O76922_DROME/555-852  IVMVVMRS.PNEEK.YSCIKKRTCVDRPVPSQVVTLKVIAPR.....QQ...KPTGLMSIATKVVIQMNAKLMGA...PWQVVIPL.......HGLM.........TVG FDVCHSPKNK...........NKSYGAFVATMDQKESFRYFSTVNEHIKGQELSEQ.MSV............NMACALRSYQEQHRS.LPERILFFRDGVGDGQLYQVVNSEVNTLKDRLDEI...YKSAG.KQEG..CRMTFIIVSKRINSRYFT.............................GHRNPVPGTVV...DDVITLPERYDFFLVSQAVRIGTVSPTSYNVISDNM...GLNADKL.QML......SYKMTHMYYNYS....GTIRV........PAVCHYAHKLAFLVAESIN
+PIWI_DROME/538-829    LILCLVPN.DNAER.YSSIKKRGYVDRAVPTQVVTLKTTKNR.....SL........MSIATKIAIQLNCKLGYT...PWMIELPL.......SGLM.........TIG FDIAKSTRDR...........KRAYGALIASMDLQQNSTYFSTV.TECSAFDVLANTLWP............MIAKALRQYQHEHRK.LPSRIVFYRDGVSSGSLKQLFEFEVKDIIEKLKTE...YARVQ.LSP...PQLAYIVVTRSMNTRFFLN.............................GQNPPPGTIV...DDVITLPERYDFYLVSQQVRQGTVSPTSYNVLYSSM...GLSPEKM.QKL......TYKMCHLYYNWS....GTTRV........PAVCQYAKKLATLVGTNLH
+Q17567_CAEEL/397-708  MLVVMLAD.DNKTR.YDSLKKYLCVECPIPNQCVNLRTLAGK.....SKDGGENKNLGSIVLKIVLQMICKTGGA...LWKVNIPL.......KSTM.........IVG YDLYHDSTLK...........GKTVGACVSTTS.NDFTQFYSQTRPHENPTQLGNN.LTH............FVRKSLKQYYDNNDKTLPSRLILYRDGAGDGQIPYIKNTEVKLVRDACDAVTDKAAELS.NKVQEKIKLAFIIVTKRVNMRILKQGSSS.......................KSAINPQPGTVV...DTTVTRPERMDFYLVPQFVNQGTVTPVSYNIIHDDT...GLGPDKH.QQL......AFKLCHLYYNWQ....GTVRV........PAPCQYAHKLAFLTAQSLH
+PIWL1_HUMAN/555-847   IVVCLLSS.NRKDK.YDAIKKYLCTDCPTPSQCVVARTLGKQ.....QT.......VMAIATKIALQMNCKMGGE...LWRVDIPL.......KLVM.........IVG IDCYHDMTAG...........RRSIAGFVASIN.EGMTRWFSRCIFQDRGQELVDG.LKV............CLQAALRAW.NSCNEYMPSRIIVYRDGVGDGQLKTLVNYEVPQFLDCLK.......SIG.RGYN..PRLTVIVVKKRVNTRFFAQSGGR.........................LQNPLPGTVI...DVEVTRPEWYDFFIVSQAVRSGSVSPTHYNVIYDNS...GLKPDHI.QRL......TYKLCHIYYNWP....GVIRV........PAPCQYAHKLAFLVGQSIH
+PIWI_ARCFU/110-406    GIMLVLPE.YNTPL.YYKLKSYLINS..IPSQFMRYDILSNR.....NL........TFYVDNLLVQFVSKLGGK...PWILNVDPEK....................G SDIIIGTGAT........RIDNVNLFCFAMVFK.KDGTMLWNEISPIVTSSEYLTY.LKS............TIKKVVYGFKKSNPDWDVEKLTLHVSG....KRPKMKDGETKILKETVE.......ELK.KQEMVSRDVKYAILHLNETHPFWVMGDPN........................NRFHPYEGTKVKLSSKRYLLTLLQPYLKRNGLEMVTPIKPLSVEIVSDN.....WTSEEYYHNVHEILDEIYYLSKMNWRGF....RSRNL........PVTVNYPKLVAGIIANVNR
+Y1321_METJA/426-699   CFALIIGKEKYKDNDYYEILKKQLFDLKIISQNILWENWRKD.....DK........GYMTNNLLIQIMGKLGIK...YFILDSKTPYDY................IMG LDTGLGIFGN............HRVGGCTVVYDSEGKIRRIQPIETPAPGERLHLP................YVIEYLEN..KANIDMENKNILFLRDG.......FIQNSERNDLKEISK.......ELN.......SNIEVISIRKNNKYKVFTSDYRI........................GSVFGNDGIFLPHKTPFGSNPVKLSTWLRFNCGNEEGLK...IN.............ESI.MQL......LYDLTKMNYSALYGEGRYLRI........PAPIHYADKFVKALGKNWK
+O67434_AQUAE/419-694  LVIVFLEEYPKVDP.YKSFLLYDFVKRELLKKMIPSQVILNR.....TL...KNENLKFVLLNVAEQVLAKTGNIP..YKLKEIEGKVDA................FVG IDISRITRDG..........KTVNAVAFTKIFNSKGELVRYYLTSYPAFGEKLTEK................AIGDVFSLLEKLGF.KKGSKIVVHRDG.......RLYRDEVAAFK...........KYG.ELYG..YSLELLEIIKRNNPRFFSNEKFI..............................KGYFYKLSEDSVILATYNQVY.......EGTHQPIKVRKVYGE.....LPVEVL.CSQ......ILSLTLMNYSSF....QPIKL........PATVHYSDKITKLMLRGIE
+Q21495_CAEEL/52-336   GIVLPTPRIFFRDG..........QETSLNNQSFRNPT...................DFAQTGFFVDAKQQLGGLN..YVVNS.....ETWNDSGLL.........LIG LSTAPYLNSY........SSENVTTIGFVSNTM.DHPQKFAGGYKYVKSGSDVFGQVMPE............ILLNSLRSARKARKI.KPMNIVIYLCGMSESRFSIVKEEYVRNCHSVFK.......TLG.EKYS..PQLTIIVGSKGHSTRLYARGERD........................QISNLQPGTIV...DSVIVSPDYNKFFHCGAVARQGTCKATKYTVLYPE....SPKMEWI.QRM......TNDLCYMHEIVF....HPVSL........PAPLYLTAEMAERGTKNLA
+O16386_CAEEL/548-847  QLIMFITK..SMNN.YHTEIKCLEQEFDLLTQDIRFETAVKL.....AQ.......QQNTRKNIIYKTNMKLGGLN..YELRS.....GVFSNSKRL.........IIG FETSQRGGLG..........DAPIAIGFAANMM.SHSQQFAGGYMFVKKSADNYGPVIPE............ILLTILKQAKANRPNDRPDELLIYFSGVSEGQHALVNEYYANQVKAACG.......LFN.ESFR..PHITLILASKVHNTRVYKSENGG........................GVCNVEPGTVI...DHTIVSPVLSEWYHAGSLARQGTSKLVKYSLIFNTK...KNEKLSVYERL......TNELCYEMQIVF....HPTSL........PIPLHIAGTYSERGSQMLA
+O02095_CAEEL/574-878  QLLFFVVK..SRYN.YHQQIKALEQKYDVLTQEIRAETAEKV.....FR.......QPQTRLNIINKTNMKLGGLN..YAIGS.....EAFNKPNRL.........IVG FVTSQRVGGN.........PDYPISVGFAANML.KHHQKFAGGYVYVHRDRDVFGSIIKD............TLLAIFKTCTEQRG..RPDDILLYFNGVSEGQFSMINEEFSARVKEACMAF...QKEGT.PPFR..PHITIIASSKAHNERLYKSDKGR.........................IVNLEPGTVV...DHTIVSNVYTEWYHASAVARQGTAKATKFTLIFTTKAGPQAEPLWHLEQL......TNDLCYDHQIVF....HPVGL........PVPLYIADRYSQRGAMVLA
+Q19645_CAEEL/674-996  PFVLFISD..DVPN.IHECLKFEERMSDIPTQHVLLKNVKKMRDNIEKKSQGGRRAYDLTLDNIVMKANIKCGGLN..YT.ADIPRDLACWNEVSTF.........VIG MDVAHPDRNA.......AREGNPSTVGLSCNSA.ENPYSFIGDFLYTDPRREAIQDEILR...........KFTDQSVRNFAEIRG..FPKKVIIFRDGVSFGEETAALK.EVEIIEQTIKTA...AKSMGHSDYA..PKVLAIVVKKRHHTRFYAKGGHH......................GNMPINPLPDTSV...GGDIAEYGKRQIFIQAFRPVQGTAKVPSFLVIRDDE...EVSDEHV.AKM......VCAVCSLHQLVN....SPTSI........PTPVYVAHELAKRGTGLYK
+Q23415_CAEEL/40-350   KFAFVITD.DSITH.LHKKYKALEQKSMMVIQDMKISKANSV.....VK.....DGKRLTLENVINKTNMKLGGLN..YTVSDAKKSMT....DEQL.........IIG VGVSAPPAGT.KYMMDNKGHLNPQIIGFASNA..VANHEFVGDFVLAPSGQDTMAS.IED............VLKSSIDLFEMNRNT.LPKRIIIYRSGASDGSHASILAYEIPLARATIQ.......GYS.KDIN....LIYIIVTKEHSYRFFRDQLRS....................GGKATEMNIPPGIVL...DSAVTNPACKQFFLNGHTTLQGTAKTPLYTILADDC...NAPMDRL.EEL......TYTLCHHHQIVA....LSTSI........PTPLYVANEYAKRGRDLWS
+O62275_CAEEL/594-924  TFVFIITD.DSITT.LHQRYKMIEKDTKMIVQDMKLSKALSV..........INAGKRLTLENVINKTNVKLGGSN..YVFVDAKKQL.....DSHL.........IIG VGISAPPAGT.KYAMENKGVLNPNVIGYAYNA..QHNQEFSGDFVLNSASQDTLAP.IED............IVMHSLNEYQKFHDGGLPRRVIVYRTGTSEGNHGSIMAYEIPLARAAMR.......DFS.PDIQ....LVYIVVSKDHSFRFFKPDLASLASRPQATSSTASRHSAMPAAPKAWDLNIAPGILV...DSIVTNPACKQFFLNSHITLQGTAKTPLYTVLADDA...KVSMTAL.EDI......TYKLCHLHQIVG....LPTSL........PTPLYVANEYAKRGRNLWN
+//
diff --git a/test/scripts/automated/belvu/test41 b/test/scripts/automated/belvu/test41
new file mode 100755
index 0000000..46123cf
--- /dev/null
+++ b/test/scripts/automated/belvu/test41
@@ -0,0 +1,25 @@
+#!/bin/ksh
+#
+# Description:
+#   Test creating a neighbour-joining tree (scoredist distance correction)
+
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences to the saved results
+diffs=`belvu -T nb -o tree  $data_dir/ALIGN.selex >&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
+
diff --git a/test/scripts/automated/belvu/test41_results b/test/scripts/automated/belvu/test41_results
new file mode 100644
index 0000000..19f76b2
--- /dev/null
+++ b/test/scripts/automated/belvu/test41_results
@@ -0,0 +1,1108 @@
+(
+A8PU70.1/566-908:0.703,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+Q9UPQ9.4/1-1833:-0.547,
+(
+(
+(
+(
+A8MYY3.2/16-949:-0.077,
+(
+(
+B5ME23.2/16-165:0.016,
+B4DKJ5.1/1-276:-0.010)
+0:0.025,
+Q8BX83.2/38-410:0.010)
+0:0.090)
+0:0.033,
+C9J5L7.1/16-949:-0.033)
+0:0.034,
+D2GZL8.1/5-902:0.006)
+0:0.097,
+(
+(
+Q3TRH0.1/1-49:0.017,
+Q1LZM4.1/2-292:-0.017)
+0:0.035,
+Q8BKI2.2/38-1167:-0.033)
+0:0.114)
+0:0.462)
+0:0.275,
+(
+(
+(
+C9JAR8.1/20-121:0.000,
+Q8NDV7.2/20-121:-0.000)
+0:0.083,
+D4A372.1/1-97:0.086)
+0:0.553,
+(
+(
+(
+Q4S4D3.1/1-379:0.302,
+Q4T5V2.1/1-136:0.297)
+0:0.085,
+(
+B1H1W1.1/13-388:0.283,
+Q4T1P6.1/6-46:0.285)
+0:0.091)
+0:0.222,
+C3ZJT1.1/159-315:0.618)
+0:0.026)
+0:0.332)
+0:0.079,
+Q9UPQ9.4/1-1833:-0.217)
+0:0.262,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+A8MYY3.2/946-1098:0.005,
+C9J5L7.1/946-1098:0.004)
+0:0.018,
+D2GZL8.1/900-1051:0.023)
+0:0.008,
+(
+(
+Q3TRH0.1/46-194:-0.018,
+Q3TRK2.1/1-88:0.018)
+0:0.029,
+Q8BWL0.1/2-169:-0.007)
+0:0.023)
+0:0.019,
+B5ME23.2/165-368:0.007)
+0:0.018,
+B4E231.1/1-251:-0.013)
+0:0.019,
+B0QY77.1/1-879:-0.019)
+0:0.052,
+A0CJW3.1/434-742:-0.061)
+0:0.630,
+(
+Q4S4D3.1/395-556:0.376,
+Q4TA88.1/5-275:0.367)
+0:0.316)
+0:0.236,
+(
+(
+(
+(
+(
+(
+B1ATC3.1/1015-1647:-0.002,
+B7ZC94.1/855-1477:0.002)
+0:0.001,
+Q3UHC0.2/805-1437:-0.001)
+0:0.051,
+Q9HCJ0.3/810-1437:0.039)
+0:0.006,
+D2H997.1/853-1477:0.052)
+0:0.078,
+(
+Q4T574.1/639-850:0.307,
+Q4T0A8.1/27-228:0.297)
+0:0.173)
+0:0.251,
+C3ZJT1.1/371-689:0.689)
+0:0.213)
+0:0.272)
+0:0.115,
+(
+(
+(
+(
+(
+(
+B1ATC3.1/2-1028:-0.009,
+(
+B7ZC94.1/2-868:0.008,
+Q3UHC0.2/4-818:0.011)
+0:0.009)
+0:0.025,
+D3ZRA6.1/2-1000:0.021)
+0:0.036,
+(
+D2H997.1/2-866:0.054,
+Q9HCJ0.3/4-822:0.054)
+0:0.031)
+0:0.332,
+C3ZJT1.1/328-369:0.390)
+0:0.274,
+(
+Q4T574.1/239-596:0.656,
+Q4T0A9.1/370-579:0.642)
+0:0.093)
+0:0.448,
+B7PWH5.1/252-389:1.156)
+0:0.106)
+0:0.128,
+(
+Q4T574.1/1-220:0.668,
+Q4T0A9.1/1-255:0.668)
+0:0.739)
+0:0.210,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+A8MYY3.2/1098-1737:-0.101,
+(
+D2GZL8.1/1051-1690:-0.176,
+(
+(
+(
+Q1LZM4.1/292-736:-0.076,
+(
+Q8BXV9.1/2-142:0.041,
+Q8BZH2.1/5-63:0.052)
+0:0.091)
+0:0.265,
+B7ZB91.1/13-478:-0.235)
+0:0.196,
+Q4S4D3.1/557-654:0.828)
+0:0.068)
+0:0.105)
+0:0.051,
+B5ME23.2/368-1007:-0.051)
+0:0.025,
+C9J5L7.1/1098-1737:-0.025)
+0:0.029,
+Q3TRH0.1/194-838:-0.005)
+0:0.002,
+Q8BWL0.1/169-812:-0.002)
+0:0.003,
+(
+(
+Q8BKI2.2/1167-1810:-0.003,
+(
+(
+(
+(
+(
+Q4S4D3.1/1091-1191:0.903,
+Q66JU9.1/2-312:-0.073)
+0:0.039,
+Q8VD67.1/1-249:-0.039)
+0:0.020,
+Q6P7B1.1/2-432:-0.016)
+0:0.010,
+Q148P0.1/1-249:-0.010)
+0:0.005,
+Q9JHZ1.1/1-249:-0.005)
+0:0.008)
+0:0.001,
+Q3TRK2.1/88-731:-0.001)
+0:0.002)
+0:0.061,
+B0QY77.1/879-1390:-0.040)
+0:0.020,
+B4E231.1/251-762:-0.020)
+0:0.112,
+(
+Q4S4D3.1/651-825:0.276,
+Q4TA88.1/319-457:0.385)
+0:0.891)
+0:0.249,
+(
+(
+(
+Q4T0A8.1/329-402:1.003,
+B3M562.1/702-895:1.078)
+0:0.140,
+(
+(
+(
+Q2GV87.1/66-278:0.898,
+(
+(
+P20105.2/537-654:0.125,
+B4PJL3.1/533-654:0.152)
+0:0.101,
+B3M4K4.1/533-691:0.269)
+0:0.599)
+0:0.089,
+(
+(
+(
+(
+(
+(
+C1GEW9.1/11-129:0.654,
+A5E7X5.1/33-235:0.698)
+0:0.123,
+(
+(
+(
+B4NNJ8.1/320-445:0.476,
+(
+B4J985.1/306-430:0.253,
+B4ME65.1/311-417:0.218)
+0:0.244)
+0:0.229,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+B4JL62.1/290-395:0.259,
+Q25AW7.1/146-228:0.202)
+0:0.047,
+(
+(
+B4K3C6.1/67-191:0.135,
+B4MHJ9.1/106-306:0.197)
+0:0.142,
+B4NP54.1/2-69:0.054)
+0:0.069)
+0:0.038,
+(
+(
+D1ZFW1.1/794-871:0.147,
+Q4P2T9.1/335-396:0.075)
+0:0.067,
+(
+Q5TST0.3/683-841:0.154,
+D3BH34.1/115-236:0.126)
+0:0.157)
+0:0.065)
+0:0.007,
+(
+A5E1Y8.1/358-537:0.221,
+A0BQD1.1/165-319:0.202)
+0:0.163)
+0:0.033,
+(
+(
+Q4P3Y1.1/128-184:0.023,
+D3B7T2.1/209-345:0.235)
+0:0.163,
+(
+C0SUE2.1/77-175:0.194,
+B4JY35.1/15-92:0.080)
+0:0.192)
+0:0.025)
+0:0.044,
+(
+Q9VYA6.1/174-225:-0.008,
+Q86NT0.1/173-270:0.168)
+0:0.323)
+0:0.041,
+(
+A5E351.1/72-416:0.457,
+B4KT28.1/222-266:0.114)
+0:0.205)
+0:0.035,
+(
+(
+B4PH83.1/181-247:0.300,
+Q54FL0.1/951-1244:0.299)
+0:0.208,
+A1C5H3.1/188-267:0.422)
+0:0.055)
+0:0.067,
+O42323.1/299-489:0.635)
+0:0.022,
+(
+(
+(
+(
+A8NN12.1/68-136:0.144,
+D0H0K7.1/432-591:0.300)
+0:0.092,
+C5GQY8.1/409-612:0.480)
+0:0.042,
+Q54X31.1/100-217:0.445)
+0:0.103,
+(
+B4NE44.1/470-686:0.413,
+B4L803.1/240-323:0.295)
+0:0.215)
+0:0.095)
+0:0.056)
+0:0.020,
+(
+(
+Q4PF35.1/18-283:0.598,
+B4KN27.1/225-337:0.514)
+0:0.093,
+Q6C9A9.1/660-764:0.620)
+0:0.096)
+0:0.020)
+0:0.074,
+(
+(
+(
+A3F293.1/10-109:0.126,
+A3F299.1/12-111:0.068)
+0:0.405,
+B0X8C2.1/150-263:0.518)
+0:0.144,
+B4JPX4.1/284-409:0.664)
+0:0.147)
+0:0.028,
+(
+(
+(
+(
+C1GVG2.1/279-439:0.056,
+(
+C0SAP5.1/281-410:0.031,
+C1GDP1.1/281-415:0.122)
+0:0.117)
+0:0.373,
+Q54LR6.1/53-262:0.487)
+0:0.195,
+(
+A3F295.1/6-117:0.405,
+A3F290.1/9-110:0.384)
+0:0.271)
+0:0.101,
+(
+(
+Q7SGG0.1/13-167:0.428,
+Q86KE5.1/77-311:0.572)
+0:0.232,
+(
+B3NV15.1/1200-1273:0.360,
+B4PZT3.1/1188-1272:0.471)
+0:0.254)
+0:0.080)
+0:0.065)
+0:0.021,
+(
+(
+B4N2I1.1/44-159:0.101,
+B3MYX8.1/14-153:0.173)
+0:0.589,
+D3B9K1.1/622-823:0.822)
+0:0.141)
+0:0.025,
+(
+B3MKU5.1/256-639:0.956,
+(
+A5E3S9.1/278-450:0.541,
+Q5TSQ4.3/457-676:0.638)
+0:0.315)
+0:0.045)
+0:0.041)
+0:0.078,
+Q55F37.1/112-343:1.069)
+0:0.142)
+0:0.160,
+(
+(
+(
+P20105.2/153-385:0.083,
+B4PJL3.1/173-393:0.081)
+0:0.096,
+B3NHT3.1/152-330:0.179)
+0:0.039,
+B3M4K4.1/89-378:0.280)
+0:1.120)
+0:0.119)
+0:0.129)
+0:0.173,
+(
+(
+(
+(
+B3N1G0.1/6-1260:0.390,
+(
+(
+(
+(
+(
+B3P9S0.1/6-1293:0.069,
+(
+(
+B4IIY1.1/6-1290:0.000,
+(
+Q8SY33.1/6-1289:-0.111,
+Q8MSF0.1/1-120:0.111)
+0:0.077)
+0:0.045,
+B4R2G2.1/6-1156:-0.007)
+0:0.029)
+0:0.020,
+B4PW21.1/6-1287:0.054)
+0:0.167,
+(
+Q29CP6.2/6-1291:0.088,
+B4H887.1/32-1121:0.094)
+0:0.071)
+0:0.066,
+(
+(
+(
+B4MF11.1/6-1287:-0.196,
+(
+B4L7C4.1/6-1178:-0.082,
+(
+(
+C1K8B6.1/4-244:0.002,
+C1K890.1/4-244:0.001)
+0:0.200,
+C1K8V5.1/4-177:0.195)
+0:0.310)
+0:0.310)
+0:0.125,
+D0Z7B2.1/6-1290:-0.088)
+0:0.210,
+B4JZV3.1/6-1310:0.123)
+0:0.141)
+0:0.056,
+B4NHM7.1/6-1344:0.308)
+0:0.088)
+0:0.118,
+(
+(
+(
+B0WTJ5.1/228-1404:0.225,
+Q172C6.1/6-1080:0.201)
+0:0.067,
+(
+(
+(
+Q7Q3B9.4/7-766:0.390,
+A7UUT0.1/686-771:0.462)
+0:0.039,
+(
+B0WXG8.1/386-1198:0.020,
+B8RJB3.1/9-266:0.042)
+0:0.328)
+0:0.380,
+Q172C8.1/672-1244:-0.024)
+0:0.343)
+0:0.072,
+(
+(
+(
+(
+Q172C7.1/363-538:0.304,
+B0WXH0.1/311-1189:0.110)
+0:0.278,
+B4H886.1/6-148:0.543)
+0:0.103,
+(
+Q172C8.1/192-646:0.566,
+A7UUT0.1/13-626:0.560)
+0:0.099)
+0:0.321,
+(
+A0NFA3.2/8-516:0.730,
+B7PWH5.1/349-695:0.645)
+0:0.291)
+0:0.326)
+0:0.274)
+0:0.093,
+(
+(
+Q172C7.1/573-1487:0.212,
+B0WXH0.1/1191-1443:0.236)
+0:0.228,
+(
+(
+(
+Q7Q3B9.4/781-1217:0.311,
+B0WXG8.1/1199-1287:0.228)
+0:0.110,
+A7UUT0.1/838-1208:0.379)
+0:0.123,
+B7PWH5.1/720-1088:0.796)
+0:0.048)
+0:0.144)
+0:0.032,
+(
+A0NFA3.2/687-1175:-0.245,
+B4KQM5.1/242-419:0.245)
+0:1.215)
+0:0.078)
+0:0.056,
+(
+(
+A7SDW4.1/430-1260:0.287,
+A7SDW4.1/1319-1671:-0.049)
+0:0.851,
+A7T6Q0.1/2-144:0.531)
+0:0.410)
+0:0.014,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+B1ATC3.1/1646-1899:0.000,
+B7ZC94.1/1478-1731:-0.000)
+0:0.000,
+Q3UHC0.2/1436-1689:0.000)
+0:0.037,
+Q9HCJ0.3/1434-1689:0.031)
+0:0.001,
+D2H997.1/1476-1729:0.031)
+0:0.166,
+(
+(
+Q4T574.1/1322-1578:0.130,
+Q4T0A8.1/526-801:0.114)
+0:0.068,
+B0R1E2.1/290-554:0.202)
+0:0.054)
+0:0.116,
+Q4S9I4.1/1569-1835:0.357)
+0:0.060,
+(
+Q4S4D3.1/823-1099:0.201,
+Q4TA89.1/1-316:0.199)
+0:0.239)
+0:0.053,
+(
+(
+(
+(
+(
+(
+(
+C9JA83.1/3-471:-0.019,
+B4DST4.1/1-168:0.051)
+0:0.029,
+C9JAR8.1/119-1283:-0.029)
+0:0.064,
+(
+(
+(
+Q05CE3.1/20-1014:-0.017,
+Q6ZPQ4.1/1-243:0.031)
+0:0.018,
+Q8BNF0.2/9-877:-0.013)
+0:0.029,
+Q3UHK8.1/20-1269:-0.020)
+0:0.050)
+0:0.461,
+Q8NDV7.2/119-1962:-0.471)
+0:0.272,
+D2I222.1/1-1905:-0.238)
+0:0.141,
+D4A372.1/95-1931:-0.101)
+0:0.184,
+(
+(
+(
+(
+(
+(
+(
+C9JA83.1/468-1101:-0.211,
+(
+Q3UQ45.1/7-500:-0.311,
+B3KSX2.1/4-277:0.380)
+0:0.193)
+0:0.110,
+C9JAR8.1/1280-1913:-0.110)
+0:0.074,
+Q99JR3.2/24-648:-0.046)
+0:0.024,
+Q3UHK8.1/1266-1896:-0.024)
+0:0.013,
+Q8BXM6.1/4-627:-0.011)
+0:0.007,
+Q3UUG8.1/1-727:-0.007)
+0:0.055,
+(
+(
+Q4S9I4.1/33-1574:0.649,
+Q8BWM2.1/1-337:-0.207)
+0:0.182,
+(
+(
+Q4T574.1/894-1324:0.056,
+Q4T0A8.1/405-529:0.221)
+0:0.094,
+B0R1E2.1/1-289:0.139)
+0:0.666)
+0:0.118)
+0:0.060)
+0:0.418)
+0:0.179,
+C3ZJT1.1/730-1350:0.544)
+0:0.161)
+0:0.065,
+(
+C0PFW8.1/269-336:0.000,
+C0HHH3.1/270-337:-0.000)
+0:0.779)
+0:0.181,
+(
+(
+B3RQ20.1/1143-1394:0.937,
+Q2I2V8.1/539-606:0.468)
+0:0.264,
+(
+A9USE7.1/720-774:0.496,
+D4APH2.1/480-541:0.504)
+0:0.220)
+0:0.087)
+0:0.162,
+(
+(
+(
+(
+A9USE7.1/997-1101:0.374,
+A7AT74.1/621-697:0.282)
+0:0.357,
+D3BFK6.1/320-440:0.834)
+0:0.079,
+(
+A3CUY7.1/2-69:0.136,
+Q2FSR7.1/6-69:0.185)
+0:0.125)
+0:0.051,
+Q7Q9F7.4/282-427:0.816)
+0:0.096)
+0:0.051,
+(
+B3S2W8.1/165-267:0.748,
+(
+(
+(
+(
+(
+A9S4M3.1/42-65:0.035,
+A9T3C5.1/56-79:-0.001)
+0:0.215,
+(
+Q6DGV1.1/174-212:-0.118,
+B5LEQ5.1/179-323:0.165)
+0:0.381)
+0:0.137,
+A3GHN7.2/350-469:0.516)
+0:0.124,
+(
+(
+(
+B4NBP3.1/171-277:0.060,
+(
+B3M300.1/220-284:-0.007,
+(
+B4MC02.1/171-283:0.028,
+B4JIH9.1/171-286:0.062)
+0:0.031)
+0:0.066)
+0:0.385,
+C4XVP0.1/46-94:0.615)
+0:0.231,
+D0N277.1/201-240:0.517)
+0:0.018)
+0:0.108,
+(
+Q54C48.1/271-412:0.830,
+C5DIP1.1/2-75:0.497)
+0:0.194)
+0:0.005)
+0:0.057)
+0:0.055,
+(
+C4Q4K6.1/224-436:0.906,
+C4QZM5.1/235-294:0.259)
+0:0.133)
+0:0.062,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+B5DF80.1/306-473:0.068,
+(
+(
+(
+(
+(
+Q2VIP3.1/296-392:-0.000,
+Q3ZCS4.1/296-393:0.000)
+0:0.000,
+Q2VIN7.1/296-392:-0.000)
+0:0.001,
+Q5VX58.1/296-390:-0.001)
+0:0.001,
+Q9H361.2/296-390:-0.001)
+0:0.027,
+Q2VIN9.1/296-390:0.033)
+0:0.012)
+0:0.089,
+D3Z5M2.1/296-380:-0.003)
+0:0.001,
+Q99LF8.1/296-380:-0.001)
+0:0.001,
+(
+(
+(
+(
+Q91YZ8.1/296-380:0.000,
+A3KFU8.1/296-380:-0.000)
+0:0.000,
+Q6PHQ9.1/296-380:0.000)
+0:0.000,
+A3KFU5.1/296-380:0.000)
+0:0.000,
+Q3UX16.1/225-309:0.000)
+0:0.008)
+0:0.000,
+Q4VC03.1/296-379:-0.000)
+0:0.000,
+B1ANR0.1/296-379:-0.000)
+0:0.000,
+(
+(
+(
+D4AC21.1/225-308:-0.000,
+(
+(
+Q9D4E6.1/307-466:0.149,
+(
+(
+Q7T3G5.1/297-380:0.000,
+Q8QGJ7.1/296-379:-0.000)
+0:0.000,
+Q4RNX8.1/296-379:0.000)
+0:0.003)
+0:0.004,
+Q3UTA6.1/197-279:0.040)
+0:0.001)
+0:0.000,
+Q13310.1/296-379:-0.000)
+0:0.000,
+D2I596.1/309-392:-0.000)
+0:0.000)
+0:0.000,
+A4IFC3.1/296-379:-0.000)
+0:0.000,
+Q6IQ30.1/296-379:-0.000)
+0:0.000,
+D4AC14.1/296-379:-0.000)
+0:0.000,
+B2GUY3.1/296-379:-0.001)
+0:0.008,
+(
+(
+(
+B2RXY9.1/296-394:0.002,
+A2A5N3.1/296-393:-0.002)
+0:0.085,
+D3ZAS7.1/296-399:0.095)
+0:0.108,
+(
+D2H6M0.1/296-405:0.024,
+(
+Q4VXU2.1/296-404:0.021,
+Q98SP8.2/296-391:0.047)
+0:0.009)
+0:0.094)
+0:0.025)
+0:0.011,
+Q15164.1/107-185:-0.022)
+0:0.066,
+(
+(
+(
+(
+(
+C5YBU9.1/329-416:0.019,
+B6U4M0.1/324-410:0.009)
+0:0.280,
+(
+(
+B9H7X8.1/304-412:0.000,
+B9H7X9.1/314-422:-0.000)
+0:0.059,
+B9GT62.1/311-412:0.046)
+0:0.138)
+0:0.013,
+(
+(
+A2YEJ5.1/343-442:-0.001,
+Q69X94.1/342-443:0.001)
+0:0.003,
+B9FTY9.1/365-463:-0.003)
+0:0.323)
+0:0.029,
+Q05196.2/328-430:0.253)
+0:0.015,
+A9TLC5.1/312-407:0.157)
+0:0.080)
+0:0.051,
+(
+(
+(
+(
+(
+P31209.2/366-455:0.056,
+(
+B6K033.1/364-457:0.077,
+B6K6T8.1/356-444:0.054)
+0:0.008)
+0:0.089,
+(
+Q5KBW2.1/367-420:0.097,
+Q4P8R9.1/368-413:0.064)
+0:0.122)
+0:0.022,
+Q6CDH3.1/332-428:0.121)
+0:0.050,
+(
+D3AVQ3.1/284-366:0.113,
+Q54BM2.1/286-375:0.141)
+0:0.023)
+0:0.028,
+A8NF86.1/337-425:0.206)
+0:0.195)
+0:0.096,
+(
+(
+(
+A5BE57.1/307-474:0.384,
+B9RQB9.1/300-388:0.264)
+0:0.156,
+B9GH32.1/295-362:0.214)
+0:0.078,
+O04319.1/304-419:0.612)
+0:0.057)
+0:0.092,
+(
+C5WPD4.1/242-318:0.151,
+(
+Q10N87.1/216-320:0.007,
+B8AL31.1/216-320:0.016)
+0:0.103)
+0:0.290)
+0:0.024,
+(
+(
+(
+B9RQB9.1/109-183:0.262,
+B9GH32.1/107-174:0.139)
+0:0.083,
+O04319.1/114-194:0.255)
+0:0.228,
+(
+C5YBU9.1/128-201:0.136,
+(
+B9H7X8.1/113-180:0.162,
+(
+(
+Q8RXR5.1/110-177:0.000,
+P42731.1/126-193:-0.000)
+0:0.032,
+Q9M6E6.1/117-184:0.066)
+0:0.093)
+0:0.006)
+0:0.181)
+0:0.093)
+0:0.038,
+(
+(
+(
+(
+(
+A5BE57.1/246-300:0.108,
+B9RQB9.1/236-287:0.244)
+0:0.081,
+A5B3Z9.1/212-306:0.206)
+0:0.123,
+(
+B2RXY9.1/193-253:0.000,
+A2A5N3.1/193-253:-0.000)
+0:0.216)
+0:0.018,
+B3S2W8.1/76-163:0.780)
+0:0.037,
+(
+(
+B2GUY3.1/194-262:0.000,
+D4AC14.1/194-262:-0.000)
+0:0.000,
+D4AC21.1/123-191:0.000)
+0:0.310)
+0:0.042)
+0:0.043)
+0:0.323,
+(
+(
+(
+(
+(
+B9N4W3.1/235-341:0.002,
+B9HRX8.1/250-356:0.026)
+0:0.066,
+B9RY32.1/285-382:0.035)
+0:0.074,
+(
+(
+Q8LFI9.1/244-343:0.000,
+Q0WW84.1/287-386:-0.000)
+0:0.000,
+Q9LJL7.1/287-386:0.000)
+0:0.121)
+0:0.072,
+A5BF74.1/281-378:0.140)
+0:0.028,
+Q2V9A1.1/201-306:0.149)
+0:0.076)
+0:0.038,
+(
+(
+(
+(
+(
+(
+C5WVW4.1/223-289:-0.011,
+(
+C4IYK3.1/223-290:0.000,
+B6UA93.1/223-290:-0.000)
+0:0.030)
+0:0.016,
+(
+(
+B8APB9.1/226-292:0.000,
+Q10R21.1/226-292:-0.000)
+0:0.000,
+Q0DUQ0.1/248-314:0.000)
+0:0.098)
+0:0.113,
+(
+(
+(
+C0PPV9.1/259-392:0.005,
+C0PT30.1/259-393:0.004)
+0:0.333,
+(
+A9TFH5.1/223-287:-0.022,
+A9TZW4.1/245-319:0.022)
+0:0.121)
+0:0.071,
+A9NWA0.1/248-328:0.057)
+0:0.063)
+0:0.032,
+B9RIB9.1/231-294:0.095)
+0:0.024,
+(
+Q6R969.1/253-422:0.032,
+Q2V9C2.1/258-417:0.015)
+0:0.350)
+0:0.068,
+(
+(
+(
+(
+(
+(
+(
+B8LRZ2.1/277-363:-0.001,
+A9NX92.1/275-362:0.001)
+0:0.190,
+(
+Q9FPJ8.1/236-325:0.000,
+Q9FFU0.1/236-325:-0.000)
+0:0.155)
+0:0.067,
+(
+A5C5B3.1/256-335:0.144,
+B9I0E1.1/253-334:0.155)
+0:0.010)
+0:0.041,
+(
+(
+C5WUD2.1/243-339:0.051,
+C0P488.1/242-336:0.050)
+0:0.028,
+(
+(
+(
+(
+Q10HZ8.1/240-333:0.000,
+Q9AY92.1/240-333:-0.000)
+0:0.000,
+Q10HZ7.1/240-333:0.000)
+0:0.000,
+B8AKU6.1/240-333:0.000)
+0:0.000,
+Q0DQQ8.1/284-377:0.000)
+0:0.070)
+0:0.091)
+0:0.035,
+Q9LEB4.1/261-347:0.176)
+0:0.051,
+Q2PEV8.1/238-322:0.159)
+0:0.021,
+(
+Q8LBV8.1/233-325:0.000,
+Q9SAB3.1/234-326:-0.000)
+0:0.357)
+0:0.030)
+0:0.076)
+0:0.027,
+Q9FX88.1/338-415:0.236)
+0:0.123,
+A5BPW5.1/140-241:0.086)
+0:0.046,
+B9GNX9.1/266-364:0.009)
+0:0.142,
+B9MVK8.1/264-361:-0.143)
+0:0.296,
+B9R7H3.1/281-377:-0.384)
+0:0.702)
+;
diff --git a/test/scripts/automated/belvu/test42 b/test/scripts/automated/belvu/test42
new file mode 100755
index 0000000..851992f
--- /dev/null
+++ b/test/scripts/automated/belvu/test42
@@ -0,0 +1,25 @@
+#!/bin/ksh
+#
+# Description:
+#   Test creating a neighbour-joining tree (jukes-cantor distance correction)
+
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences to the saved results
+diffs=`belvu -T nj -o tree  $data_dir/ALIGN.selex >&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
+
diff --git a/test/scripts/automated/belvu/test42_results b/test/scripts/automated/belvu/test42_results
new file mode 100644
index 0000000..61508db
--- /dev/null
+++ b/test/scripts/automated/belvu/test42_results
@@ -0,0 +1,1108 @@
+(
+Q8MSF0.1/1-120:0.079,
+(
+Q8SY33.1/6-1289:-0.168,
+(
+B4IIY1.1/6-1290:-0.052,
+(
+(
+B3P9S0.1/6-1293:0.055,
+(
+(
+(
+(
+(
+B3N1G0.1/6-1260:0.291,
+(
+(
+(
+(
+(
+(
+(
+(
+Q9UPQ9.4/1-1833:-0.328,
+(
+(
+(
+(
+(
+(
+(
+A8MYY3.2/16-949:-0.092,
+(
+(
+B5ME23.2/16-165:0.020,
+B4DKJ5.1/1-276:-0.013)
+0:0.023,
+Q8BX83.2/38-410:0.006)
+0:0.106)
+0:0.043,
+C9J5L7.1/16-949:-0.043)
+0:0.035,
+D2GZL8.1/5-902:-0.001)
+0:0.065,
+B1H1W1.1/13-388:0.247)
+0:0.054,
+(
+(
+Q4S4D3.1/1-379:0.200,
+Q4T1P6.1/6-46:0.197)
+0:0.033,
+Q4T5V2.1/1-136:0.236)
+0:0.073)
+0:0.186,
+(
+(
+C9JAR8.1/20-121:0.000,
+Q8NDV7.2/20-121:-0.000)
+0:0.057,
+D4A372.1/1-97:0.060)
+0:0.441)
+0:0.023,
+C3ZJT1.1/159-315:0.522)
+0:0.591)
+0:0.164,
+Q9UPQ9.4/1-1833:-0.164)
+0:0.113,
+(
+Q4T574.1/1-220:0.523,
+Q4T0A9.1/1-255:0.522)
+0:0.871)
+0:0.070,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+A8MYY3.2/946-1098:0.003,
+C9J5L7.1/946-1098:0.003)
+0:0.020,
+D2GZL8.1/900-1051:0.020)
+0:0.005,
+(
+(
+Q3TRH0.1/46-194:-0.017,
+Q3TRK2.1/1-88:0.017)
+0:0.022,
+Q8BWL0.1/2-169:-0.005)
+0:0.026)
+0:0.025,
+B5ME23.2/165-368:-0.003)
+0:0.019,
+B4E231.1/1-251:-0.015)
+0:0.025,
+B0QY77.1/1-879:-0.025)
+0:0.071,
+(
+(
+Q3TRH0.1/1-49:0.022,
+Q1LZM4.1/2-292:-0.022)
+0:0.042,
+Q8BKI2.2/38-1167:-0.040)
+0:0.068)
+0:0.267,
+A0CJW3.1/434-742:0.015)
+0:0.736,
+(
+(
+(
+(
+(
+(
+C9JA83.1/3-471:-0.027,
+B4DST4.1/1-168:0.051)
+0:0.034,
+C9JAR8.1/119-1283:-0.034)
+0:0.062,
+(
+(
+(
+Q05CE3.1/20-1014:-0.010,
+Q6ZPQ4.1/1-243:0.020)
+0:0.017,
+Q8BNF0.2/9-877:-0.014)
+0:0.034,
+Q3UHK8.1/20-1269:-0.028)
+0:0.056)
+0:0.450,
+(
+Q4S4D3.1/395-556:0.315,
+Q4TA88.1/5-275:0.306)
+0:0.244)
+0:0.046,
+(
+(
+Q4T574.1/639-850:0.237,
+Q4T0A8.1/27-228:0.248)
+0:0.243,
+C3ZJT1.1/371-689:0.481)
+0:0.111)
+0:0.221,
+B7PWH5.1/252-389:0.813)
+0:0.139)
+0:0.161,
+(
+(
+(
+(
+(
+(
+(
+B1ATC3.1/2-1028:-0.010,
+(
+B7ZC94.1/2-868:0.006,
+Q3UHC0.2/4-818:0.008)
+0:0.010)
+0:0.026,
+D3ZRA6.1/2-1000:0.018)
+0:0.031,
+(
+D2H997.1/2-866:0.049,
+Q9HCJ0.3/4-822:0.051)
+0:0.028)
+0:0.347,
+C3ZJT1.1/328-369:0.432)
+0:0.186,
+(
+Q4T574.1/239-596:0.562,
+Q4T0A9.1/370-579:0.559)
+0:0.094)
+0:0.225,
+(
+(
+Q172C7.1/363-538:0.381,
+B0WXH0.1/311-1189:-0.065)
+0:0.179,
+(
+(
+Q172C8.1/192-646:0.420,
+A7UUT0.1/13-626:0.415)
+0:0.031,
+B4H886.1/6-148:0.482)
+0:0.061)
+0:0.352)
+0:0.157,
+(
+(
+(
+(
+Q7Q3B9.4/7-766:0.178,
+B8RJB3.1/9-266:0.006)
+0:0.100,
+A7UUT0.1/686-771:0.322)
+0:0.136,
+B0WXG8.1/386-1198:0.244)
+0:0.329,
+(
+A0NFA3.2/8-516:0.642,
+B7PWH5.1/349-695:0.362)
+0:0.277)
+0:0.176)
+0:0.114)
+0:0.179,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+B1ATC3.1/1015-1647:-0.002,
+B7ZC94.1/855-1477:0.002)
+0:0.001,
+Q3UHC0.2/805-1437:-0.001)
+0:0.040,
+Q9HCJ0.3/810-1437:0.036)
+0:0.006,
+D2H997.1/853-1477:0.042)
+0:0.145,
+(
+(
+Q4T574.1/894-1324:-0.014,
+Q4T0A8.1/405-529:0.263)
+0:0.102,
+B0R1E2.1/1-289:0.096)
+0:0.091)
+0:0.318,
+(
+Q4S9I4.1/33-1574:0.443,
+B3KSX2.1/4-277:0.454)
+0:0.110)
+0:0.218,
+(
+(
+(
+Q1LZM4.1/292-736:-0.119,
+(
+Q8BXV9.1/2-142:0.041,
+Q8BZH2.1/5-63:0.047)
+0:0.132)
+0:0.308,
+(
+Q4S4D3.1/651-825:0.194,
+Q4TA88.1/319-457:0.275)
+0:0.411)
+0:0.137,
+(
+Q4T0A8.1/329-402:0.716,
+(
+(
+(
+(
+P20105.2/537-654:0.093,
+B4PJL3.1/533-654:0.112)
+0:0.082,
+B3M4K4.1/533-691:0.207)
+0:0.398,
+(
+(
+(
+C1GVG2.1/279-439:0.035,
+(
+C0SAP5.1/281-410:0.027,
+C1GDP1.1/281-415:0.083)
+0:0.087)
+0:0.307,
+Q86KE5.1/77-311:0.483)
+0:0.104,
+(
+B3NV15.1/1200-1273:0.265,
+B4PZT3.1/1188-1272:0.323)
+0:0.188)
+0:0.103)
+0:0.082,
+B3M562.1/702-895:0.721)
+0:0.046)
+0:0.075)
+0:0.087)
+0:0.031,
+(
+(
+Q4S4D3.1/557-654:0.475,
+Q7SGG0.1/13-167:0.235)
+0:0.421,
+(
+(
+(
+P20105.2/153-385:0.063,
+B4PJL3.1/173-393:0.056)
+0:0.022,
+B3NHT3.1/152-330:0.183)
+0:0.047,
+B3M4K4.1/89-378:0.194)
+0:0.696)
+0:0.123)
+0:0.070,
+(
+(
+(
+Q2GV87.1/66-278:0.672,
+D3B9K1.1/622-823:0.706)
+0:0.013,
+(
+(
+(
+(
+C1GEW9.1/11-129:0.484,
+A5E7X5.1/33-235:0.535)
+0:0.112,
+(
+(
+(
+(
+B4NNJ8.1/320-445:0.294,
+(
+(
+B4J985.1/306-430:0.189,
+B4ME65.1/311-417:0.164)
+0:0.091,
+B4KQM5.1/242-419:0.292)
+0:0.039)
+0:0.173,
+(
+(
+(
+(
+(
+(
+B4JL62.1/290-395:0.199,
+D0H0K7.1/432-591:0.262)
+0:0.051,
+(
+(
+(
+(
+B4K3C6.1/67-191:0.079,
+B4MHJ9.1/106-306:0.151)
+0:0.104,
+B4NP54.1/2-69:0.047)
+0:0.084,
+(
+(
+A5E1Y8.1/358-537:0.182,
+A0BQD1.1/165-319:0.157)
+0:0.087,
+(
+Q25AW7.1/146-228:0.153,
+A8NN12.1/68-136:0.107)
+0:0.049)
+0:0.018)
+0:0.008,
+(
+(
+(
+(
+D1ZFW1.1/794-871:0.102,
+Q4P2T9.1/335-396:0.068)
+0:0.040,
+(
+Q5TST0.3/683-841:0.102,
+D3BH34.1/115-236:0.098)
+0:0.109)
+0:0.038,
+(
+Q4P3Y1.1/128-184:0.002,
+D3B7T2.1/209-345:0.156)
+0:0.102)
+0:0.013,
+(
+C0SUE2.1/77-175:0.131,
+B4JY35.1/15-92:0.056)
+0:0.125)
+0:0.019)
+0:0.014)
+0:0.025,
+(
+A5E351.1/72-416:0.278,
+B4KT28.1/222-266:0.057)
+0:0.135)
+0:0.046,
+(
+(
+(
+Q9VYA6.1/174-225:-0.005,
+Q86NT0.1/173-270:0.109)
+0:0.238,
+(
+B4PH83.1/181-247:0.183,
+Q54FL0.1/951-1244:0.228)
+0:0.134)
+0:0.026,
+A1C5H3.1/188-267:0.341)
+0:0.015)
+0:0.027,
+O42323.1/299-489:0.425)
+0:0.038,
+(
+(
+Q54X31.1/100-217:0.312,
+C5GQY8.1/409-612:0.349)
+0:0.111,
+(
+B4NE44.1/470-686:0.275,
+B4L803.1/240-323:0.238)
+0:0.181)
+0:0.021)
+0:0.037)
+0:0.030,
+(
+B0X8C2.1/150-263:0.425,
+Q6C9A9.1/660-764:0.414)
+0:0.094)
+0:0.032,
+(
+(
+(
+(
+A3F293.1/10-109:0.078,
+A3F299.1/12-111:0.056)
+0:0.289,
+B4KN27.1/225-337:0.347)
+0:0.042,
+Q4PF35.1/18-283:0.438)
+0:0.090,
+B4JPX4.1/284-409:0.487)
+0:0.047)
+0:0.020)
+0:0.023,
+(
+(
+B4N2I1.1/44-159:0.064,
+B3MYX8.1/14-153:0.107)
+0:0.464,
+(
+A5E3S9.1/278-450:0.393,
+Q5TSQ4.3/457-676:0.449)
+0:0.146)
+0:0.052)
+0:0.032,
+(
+(
+(
+A3F295.1/6-117:0.300,
+A3F290.1/9-110:0.287)
+0:0.090,
+Q54LR6.1/53-262:0.429)
+0:0.144,
+Q55F37.1/112-343:0.592)
+0:0.083)
+0:0.016)
+0:0.128,
+B3MKU5.1/256-639:0.878)
+0:0.209)
+0:0.176)
+0:0.103)
+0:0.378,
+(
+(
+A7SDW4.1/430-1260:0.520,
+A7SDW4.1/1319-1671:-0.110)
+0:0.741,
+A7T6Q0.1/2-144:0.476)
+0:0.240)
+0:0.129,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+A8MYY3.2/1098-1737:-0.019,
+(
+D2GZL8.1/1051-1690:-0.018,
+B7ZB91.1/13-478:0.031)
+0:0.021)
+0:0.010,
+B5ME23.2/368-1007:-0.010)
+0:0.005,
+C9J5L7.1/1098-1737:-0.005)
+0:0.017,
+(
+(
+(
+(
+(
+Q3TRH0.1/194-838:0.000,
+Q8BKI2.2/1167-1810:-0.000)
+0:0.000,
+Q8BWL0.1/169-812:-0.000)
+0:0.000,
+Q3TRK2.1/88-731:-0.000)
+0:0.005,
+Q66JU9.1/2-312:-0.005)
+0:0.002,
+Q6P7B1.1/2-432:0.002)
+0:0.003)
+0:0.009,
+Q148P0.1/1-249:-0.005)
+0:0.004,
+Q8VD67.1/1-249:-0.001)
+0:0.001,
+(
+(
+Q4S4D3.1/1091-1191:0.843,
+Q4TA89.1/1-316:-0.133)
+0:0.200,
+Q9JHZ1.1/1-249:-0.004)
+0:0.005)
+0:0.172,
+(
+B0QY77.1/879-1390:0.000,
+B4E231.1/251-762:-0.000)
+0:0.111)
+0:0.061,
+Q4S4D3.1/823-1099:0.293)
+0:0.130,
+(
+(
+(
+(
+(
+(
+B1ATC3.1/1646-1899:0.000,
+B7ZC94.1/1478-1731:-0.000)
+0:0.000,
+Q3UHC0.2/1436-1689:0.000)
+0:0.037,
+Q9HCJ0.3/1434-1689:0.033)
+0:0.006,
+D2H997.1/1476-1729:0.029)
+0:0.112,
+(
+(
+Q4T574.1/1322-1578:0.100,
+Q4T0A8.1/526-801:0.107)
+0:0.054,
+B0R1E2.1/290-554:0.164)
+0:0.054)
+0:0.091,
+(
+(
+(
+(
+(
+C9JA83.1/468-1101:-0.001,
+Q8NDV7.2/119-1962:0.001)
+0:0.001,
+C9JAR8.1/1280-1913:-0.001)
+0:0.011,
+D2I222.1/1-1905:0.004)
+0:0.006,
+(
+(
+(
+D4A372.1/95-1931:0.007,
+(
+(
+(
+Q3UHK8.1/1266-1896:-0.002,
+Q3UUG8.1/1-727:0.002)
+0:0.001,
+Q99JR3.2/24-648:-0.001)
+0:0.001,
+Q8BXM6.1/4-627:0.000)
+0:0.002)
+0:0.001,
+Q3UQ45.1/7-500:0.002)
+0:0.002,
+Q8BWM2.1/1-337:-0.004)
+0:0.007)
+0:0.198,
+Q4S9I4.1/1569-1835:0.159)
+0:0.103)
+0:0.030)
+0:0.155,
+C3ZJT1.1/730-1350:0.391)
+0:0.084)
+0:0.043,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+Q3UTA6.1/197-279:0.024,
+(
+D3Z5M2.1/296-380:0.000,
+Q99LF8.1/296-380:-0.000)
+0:0.000)
+0:0.000,
+D2I596.1/309-392:-0.000)
+0:0.000,
+B1ANR0.1/296-379:-0.000)
+0:0.000,
+A4IFC3.1/296-379:-0.000)
+0:0.000,
+Q13310.1/296-379:-0.000)
+0:0.000,
+Q4VC03.1/296-379:-0.000)
+0:0.000,
+Q6IQ30.1/296-379:-0.000)
+0:0.000,
+D4AC21.1/225-308:-0.000)
+0:0.000,
+D4AC14.1/296-379:-0.000)
+0:0.000,
+B2GUY3.1/296-379:-0.000)
+0:0.000,
+(
+(
+(
+(
+Q91YZ8.1/296-380:0.000,
+A3KFU8.1/296-380:-0.000)
+0:0.000,
+Q6PHQ9.1/296-380:0.000)
+0:0.000,
+A3KFU5.1/296-380:0.000)
+0:0.000,
+Q3UX16.1/225-309:0.000)
+0:0.012)
+0:0.004,
+(
+(
+Q7T3G5.1/297-380:0.000,
+Q8QGJ7.1/296-379:-0.000)
+0:0.000,
+Q4RNX8.1/296-379:0.000)
+0:0.007)
+0:0.003,
+(
+(
+(
+B5DF80.1/306-473:0.053,
+(
+(
+(
+(
+(
+Q2VIP3.1/296-392:-0.000,
+Q3ZCS4.1/296-393:0.000)
+0:0.000,
+Q2VIN7.1/296-392:-0.000)
+0:0.001,
+Q5VX58.1/296-390:-0.001)
+0:0.001,
+Q9H361.2/296-390:-0.001)
+0:0.014,
+Q2VIN9.1/296-390:0.029)
+0:0.020)
+0:0.069,
+Q9D4E6.1/307-466:0.129)
+0:0.018,
+Q15164.1/107-185:-0.009)
+0:0.002)
+0:0.014,
+(
+(
+(
+B2RXY9.1/296-394:0.001,
+A2A5N3.1/296-393:-0.001)
+0:0.054,
+D3ZAS7.1/296-399:0.066)
+0:0.092,
+(
+D2H6M0.1/296-405:0.023,
+(
+Q4VXU2.1/296-404:0.021,
+Q98SP8.2/296-391:0.044)
+0:0.012)
+0:0.057)
+0:0.024)
+0:0.068,
+(
+(
+(
+(
+(
+C5YBU9.1/329-416:0.006,
+B6U4M0.1/324-410:0.005)
+0:0.202,
+(
+(
+B9H7X8.1/304-412:0.000,
+B9H7X9.1/314-422:-0.000)
+0:0.043,
+B9GT62.1/311-412:0.052)
+0:0.106)
+0:0.044,
+Q05196.2/328-430:0.240)
+0:0.014,
+(
+(
+A2YEJ5.1/343-442:-0.001,
+Q69X94.1/342-443:0.001)
+0:0.002,
+B9FTY9.1/365-463:-0.002)
+0:0.294)
+0:0.037,
+A9TLC5.1/312-407:0.154)
+0:0.048)
+0:0.045,
+(
+(
+(
+(
+(
+P31209.2/366-455:0.071,
+B6K033.1/364-457:0.073)
+0:0.009,
+B6K6T8.1/356-444:0.054)
+0:0.118,
+Q6CDH3.1/332-428:0.118)
+0:0.018,
+(
+D3AVQ3.1/284-366:0.103,
+(
+(
+Q5KBW2.1/367-420:0.090,
+Q4P8R9.1/368-413:0.076)
+0:0.142,
+Q54BM2.1/286-375:0.110)
+0:0.048)
+0:0.045)
+0:0.035,
+A8NF86.1/337-425:0.197)
+0:0.186)
+0:0.108,
+(
+(
+A5BE57.1/307-474:0.366,
+B9RQB9.1/300-388:0.182)
+0:0.095,
+B9GH32.1/295-362:0.175)
+0:0.086)
+0:0.015,
+(
+(
+(
+(
+A5BE57.1/246-300:0.110,
+C4QZM5.1/235-294:0.257)
+0:0.065,
+B9RQB9.1/236-287:0.213)
+0:0.043,
+A5B3Z9.1/212-306:0.242)
+0:0.073,
+(
+C5WPD4.1/242-318:0.104,
+(
+Q10N87.1/216-320:0.005,
+B8AL31.1/216-320:0.005)
+0:0.117)
+0:0.178)
+0:0.112)
+0:0.035,
+(
+(
+(
+B9RQB9.1/109-183:0.228,
+B9GH32.1/107-174:0.128)
+0:0.095,
+O04319.1/114-194:0.233)
+0:0.124,
+(
+(
+C5YBU9.1/128-201:0.118,
+B9H7X8.1/113-180:0.182)
+0:0.023,
+(
+(
+Q8RXR5.1/110-177:0.000,
+P42731.1/126-193:-0.000)
+0:0.059,
+Q9M6E6.1/117-184:0.050)
+0:0.093)
+0:0.244)
+0:0.083)
+0:0.010,
+O04319.1/304-419:0.498)
+0:0.039,
+(
+(
+(
+B2GUY3.1/194-262:0.000,
+D4AC14.1/194-262:-0.000)
+0:0.000,
+D4AC21.1/123-191:0.000)
+0:0.268,
+(
+B2RXY9.1/193-253:0.000,
+A2A5N3.1/193-253:-0.000)
+0:0.223)
+0:0.042)
+0:0.110,
+B3S2W8.1/76-163:0.692)
+0:0.051,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+A8PU70.1/566-908:0.875,
+B9MVK8.1/264-361:-0.305)
+0:0.335,
+B9GNX9.1/266-364:-0.203)
+0:0.184,
+A5BPW5.1/140-241:-0.026)
+0:0.069,
+B9R7H3.1/281-377:0.032)
+0:0.193,
+(
+(
+(
+(
+(
+(
+(
+C5WVW4.1/223-289:-0.012,
+(
+(
+B8APB9.1/226-292:0.000,
+Q10R21.1/226-292:-0.000)
+0:0.000,
+Q0DUQ0.1/248-314:0.000)
+0:0.092)
+0:0.006,
+(
+C4IYK3.1/223-290:0.000,
+B6UA93.1/223-290:-0.000)
+0:0.017)
+0:0.158,
+(
+(
+(
+(
+C0PPV9.1/259-392:0.004,
+C0PT30.1/259-393:0.004)
+0:0.249,
+(
+B8LRZ2.1/277-363:-0.002,
+A9NX92.1/275-362:0.002)
+0:0.140)
+0:0.030,
+(
+A9TFH5.1/223-287:-0.014,
+A9TZW4.1/245-319:0.014)
+0:0.063)
+0:0.055,
+A9NWA0.1/248-328:0.074)
+0:0.080)
+0:0.012,
+(
+Q9FPJ8.1/236-325:0.000,
+Q9FFU0.1/236-325:-0.000)
+0:0.273)
+0:0.040,
+B9RIB9.1/231-294:0.143)
+0:0.051,
+(
+(
+Q6R969.1/253-422:0.025,
+Q2V9C2.1/258-417:0.013)
+0:0.281,
+Q9FX88.1/338-415:0.182)
+0:0.041)
+0:0.020,
+(
+(
+(
+(
+(
+B9N4W3.1/235-341:0.009,
+B9HRX8.1/250-356:0.019)
+0:0.064,
+B9RY32.1/285-382:0.031)
+0:0.074,
+(
+(
+Q8LFI9.1/244-343:0.000,
+Q0WW84.1/287-386:-0.000)
+0:0.000,
+Q9LJL7.1/287-386:0.000)
+0:0.110)
+0:0.055,
+A5BF74.1/281-378:0.132)
+0:0.038,
+Q2V9A1.1/201-306:0.169)
+0:0.026)
+0:0.035)
+0:0.027,
+(
+(
+Q2PEV8.1/238-322:0.139,
+(
+(
+(
+C5WUD2.1/243-339:0.040,
+C0P488.1/242-336:0.037)
+0:0.023,
+(
+(
+(
+(
+Q10HZ8.1/240-333:0.000,
+Q9AY92.1/240-333:-0.000)
+0:0.000,
+Q10HZ7.1/240-333:0.000)
+0:0.000,
+B8AKU6.1/240-333:0.000)
+0:0.000,
+Q0DQQ8.1/284-377:0.000)
+0:0.058)
+0:0.121,
+(
+Q9LEB4.1/261-347:0.119,
+(
+A5C5B3.1/256-335:0.115,
+B9I0E1.1/253-334:0.142)
+0:0.014)
+0:0.069)
+0:0.033)
+0:0.053,
+(
+Q8LBV8.1/233-325:0.000,
+Q9SAB3.1/234-326:-0.000)
+0:0.268)
+0:0.086)
+0:0.073,
+A3GHN7.2/350-469:0.528)
+0:0.110,
+D3BFK6.1/320-440:0.782)
+0:0.050,
+(
+B3S2W8.1/165-267:0.611,
+(
+(
+(
+B4NBP3.1/171-277:0.005,
+B3M300.1/220-284:0.030)
+0:0.047,
+(
+B4MC02.1/171-283:0.021,
+B4JIH9.1/171-286:0.054)
+0:0.054)
+0:0.503,
+(
+Q6DGV1.1/174-212:-0.076,
+B5LEQ5.1/179-323:0.129)
+0:0.415)
+0:0.007)
+0:0.129)
+0:0.026)
+0:0.066,
+(
+Q7Q9F7.4/282-427:0.616,
+(
+A3CUY7.1/2-69:0.107,
+Q2FSR7.1/6-69:0.205)
+0:0.078)
+0:0.137)
+0:0.022,
+(
+(
+A9USE7.1/720-774:0.448,
+D4APH2.1/480-541:0.453)
+0:0.137,
+D0N277.1/201-240:0.388)
+0:0.137)
+0:0.014,
+(
+(
+A9USE7.1/997-1101:0.418,
+A7AT74.1/621-697:0.263)
+0:0.345,
+(
+Q54C48.1/271-412:0.585,
+C5DIP1.1/2-75:0.406)
+0:0.164)
+0:0.035)
+0:0.019,
+(
+C4Q4K6.1/224-436:0.532,
+C4XVP0.1/46-94:0.487)
+0:0.164)
+0:0.083,
+(
+B3RQ20.1/1143-1394:0.677,
+(
+A9S4M3.1/42-65:0.039,
+A9T3C5.1/56-79:0.003)
+0:0.104)
+0:0.176)
+0:0.025,
+Q2I2V8.1/539-606:0.686)
+0:0.082,
+(
+C0PFW8.1/269-336:0.000,
+C0HHH3.1/270-337:-0.000)
+0:0.592)
+0:0.040)
+0:0.093,
+(
+(
+(
+(
+(
+B0WTJ5.1/228-1404:0.166,
+Q172C6.1/6-1080:0.150)
+0:0.089,
+Q7Q3B9.4/781-1217:0.238)
+0:0.069,
+(
+(
+Q172C8.1/672-1244:0.123,
+B0WXG8.1/1199-1287:0.093)
+0:0.111,
+A7UUT0.1/838-1208:0.295)
+0:0.095)
+0:0.086,
+B7PWH5.1/720-1088:0.585)
+0:0.018,
+(
+(
+Q172C7.1/573-1487:0.184,
+B0WXH0.1/1191-1443:0.173)
+0:0.125,
+A0NFA3.2/687-1175:0.390)
+0:0.051)
+0:0.071)
+0:0.166)
+0:0.063,
+B4NHM7.1/6-1344:0.249)
+0:0.025,
+(
+(
+(
+B4MF11.1/6-1287:-0.275,
+(
+B4L7C4.1/6-1178:-0.305,
+(
+(
+C1K8B6.1/4-244:0.003,
+C1K890.1/4-244:0.002)
+0:0.141,
+C1K8V5.1/4-177:0.134)
+0:0.508)
+0:0.355)
+0:0.152,
+D0Z7B2.1/6-1290:-0.130)
+0:0.198,
+B4JZV3.1/6-1310:0.052)
+0:0.113)
+0:0.044,
+(
+Q29CP6.2/6-1291:0.061,
+B4H887.1/32-1121:0.061)
+0:0.074)
+0:0.131,
+B4PW21.1/6-1287:0.027)
+0:0.029)
+0:0.030,
+B4R2G2.1/6-1156:-0.030)
+0:0.057)
+0:0.106)
+0:0.089)
+;
diff --git a/test/scripts/automated/belvu/test43 b/test/scripts/automated/belvu/test43
new file mode 100755
index 0000000..ef00bf1
--- /dev/null
+++ b/test/scripts/automated/belvu/test43
@@ -0,0 +1,25 @@
+#!/bin/ksh
+#
+# Description:
+#   Test creating a neighbour-joining tree (kimura distance correction)
+
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences to the saved results
+diffs=`belvu -T nk -o tree  $data_dir/ALIGN.selex >&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
+
diff --git a/test/scripts/automated/belvu/test43_results b/test/scripts/automated/belvu/test43_results
new file mode 100644
index 0000000..df928c8
--- /dev/null
+++ b/test/scripts/automated/belvu/test43_results
@@ -0,0 +1,1108 @@
+(
+A8PU70.1/566-908:0.539,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+Q9UPQ9.4/1-1833:-0.473,
+(
+D2GZL8.1/5-902:-0.008,
+(
+Q3TRH0.1/1-49:0.015,
+Q1LZM4.1/2-292:-0.015)
+0:0.052)
+0:0.484)
+0:0.224,
+Q9UPQ9.4/1-1833:-0.224)
+0:0.240,
+(
+(
+(
+(
+(
+(
+A8MYY3.2/16-949:-0.014,
+(
+(
+(
+B5ME23.2/16-165:0.017,
+B4DKJ5.1/1-276:-0.011)
+0:0.021,
+Q8BX83.2/38-410:0.007)
+0:0.078,
+Q8BKI2.2/38-1167:-0.078)
+0:0.045)
+0:0.007,
+C9J5L7.1/16-949:-0.007)
+0:0.086,
+B1H1W1.1/13-388:0.220)
+0:0.090,
+(
+(
+Q4S4D3.1/1-379:0.218,
+Q4T1P6.1/6-46:0.205)
+0:0.041,
+Q4T5V2.1/1-136:0.253)
+0:0.064)
+0:0.238,
+(
+(
+C9JAR8.1/20-121:0.000,
+Q8NDV7.2/20-121:-0.000)
+0:0.057,
+D4A372.1/1-97:0.062)
+0:0.498)
+0:0.059,
+C3ZJT1.1/159-315:0.616)
+0:0.309)
+0:0.338,
+(
+(
+(
+(
+(
+(
+(
+(
+A8MYY3.2/946-1098:0.003,
+C9J5L7.1/946-1098:0.003)
+0:0.016,
+(
+Q3TRH0.1/46-194:0.002,
+(
+Q8BWL0.1/2-169:-0.012,
+Q3TRK2.1/1-88:0.012)
+0:0.015)
+0:0.021)
+0:0.007,
+D2GZL8.1/900-1051:0.020)
+0:0.030,
+B5ME23.2/165-368:0.006)
+0:0.018,
+B4E231.1/1-251:-0.014)
+0:0.029,
+B0QY77.1/1-879:-0.029)
+0:0.075,
+A0CJW3.1/434-742:-0.083)
+0:0.909,
+(
+(
+(
+(
+(
+(
+(
+B1ATC3.1/1015-1647:-0.001,
+B7ZC94.1/855-1477:0.001)
+0:0.000,
+Q3UHC0.2/805-1437:-0.000)
+0:0.042,
+Q9HCJ0.3/810-1437:0.034)
+0:0.008,
+D2H997.1/853-1477:0.040)
+0:0.045,
+(
+Q4T574.1/639-850:0.265,
+Q4T0A8.1/27-228:0.260)
+0:0.205)
+0:0.247,
+C3ZJT1.1/371-689:0.655)
+0:0.052,
+(
+Q4S4D3.1/395-556:0.360,
+Q4TA88.1/5-275:0.327)
+0:0.371)
+0:0.208)
+0:0.267)
+0:0.054,
+B7PWH5.1/252-389:1.219)
+0:0.065,
+(
+(
+(
+(
+(
+(
+(
+C9JA83.1/3-471:-0.029,
+B4DST4.1/1-168:0.054)
+0:0.037,
+C9JAR8.1/119-1283:-0.037)
+0:0.074,
+(
+(
+Q05CE3.1/20-1014:-0.009,
+(
+Q8BNF0.2/9-877:-0.014,
+Q6ZPQ4.1/1-243:0.027)
+0:0.010)
+0:0.023,
+Q3UHK8.1/20-1269:-0.020)
+0:0.056)
+0:0.398,
+Q8NDV7.2/119-1962:-0.415)
+0:0.234,
+D4A372.1/95-1931:-0.195)
+0:0.119,
+D2I222.1/1-1905:-0.090)
+0:0.243,
+(
+(
+(
+(
+(
+(
+(
+(
+C9JA83.1/468-1101:-0.176,
+(
+Q3UQ45.1/7-500:-0.218,
+B3KSX2.1/4-277:0.284)
+0:0.159)
+0:0.090,
+C9JAR8.1/1280-1913:-0.090)
+0:0.063,
+Q99JR3.2/24-648:-0.038)
+0:0.019,
+Q3UHK8.1/1266-1896:-0.019)
+0:0.011,
+Q8BXM6.1/4-627:-0.010)
+0:0.008,
+Q3UUG8.1/1-727:-0.008)
+0:0.028,
+(
+Q4S9I4.1/33-1574:0.533,
+Q8BWM2.1/1-337:-0.167)
+0:0.230)
+0:0.067,
+(
+(
+Q4T574.1/894-1324:0.038,
+Q4T0A8.1/405-529:0.223)
+0:0.089,
+B0R1E2.1/1-289:0.122)
+0:0.650)
+0:0.080)
+0:0.352)
+0:0.067,
+(
+(
+(
+(
+(
+(
+B1ATC3.1/2-1028:-0.012,
+(
+B7ZC94.1/2-868:0.005,
+Q3UHC0.2/4-818:0.009)
+0:0.012)
+0:0.026,
+D3ZRA6.1/2-1000:0.018)
+0:0.030,
+(
+D2H997.1/2-866:0.047,
+Q9HCJ0.3/4-822:0.054)
+0:0.032)
+0:0.423,
+Q4T0A9.1/1-255:0.600)
+0:0.117,
+Q4T574.1/1-220:0.719)
+0:0.603,
+(
+(
+Q4T574.1/239-596:0.688,
+Q4T0A9.1/370-579:0.677)
+0:0.118,
+C3ZJT1.1/328-369:0.709)
+0:0.530)
+0:0.065)
+0:0.140,
+(
+(
+(
+(
+Q4S4D3.1/557-654:0.501,
+Q7SGG0.1/13-167:0.298)
+0:0.747,
+(
+(
+(
+P20105.2/153-385:0.054,
+B4PJL3.1/173-393:0.067)
+0:0.038,
+B3NHT3.1/152-330:0.178)
+0:0.025,
+B3M4K4.1/89-378:0.234)
+0:0.975)
+0:0.118,
+(
+(
+(
+Q2GV87.1/66-278:0.875,
+(
+(
+(
+(
+A3F293.1/10-109:0.085,
+A3F299.1/12-111:0.052)
+0:0.335,
+Q54LR6.1/53-262:0.502)
+0:0.058,
+(
+A3F295.1/6-117:0.333,
+A3F290.1/9-110:0.313)
+0:0.151)
+0:0.127,
+Q55F37.1/112-343:0.711)
+0:0.166)
+0:0.073,
+(
+(
+(
+(
+P20105.2/537-654:0.091,
+B4PJL3.1/533-654:0.121)
+0:0.079,
+B3M4K4.1/533-691:0.232)
+0:0.529,
+(
+(
+(
+C1GVG2.1/279-439:0.006,
+(
+C0SAP5.1/281-410:0.002,
+C1GDP1.1/281-415:0.111)
+0:0.122)
+0:0.351,
+Q86KE5.1/77-311:0.578)
+0:0.161,
+(
+B3NV15.1/1200-1273:0.273,
+B4PZT3.1/1188-1272:0.375)
+0:0.234)
+0:0.157)
+0:0.089,
+(
+(
+C1GEW9.1/11-129:0.563,
+A5E7X5.1/33-235:0.652)
+0:0.198,
+(
+(
+(
+(
+(
+B4NNJ8.1/320-445:0.358,
+(
+B4J985.1/306-430:0.202,
+B4ME65.1/311-417:0.172)
+0:0.189)
+0:0.191,
+(
+(
+(
+(
+(
+(
+(
+(
+B4JL62.1/290-395:0.178,
+Q25AW7.1/146-228:0.156)
+0:0.042,
+(
+(
+B4K3C6.1/67-191:0.062,
+B4MHJ9.1/106-306:0.177)
+0:0.155,
+B4NP54.1/2-69:0.005)
+0:0.067)
+0:0.043,
+(
+(
+A5E1Y8.1/358-537:0.209,
+A0BQD1.1/165-319:0.151)
+0:0.111,
+A8NN12.1/68-136:0.122)
+0:0.052)
+0:0.009,
+(
+(
+(
+(
+D1ZFW1.1/794-871:0.111,
+Q4P2T9.1/335-396:0.064)
+0:0.023,
+(
+Q5TST0.3/683-841:0.109,
+D3BH34.1/115-236:0.097)
+0:0.142)
+0:0.051,
+(
+Q4P3Y1.1/128-184:-0.029,
+D3B7T2.1/209-345:0.191)
+0:0.114)
+0:0.024,
+(
+(
+C0SUE2.1/77-175:0.153,
+B4JY35.1/15-92:0.040)
+0:0.117,
+(
+Q54FL0.1/951-1244:0.253,
+D0H0K7.1/432-591:0.215)
+0:0.114)
+0:0.040)
+0:0.018)
+0:0.050,
+(
+Q54X31.1/100-217:0.335,
+C5GQY8.1/409-612:0.402)
+0:0.080)
+0:0.048,
+(
+B4NE44.1/470-686:0.320,
+B4L803.1/240-323:0.238)
+0:0.214)
+0:0.032,
+(
+(
+(
+A5E351.1/72-416:0.361,
+B4KT28.1/222-266:-0.008)
+0:0.187,
+O42323.1/299-489:0.450)
+0:0.052,
+A1C5H3.1/188-267:0.411)
+0:0.038)
+0:0.064,
+(
+Q4PF35.1/18-283:0.517,
+(
+(
+Q9VYA6.1/174-225:-0.036,
+Q86NT0.1/173-270:0.142)
+0:0.256,
+B4KN27.1/225-337:0.380)
+0:0.060)
+0:0.100)
+0:0.015)
+0:0.041,
+(
+B0X8C2.1/150-263:0.499,
+Q6C9A9.1/660-764:0.468)
+0:0.131)
+0:0.018,
+(
+(
+B4N2I1.1/44-159:0.054,
+B3MYX8.1/14-153:0.122)
+0:0.417,
+(
+A5E3S9.1/278-450:0.410,
+B4PH83.1/181-247:0.313)
+0:0.095)
+0:0.160)
+0:0.055,
+(
+B4JPX4.1/284-409:0.659,
+D3B9K1.1/622-823:0.842)
+0:0.008)
+0:0.033)
+0:0.086)
+0:0.047)
+0:0.077,
+(
+B3MKU5.1/256-639:0.800,
+Q5TSQ4.3/457-676:0.744)
+0:0.253)
+0:0.272)
+0:0.044,
+(
+(
+Q4S4D3.1/651-825:0.192,
+Q4TA88.1/319-457:0.316)
+0:0.914,
+(
+Q4T0A8.1/329-402:0.897,
+B3M562.1/702-895:0.932)
+0:0.252)
+0:0.154)
+0:0.165)
+0:0.112,
+(
+(
+(
+(
+B3N1G0.1/6-1260:0.346,
+(
+(
+(
+(
+(
+B3P9S0.1/6-1293:0.072,
+(
+(
+B4IIY1.1/6-1290:-0.040,
+(
+Q8SY33.1/6-1289:-0.164,
+Q8MSF0.1/1-120:0.164)
+0:0.095)
+0:0.055,
+B4R2G2.1/6-1156:-0.028)
+0:0.015)
+0:0.049,
+B4PW21.1/6-1287:0.008)
+0:0.157,
+(
+Q29CP6.2/6-1291:0.057,
+B4H887.1/32-1121:0.068)
+0:0.063)
+0:0.059,
+B4NHM7.1/6-1344:0.269)
+0:0.036,
+(
+(
+(
+B4MF11.1/6-1287:-0.180,
+(
+B4L7C4.1/6-1178:-0.107,
+(
+(
+C1K8B6.1/4-244:0.003,
+C1K890.1/4-244:0.001)
+0:0.150,
+C1K8V5.1/4-177:0.137)
+0:0.324)
+0:0.262)
+0:0.105,
+D0Z7B2.1/6-1290:-0.083)
+0:0.189,
+B4JZV3.1/6-1310:0.079)
+0:0.115)
+0:0.076)
+0:0.177,
+(
+(
+Q172C7.1/573-1487:0.187,
+B0WXH0.1/1191-1443:0.191)
+0:0.148,
+(
+Q7Q3B9.4/781-1217:0.289,
+(
+A7UUT0.1/838-1208:0.346,
+B0WXG8.1/1199-1287:0.178)
+0:0.100)
+0:0.170)
+0:0.125)
+0:0.112,
+(
+(
+(
+B0WTJ5.1/228-1404:0.183,
+Q172C6.1/6-1080:0.149)
+0:0.019,
+(
+(
+(
+Q7Q3B9.4/7-766:0.158,
+B8RJB3.1/9-266:0.031)
+0:0.132,
+A7UUT0.1/686-771:0.334)
+0:0.383,
+Q172C8.1/672-1244:-0.023)
+0:0.269)
+0:0.184,
+(
+(
+(
+(
+Q172C7.1/363-538:0.281,
+B0WXH0.1/311-1189:0.052)
+0:0.225,
+B4H886.1/6-148:0.472)
+0:0.124,
+(
+(
+Q172C8.1/192-646:0.432,
+B0WXG8.1/386-1198:0.162)
+0:0.159,
+A7UUT0.1/13-626:0.568)
+0:0.045)
+0:0.310,
+(
+A0NFA3.2/8-516:0.652,
+B7PWH5.1/349-695:0.541)
+0:0.303)
+0:0.254)
+0:0.313)
+0:0.119,
+(
+(
+A0NFA3.2/687-1175:-0.149,
+B4KQM5.1/242-419:0.149)
+0:1.158,
+(
+(
+B7PWH5.1/720-1088:0.494,
+A7SDW4.1/430-1260:0.987)
+0:0.345,
+(
+A7SDW4.1/1319-1671:0.011,
+A7T6Q0.1/2-144:-0.011)
+0:1.007)
+0:0.207)
+0:0.042)
+0:0.026)
+0:0.195,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+A8MYY3.2/1098-1737:-0.119,
+(
+D2GZL8.1/1051-1690:-0.189,
+(
+Q1LZM4.1/292-736:-0.076,
+(
+Q8BXV9.1/2-142:0.040,
+Q8BZH2.1/5-63:0.050)
+0:0.089)
+0:0.218)
+0:0.125)
+0:0.061,
+B5ME23.2/368-1007:-0.061)
+0:0.030,
+C9J5L7.1/1098-1737:-0.030)
+0:0.028,
+Q8BWL0.1/169-812:-0.006)
+0:0.003,
+(
+(
+(
+Q3TRH0.1/194-838:-0.022,
+(
+(
+Q6P7B1.1/2-432:-0.000,
+(
+Q148P0.1/1-249:0.000,
+Q9JHZ1.1/1-249:-0.000)
+0:0.000)
+0:0.001,
+(
+Q66JU9.1/2-312:0.002,
+Q8VD67.1/1-249:-0.002)
+0:0.003)
+0:0.022)
+0:0.011,
+Q8BKI2.2/1167-1810:-0.011)
+0:0.006,
+Q3TRK2.1/88-731:-0.006)
+0:0.003)
+0:0.053,
+B7ZB91.1/13-478:-0.043)
+0:0.042,
+B0QY77.1/879-1390:-0.043)
+0:0.022,
+B4E231.1/251-762:-0.022)
+0:0.129,
+Q4S4D3.1/823-1099:0.371)
+0:0.232,
+(
+(
+(
+(
+(
+(
+(
+B1ATC3.1/1646-1899:0.000,
+B7ZC94.1/1478-1731:-0.000)
+0:0.000,
+Q3UHC0.2/1436-1689:0.000)
+0:0.038,
+Q9HCJ0.3/1434-1689:0.032)
+0:0.012,
+D2H997.1/1476-1729:0.023)
+0:0.095,
+(
+(
+Q4T574.1/1322-1578:0.103,
+Q4T0A8.1/526-801:0.111)
+0:0.064,
+B0R1E2.1/290-554:0.168)
+0:0.085)
+0:0.102,
+(
+Q4S4D3.1/1091-1191:0.723,
+Q4TA89.1/1-316:0.075)
+0:0.367)
+0:0.070,
+Q4S9I4.1/1569-1835:0.348)
+0:0.020)
+0:0.192,
+C3ZJT1.1/730-1350:0.447)
+0:0.160,
+(
+C0PFW8.1/269-336:0.000,
+C0HHH3.1/270-337:-0.000)
+0:0.681)
+0:0.155,
+Q2I2V8.1/539-606:0.878)
+0:0.034)
+0:0.245,
+D3BFK6.1/320-440:1.012)
+0:0.069,
+(
+(
+(
+(
+(
+B3RQ20.1/1143-1394:0.967,
+A9S4M3.1/42-65:-0.049)
+0:0.066,
+A9T3C5.1/56-79:-0.045)
+0:0.270,
+(
+Q6DGV1.1/174-212:-0.144,
+B5LEQ5.1/179-323:0.197)
+0:0.416)
+0:0.078,
+(
+A9USE7.1/997-1101:0.534,
+A7AT74.1/621-697:0.229)
+0:0.495)
+0:0.088,
+(
+(
+A9USE7.1/720-774:0.518,
+D4APH2.1/480-541:0.530)
+0:0.255,
+D0N277.1/201-240:0.374)
+0:0.177)
+0:0.068)
+0:0.042,
+(
+Q7Q9F7.4/282-427:0.793,
+(
+A3CUY7.1/2-69:0.092,
+Q2FSR7.1/6-69:0.236)
+0:0.023)
+0:0.242)
+0:0.026,
+(
+(
+C4Q4K6.1/224-436:0.655,
+C4XVP0.1/46-94:0.559)
+0:0.267,
+C4QZM5.1/235-294:0.215)
+0:0.147)
+0:0.040,
+(
+(
+B3S2W8.1/165-267:0.794,
+(
+B4NBP3.1/171-277:0.033,
+(
+B3M300.1/220-284:0.019,
+(
+B4MC02.1/171-283:0.014,
+B4JIH9.1/171-286:0.062)
+0:0.017)
+0:0.072)
+0:0.629)
+0:0.055,
+(
+Q54C48.1/271-412:0.738,
+C5DIP1.1/2-75:0.437)
+0:0.249)
+0:0.216)
+0:0.029,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+D3Z5M2.1/296-380:-0.000,
+Q3UTA6.1/197-279:0.025)
+0:0.000,
+Q99LF8.1/296-380:-0.000)
+0:0.000,
+D2I596.1/309-392:-0.000)
+0:0.000,
+B1ANR0.1/296-379:-0.000)
+0:0.000,
+A4IFC3.1/296-379:-0.000)
+0:0.000,
+Q13310.1/296-379:-0.000)
+0:0.000,
+Q4VC03.1/296-379:-0.000)
+0:0.000,
+Q6IQ30.1/296-379:-0.000)
+0:0.000,
+D4AC21.1/225-308:-0.000)
+0:0.000,
+D4AC14.1/296-379:-0.000)
+0:0.000,
+B2GUY3.1/296-379:-0.000)
+0:0.001,
+(
+(
+(
+(
+Q91YZ8.1/296-380:0.000,
+A3KFU8.1/296-380:-0.000)
+0:0.000,
+Q6PHQ9.1/296-380:0.000)
+0:0.000,
+A3KFU5.1/296-380:0.000)
+0:0.000,
+Q3UX16.1/225-309:0.000)
+0:0.011)
+0:0.002,
+(
+(
+(
+(
+B2RXY9.1/296-394:0.001,
+A2A5N3.1/296-393:-0.001)
+0:0.055,
+D3ZAS7.1/296-399:0.068)
+0:0.098,
+(
+D2H6M0.1/296-405:0.022,
+(
+Q4VXU2.1/296-404:0.021,
+Q98SP8.2/296-391:0.045)
+0:0.013)
+0:0.060)
+0:0.039,
+(
+(
+Q7T3G5.1/297-380:0.000,
+Q8QGJ7.1/296-379:-0.000)
+0:0.000,
+Q4RNX8.1/296-379:0.000)
+0:0.006)
+0:0.003)
+0:0.004,
+(
+(
+B5DF80.1/306-473:0.054,
+(
+(
+(
+(
+(
+Q2VIP3.1/296-392:-0.000,
+Q3ZCS4.1/296-393:0.000)
+0:0.000,
+Q2VIN7.1/296-392:-0.000)
+0:0.001,
+Q5VX58.1/296-390:-0.001)
+0:0.001,
+Q9H361.2/296-390:-0.001)
+0:0.013,
+Q2VIN9.1/296-390:0.030)
+0:0.020)
+0:0.075,
+Q9D4E6.1/307-466:0.136)
+0:0.019)
+0:0.010,
+Q15164.1/107-185:-0.016)
+0:0.067,
+(
+(
+(
+(
+(
+C5YBU9.1/329-416:0.007,
+B6U4M0.1/324-410:0.005)
+0:0.216,
+(
+(
+B9H7X8.1/304-412:0.000,
+B9H7X9.1/314-422:-0.000)
+0:0.043,
+B9GT62.1/311-412:0.054)
+0:0.114)
+0:0.051,
+(
+(
+A2YEJ5.1/343-442:-0.001,
+Q69X94.1/342-443:0.001)
+0:0.003,
+B9FTY9.1/365-463:-0.003)
+0:0.309)
+0:0.015,
+Q05196.2/328-430:0.276)
+0:0.030,
+A9TLC5.1/312-407:0.148)
+0:0.071)
+0:0.047,
+(
+(
+(
+(
+(
+P31209.2/366-455:0.071,
+B6K033.1/364-457:0.076)
+0:0.012,
+B6K6T8.1/356-444:0.051)
+0:0.130,
+Q6CDH3.1/332-428:0.121)
+0:0.047,
+(
+D3AVQ3.1/284-366:0.130,
+Q54BM2.1/286-375:0.189)
+0:0.047)
+0:0.030,
+A8NF86.1/337-425:0.226)
+0:0.201)
+0:0.120,
+(
+(
+(
+A5BE57.1/307-474:0.422,
+B9RQB9.1/300-388:0.178)
+0:0.124,
+B9GH32.1/295-362:0.173)
+0:0.094,
+(
+(
+(
+(
+B9RQB9.1/109-183:0.254,
+B9GH32.1/107-174:0.124)
+0:0.112,
+O04319.1/114-194:0.249)
+0:0.157,
+(
+(
+C5YBU9.1/128-201:0.113,
+B9H7X8.1/113-180:0.203)
+0:0.029,
+(
+(
+Q8RXR5.1/110-177:0.000,
+P42731.1/126-193:-0.000)
+0:0.061,
+Q9M6E6.1/117-184:0.050)
+0:0.096)
+0:0.287)
+0:0.109,
+O04319.1/304-419:0.602)
+0:0.044)
+0:0.027)
+0:0.036,
+(
+(
+(
+A5BE57.1/246-300:0.138,
+B9RQB9.1/236-287:0.213)
+0:0.046,
+A5B3Z9.1/212-306:0.236)
+0:0.100,
+(
+C5WPD4.1/242-318:0.107,
+(
+Q10N87.1/216-320:0.005,
+B8AL31.1/216-320:0.005)
+0:0.123)
+0:0.194)
+0:0.141)
+0:0.085,
+(
+(
+B2GUY3.1/194-262:0.000,
+D4AC14.1/194-262:-0.000)
+0:0.000,
+D4AC21.1/123-191:0.000)
+0:0.349)
+0:0.035,
+(
+(
+B2RXY9.1/193-253:0.000,
+A2A5N3.1/193-253:-0.000)
+0:0.222,
+(
+B3S2W8.1/76-163:0.855,
+(
+Q5KBW2.1/367-420:0.096,
+Q4P8R9.1/368-413:0.075)
+0:0.152)
+0:0.126)
+0:0.037)
+0:0.187)
+0:0.267,
+(
+(
+(
+(
+(
+(
+(
+C5WVW4.1/223-289:-0.019,
+(
+(
+C4IYK3.1/223-290:-0.010,
+(
+(
+B8APB9.1/226-292:0.000,
+Q10R21.1/226-292:-0.000)
+0:0.000,
+Q0DUQ0.1/248-314:0.000)
+0:0.124)
+0:0.005,
+B6UA93.1/223-290:-0.005)
+0:0.022)
+0:0.157,
+(
+(
+(
+(
+C0PPV9.1/259-392:0.004,
+C0PT30.1/259-393:0.004)
+0:0.306,
+(
+B8LRZ2.1/277-363:-0.002,
+A9NX92.1/275-362:0.002)
+0:0.109)
+0:0.083,
+(
+A9TFH5.1/223-287:-0.018,
+A9TZW4.1/245-319:0.018)
+0:0.012)
+0:0.103,
+A9NWA0.1/248-328:0.032)
+0:0.103)
+0:0.004,
+(
+Q9FPJ8.1/236-325:0.000,
+Q9FFU0.1/236-325:-0.000)
+0:0.310)
+0:0.055,
+(
+(
+(
+C5WUD2.1/243-339:0.041,
+C0P488.1/242-336:0.037)
+0:0.024,
+(
+(
+(
+(
+Q10HZ8.1/240-333:0.000,
+Q9AY92.1/240-333:-0.000)
+0:0.000,
+Q10HZ7.1/240-333:0.000)
+0:0.000,
+B8AKU6.1/240-333:0.000)
+0:0.000,
+Q0DQQ8.1/284-377:0.000)
+0:0.058)
+0:0.129,
+(
+Q9LEB4.1/261-347:0.115,
+(
+A5C5B3.1/256-335:0.115,
+B9I0E1.1/253-334:0.153)
+0:0.024)
+0:0.079)
+0:0.038)
+0:0.037,
+Q2PEV8.1/238-322:0.142)
+0:0.044,
+(
+Q8LBV8.1/233-325:0.000,
+Q9SAB3.1/234-326:-0.000)
+0:0.303)
+0:0.115,
+A3GHN7.2/350-469:0.606)
+0:0.093)
+0:0.061,
+(
+(
+(
+(
+(
+(
+B9N4W3.1/235-341:0.006,
+B9HRX8.1/250-356:0.022)
+0:0.079,
+B9RY32.1/285-382:0.018)
+0:0.087,
+(
+(
+Q8LFI9.1/244-343:0.000,
+Q0WW84.1/287-386:-0.000)
+0:0.000,
+Q9LJL7.1/287-386:0.000)
+0:0.106)
+0:0.072,
+A5BF74.1/281-378:0.126)
+0:0.044,
+(
+B9RIB9.1/231-294:0.162,
+(
+(
+Q6R969.1/253-422:0.029,
+Q2V9C2.1/258-417:0.010)
+0:0.346,
+Q9FX88.1/338-415:0.158)
+0:0.050)
+0:0.033)
+0:0.015,
+Q2V9A1.1/201-306:0.179)
+0:0.106)
+0:0.233,
+A5BPW5.1/140-241:0.065)
+0:0.060,
+B9R7H3.1/281-377:-0.020)
+0:0.173,
+B9GNX9.1/266-364:-0.208)
+0:0.357,
+B9MVK8.1/264-361:-0.439)
+0:0.527)
+;
diff --git a/test/scripts/automated/belvu/test44 b/test/scripts/automated/belvu/test44
new file mode 100755
index 0000000..d47301c
--- /dev/null
+++ b/test/scripts/automated/belvu/test44
@@ -0,0 +1,25 @@
+#!/bin/ksh
+#
+# Description:
+#   Test creating a neighbour-joining tree (storm & sonnhammer distance correction)
+
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences to the saved results
+diffs=`belvu -T ns -o tree  $data_dir/ALIGN.selex >&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
+
diff --git a/test/scripts/automated/belvu/test44_results b/test/scripts/automated/belvu/test44_results
new file mode 100644
index 0000000..0486e84
--- /dev/null
+++ b/test/scripts/automated/belvu/test44_results
@@ -0,0 +1,1108 @@
+(
+Q4T0A8.1/405-529:0.509,
+(
+Q4T574.1/894-1324:-0.723,
+(
+(
+(
+(
+(
+(
+B1ATC3.1/1015-1647:-0.013,
+B7ZC94.1/855-1477:0.013)
+0:0.006,
+Q3UHC0.2/805-1437:-0.006)
+0:0.043,
+Q9HCJ0.3/810-1437:0.032)
+0:0.008,
+D2H997.1/853-1477:0.040)
+0:0.103,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+A8MYY3.2/16-949:-0.021,
+(
+D2GZL8.1/5-902:-0.055,
+Q3TRH0.1/1-49:0.075)
+0:0.037)
+0:0.011,
+C9J5L7.1/16-949:-0.011)
+0:0.070,
+B4E231.1/1-251:-0.074)
+0:0.079,
+Q1LZM4.1/2-292:-0.035)
+0:0.059,
+Q8BKI2.2/38-1167:-0.062)
+0:0.169,
+(
+(
+(
+(
+(
+(
+A8MYY3.2/946-1098:-0.007,
+(
+Q3TRH0.1/46-194:-0.048,
+Q3TRK2.1/1-88:0.048)
+0:0.044)
+0:0.005,
+C9J5L7.1/946-1098:-0.002)
+0:0.022,
+D2GZL8.1/900-1051:0.014)
+0:0.070,
+Q8BWL0.1/2-169:-0.024)
+0:0.020,
+B5ME23.2/165-368:-0.005)
+0:0.076,
+B0QY77.1/1-879:-0.072)
+0:0.178)
+0:0.308,
+(
+Q4S4D3.1/395-556:0.297,
+Q4TA88.1/5-275:0.377)
+0:0.224)
+0:0.144,
+(
+(
+Q4T574.1/639-850:0.227,
+Q4T0A8.1/27-228:0.288)
+0:0.277,
+C3ZJT1.1/371-689:0.601)
+0:0.127)
+0:0.786,
+(
+B7PWH5.1/252-389:0.888,
+(
+(
+C1K8B6.1/4-244:0.003,
+C1K890.1/4-244:0.001)
+0:0.126,
+C1K8V5.1/4-177:0.158)
+0:0.717)
+0:0.790)
+0:0.510,
+(
+(
+(
+Q4T574.1/239-596:0.747,
+(
+C3ZJT1.1/328-369:0.655,
+Q4T0A9.1/370-579:0.673)
+0:0.121)
+0:0.615,
+(
+(
+(
+(
+Q172C7.1/363-538:0.440,
+B4H886.1/6-148:0.416)
+0:0.300,
+Q172C8.1/192-646:0.286)
+0:0.083,
+A7UUT0.1/13-626:0.404)
+0:0.338,
+A0NFA3.2/8-516:0.766)
+0:0.289)
+0:0.588,
+Q7Q3B9.4/7-766:0.099)
+0:0.411)
+0:0.354,
+B0WXG8.1/386-1198:-0.234)
+0:0.549,
+(
+B0WXH0.1/311-1189:0.368,
+(
+(
+A7UUT0.1/686-771:0.774,
+B8RJB3.1/9-266:-0.310)
+0:0.372,
+B7PWH5.1/349-695:0.370)
+0:0.216)
+0:0.561)
+0:0.649,
+(
+(
+(
+(
+(
+(
+(
+B1ATC3.1/2-1028:-0.006,
+B7ZC94.1/2-868:0.006)
+0:0.003,
+Q3UHC0.2/4-818:0.010)
+0:0.015,
+D3ZRA6.1/2-1000:0.027)
+0:0.039,
+(
+D2H997.1/2-866:0.049,
+Q9HCJ0.3/4-822:0.051)
+0:0.021)
+0:0.059,
+(
+Q4T574.1/1-220:0.630,
+Q4T0A9.1/1-255:0.621)
+0:0.551)
+0:1.175,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+B5ME23.2/16-165:0.094,
+B4DKJ5.1/1-276:-0.087)
+0:0.069,
+Q8BX83.2/38-410:-0.041)
+0:0.123,
+(
+Q4T5V2.1/1-136:0.262,
+Q4T1P6.1/6-46:0.251)
+0:0.032)
+0:0.026,
+B1H1W1.1/13-388:0.123)
+0:0.206,
+Q4S4D3.1/1-379:0.354)
+0:0.053,
+(
+(
+C9JAR8.1/20-121:0.000,
+Q8NDV7.2/20-121:-0.000)
+0:0.057,
+D4A372.1/1-97:0.061)
+0:0.534)
+0:0.097,
+C3ZJT1.1/159-315:0.682)
+0:0.414,
+Q05CE3.1/20-1014:-0.042)
+0:0.246,
+Q3UHK8.1/20-1269:-0.245)
+0:0.622,
+(
+(
+(
+C9JA83.1/3-471:-0.176,
+B4DST4.1/1-168:0.199)
+0:0.071,
+(
+Q8BNF0.2/9-877:-0.110,
+Q6ZPQ4.1/1-243:0.122)
+0:0.147)
+0:0.049,
+C9JAR8.1/119-1283:-0.109)
+0:0.556)
+0:0.621)
+0:0.823,
+Q4S9I4.1/33-1574:-0.523)
+0:1.259)
+0:1.312,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+Q9UPQ9.4/1-1833:-1.147,
+(
+D2GZL8.1/1051-1690:-2.296,
+Q4S4D3.1/1091-1191:3.052)
+0:1.170)
+0:0.577,
+Q9UPQ9.4/1-1833:-0.577)
+0:0.306,
+A8MYY3.2/1098-1737:-0.305)
+0:0.154,
+C9J5L7.1/1098-1737:-0.154)
+0:0.022,
+(
+B5ME23.2/368-1007:-0.253,
+B7ZB91.1/13-478:0.253)
+0:0.123)
+0:0.043,
+Q3TRH0.1/194-838:-0.092)
+0:0.046,
+Q8BKI2.2/1167-1810:-0.046)
+0:0.023,
+Q8BWL0.1/169-812:-0.023)
+0:0.012,
+Q3TRK2.1/88-731:-0.012)
+0:0.014,
+Q6P7B1.1/2-432:-0.011)
+0:0.012,
+Q66JU9.1/2-312:-0.013)
+0:0.015,
+Q8VD67.1/1-249:-0.015)
+0:0.009,
+Q148P0.1/1-249:-0.006)
+0:0.003,
+Q9JHZ1.1/1-249:-0.003)
+0:0.052,
+B0QY77.1/879-1390:-0.035)
+0:0.018,
+B4E231.1/251-762:-0.018)
+0:0.160,
+(
+Q4S4D3.1/823-1099:0.191,
+Q4TA89.1/1-316:0.164)
+0:0.144)
+0:0.146,
+(
+(
+(
+(
+(
+B1ATC3.1/1646-1899:0.000,
+B7ZC94.1/1478-1731:-0.000)
+0:0.000,
+Q3UHC0.2/1436-1689:0.000)
+0:0.037,
+Q9HCJ0.3/1434-1689:0.033)
+0:0.010,
+D2H997.1/1476-1729:0.024)
+0:0.095,
+(
+(
+Q4T574.1/1322-1578:0.102,
+Q4T0A8.1/526-801:0.110)
+0:0.059,
+B0R1E2.1/290-554:0.170)
+0:0.082)
+0:0.086)
+0:0.036,
+(
+(
+(
+(
+(
+(
+C9JA83.1/468-1101:-0.008,
+Q8NDV7.2/119-1962:0.008)
+0:0.004,
+C9JAR8.1/1280-1913:-0.004)
+0:0.010,
+D2I222.1/1-1905:0.005)
+0:0.010,
+(
+(
+(
+(
+(
+D4A372.1/95-1931:0.011,
+Q3UUG8.1/1-727:-0.001)
+0:0.003,
+Q99JR3.2/24-648:-0.005)
+0:0.003,
+Q3UHK8.1/1266-1896:-0.002)
+0:0.002,
+Q8BXM6.1/4-627:-0.001)
+0:0.005,
+Q3UQ45.1/7-500:-0.002)
+0:0.006)
+0:0.005,
+Q8BWM2.1/1-337:-0.012)
+0:0.238,
+Q4S9I4.1/1569-1835:0.143)
+0:0.146)
+0:0.227,
+C3ZJT1.1/730-1350:0.434)
+0:0.163,
+(
+C0PFW8.1/269-336:0.000,
+C0HHH3.1/270-337:-0.000)
+0:0.671)
+0:0.036,
+(
+A7SDW4.1/1319-1671:0.012,
+A7T6Q0.1/2-144:-0.012)
+0:1.156)
+0:0.126,
+C4XVP0.1/46-94:0.392)
+0:0.295,
+(
+(
+A9USE7.1/720-774:0.519,
+D4APH2.1/480-541:0.522)
+0:0.245,
+D0N277.1/201-240:0.384)
+0:0.107)
+0:0.051,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+Q3UTA6.1/197-279:0.024,
+Q99LF8.1/296-380:-0.000)
+0:0.000,
+D3Z5M2.1/296-380:-0.000)
+0:0.000,
+D2I596.1/309-392:-0.000)
+0:0.000,
+B1ANR0.1/296-379:-0.000)
+0:0.000,
+A4IFC3.1/296-379:-0.000)
+0:0.000,
+Q13310.1/296-379:-0.000)
+0:0.000,
+Q4VC03.1/296-379:-0.000)
+0:0.000,
+Q6IQ30.1/296-379:-0.000)
+0:0.000,
+D4AC21.1/225-308:-0.000)
+0:0.000,
+D4AC14.1/296-379:-0.000)
+0:0.000,
+B2GUY3.1/296-379:-0.000)
+0:0.000,
+(
+(
+(
+(
+Q91YZ8.1/296-380:0.000,
+A3KFU8.1/296-380:-0.000)
+0:0.000,
+Q6PHQ9.1/296-380:0.000)
+0:0.000,
+A3KFU5.1/296-380:0.000)
+0:0.000,
+Q3UX16.1/225-309:0.000)
+0:0.011)
+0:0.003,
+(
+(
+(
+(
+B2RXY9.1/296-394:0.001,
+A2A5N3.1/296-393:-0.001)
+0:0.054,
+D3ZAS7.1/296-399:0.067)
+0:0.097,
+(
+D2H6M0.1/296-405:0.022,
+(
+Q4VXU2.1/296-404:0.020,
+Q98SP8.2/296-391:0.045)
+0:0.013)
+0:0.059)
+0:0.039,
+(
+(
+Q7T3G5.1/297-380:0.000,
+Q8QGJ7.1/296-379:-0.000)
+0:0.000,
+Q4RNX8.1/296-379:0.000)
+0:0.005)
+0:0.003)
+0:0.004,
+(
+(
+B5DF80.1/306-473:0.053,
+(
+(
+(
+(
+(
+Q2VIP3.1/296-392:-0.000,
+Q3ZCS4.1/296-393:0.000)
+0:0.000,
+Q2VIN7.1/296-392:-0.000)
+0:0.001,
+Q5VX58.1/296-390:-0.001)
+0:0.001,
+Q9H361.2/296-390:-0.001)
+0:0.013,
+Q2VIN9.1/296-390:0.029)
+0:0.020)
+0:0.074,
+Q9D4E6.1/307-466:0.134)
+0:0.019)
+0:0.010,
+Q15164.1/107-185:-0.016)
+0:0.063,
+(
+(
+(
+(
+(
+C5YBU9.1/329-416:0.007,
+B6U4M0.1/324-410:0.004)
+0:0.212,
+(
+(
+B9H7X8.1/304-412:0.000,
+B9H7X9.1/314-422:-0.000)
+0:0.043,
+B9GT62.1/311-412:0.052)
+0:0.113)
+0:0.048,
+(
+(
+A2YEJ5.1/343-442:-0.001,
+Q69X94.1/342-443:0.001)
+0:0.004,
+B9FTY9.1/365-463:-0.004)
+0:0.303)
+0:0.015,
+Q05196.2/328-430:0.270)
+0:0.030,
+A9TLC5.1/312-407:0.145)
+0:0.073)
+0:0.050,
+(
+(
+(
+(
+(
+P31209.2/366-455:0.072,
+B6K033.1/364-457:0.074)
+0:0.013,
+B6K6T8.1/356-444:0.050)
+0:0.132,
+Q6CDH3.1/332-428:0.115)
+0:0.047,
+(
+D3AVQ3.1/284-366:0.127,
+Q54BM2.1/286-375:0.188)
+0:0.045)
+0:0.029,
+A8NF86.1/337-425:0.222)
+0:0.195)
+0:0.114,
+(
+(
+(
+(
+A5BE57.1/246-300:0.138,
+B9RQB9.1/236-287:0.208)
+0:0.046,
+A5B3Z9.1/212-306:0.229)
+0:0.097,
+(
+C5WPD4.1/242-318:0.106,
+(
+Q10N87.1/216-320:0.004,
+B8AL31.1/216-320:0.005)
+0:0.123)
+0:0.191)
+0:0.167,
+(
+(
+A5BE57.1/307-474:0.420,
+B9RQB9.1/300-388:0.168)
+0:0.126,
+B9GH32.1/295-362:0.166)
+0:0.112)
+0:0.009)
+0:0.052,
+(
+(
+(
+B2GUY3.1/194-262:0.000,
+D4AC14.1/194-262:-0.000)
+0:0.000,
+D4AC21.1/123-191:0.000)
+0:0.310,
+(
+(
+B2RXY9.1/193-253:0.000,
+A2A5N3.1/193-253:-0.000)
+0:0.223,
+(
+B3S2W8.1/76-163:0.853,
+(
+Q5KBW2.1/367-420:0.094,
+Q4P8R9.1/368-413:0.075)
+0:0.149)
+0:0.122)
+0:0.042)
+0:0.105)
+0:0.027,
+O04319.1/304-419:0.593)
+0:0.109,
+(
+(
+C5YBU9.1/128-201:0.109,
+B9H7X8.1/113-180:0.203)
+0:0.029,
+(
+(
+Q8RXR5.1/110-177:0.000,
+P42731.1/126-193:-0.000)
+0:0.060,
+Q9M6E6.1/117-184:0.050)
+0:0.094)
+0:0.281)
+0:0.013,
+(
+(
+B9RQB9.1/109-183:0.249,
+B9GH32.1/107-174:0.122)
+0:0.106,
+O04319.1/114-194:0.247)
+0:0.152)
+0:0.117,
+(
+B3S2W8.1/165-267:0.790,
+(
+(
+B4NBP3.1/171-277:0.034,
+(
+B3M300.1/220-284:0.017,
+(
+B4MC02.1/171-283:0.011,
+B4JIH9.1/171-286:0.064)
+0:0.018)
+0:0.071)
+0:0.623,
+(
+Q6DGV1.1/174-212:-0.136,
+B5LEQ5.1/179-323:0.189)
+0:0.455)
+0:0.014)
+0:0.287)
+0:0.080,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+C5WVW4.1/223-289:-0.019,
+(
+(
+C4IYK3.1/223-290:-0.008,
+(
+(
+B8APB9.1/226-292:0.000,
+Q10R21.1/226-292:-0.000)
+0:0.000,
+Q0DUQ0.1/248-314:0.000)
+0:0.121)
+0:0.004,
+B6UA93.1/223-290:-0.004)
+0:0.021)
+0:0.155,
+(
+Q9FPJ8.1/236-325:0.000,
+Q9FFU0.1/236-325:-0.000)
+0:0.302)
+0:0.011,
+(
+(
+(
+(
+C0PPV9.1/259-392:0.004,
+C0PT30.1/259-393:0.004)
+0:0.293,
+(
+B8LRZ2.1/277-363:-0.002,
+A9NX92.1/275-362:0.002)
+0:0.116)
+0:0.076,
+(
+A9TFH5.1/223-287:-0.018,
+A9TZW4.1/245-319:0.018)
+0:0.019)
+0:0.099,
+A9NWA0.1/248-328:0.034)
+0:0.095)
+0:0.059,
+B9RIB9.1/231-294:0.097)
+0:0.063,
+(
+(
+Q6R969.1/253-422:0.028,
+Q2V9C2.1/258-417:0.009)
+0:0.336,
+Q9FX88.1/338-415:0.157)
+0:0.044)
+0:0.027,
+(
+(
+(
+(
+B9N4W3.1/235-341:0.006,
+B9HRX8.1/250-356:0.022)
+0:0.080,
+B9RY32.1/285-382:0.016)
+0:0.085,
+(
+(
+Q8LFI9.1/244-343:0.000,
+Q0WW84.1/287-386:-0.000)
+0:0.000,
+Q9LJL7.1/287-386:0.000)
+0:0.106)
+0:0.072,
+A5BF74.1/281-378:0.123)
+0:0.036)
+0:0.022,
+Q2V9A1.1/201-306:0.175)
+0:0.069,
+(
+(
+B9GNX9.1/266-364:0.065,
+(
+B9MVK8.1/264-361:0.065,
+A5BPW5.1/140-241:0.061)
+0:0.035)
+0:0.039,
+B9R7H3.1/281-377:0.117)
+0:0.123)
+0:0.100,
+(
+(
+(
+Q2PEV8.1/238-322:0.122,
+(
+(
+(
+C5WUD2.1/243-339:0.040,
+C0P488.1/242-336:0.036)
+0:0.024,
+(
+(
+(
+(
+Q10HZ8.1/240-333:0.000,
+Q9AY92.1/240-333:-0.000)
+0:0.000,
+Q10HZ7.1/240-333:0.000)
+0:0.000,
+B8AKU6.1/240-333:0.000)
+0:0.000,
+Q0DQQ8.1/284-377:0.000)
+0:0.058)
+0:0.127,
+(
+Q9LEB4.1/261-347:0.115,
+(
+A5C5B3.1/256-335:0.112,
+B9I0E1.1/253-334:0.153)
+0:0.023)
+0:0.076)
+0:0.056)
+0:0.052,
+(
+Q8LBV8.1/233-325:0.000,
+Q9SAB3.1/234-326:-0.000)
+0:0.294)
+0:0.131,
+A3GHN7.2/350-469:0.601)
+0:0.084)
+0:0.105,
+D3BFK6.1/320-440:1.003)
+0:0.140)
+0:0.021,
+(
+C4Q4K6.1/224-436:0.935,
+C4QZM5.1/235-294:0.248)
+0:0.099)
+0:0.042,
+(
+Q7Q9F7.4/282-427:0.786,
+(
+A3CUY7.1/2-69:0.087,
+Q2FSR7.1/6-69:0.237)
+0:0.023)
+0:0.226)
+0:0.072,
+(
+(
+A9USE7.1/997-1101:0.509,
+A7AT74.1/621-697:0.240)
+0:0.529,
+(
+Q54C48.1/271-412:0.729,
+C5DIP1.1/2-75:0.442)
+0:0.255)
+0:0.057)
+0:0.042)
+0:0.160,
+(
+(
+B3RQ20.1/1143-1394:0.925,
+A9S4M3.1/42-65:-0.019)
+0:0.050,
+A9T3C5.1/56-79:-0.029)
+0:0.233)
+0:0.218,
+Q2I2V8.1/539-606:0.682)
+0:0.182,
+(
+(
+(
+(
+(
+B0WTJ5.1/228-1404:0.175,
+Q172C6.1/6-1080:0.153)
+0:0.100,
+Q7Q3B9.4/781-1217:0.252)
+0:0.072,
+(
+(
+Q172C8.1/672-1244:0.147,
+B0WXG8.1/1199-1287:0.075)
+0:0.092,
+A7UUT0.1/838-1208:0.346)
+0:0.129)
+0:0.101,
+B7PWH5.1/720-1088:0.726)
+0:0.040,
+(
+(
+Q172C7.1/573-1487:0.196,
+B0WXH0.1/1191-1443:0.176)
+0:0.124,
+A0NFA3.2/687-1175:0.456)
+0:0.049)
+0:0.112)
+0:0.208,
+(
+(
+B4MF11.1/6-1287:0.016,
+D0Z7B2.1/6-1290:0.014)
+0:0.130,
+B4JZV3.1/6-1310:0.124)
+0:0.132)
+0:0.056,
+B3N1G0.1/6-1260:0.282)
+0:0.073,
+B4NHM7.1/6-1344:0.235)
+0:0.122,
+Q29CP6.2/6-1291:0.042)
+0:0.036,
+B4H887.1/32-1121:0.010)
+0:0.150,
+(
+B4PW21.1/6-1287:-0.131,
+(
+Q8SY33.1/6-1289:-0.421,
+Q8MSF0.1/1-120:0.421)
+0:0.329)
+0:0.050)
+0:0.190,
+B4R2G2.1/6-1156:-0.259)
+0:0.269,
+B4IIY1.1/6-1290:-0.465)
+0:0.509,
+B3P9S0.1/6-1293:-0.932)
+0:1.154,
+B4L7C4.1/6-1178:-1.261)
+0:1.226)
+0:0.451,
+A8PU70.1/566-908:1.207)
+0:0.843,
+Q1LZM4.1/292-736:-0.426)
+0:0.458,
+(
+Q4S4D3.1/651-825:0.165,
+Q4TA88.1/319-457:0.333)
+0:1.134)
+0:0.075,
+(
+(
+(
+(
+Q4S4D3.1/557-654:0.758,
+Q8BXV9.1/2-142:-0.285)
+0:0.406,
+Q7SGG0.1/13-167:0.476)
+0:0.301,
+(
+(
+(
+P20105.2/153-385:-0.061,
+B3NHT3.1/152-330:0.296)
+0:0.075,
+B4PJL3.1/173-393:0.025)
+0:0.049,
+B3M4K4.1/89-378:0.201)
+0:0.933)
+0:0.346,
+(
+(
+(
+Q4T0A8.1/329-402:1.027,
+(
+(
+(
+P20105.2/537-654:0.083,
+B4PJL3.1/533-654:0.127)
+0:0.092,
+B3M4K4.1/533-691:0.213)
+0:0.535,
+B3M562.1/702-895:0.888)
+0:0.253)
+0:0.075,
+B3MKU5.1/256-639:1.232)
+0:0.028,
+(
+(
+Q2GV87.1/66-278:0.915,
+(
+(
+(
+(
+(
+(
+C1GEW9.1/11-129:0.540,
+(
+B4NE44.1/470-686:0.295,
+B4L803.1/240-323:0.251)
+0:0.249)
+0:0.084,
+(
+(
+C1GVG2.1/279-439:-0.001,
+(
+C0SAP5.1/281-410:0.005,
+C1GDP1.1/281-415:0.106)
+0:0.127)
+0:0.406,
+(
+Q54X31.1/100-217:0.322,
+C5GQY8.1/409-612:0.402)
+0:0.170)
+0:0.050)
+0:0.047,
+(
+A5E351.1/72-416:0.644,
+(
+B3NV15.1/1200-1273:0.255,
+B4PZT3.1/1188-1272:0.380)
+0:0.273)
+0:0.051)
+0:0.086,
+(
+(
+O42323.1/299-489:0.541,
+A5E7X5.1/33-235:0.756)
+0:0.031,
+(
+A3F295.1/6-117:0.316,
+A3F290.1/9-110:0.317)
+0:0.297)
+0:0.081)
+0:0.036,
+(
+(
+(
+(
+(
+(
+(
+B4NNJ8.1/320-445:0.309,
+(
+(
+B4J985.1/306-430:0.188,
+B4ME65.1/311-417:0.180)
+0:0.099,
+B4KQM5.1/242-419:0.321)
+0:0.056)
+0:0.110,
+(
+B4NP54.1/2-69:-0.068,
+A0CJW3.1/434-742:0.272)
+0:0.295)
+0:0.051,
+(
+(
+(
+(
+(
+(
+(
+B4JL62.1/290-395:0.180,
+Q25AW7.1/146-228:0.149)
+0:0.046,
+(
+B4K3C6.1/67-191:0.041,
+B4MHJ9.1/106-306:0.195)
+0:0.203)
+0:0.032,
+(
+(
+(
+(
+D1ZFW1.1/794-871:0.106,
+Q4P2T9.1/335-396:0.068)
+0:0.030,
+(
+Q5TST0.3/683-841:0.126,
+D3BH34.1/115-236:0.079)
+0:0.131)
+0:0.055,
+(
+Q4P3Y1.1/128-184:-0.027,
+D3B7T2.1/209-345:0.188)
+0:0.109)
+0:0.021,
+(
+C0SUE2.1/77-175:0.142,
+B4JY35.1/15-92:0.049)
+0:0.127)
+0:0.018)
+0:0.036,
+(
+A5E1Y8.1/358-537:0.168,
+A0BQD1.1/165-319:0.187)
+0:0.142)
+0:0.041,
+(
+(
+B4KT28.1/222-266:-0.012,
+Q86KE5.1/77-311:0.444)
+0:0.112,
+(
+A8NN12.1/68-136:0.126,
+D0H0K7.1/432-591:0.238)
+0:0.028)
+0:0.109)
+0:0.022,
+(
+(
+B4PH83.1/181-247:0.165,
+Q54FL0.1/951-1244:0.266)
+0:0.168,
+A1C5H3.1/188-267:0.334)
+0:0.068)
+0:0.024,
+(
+(
+Q9VYA6.1/174-225:-0.034,
+Q86NT0.1/173-270:0.138)
+0:0.258,
+B4KN27.1/225-337:0.366)
+0:0.084)
+0:0.044)
+0:0.012,
+Q6C9A9.1/660-764:0.499)
+0:0.047,
+(
+B4N2I1.1/44-159:0.061,
+B3MYX8.1/14-153:0.113)
+0:0.511)
+0:0.056,
+Q4PF35.1/18-283:0.621)
+0:0.041,
+(
+(
+(
+A3F293.1/10-109:0.098,
+A3F299.1/12-111:0.038)
+0:0.353,
+B0X8C2.1/150-263:0.441)
+0:0.133,
+B4JPX4.1/284-409:0.540)
+0:0.115)
+0:0.065)
+0:0.054,
+(
+A5E3S9.1/278-450:0.475,
+Q5TSQ4.3/457-676:0.485)
+0:0.324)
+0:0.049)
+0:0.037,
+(
+(
+(
+Q8BZH2.1/5-63:0.157,
+Q54LR6.1/53-262:0.397)
+0:0.435,
+Q55F37.1/112-343:0.883)
+0:0.037,
+D3B9K1.1/622-823:0.867)
+0:0.076)
+0:0.240)
+0:0.174)
+0:0.118)
+0:0.106,
+A7SDW4.1/430-1260:1.148)
+0:0.403,
+B3KSX2.1/4-277:0.637)
+0:0.246)
+0:0.151,
+B0R1E2.1/1-289:-0.229)
+0:0.436)
+0:0.471)
+;
diff --git a/test/scripts/automated/belvu/test45 b/test/scripts/automated/belvu/test45
new file mode 100755
index 0000000..98d8a11
--- /dev/null
+++ b/test/scripts/automated/belvu/test45
@@ -0,0 +1,25 @@
+#!/bin/ksh
+#
+# Description:
+#   Test creating a neighbour-joining tree (uncorrected distances)
+
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences to the saved results
+diffs=`belvu -T nr -o tree  $data_dir/ALIGN.selex >&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
+
diff --git a/test/scripts/automated/belvu/test45_results b/test/scripts/automated/belvu/test45_results
new file mode 100644
index 0000000..65bb1fb
--- /dev/null
+++ b/test/scripts/automated/belvu/test45_results
@@ -0,0 +1,1108 @@
+(
+(
+(
+(
+C9JA83.1/3-471:0.003,
+B4DST4.1/1-168:0.021)
+0:0.003,
+C9JAR8.1/119-1283:-0.003)
+0:0.054,
+(
+(
+(
+Q05CE3.1/20-1014:-0.001,
+Q6ZPQ4.1/1-243:0.010)
+0:0.004,
+Q8BNF0.2/9-877:-0.001)
+0:0.010,
+Q3UHK8.1/20-1269:-0.004)
+0:0.053)
+0:0.041,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+A8MYY3.2/1098-1737:0.000,
+B5ME23.2/368-1007:0.000)
+0:0.000,
+C9J5L7.1/1098-1737:0.000)
+0:0.000,
+B7ZB91.1/13-478:-0.000)
+0:0.003,
+(
+(
+Q3TRH0.1/194-838:-0.036,
+(
+(
+Q1LZM4.1/292-736:-0.025,
+Q8BXV9.1/2-142:0.032)
+0:0.028,
+Q8BZH2.1/5-63:0.061)
+0:0.043)
+0:0.017,
+Q8BWL0.1/169-812:-0.017)
+0:0.021)
+0:0.002,
+(
+(
+Q8BKI2.2/1167-1810:-0.032,
+(
+Q6P7B1.1/2-432:-0.004,
+(
+(
+Q66JU9.1/2-312:-0.001,
+Q8VD67.1/1-249:0.001)
+0:0.001,
+(
+Q148P0.1/1-249:0.000,
+Q9JHZ1.1/1-249:0.000)
+0:0.003)
+0:0.004)
+0:0.034)
+0:0.017,
+Q3TRK2.1/88-731:-0.017)
+0:0.020)
+0:0.002,
+D2GZL8.1/1051-1690:0.010)
+0:0.002,
+B0QY77.1/879-1390:-0.003)
+0:0.001,
+B4E231.1/251-762:-0.001)
+0:0.166,
+(
+Q4S4D3.1/823-1099:0.150,
+Q4TA89.1/1-316:0.136)
+0:0.054)
+0:0.047,
+(
+(
+(
+(
+B1ATC3.1/1646-1899:0.000,
+B7ZC94.1/1478-1731:0.000)
+0:0.000,
+Q3UHC0.2/1436-1689:0.000)
+0:0.035,
+(
+D2H997.1/1476-1729:0.031,
+Q9HCJ0.3/1434-1689:0.032)
+0:0.002)
+0:0.110,
+(
+(
+Q4T574.1/1322-1578:0.092,
+Q4T0A8.1/526-801:0.094)
+0:0.043,
+B0R1E2.1/290-554:0.136)
+0:0.020)
+0:0.072)
+0:0.021,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+Q9UPQ9.4/1-1833:-0.131,
+(
+(
+(
+A8MYY3.2/16-949:-0.008,
+(
+(
+B5ME23.2/16-165:0.006,
+B4DKJ5.1/1-276:0.001)
+0:0.014,
+Q8BX83.2/38-410:0.014)
+0:0.022)
+0:0.003,
+C9J5L7.1/16-949:-0.003)
+0:0.099,
+(
+(
+B4E231.1/1-251:-0.002,
+D2GZL8.1/5-902:0.002)
+0:0.014,
+(
+Q3TRH0.1/1-49:0.009,
+Q1LZM4.1/2-292:-0.009)
+0:0.020)
+0:0.090)
+0:0.041)
+0:0.064,
+Q9UPQ9.4/1-1833:-0.064)
+0:0.068,
+(
+(
+(
+(
+(
+A8MYY3.2/946-1098:0.003,
+C9J5L7.1/946-1098:0.003)
+0:0.018,
+D2GZL8.1/900-1051:0.021)
+0:0.011,
+(
+B0QY77.1/1-879:-0.002,
+B5ME23.2/165-368:0.012)
+0:0.015)
+0:0.004,
+A0CJW3.1/434-742:-0.030)
+0:0.002,
+(
+(
+(
+Q3TRH0.1/46-194:-0.003,
+Q3TRK2.1/1-88:0.003)
+0:0.010,
+Q8BWL0.1/2-169:0.006)
+0:0.010,
+Q8BKI2.2/38-1167:-0.010)
+0:0.022)
+0:0.217)
+0:0.082,
+(
+Q4S4D3.1/395-556:0.230,
+Q4TA88.1/5-275:0.226)
+0:0.099)
+0:0.038,
+(
+(
+(
+(
+(
+(
+B1ATC3.1/1015-1647:-0.000,
+B7ZC94.1/855-1477:0.000)
+0:0.000,
+Q3UHC0.2/805-1437:-0.000)
+0:0.037,
+Q9HCJ0.3/810-1437:0.035)
+0:0.005,
+D2H997.1/853-1477:0.040)
+0:0.114,
+(
+Q4T574.1/639-850:0.189,
+Q4T0A8.1/27-228:0.190)
+0:0.050)
+0:0.097,
+C3ZJT1.1/371-689:0.322)
+0:0.044)
+0:0.066,
+(
+(
+(
+(
+(
+(
+(
+B1ATC3.1/2-1028:-0.004,
+B7ZC94.1/2-868:0.004)
+0:0.004,
+Q3UHC0.2/4-818:0.009)
+0:0.019,
+D3ZRA6.1/2-1000:0.022)
+0:0.036,
+(
+D2H997.1/2-866:0.047,
+Q9HCJ0.3/4-822:0.048)
+0:0.017)
+0:0.215,
+C3ZJT1.1/328-369:0.282)
+0:0.064,
+(
+Q4T574.1/239-596:0.328,
+Q4T0A9.1/370-579:0.330)
+0:0.024)
+0:0.049,
+(
+Q4S9I4.1/33-1574:0.333,
+B7PWH5.1/252-389:0.368)
+0:0.031)
+0:0.033)
+0:0.041,
+(
+(
+(
+(
+(
+Q4T574.1/894-1324:0.085,
+Q4T0A8.1/405-529:0.134)
+0:0.039,
+B0R1E2.1/1-289:0.125)
+0:0.232,
+(
+Q4S4D3.1/651-825:0.177,
+Q4TA88.1/319-457:0.194)
+0:0.194)
+0:0.024,
+(
+(
+Q4T0A8.1/329-402:0.364,
+B3M562.1/702-895:0.368)
+0:0.025,
+A7SDW4.1/430-1260:0.379)
+0:0.014)
+0:0.012,
+(
+(
+(
+Q4S4D3.1/557-654:0.274,
+Q7SGG0.1/13-167:0.226)
+0:0.133,
+(
+(
+(
+P20105.2/153-385:0.055,
+B4PJL3.1/173-393:0.057)
+0:0.054,
+B3NHT3.1/152-330:0.120)
+0:0.037,
+B3M4K4.1/89-378:0.155)
+0:0.236)
+0:0.029,
+(
+(
+(
+Q2GV87.1/66-278:0.364,
+D3B9K1.1/622-823:0.363)
+0:0.004,
+(
+(
+(
+(
+(
+P20105.2/537-654:0.090,
+B4PJL3.1/533-654:0.094)
+0:0.066,
+B3M4K4.1/533-691:0.161)
+0:0.180,
+(
+(
+(
+C1GVG2.1/279-439:0.066,
+(
+C0SAP5.1/281-410:0.045,
+C1GDP1.1/281-415:0.059)
+0:0.042)
+0:0.200,
+Q86KE5.1/77-311:0.293)
+0:0.029,
+(
+B3NV15.1/1200-1273:0.214,
+B4PZT3.1/1188-1272:0.224)
+0:0.091)
+0:0.029)
+0:0.007,
+(
+(
+C1GEW9.1/11-129:0.309,
+A5E7X5.1/33-235:0.316)
+0:0.033,
+(
+(
+(
+(
+(
+B4NNJ8.1/320-445:0.236,
+(
+B4J985.1/306-430:0.151,
+B4ME65.1/311-417:0.143)
+0:0.091)
+0:0.060,
+(
+(
+(
+(
+(
+(
+(
+(
+B4JL62.1/290-395:0.157,
+(
+(
+B4K3C6.1/67-191:0.088,
+Q5TST0.3/683-841:0.085)
+0:0.039,
+B4NP54.1/2-69:0.079)
+0:0.040)
+0:0.021,
+(
+(
+(
+D1ZFW1.1/794-871:0.084,
+Q4P2T9.1/335-396:0.071)
+0:0.045,
+(
+Q4P3Y1.1/128-184:0.041,
+D3B7T2.1/209-345:0.105)
+0:0.056)
+0:0.023,
+(
+A0BQD1.1/165-319:0.142,
+D3BH34.1/115-236:0.139)
+0:0.029)
+0:0.015)
+0:0.004,
+(
+C0SUE2.1/77-175:0.098,
+B4JY35.1/15-92:0.072)
+0:0.093)
+0:0.007,
+(
+(
+B4MHJ9.1/106-306:0.138,
+Q25AW7.1/146-228:0.112)
+0:0.055,
+(
+A5E1Y8.1/358-537:0.137,
+A8NN12.1/68-136:0.099)
+0:0.052)
+0:0.015)
+0:0.025,
+(
+(
+A5E351.1/72-416:0.173,
+B4KT28.1/222-266:0.109)
+0:0.056,
+D0H0K7.1/432-591:0.209)
+0:0.018)
+0:0.023,
+(
+(
+(
+Q9VYA6.1/174-225:0.032,
+Q86NT0.1/173-270:0.066)
+0:0.169,
+(
+B4PH83.1/181-247:0.167,
+Q54FL0.1/951-1244:0.166)
+0:0.061)
+0:0.018,
+A1C5H3.1/188-267:0.245)
+0:0.002)
+0:0.027,
+O42323.1/299-489:0.280)
+0:0.009,
+(
+(
+Q54X31.1/100-217:0.233,
+C5GQY8.1/409-612:0.243)
+0:0.042,
+(
+B4NE44.1/470-686:0.204,
+B4L803.1/240-323:0.193)
+0:0.081)
+0:0.008)
+0:0.013)
+0:0.014,
+(
+B0X8C2.1/150-263:0.281,
+Q6C9A9.1/660-764:0.277)
+0:0.036)
+0:0.008,
+(
+(
+(
+(
+A3F293.1/10-109:0.065,
+A3F299.1/12-111:0.060)
+0:0.184,
+B4KN27.1/225-337:0.249)
+0:0.023,
+Q4PF35.1/18-283:0.282)
+0:0.030,
+B4JPX4.1/284-409:0.306)
+0:0.015)
+0:0.010,
+(
+(
+B4N2I1.1/44-159:0.072,
+B3MYX8.1/14-153:0.084)
+0:0.244,
+(
+A5E3S9.1/278-450:0.274,
+Q5TSQ4.3/457-676:0.285)
+0:0.045)
+0:0.011)
+0:0.007)
+0:0.008)
+0:0.004,
+(
+(
+(
+A3F295.1/6-117:0.220,
+A3F290.1/9-110:0.218)
+0:0.052,
+Q54LR6.1/53-262:0.275)
+0:0.055,
+Q55F37.1/112-343:0.336)
+0:0.024)
+0:0.009)
+0:0.025,
+B3MKU5.1/256-639:0.394)
+0:0.023)
+0:0.003)
+0:0.046)
+0:0.012,
+(
+(
+B0WTJ5.1/228-1404:0.134,
+Q172C6.1/6-1080:0.134)
+0:0.048,
+(
+(
+(
+Q7Q3B9.4/7-766:0.213,
+A7UUT0.1/686-771:0.225)
+0:0.008,
+(
+B0WXG8.1/386-1198:0.019,
+B8RJB3.1/9-266:0.028)
+0:0.164)
+0:0.148,
+(
+A0NFA3.2/8-516:0.326,
+B7PWH5.1/349-695:0.294)
+0:0.063)
+0:0.047)
+0:0.058)
+0:0.030,
+(
+(
+(
+(
+B3N1G0.1/6-1260:-0.008,
+B4H886.1/6-148:0.217)
+0:0.146,
+(
+(
+Q172C7.1/363-538:0.173,
+B0WXH0.1/311-1189:0.095)
+0:0.155,
+(
+Q172C8.1/192-646:0.278,
+A7UUT0.1/13-626:0.277)
+0:0.035)
+0:0.059)
+0:0.042,
+B4NHM7.1/6-1344:0.173)
+0:0.035,
+(
+(
+(
+(
+B3P9S0.1/6-1293:0.046,
+(
+(
+B4IIY1.1/6-1290:-0.001,
+(
+Q8SY33.1/6-1289:-0.055,
+Q8MSF0.1/1-120:0.055)
+0:0.054)
+0:0.016,
+B4R2G2.1/6-1156:0.010)
+0:0.031)
+0:0.007,
+B4PW21.1/6-1287:0.046)
+0:0.088,
+(
+Q29CP6.2/6-1291:0.055,
+B4H887.1/32-1121:0.059)
+0:0.074)
+0:0.043,
+(
+(
+(
+(
+B4MF11.1/6-1287:-0.039,
+(
+(
+C1K8B6.1/4-244:0.002,
+C1K890.1/4-244:0.002)
+0:0.118,
+C1K8V5.1/4-177:0.119)
+0:0.072)
+0:0.029,
+D0Z7B2.1/6-1290:-0.008)
+0:0.100,
+B4L7C4.1/6-1178:0.137)
+0:0.043,
+B4JZV3.1/6-1310:0.131)
+0:0.046)
+0:0.023)
+0:0.058)
+0:0.017,
+(
+A0NFA3.2/687-1175:-0.041,
+B4KQM5.1/242-419:0.041)
+0:0.400)
+0:0.033,
+(
+(
+(
+Q172C7.1/573-1487:0.145,
+B0WXH0.1/1191-1443:0.152)
+0:0.097,
+(
+Q7Q3B9.4/781-1217:0.233,
+(
+(
+Q172C8.1/672-1244:0.079,
+B0WXG8.1/1199-1287:0.114)
+0:0.094,
+A7UUT0.1/838-1208:0.206)
+0:0.048)
+0:0.031)
+0:0.033,
+B7PWH5.1/720-1088:0.325)
+0:0.016)
+0:0.016,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+B2GUY3.1/296-379:0.000,
+D4AC14.1/296-379:0.000)
+0:0.000,
+D4AC21.1/225-308:0.000)
+0:0.000,
+(
+Q6IQ30.1/296-379:0.000,
+(
+Q4VC03.1/296-379:0.000,
+(
+Q13310.1/296-379:0.000,
+(
+A4IFC3.1/296-379:0.000,
+(
+B1ANR0.1/296-379:0.000,
+D2I596.1/309-392:0.000)
+0:0.000)
+0:0.000)
+0:0.000)
+0:0.000)
+0:0.000)
+0:0.000,
+Q99LF8.1/296-380:-0.000)
+0:0.000,
+D3Z5M2.1/296-380:-0.000)
+0:0.000,
+(
+(
+(
+(
+Q91YZ8.1/296-380:0.000,
+A3KFU8.1/296-380:0.000)
+0:0.000,
+Q6PHQ9.1/296-380:0.000)
+0:0.000,
+A3KFU5.1/296-380:0.000)
+0:0.000,
+Q3UX16.1/225-309:0.000)
+0:0.012)
+0:0.000,
+Q3UTA6.1/197-279:0.024)
+0:0.002,
+(
+(
+Q7T3G5.1/297-380:0.000,
+Q8QGJ7.1/296-379:0.000)
+0:0.000,
+Q4RNX8.1/296-379:0.000)
+0:0.009)
+0:0.004,
+Q15164.1/107-185:-0.006)
+0:0.016,
+(
+(
+B5DF80.1/306-473:0.048,
+(
+(
+(
+(
+(
+Q2VIP3.1/296-392:-0.000,
+Q3ZCS4.1/296-393:0.000)
+0:0.000,
+Q2VIN7.1/296-392:-0.000)
+0:0.001,
+Q5VX58.1/296-390:-0.001)
+0:0.000,
+Q9H361.2/296-390:-0.000)
+0:0.015,
+Q2VIN9.1/296-390:0.028)
+0:0.020)
+0:0.054,
+Q9D4E6.1/307-466:0.109)
+0:0.012)
+0:0.017,
+(
+(
+(
+B2RXY9.1/296-394:0.000,
+A2A5N3.1/296-393:-0.000)
+0:0.052,
+D3ZAS7.1/296-399:0.061)
+0:0.076,
+(
+D2H6M0.1/296-405:0.023,
+(
+Q4VXU2.1/296-404:0.021,
+Q98SP8.2/296-391:0.042)
+0:0.010)
+0:0.049)
+0:0.007)
+0:0.065,
+(
+(
+(
+(
+(
+C5YBU9.1/329-416:0.007,
+B6U4M0.1/324-410:0.005)
+0:0.163,
+(
+(
+B9H7X8.1/304-412:0.000,
+B9H7X9.1/314-422:0.000)
+0:0.042,
+B9GT62.1/311-412:0.049)
+0:0.086)
+0:0.029,
+Q05196.2/328-430:0.188)
+0:0.008,
+(
+(
+A2YEJ5.1/343-442:0.000,
+B9FTY9.1/365-463:-0.000)
+0:0.000,
+Q69X94.1/342-443:-0.000)
+0:0.220)
+0:0.026,
+A9TLC5.1/312-407:0.133)
+0:0.019)
+0:0.042,
+(
+(
+(
+(
+P31209.2/366-455:0.068,
+(
+B6K033.1/364-457:0.063,
+B6K6T8.1/356-444:0.056)
+0:0.004)
+0:0.079,
+Q6CDH3.1/332-428:0.111)
+0:0.017,
+(
+D3AVQ3.1/284-366:0.113,
+(
+(
+Q5KBW2.1/367-420:0.078,
+Q4P8R9.1/368-413:0.074)
+0:0.083,
+Q54BM2.1/286-375:0.123)
+0:0.016)
+0:0.027)
+0:0.023,
+A8NF86.1/337-425:0.162)
+0:0.083)
+0:0.038,
+(
+(
+A5BE57.1/307-474:0.247,
+B9RQB9.1/300-388:0.170)
+0:0.043,
+B9GH32.1/295-362:0.160)
+0:0.043)
+0:0.015,
+(
+(
+(
+(
+(
+A5BE57.1/246-300:0.125,
+C4QZM5.1/235-294:0.179)
+0:0.038,
+B9RQB9.1/236-287:0.170)
+0:0.021,
+A5B3Z9.1/212-306:0.191)
+0:0.038,
+(
+C5WPD4.1/242-318:0.096,
+(
+Q10N87.1/216-320:0.005,
+B8AL31.1/216-320:0.005)
+0:0.101)
+0:0.114)
+0:0.042,
+(
+(
+(
+B2GUY3.1/194-262:0.000,
+D4AC14.1/194-262:0.000)
+0:0.000,
+D4AC21.1/123-191:0.000)
+0:0.202,
+(
+B2RXY9.1/193-253:0.000,
+A2A5N3.1/193-253:0.000)
+0:0.181)
+0:0.054)
+0:0.005)
+0:0.023,
+(
+(
+(
+B9RQB9.1/109-183:0.165,
+B9GH32.1/107-174:0.132)
+0:0.055,
+O04319.1/114-194:0.187)
+0:0.064,
+(
+(
+C5YBU9.1/128-201:0.118,
+B9H7X8.1/113-180:0.139)
+0:0.013,
+(
+(
+Q8RXR5.1/110-177:0.000,
+P42731.1/126-193:0.000)
+0:0.051,
+Q9M6E6.1/117-184:0.052)
+0:0.079)
+0:0.136)
+0:0.024)
+0:0.010,
+O04319.1/304-419:0.294)
+0:0.050,
+B3S2W8.1/76-163:0.359)
+0:0.010,
+(
+B3S2W8.1/165-267:0.345,
+(
+(
+(
+B4NBP3.1/171-277:0.015,
+B3M300.1/220-284:0.019)
+0:0.052,
+(
+B4MC02.1/171-283:0.034,
+B4JIH9.1/171-286:0.039)
+0:0.036)
+0:0.267,
+(
+Q54C48.1/271-412:0.331,
+C5DIP1.1/2-75:0.284)
+0:0.042)
+0:0.009)
+0:0.026)
+0:0.010,
+(
+(
+(
+A9USE7.1/720-774:0.294,
+D4APH2.1/480-541:0.288)
+0:0.036,
+D0N277.1/201-240:0.283)
+0:0.045,
+(
+Q7Q9F7.4/282-427:0.333,
+(
+A3CUY7.1/2-69:0.120,
+Q2FSR7.1/6-69:0.146)
+0:0.095)
+0:0.041)
+0:0.009)
+0:0.006,
+(
+(
+(
+A9USE7.1/997-1101:0.262,
+A7AT74.1/621-697:0.224)
+0:0.118,
+(
+(
+(
+A9S4M3.1/42-65:0.023,
+A9T3C5.1/56-79:0.018)
+0:0.159,
+(
+Q6DGV1.1/174-212:0.005,
+B5LEQ5.1/179-323:0.047)
+0:0.190)
+0:0.056,
+A3GHN7.2/350-469:0.302)
+0:0.040)
+0:0.001,
+C4Q4K6.1/224-436:0.361)
+0:0.016)
+0:0.003,
+(
+(
+A8PU70.1/566-908:0.403,
+(
+(
+B9GNX9.1/266-364:0.073,
+(
+B9MVK8.1/264-361:0.057,
+A5BPW5.1/140-241:0.060)
+0:0.015)
+0:0.030,
+B9R7H3.1/281-377:0.101)
+0:-0.001)
+0:0.139,
+(
+(
+(
+(
+(
+(
+(
+(
+C5WVW4.1/223-289:0.005,
+(
+C4IYK3.1/223-290:0.000,
+B6UA93.1/223-290:0.000)
+0:0.010)
+0:0.030,
+(
+(
+B8APB9.1/226-292:0.000,
+Q10R21.1/226-292:0.000)
+0:0.000,
+Q0DUQ0.1/248-314:0.000)
+0:0.054)
+0:0.102,
+B9RIB9.1/231-294:0.122)
+0:0.009,
+(
+(
+(
+C0PPV9.1/259-392:0.004,
+C0PT30.1/259-393:0.004)
+0:0.147,
+(
+A9TFH5.1/223-287:-0.006,
+A9TZW4.1/245-319:0.006)
+0:0.110)
+0:0.010,
+(
+(
+B8LRZ2.1/277-363:-0.000,
+A9NX92.1/275-362:0.000)
+0:0.118,
+A9NWA0.1/248-328:0.099)
+0:0.017)
+0:0.038)
+0:0.027,
+(
+Q9FPJ8.1/236-325:0.000,
+Q9FFU0.1/236-325:0.000)
+0:0.202)
+0:0.012,
+(
+(
+Q2PEV8.1/238-322:0.129,
+(
+Q9LEB4.1/261-347:0.113,
+(
+A5C5B3.1/256-335:0.108,
+B9I0E1.1/253-334:0.117)
+0:0.003)
+0:0.039)
+0:0.013,
+(
+(
+C5WUD2.1/243-339:0.037,
+C0P488.1/242-336:0.037)
+0:0.020,
+(
+(
+(
+(
+Q10HZ8.1/240-333:0.000,
+Q9AY92.1/240-333:0.000)
+0:0.000,
+Q10HZ7.1/240-333:0.000)
+0:0.000,
+B8AKU6.1/240-333:0.000)
+0:0.000,
+Q0DQQ8.1/284-377:0.000)
+0:0.055)
+0:0.106)
+0:0.030)
+0:0.020,
+(
+Q8LBV8.1/233-325:0.000,
+Q9SAB3.1/234-326:0.000)
+0:0.209)
+0:0.028,
+(
+(
+(
+(
+(
+(
+(
+B9N4W3.1/235-341:0.013,
+B9HRX8.1/250-356:0.015)
+0:0.041,
+B9RY32.1/285-382:0.048)
+0:0.054,
+(
+(
+Q8LFI9.1/244-343:0.000,
+Q0WW84.1/287-386:0.000)
+0:0.000,
+Q9LJL7.1/287-386:0.000)
+0:0.105)
+0:0.031,
+A5BF74.1/281-378:0.124)
+0:0.019,
+Q9FX88.1/338-415:0.155)
+0:0.023,
+Q2V9A1.1/201-306:0.164)
+0:0.011,
+(
+Q6R969.1/253-422:0.019,
+Q2V9C2.1/258-417:0.018)
+0:0.196)
+0:0.039)
+0:0.021)
+0:0.071)
+0:0.008,
+D3BFK6.1/320-440:0.376)
+0:0.015,
+(
+B3RQ20.1/1143-1394:0.371,
+Q2I2V8.1/539-606:0.346)
+0:0.029)
+0:0.012,
+(
+(
+(
+A7SDW4.1/1319-1671:-0.002,
+A7T6Q0.1/2-144:0.002)
+0:0.381,
+C4XVP0.1/46-94:0.293)
+0:0.011,
+(
+C0PFW8.1/269-336:0.000,
+C0HHH3.1/270-337:0.000)
+0:0.334)
+0:0.028)
+0:0.020,
+(
+(
+(
+(
+C9JAR8.1/20-121:0.000,
+Q8NDV7.2/20-121:0.000)
+0:0.054,
+D4A372.1/1-97:0.055)
+0:0.256,
+(
+(
+(
+Q4S4D3.1/1-379:0.165,
+Q4T1P6.1/6-46:0.160)
+0:0.037,
+(
+B1H1W1.1/13-388:0.181,
+Q4T5V2.1/1-136:0.183)
+0:0.017)
+0:0.094,
+C3ZJT1.1/159-315:0.297)
+0:0.014)
+0:0.174,
+(
+Q4T574.1/1-220:0.317,
+Q4T0A9.1/1-255:0.317)
+0:0.168)
+0:0.106)
+0:0.017)
+0:0.032,
+C3ZJT1.1/730-1350:0.278)
+0:0.048,
+Q4S4D3.1/1091-1191:0.465)
+0:0.003)
+0:0.057,
+Q4S9I4.1/1569-1835:0.186)
+0:0.145,
+(
+(
+(
+(
+(
+C9JA83.1/468-1101:-0.072,
+B3KSX2.1/4-277:0.083)
+0:0.034,
+C9JAR8.1/1280-1913:-0.034)
+0:0.038,
+Q3UUG8.1/1-727:-0.006)
+0:0.001,
+(
+(
+Q3UHK8.1/1266-1896:-0.009,
+(
+Q99JR3.2/24-648:-0.018,
+(
+Q3UQ45.1/7-500:-0.016,
+Q8BWM2.1/1-337:0.016)
+0:0.020)
+0:0.009)
+0:0.005,
+Q8BXM6.1/4-627:-0.004)
+0:0.006)
+0:0.010,
+D4A372.1/95-1931:-0.006)
+0:0.046)
+0:0.065,
+D2I222.1/1-1905:-0.034)
+0:0.062,
+Q8NDV7.2/119-1962:-0.099)
+0:0.048)
+;
diff --git a/test/scripts/automated/belvu/test46 b/test/scripts/automated/belvu/test46
new file mode 100755
index 0000000..62a5cc8
--- /dev/null
+++ b/test/scripts/automated/belvu/test46
@@ -0,0 +1,25 @@
+#!/bin/ksh
+#
+# Description:
+#   Test creating a UPGMA tree (scoredist distance correction)
+
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences to the saved results
+diffs=`belvu -T ub -o tree  $data_dir/ALIGN.selex >&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
+
diff --git a/test/scripts/automated/belvu/test46_results b/test/scripts/automated/belvu/test46_results
new file mode 100644
index 0000000..4d17684
--- /dev/null
+++ b/test/scripts/automated/belvu/test46_results
@@ -0,0 +1,1108 @@
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+Q9UPQ9.4/1-1833:-0.000,
+B0QY77.1/1-879:-0.000)
+0:0.000,
+B4E231.1/1-251:-0.000)
+0:0.000,
+Q9UPQ9.4/1-1833:-0.000)
+0:0.014,
+B5ME23.2/165-368:0.014)
+0:0.037,
+(
+(
+Q3TRH0.1/46-194:-0.000,
+Q3TRK2.1/1-88:-0.000)
+0:0.021,
+(
+Q8BWL0.1/2-169:-0.000,
+Q1LZM4.1/2-292:-0.000)
+0:0.021)
+0:0.029)
+0:0.059,
+(
+(
+(
+A8MYY3.2/946-1098:-0.000,
+A0CJW3.1/434-742:-0.000)
+0:0.004,
+C9J5L7.1/946-1098:0.004)
+0:0.031,
+D2GZL8.1/900-1051:0.036)
+0:0.074)
+0:0.686,
+Q4S4D3.1/395-556:0.796)
+0:0.598,
+(
+(
+Q4T574.1/639-850:0.604,
+Q4T0A8.1/27-228:0.604)
+0:0.635,
+C3ZJT1.1/371-689:1.239)
+0:0.155)
+0:0.171,
+(
+(
+(
+(
+(
+C9JA83.1/3-471:-0.000,
+C9JAR8.1/119-1283:-0.000)
+0:0.000,
+Q8NDV7.2/119-1962:-0.000)
+0:0.032,
+B4DST4.1/1-168:0.032)
+0:0.211,
+(
+(
+Q05CE3.1/20-1014:0.008,
+Q8BNF0.2/9-877:0.008)
+0:0.008,
+Q6ZPQ4.1/1-243:0.015)
+0:0.228)
+0:0.899,
+(
+(
+D2GZL8.1/5-902:0.043,
+(
+Q3TRH0.1/1-49:-0.000,
+Q8BKI2.2/38-1167:-0.000)
+0:0.043)
+0:0.671,
+Q4TA88.1/5-275:0.714)
+0:0.428)
+0:0.422)
+0:0.722,
+(
+(
+(
+(
+(
+(
+(
+(
+B1ATC3.1/2-1028:-0.000,
+B7ZC94.1/2-868:-0.000)
+0:0.019,
+Q3UHC0.2/4-818:0.019)
+0:0.033,
+D3ZRA6.1/2-1000:0.053)
+0:0.093,
+(
+D2H997.1/2-866:0.108,
+Q9HCJ0.3/4-822:0.108)
+0:0.037)
+0:0.650,
+C3ZJT1.1/328-369:0.795)
+0:0.501,
+Q4T0A9.1/370-579:1.296)
+0:0.118,
+Q4T574.1/239-596:1.414)
+0:0.677,
+B7PWH5.1/252-389:2.090)
+0:0.196)
+0:0.191,
+(
+(
+(
+(
+B3N1G0.1/6-1260:0.252,
+B4H886.1/6-148:0.252)
+0:0.862,
+(
+(
+(
+(
+(
+B3P9S0.1/6-1293:0.114,
+B4PW21.1/6-1287:0.114)
+0:0.068,
+(
+(
+B4IIY1.1/6-1290:0.035,
+B4R2G2.1/6-1156:0.035)
+0:0.063,
+(
+Q8SY33.1/6-1289:-0.000,
+Q8MSF0.1/1-120:-0.000)
+0:0.098)
+0:0.085)
+0:0.257,
+(
+Q29CP6.2/6-1291:0.182,
+B4H887.1/32-1121:0.182)
+0:0.258)
+0:0.181,
+B4NHM7.1/6-1344:0.621)
+0:0.130,
+(
+(
+(
+(
+(
+B4MF11.1/6-1287:0.047,
+D0Z7B2.1/6-1290:0.047)
+0:0.151,
+(
+C1K8B6.1/4-244:0.004,
+C1K890.1/4-244:0.004)
+0:0.194)
+0:0.152,
+C1K8V5.1/4-177:0.349)
+0:0.091,
+B4L7C4.1/6-1178:0.439)
+0:0.239,
+B4JZV3.1/6-1310:0.679)
+0:0.072)
+0:0.363)
+0:0.490,
+(
+(
+Q172C7.1/363-538:0.415,
+B0WXH0.1/311-1189:0.415)
+0:0.908,
+(
+Q172C8.1/192-646:1.125,
+A7UUT0.1/13-626:1.125)
+0:0.197)
+0:0.282)
+0:0.314,
+A0NFA3.2/8-516:1.918)
+0:0.559)
+0:0.382,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+B1ATC3.1/1015-1647:-0.000,
+B7ZC94.1/855-1477:-0.000)
+0:0.000,
+Q3UHC0.2/805-1437:-0.000)
+0:0.103,
+(
+D2H997.1/853-1477:0.089,
+Q9HCJ0.3/810-1437:0.089)
+0:0.014)
+0:0.443,
+(
+(
+Q4T574.1/894-1324:0.277,
+Q4T0A8.1/405-529:0.277)
+0:0.095,
+B0R1E2.1/1-289:0.371)
+0:0.175)
+0:0.953,
+(
+(
+(
+(
+(
+(
+C9JA83.1/468-1101:-0.000,
+C9JAR8.1/1280-1913:-0.000)
+0:0.007,
+D2I222.1/1-1905:0.007)
+0:0.013,
+B3KSX2.1/4-277:0.020)
+0:0.124,
+(
+D4A372.1/95-1931:0.011,
+(
+(
+(
+(
+Q3UHK8.1/1266-1896:-0.000,
+Q99JR3.2/24-648:-0.000)
+0:0.000,
+Q8BWM2.1/1-337:-0.000)
+0:0.001,
+Q8BXM6.1/4-627:0.001)
+0:0.003,
+Q3UQ45.1/7-500:0.004)
+0:0.007)
+0:0.133)
+0:0.817,
+(
+Q3UHK8.1/20-1269:-0.000,
+Q3UUG8.1/1-727:-0.000)
+0:0.961)
+0:0.186,
+Q4S9I4.1/33-1574:1.147)
+0:0.352)
+0:0.207,
+Q4S4D3.1/557-654:1.707)
+0:0.750,
+(
+(
+(
+(
+Q1LZM4.1/292-736:0.009,
+Q8BXV9.1/2-142:0.009)
+0:0.094,
+Q8BZH2.1/5-63:0.104)
+0:1.302,
+(
+Q4S4D3.1/651-825:0.661,
+Q4TA88.1/319-457:0.661)
+0:0.745)
+0:0.445,
+(
+Q4T0A8.1/329-402:1.357,
+B7PWH5.1/349-695:1.357)
+0:0.495)
+0:0.605)
+0:0.202,
+(
+(
+(
+(
+Q7Q3B9.4/7-766:0.851,
+A7UUT0.1/686-771:0.851)
+0:0.197,
+D3B9K1.1/622-823:1.048)
+0:1.190,
+B3M562.1/702-895:2.238)
+0:0.285,
+(
+(
+(
+Q2GV87.1/66-278:2.041,
+A5E351.1/72-416:2.041)
+0:0.252,
+(
+(
+(
+(
+(
+(
+P20105.2/537-654:0.278,
+B4PJL3.1/533-654:0.278)
+0:0.231,
+B3M4K4.1/533-691:0.508)
+0:1.191,
+(
+(
+(
+(
+(
+C1GVG2.1/279-439:0.248,
+(
+C0SAP5.1/281-410:0.152,
+C1GDP1.1/281-415:0.152)
+0:0.096)
+0:0.735,
+Q54LR6.1/53-262:0.983)
+0:0.369,
+(
+A3F295.1/6-117:0.789,
+A3F290.1/9-110:0.789)
+0:0.563)
+0:0.157,
+(
+(
+(
+(
+B4NNJ8.1/320-445:0.955,
+(
+B4J985.1/306-430:0.471,
+B4ME65.1/311-417:0.471)
+0:0.485)
+0:0.294,
+(
+(
+(
+(
+(
+(
+(
+(
+B4JL62.1/290-395:0.462,
+Q25AW7.1/146-228:0.462)
+0:0.066,
+(
+(
+D1ZFW1.1/794-871:0.273,
+(
+Q4P3Y1.1/128-184:0.193,
+Q4P2T9.1/335-396:0.193)
+0:0.081)
+0:0.169,
+(
+(
+Q5TST0.3/683-841:0.281,
+D3BH34.1/115-236:0.281)
+0:0.040,
+B4NP54.1/2-69:0.320)
+0:0.122)
+0:0.086)
+0:0.082,
+(
+C0SUE2.1/77-175:0.274,
+B4JY35.1/15-92:0.274)
+0:0.336)
+0:0.053,
+(
+(
+B4KT28.1/222-266:0.334,
+A8NN12.1/68-136:0.334)
+0:0.120,
+D0H0K7.1/432-591:0.455)
+0:0.208)
+0:0.095,
+(
+A5E1Y8.1/358-537:0.422,
+A0BQD1.1/165-319:0.422)
+0:0.335)
+0:0.047,
+(
+B4K3C6.1/67-191:0.332,
+B4MHJ9.1/106-306:0.332)
+0:0.472)
+0:0.208,
+(
+(
+Q9VYA6.1/174-225:0.160,
+Q86NT0.1/173-270:0.160)
+0:0.641,
+D3B7T2.1/209-345:0.801)
+0:0.212)
+0:0.047,
+(
+(
+B4PH83.1/181-247:0.600,
+Q54FL0.1/951-1244:0.600)
+0:0.330,
+A1C5H3.1/188-267:0.930)
+0:0.129)
+0:0.189)
+0:0.078,
+(
+(
+Q54X31.1/100-217:0.918,
+C5GQY8.1/409-612:0.918)
+0:0.289,
+(
+B4NE44.1/470-686:0.707,
+B4L803.1/240-323:0.707)
+0:0.499)
+0:0.120)
+0:0.096,
+O42323.1/299-489:1.422)
+0:0.087)
+0:0.029,
+(
+(
+Q7SGG0.1/13-167:0.999,
+Q86KE5.1/77-311:0.999)
+0:0.402,
+(
+B3NV15.1/1200-1273:0.831,
+B4PZT3.1/1188-1272:0.831)
+0:0.570)
+0:0.137)
+0:0.161)
+0:0.085,
+(
+(
+C1GEW9.1/11-129:1.352,
+A5E7X5.1/33-235:1.352)
+0:0.353,
+(
+(
+(
+B4N2I1.1/44-159:0.274,
+B3MYX8.1/14-153:0.274)
+0:1.276,
+(
+(
+Q4PF35.1/18-283:1.112,
+B4KN27.1/225-337:1.112)
+0:0.157,
+Q6C9A9.1/660-764:1.269)
+0:0.281)
+0:0.110,
+(
+(
+(
+A3F293.1/10-109:0.194,
+A3F299.1/12-111:0.194)
+0:0.825,
+B0X8C2.1/150-263:1.020)
+0:0.298,
+B4JPX4.1/284-409:1.318)
+0:0.342)
+0:0.045)
+0:0.080)
+0:0.060,
+(
+A5E3S9.1/278-450:1.179,
+Q5TSQ4.3/457-676:1.179)
+0:0.665)
+0:0.053,
+B3MKU5.1/256-639:1.897)
+0:0.396)
+0:0.073,
+Q55F37.1/112-343:2.366)
+0:0.157)
+0:0.135)
+0:0.083,
+(
+(
+(
+P20105.2/153-385:0.164,
+B4PJL3.1/173-393:0.164)
+0:0.193,
+B3NHT3.1/152-330:0.357)
+0:0.141,
+B3M4K4.1/89-378:0.498)
+0:2.243)
+0:0.117)
+0:0.029,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+A8MYY3.2/1098-1737:-0.000,
+B0QY77.1/879-1390:-0.000)
+0:0.000,
+B4E231.1/251-762:-0.000)
+0:0.000,
+B5ME23.2/368-1007:-0.000)
+0:0.000,
+C9J5L7.1/1098-1737:-0.000)
+0:0.000,
+B7ZB91.1/13-478:-0.000)
+0:0.012,
+D2GZL8.1/1051-1690:0.012)
+0:0.019,
+(
+(
+(
+(
+(
+(
+Q3TRH0.1/194-838:-0.000,
+Q8BKI2.2/1167-1810:-0.000)
+0:0.000,
+Q8BWL0.1/169-812:-0.000)
+0:0.000,
+Q3TRK2.1/88-731:-0.000)
+0:0.000,
+Q66JU9.1/2-312:-0.000)
+0:0.000,
+Q8VD67.1/1-249:-0.000)
+0:0.006,
+(
+(
+Q6P7B1.1/2-432:-0.000,
+Q148P0.1/1-249:-0.000)
+0:0.000,
+Q9JHZ1.1/1-249:-0.000)
+0:0.006)
+0:0.025)
+0:0.596,
+(
+Q4S4D3.1/823-1099:0.400,
+Q4TA89.1/1-316:0.400)
+0:0.227)
+0:0.193,
+(
+(
+(
+(
+(
+B1ATC3.1/1646-1899:-0.000,
+B7ZC94.1/1478-1731:-0.000)
+0:0.000,
+Q3UHC0.2/1436-1689:-0.000)
+0:0.069,
+(
+D2H997.1/1476-1729:0.063,
+Q9HCJ0.3/1434-1689:0.063)
+0:0.006)
+0:0.382,
+(
+(
+Q4T574.1/1322-1578:0.244,
+Q4T0A8.1/526-801:0.244)
+0:0.148,
+B0R1E2.1/290-554:0.392)
+0:0.060)
+0:0.245,
+Q4S9I4.1/1569-1835:0.696)
+0:0.123)
+0:0.300,
+C3ZJT1.1/730-1350:1.120)
+0:0.364,
+(
+C0PFW8.1/269-336:-0.000,
+C0HHH3.1/270-337:-0.000)
+0:1.484)
+0:0.246,
+(
+(
+(
+(
+(
+B0WTJ5.1/228-1404:0.426,
+Q172C6.1/6-1080:0.426)
+0:0.202,
+Q7Q3B9.4/781-1217:0.627)
+0:0.168,
+(
+Q172C8.1/672-1244:0.228,
+B0WXG8.1/1199-1287:0.228)
+0:0.568)
+0:0.170,
+(
+Q172C7.1/573-1487:0.448,
+B0WXH0.1/1191-1443:0.448)
+0:0.518)
+0:0.364,
+(
+(
+A7UUT0.1/838-1208:0.562,
+(
+B0WXG8.1/386-1198:0.062,
+B8RJB3.1/9-266:0.062)
+0:0.500)
+0:0.495,
+B7PWH5.1/720-1088:1.057)
+0:0.272)
+0:0.401)
+0:0.427,
+(
+A0NFA3.2/687-1175:-0.000,
+B4KQM5.1/242-419:-0.000)
+0:2.158)
+0:0.217,
+(
+A7SDW4.1/430-1260:1.619,
+(
+A7SDW4.1/1319-1671:-0.000,
+A7T6Q0.1/2-144:-0.000)
+0:1.619)
+0:0.756)
+0:0.158,
+(
+(
+B3RQ20.1/1143-1394:1.405,
+Q2I2V8.1/539-606:1.405)
+0:0.685,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+A5BE57.1/246-300:0.351,
+B9RQB9.1/236-287:0.351)
+0:0.057,
+(
+B2RXY9.1/193-253:-0.000,
+A2A5N3.1/193-253:-0.000)
+0:0.408)
+0:0.176,
+(
+(
+B2GUY3.1/194-262:-0.000,
+D4AC14.1/194-262:-0.000)
+0:0.000,
+D4AC21.1/123-191:-0.000)
+0:0.584)
+0:0.197,
+C4QZM5.1/235-294:0.782)
+0:0.068,
+(
+(
+C5WPD4.1/242-318:0.266,
+(
+Q10N87.1/216-320:0.023,
+B8AL31.1/216-320:0.023)
+0:0.242)
+0:0.299,
+A5B3Z9.1/212-306:0.564)
+0:0.285)
+0:0.154,
+(
+(
+(
+B9RQB9.1/109-183:0.401,
+B9GH32.1/107-174:0.401)
+0:0.138,
+O04319.1/114-194:0.539)
+0:0.276,
+(
+(
+C5YBU9.1/128-201:0.281,
+(
+(
+Q8RXR5.1/110-177:-0.000,
+P42731.1/126-193:-0.000)
+0:0.098,
+Q9M6E6.1/117-184:0.098)
+0:0.182)
+0:0.025,
+B9H7X8.1/113-180:0.306)
+0:0.509)
+0:0.188)
+0:0.021,
+(
+(
+(
+(
+(
+(
+(
+B5DF80.1/306-473:0.108,
+(
+(
+(
+(
+(
+Q2VIP3.1/296-392:-0.000,
+Q3ZCS4.1/296-393:-0.000)
+0:0.000,
+Q5VX58.1/296-390:-0.000)
+0:0.000,
+Q9H361.2/296-390:-0.000)
+0:0.000,
+Q2VIN7.1/296-392:-0.000)
+0:0.059,
+Q2VIN9.1/296-390:0.059)
+0:0.049)
+0:0.056,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+B2GUY3.1/296-379:-0.000,
+D4AC14.1/296-379:-0.000)
+0:0.000,
+D4AC21.1/225-308:-0.000)
+0:0.000,
+Q6IQ30.1/296-379:-0.000)
+0:0.000,
+Q4VC03.1/296-379:-0.000)
+0:0.000,
+Q13310.1/296-379:-0.000)
+0:0.000,
+D3Z5M2.1/296-380:-0.000)
+0:0.000,
+A4IFC3.1/296-379:-0.000)
+0:0.000,
+B1ANR0.1/296-379:-0.000)
+0:0.000,
+D2I596.1/309-392:-0.000)
+0:0.000,
+Q99LF8.1/296-380:-0.000)
+0:0.000,
+Q15164.1/107-185:-0.000)
+0:0.009,
+(
+(
+(
+(
+Q91YZ8.1/296-380:-0.000,
+A3KFU8.1/296-380:-0.000)
+0:0.000,
+Q6PHQ9.1/296-380:-0.000)
+0:0.000,
+A3KFU5.1/296-380:-0.000)
+0:0.000,
+Q3UX16.1/225-309:-0.000)
+0:0.009)
+0:0.006,
+(
+(
+Q7T3G5.1/297-380:-0.000,
+Q8QGJ7.1/296-379:-0.000)
+0:0.000,
+Q4RNX8.1/296-379:-0.000)
+0:0.014)
+0:0.036,
+Q3UTA6.1/197-279:0.050)
+0:0.114)
+0:0.106,
+Q9D4E6.1/307-466:0.270)
+0:0.051,
+(
+(
+D2H6M0.1/296-405:0.047,
+Q4VXU2.1/296-404:0.047)
+0:0.030,
+Q98SP8.2/296-391:0.077)
+0:0.244)
+0:0.033,
+(
+(
+B2RXY9.1/296-394:-0.000,
+A2A5N3.1/296-393:-0.000)
+0:0.180,
+D3ZAS7.1/296-399:0.180)
+0:0.174)
+0:0.317,
+(
+(
+(
+C5YBU9.1/329-416:0.028,
+B6U4M0.1/324-410:0.028)
+0:0.508,
+(
+(
+(
+(
+B9H7X8.1/304-412:-0.000,
+B9H7X9.1/314-422:-0.000)
+0:0.105,
+B9GT62.1/311-412:0.105)
+0:0.272,
+A9TLC5.1/312-407:0.377)
+0:0.040,
+Q05196.2/328-430:0.417)
+0:0.119)
+0:0.081,
+(
+(
+A2YEJ5.1/343-442:-0.000,
+Q69X94.1/342-443:-0.000)
+0:0.000,
+B9FTY9.1/365-463:-0.000)
+0:0.617)
+0:0.053)
+0:0.155,
+(
+(
+(
+(
+(
+P31209.2/366-455:0.120,
+B6K6T8.1/356-444:0.120)
+0:0.016,
+B6K033.1/364-457:0.135)
+0:0.152,
+Q6CDH3.1/332-428:0.287)
+0:0.079,
+(
+(
+D3AVQ3.1/284-366:0.255,
+Q54BM2.1/286-375:0.255)
+0:0.055,
+(
+Q5KBW2.1/367-420:0.161,
+Q4P8R9.1/368-413:0.161)
+0:0.148)
+0:0.057)
+0:0.050,
+A8NF86.1/337-425:0.417)
+0:0.409)
+0:0.199)
+0:0.047,
+(
+A5BE57.1/307-474:0.716,
+(
+B9RQB9.1/300-388:0.604,
+B9GH32.1/295-362:0.604)
+0:0.112)
+0:0.356)
+0:0.101,
+O04319.1/304-419:1.172)
+0:0.312,
+B3S2W8.1/76-163:1.485)
+0:0.217,
+C4Q4K6.1/224-436:1.701)
+0:0.266,
+(
+(
+(
+(
+A9USE7.1/720-774:1.000,
+D4APH2.1/480-541:1.000)
+0:0.446,
+(
+A9USE7.1/997-1101:0.656,
+A7AT74.1/621-697:0.656)
+0:0.790)
+0:0.175,
+Q7Q9F7.4/282-427:1.621)
+0:0.179,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+C5WVW4.1/223-289:0.019,
+(
+C4IYK3.1/223-290:-0.000,
+B6UA93.1/223-290:-0.000)
+0:0.019)
+0:0.104,
+(
+(
+B8APB9.1/226-292:-0.000,
+Q10R21.1/226-292:-0.000)
+0:0.000,
+Q0DUQ0.1/248-314:-0.000)
+0:0.124)
+0:0.172,
+B9RIB9.1/231-294:0.296)
+0:0.094,
+(
+C0PPV9.1/259-392:0.009,
+C0PT30.1/259-393:0.009)
+0:0.380)
+0:0.059,
+(
+(
+(
+B8LRZ2.1/277-363:-0.000,
+A9NX92.1/275-362:-0.000)
+0:0.248,
+A9NWA0.1/248-328:0.248)
+0:0.078,
+(
+A9TFH5.1/223-287:-0.000,
+A9TZW4.1/245-319:-0.000)
+0:0.325)
+0:0.123)
+0:0.093,
+(
+(
+(
+(
+(
+B9GNX9.1/266-364:0.144,
+B9MVK8.1/264-361:0.144)
+0:0.047,
+A5BPW5.1/140-241:0.191)
+0:0.094,
+B9R7H3.1/281-377:0.286)
+0:0.125,
+Q9FX88.1/338-415:0.410)
+0:0.090,
+(
+(
+(
+(
+(
+B9N4W3.1/235-341:0.028,
+B9HRX8.1/250-356:0.028)
+0:0.087,
+B9RY32.1/285-382:0.115)
+0:0.137,
+(
+(
+Q8LFI9.1/244-343:-0.000,
+Q0WW84.1/287-386:-0.000)
+0:0.000,
+Q9LJL7.1/287-386:-0.000)
+0:0.252)
+0:0.072,
+Q2V9A1.1/201-306:0.324)
+0:0.029,
+A5BF74.1/281-378:0.353)
+0:0.148)
+0:0.041)
+0:0.135,
+(
+Q6R969.1/253-422:0.047,
+Q2V9C2.1/258-417:0.047)
+0:0.630)
+0:0.071,
+(
+(
+(
+Q2PEV8.1/238-322:0.403,
+(
+(
+(
+C5WUD2.1/243-339:0.101,
+C0P488.1/242-336:0.101)
+0:0.048,
+(
+(
+(
+(
+Q10HZ8.1/240-333:-0.000,
+Q9AY92.1/240-333:-0.000)
+0:0.000,
+Q10HZ7.1/240-333:-0.000)
+0:0.000,
+B8AKU6.1/240-333:-0.000)
+0:0.000,
+Q0DQQ8.1/284-377:-0.000)
+0:0.149)
+0:0.236,
+(
+Q9LEB4.1/261-347:0.311,
+(
+A5C5B3.1/256-335:0.299,
+B9I0E1.1/253-334:0.299)
+0:0.012)
+0:0.074)
+0:0.019)
+0:0.172,
+(
+Q9FPJ8.1/236-325:-0.000,
+Q9FFU0.1/236-325:-0.000)
+0:0.575)
+0:0.017,
+(
+Q8LBV8.1/233-325:-0.000,
+Q9SAB3.1/234-326:-0.000)
+0:0.591)
+0:0.157)
+0:0.520,
+(
+(
+(
+(
+A9S4M3.1/42-65:0.034,
+A9T3C5.1/56-79:0.034)
+0:0.604,
+(
+Q6DGV1.1/174-212:0.048,
+B5LEQ5.1/179-323:0.048)
+0:0.590)
+0:0.334,
+A3GHN7.2/350-469:0.971)
+0:0.195,
+D0N277.1/201-240:1.166)
+0:0.102)
+0:0.170,
+(
+(
+(
+B4NBP3.1/171-277:0.028,
+B3M300.1/220-284:0.028)
+0:0.154,
+(
+B4MC02.1/171-283:0.091,
+B4JIH9.1/171-286:0.091)
+0:0.091)
+0:0.939,
+C4XVP0.1/46-94:1.121)
+0:0.317)
+0:0.121,
+(
+(
+(
+A3CUY7.1/2-69:0.321,
+Q2FSR7.1/6-69:0.321)
+0:0.701,
+C5DIP1.1/2-75:1.022)
+0:0.249,
+Q54C48.1/271-412:1.271)
+0:0.288)
+0:0.022,
+B3S2W8.1/165-267:1.581)
+0:0.071,
+D3BFK6.1/320-440:1.652)
+0:0.148)
+0:0.168)
+0:0.123)
+0:0.444)
+0:0.281,
+A8PU70.1/566-908:2.814)
+0:0.073)
+0:0.054,
+Q4S4D3.1/1091-1191:2.941)
+0:0.046,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+A8MYY3.2/16-949:-0.000,
+B5ME23.2/16-165:-0.000)
+0:0.000,
+C9J5L7.1/16-949:-0.000)
+0:0.022,
+B4DKJ5.1/1-276:0.022)
+0:0.031,
+Q8BX83.2/38-410:0.053)
+0:0.335,
+B1H1W1.1/13-388:0.388)
+0:0.179,
+Q4T1P6.1/6-46:0.567)
+0:0.172,
+(
+Q4S4D3.1/1-379:0.599,
+Q4T5V2.1/1-136:0.599)
+0:0.140)
+0:0.477,
+C3ZJT1.1/159-315:1.216)
+0:0.056,
+(
+(
+C9JAR8.1/20-121:-0.000,
+Q8NDV7.2/20-121:-0.000)
+0:0.169,
+D4A372.1/1-97:0.169)
+0:1.103)
+0:1.601,
+(
+Q4T574.1/1-220:1.336,
+Q4T0A9.1/1-255:1.336)
+0:1.538)
+0:0.114)
+;
diff --git a/test/scripts/automated/belvu/test47 b/test/scripts/automated/belvu/test47
new file mode 100755
index 0000000..26571d9
--- /dev/null
+++ b/test/scripts/automated/belvu/test47
@@ -0,0 +1,25 @@
+#!/bin/ksh
+#
+# Description:
+#   Test creating a UPGMA tree (jukes-cantor distance correction)
+
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences to the saved results
+diffs=`belvu -T uj -o tree  $data_dir/ALIGN.selex >&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
+
diff --git a/test/scripts/automated/belvu/test47_results b/test/scripts/automated/belvu/test47_results
new file mode 100644
index 0000000..90c7672
--- /dev/null
+++ b/test/scripts/automated/belvu/test47_results
@@ -0,0 +1,1108 @@
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+Q9UPQ9.4/1-1833:-0.000,
+B0QY77.1/1-879:-0.000)
+0:0.000,
+B4E231.1/1-251:-0.000)
+0:0.000,
+Q9UPQ9.4/1-1833:-0.000)
+0:0.010,
+B5ME23.2/165-368:0.010)
+0:0.039,
+(
+(
+Q3TRH0.1/46-194:-0.000,
+Q3TRK2.1/1-88:-0.000)
+0:0.017,
+(
+Q8BWL0.1/2-169:-0.000,
+Q1LZM4.1/2-292:-0.000)
+0:0.017)
+0:0.032)
+0:0.039,
+(
+(
+(
+A8MYY3.2/946-1098:-0.000,
+A0CJW3.1/434-742:-0.000)
+0:0.003,
+C9J5L7.1/946-1098:0.003)
+0:0.030,
+D2GZL8.1/900-1051:0.034)
+0:0.054)
+0:0.666,
+Q4S4D3.1/395-556:0.754)
+0:0.147,
+(
+Q3UHK8.1/20-1269:-0.000,
+Q3UUG8.1/1-727:-0.000)
+0:0.900)
+0:0.246,
+(
+(
+Q4T574.1/639-850:0.485,
+Q4T0A8.1/27-228:0.485)
+0:0.481,
+C3ZJT1.1/371-689:0.966)
+0:0.181)
+0:0.501,
+(
+(
+(
+(
+(
+(
+C9JA83.1/3-471:-0.000,
+C9JAR8.1/119-1283:-0.000)
+0:0.000,
+Q8NDV7.2/119-1962:-0.000)
+0:0.024,
+B4DST4.1/1-168:0.024)
+0:0.224,
+(
+(
+Q05CE3.1/20-1014:0.004,
+Q8BNF0.2/9-877:0.004)
+0:0.007,
+Q6ZPQ4.1/1-243:0.011)
+0:0.237)
+0:0.712,
+(
+(
+D2GZL8.1/5-902:0.039,
+(
+Q3TRH0.1/1-49:-0.000,
+Q8BKI2.2/38-1167:-0.000)
+0:0.039)
+0:0.560,
+Q4TA88.1/5-275:0.599)
+0:0.360)
+0:0.294,
+B7PWH5.1/252-389:1.254)
+0:0.394)
+0:0.263,
+(
+(
+(
+(
+B3N1G0.1/6-1260:0.236,
+B4H886.1/6-148:0.236)
+0:0.644,
+(
+(
+(
+(
+(
+B3P9S0.1/6-1293:0.089,
+B4PW21.1/6-1287:0.089)
+0:0.059,
+(
+(
+B4IIY1.1/6-1290:0.024,
+B4R2G2.1/6-1156:0.024)
+0:0.045,
+(
+Q8SY33.1/6-1289:-0.000,
+Q8MSF0.1/1-120:-0.000)
+0:0.069)
+0:0.079)
+0:0.207,
+(
+Q29CP6.2/6-1291:0.122,
+B4H887.1/32-1121:0.122)
+0:0.233)
+0:0.123,
+B4NHM7.1/6-1344:0.478)
+0:0.098,
+(
+(
+(
+(
+(
+B4MF11.1/6-1287:0.031,
+D0Z7B2.1/6-1290:0.031)
+0:0.108,
+(
+C1K8B6.1/4-244:0.004,
+C1K890.1/4-244:0.004)
+0:0.135)
+0:0.104,
+C1K8V5.1/4-177:0.243)
+0:0.103,
+B4L7C4.1/6-1178:0.346)
+0:0.133,
+B4JZV3.1/6-1310:0.479)
+0:0.096)
+0:0.304)
+0:0.296,
+(
+(
+Q172C7.1/363-538:0.316,
+B0WXH0.1/311-1189:0.316)
+0:0.648,
+(
+Q172C8.1/192-646:0.835,
+A7UUT0.1/13-626:0.835)
+0:0.129)
+0:0.211)
+0:0.400,
+(
+A0NFA3.2/8-516:1.004,
+B7PWH5.1/349-695:1.004)
+0:0.572)
+0:0.335)
+0:0.142,
+(
+(
+(
+(
+(
+(
+B1ATC3.1/2-1028:-0.000,
+B7ZC94.1/2-868:-0.000)
+0:0.014,
+Q3UHC0.2/4-818:0.014)
+0:0.035,
+D3ZRA6.1/2-1000:0.049)
+0:0.084,
+(
+D2H997.1/2-866:0.100,
+Q9HCJ0.3/4-822:0.100)
+0:0.033)
+0:0.712,
+C3ZJT1.1/328-369:0.845)
+0:0.418,
+(
+Q4T574.1/239-596:1.121,
+Q4T0A9.1/370-579:1.121)
+0:0.142)
+0:0.790)
+0:0.517,
+(
+Q4T574.1/1-220:1.045,
+Q4T0A9.1/1-255:1.045)
+0:1.526)
+0:0.103,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+A8MYY3.2/16-949:-0.000,
+B5ME23.2/16-165:-0.000)
+0:0.000,
+C9J5L7.1/16-949:-0.000)
+0:0.018,
+B4DKJ5.1/1-276:0.018)
+0:0.029,
+Q8BX83.2/38-410:0.048)
+0:0.248,
+B1H1W1.1/13-388:0.296)
+0:0.101,
+Q4T1P6.1/6-46:0.397)
+0:0.124,
+(
+Q4S4D3.1/1-379:0.454,
+Q4T5V2.1/1-136:0.454)
+0:0.068)
+0:0.427,
+C3ZJT1.1/159-315:0.948)
+0:0.078,
+(
+(
+C9JAR8.1/20-121:-0.000,
+Q8NDV7.2/20-121:-0.000)
+0:0.117,
+D4A372.1/1-97:0.117)
+0:0.909)
+0:1.648)
+0:0.126,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+A8MYY3.2/1098-1737:-0.000,
+B0QY77.1/879-1390:-0.000)
+0:0.000,
+B4E231.1/251-762:-0.000)
+0:0.000,
+B5ME23.2/368-1007:-0.000)
+0:0.000,
+C9J5L7.1/1098-1737:-0.000)
+0:0.000,
+B7ZB91.1/13-478:-0.000)
+0:0.014,
+D2GZL8.1/1051-1690:0.014)
+0:0.019,
+(
+Q1LZM4.1/292-736:0.007,
+Q8BXV9.1/2-142:0.007)
+0:0.026)
+0:0.079,
+Q8BZH2.1/5-63:0.112)
+0:0.882,
+(
+Q4S4D3.1/651-825:0.470,
+Q4TA88.1/319-457:0.470)
+0:0.525)
+0:0.410,
+(
+Q4T0A8.1/329-402:1.206,
+(
+A5E351.1/72-416:1.032,
+(
+B3NV15.1/1200-1273:0.588,
+B4PZT3.1/1188-1272:0.588)
+0:0.444)
+0:0.174)
+0:0.199)
+0:0.249,
+(
+D3B9K1.1/622-823:1.378,
+Q86KE5.1/77-311:1.378)
+0:0.275)
+0:0.104,
+(
+(
+(
+Q2GV87.1/66-278:1.355,
+Q55F37.1/112-343:1.355)
+0:0.054,
+(
+(
+(
+(
+(
+P20105.2/537-654:0.205,
+B4PJL3.1/533-654:0.205)
+0:0.186,
+B3M4K4.1/533-691:0.391)
+0:0.739,
+(
+(
+A3F295.1/6-117:0.586,
+A3F290.1/9-110:0.586)
+0:0.226,
+Q54LR6.1/53-262:0.812)
+0:0.318)
+0:0.061,
+(
+(
+(
+(
+(
+(
+C1GVG2.1/279-439:0.177,
+(
+C0SAP5.1/281-410:0.110,
+C1GDP1.1/281-415:0.110)
+0:0.067)
+0:0.663,
+A5E3S9.1/278-450:0.841)
+0:0.153,
+(
+(
+B4NNJ8.1/320-445:0.658,
+(
+B4J985.1/306-430:0.353,
+B4ME65.1/311-417:0.353)
+0:0.305)
+0:0.304,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+B4JL62.1/290-395:0.340,
+D3BH34.1/115-236:0.340)
+0:0.042,
+(
+(
+B4K3C6.1/67-191:0.191,
+Q5TST0.3/683-841:0.191)
+0:0.039,
+B4NP54.1/2-69:0.230)
+0:0.151)
+0:0.073,
+(
+(
+(
+D1ZFW1.1/794-871:0.186,
+(
+Q4P3Y1.1/128-184:0.144,
+Q4P2T9.1/335-396:0.144)
+0:0.042)
+0:0.127,
+A0BQD1.1/165-319:0.312)
+0:0.061,
+(
+A5E1Y8.1/358-537:0.305,
+(
+B4KT28.1/222-266:0.233,
+A8NN12.1/68-136:0.233)
+0:0.072)
+0:0.069)
+0:0.081)
+0:0.027,
+(
+(
+B4MHJ9.1/106-306:0.290,
+Q25AW7.1/146-228:0.290)
+0:0.174,
+(
+C0SUE2.1/77-175:0.188,
+B4JY35.1/15-92:0.188)
+0:0.276)
+0:0.018)
+0:0.114,
+D0H0K7.1/432-591:0.596)
+0:0.112,
+(
+(
+Q9VYA6.1/174-225:0.103,
+Q86NT0.1/173-270:0.103)
+0:0.438,
+D3B7T2.1/209-345:0.542)
+0:0.166)
+0:0.020,
+(
+(
+B4PH83.1/181-247:0.411,
+Q54FL0.1/951-1244:0.411)
+0:0.245,
+A1C5H3.1/188-267:0.656)
+0:0.073)
+0:0.127,
+O42323.1/299-489:0.855)
+0:0.063,
+(
+(
+Q54X31.1/100-217:0.661,
+C5GQY8.1/409-612:0.661)
+0:0.218,
+(
+B4NE44.1/470-686:0.513,
+B4L803.1/240-323:0.513)
+0:0.366)
+0:0.040)
+0:0.043)
+0:0.032)
+0:0.058,
+(
+B0X8C2.1/150-263:0.839,
+Q6C9A9.1/660-764:0.839)
+0:0.212)
+0:0.048,
+(
+(
+(
+(
+A3F293.1/10-109:0.134,
+A3F299.1/12-111:0.134)
+0:0.569,
+B4KN27.1/225-337:0.703)
+0:0.128,
+Q4PF35.1/18-283:0.832)
+0:0.161,
+B4JPX4.1/284-409:0.993)
+0:0.107)
+0:0.015,
+(
+B4N2I1.1/44-159:0.171,
+B3MYX8.1/14-153:0.171)
+0:0.944)
+0:0.076)
+0:0.085,
+(
+C1GEW9.1/11-129:1.019,
+A5E7X5.1/33-235:1.019)
+0:0.256)
+0:0.133)
+0:0.091,
+(
+B3MKU5.1/256-639:1.234,
+Q5TSQ4.3/457-676:1.234)
+0:0.265)
+0:0.258)
+0:0.128,
+(
+(
+(
+(
+(
+(
+(
+B1ATC3.1/1015-1647:-0.000,
+B7ZC94.1/855-1477:-0.000)
+0:0.000,
+Q3UHC0.2/805-1437:-0.000)
+0:0.085,
+(
+D2H997.1/853-1477:0.075,
+Q9HCJ0.3/810-1437:0.075)
+0:0.010)
+0:0.355,
+(
+(
+Q4T574.1/894-1324:0.250,
+Q4T0A8.1/405-529:0.250)
+0:0.073,
+B0R1E2.1/1-289:0.323)
+0:0.117)
+0:0.629,
+(
+(
+(
+(
+(
+C9JA83.1/468-1101:-0.000,
+C9JAR8.1/1280-1913:-0.000)
+0:0.008,
+D2I222.1/1-1905:0.008)
+0:0.009,
+B3KSX2.1/4-277:0.017)
+0:0.117,
+(
+D4A372.1/95-1931:0.011,
+(
+(
+(
+(
+Q3UHK8.1/1266-1896:-0.000,
+Q99JR3.2/24-648:-0.000)
+0:0.000,
+Q8BWM2.1/1-337:-0.000)
+0:0.001,
+Q8BXM6.1/4-627:0.001)
+0:0.002,
+Q3UQ45.1/7-500:0.003)
+0:0.008)
+0:0.123)
+0:0.739,
+Q4S9I4.1/33-1574:0.873)
+0:0.196)
+0:0.448,
+(
+Q4S4D3.1/557-654:0.710,
+Q7SGG0.1/13-167:0.710)
+0:0.808)
+0:0.204,
+(
+(
+A0NFA3.2/687-1175:-0.000,
+B4KQM5.1/242-419:-0.000)
+0:1.553,
+A7SDW4.1/430-1260:1.553)
+0:0.169)
+0:0.164)
+0:0.158,
+A8PU70.1/566-908:2.044)
+0:0.208,
+(
+(
+(
+Q7Q3B9.4/7-766:0.588,
+A7UUT0.1/686-771:0.588)
+0:0.754,
+B3M562.1/702-895:1.342)
+0:0.585,
+(
+(
+(
+P20105.2/153-385:0.119,
+B4PJL3.1/173-393:0.119)
+0:0.145,
+B3NHT3.1/152-330:0.265)
+0:0.108,
+B3M4K4.1/89-378:0.373)
+0:1.554)
+0:0.325)
+0:0.500,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+B1ATC3.1/1646-1899:-0.000,
+B7ZC94.1/1478-1731:-0.000)
+0:0.000,
+Q3UHC0.2/1436-1689:-0.000)
+0:0.072,
+(
+D2H997.1/1476-1729:0.065,
+Q9HCJ0.3/1434-1689:0.065)
+0:0.007)
+0:0.290,
+(
+(
+Q4T574.1/1322-1578:0.207,
+Q4T0A8.1/526-801:0.207)
+0:0.115,
+B0R1E2.1/290-554:0.321)
+0:0.041)
+0:0.198,
+Q4S9I4.1/1569-1835:0.560)
+0:0.110,
+(
+(
+(
+(
+(
+(
+(
+Q3TRH0.1/194-838:-0.000,
+Q8BKI2.2/1167-1810:-0.000)
+0:0.000,
+Q8BWL0.1/169-812:-0.000)
+0:0.000,
+Q3TRK2.1/88-731:-0.000)
+0:0.000,
+Q66JU9.1/2-312:-0.000)
+0:0.000,
+Q8VD67.1/1-249:-0.000)
+0:0.004,
+(
+(
+Q6P7B1.1/2-432:-0.000,
+Q148P0.1/1-249:-0.000)
+0:0.000,
+Q9JHZ1.1/1-249:-0.000)
+0:0.004)
+0:0.521,
+(
+Q4S4D3.1/823-1099:0.341,
+Q4TA89.1/1-316:0.341)
+0:0.184)
+0:0.145)
+0:0.177,
+C3ZJT1.1/730-1350:0.846)
+0:0.262,
+(
+C0PFW8.1/269-336:-0.000,
+C0HHH3.1/270-337:-0.000)
+0:1.108)
+0:0.225,
+(
+(
+(
+(
+(
+B0WTJ5.1/228-1404:0.315,
+Q172C6.1/6-1080:0.315)
+0:0.170,
+Q7Q3B9.4/781-1217:0.485)
+0:0.124,
+(
+Q172C8.1/672-1244:0.216,
+B0WXG8.1/1199-1287:0.216)
+0:0.393)
+0:0.132,
+(
+Q172C7.1/573-1487:0.356,
+B0WXH0.1/1191-1443:0.356)
+0:0.384)
+0:0.312,
+(
+(
+A7UUT0.1/838-1208:0.429,
+(
+B0WXG8.1/386-1198:0.049,
+B8RJB3.1/9-266:0.049)
+0:0.381)
+0:0.403,
+B7PWH5.1/720-1088:0.833)
+0:0.219)
+0:0.282)
+0:0.182,
+(
+(
+A9USE7.1/720-774:0.900,
+D4APH2.1/480-541:0.900)
+0:0.455,
+(
+A9USE7.1/997-1101:0.681,
+A7AT74.1/621-697:0.681)
+0:0.674)
+0:0.161)
+0:0.088,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+A5BE57.1/246-300:0.332,
+B9RQB9.1/236-287:0.332)
+0:0.028,
+(
+B2RXY9.1/193-253:-0.000,
+A2A5N3.1/193-253:-0.000)
+0:0.360)
+0:0.241,
+(
+(
+B2GUY3.1/194-262:-0.000,
+D4AC14.1/194-262:-0.000)
+0:0.000,
+D4AC21.1/123-191:-0.000)
+0:0.601)
+0:0.139,
+(
+(
+C5WPD4.1/242-318:0.226,
+(
+Q10N87.1/216-320:0.010,
+B8AL31.1/216-320:0.010)
+0:0.217)
+0:0.272,
+A5B3Z9.1/212-306:0.498)
+0:0.242)
+0:0.053,
+(
+(
+(
+(
+(
+(
+B5DF80.1/306-473:0.094,
+(
+(
+(
+(
+(
+Q2VIP3.1/296-392:-0.000,
+Q3ZCS4.1/296-393:-0.000)
+0:0.000,
+Q5VX58.1/296-390:-0.000)
+0:0.000,
+Q9H361.2/296-390:-0.000)
+0:0.000,
+Q2VIN7.1/296-392:-0.000)
+0:0.043,
+Q2VIN9.1/296-390:0.043)
+0:0.051)
+0:0.063,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+B2GUY3.1/296-379:-0.000,
+D4AC14.1/296-379:-0.000)
+0:0.000,
+D4AC21.1/225-308:-0.000)
+0:0.000,
+Q6IQ30.1/296-379:-0.000)
+0:0.000,
+Q4VC03.1/296-379:-0.000)
+0:0.000,
+Q13310.1/296-379:-0.000)
+0:0.000,
+D3Z5M2.1/296-380:-0.000)
+0:0.000,
+A4IFC3.1/296-379:-0.000)
+0:0.000,
+B1ANR0.1/296-379:-0.000)
+0:0.000,
+D2I596.1/309-392:-0.000)
+0:0.000,
+Q99LF8.1/296-380:-0.000)
+0:0.000,
+Q15164.1/107-185:-0.000)
+0:0.012,
+(
+(
+(
+(
+Q91YZ8.1/296-380:-0.000,
+A3KFU8.1/296-380:-0.000)
+0:0.000,
+Q6PHQ9.1/296-380:-0.000)
+0:0.000,
+A3KFU5.1/296-380:-0.000)
+0:0.000,
+Q3UX16.1/225-309:-0.000)
+0:0.012)
+0:0.006,
+(
+(
+Q7T3G5.1/297-380:-0.000,
+Q8QGJ7.1/296-379:-0.000)
+0:0.000,
+Q4RNX8.1/296-379:-0.000)
+0:0.018)
+0:0.016,
+Q3UTA6.1/197-279:0.034)
+0:0.122)
+0:0.049,
+Q9D4E6.1/307-466:0.206)
+0:0.076,
+(
+(
+(
+B2RXY9.1/296-394:-0.000,
+A2A5N3.1/296-393:-0.000)
+0:0.120,
+D3ZAS7.1/296-399:0.120)
+0:0.130,
+(
+(
+D2H6M0.1/296-405:0.047,
+Q4VXU2.1/296-404:0.047)
+0:0.029,
+Q98SP8.2/296-391:0.076)
+0:0.174)
+0:0.032)
+0:0.236,
+(
+(
+(
+C5YBU9.1/329-416:0.012,
+B6U4M0.1/324-410:0.012)
+0:0.350,
+(
+(
+B9H7X8.1/304-412:-0.000,
+B9H7X9.1/314-422:-0.000)
+0:0.096,
+B9GT62.1/311-412:0.096)
+0:0.266)
+0:0.072,
+(
+A9TLC5.1/312-407:0.395,
+Q05196.2/328-430:0.395)
+0:0.039)
+0:0.084)
+0:0.049,
+(
+(
+A2YEJ5.1/343-442:-0.000,
+Q69X94.1/342-443:-0.000)
+0:0.000,
+B9FTY9.1/365-463:-0.000)
+0:0.567)
+0:0.227)
+0:0.065,
+(
+A5BE57.1/307-474:0.596,
+(
+B9RQB9.1/300-388:0.444,
+B9GH32.1/295-362:0.444)
+0:0.152)
+0:0.262)
+0:0.056,
+(
+(
+(
+B9RQB9.1/109-183:0.356,
+B9GH32.1/107-174:0.356)
+0:0.149,
+O04319.1/114-194:0.505)
+0:0.275,
+(
+(
+C5YBU9.1/128-201:0.300,
+B9H7X8.1/113-180:0.300)
+0:0.021,
+(
+(
+Q8RXR5.1/110-177:-0.000,
+P42731.1/126-193:-0.000)
+0:0.109,
+Q9M6E6.1/117-184:0.109)
+0:0.212)
+0:0.459)
+0:0.134)
+0:0.013,
+(
+(
+(
+(
+P31209.2/366-455:0.142,
+(
+B6K033.1/364-457:0.127,
+B6K6T8.1/356-444:0.127)
+0:0.015)
+0:0.155,
+Q6CDH3.1/332-428:0.298)
+0:0.067,
+(
+(
+D3AVQ3.1/284-366:0.303,
+Q54BM2.1/286-375:0.303)
+0:0.030,
+(
+Q5KBW2.1/367-420:0.166,
+Q4P8R9.1/368-413:0.166)
+0:0.168)
+0:0.031)
+0:0.052,
+A8NF86.1/337-425:0.416)
+0:0.511)
+0:0.046,
+O04319.1/304-419:0.973)
+0:0.150,
+(
+(
+Q7Q9F7.4/282-427:0.849,
+(
+A3CUY7.1/2-69:0.312,
+Q2FSR7.1/6-69:0.312)
+0:0.538)
+0:0.136,
+(
+D0N277.1/201-240:0.802,
+C4QZM5.1/235-294:0.802)
+0:0.183)
+0:0.138)
+0:0.116,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+C5WVW4.1/223-289:0.015,
+(
+C4IYK3.1/223-290:-0.000,
+B6UA93.1/223-290:-0.000)
+0:0.015)
+0:0.081,
+(
+(
+B8APB9.1/226-292:-0.000,
+Q10R21.1/226-292:-0.000)
+0:0.000,
+Q0DUQ0.1/248-314:-0.000)
+0:0.096)
+0:0.221,
+B9RIB9.1/231-294:0.318)
+0:0.063,
+(
+(
+C0PPV9.1/259-392:0.007,
+C0PT30.1/259-393:0.007)
+0:0.326,
+(
+(
+(
+B8LRZ2.1/277-363:-0.000,
+A9NX92.1/275-362:-0.000)
+0:0.246,
+A9NWA0.1/248-328:0.246)
+0:0.020,
+(
+A9TFH5.1/223-287:-0.000,
+A9TZW4.1/245-319:-0.000)
+0:0.266)
+0:0.068)
+0:0.046)
+0:0.063,
+(
+(
+(
+(
+B9GNX9.1/266-364:0.123,
+B9MVK8.1/264-361:0.123)
+0:0.037,
+A5BPW5.1/140-241:0.160)
+0:0.055,
+B9R7H3.1/281-377:0.216)
+0:0.154,
+Q9FX88.1/338-415:0.370)
+0:0.074)
+0:0.035,
+(
+(
+(
+(
+(
+B9N4W3.1/235-341:0.029,
+B9HRX8.1/250-356:0.029)
+0:0.080,
+B9RY32.1/285-382:0.109)
+0:0.130,
+(
+(
+Q8LFI9.1/244-343:-0.000,
+Q0WW84.1/287-386:-0.000)
+0:0.000,
+Q9LJL7.1/287-386:-0.000)
+0:0.239)
+0:0.067,
+A5BF74.1/281-378:0.306)
+0:0.055,
+Q2V9A1.1/201-306:0.360)
+0:0.118)
+0:0.077,
+(
+Q6R969.1/253-422:0.038,
+Q2V9C2.1/258-417:0.038)
+0:0.517)
+0:0.127,
+(
+(
+(
+(
+Q2PEV8.1/238-322:0.325,
+(
+(
+Q9LEB4.1/261-347:0.257,
+A5C5B3.1/256-335:0.257)
+0:0.004,
+B9I0E1.1/253-334:0.261)
+0:0.064)
+0:0.061,
+(
+(
+C5WUD2.1/243-339:0.077,
+C0P488.1/242-336:0.077)
+0:0.042,
+(
+(
+(
+(
+Q10HZ8.1/240-333:-0.000,
+Q9AY92.1/240-333:-0.000)
+0:0.000,
+Q10HZ7.1/240-333:-0.000)
+0:0.000,
+B8AKU6.1/240-333:-0.000)
+0:0.000,
+Q0DQQ8.1/284-377:-0.000)
+0:0.119)
+0:0.267)
+0:0.124,
+(
+Q9FPJ8.1/236-325:-0.000,
+Q9FFU0.1/236-325:-0.000)
+0:0.510)
+0:0.051,
+(
+Q8LBV8.1/233-325:-0.000,
+Q9SAB3.1/234-326:-0.000)
+0:0.561)
+0:0.122)
+0:0.355,
+(
+(
+(
+A9S4M3.1/42-65:0.043,
+A9T3C5.1/56-79:0.043)
+0:0.470,
+(
+Q6DGV1.1/174-212:0.053,
+B5LEQ5.1/179-323:0.053)
+0:0.460)
+0:0.342,
+A3GHN7.2/350-469:0.855)
+0:0.183)
+0:0.201)
+0:0.059,
+(
+(
+C4Q4K6.1/224-436:1.019,
+C4XVP0.1/46-94:1.019)
+0:0.252,
+B3S2W8.1/76-163:1.271)
+0:0.027)
+0:0.126,
+(
+(
+B3S2W8.1/165-267:1.191,
+(
+(
+B4NBP3.1/171-277:0.035,
+B3M300.1/220-284:0.035)
+0:0.121,
+(
+B4MC02.1/171-283:0.075,
+B4JIH9.1/171-286:0.075)
+0:0.081)
+0:1.035)
+0:0.096,
+(
+Q54C48.1/271-412:0.991,
+C5DIP1.1/2-75:0.991)
+0:0.296)
+0:0.137)
+0:0.110,
+(
+Q2I2V8.1/539-606:1.324,
+D3BFK6.1/320-440:1.324)
+0:0.211)
+0:0.069)
+0:0.117,
+B3RQ20.1/1143-1394:1.720)
+0:0.152,
+(
+A7SDW4.1/1319-1671:-0.000,
+A7T6Q0.1/2-144:-0.000)
+0:1.872)
+0:0.343,
+Q4S4D3.1/1091-1191:2.215)
+0:0.538)
+0:0.046)
+;
diff --git a/test/scripts/automated/belvu/test48 b/test/scripts/automated/belvu/test48
new file mode 100755
index 0000000..ef60031
--- /dev/null
+++ b/test/scripts/automated/belvu/test48
@@ -0,0 +1,25 @@
+#!/bin/ksh
+#
+# Description:
+#   Test creating a UPGMA tree (kimura distance correction)
+
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences to the saved results
+diffs=`belvu -T uk -o tree  $data_dir/ALIGN.selex >&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
+
diff --git a/test/scripts/automated/belvu/test48_results b/test/scripts/automated/belvu/test48_results
new file mode 100644
index 0000000..f5fdeb9
--- /dev/null
+++ b/test/scripts/automated/belvu/test48_results
@@ -0,0 +1,1108 @@
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+Q9UPQ9.4/1-1833:-0.000,
+B0QY77.1/1-879:-0.000)
+0:0.000,
+B4E231.1/1-251:-0.000)
+0:0.000,
+Q9UPQ9.4/1-1833:-0.000)
+0:0.010,
+B5ME23.2/165-368:0.010)
+0:0.040,
+(
+(
+Q3TRH0.1/46-194:-0.000,
+Q3TRK2.1/1-88:-0.000)
+0:0.017,
+(
+Q8BWL0.1/2-169:-0.000,
+Q1LZM4.1/2-292:-0.000)
+0:0.017)
+0:0.032)
+0:0.059,
+(
+(
+(
+A8MYY3.2/946-1098:-0.000,
+A0CJW3.1/434-742:-0.000)
+0:0.003,
+C9J5L7.1/946-1098:0.003)
+0:0.031,
+D2GZL8.1/900-1051:0.034)
+0:0.075)
+0:0.749,
+Q4S4D3.1/395-556:0.858)
+0:0.543,
+(
+(
+Q4T574.1/639-850:0.525,
+Q4T0A8.1/27-228:0.525)
+0:0.614,
+C3ZJT1.1/371-689:1.139)
+0:0.262)
+0:0.148,
+(
+(
+(
+(
+(
+C9JA83.1/3-471:-0.000,
+C9JAR8.1/119-1283:-0.000)
+0:0.000,
+Q8NDV7.2/119-1962:-0.000)
+0:0.024,
+B4DST4.1/1-168:0.024)
+0:0.238,
+(
+(
+Q05CE3.1/20-1014:0.004,
+Q8BNF0.2/9-877:0.004)
+0:0.007,
+Q6ZPQ4.1/1-243:0.011)
+0:0.252)
+0:0.881,
+(
+(
+D2GZL8.1/5-902:0.039,
+(
+Q3TRH0.1/1-49:-0.000,
+Q8BKI2.2/38-1167:-0.000)
+0:0.039)
+0:0.623,
+Q4TA88.1/5-275:0.663)
+0:0.481)
+0:0.405)
+0:0.337,
+(
+(
+(
+(
+(
+B1ATC3.1/1015-1647:-0.000,
+B7ZC94.1/855-1477:-0.000)
+0:0.000,
+Q3UHC0.2/805-1437:-0.000)
+0:0.086,
+(
+D2H997.1/853-1477:0.076,
+Q9HCJ0.3/810-1437:0.076)
+0:0.010)
+0:0.387,
+(
+(
+Q4T574.1/894-1324:0.260,
+Q4T0A8.1/405-529:0.260)
+0:0.081,
+B0R1E2.1/1-289:0.341)
+0:0.132)
+0:0.947,
+(
+(
+(
+(
+(
+(
+C9JA83.1/468-1101:-0.000,
+C9JAR8.1/1280-1913:-0.000)
+0:0.008,
+D2I222.1/1-1905:0.008)
+0:0.009,
+B3KSX2.1/4-277:0.017)
+0:0.123,
+(
+D4A372.1/95-1931:0.011,
+(
+(
+(
+(
+Q3UHK8.1/1266-1896:-0.000,
+Q99JR3.2/24-648:-0.000)
+0:0.000,
+Q8BWM2.1/1-337:-0.000)
+0:0.001,
+Q8BXM6.1/4-627:0.001)
+0:0.002,
+Q3UQ45.1/7-500:0.003)
+0:0.008)
+0:0.128)
+0:0.818,
+(
+Q3UHK8.1/20-1269:-0.000,
+Q3UUG8.1/1-727:-0.000)
+0:0.958)
+0:0.123,
+Q4S9I4.1/33-1574:1.080)
+0:0.340)
+0:0.466)
+0:0.479,
+(
+(
+(
+(
+(
+(
+(
+B1ATC3.1/2-1028:-0.000,
+B7ZC94.1/2-868:-0.000)
+0:0.014,
+Q3UHC0.2/4-818:0.014)
+0:0.036,
+D3ZRA6.1/2-1000:0.049)
+0:0.086,
+(
+D2H997.1/2-866:0.101,
+Q9HCJ0.3/4-822:0.101)
+0:0.034)
+0:0.838,
+C3ZJT1.1/328-369:0.974)
+0:0.626,
+(
+Q4T574.1/239-596:1.365,
+Q4T0A9.1/370-579:1.365)
+0:0.235)
+0:0.650,
+B7PWH5.1/252-389:2.250)
+0:0.116)
+0:0.292,
+(
+(
+(
+(
+(
+B3N1G0.1/6-1260:0.245,
+B4H886.1/6-148:0.245)
+0:0.740,
+(
+(
+(
+(
+(
+B3P9S0.1/6-1293:0.090,
+B4PW21.1/6-1287:0.090)
+0:0.063,
+(
+(
+B4IIY1.1/6-1290:0.024,
+B4R2G2.1/6-1156:0.024)
+0:0.046,
+(
+Q8SY33.1/6-1289:-0.000,
+Q8MSF0.1/1-120:-0.000)
+0:0.070)
+0:0.083)
+0:0.226,
+(
+Q29CP6.2/6-1291:0.125,
+B4H887.1/32-1121:0.125)
+0:0.255)
+0:0.140,
+B4NHM7.1/6-1344:0.520)
+0:0.110,
+(
+(
+(
+(
+(
+B4MF11.1/6-1287:0.032,
+D0Z7B2.1/6-1290:0.032)
+0:0.111,
+(
+C1K8B6.1/4-244:0.004,
+C1K890.1/4-244:0.004)
+0:0.138)
+0:0.111,
+C1K8V5.1/4-177:0.254)
+0:0.113,
+B4L7C4.1/6-1178:0.367)
+0:0.154,
+B4JZV3.1/6-1310:0.521)
+0:0.108)
+0:0.355)
+0:0.472,
+(
+(
+Q172C7.1/363-538:0.333,
+B0WXH0.1/311-1189:0.333)
+0:0.808,
+(
+Q172C8.1/192-646:0.960,
+A7UUT0.1/13-626:0.960)
+0:0.181)
+0:0.315)
+0:0.519,
+(
+A0NFA3.2/8-516:1.192,
+B7PWH5.1/349-695:1.192)
+0:0.784)
+0:0.422,
+(
+(
+Q7Q3B9.4/7-766:0.648,
+A7UUT0.1/686-771:0.648)
+0:1.079,
+B3M562.1/702-895:1.726)
+0:0.672)
+0:0.259)
+0:0.156,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+A8MYY3.2/1098-1737:-0.000,
+B0QY77.1/879-1390:-0.000)
+0:0.000,
+B4E231.1/251-762:-0.000)
+0:0.000,
+B5ME23.2/368-1007:-0.000)
+0:0.000,
+C9J5L7.1/1098-1737:-0.000)
+0:0.000,
+B7ZB91.1/13-478:-0.000)
+0:0.014,
+D2GZL8.1/1051-1690:0.014)
+0:0.019,
+(
+Q1LZM4.1/292-736:0.007,
+Q8BXV9.1/2-142:0.007)
+0:0.026)
+0:0.081,
+Q8BZH2.1/5-63:0.115)
+0:1.069,
+(
+Q4S4D3.1/651-825:0.508,
+Q4TA88.1/319-457:0.508)
+0:0.676)
+0:0.871,
+(
+(
+Q4T0A8.1/329-402:1.484,
+A5E351.1/72-416:1.484)
+0:0.377,
+(
+(
+(
+(
+(
+P20105.2/537-654:0.212,
+B4PJL3.1/533-654:0.212)
+0:0.206,
+B3M4K4.1/533-691:0.418)
+0:0.974,
+(
+(
+A3F295.1/6-117:0.646,
+A3F290.1/9-110:0.646)
+0:0.285,
+Q54LR6.1/53-262:0.931)
+0:0.461)
+0:0.162,
+(
+(
+(
+(
+C1GEW9.1/11-129:1.200,
+(
+(
+B4NNJ8.1/320-445:0.734,
+(
+B4J985.1/306-430:0.374,
+B4ME65.1/311-417:0.374)
+0:0.360)
+0:0.409,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+B4JL62.1/290-395:0.360,
+D3BH34.1/115-236:0.360)
+0:0.056,
+(
+(
+B4K3C6.1/67-191:0.197,
+Q5TST0.3/683-841:0.197)
+0:0.042,
+B4NP54.1/2-69:0.239)
+0:0.176)
+0:0.084,
+(
+(
+(
+D1ZFW1.1/794-871:0.192,
+(
+Q4P3Y1.1/128-184:0.147,
+Q4P2T9.1/335-396:0.147)
+0:0.045)
+0:0.138,
+A0BQD1.1/165-319:0.329)
+0:0.070,
+(
+A5E1Y8.1/358-537:0.321,
+(
+B4KT28.1/222-266:0.243,
+A8NN12.1/68-136:0.243)
+0:0.079)
+0:0.078)
+0:0.101)
+0:0.033,
+(
+(
+B4MHJ9.1/106-306:0.304,
+Q25AW7.1/146-228:0.304)
+0:0.201,
+(
+C0SUE2.1/77-175:0.194,
+B4JY35.1/15-92:0.194)
+0:0.312)
+0:0.028)
+0:0.138,
+D0H0K7.1/432-591:0.671)
+0:0.140,
+(
+(
+Q9VYA6.1/174-225:0.105,
+Q86NT0.1/173-270:0.105)
+0:0.489,
+D3B7T2.1/209-345:0.594)
+0:0.217)
+0:0.023,
+(
+(
+B4PH83.1/181-247:0.439,
+Q54FL0.1/951-1244:0.439)
+0:0.291,
+A1C5H3.1/188-267:0.731)
+0:0.103)
+0:0.161,
+O42323.1/299-489:0.995)
+0:0.094,
+(
+(
+Q54X31.1/100-217:0.737,
+C5GQY8.1/409-612:0.737)
+0:0.304,
+(
+B4NE44.1/470-686:0.558,
+B4L803.1/240-323:0.558)
+0:0.483)
+0:0.047)
+0:0.054)
+0:0.057)
+0:0.120,
+(
+(
+(
+(
+A3F293.1/10-109:0.137,
+A3F299.1/12-111:0.137)
+0:0.654,
+B4KN27.1/225-337:0.791)
+0:0.166,
+Q4PF35.1/18-283:0.957)
+0:0.224,
+B4JPX4.1/284-409:1.181)
+0:0.139)
+0:0.040,
+(
+B0X8C2.1/150-263:0.966,
+Q6C9A9.1/660-764:0.966)
+0:0.394)
+0:0.126,
+(
+(
+B4N2I1.1/44-159:0.176,
+B3MYX8.1/14-153:0.176)
+0:1.210,
+(
+A5E3S9.1/278-450:0.970,
+Q5TSQ4.3/457-676:0.970)
+0:0.416)
+0:0.100)
+0:0.067)
+0:0.103,
+(
+(
+(
+C1GVG2.1/279-439:0.184,
+(
+C0SAP5.1/281-410:0.112,
+C1GDP1.1/281-415:0.112)
+0:0.071)
+0:0.837,
+Q86KE5.1/77-311:1.021)
+0:0.208,
+(
+B3NV15.1/1200-1273:0.648,
+B4PZT3.1/1188-1272:0.648)
+0:0.581)
+0:0.427)
+0:0.205)
+0:0.194)
+0:0.166,
+(
+Q4S4D3.1/557-654:0.799,
+Q7SGG0.1/13-167:0.799)
+0:1.422)
+0:0.108,
+(
+(
+Q2GV87.1/66-278:1.749,
+Q55F37.1/112-343:1.749)
+0:0.523,
+(
+A5E7X5.1/33-235:1.710,
+D3B9K1.1/622-823:1.710)
+0:0.563)
+0:0.056)
+0:0.182,
+(
+(
+A0NFA3.2/687-1175:-0.000,
+B4KQM5.1/242-419:-0.000)
+0:2.297,
+B3MKU5.1/256-639:2.297)
+0:0.214)
+0:0.248,
+(
+A7SDW4.1/430-1260:1.718,
+(
+A7SDW4.1/1319-1671:-0.000,
+A7T6Q0.1/2-144:-0.000)
+0:1.718)
+0:1.041)
+0:0.055)
+0:0.093,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+B1ATC3.1/1646-1899:-0.000,
+B7ZC94.1/1478-1731:-0.000)
+0:0.000,
+Q3UHC0.2/1436-1689:-0.000)
+0:0.073,
+(
+D2H997.1/1476-1729:0.066,
+Q9HCJ0.3/1434-1689:0.066)
+0:0.007)
+0:0.312,
+(
+(
+Q4T574.1/1322-1578:0.214,
+Q4T0A8.1/526-801:0.214)
+0:0.125,
+B0R1E2.1/290-554:0.339)
+0:0.046)
+0:0.229,
+Q4S9I4.1/1569-1835:0.614)
+0:0.135,
+(
+(
+(
+(
+(
+(
+(
+Q3TRH0.1/194-838:-0.000,
+Q8BKI2.2/1167-1810:-0.000)
+0:0.000,
+Q8BWL0.1/169-812:-0.000)
+0:0.000,
+Q3TRK2.1/88-731:-0.000)
+0:0.000,
+Q66JU9.1/2-312:-0.000)
+0:0.000,
+Q8VD67.1/1-249:-0.000)
+0:0.004,
+(
+(
+Q6P7B1.1/2-432:-0.000,
+Q148P0.1/1-249:-0.000)
+0:0.000,
+Q9JHZ1.1/1-249:-0.000)
+0:0.004)
+0:0.570,
+(
+Q4S4D3.1/823-1099:0.361,
+Q4TA89.1/1-316:0.361)
+0:0.213)
+0:0.175)
+0:0.227,
+C3ZJT1.1/730-1350:0.977)
+0:0.373,
+(
+C0PFW8.1/269-336:-0.000,
+C0HHH3.1/270-337:-0.000)
+0:1.349)
+0:0.317,
+(
+(
+(
+(
+(
+(
+B0WTJ5.1/228-1404:0.332,
+Q172C6.1/6-1080:0.332)
+0:0.193,
+Q7Q3B9.4/781-1217:0.525)
+0:0.153,
+(
+Q172C8.1/672-1244:0.224,
+B0WXG8.1/1199-1287:0.224)
+0:0.454)
+0:0.161,
+(
+Q172C7.1/573-1487:0.378,
+B0WXH0.1/1191-1443:0.378)
+0:0.461)
+0:0.360,
+(
+(
+A7UUT0.1/838-1208:0.461,
+(
+B0WXG8.1/386-1198:0.049,
+B8RJB3.1/9-266:0.049)
+0:0.412)
+0:0.513,
+B7PWH5.1/720-1088:0.973)
+0:0.226)
+0:0.396,
+Q2I2V8.1/539-606:1.595)
+0:0.072)
+0:0.366,
+(
+(
+A9USE7.1/720-774:1.048,
+D4APH2.1/480-541:1.048)
+0:0.733,
+(
+A9USE7.1/997-1101:0.762,
+A7AT74.1/621-697:0.762)
+0:1.019)
+0:0.251)
+0:0.194,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+A5BE57.1/246-300:0.351,
+B9RQB9.1/236-287:0.351)
+0:0.032,
+(
+B2RXY9.1/193-253:-0.000,
+A2A5N3.1/193-253:-0.000)
+0:0.382)
+0:0.284,
+(
+(
+B2GUY3.1/194-262:-0.000,
+D4AC14.1/194-262:-0.000)
+0:0.000,
+D4AC21.1/123-191:-0.000)
+0:0.666)
+0:0.175,
+(
+(
+C5WPD4.1/242-318:0.235,
+(
+Q10N87.1/216-320:0.010,
+B8AL31.1/216-320:0.010)
+0:0.226)
+0:0.306,
+A5B3Z9.1/212-306:0.541)
+0:0.301)
+0:0.066,
+(
+(
+(
+(
+(
+(
+B5DF80.1/306-473:0.095,
+(
+(
+(
+(
+(
+Q2VIP3.1/296-392:-0.000,
+Q3ZCS4.1/296-393:-0.000)
+0:0.000,
+Q5VX58.1/296-390:-0.000)
+0:0.000,
+Q9H361.2/296-390:-0.000)
+0:0.000,
+Q2VIN7.1/296-392:-0.000)
+0:0.043,
+Q2VIN9.1/296-390:0.043)
+0:0.052)
+0:0.065,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+B2GUY3.1/296-379:-0.000,
+D4AC14.1/296-379:-0.000)
+0:0.000,
+D4AC21.1/225-308:-0.000)
+0:0.000,
+Q6IQ30.1/296-379:-0.000)
+0:0.000,
+Q4VC03.1/296-379:-0.000)
+0:0.000,
+Q13310.1/296-379:-0.000)
+0:0.000,
+D3Z5M2.1/296-380:-0.000)
+0:0.000,
+A4IFC3.1/296-379:-0.000)
+0:0.000,
+B1ANR0.1/296-379:-0.000)
+0:0.000,
+D2I596.1/309-392:-0.000)
+0:0.000,
+Q99LF8.1/296-380:-0.000)
+0:0.000,
+Q15164.1/107-185:-0.000)
+0:0.012,
+(
+(
+(
+(
+Q91YZ8.1/296-380:-0.000,
+A3KFU8.1/296-380:-0.000)
+0:0.000,
+Q6PHQ9.1/296-380:-0.000)
+0:0.000,
+A3KFU5.1/296-380:-0.000)
+0:0.000,
+Q3UX16.1/225-309:-0.000)
+0:0.012)
+0:0.006,
+(
+(
+Q7T3G5.1/297-380:-0.000,
+Q8QGJ7.1/296-379:-0.000)
+0:0.000,
+Q4RNX8.1/296-379:-0.000)
+0:0.018)
+0:0.016,
+Q3UTA6.1/197-279:0.034)
+0:0.126)
+0:0.054,
+Q9D4E6.1/307-466:0.215)
+0:0.081,
+(
+(
+(
+B2RXY9.1/296-394:-0.000,
+A2A5N3.1/296-393:-0.000)
+0:0.123,
+D3ZAS7.1/296-399:0.123)
+0:0.138,
+(
+(
+D2H6M0.1/296-405:0.048,
+Q4VXU2.1/296-404:0.048)
+0:0.029,
+Q98SP8.2/296-391:0.077)
+0:0.184)
+0:0.035)
+0:0.269,
+(
+(
+(
+C5YBU9.1/329-416:0.012,
+B6U4M0.1/324-410:0.012)
+0:0.372,
+(
+(
+B9H7X8.1/304-412:-0.000,
+B9H7X9.1/314-422:-0.000)
+0:0.097,
+B9GT62.1/311-412:0.097)
+0:0.287)
+0:0.083,
+(
+A9TLC5.1/312-407:0.421,
+Q05196.2/328-430:0.421)
+0:0.046)
+0:0.098)
+0:0.058,
+(
+(
+A2YEJ5.1/343-442:-0.000,
+Q69X94.1/342-443:-0.000)
+0:0.000,
+B9FTY9.1/365-463:-0.000)
+0:0.623)
+0:0.285)
+0:0.092,
+(
+A5BE57.1/307-474:0.658,
+(
+B9RQB9.1/300-388:0.478,
+B9GH32.1/295-362:0.478)
+0:0.180)
+0:0.342)
+0:0.071,
+(
+(
+(
+B9RQB9.1/109-183:0.378,
+B9GH32.1/107-174:0.378)
+0:0.172,
+O04319.1/114-194:0.550)
+0:0.339,
+(
+(
+C5YBU9.1/128-201:0.316,
+B9H7X8.1/113-180:0.316)
+0:0.023,
+(
+(
+Q8RXR5.1/110-177:-0.000,
+P42731.1/126-193:-0.000)
+0:0.111,
+Q9M6E6.1/117-184:0.111)
+0:0.228)
+0:0.550)
+0:0.182)
+0:0.023,
+(
+(
+(
+(
+P31209.2/366-455:0.146,
+(
+B6K033.1/364-457:0.130,
+B6K6T8.1/356-444:0.130)
+0:0.016)
+0:0.167,
+Q6CDH3.1/332-428:0.313)
+0:0.075,
+(
+(
+D3AVQ3.1/284-366:0.319,
+Q54BM2.1/286-375:0.319)
+0:0.034,
+(
+Q5KBW2.1/367-420:0.171,
+Q4P8R9.1/368-413:0.171)
+0:0.182)
+0:0.035)
+0:0.059,
+A8NF86.1/337-425:0.446)
+0:0.648)
+0:0.059,
+O04319.1/304-419:1.154)
+0:0.239,
+(
+(
+Q7Q9F7.4/282-427:0.980,
+(
+A3CUY7.1/2-69:0.328,
+Q2FSR7.1/6-69:0.328)
+0:0.652)
+0:0.189,
+(
+D0N277.1/201-240:0.917,
+C4QZM5.1/235-294:0.917)
+0:0.252)
+0:0.224)
+0:0.195,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+C5WVW4.1/223-289:0.015,
+(
+C4IYK3.1/223-290:-0.000,
+B6UA93.1/223-290:-0.000)
+0:0.015)
+0:0.083,
+(
+(
+B8APB9.1/226-292:-0.000,
+Q10R21.1/226-292:-0.000)
+0:0.000,
+Q0DUQ0.1/248-314:-0.000)
+0:0.098)
+0:0.237,
+B9RIB9.1/231-294:0.335)
+0:0.070,
+(
+(
+C0PPV9.1/259-392:0.008,
+C0PT30.1/259-393:0.008)
+0:0.346,
+(
+(
+(
+B8LRZ2.1/277-363:-0.000,
+A9NX92.1/275-362:-0.000)
+0:0.256,
+A9NWA0.1/248-328:0.256)
+0:0.021,
+(
+A9TFH5.1/223-287:-0.000,
+A9TZW4.1/245-319:-0.000)
+0:0.278)
+0:0.076)
+0:0.052)
+0:0.073,
+(
+(
+(
+(
+B9GNX9.1/266-364:0.126,
+B9MVK8.1/264-361:0.126)
+0:0.039,
+A5BPW5.1/140-241:0.165)
+0:0.059,
+B9R7H3.1/281-377:0.224)
+0:0.169,
+Q9FX88.1/338-415:0.393)
+0:0.085)
+0:0.041,
+(
+(
+(
+(
+(
+B9N4W3.1/235-341:0.029,
+B9HRX8.1/250-356:0.029)
+0:0.082,
+B9RY32.1/285-382:0.111)
+0:0.137,
+(
+(
+Q8LFI9.1/244-343:-0.000,
+Q0WW84.1/287-386:-0.000)
+0:0.000,
+Q9LJL7.1/287-386:-0.000)
+0:0.249)
+0:0.074,
+A5BF74.1/281-378:0.322)
+0:0.060,
+Q2V9A1.1/201-306:0.383)
+0:0.137)
+0:0.092,
+(
+Q6R969.1/253-422:0.039,
+Q2V9C2.1/258-417:0.039)
+0:0.573)
+0:0.155,
+(
+(
+(
+(
+Q2PEV8.1/238-322:0.343,
+(
+(
+Q9LEB4.1/261-347:0.268,
+A5C5B3.1/256-335:0.268)
+0:0.005,
+B9I0E1.1/253-334:0.273)
+0:0.070)
+0:0.069,
+(
+(
+C5WUD2.1/243-339:0.078,
+C0P488.1/242-336:0.078)
+0:0.044,
+(
+(
+(
+(
+Q10HZ8.1/240-333:-0.000,
+Q9AY92.1/240-333:-0.000)
+0:0.000,
+Q10HZ7.1/240-333:-0.000)
+0:0.000,
+B8AKU6.1/240-333:-0.000)
+0:0.000,
+Q0DQQ8.1/284-377:-0.000)
+0:0.121)
+0:0.290)
+0:0.143,
+(
+Q9FPJ8.1/236-325:-0.000,
+Q9FFU0.1/236-325:-0.000)
+0:0.555)
+0:0.061,
+(
+Q8LBV8.1/233-325:-0.000,
+Q9SAB3.1/234-326:-0.000)
+0:0.616)
+0:0.151)
+0:0.501,
+(
+(
+(
+A9S4M3.1/42-65:0.043,
+A9T3C5.1/56-79:0.043)
+0:0.515,
+(
+Q6DGV1.1/174-212:0.053,
+B5LEQ5.1/179-323:0.053)
+0:0.505)
+0:0.439,
+A3GHN7.2/350-469:0.997)
+0:0.270)
+0:0.320)
+0:0.084,
+(
+(
+C4Q4K6.1/224-436:1.214,
+C4XVP0.1/46-94:1.214)
+0:0.390,
+B3S2W8.1/76-163:1.605)
+0:0.066)
+0:0.256,
+(
+(
+B3S2W8.1/165-267:1.479,
+(
+(
+B4NBP3.1/171-277:0.035,
+B3M300.1/220-284:0.035)
+0:0.126,
+(
+B4MC02.1/171-283:0.076,
+B4JIH9.1/171-286:0.076)
+0:0.086)
+0:1.317)
+0:0.161,
+(
+Q54C48.1/271-412:1.175,
+C5DIP1.1/2-75:1.175)
+0:0.465)
+0:0.287)
+0:0.124,
+D3BFK6.1/320-440:2.051)
+0:0.175)
+0:0.317,
+B3RQ20.1/1143-1394:2.543)
+0:0.364)
+0:0.040,
+(
+A8PU70.1/566-908:2.802,
+(
+(
+(
+P20105.2/153-385:0.122,
+B4PJL3.1/173-393:0.122)
+0:0.155,
+B3NHT3.1/152-330:0.277)
+0:0.121,
+B3M4K4.1/89-378:0.398)
+0:2.404)
+0:0.144)
+0:0.029,
+Q4S4D3.1/1091-1191:2.976)
+0:0.014,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+A8MYY3.2/16-949:-0.000,
+B5ME23.2/16-165:-0.000)
+0:0.000,
+C9J5L7.1/16-949:-0.000)
+0:0.018,
+B4DKJ5.1/1-276:0.018)
+0:0.030,
+Q8BX83.2/38-410:0.048)
+0:0.263,
+B1H1W1.1/13-388:0.311)
+0:0.112,
+Q4T1P6.1/6-46:0.424)
+0:0.149,
+(
+Q4S4D3.1/1-379:0.489,
+Q4T5V2.1/1-136:0.489)
+0:0.084)
+0:0.558,
+C3ZJT1.1/159-315:1.130)
+0:0.112,
+(
+(
+C9JAR8.1/20-121:-0.000,
+Q8NDV7.2/20-121:-0.000)
+0:0.119,
+D4A372.1/1-97:0.119)
+0:1.123)
+0:1.631,
+(
+Q4T574.1/1-220:1.252,
+Q4T0A9.1/1-255:1.252)
+0:1.622)
+0:0.116)
+;
diff --git a/test/scripts/automated/belvu/test49 b/test/scripts/automated/belvu/test49
new file mode 100755
index 0000000..009f813
--- /dev/null
+++ b/test/scripts/automated/belvu/test49
@@ -0,0 +1,25 @@
+#!/bin/ksh
+#
+# Description:
+#   Test creating a UPGMA tree (storm & sonnhammer distance correction)
+
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences to the saved results
+diffs=`belvu -T us -o tree  $data_dir/ALIGN.selex >&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
+
diff --git a/test/scripts/automated/belvu/test49_results b/test/scripts/automated/belvu/test49_results
new file mode 100644
index 0000000..8ec4612
--- /dev/null
+++ b/test/scripts/automated/belvu/test49_results
@@ -0,0 +1,1108 @@
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+Q9UPQ9.4/1-1833:-0.000,
+B0QY77.1/1-879:-0.000)
+0:0.000,
+B4E231.1/1-251:-0.000)
+0:0.000,
+Q9UPQ9.4/1-1833:-0.000)
+0:0.010,
+B5ME23.2/165-368:0.010)
+0:0.039,
+(
+(
+Q3TRH0.1/46-194:-0.000,
+Q3TRK2.1/1-88:-0.000)
+0:0.017,
+(
+Q8BWL0.1/2-169:-0.000,
+Q1LZM4.1/2-292:-0.000)
+0:0.017)
+0:0.032)
+0:0.054,
+(
+(
+(
+A8MYY3.2/946-1098:-0.000,
+A0CJW3.1/434-742:-0.000)
+0:0.003,
+C9J5L7.1/946-1098:0.003)
+0:0.030,
+D2GZL8.1/900-1051:0.033)
+0:0.070)
+0:0.743,
+Q4S4D3.1/395-556:0.846)
+0:0.202,
+(
+Q3UHK8.1/20-1269:-0.000,
+Q3UUG8.1/1-727:-0.000)
+0:1.048)
+0:0.436,
+(
+(
+Q4T574.1/639-850:0.515,
+Q4T0A8.1/27-228:0.515)
+0:0.620,
+C3ZJT1.1/371-689:1.135)
+0:0.350)
+0:0.875,
+(
+A0NFA3.2/8-516:1.190,
+B7PWH5.1/349-695:1.190)
+0:1.170)
+0:2.304,
+(
+(
+(
+(
+(
+(
+(
+(
+B1ATC3.1/2-1028:-0.000,
+B7ZC94.1/2-868:-0.000)
+0:0.013,
+Q3UHC0.2/4-818:0.013)
+0:0.035,
+D3ZRA6.1/2-1000:0.048)
+0:0.086,
+(
+D2H997.1/2-866:0.100,
+Q9HCJ0.3/4-822:0.100)
+0:0.034)
+0:0.830,
+C3ZJT1.1/328-369:0.965)
+0:0.635,
+(
+Q4T574.1/239-596:1.367,
+Q4T0A9.1/370-579:1.367)
+0:0.232)
+0:0.821,
+(
+(
+(
+(
+B3N1G0.1/6-1260:0.243,
+B4H886.1/6-148:0.243)
+0:0.830,
+(
+Q172C7.1/363-538:0.328,
+B0WXH0.1/311-1189:0.328)
+0:0.744)
+0:0.165,
+(
+Q172C8.1/192-646:0.951,
+A7UUT0.1/13-626:0.951)
+0:0.287)
+0:0.611,
+(
+(
+(
+(
+(
+B3P9S0.1/6-1293:0.089,
+B4PW21.1/6-1287:0.089)
+0:0.062,
+(
+(
+B4IIY1.1/6-1290:0.023,
+B4R2G2.1/6-1156:0.023)
+0:0.046,
+(
+Q8SY33.1/6-1289:-0.000,
+Q8MSF0.1/1-120:-0.000)
+0:0.069)
+0:0.082)
+0:0.223,
+(
+Q29CP6.2/6-1291:0.123,
+B4H887.1/32-1121:0.123)
+0:0.251)
+0:0.137,
+B4NHM7.1/6-1344:0.511)
+0:0.203,
+(
+(
+(
+(
+(
+B4MF11.1/6-1287:0.031,
+D0Z7B2.1/6-1290:0.031)
+0:0.110,
+(
+C1K8B6.1/4-244:0.004,
+C1K890.1/4-244:0.004)
+0:0.137)
+0:0.110,
+C1K8V5.1/4-177:0.251)
+0:0.110,
+B4L7C4.1/6-1178:0.361)
+0:0.150,
+B4JZV3.1/6-1310:0.512)
+0:0.202)
+0:1.134)
+0:0.573)
+0:1.507,
+(
+(
+(
+(
+(
+(
+C9JA83.1/3-471:-0.000,
+C9JAR8.1/119-1283:-0.000)
+0:0.000,
+Q8NDV7.2/119-1962:-0.000)
+0:0.023,
+B4DST4.1/1-168:0.023)
+0:0.235,
+(
+(
+Q05CE3.1/20-1014:0.004,
+Q8BNF0.2/9-877:0.004)
+0:0.006,
+Q6ZPQ4.1/1-243:0.011)
+0:0.248)
+0:0.879,
+(
+(
+D2GZL8.1/5-902:0.038,
+(
+Q3TRH0.1/1-49:-0.000,
+Q8BKI2.2/38-1167:-0.000)
+0:0.038)
+0:0.612,
+Q4TA88.1/5-275:0.650)
+0:0.487)
+0:0.446,
+B7PWH5.1/252-389:1.584)
+0:2.344)
+0:0.736)
+0:2.348,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+A8MYY3.2/1098-1737:-0.000,
+B0QY77.1/879-1390:-0.000)
+0:0.000,
+B4E231.1/251-762:-0.000)
+0:0.000,
+B5ME23.2/368-1007:-0.000)
+0:0.000,
+C9J5L7.1/1098-1737:-0.000)
+0:0.000,
+B7ZB91.1/13-478:-0.000)
+0:0.014,
+D2GZL8.1/1051-1690:0.014)
+0:0.019,
+(
+Q1LZM4.1/292-736:0.007,
+Q8BXV9.1/2-142:0.007)
+0:0.025)
+0:0.081,
+Q8BZH2.1/5-63:0.113)
+0:1.067,
+(
+Q4S4D3.1/651-825:0.498,
+Q4TA88.1/319-457:0.498)
+0:0.683)
+0:0.824,
+(
+(
+(
+Q4T0A8.1/329-402:1.488,
+A5E351.1/72-416:1.488)
+0:0.154,
+(
+(
+(
+C1GVG2.1/279-439:0.182,
+(
+C0SAP5.1/281-410:0.111,
+C1GDP1.1/281-415:0.111)
+0:0.071)
+0:0.831,
+Q86KE5.1/77-311:1.013)
+0:0.214,
+(
+B3NV15.1/1200-1273:0.635,
+B4PZT3.1/1188-1272:0.635)
+0:0.592)
+0:0.415)
+0:0.253,
+(
+(
+(
+(
+(
+P20105.2/537-654:0.210,
+B4PJL3.1/533-654:0.210)
+0:0.200,
+B3M4K4.1/533-691:0.410)
+0:0.980,
+(
+(
+A3F295.1/6-117:0.633,
+A3F290.1/9-110:0.633)
+0:0.287,
+Q54LR6.1/53-262:0.920)
+0:0.470)
+0:0.159,
+(
+(
+(
+(
+C1GEW9.1/11-129:1.198,
+(
+(
+B4NNJ8.1/320-445:0.721,
+(
+B4J985.1/306-430:0.368,
+B4ME65.1/311-417:0.368)
+0:0.352)
+0:0.417,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+B4JL62.1/290-395:0.354,
+D3BH34.1/115-236:0.354)
+0:0.056,
+(
+(
+B4K3C6.1/67-191:0.196,
+Q5TST0.3/683-841:0.196)
+0:0.041,
+B4NP54.1/2-69:0.237)
+0:0.173)
+0:0.083,
+(
+(
+(
+D1ZFW1.1/794-871:0.190,
+(
+Q4P3Y1.1/128-184:0.146,
+Q4P2T9.1/335-396:0.146)
+0:0.044)
+0:0.135,
+A0BQD1.1/165-319:0.325)
+0:0.067,
+(
+A5E1Y8.1/358-537:0.317,
+(
+B4KT28.1/222-266:0.240,
+A8NN12.1/68-136:0.240)
+0:0.077)
+0:0.075)
+0:0.101)
+0:0.033,
+(
+(
+B4MHJ9.1/106-306:0.301,
+Q25AW7.1/146-228:0.301)
+0:0.196,
+(
+C0SUE2.1/77-175:0.192,
+B4JY35.1/15-92:0.192)
+0:0.304)
+0:0.030)
+0:0.137,
+D0H0K7.1/432-591:0.663)
+0:0.139,
+(
+(
+Q9VYA6.1/174-225:0.104,
+Q86NT0.1/173-270:0.104)
+0:0.479,
+D3B7T2.1/209-345:0.583)
+0:0.219)
+0:0.022,
+(
+(
+B4PH83.1/181-247:0.431,
+Q54FL0.1/951-1244:0.431)
+0:0.286,
+A1C5H3.1/188-267:0.717)
+0:0.107)
+0:0.163,
+O42323.1/299-489:0.987)
+0:0.093,
+(
+(
+Q54X31.1/100-217:0.724,
+C5GQY8.1/409-612:0.724)
+0:0.310,
+(
+B4NE44.1/470-686:0.547,
+B4L803.1/240-323:0.547)
+0:0.487)
+0:0.046)
+0:0.058)
+0:0.060)
+0:0.123,
+(
+(
+(
+(
+A3F293.1/10-109:0.136,
+A3F299.1/12-111:0.136)
+0:0.642,
+B4KN27.1/225-337:0.778)
+0:0.169,
+Q4PF35.1/18-283:0.948)
+0:0.231,
+B4JPX4.1/284-409:1.178)
+0:0.142)
+0:0.040,
+(
+B0X8C2.1/150-263:0.957,
+Q6C9A9.1/660-764:0.957)
+0:0.404)
+0:0.121,
+(
+(
+B4N2I1.1/44-159:0.174,
+B3MYX8.1/14-153:0.174)
+0:1.206,
+(
+A5E3S9.1/278-450:0.960,
+Q5TSQ4.3/457-676:0.960)
+0:0.420)
+0:0.101)
+0:0.068)
+0:0.100,
+A5E7X5.1/33-235:1.649)
+0:0.245)
+0:0.110)
+0:0.309,
+(
+(
+Q2GV87.1/66-278:1.749,
+Q55F37.1/112-343:1.749)
+0:0.043,
+D3B9K1.1/622-823:1.792)
+0:0.521)
+0:0.684,
+(
+(
+A0NFA3.2/687-1175:-0.000,
+B4KQM5.1/242-419:-0.000)
+0:2.210,
+B3MKU5.1/256-639:2.210)
+0:0.788)
+0:0.206,
+(
+(
+(
+(
+(
+(
+(
+B1ATC3.1/1015-1647:-0.000,
+B7ZC94.1/855-1477:-0.000)
+0:0.000,
+Q3UHC0.2/805-1437:-0.000)
+0:0.085,
+(
+D2H997.1/853-1477:0.075,
+Q9HCJ0.3/810-1437:0.075)
+0:0.010)
+0:0.379,
+(
+(
+Q4T574.1/894-1324:0.258,
+Q4T0A8.1/405-529:0.258)
+0:0.079,
+B0R1E2.1/1-289:0.336)
+0:0.128)
+0:0.836,
+(
+(
+(
+(
+(
+C9JA83.1/468-1101:-0.000,
+C9JAR8.1/1280-1913:-0.000)
+0:0.008,
+D2I222.1/1-1905:0.008)
+0:0.008,
+B3KSX2.1/4-277:0.016)
+0:0.341,
+(
+D4A372.1/95-1931:0.011,
+(
+(
+(
+(
+Q3UHK8.1/1266-1896:-0.000,
+Q99JR3.2/24-648:-0.000)
+0:0.000,
+Q8BWM2.1/1-337:-0.000)
+0:0.001,
+Q8BXM6.1/4-627:0.001)
+0:0.002,
+Q3UQ45.1/7-500:0.003)
+0:0.008)
+0:0.346)
+0:0.653,
+Q4S9I4.1/33-1574:1.010)
+0:0.291)
+0:0.823,
+(
+(
+(
+A7UUT0.1/838-1208:0.452,
+(
+B0WXG8.1/386-1198:0.048,
+B8RJB3.1/9-266:0.048)
+0:0.404)
+0:0.515,
+B7PWH5.1/720-1088:0.967)
+0:0.749,
+A7SDW4.1/430-1260:1.716)
+0:0.408)
+0:0.479,
+A8PU70.1/566-908:2.603)
+0:0.601)
+0:1.359,
+(
+(
+(
+Q4S4D3.1/557-654:0.786,
+Q7SGG0.1/13-167:0.786)
+0:1.448,
+(
+(
+(
+P20105.2/153-385:0.120,
+B4PJL3.1/173-393:0.120)
+0:0.153,
+B3NHT3.1/152-330:0.274)
+0:0.117,
+B3M4K4.1/89-378:0.391)
+0:1.843)
+0:1.331,
+(
+(
+Q7Q3B9.4/7-766:0.635,
+A7UUT0.1/686-771:0.635)
+0:1.092,
+B3M562.1/702-895:1.727)
+0:1.838)
+0:0.998)
+0:2.449)
+0:2.127,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+B1ATC3.1/1646-1899:-0.000,
+B7ZC94.1/1478-1731:-0.000)
+0:0.000,
+Q3UHC0.2/1436-1689:-0.000)
+0:0.071,
+(
+D2H997.1/1476-1729:0.065,
+Q9HCJ0.3/1434-1689:0.065)
+0:0.007)
+0:0.307,
+(
+(
+Q4T574.1/1322-1578:0.212,
+Q4T0A8.1/526-801:0.212)
+0:0.122,
+B0R1E2.1/290-554:0.334)
+0:0.044)
+0:0.224,
+Q4S9I4.1/1569-1835:0.602)
+0:0.134,
+(
+(
+(
+(
+(
+(
+(
+Q3TRH0.1/194-838:-0.000,
+Q8BKI2.2/1167-1810:-0.000)
+0:0.000,
+Q8BWL0.1/169-812:-0.000)
+0:0.000,
+Q3TRK2.1/88-731:-0.000)
+0:0.000,
+Q66JU9.1/2-312:-0.000)
+0:0.000,
+Q8VD67.1/1-249:-0.000)
+0:0.004,
+(
+(
+Q6P7B1.1/2-432:-0.000,
+Q148P0.1/1-249:-0.000)
+0:0.000,
+Q9JHZ1.1/1-249:-0.000)
+0:0.004)
+0:0.560,
+(
+Q4S4D3.1/823-1099:0.355,
+Q4TA89.1/1-316:0.355)
+0:0.208)
+0:0.173)
+0:0.231,
+C3ZJT1.1/730-1350:0.968)
+0:0.383,
+(
+C0PFW8.1/269-336:-0.000,
+C0HHH3.1/270-337:-0.000)
+0:1.351)
+0:0.057,
+(
+(
+(
+(
+B0WTJ5.1/228-1404:0.328,
+Q172C6.1/6-1080:0.328)
+0:0.187,
+Q7Q3B9.4/781-1217:0.515)
+0:0.153,
+(
+Q172C8.1/672-1244:0.222,
+B0WXG8.1/1199-1287:0.222)
+0:0.446)
+0:0.159,
+(
+Q172C7.1/573-1487:0.372,
+B0WXH0.1/1191-1443:0.372)
+0:0.455)
+0:0.580)
+0:0.189,
+Q2I2V8.1/539-606:1.596)
+0:0.433,
+(
+(
+A9USE7.1/720-774:1.041,
+D4APH2.1/480-541:1.041)
+0:0.721,
+(
+A9USE7.1/997-1101:0.749,
+A7AT74.1/621-697:0.749)
+0:1.013)
+0:0.267)
+0:0.070,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+A5BE57.1/246-300:0.345,
+B9RQB9.1/236-287:0.345)
+0:0.031,
+(
+B2RXY9.1/193-253:-0.000,
+A2A5N3.1/193-253:-0.000)
+0:0.376)
+0:0.278,
+(
+(
+B2GUY3.1/194-262:-0.000,
+D4AC14.1/194-262:-0.000)
+0:0.000,
+D4AC21.1/123-191:-0.000)
+0:0.655)
+0:0.176,
+(
+(
+C5WPD4.1/242-318:0.233,
+(
+Q10N87.1/216-320:0.009,
+B8AL31.1/216-320:0.009)
+0:0.224)
+0:0.297,
+A5B3Z9.1/212-306:0.530)
+0:0.301)
+0:0.066,
+(
+(
+(
+(
+(
+(
+B5DF80.1/306-473:0.094,
+(
+(
+(
+(
+(
+Q2VIP3.1/296-392:-0.000,
+Q3ZCS4.1/296-393:-0.000)
+0:0.000,
+Q5VX58.1/296-390:-0.000)
+0:0.000,
+Q9H361.2/296-390:-0.000)
+0:0.000,
+Q2VIN7.1/296-392:-0.000)
+0:0.042,
+Q2VIN9.1/296-390:0.042)
+0:0.052)
+0:0.065,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+B2GUY3.1/296-379:-0.000,
+D4AC14.1/296-379:-0.000)
+0:0.000,
+D4AC21.1/225-308:-0.000)
+0:0.000,
+Q6IQ30.1/296-379:-0.000)
+0:0.000,
+Q4VC03.1/296-379:-0.000)
+0:0.000,
+Q13310.1/296-379:-0.000)
+0:0.000,
+D3Z5M2.1/296-380:-0.000)
+0:0.000,
+A4IFC3.1/296-379:-0.000)
+0:0.000,
+B1ANR0.1/296-379:-0.000)
+0:0.000,
+D2I596.1/309-392:-0.000)
+0:0.000,
+Q99LF8.1/296-380:-0.000)
+0:0.000,
+Q15164.1/107-185:-0.000)
+0:0.012,
+(
+(
+(
+(
+Q91YZ8.1/296-380:-0.000,
+A3KFU8.1/296-380:-0.000)
+0:0.000,
+Q6PHQ9.1/296-380:-0.000)
+0:0.000,
+A3KFU5.1/296-380:-0.000)
+0:0.000,
+Q3UX16.1/225-309:-0.000)
+0:0.012)
+0:0.006,
+(
+(
+Q7T3G5.1/297-380:-0.000,
+Q8QGJ7.1/296-379:-0.000)
+0:0.000,
+Q4RNX8.1/296-379:-0.000)
+0:0.018)
+0:0.015,
+Q3UTA6.1/197-279:0.033)
+0:0.126)
+0:0.053,
+Q9D4E6.1/307-466:0.212)
+0:0.080,
+(
+(
+(
+B2RXY9.1/296-394:-0.000,
+A2A5N3.1/296-393:-0.000)
+0:0.121,
+D3ZAS7.1/296-399:0.121)
+0:0.137,
+(
+(
+D2H6M0.1/296-405:0.047,
+Q4VXU2.1/296-404:0.047)
+0:0.029,
+Q98SP8.2/296-391:0.076)
+0:0.182)
+0:0.034)
+0:0.262,
+(
+(
+(
+C5YBU9.1/329-416:0.011,
+B6U4M0.1/324-410:0.011)
+0:0.367,
+(
+(
+B9H7X8.1/304-412:-0.000,
+B9H7X9.1/314-422:-0.000)
+0:0.096,
+B9GT62.1/311-412:0.096)
+0:0.282)
+0:0.080,
+(
+A9TLC5.1/312-407:0.414,
+Q05196.2/328-430:0.414)
+0:0.044)
+0:0.096)
+0:0.057,
+(
+(
+A2YEJ5.1/343-442:-0.000,
+Q69X94.1/342-443:-0.000)
+0:0.000,
+B9FTY9.1/365-463:-0.000)
+0:0.611)
+0:0.286)
+0:0.095,
+(
+A5BE57.1/307-474:0.646,
+(
+B9RQB9.1/300-388:0.469,
+B9GH32.1/295-362:0.469)
+0:0.177)
+0:0.347)
+0:0.073,
+(
+(
+(
+B9RQB9.1/109-183:0.372,
+B9GH32.1/107-174:0.372)
+0:0.167,
+O04319.1/114-194:0.539)
+0:0.339,
+(
+(
+C5YBU9.1/128-201:0.312,
+B9H7X8.1/113-180:0.312)
+0:0.022,
+(
+(
+Q8RXR5.1/110-177:-0.000,
+P42731.1/126-193:-0.000)
+0:0.110,
+Q9M6E6.1/117-184:0.110)
+0:0.224)
+0:0.544)
+0:0.188)
+0:0.024,
+(
+(
+(
+(
+P31209.2/366-455:0.144,
+(
+B6K033.1/364-457:0.129,
+B6K6T8.1/356-444:0.129)
+0:0.016)
+0:0.164,
+Q6CDH3.1/332-428:0.309)
+0:0.072,
+(
+(
+D3AVQ3.1/284-366:0.315,
+Q54BM2.1/286-375:0.315)
+0:0.033,
+(
+Q5KBW2.1/367-420:0.169,
+Q4P8R9.1/368-413:0.169)
+0:0.178)
+0:0.034)
+0:0.057,
+A8NF86.1/337-425:0.438)
+0:0.651)
+0:0.061,
+O04319.1/304-419:1.150)
+0:0.237,
+(
+(
+Q7Q9F7.4/282-427:0.971,
+(
+A3CUY7.1/2-69:0.324,
+Q2FSR7.1/6-69:0.324)
+0:0.647)
+0:0.195,
+(
+D0N277.1/201-240:0.906,
+C4QZM5.1/235-294:0.906)
+0:0.260)
+0:0.221)
+0:0.186,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+C5WVW4.1/223-289:0.015,
+(
+C4IYK3.1/223-290:-0.000,
+B6UA93.1/223-290:-0.000)
+0:0.015)
+0:0.082,
+(
+(
+B8APB9.1/226-292:-0.000,
+Q10R21.1/226-292:-0.000)
+0:0.000,
+Q0DUQ0.1/248-314:-0.000)
+0:0.097)
+0:0.234,
+B9RIB9.1/231-294:0.331)
+0:0.068,
+(
+(
+C0PPV9.1/259-392:0.007,
+C0PT30.1/259-393:0.007)
+0:0.341,
+(
+(
+(
+B8LRZ2.1/277-363:-0.000,
+A9NX92.1/275-362:-0.000)
+0:0.254,
+A9NWA0.1/248-328:0.254)
+0:0.021,
+(
+A9TFH5.1/223-287:-0.000,
+A9TZW4.1/245-319:-0.000)
+0:0.275)
+0:0.074)
+0:0.050)
+0:0.071,
+(
+(
+(
+(
+B9GNX9.1/266-364:0.125,
+B9MVK8.1/264-361:0.125)
+0:0.039,
+A5BPW5.1/140-241:0.163)
+0:0.058,
+B9R7H3.1/281-377:0.222)
+0:0.165,
+Q9FX88.1/338-415:0.387)
+0:0.083)
+0:0.040,
+(
+(
+(
+(
+(
+B9N4W3.1/235-341:0.028,
+B9HRX8.1/250-356:0.028)
+0:0.082,
+B9RY32.1/285-382:0.110)
+0:0.136,
+(
+(
+Q8LFI9.1/244-343:-0.000,
+Q0WW84.1/287-386:-0.000)
+0:0.000,
+Q9LJL7.1/287-386:-0.000)
+0:0.246)
+0:0.072,
+A5BF74.1/281-378:0.318)
+0:0.059,
+Q2V9A1.1/201-306:0.377)
+0:0.133)
+0:0.090,
+(
+Q6R969.1/253-422:0.037,
+Q2V9C2.1/258-417:0.037)
+0:0.563)
+0:0.154,
+(
+(
+(
+(
+Q2PEV8.1/238-322:0.338,
+(
+(
+Q9LEB4.1/261-347:0.265,
+A5C5B3.1/256-335:0.265)
+0:0.005,
+B9I0E1.1/253-334:0.270)
+0:0.068)
+0:0.066,
+(
+(
+C5WUD2.1/243-339:0.076,
+C0P488.1/242-336:0.076)
+0:0.044,
+(
+(
+(
+(
+Q10HZ8.1/240-333:-0.000,
+Q9AY92.1/240-333:-0.000)
+0:0.000,
+Q10HZ7.1/240-333:-0.000)
+0:0.000,
+B8AKU6.1/240-333:-0.000)
+0:0.000,
+Q0DQQ8.1/284-377:-0.000)
+0:0.120)
+0:0.285)
+0:0.139,
+(
+Q9FPJ8.1/236-325:-0.000,
+Q9FFU0.1/236-325:-0.000)
+0:0.544)
+0:0.060,
+(
+Q8LBV8.1/233-325:-0.000,
+Q9SAB3.1/234-326:-0.000)
+0:0.604)
+0:0.150)
+0:0.501,
+(
+(
+(
+A9S4M3.1/42-65:0.042,
+A9T3C5.1/56-79:0.042)
+0:0.505,
+(
+Q6DGV1.1/174-212:0.052,
+B5LEQ5.1/179-323:0.052)
+0:0.495)
+0:0.443,
+A3GHN7.2/350-469:0.990)
+0:0.265)
+0:0.318)
+0:0.090,
+(
+(
+C4Q4K6.1/224-436:1.213,
+C4XVP0.1/46-94:1.213)
+0:0.396,
+B3S2W8.1/76-163:1.608)
+0:0.055)
+0:0.220,
+(
+(
+B3S2W8.1/165-267:1.482,
+(
+(
+B4NBP3.1/171-277:0.034,
+B3M300.1/220-284:0.034)
+0:0.125,
+(
+B4MC02.1/171-283:0.075,
+B4JIH9.1/171-286:0.075)
+0:0.085)
+0:1.322)
+0:0.157,
+(
+Q54C48.1/271-412:1.172,
+C5DIP1.1/2-75:1.172)
+0:0.467)
+0:0.245)
+0:0.125,
+D3BFK6.1/320-440:2.009)
+0:0.090)
+0:0.304,
+B3RQ20.1/1143-1394:2.403)
+0:0.286,
+(
+A7SDW4.1/1319-1671:-0.000,
+A7T6Q0.1/2-144:-0.000)
+0:2.689)
+0:1.763,
+Q4S4D3.1/1091-1191:4.451)
+0:4.688)
+0:0.605,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+A8MYY3.2/16-949:-0.000,
+B5ME23.2/16-165:-0.000)
+0:0.000,
+C9J5L7.1/16-949:-0.000)
+0:0.018,
+B4DKJ5.1/1-276:0.018)
+0:0.029,
+Q8BX83.2/38-410:0.047)
+0:0.260,
+B1H1W1.1/13-388:0.307)
+0:0.109,
+Q4T1P6.1/6-46:0.416)
+0:0.147,
+(
+Q4S4D3.1/1-379:0.479,
+Q4T5V2.1/1-136:0.479)
+0:0.084)
+0:0.564,
+C3ZJT1.1/159-315:1.127)
+0:0.109,
+(
+(
+C9JAR8.1/20-121:-0.000,
+Q8NDV7.2/20-121:-0.000)
+0:0.118,
+D4A372.1/1-97:0.118)
+0:1.118)
+0:7.777,
+(
+Q4T574.1/1-220:1.251,
+Q4T0A9.1/1-255:1.251)
+0:7.762)
+0:0.731)
+;
diff --git a/test/scripts/automated/belvu/test4_results b/test/scripts/automated/belvu/test4_results
new file mode 100644
index 0000000..87f967e
--- /dev/null
+++ b/test/scripts/automated/belvu/test4_results
@@ -0,0 +1,147 @@
+>YQ53_CAEEL/650-977
+DILVGIAR.EKKPD.VHDILKYFEESIGLQTIQLCQQTVDKM.....MG....GQGGRQTIDNVMRKFNLKCGGTNFFVE
+IPNAVRGKAVCSNNETLRKKLLEHVQFIGFEISHGASRTLFDRSRSQMDGEPSVVGVSYSLT...NSTQLGGFTYLQTQK
+EYKLQKLDE............FFPKCVRSYKEHSKT.LPTRIVIYRVGAGEGNFNRVKE.EVEEMRRTFD.......KIQ
+.PGYR..PHLVVIIAQRASHARVFPSCISG.....................NRATDQNIPSGTCV...ENVLTSYGYDEF
+ILSSQTPLIGTVRPCKYTILVNDA...KWSKNEL.MHL......TYFRAFGHQVSY....QPPSV........PDVLYAA
+ENLAKRGRNNYK
+>Q21691_CAEEL/673-1001
+TIVFGIIA.EKRPD.MHDILKYFEEKLGQQTIQISSETADKF.....MR....DHGGKQTIDNVIRKLNPKCGGTNFLID
+VPESVGHRVVCNNSAEMRAKLYAKTQFIGFEMSHTGARTRFDIQKVMFDGDPTVVGVAYSL..KHSAQLGGFSYFQESRL
+HKLTN.LQE............KMQICLNAYEQSSSY.LPETVVVYRVGSGEGDYPQIVN.EVNEMKLAAR.......KKK
+.HGYN..PKFLVICTQRNSHIRVFPEHINE....................RGKSMEQNVKSGTCV...DVPGASHGYEEF
+ILCCQTPLIGTVKPTKYTIIVNDC...RWSKNEI.MNV......TYHLAFAHQVSY....APPAI........PNVSYAA
+QNLAKRGHNNYK
+>O48771_ARATH/542-860
+FILCILPERKTSDI.YGPWKKICLTEEGIHTQCICPIKI.................SDQYLTNVLLKINSKLGGINS.LL
+GIEYSYNIPLINKIPTL.........ILGMDVSHGPPGR.........ADVPSVAAVVGSKCWPLISRYRAAVRTQSPRL
+EMIDSLFQP..IENTEKGDNGIMNELFVEFYRTSRARKPKQIIIFRDGVSESQFEQVLKIEVDQIIKAYQ.......RLG
+.ESDV..PKFTVIVAQKNHHTKLFQAKGPE...........................NVPAGTVV...DTKIVHPTNYDF
+YMCAHAGKIGTSRPAHYHVLLDEI...GFSPDDL.QNL......IHSLSYKLLNSI....FNVSSLLCVFVLSVAPVRYA
+HLAAAQVAQFTK
+>Q9ZVD5_ARATH/577-885
+FILCVLPDKKNSDL.YGPWKKKNLTEFGIVTQCMAPTRQPND................QYLTNLLLKINAKLGGLNS.ML
+SVERTPAFTVISKVPTI.........ILGMDVSHGSPGQ.........SDVPSIAAVVSSREWPLISKYRASVRTQPSKA
+EMIESLVKK.....NGTEDDGIIKELLVDFYTSSNKRKPEHIIIFRDGVSESQFNQVLNIELDQIIEACK.......LLD
+.ANWN..PKFLLLVAQKNHHTKFFQPTSPE...........................NVPPGTII...DNKICHPKNNDF
+YLCAHAGMIGTTRPTHYHVLYDEI...GFSADEL.QEL......VHSLSYVYQRST....SAISV........VAPICYA
+HLAAAQLGTFMK
+>TAG76_CAEEL/660-966
+CIIVVLQS.KNSDI.YMTVKEQSDIVHGIMSQCVLMKNVSRP..............TPATCANIVLKLNMKMGGIN..SR
+IVADKITNKYLVDQPTM.........VVGIDVTHPTQAE.......MRMNMPSVAAIVANVD.LLPQSYGANVKVQKKCR
+ESVVY.LLD............AIRERIITFYRHTKQ.KPARIIVYRDGVSEGQFSEVLREEIQSIRTACL.......AIA
+.EDFR..PPITYIVVQKRHHARIFCKYQND.....................MVGKAKNVPPGTTV...DTGIVSPEGFDF
+YLCSHYGVQGTSRPARYHVLLDEC...KFTADEI.QSI......TYGMCHTYGRCT....RSVSI........PTPVYYA
+DLVATRARCHVK
+>O16720_CAEEL/566-867
+LIVVVLPG..KTPI.YAEVKRVGDTVLGIATQCVQAKNAIRT..............TPQTLSNLCLKMNVKLGGVNS.IL
+LPNVRPR...IFNEPVI.........FLGCDITHPAAGD.........TRKPSIAAVVGSMD.AHPSRYAATVRVQQHRQ
+EIITD.LTY............MVRELLVQFYRNTRF.KPARIVVYRDGVSEGQLFNVLQYELRAIREACV.......MLE
+.SGYQ..PGITFIAVQKRHHTRLFAADKAD.....................QVGKAFNIPPGTTV...DVGITHPTEFDF
+FLCSHAGIQGTSRPSHYHVLWDDN...DLTADEL.QQL......TYQMCHTYVRCT....RSVSI........PAPAYYA
+HLVAFRARYHLV
+>PINH_ARATH/625-946
+LLLAILPD.NNGSL.YGDLKRICETELGLISQCCLTKHVFKI..............SKQYLANVSLKINVKMGGRNT.VL
+VDAISCRIPLVSDIPTI.........IFGADVTHPENGE.........ESSPSIAAVVASQDWPEVTKYAGLVCAQAHRQ
+ELIQDLYKTWQDPVRGTVSGGMIRDLLISFRKATGQ.KPLRIIFYRDGVSEGQFYQVLLYELDAIRKACA.......SLE
+.PNYQ..PPVTFIVVQKRHHTRLFANNHRD...................KNSTDRSGNILPGTVV...DTKICHPTEFDF
+YLCSHAGIQGTSRPAHYHVLWDEN...NFTADGI.QSL......TNNLCYTYARCT....RSVSI........VPPAYYA
+HLAAFRARFYLE
+>AGO1_SCHPO/500-799
+YLFFILDK.NSPEP.YGSIKRVCNTMLGVPSQCAISKHILQS..............KPQYCANLGMKINVKVGGINC.SL
+IPKSNP....LGNVPTL.........ILGGDVYHPGVGA..........TGVSIASIVASVD.LNGCKYTAVSRSQPRHQ
+EVIEG.MKD............IVVYLLQGFRAMTKQ.QPQRIIYFRDGTSEGQFLSVINDELSQIKEACH.......SLS
+.PKYN..PKILVCTTQKRHHARFFIKNKSD......................GDRNGNPLPGTII...EKHVTHPYQYDF
+YLISHPSLQGVSVPVHYTVLHDEI...QMPPDQF.QTL......CYNLCYVYARAT....SAVSL........VPPVYYA
+HLVSNLARYQDV
+>O76922_DROME/555-852
+IVMVVMRS.PNEEK.YSCIKKRTCVDRPVPSQVVTLKVIAPR.....QQ...KPTGLMSIATKVVIQMNAKLMGA...PW
+QVVIPL.......HGLM.........TVGFDVCHSPKNK...........NKSYGAFVATMDQKESFRYFSTVNEHIKGQ
+ELSEQ.MSV............NMACALRSYQEQHRS.LPERILFFRDGVGDGQLYQVVNSEVNTLKDRLDEI...YKSAG
+.KQEG..CRMTFIIVSKRINSRYFT.............................GHRNPVPGTVV...DDVITLPERYDF
+FLVSQAVRIGTVSPTSYNVISDNM...GLNADKL.QML......SYKMTHMYYNYS....GTIRV........PAVCHYA
+HKLAFLVAESIN
+>PIWI_DROME/538-829
+LILCLVPN.DNAER.YSSIKKRGYVDRAVPTQVVTLKTTKNR.....SL........MSIATKIAIQLNCKLGYT...PW
+MIELPL.......SGLM.........TIGFDIAKSTRDR...........KRAYGALIASMDLQQNSTYFSTV.TECSAF
+DVLANTLWP............MIAKALRQYQHEHRK.LPSRIVFYRDGVSSGSLKQLFEFEVKDIIEKLKTE...YARVQ
+.LSP...PQLAYIVVTRSMNTRFFLN.............................GQNPPPGTIV...DDVITLPERYDF
+YLVSQQVRQGTVSPTSYNVLYSSM...GLSPEKM.QKL......TYKMCHLYYNWS....GTTRV........PAVCQYA
+KKLATLVGTNLH
+>Q17567_CAEEL/397-708
+MLVVMLAD.DNKTR.YDSLKKYLCVECPIPNQCVNLRTLAGK.....SKDGGENKNLGSIVLKIVLQMICKTGGA...LW
+KVNIPL.......KSTM.........IVGYDLYHDSTLK...........GKTVGACVSTTS.NDFTQFYSQTRPHENPT
+QLGNN.LTH............FVRKSLKQYYDNNDKTLPSRLILYRDGAGDGQIPYIKNTEVKLVRDACDAVTDKAAELS
+.NKVQEKIKLAFIIVTKRVNMRILKQGSSS.......................KSAINPQPGTVV...DTTVTRPERMDF
+YLVPQFVNQGTVTPVSYNIIHDDT...GLGPDKH.QQL......AFKLCHLYYNWQ....GTVRV........PAPCQYA
+HKLAFLTAQSLH
+>PIWL1_HUMAN/555-847
+IVVCLLSS.NRKDK.YDAIKKYLCTDCPTPSQCVVARTLGKQ.....QT.......VMAIATKIALQMNCKMGGE...LW
+RVDIPL.......KLVM.........IVGIDCYHDMTAG...........RRSIAGFVASIN.EGMTRWFSRCIFQDRGQ
+ELVDG.LKV............CLQAALRAW.NSCNEYMPSRIIVYRDGVGDGQLKTLVNYEVPQFLDCLK.......SIG
+.RGYN..PRLTVIVVKKRVNTRFFAQSGGR.........................LQNPLPGTVI...DVEVTRPEWYDF
+FIVSQAVRSGSVSPTHYNVIYDNS...GLKPDHI.QRL......TYKLCHIYYNWP....GVIRV........PAPCQYA
+HKLAFLVGQSIH
+>PIWI_ARCFU/110-406
+GIMLVLPE.YNTPL.YYKLKSYLINS..IPSQFMRYDILSNR.....NL........TFYVDNLLVQFVSKLGGK...PW
+ILNVDPEK....................GSDIIIGTGAT........RIDNVNLFCFAMVFK.KDGTMLWNEISPIVTSS
+EYLTY.LKS............TIKKVVYGFKKSNPDWDVEKLTLHVSG....KRPKMKDGETKILKETVE.......ELK
+.KQEMVSRDVKYAILHLNETHPFWVMGDPN........................NRFHPYEGTKVKLSSKRYLLTLLQPY
+LKRNGLEMVTPIKPLSVEIVSDN.....WTSEEYYHNVHEILDEIYYLSKMNWRGF....RSRNL........PVTVNYP
+KLVAGIIANVNR
+>Y1321_METJA/426-699
+CFALIIGKEKYKDNDYYEILKKQLFDLKIISQNILWENWRKD.....DK........GYMTNNLLIQIMGKLGIK...YF
+ILDSKTPYDY................IMGLDTGLGIFGN............HRVGGCTVVYDSEGKIRRIQPIETPAPGE
+RLHLP................YVIEYLEN..KANIDMENKNILFLRDG.......FIQNSERNDLKEISK.......ELN
+.......SNIEVISIRKNNKYKVFTSDYRI........................GSVFGNDGIFLPHKTPFGSNPVKLST
+WLRFNCGNEEGLK...IN.............ESI.MQL......LYDLTKMNYSALYGEGRYLRI........PAPIHYA
+DKFVKALGKNWK
+>O67434_AQUAE/419-694
+LVIVFLEEYPKVDP.YKSFLLYDFVKRELLKKMIPSQVILNR.....TL...KNENLKFVLLNVAEQVLAKTGNIP..YK
+LKEIEGKVDA................FVGIDISRITRDG..........KTVNAVAFTKIFNSKGELVRYYLTSYPAFGE
+KLTEK................AIGDVFSLLEKLGF.KKGSKIVVHRDG.......RLYRDEVAAFK...........KYG
+.ELYG..YSLELLEIIKRNNPRFFSNEKFI..............................KGYFYKLSEDSVILATYNQV
+Y.......EGTHQPIKVRKVYGE.....LPVEVL.CSQ......ILSLTLMNYSSF....QPIKL........PATVHYS
+DKITKLMLRGIE
+>Q21495_CAEEL/52-336
+GIVLPTPRIFFRDG..........QETSLNNQSFRNPT...................DFAQTGFFVDAKQQLGGLN..YV
+VNS.....ETWNDSGLL.........LIGLSTAPYLNSY........SSENVTTIGFVSNTM.DHPQKFAGGYKYVKSGS
+DVFGQVMPE............ILLNSLRSARKARKI.KPMNIVIYLCGMSESRFSIVKEEYVRNCHSVFK.......TLG
+.EKYS..PQLTIIVGSKGHSTRLYARGERD........................QISNLQPGTIV...DSVIVSPDYNKF
+FHCGAVARQGTCKATKYTVLYPE....SPKMEWI.QRM......TNDLCYMHEIVF....HPVSL........PAPLYLT
+AEMAERGTKNLA
+>O16386_CAEEL/548-847
+QLIMFITK..SMNN.YHTEIKCLEQEFDLLTQDIRFETAVKL.....AQ.......QQNTRKNIIYKTNMKLGGLN..YE
+LRS.....GVFSNSKRL.........IIGFETSQRGGLG..........DAPIAIGFAANMM.SHSQQFAGGYMFVKKSA
+DNYGPVIPE............ILLTILKQAKANRPNDRPDELLIYFSGVSEGQHALVNEYYANQVKAACG.......LFN
+.ESFR..PHITLILASKVHNTRVYKSENGG........................GVCNVEPGTVI...DHTIVSPVLSEW
+YHAGSLARQGTSKLVKYSLIFNTK...KNEKLSVYERL......TNELCYEMQIVF....HPTSL........PIPLHIA
+GTYSERGSQMLA
+>O02095_CAEEL/574-878
+QLLFFVVK..SRYN.YHQQIKALEQKYDVLTQEIRAETAEKV.....FR.......QPQTRLNIINKTNMKLGGLN..YA
+IGS.....EAFNKPNRL.........IVGFVTSQRVGGN.........PDYPISVGFAANML.KHHQKFAGGYVYVHRDR
+DVFGSIIKD............TLLAIFKTCTEQRG..RPDDILLYFNGVSEGQFSMINEEFSARVKEACMAF...QKEGT
+.PPFR..PHITIIASSKAHNERLYKSDKGR.........................IVNLEPGTVV...DHTIVSNVYTEW
+YHASAVARQGTAKATKFTLIFTTKAGPQAEPLWHLEQL......TNDLCYDHQIVF....HPVGL........PVPLYIA
+DRYSQRGAMVLA
+>Q19645_CAEEL/674-996
+PFVLFISD..DVPN.IHECLKFEERMSDIPTQHVLLKNVKKMRDNIEKKSQGGRRAYDLTLDNIVMKANIKCGGLN..YT
+.ADIPRDLACWNEVSTF.........VIGMDVAHPDRNA.......AREGNPSTVGLSCNSA.ENPYSFIGDFLYTDPRR
+EAIQDEILR...........KFTDQSVRNFAEIRG..FPKKVIIFRDGVSFGEETAALK.EVEIIEQTIKTA...AKSMG
+HSDYA..PKVLAIVVKKRHHTRFYAKGGHH......................GNMPINPLPDTSV...GGDIAEYGKRQI
+FIQAFRPVQGTAKVPSFLVIRDDE...EVSDEHV.AKM......VCAVCSLHQLVN....SPTSI........PTPVYVA
+HELAKRGTGLYK
+>Q23415_CAEEL/40-350
+KFAFVITD.DSITH.LHKKYKALEQKSMMVIQDMKISKANSV.....VK.....DGKRLTLENVINKTNMKLGGLN..YT
+VSDAKKSMT....DEQL.........IIGVGVSAPPAGT.KYMMDNKGHLNPQIIGFASNA..VANHEFVGDFVLAPSGQ
+DTMAS.IED............VLKSSIDLFEMNRNT.LPKRIIIYRSGASDGSHASILAYEIPLARATIQ.......GYS
+.KDIN....LIYIIVTKEHSYRFFRDQLRS....................GGKATEMNIPPGIVL...DSAVTNPACKQF
+FLNGHTTLQGTAKTPLYTILADDC...NAPMDRL.EEL......TYTLCHHHQIVA....LSTSI........PTPLYVA
+NEYAKRGRDLWS
+>O62275_CAEEL/594-924
+TFVFIITD.DSITT.LHQRYKMIEKDTKMIVQDMKLSKALSV..........INAGKRLTLENVINKTNVKLGGSN..YV
+FVDAKKQL.....DSHL.........IIGVGISAPPAGT.KYAMENKGVLNPNVIGYAYNA..QHNQEFSGDFVLNSASQ
+DTLAP.IED............IVMHSLNEYQKFHDGGLPRRVIVYRTGTSEGNHGSIMAYEIPLARAAMR.......DFS
+.PDIQ....LVYIVVSKDHSFRFFKPDLASLASRPQATSSTASRHSAMPAAPKAWDLNIAPGILV...DSIVTNPACKQF
+FLNSHITLQGTAKTPLYTVLADDA...KVSMTAL.EDI......TYKLCHLHQIVG....LPTSL........PTPLYVA
+NEYAKRGRNLWN
diff --git a/test/scripts/automated/belvu/test5 b/test/scripts/automated/belvu/test5
new file mode 100755
index 0000000..b4830fa
--- /dev/null
+++ b/test/scripts/automated/belvu/test5
@@ -0,0 +1,24 @@
+#!/bin/ksh
+#
+# Description:
+#   Test saving an alignment in unaligned-fasta format
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences to the saved results
+diffs=`belvu -o Fasta $data_dir/PF02171_seed.stock >&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
+
diff --git a/test/scripts/automated/belvu/test50 b/test/scripts/automated/belvu/test50
new file mode 100755
index 0000000..44f869f
--- /dev/null
+++ b/test/scripts/automated/belvu/test50
@@ -0,0 +1,25 @@
+#!/bin/ksh
+#
+# Description:
+#   Test creating a UPGMA tree (uncorrected distances)
+
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences to the saved results
+diffs=`belvu -T ur -o tree  $data_dir/ALIGN.selex >&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
+
diff --git a/test/scripts/automated/belvu/test50_results b/test/scripts/automated/belvu/test50_results
new file mode 100644
index 0000000..0d93d9d
--- /dev/null
+++ b/test/scripts/automated/belvu/test50_results
@@ -0,0 +1,1108 @@
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+Q9UPQ9.4/1-1833:0.000,
+B0QY77.1/1-879:0.000)
+0:0.000,
+B4E231.1/1-251:0.000)
+0:0.000,
+Q9UPQ9.4/1-1833:0.000)
+0:0.010,
+B5ME23.2/165-368:0.010)
+0:0.038,
+(
+(
+Q3TRH0.1/46-194:0.000,
+Q3TRK2.1/1-88:0.000)
+0:0.017,
+(
+Q8BWL0.1/2-169:0.000,
+Q1LZM4.1/2-292:0.000)
+0:0.017)
+0:0.031)
+0:0.018,
+(
+(
+(
+A8MYY3.2/946-1098:0.000,
+A0CJW3.1/434-742:0.000)
+0:0.003,
+C9J5L7.1/946-1098:0.003)
+0:0.030,
+D2GZL8.1/900-1051:0.033)
+0:0.033)
+0:0.438,
+(
+Q4S4D3.1/395-556:0.456,
+Q4TA88.1/5-275:0.456)
+0:0.048)
+0:0.162,
+(
+(
+Q4T574.1/639-850:0.380,
+Q4T0A8.1/27-228:0.380)
+0:0.227,
+C3ZJT1.1/371-689:0.606)
+0:0.059)
+0:0.053,
+(
+(
+(
+(
+(
+(
+C9JA83.1/3-471:0.000,
+C9JAR8.1/119-1283:0.000)
+0:0.000,
+Q8NDV7.2/119-1962:0.000)
+0:0.024,
+B4DST4.1/1-168:0.024)
+0:0.184,
+(
+(
+Q05CE3.1/20-1014:0.004,
+Q8BNF0.2/9-877:0.004)
+0:0.007,
+Q6ZPQ4.1/1-243:0.011)
+0:0.197)
+0:0.282,
+(
+(
+(
+(
+(
+C9JA83.1/468-1101:0.000,
+C9JAR8.1/1280-1913:0.000)
+0:0.008,
+D2I222.1/1-1905:0.008)
+0:0.009,
+B3KSX2.1/4-277:0.016)
+0:0.059,
+(
+D4A372.1/95-1931:0.011,
+(
+(
+(
+(
+Q3UHK8.1/1266-1896:0.000,
+Q99JR3.2/24-648:0.000)
+0:0.000,
+Q8BWM2.1/1-337:0.000)
+0:0.001,
+Q8BXM6.1/4-627:0.001)
+0:0.002,
+Q3UQ45.1/7-500:0.003)
+0:0.008)
+0:0.064)
+0:0.258,
+(
+Q3UHK8.1/20-1269:0.000,
+Q3UUG8.1/1-727:0.000)
+0:0.333)
+0:0.157)
+0:0.123,
+Q4S9I4.1/33-1574:0.613)
+0:0.106)
+0:0.062,
+B7PWH5.1/252-389:0.781)
+0:0.062,
+(
+(
+(
+(
+(
+(
+B1ATC3.1/2-1028:0.000,
+B7ZC94.1/2-868:0.000)
+0:0.014,
+Q3UHC0.2/4-818:0.014)
+0:0.034,
+D3ZRA6.1/2-1000:0.048)
+0:0.076,
+(
+D2H997.1/2-866:0.095,
+Q9HCJ0.3/4-822:0.095)
+0:0.029)
+0:0.436,
+C3ZJT1.1/328-369:0.560)
+0:0.137,
+(
+Q4T574.1/239-596:0.658,
+Q4T0A9.1/370-579:0.658)
+0:0.038)
+0:0.146)
+0:0.041,
+(
+(
+(
+(
+(
+B3N1G0.1/6-1260:0.209,
+B4H886.1/6-148:0.209)
+0:0.316,
+(
+(
+(
+(
+(
+B3P9S0.1/6-1293:0.085,
+B4PW21.1/6-1287:0.085)
+0:0.049,
+(
+(
+B4IIY1.1/6-1290:0.023,
+B4R2G2.1/6-1156:0.023)
+0:0.043,
+(
+Q8SY33.1/6-1289:0.000,
+Q8MSF0.1/1-120:0.000)
+0:0.066)
+0:0.067)
+0:0.158,
+(
+Q29CP6.2/6-1291:0.115,
+B4H887.1/32-1121:0.115)
+0:0.177)
+0:0.080,
+B4NHM7.1/6-1344:0.372)
+0:0.048,
+(
+(
+(
+(
+(
+B4MF11.1/6-1287:0.031,
+D0Z7B2.1/6-1290:0.031)
+0:0.099,
+(
+C1K8B6.1/4-244:0.004,
+C1K890.1/4-244:0.004)
+0:0.125)
+0:0.085,
+C1K8V5.1/4-177:0.214)
+0:0.076,
+B4L7C4.1/6-1178:0.290)
+0:0.082,
+B4JZV3.1/6-1310:0.372)
+0:0.048)
+0:0.104)
+0:0.136,
+(
+(
+Q172C7.1/363-538:0.269,
+B0WXH0.1/311-1189:0.269)
+0:0.334,
+(
+Q172C8.1/192-646:0.556,
+A7UUT0.1/13-626:0.556)
+0:0.047)
+0:0.058)
+0:0.098,
+(
+A0NFA3.2/8-516:0.620,
+B7PWH5.1/349-695:0.620)
+0:0.139)
+0:0.072,
+(
+(
+Q7Q3B9.4/7-766:0.438,
+A7UUT0.1/686-771:0.438)
+0:0.280,
+B3M562.1/702-895:0.719)
+0:0.112)
+0:0.053)
+0:0.034,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+A8MYY3.2/1098-1737:0.000,
+B0QY77.1/879-1390:0.000)
+0:0.000,
+B4E231.1/251-762:0.000)
+0:0.000,
+B5ME23.2/368-1007:0.000)
+0:0.000,
+C9J5L7.1/1098-1737:0.000)
+0:0.000,
+B7ZB91.1/13-478:0.000)
+0:0.014,
+D2GZL8.1/1051-1690:0.014)
+0:0.018,
+(
+Q1LZM4.1/292-736:0.007,
+Q8BXV9.1/2-142:0.007)
+0:0.025)
+0:0.074,
+Q8BZH2.1/5-63:0.106)
+0:0.508,
+(
+Q4S4D3.1/651-825:0.371,
+Q4TA88.1/319-457:0.371)
+0:0.243)
+0:0.076,
+(
+(
+(
+(
+(
+B1ATC3.1/1015-1647:0.000,
+B7ZC94.1/855-1477:0.000)
+0:0.000,
+Q3UHC0.2/805-1437:0.000)
+0:0.081,
+(
+D2H997.1/853-1477:0.072,
+Q9HCJ0.3/810-1437:0.072)
+0:0.009)
+0:0.270,
+(
+(
+Q4T574.1/894-1324:0.220,
+Q4T0A8.1/405-529:0.220)
+0:0.054,
+B0R1E2.1/1-289:0.273)
+0:0.078)
+0:0.319,
+Q4T0A8.1/329-402:0.671)
+0:0.019)
+0:0.091,
+(
+(
+Q4S4D3.1/557-654:0.500,
+Q7SGG0.1/13-167:0.500)
+0:0.212,
+Q86KE5.1/77-311:0.712)
+0:0.069)
+0:0.031,
+(
+(
+(
+P20105.2/153-385:0.112,
+B4PJL3.1/173-393:0.112)
+0:0.118,
+B3NHT3.1/152-330:0.230)
+0:0.077,
+B3M4K4.1/89-378:0.307)
+0:0.506)
+0:0.034,
+(
+(
+(
+A0NFA3.2/687-1175:0.000,
+B4KQM5.1/242-419:0.000)
+0:0.789,
+(
+(
+(
+(
+Q2GV87.1/66-278:0.722,
+Q55F37.1/112-343:0.722)
+0:0.006,
+D3B9K1.1/622-823:0.728)
+0:0.012,
+(
+(
+(
+(
+(
+(
+P20105.2/537-654:0.184,
+B4PJL3.1/533-654:0.184)
+0:0.135,
+B3M4K4.1/533-691:0.320)
+0:0.337,
+(
+(
+A3F295.1/6-117:0.438,
+A3F290.1/9-110:0.438)
+0:0.108,
+Q54LR6.1/53-262:0.546)
+0:0.111)
+0:0.019,
+(
+(
+(
+(
+(
+(
+C1GVG2.1/279-439:0.160,
+(
+C0SAP5.1/281-410:0.104,
+C1GDP1.1/281-415:0.104)
+0:0.056)
+0:0.386,
+A5E3S9.1/278-450:0.547)
+0:0.058,
+(
+(
+B4NNJ8.1/320-445:0.474,
+(
+B4J985.1/306-430:0.295,
+B4ME65.1/311-417:0.295)
+0:0.179)
+0:0.127,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+B4JL62.1/290-395:0.286,
+D3BH34.1/115-236:0.286)
+0:0.013,
+(
+(
+B4K3C6.1/67-191:0.173,
+Q5TST0.3/683-841:0.173)
+0:0.031,
+B4NP54.1/2-69:0.204)
+0:0.094)
+0:0.049,
+(
+(
+(
+D1ZFW1.1/794-871:0.169,
+(
+Q4P3Y1.1/128-184:0.133,
+Q4P2T9.1/335-396:0.133)
+0:0.035)
+0:0.097,
+A0BQD1.1/165-319:0.266)
+0:0.041,
+(
+A5E1Y8.1/358-537:0.261,
+(
+B4KT28.1/222-266:0.207,
+A8NN12.1/68-136:0.207)
+0:0.054)
+0:0.046)
+0:0.042)
+0:0.015,
+(
+(
+B4MHJ9.1/106-306:0.250,
+Q25AW7.1/146-228:0.250)
+0:0.109,
+(
+C0SUE2.1/77-175:0.170,
+B4JY35.1/15-92:0.170)
+0:0.189)
+0:0.004)
+0:0.064,
+D0H0K7.1/432-591:0.427)
+0:0.040,
+(
+B4PH83.1/181-247:0.333,
+Q54FL0.1/951-1244:0.333)
+0:0.134)
+0:0.022,
+A1C5H3.1/188-267:0.489)
+0:0.014,
+(
+(
+Q9VYA6.1/174-225:0.098,
+Q86NT0.1/173-270:0.098)
+0:0.312,
+D3B7T2.1/209-345:0.410)
+0:0.094)
+0:0.048,
+O42323.1/299-489:0.551)
+0:0.029,
+(
+(
+Q54X31.1/100-217:0.476,
+C5GQY8.1/409-612:0.476)
+0:0.083,
+(
+B4NE44.1/470-686:0.396,
+B4L803.1/240-323:0.396)
+0:0.163)
+0:0.021)
+0:0.020)
+0:0.004)
+0:0.027,
+(
+B0X8C2.1/150-263:0.557,
+Q6C9A9.1/660-764:0.557)
+0:0.074)
+0:0.014,
+(
+B4N2I1.1/44-159:0.157,
+B3MYX8.1/14-153:0.157)
+0:0.489)
+0:0.007,
+(
+(
+(
+(
+A3F293.1/10-109:0.125,
+A3F299.1/12-111:0.125)
+0:0.371,
+B4KN27.1/225-337:0.496)
+0:0.057,
+Q4PF35.1/18-283:0.553)
+0:0.060,
+B4JPX4.1/284-409:0.613)
+0:0.038)
+0:0.024)
+0:0.019,
+(
+C1GEW9.1/11-129:0.625,
+A5E7X5.1/33-235:0.625)
+0:0.069)
+0:0.015,
+(
+A5E351.1/72-416:0.628,
+(
+B3NV15.1/1200-1273:0.438,
+B4PZT3.1/1188-1272:0.438)
+0:0.190)
+0:0.081)
+0:0.030)
+0:0.032,
+(
+B3MKU5.1/256-639:0.691,
+Q5TSQ4.3/457-676:0.691)
+0:0.081)
+0:0.016)
+0:0.039,
+A8PU70.1/566-908:0.828)
+0:0.018)
+0:0.041,
+(
+A7SDW4.1/430-1260:0.667,
+(
+A7SDW4.1/1319-1671:0.000,
+A7T6Q0.1/2-144:0.000)
+0:0.667)
+0:0.221)
+0:0.030)
+0:0.044,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+B1ATC3.1/1646-1899:0.000,
+B7ZC94.1/1478-1731:0.000)
+0:0.000,
+Q3UHC0.2/1436-1689:0.000)
+0:0.069,
+(
+D2H997.1/1476-1729:0.063,
+Q9HCJ0.3/1434-1689:0.063)
+0:0.006)
+0:0.232,
+(
+(
+Q4T574.1/1322-1578:0.186,
+Q4T0A8.1/526-801:0.186)
+0:0.087,
+B0R1E2.1/290-554:0.272)
+0:0.028)
+0:0.122,
+Q4S9I4.1/1569-1835:0.422)
+0:0.057,
+(
+(
+(
+(
+(
+(
+(
+Q3TRH0.1/194-838:0.000,
+Q8BKI2.2/1167-1810:0.000)
+0:0.000,
+Q8BWL0.1/169-812:0.000)
+0:0.000,
+Q3TRK2.1/88-731:0.000)
+0:0.000,
+Q66JU9.1/2-312:0.000)
+0:0.000,
+Q8VD67.1/1-249:0.000)
+0:0.004,
+(
+(
+Q6P7B1.1/2-432:0.000,
+Q148P0.1/1-249:0.000)
+0:0.000,
+Q9JHZ1.1/1-249:0.000)
+0:0.004)
+0:0.396,
+(
+Q4S4D3.1/823-1099:0.286,
+Q4TA89.1/1-316:0.286)
+0:0.114)
+0:0.079)
+0:0.080,
+C3ZJT1.1/730-1350:0.559)
+0:0.094,
+(
+C0PFW8.1/269-336:0.000,
+C0HHH3.1/270-337:0.000)
+0:0.653)
+0:0.056,
+(
+(
+(
+(
+(
+(
+B0WTJ5.1/228-1404:0.268,
+Q172C6.1/6-1080:0.268)
+0:0.112,
+Q7Q3B9.4/781-1217:0.380)
+0:0.063,
+(
+Q172C8.1/672-1244:0.193,
+B0WXG8.1/1199-1287:0.193)
+0:0.249)
+0:0.070,
+(
+Q172C7.1/573-1487:0.297,
+B0WXH0.1/1191-1443:0.297)
+0:0.215)
+0:0.088,
+(
+(
+A7UUT0.1/838-1208:0.345,
+(
+B0WXG8.1/386-1198:0.047,
+B8RJB3.1/9-266:0.047)
+0:0.298)
+0:0.196,
+B7PWH5.1/720-1088:0.542)
+0:0.059)
+0:0.103,
+Q2I2V8.1/539-606:0.704)
+0:0.005)
+0:0.038,
+(
+(
+A9USE7.1/720-774:0.582,
+D4APH2.1/480-541:0.582)
+0:0.135,
+(
+A9USE7.1/997-1101:0.486,
+A7AT74.1/621-697:0.486)
+0:0.230)
+0:0.030)
+0:0.024,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+A5BE57.1/246-300:0.280,
+B9RQB9.1/236-287:0.280)
+0:0.020,
+(
+B2RXY9.1/193-253:0.000,
+A2A5N3.1/193-253:0.000)
+0:0.300)
+0:0.142,
+(
+(
+B2GUY3.1/194-262:0.000,
+D4AC14.1/194-262:0.000)
+0:0.000,
+D4AC21.1/123-191:0.000)
+0:0.442)
+0:0.067,
+(
+(
+C5WPD4.1/242-318:0.201,
+(
+Q10N87.1/216-320:0.010,
+B8AL31.1/216-320:0.010)
+0:0.192)
+0:0.186,
+A5B3Z9.1/212-306:0.388)
+0:0.121)
+0:0.027,
+(
+(
+(
+(
+(
+(
+B5DF80.1/306-473:0.089,
+(
+(
+(
+(
+(
+Q2VIP3.1/296-392:0.000,
+Q3ZCS4.1/296-393:0.000)
+0:0.000,
+Q5VX58.1/296-390:0.000)
+0:0.000,
+Q9H361.2/296-390:0.000)
+0:0.000,
+Q2VIN7.1/296-392:0.000)
+0:0.042,
+Q2VIN9.1/296-390:0.042)
+0:0.047)
+0:0.055,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+B2GUY3.1/296-379:0.000,
+D4AC14.1/296-379:0.000)
+0:0.000,
+D4AC21.1/225-308:0.000)
+0:0.000,
+Q6IQ30.1/296-379:0.000)
+0:0.000,
+Q4VC03.1/296-379:0.000)
+0:0.000,
+Q13310.1/296-379:0.000)
+0:0.000,
+D3Z5M2.1/296-380:0.000)
+0:0.000,
+A4IFC3.1/296-379:0.000)
+0:0.000,
+B1ANR0.1/296-379:0.000)
+0:0.000,
+D2I596.1/309-392:0.000)
+0:0.000,
+Q99LF8.1/296-380:0.000)
+0:0.000,
+Q15164.1/107-185:0.000)
+0:0.012,
+(
+(
+(
+(
+Q91YZ8.1/296-380:0.000,
+A3KFU8.1/296-380:0.000)
+0:0.000,
+Q6PHQ9.1/296-380:0.000)
+0:0.000,
+A3KFU5.1/296-380:0.000)
+0:0.000,
+Q3UX16.1/225-309:0.000)
+0:0.012)
+0:0.006,
+(
+(
+Q7T3G5.1/297-380:0.000,
+Q8QGJ7.1/296-379:0.000)
+0:0.000,
+Q4RNX8.1/296-379:0.000)
+0:0.018)
+0:0.015,
+Q3UTA6.1/197-279:0.033)
+0:0.111)
+0:0.036,
+Q9D4E6.1/307-466:0.180)
+0:0.061,
+(
+(
+(
+B2RXY9.1/296-394:0.000,
+A2A5N3.1/296-393:0.000)
+0:0.113,
+D3ZAS7.1/296-399:0.113)
+0:0.106,
+(
+(
+D2H6M0.1/296-405:0.046,
+Q4VXU2.1/296-404:0.046)
+0:0.027,
+Q98SP8.2/296-391:0.073)
+0:0.146)
+0:0.023)
+0:0.155,
+(
+(
+(
+C5YBU9.1/329-416:0.011,
+B6U4M0.1/324-410:0.011)
+0:0.289,
+(
+(
+B9H7X8.1/304-412:0.000,
+B9H7X9.1/314-422:0.000)
+0:0.091,
+B9GT62.1/311-412:0.091)
+0:0.210)
+0:0.047,
+(
+A9TLC5.1/312-407:0.323,
+Q05196.2/328-430:0.323)
+0:0.025)
+0:0.049)
+0:0.029,
+(
+(
+A2YEJ5.1/343-442:0.000,
+Q69X94.1/342-443:0.000)
+0:0.000,
+B9FTY9.1/365-463:0.000)
+0:0.426)
+0:0.111)
+0:0.023,
+(
+A5BE57.1/307-474:0.442,
+(
+B9RQB9.1/300-388:0.355,
+B9GH32.1/295-362:0.355)
+0:0.087)
+0:0.117)
+0:0.022,
+(
+(
+(
+(
+P31209.2/366-455:0.132,
+(
+B6K033.1/364-457:0.119,
+B6K6T8.1/356-444:0.119)
+0:0.013)
+0:0.123,
+Q6CDH3.1/332-428:0.255)
+0:0.047,
+(
+(
+D3AVQ3.1/284-366:0.260,
+Q54BM2.1/286-375:0.260)
+0:0.021,
+(
+Q5KBW2.1/367-420:0.152,
+Q4P8R9.1/368-413:0.152)
+0:0.129)
+0:0.021)
+0:0.034,
+A8NF86.1/337-425:0.336)
+0:0.245)
+0:0.008,
+(
+(
+(
+B9RQB9.1/109-183:0.297,
+B9GH32.1/107-174:0.297)
+0:0.094,
+O04319.1/114-194:0.391)
+0:0.141,
+(
+(
+C5YBU9.1/128-201:0.258,
+B9H7X8.1/113-180:0.258)
+0:0.015,
+(
+(
+Q8RXR5.1/110-177:0.000,
+P42731.1/126-193:0.000)
+0:0.103,
+Q9M6E6.1/117-184:0.103)
+0:0.169)
+0:0.260)
+0:0.056)
+0:0.019,
+O04319.1/304-419:0.608)
+0:0.043,
+(
+(
+Q7Q9F7.4/282-427:0.561,
+(
+A3CUY7.1/2-69:0.266,
+Q2FSR7.1/6-69:0.266)
+0:0.295)
+0:0.051,
+(
+D0N277.1/201-240:0.542,
+C4QZM5.1/235-294:0.542)
+0:0.070)
+0:0.039)
+0:0.031,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+C5WVW4.1/223-289:0.015,
+(
+C4IYK3.1/223-290:0.000,
+B6UA93.1/223-290:0.000)
+0:0.015)
+0:0.077,
+(
+(
+B8APB9.1/226-292:0.000,
+Q10R21.1/226-292:0.000)
+0:0.000,
+Q0DUQ0.1/248-314:0.000)
+0:0.091)
+0:0.178,
+B9RIB9.1/231-294:0.270)
+0:0.043,
+(
+(
+C0PPV9.1/259-392:0.007,
+C0PT30.1/259-393:0.007)
+0:0.273,
+(
+(
+(
+B8LRZ2.1/277-363:0.000,
+A9NX92.1/275-362:0.000)
+0:0.217,
+A9NWA0.1/248-328:0.217)
+0:0.015,
+(
+A9TFH5.1/223-287:0.000,
+A9TZW4.1/245-319:0.000)
+0:0.232)
+0:0.049)
+0:0.032)
+0:0.040,
+(
+(
+(
+(
+B9GNX9.1/266-364:0.116,
+B9MVK8.1/264-361:0.116)
+0:0.031,
+A5BPW5.1/140-241:0.147)
+0:0.045,
+B9R7H3.1/281-377:0.193)
+0:0.114,
+Q9FX88.1/338-415:0.306)
+0:0.047)
+0:0.021,
+(
+(
+(
+(
+(
+B9N4W3.1/235-341:0.028,
+B9HRX8.1/250-356:0.028)
+0:0.075,
+B9RY32.1/285-382:0.103)
+0:0.107,
+(
+(
+Q8LFI9.1/244-343:0.000,
+Q0WW84.1/287-386:0.000)
+0:0.000,
+Q9LJL7.1/287-386:0.000)
+0:0.211)
+0:0.050,
+A5BF74.1/281-378:0.260)
+0:0.039,
+Q2V9A1.1/201-306:0.300)
+0:0.074)
+0:0.044,
+(
+Q6R969.1/253-422:0.037,
+Q2V9C2.1/258-417:0.037)
+0:0.380)
+0:0.067,
+(
+(
+(
+(
+Q2PEV8.1/238-322:0.275,
+(
+(
+Q9LEB4.1/261-347:0.225,
+A5C5B3.1/256-335:0.225)
+0:0.003,
+B9I0E1.1/253-334:0.228)
+0:0.047)
+0:0.042,
+(
+(
+C5WUD2.1/243-339:0.074,
+C0P488.1/242-336:0.074)
+0:0.038,
+(
+(
+(
+(
+Q10HZ8.1/240-333:0.000,
+Q9AY92.1/240-333:0.000)
+0:0.000,
+Q10HZ7.1/240-333:0.000)
+0:0.000,
+B8AKU6.1/240-333:0.000)
+0:0.000,
+Q0DQQ8.1/284-377:0.000)
+0:0.112)
+0:0.205)
+0:0.077,
+(
+Q9FPJ8.1/236-325:0.000,
+Q9FFU0.1/236-325:0.000)
+0:0.394)
+0:0.029,
+(
+Q8LBV8.1/233-325:0.000,
+Q9SAB3.1/234-326:0.000)
+0:0.423)
+0:0.062)
+0:0.140,
+(
+(
+(
+A9S4M3.1/42-65:0.042,
+A9T3C5.1/56-79:0.042)
+0:0.354,
+(
+Q6DGV1.1/174-212:0.051,
+B5LEQ5.1/179-323:0.051)
+0:0.345)
+0:0.160,
+A3GHN7.2/350-469:0.556)
+0:0.069)
+0:0.058)
+0:0.011,
+(
+C4Q4K6.1/224-436:0.625,
+C4XVP0.1/46-94:0.625)
+0:0.068)
+0:0.013,
+B3S2W8.1/76-163:0.706)
+0:0.031,
+(
+(
+B3S2W8.1/165-267:0.677,
+(
+(
+B4NBP3.1/171-277:0.034,
+B3M300.1/220-284:0.034)
+0:0.106,
+(
+B4MC02.1/171-283:0.072,
+B4JIH9.1/171-286:0.072)
+0:0.069)
+0:0.537)
+0:0.026,
+(
+Q54C48.1/271-412:0.615,
+C5DIP1.1/2-75:0.615)
+0:0.087)
+0:0.035)
+0:0.017,
+D3BFK6.1/320-440:0.755)
+0:0.016)
+0:0.024,
+B3RQ20.1/1143-1394:0.795)
+0:0.116,
+Q4S4D3.1/1091-1191:0.911)
+0:0.051)
+0:0.030,
+(
+(
+(
+(
+(
+(
+(
+(
+(
+(
+A8MYY3.2/16-949:0.000,
+B5ME23.2/16-165:0.000)
+0:0.000,
+C9J5L7.1/16-949:0.000)
+0:0.018,
+B4DKJ5.1/1-276:0.018)
+0:0.028,
+Q8BX83.2/38-410:0.046)
+0:0.193,
+(
+D2GZL8.1/5-902:0.038,
+(
+Q3TRH0.1/1-49:0.000,
+Q8BKI2.2/38-1167:0.000)
+0:0.038)
+0:0.201)
+0:0.157,
+(
+B1H1W1.1/13-388:0.364,
+Q4T5V2.1/1-136:0.364)
+0:0.033)
+0:0.054,
+(
+Q4S4D3.1/1-379:0.324,
+Q4T1P6.1/6-46:0.324)
+0:0.126)
+0:0.151,
+C3ZJT1.1/159-315:0.602)
+0:0.026,
+(
+(
+C9JAR8.1/20-121:0.000,
+Q8NDV7.2/20-121:0.000)
+0:0.110,
+D4A372.1/1-97:0.110)
+0:0.518)
+0:0.335,
+(
+Q4T574.1/1-220:0.634,
+Q4T0A9.1/1-255:0.634)
+0:0.329)
+0:0.029)
+;
diff --git a/test/scripts/automated/belvu/test51 b/test/scripts/automated/belvu/test51
new file mode 100755
index 0000000..6a28821
--- /dev/null
+++ b/test/scripts/automated/belvu/test51
@@ -0,0 +1,25 @@
+#!/bin/ksh
+#
+# Description:
+#   Sort by ID to first sequence
+
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences to the saved results
+diffs=`belvu -o Selex -S i $data_dir/PF02171_seed.selex >&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
+
diff --git a/test/scripts/automated/belvu/test51_results b/test/scripts/automated/belvu/test51_results
new file mode 100644
index 0000000..255df5e
--- /dev/null
+++ b/test/scripts/automated/belvu/test51_results
@@ -0,0 +1,24 @@
+// Please do not highlight a markup line
+#=GC #=RF                                  **********Q********** 
+YQ53_CAEEL/650-977       vgiAR.EKKPD.VHDILKYFEESIGLQTIQLCQQTVDKM.....MG....GQGGRQTIDNVMRKFNLKCGGTNFFVEIPNAVRGKAVCSNNETLRKKLLEHVQFIG FEISHGASRTLFDRSRSQMDGEPSVVGVSYSLT...NSTQLGGFTYLQTQKEYKLQKLDE............FFPKCVRSYKEHSKT.LPTRIVIYRVGAGEGNFNRVKE.EVEEMRRTFD.......KIQ.PGYR..PHLVVIIAQRASHARVFPSCISG.....................NRATDQNIPSGTCV...ENVLTSYGYDEFILSSQTPLIGTVRPCKYTILVNDA...KWSKNEL.MHL......TYFRAFGHQVSY....QPPSV........PDVLYAAENLAKRGRNNYK
+Q21691_CAEEL/673-1001 TIVFGIIA.EKRPD.MHDILKYFEEKLGQQTIQISSETADKF.....MR....DHGGKQTIDNVIRKLNPKCGGTNFLIDVPESVGHRVVCNNSAEMRAKLYAKTQFIG FEMSHTGARTRFDIQKVMFDGDPTVVGVAYSL..KHSAQLGGFSYFQESRLHKLTN.LQE............KMQICLNAYEQSSSY.LPETVVVYRVGSGEGDYPQIVN.EVNEMKLAAR.......KKK.HGYN..PKFLVICTQRNSHIRVFPEHINE....................RGKSMEQNVKSGTCV...DVPGASHGYEEFILCCQTPLIGTVKPTKYTIIVNDC...RWSKNEI.MNV......TYHLAFAHQVSY....APPAI........PNVSYAAQNLAKRGHNNYK
+O48771_ARATH/542-860  FILCILPERKTSDI.YGPWKKICLTEEGIHTQCICPIKI.................SDQYLTNVLLKINSKLGGINS.LLGIEYSYNIPLINKIPTL.........ILG MDVSHGPPGR.........ADVPSVAAVVGSKCWPLISRYRAAVRTQSPRLEMIDSLFQP..IENTEKGDNGIMNELFVEFYRTSRARKPKQIIIFRDGVSESQFEQVLKIEVDQIIKAYQ.......RLG.ESDV..PKFTVIVAQKNHHTKLFQAKGPE...........................NVPAGTVV...DTKIVHPTNYDFYMCAHAGKIGTSRPAHYHVLLDEI...GFSPDDL.QNL......IHSLSYKLLNSI....FNVSSLLCVFVLSVAPVRYAHLAAAQVAQFTK
+Q9ZVD5_ARATH/577-885  FILCVLPDKKNSDL.YGPWKKKNLTEFGIVTQCMAPTRQPND................QYLTNLLLKINAKLGGLNS.MLSVERTPAFTVISKVPTI.........ILG MDVSHGSPGQ.........SDVPSIAAVVSSREWPLISKYRASVRTQPSKAEMIESLVKK.....NGTEDDGIIKELLVDFYTSSNKRKPEHIIIFRDGVSESQFNQVLNIELDQIIEACK.......LLD.ANWN..PKFLLLVAQKNHHTKFFQPTSPE...........................NVPPGTII...DNKICHPKNNDFYLCAHAGMIGTTRPTHYHVLYDEI...GFSADEL.QEL......VHSLSYVYQRST....SAISV........VAPICYAHLAAAQLGTFMK
+TAG76_CAEEL/660-966   CIIVVLQS.KNSDI.YMTVKEQSDIVHGIMSQCVLMKNVSRP..............TPATCANIVLKLNMKMGGIN..SRIVADKITNKYLVDQPTM.........VVG IDVTHPTQAE.......MRMNMPSVAAIVANVD.LLPQSYGANVKVQKKCRESVVY.LLD............AIRERIITFYRHTKQ.KPARIIVYRDGVSEGQFSEVLREEIQSIRTACL.......AIA.EDFR..PPITYIVVQKRHHARIFCKYQND.....................MVGKAKNVPPGTTV...DTGIVSPEGFDFYLCSHYGVQGTSRPARYHVLLDEC...KFTADEI.QSI......TYGMCHTYGRCT....RSVSI........PTPVYYADLVATRARCHVK
+O16720_CAEEL/566-867  LIVVVLPG..KTPI.YAEVKRVGDTVLGIATQCVQAKNAIRT..............TPQTLSNLCLKMNVKLGGVNS.ILLPNVRPR...IFNEPVI.........FLG CDITHPAAGD.........TRKPSIAAVVGSMD.AHPSRYAATVRVQQHRQEIITD.LTY............MVRELLVQFYRNTRF.KPARIVVYRDGVSEGQLFNVLQYELRAIREACV.......MLE.SGYQ..PGITFIAVQKRHHTRLFAADKAD.....................QVGKAFNIPPGTTV...DVGITHPTEFDFFLCSHAGIQGTSRPSHYHVLWDDN...DLTADEL.QQL......TYQMCHTYVRCT....RSVSI........PAPAYYAHLVAFRARYHLV
+PINH_ARATH/625-946    LLLAILPD.NNGSL.YGDLKRICETELGLISQCCLTKHVFKI..............SKQYLANVSLKINVKMGGRNT.VLVDAISCRIPLVSDIPTI.........IFG ADVTHPENGE.........ESSPSIAAVVASQDWPEVTKYAGLVCAQAHRQELIQDLYKTWQDPVRGTVSGGMIRDLLISFRKATGQ.KPLRIIFYRDGVSEGQFYQVLLYELDAIRKACA.......SLE.PNYQ..PPVTFIVVQKRHHTRLFANNHRD...................KNSTDRSGNILPGTVV...DTKICHPTEFDFYLCSHAGIQGTSRPAHYHVLWDEN...NFTADGI.QSL......TNNLCYTYARCT....RSVSI........VPPAYYAHLAAFRARFYLE
+AGO1_SCHPO/500-799    YLFFILDK.NSPEP.YGSIKRVCNTMLGVPSQCAISKHILQS..............KPQYCANLGMKINVKVGGINC.SLIPKSNP....LGNVPTL.........ILG GDVYHPGVGA..........TGVSIASIVASVD.LNGCKYTAVSRSQPRHQEVIEG.MKD............IVVYLLQGFRAMTKQ.QPQRIIYFRDGTSEGQFLSVINDELSQIKEACH.......SLS.PKYN..PKILVCTTQKRHHARFFIKNKSD......................GDRNGNPLPGTII...EKHVTHPYQYDFYLISHPSLQGVSVPVHYTVLHDEI...QMPPDQF.QTL......CYNLCYVYARAT....SAVSL........VPPVYYAHLVSNLARYQDV
+O76922_DROME/555-852  IVMVVMRS.PNEEK.YSCIKKRTCVDRPVPSQVVTLKVIAPR.....QQ...KPTGLMSIATKVVIQMNAKLMGA...PWQVVIPL.......HGLM.........TVG FDVCHSPKNK...........NKSYGAFVATMDQKESFRYFSTVNEHIKGQELSEQ.MSV............NMACALRSYQEQHRS.LPERILFFRDGVGDGQLYQVVNSEVNTLKDRLDEI...YKSAG.KQEG..CRMTFIIVSKRINSRYFT.............................GHRNPVPGTVV...DDVITLPERYDFFLVSQAVRIGTVSPTSYNVISDNM...GLNADKL.QML......SYKMTHMYYNYS....GTIRV........PAVCHYAHKLAFLVAESIN
+PIWI_DROME/538-829    LILCLVPN.DNAER.YSSIKKRGYVDRAVPTQVVTLKTTKNR.....SL........MSIATKIAIQLNCKLGYT...PWMIELPL.......SGLM.........TIG FDIAKSTRDR...........KRAYGALIASMDLQQNSTYFSTV.TECSAFDVLANTLWP............MIAKALRQYQHEHRK.LPSRIVFYRDGVSSGSLKQLFEFEVKDIIEKLKTE...YARVQ.LSP...PQLAYIVVTRSMNTRFFLN.............................GQNPPPGTIV...DDVITLPERYDFYLVSQQVRQGTVSPTSYNVLYSSM...GLSPEKM.QKL......TYKMCHLYYNWS....GTTRV........PAVCQYAKKLATLVGTNLH
+Q17567_CAEEL/397-708  MLVVMLAD.DNKTR.YDSLKKYLCVECPIPNQCVNLRTLAGK.....SKDGGENKNLGSIVLKIVLQMICKTGGA...LWKVNIPL.......KSTM.........IVG YDLYHDSTLK...........GKTVGACVSTTS.NDFTQFYSQTRPHENPTQLGNN.LTH............FVRKSLKQYYDNNDKTLPSRLILYRDGAGDGQIPYIKNTEVKLVRDACDAVTDKAAELS.NKVQEKIKLAFIIVTKRVNMRILKQGSSS.......................KSAINPQPGTVV...DTTVTRPERMDFYLVPQFVNQGTVTPVSYNIIHDDT...GLGPDKH.QQL......AFKLCHLYYNWQ....GTVRV........PAPCQYAHKLAFLTAQSLH
+PIWL1_HUMAN/555-847   IVVCLLSS.NRKDK.YDAIKKYLCTDCPTPSQCVVARTLGKQ.....QT.......VMAIATKIALQMNCKMGGE...LWRVDIPL.......KLVM.........IVG IDCYHDMTAG...........RRSIAGFVASIN.EGMTRWFSRCIFQDRGQELVDG.LKV............CLQAALRAW.NSCNEYMPSRIIVYRDGVGDGQLKTLVNYEVPQFLDCLK.......SIG.RGYN..PRLTVIVVKKRVNTRFFAQSGGR.........................LQNPLPGTVI...DVEVTRPEWYDFFIVSQAVRSGSVSPTHYNVIYDNS...GLKPDHI.QRL......TYKLCHIYYNWP....GVIRV........PAPCQYAHKLAFLVGQSIH
+PIWI_ARCFU/110-406    GIMLVLPE.YNTPL.YYKLKSYLINS..IPSQFMRYDILSNR.....NL........TFYVDNLLVQFVSKLGGK...PWILNVDPEK....................G SDIIIGTGAT........RIDNVNLFCFAMVFK.KDGTMLWNEISPIVTSSEYLTY.LKS............TIKKVVYGFKKSNPDWDVEKLTLHVSG....KRPKMKDGETKILKETVE.......ELK.KQEMVSRDVKYAILHLNETHPFWVMGDPN........................NRFHPYEGTKVKLSSKRYLLTLLQPYLKRNGLEMVTPIKPLSVEIVSDN.....WTSEEYYHNVHEILDEIYYLSKMNWRGF....RSRNL........PVTVNYPKLVAGIIANVNR
+Y1321_METJA/426-699   CFALIIGKEKYKDNDYYEILKKQLFDLKIISQNILWENWRKD.....DK........GYMTNNLLIQIMGKLGIK...YFILDSKTPYDY................IMG LDTGLGIFGN............HRVGGCTVVYDSEGKIRRIQPIETPAPGERLHLP................YVIEYLEN..KANIDMENKNILFLRDG.......FIQNSERNDLKEISK.......ELN.......SNIEVISIRKNNKYKVFTSDYRI........................GSVFGNDGIFLPHKTPFGSNPVKLSTWLRFNCGNEEGLK...IN.............ESI.MQL......LYDLTKMNYSALYGEGRYLRI........PAPIHYADKFVKALGKNWK
+O67434_AQUAE/419-694  LVIVFLEEYPKVDP.YKSFLLYDFVKRELLKKMIPSQVILNR.....TL...KNENLKFVLLNVAEQVLAKTGNIP..YKLKEIEGKVDA................FVG IDISRITRDG..........KTVNAVAFTKIFNSKGELVRYYLTSYPAFGEKLTEK................AIGDVFSLLEKLGF.KKGSKIVVHRDG.......RLYRDEVAAFK...........KYG.ELYG..YSLELLEIIKRNNPRFFSNEKFI..............................KGYFYKLSEDSVILATYNQVY.......EGTHQPIKVRKVYGE.....LPVEVL.CSQ......ILSLTLMNYSSF....QPIKL........PATVHYSDKITKLMLRGIE
+Q21495_CAEEL/52-336   GIVLPTPRIFFRDG..........QETSLNNQSFRNPT...................DFAQTGFFVDAKQQLGGLN..YVVNS.....ETWNDSGLL.........LIG LSTAPYLNSY........SSENVTTIGFVSNTM.DHPQKFAGGYKYVKSGSDVFGQVMPE............ILLNSLRSARKARKI.KPMNIVIYLCGMSESRFSIVKEEYVRNCHSVFK.......TLG.EKYS..PQLTIIVGSKGHSTRLYARGERD........................QISNLQPGTIV...DSVIVSPDYNKFFHCGAVARQGTCKATKYTVLYPE....SPKMEWI.QRM......TNDLCYMHEIVF....HPVSL........PAPLYLTAEMAERGTKNLA
+O16386_CAEEL/548-847  QLIMFITK..SMNN.YHTEIKCLEQEFDLLTQDIRFETAVKL.....AQ.......QQNTRKNIIYKTNMKLGGLN..YELRS.....GVFSNSKRL.........IIG FETSQRGGLG..........DAPIAIGFAANMM.SHSQQFAGGYMFVKKSADNYGPVIPE............ILLTILKQAKANRPNDRPDELLIYFSGVSEGQHALVNEYYANQVKAACG.......LFN.ESFR..PHITLILASKVHNTRVYKSENGG........................GVCNVEPGTVI...DHTIVSPVLSEWYHAGSLARQGTSKLVKYSLIFNTK...KNEKLSVYERL......TNELCYEMQIVF....HPTSL........PIPLHIAGTYSERGSQMLA
+O02095_CAEEL/574-878  QLLFFVVK..SRYN.YHQQIKALEQKYDVLTQEIRAETAEKV.....FR.......QPQTRLNIINKTNMKLGGLN..YAIGS.....EAFNKPNRL.........IVG FVTSQRVGGN.........PDYPISVGFAANML.KHHQKFAGGYVYVHRDRDVFGSIIKD............TLLAIFKTCTEQRG..RPDDILLYFNGVSEGQFSMINEEFSARVKEACMAF...QKEGT.PPFR..PHITIIASSKAHNERLYKSDKGR.........................IVNLEPGTVV...DHTIVSNVYTEWYHASAVARQGTAKATKFTLIFTTKAGPQAEPLWHLEQL......TNDLCYDHQIVF....HPVGL........PVPLYIADRYSQRGAMVLA
+Q19645_CAEEL/674-996  PFVLFISD..DVPN.IHECLKFEERMSDIPTQHVLLKNVKKMRDNIEKKSQGGRRAYDLTLDNIVMKANIKCGGLN..YT.ADIPRDLACWNEVSTF.........VIG MDVAHPDRNA.......AREGNPSTVGLSCNSA.ENPYSFIGDFLYTDPRREAIQDEILR...........KFTDQSVRNFAEIRG..FPKKVIIFRDGVSFGEETAALK.EVEIIEQTIKTA...AKSMGHSDYA..PKVLAIVVKKRHHTRFYAKGGHH......................GNMPINPLPDTSV...GGDIAEYGKRQIFIQAFRPVQGTAKVPSFLVIRDDE...EVSDEHV.AKM......VCAVCSLHQLVN....SPTSI........PTPVYVAHELAKRGTGLYK
+Q23415_CAEEL/40-350   KFAFVITD.DSITH.LHKKYKALEQKSMMVIQDMKISKANSV.....VK.....DGKRLTLENVINKTNMKLGGLN..YTVSDAKKSMT....DEQL.........IIG VGVSAPPAGT.KYMMDNKGHLNPQIIGFASNA..VANHEFVGDFVLAPSGQDTMAS.IED............VLKSSIDLFEMNRNT.LPKRIIIYRSGASDGSHASILAYEIPLARATIQ.......GYS.KDIN....LIYIIVTKEHSYRFFRDQLRS....................GGKATEMNIPPGIVL...DSAVTNPACKQFFLNGHTTLQGTAKTPLYTILADDC...NAPMDRL.EEL......TYTLCHHHQIVA....LSTSI........PTPLYVANEYAKRGRDLWS
+O62275_CAEEL/594-924  TFVFIITD.DSITT.LHQRYKMIEKDTKMIVQDMKLSKALSV..........INAGKRLTLENVINKTNVKLGGSN..YVFVDAKKQL.....DSHL.........IIG VGISAPPAGT.KYAMENKGVLNPNVIGYAYNA..QHNQEFSGDFVLNSASQDTLAP.IED............IVMHSLNEYQKFHDGGLPRRVIVYRTGTSEGNHGSIMAYEIPLARAAMR.......DFS.PDIQ....LVYIVVSKDHSFRFFKPDLASLASRPQATSSTASRHSAMPAAPKAWDLNIAPGILV...DSIVTNPACKQFFLNSHITLQGTAKTPLYTVLADDA...KVSMTAL.EDI......TYKLCHLHQIVG....LPTSL........PTPLYVANEYAKRGRNLWN
+//
diff --git a/test/scripts/automated/belvu/test5_results b/test/scripts/automated/belvu/test5_results
new file mode 100644
index 0000000..022b597
--- /dev/null
+++ b/test/scripts/automated/belvu/test5_results
@@ -0,0 +1,110 @@
+>YQ53_CAEEL/650-977
+DILVGIAREKKPDVHDILKYFEESIGLQTIQLCQQTVDKMMGGQGGRQTIDNVMRKFNLKCGGTNFFVEIPNAVRGKAVC
+SNNETLRKKLLEHVQFIGFEISHGASRTLFDRSRSQMDGEPSVVGVSYSLTNSTQLGGFTYLQTQKEYKLQKLDEFFPKC
+VRSYKEHSKTLPTRIVIYRVGAGEGNFNRVKEEVEEMRRTFDKIQPGYRPHLVVIIAQRASHARVFPSCISGNRATDQNI
+PSGTCVENVLTSYGYDEFILSSQTPLIGTVRPCKYTILVNDAKWSKNELMHLTYFRAFGHQVSYQPPSVPDVLYAAENLA
+KRGRNNYK
+>Q21691_CAEEL/673-1001
+TIVFGIIAEKRPDMHDILKYFEEKLGQQTIQISSETADKFMRDHGGKQTIDNVIRKLNPKCGGTNFLIDVPESVGHRVVC
+NNSAEMRAKLYAKTQFIGFEMSHTGARTRFDIQKVMFDGDPTVVGVAYSLKHSAQLGGFSYFQESRLHKLTNLQEKMQIC
+LNAYEQSSSYLPETVVVYRVGSGEGDYPQIVNEVNEMKLAARKKKHGYNPKFLVICTQRNSHIRVFPEHINERGKSMEQN
+VKSGTCVDVPGASHGYEEFILCCQTPLIGTVKPTKYTIIVNDCRWSKNEIMNVTYHLAFAHQVSYAPPAIPNVSYAAQNL
+AKRGHNNYK
+>O48771_ARATH/542-860
+FILCILPERKTSDIYGPWKKICLTEEGIHTQCICPIKISDQYLTNVLLKINSKLGGINSLLGIEYSYNIPLINKIPTLIL
+GMDVSHGPPGRADVPSVAAVVGSKCWPLISRYRAAVRTQSPRLEMIDSLFQPIENTEKGDNGIMNELFVEFYRTSRARKP
+KQIIIFRDGVSESQFEQVLKIEVDQIIKAYQRLGESDVPKFTVIVAQKNHHTKLFQAKGPENVPAGTVVDTKIVHPTNYD
+FYMCAHAGKIGTSRPAHYHVLLDEIGFSPDDLQNLIHSLSYKLLNSIFNVSSLLCVFVLSVAPVRYAHLAAAQVAQFTK
+>Q9ZVD5_ARATH/577-885
+FILCVLPDKKNSDLYGPWKKKNLTEFGIVTQCMAPTRQPNDQYLTNLLLKINAKLGGLNSMLSVERTPAFTVISKVPTII
+LGMDVSHGSPGQSDVPSIAAVVSSREWPLISKYRASVRTQPSKAEMIESLVKKNGTEDDGIIKELLVDFYTSSNKRKPEH
+IIIFRDGVSESQFNQVLNIELDQIIEACKLLDANWNPKFLLLVAQKNHHTKFFQPTSPENVPPGTIIDNKICHPKNNDFY
+LCAHAGMIGTTRPTHYHVLYDEIGFSADELQELVHSLSYVYQRSTSAISVVAPICYAHLAAAQLGTFMK
+>TAG76_CAEEL/660-966
+CIIVVLQSKNSDIYMTVKEQSDIVHGIMSQCVLMKNVSRPTPATCANIVLKLNMKMGGINSRIVADKITNKYLVDQPTMV
+VGIDVTHPTQAEMRMNMPSVAAIVANVDLLPQSYGANVKVQKKCRESVVYLLDAIRERIITFYRHTKQKPARIIVYRDGV
+SEGQFSEVLREEIQSIRTACLAIAEDFRPPITYIVVQKRHHARIFCKYQNDMVGKAKNVPPGTTVDTGIVSPEGFDFYLC
+SHYGVQGTSRPARYHVLLDECKFTADEIQSITYGMCHTYGRCTRSVSIPTPVYYADLVATRARCHVK
+>O16720_CAEEL/566-867
+LIVVVLPGKTPIYAEVKRVGDTVLGIATQCVQAKNAIRTTPQTLSNLCLKMNVKLGGVNSILLPNVRPRIFNEPVIFLGC
+DITHPAAGDTRKPSIAAVVGSMDAHPSRYAATVRVQQHRQEIITDLTYMVRELLVQFYRNTRFKPARIVVYRDGVSEGQL
+FNVLQYELRAIREACVMLESGYQPGITFIAVQKRHHTRLFAADKADQVGKAFNIPPGTTVDVGITHPTEFDFFLCSHAGI
+QGTSRPSHYHVLWDDNDLTADELQQLTYQMCHTYVRCTRSVSIPAPAYYAHLVAFRARYHLV
+>PINH_ARATH/625-946
+LLLAILPDNNGSLYGDLKRICETELGLISQCCLTKHVFKISKQYLANVSLKINVKMGGRNTVLVDAISCRIPLVSDIPTI
+IFGADVTHPENGEESSPSIAAVVASQDWPEVTKYAGLVCAQAHRQELIQDLYKTWQDPVRGTVSGGMIRDLLISFRKATG
+QKPLRIIFYRDGVSEGQFYQVLLYELDAIRKACASLEPNYQPPVTFIVVQKRHHTRLFANNHRDKNSTDRSGNILPGTVV
+DTKICHPTEFDFYLCSHAGIQGTSRPAHYHVLWDENNFTADGIQSLTNNLCYTYARCTRSVSIVPPAYYAHLAAFRARFY
+LE
+>AGO1_SCHPO/500-799
+YLFFILDKNSPEPYGSIKRVCNTMLGVPSQCAISKHILQSKPQYCANLGMKINVKVGGINCSLIPKSNPLGNVPTLILGG
+DVYHPGVGATGVSIASIVASVDLNGCKYTAVSRSQPRHQEVIEGMKDIVVYLLQGFRAMTKQQPQRIIYFRDGTSEGQFL
+SVINDELSQIKEACHSLSPKYNPKILVCTTQKRHHARFFIKNKSDGDRNGNPLPGTIIEKHVTHPYQYDFYLISHPSLQG
+VSVPVHYTVLHDEIQMPPDQFQTLCYNLCYVYARATSAVSLVPPVYYAHLVSNLARYQDV
+>O76922_DROME/555-852
+IVMVVMRSPNEEKYSCIKKRTCVDRPVPSQVVTLKVIAPRQQKPTGLMSIATKVVIQMNAKLMGAPWQVVIPLHGLMTVG
+FDVCHSPKNKNKSYGAFVATMDQKESFRYFSTVNEHIKGQELSEQMSVNMACALRSYQEQHRSLPERILFFRDGVGDGQL
+YQVVNSEVNTLKDRLDEIYKSAGKQEGCRMTFIIVSKRINSRYFTGHRNPVPGTVVDDVITLPERYDFFLVSQAVRIGTV
+SPTSYNVISDNMGLNADKLQMLSYKMTHMYYNYSGTIRVPAVCHYAHKLAFLVAESIN
+>PIWI_DROME/538-829
+LILCLVPNDNAERYSSIKKRGYVDRAVPTQVVTLKTTKNRSLMSIATKIAIQLNCKLGYTPWMIELPLSGLMTIGFDIAK
+STRDRKRAYGALIASMDLQQNSTYFSTVTECSAFDVLANTLWPMIAKALRQYQHEHRKLPSRIVFYRDGVSSGSLKQLFE
+FEVKDIIEKLKTEYARVQLSPPQLAYIVVTRSMNTRFFLNGQNPPPGTIVDDVITLPERYDFYLVSQQVRQGTVSPTSYN
+VLYSSMGLSPEKMQKLTYKMCHLYYNWSGTTRVPAVCQYAKKLATLVGTNLH
+>Q17567_CAEEL/397-708
+MLVVMLADDNKTRYDSLKKYLCVECPIPNQCVNLRTLAGKSKDGGENKNLGSIVLKIVLQMICKTGGALWKVNIPLKSTM
+IVGYDLYHDSTLKGKTVGACVSTTSNDFTQFYSQTRPHENPTQLGNNLTHFVRKSLKQYYDNNDKTLPSRLILYRDGAGD
+GQIPYIKNTEVKLVRDACDAVTDKAAELSNKVQEKIKLAFIIVTKRVNMRILKQGSSSKSAINPQPGTVVDTTVTRPERM
+DFYLVPQFVNQGTVTPVSYNIIHDDTGLGPDKHQQLAFKLCHLYYNWQGTVRVPAPCQYAHKLAFLTAQSLH
+>PIWL1_HUMAN/555-847
+IVVCLLSSNRKDKYDAIKKYLCTDCPTPSQCVVARTLGKQQTVMAIATKIALQMNCKMGGELWRVDIPLKLVMIVGIDCY
+HDMTAGRRSIAGFVASINEGMTRWFSRCIFQDRGQELVDGLKVCLQAALRAWNSCNEYMPSRIIVYRDGVGDGQLKTLVN
+YEVPQFLDCLKSIGRGYNPRLTVIVVKKRVNTRFFAQSGGRLQNPLPGTVIDVEVTRPEWYDFFIVSQAVRSGSVSPTHY
+NVIYDNSGLKPDHIQRLTYKLCHIYYNWPGVIRVPAPCQYAHKLAFLVGQSIH
+>PIWI_ARCFU/110-406
+GIMLVLPEYNTPLYYKLKSYLINSIPSQFMRYDILSNRNLTFYVDNLLVQFVSKLGGKPWILNVDPEKGSDIIIGTGATR
+IDNVNLFCFAMVFKKDGTMLWNEISPIVTSSEYLTYLKSTIKKVVYGFKKSNPDWDVEKLTLHVSGKRPKMKDGETKILK
+ETVEELKKQEMVSRDVKYAILHLNETHPFWVMGDPNNRFHPYEGTKVKLSSKRYLLTLLQPYLKRNGLEMVTPIKPLSVE
+IVSDNWTSEEYYHNVHEILDEIYYLSKMNWRGFRSRNLPVTVNYPKLVAGIIANVNR
+>Y1321_METJA/426-699
+CFALIIGKEKYKDNDYYEILKKQLFDLKIISQNILWENWRKDDKGYMTNNLLIQIMGKLGIKYFILDSKTPYDYIMGLDT
+GLGIFGNHRVGGCTVVYDSEGKIRRIQPIETPAPGERLHLPYVIEYLENKANIDMENKNILFLRDGFIQNSERNDLKEIS
+KELNSNIEVISIRKNNKYKVFTSDYRIGSVFGNDGIFLPHKTPFGSNPVKLSTWLRFNCGNEEGLKINESIMQLLYDLTK
+MNYSALYGEGRYLRIPAPIHYADKFVKALGKNWK
+>O67434_AQUAE/419-694
+LVIVFLEEYPKVDPYKSFLLYDFVKRELLKKMIPSQVILNRTLKNENLKFVLLNVAEQVLAKTGNIPYKLKEIEGKVDAF
+VGIDISRITRDGKTVNAVAFTKIFNSKGELVRYYLTSYPAFGEKLTEKAIGDVFSLLEKLGFKKGSKIVVHRDGRLYRDE
+VAAFKKYGELYGYSLELLEIIKRNNPRFFSNEKFIKGYFYKLSEDSVILATYNQVYEGTHQPIKVRKVYGELPVEVLCSQ
+ILSLTLMNYSSFQPIKLPATVHYSDKITKLMLRGIE
+>Q21495_CAEEL/52-336
+GIVLPTPRIFFRDGQETSLNNQSFRNPTDFAQTGFFVDAKQQLGGLNYVVNSETWNDSGLLLIGLSTAPYLNSYSSENVT
+TIGFVSNTMDHPQKFAGGYKYVKSGSDVFGQVMPEILLNSLRSARKARKIKPMNIVIYLCGMSESRFSIVKEEYVRNCHS
+VFKTLGEKYSPQLTIIVGSKGHSTRLYARGERDQISNLQPGTIVDSVIVSPDYNKFFHCGAVARQGTCKATKYTVLYPES
+PKMEWIQRMTNDLCYMHEIVFHPVSLPAPLYLTAEMAERGTKNLA
+>O16386_CAEEL/548-847
+QLIMFITKSMNNYHTEIKCLEQEFDLLTQDIRFETAVKLAQQQNTRKNIIYKTNMKLGGLNYELRSGVFSNSKRLIIGFE
+TSQRGGLGDAPIAIGFAANMMSHSQQFAGGYMFVKKSADNYGPVIPEILLTILKQAKANRPNDRPDELLIYFSGVSEGQH
+ALVNEYYANQVKAACGLFNESFRPHITLILASKVHNTRVYKSENGGGVCNVEPGTVIDHTIVSPVLSEWYHAGSLARQGT
+SKLVKYSLIFNTKKNEKLSVYERLTNELCYEMQIVFHPTSLPIPLHIAGTYSERGSQMLA
+>O02095_CAEEL/574-878
+QLLFFVVKSRYNYHQQIKALEQKYDVLTQEIRAETAEKVFRQPQTRLNIINKTNMKLGGLNYAIGSEAFNKPNRLIVGFV
+TSQRVGGNPDYPISVGFAANMLKHHQKFAGGYVYVHRDRDVFGSIIKDTLLAIFKTCTEQRGRPDDILLYFNGVSEGQFS
+MINEEFSARVKEACMAFQKEGTPPFRPHITIIASSKAHNERLYKSDKGRIVNLEPGTVVDHTIVSNVYTEWYHASAVARQ
+GTAKATKFTLIFTTKAGPQAEPLWHLEQLTNDLCYDHQIVFHPVGLPVPLYIADRYSQRGAMVLA
+>Q19645_CAEEL/674-996
+PFVLFISDDVPNIHECLKFEERMSDIPTQHVLLKNVKKMRDNIEKKSQGGRRAYDLTLDNIVMKANIKCGGLNYTADIPR
+DLACWNEVSTFVIGMDVAHPDRNAAREGNPSTVGLSCNSAENPYSFIGDFLYTDPRREAIQDEILRKFTDQSVRNFAEIR
+GFPKKVIIFRDGVSFGEETAALKEVEIIEQTIKTAAKSMGHSDYAPKVLAIVVKKRHHTRFYAKGGHHGNMPINPLPDTS
+VGGDIAEYGKRQIFIQAFRPVQGTAKVPSFLVIRDDEEVSDEHVAKMVCAVCSLHQLVNSPTSIPTPVYVAHELAKRGTG
+LYK
+>Q23415_CAEEL/40-350
+KFAFVITDDSITHLHKKYKALEQKSMMVIQDMKISKANSVVKDGKRLTLENVINKTNMKLGGLNYTVSDAKKSMTDEQLI
+IGVGVSAPPAGTKYMMDNKGHLNPQIIGFASNAVANHEFVGDFVLAPSGQDTMASIEDVLKSSIDLFEMNRNTLPKRIII
+YRSGASDGSHASILAYEIPLARATIQGYSKDINLIYIIVTKEHSYRFFRDQLRSGGKATEMNIPPGIVLDSAVTNPACKQ
+FFLNGHTTLQGTAKTPLYTILADDCNAPMDRLEELTYTLCHHHQIVALSTSIPTPLYVANEYAKRGRDLWS
+>O62275_CAEEL/594-924
+TFVFIITDDSITTLHQRYKMIEKDTKMIVQDMKLSKALSVINAGKRLTLENVINKTNVKLGGSNYVFVDAKKQLDSHLII
+GVGISAPPAGTKYAMENKGVLNPNVIGYAYNAQHNQEFSGDFVLNSASQDTLAPIEDIVMHSLNEYQKFHDGGLPRRVIV
+YRTGTSEGNHGSIMAYEIPLARAAMRDFSPDIQLVYIVVSKDHSFRFFKPDLASLASRPQATSSTASRHSAMPAAPKAWD
+LNIAPGILVDSIVTNPACKQFFLNSHITLQGTAKTPLYTVLADDAKVSMTALEDITYKLCHLHQIVGLPTSLPTPLYVAN
+EYAKRGRNLWN
diff --git a/test/scripts/automated/belvu/test6 b/test/scripts/automated/belvu/test6
new file mode 100755
index 0000000..f6a4c03
--- /dev/null
+++ b/test/scripts/automated/belvu/test6
@@ -0,0 +1,24 @@
+#!/bin/ksh
+#
+# Description:
+#   Test saving a tree in new-hampshire format
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences to the saved results
+diffs=`belvu -o tree $data_dir/PF02171_seed.stock >&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
+
diff --git a/test/scripts/automated/belvu/test6_results b/test/scripts/automated/belvu/test6_results
new file mode 100644
index 0000000..2be5514
--- /dev/null
+++ b/test/scripts/automated/belvu/test6_results
@@ -0,0 +1,61 @@
+(
+(
+(
+YQ53_CAEEL/650-977:0.330,
+Q21691_CAEEL/673-1001:0.413)
+0:0.601,
+(
+(
+Q21495_CAEEL/52-336:0.563,
+(
+O16386_CAEEL/548-847:0.296,
+O02095_CAEEL/574-878:0.343)
+0:0.285)
+0:0.366,
+(
+Q19645_CAEEL/674-996:0.744,
+(
+Q23415_CAEEL/40-350:0.240,
+O62275_CAEEL/594-924:0.228)
+0:0.472)
+0:0.079)
+0:0.040)
+0:0.202,
+(
+(
+(
+(
+O48771_ARATH/542-860:0.328,
+Q9ZVD5_ARATH/577-885:0.198)
+0:0.323,
+(
+PINH_ARATH/625-946:0.348,
+AGO1_SCHPO/500-799:0.576)
+0:0.053)
+0:0.052,
+(
+TAG76_CAEEL/660-966:0.450,
+O16720_CAEEL/566-867:0.299)
+0:0.074)
+0:0.248,
+(
+(
+(
+O76922_DROME/555-852:0.423,
+PIWI_DROME/538-829:0.357)
+0:0.130,
+(
+Q17567_CAEEL/397-708:0.503,
+PIWL1_HUMAN/555-847:0.392)
+0:0.017)
+0:0.205,
+(
+PIWI_ARCFU/110-406:1.354,
+(
+Y1321_METJA/426-699:1.101,
+O67434_AQUAE/419-694:1.051)
+0:0.164)
+0:0.397)
+0:0.193)
+0:0.066)
+;
diff --git a/test/scripts/automated/belvu/test7 b/test/scripts/automated/belvu/test7
new file mode 100755
index 0000000..6225d86
--- /dev/null
+++ b/test/scripts/automated/belvu/test7
@@ -0,0 +1,24 @@
+#!/bin/ksh
+#
+# Description:
+#   Test the option to print the conservation table
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences to the saved results
+diffs=`belvu -c $data_dir/PF02171_seed.stock >&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
+
diff --git a/test/scripts/automated/belvu/test7_results b/test/scripts/automated/belvu/test7_results
new file mode 100644
index 0000000..d0a19cb
--- /dev/null
+++ b/test/scripts/automated/belvu/test7_results
@@ -0,0 +1,417 @@
+
+Column Consensus        Identity       Conservation
+------ ---------  -------------------  ------------
+   1       L         4/25   =  16.0 %   0.0
+   2       I         9/25   =  36.0 %   1.1
+   3       V         7/25   =  28.0 %   0.7
+   4       V         6/25   =  24.0 %   0.2
+   5       V         6/25   =  24.0 %   0.4
+   6       L        10/25   =  40.0 %   1.3
+   7       P         7/25   =  28.0 %   0.4
+   8       D         6/25   =  24.0 %   0.4
+   9       R         1/25   =   4.0 %   0.0
+  10       D         4/25   =  16.0 %   0.1
+  11       N         7/25   =  28.0 %   0.6
+  12       K         4/25   =  16.0 %   0.0
+  13       D         7/25   =  28.0 %   0.5
+  14       N         4/25   =  16.0 %   0.0
+  15       D         1/25   =   4.0 %   0.0
+  16       Y        15/25   =  60.0 %   3.3
+  17       H         7/25   =  28.0 %   0.6
+  18       S         4/25   =  16.0 %   0.1
+  19       I         7/25   =  28.0 %   0.3
+  20       K        11/25   =  44.0 %   0.8
+  21       K        14/25   =  56.0 %   2.3
+  22       Y         6/25   =  24.0 %   0.3
+  23       L         6/25   =  24.0 %   0.0
+  24       E         8/25   =  32.0 %   0.2
+  25       T         6/25   =  24.0 %   0.2
+  26       E         6/25   =  24.0 %   0.4
+  27       L         5/25   =  20.0 %   0.0
+  28       G         8/25   =  32.0 %   0.5
+  29       I         8/25   =  32.0 %   0.9
+  30       P         7/25   =  28.0 %   0.2
+  31       T         9/25   =  36.0 %   1.0
+  32       Q        18/25   =  72.0 %   3.4
+  33       C         8/25   =  32.0 %   0.6
+  34       V         7/25   =  28.0 %   0.8
+  35       R         4/25   =  16.0 %   0.0
+  36       L         5/25   =  20.0 %   0.0
+  37       K         7/25   =  28.0 %   0.6
+  38       T         8/25   =  32.0 %   0.5
+  39       A         6/25   =  24.0 %   0.2
+  40       L         3/25   =  12.0 %   0.0
+  41       K         8/25   =  32.0 %   0.7
+  42       R         4/25   =  16.0 %   0.0
+  43       R         1/25   =   4.0 %   0.0
+  44       D         1/25   =   4.0 %   0.0
+  45       N         1/25   =   4.0 %   0.0
+  46       I         1/25   =   4.0 %   0.0
+  47       E         1/25   =   4.0 %   0.0
+  48       Q         2/25   =   8.0 %   0.0
+  49       K         4/25   =  16.0 %   0.1
+  50       D         1/25   =   4.0 %   0.0
+  51       Q         1/25   =   4.0 %   0.0
+  52       G         2/25   =   8.0 %   0.0
+  53       K         2/25   =   8.0 %   0.0
+  54       N         3/25   =  12.0 %   0.1
+  55       A         1/25   =   4.0 %   0.0
+  56       G         5/25   =  20.0 %   0.3
+  57       L         3/25   =  12.0 %   0.0
+  58       P         4/25   =  16.0 %   0.0
+  59       Q         8/25   =  32.0 %   0.3
+  60       T         9/25   =  36.0 %   0.5
+  61       L         8/25   =  32.0 %   0.4
+  62       T         6/25   =  24.0 %   0.2
+  63       N        16/25   =  64.0 %   3.4
+  64       V         8/25   =  32.0 %   1.0
+  65       I         5/25   =  20.0 %   0.3
+  66       L         7/25   =  28.0 %   0.3
+  67       K        13/25   =  52.0 %   2.0
+  68       I         5/25   =  20.0 %   0.3
+  69       N        16/25   =  64.0 %   3.0
+  70       M         4/25   =  16.0 %   0.1
+  71       K        20/25   =  80.0 %   4.6
+  72       L        12/25   =  48.0 %   1.3
+  73       G        20/25   =  80.0 %   5.3
+  74       G        18/25   =  72.0 %   4.1
+  75       L         6/25   =  24.0 %   0.2
+  76       N        14/25   =  56.0 %   2.5
+  77       S         3/25   =  12.0 %   0.0
+  78       L         1/25   =   4.0 %   0.0
+  79       Y         8/25   =  32.0 %   0.5
+  80       L         5/25   =  20.0 %   0.1
+  81       I         6/25   =  24.0 %   0.3
+  82       V         6/25   =  24.0 %   0.1
+  83       D         5/25   =  20.0 %   0.4
+  84       I         6/25   =  24.0 %   0.2
+  85       P         5/25   =  20.0 %   0.1
+  86       L         4/25   =  16.0 %   0.0
+  87       R         2/25   =   8.0 %   0.0
+  88       I         2/25   =   8.0 %   0.0
+  89       A         2/25   =   8.0 %   0.0
+  90       V         4/25   =  16.0 %   0.1
+  91       I         3/25   =  12.0 %   0.1
+  92       N         5/25   =  20.0 %   0.3
+  93       N         5/25   =  20.0 %   0.3
+  94       S         4/25   =  16.0 %   0.0
+  95       P         6/25   =  24.0 %   0.2
+  96       T         8/25   =  32.0 %   0.5
+  97       L         8/25   =  32.0 %   0.9
+  98       R         2/25   =   8.0 %   0.0
+  99       A         1/25   =   4.0 %   0.0
+ 100       K         2/25   =   8.0 %   0.0
+ 101       L         2/25   =   8.0 %   0.0
+ 102       L         1/25   =   4.0 %   0.0
+ 103       A         1/25   =   4.0 %   0.0
+ 104       H         1/25   =   4.0 %   0.0
+ 105       T         1/25   =   4.0 %   0.0
+ 106       Q         2/25   =   8.0 %   0.0
+ 107       I        11/25   =  44.0 %   1.2
+ 108       I         8/25   =  32.0 %   1.0
+ 109       G        21/25   =  84.0 %   6.0
+ 110       F         6/25   =  24.0 %   0.3
+ 111       D        14/25   =  56.0 %   2.6
+ 112       V         8/25   =  32.0 %   0.9
+ 113       S         9/25   =  36.0 %   0.6
+ 114       H        12/25   =  48.0 %   2.1
+ 115       P         7/25   =  28.0 %   0.3
+ 116       P         4/25   =  16.0 %   0.0
+ 117       A         4/25   =  16.0 %   0.0
+ 118       G         9/25   =  36.0 %   0.7
+ 119       T         5/25   =  20.0 %   0.0
+ 120       R         1/25   =   4.0 %   0.0
+ 121       K         2/25   =   8.0 %   0.0
+ 122       D         2/25   =   8.0 %   0.0
+ 123       A         1/25   =   4.0 %   0.0
+ 124       M         2/25   =   8.0 %   0.0
+ 125       R         1/25   =   4.0 %   0.0
+ 126       N         2/25   =   8.0 %   0.0
+ 127       K         2/25   =   8.0 %   0.0
+ 128       R         3/25   =  12.0 %   0.0
+ 129       D         2/25   =   8.0 %   0.0
+ 130       D         5/25   =  20.0 %   0.1
+ 131       N         6/25   =  24.0 %   0.3
+ 132       P        12/25   =  48.0 %   1.7
+ 133       S        10/25   =  40.0 %   0.9
+ 134       V         7/25   =  28.0 %   0.7
+ 135       A         7/25   =  28.0 %   0.3
+ 136       G        10/25   =  40.0 %   1.2
+ 137       F         8/25   =  32.0 %   0.7
+ 138       V        10/25   =  40.0 %   0.8
+ 139       A         8/25   =  32.0 %   0.5
+ 140       S         9/25   =  36.0 %   0.8
+ 141       M         5/25   =  20.0 %   0.2
+ 142       D         7/25   =  28.0 %   0.4
+ 143       W         3/25   =  12.0 %   0.1
+ 144       K         5/25   =  20.0 %   0.2
+ 145       H         6/25   =  24.0 %   0.3
+ 146       N         4/25   =  16.0 %   0.0
+ 147       Q         5/25   =  20.0 %   0.1
+ 148       R         5/25   =  20.0 %   0.4
+ 149       Y         8/25   =  32.0 %   1.2
+ 150       A         5/25   =  20.0 %   0.0
+ 151       G         9/25   =  36.0 %   0.9
+ 152       G         4/25   =  16.0 %   0.0
+ 153       V         7/25   =  28.0 %   0.3
+ 154       R         5/25   =  20.0 %   0.0
+ 155       Y         5/25   =  20.0 %   0.2
+ 156       Q         8/25   =  32.0 %   0.4
+ 157       A         3/25   =  12.0 %   0.0
+ 158       S         5/25   =  20.0 %   0.1
+ 159       G         6/25   =  24.0 %   0.1
+ 160       Q         7/25   =  28.0 %   0.5
+ 161       E        11/25   =  44.0 %   1.7
+ 162       L         6/25   =  24.0 %   0.3
+ 163       I         6/25   =  24.0 %   0.3
+ 164       E         4/25   =  16.0 %   0.0
+ 165       S         4/25   =  16.0 %   0.1
+ 166       L         3/25   =  12.0 %   0.0
+ 167       L         8/25   =  32.0 %   0.8
+ 168       K         6/25   =  24.0 %   0.2
+ 169       D         5/25   =  20.0 %   0.2
+ 170       W         1/25   =   4.0 %   0.0
+ 171       Q         1/25   =   4.0 %   0.0
+ 172       D         1/25   =   4.0 %   0.0
+ 173       E         1/25   =   4.0 %   0.0
+ 174       N         1/25   =   4.0 %   0.0
+ 175       R         1/25   =   4.0 %   0.0
+ 176       G         2/25   =   8.0 %   0.0
+ 177       T         2/25   =   8.0 %   0.0
+ 178       E         1/25   =   4.0 %   0.0
+ 179       D         2/25   =   8.0 %   0.0
+ 180       N         1/25   =   4.0 %   0.0
+ 181       G         3/25   =  12.0 %   0.1
+ 182       I         6/25   =  24.0 %   0.2
+ 183       I         6/25   =  24.0 %   0.7
+ 184       R         4/25   =  16.0 %   0.0
+ 185       E         5/25   =  20.0 %   0.2
+ 186       L         5/25   =  20.0 %   0.0
+ 187       L        13/25   =  52.0 %   1.7
+ 188       R         6/25   =  24.0 %   0.2
+ 189       Q         4/25   =  16.0 %   0.1
+ 190       F         9/25   =  36.0 %   1.3
+ 191       Y         5/25   =  20.0 %   0.1
+ 192       K         6/25   =  24.0 %   0.4
+ 193       N         4/25   =  16.0 %   0.1
+ 194       R         5/25   =  20.0 %   0.1
+ 195       R         4/25   =  16.0 %   0.1
+ 196       Q         3/25   =  12.0 %   0.0
+ 197       R         2/25   =   8.0 %   0.0
+ 198       L         7/25   =  28.0 %   0.3
+ 199       P        18/25   =  72.0 %   4.8
+ 200       E         4/25   =  16.0 %   0.2
+ 201       R        11/25   =  44.0 %   1.4
+ 202       I        15/25   =  60.0 %   2.5
+ 203       I        10/25   =  40.0 %   1.5
+ 204       I         7/25   =  28.0 %   0.8
+ 205       Y        13/25   =  52.0 %   3.2
+ 206       R        17/25   =  68.0 %   2.8
+ 207       D        13/25   =  52.0 %   1.9
+ 208       G        21/25   =  84.0 %   6.0
+ 209       V        11/25   =  44.0 %   1.0
+ 210       S        13/25   =  52.0 %   1.5
+ 211       E        12/25   =  48.0 %   1.7
+ 212       G        15/25   =  60.0 %   3.0
+ 213       Q        11/25   =  44.0 %   1.4
+ 214       F         8/25   =  32.0 %   0.7
+ 215       P         3/25   =  12.0 %   0.0
+ 216       Q         6/25   =  24.0 %   0.3
+ 217       V        10/25   =  40.0 %   1.4
+ 218       L         7/25   =  28.0 %   0.2
+ 219       N         7/25   =  28.0 %   0.5
+ 220       Y         6/25   =  24.0 %   0.2
+ 221       E        18/25   =  72.0 %   3.3
+ 222       V        10/25   =  40.0 %   1.0
+ 223       N         4/25   =  16.0 %   0.1
+ 224       Q         5/25   =  20.0 %   0.1
+ 225       I         8/25   =  32.0 %   0.8
+ 226       K         8/25   =  32.0 %   0.7
+ 227       E         7/25   =  28.0 %   0.6
+ 228       A        11/25   =  44.0 %   1.0
+ 229       C         8/25   =  32.0 %   0.9
+ 230       K         6/25   =  24.0 %   0.3
+ 231       A         2/25   =   8.0 %   0.0
+ 232       A         1/25   =   4.0 %   0.0
+ 233       T         1/25   =   4.0 %   0.0
+ 234       D         1/25   =   4.0 %   0.0
+ 235       K         1/25   =   4.0 %   0.0
+ 236       A         2/25   =   8.0 %   0.0
+ 237       K         3/25   =  12.0 %   0.1
+ 238       S         5/25   =  20.0 %   0.1
+ 239       L         9/25   =  36.0 %   0.7
+ 240       G         6/25   =  24.0 %   0.2
+ 241       H         1/25   =   4.0 %   0.0
+ 242       E         5/25   =  20.0 %   0.2
+ 243       D         4/25   =  16.0 %   0.1
+ 244       Y         9/25   =  36.0 %   1.2
+ 245       N         5/25   =  20.0 %   0.2
+ 246       E         1/25   =   4.0 %   0.0
+ 247       K         1/25   =   4.0 %   0.0
+ 248       P        14/25   =  56.0 %   2.6
+ 249       K         6/25   =  24.0 %   0.3
+ 250       L         8/25   =  32.0 %   0.9
+ 251       T         9/25   =  36.0 %   0.7
+ 252       V         6/25   =  24.0 %   0.3
+ 253       I        17/25   =  68.0 %   2.7
+ 254       V         9/25   =  36.0 %   0.9
+ 255       V        10/25   =  40.0 %   0.9
+ 256       Q         8/25   =  32.0 %   0.6
+ 257       K        17/25   =  68.0 %   3.4
+ 258       R         9/25   =  36.0 %   0.6
+ 259       H        12/25   =  48.0 %   2.2
+ 260       H         9/25   =  36.0 %   1.4
+ 261       T         9/25   =  36.0 %   0.6
+ 262       R        17/25   =  68.0 %   3.4
+ 263       F         9/25   =  36.0 %   1.0
+ 264       F        15/25   =  60.0 %   3.5
+ 265       A         5/25   =  20.0 %   0.1
+ 266       S         4/25   =  16.0 %   0.1
+ 267       D         4/25   =  16.0 %   0.1
+ 268       K         4/25   =  16.0 %   0.0
+ 269       R         4/25   =  16.0 %   0.0
+ 270       D         5/25   =  20.0 %   0.2
+ 271       L         1/25   =   4.0 %   0.0
+ 272       A         1/25   =   4.0 %   0.0
+ 273       S         1/25   =   4.0 %   0.0
+ 274       R         1/25   =   4.0 %   0.0
+ 275       P         1/25   =   4.0 %   0.0
+ 276       Q         1/25   =   4.0 %   0.0
+ 277       A         1/25   =   4.0 %   0.0
+ 278       T         1/25   =   4.0 %   0.0
+ 279       S         1/25   =   4.0 %   0.0
+ 280       S         1/25   =   4.0 %   0.0
+ 281       T         1/25   =   4.0 %   0.0
+ 282       A         1/25   =   4.0 %   0.0
+ 283       S         1/25   =   4.0 %   0.0
+ 284       R         1/25   =   4.0 %   0.0
+ 285       H         1/25   =   4.0 %   0.0
+ 286       S         1/25   =   4.0 %   0.0
+ 287       A         1/25   =   4.0 %   0.0
+ 288       M         1/25   =   4.0 %   0.0
+ 289       P         1/25   =   4.0 %   0.0
+ 290       A         1/25   =   4.0 %   0.0
+ 291       A         1/25   =   4.0 %   0.0
+ 292       G         2/25   =   8.0 %   0.0
+ 293       K         3/25   =  12.0 %   0.0
+ 294       A         3/25   =  12.0 %   0.0
+ 295       G         3/25   =  12.0 %   0.0
+ 296       A         3/25   =  12.0 %   0.0
+ 297       Q         4/25   =  16.0 %   0.0
+ 298       N        18/25   =  72.0 %   4.3
+ 299       P         7/25   =  28.0 %   0.2
+ 300       P         7/25   =  28.0 %   0.3
+ 301       P        15/25   =  60.0 %   3.3
+ 302       G        20/25   =  80.0 %   5.4
+ 303       T        17/25   =  68.0 %   3.0
+ 304       V         8/25   =  32.0 %   0.6
+ 305       V        14/25   =  56.0 %   2.2
+ 306       K         2/25   =   8.0 %   0.0
+ 307       L         2/25   =   8.0 %   0.0
+ 308       S         2/25   =   8.0 %   0.0
+ 309       D        15/25   =  60.0 %   3.1
+ 310       T         4/25   =  16.0 %   0.1
+ 311       V         4/25   =  16.0 %   0.0
+ 312       I        11/25   =  44.0 %   1.3
+ 313       T         9/25   =  36.0 %   0.8
+ 314       S         6/25   =  24.0 %   0.2
+ 315       P        15/25   =  60.0 %   3.1
+ 316       E         5/25   =  20.0 %   0.0
+ 317       Y         5/25   =  20.0 %   0.0
+ 318       Y         5/25   =  20.0 %   0.2
+ 319       D        10/25   =  40.0 %   1.4
+ 320       F        15/25   =  60.0 %   3.1
+ 321       Y        10/25   =  40.0 %   2.0
+ 322       L        13/25   =  52.0 %   1.3
+ 323       C         7/25   =  28.0 %   0.6
+ 324       S        10/25   =  40.0 %   0.9
+ 325       H         8/25   =  32.0 %   0.9
+ 326       A         6/25   =  24.0 %   0.1
+ 327       G         6/25   =  24.0 %   0.1
+ 328       R         6/25   =  24.0 %   0.1
+ 329       Q        12/25   =  48.0 %   1.2
+ 330       G        19/25   =  76.0 %   4.7
+ 331       T        17/25   =  68.0 %   3.2
+ 332       S         6/25   =  24.0 %   0.1
+ 333       K         9/25   =  36.0 %   1.1
+ 334       P        14/25   =  56.0 %   2.7
+ 335       T         7/25   =  28.0 %   0.4
+ 336       H         6/25   =  24.0 %   0.3
+ 337       Y        16/25   =  64.0 %   4.1
+ 338       T         7/25   =  28.0 %   0.3
+ 339       V        12/25   =  48.0 %   1.7
+ 340       L        11/25   =  44.0 %   1.5
+ 341       Y         5/25   =  20.0 %   0.3
+ 342       D        13/25   =  52.0 %   2.2
+ 343       D         7/25   =  28.0 %   0.8
+ 344       C         3/25   =  12.0 %   0.0
+ 345       A         1/25   =   4.0 %   0.0
+ 346       G         1/25   =   4.0 %   0.0
+ 347       P         1/25   =   4.0 %   0.0
+ 348       G         6/25   =  24.0 %   0.2
+ 349       L         6/25   =  24.0 %   0.1
+ 350       S         7/25   =  28.0 %   0.4
+ 351       P         6/25   =  24.0 %   0.2
+ 352       D        10/25   =  40.0 %   1.4
+ 353       E         6/25   =  24.0 %   0.3
+ 354       L         8/25   =  32.0 %   0.7
+ 355       Y         2/25   =   8.0 %   0.0
+ 356       Q        11/25   =  44.0 %   1.4
+ 357       Q         4/25   =  16.0 %   0.2
+ 358       L        14/25   =  56.0 %   2.0
+ 359       H         1/25   =   4.0 %   0.0
+ 360       E         1/25   =   4.0 %   0.0
+ 361       I         1/25   =   4.0 %   0.0
+ 362       L         1/25   =   4.0 %   0.0
+ 363       D         1/25   =   4.0 %   0.0
+ 364       E         1/25   =   4.0 %   0.0
+ 365       T        12/25   =  48.0 %   1.5
+ 366       Y        12/25   =  48.0 %   2.1
+ 367       K         5/25   =  20.0 %   0.1
+ 368       L        15/25   =  60.0 %   2.2
+ 369       C        13/25   =  52.0 %   3.2
+ 370       H         8/25   =  32.0 %   1.2
+ 371       M         5/25   =  20.0 %   0.2
+ 372       Y         9/25   =  36.0 %   1.3
+ 373       Q         8/25   =  32.0 %   0.4
+ 374       R         6/25   =  24.0 %   0.0
+ 375       V         6/25   =  24.0 %   0.0
+ 376       F         5/25   =  20.0 %   0.0
+ 377       Y         1/25   =   4.0 %   0.0
+ 378       G         1/25   =   4.0 %   0.0
+ 379       E         1/25   =   4.0 %   0.0
+ 380       G         1/25   =   4.0 %   0.0
+ 381       R         5/25   =  20.0 %   0.0
+ 382       P         8/25   =  32.0 %   0.6
+ 383       V         8/25   =  32.0 %   0.6
+ 384       S        12/25   =  48.0 %   1.2
+ 385       I         7/25   =  28.0 %   0.9
+ 386       L         1/25   =   4.0 %   0.0
+ 387       L         1/25   =   4.0 %   0.0
+ 388       C         1/25   =   4.0 %   0.0
+ 389       V         1/25   =   4.0 %   0.0
+ 390       F         1/25   =   4.0 %   0.0
+ 391       V         1/25   =   4.0 %   0.0
+ 392       L         1/25   =   4.0 %   0.0
+ 393       S         1/25   =   4.0 %   0.0
+ 394       P        17/25   =  68.0 %   4.2
+ 395       A        10/25   =  40.0 %   0.7
+ 396       P        15/25   =  60.0 %   3.1
+ 397       L         6/25   =  24.0 %   0.4
+ 398       Y        11/25   =  44.0 %   1.8
+ 399       Y        13/25   =  52.0 %   2.3
+ 400       A        18/25   =  72.0 %   2.9
+ 401       H         9/25   =  36.0 %   1.2
+ 402       L         7/25   =  28.0 %   0.2
+ 403       L         7/25   =  28.0 %   0.4
+ 404       A        16/25   =  64.0 %   2.4
+ 405       K         7/25   =  28.0 %   0.2
+ 406       R        11/25   =  44.0 %   0.9
+ 407       G         8/25   =  32.0 %   0.2
+ 408       R         7/25   =  28.0 %   0.2
+ 409       N         4/25   =  16.0 %   0.1
+ 410       N         5/25   =  20.0 %   0.0
+ 411       L         7/25   =  28.0 %   0.3
+ 412       K         7/25   =  28.0 %   0.4
+
+Average conservation = 0.7
diff --git a/test/scripts/automated/belvu/test8 b/test/scripts/automated/belvu/test8
new file mode 100755
index 0000000..635eddf
--- /dev/null
+++ b/test/scripts/automated/belvu/test8
@@ -0,0 +1,25 @@
+#!/bin/ksh
+#
+# Description:
+#   Test the option to print the conservation table
+#   (for a large alignment)
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences to the saved results
+diffs=`belvu -c $data_dir/ALIGN.selex >&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
+
diff --git a/test/scripts/automated/belvu/test8_results b/test/scripts/automated/belvu/test8_results
new file mode 100644
index 0000000..90b78d8
--- /dev/null
+++ b/test/scripts/automated/belvu/test8_results
@@ -0,0 +1,3544 @@
+
+Column Consensus        Identity       Conservation
+------ ---------  -------------------  ------------
+   1       M         3/370  =   0.8 %   0.0
+   2       R         5/370  =   1.4 %   0.0
+   3       E         9/370  =   2.4 %   0.0
+   4       K         9/370  =   2.4 %   0.0
+   5       E         9/370  =   2.4 %   0.0
+   6       Q         9/370  =   2.4 %   0.0
+   7       E        10/370  =   2.7 %   0.0
+   8       R         9/370  =   2.4 %   0.0
+   9       E        14/370  =   3.8 %   0.0
+  10       E        14/370  =   3.8 %   0.0
+  11       Q        14/370  =   3.8 %   0.0
+  12       L        13/370  =   3.5 %   0.0
+  13       M        16/370  =   4.3 %   0.0
+  14       E        19/370  =   5.1 %   0.0
+  15       D        11/370  =   3.0 %   0.0
+  16       K        18/370  =   4.9 %   0.0
+  17       K        18/370  =   4.9 %   0.0
+  18       R        12/370  =   3.2 %   0.0
+  19       K        19/370  =   5.1 %   0.0
+  20       K        16/370  =   4.3 %   0.0
+  21       E        12/370  =   3.2 %   0.0
+  22       D        18/370  =   4.9 %   0.0
+  23       K        19/370  =   5.1 %   0.0
+  24       K        18/370  =   4.9 %   0.0
+  25       K        19/370  =   5.1 %   0.0
+  26       K        18/370  =   4.9 %   0.0
+  27       E        18/370  =   4.9 %   0.0
+  28       A        14/370  =   3.8 %   0.0
+  29       A         8/370  =   2.2 %   0.0
+  30       Q        18/370  =   4.9 %   0.0
+  31       K         7/370  =   1.9 %   0.0
+  32       K        19/370  =   5.1 %   0.0
+  33       V        11/370  =   3.0 %   0.0
+  34       T        15/370  =   4.1 %   0.0
+  35       E        16/370  =   4.3 %   0.0
+  36       Q        19/370  =   5.1 %   0.0
+  37       K        18/370  =   4.9 %   0.0
+  38       T        11/370  =   3.0 %   0.0
+  39       K        19/370  =   5.1 %   0.0
+  40       V        19/370  =   5.1 %   0.0
+  41       P        19/370  =   5.1 %   0.0
+  42       E        20/370  =   5.4 %   0.0
+  43       V        10/370  =   2.7 %   0.0
+  44       T        13/370  =   3.5 %   0.0
+  45       K        19/370  =   5.1 %   0.0
+  46       P        18/370  =   4.9 %   0.0
+  47       L         1/370  =   0.3 %   0.0
+  48       A         1/370  =   0.3 %   0.0
+  49       T         1/370  =   0.3 %   0.0
+  50       P         1/370  =   0.3 %   0.0
+  51       G         1/370  =   0.3 %   0.0
+  52       S        17/370  =   4.6 %   0.0
+  53       L         9/370  =   2.4 %   0.0
+  54       S        20/370  =   5.4 %   0.0
+  55       P         1/370  =   0.3 %   0.0
+  56       Q        20/370  =   5.4 %   0.0
+  57       P        20/370  =   5.4 %   0.0
+  58       T        10/370  =   2.7 %   0.0
+  59       A        11/370  =   3.0 %   0.0
+  60       A        20/370  =   5.4 %   0.0
+  61       S        10/370  =   2.7 %   0.0
+  62       P        11/370  =   3.0 %   0.0
+  63       S         1/370  =   0.3 %   0.0
+  64       S         1/370  =   0.3 %   0.0
+  65       P         1/370  =   0.3 %   0.0
+  66       T         1/370  =   0.3 %   0.0
+  67       P         1/370  =   0.3 %   0.0
+  68       G         1/370  =   0.3 %   0.0
+  69       A         1/370  =   0.3 %   0.0
+  70       I         9/370  =   2.4 %   0.0
+  71       G        11/370  =   3.0 %   0.0
+  72       S        12/370  =   3.2 %   0.0
+  73       S        12/370  =   3.2 %   0.0
+  74       P        10/370  =   2.7 %   0.0
+  75       S        17/370  =   4.6 %   0.0
+  76       P        11/370  =   3.0 %   0.0
+  77       G         1/370  =   0.3 %   0.0
+  78       P         1/370  =   0.3 %   0.0
+  79       T         1/370  =   0.3 %   0.0
+  80       P         1/370  =   0.3 %   0.0
+  81       S         1/370  =   0.3 %   0.0
+  82       A         1/370  =   0.3 %   0.0
+  83       S         1/370  =   0.3 %   0.0
+  84       P         1/370  =   0.3 %   0.0
+  85       S         1/370  =   0.3 %   0.0
+  86       P         1/370  =   0.3 %   0.0
+  87       A         1/370  =   0.3 %   0.0
+  88       T         1/370  =   0.3 %   0.0
+  89       L         1/370  =   0.3 %   0.0
+  90       G         1/370  =   0.3 %   0.0
+  91       P         1/370  =   0.3 %   0.0
+  92       G         1/370  =   0.3 %   0.0
+  93       S         1/370  =   0.3 %   0.0
+  94       A         1/370  =   0.3 %   0.0
+  95       A         1/370  =   0.3 %   0.0
+  96       A         1/370  =   0.3 %   0.0
+  97       P        12/370  =   3.2 %   0.0
+  98       V        10/370  =   2.7 %   0.0
+  99       N        10/370  =   2.7 %   0.0
+ 100       G        12/370  =   3.2 %   0.0
+ 101       G        14/370  =   3.8 %   0.0
+ 102       N        18/370  =   4.9 %   0.0
+ 103       N        20/370  =   5.4 %   0.0
+ 104       A        19/370  =   5.1 %   0.0
+ 105       K        21/370  =   5.7 %   0.0
+ 106       R        20/370  =   5.4 %   0.0
+ 107       W         1/370  =   0.3 %   0.0
+ 108       V        10/370  =   2.7 %   0.0
+ 109       A        14/370  =   3.8 %   0.0
+ 110       V        11/370  =   3.0 %   0.0
+ 111       P        13/370  =   3.5 %   0.0
+ 112       N        18/370  =   4.9 %   0.0
+ 113       G        15/370  =   4.1 %   0.0
+ 114       Q        25/370  =   6.8 %   0.0
+ 115       P        20/370  =   5.4 %   0.0
+ 116       P        16/370  =   4.3 %   0.0
+ 117       P         2/370  =   0.5 %   0.0
+ 118       P         2/370  =   0.5 %   0.0
+ 119       Q         2/370  =   0.5 %   0.0
+ 120       Q         2/370  =   0.5 %   0.0
+ 121       Q         3/370  =   0.8 %   0.0
+ 122       P         1/370  =   0.3 %   0.0
+ 123       P         1/370  =   0.3 %   0.0
+ 124       A         1/370  =   0.3 %   0.0
+ 125       A         1/370  =   0.3 %   0.0
+ 126       S         1/370  =   0.3 %   0.0
+ 127       G         1/370  =   0.3 %   0.0
+ 128       P         1/370  =   0.3 %   0.0
+ 129       S         1/370  =   0.3 %   0.0
+ 130       P         1/370  =   0.3 %   0.0
+ 131       A         1/370  =   0.3 %   0.0
+ 132       G         1/370  =   0.3 %   0.0
+ 133       N         1/370  =   0.3 %   0.0
+ 134       G         1/370  =   0.3 %   0.0
+ 135       S         1/370  =   0.3 %   0.0
+ 136       A         1/370  =   0.3 %   0.0
+ 137       N         1/370  =   0.3 %   0.0
+ 138       S         1/370  =   0.3 %   0.0
+ 139       G         1/370  =   0.3 %   0.0
+ 140       Q         3/370  =   0.8 %   0.0
+ 141       Q         2/370  =   0.5 %   0.0
+ 142       Q         3/370  =   0.8 %   0.0
+ 143       Q         3/370  =   0.8 %   0.0
+ 144       Q         2/370  =   0.5 %   0.0
+ 145       S        10/370  =   2.7 %   0.0
+ 146       A        11/370  =   3.0 %   0.0
+ 147       A        10/370  =   2.7 %   0.0
+ 148       Q         3/370  =   0.8 %   0.0
+ 149       Q         2/370  =   0.5 %   0.0
+ 150       Q         3/370  =   0.8 %   0.0
+ 151       P         3/370  =   0.8 %   0.0
+ 152       P         1/370  =   0.3 %   0.0
+ 153       Q         1/370  =   0.3 %   0.0
+ 154       Q         1/370  =   0.3 %   0.0
+ 155       P         1/370  =   0.3 %   0.0
+ 156       Q         1/370  =   0.3 %   0.0
+ 157       P         1/370  =   0.3 %   0.0
+ 158       P         1/370  =   0.3 %   0.0
+ 159       Q         1/370  =   0.3 %   0.0
+ 160       P         1/370  =   0.3 %   0.0
+ 161       P         1/370  =   0.3 %   0.0
+ 162       Q         1/370  =   0.3 %   0.0
+ 163       Q         1/370  =   0.3 %   0.0
+ 164       P         1/370  =   0.3 %   0.0
+ 165       P         1/370  =   0.3 %   0.0
+ 166       Q         1/370  =   0.3 %   0.0
+ 167       Q         1/370  =   0.3 %   0.0
+ 168       P         1/370  =   0.3 %   0.0
+ 169       P         1/370  =   0.3 %   0.0
+ 170       Q         1/370  =   0.3 %   0.0
+ 171       P         1/370  =   0.3 %   0.0
+ 172       A         1/370  =   0.3 %   0.0
+ 173       Q         3/370  =   0.8 %   0.0
+ 174       A         3/370  =   0.8 %   0.0
+ 175       L         3/370  =   0.8 %   0.0
+ 176       P         3/370  =   0.8 %   0.0
+ 177       R        22/370  =   5.9 %   0.0
+ 178       Y        22/370  =   5.9 %   0.0
+ 179       M        12/370  =   3.2 %   0.0
+ 180       P        24/370  =   6.5 %   0.0
+ 181       R        22/370  =   5.9 %   0.0
+ 182       E        22/370  =   5.9 %   0.0
+ 183       V        22/370  =   5.9 %   0.0
+ 184       P        22/370  =   5.9 %   0.0
+ 185       P        24/370  =   6.5 %   0.0
+ 186       R        22/370  =   5.9 %   0.0
+ 187       F        22/370  =   5.9 %   0.0
+ 188       R        21/370  =   5.7 %   0.0
+ 189       C        11/370  =   3.0 %   0.0
+ 190       Q        19/370  =   5.1 %   0.0
+ 191       A         1/370  =   0.3 %   0.0
+ 192       Q         1/370  =   0.3 %   0.0
+ 193       K         1/370  =   0.3 %   0.0
+ 194       P         2/370  =   0.5 %   0.0
+ 195       Q        25/370  =   6.8 %   0.0
+ 196       D        12/370  =   3.2 %   0.0
+ 197       H        20/370  =   5.4 %   0.0
+ 198       K        22/370  =   5.9 %   0.0
+ 199       Q        13/370  =   3.5 %   0.0
+ 200       L        21/370  =   5.7 %   0.0
+ 201       L        21/370  =   5.7 %   0.0
+ 202       K        21/370  =   5.7 %   0.0
+ 203       R        21/370  =   5.7 %   0.0
+ 204       G        22/370  =   5.9 %   0.0
+ 205       Q        23/370  =   6.2 %   0.0
+ 206       P        15/370  =   4.1 %   0.0
+ 207       P        12/370  =   3.2 %   0.0
+ 208       P        19/370  =   5.1 %   0.0
+ 209       P         9/370  =   2.4 %   0.0
+ 210       S        12/370  =   3.2 %   0.0
+ 211       C        10/370  =   2.7 %   0.0
+ 212       M        12/370  =   3.2 %   0.0
+ 213       L        12/370  =   3.2 %   0.0
+ 214       L        17/370  =   4.6 %   0.0
+ 215       G        19/370  =   5.1 %   0.0
+ 216       G        12/370  =   3.2 %   0.0
+ 217       G        13/370  =   3.5 %   0.0
+ 218       A        10/370  =   2.7 %   0.0
+ 219       G        12/370  =   3.2 %   0.0
+ 220       P        10/370  =   2.7 %   0.0
+ 221       P        11/370  =   3.0 %   0.0
+ 222       P        11/370  =   3.0 %   0.0
+ 223       S         1/370  =   0.3 %   0.0
+ 224       C         8/370  =   2.2 %   0.0
+ 225       T        10/370  =   2.7 %   0.0
+ 226       A        10/370  =   2.7 %   0.0
+ 227       P        13/370  =   3.5 %   0.0
+ 228       A         2/370  =   0.5 %   0.0
+ 229       G        13/370  =   3.5 %   0.0
+ 230       A        13/370  =   3.5 %   0.0
+ 231       N        10/370  =   2.7 %   0.0
+ 232       P        12/370  =   3.2 %   0.0
+ 233       N        10/370  =   2.7 %   0.0
+ 234       N        16/370  =   4.3 %   0.0
+ 235       A         9/370  =   2.4 %   0.0
+ 236       Q         6/370  =   1.6 %   0.0
+ 237       P         7/370  =   1.9 %   0.0
+ 238       Q        15/370  =   4.1 %   0.0
+ 239       V         9/370  =   2.4 %   0.0
+ 240       T         9/370  =   2.4 %   0.0
+ 241       G        19/370  =   5.1 %   0.0
+ 242       D         1/370  =   0.3 %   0.0
+ 243       A        11/370  =   3.0 %   0.0
+ 244       L         9/370  =   2.4 %   0.0
+ 245       L        10/370  =   2.7 %   0.0
+ 246       Q        12/370  =   3.2 %   0.0
+ 247       S        17/370  =   4.6 %   0.0
+ 248       E         9/370  =   2.4 %   0.0
+ 249       S        16/370  =   4.3 %   0.0
+ 250       G        10/370  =   2.7 %   0.0
+ 251       T         9/370  =   2.4 %   0.0
+ 252       A         9/370  =   2.4 %   0.0
+ 253       P         9/370  =   2.4 %   0.0
+ 254       D         8/370  =   2.2 %   0.0
+ 255       S        10/370  =   2.7 %   0.0
+ 256       T         8/370  =   2.2 %   0.0
+ 257       L         8/370  =   2.2 %   0.0
+ 258       G         9/370  =   2.4 %   0.0
+ 259       G        12/370  =   3.2 %   0.0
+ 260       A        10/370  =   2.7 %   0.0
+ 261       S         1/370  =   0.3 %   0.0
+ 262       A        10/370  =   2.7 %   0.0
+ 263       A         9/370  =   2.4 %   0.0
+ 264       S        16/370  =   4.3 %   0.0
+ 265       N        11/370  =   3.0 %   0.0
+ 266       Y        18/370  =   4.9 %   0.0
+ 267       A        10/370  =   2.7 %   0.0
+ 268       N        20/370  =   5.4 %   0.0
+ 269       S        15/370  =   4.1 %   0.0
+ 270       T         9/370  =   2.4 %   0.0
+ 271       W        13/370  =   3.5 %   0.0
+ 272       G        19/370  =   5.1 %   0.0
+ 273       P         9/370  =   2.4 %   0.0
+ 274       G         9/370  =   2.4 %   0.0
+ 275       A         8/370  =   2.2 %   0.0
+ 276       S        16/370  =   4.3 %   0.0
+ 277       S         8/370  =   2.2 %   0.0
+ 278       N         8/370  =   2.2 %   0.0
+ 279       S        13/370  =   3.5 %   0.0
+ 280       T         1/370  =   0.3 %   0.0
+ 281       D         1/370  =   0.3 %   0.0
+ 282       K         1/370  =   0.3 %   0.0
+ 283       S         1/370  =   0.3 %   0.0
+ 284       N         1/370  =   0.3 %   0.0
+ 285       G         9/370  =   2.4 %   0.0
+ 286       T         7/370  =   1.9 %   0.0
+ 287       S        16/370  =   4.3 %   0.0
+ 288       P         8/370  =   2.2 %   0.0
+ 289       N        12/370  =   3.2 %   0.0
+ 290       P         9/370  =   2.4 %   0.0
+ 291       I         8/370  =   2.2 %   0.0
+ 292       H         9/370  =   2.4 %   0.0
+ 293       I         8/370  =   2.2 %   0.0
+ 294       W        16/370  =   4.3 %   0.0
+ 295       D        15/370  =   4.1 %   0.0
+ 296       K        15/370  =   4.1 %   0.0
+ 297       V        18/370  =   4.9 %   0.0
+ 298       I        16/370  =   4.3 %   0.0
+ 299       V        10/370  =   2.7 %   0.0
+ 300       D        22/370  =   5.9 %   0.0
+ 301       G        10/370  =   2.7 %   0.0
+ 302       S         1/370  =   0.3 %   0.0
+ 303       S        13/370  =   3.5 %   0.0
+ 304       D        14/370  =   3.8 %   0.0
+ 305       M         8/370  =   2.2 %   0.0
+ 306       E        22/370  =   5.9 %   0.0
+ 307       E        10/370  =   2.7 %   0.0
+ 308       W        22/370  =   5.9 %   0.0
+ 309       P        22/370  =   5.9 %   0.0
+ 310       S        12/370  =   3.2 %   0.0
+ 311       I        15/370  =   4.1 %   0.0
+ 312       A        10/370  =   2.7 %   0.0
+ 313       G        10/370  =   2.7 %   0.0
+ 314       S         1/370  =   0.3 %   0.0
+ 315       S         9/370  =   2.4 %   0.0
+ 316       D        18/370  =   4.9 %   0.0
+ 317       S         1/370  =   0.3 %   0.0
+ 318       T        12/370  =   3.2 %   0.0
+ 319       E        20/370  =   5.4 %   0.0
+ 320       S        13/370  =   3.5 %   0.0
+ 321       A        12/370  =   3.2 %   0.0
+ 322       S        18/370  =   4.9 %   0.0
+ 323       E        19/370  =   5.1 %   0.0
+ 324       C        12/370  =   3.2 %   0.0
+ 325       T         9/370  =   2.4 %   0.0
+ 326       T        13/370  =   3.5 %   0.0
+ 327       D        21/370  =   5.7 %   0.0
+ 328       N         9/370  =   2.4 %   0.0
+ 329       D        12/370  =   3.2 %   0.0
+ 330       S        21/370  =   5.7 %   0.0
+ 331       G         1/370  =   0.3 %   0.0
+ 332       P         1/370  =   0.3 %   0.0
+ 333       A        19/370  =   5.1 %   0.0
+ 334       S        20/370  =   5.4 %   0.0
+ 335       N        17/370  =   4.6 %   0.0
+ 336       S         9/370  =   2.4 %   0.0
+ 337       G        17/370  =   4.6 %   0.0
+ 338       S        24/370  =   6.5 %   0.0
+ 339       E        20/370  =   5.4 %   0.0
+ 340       K        10/370  =   2.7 %   0.0
+ 341       S        13/370  =   3.5 %   0.0
+ 342       I         6/370  =   1.6 %   0.0
+ 343       T        13/370  =   3.5 %   0.0
+ 344       L         8/370  =   2.2 %   0.0
+ 345       M         6/370  =   1.6 %   0.0
+ 346       A         2/370  =   0.5 %   0.0
+ 347       G         1/370  =   0.3 %   0.0
+ 348       N         1/370  =   0.3 %   0.0
+ 349       A         1/370  =   0.3 %   0.0
+ 350       Q         1/370  =   0.3 %   0.0
+ 351       G         1/370  =   0.3 %   0.0
+ 352       T         1/370  =   0.3 %   0.0
+ 353       M         1/370  =   0.3 %   0.0
+ 354       T         2/370  =   0.5 %   0.0
+ 355       G         2/370  =   0.5 %   0.0
+ 356       A         9/370  =   2.4 %   0.0
+ 357       P         8/370  =   2.2 %   0.0
+ 358       G        19/370  =   5.1 %   0.0
+ 359       S        16/370  =   4.3 %   0.0
+ 360       T        18/370  =   4.9 %   0.0
+ 361       T        12/370  =   3.2 %   0.0
+ 362       S        14/370  =   3.8 %   0.0
+ 363       H         1/370  =   0.3 %   0.0
+ 364       F         1/370  =   0.3 %   0.0
+ 365       P         1/370  =   0.3 %   0.0
+ 366       A         1/370  =   0.3 %   0.0
+ 367       N         1/370  =   0.3 %   0.0
+ 368       H         1/370  =   0.3 %   0.0
+ 369       L         1/370  =   0.3 %   0.0
+ 370       S         1/370  =   0.3 %   0.0
+ 371       N         9/370  =   2.4 %   0.0
+ 372       K        17/370  =   4.6 %   0.0
+ 373       D         6/370  =   1.6 %   0.0
+ 374       G         7/370  =   1.9 %   0.0
+ 375       L         6/370  =   1.6 %   0.0
+ 376       R         4/370  =   1.1 %   0.0
+ 377       N         4/370  =   1.1 %   0.0
+ 378       S         4/370  =   1.1 %   0.0
+ 379       T         7/370  =   1.9 %   0.0
+ 380       G         4/370  =   1.1 %   0.0
+ 381       G         4/370  =   1.1 %   0.0
+ 382       G         4/370  =   1.1 %   0.0
+ 383       S         5/370  =   1.4 %   0.0
+ 384       G         5/370  =   1.4 %   0.0
+ 385       G        11/370  =   3.0 %   0.0
+ 386       K        12/370  =   3.2 %   0.0
+ 387       G        17/370  =   4.6 %   0.0
+ 388       S        12/370  =   3.2 %   0.0
+ 389       Q        11/370  =   3.0 %   0.0
+ 390       C         9/370  =   2.4 %   0.0
+ 391       Q        15/370  =   4.1 %   0.0
+ 392       S        17/370  =   4.6 %   0.0
+ 393       V         2/370  =   0.5 %   0.0
+ 394       V         2/370  =   0.5 %   0.0
+ 395       G         2/370  =   0.5 %   0.0
+ 396       S         2/370  =   0.5 %   0.0
+ 397       A         8/370  =   2.2 %   0.0
+ 398       S        18/370  =   4.9 %   0.0
+ 399       N        13/370  =   3.5 %   0.0
+ 400       Q         5/370  =   1.4 %   0.0
+ 401       S         6/370  =   1.6 %   0.0
+ 402       A         6/370  =   1.6 %   0.0
+ 403       L         6/370  =   1.6 %   0.0
+ 404       G         6/370  =   1.6 %   0.0
+ 405       A         1/370  =   0.3 %   0.0
+ 406       V         1/370  =   0.3 %   0.0
+ 407       M         1/370  =   0.3 %   0.0
+ 408       I         1/370  =   0.3 %   0.0
+ 409       G         1/370  =   0.3 %   0.0
+ 410       V         1/370  =   0.3 %   0.0
+ 411       A         7/370  =   1.9 %   0.0
+ 412       G         6/370  =   1.6 %   0.0
+ 413       G         5/370  =   1.4 %   0.0
+ 414       A         3/370  =   0.8 %   0.0
+ 415       N         6/370  =   1.6 %   0.0
+ 416       G        23/370  =   6.2 %   0.0
+ 417       N        15/370  =   4.1 %   0.0
+ 418       G        13/370  =   3.5 %   0.0
+ 419       C         9/370  =   2.4 %   0.0
+ 420       N         8/370  =   2.2 %   0.0
+ 421       L         8/370  =   2.2 %   0.0
+ 422       G        15/370  =   4.1 %   0.0
+ 423       V        15/370  =   4.1 %   0.0
+ 424       W        23/370  =   6.2 %   0.0
+ 425       G        14/370  =   3.8 %   0.0
+ 426       V         6/370  =   1.6 %   0.0
+ 427       A         6/370  =   1.6 %   0.0
+ 428       T         6/370  =   1.6 %   0.0
+ 429       G         3/370  =   0.8 %   0.0
+ 430       S         6/370  =   1.6 %   0.0
+ 431       S         6/370  =   1.6 %   0.0
+ 432       S        17/370  =   4.6 %   0.0
+ 433       D        10/370  =   2.7 %   0.0
+ 434       P        12/370  =   3.2 %   0.0
+ 435       K        10/370  =   2.7 %   0.0
+ 436       G         1/370  =   0.3 %   0.0
+ 437       A        15/370  =   4.1 %   0.0
+ 438       I         4/370  =   1.1 %   0.0
+ 439       I         6/370  =   1.6 %   0.0
+ 440       S         6/370  =   1.6 %   0.0
+ 441       T         6/370  =   1.6 %   0.0
+ 442       C         6/370  =   1.6 %   0.0
+ 443       Q         6/370  =   1.6 %   0.0
+ 444       K        10/370  =   2.7 %   0.0
+ 445       P         1/370  =   0.3 %   0.0
+ 446       G         1/370  =   0.3 %   0.0
+ 447       S         1/370  =   0.3 %   0.0
+ 448       N         1/370  =   0.3 %   0.0
+ 449       S         1/370  =   0.3 %   0.0
+ 450       G         1/370  =   0.3 %   0.0
+ 451       N         1/370  =   0.3 %   0.0
+ 452       V         1/370  =   0.3 %   0.0
+ 453       T         1/370  =   0.3 %   0.0
+ 454       G         1/370  =   0.3 %   0.0
+ 455       P         1/370  =   0.3 %   0.0
+ 456       P         1/370  =   0.3 %   0.0
+ 457       H         1/370  =   0.3 %   0.0
+ 458       Q         1/370  =   0.3 %   0.0
+ 459       S        23/370  =   6.2 %   0.0
+ 460       V        23/370  =   6.2 %   0.0
+ 461       Q         9/370  =   2.4 %   0.0
+ 462       S         9/370  =   2.4 %   0.0
+ 463       S        10/370  =   2.7 %   0.0
+ 464       N        10/370  =   2.7 %   0.0
+ 465       S        14/370  =   3.8 %   0.0
+ 466       K        14/370  =   3.8 %   0.0
+ 467       T         7/370  =   1.9 %   0.0
+ 468       E        13/370  =   3.5 %   0.0
+ 469       S         6/370  =   1.6 %   0.0
+ 470       N        12/370  =   3.2 %   0.0
+ 471       N        14/370  =   3.8 %   0.0
+ 472       N        15/370  =   4.1 %   0.0
+ 473       G        16/370  =   4.3 %   0.0
+ 474       L         9/370  =   2.4 %   0.0
+ 475       G        17/370  =   4.6 %   0.0
+ 476       N        10/370  =   2.7 %   0.0
+ 477       W        16/370  =   4.3 %   0.0
+ 478       P         1/370  =   0.3 %   0.0
+ 479       A         1/370  =   0.3 %   0.0
+ 480       N         1/370  =   0.3 %   0.0
+ 481       S         1/370  =   0.3 %   0.0
+ 482       P         1/370  =   0.3 %   0.0
+ 483       P         1/370  =   0.3 %   0.0
+ 484       S         1/370  =   0.3 %   0.0
+ 485       R        10/370  =   2.7 %   0.0
+ 486       N        13/370  =   3.5 %   0.0
+ 487       V        14/370  =   3.8 %   0.0
+ 488       S        17/370  =   4.6 %   0.0
+ 489       G        19/370  =   5.1 %   0.0
+ 490       V         1/370  =   0.3 %   0.0
+ 491       N         1/370  =   0.3 %   0.0
+ 492       S        11/370  =   3.0 %   0.0
+ 493       S        15/370  =   4.1 %   0.0
+ 494       N        13/370  =   3.5 %   0.0
+ 495       I         1/370  =   0.3 %   0.0
+ 496       T         1/370  =   0.3 %   0.0
+ 497       T         1/370  =   0.3 %   0.0
+ 498       S         1/370  =   0.3 %   0.0
+ 499       G         1/370  =   0.3 %   0.0
+ 500       N         1/370  =   0.3 %   0.0
+ 501       T         1/370  =   0.3 %   0.0
+ 502       P         1/370  =   0.3 %   0.0
+ 503       C         1/370  =   0.3 %   0.0
+ 504       I         9/370  =   2.4 %   0.0
+ 505       G        10/370  =   2.7 %   0.0
+ 506       P         8/370  =   2.2 %   0.0
+ 507       G        22/370  =   5.9 %   0.0
+ 508       S         9/370  =   2.4 %   0.0
+ 509       N        16/370  =   4.3 %   0.0
+ 510       F        10/370  =   2.7 %   0.0
+ 511       S        16/370  =   4.3 %   0.0
+ 512       S         1/370  =   0.3 %   0.0
+ 513       P         1/370  =   0.3 %   0.0
+ 514       N         1/370  =   0.3 %   0.0
+ 515       F         1/370  =   0.3 %   0.0
+ 516       N         1/370  =   0.3 %   0.0
+ 517       L         2/370  =   0.5 %   0.0
+ 518       N        17/370  =   4.6 %   0.0
+ 519       L        16/370  =   4.3 %   0.0
+ 520       N        26/370  =   7.0 %   0.0
+ 521       P        19/370  =   5.1 %   0.0
+ 522       N        19/370  =   5.1 %   0.0
+ 523       S        15/370  =   4.1 %   0.0
+ 524       N        26/370  =   7.0 %   0.0
+ 525       P        18/370  =   4.9 %   0.0
+ 526       S        12/370  =   3.2 %   0.0
+ 527       A        26/370  =   7.0 %   0.0
+ 528       W        26/370  =   7.0 %   0.1
+ 529       P        26/370  =   7.0 %   0.0
+ 530       V        13/370  =   3.5 %   0.0
+ 531       L        25/370  =   6.8 %   0.0
+ 532       V        10/370  =   2.7 %   0.0
+ 533       Q        10/370  =   2.7 %   0.0
+ 534       E        17/370  =   4.6 %   0.0
+ 535       G        24/370  =   6.5 %   0.0
+ 536       T        13/370  =   3.5 %   0.0
+ 537       S         8/370  =   2.2 %   0.0
+ 538       R         9/370  =   2.4 %   0.0
+ 539       K        16/370  =   4.3 %   0.0
+ 540       G        26/370  =   7.0 %   0.0
+ 541       N         6/370  =   1.6 %   0.0
+ 542       P         6/370  =   1.6 %   0.0
+ 543       S         7/370  =   1.9 %   0.0
+ 544       G         1/370  =   0.3 %   0.0
+ 545       N         1/370  =   0.3 %   0.0
+ 546       A         1/370  =   0.3 %   0.0
+ 547       N         1/370  =   0.3 %   0.0
+ 548       S         1/370  =   0.3 %   0.0
+ 549       I         1/370  =   0.3 %   0.0
+ 550       S         1/370  =   0.3 %   0.0
+ 551       P         1/370  =   0.3 %   0.0
+ 552       P         1/370  =   0.3 %   0.0
+ 553       Q         1/370  =   0.3 %   0.0
+ 554       S         1/370  =   0.3 %   0.0
+ 555       T         1/370  =   0.3 %   0.0
+ 556       S         1/370  =   0.3 %   0.0
+ 557       N         1/370  =   0.3 %   0.0
+ 558       S         1/370  =   0.3 %   0.0
+ 559       C         1/370  =   0.3 %   0.0
+ 560       N         1/370  =   0.3 %   0.0
+ 561       Q         1/370  =   0.3 %   0.0
+ 562       I         1/370  =   0.3 %   0.0
+ 563       G         1/370  =   0.3 %   0.0
+ 564       P         1/370  =   0.3 %   0.0
+ 565       S         6/370  =   1.6 %   0.0
+ 566       I         6/370  =   1.6 %   0.0
+ 567       C         6/370  =   1.6 %   0.0
+ 568       S         6/370  =   1.6 %   0.0
+ 569       P        15/370  =   4.1 %   0.0
+ 570       V        14/370  =   3.8 %   0.0
+ 571       E         9/370  =   2.4 %   0.0
+ 572       S        10/370  =   2.7 %   0.0
+ 573       D         7/370  =   1.9 %   0.0
+ 574       S         9/370  =   2.4 %   0.0
+ 575       S        16/370  =   4.3 %   0.0
+ 576       N        13/370  =   3.5 %   0.0
+ 577       S        10/370  =   2.7 %   0.0
+ 578       N         9/370  =   2.4 %   0.0
+ 579       I         9/370  =   2.4 %   0.0
+ 580       Q        22/370  =   5.9 %   0.0
+ 581       N         6/370  =   1.6 %   0.0
+ 582       G         7/370  =   1.9 %   0.0
+ 583       V         1/370  =   0.3 %   0.0
+ 584       A         1/370  =   0.3 %   0.0
+ 585       S         1/370  =   0.3 %   0.0
+ 586       P         1/370  =   0.3 %   0.0
+ 587       Q         1/370  =   0.3 %   0.0
+ 588       N         6/370  =   1.6 %   0.0
+ 589       P         7/370  =   1.9 %   0.0
+ 590       V        12/370  =   3.2 %   0.0
+ 591       S        16/370  =   4.3 %   0.0
+ 592       T        18/370  =   4.9 %   0.0
+ 593       V         9/370  =   2.4 %   0.0
+ 594       G        26/370  =   7.0 %   0.0
+ 595       S         1/370  =   0.3 %   0.0
+ 596       Q        15/370  =   4.1 %   0.0
+ 597       M         8/370  =   2.2 %   0.0
+ 598       S        10/370  =   2.7 %   0.0
+ 599       N        15/370  =   4.1 %   0.0
+ 600       L         6/370  =   1.6 %   0.0
+ 601       A         1/370  =   0.3 %   0.0
+ 602       G         1/370  =   0.3 %   0.0
+ 603       D         1/370  =   0.3 %   0.0
+ 604       W         1/370  =   0.3 %   0.0
+ 605       V         1/370  =   0.3 %   0.0
+ 606       G         1/370  =   0.3 %   0.0
+ 607       L         1/370  =   0.3 %   0.0
+ 608       V         1/370  =   0.3 %   0.0
+ 609       L         6/370  =   1.6 %   0.0
+ 610       E         9/370  =   2.4 %   0.0
+ 611       Q        22/370  =   5.9 %   0.0
+ 612       Q         9/370  =   2.4 %   0.0
+ 613       I         7/370  =   1.9 %   0.0
+ 614       N         7/370  =   1.9 %   0.0
+ 615       S        23/370  =   6.2 %   0.0
+ 616       K        16/370  =   4.3 %   0.0
+ 617       M        10/370  =   2.7 %   0.0
+ 618       E        10/370  =   2.7 %   0.0
+ 619       N         8/370  =   2.2 %   0.0
+ 620       A         9/370  =   2.4 %   0.0
+ 621       S        15/370  =   4.1 %   0.0
+ 622       T        14/370  =   3.8 %   0.0
+ 623       N         9/370  =   2.4 %   0.0
+ 624       F         9/370  =   2.4 %   0.0
+ 625       N         8/370  =   2.2 %   0.0
+ 626       W         7/370  =   1.9 %   0.0
+ 627       G         7/370  =   1.9 %   0.0
+ 628       S         8/370  =   2.2 %   0.0
+ 629       L         7/370  =   1.9 %   0.0
+ 630       Q         7/370  =   1.9 %   0.0
+ 631       E         7/370  =   1.9 %   0.0
+ 632       T         7/370  =   1.9 %   0.0
+ 633       C         7/370  =   1.9 %   0.0
+ 634       E         7/370  =   1.9 %   0.0
+ 635       P         4/370  =   1.1 %   0.0
+ 636       E         7/370  =   1.9 %   0.0
+ 637       V         7/370  =   1.9 %   0.0
+ 638       S         7/370  =   1.9 %   0.0
+ 639       G         7/370  =   1.9 %   0.0
+ 640       T         6/370  =   1.6 %   0.0
+ 641       Q         7/370  =   1.9 %   0.0
+ 642       K         7/370  =   1.9 %   0.0
+ 643       V         7/370  =   1.9 %   0.0
+ 644       S         8/370  =   2.2 %   0.0
+ 645       V        15/370  =   4.1 %   0.0
+ 646       S        24/370  =   6.5 %   0.0
+ 647       G        17/370  =   4.6 %   0.0
+ 648       R         9/370  =   2.4 %   0.0
+ 649       E         9/370  =   2.4 %   0.0
+ 650       Q        22/370  =   5.9 %   0.0
+ 651       A         9/370  =   2.4 %   0.0
+ 652       Q        15/370  =   4.1 %   0.0
+ 653       N         9/370  =   2.4 %   0.0
+ 654       H         9/370  =   2.4 %   0.0
+ 655       N        16/370  =   4.3 %   0.0
+ 656       T         1/370  =   0.3 %   0.0
+ 657       E         1/370  =   0.3 %   0.0
+ 658       T        21/370  =   5.7 %   0.0
+ 659       D        17/370  =   4.6 %   0.0
+ 660       G        25/370  =   6.8 %   0.0
+ 661       P        25/370  =   6.8 %   0.0
+ 662       N        16/370  =   4.3 %   0.0
+ 663       N        21/370  =   5.7 %   0.0
+ 664       T         9/370  =   2.4 %   0.0
+ 665       N        14/370  =   3.8 %   0.0
+ 666       T        14/370  =   3.8 %   0.0
+ 667       M         6/370  =   1.6 %   0.0
+ 668       N         7/370  =   1.9 %   0.0
+ 669       N         1/370  =   0.3 %   0.0
+ 670       T         1/370  =   0.3 %   0.0
+ 671       T         1/370  =   0.3 %   0.0
+ 672       S         6/370  =   1.6 %   0.0
+ 673       S         6/370  =   1.6 %   0.0
+ 674       P         6/370  =   1.6 %   0.0
+ 675       N        20/370  =   5.4 %   0.0
+ 676       F         7/370  =   1.9 %   0.0
+ 677       M         8/370  =   2.2 %   0.0
+ 678       N        13/370  =   3.5 %   0.0
+ 679       S         8/370  =   2.2 %   0.0
+ 680       S        15/370  =   4.1 %   0.0
+ 681       S         8/370  =   2.2 %   0.0
+ 682       P        15/370  =   4.1 %   0.0
+ 683       N        21/370  =   5.7 %   0.0
+ 684       S         8/370  =   2.2 %   0.0
+ 685       G         7/370  =   1.9 %   0.0
+ 686       S         7/370  =   1.9 %   0.0
+ 687       M         7/370  =   1.9 %   0.0
+ 688       Q         7/370  =   1.9 %   0.0
+ 689       N        20/370  =   5.4 %   0.0
+ 690       N         7/370  =   1.9 %   0.0
+ 691       G        13/370  =   3.5 %   0.0
+ 692       M        13/370  =   3.5 %   0.0
+ 693       P        14/370  =   3.8 %   0.0
+ 694       F         7/370  =   1.9 %   0.0
+ 695       S         6/370  =   1.6 %   0.0
+ 696       G        13/370  =   3.5 %   0.0
+ 697       M        13/370  =   3.5 %   0.0
+ 698       G        20/370  =   5.4 %   0.0
+ 699       A        13/370  =   3.5 %   0.0
+ 700       G         8/370  =   2.2 %   0.0
+ 701       R         7/370  =   1.9 %   0.0
+ 702       V         8/370  =   2.2 %   0.0
+ 703       S        14/370  =   3.8 %   0.0
+ 704       R         7/370  =   1.9 %   0.0
+ 705       M         7/370  =   1.9 %   0.0
+ 706       N         7/370  =   1.9 %   0.0
+ 707       H         7/370  =   1.9 %   0.0
+ 708       P         7/370  =   1.9 %   0.0
+ 709       Q         7/370  =   1.9 %   0.0
+ 710       T         7/370  =   1.9 %   0.0
+ 711       D         7/370  =   1.9 %   0.0
+ 712       A        14/370  =   3.8 %   0.0
+ 713       P        21/370  =   5.7 %   0.0
+ 714       S        14/370  =   3.8 %   0.0
+ 715       A         7/370  =   1.9 %   0.0
+ 716       N         7/370  =   1.9 %   0.0
+ 717       N         7/370  =   1.9 %   0.0
+ 718       G        14/370  =   3.8 %   0.0
+ 719       S         6/370  =   1.6 %   0.0
+ 720       V         4/370  =   1.1 %   0.0
+ 721       T         1/370  =   0.3 %   0.0
+ 722       P         1/370  =   0.3 %   0.0
+ 723       Q         1/370  =   0.3 %   0.0
+ 724       S         4/370  =   1.1 %   0.0
+ 725       Q         4/370  =   1.1 %   0.0
+ 726       D         7/370  =   1.9 %   0.0
+ 727       S        11/370  =   3.0 %   0.0
+ 728       L         7/370  =   1.9 %   0.0
+ 729       S         7/370  =   1.9 %   0.0
+ 730       H         7/370  =   1.9 %   0.0
+ 731       L         7/370  =   1.9 %   0.0
+ 732       S         7/370  =   1.9 %   0.0
+ 733       N         7/370  =   1.9 %   0.0
+ 734       G         7/370  =   1.9 %   0.0
+ 735       E         8/370  =   2.2 %   0.0
+ 736       S        12/370  =   3.2 %   0.0
+ 737       G        14/370  =   3.8 %   0.0
+ 738       S        10/370  =   2.7 %   0.0
+ 739       S         1/370  =   0.3 %   0.0
+ 740       A         1/370  =   0.3 %   0.0
+ 741       G         7/370  =   1.9 %   0.0
+ 742       G        21/370  =   5.7 %   0.0
+ 743       S        14/370  =   3.8 %   0.0
+ 744       W         7/370  =   1.9 %   0.0
+ 745       G        15/370  =   4.1 %   0.0
+ 746       T         8/370  =   2.2 %   0.0
+ 747       A         7/370  =   1.9 %   0.0
+ 748       W        14/370  =   3.8 %   0.0
+ 749       G        20/370  =   5.4 %   0.0
+ 750       A         8/370  =   2.2 %   0.0
+ 751       S        13/370  =   3.5 %   0.0
+ 752       G        14/370  =   3.8 %   0.0
+ 753       S         7/370  =   1.9 %   0.0
+ 754       N        13/370  =   3.5 %   0.0
+ 755       T         7/370  =   1.9 %   0.0
+ 756       A         7/370  =   1.9 %   0.0
+ 757       S        14/370  =   3.8 %   0.0
+ 758       G        20/370  =   5.4 %   0.0
+ 759       D         7/370  =   1.9 %   0.0
+ 760       S         9/370  =   2.4 %   0.0
+ 761       N        13/370  =   3.5 %   0.0
+ 762       S        12/370  =   3.2 %   0.0
+ 763       G        19/370  =   5.1 %   0.0
+ 764       N         7/370  =   1.9 %   0.0
+ 765       N         8/370  =   2.2 %   0.0
+ 766       G         8/370  =   2.2 %   0.0
+ 767       N         7/370  =   1.9 %   0.0
+ 768       N        20/370  =   5.4 %   0.0
+ 769       G        21/370  =   5.7 %   0.0
+ 770       Q         7/370  =   1.9 %   0.0
+ 771       A         7/370  =   1.9 %   0.0
+ 772       N         8/370  =   2.2 %   0.0
+ 773       G         8/370  =   2.2 %   0.0
+ 774       D        21/370  =   5.7 %   0.0
+ 775       T        14/370  =   3.8 %   0.0
+ 776       V        14/370  =   3.8 %   0.0
+ 777       N        14/370  =   3.8 %   0.0
+ 778       A         7/370  =   1.9 %   0.0
+ 779       P         1/370  =   0.3 %   0.0
+ 780       N         1/370  =   0.3 %   0.0
+ 781       P         1/370  =   0.3 %   0.0
+ 782       A        14/370  =   3.8 %   0.0
+ 783       L        14/370  =   3.8 %   0.0
+ 784       M         8/370  =   2.2 %   0.0
+ 785       Q        14/370  =   3.8 %   0.0
+ 786       K        13/370  =   3.5 %   0.0
+ 787       G         8/370  =   2.2 %   0.0
+ 788       I         5/370  =   1.4 %   0.0
+ 789       N        14/370  =   3.8 %   0.0
+ 790       G        20/370  =   5.4 %   0.0
+ 791       K         1/370  =   0.3 %   0.0
+ 792       I         1/370  =   0.3 %   0.0
+ 793       S        14/370  =   3.8 %   0.0
+ 794       K         7/370  =   1.9 %   0.0
+ 795       G         7/370  =   1.9 %   0.0
+ 796       A         7/370  =   1.9 %   0.0
+ 797       S         8/370  =   2.2 %   0.0
+ 798       Q         7/370  =   1.9 %   0.0
+ 799       D         7/370  =   1.9 %   0.0
+ 800       N         8/370  =   2.2 %   0.0
+ 801       N        14/370  =   3.8 %   0.0
+ 802       N         8/370  =   2.2 %   0.0
+ 803       D         1/370  =   0.3 %   0.0
+ 804       Q         1/370  =   0.3 %   0.0
+ 805       N         1/370  =   0.3 %   0.0
+ 806       N         9/370  =   2.4 %   0.0
+ 807       S         9/370  =   2.4 %   0.0
+ 808       G        15/370  =   4.1 %   0.0
+ 809       G        20/370  =   5.4 %   0.0
+ 810       G        14/370  =   3.8 %   0.0
+ 811       V         8/370  =   2.2 %   0.0
+ 812       W        23/370  =   6.2 %   0.0
+ 813       N         7/370  =   1.9 %   0.0
+ 814       S         9/370  =   2.4 %   0.0
+ 815       G        22/370  =   5.9 %   0.0
+ 816       P        13/370  =   3.5 %   0.0
+ 817       Q         7/370  =   1.9 %   0.0
+ 818       N         7/370  =   1.9 %   0.0
+ 819       S        13/370  =   3.5 %   0.0
+ 820       P         1/370  =   0.3 %   0.0
+ 821       N         1/370  =   0.3 %   0.0
+ 822       Q         1/370  =   0.3 %   0.0
+ 823       P         1/370  =   0.3 %   0.0
+ 824       P         6/370  =   1.6 %   0.0
+ 825       N         8/370  =   2.2 %   0.0
+ 826       D         8/370  =   2.2 %   0.0
+ 827       N         8/370  =   2.2 %   0.0
+ 828       K         7/370  =   1.9 %   0.0
+ 829       W        21/370  =   5.7 %   0.0
+ 830       G        22/370  =   5.9 %   0.0
+ 831       S         9/370  =   2.4 %   0.0
+ 832       G        21/370  =   5.7 %   0.0
+ 833       N        15/370  =   4.1 %   0.0
+ 834       G        14/370  =   3.8 %   0.0
+ 835       A         7/370  =   1.9 %   0.0
+ 836       G         1/370  =   0.3 %   0.0
+ 837       N        12/370  =   3.2 %   0.0
+ 838       G         4/370  =   1.1 %   0.0
+ 839       Y         1/370  =   0.3 %   0.0
+ 840       S         1/370  =   0.3 %   0.0
+ 841       A         1/370  =   0.3 %   0.0
+ 842       G         1/370  =   0.3 %   0.0
+ 843       Q         1/370  =   0.3 %   0.0
+ 844       A         1/370  =   0.3 %   0.0
+ 845       P         1/370  =   0.3 %   0.0
+ 846       E         1/370  =   0.3 %   0.0
+ 847       N         1/370  =   0.3 %   0.0
+ 848       D         1/370  =   0.3 %   0.0
+ 849       A         1/370  =   0.3 %   0.0
+ 850       Q         1/370  =   0.3 %   0.0
+ 851       T         1/370  =   0.3 %   0.0
+ 852       T         1/370  =   0.3 %   0.0
+ 853       M         1/370  =   0.3 %   0.0
+ 854       G         1/370  =   0.3 %   0.0
+ 855       N         1/370  =   0.3 %   0.0
+ 856       I         3/370  =   0.8 %   0.0
+ 857       S        16/370  =   4.3 %   0.0
+ 858       G        15/370  =   4.1 %   0.0
+ 859       G        10/370  =   2.7 %   0.0
+ 860       S        14/370  =   3.8 %   0.0
+ 861       R         7/370  =   1.9 %   0.0
+ 862       G        13/370  =   3.5 %   0.0
+ 863       A         8/370  =   2.2 %   0.0
+ 864       W        22/370  =   5.9 %   0.0
+ 865       G        14/370  =   3.8 %   0.0
+ 866       Q         7/370  =   1.9 %   0.0
+ 867       P        20/370  =   5.4 %   0.0
+ 868       A         8/370  =   2.2 %   0.0
+ 869       G         8/370  =   2.2 %   0.0
+ 870       S        14/370  =   3.8 %   0.0
+ 871       T         9/370  =   2.4 %   0.0
+ 872       G         8/370  =   2.2 %   0.0
+ 873       S         2/370  =   0.5 %   0.0
+ 874       S         1/370  =   0.3 %   0.0
+ 875       S         1/370  =   0.3 %   0.0
+ 876       S         1/370  =   0.3 %   0.0
+ 877       S         1/370  =   0.3 %   0.0
+ 878       S         1/370  =   0.3 %   0.0
+ 879       S         1/370  =   0.3 %   0.0
+ 880       T         1/370  =   0.3 %   0.0
+ 881       S         1/370  =   0.3 %   0.0
+ 882       N         1/370  =   0.3 %   0.0
+ 883       T         8/370  =   2.2 %   0.0
+ 884       S         8/370  =   2.2 %   0.0
+ 885       L        13/370  =   3.5 %   0.0
+ 886       G         7/370  =   1.9 %   0.0
+ 887       S         8/370  =   2.2 %   0.0
+ 888       N         5/370  =   1.4 %   0.0
+ 889       G        14/370  =   3.8 %   0.0
+ 890       E        22/370  =   5.9 %   0.0
+ 891       W        22/370  =   5.9 %   0.0
+ 892       S         8/370  =   2.2 %   0.0
+ 893       K        14/370  =   3.8 %   0.0
+ 894       A         1/370  =   0.3 %   0.0
+ 895       L         7/370  =   1.9 %   0.0
+ 896       P        23/370  =   6.2 %   0.0
+ 897       N        13/370  =   3.5 %   0.0
+ 898       Q        13/370  =   3.5 %   0.0
+ 899       Q         7/370  =   1.9 %   0.0
+ 900       N         8/370  =   2.2 %   0.0
+ 901       S        20/370  =   5.4 %   0.0
+ 902       S        13/370  =   3.5 %   0.0
+ 903       D         6/370  =   1.6 %   0.0
+ 904       I         6/370  =   1.6 %   0.0
+ 905       N         3/370  =   0.8 %   0.0
+ 906       G         6/370  =   1.6 %   0.0
+ 907       K         6/370  =   1.6 %   0.0
+ 908       G         6/370  =   1.6 %   0.0
+ 909       D         7/370  =   1.9 %   0.0
+ 910       G         9/370  =   2.4 %   0.0
+ 911       A        15/370  =   4.1 %   0.0
+ 912       W        15/370  =   4.1 %   0.0
+ 913       D        13/370  =   3.5 %   0.0
+ 914       N        14/370  =   3.8 %   0.0
+ 915       G         9/370  =   2.4 %   0.0
+ 916       K        13/370  =   3.5 %   0.0
+ 917       K         5/370  =   1.4 %   0.0
+ 918       L         3/370  =   0.8 %   0.0
+ 919       L         1/370  =   0.3 %   0.0
+ 920       T         7/370  =   1.9 %   0.0
+ 921       N         9/370  =   2.4 %   0.0
+ 922       G        16/370  =   4.3 %   0.0
+ 923       W         8/370  =   2.2 %   0.0
+ 924       P         8/370  =   2.2 %   0.0
+ 925       S         9/370  =   2.4 %   0.0
+ 926       P        13/370  =   3.5 %   0.0
+ 927       E        15/370  =   4.1 %   0.0
+ 928       N         9/370  =   2.4 %   0.0
+ 929       Q        14/370  =   3.8 %   0.0
+ 930       A         1/370  =   0.3 %   0.0
+ 931       P         6/370  =   1.6 %   0.0
+ 932       G        14/370  =   3.8 %   0.0
+ 933       N         7/370  =   1.9 %   0.0
+ 934       A         8/370  =   2.2 %   0.0
+ 935       Q         8/370  =   2.2 %   0.0
+ 936       A        14/370  =   3.8 %   0.0
+ 937       N         7/370  =   1.9 %   0.0
+ 938       S        15/370  =   4.1 %   0.0
+ 939       W        14/370  =   3.8 %   0.0
+ 940       G         8/370  =   2.2 %   0.0
+ 941       R         7/370  =   1.9 %   0.0
+ 942       S         8/370  =   2.2 %   0.0
+ 943       Q         7/370  =   1.9 %   0.0
+ 944       S        16/370  =   4.3 %   0.0
+ 945       S        20/370  =   5.4 %   0.0
+ 946       V         9/370  =   2.4 %   0.0
+ 947       T         8/370  =   2.2 %   0.0
+ 948       A         8/370  =   2.2 %   0.0
+ 949       G         1/370  =   0.3 %   0.0
+ 950       W         1/370  =   0.3 %   0.0
+ 951       E         7/370  =   1.9 %   0.0
+ 952       V         7/370  =   1.9 %   0.0
+ 953       G        14/370  =   3.8 %   0.0
+ 954       G        22/370  =   5.9 %   0.0
+ 955       T         7/370  =   1.9 %   0.0
+ 956       V         7/370  =   1.9 %   0.0
+ 957       Q         8/370  =   2.2 %   0.0
+ 958       S        22/370  =   5.9 %   0.0
+ 959       D        11/370  =   3.0 %   0.0
+ 960       G        23/370  =   6.2 %   0.0
+ 961       S        22/370  =   5.9 %   0.0
+ 962       G         8/370  =   2.2 %   0.0
+ 963       N        11/370  =   3.0 %   0.0
+ 964       H        13/370  =   3.5 %   0.0
+ 965       S        10/370  =   2.7 %   0.0
+ 966       A         8/370  =   2.2 %   0.0
+ 967       G        24/370  =   6.5 %   0.0
+ 968       S        15/370  =   4.1 %   0.0
+ 969       S        10/370  =   2.7 %   0.0
+ 970       D         9/370  =   2.4 %   0.0
+ 971       S        10/370  =   2.7 %   0.0
+ 972       H         7/370  =   1.9 %   0.0
+ 973       G         8/370  =   2.2 %   0.0
+ 974       T        11/370  =   3.0 %   0.0
+ 975       G        21/370  =   5.7 %   0.0
+ 976       E        12/370  =   3.2 %   0.0
+ 977       R         8/370  =   2.2 %   0.0
+ 978       S         8/370  =   2.2 %   0.0
+ 979       S         7/370  =   1.9 %   0.0
+ 980       R        22/370  =   5.9 %   0.0
+ 981       D        15/370  =   4.1 %   0.0
+ 982       R         8/370  =   2.2 %   0.0
+ 983       R         8/370  =   2.2 %   0.0
+ 984       K         7/370  =   1.9 %   0.0
+ 985       I         8/370  =   2.2 %   0.0
+ 986       D        14/370  =   3.8 %   0.0
+ 987       Q         8/370  =   2.2 %   0.0
+ 988       Q        13/370  =   3.5 %   0.0
+ 989       A         8/370  =   2.2 %   0.0
+ 990       H         7/370  =   1.9 %   0.0
+ 991       L        16/370  =   4.3 %   0.0
+ 992       Q        20/370  =   5.4 %   0.0
+ 993       S         9/370  =   2.4 %   0.0
+ 994       L        10/370  =   2.7 %   0.0
+ 995       L        15/370  =   4.1 %   0.0
+ 996       P         8/370  =   2.2 %   0.0
+ 997       R        23/370  =   6.2 %   0.0
+ 998       T        14/370  =   3.8 %   0.0
+ 999       D        23/370  =   6.2 %   0.0
+1000       L        23/370  =   6.2 %   0.0
+1001       D        23/370  =   6.2 %   0.0
+1002       P        23/370  =   6.2 %   0.0
+1003       R        23/370  =   6.2 %   0.0
+1004       V        23/370  =   6.2 %   0.0
+1005       L        23/370  =   6.2 %   0.0
+1006       S        40/370  =  10.8 %   0.0
+1007       N        23/370  =   6.2 %   0.0
+1008       D        22/370  =   5.9 %   0.0
+1009       G        45/370  =  12.2 %   0.1
+1010       W        46/370  =  12.4 %   0.2
+1011       G        46/370  =  12.4 %   0.1
+1012       Q        23/370  =   6.2 %   0.0
+1013       T        24/370  =   6.5 %   0.0
+1014       H        17/370  =   4.6 %   0.0
+1015       V        30/370  =   8.1 %   0.0
+1016       N        21/370  =   5.7 %   0.0
+1017       Q        46/370  =  12.4 %   0.1
+1018       D        30/370  =   8.1 %   0.0
+1019       T        45/370  =  12.2 %   0.1
+1020       N        16/370  =   4.3 %   0.0
+1021       W        46/370  =  12.4 %   0.2
+1022       E        23/370  =   6.2 %   0.0
+1023       V        24/370  =   6.5 %   0.0
+1024       P        22/370  =   5.9 %   0.0
+1025       E        14/370  =   3.8 %   0.0
+1026       S        36/370  =   9.7 %   0.0
+1027       P        43/370  =  11.6 %   0.1
+1028       E        23/370  =   6.2 %   0.0
+1029       P        29/370  =   7.8 %   0.0
+1030       E        21/370  =   5.7 %   0.0
+1031       N        14/370  =   3.8 %   0.0
+1032       P         1/370  =   0.3 %   0.0
+1033       E         1/370  =   0.3 %   0.0
+1034       P         1/370  =   0.3 %   0.0
+1035       K        40/370  =  10.8 %   0.1
+1036       D        14/370  =   3.8 %   0.0
+1037       D        26/370  =   7.0 %   0.0
+1038       N        15/370  =   4.1 %   0.0
+1039       G         1/370  =   0.3 %   0.0
+1040       G        35/370  =   9.5 %   0.1
+1041       G         1/370  =   0.3 %   0.0
+1042       G         1/370  =   0.3 %   0.0
+1043       N         1/370  =   0.3 %   0.0
+1044       G         1/370  =   0.3 %   0.0
+1045       G         1/370  =   0.3 %   0.0
+1046       P         1/370  =   0.3 %   0.0
+1047       G         2/370  =   0.5 %   0.0
+1048       T        22/370  =   5.9 %   0.0
+1049       E        22/370  =   5.9 %   0.0
+1050       A        15/370  =   4.1 %   0.0
+1051       A         1/370  =   0.3 %   0.0
+1052       S         1/370  =   0.3 %   0.0
+1053       G         1/370  =   0.3 %   0.0
+1054       G         1/370  =   0.3 %   0.0
+1055       G         1/370  =   0.3 %   0.0
+1056       N         1/370  =   0.3 %   0.0
+1057       G         1/370  =   0.3 %   0.0
+1058       W        35/370  =   9.5 %   0.1
+1059       G        19/370  =   5.1 %   0.0
+1060       S        19/370  =   5.1 %   0.0
+1061       A         9/370  =   2.4 %   0.0
+1062       A        25/370  =   6.8 %   0.0
+1063       T        22/370  =   5.9 %   0.0
+1064       G         1/370  =   0.3 %   0.0
+1065       W         1/370  =   0.3 %   0.0
+1066       K         1/370  =   0.3 %   0.0
+1067       P         1/370  =   0.3 %   0.0
+1068       Q        20/370  =   5.4 %   0.0
+1069       T        15/370  =   4.1 %   0.0
+1070       M         3/370  =   0.8 %   0.0
+1071       W         3/370  =   0.8 %   0.0
+1072       K         3/370  =   0.8 %   0.0
+1073       I        13/370  =   3.5 %   0.0
+1074       N        41/370  =  11.1 %   0.1
+1075       S        21/370  =   5.7 %   0.0
+1076       G        42/370  =  11.4 %   0.1
+1077       T        23/370  =   6.2 %   0.0
+1078       D        14/370  =   3.8 %   0.0
+1079       L        19/370  =   5.1 %   0.0
+1080       W        21/370  =   5.7 %   0.0
+1081       E        21/370  =   5.7 %   0.0
+1082       S        20/370  =   5.4 %   0.0
+1083       N        23/370  =   6.2 %   0.0
+1084       L        22/370  =   5.9 %   0.0
+1085       N         7/370  =   1.9 %   0.0
+1086       N         4/370  =   1.1 %   0.0
+1087       G         3/370  =   0.8 %   0.0
+1088       G         3/370  =   0.8 %   0.0
+1089       Q         3/370  =   0.8 %   0.0
+1090       N         6/370  =   1.6 %   0.0
+1091       R        17/370  =   4.6 %   0.0
+1092       N        37/370  =  10.0 %   0.1
+1093       D         7/370  =   1.9 %   0.0
+1094       G         5/370  =   1.4 %   0.0
+1095       Q         5/370  =   1.4 %   0.0
+1096       P         5/370  =   1.4 %   0.0
+1097       P         4/370  =   1.1 %   0.0
+1098       T        13/370  =   3.5 %   0.0
+1099       Q        16/370  =   4.3 %   0.0
+1100       Q        13/370  =   3.5 %   0.0
+1101       V        22/370  =   5.9 %   0.0
+1102       P         8/370  =   2.2 %   0.0
+1103       G         1/370  =   0.3 %   0.0
+1104       K         9/370  =   2.4 %   0.0
+1105       S        21/370  =   5.7 %   0.0
+1106       G        23/370  =   6.2 %   0.0
+1107       W        30/370  =   8.1 %   0.1
+1108       V         5/370  =   1.4 %   0.0
+1109       S         5/370  =   1.4 %   0.0
+1110       S         4/370  =   1.1 %   0.0
+1111       P         6/370  =   1.6 %   0.0
+1112       P         6/370  =   1.6 %   0.0
+1113       G        25/370  =   6.8 %   0.0
+1114       A         9/370  =   2.4 %   0.0
+1115       P        16/370  =   4.3 %   0.0
+1116       P        17/370  =   4.6 %   0.0
+1117       A        13/370  =   3.5 %   0.0
+1118       S        18/370  =   4.9 %   0.0
+1119       T        19/370  =   5.1 %   0.0
+1120       L         9/370  =   2.4 %   0.0
+1121       G         9/370  =   2.4 %   0.0
+1122       G         9/370  =   2.4 %   0.0
+1123       S         9/370  =   2.4 %   0.0
+1124       W        42/370  =  11.4 %   0.1
+1125       G        34/370  =   9.2 %   0.0
+1126       D        20/370  =   5.4 %   0.0
+1127       D         9/370  =   2.4 %   0.0
+1128       D         9/370  =   2.4 %   0.0
+1129       N         1/370  =   0.3 %   0.0
+1130       G         1/370  =   0.3 %   0.0
+1131       N         1/370  =   0.3 %   0.0
+1132       V         1/370  =   0.3 %   0.0
+1133       V         1/370  =   0.3 %   0.0
+1134       P         1/370  =   0.3 %   0.0
+1135       A         1/370  =   0.3 %   0.0
+1136       N         6/370  =   1.6 %   0.0
+1137       D         9/370  =   2.4 %   0.0
+1138       G         9/370  =   2.4 %   0.0
+1139       S        15/370  =   4.1 %   0.0
+1140       K        14/370  =   3.8 %   0.0
+1141       N        17/370  =   4.6 %   0.0
+1142       S        13/370  =   3.5 %   0.0
+1143       N         6/370  =   1.6 %   0.0
+1144       V         1/370  =   0.3 %   0.0
+1145       C         7/370  =   1.9 %   0.0
+1146       G        11/370  =   3.0 %   0.0
+1147       G        32/370  =   8.6 %   0.0
+1148       G        16/370  =   4.3 %   0.0
+1149       W        44/370  =  11.9 %   0.2
+1150       G        19/370  =   5.1 %   0.0
+1151       D        21/370  =   5.7 %   0.0
+1152       G         1/370  =   0.3 %   0.0
+1153       S         1/370  =   0.3 %   0.0
+1154       G         1/370  =   0.3 %   0.0
+1155       Y         1/370  =   0.3 %   0.0
+1156       K         1/370  =   0.3 %   0.0
+1157       D        18/370  =   4.9 %   0.0
+1158       S        17/370  =   4.6 %   0.0
+1159       V         4/370  =   1.1 %   0.0
+1160       S        13/370  =   3.5 %   0.0
+1161       A         1/370  =   0.3 %   0.0
+1162       P         1/370  =   0.3 %   0.0
+1163       A         1/370  =   0.3 %   0.0
+1164       G         2/370  =   0.5 %   0.0
+1165       N        20/370  =   5.4 %   0.0
+1166       T         7/370  =   1.9 %   0.0
+1167       G         7/370  =   1.9 %   0.0
+1168       M         7/370  =   1.9 %   0.0
+1169       I         4/370  =   1.1 %   0.0
+1170       N        13/370  =   3.5 %   0.0
+1171       E         2/370  =   0.5 %   0.0
+1172       P         2/370  =   0.5 %   0.0
+1173       S        20/370  =   5.4 %   0.0
+1174       S        19/370  =   5.1 %   0.0
+1175       N        13/370  =   3.5 %   0.0
+1176       N         6/370  =   1.6 %   0.0
+1177       A        11/370  =   3.0 %   0.0
+1178       A         8/370  =   2.2 %   0.0
+1179       A         6/370  =   1.6 %   0.0
+1180       G         6/370  =   1.6 %   0.0
+1181       N         4/370  =   1.1 %   0.0
+1182       N         5/370  =   1.4 %   0.0
+1183       A         5/370  =   1.4 %   0.0
+1184       G         5/370  =   1.4 %   0.0
+1185       G         5/370  =   1.4 %   0.0
+1186       N         4/370  =   1.1 %   0.0
+1187       G         3/370  =   0.8 %   0.0
+1188       A         1/370  =   0.3 %   0.0
+1189       A         2/370  =   0.5 %   0.0
+1190       A         2/370  =   0.5 %   0.0
+1191       A         2/370  =   0.5 %   0.0
+1192       G         1/370  =   0.3 %   0.0
+1193       A         1/370  =   0.3 %   0.0
+1194       G         2/370  =   0.5 %   0.0
+1195       A         1/370  =   0.3 %   0.0
+1196       Q         1/370  =   0.3 %   0.0
+1197       A         2/370  =   0.5 %   0.0
+1198       A         1/370  =   0.3 %   0.0
+1199       I         1/370  =   0.3 %   0.0
+1200       A         1/370  =   0.3 %   0.0
+1201       G         2/370  =   0.5 %   0.0
+1202       V         1/370  =   0.3 %   0.0
+1203       N         1/370  =   0.3 %   0.0
+1204       P         1/370  =   0.3 %   0.0
+1205       S         1/370  =   0.3 %   0.0
+1206       G         1/370  =   0.3 %   0.0
+1207       V         1/370  =   0.3 %   0.0
+1208       N         1/370  =   0.3 %   0.0
+1209       V         1/370  =   0.3 %   0.0
+1210       G         2/370  =   0.5 %   0.0
+1211       I         1/370  =   0.3 %   0.0
+1212       G         1/370  =   0.3 %   0.0
+1213       G         1/370  =   0.3 %   0.0
+1214       S         1/370  =   0.3 %   0.0
+1215       G         1/370  =   0.3 %   0.0
+1216       G         3/370  =   0.8 %   0.0
+1217       A         1/370  =   0.3 %   0.0
+1218       G         1/370  =   0.3 %   0.0
+1219       G         2/370  =   0.5 %   0.0
+1220       G         2/370  =   0.5 %   0.0
+1221       G         2/370  =   0.5 %   0.0
+1222       P         2/370  =   0.5 %   0.0
+1223       Q         2/370  =   0.5 %   0.0
+1224       G         2/370  =   0.5 %   0.0
+1225       G         7/370  =   1.9 %   0.0
+1226       P         5/370  =   1.4 %   0.0
+1227       G         6/370  =   1.6 %   0.0
+1228       G         5/370  =   1.4 %   0.0
+1229       V         7/370  =   1.9 %   0.0
+1230       V         6/370  =   1.6 %   0.0
+1231       S         5/370  =   1.4 %   0.0
+1232       K         6/370  =   1.6 %   0.0
+1233       S         8/370  =   2.2 %   0.0
+1234       G        13/370  =   3.5 %   0.0
+1235       P         7/370  =   1.9 %   0.0
+1236       A         6/370  =   1.6 %   0.0
+1237       W        43/370  =  11.6 %   0.1
+1238       G        24/370  =   6.5 %   0.0
+1239       G        29/370  =   7.8 %   0.0
+1240       A         1/370  =   0.3 %   0.0
+1241       A         1/370  =   0.3 %   0.0
+1242       G         1/370  =   0.3 %   0.0
+1243       G        22/370  =   5.9 %   0.0
+1244       V        12/370  =   3.2 %   0.0
+1245       A         1/370  =   0.3 %   0.0
+1246       V         1/370  =   0.3 %   0.0
+1247       G         1/370  =   0.3 %   0.0
+1248       A         1/370  =   0.3 %   0.0
+1249       G         2/370  =   0.5 %   0.0
+1250       P        11/370  =   3.0 %   0.0
+1251       D        13/370  =   3.5 %   0.0
+1252       E        13/370  =   3.5 %   0.0
+1253       G         1/370  =   0.3 %   0.0
+1254       V         1/370  =   0.3 %   0.0
+1255       K         8/370  =   2.2 %   0.0
+1256       P         1/370  =   0.3 %   0.0
+1257       G         1/370  =   0.3 %   0.0
+1258       G         1/370  =   0.3 %   0.0
+1259       V         1/370  =   0.3 %   0.0
+1260       L         9/370  =   2.4 %   0.0
+1261       P        11/370  =   3.0 %   0.0
+1262       S        20/370  =   5.4 %   0.0
+1263       T        20/370  =   5.4 %   0.0
+1264       W        26/370  =   7.0 %   0.0
+1265       N        23/370  =   6.2 %   0.0
+1266       E        13/370  =   3.5 %   0.0
+1267       I         1/370  =   0.3 %   0.0
+1268       P         6/370  =   1.6 %   0.0
+1269       N        14/370  =   3.8 %   0.0
+1270       Q        11/370  =   3.0 %   0.0
+1271       S        17/370  =   4.6 %   0.0
+1272       N         1/370  =   0.3 %   0.0
+1273       G         2/370  =   0.5 %   0.0
+1274       K        16/370  =   4.3 %   0.0
+1275       D         9/370  =   2.4 %   0.0
+1276       Q        24/370  =   6.5 %   0.0
+1277       G        33/370  =   8.9 %   0.0
+1278       W        32/370  =   8.6 %   0.1
+1279       G        31/370  =   8.4 %   0.0
+1280       G        18/370  =   4.9 %   0.0
+1281       G        28/370  =   7.6 %   0.0
+1282       Q        15/370  =   4.1 %   0.0
+1283       P         1/370  =   0.3 %   0.0
+1284       G         3/370  =   0.8 %   0.0
+1285       K        10/370  =   2.7 %   0.0
+1286       G        16/370  =   4.3 %   0.0
+1287       N        20/370  =   5.4 %   0.0
+1288       Q        17/370  =   4.6 %   0.0
+1289       G        27/370  =   7.3 %   0.0
+1290       W        29/370  =   7.8 %   0.1
+1291       S        29/370  =   7.8 %   0.0
+1292       G         1/370  =   0.3 %   0.0
+1293       P         1/370  =   0.3 %   0.0
+1294       S         5/370  =   1.4 %   0.0
+1295       S        17/370  =   4.6 %   0.0
+1296       G         1/370  =   0.3 %   0.0
+1297       G        23/370  =   6.2 %   0.0
+1298       A         3/370  =   0.8 %   0.0
+1299       A         1/370  =   0.3 %   0.0
+1300       A         2/370  =   0.5 %   0.0
+1301       A         1/370  =   0.3 %   0.0
+1302       G         1/370  =   0.3 %   0.0
+1303       T         1/370  =   0.3 %   0.0
+1304       V         1/370  =   0.3 %   0.0
+1305       G         1/370  =   0.3 %   0.0
+1306       G         1/370  =   0.3 %   0.0
+1307       A         1/370  =   0.3 %   0.0
+1308       G         1/370  =   0.3 %   0.0
+1309       G         1/370  =   0.3 %   0.0
+1310       S         1/370  =   0.3 %   0.0
+1311       N         1/370  =   0.3 %   0.0
+1312       A         2/370  =   0.5 %   0.0
+1313       G         2/370  =   0.5 %   0.0
+1314       K         3/370  =   0.8 %   0.0
+1315       K         3/370  =   0.8 %   0.0
+1316       G        20/370  =   5.4 %   0.0
+1317       N        23/370  =   6.2 %   0.0
+1318       G        21/370  =   5.7 %   0.0
+1319       W        45/370  =  12.2 %   0.2
+1320       G        39/370  =  10.5 %   0.1
+1321       E        19/370  =   5.1 %   0.0
+1322       P        14/370  =   3.8 %   0.0
+1323       S        15/370  =   4.1 %   0.0
+1324       S         6/370  =   1.6 %   0.0
+1325       V         6/370  =   1.6 %   0.0
+1326       L         6/370  =   1.6 %   0.0
+1327       G         6/370  =   1.6 %   0.0
+1328       H         6/370  =   1.6 %   0.0
+1329       L         6/370  =   1.6 %   0.0
+1330       G         7/370  =   1.9 %   0.0
+1331       D        17/370  =   4.6 %   0.0
+1332       S         7/370  =   1.9 %   0.0
+1333       N         9/370  =   2.4 %   0.0
+1334       H         9/370  =   2.4 %   0.0
+1335       W         9/370  =   2.4 %   0.0
+1336       G        10/370  =   2.7 %   0.0
+1337       E         9/370  =   2.4 %   0.0
+1338       A        10/370  =   2.7 %   0.0
+1339       G        15/370  =   4.1 %   0.0
+1340       K        16/370  =   4.3 %   0.0
+1341       K        25/370  =   6.8 %   0.0
+1342       N        15/370  =   4.1 %   0.0
+1343       A         1/370  =   0.3 %   0.0
+1344       G        10/370  =   2.7 %   0.0
+1345       S        21/370  =   5.7 %   0.0
+1346       G        23/370  =   6.2 %   0.0
+1347       G        22/370  =   5.9 %   0.0
+1348       G        16/370  =   4.3 %   0.0
+1349       G         2/370  =   0.5 %   0.0
+1350       G         1/370  =   0.3 %   0.0
+1351       P         5/370  =   1.4 %   0.0
+1352       S        19/370  =   5.1 %   0.0
+1353       D        29/370  =   7.8 %   0.0
+1354       V         1/370  =   0.3 %   0.0
+1355       I        11/370  =   3.0 %   0.0
+1356       S        12/370  =   3.2 %   0.0
+1357       N        20/370  =   5.4 %   0.0
+1358       V         4/370  =   1.1 %   0.0
+1359       D         4/370  =   1.1 %   0.0
+1360       H         2/370  =   0.5 %   0.0
+1361       R         4/370  =   1.1 %   0.0
+1362       R        16/370  =   4.3 %   0.0
+1363       D         2/370  =   0.5 %   0.0
+1364       P         2/370  =   0.5 %   0.0
+1365       R         2/370  =   0.5 %   0.0
+1366       E         2/370  =   0.5 %   0.0
+1367       S        17/370  =   4.6 %   0.0
+1368       V        13/370  =   3.5 %   0.0
+1369       S        26/370  =   7.0 %   0.0
+1370       G        38/370  =  10.3 %   0.1
+1371       C         1/370  =   0.3 %   0.0
+1372       W        28/370  =   7.6 %   0.1
+1373       N        22/370  =   5.9 %   0.0
+1374       E        17/370  =   4.6 %   0.0
+1375       G        11/370  =   3.0 %   0.0
+1376       G        28/370  =   7.6 %   0.0
+1377       A        11/370  =   3.0 %   0.0
+1378       T        20/370  =   5.4 %   0.0
+1379       S        20/370  =   5.4 %   0.0
+1380       S        16/370  =   4.3 %   0.0
+1381       N         1/370  =   0.3 %   0.0
+1382       A         1/370  =   0.3 %   0.0
+1383       P         1/370  =   0.3 %   0.0
+1384       P         1/370  =   0.3 %   0.0
+1385       P         1/370  =   0.3 %   0.0
+1386       P         1/370  =   0.3 %   0.0
+1387       P         1/370  =   0.3 %   0.0
+1388       H         1/370  =   0.3 %   0.0
+1389       G         1/370  =   0.3 %   0.0
+1390       R         1/370  =   0.3 %   0.0
+1391       D        11/370  =   3.0 %   0.0
+1392       T        20/370  =   5.4 %   0.0
+1393       W        24/370  =   6.5 %   0.0
+1394       D        12/370  =   3.2 %   0.0
+1395       G        25/370  =   6.8 %   0.0
+1396       N        19/370  =   5.1 %   0.0
+1397       I         1/370  =   0.3 %   0.0
+1398       M        16/370  =   4.3 %   0.0
+1399       I        24/370  =   6.5 %   0.0
+1400       N        25/370  =   6.8 %   0.0
+1401       N         1/370  =   0.3 %   0.0
+1402       T         1/370  =   0.3 %   0.0
+1403       P         1/370  =   0.3 %   0.0
+1404       D         2/370  =   0.5 %   0.0
+1405       Q         1/370  =   0.3 %   0.0
+1406       P        24/370  =   6.5 %   0.0
+1407       R        16/370  =   4.3 %   0.0
+1408       D        14/370  =   3.8 %   0.0
+1409       P        15/370  =   4.1 %   0.0
+1410       I        17/370  =   4.6 %   0.0
+1411       R        17/370  =   4.6 %   0.0
+1412       G        30/370  =   8.1 %   0.0
+1413       R         1/370  =   0.3 %   0.0
+1414       G        21/370  =   5.7 %   0.0
+1415       W        25/370  =   6.8 %   0.0
+1416       R        17/370  =   4.6 %   0.0
+1417       G        27/370  =   7.3 %   0.0
+1418       E        19/370  =   5.1 %   0.0
+1419       R         1/370  =   0.3 %   0.0
+1420       S        36/370  =   9.7 %   0.0
+1421       G        17/370  =   4.6 %   0.0
+1422       R        28/370  =   7.6 %   0.0
+1423       L        17/370  =   4.6 %   0.0
+1424       N        15/370  =   4.1 %   0.0
+1425       R         1/370  =   0.3 %   0.0
+1426       D         1/370  =   0.3 %   0.0
+1427       I         1/370  =   0.3 %   0.0
+1428       R         1/370  =   0.3 %   0.0
+1429       M         1/370  =   0.3 %   0.0
+1430       I         2/370  =   0.5 %   0.0
+1431       A         1/370  =   0.3 %   0.0
+1432       G        16/370  =   4.3 %   0.0
+1433       T        14/370  =   3.8 %   0.0
+1434       S        31/370  =   8.4 %   0.0
+1435       E        19/370  =   5.1 %   0.0
+1436       M        15/370  =   4.1 %   0.0
+1437       W        32/370  =   8.6 %   0.1
+1438       G        32/370  =   8.6 %   0.0
+1439       D        16/370  =   4.3 %   0.0
+1440       P        23/370  =   6.2 %   0.0
+1441       P        25/370  =   6.8 %   0.0
+1442       Q        15/370  =   4.1 %   0.0
+1443       C         5/370  =   1.4 %   0.0
+1444       S         2/370  =   0.5 %   0.0
+1445       G         2/370  =   0.5 %   0.0
+1446       R         2/370  =   0.5 %   0.0
+1447       L         2/370  =   0.5 %   0.0
+1448       N         2/370  =   0.5 %   0.0
+1449       N         9/370  =   2.4 %   0.0
+1450       Q        22/370  =   5.9 %   0.0
+1451       S        26/370  =   7.0 %   0.0
+1452       H        17/370  =   4.6 %   0.0
+1453       G         9/370  =   2.4 %   0.0
+1454       W        29/370  =   7.8 %   0.1
+1455       N        28/370  =   7.6 %   0.0
+1456       Q        16/370  =   4.3 %   0.0
+1457       Q         7/370  =   1.9 %   0.0
+1458       Q        15/370  =   4.1 %   0.0
+1459       N        12/370  =   3.2 %   0.0
+1460       I        12/370  =   3.2 %   0.0
+1461       N        14/370  =   3.8 %   0.0
+1462       H         1/370  =   0.3 %   0.0
+1463       K        23/370  =   6.2 %   0.0
+1464       M        16/370  =   4.3 %   0.0
+1465       V        24/370  =   6.5 %   0.0
+1466       L         1/370  =   0.3 %   0.0
+1467       S         1/370  =   0.3 %   0.0
+1468       G        16/370  =   4.3 %   0.0
+1469       Q        17/370  =   4.6 %   0.0
+1470       P        18/370  =   4.9 %   0.0
+1471       V        13/370  =   3.5 %   0.0
+1472       W         9/370  =   2.4 %   0.0
+1473       N        11/370  =   3.0 %   0.0
+1474       P        18/370  =   4.9 %   0.0
+1475       Q        24/370  =   6.5 %   0.0
+1476       G        10/370  =   2.7 %   0.0
+1477       A         1/370  =   0.3 %   0.0
+1478       I         1/370  =   0.3 %   0.0
+1479       G         1/370  =   0.3 %   0.0
+1480       S         2/370  =   0.5 %   0.0
+1481       D         9/370  =   2.4 %   0.0
+1482       N        16/370  =   4.3 %   0.0
+1483       V        21/370  =   5.7 %   0.0
+1484       G        25/370  =   6.8 %   0.0
+1485       S        22/370  =   5.9 %   0.0
+1486       A         1/370  =   0.3 %   0.0
+1487       S         1/370  =   0.3 %   0.0
+1488       W        27/370  =   7.3 %   0.0
+1489       G         3/370  =   0.8 %   0.0
+1490       P         2/370  =   0.5 %   0.0
+1491       G        43/370  =  11.6 %   0.1
+1492       I        22/370  =   5.9 %   0.0
+1493       P        21/370  =   5.7 %   0.0
+1494       P        33/370  =   8.9 %   0.1
+1495       G         9/370  =   2.4 %   0.0
+1496       G         4/370  =   1.1 %   0.0
+1497       G        15/370  =   4.1 %   0.0
+1498       P        13/370  =   3.5 %   0.0
+1499       G        11/370  =   3.0 %   0.0
+1500       A        17/370  =   4.6 %   0.0
+1501       T        14/370  =   3.8 %   0.0
+1502       V        20/370  =   5.4 %   0.0
+1503       K        15/370  =   4.1 %   0.0
+1504       P        21/370  =   5.7 %   0.0
+1505       P        10/370  =   2.7 %   0.0
+1506       G        28/370  =   7.6 %   0.0
+1507       T        16/370  =   4.3 %   0.0
+1508       G        24/370  =   6.5 %   0.0
+1509       W        34/370  =   9.2 %   0.1
+1510       L        10/370  =   2.7 %   0.0
+1511       G        28/370  =   7.6 %   0.0
+1512       I         1/370  =   0.3 %   0.0
+1513       G        33/370  =   8.9 %   0.0
+1514       P        33/370  =   8.9 %   0.0
+1515       Q        16/370  =   4.3 %   0.0
+1516       V         1/370  =   0.3 %   0.0
+1517       G         1/370  =   0.3 %   0.0
+1518       G         2/370  =   0.5 %   0.0
+1519       P        35/370  =   9.5 %   0.1
+1520       V        19/370  =   5.1 %   0.0
+1521       P        11/370  =   3.0 %   0.0
+1522       G         1/370  =   0.3 %   0.0
+1523       G         7/370  =   1.9 %   0.0
+1524       P        19/370  =   5.1 %   0.0
+1525       G         9/370  =   2.4 %   0.0
+1526       V         4/370  =   1.1 %   0.0
+1527       T         2/370  =   0.5 %   0.0
+1528       Q         3/370  =   0.8 %   0.0
+1529       T         3/370  =   0.8 %   0.0
+1530       V         4/370  =   1.1 %   0.0
+1531       A         1/370  =   0.3 %   0.0
+1532       Q         1/370  =   0.3 %   0.0
+1533       G         2/370  =   0.5 %   0.0
+1534       V         3/370  =   0.8 %   0.0
+1535       G         3/370  =   0.8 %   0.0
+1536       S         6/370  =   1.6 %   0.0
+1537       G         7/370  =   1.9 %   0.0
+1538       P         5/370  =   1.4 %   0.0
+1539       K        35/370  =   9.5 %   0.0
+1540       D        27/370  =   7.3 %   0.0
+1541       E        16/370  =   4.3 %   0.0
+1542       S        11/370  =   3.0 %   0.0
+1543       K        11/370  =   3.0 %   0.0
+1544       E        25/370  =   6.8 %   0.0
+1545       P        26/370  =   7.0 %   0.0
+1546       T        23/370  =   6.2 %   0.0
+1547       G        50/370  =  13.5 %   0.1
+1548       W        52/370  =  14.1 %   0.2
+1549       E        45/370  =  12.2 %   0.1
+1550       E        46/370  =  12.4 %   0.1
+1551       P        46/370  =  12.4 %   0.1
+1552       S        50/370  =  13.5 %   0.1
+1553       A         1/370  =   0.3 %   0.0
+1554       G         1/370  =   0.3 %   0.0
+1555       G         1/370  =   0.3 %   0.0
+1556       G         1/370  =   0.3 %   0.0
+1557       P        49/370  =  13.2 %   0.1
+1558       P        29/370  =   7.8 %   0.0
+1559       V         1/370  =   0.3 %   0.0
+1560       V         1/370  =   0.3 %   0.0
+1561       G         1/370  =   0.3 %   0.0
+1562       S        25/370  =   6.8 %   0.0
+1563       I        25/370  =   6.8 %   0.0
+1564       R        40/370  =  10.8 %   0.1
+1565       R        49/370  =  13.2 %   0.1
+1566       K        24/370  =   6.5 %   0.0
+1567       M        29/370  =   7.8 %   0.0
+1568       V         1/370  =   0.3 %   0.0
+1569       P        16/370  =   4.3 %   0.0
+1570       N        22/370  =   5.9 %   0.0
+1571       I        28/370  =   7.6 %   0.0
+1572       D        54/370  =  14.6 %   0.1
+1573       D        51/370  =  13.8 %   0.1
+1574       G        52/370  =  14.1 %   0.1
+1575       T        50/370  =  13.5 %   0.1
+1576       S        46/370  =  12.4 %   0.1
+1577       G         1/370  =   0.3 %   0.0
+1578       A        28/370  =   7.6 %   0.0
+1579       W        53/370  =  14.3 %   0.2
+1580       A         1/370  =   0.3 %   0.0
+1581       Q         1/370  =   0.3 %   0.0
+1582       G        54/370  =  14.6 %   0.1
+1583       D        28/370  =   7.6 %   0.0
+1584       G         2/370  =   0.5 %   0.0
+1585       N         1/370  =   0.3 %   0.0
+1586       A         1/370  =   0.3 %   0.0
+1587       V         1/370  =   0.3 %   0.0
+1588       G         1/370  =   0.3 %   0.0
+1589       A         1/370  =   0.3 %   0.0
+1590       G         1/370  =   0.3 %   0.0
+1591       A         1/370  =   0.3 %   0.0
+1592       P        34/370  =   9.2 %   0.1
+1593       S        22/370  =   5.9 %   0.0
+1594       R        20/370  =   5.4 %   0.0
+1595       G         1/370  =   0.3 %   0.0
+1596       Y        25/370  =   6.8 %   0.0
+1597       R         1/370  =   0.3 %   0.0
+1598       N        33/370  =   8.9 %   0.0
+1599       Y        19/370  =   5.1 %   0.0
+1600       K        27/370  =   7.3 %   0.0
+1601       G         1/370  =   0.3 %   0.0
+1602       G         1/370  =   0.3 %   0.0
+1603       G         1/370  =   0.3 %   0.0
+1604       N        25/370  =   6.8 %   0.0
+1605       G         1/370  =   0.3 %   0.0
+1606       G         1/370  =   0.3 %   0.0
+1607       V        32/370  =   8.6 %   0.0
+1608       N        27/370  =   7.3 %   0.0
+1609       M        17/370  =   4.6 %   0.0
+1610       W        35/370  =   9.5 %   0.1
+1611       D        34/370  =   9.2 %   0.0
+1612       K        23/370  =   6.2 %   0.0
+1613       P         1/370  =   0.3 %   0.0
+1614       N        30/370  =   8.1 %   0.0
+1615       S        16/370  =   4.3 %   0.0
+1616       P        19/370  =   5.1 %   0.0
+1617       G        13/370  =   3.5 %   0.0
+1618       S         2/370  =   0.5 %   0.0
+1619       R         1/370  =   0.3 %   0.0
+1620       N         1/370  =   0.3 %   0.0
+1621       S         2/370  =   0.5 %   0.0
+1622       Q         1/370  =   0.3 %   0.0
+1623       I         1/370  =   0.3 %   0.0
+1624       R         1/370  =   0.3 %   0.0
+1625       G         3/370  =   0.8 %   0.0
+1626       Q         1/370  =   0.3 %   0.0
+1627       N         1/370  =   0.3 %   0.0
+1628       A         1/370  =   0.3 %   0.0
+1629       G         1/370  =   0.3 %   0.0
+1630       G         1/370  =   0.3 %   0.0
+1631       G         1/370  =   0.3 %   0.0
+1632       I         1/370  =   0.3 %   0.0
+1633       G         1/370  =   0.3 %   0.0
+1634       H         1/370  =   0.3 %   0.0
+1635       A         1/370  =   0.3 %   0.0
+1636       G         2/370  =   0.5 %   0.0
+1637       N         1/370  =   0.3 %   0.0
+1638       G         2/370  =   0.5 %   0.0
+1639       P         1/370  =   0.3 %   0.0
+1640       A         2/370  =   0.5 %   0.0
+1641       N         1/370  =   0.3 %   0.0
+1642       T         2/370  =   0.5 %   0.0
+1643       N         1/370  =   0.3 %   0.0
+1644       Q         1/370  =   0.3 %   0.0
+1645       A         1/370  =   0.3 %   0.0
+1646       L         1/370  =   0.3 %   0.0
+1647       Q         1/370  =   0.3 %   0.0
+1648       G        28/370  =   7.6 %   0.0
+1649       R        13/370  =   3.5 %   0.0
+1650       N         1/370  =   0.3 %   0.0
+1651       S        29/370  =   7.8 %   0.0
+1652       P        12/370  =   3.2 %   0.0
+1653       L         1/370  =   0.3 %   0.0
+1654       Q         1/370  =   0.3 %   0.0
+1655       N         1/370  =   0.3 %   0.0
+1656       T         1/370  =   0.3 %   0.0
+1657       L         6/370  =   1.6 %   0.0
+1658       R        10/370  =   2.7 %   0.0
+1659       E        11/370  =   3.0 %   0.0
+1660       G         1/370  =   0.3 %   0.0
+1661       P        16/370  =   4.3 %   0.0
+1662       Q        17/370  =   4.6 %   0.0
+1663       G         1/370  =   0.3 %   0.0
+1664       G         2/370  =   0.5 %   0.0
+1665       G         1/370  =   0.3 %   0.0
+1666       G        14/370  =   3.8 %   0.0
+1667       P        28/370  =   7.6 %   0.0
+1668       T        21/370  =   5.7 %   0.0
+1669       P        15/370  =   4.1 %   0.0
+1670       T         2/370  =   0.5 %   0.0
+1671       M        13/370  =   3.5 %   0.0
+1672       L        11/370  =   3.0 %   0.0
+1673       G        11/370  =   3.0 %   0.0
+1674       I         8/370  =   2.2 %   0.0
+1675       G         7/370  =   1.9 %   0.0
+1676       G         3/370  =   0.8 %   0.0
+1677       I         3/370  =   0.8 %   0.0
+1678       V         4/370  =   1.1 %   0.0
+1679       P         2/370  =   0.5 %   0.0
+1680       G         2/370  =   0.5 %   0.0
+1681       A         1/370  =   0.3 %   0.0
+1682       S         1/370  =   0.3 %   0.0
+1683       N         1/370  =   0.3 %   0.0
+1684       V         1/370  =   0.3 %   0.0
+1685       P         1/370  =   0.3 %   0.0
+1686       V         1/370  =   0.3 %   0.0
+1687       G         1/370  =   0.3 %   0.0
+1688       A         1/370  =   0.3 %   0.0
+1689       N         1/370  =   0.3 %   0.0
+1690       P         1/370  =   0.3 %   0.0
+1691       N         1/370  =   0.3 %   0.0
+1692       N         1/370  =   0.3 %   0.0
+1693       P         1/370  =   0.3 %   0.0
+1694       N         1/370  =   0.3 %   0.0
+1695       G         1/370  =   0.3 %   0.0
+1696       G         3/370  =   0.8 %   0.0
+1697       S         3/370  =   0.8 %   0.0
+1698       G         3/370  =   0.8 %   0.0
+1699       V         3/370  =   0.8 %   0.0
+1700       G         3/370  =   0.8 %   0.0
+1701       P         3/370  =   0.8 %   0.0
+1702       A         9/370  =   2.4 %   0.0
+1703       S        10/370  =   2.7 %   0.0
+1704       A         9/370  =   2.4 %   0.0
+1705       V        11/370  =   3.0 %   0.0
+1706       T        18/370  =   4.9 %   0.0
+1707       S        25/370  =   6.8 %   0.0
+1708       K        26/370  =   7.0 %   0.0
+1709       L         1/370  =   0.3 %   0.0
+1710       S        21/370  =   5.7 %   0.0
+1711       A        16/370  =   4.3 %   0.0
+1712       S        25/370  =   6.8 %   0.0
+1713       S        16/370  =   4.3 %   0.0
+1714       G         7/370  =   1.9 %   0.0
+1715       S         8/370  =   2.2 %   0.0
+1716       G         8/370  =   2.2 %   0.0
+1717       W         8/370  =   2.2 %   0.0
+1718       G         8/370  =   2.2 %   0.0
+1719       E         8/370  =   2.2 %   0.0
+1720       P         8/370  =   2.2 %   0.0
+1721       W        26/370  =   7.0 %   0.0
+1722       G        26/370  =   7.0 %   0.0
+1723       A         1/370  =   0.3 %   0.0
+1724       P         1/370  =   0.3 %   0.0
+1725       G         1/370  =   0.3 %   0.0
+1726       P         2/370  =   0.5 %   0.0
+1727       N         1/370  =   0.3 %   0.0
+1728       K         1/370  =   0.3 %   0.0
+1729       L         1/370  =   0.3 %   0.0
+1730       P         1/370  =   0.3 %   0.0
+1731       G         1/370  =   0.3 %   0.0
+1732       A         1/370  =   0.3 %   0.0
+1733       S         1/370  =   0.3 %   0.0
+1734       R         1/370  =   0.3 %   0.0
+1735       D         1/370  =   0.3 %   0.0
+1736       S         2/370  =   0.5 %   0.0
+1737       E        15/370  =   4.1 %   0.0
+1738       D         2/370  =   0.5 %   0.0
+1739       G         1/370  =   0.3 %   0.0
+1740       P         1/370  =   0.3 %   0.0
+1741       G         1/370  =   0.3 %   0.0
+1742       P        21/370  =   5.7 %   0.0
+1743       S        26/370  =   7.0 %   0.0
+1744       T        23/370  =   6.2 %   0.0
+1745       P        45/370  =  12.2 %   0.1
+1746       S         1/370  =   0.3 %   0.0
+1747       L         1/370  =   0.3 %   0.0
+1748       N         1/370  =   0.3 %   0.0
+1749       T         1/370  =   0.3 %   0.0
+1750       R         1/370  =   0.3 %   0.0
+1751       P        21/370  =   5.7 %   0.0
+1752       T        17/370  =   4.6 %   0.0
+1753       G         3/370  =   0.8 %   0.0
+1754       G         1/370  =   0.3 %   0.0
+1755       T         8/370  =   2.2 %   0.0
+1756       V        22/370  =   5.9 %   0.0
+1757       D        28/370  =   7.6 %   0.0
+1758       N        27/370  =   7.3 %   0.0
+1759       L         1/370  =   0.3 %   0.0
+1760       F         1/370  =   0.3 %   0.0
+1761       G        48/370  =  13.0 %   0.1
+1762       T        32/370  =   8.6 %   0.0
+1763       S        22/370  =   5.9 %   0.0
+1764       A        32/370  =   8.6 %   0.0
+1765       R        10/370  =   2.7 %   0.0
+1766       I         5/370  =   1.4 %   0.0
+1767       P         4/370  =   1.1 %   0.0
+1768       N         3/370  =   0.8 %   0.0
+1769       T         2/370  =   0.5 %   0.0
+1770       P         2/370  =   0.5 %   0.0
+1771       G         1/370  =   0.3 %   0.0
+1772       G         1/370  =   0.3 %   0.0
+1773       P         1/370  =   0.3 %   0.0
+1774       S         1/370  =   0.3 %   0.0
+1775       G         1/370  =   0.3 %   0.0
+1776       V         1/370  =   0.3 %   0.0
+1777       G         1/370  =   0.3 %   0.0
+1778       V         1/370  =   0.3 %   0.0
+1779       A         1/370  =   0.3 %   0.0
+1780       G         2/370  =   0.5 %   0.0
+1781       G         2/370  =   0.5 %   0.0
+1782       S         6/370  =   1.6 %   0.0
+1783       V        12/370  =   3.2 %   0.0
+1784       G         8/370  =   2.2 %   0.0
+1785       G        11/370  =   3.0 %   0.0
+1786       W        27/370  =   7.3 %   0.0
+1787       G        33/370  =   8.9 %   0.0
+1788       K        16/370  =   4.3 %   0.0
+1789       P        34/370  =   9.2 %   0.1
+1790       H         5/370  =   1.4 %   0.0
+1791       L         2/370  =   0.5 %   0.0
+1792       G         1/370  =   0.3 %   0.0
+1793       G         5/370  =   1.4 %   0.0
+1794       K         6/370  =   1.6 %   0.0
+1795       P        19/370  =   5.1 %   0.0
+1796       D        24/370  =   6.5 %   0.0
+1797       S        25/370  =   6.8 %   0.0
+1798       G        26/370  =   7.0 %   0.0
+1799       P        16/370  =   4.3 %   0.0
+1800       G        20/370  =   5.4 %   0.0
+1801       P         1/370  =   0.3 %   0.0
+1802       M         1/370  =   0.3 %   0.0
+1803       D         1/370  =   0.3 %   0.0
+1804       G         1/370  =   0.3 %   0.0
+1805       H         1/370  =   0.3 %   0.0
+1806       G         1/370  =   0.3 %   0.0
+1807       A         1/370  =   0.3 %   0.0
+1808       G         1/370  =   0.3 %   0.0
+1809       V         1/370  =   0.3 %   0.0
+1810       G         1/370  =   0.3 %   0.0
+1811       G         1/370  =   0.3 %   0.0
+1812       S         1/370  =   0.3 %   0.0
+1813       R         1/370  =   0.3 %   0.0
+1814       N         1/370  =   0.3 %   0.0
+1815       G         1/370  =   0.3 %   0.0
+1816       I         1/370  =   0.3 %   0.0
+1817       W        56/370  =  15.1 %   0.2
+1818       G        36/370  =   9.7 %   0.0
+1819       E        24/370  =   6.5 %   0.0
+1820       P        18/370  =   4.9 %   0.0
+1821       S         1/370  =   0.3 %   0.0
+1822       N         9/370  =   2.4 %   0.0
+1823       N        15/370  =   4.1 %   0.0
+1824       A        12/370  =   3.2 %   0.0
+1825       G        11/370  =   3.0 %   0.0
+1826       G        13/370  =   3.5 %   0.0
+1827       G         3/370  =   0.8 %   0.0
+1828       V         2/370  =   0.5 %   0.0
+1829       G         1/370  =   0.3 %   0.0
+1830       G         3/370  =   0.8 %   0.0
+1831       R         7/370  =   1.9 %   0.0
+1832       N         7/370  =   1.9 %   0.0
+1833       N         7/370  =   1.9 %   0.0
+1834       A        12/370  =   3.2 %   0.0
+1835       A        17/370  =   4.6 %   0.0
+1836       R         1/370  =   0.3 %   0.0
+1837       N         1/370  =   0.3 %   0.0
+1838       S         1/370  =   0.3 %   0.0
+1839       V         1/370  =   0.3 %   0.0
+1840       S        16/370  =   4.3 %   0.0
+1841       A         4/370  =   1.1 %   0.0
+1842       T        16/370  =   4.3 %   0.0
+1843       S        17/370  =   4.6 %   0.0
+1844       G        17/370  =   4.6 %   0.0
+1845       W        48/370  =  13.0 %   0.2
+1846       G        42/370  =  11.4 %   0.1
+1847       D        20/370  =   5.4 %   0.0
+1848       G         1/370  =   0.3 %   0.0
+1849       D        16/370  =   4.3 %   0.0
+1850       S        24/370  =   6.5 %   0.0
+1851       A        14/370  =   3.8 %   0.0
+1852       G         1/370  =   0.3 %   0.0
+1853       G         1/370  =   0.3 %   0.0
+1854       G         1/370  =   0.3 %   0.0
+1855       W         1/370  =   0.3 %   0.0
+1856       G         1/370  =   0.3 %   0.0
+1857       D         1/370  =   0.3 %   0.0
+1858       E         1/370  =   0.3 %   0.0
+1859       K         1/370  =   0.3 %   0.0
+1860       G         1/370  =   0.3 %   0.0
+1861       N        19/370  =   5.1 %   0.0
+1862       A        17/370  =   4.6 %   0.0
+1863       P        17/370  =   4.6 %   0.0
+1864       V         3/370  =   0.8 %   0.0
+1865       A         1/370  =   0.3 %   0.0
+1866       R         1/370  =   0.3 %   0.0
+1867       G         1/370  =   0.3 %   0.0
+1868       M         1/370  =   0.3 %   0.0
+1869       R         1/370  =   0.3 %   0.0
+1870       L         2/370  =   0.5 %   0.0
+1871       N        11/370  =   3.0 %   0.0
+1872       L        14/370  =   3.8 %   0.0
+1873       S        14/370  =   3.8 %   0.0
+1874       K        26/370  =   7.0 %   0.0
+1875       S        24/370  =   6.5 %   0.0
+1876       G        26/370  =   7.0 %   0.0
+1877       S        22/370  =   5.9 %   0.0
+1878       G         1/370  =   0.3 %   0.0
+1879       K        34/370  =   9.2 %   0.0
+1880       S        32/370  =   8.6 %   0.0
+1881       M        31/370  =   8.4 %   0.0
+1882       Q        32/370  =   8.6 %   0.0
+1883       D        26/370  =   7.0 %   0.0
+1884       G        35/370  =   9.5 %   0.1
+1885       W        48/370  =  13.0 %   0.2
+1886       G        27/370  =   7.3 %   0.0
+1887       D        13/370  =   3.5 %   0.0
+1888       A         2/370  =   0.5 %   0.0
+1889       G         1/370  =   0.3 %   0.0
+1890       S         1/370  =   0.3 %   0.0
+1891       V         1/370  =   0.3 %   0.0
+1892       G         1/370  =   0.3 %   0.0
+1893       V         1/370  =   0.3 %   0.0
+1894       S         1/370  =   0.3 %   0.0
+1895       W         1/370  =   0.3 %   0.0
+1896       A         1/370  =   0.3 %   0.0
+1897       G         1/370  =   0.3 %   0.0
+1898       D        19/370  =   5.1 %   0.0
+1899       D        23/370  =   6.2 %   0.0
+1900       G         1/370  =   0.3 %   0.0
+1901       G        20/370  =   5.4 %   0.0
+1902       P        23/370  =   6.2 %   0.0
+1903       V        14/370  =   3.8 %   0.0
+1904       T        12/370  =   3.2 %   0.0
+1905       L         3/370  =   0.8 %   0.0
+1906       A         3/370  =   0.8 %   0.0
+1907       Q         3/370  =   0.8 %   0.0
+1908       I         3/370  =   0.8 %   0.0
+1909       G        31/370  =   8.4 %   0.0
+1910       L         1/370  =   0.3 %   0.0
+1911       A         1/370  =   0.3 %   0.0
+1912       Q         1/370  =   0.3 %   0.0
+1913       I         1/370  =   0.3 %   0.0
+1914       A         1/370  =   0.3 %   0.0
+1915       A        18/370  =   4.9 %   0.0
+1916       W         1/370  =   0.3 %   0.0
+1917       R        22/370  =   5.9 %   0.0
+1918       H        14/370  =   3.8 %   0.0
+1919       P        16/370  =   4.3 %   0.0
+1920       S        27/370  =   7.3 %   0.0
+1921       W        55/370  =  14.9 %   0.2
+1922       E        27/370  =   7.3 %   0.0
+1923       E        25/370  =   6.8 %   0.0
+1924       E        30/370  =   8.1 %   0.0
+1925       E        19/370  =   5.1 %   0.0
+1926       D        25/370  =   6.8 %   0.0
+1927       P         3/370  =   0.8 %   0.0
+1928       L         1/370  =   0.3 %   0.0
+1929       G        30/370  =   8.1 %   0.0
+1930       E         9/370  =   2.4 %   0.0
+1931       G         3/370  =   0.8 %   0.0
+1932       G         1/370  =   0.3 %   0.0
+1933       G         1/370  =   0.3 %   0.0
+1934       G         1/370  =   0.3 %   0.0
+1935       G         4/370  =   1.1 %   0.0
+1936       I         9/370  =   2.4 %   0.0
+1937       G        42/370  =  11.4 %   0.1
+1938       V        27/370  =   7.3 %   0.0
+1939       G         1/370  =   0.3 %   0.0
+1940       A         1/370  =   0.3 %   0.0
+1941       G         3/370  =   0.8 %   0.0
+1942       W        50/370  =  13.5 %   0.2
+1943       N        33/370  =   8.9 %   0.0
+1944       G         1/370  =   0.3 %   0.0
+1945       D         1/370  =   0.3 %   0.0
+1946       N        14/370  =   3.8 %   0.0
+1947       A        12/370  =   3.2 %   0.0
+1948       G        17/370  =   4.6 %   0.0
+1949       S        40/370  =  10.8 %   0.0
+1950       I         1/370  =   0.3 %   0.0
+1951       V         1/370  =   0.3 %   0.0
+1952       P         1/370  =   0.3 %   0.0
+1953       G         1/370  =   0.3 %   0.0
+1954       G         1/370  =   0.3 %   0.0
+1955       N         1/370  =   0.3 %   0.0
+1956       V         1/370  =   0.3 %   0.0
+1957       Q        31/370  =   8.4 %   0.0
+1958       E        17/370  =   4.6 %   0.0
+1959       S        24/370  =   6.5 %   0.0
+1960       A        12/370  =   3.2 %   0.0
+1961       S        39/370  =  10.5 %   0.0
+1962       S        37/370  =  10.0 %   0.0
+1963       H        12/370  =   3.2 %   0.0
+1964       N        29/370  =   7.8 %   0.0
+1965       S         8/370  =   2.2 %   0.0
+1966       G         7/370  =   1.9 %   0.0
+1967       P         7/370  =   1.9 %   0.0
+1968       S         6/370  =   1.6 %   0.0
+1969       T         5/370  =   1.4 %   0.0
+1970       A         5/370  =   1.4 %   0.0
+1971       A         5/370  =   1.4 %   0.0
+1972       A         3/370  =   0.8 %   0.0
+1973       N         3/370  =   0.8 %   0.0
+1974       T         3/370  =   0.8 %   0.0
+1975       V         2/370  =   0.5 %   0.0
+1976       G         2/370  =   0.5 %   0.0
+1977       N         1/370  =   0.3 %   0.0
+1978       G         1/370  =   0.3 %   0.0
+1979       A         1/370  =   0.3 %   0.0
+1980       G         2/370  =   0.5 %   0.0
+1981       N         1/370  =   0.3 %   0.0
+1982       V         1/370  =   0.3 %   0.0
+1983       E         1/370  =   0.3 %   0.0
+1984       G         1/370  =   0.3 %   0.0
+1985       G         1/370  =   0.3 %   0.0
+1986       N         1/370  =   0.3 %   0.0
+1987       D         1/370  =   0.3 %   0.0
+1988       I         1/370  =   0.3 %   0.0
+1989       S         2/370  =   0.5 %   0.0
+1990       D         1/370  =   0.3 %   0.0
+1991       D         1/370  =   0.3 %   0.0
+1992       S         1/370  =   0.3 %   0.0
+1993       V         3/370  =   0.8 %   0.0
+1994       D         2/370  =   0.5 %   0.0
+1995       G         7/370  =   1.9 %   0.0
+1996       V         5/370  =   1.4 %   0.0
+1997       V         8/370  =   2.2 %   0.0
+1998       D         6/370  =   1.6 %   0.0
+1999       Y         7/370  =   1.9 %   0.0
+2000       T         8/370  =   2.2 %   0.0
+2001       D         8/370  =   2.2 %   0.0
+2002       L         7/370  =   1.9 %   0.0
+2003       S        17/370  =   4.6 %   0.0
+2004       S        22/370  =   5.9 %   0.0
+2005       S        27/370  =   7.3 %   0.0
+2006       W        35/370  =   9.5 %   0.1
+2007       G        39/370  =  10.5 %   0.1
+2008       Q        15/370  =   4.1 %   0.0
+2009       H         5/370  =   1.4 %   0.0
+2010       G         7/370  =   1.9 %   0.0
+2011       I         2/370  =   0.5 %   0.0
+2012       V         2/370  =   0.5 %   0.0
+2013       G         7/370  =   1.9 %   0.0
+2014       I         5/370  =   1.4 %   0.0
+2015       G        18/370  =   4.9 %   0.0
+2016       G        39/370  =  10.5 %   0.1
+2017       K        40/370  =  10.8 %   0.1
+2018       K        32/370  =   8.6 %   0.0
+2019       Q         1/370  =   0.3 %   0.0
+2020       Q         2/370  =   0.5 %   0.0
+2021       Q        25/370  =   6.8 %   0.0
+2022       M        17/370  =   4.6 %   0.0
+2023       R         7/370  =   1.9 %   0.0
+2024       G         1/370  =   0.3 %   0.0
+2025       G         1/370  =   0.3 %   0.0
+2026       E         6/370  =   1.6 %   0.0
+2027       K        19/370  =   5.1 %   0.0
+2028       C        13/370  =   3.5 %   0.0
+2029       K        18/370  =   4.9 %   0.0
+2030       L        25/370  =   6.8 %   0.0
+2031       S         1/370  =   0.3 %   0.0
+2032       K        28/370  =   7.6 %   0.0
+2033       T         5/370  =   1.4 %   0.0
+2034       P         3/370  =   0.8 %   0.0
+2035       G        41/370  =  11.1 %   0.1
+2036       G        23/370  =   6.2 %   0.0
+2037       N        38/370  =  10.3 %   0.1
+2038       N        15/370  =   4.1 %   0.0
+2039       G        12/370  =   3.2 %   0.0
+2040       V         4/370  =   1.1 %   0.0
+2041       V         2/370  =   0.5 %   0.0
+2042       V         1/370  =   0.3 %   0.0
+2043       G         1/370  =   0.3 %   0.0
+2044       V         1/370  =   0.3 %   0.0
+2045       G         1/370  =   0.3 %   0.0
+2046       G         1/370  =   0.3 %   0.0
+2047       M         1/370  =   0.3 %   0.0
+2048       V         1/370  =   0.3 %   0.0
+2049       N         1/370  =   0.3 %   0.0
+2050       M         1/370  =   0.3 %   0.0
+2051       N         3/370  =   0.8 %   0.0
+2052       M         5/370  =   1.4 %   0.0
+2053       E         9/370  =   2.4 %   0.0
+2054       D        20/370  =   5.4 %   0.0
+2055       A        15/370  =   4.1 %   0.0
+2056       W        33/370  =   8.9 %   0.1
+2057       I         7/370  =   1.9 %   0.0
+2058       M        31/370  =   8.4 %   0.0
+2059       N        26/370  =   7.0 %   0.0
+2060       P        22/370  =   5.9 %   0.0
+2061       L        21/370  =   5.7 %   0.0
+2062       A        13/370  =   3.5 %   0.0
+2063       D         1/370  =   0.3 %   0.0
+2064       K        44/370  =  11.9 %   0.1
+2065       Q        47/370  =  12.7 %   0.1
+2066       Y         7/370  =   1.9 %   0.0
+2067       K         6/370  =   1.6 %   0.0
+2068       Q         6/370  =   1.6 %   0.0
+2069       Y         6/370  =   1.6 %   0.0
+2070       R        13/370  =   3.5 %   0.0
+2071       I        11/370  =   3.0 %   0.0
+2072       L        34/370  =   9.2 %   0.0
+2073       S        25/370  =   6.8 %   0.0
+2074       N        24/370  =   6.5 %   0.0
+2075       M        30/370  =   8.1 %   0.0
+2076       G        47/370  =  12.7 %   0.1
+2077       F        40/370  =  10.8 %   0.1
+2078       K        23/370  =   6.2 %   0.0
+2079       K        24/370  =   6.5 %   0.0
+2080       E        32/370  =   8.6 %   0.0
+2081       D        24/370  =   6.5 %   0.0
+2082       V        20/370  =   5.4 %   0.0
+2083       E        39/370  =  10.5 %   0.1
+2084       N        16/370  =   4.3 %   0.0
+2085       A        29/370  =   7.8 %   0.0
+2086       L        30/370  =   8.1 %   0.0
+2087       G         1/370  =   0.3 %   0.0
+2088       A         1/370  =   0.3 %   0.0
+2089       C         1/370  =   0.3 %   0.0
+2090       R         9/370  =   2.4 %   0.0
+2091       S        13/370  =   3.5 %   0.0
+2092       A        13/370  =   3.5 %   0.0
+2093       N        25/370  =   6.8 %   0.0
+2094       M        29/370  =   7.8 %   0.0
+2095       N        30/370  =   8.1 %   0.0
+2096       M        21/370  =   5.7 %   0.0
+2097       D        29/370  =   7.8 %   0.0
+2098       L        22/370  =   5.9 %   0.0
+2099       A        28/370  =   7.6 %   0.0
+2100       V        15/370  =   4.1 %   0.0
+2101       G        15/370  =   4.1 %   0.0
+2102       M        22/370  =   5.9 %   0.0
+2103       L        49/370  =  13.2 %   0.1
+2104       R        16/370  =   4.3 %   0.0
+2105       A         2/370  =   0.5 %   0.0
+2106       N         3/370  =   0.8 %   0.0
+2107       A         9/370  =   2.4 %   0.0
+2108       D        21/370  =   5.7 %   0.0
+2109       K        30/370  =   8.1 %   0.0
+2110       K        21/370  =   5.7 %   0.0
+2111       F        13/370  =   3.5 %   0.0
+2112       D        21/370  =   5.7 %   0.0
+2113       V        16/370  =   4.3 %   0.0
+2114       D        39/370  =  10.5 %   0.1
+2115       G        11/370  =   3.0 %   0.0
+2116       A         1/370  =   0.3 %   0.0
+2117       D         1/370  =   0.3 %   0.0
+2118       R         1/370  =   0.3 %   0.0
+2119       A         1/370  =   0.3 %   0.0
+2120       S         1/370  =   0.3 %   0.0
+2121       S         1/370  =   0.3 %   0.0
+2122       A         1/370  =   0.3 %   0.0
+2123       N         1/370  =   0.3 %   0.0
+2124       T         1/370  =   0.3 %   0.0
+2125       G         1/370  =   0.3 %   0.0
+2126       E         1/370  =   0.3 %   0.0
+2127       G         2/370  =   0.5 %   0.0
+2128       W        13/370  =   3.5 %   0.0
+2129       R        13/370  =   3.5 %   0.0
+2130       K        30/370  =   8.1 %   0.0
+2131       R        22/370  =   5.9 %   0.0
+2132       D        10/370  =   2.7 %   0.0
+2133       M        17/370  =   4.6 %   0.0
+2134       N        22/370  =   5.9 %   0.0
+2135       G         1/370  =   0.3 %   0.0
+2136       L        28/370  =   7.6 %   0.0
+2137       G        36/370  =   9.7 %   0.0
+2138       G         1/370  =   0.3 %   0.0
+2139       D         1/370  =   0.3 %   0.0
+2140       D        35/370  =   9.5 %   0.1
+2141       Y        28/370  =   7.6 %   0.1
+2142       N        27/370  =   7.3 %   0.0
+2143       D        27/370  =   7.3 %   0.0
+2144       H        17/370  =   4.6 %   0.0
+2145       M        14/370  =   3.8 %   0.0
+2146       R        14/370  =   3.8 %   0.0
+2147       K        29/370  =   7.8 %   0.0
+2148       D        13/370  =   3.5 %   0.0
+2149       R        13/370  =   3.5 %   0.0
+2150       S        18/370  =   4.9 %   0.0
+2151       G        47/370  =  12.7 %   0.1
+2152       G        10/370  =   2.7 %   0.0
+2153       N         1/370  =   0.3 %   0.0
+2154       F         7/370  =   1.9 %   0.0
+2155       A         7/370  =   1.9 %   0.0
+2156       G        16/370  =   4.3 %   0.0
+2157       R        41/370  =  11.1 %   0.1
+2158       P        40/370  =  10.8 %   0.1
+2159       P        28/370  =   7.6 %   0.0
+2160       N        13/370  =   3.5 %   0.0
+2161       N         5/370  =   1.4 %   0.0
+2162       S        34/370  =   9.2 %   0.0
+2163       K        32/370  =   8.6 %   0.0
+2164       D        18/370  =   4.9 %   0.0
+2165       A         1/370  =   0.3 %   0.0
+2166       Q         1/370  =   0.3 %   0.0
+2167       P         7/370  =   1.9 %   0.0
+2168       S        27/370  =   7.3 %   0.0
+2169       P         2/370  =   0.5 %   0.0
+2170       S         2/370  =   0.5 %   0.0
+2171       G        15/370  =   4.1 %   0.0
+2172       S        24/370  =   6.5 %   0.0
+2173       T        15/370  =   4.1 %   0.0
+2174       D        23/370  =   6.2 %   0.0
+2175       S        18/370  =   4.9 %   0.0
+2176       G        18/370  =   4.9 %   0.0
+2177       P        23/370  =   6.2 %   0.0
+2178       Y        22/370  =   5.9 %   0.0
+2179       F        24/370  =   6.5 %   0.0
+2180       D        20/370  =   5.4 %   0.0
+2181       K        31/370  =   8.4 %   0.0
+2182       N         9/370  =   2.4 %   0.0
+2183       G         8/370  =   2.2 %   0.0
+2184       G        10/370  =   2.7 %   0.0
+2185       T        11/370  =   3.0 %   0.0
+2186       F        11/370  =   3.0 %   0.0
+2187       V         3/370  =   0.8 %   0.0
+2188       T         2/370  =   0.5 %   0.0
+2189       G         4/370  =   1.1 %   0.0
+2190       S        11/370  =   3.0 %   0.0
+2191       G        10/370  =   2.7 %   0.0
+2192       G        11/370  =   3.0 %   0.0
+2193       D        18/370  =   4.9 %   0.0
+2194       G        20/370  =   5.4 %   0.0
+2195       G         1/370  =   0.3 %   0.0
+2196       G        13/370  =   3.5 %   0.0
+2197       N        14/370  =   3.8 %   0.0
+2198       A         9/370  =   2.4 %   0.0
+2199       G         1/370  =   0.3 %   0.0
+2200       D        10/370  =   2.7 %   0.0
+2201       E        13/370  =   3.5 %   0.0
+2202       Q         7/370  =   1.9 %   0.0
+2203       Q        12/370  =   3.2 %   0.0
+2204       N        11/370  =   3.0 %   0.0
+2205       L        10/370  =   2.7 %   0.0
+2206       Q        10/370  =   2.7 %   0.0
+2207       V         3/370  =   0.8 %   0.0
+2208       G         1/370  =   0.3 %   0.0
+2209       G         1/370  =   0.3 %   0.0
+2210       Q         3/370  =   0.8 %   0.0
+2211       K         3/370  =   0.8 %   0.0
+2212       F        19/370  =   5.1 %   0.0
+2213       L        20/370  =   5.4 %   0.0
+2214       S        12/370  =   3.2 %   0.0
+2215       S        20/370  =   5.4 %   0.0
+2216       Q        11/370  =   3.0 %   0.0
+2217       G         1/370  =   0.3 %   0.0
+2218       G         1/370  =   0.3 %   0.0
+2219       P         1/370  =   0.3 %   0.0
+2220       S        19/370  =   5.1 %   0.0
+2221       H        12/370  =   3.2 %   0.0
+2222       G        13/370  =   3.5 %   0.0
+2223       S         4/370  =   1.1 %   0.0
+2224       E         1/370  =   0.3 %   0.0
+2225       D         1/370  =   0.3 %   0.0
+2226       S         1/370  =   0.3 %   0.0
+2227       T         1/370  =   0.3 %   0.0
+2228       V         1/370  =   0.3 %   0.0
+2229       K         1/370  =   0.3 %   0.0
+2230       D         1/370  =   0.3 %   0.0
+2231       P         1/370  =   0.3 %   0.0
+2232       K         1/370  =   0.3 %   0.0
+2233       S         1/370  =   0.3 %   0.0
+2234       E         1/370  =   0.3 %   0.0
+2235       A         1/370  =   0.3 %   0.0
+2236       A         4/370  =   1.1 %   0.0
+2237       L        16/370  =   4.3 %   0.0
+2238       P        15/370  =   4.1 %   0.0
+2239       L        10/370  =   2.7 %   0.0
+2240       S        15/370  =   4.1 %   0.0
+2241       P        15/370  =   4.1 %   0.0
+2242       S        12/370  =   3.2 %   0.0
+2243       A        22/370  =   5.9 %   0.0
+2244       L        21/370  =   5.7 %   0.0
+2245       A         3/370  =   0.8 %   0.0
+2246       I         1/370  =   0.3 %   0.0
+2247       G         1/370  =   0.3 %   0.0
+2248       I         2/370  =   0.5 %   0.0
+2249       P        19/370  =   5.1 %   0.0
+2250       N        25/370  =   6.8 %   0.0
+2251       Q        12/370  =   3.2 %   0.0
+2252       S        15/370  =   4.1 %   0.0
+2253       L        14/370  =   3.8 %   0.0
+2254       G        14/370  =   3.8 %   0.0
+2255       S        16/370  =   4.3 %   0.0
+2256       V        16/370  =   4.3 %   0.0
+2257       G        15/370  =   4.1 %   0.0
+2258       S         1/370  =   0.3 %   0.0
+2259       N         1/370  =   0.3 %   0.0
+2260       S         1/370  =   0.3 %   0.0
+2261       L         1/370  =   0.3 %   0.0
+2262       P         1/370  =   0.3 %   0.0
+2263       D         1/370  =   0.3 %   0.0
+2264       F        14/370  =   3.8 %   0.0
+2265       G        31/370  =   8.4 %   0.0
+2266       L        14/370  =   3.8 %   0.0
+2267       G        15/370  =   4.1 %   0.0
+2268       D         1/370  =   0.3 %   0.0
+2269       Y         1/370  =   0.3 %   0.0
+2270       Y         1/370  =   0.3 %   0.0
+2271       N         1/370  =   0.3 %   0.0
+2272       M        10/370  =   2.7 %   0.0
+2273       Q        16/370  =   4.3 %   0.0
+2274       N        37/370  =  10.0 %   0.1
+2275       L        14/370  =   3.8 %   0.0
+2276       N         9/370  =   2.4 %   0.0
+2277       A        16/370  =   4.3 %   0.0
+2278       V        15/370  =   4.1 %   0.0
+2279       R        14/370  =   3.8 %   0.0
+2280       Q        15/370  =   4.1 %   0.0
+2281       I         4/370  =   1.1 %   0.0
+2282       G         1/370  =   0.3 %   0.0
+2283       E         1/370  =   0.3 %   0.0
+2284       P         5/370  =   1.4 %   0.0
+2285       G        23/370  =   6.2 %   0.0
+2286       G        41/370  =  11.1 %   0.1
+2287       S        28/370  =   7.6 %   0.0
+2288       H        22/370  =   5.9 %   0.0
+2289       G         1/370  =   0.3 %   0.0
+2290       G        33/370  =   8.9 %   0.0
+2291       L        17/370  =   4.6 %   0.0
+2292       F        30/370  =   8.1 %   0.0
+2293       G        47/370  =  12.7 %   0.1
+2294       V         8/370  =   2.2 %   0.0
+2295       G        10/370  =   2.7 %   0.0
+2296       N        48/370  =  13.0 %   0.1
+2297       S        24/370  =   6.5 %   0.0
+2298       N         1/370  =   0.3 %   0.0
+2299       G         5/370  =   1.4 %   0.0
+2300       A        24/370  =   6.5 %   0.0
+2301       A        39/370  =  10.5 %   0.0
+2302       Q        48/370  =  13.0 %   0.1
+2303       P        26/370  =   7.0 %   0.0
+2304       R        32/370  =   8.6 %   0.0
+2305       G        53/370  =  14.3 %   0.1
+2306       A         1/370  =   0.3 %   0.0
+2307       G         2/370  =   0.5 %   0.0
+2308       M        19/370  =   5.1 %   0.0
+2309       Q        30/370  =   8.1 %   0.0
+2310       N         1/370  =   0.3 %   0.0
+2311       Q         1/370  =   0.3 %   0.0
+2312       E         1/370  =   0.3 %   0.0
+2313       Q         1/370  =   0.3 %   0.0
+2314       P         2/370  =   0.5 %   0.0
+2315       P         2/370  =   0.5 %   0.0
+2316       Q        20/370  =   5.4 %   0.0
+2317       P         2/370  =   0.5 %   0.0
+2318       P         2/370  =   0.5 %   0.0
+2319       Q         2/370  =   0.5 %   0.0
+2320       P        18/370  =   4.9 %   0.0
+2321       P        34/370  =   9.2 %   0.0
+2322       V        24/370  =   6.5 %   0.0
+2323       Q        41/370  =  11.1 %   0.1
+2324       P        36/370  =   9.7 %   0.0
+2325       L        56/370  =  15.1 %   0.1
+2326       A         1/370  =   0.3 %   0.0
+2327       S        22/370  =   5.9 %   0.0
+2328       S        37/370  =  10.0 %   0.0
+2329       S        36/370  =   9.7 %   0.0
+2330       L         4/370  =   1.1 %   0.0
+2331       D         1/370  =   0.3 %   0.0
+2332       Q        16/370  =   4.3 %   0.0
+2333       P        43/370  =  11.6 %   0.1
+2334       S        23/370  =   6.2 %   0.0
+2335       L        33/370  =   8.9 %   0.0
+2336       R        34/370  =   9.2 %   0.0
+2337       A        34/370  =   9.2 %   0.0
+2338       Q        39/370  =  10.5 %   0.0
+2339       V        38/370  =  10.3 %   0.0
+2340       P         1/370  =   0.3 %   0.0
+2341       S         1/370  =   0.3 %   0.0
+2342       T         1/370  =   0.3 %   0.0
+2343       Q         1/370  =   0.3 %   0.0
+2344       P        33/370  =   8.9 %   0.0
+2345       E         1/370  =   0.3 %   0.0
+2346       I         1/370  =   0.3 %   0.0
+2347       P        38/370  =  10.3 %   0.1
+2348       F         1/370  =   0.3 %   0.0
+2349       G         1/370  =   0.3 %   0.0
+2350       S         1/370  =   0.3 %   0.0
+2351       A         1/370  =   0.3 %   0.0
+2352       Q        22/370  =   5.9 %   0.0
+2353       F        39/370  =  10.5 %   0.1
+2354       G         1/370  =   0.3 %   0.0
+2355       G         1/370  =   0.3 %   0.0
+2356       S         1/370  =   0.3 %   0.0
+2357       M         1/370  =   0.3 %   0.0
+2358       D         1/370  =   0.3 %   0.0
+2359       L        36/370  =   9.7 %   0.1
+2360       S        47/370  =  12.7 %   0.1
+2361       L         1/370  =   0.3 %   0.0
+2362       P        36/370  =   9.7 %   0.0
+2363       Q        69/370  =  18.6 %   0.2
+2364       V        36/370  =   9.7 %   0.1
+2365       Q        23/370  =   6.2 %   0.0
+2366       A        25/370  =   6.8 %   0.0
+2367       S        32/370  =   8.6 %   0.0
+2368       L        27/370  =   7.3 %   0.0
+2369       L        53/370  =  14.3 %   0.1
+2370       K        27/370  =   7.3 %   0.0
+2371       Q        31/370  =   8.4 %   0.0
+2372       A        22/370  =   5.9 %   0.0
+2373       A         7/370  =   1.9 %   0.0
+2374       P        31/370  =   8.4 %   0.0
+2375       N        37/370  =  10.0 %   0.0
+2376       N        27/370  =   7.3 %   0.0
+2377       G        37/370  =  10.0 %   0.0
+2378       L        49/370  =  13.2 %   0.1
+2379       N        37/370  =  10.0 %   0.1
+2380       P        27/370  =   7.3 %   0.0
+2381       G         1/370  =   0.3 %   0.0
+2382       P         1/370  =   0.3 %   0.0
+2383       V         1/370  =   0.3 %   0.0
+2384       P         2/370  =   0.5 %   0.0
+2385       A         2/370  =   0.5 %   0.0
+2386       G        32/370  =   8.6 %   0.0
+2387       L        37/370  =  10.0 %   0.0
+2388       L        22/370  =   5.9 %   0.0
+2389       N        39/370  =  10.5 %   0.1
+2390       V        17/370  =   4.6 %   0.0
+2391       G        16/370  =   4.3 %   0.0
+2392       Q         2/370  =   0.5 %   0.0
+2393       A         1/370  =   0.3 %   0.0
+2394       A         1/370  =   0.3 %   0.0
+2395       G         2/370  =   0.5 %   0.0
+2396       L         1/370  =   0.3 %   0.0
+2397       G         2/370  =   0.5 %   0.0
+2398       A         1/370  =   0.3 %   0.0
+2399       T         1/370  =   0.3 %   0.0
+2400       P         2/370  =   0.5 %   0.0
+2401       V         2/370  =   0.5 %   0.0
+2402       P         1/370  =   0.3 %   0.0
+2403       G         1/370  =   0.3 %   0.0
+2404       S         1/370  =   0.3 %   0.0
+2405       G         1/370  =   0.3 %   0.0
+2406       G         1/370  =   0.3 %   0.0
+2407       G         1/370  =   0.3 %   0.0
+2408       R         1/370  =   0.3 %   0.0
+2409       A         1/370  =   0.3 %   0.0
+2410       S         1/370  =   0.3 %   0.0
+2411       A         1/370  =   0.3 %   0.0
+2412       S         1/370  =   0.3 %   0.0
+2413       P         2/370  =   0.5 %   0.0
+2414       A         1/370  =   0.3 %   0.0
+2415       L         2/370  =   0.5 %   0.0
+2416       L         1/370  =   0.3 %   0.0
+2417       T         2/370  =   0.5 %   0.0
+2418       G         2/370  =   0.5 %   0.0
+2419       A         1/370  =   0.3 %   0.0
+2420       G         2/370  =   0.5 %   0.0
+2421       P         2/370  =   0.5 %   0.0
+2422       R         2/370  =   0.5 %   0.0
+2423       P        37/370  =  10.0 %   0.0
+2424       P        30/370  =   8.1 %   0.0
+2425       L        39/370  =  10.5 %   0.0
+2426       A        29/370  =   7.8 %   0.0
+2427       P        58/370  =  15.7 %   0.1
+2428       Q        73/370  =  19.7 %   0.2
+2429       Q        54/370  =  14.6 %   0.1
+2430       A         1/370  =   0.3 %   0.0
+2431       S        11/370  =   3.0 %   0.0
+2432       L        27/370  =   7.3 %   0.0
+2433       A        44/370  =  11.9 %   0.0
+2434       M        32/370  =   8.6 %   0.0
+2435       L        54/370  =  14.6 %   0.1
+2436       Q         1/370  =   0.3 %   0.0
+2437       R         2/370  =   0.5 %   0.0
+2438       N        30/370  =   8.1 %   0.0
+2439       Q        65/370  =  17.6 %   0.2
+2440       L        61/370  =  16.5 %   0.1
+2441       A         2/370  =   0.5 %   0.0
+2442       L        11/370  =   3.0 %   0.0
+2443       P        20/370  =   5.4 %   0.0
+2444       Q        47/370  =  12.7 %   0.1
+2445       I        32/370  =   8.6 %   0.0
+2446       P        20/370  =   5.4 %   0.0
+2447       Q        71/370  =  19.2 %   0.2
+2448       L        48/370  =  13.0 %   0.1
+2449       H         2/370  =   0.5 %   0.0
+2450       A         1/370  =   0.3 %   0.0
+2451       L         1/370  =   0.3 %   0.0
+2452       Q        68/370  =  18.4 %   0.2
+2453       Q        40/370  =  10.8 %   0.0
+2454       A        30/370  =   8.1 %   0.0
+2455       Q        55/370  =  14.9 %   0.1
+2456       S         1/370  =   0.3 %   0.0
+2457       P         1/370  =   0.3 %   0.0
+2458       G         1/370  =   0.3 %   0.0
+2459       G         1/370  =   0.3 %   0.0
+2460       L         1/370  =   0.3 %   0.0
+2461       S         1/370  =   0.3 %   0.0
+2462       L         1/370  =   0.3 %   0.0
+2463       Q        70/370  =  18.9 %   0.2
+2464       Q        23/370  =   6.2 %   0.0
+2465       L        50/370  =  13.5 %   0.1
+2466       Q        41/370  =  11.1 %   0.0
+2467       H         1/370  =   0.3 %   0.0
+2468       Q        65/370  =  17.6 %   0.2
+2469       Q        62/370  =  16.8 %   0.1
+2470       Q        71/370  =  19.2 %   0.2
+2471       G         5/370  =   1.4 %   0.0
+2472       G         3/370  =   0.8 %   0.0
+2473       G         1/370  =   0.3 %   0.0
+2474       P         1/370  =   0.3 %   0.0
+2475       T         2/370  =   0.5 %   0.0
+2476       G         5/370  =   1.4 %   0.0
+2477       Q         7/370  =   1.9 %   0.0
+2478       Q        72/370  =  19.5 %   0.2
+2479       G         1/370  =   0.3 %   0.0
+2480       Q        98/370  =  26.5 %   0.3
+2481       Q        89/370  =  24.1 %   0.3
+2482       Q       109/370  =  29.5 %   0.4
+2483       Q        43/370  =  11.6 %   0.0
+2484       Q        40/370  =  10.8 %   0.0
+2485       Q        93/370  =  25.1 %   0.3
+2486       Q        46/370  =  12.4 %   0.1
+2487       S         3/370  =   0.8 %   0.0
+2488       Q         1/370  =   0.3 %   0.0
+2489       A         2/370  =   0.5 %   0.0
+2490       Q        95/370  =  25.7 %   0.3
+2491       Q        45/370  =  12.2 %   0.1
+2492       Q        41/370  =  11.1 %   0.1
+2493       Q         1/370  =   0.3 %   0.0
+2494       R         1/370  =   0.3 %   0.0
+2495       Q        37/370  =  10.0 %   0.0
+2496       Q        59/370  =  15.9 %   0.1
+2497       Q        88/370  =  23.8 %   0.3
+2498       Q        59/370  =  15.9 %   0.1
+2499       Q        31/370  =   8.4 %   0.0
+2500       Q        46/370  =  12.4 %   0.1
+2501       Q         1/370  =   0.3 %   0.0
+2502       Q         1/370  =   0.3 %   0.0
+2503       Q        87/370  =  23.5 %   0.2
+2504       Q        81/370  =  21.9 %   0.2
+2505       Q       121/370  =  32.7 %   0.5
+2506       Q        72/370  =  19.5 %   0.2
+2507       Q       109/370  =  29.5 %   0.4
+2508       Q        75/370  =  20.3 %   0.2
+2509       Q        25/370  =   6.8 %   0.0
+2510       Q         1/370  =   0.3 %   0.0
+2511       Q         1/370  =   0.3 %   0.0
+2512       Q         1/370  =   0.3 %   0.0
+2513       Q         1/370  =   0.3 %   0.0
+2514       Q         1/370  =   0.3 %   0.0
+2515       Q         1/370  =   0.3 %   0.0
+2516       Q         1/370  =   0.3 %   0.0
+2517       Q         1/370  =   0.3 %   0.0
+2518       A        40/370  =  10.8 %   0.0
+2519       Q        70/370  =  18.9 %   0.2
+2520       Q        63/370  =  17.0 %   0.1
+2521       A         1/370  =   0.3 %   0.0
+2522       H         1/370  =   0.3 %   0.0
+2523       L         1/370  =   0.3 %   0.0
+2524       G         1/370  =   0.3 %   0.0
+2525       Q        44/370  =  11.9 %   0.0
+2526       Q        41/370  =  11.1 %   0.0
+2527       Q         1/370  =   0.3 %   0.0
+2528       Q        50/370  =  13.5 %   0.1
+2529       Q        65/370  =  17.6 %   0.1
+2530       L         1/370  =   0.3 %   0.0
+2531       P         1/370  =   0.3 %   0.0
+2532       Q       107/370  =  28.9 %   0.4
+2533       Q       120/370  =  32.4 %   0.5
+2534       Q       109/370  =  29.5 %   0.4
+2535       L         1/370  =   0.3 %   0.0
+2536       P         1/370  =   0.3 %   0.0
+2537       Q        98/370  =  26.5 %   0.3
+2538       Q       117/370  =  31.6 %   0.5
+2539       Q       112/370  =  30.3 %   0.4
+2540       S        10/370  =   2.7 %   0.0
+2541       Q        94/370  =  25.4 %   0.3
+2542       Q       111/370  =  30.0 %   0.4
+2543       Q        70/370  =  18.9 %   0.2
+2544       Q        89/370  =  24.1 %   0.3
+2545       L        10/370  =   2.7 %   0.0
+2546       A         9/370  =   2.4 %   0.0
+2547       Q         7/370  =   1.9 %   0.0
+2548       A         9/370  =   2.4 %   0.0
+2549       L         5/370  =   1.4 %   0.0
+2550       L         4/370  =   1.1 %   0.0
+2551       P         1/370  =   0.3 %   0.0
+2552       S         1/370  =   0.3 %   0.0
+2553       P         1/370  =   0.3 %   0.0
+2554       V         4/370  =   1.1 %   0.0
+2555       K         4/370  =   1.1 %   0.0
+2556       Q         5/370  =   1.4 %   0.0
+2557       P         5/370  =   1.4 %   0.0
+2558       L         7/370  =   1.9 %   0.0
+2559       R         6/370  =   1.6 %   0.0
+2560       Q         7/370  =   1.9 %   0.0
+2561       P        47/370  =  12.7 %   0.1
+2562       Q        44/370  =  11.9 %   0.1
+2563       Q        42/370  =  11.4 %   0.0
+2564       L         5/370  =   1.4 %   0.0
+2565       V         5/370  =   1.4 %   0.0
+2566       A         1/370  =   0.3 %   0.0
+2567       K         6/370  =   1.6 %   0.0
+2568       Q         7/370  =   1.9 %   0.0
+2569       Q        42/370  =  11.4 %   0.1
+2570       Q         1/370  =   0.3 %   0.0
+2571       L         1/370  =   0.3 %   0.0
+2572       P         1/370  =   0.3 %   0.0
+2573       S         1/370  =   0.3 %   0.0
+2574       H         1/370  =   0.3 %   0.0
+2575       S         1/370  =   0.3 %   0.0
+2576       S         1/370  =   0.3 %   0.0
+2577       S         1/370  =   0.3 %   0.0
+2578       S         1/370  =   0.3 %   0.0
+2579       S         1/370  =   0.3 %   0.0
+2580       S         1/370  =   0.3 %   0.0
+2581       S         1/370  =   0.3 %   0.0
+2582       A         1/370  =   0.3 %   0.0
+2583       G         1/370  =   0.3 %   0.0
+2584       L         1/370  =   0.3 %   0.0
+2585       H        45/370  =  12.2 %   0.1
+2586       Q        37/370  =  10.0 %   0.0
+2587       P        45/370  =  12.2 %   0.1
+2588       Q        30/370  =   8.1 %   0.0
+2589       Q        45/370  =  12.2 %   0.1
+2590       L         2/370  =   0.5 %   0.0
+2591       G         1/370  =   0.3 %   0.0
+2592       G         1/370  =   0.3 %   0.0
+2593       G         1/370  =   0.3 %   0.0
+2594       Q         1/370  =   0.3 %   0.0
+2595       G         3/370  =   0.8 %   0.0
+2596       L         2/370  =   0.5 %   0.0
+2597       P        34/370  =   9.2 %   0.0
+2598       V        24/370  =   6.5 %   0.0
+2599       G        31/370  =   8.4 %   0.0
+2600       A         2/370  =   0.5 %   0.0
+2601       D         2/370  =   0.5 %   0.0
+2602       A         1/370  =   0.3 %   0.0
+2603       D         1/370  =   0.3 %   0.0
+2604       G         2/370  =   0.5 %   0.0
+2605       G         2/370  =   0.5 %   0.0
+2606       Q         2/370  =   0.5 %   0.0
+2607       P        26/370  =   7.0 %   0.0
+2608       K        25/370  =   6.8 %   0.0
+2609       I         1/370  =   0.3 %   0.0
+2610       P        49/370  =  13.2 %   0.1
+2611       H        44/370  =  11.9 %   0.1
+2612       L        41/370  =  11.1 %   0.0
+2613       D        29/370  =   7.8 %   0.0
+2614       F         1/370  =   0.3 %   0.0
+2615       N        34/370  =   9.2 %   0.1
+2616       G         1/370  =   0.3 %   0.0
+2617       S         1/370  =   0.3 %   0.0
+2618       T         1/370  =   0.3 %   0.0
+2619       E         1/370  =   0.3 %   0.0
+2620       F        26/370  =   7.0 %   0.0
+2621       N         1/370  =   0.3 %   0.0
+2622       V        21/370  =   5.7 %   0.0
+2623       P        21/370  =   5.7 %   0.0
+2624       N        37/370  =  10.0 %   0.0
+2625       A        20/370  =   5.4 %   0.0
+2626       L        26/370  =   7.0 %   0.0
+2627       N        24/370  =   6.5 %   0.0
+2628       V        17/370  =   4.6 %   0.0
+2629       G        46/370  =  12.4 %   0.1
+2630       L        32/370  =   8.6 %   0.0
+2631       P         1/370  =   0.3 %   0.0
+2632       P        43/370  =  11.6 %   0.1
+2633       D        29/370  =   7.8 %   0.0
+2634       S         1/370  =   0.3 %   0.0
+2635       L        56/370  =  15.1 %   0.1
+2636       G         1/370  =   0.3 %   0.0
+2637       G         1/370  =   0.3 %   0.0
+2638       Q        29/370  =   7.8 %   0.0
+2639       T        30/370  =   8.1 %   0.0
+2640       G         1/370  =   0.3 %   0.0
+2641       K        39/370  =  10.5 %   0.0
+2642       S         2/370  =   0.5 %   0.0
+2643       K         1/370  =   0.3 %   0.0
+2644       E         4/370  =   1.1 %   0.0
+2645       G        37/370  =  10.0 %   0.0
+2646       P        42/370  =  11.4 %   0.1
+2647       Q         5/370  =   1.4 %   0.0
+2648       S         6/370  =   1.6 %   0.0
+2649       S         6/370  =   1.6 %   0.0
+2650       P         6/370  =   1.6 %   0.0
+2651       N         5/370  =   1.4 %   0.0
+2652       T         5/370  =   1.4 %   0.0
+2653       F         5/370  =   1.4 %   0.0
+2654       A         5/370  =   1.4 %   0.0
+2655       P         5/370  =   1.4 %   0.0
+2656       Y         6/370  =   1.6 %   0.0
+2657       P         6/370  =   1.6 %   0.0
+2658       I        33/370  =   8.9 %   0.0
+2659       P        30/370  =   8.1 %   0.0
+2660       G        29/370  =   7.8 %   0.0
+2661       L        31/370  =   8.4 %   0.0
+2662       S         1/370  =   0.3 %   0.0
+2663       P         1/370  =   0.3 %   0.0
+2664       A        12/370  =   3.2 %   0.0
+2665       G        22/370  =   5.9 %   0.0
+2666       S        44/370  =  11.9 %   0.0
+2667       N        41/370  =  11.1 %   0.1
+2668       F        42/370  =  11.4 %   0.1
+2669       S        35/370  =   9.5 %   0.0
+2670       S        24/370  =   6.5 %   0.0
+2671       G        32/370  =   8.6 %   0.0
+2672       L        11/370  =   3.0 %   0.0
+2673       A         1/370  =   0.3 %   0.0
+2674       N        11/370  =   3.0 %   0.0
+2675       S        13/370  =   3.5 %   0.0
+2676       N        28/370  =   7.6 %   0.0
+2677       L        29/370  =   7.8 %   0.0
+2678       N        31/370  =   8.4 %   0.0
+2679       V        19/370  =   5.1 %   0.0
+2680       G        23/370  =   6.2 %   0.0
+2681       M        26/370  =   7.0 %   0.0
+2682       G        21/370  =   5.7 %   0.0
+2683       G        18/370  =   4.9 %   0.0
+2684       G        19/370  =   5.1 %   0.0
+2685       V         5/370  =   1.4 %   0.0
+2686       M         1/370  =   0.3 %   0.0
+2687       K         9/370  =   2.4 %   0.0
+2688       G        24/370  =   6.5 %   0.0
+2689       E        16/370  =   4.3 %   0.0
+2690       T         1/370  =   0.3 %   0.0
+2691       A        19/370  =   5.1 %   0.0
+2692       G         1/370  =   0.3 %   0.0
+2693       G        17/370  =   4.6 %   0.0
+2694       Q        26/370  =   7.0 %   0.0
+2695       Q        54/370  =  14.6 %   0.1
+2696       S        66/370  =  17.8 %   0.1
+2697       R        63/370  =  17.0 %   0.1
+2698       L        46/370  =  12.4 %   0.1
+2699       N        23/370  =   6.2 %   0.0
+2700       S         1/370  =   0.3 %   0.0
+2701       E         1/370  =   0.3 %   0.0
+2702       Q         1/370  =   0.3 %   0.0
+2703       Q        51/370  =  13.8 %   0.1
+2704       W        60/370  =  16.2 %   0.3
+2705       T        32/370  =   8.6 %   0.0
+2706       H         8/370  =   2.2 %   0.0
+2707       P         6/370  =   1.6 %   0.0
+2708       L        28/370  =   7.6 %   0.0
+2709       P        29/370  =   7.8 %   0.0
+2710       M        21/370  =   5.7 %   0.0
+2711       D        16/370  =   4.3 %   0.0
+2712       S        20/370  =   5.4 %   0.0
+2713       L        28/370  =   7.6 %   0.0
+2714       P        21/370  =   5.7 %   0.0
+2715       S        26/370  =   7.0 %   0.0
+2716       V        24/370  =   6.5 %   0.0
+2717       A        25/370  =   6.8 %   0.0
+2718       S        28/370  =   7.6 %   0.0
+2719       Q        17/370  =   4.6 %   0.0
+2720       L         6/370  =   1.6 %   0.0
+2721       E        31/370  =   8.4 %   0.0
+2722       A        19/370  =   5.1 %   0.0
+2723       N        40/370  =  10.8 %   0.1
+2724       Q         1/370  =   0.3 %   0.0
+2725       S        28/370  =   7.6 %   0.0
+2726       D        24/370  =   6.5 %   0.0
+2727       K        40/370  =  10.8 %   0.0
+2728       T        22/370  =   5.9 %   0.0
+2729       G        41/370  =  11.1 %   0.1
+2730       A        37/370  =  10.0 %   0.0
+2731       N         1/370  =   0.3 %   0.0
+2732       I        38/370  =  10.3 %   0.0
+2733       R        24/370  =   6.5 %   0.0
+2734       A        40/370  =  10.8 %   0.0
+2735       G         5/370  =   1.4 %   0.0
+2736       L         5/370  =   1.4 %   0.0
+2737       S         6/370  =   1.6 %   0.0
+2738       I         5/370  =   1.4 %   0.0
+2739       G         6/370  =   1.6 %   0.0
+2740       P         7/370  =   1.9 %   0.0
+2741       P        52/370  =  14.1 %   0.1
+2742       R         1/370  =   0.3 %   0.0
+2743       S         1/370  =   0.3 %   0.0
+2744       Q         1/370  =   0.3 %   0.0
+2745       G        60/370  =  16.2 %   0.1
+2746       K        24/370  =   6.5 %   0.0
+2747       T        35/370  =   9.5 %   0.0
+2748       A         3/370  =   0.8 %   0.0
+2749       K         2/370  =   0.5 %   0.0
+2750       S         2/370  =   0.5 %   0.0
+2751       S         1/370  =   0.3 %   0.0
+2752       G         1/370  =   0.3 %   0.0
+2753       T         1/370  =   0.3 %   0.0
+2754       Q         1/370  =   0.3 %   0.0
+2755       L         1/370  =   0.3 %   0.0
+2756       A         1/370  =   0.3 %   0.0
+2757       L         1/370  =   0.3 %   0.0
+2758       T         2/370  =   0.5 %   0.0
+2759       L         2/370  =   0.5 %   0.0
+2760       A         2/370  =   0.5 %   0.0
+2761       R        16/370  =   4.3 %   0.0
+2762       G        17/370  =   4.6 %   0.0
+2763       L         1/370  =   0.3 %   0.0
+2764       G        19/370  =   5.1 %   0.0
+2765       S        31/370  =   8.4 %   0.0
+2766       P        30/370  =   8.1 %   0.0
+2767       Y        23/370  =   6.2 %   0.0
+2768       N        29/370  =   7.8 %   0.0
+2769       Q        17/370  =   4.6 %   0.0
+2770       Y        24/370  =   6.5 %   0.0
+2771       D        37/370  =  10.0 %   0.1
+2772       I        26/370  =   7.0 %   0.0
+2773       G         9/370  =   2.4 %   0.0
+2774       S         9/370  =   2.4 %   0.0
+2775       A         1/370  =   0.3 %   0.0
+2776       D         1/370  =   0.3 %   0.0
+2777       L        15/370  =   4.1 %   0.0
+2778       G        17/370  =   4.6 %   0.0
+2779       I        22/370  =   5.9 %   0.0
+2780       Q        27/370  =   7.3 %   0.0
+2781       D         1/370  =   0.3 %   0.0
+2782       G         2/370  =   0.5 %   0.0
+2783       Y         1/370  =   0.3 %   0.0
+2784       V         1/370  =   0.3 %   0.0
+2785       I         1/370  =   0.3 %   0.0
+2786       L         1/370  =   0.3 %   0.0
+2787       G         1/370  =   0.3 %   0.0
+2788       R         1/370  =   0.3 %   0.0
+2789       D         1/370  =   0.3 %   0.0
+2790       R         1/370  =   0.3 %   0.0
+2791       E         1/370  =   0.3 %   0.0
+2792       I         1/370  =   0.3 %   0.0
+2793       D         1/370  =   0.3 %   0.0
+2794       W         1/370  =   0.3 %   0.0
+2795       S         1/370  =   0.3 %   0.0
+2796       F         1/370  =   0.3 %   0.0
+2797       F         1/370  =   0.3 %   0.0
+2798       S         1/370  =   0.3 %   0.0
+2799       F         1/370  =   0.3 %   0.0
+2800       R         1/370  =   0.3 %   0.0
+2801       L         1/370  =   0.3 %   0.0
+2802       Y         1/370  =   0.3 %   0.0
+2803       V         1/370  =   0.3 %   0.0
+2804       P         1/370  =   0.3 %   0.0
+2805       S         2/370  =   0.5 %   0.0
+2806       P         2/370  =   0.5 %   0.0
+2807       N        18/370  =   4.9 %   0.0
+2808       D        36/370  =   9.7 %   0.1
+2809       T        33/370  =   8.9 %   0.0
+2810       S        20/370  =   5.4 %   0.0
+2811       P        19/370  =   5.1 %   0.0
+2812       S        24/370  =   6.5 %   0.0
+2813       S        17/370  =   4.6 %   0.0
+2814       P        16/370  =   4.3 %   0.0
+2815       P        19/370  =   5.1 %   0.0
+2816       G        29/370  =   7.8 %   0.0
+2817       S        19/370  =   5.1 %   0.0
+2818       I        28/370  =   7.6 %   0.0
+2819       G        45/370  =  12.2 %   0.1
+2820       D        55/370  =  14.9 %   0.1
+2821       G        36/370  =   9.7 %   0.1
+2822       W        61/370  =  16.5 %   0.3
+2823       P        37/370  =  10.0 %   0.1
+2824       D        22/370  =   5.9 %   0.0
+2825       R         1/370  =   0.3 %   0.0
+2826       A        35/370  =   9.5 %   0.0
+2827       K        34/370  =   9.2 %   0.0
+2828       S        47/370  =  12.7 %   0.1
+2829       G         1/370  =   0.3 %   0.0
+2830       A         1/370  =   0.3 %   0.0
+2831       V         1/370  =   0.3 %   0.0
+2832       G         1/370  =   0.3 %   0.0
+2833       G         2/370  =   0.5 %   0.0
+2834       A         1/370  =   0.3 %   0.0
+2835       P        29/370  =   7.8 %   0.0
+2836       N        24/370  =   6.5 %   0.0
+2837       T        17/370  =   4.6 %   0.0
+2838       N        35/370  =   9.5 %   0.1
+2839       K        48/370  =  13.0 %   0.1
+2840       I        23/370  =   6.2 %   0.0
+2841       G        30/370  =   8.1 %   0.0
+2842       P         3/370  =   0.8 %   0.0
+2843       S         3/370  =   0.8 %   0.0
+2844       S        32/370  =   8.6 %   0.0
+2845       V         5/370  =   1.4 %   0.0
+2846       A         6/370  =   1.6 %   0.0
+2847       P         1/370  =   0.3 %   0.0
+2848       N         1/370  =   0.3 %   0.0
+2849       A         1/370  =   0.3 %   0.0
+2850       A         1/370  =   0.3 %   0.0
+2851       S         2/370  =   0.5 %   0.0
+2852       P         4/370  =   1.1 %   0.0
+2853       T         4/370  =   1.1 %   0.0
+2854       K        17/370  =   4.6 %   0.0
+2855       L         1/370  =   0.3 %   0.0
+2856       S        32/370  =   8.6 %   0.0
+2857       S        38/370  =  10.3 %   0.0
+2858       N        18/370  =   4.9 %   0.0
+2859       A        16/370  =   4.3 %   0.0
+2860       T         2/370  =   0.5 %   0.0
+2861       A         2/370  =   0.5 %   0.0
+2862       A         2/370  =   0.5 %   0.0
+2863       P         2/370  =   0.5 %   0.0
+2864       A         2/370  =   0.5 %   0.0
+2865       Y         2/370  =   0.5 %   0.0
+2866       T         2/370  =   0.5 %   0.0
+2867       S        26/370  =   7.0 %   0.0
+2868       A         6/370  =   1.6 %   0.0
+2869       A         5/370  =   1.4 %   0.0
+2870       T         5/370  =   1.4 %   0.0
+2871       S         1/370  =   0.3 %   0.0
+2872       S         1/370  =   0.3 %   0.0
+2873       A         1/370  =   0.3 %   0.0
+2874       A         1/370  =   0.3 %   0.0
+2875       A         1/370  =   0.3 %   0.0
+2876       T         1/370  =   0.3 %   0.0
+2877       A         6/370  =   1.6 %   0.0
+2878       Y         6/370  =   1.6 %   0.0
+2879       T         6/370  =   1.6 %   0.0
+2880       D         6/370  =   1.6 %   0.0
+2881       W        38/370  =  10.3 %   0.1
+2882       S         2/370  =   0.5 %   0.0
+2883       N         1/370  =   0.3 %   0.0
+2884       A         1/370  =   0.3 %   0.0
+2885       I         1/370  =   0.3 %   0.0
+2886       D         1/370  =   0.3 %   0.0
+2887       A         1/370  =   0.3 %   0.0
+2888       P         1/370  =   0.3 %   0.0
+2889       Q         1/370  =   0.3 %   0.0
+2890       Q         1/370  =   0.3 %   0.0
+2891       S         1/370  =   0.3 %   0.0
+2892       Q         1/370  =   0.3 %   0.0
+2893       T         1/370  =   0.3 %   0.0
+2894       Q         1/370  =   0.3 %   0.0
+2895       A         1/370  =   0.3 %   0.0
+2896       Q         1/370  =   0.3 %   0.0
+2897       M         1/370  =   0.3 %   0.0
+2898       A         1/370  =   0.3 %   0.0
+2899       L         1/370  =   0.3 %   0.0
+2900       S         1/370  =   0.3 %   0.0
+2901       D         1/370  =   0.3 %   0.0
+2902       A         1/370  =   0.3 %   0.0
+2903       D         1/370  =   0.3 %   0.0
+2904       P        40/370  =  10.8 %   0.1
+2905       P        49/370  =  13.2 %   0.1
+2906       E        62/370  =  16.8 %   0.1
+2907       F        62/370  =  16.8 %   0.2
+2908       E        24/370  =   6.5 %   0.0
+2909       P        63/370  =  17.0 %   0.2
+2910       G        62/370  =  16.8 %   0.2
+2911       K        25/370  =   6.8 %   0.0
+2912       P        62/370  =  16.8 %   0.2
+2913       W        63/370  =  17.0 %   0.3
+2914       K        60/370  =  16.2 %   0.1
+2915       G        56/370  =  15.1 %   0.1
+2916       K         1/370  =   0.3 %   0.0
+2917       V         1/370  =   0.3 %   0.0
+2918       I        17/370  =   4.6 %   0.0
+2919       Q        43/370  =  11.6 %   0.1
+2920       G         1/370  =   0.3 %   0.0
+2921       K         1/370  =   0.3 %   0.0
+2922       G         1/370  =   0.3 %   0.0
+2923       T         1/370  =   0.3 %   0.0
+2924       N        34/370  =   9.2 %   0.0
+2925       I        34/370  =   9.2 %   0.0
+2926       G         1/370  =   0.3 %   0.0
+2927       D        38/370  =  10.3 %   0.1
+2928       P        36/370  =   9.7 %   0.0
+2929       E        55/370  =  14.9 %   0.1
+2930       D        19/370  =   5.1 %   0.0
+2931       D        60/370  =  16.2 %   0.2
+2932       P        60/370  =  16.2 %   0.2
+2933       Y        28/370  =   7.6 %   0.0
+2934       V        34/370  =   9.2 %   0.1
+2935       T        60/370  =  16.2 %   0.1
+2936       P        61/370  =  16.5 %   0.2
+2937       G        60/370  =  16.2 %   0.2
+2938       S        61/370  =  16.5 %   0.1
+2939       V        56/370  =  15.1 %   0.1
+2940       A        22/370  =   5.9 %   0.0
+2941       R        23/370  =   6.2 %   0.0
+2942       S        31/370  =   8.4 %   0.0
+2943       P         8/370  =   2.2 %   0.0
+2944       P        25/370  =   6.8 %   0.0
+2945       L        20/370  =   5.4 %   0.0
+2946       S        19/370  =   5.1 %   0.0
+2947       I        18/370  =   4.9 %   0.0
+2948       T        20/370  =   5.4 %   0.0
+2949       I        23/370  =   6.2 %   0.0
+2950       I         2/370  =   0.5 %   0.0
+2951       G         3/370  =   0.8 %   0.0
+2952       T        17/370  =   4.6 %   0.0
+2953       D        26/370  =   7.0 %   0.0
+2954       K        22/370  =   5.9 %   0.0
+2955       D        46/370  =  12.4 %   0.1
+2956       H        28/370  =   7.6 %   0.0
+2957       D        17/370  =   4.6 %   0.0
+2958       L        34/370  =   9.2 %   0.0
+2959       L        37/370  =  10.0 %   0.0
+2960       R        32/370  =   8.6 %   0.0
+2961       D        31/370  =   8.4 %   0.0
+2962       N        19/370  =   5.1 %   0.0
+2963       N        25/370  =   6.8 %   0.0
+2964       T        29/370  =   7.8 %   0.0
+2965       G        49/370  =  13.2 %   0.1
+2966       S        35/370  =   9.5 %   0.0
+2967       V         1/370  =   0.3 %   0.0
+2968       P         1/370  =   0.3 %   0.0
+2969       R         1/370  =   0.3 %   0.0
+2970       P         1/370  =   0.3 %   0.0
+2971       N        30/370  =   8.1 %   0.0
+2972       K         1/370  =   0.3 %   0.0
+2973       D         1/370  =   0.3 %   0.0
+2974       D         1/370  =   0.3 %   0.0
+2975       P         1/370  =   0.3 %   0.0
+2976       S        49/370  =  13.2 %   0.1
+2977       E         1/370  =   0.3 %   0.0
+2978       S        29/370  =   7.8 %   0.0
+2979       L        29/370  =   7.8 %   0.0
+2980       N        30/370  =   8.1 %   0.0
+2981       T        42/370  =  11.4 %   0.1
+2982       S        18/370  =   4.9 %   0.0
+2983       L        45/370  =  12.2 %   0.1
+2984       P        43/370  =  11.6 %   0.1
+2985       S        35/370  =   9.5 %   0.0
+2986       P        18/370  =   4.9 %   0.0
+2987       G        20/370  =   5.4 %   0.0
+2988       A        30/370  =   8.1 %   0.0
+2989       W        35/370  =   9.5 %   0.1
+2990       P        30/370  =   8.1 %   0.0
+2991       Y        18/370  =   4.9 %   0.0
+2992       S        33/370  =   8.9 %   0.0
+2993       A        20/370  =   5.4 %   0.0
+2994       S        38/370  =  10.3 %   0.0
+2995       S        26/370  =   7.0 %   0.0
+2996       N        30/370  =   8.1 %   0.0
+2997       S        18/370  =   4.9 %   0.0
+2998       F        20/370  =   5.4 %   0.0
+2999       V        11/370  =   3.0 %   0.0
+3000       P        11/370  =   3.0 %   0.0
+3001       L        11/370  =   3.0 %   0.0
+3002       S        11/370  =   3.0 %   0.0
+3003       S        29/370  =   7.8 %   0.0
+3004       Y         1/370  =   0.3 %   0.0
+3005       N        21/370  =   5.7 %   0.0
+3006       V        16/370  =   4.3 %   0.0
+3007       H        18/370  =   4.9 %   0.0
+3008       S        29/370  =   7.8 %   0.0
+3009       T        31/370  =   8.4 %   0.0
+3010       S        29/370  =   7.8 %   0.0
+3011       A        31/370  =   8.4 %   0.0
+3012       A         1/370  =   0.3 %   0.0
+3013       S         1/370  =   0.3 %   0.0
+3014       G         1/370  =   0.3 %   0.0
+3015       N         1/370  =   0.3 %   0.0
+3016       G         1/370  =   0.3 %   0.0
+3017       G         1/370  =   0.3 %   0.0
+3018       G         1/370  =   0.3 %   0.0
+3019       S         1/370  =   0.3 %   0.0
+3020       G         1/370  =   0.3 %   0.0
+3021       G         1/370  =   0.3 %   0.0
+3022       K        27/370  =   7.3 %   0.0
+3023       F        28/370  =   7.6 %   0.0
+3024       P        30/370  =   8.1 %   0.0
+3025       L         1/370  =   0.3 %   0.0
+3026       D        34/370  =   9.2 %   0.0
+3027       Y        17/370  =   4.6 %   0.0
+3028       K        45/370  =  12.2 %   0.1
+3029       S        28/370  =   7.6 %   0.0
+3030       T        39/370  =  10.5 %   0.1
+3031       W        61/370  =  16.5 %   0.3
+3032       S        56/370  =  15.1 %   0.1
+3033       P        33/370  =   8.9 %   0.0
+3034       S         1/370  =   0.3 %   0.0
+3035       S         1/370  =   0.3 %   0.0
+3036       P         1/370  =   0.3 %   0.0
+3037       Q         1/370  =   0.3 %   0.0
+3038       G        22/370  =   5.9 %   0.0
+3039       P        29/370  =   7.8 %   0.0
+3040       I        22/370  =   5.9 %   0.0
+3041       G         1/370  =   0.3 %   0.0
+3042       S         1/370  =   0.3 %   0.0
+3043       G         1/370  =   0.3 %   0.0
+3044       A         1/370  =   0.3 %   0.0
+3045       G         2/370  =   0.5 %   0.0
+3046       G        21/370  =   5.7 %   0.0
+3047       H        23/370  =   6.2 %   0.0
+3048       N        16/370  =   4.3 %   0.0
+3049       Q        22/370  =   5.9 %   0.0
+3050       T        28/370  =   7.6 %   0.0
+3051       S        21/370  =   5.7 %   0.0
+3052       L        36/370  =   9.7 %   0.0
+3053       S        26/370  =   7.0 %   0.0
+3054       S        21/370  =   5.7 %   0.0
+3055       E        33/370  =   8.9 %   0.0
+3056       L        40/370  =  10.8 %   0.1
+3057       W        65/370  =  17.6 %   0.3
+3058       K        40/370  =  10.8 %   0.0
+3059       N        20/370  =   5.4 %   0.0
+3060       P        39/370  =  10.5 %   0.1
+3061       L        30/370  =   8.1 %   0.0
+3062       S        21/370  =   5.7 %   0.0
+3063       S        24/370  =   6.5 %   0.0
+3064       G         1/370  =   0.3 %   0.0
+3065       G         1/370  =   0.3 %   0.0
+3066       G         1/370  =   0.3 %   0.0
+3067       G         1/370  =   0.3 %   0.0
+3068       G         1/370  =   0.3 %   0.0
+3069       A         1/370  =   0.3 %   0.0
+3070       G         1/370  =   0.3 %   0.0
+3071       R        22/370  =   5.9 %   0.0
+3072       N        32/370  =   8.6 %   0.0
+3073       L         1/370  =   0.3 %   0.0
+3074       S         1/370  =   0.3 %   0.0
+3075       T        19/370  =   5.1 %   0.0
+3076       G         1/370  =   0.3 %   0.0
+3077       N         1/370  =   0.3 %   0.0
+3078       T        38/370  =  10.3 %   0.1
+3079       A        23/370  =   6.2 %   0.0
+3080       P        26/370  =   7.0 %   0.0
+3081       R        23/370  =   6.2 %   0.0
+3082       A         1/370  =   0.3 %   0.0
+3083       R        43/370  =  11.6 %   0.0
+3084       P        66/370  =  17.8 %   0.2
+3085       P        69/370  =  18.6 %   0.2
+3086       P        66/370  =  17.8 %   0.2
+3087       G        68/370  =  18.4 %   0.2
+3088       L        64/370  =  17.3 %   0.1
+3089       T        47/370  =  12.7 %   0.1
+3090       N        28/370  =   7.6 %   0.0
+3091       P        31/370  =   8.4 %   0.0
+3092       K        56/370  =  15.1 %   0.1
+3093       N         1/370  =   0.3 %   0.0
+3094       S         1/370  =   0.3 %   0.0
+3095       I         1/370  =   0.3 %   0.0
+3096       P        39/370  =  10.5 %   0.1
+3097       P        20/370  =   5.4 %   0.0
+3098       S         7/370  =   1.9 %   0.0
+3099       A         2/370  =   0.5 %   0.0
+3100       N         2/370  =   0.5 %   0.0
+3101       G         2/370  =   0.5 %   0.0
+3102       V         2/370  =   0.5 %   0.0
+3103       S         2/370  =   0.5 %   0.0
+3104       G         2/370  =   0.5 %   0.0
+3105       L        11/370  =   3.0 %   0.0
+3106       S        52/370  =  14.1 %   0.1
+3107       P        23/370  =   6.2 %   0.0
+3108       W        45/370  =  12.2 %   0.1
+3109       G         1/370  =   0.3 %   0.0
+3110       G         1/370  =   0.3 %   0.0
+3111       P         1/370  =   0.3 %   0.0
+3112       T         1/370  =   0.3 %   0.0
+3113       G         1/370  =   0.3 %   0.0
+3114       P         1/370  =   0.3 %   0.0
+3115       G         1/370  =   0.3 %   0.0
+3116       S         1/370  =   0.3 %   0.0
+3117       G         1/370  =   0.3 %   0.0
+3118       T         1/370  =   0.3 %   0.0
+3119       A         1/370  =   0.3 %   0.0
+3120       T         1/370  =   0.3 %   0.0
+3121       S         1/370  =   0.3 %   0.0
+3122       S        42/370  =  11.4 %   0.1
+3123       S        35/370  =   9.5 %   0.0
+3124       T        30/370  =   8.1 %   0.0
+3125       A        29/370  =   7.8 %   0.0
+3126       T         5/370  =   1.4 %   0.0
+3127       P         6/370  =   1.6 %   0.0
+3128       S         2/370  =   0.5 %   0.0
+3129       T         2/370  =   0.5 %   0.0
+3130       V         1/370  =   0.3 %   0.0
+3131       L         1/370  =   0.3 %   0.0
+3132       P         2/370  =   0.5 %   0.0
+3133       T         6/370  =   1.6 %   0.0
+3134       T         9/370  =   2.4 %   0.0
+3135       I         5/370  =   1.4 %   0.0
+3136       P        35/370  =   9.5 %   0.0
+3137       R        37/370  =  10.0 %   0.0
+3138       G         1/370  =   0.3 %   0.0
+3139       R         1/370  =   0.3 %   0.0
+3140       G         1/370  =   0.3 %   0.0
+3141       S         1/370  =   0.3 %   0.0
+3142       S         1/370  =   0.3 %   0.0
+3143       G         1/370  =   0.3 %   0.0
+3144       D         1/370  =   0.3 %   0.0
+3145       E         1/370  =   0.3 %   0.0
+3146       S        24/370  =   6.5 %   0.0
+3147       V        22/370  =   5.9 %   0.0
+3148       G        23/370  =   6.2 %   0.0
+3149       G        90/370  =  24.3 %   0.3
+3150       W        61/370  =  16.5 %   0.3
+3151       T         2/370  =   0.5 %   0.0
+3152       G        48/370  =  13.0 %   0.1
+3153       N         1/370  =   0.3 %   0.0
+3154       N         1/370  =   0.3 %   0.0
+3155       Q         1/370  =   0.3 %   0.0
+3156       P         1/370  =   0.3 %   0.0
+3157       I         1/370  =   0.3 %   0.0
+3158       P         1/370  =   0.3 %   0.0
+3159       S         1/370  =   0.3 %   0.0
+3160       A         1/370  =   0.3 %   0.0
+3161       A         1/370  =   0.3 %   0.0
+3162       G         2/370  =   0.5 %   0.0
+3163       I         2/370  =   0.5 %   0.0
+3164       T        24/370  =   6.5 %   0.0
+3165       Q        36/370  =   9.7 %   0.0
+3166       D        34/370  =   9.2 %   0.0
+3167       G         4/370  =   1.1 %   0.0
+3168       Y         1/370  =   0.3 %   0.0
+3169       V         3/370  =   0.8 %   0.0
+3170       S        64/370  =  17.3 %   0.1
+3171       R        36/370  =   9.7 %   0.0
+3172       G         3/370  =   0.8 %   0.0
+3173       G         1/370  =   0.3 %   0.0
+3174       V         7/370  =   1.9 %   0.0
+3175       Y        23/370  =   6.2 %   0.0
+3176       A        30/370  =   8.1 %   0.0
+3177       S        35/370  =   9.5 %   0.0
+3178       V         1/370  =   0.3 %   0.0
+3179       G        42/370  =  11.4 %   0.1
+3180       S        49/370  =  13.2 %   0.1
+3181       T        31/370  =   8.4 %   0.0
+3182       W        62/370  =  16.8 %   0.3
+3183       S        38/370  =  10.3 %   0.0
+3184       D        30/370  =   8.1 %   0.0
+3185       G        52/370  =  14.1 %   0.1
+3186       F         4/370  =   1.1 %   0.0
+3187       A         1/370  =   0.3 %   0.0
+3188       N         1/370  =   0.3 %   0.0
+3189       A         2/370  =   0.5 %   0.0
+3190       P         3/370  =   0.8 %   0.0
+3191       S         3/370  =   0.8 %   0.0
+3192       S        27/370  =   7.3 %   0.0
+3193       S        55/370  =  14.9 %   0.1
+3194       D        27/370  =   7.3 %   0.0
+3195       R        40/370  =  10.8 %   0.0
+3196       N        34/370  =   9.2 %   0.0
+3197       S         1/370  =   0.3 %   0.0
+3198       S         1/370  =   0.3 %   0.0
+3199       S         1/370  =   0.3 %   0.0
+3200       G         1/370  =   0.3 %   0.0
+3201       R         1/370  =   0.3 %   0.0
+3202       S        59/370  =  15.9 %   0.1
+3203       N         1/370  =   0.3 %   0.0
+3204       T        54/370  =  14.6 %   0.1
+3205       W        64/370  =  17.3 %   0.2
+3206       L       129/370  =  34.9 %   0.6
+3207       Y        70/370  =  18.9 %   0.3
+3208       L        76/370  =  20.5 %   0.3
+3209       K       111/370  =  30.0 %   0.4
+3210       N       158/370  =  42.7 %   1.1
+3211       L       177/370  =  47.8 %   0.9
+3212       D       105/370  =  28.4 %   0.4
+3213       P        82/370  =  22.2 %   0.3
+3214       Q        64/370  =  17.3 %   0.1
+3215       A         1/370  =   0.3 %   0.0
+3216       D         1/370  =   0.3 %   0.0
+3217       C         1/370  =   0.3 %   0.0
+3218       D         1/370  =   0.3 %   0.0
+3219       G         1/370  =   0.3 %   0.0
+3220       L         1/370  =   0.3 %   0.0
+3221       S         1/370  =   0.3 %   0.0
+3222       L         1/370  =   0.3 %   0.0
+3223       R         1/370  =   0.3 %   0.0
+3224       L         1/370  =   0.3 %   0.0
+3225       S         1/370  =   0.3 %   0.0
+3226       A         1/370  =   0.3 %   0.0
+3227       T         2/370  =   0.5 %   0.0
+3228       E         1/370  =   0.3 %   0.0
+3229       A         1/370  =   0.3 %   0.0
+3230       D         1/370  =   0.3 %   0.0
+3231       F         1/370  =   0.3 %   0.0
+3232       D         1/370  =   0.3 %   0.0
+3233       V         4/370  =   1.1 %   0.0
+3234       I       129/370  =  34.9 %   0.7
+3235       D       122/370  =  33.0 %   0.6
+3236       D        93/370  =  25.1 %   0.4
+3237       E        86/370  =  23.2 %   0.3
+3238       T        67/370  =  18.1 %   0.1
+3239       L       190/370  =  51.4 %   1.1
+3240       R       146/370  =  39.5 %   0.8
+3241       T        65/370  =  17.6 %   0.1
+3242       H         1/370  =   0.3 %   0.0
+3243       F         1/370  =   0.3 %   0.0
+3244       S         1/370  =   0.3 %   0.0
+3245       L        75/370  =  20.3 %   0.1
+3246       F       130/370  =  35.1 %   0.6
+3247       S        93/370  =  25.1 %   0.2
+3248       Q       121/370  =  32.7 %   0.5
+3249       F        91/370  =  24.6 %   0.4
+3250       T         1/370  =   0.3 %   0.0
+3251       S         1/370  =   0.3 %   0.0
+3252       G       203/370  =  54.9 %   1.8
+3253       P        74/370  =  20.0 %   0.2
+3254       L        89/370  =  24.1 %   0.4
+3255       V        55/370  =  14.9 %   0.1
+3256       S       107/370  =  28.9 %   0.3
+3257       A         1/370  =   0.3 %   0.0
+3258       K         1/370  =   0.3 %   0.0
+3259       V         1/370  =   0.3 %   0.0
+3260       M         1/370  =   0.3 %   0.0
+3261       R         1/370  =   0.3 %   0.0
+3262       F        67/370  =  18.1 %   0.1
+3263       I         1/370  =   0.3 %   0.0
+3264       V         1/370  =   0.3 %   0.0
+3265       M         1/370  =   0.3 %   0.0
+3266       K         1/370  =   0.3 %   0.0
+3267       D         1/370  =   0.3 %   0.0
+3268       D         1/370  =   0.3 %   0.0
+3269       K       119/370  =  32.2 %   0.5
+3270       Y         1/370  =   0.3 %   0.0
+3271       P         1/370  =   0.3 %   0.0
+3272       K         1/370  =   0.3 %   0.0
+3273       D         1/370  =   0.3 %   0.0
+3274       K         1/370  =   0.3 %   0.0
+3275       V         1/370  =   0.3 %   0.0
+3276       V        74/370  =  20.0 %   0.3
+3277       M        17/370  =   4.6 %   0.0
+3278       R        10/370  =   2.7 %   0.0
+3279       D         3/370  =   0.8 %   0.0
+3280       D        12/370  =   3.2 %   0.0
+3281       E         7/370  =   1.9 %   0.0
+3282       N         8/370  =   2.2 %   0.0
+3283       P        48/370  =  13.0 %   0.0
+3284       L         3/370  =   0.8 %   0.0
+3285       D         3/370  =   0.8 %   0.0
+3286       Q         3/370  =   0.8 %   0.0
+3287       Q         3/370  =   0.8 %   0.0
+3288       G         5/370  =   1.4 %   0.0
+3289       L        92/370  =  24.9 %   0.2
+3290       E        32/370  =   8.6 %   0.0
+3291       D        18/370  =   4.9 %   0.0
+3292       N         3/370  =   0.8 %   0.0
+3293       G        45/370  =  12.2 %   0.1
+3294       R        33/370  =   8.9 %   0.0
+3295       S        88/370  =  23.8 %   0.2
+3296       S         1/370  =   0.3 %   0.0
+3297       N         1/370  =   0.3 %   0.0
+3298       T         1/370  =   0.3 %   0.0
+3299       R         1/370  =   0.3 %   0.0
+3300       K         1/370  =   0.3 %   0.0
+3301       D         1/370  =   0.3 %   0.0
+3302       K       124/370  =  33.5 %   0.6
+3303       G         1/370  =   0.3 %   0.0
+3304       D         1/370  =   0.3 %   0.0
+3305       G         1/370  =   0.3 %   0.0
+3306       T         1/370  =   0.3 %   0.0
+3307       H         1/370  =   0.3 %   0.0
+3308       R         1/370  =   0.3 %   0.0
+3309       G       187/370  =  50.5 %   1.5
+3310       F        75/370  =  20.3 %   0.1
+3311       Y         1/370  =   0.3 %   0.0
+3312       K         1/370  =   0.3 %   0.0
+3313       Y         1/370  =   0.3 %   0.0
+3314       G       126/370  =  34.1 %   0.7
+3315       F       143/370  =  38.6 %   0.9
+3316       V       163/370  =  44.1 %   0.9
+3317       Q        55/370  =  14.9 %   0.1
+3318       Y       109/370  =  29.5 %   0.8
+3319       S       118/370  =  31.9 %   0.4
+3320       S        92/370  =  24.9 %   0.3
+3321       R        67/370  =  18.1 %   0.1
+3322       E       123/370  =  33.2 %   0.6
+3323       E       136/370  =  36.8 %   0.7
+3324       A       200/370  =  54.1 %   1.2
+3325       E        48/370  =  13.0 %   0.0
+3326       K       122/370  =  33.0 %   0.6
+3327       A       213/370  =  57.6 %   1.3
+3328       Q        65/370  =  17.6 %   0.1
+3329       T        61/370  =  16.5 %   0.1
+3330       A        62/370  =  16.8 %   0.1
+3331       L       141/370  =  38.1 %   0.7
+3332       N       137/370  =  37.0 %   0.9
+3333       G       124/370  =  33.5 %   0.5
+3334       C        62/370  =  16.8 %   0.1
+3335       V        77/370  =  20.8 %   0.2
+3336       L       102/370  =  27.6 %   0.4
+3337       M         2/370  =   0.5 %   0.0
+3338       P         2/370  =   0.5 %   0.0
+3339       G         2/370  =   0.5 %   0.0
+3340       G       143/370  =  38.6 %   0.8
+3341       N        60/370  =  16.2 %   0.2
+3342       K        70/370  =  18.9 %   0.2
+3343       T        84/370  =  22.7 %   0.2
+3344       F         1/370  =   0.3 %   0.0
+3345       H         1/370  =   0.3 %   0.0
+3346       I        82/370  =  22.2 %   0.3
+3347       R         2/370  =   0.5 %   0.0
+3348       L         2/370  =   0.5 %   0.0
+3349       Y        50/370  =  13.5 %   0.1
+3350       V        54/370  =  14.6 %   0.1
+3351       V         2/370  =   0.5 %   0.0
+3352       A       115/370  =  31.1 %   0.4
+3353       E        61/370  =  16.5 %   0.1
+3354       F        54/370  =  14.6 %   0.1
+3355       A         2/370  =   0.5 %   0.0
+3356       Q        53/370  =  14.3 %   0.1
+3357       R        49/370  =  13.2 %   0.1
+3358       E        57/370  =  15.4 %   0.1
+3359       E        70/370  =  18.9 %   0.2
+3360       A         1/370  =   0.3 %   0.0
+3361       A         1/370  =   0.3 %   0.0
+3362       D         1/370  =   0.3 %   0.0
+3363       D         1/370  =   0.3 %   0.0
+3364       E       112/370  =  30.3 %   0.5
+3365       D         1/370  =   0.3 %   0.0
+3366       R         1/370  =   0.3 %   0.0
+3367       I         1/370  =   0.3 %   0.0
+3368       K         1/370  =   0.3 %   0.0
+3369       R         1/370  =   0.3 %   0.0
+3370       V        56/370  =  15.1 %   0.0
+3371       Q        39/370  =  10.5 %   0.1
+3372       R         1/370  =   0.3 %   0.0
+3373       T         1/370  =   0.3 %   0.0
+3374       M         1/370  =   0.3 %   0.0
+3375       R        50/370  =  13.5 %   0.1
+3376       F        43/370  =  11.6 %   0.1
+3377       L        89/370  =  24.1 %   0.2
+3378       A        41/370  =  11.1 %   0.0
+3379       Q        61/370  =  16.5 %   0.1
+3380       A        23/370  =   6.2 %   0.0
+3381       Q        54/370  =  14.6 %   0.1
+3382       P        29/370  =   7.8 %   0.0
+3383       Q        39/370  =  10.5 %   0.0
+3384       T        36/370  =   9.7 %   0.0
+3385       P        49/370  =  13.2 %   0.1
+3386       A        31/370  =   8.4 %   0.0
+3387       S        28/370  =   7.6 %   0.0
+3388       T        35/370  =   9.5 %   0.0
+3389       P        20/370  =   5.4 %   0.0
+3390       S        35/370  =   9.5 %   0.0
+3391       A        31/370  =   8.4 %   0.0
+3392       L         1/370  =   0.3 %   0.0
+3393       P        26/370  =   7.0 %   0.0
+3394       G         1/370  =   0.3 %   0.0
+3395       A         1/370  =   0.3 %   0.0
+3396       P         1/370  =   0.3 %   0.0
+3397       P         2/370  =   0.5 %   0.0
+3398       G         4/370  =   1.1 %   0.0
+3399       S        34/370  =   9.2 %   0.0
+3400       S        23/370  =   6.2 %   0.0
+3401       G        57/370  =  15.4 %   0.1
+3402       D         1/370  =   0.3 %   0.0
+3403       R         1/370  =   0.3 %   0.0
+3404       Y         1/370  =   0.3 %   0.0
+3405       W        35/370  =   9.5 %   0.1
+3406       Q        39/370  =  10.5 %   0.0
+3407       S        43/370  =  11.6 %   0.0
+3408       L        32/370  =   8.6 %   0.0
+3409       G        26/370  =   7.0 %   0.0
+3410       G         2/370  =   0.5 %   0.0
+3411       G         1/370  =   0.3 %   0.0
+3412       G         5/370  =   1.4 %   0.0
+3413       S        19/370  =   5.1 %   0.0
+3414       S        34/370  =   9.2 %   0.0
+3415       G         2/370  =   0.5 %   0.0
+3416       G         1/370  =   0.3 %   0.0
+3417       I         1/370  =   0.3 %   0.0
+3418       V         1/370  =   0.3 %   0.0
+3419       G         1/370  =   0.3 %   0.0
+3420       G         1/370  =   0.3 %   0.0
+3421       V         1/370  =   0.3 %   0.0
+3422       D         1/370  =   0.3 %   0.0
+3423       T         2/370  =   0.5 %   0.0
+3424       Q        40/370  =  10.8 %   0.1
+3425       S         2/370  =   0.5 %   0.0
+3426       N         1/370  =   0.3 %   0.0
+3427       P         2/370  =   0.5 %   0.0
+3428       A         1/370  =   0.3 %   0.0
+3429       S        25/370  =   6.8 %   0.0
+3430       R        20/370  =   5.4 %   0.0
+3431       S        19/370  =   5.1 %   0.0
+3432       G        22/370  =   5.9 %   0.0
+3433       R         1/370  =   0.3 %   0.0
+3434       A         3/370  =   0.8 %   0.0
+3435       P        24/370  =   6.5 %   0.0
+3436       V        18/370  =   4.9 %   0.0
+3437       G        37/370  =  10.0 %   0.1
+3438       P        20/370  =   5.4 %   0.0
+3439       A        23/370  =   6.2 %   0.0
+3440       L        17/370  =   4.6 %   0.0
+3441       N        16/370  =   4.3 %   0.0
+3442       L        28/370  =   7.6 %   0.0
+3443       F        28/370  =   7.6 %   0.0
+3444       G        30/370  =   8.1 %   0.0
+3445       Q         1/370  =   0.3 %   0.0
+3446       W         1/370  =   0.3 %   0.0
+3447       G         2/370  =   0.5 %   0.0
+3448       S        24/370  =   6.5 %   0.0
+3449       S        26/370  =   7.0 %   0.0
+3450       T        29/370  =   7.8 %   0.0
+3451       G        32/370  =   8.6 %   0.0
+3452       L        21/370  =   5.7 %   0.0
+3453       G        33/370  =   8.9 %   0.0
+3454       Y         1/370  =   0.3 %   0.0
+3455       C         1/370  =   0.3 %   0.0
+3456       A         1/370  =   0.3 %   0.0
+3457       P         1/370  =   0.3 %   0.0
+3458       Q        18/370  =   4.9 %   0.0
+3459       W        34/370  =   9.2 %   0.1
+3460       G         1/370  =   0.3 %   0.0
+3461       S        25/370  =   6.8 %   0.0
+3462       S        26/370  =   7.0 %   0.0
+3463       S        27/370  =   7.3 %   0.0
+3464       M         2/370  =   0.5 %   0.0
+3465       G        11/370  =   3.0 %   0.0
+3466       A        18/370  =   4.9 %   0.0
+3467       G        29/370  =   7.8 %   0.0
+3468       G        48/370  =  13.0 %   0.1
+3469       S        27/370  =   7.3 %   0.0
+3470       S        21/370  =   5.7 %   0.0
+3471       G        27/370  =   7.3 %   0.0
+3472       G         2/370  =   0.5 %   0.0
+3473       N         2/370  =   0.5 %   0.0
+3474       N         2/370  =   0.5 %   0.0
+3475       A        22/370  =   5.9 %   0.0
+3476       D        27/370  =   7.3 %   0.0
+3477       L        29/370  =   7.8 %   0.0
+3478       P         1/370  =   0.3 %   0.0
+3479       R         1/370  =   0.3 %   0.0
+3480       A        20/370  =   5.4 %   0.0
+3481       G        41/370  =  11.1 %   0.1
+3482       L         2/370  =   0.5 %   0.0
+3483       P         2/370  =   0.5 %   0.0
+3484       T        21/370  =   5.7 %   0.0
+3485       S        28/370  =   7.6 %   0.0
+3486       L        40/370  =  10.8 %   0.0
+3487       W        40/370  =  10.8 %   0.1
+3488       G        45/370  =  12.2 %   0.1
+3489       S         1/370  =   0.3 %   0.0
+3490       G         1/370  =   0.3 %   0.0
+3491       W         1/370  =   0.3 %   0.0
+3492       G         5/370  =   1.4 %   0.0
+3493       P        18/370  =   4.9 %   0.0
+3494       P        37/370  =  10.0 %   0.1
+3495       N        18/370  =   4.9 %   0.0
+3496       Y        33/370  =   8.9 %   0.0
+3497       S         1/370  =   0.3 %   0.0
+3498       S         1/370  =   0.3 %   0.0
+3499       S         1/370  =   0.3 %   0.0
+3500       S        41/370  =  11.1 %   0.0
+3501       S        35/370  =   9.5 %   0.0
+3502       G         1/370  =   0.3 %   0.0
+3503       S        47/370  =  12.7 %   0.1
+3504       L        37/370  =  10.0 %   0.0
+3505       G         1/370  =   0.3 %   0.0
+3506       W        39/370  =  10.5 %   0.1
+3507       G        37/370  =  10.0 %   0.1
+3508       P        24/370  =   6.5 %   0.0
+3509       P        36/370  =   9.7 %   0.1
+3510       S        20/370  =   5.4 %   0.0
+3511       V        21/370  =   5.7 %   0.0
+3512       E        21/370  =   5.7 %   0.0
+3513       D        34/370  =   9.2 %   0.0
+3514       P        28/370  =   7.6 %   0.0
+3515       R        19/370  =   5.1 %   0.0
+3516       R        16/370  =   4.3 %   0.0
+3517       I        19/370  =   5.1 %   0.0
+3518       G        31/370  =   8.4 %   0.0
+3519       S        43/370  =  11.6 %   0.1
+3520       P        38/370  =  10.3 %   0.1
+3521       A        16/370  =   4.3 %   0.0
+3522       P        36/370  =   9.7 %   0.1
+3523       L        22/370  =   5.9 %   0.0
+3524       N        19/370  =   5.1 %   0.0
+3525       A        11/370  =   3.0 %   0.0
+3526       F        13/370  =   3.5 %   0.0
+3527       L        38/370  =  10.3 %   0.0
+3528       P        27/370  =   7.3 %   0.0
+3529       G        25/370  =   6.8 %   0.0
+3530       D        37/370  =  10.0 %   0.1
+3531       L        26/370  =   7.0 %   0.0
+3532       L        38/370  =  10.3 %   0.0
+3533       G        26/370  =   7.0 %   0.0
+3534       G        36/370  =   9.7 %   0.1
+3535       G        26/370  =   7.0 %   0.0
+3536       S        24/370  =   6.5 %   0.0
+3537       D        17/370  =   4.6 %   0.0
+3538       S        26/370  =   7.0 %   0.0
+3539       I        16/370  =   4.3 %   0.0
+
+Average conservation = 0.0
diff --git a/test/scripts/automated/belvu/test9 b/test/scripts/automated/belvu/test9
new file mode 100755
index 0000000..1bf819d
--- /dev/null
+++ b/test/scripts/automated/belvu/test9
@@ -0,0 +1,25 @@
+#!/bin/ksh
+#
+# Description:
+#   Test reading a file in 'raw' format. Check that it can
+#   be output into a different format.
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run belvu and check if there are any differences to the saved results
+diffs=`belvu -o MSF -r $data_dir/PF02171_seed.fasta >&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
+
diff --git a/test/scripts/automated/belvu/test9_results b/test/scripts/automated/belvu/test9_results
new file mode 100644
index 0000000..ae9a7a1
--- /dev/null
+++ b/test/scripts/automated/belvu/test9_results
@@ -0,0 +1,236 @@
+PileUp
+
+ automated/belvu/../../../data/PF02171_seed.fasta  MSF: 412  Type: X  Check: 9189  ..
+
+  Name: YQ53_CAEEL/650-977     Len:    412  Check:   5009  Weight: 1.0000
+  Name: Q21691_CAEEL/673-1001  Len:    412  Check:   9881  Weight: 1.0000
+  Name: O48771_ARATH/542-860   Len:    412  Check:    634  Weight: 1.0000
+  Name: Q9ZVD5_ARATH/577-885   Len:    412  Check:   2274  Weight: 1.0000
+  Name: TAG76_CAEEL/660-966    Len:    412  Check:   8804  Weight: 1.0000
+  Name: O16720_CAEEL/566-867   Len:    412  Check:   7433  Weight: 1.0000
+  Name: PINH_ARATH/625-946     Len:    412  Check:   7730  Weight: 1.0000
+  Name: AGO1_SCHPO/500-799     Len:    412  Check:   1021  Weight: 1.0000
+  Name: O76922_DROME/555-852   Len:    412  Check:   4289  Weight: 1.0000
+  Name: PIWI_DROME/538-829     Len:    412  Check:   7323  Weight: 1.0000
+  Name: Q17567_CAEEL/397-708   Len:    412  Check:   4176  Weight: 1.0000
+  Name: PIWL1_HUMAN/555-847    Len:    412  Check:   9105  Weight: 1.0000
+  Name: PIWI_ARCFU/110-406     Len:    412  Check:   5661  Weight: 1.0000
+  Name: Y1321_METJA/426-699    Len:    412  Check:   5582  Weight: 1.0000
+  Name: O67434_AQUAE/419-694   Len:    412  Check:   5245  Weight: 1.0000
+  Name: Q21495_CAEEL/52-336    Len:    412  Check:   8897  Weight: 1.0000
+  Name: O16386_CAEEL/548-847   Len:    412  Check:   7301  Weight: 1.0000
+  Name: O16386_CAEEL/879-1178  Len:    412  Check:   7301  Weight: 1.0000
+  Name: O02095_CAEEL/574-878   Len:    412  Check:   5686  Weight: 1.0000
+  Name: Q19645_CAEEL/674-996   Len:    412  Check:   5696  Weight: 1.0000
+  Name: Q23415_CAEEL/40-350    Len:    412  Check:   7766  Weight: 1.0000
+  Name: O62275_CAEEL/594-924   Len:    412  Check:   2375  Weight: 1.0000
+
+//
+
+YQ53_CAEEL/650-977     DILvgiAR.E KKPD.VHDIL KYFEESIGLQ TIQLCQQTVD KM.....MG. 
+Q21691_CAEEL/673-1001  TIVFGIIA.E KRPD.MHDIL kyfeeklGQQ TIQISSETAD KF.....MR. 
+O48771_ARATH/542-860   FILCILPERK TSDI.YGPWK KICLTEEGIH TQCICPIKI. .......... 
+Q9ZVD5_ARATH/577-885   FILCVLPDKK NSDL.YGPWK KKNLTEFGIV TQCMAPTRQP ND........ 
+TAG76_CAEEL/660-966    CIIVVLQS.K NSDI.YMTVK EQSDIVHGIM SQCVLMKNVS RP........ 
+O16720_CAEEL/566-867   LIVVVLPG.. KTPI.YAEVK RVGDTVLGIA TQCVQAKNAI RT........ 
+PINH_ARATH/625-946     LLLAILPD.N NGSL.YGDLK RICETELGLI SQCCLTKHVF KI........ 
+AGO1_SCHPO/500-799     YLFFILDK.N SPEP.YGSIK RVCNTMLGVP SQCAISKHIL QS........ 
+O76922_DROME/555-852   IVMVVMRS.P NEEK.YSCIK KRTCVDRPVP SQVVTLKVIA PR.....QQ. 
+PIWI_DROME/538-829     LILCLVPN.D NAER.YSSIK KRGYVDRAVP TQVVTLKTTK NR.....SL. 
+Q17567_CAEEL/397-708   MLVVMLAD.D NKTR.YDSLK KYLCVECPIP NQCVNLRTLA GK.....SKD 
+PIWL1_HUMAN/555-847    IVVCLLSS.N RKDK.YDAIK KYLCTDCPTP SQCVVARTLG KQ.....QT. 
+PIWI_ARCFU/110-406     GIMLVLPE.Y NTPL.YYKLK SYLINS..IP SQFMRYDILS NR.....NL. 
+Y1321_METJA/426-699    CFALIIGKEK YKDNDYYEIL KKQLFDLKII SQNILWENWR KD.....DK. 
+O67434_AQUAE/419-694   LVIVFLEEYP KVDP.YKSFL LYDFVKRELL KKMIPSQVIL NR.....TL. 
+Q21495_CAEEL/52-336    GIVLPTPRIF FRDG...... ....QETSLN NQSFRNPT.. .......... 
+O16386_CAEEL/548-847   QLIMFITK.. SMNN.YHTEI KCLEQEFDLL TQDIRFETAV KL.....AQ. 
+O16386_CAEEL/879-1178  QLIMFITK.. SMNN.YHTEI KCLEQEFDLL TQDIRFETAV KL.....AQ. 
+O02095_CAEEL/574-878   QLLFFVVK.. SRYN.YHQQI KALEQKYDVL TQEIRAETAE KV.....FR. 
+Q19645_CAEEL/674-996   PFVLFISD.. DVPN.IHECL KFEERMSDIP TQHVLLKNVK KMRDNIEKKS 
+Q23415_CAEEL/40-350    KFAFVITD.D SITH.LHKKY KALEQKSMMV IQDMKISKAN SV.....VK. 
+O62275_CAEEL/594-924   TFVFIITD.D SITT.LHQRY KMIEKDTKMI VQDMKLSKAL SV........ 
+
+YQ53_CAEEL/650-977     ...GQGGRQT IDNVMRKFNL KCGGTNFFVE IPNAVRGKAV CSNNETLRKK 
+Q21691_CAEEL/673-1001  ...DHGGKQT IDNVIRKLNP KCGGTNFLID VPESVGHRVV CNNSAEMRAK 
+O48771_ARATH/542-860   ......SDQY LTNVLLKINS KLGGINS.LL GIEYSYNIPL INKIPTL... 
+Q9ZVD5_ARATH/577-885   ........QY LTNLLLKINA KLGGLNS.ML SVERTPAFTV ISKVPTI... 
+TAG76_CAEEL/660-966    ......TPAT CANIVLKLNM KMGGIN..SR IVADKITNKY LVDQPTM... 
+O16720_CAEEL/566-867   ......TPQT LSNLCLKMNV KLGGVNS.IL LPNVRPR... IFNEPVI... 
+PINH_ARATH/625-946     ......SKQY LANVSLKINV KMGGRNT.VL VDAISCRIPL VSDIPTI... 
+AGO1_SCHPO/500-799     ......KPQY CANLGMKINV KVGGINC.SL IPKSNP.... LGNVPTL... 
+O76922_DROME/555-852   ..KPTGLMSI ATKVVIQMNA KLMGA...PW QVVIPL.... ...HGLM... 
+PIWI_DROME/538-829     .......MSI ATKIAIQLNC KLGYT...PW MIELPL.... ...SGLM... 
+Q17567_CAEEL/397-708   GGENKNLGSI VLKIVLQMIC KTGGA...LW KVNIPL.... ...KSTM... 
+PIWL1_HUMAN/555-847    ......VMAI ATKIALQMNC KMGGE...LW RVDIPL.... ...KLVM... 
+PIWI_ARCFU/110-406     .......TFY VDNLLVQFVS KLGGK...PW ILNVDPEK.. .......... 
+Y1321_METJA/426-699    .......GYM TNNLLIQIMG KLGIK...YF ILDSKTPYDY .......... 
+O67434_AQUAE/419-694   ..KNENLKFV LLNVAEQVLA KTGNIP..YK LKEIEGKVDA .......... 
+Q21495_CAEEL/52-336    .......DFA QTGFFVDAKQ QLGGLN..YV VNS.....ET WNDSGLL... 
+O16386_CAEEL/548-847   ......QQNT RKNIIYKTNM KLGGLN..YE LRS.....GV FSNSKRL... 
+O16386_CAEEL/879-1178  ......QQNT RKNIIYKTNM KLGGLN..YE LRS.....GV FSNSKRL... 
+O02095_CAEEL/574-878   ......QPQT RLNIINKTNM KLGGLN..YA IGS.....EA FNKPNRL... 
+Q19645_CAEEL/674-996   QGGRRAYDLT LDNIVMKANI KCGGLN..YT .ADIPRDLAC WNEVSTF... 
+Q23415_CAEEL/40-350    ....DGKRLT LENVINKTNM KLGGLN..YT VSDAKKSMT. ...DEQL... 
+O62275_CAEEL/594-924   ..INAGKRLT LENVINKTNV KLGGSN..YV FVDAKKQL.. ...DSHL... 
+
+YQ53_CAEEL/650-977     LLEHVQFIGF EISHGASRTL FDRSRSQMDG EPSVVGVSYS LT...NSTQL 
+Q21691_CAEEL/673-1001  LYAKTQFIGF EMSHTGARTR FDIQKVMFDG DPTVVGVAYS L..KHSAQLG 
+O48771_ARATH/542-860   ......ILGM DVSHGPPGR. ........AD VPSVAAVVGS KCWPLISRYR 
+Q9ZVD5_ARATH/577-885   ......ILGM DVSHGSPGQ. ........SD VPSIAAVVSS REWPLISKYR 
+TAG76_CAEEL/660-966    ......VVGI DVTHPTQAE. ......MRMN MPSVAAIVAN VD.LLPQSYG 
+O16720_CAEEL/566-867   ......FLGC DITHPAAGD. ........TR KPSIAAVVGS MD.AHPSRYA 
+PINH_ARATH/625-946     ......IFGA DVTHPENGE. ........ES SPSIAAVVAS QDWPEVTKYA 
+AGO1_SCHPO/500-799     ......ILGG DVYHPGVGA. .........T GVSIASIVAS VD.LNGCKYT 
+O76922_DROME/555-852   ......TVGF DVCHSPKNK. .......... NKSYGAFVAT MDQKESFRYF 
+PIWI_DROME/538-829     ......TIGF DIAKSTRDR. .......... KRAYGALIAS MDLQQNSTYF 
+Q17567_CAEEL/397-708   ......IVGY DLYHDSTLK. .......... GKTVGACVST TS.NDFTQFY 
+PIWL1_HUMAN/555-847    ......IVGI DCYHDMTAG. .......... RRSIAGFVAS IN.EGMTRWF 
+PIWI_ARCFU/110-406     ........GS DIIIGTGAT. .......RID NVNLFCFAMV FK.KDGTMLW 
+Y1321_METJA/426-699    ......IMGL DTGLGIFGN. .......... .HRVGGCTVV YDSEGKIRRI 
+O67434_AQUAE/419-694   ......FVGI DISRITRDG. .........K TVNAVAFTKI FNSKGELVRY 
+Q21495_CAEEL/52-336    ......LIGL STAPYLNSY. .......SSE NVTTIGFVSN TM.DHPQKFA 
+O16386_CAEEL/548-847   ......IIGF ETSQRGGLG. .........D APIAIGFAAN MM.SHSQQFA 
+O16386_CAEEL/879-1178  ......IIGF ETSQRGGLG. .........D APIAIGFAAN MM.SHSQQFA 
+O02095_CAEEL/574-878   ......IVGF VTSQRVGGN. ........PD YPISVGFAAN ML.KHHQKFA 
+Q19645_CAEEL/674-996   ......VIGM DVAHPDRNA. ......AREG NPSTVGLSCN SA.ENPYSFI 
+Q23415_CAEEL/40-350    ......IIGV GVSAPPAGT. KYMMDNKGHL NPQIIGFASN A..VANHEFV 
+O62275_CAEEL/594-924   ......IIGV GISAPPAGT. KYAMENKGVL NPNVIGYAYN A..QHNQEFS 
+
+YQ53_CAEEL/650-977     GGFTYLQTQK EYKLQKLDE. .......... .FFPKCVRSY KEHSKT.LPT 
+Q21691_CAEEL/673-1001  GFSYFQESRL HKLTN.LQE. .......... .KMQICLNAY EQSSSY.LPE 
+O48771_ARATH/542-860   AAVRTQSPRL EMIDSLFQP. .IENTEKGDN GIMNELFVEF YRTSRARKPK 
+Q9ZVD5_ARATH/577-885   ASVRTQPSKA EMIESLVKK. ....NGTEDD GIIKELLVDF YTSSNKRKPE 
+TAG76_CAEEL/660-966    ANVKVQKKCR ESVVY.LLD. .......... .AIRERIITF YRHTKQ.KPA 
+O16720_CAEEL/566-867   ATVRVQQHRQ EIITD.LTY. .......... .MVRELLVQF YRNTRF.KPA 
+PINH_ARATH/625-946     GLVCAQAHRQ ELIQDLYKTW QDPVRGTVSG GMIRDLLISF RKATGQ.KPL 
+AGO1_SCHPO/500-799     AVSRSQPRHQ EVIEG.MKD. .......... .IVVYLLQGF RAMTKQ.QPQ 
+O76922_DROME/555-852   STVNEHIKGQ ELSEQ.MSV. .......... .NMACALRSY QEQHRS.LPE 
+PIWI_DROME/538-829     STV.TECSAF DVLANTLWP. .......... .MIAKALRQY QHEHRK.LPS 
+Q17567_CAEEL/397-708   SQTRPHENPT QLGNN.LTH. .......... .FVRKSLKQY YDNNDKTLPS 
+PIWL1_HUMAN/555-847    SRCIFQDRGQ ELVDG.LKV. .......... .CLQAALRAW .NSCNEYMPS 
+PIWI_ARCFU/110-406     NEISPIVTSS EYLTY.LKS. .......... .TIKKVVYGF KKSNPDWDVE 
+Y1321_METJA/426-699    QPIETPAPGE RLHLP..... .......... .YVIEYLEN. .KANIDMENK 
+O67434_AQUAE/419-694   YLTSYPAFGE KLTEK..... .......... .AIGDVFSLL EKLGF.KKGS 
+Q21495_CAEEL/52-336    GGYKYVKSGS DVFGQVMPE. .......... .ILLNSLRSA RKARKI.KPM 
+O16386_CAEEL/548-847   GGYMFVKKSA DNYGPVIPE. .......... .ILLTILKQA KANRPNDRPD 
+O16386_CAEEL/879-1178  GGYMFVKKSA DNYGPVIPE. .......... .ILLTILKQA KANRPNDRPD 
+O02095_CAEEL/574-878   GGYVYVHRDR DVFGSIIKD. .......... .TLLAIFKTC TEQRG..RPD 
+Q19645_CAEEL/674-996   GDFLYTDPRR EAIQDEILR. .......... KFTDQSVRNF AEIRG..FPK 
+Q23415_CAEEL/40-350    GDFVLAPSGQ DTMAS.IED. .......... .VLKSSIDLF EMNRNT.LPK 
+O62275_CAEEL/594-924   GDFVLNSASQ DTLAP.IED. .......... .IVMHSLNEY QKFHDGGLPR 
+
+YQ53_CAEEL/650-977     RIVIYRVGAG EGNFNRVKE. EVEEMRRTFD .......KIQ .PGYR..PHL 
+Q21691_CAEEL/673-1001  TVVVYRVGSG EGDYPQIVN. EVNEMKLAAR .......KKK .HGYN..PKF 
+O48771_ARATH/542-860   QIIIFRDGVS ESQFEQVLKI EVDQIIKAYQ .......RLG .ESDV..PKF 
+Q9ZVD5_ARATH/577-885   HIIIFRDGVS ESQFNQVLNI ELDQIIEACK .......LLD .ANWN..PKF 
+TAG76_CAEEL/660-966    RIIVYRDGVS EGQFSEVLRE EIQSIRTACL .......AIA .EDFR..PPI 
+O16720_CAEEL/566-867   RIVVYRDGVS EGQLFNVLQY ELRAIREACV .......MLE .SGYQ..PGI 
+PINH_ARATH/625-946     RIIFYRDGVS EGQFYQVLLY ELDAIRKACA .......SLE .PNYQ..PPV 
+AGO1_SCHPO/500-799     RIIYFRDGTS EGQFLSVIND ELSQIKEACH .......SLS .PKYN..PKI 
+O76922_DROME/555-852   RILFFRDGVG DGQLYQVVNS EVNTLKDRLD EI...YKSAG .KQEG..CRM 
+PIWI_DROME/538-829     RIVFYRDGVS SGSLKQLFEF EVKDIIEKLK TE...YARVQ .LSP...PQL 
+Q17567_CAEEL/397-708   RLILYRDGAG DGQIPYIKNT EVKLVRDACD AVTDKAAELS .NKVQEKIKL 
+PIWL1_HUMAN/555-847    RIIVYRDGVG DGQLKTLVNY EVPQFLDCLK .......SIG .RGYN..PRL 
+PIWI_ARCFU/110-406     KLTLHVSG.. ..KRPKMKDG ETKILKETVE .......ELK .KQEMVSRDV 
+Y1321_METJA/426-699    NILFLRDG.. .....FIQNS ERNDLKEISK .......ELN .......SNI 
+O67434_AQUAE/419-694   KIVVHRDG.. .....RLYRD EVAAFK.... .......KYG .ELYG..YSL 
+Q21495_CAEEL/52-336    NIVIYLCGMS ESRFSIVKEE YVRNCHSVFK .......TLG .EKYS..PQL 
+O16386_CAEEL/548-847   ELLIYFSGVS EGQHALVNEY YANQVKAACG .......LFN .ESFR..PHI 
+O16386_CAEEL/879-1178  ELLIYFSGVS EGQHALVNEY YANQVKAACG .......LFN .ESFR..PHI 
+O02095_CAEEL/574-878   DILLYFNGVS EGQFSMINEE FSARVKEACM AF...QKEGT .PPFR..PHI 
+Q19645_CAEEL/674-996   KVIIFRDGVS FGEETAALK. EVEIIEQTIK TA...AKSMG HSDYA..PKV 
+Q23415_CAEEL/40-350    RIIIYRSGAS DGSHASILAY EIPLARATIQ .......GYS .KDIN....L 
+O62275_CAEEL/594-924   RVIVYRTGTS EGNHGSIMAY EIPLARAAMR .......DFS .PDIQ....L 
+
+YQ53_CAEEL/650-977     VVIIAQRASH ARVFPSCISG .......... .......... .NRATDQNIP 
+Q21691_CAEEL/673-1001  LVICTQRNSH IRVFPEHINE .......... .......... RGKSMEQNVK 
+O48771_ARATH/542-860   TVIVAQKNHH TKLFQAKGPE .......... .......... .......NVP 
+Q9ZVD5_ARATH/577-885   LLLVAQKNHH TKFFQPTSPE .......... .......... .......NVP 
+TAG76_CAEEL/660-966    TYIVVQKRHH ARIFCKYQND .......... .......... .MVGKAKNVP 
+O16720_CAEEL/566-867   TFIAVQKRHH TRLFAADKAD .......... .......... .QVGKAFNIP 
+PINH_ARATH/625-946     TFIVVQKRHH TRLFANNHRD .......... .........K NSTDRSGNIL 
+AGO1_SCHPO/500-799     LVCTTQKRHH ARFFIKNKSD .......... .......... ..GDRNGNPL 
+O76922_DROME/555-852   TFIIVSKRIN SRYFT..... .......... .......... ....GHRNPV 
+PIWI_DROME/538-829     AYIVVTRSMN TRFFLN.... .......... .......... .....GQNPP 
+Q17567_CAEEL/397-708   AFIIVTKRVN MRILKQGSSS .......... .......... ...KSAINPQ 
+PIWL1_HUMAN/555-847    TVIVVKKRVN TRFFAQSGGR .......... .......... .....LQNPL 
+PIWI_ARCFU/110-406     KYAILHLNET HPFWVMGDPN .......... .......... ....NRFHPY 
+Y1321_METJA/426-699    EVISIRKNNK YKVFTSDYRI .......... .......... ....GSVFGN 
+O67434_AQUAE/419-694   ELLEIIKRNN PRFFSNEKFI .......... .......... .......... 
+Q21495_CAEEL/52-336    TIIVGSKGHS TRLYARGERD .......... .......... ....QISNLQ 
+O16386_CAEEL/548-847   TLILASKVHN TRVYKSENGG .......... .......... ....GVCNVE 
+O16386_CAEEL/879-1178  TLILASKVHN TRVYKSENGG .......... .......... ....GVCNVE 
+O02095_CAEEL/574-878   TIIASSKAHN ERLYKSDKGR .......... .......... .....IVNLE 
+Q19645_CAEEL/674-996   LAIVVKKRHH TRFYAKGGHH .......... .......... ..GNMPINPL 
+Q23415_CAEEL/40-350    IYIIVTKEHS YRFFRDQLRS .......... .......... GGKATEMNIP 
+O62275_CAEEL/594-924   VYIVVSKDHS FRFFKPDLAS LASRPQATSS TASRHSAMPA APKAWDLNIA 
+
+YQ53_CAEEL/650-977     SGTCV...EN VLTSYGYDEF ILSSQTPLIG TVRPCKYTIL VNDA...KWS 
+Q21691_CAEEL/673-1001  SGTCV...DV PGASHGYEEF ILCCQTPLIG TVKPTKYTII VNDC...RWS 
+O48771_ARATH/542-860   AGTVV...DT KIVHPTNYDF YMCAHAGKIG TSRPAHYHVL LDEI...GFS 
+Q9ZVD5_ARATH/577-885   PGTII...DN KICHPKNNDF YLCAHAGMIG TTRPTHYHVL YDEI...GFS 
+TAG76_CAEEL/660-966    PGTTV...DT GIVSPEGFDF YLCSHYGVQG TSRPARYHVL LDEC...KFT 
+O16720_CAEEL/566-867   PGTTV...DV GITHPTEFDF FLCSHAGIQG TSRPSHYHVL WDDN...DLT 
+PINH_ARATH/625-946     PGTVV...DT KICHPTEFDF YLCSHAGIQG TSRPAHYHVL WDEN...NFT 
+AGO1_SCHPO/500-799     PGTII...EK HVTHPYQYDF YLISHPSLQG VSVPVHYTVL HDEI...QMP 
+O76922_DROME/555-852   PGTVV...DD VITLPERYDF FLVSQAVRIG TVSPTSYNVI SDNM...GLN 
+PIWI_DROME/538-829     PGTIV...DD VITLPERYDF YLVSQQVRQG TVSPTSYNVL YSSM...GLS 
+Q17567_CAEEL/397-708   PGTVV...DT TVTRPERMDF YLVPQFVNQG TVTPVSYNII HDDT...GLG 
+PIWL1_HUMAN/555-847    PGTVI...DV EVTRPEWYDF FIVSQAVRSG SVSPTHYNVI YDNS...GLK 
+PIWI_ARCFU/110-406     EGTKVKLSSK RYLLTLLQPY LKRNGLEMVT PIKPLSVEIV SDN.....WT 
+Y1321_METJA/426-699    DGIFLPHKTP FGSNPVKLST WLRFNCGNEE GLK...IN.. .......... 
+O67434_AQUAE/419-694   KGYFYKLSED SVILATYNQV Y.......EG THQPIKVRKV YGE.....LP 
+Q21495_CAEEL/52-336    PGTIV...DS VIVSPDYNKF FHCGAVARQG TCKATKYTVL YPE....SPK 
+O16386_CAEEL/548-847   PGTVI...DH TIVSPVLSEW YHAGSLARQG TSKLVKYSLI FNTK...KNE 
+O16386_CAEEL/879-1178  PGTVI...DH TIVSPVLSEW YHAGSLARQG TSKLVKYSLI FNTK...KNE 
+O02095_CAEEL/574-878   PGTVV...DH TIVSNVYTEW YHASAVARQG TAKATKFTLI FTTKAGPQAE 
+Q19645_CAEEL/674-996   PDTSV...GG DIAEYGKRQI FIQAFRPVQG TAKVPSFLVI RDDE...EVS 
+Q23415_CAEEL/40-350    PGIVL...DS AVTNPACKQF FLNGHTTLQG TAKTPLYTIL ADDC...NAP 
+O62275_CAEEL/594-924   PGILV...DS IVTNPACKQF FLNSHITLQG TAKTPLYTVL ADDA...KVS 
+
+YQ53_CAEEL/650-977     KNEL.MHL.. ....TYFRAF GHQVSY.... QPPSV..... ...PDVLYAA 
+Q21691_CAEEL/673-1001  KNEI.MNV.. ....TYHLAF AHQVSY.... APPAI..... ...PNVSYAA 
+O48771_ARATH/542-860   PDDL.QNL.. ....IHSLSY KLLNSI.... FNVSSLLCVF VLSVAPVRYA 
+Q9ZVD5_ARATH/577-885   ADEL.QEL.. ....VHSLSY VYQRST.... SAISV..... ...VAPICYA 
+TAG76_CAEEL/660-966    ADEI.QSI.. ....TYGMCH TYGRCT.... RSVSI..... ...PTPVYYA 
+O16720_CAEEL/566-867   ADEL.QQL.. ....TYQMCH TYVRCT.... RSVSI..... ...papAYya 
+PINH_ARATH/625-946     ADGI.QSL.. ....TNNLCY TYARCT.... RSVSI..... ...VPPAYYA 
+AGO1_SCHPO/500-799     PDQF.QTL.. ....CYNLCY VYARAT.... SAVSL..... ...VPPVYYA 
+O76922_DROME/555-852   ADKL.QML.. ....SYKMTH MYYNYS.... GTIRV..... ...PAVCHYA 
+PIWI_DROME/538-829     PEKM.QKL.. ....TYKMCH LYYNWS.... GTTRV..... ...PAVCQYA 
+Q17567_CAEEL/397-708   PDKH.QQL.. ....AFKLCH LYYNWQ.... GTVRV..... ...PAPCQYA 
+PIWL1_HUMAN/555-847    PDHI.QRL.. ....TYKLCH IYYNWP.... GVIRV..... ...PAPCQYA 
+PIWI_ARCFU/110-406     SEEYYHNVHE ILDEIYYLSK MNWRGF.... RSRNL..... ...PVTVNYP 
+Y1321_METJA/426-699    .ESI.MQL.. ....LYDLTK MNYSALYGEG RYLRI..... ...PAPIHYA 
+O67434_AQUAE/419-694   VEVL.CSQ.. ....ILSLTL MNYSSF.... QPIKL..... ...PATVHYS 
+Q21495_CAEEL/52-336    MEWI.QRM.. ....TNDLCY MHEIVF.... HPVSL..... ...PAPLYLT 
+O16386_CAEEL/548-847   KLSVYERL.. ....TNELCY EMQIVF.... HPTSL..... ...PIPLHIA 
+O16386_CAEEL/879-1178  KLSVYERL.. ....TNELCY EMQIVF.... HPTSL..... ...PIPLHIA 
+O02095_CAEEL/574-878   PLWHLEQL.. ....TNDLCY DHQIVF.... HPVGL..... ...PVPLYIA 
+Q19645_CAEEL/674-996   DEHV.AKM.. ....VCAVCS LHQLVN.... SPTSI..... ...PTPVYVA 
+Q23415_CAEEL/40-350    MDRL.EEL.. ....TYTLCH HHQIVA.... LSTSI..... ...PTPLYVA 
+O62275_CAEEL/594-924   MTAL.EDI.. ....TYKLCH LHQIVG.... LPTSL..... ...PTPLYVA 
+
+YQ53_CAEEL/650-977     ENLAKRGRNN YK
+Q21691_CAEEL/673-1001  QNLAKRGHNN YK
+O48771_ARATH/542-860   HLAAAQVAQF TK
+Q9ZVD5_ARATH/577-885   HLAAAQLGTF MK
+TAG76_CAEEL/660-966    DLVATRARCH VK
+O16720_CAEEL/566-867   HLVAFRARYH LV
+PINH_ARATH/625-946     HLAAFRARFY LE
+AGO1_SCHPO/500-799     HLVSNLARYQ DV
+O76922_DROME/555-852   HKLAFLVAES IN
+PIWI_DROME/538-829     KKLATLVGTN LH
+Q17567_CAEEL/397-708   HKLAFLTAQS LH
+PIWL1_HUMAN/555-847    HKLAFLVGQS IH
+PIWI_ARCFU/110-406     KLVAGIIANV NR
+Y1321_METJA/426-699    DKFVKALGKN WK
+O67434_AQUAE/419-694   DKITKLMLRG IE
+Q21495_CAEEL/52-336    AEMAERGTKN LA
+O16386_CAEEL/548-847   GTYSERGSQM LA
+O16386_CAEEL/879-1178  GTYSERGSQM LA
+O02095_CAEEL/574-878   DRYSQRGAMV LA
+Q19645_CAEEL/674-996   HELAKRGTGL YK
+Q23415_CAEEL/40-350    NEYAKRGRDL WS
+O62275_CAEEL/594-924   NEYAKRGRNL WN
+
diff --git a/test/scripts/automated/blixem/Makefile.am b/test/scripts/automated/blixem/Makefile.am
new file mode 100644
index 0000000..d575d3c
--- /dev/null
+++ b/test/scripts/automated/blixem/Makefile.am
@@ -0,0 +1,12 @@
+
+SUBDIRS = .
+
+EXTRA_DIST = \
+test1 \
+test1_results \
+test2 \
+test2_results
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/test/scripts/automated/blixem/Makefile.in
diff --git a/test/scripts/automated/blixem/Makefile.in b/test/scripts/automated/blixem/Makefile.in
new file mode 100644
index 0000000..09d2971
--- /dev/null
+++ b/test/scripts/automated/blixem/Makefile.in
@@ -0,0 +1,590 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 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@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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 = :
+subdir = test/scripts/automated/blixem
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/./seqtools_version.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-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 \
+	tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+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@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPS_CFLAGS = @DEPS_CFLAGS@
+DEPS_LIBS = @DEPS_LIBS@
+DEPS_SQLITE3_CFLAGS = @DEPS_SQLITE3_CFLAGS@
+DEPS_SQLITE3_LIBS = @DEPS_SQLITE3_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+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_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+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_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+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@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = .
+EXTRA_DIST = \
+test1 \
+test1_results \
+test2 \
+test2_results
+
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/test/scripts/automated/blixem/Makefile.in
+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 test/scripts/automated/blixem/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign test/scripts/automated/blixem/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):
+
+# 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.
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	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"
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	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; \
+	$(am__define_uniq_tagged_files); \
+	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-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	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"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+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 \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    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:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+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."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-recursive
+
+clean-am: clean-generic 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
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+	check-am clean clean-generic cscopelist-am ctags ctags-am \
+	distclean distclean-generic 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 pdf \
+	pdf-am ps ps-am tags tags-am 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/test/scripts/automated/blixem/test1 b/test/scripts/automated/blixem/test1
new file mode 100755
index 0000000..16356e5
--- /dev/null
+++ b/test/scripts/automated/blixem/test1
@@ -0,0 +1,26 @@
+#!/bin/ksh
+#
+# Description:
+#   Test Blixem's --help option
+#
+# Results:
+#   The help text should be as documented in the results file
+#
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run blixem and check if there are any differences in output to the saved results
+diffs=`blixem -h 2>&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]] 
+then
+  RC=1
+fi
+
+exit $RC
diff --git a/test/scripts/automated/blixem/test1_results b/test/scripts/automated/blixem/test1_results
new file mode 100644
index 0000000..795fdc9
--- /dev/null
+++ b/test/scripts/automated/blixem/test1_results
@@ -0,0 +1,207 @@
+
+ Blixem - display multiple alignments against a reference sequence.
+
+ Usage: blixem [options] [<sequencefile>] <datafile> [X options] 
+
+   <sequencefile> contains the reference sequence in FASTA format.
+   <datafile> is a GFF v3 file containing alignments and other features.
+   If <sequencefile> is ommitted, <datafile> should contain the reference
+   sequence in FASTA format, below a comment line that reads ##FASTA.
+
+   Both <sequencefile> and <datafile> can be substituted by "-"
+   for reading from stdin (pipe).  If <sequencefile> is piped, the first
+   line should contain the sequence name and the second the sequence itself.
+
+
+ Options:
+  -t <type>, --display-type=<type>  MANDATORY
+    Whether to display sequences in nucleotide or protein mode. Must be one of:
+      N = nucleotide
+      P = protein
+
+  -a <names>, --alignment-names=<names>
+    Specify a string giving the names of the alignments, e.g. "EST_mouse EST_human" etc.
+
+  -c <file>, --config-file=<file>
+    Read configuration options from 'file'.
+
+  --compiled
+    Show package compile date.
+
+  --dataset
+    Optional string to indicate a data-set that the alignments are from.
+
+  --dotter-first-match
+    Call Dotter on the first match to the right of the default start coord.
+
+  --fetch-server <nodeid:port>
+    Causes Blixem to get sequences from a fetch server at machine 'nodeid' on the given
+    port (default 22100).
+
+  -h, --help
+    More detailed usage information.
+
+  --hide-big-picture
+    Hide the big picture section on start-up.
+
+  --hide-inactive-strand
+    Hide the inactive strand (i.e. the reverse strand, or the forward strand if the -R option
+    is used).
+
+  --highlight-diffs
+    Enable 'highlight differences' mode, where mismatches (rather than matches) are highlighted.
+
+  --invert-sort
+    Invert sorting order
+
+  -m <from[:to]>, --map-coords=<from[:to]>
+    Map the coordinate system so that the given 'from' coordinate maps to the given
+    'to' coordinate (or to '1' if 'to' is not given).
+
+  -n, --negate-coords
+    When showing the reverse strand, negate the display coordinates.
+
+  -o <n>, --offset=<n>
+    Offset the reference sequence coordinate system by n.
+
+  --optional-data
+    Parse additional data such as organism and tissue-type on start-up.
+
+  --remove-input-files
+    Delete the input files after they have been parsed.
+
+  -r, --reverse-strand
+    Indicates that the given reference sequence is the reverse strand.
+
+  --save-temp-files
+    Save any temporary files created by Blixem.
+
+  --show-coverage
+    Display the coverage section on start-up.
+
+  --sort-mode=<mode>
+    Default sort mode. Use --help option to see details.
+
+  --squash-matches
+    Compress the alignment lists on start-up.
+
+  -s <n>, --start-coord=<n>
+    Start with the display centred on coordinate n.
+
+  --start-next-match
+    Start with the display centred on the first match to the right of the default start coord.
+
+  --styles-file=<file>
+    Read color options from a key-value file. Use --help option to see details.
+
+  --version
+    Show package version number.
+
+  -z <start:end>, --zoom-range=<start:end>
+    Specify the initial range of coordinates to zoom the big picture in to.
+
+  --zoom-whole
+    Start with the big picture zoomed out to view the full reference sequence range.
+
+ Some X options:
+ -acefont <font> Main font.
+ -font    <font> Menu font.
+
+
+FEATURES
+  The prefered file format for <datafile> is GFF v3. (However, Blixem is still compatible with
+  older file formats such as exblx and seqbl, as used by MSPcrunch).
+
+  Blixem is mainly aimed at displaying alignments, but can also show other features such as
+  transcripts, variations and polyA tails. The supported SO terms are:
+    match
+    nucleotide_match
+    protein_match
+    match_part
+    match_set
+    transcript
+    primary_transcript
+    processed_transcript
+    mRNA
+    CDS
+    UTR
+    exon
+    intron
+    SNP
+    copy_number_variation
+    substitution
+    insertion
+    deletion
+    sequence_alteration
+    polyA_signal_sequence
+    polyA_site
+    read
+    region
+
+SORT MODE
+  The sort mode is specified with the --sort-mode=<mode> argument, where <mode> is
+  one of the following:
+    s = by Score
+    i = by Identity
+    n = by Name
+    p = by Position
+
+  If optional data is loaded on start-up using the --optional-data argument, then the following
+  sort modes are also valid:
+    t = by Tissue type
+    m = by Strain
+    g = by Gene name
+    o = by Organism
+
+COLOR KEY FILE
+  The color key file is specified with the -k <file> or --key-file=<file> argument. This is a .ini-
+  like file that specifies attributes such as fill and line colors for features from particular 
+  sources (say EST_Human or polya_signal). The file should contain one or more source stanzas followed
+  by one or more key=value pairs, i.e. 
+
+    [<source>]
+      <key>=<value>
+      ...
+
+  <value> is a hex color-string, e.g. #ff0000
+
+  Possible keys are:
+    fill_color                    (default fill color)
+    fill_color_selected           (fill color when selected) 
+    line_color                    (default line color)
+    line_color_selected           (line color when selected)
+    fill_color_utr                (default fill color for UTR regions)
+    fill_color_utr_selected       (fill color for UTR regions when selected) 
+    line_color_utr                (default line color for UTR regions)
+    line_color_utr_selected       (line color for UTR regions when selected)
+  Only fill_color and line_color are mandatory; the selection colors will be calculated automatically
+  if not specified (a darker shade of the default color will be used when the feature is selected).
+  For transcripts, the fill_color/line_color/etc items are used for CDS regions and different colors
+  can be specified for UTR regions using fill_color_utr, line_color_utr etc.
+
+MSPcrunch
+To make the datafile from blast output, run MSPcrunch with option -q.
+
+ o To pipe MSPcrunch output directly to Blixem, use "-"
+   as the second parameter ([datafile]).  Example:
+
+   MSPcrunch -q <my.blast_output> | blixem <my.seq> -
+
+ o The BLAST program (blastp, blastn, blastx, tblastn, tblastx)
+   is automatically detected from the Blast output header by MSPcrunch
+   and is passed on to Blixem in the seqbl format (-q).
+
+-----
+ Written by Gemma Barson <gb10 at sanger.ac.uk>
+ Based on original code by Erik Sonnhammer <Erik.Sonnhammer at sbc.su.se> 
+
+ Reference: Sonnhammer ELL & Durbin R (1994). A workbench for Large Scale
+            Sequence Homology Analysis. Comput. Applic. Biosci. 10:301-307.
+
+ See http://www.sanger.ac.uk/resources/software/seqtools/ for more info.
+
+ Copyright (c) 2009-2011: Genome Research Ltd.
+ Blixem is distributed under the GNU Public License; see http://www.gnu.org/copyleft/gpl.txt
+
+ Version 4.10-1-g6bff  17:38:25 Apr  4 2012
+
diff --git a/test/scripts/automated/blixem/test2 b/test/scripts/automated/blixem/test2
new file mode 100755
index 0000000..cf8c053
--- /dev/null
+++ b/test/scripts/automated/blixem/test2
@@ -0,0 +1,26 @@
+#!/bin/ksh
+#
+# Description:
+#   Test Blixem's usage text
+#
+# Results:
+#   The usage text should be as documented in the results file
+#
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+
+# Run blixem and check if there are any differences in output to the saved results
+diffs=`blixem 2>&1 | diff "$results_file" -`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]] 
+then
+  RC=1
+fi
+
+exit $RC
diff --git a/test/scripts/automated/blixem/test2_results b/test/scripts/automated/blixem/test2_results
new file mode 100644
index 0000000..b516f5a
--- /dev/null
+++ b/test/scripts/automated/blixem/test2_results
@@ -0,0 +1,123 @@
+
+ Blixem - display multiple alignments against a reference sequence.
+
+ Usage: blixem [options] [<sequencefile>] <datafile> [X options] 
+
+   <sequencefile> contains the reference sequence in FASTA format.
+   <datafile> is a GFF v3 file containing alignments and other features.
+   If <sequencefile> is ommitted, <datafile> should contain the reference
+   sequence in FASTA format, below a comment line that reads ##FASTA.
+
+   Both <sequencefile> and <datafile> can be substituted by "-"
+   for reading from stdin (pipe).  If <sequencefile> is piped, the first
+   line should contain the sequence name and the second the sequence itself.
+
+
+ Options:
+  -t <type>, --display-type=<type>  MANDATORY
+    Whether to display sequences in nucleotide or protein mode. Must be one of:
+      N = nucleotide
+      P = protein
+
+  -a <names>, --alignment-names=<names>
+    Specify a string giving the names of the alignments, e.g. "EST_mouse EST_human" etc.
+
+  -c <file>, --config-file=<file>
+    Read configuration options from 'file'.
+
+  --compiled
+    Show package compile date.
+
+  --dataset
+    Optional string to indicate a data-set that the alignments are from.
+
+  --dotter-first-match
+    Call Dotter on the first match to the right of the default start coord.
+
+  --fetch-server <nodeid:port>
+    Causes Blixem to get sequences from a fetch server at machine 'nodeid' on the given
+    port (default 22100).
+
+  -h, --help
+    More detailed usage information.
+
+  --hide-big-picture
+    Hide the big picture section on start-up.
+
+  --hide-inactive-strand
+    Hide the inactive strand (i.e. the reverse strand, or the forward strand if the -R option
+    is used).
+
+  --highlight-diffs
+    Enable 'highlight differences' mode, where mismatches (rather than matches) are highlighted.
+
+  --invert-sort
+    Invert sorting order
+
+  -m <from[:to]>, --map-coords=<from[:to]>
+    Map the coordinate system so that the given 'from' coordinate maps to the given
+    'to' coordinate (or to '1' if 'to' is not given).
+
+  -n, --negate-coords
+    When showing the reverse strand, negate the display coordinates.
+
+  -o <n>, --offset=<n>
+    Offset the reference sequence coordinate system by n.
+
+  --optional-data
+    Parse additional data such as organism and tissue-type on start-up.
+
+  --remove-input-files
+    Delete the input files after they have been parsed.
+
+  -r, --reverse-strand
+    Indicates that the given reference sequence is the reverse strand.
+
+  --save-temp-files
+    Save any temporary files created by Blixem.
+
+  --show-coverage
+    Display the coverage section on start-up.
+
+  --sort-mode=<mode>
+    Default sort mode. Use --help option to see details.
+
+  --squash-matches
+    Compress the alignment lists on start-up.
+
+  -s <n>, --start-coord=<n>
+    Start with the display centred on coordinate n.
+
+  --start-next-match
+    Start with the display centred on the first match to the right of the default start coord.
+
+  --styles-file=<file>
+    Read color options from a key-value file. Use --help option to see details.
+
+  --version
+    Show package version number.
+
+  -z <start:end>, --zoom-range=<start:end>
+    Specify the initial range of coordinates to zoom the big picture in to.
+
+  --zoom-whole
+    Start with the big picture zoomed out to view the full reference sequence range.
+
+ Some X options:
+ -acefont <font> Main font.
+ -font    <font> Menu font.
+
+-----
+ Written by Gemma Barson <gb10 at sanger.ac.uk>
+ Based on original code by Erik Sonnhammer <Erik.Sonnhammer at sbc.su.se> 
+
+ Reference: Sonnhammer ELL & Durbin R (1994). A workbench for Large Scale
+            Sequence Homology Analysis. Comput. Applic. Biosci. 10:301-307.
+
+ See http://www.sanger.ac.uk/resources/software/seqtools/ for more info.
+
+ Copyright (c) 2009-2011: Genome Research Ltd.
+ Blixem is distributed under the GNU Public License; see http://www.gnu.org/copyleft/gpl.txt
+
+ Version 4.10-1-g6bff  17:38:25 Apr  4 2012
+
diff --git a/test/scripts/automated/dotter/Makefile.am b/test/scripts/automated/dotter/Makefile.am
new file mode 100644
index 0000000..df63f7d
--- /dev/null
+++ b/test/scripts/automated/dotter/Makefile.am
@@ -0,0 +1,15 @@
+
+SUBDIRS = .
+
+EXTRA_DIST = \
+test1 \
+test1_results \
+test2 \
+test2_results \
+test3 \
+test3_results.dot \
+test3_results.pdf
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/test/scripts/automated/dotter/Makefile.in
diff --git a/test/scripts/automated/dotter/Makefile.in b/test/scripts/automated/dotter/Makefile.in
new file mode 100644
index 0000000..9c0a310
--- /dev/null
+++ b/test/scripts/automated/dotter/Makefile.in
@@ -0,0 +1,593 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 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@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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 = :
+subdir = test/scripts/automated/dotter
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/./seqtools_version.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-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 \
+	tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+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@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPS_CFLAGS = @DEPS_CFLAGS@
+DEPS_LIBS = @DEPS_LIBS@
+DEPS_SQLITE3_CFLAGS = @DEPS_SQLITE3_CFLAGS@
+DEPS_SQLITE3_LIBS = @DEPS_SQLITE3_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+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_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+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_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+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@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = .
+EXTRA_DIST = \
+test1 \
+test1_results \
+test2 \
+test2_results \
+test3 \
+test3_results.dot \
+test3_results.pdf
+
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/test/scripts/automated/dotter/Makefile.in
+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 test/scripts/automated/dotter/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign test/scripts/automated/dotter/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):
+
+# 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.
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	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"
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	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; \
+	$(am__define_uniq_tagged_files); \
+	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-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	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"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+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 \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    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:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+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."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-recursive
+
+clean-am: clean-generic 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
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+	check-am clean clean-generic cscopelist-am ctags ctags-am \
+	distclean distclean-generic 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 pdf \
+	pdf-am ps ps-am tags tags-am 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/test/scripts/automated/dotter/test1 b/test/scripts/automated/dotter/test1
new file mode 100755
index 0000000..69666fd
--- /dev/null
+++ b/test/scripts/automated/dotter/test1
@@ -0,0 +1,30 @@
+#!/bin/ksh
+#
+#
+# Description:
+#   Test Dotter in batch mode: export the dot-matrix.
+#
+# Results:
+#   The output file 'output.dot' should be the same as the file 'test1_result.dot'
+#
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+output_file="$test_dir"/"output.dot"
+
+# Run belvu and check if there are any differences to the saved results
+dotter -b $output_file -q 246634 -f $data_dir/chr4_dna_align.gff $data_dir/chr4_ref_seq_short.fasta $data_dir/DA730641.fasta
+diffs=`diff $results_file $output_file`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
diff --git a/test/scripts/automated/dotter/test1_results b/test/scripts/automated/dotter/test1_results
new file mode 100644
index 0000000..b807979
Binary files /dev/null and b/test/scripts/automated/dotter/test1_results differ
diff --git a/test/scripts/automated/dotter/test2 b/test/scripts/automated/dotter/test2
new file mode 100755
index 0000000..4245d1f
--- /dev/null
+++ b/test/scripts/automated/dotter/test2
@@ -0,0 +1,31 @@
+#!/bin/ksh
+#
+#
+# Description:
+#   Test Dotter in batch mode: export the plot to PDF
+#
+# Results:
+#   The output file 'output.pdf' should be the same as the file 'test2_result.pdf'
+#
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file="$test_dir/$test_name""_results"
+output_file="$test_dir"/"output.pdf"
+
+# Run belvu and check if there are any differences to the saved results
+dotter -e $output_file -q 246634 -f $data_dir/chr4_dna_align.gff $data_dir/chr4_ref_seq_short.fasta $data_dir/DA730641.fasta
+diffs=`diff $results_file $output_file`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  print "$test_name FAILED"
+  RC=1
+fi
+
+exit $RC
+
diff --git a/test/scripts/automated/dotter/test2_results b/test/scripts/automated/dotter/test2_results
new file mode 100644
index 0000000..6e0fa02
Binary files /dev/null and b/test/scripts/automated/dotter/test2_results differ
diff --git a/test/scripts/automated/dotter/test3 b/test/scripts/automated/dotter/test3
new file mode 100755
index 0000000..86798b3
--- /dev/null
+++ b/test/scripts/automated/dotter/test3
@@ -0,0 +1,47 @@
+#!/bin/ksh
+#
+#
+# Description:
+#   Test Dotter in batch mode: save both the dot-matrix and an exported PDF of the plot.
+#
+# Results:
+#   The output file 'output.dot' and 'output.pdf' should be the same as the files
+#   'test3_result.dot' and 'test3_result.pdf' respectively.
+#
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+results_file1="$test_dir/$test_name""_results.dot"
+results_file2="$test_dir/$test_name""_results.pdf"
+output_file1="$test_dir"/"output.dot"
+output_file2="$test_dir"/"output.pdf"
+
+# Run belvu and check if there are any differences to the saved results
+dotter -b $output_file1 -e $output_file2 -q 246634 -f $data_dir/chr4_dna_align.gff $data_dir/chr4_ref_seq_short.fasta $data_dir/DA730641.fasta
+diffs=`diff $results_file1 $output_file1`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  RC=1
+fi
+
+# Now check the second results file
+diffs=`diff $results_file2 $output_file2`
+
+# If there were any problems or differences, set RC
+if [[ $? -ne 0 || $diffs != "" ]]
+then
+  RC=1
+fi
+
+if [ $RC -eq 1 ]
+then
+  print "$test_name FAILED"
+fi
+
+exit $RC
+
diff --git a/test/scripts/automated/dotter/test3_results.dot b/test/scripts/automated/dotter/test3_results.dot
new file mode 100644
index 0000000..b807979
Binary files /dev/null and b/test/scripts/automated/dotter/test3_results.dot differ
diff --git a/test/scripts/automated/dotter/test3_results.pdf b/test/scripts/automated/dotter/test3_results.pdf
new file mode 100644
index 0000000..6e0fa02
Binary files /dev/null and b/test/scripts/automated/dotter/test3_results.pdf differ
diff --git a/test/scripts/manual/Makefile.am b/test/scripts/manual/Makefile.am
new file mode 100644
index 0000000..2bac533
--- /dev/null
+++ b/test/scripts/manual/Makefile.am
@@ -0,0 +1,8 @@
+
+SUBDIRS = belvu blixem dotter
+
+EXTRA_DIST = 
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/test/scripts/manual/Makefile.in
diff --git a/test/scripts/manual/Makefile.in b/test/scripts/manual/Makefile.in
new file mode 100644
index 0000000..e4b139b
--- /dev/null
+++ b/test/scripts/manual/Makefile.in
@@ -0,0 +1,585 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 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@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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 = :
+subdir = test/scripts/manual
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/./seqtools_version.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-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 \
+	tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+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@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPS_CFLAGS = @DEPS_CFLAGS@
+DEPS_LIBS = @DEPS_LIBS@
+DEPS_SQLITE3_CFLAGS = @DEPS_SQLITE3_CFLAGS@
+DEPS_SQLITE3_LIBS = @DEPS_SQLITE3_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+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_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+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_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+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@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = belvu blixem dotter
+EXTRA_DIST = 
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/test/scripts/manual/Makefile.in
+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 test/scripts/manual/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign test/scripts/manual/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):
+
+# 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.
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	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"
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	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; \
+	$(am__define_uniq_tagged_files); \
+	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-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	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"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+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 \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    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:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+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."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-recursive
+
+clean-am: clean-generic 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
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+	check-am clean clean-generic cscopelist-am ctags ctags-am \
+	distclean distclean-generic 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 pdf \
+	pdf-am ps ps-am tags tags-am 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/test/scripts/manual/belvu/Makefile.am b/test/scripts/manual/belvu/Makefile.am
new file mode 100644
index 0000000..2b7f903
--- /dev/null
+++ b/test/scripts/manual/belvu/Makefile.am
@@ -0,0 +1,8 @@
+
+SUBDIRS = .
+
+EXTRA_DIST = test1 test2 test3 test4 test5
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/test/scripts/manual/belvu/Makefile.in
diff --git a/test/scripts/manual/belvu/Makefile.in b/test/scripts/manual/belvu/Makefile.in
new file mode 100644
index 0000000..de6db20
--- /dev/null
+++ b/test/scripts/manual/belvu/Makefile.in
@@ -0,0 +1,585 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 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@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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 = :
+subdir = test/scripts/manual/belvu
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/./seqtools_version.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-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 \
+	tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+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@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPS_CFLAGS = @DEPS_CFLAGS@
+DEPS_LIBS = @DEPS_LIBS@
+DEPS_SQLITE3_CFLAGS = @DEPS_SQLITE3_CFLAGS@
+DEPS_SQLITE3_LIBS = @DEPS_SQLITE3_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+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_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+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_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+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@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = .
+EXTRA_DIST = test1 test2 test3 test4 test5
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/test/scripts/manual/belvu/Makefile.in
+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 test/scripts/manual/belvu/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign test/scripts/manual/belvu/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):
+
+# 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.
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	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"
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	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; \
+	$(am__define_uniq_tagged_files); \
+	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-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	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"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+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 \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    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:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+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."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-recursive
+
+clean-am: clean-generic 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
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+	check-am clean clean-generic cscopelist-am ctags ctags-am \
+	distclean distclean-generic 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 pdf \
+	pdf-am ps ps-am tags tags-am 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/test/scripts/manual/belvu/test1 b/test/scripts/manual/belvu/test1
new file mode 100755
index 0000000..7996fb0
--- /dev/null
+++ b/test/scripts/manual/belvu/test1
@@ -0,0 +1,26 @@
+#!/bin/ksh
+#
+# Description:
+#   Test that the residue colors and markup colors are loaded correctly
+#   on startup. Test loading both color files to check that they do not 
+#   interfere with each other.
+#
+# Results:
+#   The residues and markup letters should use the colors specified in 
+#   the input files.
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+
+belvu -l $data_dir/cgph_pale.color -L $data_dir/markup.color $data_dir/PF02171_seed.stock
+
+# If there was an error, set RC
+if [ $? -ne 0 ] 
+then
+  RC=1
+fi
+
+exit $RC
diff --git a/test/scripts/manual/belvu/test2 b/test/scripts/manual/belvu/test2
new file mode 100755
index 0000000..d1dcb67
--- /dev/null
+++ b/test/scripts/manual/belvu/test2
@@ -0,0 +1,25 @@
+#!/bin/ksh
+#
+# Description:
+#   Test that the residue colors and markup colors are loaded correctly
+#   on startup. The input files only specify a subset of the residues.
+#
+# Results:
+#   The residues and markup letters should use the colors specified in 
+#   the input files.
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+
+belvu -L $data_dir/markup2.color -l $data_dir/cgph_pale2.color $data_dir/PF02171_seed.stock
+
+# If there was an error, set RC
+if [ $? -ne 0 ] 
+then
+  RC=1
+fi
+
+exit $RC
diff --git a/test/scripts/manual/belvu/test3 b/test/scripts/manual/belvu/test3
new file mode 100755
index 0000000..ce498a2
--- /dev/null
+++ b/test/scripts/manual/belvu/test3
@@ -0,0 +1,24 @@
+#!/bin/ksh
+#
+# Description:
+#   Test reading a file without stripping coordinates
+#   from the sequence names
+#
+# Results:
+#   The sequence names should include the coordinates
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+
+belvu -Ti -R $data_dir/PF02171_seed.stock
+
+# If there was an error, set RC
+if [ $? -ne 0 ] 
+then
+  RC=1
+fi
+
+exit $RC
diff --git a/test/scripts/manual/belvu/test4 b/test/scripts/manual/belvu/test4
new file mode 100755
index 0000000..0bf69c1
--- /dev/null
+++ b/test/scripts/manual/belvu/test4
@@ -0,0 +1,24 @@
+#!/bin/ksh
+# Description:
+#   Test loading of match segments from a separate file
+#
+# Results:
+#   The match segment "seg_match" should appear in the alignment list
+#   with coordinates 3->30 and score 20.0. Its sequence is
+#   WLPLHTLinsertAACGEFYLVDSLLKH, starting at column 3.
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+
+belvu -T i -m $data_dir/PF02171_seed.segs $data_dir/PF02171_seed.stock
+
+# If there was an error, set RC
+if [ $? -ne 0 ] 
+then
+  RC=1
+fi
+
+exit $RC
diff --git a/test/scripts/manual/belvu/test5 b/test/scripts/manual/belvu/test5
new file mode 100755
index 0000000..d3d66f4
--- /dev/null
+++ b/test/scripts/manual/belvu/test5
@@ -0,0 +1,25 @@
+#!/bin/ksh
+#
+# Description: 
+#   Test loading of match segments from a match-footer section
+#
+# Results:
+#   The match segment "seg_match" should appear in the alignment list
+#   with coordinates 3->30 and score 20.0. Its sequence is
+#   WLPLHTLinsertAACGEFYLVDSLLKH, starting at column 3.
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+
+belvu -T i $data_dir/PF02171_seed_segs.stock
+
+# If there was an error, set RC
+if [ $? -ne 0 ] 
+then
+  RC=1
+fi
+
+exit $RC
diff --git a/test/scripts/manual/blixem/Makefile.am b/test/scripts/manual/blixem/Makefile.am
new file mode 100644
index 0000000..6391f10
--- /dev/null
+++ b/test/scripts/manual/blixem/Makefile.am
@@ -0,0 +1,8 @@
+
+SUBDIRS = .
+
+EXTRA_DIST = test1 test2
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/test/scripts/manual/blixem/Makefile.in
diff --git a/test/scripts/manual/blixem/Makefile.in b/test/scripts/manual/blixem/Makefile.in
new file mode 100644
index 0000000..724e02f
--- /dev/null
+++ b/test/scripts/manual/blixem/Makefile.in
@@ -0,0 +1,585 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 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@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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 = :
+subdir = test/scripts/manual/blixem
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/./seqtools_version.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-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 \
+	tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+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@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPS_CFLAGS = @DEPS_CFLAGS@
+DEPS_LIBS = @DEPS_LIBS@
+DEPS_SQLITE3_CFLAGS = @DEPS_SQLITE3_CFLAGS@
+DEPS_SQLITE3_LIBS = @DEPS_SQLITE3_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+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_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+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_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+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@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = .
+EXTRA_DIST = test1 test2
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/test/scripts/manual/blixem/Makefile.in
+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 test/scripts/manual/blixem/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign test/scripts/manual/blixem/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):
+
+# 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.
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	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"
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	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; \
+	$(am__define_uniq_tagged_files); \
+	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-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	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"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+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 \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    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:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+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."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-recursive
+
+clean-am: clean-generic 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
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+	check-am clean clean-generic cscopelist-am ctags ctags-am \
+	distclean distclean-generic 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 pdf \
+	pdf-am ps ps-am tags tags-am 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/test/scripts/manual/blixem/test1 b/test/scripts/manual/blixem/test1
new file mode 100755
index 0000000..73297bc
--- /dev/null
+++ b/test/scripts/manual/blixem/test1
@@ -0,0 +1,26 @@
+#!/bin/ksh
+#
+# Description:
+#   Test Blixem in nucleotide mode. Features include nucleotide matches, transcripts
+#   variations, polyA sites and signals
+#
+# Results:
+#   Blixem's graphical display should start up showing the alignments and transripts.
+#   Variations and polyA features can be displayed from the Settings dialog.
+#
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+
+blixem -t N -s 337622 -m 210623 -z 335873:338382 -n --dataset=human $data_dir/chr4_ref_seq.fasta $data_dir/chr4_dna_align.gff
+
+# If there was an error, set RC
+if [ $? -ne 0 ] 
+then
+  RC=1
+fi
+
+exit $RC
diff --git a/test/scripts/manual/blixem/test2 b/test/scripts/manual/blixem/test2
new file mode 100755
index 0000000..f8e4651
--- /dev/null
+++ b/test/scripts/manual/blixem/test2
@@ -0,0 +1,26 @@
+#!/bin/ksh
+#
+# Description:
+#   Test Blixem in protein mode. Features include protein matches, transcripts
+#   variations, polyA sites and signals
+#
+# Results:
+#   Blixem's graphical display should start up showing the alignments and transripts.
+#   Variations and polyA features can be displayed from the Settings dialog.
+#
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+
+blixem -t P -s 337622 -m 210623 -z 335873:338382 -n --dataset=human $data_dir/chr4_ref_seq.fasta $data_dir/chr4_protein_align.gff
+
+# If there was an error, set RC
+if [ $? -ne 0 ] 
+then
+  RC=1
+fi
+
+exit $RC
diff --git a/test/scripts/manual/dotter/Makefile.am b/test/scripts/manual/dotter/Makefile.am
new file mode 100644
index 0000000..e80c1a4
--- /dev/null
+++ b/test/scripts/manual/dotter/Makefile.am
@@ -0,0 +1,8 @@
+
+SUBDIRS = .
+
+EXTRA_DIST = test1 test2 test3 test4 test5 test6 test7 test8
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/test/scripts/manual/dotter/Makefile.in
diff --git a/test/scripts/manual/dotter/Makefile.in b/test/scripts/manual/dotter/Makefile.in
new file mode 100644
index 0000000..2d4246a
--- /dev/null
+++ b/test/scripts/manual/dotter/Makefile.in
@@ -0,0 +1,585 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 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@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+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 = :
+subdir = test/scripts/manual/dotter
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/./seqtools_version.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-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 \
+	tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+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@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPS_CFLAGS = @DEPS_CFLAGS@
+DEPS_LIBS = @DEPS_LIBS@
+DEPS_SQLITE3_CFLAGS = @DEPS_SQLITE3_CFLAGS@
+DEPS_SQLITE3_LIBS = @DEPS_SQLITE3_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+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@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+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_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+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_alias = @build_alias@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+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@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = .
+EXTRA_DIST = test1 test2 test3 test4 test5 test6 test7 test8
+
+# Extra files to remove for the maintainer-clean target.
+#
+MAINTAINERCLEANFILES = $(top_srcdir)/test/scripts/manual/dotter/Makefile.in
+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 test/scripts/manual/dotter/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign test/scripts/manual/dotter/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):
+
+# 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.
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	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"
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	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; \
+	$(am__define_uniq_tagged_files); \
+	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-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	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"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+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 \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    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:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+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."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-recursive
+
+clean-am: clean-generic 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
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+	check-am clean clean-generic cscopelist-am ctags ctags-am \
+	distclean distclean-generic 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 pdf \
+	pdf-am ps ps-am tags tags-am 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/test/scripts/manual/dotter/test1 b/test/scripts/manual/dotter/test1
new file mode 100755
index 0000000..ee4313e
--- /dev/null
+++ b/test/scripts/manual/dotter/test1
@@ -0,0 +1,30 @@
+#!/bin/ksh
+#
+# Description:
+#   Test Dotter in nucleotide->nucleotide mode. Tests the dot-matrix calculation as well
+#   as the display of transcripts and HSPs supplied via a features file.
+#
+# Results:
+#   Dotter's graphical display should start up, showing a dot-plot where strong matching regions
+#   between the two sequences are shown as diagonal lines. The greyramp tool can be used to adjust
+#   the contrast of the dot plot. Transcripts from the features file should be shown along the
+#   horizontal axis and HSPs from the features file can be displayed by enabling the relevant
+#   option in the View menu. Note that the pixelmap and HSPs will show matches against both strands
+#   of the reference sequence.
+#
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+
+dotter -q 246634 -f $data_dir/chr4_dna_align.gff $data_dir/chr4_ref_seq_short.fasta $data_dir/DA730641.fasta
+
+# If there was an error, set RC
+if [ $? -ne 0 ] 
+then
+  RC=1
+fi
+
+exit $RC
diff --git a/test/scripts/manual/dotter/test2 b/test/scripts/manual/dotter/test2
new file mode 100755
index 0000000..06b702f
--- /dev/null
+++ b/test/scripts/manual/dotter/test2
@@ -0,0 +1,30 @@
+#!/bin/ksh
+#
+# Description:
+#   Tests calling Dotter on a long sequence versus itself. Transcripts are supplied via a features
+#   file.
+#
+# Results:
+#   Dotter's graphical display should start up, showing a dot-plot where strong matching regions
+#   between the two sequences are shown as diagonal lines: since the two sequences match exactly, 
+#   there will be a diagonal line from the top-left to the bottom-right corner. Any other matching
+#   regions (i.e. internal repeats) will also display as diagonal lines.
+#
+#   Transcripts from the features file should be shown along both axes.
+#
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+
+dotter -q 246634 -s 246634 -f $data_dir/chr4_dna_align.gff $data_dir/chr4_ref_seq.fasta $data_dir/chr4_ref_seq.fasta
+
+# If there was an error, set RC
+if [ $? -ne 0 ] 
+then
+  RC=1
+fi
+
+exit $RC
diff --git a/test/scripts/manual/dotter/test3 b/test/scripts/manual/dotter/test3
new file mode 100755
index 0000000..12e72d7
--- /dev/null
+++ b/test/scripts/manual/dotter/test3
@@ -0,0 +1,30 @@
+#!/bin/ksh
+#
+# Description:
+#   Test Dotter in nucleotide->protein mode. Tests the dot-matrix calculation as well
+#   as the display of transcripts and HSPs supplied via a features file.
+#
+# Results:
+#   Dotter's graphical display should start up, showing a dot-plot where strong matching regions
+#   between the two sequences are shown as diagonal lines. The greyramp tool can be used to adjust
+#   the contrast of the dot plot. Transcripts from the features file should be shown along the
+#   horizontal axis and HSPs from the features file can be displayed by enabling the relevant
+#   option in the View menu (note that HSPs on both strands of the reference sequence are shown,
+#   but the pixelmap will only draw matches against the forward strand in protein mode).
+#
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+
+dotter -q 246634 -f $data_dir/chr4_protein_align.gff $data_dir/chr4_ref_seq.fasta $data_dir/Q9H8G1.fasta 
+
+# If there was an error, set RC
+if [ $? -ne 0 ] 
+then
+  RC=1
+fi
+
+exit $RC
diff --git a/test/scripts/manual/dotter/test4 b/test/scripts/manual/dotter/test4
new file mode 100755
index 0000000..9125907
--- /dev/null
+++ b/test/scripts/manual/dotter/test4
@@ -0,0 +1,27 @@
+#!/bin/ksh
+#
+# Description:
+#   Test Dotter in nucleotide->protein mode, using the reverse-complemented version of the 
+#   reference sequence. Also tests starting up in HSP mode.
+#
+# Results:
+#   Dotter starts up showing HSPs. Enable the pixelmap from the View menu to see if the alignments
+#   in the calculated dot-plot match the positions of the HSPs. HSPs for both strands will be shown,
+#   but the pixelmap will only show matches for the reverse strand.
+#
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+
+dotter -q 246634 -r -H -f $data_dir/chr4_protein_align.gff $data_dir/chr4_ref_seq.fasta $data_dir/Q9H8G1.fasta 
+
+# If there was an error, set RC
+if [ $? -ne 0 ] 
+then
+  RC=1
+fi
+
+exit $RC
diff --git a/test/scripts/manual/dotter/test5 b/test/scripts/manual/dotter/test5
new file mode 100755
index 0000000..805fa76
--- /dev/null
+++ b/test/scripts/manual/dotter/test5
@@ -0,0 +1,28 @@
+#!/bin/ksh
+#
+# Description:
+#   Test Dotter in nucleotide->nucleotide mode, using the reverse-complemented version of the input
+#   match sequence. Also tests starting up in HSP mode.
+#
+# Results:
+#   Dotter starts up showing HSPs. Enable the pixelmap from the View menu to see if the alignments
+#   in the calculated dot-plot match the positions of the HSPs. The pixelmap and the HSPs show 
+#   matches from the (reverse-complemented) match sequence against both strands of the reference
+#   sequence.
+#
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+
+dotter -q 246634 -v -H -f $data_dir/chr4_dna_align.gff $data_dir/chr4_ref_seq.fasta $data_dir/DA730641.fasta
+
+# If there was an error, set RC
+if [ $? -ne 0 ] 
+then
+  RC=1
+fi
+
+exit $RC
diff --git a/test/scripts/manual/dotter/test6 b/test/scripts/manual/dotter/test6
new file mode 100755
index 0000000..f5492a5
--- /dev/null
+++ b/test/scripts/manual/dotter/test6
@@ -0,0 +1,25 @@
+#!/bin/ksh
+#
+# Description:
+#   Test Dotter in protein->protein mode.
+#
+# Results:
+#   Dotter starts up showing the dot-plot pixelmap. Strong matches show as diagonal lines, e.g.
+#   there is a match starting at horizontal coord 82452 and vertical coord 111.
+#
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+
+dotter -q 82341 $data_dir/chr4_translation_frame1.fasta $data_dir/Q9H8G1.fasta
+
+# If there was an error, set RC
+if [ $? -ne 0 ] 
+then
+  RC=1
+fi
+
+exit $RC
diff --git a/test/scripts/manual/dotter/test7 b/test/scripts/manual/dotter/test7
new file mode 100755
index 0000000..d0d1ddc
--- /dev/null
+++ b/test/scripts/manual/dotter/test7
@@ -0,0 +1,26 @@
+#!/bin/ksh
+#
+# Description:
+#   Test loading of a saved dot-matrix.
+#
+# Results:
+#   Dotter should start up in graphical mode. You should be able to interact
+#   with the dot-plot as if it were created from the original sequences (test1).,
+#   including being able to adjust the contrast using the greyramp tool.
+#
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+
+dotter -l $data_dir/chr4_vs_DA730641.dot -q 246634 -f $data_dir/chr4_dna_align.gff $data_dir/chr4_ref_seq_short.fasta $data_dir/DA730641.fasta
+
+# If there was an error, set RC
+if [ $? -ne 0 ] 
+then
+  RC=1
+fi
+
+exit $RC
diff --git a/test/scripts/manual/dotter/test8 b/test/scripts/manual/dotter/test8
new file mode 100755
index 0000000..cbdb2e6
--- /dev/null
+++ b/test/scripts/manual/dotter/test8
@@ -0,0 +1,28 @@
+#!/bin/ksh
+#
+# Description:
+#   Tests loading a dot-matrix plot from file for a long sequence versus itself.
+#
+# Results:
+#   Dotter's graphical display should start up, showing the dot-plot. It should start
+#   almost instantly - much quicker than the same test where the plot is calculated
+#   from the input sequences (test2). You should be able to interact with the plot as
+#   if it were created from the original sequences, including being able to change
+#   the contrast using the greyramp tool.
+#
+
+RC=0
+
+test_name=`basename $0`
+test_dir=`dirname $0`
+data_dir=$test_dir/../../../data
+
+dotter -l $data_dir/chr4_vs_chr4.dot -q 246634 -s 246634 -f $data_dir/chr4_dna_align.gff $data_dir/chr4_ref_seq.fasta $data_dir/chr4_ref_seq.fasta
+
+# If there was an error, set RC
+if [ $? -ne 0 ] 
+then
+  RC=1
+fi
+
+exit $RC
diff --git a/test/test_plan.ods b/test/test_plan.ods
new file mode 100644
index 0000000..8021106
Binary files /dev/null and b/test/test_plan.ods differ

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



More information about the debian-med-commit mailing list